summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xaccessibility/inc/accessibility/extended/AccessibleGridControlTableBase.hxx8
-rwxr-xr-xaccessibility/source/extended/AccessibleGridControlTableBase.cxx13
-rw-r--r--accessibility/source/extended/accessibletabbarbase.cxx2
-rw-r--r--accessibility/source/extended/accessibletabbarpagelist.cxx2
-rw-r--r--automation/util/makefile.mk4
-rw-r--r--basctl/source/basicide/scriptdocument.cxx7
-rw-r--r--basic/inc/basic/sbmod.hxx10
-rw-r--r--basic/inc/basic/sbobjmod.hxx18
-rw-r--r--basic/inc/basic/sbx.hxx2
-rw-r--r--basic/inc/basic/sbxdef.hxx4
-rw-r--r--basic/inc/basic/sbxvar.hxx11
-rwxr-xr-xbasic/prj/build.lst2
-rw-r--r--basic/source/basmgr/basmgr.cxx2
-rw-r--r--basic/source/classes/disas.cxx3
-rwxr-xr-xbasic/source/classes/sb.cxx81
-rwxr-xr-x[-rw-r--r--]basic/source/classes/sbunoobj.cxx288
-rw-r--r--basic/source/classes/sbxmod.cxx64
-rw-r--r--basic/source/comp/dim.cxx75
-rw-r--r--basic/source/comp/exprgen.cxx6
-rw-r--r--basic/source/comp/exprnode.cxx14
-rw-r--r--basic/source/comp/exprtree.cxx72
-rw-r--r--basic/source/comp/io.cxx37
-rw-r--r--basic/source/comp/parser.cxx62
-rw-r--r--basic/source/comp/symtbl.cxx2
-rw-r--r--basic/source/comp/token.cxx58
-rw-r--r--basic/source/inc/codegen.hxx2
-rw-r--r--basic/source/inc/dlgcont.hxx9
-rw-r--r--basic/source/inc/expr.hxx20
-rw-r--r--basic/source/inc/namecont.hxx35
-rw-r--r--basic/source/inc/opcodes.hxx1
-rw-r--r--basic/source/inc/parser.hxx3
-rw-r--r--basic/source/inc/runtime.hxx5
-rw-r--r--basic/source/inc/sbintern.hxx3
-rw-r--r--basic/source/inc/scriptcont.hxx9
-rw-r--r--basic/source/inc/symtbl.hxx6
-rw-r--r--basic/source/inc/token.hxx20
-rw-r--r--basic/source/runtime/dllmgr.cxx1157
-rw-r--r--basic/source/runtime/dllmgr.hxx71
-rw-r--r--basic/source/runtime/makefile.mk21
-rw-r--r--basic/source/runtime/methods1.cxx15
-rw-r--r--basic/source/runtime/os2.asm103
-rw-r--r--basic/source/runtime/rtlproto.hxx1
-rwxr-xr-xbasic/source/runtime/runtime.cxx7
-rw-r--r--basic/source/runtime/stdobj.cxx7
-rw-r--r--basic/source/runtime/step0.cxx37
-rw-r--r--basic/source/runtime/step1.cxx9
-rw-r--r--basic/source/runtime/step2.cxx32
-rw-r--r--basic/source/runtime/win.asm80
-rw-r--r--basic/source/runtime/wnt-mingw.s98
-rw-r--r--basic/source/runtime/wnt.asm100
-rw-r--r--basic/source/sbx/sbxvar.cxx57
-rw-r--r--basic/source/uno/dlgcont.cxx11
-rw-r--r--basic/source/uno/namecont.cxx126
-rw-r--r--basic/source/uno/scriptcont.cxx142
-rw-r--r--basic/util/makefile.mk1
-rw-r--r--berkeleydb/makefile.mk8
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx2
-rw-r--r--cairo/cairo/makefile.mk4
-rw-r--r--cairo/pixman/makefile.mk2
-rw-r--r--chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx19
-rw-r--r--chart2/source/controller/dialogs/res_ErrorBar.cxx19
-rw-r--r--chart2/source/controller/dialogs/tp_ChartType.cxx26
-rw-r--r--chart2/source/controller/inc/res_ErrorBar.hxx1
-rw-r--r--chart2/source/controller/main/ControllerCommandDispatch.cxx23
-rw-r--r--chart2/source/tools/WrappedPropertySet.cxx14
-rw-r--r--comphelper/inc/comphelper/docpasswordhelper.hxx111
-rwxr-xr-x[-rw-r--r--]comphelper/inc/comphelper/docpasswordrequest.hxx23
-rw-r--r--comphelper/inc/comphelper/mediadescriptor.hxx51
-rw-r--r--comphelper/source/misc/comphelper_services.cxx2
-rw-r--r--comphelper/source/misc/docpasswordhelper.cxx233
-rw-r--r--comphelper/source/misc/docpasswordrequest.cxx86
-rw-r--r--comphelper/source/misc/makefile.mk1
-rw-r--r--comphelper/source/misc/mediadescriptor.cxx93
-rw-r--r--comphelper/source/misc/officerestartmanager.cxx210
-rw-r--r--comphelper/source/misc/officerestartmanager.hxx91
-rw-r--r--configmgr/source/components.cxx8
-rw-r--r--configure.in95
-rw-r--r--connectivity/qa/drivers/dbase/test.properties1
-rw-r--r--cppunit/makefile.mk50
-rw-r--r--cui/source/customize/macropg.cxx5
-rw-r--r--cui/source/customize/macropg.src26
-rw-r--r--cui/source/dialogs/cuihyperdlg.cxx1
-rwxr-xr-x[-rw-r--r--]cui/source/dialogs/makefile.mk2
-rwxr-xr-xcui/source/dialogs/passwdomdlg.cxx343
-rwxr-xr-xcui/source/dialogs/passwdomdlg.hrc61
-rwxr-xr-xcui/source/dialogs/passwdomdlg.src228
-rwxr-xr-x[-rw-r--r--]cui/source/factory/dlgfact.cxx25
-rwxr-xr-x[-rw-r--r--]cui/source/factory/dlgfact.hxx15
-rwxr-xr-x[-rw-r--r--]cui/source/inc/cuires.hrc11
-rwxr-xr-xcui/source/inc/helpid.hrc13
-rwxr-xr-x[-rw-r--r--]cui/source/inc/passwdomdlg.hxx (renamed from writerfilter/source/dmapper/LFOTable.hxx)57
-rw-r--r--cui/source/options/optfltr.src8
-rwxr-xr-x[-rw-r--r--]cui/source/options/optinet2.cxx216
-rwxr-xr-x[-rw-r--r--]cui/source/options/optinet2.hrc6
-rwxr-xr-x[-rw-r--r--]cui/source/options/optinet2.hxx12
-rwxr-xr-x[-rw-r--r--]cui/source/options/optinet2.src31
-rw-r--r--cui/util/hidother.src2
-rw-r--r--curl/makefile.mk6
-rwxr-xr-x[-rw-r--r--]dbaccess/source/core/dataaccess/datasource.cxx37
-rwxr-xr-xdbaccess/source/inc/OAuthenticationContinuation.hxx82
-rwxr-xr-x[-rw-r--r--]dbaccess/source/ui/dlg/DbAdminImpl.cxx80
-rwxr-xr-x[-rw-r--r--]dbaccess/source/ui/uno/dbinteraction.cxx3
-rw-r--r--default_images/oracleirm/res/irmprotecteditem.bmp0
-rw-r--r--desktop/inc/app.hxx5
-rw-r--r--desktop/inc/deployment.hrc1
-rw-r--r--desktop/prj/build.lst3
-rw-r--r--desktop/scripts/soffice.sh9
-rw-r--r--desktop/source/app/app.cxx38
-rwxr-xr-x[-rw-r--r--]desktop/source/app/check_ext_deps.cxx305
-rw-r--r--desktop/source/app/makefile.mk14
-rw-r--r--desktop/source/deployment/dp_services.cxx19
-rw-r--r--desktop/source/deployment/gui/dp_gui.h9
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui.hrc3
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_dialog.src20
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_dialog2.cxx170
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_dialog2.hxx40
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx203
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx13
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_extlistbox.cxx100
-rwxr-xr-xdesktop/source/deployment/gui/dp_gui_extlistbox.hxx26
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_service.cxx2
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_theextmgr.cxx179
-rwxr-xr-x[-rw-r--r--]desktop/source/deployment/gui/dp_gui_theextmgr.hxx22
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedata.hxx40
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.cxx403
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.hxx25
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.src12
-rw-r--r--desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx50
-rw-r--r--desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx6
-rw-r--r--desktop/source/deployment/gui/license_dialog.cxx11
-rw-r--r--desktop/source/deployment/gui/license_dialog.hxx1
-rw-r--r--desktop/source/deployment/inc/dp_descriptioninfoset.hxx15
-rw-r--r--desktop/source/deployment/inc/dp_misc.h33
-rw-r--r--desktop/source/deployment/inc/dp_ucb.h7
-rwxr-xr-xdesktop/source/deployment/inc/dp_update.hxx147
-rw-r--r--desktop/source/deployment/inc/dp_version.hxx7
-rw-r--r--desktop/source/deployment/makefile.mk1
-rw-r--r--desktop/source/deployment/manager/dp_activepackages.cxx28
-rw-r--r--desktop/source/deployment/manager/dp_activepackages.hxx19
-rw-r--r--desktop/source/deployment/manager/dp_commandenvironments.cxx286
-rw-r--r--desktop/source/deployment/manager/dp_commandenvironments.hxx160
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.cxx1361
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.hxx307
-rw-r--r--desktop/source/deployment/manager/dp_informationprovider.cxx380
-rw-r--r--desktop/source/deployment/manager/dp_manager.cxx909
-rw-r--r--desktop/source/deployment/manager/dp_manager.h69
-rw-r--r--desktop/source/deployment/manager/dp_manager.hrc2
-rw-r--r--desktop/source/deployment/manager/dp_manager.src4
-rw-r--r--desktop/source/deployment/manager/dp_managerfac.cxx4
-rw-r--r--desktop/source/deployment/manager/dp_properties.cxx169
-rw-r--r--desktop/source/deployment/manager/dp_properties.hxx81
-rw-r--r--desktop/source/deployment/manager/makefile.mk5
-rw-r--r--desktop/source/deployment/migration/dp_migration.cxx251
-rw-r--r--desktop/source/deployment/migration/makefile.mk41
-rw-r--r--desktop/source/deployment/misc/dp_descriptioninfoset.cxx250
-rw-r--r--desktop/source/deployment/misc/dp_misc.cxx177
-rw-r--r--desktop/source/deployment/misc/dp_ucb.cxx46
-rwxr-xr-xdesktop/source/deployment/misc/dp_update.cxx397
-rw-r--r--desktop/source/deployment/misc/dp_version.cxx6
-rw-r--r--desktop/source/deployment/misc/makefile.mk6
-rw-r--r--desktop/source/deployment/registry/component/dp_compbackenddb.cxx156
-rw-r--r--desktop/source/deployment/registry/component/dp_compbackenddb.hxx120
-rw-r--r--desktop/source/deployment/registry/component/dp_component.cxx540
-rw-r--r--desktop/source/deployment/registry/component/makefile.mk3
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configuration.cxx275
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx186
-rw-r--r--desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx96
-rw-r--r--desktop/source/deployment/registry/configuration/makefile.mk3
-rw-r--r--desktop/source/deployment/registry/dp_backend.cxx274
-rw-r--r--desktop/source/deployment/registry/dp_backenddb.cxx649
-rw-r--r--desktop/source/deployment/registry/dp_registry.cxx35
-rw-r--r--desktop/source/deployment/registry/executable/dp_executable.cxx94
-rw-r--r--desktop/source/deployment/registry/executable/dp_executablebackenddb.cxx84
-rw-r--r--desktop/source/deployment/registry/executable/dp_executablebackenddb.hxx79
-rw-r--r--desktop/source/deployment/registry/executable/makefile.mk3
-rw-r--r--desktop/source/deployment/registry/help/dp_help.cxx318
-rw-r--r--desktop/source/deployment/registry/help/dp_helpbackenddb.cxx178
-rw-r--r--desktop/source/deployment/registry/help/dp_helpbackenddb.hxx92
-rw-r--r--desktop/source/deployment/registry/help/makefile.mk3
-rw-r--r--desktop/source/deployment/registry/inc/dp_backend.h105
-rw-r--r--desktop/source/deployment/registry/inc/dp_backenddb.hxx170
-rw-r--r--desktop/source/deployment/registry/makefile.mk3
-rw-r--r--desktop/source/deployment/registry/package/dp_description.cxx205
-rw-r--r--desktop/source/deployment/registry/package/dp_description.hxx125
-rw-r--r--desktop/source/deployment/registry/package/dp_extbackenddb.cxx135
-rw-r--r--desktop/source/deployment/registry/package/dp_extbackenddb.hxx96
-rw-r--r--desktop/source/deployment/registry/package/dp_package.cxx568
-rw-r--r--desktop/source/deployment/registry/package/makefile.mk2
-rw-r--r--desktop/source/deployment/registry/script/dp_script.cxx304
-rw-r--r--desktop/source/deployment/registry/script/dp_scriptbackenddb.cxx88
-rw-r--r--desktop/source/deployment/registry/script/dp_scriptbackenddb.hxx (renamed from sd/source/ui/inc/printdialog.hxx)63
-rw-r--r--desktop/source/deployment/registry/script/makefile.mk3
-rw-r--r--desktop/source/deployment/registry/sfwk/dp_sfwk.cxx24
-rw-r--r--desktop/source/deployment/unopkg/unopkg.src7
-rw-r--r--desktop/source/inc/exithelper.hxx2
-rwxr-xr-x[-rw-r--r--]desktop/source/migration/migration.cxx2
-rw-r--r--desktop/source/migration/services/cexports.cxx12
-rwxr-xr-xdesktop/source/migration/services/extensionmigration.cxx540
-rwxr-xr-xdesktop/source/migration/services/extensionmigration.hxx130
-rw-r--r--desktop/source/migration/services/makefile.mk2
-rw-r--r--desktop/source/migration/services/oo3extensionmigration.cxx15
-rw-r--r--desktop/source/migration/services/oo3extensionmigration.hxx4
-rw-r--r--desktop/source/offacc/acceptor.cxx6
-rw-r--r--desktop/source/offacc/acceptor.hxx1
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_app.cxx254
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx57
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_misc.cxx42
-rw-r--r--desktop/source/pkgchk/unopkg/unopkg_shared.h10
-rw-r--r--desktop/source/splash/splash.cxx27
-rw-r--r--desktop/source/splash/splash.hxx1
-rwxr-xr-xdesktop/unx/source/officeloader/officeloader.cxx2
-rw-r--r--desktop/util/makefile.mk2
-rw-r--r--desktop/win32/source/officeloader/officeloader.cxx11
-rw-r--r--editeng/source/uno/unotext.cxx13
-rw-r--r--extensions/source/scanner/sane.cxx5
-rwxr-xr-xextensions/source/update/check/updatecheck.cxx3
-rw-r--r--external/gcc3_specific/makefile.mk8
-rw-r--r--external/glibc-2.1.3.patch11
-rw-r--r--external/glibc/makefile.mk15
-rw-r--r--external/prj/d.lst6
-rw-r--r--extras/source/wordbook/delzip1
-rw-r--r--extras/source/wordbook/makefile.mk2
-rw-r--r--extras/source/wordbook/oracle.dic626
-rw-r--r--extras/source/wordbook/sun.dicbin751 -> 0 bytes
-rw-r--r--filter/inc/filter/msfilter/msvbahelper.hxx3
-rw-r--r--filter/source/config/cache/constant.hxx40
-rw-r--r--filter/source/config/cache/filtercache.cxx12
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_97.xcu2
-rw-r--r--filter/source/config/fragments/filters/MS_Excel_97_Vorlage_Template.xcu2
-rw-r--r--filter/source/config/fragments/filters/MS_PowerPoint_97.xcu2
-rw-r--r--filter/source/config/fragments/filters/MS_PowerPoint_97_Vorlage.xcu2
-rw-r--r--filter/source/config/fragments/filters/MS_Word_97.xcu2
-rw-r--r--filter/source/config/fragments/filters/MS_Word_97_Vorlage.xcu2
-rw-r--r--filter/source/config/fragments/filters/MathML_XML__Math_.xcu2
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Base_.xcu2
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Calc_.xcu2
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Chart_.xcu2
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Draw_.xcu2
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Impress_.xcu2
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Math_.xcu2
-rw-r--r--filter/source/config/fragments/filters/StarOffice_XML__Writer_.xcu2
-rw-r--r--filter/source/config/fragments/filters/calc8.xcu2
-rw-r--r--filter/source/config/fragments/filters/calc8_template.xcu2
-rw-r--r--filter/source/config/fragments/filters/calc_StarOffice_XML_Calc_Template.xcu2
-rw-r--r--filter/source/config/fragments/filters/chart8.xcu2
-rw-r--r--filter/source/config/fragments/filters/draw8.xcu2
-rw-r--r--filter/source/config/fragments/filters/draw8_template.xcu2
-rw-r--r--filter/source/config/fragments/filters/draw_StarOffice_XML_Draw_Template.xcu2
-rw-r--r--filter/source/config/fragments/filters/impress8.xcu2
-rw-r--r--filter/source/config/fragments/filters/impress8_draw.xcu2
-rw-r--r--filter/source/config/fragments/filters/impress8_template.xcu2
-rw-r--r--filter/source/config/fragments/filters/impress_StarOffice_XML_Draw.xcu2
-rw-r--r--filter/source/config/fragments/filters/impress_StarOffice_XML_Impress_Template.xcu2
-rw-r--r--filter/source/config/fragments/filters/math8.xcu2
-rw-r--r--filter/source/config/fragments/filters/writer8.xcu2
-rw-r--r--filter/source/config/fragments/filters/writer8_template.xcu2
-rw-r--r--filter/source/config/fragments/filters/writer_StarOffice_XML_Writer_Template.xcu2
-rw-r--r--filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer.xcu2
-rw-r--r--filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument.xcu2
-rw-r--r--filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer.xcu2
-rw-r--r--filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_Web_Template.xcu2
-rw-r--r--filter/source/config/fragments/filters/writerglobal8.xcu2
-rw-r--r--filter/source/config/fragments/filters/writerglobal8_writer.xcu2
-rw-r--r--filter/source/config/fragments/filters/writerweb8_writer.xcu2
-rw-r--r--filter/source/config/fragments/filters/writerweb8_writer_template.xcu2
-rw-r--r--filter/source/msfilter/msvbahelper.cxx31
-rw-r--r--filter/source/msfilter/msvbasic.cxx71
-rw-r--r--filter/source/msfilter/svdfppt.cxx2
-rw-r--r--filter/source/msfilter/svxmsbas.cxx5
-rw-r--r--filter/source/xslt/export/spreadsheetml/formular.xsl6
-rw-r--r--filter/source/xslt/export/spreadsheetml/ooo2spreadsheetml.xsl180
-rw-r--r--filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl215
-rw-r--r--filter/source/xsltfilter/makefile.mk2
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx2
-rw-r--r--fpicker/source/aqua/FilterHelper.cxx11
-rw-r--r--fpicker/source/aqua/NSURL_OOoAdditions.hxx13
-rw-r--r--fpicker/source/aqua/NSURL_OOoAdditions.mm30
-rw-r--r--fpicker/source/unx/gnome/SalGtkFilePicker.cxx83
-rw-r--r--fpicker/source/unx/gnome/SalGtkFolderPicker.cxx16
-rw-r--r--fpicker/source/unx/gnome/SalGtkPicker.cxx21
-rw-r--r--fpicker/source/unx/gnome/SalGtkPicker.hxx7
-rw-r--r--fpicker/source/unx/gnome/resourceprovider.cxx2
-rw-r--r--framework/inc/filterflags.h172
-rw-r--r--framework/inc/queries.h1
-rw-r--r--framework/inc/threadhelp/transactionmanager.hxx1
-rw-r--r--framework/source/constant/filter.cxx119
-rw-r--r--framework/source/constant/makefile.mk3
-rw-r--r--framework/source/inc/constant/filter.hxx126
-rw-r--r--framework/source/loadenv/loadenv.cxx8
-rw-r--r--framework/source/services/backingwindow.cxx9
-rw-r--r--framework/source/services/backingwindow.hxx1
-rw-r--r--framework/source/services/frame.cxx3
-rw-r--r--framework/source/threadhelp/transactionmanager.cxx36
-rw-r--r--framework/util/makefile.mk1
-rw-r--r--graphite/makefile.mk4
-rw-r--r--hunspell/hunspell-mingw.patch12
-rw-r--r--hunspell/makefile.mk5
-rw-r--r--i18npool/inc/i18npool/lang.h4
-rw-r--r--i18npool/source/breakiterator/data/char_in.txt112
-rw-r--r--i18npool/source/isolang/isolang.cxx61
-rwxr-xr-xi18npool/source/isolang/langid.pl55
-rw-r--r--i18npool/source/isolang/mslangid.cxx10
-rw-r--r--i18npool/source/localedata/LocaleNode.cxx12
-rw-r--r--i18npool/source/localedata/data/ar_DZ.xml437
-rw-r--r--i18npool/source/localedata/data/localedata_euro.map17
-rw-r--r--i18npool/source/localedata/data/localedata_others.map34
-rw-r--r--i18npool/source/localedata/data/ltg_LV.xml22
-rw-r--r--i18npool/source/localedata/data/lv_LV.xml14
-rw-r--r--i18npool/source/localedata/data/mai_IN.xml357
-rw-r--r--i18npool/source/localedata/data/makefile.mk8
-rw-r--r--i18npool/source/localedata/data/rue_SK.xml359
-rw-r--r--i18npool/source/localedata/localedata.cxx3
-rw-r--r--i18npool/source/localedata/saxparser.cxx9
-rw-r--r--i18npool/source/paper/paper.cxx53
-rw-r--r--icu/makefile.mk1
-rw-r--r--idlc/source/preproc/getopt.c94
-rw-r--r--idlc/source/preproc/makefile.mk7
-rw-r--r--idlc/source/preproc/nlist.c3
-rw-r--r--idlc/source/preproc/tokens.c6
-rw-r--r--idlc/source/preproc/unix.c7
-rw-r--r--instsetoo_native/util/makefile.mk1
-rw-r--r--instsetoo_native/util/openoffice.lst9
-rw-r--r--[-rwxr-xr-x]javainstaller2/src/Properties/setupfiles_template.properties1
-rw-r--r--[-rwxr-xr-x]javainstaller2/src/Properties/setupstrings_template.properties1
-rw-r--r--javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java11
-rw-r--r--jvmfwk/inc/jvmfwk/framework.h7
-rw-r--r--l10ntools/java/jpropex/java/JPropEx.java96
-rw-r--r--l10ntools/java/jpropex/java/NoLocalizeFilter.java2
-rw-r--r--l10ntools/java/jpropex/java/SdfData.java3
-rw-r--r--l10ntools/source/export2.cxx5
-rw-r--r--l10ntools/source/help/HelpLinker.cxx23
-rw-r--r--l10ntools/source/help/compilehelp.hxx1
-rw-r--r--l10ntools/source/localize.cxx2
-rw-r--r--l10ntools/source/merge.cxx3
-rw-r--r--l10ntools/source/xrmlex.l55
-rw-r--r--l10ntools/source/xrmmerge.cxx77
-rw-r--r--[-rwxr-xr-x]libxml2/libxml2-mingw.patch24
-rw-r--r--libxml2/makefile.mk6
-rw-r--r--libxmlsec/makefile.mk6
-rw-r--r--libxmlsec/xmlsec1-customkeymanage.patch3
-rw-r--r--libxmlsec/xmlsec1-mingw32.patch456
-rw-r--r--libxslt/libxslt-mingw.patch36
-rw-r--r--libxslt/makefile.mk7
-rw-r--r--lingucomponent/prj/build.lst5
-rw-r--r--lingucomponent/source/spellcheck/spell/sspellimp.cxx7
-rw-r--r--lingucomponent/source/thesaurus/mythes/Makefile39
-rw-r--r--lingucomponent/source/thesaurus/mythes/README60
-rw-r--r--lingucomponent/source/thesaurus/mythes/checkme.lst4
-rw-r--r--lingucomponent/source/thesaurus/mythes/data_layout.txt131
-rw-r--r--lingucomponent/source/thesaurus/mythes/example.cxx128
-rw-r--r--lingucomponent/source/thesaurus/mythes/license.readme34
-rw-r--r--lingucomponent/source/thesaurus/mythes/mythes.cxx403
-rw-r--r--lingucomponent/source/thesaurus/mythes/mythes.hxx76
-rw-r--r--mdds/makefile.mk (renamed from lingucomponent/source/thesaurus/mythes/makefile.mk)43
-rw-r--r--mdds/prj/build.lst3
-rw-r--r--mdds/prj/d.lst5
-rw-r--r--migrationanalysis/no_localization1
-rw-r--r--mythes/makefile.mk115
-rw-r--r--mythes/mythes-1.2.0-makefile-mk.diff94
-rw-r--r--mythes/mythes-1.2.0-vanilla-th-gen-idx.patch97
-rw-r--r--mythes/prj/build.lst3
-rw-r--r--mythes/prj/d.lst7
-rw-r--r--odk/docs/images/sdk_head-1.pngbin12367 -> 11767 bytes
-rw-r--r--odk/docs/install.html10
-rw-r--r--odk/docs/notsupported.html2
-rw-r--r--odk/docs/tools.html4
-rw-r--r--odk/examples/DevelopersGuide/examples.html42
-rw-r--r--odk/examples/examples.html42
-rw-r--r--odk/index.html20
-rw-r--r--odk/pack/copying/makefile.mk2
-rw-r--r--odk/settings/std.mk10
-rw-r--r--odk/util/odk_rules.pmk6
-rw-r--r--offapi/com/sun/star/deployment/ExtensionManager.idl (renamed from xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParsingException.java)31
-rw-r--r--offapi/com/sun/star/deployment/ExtensionRemovedException.idl53
-rw-r--r--offapi/com/sun/star/deployment/InstallException.idl5
-rw-r--r--offapi/com/sun/star/deployment/InvalidRemovedParameterException.idl65
-rw-r--r--offapi/com/sun/star/deployment/LicenseException.idl11
-rw-r--r--offapi/com/sun/star/deployment/Prerequisites.idl (renamed from sd/source/ui/dlg/printdialog.hrc)34
-rw-r--r--offapi/com/sun/star/deployment/VersionException.idl10
-rw-r--r--offapi/com/sun/star/deployment/XExtensionManager.idl342
-rw-r--r--offapi/com/sun/star/deployment/XPackage.idl93
-rw-r--r--offapi/com/sun/star/deployment/XPackageManager.idl107
-rw-r--r--offapi/com/sun/star/deployment/XPackageManagerFactory.idl2
-rw-r--r--offapi/com/sun/star/deployment/XPackageRegistry.idl46
-rw-r--r--offapi/com/sun/star/deployment/XPackageTypeInfo.idl8
-rw-r--r--offapi/com/sun/star/deployment/makefile.mk42
-rw-r--r--offapi/com/sun/star/deployment/thePackageManagerFactory.idl2
-rw-r--r--offapi/com/sun/star/deployment/ui/LicenseDialog.idl4
-rw-r--r--offapi/com/sun/star/document/MediaDescriptor.idl5
-rw-r--r--offapi/com/sun/star/embed/XVisualObject.idl18
-rw-r--r--offapi/com/sun/star/script/XLibraryContainer3.idl69
-rw-r--r--offapi/com/sun/star/script/makefile.mk1
-rw-r--r--offapi/com/sun/star/sheet/FunctionAccess.idl26
-rw-r--r--offapi/com/sun/star/sheet/NoConvergenceException.idl (renamed from svtools/source/dialogs/logindlg.hrc)53
-rw-r--r--offapi/com/sun/star/sheet/Spreadsheet.idl5
-rw-r--r--offapi/com/sun/star/sheet/makefile.mk1
-rw-r--r--offapi/com/sun/star/style/NumberingType.idl10
-rwxr-xr-xoffapi/com/sun/star/task/DocumentMSPasswordRequest2.idl68
-rwxr-xr-xoffapi/com/sun/star/task/DocumentPasswordRequest2.idl67
-rw-r--r--offapi/com/sun/star/task/OfficeRestartManager.idl (renamed from xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcConstants.java)35
-rw-r--r--offapi/com/sun/star/task/XInteractionPassword2.idl80
-rw-r--r--offapi/com/sun/star/task/XRestartManager.idl99
-rwxr-xr-x[-rw-r--r--]offapi/com/sun/star/task/makefile.mk5
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Common.xcu5
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Paths.xcu8
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu13
-rw-r--r--officecfg/registry/data/org/openoffice/VCL.xcu44
-rw-r--r--officecfg/registry/schema/oo-ldap-attr-map.properties1
-rw-r--r--officecfg/registry/schema/oo-org-map.properties1
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Common.xcs13
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs2
-rwxr-xr-xofficecfg/registry/schema/org/openoffice/Office/OOoImprovement/Settings.xcs2
-rw-r--r--oovbaapi/ooo/vba/XApplicationBase.idl8
-rw-r--r--oovbaapi/ooo/vba/XCollection.idl1
-rw-r--r--oovbaapi/ooo/vba/XCommandBarControl.idl1
-rw-r--r--oovbaapi/ooo/vba/XDocumentBase.idl3
-rwxr-xr-xoovbaapi/ooo/vba/XVBAAppService.idl72
-rwxr-xr-xoovbaapi/ooo/vba/XVBADocService.idl72
-rwxr-xr-xoovbaapi/ooo/vba/excel/SheetObject.idl131
-rwxr-xr-xoovbaapi/ooo/vba/excel/SheetObjects.idl150
-rw-r--r--oovbaapi/ooo/vba/excel/XApplication.idl19
-rw-r--r--oovbaapi/ooo/vba/excel/XComment.idl13
-rw-r--r--oovbaapi/ooo/vba/excel/XHyperlink.idl27
-rwxr-xr-xoovbaapi/ooo/vba/excel/XHyperlinks.idl (renamed from xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XFilterAdapter.idl)67
-rw-r--r--oovbaapi/ooo/vba/excel/XPane.idl7
-rw-r--r--oovbaapi/ooo/vba/excel/XRange.idl3
-rw-r--r--oovbaapi/ooo/vba/excel/XWindow.idl10
-rw-r--r--oovbaapi/ooo/vba/excel/XWorksheet.idl21
-rw-r--r--oovbaapi/ooo/vba/excel/makefile.mk3
-rw-r--r--oovbaapi/ooo/vba/makefile.mk5
-rw-r--r--oovbaapi/ooo/vba/msforms/XControl.idl6
-rw-r--r--oovbaapi/ooo/vba/msforms/XControls.idl7
-rw-r--r--oovbaapi/prj/d.lst14
-rw-r--r--oox/inc/oox/core/filterbase.hxx12
-rw-r--r--oox/inc/oox/core/filterdetect.hxx1
-rw-r--r--oox/inc/oox/dump/dumperbase.hxx2
-rw-r--r--oox/inc/oox/helper/attributelist.hxx91
-rw-r--r--oox/inc/oox/helper/graphichelper.hxx22
-rwxr-xr-xoox/inc/oox/ole/axbinaryreader.hxx20
-rw-r--r--oox/inc/oox/ole/axcontrol.hxx72
-rwxr-xr-xoox/inc/oox/ole/vbacontrol.hxx8
-rw-r--r--oox/inc/oox/vml/vmldrawing.hxx10
-rw-r--r--oox/inc/oox/vml/vmlformatting.hxx1
-rw-r--r--oox/inc/oox/vml/vmlshape.hxx20
-rw-r--r--oox/inc/oox/vml/vmlshapecontainer.hxx4
-rw-r--r--oox/inc/oox/vml/vmlshapecontext.hxx3
-rw-r--r--oox/inc/oox/xls/biffhelper.hxx2
-rw-r--r--oox/inc/oox/xls/drawingfragment.hxx5
-rw-r--r--oox/inc/oox/xls/viewsettings.hxx20
-rw-r--r--oox/inc/oox/xls/workbooksettings.hxx4
-rw-r--r--oox/inc/oox/xls/worksheethelper.hxx11
-rw-r--r--[-rwxr-xr-x]oox/source/core/filterbase.cxx53
-rw-r--r--oox/source/core/filterdetect.cxx10
-rw-r--r--oox/source/docprop/docprophandler.cxx2
-rw-r--r--oox/source/drawingml/fillpropertiesgroupcontext.cxx3
-rw-r--r--oox/source/drawingml/graphicshapecontext.cxx3
-rw-r--r--oox/source/drawingml/textbodyproperties.cxx5
-rw-r--r--oox/source/dump/biffdumper.cxx5
-rw-r--r--oox/source/dump/biffdumper.ini1
-rw-r--r--oox/source/dump/dumperbase.ini2
-rw-r--r--oox/source/dump/oledumper.ini16
-rw-r--r--oox/source/dump/xlsbdumper.cxx4
-rw-r--r--oox/source/dump/xlsbdumper.ini2
-rw-r--r--oox/source/helper/attributelist.cxx174
-rw-r--r--oox/source/helper/graphichelper.cxx34
-rwxr-xr-xoox/source/ole/axbinaryreader.cxx62
-rw-r--r--oox/source/ole/axcontrol.cxx269
-rwxr-xr-xoox/source/ole/vbacontrol.cxx18
-rw-r--r--oox/source/ppt/pptimport.cxx2
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx12
-rw-r--r--oox/source/token/makefile.mk5
-rw-r--r--oox/source/token/properties.txt6
-rw-r--r--oox/source/vml/vmldrawing.cxx5
-rw-r--r--oox/source/vml/vmldrawingfragment.cxx1
-rw-r--r--oox/source/vml/vmlformatting.cxx18
-rw-r--r--oox/source/vml/vmlinputstream.cxx219
-rw-r--r--oox/source/vml/vmlshape.cxx32
-rw-r--r--oox/source/vml/vmlshapecontainer.cxx2
-rw-r--r--oox/source/vml/vmlshapecontext.cxx30
-rw-r--r--oox/source/xls/chartsheetfragment.cxx1
-rw-r--r--oox/source/xls/drawingfragment.cxx17
-rw-r--r--oox/source/xls/formulabase.cxx5
-rw-r--r--oox/source/xls/pagesettings.cxx2
-rw-r--r--oox/source/xls/sheetdatacontext.cxx11
-rw-r--r--oox/source/xls/stylesbuffer.cxx2
-rw-r--r--oox/source/xls/viewsettings.cxx72
-rw-r--r--oox/source/xls/workbookfragment.cxx8
-rw-r--r--oox/source/xls/workbooksettings.cxx60
-rw-r--r--oox/source/xls/worksheetfragment.cxx36
-rw-r--r--oox/source/xls/worksheethelper.cxx208
-rw-r--r--oox/source/xls/worksheetsettings.cxx14
-rw-r--r--postprocess/checkdeliver/checkdeliver.pl10
-rw-r--r--python/makefile.mk1
-rw-r--r--[-rwxr-xr-x]readlicense_oo/docs/readme.xsl379
-rwxr-xr-xreadlicense_oo/docs/readme/readme.xrm831
-rwxr-xr-xreadlicense_oo/util/makefile.pmk3
-rw-r--r--redland/raptor/makefile.mk6
-rw-r--r--redland/rasqal/makefile.mk6
-rw-r--r--redland/redland/makefile.mk6
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/category.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/configuration.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/module.properties1
-rw-r--r--reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties1
-rw-r--r--reportbuilder/java/jfreereport.properties1
-rw-r--r--reportbuilder/java/libformula.properties1
-rw-r--r--reportbuilder/java/loader.properties1
-rw-r--r--reportbuilder/license/readme_en-US.html177
-rw-r--r--reportbuilder/license/readme_en-US.txt95
-rw-r--r--sal/inc/rtl/locale.h8
-rw-r--r--sal/osl/unx/nlsupport.c15
-rw-r--r--sal/systools/win32/uwinapi/DllMain.cpp9
-rw-r--r--sal/systools/win32/uwinapi/sntprintf.c2
-rw-r--r--sax/source/fastparser/fastparser.cxx227
-rw-r--r--sax/source/fastparser/fastparser.hxx83
-rw-r--r--sc/inc/AccessibleFilterTopWindow.hxx3
-rw-r--r--sc/inc/ViewSettingsSequenceDefines.hxx3
-rw-r--r--sc/inc/address.hxx13
-rw-r--r--sc/inc/attarray.hxx3
-rw-r--r--sc/inc/cellsuno.hxx8
-rw-r--r--sc/inc/chartuno.hxx47
-rw-r--r--sc/inc/column.hxx9
-rw-r--r--sc/inc/convuno.hxx41
-rw-r--r--sc/inc/dociter.hxx22
-rw-r--r--sc/inc/document.hxx154
-rw-r--r--sc/inc/docuno.hxx2
-rw-r--r--sc/inc/dpobject.hxx1
-rwxr-xr-xsc/inc/eventuno.hxx91
-rw-r--r--sc/inc/funcuno.hxx3
-rw-r--r--sc/inc/global.hxx9
-rw-r--r--sc/inc/globstr.hrc8
-rw-r--r--sc/inc/olinetab.hxx20
-rw-r--r--sc/inc/sc.hrc13
-rw-r--r--sc/inc/scabstdlg.hxx14
-rw-r--r--sc/inc/scextopt.hxx1
-rw-r--r--sc/inc/scmod.hxx2
-rw-r--r--sc/inc/segmenttree.hxx172
-rwxr-xr-x[-rw-r--r--]sc/inc/sheetevents.hxx (renamed from offapi/com/sun/star/deployment/LicenseIndividualAgreementException.idl)56
-rw-r--r--sc/inc/tabbgcolor.hxx (renamed from xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcConstants.java)39
-rw-r--r--sc/inc/table.hxx201
-rw-r--r--sc/inc/unonames.hxx8
-rw-r--r--sc/inc/unowids.hxx3
-rw-r--r--sc/inc/viewuno.hxx5
-rwxr-xr-xsc/prj/build.lst2
-rw-r--r--sc/sdi/docsh.sdi1
-rw-r--r--sc/sdi/scalc.sdi78
-rw-r--r--sc/sdi/tabvwsh.sdi12
-rw-r--r--sc/source/core/data/attarray.cxx7
-rw-r--r--sc/source/core/data/bcaslot.cxx207
-rw-r--r--sc/source/core/data/cell.cxx24
-rw-r--r--sc/source/core/data/column.cxx26
-rw-r--r--sc/source/core/data/column2.cxx19
-rw-r--r--sc/source/core/data/column3.cxx4
-rw-r--r--sc/source/core/data/dociter.cxx39
-rw-r--r--[-rwxr-xr-x]sc/source/core/data/documen2.cxx6
-rw-r--r--sc/source/core/data/documen3.cxx134
-rw-r--r--sc/source/core/data/documen7.cxx6
-rw-r--r--sc/source/core/data/documen9.cxx18
-rw-r--r--sc/source/core/data/document.cxx334
-rwxr-xr-xsc/source/core/data/dpobject.cxx10
-rwxr-xr-xsc/source/core/data/dpoutput.cxx12
-rw-r--r--sc/source/core/data/dptabresmember.cxx831
-rw-r--r--sc/source/core/data/dptabresmember.hxx161
-rw-r--r--[-rwxr-xr-x]sc/source/core/data/drwlayer.cxx34
-rw-r--r--sc/source/core/data/fillinfo.cxx34
-rw-r--r--[-rwxr-xr-x]sc/source/core/data/makefile.mk10
-rw-r--r--sc/source/core/data/olinetab.cxx22
-rw-r--r--sc/source/core/data/segmenttree.cxx582
-rwxr-xr-xsc/source/core/data/sheetevents.cxx141
-rw-r--r--sc/source/core/data/stlsheet.cxx2
-rw-r--r--sc/source/core/data/tabbgcolor.cxx62
-rw-r--r--sc/source/core/data/table1.cxx349
-rw-r--r--sc/source/core/data/table2.cxx699
-rw-r--r--sc/source/core/data/table3.cxx61
-rw-r--r--sc/source/core/data/table5.cxx810
-rw-r--r--sc/source/core/data/tabprotection.cxx37
-rw-r--r--sc/source/core/inc/bcaslot.hxx7
-rw-r--r--sc/source/core/inc/doubleref.hxx3
-rw-r--r--sc/source/core/tool/addincol.cxx5
-rw-r--r--sc/source/core/tool/chartarr.cxx76
-rw-r--r--sc/source/core/tool/compiler.cxx46
-rw-r--r--sc/source/core/tool/detfunc.cxx2
-rw-r--r--sc/source/core/tool/doubleref.cxx5
-rw-r--r--sc/source/core/tool/interpr4.cxx29
-rw-r--r--sc/source/filter/excel/colrowst.cxx8
-rw-r--r--sc/source/filter/excel/excdoc.cxx19
-rw-r--r--sc/source/filter/excel/excimp8.cxx85
-rw-r--r--sc/source/filter/excel/impop.cxx78
-rw-r--r--sc/source/filter/excel/read.cxx8
-rw-r--r--sc/source/filter/excel/xeescher.cxx4
-rw-r--r--sc/source/filter/excel/xepage.cxx31
-rw-r--r--sc/source/filter/excel/xeroot.cxx23
-rw-r--r--sc/source/filter/excel/xestyle.cxx1
-rw-r--r--sc/source/filter/excel/xetable.cxx19
-rw-r--r--sc/source/filter/excel/xeview.cxx43
-rwxr-xr-xsc/source/filter/excel/xichart.cxx10
-rw-r--r--sc/source/filter/excel/xiescher.cxx21
-rw-r--r--sc/source/filter/excel/xipage.cxx4
-rw-r--r--sc/source/filter/excel/xiroot.cxx27
-rw-r--r--sc/source/filter/excel/xiview.cxx22
-rw-r--r--sc/source/filter/excel/xlescher.cxx93
-rw-r--r--sc/source/filter/excel/xltools.cxx35
-rw-r--r--sc/source/filter/excel/xlview.cxx1
-rw-r--r--sc/source/filter/html/htmlexp.cxx14
-rw-r--r--sc/source/filter/inc/excimp8.hxx63
-rw-r--r--sc/source/filter/inc/imp_op.hxx1
-rw-r--r--sc/source/filter/inc/xcl97rec.hxx3
-rw-r--r--sc/source/filter/inc/xeroot.hxx2
-rw-r--r--sc/source/filter/inc/xestyle.hxx3
-rw-r--r--sc/source/filter/inc/xeview.hxx15
-rw-r--r--sc/source/filter/inc/xiroot.hxx9
-rw-r--r--sc/source/filter/inc/xiview.hxx3
-rw-r--r--sc/source/filter/inc/xlconst.hxx6
-rw-r--r--sc/source/filter/inc/xlescher.hxx13
-rw-r--r--sc/source/filter/inc/xltools.hxx25
-rw-r--r--sc/source/filter/inc/xlview.hxx8
-rw-r--r--sc/source/filter/lotus/lotimpop.cxx3
-rw-r--r--sc/source/filter/lotus/op.cxx4
-rw-r--r--sc/source/filter/rtf/eeimpars.cxx2
-rw-r--r--sc/source/filter/rtf/expbase.cxx13
-rw-r--r--sc/source/filter/starcalc/scflt.cxx34
-rw-r--r--sc/source/filter/xcl97/xcl97rec.cxx9
-rwxr-xr-xsc/source/filter/xml/XMLCodeNameProvider.cxx204
-rwxr-xr-xsc/source/filter/xml/XMLCodeNameProvider.hxx70
-rw-r--r--sc/source/filter/xml/makefile.mk3
-rw-r--r--sc/source/filter/xml/xmldpimp.cxx5
-rw-r--r--sc/source/filter/xml/xmlexprt.cxx1227
-rw-r--r--sc/source/filter/xml/xmlimprt.cxx41
-rw-r--r--sc/source/filter/xml/xmlimprt.hxx4
-rw-r--r--sc/source/filter/xml/xmlstyle.cxx4
-rw-r--r--sc/source/filter/xml/xmltabi.cxx9
-rw-r--r--sc/source/filter/xml/xmlwrap.cxx8
-rw-r--r--sc/source/ui/Accessibility/AccessibleCellBase.cxx10
-rw-r--r--sc/source/ui/Accessibility/AccessibleContextBase.cxx4
-rw-r--r--sc/source/ui/Accessibility/AccessibleFilterTopWindow.cxx7
-rw-r--r--sc/source/ui/app/inputwin.cxx2
-rw-r--r--sc/source/ui/app/scmod.cxx41
-rw-r--r--sc/source/ui/app/transobj.cxx22
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.cxx35
-rw-r--r--sc/source/ui/attrdlg/scdlgfact.hxx15
-rw-r--r--sc/source/ui/cctrl/dpcontrol.cxx26
-rw-r--r--sc/source/ui/dbgui/asciiopt.cxx33
-rw-r--r--sc/source/ui/docshell/dbdocfun.cxx10
-rw-r--r--sc/source/ui/docshell/docfunc.cxx143
-rwxr-xr-x[-rw-r--r--]sc/source/ui/docshell/docsh.cxx179
-rw-r--r--sc/source/ui/docshell/docsh2.cxx2
-rw-r--r--sc/source/ui/docshell/docsh3.cxx10
-rwxr-xr-x[-rw-r--r--]sc/source/ui/docshell/docsh4.cxx63
-rw-r--r--sc/source/ui/docshell/impex.cxx2
-rw-r--r--sc/source/ui/docshell/olinefun.cxx8
-rw-r--r--sc/source/ui/inc/AccessibleContextBase.hxx2
-rw-r--r--sc/source/ui/inc/docfunc.hxx4
-rwxr-xr-x[-rw-r--r--]sc/source/ui/inc/docsh.hxx14
-rw-r--r--sc/source/ui/inc/dpcontrol.hxx4
-rw-r--r--sc/source/ui/inc/gridwin.hxx20
-rw-r--r--sc/source/ui/inc/miscdlgs.hrc6
-rw-r--r--sc/source/ui/inc/tabbgcolordlg.hxx80
-rw-r--r--sc/source/ui/inc/undotab.hxx28
-rw-r--r--sc/source/ui/inc/viewfunc.hxx5
-rw-r--r--sc/source/ui/inc/viewutil.hxx4
-rw-r--r--sc/source/ui/miscdlgs/acredlin.src1
-rw-r--r--sc/source/ui/miscdlgs/makefile.mk1
-rw-r--r--sc/source/ui/miscdlgs/tabbgcolordlg.cxx199
-rw-r--r--sc/source/ui/src/globstr.src8
-rw-r--r--sc/source/ui/src/miscdlgs.src90
-rw-r--r--sc/source/ui/src/popup.src15
-rw-r--r--sc/source/ui/src/scstring.src8
-rw-r--r--sc/source/ui/undo/makefile.mk3
-rw-r--r--sc/source/ui/undo/undoblk.cxx8
-rw-r--r--sc/source/ui/undo/undoblk3.cxx7
-rw-r--r--sc/source/ui/undo/undocell.cxx2
-rw-r--r--sc/source/ui/undo/undodat.cxx3
-rw-r--r--sc/source/ui/undo/undotab.cxx76
-rw-r--r--sc/source/ui/unoobj/cellsuno.cxx151
-rw-r--r--sc/source/ui/unoobj/chart2uno.cxx7
-rw-r--r--sc/source/ui/unoobj/chartuno.cxx140
-rw-r--r--sc/source/ui/unoobj/confuno.cxx17
-rw-r--r--sc/source/ui/unoobj/docuno.cxx170
-rwxr-xr-xsc/source/ui/unoobj/eventuno.cxx201
-rw-r--r--sc/source/ui/unoobj/funcuno.cxx75
-rw-r--r--sc/source/ui/unoobj/makefile.mk1
-rwxr-xr-x[-rw-r--r--]sc/source/ui/unoobj/scdetect.cxx2
-rw-r--r--sc/source/ui/unoobj/viewuno.cxx132
-rw-r--r--sc/source/ui/vba/makefile.mk47
-rw-r--r--sc/source/ui/vba/vbaapplication.cxx112
-rw-r--r--sc/source/ui/vba/vbaapplication.hxx22
-rw-r--r--sc/source/ui/vba/vbacomment.cxx33
-rw-r--r--sc/source/ui/vba/vbacomment.hxx9
-rw-r--r--sc/source/ui/vba/vbacomments.cxx29
-rw-r--r--sc/source/ui/vba/vbacomments.hxx8
-rw-r--r--sc/source/ui/vba/vbafont.cxx14
-rw-r--r--sc/source/ui/vba/vbafont.hxx7
-rw-r--r--sc/source/ui/vba/vbaformat.cxx1
-rw-r--r--sc/source/ui/vba/vbahelper.cxx73
-rw-r--r--sc/source/ui/vba/vbahyperlink.cxx211
-rw-r--r--sc/source/ui/vba/vbahyperlink.hxx50
-rwxr-xr-xsc/source/ui/vba/vbahyperlinks.cxx293
-rwxr-xr-xsc/source/ui/vba/vbahyperlinks.hxx150
-rw-r--r--sc/source/ui/vba/vbainterior.cxx3
-rw-r--r--sc/source/ui/vba/vbainterior.hxx2
-rw-r--r--sc/source/ui/vba/vbaname.cxx5
-rw-r--r--sc/source/ui/vba/vbapalette.cxx9
-rw-r--r--sc/source/ui/vba/vbapalette.hxx15
-rw-r--r--sc/source/ui/vba/vbapane.cxx110
-rw-r--r--sc/source/ui/vba/vbapane.hxx35
-rw-r--r--sc/source/ui/vba/vbarange.cxx416
-rw-r--r--sc/source/ui/vba/vbarange.hxx24
-rwxr-xr-xsc/source/ui/vba/vbasheetobject.cxx517
-rwxr-xr-xsc/source/ui/vba/vbasheetobject.hxx220
-rwxr-xr-xsc/source/ui/vba/vbasheetobjects.cxx534
-rwxr-xr-xsc/source/ui/vba/vbasheetobjects.hxx113
-rw-r--r--sc/source/ui/vba/vbawindow.cxx37
-rw-r--r--sc/source/ui/vba/vbawindow.hxx14
-rw-r--r--sc/source/ui/vba/vbaworkbook.cxx28
-rw-r--r--sc/source/ui/vba/vbaworkbook.hxx1
-rw-r--r--sc/source/ui/vba/vbaworksheet.cxx200
-rw-r--r--sc/source/ui/vba/vbaworksheet.hxx25
-rw-r--r--sc/source/ui/vba/vbaworksheets.cxx21
-rw-r--r--sc/source/ui/vba/vbaworksheets.hxx4
-rw-r--r--sc/source/ui/vba/vbawsfunction.cxx134
-rw-r--r--sc/source/ui/vba/vbawsfunction.hxx1
-rw-r--r--sc/source/ui/view/cellsh.cxx8
-rw-r--r--sc/source/ui/view/colrowba.cxx6
-rwxr-xr-xsc/source/ui/view/dbfunc3.cxx3
-rw-r--r--sc/source/ui/view/drawutil.cxx27
-rw-r--r--sc/source/ui/view/drawvie4.cxx4
-rw-r--r--sc/source/ui/view/drawview.cxx6
-rw-r--r--sc/source/ui/view/gridwin.cxx99
-rw-r--r--sc/source/ui/view/gridwin2.cxx12
-rw-r--r--sc/source/ui/view/gridwin3.cxx2
-rw-r--r--sc/source/ui/view/gridwin4.cxx16
-rw-r--r--sc/source/ui/view/hdrcont.cxx2
-rw-r--r--sc/source/ui/view/makefile.mk1
-rw-r--r--sc/source/ui/view/olinewin.cxx9
-rw-r--r--sc/source/ui/view/output.cxx53
-rw-r--r--sc/source/ui/view/output2.cxx34
-rw-r--r--sc/source/ui/view/prevloc.cxx96
-rw-r--r--sc/source/ui/view/printfun.cxx177
-rw-r--r--sc/source/ui/view/scextopt.cxx1
-rw-r--r--sc/source/ui/view/select.cxx9
-rw-r--r--sc/source/ui/view/tabcont.cxx38
-rw-r--r--sc/source/ui/view/tabview.cxx6
-rw-r--r--sc/source/ui/view/tabview2.cxx15
-rw-r--r--sc/source/ui/view/tabview3.cxx17
-rw-r--r--sc/source/ui/view/tabview5.cxx4
-rw-r--r--sc/source/ui/view/tabvwshe.cxx17
-rw-r--r--sc/source/ui/view/tabvwshf.cxx159
-rw-r--r--sc/source/ui/view/viewdata.cxx59
-rw-r--r--sc/source/ui/view/viewfun2.cxx25
-rw-r--r--sc/source/ui/view/viewfun3.cxx8
-rw-r--r--sc/source/ui/view/viewfun5.cxx2
-rw-r--r--sc/source/ui/view/viewfunc.cxx32
-rw-r--r--sc/source/ui/view/viewutil.cxx34
-rw-r--r--sc/uiconfig/scalc/menubar/menubar.xml2
-rw-r--r--sc/util/makefile.mk3
-rw-r--r--scaddins/source/analysis/analysis.cxx8
-rw-r--r--scaddins/source/analysis/analysis.hxx9
-rw-r--r--scaddins/source/analysis/analysisadd.idl15
-rw-r--r--scaddins/source/analysis/analysisdefs.hxx2
-rw-r--r--scaddins/source/analysis/analysishelper.cxx4
-rw-r--r--scaddins/source/analysis/bessel.cxx367
-rw-r--r--scaddins/source/analysis/bessel.hxx9
-rw-r--r--scaddins/source/analysis/makefile.mk3
-rw-r--r--scp2/source/ooo/common_brand.scp230
-rw-r--r--[-rwxr-xr-x]scp2/source/ooo/file_ooo.scp134
-rw-r--r--scp2/source/ooo/module_hidden_ooo.scp350
-rw-r--r--scp2/source/ooo/module_ooo.scp359
-rw-r--r--scp2/source/ooo/module_ooo.ulf195
-rw-r--r--scp2/source/ooo/profileitem_ooo.scp86
-rwxr-xr-xscp2/source/ooo/ure.scp2
-rwxr-xr-xscp2/source/ooo/windowscustomaction_ooo.scp69
-rw-r--r--scripting/java/com/sun/star/script/framework/container/UnoPkgContainer.java31
-rwxr-xr-xscripting/java/com/sun/star/script/framework/provider/ScriptProvider.java18
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/filesystem/Bundle.properties1
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/loader/Bundle.properties1
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/options/Bundle.properties1
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/resources/Bundle.properties1
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/wizard/Bundle.properties1
-rw-r--r--scripting/source/provider/ActiveMSPList.cxx7
-rw-r--r--scripting/source/provider/ActiveMSPList.hxx1
-rw-r--r--scripting/source/pyprov/mailmerge.py120
-rwxr-xr-x[-rw-r--r--]sd/inc/sdabstdlg.hxx7
-rwxr-xr-xsd/source/core/sdpage.cxx239
-rwxr-xr-x[-rw-r--r--]sd/source/ui/accessibility/AccessibleSlideSorterObject.cxx20
-rwxr-xr-x[-rw-r--r--]sd/source/ui/accessibility/AccessibleSlideSorterView.cxx82
-rw-r--r--sd/source/ui/controller/slidelayoutcontroller.cxx2
-rwxr-xr-xsd/source/ui/dlg/makefile.mk12
-rw-r--r--sd/source/ui/dlg/printdialog.cxx342
-rw-r--r--sd/source/ui/dlg/printdialog.src130
-rw-r--r--sd/source/ui/dlg/printdlg.src130
-rwxr-xr-x[-rw-r--r--]sd/source/ui/dlg/sddlgfact.cxx16
-rwxr-xr-x[-rw-r--r--]sd/source/ui/dlg/sddlgfact.hxx9
-rwxr-xr-xsd/source/ui/inc/view/viewoverlaymanager.hxx5
-rwxr-xr-xsd/source/ui/slidesorter/inc/view/SlideSorterView.hxx17
-rwxr-xr-xsd/source/ui/slidesorter/view/SlideSorterView.cxx57
-rwxr-xr-x[-rw-r--r--]sd/source/ui/unoidl/UnoDocumentSettings.cxx0
-rwxr-xr-x[-rw-r--r--]sd/source/ui/unoidl/sddetect.cxx2
-rwxr-xr-x[-rw-r--r--]sd/source/ui/view/DocumentRenderer.cxx8
-rwxr-xr-x[-rw-r--r--]sd/source/ui/view/DocumentRenderer.src1
-rwxr-xr-xsd/source/ui/view/viewoverlaymanager.cxx60
-rwxr-xr-xsd/util/makefile.mk2
-rw-r--r--set_soenv.in7
-rwxr-xr-xsetup_native/source/packinfo/packinfo_office.txt33
-rw-r--r--setup_native/source/win32/customactions/languagepacks/exports.dxp3
-rw-r--r--setup_native/source/win32/customactions/languagepacks/makefile.mk1
-rwxr-xr-xsetup_native/source/win32/customactions/patch/exports.dxp3
-rwxr-xr-xsetup_native/source/win32/customactions/patch/makefile.mk1
-rw-r--r--setup_native/source/win32/customactions/shellextensions/exports.dxp3
-rw-r--r--setup_native/source/win32/customactions/shellextensions/makefile.mk1
-rwxr-xr-x[-rw-r--r--]sfx2/inc/brokenpackageint.hxx18
-rw-r--r--sfx2/inc/sfx2/app.hxx2
-rw-r--r--sfx2/inc/sfx2/docfile.hxx2
-rw-r--r--sfx2/inc/sfx2/docfilt.hxx23
-rw-r--r--sfx2/inc/sfx2/htmlmode.hxx68
-rwxr-xr-x[-rw-r--r--]sfx2/inc/sfx2/objsh.hxx19
-rwxr-xr-xsfx2/inc/sfx2/securitypage.hxx58
-rwxr-xr-x[-rw-r--r--]sfx2/inc/sfx2/sfx.hrc5
-rw-r--r--sfx2/inc/sfx2/sfxsids.hrc30
-rwxr-xr-x[-rw-r--r--]sfx2/sdi/sfx.sdi28
-rw-r--r--sfx2/source/appl/appdata.cxx5
-rw-r--r--sfx2/source/appl/appmain.cxx3
-rw-r--r--sfx2/source/appl/appquit.cxx50
-rw-r--r--sfx2/source/appl/appserv.cxx63
-rwxr-xr-x[-rw-r--r--]sfx2/source/appl/appuno.cxx57
-rw-r--r--sfx2/source/appl/imestatuswindow.cxx6
-rw-r--r--sfx2/source/appl/imestatuswindow.hxx7
-rw-r--r--sfx2/source/bastyp/progress.cxx2
-rw-r--r--sfx2/source/bastyp/sfxhtml.cxx4
-rw-r--r--sfx2/source/control/unoctitm.cxx2
-rw-r--r--sfx2/source/dialog/about.cxx30
-rwxr-xr-x[-rw-r--r--]sfx2/source/dialog/dinfdlg.cxx5
-rwxr-xr-x[-rw-r--r--]sfx2/source/dialog/dinfdlg.src11
-rw-r--r--sfx2/source/dialog/filedlghelper.cxx101
-rwxr-xr-x[-rw-r--r--]sfx2/source/dialog/makefile.mk2
-rwxr-xr-xsfx2/source/dialog/securitypage.cxx523
-rwxr-xr-x[-rw-r--r--]sfx2/source/dialog/securitypage.hrc (renamed from sd/source/ui/inc/printdlg.hxx)64
-rwxr-xr-xsfx2/source/dialog/securitypage.src174
-rw-r--r--sfx2/source/doc/docfile.cxx55
-rw-r--r--sfx2/source/doc/docfilt.cxx14
-rw-r--r--sfx2/source/doc/guisaveas.cxx81
-rw-r--r--sfx2/source/doc/objcont.cxx48
-rwxr-xr-xsfx2/source/doc/objmisc.cxx29
-rw-r--r--sfx2/source/doc/objstor.cxx51
-rwxr-xr-x[-rw-r--r--]sfx2/source/doc/objxtor.cxx42
-rw-r--r--sfx2/source/doc/sfxbasemodel.cxx28
-rw-r--r--sfx2/source/inc/appdata.hxx3
-rwxr-xr-x[-rw-r--r--]sfx2/source/inc/helpid.hrc11
-rw-r--r--sfx2/source/inc/objshimp.hxx4
-rw-r--r--sfx2/source/view/ipclient.cxx8
-rw-r--r--sfx2/source/view/viewfrm.cxx288
-rw-r--r--sfx2/util/hidother.src4
-rw-r--r--shell/source/unix/misc/gnome-open-url.sh4
-rwxr-xr-xshell/source/unix/misc/open-url.sh54
-rw-r--r--shell/source/unix/sysshell/recently_used_file.cxx3
-rwxr-xr-xsmoketestoo_native/data/smoketestdoc.sxwbin35550 -> 35805 bytes
-rw-r--r--solenv/bin/cws.pl1160
-rwxr-xr-xsolenv/bin/gccinstlib.pl9
-rwxr-xr-xsolenv/bin/jpropex10
-rw-r--r--solenv/bin/macosx-change-install-names.pl2
-rw-r--r--solenv/bin/modules/installer/archivefiles.pm71
-rw-r--r--solenv/bin/modules/installer/simplepackage.pm28
-rw-r--r--solenv/bin/modules/installer/systemactions.pm47
-rw-r--r--solenv/bin/modules/installer/windows/admin.pm77
-rwxr-xr-x[-rw-r--r--]solenv/config/sdev300.ini2
-rw-r--r--solenv/inc/ant.properties1
-rw-r--r--solenv/inc/libs.mk6
-rw-r--r--solenv/inc/minor.mk6
-rw-r--r--solenv/inc/settings.mk2
-rw-r--r--solenv/inc/target.mk2
-rw-r--r--solenv/inc/tg_compv.mk14
-rwxr-xr-xsolenv/inc/tg_propmerge.mk66
-rw-r--r--solenv/inc/unxlng.mk2
-rw-r--r--solenv/inc/unxsoli4.mk2
-rw-r--r--solenv/inc/unxsols4.mk2
-rw-r--r--solenv/inc/unxsolu4.mk2
-rw-r--r--solenv/inc/wntgcci.mk2
-rw-r--r--soltools/cpp/_nlist.c3
-rw-r--r--soltools/cpp/_unix.c12
-rw-r--r--soltools/cpp/makefile.mk10
-rw-r--r--soltools/javadep/javadep.c9
-rw-r--r--splitbuild/extern.lst2
-rw-r--r--starmath/source/smdetect.cxx2
-rwxr-xr-xsvtools/inc/svtools/accessibletable.hxx2
-rw-r--r--svtools/inc/svtools/logindlg.hxx118
-rw-r--r--svtools/inc/svtools/table/abstracttablecontrol.hxx1
-rw-r--r--svtools/inc/svtools/table/tablecontrol.hxx4
-rw-r--r--svtools/inc/svtools/table/tabledatawindow.hxx5
-rwxr-xr-xsvtools/inc/svtools/xwindowitem.hxx70
-rw-r--r--svtools/inc/tabbar.hxx15
-rw-r--r--svtools/source/contnr/fileview.cxx231
-rwxr-xr-x[-rw-r--r--]svtools/source/control/tabbar.cxx158
-rw-r--r--svtools/source/control/toolbarmenu.cxx5
-rw-r--r--svtools/source/dialogs/logindlg.cxx312
-rw-r--r--svtools/source/dialogs/logindlg.src200
-rwxr-xr-x[-rw-r--r--]svtools/source/dialogs/makefile.mk4
-rw-r--r--svtools/source/misc/errtxt.src10
-rw-r--r--svtools/source/misc/langtab.src4
-rwxr-xr-x[-rw-r--r--]svtools/source/misc/makefile.mk3
-rwxr-xr-x[-rw-r--r--]svtools/source/misc/xwindowitem.cxx (renamed from sd/source/ui/dlg/printdlg.cxx)97
-rw-r--r--svtools/source/svhtml/parhtml.cxx4
-rw-r--r--svtools/source/table/gridtablerenderer.cxx145
-rw-r--r--svtools/source/table/tablecontrol.cxx13
-rw-r--r--svtools/source/table/tablecontrol_impl.cxx39
-rw-r--r--svtools/source/table/tablecontrol_impl.hxx1
-rw-r--r--svtools/source/table/tabledatawindow.cxx31
-rwxr-xr-xsvtools/source/uno/svtxgridcontrol.cxx40
-rw-r--r--svx/inc/htmlmode.hxx23
-rwxr-xr-x[-rw-r--r--]svx/inc/svx/svxids.hrc42
-rw-r--r--svx/inc/svx/unoshprp.hxx2
-rw-r--r--svx/source/dialog/hdft.cxx2
-rw-r--r--svx/source/smarttags/SmartTagMgr.cxx11
-rw-r--r--svx/source/svdraw/svdoole2.cxx44
-rw-r--r--svx/source/unodraw/unoprov.cxx1
-rw-r--r--svx/source/unodraw/unoshap4.cxx12
-rw-r--r--sw/inc/SidebarWin.hxx2
-rw-r--r--[-rwxr-xr-x]sw/inc/docsh.hxx9
-rw-r--r--sw/inc/swmodule.hxx2
-rw-r--r--sw/inc/unotext.hxx7
-rwxr-xr-x[-rw-r--r--]sw/sdi/swriter.sdi2
-rw-r--r--sw/source/core/access/accportions.cxx11
-rw-r--r--sw/source/core/doc/number.cxx10
-rw-r--r--sw/source/core/layout/pagechg.cxx10
-rw-r--r--sw/source/core/text/porfld.cxx6
-rw-r--r--sw/source/core/unocore/unotext.cxx32
-rw-r--r--sw/source/filter/basflt/fltini.cxx2068
-rw-r--r--sw/source/filter/rtf/rtfatr.cxx4
-rw-r--r--[-rwxr-xr-x]sw/source/filter/ww8/wrtww8.cxx26
-rw-r--r--sw/source/filter/ww8/ww8par.cxx15
-rwxr-xr-x[-rw-r--r--]sw/source/ui/app/docsh.cxx77
-rw-r--r--sw/source/ui/app/swmodule.cxx1
-rw-r--r--sw/source/ui/dochdl/swdtflvr.cxx109
-rw-r--r--sw/source/ui/docvw/AnchorOverlayObject.cxx2
-rw-r--r--sw/source/ui/docvw/PostItMgr.cxx40
-rwxr-xr-xsw/source/ui/docvw/SidebarWin.cxx45
-rw-r--r--sw/source/ui/inc/swdtflvr.hxx1
-rw-r--r--sw/source/ui/uiview/srcview.cxx14
-rwxr-xr-x[-rw-r--r--]sw/source/ui/uiview/view2.cxx11
-rwxr-xr-x[-rw-r--r--]sw/source/ui/uiview/viewstat.cxx8
-rw-r--r--sw/source/ui/uno/SwXDocumentSettings.cxx24
-rw-r--r--sw/source/ui/uno/swdetect.cxx2
-rw-r--r--sysui/desktop/icons/hicolor/128x128/apps/startcenter.pngbin11073 -> 15601 bytes
-rw-r--r--sysui/desktop/icons/hicolor/16x16/apps/startcenter.pngbin1043 -> 893 bytes
-rw-r--r--sysui/desktop/icons/hicolor/32x32/apps/startcenter.pngbin2375 -> 2429 bytes
-rw-r--r--sysui/desktop/icons/hicolor/48x48/apps/startcenter.pngbin3615 -> 4184 bytes
-rw-r--r--sysui/desktop/menus/base.desktop1
-rw-r--r--sysui/desktop/menus/calc.desktop1
-rw-r--r--sysui/desktop/menus/draw.desktop1
-rw-r--r--sysui/desktop/menus/impress.desktop1
-rw-r--r--sysui/desktop/menus/math.desktop1
-rw-r--r--sysui/desktop/menus/startcenter.desktop2
-rw-r--r--sysui/desktop/menus/writer.desktop1
-rw-r--r--testautomation/chart2/optional/includes/ch2_datadialogue.inc12
-rw-r--r--[-rwxr-xr-x]testautomation/chart2/optional/includes/ch2_lvl1a.inc234
-rwxr-xr-x[-rw-r--r--]testautomation/chart2/optional/includes/loadsave/ch2_losa.inc315
-rw-r--r--testautomation/chart2/optional/includes/loadsave/ch2_xml_format.inc74
-rwxr-xr-x[-rw-r--r--]testautomation/chart2/optional/includes/wizard/ch2_lvl1_wizard.inc2
-rw-r--r--testautomation/chart2/tools/ch_tools_common.inc179
-rwxr-xr-xtestautomation/dbaccess/required/includes/MainApp.inc16
-rwxr-xr-xtestautomation/dbaccess/tools/dbcreatetools.inc5
-rwxr-xr-x[-rw-r--r--]testautomation/extensions/optional/includes/publisher.inc97
-rw-r--r--[-rwxr-xr-x]testautomation/extensions/optional/input/dependencies/version30.oxtbin766 -> 1493 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version31.oxtbin1440 -> 1495 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version310.oxtbin0 -> 1493 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version33.oxtbin0 -> 1494 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version330.oxtbin0 -> 1494 bytes
-rw-r--r--testautomation/extensions/optional/input/dependencies/version34.oxtbin0 -> 1494 bytes
-rw-r--r--[-rwxr-xr-x]testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/genfiles.properties1
-rw-r--r--[-rwxr-xr-x]testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/private/private.properties1
-rw-r--r--[-rwxr-xr-x]testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project-uno.properties1
-rw-r--r--[-rwxr-xr-x]testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project.properties1
-rwxr-xr-xtestautomation/extensions/optional/input/files.txt7
-rw-r--r--testautomation/extensions/optional/input/issues/111434.oxtbin0 -> 1166 bytes
-rw-r--r--testautomation/extensions/required/includes/e_update.inc165
-rw-r--r--testautomation/extensions/required/includes/e_update_oooimprovement.inc94
-rwxr-xr-xtestautomation/framework/optional/f_CJK_GridLayout.bas2
-rwxr-xr-xtestautomation/framework/optional/f_CJK_RubyDialogueProposal.bas2
-rwxr-xr-xtestautomation/framework/optional/f_basic_dialog_i18n.bas1
-rwxr-xr-xtestautomation/framework/optional/f_basic_documents.bas3
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/f_basic_gridcontrol.bas13
-rwxr-xr-xtestautomation/framework/optional/f_basic_issues.bas3
-rwxr-xr-xtestautomation/framework/optional/f_basic_library_export_import.bas2
-rwxr-xr-xtestautomation/framework/optional/f_basic_modules.bas1
-rwxr-xr-xtestautomation/framework/optional/f_basic_package_export_import.bas2
-rwxr-xr-xtestautomation/framework/optional/f_basic_shared_modules.bas2
-rwxr-xr-xtestautomation/framework/optional/f_basic_templatedocuments.bas3
-rwxr-xr-xtestautomation/framework/optional/f_basic_vba-compat.bas1
-rwxr-xr-xtestautomation/framework/optional/f_extras_samplefileopen.bas1
-rwxr-xr-xtestautomation/framework/optional/f_extras_sampleopen.bas1
-rwxr-xr-xtestautomation/framework/optional/f_extras_templatefileopen.bas1
-rwxr-xr-xtestautomation/framework/optional/f_extras_templateopen.bas1
-rwxr-xr-xtestautomation/framework/optional/f_filedlg_dialogtest.bas2
-rwxr-xr-xtestautomation/framework/optional/f_options_ooo.bas1
-rwxr-xr-xtestautomation/framework/optional/f_scripting_basics.bas56
-rwxr-xr-xtestautomation/framework/optional/f_security_certified_docs.bas2
-rwxr-xr-xtestautomation/framework/optional/f_security_incorrect_password.bas2
-rwxr-xr-xtestautomation/framework/optional/f_toolbar_items.bas2
-rw-r--r--testautomation/framework/optional/includes/CJK_FeatureSwitchTest_1.inc111
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_delete_modules.inc18
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_dialog_i18n_copy_control.inc256
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_documents.inc48
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_formcontrols.inc216
-rwxr-xr-xtestautomation/framework/optional/includes/basic_gridcontrol.inc38
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_ide.inc430
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_library_export.inc6
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_library_import.inc32
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_macros.inc563
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_modulehide.inc76
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_modulenames.inc310
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_package_export.inc30
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_package_import.inc34
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_protected_libraries.inc4
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_spectemplate.inc58
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_usertemplate.inc68
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_application-union.inc13
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_import_disabled.inc3
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_import_enabled.inc3
-rwxr-xr-xtestautomation/framework/optional/includes/basic_vba-compat_import_nothing.inc3
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/extras_file_open.inc6
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/extras_labels.inc60
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/extras_modify_objects.inc27
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/extras_table_autoformat.inc9
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/filedlg_cjk_files.inc3
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/filedlg_document_properties.inc66
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/filedlg_filternames.inc16
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/filedlg_passwords.inc9
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/help_compare_applications.inc8
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/help_compare_content.inc8
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/help_compare_topics.inc14
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/help_search.inc50
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/ole_3.inc39
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/ole_tools.inc47
-rw-r--r--testautomation/framework/optional/includes/options_ls_2.inc307
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/options_ooo_general.inc574
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/options_ooo_security.inc16
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/scripting_organizers.inc13
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/security_certification_dialogs.inc20
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/security_certified_docs.inc14
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/security_incorrect_password.inc32
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/security_macrosecurity.inc81
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/security_recommend_password.inc8
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/standardbar2.inc5
-rw-r--r--testautomation/framework/optional/includes/w_grid_layout1.inc280
-rw-r--r--testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_add_en-US.txt (renamed from testautomation/framework/optional/input/filternames/Oracle Open Office_Filternames_add_en-US.txt)0
-rw-r--r--testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_en-US.txt (renamed from testautomation/framework/optional/input/filternames/Oracle Open Office_Filternames_en-US.txt)0
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/OpenOffice.org_help_topic_en-US.txt22162
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_applications_en-US.txt (renamed from testautomation/framework/optional/input/help_browser/Oracle Open Office_help_applications_en-US.txt)0
-rwxr-xr-xtestautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_content_en-US.txt868
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_topics_en-US.txt (renamed from testautomation/framework/optional/input/help_browser/Oracle Open Office_help_topics_en-US.txt)26581
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_and_whole_words_en-US.txt (renamed from testautomation/framework/optional/input/help_browser/Oracle Open Office_search_headings_and_whole_words_en-US.txt)0
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_only_en-US.txt (renamed from testautomation/framework/optional/input/help_browser/Oracle Open Office_search_headings_only_en-US.txt)0
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_whole_words_only_en-US.txt (renamed from testautomation/framework/optional/input/help_browser/Oracle Open Office_search_whole_words_only_en-US.txt)0
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_without_filter_en-US.txt (renamed from testautomation/framework/optional/input/help_browser/Oracle Open Office_search_without_filter_en-US.txt)0
-rwxr-xr-xtestautomation/framework/required/f_first.bas70
-rwxr-xr-xtestautomation/framework/required/f_help_browser.bas2
-rwxr-xr-xtestautomation/framework/required/f_programmability_dialogs.bas (renamed from testautomation/framework/required/f_basic_dialogs.bas)6
-rwxr-xr-xtestautomation/framework/required/f_script_organizers.bas58
-rwxr-xr-xtestautomation/framework/required/f_standard_toolbar.bas2
-rwxr-xr-xtestautomation/framework/required/f_tools_options.bas2
-rwxr-xr-xtestautomation/framework/required/f_topten.bas26
-rwxr-xr-xtestautomation/framework/required/f_window_functions.bas5
-rwxr-xr-xtestautomation/framework/required/f_wizards.bas2
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/basic_dialog_i18n.inc54
-rw-r--r--testautomation/framework/required/includes/basic_dialog_i18n_import.inc38
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/basic_macroassignment.inc167
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/basic_organizer.inc14
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/first.inc149
-rw-r--r--testautomation/framework/required/includes/graphics_import.inc314
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/help_browser.inc39
-rwxr-xr-xtestautomation/framework/required/includes/script_organizers.inc65
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/scripting_basics.inc (renamed from testautomation/framework/optional/includes/scripting_basics.inc)17
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/standard_toolbar_4.inc28
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/standard_toolbar_6.inc6
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/tools_customize.inc368
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/tools_options.inc37
-rw-r--r--[-rwxr-xr-x]testautomation/framework/required/includes/window_functions.inc252
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/wizard_agenda.inc22
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/wizard_fax.inc16
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/wizard_letter.inc18
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/wizard_mailmerge.inc18
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/wizard_presentation.inc10
-rwxr-xr-xtestautomation/framework/required/input/10erTest_680.sxwbin32738 -> 32670 bytes
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_ar_DZ.properties1
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_ca_ES.properties1
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_de_DE.properties1
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_en_US.properties1
-rw-r--r--testautomation/framework/required/input/basic_ide/Dialog5_fr_FR.properties1
-rwxr-xr-xtestautomation/framework/tools/includes/all_interfaces.txt125
-rw-r--r--testautomation/framework/tools/includes/apicalls.inc116
-rw-r--r--testautomation/framework/tools/includes/arrayfuncs.inc163
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/customize_tools.inc233
-rw-r--r--testautomation/framework/tools/includes/filedlg_tools.inc117
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/fileoperations.inc226
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/formcontrols.inc226
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/help_tools.inc288
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/i18n_tools.inc84
-rw-r--r--testautomation/framework/tools/includes/init_tools.inc205
-rw-r--r--testautomation/framework/tools/includes/javatools.inc151
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/options_tools.inc78
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/pbrowser_tools.inc341
-rw-r--r--testautomation/framework/tools/includes/performance.inc69
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/scriptorganizer_tools.inc198
-rw-r--r--testautomation/framework/tools/includes/signature_tools.inc90
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/spadmin_tools.inc94
-rw-r--r--testautomation/framework/tools/includes/tabpages.inc95
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/template_tools.inc80
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/toolbar_tools.inc120
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/wizards.inc48
-rwxr-xr-xtestautomation/global/input/accelerators.txt49
-rwxr-xr-xtestautomation/global/input/macros.txt6
-rw-r--r--testautomation/global/input/officeinfo.txt3
-rwxr-xr-x[-rw-r--r--]testautomation/global/required/includes/g_001.inc134
-rwxr-xr-x[-rw-r--r--]testautomation/global/required/includes/g_009.inc50
-rwxr-xr-x[-rw-r--r--]testautomation/global/required/includes/g_numberformatter1.inc10
-rwxr-xr-xtestautomation/global/required/includes/g_option.inc15
-rw-r--r--testautomation/global/required/includes/g_printing.inc2
-rw-r--r--testautomation/global/sid/context.sid1
-rw-r--r--testautomation/global/sid/e_all.sid1
-rwxr-xr-xtestautomation/global/system/includes/gvariabl.inc3
-rwxr-xr-xtestautomation/global/system/includes/iniinfo.inc551
-rwxr-xr-x[-rw-r--r--]testautomation/global/system/includes/inivalue.inc361
-rwxr-xr-xtestautomation/global/system/includes/master.inc29
-rwxr-xr-xtestautomation/global/tools/compressstatus.bas2
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_basic_ide_tools.inc607
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_basic_organizer_tools.inc266
-rw-r--r--testautomation/global/tools/includes/optional/t_ctrl_1.inc955
-rw-r--r--testautomation/global/tools/includes/optional/t_ctrl_2.inc355
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_docfuncs.inc302
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_extension_manager_tools.inc16
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_filetools.inc12
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_listfuncs.inc428
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_macro_tools.inc179
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_ole.inc57
-rw-r--r--testautomation/global/tools/includes/optional/t_proxy_info.inc138
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_security_tools.inc261
-rw-r--r--testautomation/global/tools/includes/optional/t_server_info.inc148
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_stringtools.inc140
-rw-r--r--testautomation/global/tools/includes/optional/t_toolbar_calc.inc300
-rw-r--r--testautomation/global/tools/includes/optional/t_toolbar_impress.inc290
-rwxr-xr-xtestautomation/global/tools/includes/optional/t_treelist_tools.inc151
-rw-r--r--testautomation/global/tools/includes/optional/t_ui_filters.inc11
-rw-r--r--testautomation/global/tools/includes/optional/t_user_info.inc12
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_dir.inc88
-rw-r--r--testautomation/global/tools/includes/required/t_dirloc.inc288
-rw-r--r--testautomation/global/tools/includes/required/t_doc1.inc516
-rwxr-xr-xtestautomation/global/tools/includes/required/t_doc2.inc161
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_files.inc433
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_filters.inc15
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_lists.inc26
-rwxr-xr-xtestautomation/global/tools/includes/required/t_menu.inc208
-rw-r--r--testautomation/global/tools/includes/required/t_option2.inc22
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_tools1.inc229
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_tools2.inc311
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_tools3.inc289
-rwxr-xr-xtestautomation/global/tools/record_macro.bas54
-rwxr-xr-xtestautomation/global/win/bars.win2
-rwxr-xr-xtestautomation/global/win/dial_p_s.win10
-rwxr-xr-xtestautomation/global/win/edia_d_h.win11
-rwxr-xr-xtestautomation/global/win/edia_t_z.win2
-rwxr-xr-xtestautomation/global/win/etab_p_s.win12
-rw-r--r--testautomation/graphics/optional/includes/global/export_graphic.inc764
-rw-r--r--testautomation/graphics/optional/includes/global/export_graphic_2.inc88
-rw-r--r--testautomation/graphics/optional/includes/global/g_arrangealign.inc11
-rw-r--r--testautomation/graphics/optional/includes/global/g_autocorrection.inc2
-rw-r--r--testautomation/graphics/optional/includes/global/g_ole.inc57
-rw-r--r--[-rwxr-xr-x]testautomation/graphics/optional/includes/global/g_stylist.inc307
-rw-r--r--testautomation/graphics/optional/includes/global/g_tables.inc88
-rw-r--r--testautomation/graphics/optional/includes/global/id_001.inc16
-rw-r--r--testautomation/graphics/optional/includes/global/id_002.inc99
-rw-r--r--testautomation/graphics/optional/includes/global/id_003.inc8
-rw-r--r--testautomation/graphics/optional/includes/global/id_004.inc74
-rw-r--r--testautomation/graphics/optional/includes/global/id_006.inc2
-rw-r--r--testautomation/graphics/optional/includes/impress/i_slidecopy.inc1222
-rw-r--r--testautomation/graphics/optional/includes/impress/i_us2_present.inc520
-rw-r--r--testautomation/graphics/optional/includes/impress/i_us_present.inc670
-rw-r--r--testautomation/graphics/optional/includes/impress/im_007_.inc1108
-rw-r--r--testautomation/graphics/required/d_updt.bas6
-rw-r--r--testautomation/graphics/required/includes/draw/d_002_.inc8
-rw-r--r--testautomation/graphics/required/includes/draw/d_003_.inc9
-rw-r--r--testautomation/graphics/required/includes/draw/d_005_.inc8
-rw-r--r--testautomation/graphics/required/includes/draw/d_007.inc8
-rw-r--r--testautomation/graphics/required/includes/global/gallery.inc15
-rw-r--r--testautomation/graphics/required/includes/global/gallery2.inc2
-rw-r--r--testautomation/graphics/required/includes/global/id_001.inc16
-rw-r--r--testautomation/graphics/required/includes/global/id_002.inc108
-rw-r--r--testautomation/graphics/required/includes/global/id_003.inc10
-rw-r--r--testautomation/graphics/required/includes/global/id_004.inc43
-rw-r--r--testautomation/graphics/required/includes/global/id_005.inc22
-rw-r--r--testautomation/graphics/required/includes/global/id_006.inc58
-rw-r--r--testautomation/graphics/required/includes/global/id_007.inc19
-rw-r--r--testautomation/graphics/required/includes/global/id_008.inc3
-rw-r--r--testautomation/graphics/required/includes/global/id_009.inc9
-rw-r--r--testautomation/graphics/required/includes/global/id_011.inc23
-rw-r--r--testautomation/graphics/required/includes/global/id_opt_1.inc7
-rw-r--r--testautomation/graphics/required/includes/global/id_opt_2.inc4
-rw-r--r--testautomation/graphics/required/includes/impress/i_opt_1_.inc30
-rw-r--r--testautomation/graphics/required/includes/impress/im_002_.inc35
-rw-r--r--testautomation/graphics/required/includes/impress/im_003_.inc194
-rw-r--r--testautomation/graphics/required/includes/impress/im_004_.inc46
-rw-r--r--testautomation/graphics/required/includes/impress/im_005_.inc32
-rw-r--r--testautomation/graphics/required/includes/impress/im_007_.inc539
-rw-r--r--testautomation/graphics/required/includes/impress/im_011_.inc44
-rw-r--r--testautomation/graphics/tools/id_tools.inc1364
-rw-r--r--testautomation/graphics/tools/id_tools_2.inc971
-rwxr-xr-x[-rw-r--r--]testautomation/math/optional/includes/m_101_.inc20
-rw-r--r--testautomation/math/required/includes/m_001_.inc1183
-rwxr-xr-x[-rw-r--r--]testautomation/math/required/includes/m_002_.inc4
-rwxr-xr-x[-rw-r--r--]testautomation/math/required/includes/m_007_.inc8
-rwxr-xr-x[-rw-r--r--]testautomation/math/required/includes/m_020_.inc26
-rwxr-xr-x[-rw-r--r--]testautomation/spreadsheet/optional/includes/import_general/c_import_general.inc27
-rwxr-xr-x[-rw-r--r--]testautomation/spreadsheet/required/includes/c_upd_editmenu.inc13
-rwxr-xr-x[-rw-r--r--]testautomation/spreadsheet/required/includes/c_upd_insertmenu.inc270
-rwxr-xr-x[-rw-r--r--]testautomation/spreadsheet/required/includes/c_upd_toolsmenu2.inc3
-rwxr-xr-xtestautomation/tools/run_tests/run_tests.vbs46
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/autotext/w_autotext.inc6
-rwxr-xr-xtestautomation/writer/optional/includes/clipboard/clipbrd_func.inc2
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/drawing/w_drawing_tools1.inc4
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/drawing/w_drawing_tools2.inc2
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields2.inc2
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields4.inc30
-rwxr-xr-xtestautomation/writer/optional/includes/fields/w_fields5.inc8
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/fields/w_fields7.inc4
-rwxr-xr-xtestautomation/writer/optional/includes/hangulhanjaonversion/hhConversion1.inc67
-rwxr-xr-xtestautomation/writer/optional/includes/hangulhanjaonversion/hhConversion2.inc140
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion3.inc66
-rw-r--r--testautomation/writer/optional/includes/loadsave/w_loadsave.inc2
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/navigator/w_navigator.inc8
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/option/wr_o_4.inc23
-rwxr-xr-xtestautomation/writer/optional/includes/regexp/search.inc3
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/section/w_section_4.inc8
-rwxr-xr-xtestautomation/writer/optional/includes/spellcheck/w_spellcheck.inc10
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/textframes/w_textframes1.inc2
-rw-r--r--testautomation/writer/optional/includes/tools/tools1.inc225
-rw-r--r--testautomation/writer/optional/includes/tools/tools2.inc666
-rw-r--r--testautomation/writer/optional/includes/undo/w_undo1.inc401
-rw-r--r--[-rwxr-xr-x]testautomation/writer/optional/includes/undo/w_undo_history_1.inc286
-rw-r--r--[-rwxr-xr-x]testautomation/writer/optional/includes/undo/w_undo_history_2.inc842
-rw-r--r--testautomation/writer/optional/includes/undo/w_undo_history_3.inc1072
-rw-r--r--testautomation/writer/optional/includes/undo/w_undo_history_4.inc650
-rwxr-xr-x[-rw-r--r--]testautomation/writer/required/includes/w_001_.inc13
-rw-r--r--testautomation/writer/required/includes/w_001a_.inc38
-rw-r--r--testautomation/writer/required/includes/w_001b_.inc54
-rwxr-xr-xtestautomation/writer/required/includes/w_002_.inc792
-rwxr-xr-x[-rw-r--r--]testautomation/writer/required/includes/w_004_.inc908
-rw-r--r--testautomation/writer/required/includes/w_004b_.inc965
-rwxr-xr-xtestautomation/writer/required/includes/w_005_.inc4
-rwxr-xr-xtestautomation/writer/required/includes/w_007_.inc24
-rwxr-xr-x[-rw-r--r--]testautomation/writer/required/includes/w_009_.inc3
-rwxr-xr-x[-rw-r--r--]testautomation/writer/required/includes/w_010_.inc15
-rwxr-xr-x[-rw-r--r--]testautomation/writer/required/includes/w_020_.inc19
-rwxr-xr-xtestautomation/writer/required/w_updt.bas2
-rwxr-xr-xtestautomation/writer/tools/includes/w_tool1.inc61
-rw-r--r--testautomation/writer/tools/includes/w_tool2.inc69
-rwxr-xr-x[-rw-r--r--]testautomation/writer/tools/includes/w_tool3.inc6
-rwxr-xr-x[-rw-r--r--]testautomation/writer/tools/includes/w_tool4.inc2
-rwxr-xr-x[-rw-r--r--]testautomation/writer/tools/includes/w_tool6.inc50
-rw-r--r--[-rwxr-xr-x]testautomation/writer/tools/includes/w_tools.inc77
-rw-r--r--testautomation/xml/optional/includes/docbook_001.inc2
-rw-r--r--testautomation/xml/tools/includes/xmltool1.inc115
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties1
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties1
-rw-r--r--testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties1
-rw-r--r--toolkit/inc/toolkit/awt/vclxsystemdependentwindow.hxx4
-rw-r--r--toolkit/inc/toolkit/controls/unocontrolmodel.hxx22
-rw-r--r--toolkit/inc/toolkit/helper/unopropertyarrayhelper.hxx3
-rw-r--r--toolkit/prj/d.lst2
-rw-r--r--toolkit/source/helper/property.cxx6
-rw-r--r--tools/bootstrp/makefile.mk9
-rw-r--r--tools/bootstrp/rscdep.cxx59
-rw-r--r--tools/inc/tools/color.hxx2
-rw-r--r--tools/inc/tools/svlibrary.hxx (renamed from sd/source/ui/inc/printdlg.hrc)24
-rw-r--r--tools/inc/tools/wintypes.hxx1
-rw-r--r--tools/prj/d.lst1
-rw-r--r--tools/source/generic/makefile.mk3
-rw-r--r--tools/source/generic/svlibrary.cxx129
-rw-r--r--ucb/source/ucp/file/shell.cxx8
-rw-r--r--ucbhelper/source/provider/simpleauthenticationrequest.cxx14
-rw-r--r--unotools/source/misc/fontcvt.cxx16
-rw-r--r--unotools/source/misc/fontdefs.cxx8
-rw-r--r--uui/prj/build.lst2
-rwxr-xr-x[-rw-r--r--]uui/source/iahndl-authentication.cxx142
-rwxr-xr-x[-rw-r--r--]uui/source/ids.hrc265
-rwxr-xr-x[-rw-r--r--]uui/source/logindlg.cxx164
-rwxr-xr-x[-rw-r--r--]uui/source/logindlg.hrc30
-rwxr-xr-x[-rw-r--r--]uui/source/logindlg.hxx50
-rwxr-xr-x[-rw-r--r--]uui/source/logindlg.src188
-rwxr-xr-x[-rw-r--r--]uui/source/loginerr.hxx120
-rwxr-xr-x[-rw-r--r--]uui/source/passworddlg.cxx30
-rwxr-xr-x[-rw-r--r--]uui/source/passworddlg.hxx2
-rwxr-xr-x[-rw-r--r--]uui/source/passworddlg.src28
-rwxr-xr-x[-rw-r--r--]uui/source/passworderrs.src9
-rw-r--r--vbahelper/inc/vbahelper/vbaapplicationbase.hxx11
-rw-r--r--vbahelper/inc/vbahelper/vbacollectionimpl.hxx92
-rw-r--r--vbahelper/inc/vbahelper/vbadocumentbase.hxx3
-rw-r--r--vbahelper/inc/vbahelper/vbafontbase.hxx9
-rw-r--r--vbahelper/inc/vbahelper/vbahelper.hxx20
-rw-r--r--vbahelper/inc/vbahelper/vbahelperinterface.hxx53
-rw-r--r--vbahelper/source/msforms/makefile.mk1
-rw-r--r--vbahelper/source/msforms/vbacontrol.cxx34
-rw-r--r--vbahelper/source/msforms/vbacontrol.hxx7
-rw-r--r--vbahelper/source/msforms/vbacontrols.cxx182
-rw-r--r--vbahelper/source/msforms/vbacontrols.hxx7
-rwxr-xr-xvbahelper/source/msforms/vbasystemaxcontrol.cxx101
-rwxr-xr-xvbahelper/source/msforms/vbasystemaxcontrol.hxx58
-rw-r--r--vbahelper/source/vbahelper/makefile.mk1
-rw-r--r--vbahelper/source/vbahelper/vbaapplicationbase.cxx293
-rw-r--r--vbahelper/source/vbahelper/vbacommandbar.cxx82
-rw-r--r--vbahelper/source/vbahelper/vbacommandbar.hxx34
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrol.cxx16
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrol.hxx2
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrols.cxx78
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarcontrols.hxx20
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarhelper.cxx25
-rw-r--r--vbahelper/source/vbahelper/vbacommandbarhelper.hxx4
-rw-r--r--vbahelper/source/vbahelper/vbacommandbars.cxx72
-rw-r--r--vbahelper/source/vbahelper/vbacommandbars.hxx2
-rw-r--r--vbahelper/source/vbahelper/vbadocumentbase.cxx40
-rw-r--r--vbahelper/source/vbahelper/vbafontbase.cxx85
-rw-r--r--vbahelper/source/vbahelper/vbahelper.cxx350
-rwxr-xr-xvcl/aqua/inc/salframeview.h1
-rw-r--r--vcl/aqua/inc/salgdi.h2
-rw-r--r--vcl/aqua/source/gdi/salgdi.cxx2
-rwxr-xr-xvcl/aqua/source/window/salframeview.mm5
-rw-r--r--vcl/aqua/source/window/salmenu.cxx4
-rwxr-xr-x[-rw-r--r--]vcl/inc/vcl/abstdlg.hxx13
-rw-r--r--vcl/inc/vcl/menu.hxx18
-rw-r--r--vcl/inc/vcl/salgdi.hxx4
-rw-r--r--vcl/os2/inc/salgdi.h2
-rw-r--r--vcl/os2/source/gdi/salgdi.cxx1
-rw-r--r--vcl/source/control/button.cxx9
-rw-r--r--vcl/source/gdi/outdev.cxx16
-rw-r--r--vcl/source/gdi/outdev6.cxx38
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx14
-rw-r--r--vcl/source/gdi/salgdilayout.cxx7
-rw-r--r--vcl/source/window/menu.cxx191
-rw-r--r--vcl/source/window/window.cxx8
-rw-r--r--vcl/unx/gtk/window/gtkframe.cxx17
-rw-r--r--vcl/unx/headless/svpgdi.cxx2
-rw-r--r--vcl/unx/headless/svpgdi.hxx2
-rw-r--r--vcl/unx/headless/svppspgraphics.cxx2
-rw-r--r--vcl/unx/headless/svppspgraphics.hxx2
-rw-r--r--vcl/unx/inc/pspgraphics.h2
-rw-r--r--vcl/unx/inc/salgdi.h2
-rw-r--r--vcl/unx/source/app/keysymnames.cxx1
-rw-r--r--vcl/unx/source/app/sm.cxx25
-rw-r--r--vcl/unx/source/app/wmadaptor.cxx99
-rw-r--r--vcl/unx/source/fontmanager/fontconfig.cxx2
-rw-r--r--vcl/unx/source/gdi/pspgraphics.cxx2
-rw-r--r--vcl/unx/source/gdi/salgdi.cxx8
-rw-r--r--vcl/unx/source/gdi/salprnpsp.cxx12
-rw-r--r--vcl/unx/source/printergfx/printerjob.cxx3
-rw-r--r--vcl/win/inc/salgdi.h2
-rw-r--r--vcl/win/source/app/salinfo.cxx3
-rw-r--r--vcl/win/source/gdi/salgdi_gdiplus.cxx5
-rw-r--r--writerfilter/inc/dmapper/DomainMapper.hxx5
-rw-r--r--writerfilter/inc/resourcemodel/WW8ResourceModel.hxx2
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.cxx124
-rw-r--r--[-rwxr-xr-x]writerfilter/source/dmapper/DomainMapper.cxx105
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx107
-rw-r--r--[-rwxr-xr-x]writerfilter/source/dmapper/DomainMapper_Impl.hxx47
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx2
-rw-r--r--writerfilter/source/dmapper/LFOTable.cxx199
-rw-r--r--writerfilter/source/dmapper/ListTable.cxx903
-rw-r--r--writerfilter/source/dmapper/ListTable.hxx89
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx1017
-rw-r--r--writerfilter/source/dmapper/NumberingManager.hxx226
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx3
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx6
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx131
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx2
-rw-r--r--[-rwxr-xr-x]writerfilter/source/dmapper/SettingsTable.cxx21
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx36
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.hxx2
-rw-r--r--[-rwxr-xr-x]writerfilter/source/dmapper/makefile.mk3
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.cxx20
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx6
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.hxx4
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx5
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx5
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx2
-rw-r--r--writerfilter/source/ooxml/model.xml7
-rwxr-xr-xxmerge/JAVA_TREE_IS_DEPRECATED1
-rwxr-xr-xxmerge/README.TXT9
-rw-r--r--xmerge/java/build.xml147
-rw-r--r--xmerge/java/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/Convert.java330
-rw-r--r--xmerge/java/org/openoffice/xmerge/ConvertData.java117
-rw-r--r--xmerge/java/org/openoffice/xmerge/ConvertException.java45
-rw-r--r--xmerge/java/org/openoffice/xmerge/ConverterCapabilities.java67
-rw-r--r--xmerge/java/org/openoffice/xmerge/ConverterFactory.java124
-rw-r--r--xmerge/java/org/openoffice/xmerge/Document.java99
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentDeserializer.java65
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentDeserializer2.java71
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentDeserializerFactory.java65
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentMerger.java93
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentMergerFactory.java63
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentSerializer.java67
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentSerializer2.java73
-rw-r--r--xmerge/java/org/openoffice/xmerge/DocumentSerializerFactory.java63
-rw-r--r--xmerge/java/org/openoffice/xmerge/MergeException.java45
-rw-r--r--xmerge/java/org/openoffice/xmerge/PluginFactory.java193
-rw-r--r--xmerge/java/org/openoffice/xmerge/Version.java88
-rw-r--r--xmerge/java/org/openoffice/xmerge/build.xml142
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/dom/DOMDocument.java382
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/dom/build.xml127
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/dom/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/dom/package.html53
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/PalmDB.java469
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/PalmDocument.java180
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/PdbDecoder.java235
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/PdbEncoder.java196
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/PdbHeader.java162
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/PdbUtil.java106
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/Record.java216
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/build.xml130
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/package.html140
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/README50
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/README6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/rd24
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/spose108
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/verify_sane.pl108
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_comparator.pl255
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_test_driver.pl844
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/run-convtest536
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/env/master.env85
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/lists/master.list55
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_animatedgif.pdbbin208 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bolddoc.pdbbin243 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bookmarks.pdbbin648 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bulletorderedlist.pdbbin237 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_emptydoc.pdbbin111 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_firstlineindent.pdbbin254 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_fontsize.pdbbin261 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading.pdbbin159 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading1.pdbbin160 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading2.pdbbin150 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_hyperlink.pdbbin304 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_justified.pdbbin169 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linebreaks.pdbbin362 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linespacing.pdbbin435 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_numberorderedlist.pdbbin232 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_pagebreak.pdbbin174 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_paragraph.pdbbin240 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple01.pdbbin158 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple02.pdbbin158 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple03.pdbbin158 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple04.pdbbin158 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple05.pdbbin158 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_standard.pdbbin158 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_subscript.pdbbin161 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_superscript.pdbbin164 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_symbols.pdbbin190 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_tab.pdbbin240 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_table.pdbbin165 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_textspan.pdbbin364 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_unorderedlist.pdbbin428 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_wordwrap.pdbbin221 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet1.pdbbin670 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet1.pdbbin1534 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet1.pdbbin558 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet1.pdbbin670 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet1.pdbbin282 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet1.pdbbin614 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet1.pdbbin324 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet1.pdbbin651 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet1.pdbbin631 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet1.pdbbin455 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet1.pdbbin485 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet1.pdbbin475 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet1.pdbbin250 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet1.pdbbin573 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet1.pdbbin3957 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet1.pdbbin1086 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet1.pdbbin958 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet1.pdbbin608 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet2.pdbbin238 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet1.pdbbin779 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet2.pdbbin373 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet3.pdbbin371 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet1.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet1.pdbbin353 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet1.pdbbin518 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet1.pdbbin683 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet1.pdbbin651 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet1.pdbbin675 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet1.pdbbin250 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet2.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet3.pdbbin188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/Blocklist.dtd34
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_animatedgif.sxwbin52952 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bolddoc.sxwbin5500 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bookmarks.sxwbin6047 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bulletorderedlist.sxwbin6347 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_emptydoc.sxwbin5701 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_firstlineindent.sxwbin5519 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_fontsize.sxwbin6130 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading.sxwbin5518 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading1.sxwbin5640 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading2.sxwbin5964 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_hyperlink.sxwbin5514 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_justified.sxwbin6088 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linebreaks.sxwbin6269 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linespacing.sxwbin5618 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_numberorderedlist.sxwbin6188 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_pagebreak.sxwbin5534 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_paragraph.sxwbin5914 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple01.sxwbin5823 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple02.sxwbin5821 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple03.sxwbin5817 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple04.sxwbin5792 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple05.sxwbin5791 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_standard.sxwbin5797 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_subscript.sxwbin5798 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_superscript.sxwbin5799 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_symbols.sxwbin4916 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_tab.sxwbin5731 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_table.sxwbin6011 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_textspan.sxwbin5958 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_unorderedlist.sxwbin6817 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_wordwrap.sxwbin5363 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_addition.sxcbin5829 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_alignment.sxcbin6383 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_backwardrange.sxcbin5995 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_basic.sxcbin5830 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_boolean.sxcbin6066 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellcurrencyalue.sxcbin6776 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellpercentvalue.sxcbin6318 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellstringvalue.sxcbin6009 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_columnswidth.sxcbin6127 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cyclic.sxcbin6005 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_dividefloating.sxcbin6315 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_forwardrange.sxcbin6058 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_insertimage.sxcbin40476 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_invalidcellref.sxcbin5838 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_largerange.sxcbin6306 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_listrange.sxcbin6162 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_mathematical.sxcbin6026 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_protection.sxcbin6839 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_sheetreference.sxcbin6173 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple01.sxcbin5080 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple02.sxcbin4962 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple03.sxcbin4995 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple04.sxcbin5007 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_smallrange.sxcbin5924 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_styles.sxcbin6531 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_textimage.sxcbin40702 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/chart.mod228
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/datastyl.mod168
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/drawing.mod837
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/dtypes.mod143
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/form.mod308
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/meta.mod90
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/nmspace.mod50
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.dtd54
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.mod234
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/script.mod51
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/settings.mod49
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/style.mod391
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/table.mod493
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/text.mod1099
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_animatedgif.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bolddoc.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bookmarks.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bulletorderedlist.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc-mod.infile9
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_firstlineindent.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_fontsize.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading1.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading2.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_hyperlink.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_justified.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linebreaks.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linespacing.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_numberorderedlist.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_pagebreak.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_paragraph.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple01.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple02.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple03.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple04.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple05.infile5
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_standard.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_subscript.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_superscript.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_symbols.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_tab.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_table.infile5
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_textspan.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_unorderedlist.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_wordwrap.infile4
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_addition01-mod.infile5
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_alignment.infile4
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_backwardrange-mod.infile6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_basic-mod.infile5
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_bob-mod.infile5
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_boolean-mod.infile6
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellcurrencyvalue.infile5
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellpercentvalue-mod.infile8
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellstringvalue-mod.infile10
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_columnswidth-mod.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cyclic-mod.infile12
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_dividefloating-mod.infile8
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_forwardrange-mod.infile6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertimage.infile4
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertrow-mod.infile13
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_invalidcellref-mod.infile10
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_largerange-mod.infile6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_listrange-mod.infile6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_mathematical-mod.infile10
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_multi_boolean.infile5
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_protection-mod01.infile6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_sheetreference-mod.infile6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple01-mod.infile13
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple02-mod.infile13
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple03-mod.infile22
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple04-mod.infile14
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_smallrange-mod.infile6
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_styles.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_textimage.infile12
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/empty01.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/hyperlink01.infile4
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/image01.infile4
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple01.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple02.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple03.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple04.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple05.infile4
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table01.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table02.infile3
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table03.infile4
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table04.infile4
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_animatedgif.sxwbin53136 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bolddoc.sxwbin5664 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bookmarks.sxwbin6227 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bulletorderedlist.sxwbin6347 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc-mod.sxwbin5880 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc.sxwbin5880 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_firstlineindent.sxwbin5683 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_fontsize.sxwbin6315 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading.sxwbin5700 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading1.sxwbin5819 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading2.sxwbin6142 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_hyperlink.sxwbin5673 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_justified.sxwbin6269 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linebreaks.sxwbin6444 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linespacing.sxwbin5783 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_numberorderedlist.sxwbin6366 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_pagebreak.sxwbin5698 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_paragraph.sxwbin6093 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple01.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple02.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple03.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple04.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple05.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_standard.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_subscript.sxwbin5980 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_superscript.sxwbin5981 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_symbols.sxwbin5106 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_tab.sxwbin5912 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_table.sxwbin6181 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_textspan.sxwbin6142 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_unorderedlist.sxwbin6817 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_wordwrap.sxwbin5524 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_addition.sxcbin6020 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_alignment.sxcbin6535 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_backwardrange.sxcbin6204 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_basic.sxcbin6020 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_boolean.sxcbin6239 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellcurrencyalue.sxcbin6776 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellpercentvalue.sxcbin6495 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellstringvalue.sxcbin6172 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_columnswidth.sxcbin6287 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cyclic.sxcbin6005 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_dividefloating.sxcbin6315 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_forwardrange.sxcbin6259 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertimage.sxcbin40702 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertrow.sxcbin5157 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_invalidcellref.sxcbin6035 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_largerange.sxcbin6487 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_listrange.sxcbin6370 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_mathematical.sxcbin6351 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_multi_boolean.sxcbin5338 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_protection.sxcbin6839 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_sheetreference.sxcbin6358 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple01.sxcbin5176 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple02.sxcbin4999 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple03.sxcbin5044 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple04.sxcbin5083 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_smallrange.sxcbin6129 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_styles.sxcbin6531 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_textimage.sxcbin40702 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/empty01.sxwbin5880 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/hyperlink01.sxwbin6088 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/image01.sxwbin53136 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple01.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple02.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple03.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple04.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple05.sxwbin5978 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table01.sxwbin6443 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table02.sxwbin6443 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table03.sxwbin6443 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table04.sxwbin6443 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/mysplit.pl56
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/tappen.pl59
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/template.pl53
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl783
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/OfficeZip.java241
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBDecoder.java135
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBHeader.java154
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBUtil.java101
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PalmDB.java350
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/README10
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/Record.java167
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/SimplePdbCompare.java94
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.java465
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.properties13
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlWrapper.java153
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlZipExtract.java146
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/comparator.pl245
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/Blocklist.dtd34
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/chart.mod228
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/datastyl.mod168
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/drawing.mod837
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/dtypes.mod143
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/form.mod308
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/meta.mod90
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/nmspace.mod50
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.dtd54
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.mod234
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/script.mod51
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/settings.mod49
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/style.mod391
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/table.mod493
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/text.mod1099
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/pdbcomparison.java542
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Doc_descriptions.sxcbin8347 -> 0 bytes
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.csv39
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.sxcbin5752 -> 0 bytes
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/lib/converterlib.pm1172
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/palm-session/session8
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/test_spec/convertor_test_spec.html2274
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java128
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java117
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java298
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java439
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java1234
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java131
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java458
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java607
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/Style.java235
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java397
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/StyleTest01.xml169
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java684
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/build.xml137
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/package.html39
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java229
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java515
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java195
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java306
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java199
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java477
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java216
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java305
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java374
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java181
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java131
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java93
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java794
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java992
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java83
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/build.xml143
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java113
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java545
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java744
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java582
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java129
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java138
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java141
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/build.xml135
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/converter.xml43
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html51
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html38
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java113
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java130
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java68
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java446
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java295
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java129
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java136
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/build.xml132
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/converter.xml43
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html41
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java62
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java116
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java116
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java127
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java137
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java138
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java108
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java158
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java95
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java97
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java227
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java72
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java385
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java121
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java287
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java263
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java140
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java95
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java219
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java139
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java143
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java125
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java43
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java116
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java155
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java540
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java320
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/build.xml152
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java272
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java153
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java564
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java207
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java65
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java76
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java43
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java86
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java82
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java154
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java206
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java498
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java561
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java123
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java41
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/build.xml141
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html40
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html45
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java95
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java78
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java69
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java304
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java214
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java313
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java99
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java532
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java141
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/build.xml134
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/converter.xml43
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html237
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/build.xml128
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html38
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java236
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java298
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java99
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java437
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java859
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java205
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java165
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java95
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java408
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/build.xml136
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/converter.xml47
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html56
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java61
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java565
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java99
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java536
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java149
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java352
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java212
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java100
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java247
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java218
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java145
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java299
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java324
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/build.xml141
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/converter.xml17
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java115
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java68
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java93
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java254
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java99
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java309
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java95
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java204
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties36
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/build.xml136
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/converter.xml50
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/DBFilter.java570
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Manifest1
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Readme.txt14
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/makefile.mk60
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbooktosoffheadings.xsl1725
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/literallayout.java135
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_article.xsl848
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_chapter.xsl858
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/htmltosoff.xsl174
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html65
-rw-r--r--xmerge/java/org/openoffice/xmerge/converter/xml/xslt/sofftohtml.xsl28
-rw-r--r--xmerge/java/org/openoffice/xmerge/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/DiffAlgorithm.java51
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/Difference.java242
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/Iterator.java123
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/MergeAlgorithm.java61
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/NodeMergeAlgorithm.java55
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/build.xml131
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/CellNodeIterator.java116
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/CharArrayLCSAlgorithm.java235
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/CharacterParser.java143
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/IteratorLCSAlgorithm.java236
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/IteratorRowCompare.java243
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/NodeIterator.java386
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/ObjectArrayIterator.java210
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/ParaNodeIterator.java95
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/RowIterator.java84
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeEntry.java88
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeIterator.java90
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/build.xml137
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/diff/package.html41
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/CharacterBaseParagraphMerge.java310
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/DocumentMerge.java250
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/PositionBaseRowMerge.java267
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/SheetMerge.java92
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/SheetUtil.java108
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/build.xml131
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/merge/package.html41
-rw-r--r--xmerge/java/org/openoffice/xmerge/merger/package.html73
-rw-r--r--xmerge/java/org/openoffice/xmerge/package.html111
-rw-r--r--xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.java108
-rw-r--r--xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties36
-rw-r--r--xmerge/java/org/openoffice/xmerge/test/Driver.java321
-rw-r--r--xmerge/java/org/openoffice/xmerge/test/build.xml131
-rw-r--r--xmerge/java/org/openoffice/xmerge/test/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/ActiveSyncDriver.java147
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/ColourConverter.java446
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/Debug.java341
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/Debug.properties38
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/EndianConverter.java179
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/IntArrayList.java147
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/OfficeUtil.java135
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/Resources.java100
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/TwipsConverter.java100
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/XmlUtil.java189
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/build.xml140
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/package.html37
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfo.java436
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoMgr.java536
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoReader.java279
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/RegistryException.java47
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/build.xml130
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/converter.dtd94
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/makefile.mk32
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/registry/package.html80
-rw-r--r--xmerge/java/org/openoffice/xmerge/util/resources.properties68
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.cxx523
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.xml24
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile102
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile.bck108
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/README97
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/exports.dxp3
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/makefile.mk97
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Makefile123
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Manifest1
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/README97
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/TestStream.java461
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XFlatXml.java506
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XInputStreamToInputStreamAdapter.java204
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XOutputStreamToOutputStreamAdapter.java116
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/makefile.mk126
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.cxx267
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.hxx141
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/FlatXml.java546
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Makefile97
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Manifest1
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/README97
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/TypeDetection.xcu30
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/Makefile_sdk102
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/Manifest1
-rw-r--r--xmerge/java/org/openoffice/xmerge/xmergebridge/TestStream.java488
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/XMergeBridge.java712
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.cxx267
-rwxr-xr-xxmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.hxx141
-rw-r--r--xmerge/source/inc/antbuild.properties1
-rw-r--r--xmerge/source/palmtests/qa/comparator/XmlDiff.properties1
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties1
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties1
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.properties1
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/resources.properties1
-rw-r--r--xmerge/workben/XmlDiff.properties1
-rw-r--r--xmlhelp/source/cxxhelp/provider/databases.cxx181
-rw-r--r--xmlhelp/source/cxxhelp/provider/databases.hxx19
-rw-r--r--xmlhelp/source/cxxhelp/provider/urlparameter.cxx10
-rw-r--r--xmlhelp/source/cxxhelp/provider/urlparameter.hxx3
-rw-r--r--xmlhelp/source/treeview/tvread.cxx47
-rw-r--r--xmlhelp/source/treeview/tvread.hxx9
-rw-r--r--xmloff/inc/xmloff/XMLEventExport.hxx8
-rw-r--r--xmloff/inc/xmloff/xmltoken.hxx1
-rw-r--r--xmloff/source/chart/SchXMLPlotAreaContext.cxx15
-rw-r--r--xmloff/source/core/xmltoken.cxx1
-rw-r--r--xmloff/source/draw/ximppage.cxx3
-rw-r--r--xmloff/source/script/XMLEventExport.cxx25
-rw-r--r--xmlscript/inc/xmlscript/xmlmod_imexp.hxx1
-rw-r--r--xmlscript/source/xmlmod_imexp/xmlmod_export.cxx3
-rw-r--r--xmlscript/source/xmlmod_imexp/xmlmod_import.cxx7
-rw-r--r--xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx1
-rw-r--r--xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx6
-rw-r--r--xmlsecurity/source/dialogs/digitalsignaturesdialog.src78
-rw-r--r--[-rwxr-xr-x]xmlsecurity/test_docs/tools/httpserv/nbproject/genfiles.properties1
-rw-r--r--[-rwxr-xr-x]xmlsecurity/test_docs/tools/httpserv/nbproject/project.properties1
-rw-r--r--xpdf/makefile.mk2
2082 files changed, 70729 insertions, 153681 deletions
diff --git a/accessibility/inc/accessibility/extended/AccessibleGridControlTableBase.hxx b/accessibility/inc/accessibility/extended/AccessibleGridControlTableBase.hxx
index 28d9cfb919f1..bee42d85e2a2 100755
--- a/accessibility/inc/accessibility/extended/AccessibleGridControlTableBase.hxx
+++ b/accessibility/inc/accessibility/extended/AccessibleGridControlTableBase.hxx
@@ -174,14 +174,6 @@ protected:
// internal helper methods ------------------------------------------------
/** @attention This method requires locked mutex's and a living object.
- @param nColumn
- the position of the column in the Accessible world
- @return
- the position of the column in VCL the Accessible world
- */
- sal_uInt16 implToVCLColumnPos( sal_Int32 nColumn ) const;
-
- /** @attention This method requires locked mutex's and a living object.
@return The number of cells of the table. */
sal_Int32 implGetChildCount() const;
diff --git a/accessibility/source/extended/AccessibleGridControlTableBase.cxx b/accessibility/source/extended/AccessibleGridControlTableBase.cxx
index 352e80e1a666..f6d1147ad309 100755
--- a/accessibility/source/extended/AccessibleGridControlTableBase.cxx
+++ b/accessibility/source/extended/AccessibleGridControlTableBase.cxx
@@ -220,19 +220,6 @@ Sequence< sal_Int8 > SAL_CALL AccessibleGridControlTableBase::getImplementationI
// internal helper methods ----------------------------------------------------
-sal_uInt16 AccessibleGridControlTableBase::implToVCLColumnPos( sal_Int32 nColumn ) const
-{
- sal_uInt16 nVCLPos = 0;
- if( (0 <= nColumn) && (nColumn < m_aTable.GetColumnCount()) )
- {
- // regard "handle column"
- if( m_aTable.HasRowHeader() )
- ++nColumn;
- nVCLPos = static_cast< sal_uInt16 >( nColumn );
- }
- return nVCLPos;
-}
-
sal_Int32 AccessibleGridControlTableBase::implGetChildCount() const
{
return m_aTable.GetRowCount()*m_aTable.GetColumnCount();
diff --git a/accessibility/source/extended/accessibletabbarbase.cxx b/accessibility/source/extended/accessibletabbarbase.cxx
index 5f290178ea25..5c26185f6b03 100644
--- a/accessibility/source/extended/accessibletabbarbase.cxx
+++ b/accessibility/source/extended/accessibletabbarbase.cxx
@@ -63,7 +63,7 @@ IMPL_LINK( AccessibleTabBarBase, WindowEventListener, VclSimpleEvent*, pEvent )
DBG_ASSERT( pEventWindow, "AccessibleTabBarBase::WindowEventListener: no window!" );
if( ( pWinEvent->GetId() == VCLEVENT_TABBAR_PAGEREMOVED ) &&
- ( (sal_uInt16)(sal_IntPtr) pWinEvent->GetData() == TABBAR_PAGE_NOTFOUND ) &&
+ ( (sal_uInt16)(sal_IntPtr) pWinEvent->GetData() == TabBar::PAGE_NOT_FOUND ) &&
( dynamic_cast< AccessibleTabBarPageList *> (this) != NULL ) )
{
return 0;
diff --git a/accessibility/source/extended/accessibletabbarpagelist.cxx b/accessibility/source/extended/accessibletabbarpagelist.cxx
index e852e0ed54cc..51c86003b0c2 100644
--- a/accessibility/source/extended/accessibletabbarpagelist.cxx
+++ b/accessibility/source/extended/accessibletabbarpagelist.cxx
@@ -313,7 +313,7 @@ namespace accessibility
{
sal_uInt16 nPageId = (sal_uInt16)(sal_IntPtr) rVclWindowEvent.GetData();
- if ( nPageId == TABBAR_PAGE_NOTFOUND )
+ if ( nPageId == TabBar::PAGE_NOT_FOUND )
{
for ( sal_Int32 i = m_aAccessibleChildren.size() - 1; i >= 0; --i )
RemoveChild( i );
diff --git a/automation/util/makefile.mk b/automation/util/makefile.mk
index e683e73631b8..756a3d6a62e4 100644
--- a/automation/util/makefile.mk
+++ b/automation/util/makefile.mk
@@ -136,7 +136,7 @@ DEF3DES =Communication
APP1TARGET=testtool
-.IF "$(GUI)" == "UNX"
+.IF "$(GUI)"=="UNX" || ("$(COM)"=="GCC" && "$(GUI)"=="WNT")
APP1DEPN+=$(SHL2TARGETN) $(SHL3TARGETN)
.ELSE
APP1DEPN+=$(SHL2IMPLIBN) $(SHL3IMPLIBN)
@@ -228,7 +228,7 @@ APP3STDLIBS+= \
.ENDIF
.ENDIF
# $(AUTOMATIONLIB) is build in SHL1TARGET
-.IF "$(GUI)"=="UNX"
+.IF "$(GUI)"=="UNX" || ("$(COM)"=="GCC" && "$(GUI)"=="WNT")
APP3DEPN=$(SHL1TARGETN)
.ELSE
APP3DEPN=$(SHL1IMPLIBN)
diff --git a/basctl/source/basicide/scriptdocument.cxx b/basctl/source/basicide/scriptdocument.cxx
index a8c6d24a3ff5..1f1d8ab6145b 100644
--- a/basctl/source/basicide/scriptdocument.cxx
+++ b/basctl/source/basicide/scriptdocument.cxx
@@ -1016,8 +1016,11 @@ namespace basctl
::rtl::OUString aSearchURL1( RTL_CONSTASCII_USTRINGPARAM( "share/basic" ) );
::rtl::OUString aSearchURL2( RTL_CONSTASCII_USTRINGPARAM( "share/uno_packages" ) );
- if( aCanonicalFileURL.indexOf( aSearchURL1 ) != -1 || aCanonicalFileURL.indexOf( aSearchURL2 ) != -1 )
- bIsShared = true;
+ ::rtl::OUString aSearchURL3( RTL_CONSTASCII_USTRINGPARAM( "share/extensions" ) );
+ if( aCanonicalFileURL.indexOf( aSearchURL1 ) != -1 ||
+ aCanonicalFileURL.indexOf( aSearchURL2 ) != -1 ||
+ aCanonicalFileURL.indexOf( aSearchURL3 ) != -1 )
+ bIsShared = true;
}
}
catch( const Exception& )
diff --git a/basic/inc/basic/sbmod.hxx b/basic/inc/basic/sbmod.hxx
index 63ffef6cdd61..cf888adf9dcf 100644
--- a/basic/inc/basic/sbmod.hxx
+++ b/basic/inc/basic/sbmod.hxx
@@ -40,6 +40,7 @@ class SbiBreakpoints;
class SbiImage;
class SbProcedureProperty;
class SbIfaceMapperMethod;
+class SbClassModuleObject;
struct SbClassData;
class SbModuleImpl;
@@ -125,11 +126,12 @@ public:
BOOL LoadBinaryData( SvStream& );
BOOL ExceedsLegacyModuleSize();
void fixUpMethodStart( bool bCvtToLegacy, SbiImage* pImg = NULL ) const;
- BOOL IsVBACompat();
- void SetVBACompat( BOOL bCompat );
- INT32 GetModuleType() { return mnType; }
- void SetModuleType( INT32 nType ) { mnType = nType; }
+ BOOL IsVBACompat() const;
+ void SetVBACompat( BOOL bCompat );
+ INT32 GetModuleType() { return mnType; }
+ void SetModuleType( INT32 nType ) { mnType = nType; }
bool GetIsProxyModule() { return bIsProxyModule; }
+ bool createCOMWrapperForIface( ::com::sun::star::uno::Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject );
};
#ifndef __SB_SBMODULEREF_HXX
diff --git a/basic/inc/basic/sbobjmod.hxx b/basic/inc/basic/sbobjmod.hxx
index ad804dcfab38..3d638a475f9a 100644
--- a/basic/inc/basic/sbobjmod.hxx
+++ b/basic/inc/basic/sbobjmod.hxx
@@ -62,6 +62,7 @@ public:
class SbUserFormModule : public SbObjModule
{
+ com::sun::star::script::ModuleInfo m_mInfo;
css::uno::Reference<css::lang::XEventListener> m_DialogListener;
css::uno::Reference<css::awt::XDialog> m_xDialog;
css::uno::Reference<css::frame::XModel> m_xModel;
@@ -70,7 +71,7 @@ class SbUserFormModule : public SbObjModule
SbUserFormModule( const SbUserFormModule& );
SbUserFormModule();
-protected:
+//protected:
virtual void InitObject();
public:
TYPEINFO();
@@ -85,8 +86,23 @@ public:
void triggerDeActivateEvent();
void triggerInitializeEvent();
void triggerTerminateEvent();
+
+ class SbUserFormModuleInstance* CreateInstance();
};
+class SbUserFormModuleInstance : public SbUserFormModule
+{
+ SbUserFormModule* m_pParentModule;
+
+public:
+ SbUserFormModuleInstance( SbUserFormModule* pParentModule, const String& rName,
+ const com::sun::star::script::ModuleInfo& mInfo, bool bIsVBACompat );
+
+ virtual BOOL IsClass( const String& ) const;
+ virtual SbxVariable* Find( const XubString& rName, SbxClassType t );
+};
+
+
#ifndef __SB_SBOBJMODULEREF_HXX
#define __SB_SBOBJMODULEREF_HXX
diff --git a/basic/inc/basic/sbx.hxx b/basic/inc/basic/sbx.hxx
index 1254716c84e6..2eb194708739 100644
--- a/basic/inc/basic/sbx.hxx
+++ b/basic/inc/basic/sbx.hxx
@@ -171,8 +171,8 @@ class SbxArray : public SbxBase
{
// #100883 Method to set method directly to parameter array
friend class SbMethod;
- friend class SbTypeFactory;
friend class SbClassModuleObject;
+ friend SbxObject* cloneTypeObjectImpl( const SbxObject& rTypeObj );
void PutDirect( SbxVariable* pVar, UINT32 nIdx );
SbxArrayImpl* mpSbxArrayImpl; // Impl data
diff --git a/basic/inc/basic/sbxdef.hxx b/basic/inc/basic/sbxdef.hxx
index 8206fa2b1667..89322be776f9 100644
--- a/basic/inc/basic/sbxdef.hxx
+++ b/basic/inc/basic/sbxdef.hxx
@@ -105,6 +105,9 @@ enum SbxDataType {
SbxUSERn = 2047 // last user defined data type
};
+const UINT32 SBX_TYPE_WITH_EVENTS_FLAG = 0x10000;
+const UINT32 SBX_FIXED_LEN_STRING_FLAG = 0x10000; // same value as above as no conflict possible
+
#endif
#ifndef _SBX_OPERATOR
@@ -313,6 +316,7 @@ enum SbxError { // Ergebnis einer Rechenoperation/Konversion
#define SBX_NO_BROADCAST 0x2000 // No broadcast on Get/Put
#define SBX_REFERENCE 0x4000 // Parameter is Reference (DLL-call)
#define SBX_NO_MODIFY 0x8000 // SetModified is suppressed
+#define SBX_WITH_EVENTS 0x0080 // Same value as unused SBX_HIDDEN
// Broadcaster-IDs:
#define SBX_HINT_DYING SFX_HINT_DYING
diff --git a/basic/inc/basic/sbxvar.hxx b/basic/inc/basic/sbxvar.hxx
index 715d8c46f0f3..4d9d19b52a59 100644
--- a/basic/inc/basic/sbxvar.hxx
+++ b/basic/inc/basic/sbxvar.hxx
@@ -230,8 +230,6 @@ class SbxValueImpl;
class SbxValue : public SbxBase
{
- friend class SbiDllMgr; // BASIC-Runtime must access aData
-
SbxValueImpl* mpSbxValueImplImpl; // Impl data
// #55226 Transport additional infos
@@ -289,6 +287,8 @@ public:
const SbxValues& GetValues_Impl() const { return aData; }
virtual BOOL Put( const SbxValues& );
+ inline SbxValues * data() { return &aData; }
+
SbxINT64 GetCurrency() const;
SbxINT64 GetLong64() const;
SbxUINT64 GetULong64() const;
@@ -447,6 +447,9 @@ class SbxVariable : public SbxValue
String maName; // Name, if available
SbxArrayRef mpPar; // Parameter-Array, if set
USHORT nHash; // Hash-ID for search
+
+ SbxVariableImpl* getImpl( void );
+
protected:
SbxInfoRef pInfo; // Probably called information
sal_uIntPtr nUserData; // User data for Call()
@@ -492,6 +495,10 @@ public:
inline SbxObject* GetParent() { return pParent; }
virtual void SetParent( SbxObject* );
+ const String& GetDeclareClassName( void );
+ void SetDeclareClassName( const String& );
+ void SetComListener( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xComListener );
+
static USHORT MakeHashCode( const String& rName );
};
diff --git a/basic/prj/build.lst b/basic/prj/build.lst
index 9453154edf46..c00a3d8412d3 100755
--- a/basic/prj/build.lst
+++ b/basic/prj/build.lst
@@ -1,4 +1,4 @@
-sb basic : l10n offuh oovbaapi svtools xmlscript framework NULL
+sb basic : l10n offuh oovbaapi svtools xmlscript framework salhelper NULL
sb basic usr1 - all sb_mkout NULL
sb basic\inc nmake - all sb_inc NULL
sb basic\source\app nmake - all sb_app sb_class sb_inc NULL
diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx
index c242165df825..b76a2b5e249e 100644
--- a/basic/source/basmgr/basmgr.cxx
+++ b/basic/source/basmgr/basmgr.cxx
@@ -1789,7 +1789,7 @@ bool BasicManager::GetGlobalUNOConstant( const sal_Char* _pAsciiName, ::com::sun
{
bool bRes = false;
StarBASIC* pStandardLib = GetStdLib();
- OSL_PRECOND( pStandardLib, "BasicManager::SetGlobalUNOConstant: no lib to insert into!" );
+ OSL_PRECOND( pStandardLib, "BasicManager::GetGlobalUNOConstant: no lib to read from!" );
if ( pStandardLib )
bRes = pStandardLib->GetUNOConstant( _pAsciiName, aOut );
return bRes;
diff --git a/basic/source/classes/disas.cxx b/basic/source/classes/disas.cxx
index 36e88b6353e8..7317005d74fe 100644
--- a/basic/source/classes/disas.cxx
+++ b/basic/source/classes/disas.cxx
@@ -89,7 +89,8 @@ static const char* pOp1[] = {
"INITFOREACH",
"VBASET",
"ERASE_CLEAR",
- "ARRAYACCESS"
+ "ARRAYACCESS",
+ "BYVAL"
};
static const char* pOp2[] = {
diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx
index 4f2f90d5da1f..79c5f78601ea 100755
--- a/basic/source/classes/sb.cxx
+++ b/basic/source/classes/sb.cxx
@@ -321,23 +321,52 @@ SbxObject* SbOLEFactory::CreateObject( const String& rClassName )
}
-// Factory class to create user defined objects (type command)
-class SbTypeFactory : public SbxFactory
-{
- SbxObject* cloneTypeObjectImpl( const SbxObject& rTypeObj );
+//========================================================================
+// SbFormFactory, show user forms by: dim as new <user form name>
+class SbFormFactory : public SbxFactory
+{
public:
virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
virtual SbxObject* CreateObject( const String& );
};
-SbxBase* SbTypeFactory::Create( UINT16, UINT32 )
+SbxBase* SbFormFactory::Create( UINT16, UINT32 )
{
// Not supported
return NULL;
}
-SbxObject* SbTypeFactory::cloneTypeObjectImpl( const SbxObject& rTypeObj )
+SbxObject* SbFormFactory::CreateObject( const String& rClassName )
+{
+ static String aLoadMethodName( RTL_CONSTASCII_USTRINGPARAM("load") );
+
+ SbxObject* pRet = NULL;
+ SbModule* pMod = pMOD;
+ if( pMod )
+ {
+ SbxVariable* pVar = pMod->Find( rClassName, SbxCLASS_OBJECT );
+ if( pVar )
+ {
+ SbxBase* pObj = pVar->GetObject();
+ SbUserFormModule* pFormModule = PTR_CAST( SbUserFormModule, pObj );
+
+ if( pFormModule != NULL )
+ {
+ pFormModule->load();
+ SbUserFormModuleInstance* pFormInstance = pFormModule->CreateInstance();
+ pRet = pFormInstance;
+ }
+ }
+ }
+ return pRet;
+}
+
+
+//========================================================================
+// SbTypeFactory
+
+SbxObject* cloneTypeObjectImpl( const SbxObject& rTypeObj )
{
SbxObject* pRet = new SbxObject( rTypeObj );
pRet->PutObject( pRet );
@@ -352,7 +381,8 @@ SbxObject* SbTypeFactory::cloneTypeObjectImpl( const SbxObject& rTypeObj )
if( pProp )
{
SbxProperty* pNewProp = new SbxProperty( *pProp );
- if( pVar->GetType() & SbxARRAY )
+ SbxDataType eVarType = pVar->GetType();
+ if( eVarType & SbxARRAY )
{
SbxBase* pParObj = pVar->GetObject();
SbxDimArray* pSource = PTR_CAST(SbxDimArray,pParObj);
@@ -379,12 +409,35 @@ SbxObject* SbTypeFactory::cloneTypeObjectImpl( const SbxObject& rTypeObj )
pNewProp->PutObject( pDest );
pNewProp->SetFlags( nSavFlags );
}
+ if( eVarType == SbxOBJECT )
+ {
+ SbxBase* pObjBase = pVar->GetObject();
+ SbxObject* pSrcObj = PTR_CAST(SbxObject,pObjBase);
+ SbxObject* pDestObj = NULL;
+ if( pSrcObj != NULL )
+ pDestObj = cloneTypeObjectImpl( *pSrcObj );
+ pNewProp->PutObject( pDestObj );
+ }
pProps->PutDirect( pNewProp, i );
}
}
return pRet;
}
+// Factory class to create user defined objects (type command)
+class SbTypeFactory : public SbxFactory
+{
+public:
+ virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
+ virtual SbxObject* CreateObject( const String& );
+};
+
+SbxBase* SbTypeFactory::Create( UINT16, UINT32 )
+{
+ // Not supported
+ return NULL;
+}
+
SbxObject* SbTypeFactory::CreateObject( const String& rClassName )
{
SbxObject* pRet = NULL;
@@ -728,6 +781,8 @@ StarBASIC::StarBASIC( StarBASIC* p, BOOL bIsDocBasic )
AddFactory( pCLASSFAC );
pOLEFAC = new SbOLEFactory;
AddFactory( pOLEFAC );
+ pFORMFAC = new SbFormFactory;
+ AddFactory( pFORMFAC );
}
pRtl = new SbiStdObject( String( RTL_CONSTASCII_USTRINGPARAM(RTLNAME) ), this );
// Search via StarBasic is always global
@@ -748,15 +803,17 @@ StarBASIC::~StarBASIC()
if( !--GetSbData()->nInst )
{
RemoveFactory( pSBFAC );
- pSBFAC = NULL;
+ delete pSBFAC; pSBFAC = NULL;
RemoveFactory( pUNOFAC );
- pUNOFAC = NULL;
+ delete pUNOFAC; pUNOFAC = NULL;
RemoveFactory( pTYPEFAC );
- pTYPEFAC = NULL;
+ delete pTYPEFAC; pTYPEFAC = NULL;
RemoveFactory( pCLASSFAC );
- pCLASSFAC = NULL;
+ delete pCLASSFAC; pCLASSFAC = NULL;
RemoveFactory( pOLEFAC );
- pOLEFAC = NULL;
+ delete pOLEFAC; pOLEFAC = NULL;
+ RemoveFactory( pFORMFAC );
+ delete pFORMFAC; pFORMFAC = NULL;
#ifdef DBG_UTIL
// There is no need to clean SbiData at program end,
diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx
index 849fd839bfd1..e51a0c09270b 100644..100755
--- a/basic/source/classes/sbunoobj.cxx
+++ b/basic/source/classes/sbunoobj.cxx
@@ -49,6 +49,7 @@
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/uno/DeploymentException.hpp>
#include <com/sun/star/lang/XTypeProvider.hpp>
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
@@ -1074,8 +1075,19 @@ Any sbxToUnoValueImpl( SbxVariable* pVar, bool bBlockConversionToSmallestType =
if( eBaseType == SbxOBJECT )
{
SbxBaseRef xObj = (SbxBase*)pVar->GetObject();
- if( xObj.Is() && xObj->ISA(SbUnoAnyObject) )
- return ((SbUnoAnyObject*)(SbxBase*)xObj)->getValue();
+ if( xObj.Is() )
+ {
+ if( xObj->ISA(SbUnoAnyObject) )
+ return ((SbUnoAnyObject*)(SbxBase*)xObj)->getValue();
+ if( xObj->ISA(SbClassModuleObject) )
+ {
+ Any aRetAny;
+ SbClassModuleObject* pClassModuleObj = (SbClassModuleObject*)(SbxBase*)xObj;
+ SbModule* pClassModule = pClassModuleObj->getClassModule();
+ if( pClassModule->createCOMWrapperForIface( aRetAny, pClassModuleObj ) )
+ return aRetAny;
+ }
+ }
}
Type aType = getUnoTypeForSbxValue( pVar );
@@ -1581,12 +1593,18 @@ String getBasicObjectTypeName( SbxObject* pObj )
bool checkUnoObjectType( SbUnoObject* pUnoObj,
const String& aClass )
{
- bool result = false;
Any aToInspectObj = pUnoObj->getUnoAny();
TypeClass eType = aToInspectObj.getValueType().getTypeClass();
if( eType != TypeClass_INTERFACE )
return false;
const Reference< XInterface > x = *(Reference< XInterface >*)aToInspectObj.getValue();
+
+ // Return true for XInvocation based objects as interface type names don't count then
+ Reference< XInvocation > xInvocation( x, UNO_QUERY );
+ if( xInvocation.is() )
+ return true;
+
+ bool result = false;
Reference< XTypeProvider > xTypeProvider( x, UNO_QUERY );
if( xTypeProvider.is() )
{
@@ -4135,3 +4153,267 @@ void RTL_Impl_CreateUnoValue( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
refVar->PutObject( xUnoAnyObject );
}
+//==========================================================================
+
+typedef WeakImplHelper1< XInvocation > ModuleInvocationProxyHelper;
+
+class ModuleInvocationProxy : public ModuleInvocationProxyHelper
+{
+ ::rtl::OUString m_aPrefix;
+ SbxObjectRef m_xScopeObj;
+ bool m_bProxyIsClassModuleObject;
+
+public:
+ ModuleInvocationProxy( const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj );
+ ~ModuleInvocationProxy()
+ {}
+
+ // XInvocation
+ virtual Reference< XIntrospectionAccess > SAL_CALL getIntrospection() throw();
+ virtual void SAL_CALL setValue( const ::rtl::OUString& rProperty, const Any& rValue )
+ throw( UnknownPropertyException );
+ virtual Any SAL_CALL getValue( const ::rtl::OUString& rProperty )
+ throw( UnknownPropertyException );
+ virtual sal_Bool SAL_CALL hasMethod( const ::rtl::OUString& rName ) throw();
+ virtual sal_Bool SAL_CALL hasProperty( const ::rtl::OUString& rProp ) throw();
+
+ virtual Any SAL_CALL invoke( const ::rtl::OUString& rFunction,
+ const Sequence< Any >& rParams,
+ Sequence< sal_Int16 >& rOutParamIndex,
+ Sequence< Any >& rOutParam )
+ throw( CannotConvertException, InvocationTargetException );
+};
+
+ModuleInvocationProxy::ModuleInvocationProxy( const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj )
+ : m_aPrefix( aPrefix + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("_") ) )
+ , m_xScopeObj( xScopeObj )
+{
+ m_bProxyIsClassModuleObject = xScopeObj.Is() ? xScopeObj->ISA(SbClassModuleObject) : false;
+}
+
+Reference< XIntrospectionAccess > SAL_CALL ModuleInvocationProxy::getIntrospection() throw()
+{
+ return Reference< XIntrospectionAccess >();
+}
+
+void SAL_CALL ModuleInvocationProxy::setValue( const ::rtl::OUString& rProperty, const Any& rValue ) throw( UnknownPropertyException )
+{
+ if( !m_bProxyIsClassModuleObject )
+ throw UnknownPropertyException();
+
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ ::rtl::OUString aPropertyFunctionName( RTL_CONSTASCII_USTRINGPARAM( "Property Set ") );
+ aPropertyFunctionName += m_aPrefix;
+ aPropertyFunctionName += rProperty;
+
+ SbxVariable* p = m_xScopeObj->Find( aPropertyFunctionName, SbxCLASS_METHOD );
+ SbMethod* pMeth = p != NULL ? PTR_CAST(SbMethod,p) : NULL;
+ if( pMeth == NULL )
+ {
+ // TODO: Check vba behavior concernig missing function
+ //StarBASIC::Error( SbERR_NO_METHOD, aFunctionName );
+ throw UnknownPropertyException();
+ }
+
+ // Setup parameter
+ SbxArrayRef xArray = new SbxArray;
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( (SbxVariable*)xVar, rValue );
+ xArray->Put( xVar, 1 );
+
+ // Call property method
+ SbxVariableRef xValue = new SbxVariable;
+ pMeth->SetParameters( xArray );
+ pMeth->Call( xValue );
+ //aRet = sbxToUnoValue( xValue );
+ pMeth->SetParameters( NULL );
+
+ // TODO: OutParameter?
+
+ // throw InvocationTargetException();
+
+ //return aRet;
+
+}
+
+Any SAL_CALL ModuleInvocationProxy::getValue( const ::rtl::OUString& rProperty ) throw( UnknownPropertyException )
+{
+ if( !m_bProxyIsClassModuleObject )
+ throw UnknownPropertyException();
+
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ ::rtl::OUString aPropertyFunctionName( RTL_CONSTASCII_USTRINGPARAM( "Property Get ") );
+ aPropertyFunctionName += m_aPrefix;
+ aPropertyFunctionName += rProperty;
+
+ SbxVariable* p = m_xScopeObj->Find( aPropertyFunctionName, SbxCLASS_METHOD );
+ SbMethod* pMeth = p != NULL ? PTR_CAST(SbMethod,p) : NULL;
+ if( pMeth == NULL )
+ {
+ // TODO: Check vba behavior concernig missing function
+ //StarBASIC::Error( SbERR_NO_METHOD, aFunctionName );
+ throw UnknownPropertyException();
+ }
+
+ // Call method
+ SbxVariableRef xValue = new SbxVariable;
+ pMeth->Call( xValue );
+ Any aRet = sbxToUnoValue( xValue );
+ return aRet;
+}
+
+sal_Bool SAL_CALL ModuleInvocationProxy::hasMethod( const ::rtl::OUString& ) throw()
+{
+ return sal_False;
+}
+
+sal_Bool SAL_CALL ModuleInvocationProxy::hasProperty( const ::rtl::OUString& ) throw()
+{
+ return sal_False;
+}
+
+Any SAL_CALL ModuleInvocationProxy::invoke( const ::rtl::OUString& rFunction,
+ const Sequence< Any >& rParams,
+ Sequence< sal_Int16 >&,
+ Sequence< Any >& )
+ throw( CannotConvertException, InvocationTargetException )
+{
+ NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() );
+
+ Any aRet;
+ if( !m_xScopeObj.Is() )
+ return aRet;
+
+ ::rtl::OUString aFunctionName = m_aPrefix;
+ aFunctionName += rFunction;
+
+ SbxVariable* p = m_xScopeObj->Find( aFunctionName, SbxCLASS_METHOD );
+ SbMethod* pMeth = p != NULL ? PTR_CAST(SbMethod,p) : NULL;
+ if( pMeth == NULL )
+ {
+ // TODO: Check vba behavior concernig missing function
+ //StarBASIC::Error( SbERR_NO_METHOD, aFunctionName );
+ return aRet;
+ }
+
+ // Setup parameters
+ SbxArrayRef xArray;
+ sal_Int32 nParamCount = rParams.getLength();
+ if( nParamCount )
+ {
+ xArray = new SbxArray;
+ const Any *pArgs = rParams.getConstArray();
+ for( sal_Int32 i = 0 ; i < nParamCount ; i++ )
+ {
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( (SbxVariable*)xVar, pArgs[i] );
+ xArray->Put( xVar, sal::static_int_cast< USHORT >(i+1) );
+ }
+ }
+
+ // Call method
+ SbxVariableRef xValue = new SbxVariable;
+ if( xArray.Is() )
+ pMeth->SetParameters( xArray );
+ pMeth->Call( xValue );
+ aRet = sbxToUnoValue( xValue );
+ pMeth->SetParameters( NULL );
+
+ // TODO: OutParameter?
+
+ return aRet;
+}
+
+Reference< XInterface > createComListener( const Any& aControlAny, const ::rtl::OUString& aVBAType,
+ const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj )
+{
+ Reference< XInterface > xRet;
+
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ Reference< XMultiComponentFactory > xServiceMgr( xContext->getServiceManager() );
+
+ Reference< XInvocation > xProxy = new ModuleInvocationProxy( aPrefix, xScopeObj );
+
+ Sequence<Any> args( 3 );
+ args[0] <<= aControlAny;
+ args[1] <<= aVBAType;
+ args[2] <<= xProxy;
+
+ try
+ {
+ xRet = xServiceMgr->createInstanceWithArgumentsAndContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.custom.UnoComListener")),
+ args, xContext );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+
+ return xRet;
+}
+
+// Handle module implements mechanism for OLE types
+bool SbModule::createCOMWrapperForIface( Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject )
+{
+ // For now: Take first interface that allows to instantiate COM wrapper
+ // TODO: Check if support for multiple interfaces is needed
+
+ Reference< XComponentContext > xContext = getComponentContext_Impl();
+ Reference< XMultiComponentFactory > xServiceMgr( xContext->getServiceManager() );
+ Reference< XSingleServiceFactory > xComImplementsFactory
+ (
+ xServiceMgr->createInstanceWithContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.custom.ComImplementsFactory")), xContext ),
+ UNO_QUERY
+ );
+ if( !xComImplementsFactory.is() )
+ return false;
+
+ bool bSuccess = false;
+
+ SbxArray* pModIfaces = pClassData->mxIfaces;
+ USHORT nCount = pModIfaces->Count();
+ for( USHORT i = 0 ; i < nCount ; ++i )
+ {
+ SbxVariable* pVar = pModIfaces->Get( i );
+ ::rtl::OUString aIfaceName = pVar->GetName();
+
+ if( aIfaceName.getLength() != 0 )
+ {
+ ::rtl::OUString aPureIfaceName = aIfaceName;
+ sal_Int32 indexLastDot = aIfaceName.lastIndexOf('.');
+ if ( indexLastDot > -1 )
+ aPureIfaceName = aIfaceName.copy( indexLastDot + 1 );
+
+ Reference< XInvocation > xProxy = new ModuleInvocationProxy( aPureIfaceName, pProxyClassModuleObject );
+
+ Sequence<Any> args( 2 );
+ args[0] <<= aIfaceName;
+ args[1] <<= xProxy;
+
+ Reference< XInterface > xRet;
+ bSuccess = false;
+ try
+ {
+ xRet = xComImplementsFactory->createInstanceWithArguments( args );
+ bSuccess = true;
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+
+ if( bSuccess )
+ {
+ o_rRetAny <<= xRet;
+ break;
+ }
+ }
+ }
+
+ return bSuccess;
+}
+
diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx
index 4b58942d77aa..1b49a376c9bd 100644
--- a/basic/source/classes/sbxmod.cxx
+++ b/basic/source/classes/sbxmod.cxx
@@ -190,6 +190,11 @@ SbModule::SbModule( const String& rName, BOOL bVBACompat )
SetName( rName );
SetFlag( SBX_EXTSEARCH | SBX_GBLSEARCH );
SetModuleType( script::ModuleType::NORMAL );
+
+ // #i92642: Set name property to intitial name
+ SbxVariable* pNameProp = pProps->Find( String( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_PROPERTY );
+ if( pNameProp != NULL )
+ pNameProp->PutString( GetName() );
}
SbModule::~SbModule()
@@ -366,7 +371,7 @@ SbxVariable* SbModule::Find( const XubString& rName, SbxClassType t )
{
// make sure a search in an uninstatiated class module will fail
SbxVariable* pRes = SbxObject::Find( rName, t );
- if ( bIsProxyModule )
+ if ( bIsProxyModule && !GetSbData()->bRunInit )
return NULL;
if( !pRes && pImage )
{
@@ -452,7 +457,19 @@ void SbModule::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType,
}
}
else
- SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ {
+ // #i92642: Special handling for name property to avoid
+ // side effects when using name as variable implicitely
+ bool bForwardToSbxObject = true;
+
+ ULONG nId = pHint->GetId();
+ if( (nId == SBX_HINT_DATAWANTED || nId == SBX_HINT_DATACHANGED) &&
+ pVar->GetName().EqualsIgnoreCaseAscii( "name" ) )
+ bForwardToSbxObject = false;
+
+ if( bForwardToSbxObject )
+ SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType );
+ }
}
}
@@ -646,7 +663,7 @@ void ClearUnoObjectsInRTL_Impl( StarBASIC* pBasic )
if( ((StarBASIC*)p) != pBasic )
ClearUnoObjectsInRTL_Impl_Rek( (StarBASIC*)p );
}
-BOOL SbModule::IsVBACompat()
+BOOL SbModule::IsVBACompat() const
{
return mbVBACompat;
}
@@ -1710,18 +1727,20 @@ public:
};
SbUserFormModule::SbUserFormModule( const String& rName, const com::sun::star::script::ModuleInfo& mInfo, bool bIsCompat )
- :SbObjModule( rName, mInfo, bIsCompat ), mbInit( false )
+ : SbObjModule( rName, mInfo, bIsCompat )
+ , m_mInfo( mInfo )
+ , mbInit( false )
{
- m_xModel.set( mInfo.ModuleObject, uno::UNO_QUERY_THROW );
+ m_xModel.set( mInfo.ModuleObject, uno::UNO_QUERY_THROW );
}
void SbUserFormModule::ResetApiObj()
{
- if ( m_xDialog.is() ) // probably someone close the dialog window
+ if ( m_xDialog.is() ) // probably someone close the dialog window
{
- triggerTerminateEvent();
- }
- pDocObject = NULL;
+ triggerTerminateEvent();
+ }
+ pDocObject = NULL;
m_xDialog = NULL;
}
@@ -1807,6 +1826,33 @@ void SbUserFormModule::triggerTerminateEvent( void )
mbInit=false;
}
+SbUserFormModuleInstance* SbUserFormModule::CreateInstance()
+{
+ SbUserFormModuleInstance* pInstance = new SbUserFormModuleInstance( this, GetName(), m_mInfo, IsVBACompat() );
+ return pInstance;
+}
+
+SbUserFormModuleInstance::SbUserFormModuleInstance( SbUserFormModule* pParentModule,
+ const String& rName, const com::sun::star::script::ModuleInfo& mInfo, bool bIsVBACompat )
+ : SbUserFormModule( rName, mInfo, bIsVBACompat )
+ , m_pParentModule( pParentModule )
+{
+}
+
+BOOL SbUserFormModuleInstance::IsClass( const XubString& rName ) const
+{
+ BOOL bParentNameMatches = m_pParentModule->GetName().EqualsIgnoreCaseAscii( rName );
+ BOOL bRet = bParentNameMatches || SbxObject::IsClass( rName );
+ return bRet;
+}
+
+SbxVariable* SbUserFormModuleInstance::Find( const XubString& rName, SbxClassType t )
+{
+ SbxVariable* pVar = m_pParentModule->Find( rName, t );
+ return pVar;
+}
+
+
void SbUserFormModule::load()
{
OSL_TRACE("** load() ");
diff --git a/basic/source/comp/dim.cxx b/basic/source/comp/dim.cxx
index fb4071bcc2a2..bff3d22dd9b0 100644
--- a/basic/source/comp/dim.cxx
+++ b/basic/source/comp/dim.cxx
@@ -1,4 +1,4 @@
- /*************************************************************************
+/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -30,6 +30,8 @@
#include <basic/sbx.hxx>
#include "sbcomp.hxx"
+SbxObject* cloneTypeObjectImpl( const SbxObject& rTypeObj );
+
// Deklaration einer Variablen
// Bei Fehlern wird bis zum Komma oder Newline geparst.
// Returnwert: eine neue Instanz, die eingefuegt und dann geloescht wird.
@@ -37,6 +39,12 @@
SbiSymDef* SbiParser::VarDecl( SbiDimList** ppDim, BOOL bStatic, BOOL bConst )
{
+ bool bWithEvents = false;
+ if( Peek() == WITHEVENTS )
+ {
+ Next();
+ bWithEvents = true;
+ }
if( !TestSymbol() ) return NULL;
SbxDataType t = eScanType;
SbiSymDef* pDef = bConst ? new SbiConstDef( aSym ) : new SbiSymDef( aSym );
@@ -47,6 +55,8 @@ SbiSymDef* SbiParser::VarDecl( SbiDimList** ppDim, BOOL bStatic, BOOL bConst )
pDef->SetType( t );
if( bStatic )
pDef->SetStatic();
+ if( bWithEvents )
+ pDef->SetWithEvents();
TypeDecl( *pDef );
if( !ppDim && pDim )
{
@@ -107,8 +117,10 @@ void SbiParser::TypeDecl( SbiSymDef& rDef, BOOL bAsNewAlreadyParsed )
Next();
SbiConstExpression aSize( this );
nSize = aSize.GetShortValue();
- if( nSize < 0 )
+ if( nSize < 0 || (bVBASupportOn && nSize <= 0) )
Error( SbERR_OUT_OF_RANGE );
+ else
+ rDef.SetFixedStringLength( nSize );
}
}
break;
@@ -209,7 +221,7 @@ void SbiParser::DefVar( SbiOpcode eOp, BOOL bStatic )
// #110004 It can also be a sub/function
if( !bConst && (eCurTok == SUB || eCurTok == FUNCTION || eCurTok == PROPERTY ||
- eCurTok == STATIC || eCurTok == ENUM || eCurTok == DECLARE) )
+ eCurTok == STATIC || eCurTok == ENUM || eCurTok == DECLARE || eCurTok == TYPE) )
{
// Next token is read here, because !bConst
bool bPrivate = ( eFirstTok == PRIVATE );
@@ -244,6 +256,13 @@ void SbiParser::DefVar( SbiOpcode eOp, BOOL bStatic )
DefDeclare( bPrivate );
return;
}
+ // #i109049
+ else if( eCurTok == TYPE )
+ {
+ Next();
+ DefType( bPrivate );
+ return;
+ }
}
#ifdef SHARED
@@ -349,9 +368,15 @@ void SbiParser::DefVar( SbiOpcode eOp, BOOL bStatic )
break;
default: eOp2 = _LOCAL;
}
- aGen.Gen(
- eOp2, pDef->GetId(),
- sal::static_int_cast< UINT16 >( pDef->GetType() ) );
+ UINT32 nOpnd2 = sal::static_int_cast< UINT16 >( pDef->GetType() );
+ if( pDef->IsWithEvents() )
+ nOpnd2 |= SBX_TYPE_WITH_EVENTS_FLAG;
+
+ short nFixedStringLength = pDef->GetFixedStringLength();
+ if( nFixedStringLength >= 0 )
+ nOpnd2 |= (SBX_FIXED_LEN_STRING_FLAG + (UINT32(nFixedStringLength) << 17)); // len = all bits above 0x10000
+
+ aGen.Gen( eOp2, pDef->GetId(), nOpnd2 );
}
// Initialisierung fuer selbstdefinierte Datentypen
@@ -473,7 +498,7 @@ void SbiParser::DefVar( SbiOpcode eOp, BOOL bStatic )
// d.h. pPool muss immer am Schleifen-Ende zurueckgesetzt werden.
// auch bei break
pPool = pOldPool;
- continue; // MyBreak überspingen
+ continue; // MyBreak berspingen
MyBreak:
pPool = pOldPool;
break;
@@ -506,18 +531,7 @@ void SbiParser::Erase()
{
while( !bAbort )
{
- if( !TestSymbol() ) return;
- String aName( aSym );
- SbxDataType eType = eScanType;
- SbiSymDef* pDef = pPool->Find( aName );
- if( !pDef )
- {
- if( bExplicit )
- Error( SbERR_UNDEF_VAR, aName );
- pDef = pPool->AddSym( aName );
- pDef->SetType( eType );
- }
- SbiExpression aExpr( this, *pDef );
+ SbiExpression aExpr( this, SbLVALUE );
aExpr.Gen();
aGen.Gen( _ERASE );
if( !TestComma() ) break;
@@ -576,12 +590,14 @@ void SbiParser::DefType( BOOL bPrivate )
}
if( pElem )
{
- SbxArray *pTypeMembers = pType -> GetProperties();
- if (pTypeMembers -> Find (pElem->GetName(),SbxCLASS_DONTCARE))
+ SbxArray *pTypeMembers = pType->GetProperties();
+ String aElemName = pElem->GetName();
+ if( pTypeMembers->Find( aElemName, SbxCLASS_DONTCARE) )
Error (SbERR_VAR_DEFINED);
else
{
- SbxProperty *pTypeElem = new SbxProperty (pElem->GetName(),pElem->GetType());
+ SbxDataType eElemType = pElem->GetType();
+ SbxProperty *pTypeElem = new SbxProperty( aElemName, eElemType );
if( pDim )
{
SbxDimArray* pArray = new SbxDimArray( pElem->GetType() );
@@ -618,6 +634,21 @@ void SbiParser::DefType( BOOL bPrivate )
pTypeElem->PutObject( pArray );
pTypeElem->SetFlags( nSavFlags );
}
+ // Nested user type?
+ if( eElemType == SbxOBJECT )
+ {
+ USHORT nElemTypeId = pElem->GetTypeId();
+ if( nElemTypeId != 0 )
+ {
+ String aTypeName( aGblStrings.Find( nElemTypeId ) );
+ SbxObject* pTypeObj = static_cast< SbxObject* >( rTypeArray->Find( aTypeName, SbxCLASS_OBJECT ) );
+ if( pTypeObj != NULL )
+ {
+ SbxObject* pCloneObj = cloneTypeObjectImpl( *pTypeObj );
+ pTypeElem->PutObject( pCloneObj );
+ }
+ }
+ }
delete pDim;
pTypeMembers->Insert( pTypeElem, pTypeMembers->Count() );
}
diff --git a/basic/source/comp/exprgen.cxx b/basic/source/comp/exprgen.cxx
index 89520832ff67..60869307aecf 100644
--- a/basic/source/comp/exprgen.cxx
+++ b/basic/source/comp/exprgen.cxx
@@ -148,6 +148,10 @@ void SbiExprNode::Gen( RecursiveMode eRecMode )
pLeft->Gen();
pGen->Gen( _TESTCLASS, nTypeStrId );
}
+ else if( IsNew() )
+ {
+ pGen->Gen( _CREATE, 0, nTypeStrId );
+ }
else
{
pLeft->Gen();
@@ -285,6 +289,8 @@ void SbiExpression::Gen( RecursiveMode eRecMode )
// AB: 17.12.1995, Spezialbehandlung fuer WITH
// Wenn pExpr == .-Ausdruck in With, zunaechst Gen fuer Basis-Objekt
pExpr->Gen( eRecMode );
+ if( bByVal )
+ pParser->aGen.Gen( _BYVAL );
if( bBased )
{
USHORT uBase = pParser->nBase;
diff --git a/basic/source/comp/exprnode.cxx b/basic/source/comp/exprnode.cxx
index a77cf32abbaa..d47c86f86ea8 100644
--- a/basic/source/comp/exprnode.cxx
+++ b/basic/source/comp/exprnode.cxx
@@ -100,6 +100,15 @@ SbiExprNode::SbiExprNode( SbiParser* p, SbiExprNode* l, USHORT nId )
nTypeStrId = nId;
}
+// new <type>
+SbiExprNode::SbiExprNode( SbiParser* p, USHORT nId )
+{
+ BaseInit( p );
+
+ eType = SbxOBJECT;
+ eNodeType = SbxNEW;
+ nTypeStrId = nId;
+}
// AB: 17.12.95, Hilfsfunktion fuer Ctor fuer einheitliche Initialisierung
void SbiExprNode::BaseInit( SbiParser* p )
@@ -253,7 +262,8 @@ void SbiExprNode::CollectBits()
void SbiExprNode::FoldConstants()
{
if( IsOperand() || eTok == LIKE ) return;
- pLeft->FoldConstants();
+ if( pLeft )
+ pLeft->FoldConstants();
if( pRight )
{
pRight->FoldConstants();
@@ -431,7 +441,7 @@ void SbiExprNode::FoldConstants()
}
}
}
- else if( pLeft->IsNumber() )
+ else if( pLeft && pLeft->IsNumber() )
{
nVal = pLeft->nVal;
delete pLeft;
diff --git a/basic/source/comp/exprtree.cxx b/basic/source/comp/exprtree.cxx
index 2f5c0b967a2e..0cf0d9870378 100644
--- a/basic/source/comp/exprtree.cxx
+++ b/basic/source/comp/exprtree.cxx
@@ -38,7 +38,8 @@
|*
***************************************************************************/
-SbiExpression::SbiExpression( SbiParser* p, SbiExprType t, SbiExprMode eMode )
+SbiExpression::SbiExpression( SbiParser* p, SbiExprType t,
+ SbiExprMode eMode, const KeywordSymbolInfo* pKeywordSymbolInfo )
{
pParser = p;
bError = bByVal = bBased = bBracket = FALSE;
@@ -46,7 +47,7 @@ SbiExpression::SbiExpression( SbiParser* p, SbiExprType t, SbiExprMode eMode )
eCurExpr = t;
m_eMode = eMode;
pNext = NULL;
- pExpr = (t != SbSTDEXPR ) ? Term() : Boolean();
+ pExpr = (t != SbSTDEXPR ) ? Term( pKeywordSymbolInfo ) : Boolean();
if( t != SbSYMBOL )
pExpr->Optimize();
if( t == SbLVALUE && !pExpr->IsLvalue() )
@@ -114,7 +115,7 @@ static BOOL DoParametersFollow( SbiParser* p, SbiExprType eCurExpr, SbiToken eTo
if( !p->WhiteSpace() || eCurExpr != SbSYMBOL )
return FALSE;
if ( eTok == NUMBER || eTok == MINUS || eTok == FIXSTRING
- || eTok == SYMBOL || eTok == COMMA || eTok == DOT || eTok == NOT )
+ || eTok == SYMBOL || eTok == COMMA || eTok == DOT || eTok == NOT || eTok == BYVAL )
{
return TRUE;
}
@@ -177,7 +178,7 @@ static SbiSymDef* AddSym
// Zur Zeit sind sogar Keywords zugelassen (wg. gleichnamiger Dflt-Properties)
-SbiExprNode* SbiExpression::Term( void )
+SbiExprNode* SbiExpression::Term( const KeywordSymbolInfo* pKeywordSymbolInfo )
{
if( pParser->Peek() == DOT )
{
@@ -204,11 +205,11 @@ SbiExprNode* SbiExpression::Term( void )
return pNd;
}
- SbiToken eTok = pParser->Next();
+ SbiToken eTok = (pKeywordSymbolInfo == NULL) ? pParser->Next() : pKeywordSymbolInfo->m_eTok;
// Anfang des Parsings merken
pParser->LockColumn();
- String aSym( pParser->GetSym() );
- SbxDataType eType = pParser->GetType();
+ String aSym( (pKeywordSymbolInfo == NULL) ? pParser->GetSym() : pKeywordSymbolInfo->m_aKeywordSymbol );
+ SbxDataType eType = (pKeywordSymbolInfo == NULL) ? pParser->GetType() : pKeywordSymbolInfo->m_eSbxDataType;
SbiParameters* pPar = NULL;
SbiExprListVector* pvMoreParLcl = NULL;
// Folgen Parameter?
@@ -280,6 +281,12 @@ SbiExprNode* SbiExpression::Term( void )
// AB 31.3.1996: In Parser-Methode ausgelagert
// (wird auch in SbiParser::DefVar() in DIM.CXX benoetigt)
pDef = pParser->CheckRTLForSym( aSym, eType );
+
+ // #i109184: Check if symbol is or later will be defined inside module
+ SbModule& rMod = pParser->aGen.GetModule();
+ SbxArray* pModMethods = rMod.GetMethods();
+ if( pModMethods->Find( aSym, SbxCLASS_DONTCARE ) )
+ pDef = NULL;
}
if( !pDef )
{
@@ -417,13 +424,27 @@ SbiExprNode* SbiExpression::ObjTerm( SbiSymDef& rObj )
String aSym( pParser->GetSym() );
SbxDataType eType = pParser->GetType();
SbiParameters* pPar = NULL;
+ SbiExprListVector* pvMoreParLcl = NULL;
eTok = pParser->Peek();
// Parameter?
if( DoParametersFollow( pParser, eCurExpr, eTok ) )
{
- pPar = new SbiParameters( pParser );
+ bool bStandaloneExpression = false;
+ pPar = new SbiParameters( pParser, bStandaloneExpression );
bError |= !pPar->IsValid();
eTok = pParser->Peek();
+
+ // i109624 check for additional sets of parameters
+ while( eTok == LPAREN )
+ {
+ if( pvMoreParLcl == NULL )
+ pvMoreParLcl = new SbiExprListVector();
+ SbiParameters* pAddPar = new SbiParameters( pParser );
+ pvMoreParLcl->push_back( pAddPar );
+ bError |= !pPar->IsValid();
+ eTok = pParser->Peek();
+ }
+
}
BOOL bObj = BOOL( ( eTok == DOT || eTok == EXCLAM ) && !pParser->WhiteSpace() );
if( bObj )
@@ -450,6 +471,7 @@ SbiExprNode* SbiExpression::ObjTerm( SbiSymDef& rObj )
SbiExprNode* pNd = new SbiExprNode( pParser, *pDef, eType );
pNd->aVar.pPar = pPar;
+ pNd->aVar.pvMorePar = pvMoreParLcl;
if( bObj )
{
// Falls wir etwas mit Punkt einscannen, muss der
@@ -483,7 +505,7 @@ SbiExprNode* SbiExpression::ObjTerm( SbiSymDef& rObj )
// Funktionen
// geklammerte Ausdruecke
-SbiExprNode* SbiExpression::Operand()
+SbiExprNode* SbiExpression::Operand( bool bUsedForTypeOf )
{
SbiExprNode *pRes;
SbiToken eTok;
@@ -494,7 +516,7 @@ SbiExprNode* SbiExpression::Operand()
case SYMBOL:
pRes = Term();
// process something like "IF Not r Is Nothing Then .."
- if( pParser->IsVBASupportOn() && pParser->Peek() == IS )
+ if( !bUsedForTypeOf && pParser->IsVBASupportOn() && pParser->Peek() == IS )
{
eTok = pParser->Next();
pRes = new SbiExprNode( pParser, pRes, eTok, Like() );
@@ -576,7 +598,8 @@ SbiExprNode* SbiExpression::Unary()
case TYPEOF:
{
pParser->Next();
- SbiExprNode* pObjNode = Operand();
+ bool bUsedForTypeOf = true;
+ SbiExprNode* pObjNode = Operand( bUsedForTypeOf );
pParser->TestToken( IS );
String aDummy;
SbiSymDef* pTypeDef = new SbiSymDef( aDummy );
@@ -584,6 +607,15 @@ SbiExprNode* SbiExpression::Unary()
pNd = new SbiExprNode( pParser, pObjNode, pTypeDef->GetTypeId() );
break;
}
+ case NEW:
+ {
+ pParser->Next();
+ String aStr;
+ SbiSymDef* pTypeDef = new SbiSymDef( aStr );
+ pParser->TypeDecl( *pTypeDef, TRUE );
+ pNd = new SbiExprNode( pParser, pTypeDef->GetTypeId() );
+ break;
+ }
default:
pNd = Operand();
}
@@ -938,6 +970,14 @@ SbiParameters::SbiParameters( SbiParser* p, BOOL bStandaloneExpression, BOOL bPa
// Benannte Argumente: entweder .name= oder name:=
else
{
+ bool bByVal = false;
+ if( eTok == BYVAL )
+ {
+ bByVal = true;
+ pParser->Next();
+ eTok = pParser->Peek();
+ }
+
if( bAssumeExprLParenMode )
{
pExpr = new SbiExpression( pParser, SbSTDEXPR, EXPRMODE_LPAREN_PENDING );
@@ -961,12 +1001,22 @@ SbiParameters::SbiParameters( SbiParser* p, BOOL bStandaloneExpression, BOOL bPa
{
bBracket = TRUE;
delete pExpr;
+ if( bByVal )
+ pParser->Error( SbERR_LVALUE_EXPECTED );
return;
}
}
else
pExpr = new SbiExpression( pParser );
+ if( bByVal )
+ {
+ if( !pExpr->IsLvalue() )
+ pParser->Error( SbERR_LVALUE_EXPECTED );
+ else
+ pExpr->SetByVal();
+ }
+
//pExpr = bConst ? new SbiConstExpression( pParser )
// : new SbiExpression( pParser );
if( !bAssumeArrayMode )
diff --git a/basic/source/comp/io.cxx b/basic/source/comp/io.cxx
index 1ed551994c92..b211ea0b7b08 100644
--- a/basic/source/comp/io.cxx
+++ b/basic/source/comp/io.cxx
@@ -115,6 +115,30 @@ void SbiParser::Write()
aGen.Gen( _CHAN0 );
}
+
+// #i92642 Handle LINE keyword outside ::Next()
+void SbiParser::Line()
+{
+ // #i92642: Special handling to allow name as symbol
+ if( Peek() == INPUT )
+ {
+ Next();
+ LineInput();
+ }
+ else
+ {
+ aGen.Statement();
+
+ KeywordSymbolInfo aInfo;
+ aInfo.m_aKeywordSymbol = String( RTL_CONSTASCII_USTRINGPARAM( "line" ) );
+ aInfo.m_eSbxDataType = GetType();
+ aInfo.m_eTok = SYMBOL;
+
+ Symbol( &aInfo );
+ }
+}
+
+
// LINE INPUT [prompt], var$
void SbiParser::LineInput()
@@ -288,6 +312,19 @@ void SbiParser::Open()
void SbiParser::Name()
{
+ // #i92642: Special handling to allow name as symbol
+ if( Peek() == EQ )
+ {
+ aGen.Statement();
+
+ KeywordSymbolInfo aInfo;
+ aInfo.m_aKeywordSymbol = String( RTL_CONSTASCII_USTRINGPARAM( "name" ) );
+ aInfo.m_eSbxDataType = GetType();
+ aInfo.m_eTok = SYMBOL;
+
+ Symbol( &aInfo );
+ return;
+ }
SbiExpression aExpr1( this );
TestToken( AS );
SbiExpression aExpr2( this );
diff --git a/basic/source/comp/parser.cxx b/basic/source/comp/parser.cxx
index 8770dc8539f0..3d7178ae7688 100644
--- a/basic/source/comp/parser.cxx
+++ b/basic/source/comp/parser.cxx
@@ -83,6 +83,7 @@ static SbiStatement StmntTable [] = {
{ IMPLEMENTS, &SbiParser::Implements, Y, N, }, // IMPLEMENTS
{ INPUT, &SbiParser::Input, N, Y, }, // INPUT
{ LET, &SbiParser::Assign, N, Y, }, // LET
+{ LINE, &SbiParser::Line, N, Y, }, // LINE, -> LINE INPUT (#i92642)
{ LINEINPUT,&SbiParser::LineInput, N, Y, }, // LINE INPUT
{ LOOP, &SbiParser::BadBlock, N, Y, }, // LOOP
{ LSET, &SbiParser::LSet, N, Y, }, // LSET
@@ -237,7 +238,9 @@ void SbiParser::Exit()
SbiToken eTok = Next();
for( SbiParseStack* p = pStack; p; p = p->pNext )
{
- if( eTok == p->eExitTok )
+ SbiToken eExitTok = p->eExitTok;
+ if( eTok == eExitTok ||
+ (eTok == PROPERTY && (eExitTok == GET || eExitTok == LET) ) ) // #i109051
{
p->nChain = aGen.Gen( _JUMP, p->nChain );
return;
@@ -367,7 +370,10 @@ BOOL SbiParser::Parse()
}
// Ende des Parsings?
- if( eCurTok == eEndTok )
+ if( eCurTok == eEndTok ||
+ ( bVBASupportOn && // #i109075
+ (eCurTok == ENDFUNC || eCurTok == ENDPROPERTY || eCurTok == ENDSUB) &&
+ (eEndTok == ENDFUNC || eEndTok == ENDPROPERTY || eEndTok == ENDSUB) ) )
{
Next();
if( eCurTok != NIL )
@@ -477,10 +483,10 @@ SbiExprNode* SbiParser::GetWithVar()
// Zuweisung oder Subroutine Call
-void SbiParser::Symbol()
+void SbiParser::Symbol( const KeywordSymbolInfo* pKeywordSymbolInfo )
{
SbiExprMode eMode = bVBASupportOn ? EXPRMODE_STANDALONE : EXPRMODE_STANDARD;
- SbiExpression aVar( this, SbSYMBOL, eMode );
+ SbiExpression aVar( this, SbSYMBOL, eMode, pKeywordSymbolInfo );
bool bEQ = ( Peek() == EQ );
if( !bEQ && bVBASupportOn && aVar.IsBracket() )
@@ -704,11 +710,37 @@ void SbiParser::Implements()
return;
}
- if( TestSymbol() )
+ Peek();
+ if( eCurTok != SYMBOL )
+ {
+ Error( SbERR_SYMBOL_EXPECTED );
+ return;
+ }
+
+ String aImplementedIface = aSym;
+ Next();
+ if( Peek() == DOT )
{
- String aImplementedIface = GetSym();
- aIfaceVector.push_back( aImplementedIface );
+ String aDotStr( '.' );
+ while( Peek() == DOT )
+ {
+ aImplementedIface += aDotStr;
+ Next();
+ SbiToken ePeekTok = Peek();
+ if( ePeekTok == SYMBOL || IsKwd( ePeekTok ) )
+ {
+ Next();
+ aImplementedIface += aSym;
+ }
+ else
+ {
+ Next();
+ Error( SbERR_SYMBOL_EXPECTED );
+ break;
+ }
+ }
}
+ aIfaceVector.push_back( aImplementedIface );
}
void SbiParser::EnableCompatibility()
@@ -745,12 +777,16 @@ void SbiParser::Option()
break;
}
case COMPARE:
- switch( Next() )
- {
- case TEXT: bText = TRUE; return;
- case BINARY: bText = FALSE; return;
- default:;
- } // Fall thru!
+ {
+ SbiToken eTok = Next();
+ if( eTok == BINARY )
+ bText = FALSE;
+ else if( eTok == SYMBOL && GetSym().EqualsIgnoreCaseAscii("text") )
+ bText = TRUE;
+ else
+ Error( SbERR_EXPECTED, "Text/Binary" );
+ break;
+ }
case COMPATIBLE:
EnableCompatibility();
break;
diff --git a/basic/source/comp/symtbl.cxx b/basic/source/comp/symtbl.cxx
index 24f0f890eebb..d6b3dbb878fc 100644
--- a/basic/source/comp/symtbl.cxx
+++ b/basic/source/comp/symtbl.cxx
@@ -300,12 +300,14 @@ SbiSymDef::SbiSymDef( const String& rName ) : aName( rName )
bStatic =
bOpt =
bParamArray =
+ bWithEvents =
bByVal =
bChained =
bGlobal = FALSE;
pIn =
pPool = NULL;
nDefaultId = 0;
+ nFixedStringLength = -1;
}
SbiSymDef::~SbiSymDef()
diff --git a/basic/source/comp/token.cxx b/basic/source/comp/token.cxx
index 9fdfef0490b1..8cb3126f03f1 100644
--- a/basic/source/comp/token.cxx
+++ b/basic/source/comp/token.cxx
@@ -185,6 +185,7 @@ static TokenTable aTokTable_Basic [] = { // Token-Tabelle:
{ WEND, "Wend" },
{ WHILE, "While" },
{ WITH, "With" },
+ { WITHEVENTS, "WithEvents" },
{ WRITE, "Write" }, // auch WRITE #
{ XOR, "Xor" },
{ NIL, "" }
@@ -353,6 +354,29 @@ TokenTable aTokTable_Java [] = { // Token-Tabelle:
};
*/
+// #i109076
+TokenLabelInfo::TokenLabelInfo( void )
+{
+ m_pTokenCanBeLabelTab = new bool[VBASUPPORT+1];
+ for( int i = 0 ; i <= VBASUPPORT ; ++i )
+ m_pTokenCanBeLabelTab[i] = false;
+
+ // Token accepted as label by VBA
+ SbiToken eLabelToken[] = { ACCESS, ALIAS, APPEND, BASE, BINARY, CLASSMODULE,
+ COMPARE, COMPATIBLE, DEFERR, _ERROR_, EXPLICIT, LIB, LINE, LPRINT, NAME,
+ TOBJECT, OUTPUT, PROPERTY, RANDOM, READ, STEP, STOP, TEXT, VBASUPPORT, NIL };
+ SbiToken* pTok = eLabelToken;
+ SbiToken eTok;
+ for( pTok = eLabelToken ; (eTok = *pTok) != NIL ; ++pTok )
+ m_pTokenCanBeLabelTab[eTok] = true;
+}
+
+TokenLabelInfo::~TokenLabelInfo()
+{
+ delete[] m_pTokenCanBeLabelTab;
+}
+
+
// Der Konstruktor ermittelt die Laenge der Token-Tabelle.
SbiTokenizer::SbiTokenizer( const ::rtl::OUString& rSrc, StarBASIC* pb )
@@ -371,7 +395,8 @@ SbiTokenizer::SbiTokenizer( const ::rtl::OUString& rSrc, StarBASIC* pb )
}
SbiTokenizer::~SbiTokenizer()
-{}
+{
+}
// Wiederablage (Pushback) eines Tokens. (Bis zu 2 Tokens)
@@ -513,7 +538,8 @@ SbiToken SbiTokenizer::Next()
tp = &pTokTable[ lb + delta ];
StringCompare res = aSym.CompareIgnoreCaseToAscii( tp->s );
// Gefunden?
- if( res == COMPARE_EQUAL ) goto special;
+ if( res == COMPARE_EQUAL )
+ goto special;
// Groesser? Dann untere Haelfte
if( res == COMPARE_LESS )
{
@@ -534,24 +560,14 @@ SbiToken SbiTokenizer::Next()
return eCurTok = SYMBOL;
}
special:
- // LINE INPUT
- if( tp->t == LINE )
- {
- short nC1 = nCol1;
- String aOldSym = aSym;
- eCurTok = Peek();
- if( eCurTok == INPUT )
- {
- Next();
- nCol1 = nC1;
- return eCurTok = LINEINPUT;
- }
- else
- {
- aSym = aOldSym;
- return eCurTok = LINE;
- }
- }
+ // #i92642
+ if( eCurTok != NIL && eCurTok != REM && eCurTok != EOLN && (tp->t == NAME || tp->t == LINE) )
+ return eCurTok = SYMBOL;
+ else if( tp->t == TEXT )
+ return eCurTok = SYMBOL;
+
+ // #i92642: Special LINE token handling -> SbiParser::Line()
+
// END IF, CASE, SUB, DEF, FUNCTION, TYPE, CLASS, WITH
if( tp->t == END )
{
@@ -639,7 +655,7 @@ special:
BOOL SbiTokenizer::MayBeLabel( BOOL bNeedsColon )
{
- if( eCurTok == SYMBOL )
+ if( eCurTok == SYMBOL || m_aTokenLabelInfo.canTokenBeLabel( eCurTok ) )
return bNeedsColon ? DoesColonFollow() : TRUE;
else
return BOOL( eCurTok == NUMBER
diff --git a/basic/source/inc/codegen.hxx b/basic/source/inc/codegen.hxx
index 3d90d16bdcbe..a3fe02227cfd 100644
--- a/basic/source/inc/codegen.hxx
+++ b/basic/source/inc/codegen.hxx
@@ -44,6 +44,7 @@ class SbiCodeGen { // Code-Erzeugung:
public:
SbiCodeGen( SbModule&, SbiParser*, short );
SbiParser* GetParser() { return pParser; }
+ SbModule& GetModule() { return rMod; }
UINT32 Gen( SbiOpcode );
UINT32 Gen( SbiOpcode, UINT32 );
UINT32 Gen( SbiOpcode, UINT32, UINT32 );
@@ -53,7 +54,6 @@ public:
void GenStmnt(); // evtl. Statement-Opcode erzeugen
UINT32 GetPC();
UINT32 GetOffset() { return GetPC() + 1; }
- SbModule& GetModule() { return rMod; }
void Save();
// #29955 for-Schleifen-Ebene pflegen
diff --git a/basic/source/inc/dlgcont.hxx b/basic/source/inc/dlgcont.hxx
index b0b3334b5031..2c927a8286f4 100644
--- a/basic/source/inc/dlgcont.hxx
+++ b/basic/source/inc/dlgcont.hxx
@@ -54,14 +54,17 @@ class SfxDialogLibraryContainer : public SfxLibraryContainer
virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const;
virtual void SAL_CALL writeLibraryElement
(
- ::com::sun::star::uno::Any aElement,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
const ::rtl::OUString& aElementName,
- ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > xOutput
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput
)
throw(::com::sun::star::uno::Exception);
virtual ::com::sun::star::uno::Any SAL_CALL importLibraryElement
- ( const ::rtl::OUString& aFile,
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::rtl::OUString& aFile,
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xElementStream );
virtual void SAL_CALL importFromOldStorage( const ::rtl::OUString& aFile );
diff --git a/basic/source/inc/expr.hxx b/basic/source/inc/expr.hxx
index 8ccbcebe4309..9b8f51d09dea 100644
--- a/basic/source/inc/expr.hxx
+++ b/basic/source/inc/expr.hxx
@@ -52,6 +52,13 @@ struct SbVar { // Variablen-Element:
SbiExprListVector* pvMorePar; // Array of arrays foo(pPar)(avMorePar[0])(avMorePar[1])...
};
+struct KeywordSymbolInfo
+{
+ String m_aKeywordSymbol;
+ SbxDataType m_eSbxDataType;
+ SbiToken m_eTok;
+};
+
enum SbiExprType { // Expression-Typen:
SbSTDEXPR, // normaler Ausdruck
SbLVALUE, // beliebiger lValue
@@ -76,6 +83,7 @@ enum SbiNodeType {
SbxVARVAL, // aVar = Wert
SbxTYPEOF, // TypeOf ObjExpr Is Type
SbxNODE, // Node
+ SbxNEW, // new <type> expression
SbxDUMMY
};
@@ -107,9 +115,11 @@ class SbiExprNode { // Operatoren (und Operanden)
void FoldConstants(); // Constant Folding durchfuehren
void CollectBits(); // Umwandeln von Zahlen in Strings
BOOL IsOperand() // TRUE, wenn Operand
- { return BOOL( eNodeType != SbxNODE && eNodeType != SbxTYPEOF ); }
+ { return BOOL( eNodeType != SbxNODE && eNodeType != SbxTYPEOF && eNodeType != SbxNEW ); }
BOOL IsTypeOf()
{ return BOOL( eNodeType == SbxTYPEOF ); }
+ BOOL IsNew()
+ { return BOOL( eNodeType == SbxNEW ); }
BOOL IsNumber(); // TRUE bei Zahlen
BOOL IsString(); // TRUE bei Strings
BOOL IsLvalue(); // TRUE, falls als Lvalue verwendbar
@@ -122,6 +132,7 @@ public:
SbiExprNode( SbiParser*, const SbiSymDef&, SbxDataType, SbiExprList* = NULL );
SbiExprNode( SbiParser*, SbiExprNode*, SbiToken, SbiExprNode* );
SbiExprNode( SbiParser*, SbiExprNode*, USHORT ); // #120061 TypeOf
+ SbiExprNode( SbiParser*, USHORT ); // new <type>
virtual ~SbiExprNode();
BOOL IsValid() { return BOOL( !bError ); }
@@ -166,9 +177,9 @@ protected:
BOOL bByVal; // TRUE: ByVal-Parameter
BOOL bBracket; // TRUE: Parameter list with brackets
USHORT nParenLevel;
- SbiExprNode* Term();
+ SbiExprNode* Term( const KeywordSymbolInfo* pKeywordSymbolInfo = NULL );
SbiExprNode* ObjTerm( SbiSymDef& );
- SbiExprNode* Operand();
+ SbiExprNode* Operand( bool bUsedForTypeOf = false );
SbiExprNode* Unary();
SbiExprNode* Exp();
SbiExprNode* MulDiv();
@@ -180,7 +191,8 @@ protected:
SbiExprNode* Comp();
SbiExprNode* Boolean();
public:
- SbiExpression( SbiParser*, SbiExprType = SbSTDEXPR, SbiExprMode eMode = EXPRMODE_STANDARD ); // Parsender Ctor
+ SbiExpression( SbiParser*, SbiExprType = SbSTDEXPR,
+ SbiExprMode eMode = EXPRMODE_STANDARD, const KeywordSymbolInfo* pKeywordSymbolInfo = NULL ); // Parsender Ctor
SbiExpression( SbiParser*, const String& );
SbiExpression( SbiParser*, double, SbxDataType = SbxDOUBLE );
SbiExpression( SbiParser*, const SbiSymDef&, SbiExprList* = NULL );
diff --git a/basic/source/inc/namecont.hxx b/basic/source/inc/namecont.hxx
index 1f4084db1d0d..ac1199f6c233 100644
--- a/basic/source/inc/namecont.hxx
+++ b/basic/source/inc/namecont.hxx
@@ -35,6 +35,7 @@
#include <com/sun/star/script/XStorageBasedLibraryContainer.hpp>
#include <com/sun/star/script/XLibraryContainerPassword.hpp>
#include <com/sun/star/script/XLibraryContainerExport.hpp>
+#include <com/sun/star/script/XLibraryContainer3.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/container/XContainer.hpp>
#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
@@ -57,8 +58,7 @@
#include <com/sun/star/deployment/XPackage.hpp>
#include <cppuhelper/implbase2.hxx>
-#include <cppuhelper/compbase6.hxx>
-#include <cppuhelper/compbase7.hxx>
+#include <cppuhelper/compbase8.hxx>
#include <cppuhelper/interfacecontainer.hxx>
#include <com/sun/star/script/XVBACompat.hpp>
@@ -67,11 +67,12 @@ class BasicManager;
namespace basic
{
-typedef ::cppu::WeakComponentImplHelper7<
+typedef ::cppu::WeakComponentImplHelper8<
::com::sun::star::lang::XInitialization,
::com::sun::star::script::XStorageBasedLibraryContainer,
::com::sun::star::script::XLibraryContainerPassword,
::com::sun::star::script::XLibraryContainerExport,
+ ::com::sun::star::script::XLibraryContainer3,
::com::sun::star::container::XContainer,
::com::sun::star::script::XVBACompat,
::com::sun::star::lang::XServiceInfo > LibraryContainerHelper;
@@ -284,14 +285,17 @@ protected:
virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const = 0;
virtual void SAL_CALL writeLibraryElement
(
- ::com::sun::star::uno::Any aElement,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
const ::rtl::OUString& aElementName,
- ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > xOutput
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput
)
throw(::com::sun::star::uno::Exception) = 0;
virtual ::com::sun::star::uno::Any SAL_CALL importLibraryElement
- ( const ::rtl::OUString& aFile,
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::rtl::OUString& aFile,
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xElementStream ) = 0;
virtual void SAL_CALL importFromOldStorage( const ::rtl::OUString& aFile ) = 0;
@@ -409,6 +413,12 @@ public:
virtual ::rtl::OUString SAL_CALL getContainerLocationName() throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL storeLibraries( ) throw (::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
+ //Methods XLibraryContainer3
+ virtual ::rtl::OUString SAL_CALL getOriginalLibraryLinkURL( const ::rtl::OUString& Name )
+ throw (::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::uno::RuntimeException);
+
// Methods XLibraryContainer2 (base of XPersistentLibraryContainer)
virtual sal_Bool SAL_CALL isLibraryLink( const ::rtl::OUString& Name )
throw (::com::sun::star::container::NoSuchElementException,
@@ -548,6 +558,8 @@ private:
::rtl::OUString maLibInfoFileURL;
::rtl::OUString maStorageURL;
::rtl::OUString maUnexpandedStorageURL;
+ ::rtl::OUString maOrignialStorageURL;
+
sal_Bool mbLink;
sal_Bool mbReadOnly;
sal_Bool mbReadOnlyLink;
@@ -696,6 +708,7 @@ enum IteratorState
{
USER_EXTENSIONS,
SHARED_EXTENSIONS,
+ BUNDLED_EXTENSIONS,
END_REACHED
};
@@ -715,6 +728,8 @@ protected:
implGetNextUserScriptPackage( bool& rbPureDialogLib );
com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >
implGetNextSharedScriptPackage( bool& rbPureDialogLib );
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >
+ implGetNextBundledScriptPackage( bool& rbPureDialogLib );
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext;
@@ -728,8 +743,16 @@ protected:
< com::sun::star::deployment::XPackage > > m_aSharedPackagesSeq;
bool m_bSharedPackagesLoaded;
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > > m_aBundledPackagesSeq;
+ bool m_bBundledPackagesLoaded;
+
+
int m_iUserPackage;
int m_iSharedPackage;
+ int m_iBundledPackage;
+
+
ScriptSubPackageIterator* m_pScriptSubPackageIterator;
diff --git a/basic/source/inc/opcodes.hxx b/basic/source/inc/opcodes.hxx
index 9d909c03c436..ff7eff027f83 100644
--- a/basic/source/inc/opcodes.hxx
+++ b/basic/source/inc/opcodes.hxx
@@ -93,6 +93,7 @@ enum SbiOpcode {
_VBASET, // VBA-like Set
_ERASE_CLEAR, // Erase array and clear variable
_ARRAYACCESS, // Assign parameters to TOS and get value, used for array of arrays
+ _BYVAL, // byref -> byval for lvalue parameter passed in call
SbOP0_END,
// Alle Opcodes mit einem Operanden
diff --git a/basic/source/inc/parser.hxx b/basic/source/inc/parser.hxx
index 3dc8525377a2..1161c4ed259d 100644
--- a/basic/source/inc/parser.hxx
+++ b/basic/source/inc/parser.hxx
@@ -99,7 +99,7 @@ public:
BOOL TestComma(); // Komma oder EOLN?
void TestEoln(); // EOLN?
- void Symbol(); // Let oder Call
+ void Symbol( const KeywordSymbolInfo* pKeywordSymbolInfo = NULL ); // Let oder Call
void ErrorStmnt(); // ERROR n
void NotImp(); // nicht implementiert
void BadBlock(); // LOOP/WEND/NEXT
@@ -119,6 +119,7 @@ public:
void If(); // IF
void Implements(); // IMPLEMENTS
void Input(); // INPUT, INPUT #
+ void Line(); // LINE -> LINE INPUT [#] (#i92642)
void LineInput(); // LINE INPUT, LINE INPUT #
void LSet(); // LSET
void Name(); // NAME .. AS ..
diff --git a/basic/source/inc/runtime.hxx b/basic/source/inc/runtime.hxx
index c9a41110ad46..6ca69209a752 100644
--- a/basic/source/inc/runtime.hxx
+++ b/basic/source/inc/runtime.hxx
@@ -407,7 +407,7 @@ class SbiRuntime
void StepPRINTF(), StepWRITE(), StepRENAME(), StepPROMPT();
void StepRESTART(), StepEMPTY(), StepLEAVE();
void StepLSET(), StepRSET(), StepREDIMP_ERASE(), StepERASE_CLEAR();
- void StepARRAYACCESS();
+ void StepARRAYACCESS(), StepBYVAL();
// Alle Opcodes mit einem Operanden
void StepLOADNC( UINT32 ), StepLOADSC( UINT32 ), StepLOADI( UINT32 );
void StepARGN( UINT32 ), StepBASED( UINT32 ), StepPAD( UINT32 );
@@ -416,7 +416,7 @@ class SbiRuntime
void StepGOSUB( UINT32 ), StepRETURN( UINT32 );
void StepTESTFOR( UINT32 ), StepCASETO( UINT32 ), StepERRHDL( UINT32 );
void StepRESUME( UINT32 ), StepSETCLASS( UINT32 ), StepVBASETCLASS( UINT32 ), StepTESTCLASS( UINT32 ), StepLIB( UINT32 );
- bool checkClass_Impl( const SbxVariableRef& refVal, const String& aClass, bool bRaiseErrors );
+ bool checkClass_Impl( const SbxVariableRef& refVal, const String& aClass, bool bRaiseErrors, bool bDefault = true );
void StepCLOSE( UINT32 ), StepPRCHAR( UINT32 ), StepARGTYP( UINT32 );
// Alle Opcodes mit zwei Operanden
void StepRTL( UINT32, UINT32 ), StepPUBLIC( UINT32, UINT32 ), StepPUBLIC_P( UINT32, UINT32 );
@@ -434,6 +434,7 @@ class SbiRuntime
void StepDCREATE_REDIMP(UINT32,UINT32), StepDCREATE_IMPL(UINT32,UINT32);
void StepFIND_CM( UINT32, UINT32 );
void StepFIND_STATIC( UINT32, UINT32 );
+ void implCreateFixedString( SbxVariable* pStrVar, UINT32 nOp2 );
public:
void SetVBAEnabled( bool bEnabled );
USHORT GetImageFlag( USHORT n ) const;
diff --git a/basic/source/inc/sbintern.hxx b/basic/source/inc/sbintern.hxx
index 5896db78ea40..59cfe21d25a8 100644
--- a/basic/source/inc/sbintern.hxx
+++ b/basic/source/inc/sbintern.hxx
@@ -39,6 +39,7 @@ namespace utl
class SbUnoFactory;
class SbTypeFactory;
class SbOLEFactory;
+class SbFormFactory;
class SbiInstance;
class SbModule;
@@ -101,6 +102,7 @@ struct SbiGlobals
SbTypeFactory* pTypeFac; // Factory for user defined types
SbClassFactory* pClassFac; // Factory for user defined classes (based on class modules)
SbOLEFactory* pOLEFac; // Factory for OLE types
+ SbFormFactory* pFormFac; // Factory for user forms
SbModule* pMod; // aktuell aktives Modul
SbModule* pCompMod; // aktuell compiliertes Modul
short nInst; // Anzahl BASICs
@@ -136,6 +138,7 @@ SbiGlobals* GetSbData();
#define pTYPEFAC GetSbData()->pTypeFac
#define pCLASSFAC GetSbData()->pClassFac
#define pOLEFAC GetSbData()->pOLEFac
+#define pFORMFAC GetSbData()->pFormFac
#endif
diff --git a/basic/source/inc/scriptcont.hxx b/basic/source/inc/scriptcont.hxx
index 31025c48c4a4..d184a2d558e2 100644
--- a/basic/source/inc/scriptcont.hxx
+++ b/basic/source/inc/scriptcont.hxx
@@ -53,14 +53,17 @@ class SfxScriptLibraryContainer : public SfxLibraryContainer, public OldBasicPas
virtual bool SAL_CALL isLibraryElementValid( ::com::sun::star::uno::Any aElement ) const;
virtual void SAL_CALL writeLibraryElement
(
- ::com::sun::star::uno::Any aElement,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
const ::rtl::OUString& aElementName,
- ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > xOutput
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput
)
throw(::com::sun::star::uno::Exception);
virtual ::com::sun::star::uno::Any SAL_CALL importLibraryElement
- ( const ::rtl::OUString& aFile,
+ (
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer>& xLibrary,
+ const ::rtl::OUString& aElementName,
+ const ::rtl::OUString& aFile,
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xElementStream );
virtual void SAL_CALL importFromOldStorage( const ::rtl::OUString& aFile );
diff --git a/basic/source/inc/symtbl.hxx b/basic/source/inc/symtbl.hxx
index 03202edba910..9bd8cfd49754 100644
--- a/basic/source/inc/symtbl.hxx
+++ b/basic/source/inc/symtbl.hxx
@@ -132,7 +132,9 @@ protected:
BOOL bAs : 1; // TRUE: Datentyp per AS XXX definiert
BOOL bGlobal : 1; // TRUE: Global-Variable
BOOL bParamArray : 1; // TRUE: ParamArray parameter
+ BOOL bWithEvents : 1; // TRUE: Declared WithEvents
USHORT nDefaultId; // Symbol number of default value
+ short nFixedStringLength; // String length in: Dim foo As String*Length
public:
SbiSymDef( const String& );
virtual ~SbiSymDef();
@@ -156,6 +158,7 @@ public:
BOOL IsDefined() const{ return bChained; }
void SetOptional() { bOpt = TRUE; }
void SetParamArray() { bParamArray = TRUE; }
+ void SetWithEvents() { bWithEvents = TRUE; }
void SetByVal() { bByVal = TRUE; }
void SetStatic( BOOL bAsStatic = TRUE ) { bStatic = bAsStatic; }
void SetNew() { bNew = TRUE; }
@@ -165,11 +168,14 @@ public:
USHORT GetDefaultId( void ) { return nDefaultId; }
BOOL IsOptional() const{ return bOpt; }
BOOL IsParamArray() const{ return bParamArray; }
+ BOOL IsWithEvents() const{ return bWithEvents; }
BOOL IsByVal() const { return bByVal; }
BOOL IsStatic() const { return bStatic; }
BOOL IsNew() const { return bNew; }
BOOL IsDefinedAs() const { return bAs; }
BOOL IsGlobal() const { return bGlobal; }
+ short GetFixedStringLength( void ) const { return nFixedStringLength; }
+ void SetFixedStringLength( short n ) { nFixedStringLength = n; }
SbiSymPool& GetPool();
UINT32 Define(); // Symbol in Code definieren
diff --git a/basic/source/inc/token.hxx b/basic/source/inc/token.hxx
index 3dc1113b57d1..930f68910b78 100644
--- a/basic/source/inc/token.hxx
+++ b/basic/source/inc/token.hxx
@@ -95,7 +95,7 @@ enum SbiToken {
NUMBER=FIRSTEXTRA, FIXSTRING, SYMBOL, _CDECL_, BYVAL, BYREF,
OUTPUT, RANDOM, APPEND, BINARY, ACCESS,
LOCK, READ, PRESERVE, BASE, ANY, LIB, _OPTIONAL_,
- EXPLICIT, COMPATIBLE, CLASSMODULE, PARAMARRAY,
+ EXPLICIT, COMPATIBLE, CLASSMODULE, PARAMARRAY, WITHEVENTS,
// Ab hier kommen JavaScript-Tokens (gleiches enum, damit gleicher Typ)
FIRSTJAVA,
@@ -120,7 +120,25 @@ enum SbiToken {
#undef SbiTokenSHAREDTMPUNDEF
#endif
+// #i109076
+class TokenLabelInfo
+{
+ bool* m_pTokenCanBeLabelTab;
+
+public:
+ TokenLabelInfo( void );
+ TokenLabelInfo( const TokenLabelInfo& rInfo )
+ : m_pTokenCanBeLabelTab( NULL )
+ { (void)rInfo; }
+ ~TokenLabelInfo();
+
+ bool canTokenBeLabel( SbiToken eTok )
+ { return m_pTokenCanBeLabelTab[eTok]; }
+};
+
class SbiTokenizer : public SbiScanner {
+ TokenLabelInfo m_aTokenLabelInfo;
+
protected:
SbiToken eCurTok; // aktuelles Token
SbiToken ePush; // Pushback-Token
diff --git a/basic/source/runtime/dllmgr.cxx b/basic/source/runtime/dllmgr.cxx
index 22014763bb29..bc08a8cb64bc 100644
--- a/basic/source/runtime/dllmgr.cxx
+++ b/basic/source/runtime/dllmgr.cxx
@@ -25,647 +25,714 @@
*
************************************************************************/
-// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_basic.hxx"
+#include "sal/config.h"
-#include <stdlib.h>
-#ifdef OS2
-#define INCL_DOSMODULEMGR
-#include <svpm.h>
-#endif
-
-#if defined( WIN ) || defined( WNT )
-#ifndef _SVWIN_H
-#undef WB_LEFT
-#undef WB_RIGHT
-#include <tools/svwin.h>
-#endif
-#endif
-#include <tools/debug.hxx>
-#include <tools/string.hxx>
-#include <tools/errcode.hxx>
-#include <basic/sbxvar.hxx>
-#include <basic/sbx.hxx>
-
-#if defined(WIN)
-typedef HINSTANCE SbiDllHandle;
-typedef FARPROC SbiDllProc;
-#elif defined(WNT)
-typedef HMODULE SbiDllHandle;
-typedef int(*SbiDllProc)();
-#elif defined(OS2)
-typedef HMODULE SbiDllHandle;
-typedef PFN SbiDllProc;
-#else
-typedef void* SbiDllHandle;
-typedef void* SbiDllProc;
-#endif
+#include <algorithm>
+#include <cstddef>
+#include <list>
+#include <map>
+#include <vector>
-#define _DLLMGR_CXX
-#include "dllmgr.hxx"
-#include <basic/sberrors.hxx>
+#include "basic/sbx.hxx"
+#include "basic/sbxvar.hxx"
+#include "osl/thread.h"
+#include "rtl/ref.hxx"
+#include "rtl/string.hxx"
+#include "rtl/ustring.hxx"
+#include "salhelper/simplereferenceobject.hxx"
+#include "tools/svwin.h"
-#ifndef WINAPI
-#ifdef WNT
-#define WINAPI __far __pascal
-#endif
-#endif
+#undef max
-extern "C" {
-#if defined(INTEL) && (defined(WIN) || defined(WNT))
+#include "dllmgr.hxx"
-extern INT16 WINAPI CallINT( SbiDllProc, char *stack, short nstack);
-extern INT32 WINAPI CallLNG( SbiDllProc, char *stack, short nstack);
-#ifndef WNT
-extern float WINAPI CallSNG( SbiDllProc, char *stack, short nstack);
-#endif
-extern double WINAPI CallDBL( SbiDllProc, char *stack, short nstack);
-extern char* WINAPI CallSTR( SbiDllProc, char *stack, short nstack);
-// extern CallFIX( SbiDllProc, char *stack, short nstack);
+/* Open issues:
-#else
+ Only 32-bit Windows for now.
-INT16 CallINT( SbiDllProc, char *, short ) { return 0; }
-INT32 CallLNG( SbiDllProc, char *, short ) { return 0; }
-float CallSNG( SbiDllProc, char *, short ) { return 0; }
-double CallDBL( SbiDllProc, char *, short) { return 0; }
-char* CallSTR( SbiDllProc, char *, short ) { return 0; }
-#endif
-}
+ Missing support for functions returning structs (see TODO in call()).
-SV_IMPL_OP_PTRARR_SORT(ImplDllArr,ByteStringPtr)
+ Missing support for additional data types (64 bit integers, Any, ...; would
+ trigger OSL_ASSERT(false) in various switches).
-/* mit Optimierung An stuerzt unter Win95 folgendes Makro ab:
-declare Sub MessageBeep Lib "user32" (ByVal long)
-sub main
- MessageBeep( 1 )
-end sub
+ It is assumed that the variables passed into SbiDllMgr::Call to represent
+ the arguments and return value have types that exactly match the Declare
+ statement; it would be better if this code had access to the function
+ signature from the Declare statement, so that it could convert the passed
+ variables accordingly.
*/
-#if defined (WNT) && defined (MSC)
-//#pragma optimize ("", off)
-#endif
-//
-// ***********************************************************************
-//
+#if defined WNT // only 32-bit Windows, actually
-class ImplSbiProc : public ByteString
-{
- SbiDllProc pProc;
- ImplSbiProc();
- ImplSbiProc( const ImplSbiProc& );
-
-public:
- ImplSbiProc( const ByteString& rName, SbiDllProc pFunc )
- : ByteString( rName ) { pProc = pFunc; }
- SbiDllProc GetProc() const { return pProc; }
-};
+extern "C" {
-//
-// ***********************************************************************
-//
+int __stdcall DllMgr_call32(FARPROC, void const * stack, std::size_t size);
+double __stdcall DllMgr_callFp(FARPROC, void const * stack, std::size_t size);
-class ImplSbiDll : public ByteString
-{
- ImplDllArr aProcArr;
- SbiDllHandle hDLL;
+}
- ImplSbiDll( const ImplSbiDll& );
-public:
- ImplSbiDll( const ByteString& rName, SbiDllHandle hHandle )
- : ByteString( rName ) { hDLL = hHandle; }
- ~ImplSbiDll();
- SbiDllHandle GetHandle() const { return hDLL; }
- SbiDllProc GetProc( const ByteString& rName ) const;
- void InsertProc( const ByteString& rName, SbiDllProc pProc );
-};
+namespace {
-ImplSbiDll::~ImplSbiDll()
-{
- USHORT nCount = aProcArr.Count();
- for( USHORT nCur = 0; nCur < nCount; nCur++ )
- {
- ImplSbiProc* pProc = (ImplSbiProc*)aProcArr.GetObject( nCur );
- delete pProc;
- }
+char * address(std::vector< char > & blob) {
+ return blob.empty() ? 0 : &blob[0];
}
-SbiDllProc ImplSbiDll::GetProc( const ByteString& rName ) const
-{
- USHORT nPos;
- BOOL bRet = aProcArr.Seek_Entry( (ByteStringPtr)&rName, &nPos );
- if( bRet )
- {
- ImplSbiProc* pImplProc = (ImplSbiProc*)aProcArr.GetObject(nPos);
- return pImplProc->GetProc();
- }
- return (SbiDllProc)0;
+SbError convert(rtl::OUString const & source, rtl::OString * target) {
+ return
+ source.convertToString(
+ target, osl_getThreadTextEncoding(),
+ (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
+ RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR))
+ ? ERRCODE_NONE : ERRCODE_BASIC_BAD_ARGUMENT;
+ //TODO: more specific errcode?
}
-void ImplSbiDll::InsertProc( const ByteString& rName, SbiDllProc pProc )
-{
- DBG_ASSERT(aProcArr.Seek_Entry((ByteStringPtr)&rName,0)==0,"InsertProc: Already in table");
- ImplSbiProc* pImplProc = new ImplSbiProc( rName, pProc );
- aProcArr.Insert( (ByteStringPtr)pImplProc );
+SbError convert(char const * source, sal_Int32 length, rtl::OUString * target) {
+ return
+ rtl_convertStringToUString(
+ &target->pData, source, length, osl_getThreadTextEncoding(),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
+ RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))
+ ? ERRCODE_NONE : ERRCODE_BASIC_BAD_ARGUMENT;
+ //TODO: more specific errcode?
}
+struct UnmarshalData {
+ UnmarshalData(SbxVariable * theVariable, void * theBuffer):
+ variable(theVariable), buffer(theBuffer) {}
-//
-// ***********************************************************************
-//
+ SbxVariable * variable;
+ void * buffer;
+};
-SbiDllMgr::SbiDllMgr( const SbiDllMgr& )
-{
-}
+struct StringData: public UnmarshalData {
+ StringData(SbxVariable * theVariable, void * theBuffer, bool theSpecial):
+ UnmarshalData(theVariable, theBuffer), special(theSpecial) {}
-SbiDllMgr::SbiDllMgr()
-{
-}
+ bool special;
+};
-SbiDllMgr::~SbiDllMgr()
-{
- USHORT nCount = aDllArr.Count();
- for( USHORT nCur = 0; nCur < nCount; nCur++ )
- {
- ImplSbiDll* pDll = (ImplSbiDll*)aDllArr.GetObject( nCur );
- FreeDllHandle( pDll->GetHandle() );
- delete pDll;
+class MarshalData: private boost::noncopyable {
+public:
+ std::vector< char > * newBlob() {
+ blobs_.push_front(std::vector< char >());
+ return &blobs_.front();
}
-}
-void SbiDllMgr::FreeDll( const ByteString& rDllName )
-{
- USHORT nPos;
- BOOL bRet = aDllArr.Seek_Entry( (ByteStringPtr)&rDllName, &nPos );
- if( bRet )
- {
- ImplSbiDll* pDll = (ImplSbiDll*)aDllArr.GetObject(nPos);
- FreeDllHandle( pDll->GetHandle() );
- delete pDll;
- aDllArr.Remove( nPos, 1 );
- }
-}
+ std::vector< UnmarshalData > unmarshal;
+ std::vector< StringData > unmarshalStrings;
-ImplSbiDll* SbiDllMgr::GetDll( const ByteString& rDllName )
-{
- USHORT nPos;
- ImplSbiDll* pDll = 0;
- BOOL bRet = aDllArr.Seek_Entry( (ByteStringPtr)&rDllName, &nPos );
- if( bRet )
- pDll = (ImplSbiDll*)aDllArr.GetObject(nPos);
- else
- {
- SbiDllHandle hDll = CreateDllHandle( rDllName );
- if( hDll )
- {
- pDll = new ImplSbiDll( rDllName, hDll );
- aDllArr.Insert( (ByteStringPtr)pDll );
- }
- }
- return pDll;
+private:
+ std::list< std::vector< char > > blobs_;
+};
+
+std::size_t align(std::size_t address, std::size_t alignment) {
+ // alignment = 2^k for some k >= 0
+ return (address + (alignment - 1)) & ~(alignment - 1);
}
-SbiDllProc SbiDllMgr::GetProc( ImplSbiDll* pDll, const ByteString& rProcName )
+char * align(
+ std::vector< char > & blob, std::size_t alignment, std::size_t offset,
+ std::size_t add)
{
- DBG_ASSERT(pDll,"GetProc: No dll-ptr");
- SbiDllProc pProc;
- pProc = pDll->GetProc( rProcName );
- if( !pProc )
- {
- pProc = GetProcAddr( pDll->GetHandle(), rProcName );
- if( pProc )
- pDll->InsertProc( rProcName, pProc );
- }
- return pProc;
+ std::vector< char >::size_type n = blob.size();
+ n = align(n - offset, alignment) + offset; //TODO: overflow in align()
+ blob.resize(n + add); //TODO: overflow
+ return address(blob) + n;
}
-
-SbError SbiDllMgr::Call( const char* pProcName, const char* pDllName,
- SbxArray* pArgs, SbxVariable& rResult, BOOL bCDecl )
+template< typename T > void add(
+ std::vector< char > & blob, T const & data, std::size_t alignment,
+ std::size_t offset)
{
- DBG_ASSERT(pProcName&&pDllName,"Call: Bad parms");
- SbError nSbErr = 0;
- ByteString aDllName( pDllName );
- CheckDllName( aDllName );
- ImplSbiDll* pDll = GetDll( aDllName );
- if( pDll )
- {
- SbiDllProc pProc = GetProc( pDll, pProcName );
- if( pProc )
- {
- if( bCDecl )
- nSbErr = CallProcC( pProc, pArgs, rResult );
- else
- nSbErr = CallProc( pProc, pArgs, rResult );
+ *reinterpret_cast< T * >(align(blob, alignment, offset, sizeof (T))) = data;
+}
+
+std::size_t alignment(SbxVariable * variable) {
+ OSL_ASSERT(variable != 0);
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
+ case SbxINTEGER:
+ return 2;
+ case SbxLONG:
+ case SbxSINGLE:
+ case SbxSTRING:
+ return 4;
+ case SbxDOUBLE:
+ return 8;
+ case SbxOBJECT:
+ {
+ std::size_t n = 1;
+ SbxArray * props = PTR_CAST(SbxObject, variable->GetObject())->
+ GetProperties();
+ for (USHORT i = 0; i < props->Count(); ++i) {
+ n = std::max(n, alignment(props->Get(i)));
+ }
+ return n;
+ }
+ case SbxBOOL:
+ case SbxBYTE:
+ return 1;
+ default:
+ OSL_ASSERT(false);
+ return 1;
+ }
+ } else {
+ SbxDimArray * arr = PTR_CAST(SbxDimArray, variable->GetObject());
+ int dims = arr->GetDims();
+ std::vector< INT32 > low(dims);
+ for (int i = 0; i < dims; ++i) {
+ INT32 up;
+ arr->GetDim32(i + 1, low[i], up);
}
- else
- nSbErr = SbERR_PROC_UNDEFINED;
+ return alignment(arr->Get32(&low[0]));
}
- else
- nSbErr = SbERR_BAD_DLL_LOAD;
- return nSbErr;
}
-// ***********************************************************************
-// ******************* abhaengige Implementationen ***********************
-// ***********************************************************************
+SbError marshal(
+ bool outer, SbxVariable * variable, bool special,
+ std::vector< char > & blob, std::size_t offset, MarshalData & data);
-void SbiDllMgr::CheckDllName( ByteString& rDllName )
+SbError marshalString(
+ SbxVariable * variable, bool special, MarshalData & data, void ** buffer)
{
-#if defined(WIN) || defined(WNT) || defined(OS2)
- if( rDllName.Search('.') == STRING_NOTFOUND )
- rDllName += ".DLL";
-#else
- (void)rDllName;
-#endif
+ OSL_ASSERT(variable != 0 && buffer != 0);
+ rtl::OString str;
+ SbError e = convert(variable->GetString(), &str);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ std::vector< char > * blob = data.newBlob();
+ blob->insert(blob->begin(), str.getStr(), str.getStr() + str.getLength());
+ *buffer = address(*blob);
+ data.unmarshalStrings.push_back(StringData(variable, *buffer, special));
+ return ERRCODE_NONE;
}
-
-SbiDllHandle SbiDllMgr::CreateDllHandle( const ByteString& rDllName )
+SbError marshalStruct(
+ SbxVariable * variable, std::vector< char > & blob, std::size_t offset,
+ MarshalData & data)
{
- (void)rDllName;
-
-#if defined(UNX)
- SbiDllHandle hLib=0;
-#else
- SbiDllHandle hLib;
-#endif
-
-#if defined(WIN)
- hLib = LoadLibrary( (const char*)rDllName );
- if( (ULONG)hLib < 32 )
- hLib = 0;
-
-#elif defined(WNT)
- hLib = LoadLibrary( rDllName.GetBuffer() );
- if( !(ULONG)hLib )
- {
-#ifdef DBG_UTIL
- ULONG nLastErr;
- nLastErr = GetLastError();
-#endif
- hLib = 0;
+ OSL_ASSERT(variable != 0);
+ SbxArray * props = PTR_CAST(SbxObject, variable->GetObject())->
+ GetProperties();
+ for (USHORT i = 0; i < props->Count(); ++i) {
+ SbError e = marshal(false, props->Get(i), false, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
}
-
-#elif defined(OS2)
- char cErr[ 100 ];
- if( DosLoadModule( (PSZ) cErr, 100, (const char*)rDllName.GetBuffer(), &hLib ) )
- hLib = 0;
-#endif
- return hLib;
+ return ERRCODE_NONE;
}
-void SbiDllMgr::FreeDllHandle( SbiDllHandle hLib )
+SbError marshalArray(
+ SbxVariable * variable, std::vector< char > & blob, std::size_t offset,
+ MarshalData & data)
{
-#if defined(WIN) || defined(WNT)
- if( hLib )
- FreeLibrary ((HINSTANCE) hLib);
-#elif defined(OS2)
- if( hLib )
- DosFreeModule( (HMODULE) hLib );
-#else
- (void)hLib;
-#endif
+ OSL_ASSERT(variable != 0);
+ SbxDimArray * arr = PTR_CAST(SbxDimArray, variable->GetObject());
+ int dims = arr->GetDims();
+ std::vector< INT32 > low(dims);
+ std::vector< INT32 > up(dims);
+ for (int i = 0; i < dims; ++i) {
+ arr->GetDim32(i + 1, low[i], up[i]);
+ }
+ for (std::vector< INT32 > idx = low;;) {
+ SbError e = marshal(
+ false, arr->Get32(&idx[0]), false, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ int i = dims - 1;
+ while (idx[i] == up[i]) {
+ idx[i] = low[i];
+ if (i == 0) {
+ return ERRCODE_NONE;
+ }
+ --i;
+ }
+ ++idx[i];
+ }
}
-SbiDllProc SbiDllMgr::GetProcAddr(SbiDllHandle hLib, const ByteString& rProcName)
+// 8-aligned structs are only 4-aligned on stack, so alignment of members in
+// such structs must take that into account via "offset"
+SbError marshal(
+ bool outer, SbxVariable * variable, bool special,
+ std::vector< char > & blob, std::size_t offset, MarshalData & data)
{
- char buf1 [128] = "";
- char buf2 [128] = "";
-
- SbiDllProc pProc = 0;
- int nOrd = 0;
-
- // Ordinal?
- if( rProcName.GetBuffer()[0] == '@' )
- nOrd = atoi( rProcName.GetBuffer()+1 );
-
- // Moegliche Parameter weg:
- DBG_ASSERT( sizeof(buf1) > rProcName.Len(),
- "SbiDllMgr::GetProcAddr: buffer to small!" );
- strncpy( buf1, rProcName.GetBuffer(), sizeof(buf1)-1 );
- char *p = strchr( buf1, '#' );
- if( p )
- *p = 0;
-
- DBG_ASSERT( sizeof(buf2) > strlen(buf1) + 1,
- "SbiDllMgr::GetProcAddr: buffer to small!" );
- strncpy( buf2, "_", sizeof(buf2)-1 );
- strncat( buf2, buf1, sizeof(buf2)-1-strlen(buf2) );
-
-#if defined(WIN) || defined(WNT)
- if( nOrd > 0 )
- pProc = (SbiDllProc)GetProcAddress( hLib, (char*)(long) nOrd );
- else
- {
- // 2. mit Parametern:
- pProc = (SbiDllProc)GetProcAddress ( hLib, rProcName.GetBuffer() );
- // 3. nur der Name:
- if (!pProc)
- pProc = (SbiDllProc)GetProcAddress( hLib, buf1 );
- // 4. der Name mit Underline vorweg:
- if( !pProc )
- pProc = (SbiDllProc)GetProcAddress( hLib, buf2 );
+ OSL_ASSERT(variable != 0);
+ if ((variable->GetFlags() & SBX_REFERENCE) == 0) {
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
+ case SbxINTEGER:
+ add(blob, variable->GetInteger(), outer ? 4 : 2, offset);
+ break;
+ case SbxLONG:
+ add(blob, variable->GetLong(), 4, offset);
+ break;
+ case SbxSINGLE:
+ add(blob, variable->GetSingle(), 4, offset);
+ break;
+ case SbxDOUBLE:
+ add(blob, variable->GetDouble(), outer ? 4 : 8, offset);
+ break;
+ case SbxSTRING:
+ {
+ void * p;
+ SbError e = marshalString(variable, special, data, &p);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ add(blob, p, 4, offset);
+ break;
+ }
+ case SbxOBJECT:
+ {
+ align(blob, outer ? 4 : alignment(variable), offset, 0);
+ SbError e = marshalStruct(variable, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ break;
+ }
+ case SbxBOOL:
+ add(blob, variable->GetBool(), outer ? 4 : 1, offset);
+ break;
+ case SbxBYTE:
+ add(blob, variable->GetByte(), outer ? 4 : 1, offset);
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ } else {
+ SbError e = marshalArray(variable, blob, offset, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ }
+ } else {
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
+ case SbxINTEGER:
+ case SbxLONG:
+ case SbxSINGLE:
+ case SbxDOUBLE:
+ case SbxBOOL:
+ case SbxBYTE:
+ add(blob, variable->data(), 4, offset);
+ break;
+ case SbxSTRING:
+ {
+ std::vector< char > * blob2 = data.newBlob();
+ void * p;
+ SbError e = marshalString(variable, special, data, &p);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ add(*blob2, p, 4, 0);
+ add(blob, address(*blob2), 4, offset);
+ break;
+ }
+ case SbxOBJECT:
+ {
+ std::vector< char > * blob2 = data.newBlob();
+ SbError e = marshalStruct(variable, *blob2, 0, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ void * p = address(*blob2);
+ if (outer) {
+ data.unmarshal.push_back(UnmarshalData(variable, p));
+ }
+ add(blob, p, 4, offset);
+ break;
+ }
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ } else {
+ std::vector< char > * blob2 = data.newBlob();
+ SbError e = marshalArray(variable, *blob2, 0, data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ void * p = address(*blob2);
+ if (outer) {
+ data.unmarshal.push_back(UnmarshalData(variable, p));
+ }
+ add(blob, p, 4, offset);
+ }
}
+ return ERRCODE_NONE;
+}
-#elif defined(OS2)
- PSZ pp;
- APIRET rc;
- // 1. Ordinal oder mit Parametern:
- rc = DosQueryProcAddr( hLib, nOrd, pp = (char*)rProcName.GetBuffer(), &pProc );
- // 2. nur der Name:
- if( rc )
- rc = DosQueryProcAddr( hLib, 0, pp = (PSZ)buf1, &pProc );
- // 3. der Name mit Underline vorweg:
- if( rc )
- rc = DosQueryProcAddr( hLib, 0, pp = (PSZ)buf2, &pProc );
- if( rc )
- pProc = NULL;
- else
- {
- // 16-bit oder 32-bit?
- ULONG nInfo = 0;
- if( DosQueryProcType( hLib, nOrd, pp, &nInfo ) )
- nInfo = 0;;
- }
-#else
- (void)hLib;
-#endif
- return pProc;
+template< typename T > T read(void const ** pointer) {
+ T const * p = static_cast< T const * >(*pointer);
+ *pointer = static_cast< void const * >(p + 1);
+ return *p;
}
-SbError SbiDllMgr::CallProc( SbiDllProc pProc, SbxArray* pArgs,
- SbxVariable& rResult )
-{
-// ByteString aStr("Calling DLL at ");
-// aStr += (ULONG)pProc;
-// InfoBox( 0, aStr ).Execute();
- INT16 nInt16; int nInt; INT32 nInt32; double nDouble;
- char* pStr;
-
- USHORT nSize;
- char* pStack = (char*)CreateStack( pArgs, nSize );
- switch( rResult.GetType() )
- {
+void const * unmarshal(SbxVariable * variable, void const * data) {
+ OSL_ASSERT(variable != 0);
+ if ((variable->GetType() & SbxARRAY) == 0) {
+ switch (variable->GetType()) {
case SbxINTEGER:
- nInt16 = CallINT(pProc, pStack, (short)nSize );
- rResult.PutInteger( nInt16 );
- break;
-
- case SbxUINT:
- case SbxUSHORT:
- nInt16 = (INT16)CallINT(pProc, pStack, (short)nSize );
- rResult.PutUShort( (USHORT)nInt16 );
- break;
-
- case SbxERROR:
- nInt16 = (INT16)CallINT(pProc, pStack, (short)nSize );
- rResult.PutErr( (USHORT)nInt16 );
- break;
-
- case SbxINT:
- nInt = CallINT(pProc, pStack, (short)nSize );
- rResult.PutInt( nInt );
+ variable->PutInteger(read< sal_Int16 >(&data));
break;
-
case SbxLONG:
- nInt32 = CallLNG(pProc, pStack, (short)nSize );
- rResult.PutLong( nInt32 );
+ variable->PutLong(read< sal_Int32 >(&data));
break;
-
- case SbxULONG:
- nInt32 = CallINT(pProc, pStack, (short)nSize );
- rResult.PutULong( (ULONG)nInt32 );
- break;
-
-#ifndef WNT
case SbxSINGLE:
- {
- float nSingle = CallSNG(pProc, pStack, (short)nSize );
- rResult.PutSingle( nSingle );
+ variable->PutSingle(read< float >(&data));
break;
- }
-#endif
-
case SbxDOUBLE:
-#ifdef WNT
- case SbxSINGLE:
-#endif
- nDouble = CallDBL(pProc, pStack, (short)nSize );
- rResult.PutDouble( nDouble );
+ variable->PutDouble(read< double >(&data));
break;
-
- case SbxDATE:
- nDouble = CallDBL(pProc, pStack, (short)nSize );
- rResult.PutDate( nDouble );
+ case SbxSTRING:
+ read< char * >(&data); // handled by unmarshalString
break;
-
- case SbxCHAR:
- case SbxBYTE:
+ case SbxOBJECT:
+ {
+ data = reinterpret_cast< void const * >(
+ align(
+ reinterpret_cast< sal_uIntPtr >(data),
+ alignment(variable)));
+ SbxArray * props = PTR_CAST(SbxObject, variable->GetObject())->
+ GetProperties();
+ for (USHORT i = 0; i < props->Count(); ++i) {
+ data = unmarshal(props->Get(i), data);
+ }
+ break;
+ }
case SbxBOOL:
- nInt16 = CallINT(pProc, pStack, (short)nSize );
- rResult.PutByte( (BYTE)nInt16 );
- break;
-
- case SbxSTRING:
- case SbxLPSTR:
- pStr = CallSTR(pProc, pStack, (short)nSize );
- rResult.PutString( String::CreateFromAscii( pStr ) );
+ variable->PutBool(read< sal_Bool >(&data));
break;
-
- case SbxNULL:
- case SbxEMPTY:
- nInt16 = CallINT(pProc, pStack, (short)nSize );
- // Rueckgabe nur zulaessig, wenn variant!
- if( !rResult.IsFixed() )
- rResult.PutInteger( nInt16 );
+ case SbxBYTE:
+ variable->PutByte(read< sal_uInt8 >(&data));
break;
-
- case SbxCURRENCY:
- case SbxOBJECT:
- case SbxDATAOBJECT:
default:
- CallINT(pProc, pStack, (short)nSize );
+ OSL_ASSERT(false);
break;
- }
- delete [] pStack;
-
- if( pArgs )
- {
- // die Laengen aller uebergebenen Strings anpassen
- USHORT nCount = pArgs->Count();
- for( USHORT nCur = 1; nCur < nCount; nCur++ )
- {
- SbxVariable* pVar = pArgs->Get( nCur );
- BOOL bIsString = ( pVar->GetType() == SbxSTRING ) ||
- ( pVar->GetType() == SbxLPSTR );
-
- if( pVar->GetFlags() & SBX_REFERENCE )
- {
- pVar->ResetFlag( SBX_REFERENCE ); // Sbx moechte es so
- if( bIsString )
- {
- ByteString aByteStr( (char*)pVar->GetUserData() );
- String aStr( aByteStr, gsl_getSystemTextEncoding() );
- pVar->PutString( aStr );
+ }
+ } else {
+ SbxDimArray * arr = PTR_CAST(SbxDimArray, variable->GetObject());
+ int dims = arr->GetDims();
+ std::vector< INT32 > low(dims);
+ std::vector< INT32 > up(dims);
+ for (int i = 0; i < dims; ++i) {
+ arr->GetDim32(i + 1, low[i], up[i]);
+ }
+ for (std::vector< INT32 > idx = low;;) {
+ data = unmarshal(arr->Get32(&idx[0]), data);
+ int i = dims - 1;
+ while (idx[i] == up[i]) {
+ idx[i] = low[i];
+ if (i == 0) {
+ goto done;
}
+ --i;
}
- if( bIsString )
- {
- delete (char*)(pVar->GetUserData());
- pVar->SetUserData( 0 );
- }
+ ++idx[i];
}
+ done:;
}
- return 0;
+ return data;
}
-SbError SbiDllMgr::CallProcC( SbiDllProc pProc, SbxArray* pArgs,
- SbxVariable& rResult )
-{
- (void)pProc;
- (void)pArgs;
- (void)rResult;
-
- DBG_ERROR("C calling convention not supported");
- return SbERR_BAD_ARGUMENT;
+SbError unmarshalString(StringData const & data, SbxVariable & result) {
+ rtl::OUString str;
+ if (data.buffer != 0) {
+ char const * p = static_cast< char const * >(data.buffer);
+ sal_Int32 len;
+ if (data.special) {
+ len = static_cast< sal_Int32 >(result.GetULong());
+ if (len < 0) { // i.e., DWORD result >= 2^31
+ return ERRCODE_BASIC_BAD_ARGUMENT;
+ //TODO: more specific errcode?
+ }
+ } else {
+ len = rtl_str_getLength(p);
+ }
+ SbError e = convert(p, len, &str);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ }
+ data.variable->PutString(String(str));
+ return ERRCODE_NONE;
}
-void* SbiDllMgr::CreateStack( SbxArray* pArgs, USHORT& rSize )
+struct ProcData {
+ rtl::OString name;
+ FARPROC proc;
+};
+
+SbError call(
+ rtl::OUString const & dll, ProcData const & proc, SbxArray * arguments,
+ SbxVariable & result)
{
- if( !pArgs )
+ std::vector< char > stack;
+ MarshalData data;
+ // For DWORD GetLogicalDriveStringsA(DWORD nBufferLength, LPSTR lpBuffer)
+ // from kernel32, upon return, filled lpBuffer length is result DWORD, which
+ // requires special handling in unmarshalString; other functions might
+ // require similar treatment, too:
+ bool special =
+ dll.equalsIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("KERNEL32.DLL")) &&
+ (proc.name ==
+ rtl::OString(RTL_CONSTASCII_STRINGPARAM("GetLogicalDriveStringsA")));
+ for (USHORT i = 1; i < (arguments == 0 ? 0 : arguments->Count()); ++i) {
+ SbError e = marshal(
+ true, arguments->Get(i), special && i == 2, stack, stack.size(),
+ data);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ align(stack, 4, 0, 0);
+ }
+ switch (result.GetType()) {
+ case SbxEMPTY:
+ DllMgr_call32(proc.proc, address(stack), stack.size());
+ break;
+ case SbxINTEGER:
+ result.PutInteger(
+ static_cast< sal_Int16 >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxLONG:
+ result.PutLong(
+ static_cast< sal_Int32 >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxSINGLE:
+ result.PutSingle(
+ static_cast< float >(
+ DllMgr_callFp(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxDOUBLE:
+ result.PutDouble(
+ DllMgr_callFp(proc.proc, address(stack), stack.size()));
+ break;
+ case SbxSTRING:
+ {
+ char const * s1 = reinterpret_cast< char const * >(
+ DllMgr_call32(proc.proc, address(stack), stack.size()));
+ rtl::OUString s2;
+ SbError e = convert(s1, rtl_str_getLength(s1), &s2);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ result.PutString(String(s2));
+ break;
+ }
+ case SbxOBJECT:
+ //TODO
+ DllMgr_call32(proc.proc, address(stack), stack.size());
+ break;
+ case SbxBOOL:
+ result.PutBool(
+ static_cast< sal_Bool >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ case SbxBYTE:
+ result.PutByte(
+ static_cast< sal_uInt8 >(
+ DllMgr_call32(proc.proc, address(stack), stack.size())));
+ break;
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ for (USHORT i = 1; i < (arguments == 0 ? 0 : arguments->Count()); ++i) {
+ arguments->Get(i)->ResetFlag(SBX_REFERENCE);
+ //TODO: skipped for errors?!?
+ }
+ for (std::vector< UnmarshalData >::iterator i(data.unmarshal.begin());
+ i != data.unmarshal.end(); ++i)
{
- rSize = 0;
- return 0;
+ unmarshal(i->variable, i->buffer);
}
- char* pStack = new char[ 2048 ];
- char* pTop = pStack;
- USHORT nCount = pArgs->Count();
- // erstes Element ueberspringen
-#ifndef WIN
- for( USHORT nCur = 1; nCur < nCount; nCur++ )
-#else
- // unter 16-Bit Windows anders rum (OS/2 ?????)
- for( USHORT nCur = nCount-1; nCur >= 1; nCur-- )
-#endif
+ for (std::vector< StringData >::iterator i(data.unmarshalStrings.begin());
+ i != data.unmarshalStrings.end(); ++i)
{
- SbxVariable* pVar = pArgs->Get( nCur );
- // AB 22.1.1996, Referenz
- if( pVar->GetFlags() & SBX_REFERENCE ) // Es ist eine Referenz
- {
- switch( pVar->GetType() )
- {
- case SbxINTEGER:
- case SbxUINT:
- case SbxINT:
- case SbxUSHORT:
- case SbxLONG:
- case SbxULONG:
- case SbxSINGLE:
- case SbxDOUBLE:
- case SbxCHAR:
- case SbxBYTE:
- case SbxBOOL:
- *((void**)pTop) = (void*)&(pVar->aData);
- pTop += sizeof( void* );
- break;
-
- case SbxSTRING:
- case SbxLPSTR:
- {
- USHORT nLen = 256;
- ByteString rStr( pVar->GetString(), gsl_getSystemTextEncoding() );
- if( rStr.Len() > 255 )
- nLen = rStr.Len() + 1;
-
- char* pStr = new char[ nLen ];
- strcpy( pStr, rStr.GetBuffer() ); // #100211# - checked
- // ist nicht so sauber, aber wir sparen ein Pointerarray
- DBG_ASSERT(sizeof(UINT32)>=sizeof(char*),"Gleich krachts im Basic");
- pVar->SetUserData( (sal_uIntPtr)pStr );
- *((const char**)pTop) = pStr;
- pTop += sizeof( char* );
- }
- break;
+ SbError e = unmarshalString(*i, result);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ }
+ return ERRCODE_NONE;
+}
- case SbxNULL:
- case SbxEMPTY:
- case SbxERROR:
- case SbxDATE:
- case SbxCURRENCY:
- case SbxOBJECT:
- case SbxDATAOBJECT:
- default:
- break;
+SbError getProcData(HMODULE handle, rtl::OUString const & name, ProcData * proc)
+{
+ OSL_ASSERT(proc != 0);
+ if (name.getLength() != 0 && name[0] == '@') { //TODO: "@" vs. "#"???
+ sal_Int32 n = name.copy(1).toInt32(); //TODO: handle bad input
+ if (n <= 0 || n > 0xFFFF) {
+ return ERRCODE_BASIC_BAD_ARGUMENT; //TODO: more specific errcode?
+ }
+ FARPROC p = GetProcAddress(handle, reinterpret_cast< LPCSTR >(n));
+ if (p != 0) {
+ proc->name = rtl::OString(RTL_CONSTASCII_STRINGPARAM("#")) +
+ rtl::OString::valueOf(n);
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ } else {
+ rtl::OString name8;
+ SbError e = convert(name, &name8);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ FARPROC p = GetProcAddress(handle, name8.getStr());
+ if (p != 0) {
+ proc->name = name8;
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ sal_Int32 i = name8.indexOf('#');
+ if (i != -1) {
+ name8 = name8.copy(0, i);
+ p = GetProcAddress(handle, name8.getStr());
+ if (p != 0) {
+ proc->name = name8;
+ proc->proc = p;
+ return ERRCODE_NONE;
}
}
- else
- {
- // ByVal
- switch( pVar->GetType() )
- {
- case SbxINTEGER:
- case SbxUINT:
- case SbxINT:
- case SbxUSHORT:
- *((INT16*)pTop) = pVar->GetInteger();
- pTop += sizeof( INT16 );
- break;
+ rtl::OString real(
+ rtl::OString(RTL_CONSTASCII_STRINGPARAM("_")) + name8);
+ p = GetProcAddress(handle, real.getStr());
+ if (p != 0) {
+ proc->name = real;
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ real = name8 + rtl::OString(RTL_CONSTASCII_STRINGPARAM("A"));
+ p = GetProcAddress(handle, real.getStr());
+ if (p != 0) {
+ proc->name = real;
+ proc->proc = p;
+ return ERRCODE_NONE;
+ }
+ }
+ return ERRCODE_BASIC_PROC_UNDEFINED;
+}
- case SbxLONG:
- case SbxULONG:
- *((INT32*)pTop) = pVar->GetLong();
- pTop += sizeof( INT32 );
- break;
+struct Dll: public salhelper::SimpleReferenceObject {
+private:
+ typedef std::map< rtl::OUString, ProcData > Procs;
- case SbxSINGLE:
- *((float*)pTop) = pVar->GetSingle();
- pTop += sizeof( float );
- break;
+ virtual ~Dll();
- case SbxDOUBLE:
- *((double*)pTop) = pVar->GetDouble();
- pTop += sizeof( double );
- break;
+public:
+ Dll(): handle(0) {}
- case SbxSTRING:
- case SbxLPSTR:
- {
- char* pStr = new char[ pVar->GetString().Len() + 1 ];
- ByteString aByteStr( pVar->GetString(), gsl_getSystemTextEncoding() );
- strcpy( pStr, aByteStr.GetBuffer() ); // #100211# - checked
- // ist nicht so sauber, aber wir sparen ein Pointerarray
- DBG_ASSERT(sizeof(UINT32)>=sizeof(char*),"Gleich krachts im Basic");
- pVar->SetUserData( (sal_uIntPtr)pStr );
- *((const char**)pTop) = pStr;
- pTop += sizeof( char* );
- }
- break;
+ SbError getProc(rtl::OUString const & name, ProcData * proc);
- case SbxCHAR:
- case SbxBYTE:
- case SbxBOOL:
- *((BYTE*)pTop) = pVar->GetByte();
- pTop += sizeof( BYTE );
- break;
+ HMODULE handle;
+ Procs procs;
+};
- case SbxNULL:
- case SbxEMPTY:
- case SbxERROR:
- case SbxDATE:
- case SbxCURRENCY:
- case SbxOBJECT:
- case SbxDATAOBJECT:
- default:
- break;
- }
+Dll::~Dll() {
+ if (handle != 0 && !FreeLibrary(handle)) {
+ OSL_TRACE("FreeLibrary(%p) failed with %u", handle, GetLastError());
+ }
+}
+
+SbError Dll::getProc(rtl::OUString const & name, ProcData * proc) {
+ Procs::iterator i(procs.find(name));
+ if (i != procs.end()) {
+ *proc = i->second;
+ return ERRCODE_NONE;
+ }
+ SbError e = getProcData(handle, name, proc);
+ if (e == ERRCODE_NONE) {
+ procs.insert(Procs::value_type(name, *proc));
+ }
+ return e;
+}
+
+rtl::OUString fullDllName(rtl::OUString const & name) {
+ rtl::OUString full(name);
+ if (full.indexOf('.') == -1) {
+ full += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".DLL"));
+ }
+ return full;
+}
+
+}
+
+struct SbiDllMgr::Impl: private boost::noncopyable {
+private:
+ typedef std::map< rtl::OUString, rtl::Reference< Dll > > Dlls;
+
+public:
+ Dll * getDll(rtl::OUString const & name);
+
+ Dlls dlls;
+};
+
+Dll * SbiDllMgr::Impl::getDll(rtl::OUString const & name) {
+ Dlls::iterator i(dlls.find(name));
+ if (i == dlls.end()) {
+ i = dlls.insert(Dlls::value_type(name, new Dll)).first;
+ HMODULE h = LoadLibraryW(name);
+ if (h == 0) {
+ dlls.erase(i);
+ return 0;
}
+ i->second->handle = h;
}
- rSize = (USHORT)((ULONG)pTop - (ULONG)pStack);
- return pStack;
+ return i->second.get();
}
+SbError SbiDllMgr::Call(
+ rtl::OUString const & function, rtl::OUString const & library,
+ SbxArray * arguments, SbxVariable & result, bool cdeclConvention)
+{
+ if (cdeclConvention) {
+ return ERRCODE_BASIC_NOT_IMPLEMENTED;
+ }
+ rtl::OUString dllName(fullDllName(library));
+ Dll * dll = impl_->getDll(dllName);
+ if (dll == 0) {
+ return ERRCODE_BASIC_BAD_DLL_LOAD;
+ }
+ ProcData proc;
+ SbError e = dll->getProc(function, &proc);
+ if (e != ERRCODE_NONE) {
+ return e;
+ }
+ return call(dllName, proc, arguments, result);
+}
+
+void SbiDllMgr::FreeDll(rtl::OUString const & library) {
+ impl_->dlls.erase(library);
+}
+#else
+
+struct SbiDllMgr::Impl {};
+
+SbError SbiDllMgr::Call(
+ rtl::OUString const &, rtl::OUString const &, SbxArray *, SbxVariable &,
+ bool)
+{
+ return ERRCODE_BASIC_NOT_IMPLEMENTED;
+}
+
+void SbiDllMgr::FreeDll(rtl::OUString const &) {}
+
+#endif
+SbiDllMgr::SbiDllMgr(): impl_(new Impl) {}
+SbiDllMgr::~SbiDllMgr() {}
diff --git a/basic/source/runtime/dllmgr.hxx b/basic/source/runtime/dllmgr.hxx
index 2c71a2843c37..fdff8c2849be 100644
--- a/basic/source/runtime/dllmgr.hxx
+++ b/basic/source/runtime/dllmgr.hxx
@@ -25,71 +25,36 @@
*
************************************************************************/
-#ifndef _DLLMGR_HXX
-#define _DLLMGR_HXX
+#ifndef INCLUDED_BASIC_SOURCE_RUNTIME_DLLMGR_HXX
+#define INCLUDED_BASIC_SOURCE_RUNTIME_DLLMGR_HXX
-#define _SVSTDARR_BYTESTRINGSSORT
-#include <svl/svarray.hxx>
-#ifndef _SVSTDARR_HXX //autogen
-#include <svl/svstdarr.hxx>
-#endif
+#include "sal/config.h"
-// !!! nur zum debuggen fuer infoboxes !!!
-//#ifndef _SV_HXX
-//#include <sv.hxx>
-//#endif
+#include <memory>
-//#ifndef _TOOLS_HXX
-//#include <tools.hxx>
-//#endif
-#define _SVSTDARR_STRINGS
-//#ifndef _SVSTDARR_HXX
-//#include <svstdarr.hxx>
-//#endif
-#ifndef _SBERRORS_HXX
-#include <basic/sberrors.hxx>
-#endif
+#include "basic/sberrors.hxx"
+#include "boost/noncopyable.hpp"
+namespace rtl { class OUString; }
class SbxArray;
class SbxVariable;
-class ImplSbiDll;
-class ImplSbiProc;
-
-SV_DECL_PTRARR_SORT(ImplDllArr,ByteStringPtr,5,5)
-
-class SbiDllMgr
-{
- ImplDllArr aDllArr;
-
- SbiDllMgr( const SbiDllMgr& );
+class SbiDllMgr: private boost::noncopyable {
+public:
+ SbiDllMgr();
-#ifdef _DLLMGR_CXX
- ImplSbiDll* GetDll( const ByteString& rDllName );
- SbiDllProc GetProc( ImplSbiDll*, const ByteString& rProcName );
+ ~SbiDllMgr();
- SbiDllHandle CreateDllHandle( const ByteString& rDllName );
- void FreeDllHandle( SbiDllHandle );
- SbiDllProc GetProcAddr( SbiDllHandle, const ByteString& pProcName );
- SbError CallProc( SbiDllProc pProc, SbxArray* pArgs,
- SbxVariable& rResult );
- SbError CallProcC( SbiDllProc pProc, SbxArray* pArgs,
- SbxVariable& rResult );
- void* CreateStack( SbxArray* pArgs, USHORT& rSize );
- void CheckDllName( ByteString& rName );
-#endif
+ SbError Call(
+ rtl::OUString const & function, rtl::OUString const & library,
+ SbxArray * arguments, SbxVariable & result, bool cdeclConvention);
-public:
- SbiDllMgr();
- ~SbiDllMgr();
+ void FreeDll(rtl::OUString const & library);
- SbError Call( const char* pFunc, const char* pDll,
- SbxArray* pArgs, SbxVariable& rResult,
- BOOL bCDecl );
+private:
+ struct Impl;
- void FreeDll( const ByteString& rDllName );
+ std::auto_ptr< Impl > impl_;
};
-
-
#endif
diff --git a/basic/source/runtime/makefile.mk b/basic/source/runtime/makefile.mk
index 9bd197975ee6..f2ed11196b28 100644
--- a/basic/source/runtime/makefile.mk
+++ b/basic/source/runtime/makefile.mk
@@ -30,6 +30,8 @@ PRJ=..$/..
PRJNAME=basic
TARGET=runtime
+ENABLE_EXCEPTIONS = TRUE
+
# --- Settings -----------------------------------------------------------
.INCLUDE : settings.mk
@@ -53,29 +55,12 @@ SLOFILES= \
$(SLO)$/ddectrl.obj \
$(SLO)$/dllmgr.obj
-.IF "$(GUI)$(CPU)" == "WINI"
-SLOFILES+= $(SLO)$/win.obj
-.ENDIF
-
.IF "$(GUI)$(COM)$(CPU)" == "WNTMSCI"
SLOFILES+= $(SLO)$/wnt.obj
-.ENDIF
-
-.IF "$(GUI)$(COM)$(CPU)" == "WNTGCCI"
+.ELIF "$(GUI)$(COM)$(CPU)" == "WNTGCCI"
SLOFILES+= $(SLO)$/wnt-mingw.obj
.ENDIF
-.IF "$(GUI)$(CPU)" == "OS2I"
-#FIXME SLOFILES+= $(SLO)$/os2.obj
-.ENDIF
-
-EXCEPTIONSFILES=$(SLO)$/step0.obj \
- $(SLO)$/step2.obj \
- $(SLO)$/methods.obj \
- $(SLO)$/methods1.obj \
- $(SLO)$/iosys.obj \
- $(SLO)$/runtime.obj
-
# --- Targets -------------------------------------------------------------
.INCLUDE : target.mk
diff --git a/basic/source/runtime/methods1.cxx b/basic/source/runtime/methods1.cxx
index b25c213a493d..8c7da2403705 100644
--- a/basic/source/runtime/methods1.cxx
+++ b/basic/source/runtime/methods1.cxx
@@ -523,6 +523,18 @@ RTLFUNC(WaitUntil)
Wait_Impl( true, rPar );
}
+RTLFUNC(DoEvents)
+{
+ (void)pBasic;
+ (void)bWrite;
+ (void)rPar;
+ Timer aTimer;
+ aTimer.SetTimeout( 1 );
+ aTimer.Start();
+ while ( aTimer.IsActive() )
+ Application::Yield();
+}
+
RTLFUNC(GetGUIVersion)
{
(void)pBasic;
@@ -622,8 +634,7 @@ RTLFUNC(FreeLibrary)
if ( rPar.Count() != 2 )
StarBASIC::Error( SbERR_BAD_ARGUMENT );
- ByteString aByteDLLName( rPar.Get(1)->GetString(), gsl_getSystemTextEncoding() );
- pINST->GetDllMgr()->FreeDll( aByteDLLName );
+ pINST->GetDllMgr()->FreeDll( rPar.Get(1)->GetString() );
}
bool IsBaseIndexOne()
{
diff --git a/basic/source/runtime/os2.asm b/basic/source/runtime/os2.asm
deleted file mode 100644
index a56f0b74b89e..000000000000
--- a/basic/source/runtime/os2.asm
+++ /dev/null
@@ -1,103 +0,0 @@
-;*************************************************************************
-;
-; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-;
-; Copyright 2000, 2010 Oracle and/or its affiliates.
-;
-; OpenOffice.org - a multi-platform office productivity suite
-;
-; 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.
-;
-;*************************************************************************
-
-; Anmerkungen
-; Direktaufruf von C- und PASCAL-Routinen, OS/2
-;
-; Inhalt:
-; type = CallXXX (far *proc, char *stack, short nstack)
-;
-; Kopie des Basic-Stacks (nstack Bytes) auf den C-Stack
-; und Aufruf der Prozedur.
-
- .386
- .MODEL FLAT
-
- .CODE
-
- PUBLIC CallINT
- PUBLIC CallLNG
- PUBLIC CallSNG
- PUBLIC CallDBL
- PUBLIC CallSTR
- PUBLIC CallFIX
-
- PUBLIC _CallINT
- PUBLIC _CallLNG
- PUBLIC _CallSNG
- PUBLIC _CallDBL
- PUBLIC _CallSTR
- PUBLIC _CallFIX
-
-_CallINT LABEL byte
-_CallLNG LABEL byte
-_CallSNG LABEL byte
-_CallDBL LABEL byte
-_CallSTR LABEL byte
-_CallFIX LABEL byte
-
-CallINT LABEL byte
-CallLNG LABEL byte
-CallSNG LABEL byte
-CallDBL LABEL byte
-CallSTR LABEL byte
-CallFIX PROC
-
-p EQU [EBP+8]
-stk EQU [EBP+12]
-n EQU [EBP+16]
-
- PUSH EBP
- MOV EBP,ESP
- PUSH ESI
- PUSH EDI
- MOV DX,DS
- MOVZX ECX,word ptr [n]
- SUB ESP,ECX
- MOV EDI,ESP
- MOV AX,SS
- MOV ES,AX
- MOV ESI,[stk]
- SHR ECX,1
- CLD
- JCXZ $1
- REP MOVSW ; Stack uebernehmen
-$1: MOV DS,DX
- CALL LARGE [p] ; 32-bit
- MOV ECX,EBP
- SUB ECX,8 ; wegen gepushter Register
- MOV ESP,ECX
- POP EDI
- POP ESI
- POP EBP
-; Bei Borland C++ Calling Convention:
-; RET 12
-; CSet System-Calling Convention
- RET
-CallFIX ENDP
-
- END
diff --git a/basic/source/runtime/rtlproto.hxx b/basic/source/runtime/rtlproto.hxx
index 6c90c408cd93..1a1ae4f32283 100644
--- a/basic/source/runtime/rtlproto.hxx
+++ b/basic/source/runtime/rtlproto.hxx
@@ -166,6 +166,7 @@ extern RTLFUNC(RmDir); // JSM
extern RTLFUNC(SendKeys); // JSM
extern RTLFUNC(DimArray);
extern RTLFUNC(Dir);
+extern RTLFUNC(DoEvents);
extern RTLFUNC(Exp);
extern RTLFUNC(FileLen);
extern RTLFUNC(Fix);
diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx
index ef3e4c056cb6..c3419adbfdb3 100755
--- a/basic/source/runtime/runtime.cxx
+++ b/basic/source/runtime/runtime.cxx
@@ -155,6 +155,7 @@ SbiRuntime::pStep0 SbiRuntime::aStep0[] = { // Alle Opcodes ohne Operanden
&SbiRuntime::StepVBASET,// vba-like set statement
&SbiRuntime::StepERASE_CLEAR,// vba-like set statement
&SbiRuntime::StepARRAYACCESS,// access TOS as array
+ &SbiRuntime::StepBYVAL, // access TOS as array
};
SbiRuntime::pStep1 SbiRuntime::aStep1[] = { // Alle Opcodes mit einem Operanden
@@ -906,7 +907,7 @@ sal_Int32 SbiRuntime::translateErrorToVba( SbError nError, String& rMsg )
{
// TEST, has to be vb here always
#ifdef DBG_UTIL
- SbError nTmp = StarBASIC::GetSfxFromVBError( USHORT( nError ) );
+ SbError nTmp = StarBASIC::GetSfxFromVBError( (USHORT)nError );
DBG_ASSERT( nTmp, "No VB error!" );
#endif
@@ -1231,9 +1232,7 @@ void SbiRuntime::DllCall
SbxVariable* pRes = new SbxVariable( eResType );
SbiDllMgr* pDllMgr = pInst->GetDllMgr();
- ByteString aByteFuncName( aFuncName, gsl_getSystemTextEncoding() );
- ByteString aByteDLLName( aDLLName, gsl_getSystemTextEncoding() );
- SbError nErr = pDllMgr->Call( aByteFuncName.GetBuffer(), aByteDLLName.GetBuffer(), pArgs, *pRes, bCDecl );
+ SbError nErr = pDllMgr->Call( aFuncName, aDLLName, pArgs, *pRes, bCDecl );
if( nErr )
Error( nErr );
PushVar( pRes );
diff --git a/basic/source/runtime/stdobj.cxx b/basic/source/runtime/stdobj.cxx
index 13bc8810144a..60d2e9cf448d 100644
--- a/basic/source/runtime/stdobj.cxx
+++ b/basic/source/runtime/stdobj.cxx
@@ -216,6 +216,7 @@ static Methods aMethods[] = {
{ "Dir", SbxSTRING, 2 | _FUNCTION, RTLNAME(Dir),0 },
{ "FileSpec", SbxSTRING, _OPT, NULL,0 },
{ "attrmask", SbxINTEGER, _OPT, NULL,0 },
+{ "DoEvents", SbxEMPTY, _FUNCTION, RTLNAME(DoEvents),0 },
{ "DumpAllObjects", SbxEMPTY, 2 | _SUB, RTLNAME(DumpAllObjects),0 },
{ "FileSpec", SbxSTRING, 0,NULL,0 },
{ "DumpAll", SbxINTEGER, _OPT, NULL,0 },
@@ -361,6 +362,8 @@ static Methods aMethods[] = {
{ "Count", SbxLONG, 0,NULL,0 },
{ "Len", SbxLONG, 1 | _FUNCTION, RTLNAME(Len),0 },
{ "StringOrVariant", SbxVARIANT, 0,NULL,0 },
+{ "LenB", SbxLONG, 1 | _FUNCTION, RTLNAME(Len),0 },
+ { "StringOrVariant", SbxVARIANT, 0,NULL,0 },
{ "Load", SbxNULL, 1 | _FUNCTION, RTLNAME(Load),0 },
{ "object", SbxOBJECT, 0,NULL,0 },
{ "LoadPicture", SbxOBJECT, 1 | _FUNCTION, RTLNAME(LoadPicture),0 },
@@ -628,6 +631,10 @@ SbiStdObject::SbiStdObject( const String& r, StarBASIC* pb ) : SbxObject( r )
p += ( p->nArgs & _ARGSMASK ) + 1;
}
+ // #i92642: Remove default properties
+ Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE );
+ Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE );
+
SetParent( pb );
pStdFactory = new SbStdFactory;
diff --git a/basic/source/runtime/step0.cxx b/basic/source/runtime/step0.cxx
index 39af5ea4adc3..1d9333ff7555 100644
--- a/basic/source/runtime/step0.cxx
+++ b/basic/source/runtime/step0.cxx
@@ -43,6 +43,9 @@
#include <vcl/svapp.hxx>
#include <unotools/textsearch.hxx>
+Reference< XInterface > createComListener( const Any& aControlAny, const ::rtl::OUString& aVBAType,
+ const ::rtl::OUString& aPrefix, SbxObjectRef xScopeObj );
+
#include <algorithm>
SbxVariable* getDefaultProp( SbxVariable* pRef );
@@ -515,8 +518,29 @@ void SbiRuntime::StepSET_Impl( SbxVariableRef& refVal, SbxVariableRef& refVar, b
}
}
+ // Handle withevents
+ BOOL bWithEvents = refVar->IsSet( SBX_WITH_EVENTS );
+ Reference< XInterface > xComListener;
+ if( bWithEvents )
+ {
+ SbxBase* pObj = refVal->GetObject();
+ SbUnoObject* pUnoObj = (pObj != NULL) ? PTR_CAST(SbUnoObject,pObj) : NULL;
+ if( pUnoObj != NULL )
+ {
+ Any aControlAny = pUnoObj->getUnoAny();
+ String aDeclareClassName = refVar->GetDeclareClassName();
+ ::rtl::OUString aVBAType = aDeclareClassName;
+ ::rtl::OUString aPrefix = refVar->GetName();
+ SbxObjectRef xScopeObj = refVar->GetParent();
+ xComListener = createComListener( aControlAny, aVBAType, aPrefix, xScopeObj );
+ }
+ }
+
*refVar = *refVal;
+ if( bWithEvents )
+ refVar->SetComListener( xComListener ); // Hold reference
+
// lhs is a property who's value is currently (Empty e.g. no broadcast yet)
// in this case if there is a default prop involved the value of the
// default property may infact be void so the type will also be SbxEMPTY
@@ -908,6 +932,19 @@ void SbiRuntime::StepARRAYACCESS()
PushVar( CheckArray( refVar ) );
}
+void SbiRuntime::StepBYVAL()
+{
+ // Copy variable on stack to break call by reference
+ SbxVariableRef pVar = PopVar();
+ SbxDataType t = pVar->GetType();
+
+ SbxVariable* pCopyVar = new SbxVariable( t );
+ pCopyVar->SetFlag( SBX_READWRITE );
+ *pCopyVar = *pVar;
+
+ PushVar( pCopyVar );
+}
+
// Einrichten eines Argvs
// nOp1 bleibt so -> 1. Element ist Returnwert
diff --git a/basic/source/runtime/step1.cxx b/basic/source/runtime/step1.cxx
index c6f090048bf2..e23ef864218e 100644
--- a/basic/source/runtime/step1.cxx
+++ b/basic/source/runtime/step1.cxx
@@ -453,9 +453,9 @@ bool SbiRuntime::implIsClass( SbxObject* pObj, const String& aClass )
}
bool SbiRuntime::checkClass_Impl( const SbxVariableRef& refVal,
- const String& aClass, bool bRaiseErrors )
+ const String& aClass, bool bRaiseErrors, bool bDefault )
{
- bool bOk = true;
+ bool bOk = bDefault;
SbxDataType t = refVal->GetType();
if( t == SbxOBJECT )
@@ -489,6 +489,8 @@ bool SbiRuntime::checkClass_Impl( const SbxVariableRef& refVal,
}
else
{
+ bOk = true;
+
SbClassModuleObject* pClassModuleObject = PTR_CAST(SbClassModuleObject,pObj);
if( pClassModuleObject != NULL )
pClassModuleObject->triggerInitializeEvent();
@@ -532,7 +534,8 @@ void SbiRuntime::StepTESTCLASS( UINT32 nOp1 )
{
SbxVariableRef xObjVal = PopVar();
String aClass( pImg->GetString( static_cast<short>( nOp1 ) ) );
- bool bOk = checkClass_Impl( xObjVal, aClass, false );
+ bool bDefault = !bVBAEnabled;
+ bool bOk = checkClass_Impl( xObjVal, aClass, false, bDefault );
SbxVariable* pRet = new SbxVariable;
pRet->PutBool( bOk );
diff --git a/basic/source/runtime/step2.cxx b/basic/source/runtime/step2.cxx
index 3a260ad203a3..72ea67dd8db4 100644
--- a/basic/source/runtime/step2.cxx
+++ b/basic/source/runtime/step2.cxx
@@ -1068,9 +1068,17 @@ void SbiRuntime::StepTCREATE( UINT32 nOp1, UINT32 nOp2 )
pCopyObj->SetName( aName );
SbxVariable* pNew = new SbxVariable;
pNew->PutObject( pCopyObj );
+ pNew->SetDeclareClassName( aClass );
PushVar( pNew );
}
+void SbiRuntime::implCreateFixedString( SbxVariable* pStrVar, UINT32 nOp2 )
+{
+ USHORT nCount = static_cast<USHORT>( nOp2 >> 17 ); // len = all bits above 0x10000
+ String aStr;
+ aStr.Fill( nCount, 0 );
+ pStrVar->PutString( aStr );
+}
// Einrichten einer lokalen Variablen (+StringID+Typ)
@@ -1081,9 +1089,15 @@ void SbiRuntime::StepLOCAL( UINT32 nOp1, UINT32 nOp2 )
String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
if( refLocals->Find( aName, SbxCLASS_DONTCARE ) == NULL )
{
- SbxDataType t = (SbxDataType) nOp2;
+ SbxDataType t = (SbxDataType)(nOp2 & 0xffff);
SbxVariable* p = new SbxVariable( t );
p->SetName( aName );
+ bool bWithEvents = ((t & 0xff) == SbxOBJECT && (nOp2 & SBX_TYPE_WITH_EVENTS_FLAG) != 0);
+ if( bWithEvents )
+ p->SetFlag( SBX_WITH_EVENTS );
+ bool bFixedString = ((t & 0xff) == SbxSTRING && (nOp2 & SBX_FIXED_LEN_STRING_FLAG) != 0);
+ if( bFixedString )
+ implCreateFixedString( p, nOp2 );
refLocals->Put( p, refLocals->Count() );
}
}
@@ -1093,7 +1107,7 @@ void SbiRuntime::StepLOCAL( UINT32 nOp1, UINT32 nOp2 )
void SbiRuntime::StepPUBLIC_Impl( UINT32 nOp1, UINT32 nOp2, bool bUsedForClassModule )
{
String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
- SbxDataType t = (SbxDataType) nOp2;
+ SbxDataType t = (SbxDataType)(SbxDataType)(nOp2 & 0xffff);;
BOOL bFlag = pMod->IsSet( SBX_NO_MODIFY );
pMod->SetFlag( SBX_NO_MODIFY );
SbxVariableRef p = pMod->Find( aName, SbxCLASS_PROPERTY );
@@ -1109,6 +1123,13 @@ void SbiRuntime::StepPUBLIC_Impl( UINT32 nOp1, UINT32 nOp2, bool bUsedForClassMo
pProp->SetFlag( SBX_DONTSTORE );
// AB: 2.7.1996: HACK wegen 'Referenz kann nicht gesichert werden'
pProp->SetFlag( SBX_NO_MODIFY);
+
+ bool bWithEvents = ((t & 0xff) == SbxOBJECT && (nOp2 & SBX_TYPE_WITH_EVENTS_FLAG) != 0);
+ if( bWithEvents )
+ pProp->SetFlag( SBX_WITH_EVENTS );
+ bool bFixedString = ((t & 0xff) == SbxSTRING && (nOp2 & SBX_FIXED_LEN_STRING_FLAG) != 0);
+ if( bFixedString )
+ implCreateFixedString( p, nOp2 );
}
}
@@ -1122,7 +1143,10 @@ void SbiRuntime::StepPUBLIC_P( UINT32 nOp1, UINT32 nOp2 )
// Creates module variable that isn't reinitialised when
// between invocations ( for VBASupport & document basic only )
if( pMod->pImage->bFirstInit )
- StepPUBLIC( nOp1, nOp2 );
+ {
+ bool bUsedForClassModule = pImg->GetFlag( SBIMG_CLASSMODULE );
+ StepPUBLIC_Impl( nOp1, nOp2, bUsedForClassModule );
+ }
}
// Einrichten einer globalen Variablen (+StringID+Typ)
@@ -1133,7 +1157,7 @@ void SbiRuntime::StepGLOBAL( UINT32 nOp1, UINT32 nOp2 )
StepPUBLIC_Impl( nOp1, nOp2, true );
String aName( pImg->GetString( static_cast<short>( nOp1 ) ) );
- SbxDataType t = (SbxDataType) nOp2;
+ SbxDataType t = (SbxDataType)(SbxDataType)(nOp2 & 0xffff);;
BOOL bFlag = rBasic.IsSet( SBX_NO_MODIFY );
rBasic.SetFlag( SBX_NO_MODIFY );
SbxVariableRef p = rBasic.Find( aName, SbxCLASS_PROPERTY );
diff --git a/basic/source/runtime/win.asm b/basic/source/runtime/win.asm
deleted file mode 100644
index dea597a4ce51..000000000000
--- a/basic/source/runtime/win.asm
+++ /dev/null
@@ -1,80 +0,0 @@
-;*************************************************************************
-;
-; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-;
-; Copyright 2000, 2010 Oracle and/or its affiliates.
-;
-; OpenOffice.org - a multi-platform office productivity suite
-;
-; 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.
-;
-;*************************************************************************
-
-; Anmerkungen
-; Direktaufruf von C- und PASCAL-Routinen, Windows und OS/2
-;
-; Inhalt:
-; type = CallXXX (far *proc, char *stack, short nstack)
-;
-; Kopie des Basic-Stacks (nstack Bytes) auf den C-Stack
-; und Aufruf der Prozedur.
-
- .MODEL LARGE,C
-
- .CODE
-
- PUBLIC CallINT
- PUBLIC CallLNG
- PUBLIC CallSNG
- PUBLIC CallDBL
- PUBLIC CallSTR
- PUBLIC CallFIX
-
-CallINT LABEL byte
-CallLNG LABEL byte
-CallSNG LABEL byte
-CallDBL LABEL byte
-CallSTR LABEL byte
-CallFIX PROC p:PTR,stk:PTR,n:WORD
-
- PUSH SI
- PUSH DI
- MOV DX,DS
- SUB SP,[n]
- MOV DI,SP
- MOV AX,SS
- MOV ES,AX
- LDS SI,[stk]
- MOV CX,[n]
- SHR CX,1
- CLD
- JCXZ $1
- REP MOVSW ; Stack uebernehmen
-$1: MOV DS,DX
- CALL [p] ; Aufruf der Prozedur
- CLI
- MOV SP,BP
- SUB SP,4 ; wegen gepushter Register
- STI
- POP DI
- POP SI
- RET
-
-CallFIX ENDP
-
- END
diff --git a/basic/source/runtime/wnt-mingw.s b/basic/source/runtime/wnt-mingw.s
index 1168804102d0..7868ddd386f0 100644
--- a/basic/source/runtime/wnt-mingw.s
+++ b/basic/source/runtime/wnt-mingw.s
@@ -1,7 +1,7 @@
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
+#
# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
@@ -23,71 +23,31 @@
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
-#*************************************************************************
-
-# Anmerkungen
-# Direktaufruf von C- und PASCAL-Routinen, Windows und OS/2
-#
-# Inhalt:
-# type = CallXXX (far *pProc, char *pStack, short nStack)
-#
-# Kopie des Basic-Stacks (nStack Bytes) auf den C-Stack
-# und Aufruf der Prozedur.
-
- .intel_syntax
- #.386
-
-#_TEXT SEGMENT DWORD PUBLIC 'CODE' USE32
-
- #ASSUME CS:_TEXT
-
-.globl _CallINT
-.globl _CallLNG
-.globl _CallDBL
-.globl _CallSTR
-.globl _CallFIX
-
-_CallINT:
-_CallLNG:
-_CallDBL:
-_CallSTR:
-
-_CallFIX: PUSH EBP
- MOV EBP,ESP
- PUSH ESI
- PUSH EDI
-
- PUSH ECX
- PUSH EDX
-
- MOV DX,DS
- MOVZX EAX,WORD PTR [EBP+16] # EAX == nStack
- SUB ESP,EAX # Stack um nStack Bytes vergroessern
- MOV EDI,ESP
- MOV AX,SS
- MOV ES,AX # ES:EDI = Startadresse des fuer
- # Parameter reservierten Stackbereichs
- MOV ESI,[EBP+12] # DS:ESI == pStack
-
- MOVZX ECX,WORD PTR [EBP+16] # ECX == nStack
- SHR ECX,1
- CLD
- JCXZ $1
- REP MOVSW # Stack uebernehmen
-$1: MOV DS,DX
- CALL DWORD PTR [EBP+8] # Aufruf der Prozedur
- # CLI # unter NT nicht erlaubt (privileged instruction)
- MOV ESP,EBP
- SUB ESP,16 # wegen gepushter Register
- # (ESI, EDI)
- # STI
- POP EDX
- POP ECX
- POP EDI
- POP ESI
- POP EBP
- RET 12
-
-#_TEXT ENDS
-
- #END
+#***********************************************************************/
+
+.intel_syntax
+
+.globl _DllMgr_call32
+.globl _DllMgr_callFp
+
+_DllMgr_call32:
+_DllMgr_callFp:
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov ecx, [ebp+16]
+ jecxz $1
+ sub esp, ecx
+ mov edi, esp
+ mov esi, [ebp+12]
+ shr ecx, 2
+ rep movsd
+$1: call DWORD PTR [ebp+8]
+ ; for extra safety, do not trust esp after call (in case the Basic Declare
+ ; signature is wrong):
+ mov edi, [ebp-8]
+ mov esi, [ebp-4]
+ mov esp, ebp
+ pop ebp
+ ret 12
diff --git a/basic/source/runtime/wnt.asm b/basic/source/runtime/wnt.asm
index 3824daae964b..2a8710e34243 100644
--- a/basic/source/runtime/wnt.asm
+++ b/basic/source/runtime/wnt.asm
@@ -1,7 +1,7 @@
;*************************************************************************
;
; DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-;
+;
; Copyright 2000, 2010 Oracle and/or its affiliates.
;
; OpenOffice.org - a multi-platform office productivity suite
@@ -23,70 +23,34 @@
; <http://www.openoffice.org/license.html>
; for a copy of the LGPLv3 License.
;
-;*************************************************************************
-
-; Anmerkungen
-; Direktaufruf von C- und PASCAL-Routinen, Windows und OS/2
-;
-; Inhalt:
-; type = CallXXX (far *pProc, char *pStack, short nStack)
-;
-; Kopie des Basic-Stacks (nStack Bytes) auf den C-Stack
-; und Aufruf der Prozedur.
-
- .386
-
-_TEXT SEGMENT DWORD PUBLIC 'CODE' USE32
-
- ASSUME CS:_TEXT
-
- PUBLIC _CallINT@12
- PUBLIC _CallLNG@12
- PUBLIC _CallDBL@12
- PUBLIC _CallSTR@12
- PUBLIC _CallFIX@12
-
-_CallINT@12 LABEL byte
-_CallLNG@12 LABEL byte
-_CallDBL@12 LABEL byte
-_CallSTR@12 LABEL byte
-
-_CallFIX@12: PUSH EBP
- MOV EBP,ESP
- PUSH ESI
- PUSH EDI
-
- PUSH ECX
- PUSH EDX
-
- MOV DX,DS
- MOVZX EAX,WORD PTR [EBP+16] ; EAX == nStack
- SUB ESP,EAX ; Stack um nStack Bytes vergroessern
- MOV EDI,ESP
- MOV AX,SS
- MOV ES,AX ; ES:EDI = Startadresse des fuer
- ; Parameter reservierten Stackbereichs
- MOV ESI,[EBP+12] ; DS:ESI == pStack
-
- MOVZX ECX,WORD PTR [EBP+16] ; ECX == nStack
- SHR ECX,1
- CLD
- JCXZ $1
- REP MOVSW ; Stack uebernehmen
-$1: MOV DS,DX
- CALL DWORD PTR [EBP+8] ; Aufruf der Prozedur
- ; CLI ; unter NT nicht erlaubt (privileged instruction)
- MOV ESP,EBP
- SUB ESP,16 ; wegen gepushter Register
- ; (ESI, EDI)
- ; STI
- POP EDX
- POP ECX
- POP EDI
- POP ESI
- POP EBP
- RET 12
-
-_TEXT ENDS
-
- END
+;***********************************************************************/
+
+.386
+
+PUBLIC _DllMgr_call32@12
+PUBLIC _DllMgr_callFp@12
+
+_TEXT SEGMENT
+_DllMgr_call32@12:
+_DllMgr_callFp@12:
+ push ebp
+ mov ebp, esp
+ push esi
+ push edi
+ mov ecx, [ebp+16]
+ jecxz $1
+ sub esp, ecx
+ mov edi, esp
+ mov esi, [ebp+12]
+ shr ecx, 2
+ rep movsd
+$1: call DWORD PTR [ebp+8]
+ ; for extra safety, do not trust esp after call (in case the Basic Declare
+ ; signature is wrong):
+ mov edi, [ebp-8]
+ mov esi, [ebp-4]
+ mov esp, ebp
+ pop ebp
+ ret 12
+_TEXT ENDS
+END
diff --git a/basic/source/sbx/sbxvar.cxx b/basic/source/sbx/sbxvar.cxx
index 9a83fb7ba578..20060f1f7493 100644
--- a/basic/source/sbx/sbxvar.cxx
+++ b/basic/source/sbx/sbxvar.cxx
@@ -39,6 +39,9 @@
#include <math.h>
#include <ctype.h>
+#include "com/sun/star/uno/XInterface.hpp"
+using namespace com::sun::star::uno;
+
///////////////////////////// SbxVariable //////////////////////////////
TYPEINIT1(SbxVariable,SbxValue)
@@ -49,10 +52,28 @@ extern UINT32 nVarCreator; // in SBXBASE.CXX, fuer LoadData()
static ULONG nVar = 0;
#endif
+///////////////////////////// SbxVariableImpl ////////////////////////////
+
+class SbxVariableImpl
+{
+ friend class SbxVariable;
+ String m_aDeclareClassName;
+ Reference< XInterface > m_xComListener;
+
+ SbxVariableImpl( void )
+ {}
+ SbxVariableImpl( const SbxVariableImpl& r )
+ : m_aDeclareClassName( r.m_aDeclareClassName )
+ , m_xComListener( r.m_xComListener )
+ {}
+};
+
+
///////////////////////////// Konstruktoren //////////////////////////////
SbxVariable::SbxVariable() : SbxValue()
{
+ mpSbxVariableImpl = NULL;
pCst = NULL;
pParent = NULL;
nUserData = 0;
@@ -66,6 +87,9 @@ SbxVariable::SbxVariable() : SbxValue()
SbxVariable::SbxVariable( const SbxVariable& r )
: SvRefBase( r ), SbxValue( r ), mpPar( r.mpPar ), pInfo( r.pInfo )
{
+ mpSbxVariableImpl = NULL;
+ if( r.mpSbxVariableImpl != NULL )
+ mpSbxVariableImpl = new SbxVariableImpl( *r.mpSbxVariableImpl );
pCst = NULL;
if( r.CanRead() )
{
@@ -91,6 +115,7 @@ SbxVariable::SbxVariable( const SbxVariable& r )
SbxVariable::SbxVariable( SbxDataType t, void* p ) : SbxValue( t, p )
{
+ mpSbxVariableImpl = NULL;
pCst = NULL;
pParent = NULL;
nUserData = 0;
@@ -111,6 +136,7 @@ SbxVariable::~SbxVariable()
maName.AssignAscii( aCellsStr, sizeof( aCellsStr )-1 );
GetSbxData_Impl()->aVars.Remove( this );
#endif
+ delete mpSbxVariableImpl;
delete pCst;
}
@@ -287,6 +313,11 @@ USHORT SbxVariable::MakeHashCode( const XubString& rName )
SbxVariable& SbxVariable::operator=( const SbxVariable& r )
{
SbxValue::operator=( r );
+ delete mpSbxVariableImpl;
+ if( r.mpSbxVariableImpl != NULL )
+ mpSbxVariableImpl = new SbxVariableImpl( *r.mpSbxVariableImpl );
+ else
+ mpSbxVariableImpl = NULL;
return *this;
}
@@ -346,6 +377,32 @@ void SbxVariable::SetParent( SbxObject* p )
pParent = p;
}
+SbxVariableImpl* SbxVariable::getImpl( void )
+{
+ if( mpSbxVariableImpl == NULL )
+ mpSbxVariableImpl = new SbxVariableImpl();
+ return mpSbxVariableImpl;
+}
+
+const String& SbxVariable::GetDeclareClassName( void )
+{
+ SbxVariableImpl* pImpl = getImpl();
+ return pImpl->m_aDeclareClassName;
+}
+
+void SbxVariable::SetDeclareClassName( const String& rDeclareClassName )
+{
+ SbxVariableImpl* pImpl = getImpl();
+ pImpl->m_aDeclareClassName = rDeclareClassName;
+}
+
+void SbxVariable::SetComListener( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xComListener )
+{
+ SbxVariableImpl* pImpl = getImpl();
+ pImpl->m_xComListener = xComListener;
+}
+
+
////////////////////////////// Laden/Speichern /////////////////////////////
BOOL SbxVariable::LoadData( SvStream& rStrm, USHORT nVer )
diff --git a/basic/source/uno/dlgcont.cxx b/basic/source/uno/dlgcont.cxx
index 051b4fa9f077..004b61fbf198 100644
--- a/basic/source/uno/dlgcont.cxx
+++ b/basic/source/uno/dlgcont.cxx
@@ -187,12 +187,13 @@ bool writeOasis2OOoLibraryElement(
void SAL_CALL SfxDialogLibraryContainer::writeLibraryElement
(
- Any aElement,
- const OUString& /*aElementName*/,
- Reference< XOutputStream > xOutput
+ const Reference < XNameContainer >& xLib,
+ const OUString& aElementName,
+ const Reference< XOutputStream >& xOutput
)
throw(Exception)
{
+ Any aElement = xLib->getByName( aElementName );
Reference< XInputStreamProvider > xISP;
aElement >>= xISP;
if( !xISP.is() )
@@ -256,7 +257,9 @@ void SfxDialogLibraryContainer::storeLibrariesToStorage( const uno::Reference< e
Any SAL_CALL SfxDialogLibraryContainer::importLibraryElement
- ( const OUString& aFile, const uno::Reference< io::XInputStream >& xElementStream )
+ ( const Reference < XNameContainer >& /*xLib*/,
+ const OUString& /*aElementName */, const OUString& aFile,
+ const uno::Reference< io::XInputStream >& xElementStream )
{
Any aRetAny;
diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx
index 90e7cb4cb4d5..e1ad8b6b4308 100644
--- a/basic/source/uno/namecont.cxx
+++ b/basic/source/uno/namecont.cxx
@@ -65,7 +65,7 @@
#include <com/sun/star/uno/DeploymentException.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
#include <com/sun/star/script/LibraryNotLoadedException.hpp>
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include <comphelper/storagehelper.hxx>
#ifndef _RTL_USTRING_HXX_
#include <comphelper/anytostring.hxx>
@@ -1080,6 +1080,7 @@ sal_Bool SfxLibraryContainer::init_Impl(
OUString aUserSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE" );
OUString aSharedSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE" );
+ OUString aBundledSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$BUNDLED_EXTENSIONS" );
OUString aInstSearchStr = OUString::createFromAscii( "$(INST)" );
Sequence< OUString > aNames = pPrevCont->getElementNames();
@@ -1111,6 +1112,7 @@ sal_Bool SfxLibraryContainer::init_Impl(
bool bCreateLink = true;
if( aStorageURL.indexOf( aUserSearchStr ) != -1 ||
aStorageURL.indexOf( aSharedSearchStr ) != -1 ||
+ aStorageURL.indexOf( aBundledSearchStr ) != -1 ||
aStorageURL.indexOf( aInstSearchStr ) != -1 )
{
bCreateLink = false;
@@ -1369,8 +1371,8 @@ void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib,
OUString aStreamName = aElementName;
aStreamName += String( RTL_CONSTASCII_USTRINGPARAM(".xml") );
- Any aElement = pLib->getByName( aElementName );
- if( !isLibraryElementValid( aElement ) )
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
{
#if OSL_DEBUG_LEVEL > 0
::rtl::OStringBuffer aMessage;
@@ -1406,7 +1408,8 @@ void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib,
xProps->setPropertyValue( aPropName, uno::makeAny( sal_True ) );
Reference< XOutputStream > xOutput = xElementStream->getOutputStream();
- writeLibraryElement( aElement, aElementName, xOutput );
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOutput );
// writeLibraryElement closes the stream
// xOutput->closeOutput();
}
@@ -1458,8 +1461,8 @@ void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib,
aElementInetObj.setExtension( maLibElementFileExtension );
String aElementPath( aElementInetObj.GetMainURL( INetURLObject::NO_DECODE ) );
- Any aElement = pLib->getByName( aElementName );
- if( !isLibraryElementValid( aElement ) )
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
{
#if OSL_DEBUG_LEVEL > 0
::rtl::OStringBuffer aMessage;
@@ -1477,7 +1480,8 @@ void SfxLibraryContainer::implStoreLibrary( SfxLibrary* pLib,
if( xSFI->exists( aElementPath ) )
xSFI->kill( aElementPath );
Reference< XOutputStream > xOutput = xSFI->openFileWrite( aElementPath );
- writeLibraryElement( aElement, aElementName, xOutput );
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOutput );
xOutput->closeOutput();
}
catch( Exception& )
@@ -2167,6 +2171,7 @@ Reference< XNameAccess > SAL_CALL SfxLibraryContainer::createLibraryLink
SfxLibrary* pNewLib = implCreateLibraryLink( Name, aLibInfoFileURL, aLibDirURL, ReadOnly );
pNewLib->maLibElementFileExtension = maLibElementFileExtension;
pNewLib->maUnexpandedStorageURL = aUnexpandedStorageURL;
+ pNewLib->maOrignialStorageURL = StorageURL;
OUString aInitFileName;
uno::Reference< embed::XStorage > xDummyStor;
@@ -2182,11 +2187,12 @@ Reference< XNameAccess > SAL_CALL SfxLibraryContainer::createLibraryLink
OUString aUserSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE" );
OUString aSharedSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE" );
+ OUString aBundledSearchStr = OUString::createFromAscii( "vnd.sun.star.expand:$BUNDLED_EXTENSIONS" );
if( StorageURL.indexOf( aUserSearchStr ) != -1 )
{
pNewLib->mbExtension = sal_True;
}
- else if( StorageURL.indexOf( aSharedSearchStr ) != -1 )
+ else if( StorageURL.indexOf( aSharedSearchStr ) != -1 || StorageURL.indexOf( aBundledSearchStr ) != -1 )
{
pNewLib->mbExtension = sal_True;
pNewLib->mbReadOnly = sal_True;
@@ -2380,7 +2386,9 @@ void SAL_CALL SfxLibraryContainer::loadLibrary( const OUString& Name )
aFile = aElementInetObj.GetMainURL( INetURLObject::NO_DECODE );
}
- Any aAny = importLibraryElement( aFile, xInStream );
+ Reference< XNameContainer > xLib( pImplLib );
+ Any aAny = importLibraryElement( xLib, aElementName,
+ aFile, xInStream );
if( pImplLib->hasByName( aElementName ) )
{
if( aAny.hasValue() )
@@ -2785,6 +2793,21 @@ OUString SfxLibraryContainer::expand_url( const OUString& url )
}
}
+
+//XLibraryContainer3
+OUString SAL_CALL SfxLibraryContainer::getOriginalLibraryLinkURL( const OUString& Name )
+ throw (IllegalArgumentException, NoSuchElementException, RuntimeException)
+{
+ LibraryContainerMethodGuard aGuard( *this );
+ SfxLibrary* pImplLib = getImplLib( Name );
+ sal_Bool bLink = pImplLib->mbLink;
+ if( !bLink )
+ throw IllegalArgumentException();
+ OUString aRetStr = pImplLib->maOrignialStorageURL;
+ return aRetStr;
+}
+
+
::sal_Bool SAL_CALL SfxLibraryContainer::getVBACompatModeOn() throw (RuntimeException)
{
return mbVBACompat;
@@ -3097,8 +3120,10 @@ ScriptExtensionIterator::ScriptExtensionIterator( void )
: m_eState( USER_EXTENSIONS )
, m_bUserPackagesLoaded( false )
, m_bSharedPackagesLoaded( false )
+ , m_bBundledPackagesLoaded( false )
, m_iUserPackage( 0 )
, m_iSharedPackage( 0 )
+ , m_iBundledPackage( 0 )
, m_pScriptSubPackageIterator( NULL )
{
Reference< XMultiServiceFactory > xFactory = comphelper::getProcessServiceFactory();
@@ -3147,6 +3172,16 @@ rtl::OUString ScriptExtensionIterator::nextBasicOrDialogLibrary( bool& rbPureDia
aRetLib = xScriptPackage->getURL();
break;
}
+ case BUNDLED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xScriptPackage =
+ implGetNextBundledScriptPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ break;
+
+ aRetLib = xScriptPackage->getURL();
+ break;
+ }
case END_REACHED:
VOS_ENSURE( false, "ScriptExtensionIterator::nextBasicOrDialogLibrary(): Invalid case END_REACHED" );
break;
@@ -3317,10 +3352,11 @@ Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextUserScript
{
try
{
- Reference< XPackageManager > xUserManager =
- thePackageManagerFactory::get( m_xContext )->getPackageManager( rtl::OUString::createFromAscii("user") );
- m_aUserPackagesSeq = xUserManager->getDeployedPackages
- ( Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ Reference< XExtensionManager > xManager =
+ ExtensionManager::get( m_xContext );
+ m_aUserPackagesSeq = xManager->getDeployedExtensions
+ (rtl::OUString::createFromAscii("user"),
+ Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
}
catch( com::sun::star::uno::DeploymentException& )
{
@@ -3370,10 +3406,11 @@ Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextSharedScri
{
try
{
- Reference< XPackageManager > xSharedManager =
- thePackageManagerFactory::get( m_xContext )->getPackageManager( rtl::OUString::createFromAscii("shared") );
- m_aSharedPackagesSeq = xSharedManager->getDeployedPackages
- ( Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ Reference< XExtensionManager > xSharedManager =
+ ExtensionManager::get( m_xContext );
+ m_aSharedPackagesSeq = xSharedManager->getDeployedExtensions
+ (rtl::OUString::createFromAscii("shared"),
+ Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
}
catch( com::sun::star::uno::DeploymentException& )
{
@@ -3386,7 +3423,7 @@ Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextSharedScri
if( m_iSharedPackage == m_aSharedPackagesSeq.getLength() )
{
- m_eState = END_REACHED;
+ m_eState = BUNDLED_EXTENSIONS;
}
else
{
@@ -3413,4 +3450,57 @@ Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextSharedScri
return xScriptPackage;
}
+Reference< deployment::XPackage > ScriptExtensionIterator::implGetNextBundledScriptPackage
+ ( bool& rbPureDialogLib )
+{
+ Reference< deployment::XPackage > xScriptPackage;
+
+ if( !m_bBundledPackagesLoaded )
+ {
+ try
+ {
+ Reference< XExtensionManager > xManager =
+ ExtensionManager::get( m_xContext );
+ m_aBundledPackagesSeq = xManager->getDeployedExtensions
+ (rtl::OUString::createFromAscii("bundled"),
+ Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ }
+ catch( com::sun::star::uno::DeploymentException& )
+ {
+ // Special Office installations may not contain deployment code
+ return xScriptPackage;
+ }
+
+ m_bBundledPackagesLoaded = true;
+ }
+
+ if( m_iBundledPackage == m_aBundledPackagesSeq.getLength() )
+ {
+ m_eState = END_REACHED;
+ }
+ else
+ {
+ if( m_pScriptSubPackageIterator == NULL )
+ {
+ const Reference< deployment::XPackage >* pBundledPackages = m_aBundledPackagesSeq.getConstArray();
+ Reference< deployment::XPackage > xPackage = pBundledPackages[ m_iBundledPackage ];
+ VOS_ENSURE( xPackage.is(), "ScriptExtensionIterator::implGetNextBundledScriptPackage(): Invalid package" );
+ m_pScriptSubPackageIterator = new ScriptSubPackageIterator( xPackage );
+ }
+
+ if( m_pScriptSubPackageIterator != NULL )
+ {
+ xScriptPackage = m_pScriptSubPackageIterator->getNextScriptSubPackage( rbPureDialogLib );
+ if( !xScriptPackage.is() )
+ {
+ delete m_pScriptSubPackageIterator;
+ m_pScriptSubPackageIterator = NULL;
+ m_iBundledPackage++;
+ }
+ }
+ }
+
+ return xScriptPackage;
+}
+
} // namespace basic
diff --git a/basic/source/uno/scriptcont.cxx b/basic/source/uno/scriptcont.cxx
index 4185b6f9579c..5622adc19af1 100644
--- a/basic/source/uno/scriptcont.cxx
+++ b/basic/source/uno/scriptcont.cxx
@@ -41,6 +41,7 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/embed/XTransactedObject.hpp>
#include <com/sun/star/task/ErrorCodeIOException.hpp>
+#include <com/sun/star/script/ModuleType.hpp>
#include <comphelper/processfactory.hxx>
#ifndef _COMPHELPER_STORAGEHELPER_HXX_
#include <comphelper/storagehelper.hxx>
@@ -60,6 +61,7 @@
#include <svtools/ehdl.hxx>
#include <basic/basmgr.hxx>
#include <basic/sbmod.hxx>
+#include <basic/basicmanagerrepository.hxx>
#include "modsizeexceeded.hxx"
#include <xmlscript/xmlmod_imexp.hxx>
#include <cppuhelper/factory.hxx>
@@ -184,9 +186,9 @@ bool SAL_CALL SfxScriptLibraryContainer::isLibraryElementValid( Any aElement ) c
void SAL_CALL SfxScriptLibraryContainer::writeLibraryElement
(
- Any aElement,
+ const Reference < XNameContainer >& xLib,
const OUString& aElementName,
- Reference< XOutputStream > xOutput
+ const Reference< XOutputStream >& xOutput
)
throw(Exception)
{
@@ -211,13 +213,42 @@ void SAL_CALL SfxScriptLibraryContainer::writeLibraryElement
xmlscript::ModuleDescriptor aMod;
aMod.aName = aElementName;
aMod.aLanguage = maScriptLanguage;
+ Any aElement = xLib->getByName( aElementName );
aElement >>= aMod.aCode;
+
+ Reference < script::XVBAModuleInfo > xModInfo( xLib, UNO_QUERY );
+
+ if( xModInfo.is() && xModInfo->hasModuleInfo( aElementName ) )
+ {
+ script::ModuleInfo aModInfo = xModInfo->getModuleInfo( aElementName );
+ switch( aModInfo.ModuleType )
+ {
+ case ModuleType::NORMAL:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("normal") );
+ break;
+ case ModuleType::CLASS:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("class") );
+ break;
+ case ModuleType::FORM:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("form") );
+ break;
+ case ModuleType::DOCUMENT:
+ aMod.aModuleType = OUString( RTL_CONSTASCII_USTRINGPARAM("document") );
+ break;
+ case ModuleType::UNKNOWN:
+ // nothing
+ break;
+ }
+ }
+
xmlscript::exportScriptModule( xHandler, aMod );
}
Any SAL_CALL SfxScriptLibraryContainer::importLibraryElement
- ( const OUString& aFile, const uno::Reference< io::XInputStream >& xInStream )
+ ( const Reference < XNameContainer >& xLib,
+ const OUString& aElementName, const OUString& aFile,
+ const uno::Reference< io::XInputStream >& xInStream )
{
Any aRetAny;
@@ -279,6 +310,86 @@ Any SAL_CALL SfxScriptLibraryContainer::importLibraryElement
// TODO: Check language
// aMod.aLanguage
// aMod.aName ignored
+ if( aMod.aModuleType.getLength() > 0 )
+ {
+ if( !getVBACompatModeOn() )
+ {
+ setVBACompatModeOn( sal_True );
+
+ Any aGlobs;
+ Sequence< Any > aArgs(1);
+ Reference<frame::XModel > xModel( mxOwnerDocument );
+ aArgs[ 0 ] <<= xModel;
+
+ BasicManager* pBasicMgr = getBasicManager();
+ if( pBasicMgr )
+ {
+ aGlobs <<= ::comphelper::getProcessServiceFactory()->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.excel.Globals" ) ), aArgs );
+ pBasicMgr->SetGlobalUNOConstant( "VBAGlobals", aGlobs );
+ }
+ pBasicMgr = BasicManagerRepository::getApplicationBasicManager( sal_False );
+ if( pBasicMgr )
+ pBasicMgr->SetGlobalUNOConstant( "ThisExcelDoc", aArgs[0] );
+ }
+
+ script::ModuleInfo aModInfo;
+ aModInfo.ModuleType = ModuleType::UNKNOWN;
+ if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("normal") ))
+ {
+ aModInfo.ModuleType = ModuleType::NORMAL;
+ }
+ else if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("class") ))
+ {
+ aModInfo.ModuleType = ModuleType::CLASS;
+ }
+ else if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("form") ))
+ {
+ aModInfo.ModuleType = ModuleType::FORM;
+ aModInfo.ModuleObject = mxOwnerDocument;
+ }
+ else if( aMod.aModuleType.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("document") ))
+ {
+ aModInfo.ModuleType = ModuleType::DOCUMENT;
+ Reference<frame::XModel > xModel( mxOwnerDocument );
+ Reference< XMultiServiceFactory> xSF( xModel, UNO_QUERY);
+ Reference< container::XNameAccess > xVBACodeNameAccess;
+ if( xSF.is() )
+ {
+ try
+ {
+ xVBACodeNameAccess.set( xSF->createInstance(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
+ "ooo.vba.VBAObjectModuleObjectProvider"))),
+ UNO_QUERY );
+ }
+ catch(uno::Exception&) {}
+ }
+ if( xVBACodeNameAccess.is() )
+ {
+ try
+ {
+ aModInfo.ModuleObject.set( xVBACodeNameAccess->getByName( aElementName), uno::UNO_QUERY );
+ }
+ catch(uno::Exception&)
+ {
+ OSL_TRACE("Failed to get documument object for %s", rtl::OUStringToOString( aElementName, RTL_TEXTENCODING_UTF8 ).getStr() );
+ }
+ }
+ }
+
+ Reference< script::XVBAModuleInfo > xVBAModuleInfo( xLib,
+ UNO_QUERY );
+ if( xVBAModuleInfo.is() )
+ {
+ if( xVBAModuleInfo->hasModuleInfo( aElementName ) )
+ xVBAModuleInfo->removeModuleInfo( aElementName );
+ xVBAModuleInfo->insertModuleInfo( aElementName, aModInfo );
+ }
+ }
return aRetAny;
}
@@ -574,8 +685,8 @@ sal_Bool SfxScriptLibraryContainer::implStorePasswordLibrary( SfxLibrary* pLib,
if( pLib->mbPasswordVerified || pLib->mbDoc50Password )
{
- Any aElement = pLib->getByName( aElementName );
- if( !isLibraryElementValid( aElement ) )
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
{
#if OSL_DEBUG_LEVEL > 0
::rtl::OStringBuffer aMessage;
@@ -606,7 +717,8 @@ sal_Bool SfxScriptLibraryContainer::implStorePasswordLibrary( SfxLibrary* pLib,
setStreamKey( xSourceStream, pLib->maPassword );
Reference< XOutputStream > xOutput = xSourceStream->getOutputStream();
- writeLibraryElement( aElement, aElementName, xOutput );
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOutput );
// writeLibraryElement should have the stream already closed
// xOutput->closeOutput();
}
@@ -659,8 +771,8 @@ sal_Bool SfxScriptLibraryContainer::implStorePasswordLibrary( SfxLibrary* pLib,
aElementInetObj.setExtension( OUString( RTL_CONSTASCII_USTRINGPARAM("pba") ) );
String aElementPath = aElementInetObj.GetMainURL( INetURLObject::NO_DECODE );
- Any aElement = pLib->getByName( aElementName );
- if( !isLibraryElementValid( aElement ) )
+ /*Any aElement = pLib->getByName( aElementName );*/
+ if( !isLibraryElementValid( pLib->getByName( aElementName ) ) )
{
#if OSL_DEBUG_LEVEL > 0
::rtl::OStringBuffer aMessage;
@@ -741,7 +853,8 @@ sal_Bool SfxScriptLibraryContainer::implStorePasswordLibrary( SfxLibrary* pLib,
xProps->setPropertyValue( aPropName, uno::makeAny( aMime ) );
Reference< XOutputStream > xOut = xSourceStream->getOutputStream();
- writeLibraryElement( aElement, aElementName, xOut );
+ Reference< XNameContainer > xLib( pLib );
+ writeLibraryElement( xLib, aElementName, xOut );
// i50568: sax writer already closes stream
// xOut->closeOutput();
@@ -903,7 +1016,10 @@ sal_Bool SfxScriptLibraryContainer::implLoadPasswordLibrary
if ( !xInStream.is() )
throw io::IOException(); // read access denied, seems to be impossible
- Any aAny = importLibraryElement( aSourceStreamName, xInStream );
+ Reference< XNameContainer > xLib( pLib );
+ Any aAny = importLibraryElement( xLib,
+ aElementName, aSourceStreamName,
+ xInStream );
if( pLib->hasByName( aElementName ) )
{
if( aAny.hasValue() )
@@ -1006,7 +1122,11 @@ sal_Bool SfxScriptLibraryContainer::implLoadPasswordLibrary
if ( !xInStream.is() )
throw io::IOException(); // read access denied, seems to be impossible
- Any aAny = importLibraryElement( aSourceStreamName, xInStream );
+ Reference< XNameContainer > xLib( pLib );
+ Any aAny = importLibraryElement( xLib,
+ aElementName,
+ aSourceStreamName,
+ xInStream );
if( pLib->hasByName( aElementName ) )
{
if( aAny.hasValue() )
diff --git a/basic/util/makefile.mk b/basic/util/makefile.mk
index 645c9b6a3ce8..629586f0441c 100644
--- a/basic/util/makefile.mk
+++ b/basic/util/makefile.mk
@@ -59,6 +59,7 @@ SHL1STDLIBS= \
$(VCLLIB) \
$(VOSLIB) \
$(SALLIB) \
+ $(SALHELPERLIB) \
$(COMPHELPERLIB) \
$(UNOTOOLSLIB) \
$(SOTLIB) \
diff --git a/berkeleydb/makefile.mk b/berkeleydb/makefile.mk
index 963c61a3bbde..325e8700e7a8 100644
--- a/berkeleydb/makefile.mk
+++ b/berkeleydb/makefile.mk
@@ -120,9 +120,9 @@ OUT2INC= \
CONFIGURE_DIR=out
#relative to CONFIGURE_DIR
# TODO needs clean up
-CFLAGS+=-nostdinc -D_MT
-db_CC=$(CC)
-db_CXX=$(CXX)
+CFLAGS+=-nostdinc
+db_CC=$(CC) -mthreads
+db_CXX=$(CXX) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
db_CC+=-shared-libgcc
db_CXX+=-shared-libgcc
@@ -132,7 +132,7 @@ db_LDFLAGS=-no-undefined -L$(SOLARVER)/$(INPATH)/lib -L$(SOLARVER)/$(INPATH)/bin
db_LDFLAGS+=-L$(COMPATH)/lib/mingw -L$(COMPATH)/lib/w32api
.ENDIF
db_LDFLAGS+=-L$(COMPATH)/lib -L$(MINGW_CLIB_DIR)
-db_LIBS=-lmingwthrd
+db_LIBS=
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
CFLAGS+=-D_GLIBCXX_DLL
db_LIBS+=-lstdc++_s
diff --git a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
index 0e1df437b0e1..c80e20feb18a 100644
--- a/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_powerpc64/cpp2uno.cxx
@@ -552,7 +552,7 @@ extern "C" void privateSnippetExecutor( ... )
"mr %0, 1\n\t"
: "=r" (sp) : );
- volatile long nRegReturn[0];
+ volatile long nRegReturn[1];
typelib_TypeClass aType =
cpp_mediate( nOffsetAndIndex, (void**)gpreg, (void**)fpreg, sp, (sal_Int64*)nRegReturn);
diff --git a/cairo/cairo/makefile.mk b/cairo/cairo/makefile.mk
index e0b12cc9f551..a29012892576 100644
--- a/cairo/cairo/makefile.mk
+++ b/cairo/cairo/makefile.mk
@@ -70,11 +70,9 @@ cairo_CPPFLAGS+=$(INCLUDE)
.IF "$(OS)"=="WNT"
# --------- Windows -------------------------------------------------
.IF "$(COM)"=="GCC"
-cairo_CFLAGS+=-D_MT
cairo_LDFLAGS+=-no-undefined -L$(ILIB:s/;/ -L/)
cairo_CPPFLAGS+=-nostdinc
-cairo_CC=$(CC)
-cairo_LIBS+=-lmingwthrd
+cairo_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
cairo_CC+=-shared-libgcc
diff --git a/cairo/pixman/makefile.mk b/cairo/pixman/makefile.mk
index 20773c7597f8..f3c1c091639c 100644
--- a/cairo/pixman/makefile.mk
+++ b/cairo/pixman/makefile.mk
@@ -62,7 +62,7 @@ PATCH_FILES=..$/$(TARFILE_NAME).patch
.IF "$(COM)"=="GCC"
CONFIGURE_DIR=
CONFIGURE_ACTION=.$/configure
-CONFIGURE_FLAGS=--enable-static=yes --enable-shared=no --build=i586-pc-mingw32 --host=i586-pc-mingw32 CFLAGS="$(pixman_CFLAGS) -D_MT" LDFLAGS="$(pixman_LDFLAGS) -no-undefined -L$(ILIB:s/;/ -L/)" LIBS="-lmingwthrd" OBJDUMP="$(WRAPCMD) objdump"
+CONFIGURE_FLAGS=--enable-static=yes --enable-shared=no --build=i586-pc-mingw32 --host=i586-pc-mingw32 CFLAGS="$(pixman_CFLAGS) -mthreads" LDFLAGS="$(pixman_LDFLAGS) -no-undefined -L$(ILIB:s/;/ -L/)" OBJDUMP="$(WRAPCMD) objdump"
BUILD_ACTION=$(GNUMAKE)
BUILD_FLAGS+= -j$(EXTMAXPROCESS)
BUILD_DIR=$(CONFIGURE_DIR)
diff --git a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
index f93a0190116d..edf8ad2b6209 100644
--- a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
@@ -160,7 +160,9 @@ enum
PROP_DOCUMENT_BASEDIAGRAM,
PROP_DOCUMENT_ADDITIONAL_SHAPES,
PROP_DOCUMENT_UPDATE_ADDIN,
- PROP_DOCUMENT_NULL_DATE
+ PROP_DOCUMENT_NULL_DATE,
+ PROP_DOCUMENT_DISABLE_COMPLEX_CHARTTYPES,
+ PROP_DOCUMENT_DISABLE_DATATABLE_DIALOG
};
void lcl_AddPropertiesToVector(
@@ -232,6 +234,19 @@ void lcl_AddPropertiesToVector(
PROP_DOCUMENT_NULL_DATE,
::getCppuType( static_cast< const ::com::sun::star::util::DateTime * >(0)),
beans::PropertyAttribute::MAYBEVOID ));
+
+ rOutProperties.push_back(
+ Property( C2U( "DisableComplexChartTypes" ),
+ PROP_DOCUMENT_DISABLE_COMPLEX_CHARTTYPES,
+ ::getBooleanCppuType(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ) );
+ rOutProperties.push_back(
+ Property( C2U( "DisableDataTableDialog" ),
+ PROP_DOCUMENT_DISABLE_DATATABLE_DIALOG,
+ ::getBooleanCppuType(),
+ beans::PropertyAttribute::BOUND
+ | beans::PropertyAttribute::MAYBEDEFAULT ) );
}
const uno::Sequence< Property > & lcl_GetPropertySequence()
@@ -1583,6 +1598,8 @@ const std::vector< WrappedProperty* > ChartDocumentWrapper::createWrappedPropert
aWrappedProperties.push_back( new WrappedAdditionalShapesProperty( *this ) );
aWrappedProperties.push_back( new WrappedRefreshAddInAllowedProperty( *this ) );
aWrappedProperties.push_back( new WrappedIgnoreProperty( C2U("NullDate"),Any() ) ); // i99104
+ aWrappedProperties.push_back( new WrappedIgnoreProperty( C2U( "DisableComplexChartTypes" ), uno::makeAny( sal_False ) ) );
+ aWrappedProperties.push_back( new WrappedIgnoreProperty( C2U( "DisableDataTableDialog" ), uno::makeAny( sal_False ) ) );
return aWrappedProperties;
}
diff --git a/chart2/source/controller/dialogs/res_ErrorBar.cxx b/chart2/source/controller/dialogs/res_ErrorBar.cxx
index 75457a5e7cad..8b649072538e 100644
--- a/chart2/source/controller/dialogs/res_ErrorBar.cxx
+++ b/chart2/source/controller/dialogs/res_ErrorBar.cxx
@@ -37,6 +37,7 @@
#include "RangeSelectionHelper.hxx"
// for RANGE_SELECTION_INVALID_RANGE_BACKGROUND_COLOR
#include "TabPageNotifiable.hxx"
+#include "macros.hxx"
#include <rtl/math.hxx>
#include <vcl/dialog.hxx>
@@ -147,7 +148,8 @@ ErrorBarResources::ErrorBarResources( Window* pParent, Dialog * pParentDialog,
m_pParentWindow( pParent ),
m_pParentDialog( pParentDialog ),
m_pCurrentRangeChoosingField( 0 ),
- m_bHasInternalDataProvider( true )
+ m_bHasInternalDataProvider( true ),
+ m_bDisableDataTableDialog( false )
{
if( m_bNoneAvailable )
m_aRbNone.SetClickHdl( LINK( this, ErrorBarResources, CategoryChosen ));
@@ -197,7 +199,21 @@ void ErrorBarResources::SetChartDocumentForRangeChoosing(
const uno::Reference< chart2::XChartDocument > & xChartDocument )
{
if( xChartDocument.is())
+ {
m_bHasInternalDataProvider = xChartDocument->hasInternalDataProvider();
+ uno::Reference< beans::XPropertySet > xProps( xChartDocument, uno::UNO_QUERY );
+ if ( xProps.is() )
+ {
+ try
+ {
+ xProps->getPropertyValue( C2U( "DisableDataTableDialog" ) ) >>= m_bDisableDataTableDialog;
+ }
+ catch( uno::Exception& e )
+ {
+ ASSERT_EXCEPTION( e );
+ }
+ }
+ }
m_apRangeSelectionHelper.reset( new RangeSelectionHelper( xChartDocument ));
// has internal data provider => rename "cell range" to "from data"
@@ -240,6 +256,7 @@ void ErrorBarResources::UpdateControlStates()
m_aLbFunction.Enable( bIsFunction );
// range buttons
+ m_aRbRange.Enable( !m_bHasInternalDataProvider || !m_bDisableDataTableDialog );
bool bShowRange = ( m_aRbRange.IsChecked());
bool bCanChooseRange =
( bShowRange &&
diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx b/chart2/source/controller/dialogs/tp_ChartType.cxx
index 1696fcdc17c2..ec6c1d2a1c10 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -853,15 +853,35 @@ ChartTypeTabPage::ChartTypeTabPage( Window* pParent
bool bIsHighContrast = ( true && GetSettings().GetStyleSettings().GetHighContrastMode() );
+ bool bDisableComplexChartTypes = false;
+ uno::Reference< beans::XPropertySet > xProps( m_xChartModel, uno::UNO_QUERY );
+ if ( xProps.is() )
+ {
+ try
+ {
+ xProps->getPropertyValue( C2U( "DisableComplexChartTypes" ) ) >>= bDisableComplexChartTypes;
+ }
+ catch( uno::Exception& e )
+ {
+ ASSERT_EXCEPTION( e );
+ }
+ }
+
m_aChartTypeDialogControllerList.push_back(new ColumnChartDialogController() );
m_aChartTypeDialogControllerList.push_back(new BarChartDialogController() );
m_aChartTypeDialogControllerList.push_back(new PieChartDialogController() );
m_aChartTypeDialogControllerList.push_back(new AreaChartDialogController() );
m_aChartTypeDialogControllerList.push_back(new LineChartDialogController() );
- m_aChartTypeDialogControllerList.push_back(new XYChartDialogController() );
- m_aChartTypeDialogControllerList.push_back(new BubbleChartDialogController() );
+ if ( !bDisableComplexChartTypes )
+ {
+ m_aChartTypeDialogControllerList.push_back(new XYChartDialogController() );
+ m_aChartTypeDialogControllerList.push_back(new BubbleChartDialogController() );
+ }
m_aChartTypeDialogControllerList.push_back(new NetChartDialogController() );
- m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
+ if ( !bDisableComplexChartTypes )
+ {
+ m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
+ }
m_aChartTypeDialogControllerList.push_back(new CombiColumnLineChartDialogController() );
::std::vector< ChartTypeDialogController* >::const_iterator aIter = m_aChartTypeDialogControllerList.begin();
diff --git a/chart2/source/controller/inc/res_ErrorBar.hxx b/chart2/source/controller/inc/res_ErrorBar.hxx
index 36bceaffce9f..0b5f33b5c128 100644
--- a/chart2/source/controller/inc/res_ErrorBar.hxx
+++ b/chart2/source/controller/inc/res_ErrorBar.hxx
@@ -135,6 +135,7 @@ private:
m_apRangeSelectionHelper;
Edit * m_pCurrentRangeChoosingField;
bool m_bHasInternalDataProvider;
+ bool m_bDisableDataTableDialog;
DECL_LINK( CategoryChosen, void * );
DECL_LINK( SynchronizePosAndNeg, void * );
diff --git a/chart2/source/controller/main/ControllerCommandDispatch.cxx b/chart2/source/controller/main/ControllerCommandDispatch.cxx
index 2652aadfdb32..a01b80bfa22b 100644
--- a/chart2/source/controller/main/ControllerCommandDispatch.cxx
+++ b/chart2/source/controller/main/ControllerCommandDispatch.cxx
@@ -528,6 +528,23 @@ void ControllerCommandDispatch::updateCommandAvailability()
bool bShapeContext = ( m_pChartController ? m_pChartController->isShapeContext() : false );
+ bool bDisableDataTableDialog = false;
+ if ( m_xController.is() )
+ {
+ Reference< beans::XPropertySet > xProps( m_xController->getModel(), uno::UNO_QUERY );
+ if ( xProps.is() )
+ {
+ try
+ {
+ xProps->getPropertyValue( C2U( "DisableDataTableDialog" ) ) >>= bDisableDataTableDialog;
+ }
+ catch( uno::Exception& e )
+ {
+ ASSERT_EXCEPTION( e );
+ }
+ }
+ }
+
// edit commands
m_aCommandAvailability[ C2U(".uno:Cut")] = bIsWritable && bControllerStateIsValid && m_apControllerState->bIsDeleteableObjectSelected;
m_aCommandAvailability[ C2U(".uno:Copy")] = bControllerStateIsValid && m_apControllerState->bHasSelectedObject;
@@ -595,7 +612,7 @@ void ControllerCommandDispatch::updateCommandAvailability()
// depending on own data
m_aCommandAvailability[ C2U(".uno:DataRanges")] = bIsWritable && bModelStateIsValid && (! m_apModelState->bHasOwnData);
- m_aCommandAvailability[ C2U(".uno:DiagramData")] = bIsWritable && bModelStateIsValid && m_apModelState->bHasOwnData;
+ m_aCommandAvailability[ C2U(".uno:DiagramData")] = bIsWritable && bModelStateIsValid && m_apModelState->bHasOwnData && !bDisableDataTableDialog;
// titles
m_aCommandAvailability[ C2U(".uno:MainTitle")] = bIsWritable && bModelStateIsValid && m_apModelState->bHasMainTitle;
@@ -631,9 +648,9 @@ void ControllerCommandDispatch::updateCommandAvailability()
// series arrangement
m_aCommandAvailability[ C2U(".uno:Forward")] = ( bShapeContext ? isShapeControllerCommandAvailable( C2U( ".uno:Forward" ) ) :
- ( bIsWritable && bControllerStateIsValid && m_apControllerState->bMayMoveSeriesForward ) );
+ ( bIsWritable && bControllerStateIsValid && m_apControllerState->bMayMoveSeriesForward && !bDisableDataTableDialog ) );
m_aCommandAvailability[ C2U(".uno:Backward")] = ( bShapeContext ? isShapeControllerCommandAvailable( C2U( ".uno:Backward" ) ) :
- ( bIsWritable && bControllerStateIsValid && m_apControllerState->bMayMoveSeriesBackward ) );
+ ( bIsWritable && bControllerStateIsValid && m_apControllerState->bMayMoveSeriesBackward && !bDisableDataTableDialog ) );
m_aCommandAvailability[ C2U(".uno:InsertDataLabels")] = bIsWritable;
m_aCommandAvailability[ C2U(".uno:InsertDataLabel")] = bIsWritable;
diff --git a/chart2/source/tools/WrappedPropertySet.cxx b/chart2/source/tools/WrappedPropertySet.cxx
index 116ce6f417f9..843aeb261a5f 100644
--- a/chart2/source/tools/WrappedPropertySet.cxx
+++ b/chart2/source/tools/WrappedPropertySet.cxx
@@ -34,6 +34,8 @@
// header for define DELETEZ
#include <tools/solar.h>
+#include <tools/debug.hxx>
+
//.............................................................................
namespace chart
{
@@ -115,7 +117,11 @@ void SAL_CALL WrappedPropertySet::setPropertyValue( const OUString& rPropertyNam
else if( xInnerPropertySet.is() )
xInnerPropertySet->setPropertyValue( rPropertyName, rValue );
else
- throw beans::UnknownPropertyException();
+ {
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ERROR("found no inner property set to map to");
+#endif
+ }
}
catch( beans::UnknownPropertyException& ex )
{
@@ -160,7 +166,11 @@ Any SAL_CALL WrappedPropertySet::getPropertyValue( const OUString& rPropertyName
else if( xInnerPropertySet.is() )
aRet = xInnerPropertySet->getPropertyValue( rPropertyName );
else
- throw beans::UnknownPropertyException();
+ {
+#if OSL_DEBUG_LEVEL > 1
+ DBG_ERROR("found no inner property set to map to");
+#endif
+ }
}
catch( beans::UnknownPropertyException& ex )
{
diff --git a/comphelper/inc/comphelper/docpasswordhelper.hxx b/comphelper/inc/comphelper/docpasswordhelper.hxx
index 0a60c4b53ce9..dbbb68372a07 100644
--- a/comphelper/inc/comphelper/docpasswordhelper.hxx
+++ b/comphelper/inc/comphelper/docpasswordhelper.hxx
@@ -33,6 +33,7 @@
#include "comphelper/docpasswordrequest.hxx"
namespace com { namespace sun { namespace star { namespace task { class XInteractionHandler; } } } }
+namespace com { namespace sun { namespace star { namespace beans { struct PropertyValue; } } } }
namespace comphelper {
@@ -84,6 +85,116 @@ class COMPHELPER_DLLPUBLIC DocPasswordHelper
public:
// ------------------------------------------------------------------------
+ /** This helper function generates the information related
+ to "Password to modify" provided by user. The result
+ sequence contains the hash and the algorithm-related
+ info.
+
+ @param aString
+ The string for which the info should be generated
+
+ @return
+ The sequence containing the hash and the algorithm-related info
+ */
+
+ static ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >
+ GenerateNewModifyPasswordInfo( const ::rtl::OUString& aPassword );
+
+ // ------------------------------------------------------------------------
+
+ /** This helper function allows to check whether
+ the "Password to modify" provided by user is the correct one.
+
+ @param aString
+ The string containing the provided password
+
+ @param aInfo
+ The sequence containing the hash and the algorithm-info
+
+ @return
+ <TRUE/> if the password is correct one
+ <FALSE/> otherwise
+ */
+
+ static sal_Bool IsModifyPasswordCorrect(
+ const ::rtl::OUString& aPassword,
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aInfo );
+
+
+ // ------------------------------------------------------------------------
+
+ /** This helper function generates the hash code based on the algorithm
+ specified by MS for "Password to modify" feature of Word.
+
+ @param aString
+ The string for which the hash should be calculated
+
+ @return
+ The hash represented by sal_uInt32
+ */
+
+ static sal_uInt32 GetWordHashAsUINT32(
+ const ::rtl::OUString& aString );
+
+ // ------------------------------------------------------------------------
+
+ /** This helper function generates the hash code based on the algorithm
+ specified by MS for "Password to modify" feature of Word.
+
+ @param aString
+ The string for which the hash should be calculated
+
+ @return
+ The hash represented by sequence of bytes in BigEndian form
+ */
+
+ static ::com::sun::star::uno::Sequence< sal_Int8 > GetWordHashAsSequence(
+ const ::rtl::OUString& aString );
+
+ // ------------------------------------------------------------------------
+
+ /** This helper function generates the hash code based on the algorithm
+ specified by MS for "Password to modify" and passwords related to
+ table protection of Excel.
+
+ @param aString
+ The string for which the hash should be calculated
+
+ @param nEnc
+ The encoding that should be used to generate the 8-bit string
+ before the hash is generated
+
+ @return
+ The hash represented by sal_uInt16
+ */
+
+ static sal_uInt16 GetXLHashAsUINT16(
+ const ::rtl::OUString& aString,
+ rtl_TextEncoding nEnc = RTL_TEXTENCODING_UTF8 );
+
+ // ------------------------------------------------------------------------
+
+ /** This helper function generates the hash code based on the algorithm
+ specified by MS for "Password to modify" and passwords related to
+ table protection.
+
+ @param aString
+ The string for which the hash should be calculated
+
+ @param nEnc
+ The encoding that should be used to generate the 8-bit string
+ before the hash is generated
+
+ @return
+ The hash represented by sequence of bytes in BigEndian form
+ */
+
+ static ::com::sun::star::uno::Sequence< sal_Int8 > GetXLHashAsSequence(
+ const ::rtl::OUString& aString,
+ rtl_TextEncoding nEnc = RTL_TEXTENCODING_UTF8 );
+
+ // ------------------------------------------------------------------------
+
/** This helper function tries to request and verify a password to load a
protected document.
diff --git a/comphelper/inc/comphelper/docpasswordrequest.hxx b/comphelper/inc/comphelper/docpasswordrequest.hxx
index 7b186b3a261a..cf04d22c7a6d 100644..100755
--- a/comphelper/inc/comphelper/docpasswordrequest.hxx
+++ b/comphelper/inc/comphelper/docpasswordrequest.hxx
@@ -32,6 +32,7 @@
#include <com/sun/star/task/PasswordRequestMode.hpp>
#include <com/sun/star/task/XInteractionRequest.hpp>
#include <cppuhelper/implbase1.hxx>
+#include <cppuhelper/weak.hxx>
namespace comphelper {
@@ -52,19 +53,31 @@ class PasswordContinuation;
/** Implements the task.XInteractionRequest interface for requesting a password
string for a document.
*/
-class COMPHELPER_DLLPUBLIC DocPasswordRequest : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
+class COMPHELPER_DLLPUBLIC DocPasswordRequest :
+ public ::com::sun::star::task::XInteractionRequest,
+ public ::cppu::OWeakObject
{
public:
explicit DocPasswordRequest(
DocPasswordRequestType eType,
::com::sun::star::task::PasswordRequestMode eMode,
- const ::rtl::OUString& rDocumentName );
+ const ::rtl::OUString& rDocumentName,
+ sal_Bool bPasswordToModify = sal_False );
virtual ~DocPasswordRequest();
- bool isAbort() const;
- bool isPassword() const;
+ // XInterface / OWeakObject
+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL acquire( ) throw ();
+ virtual void SAL_CALL release( ) throw ();
+
+ sal_Bool isAbort() const;
+ sal_Bool isPassword() const;
+
::rtl::OUString getPassword() const;
+ ::rtl::OUString getPasswordToModify() const;
+ sal_Bool getRecommendReadOnly() const;
+
private:
virtual ::com::sun::star::uno::Any SAL_CALL
getRequest() throw( ::com::sun::star::uno::RuntimeException );
@@ -78,6 +91,8 @@ private:
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > maContinuations;
AbortContinuation* mpAbort;
PasswordContinuation* mpPassword;
+
+ sal_Bool mbPasswordToModify;
};
// ============================================================================
diff --git a/comphelper/inc/comphelper/mediadescriptor.hxx b/comphelper/inc/comphelper/mediadescriptor.hxx
index e20440a3d30d..7d2333045390 100644
--- a/comphelper/inc/comphelper/mediadescriptor.hxx
+++ b/comphelper/inc/comphelper/mediadescriptor.hxx
@@ -127,6 +127,9 @@ class COMPHELPER_DLLPUBLIC MediaDescriptor : public SequenceAsHashMap
//-------------------------------------------
// interface
public:
+ /** Value type of the 'ComponentData' property.
+ */
+ typedef ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > ComponentDataSequence;
//---------------------------------------
/** @short these ctors do nothing - excepting that they forward
@@ -197,6 +200,54 @@ class COMPHELPER_DLLPUBLIC MediaDescriptor : public SequenceAsHashMap
*/
sal_Bool isStreamReadOnly() const;
+ //---------------------------------------
+ /** Returns a value from the sequence contained in the property
+ 'ComponentData' of this media descriptor.
+
+ @descr The property 'ComponentData' should be empty or should
+ contain a value of type ComponentDataSequence (see above).
+
+ @return The value with the specified name, if existing in the
+ sequence of the 'ComponentData' property, otherwise an empty
+ Any.
+ */
+ ::com::sun::star::uno::Any getComponentDataEntry(
+ const ::rtl::OUString& rName ) const;
+
+ //---------------------------------------
+ /** Inserts a value into the sequence contained in the property
+ 'ComponentData' of the media descriptor.
+
+ @descr The property 'ComponentData' should be empty or should
+ contain a value of type ComponentDataSequence (see above). The
+ passed value will be inserted into the sequence, or, if already
+ existing, will be overwritten.
+
+ @param rName The name of the value to be inserted into the
+ sequence of the 'ComponentData' property.
+
+ @param rValue The value to be inserted into the sequence of the
+ 'ComponentData' property.
+ */
+ void setComponentDataEntry(
+ const ::rtl::OUString& rName,
+ const ::com::sun::star::uno::Any& rValue );
+
+ //---------------------------------------
+ /** Removes a value from the sequence contained in the property
+ 'ComponentData' of the media descriptor.
+
+ @descr The property 'ComponentData' should be empty or should
+ contain a value of type ComponentDataSequence (see above). The
+ value with the passed name will be removed from the sequence,
+ if existing.
+
+ @param rName The name of the value to be removed from the sequence
+ of the 'ComponentData' property.
+ */
+ void clearComponentDataEntry(
+ const ::rtl::OUString& rName );
+
//-------------------------------------------
// helper
private:
diff --git a/comphelper/source/misc/comphelper_services.cxx b/comphelper/source/misc/comphelper_services.cxx
index a2d4dd8fc0de..b46dcea68ba7 100644
--- a/comphelper/source/misc/comphelper_services.cxx
+++ b/comphelper/source/misc/comphelper_services.cxx
@@ -41,6 +41,7 @@ extern void createRegistryInfo_OfficeInstallationDirectories();
extern void createRegistryInfo_OInstanceLocker();
extern void createRegistryInfo_Map();
extern void createRegistryInfo_OSimpleLogRing();
+extern void createRegistryInfo_OOfficeRestartManager();
//........................................................................
namespace comphelper { namespace module
@@ -66,6 +67,7 @@ namespace comphelper { namespace module
createRegistryInfo_OInstanceLocker();
createRegistryInfo_Map();
createRegistryInfo_OSimpleLogRing();
+ createRegistryInfo_OOfficeRestartManager();
}
}
}
diff --git a/comphelper/source/misc/docpasswordhelper.cxx b/comphelper/source/misc/docpasswordhelper.cxx
index ea25cb795a53..37941352ae28 100644
--- a/comphelper/source/misc/docpasswordhelper.cxx
+++ b/comphelper/source/misc/docpasswordhelper.cxx
@@ -1,4 +1,4 @@
-/*************************************************************************
+/***********************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -32,7 +32,12 @@
#include <com/sun/star/task/XInteractionHandler.hpp>
#include "comphelper/mediadescriptor.hxx"
+#include <osl/time.h>
+#include <rtl/digest.h>
+#include <rtl/random.h>
+
using ::rtl::OUString;
+using ::com::sun::star::uno::Sequence;
using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::UNO_SET_THROW;
@@ -42,15 +47,241 @@ using ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER;
using ::com::sun::star::task::XInteractionHandler;
using ::com::sun::star::task::XInteractionRequest;
+using namespace ::com::sun::star;
+
namespace comphelper {
// ============================================================================
+static uno::Sequence< sal_Int8 > GeneratePBKDF2Hash( const ::rtl::OUString& aPassword, const uno::Sequence< sal_Int8 >& aSalt, sal_Int32 nCount, sal_Int32 nHashLength )
+{
+ uno::Sequence< sal_Int8 > aResult;
+
+ if ( aPassword.getLength() && aSalt.getLength() && nCount && nHashLength )
+ {
+ ::rtl::OString aBytePass = ::rtl::OUStringToOString( aPassword, RTL_TEXTENCODING_UTF8 );
+ aResult.realloc( 16 );
+ rtl_digest_PBKDF2( reinterpret_cast < sal_uInt8 * > ( aResult.getArray() ),
+ aResult.getLength(),
+ reinterpret_cast < const sal_uInt8 * > ( aBytePass.getStr() ),
+ aBytePass.getLength(),
+ reinterpret_cast < const sal_uInt8 * > ( aSalt.getConstArray() ),
+ aSalt.getLength(),
+ nCount );
+ }
+
+ return aResult;
+}
+
+// ============================================================================
+
IDocPasswordVerifier::~IDocPasswordVerifier()
{
}
// ============================================================================
+uno::Sequence< beans::PropertyValue > DocPasswordHelper::GenerateNewModifyPasswordInfo( const ::rtl::OUString& aPassword )
+{
+ uno::Sequence< beans::PropertyValue > aResult;
+
+ uno::Sequence< sal_Int8 > aSalt( 16 );
+ sal_Int32 nCount = 1024;
+
+ TimeValue aTime;
+ osl_getSystemTime( &aTime );
+ rtlRandomPool aRandomPool = rtl_random_createPool ();
+ rtl_random_addBytes ( aRandomPool, &aTime, 8 );
+
+ rtl_random_getBytes ( aRandomPool, aSalt.getArray(), 16 );
+
+ uno::Sequence< sal_Int8 > aNewHash = GeneratePBKDF2Hash( aPassword, aSalt, nCount, 16 );
+ if ( aNewHash.getLength() )
+ {
+ aResult.realloc( 4 );
+ aResult[0].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "algorithm-name" ) );
+ aResult[0].Value <<= ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PBKDF2" ) );
+ aResult[1].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "salt" ) );
+ aResult[1].Value <<= aSalt;
+ aResult[2].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "iteration-count" ) );
+ aResult[2].Value <<= nCount;
+ aResult[3].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "hash" ) );
+ aResult[3].Value <<= aNewHash;
+ }
+
+ // Clean up random pool memory
+ rtl_random_destroyPool ( aRandomPool );
+
+ return aResult;
+}
+
+// ============================================================================
+sal_Bool DocPasswordHelper::IsModifyPasswordCorrect( const ::rtl::OUString& aPassword, const uno::Sequence< beans::PropertyValue >& aInfo )
+{
+ sal_Bool bResult = sal_False;
+ if ( aPassword.getLength() && aInfo.getLength() )
+ {
+ ::rtl::OUString sAlgorithm;
+ uno::Sequence< sal_Int8 > aSalt;
+ uno::Sequence< sal_Int8 > aHash;
+ sal_Int32 nCount = 0;
+
+ for ( sal_Int32 nInd = 0; nInd < aInfo.getLength(); nInd++ )
+ {
+ if ( aInfo[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "algorithm-name" ) ) ) )
+ aInfo[nInd].Value >>= sAlgorithm;
+ else if ( aInfo[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "salt" ) ) ) )
+ aInfo[nInd].Value >>= aSalt;
+ else if ( aInfo[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "iteration-count" ) ) ) )
+ aInfo[nInd].Value >>= nCount;
+ else if ( aInfo[nInd].Name.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "hash" ) ) ) )
+ aInfo[nInd].Value >>= aHash;
+ }
+
+ if ( sAlgorithm.equals( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "PBKDF2" ) ) )
+ && aSalt.getLength() && nCount > 0 && aHash.getLength() )
+ {
+ uno::Sequence< sal_Int8 > aNewHash = GeneratePBKDF2Hash( aPassword, aSalt, nCount, aHash.getLength() );
+ for ( sal_Int32 nInd = 0; nInd < aNewHash.getLength() && nInd < aHash.getLength() && aNewHash[nInd] == aHash[nInd]; nInd ++ )
+ {
+ if ( nInd == aNewHash.getLength() - 1 && nInd == aHash.getLength() - 1 )
+ bResult = sal_True;
+ }
+ }
+ }
+
+ return bResult;
+}
+
+// ============================================================================
+sal_uInt32 DocPasswordHelper::GetWordHashAsUINT32(
+ const ::rtl::OUString& aUString )
+{
+ static sal_uInt16 pInitialCode[] = {
+ 0xE1F0, // 1
+ 0x1D0F, // 2
+ 0xCC9C, // 3
+ 0x84C0, // 4
+ 0x110C, // 5
+ 0x0E10, // 6
+ 0xF1CE, // 7
+ 0x313E, // 8
+ 0x1872, // 9
+ 0xE139, // 10
+ 0xD40F, // 11
+ 0x84F9, // 12
+ 0x280C, // 13
+ 0xA96A, // 14
+ 0x4EC3 // 15
+ };
+
+ static sal_uInt16 pEncryptionMatrix[15][7] = {
+ { 0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09}, // last-14
+ { 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF}, // last-13
+ { 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0}, // last-12
+ { 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40}, // last-11
+ { 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5}, // last-10
+ { 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A}, // last-9
+ { 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9}, // last-8
+ { 0x47D3, 0x8FA6, 0x8FA6, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0}, // last-7
+ { 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC}, // last-6
+ { 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10}, // last-5
+ { 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168}, // last-4
+ { 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C}, // last-3
+ { 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD}, // last-2
+ { 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC}, // last-1
+ { 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4} // last
+ };
+
+ sal_uInt32 nResult = 0;
+ sal_uInt32 nLen = aUString.getLength();
+
+ if ( nLen )
+ {
+ if ( nLen > 15 )
+ nLen = 15;
+
+ sal_uInt16 nHighResult = pInitialCode[nLen - 1];
+ sal_uInt16 nLowResult = 0;
+
+ const sal_Unicode* pStr = aUString.getStr();
+ for ( sal_uInt32 nInd = 0; nInd < nLen; nInd++ )
+ {
+ // NO Encoding during conversion!
+ // The specification says that the low byte should be used in case it is not NULL
+ char nHighChar = (char)( pStr[nInd] >> 8 );
+ char nLowChar = (char)( pStr[nInd] & 0xFF );
+ char nChar = nLowChar ? nLowChar : nHighChar;
+
+ for ( int nMatrixInd = 0; nMatrixInd < 7; ++nMatrixInd )
+ {
+ if ( ( nChar & ( 1 << nMatrixInd ) ) != 0 )
+ nHighResult = nHighResult ^ pEncryptionMatrix[15 - nLen + nInd][nMatrixInd];
+ }
+
+ nLowResult = ( ( ( nLowResult >> 14 ) & 0x0001 ) | ( ( nLowResult << 1 ) & 0x7FFF ) ) ^ nChar;
+ }
+
+ nLowResult = (sal_uInt16)( ( ( ( nLowResult >> 14 ) & 0x001 ) | ( ( nLowResult << 1 ) & 0x7FF ) ) ^ nLen ^ 0xCE4B );
+
+ nResult = ( nHighResult << 16 ) | nLowResult;
+ }
+
+ return nResult;
+}
+
+// ============================================================================
+Sequence< sal_Int8 > DocPasswordHelper::GetWordHashAsSequence(
+ const ::rtl::OUString& aUString )
+{
+ sal_uInt32 nHash = GetWordHashAsUINT32( aUString );
+ Sequence< sal_Int8 > aResult( 4 );
+ aResult[0] = ( nHash >> 24 );
+ aResult[1] = ( ( nHash >> 16 ) & 0xFF );
+ aResult[2] = ( ( nHash >> 8 ) & 0xFF );
+ aResult[3] = ( nHash & 0xFF );
+
+ return aResult;
+}
+
+// ============================================================================
+sal_uInt16 DocPasswordHelper::GetXLHashAsUINT16(
+ const ::rtl::OUString& aUString,
+ rtl_TextEncoding nEnc )
+{
+ sal_uInt16 nResult = 0;
+
+ ::rtl::OString aString = ::rtl::OUStringToOString( aUString, nEnc );
+
+ if ( aString.getLength() && aString.getLength() <= SAL_MAX_UINT16 )
+ {
+ for ( sal_Int32 nInd = aString.getLength() - 1; nInd >= 0; nInd-- )
+ {
+ nResult = ( ( nResult >> 14 ) & 0x01 ) | ( ( nResult << 1 ) & 0x7FFF );
+ nResult ^= aString.getStr()[nInd];
+ }
+
+ nResult = ( ( nResult >> 14 ) & 0x01 ) | ( ( nResult << 1 ) & 0x7FFF );
+ nResult ^= ( 0x8000 | ( 'N' << 8 ) | 'K' );
+ nResult ^= aString.getLength();
+ }
+
+ return nResult;
+}
+
+// ============================================================================
+Sequence< sal_Int8 > DocPasswordHelper::GetXLHashAsSequence(
+ const ::rtl::OUString& aUString,
+ rtl_TextEncoding nEnc )
+{
+ sal_uInt16 nHash = GetXLHashAsUINT16( aUString, nEnc );
+ Sequence< sal_Int8 > aResult( 2 );
+ aResult[0] = ( nHash >> 8 );
+ aResult[1] = ( nHash & 0xFF );
+
+ return aResult;
+}
+
+// ============================================================================
/*static*/ OUString DocPasswordHelper::requestAndVerifyDocPassword(
IDocPasswordVerifier& rVerifier,
diff --git a/comphelper/source/misc/docpasswordrequest.cxx b/comphelper/source/misc/docpasswordrequest.cxx
index 9377d6c7c473..17cdb0ae2d92 100644
--- a/comphelper/source/misc/docpasswordrequest.cxx
+++ b/comphelper/source/misc/docpasswordrequest.cxx
@@ -29,24 +29,26 @@
#include "precompiled_comphelper.hxx"
#include "comphelper/docpasswordrequest.hxx"
-#include <com/sun/star/task/DocumentMSPasswordRequest.hpp>
-#include <com/sun/star/task/DocumentPasswordRequest.hpp>
+#include <com/sun/star/task/DocumentMSPasswordRequest2.hpp>
+#include <com/sun/star/task/DocumentPasswordRequest2.hpp>
#include <com/sun/star/task/XInteractionAbort.hpp>
-#include <com/sun/star/task/XInteractionPassword.hpp>
+#include <com/sun/star/task/XInteractionPassword2.hpp>
using ::rtl::OUString;
using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::Type;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::RuntimeException;
using ::com::sun::star::uno::Sequence;
using ::com::sun::star::uno::XInterface;
using ::com::sun::star::task::InteractionClassification_QUERY;
-using ::com::sun::star::task::DocumentMSPasswordRequest;
-using ::com::sun::star::task::DocumentPasswordRequest;
+using ::com::sun::star::task::DocumentMSPasswordRequest2;
+using ::com::sun::star::task::DocumentPasswordRequest2;
using ::com::sun::star::task::PasswordRequestMode;
using ::com::sun::star::task::XInteractionAbort;
using ::com::sun::star::task::XInteractionContinuation;
-using ::com::sun::star::task::XInteractionPassword;
+using ::com::sun::star::task::XInteractionPassword2;
+using ::com::sun::star::task::XInteractionRequest;
namespace comphelper {
@@ -57,52 +59,64 @@ class AbortContinuation : public ::cppu::WeakImplHelper1< XInteractionAbort >
public:
inline explicit AbortContinuation() : mbSelected( false ) {}
- inline bool isSelected() const { return mbSelected; }
+ inline sal_Bool isSelected() const { return mbSelected; }
inline void reset() { mbSelected = false; }
virtual void SAL_CALL select() throw( RuntimeException ) { mbSelected = true; }
private:
- bool mbSelected;
+ sal_Bool mbSelected;
};
// ============================================================================
-class PasswordContinuation : public ::cppu::WeakImplHelper1< XInteractionPassword >
+class PasswordContinuation : public ::cppu::WeakImplHelper1< XInteractionPassword2 >
{
public:
- inline explicit PasswordContinuation() : mbSelected( false ) {}
+ inline explicit PasswordContinuation() : mbReadOnly( sal_False ), mbSelected( sal_False ) {}
- inline bool isSelected() const { return mbSelected; }
- inline void reset() { mbSelected = false; }
+ inline sal_Bool isSelected() const { return mbSelected; }
+ inline void reset() { mbSelected = sal_False; }
+
+ virtual void SAL_CALL select() throw( RuntimeException ) { mbSelected = sal_True; }
- virtual void SAL_CALL select() throw( RuntimeException ) { mbSelected = true; }
virtual void SAL_CALL setPassword( const OUString& rPass ) throw( RuntimeException ) { maPassword = rPass; }
virtual OUString SAL_CALL getPassword() throw( RuntimeException ) { return maPassword; }
+ virtual void SAL_CALL setPasswordToModify( const OUString& rPass ) throw( RuntimeException ) { maModifyPassword = rPass; }
+ virtual OUString SAL_CALL getPasswordToModify() throw( RuntimeException ) { return maModifyPassword; }
+
+ virtual void SAL_CALL setRecommendReadOnly( sal_Bool bReadOnly ) throw( RuntimeException ) { mbReadOnly = bReadOnly; }
+ virtual sal_Bool SAL_CALL getRecommendReadOnly() throw( RuntimeException ) { return mbReadOnly; }
+
private:
OUString maPassword;
- bool mbSelected;
+ OUString maModifyPassword;
+ sal_Bool mbReadOnly;
+ sal_Bool mbSelected;
};
// ============================================================================
DocPasswordRequest::DocPasswordRequest( DocPasswordRequestType eType,
- PasswordRequestMode eMode, const OUString& rDocumentName )
+ PasswordRequestMode eMode, const OUString& rDocumentName, sal_Bool bPasswordToModify )
+: mpAbort( NULL )
+, mpPassword( NULL )
+, mbPasswordToModify( bPasswordToModify )
{
switch( eType )
{
case DocPasswordRequestType_STANDARD:
{
- DocumentPasswordRequest aRequest( OUString(), Reference< XInterface >(),
- InteractionClassification_QUERY, eMode, rDocumentName );
+ DocumentPasswordRequest2 aRequest( OUString(), Reference< XInterface >(),
+ InteractionClassification_QUERY, eMode, rDocumentName, bPasswordToModify );
maRequest <<= aRequest;
}
break;
case DocPasswordRequestType_MS:
{
- DocumentMSPasswordRequest aRequest( OUString(), Reference< XInterface >(),
- InteractionClassification_QUERY, eMode, rDocumentName );
+ DocumentMSPasswordRequest2 aRequest( OUString(), Reference< XInterface >(),
+ InteractionClassification_QUERY, eMode, rDocumentName, bPasswordToModify );
maRequest <<= aRequest;
}
break;
@@ -119,12 +133,32 @@ DocPasswordRequest::~DocPasswordRequest()
{
}
-bool DocPasswordRequest::isAbort() const
+/*uno::*/Any SAL_CALL DocPasswordRequest::queryInterface( const /*uno::*/Type& rType ) throw (RuntimeException)
+{
+ return ::cppu::queryInterface ( rType,
+ // OWeakObject interfaces
+ dynamic_cast< XInterface* > ( (XInteractionRequest *) this ),
+ static_cast< XWeak* > ( this ),
+ // my own interfaces
+ static_cast< XInteractionRequest* > ( this ) );
+}
+
+void SAL_CALL DocPasswordRequest::acquire( ) throw ()
+{
+ OWeakObject::acquire();
+}
+
+void SAL_CALL DocPasswordRequest::release( ) throw ()
+{
+ OWeakObject::release();
+}
+
+sal_Bool DocPasswordRequest::isAbort() const
{
return mpAbort->isSelected();
}
-bool DocPasswordRequest::isPassword() const
+sal_Bool DocPasswordRequest::isPassword() const
{
return mpPassword->isSelected();
}
@@ -134,6 +168,16 @@ OUString DocPasswordRequest::getPassword() const
return mpPassword->getPassword();
}
+OUString DocPasswordRequest::getPasswordToModify() const
+{
+ return mpPassword->getPasswordToModify();
+}
+
+sal_Bool DocPasswordRequest::getRecommendReadOnly() const
+{
+ return mpPassword->getRecommendReadOnly();
+}
+
Any SAL_CALL DocPasswordRequest::getRequest() throw( RuntimeException )
{
return maRequest;
diff --git a/comphelper/source/misc/makefile.mk b/comphelper/source/misc/makefile.mk
index 5ad7e3ed289e..cecba554b332 100644
--- a/comphelper/source/misc/makefile.mk
+++ b/comphelper/source/misc/makefile.mk
@@ -72,6 +72,7 @@ SLOFILES= \
$(SLO)$/numberedcollection.obj \
$(SLO)$/numbers.obj \
$(SLO)$/officeresourcebundle.obj \
+ $(SLO)$/officerestartmanager.obj \
$(SLO)$/proxyaggregation.obj \
$(SLO)$/querydeep.obj \
$(SLO)$/regpathhelper.obj \
diff --git a/comphelper/source/misc/mediadescriptor.cxx b/comphelper/source/misc/mediadescriptor.cxx
index 1bc40a454d43..9e02afe8c56c 100644
--- a/comphelper/source/misc/mediadescriptor.cxx
+++ b/comphelper/source/misc/mediadescriptor.cxx
@@ -30,47 +30,21 @@
#include <comphelper/mediadescriptor.hxx>
#include <comphelper/stillreadwriteinteraction.hxx>
-//_______________________________________________
-// includes
-
-#ifndef __COM_SUN_STAR_UCB_XCONTENT_HPP__
#include <com/sun/star/ucb/XContent.hpp>
-#endif
-
-#ifndef __COM_SUN_STAR_UCB_XCOMMANDENVIRONMENT_HPP__
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
-#endif
-
-#ifndef __COM_SUN_STAR_TASK_XINTERACTIONHANDLER_HPP__
#include <com/sun/star/task/XInteractionHandler.hpp>
-#endif
-
-#ifndef __COM_SUN_STAR_IO_XSTREAM_HPP__
#include <com/sun/star/io/XStream.hpp>
-#endif
#include <com/sun/star/io/XActiveDataSink.hpp>
#include <com/sun/star/io/XSeekable.hpp>
-
-#ifndef __COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP__
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#endif
#include <com/sun/star/lang/IllegalArgumentException.hpp>
-
-#ifndef __COM_SUN_STAR_UTIL_XURLTRANSFORMER_HPP__
#include <com/sun/star/util/XURLTransformer.hpp>
-#endif
-
-#ifndef __COM_SUN_STAR_UCB_COMMANDFAILEDEXCEPTION_HPP__
+#include <com/sun/star/ucb/InteractiveIOException.hpp>
+#include <com/sun/star/ucb/UnsupportedDataSinkException.hpp>
#include <com/sun/star/ucb/CommandFailedException.hpp>
-#endif
-
-#ifndef __COM_SUN_STAR_URI_XURIREFERENCEFACTORY_HPP__
+#include <com/sun/star/task/XInteractionAbort.hpp>
#include <com/sun/star/uri/XUriReferenceFactory.hpp>
-#endif
-
-#ifndef __COM_SUN_STAR_URI_XURIREFERENCE_HPP__
#include <com/sun/star/uri/XUriReference.hpp>
-#endif
#include <com/sun/star/ucb/PostCommandArgument2.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
@@ -81,11 +55,7 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/configurationhelper.hxx>
-#if OSL_DEBUG_LEVEL>0
- #ifndef _RTL_USTRBUF_HXX_
- #include <rtl/ustrbuf.hxx>
- #endif
-#endif
+#include <rtl/ustrbuf.hxx>
//_______________________________________________
// namespace
@@ -503,6 +473,61 @@ sal_Bool MediaDescriptor::isStreamReadOnly() const
return bReadOnly;
}
+// ----------------------------------------------------------------------------
+
+css::uno::Any MediaDescriptor::getComponentDataEntry( const ::rtl::OUString& rName ) const
+{
+ SequenceAsHashMap aCompDataMap( getUnpackedValueOrDefault( PROP_COMPONENTDATA(), ComponentDataSequence() ) );
+ SequenceAsHashMap::iterator aIt = aCompDataMap.find( rName );
+ return (aIt == aCompDataMap.end()) ? css::uno::Any() : aIt->second;
+}
+
+void MediaDescriptor::setComponentDataEntry( const ::rtl::OUString& rName, const css::uno::Any& rValue )
+{
+ if( rValue.hasValue() )
+ {
+ // get or craete the 'ComponentData' property entry
+ css::uno::Any& rCompDataAny = operator[]( PROP_COMPONENTDATA() );
+ // check type, insert the value
+ OSL_ENSURE( !rCompDataAny.hasValue() || rCompDataAny.has< ComponentDataSequence >(),
+ "MediaDescriptor::setComponentDataEntry - incompatible 'ComponentData' property in media descriptor" );
+ if( !rCompDataAny.hasValue() || rCompDataAny.has< ComponentDataSequence >() )
+ {
+ // insert or overwrite the passed value
+ SequenceAsHashMap aCompDataMap( rCompDataAny );
+ aCompDataMap[ rName ] = rValue;
+ // write back the sequence (sal_False = use NamedValue instead of PropertyValue)
+ rCompDataAny = aCompDataMap.getAsConstAny( sal_False );
+ }
+ }
+ else
+ {
+ // if an empty Any is passed, clear the entry
+ clearComponentDataEntry( rName );
+ }
+}
+
+void MediaDescriptor::clearComponentDataEntry( const ::rtl::OUString& rName )
+{
+ SequenceAsHashMap::iterator aPropertyIter = find( PROP_COMPONENTDATA() );
+ if( aPropertyIter != end() )
+ {
+ OSL_ENSURE( aPropertyIter->second.has< ComponentDataSequence >(),
+ "MediaDescriptor::clearComponentDataEntry - incompatible 'ComponentData' property in media descriptor" );
+ if( aPropertyIter->second.has< ComponentDataSequence >() )
+ {
+ // remove the value with the passed name
+ SequenceAsHashMap aCompDataMap( aPropertyIter->second );
+ aCompDataMap.erase( rName );
+ // write back the sequence, or remove it completely if it is empty
+ if( aCompDataMap.empty() )
+ erase( aPropertyIter );
+ else
+ aPropertyIter->second = aCompDataMap.getAsConstAny( sal_False );
+ }
+ }
+}
+
/*-----------------------------------------------
10.03.2004 09:02
-----------------------------------------------*/
diff --git a/comphelper/source/misc/officerestartmanager.cxx b/comphelper/source/misc/officerestartmanager.cxx
new file mode 100644
index 000000000000..974b8d65e7ae
--- /dev/null
+++ b/comphelper/source/misc/officerestartmanager.cxx
@@ -0,0 +1,210 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/awt/XRequestCallback.hpp>
+#include <com/sun/star/frame/XDesktop.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+#include <comphelper_module.hxx>
+#include "officerestartmanager.hxx"
+
+using namespace ::com::sun::star;
+
+namespace comphelper
+{
+
+// ----------------------------------------------------------
+uno::Sequence< ::rtl::OUString > SAL_CALL OOfficeRestartManager::getSupportedServiceNames_static()
+{
+ uno::Sequence< rtl::OUString > aResult( 1 );
+ aResult[0] = getServiceName_static();
+ return aResult;
+}
+
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OOfficeRestartManager::getImplementationName_static()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.task.OfficeRestartManager" ) );
+}
+
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OOfficeRestartManager::getSingletonName_static()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.task.OfficeRestartManager" ) );
+}
+
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OOfficeRestartManager::getServiceName_static()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.task.OfficeRestartManager" ) );
+}
+
+// ----------------------------------------------------------
+uno::Reference< uno::XInterface > SAL_CALL OOfficeRestartManager::Create( const uno::Reference< uno::XComponentContext >& rxContext )
+{
+ return static_cast< cppu::OWeakObject* >( new OOfficeRestartManager( rxContext ) );
+}
+
+// XRestartManager
+// ----------------------------------------------------------
+void SAL_CALL OOfficeRestartManager::requestRestart( const uno::Reference< task::XInteractionHandler >& /* xInteractionHandler */ )
+ throw (uno::Exception, uno::RuntimeException)
+{
+ if ( !m_xContext.is() )
+ throw uno::RuntimeException();
+
+ {
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ // if the restart already running there is no need to trigger it again
+ if ( m_bRestartRequested )
+ return;
+#ifndef MACOSX
+ m_bRestartRequested = sal_True;
+#endif
+ // the office is still not initialized, no need to terminate, changing the state is enough
+ if ( !m_bOfficeInitialized )
+ return;
+ }
+
+ // TODO: use InteractionHandler to report errors
+ try
+ {
+ // register itself as a job that should be executed asynchronously
+ uno::Reference< lang::XMultiComponentFactory > xFactory( m_xContext->getServiceManager(), uno::UNO_SET_THROW );
+
+ uno::Reference< awt::XRequestCallback > xRequestCallback(
+ xFactory->createInstanceWithContext(
+ ::rtl::OUString::createFromAscii("com.sun.star.awt.AsyncCallback"),
+ m_xContext ),
+ uno::UNO_QUERY_THROW );
+
+ xRequestCallback->addCallback( this, uno::Any() );
+ }
+ catch ( uno::Exception& )
+ {
+ // the try to request restart has failed
+ m_bRestartRequested = sal_False;
+ }
+}
+
+// ----------------------------------------------------------
+::sal_Bool SAL_CALL OOfficeRestartManager::isRestartRequested( ::sal_Bool bOfficeInitialized )
+ throw (uno::Exception, uno::RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ if ( bOfficeInitialized && !m_bOfficeInitialized )
+ m_bOfficeInitialized = bOfficeInitialized;
+
+ return m_bRestartRequested;
+}
+
+// XCallback
+// ----------------------------------------------------------
+void SAL_CALL OOfficeRestartManager::notify( const uno::Any& /* aData */ )
+ throw ( uno::RuntimeException )
+{
+ try
+ {
+ sal_Bool bSuccess = sal_False;
+
+ if ( m_xContext.is() )
+ {
+ uno::Reference< lang::XMultiComponentFactory > xFactory( m_xContext->getServiceManager(), uno::UNO_SET_THROW );
+ uno::Reference< frame::XDesktop > xDesktop(
+ xFactory->createInstanceWithContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" ) ), m_xContext ),
+ uno::UNO_QUERY_THROW );
+
+ // Turn Quickstarter veto off
+ uno::Reference< beans::XPropertySet > xPropertySet( xDesktop, uno::UNO_QUERY_THROW );
+ ::rtl::OUString aVetoPropName( RTL_CONSTASCII_USTRINGPARAM( "SuspendQuickstartVeto" ) );
+ uno::Any aValue;
+ aValue <<= (sal_Bool)sal_True;
+ xPropertySet->setPropertyValue( aVetoPropName, aValue );
+
+ try
+ {
+ bSuccess = xDesktop->terminate();
+ } catch( uno::Exception& )
+ {}
+
+ if ( !bSuccess )
+ {
+ aValue <<= (sal_Bool)sal_False;
+ xPropertySet->setPropertyValue( aVetoPropName, aValue );
+ }
+ }
+
+ if ( !bSuccess )
+ m_bRestartRequested = sal_False;
+ }
+ catch( uno::Exception& )
+ {
+ // the try to restart has failed
+ m_bRestartRequested = sal_False;
+ }
+}
+
+// XServiceInfo
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OOfficeRestartManager::getImplementationName() throw (uno::RuntimeException)
+{
+ return getImplementationName_static();
+}
+
+// ----------------------------------------------------------
+::sal_Bool SAL_CALL OOfficeRestartManager::supportsService( const ::rtl::OUString& aServiceName ) throw (uno::RuntimeException)
+{
+ const uno::Sequence< rtl::OUString > & aSupportedNames = getSupportedServiceNames_static();
+ for ( sal_Int32 nInd = 0; nInd < aSupportedNames.getLength(); nInd++ )
+ {
+ if ( aSupportedNames[ nInd ].equals( aServiceName ) )
+ return sal_True;
+ }
+
+ return sal_False;
+}
+
+// ----------------------------------------------------------
+uno::Sequence< ::rtl::OUString > SAL_CALL OOfficeRestartManager::getSupportedServiceNames() throw (uno::RuntimeException)
+{
+ return getSupportedServiceNames_static();
+}
+
+} // namespace comphelper
+
+void createRegistryInfo_OOfficeRestartManager()
+{
+ static ::comphelper::module::OAutoRegistration< ::comphelper::OOfficeRestartManager > aAutoRegistration;
+ static ::comphelper::module::OSingletonRegistration< ::comphelper::OOfficeRestartManager > aSingletonRegistration;
+}
diff --git a/comphelper/source/misc/officerestartmanager.hxx b/comphelper/source/misc/officerestartmanager.hxx
new file mode 100644
index 000000000000..2317d0217060
--- /dev/null
+++ b/comphelper/source/misc/officerestartmanager.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 __OFFICESTARTMANAGER_HXX_
+#define __OFFICESTARTMANAGER_HXX_
+
+#include <com/sun/star/task/XRestartManager.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/awt/XCallback.hpp>
+
+#include <osl/mutex.hxx>
+#include <cppuhelper/implbase3.hxx>
+
+namespace comphelper
+{
+
+class OOfficeRestartManager : public ::cppu::WeakImplHelper3< ::com::sun::star::task::XRestartManager
+ , ::com::sun::star::awt::XCallback
+ , ::com::sun::star::lang::XServiceInfo >
+{
+ ::osl::Mutex m_aMutex;
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
+
+ sal_Bool m_bOfficeInitialized;
+ sal_Bool m_bRestartRequested;
+
+public:
+ OOfficeRestartManager( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext )
+ : m_xContext( xContext )
+ , m_bOfficeInitialized( sal_False )
+ , m_bRestartRequested( sal_False )
+ {}
+
+ virtual ~OOfficeRestartManager()
+ {}
+
+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
+ getSupportedServiceNames_static();
+
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+
+ static ::rtl::OUString SAL_CALL getSingletonName_static();
+
+ static ::rtl::OUString SAL_CALL getServiceName_static();
+
+ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
+ Create( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
+
+// XRestartManager
+ virtual void SAL_CALL requestRestart( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xInteractionHandler ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL isRestartRequested( ::sal_Bool bInitialized ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+
+// XCallback
+ virtual void SAL_CALL notify( const ::com::sun::star::uno::Any& aData ) throw (::com::sun::star::uno::RuntimeException);
+
+// XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+};
+
+} // namespace comphelper
+
+#endif
+
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 5b30e9491eb4..04e6317c959d 100644
--- a/configmgr/source/components.cxx
+++ b/configmgr/source/components.cxx
@@ -369,22 +369,22 @@ Components::Components(
rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
"$BRAND_BASE_DIR/share/registry/modules"))));
- parseXcsXcuLayer( //TODO: migrate
+ parseXcsXcuIniLayer(
7,
expand(
rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
"${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
- ":UNO_SHARED_PACKAGES_CACHE}/registry/"
+ ":BUNDLED_EXTENSIONS_USER}/registry/"
"com.sun.star.comp.deployment.configuration."
- "PackageRegistryBackend/registry"))));
+ "PackageRegistryBackend/configmgr.ini"))));
parseXcsXcuIniLayer(
9,
expand(
rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
"${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
- ":UNO_SHARED_PACKAGES_CACHE}/registry/"
+ ":SHARED_EXTENSIONS_USER}/registry/"
"com.sun.star.comp.deployment.configuration."
"PackageRegistryBackend/configmgr.ini"))));
parseXcsXcuLayer( //TODO: migrate
diff --git a/configure.in b/configure.in
index 0f658c8cbde6..00a5d5dde8b5 100644
--- a/configure.in
+++ b/configure.in
@@ -129,7 +129,7 @@ AC_ARG_ENABLE(evolution2,
],,)
AC_ARG_WITH(system-stdlibs,
[ --with-system-stdlibs use libstdc++/libgcc_s already on system
-],,checkforstdlibproblems=yes)
+],,)
AC_ARG_ENABLE(cups,
[ --disable-cups disable cups support in the psprint project
],,enable_cups=yes)
@@ -515,6 +515,9 @@ AC_ARG_WITH(system-curl,
AC_ARG_WITH(system-boost,
[ --with-system-boost Use boost already on system
],,)
+AC_ARG_WITH(system-mdds,
+[ --with-system-mdds Use mdds already on system
+],,)
AC_ARG_WITH(system-vigra,
[ --with-system-vigra Use vigra already on system
],,)
@@ -813,6 +816,9 @@ AC_ARG_ENABLE(verbose,
[ --enable-verbose Increase build verbosity.
--disable-verbose Decrease build verbosity.
],,)
+AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking Disables generation of dependency information.
+],,)
BUILD_TYPE="OOo"
@@ -3498,23 +3504,6 @@ AC_SUBST(MINGWCXX)
AC_SUBST(MINGWSTRIP)
dnl ===================================================================
-dnl Check for prelinked libgcc_s.so.1
-dnl ===================================================================
-if test "$_os" = "Linux" -a -z "$with_system_stdlibs" -a -z "$with_system_libs"; then
- if test -n "$checkforstdlibproblems"; then
- if test -f /etc/rpm/macros.prelink; then
- with_system_stdlibs=yes
- AC_MSG_WARN([prelinked libgcc_s.so.1, enabling --with-system-stdlibs, use --without-system-stdlibs to override])
- echo "prelinked libgcc_s.so.1, enabling --with-system-stdlibs, use --without-system-stdlibs to override" >> warn
- elif test "$GCC" = "yes" -a ! -e `$CC -print-file-name=libgcc_s.so.1`; then
- with_system_stdlibs=yes
- AC_MSG_WARN([platform doesn't have a libgcc_s.so.1, enabling --with-system-stdlibs, use --without-system-stdlibs to override])
- echo "platform doesn't have a libgcc_s.so.1, enabling --with-system-stdlibs, use --without-system-stdlibs to override" >> warn
- fi
- fi
-fi
-
-dnl ===================================================================
dnl Check for system stdlibs
dnl ===================================================================
AC_MSG_CHECKING([whether to provide libstdc++/libgcc_s in the installset])
@@ -4192,6 +4181,25 @@ AC_SUBST(CURL_CFLAGS)
AC_SUBST(CURL_LIBS)
dnl ===================================================================
+dnl Check for system mdds
+dnl ===================================================================
+AC_MSG_CHECKING([which mdds to use])
+if test -n "$with_system_mdds" -o -n "$with_system_headers" && \
+ test "$with_system_mdds" != "no"; then
+ AC_MSG_RESULT([external])
+ SYSTEM_MDDS=YES
+ AC_LANG_PUSH([C++])
+ AC_CHECK_HEADER(mdds/flat_segment_tree.hpp, [],
+ [AC_MSG_ERROR(mdds/flat_segment_tree.hpp not found. install mdds)], [])
+ AC_LANG_POP([C++])
+else
+ AC_MSG_RESULT([internal])
+ BUILD_TYPE="$BUILD_TYPE MDDS"
+ SYSTEM_MDDS=NO
+fi
+AC_SUBST(SYSTEM_MDDS)
+
+dnl ===================================================================
dnl Check for system boost
dnl ===================================================================
AC_MSG_CHECKING([which boost to use])
@@ -5090,15 +5098,30 @@ AC_MSG_CHECKING([which mythes to use])
if test -n "$with_system_mythes" && test "$with_system_mythes" != "no"; then
AC_MSG_RESULT([external])
SYSTEM_MYTHES=YES
- AC_CHECK_HEADER(mythes.hxx, [],
- [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
- AC_CHECK_LIB(mythes, main, [],
- [ AC_MSG_ERROR(mythes library not found.)], [])
+ AC_LANG_PUSH([C++])
+ PKG_CHECK_MODULES(MYTHES, mythes, MYTHES_PKGCONFIG=yes, MYTHES_PKGCONFIG=no)
+ if test "$MYTHES_PKGCONFIG" = "no"; then
+ AC_CHECK_HEADER(mythes.hxx, [],
+ [ AC_MSG_ERROR(mythes.hxx headers not found.)], [])
+ AC_CHECK_LIB(mythes-1.2, main, [],
+ [ MYTHES_FOUND=no], [])
+ if test "$MYTHES_FOUND" = "no"; then
+ AC_CHECK_LIB(mythes, main, [MYTHES_FOUND=yes],
+ [ MYTHES_FOUND=no], [])
+ fi
+ if test "$MYTHES_FOUND" = "no"; then
+ AC_MSG_ERROR([mythes library not found!.])
+ fi
+ fi
+ AC_LANG_POP([C++])
else
AC_MSG_RESULT([internal])
SYSTEM_MYTHES=NO
+ BUILD_TYPE="$BUILD_TYPE MYTHES"
fi
AC_SUBST(SYSTEM_MYTHES)
+AC_SUBST(MYTHES_CFLAGS)
+AC_SUBST(MYTHES_LIBS)
dnl ===================================================================
dnl Checking for lpsolve
@@ -5134,6 +5157,21 @@ if test "$_os" = "Linux"; then
fi
fi
+if test "$_os" != "WNT"; then
+ AC_CHECK_FUNCS(getopt, HAVE_GETOPT=YES, [HAVE_GETOPT=NO])
+ AC_CHECK_FUNCS(readdir_r, HAVE_READDIR_R=YES, [HAVE_READDIR_R=NO])
+ if test "$HAVE_GETOPT" = "YES" -a "$HAVE_READDIR_R" = "YES"; then
+ SYSTEM_LIBC=YES
+ fi
+else
+ HAVE_GETOPT=NO
+ HAVE_READDIR_R=NO
+ SYSTEM_LIBC=YES
+fi
+AC_SUBST(HAVE_GETOPT)
+AC_SUBST(HAVE_READDIR_R)
+AC_SUBST(SYSTEM_LIBC)
+
dnl =========================================
dnl Check for the Microsoft Platform SDK.
dnl =========================================
@@ -6868,6 +6906,19 @@ fi
AC_SUBST(VERBOSE)
dnl ===================================================================
+dnl Hook up OOos nodep environmental variable to automake's equivalent
+dnl --enable-dependency-tracking configure option
+dnl ===================================================================
+AC_MSG_CHECKING([whether to enable dependency tracking])
+if test "$enable_dependency_tracking" = "no"; then
+ nodep=TRUE
+ AC_MSG_RESULT([no])
+else
+ AC_MSG_RESULT([yes])
+fi
+AC_SUBST(nodep)
+
+dnl ===================================================================
dnl Setting up the environment.
dnl ===================================================================
echo "********************************************************************"
diff --git a/connectivity/qa/drivers/dbase/test.properties b/connectivity/qa/drivers/dbase/test.properties
index 6f301f972d40..c26879f480f3 100644
--- a/connectivity/qa/drivers/dbase/test.properties
+++ b/connectivity/qa/drivers/dbase/test.properties
@@ -1,3 +1,4 @@
+# x-no-translate
Driver=org.openoffice.comp.drivers.MySQL.Driver
user=testuser
password=
diff --git a/cppunit/makefile.mk b/cppunit/makefile.mk
index 5ef6499726e5..f50f4aadc164 100644
--- a/cppunit/makefile.mk
+++ b/cppunit/makefile.mk
@@ -40,7 +40,8 @@ PATCH_FILES = solarisfinite.patch warnings.patch windows.patch ldflags.patch
# warnings.patch: see <https://sourceforge.net/tracker/?func=detail&
# aid=2912630&group_id=11795&atid=311795>
-.IF "$(OS)" == "WNT" && "$(COM)" == "MSC"
+.IF "$(OS)" == "WNT"
+.IF "$(COM)" == "MSC"
# On Windows, CppUnit appears to support either the Unix-style configure/make
# approach with cygwin and gcc (and libtool fails miserably if gcc is replaced
@@ -70,6 +71,48 @@ OUTDIR2INC = include/cppunit
$(PACKAGE_DIR)/$(CONFIGURE_FLAG_FILE): ooo-cppunit_dll.mk ooo-DllPlugInTester.mk
.ELSE
+.IF "$(COM)" == "GCC"
+EXTRA_CFLAGS += -mthreads
+LDFLAGS += -Wl,--enable-runtime-pseudo-reloc-v2
+
+.IF "$(USE_SYSTEM_STL)" != "YES"
+
+OOO_STLPORT_CXXFLAGS = -I$(SOLARINCDIR)/stl
+.IF "$(USE_STLP_DEBUG)" == "TRUE"
+OOO_STLPORT_CXXFLAGS += -D_STLP_DEBUG
+.END
+OOO_STLPORT_CXXFLAGS += -DGXX_INCLUDE_PATH=$(GXX_INCLUDE_PATH)
+
+OOO_STLPORT_LDFLAGS = -L$(SOLARLIBDIR)
+OOO_STLPORT_LIBS = $(LIBSTLPORT)
+
+.END
+
+CONFIGURE_ACTION = ./configure
+CONFIGURE_FLAGS = --prefix=$(shell cd $(PACKAGE_DIR) && \
+ pwd $(PWDFLAGS))/$(TARFILE_ROOTDIR)/ooo-install \
+ --disable-dependency-tracking --disable-static --disable-doxygen \
+ --disable-html-docs --disable-latex-docs CC='$(CC)' CXX='$(CXX)' \
+ CXXFLAGS='$(EXTRA_CFLAGS) $(OOO_STLPORT_CXXFLAGS)' \
+ LDFLAGS='$(LDFLAGS) $(OOO_STLPORT_LDFLAGS)' \
+ LIBS='$(OOO_STLPORT_LIBS) $(MY_LIBS)'
+
+BUILD_ACTION = $(GNUMAKE)
+BUILD_FLAGS = install
+
+OUTDIR2INC = ooo-install/include/cppunit
+
+OUT2BIN = ooo-install/bin/DllPlugInTester.exe \
+ ooo-install/bin/cygcppunit-1-12-1.dll
+
+.INCLUDE: set_ext.mk
+.INCLUDE: target.mk
+.INCLUDE: tg_ext.mk
+
+.ENDIF # "$(COM)" == "GCC"
+.ENDIF # "$(COM)" == "MSC"
+
+.ELSE
.IF "$(USE_SYSTEM_STL)" != "YES"
@@ -134,10 +177,6 @@ BUILD_FLAGS = install
OUTDIR2INC = ooo-install/include/cppunit
-.IF "$(OS)" == "WNT"
-OUT2BIN = ooo-install/bin/DllPlugInTester.exe \
- ooo-install/bin/cygcppunit-1-12-1.dll
-.ELSE
OUT2BIN = ooo-install/bin/DllPlugInTester
.IF "$(OS)" == "MACOSX"
OUT2LIB = ooo-install/lib/libcppunit-1.12.1.dylib
@@ -145,7 +184,6 @@ EXTRPATH = NONE
.ELSE
OUT2LIB = ooo-install/lib/libcppunit-1.12.so.1
.END
-.END
.INCLUDE: set_ext.mk
.INCLUDE: target.mk
diff --git a/cui/source/customize/macropg.cxx b/cui/source/customize/macropg.cxx
index e7d70dd9d396..9b5453553ef3 100644
--- a/cui/source/customize/macropg.cxx
+++ b/cui/source/customize/macropg.cxx
@@ -296,6 +296,11 @@ void _SvxMacroTabPage::InitResources()
aDisplayNames.push_back( EventDisplayName( "OnSubComponentOpened", RID_SVXSTR_EVENT_SUBCOMPONENT_OPENED ) );
aDisplayNames.push_back( EventDisplayName( "OnSubComponentClosed", RID_SVXSTR_EVENT_SUBCOMPONENT_CLOSED ) );
// aDisplayNames.push_back( EventDisplayName( "OnLayoutFinished", RID_SVXSTR_EVENT_LAYOUT_FINISHED ) );
+ aDisplayNames.push_back( EventDisplayName( "OnSelect", RID_SVXSTR_EVENT_SELECTIONCHANGED ) );
+ aDisplayNames.push_back( EventDisplayName( "OnDoubleClick", RID_SVXSTR_EVENT_DOUBLECLICK ) );
+ aDisplayNames.push_back( EventDisplayName( "OnRightClick", RID_SVXSTR_EVENT_RIGHTCLICK ) );
+ aDisplayNames.push_back( EventDisplayName( "OnCalculate", RID_SVXSTR_EVENT_CALCULATE ) );
+ aDisplayNames.push_back( EventDisplayName( "OnChange", RID_SVXSTR_EVENT_CONTENTCHANGED ) );
// the event name to UI string mappings for forms & dialogs
//
diff --git a/cui/source/customize/macropg.src b/cui/source/customize/macropg.src
index 26aaea2c34db..10d9149233e0 100644
--- a/cui/source/customize/macropg.src
+++ b/cui/source/customize/macropg.src
@@ -457,3 +457,29 @@ String RID_SVXSTR_EVENT_LAYOUT_FINISHED
{
Text [ en-US ] = "Document layout finished" ;
};
+
+String RID_SVXSTR_EVENT_SELECTIONCHANGED
+{
+ Text [ en-US ] = "Selection changed" ;
+};
+
+String RID_SVXSTR_EVENT_DOUBLECLICK
+{
+ Text [ en-US ] = "Double click" ;
+};
+
+String RID_SVXSTR_EVENT_RIGHTCLICK
+{
+ Text [ en-US ] = "Right click" ;
+};
+
+String RID_SVXSTR_EVENT_CALCULATE
+{
+ Text [ en-US ] = "Formulas calculated" ;
+};
+
+String RID_SVXSTR_EVENT_CONTENTCHANGED
+{
+ Text [ en-US ] = "Content changed" ;
+};
+
diff --git a/cui/source/dialogs/cuihyperdlg.cxx b/cui/source/dialogs/cuihyperdlg.cxx
index db4a3d15f4a4..297b1ad921c4 100644
--- a/cui/source/dialogs/cuihyperdlg.cxx
+++ b/cui/source/dialogs/cuihyperdlg.cxx
@@ -107,6 +107,7 @@ SvxHpLinkDlg::SvxHpLinkDlg (Window* pParent, SfxBindings* pBindings)
mbReadOnly ( sal_False ),
mbIsHTMLDoc ( sal_False )
{
+ SetUniqueId( HID_HYPERLINK_DIALOG );
mbGrabFocus = sal_True;
// insert pages
Image aImage;
diff --git a/cui/source/dialogs/makefile.mk b/cui/source/dialogs/makefile.mk
index 0c5b90aff202..12239a1ac781 100644..100755
--- a/cui/source/dialogs/makefile.mk
+++ b/cui/source/dialogs/makefile.mk
@@ -57,6 +57,7 @@ SRC1FILES = \
insrc.src \
multipat.src \
newtabledlg.src \
+ passwdomdlg.src \
postdlg.src \
scriptdlg.src \
sdrcelldlg.src \
@@ -95,6 +96,7 @@ SLOFILES+=\
$(SLO)$/multifil.obj \
$(SLO)$/multipat.obj \
$(SLO)$/newtabledlg.obj \
+ $(SLO)$/passwdomdlg.obj \
$(SLO)$/pastedlg.obj \
$(SLO)$/plfilter.obj \
$(SLO)$/postdlg.obj \
diff --git a/cui/source/dialogs/passwdomdlg.cxx b/cui/source/dialogs/passwdomdlg.cxx
new file mode 100755
index 000000000000..5b768c756654
--- /dev/null
+++ b/cui/source/dialogs/passwdomdlg.cxx
@@ -0,0 +1,343 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_cui.hxx"
+
+// include ---------------------------------------------------------------
+
+#include "passwdomdlg.hrc"
+#include "passwdomdlg.hxx"
+
+#include "cuires.hrc"
+#include "dialmgr.hxx"
+
+#include <sfx2/tabdlg.hxx>
+#include <tools/debug.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/edit.hxx>
+#include <vcl/button.hxx>
+#include <vcl/morebtn.hxx>
+#include <vcl/settings.hxx>
+#include <vcl/msgbox.hxx>
+
+
+//////////////////////////////////////////////////////////////////////
+
+class PasswordReenterEdit_Impl : public Edit
+{
+ String m_aDefaultTxt;
+
+ // disallow use of copy c-tor and assignment operator
+ PasswordReenterEdit_Impl( const PasswordReenterEdit_Impl & );
+ PasswordReenterEdit_Impl & operator = ( const PasswordReenterEdit_Impl & );
+
+public:
+ PasswordReenterEdit_Impl( Window * pParent, const ResId &rResId );
+ virtual ~PasswordReenterEdit_Impl();
+
+ // Edit
+ virtual void Paint( const Rectangle& rRect );
+};
+
+
+PasswordReenterEdit_Impl::PasswordReenterEdit_Impl( Window * pParent, const ResId &rResId ) :
+ Edit( pParent, rResId )
+{
+// currently the spec does not want to display this text anymore...
+// m_aDefaultTxt = String( CUI_RES( STR_PASSWD_MUST_BE_CONFIRMED ) );
+}
+
+
+PasswordReenterEdit_Impl::~PasswordReenterEdit_Impl()
+{
+}
+
+
+void PasswordReenterEdit_Impl::Paint( const Rectangle& rRect )
+{
+ if (GetText().Len() == 0)
+ {
+ Push( /*PUSH_FILLCOLOR | PUSH_TEXTFILLCOLOR |*/ PUSH_TEXTCOLOR );
+/*
+ Color aFillColor( GetParent()->GetBackground().GetColor() );
+ SetLineColor(); // don't draw a border when painting the Edit field rectangle with the new background color
+ SetFillColor( aFillColor );
+ SetTextFillColor( aFillColor );
+ SetTextColor( GetParent()->GetTextColor() ); // use plain text color even if the Edit field is disabled (it is hard to read the text otherwise)
+
+ DrawRect( Rectangle( Point(), GetOutputSizePixel() ) );
+*/
+ SetTextColor( Color( COL_GRAY ) );
+ DrawText( Point(), m_aDefaultTxt );
+
+ Pop();
+ }
+ else
+ Edit::Paint( rRect );
+}
+
+
+//////////////////////////////////////////////////////////////////////
+
+struct PasswordToOpenModifyDialog_Impl
+{
+ PasswordToOpenModifyDialog * m_pParent;
+
+ FixedLine m_aFileEncryptionFL;
+ FixedText m_aPasswdToOpenFT;
+ Edit m_aPasswdToOpenED;
+ FixedText m_aReenterPasswdToOpenFT;
+ PasswordReenterEdit_Impl m_aReenterPasswdToOpenED;
+// FixedImage m_aPasswdToOpenMatchFI;
+ FixedText m_aPasswdNoteFT;
+ FixedLine m_aButtonsFL;
+ MoreButton m_aMoreFewerOptionsBTN;
+ OKButton m_aOk;
+ CancelButton m_aCancel;
+ FixedLine m_aFileSharingOptionsFL;
+ CheckBox m_aOpenReadonlyCB;
+ FixedText m_aPasswdToModifyFT;
+ Edit m_aPasswdToModifyED;
+ FixedText m_aReenterPasswdToModifyFT;
+ PasswordReenterEdit_Impl m_aReenterPasswdToModifyED;
+// FixedImage m_aPasswdToModifyMatchFI;
+
+ String m_aOneMismatch;
+ String m_aTwoMismatch;
+ String m_aInvalidStateForOkButton;
+ String m_aInvalidStateForOkButton_v2;
+
+ bool m_bIsPasswordToModify;
+
+
+// DECL_LINK( ModifyHdl, Edit * );
+ DECL_LINK( OkBtnClickHdl, OKButton * );
+
+ PasswordToOpenModifyDialog_Impl( PasswordToOpenModifyDialog * pParent,
+ sal_uInt16 nMinPasswdLen, sal_uInt16 nMaxPasswdLen, bool bIsPasswordToModify );
+ ~PasswordToOpenModifyDialog_Impl();
+};
+
+
+PasswordToOpenModifyDialog_Impl::PasswordToOpenModifyDialog_Impl(
+ PasswordToOpenModifyDialog * pParent,
+ sal_uInt16 nMinPasswdLen,
+ sal_uInt16 nMaxPasswdLen,
+ bool bIsPasswordToModify ) :
+ m_pParent( pParent ),
+ m_aFileEncryptionFL ( pParent, CUI_RES( FL_FILE_ENCRYPTION ) ),
+ m_aPasswdToOpenFT ( pParent, CUI_RES( FT_PASSWD_TO_OPEN ) ),
+ m_aPasswdToOpenED ( pParent, CUI_RES( ED_PASSWD_TO_OPEN ) ),
+ m_aReenterPasswdToOpenFT ( pParent, CUI_RES( FT_REENTER_PASSWD_TO_OPEN ) ),
+ m_aReenterPasswdToOpenED ( pParent, CUI_RES( ED_REENTER_PASSWD_TO_OPEN ) ),
+// m_aPasswdToOpenMatchFI ( pParent, CUI_RES( FI_PASSWD_TO_OPEN_MATCH ) ),
+ m_aPasswdNoteFT ( pParent, CUI_RES( FT_PASSWD_NOTE ) ),
+ m_aButtonsFL ( pParent, CUI_RES( FL_BUTTONS ) ),
+ m_aMoreFewerOptionsBTN ( pParent, CUI_RES( BTN_MORE_FEWER_OPTIONS ) ),
+ m_aOk ( pParent, CUI_RES( BTN_OK ) ),
+ m_aCancel ( pParent, CUI_RES( BTN_CANCEL ) ),
+ m_aFileSharingOptionsFL ( pParent, CUI_RES( FL_FILE_SHARING_OPTIONS ) ),
+ m_aOpenReadonlyCB ( pParent, CUI_RES( CB_OPEN_READONLY ) ),
+ m_aPasswdToModifyFT ( pParent, CUI_RES( FT_PASSWD_TO_MODIFY ) ),
+ m_aPasswdToModifyED ( pParent, CUI_RES( ED_PASSWD_TO_MODIFY ) ),
+ m_aReenterPasswdToModifyFT ( pParent, CUI_RES( FT_REENTER_PASSWD_TO_MODIFY ) ),
+ m_aReenterPasswdToModifyED ( pParent, CUI_RES( ED_REENTER_PASSWD_TO_MODIFY ) ),
+// m_aPasswdToModifyMatchFI ( pParent, CUI_RES( FI_PASSWD_TO_MODIFY_MATCH ) )
+ m_aOneMismatch( CUI_RES( STR_ONE_PASSWORD_MISMATCH ) ),
+ m_aTwoMismatch( CUI_RES( STR_TWO_PASSWORDS_MISMATCH ) ),
+ m_aInvalidStateForOkButton( CUI_RES( STR_INVALID_STATE_FOR_OK_BUTTON ) ),
+ m_aInvalidStateForOkButton_v2( CUI_RES( STR_INVALID_STATE_FOR_OK_BUTTON_V2 ) ),
+ m_bIsPasswordToModify( bIsPasswordToModify )
+{
+/*
+ const sal_Bool bHighContrast = pParent->GetSettings().GetStyleSettings().GetHighContrastMode();
+ const Image aImage( CUI_RES( bHighContrast ? IMG_PASSWD_MATCH_HC : IMG_PASSWD_MATCH ) );
+ m_aPasswdToOpenMatchFI.SetImage( aImage );
+ m_aPasswdToModifyMatchFI.SetImage( aImage );
+*/
+
+ m_aMoreFewerOptionsBTN.SetMoreText( String( CUI_RES( STR_MORE_OPTIONS ) ) );
+ m_aMoreFewerOptionsBTN.SetLessText( String( CUI_RES( STR_FEWER_OPTIONS ) ) );
+
+#if 0
+ Link aModifyLink = LINK( this, PasswordToOpenModifyDialog_Impl, ModifyHdl );
+ m_aPasswdToOpenED.SetModifyHdl( aModifyLink );
+ m_aReenterPasswdToOpenED.SetModifyHdl( aModifyLink );
+ m_aPasswdToModifyED.SetModifyHdl( aModifyLink );
+ m_aReenterPasswdToModifyED.SetModifyHdl( aModifyLink );
+#endif
+
+ m_aOk.SetClickHdl( LINK( this, PasswordToOpenModifyDialog_Impl, OkBtnClickHdl ) );
+
+// m_aOk.Enable( FALSE );
+
+ if (nMaxPasswdLen)
+ {
+ m_aPasswdToOpenED.SetMaxTextLen( nMaxPasswdLen );
+ m_aReenterPasswdToOpenED.SetMaxTextLen( nMaxPasswdLen );
+ m_aPasswdToModifyED.SetMaxTextLen( nMaxPasswdLen );
+ m_aReenterPasswdToModifyED.SetMaxTextLen( nMaxPasswdLen );
+ }
+
+ (void) nMinPasswdLen; // currently not supported
+
+ m_aPasswdToOpenED.GrabFocus();
+
+// ModifyHdl( NULL );
+
+ m_aMoreFewerOptionsBTN.Enable( bIsPasswordToModify );
+ if (!bIsPasswordToModify)
+ m_aMoreFewerOptionsBTN.Hide( TRUE );
+}
+
+
+PasswordToOpenModifyDialog_Impl::~PasswordToOpenModifyDialog_Impl()
+{
+}
+
+#if 0
+IMPL_LINK( PasswordToOpenModifyDialog_Impl, ModifyHdl, Edit *, EMPTYARG /*pEdit*/ )
+{
+ // force repaints to get the m_aDefaultTxt displayed again
+ if (m_aReenterPasswdToOpenED.GetText().Len() == 0)
+ m_aReenterPasswdToOpenED.Invalidate();
+ if (m_aReenterPasswdToModifyED.GetText().Len() == 0)
+ m_aReenterPasswdToModifyED.Invalidate();
+
+ const sal_Int32 nPasswdToOpenLen = m_aPasswdToOpenED.GetText().Len();
+ const sal_Int32 nPasswdToModifyLen = m_aPasswdToModifyED.GetText().Len();
+
+ const bool bBothEmpty = nPasswdToOpenLen == 0 && nPasswdToModifyLen == 0;
+ const bool bToOpenMatch = m_aPasswdToOpenED.GetText() == m_aReenterPasswdToOpenED.GetText();
+ const bool bToModifyMatch = m_aPasswdToModifyED.GetText() == m_aReenterPasswdToModifyED.GetText();
+
+ m_aOk.Enable( bToOpenMatch && bToModifyMatch && !bBothEmpty );
+
+// m_aPasswdToOpenMatchFI.Enable( bToOpenMatch && !bBothEmpty );
+// m_aPasswdToModifyMatchFI.Enable( bToModifyMatch && !bBothEmpty );
+
+ return 0;
+}
+#endif
+
+
+IMPL_LINK( PasswordToOpenModifyDialog_Impl, OkBtnClickHdl, OKButton *, EMPTYARG /*pBtn*/ )
+{
+ bool bInvalidState = !m_aOpenReadonlyCB.IsChecked() &&
+ m_aPasswdToOpenED.GetText().Len() == 0 &&
+ m_aPasswdToModifyED.GetText().Len() == 0;
+ if (bInvalidState)
+ {
+ ErrorBox aErrorBox( m_pParent, WB_OK,
+ m_bIsPasswordToModify? m_aInvalidStateForOkButton : m_aInvalidStateForOkButton_v2 );
+ aErrorBox.Execute();
+ }
+ else // check for mismatched passwords...
+ {
+ const bool bToOpenMatch = m_aPasswdToOpenED.GetText() == m_aReenterPasswdToOpenED.GetText();
+ const bool bToModifyMatch = m_aPasswdToModifyED.GetText() == m_aReenterPasswdToModifyED.GetText();
+ const int nMismatch = (bToOpenMatch? 0 : 1) + (bToModifyMatch? 0 : 1);
+ if (nMismatch > 0)
+ {
+ ErrorBox aErrorBox( m_pParent, WB_OK, nMismatch == 1 ? m_aOneMismatch : m_aTwoMismatch );
+ aErrorBox.Execute();
+
+ Edit &rEdit = !bToOpenMatch? m_aPasswdToOpenED : m_aPasswdToModifyED;
+ PasswordReenterEdit_Impl &rRepeatEdit = !bToOpenMatch? m_aReenterPasswdToOpenED : m_aReenterPasswdToModifyED;
+ String aEmpty;
+ if (nMismatch == 1)
+ {
+ rEdit.SetText( aEmpty );
+ rRepeatEdit.SetText( aEmpty );
+ }
+ else if (nMismatch == 2)
+ {
+ m_aPasswdToOpenED.SetText( aEmpty );
+ m_aReenterPasswdToOpenED.SetText( aEmpty );
+ m_aPasswdToModifyED.SetText( aEmpty );
+ m_aReenterPasswdToModifyED.SetText( aEmpty );
+ }
+ rEdit.GrabFocus();
+ }
+ else
+ {
+ m_pParent->EndDialog( RET_OK );
+ }
+ }
+
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////
+
+
+PasswordToOpenModifyDialog::PasswordToOpenModifyDialog(
+ Window * pParent,
+ sal_uInt16 nMinPasswdLen,
+ sal_uInt16 nMaxPasswdLen,
+ bool bIsPasswordToModify ) :
+ SfxModalDialog( pParent, CUI_RES( RID_DLG_PASSWORD_TO_OPEN_MODIFY ) )
+{
+ m_pImpl = std::auto_ptr< PasswordToOpenModifyDialog_Impl >(
+ new PasswordToOpenModifyDialog_Impl( this, nMinPasswdLen, nMaxPasswdLen, bIsPasswordToModify ) );
+
+ FreeResource();
+}
+
+
+PasswordToOpenModifyDialog::~PasswordToOpenModifyDialog()
+{
+}
+
+
+String PasswordToOpenModifyDialog::GetPasswordToOpen() const
+{
+ const bool bPasswdOk =
+ m_pImpl->m_aPasswdToOpenED.GetText().Len() > 0 &&
+ m_pImpl->m_aPasswdToOpenED.GetText() == m_pImpl->m_aReenterPasswdToOpenED.GetText();
+ return bPasswdOk ? m_pImpl->m_aPasswdToOpenED.GetText() : String();
+}
+
+
+String PasswordToOpenModifyDialog::GetPasswordToModify() const
+{
+ const bool bPasswdOk =
+ m_pImpl->m_aPasswdToModifyED.GetText().Len() > 0 &&
+ m_pImpl->m_aPasswdToModifyED.GetText() == m_pImpl->m_aReenterPasswdToModifyED.GetText();
+ return bPasswdOk ? m_pImpl->m_aPasswdToModifyED.GetText() : String();
+}
+
+
+bool PasswordToOpenModifyDialog::IsRecommendToOpenReadonly() const
+{
+ return m_pImpl->m_aOpenReadonlyCB.IsChecked();
+}
+
+
+//////////////////////////////////////////////////////////////////////
+
diff --git a/cui/source/dialogs/passwdomdlg.hrc b/cui/source/dialogs/passwdomdlg.hrc
new file mode 100755
index 000000000000..522e4edf1da2
--- /dev/null
+++ b/cui/source/dialogs/passwdomdlg.hrc
@@ -0,0 +1,61 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 _CUI_PASSWDOMDLG_HRC_
+#define _CUI_PASSWDOMDLG_HRC_
+
+#define FL_FILE_ENCRYPTION 10
+#define FT_PASSWD_TO_OPEN 11
+#define ED_PASSWD_TO_OPEN 12
+#define FT_REENTER_PASSWD_TO_OPEN 13
+#define ED_REENTER_PASSWD_TO_OPEN 14
+#define IMG_PASSWD_MATCH 15
+#define IMG_PASSWD_MATCH_HC 16
+#define FT_PASSWD_NOTE 17
+#define FL_BUTTONS 18
+#define BTN_MORE_FEWER_OPTIONS 19
+#define BTN_OK 20
+#define BTN_CANCEL 21
+#define FL_FILE_SHARING_OPTIONS 22
+#define FT_PASSWD_TO_MODIFY 23
+#define ED_PASSWD_TO_MODIFY 24
+#define FT_REENTER_PASSWD_TO_MODIFY 25
+#define ED_REENTER_PASSWD_TO_MODIFY 26
+#define FI_PASSWD_TO_OPEN_MATCH 27
+#define FI_PASSWD_TO_MODIFY_MATCH 28
+#define CB_OPEN_READONLY 29
+
+#define STR_MORE_OPTIONS 51
+#define STR_FEWER_OPTIONS 52
+#define STR_PASSWD_MUST_BE_CONFIRMED 53
+#define STR_ONE_PASSWORD_MISMATCH 54
+#define STR_TWO_PASSWORDS_MISMATCH 55
+#define STR_INVALID_STATE_FOR_OK_BUTTON 56
+#define STR_INVALID_STATE_FOR_OK_BUTTON_V2 57
+
+#endif
+
diff --git a/cui/source/dialogs/passwdomdlg.src b/cui/source/dialogs/passwdomdlg.src
new file mode 100755
index 000000000000..edb84813d387
--- /dev/null
+++ b/cui/source/dialogs/passwdomdlg.src
@@ -0,0 +1,228 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+
+#include <cuires.hrc>
+#include "passwdomdlg.hrc"
+#include "helpid.hrc"
+
+
+ModalDialog RID_DLG_PASSWORD_TO_OPEN_MODIFY
+{
+ Size = MAP_APPFONT( 171, 150 );
+ Text [ en-US ] = "Set Password";
+ HelpId = HID_DLG_PASSWORD_TO_OPEN_MODIFY;
+ Border = TRUE ;
+ Moveable = TRUE ;
+ OutputSize = TRUE ;
+ SVLook = TRUE ;
+
+ FixedLine FL_FILE_ENCRYPTION
+ {
+ Pos = MAP_APPFONT( 3, 3 );
+ Size = MAP_APPFONT( 165, 8 );
+ Text [ en-US ] = "File encryption password";
+ };
+
+ FixedText FT_PASSWD_TO_OPEN
+ {
+ Pos = MAP_APPFONT( 6, 17 );
+ Size = MAP_APPFONT( 159, 8 );
+ Text [ en-US ] = "~Enter password to open";
+ WordBreak = TRUE;
+ };
+
+ Edit ED_PASSWD_TO_OPEN
+ {
+ HelpId = HID_DLG_PASSWORD_TO_OPEN_MODIFY_PASSWORD_TO_OPEN;
+ Pos = MAP_APPFONT( 6, 28 );
+ Size = MAP_APPFONT( 159, 12 );
+ Border = TRUE ;
+ PassWord = TRUE ;
+ };
+
+ FixedText FT_REENTER_PASSWD_TO_OPEN
+ {
+ Pos = MAP_APPFONT( 6, 45 );
+ Size = MAP_APPFONT( 159, 8 );
+ Text [ en-US ] = "Confirm password";
+ WordBreak = TRUE;
+ };
+
+ Edit ED_REENTER_PASSWD_TO_OPEN
+ {
+ HelpId = HID_DLG_PASSWORD_TO_OPEN_MODIFY_CONFIRM_PASSWORD_TO_OPEN;
+ Pos = MAP_APPFONT( 6, 56 );
+ Size = MAP_APPFONT( 159, 12 );
+ Border = TRUE ;
+ PassWord = TRUE ;
+ };
+/*
+ FixedImage FI_PASSWD_TO_OPEN_MATCH
+ {
+ Pos = MAP_APPFONT ( 150, 42 ) ;
+ Size = MAP_APPFONT ( 12 , 12 ) ;
+ };
+*/
+ FixedText FT_PASSWD_NOTE
+ {
+ Pos = MAP_APPFONT( 6, 80 );
+ Size = MAP_APPFONT( 159, 4*8 ); // some extra space for translation in other languages
+ Text [ en-US ] = "Note: After a password has been set, the document will only open with "\
+ "the password. Should you lose the password, there will be no way to "\
+ "recover the document. Please also note that this password is case-sensitive.";
+ WordBreak = TRUE;
+ };
+
+ FixedLine FL_BUTTONS
+ {
+ Pos = MAP_APPFONT( 0, 117 );
+ Size = MAP_APPFONT( 171, 8 );
+ };
+
+ MoreButton BTN_MORE_FEWER_OPTIONS
+ {
+ HelpId = HID_DLG_PASSWORD_TO_OPEN_MODIFY_MORE;
+ Pos = MAP_APPFONT( 6 , 130 ) ;
+ Size = MAP_APPFONT( 50 , 14 ) ;
+ Delta = 92 ;
+ MapUnit = MAP_APPFONT ;
+ State = FALSE ;
+ };
+
+ OKButton BTN_OK
+ {
+ Pos = MAP_APPFONT( 62, 130 );
+ Size = MAP_APPFONT( 50, 14 );
+ DefButton = TRUE ;
+ };
+
+ CancelButton BTN_CANCEL
+ {
+ Pos = MAP_APPFONT( 115, 130 );
+ Size = MAP_APPFONT( 50, 14 );
+ };
+
+ FixedLine FL_FILE_SHARING_OPTIONS
+ {
+ Pos = MAP_APPFONT( 3, 154 );
+ Size = MAP_APPFONT( 165, 8 );
+ Text [ en-US ] = "File sharing password";
+ };
+
+ CheckBox CB_OPEN_READONLY
+ {
+ HelpId = HID_DLG_PASSWORD_TO_OPEN_MODIFY_FILE_READONLY;
+ Pos = MAP_APPFONT( 6, 170 );
+ Size = MAP_APPFONT( 159, 8 );
+
+ Text [ en-US ] = "Open file read-only";
+ };
+
+ FixedText FT_PASSWD_TO_MODIFY
+ {
+ Pos = MAP_APPFONT( 6, 186 );
+ Size = MAP_APPFONT( 159, 8 );
+ Text [ en-US ] = "Enter password to allow editing";
+ WordBreak = TRUE;
+ };
+
+ Edit ED_PASSWD_TO_MODIFY
+ {
+ HelpId = HID_DLG_PASSWORD_TO_OPEN_MODIFY_PASSWORD_TO_MODIFY;
+ Pos = MAP_APPFONT( 6, 196 );
+ Size = MAP_APPFONT( 159, 12 );
+ Border = TRUE ;
+ PassWord = TRUE ;
+ };
+
+ FixedText FT_REENTER_PASSWD_TO_MODIFY
+ {
+ Pos = MAP_APPFONT( 6, 214 );
+ Size = MAP_APPFONT( 159, 8 );
+ Text [ en-US ] = "Confirm password";
+ WordBreak = TRUE;
+ };
+
+ Edit ED_REENTER_PASSWD_TO_MODIFY
+ {
+ HelpId = HID_DLG_PASSWORD_TO_OPEN_MODIFY_CONFIRM_PASSWORD_TO_MODIFY;
+ Pos = MAP_APPFONT( 6, 224 );
+ Size = MAP_APPFONT( 159, 12 );
+ Border = TRUE ;
+ PassWord = TRUE ;
+ };
+/*
+ FixedImage FI_PASSWD_TO_MODIFY_MATCH
+ {
+ Pos = MAP_APPFONT ( 150, 224 ) ;
+ Size = MAP_APPFONT ( 12 , 12 ) ;
+ };
+*/
+
+ String STR_PASSWD_MUST_BE_CONFIRMED
+ {
+ Text [ en-US ] = "Password must be confirmed" ;
+ };
+
+ String STR_MORE_OPTIONS
+ {
+ Text [ en-US ] = "More ~Options" ;
+ };
+
+ String STR_FEWER_OPTIONS
+ {
+ Text [ en-US ] = "Fewer ~Options" ;
+ };
+
+ String STR_ONE_PASSWORD_MISMATCH
+ {
+ Text [ en-US ] = "The confirmation password did not match the password. Set the password again by entering the same password in both boxes." ;
+ };
+
+ String STR_TWO_PASSWORDS_MISMATCH
+ {
+ Text [ en-US ] = "The confirmation passwords did not match the original passwords. Set the passwords again." ;
+ };
+
+ String STR_INVALID_STATE_FOR_OK_BUTTON
+ {
+ Text [ en-US ] = "Please enter a password to open or to modify, or check the open read-only option to continue." ;
+ };
+/*
+ Image IMG_PASSWD_MATCH
+ {
+ ImageBitmap = Bitmap { File = "apply.png"; };
+ };
+
+ Image IMG_PASSWD_MATCH_HC
+ {
+ ImageBitmap = Bitmap { File = "apply_h.png"; };
+ };
+*/
+};
+
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 8929e9ebdef5..bb3983e02d56 100644..100755
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -100,6 +100,7 @@
#include "macroass.hxx"
#include "acccfg.hxx"
#include "insrc.hxx"
+#include "passwdomdlg.hxx"
#include "hyphen.hxx"
#include "thesdlg.hxx"
@@ -162,6 +163,7 @@ IMPL_ABSTDLG_BASE(AbstractInsertObjectDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractLinksDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractSpellDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractSvxPostItDialog_Impl);
+IMPL_ABSTDLG_BASE(AbstractPasswordToOpenModifyDialog_Impl);
//////////////////////////////////////////////////////////////////////////
// VclAbstractDialog2_Impl
@@ -983,6 +985,19 @@ Window * AbstractSvxPostItDialog_Impl::GetWindow()
return (Window *)pDlg;
}
+String AbstractPasswordToOpenModifyDialog_Impl::GetPasswordToOpen() const
+{
+ return pDlg->GetPasswordToOpen();
+}
+String AbstractPasswordToOpenModifyDialog_Impl::GetPasswordToModify() const
+{
+ return pDlg->GetPasswordToModify();
+}
+bool AbstractPasswordToOpenModifyDialog_Impl::IsRecommendToOpenReadonly() const
+{
+ return pDlg->IsRecommendToOpenReadonly();
+}
+
// Create dialogs with simplest interface
VclAbstractDialog* AbstractDialogFactory_Impl::CreateVclDialog( Window* pParent, sal_uInt32 nResId )
{
@@ -1952,3 +1967,13 @@ SvxAbstractInsRowColDlg* AbstractDialogFactory_Impl::CreateSvxInsRowColDlg( Wind
{
return new SvxInsRowColDlg( pParent, bCol, nHelpId );
}
+
+AbstractPasswordToOpenModifyDialog * AbstractDialogFactory_Impl::CreatePasswordToOpenModifyDialog(
+ Window * pParent,
+ sal_uInt16 nMinPasswdLen, sal_uInt16 nMaxPasswdLen, bool bIsPasswordToModify )
+{
+ PasswordToOpenModifyDialog * pDlg = new PasswordToOpenModifyDialog( pParent, nMinPasswdLen, nMaxPasswdLen, bIsPasswordToModify );
+ return new AbstractPasswordToOpenModifyDialog_Impl( pDlg );
+}
+
+
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index 844439efbf61..efe7c0763d9d 100644..100755
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -589,6 +589,19 @@ private:
};
//add for SvxPostItDialog end
+//for PasswordToOpenModifyDialog begin
+class PasswordToOpenModifyDialog;
+class AbstractPasswordToOpenModifyDialog_Impl : public AbstractPasswordToOpenModifyDialog
+{
+ DECL_ABSTDLG_BASE( AbstractPasswordToOpenModifyDialog_Impl, PasswordToOpenModifyDialog )
+
+ virtual String GetPasswordToOpen() const;
+ virtual String GetPasswordToModify() const;
+ virtual bool IsRecommendToOpenReadonly() const;
+};
+//for PasswordToOpenModifyDialog end
+
+
//------------------------------------------------------------------------
//AbstractDialogFactory_Impl implementations
class AbstractDialogFactory_Impl : public SvxAbstractDialogFactory
@@ -796,6 +809,8 @@ public:
Window* pParent, const rtl::OUString& rExtensionId, const rtl::OUString& rApplicationContext );
virtual SvxAbstractInsRowColDlg* CreateSvxInsRowColDlg( Window* pParent, bool bCol, ULONG nHelpId );
+
+ virtual AbstractPasswordToOpenModifyDialog * CreatePasswordToOpenModifyDialog( Window * pParent, sal_uInt16 nMinPasswdLen, sal_uInt16 nMaxPasswdLen, bool bIsPasswordToModify );
};
#endif
diff --git a/cui/source/inc/cuires.hrc b/cui/source/inc/cuires.hrc
index e7cc7e1ca2f4..52549e934ecc 100644..100755
--- a/cui/source/inc/cuires.hrc
+++ b/cui/source/inc/cuires.hrc
@@ -284,6 +284,9 @@
#define RID_SVXSTR_ARCHIVE_HEADLINE (RID_SVX_START + 485)
#define RID_SVXSTR_MULTIFILE_DBL_ERR (RID_SVX_START + 486)
+// password to open/modify dialog
+#define RID_DLG_PASSWORD_TO_OPEN_MODIFY (RID_SVX_START + 500)
+
// multi path dialog
#define RID_SVXDLG_MULTIPATH (RID_SVX_START + 201)
#define RID_MULTIPATH_DBL_ERR (RID_SVX_START + 207)
@@ -428,4 +431,12 @@
#define RID_SVXSTR_EVENT_FIELDMERGE_FINISHED (RID_SVX_START + 1188)
#define RID_SVXSTR_EVENT_LAYOUT_FINISHED (RID_SVX_START + 1189)
+// For now, keep new IDs unique only within cui.
+// Later, cui should perhaps get an own range of IDs.
+#define RID_SVXSTR_EVENT_SELECTIONCHANGED (RID_SVX_START + 1190)
+#define RID_SVXSTR_EVENT_DOUBLECLICK (RID_SVX_START + 1191)
+#define RID_SVXSTR_EVENT_RIGHTCLICK (RID_SVX_START + 1192)
+#define RID_SVXSTR_EVENT_CALCULATE (RID_SVX_START + 1193)
+#define RID_SVXSTR_EVENT_CONTENTCHANGED (RID_SVX_START + 1194)
+
#endif
diff --git a/cui/source/inc/helpid.hrc b/cui/source/inc/helpid.hrc
index c4a50ec1bf62..6607c5aee4db 100755
--- a/cui/source/inc/helpid.hrc
+++ b/cui/source/inc/helpid.hrc
@@ -375,13 +375,22 @@
#define HID_OFAPAGE_QUOTE_CLB (HID_CUI_START + 340)
#define HID_CT_THES_ALTERNATIVES (HID_CUI_START + 341)
-// please adjust ACT_CUI_HID_END below if you add entries here!
+#define HID_DLG_PASSWORD_TO_OPEN_MODIFY (HID_CUI_START + 342)
+#define HID_DLG_PASSWORD_TO_OPEN_MODIFY_PASSWORD_TO_OPEN (HID_CUI_START + 343)
+#define HID_DLG_PASSWORD_TO_OPEN_MODIFY_CONFIRM_PASSWORD_TO_OPEN (HID_CUI_START + 344)
+#define HID_DLG_PASSWORD_TO_OPEN_MODIFY_MORE (HID_CUI_START + 345)
+#define HID_DLG_PASSWORD_TO_OPEN_MODIFY_FILE_READONLY (HID_CUI_START + 346)
+#define HID_DLG_PASSWORD_TO_OPEN_MODIFY_PASSWORD_TO_MODIFY (HID_CUI_START + 347)
+#define HID_DLG_PASSWORD_TO_OPEN_MODIFY_CONFIRM_PASSWORD_TO_MODIFY (HID_CUI_START + 348)
+#define HID_HYPERLINK_DIALOG (HID_CUI_START + 349)
+
+// please adjust ACT_SVX_HID_END2 below if you add entries here!
// -----------------------------------------------------------------------
// Overrun check ---------------------------------------------------------
// -----------------------------------------------------------------------
-#define ACT_CUI_HID_END HID_CUI_START + 341
+#define ACT_CUI_HID_END (HID_CUI_START + 349)
#if ACT_CUI_HID_END > HID_CUI_END
#error Resource-Ueberlauf in #line, #file
diff --git a/writerfilter/source/dmapper/LFOTable.hxx b/cui/source/inc/passwdomdlg.hxx
index 89f72c557d85..337c9b84da11 100644..100755
--- a/writerfilter/source/dmapper/LFOTable.hxx
+++ b/cui/source/inc/passwdomdlg.hxx
@@ -24,42 +24,39 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#ifndef INCLUDED_LFOTABLE_HXX
-#define INCLUDED_LFOTABLE_HXX
+#ifndef _CUI_PASSWDOMDLG_HXX_
+#define _CUI_PASSWDOMDLG_HXX_
-#include <WriterFilterDllApi.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
-#include <com/sun/star/lang/XComponent.hpp>
-//#ifndef INCLUDED_DMAPPER_PROPERTYMAP_HXX
-//#include <PropertyMap.hxx>
-//#endif
-//#include <vector>
-namespace writerfilter {
-namespace dmapper
-{
+#include <sfx2/basedlgs.hxx>
+
+#include <memory>
+
+//////////////////////////////////////////////////////////////////////
+
+struct PasswordToOpenModifyDialog_Impl;
-struct LFOTable_Impl;
-class WRITERFILTER_DLLPRIVATE LFOTable : public Properties, public Table
+class PasswordToOpenModifyDialog : public SfxModalDialog
{
- LFOTable_Impl *m_pImpl;
-public:
- LFOTable();
- virtual ~LFOTable();
+ std::auto_ptr< PasswordToOpenModifyDialog_Impl > m_pImpl;
- // Properties
- virtual void attribute(Id Name, Value & val);
- virtual void sprm(Sprm & sprm);
+ // disallow use of copy c-tor and assignment operator
+ PasswordToOpenModifyDialog( const PasswordToOpenModifyDialog & );
+ PasswordToOpenModifyDialog & operator = ( const PasswordToOpenModifyDialog & );
- // Table
- virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+public:
+ PasswordToOpenModifyDialog( Window * pParent, sal_uInt16 nMinPasswdLen,
+ sal_uInt16 nMaxPasswdLen /* 0 -> no max len enforced */,
+ bool bIsPasswordToModify );
+ virtual ~PasswordToOpenModifyDialog();
-// sal_uInt32 size();
- sal_Int32 GetListID(sal_uInt32 nLFO);
- //direct access in ooxml import
- void AddListID( sal_Int32 nAbstractNumId );
+ // AbstractPasswordToOpenModifyDialog
+ virtual String GetPasswordToOpen() const;
+ virtual String GetPasswordToModify() const;
+ virtual bool IsRecommendToOpenReadonly() const;
};
-typedef boost::shared_ptr< LFOTable > LFOTablePtr;
-}}
-#endif //
+//////////////////////////////////////////////////////////////////////
+
+#endif
+
diff --git a/cui/source/options/optfltr.src b/cui/source/options/optfltr.src
index a9091926e3c2..35659dd71f5b 100644
--- a/cui/source/options/optfltr.src
+++ b/cui/source/options/optfltr.src
@@ -147,19 +147,19 @@ TabPage RID_OFAPAGE_MSFILTEROPT2
};
String ST_CHG_MATH
{
- Text [ en-US ] = "MathType to %PRODUCTNAME Math / %PRODUCTNAME Math to MathType";
+ Text [ en-US ] = "MathType to %PRODUCTNAME Math or reverse";
};
String ST_CHG_WRITER
{
- Text [ en-US ] = "WinWord to %PRODUCTNAME Writer / %PRODUCTNAME Writer to WinWord";
+ Text [ en-US ] = "WinWord to %PRODUCTNAME Writer or reverse";
};
String ST_CHG_CALC
{
- Text [ en-US ] = "Excel to %PRODUCTNAME Calc / %PRODUCTNAME Calc to Excel";
+ Text [ en-US ] = "Excel to %PRODUCTNAME Calc or reverse";
};
String ST_CHG_IMPRESS
{
- Text [ en-US ] = "PowerPoint to %PRODUCTNAME Impress / %PRODUCTNAME Impress to PowerPoint";
+ Text [ en-US ] = "PowerPoint to %PRODUCTNAME Impress or reverse";
};
};
diff --git a/cui/source/options/optinet2.cxx b/cui/source/options/optinet2.cxx
index 685fa024fa62..b360a5cedfde 100644..100755
--- a/cui/source/options/optinet2.cxx
+++ b/cui/source/options/optinet2.cxx
@@ -1329,17 +1329,10 @@ SvxSecurityTabPage::SvxSecurityTabPage( Window* pParent, const SfxItemSet& rSet
,maMacroSecFL ( this, CUI_RES( FL_SEC_MACROSEC ) )
,maMacroSecFI ( this, CUI_RES( FI_SEC_MACROSEC ) )
,maMacroSecPB ( this, CUI_RES( PB_SEC_MACROSEC ) )
- ,maFilesharingFL ( this, CUI_RES( FL_SEC_FILESHARING ) )
- ,maRecommReadOnlyCB ( this, CUI_RES( CB_SEC_RECOMMREADONLY ) )
- ,maRecordChangesCB ( this, CUI_RES( CB_SEC_RECORDCHANGES ) )
- ,maProtectRecordsPB ( this, CUI_RES( PB_SEC_PROTRECORDS ) )
,mpSecOptions ( new SvtSecurityOptions )
,mpSecOptDlg ( NULL )
- ,meRedlingMode ( RL_NONE )
- ,msProtectRecordsStr( CUI_RES( STR_SEC_PROTRECORDS ) )
- ,msUnprotectRecordsStr( CUI_RES( STR_SEC_UNPROTRECORDS ) )
,msPasswordStoringDeactivateStr( CUI_RES( STR_SEC_NOPASSWDSAVE ) )
{
@@ -1353,8 +1346,6 @@ SvxSecurityTabPage::SvxSecurityTabPage( Window* pParent, const SfxItemSet& rSet
maMasterPasswordCB.SetClickHdl( LINK( this, SvxSecurityTabPage, MasterPasswordCBHdl ) );
maShowConnectionsPB.SetClickHdl( LINK( this, SvxSecurityTabPage, ShowPasswordsHdl ) );
maMacroSecPB.SetClickHdl( LINK( this, SvxSecurityTabPage, MacroSecPBHdl ) );
- maProtectRecordsPB.SetClickHdl( LINK( this, SvxSecurityTabPage, ProtectRecordsPBHdl ) );
- maRecordChangesCB.SetClickHdl( LINK( this, SvxSecurityTabPage, RecordChangesCBHdl ) );
ActivatePage( rSet );
}
@@ -1524,127 +1515,6 @@ IMPL_LINK( SvxSecurityTabPage, MacroSecPBHdl, void*, EMPTYARG )
return 0;
}
-namespace
-{
- enum RedlineFunc { RF_ON, RF_PROTECT };
-
- const SfxBoolItem* ExecuteRecordChangesFunc( SvxSecurityTabPage::RedliningMode _eMode, RedlineFunc _eFunc, BOOL _bVal, Window* _pParent = NULL )
- {
- const SfxBoolItem* pRet = NULL;
-
- if( _eMode != SvxSecurityTabPage::RL_NONE )
- {
- USHORT nSlot;
- if ( _eMode == SvxSecurityTabPage::RL_WRITER )
- nSlot = ( _eFunc == RF_ON )? FN_REDLINE_ON : FN_REDLINE_PROTECT;
- else
- nSlot = ( _eFunc == RF_ON )? FID_CHG_RECORD : SID_CHG_PROTECT;
-
- // execute
- SfxViewShell* pViewSh = SfxViewShell::Current();
- if( pViewSh )
- {
- bool bNeedItem = ( _eMode == SvxSecurityTabPage::RL_WRITER || _eFunc != RF_ON );
- SfxBoolItem* pItem = bNeedItem ? new SfxBoolItem( nSlot, _bVal ) : NULL;
- SfxDispatcher* pDisp = pViewSh->GetDispatcher();
- if ( _pParent )
- {
- OfaPtrItem aParentItem( SID_ATTR_PARENTWINDOW, _pParent );
- pRet = static_cast< const SfxBoolItem* >(
- pDisp->Execute( nSlot, SFX_CALLMODE_SYNCHRON, &aParentItem, pItem, 0L ) );
- }
- else
- pRet = static_cast< const SfxBoolItem* >(
- pDisp->Execute( nSlot, SFX_CALLMODE_SYNCHRON, pItem, 0L ) );
- delete pItem;
- }
- }
-
- return pRet;
- }
-
- bool QueryState( USHORT _nSlot, bool& _rValue )
- {
- bool bRet = false;
-
- SfxViewShell* pViewSh = SfxViewShell::Current();
- if( pViewSh )
- {
- const SfxPoolItem* pItem;
- SfxDispatcher* pDisp = pViewSh->GetDispatcher();
- bRet = SFX_ITEM_AVAILABLE <= pDisp->QueryState( _nSlot, pItem );
- if( bRet )
- _rValue = ( static_cast< const SfxBoolItem* >( pItem ) )->GetValue();
- }
-
- return bRet;
- }
-
- bool QueryRecordChangesProtectionState( SvxSecurityTabPage::RedliningMode _eMode, bool& _rValue )
- {
- bool bRet = false;
-
- if( _eMode != SvxSecurityTabPage::RL_NONE )
- {
- USHORT nSlot = ( _eMode == SvxSecurityTabPage::RL_WRITER )? FN_REDLINE_PROTECT : SID_CHG_PROTECT;
- bRet = QueryState( nSlot, _rValue );
- }
-
- return bRet;
- }
-
- bool QueryRecordChangesState( SvxSecurityTabPage::RedliningMode _eMode, bool& _rValue )
- {
- bool bRet = false;
-
- if( _eMode != SvxSecurityTabPage::RL_NONE )
- {
- USHORT nSlot = ( _eMode == SvxSecurityTabPage::RL_WRITER )? FN_REDLINE_ON : FID_CHG_RECORD;
- bRet = QueryState( nSlot, _rValue );
- }
-
- return bRet;
- }
-}
-
-IMPL_LINK( SvxSecurityTabPage, RecordChangesCBHdl, void*, EMPTYARG )
-{
- ExecuteRecordChangesFunc( meRedlingMode, RF_ON, maRecordChangesCB.IsChecked(), this );
- CheckRecordChangesState();
- return 0;
-}
-
-IMPL_LINK( SvxSecurityTabPage, ProtectRecordsPBHdl, void*, EMPTYARG )
-{
- bool bProt;
- QueryRecordChangesProtectionState( meRedlingMode, bProt );
- ExecuteRecordChangesFunc( meRedlingMode, RF_PROTECT, !bProt, this );
- CheckRecordChangesState();
-
- if ( QueryRecordChangesProtectionState( meRedlingMode, bProt ) )
- {
- // RecordChangesCB is enabled if protection is off
- maRecordChangesCB.Enable( !bProt );
- // toggle text of button "Protect" <-> "Unprotect"
- String sNewText = bProt ? msUnprotectRecordsStr : msProtectRecordsStr;
- maProtectRecordsPB.SetText( sNewText );
- }
- return 0;
-}
-
-void SvxSecurityTabPage::CheckRecordChangesState( void )
-{
- bool bVal;
- if( QueryRecordChangesState( meRedlingMode, bVal ) )
- {
- maRecordChangesCB.Enable();
- maRecordChangesCB.Check( bVal );
- }
- else
- maRecordChangesCB.Disable(); // because now we don't know the state!
-
- maProtectRecordsPB.Enable( QueryRecordChangesProtectionState( meRedlingMode, bVal ) );
-}
void SvxSecurityTabPage::InitControls()
{
@@ -1661,30 +1531,13 @@ void SvxSecurityTabPage::InitControls()
maMacroSecFL.Hide();
maMacroSecFI.Hide();
maMacroSecPB.Hide();
-
- // rearrange the following controls
- Point aNewPos = maFilesharingFL.GetPosPixel();
- long nDelta = aNewPos.Y() - maMacroSecFL.GetPosPixel().Y();
-
- Window* pWins[] =
- {
- &maFilesharingFL, &maRecommReadOnlyCB, &maRecordChangesCB, &maProtectRecordsPB
- };
- Window** pCurrent = pWins;
- const sal_Int32 nCount = sizeof( pWins ) / sizeof( pWins[ 0 ] );
- for ( sal_Int32 i = 0; i < nCount; ++i, ++pCurrent )
- {
- aNewPos = (*pCurrent)->GetPosPixel();
- aNewPos.Y() -= nDelta;
- (*pCurrent)->SetPosPixel( aNewPos );
- }
}
// one button too small for its text?
sal_Int32 i = 0;
long nBtnTextWidth = 0;
Window* pButtons[] = { &maSecurityOptionsPB, &maMasterPasswordPB,
- &maShowConnectionsPB, &maMacroSecPB, &maProtectRecordsPB };
+ &maShowConnectionsPB, &maMacroSecPB };
Window** pButton = pButtons;
const sal_Int32 nBCount = sizeof( pButtons ) / sizeof( pButtons[ 0 ] );
for ( ; i < nBCount; ++i, ++pButton )
@@ -1724,8 +1577,7 @@ void SvxSecurityTabPage::InitControls()
}
Window* pControls[] = { &maSecurityOptionsFI, &maSavePasswordsCB,
- &maMasterPasswordFI, &maMacroSecFI,
- &maRecommReadOnlyCB, &maRecordChangesCB };
+ &maMasterPasswordFI, &maMacroSecFI };
Window** pControl = pControls;
const sal_Int32 nCCount = sizeof( pControls ) / sizeof( pControls[ 0 ] );
for ( i = 0; i < nCCount; ++i, ++pControl )
@@ -1844,15 +1696,6 @@ BOOL SvxSecurityTabPage::FillItemSet( SfxItemSet& )
CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_CTRLCLICK_HYPERLINK, mpSecOptDlg->IsCtrlHyperlinkChecked(), bModified );
}
- // document options
- SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
- if( pCurDocShell )
- {
- if( pCurDocShell->HasSecurityOptOpenReadOnly() )
- pCurDocShell->SetSecurityOptOpenReadOnly( maRecommReadOnlyCB.IsChecked() );
-
- }
-
return bModified;
}
@@ -1860,65 +1703,10 @@ BOOL SvxSecurityTabPage::FillItemSet( SfxItemSet& )
void SvxSecurityTabPage::Reset( const SfxItemSet& )
{
- String sNewText = msProtectRecordsStr;
SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
if( pCurDocShell )
{
- bool bIsHTMLDoc = false;
- SfxViewShell* pViewSh = SfxViewShell::Current();
- if( pViewSh )
- {
- const SfxPoolItem* pItem;
- SfxDispatcher* pDisp = pViewSh->GetDispatcher();
- if ( SFX_ITEM_AVAILABLE <= pDisp->QueryState( SID_HTML_MODE, pItem ) )
- {
- USHORT nMode = static_cast< const SfxUInt16Item* >( pItem )->GetValue();
- bIsHTMLDoc = ( ( nMode & HTMLMODE_ON ) != 0 );
- }
- }
-
- sal_Bool bIsReadonly = pCurDocShell->IsReadOnly();
- if( pCurDocShell->HasSecurityOptOpenReadOnly() && !bIsHTMLDoc )
- {
- maRecommReadOnlyCB.Check( pCurDocShell->IsSecurityOptOpenReadOnly() );
- maRecommReadOnlyCB.Enable( !bIsReadonly );
- }
- else
- maRecommReadOnlyCB.Disable();
-
- bool bVal;
- if ( QueryRecordChangesState( RL_WRITER, bVal ) && !bIsHTMLDoc )
- meRedlingMode = RL_WRITER;
- else if( QueryRecordChangesState( RL_CALC, bVal ) )
- meRedlingMode = RL_CALC;
- else
- meRedlingMode = RL_NONE;
-
- if ( meRedlingMode != RL_NONE )
- {
- maRecordChangesCB.Check( bVal );
- maRecordChangesCB.Enable( !bVal && !bIsReadonly );
- maProtectRecordsPB.Enable(
- QueryRecordChangesProtectionState( meRedlingMode, bVal ) && !bIsReadonly );
- // set the right text
- if ( bVal )
- sNewText = msUnprotectRecordsStr;
- }
- else
- {
- // only Writer and Calc support redlining
- maRecordChangesCB.Disable();
- maProtectRecordsPB.Disable();
- }
}
- else
- { // no doc -> hide document settings
- maRecommReadOnlyCB.Disable();
- maRecordChangesCB.Disable();
- maProtectRecordsPB.Disable();
- }
-
- maProtectRecordsPB.SetText( sNewText );
}
//added by jmeng begin
diff --git a/cui/source/options/optinet2.hrc b/cui/source/options/optinet2.hrc
index 09de829ae132..1bd09225ac9b 100644..100755
--- a/cui/source/options/optinet2.hrc
+++ b/cui/source/options/optinet2.hrc
@@ -116,13 +116,7 @@
#define FL_SEC_MACROSEC 19
#define FI_SEC_MACROSEC 20
#define PB_SEC_MACROSEC 21
-#define FL_SEC_FILESHARING 22
-#define CB_SEC_RECOMMREADONLY 23
-#define CB_SEC_RECORDCHANGES 24
-#define PB_SEC_PROTRECORDS 25
-#define STR_SEC_PROTRECORDS 10
-#define STR_SEC_UNPROTRECORDS 11
#define STR_SEC_NOPASSWDSAVE 12
#define TP_WIDTH 260
diff --git a/cui/source/options/optinet2.hxx b/cui/source/options/optinet2.hxx
index 588549787d99..f75ff7d05c44 100644..100755
--- a/cui/source/options/optinet2.hxx
+++ b/cui/source/options/optinet2.hxx
@@ -232,8 +232,6 @@ class SvxSecurityTabPage : public SfxTabPage
{
using TabPage::ActivatePage;
using TabPage::DeactivatePage;
-public:
- enum RedliningMode { RL_NONE, RL_WRITER, RL_CALC };
private:
FixedLine maSecurityOptionsFL;
@@ -251,17 +249,10 @@ private:
FixedInfo maMacroSecFI;
PushButton maMacroSecPB;
- FixedLine maFilesharingFL;
- CheckBox maRecommReadOnlyCB;
- CheckBox maRecordChangesCB;
- PushButton maProtectRecordsPB;
SvtSecurityOptions* mpSecOptions;
svx::SecurityOptionsDialog* mpSecOptDlg;
- RedliningMode meRedlingMode;
- String msProtectRecordsStr;
- String msUnprotectRecordsStr;
String msPasswordStoringDeactivateStr;
DECL_LINK( SecurityOptionsHdl, PushButton* );
@@ -270,10 +261,7 @@ private:
DECL_LINK( MasterPasswordCBHdl, void* );
DECL_LINK( ShowPasswordsHdl, PushButton* );
DECL_LINK( MacroSecPBHdl, void* );
- DECL_LINK( RecordChangesCBHdl, void* );
- DECL_LINK( ProtectRecordsPBHdl, void* );
- void CheckRecordChangesState( void );
void InitControls();
SvxSecurityTabPage( Window* pParent, const SfxItemSet& rSet );
diff --git a/cui/source/options/optinet2.src b/cui/source/options/optinet2.src
index 2b2829d9f2e5..9023dfa52394 100644..100755
--- a/cui/source/options/optinet2.src
+++ b/cui/source/options/optinet2.src
@@ -507,37 +507,6 @@ TabPage RID_SVXPAGE_INET_SECURITY
Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
Text [ en-US ] = "Macro Security...";
};
- FixedLine FL_SEC_FILESHARING
- {
- Pos = MAP_APPFONT( COL_0, ROW_7 );
- Size = MAP_APPFONT( COL_4-COL_0, RSC_CD_FIXEDLINE_HEIGHT );
- Text [ en-US ] = "File sharing options for this document";
- };
- CheckBox CB_SEC_RECOMMREADONLY
- {
- Pos = MAP_APPFONT( COL_1, ROW_8 );
- Size = MAP_APPFONT( COL_2-COL_1, RSC_CD_CHECKBOX_HEIGHT );
- Text [ en-US ] = "Open this document in read-only mode";
- };
- CheckBox CB_SEC_RECORDCHANGES
- {
- Pos = MAP_APPFONT( COL_1, ROW_9 );
- Size = MAP_APPFONT( COL_2-COL_1, RSC_CD_CHECKBOX_HEIGHT );
- Text [ en-US ] = "Record changes";
- };
- PushButton PB_SEC_PROTRECORDS
- {
- Pos = MAP_APPFONT( COL_3, ROW_9-2 );
- Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
- };
- String STR_SEC_PROTRECORDS
- {
- Text [ en-US ] = "Protect...";
- };
- String STR_SEC_UNPROTRECORDS
- {
- Text [ en-US ] = "Unprotect...";
- };
String STR_SEC_NOPASSWDSAVE
{
Text [ en-US ] = "Disabling the function to persistently store passwords deletes the list of passwords stored and resets the master password.\n\nDo you want to delete password list and reset master password?";
diff --git a/cui/util/hidother.src b/cui/util/hidother.src
index ddce17eebb23..258d6404f19a 100644
--- a/cui/util/hidother.src
+++ b/cui/util/hidother.src
@@ -127,6 +127,7 @@ hidspecial HID_HANGULDLG_EDIT_NEWWORD { HelpID = HID_HANGULDLG_EDIT_NEWWO
hidspecial HID_HANGULDLG_SUGGESTIONS { HelpId = HID_HANGULDLG_SUGGESTIONS; };
hidspecial HID_HANGULDLG_SUGGESTIONS_GRID { HelpId = HID_HANGULDLG_SUGGESTIONS_GRID; };
hidspecial HID_HANGULDLG_SUGGESTIONS_LIST { HelpId = HID_HANGULDLG_SUGGESTIONS_LIST; };
+hidspecial HID_HYPERLINK_DIALOG { HelpID = HID_HYPERLINK_DIALOG ;};
hidspecial HID_HYPERDLG_DOC_PATH { HelpID = HID_HYPERDLG_DOC_PATH ;};
hidspecial HID_HYPERDLG_INET_PATH { HelpID = HID_HYPERDLG_INET_PATH ;};
hidspecial HID_HYPERDLG_MAIL_PATH { HelpID = HID_HYPERDLG_MAIL_PATH ;};
@@ -199,4 +200,5 @@ hidspecial HID_WARN_NAME_DUPLICATE { HelpID = HID_WARN_NAME_DUPLICA
hidspecial UID_OFA_CONNPOOL_DRIVERLIST_BACK { HelpId = UID_OFA_CONNPOOL_DRIVERLIST_BACK; };
hidspecial UID_SEARCH_RECORDSTATUS { HelpID = UID_SEARCH_RECORDSTATUS ;};
hidspecial HID_MACRO_HEADERTABLISTBOX { HelpID = HID_MACRO_HEADERTABLISTBOX ;};
+hidspecial HID_DLG_PASSWORD_TO_OPEN_MODIFY { HelpID = HID_DLG_PASSWORD_TO_OPEN_MODIFY ;};
diff --git a/curl/makefile.mk b/curl/makefile.mk
index 1fab0c301bff..adab75f41d49 100644
--- a/curl/makefile.mk
+++ b/curl/makefile.mk
@@ -89,18 +89,18 @@ OUT2LIB=$(BUILD_DIR)$/.libs$/libcurl$(DLLPOST).4
.IF "$(GUI)"=="WNT"
.IF "$(COM)"=="GCC"
-curl_CC=$(CC)
+curl_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
curl_CC+=-shared-libgcc
.ENDIF
-curl_LIBS=-lws2_32 -lwinmm -lmingwthrd
+curl_LIBS=-lws2_32 -lwinmm
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
curl_LIBS+=-lstdc++_s
.ENDIF
CONFIGURE_DIR=.$/
#relative to CONFIGURE_DIR
CONFIGURE_ACTION=.$/configure
-CONFIGURE_FLAGS= --without-ssl --enable-ftp --enable-ipv6 --disable-http --disable-gopher --disable-file --disable-ldap --disable-telnet --disable-dict --build=i586-pc-mingw32 --host=i586-pc-mingw32 CC="$(curl_CC)" CPPFLAGS="$(INCLUDE)" OBJDUMP="objdump" CFLAGS=-D_MT LDFLAGS="-L$(ILIB:s/;/ -L/)" LIBS="$(curl_LIBS)"
+CONFIGURE_FLAGS= --without-ssl --enable-ftp --enable-ipv6 --disable-http --disable-gopher --disable-file --disable-ldap --disable-telnet --disable-dict --build=i586-pc-mingw32 --host=i586-pc-mingw32 CC="$(curl_CC)" CPPFLAGS="$(INCLUDE)" OBJDUMP="objdump" LDFLAGS="-L$(ILIB:s/;/ -L/)" LIBS="$(curl_LIBS)"
BUILD_DIR=$(CONFIGURE_DIR)$/lib
BUILD_ACTION=make
OUT2BIN=$(BUILD_DIR)$/.libs$/libcurl*.dll
diff --git a/dbaccess/source/core/dataaccess/datasource.cxx b/dbaccess/source/core/dataaccess/datasource.cxx
index b5cf356c2115..835f5398efc7 100644..100755
--- a/dbaccess/source/core/dataaccess/datasource.cxx
+++ b/dbaccess/source/core/dataaccess/datasource.cxx
@@ -38,6 +38,7 @@
#include "connection.hxx"
#include "SharedConnection.hxx"
#include "databasedocument.hxx"
+#include "OAuthenticationContinuation.hxx"
/** === begin UNO includes === **/
@@ -206,40 +207,10 @@ void SAL_CALL FlushNotificationAdapter::disposing( const EventObject& Source ) t
impl_dispose( false );
}
-//============================================================
-//= OAuthenticationContinuation
-//============================================================
-class OAuthenticationContinuation : public OInteraction< XInteractionSupplyAuthentication >
-{
- sal_Bool m_bRemberPassword : 1; // remember the password for this session ?
-
- ::rtl::OUString m_sUser; // the user
- ::rtl::OUString m_sPassword; // the user's password
-
-public:
- OAuthenticationContinuation();
-
- sal_Bool SAL_CALL canSetRealm( ) throw(RuntimeException);
- void SAL_CALL setRealm( const ::rtl::OUString& Realm ) throw(RuntimeException);
- sal_Bool SAL_CALL canSetUserName( ) throw(RuntimeException);
- void SAL_CALL setUserName( const ::rtl::OUString& UserName ) throw(RuntimeException);
- sal_Bool SAL_CALL canSetPassword( ) throw(RuntimeException);
- void SAL_CALL setPassword( const ::rtl::OUString& Password ) throw(RuntimeException);
- Sequence< RememberAuthentication > SAL_CALL getRememberPasswordModes( RememberAuthentication& Default ) throw(RuntimeException);
- void SAL_CALL setRememberPassword( RememberAuthentication Remember ) throw(RuntimeException);
- sal_Bool SAL_CALL canSetAccount( ) throw(RuntimeException);
- void SAL_CALL setAccount( const ::rtl::OUString& Account ) throw(RuntimeException);
- Sequence< RememberAuthentication > SAL_CALL getRememberAccountModes( RememberAuthentication& Default ) throw(RuntimeException);
- void SAL_CALL setRememberAccount( RememberAuthentication Remember ) throw(RuntimeException);
-
- ::rtl::OUString getUser() const { return m_sUser; }
- ::rtl::OUString getPassword() const { return m_sPassword; }
- sal_Bool getRememberPassword() const { return m_bRemberPassword; }
-};
-
//--------------------------------------------------------------------------
OAuthenticationContinuation::OAuthenticationContinuation()
- :m_bRemberPassword(sal_True) // TODO: a meaningfull default
+ :m_bRemberPassword(sal_True), // TODO: a meaningfull default
+ m_bCanSetUserName(sal_True)
{
}
@@ -260,7 +231,7 @@ sal_Bool SAL_CALL OAuthenticationContinuation::canSetUserName( ) throw(RuntimeE
{
// we alwas allow this, even if the database document is read-only. In this case,
// it's simply that the user cannot store the new user name.
- return sal_True;
+ return m_bCanSetUserName;
}
//--------------------------------------------------------------------------
diff --git a/dbaccess/source/inc/OAuthenticationContinuation.hxx b/dbaccess/source/inc/OAuthenticationContinuation.hxx
new file mode 100755
index 000000000000..d025ff343462
--- /dev/null
+++ b/dbaccess/source/inc/OAuthenticationContinuation.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 _DBACCESS_OAUTHENTICATIONCONTINUATION_HXX_
+#define _DBACCESS_OAUTHENTICATIONCONTINUATION_HXX_
+
+#include "dbadllapi.hxx"
+
+#include <com/sun/star/ucb/XInteractionSupplyAuthentication.hpp>
+#include <com/sun/star/ucb/RememberAuthentication.hpp>
+#include <com/sun/star/uno/Sequence.hxx>
+
+#include <tools/string.hxx>
+#include <comphelper/interaction.hxx>
+
+
+//........................................................................
+namespace dbaccess
+{
+//........................................................................
+
+class OOO_DLLPUBLIC_DBA OAuthenticationContinuation :
+ public comphelper::OInteraction< com::sun::star::ucb::XInteractionSupplyAuthentication >
+{
+ sal_Bool m_bRemberPassword : 1; // remember the password for this session ?
+
+ sal_Bool m_bCanSetUserName;
+ ::rtl::OUString m_sUser; // the user
+ ::rtl::OUString m_sPassword; // the user's password
+
+public:
+ OAuthenticationContinuation();
+
+ sal_Bool SAL_CALL canSetRealm( ) throw(com::sun::star::uno::RuntimeException);
+ void SAL_CALL setRealm( const ::rtl::OUString& Realm ) throw(com::sun::star::uno::RuntimeException);
+ sal_Bool SAL_CALL canSetUserName( ) throw(com::sun::star::uno::RuntimeException);
+ void SAL_CALL setUserName( const ::rtl::OUString& UserName ) throw(com::sun::star::uno::RuntimeException);
+ sal_Bool SAL_CALL canSetPassword( ) throw(com::sun::star::uno::RuntimeException);
+ void SAL_CALL setPassword( const ::rtl::OUString& Password ) throw(com::sun::star::uno::RuntimeException);
+ com::sun::star::uno::Sequence< com::sun::star::ucb::RememberAuthentication > SAL_CALL getRememberPasswordModes( com::sun::star::ucb::RememberAuthentication& Default ) throw(com::sun::star::uno::RuntimeException);
+ void SAL_CALL setRememberPassword( com::sun::star::ucb::RememberAuthentication Remember ) throw(com::sun::star::uno::RuntimeException);
+ sal_Bool SAL_CALL canSetAccount( ) throw(com::sun::star::uno::RuntimeException);
+ void SAL_CALL setAccount( const ::rtl::OUString& Account ) throw(com::sun::star::uno::RuntimeException);
+ com::sun::star::uno::Sequence< com::sun::star::ucb::RememberAuthentication > SAL_CALL getRememberAccountModes( com::sun::star::ucb::RememberAuthentication& Default ) throw(com::sun::star::uno::RuntimeException);
+ void SAL_CALL setRememberAccount( com::sun::star::ucb::RememberAuthentication Remember ) throw(com::sun::star::uno::RuntimeException);
+
+ void setCanChangeUserName( sal_Bool bVal ) { m_bCanSetUserName = bVal; }
+ ::rtl::OUString getUser() const { return m_sUser; }
+ ::rtl::OUString getPassword() const { return m_sPassword; }
+ sal_Bool getRememberPassword() const { return m_bRemberPassword; }
+};
+
+//........................................................................
+} // namespace dbaccess
+//........................................................................
+
+#endif // _DBACCESS_OAUTHENTICATIONCONTINUATION_HXX_
+
diff --git a/dbaccess/source/ui/dlg/DbAdminImpl.cxx b/dbaccess/source/ui/dlg/DbAdminImpl.cxx
index 57443342489c..797cb73eb021 100644..100755
--- a/dbaccess/source/ui/dlg/DbAdminImpl.cxx
+++ b/dbaccess/source/ui/dlg/DbAdminImpl.cxx
@@ -47,6 +47,7 @@
#include "optionalboolitem.hxx"
#include "propertysetitem.hxx"
#include "stringlistitem.hxx"
+#include "OAuthenticationContinuation.hxx"
/** === begin UNO includes === **/
#include <com/sun/star/beans/PropertyAttribute.hpp>
@@ -54,23 +55,32 @@
#include <com/sun/star/sdb/SQLContext.hpp>
#include <com/sun/star/sdbc/XDriver.hpp>
#include <com/sun/star/sdbc/XDriverAccess.hpp>
+#include <com/sun/star/task/XInteractionHandler.hpp>
+#include <com/sun/star/task/XInteractionRequest.hpp>
+#include <com/sun/star/ucb/XInteractionSupplyAuthentication2.hpp>
+#include <com/sun/star/ucb/AuthenticationRequest.hpp>
/** === end UNO includes === **/
+#include <comphelper/interaction.hxx>
#include <comphelper/property.hxx>
#include <comphelper/sequence.hxx>
+#include <comphelper/guarding.hxx>
#include <connectivity/DriversConfig.hxx>
#include <connectivity/dbexception.hxx>
#include <osl/file.hxx>
#include <svl/eitem.hxx>
#include <svl/intitem.hxx>
#include <svl/itempool.hxx>
-#include <svtools/logindlg.hxx>
#include <svl/poolitem.hxx>
#include <svl/stritem.hxx>
+#include <tools/urlobj.hxx>
+#include <tools/diagnose_ex.h>
#include <typelib/typedescription.hxx>
+#include <vcl/svapp.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/stdtext.hxx>
#include <vcl/waitobj.hxx>
+#include <vos/mutex.hxx>
#include <algorithm>
#include <functional>
@@ -81,6 +91,8 @@ namespace dbaui
using namespace ::dbtools;
using namespace com::sun::star::uno;
using namespace com::sun::star;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::task;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::sdb;
using namespace com::sun::star::lang;
@@ -256,35 +268,73 @@ sal_Bool ODbDataSourceAdministrationHelper::getCurrentSettings(Sequence< Propert
{
SFX_ITEMSET_GET(*m_pItemSetHelper->getOutputSet(), pName, SfxStringItem, DSID_NAME, sal_True);
- ::svt::LoginDialog aDlg(m_pParent,
- LF_NO_PATH | LF_NO_ACCOUNT | LF_NO_ERRORTEXT | LF_USERNAME_READONLY,
- String(), NULL);
+ Reference< XModel > xModel( getDataSourceOrModel( m_xDatasource ), UNO_QUERY_THROW );
+ ::comphelper::NamedValueCollection aArgs( xModel->getArgs() );
+ Reference< XInteractionHandler > xHandler( aArgs.getOrDefault( "InteractionHandler", Reference< XInteractionHandler >() ) );
- aDlg.SetName(pUser ? pUser->GetValue() : String());
- aDlg.ClearPassword(); // this will give the password field the focus
+ if ( !xHandler.is() )
+ {
+ // instantiate the default SDB interaction handler
+ xHandler = Reference< XInteractionHandler >( m_xORB->createInstance( SERVICE_TASK_INTERACTION_HANDLER ), UNO_QUERY );
+ if ( !xHandler.is() )
+ ShowServiceNotAvailableError(m_pParent->GetParent(), String(SERVICE_TASK_INTERACTION_HANDLER), sal_True);
+ }
String sName = pName ? pName->GetValue() : String();
String sLoginRequest(ModuleRes(STR_ENTER_CONNECTION_PASSWORD));
::rtl::OUString sTemp = sName;
sName = ::dbaui::getStrippedDatabaseName(NULL,sTemp);
if ( sName.Len() )
- sLoginRequest.SearchAndReplaceAscii("$name$", sName);
+ sLoginRequest.SearchAndReplaceAscii("$name$", sName);
else
{
sLoginRequest.SearchAndReplaceAscii("\"$name$\"", String());
sLoginRequest.SearchAndReplaceAscii("$name$", String()); // just to be sure that in other languages the string will be deleted
}
- aDlg.SetLoginRequestText(sLoginRequest);
-
- aDlg.SetSavePasswordText(ModuleRes(STR_REMEMBERPASSWORD_SESSION));
- aDlg.SetSavePassword(sal_True);
- sal_Int32 nResult = aDlg.Execute();
- if (nResult != RET_OK)
+ // the request
+ AuthenticationRequest aRequest;
+ aRequest.ServerName = sName;
+ aRequest.Diagnostic = sLoginRequest;
+ aRequest.HasRealm = aRequest.HasAccount = sal_False;
+ // aRequest.Realm
+ aRequest.HasUserName = pUser != 0;
+ aRequest.UserName = pUser ? rtl::OUString(pUser->GetValue()) : ::rtl::OUString();
+ aRequest.HasPassword = sal_True;
+ //aRequest.Password
+ aRequest.HasAccount = sal_False;
+ // aRequest.Account
+
+ comphelper::OInteractionRequest* pRequest = new comphelper::OInteractionRequest(makeAny(aRequest));
+ uno::Reference< XInteractionRequest > xRequest(pRequest);
+
+ // build an interaction request
+ // two continuations (Ok and Cancel)
+ ::rtl::Reference< comphelper::OInteractionAbort > pAbort = new comphelper::OInteractionAbort;
+ ::rtl::Reference< dbaccess::OAuthenticationContinuation > pAuthenticate = new dbaccess::OAuthenticationContinuation;
+ pAuthenticate->setCanChangeUserName( sal_False );
+ pAuthenticate->setRememberPassword( RememberAuthentication_SESSION );
+
+ // some knittings
+ pRequest->addContinuation(pAbort.get());
+ pRequest->addContinuation(pAuthenticate.get());
+
+ // handle the request
+ try
+ {
+ ::vos::OGuard aSolarGuard(Application::GetSolarMutex());
+ // release the mutex when calling the handler, it may need to lock the SolarMutex
+ xHandler->handle(xRequest);
+ }
+ catch(Exception&)
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ if (!pAuthenticate->wasSelected())
return sal_False;
- sPassword = aDlg.GetPassword();
- if (aDlg.IsSavePassword())
+ sPassword = pAuthenticate->getPassword();
+ if (pAuthenticate->getRememberPassword())
m_pItemSetHelper->getWriteOutputSet()->Put(SfxStringItem(DSID_PASSWORD, sPassword));
}
diff --git a/dbaccess/source/ui/uno/dbinteraction.cxx b/dbaccess/source/ui/uno/dbinteraction.cxx
index 0707f49d522b..39ac0e40e7cc 100644..100755
--- a/dbaccess/source/ui/uno/dbinteraction.cxx
+++ b/dbaccess/source/ui/uno/dbinteraction.cxx
@@ -67,9 +67,6 @@
#ifndef _COM_SUN_STAR_SDB_XINTERACTIONDOCUMENTSAVE_HPP_
#include <com/sun/star/sdb/XInteractionDocumentSave.hpp>
#endif
-#ifndef _SVTOOLS_LOGINDLG_HXX_
-#include <svtools/logindlg.hxx>
-#endif
#ifndef SFX_QUERYSAVEDOCUMENT_HXX
#include <sfx2/QuerySaveDocument.hxx>
#endif
diff --git a/default_images/oracleirm/res/irmprotecteditem.bmp b/default_images/oracleirm/res/irmprotecteditem.bmp
new file mode 100644
index 000000000000..e69de29bb2d1
--- /dev/null
+++ b/default_images/oracleirm/res/irmprotecteditem.bmp
diff --git a/desktop/inc/app.hxx b/desktop/inc/app.hxx
index 0ae632a6e968..486d280311d9 100644
--- a/desktop/inc/app.hxx
+++ b/desktop/inc/app.hxx
@@ -133,6 +133,10 @@ class Desktop : public Application
static sal_Bool IsFirstStartWizardNeeded();
static sal_Bool CheckExtensionDependencies();
+ void SynchronizeExtensionRepositories();
+ void SetSplashScreenText( const ::rtl::OUString& rText );
+ void SetSplashScreenProgress( sal_Int32 );
+
private:
// Bootstrap methods
::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > CreateApplicationServiceManager();
@@ -164,7 +168,6 @@ class Desktop : public Application
Reference<XStatusIndicator> m_rSplashScreen;
void OpenSplashScreen();
- void SetSplashScreenProgress(sal_Int32);
void CloseSplashScreen();
void EnableOleAutomation();
diff --git a/desktop/inc/deployment.hrc b/desktop/inc/deployment.hrc
index 7e4c21d3c5a4..370996c710ae 100644
--- a/desktop/inc/deployment.hrc
+++ b/desktop/inc/deployment.hrc
@@ -63,7 +63,6 @@
#define RID_IMG_JAVA_TYPELIB_HC (RID_DEPLOYMENT_COMPONENT_START+7)
#define RID_DEPLOYMENT_UNOPKG_START (RID_DEPLOYMENT_START+4000)
-#define RID_STR_UNOPKG_NO_SHARED_ALLOWED RID_DEPLOYMENT_UNOPKG_START
#define RID_STR_UNOPKG_ACCEPT_LIC_1 (RID_DEPLOYMENT_UNOPKG_START+1)
#define RID_STR_UNOPKG_ACCEPT_LIC_2 (RID_DEPLOYMENT_UNOPKG_START+2)
#define RID_STR_UNOPKG_ACCEPT_LIC_3 (RID_DEPLOYMENT_UNOPKG_START+3)
diff --git a/desktop/prj/build.lst b/desktop/prj/build.lst
index 6f611926a0df..8029b6ecc9f7 100644
--- a/desktop/prj/build.lst
+++ b/desktop/prj/build.lst
@@ -21,10 +21,9 @@ dt desktop\os2\source\applauncher nmake - p dt_applauncher dt_inc NULL
dt desktop\unx\source\officeloader nmake - u dt_officeloader_unx dt_inc NULL
dt desktop\source\pagein nmake - u dt_pagein dt_inc NULL
dt desktop\source\pkgchk\unopkg nmake - all dt_unopkg dt_dp_misc dt_app dt_inc dt_guiloader.w NULL
-dt desktop\source\deployment nmake - all dt_deployment dt_dp_manager dt_dp_registry dt_dp_registry_package dt_dp_registry_executable dt_dp_registry_help dt_dp_registry_script dt_dp_registry_sfwk dt_dp_registry_component dt_dp_registry_configuration dt_dp_migration dt_dp_unopkg dt_inc dt_dp_misc NULL
+dt desktop\source\deployment nmake - all dt_deployment dt_dp_manager dt_dp_registry dt_dp_registry_package dt_dp_registry_executable dt_dp_registry_help dt_dp_registry_script dt_dp_registry_sfwk dt_dp_registry_component dt_dp_registry_configuration dt_dp_unopkg dt_inc dt_dp_misc NULL
dt desktop\source\deployment\misc nmake - all dt_dp_misc dt_inc NULL
dt desktop\source\deployment\unopkg nmake - all dt_dp_unopkg dt_inc NULL
-dt desktop\source\deployment\migration nmake - all dt_dp_migration dt_inc NULL
dt desktop\source\deployment\gui nmake - all dt_dp_gui dt_dp_misc dt_inc NULL
dt desktop\source\deployment\manager nmake - all dt_dp_manager dt_inc NULL
dt desktop\source\deployment\registry nmake - all dt_dp_registry dt_inc NULL
diff --git a/desktop/scripts/soffice.sh b/desktop/scripts/soffice.sh
index ebbdeb9eabdb..0215f88d1ff0 100644
--- a/desktop/scripts/soffice.sh
+++ b/desktop/scripts/soffice.sh
@@ -120,9 +120,14 @@ trap 'kill -9 $!' TERM
wait $!
sd_ret=$?
-while [ $sd_ret -eq 79 ]
+while [ $sd_ret -eq 79 -o $sd_ret -eq 81 ]
do
- "$sd_prog/$sd_binary" ""$BOOTSTRAPVARS"" &
+ if [ $sd_ret -eq 79 ]; then
+ "$sd_prog/$sd_binary" ""$BOOTSTRAPVARS"" &
+ elif [ $sd_ret -eq 81 ]; then
+ "$sd_prog/$sd_binary" "$@" &
+ fi
+
wait $!
sd_ret=$?
done
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 6f00d47332ac..bba615e0ebbc 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -84,6 +84,7 @@
#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
#include <com/sun/star/task/XJobExecutor.hpp>
+#include <com/sun/star/task/XRestartManager.hpp>
#ifndef _COM_SUN_STAR_TASK_XJOBEXECUTOR_HPP_
#include <com/sun/star/task/XJob.hpp>
#endif
@@ -103,6 +104,7 @@
#include <vos/security.hxx>
#include <vos/ref.hxx>
#include <comphelper/processfactory.hxx>
+#include <comphelper/componentcontext.hxx>
#include <comphelper/configurationhelper.hxx>
#ifndef _UTL__HXX_
#include <unotools/configmgr.hxx>
@@ -140,6 +142,7 @@
#include <sfx2/sfx.hrc>
#include <ucbhelper/contentbroker.hxx>
#include <unotools/bootstrap.hxx>
+#include <cppuhelper/bootstrap.hxx>
#include "vos/process.hxx"
@@ -1409,10 +1412,13 @@ void Desktop::Main()
tools::InitTestToolLib();
RTL_LOGFILE_CONTEXT_TRACE( aLog, "} tools::InitTestToolLib" );
+ // Check if bundled or shared extensions were added /removed
+ // and process those extensions (has to be done before checking
+ // the extension dependencies!
+ SynchronizeExtensionRepositories();
bool bAbort = CheckExtensionDependencies();
if ( bAbort )
return;
-
// First Start Wizard allowed ?
if ( ! pCmdLineArgs->IsNoFirstStartWizard())
{
@@ -1456,7 +1462,6 @@ void Desktop::Main()
}
SetSplashScreenProgress(50);
-
// Backing Component
sal_Bool bCrashed = sal_False;
sal_Bool bExistsRecoveryData = sal_False;
@@ -1627,6 +1632,7 @@ void Desktop::Main()
// call Application::Execute to process messages in vcl message loop
RTL_LOGFILE_PRODUCT_TRACE( "PERFORMANCE - enter Application::Execute()" );
+ Reference< ::com::sun::star::task::XRestartManager > xRestartManager;
try
{
// The JavaContext contains an interaction handler which is used when
@@ -1634,7 +1640,10 @@ void Desktop::Main()
com::sun::star::uno::ContextLayer layer2(
new svt::JavaContext( com::sun::star::uno::getCurrentContext() ) );
- Execute();
+ ::comphelper::ComponentContext aContext( xSMgr );
+ xRestartManager.set( aContext.getSingleton( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.task.OfficeRestartManager" ) ) ), UNO_QUERY );
+ if ( !xRestartManager.is() || !xRestartManager->isRestartRequested( sal_True ) )
+ Execute();
}
catch(const com::sun::star::document::CorruptedFilterConfigurationException& exFilterCfg)
{
@@ -1647,6 +1656,9 @@ void Desktop::Main()
FatalError( MakeStartupErrorMessage(exAnyCfg.Message) );
}
+ // check whether the shutdown is caused by restart
+ sal_Bool bRestartRequested = ( xRestartManager.is() && xRestartManager->isRestartRequested( sal_True ) );
+
if (xGlobalBroadcaster.is())
{
css::document::EventObject aEvent;
@@ -1655,22 +1667,18 @@ void Desktop::Main()
}
delete pResMgr;
-
// Restore old value
if ( pCmdLineArgs->IsHeadless() )
SvtMiscOptions().SetUseSystemFileDialog( bUseSystemFileDialog );
// remove temp directory
RemoveTemporaryDirectory();
-
// The acceptors in the AcceptorMap must be released (in DeregisterServices)
// with the solar mutex unlocked, to avoid deadlock:
nAcquireCount = Application::ReleaseSolarMutex();
DeregisterServices();
Application::AcquireSolarMutex(nAcquireCount);
-
tools::DeInitTestToolLib();
-
// be sure that path/language options gets destroyed before
// UCB is deinitialized
RTL_LOGFILE_CONTEXT_TRACE( aLog, "-> dispose path/language options" );
@@ -1683,6 +1691,14 @@ void Desktop::Main()
RTL_LOGFILE_CONTEXT_TRACE( aLog, "<- deinit ucb" );
RTL_LOGFILE_CONTEXT_TRACE( aLog, "FINISHED WITH Destop::Main" );
+ if ( bRestartRequested )
+ {
+#ifdef MACOSX
+ DoRestart();
+#endif
+ // wouldn't the solution be more clean if SalMain returns the exit code to the system?
+ _exit( ExitHelper::E_NORMAL_RESTART );
+ }
}
IMPL_LINK( Desktop, ImplInitFilterHdl, ConvertData*, pData )
@@ -2933,6 +2949,14 @@ void Desktop::SetSplashScreenProgress(sal_Int32 iProgress)
}
}
+void Desktop::SetSplashScreenText( const ::rtl::OUString& rText )
+{
+ if( m_rSplashScreen.is() )
+ {
+ m_rSplashScreen->setText( rText );
+ }
+}
+
void Desktop::CloseSplashScreen()
{
if(m_rSplashScreen.is())
diff --git a/desktop/source/app/check_ext_deps.cxx b/desktop/source/app/check_ext_deps.cxx
index 8b73e0c2c525..664e63c7f6ca 100644..100755
--- a/desktop/source/app/check_ext_deps.cxx
+++ b/desktop/source/app/check_ext_deps.cxx
@@ -27,35 +27,202 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_desktop.hxx"
+#include "osl/file.hxx"
+#include "osl/mutex.hxx"
+
#include <rtl/bootstrap.hxx>
#include <rtl/ustring.hxx>
+#include <rtl/logfile.hxx>
+#include "cppuhelper/compbase3.hxx"
+
+#include "vcl/wrkwin.hxx"
+#include "vcl/timer.hxx"
+
#include <unotools/configmgr.hxx>
+#include "toolkit/helper/vclunohelper.hxx"
#include <comphelper/processfactory.hxx>
#include <comphelper/sequence.hxx>
#include <cppuhelper/bootstrap.hxx>
-
+#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/NamedValue.hpp>
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
+#include "com/sun/star/deployment/LicenseException.hpp"
+#include "com/sun/star/deployment/ui/LicenseDialog.hpp"
#include <com/sun/star/task/XJob.hpp>
#include <com/sun/star/task/XJobExecutor.hpp>
+#include <com/sun/star/task/XInteractionApprove.hpp>
+#include <com/sun/star/task/XInteractionAbort.hpp>
#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
+#include "com/sun/star/ui/dialogs/ExecutableDialogResults.hpp"
#include <com/sun/star/util/XChangesBatch.hpp>
#include "app.hxx"
+#include "../deployment/inc/dp_misc.h"
+
using rtl::OUString;
using namespace desktop;
using namespace com::sun::star;
-#define UNISTRING(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
+#define UNISTRING(s) OUString(RTL_CONSTASCII_USTRINGPARAM(s))
+
+namespace
+{
+//For use with XExtensionManager.synchronize
+class SilentCommandEnv
+ : public ::cppu::WeakImplHelper3< ucb::XCommandEnvironment,
+ task::XInteractionHandler,
+ ucb::XProgressHandler >
+{
+ Desktop *mpDesktop;
+ sal_Int32 mnLevel;
+ sal_Int32 mnProgress;
+
+public:
+ SilentCommandEnv( Desktop* pDesktop );
+ virtual ~SilentCommandEnv();
+
+ // XCommandEnvironment
+ virtual uno::Reference<task::XInteractionHandler > SAL_CALL
+ getInteractionHandler() throw (uno::RuntimeException);
+ virtual uno::Reference<ucb::XProgressHandler >
+ SAL_CALL getProgressHandler() throw (uno::RuntimeException);
+
+ // XInteractionHandler
+ virtual void SAL_CALL handle(
+ uno::Reference<task::XInteractionRequest > const & xRequest )
+ throw (uno::RuntimeException);
+
+ // XProgressHandler
+ virtual void SAL_CALL push( uno::Any const & Status )
+ throw (uno::RuntimeException);
+ virtual void SAL_CALL update( uno::Any const & Status )
+ throw (uno::RuntimeException);
+ virtual void SAL_CALL pop() throw (uno::RuntimeException);
+};
+
+//-----------------------------------------------------------------------------
+SilentCommandEnv::SilentCommandEnv( Desktop* pDesktop )
+{
+ mpDesktop = pDesktop;
+ mnLevel = 0;
+ mnProgress = 25;
+}
+
+//-----------------------------------------------------------------------------
+SilentCommandEnv::~SilentCommandEnv()
+{
+ mpDesktop->SetSplashScreenText( OUString() );
+}
+
+//-----------------------------------------------------------------------------
+Reference<task::XInteractionHandler> SilentCommandEnv::getInteractionHandler()
+ throw (uno::RuntimeException)
+{
+ return this;
+}
+
+//-----------------------------------------------------------------------------
+Reference<ucb::XProgressHandler> SilentCommandEnv::getProgressHandler()
+ throw (uno::RuntimeException)
+{
+ return this;
+}
+//-----------------------------------------------------------------------------
+// XInteractionHandler
+void SilentCommandEnv::handle( Reference< task::XInteractionRequest> const & xRequest )
+ throw (uno::RuntimeException)
+{
+ deployment::LicenseException licExc;
+
+ uno::Any request( xRequest->getRequest() );
+ bool bApprove = true;
+
+ if ( request >>= licExc )
+ {
+ uno::Reference< uno::XComponentContext > xContext = comphelper_getProcessComponentContext();
+ uno::Reference< ui::dialogs::XExecutableDialog > xDialog(
+ deployment::ui::LicenseDialog::create(
+ xContext, VCLUnoHelper::GetInterface( NULL ),
+ licExc.ExtensionName, licExc.Text ) );
+ sal_Int16 res = xDialog->execute();
+ if ( res == ui::dialogs::ExecutableDialogResults::CANCEL )
+ bApprove = false;
+ else if ( res == ui::dialogs::ExecutableDialogResults::OK )
+ bApprove = true;
+ else
+ {
+ OSL_ASSERT(0);
+ }
+ }
+
+ // We approve everything here
+ uno::Sequence< Reference< task::XInteractionContinuation > > conts( xRequest->getContinuations() );
+ Reference< task::XInteractionContinuation > const * pConts = conts.getConstArray();
+ sal_Int32 len = conts.getLength();
+
+ for ( sal_Int32 pos = 0; pos < len; ++pos )
+ {
+ if ( bApprove )
+ {
+ uno::Reference< task::XInteractionApprove > xInteractionApprove( pConts[ pos ], uno::UNO_QUERY );
+ if ( xInteractionApprove.is() )
+ xInteractionApprove->select();
+ }
+ else
+ {
+ uno::Reference< task::XInteractionAbort > xInteractionAbort( pConts[ pos ], uno::UNO_QUERY );
+ if ( xInteractionAbort.is() )
+ xInteractionAbort->select();
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// XProgressHandler
+void SilentCommandEnv::push( uno::Any const & rStatus )
+ throw (uno::RuntimeException)
+{
+ OUString sText;
+ mnLevel += 1;
+
+ if ( rStatus.hasValue() && ( rStatus >>= sText) )
+ {
+ if ( mnLevel <= 3 )
+ mpDesktop->SetSplashScreenText( sText );
+ else
+ mpDesktop->SetSplashScreenProgress( ++mnProgress );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void SilentCommandEnv::update( uno::Any const & rStatus )
+ throw (uno::RuntimeException)
+{
+ OUString sText;
+ if ( rStatus.hasValue() && ( rStatus >>= sText) )
+ {
+ mpDesktop->SetSplashScreenText( sText );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void SilentCommandEnv::pop() throw (uno::RuntimeException)
+{
+ mnLevel -= 1;
+}
+
+} // end namespace
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
static const OUString sConfigSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationProvider" ) );
static const OUString sAccessSrvc( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.configuration.ConfigurationUpdateAccess" ) );
-
//------------------------------------------------------------------------------
static sal_Int16 impl_showExtensionDialog( uno::Reference< uno::XComponentContext > &xContext )
{
@@ -79,55 +246,75 @@ static sal_Int16 impl_showExtensionDialog( uno::Reference< uno::XComponentContex
//------------------------------------------------------------------------------
// Check dependencies of all packages
//------------------------------------------------------------------------------
-static bool impl_checkDependencies( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+static bool impl_checkDependencies( const uno::Reference< uno::XComponentContext > &xContext )
{
- uno::Sequence< uno::Reference< deployment::XPackage > > packages;
+ uno::Sequence< uno::Sequence< uno::Reference< deployment::XPackage > > > xAllPackages;
+ uno::Reference< deployment::XExtensionManager > xExtensionManager = deployment::ExtensionManager::get( xContext );
+
+ if ( !xExtensionManager.is() )
+ {
+ OSL_ENSURE( 0, "Could not get the Extension Manager!" );
+ return true;
+ }
try {
- packages = xPackageManager->getDeployedPackages( uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment >() );
+ xAllPackages = xExtensionManager->getAllExtensions( uno::Reference< task::XAbortChannel >(),
+ uno::Reference< ucb::XCommandEnvironment >() );
}
- catch ( deployment::DeploymentException & ) { /* handleGeneralError(e.Cause);*/ }
- catch ( ucb::CommandFailedException & ) { /* handleGeneralError(e.Reason);*/ }
- catch ( ucb::CommandAbortedException & ) {}
+ catch ( deployment::DeploymentException & ) { return true; }
+ catch ( ucb::CommandFailedException & ) { return true; }
+ catch ( ucb::CommandAbortedException & ) { return true; }
catch ( lang::IllegalArgumentException & e ) {
throw uno::RuntimeException( e.Message, e.Context );
}
- for ( sal_Int32 i = 0; i < packages.getLength(); ++i )
+ sal_Int32 nMax = 2;
+#ifdef DEBUG
+ nMax = 3;
+#endif
+
+ for ( sal_Int32 i = 0; i < xAllPackages.getLength(); ++i )
{
- bool bRegistered = false;
- try {
- beans::Optional< beans::Ambiguous< sal_Bool > > option( packages[i]->isRegistered( uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment >() ) );
- if ( option.IsPresent )
- {
- ::beans::Ambiguous< sal_Bool > const & reg = option.Value;
- if ( reg.IsAmbiguous )
- bRegistered = false;
- else
- bRegistered = reg.Value ? true : false;
- }
- else
- bRegistered = false;
- }
- catch ( uno::RuntimeException & ) { throw; }
- catch ( uno::Exception & exc) {
- (void) exc;
- OSL_ENSURE( 0, ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
- bRegistered = false;
- }
+ uno::Sequence< uno::Reference< deployment::XPackage > > xPackageList = xAllPackages[i];
- if ( bRegistered )
+ for ( sal_Int32 j = 0; (j<nMax) && (j < xPackageList.getLength()); ++j )
{
- bool bDependenciesValid = false;
- try {
- bDependenciesValid = packages[i]->checkDependencies( uno::Reference< ucb::XCommandEnvironment >() );
- }
- catch ( deployment::DeploymentException & ) {}
- if ( ! bDependenciesValid )
+ uno::Reference< deployment::XPackage > xPackage = xPackageList[j];
+ if ( xPackage.is() )
{
- return false;
+ bool bRegistered = false;
+ try {
+ beans::Optional< beans::Ambiguous< sal_Bool > > option( xPackage->isRegistered( uno::Reference< task::XAbortChannel >(),
+ uno::Reference< ucb::XCommandEnvironment >() ) );
+ if ( option.IsPresent )
+ {
+ ::beans::Ambiguous< sal_Bool > const & reg = option.Value;
+ if ( reg.IsAmbiguous )
+ bRegistered = false;
+ else
+ bRegistered = reg.Value ? true : false;
+ }
+ else
+ bRegistered = false;
+ }
+ catch ( uno::RuntimeException & ) { throw; }
+ catch ( uno::Exception & exc) {
+ (void) exc;
+ OSL_ENSURE( 0, ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
+ }
+
+ if ( bRegistered )
+ {
+ bool bDependenciesValid = false;
+ try {
+ bDependenciesValid = xPackage->checkDependencies( uno::Reference< ucb::XCommandEnvironment >() );
+ }
+ catch ( deployment::DeploymentException & ) {}
+ if ( ! bDependenciesValid )
+ {
+ return false;
+ }
+ }
}
}
}
@@ -164,31 +351,11 @@ static void impl_setNeedsCompatCheck()
static bool impl_check()
{
uno::Reference< uno::XComponentContext > xContext = comphelper_getProcessComponentContext();
- uno::Reference< deployment::XPackageManager > xManager;
- bool bDependenciesValid = true;
-
- try {
- xManager = deployment::thePackageManagerFactory::get( xContext )->getPackageManager( UNISTRING("user") );
- }
- catch ( ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
- if ( xManager.is() )
- bDependenciesValid = impl_checkDependencies( xManager );
-
- if ( bDependenciesValid )
- {
- try {
- xManager = deployment::thePackageManagerFactory::get( xContext )->getPackageManager( UNISTRING("shared") );
- }
- catch ( ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- if ( xManager.is() )
- bDependenciesValid = impl_checkDependencies( xManager );
- }
+ bool bDependenciesValid = impl_checkDependencies( xContext );
short nRet = 0;
+
if ( !bDependenciesValid )
nRet = impl_showExtensionDialog( xContext );
@@ -202,7 +369,7 @@ static bool impl_check()
}
//------------------------------------------------------------------------------
-// to check, if we need checking the dependencies of the extensions again, we compare
+// to check if we need checking the dependencies of the extensions again, we compare
// the build id of the office with the one of the last check
//------------------------------------------------------------------------------
static bool impl_needsCompatCheck()
@@ -235,6 +402,9 @@ static bool impl_needsCompatCheck()
pset->setPropertyValue( OUString::createFromAscii("LastCompatibilityCheckID"), result );
Reference< util::XChangesBatch >( pset, UNO_QUERY_THROW )->commitChanges();
}
+#ifdef DEBUG
+ bNeedsCheck = true;
+#endif
}
catch (const Exception&) {}
@@ -254,3 +424,8 @@ sal_Bool Desktop::CheckExtensionDependencies()
return bAbort;
}
+void Desktop::SynchronizeExtensionRepositories()
+{
+ RTL_LOGFILE_CONTEXT(aLog,"desktop (jl) ::Desktop::SynchronizeExtensionRepositories");
+ dp_misc::syncRepositories( new SilentCommandEnv( this ) );
+}
diff --git a/desktop/source/app/makefile.mk b/desktop/source/app/makefile.mk
index d9db7c163481..085d8520e7ad 100644
--- a/desktop/source/app/makefile.mk
+++ b/desktop/source/app/makefile.mk
@@ -35,11 +35,24 @@ ENABLE_EXCEPTIONS=TRUE
# --- Settings -----------------------------------------------------
.INCLUDE : settings.mk
+.INCLUDE : ../deployment/inc/dp_misc.mk
.IF "$(ENABLE_GNOMEVFS)"=="TRUE"
CFLAGS+=-DGNOME_VFS_ENABLED
.ENDIF
+# .IF "$(OS)" == "WNT"
+# .IF "$(COM)" == "GCC"
+# DEPLOYMENTMISCLIB = -ldeploymentmisc$(DLLPOSTFIX)
+# .ELSE
+# DEPLOYMENTMISCLIB = ideploymentmisc$(DLLPOSTFIX).lib
+# .ENDIF
+# .ELIF "$(OS)" == "OS2"
+# DEPLOYMENTMISCLIB = ideploymentmisc$(DLLPOSTFIX).lib
+# .ELSE
+# DEPLOYMENTMISCLIB = -ldeploymentmisc$(DLLPOSTFIX)
+# .ENDIF
+
SHL1TARGET = sofficeapp
SHL1OBJS = \
$(SLO)$/app.obj \
@@ -67,6 +80,7 @@ SHL1STDLIBS = \
$(COMPHELPERLIB) \
$(CPPUHELPERLIB) \
$(CPPULIB) \
+ $(DEPLOYMENTMISCLIB) \
$(I18NISOLANGLIB) \
$(SALLIB) \
$(SFXLIB) \
diff --git a/desktop/source/deployment/dp_services.cxx b/desktop/source/deployment/dp_services.cxx
index c83a62bfd17e..f7ebf66355ba 100644
--- a/desktop/source/deployment/dp_services.cxx
+++ b/desktop/source/deployment/dp_services.cxx
@@ -28,7 +28,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_desktop.hxx"
-#define COMPHELPER_SERVICEDECL_COMPONENT_HELPER_MAX_ARGS 11
+#define COMPHELPER_SERVICEDECL_COMPONENT_HELPER_MAX_ARGS 12
#include "comphelper/servicedecl.hxx"
using namespace com::sun::star;
@@ -69,13 +69,11 @@ namespace factory {
extern sdecl::ServiceDecl const serviceDecl;
bool singleton_entries( uno::Reference<registry::XRegistryKey> const& );
}
-}
-
-namespace dp_log {
extern sdecl::ServiceDecl const serviceDecl;
+bool singleton_entries( uno::Reference<registry::XRegistryKey> const& );
}
-namespace dp_migration {
+namespace dp_log {
extern sdecl::ServiceDecl const serviceDecl;
}
@@ -108,10 +106,11 @@ sal_Bool SAL_CALL component_writeInfo(
dp_registry::backend::executable::serviceDecl,
dp_manager::factory::serviceDecl,
dp_log::serviceDecl,
- dp_migration::serviceDecl,
- dp_info::serviceDecl ) &&
+ dp_info::serviceDecl,
+ dp_manager::serviceDecl) &&
dp_manager::factory::singleton_entries( pRegistryKey ) &&
- dp_info::singleton_entries( pRegistryKey );
+ dp_info::singleton_entries( pRegistryKey ) &&
+ dp_manager::singleton_entries( pRegistryKey);
}
void * SAL_CALL component_getFactory(
@@ -129,8 +128,8 @@ void * SAL_CALL component_getFactory(
dp_registry::backend::executable::serviceDecl,
dp_manager::factory::serviceDecl,
dp_log::serviceDecl,
- dp_migration::serviceDecl,
- dp_info::serviceDecl );
+ dp_info::serviceDecl,
+ dp_manager::serviceDecl);
}
} // extern "C"
diff --git a/desktop/source/deployment/gui/dp_gui.h b/desktop/source/deployment/gui/dp_gui.h
index 85e6eaef3544..092b232ce96d 100644
--- a/desktop/source/deployment/gui/dp_gui.h
+++ b/desktop/source/deployment/gui/dp_gui.h
@@ -79,21 +79,18 @@ enum PackageState { REGISTERED, NOT_REGISTERED, AMBIGUOUS, NOT_AVAILABLE };
class SelectedPackage: public salhelper::SimpleReferenceObject {
public:
SelectedPackage() {}
- SelectedPackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> &xPackageManager )
- : m_xPackage( xPackage ),
- m_xPackageManager( xPackageManager )
+ SelectedPackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> &xPackage)
+ : m_xPackage( xPackage )
{}
virtual ~SelectedPackage();
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> getPackage() const { return m_xPackage; }
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> getPackageManager() const { return m_xPackageManager; }
+
private:
SelectedPackage(SelectedPackage &); // not defined
void operator =(SelectedPackage &); // not defined
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> m_xPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> m_xPackageManager;
};
} // namespace dp_gui
diff --git a/desktop/source/deployment/gui/dp_gui.hrc b/desktop/source/deployment/gui/dp_gui.hrc
index 1d2f4869cc7f..5f52b042edf3 100644..100755
--- a/desktop/source/deployment/gui/dp_gui.hrc
+++ b/desktop/source/deployment/gui/dp_gui.hrc
@@ -153,6 +153,7 @@
#define RID_STR_REMOVING_PACKAGES (RID_DEPLOYMENT_GUI_START+86)
#define RID_STR_ENABLING_PACKAGES (RID_DEPLOYMENT_GUI_START+87)
#define RID_STR_DISABLING_PACKAGES (RID_DEPLOYMENT_GUI_START+88)
+#define RID_STR_ACCEPT_LICENSE (RID_DEPLOYMENT_GUI_START+89)
#define RID_STR_INSTALL_FOR_ALL (RID_DEPLOYMENT_GUI_START+90)
#define RID_STR_INSTALL_FOR_ME (RID_DEPLOYMENT_GUI_START+91)
@@ -161,6 +162,7 @@
#define RID_STR_EXIT_BTN (RID_DEPLOYMENT_GUI_START+94)
#define RID_STR_NO_ADMIN_PRIVILEGE (RID_DEPLOYMENT_GUI_START+95)
#define RID_STR_ERROR_MISSING_DEPENDENCIES (RID_DEPLOYMENT_GUI_START+96)
+#define RID_STR_ERROR_MISSING_LICENSE (RID_DEPLOYMENT_GUI_START+97)
#define WARNINGBOX_CONCURRENTINSTANCE (RID_DEPLOYMENT_GUI_START+100)
@@ -172,7 +174,6 @@
#define RID_WARNINGBOX_DISABLE_SHARED_EXTENSION (RID_DEPLOYMENT_GUI_START+106)
#define RID_DLG_LICENSE RID_DEPLOYMENT_LICENSE_START
-#define WARNINGBOX_NOSHAREDALLOWED (RID_DEPLOYMENT_LICENSE_START+1)
diff --git a/desktop/source/deployment/gui/dp_gui_dialog.src b/desktop/source/deployment/gui/dp_gui_dialog.src
index 79c0c5172030..15823288ee20 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_dialog.src
+++ b/desktop/source/deployment/gui/dp_gui_dialog.src
@@ -72,6 +72,11 @@ String RID_STR_DISABLING_PACKAGES
Text [ en-US ] = "Disabling %EXTENSION_NAME";
};
+String RID_STR_ACCEPT_LICENSE
+{
+ Text [ en-US ] = "Accept license for %EXTENSION_NAME";
+};
+
String RID_STR_INSTALL_FOR_ALL
{
Text [ en-US ] = "~For all users";
@@ -109,6 +114,11 @@ String RID_STR_ERROR_MISSING_DEPENDENCIES
Text [ en-US ] = "The extension cannot be enabled as the following system dependencies are not fulfilled:";
};
+String RID_STR_ERROR_MISSING_LICENSE
+{
+ Text [ en-US ] = "This extension is disabled because you haven't accepted the license yet.\n";
+};
+
// Dialog layout
// ---------------------------------------------------
// row 1 | multi line edit
@@ -131,7 +141,7 @@ String RID_STR_ERROR_MISSING_DEPENDENCIES
#define ROW1_Y RSC_SP_DLG_INNERBORDER_TOP
#define ROW1_HEIGHT 16*RSC_CD_FIXEDTEXT_HEIGHT
#define ROW2_Y ROW1_Y+ROW1_HEIGHT+RSC_SP_CTRL_GROUP_Y
-#define ROW2_HEIGHT 2*RSC_CD_FIXEDTEXT_HEIGHT
+#define ROW2_HEIGHT 3*RSC_CD_FIXEDTEXT_HEIGHT
#define ROW3_Y ROW2_Y+ROW2_HEIGHT+RSC_SP_CTRL_GROUP_Y
#define ROW3_HEIGHT 3*RSC_CD_FIXEDTEXT_HEIGHT
#define ROW4_Y ROW3_Y+ROW3_HEIGHT+RSC_SP_CTRL_GROUP_Y
@@ -282,14 +292,6 @@ ModalDialog RID_DLG_LICENSE
-WarningBox WARNINGBOX_NOSHAREDALLOWED
-{
- Buttons = WB_OK ;
- DefButton = WB_DEF_OK;
- Message[ en-US ] ="The extension \'%NAME\' cannot be installed under \"%PRODUCTNAME Extensions\", because "
- "every user has to agree to the license agreement of the extension. The extension will not be installed.";
-};
-
WarningBox RID_WARNINGBOX_INSTALL_EXTENSION {
Buttons = WB_OK_CANCEL;
DefButton = WB_DEF_OK;
diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.cxx b/desktop/source/deployment/gui/dp_gui_dialog2.cxx
index 71fda4d9b3e0..1a66ff38e4a4 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_dialog2.cxx
+++ b/desktop/source/deployment/gui/dp_gui_dialog2.cxx
@@ -37,7 +37,10 @@
#include "dp_gui_extlistbox.hxx"
#include "dp_gui_shared.hxx"
#include "dp_gui_theextmgr.hxx"
+#include "dp_gui_extensioncmdqueue.hxx"
#include "dp_misc.h"
+#include "dp_update.hxx"
+#include "dp_identifier.hxx"
#include "vcl/ctrl.hxx"
#include "vcl/menu.hxx"
@@ -74,8 +77,6 @@
#include "com/sun/star/uno/Any.hxx"
#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
-
#include <map>
#include <vector>
#include <boost/shared_ptr.hpp>
@@ -108,17 +109,6 @@ struct StrAllFiles : public rtl::StaticWithInit< const OUString, StrAllFiles >
};
//------------------------------------------------------------------------------
-UpdateListEntry::UpdateListEntry( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager ) :
- m_xPackage( xPackage ),
- m_xPackageManager( xPackageManager )
-{}
-
-//------------------------------------------------------------------------------
-UpdateListEntry::~UpdateListEntry()
-{}
-
-//------------------------------------------------------------------------------
// ExtBoxWithBtns_Impl
//------------------------------------------------------------------------------
@@ -279,6 +269,9 @@ void ExtBoxWithBtns_Impl::SetButtonPos( const Rectangle& rRect )
// -----------------------------------------------------------------------
void ExtBoxWithBtns_Impl::SetButtonStatus( const TEntry_Impl pEntry )
{
+ bool bShowOptionBtn = true;
+
+ pEntry->m_bHasButtons = false;
if ( ( pEntry->m_eState == REGISTERED ) || ( pEntry->m_eState == NOT_AVAILABLE ) )
{
m_pEnableBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) );
@@ -288,26 +281,36 @@ void ExtBoxWithBtns_Impl::SetButtonStatus( const TEntry_Impl pEntry )
{
m_pEnableBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) );
m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_ENABLE );
+ bShowOptionBtn = false;
}
- if ( ( pEntry->m_eState == NOT_AVAILABLE ) || pEntry->m_bMissingDeps )
+ if ( ( !pEntry->m_bUser || ( pEntry->m_eState == NOT_AVAILABLE ) || pEntry->m_bMissingDeps )
+ && !pEntry->m_bMissingLic )
m_pEnableBtn->Hide();
else
{
m_pEnableBtn->Enable( !pEntry->m_bLocked );
m_pEnableBtn->Show();
+ pEntry->m_bHasButtons = true;
}
- if ( pEntry->m_bHasOptions )
+ if ( pEntry->m_bHasOptions && bShowOptionBtn )
{
m_pOptionsBtn->Enable( pEntry->m_bHasOptions );
m_pOptionsBtn->Show();
+ pEntry->m_bHasButtons = true;
}
else
m_pOptionsBtn->Hide();
- m_pRemoveBtn->Show();
- m_pRemoveBtn->Enable( !pEntry->m_bLocked );
+ if ( pEntry->m_bUser || pEntry->m_bShared )
+ {
+ m_pRemoveBtn->Enable( !pEntry->m_bLocked );
+ m_pRemoveBtn->Show();
+ pEntry->m_bHasButtons = true;
+ }
+ else
+ m_pRemoveBtn->Hide();
}
// -----------------------------------------------------------------------
@@ -394,17 +397,13 @@ void ExtBoxWithBtns_Impl::MouseButtonDown( const MouseEvent& rMEvt )
switch( ShowPopupMenu( aMousePos, nPos ) )
{
case CMD_NONE: break;
- case CMD_ENABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage, true );
+ case CMD_ENABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, true );
break;
- case CMD_DISABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage, false );
+ case CMD_DISABLE: m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, false );
break;
- case CMD_UPDATE: m_pParent->updatePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage );
+ case CMD_UPDATE: m_pParent->updatePackage( GetEntryData( nPos )->m_xPackage );
break;
- case CMD_REMOVE: m_pParent->removePackage( GetEntryData( nPos )->m_xPackageManager,
- GetEntryData( nPos )->m_xPackage );
+ case CMD_REMOVE: m_pParent->removePackage( GetEntryData( nPos )->m_xPackage );
break;
}
}
@@ -506,11 +505,14 @@ IMPL_LINK( ExtBoxWithBtns_Impl, HandleEnableBtn, void*, EMPTYARG )
if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
{
TEntry_Impl pEntry = GetEntryData( nActive );
- const bool bEnable( pEntry->m_eState != REGISTERED );
- m_pParent->enablePackage( pEntry->m_xPackageManager,
- pEntry->m_xPackage,
- bEnable );
+ if ( pEntry->m_bMissingLic )
+ m_pParent->acceptLicense( pEntry->m_xPackage );
+ else
+ {
+ const bool bEnable( pEntry->m_eState != REGISTERED );
+ m_pParent->enablePackage( pEntry->m_xPackage, bEnable );
+ }
}
return 1;
@@ -524,8 +526,7 @@ IMPL_LINK( ExtBoxWithBtns_Impl, HandleRemoveBtn, void*, EMPTYARG )
if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
{
TEntry_Impl pEntry = GetEntryData( nActive );
- m_pParent->removePackage( pEntry->m_xPackageManager,
- pEntry->m_xPackage );
+ m_pParent->removePackage( pEntry->m_xPackage );
}
return 1;
@@ -571,21 +572,21 @@ String DialogHelper::getResourceString( USHORT id )
}
//------------------------------------------------------------------------------
-bool DialogHelper::IsSharedPkgMgr( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+bool DialogHelper::IsSharedPkgMgr( const uno::Reference< deployment::XPackage > &xPackage )
{
- if ( xPackageManager->getContext().equals( OUSTR("shared") ) )
+ if ( xPackage->getRepositoryName().equals( OUSTR("shared") ) )
return true;
else
return false;
}
//------------------------------------------------------------------------------
-bool DialogHelper::continueOnSharedExtension( const uno::Reference< deployment::XPackageManager > &xPackageManager,
+bool DialogHelper::continueOnSharedExtension( const uno::Reference< deployment::XPackage > &xPackage,
Window *pParent,
const USHORT nResID,
bool &bHadWarning )
{
- if ( !bHadWarning && IsSharedPkgMgr( xPackageManager ) )
+ if ( !bHadWarning && IsSharedPkgMgr( xPackage ) )
{
const ::vos::OGuard guard( Application::GetSolarMutex() );
WarningBox aInfoBox( pParent, getResId( nResID ) );
@@ -759,17 +760,16 @@ void ExtMgrDialog::setGetExtensionsURL( const ::rtl::OUString &rURL )
//------------------------------------------------------------------------------
long ExtMgrDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager )
+ bool bLicenseMissing )
{
m_aUpdateBtn.Enable( true );
- return m_pExtensionBox->addEntry( xPackage, xPackageManager );
+ return m_pExtensionBox->addEntry( xPackage, bLicenseMissing );
}
//------------------------------------------------------------------------------
-void ExtMgrDialog::prepareChecking( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+void ExtMgrDialog::prepareChecking()
{
- if ( xPackageManager.is() )
- m_pExtensionBox->prepareChecking( xPackageManager );
+ m_pExtensionBox->prepareChecking();
}
//------------------------------------------------------------------------------
@@ -793,68 +793,82 @@ bool ExtMgrDialog::removeExtensionWarn( const OUString &rExtensionName ) const
}
//------------------------------------------------------------------------------
-bool ExtMgrDialog::enablePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage,
+bool ExtMgrDialog::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
bool bEnable )
{
- if ( !xPackageManager.is() || !xPackage.is() )
+ if ( !xPackage.is() )
return false;
if ( bEnable )
{
- if ( ! continueOnSharedExtension( xPackageManager, this, RID_WARNINGBOX_ENABLE_SHARED_EXTENSION, m_bEnableWarning ) )
+ if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_ENABLE_SHARED_EXTENSION, m_bEnableWarning ) )
return false;
}
else
{
- if ( ! continueOnSharedExtension( xPackageManager, this, RID_WARNINGBOX_DISABLE_SHARED_EXTENSION, m_bDisableWarning ) )
+ if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_DISABLE_SHARED_EXTENSION, m_bDisableWarning ) )
return false;
}
- m_pManager->enablePackage( xPackage, bEnable );
+ m_pManager->getCmdQueue()->enableExtension( xPackage, bEnable );
return true;
}
//------------------------------------------------------------------------------
-bool ExtMgrDialog::removePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage )
+bool ExtMgrDialog::removePackage( const uno::Reference< deployment::XPackage > &xPackage )
{
- if ( !xPackageManager.is() || !xPackage.is() )
+ if ( !xPackage.is() )
return false;
- if ( !IsSharedPkgMgr( xPackageManager ) || m_bDeleteWarning )
+ if ( !IsSharedPkgMgr( xPackage ) || m_bDeleteWarning )
{
if ( ! removeExtensionWarn( xPackage->getDisplayName() ) )
return false;
}
- if ( ! continueOnSharedExtension( xPackageManager, this, RID_WARNINGBOX_REMOVE_SHARED_EXTENSION, m_bDeleteWarning ) )
+ if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_REMOVE_SHARED_EXTENSION, m_bDeleteWarning ) )
return false;
- m_pManager->removePackage( xPackageManager, xPackage );
+ m_pManager->getCmdQueue()->removeExtension( xPackage );
return true;
}
//------------------------------------------------------------------------------
-bool ExtMgrDialog::updatePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage )
+bool ExtMgrDialog::updatePackage( const uno::Reference< deployment::XPackage > &xPackage )
{
- if ( !xPackageManager.is() || !xPackage.is() )
+ if ( !xPackage.is() )
return false;
- std::vector< TUpdateListEntry > vEntries;
- TUpdateListEntry pEntry( new UpdateListEntry( xPackage, xPackageManager ) );
- vEntries.push_back( pEntry );
+ // get the extension with highest version
+ uno::Sequence<uno::Reference<deployment::XPackage> > seqExtensions =
+ m_pManager->getExtensionManager()->getExtensionsWithSameIdentifier(
+ dp_misc::getIdentifier(xPackage), xPackage->getName(), uno::Reference<ucb::XCommandEnvironment>());
+ uno::Reference<deployment::XPackage> extension =
+ dp_misc::getExtensionWithHighestVersion(seqExtensions);
+ OSL_ASSERT(extension.is());
+ std::vector< css::uno::Reference< css::deployment::XPackage > > vEntries;
+ vEntries.push_back(extension);
- m_pManager->updatePackages( vEntries );
+ m_pManager->getCmdQueue()->checkForUpdates( vEntries );
return true;
}
//------------------------------------------------------------------------------
-uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+bool ExtMgrDialog::acceptLicense( const uno::Reference< deployment::XPackage > &xPackage )
+{
+ if ( !xPackage.is() )
+ return false;
+
+ m_pManager->getCmdQueue()->acceptLicense( xPackage );
+
+ return true;
+}
+
+//------------------------------------------------------------------------------
+uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker()
{
const uno::Any mode( static_cast< sal_Int16 >( ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE ) );
const uno::Reference< uno::XComponentContext > xContext( m_pManager->getContext() );
@@ -872,7 +886,8 @@ uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker( const uno::Reference< de
t_string2string title2filter;
OUString sDefaultFilter( StrAllFiles::get() );
- const uno::Sequence< uno::Reference< deployment::XPackageTypeInfo > > packageTypes( xPackageManager->getSupportedPackageTypes() );
+ const uno::Sequence< uno::Reference< deployment::XPackageTypeInfo > > packageTypes(
+ m_pManager->getExtensionManager()->getSupportedPackageTypes() );
for ( sal_Int32 pos = 0; pos < packageTypes.getLength(); ++pos )
{
@@ -1026,8 +1041,7 @@ IMPL_LINK( ExtMgrDialog, HandleAddBtn, void*, EMPTYARG )
{
setBusy( true );
- uno::Reference< deployment::XPackageManager > xUserPkgMgr = m_pManager->getUserPkgMgr();
- uno::Sequence< OUString > aFileList = raiseAddPicker( xUserPkgMgr );
+ uno::Sequence< OUString > aFileList = raiseAddPicker();
if ( aFileList.getLength() )
{
@@ -1298,23 +1312,22 @@ UpdateRequiredDialog::~UpdateRequiredDialog()
//------------------------------------------------------------------------------
long UpdateRequiredDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager )
+ bool bLicenseMissing )
{
// We will only add entries to the list with unsatisfied dependencies
- if ( !checkDependencies( xPackage ) )
+ if ( !bLicenseMissing && !checkDependencies( xPackage ) )
{
- m_bHasLockedEntries |= (bool) xPackageManager->isReadOnly();
+ m_bHasLockedEntries |= m_pManager->isReadOnly( xPackage );
m_aUpdateBtn.Enable( true );
- return m_pExtensionBox->addEntry( xPackage, xPackageManager );
+ return m_pExtensionBox->addEntry( xPackage );
}
return 0;
}
//------------------------------------------------------------------------------
-void UpdateRequiredDialog::prepareChecking( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+void UpdateRequiredDialog::prepareChecking()
{
- if ( xPackageManager.is() )
- m_pExtensionBox->prepareChecking( xPackageManager );
+ m_pExtensionBox->prepareChecking();
}
//------------------------------------------------------------------------------
@@ -1331,11 +1344,10 @@ void UpdateRequiredDialog::checkEntries()
}
//------------------------------------------------------------------------------
-bool UpdateRequiredDialog::enablePackage( const uno::Reference< deployment::XPackageManager > &,
- const uno::Reference< deployment::XPackage > &xPackage,
- bool bEnable )
+bool UpdateRequiredDialog::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
+ bool bEnable )
{
- m_pManager->enablePackage( xPackage, bEnable );
+ m_pManager->getCmdQueue()->enableExtension( xPackage, bEnable );
return true;
}
@@ -1451,20 +1463,18 @@ IMPL_LINK( UpdateRequiredDialog, HandleUpdateBtn, void*, EMPTYARG )
{
::osl::ClearableMutexGuard aGuard( m_aMutex );
- std::vector< TUpdateListEntry > vUpdateEntries;
+ std::vector< uno::Reference< deployment::XPackage > > vUpdateEntries;
sal_Int32 nCount = m_pExtensionBox->GetEntryCount();
for ( sal_Int32 i = 0; i < nCount; ++i )
{
TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( i );
- TUpdateListEntry pUpdateEntry( new UpdateListEntry( pEntry->m_xPackage,
- pEntry->m_xPackageManager ) );
- vUpdateEntries.push_back( pUpdateEntry );
+ vUpdateEntries.push_back( pEntry->m_xPackage );
}
aGuard.clear();
- m_pManager->updatePackages( vUpdateEntries );
+ m_pManager->getCmdQueue()->checkForUpdates( vUpdateEntries );
return 1;
}
@@ -1719,7 +1729,7 @@ void UpdateRequiredDialog::disableAllEntries()
for ( long nIndex = 0; nIndex < nCount; nIndex++ )
{
TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nIndex );
- enablePackage( pEntry->m_xPackageManager, pEntry->m_xPackage, false );
+ enablePackage( pEntry->m_xPackage, false );
}
setBusy( false );
diff --git a/desktop/source/deployment/gui/dp_gui_dialog2.hxx b/desktop/source/deployment/gui/dp_gui_dialog2.hxx
index d5e939ace8a9..f0a85cce98c0 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_dialog2.hxx
+++ b/desktop/source/deployment/gui/dp_gui_dialog2.hxx
@@ -46,7 +46,6 @@
#include "com/sun/star/awt/XWindow.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
#include "com/sun/star/uno/XComponentContext.hpp"
#include "com/sun/star/ui/dialogs/XExecutableDialog.hpp"
#include "com/sun/star/util/XModifyListener.hpp"
@@ -82,16 +81,16 @@ public:
virtual void updateProgress( const long nProgress ) = 0;
virtual void updatePackageInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) = 0;
- virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > & ) = 0;
+ virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
+ bool bLicenseMissing = false ) = 0;
- virtual void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager ) = 0;
+ virtual void prepareChecking() = 0;
virtual void checkEntries() = 0;
static ResId getResId( USHORT nId );
static String getResourceString( USHORT id );
- static bool IsSharedPkgMgr( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &);
- static bool continueOnSharedExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &,
+ static bool IsSharedPkgMgr( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &);
+ static bool continueOnSharedExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
Window *pParent,
const USHORT nResID,
bool &bHadWarning );
@@ -160,19 +159,17 @@ public:
void setGetExtensionsURL( const ::rtl::OUString &rURL );
virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > & );
- bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
+ bool bLicenseMissing = false );
+ bool enablePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
bool bEnable );
- bool removePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- bool updatePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool removePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool updatePackage(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool acceptLicense(const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- virtual void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ virtual void prepareChecking();
virtual void checkEntries();
- ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker();
};
//==============================================================================
@@ -235,17 +232,14 @@ public:
void selectEntry( long nPos );
virtual long addPackageToList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > & );
- bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- bool bEnable );
- bool updatePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
+ bool bLicenseMissing = false );
+ bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage, bool bEnable );
+ bool updatePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- virtual void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ virtual void prepareChecking();
virtual void checkEntries();
- ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > raiseAddPicker();
bool installForAllUsers( bool &bInstallForAll ) const;
bool installExtensionWarn( const ::rtl::OUString &rExtensionURL ) const;
diff --git a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
index 58a5ab1c19ea..8bd8a6191201 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
+++ b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.cxx
@@ -36,10 +36,10 @@
#include <cstddef>
#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/beans/NamedValue.hpp"
#include "com/sun/star/deployment/DependencyException.hpp"
#include "com/sun/star/deployment/LicenseException.hpp"
-#include "com/sun/star/deployment/LicenseIndividualAgreementException.hpp"
#include "com/sun/star/deployment/VersionException.hpp"
#include "com/sun/star/deployment/InstallException.hpp"
#include "com/sun/star/deployment/PlatformException.hpp"
@@ -48,7 +48,6 @@
#include "com/sun/star/deployment/DeploymentException.hpp"
#include "com/sun/star/deployment/UpdateInformationProvider.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
#include "com/sun/star/task/XAbortChannel.hpp"
#include "com/sun/star/task/XInteractionAbort.hpp"
@@ -77,6 +76,7 @@
#include "comphelper/anytostring.hxx"
#include "vcl/msgbox.hxx"
#include "toolkit/helper/vclunohelper.hxx"
+#include "comphelper/processfactory.hxx"
#include "dp_gui.h"
#include "dp_gui_thread.hxx"
@@ -110,12 +110,15 @@ using ::rtl::OUString;
namespace {
-OUString getVersion( const uno::Reference< deployment::XPackage > &rPackage )
+OUString getVersion( OUString const & sVersion )
{
- OUString sVersion( rPackage->getVersion());
return ( sVersion.getLength() == 0 ) ? OUString( RTL_CONSTASCII_USTRINGPARAM( "0" ) ) : sVersion;
}
+OUString getVersion( const uno::Reference< deployment::XPackage > &rPackage )
+{
+ return getVersion( rPackage->getVersion());
+}
}
@@ -193,37 +196,30 @@ public:
//------------------------------------------------------------------------------
struct ExtensionCmd
{
- enum E_CMD_TYPE { ADD, ENABLE, DISABLE, REMOVE, CHECK_FOR_UPDATES };
+ enum E_CMD_TYPE { ADD, ENABLE, DISABLE, REMOVE, CHECK_FOR_UPDATES, ACCEPT_LICENSE };
E_CMD_TYPE m_eCmdType;
bool m_bWarnUser;
OUString m_sExtensionURL;
- uno::Reference< deployment::XPackageManager > m_xPackageManager;
- uno::Reference< deployment::XPackage > m_xPackage;
- std::vector< TUpdateListEntry > m_vExtensionList;
+ OUString m_sRepository;
+ uno::Reference< deployment::XPackage > m_xPackage;
+ std::vector< uno::Reference< deployment::XPackage > > m_vExtensionList;
ExtensionCmd( const E_CMD_TYPE eCommand,
- const uno::Reference< deployment::XPackageManager > &rPackageManager,
const OUString &rExtensionURL,
+ const OUString &rRepository,
const bool bWarnUser )
: m_eCmdType( eCommand ),
m_bWarnUser( bWarnUser ),
m_sExtensionURL( rExtensionURL ),
- m_xPackageManager( rPackageManager ) {};
+ m_sRepository( rRepository ) {};
ExtensionCmd( const E_CMD_TYPE eCommand,
- const uno::Reference< deployment::XPackageManager > &rPackageManager,
const uno::Reference< deployment::XPackage > &rPackage )
: m_eCmdType( eCommand ),
m_bWarnUser( false ),
- m_xPackageManager( rPackageManager ),
m_xPackage( rPackage ) {};
ExtensionCmd( const E_CMD_TYPE eCommand,
- const uno::Reference< deployment::XPackage > &rPackage )
- : m_eCmdType( eCommand ),
- m_bWarnUser( false ),
- m_xPackage( rPackage ) {};
- ExtensionCmd( const E_CMD_TYPE eCommand,
- const std::vector< TUpdateListEntry > &vExtensionList )
+ const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
: m_eCmdType( eCommand ),
m_bWarnUser( false ),
m_vExtensionList( vExtensionList ) {};
@@ -239,14 +235,14 @@ public:
TheExtensionManager *pManager,
const uno::Reference< uno::XComponentContext > & rContext );
- void addExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const OUString &rExtensionURL,
+ void addExtension( const OUString &rExtensionURL,
+ const OUString &rRepository,
const bool bWarnUser );
- void removeExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const uno::Reference< deployment::XPackage > &rPackage );
+ void removeExtension( const uno::Reference< deployment::XPackage > &rPackage );
void enableExtension( const uno::Reference< deployment::XPackage > &rPackage,
const bool bEnable );
- void checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList );
+ void checkForUpdates( const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList );
+ void acceptLicense( const uno::Reference< deployment::XPackage > &rPackage );
void stop();
bool isBusy();
@@ -263,17 +259,18 @@ private:
virtual void SAL_CALL onTerminated();
void _addExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const OUString &rPackageURL,
+ const OUString &rRepository,
const bool bWarnUser );
void _removeExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const uno::Reference< deployment::XPackage > &xPackage );
void _enableExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
const uno::Reference< deployment::XPackage > &xPackage );
void _disableExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
const uno::Reference< deployment::XPackage > &xPackage );
- void _checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList );
+ void _checkForUpdates( const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList );
+ void _acceptLicense( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
+ const uno::Reference< deployment::XPackage > &xPackage );
enum Input { NONE, START, STOP };
@@ -288,6 +285,7 @@ private:
const OUString m_sAddingPackages;
const OUString m_sRemovingPackages;
const OUString m_sDefaultCmd;
+ const OUString m_sAcceptLicense;
osl::Condition m_wakeup;
osl::Mutex m_mutex;
Input m_eInput;
@@ -376,7 +374,6 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
lang::WrappedTargetException wtExc;
deployment::DependencyException depExc;
deployment::LicenseException licExc;
- deployment::LicenseIndividualAgreementException licAgreementExc;
deployment::VersionException verExc;
deployment::InstallException instExc;
deployment::PlatformException platExc;
@@ -438,23 +435,12 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
|| (n == RET_CANCEL && !Application::IsDialogCancelEnabled());
}
}
- else if (request >>= licAgreementExc)
- {
- vos::OGuard aSolarGuard( Application::GetSolarMutex() );
- ResId warnId(WARNINGBOX_NOSHAREDALLOWED, *DeploymentGuiResMgr::get());
- WarningBox warn( m_pDialogHelper? m_pDialogHelper->getWindow() : NULL, warnId);
- String msgText = warn.GetMessText();
- msgText.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
- msgText.SearchAndReplaceAllAscii("%NAME", licAgreementExc.ExtensionName);
- warn.SetMessText(msgText);
- warn.Execute();
- abort = true;
- }
else if (request >>= licExc)
{
uno::Reference< ui::dialogs::XExecutableDialog > xDialog(
deployment::ui::LicenseDialog::create(
- m_xContext, VCLUnoHelper::GetInterface( m_pDialogHelper? m_pDialogHelper->getWindow() : NULL ), licExc.Text ) );
+ m_xContext, VCLUnoHelper::GetInterface( m_pDialogHelper? m_pDialogHelper->getWindow() : NULL ),
+ licExc.ExtensionName, licExc.Text ) );
sal_Int16 res = xDialog->execute();
if ( res == ui::dialogs::ExecutableDialogResults::CANCEL )
abort = true;
@@ -468,7 +454,8 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
else if (request >>= verExc)
{
sal_uInt32 id;
- switch (dp_misc::comparePackageVersions( verExc.New, verExc.Deployed ))
+ switch (dp_misc::compareVersions(
+ verExc.NewVersion, verExc.Deployed->getVersion() ))
{
case dp_misc::LESS:
id = RID_WARNINGBOX_VERSION_LESS;
@@ -480,8 +467,8 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
id = RID_WARNINGBOX_VERSION_GREATER;
break;
}
- OSL_ASSERT( verExc.New.is() && verExc.Deployed.is() );
- bool bEqualNames = verExc.New->getDisplayName().equals(
+ OSL_ASSERT( verExc.Deployed.is() );
+ bool bEqualNames = verExc.NewDisplayName.equals(
verExc.Deployed->getDisplayName());
{
vos::OGuard guard(Application::GetSolarMutex());
@@ -506,9 +493,9 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
{
s = String(ResId(RID_STR_WARNINGBOX_VERSION_GREATER_DIFFERENT_NAMES, *DeploymentGuiResMgr::get()));
}
- s.SearchAndReplaceAllAscii( "$NAME", verExc.New->getDisplayName());
+ s.SearchAndReplaceAllAscii( "$NAME", verExc.NewDisplayName);
s.SearchAndReplaceAllAscii( "$OLDNAME", verExc.Deployed->getDisplayName());
- s.SearchAndReplaceAllAscii( "$NEW", getVersion(verExc.New) );
+ s.SearchAndReplaceAllAscii( "$NEW", getVersion(verExc.NewVersion) );
s.SearchAndReplaceAllAscii( "$DEPLOYED", getVersion(verExc.Deployed) );
box.SetMessText(s);
approve = box.Execute() == RET_OK;
@@ -527,7 +514,7 @@ void ProgressCmdEnv::handle( uno::Reference< task::XInteractionRequest > const &
{
vos::OGuard guard(Application::GetSolarMutex());
- approve = m_pDialogHelper->installExtensionWarn( instExc.New->getDisplayName() );
+ approve = m_pDialogHelper->installExtensionWarn( instExc.displayName );
}
else
approve = false;
@@ -644,6 +631,7 @@ ExtensionCmdQueue::Thread::Thread( DialogHelper *pDialogHelper,
m_sAddingPackages( DialogHelper::getResourceString( RID_STR_ADDING_PACKAGES ) ),
m_sRemovingPackages( DialogHelper::getResourceString( RID_STR_REMOVING_PACKAGES ) ),
m_sDefaultCmd( DialogHelper::getResourceString( RID_STR_ADD_PACKAGES ) ),
+ m_sAcceptLicense( DialogHelper::getResourceString( RID_STR_ACCEPT_LICENSE ) ),
m_eInput( NONE ),
m_bTerminated( false ),
m_bStopped( false ),
@@ -653,8 +641,8 @@ ExtensionCmdQueue::Thread::Thread( DialogHelper *pDialogHelper,
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::addExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const ::rtl::OUString &rExtensionURL,
+void ExtensionCmdQueue::Thread::addExtension( const ::rtl::OUString &rExtensionURL,
+ const ::rtl::OUString &rRepository,
const bool bWarnUser )
{
::osl::MutexGuard aGuard( m_mutex );
@@ -665,7 +653,26 @@ void ExtensionCmdQueue::Thread::addExtension( const uno::Reference< deployment::
if ( rExtensionURL.getLength() )
{
- TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ADD, rPackageManager, rExtensionURL, bWarnUser ) );
+ TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ADD, rExtensionURL, rRepository, bWarnUser ) );
+
+ m_queue.push( pEntry );
+ m_eInput = START;
+ m_wakeup.set();
+ }
+}
+
+//------------------------------------------------------------------------------
+void ExtensionCmdQueue::Thread::removeExtension( const uno::Reference< deployment::XPackage > &rPackage )
+{
+ ::osl::MutexGuard aGuard( m_mutex );
+
+ //If someone called stop then we do not remove the extension -> game over!
+ if ( m_bStopped )
+ return;
+
+ if ( rPackage.is() )
+ {
+ TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::REMOVE, rPackage ) );
m_queue.push( pEntry );
m_eInput = START;
@@ -674,8 +681,7 @@ void ExtensionCmdQueue::Thread::addExtension( const uno::Reference< deployment::
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::removeExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const uno::Reference< deployment::XPackage > &rPackage )
+void ExtensionCmdQueue::Thread::acceptLicense( const uno::Reference< deployment::XPackage > &rPackage )
{
::osl::MutexGuard aGuard( m_mutex );
@@ -683,9 +689,9 @@ void ExtensionCmdQueue::Thread::removeExtension( const uno::Reference< deploymen
if ( m_bStopped )
return;
- if ( rPackageManager.is() && rPackage.is() )
+ if ( rPackage.is() )
{
- TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::REMOVE, rPackageManager, rPackage ) );
+ TExtensionCmd pEntry( new ExtensionCmd( ExtensionCmd::ACCEPT_LICENSE, rPackage ) );
m_queue.push( pEntry );
m_eInput = START;
@@ -715,7 +721,8 @@ void ExtensionCmdQueue::Thread::enableExtension( const uno::Reference< deploymen
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList )
+void ExtensionCmdQueue::Thread::checkForUpdates(
+ const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
{
::osl::MutexGuard aGuard( m_mutex );
@@ -819,10 +826,10 @@ void ExtensionCmdQueue::Thread::execute()
switch ( pEntry->m_eCmdType ) {
case ExtensionCmd::ADD :
- _addExtension( currentCmdEnv, pEntry->m_xPackageManager, pEntry->m_sExtensionURL, pEntry->m_bWarnUser );
+ _addExtension( currentCmdEnv, pEntry->m_sExtensionURL, pEntry->m_sRepository, pEntry->m_bWarnUser );
break;
case ExtensionCmd::REMOVE :
- _removeExtension( currentCmdEnv, pEntry->m_xPackageManager, pEntry->m_xPackage );
+ _removeExtension( currentCmdEnv, pEntry->m_xPackage );
break;
case ExtensionCmd::ENABLE :
_enableExtension( currentCmdEnv, pEntry->m_xPackage );
@@ -833,6 +840,9 @@ void ExtensionCmdQueue::Thread::execute()
case ExtensionCmd::CHECK_FOR_UPDATES :
_checkForUpdates( pEntry->m_vExtensionList );
break;
+ case ExtensionCmd::ACCEPT_LICENSE :
+ _acceptLicense( currentCmdEnv, pEntry->m_xPackage );
+ break;
}
}
//catch ( deployment::DeploymentException &)
@@ -912,8 +922,8 @@ void ExtensionCmdQueue::Thread::execute()
//------------------------------------------------------------------------------
void ExtensionCmdQueue::Thread::_addExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const OUString &rPackageURL,
+ const OUString &rRepository,
const bool bWarnUser )
{
//check if we have a string in anyTitle. For example "unopkg gui \" caused anyTitle to be void
@@ -936,17 +946,16 @@ void ExtensionCmdQueue::Thread::_addExtension( ::rtl::Reference< ProgressCmdEnv
}
rCmdEnv->setWarnUser( bWarnUser );
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackageManager->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sAddingPackages, OUSTR("%EXTENSION_NAME"), sName );
rCmdEnv->progressSection( sTitle, xAbortChannel );
try
{
- uno::Reference< deployment::XPackage > xPackage( xPackageManager->addPackage(
- rPackageURL, OUString() /* detect media-type */,
- xAbortChannel, rCmdEnv.get() ) );
- OSL_ASSERT( xPackage.is() );
- }
+ xExtMgr->addExtension(rPackageURL, uno::Sequence<beans::NamedValue>(),
+ rRepository, xAbortChannel, rCmdEnv.get() );
+ }
catch ( ucb::CommandFailedException & )
{
// When the extension is already installed we'll get a dialog asking if we want to overwrite. If we then press
@@ -962,18 +971,22 @@ void ExtensionCmdQueue::Thread::_addExtension( ::rtl::Reference< ProgressCmdEnv
//------------------------------------------------------------------------------
void ExtensionCmdQueue::Thread::_removeExtension( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
const uno::Reference< deployment::XPackage > &xPackage )
{
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackageManager->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sRemovingPackages, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
rCmdEnv->progressSection( sTitle, xAbortChannel );
OUString id( dp_misc::getIdentifier( xPackage ) );
try
{
- xPackageManager->removePackage( id, xPackage->getName(), xAbortChannel, rCmdEnv.get() );
+ xExtMgr->removeExtension( id, xPackage->getName(), xPackage->getRepositoryName(), xAbortChannel, rCmdEnv.get() );
}
+ catch ( deployment::DeploymentException & )
+ {}
+ catch ( ucb::CommandFailedException & )
+ {}
catch ( ucb::CommandAbortedException & )
{}
@@ -983,7 +996,8 @@ void ExtensionCmdQueue::Thread::_removeExtension( ::rtl::Reference< ProgressCmdE
}
//------------------------------------------------------------------------------
-void ExtensionCmdQueue::Thread::_checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList )
+void ExtensionCmdQueue::Thread::_checkForUpdates(
+ const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
{
UpdateDialog* pUpdateDialog;
std::vector< UpdateData > vData;
@@ -1042,13 +1056,14 @@ void ExtensionCmdQueue::Thread::_enableExtension( ::rtl::Reference< ProgressCmdE
if ( !xPackage.is() )
return;
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackage->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sEnablingPackages, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
rCmdEnv->progressSection( sTitle, xAbortChannel );
try
{
- xPackage->registerPackage( xAbortChannel, rCmdEnv.get() );
+ xExtMgr->enableExtension( xPackage, xAbortChannel, rCmdEnv.get() );
if ( m_pDialogHelper )
m_pDialogHelper->updatePackageInfo( xPackage );
}
@@ -1063,13 +1078,36 @@ void ExtensionCmdQueue::Thread::_disableExtension( ::rtl::Reference< ProgressCmd
if ( !xPackage.is() )
return;
- uno::Reference< task::XAbortChannel > xAbortChannel( xPackage->createAbortChannel() );
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
OUString sTitle = searchAndReplaceAll( m_sDisablingPackages, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
rCmdEnv->progressSection( sTitle, xAbortChannel );
try
{
- xPackage->revokePackage( xAbortChannel, rCmdEnv.get() );
+ xExtMgr->disableExtension( xPackage, xAbortChannel, rCmdEnv.get() );
+ if ( m_pDialogHelper )
+ m_pDialogHelper->updatePackageInfo( xPackage );
+ }
+ catch ( ::ucb::CommandAbortedException & )
+ {}
+}
+
+//------------------------------------------------------------------------------
+void ExtensionCmdQueue::Thread::_acceptLicense( ::rtl::Reference< ProgressCmdEnv > &rCmdEnv,
+ const uno::Reference< deployment::XPackage > &xPackage )
+{
+ if ( !xPackage.is() )
+ return;
+
+ uno::Reference< deployment::XExtensionManager > xExtMgr = m_pManager->getExtensionManager();
+ uno::Reference< task::XAbortChannel > xAbortChannel( xExtMgr->createAbortChannel() );
+ OUString sTitle = searchAndReplaceAll( m_sAcceptLicense, OUSTR("%EXTENSION_NAME"), xPackage->getDisplayName() );
+ rCmdEnv->progressSection( sTitle, xAbortChannel );
+
+ try
+ {
+ xExtMgr->checkPrerequisitesAndEnable( xPackage, xAbortChannel, rCmdEnv.get() );
if ( m_pDialogHelper )
m_pDialogHelper->updatePackageInfo( xPackage );
}
@@ -1120,17 +1158,16 @@ ExtensionCmdQueue::~ExtensionCmdQueue() {
stop();
}
-void ExtensionCmdQueue::addExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const ::rtl::OUString & extensionURL,
+void ExtensionCmdQueue::addExtension( const ::rtl::OUString & extensionURL,
+ const ::rtl::OUString & repository,
const bool bWarnUser )
{
- m_thread->addExtension( rPackageManager, extensionURL, bWarnUser );
+ m_thread->addExtension( extensionURL, repository, bWarnUser );
}
-void ExtensionCmdQueue::removeExtension( const uno::Reference< deployment::XPackageManager > &rPackageManager,
- const uno::Reference< deployment::XPackage > &rPackage )
+void ExtensionCmdQueue::removeExtension( const uno::Reference< deployment::XPackage > &rPackage )
{
- m_thread->removeExtension( rPackageManager, rPackage );
+ m_thread->removeExtension( rPackage );
}
void ExtensionCmdQueue::enableExtension( const uno::Reference< deployment::XPackage > &rPackage,
@@ -1139,11 +1176,21 @@ void ExtensionCmdQueue::enableExtension( const uno::Reference< deployment::XPack
m_thread->enableExtension( rPackage, bEnable );
}
-void ExtensionCmdQueue::checkForUpdates( const std::vector< TUpdateListEntry > &vExtensionList )
+void ExtensionCmdQueue::checkForUpdates( const std::vector<uno::Reference<deployment::XPackage > > &vExtensionList )
{
m_thread->checkForUpdates( vExtensionList );
}
+void ExtensionCmdQueue::acceptLicense( const uno::Reference< deployment::XPackage > &rPackage )
+{
+ m_thread->acceptLicense( rPackage );
+}
+
+void ExtensionCmdQueue::syncRepositories( const uno::Reference< uno::XComponentContext > &xContext )
+{
+ dp_misc::syncRepositories( new ProgressCmdEnv( xContext, NULL, OUSTR("Extension Manager") ) );
+}
+
void ExtensionCmdQueue::stop()
{
m_thread->stop();
diff --git a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx
index f984c71c6c1c..7ac00e2740d4 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx
+++ b/desktop/source/deployment/gui/dp_gui_extensioncmdqueue.hxx
@@ -40,7 +40,6 @@
/// @HTML
namespace com { namespace sun { namespace star {
- namespace deployment { class XPackageManager; }
namespace task { class XInteractionRequest; }
namespace uno { class XComponentContext; }
} } }
@@ -78,14 +77,16 @@ public:
/**
*/
- void addExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &rPackageManager,
- const ::rtl::OUString &rExtensionURL,
+ void addExtension( const ::rtl::OUString &rExtensionURL,
+ const ::rtl::OUString &rRepository,
const bool bWarnUser );
- void removeExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &rPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage );
+ void removeExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage );
void enableExtension( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage,
const bool bEnable );
- void checkForUpdates( const std::vector< TUpdateListEntry > &vList );
+ void checkForUpdates(const std::vector< ::com::sun::star::uno::Reference<
+ ::com::sun::star::deployment::XPackage > > &vList );
+ void acceptLicense( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &rPackage );
+ static void syncRepositories( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > & xContext );
/**
This call does not block. It signals the internal thread
that it should install the remaining extensions and then terminate.
diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx
index bcaa3252ea8f..24b47aa223e3 100755
--- a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx
+++ b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx
@@ -44,6 +44,10 @@
#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
+#define USER_PACKAGE_MANAGER OUSTR("user")
+#define SHARED_PACKAGE_MANAGER OUSTR("shared")
+#define BUNDLED_PACKAGE_MANAGER OUSTR("bundled")
+
using namespace ::com::sun::star;
namespace dp_gui {
@@ -52,19 +56,20 @@ namespace dp_gui {
// struct Entry_Impl
//------------------------------------------------------------------------------
Entry_Impl::Entry_Impl( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager,
- PackageState eState ) :
+ const PackageState eState, const bool bReadOnly ) :
m_bActive( false ),
- m_bLocked( false ),
+ m_bLocked( bReadOnly ),
m_bHasOptions( false ),
+ m_bUser( false ),
m_bShared( false ),
m_bNew( false ),
m_bChecked( false ),
m_bMissingDeps( false ),
+ m_bHasButtons( false ),
+ m_bMissingLic( false ),
m_eState( eState ),
m_pPublisher( NULL ),
- m_xPackage( xPackage ),
- m_xPackageManager( xPackageManager )
+ m_xPackage( xPackage )
{
m_sTitle = xPackage->getDisplayName();
m_sVersion = xPackage->getVersion();
@@ -85,8 +90,6 @@ Entry_Impl::Entry_Impl( const uno::Reference< deployment::XPackage > &xPackage,
else
m_aIconHC = m_aIcon;
- m_bLocked = m_xPackageManager->isReadOnly();
-
if ( eState == AMBIGUOUS )
m_sErrorText = DialogHelper::getResourceString( RID_STR_ERROR_UNKNOWN_STATUS );
else if ( eState == NOT_REGISTERED )
@@ -106,14 +109,11 @@ StringCompare Entry_Impl::CompareTo( const CollatorWrapper *pCollator, const TEn
eCompare = m_sVersion.CompareTo( pEntry->m_sVersion );
if ( eCompare == COMPARE_EQUAL )
{
- if ( m_xPackageManager != pEntry->m_xPackageManager )
- {
- sal_Int32 nCompare = m_xPackageManager->getContext().compareTo( pEntry->m_xPackageManager->getContext() );
- if ( nCompare < 0 )
- eCompare = COMPARE_LESS;
- else if ( nCompare > 0 )
- eCompare = COMPARE_GREATER;
- }
+ sal_Int32 nCompare = m_xPackage->getRepositoryName().compareTo( pEntry->m_xPackage->getRepositoryName() );
+ if ( nCompare < 0 )
+ eCompare = COMPARE_LESS;
+ else if ( nCompare > 0 )
+ eCompare = COMPARE_GREATER;
}
}
return eCompare;
@@ -373,6 +373,8 @@ void ExtensionBox_Impl::CalcActiveHeight( const long nPos )
aSize.Height() = 10000;
rtl::OUString aText( m_vEntries[ nPos ]->m_sErrorText );
+ if ( aText.getLength() )
+ aText += OUSTR("\n");
aText += m_vEntries[ nPos ]->m_sDescription;
Rectangle aRect = GetTextRect( Rectangle( Point(), aSize ), aText,
@@ -382,7 +384,10 @@ void ExtensionBox_Impl::CalcActiveHeight( const long nPos )
if ( aTextHeight < m_nStdHeight )
aTextHeight = m_nStdHeight;
- m_nActiveHeight = aTextHeight + m_nExtraHeight;
+ if ( m_vEntries[ nPos ]->m_bHasButtons )
+ m_nActiveHeight = aTextHeight + m_nExtraHeight;
+ else
+ m_nActiveHeight = aTextHeight + 2;
}
//------------------------------------------------------------------------------
@@ -599,7 +604,12 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr
aPos.Y() += aTextHeight;
if ( pEntry->m_bActive )
{
- DrawText( Rectangle( aPos.X(), aPos.Y(), rRect.Right(), rRect.Bottom() - m_nExtraHeight ),
+ long nExtraHeight = 0;
+
+ if ( pEntry->m_bHasButtons )
+ nExtraHeight = m_nExtraHeight;
+
+ DrawText( Rectangle( aPos.X(), aPos.Y(), rRect.Right(), rRect.Bottom() - nExtraHeight ),
sDescription, TEXT_DRAW_MULTILINE | TEXT_DRAW_WORDBREAK );
}
else
@@ -619,7 +629,7 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr
}
// Draw status icons
- if ( pEntry->m_bShared )
+ if ( !pEntry->m_bUser )
{
aPos = rRect.TopRight() + Point( -(RIGHT_ICON_OFFSET + SMALL_ICON_SIZE), TOP_OFFSET );
if ( pEntry->m_bLocked )
@@ -627,7 +637,7 @@ void ExtensionBox_Impl::DrawRow( const Rectangle& rRect, const TEntry_Impl pEntr
else
DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), isHCMode() ? m_aSharedImageHC : m_aSharedImage );
}
- if ( ( pEntry->m_eState == AMBIGUOUS ) || pEntry->m_bMissingDeps )
+ if ( ( pEntry->m_eState == AMBIGUOUS ) || pEntry->m_bMissingDeps || pEntry->m_bMissingLic )
{
aPos = rRect.TopRight() + Point( -(RIGHT_ICON_OFFSET + SPACE_BETWEEN + 2*SMALL_ICON_SIZE), TOP_OFFSET );
DrawImage( aPos, Size( SMALL_ICON_SIZE, SMALL_ICON_SIZE ), isHCMode() ? m_aWarningImageHC : m_aWarningImage );
@@ -946,29 +956,24 @@ bool ExtensionBox_Impl::FindEntryPos( const TEntry_Impl pEntry, const long nStar
//------------------------------------------------------------------------------
long ExtensionBox_Impl::addEntry( const uno::Reference< deployment::XPackage > &xPackage,
- const uno::Reference< deployment::XPackageManager > &xPackageManager )
+ bool bLicenseMissing )
{
- long nPos = 0;
+ long nPos = 0;
PackageState eState = m_pManager->getPackageState( xPackage );
+ bool bLocked = m_pManager->isReadOnly( xPackage );
- TEntry_Impl pEntry( new Entry_Impl( xPackage, xPackageManager, eState ) );
+ TEntry_Impl pEntry( new Entry_Impl( xPackage, eState, bLocked ) );
xPackage->addEventListener( uno::Reference< lang::XEventListener > ( m_xRemoveListener, uno::UNO_QUERY ) );
::osl::ClearableMutexGuard guard(m_entriesMutex);
if ( m_vEntries.empty() )
{
- pEntry->m_bHasOptions = m_pManager->supportsOptions( xPackage );
- pEntry->m_bShared = ( m_pManager->getSharedPkgMgr() == xPackageManager );
- pEntry->m_bNew = m_bInCheckMode;
m_vEntries.push_back( pEntry );
}
else
{
if ( !FindEntryPos( pEntry, 0, m_vEntries.size()-1, nPos ) )
{
- pEntry->m_bHasOptions = m_pManager->supportsOptions( xPackage );
- pEntry->m_bShared = ( m_pManager->getSharedPkgMgr() == xPackageManager );
- pEntry->m_bNew = m_bInCheckMode;
m_vEntries.insert( m_vEntries.begin()+nPos, pEntry );
}
else if ( !m_bInCheckMode )
@@ -976,6 +981,16 @@ long ExtensionBox_Impl::addEntry( const uno::Reference< deployment::XPackage > &
OSL_ENSURE( 0, "ExtensionBox_Impl::addEntry(): Will not add duplicate entries" );
}
}
+
+ pEntry->m_bHasOptions = m_pManager->supportsOptions( xPackage );
+ pEntry->m_bUser = xPackage->getRepositoryName().equals( USER_PACKAGE_MANAGER );
+ pEntry->m_bShared = xPackage->getRepositoryName().equals( SHARED_PACKAGE_MANAGER );
+ pEntry->m_bNew = m_bInCheckMode;
+ pEntry->m_bMissingLic = bLicenseMissing;
+
+ if ( bLicenseMissing )
+ pEntry->m_sErrorText = DialogHelper::getResourceString( RID_STR_ERROR_MISSING_LICENSE );
+
//access to m_nActive must be guarded
if ( !m_bInCheckMode && m_bHasActive && ( m_nActive >= nPos ) )
m_nActive += 1;
@@ -1005,9 +1020,12 @@ void ExtensionBox_Impl::updateEntry( const uno::Reference< deployment::XPackage
(*iIndex)->m_sVersion = xPackage->getVersion();
(*iIndex)->m_sDescription = xPackage->getDescription();
+ if ( eState == REGISTERED )
+ (*iIndex)->m_bMissingLic = false;
+
if ( eState == AMBIGUOUS )
(*iIndex)->m_sErrorText = DialogHelper::getResourceString( RID_STR_ERROR_UNKNOWN_STATUS );
- else
+ else if ( ! (*iIndex)->m_bMissingLic )
(*iIndex)->m_sErrorText = String();
if ( IsReallyVisible() )
@@ -1091,16 +1109,13 @@ void ExtensionBox_Impl::RemoveUnlocked()
}
//------------------------------------------------------------------------------
-void ExtensionBox_Impl::prepareChecking( const uno::Reference< deployment::XPackageManager > &xPackageMgr )
+void ExtensionBox_Impl::prepareChecking()
{
m_bInCheckMode = true;
typedef std::vector< TEntry_Impl >::iterator ITER;
for ( ITER iIndex = m_vEntries.begin(); iIndex < m_vEntries.end(); ++iIndex )
{
- if ( (*iIndex)->m_xPackageManager == xPackageMgr )
- (*iIndex)->m_bChecked = false;
- else
- (*iIndex)->m_bChecked = true;
+ (*iIndex)->m_bChecked = false;
(*iIndex)->m_bNew = false;
}
}
@@ -1119,17 +1134,30 @@ void ExtensionBox_Impl::checkEntries()
{
if ( (*iIndex)->m_bChecked == false )
{
+ (*iIndex)->m_bChecked = true;
bNeedsUpdate = true;
nPos = iIndex-m_vEntries.begin();
if ( (*iIndex)->m_bNew )
- {
+ { // add entry to list and correct active pos
if ( nNewPos == - 1)
nNewPos = nPos;
if ( nPos <= m_nActive )
m_nActive += 1;
+ iIndex++;
+ }
+ else
+ { // remove entry from list
+ if ( nPos < m_nActive )
+ m_nActive -= 1;
+ else if ( ( nPos == m_nActive ) && ( nPos == (long) m_vEntries.size() - 1 ) )
+ m_nActive -= 1;
+ m_vRemovedEntries.push_back( *iIndex );
+ m_vEntries.erase( iIndex );
+ iIndex = m_vEntries.begin() + nPos;
}
}
- iIndex++;
+ else
+ iIndex++;
}
guard.clear();
diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx
index 16ef974deff9..762f50296690 100755
--- a/desktop/source/deployment/gui/dp_gui_extlistbox.hxx
+++ b/desktop/source/deployment/gui/dp_gui_extlistbox.hxx
@@ -38,7 +38,6 @@
#include "com/sun/star/lang/Locale.hpp"
#include "com/sun/star/lang/XEventListener.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
#include <boost/shared_ptr.hpp>
@@ -65,13 +64,16 @@ typedef ::boost::shared_ptr< Entry_Impl > TEntry_Impl;
struct Entry_Impl
{
- bool m_bActive;
- bool m_bLocked;
- bool m_bHasOptions;
- bool m_bShared;
- bool m_bNew;
- bool m_bChecked;
- bool m_bMissingDeps;
+ bool m_bActive :1;
+ bool m_bLocked :1;
+ bool m_bHasOptions :1;
+ bool m_bUser :1;
+ bool m_bShared :1;
+ bool m_bNew :1;
+ bool m_bChecked :1;
+ bool m_bMissingDeps :1;
+ bool m_bHasButtons :1;
+ bool m_bMissingLic :1;
PackageState m_eState;
String m_sTitle;
String m_sVersion;
@@ -84,11 +86,9 @@ struct Entry_Impl
svt::FixedHyperlink *m_pPublisher;
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> m_xPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> m_xPackageManager;
Entry_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- PackageState eState );
+ const PackageState eState, const bool bReadOnly );
~Entry_Impl();
StringCompare CompareTo( const CollatorWrapper *pCollator, const TEntry_Impl pEntry ) const;
@@ -207,11 +207,11 @@ public:
//-----------------
virtual void selectEntry( const long nPos );
long addEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
+ bool bLicenseMissing = false );
void updateEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
void removeEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
- void prepareChecking( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageMgr );
+ void prepareChecking();
void checkEntries();
TheExtensionManager* getExtensionManager() const { return m_pManager; }
diff --git a/desktop/source/deployment/gui/dp_gui_service.cxx b/desktop/source/deployment/gui/dp_gui_service.cxx
index 578ff04a6c88..29bedf1b229f 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_service.cxx
+++ b/desktop/source/deployment/gui/dp_gui_service.cxx
@@ -46,6 +46,7 @@
#include "boost/bind.hpp"
#include "license_dialog.hxx"
#include "dp_gui_dialog2.hxx"
+#include "dp_gui_extensioncmdqueue.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
@@ -264,6 +265,7 @@ void ServiceImpl::startExecuteModal(
+ ::utl::ConfigManager::GetDirectConfigProperty(
::utl::ConfigManager::PRODUCTVERSION).get<OUString>();
app->SetDisplayName(sTitle);
+ ExtensionCmdQueue::syncRepositories( m_xComponentContext );
}
}
else
diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
index 796918202a52..d0347c7cbf4e 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
+++ b/desktop/source/deployment/gui/dp_gui_theextmgr.cxx
@@ -36,17 +36,20 @@
#include "toolkit/helper/vclunohelper.hxx"
#include "com/sun/star/beans/XPropertySet.hpp"
-#include "com/sun/star/deployment/XPackageManagerFactory.hpp"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
#include "dp_gui_dialog2.hxx"
#include "dp_gui_extensioncmdqueue.hxx"
#include "dp_gui_theextmgr.hxx"
#include "dp_gui_theextmgr.hxx"
#include "dp_identifier.hxx"
+#include "dp_update.hxx"
#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
+#define USER_PACKAGE_MANAGER OUSTR("user")
+#define SHARED_PACKAGE_MANAGER OUSTR("shared")
+#define BUNDLED_PACKAGE_MANAGER OUSTR("bundled")
+
using namespace ::com::sun::star;
using ::rtl::OUString;
@@ -65,16 +68,11 @@ TheExtensionManager::TheExtensionManager( Window *pParent,
m_xContext( xContext ),
m_pParent( pParent ),
m_pExtMgrDialog( NULL ),
- m_pUpdReqDialog( NULL )
+ m_pUpdReqDialog( NULL ),
+ m_pExecuteCmdQueue( NULL )
{
- m_sPackageManagers.realloc(2);
- m_sPackageManagers[0] = deployment::thePackageManagerFactory::get( m_xContext )->getPackageManager( OUSTR("user") );
- m_sPackageManagers[1] = deployment::thePackageManagerFactory::get( m_xContext )->getPackageManager( OUSTR("shared") );;
-
- for ( sal_Int32 i = 0; i < m_sPackageManagers.getLength(); ++i )
- {
- m_sPackageManagers[i]->addModifyListener( this );
- }
+ m_xExtensionManager = deployment::ExtensionManager::get( xContext );
+ m_xExtensionManager->addModifyListener( this );
uno::Reference< lang::XMultiServiceFactory > xConfig(
xContext->getServiceManager()->createInstanceWithContext(
@@ -121,6 +119,8 @@ TheExtensionManager::~TheExtensionManager()
delete m_pUpdReqDialog;
if ( m_pExtMgrDialog )
delete m_pExtMgrDialog;
+ if ( m_pExecuteCmdQueue )
+ delete m_pExecuteCmdQueue;
}
//------------------------------------------------------------------------------
@@ -133,14 +133,16 @@ void TheExtensionManager::createDialog( const bool bCreateUpdDlg )
if ( !m_pUpdReqDialog )
{
m_pUpdReqDialog = new UpdateRequiredDialog( NULL, this );
- m_pExecuteCmdQueue.reset( new ExtensionCmdQueue( (DialogHelper*) m_pUpdReqDialog, this, m_xContext ) );
+ delete m_pExecuteCmdQueue;
+ m_pExecuteCmdQueue = new ExtensionCmdQueue( (DialogHelper*) m_pUpdReqDialog, this, m_xContext );
createPackageList();
}
}
else if ( !m_pExtMgrDialog )
{
m_pExtMgrDialog = new ExtMgrDialog( m_pParent, this );
- m_pExecuteCmdQueue.reset( new ExtensionCmdQueue( (DialogHelper*) m_pExtMgrDialog, this, m_xContext ) );
+ delete m_pExecuteCmdQueue;
+ m_pExecuteCmdQueue = new ExtensionCmdQueue( (DialogHelper*) m_pExtMgrDialog, this, m_xContext );
m_pExtMgrDialog->setGetExtensionsURL( m_sGetExtensionsURL );
createPackageList();
}
@@ -205,27 +207,29 @@ bool TheExtensionManager::isVisible()
//------------------------------------------------------------------------------
bool TheExtensionManager::checkUpdates( bool /* bShowUpdateOnly */, bool /*bParentVisible*/ )
{
- std::vector< TUpdateListEntry > vEntries;
+ std::vector< uno::Reference< deployment::XPackage > > vEntries;
+ uno::Sequence< uno::Sequence< uno::Reference< deployment::XPackage > > > xAllPackages;
- for ( sal_Int32 i = 0; i < m_sPackageManagers.getLength(); ++i )
+ try {
+ xAllPackages = m_xExtensionManager->getAllExtensions( uno::Reference< task::XAbortChannel >(),
+ uno::Reference< ucb::XCommandEnvironment >() );
+ } catch ( deployment::DeploymentException & ) {
+ return false;
+ } catch ( ucb::CommandFailedException & ) {
+ return false;
+ } catch ( ucb::CommandAbortedException & ) {
+ return false;
+ } catch ( lang::IllegalArgumentException & e ) {
+ throw uno::RuntimeException( e.Message, e.Context );
+ }
+
+ for ( sal_Int32 i = 0; i < xAllPackages.getLength(); ++i )
{
- uno::Sequence< uno::Reference< deployment::XPackage > > xPackages;
- try {
- xPackages = m_sPackageManagers[i]->getDeployedPackages( uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment >() );
- for ( sal_Int32 k = 0; k < xPackages.getLength(); ++k )
- {
- TUpdateListEntry pEntry( new UpdateListEntry( xPackages[k], m_sPackageManagers[i] ) );
- vEntries.push_back( pEntry );
- }
- } catch ( deployment::DeploymentException & ) {
- continue;
- } catch ( ucb::CommandFailedException & ) {
- continue;
- } catch ( ucb::CommandAbortedException & ) {
- return true;
- } catch ( lang::IllegalArgumentException & e ) {
- throw uno::RuntimeException( e.Message, e.Context );
+ uno::Reference< deployment::XPackage > xPackage = dp_misc::getExtensionWithHighestVersion(xAllPackages[i]);
+ OSL_ASSERT(xPackage.is());
+ if ( xPackage.is() )
+ {
+ vEntries.push_back( xPackage );
}
}
@@ -234,32 +238,6 @@ bool TheExtensionManager::checkUpdates( bool /* bShowUpdateOnly */, bool /*bPare
}
//------------------------------------------------------------------------------
-bool TheExtensionManager::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
- bool bEnable )
-{
- m_pExecuteCmdQueue->enableExtension( xPackage, bEnable );
-
- return true;
-}
-
-//------------------------------------------------------------------------------
-bool TheExtensionManager::removePackage( const uno::Reference< deployment::XPackageManager > &xPackageManager,
- const uno::Reference< deployment::XPackage > &xPackage )
-{
- m_pExecuteCmdQueue->removeExtension( xPackageManager, xPackage );
-
- return true;
-}
-
-//------------------------------------------------------------------------------
-bool TheExtensionManager::updatePackages( const std::vector< TUpdateListEntry > &vList )
-{
- m_pExecuteCmdQueue->checkForUpdates( vList );
-
- return true;
-}
-
-//------------------------------------------------------------------------------
bool TheExtensionManager::installPackage( const OUString &rPackageURL, bool bWarnUser )
{
if ( rPackageURL.getLength() == 0 )
@@ -267,22 +245,20 @@ bool TheExtensionManager::installPackage( const OUString &rPackageURL, bool bWar
createDialog( false );
- uno::Reference< deployment::XPackageManager > xUserPkgMgr = getUserPkgMgr();
- uno::Reference< deployment::XPackageManager > xSharedPkgMgr = getSharedPkgMgr();
-
bool bInstall = true;
bool bInstallForAll = false;
- if ( !bWarnUser && ! xSharedPkgMgr->isReadOnly() )
+ // DV! missing function is read only repository from extension manager
+ if ( !bWarnUser && ! m_xExtensionManager->isReadOnlyRepository( SHARED_PACKAGE_MANAGER ) )
bInstall = getDialogHelper()->installForAllUsers( bInstallForAll );
if ( !bInstall )
return false;
if ( bInstallForAll )
- m_pExecuteCmdQueue->addExtension( xSharedPkgMgr, rPackageURL, false );
+ m_pExecuteCmdQueue->addExtension( rPackageURL, SHARED_PACKAGE_MANAGER, false );
else
- m_pExecuteCmdQueue->addExtension( xUserPkgMgr, rPackageURL, bWarnUser );
+ m_pExecuteCmdQueue->addExtension( rPackageURL, USER_PACKAGE_MANAGER, bWarnUser );
return true;
}
@@ -312,40 +288,52 @@ void TheExtensionManager::terminateDialog()
}
//------------------------------------------------------------------------------
-bool TheExtensionManager::createPackageList( const uno::Reference< deployment::XPackageManager > &xPackageManager )
+void TheExtensionManager::createPackageList()
{
- uno::Sequence< uno::Reference< deployment::XPackage > > packages;
+ uno::Sequence< uno::Sequence< uno::Reference< deployment::XPackage > > > xAllPackages;
try {
- packages = xPackageManager->getDeployedPackages( uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment >() );
+ xAllPackages = m_xExtensionManager->getAllExtensions( uno::Reference< task::XAbortChannel >(),
+ uno::Reference< ucb::XCommandEnvironment >() );
} catch ( deployment::DeploymentException & ) {
- //handleGeneralError(e.Cause);
- return true;
+ return;
} catch ( ucb::CommandFailedException & ) {
- //handleGeneralError(e.Reason);
- return true;
+ return;
} catch ( ucb::CommandAbortedException & ) {
- return false;
+ return;
} catch ( lang::IllegalArgumentException & e ) {
throw uno::RuntimeException( e.Message, e.Context );
}
- for ( sal_Int32 j = 0; j < packages.getLength(); ++j )
+ for ( sal_Int32 i = 0; i < xAllPackages.getLength(); ++i )
{
- getDialogHelper()->addPackageToList( packages[j], xPackageManager );
- }
+ uno::Sequence< uno::Reference< deployment::XPackage > > xPackageList = xAllPackages[i];
- return true;
-}
+ for ( sal_Int32 j = 0; j < xPackageList.getLength(); ++j )
+ {
+ uno::Reference< deployment::XPackage > xPackage = xPackageList[j];
+ if ( xPackage.is() )
+ {
+ PackageState eState = getPackageState( xPackage );
+ getDialogHelper()->addPackageToList( xPackage );
+ // When the package is enabled, we can stop here, otherwise we have to look for
+ // another version of this package
+ if ( ( eState == REGISTERED ) || ( eState == NOT_AVAILABLE ) )
+ break;
+ }
+ }
+ }
-//------------------------------------------------------------------------------
-void TheExtensionManager::createPackageList()
-{
- for ( sal_Int32 i = 0; i < m_sPackageManagers.getLength(); ++i )
+ uno::Sequence< uno::Reference< deployment::XPackage > > xNoLicPackages;
+ xNoLicPackages = m_xExtensionManager->getExtensionsWithUnacceptedLicenses( SHARED_PACKAGE_MANAGER,
+ uno::Reference< ucb::XCommandEnvironment >() );
+ for ( sal_Int32 i = 0; i < xNoLicPackages.getLength(); ++i )
{
- if ( ! createPackageList( m_sPackageManagers[i] ) )
- break;
+ uno::Reference< deployment::XPackage > xPackage = xNoLicPackages[i];
+ if ( xPackage.is() )
+ {
+ getDialogHelper()->addPackageToList( xPackage, true );
+ }
}
}
@@ -378,6 +366,17 @@ PackageState TheExtensionManager::getPackageState( const uno::Reference< deploym
}
//------------------------------------------------------------------------------
+bool TheExtensionManager::isReadOnly( const uno::Reference< deployment::XPackage > &xPackage ) const
+{
+ if ( m_xExtensionManager.is() && xPackage.is() )
+ {
+ return m_xExtensionManager->isReadOnlyRepository( xPackage->getRepositoryName() );
+ }
+ else
+ return true;
+}
+
+//------------------------------------------------------------------------------
// The function investigates if the extension supports options.
bool TheExtensionManager::supportsOptions( const uno::Reference< deployment::XPackage > &xPackage ) const
{
@@ -488,16 +487,12 @@ void TheExtensionManager::notifyTermination( ::lang::EventObject const & rEvt )
//------------------------------------------------------------------------------
// XModifyListener
-void TheExtensionManager::modified( ::lang::EventObject const & rEvt )
+void TheExtensionManager::modified( ::lang::EventObject const & /*rEvt*/ )
throw ( uno::RuntimeException )
{
- uno::Reference< deployment::XPackageManager > xPackageManager( rEvt.Source, uno::UNO_QUERY );
- if ( xPackageManager.is() )
- {
- getDialogHelper()->prepareChecking( xPackageManager );
- createPackageList( xPackageManager );
- getDialogHelper()->checkEntries();
- }
+ getDialogHelper()->prepareChecking();
+ createPackageList();
+ getDialogHelper()->checkEntries();
}
//------------------------------------------------------------------------------
diff --git a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
index 1cdd1851d59e..094e25e249b7 100644..100755
--- a/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
+++ b/desktop/source/deployment/gui/dp_gui_theextmgr.hxx
@@ -33,7 +33,8 @@
#include "cppuhelper/implbase2.hxx"
#include "com/sun/star/container/XNameAccess.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/frame/XDesktop.hpp"
#include "com/sun/star/frame/XTerminateListener.hpp"
#include "com/sun/star/uno/XComponentContext.hpp"
@@ -57,21 +58,17 @@ class TheExtensionManager :
private:
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
::com::sun::star::uno::Reference< ::com::sun::star::frame::XDesktop > m_xDesktop;
- ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> > m_sPackageManagers;
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > m_xNameAccessNodes;
- ::std::auto_ptr< ExtensionCmdQueue > m_pExecuteCmdQueue;
-
Window *m_pParent;
ExtMgrDialog *m_pExtMgrDialog;
UpdateRequiredDialog *m_pUpdReqDialog;
+ ExtensionCmdQueue *m_pExecuteCmdQueue;
::rtl::OUString m_sGetExtensionsURL;
- // liste der packages ( xpackage?, mit parent manager, ... )
-
void createPackageList();
- bool createPackageList( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
public:
static ::rtl::Reference<TheExtensionManager> s_ExtMgr;
@@ -85,6 +82,7 @@ public:
Dialog* getDialog() { return m_pExtMgrDialog ? (Dialog*) m_pExtMgrDialog : (Dialog*) m_pUpdReqDialog; }
DialogHelper* getDialogHelper() { return m_pExtMgrDialog ? (DialogHelper*) m_pExtMgrDialog : (DialogHelper*) m_pUpdReqDialog; }
+ ExtensionCmdQueue* getCmdQueue() const { return m_pExecuteCmdQueue; }
void SetText( const ::rtl::OUString &rTitle );
void Show();
@@ -94,12 +92,6 @@ public:
//-----------------
bool checkUpdates( bool showUpdateOnly, bool parentVisible );
- bool updatePackages( const std::vector< TUpdateListEntry > &vList );
-
- bool enablePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- bool bEnable );
- bool removePackage( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage );
bool installPackage( const ::rtl::OUString &rPackageURL, bool bWarnUser = false );
bool queryTermination();
@@ -109,8 +101,8 @@ public:
bool supportsOptions( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
PackageState getPackageState( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > getContext() const { return m_xContext; }
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > getUserPkgMgr() const { return m_sPackageManagers[0]; }
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > getSharedPkgMgr() const { return m_sPackageManagers[1]; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > getExtensionManager() const { return m_xExtensionManager; }
+ bool isReadOnly( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
//-----------------
static ::rtl::Reference<TheExtensionManager> get(
diff --git a/desktop/source/deployment/gui/dp_gui_updatedata.hxx b/desktop/source/deployment/gui/dp_gui_updatedata.hxx
index dda6126f70d0..76eb8af31e8e 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedata.hxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedata.hxx
@@ -35,7 +35,6 @@
namespace com { namespace sun { namespace star { namespace deployment {
- class XPackageManager;
class XPackage;
}}}}
namespace com { namespace sun { namespace star { namespace xml { namespace dom {
@@ -45,31 +44,42 @@ namespace com { namespace sun { namespace star { namespace xml { namespace dom {
namespace dp_gui {
-struct UpdateListEntry
+struct UpdateData
{
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> m_xPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager> m_xPackageManager;
-
- UpdateListEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > &xPackageManager );
- ~UpdateListEntry();
-};
-
-typedef ::boost::shared_ptr< UpdateListEntry > TUpdateListEntry;
+ UpdateData( ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > const & aExt):
+ bIsShared(false), aInstalledPackage(aExt){};
+ //When entries added to the listbox then there can be one for the user update and one
+ //for the shared update. However, both list entries will contain the same UpdateData.
+ //isShared is used to indicate which one is used for the shared entry.
+ bool bIsShared;
-struct UpdateData
-{
+ //The currently installed extension which is going to be updated. If the extension exist in
+ //multiple repositories then it is the one with the highest version.
::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > aInstalledPackage;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > aPackageManager;
- // The content of the update information
+ //The version of the update
+ ::rtl::OUString updateVersion;
+
+ //For online update
+ // ======================
+ // The content of the update information.
+ //Only if aUpdateInfo is set then there is an online update available with a better version
+ //than any of the currently installed extensions with the same identifier.
::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > aUpdateInfo;
//The URL of the locally downloaded extension. It will only be set if there were no errors
//during the download
::rtl::OUString sLocalURL;
//The URL of the website wher the download can be obtained.
::rtl::OUString sWebsiteURL;
+
+ //For local update
+ //=====================
+ //The locale extension which is used as update for the user or shared repository.
+ //If set then the data for the online update (aUpdateInfo, sLocalURL, sWebsiteURL)
+ //are to be ignored.
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage >
+ aUpdateSource;
};
}
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
index 61479f799e6f..b27cd8da81fe 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
@@ -54,7 +54,8 @@
#include "com/sun/star/deployment/DeploymentException.hpp"
#include "com/sun/star/deployment/UpdateInformationProvider.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/deployment/XUpdateInformationProvider.hpp"
#include "com/sun/star/frame/XDesktop.hpp"
#include "com/sun/star/frame/XDispatch.hpp"
@@ -111,6 +112,7 @@
#include "dp_identifier.hxx"
#include "dp_version.hxx"
#include "dp_misc.h"
+#include "dp_update.hxx"
#include "dp_gui.h"
#include "dp_gui.hrc"
@@ -150,7 +152,6 @@ rtl::OUString confineToParagraph(rtl::OUString const & text) {
struct UpdateDialog::DisabledUpdate {
rtl::OUString name;
css::uno::Sequence< rtl::OUString > unsatisfiedDependencies;
- bool permission;
// We also want to show release notes and publisher for disabled updates
::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > aUpdateInfo;
};
@@ -229,7 +230,7 @@ public:
Thread(
css::uno::Reference< css::uno::XComponentContext > const & context,
UpdateDialog & dialog,
- const std::vector< TUpdateListEntry > &vExtensionList);
+ const std::vector< css::uno::Reference< css::deployment::XPackage > > & vExtensionList);
void stop();
@@ -240,18 +241,21 @@ private:
struct Entry {
explicit Entry(
css::uno::Reference< css::deployment::XPackage > const & thePackage,
- css::uno::Reference< css::deployment::XPackageManager > const &
- thePackageManager,
rtl::OUString const & theVersion);
css::uno::Reference< css::deployment::XPackage > package;
- css::uno::Reference< css::deployment::XPackageManager > packageManager;
rtl::OUString version;
+ //Indicates that the extension provides its own update URLs.
+ //If this is true, then we must not use the default update
+ //URL to find the update information.
+ bool bProvidesOwnUpdate;
css::uno::Reference< css::xml::dom::XNode > info;
+ UpdateDialog::DisabledUpdate disableUpdate;
+ dp_gui::UpdateData updateData;
};
- // A multimap in case an extension is installed in both "user" and "shared":
- typedef std::multimap< rtl::OUString, Entry > Map;
+ // A multimap in case an extension is installed in "user", "shared" or "bundled"
+ typedef std::map< rtl::OUString, Entry > Map;
virtual ~Thread();
@@ -269,21 +273,25 @@ private:
css::uno::Sequence< rtl::OUString > const & urls,
rtl::OUString const & identifier) const;
- void handle(
+ void getOwnUpdateInformation(
css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
Map * map);
+ ::rtl::OUString getUpdateDisplayString(
+ dp_gui::UpdateData const & data, ::rtl::OUString const & version = ::rtl::OUString()) const;
+
+ void prepareUpdateData(
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > const & updateInfo,
+ UpdateDialog::DisabledUpdate & out_du,
+ dp_gui::UpdateData & out_data) const;
+
bool update(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
- css::uno::Reference< css::xml::dom::XNode > const & updateInfo) const;
+ UpdateDialog::DisabledUpdate const & du,
+ dp_gui::UpdateData const & data) const;
css::uno::Reference< css::uno::XComponentContext > m_context;
UpdateDialog & m_dialog;
- std::vector< dp_gui::TUpdateListEntry > m_vExtensionList;
+ std::vector< css::uno::Reference< css::deployment::XPackage > > m_vExtensionList;
css::uno::Reference< css::deployment::XUpdateInformationProvider > m_updateInformation;
css::uno::Reference< css::task::XInteractionHandler > m_xInteractionHdl;
@@ -295,7 +303,7 @@ private:
UpdateDialog::Thread::Thread(
css::uno::Reference< css::uno::XComponentContext > const & context,
UpdateDialog & dialog,
- const std::vector< dp_gui::TUpdateListEntry > &vExtensionList):
+ const std::vector< css::uno::Reference< css::deployment::XPackage > > &vExtensionList):
m_context(context),
m_dialog(dialog),
m_vExtensionList(vExtensionList),
@@ -333,13 +341,14 @@ void UpdateDialog::Thread::stop() {
UpdateDialog::Thread::Entry::Entry(
css::uno::Reference< css::deployment::XPackage > const & thePackage,
- css::uno::Reference< css::deployment::XPackageManager > const &
- thePackageManager,
rtl::OUString const & theVersion):
+
package(thePackage),
- packageManager(thePackageManager),
- version(theVersion)
-{}
+ version(theVersion),
+ bProvidesOwnUpdate(false),
+ updateData(thePackage)
+{
+}
UpdateDialog::Thread::~Thread()
{
@@ -349,65 +358,94 @@ UpdateDialog::Thread::~Thread()
void UpdateDialog::Thread::execute()
{
- OSL_ASSERT( ! m_vExtensionList.empty() );
- Map map;
+ {
+ vos::OGuard g( Application::GetSolarMutex() );
+ if ( m_stop ) {
+ return;
+ }
+ }
+ css::uno::Reference<css::deployment::XExtensionManager> extMgr =
+ css::deployment::ExtensionManager::get(m_context);
+
+ std::vector<std::pair<css::uno::Reference<css::deployment::XPackage>, css::uno::Any > > errors;
+
+ dp_misc::UpdateInfoMap updateInfoMap = dp_misc::getOnlineUpdateInfos(
+ m_context, extMgr, m_updateInformation, &m_vExtensionList, errors);
- typedef std::vector< TUpdateListEntry >::const_iterator ITER;
- for ( ITER iIndex = m_vExtensionList.begin(); iIndex < m_vExtensionList.end(); ++iIndex )
+ typedef std::vector<std::pair<css::uno::Reference<css::deployment::XPackage>,
+ css::uno::Any> >::const_iterator ITERROR;
+ for (ITERROR ite = errors.begin(); ite != errors.end(); ite ++)
+ handleSpecificError(ite->first, ite->second);
+
+ for (dp_misc::UpdateInfoMap::iterator i(updateInfoMap.begin()); i != updateInfoMap.end(); i++)
{
- css::uno::Reference< css::deployment::XPackage > p = (*iIndex)->m_xPackage;
- css::uno::Reference< css::deployment::XPackageManager > m = (*iIndex)->m_xPackageManager;
- if ( p.is() )
+ dp_misc::UpdateInfo const & info = i->second;
+ UpdateData updateData(info.extension);
+ DisabledUpdate disableUpdate;
+ //determine if online updates meet the requirements
+ prepareUpdateData(info.info, disableUpdate, updateData);
+
+ //determine if the update is installed in the user or shared repository
+ rtl::OUString sOnlineVersion;
+ if (info.info.is())
+ sOnlineVersion = info.version;
+ rtl::OUString sVersionUser;
+ rtl::OUString sVersionShared;
+ rtl::OUString sVersionBundled;
+ css::uno::Sequence< css::uno::Reference< css::deployment::XPackage> > extensions;
+ try {
+ extensions = extMgr->getExtensionsWithSameIdentifier(
+ dp_misc::getIdentifier(info.extension), info.extension->getName(),
+ css::uno::Reference<css::ucb::XCommandEnvironment>());
+ } catch (css::lang::IllegalArgumentException& ) {
+ OSL_ASSERT(0);
+ }
+ OSL_ASSERT(extensions.getLength() == 3);
+ if (extensions[0].is() )
+ sVersionUser = extensions[0]->getVersion();
+ if (extensions[1].is() )
+ sVersionShared = extensions[1]->getVersion();
+ if (extensions[2].is() )
+ sVersionBundled = extensions[2]->getVersion();
+
+ bool bSharedReadOnly = extMgr->isReadOnlyRepository(OUSTR("shared"));
+
+ dp_misc::UPDATE_SOURCE sourceUser = dp_misc::isUpdateUserExtension(
+ bSharedReadOnly, sVersionUser, sVersionShared, sVersionBundled, sOnlineVersion);
+ dp_misc::UPDATE_SOURCE sourceShared = dp_misc::isUpdateSharedExtension(
+ bSharedReadOnly, sVersionShared, sVersionBundled, sOnlineVersion);
+
+ css::uno::Reference<css::deployment::XPackage> updateSource;
+ if (sourceUser != dp_misc::UPDATE_SOURCE_NONE)
{
+ if (sourceUser == dp_misc::UPDATE_SOURCE_SHARED)
{
- vos::OGuard g( Application::GetSolarMutex() );
- if ( m_stop ) {
- return;
- }
+ updateData.aUpdateSource = extensions[1];
+ updateData.updateVersion = extensions[1]->getVersion();
}
- handle( p, m, &map );
+ else if (sourceUser == dp_misc::UPDATE_SOURCE_BUNDLED)
+ {
+ updateData.aUpdateSource = extensions[2];
+ updateData.updateVersion = extensions[2]->getVersion();
+ }
+ if (!update(disableUpdate, updateData))
+ return;
}
- }
- if (!map.empty()) {
- const rtl::OUString sDefaultURL(dp_misc::getExtensionDefaultUpdateURL());
- if (sDefaultURL.getLength())
+ if (sourceShared != dp_misc::UPDATE_SOURCE_NONE)
{
- css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
- infos(
- getUpdateInformation(
- css::uno::Reference< css::deployment::XPackage >(),
- css::uno::Sequence< rtl::OUString >(&sDefaultURL, 1), rtl::OUString()));
- for (sal_Int32 i = 0; i < infos.getLength(); ++i) {
- css::uno::Reference< css::xml::dom::XNode > node(
- infos[i], css::uno::UNO_QUERY_THROW);
- dp_misc::DescriptionInfoset infoset(m_context, node);
- boost::optional< rtl::OUString > id(infoset.getIdentifier());
- if (!id) {
- continue;
- }
- Map::iterator end(map.upper_bound(*id));
- for (Map::iterator j(map.lower_bound(*id)); j != end; ++j) {
- rtl::OUString v(infoset.getVersion());
- if (dp_misc::compareVersions(v, j->second.version) ==
- dp_misc::GREATER)
- {
- j->second.version = v;
- j->second.info = node;
- }
- }
- }
- for (Map::const_iterator i(map.begin()); i != map.end(); ++i) {
- if (i->second.info.is() &&
- !update(
- i->second.package, i->second.packageManager,
- i->second.info))
- {
- break;
- }
+ if (sourceShared == dp_misc::UPDATE_SOURCE_BUNDLED)
+ {
+ updateData.aUpdateSource = extensions[2];
+ updateData.updateVersion = extensions[2]->getVersion();
}
+ updateData.bIsShared = true;
+ if (!update(disableUpdate, updateData))
+ return;
}
}
+
+
vos::OGuard g(Application::GetSolarMutex());
if (!m_stop) {
m_dialog.checkingDone();
@@ -446,142 +484,95 @@ void UpdateDialog::Thread::handleSpecificError(
}
}
-css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
-UpdateDialog::Thread::getUpdateInformation(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Sequence< rtl::OUString > const & urls,
- rtl::OUString const & identifier) const
+::rtl::OUString UpdateDialog::Thread::getUpdateDisplayString(
+ dp_gui::UpdateData const & data, ::rtl::OUString const & version) const
{
- try {
- return m_updateInformation->getUpdateInformation(urls, identifier);
- } catch (css::uno::RuntimeException &) {
- throw;
- } catch (css::ucb::CommandFailedException & e) {
- handleSpecificError(package, e.Reason);
- } catch (css::ucb::CommandAbortedException &) {
- } catch (css::uno::Exception & e) {
- handleSpecificError(package, css::uno::makeAny(e));
+ OSL_ASSERT(data.aInstalledPackage.is());
+ rtl::OUStringBuffer b(data.aInstalledPackage->getDisplayName());
+ b.append(static_cast< sal_Unicode >(' '));
+ {
+ vos::OGuard g( Application::GetSolarMutex() );
+ if(!m_stop)
+ b.append(m_dialog.m_version);
}
- return
- css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >();
-}
+ b.append(static_cast< sal_Unicode >(' '));
+ if (version.getLength())
+ b.append(version);
+ else
+ b.append(data.updateVersion);
-void UpdateDialog::Thread::handle(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
- Map * map)
-{
- rtl::OUString id(dp_misc::getIdentifier(package));
- css::uno::Sequence< rtl::OUString > urls(
- package->getUpdateInformationURLs());
- if (urls.getLength() == 0) {
- map->insert(
- Map::value_type(
- id, Entry(package, packageManager, package->getVersion())));
- } else {
- css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
- infos(getUpdateInformation(package, urls, id));
- rtl::OUString latestVersion(package->getVersion());
- sal_Int32 latestIndex = -1;
- for (sal_Int32 i = 0; i < infos.getLength(); ++i) {
- dp_misc::DescriptionInfoset infoset(
- m_context,
- css::uno::Reference< css::xml::dom::XNode >(
- infos[i], css::uno::UNO_QUERY_THROW));
- boost::optional< rtl::OUString > id2(infoset.getIdentifier());
- if (!id2) {
- continue;
- }
- if (*id2 == id) {
- rtl::OUString v(infoset.getVersion());
- if (dp_misc::compareVersions(v, latestVersion) ==
- dp_misc::GREATER)
- {
- latestVersion = v;
- latestIndex = i;
- }
- }
- }
- if (latestIndex != -1) {
- update(
- package, packageManager,
- css::uno::Reference< css::xml::dom::XNode >(
- infos[latestIndex], css::uno::UNO_QUERY_THROW));
+ if (data.sWebsiteURL.getLength())
+ {
+ b.append(static_cast< sal_Unicode >(' '));
+ {
+ vos::OGuard g( Application::GetSolarMutex() );
+ if(!m_stop)
+ b.append(m_dialog.m_browserbased);
}
}
+ return b.makeStringAndClear();
}
-bool UpdateDialog::Thread::update(
- css::uno::Reference< css::deployment::XPackage > const & package,
- css::uno::Reference< css::deployment::XPackageManager > const &
- packageManager,
- css::uno::Reference< css::xml::dom::XNode > const & updateInfo) const
+/** out_data will only be filled if all dependencies are ok.
+ */
+void UpdateDialog::Thread::prepareUpdateData(
+ css::uno::Reference< css::xml::dom::XNode > const & updateInfo,
+ UpdateDialog::DisabledUpdate & out_du,
+ dp_gui::UpdateData & out_data) const
{
+ if (!updateInfo.is())
+ return;
dp_misc::DescriptionInfoset infoset(m_context, updateInfo);
OSL_ASSERT(infoset.getVersion().getLength() != 0);
css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > > ds(
dp_misc::Dependencies::check(infoset));
- UpdateDialog::DisabledUpdate du;
- du.aUpdateInfo = updateInfo;
- du.unsatisfiedDependencies.realloc(ds.getLength());
+ out_du.aUpdateInfo = updateInfo;
+ out_du.unsatisfiedDependencies.realloc(ds.getLength());
for (sal_Int32 i = 0; i < ds.getLength(); ++i) {
- du.unsatisfiedDependencies[i] = dp_misc::Dependencies::getErrorText(ds[i]);
+ out_du.unsatisfiedDependencies[i] = dp_misc::Dependencies::getErrorText(ds[i]);
}
- du.permission = ! packageManager->isReadOnly();
+
const ::boost::optional< ::rtl::OUString> updateWebsiteURL(infoset.getLocalizedUpdateWebsiteURL());
- rtl::OUStringBuffer b(package->getDisplayName());
- b.append(static_cast< sal_Unicode >(' '));
- {
- vos::OGuard g( Application::GetSolarMutex() );
- if ( m_stop )
- return !m_stop;
- else
- b.append(m_dialog.m_version);
- }
- b.append(static_cast< sal_Unicode >(' '));
- b.append(infoset.getVersion());
- if (updateWebsiteURL)
+
+ out_du.name = getUpdateDisplayString(out_data, infoset.getVersion());
+
+ if (out_du.unsatisfiedDependencies.getLength() == 0)
{
- b.append(static_cast< sal_Unicode >(' '));
- {
- vos::OGuard g( Application::GetSolarMutex() );
- if ( m_stop )
- return !m_stop;
- else
- b.append(m_dialog.m_browserbased);
- }
+ out_data.aUpdateInfo = updateInfo;
+ out_data.updateVersion = infoset.getVersion();
+ if (updateWebsiteURL)
+ out_data.sWebsiteURL = *updateWebsiteURL;
}
- du.name = b.makeStringAndClear();
+}
- if (du.unsatisfiedDependencies.getLength() == 0 && du.permission)
+bool UpdateDialog::Thread::update(
+ UpdateDialog::DisabledUpdate const & du,
+ dp_gui::UpdateData const & data) const
+{
+ bool ret = false;
+ if (du.unsatisfiedDependencies.getLength() == 0)
{
- dp_gui::UpdateData data;
- data.aInstalledPackage = package;
- data.aPackageManager = packageManager;
- data.aUpdateInfo = updateInfo;
- if (updateWebsiteURL)
- data.sWebsiteURL = *updateWebsiteURL;
vos::OGuard g(Application::GetSolarMutex());
if (!m_stop) {
- m_dialog.addEnabledUpdate(du.name, data);
+ m_dialog.addEnabledUpdate(getUpdateDisplayString(data), data);
}
- return !m_stop;
+ ret = !m_stop;
} else {
vos::OGuard g(Application::GetSolarMutex());
if (!m_stop) {
- m_dialog.addDisabledUpdate(du);
+ m_dialog.addDisabledUpdate(du);
}
- return !m_stop;
+ ret = !m_stop;
}
+ return ret;
}
// UpdateDialog ----------------------------------------------------------
UpdateDialog::UpdateDialog(
css::uno::Reference< css::uno::XComponentContext > const & context,
Window * parent,
- const std::vector< dp_gui::TUpdateListEntry > &vExtensionList,
+ const std::vector<css::uno::Reference< css::deployment::XPackage > > &vExtensionList,
std::vector< dp_gui::UpdateData > * updateData):
ModalDialog(parent,DpGuiResId(RID_DLG_UPDATE)),
m_context(context),
@@ -611,8 +602,6 @@ UpdateDialog::UpdateDialog(
m_noInstall(String(DpGuiResId(RID_DLG_UPDATE_NOINSTALL))),
m_noDependency(String(DpGuiResId(RID_DLG_UPDATE_NODEPENDENCY))),
m_noDependencyCurVer(String(DpGuiResId(RID_DLG_UPDATE_NODEPENDENCY_CUR_VER))),
- m_noPermission(String(DpGuiResId(RID_DLG_UPDATE_NOPERMISSION))),
- m_noPermissionVista(String(DpGuiResId(RID_DLG_UPDATE_NOPERMISSION_VISTA))),
m_browserbased(String(DpGuiResId(RID_DLG_UPDATE_BROWSERBASED))),
m_version(String(DpGuiResId(RID_DLG_UPDATE_VERSION))),
m_updateData(*updateData),
@@ -626,6 +615,9 @@ UpdateDialog::UpdateDialog(
// m_extensionManagerDialog(extensionManagerDialog)
{
OSL_ASSERT(updateData != NULL);
+
+ m_xExtensionManager = css::deployment::ExtensionManager::get( context );
+
css::uno::Reference< css::awt::XToolkit > toolkit;
try {
toolkit = css::uno::Reference< css::awt::XToolkit >(
@@ -666,9 +658,6 @@ UpdateDialog::UpdateDialog(
if ( ! dp_misc::office_is_running())
m_help.Disable();
FreeResource();
- String sTemp(m_noPermissionVista);
- sTemp.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
- m_noPermissionVista = sTemp;
initDescription();
}
@@ -998,12 +987,25 @@ void UpdateDialog::clearDescription()
bool UpdateDialog::showDescription(css::uno::Reference< css::xml::dom::XNode > const & aUpdateInfo)
{
dp_misc::DescriptionInfoset infoset(m_context, aUpdateInfo);
- std::pair< rtl::OUString, rtl::OUString > pairPub = infoset.getLocalizedPublisherNameAndURL();
- rtl::OUString sPub = pairPub.first;
- rtl::OUString sURL = pairPub.second;
- rtl::OUString sRel = infoset.getLocalizedReleaseNotesURL();
+ return showDescription(infoset.getLocalizedPublisherNameAndURL(),
+ infoset.getLocalizedReleaseNotesURL());
+}
- if ( sPub.getLength() == 0 && sURL.getLength() == 0 && sRel.getLength() == 0 )
+bool UpdateDialog::showDescription(css::uno::Reference< css::deployment::XPackage > const & aExtension)
+{
+ OSL_ASSERT(aExtension.is());
+ css::beans::StringPair pubInfo = aExtension->getPublisherInfo();
+ return showDescription(std::make_pair(pubInfo.First, pubInfo.Second),
+ OUSTR(""));
+}
+
+bool UpdateDialog::showDescription(std::pair< rtl::OUString, rtl::OUString > const & pairPublisher,
+ rtl::OUString const & sReleaseNotes)
+{
+ rtl::OUString sPub = pairPublisher.first;
+ rtl::OUString sURL = pairPublisher.second;
+
+ if ( sPub.getLength() == 0 && sURL.getLength() == 0 && sReleaseNotes.getLength() == 0 )
// nothing to show
return false;
@@ -1017,7 +1019,7 @@ bool UpdateDialog::showDescription(css::uno::Reference< css::xml::dom::XNode > c
bPublisher = true;
}
- if ( sRel.getLength() > 0 )
+ if ( sReleaseNotes.getLength() > 0 )
{
if ( !bPublisher )
{
@@ -1026,7 +1028,7 @@ bool UpdateDialog::showDescription(css::uno::Reference< css::xml::dom::XNode > c
}
m_ReleaseNotesLabel.Show();
m_ReleaseNotesLink.Show();
- m_ReleaseNotesLink.SetURL( sRel );
+ m_ReleaseNotesLink.SetURL( sReleaseNotes );
}
return true;
}
@@ -1055,6 +1057,16 @@ bool UpdateDialog::showDescription( const String& rDescription, bool bWithPublis
return true;
}
+bool UpdateDialog::isReadOnly( const css::uno::Reference< css::deployment::XPackage > &xPackage ) const
+{
+ if ( m_xExtensionManager.is() && xPackage.is() )
+ {
+ return m_xExtensionManager->isReadOnlyRepository( xPackage->getRepositoryName() );
+ }
+ else
+ return true;
+}
+
IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG)
{
rtl::OUStringBuffer b;
@@ -1074,7 +1086,12 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG)
const std::vector< UpdateDialog::DisabledUpdate >::size_type sizeDisabled =
m_disabledUpdates.size();
if (pos < sizeEnabled)
- bInserted = showDescription(m_enabledUpdates[pos].aUpdateInfo);
+ {
+ if (m_enabledUpdates[pos].aUpdateSource.is())
+ bInserted = showDescription(m_enabledUpdates[pos].aUpdateSource);
+ else
+ bInserted = showDescription(m_enabledUpdates[pos].aUpdateInfo);
+ }
else if (pos >= sizeEnabled
&& pos < (sizeEnabled + sizeDisabled))
bInserted = showDescription(m_disabledUpdates[pos - sizeEnabled].aUpdateInfo);
@@ -1120,16 +1137,6 @@ IMPL_LINK(UpdateDialog, selectionHandler, void *, EMPTYARG)
b.appendAscii(RTL_CONSTASCII_STRINGPARAM(" "));
b.append(m_noDependencyCurVer);
}
- if (!data.permission) {
- if (b.getLength() == 0) {
- b.append(m_noInstall);
- }
- b.append(LF);
- if (isVista())
- b.append(m_noPermissionVista);
- else
- b.append(m_noPermission);
- }
break;
}
case GENERAL_ERROR:
@@ -1233,10 +1240,10 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG)
typedef ::std::vector<UpdateData>::const_iterator CIT;
for (CIT i = m_enabledUpdates.begin(); i < m_enabledUpdates.end(); i++)
{
- OSL_ASSERT(i->aPackageManager.is());
+ OSL_ASSERT(i->aInstalledPackage.is());
//If the user has no write access to the shared folder then the update
//for a shared extension is disable, that is it cannot be in m_enabledUpdates
- OSL_ASSERT(i->aPackageManager->isReadOnly() == sal_False);
+// OSL_ASSERT(isReadOnly(i->aInstalledPackage) == sal_False);
#if 0
// TODO: check!
OSL_ASSERT(m_extensionManagerDialog.get());
@@ -1248,6 +1255,7 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG)
#endif
}
+
for (USHORT i = 0; i < m_updates.getItemCount(); ++i) {
UpdateDialog::Index const * p =
static_cast< UpdateDialog::Index const * >(
@@ -1256,6 +1264,7 @@ IMPL_LINK(UpdateDialog, okHandler, void *, EMPTYARG)
m_updateData.push_back(m_enabledUpdates[p->index.enabledUpdate]);
}
}
+
EndDialog(RET_OK);
return 0;
}
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
index 1a8484e2c20f..32c317cb8735 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.hxx
@@ -60,7 +60,8 @@ class Window;
namespace com { namespace sun { namespace star {
namespace awt { class XThrobber; }
- namespace deployment { class XPackageManager; }
+ namespace deployment { class XExtensionManager;
+ class XPackage; }
namespace uno { class XComponentContext; }
} } }
@@ -82,16 +83,17 @@ public:
@param parent
the parent window, may be null
- @param selectedPackages
- if non-null, only check for updates for the selected packages
-
- @param packageManagers
- if non-null, check for updates for all managed packages
+ @param vExtensionList
+ check for updates for the contained extensions. There must only be one extension with
+ a particular identifier. If one extension is installed in several repositories, then the
+ one with the highest version must be used, because it contains the latest known update
+ information.
*/
UpdateDialog(
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const & context,
Window * parent,
- const std::vector< dp_gui::TUpdateListEntry > &vExtensionList,
+ const std::vector< com::sun::star::uno::Reference<
+ com::sun::star::deployment::XPackage > > & vExtensionList,
std::vector< dp_gui::UpdateData > * updateData);
~UpdateDialog();
@@ -141,6 +143,7 @@ private:
UpdateDialog & m_dialog;
};
+
friend class CheckListBox;
void insertItem(
@@ -168,9 +171,14 @@ private:
void initDescription();
void clearDescription();
+ bool showDescription(::com::sun::star::uno::Reference<
+ ::com::sun::star::deployment::XPackage > const & aExtension);
+ bool showDescription(std::pair< rtl::OUString, rtl::OUString > const & pairPublisher,
+ rtl::OUString const & sReleaseNotes);
bool showDescription( ::com::sun::star::uno::Reference<
::com::sun::star::xml::dom::XNode > const & aUpdateInfo);
bool showDescription( const String& rDescription, bool bWithPublisher );
+ bool isReadOnly( const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > &xPackage ) const;
DECL_LINK(selectionHandler, void *);
DECL_LINK(allHandler, void *);
@@ -204,8 +212,6 @@ private:
rtl::OUString m_noInstall;
rtl::OUString m_noDependency;
rtl::OUString m_noDependencyCurVer;
- rtl::OUString m_noPermission;
- rtl::OUString m_noPermissionVista;
rtl::OUString m_browserbased;
rtl::OUString m_version;
std::vector< dp_gui::UpdateData > m_enabledUpdates;
@@ -214,6 +220,7 @@ private:
std::vector< UpdateDialog::SpecificError > m_specificErrors;
std::vector< dp_gui::UpdateData > & m_updateData;
rtl::Reference< UpdateDialog::Thread > m_thread;
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
Point m_aFirstLinePos;
Size m_aFirstLineSize;
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.src b/desktop/source/deployment/gui/dp_gui_updatedialog.src
index b86a8ad66f08..325d98c88d48 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.src
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.src
@@ -244,18 +244,6 @@ ModalDialog RID_DLG_UPDATE {
String RID_DLG_UPDATE_NODEPENDENCY_CUR_VER {
Text[en-US] = "You have OpenOffice.org %VERSION";
};
- String RID_DLG_UPDATE_NOPERMISSION {
- Text[en-US] = "No write permission (shared extension).";
- };
- String RID_DLG_UPDATE_NOPERMISSION_VISTA {
- Text[en-US] = "No write permission. %PRODUCTNAME needs to run as administrator.\n"
- "Please follow these steps to update this shared extension:\n"
- "1. Close Extension Manager dialog.\n"
- "2. Exit %PRODUCTNAME.\n"
- "3. Exit %PRODUCTNAME Quickstarter located in the tray area of Windows.\n"
- "4. Run %PRODUCTNAME as administrator. In order to do this call the context menu of the %PRODUCTNAME program icon and choose \'Run as administrator\'.\n"
- "5. Call the Extension Manager dialog and update this shared extension.\n";
- };
String RID_DLG_UPDATE_BROWSERBASED {
Text[en-US] = "browser based update";
};
diff --git a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx
index 113e6d2069ac..067a703ec413 100644
--- a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.cxx
@@ -46,6 +46,7 @@
#include "cppuhelper/implbase3.hxx"
#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/beans/NamedValue.hpp"
#include "com/sun/star/xml/dom/XElement.hpp"
#include "com/sun/star/xml/dom/XNode.hpp"
#include "com/sun/star/xml/dom/XNodeList.hpp"
@@ -53,7 +54,8 @@
#include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp"
#include "com/sun/star/ucb/XCommandEnvironment.hpp"
#include "com/sun/star/ucb/XProgressHandler.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/deployment/XUpdateInformationProvider.hpp"
#include "com/sun/star/deployment/DependencyException.hpp"
#include "com/sun/star/deployment/LicenseException.hpp"
@@ -256,6 +258,8 @@ UpdateInstallDialog::UpdateInstallDialog(
{
FreeResource();
+ m_xExtensionManager = css::deployment::ExtensionManager::get( xCtx );
+
m_cancel.SetClickHdl(LINK(this, UpdateInstallDialog, cancelHandler));
m_mle_info.EnableCursor(FALSE);
if ( ! dp_misc::office_is_running())
@@ -376,13 +380,12 @@ void UpdateInstallDialog::Thread::downloadExtensions()
{
UpdateData & curData = *i;
- OSL_ASSERT(curData.aUpdateInfo.is());
+ if (!curData.aUpdateInfo.is() || curData.aUpdateSource.is())
+ continue;
//We assume that m_aVecUpdateData contains only information about extensions which
//can be downloaded directly.
OSL_ASSERT(curData.sWebsiteURL.getLength() == 0);
- if (!curData.aUpdateInfo.is())
- continue;
//update the name of the extension which is to be downloaded
{
::vos::OGuard g(Application::GetSolarMutex());
@@ -487,15 +490,13 @@ void UpdateInstallDialog::Thread::installExtensions()
// osl::Thread::wait(v);
bool bError = false;
bool bLicenseDeclined = false;
- cssu::Reference<css::deployment::XPackage> xPackage;
+ cssu::Reference<css::deployment::XPackage> xExtension;
UpdateData & curData = *i;
cssu::Exception exc;
try
{
- if (curData.sLocalURL.getLength() == 0)
- continue;
cssu::Reference< css::task::XAbortChannel > xAbortChannel(
- curData.aPackageManager->createAbortChannel() );
+ curData.aInstalledPackage->createAbortChannel() );
{
vos::OGuard g(Application::GetSolarMutex());
if (m_stop) {
@@ -503,8 +504,35 @@ void UpdateInstallDialog::Thread::installExtensions()
}
m_abort = xAbortChannel;
}
- xPackage = curData.aPackageManager->addPackage(
- curData.sLocalURL, OUString(), xAbortChannel, m_updateCmdEnv.get());
+ if (!curData.aUpdateSource.is() && curData.sLocalURL.getLength())
+ {
+ css::beans::NamedValue prop(OUSTR("EXTENSION_UPDATE"), css::uno::makeAny(OUSTR("1")));
+ if (!curData.bIsShared)
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.sLocalURL, css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("user"), xAbortChannel, m_updateCmdEnv.get());
+ else
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.sLocalURL, css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("shared"), xAbortChannel, m_updateCmdEnv.get());
+ }
+ else if (curData.aUpdateSource.is())
+ {
+ OSL_ASSERT(curData.aUpdateSource.is());
+ //I am not sure if we should obtain the install properties and pass them into
+ //add extension. Currently it contains only "SUPPRESS_LICENSE". So it it could happen
+ //that a license is displayed when updating from the shared repository, although the
+ //shared extension was installed using "SUPPRESS_LICENSE".
+ css::beans::NamedValue prop(OUSTR("EXTENSION_UPDATE"), css::uno::makeAny(OUSTR("1")));
+ if (!curData.bIsShared)
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.aUpdateSource->getURL(), css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("user"), xAbortChannel, m_updateCmdEnv.get());
+ else
+ xExtension = m_dialog.getExtensionManager()->addExtension(
+ curData.aUpdateSource->getURL(), css::uno::Sequence<css::beans::NamedValue>(&prop, 1),
+ OUSTR("shared"), xAbortChannel, m_updateCmdEnv.get());
+ }
}
catch (css::deployment::DeploymentException & de)
{
@@ -533,7 +561,7 @@ void UpdateInstallDialog::Thread::installExtensions()
m_dialog.setError(UpdateInstallDialog::ERROR_LICENSE_DECLINED,
curData.aInstalledPackage->getDisplayName(), OUString());
}
- else if (!xPackage.is() || bError)
+ else if (!xExtension.is() || bError)
{
::vos::OGuard g(Application::GetSolarMutex());
if (m_stop) {
diff --git a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx
index c3d01c8ee6d9..c0e64a8028e8 100644
--- a/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx
+++ b/desktop/source/deployment/gui/dp_gui_updateinstalldialog.hxx
@@ -41,6 +41,9 @@
#include "dp_gui_autoscrolledit.hxx"
/// @HTML
+namespace com { namespace sun { namespace star { namespace deployment {
+ class XExtensionManager;
+}}}}
namespace com { namespace sun { namespace star { namespace uno {
class XComponentContext;
}}}}
@@ -102,9 +105,12 @@ private:
};
void setError(INSTALL_ERROR err, ::rtl::OUString const & sExtension, ::rtl::OUString const & exceptionMessage);
void setError(::rtl::OUString const & exceptionMessage);
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > getExtensionManager() const
+ { return m_xExtensionManager; }
rtl::Reference< Thread > m_thread;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xComponentContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
//Signals that an error occurred during download and installation
bool m_bError;
bool m_bNoEntry;
diff --git a/desktop/source/deployment/gui/license_dialog.cxx b/desktop/source/deployment/gui/license_dialog.cxx
index 50992eb07a97..9698e257b953 100644
--- a/desktop/source/deployment/gui/license_dialog.cxx
+++ b/desktop/source/deployment/gui/license_dialog.cxx
@@ -116,6 +116,7 @@ struct LicenseDialogImpl : public ModalDialog
LicenseDialogImpl(
Window * pParent,
css::uno::Reference< css::uno::XComponentContext > const & xContext,
+ const ::rtl::OUString & sExtensionName,
const ::rtl::OUString & sLicenseText);
virtual void Activate();
@@ -193,6 +194,7 @@ void LicenseView::Notify( SfxBroadcaster&, const SfxHint& rHint )
LicenseDialogImpl::LicenseDialogImpl(
Window * pParent,
cssu::Reference< cssu::XComponentContext > const & xContext,
+ const ::rtl::OUString & sExtensionName,
const ::rtl::OUString & sLicenseText):
ModalDialog(pParent, DpGuiResId(RID_DLG_LICENSE))
,m_xComponentContext(xContext)
@@ -225,6 +227,7 @@ LicenseDialogImpl::LicenseDialogImpl(
m_fiArrow1.Show(true);
m_fiArrow2.Show(false);
m_mlLicense.SetText(sLicenseText);
+ m_ftHead.SetText(m_ftHead.GetText() + OUString('\n') + sExtensionName);
m_mlLicense.SetEndReachedHdl( LINK(this, LicenseDialogImpl, EndReachedHdl) );
m_mlLicense.SetScrolledHdl( LINK(this, LicenseDialogImpl, ScrolledHdl) );
@@ -296,7 +299,7 @@ LicenseDialog::LicenseDialog( Sequence<Any> const& args,
Reference<XComponentContext> const& xComponentContext)
: m_xComponentContext(xComponentContext)
{
- comphelper::unwrapArgs( args, m_parent, m_sLicenseText );
+ comphelper::unwrapArgs( args, m_parent, m_sExtensionName, m_sLicenseText );
}
// XExecutableDialog
@@ -315,8 +318,10 @@ sal_Int16 LicenseDialog::execute() throw (RuntimeException)
sal_Int16 LicenseDialog::solar_execute()
{
- std::auto_ptr<LicenseDialogImpl> dlg(new LicenseDialogImpl(
- VCLUnoHelper::GetWindow(m_parent), m_xComponentContext, m_sLicenseText));
+ std::auto_ptr<LicenseDialogImpl> dlg(
+ new LicenseDialogImpl(
+ VCLUnoHelper::GetWindow(m_parent),
+ m_xComponentContext, m_sExtensionName, m_sLicenseText));
return dlg->Execute();
}
diff --git a/desktop/source/deployment/gui/license_dialog.hxx b/desktop/source/deployment/gui/license_dialog.hxx
index 4733922dc607..bb4a6b6646c8 100644
--- a/desktop/source/deployment/gui/license_dialog.hxx
+++ b/desktop/source/deployment/gui/license_dialog.hxx
@@ -48,6 +48,7 @@ class LicenseDialog
{
Reference<XComponentContext> const m_xComponentContext;
Reference<awt::XWindow> /* const */ m_parent;
+ OUString m_sExtensionName;
OUString /* const */ m_sLicenseText;
OUString m_initialTitle;
diff --git a/desktop/source/deployment/inc/dp_descriptioninfoset.hxx b/desktop/source/deployment/inc/dp_descriptioninfoset.hxx
index e58ff1e71acd..37e616bb1a0b 100644
--- a/desktop/source/deployment/inc/dp_descriptioninfoset.hxx
+++ b/desktop/source/deployment/inc/dp_descriptioninfoset.hxx
@@ -62,6 +62,7 @@ struct DESKTOP_DEPLOYMENTMISC_DLLPUBLIC SimpleLicenseAttributes
bool suppressIfRequired;
};
+
/**
Access to the content of an XML <code>description</code> element.
@@ -216,6 +217,8 @@ public:
*/
::rtl::OUString getIconURL( sal_Bool bHighContrast ) const;
+ bool hasDescription() const;
+
private:
SAL_DLLPRIVATE ::boost::optional< ::rtl::OUString > getOptionalValue(
::rtl::OUString const & expression) const;
@@ -279,6 +282,18 @@ private:
::com::sun::star::xml::xpath::XXPathAPI > m_xpath;
};
+inline bool DescriptionInfoset::hasDescription() const
+{
+ return m_element.is();
+}
+
+/** creates a DescriptionInfoset object.
+
+ The argument sExtensionFolderURL is a file URL to extension folder containing
+ the description.xml.
+ */
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+DescriptionInfoset getDescriptionInfoset(::rtl::OUString const & sExtensionFolderURL);
}
#endif
diff --git a/desktop/source/deployment/inc/dp_misc.h b/desktop/source/deployment/inc/dp_misc.h
index a717e7797c8a..61e3fcc45418 100644
--- a/desktop/source/deployment/inc/dp_misc.h
+++ b/desktop/source/deployment/inc/dp_misc.h
@@ -36,6 +36,7 @@
#include "com/sun/star/lang/XComponent.hpp"
#include "com/sun/star/lang/DisposedException.hpp"
#include "com/sun/star/deployment/XPackageRegistry.hpp"
+#include "com/sun/star/ucb/XCommandEnvironment.hpp"
#include "com/sun/star/awt/XWindow.hpp"
#include "dp_misc_api.hxx"
@@ -69,14 +70,33 @@ inline void try_dispose( ::com::sun::star::uno::Reference< ::com::sun::star::uno
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
::rtl::OUString expandUnoRcTerm( ::rtl::OUString const & term );
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+::rtl::OUString makeRcTerm( ::rtl::OUString const & url );
+
//==============================================================================
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
::rtl::OUString expandUnoRcUrl( ::rtl::OUString const & url );
//==============================================================================
+
+/** appends a relative path to a url.
+
+ The relative path must already be correctly encoded for use in an URL.
+ If the URL starts with vnd.sun.star.expand then the relative path will
+ be again encoded for use in an "expand" URL.
+ */
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC ::rtl::OUString makeURL(
::rtl::OUString const & baseURL, ::rtl::OUString const & relPath );
+
+/** appends a relative path to a url.
+
+ This is the same as makeURL, but the relative Path must me a segment
+ of an system path.
+ */
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC ::rtl::OUString makeURLAppendSysPathSegment(
+ ::rtl::OUString const & baseURL, ::rtl::OUString const & relPath );
+
//==============================================================================
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC ::rtl::OUString generateRandomPipeId();
@@ -97,11 +117,6 @@ oslProcess raiseProcess( ::rtl::OUString const & appURL,
::com::sun::star::uno::Sequence< ::rtl::OUString > const & args );
//==============================================================================
-/** returns the default update URL (for the update information) which
- is used when an extension does not provide its own URL.
-*/
-DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
-::rtl::OUString getExtensionDefaultUpdateURL();
/** writes the argument string to the console.
On Linux/Unix/etc. it converts the UTF16 string to an ANSI string using
@@ -151,6 +166,14 @@ DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
void TRACE(::rtl::OUString const & sText);
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
void TRACE(::rtl::OString const & sText);
+
+/** registers or revokes shared or bundled extensions which have been
+ recently added or removed.
+*/
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+void syncRepositories(::com::sun::star::uno::Reference<
+ ::com::sun::star::ucb::XCommandEnvironment> const & xCmdEnv);
+
}
#endif
diff --git a/desktop/source/deployment/inc/dp_ucb.h b/desktop/source/deployment/inc/dp_ucb.h
index 6f9127504860..03144388e8a8 100644
--- a/desktop/source/deployment/inc/dp_ucb.h
+++ b/desktop/source/deployment/inc/dp_ucb.h
@@ -28,6 +28,7 @@
#if ! defined INCLUDED_DP_UCB_H
#define INCLUDED_DP_UCB_H
+#include <list>
#include "rtl/byteseq.hxx"
#include "rtl/instance.hxx"
#include "com/sun/star/ucb/XCommandEnvironment.hpp"
@@ -79,6 +80,12 @@ DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
bool readLine( ::rtl::OUString * res, ::rtl::OUString const & startingWith,
::ucbhelper::Content & ucb_content, rtl_TextEncoding textenc );
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+bool readProperties( ::std::list< ::std::pair< ::rtl::OUString, ::rtl::OUString> > & out_result,
+ ::ucbhelper::Content & ucb_content);
+
+
+
}
#endif
diff --git a/desktop/source/deployment/inc/dp_update.hxx b/desktop/source/deployment/inc/dp_update.hxx
new file mode 100755
index 000000000000..01511b1f2d21
--- /dev/null
+++ b/desktop/source/deployment/inc/dp_update.hxx
@@ -0,0 +1,147 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_UPDATE_HXX
+#define INCLUDED_DP_UPDATE_HXX
+
+
+#include "com/sun/star/deployment/XPackage.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/XUpdateInformationProvider.hpp"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/xml/dom/XNode.hpp"
+
+#include "rtl/ustrbuf.hxx"
+#include "dp_misc_api.hxx"
+
+#include <map>
+#include <vector>
+
+namespace dp_misc {
+
+/** returns the default update URL (for the update information) which
+ is used when an extension does not provide its own URL.
+*/
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+::rtl::OUString getExtensionDefaultUpdateURL();
+
+enum UPDATE_SOURCE
+{
+ UPDATE_SOURCE_NONE,
+ UPDATE_SOURCE_SHARED,
+ UPDATE_SOURCE_BUNDLED,
+ UPDATE_SOURCE_ONLINE
+};
+
+/* determine if an update is available which is installed in the
+ user repository.
+
+ If the return value is UPDATE_SOURCE_NONE, then no update is
+ available, otherwise the return value determine from which the
+ repository the update is used.
+*/
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+UPDATE_SOURCE isUpdateUserExtension(
+ bool bReadOnlyShared,
+ ::rtl::OUString const & userVersion,
+ ::rtl::OUString const & sharedVersion,
+ ::rtl::OUString const & bundledVersion,
+ ::rtl::OUString const & onlineVersion);
+
+/* determine if an update is available which is installed in the
+ shared repository.
+
+ If the return value is UPDATE_SOURCE_NONE, then no update is
+ available, otherwise the return value determine from which the
+ repository the update is used.
+*/
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+UPDATE_SOURCE isUpdateSharedExtension(
+ bool bReadOnlyShared,
+ ::rtl::OUString const & sharedVersion,
+ ::rtl::OUString const & bundledVersion,
+ ::rtl::OUString const & onlineVersion);
+
+/* determines the extension with the highest identifier and returns it
+
+ */
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage>
+getExtensionWithHighestVersion(
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::deployment::XPackage> > const & seqExtensionsWithSameId);
+
+
+struct UpdateInfo
+{
+ UpdateInfo( ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage> const & ext);
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::deployment::XPackage> extension;
+//version of the update
+ ::rtl::OUString version;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > info;
+};
+
+typedef std::map< ::rtl::OUString, UpdateInfo > UpdateInfoMap;
+
+/*
+ @param extensionList
+ List of extension for which online update information are to be obtained. If NULL, then
+ for update information are obtained for all installed extension. There may be only one extension
+ with a particular identifier contained in the list. If one extension is installed
+ in several repositories, then the one with the highest version must be used, because it contains
+ the more recent URLs for getting the update information (if at all).
+ @param out_errors
+ the first member of the pair is the extension and the second the exception that was produced
+ when processing the extension.
+
+ @return
+ A map of UpdateInfo instances. If the parameter extensionList was given, then the map contains
+ at only information for those extensions.
+ */
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+UpdateInfoMap getOnlineUpdateInfos(
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext> const &xContext,
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager> const & xExtMgr,
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XUpdateInformationProvider > const & updateInformation,
+ std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > > const * extensionList,
+ ::std::vector< ::std::pair< ::com::sun::star::uno::Reference<
+ ::com::sun::star::deployment::XPackage>, ::com::sun::star::uno::Any> > & out_errors);
+
+/* retunrs the highest version from the provided arguments.
+*/
+DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
+::rtl::OUString getHighestVersion(
+ ::rtl::OUString const & userVersion,
+ ::rtl::OUString const & sharedVersion,
+ ::rtl::OUString const & bundledVersion,
+ ::rtl::OUString const & onlineVersion);
+
+}
+
+#endif
diff --git a/desktop/source/deployment/inc/dp_version.hxx b/desktop/source/deployment/inc/dp_version.hxx
index 9808ebaab388..c459333f97a9 100644
--- a/desktop/source/deployment/inc/dp_version.hxx
+++ b/desktop/source/deployment/inc/dp_version.hxx
@@ -43,13 +43,6 @@ enum Order { LESS, EQUAL, GREATER };
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC Order compareVersions(
::rtl::OUString const & version1, ::rtl::OUString const & version2);
-
-DESKTOP_DEPLOYMENTMISC_DLLPUBLIC Order comparePackageVersions(
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage >
- const & package1,
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage >
- const & package2);
-
}
#endif
diff --git a/desktop/source/deployment/makefile.mk b/desktop/source/deployment/makefile.mk
index 173ff35bec1d..6d83a5c1004b 100644
--- a/desktop/source/deployment/makefile.mk
+++ b/desktop/source/deployment/makefile.mk
@@ -53,7 +53,6 @@ SHL1VERSIONMAP = $(SOLARENV)/src/component.map
SHL1LIBS = \
$(SLB)$/deployment_manager.lib \
- $(SLB)$/deployment_migration.lib \
$(SLB)$/deployment_registry.lib \
$(SLB)$/deployment_registry_executable.lib \
$(SLB)$/deployment_registry_component.lib \
diff --git a/desktop/source/deployment/manager/dp_activepackages.cxx b/desktop/source/deployment/manager/dp_activepackages.cxx
index 04dc22b77a77..8f6b6b82c0b7 100644
--- a/desktop/source/deployment/manager/dp_activepackages.cxx
+++ b/desktop/source/deployment/manager/dp_activepackages.cxx
@@ -96,9 +96,27 @@ static char const legacyPrefix[] = "org.openoffice.legacy.";
OSL_ASSERT(i2 >= 0);
d.fileName = ::rtl::OUString(
value.getStr() + i1 + 1, i2 - i1 - 1, RTL_TEXTENCODING_UTF8);
- d.mediaType = ::rtl::OUString(
- value.getStr() + i2 + 1, value.getLength() - i2 - 1,
- RTL_TEXTENCODING_UTF8);
+ sal_Int32 i3 = value.indexOf(separator, i2 + 1);
+
+ if (i3 < 0)
+ {
+ //Before ActivePackages::Data::version was added
+ d.mediaType = ::rtl::OUString(
+ value.getStr() + i2 + 1, value.getLength() - i2 - 1,
+ RTL_TEXTENCODING_UTF8);
+ }
+ else
+ {
+ sal_Int32 i4 = value.indexOf(separator, i3 + 1);
+ d.mediaType = ::rtl::OUString(
+ value.getStr() + i2 + 1, i3 - i2 -1, RTL_TEXTENCODING_UTF8);
+ d.version = ::rtl::OUString(
+ value.getStr() + i3 + 1, i4 - i3 - 1,
+ RTL_TEXTENCODING_UTF8);
+ d.failedPrerequisites = ::rtl::OUString(
+ value.getStr() + i4 + 1, value.getLength() - i4 - 1,
+ RTL_TEXTENCODING_UTF8);
+ }
return d;
}
@@ -172,6 +190,10 @@ void ActivePackages::put(::rtl::OUString const & id, Data const & data) {
b.append(::rtl::OUStringToOString(data.fileName, RTL_TEXTENCODING_UTF8));
b.append(separator);
b.append(::rtl::OUStringToOString(data.mediaType, RTL_TEXTENCODING_UTF8));
+ b.append(separator);
+ b.append(::rtl::OUStringToOString(data.version, RTL_TEXTENCODING_UTF8));
+ b.append(separator);
+ b.append(::rtl::OUStringToOString(data.failedPrerequisites, RTL_TEXTENCODING_UTF8));
m_map.put(newKey(id), b.makeStringAndClear());
}
diff --git a/desktop/source/deployment/manager/dp_activepackages.hxx b/desktop/source/deployment/manager/dp_activepackages.hxx
index 1c58f76be245..7d9c7e32cfb4 100644
--- a/desktop/source/deployment/manager/dp_activepackages.hxx
+++ b/desktop/source/deployment/manager/dp_activepackages.hxx
@@ -42,9 +42,28 @@ namespace dp_manager {
class ActivePackages {
public:
struct Data {
+ Data(): failedPrerequisites(::rtl::OUString::valueOf((sal_Int32)0))
+ {}
+ /* name of the temporary file (shared, user extension) or the name of
+ the folder of the bundled extension.
+ It does not contain the trailing '_' of the folder.
+ UTF-8 encoded
+ */
::rtl::OUString temporaryName;
+ /* The file name (shared, user) or the folder name (bundled)
+ If the key is the file name, then file name is not encoded.
+ If the key is the idendifier then the file name is UTF-8 encoded.
+ */
::rtl::OUString fileName;
::rtl::OUString mediaType;
+ ::rtl::OUString version;
+ /* If this string contains the value according to
+ com::sun::star::deployment::Prerequisites or "0". That is, if
+ the value is > 0 then
+ the call to XPackage::checkPrerequisites failed.
+ In this case the extension must not be registered.
+ */
+ ::rtl::OUString failedPrerequisites;
};
typedef ::std::vector< ::std::pair< ::rtl::OUString, Data > > Entries;
diff --git a/desktop/source/deployment/manager/dp_commandenvironments.cxx b/desktop/source/deployment/manager/dp_commandenvironments.cxx
new file mode 100644
index 000000000000..c2801ba1d965
--- /dev/null
+++ b/desktop/source/deployment/manager/dp_commandenvironments.cxx
@@ -0,0 +1,286 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "com/sun/star/deployment/VersionException.hpp"
+#include "com/sun/star/deployment/LicenseException.hpp"
+#include "com/sun/star/deployment/InstallException.hpp"
+#include "com/sun/star/task/XInteractionApprove.hpp"
+#include "com/sun/star/task/XInteractionAbort.hpp"
+#include "com/sun/star/task/XInteractionHandler.hpp"
+#include "com/sun/star/ucb/XCommandEnvironment.hpp"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "dp_commandenvironments.hxx"
+
+namespace deployment = com::sun::star::deployment;
+namespace lang = com::sun::star::lang;
+namespace task = com::sun::star::task;
+namespace ucb = com::sun::star::ucb;
+namespace uno = com::sun::star::uno;
+namespace css = com::sun::star;
+
+#define OUSTR(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
+
+using ::com::sun::star::uno::Reference;
+using ::rtl::OUString;
+
+namespace dp_manager {
+
+BaseCommandEnv::BaseCommandEnv()
+{
+}
+
+BaseCommandEnv::BaseCommandEnv(
+ Reference< task::XInteractionHandler> const & handler)
+ : m_forwardHandler(handler)
+{
+}
+
+BaseCommandEnv::~BaseCommandEnv()
+{
+}
+// XCommandEnvironment
+//______________________________________________________________________________
+Reference<task::XInteractionHandler> BaseCommandEnv::getInteractionHandler()
+throw (uno::RuntimeException)
+{
+ return this;
+}
+
+//______________________________________________________________________________
+Reference<ucb::XProgressHandler> BaseCommandEnv::getProgressHandler()
+throw (uno::RuntimeException)
+{
+ return this;
+}
+
+void BaseCommandEnv::handle(
+ Reference< task::XInteractionRequest> const & /*xRequest*/ )
+ throw (uno::RuntimeException)
+{
+}
+
+void BaseCommandEnv::handle_(bool approve, bool abort,
+ Reference< task::XInteractionRequest> const & xRequest )
+{
+ if (approve == false && abort == false)
+ {
+ //not handled so far -> forwarding
+ if (m_forwardHandler.is())
+ m_forwardHandler->handle(xRequest);
+ else
+ return; //cannot handle
+ }
+ else
+ {
+ // select:
+ uno::Sequence< Reference< task::XInteractionContinuation > > conts(
+ xRequest->getContinuations() );
+ Reference< task::XInteractionContinuation > const * pConts =
+ conts.getConstArray();
+ sal_Int32 len = conts.getLength();
+ for ( sal_Int32 pos = 0; pos < len; ++pos )
+ {
+ if (approve) {
+ Reference< task::XInteractionApprove > xInteractionApprove(
+ pConts[ pos ], uno::UNO_QUERY );
+ if (xInteractionApprove.is()) {
+ xInteractionApprove->select();
+ // don't query again for ongoing continuations:
+ approve = false;
+ }
+ }
+ else if (abort) {
+ Reference< task::XInteractionAbort > xInteractionAbort(
+ pConts[ pos ], uno::UNO_QUERY );
+ if (xInteractionAbort.is()) {
+ xInteractionAbort->select();
+ // don't query again for ongoing continuations:
+ abort = false;
+ }
+ }
+ }
+ }
+
+}
+
+// XProgressHandler
+void BaseCommandEnv::push( uno::Any const & /*Status*/ )
+throw (uno::RuntimeException)
+{
+}
+
+
+void BaseCommandEnv::update( uno::Any const & /*Status */)
+throw (uno::RuntimeException)
+{
+}
+
+void BaseCommandEnv::pop() throw (uno::RuntimeException)
+{
+}
+//==============================================================================
+
+TmpRepositoryCommandEnv::TmpRepositoryCommandEnv()
+{
+}
+
+TmpRepositoryCommandEnv::TmpRepositoryCommandEnv(
+ css::uno::Reference< css::task::XInteractionHandler> const & handler):
+ BaseCommandEnv(handler)
+{
+}
+// XInteractionHandler
+void TmpRepositoryCommandEnv::handle(
+ Reference< task::XInteractionRequest> const & xRequest )
+ throw (uno::RuntimeException)
+{
+ uno::Any request( xRequest->getRequest() );
+ OSL_ASSERT( request.getValueTypeClass() == uno::TypeClass_EXCEPTION );
+
+ deployment::VersionException verExc;
+ deployment::LicenseException licExc;
+ deployment::InstallException instExc;
+
+ bool approve = false;
+ bool abort = false;
+
+ if ((request >>= verExc)
+ || (request >>= licExc)
+ || (request >>= instExc))
+ {
+ approve = true;
+ }
+
+ handle_(approve, abort, xRequest);
+}
+//================================================================================
+
+LicenseCommandEnv::LicenseCommandEnv(
+ css::uno::Reference< css::task::XInteractionHandler> const & handler,
+ bool bSuppressLicense,
+ OUString const & repository):
+ BaseCommandEnv(handler), m_repository(repository),
+ m_bSuppressLicense(bSuppressLicense)
+{
+}
+// XInteractionHandler
+void LicenseCommandEnv::handle(
+ Reference< task::XInteractionRequest> const & xRequest )
+ throw (uno::RuntimeException)
+{
+ uno::Any request( xRequest->getRequest() );
+ OSL_ASSERT( request.getValueTypeClass() == uno::TypeClass_EXCEPTION );
+
+
+ deployment::LicenseException licExc;
+
+ bool approve = false;
+ bool abort = false;
+
+ if (request >>= licExc)
+ {
+ if (m_bSuppressLicense
+ || m_repository.equals(OUSTR("bundled"))
+ || licExc.AcceptBy.equals(OUSTR("admin")))
+ {
+ //always approve in bundled case, because we do not support
+ //showing licenses anyway.
+ //The "admin" already accepted the license when installing the
+ // shared extension
+ approve = true;
+ }
+ }
+
+ handle_(approve, abort, xRequest);
+}
+
+//================================================================================
+//================================================================================
+
+NoLicenseCommandEnv::NoLicenseCommandEnv(
+ css::uno::Reference< css::task::XInteractionHandler> const & handler):
+ BaseCommandEnv(handler)
+{
+}
+// XInteractionHandler
+void NoLicenseCommandEnv::handle(
+ Reference< task::XInteractionRequest> const & xRequest )
+ throw (uno::RuntimeException)
+{
+ uno::Any request( xRequest->getRequest() );
+ OSL_ASSERT( request.getValueTypeClass() == uno::TypeClass_EXCEPTION );
+
+
+ deployment::LicenseException licExc;
+
+ bool approve = false;
+ bool abort = false;
+
+ if (request >>= licExc)
+ {
+ approve = true;
+ }
+ handle_(approve, abort, xRequest);
+}
+
+
+// NoExceptionCommandEnv::NoExceptionCommandEnv(
+// css::uno::Reference< css::task::XInteractionHandler> const & handler,
+// css::uno::Type const & type):
+// BaseCommandEnv(handler),
+// m_type(type)
+// {
+// }
+// // XInteractionHandler
+// void NoExceptionCommandEnv::handle(
+// Reference< task::XInteractionRequest> const & xRequest )
+// throw (uno::RuntimeException)
+// {
+// uno::Any request( xRequest->getRequest() );
+// OSL_ASSERT( request.getValueTypeClass() == uno::TypeClass_EXCEPTION );
+
+
+// deployment::LicenseException licExc;
+
+// bool approve = false;
+// bool abort = false;
+
+// if (request.getValueType() == m_type)
+// {
+// approve = true;
+// }
+// handle_(approve, abort, xRequest);
+// }
+
+
+
+} // namespace dp_manager
+
+
diff --git a/desktop/source/deployment/manager/dp_commandenvironments.hxx b/desktop/source/deployment/manager/dp_commandenvironments.hxx
new file mode 100644
index 000000000000..aa21f8281c72
--- /dev/null
+++ b/desktop/source/deployment/manager/dp_commandenvironments.hxx
@@ -0,0 +1,160 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_COMMANDENVIRONMENTS_HXX
+#define INCLUDED_DP_COMMANDENVIRONMENTS_HXX
+
+
+#include "cppuhelper/compbase3.hxx"
+//#include "cppuhelper/implbase2.hxx"
+#include "ucbhelper/content.hxx"
+#include "com/sun/star/uno/Type.hxx"
+
+
+namespace css = ::com::sun::star;
+
+namespace dp_manager {
+
+
+
+/**
+ This command environment is to be used when an extension is temporarily
+ stored in the "tmp" repository. It prevents all kind of user interaction.
+ */
+class BaseCommandEnv
+ : public ::cppu::WeakImplHelper3< css::ucb::XCommandEnvironment,
+ css::task::XInteractionHandler,
+ css::ucb::XProgressHandler >
+{
+protected:
+ css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ css::uno::Reference< css::task::XInteractionHandler> m_forwardHandler;
+
+ void handle_(bool approve, bool abort,
+ css::uno::Reference< css::task::XInteractionRequest> const & xRequest );
+public:
+ virtual ~BaseCommandEnv();
+ BaseCommandEnv();
+ BaseCommandEnv(
+ css::uno::Reference< css::task::XInteractionHandler> const & handler);
+
+ // XCommandEnvironment
+ virtual css::uno::Reference<css::task::XInteractionHandler > SAL_CALL
+ getInteractionHandler() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference<css::ucb::XProgressHandler >
+ SAL_CALL getProgressHandler() throw (css::uno::RuntimeException);
+
+ // XInteractionHandler
+ virtual void SAL_CALL handle(
+ css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
+ throw (css::uno::RuntimeException);
+
+ // XProgressHandler
+ virtual void SAL_CALL push( css::uno::Any const & Status )
+ throw (css::uno::RuntimeException);
+ virtual void SAL_CALL update( css::uno::Any const & Status )
+ throw (css::uno::RuntimeException);
+ virtual void SAL_CALL pop() throw (css::uno::RuntimeException);
+};
+
+class TmpRepositoryCommandEnv : public BaseCommandEnv
+{
+public:
+ TmpRepositoryCommandEnv();
+ TmpRepositoryCommandEnv(css::uno::Reference< css::task::XInteractionHandler> const & handler);
+
+// XInteractionHandler
+ virtual void SAL_CALL handle(
+ css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
+ throw (css::uno::RuntimeException);
+
+};
+
+/** this class is for use in XPackageManager::synchronize.
+
+ It handles particular license cases.
+ */
+class LicenseCommandEnv : public BaseCommandEnv
+{
+private:
+ ::rtl::OUString m_repository;
+ bool m_bSuppressLicense;
+public:
+ LicenseCommandEnv(){};
+ LicenseCommandEnv(
+ css::uno::Reference< css::task::XInteractionHandler> const & handler,
+ bool bSuppressLicense,
+ ::rtl::OUString const & repository);
+
+// XInteractionHandler
+ virtual void SAL_CALL handle(
+ css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
+ throw (css::uno::RuntimeException);
+
+};
+
+/** this class is for use in XPackageManager::checkPrerequisites
+
+ It always prohibits a license interaction
+ */
+class NoLicenseCommandEnv : public BaseCommandEnv
+{
+
+public:
+ NoLicenseCommandEnv(){};
+ NoLicenseCommandEnv(css::uno::Reference< css::task::XInteractionHandler> const & handler);
+
+// XInteractionHandler
+ virtual void SAL_CALL handle(
+ css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
+ throw (css::uno::RuntimeException);
+
+};
+
+// class NoExceptionCommandEnv : public BaseCommandEnv
+// {
+// css::uno::Type m_type;
+// public:
+// NoExceptionCommandEnv::NoExceptionCommandEnv(){};
+// NoExceptionCommandEnv::NoExceptionCommandEnv(
+// css::uno::Reference< css::task::XInteractionHandler> const & handler,
+// css::uno::Type const & type);
+
+// // XInteractionHandler
+// virtual void SAL_CALL handle(
+// css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
+// throw (css::uno::RuntimeException);
+
+// };
+
+}
+
+
+
+
+#endif
+
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx
new file mode 100644
index 000000000000..de9d97db2b48
--- /dev/null
+++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx
@@ -0,0 +1,1361 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include <cppuhelper/implbase1.hxx>
+
+#include "comphelper/servicedecl.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "rtl/bootstrap.hxx"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
+#include "com/sun/star/deployment/XExtensionManager.hpp"
+#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
+#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/XPackageManagerFactory.hpp"
+#include "com/sun/star/deployment/XPackage.hpp"
+#include "com/sun/star/deployment/InstallException.hpp"
+#include "com/sun/star/deployment/VersionException.hpp"
+#include "com/sun/star/deployment/LicenseException.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/registry/XRegistryKey.hpp"
+#include "com/sun/star/beans/Optional.hpp"
+#include "com/sun/star/task/XInteractionApprove.hpp"
+#include "com/sun/star/beans/Ambiguous.hpp"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/io/XInputStream.hpp"
+#include "com/sun/star/util/XModifyBroadcaster.hpp"
+#include "comphelper/sequence.hxx"
+#include "xmlscript/xml_helper.hxx"
+#include "osl/diagnose.h"
+#include "dp_interact.h"
+#include "dp_resource.h"
+#include "dp_ucb.h"
+#include "dp_identifier.hxx"
+#include "dp_descriptioninfoset.hxx"
+#include "dp_extensionmanager.hxx"
+#include "dp_commandenvironments.hxx"
+#include "dp_properties.hxx"
+#include "boost/bind.hpp"
+
+#include <list>
+#include <hash_map>
+#include <algorithm>
+
+namespace deploy = com::sun::star::deployment;
+namespace lang = com::sun::star::lang;
+namespace registry = com::sun::star::registry;
+namespace task = com::sun::star::task;
+namespace ucb = com::sun::star::ucb;
+namespace uno = com::sun::star::uno;
+namespace beans = com::sun::star::beans;
+namespace util = com::sun::star::util;
+namespace css = com::sun::star;
+
+
+//#define OUSTR(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
+
+using ::com::sun::star::uno::Reference;
+using ::rtl::OUString;
+
+namespace {
+
+struct CompIdentifiers
+{
+ bool operator() (::std::vector<Reference<deploy::XPackage> > const & a,
+ ::std::vector<Reference<deploy::XPackage> > const & b)
+ {
+
+ if (getName(a).compareTo(getName(b)) < 0)
+ return true;
+ return false;
+ }
+
+ OUString getName(::std::vector<Reference<deploy::XPackage> > const & a);
+};
+
+OUString CompIdentifiers::getName(::std::vector<Reference<deploy::XPackage> > const & a)
+{
+ OSL_ASSERT(a.size() == 3);
+ //get the first non-null reference
+ Reference<deploy::XPackage> extension;
+ ::std::vector<Reference<deploy::XPackage> >::const_iterator it = a.begin();
+ for (; it != a.end(); it++)
+ {
+ if (it->is())
+ {
+ extension = *it;
+ break;
+ }
+ }
+ OSL_ASSERT(extension.is());
+ return extension->getDisplayName();
+}
+
+void writeLastModified(OUString & url, Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+{
+ //Write the lastmodified file
+ try {
+ ::rtl::Bootstrap::expandMacros(url);
+ ::ucbhelper::Content ucbStamp(url, xCmdEnv );
+ dp_misc::erase_path( url, xCmdEnv );
+ ::rtl::OString stamp("1" );
+ Reference<css::io::XInputStream> xData(
+ ::xmlscript::createInputStream(
+ ::rtl::ByteSequence(
+ reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
+ stamp.getLength() ) ) );
+ ucbStamp.writeStream( xData, true /* replace existing */ );
+ }
+ catch(...)
+ {
+ uno::Any exc(::cppu::getCaughtException());
+ throw deploy::DeploymentException(
+ OUSTR("Failed to update") + url, 0, exc);
+ }
+}
+} //end namespace
+
+namespace dp_manager {
+
+
+
+//------------------------------------------------------------------------------
+
+//ToDo: bundled extension
+ExtensionManager::ExtensionManager( Reference< uno::XComponentContext > const& xContext) :
+ ::cppu::WeakComponentImplHelper1< css::deployment::XExtensionManager >(getMutex()),
+ m_xContext( xContext )
+{
+ Reference<deploy::XPackageManagerFactory> xPackageManagerFactory(
+ deploy::thePackageManagerFactory::get(m_xContext));
+ m_userRepository = xPackageManagerFactory->getPackageManager(OUSTR("user"));
+ m_sharedRepository = xPackageManagerFactory->getPackageManager(OUSTR("shared"));
+ m_bundledRepository = xPackageManagerFactory->getPackageManager(OUSTR("bundled"));
+ m_tmpRepository = xPackageManagerFactory->getPackageManager(OUSTR("tmp"));
+
+ m_repositoryNames.push_back(OUSTR("user"));
+ m_repositoryNames.push_back(OUSTR("shared"));
+ m_repositoryNames.push_back(OUSTR("bundled"));
+}
+
+//------------------------------------------------------------------------------
+
+ExtensionManager::~ExtensionManager()
+{
+}
+
+Reference<task::XAbortChannel> ExtensionManager::createAbortChannel()
+ throw (uno::RuntimeException)
+{
+ return new dp_misc::AbortChannel;
+}
+
+css::uno::Reference<css::deployment::XPackageManager>
+ExtensionManager::getPackageManager(::rtl::OUString const & repository)
+ throw (css::lang::IllegalArgumentException)
+{
+ Reference<deploy::XPackageManager> xPackageManager;
+ if (repository.equals(OUSTR("user")))
+ xPackageManager = m_userRepository;
+ else if (repository.equals(OUSTR("shared")))
+ xPackageManager = m_sharedRepository;
+ else if (repository.equals(OUSTR("bundled")))
+ xPackageManager = m_bundledRepository;
+ else
+ throw lang::IllegalArgumentException(
+ OUSTR("No valid repository name provided."),
+ static_cast<cppu::OWeakObject*>(this), 0);
+ return xPackageManager;
+}
+
+
+/*
+ Enters the XPackage objects into a map. They must be all from the
+ same repository. The value type of the map is a vector, where each vector
+ represents an extension with a particular identifier. The first member
+ is represents the user extension, the second the shared extension and the
+ third the bundled extension.
+ */
+void ExtensionManager::addExtensionsToMap(
+ id2extensions & mapExt,
+ uno::Sequence<Reference<deploy::XPackage> > const & seqExt,
+ OUString const & repository)
+{
+ //Determine the index in the vector where these extensions are to be
+ //added.
+ ::std::list<OUString>::const_iterator citNames =
+ m_repositoryNames.begin();
+ int index = 0;
+ for (;citNames != m_repositoryNames.end(); citNames++, index++)
+ {
+ if (citNames->equals(repository))
+ break;
+ }
+
+ for (int i = 0; i < seqExt.getLength(); i++)
+ {
+ Reference<deploy::XPackage> const & xExtension = seqExt[i];
+ OUString id = dp_misc::getIdentifier(xExtension);
+ id2extensions::iterator ivec = mapExt.find(id);
+ if (ivec == mapExt.end())
+ {
+ ::std::vector<Reference<deploy::XPackage> > vec(3);
+ vec[index] = xExtension;
+ mapExt[id] = vec;
+ }
+ else
+ {
+ ivec->second[index] = xExtension;
+ }
+ }
+}
+
+/*
+ returns a list containing extensions with the same identifier from
+ all repositories (user, shared, bundled) If one repository does not
+ have this extension, then the list contains an empty Referenc. The list
+ is ordered according to the priority of the repostories:
+ 1. user
+ 2. shared
+ 3. bundled
+
+ The number of elements is always three, unless the number of repository
+ changes.
+ */
+::std::list<Reference<deploy::XPackage> >
+ ExtensionManager::getExtensionsWithSameId(
+ OUString const & identifier, OUString const & fileName,
+ Reference< ucb::XCommandEnvironment> const & /*xCmdEnv*/)
+
+{
+ ::std::list<Reference<deploy::XPackage> > extensionList;
+ try
+ { //will throw an exception if the extension does not exist
+ extensionList.push_back(m_userRepository->getDeployedPackage(
+ identifier, fileName, Reference<ucb::XCommandEnvironment>()));
+ } catch(lang::IllegalArgumentException &)
+ {
+ extensionList.push_back(Reference<deploy::XPackage>());
+ }
+ try
+ {
+ extensionList.push_back(m_sharedRepository->getDeployedPackage(
+ identifier, fileName, Reference<ucb::XCommandEnvironment>()));
+ } catch (lang::IllegalArgumentException &)
+ {
+ extensionList.push_back(Reference<deploy::XPackage>());
+ }
+ try
+ {
+ extensionList.push_back(m_bundledRepository->getDeployedPackage(
+ identifier, fileName, Reference<ucb::XCommandEnvironment>()));
+ } catch (lang::IllegalArgumentException &)
+ {
+ extensionList.push_back(Reference<deploy::XPackage>());
+ }
+ OSL_ASSERT(extensionList.size() == 3);
+ return extensionList;
+}
+
+uno::Sequence<Reference<deploy::XPackage> >
+ExtensionManager::getExtensionsWithSameIdentifier(
+ OUString const & identifier,
+ OUString const & fileName,
+ Reference< ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (
+ deploy::DeploymentException,
+ ucb::CommandFailedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ try
+ {
+ ::std::list<Reference<deploy::XPackage> > listExtensions =
+ getExtensionsWithSameId(
+ identifier, fileName, xCmdEnv);
+ sal_Bool bHasExtension = false;
+
+ //throw an IllegalArgumentException if there is no extension at all.
+ typedef ::std::list<Reference<deploy::XPackage> >::const_iterator CIT;
+ for (CIT i = listExtensions.begin(); i != listExtensions.end(); i++)
+ bHasExtension |= i->is();
+ if (!bHasExtension)
+ throw lang::IllegalArgumentException(
+ OUSTR("Could not find extension: ") + identifier + OUSTR(", ") + fileName,
+ static_cast<cppu::OWeakObject*>(this), -1);
+
+ return comphelper::containerToSequence<
+ Reference<deploy::XPackage>,
+ ::std::list<Reference<deploy::XPackage> >
+ > (listExtensions);
+ }
+ catch (deploy::DeploymentException & )
+ {
+ throw;
+ }
+ catch ( ucb::CommandFailedException & )
+ {
+ throw;
+ }
+ catch (lang::IllegalArgumentException &)
+ {
+ throw;
+ }
+ catch (...)
+ {
+ uno::Any exc = ::cppu::getCaughtException();
+ throw deploy::DeploymentException(
+ OUSTR("Extension Manager: exception during getExtensionsWithSameIdentifier"),
+ static_cast<OWeakObject*>(this), exc);
+ }
+}
+
+
+
+bool ExtensionManager::isUserDisabled(
+ OUString const & identifier, OUString const & fileName)
+{
+ ::std::list<Reference<deploy::XPackage> > listExtensions;
+
+ try {
+ listExtensions = getExtensionsWithSameId(identifier, fileName);
+ } catch (lang::IllegalArgumentException & ) {
+ }
+ OSL_ASSERT(listExtensions.size() == 3);
+
+ return isUserDisabled( ::comphelper::containerToSequence<
+ Reference<deploy::XPackage>,
+ ::std::list<Reference<deploy::XPackage> >
+ > (listExtensions));
+}
+
+bool ExtensionManager::isUserDisabled(
+ uno::Sequence<Reference<deploy::XPackage> > const & seqExtSameId)
+{
+ OSL_ASSERT(seqExtSameId.getLength() == 3);
+ Reference<deploy::XPackage> const & userExtension = seqExtSameId[0];
+ if (userExtension.is())
+ {
+ beans::Optional<beans::Ambiguous<sal_Bool> > reg =
+ userExtension->isRegistered(Reference<task::XAbortChannel>(),
+ Reference<ucb::XCommandEnvironment>());
+ //If the value is ambiguous is than we assume that the extension
+ //is enabled, but something went wrong during enabling. We do not
+ //automatically disable user extensions.
+ if (reg.IsPresent &&
+ ! reg.Value.IsAmbiguous && ! reg.Value.Value)
+ return true;
+ }
+ return false;
+}
+
+/*
+ This method determines the active extension (XPackage.registerPackage) with a
+ particular identifier.
+
+ The parameter bUserDisabled determines if the user extension is disabled.
+
+ When the user repository contains an extension with the given identifier and
+ it is not disabled by the user, then it is always registered. Otherwise an
+ extension is only registered when there is no registered extension in one of
+ the repositories with a higher priority. That is, if the extension is from
+ the shared repository and an active extension with the same identifer is in
+ the user repository, then the extension is not registered. Similarly a
+ bundled extension is not registered if there is an active extension with the
+ same identifier in the shared or user repository.
+*/
+void ExtensionManager::activateExtension(
+ OUString const & identifier, OUString const & fileName,
+ bool bUserDisabled,
+ bool bStartup,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+{
+ ::std::list<Reference<deploy::XPackage> > listExtensions;
+ try {
+ listExtensions = getExtensionsWithSameId(identifier, fileName);
+ } catch (lang::IllegalArgumentException &) {
+ }
+ OSL_ASSERT(listExtensions.size() == 3);
+
+ activateExtension(
+ ::comphelper::containerToSequence<
+ Reference<deploy::XPackage>,
+ ::std::list<Reference<deploy::XPackage> >
+ > (listExtensions),
+ bUserDisabled, bStartup, xAbortChannel, xCmdEnv);
+
+ fireModified();
+}
+
+void ExtensionManager::activateExtension(
+ uno::Sequence<Reference<deploy::XPackage> > const & seqExt,
+ bool bUserDisabled,
+ bool bStartup,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+{
+ bool bActive = false;
+ sal_Int32 len = seqExt.getLength();
+ for (sal_Int32 i = 0; i < len; i++)
+ {
+ Reference<deploy::XPackage> const & aExt = seqExt[i];
+ if (aExt.is())
+ {
+ //get the registration value of the current iteration
+ beans::Optional<beans::Ambiguous<sal_Bool> > optReg =
+ aExt->isRegistered(xAbortChannel, xCmdEnv);
+ //If nothing can be registered then break
+ if (!optReg.IsPresent)
+ break;
+
+ //Check if this is a disabled user extension,
+ if (i == 0 && bUserDisabled)
+ {
+ aExt->revokePackage(xAbortChannel, xCmdEnv);
+ continue;
+ }
+
+ //If we have already determined an active extension then we must
+ //make sure to unregister all extensions with the same id in
+ //repositories with a lower priority
+ if (bActive)
+ {
+ aExt->revokePackage(xAbortChannel, xCmdEnv);
+ }
+ else
+ {
+ //This is the first extension in the ordered list, which becomes
+ //the active extension
+ bActive = true;
+ //Register if not already done.
+ //reregister if the value is ambiguous, which indicates that
+ //something went wrong during last registration.
+ aExt->registerPackage(bStartup, xAbortChannel, xCmdEnv);
+ }
+ }
+ }
+}
+
+Reference<deploy::XPackage> ExtensionManager::backupExtension(
+ OUString const & identifier, OUString const & fileName,
+ Reference<deploy::XPackageManager> const & xPackageManager,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+{
+ Reference<deploy::XPackage> xBackup;
+ Reference<ucb::XCommandEnvironment> tmpCmdEnv(
+ new TmpRepositoryCommandEnv(xCmdEnv->getInteractionHandler()));
+ Reference<deploy::XPackage> xOldExtension;
+ xOldExtension = xPackageManager->getDeployedPackage(
+ identifier, fileName, tmpCmdEnv);
+
+ if (xOldExtension.is())
+ {
+ xBackup = m_tmpRepository->addPackage(
+ xOldExtension->getURL(), uno::Sequence<beans::NamedValue>(),
+ OUString(), Reference<task::XAbortChannel>(), tmpCmdEnv);
+
+ OSL_ENSURE(xBackup.is(), "Failed to backup extension");
+ }
+ return xBackup;
+}
+
+//The supported package types are actually determined by the registry. However
+//creating a registry
+//(desktop/source/deployment/registry/dp_registry.cxx:PackageRegistryImpl) will
+//create all the backends, so that the registry can obtain from them the package
+//types. Creating the registry will also set up the registry folder containing
+//all the subfolders for the respective backends.
+//Because all repositories support the same backends, we can just delegate this
+//call to one of the repositories.
+uno::Sequence< Reference<deploy::XPackageTypeInfo> >
+ExtensionManager::getSupportedPackageTypes()
+ throw (uno::RuntimeException)
+{
+ return m_userRepository->getSupportedPackageTypes();
+}
+
+// Only add to shared and user repository
+Reference<deploy::XPackage> ExtensionManager::addExtension(
+ OUString const & url, uno::Sequence<beans::NamedValue> const & properties,
+ OUString const & repository,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ Reference<deploy::XPackage> xNewExtension;
+ //Determine the repository to use
+ Reference<deploy::XPackageManager> xPackageManager;
+ if (repository.equals(OUSTR("user")))
+ xPackageManager = m_userRepository;
+ else if (repository.equals(OUSTR("shared")))
+ xPackageManager = m_sharedRepository;
+ else
+ throw lang::IllegalArgumentException(
+ OUSTR("No valid repository name provided."),
+ static_cast<cppu::OWeakObject*>(this), 0);
+ ::osl::MutexGuard guard(getMutex());
+ Reference<deploy::XPackage> xTmpExtension =
+ getTempExtension(url, xAbortChannel, xCmdEnv);
+ const OUString sIdentifier = dp_misc::getIdentifier(xTmpExtension);
+ const OUString sFileName = xTmpExtension->getName();
+ const OUString sDisplayName = xTmpExtension->getDisplayName();
+ const OUString sVersion = xTmpExtension->getVersion();
+ dp_misc::DescriptionInfoset info(dp_misc::getDescriptionInfoset(xTmpExtension->getURL()));
+ const ::boost::optional<dp_misc::SimpleLicenseAttributes> licenseAttributes =
+ info.getSimpleLicenseAttributes();
+ Reference<deploy::XPackage> xOldExtension;
+ Reference<deploy::XPackage> xExtensionBackup;
+
+ uno::Any excOccurred1;
+ uno::Any excOccurred2;
+ bool bUserDisabled = false;
+ try
+ {
+ bUserDisabled = isUserDisabled(sIdentifier, sFileName);
+ try
+ {
+ xOldExtension = xPackageManager->getDeployedPackage(
+ sIdentifier, sFileName, xCmdEnv);
+ }
+ catch (lang::IllegalArgumentException &)
+ {
+ }
+ bool bCanInstall = false;
+ try
+ {
+ if (xOldExtension.is())
+ {
+ //throws a CommandFailedException if the user cancels
+ //the action.
+ checkUpdate(sVersion, sDisplayName,xOldExtension, xCmdEnv);
+ }
+ else
+ {
+ //throws a CommandFailedException if the user cancels
+ //the action.
+ checkInstall(sDisplayName, xCmdEnv);
+ }
+ //Prevent showing the license if requested.
+ Reference<ucb::XCommandEnvironment> _xCmdEnv(xCmdEnv);
+ ExtensionProperties props(OUString(), properties, Reference<ucb::XCommandEnvironment>());
+ if (licenseAttributes && licenseAttributes->suppressIfRequired
+ && props.isSuppressedLicense())
+ _xCmdEnv = Reference<ucb::XCommandEnvironment>(
+ new NoLicenseCommandEnv(xCmdEnv->getInteractionHandler()));
+
+ bCanInstall = xTmpExtension->checkPrerequisites(
+ xAbortChannel, _xCmdEnv, xOldExtension.is() || props.isExtensionUpdate()) == 0 ? true : false;
+ }
+ catch (deploy::DeploymentException& ) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (ucb::CommandFailedException & ) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (ucb::CommandAbortedException & ) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (lang::IllegalArgumentException &) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (uno::RuntimeException &) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (...) {
+ excOccurred1 = ::cppu::getCaughtException();
+ deploy::DeploymentException exc(
+ OUSTR("Extension Manager: exception during addExtension, url: ")
+ + url, static_cast<OWeakObject*>(this), excOccurred1);
+ excOccurred1 <<= exc;
+ }
+
+ if (bCanInstall)
+ {
+ if (xOldExtension.is())
+ {
+ xOldExtension->revokePackage(xAbortChannel, xCmdEnv);
+ //save the old user extension in case the user aborts
+ //store the extension in the tmp repository, this will overwrite
+ //xTmpPackage (same identifier). Do not let the user abort or
+ //interact
+ Reference<ucb::XCommandEnvironment> tmpCmdEnv(
+ new TmpRepositoryCommandEnv(xCmdEnv->getInteractionHandler()));
+ //importing the old extension in the tmp repository will remove
+ //the xTmpExtension
+ xTmpExtension = 0;
+ xExtensionBackup = m_tmpRepository->importExtension(
+ xOldExtension, Reference<task::XAbortChannel>(),
+ tmpCmdEnv);
+ }
+ xNewExtension = xPackageManager->addPackage(
+ url, properties, OUString(), xAbortChannel, xCmdEnv);
+ //If we add a user extension and there is already one which was
+ //disabled by a user, then the newly installed one is enabled. If we
+ //add to another repository then the user extension remains
+ //disabled.
+ bool bUserDisabled2 = bUserDisabled;
+ if (repository.equals(OUSTR("user")))
+ bUserDisabled2 = false;
+ activateExtension(
+ dp_misc::getIdentifier(xNewExtension),
+ xNewExtension->getName(), bUserDisabled2, false, xAbortChannel, xCmdEnv);
+ fireModified();
+ }
+ }
+ catch (deploy::DeploymentException& ) {
+ excOccurred2 = ::cppu::getCaughtException();
+ } catch (ucb::CommandFailedException & ) {
+ excOccurred2 = ::cppu::getCaughtException();
+ } catch (ucb::CommandAbortedException & ) {
+ excOccurred2 = ::cppu::getCaughtException();
+ } catch (lang::IllegalArgumentException &) {
+ excOccurred2 = ::cppu::getCaughtException();
+ } catch (uno::RuntimeException &) {
+ excOccurred2 = ::cppu::getCaughtException();
+ } catch (...) {
+ excOccurred2 = ::cppu::getCaughtException();
+ deploy::DeploymentException exc(
+ OUSTR("Extension Manager: exception during addExtension, url: ")
+ + url, static_cast<OWeakObject*>(this), excOccurred2);
+ excOccurred2 <<= exc;
+ }
+
+ if (excOccurred2.hasValue())
+ {
+ //It does not matter what exception is thrown. We try to
+ //recover the original status.
+ //If the user aborted installation then a ucb::CommandAbortedException
+ //is thrown.
+ //Use a private AbortChannel so the user cannot interrupt.
+ try
+ {
+ Reference<ucb::XCommandEnvironment> tmpCmdEnv(
+ new TmpRepositoryCommandEnv(xCmdEnv->getInteractionHandler()));
+ if (xExtensionBackup.is())
+ {
+ Reference<deploy::XPackage> xRestored =
+ xPackageManager->importExtension(
+ xExtensionBackup, Reference<task::XAbortChannel>(),
+ tmpCmdEnv);
+ }
+ activateExtension(
+ sIdentifier, sFileName, bUserDisabled, false,
+ Reference<task::XAbortChannel>(), tmpCmdEnv);
+ if (xTmpExtension.is() || xExtensionBackup.is())
+ m_tmpRepository->removePackage(
+ sIdentifier, OUString(), xAbortChannel, xCmdEnv);
+ fireModified();
+ }
+ catch (...)
+ {
+ }
+ ::cppu::throwException(excOccurred2);
+ }
+ if (xTmpExtension.is() || xExtensionBackup.is())
+ m_tmpRepository->removePackage(
+ sIdentifier,OUString(), xAbortChannel, xCmdEnv);
+
+ if (excOccurred1.hasValue())
+ ::cppu::throwException(excOccurred1);
+
+ return xNewExtension;
+}
+
+void ExtensionManager::removeExtension(
+ OUString const & identifier, OUString const & fileName,
+ OUString const & repository,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ uno::Any excOccurred1;
+ Reference<deploy::XPackage> xExtensionBackup;
+ Reference<deploy::XPackageManager> xPackageManager;
+ bool bUserDisabled = false;
+ ::osl::MutexGuard guard(getMutex());
+ try
+ {
+//Determine the repository to use
+ if (repository.equals(OUSTR("user")))
+ xPackageManager = m_userRepository;
+ else if (repository.equals(OUSTR("shared")))
+ xPackageManager = m_sharedRepository;
+ else
+ throw lang::IllegalArgumentException(
+ OUSTR("No valid repository name provided."),
+ static_cast<cppu::OWeakObject*>(this), 0);
+
+ bUserDisabled = isUserDisabled(identifier, fileName);
+ //Backup the extension, in case the user cancels the action
+ xExtensionBackup = backupExtension(
+ identifier, fileName, xPackageManager, xCmdEnv);
+
+ //revoke the extension if it is active
+ Reference<deploy::XPackage> xOldExtension =
+ xPackageManager->getDeployedPackage(
+ identifier, fileName, xCmdEnv);
+ xOldExtension->revokePackage(xAbortChannel, xCmdEnv);
+
+ xPackageManager->removePackage(
+ identifier, fileName, xAbortChannel, xCmdEnv);
+ activateExtension(identifier, fileName, bUserDisabled, false,
+ xAbortChannel, xCmdEnv);
+ fireModified();
+ }
+ catch (deploy::DeploymentException& ) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (ucb::CommandFailedException & ) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (ucb::CommandAbortedException & ) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (lang::IllegalArgumentException &) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (uno::RuntimeException &) {
+ excOccurred1 = ::cppu::getCaughtException();
+ } catch (...) {
+ excOccurred1 = ::cppu::getCaughtException();
+ deploy::DeploymentException exc(
+ OUSTR("Extension Manager: exception during removeEtension"),
+ static_cast<OWeakObject*>(this), excOccurred1);
+ excOccurred1 <<= exc;
+ }
+
+ if (excOccurred1.hasValue())
+ {
+ //User aborted installation, restore the previous situation.
+ //Use a private AbortChannel so the user cannot interrupt.
+ try
+ {
+ Reference<ucb::XCommandEnvironment> tmpCmdEnv(
+ new TmpRepositoryCommandEnv(xCmdEnv->getInteractionHandler()));
+ if (xExtensionBackup.is())
+ {
+ Reference<deploy::XPackage> xRestored =
+ xPackageManager->importExtension(
+ xExtensionBackup, Reference<task::XAbortChannel>(),
+ tmpCmdEnv);
+ activateExtension(
+ identifier, fileName, bUserDisabled, false,
+ Reference<task::XAbortChannel>(),
+ tmpCmdEnv);
+
+ m_tmpRepository->removePackage(
+ dp_misc::getIdentifier(xExtensionBackup),
+ xExtensionBackup->getName(), xAbortChannel, xCmdEnv);
+ fireModified();
+ }
+ }
+ catch (...)
+ {
+ }
+ ::cppu::throwException(excOccurred1);
+ }
+
+ if (xExtensionBackup.is())
+ m_tmpRepository->removePackage(
+ dp_misc::getIdentifier(xExtensionBackup),
+ xExtensionBackup->getName(), xAbortChannel, xCmdEnv);
+}
+
+// Only enable extensions from shared and user repository
+void ExtensionManager::enableExtension(
+ Reference<deploy::XPackage> const & extension,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ ::osl::MutexGuard guard(getMutex());
+ bool bUserDisabled = false;
+ uno::Any excOccurred;
+ try
+ {
+ if (!extension.is())
+ return;
+ OUString repository = extension->getRepositoryName();
+ if (!repository.equals(OUSTR("user")))
+ throw lang::IllegalArgumentException(
+ OUSTR("No valid repository name provided."),
+ static_cast<cppu::OWeakObject*>(this), 0);
+
+ bUserDisabled = isUserDisabled(dp_misc::getIdentifier(extension),
+ extension->getName());
+
+ activateExtension(dp_misc::getIdentifier(extension),
+ extension->getName(), false, false,
+ xAbortChannel, xCmdEnv);
+ }
+ catch (deploy::DeploymentException& ) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (ucb::CommandFailedException & ) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (ucb::CommandAbortedException & ) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (lang::IllegalArgumentException &) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (uno::RuntimeException &) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (...) {
+ excOccurred = ::cppu::getCaughtException();
+ deploy::DeploymentException exc(
+ OUSTR("Extension Manager: exception during enableExtension"),
+ static_cast<OWeakObject*>(this), excOccurred);
+ excOccurred <<= exc;
+ }
+
+ if (excOccurred.hasValue())
+ {
+ try
+ {
+ activateExtension(dp_misc::getIdentifier(extension),
+ extension->getName(), bUserDisabled, false,
+ xAbortChannel, xCmdEnv);
+ }
+ catch (...)
+ {
+ }
+ ::cppu::throwException(excOccurred);
+ }
+}
+
+/**
+ */
+sal_Int32 ExtensionManager::checkPrerequisitesAndEnable(
+ Reference<deploy::XPackage> const & extension,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ try
+ {
+ if (!extension.is())
+ return 0;
+ ::osl::MutexGuard guard(getMutex());
+ sal_Int32 ret = 0;
+ Reference<deploy::XPackageManager> mgr =
+ getPackageManager(extension->getRepositoryName());
+ ret = mgr->checkPrerequisites(extension, xAbortChannel, xCmdEnv);
+ if (ret)
+ {
+ //There are some unfulfilled prerequisites, try to revoke
+ extension->revokePackage(xAbortChannel, xCmdEnv);
+ }
+ const OUString id(dp_misc::getIdentifier(extension));
+ activateExtension(id, extension->getName(),
+ isUserDisabled(id, extension->getName()), false,
+ xAbortChannel, xCmdEnv);
+ return ret;
+ }
+ catch (deploy::DeploymentException& ) {
+ throw;
+ } catch (ucb::CommandFailedException & ) {
+ throw;
+ } catch (ucb::CommandAbortedException & ) {
+ throw;
+ } catch (lang::IllegalArgumentException &) {
+ throw;
+ } catch (uno::RuntimeException &) {
+ throw;
+ } catch (...) {
+ uno::Any excOccurred = ::cppu::getCaughtException();
+ deploy::DeploymentException exc(
+ OUSTR("Extension Manager: exception during disableExtension"),
+ static_cast<OWeakObject*>(this), excOccurred);
+ throw exc;
+ }
+}
+
+
+void ExtensionManager::disableExtension(
+ Reference<deploy::XPackage> const & extension,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ ::osl::MutexGuard guard(getMutex());
+ uno::Any excOccurred;
+ bool bUserDisabled = false;
+ try
+ {
+ if (!extension.is())
+ return;
+ const OUString repository( extension->getRepositoryName());
+ if (!repository.equals(OUSTR("user")))
+ throw lang::IllegalArgumentException(
+ OUSTR("No valid repository name provided."),
+ static_cast<cppu::OWeakObject*>(this), 0);
+
+ const OUString id(dp_misc::getIdentifier(extension));
+ bUserDisabled = isUserDisabled(id, extension->getName());
+
+ activateExtension(id, extension->getName(), true, false,
+ xAbortChannel, xCmdEnv);
+ }
+ catch (deploy::DeploymentException& ) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (ucb::CommandFailedException & ) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (ucb::CommandAbortedException & ) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (lang::IllegalArgumentException &) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (uno::RuntimeException &) {
+ excOccurred = ::cppu::getCaughtException();
+ } catch (...) {
+ excOccurred = ::cppu::getCaughtException();
+ deploy::DeploymentException exc(
+ OUSTR("Extension Manager: exception during disableExtension"),
+ static_cast<OWeakObject*>(this), excOccurred);
+ excOccurred <<= exc;
+ }
+
+ if (excOccurred.hasValue())
+ {
+ try
+ {
+ activateExtension(dp_misc::getIdentifier(extension),
+ extension->getName(), bUserDisabled, false,
+ xAbortChannel, xCmdEnv);
+ }
+ catch (...)
+ {
+ }
+ ::cppu::throwException(excOccurred);
+ }
+}
+
+uno::Sequence< Reference<deploy::XPackage> >
+ ExtensionManager::getDeployedExtensions(
+ OUString const & repository,
+ Reference<task::XAbortChannel> const &xAbort,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ return getPackageManager(repository)->getDeployedPackages(
+ xAbort, xCmdEnv);
+}
+
+Reference<deploy::XPackage>
+ ExtensionManager::getDeployedExtension(
+ OUString const & repository,
+ OUString const & identifier,
+ OUString const & filename,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ return getPackageManager(repository)->getDeployedPackage(
+ identifier, filename, xCmdEnv);
+}
+
+uno::Sequence< uno::Sequence<Reference<deploy::XPackage> > >
+ ExtensionManager::getAllExtensions(
+ Reference<task::XAbortChannel> const & xAbort,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ try
+ {
+ id2extensions mapExt;
+
+ uno::Sequence<Reference<deploy::XPackage> > userExt =
+ m_userRepository->getDeployedPackages(xAbort, xCmdEnv);
+ addExtensionsToMap(mapExt, userExt, OUSTR("user"));
+ uno::Sequence<Reference<deploy::XPackage> > sharedExt =
+ m_sharedRepository->getDeployedPackages(xAbort, xCmdEnv);
+ addExtensionsToMap(mapExt, sharedExt, OUSTR("shared"));
+ uno::Sequence<Reference<deploy::XPackage> > bundledExt =
+ m_bundledRepository->getDeployedPackages(xAbort, xCmdEnv);
+ addExtensionsToMap(mapExt, bundledExt, OUSTR("bundled"));
+
+ //copy the values of the map to a vector for sorting
+ ::std::vector< ::std::vector<Reference<deploy::XPackage> > >
+ vecExtensions;
+ id2extensions::const_iterator mapIt = mapExt.begin();
+ for (;mapIt != mapExt.end(); mapIt++)
+ vecExtensions.push_back(mapIt->second);
+
+ //sort the element according to the identifier
+ ::std::sort(vecExtensions.begin(), vecExtensions.end(), CompIdentifiers());
+
+ ::std::vector< ::std::vector<Reference<deploy::XPackage> > >::const_iterator
+ citVecVec = vecExtensions.begin();
+ sal_Int32 j = 0;
+ uno::Sequence< uno::Sequence<Reference<deploy::XPackage> > > seqSeq(vecExtensions.size());
+ for (;citVecVec != vecExtensions.end(); citVecVec++, j++)
+ {
+ seqSeq[j] = comphelper::containerToSequence(*citVecVec);
+ }
+ return seqSeq;
+
+ } catch (deploy::DeploymentException& ) {
+ throw;
+ } catch (ucb::CommandFailedException & ) {
+ throw;
+ } catch (ucb::CommandAbortedException & ) {
+ throw;
+ } catch (lang::IllegalArgumentException &) {
+ throw;
+ } catch (uno::RuntimeException &) {
+ throw;
+ } catch (...) {
+ uno::Any exc = ::cppu::getCaughtException();
+ throw deploy::DeploymentException(
+ OUSTR("Extension Manager: exception during enableExtension"),
+ static_cast<OWeakObject*>(this), exc);
+ }
+}
+
+//only to be called from unopkg!!!
+void ExtensionManager::reinstallDeployedExtensions(
+ OUString const & repository,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException, ucb::CommandAbortedException,
+ lang::IllegalArgumentException, uno::RuntimeException)
+{
+ try
+ {
+ Reference<deploy::XPackageManager>
+ xPackageManager = getPackageManager(repository);
+
+ ::osl::MutexGuard guard(getMutex());
+ xPackageManager->reinstallDeployedPackages(xAbortChannel, xCmdEnv);
+ //We must sync here, otherwise we will get exceptions when extensions
+ //are removed.
+ dp_misc::syncRepositories(xCmdEnv);
+ const uno::Sequence< Reference<deploy::XPackage> > extensions(
+ xPackageManager->getDeployedPackages(xAbortChannel, xCmdEnv));
+
+ for ( sal_Int32 pos = 0; pos < extensions.getLength(); ++pos )
+ {
+ try
+ {
+ const OUString id = dp_misc::getIdentifier(extensions[ pos ]);
+ const OUString fileName = extensions[ pos ]->getName();
+ OSL_ASSERT(id.getLength());
+ activateExtension(id, fileName, false, false, xAbortChannel, xCmdEnv );
+ }
+ catch (lang::DisposedException &)
+ {
+ }
+ }
+ } catch (deploy::DeploymentException& ) {
+ throw;
+ } catch (ucb::CommandFailedException & ) {
+ throw;
+ } catch (ucb::CommandAbortedException & ) {
+ throw;
+ } catch (lang::IllegalArgumentException &) {
+ throw;
+ } catch (uno::RuntimeException &) {
+ throw;
+ } catch (...) {
+ uno::Any exc = ::cppu::getCaughtException();
+ throw deploy::DeploymentException(
+ OUSTR("Extension Manager: exception during enableExtension"),
+ static_cast<OWeakObject*>(this), exc);
+ }
+}
+
+sal_Bool ExtensionManager::synchronize(
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deploy::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ try
+ {
+ sal_Bool bModified = sal_False;
+
+ ::osl::MutexGuard guard(getMutex());
+ String sSynchronizingShared(StrSyncRepository::get());
+ sSynchronizingShared.SearchAndReplaceAllAscii( "%NAME", OUSTR("shared"));
+ dp_misc::ProgressLevel progressShared(xCmdEnv, sSynchronizingShared);
+ bModified = m_sharedRepository->synchronize(xAbortChannel, xCmdEnv);
+ progressShared.update(OUSTR("\n\n"));
+
+ String sSynchronizingBundled(StrSyncRepository::get());
+ sSynchronizingBundled.SearchAndReplaceAllAscii( "%NAME", OUSTR("bundled"));
+ dp_misc::ProgressLevel progressBundled(xCmdEnv, sSynchronizingBundled);
+ bModified |= m_bundledRepository->synchronize(xAbortChannel, xCmdEnv);
+ progressBundled.update(OUSTR("\n\n"));
+
+ try
+ {
+ const uno::Sequence<uno::Sequence<Reference<deploy::XPackage> > >
+ seqSeqExt = getAllExtensions(xAbortChannel, xCmdEnv);
+ for (sal_Int32 i = 0; i < seqSeqExt.getLength(); i++)
+ {
+ uno::Sequence<Reference<deploy::XPackage> > const & seqExt =
+ seqSeqExt[i];
+ activateExtension(seqExt, isUserDisabled(seqExt), true,
+ xAbortChannel, xCmdEnv);
+ }
+ }
+ catch (...)
+ {
+ //We catch the exception, so we can write the lastmodified file
+ //so we will no repeat this everytime OOo starts.
+ OSL_ENSURE(0, "Extensions Manager: synchronize");
+ }
+ OUString lastSyncBundled(RTL_CONSTASCII_USTRINGPARAM(
+ "$BUNDLED_EXTENSIONS_USER/lastsynchronized"));
+ writeLastModified(lastSyncBundled, xCmdEnv);
+ OUString lastSyncShared(RTL_CONSTASCII_USTRINGPARAM(
+ "$SHARED_EXTENSIONS_USER/lastsynchronized"));
+ writeLastModified(lastSyncShared, xCmdEnv);
+ return bModified;
+ } catch (deploy::DeploymentException& ) {
+ throw;
+ } catch (ucb::CommandFailedException & ) {
+ throw;
+ } catch (ucb::CommandAbortedException & ) {
+ throw;
+ } catch (lang::IllegalArgumentException &) {
+ throw;
+ } catch (uno::RuntimeException &) {
+ throw;
+ } catch (...) {
+ uno::Any exc = ::cppu::getCaughtException();
+ throw deploy::DeploymentException(
+ OUSTR("Extension Manager: exception in synchronize"),
+ static_cast<OWeakObject*>(this), exc);
+ }
+}
+
+// Notify the user when a new extension is to be installed. This is only the
+// case when one uses the system integration to install an extension (double
+// clicking on .oxt file etc.)). The function must only be called if there is no
+// extension with the same identifier already deployed. Then the checkUpdate
+// function will inform the user that the extension is about to be installed In
+// case the user cancels the installation a CommandFailed exception is
+// thrown.
+void ExtensionManager::checkInstall(
+ OUString const & displayName,
+ Reference<ucb::XCommandEnvironment> const & cmdEnv)
+{
+ uno::Any request(
+ deploy::InstallException(
+ OUSTR("Extension ") + displayName +
+ OUSTR(" is about to be installed."),
+ static_cast<OWeakObject *>(this), displayName));
+ bool approve = false, abort = false;
+ if (! dp_misc::interactContinuation(
+ request, task::XInteractionApprove::static_type(),
+ cmdEnv, &approve, &abort ))
+ {
+ OSL_ASSERT( !approve && !abort );
+ throw deploy::DeploymentException(
+ dp_misc::getResourceString(RID_STR_ERROR_WHILE_ADDING) + displayName,
+ static_cast<OWeakObject *>(this), request );
+ }
+ if (abort || !approve)
+ throw ucb::CommandFailedException(
+ dp_misc::getResourceString(RID_STR_ERROR_WHILE_ADDING) + displayName,
+ static_cast<OWeakObject *>(this), request );
+}
+
+/* The function will make the user interaction in case there is an extension
+installed with the same id. This function may only be called if there is already
+an extension.
+*/
+void ExtensionManager::checkUpdate(
+ OUString const & newVersion,
+ OUString const & newDisplayName,
+ Reference<deploy::XPackage> const & oldExtension,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+{
+ // package already deployed, interact --force:
+ uno::Any request(
+ (deploy::VersionException(
+ dp_misc::getResourceString(
+ RID_STR_PACKAGE_ALREADY_ADDED ) + newDisplayName,
+ static_cast<OWeakObject *>(this), newVersion, newDisplayName,
+ oldExtension ) ) );
+ bool replace = false, abort = false;
+ if (! dp_misc::interactContinuation(
+ request, task::XInteractionApprove::static_type(),
+ xCmdEnv, &replace, &abort )) {
+ OSL_ASSERT( !replace && !abort );
+ throw deploy::DeploymentException(
+ dp_misc::getResourceString(
+ RID_STR_ERROR_WHILE_ADDING) + newDisplayName,
+ static_cast<OWeakObject *>(this), request );
+ }
+ if (abort || !replace)
+ throw ucb::CommandFailedException(
+ dp_misc::getResourceString(
+ RID_STR_PACKAGE_ALREADY_ADDED) + newDisplayName,
+ static_cast<OWeakObject *>(this), request );
+}
+
+Reference<deploy::XPackage> ExtensionManager::getTempExtension(
+ OUString const & url,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<ucb::XCommandEnvironment> const & /*xCmdEnv*/)
+
+{
+ Reference<ucb::XCommandEnvironment> tmpCmdEnvA(new TmpRepositoryCommandEnv());
+ Reference<deploy::XPackage> xTmpPackage = m_tmpRepository->addPackage(
+ url, uno::Sequence<beans::NamedValue>(),OUString(), xAbortChannel, tmpCmdEnvA);
+ if (!xTmpPackage.is())
+ {
+ throw deploy::DeploymentException(
+ OUSTR("Extension Manager: Failed to create temporary XPackage for url: ") + url,
+ static_cast<OWeakObject*>(this), uno::Any());
+
+ }
+ return xTmpPackage;
+}
+
+uno::Sequence<Reference<deploy::XPackage> > SAL_CALL
+ExtensionManager::getExtensionsWithUnacceptedLicenses(
+ OUString const & repository,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+ throw (deploy::DeploymentException,
+ uno::RuntimeException)
+{
+ Reference<deploy::XPackageManager>
+ xPackageManager = getPackageManager(repository);
+ ::osl::MutexGuard guard(getMutex());
+ return xPackageManager->getExtensionsWithUnacceptedLicenses(xCmdEnv);
+}
+
+sal_Bool ExtensionManager::isReadOnlyRepository(::rtl::OUString const & repository)
+ throw (uno::RuntimeException)
+{
+ return getPackageManager(repository)->isReadOnly();
+}
+//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
+
+namespace sdecl = comphelper::service_decl;
+sdecl::class_<ExtensionManager> servicePIP;
+extern sdecl::ServiceDecl const serviceDecl(
+ servicePIP,
+ // a private one:
+ "com.sun.star.comp.deployment.ExtensionManager",
+ "com.sun.star.comp.deployment.ExtensionManager");
+
+//------------------------------------------------------------------------------
+bool singleton_entries(
+ uno::Reference< registry::XRegistryKey > const & xRegistryKey )
+{
+ try {
+ uno::Reference< registry::XRegistryKey > xKey(
+ xRegistryKey->createKey(
+ serviceDecl.getImplementationName() +
+ // xxx todo: use future generated function to get singleton name
+ OUSTR("/UNO/SINGLETONS/"
+ "com.sun.star.deployment.ExtensionManager") ) );
+ xKey->setStringValue( serviceDecl.getSupportedServiceNames()[0] );
+ return true;
+ }
+ catch (registry::InvalidRegistryException & exc) {
+ (void) exc; // avoid warnings
+ OSL_ENSURE( 0, ::rtl::OUStringToOString(
+ exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
+ return false;
+ }
+}
+
+// XModifyBroadcaster
+//______________________________________________________________________________
+void ExtensionManager::addModifyListener(
+ Reference<util::XModifyListener> const & xListener )
+ throw (uno::RuntimeException)
+{
+ check();
+ rBHelper.addListener( ::getCppuType( &xListener ), xListener );
+}
+
+//______________________________________________________________________________
+void ExtensionManager::removeModifyListener(
+ Reference<util::XModifyListener> const & xListener )
+ throw (uno::RuntimeException)
+{
+ check();
+ rBHelper.removeListener( ::getCppuType( &xListener ), xListener );
+}
+
+void ExtensionManager::check()
+{
+ ::osl::MutexGuard guard( getMutex() );
+ if (rBHelper.bInDispose || rBHelper.bDisposed) {
+ throw lang::DisposedException(
+ OUSTR("ExtensionManager instance has already been disposed!"),
+ static_cast<OWeakObject *>(this) );
+ }
+}
+
+void ExtensionManager::fireModified()
+{
+ ::cppu::OInterfaceContainerHelper * pContainer = rBHelper.getContainer(
+ util::XModifyListener::static_type() );
+ if (pContainer != 0) {
+ pContainer->forEach<util::XModifyListener>(
+ boost::bind(&util::XModifyListener::modified, _1,
+ lang::EventObject(static_cast<OWeakObject *>(this))) );
+ }
+}
+
+} // namespace dp_manager
+
+
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.hxx b/desktop/source/deployment/manager/dp_extensionmanager.hxx
new file mode 100644
index 000000000000..64cada7da3ac
--- /dev/null
+++ b/desktop/source/deployment/manager/dp_extensionmanager.hxx
@@ -0,0 +1,307 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+
+#if ! defined INCLUDED_DP_EXTENSIONMANAGER_H
+#define INCLUDED_DP_EXTENSIONMANAGER_H
+
+#include "dp_manager.hrc"
+#include "dp_misc.h"
+#include "dp_interact.h"
+#include "dp_activepackages.hxx"
+#include "rtl/ref.hxx"
+#include "cppuhelper/compbase1.hxx"
+#include "ucbhelper/content.hxx"
+#include "com/sun/star/deployment/XPackageRegistry.hpp"
+#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "osl/mutex.hxx"
+#include <list>
+
+
+namespace css = ::com::sun::star;
+
+namespace dp_manager {
+
+typedef ::std::hash_map<
+ ::rtl::OUString,
+ ::std::vector<css::uno::Reference<css::deployment::XPackage> >,
+ ::rtl::OUStringHash > id2extensions;
+
+
+class ExtensionManager : private ::dp_misc::MutexHolder,
+ public ::cppu::WeakComponentImplHelper1< css::deployment::XExtensionManager >
+{
+public:
+ ExtensionManager( css::uno::Reference< css::uno::XComponentContext >const& xContext);
+ virtual ~ExtensionManager();
+
+ static css::uno::Sequence< ::rtl::OUString > getServiceNames();
+ static ::rtl::OUString getImplName();
+
+ void check();
+ void fireModified();
+
+public:
+
+// XModifyBroadcaster
+ virtual void SAL_CALL addModifyListener(
+ css::uno::Reference<css::util::XModifyListener> const & xListener )
+ throw (css::uno::RuntimeException);
+ virtual void SAL_CALL removeModifyListener(
+ css::uno::Reference<css::util::XModifyListener> const & xListener )
+ throw (css::uno::RuntimeException);
+
+//XExtensionManager
+ virtual css::uno::Sequence<
+ css::uno::Reference<css::deployment::XPackageTypeInfo> > SAL_CALL
+ getSupportedPackageTypes()
+ throw (css::uno::RuntimeException);
+
+ virtual css::uno::Reference<css::task::XAbortChannel> SAL_CALL
+ createAbortChannel() throw (css::uno::RuntimeException);
+
+ virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL addExtension(
+ ::rtl::OUString const & url,
+ css::uno::Sequence<css::beans::NamedValue> const & properties,
+ ::rtl::OUString const & repository,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual void SAL_CALL removeExtension(
+ ::rtl::OUString const & identifier,
+ ::rtl::OUString const & filename,
+ ::rtl::OUString const & repository,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual void SAL_CALL enableExtension(
+ css::uno::Reference<css::deployment::XPackage> const & extension,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual void SAL_CALL disableExtension(
+ css::uno::Reference<css::deployment::XPackage> const & extension,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+
+ virtual sal_Int32 SAL_CALL checkPrerequisitesAndEnable(
+ css::uno::Reference<css::deployment::XPackage> const & extension,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+
+ virtual css::uno::Sequence< css::uno::Reference<css::deployment::XPackage> >
+ SAL_CALL getDeployedExtensions(
+ ::rtl::OUString const & repository,
+ css::uno::Reference<css::task::XAbortChannel> const &,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual css::uno::Reference< css::deployment::XPackage>
+ SAL_CALL getDeployedExtension(
+ ::rtl::OUString const & repository,
+ ::rtl::OUString const & identifier,
+ ::rtl::OUString const & filename,
+ css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (
+ css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> >
+ SAL_CALL getExtensionsWithSameIdentifier(
+ ::rtl::OUString const & identifier,
+ ::rtl::OUString const & filename,
+ css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (
+ css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual css::uno::Sequence< css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > >
+ SAL_CALL getAllExtensions(
+ css::uno::Reference<css::task::XAbortChannel> const &,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+
+ virtual void SAL_CALL reinstallDeployedExtensions(
+ ::rtl::OUString const & repository,
+ css::uno::Reference< css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (
+ css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL synchronize(
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+
+ virtual css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > SAL_CALL
+ getExtensionsWithUnacceptedLicenses(
+ ::rtl::OUString const & repository,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv)
+ throw (css::deployment::DeploymentException,
+ css::uno::RuntimeException);
+
+ virtual sal_Bool SAL_CALL isReadOnlyRepository(::rtl::OUString const & repository)
+ throw (css::uno::RuntimeException);
+
+private:
+
+ struct StrSyncRepository : public ::dp_misc::StaticResourceString<
+ StrSyncRepository, RID_STR_SYNCHRONIZING_REPOSITORY> {};
+
+ struct ExtensionInfos
+ {
+ ::rtl::OUString identifier;
+ ::rtl::OUString fileName;
+ ::rtl::OUString displayName;
+ ::rtl::OUString version;
+ };
+
+ css::uno::Reference< css::uno::XComponentContext> m_xContext;
+
+ css::uno::Reference<css::deployment::XPackageManager> m_userRepository;
+ css::uno::Reference<css::deployment::XPackageManager> m_sharedRepository;
+ css::uno::Reference<css::deployment::XPackageManager> m_bundledRepository;
+ css::uno::Reference<css::deployment::XPackageManager> m_tmpRepository;
+
+ /* contains the names of all repositories (except tmp) in order of there
+ priority. That is, the first element is "user" follod by "shared" and
+ then "bundled"
+ */
+ ::std::list< ::rtl::OUString > m_repositoryNames;
+
+ bool isUserDisabled(::rtl::OUString const & identifier,
+ ::rtl::OUString const & filename);
+
+ bool isUserDisabled(
+ css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > const & seqExtSameId);
+
+ void activateExtension(
+ ::rtl::OUString const & identifier,
+ ::rtl::OUString const & fileName,
+ bool bUserDisabled, bool bStartup,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+
+ void activateExtension(
+ css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > const & seqExt,
+ bool bUserDisabled, bool bStartup,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
+
+
+ ::std::list<css::uno::Reference<css::deployment::XPackage> >
+ getExtensionsWithSameId(::rtl::OUString const & identifier,
+ ::rtl::OUString const & fileName,
+ css::uno::Reference< css::ucb::XCommandEnvironment> const & xCmdEnv =
+ css::uno::Reference< css::ucb::XCommandEnvironment>());
+
+ css::uno::Reference<css::deployment::XPackage> backupExtension(
+ ::rtl::OUString const & identifier, ::rtl::OUString const & fileName,
+ css::uno::Reference<css::deployment::XPackageManager> const & xPackageManager,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+
+ void checkInstall(
+ ::rtl::OUString const & displayName,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & cmdEnv);
+
+ void checkUpdate(
+ ::rtl::OUString const & newVersion,
+ ::rtl::OUString const & newDisplayName,
+ css::uno::Reference<css::deployment::XPackage> const & oldExtension,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+
+ css::uno::Reference<css::deployment::XPackage> getTempExtension(
+ ::rtl::OUString const & url,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+
+
+ void addExtensionsToMap(
+ id2extensions & mapExt,
+ css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > const & seqExt,
+ ::rtl::OUString const & repository);
+
+ css::uno::Reference<css::deployment::XPackageManager>
+ getPackageManager(::rtl::OUString const & repository)
+ throw (css::lang::IllegalArgumentException);
+};
+
+}
+
+
+
+
+#endif
+
diff --git a/desktop/source/deployment/manager/dp_informationprovider.cxx b/desktop/source/deployment/manager/dp_informationprovider.cxx
index 9f2e0c9e1177..4cc43a8386d8 100644
--- a/desktop/source/deployment/manager/dp_informationprovider.cxx
+++ b/desktop/source/deployment/manager/dp_informationprovider.cxx
@@ -32,11 +32,10 @@
#include "comphelper/servicedecl.hxx"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
#include "com/sun/star/deployment/UpdateInformationProvider.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
#include "com/sun/star/deployment/XPackageInformationProvider.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/deployment/XUpdateInformationProvider.hpp"
#include "com/sun/star/lang/XServiceInfo.hpp"
#include "com/sun/star/registry/XRegistryKey.hpp"
@@ -56,6 +55,7 @@
#include "dp_identifier.hxx"
#include "dp_version.hxx"
#include "dp_misc.h"
+#include "dp_update.hxx"
namespace beans = com::sun::star::beans ;
namespace deployment = com::sun::star::deployment ;
@@ -104,21 +104,10 @@ private:
uno::Reference< uno::XComponentContext> mxContext;
- rtl::OUString getPackageLocation( const uno::Reference< deployment::XPackageManager > _xManager,
+ rtl::OUString getPackageLocation( const rtl::OUString& repository,
const rtl::OUString& _sExtensionId );
uno::Reference< deployment::XUpdateInformationProvider > mxUpdateInformation;
-
- uno::Sequence< uno::Reference< xml::dom::XElement > >
- getUpdateInformation( uno::Sequence< rtl::OUString > const & urls,
- rtl::OUString const & identifier ) const;
- uno::Sequence< uno::Reference< deployment::XPackage > >
- getPackages( const uno::Reference< deployment::XPackageManager > _xManager );
- uno::Sequence< uno::Sequence< rtl::OUString > > isUpdateAvailable( const uno::Reference< deployment::XPackageManager > _xManager,
- const rtl::OUString& _sExtensionId );
- uno::Sequence< uno::Sequence< rtl::OUString > > getExtensionList( const uno::Reference< deployment::XPackageManager > _xManager );
- uno::Sequence< uno::Sequence< rtl::OUString > > concatLists( uno::Sequence< uno::Sequence< rtl::OUString > > aFirst,
- uno::Sequence< uno::Sequence< rtl::OUString > > aSecond );
};
//------------------------------------------------------------------------------
@@ -148,15 +137,18 @@ void SAL_CALL PackageInformationProvider::handle( uno::Reference< task::XInterac
//------------------------------------------------------------------------------
rtl::OUString PackageInformationProvider::getPackageLocation(
- const uno::Reference< deployment::XPackageManager > _xManager,
- const rtl::OUString& _rExtensionId )
+ const rtl::OUString & repository,
+ const rtl::OUString& _rExtensionId )
{
rtl::OUString aLocationURL;
+ uno::Reference<deployment::XExtensionManager> xManager =
+ deployment::ExtensionManager::get(mxContext);
- if ( _xManager.is() )
+ if ( xManager.is() )
{
const uno::Sequence< uno::Reference< deployment::XPackage > > packages(
- _xManager->getDeployedPackages(
+ xManager->getDeployedExtensions(
+ repository,
uno::Reference< task::XAbortChannel >(),
static_cast < XCommandEnvironment *> (this) ) );
@@ -187,32 +179,21 @@ rtl::OUString SAL_CALL
PackageInformationProvider::getPackageLocation( const rtl::OUString& _sExtensionId )
throw ( uno::RuntimeException )
{
- uno::Reference< deployment::XPackageManager > xManager;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("user") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- rtl::OUString aLocationURL = getPackageLocation( xManager, _sExtensionId );
+ rtl::OUString aLocationURL = getPackageLocation( UNISTRING("user"), _sExtensionId );
if ( aLocationURL.getLength() == 0 )
{
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("shared") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- aLocationURL = getPackageLocation( xManager, _sExtensionId );
+ aLocationURL = getPackageLocation( UNISTRING("shared"), _sExtensionId );
+ }
+ if ( aLocationURL.getLength() == 0 )
+ {
+ aLocationURL = getPackageLocation( UNISTRING("bundled"), _sExtensionId );
}
-
if ( aLocationURL.getLength() )
{
::ucbhelper::Content aContent( aLocationURL, NULL );
aLocationURL = aContent.getURL();
}
-
return aLocationURL;
}
@@ -222,252 +203,157 @@ uno::Sequence< uno::Sequence< rtl::OUString > > SAL_CALL
PackageInformationProvider::isUpdateAvailable( const rtl::OUString& _sExtensionId )
throw ( uno::RuntimeException )
{
- uno::Sequence< uno::Sequence< rtl::OUString > > aUpdateListUser;
-
- uno::Reference< deployment::XPackageManager > xManager;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("user") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- aUpdateListUser = isUpdateAvailable( xManager, _sExtensionId );
-
- uno::Sequence< uno::Sequence< rtl::OUString > > aUpdateListShared;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("shared") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- aUpdateListShared = isUpdateAvailable( xManager, _sExtensionId );
-
- if ( !aUpdateListUser.hasElements() )
- return aUpdateListShared;
- else if ( !aUpdateListShared.hasElements() )
- return aUpdateListUser;
- else
- return concatLists( aUpdateListUser, aUpdateListShared );
-}
-
-//------------------------------------------------------------------------------
-uno::Sequence< uno::Sequence< rtl::OUString > > SAL_CALL PackageInformationProvider::getExtensionList()
- throw ( uno::RuntimeException )
-{
- uno::Sequence< uno::Sequence< rtl::OUString > > aListUser;
-
- uno::Reference< deployment::XPackageManager > xManager;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("user") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- aListUser = getExtensionList( xManager );
-
- uno::Sequence< uno::Sequence< rtl::OUString > > aListShared;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("shared") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- aListShared = getExtensionList( xManager );
+ uno::Sequence< uno::Sequence< rtl::OUString > > aList;
- if ( !aListUser.hasElements() )
- return aListShared;
- else if ( !aListShared.hasElements() )
- return aListUser;
- else
- return concatLists( aListUser, aListShared );
-}
+ uno::Reference<deployment::XExtensionManager> extMgr =
+ deployment::ExtensionManager::get(mxContext);
-//------------------------------------------------------------------------------
-//------------------------------------------------------------------------------
-//------------------------------------------------------------------------------
-uno::Sequence< uno::Reference< deployment::XPackage > >
- PackageInformationProvider::getPackages( const uno::Reference< deployment::XPackageManager > _xMgr )
-{
- uno::Sequence< uno::Reference< deployment::XPackage > > packages;
- try {
- packages = _xMgr->getDeployedPackages( uno::Reference< task::XAbortChannel >(),
- static_cast < XCommandEnvironment *> (this) );
- }
- catch ( deployment::DeploymentException & )
- {}
- catch ( css_ucb::CommandFailedException & )
- {}
- catch ( css_ucb::CommandAbortedException & )
- {}
- catch ( lang::IllegalArgumentException & e )
+ if (!extMgr.is())
{
- throw uno::RuntimeException(e.Message, e.Context);
+ OSL_ASSERT(0);
+ return aList;
}
-
- return packages;
-}
-
-//------------------------------------------------------------------------------
-uno::Sequence< uno::Reference< xml::dom::XElement > >
- PackageInformationProvider::getUpdateInformation( uno::Sequence< rtl::OUString > const & urls,
- rtl::OUString const & identifier ) const
-{
- try
+ std::vector<std::pair<uno::Reference<deployment::XPackage>, uno::Any > > errors;
+ dp_misc::UpdateInfoMap updateInfoMap;
+ if (_sExtensionId.getLength())
{
- return mxUpdateInformation->getUpdateInformation( urls, identifier );
+ std::vector<uno::Reference<deployment::XPackage> > vecExtensions;
+ uno::Reference<deployment::XPackage> extension;
+ try
+ {
+ extension = dp_misc::getExtensionWithHighestVersion(
+ extMgr->getExtensionsWithSameIdentifier(
+ _sExtensionId, _sExtensionId, uno::Reference<css_ucb::XCommandEnvironment>()));
+ vecExtensions.push_back(extension);
+ }
+ catch (lang::IllegalArgumentException &)
+ {
+ OSL_ASSERT(0);
+ }
+ updateInfoMap = dp_misc::getOnlineUpdateInfos(
+ mxContext, extMgr, mxUpdateInformation, &vecExtensions, errors);
}
- catch ( uno::RuntimeException & ) {
- throw;
+ else
+ {
+ updateInfoMap = dp_misc::getOnlineUpdateInfos(
+ mxContext, extMgr, mxUpdateInformation, NULL, errors);
}
- catch ( css_ucb::CommandFailedException & ) {}
- catch ( css_ucb::CommandAbortedException & ) {}
- catch ( uno::Exception & ) {}
-
- return uno::Sequence< uno::Reference< xml::dom::XElement > >();
-}
-//------------------------------------------------------------------------------
-uno::Sequence< uno::Sequence< rtl::OUString > >
- PackageInformationProvider::isUpdateAvailable(
- const uno::Reference< deployment::XPackageManager > _xManager,
- const rtl::OUString& _sExtensionId )
-{
- uno::Sequence< uno::Sequence< rtl::OUString > > aList;
- sal_Int32 nCount = 0;
- bool bPackageFound = false;
-
- // If the package manager is readonly then the user cannot modify anything anyway
- // so we can abort the search here
- if ( _xManager.is() && ! _xManager->isReadOnly() )
+ int nCount = 0;
+ for (dp_misc::UpdateInfoMap::iterator i(updateInfoMap.begin()); i != updateInfoMap.end(); i++)
{
- uno::Sequence< uno::Reference< deployment::XPackage > > packages( getPackages( _xManager ) );
- uno::Sequence< uno::Reference< xml::dom::XElement > > defaultInfos;
+ dp_misc::UpdateInfo const & info = i->second;
- for ( int pos = packages.getLength(); pos-- && !bPackageFound; )
+ rtl::OUString sOnlineVersion;
+ if (info.info.is())
{
- uno::Reference< deployment::XPackage > package( packages[ pos ] );
- uno::Sequence< rtl::OUString > urls( package->getUpdateInformationURLs());
- uno::Sequence< uno::Reference< xml::dom::XElement > > infos;
- rtl::OUString id( dp_misc::getIdentifier( package ) );
-
- if ( _sExtensionId.getLength() )
- {
- if ( _sExtensionId == id )
- bPackageFound = true;
- else /* we have an ID and the IDs don't match, continue with next package */
- continue;
- }
-
- if ( urls.getLength() != 0)
- {
- infos = getUpdateInformation( urls, id );
- }
- else
- {
- if ( defaultInfos.getLength() == 0 )
- {
- const rtl::OUString defaultURL( dp_misc::getExtensionDefaultUpdateURL() );
- if ( defaultURL.getLength() )
- defaultInfos = getUpdateInformation( uno::Sequence< rtl::OUString >( &defaultURL, 1 ),
- rtl::OUString() );
- }
- infos = defaultInfos;
- }
- rtl::OUString latestVersion( package->getVersion() );
- sal_Int32 latestIndex = -1;
- for ( sal_Int32 i = 0; i < infos.getLength(); ++i )
- {
- dp_misc::DescriptionInfoset infoset( mxContext,
- uno::Reference< xml::dom::XNode >( infos[i], uno::UNO_QUERY_THROW));
- boost::optional< rtl::OUString > id2( infoset.getIdentifier() );
+ // check, if there are unsatisfied dependencies and ignore this online update
+ dp_misc::DescriptionInfoset infoset(mxContext, info.info);
+ uno::Sequence< uno::Reference< xml::dom::XElement > >
+ ds( dp_misc::Dependencies::check( infoset ) );
+ if ( ! ds.getLength() )
+ sOnlineVersion = info.version;
+ }
- if (!id2)
- continue;
+ rtl::OUString sVersionUser;
+ rtl::OUString sVersionShared;
+ rtl::OUString sVersionBundled;
+ uno::Sequence< uno::Reference< deployment::XPackage> > extensions;
+ try {
+ extensions = extMgr->getExtensionsWithSameIdentifier(
+ dp_misc::getIdentifier(info.extension), info.extension->getName(),
+ uno::Reference<css_ucb::XCommandEnvironment>());
+ } catch (lang::IllegalArgumentException& ) {
+ OSL_ASSERT(0);
+ }
+ OSL_ASSERT(extensions.getLength() == 3);
+ if (extensions[0].is() )
+ sVersionUser = extensions[0]->getVersion();
+ if (extensions[1].is() )
+ sVersionShared = extensions[1]->getVersion();
+ if (extensions[2].is() )
+ sVersionBundled = extensions[2]->getVersion();
+
+ bool bSharedReadOnly = extMgr->isReadOnlyRepository(OUSTR("shared"));
+
+ dp_misc::UPDATE_SOURCE sourceUser = dp_misc::isUpdateUserExtension(
+ bSharedReadOnly, sVersionUser, sVersionShared, sVersionBundled, sOnlineVersion);
+ dp_misc::UPDATE_SOURCE sourceShared = dp_misc::isUpdateSharedExtension(
+ bSharedReadOnly, sVersionShared, sVersionBundled, sOnlineVersion);
+
+ rtl::OUString updateVersionUser;
+ rtl::OUString updateVersionShared;
+ if (sourceUser != dp_misc::UPDATE_SOURCE_NONE)
+ updateVersionUser = dp_misc::getHighestVersion(
+ rtl::OUString(), sVersionShared, sVersionBundled, sOnlineVersion);
+ if (sourceShared != dp_misc::UPDATE_SOURCE_NONE)
+ updateVersionShared = dp_misc::getHighestVersion(
+ rtl::OUString(), rtl::OUString(), sVersionBundled, sOnlineVersion);
+ rtl::OUString updateVersion;
+ if (dp_misc::compareVersions(updateVersionUser, updateVersionShared) == dp_misc::GREATER)
+ updateVersion = updateVersionUser;
+ else
+ updateVersion = updateVersionShared;
+ if (updateVersion.getLength())
+ {
- if (*id2 == id)
- {
- // check, if there are unsatisfied dependencies and ignore those updates
- uno::Sequence< uno::Reference< xml::dom::XElement > > ds( dp_misc::Dependencies::check( infoset ) );
- if ( ds.getLength() )
- continue;
-
- rtl::OUString v( infoset.getVersion() );
- if ( dp_misc::compareVersions( v, latestVersion ) == dp_misc::GREATER )
- {
- latestVersion = v;
- latestIndex = i;
- }
- }
- }
- if ( latestIndex != -1 )
- {
- rtl::OUString aNewEntry[2];
- aNewEntry[0] = id;
- aNewEntry[1] = latestVersion;
- aList.realloc( ++nCount );
- aList[ nCount-1 ] = ::uno::Sequence< rtl::OUString >( aNewEntry, 2 );
- }
+ rtl::OUString aNewEntry[2];
+ aNewEntry[0] = i->first;
+ aNewEntry[1] = updateVersion;
+ aList.realloc( ++nCount );
+ aList[ nCount-1 ] = ::uno::Sequence< rtl::OUString >( aNewEntry, 2 );
}
}
return aList;
}
//------------------------------------------------------------------------------
-uno::Sequence< uno::Sequence< rtl::OUString > >
- PackageInformationProvider::getExtensionList(
- const uno::Reference< deployment::XPackageManager > _xManager )
+uno::Sequence< uno::Sequence< rtl::OUString > > SAL_CALL PackageInformationProvider::getExtensionList()
+ throw ( uno::RuntimeException )
{
- uno::Sequence< uno::Sequence< rtl::OUString > > aList;
+ const uno::Reference<deployment::XExtensionManager> mgr =
+ deployment::ExtensionManager::get(mxContext);
- if ( _xManager.is() )
- {
- uno::Sequence< uno::Reference< deployment::XPackage > > packages( getPackages( _xManager ) );
+ if (!mgr.is())
+ return uno::Sequence< uno::Sequence< rtl::OUString > >();
- aList.realloc( packages.getLength() );
+ const uno::Sequence< uno::Sequence< uno::Reference<deployment::XPackage > > >
+ allExt = mgr->getAllExtensions(
+ uno::Reference< task::XAbortChannel >(),
+ static_cast < XCommandEnvironment *> (this) );
- for ( int pos = packages.getLength(); pos--; )
- {
- uno::Reference< deployment::XPackage > package( packages[ pos ] );
- rtl::OUString aNewEntry[2];
-
- aNewEntry[0] = dp_misc::getIdentifier( package );
- aNewEntry[1] = package->getVersion();
- aList[ pos ] = ::uno::Sequence< rtl::OUString >( aNewEntry, 2 );
- }
- }
- return aList;
-}
+ uno::Sequence< uno::Sequence< rtl::OUString > > retList;
-//------------------------------------------------------------------------------
-uno::Sequence< uno::Sequence< rtl::OUString > > PackageInformationProvider::concatLists(
- uno::Sequence< uno::Sequence< rtl::OUString > > aFirst,
- uno::Sequence< uno::Sequence< rtl::OUString > > aSecond )
-{
- sal_Int32 nFirstCount = aFirst.getLength();
- sal_Int32 nSecondCount = aSecond.getLength();
- sal_Int32 nIndex = nFirstCount;
+ sal_Int32 cAllIds = allExt.getLength();
+ retList.realloc(cAllIds);
- for ( sal_Int32 i=0; i < nSecondCount; i++ )
+ for (sal_Int32 i = 0; i < cAllIds; i++)
{
- bool bDuplicateEntry = false;
- for ( sal_Int32 j=0; j < nFirstCount; j++ )
+ //The inner sequence contains extensions with the same identifier from
+ //all the different repositories, that is user, share, bundled.
+ const uno::Sequence< uno::Reference< deployment::XPackage > > &
+ seqExtension = allExt[i];
+ sal_Int32 cExt = seqExtension.getLength();
+ OSL_ASSERT(cExt == 3);
+ for (sal_Int32 j = 0; j < cExt; j++)
{
- if ( aFirst[ j ][0] == aSecond[ i ][0] )
+ //ToDo according to the old code the first found extenions is used
+ //even if another one with the same id has a better version.
+ uno::Reference< deployment::XPackage > const & xExtension( seqExtension[j] );
+ if (xExtension.is())
{
- bDuplicateEntry = true;
+ rtl::OUString aNewEntry[2];
+ aNewEntry[0] = dp_misc::getIdentifier(xExtension);
+ aNewEntry[1] = xExtension->getVersion();
+ retList[i] = ::uno::Sequence< rtl::OUString >( aNewEntry, 2 );
break;
}
}
- if ( !bDuplicateEntry )
- {
- nIndex += 1;
- aFirst.realloc( nIndex );
- aFirst[ nIndex - 1 ] = aSecond[ i ];
- }
}
- return aFirst;
+ return retList;
}
+
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
diff --git a/desktop/source/deployment/manager/dp_manager.cxx b/desktop/source/deployment/manager/dp_manager.cxx
index 3f13cb021aae..44bc4d469f2f 100644
--- a/desktop/source/deployment/manager/dp_manager.cxx
+++ b/desktop/source/deployment/manager/dp_manager.cxx
@@ -39,6 +39,7 @@
#include "rtl/bootstrap.hxx"
#include "osl/diagnose.h"
#include "osl/file.hxx"
+#include "osl/security.hxx"
#include "cppuhelper/weakref.hxx"
#include "cppuhelper/exc_hlp.hxx"
#include "cppuhelper/implbase1.hxx"
@@ -57,11 +58,18 @@
#include "com/sun/star/ucb/NameClash.hpp"
#include "com/sun/star/deployment/VersionException.hpp"
#include "com/sun/star/deployment/InstallException.hpp"
+#include "com/sun/star/deployment/Prerequisites.hpp"
#include "com/sun/star/task/XInteractionApprove.hpp"
#include "com/sun/star/ucb/UnsupportedCommandException.hpp"
#include "boost/bind.hpp"
-#include <vector>
+#include "tools/urlobj.hxx"
+#include "osl/file.hxx"
+#include <vector>
+#include <list>
+#include "dp_descriptioninfoset.hxx"
+#include "dp_commandenvironments.hxx"
+#include "dp_properties.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
@@ -91,6 +99,28 @@ struct MatchTempDir
}
};
+
+namespace {
+OUString getExtensionFolder(OUString const & parentFolder,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+{
+ ::ucbhelper::Content tempFolder(
+ parentFolder, xCmdEnv );
+ Reference<sdbc::XResultSet> xResultSet(
+ tempFolder.createCursor(
+ Sequence<OUString>( &StrTitle::get(), 1 ),
+ ::ucbhelper::INCLUDE_FOLDERS_ONLY ) );
+
+ OUString title;
+ while (xResultSet->next())
+ {
+ title = Reference<sdbc::XRow>(
+ xResultSet, UNO_QUERY_THROW )->getString(1 /* Title */ ) ;
+ break;
+ }
+ return title;
+}
+}
//______________________________________________________________________________
void PackageManagerImpl::initActivationLayer(
Reference<XCommandEnvironment> const & xCmdEnv )
@@ -135,7 +165,8 @@ void PackageManagerImpl::initActivationLayer(
{
ActivePackages::Data dbData;
insertToActivationLayer(
- mediaType, sourceContent, title, &dbData );
+ Sequence<css::beans::NamedValue>(),mediaType, sourceContent,
+ title, &dbData );
insertToActivationLayerDB( title, dbData );
//TODO #i73136#: insertToActivationLayerDB needs id not
@@ -151,12 +182,24 @@ void PackageManagerImpl::initActivationLayer(
// user|share:
OSL_ASSERT( m_activePackages.getLength() > 0 );
m_activePackages_expanded = expandUnoRcUrl( m_activePackages );
- create_folder( 0, m_activePackages_expanded, xCmdEnv, !m_readOnly );
+ m_registrationData_expanded = expandUnoRcUrl(m_registrationData);
+ if (!m_readOnly)
+ create_folder( 0, m_activePackages_expanded, xCmdEnv, true);
+
+ OUString dbName;
+ if (m_context.equals(OUSTR("user")))
+ dbName = m_activePackages_expanded + OUSTR(".db");
+ else
+ {
+ //Create the extension data base in the user installation
+ create_folder( 0, m_registrationData_expanded, xCmdEnv, true);
+ dbName = m_registrationData_expanded + OUSTR("/extensions.db");
+ }
+ //The data base can always be written because it it always in the user installation
m_activePackagesDB.reset(
- new ActivePackages(
- m_activePackages_expanded + OUSTR(".db"), m_readOnly ) );
+ new ActivePackages( dbName, false ) );
- if (! m_readOnly)
+ if (! m_readOnly && ! m_context.equals(OUSTR("bundled")))
{
// clean up activation layer, scan for zombie temp dirs:
ActivePackages::Entries id2temp( m_activePackagesDB->getEntries() );
@@ -169,17 +212,37 @@ void PackageManagerImpl::initActivationLayer(
::ucbhelper::INCLUDE_DOCUMENTS_ONLY ) );
// get all temp directories:
::std::vector<OUString> tempEntries;
- while (xResultSet->next()) {
+ ::std::vector<OUString> removedEntries;
+ while (xResultSet->next())
+ {
OUString title(
Reference<sdbc::XRow>(
xResultSet, UNO_QUERY_THROW )->getString(
1 /* Title */ ) );
- tempEntries.push_back( ::rtl::Uri::encode(
- title, rtl_UriCharClassPchar,
- rtl_UriEncodeIgnoreEscapes,
- RTL_TEXTENCODING_UTF8 ) );
+
+ const char extensionRemoved[] = "removed";
+ if (title.endsWithAsciiL(
+ extensionRemoved, sizeof(extensionRemoved) - 1))
+ {
+ //save the file name withouth the "removed" part
+ sal_Int32 index = title.lastIndexOfAsciiL(
+ extensionRemoved, sizeof(extensionRemoved) - 1);
+ OUString remFile = title.copy(0, index);
+ removedEntries.push_back(::rtl::Uri::encode(
+ remFile, rtl_UriCharClassPchar,
+ rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8 ) );
+ }
+ else
+ {
+ tempEntries.push_back( ::rtl::Uri::encode(
+ title, rtl_UriCharClassPchar,
+ rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8 ) );
+ }
}
+ bool bShared = m_context.equals(OUSTR("shared")) ? true : false;
for ( ::std::size_t pos = 0; pos < tempEntries.size(); ++pos )
{
OUString const & tempEntry = tempEntries[ pos ];
@@ -187,14 +250,52 @@ void PackageManagerImpl::initActivationLayer(
if (::std::find_if( id2temp.begin(), id2temp.end(), match ) ==
id2temp.end())
{
+ const OUString url(
+ makeURL(m_activePackages_expanded, tempEntry ) );
+
+ //In case of shared extensions, new entries are regarded as
+ //added extensions if there is no xxx.tmpremoved file.
+ if (bShared)
+ {
+ if (::std::find(removedEntries.begin(), removedEntries.end(), tempEntry) ==
+ removedEntries.end())
+ {
+ continue;
+ }
+ else
+ {
+ //Make sure only the same user removes the extension, who
+ //previously unregistered it. This is avoid races if multiple instances
+ //of OOo are running which all have write access to the shared installation.
+ //For example, a user removes the extension, but keeps OOo
+ //running. Parts of the extension may still be loaded and used by OOo.
+ //Therefore the extension is only deleted the next time the extension manager is
+ //run after restarting OOo. While OOo is still running, another user starts OOo
+ //which would deleted the extension files. If the same user starts another
+ //instance of OOo then the lock file will prevent this.
+ OUString aUserName;
+ ::osl::Security aSecurity;
+ aSecurity.getUserName( aUserName );
+ ucbhelper::Content remFileContent(
+ url + OUSTR("removed"), Reference<XCommandEnvironment>());
+ ::rtl::ByteSequence data = dp_misc::readFile(remFileContent);
+ ::rtl::OString osData(reinterpret_cast<const sal_Char*>(data.getConstArray()),
+ data.getLength());
+ OUString sData = ::rtl::OStringToOUString(
+ osData, RTL_TEXTENCODING_UTF8);
+ if (!sData.equals(aUserName))
+ continue;
+ }
+ }
// temp entry not needed anymore:
- const OUString url( makeURL( m_activePackages_expanded,
- tempEntry ) );
erase_path( url + OUSTR("_"),
Reference<XCommandEnvironment>(),
false /* no throw: ignore errors */ );
erase_path( url, Reference<XCommandEnvironment>(),
false /* no throw: ignore errors */ );
+ //delete the xxx.tmpremoved file
+ erase_path(url + OUSTR("removed"),
+ Reference<XCommandEnvironment>(), false);
}
}
}
@@ -206,9 +307,9 @@ void PackageManagerImpl::initRegistryBackends()
{
if (m_registryCache.getLength() > 0)
create_folder( 0, m_registryCache,
- Reference<XCommandEnvironment>(), !m_readOnly );
+ Reference<XCommandEnvironment>(), false);
m_xRegistry.set( ::dp_registry::create(
- m_context, m_registryCache, m_readOnly,
+ m_context, m_registryCache, false,
m_xComponentContext ) );
}
@@ -223,12 +324,14 @@ Reference<deployment::XPackageManager> PackageManagerImpl::create(
OUString packages, logFile, stampURL;
if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("user") )) {
- that->m_activePackages = OUSTR("vnd.sun.star.expand:$UNO_"
- "USER_PACKAGES_CACHE/uno_packages");
- that->m_registryCache = OUSTR("vnd.sun.star.expand:$UNO_"
- "USER_PACKAGES_CACHE/registry");
- logFile = OUSTR("vnd.sun.star.expand:$UNO_"
- "USER_PACKAGES_CACHE/log.txt");
+ that->m_activePackages = OUSTR(
+ "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages");
+ that->m_registrationData = OUSTR(
+ "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE");
+ that->m_registryCache = OUSTR(
+ "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/registry");
+ logFile = OUSTR(
+ "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/log.txt");
//We use the extension .sys for the file because on Windows Vista a sys
//(as well as exe and dll) file
//will not be written in the VirtualStore. For example if the process has no
@@ -240,25 +343,42 @@ Reference<deployment::XPackageManager> PackageManagerImpl::create(
//using virtualization it appears that he/she can. Then a shared extension can
//be installed but is only visible for the user (because the extension is in
//the virtual store).
- stampURL = OUSTR("vnd.sun.star.expand:$UNO_"
- "USER_PACKAGES_CACHE/stamp.sys");
+ stampURL = OUSTR(
+ "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/stamp.sys");
}
else if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("shared") )) {
- that->m_activePackages = OUSTR("vnd.sun.star.expand:$UNO_"
- "SHARED_PACKAGES_CACHE/uno_packages");
- that->m_registryCache = OUSTR("vnd.sun.star.expand:$UNO_"
- "SHARED_PACKAGES_CACHE/registry");
-// The current logging implementation does not work for shared, because it requires
-// write access to the logfile. When two users run OOo at the same time on the same machine
-// then the
-// second will fail because it does not get write access. One cannot write into the
-// user's home, because then people may complain that when installing shared extension
-// stuff is written in their home.
-// logFile = OUSTR("vnd.sun.star.expand:$UNO_"
-// "SHARED_PACKAGES_CACHE/log.txt");
- //See description for stampURL for user packages.
- stampURL = OUSTR("vnd.sun.star.expand:$UNO_"
- "SHARED_PACKAGES_CACHE/stamp.sys");
+ that->m_activePackages = OUSTR(
+ "vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages");
+ that->m_registrationData = OUSTR(
+ "vnd.sun.star.expand:$SHARED_EXTENSIONS_USER");
+ that->m_registryCache = OUSTR(
+ "vnd.sun.star.expand:$SHARED_EXTENSIONS_USER/registry");
+ logFile = OUSTR(
+ "vnd.sun.star.expand:$SHARED_EXTENSIONS_USER/log.txt");
+ stampURL = OUSTR(
+ "vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/stamp.sys");
+ }
+ else if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bundled") )) {
+ that->m_activePackages = OUSTR(
+ "vnd.sun.star.expand:$BUNDLED_EXTENSIONS");
+ that->m_registrationData = OUSTR(
+ "vnd.sun.star.expand:$BUNDLED_EXTENSIONS_USER");
+ that->m_registryCache = OUSTR(
+ "vnd.sun.star.expand:$BUNDLED_EXTENSIONS_USER/registry");
+ logFile = OUSTR(
+ "vnd.sun.star.expand:$BUNDLED_EXTENSIONS_USER/log.txt");
+ //No stamp file. We assume that bundled is always readonly. It must not be
+ //modified from ExtensionManager but only by the installer
+ }
+ else if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("tmp") )) {
+ that->m_activePackages = OUSTR(
+ "vnd.sun.star.expand:$TMP_EXTENSIONS/extensions");
+ that->m_registrationData = OUSTR(
+ "vnd.sun.star.expand:$TMP_EXTENSIONS");
+ that->m_registryCache = OUSTR(
+ "vnd.sun.star.expand:$TMP_EXTENSIONS/registry");
+ stampURL = OUSTR(
+ "vnd.sun.star.expand:$TMP_EXTENSIONS/stamp.sys");
}
else if (! context.matchAsciiL(
RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.tdoc:/") )) {
@@ -270,29 +390,15 @@ Reference<deployment::XPackageManager> PackageManagerImpl::create(
Reference<XCommandEnvironment> xCmdEnv;
try {
- bool renewal = false;
-
+ //There is no stampURL for the bundled folder
if (stampURL.getLength() > 0)
{
- // currently no automatic renewal possible, because quickstarter
- // already hinders from deleting registry directory...
-
#define CURRENT_STAMP "1"
-// renewal = true;
-// {
-// ::ucbhelper::Content ucbStamp;
-// if (create_ucb_content(
-// &ucbStamp, stampURL, xCmdEnv, false /* no throw */ ))
-// {
-// OUString line;
-// renewal = !readLine( &line, OUSTR(CURRENT_STAMP), ucbStamp,
-// RTL_TEXTENCODING_ASCII_US );
-// }
-// }
-
try {
+ //The osl file API does not allow to find out if one can write
+ //into a folder. Therefore we try to write a file. Then we delete
+ //it, so that it does not hinder uninstallation of OOo
// probe writing:
- erase_path( stampURL, xCmdEnv );
::ucbhelper::Content ucbStamp( stampURL, xCmdEnv );
::rtl::OString stamp(
RTL_CONSTASCII_STRINGPARAM(CURRENT_STAMP) );
@@ -302,8 +408,15 @@ Reference<deployment::XPackageManager> PackageManagerImpl::create(
reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
stamp.getLength() ) ) );
ucbStamp.writeStream( xData, true /* replace existing */ );
+ that->m_readOnly = false;
+ erase_path( stampURL, xCmdEnv );
}
catch (RuntimeException &) {
+ try {
+ erase_path( stampURL, xCmdEnv );
+ } catch (...)
+ {
+ }
throw;
}
catch (Exception &) {
@@ -324,12 +437,6 @@ Reference<deployment::XPackageManager> PackageManagerImpl::create(
xCmdEnv.set( new CmdEnvWrapperImpl( xCmdEnv, that->m_xLogFile ) );
}
- OSL_ENSURE( !that->m_readOnly || !renewal,
- "### ought to reinstall all packages, but cannot write!" );
- if (!that->m_readOnly && renewal) // try to reinstall
- that->reinstallDeployedPackages(
- Reference<task::XAbortChannel>(), xCmdEnv );
-
that->initRegistryBackends();
that->initActivationLayer( xCmdEnv );
@@ -484,7 +591,7 @@ OUString PackageManagerImpl::detectMediaType(
try {
Reference<deployment::XPackage> xPackage(
m_xRegistry->bindPackage(
- url, OUString(), ucbContent.getCommandEnvironment() ) );
+ url, OUString(), false, OUString(), ucbContent.getCommandEnvironment() ) );
const Reference<deployment::XPackageTypeInfo> xPackageType(
xPackage->getPackageType() );
OSL_ASSERT( xPackageType.is() );
@@ -504,6 +611,7 @@ OUString PackageManagerImpl::detectMediaType(
//______________________________________________________________________________
OUString PackageManagerImpl::insertToActivationLayer(
+ Sequence<beans::NamedValue> const & properties,
OUString const & mediaType, ::ucbhelper::Content const & sourceContent_,
OUString const & title, ActivePackages::Data * dbData )
{
@@ -564,10 +672,22 @@ OUString PackageManagerImpl::insertToActivationLayer(
title, NameClash::OVERWRITE ))
throw RuntimeException( OUSTR("UCB transferContent() failed!"), 0 );
+
// write to DB:
+ //bundled extensions should only be added by the synchronizeAddedExtensions
+ //functions. Moreover, there is no "temporary folder" for bundled extensions.
+ OSL_ASSERT(!m_context.equals(OUSTR("bundled")));
+ OUString sFolderUrl = makeURLAppendSysPathSegment(destFolderContent.getURL(), title);
+ DescriptionInfoset info =
+ dp_misc::getDescriptionInfoset(sFolderUrl);
dbData->temporaryName = tempEntry;
dbData->fileName = title;
dbData->mediaType = mediaType;
+ dbData->version = info.getVersion();
+
+ //No write the properties file next to the extension
+ ExtensionProperties props(sFolderUrl, properties, xCmdEnv);
+ props.write();
return destFolder;
}
@@ -575,6 +695,8 @@ OUString PackageManagerImpl::insertToActivationLayer(
void PackageManagerImpl::insertToActivationLayerDB(
OUString const & id, ActivePackages::Data const & dbData )
{
+ //access to the database must be guarded. See removePackage
+ const ::osl::MutexGuard guard( getMutex() );
m_activePackagesDB->put( id, dbData );
}
@@ -582,81 +704,40 @@ void PackageManagerImpl::insertToActivationLayerDB(
/* The function returns true if there is an extension with the same id already
installed which needs to be uninstalled, before the new extension can be installed.
*/
-bool PackageManagerImpl::checkUpdate(
- Reference<deployment::XPackage> const & package,
- Reference<XCommandEnvironment> const & origCmdEnv,
- Reference<XCommandEnvironment> const & wrappedCmdEnv )
+bool PackageManagerImpl::isInstalled(
+ Reference<deployment::XPackage> const & package)
{
OUString id(dp_misc::getIdentifier(package));
OUString fn(package->getName());
- bool removeExisting = false;
+ bool bInstalled = false;
if (m_activePackagesDB->has( id, fn ))
{
- // package already deployed, interact --force:
- Any request(
- (deployment::VersionException(
- getResourceString( RID_STR_PACKAGE_ALREADY_ADDED ) + id,
- static_cast<OWeakObject *>(this), package,
- getDeployedPackage_( id, fn, origCmdEnv ) ) ) );
- bool replace = false, abort = false;
- if (! interactContinuation(
- request, task::XInteractionApprove::static_type(),
- wrappedCmdEnv, &replace, &abort )) {
- OSL_ASSERT( !replace && !abort );
- throw deployment::DeploymentException(
- getResourceString(RID_STR_ERROR_WHILE_ADDING) + id,
- static_cast<OWeakObject *>(this), request );
- }
- if (abort || !replace)
- throw CommandFailedException(
- getResourceString(RID_STR_PACKAGE_ALREADY_ADDED) + id,
- static_cast<OWeakObject *>(this), request );
-
- // remove clashing package before registering new version:
- removeExisting = true;
+ bInstalled = true;
}
- return removeExisting;
+ return bInstalled;
}
+
+// XPackageManager
//______________________________________________________________________________
-// Notify the user when a new extension is to be installed. This is only the case
-//when unopkg gui extension1 is used (used by system integration (double click on .oxt
-// file etc.)). In case there is already this extension then the function returns
-//true.
-//ToDo: Function always returns true or throws an exception
-bool PackageManagerImpl::checkInstall(
- Reference<deployment::XPackage> const & package,
- Reference<XCommandEnvironment> const & cmdEnv)
+Reference<deployment::XPackage> PackageManagerImpl::importExtension(
+ Reference<deployment::XPackage> const & extension,
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<XCommandEnvironment> const & xCmdEnv_ )
+ throw (deployment::DeploymentException, CommandFailedException,
+ CommandAbortedException, lang::IllegalArgumentException,
+ RuntimeException)
{
- OUString id(dp_misc::getIdentifier(package));
- if ( ! m_activePackagesDB->has( id, package->getName() ))
- {
- Any request(
- deployment::InstallException(
- OUSTR("Extension ") + id + OUSTR(" is about to be installed."),
- static_cast<OWeakObject *>(this), package));
- bool approve = false, abort = false;
- if (! interactContinuation(
- request, task::XInteractionApprove::static_type(),
- cmdEnv, &approve, &abort ))
- {
- OSL_ASSERT( !approve && !abort );
- throw deployment::DeploymentException(
- getResourceString(RID_STR_ERROR_WHILE_ADDING) + id,
- static_cast<OWeakObject *>(this), request );
- }
- if (abort || !approve)
- throw CommandFailedException(
- getResourceString(RID_STR_ERROR_WHILE_ADDING) + id,
- static_cast<OWeakObject *>(this), request );
-
- }
- return true;
+ return addPackage(extension->getURL(), Sequence<beans::NamedValue>(),
+ OUString(), xAbortChannel, xCmdEnv_);
}
-// XPackageManager
-//______________________________________________________________________________
+/* The function adds an extension but does not register it!!!
+ It may not do any user interaction. This is done in XExtensionManager::addExtension
+*/
Reference<deployment::XPackage> PackageManagerImpl::addPackage(
- OUString const & url, OUString const & mediaType_,
+ OUString const & url,
+ css::uno::Sequence<css::beans::NamedValue> const & properties,
+ OUString const & mediaType_,
Reference<task::XAbortChannel> const & xAbortChannel,
Reference<XCommandEnvironment> const & xCmdEnv_ )
throw (deployment::DeploymentException, CommandFailedException,
@@ -729,84 +810,34 @@ Reference<deployment::XPackage> PackageManagerImpl::addPackage(
}
ActivePackages::Data dbData;
destFolder = insertToActivationLayer(
- mediaType, sourceContent, title, &dbData );
+ properties, mediaType, sourceContent, title, &dbData );
// bind activation package:
- //Because every extension will be unpacked in a folder, which was created with a unique name
- //we will always have two different XPackage objects, even if the second extension is the same.
+ //Because every shared/user extension will be unpacked in a folder,
+ //which was created with a unique name we will always have two different
+ //XPackage objects, even if the second extension is the same.
//Therefore bindPackage does not need a guard here.
xPackage = m_xRegistry->bindPackage(
- makeURL( destFolder, title_enc ), mediaType, xCmdEnv );
+ makeURL( destFolder, title_enc ), mediaType, false, OUString(), xCmdEnv );
OSL_ASSERT( xPackage.is() );
if (xPackage.is())
{
bool install = false;
- OUString id;
-
try
{
- id = dp_misc::getIdentifier( xPackage );
- //checkInstall throws an exception if the user denies the installation
- checkInstall(xPackage, xCmdEnv);
- //checkUpdate throws an exception if the user cancels the interaction.
- //For example, he may be asked if he wants to replace the older version
- //with the new version.
- //checkUpdates must be called before checkPrerequisites
- bool bAlreadyInstalled = checkUpdate(
- xPackage, xCmdEnv_, xCmdEnv );
-
- if (xPackage->checkPrerequisites(xAbortChannel, xCmdEnv, bAlreadyInstalled, m_context))
+ OUString const id = dp_misc::getIdentifier( xPackage );
+
+ ::osl::MutexGuard g(m_addMutex);
+ if (isInstalled(xPackage))
{
- //This guard is used to prevent that an extension is installed twice. Do not use it in other
- //functions.
- //Imagine addPackage is called two times by different threads for the same extension quickly
- //after each other.
- //The second call would calculate "bAlreadyInstalled = false" if the first thread has not yet reached
- //insertToActivationLayerDB.
- ::osl::MutexGuard g(m_addMutex);
-
- //Holds the database data of the old extension, in case we need to roll back.
- ActivePackages::Data oldDbData;
- if (bAlreadyInstalled)
- {
- // Remove extension which is already installed. It is not removed from disk, only
- // the different contents are being unregisterd. We remember the databas information
- // in case we need to roll back this operation.
- // When the user canceled the operation (CommandAbortedException) than the package is still
- // fully functional.
- // Do not guard the complete function with the getMutex
- removePackage_(id, xPackage->getName(), xAbortChannel,
- xCmdEnv, & oldDbData);
- }
- install = true;
- const ::osl::MutexGuard guard( getMutex() );
- try
- {
- //throws CommandAbortedException if the user cancelled the installation.
- xPackage->registerPackage(xAbortChannel, xCmdEnv);
- }
- catch(CommandAbortedException & )
- { //ToDo: Interaction so that the gui can display an appropriate string.
- //See also removePackage_
- //User aborted installation, restore the previous situation.
- //Use a private AbortChannel so the user cannot interrupt.
- xPackage->revokePackage(new AbortChannel(), xCmdEnv);
- if (bAlreadyInstalled)
- {
- OUString instFolder = makeURL( m_activePackages, oldDbData.temporaryName)
- + OUSTR("_");
- Reference<deployment::XPackage> xOldPgk = m_xRegistry->bindPackage(
- makeURL( instFolder, oldDbData.fileName ), oldDbData.mediaType, xCmdEnv );
- xOldPgk->registerPackage(new AbortChannel(), xCmdEnv);
- insertToActivationLayerDB(dp_misc::getIdentifier( xOldPgk ), oldDbData);
- }
- throw;
- }
- //access to the database must be guarded. See removePackage_
- insertToActivationLayerDB(id, dbData);
+ //Do not guard the complete function with the getMutex
+ removePackage(id, xPackage->getName(), xAbortChannel,
+ xCmdEnv);
}
+ install = true;
+ insertToActivationLayerDB(id, dbData);
}
catch (...)
{
@@ -817,6 +848,7 @@ Reference<deployment::XPackage> PackageManagerImpl::addPackage(
{
deletePackageFromCache( xPackage, destFolder );
}
+ //ToDo: We should notify only if the extension is registered
fireModified();
}
return xPackage;
@@ -861,57 +893,15 @@ void PackageManagerImpl::deletePackageFromCache(
}
//______________________________________________________________________________
-void PackageManagerImpl::removePackage_(
- OUString const & id, OUString const & fileName,
- Reference<task::XAbortChannel> const & xAbortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv,
- ActivePackages::Data * out_dbData)
-{
- Reference<deployment::XPackage> xPackage;
- {
- try {
- const ::osl::MutexGuard guard(getMutex());
- xPackage = getDeployedPackage_(id, fileName, xCmdEnv );
- m_activePackagesDB->get(out_dbData, id, fileName);
- beans::Optional< beans::Ambiguous<sal_Bool> > option(
- xPackage->isRegistered( Reference<task::XAbortChannel>(),
- xCmdEnv ) );
- if (!option.IsPresent || option.Value.IsAmbiguous || option.Value.Value)
- xPackage->revokePackage( xAbortChannel, xCmdEnv );
- m_activePackagesDB->erase( id, fileName ); // to be removed upon next start
- }
- catch (CommandAbortedException &)
- {
- //ToDo: interaction, so that gui can show an appropriate string
- //reregister the package
- //Create our own XAbortChannel, so the user cannot interrupt the registration.
- xPackage->registerPackage(new AbortChannel(), xCmdEnv);
- throw;
- }
- }
- try_dispose( xPackage );
-}
-
-//______________________________________________________________________________
void PackageManagerImpl::removePackage(
OUString const & id, ::rtl::OUString const & fileName,
- Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<task::XAbortChannel> const & /*xAbortChannel*/,
Reference<XCommandEnvironment> const & xCmdEnv_ )
throw (deployment::DeploymentException, CommandFailedException,
CommandAbortedException, lang::IllegalArgumentException,
RuntimeException)
{
check();
- if (m_readOnly)
- {
- OUString message;
- if (m_context == OUSTR("shared"))
- message = OUSTR("You need write permissions in order to remove a shared extension!");
- else
- message = OUSTR("You need write permissions in order to remove this extension!");
- throw deployment::DeploymentException(
- message, static_cast<OWeakObject *>(this), Any() );
- }
Reference<XCommandEnvironment> xCmdEnv;
if (m_xLogFile.is())
@@ -920,7 +910,48 @@ void PackageManagerImpl::removePackage(
xCmdEnv.set( xCmdEnv_ );
try {
- removePackage_( id, fileName, xAbortChannel, xCmdEnv, NULL);
+ Reference<deployment::XPackage> xPackage;
+ {
+ const ::osl::MutexGuard guard(getMutex());
+ //Check if this extension exist and throw an IllegalArgumentException
+ //if it does not
+ //If the files of the extension are already removed, or there is a
+ //different extension at the same place, for example after updating the
+ //extension, then the returned object is that which uses the database data.
+ xPackage = getDeployedPackage_(id, fileName, xCmdEnv );
+
+
+ //Because the extension is only removed the next time the extension
+ //manager runs after restarting OOo, we need to indicate that a
+ //shared extension was "deleted". When a user starts OOo, then it
+ //will check if something changed in the shared repository. Based on
+ //the flag file it will then recognize, that the extension was
+ //deleted and can then update the extnesion database of the shared
+ //extensions in the user installation.
+ if ( xPackage.is() && !m_readOnly && !xPackage->isRemoved() && m_context.equals(OUSTR("shared")))
+ {
+ ActivePackages::Data val;
+ m_activePackagesDB->get( & val, id, fileName);
+ OSL_ASSERT(val.temporaryName.getLength());
+ OUString url(makeURL(m_activePackages_expanded,
+ val.temporaryName + OUSTR("removed")));
+ ::ucbhelper::Content contentRemoved(url, xCmdEnv );
+ OUString aUserName;
+ ::osl::Security aSecurity;
+ aSecurity.getUserName( aUserName );
+
+ ::rtl::OString stamp = ::rtl::OUStringToOString(aUserName, RTL_TEXTENCODING_UTF8);
+ Reference<css::io::XInputStream> xData(
+ ::xmlscript::createInputStream(
+ ::rtl::ByteSequence(
+ reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
+ stamp.getLength() ) ) );
+ contentRemoved.writeStream( xData, true /* replace existing */ );
+ }
+ m_activePackagesDB->erase( id, fileName ); // to be removed upon next start
+ }
+ try_dispose( xPackage );
+
fireModified();
}
catch (RuntimeException &) {
@@ -955,10 +986,16 @@ OUString PackageManagerImpl::getDeployPath( ActivePackages::Data const & data )
{
::rtl::OUStringBuffer buf;
buf.append( data.temporaryName );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("_/") );
- buf.append( ::rtl::Uri::encode( data.fileName, rtl_UriCharClassPchar,
+ //The bundled extensions are not contained in an additional folder
+ //with a unique name. data.temporaryName contains already the
+ //UTF8 encoded folder name. See PackageManagerImpl::synchronize
+ if (!m_context.equals(OUSTR("bundled")))
+ {
+ buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("_/") );
+ buf.append( ::rtl::Uri::encode( data.fileName, rtl_UriCharClassPchar,
rtl_UriEncodeIgnoreEscapes,
RTL_TEXTENCODING_UTF8 ) );
+ }
return makeURL( m_activePackages, buf.makeStringAndClear() );
}
@@ -997,8 +1034,22 @@ Reference<deployment::XPackage> PackageManagerImpl::getDeployedPackage_(
static_cast<sal_Int16>(-1) );
}
}
- return m_xRegistry->bindPackage(
- getDeployPath( data ), data.mediaType, xCmdEnv );
+ Reference<deployment::XPackage> xExtension;
+ try
+ {
+ //Ignore extensions where XPackage::checkPrerequisites failed.
+ //They must not be usable for this user.
+ if (data.failedPrerequisites.equals(OUSTR("0")))
+ {
+ xExtension = m_xRegistry->bindPackage(
+ getDeployPath( data ), data.mediaType, false, OUString(), xCmdEnv );
+ }
+ }
+ catch (deployment::InvalidRemovedParameterException& e)
+ {
+ xExtension = e.Extension;
+ }
+ return xExtension;
}
//______________________________________________________________________________
@@ -1012,6 +1063,8 @@ PackageManagerImpl::getDeployedPackages_(
ActivePackages::Entries::const_iterator const iEnd( id2temp.end() );
for ( ; iPos != iEnd; ++iPos )
{
+ if (! iPos->second.failedPrerequisites.equals(OUSTR("0")))
+ continue;
try {
packages.push_back(
getDeployedPackage_(
@@ -1124,25 +1177,18 @@ PackageManagerImpl::getDeployedPackages(
}
//______________________________________________________________________________
+
+
+//ToDo: the function must not call registerPackage, do this in
+//XExtensionManager.reinstallDeployedExtensions
void PackageManagerImpl::reinstallDeployedPackages(
- Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<task::XAbortChannel> const & /*xAbortChannel*/,
Reference<XCommandEnvironment> const & xCmdEnv_ )
throw (deployment::DeploymentException,
CommandFailedException, CommandAbortedException,
lang::IllegalArgumentException, RuntimeException)
{
check();
- if (m_readOnly)
- {
- OUString message;
- if (m_context == OUSTR("shared"))
- message = OUSTR("You need write permissions in order to install shared extensions!");
- else
- message = OUSTR("You need write permissions in order to install extensions!");
- throw deployment::DeploymentException(
- message, static_cast<OWeakObject *>(this), Any() );
- }
-
if (office_is_running())
throw RuntimeException(
OUSTR("You must close any running Office process before "
@@ -1167,12 +1213,7 @@ void PackageManagerImpl::reinstallDeployedPackages(
if (xUpdatable.is())
xUpdatable->update();
- // reregister all:
- const ::osl::MutexGuard guard( getMutex() );
- const Sequence< Reference<deployment::XPackage> > packages(
- getDeployedPackages_( xCmdEnv ) );
- for ( sal_Int32 pos = 0; pos < packages.getLength(); ++pos )
- packages[ pos ]->registerPackage( xAbortChannel, xCmdEnv );
+ //registering is done by the ExtensionManager service.
}
catch (RuntimeException &) {
throw;
@@ -1205,6 +1246,362 @@ void PackageManagerImpl::reinstallDeployedPackages(
{
return m_readOnly;
}
+bool PackageManagerImpl::synchronizeRemovedExtensions(
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<css::ucb::XCommandEnvironment> const & xCmdEnv)
+{
+
+ //find all which are in the extension data base but which
+ //are removed already.
+ OSL_ASSERT(!m_context.equals(OUSTR("user")));
+ bool bModified = false;
+ ActivePackages::Entries id2temp( m_activePackagesDB->getEntries() );
+
+ typedef ActivePackages::Entries::const_iterator ITActive;
+ bool bShared = m_context.equals(OUSTR("shared"));
+
+ for (ITActive i = id2temp.begin(); i != id2temp.end(); i++)
+ {
+ try
+ {
+ //Get the URL to the extensions folder, first make the url for the
+ //shared repository including the temporary name
+ OUString url = makeURL(m_activePackages, i->second.temporaryName);
+ if (bShared)
+ url = makeURLAppendSysPathSegment( url + OUSTR("_"), i->second.fileName);
+
+ bool bRemoved = false;
+ //Check if the URL to the extension is still the same
+ ::ucbhelper::Content contentExtension;
+
+ if (!create_ucb_content(
+ &contentExtension, url,
+ Reference<XCommandEnvironment>(), false))
+ {
+ bRemoved = true;
+ }
+
+ //The folder is in the extension database, but it can still be deleted.
+ //look for the xxx.tmpremoved file
+ //There can also be the case that a different extension was installed
+ //in a "temp" folder with name that is already used.
+ if (!bRemoved && bShared)
+ {
+ ::ucbhelper::Content contentRemoved;
+
+ if (create_ucb_content(
+ &contentRemoved,
+ m_activePackages_expanded + OUSTR("/") +
+ i->second.temporaryName + OUSTR("removed"),
+ Reference<XCommandEnvironment>(), false))
+ {
+ bRemoved = true;
+ }
+ }
+
+ if (!bRemoved)
+ {
+ //There may be another extensions at the same place
+ dp_misc::DescriptionInfoset infoset =
+ dp_misc::getDescriptionInfoset(url);
+ OSL_ENSURE(infoset.hasDescription(),
+ "Extension Manager: bundled and shared extensions "
+ "must have an identifer and a version");
+ if (infoset.hasDescription() &&
+ infoset.getIdentifier() &&
+ (! i->first.equals(*(infoset.getIdentifier()))
+ || ! i->second.version.equals(infoset.getVersion())))
+ {
+ bRemoved = true;
+ }
+
+ }
+ if (bRemoved)
+ {
+ Reference<deployment::XPackage> xPackage = m_xRegistry->bindPackage(
+ url, i->second.mediaType, true, i->first, xCmdEnv );
+ OSL_ASSERT(xPackage.is()); //Even if the files are removed, we must get the object.
+ xPackage->revokePackage(xAbortChannel, xCmdEnv);
+ removePackage(xPackage->getIdentifier().Value, xPackage->getName(),
+ xAbortChannel, xCmdEnv);
+ bModified |= true;
+ }
+ }
+ catch( uno::Exception & )
+ {
+ OSL_ASSERT(0);
+ }
+ }
+ return bModified;
+}
+
+
+bool PackageManagerImpl::synchronizeAddedExtensions(
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<css::ucb::XCommandEnvironment> const & xCmdEnv)
+{
+ bool bModified = false;
+ ActivePackages::Entries id2temp( m_activePackagesDB->getEntries() );
+ //check if the folder exist at all. The shared extension folder
+ //may not exist for a normal user.
+ if (!create_ucb_content(
+ NULL, m_activePackages_expanded, Reference<css::ucb::XCommandEnvironment>(), false))
+ return bModified;
+ ::ucbhelper::Content tempFolder(
+ m_activePackages_expanded, xCmdEnv );
+
+ Reference<sdbc::XResultSet> xResultSet(
+ tempFolder.createCursor(
+ Sequence<OUString>( &StrTitle::get(), 1 ),
+ ::ucbhelper::INCLUDE_FOLDERS_ONLY ) );
+
+ while (xResultSet->next())
+ {
+ try
+ {
+ OUString title(
+ Reference<sdbc::XRow>(
+ xResultSet, UNO_QUERY_THROW )->getString(
+ 1 /* Title */ ) );
+ //The temporary folders of user and shared have an '_' at then end.
+ //But the name in ActivePackages.temporaryName is saved without.
+ OUString title2 = title;
+ bool bNotBundled = !m_context.equals(OUSTR("bundled"));
+ if (bNotBundled)
+ {
+ OSL_ASSERT(title2[title2.getLength() -1] == '_');
+ title2 = title2.copy(0, title2.getLength() -1);
+ }
+ OUString titleEncoded = ::rtl::Uri::encode(
+ title2, rtl_UriCharClassPchar,
+ rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8);
+
+ //It it sufficient to check for the folder name, because when the administor
+ //installed the extension it was already checked if there is one with the
+ //same identifier.
+ const MatchTempDir match(titleEncoded);
+ if (::std::find_if( id2temp.begin(), id2temp.end(), match ) ==
+ id2temp.end())
+ {
+
+ // The folder was not found in the data base, so it must be
+ // an added extension
+ OUString url(m_activePackages_expanded + OUSTR("/") + titleEncoded);
+ OUString sExtFolder;
+ if (bNotBundled) //that is, shared
+ {
+ //Check if the extension was not "deleted" already which is indicated
+ //by a xxx.tmpremoved file
+ ::ucbhelper::Content contentRemoved;
+ if (create_ucb_content(&contentRemoved, url + OUSTR("removed"),
+ Reference<XCommandEnvironment>(), false))
+ continue;
+ sExtFolder = getExtensionFolder(
+ m_activePackages_expanded +
+ OUString(OUSTR("/")) + titleEncoded + OUSTR("_"), xCmdEnv);
+ url = makeURLAppendSysPathSegment(m_activePackages_expanded, title);
+ url = makeURLAppendSysPathSegment(url, sExtFolder);
+ }
+ Reference<deployment::XPackage> xPackage = m_xRegistry->bindPackage(
+ url, OUString(), false, OUString(), xCmdEnv );
+ if (xPackage.is())
+ {
+ //Prepare the database entry
+ ActivePackages::Data dbData;
+
+ dbData.temporaryName = titleEncoded;
+ if (bNotBundled)
+ dbData.fileName = sExtFolder;
+ else
+ dbData.fileName = title;
+ dbData.mediaType = xPackage->getPackageType()->getMediaType();
+ dbData.version = xPackage->getVersion();
+ OSL_ENSURE(dbData.version.getLength() > 0,
+ "Extension Manager: bundled and shared extensions must have "
+ "an identifier and a version");
+
+ OUString id = dp_misc::getIdentifier( xPackage );
+
+ //We provide a special command environment that will prevent
+ //showing a license if simple-licens/@accept-by = "admin"
+ //It will also prevent showing the license for bundled extensions
+ //which is not supported.
+ OSL_ASSERT(!m_context.equals(OUSTR("user")));
+
+ // shall the license be suppressed?
+ DescriptionInfoset info =
+ dp_misc::getDescriptionInfoset(url);
+ ::boost::optional<dp_misc::SimpleLicenseAttributes>
+ attr = info.getSimpleLicenseAttributes();
+ ExtensionProperties props(url,xCmdEnv);
+ bool bNoLicense = false;
+ if (attr && attr->suppressIfRequired && props.isSuppressedLicense())
+ bNoLicense = true;
+
+ Reference<ucb::XCommandEnvironment> licCmdEnv(
+ new LicenseCommandEnv(xCmdEnv->getInteractionHandler(),
+ bNoLicense, m_context));
+ sal_Int32 failedPrereq = xPackage->checkPrerequisites(
+ xAbortChannel, licCmdEnv, false);
+ //Remember that this failed. For example, the user
+ //could have declined the license. Then the next time the
+ //extension folder is investigated we do not want to
+ //try to install the extension again.
+ dbData.failedPrerequisites = OUString::valueOf(failedPrereq);
+ insertToActivationLayerDB(id, dbData);
+ bModified |= true;
+ }
+ }
+ }
+ catch (uno::Exception &)
+ {
+ OSL_ASSERT(0);
+ }
+ }
+ return bModified;
+}
+
+sal_Bool PackageManagerImpl::synchronize(
+ Reference<task::XAbortChannel> const & xAbortChannel,
+ Reference<css::ucb::XCommandEnvironment> const & xCmdEnv)
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::uno::RuntimeException)
+{
+ check();
+ bool bModified = false;
+ if (m_context.equals(OUSTR("user")))
+ return bModified;
+ bModified |=
+ synchronizeRemovedExtensions(xAbortChannel, xCmdEnv);
+ bModified |= synchronizeAddedExtensions(xAbortChannel, xCmdEnv);
+
+ return bModified;
+}
+
+Sequence< Reference<deployment::XPackage> > PackageManagerImpl::getExtensionsWithUnacceptedLicenses(
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+ throw (deployment::DeploymentException, RuntimeException)
+{
+ ::std::vector<Reference<deployment::XPackage> > vec;
+
+ try
+ {
+ const ::osl::MutexGuard guard( getMutex() );
+ // clean up activation layer, scan for zombie temp dirs:
+ ActivePackages::Entries id2temp( m_activePackagesDB->getEntries() );
+
+ ActivePackages::Entries::const_iterator i = id2temp.begin();
+ bool bShared = m_context.equals(OUSTR("shared"));
+
+ for (; i != id2temp.end(); i++ )
+ {
+ //Get the database entry
+ ActivePackages::Data const & dbData = i->second;
+ sal_Int32 failedPrereq = dbData.failedPrerequisites.toInt32();
+ //If the installation failed for other reason then the license then we
+ //ignore it.
+ if (failedPrereq ^= deployment::Prerequisites::LICENSE)
+ continue;
+
+ //Prepare the URL to the extension
+ OUString url = makeURL(m_activePackages, i->second.temporaryName);
+ if (bShared)
+ url = makeURLAppendSysPathSegment( url + OUSTR("_"), i->second.fileName);
+
+ Reference<deployment::XPackage> p = m_xRegistry->bindPackage(
+ url, OUString(), false, OUString(), xCmdEnv );
+
+ if (p.is())
+ vec.push_back(p);
+
+ }
+ return ::comphelper::containerToSequence(vec);
+ }
+ catch (deployment::DeploymentException &)
+ {
+ throw;
+ }
+ catch (RuntimeException&)
+ {
+ throw;
+ }
+ catch (...)
+ {
+ Any exc = ::cppu::getCaughtException();
+ deployment::DeploymentException de(
+ OUSTR("PackageManagerImpl::getExtensionsWithUnacceptedLicenses"),
+ static_cast<OWeakObject*>(this), exc);
+ exc <<= de;
+ ::cppu::throwException(exc);
+ }
+
+ return ::comphelper::containerToSequence(vec);
+}
+
+sal_Int32 PackageManagerImpl::checkPrerequisites(
+ css::uno::Reference<css::deployment::XPackage> const & extension,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException)
+{
+ try
+ {
+ if (!extension.is())
+ return 0;
+ if (!m_context.equals(extension->getRepositoryName()))
+ throw lang::IllegalArgumentException(
+ OUSTR("PackageManagerImpl::checkPrerequisites: extension is not"
+ " from this repository."), 0, 0);
+
+ ActivePackages::Data dbData;
+ OUString id = dp_misc::getIdentifier(extension);
+ if (m_activePackagesDB->get( &dbData, id, OUString()))
+ {
+ //If the license was already displayed, then do not show it again
+ Reference<ucb::XCommandEnvironment> _xCmdEnv = xCmdEnv;
+ sal_Int32 prereq = dbData.failedPrerequisites.toInt32();
+ if ( !(prereq & deployment::Prerequisites::LICENSE))
+ _xCmdEnv = new NoLicenseCommandEnv(xCmdEnv->getInteractionHandler());
+
+ sal_Int32 failedPrereq = extension->checkPrerequisites(
+ xAbortChannel, _xCmdEnv, false);
+ dbData.failedPrerequisites = OUString::valueOf(failedPrereq);
+ insertToActivationLayerDB(id, dbData);
+ }
+ else
+ {
+ throw lang::IllegalArgumentException(
+ OUSTR("PackageManagerImpl::checkPrerequisites: unknown extension"),
+ 0, 0);
+
+ }
+ return 0;
+ }
+ catch (deployment::DeploymentException& ) {
+ throw;
+ } catch (ucb::CommandFailedException & ) {
+ throw;
+ } catch (ucb::CommandAbortedException & ) {
+ throw;
+ } catch (lang::IllegalArgumentException &) {
+ throw;
+ } catch (uno::RuntimeException &) {
+ throw;
+ } catch (...) {
+ uno::Any excOccurred = ::cppu::getCaughtException();
+ deployment::DeploymentException exc(
+ OUSTR("PackageManagerImpl::checkPrerequisites: exception "),
+ static_cast<OWeakObject*>(this), excOccurred);
+ throw exc;
+ }
+}
//##############################################################################
diff --git a/desktop/source/deployment/manager/dp_manager.h b/desktop/source/deployment/manager/dp_manager.h
index ffa7252d7883..8fe0f662011b 100644
--- a/desktop/source/deployment/manager/dp_manager.h
+++ b/desktop/source/deployment/manager/dp_manager.h
@@ -53,6 +53,8 @@ class PackageManagerImpl : private ::dp_misc::MutexHolder, public t_pm_helper
{
css::uno::Reference<css::uno::XComponentContext> m_xComponentContext;
::rtl::OUString m_context;
+ ::rtl::OUString m_registrationData;
+ ::rtl::OUString m_registrationData_expanded;
::rtl::OUString m_registryCache;
bool m_readOnly;
@@ -73,6 +75,7 @@ class PackageManagerImpl : private ::dp_misc::MutexHolder, public t_pm_helper
::rtl::OUString detectMediaType(
::ucbhelper::Content const & ucbContent, bool throw_exc = true );
::rtl::OUString insertToActivationLayer(
+ css::uno::Sequence<css::beans::NamedValue> const & properties,
::rtl::OUString const & mediaType,
::ucbhelper::Content const & sourceContent,
::rtl::OUString const & title, ActivePackages::Data * dbData );
@@ -83,16 +86,16 @@ class PackageManagerImpl : private ::dp_misc::MutexHolder, public t_pm_helper
css::uno::Reference<css::deployment::XPackage> const & xPackage,
::rtl::OUString const & destFolder );
- bool checkUpdate(
- css::uno::Reference<css::deployment::XPackage> const & package,
- css::uno::Reference<css::ucb::XCommandEnvironment> const & origCmdEnv,
- css::uno::Reference<css::ucb::XCommandEnvironment> const &
- wrappedCmdEnv );
+ bool isInstalled(
+ css::uno::Reference<css::deployment::XPackage> const & package);
- bool checkInstall(
- css::uno::Reference<css::deployment::XPackage> const & package,
- css::uno::Reference<css::ucb::XCommandEnvironment> const & cmdEnv);
+ bool synchronizeRemovedExtensions(
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+ bool synchronizeAddedExtensions(
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
class CmdEnvWrapperImpl
: public ::cppu::WeakImplHelper2< css::ucb::XCommandEnvironment,
@@ -135,7 +138,7 @@ protected:
: t_pm_helper( getMutex() ),
m_xComponentContext( xComponentContext ),
m_context( context ),
- m_readOnly( false )
+ m_readOnly( true )
{}
public:
@@ -171,7 +174,9 @@ public:
createAbortChannel() throw (css::uno::RuntimeException);
virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL addPackage(
- ::rtl::OUString const & url, ::rtl::OUString const & mediaType,
+ ::rtl::OUString const & url,
+ css::uno::Sequence<css::beans::NamedValue> const & properties,
+ ::rtl::OUString const & mediaType,
css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
throw (css::deployment::DeploymentException,
@@ -180,17 +185,15 @@ public:
css::lang::IllegalArgumentException,
css::uno::RuntimeException);
- /* Unregisters the package but does not remove it from disk.
- When the operation is canceled by the user, a CommandAbortedException
- is thrown. Then the package is still fully functional.
- @param out_oldData
- can be NULL
- */
- void removePackage_(
- ::rtl::OUString const & id, ::rtl::OUString const & fileName,
+ virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL importExtension(
+ css::uno::Reference<css::deployment::XPackage> const & extension,
css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
- css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv,
- ActivePackages::Data * out_oldData);
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
virtual void SAL_CALL removePackage(
::rtl::OUString const & id, ::rtl::OUString const & fileName,
@@ -242,7 +245,31 @@ public:
virtual ::sal_Bool SAL_CALL isReadOnly( )
throw (::com::sun::star::uno::RuntimeException);
-};
+
+ virtual ::sal_Bool SAL_CALL synchronize(
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::uno::RuntimeException);
+
+ virtual css::uno::Sequence<css::uno::Reference<css::deployment::XPackage> > SAL_CALL
+ getExtensionsWithUnacceptedLicenses(
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv)
+ throw (css::deployment::DeploymentException,
+ css::uno::RuntimeException);
+
+ virtual sal_Int32 SAL_CALL checkPrerequisites(
+ css::uno::Reference<css::deployment::XPackage> const & extension,
+ css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (css::deployment::DeploymentException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::lang::IllegalArgumentException,
+ css::uno::RuntimeException);
+ };
//______________________________________________________________________________
inline void PackageManagerImpl::check()
diff --git a/desktop/source/deployment/manager/dp_manager.hrc b/desktop/source/deployment/manager/dp_manager.hrc
index bdbfc079cda6..6131cc381abf 100644
--- a/desktop/source/deployment/manager/dp_manager.hrc
+++ b/desktop/source/deployment/manager/dp_manager.hrc
@@ -35,5 +35,5 @@
#define RID_STR_PACKAGE_ALREADY_ADDED (RID_DEPLOYMENT_MANAGER_START+2)
#define RID_STR_COPYING_PACKAGE (RID_DEPLOYMENT_MANAGER_START+3)
#define RID_STR_NO_SUCH_PACKAGE (RID_DEPLOYMENT_MANAGER_START+4)
-
+#define RID_STR_SYNCHRONIZING_REPOSITORY (RID_DEPLOYMENT_MANAGER_START+5)
#endif
diff --git a/desktop/source/deployment/manager/dp_manager.src b/desktop/source/deployment/manager/dp_manager.src
index 95ede4aa6227..7d38b880c37a 100644
--- a/desktop/source/deployment/manager/dp_manager.src
+++ b/desktop/source/deployment/manager/dp_manager.src
@@ -53,3 +53,7 @@ String RID_STR_NO_SUCH_PACKAGE
Text [ en-US ] = "There is no such extension deployed: ";
};
+String RID_STR_SYNCHRONIZING_REPOSITORY
+{
+ Text [ en-US ] = "Synchronizing repository for %NAME extensions";
+};
diff --git a/desktop/source/deployment/manager/dp_managerfac.cxx b/desktop/source/deployment/manager/dp_managerfac.cxx
index d4c9df1d57af..f6fde6b07d60 100644
--- a/desktop/source/deployment/manager/dp_managerfac.cxx
+++ b/desktop/source/deployment/manager/dp_managerfac.cxx
@@ -53,6 +53,7 @@ class PackageManagerFactoryImpl : private MutexHolder, public t_pmfac_helper
Reference<deployment::XPackageManager> m_xUserMgr;
Reference<deployment::XPackageManager> m_xSharedMgr;
+ Reference<deployment::XPackageManager> m_xBundledMgr;
typedef ::std::hash_map<
OUString, WeakReference<deployment::XPackageManager>,
::rtl::OUStringHash > t_string2weakref;
@@ -141,6 +142,7 @@ void PackageManagerFactoryImpl::disposing()
// the below are already disposed:
m_xUserMgr.clear();
m_xSharedMgr.clear();
+ m_xBundledMgr.clear();
}
// XPackageManagerFactory
@@ -172,6 +174,8 @@ PackageManagerFactoryImpl::getPackageManager( OUString const & context )
m_xUserMgr = xRet;
else if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("shared") ))
m_xSharedMgr = xRet;
+ else if (context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bundled") ))
+ m_xBundledMgr = xRet;
}
else
{
diff --git a/desktop/source/deployment/manager/dp_properties.cxx b/desktop/source/deployment/manager/dp_properties.cxx
new file mode 100644
index 000000000000..df579944c6e4
--- /dev/null
+++ b/desktop/source/deployment/manager/dp_properties.cxx
@@ -0,0 +1,169 @@
+/*************************************************************************
+ *
+ * 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
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "com/sun/star/ucb/XCommandEnvironment.hpp"
+#include "com/sun/star/lang/IllegalArgumentException.hpp"
+#include "xmlscript/xml_helper.hxx"
+#include "ucbhelper/content.hxx"
+#include <list>
+
+#include "dp_ucb.h"
+#include "rtl/ustrbuf.hxx"
+#include "dp_properties.hxx"
+
+namespace lang = com::sun::star::lang;
+namespace task = com::sun::star::task;
+namespace ucb = com::sun::star::ucb;
+namespace uno = com::sun::star::uno;
+namespace css = com::sun::star;
+
+#define OUSTR(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
+
+using ::com::sun::star::uno::Reference;
+using ::rtl::OUString;
+
+#define PROP_SUPPRESS_LICENSE "SUPPRESS_LICENSE"
+#define PROP_EXTENSION_UPDATE "EXTENSION_UPDATE"
+
+namespace dp_manager {
+
+//Reading the file
+ExtensionProperties::ExtensionProperties(
+ OUString const & urlExtension,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv) :
+ m_xCmdEnv(xCmdEnv)
+{
+ m_propFileUrl = urlExtension + OUSTR("properties");
+
+ ::std::list< ::std::pair< OUString, OUString> > props;
+ if (! dp_misc::create_ucb_content(NULL, m_propFileUrl, 0, false))
+ return;
+
+ ::ucbhelper::Content contentProps(m_propFileUrl, m_xCmdEnv);
+ dp_misc::readProperties(props, contentProps);
+
+ typedef ::std::list< ::std::pair< OUString, OUString> >::const_iterator CI;
+ for (CI i = props.begin(); i != props.end(); i++)
+ {
+ if (i->first.equals(OUSTR(PROP_SUPPRESS_LICENSE)))
+ m_prop_suppress_license = i->second;
+ }
+}
+
+//Writing the file
+ExtensionProperties::ExtensionProperties(
+ OUString const & urlExtension,
+ uno::Sequence<css::beans::NamedValue> const & properties,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv) :
+ m_xCmdEnv(xCmdEnv)
+{
+ m_propFileUrl = urlExtension + OUSTR("properties");
+
+ for (sal_Int32 i = 0; i < properties.getLength(); i++)
+ {
+ css::beans::NamedValue const & v = properties[i];
+ if (v.Name.equals(OUSTR(PROP_SUPPRESS_LICENSE)))
+ {
+ m_prop_suppress_license = getPropertyValue(v);
+ }
+ else if (v.Name.equals(OUSTR(PROP_EXTENSION_UPDATE)))
+ {
+ m_prop_extension_update = getPropertyValue(v);
+ }
+ else
+ {
+ throw lang::IllegalArgumentException(
+ OUSTR("Extension Manager: unknown property"), 0, -1);
+ }
+ }
+}
+
+OUString ExtensionProperties::getPropertyValue(css::beans::NamedValue const & v)
+{
+ OUString value(OUSTR("0"));
+ if (v.Value >>= value)
+ {
+ if (value.equals(OUSTR("1")))
+ value = OUSTR("1");
+ }
+ else
+ {
+ throw lang::IllegalArgumentException(
+ OUSTR("Extension Manager: wrong property value"), 0, -1);
+ }
+ return value;
+}
+void ExtensionProperties::write()
+{
+ ::ucbhelper::Content contentProps(m_propFileUrl, m_xCmdEnv);
+ ::rtl::OUStringBuffer buf;
+
+ if (m_prop_suppress_license)
+ {
+ buf.append(OUSTR(PROP_SUPPRESS_LICENSE));
+ buf.append(OUSTR("="));
+ buf.append(*m_prop_suppress_license);
+ }
+
+ ::rtl::OString stamp = ::rtl::OUStringToOString(
+ buf.makeStringAndClear(), RTL_TEXTENCODING_UTF8);
+ Reference<css::io::XInputStream> xData(
+ ::xmlscript::createInputStream(
+ ::rtl::ByteSequence(
+ reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
+ stamp.getLength() ) ) );
+ contentProps.writeStream( xData, true /* replace existing */ );
+}
+
+bool ExtensionProperties::isSuppressedLicense()
+{
+ bool ret = false;
+ if (m_prop_suppress_license)
+ {
+ if (m_prop_suppress_license->equals(OUSTR("1")))
+ ret = true;
+ }
+ return ret;
+}
+
+bool ExtensionProperties::isExtensionUpdate()
+{
+ bool ret = false;
+ if (m_prop_extension_update)
+ {
+ if (m_prop_extension_update->equals(OUSTR("1")))
+ ret = true;
+ }
+ return ret;
+}
+
+} // namespace dp_manager
+
+
diff --git a/desktop/source/deployment/manager/dp_properties.hxx b/desktop/source/deployment/manager/dp_properties.hxx
new file mode 100644
index 000000000000..97fc8b8c5394
--- /dev/null
+++ b/desktop/source/deployment/manager/dp_properties.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * 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: dp_manager.h,v $
+ * $Revision: 1.17 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_PROPERTIES_HXX
+#define INCLUDED_DP_PROPERTIES_HXX
+
+
+
+#include "com/sun/star/beans/NamedValue.hpp"
+#include "com/sun/star/ucb/XCommandEnvironment.hpp"
+#include "boost/optional.hpp"
+
+
+namespace css = ::com::sun::star;
+
+namespace dp_manager {
+
+
+
+/**
+
+ */
+class ExtensionProperties
+{
+protected:
+ ::rtl::OUString m_propFileUrl;
+ const css::uno::Reference<css::ucb::XCommandEnvironment> m_xCmdEnv;
+ ::boost::optional< ::rtl::OUString> m_prop_suppress_license;
+ ::boost::optional< ::rtl::OUString> m_prop_extension_update;
+
+ ::rtl::OUString getPropertyValue(css::beans::NamedValue const & v);
+public:
+
+ virtual ~ExtensionProperties() {};
+ ExtensionProperties(::rtl::OUString const & urlExtension,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+
+ ExtensionProperties(::rtl::OUString const & urlExtension,
+ css::uno::Sequence<css::beans::NamedValue> const & properties,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+
+ void write();
+
+ bool isSuppressedLicense();
+
+ bool isExtensionUpdate();
+};
+}
+
+
+
+
+#endif
+
diff --git a/desktop/source/deployment/manager/makefile.mk b/desktop/source/deployment/manager/makefile.mk
index a9ff47881fc3..4dc6405e34bf 100644
--- a/desktop/source/deployment/manager/makefile.mk
+++ b/desktop/source/deployment/manager/makefile.mk
@@ -45,7 +45,10 @@ SLOFILES = \
$(SLO)$/dp_activepackages.obj \
$(SLO)$/dp_manager.obj \
$(SLO)$/dp_managerfac.obj \
- $(SLO)$/dp_informationprovider.obj
+ $(SLO)$/dp_informationprovider.obj \
+ $(SLO)$/dp_extensionmanager.obj \
+ $(SLO)$/dp_commandenvironments.obj \
+ $(SLO)$/dp_properties.obj
.INCLUDE : ..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/migration/dp_migration.cxx b/desktop/source/deployment/migration/dp_migration.cxx
deleted file mode 100644
index 49362f7e2f5f..000000000000
--- a/desktop/source/deployment/migration/dp_migration.cxx
+++ /dev/null
@@ -1,251 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_desktop.hxx"
-
-#include "dp_misc.h"
-#include "dp_ucb.h"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/exc_hlp.hxx"
-#include "ucbhelper/content.hxx"
-#include "comphelper/anytostring.hxx"
-#include "comphelper/servicedecl.hxx"
-#include "com/sun/star/lang/WrappedTargetException.hpp"
-#include "com/sun/star/task/XJob.hpp"
-#include "com/sun/star/task/XInteractionAbort.hpp"
-#include "com/sun/star/task/XInteractionApprove.hpp"
-#include "com/sun/star/sdbc/XResultSet.hpp"
-#include "com/sun/star/sdbc/XRow.hpp"
-#include "com/sun/star/ucb/XContentAccess.hpp"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::ucb;
-using namespace ::com::sun::star::uno;
-using namespace ::dp_misc;
-using ::rtl::OUString;
-
-namespace dp_migration {
-
-class MigrationImpl : public ::cppu::WeakImplHelper1<task::XJob>
-{
- struct CommandEnvironmentImpl
- : public ::cppu::WeakImplHelper2< XCommandEnvironment,
- task::XInteractionHandler >
- {
- // XCommandEnvironment
- virtual Reference<task::XInteractionHandler> SAL_CALL
- getInteractionHandler() throw (RuntimeException);
- virtual Reference<XProgressHandler> SAL_CALL getProgressHandler()
- throw (RuntimeException);
- // XInteractionHandler
- virtual void SAL_CALL handle(
- Reference<task::XInteractionRequest> const & xRequest )
- throw (RuntimeException);
- };
-
- const Reference<XComponentContext> m_xContext;
- OUString m_userData;
-
-protected:
- virtual ~MigrationImpl();
-public:
- MigrationImpl( Sequence<Any> const & args,
- Reference<XComponentContext> const & xComponentContext );
-
- // XJob
- virtual Any SAL_CALL execute( Sequence<beans::NamedValue> const & args )
- throw (lang::IllegalArgumentException, Exception, RuntimeException);
-};
-
-MigrationImpl::~MigrationImpl()
-{
-}
-
-MigrationImpl::MigrationImpl(
- Sequence<Any> const & args, Reference<XComponentContext> const & xContext )
- : m_xContext(xContext)
-{
- for ( sal_Int32 pos = args.getLength(); pos--; )
- {
- const beans::NamedValue nv(args[pos].get<beans::NamedValue>());
- if (nv.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("UserData") ))
- m_userData = nv.Value.get<OUString>();
- }
- if (m_userData.getLength() == 0)
- throw lang::IllegalArgumentException( OUSTR("missing UserData!"), 0,
- static_cast<sal_Int16>(-1) );
-}
-
-// XJob
-Any MigrationImpl::execute( Sequence<beans::NamedValue> const & )
- throw (lang::IllegalArgumentException, Exception, RuntimeException)
-{
- const Reference<deployment::XPackageManager> xManager(
- deployment::thePackageManagerFactory::get(
- m_xContext )->getPackageManager( OUSTR("user") ) );
- ::ucbhelper::Content packagesDir;
- if (create_ucb_content( &packagesDir,
- makeURL( m_userData, OUSTR("user/uno_packages") ),
- Reference<XCommandEnvironment>(),
- false /* no throw */ ))
- {
- const Reference<XCommandEnvironment> xCmdEnv(
- new CommandEnvironmentImpl );
- OUString const & strTitle = StrTitle::get();
- const Reference<sdbc::XResultSet> xResultSet(
- packagesDir.createCursor( Sequence<OUString>( &strTitle, 1 ),
- ::ucbhelper::INCLUDE_DOCUMENTS_ONLY ) );
- while (xResultSet->next())
- {
- Reference<sdbc::XRow> xRow( xResultSet, UNO_QUERY_THROW );
- const OUString title( xRow->getString( 1 /* Title */ ) );
- // exclude stampIt, not migratable to OOo 2.0:
- if (title.matchIgnoreAsciiCaseAsciiL(
- RTL_CONSTASCII_STRINGPARAM("SSICONCT.") ))
- continue;
- const OUString sourceURL( Reference<XContentAccess>(
- xResultSet, UNO_QUERY_THROW )
- ->queryContentIdentifierString() );
- try {
- xManager->addPackage(
- sourceURL, OUString() /* detect media-type */,
- Reference<task::XAbortChannel>(), xCmdEnv );
- }
- catch (RuntimeException &) {
- throw;
- }
- catch (Exception &) {
- OSL_ENSURE( 0, ::rtl::OUStringToOString(
- ::comphelper::anyToString(
- ::cppu::getCaughtException() ),
- RTL_TEXTENCODING_UTF8 ).getStr() );
- }
- }
- }
- return Any();
-}
-
-// XCommandEnvironment
-Reference<task::XInteractionHandler>
-MigrationImpl::CommandEnvironmentImpl::getInteractionHandler()
- throw (RuntimeException)
-{
- return this;
-}
-
-Reference<XProgressHandler>
-MigrationImpl::CommandEnvironmentImpl::getProgressHandler()
- throw (RuntimeException)
-{
- return Reference<XProgressHandler>();
-}
-
-// XInteractionHandler
-void MigrationImpl::CommandEnvironmentImpl::handle(
- Reference<task::XInteractionRequest> const & xRequest )
- throw (RuntimeException)
-{
- Any request( xRequest->getRequest() );
- OSL_ASSERT( request.getValueTypeClass() == TypeClass_EXCEPTION );
-#if OSL_DEBUG_LEVEL > 1
- OSL_TRACE( "[dp_migration.cxx] incoming request:\n%s\n",
- ::rtl::OUStringToOString( ::comphelper::anyToString(request),
- RTL_TEXTENCODING_UTF8 ).getStr() );
-#endif
-
- // selections:
- bool approve = false;
- bool abort = false;
-
- lang::WrappedTargetException wtExc;
- if (request >>= wtExc) {
- OSL_ENSURE( 0, ::rtl::OUStringToOString(
- ::comphelper::anyToString(wtExc.TargetException),
- RTL_TEXTENCODING_UTF8 ).getStr() );
-
- // ignore intermediate errors of legacy packages, i.e.
- // former pkgchk behaviour:
- const Reference<deployment::XPackage> xPackage(
- wtExc.Context, UNO_QUERY );
- OSL_ASSERT( xPackage.is() );
- if (xPackage.is()) {
- const Reference<deployment::XPackageTypeInfo> xPackageType(
- xPackage->getPackageType() );
- OSL_ASSERT( xPackageType.is() );
- if (xPackageType.is()) {
- approve = (xPackage->isBundle() &&
- xPackageType->getMediaType().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "application/"
- "vnd.sun.star.legacy-package-bundle") ));
- }
- }
- abort = !approve;
- }
- else
- return; // unknown request => no selection at all
-
- // select:
- const Sequence< Reference<task::XInteractionContinuation> > conts(
- xRequest->getContinuations() );
- for ( sal_Int32 pos = 0; pos < conts.getLength(); ++pos )
- {
- if (approve) {
- const Reference<task::XInteractionApprove> xInteractionApprove(
- conts[ pos ], UNO_QUERY );
- if (xInteractionApprove.is()) {
- xInteractionApprove->select();
- // don't query again for ongoing continuations:
- approve = false;
- }
- }
- else if (abort) {
- const Reference<task::XInteractionAbort> xInteractionAbort(
- conts[ pos ], UNO_QUERY );
- if (xInteractionAbort.is()) {
- xInteractionAbort->select();
- // don't query again for ongoing continuations:
- abort = false;
- }
- }
- }
-}
-
-namespace sdecl = comphelper::service_decl;
-sdecl::class_<MigrationImpl, sdecl::with_args<true> > serviceMI;
-extern sdecl::ServiceDecl const serviceDecl(
- serviceMI,
- // a private one (config entry):
- "com.sun.star.comp.deployment.migration.Migration_2_0",
- "com.sun.star.comp.deployment.migration.Migration_2_0" );
-
-} // namespace dp_migration
-
diff --git a/desktop/source/deployment/migration/makefile.mk b/desktop/source/deployment/migration/makefile.mk
deleted file mode 100644
index a37b7e5bebf8..000000000000
--- a/desktop/source/deployment/migration/makefile.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ = ..$/..$/..
-
-PRJNAME = desktop
-TARGET = deployment_migration
-ENABLE_EXCEPTIONS = TRUE
-
-.INCLUDE : settings.mk
-
-SLOFILES = \
- $(SLO)$/dp_migration.obj
-
-.INCLUDE : ..$/target.pmk
-.INCLUDE : target.mk
-
diff --git a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
index 049f781dfd90..b4132db61f03 100644
--- a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
+++ b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
@@ -35,6 +35,7 @@
#include "comphelper/sequence.hxx"
#include "comphelper/makesequence.hxx"
+#include "comphelper/processfactory.hxx"
#include "boost/optional.hpp"
#include "com/sun/star/beans/Optional.hpp"
#include "com/sun/star/lang/XMultiComponentFactory.hpp"
@@ -47,17 +48,23 @@
#include "com/sun/star/xml/dom/DOMException.hpp"
#include "com/sun/star/xml/dom/XNode.hpp"
#include "com/sun/star/xml/dom/XNodeList.hpp"
+#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
+#include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp"
#include "cppuhelper/implbase1.hxx"
+#include "cppuhelper/implbase2.hxx"
#include "cppuhelper/weak.hxx"
+#include "cppuhelper/exc_hlp.hxx"
#include "rtl/ustring.h"
#include "rtl/ustring.hxx"
#include "sal/types.h"
-
+#include "ucbhelper/content.hxx"
namespace {
namespace css = ::com::sun::star;
+using css::uno::Reference;
+using ::rtl::OUString;
class EmptyNodeList: public ::cppu::WeakImplHelper1< css::xml::dom::XNodeList >
{
@@ -110,10 +117,251 @@ css::uno::Reference< css::xml::dom::XNode > EmptyNodeList::item(::sal_Int32)
}
}
+/**The class uses the UCB to access the description.xml file in an
+ extension. The UCB must have been initialized already. It also
+ requires that the extension has already be unzipped to a particular
+ location.
+ */
+class ExtensionDescription
+{
+public:
+ /**throws an exception if the description.xml is not
+ available, cannot be read, does not contain the expected data,
+ or any other error occured. Therefore it shoult only be used with
+ new extensions.
+
+ Throws com::sun::star::uno::RuntimeException,
+ com::sun::star::deployment::DeploymentException,
+ dp_registry::backend::bundle::NoDescriptionException.
+ */
+ ExtensionDescription(
+ const css::uno::Reference<css::uno::XComponentContext>& xContext,
+ const ::rtl::OUString& installDir,
+ const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv);
+
+ ~ExtensionDescription();
+
+ css::uno::Reference<css::xml::dom::XNode> getRootElement() const
+ {
+ return m_xRoot;
+ }
+
+ ::rtl::OUString getExtensionRootUrl() const
+ {
+ return m_sExtensionRootUrl;
+ }
+
+
+private:
+ css::uno::Reference<css::xml::dom::XNode> m_xRoot;
+ ::rtl::OUString m_sExtensionRootUrl;
+};
+
+class NoDescriptionException
+{
+};
+
+class FileDoesNotExistFilter
+ : public ::cppu::WeakImplHelper2< css::ucb::XCommandEnvironment,
+ css::task::XInteractionHandler >
+
+{
+ //css::uno::Reference<css::task::XInteractionHandler> m_xHandler;
+ bool m_bExist;
+ css::uno::Reference< css::ucb::XCommandEnvironment > m_xCommandEnv;
+
+public:
+ virtual ~FileDoesNotExistFilter();
+ FileDoesNotExistFilter(
+ const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv);
+
+ bool exist();
+ // XCommandEnvironment
+ virtual css::uno::Reference<css::task::XInteractionHandler > SAL_CALL
+ getInteractionHandler() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference<css::ucb::XProgressHandler >
+ SAL_CALL getProgressHandler() throw (css::uno::RuntimeException);
+
+ // XInteractionHandler
+ virtual void SAL_CALL handle(
+ css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
+ throw (css::uno::RuntimeException);
+};
+
+ExtensionDescription::ExtensionDescription(
+ const Reference<css::uno::XComponentContext>& xContext,
+ const OUString& installDir,
+ const Reference< css::ucb::XCommandEnvironment >& xCmdEnv)
+{
+ try {
+ m_sExtensionRootUrl = installDir;
+ //may throw ::com::sun::star::ucb::ContentCreationException
+ //If there is no description.xml then ucb will start an interaction which
+ //brings up a dialog.We want to prevent this. Therefore we wrap the xCmdEnv
+ //and filter the respective exception out.
+ OUString sDescriptionUri(installDir + OUSTR("/description.xml"));
+ Reference<css::ucb::XCommandEnvironment> xFilter =
+ static_cast<css::ucb::XCommandEnvironment*>(
+ new FileDoesNotExistFilter(xCmdEnv));
+ ::ucbhelper::Content descContent(sDescriptionUri, xFilter);
+
+ //throws an com::sun::star::uno::Exception if the file is not available
+ Reference<css::io::XInputStream> xIn;
+ try
+ { //throws com.sun.star.ucb.InteractiveAugmentedIOException
+ xIn = descContent.openStream();
+ }
+ catch (css::uno::Exception& )
+ {
+ if ( ! static_cast<FileDoesNotExistFilter*>(xFilter.get())->exist())
+ throw NoDescriptionException();
+ throw;
+ }
+ if (!xIn.is())
+ {
+ throw css::uno::Exception(
+ OUSTR("Could not get XInputStream for description.xml of extension ") +
+ sDescriptionUri, 0);
+ }
+
+ //get root node of description.xml
+ Reference<css::xml::dom::XDocumentBuilder> xDocBuilder(
+ xContext->getServiceManager()->createInstanceWithContext(
+ OUSTR("com.sun.star.xml.dom.DocumentBuilder"),
+ xContext ), css::uno::UNO_QUERY);
+ if (!xDocBuilder.is())
+ throw css::uno::Exception(OUSTR(" Could not create service com.sun.star.xml.dom.DocumentBuilder"), 0);
+
+ if (xDocBuilder->isNamespaceAware() == sal_False)
+ {
+ throw css::uno::Exception(
+ OUSTR("Service com.sun.star.xml.dom.DocumentBuilder is not namespace aware."), 0);
+ }
+
+ Reference<css::xml::dom::XDocument> xDoc = xDocBuilder->parse(xIn);
+ if (!xDoc.is())
+ {
+ throw css::uno::Exception(sDescriptionUri + OUSTR(" contains data which cannot be parsed. "), 0);
+ }
+
+ //check for proper root element and namespace
+ Reference<css::xml::dom::XElement> xRoot = xDoc->getDocumentElement();
+ if (!xRoot.is())
+ {
+ throw css::uno::Exception(
+ sDescriptionUri + OUSTR(" contains no root element."), 0);
+ }
+
+ if ( ! xRoot->getTagName().equals(OUSTR("description")))
+ {
+ throw css::uno::Exception(
+ sDescriptionUri + OUSTR(" does not contain the root element <description>."), 0);
+ }
+
+ m_xRoot = Reference<css::xml::dom::XNode>(
+ xRoot, css::uno::UNO_QUERY_THROW);
+ OUString nsDescription = xRoot->getNamespaceURI();
+
+ //check if this namespace is supported
+ if ( ! nsDescription.equals(OUSTR("http://openoffice.org/extensions/description/2006")))
+ {
+ throw css::uno::Exception(sDescriptionUri + OUSTR(" contains a root element with an unsupported namespace. "), 0);
+ }
+ } catch (css::uno::RuntimeException &) {
+ throw;
+ } catch (css::deployment::DeploymentException &) {
+ throw;
+ } catch (css::uno::Exception & e) {
+ css::uno::Any a(cppu::getCaughtException());
+ throw css::deployment::DeploymentException(
+ e.Message, Reference< css::uno::XInterface >(), a);
+ }
+}
+
+ExtensionDescription::~ExtensionDescription()
+{
+}
+
+//======================================================================
+FileDoesNotExistFilter::FileDoesNotExistFilter(
+ const Reference< css::ucb::XCommandEnvironment >& xCmdEnv):
+ m_bExist(true), m_xCommandEnv(xCmdEnv)
+{}
+
+FileDoesNotExistFilter::~FileDoesNotExistFilter()
+{
+};
+
+bool FileDoesNotExistFilter::exist()
+{
+ return m_bExist;
+}
+ // XCommandEnvironment
+Reference<css::task::XInteractionHandler >
+ FileDoesNotExistFilter::getInteractionHandler() throw (css::uno::RuntimeException)
+{
+ return static_cast<css::task::XInteractionHandler*>(this);
+}
+
+Reference<css::ucb::XProgressHandler >
+ FileDoesNotExistFilter::getProgressHandler() throw (css::uno::RuntimeException)
+{
+ return m_xCommandEnv.is()
+ ? m_xCommandEnv->getProgressHandler()
+ : Reference<css::ucb::XProgressHandler>();
+}
+
+// XInteractionHandler
+//If the interaction was caused by a non-existing file which is specified in the ctor
+//of FileDoesNotExistFilter, then we do nothing
+void FileDoesNotExistFilter::handle(
+ Reference<css::task::XInteractionRequest > const & xRequest )
+ throw (css::uno::RuntimeException)
+{
+ css::uno::Any request( xRequest->getRequest() );
+
+ css::ucb::InteractiveAugmentedIOException ioexc;
+ if ((request>>= ioexc) && ioexc.Code == css::ucb::IOErrorCode_NOT_EXISTING )
+ {
+ m_bExist = false;
+ return;
+ }
+ Reference<css::task::XInteractionHandler> xInteraction;
+ if (m_xCommandEnv.is()) {
+ xInteraction = m_xCommandEnv->getInteractionHandler();
+ }
+ if (xInteraction.is()) {
+ xInteraction->handle(xRequest);
+ }
+}
+
}
namespace dp_misc {
+DescriptionInfoset getDescriptionInfoset(OUString const & sExtensionFolderURL)
+{
+ Reference< css::xml::dom::XNode > root;
+ Reference<css::uno::XComponentContext> context =
+ comphelper_getProcessComponentContext();
+ OSL_ASSERT(context.is());
+ try {
+ root =
+ ExtensionDescription(
+ context, sExtensionFolderURL,
+ Reference< css::ucb::XCommandEnvironment >()).
+ getRootElement();
+ } catch (NoDescriptionException &) {
+ } catch (css::deployment::DeploymentException & e) {
+ throw css::uno::RuntimeException(
+ (OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.deployment.DeploymentException: ")) +
+ e.Message), 0);
+ }
+ return DescriptionInfoset(context, root);
+}
+
DescriptionInfoset::DescriptionInfoset(
css::uno::Reference< css::uno::XComponentContext > const & context,
css::uno::Reference< css::xml::dom::XNode > const & element):
diff --git a/desktop/source/deployment/misc/dp_misc.cxx b/desktop/source/deployment/misc/dp_misc.cxx
index 3ed2d554b59f..fe3490903043 100644
--- a/desktop/source/deployment/misc/dp_misc.cxx
+++ b/desktop/source/deployment/misc/dp_misc.cxx
@@ -30,6 +30,7 @@
#include "dp_misc.h"
+#include "dp_version.hxx"
#include "dp_interact.h"
#include "rtl/uri.hxx"
#include "rtl/digest.h"
@@ -42,10 +43,14 @@
#include "osl/thread.hxx"
#include "osl/mutex.hxx"
#include "com/sun/star/ucb/CommandAbortedException.hpp"
+#include "com/sun/star/task/XInteractionHandler.hpp"
#include "com/sun/star/bridge/UnoUrlResolver.hpp"
#include "com/sun/star/bridge/XUnoUrlResolver.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
+#include "com/sun/star/task/XRestartManager.hpp"
#include "boost/scoped_array.hpp"
#include "boost/shared_ptr.hpp"
+#include <comphelper/processfactory.hxx>
#ifdef WNT
//#include "tools/prewin.h"
@@ -138,6 +143,103 @@ bool existsOfficePipe()
return pipe.is();
}
+
+//Returns true if the Folder was more recently modified then
+//the lastsynchronized file. That is the repository needs to
+//be synchronized.
+bool compareExtensionFolderWithLastSynchronizedFile(
+ OUString const & folderURL, OUString const & fileURL)
+{
+ bool bNeedsSync = false;
+ ::osl::DirectoryItem itemExtFolder;
+ ::osl::File::RC err1 =
+ ::osl::DirectoryItem::get(folderURL, itemExtFolder);
+ //If it does not exist, then there is nothing to be done
+ if (err1 == ::osl::File::E_NOENT)
+ {
+ return false;
+ }
+ else if (err1 != ::osl::File::E_None)
+ {
+ OSL_ENSURE(0, "Cannot access extension folder");
+ return true; //sync just in case
+ }
+
+ //If last synchronized does not exist, then OOo is started for the first time
+ ::osl::DirectoryItem itemFile;
+ ::osl::File::RC err2 = ::osl::DirectoryItem::get(fileURL, itemFile);
+ if (err2 == ::osl::File::E_NOENT)
+ {
+ return true;
+
+ }
+ else if (err2 != ::osl::File::E_None)
+ {
+ OSL_ENSURE(0, "Cannot access file lastsynchronized");
+ return true; //sync just in case
+ }
+
+ //compare the modification time of the extension folder and the last
+ //modified file
+ ::osl::FileStatus statFolder(FileStatusMask_ModifyTime);
+ ::osl::FileStatus statFile(FileStatusMask_ModifyTime);
+ if (itemExtFolder.getFileStatus(statFolder) == ::osl::File::E_None)
+ {
+ if (itemFile.getFileStatus(statFile) == ::osl::File::E_None)
+ {
+ TimeValue timeFolder = statFolder.getModifyTime();
+ TimeValue timeFile = statFile.getModifyTime();
+
+ if (timeFile.Seconds < timeFolder.Seconds)
+ bNeedsSync = true;
+ }
+ else
+ {
+ OSL_ASSERT(0);
+ bNeedsSync = true;
+ }
+ }
+ else
+ {
+ OSL_ASSERT(0);
+ bNeedsSync = true;
+ }
+ return bNeedsSync;
+}
+
+bool needToSyncRepostitory(OUString const & name)
+{
+ OUString folder;
+ OUString file;
+ if (name.equals(OUString(RTL_CONSTASCII_USTRINGPARAM("bundled"))))
+ {
+ folder = OUString(
+ RTL_CONSTASCII_USTRINGPARAM("$BUNDLED_EXTENSIONS"));
+ file = OUString (
+ RTL_CONSTASCII_USTRINGPARAM(
+ "$BUNDLED_EXTENSIONS_USER/lastsynchronized"));
+ }
+ else if (name.equals(OUString(RTL_CONSTASCII_USTRINGPARAM("shared"))))
+ {
+ folder = OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "$UNO_SHARED_PACKAGES_CACHE/uno_packages"));
+ file = OUString (
+ RTL_CONSTASCII_USTRINGPARAM(
+ "$SHARED_EXTENSIONS_USER/lastsynchronized"));
+ }
+ else
+ {
+ OSL_ASSERT(0);
+ return true;
+ }
+ ::rtl::Bootstrap::expandMacros(folder);
+ ::rtl::Bootstrap::expandMacros(file);
+ return compareExtensionFolderWithLastSynchronizedFile(
+ folder, file);
+}
+
+
} // anon namespace
//==============================================================================
@@ -197,6 +299,19 @@ OUString makeURL( OUString const & baseURL, OUString const & relPath_ )
return buf.makeStringAndClear();
}
+OUString makeURLAppendSysPathSegment( OUString const & baseURL, OUString const & relPath_ )
+{
+ OUString segment = relPath_;
+ OSL_ASSERT(segment.indexOf(static_cast<sal_Unicode>('/')) == -1);
+
+ ::rtl::Uri::encode(
+ segment, rtl_UriCharClassPchar, rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8);
+ return makeURL(baseURL, segment);
+}
+
+
+
//==============================================================================
OUString expandUnoRcTerm( OUString const & term_ )
{
@@ -205,6 +320,22 @@ OUString expandUnoRcTerm( OUString const & term_ )
return term;
}
+OUString makeRcTerm( OUString const & url )
+{
+ OSL_ASSERT( url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM(
+ "vnd.sun.star.expand:") ) );
+ if (url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.expand:") )) {
+ // cut protocol:
+ OUString rcterm( url.copy( sizeof ("vnd.sun.star.expand:") - 1 ) );
+ // decode uric class chars:
+ rcterm = ::rtl::Uri::decode(
+ rcterm, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+ return rcterm;
+ }
+ else
+ return url;
+}
+
//==============================================================================
OUString expandUnoRcUrl( OUString const & url )
{
@@ -346,17 +477,6 @@ Reference<XInterface> resolveUnoURL(
}
}
-OUString getExtensionDefaultUpdateURL()
-{
- ::rtl::OUString sUrl(
- RTL_CONSTASCII_USTRINGPARAM(
- "${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE("version")
- ":Version:ExtensionUpdateURL}"));
- ::rtl::Bootstrap::expandMacros(sUrl);
- return sUrl;
-}
-
-
#ifdef WNT
void writeConsoleWithStream(::rtl::OUString const & sText, HANDLE stream)
{
@@ -467,4 +587,39 @@ void TRACE(::rtl::OString const & sText)
#endif
}
+void syncRepositories(Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+{
+ Reference<deployment::XExtensionManager> xExtensionManager;
+ //synchronize shared before bundled otherewise there are
+ //more revoke and registration calls.
+ sal_Bool bModified = false;
+ if (needToSyncRepostitory(OUString(RTL_CONSTASCII_USTRINGPARAM("shared")))
+ || needToSyncRepostitory(OUString(RTL_CONSTASCII_USTRINGPARAM("bundled"))))
+ {
+ xExtensionManager =
+ deployment::ExtensionManager::get(
+ comphelper_getProcessComponentContext());
+
+ if (xExtensionManager.is())
+ {
+ bModified = xExtensionManager->synchronize(
+ Reference<task::XAbortChannel>(), xCmdEnv);
+ }
+ }
+
+ if (bModified)
+ {
+ Reference<task::XRestartManager> restarter(
+ comphelper_getProcessComponentContext()->getValueByName(
+ OUSTR( "/singletons/com.sun.star.task.OfficeRestartManager") ), UNO_QUERY );
+ if (restarter.is())
+ {
+ restarter->requestRestart(xCmdEnv.is() == sal_True ? xCmdEnv->getInteractionHandler() :
+ Reference<task::XInteractionHandler>());
+ }
+ }
+}
+
+
+
}
diff --git a/desktop/source/deployment/misc/dp_ucb.cxx b/desktop/source/deployment/misc/dp_ucb.cxx
index 571aef9c1b95..795a492aa0d5 100644
--- a/desktop/source/deployment/misc/dp_ucb.cxx
+++ b/desktop/source/deployment/misc/dp_ucb.cxx
@@ -271,4 +271,50 @@ bool readLine( OUString * res, OUString const & startingWith,
return false;
}
+bool readProperties( ::std::list< ::std::pair< ::rtl::OUString, ::rtl::OUString> > & out_result,
+ ::ucbhelper::Content & ucb_content )
+{
+ // read whole file:
+ ::rtl::ByteSequence bytes( readFile( ucb_content ) );
+ OUString file( reinterpret_cast<sal_Char const *>(bytes.getConstArray()),
+ bytes.getLength(), RTL_TEXTENCODING_UTF8);
+ sal_Int32 pos = 0;
+
+ for (;;)
+ {
+
+ ::rtl::OUStringBuffer buf;
+ sal_Int32 start = pos;
+
+ bool bEOF = false;
+ pos = file.indexOf( LF, pos );
+ if (pos < 0) { // EOF
+ buf.append( file.copy( start ) );
+ bEOF = true;
+ }
+ else
+ {
+ if (pos > 0 && file[ pos - 1 ] == CR)
+ // consume extra CR
+ buf.append( file.copy( start, pos - start - 1 ) );
+ else
+ buf.append( file.copy( start, pos - start ) );
+ pos++;
+ }
+ OUString aLine = buf.makeStringAndClear();
+
+ sal_Int32 posEqual = aLine.indexOf('=');
+ if (posEqual > 0 && (posEqual + 1) < aLine.getLength())
+ {
+ OUString name = aLine.copy(0, posEqual);
+ OUString value = aLine.copy(posEqual + 1);
+ out_result.push_back(::std::make_pair(name, value));
+ }
+
+ if (bEOF)
+ break;
+ }
+ return false;
+}
+
}
diff --git a/desktop/source/deployment/misc/dp_update.cxx b/desktop/source/deployment/misc/dp_update.cxx
new file mode 100755
index 000000000000..52011f1f0ca0
--- /dev/null
+++ b/desktop/source/deployment/misc/dp_update.cxx
@@ -0,0 +1,397 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+
+#include "dp_update.hxx"
+#include "dp_version.hxx"
+#include "dp_identifier.hxx"
+#include "dp_descriptioninfoset.hxx"
+
+#include "rtl/bootstrap.hxx"
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+using ::rtl::OString;
+
+
+namespace dp_misc {
+namespace {
+
+int determineHighestVersion(
+ ::rtl::OUString const & userVersion,
+ ::rtl::OUString const & sharedVersion,
+ ::rtl::OUString const & bundledVersion,
+ ::rtl::OUString const & onlineVersion)
+{
+ int index = 0;
+ OUString greatest = userVersion;
+ if (dp_misc::compareVersions(sharedVersion, greatest) == dp_misc::GREATER)
+ {
+ index = 1;
+ greatest = sharedVersion;
+ }
+ if (dp_misc::compareVersions(bundledVersion, greatest) == dp_misc::GREATER)
+ {
+ index = 2;
+ greatest = bundledVersion;
+ }
+ if (dp_misc::compareVersions(onlineVersion, greatest) == dp_misc::GREATER)
+ {
+ index = 3;
+ }
+ return index;
+}
+
+Sequence< Reference< xml::dom::XElement > >
+getUpdateInformation( Reference<deployment::XUpdateInformationProvider > const & updateInformation,
+ Sequence< OUString > const & urls,
+ OUString const & identifier,
+ uno::Any & out_error)
+{
+ try {
+ return updateInformation->getUpdateInformation(urls, identifier);
+ } catch (uno::RuntimeException &) {
+ throw;
+ } catch (ucb::CommandFailedException & e) {
+ out_error = e.Reason;
+ } catch (ucb::CommandAbortedException &) {
+ } catch (uno::Exception & e) {
+ out_error = uno::makeAny(e);
+ }
+ return
+ Sequence<Reference< xml::dom::XElement > >();
+}
+
+//Put in anonymous namespace
+
+void getOwnUpdateInfos(
+ Reference<uno::XComponentContext> const & xContext,
+ Reference<deployment::XUpdateInformationProvider > const & updateInformation,
+ UpdateInfoMap& inout_map, std::vector<std::pair<Reference<deployment::XPackage>, uno::Any> > & out_errors,
+ bool & out_allFound)
+{
+ bool allHaveOwnUpdateInformation = true;
+ for (UpdateInfoMap::iterator i = inout_map.begin(); i != inout_map.end(); i++)
+ {
+ OSL_ASSERT(i->second.extension.is());
+ Sequence<OUString> urls(i->second.extension->getUpdateInformationURLs());
+ if (urls.getLength())
+ {
+ const OUString id = dp_misc::getIdentifier(i->second.extension);
+ uno::Any anyError;
+ //It is unclear from the idl if there can be a null reference returned.
+ //However all valid information should be the same
+ Sequence<Reference< xml::dom::XElement > >
+ infos(getUpdateInformation(updateInformation, urls, id, anyError));
+ if (anyError.hasValue())
+ out_errors.push_back(std::make_pair(i->second.extension, anyError));
+
+ for (sal_Int32 j = 0; j < infos.getLength(); ++j)
+ {
+ dp_misc::DescriptionInfoset infoset(
+ xContext,
+ Reference< xml::dom::XNode >(infos[j], UNO_QUERY_THROW));
+ if (!infoset.hasDescription())
+ continue;
+ boost::optional< OUString > id2(infoset.getIdentifier());
+ if (!id2)
+ continue;
+ OSL_ASSERT(*id2 == id);
+ if (*id2 == id)
+ {
+ i->second.version = infoset.getVersion();
+ i->second.info = Reference< xml::dom::XNode >(
+ infos[j], UNO_QUERY_THROW);
+ }
+ break;
+ }
+ }
+ else
+ {
+ allHaveOwnUpdateInformation &= false;
+ }
+ }
+ out_allFound = allHaveOwnUpdateInformation;
+}
+
+void getDefaultUpdateInfos(
+ Reference<uno::XComponentContext> const & xContext,
+ Reference<deployment::XUpdateInformationProvider > const & updateInformation,
+ UpdateInfoMap& inout_map,
+ std::vector<std::pair<Reference<deployment::XPackage>, uno::Any> > & out_errors)
+{
+ const rtl::OUString sDefaultURL(dp_misc::getExtensionDefaultUpdateURL());
+ OSL_ASSERT(sDefaultURL.getLength());
+
+ Any anyError;
+ Sequence< Reference< xml::dom::XElement > >
+ infos(
+ getUpdateInformation(
+ updateInformation,
+ Sequence< OUString >(&sDefaultURL, 1), OUString(), anyError));
+ if (anyError.hasValue())
+ out_errors.push_back(std::make_pair(Reference<deployment::XPackage>(), anyError));
+ for (sal_Int32 i = 0; i < infos.getLength(); ++i)
+ {
+ Reference< xml::dom::XNode > node(infos[i], UNO_QUERY_THROW);
+ dp_misc::DescriptionInfoset infoset(xContext, node);
+ boost::optional< OUString > id(infoset.getIdentifier());
+ if (!id) {
+ continue;
+ }
+ UpdateInfoMap::iterator j = inout_map.find(*id);
+ if (j != inout_map.end())
+ {
+ //skip those extension which provide its own update urls
+ if (j->second.extension->getUpdateInformationURLs().getLength())
+ continue;
+ OUString v(infoset.getVersion());
+ //look for the highest version in the online repository
+ if (dp_misc::compareVersions(v, j->second.version) ==
+ dp_misc::GREATER)
+ {
+ j->second.version = v;
+ j->second.info = node;
+ }
+ }
+ }
+}
+
+
+} // anon namespace
+
+
+OUString getExtensionDefaultUpdateURL()
+{
+ ::rtl::OUString sUrl(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE("version")
+ ":Version:ExtensionUpdateURL}"));
+ ::rtl::Bootstrap::expandMacros(sUrl);
+ return sUrl;
+}
+
+/* returns the index of the greatest version, starting with 0
+
+ */
+UPDATE_SOURCE isUpdateUserExtension(
+ bool bReadOnlyShared,
+ ::rtl::OUString const & userVersion,
+ ::rtl::OUString const & sharedVersion,
+ ::rtl::OUString const & bundledVersion,
+ ::rtl::OUString const & onlineVersion)
+{
+ UPDATE_SOURCE retVal = UPDATE_SOURCE_NONE;
+ if (bReadOnlyShared)
+ {
+ if (userVersion.getLength())
+ {
+ int index = determineHighestVersion(
+ userVersion, sharedVersion, bundledVersion, onlineVersion);
+ if (index == 1)
+ retVal = UPDATE_SOURCE_SHARED;
+ else if (index == 2)
+ retVal = UPDATE_SOURCE_BUNDLED;
+ else if (index == 3)
+ retVal = UPDATE_SOURCE_ONLINE;
+ }
+ else if (sharedVersion.getLength())
+ {
+ int index = determineHighestVersion(
+ OUString(), sharedVersion, bundledVersion, onlineVersion);
+ if (index == 2)
+ retVal = UPDATE_SOURCE_BUNDLED;
+ else if (index == 3)
+ retVal = UPDATE_SOURCE_ONLINE;
+
+ }
+ else if (bundledVersion.getLength())
+ {
+ int index = determineHighestVersion(
+ OUString(), OUString(), bundledVersion, onlineVersion);
+ if (index == 3)
+ retVal = UPDATE_SOURCE_ONLINE;
+ }
+ }
+ else
+ {
+ if (userVersion.getLength())
+ {
+ int index = determineHighestVersion(
+ userVersion, sharedVersion, bundledVersion, onlineVersion);
+ if (index == 1)
+ retVal = UPDATE_SOURCE_SHARED;
+ else if (index == 2)
+ retVal = UPDATE_SOURCE_BUNDLED;
+ else if (index == 3)
+ retVal = UPDATE_SOURCE_ONLINE;
+ }
+ }
+
+ return retVal;
+}
+
+UPDATE_SOURCE isUpdateSharedExtension(
+ bool bReadOnlyShared,
+ ::rtl::OUString const & sharedVersion,
+ ::rtl::OUString const & bundledVersion,
+ ::rtl::OUString const & onlineVersion)
+{
+ if (bReadOnlyShared)
+ return UPDATE_SOURCE_NONE;
+ UPDATE_SOURCE retVal = UPDATE_SOURCE_NONE;
+
+ if (sharedVersion.getLength())
+ {
+ int index = determineHighestVersion(
+ OUString(), sharedVersion, bundledVersion, onlineVersion);
+ if (index == 2)
+ retVal = UPDATE_SOURCE_BUNDLED;
+ else if (index == 3)
+ retVal = UPDATE_SOURCE_ONLINE;
+ }
+ else if (bundledVersion.getLength())
+ {
+ int index = determineHighestVersion(
+ OUString(), OUString(), bundledVersion, onlineVersion);
+ if (index == 3)
+ retVal = UPDATE_SOURCE_ONLINE;
+ }
+ return retVal;
+}
+
+Reference<deployment::XPackage>
+getExtensionWithHighestVersion(
+ Sequence<Reference<deployment::XPackage> > const & seqExt)
+{
+ if (seqExt.getLength() == 0)
+ return Reference<deployment::XPackage>();
+
+ Reference<deployment::XPackage> greatest;
+ sal_Int32 len = seqExt.getLength();
+
+ for (sal_Int32 i = 0; i < len; i++)
+ {
+ if (!greatest.is())
+ {
+ greatest = seqExt[i];
+ continue;
+ }
+ Reference<deployment::XPackage> const & current = seqExt[i];
+ //greatest has a value
+ if (! current.is())
+ continue;
+
+ if (dp_misc::compareVersions(current->getVersion(), greatest->getVersion()) == dp_misc::GREATER)
+ greatest = current;
+ }
+ return greatest;
+}
+
+UpdateInfo::UpdateInfo( Reference< deployment::XPackage> const & ext):
+extension(ext)
+{
+}
+
+
+
+UpdateInfoMap getOnlineUpdateInfos(
+ Reference<uno::XComponentContext> const &xContext,
+ Reference<deployment::XExtensionManager> const & xExtMgr,
+ Reference<deployment::XUpdateInformationProvider > const & updateInformation,
+ std::vector<Reference<deployment::XPackage > > const * extensionList,
+ std::vector<std::pair< Reference<deployment::XPackage>, uno::Any> > & out_errors)
+{
+ OSL_ASSERT(xExtMgr.is());
+ UpdateInfoMap infoMap;
+ if (!xExtMgr.is())
+ return infoMap;
+
+ if (!extensionList)
+ {
+ const uno::Sequence< uno::Sequence< Reference<deployment::XPackage > > > seqAllExt = xExtMgr->getAllExtensions(
+ Reference<task::XAbortChannel>(), Reference<ucb::XCommandEnvironment>());
+
+ //fill the UpdateInfoMap. key = extension identifier, value = UpdateInfo
+ for (int pos = seqAllExt.getLength(); pos --; )
+ {
+ uno::Sequence<Reference<deployment::XPackage> > const & seqExt = seqAllExt[pos];
+
+ Reference<deployment::XPackage> extension = getExtensionWithHighestVersion(seqExt);
+ OSL_ASSERT(extension.is());
+
+ std::pair<UpdateInfoMap::iterator, bool> insertRet = infoMap.insert(
+ UpdateInfoMap::value_type(
+ dp_misc::getIdentifier(extension), UpdateInfo(extension)));
+ OSL_ASSERT(insertRet.second == true);
+ }
+ }
+ else
+ {
+ typedef std::vector<Reference<deployment::XPackage > >::const_iterator CIT;
+ for (CIT i = extensionList->begin(); i != extensionList->end(); i++)
+ {
+ OSL_ASSERT(i->is());
+ std::pair<UpdateInfoMap::iterator, bool> insertRet = infoMap.insert(
+ UpdateInfoMap::value_type(
+ dp_misc::getIdentifier(*i), UpdateInfo(*i)));
+ OSL_ASSERT(insertRet.second == true);
+ }
+ }
+
+ //Now find the update information for the extensions which provide their own
+ //URLs to update information.
+ bool allInfosObtained = false;
+ getOwnUpdateInfos(xContext, updateInformation, infoMap, out_errors, allInfosObtained);
+
+ if (!allInfosObtained)
+ getDefaultUpdateInfos(xContext, updateInformation, infoMap, out_errors);
+ return infoMap;
+}
+OUString getHighestVersion(
+ ::rtl::OUString const & userVersion,
+ ::rtl::OUString const & sharedVersion,
+ ::rtl::OUString const & bundledVersion,
+ ::rtl::OUString const & onlineVersion)
+{
+ int index = determineHighestVersion(userVersion, sharedVersion, bundledVersion, onlineVersion);
+ switch (index)
+ {
+ case 0: return userVersion;
+ case 1: return sharedVersion;
+ case 2: return bundledVersion;
+ case 3: return onlineVersion;
+ default: OSL_ASSERT(0);
+ }
+
+ return OUString();
+}
+} //namespace dp_misc
diff --git a/desktop/source/deployment/misc/dp_version.cxx b/desktop/source/deployment/misc/dp_version.cxx
index 1668ebe4a0b7..c0da0533b54c 100644
--- a/desktop/source/deployment/misc/dp_version.cxx
+++ b/desktop/source/deployment/misc/dp_version.cxx
@@ -70,11 +70,5 @@ namespace dp_misc {
return ::dp_misc::EQUAL;
}
-::dp_misc::Order comparePackageVersions(
- css::uno::Reference< css::deployment::XPackage > const & package1,
- css::uno::Reference< css::deployment::XPackage > const & package2)
-{
- return compareVersions(package1->getVersion(), package2->getVersion());
-}
}
diff --git a/desktop/source/deployment/misc/makefile.mk b/desktop/source/deployment/misc/makefile.mk
index e191169202fd..3e4bd68cb4c0 100644
--- a/desktop/source/deployment/misc/makefile.mk
+++ b/desktop/source/deployment/misc/makefile.mk
@@ -65,7 +65,8 @@ SHL1OBJS = \
$(SLO)$/dp_version.obj \
$(SLO)$/dp_descriptioninfoset.obj \
$(SLO)$/dp_dependencies.obj \
- $(SLO)$/dp_platform.obj
+ $(SLO)$/dp_platform.obj \
+ $(SLO)$/dp_update.obj
SHL1STDLIBS = \
$(BERKELEYLIB) \
@@ -75,7 +76,8 @@ SHL1STDLIBS = \
$(TOOLSLIB) \
$(UCBHELPERLIB) \
$(UNOTOOLSLIB) \
- $(XMLSCRIPTLIB)
+ $(XMLSCRIPTLIB) \
+ $(COMPHELPERLIB)
.IF "$(GUI)"=="OS2"
SHL1IMPLIB = ideploymentmisc$(DLLPOSTFIX)
LIB1TARGET = $(SLB)$/_deplmisc.lib
diff --git a/desktop/source/deployment/registry/component/dp_compbackenddb.cxx b/desktop/source/deployment/registry/component/dp_compbackenddb.cxx
new file mode 100644
index 000000000000..898e7c931f6d
--- /dev/null
+++ b/desktop/source/deployment/registry/component/dp_compbackenddb.cxx
@@ -0,0 +1,156 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "rtl/string.h"
+#include "rtl/bootstrap.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
+#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
+#include "dp_misc.h"
+
+#include "dp_compbackenddb.hxx"
+
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+
+#define EXTENSION_REG_NS "http://openoffice.org/extensionmanager/component-registry/2010"
+#define NS_PREFIX "comp"
+#define ROOT_ELEMENT_NAME "component-backend-db"
+#define KEY_ELEMENT_NAME "component"
+
+namespace dp_registry {
+namespace backend {
+namespace component {
+
+ComponentBackendDb::ComponentBackendDb(
+ Reference<XComponentContext> const & xContext,
+ ::rtl::OUString const & url):BackendDb(xContext, url)
+{
+
+}
+
+OUString ComponentBackendDb::getDbNSName()
+{
+ return OUSTR(EXTENSION_REG_NS);
+}
+
+OUString ComponentBackendDb::getNSPrefix()
+{
+ return OUSTR(NS_PREFIX);
+}
+
+OUString ComponentBackendDb::getRootElementName()
+{
+ return OUSTR(ROOT_ELEMENT_NAME);
+}
+
+OUString ComponentBackendDb::getKeyElementName()
+{
+ return OUSTR(KEY_ELEMENT_NAME);
+}
+
+void ComponentBackendDb::addEntry(::rtl::OUString const & url, Data const & data)
+{
+ try{
+ Reference<css::xml::dom::XNode> componentNode = writeKeyElement(url);
+ writeSimpleElement(OUSTR("java-type-library"),
+ OUString::valueOf((sal_Bool) data.javaTypeLibrary),
+ componentNode);
+
+ writeSimpleList(
+ data.implementationNames,
+ OUSTR("implementation-names"),
+ OUSTR("name"),
+ componentNode);
+
+ writeVectorOfPair(
+ data.singletons,
+ OUSTR("singletons"),
+ OUSTR("item"),
+ OUSTR("key"),
+ OUSTR("value"),
+ componentNode);
+
+ save();
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+ComponentBackendDb::Data ComponentBackendDb::getEntry(::rtl::OUString const & url)
+{
+ try
+ {
+ ComponentBackendDb::Data retData;
+ Reference<css::xml::dom::XNode> aNode = getKeyElement(url);
+ if (aNode.is())
+ {
+ bool bJava = readSimpleElement(OUSTR("java-type-library"), aNode)
+ .equals(OUSTR("true")) ? true : false;
+ retData.javaTypeLibrary = bJava;
+
+ retData.implementationNames =
+ readList(
+ aNode,
+ OUSTR("implementation-names"),
+ OUSTR("name"));
+
+ retData.singletons =
+ readVectorOfPair(
+ aNode,
+ OUSTR("singletons"),
+ OUSTR("item"),
+ OUSTR("key"),
+ OUSTR("value"));
+ }
+ return retData;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+
+} // namespace bundle
+} // namespace backend
+} // namespace dp_registry
+
diff --git a/desktop/source/deployment/registry/component/dp_compbackenddb.hxx b/desktop/source/deployment/registry/component/dp_compbackenddb.hxx
new file mode 100644
index 000000000000..b9a5ed737b7c
--- /dev/null
+++ b/desktop/source/deployment/registry/component/dp_compbackenddb.hxx
@@ -0,0 +1,120 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_COMPBACKENDDB_HXX
+#define INCLUDED_DP_COMPBACKENDDB_HXX
+
+#include "rtl/ustring.hxx"
+#include "rtl/string.hxx"
+#include <vector>
+#include <list>
+#include "dp_backenddb.hxx"
+
+namespace css = ::com::sun::star;
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class XComponentContext;
+ }
+ namespace xml { namespace dom {
+ class XDocument;
+ class XNode;
+ }}
+ namespace xml { namespace xpath {
+ class XXPathAPI;
+ }}
+}}}
+
+namespace dp_registry {
+namespace backend {
+namespace component {
+
+/* The XML file stores the extensions which are currently registered.
+ They will be removed when they are revoked.
+ The format looks like this:
+
+<?xml version="1.0"?>
+<component-backend-db xmlns="http://openoffice.org/extensionmanager/component-registry/2010">
+ <component url="vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages/5CD5.tmp_/leaves1.oxt/extensionoptions.jar">
+ <name>FileName</name>
+ <java-type-library>true</java-type-library>
+ <implementation-names>
+ <name>com.sun.star.comp.extensionoptions.OptionsEventHandler$_OptionsEventHandler</name>
+ ...
+ </implementation-names>
+ <singletons>
+ <item>
+ <key>com.sun.star.java.theJavaVirtualMachine</key>
+ <value>com.sun.star.java.JavaVirtualMachine</value>
+ </item>
+ ...
+ </singletons>
+ </component>
+
+ <component ...>
+ ...
+</component-backend-db>
+ */
+class ComponentBackendDb: public dp_registry::backend::BackendDb
+{
+protected:
+ virtual ::rtl::OUString getDbNSName();
+ virtual ::rtl::OUString getNSPrefix();
+ virtual ::rtl::OUString getRootElementName();
+ virtual ::rtl::OUString getKeyElementName();
+
+public:
+ struct Data
+ {
+ Data(): javaTypeLibrary(false) {};
+
+ ::std::list< ::rtl::OUString> implementationNames;
+ /* every singleton has a key and a value
+ */
+ ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString> >singletons;
+ bool javaTypeLibrary;
+ };
+
+public:
+
+ ComponentBackendDb( css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
+
+ void addEntry(::rtl::OUString const & url, Data const & data);
+
+ Data getEntry(::rtl::OUString const & url);
+
+
+};
+
+
+
+}
+}
+}
+#endif
+
diff --git a/desktop/source/deployment/registry/component/dp_component.cxx b/desktop/source/deployment/registry/component/dp_component.cxx
index e6781e2a1746..e0844c227669 100644
--- a/desktop/source/deployment/registry/component/dp_component.cxx
+++ b/desktop/source/deployment/registry/component/dp_component.cxx
@@ -58,7 +58,7 @@
#include <vector>
#include <memory>
#include <algorithm>
-
+#include "dp_compbackenddb.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
@@ -74,6 +74,8 @@ namespace {
typedef ::std::list<OUString> t_stringlist;
typedef ::std::vector< ::std::pair<OUString, OUString> > t_stringpairvec;
+#define IMPLEMENTATION_NAME "com.sun.star.comp.deployment.component.PackageRegistryBackend"
+
/** return a vector of bootstrap variables which have been provided
as command arguments.
*/
@@ -119,7 +121,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
BackendImpl * getMyBackend() const;
const OUString m_loader;
- Reference<XComponentContext> m_xRemoteContext;
+ ComponentBackendDb::Data m_registeredComponentsDb;
enum reg {
REG_UNINIT, REG_VOID, REG_REGISTERED, REG_NOT_REGISTERED, REG_MAYBE_REGISTERED
@@ -139,6 +141,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
@@ -149,16 +152,12 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
const Reference<registry::XSimpleRegistry> getRDB_RO() const;
public:
- inline ComponentPackageImpl(
+ ComponentPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
- OUString const & loader )
- : Package( myBackend, url, name, name /* display-name */,
- xPackageType ),
- m_loader( loader ),
- m_registered( REG_UNINIT )
- {}
+ OUString const & loader, bool bRemoved,
+ OUString const & identifier);
};
friend class ComponentPackageImpl;
@@ -179,19 +178,17 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
public:
- inline TypelibraryPackageImpl(
+ TypelibraryPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
- bool jarFile )
- : Package( myBackend, url, name, name /* display-name */,
- xPackageType ),
- m_jarFile( jarFile )
- {}
+ bool jarFile, bool bRemoved,
+ OUString const & identifier);
};
friend class TypelibraryPackageImpl;
@@ -212,6 +209,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
OUString const & url, OUString const & mediaType,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv );
virtual void SAL_CALL disposing();
@@ -230,6 +228,13 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
OUString m_commonRDB_RO;
OUString m_nativeRDB_RO;
+ std::auto_ptr<ComponentBackendDb> m_backendDb;
+
+ void addDataToDb(OUString const & url, ComponentBackendDb::Data const & data);
+ void deleteDataFromDb(OUString const & url);
+ ComponentBackendDb::Data readDataFromDb(OUString const & url);
+
+
//These rdbs are for writing new service entries. The rdb files are copies
//which are created when services are added or removed.
Reference<registry::XSimpleRegistry> m_xCommonRDB;
@@ -275,6 +280,25 @@ public:
};
//______________________________________________________________________________
+
+BackendImpl::ComponentPackageImpl::ComponentPackageImpl(
+ ::rtl::Reference<PackageRegistryBackend> const & myBackend,
+ OUString const & url, OUString const & name,
+ Reference<deployment::XPackageTypeInfo> const & xPackageType,
+ OUString const & loader, bool bRemoved,
+ OUString const & identifier)
+ : Package( myBackend, url, name, name /* display-name */,
+ xPackageType, bRemoved, identifier),
+ m_loader( loader ),
+ m_registered( REG_UNINIT )
+{
+ if (bRemoved)
+ {
+ m_registeredComponentsDb = getMyBackend()->readDataFromDb(url);
+ }
+}
+
+
const Reference<registry::XSimpleRegistry>
BackendImpl::ComponentPackageImpl::getRDB() const
{
@@ -332,7 +356,7 @@ BackendImpl * BackendImpl::ComponentPackageImpl::getMyBackend() const
//______________________________________________________________________________
void BackendImpl::ComponentPackageImpl::disposing()
{
- m_xRemoteContext.clear();
+// m_xRemoteContext.clear();
Package::disposing();
}
@@ -371,59 +395,59 @@ void BackendImpl::disposing()
}
}
+
void BackendImpl::initServiceRdbFiles()
{
const Reference<XCommandEnvironment> xCmdEnv;
- if (! m_readOnly)
+
+ ::ucbhelper::Content cacheDir( getCachePath(), xCmdEnv );
+ ::ucbhelper::Content oldRDB;
+ // switch common rdb:
+ if (m_commonRDB_RO.getLength() > 0)
{
- ::ucbhelper::Content cacheDir( getCachePath(), xCmdEnv );
- ::ucbhelper::Content oldRDB;
- // switch common rdb:
- if (m_commonRDB_RO.getLength() > 0)
- {
- create_ucb_content(
- &oldRDB, makeURL( getCachePath(), m_commonRDB_RO),
- xCmdEnv, false /* no throw */ );
- }
- m_commonRDB = m_commonRDB_RO.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("common.rdb") )
- ? OUSTR("common_.rdb") : OUSTR("common.rdb");
- if (oldRDB.get().is())
- {
- if (! cacheDir.transferContent(
+ create_ucb_content(
+ &oldRDB, makeURL( getCachePath(), m_commonRDB_RO),
+ xCmdEnv, false /* no throw */ );
+ }
+ m_commonRDB = m_commonRDB_RO.equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("common.rdb") )
+ ? OUSTR("common_.rdb") : OUSTR("common.rdb");
+ if (oldRDB.get().is())
+ {
+ if (! cacheDir.transferContent(
oldRDB, ::ucbhelper::InsertOperation_COPY,
m_commonRDB, NameClash::OVERWRITE ))
- {
-
- throw RuntimeException(
- OUSTR("UCB transferContent() failed!"), 0 );
- }
- oldRDB = ::ucbhelper::Content();
- }
- // switch native rdb:
- if (m_nativeRDB_RO.getLength() > 0)
{
- create_ucb_content(
- &oldRDB, makeURL(getCachePath(), m_nativeRDB_RO),
- xCmdEnv, false /* no throw */ );
+
+ throw RuntimeException(
+ OUSTR("UCB transferContent() failed!"), 0 );
}
- const OUString plt_rdb( getPlatformString() + OUSTR(".rdb") );
- const OUString plt_rdb_( getPlatformString() + OUSTR("_.rdb") );
- m_nativeRDB = m_nativeRDB_RO.equals( plt_rdb ) ? plt_rdb_ : plt_rdb;
- if (oldRDB.get().is())
- {
- if (! cacheDir.transferContent(
+ oldRDB = ::ucbhelper::Content();
+ }
+ // switch native rdb:
+ if (m_nativeRDB_RO.getLength() > 0)
+ {
+ create_ucb_content(
+ &oldRDB, makeURL(getCachePath(), m_nativeRDB_RO),
+ xCmdEnv, false /* no throw */ );
+ }
+ const OUString plt_rdb( getPlatformString() + OUSTR(".rdb") );
+ const OUString plt_rdb_( getPlatformString() + OUSTR("_.rdb") );
+ m_nativeRDB = m_nativeRDB_RO.equals( plt_rdb ) ? plt_rdb_ : plt_rdb;
+ if (oldRDB.get().is())
+ {
+ if (! cacheDir.transferContent(
oldRDB, ::ucbhelper::InsertOperation_COPY,
m_nativeRDB, NameClash::OVERWRITE ))
- throw RuntimeException(
+ throw RuntimeException(
OUSTR("UCB transferContent() failed!"), 0 );
- }
-
- // UNO is bootstrapped, flush for next process start:
- m_unorc_modified = true;
- unorc_flush( Reference<XCommandEnvironment>() );
}
+ // UNO is bootstrapped, flush for next process start:
+ m_unorc_modified = true;
+ unorc_flush( Reference<XCommandEnvironment>() );
+
+
// common rdb for java, native rdb for shared lib components
if (m_commonRDB.getLength() > 0) {
m_xCommonRDB.set(
@@ -433,7 +457,8 @@ void BackendImpl::initServiceRdbFiles()
m_xComponentContext ), UNO_QUERY_THROW );
m_xCommonRDB->open(
makeURL( expandUnoRcUrl(getCachePath()), m_commonRDB ),
- m_readOnly, !m_readOnly );
+// m_readOnly, !m_readOnly );
+ false, true);
}
if (m_nativeRDB.getLength() > 0) {
m_xNativeRDB.set(
@@ -443,7 +468,8 @@ void BackendImpl::initServiceRdbFiles()
m_xComponentContext ), UNO_QUERY_THROW );
m_xNativeRDB->open(
makeURL( expandUnoRcUrl(getCachePath()), m_nativeRDB ),
- m_readOnly, !m_readOnly );
+// m_readOnly, !m_readOnly );
+ false, true);
}
}
@@ -562,9 +588,33 @@ BackendImpl::BackendImpl(
initServiceRdbFiles_RO();
+ OUString dbFile = makeURL(getCachePath(), OUSTR("backenddb.xml"));
+ m_backendDb.reset(
+ new ComponentBackendDb(getComponentContext(), dbFile));
}
}
+void BackendImpl::addDataToDb(
+ OUString const & url, ComponentBackendDb::Data const & data)
+{
+ if (m_backendDb.get())
+ m_backendDb->addEntry(url, data);
+}
+
+void BackendImpl::deleteDataFromDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->removeEntry(url);
+}
+
+ComponentBackendDb::Data BackendImpl::readDataFromDb(OUString const & url)
+{
+ ComponentBackendDb::Data data;
+ if (m_backendDb.get())
+ data = m_backendDb->getEntry(url);
+ return data;
+}
+
// XPackageRegistry
//______________________________________________________________________________
Sequence< Reference<deployment::XPackageTypeInfo> >
@@ -577,6 +627,7 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::bindPackage_(
OUString const & url, OUString const & mediaType_,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv )
{
OUString mediaType(mediaType_);
@@ -632,9 +683,14 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
if (type.EqualsIgnoreCaseAscii("application"))
{
- ::ucbhelper::Content ucbContent( url, xCmdEnv );
- const OUString name( ucbContent.getPropertyValue(
- StrTitle::get() ).get<OUString>() );
+ OUString name;
+ if (!bRemoved)
+ {
+ ::ucbhelper::Content ucbContent( url, xCmdEnv );
+ name = ucbContent.getPropertyValue(
+ StrTitle::get() ).get<OUString>();
+ }
+
if (subType.EqualsIgnoreCaseAscii("vnd.sun.star.uno-component"))
{
// xxx todo: probe and evaluate component xml description
@@ -649,17 +705,20 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
if (value.EqualsIgnoreCaseAscii("native")) {
return new BackendImpl::ComponentPackageImpl(
this, url, name, m_xDynComponentTypeInfo,
- OUSTR("com.sun.star.loader.SharedLibrary") );
+ OUSTR("com.sun.star.loader.SharedLibrary"),
+ bRemoved, identifier);
}
if (value.EqualsIgnoreCaseAscii("Java")) {
return new BackendImpl::ComponentPackageImpl(
this, url, name, m_xJavaComponentTypeInfo,
- OUSTR("com.sun.star.loader.Java2") );
+ OUSTR("com.sun.star.loader.Java2"),
+ bRemoved, identifier);
}
if (value.EqualsIgnoreCaseAscii("Python")) {
return new BackendImpl::ComponentPackageImpl(
this, url, name, m_xPythonComponentTypeInfo,
- OUSTR("com.sun.star.loader.Python") );
+ OUSTR("com.sun.star.loader.Python"),
+ bRemoved, identifier);
}
}
}
@@ -675,12 +734,12 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
return new BackendImpl::TypelibraryPackageImpl(
this, url, name, m_xRDBTypelibTypeInfo,
- false /* rdb */ );
+ false /* rdb */, bRemoved, identifier);
}
if (value.EqualsIgnoreCaseAscii("Java")) {
return new BackendImpl::TypelibraryPackageImpl(
this, url, name, m_xJavaTypelibTypeInfo,
- true /* jar */ );
+ true /* jar */, bRemoved, identifier);
}
}
}
@@ -717,16 +776,18 @@ void BackendImpl::unorc_verify_init(
sal_Int32 index = sizeof ("UNO_JAVA_CLASSPATH=") - 1;
do {
OUString token( line.getToken( 0, ' ', index ).trim() );
- if (token.getLength() > 0) {
- // cleanup, check if existing:
+ if (token.getLength() > 0)
+ {
if (create_ucb_content(
0, expandUnoRcTerm(token), xCmdEnv,
- false /* no throw */ )) {
+ false /* no throw */ ))
+ {
+ //The jar file may not exist anymore if a shared or bundled
+ //extension was removed, but it can still be in the unorc
+ //After running XExtensionManager::synchronize, the unorc is
+ //cleaned up
m_jar_typelibs.push_back( token );
}
- else
- OSL_ENSURE(
- 0, "### invalid UNO_JAVA_CLASSPATH entry!" );
}
}
while (index >= 0);
@@ -736,17 +797,20 @@ void BackendImpl::unorc_verify_init(
sal_Int32 index = sizeof ("UNO_TYPES=") - 1;
do {
OUString token( line.getToken( 0, ' ', index ).trim() );
- if (token.getLength() > 0) {
+ if (token.getLength() > 0)
+ {
if (token[ 0 ] == '?')
token = token.copy( 1 );
- // cleanup, check if existing:
- if (create_ucb_content(
- 0, expandUnoRcTerm(token),
- xCmdEnv, false /* no throw */ )) {
- m_rdb_typelibs.push_back( token );
- }
- else
- OSL_ENSURE( 0, "### invalid UNO_TYPES entry!" );
+ if (create_ucb_content(
+ 0, expandUnoRcTerm(token), xCmdEnv,
+ false /* no throw */ ))
+ {
+ //The RDB file may not exist anymore if a shared or bundled
+ //extension was removed, but it can still be in the unorc.
+ //After running XExtensionManager::synchronize, the unorc is
+ //cleaned up
+ m_rdb_typelibs.push_back( token );
+ }
}
}
while (index >= 0);
@@ -785,18 +849,11 @@ void BackendImpl::unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv )
return;
::rtl::OStringBuffer buf;
- // UNO_USER_PACKAGES_CACHE, UNO_SHARED_PACKAGES_CACHE have to be resolved
- // locally:
- if (m_eContext == CONTEXT_USER) {
- buf.append( RTL_CONSTASCII_STRINGPARAM(
- "UNO_USER_PACKAGES_CACHE=$ORIGIN/../..") );
- }
- else if (m_eContext == CONTEXT_SHARED) {
- buf.append( RTL_CONSTASCII_STRINGPARAM(
- "UNO_SHARED_PACKAGES_CACHE=$ORIGIN/../..") );
- }
- else
- OSL_ASSERT(0);
+
+ buf.append(RTL_CONSTASCII_STRINGPARAM("ORIGIN="));
+ OUString sOrigin = dp_misc::makeRcTerm(m_cachePath);
+ ::rtl::OString osOrigin = ::rtl::OUStringToOString(sOrigin, RTL_TEXTENCODING_UTF8);
+ buf.append(osOrigin);
buf.append(LF);
if (! m_jar_typelibs.empty())
@@ -852,6 +909,9 @@ void BackendImpl::unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv )
// write native rc:
::rtl::OStringBuffer buf2;
+ buf2.append(RTL_CONSTASCII_STRINGPARAM("ORIGIN="));
+ buf2.append(osOrigin);
+ buf2.append(LF);
buf2.append( RTL_CONSTASCII_STRINGPARAM("UNO_SERVICES=?$ORIGIN/") );
buf2.append( ::rtl::OUStringToOString(
sNativeRDB, RTL_TEXTENCODING_ASCII_US ) );
@@ -882,28 +942,11 @@ void BackendImpl::unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv )
m_unorc_modified = false;
}
-//------------------------------------------------------------------------------
-inline OUString makeRcTerm( OUString const & url )
-{
- OSL_ASSERT( url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM(
- "vnd.sun.star.expand:") ) );
- if (url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.expand:") )) {
- // cut protocol:
- OUString rcterm( url.copy( sizeof ("vnd.sun.star.expand:") - 1 ) );
- // decode uric class chars:
- rcterm = ::rtl::Uri::decode(
- rcterm, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
- return rcterm;
- }
- else
- return url;
-}
-
//______________________________________________________________________________
bool BackendImpl::addToUnoRc( bool jarFile, OUString const & url_,
Reference<XCommandEnvironment> const & xCmdEnv )
{
- const OUString rcterm( makeRcTerm(url_) );
+ const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
unorc_verify_init( xCmdEnv );
t_stringlist & rSet = getTypelibs(jarFile);
@@ -923,7 +966,7 @@ bool BackendImpl::removeFromUnoRc(
bool jarFile, OUString const & url_,
Reference<XCommandEnvironment> const & xCmdEnv )
{
- const OUString rcterm( makeRcTerm(url_) );
+ const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
unorc_verify_init( xCmdEnv );
getTypelibs(jarFile).remove( rcterm );
@@ -937,7 +980,7 @@ bool BackendImpl::removeFromUnoRc(
bool BackendImpl::hasInUnoRc(
bool jarFile, OUString const & url_ )
{
- const OUString rcterm( makeRcTerm(url_) );
+ const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
t_stringlist const & rSet = getTypelibs(jarFile);
return ::std::find( rSet.begin(), rSet.end(), rcterm ) != rSet.end();
@@ -1174,6 +1217,7 @@ BackendImpl::ComponentPackageImpl::isRegistered_(
void BackendImpl::ComponentPackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv )
{
@@ -1183,16 +1227,25 @@ void BackendImpl::ComponentPackageImpl::processPackage_(
const bool java = m_loader.equalsAsciiL(
RTL_CONSTASCII_STRINGPARAM("com.sun.star.loader.Java2") );
const OUString url( getURL() );
- bool isJavaTypelib = java &&
- !jarManifestHeaderPresent( url, OUSTR("UNO-Type-Path"), xCmdEnv );
+ bool isJavaTypelib;
+ if (m_bRemoved)
+ isJavaTypelib = m_registeredComponentsDb.javaTypeLibrary;
+ else
+ isJavaTypelib = java &&
+ !jarManifestHeaderPresent( url, OUSTR("UNO-Type-Path"), xCmdEnv );
+ ComponentBackendDb::Data data;
+ data.javaTypeLibrary = isJavaTypelib;
if (doRegisterPackage)
{
- if (! m_xRemoteContext.is()) {
- m_xRemoteContext.set(
+ Reference <uno::XComponentContext> context(that->getComponentContext());
+ if (! startup)
+ {
+ context.set(
that->getObject( url ), UNO_QUERY );
- if (! m_xRemoteContext.is()) {
- m_xRemoteContext.set(
+
+ if (! context.is()) {
+ context.set(
that->insertObject( url, raise_uno_process(
that->getComponentContext(),
abortChannel ) ),
@@ -1202,147 +1255,170 @@ void BackendImpl::ComponentPackageImpl::processPackage_(
const Reference<registry::XSimpleRegistry> xServicesRDB( getRDB() );
const Reference<registry::XImplementationRegistration> xImplReg(
- m_xRemoteContext->getServiceManager()->createInstanceWithContext(
+ context->getServiceManager()->createInstanceWithContext(
OUSTR("com.sun.star.registry.ImplementationRegistration"),
- m_xRemoteContext ), UNO_QUERY_THROW );
+ context ), UNO_QUERY_THROW );
xImplReg->registerImplementation( m_loader, url, xServicesRDB );
//only write to unorc if registration was successful.
//It may fail if there is no suitable java.
if (isJavaTypelib)
+ {
that->addToUnoRc( java, url, xCmdEnv );
+ data.javaTypeLibrary = true;
+ }
t_stringlist implNames;
t_stringpairvec singletons;
- const Reference<loader::XImplementationLoader> xLoader(
- getComponentInfo( &implNames, &singletons, m_xRemoteContext ) );
-
- // factories live insertion:
- const Reference<container::XSet> xSet(
- that->getComponentContext()->getServiceManager(), UNO_QUERY_THROW );
- for ( t_stringlist::const_iterator iPos( implNames.begin() );
- iPos != implNames.end(); ++iPos )
+ const Reference<loader::XImplementationLoader> xLoader(
+ getComponentInfo( &implNames, &singletons, context ) );
+ data.implementationNames = implNames;
+ data.singletons = singletons;
+
+ if (!startup)
{
- checkAborted( abortChannel );
- OUString const & implName = *iPos;
- // activate factory:
- const Reference<XInterface> xFactory(
- xLoader->activate(
- implName, OUString(), url,
- xServicesRDB->getRootKey()->openKey(
- OUSTR("/IMPLEMENTATIONS/") + implName ) ) );
- try {
- xSet->insert( Any(xFactory) );
- } // ignore if factory has already been inserted:
- catch (container::ElementExistException &) {
- OSL_ENSURE( 0, "### factory already registered?" );
+ // factories live insertion:
+ const Reference<container::XSet> xSet(
+ that->getComponentContext()->getServiceManager(), UNO_QUERY_THROW );
+ for ( t_stringlist::const_iterator iPos( implNames.begin() );
+ iPos != implNames.end(); ++iPos )
+ {
+ checkAborted( abortChannel );
+ OUString const & implName = *iPos;
+ // activate factory:
+ const Reference<XInterface> xFactory(
+ xLoader->activate(
+ implName, OUString(), url,
+ xServicesRDB->getRootKey()->openKey(
+ OUSTR("/IMPLEMENTATIONS/") + implName ) ) );
+ try {
+ xSet->insert( Any(xFactory) );
+ } // ignore if factory has already been inserted:
+ catch (container::ElementExistException &) {
+ OSL_ENSURE( 0, "### factory already registered?" );
+ }
}
- }
- if (! singletons.empty())
- {
- // singletons live insertion:
- const Reference<container::XNameContainer> xRootContext(
- that->getComponentContext()->getValueByName(
- OUSTR("_root") ), UNO_QUERY );
- if (xRootContext.is())
+ if (! singletons.empty())
{
- for ( t_stringpairvec::const_iterator iPos(
- singletons.begin() );
- iPos != singletons.end(); ++iPos )
+ // singletons live insertion:
+ const Reference<container::XNameContainer> xRootContext(
+ that->getComponentContext()->getValueByName(
+ OUSTR("_root") ), UNO_QUERY );
+ if (xRootContext.is())
{
- ::std::pair<OUString, OUString> const & sp = *iPos;
- const OUString name( OUSTR("/singletons/") + sp.first );
- // assure no arguments:
- try {
- xRootContext->removeByName( name + OUSTR("/arguments"));
- } catch (container::NoSuchElementException &) {}
- // used service:
- try {
- xRootContext->insertByName(
- name + OUSTR("/service"), Any(sp.second) );
- } catch (container::ElementExistException &) {
- xRootContext->replaceByName(
- name + OUSTR("/service"), Any(sp.second) );
- }
- // singleton entry:
- try {
- xRootContext->insertByName( name, Any() );
- } catch (container::ElementExistException & exc) {
- (void) exc; // avoid warnings
- OSL_ENSURE(
- 0, OUStringToOString(
- exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
- xRootContext->replaceByName( name, Any() );
+ for ( t_stringpairvec::const_iterator iPos(
+ singletons.begin() );
+ iPos != singletons.end(); ++iPos )
+ {
+ ::std::pair<OUString, OUString> const & sp = *iPos;
+ const OUString name( OUSTR("/singletons/") + sp.first );
+ // assure no arguments:
+ try {
+ xRootContext->removeByName( name + OUSTR("/arguments"));
+ } catch (container::NoSuchElementException &) {}
+ // used service:
+ try {
+ xRootContext->insertByName(
+ name + OUSTR("/service"), Any(sp.second) );
+ } catch (container::ElementExistException &) {
+ xRootContext->replaceByName(
+ name + OUSTR("/service"), Any(sp.second) );
+ }
+ // singleton entry:
+ try {
+ xRootContext->insertByName( name, Any() );
+ } catch (container::ElementExistException & exc) {
+ (void) exc; // avoid warnings
+ OSL_ENSURE(
+ 0, OUStringToOString(
+ exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
+ xRootContext->replaceByName( name, Any() );
+ }
}
}
}
}
m_registered = REG_REGISTERED;
+ getMyBackend()->addDataToDb(url, data);
}
else // revokePackage()
{
// set to VOID during revocation process:
m_registered = REG_VOID;
- Reference<XComponentContext> xContext;
- if (m_xRemoteContext.is()) // has been activated in this process
- xContext = m_xRemoteContext;
- else // has been deployed in former times
+ //get the remote context. If it does not exist then use the local one
+ Reference<XComponentContext> xContext(
+ that->getObject( url ), UNO_QUERY );
+ bool bRemoteContext = false;
+ if (!xContext.is())
xContext = that->getComponentContext();
+ else
+ bRemoteContext = true;
t_stringlist implNames;
t_stringpairvec singletons;
- getComponentInfo( &implNames, &singletons, xContext );
-
- // factories live removal:
- const Reference<container::XSet> xSet(
- that->getComponentContext()->getServiceManager(), UNO_QUERY_THROW );
- for ( t_stringlist::const_iterator iPos( implNames.begin() );
- iPos != implNames.end(); ++iPos )
+ if (m_bRemoved)
{
- OUString const & implName = *iPos;
- try {
- xSet->remove( Any(implName) );
- } // ignore if factory has not been live deployed:
- catch (container::NoSuchElementException &) {
- }
+ implNames = m_registeredComponentsDb.implementationNames;
+ singletons = m_registeredComponentsDb.singletons;
+ }
+ else
+ {
+ getComponentInfo( &implNames, &singletons, xContext );
}
- if (! singletons.empty())
+ if (!startup)
{
- // singletons live removal:
- const Reference<container::XNameContainer> xRootContext(
- that->getComponentContext()->getValueByName(
- OUSTR("_root") ), UNO_QUERY );
- if (xRootContext.is())
+ // factories live removal:
+ const Reference<container::XSet> xSet(
+ that->getComponentContext()->getServiceManager(), UNO_QUERY_THROW );
+ for ( t_stringlist::const_iterator iPos( implNames.begin() );
+ iPos != implNames.end(); ++iPos )
+ {
+ OUString const & implName = *iPos;
+ try {
+ xSet->remove( Any(implName) );
+ } // ignore if factory has not been live deployed:
+ catch (container::NoSuchElementException &) {
+ }
+ }
+
+ if (! singletons.empty())
{
- for ( t_stringpairvec::const_iterator iPos(
- singletons.begin() );
- iPos != singletons.end(); ++iPos )
+ // singletons live removal:
+ const Reference<container::XNameContainer> xRootContext(
+ that->getComponentContext()->getValueByName(
+ OUSTR("_root") ), UNO_QUERY );
+ if (xRootContext.is())
{
- ::std::pair<OUString, OUString> const & sp = *iPos;
- const OUString name( OUSTR("/singletons/") + sp.first );
- // arguments:
- try {
- xRootContext->removeByName( name + OUSTR("/arguments"));
- }
- catch (container::NoSuchElementException &) {}
- // used service:
- try {
- xRootContext->removeByName( name + OUSTR("/service") );
- }
- catch (container::NoSuchElementException &) {}
- // singleton entry:
- try {
- xRootContext->removeByName( name );
- }
- catch (container::NoSuchElementException & exc) {
- (void) exc; // avoid warnings
- OSL_ENSURE(
- 0, OUStringToOString(
- exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
+ for ( t_stringpairvec::const_iterator iPos(
+ singletons.begin() );
+ iPos != singletons.end(); ++iPos )
+ {
+ ::std::pair<OUString, OUString> const & sp = *iPos;
+ const OUString name( OUSTR("/singletons/") + sp.first );
+ // arguments:
+ try {
+ xRootContext->removeByName( name + OUSTR("/arguments"));
+ }
+ catch (container::NoSuchElementException &) {}
+ // used service:
+ try {
+ xRootContext->removeByName( name + OUSTR("/service") );
+ }
+ catch (container::NoSuchElementException &) {}
+ // singleton entry:
+ try {
+ xRootContext->removeByName( name );
+ }
+ catch (container::NoSuchElementException & exc) {
+ (void) exc; // avoid warnings
+ OSL_ENSURE(
+ 0, OUStringToOString(
+ exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
+ }
}
}
}
@@ -1358,16 +1434,25 @@ void BackendImpl::ComponentPackageImpl::processPackage_(
if (isJavaTypelib)
that->removeFromUnoRc( java, url, xCmdEnv );
- if (m_xRemoteContext.is()) {
+ if (bRemoteContext)
that->releaseObject( url );
- m_xRemoteContext.clear();
- }
m_registered = REG_NOT_REGISTERED;
+ getMyBackend()->deleteDataFromDb(url);
}
}
//##############################################################################
+BackendImpl::TypelibraryPackageImpl::TypelibraryPackageImpl(
+ ::rtl::Reference<PackageRegistryBackend> const & myBackend,
+ OUString const & url, OUString const & name,
+ Reference<deployment::XPackageTypeInfo> const & xPackageType,
+ bool jarFile, bool bRemoved, OUString const & identifier)
+ : Package( myBackend, url, name, name /* display-name */,
+ xPackageType, bRemoved, identifier),
+ m_jarFile( jarFile )
+{
+}
// Package
BackendImpl * BackendImpl::TypelibraryPackageImpl::getMyBackend() const
@@ -1403,6 +1488,7 @@ BackendImpl::TypelibraryPackageImpl::isRegistered_(
void BackendImpl::TypelibraryPackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool /*startup*/,
::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & xCmdEnv )
{
@@ -1490,7 +1576,7 @@ namespace sdecl = comphelper::service_decl;
sdecl::class_<BackendImpl, sdecl::with_args<true> > serviceBI;
extern sdecl::ServiceDecl const serviceDecl(
serviceBI,
- "com.sun.star.comp.deployment.component.PackageRegistryBackend",
+ IMPLEMENTATION_NAME,
BACKEND_SERVICE_NAME );
} // namespace component
diff --git a/desktop/source/deployment/registry/component/makefile.mk b/desktop/source/deployment/registry/component/makefile.mk
index 4c4016f9bf6c..b7ee5c203cd5 100644
--- a/desktop/source/deployment/registry/component/makefile.mk
+++ b/desktop/source/deployment/registry/component/makefile.mk
@@ -40,7 +40,8 @@ SRC1FILES = \
INCPRE += ..$/..$/inc
SLOFILES = \
- $(SLO)$/dp_component.obj
+ $(SLO)$/dp_component.obj \
+ $(SLO)$/dp_compbackenddb.obj
.INCLUDE : ..$/..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/registry/configuration/dp_configuration.cxx b/desktop/source/deployment/registry/configuration/dp_configuration.cxx
index 6cf6d4ff7818..9ea6e8227340 100644
--- a/desktop/source/deployment/registry/configuration/dp_configuration.cxx
+++ b/desktop/source/deployment/registry/configuration/dp_configuration.cxx
@@ -35,7 +35,6 @@
#include "dp_backend.h"
#include "dp_persmap.h"
#include "dp_ucb.h"
-#include "dp_xml.h"
#include "rtl/string.hxx"
#include "rtl/ustrbuf.hxx"
#include "rtl/uri.hxx"
@@ -55,6 +54,7 @@
#include <list>
#include <memory>
+#include "dp_configurationbackenddb.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
@@ -86,6 +86,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
@@ -94,9 +95,9 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
- bool isSchema )
+ bool isSchema, bool bRemoved, OUString const & identifier)
: Package( myBackend, url, name, name /* display-name */,
- xPackageType ),
+ xPackageType, bRemoved, identifier),
m_isSchema( isSchema )
{}
};
@@ -110,10 +111,12 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
bool m_configmgrini_inited;
bool m_configmgrini_modified;
+ std::auto_ptr<ConfigurationBackendDb> m_backendDb;
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
- OUString const & url, OUString const & mediaType,
+ OUString const & url, OUString const & mediaType, sal_Bool bRemoved,
+ OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv );
::std::auto_ptr<PersistentMap> m_registeredPackages;
@@ -133,7 +136,11 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
Reference<XCommandEnvironment> const & xCmdEnv );
bool removeFromConfigmgrIni( bool isSchema, OUString const & url,
Reference<XCommandEnvironment> const & xCmdEnv );
- bool hasInConfigmgrIni( bool isSchema, OUString const & url );
+
+ void addDataToDb(OUString const & url, ConfigurationBackendDb::Data const & data);
+ ::boost::optional<ConfigurationBackendDb::Data> readDataFromDb(OUString const & url);
+ void deleteDataFromDb(OUString const & url);
+ ::std::list<OUString> getAllIniEntries();
public:
BackendImpl( Sequence<Any> const & args,
@@ -191,18 +198,64 @@ BackendImpl::BackendImpl(
const Reference<XCommandEnvironment> xCmdEnv;
- if (transientMode()) {
+ if (transientMode())
+ {
//TODO
}
- else {
+ else
+ {
+ OUString dbFile = makeURL(getCachePath(), OUSTR("backenddb.xml"));
+ m_backendDb.reset(
+ new ConfigurationBackendDb(getComponentContext(), dbFile));
+ //clean up data folders which are no longer used.
+ //This must not be done in the same process where the help files
+ //are still registers. Only after revoking and restarting OOo the folders
+ //can be removed. This works now, because the extension manager is a singleton
+ //and the backends are only create once per process.
+ ::std::list<OUString> folders = m_backendDb->getAllDataUrls();
+ deleteUnusedFolders(OUString(), folders);
+
+
configmgrini_verify_init( xCmdEnv );
m_registeredPackages.reset(
new PersistentMap(
makeURL( getCachePath(), OUSTR("registered_packages.db") ),
- m_readOnly ) );
- }
+ false ) );
+ }
}
+void BackendImpl::addDataToDb(
+ OUString const & url, ConfigurationBackendDb::Data const & data)
+{
+ if (m_backendDb.get())
+ m_backendDb->addEntry(url, data);
+}
+
+::boost::optional<ConfigurationBackendDb::Data> BackendImpl::readDataFromDb(
+ OUString const & url)
+{
+ ::boost::optional<ConfigurationBackendDb::Data> data;
+ if (m_backendDb.get())
+ data = m_backendDb->getEntry(url);
+ return data;
+}
+
+void BackendImpl::deleteDataFromDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->removeEntry(url);
+}
+
+::std::list<OUString> BackendImpl::getAllIniEntries()
+{
+ if (m_backendDb.get())
+ return m_backendDb->getAllIniEntries();
+ else
+ return ::std::list<OUString>();
+}
+
+
+
// XPackageRegistry
//______________________________________________________________________________
Sequence< Reference<deployment::XPackageTypeInfo> >
@@ -215,6 +268,7 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::bindPackage_(
OUString const & url, OUString const & mediaType_,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv )
{
OUString mediaType( mediaType_ );
@@ -249,20 +303,27 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
if (type.EqualsIgnoreCaseAscii("application"))
{
+ OUString name;
+ if (!bRemoved)
+ {
+ ::ucbhelper::Content ucbContent( url, xCmdEnv );
+ name = ucbContent.getPropertyValue(
+ StrTitle::get() ).get<OUString>();
+ }
+
::ucbhelper::Content ucbContent( url, xCmdEnv );
if (subType.EqualsIgnoreCaseAscii(
- "vnd.sun.star.configuration-data")) {
+ "vnd.sun.star.configuration-data"))
+ {
return new PackageImpl(
- this, url, ucbContent.getPropertyValue(
- StrTitle::get() ).get<OUString>(),
- m_xConfDataTypeInfo, false /* data file */ );
+ this, url, name, m_xConfDataTypeInfo, false /* data file */,
+ bRemoved, identifier);
}
else if (subType.EqualsIgnoreCaseAscii(
"vnd.sun.star.configuration-schema")) {
return new PackageImpl(
- this, url, ucbContent.getPropertyValue(
- StrTitle::get() ).get<OUString>(),
- m_xConfSchemaTypeInfo, true /* schema file */ );
+ this, url, name, m_xConfSchemaTypeInfo, true /* schema file */,
+ bRemoved, identifier);
}
}
}
@@ -302,11 +363,12 @@ void BackendImpl::configmgrini_verify_init(
if (create_ucb_content(
0, expandUnoRcTerm(token), xCmdEnv,
false /* no throw */ )) {
+ //The file may not exist anymore if a shared or bundled
+ //extension was removed, but it can still be in the configmgrini.
+ //After running XExtensionManager::synchronize, the configmgrini is
+ //cleaned up
m_xcs_files.push_back( token );
}
- else
- OSL_ENSURE(
- 0, "### invalid SCHEMA entry!" );
}
}
while (index >= 0);
@@ -323,10 +385,24 @@ void BackendImpl::configmgrini_verify_init(
if (create_ucb_content(
0, expandUnoRcTerm(token),
xCmdEnv, false /* no throw */ )) {
+ //The file may not exist anymore if a shared or bundled
+ //extension was removed, but it can still be in the configmgrini.
+ //After running XExtensionManager::synchronize, the configmgrini is
+ //cleaned up
m_xcu_files.push_back( token );
}
else
- OSL_ENSURE( 0, "### invalid DATA entry!" );
+ {
+ //Check if it was removed. Only when the file contained %origin, so that
+ //a new file was writen in the user installation (e.g. $BUNDLED_EXTENSIONS_USER)
+ //See also ConfigurationBackendDb.iniEntry
+ ::std::list<OUString> iniEntries = getAllIniEntries();
+ if (::std::find(iniEntries.begin(), iniEntries.end(), token)
+ != iniEntries.end())
+ m_xcu_files.push_back( token );
+ else
+ OSL_ENSURE(0, "Extension manager: Invalid configmgr.ini entry.");
+ }
}
}
while (index >= 0);
@@ -347,20 +423,6 @@ void BackendImpl::configmgrini_flush(
return;
::rtl::OStringBuffer buf;
- // UNO_USER_PACKAGES_CACHE, UNO_SHARED_PACKAGES_CACHE have to be resolved
- // locally:
- if (m_eContext == CONTEXT_USER) {
- buf.append( RTL_CONSTASCII_STRINGPARAM(
- "UNO_USER_PACKAGES_CACHE=$ORIGIN/../..") );
- }
- else if (m_eContext == CONTEXT_SHARED) {
- buf.append( RTL_CONSTASCII_STRINGPARAM(
- "UNO_SHARED_PACKAGES_CACHE=$ORIGIN/../..") );
- }
- else
- OSL_ASSERT(0);
- buf.append(LF);
-
if (! m_xcs_files.empty())
{
t_stringlist::const_iterator iPos( m_xcs_files.begin() );
@@ -407,28 +469,11 @@ void BackendImpl::configmgrini_flush(
m_configmgrini_modified = false;
}
-//------------------------------------------------------------------------------
-inline OUString makeRcTerm( OUString const & url )
-{
- OSL_ASSERT( url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM(
- "vnd.sun.star.expand:") ) );
- if (url.matchAsciiL( RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.expand:") )) {
- // cut protocol:
- OUString rcterm( url.copy( sizeof ("vnd.sun.star.expand:") - 1 ) );
- // decode uric class chars:
- rcterm = ::rtl::Uri::decode(
- rcterm, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
- return rcterm;
- }
- else
- return url;
-}
-
//______________________________________________________________________________
bool BackendImpl::addToConfigmgrIni( bool isSchema, OUString const & url_,
Reference<XCommandEnvironment> const & xCmdEnv )
{
- const OUString rcterm( makeRcTerm(url_) );
+ const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
configmgrini_verify_init( xCmdEnv );
t_stringlist & rSet = getFiles(isSchema);
@@ -448,15 +493,18 @@ bool BackendImpl::removeFromConfigmgrIni(
bool isSchema, OUString const & url_,
Reference<XCommandEnvironment> const & xCmdEnv )
{
- const OUString rcterm( makeRcTerm(url_) );
+ const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
configmgrini_verify_init( xCmdEnv );
t_stringlist & rSet = getFiles(isSchema);
t_stringlist::iterator i(std::find(rSet.begin(), rSet.end(), rcterm));
- if (i == rSet.end() && !isSchema) { //TODO: see replaceOrigin()
- i = std::find(
- rSet.begin(), rSet.end(),
- rcterm + OUString(RTL_CONSTASCII_USTRINGPARAM(".mod")));
+ if (i == rSet.end() && !isSchema)
+ {
+ //in case the xcu contained %origin% then the configmr.ini contains the
+ //url to the file in the user installation (e.g. $BUNDLED_EXTENSIONS_USER)
+ ::boost::optional<ConfigurationBackendDb::Data> data = readDataFromDb(url_);
+ if (data)
+ i = std::find(rSet.begin(), rSet.end(), data->iniEntry);
}
if (i == rSet.end()) {
return false;
@@ -468,21 +516,6 @@ bool BackendImpl::removeFromConfigmgrIni(
return true;
}
-//______________________________________________________________________________
-bool BackendImpl::hasInConfigmgrIni(
- bool isSchema, OUString const & url_ )
-{
- const OUString rcterm( makeRcTerm(url_) );
- const ::osl::MutexGuard guard( getMutex() );
- t_stringlist const & rSet = getFiles(isSchema);
- return ::std::find( rSet.begin(), rSet.end(), rcterm ) != rSet.end()
- || (!isSchema && //TODO: see replaceOrigin()
- ::std::find(
- rSet.begin(), rSet.end(),
- rcterm + OUString(RTL_CONSTASCII_USTRINGPARAM(".mod"))) !=
- rSet.end());
-}
-
//##############################################################################
// Package
@@ -509,14 +542,18 @@ BackendImpl::PackageImpl::isRegistered_(
Reference<XCommandEnvironment> const & )
{
BackendImpl * that = getMyBackend();
- rtl::OUString url(getURL());
+ const rtl::OUString url(getURL());
+
+ bool bReg = false;
+ if (that->readDataFromDb(getURL()))
+ bReg = true;
+ if (!bReg)
+ //fallback for user extension registered in berkeley DB
+ bReg = that->m_registeredPackages->has(
+ rtl::OUStringToOString( url, RTL_TEXTENCODING_UTF8 ));
+
return beans::Optional< beans::Ambiguous<sal_Bool> >(
- true /* IsPresent */,
- beans::Ambiguous<sal_Bool>(
- that->hasInConfigmgrIni( m_isSchema, url ) ||
- that->m_registeredPackages->has(
- rtl::OUStringToOString( url, RTL_TEXTENCODING_UTF8 ) ),
- false /* IsAmbiguous */ ) );
+ true, beans::Ambiguous<sal_Bool>( bReg, false ) );
}
//------------------------------------------------------------------------------
@@ -554,7 +591,7 @@ OUString encodeForXml( OUString const & text )
//______________________________________________________________________________
OUString replaceOrigin(
- OUString const & url, Reference< XCommandEnvironment > const & xCmdEnv )
+ OUString const & url, OUString const & destFolder, Reference< XCommandEnvironment > const & xCmdEnv, bool & out_replaced)
{
// looking for %origin%:
::ucbhelper::Content ucb_content( url, xCmdEnv );
@@ -624,10 +661,17 @@ OUString replaceOrigin(
return url;
if (write_pos < filtered.getLength())
filtered.realloc( write_pos );
- rtl::OUString newUrl(url + OUString(RTL_CONSTASCII_USTRINGPARAM(".mod")));
- //TODO: unique name
+ rtl::OUString newUrl(url);
+ if (destFolder.getLength())
+ {
+ //get the file name of the xcu and add it to the url of the temporary folder
+ sal_Int32 i = url.lastIndexOf('/');
+ newUrl = destFolder + url.copy(i);
+ }
+
ucbhelper::Content(newUrl, xCmdEnv).writeStream(
xmlscript::createInputStream(filtered), true);
+ out_replaced = true;
return newUrl;
}
@@ -635,6 +679,7 @@ OUString replaceOrigin(
void BackendImpl::PackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & xCmdEnv )
{
@@ -643,21 +688,38 @@ void BackendImpl::PackageImpl::processPackage_(
if (doRegisterPackage)
{
- if (m_isSchema)
+ ConfigurationBackendDb::Data data;
+ if (!m_isSchema)
{
- com::sun::star::configuration::Update::get(
- that->m_xComponentContext)->insertExtensionXcsFile(
- that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url));
+ const OUString sModFolder = that->createFolder(OUString(), xCmdEnv);
+ bool out_replaced = false;
+ url = replaceOrigin(url, sModFolder, xCmdEnv, out_replaced);
+ if (out_replaced)
+ data.dataUrl = sModFolder;
+ else
+ deleteTempFolder(sModFolder);
}
- else
+ //No need for live-deployment for bundled extension, because OOo
+ //restarts after installation
+ if (that->m_eContext != CONTEXT_BUNDLED
+ && !startup)
{
- url = replaceOrigin(url, xCmdEnv);
- com::sun::star::configuration::Update::get(
- that->m_xComponentContext)->insertExtensionXcuFile(
- that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url));
+ if (m_isSchema)
+ {
+ com::sun::star::configuration::Update::get(
+ that->m_xComponentContext)->insertExtensionXcsFile(
+ that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url));
+ }
+ else
+ {
+ com::sun::star::configuration::Update::get(
+ that->m_xComponentContext)->insertExtensionXcuFile(
+ that->m_eContext == CONTEXT_SHARED, expandUnoRcUrl(url));
+ }
}
-
that->addToConfigmgrIni( m_isSchema, url, xCmdEnv );
+ data.iniEntry = dp_misc::makeRcTerm(url);
+ that->addDataToDb(getURL(), data);
}
else // revoke
{
@@ -667,15 +729,31 @@ void BackendImpl::PackageImpl::processPackage_(
for (t_string2string_map::iterator i(entries.begin());
i != entries.end(); ++i)
{
+ //If the xcu file was installed before the configmgr was chaned
+ //to use the configmgr.ini, one needed to rebuild to whole directory
+ //structur containing the xcu, xcs files from all extensions. Now,
+ //we just add all other xcu/xcs files to the configmgr.ini instead of
+ //rebuilding the directory structure.
rtl::OUString url2(
rtl::OStringToOUString(i->first, RTL_TEXTENCODING_UTF8));
+ ConfigurationBackendDb::Data data;
if (url2 != url) {
- bool schema = i->second.equalsIgnoreAsciiCase(
- "vnd.sun.star.configuration-schema");
- if (!schema) {
- url2 = replaceOrigin(url2, xCmdEnv);
- }
- that->addToConfigmgrIni(schema, url2, xCmdEnv);
+ bool schema = i->second.equalsIgnoreAsciiCase(
+ "vnd.sun.star.configuration-schema");
+ OUString url_replaced(url2);
+ if (!schema)
+ {
+ const OUString sModFolder = that->createFolder(OUString(), xCmdEnv);
+ bool out_replaced = false;
+ url_replaced = replaceOrigin(
+ url2, sModFolder, xCmdEnv, out_replaced);
+ if (out_replaced)
+ data.dataUrl = sModFolder;
+ else
+ deleteTempFolder(sModFolder);
+ }
+ that->addToConfigmgrIni(schema, url_replaced, xCmdEnv);
+ that->addDataToDb(url2, data);
}
that->m_registeredPackages->erase(i->first);
}
@@ -684,6 +762,7 @@ void BackendImpl::PackageImpl::processPackage_(
xCmdEnv ).executeCommand(
OUSTR("delete"), Any( true /* delete physically */ ) );
}
+ that->deleteDataFromDb(getURL());
//TODO: revoking at runtime, possible, sensible?
}
diff --git a/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx
new file mode 100644
index 000000000000..845ba88cb813
--- /dev/null
+++ b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.cxx
@@ -0,0 +1,186 @@
+/*************************************************************************
+ *
+ * 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: dp_package.cxx,v $
+ * $Revision: 1.34.16.2 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "rtl/string.h"
+#include "rtl/bootstrap.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
+#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
+#include "dp_misc.h"
+
+#include "dp_configurationbackenddb.hxx"
+
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+
+#define EXTENSION_REG_NS "http://openoffice.org/extensionmanager/configuration-registry/2010"
+#define NS_PREFIX "conf"
+#define ROOT_ELEMENT_NAME "configuration-backend-db"
+#define KEY_ELEMENT_NAME "configuration"
+
+namespace dp_registry {
+namespace backend {
+namespace configuration {
+
+ConfigurationBackendDb::ConfigurationBackendDb(
+ Reference<XComponentContext> const & xContext,
+ ::rtl::OUString const & url):BackendDb(xContext, url)
+{
+
+}
+
+OUString ConfigurationBackendDb::getDbNSName()
+{
+ return OUSTR(EXTENSION_REG_NS);
+}
+
+OUString ConfigurationBackendDb::getNSPrefix()
+{
+ return OUSTR(NS_PREFIX);
+}
+
+OUString ConfigurationBackendDb::getRootElementName()
+{
+ return OUSTR(ROOT_ELEMENT_NAME);
+}
+
+OUString ConfigurationBackendDb::getKeyElementName()
+{
+ return OUSTR(KEY_ELEMENT_NAME);
+}
+
+
+void ConfigurationBackendDb::addEntry(::rtl::OUString const & url, Data const & data)
+{
+ try{
+ Reference<css::xml::dom::XNode> helpNode
+ = writeKeyElement(url);
+
+ writeSimpleElement(OUSTR("data-url"), data.dataUrl, helpNode);
+ writeSimpleElement(OUSTR("ini-entry"), data.iniEntry, helpNode);
+ save();
+ }
+ catch (css::deployment::DeploymentException& )
+ {
+ throw;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in configuration backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+
+::boost::optional<ConfigurationBackendDb::Data>
+ConfigurationBackendDb::getEntry(::rtl::OUString const & url)
+{
+ try
+ {
+ ConfigurationBackendDb::Data retData;
+ Reference<css::xml::dom::XNode> aNode = getKeyElement(url);
+ if (aNode.is())
+ {
+ retData.dataUrl = readSimpleElement(OUSTR("data-url"), aNode);
+ retData.iniEntry = readSimpleElement(OUSTR("ini-entry"), aNode);
+ }
+ else
+ {
+ return ::boost::optional<Data>();
+ }
+ return ::boost::optional<Data>(retData);
+ }
+ catch (css::deployment::DeploymentException& )
+ {
+ throw;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in configuration backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+::std::list<OUString> ConfigurationBackendDb::getAllDataUrls()
+{
+ try
+ {
+ ::std::list<OUString> listRet;
+ Reference<css::xml::dom::XDocument> doc = getDocument();
+ Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+
+ Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ const OUString sPrefix = getNSPrefix();
+ OUString sExpression(
+ sPrefix + OUSTR(":configuration/") + sPrefix + OUSTR(":data-url/text()"));
+ Reference<css::xml::dom::XNodeList> nodes =
+ xpathApi->selectNodeList(root, sExpression);
+ if (nodes.is())
+ {
+ sal_Int32 length = nodes->getLength();
+ for (sal_Int32 i = 0; i < length; i++)
+ listRet.push_back(nodes->item(i)->getNodeValue());
+ }
+ return listRet;
+ }
+ catch (css::deployment::DeploymentException& )
+ {
+ throw;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in configuration backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+::std::list<OUString> ConfigurationBackendDb::getAllIniEntries()
+{
+ return getOneChildFromAllEntries(OUSTR("ini-entry"));
+}
+
+
+
+} // namespace configuration
+} // namespace backend
+} // namespace dp_registry
+
diff --git a/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx
new file mode 100644
index 000000000000..1b6c4f8973a4
--- /dev/null
+++ b/desktop/source/deployment/registry/configuration/dp_configurationbackenddb.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * 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: dp_backend.h,v $
+ * $Revision: 1.18 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_CONFIGURATIONBACKENDDB_HXX
+#define INCLUDED_DP_CONFIGURATIONBACKENDDB_HXX
+
+#include "rtl/ustring.hxx"
+#include "rtl/string.hxx"
+#include <list>
+#include "boost/optional.hpp"
+#include "dp_backenddb.hxx"
+
+namespace css = ::com::sun::star;
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class XComponentContext;
+ }
+}}}
+
+namespace dp_registry {
+namespace backend {
+namespace configuration {
+
+/* The XML file stores the extensions which are currently registered.
+ They will be removed when they are revoked.
+ */
+class ConfigurationBackendDb: public dp_registry::backend::BackendDb
+{
+protected:
+ virtual ::rtl::OUString getDbNSName();
+
+ virtual ::rtl::OUString getNSPrefix();
+
+ virtual ::rtl::OUString getRootElementName();
+
+ virtual ::rtl::OUString getKeyElementName();
+
+public:
+ struct Data
+ {
+ /* the URL to the folder containing the xcu or xcs files which contained
+ %origin%
+ */
+ ::rtl::OUString dataUrl;
+ /* the URL of the xcu or xcs file which is written in to the configmgr.ini
+ */
+ ::rtl::OUString iniEntry;
+ };
+
+public:
+
+ ConfigurationBackendDb( css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
+
+ void addEntry(::rtl::OUString const & url, Data const & data);
+
+ ::boost::optional<Data> getEntry(::rtl::OUString const & url);
+ ::std::list< ::rtl::OUString> getAllDataUrls();
+ ::std::list< ::rtl::OUString> getAllIniEntries();
+};
+
+
+
+}
+}
+}
+#endif
+
diff --git a/desktop/source/deployment/registry/configuration/makefile.mk b/desktop/source/deployment/registry/configuration/makefile.mk
index f549b0e7b0f8..9bcbd50d4230 100644
--- a/desktop/source/deployment/registry/configuration/makefile.mk
+++ b/desktop/source/deployment/registry/configuration/makefile.mk
@@ -44,7 +44,8 @@ SRC1FILES = \
dp_configuration.src
SLOFILES = \
- $(SLO)$/dp_configuration.obj
+ $(SLO)$/dp_configuration.obj \
+ $(SLO)$/dp_configurationbackenddb.obj
.INCLUDE : ..$/..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/registry/dp_backend.cxx b/desktop/source/deployment/registry/dp_backend.cxx
index c06b30be1669..d781ba9e40ef 100644
--- a/desktop/source/deployment/registry/dp_backend.cxx
+++ b/desktop/source/deployment/registry/dp_backend.cxx
@@ -31,12 +31,19 @@
#include "dp_backend.h"
#include "dp_ucb.h"
#include "rtl/uri.hxx"
+#include "rtl/bootstrap.hxx"
+#include "osl/file.hxx"
#include "cppuhelper/exc_hlp.hxx"
#include "comphelper/servicedecl.hxx"
#include "comphelper/unwrapargs.hxx"
#include "ucbhelper/content.hxx"
#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
+#include "com/sun/star/deployment/InvalidRemovedParameterException.hpp"
+#include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp"
+#include "com/sun/star/ucb/IOErrorCode.hpp"
#include "com/sun/star/beans/StringPair.hpp"
+#include "com/sun/star/sdbc/XResultSet.hpp"
+#include "com/sun/star/sdbc/XRow.hpp"
using namespace ::dp_misc;
@@ -88,6 +95,10 @@ PackageRegistryBackend::PackageRegistryBackend(
m_eContext = CONTEXT_USER;
else if (m_context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("shared") ))
m_eContext = CONTEXT_SHARED;
+ else if (m_context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("bundled") ))
+ m_eContext = CONTEXT_BUNDLED;
+ else if (m_context.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("tmp") ))
+ m_eContext = CONTEXT_TMP;
else if (m_context.matchIgnoreAsciiCaseAsciiL(
RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.tdoc:/") ))
m_eContext = CONTEXT_DOCUMENT;
@@ -127,24 +138,41 @@ void PackageRegistryBackend::disposing()
// XPackageRegistry
//______________________________________________________________________________
Reference<deployment::XPackage> PackageRegistryBackend::bindPackage(
- OUString const & url, OUString const & mediaType,
- Reference<XCommandEnvironment> const & xCmdEnv )
- throw (deployment::DeploymentException, CommandFailedException,
+ OUString const & url, OUString const & mediaType, sal_Bool bRemoved,
+ OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv )
+ throw (deployment::DeploymentException,
+ deployment::InvalidRemovedParameterException,
+ ucb::CommandFailedException,
lang::IllegalArgumentException, RuntimeException)
{
::osl::ResettableMutexGuard guard( getMutex() );
check();
+
t_string2ref::const_iterator const iFind( m_bound.find( url ) );
- if (iFind != m_bound.end()) {
+ if (iFind != m_bound.end())
+ {
Reference<deployment::XPackage> xPackage( iFind->second );
if (xPackage.is())
+ {
+ if (mediaType.getLength() &&
+ mediaType != xPackage->getPackageType()->getMediaType())
+ throw lang::IllegalArgumentException
+ (OUSTR("XPackageRegistry::bindPackage: media type does not match"),
+ static_cast<OWeakObject*>(this), 1);
+ if (xPackage->isRemoved() != bRemoved)
+ throw deployment::InvalidRemovedParameterException(
+ OUSTR("XPackageRegistry::bindPackage: bRemoved parameter does not match"),
+ static_cast<OWeakObject*>(this), xPackage->isRemoved(), xPackage);
return xPackage;
+ }
}
+
guard.clear();
Reference<deployment::XPackage> xNewPackage;
try {
- xNewPackage = bindPackage_( url, mediaType, xCmdEnv );
+ xNewPackage = bindPackage_( url, mediaType, bRemoved,
+ identifier, xCmdEnv );
}
catch (RuntimeException &) {
throw;
@@ -166,6 +194,7 @@ Reference<deployment::XPackage> PackageRegistryBackend::bindPackage(
}
guard.reset();
+
::std::pair< t_string2ref::iterator, bool > insertion(
m_bound.insert( t_string2ref::value_type( url, xNewPackage ) ) );
if (insertion.second)
@@ -180,11 +209,105 @@ Reference<deployment::XPackage> PackageRegistryBackend::bindPackage(
return xPackage;
insertion.first->second = xNewPackage;
}
+
guard.clear();
xNewPackage->addEventListener( this ); // listen for disposing events
return xNewPackage;
}
+OUString PackageRegistryBackend::createFolder(
+ OUString const & relUrl,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+{
+ OUString sDataFolder = makeURL(getCachePath(), relUrl);
+ //make sure the folder exist
+ ucbhelper::Content dataContent;
+ ::dp_misc::create_folder(&dataContent, sDataFolder, xCmdEnv);
+
+ OUString sDataFolderURL = dp_misc::expandUnoRcUrl(sDataFolder);
+
+ OUString tempEntry;
+ if (::osl::File::createTempFile(
+ &sDataFolderURL, 0, &tempEntry ) != ::osl::File::E_None)
+ throw RuntimeException(
+ OUSTR("::osl::File::createTempFile() failed!"), 0 );
+ tempEntry = tempEntry.copy( tempEntry.lastIndexOf( '/' ) + 1 );
+ OUString destFolder= makeURL(sDataFolder, tempEntry) + OUSTR("_");
+ ::ucbhelper::Content destFolderContent;
+ dp_misc::create_folder( &destFolderContent, destFolder, xCmdEnv );
+
+ return destFolder;
+}
+
+void PackageRegistryBackend::deleteTempFolder(
+ OUString const & folderUrl)
+{
+ OSL_ASSERT(folderUrl.getLength()
+ && folderUrl[folderUrl.getLength() - 1] == '_');
+ if (folderUrl.getLength()
+ && folderUrl[folderUrl.getLength() - 1] == '_')
+ {
+ const OUString tempFile = folderUrl.copy(0, folderUrl.getLength() - 1);
+ erase_path( folderUrl, Reference<XCommandEnvironment>(),
+ false /* no throw: ignore errors */ );
+ erase_path( tempFile, Reference<XCommandEnvironment>(),
+ false /* no throw: ignore errors */ );
+ }
+}
+
+void PackageRegistryBackend::deleteUnusedFolders(
+ OUString const & relUrl,
+ ::std::list< OUString> const & usedFolders)
+{
+ try
+ {
+ const OUString sDataFolder = makeURL(getCachePath(), relUrl);
+ ::ucbhelper::Content tempFolder(
+ sDataFolder, Reference<ucb::XCommandEnvironment>());
+ Reference<sdbc::XResultSet> xResultSet(
+ tempFolder.createCursor(
+ Sequence<OUString>( &StrTitle::get(), 1 ),
+ ::ucbhelper::INCLUDE_DOCUMENTS_ONLY ) );
+ // get all temp directories:
+ ::std::vector<OUString> tempEntries;
+
+ char tmp[] = ".tmp";
+
+ while (xResultSet->next())
+ {
+ OUString title(
+ Reference<sdbc::XRow>(
+ xResultSet, UNO_QUERY_THROW )->getString(
+ 1 /* Title */ ) );
+
+ if (title.endsWithAsciiL(tmp, sizeof(tmp) - 1))
+ tempEntries.push_back(
+ makeURLAppendSysPathSegment(sDataFolder, title));
+ }
+
+ for ( ::std::size_t pos = 0; pos < tempEntries.size(); ++pos )
+ {
+ //usedFolders contains the urls to the folders which have
+ //a trailing underscore
+ const OUString tempFolderName = tempEntries[ pos ] + OUSTR("_");
+
+ if (::std::find( usedFolders.begin(), usedFolders.end(), tempFolderName ) ==
+ usedFolders.end())
+ {
+ deleteTempFolder(tempFolderName);
+ }
+ }
+ }
+ catch (ucb::InteractiveAugmentedIOException& e)
+ {
+ //In case the folder containing all the data folder does not
+ //exist yet, we ignore the exception
+ if (e.Code != ucb::IOErrorCode_NOT_EXISTING)
+ throw e;
+ }
+
+}
+
//##############################################################################
//______________________________________________________________________________
@@ -195,16 +318,30 @@ Package::~Package()
//______________________________________________________________________________
Package::Package( ::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url,
- OUString const & name,
+ OUString const & rName,
OUString const & displayName,
- Reference<deployment::XPackageTypeInfo> const & xPackageType )
+ Reference<deployment::XPackageTypeInfo> const & xPackageType,
+ bool bRemoved,
+ OUString const & identifier)
: t_PackageBase( getMutex() ),
m_myBackend( myBackend ),
m_url( url ),
- m_name( name ),
+ m_name( rName ),
m_displayName( displayName ),
- m_xPackageType( xPackageType )
+ m_xPackageType( xPackageType ),
+ m_bRemoved(bRemoved),
+ m_identifier(identifier)
{
+ if (m_bRemoved)
+ {
+ //We use the last segment of the URL
+ OSL_ASSERT(m_name.getLength() == 0);
+ OUString name = m_url;
+ rtl::Bootstrap::expandMacros(name);
+ sal_Int32 index = name.lastIndexOf('/');
+ if (index != -1 && index < name.getLength())
+ m_name = name.copy(index + 1);
+ }
}
//______________________________________________________________________________
@@ -294,25 +431,31 @@ sal_Bool Package::isBundle() throw (RuntimeException)
}
//______________________________________________________________________________
-::sal_Bool Package::checkPrerequisites(
+::sal_Int32 Package::checkPrerequisites(
const css::uno::Reference< css::task::XAbortChannel >&,
const css::uno::Reference< css::ucb::XCommandEnvironment >&,
- sal_Bool, ::rtl::OUString const &)
+ sal_Bool)
throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::ucb::CommandAbortedException,
- css::uno::RuntimeException)
+ css::deployment::ExtensionRemovedException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::uno::RuntimeException)
{
- return true;
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+ return 0;
}
//______________________________________________________________________________
::sal_Bool Package::checkDependencies(
const css::uno::Reference< css::ucb::XCommandEnvironment >& )
throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::uno::RuntimeException)
+ css::deployment::ExtensionRemovedException,
+ css::ucb::CommandFailedException,
+ css::uno::RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
return true;
}
@@ -336,12 +479,19 @@ OUString Package::getName() throw (RuntimeException)
beans::Optional<OUString> Package::getIdentifier() throw (RuntimeException)
{
+ if (m_bRemoved)
+ return beans::Optional<OUString>(true, m_identifier);
+
return beans::Optional<OUString>();
}
//______________________________________________________________________________
-OUString Package::getVersion() throw (RuntimeException)
+OUString Package::getVersion() throw (
+ deployment::ExtensionRemovedException,
+ RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
return OUString();
}
@@ -352,33 +502,49 @@ OUString Package::getURL() throw (RuntimeException)
}
//______________________________________________________________________________
-OUString Package::getDisplayName() throw (RuntimeException)
+OUString Package::getDisplayName() throw (
+ deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
return m_displayName;
}
//______________________________________________________________________________
-OUString Package::getDescription() throw (RuntimeException)
+OUString Package::getDescription() throw (
+ deployment::ExtensionRemovedException,RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
return OUString();
}
//______________________________________________________________________________
-Sequence<OUString> Package::getUpdateInformationURLs() throw (RuntimeException)
+Sequence<OUString> Package::getUpdateInformationURLs() throw (
+ deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
return Sequence<OUString>();
}
//______________________________________________________________________________
-css::beans::StringPair Package::getPublisherInfo() throw (RuntimeException)
+css::beans::StringPair Package::getPublisherInfo() throw (
+ deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
css::beans::StringPair aEmptyPair;
return aEmptyPair;
}
//______________________________________________________________________________
-uno::Reference< css::graphic::XGraphic > Package::getIcon( sal_Bool /*bHighContrast*/ ) throw ( RuntimeException )
+uno::Reference< css::graphic::XGraphic > Package::getIcon( sal_Bool /*bHighContrast*/ )
+ throw (deployment::ExtensionRemovedException, RuntimeException )
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+
uno::Reference< css::graphic::XGraphic > aEmpty;
return aEmpty;
}
@@ -394,8 +560,12 @@ Reference<deployment::XPackageTypeInfo> Package::getPackageType()
void Package::exportTo(
OUString const & destFolderURL, OUString const & newTitle,
sal_Int32 nameClashAction, Reference<XCommandEnvironment> const & xCmdEnv )
- throw (CommandFailedException, CommandAbortedException, RuntimeException)
+ throw (deployment::ExtensionRemovedException,
+ CommandFailedException, CommandAbortedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+
::ucbhelper::Content destFolder( destFolderURL, xCmdEnv );
::ucbhelper::Content sourceContent( getURL(), xCmdEnv );
if (! destFolder.transferContent(
@@ -461,6 +631,7 @@ beans::Optional< beans::Ambiguous<sal_Bool> > Package::isRegistered(
//______________________________________________________________________________
void Package::processPackage_impl(
bool doRegisterPackage,
+ bool startup,
Reference<task::XAbortChannel> const & xAbortChannel,
Reference<XCommandEnvironment> const & xCmdEnv )
{
@@ -478,7 +649,8 @@ void Package::processPackage_impl(
(doRegisterPackage ? !option.Value.Value
: option.Value.Value)));
if (action) {
- OUString displayName( getDisplayName() );
+
+ OUString displayName = isRemoved() ? getName() : getDisplayName();
ProgressLevel progress(
xCmdEnv,
(doRegisterPackage
@@ -487,6 +659,7 @@ void Package::processPackage_impl(
+ displayName );
processPackage_( guard,
doRegisterPackage,
+ startup,
AbortChannel::get(xAbortChannel),
xCmdEnv );
}
@@ -524,13 +697,17 @@ void Package::processPackage_impl(
//______________________________________________________________________________
void Package::registerPackage(
+ sal_Bool startup,
Reference<task::XAbortChannel> const & xAbortChannel,
Reference<XCommandEnvironment> const & xCmdEnv )
throw (deployment::DeploymentException,
+ deployment::ExtensionRemovedException,
CommandFailedException, CommandAbortedException,
lang::IllegalArgumentException, RuntimeException)
{
- processPackage_impl( true /* register */, xAbortChannel, xCmdEnv );
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+ processPackage_impl( true /* register */, startup, xAbortChannel, xCmdEnv );
}
//______________________________________________________________________________
@@ -541,7 +718,44 @@ void Package::revokePackage(
CommandFailedException, CommandAbortedException,
lang::IllegalArgumentException, RuntimeException)
{
- processPackage_impl( false /* revoke */, xAbortChannel, xCmdEnv );
+ processPackage_impl( false /* revoke */, false, xAbortChannel, xCmdEnv );
+
+}
+
+PackageRegistryBackend * Package::getMyBackend() const
+{
+ PackageRegistryBackend * pBackend = m_myBackend.get();
+ if (NULL == pBackend)
+ {
+ //May throw a DisposedException
+ check();
+ //We should never get here...
+ throw RuntimeException(
+ OUSTR("Failed to get the BackendImpl"),
+ static_cast<OWeakObject*>(const_cast<Package *>(this)));
+ }
+ return pBackend;
+}
+OUString Package::getRepositoryName()
+ throw (RuntimeException)
+{
+ PackageRegistryBackend * backEnd = getMyBackend();
+ return backEnd->getContext();
+}
+
+beans::Optional< OUString > Package::getRegistrationDataURL()
+ throw (deployment::ExtensionRemovedException,
+ css::uno::RuntimeException)
+{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+ return beans::Optional<OUString>();
+}
+
+sal_Bool Package::isRemoved()
+ throw (RuntimeException)
+{
+ return m_bRemoved;
}
//##############################################################################
@@ -559,13 +773,15 @@ OUString Package::TypeInfo::getMediaType() throw (RuntimeException)
}
//______________________________________________________________________________
-OUString Package::TypeInfo::getDescription() throw (RuntimeException)
+OUString Package::TypeInfo::getDescription()
+ throw (deployment::ExtensionRemovedException, RuntimeException)
{
return getShortDescription();
}
//______________________________________________________________________________
-OUString Package::TypeInfo::getShortDescription() throw (RuntimeException)
+OUString Package::TypeInfo::getShortDescription()
+ throw (deployment::ExtensionRemovedException, RuntimeException)
{
return m_shortDescr;
}
diff --git a/desktop/source/deployment/registry/dp_backenddb.cxx b/desktop/source/deployment/registry/dp_backenddb.cxx
new file mode 100644
index 000000000000..14b4f2374c5b
--- /dev/null
+++ b/desktop/source/deployment/registry/dp_backenddb.cxx
@@ -0,0 +1,649 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "rtl/string.h"
+#include "rtl/strbuf.hxx"
+#include "rtl/bootstrap.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "osl/file.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
+#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
+#include "com/sun/star/io/XActiveDataSource.hpp"
+#include "com/sun/star/io/XActiveDataControl.hpp"
+#include "dp_ucb.h"
+#include "dp_misc.h"
+#include "ucbhelper/content.hxx"
+#include "xmlscript/xml_helper.hxx"
+#include "dp_backenddb.hxx"
+
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+
+
+namespace dp_registry {
+namespace backend {
+
+BackendDb::BackendDb(
+ Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url):
+ m_xContext(xContext)
+{
+ m_urlDb = dp_misc::expandUnoRcUrl(url);
+}
+
+void BackendDb::save()
+{
+ const Reference<css::io::XActiveDataSource> xDataSource(m_doc,css::uno::UNO_QUERY_THROW);
+ ::rtl::ByteSequence bytes;
+ xDataSource->setOutputStream(::xmlscript::createOutputStream(&bytes));
+ const Reference<css::io::XActiveDataControl> xDataControl(m_doc,css::uno::UNO_QUERY_THROW);
+ xDataControl->start();
+
+ const Reference<css::io::XInputStream> xData(
+ ::xmlscript::createInputStream(bytes));
+ ::ucbhelper::Content ucbDb(m_urlDb, 0);
+ ucbDb.writeStream(xData, true /*replace existing*/);
+}
+
+css::uno::Reference<css::xml::dom::XDocument> BackendDb::getDocument()
+{
+ if (!m_doc.is())
+ {
+ const Reference<css::xml::dom::XDocumentBuilder> xDocBuilder(
+ m_xContext->getServiceManager()->createInstanceWithContext(
+ OUSTR("com.sun.star.xml.dom.DocumentBuilder"),
+ m_xContext ), css::uno::UNO_QUERY);
+ if (!xDocBuilder.is())
+ throw css::uno::RuntimeException(
+ OUSTR(" Could not create service com.sun.star.xml.dom.DocumentBuilder"), 0);
+
+ ::osl::DirectoryItem item;
+ ::osl::File::RC err = ::osl::DirectoryItem::get(m_urlDb, item);
+ if (err == ::osl::File::E_None)
+ {
+ m_doc = xDocBuilder->parseURI(m_urlDb);
+ }
+ else if (err == ::osl::File::E_NOENT)
+ {
+ //Create a new document and insert some basic stuff
+ m_doc = xDocBuilder->newDocument();
+ const Reference<css::xml::dom::XElement> rootNode =
+ m_doc->createElementNS(getDbNSName(), getNSPrefix() +
+ OUSTR(":") + getRootElementName());
+
+ m_doc->appendChild(Reference<css::xml::dom::XNode>(
+ rootNode, UNO_QUERY_THROW));
+ save();
+ }
+ else
+ throw css::uno::RuntimeException(
+ OUSTR("Extension manager could not access database file:" )
+ + m_urlDb, 0);
+
+ if (!m_doc.is())
+ throw css::uno::RuntimeException(
+ OUSTR("Extension manager could not get root node of data base file: ")
+ + m_urlDb, 0);
+ }
+
+ return m_doc;
+}
+
+Reference<css::xml::xpath::XXPathAPI> BackendDb::getXPathAPI()
+{
+ if (!m_xpathApi.is())
+ {
+ m_xpathApi = Reference< css::xml::xpath::XXPathAPI >(
+ m_xContext->getServiceManager()->createInstanceWithContext(
+ OUSTR("com.sun.star.xml.xpath.XPathAPI"),
+ m_xContext), css::uno::UNO_QUERY);
+
+ if (!m_xpathApi.is())
+ throw css::uno::RuntimeException(
+ OUSTR(" Could not create service com.sun.star.xml.xpath.XPathAPI"), 0);
+
+ m_xpathApi->registerNS(
+ getNSPrefix(), getDbNSName());
+ }
+
+ return m_xpathApi;
+}
+
+void BackendDb::removeElement(::rtl::OUString const & sXPathExpression)
+{
+ try
+ {
+ const Reference<css::xml::dom::XDocument> doc = getDocument();
+ const Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+ const Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ //find the extension element that is to be removed
+ const Reference<css::xml::dom::XNode> aNode =
+ xpathApi->selectSingleNode(root, sXPathExpression);
+
+ if (aNode.is())
+ {
+ root->removeChild(aNode);
+ save();
+ }
+
+#if OSL_DEBUG_LEVEL > 0
+ //There must not be any other entry with the same url
+ const Reference<css::xml::dom::XNode> nextNode =
+ xpathApi->selectSingleNode(root, sXPathExpression);
+ OSL_ASSERT(! nextNode.is());
+#endif
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+void BackendDb::removeEntry(::rtl::OUString const & url)
+{
+ const OUString sKeyElement = getKeyElementName();
+ const OUString sPrefix = getNSPrefix();
+ ::rtl::OUStringBuffer sExpression(500);
+ sExpression.append(sPrefix);
+ sExpression.appendAscii(":");
+ sExpression.append(sKeyElement);
+ sExpression.append(OUSTR("[@url = \""));
+ sExpression.append(url);
+ sExpression.appendAscii("\"]");
+
+ removeElement(sExpression.makeStringAndClear());
+}
+
+Reference<css::xml::dom::XNode> BackendDb::getKeyElement(
+ ::rtl::OUString const & url)
+{
+ try
+ {
+ const OUString sPrefix = getNSPrefix();
+ const OUString sKeyElement = getKeyElementName();
+ ::rtl::OUStringBuffer sExpression(500);
+ sExpression.append(sPrefix);
+ sExpression.appendAscii(":");
+ sExpression.append(sKeyElement);
+ sExpression.append(OUSTR("[@url = \""));
+ sExpression.append(url);
+ sExpression.appendAscii("\"]");
+
+ const Reference<css::xml::dom::XDocument> doc = getDocument();
+ const Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+ const Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ return xpathApi->selectSingleNode(root, sExpression.makeStringAndClear());
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read key element in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+//Only writes the data if there is at least one entry
+void BackendDb::writeVectorOfPair(
+ ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString > > const & vecPairs,
+ OUString const & sVectorTagName,
+ OUString const & sPairTagName,
+ OUString const & sFirstTagName,
+ OUString const & sSecondTagName,
+ css::uno::Reference<css::xml::dom::XNode> const & xParent)
+{
+ try{
+ if (vecPairs.size() == 0)
+ return;
+ const OUString sNameSpace = getDbNSName();
+ OSL_ASSERT(sNameSpace.getLength());
+ const OUString sPrefix(getNSPrefix() + OUSTR(":"));
+ const Reference<css::xml::dom::XDocument> doc = getDocument();
+ const Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+
+ const Reference<css::xml::dom::XElement> vectorNode(
+ doc->createElementNS(sNameSpace, sPrefix + sVectorTagName));
+
+ xParent->appendChild(
+ Reference<css::xml::dom::XNode>(
+ vectorNode, css::uno::UNO_QUERY_THROW));
+ typedef ::std::vector< ::std::pair< OUString, OUString > >::const_iterator CIT;
+ for (CIT i = vecPairs.begin(); i != vecPairs.end(); i++)
+ {
+ const Reference<css::xml::dom::XElement> pairNode(
+ doc->createElementNS(sNameSpace, sPrefix + sPairTagName));
+
+ vectorNode->appendChild(
+ Reference<css::xml::dom::XNode>(
+ pairNode, css::uno::UNO_QUERY_THROW));
+
+ const Reference<css::xml::dom::XElement> firstNode(
+ doc->createElementNS(sNameSpace, sPrefix + sFirstTagName));
+
+ pairNode->appendChild(
+ Reference<css::xml::dom::XNode>(
+ firstNode, css::uno::UNO_QUERY_THROW));
+
+ const Reference<css::xml::dom::XText> firstTextNode(
+ doc->createTextNode( i->first));
+
+ firstNode->appendChild(
+ Reference<css::xml::dom::XNode>(
+ firstTextNode, css::uno::UNO_QUERY_THROW));
+
+ const Reference<css::xml::dom::XElement> secondNode(
+ doc->createElementNS(sNameSpace, sPrefix + sSecondTagName));
+
+ pairNode->appendChild(
+ Reference<css::xml::dom::XNode>(
+ secondNode, css::uno::UNO_QUERY_THROW));
+
+ const Reference<css::xml::dom::XText> secondTextNode(
+ doc->createTextNode( i->second));
+
+ secondNode->appendChild(
+ Reference<css::xml::dom::XNode>(
+ secondTextNode, css::uno::UNO_QUERY_THROW));
+ }
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+::std::vector< ::std::pair< OUString, OUString > >
+BackendDb::readVectorOfPair(
+ Reference<css::xml::dom::XNode> const & parent,
+ OUString const & sListTagName,
+ OUString const & sPairTagName,
+ OUString const & sFirstTagName,
+ OUString const & sSecondTagName)
+{
+ try
+ {
+ OSL_ASSERT(parent.is());
+ const OUString sPrefix(getNSPrefix() + OUSTR(":"));
+ const Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ const OUString sExprPairs(
+ sPrefix + sListTagName + OUSTR("/") + sPrefix + sPairTagName);
+ const Reference<css::xml::dom::XNodeList> listPairs =
+ xpathApi->selectNodeList(parent, sExprPairs);
+
+ ::std::vector< ::std::pair< OUString, OUString > > retVector;
+ sal_Int32 length = listPairs->getLength();
+ for (sal_Int32 i = 0; i < length; i++)
+ {
+ const Reference<css::xml::dom::XNode> aPair = listPairs->item(i);
+ const OUString sExprFirst(sPrefix + sFirstTagName + OUSTR("/text()"));
+ const Reference<css::xml::dom::XNode> first =
+ xpathApi->selectSingleNode(aPair, sExprFirst);
+
+ const OUString sExprSecond(sPrefix + sSecondTagName + OUSTR("/text()"));
+ const Reference<css::xml::dom::XNode> second =
+ xpathApi->selectSingleNode(aPair, sExprSecond);
+ OSL_ASSERT(first.is() && second.is());
+
+ retVector.push_back(::std::make_pair(
+ first->getNodeValue(), second->getNodeValue()));
+ }
+ return retVector;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+//Only writes the data if there is at least one entry
+void BackendDb::writeSimpleList(
+ ::std::list< ::rtl::OUString> const & list,
+ OUString const & sListTagName,
+ OUString const & sMemberTagName,
+ Reference<css::xml::dom::XNode> const & xParent)
+{
+ try
+ {
+ if (list.size() == 0)
+ return;
+ const OUString sNameSpace = getDbNSName();
+ const OUString sPrefix(getNSPrefix() + OUSTR(":"));
+ const Reference<css::xml::dom::XDocument> doc = getDocument();
+
+ const Reference<css::xml::dom::XElement> listNode(
+ doc->createElementNS(sNameSpace, sPrefix + sListTagName));
+
+ xParent->appendChild(
+ Reference<css::xml::dom::XNode>(
+ listNode, css::uno::UNO_QUERY_THROW));
+
+ typedef ::std::list<OUString>::const_iterator ITC_ITEMS;
+ for (ITC_ITEMS i = list.begin(); i != list.end(); i++)
+ {
+ const Reference<css::xml::dom::XNode> memberNode(
+ doc->createElementNS(sNameSpace, sPrefix + sMemberTagName), css::uno::UNO_QUERY_THROW);
+
+ listNode->appendChild(memberNode);
+
+ const Reference<css::xml::dom::XNode> textNode(
+ doc->createTextNode( *i), css::uno::UNO_QUERY_THROW);
+
+ memberNode->appendChild(textNode);
+ }
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+//Writes only the element if is has a value.
+//The prefix is automatically added to the element name
+void BackendDb::writeSimpleElement(
+ OUString const & sElementName, OUString const & value,
+ Reference<css::xml::dom::XNode> const & xParent)
+{
+ try
+ {
+ if (value.getLength() == 0)
+ return;
+ const OUString sPrefix = getNSPrefix();
+ const Reference<css::xml::dom::XDocument> doc = getDocument();
+ const OUString sNameSpace = getDbNSName();
+ const Reference<css::xml::dom::XNode> dataNode(
+ doc->createElementNS(sNameSpace, sPrefix + OUSTR(":") + sElementName),
+ UNO_QUERY_THROW);
+ xParent->appendChild(dataNode);
+
+ const Reference<css::xml::dom::XNode> dataValue(
+ doc->createTextNode(value), UNO_QUERY_THROW);
+ dataNode->appendChild(dataValue);
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry(writeSimpleElement) in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+
+}
+
+/** The key elements have an url attribute and are always children of the root
+ element.
+*/
+Reference<css::xml::dom::XNode> BackendDb::writeKeyElement(
+ ::rtl::OUString const & url)
+{
+ try
+ {
+ const OUString sNameSpace = getDbNSName();
+ const OUString sPrefix = getNSPrefix();
+ const OUString sElementName = getKeyElementName();
+ const Reference<css::xml::dom::XDocument> doc = getDocument();
+ const Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+
+ //Check if there are an entry with the same url. This can be the case if the
+ //the status of an XPackage is ambiguous. In this case a call to activateExtension
+ //(dp_extensionmanager.cxx), will register the package again. See also
+ //Package::processPackage_impl in dp_backend.cxx.
+ //A package can become
+ //invalid after its successful registration, for example if a second extension with
+ //the same service is installed.
+ const OUString sExpression(
+ sPrefix + OUSTR(":") + sElementName + OUSTR("[@url = \"") + url + OUSTR("\"]"));
+ const Reference<css::xml::dom::XNode> existingNode =
+ getXPathAPI()->selectSingleNode(root, sExpression);
+ if (existingNode.is())
+ {
+ OSL_ASSERT(0);
+ //replace the existing entry.
+ removeEntry(url);
+ }
+
+ const Reference<css::xml::dom::XElement> keyElement(
+ doc->createElementNS(sNameSpace, sPrefix + OUSTR(":") + sElementName));
+
+ keyElement->setAttribute(OUSTR("url"), url);
+
+ const Reference<css::xml::dom::XNode> keyNode(
+ keyElement, UNO_QUERY_THROW);
+ root->appendChild(keyNode);
+ return keyNode;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write key element in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+OUString BackendDb::readSimpleElement(
+ OUString const & sElementName, Reference<css::xml::dom::XNode> const & xParent)
+{
+ try
+ {
+ const OUString sPrefix = getNSPrefix();
+ const OUString sExpr(sPrefix + OUSTR(":") + sElementName + OUSTR("/text()"));
+ const Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ const Reference<css::xml::dom::XNode> val =
+ xpathApi->selectSingleNode(xParent, sExpr);
+ if (val.is())
+ return val->getNodeValue();
+ return OUString();
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data (readSimpleElement) in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+
+::std::list< OUString> BackendDb::readList(
+ Reference<css::xml::dom::XNode> const & parent,
+ OUString const & sListTagName,
+ OUString const & sMemberTagName)
+{
+ try
+ {
+ OSL_ASSERT(parent.is());
+ const OUString sPrefix(getNSPrefix() + OUSTR(":"));
+ const Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ const OUString sExprList(
+ sPrefix + sListTagName + OUSTR("/") + sPrefix + sMemberTagName + OUSTR("/text()"));
+ const Reference<css::xml::dom::XNodeList> list =
+ xpathApi->selectNodeList(parent, sExprList);
+
+ ::std::list<OUString > retList;
+ sal_Int32 length = list->getLength();
+ for (sal_Int32 i = 0; i < length; i++)
+ {
+ const Reference<css::xml::dom::XNode> member = list->item(i);
+ retList.push_back(member->getNodeValue());
+ }
+ return retList;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+::std::list<OUString> BackendDb::getOneChildFromAllEntries(
+ OUString const & name)
+{
+ try
+ {
+ ::std::list<OUString> listRet;
+ Reference<css::xml::dom::XDocument> doc = getDocument();
+ Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+
+ Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ const OUString sPrefix = getNSPrefix();
+ const OUString sKeyElement = getKeyElementName();
+ ::rtl::OUStringBuffer buf(512);
+ buf.append(sPrefix);
+ buf.appendAscii(":");
+ buf.append(sKeyElement);
+ buf.appendAscii("/");
+ buf.append(sPrefix);
+ buf.appendAscii(":");
+ buf.append(name);
+ buf.append(OUSTR("/text()"));
+
+ Reference<css::xml::dom::XNodeList> nodes =
+ xpathApi->selectNodeList(root, buf.makeStringAndClear());
+ if (nodes.is())
+ {
+ sal_Int32 length = nodes->getLength();
+ for (sal_Int32 i = 0; i < length; i++)
+ listRet.push_back(nodes->item(i)->getNodeValue());
+ }
+ return listRet;
+ }
+ catch (css::deployment::DeploymentException& )
+ {
+ throw;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+
+
+//================================================================================
+RegisteredDb::RegisteredDb(
+ Reference<XComponentContext> const & xContext,
+ ::rtl::OUString const & url):BackendDb(xContext, url)
+{
+
+}
+
+void RegisteredDb::addEntry(::rtl::OUString const & url)
+{
+ try{
+
+ const OUString sNameSpace = getDbNSName();
+ const OUString sPrefix = getNSPrefix();
+ const OUString sEntry = getKeyElementName();
+
+ Reference<css::xml::dom::XDocument> doc = getDocument();
+ Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+
+#if OSL_DEBUG_LEVEL > 0
+ //There must not be yet an entry with the same url
+ OUString sExpression(
+ sPrefix + OUSTR(":") + sEntry + OUSTR("[@url = \"") + url + OUSTR("\"]"));
+ Reference<css::xml::dom::XNode> _extensionNode =
+ getXPathAPI()->selectSingleNode(root, sExpression);
+ OSL_ASSERT(! _extensionNode.is());
+#endif
+ Reference<css::xml::dom::XElement> helpElement(
+ doc->createElementNS(sNameSpace, sPrefix + OUSTR(":") + sEntry));
+
+ helpElement->setAttribute(OUSTR("url"), url);
+
+ Reference<css::xml::dom::XNode> helpNode(
+ helpElement, UNO_QUERY_THROW);
+ root->appendChild(helpNode);
+
+ save();
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+bool RegisteredDb::getEntry(::rtl::OUString const & url)
+{
+ try
+ {
+ const OUString sPrefix = getNSPrefix();
+ const OUString sEntry = getKeyElementName();
+ const OUString sExpression(
+ sPrefix + OUSTR(":") + sEntry + OUSTR("[@url = \"") + url + OUSTR("\"]"));
+ Reference<css::xml::dom::XDocument> doc = getDocument();
+ Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+
+ Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ //find the extension element that is to be removed
+ Reference<css::xml::dom::XNode> aNode =
+ xpathApi->selectSingleNode(root, sExpression);
+ if (!aNode.is())
+ {
+ return false;
+ }
+ return true;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+
+} // namespace backend
+} // namespace dp_registry
+
diff --git a/desktop/source/deployment/registry/dp_registry.cxx b/desktop/source/deployment/registry/dp_registry.cxx
index c56131a1015c..c5e440a2a825 100644
--- a/desktop/source/deployment/registry/dp_registry.cxx
+++ b/desktop/source/deployment/registry/dp_registry.cxx
@@ -115,6 +115,7 @@ protected:
virtual ~PackageRegistryImpl();
PackageRegistryImpl() : t_helper( getMutex() ) {}
+
public:
static Reference<deployment::XPackageRegistry> create(
OUString const & context,
@@ -126,8 +127,8 @@ public:
// XPackageRegistry
virtual Reference<deployment::XPackage> SAL_CALL bindPackage(
- OUString const & url, OUString const & mediaType,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ OUString const & url, OUString const & mediaType, sal_Bool bRemoved,
+ OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv )
throw (deployment::DeploymentException, CommandFailedException,
lang::IllegalArgumentException, RuntimeException);
virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL
@@ -361,9 +362,24 @@ Reference<deployment::XPackageRegistry> PackageRegistryImpl::create(
// Always register as last, because we want to add extensions also as folders
// and as a default we accept every folder, which was not recognized by the other
// backends.
- that->insertBackend(
+ Reference<deployment::XPackageRegistry> extensionBackend =
::dp_registry::backend::bundle::create(
- that, context, cachePath, readOnly, xComponentContext ) );
+ that, context, cachePath, readOnly, xComponentContext);
+ that->insertBackend(extensionBackend);
+
+ Reference<lang::XServiceInfo> xServiceInfo(
+ extensionBackend, UNO_QUERY_THROW );
+
+ OSL_ASSERT(xServiceInfo.is());
+ OUString registryCachePath(
+ makeURL( cachePath,
+ ::rtl::Uri::encode(
+ xServiceInfo->getImplementationName(),
+ rtl_UriCharClassPchar,
+ rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8 ) ) );
+ create_folder( 0, registryCachePath, Reference<XCommandEnvironment>());
+
#if OSL_DEBUG_LEVEL > 1
// dump tables:
@@ -443,8 +459,8 @@ void PackageRegistryImpl::update() throw (RuntimeException)
// XPackageRegistry
//______________________________________________________________________________
Reference<deployment::XPackage> PackageRegistryImpl::bindPackage(
- OUString const & url, OUString const & mediaType_,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ OUString const & url, OUString const & mediaType_, sal_Bool bRemoved,
+ OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv )
throw (deployment::DeploymentException, CommandFailedException,
lang::IllegalArgumentException, RuntimeException)
{
@@ -482,7 +498,8 @@ Reference<deployment::XPackage> PackageRegistryImpl::bindPackage(
for ( ; iPos != iEnd; ++iPos )
{
try {
- return (*iPos)->bindPackage( url, mediaType, xCmdEnv );
+ return (*iPos)->bindPackage( url, mediaType, bRemoved,
+ identifier, xCmdEnv );
}
catch (lang::IllegalArgumentException &) {
}
@@ -511,7 +528,8 @@ Reference<deployment::XPackage> PackageRegistryImpl::bindPackage(
getResourceString(RID_STR_UNSUPPORTED_MEDIA_TYPE) + mediaType,
static_cast<OWeakObject *>(this), static_cast<sal_Int16>(-1) );
}
- return iFind->second->bindPackage( url, mediaType, xCmdEnv );
+ return iFind->second->bindPackage( url, mediaType, bRemoved,
+ identifier, xCmdEnv );
}
}
@@ -521,7 +539,6 @@ PackageRegistryImpl::getSupportedPackageTypes() throw (RuntimeException)
{
return comphelper::containerToSequence(m_typesInfos);
}
-
} // anon namespace
//==============================================================================
diff --git a/desktop/source/deployment/registry/executable/dp_executable.cxx b/desktop/source/deployment/registry/executable/dp_executable.cxx
index 8c95d5874b4c..968ee7297b0f 100644
--- a/desktop/source/deployment/registry/executable/dp_executable.cxx
+++ b/desktop/source/deployment/registry/executable/dp_executable.cxx
@@ -28,6 +28,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_desktop.hxx"
+#include "dp_misc.h"
#include "dp_backend.h"
#include "dp_ucb.h"
#include "dp_interact.h"
@@ -37,10 +38,12 @@
#include "comphelper/servicedecl.hxx"
#include "svl/inettype.hxx"
#include "cppuhelper/implbase1.hxx"
+#include "dp_executablebackenddb.hxx"
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::ucb;
+using namespace dp_misc;
using ::rtl::OUString;
namespace dp_registry {
@@ -62,19 +65,20 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<dp_misc::AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
bool getFileAttributes(sal_uInt64& out_Attributes);
bool isUrlTargetInExtension();
-
public:
inline ExecutablePackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
- Reference<deployment::XPackageTypeInfo> const & xPackageType)
+ Reference<deployment::XPackageTypeInfo> const & xPackageType,
+ bool bRemoved, OUString const & identifier)
: Package( myBackend, url, name, name /* display-name */,
- xPackageType ) //,
+ xPackageType, bRemoved, identifier)
{}
};
friend class ExecutablePackageImpl;
@@ -84,11 +88,15 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
- OUString const & url, OUString const & mediaType,
- Reference<XCommandEnvironment> const & xCmdEnv );
+ OUString const & url, OUString const & mediaType, sal_Bool bRemoved,
+ OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv );
- Reference<deployment::XPackageTypeInfo> m_xExecutableTypeInfo;
+ void addDataToDb(OUString const & url);
+ bool isRegisteredInDb(OUString const & url);
+ void deleteDataFromDb(OUString const & url);
+ Reference<deployment::XPackageTypeInfo> m_xExecutableTypeInfo;
+ std::auto_ptr<ExecutableBackendDb> m_backendDb;
public:
BackendImpl( Sequence<Any> const & args,
Reference<XComponentContext> const & xComponentContext );
@@ -112,7 +120,32 @@ BackendImpl::BackendImpl(
RID_IMG_COMPONENT,
RID_IMG_COMPONENT_HC ) )
{
+ if (!transientMode())
+ {
+ OUString dbFile = makeURL(getCachePath(), OUSTR("backenddb.xml"));
+ m_backendDb.reset(
+ new ExecutableBackendDb(getComponentContext(), dbFile));
+ }
+}
+void BackendImpl::addDataToDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->addEntry(url);
+}
+
+bool BackendImpl::isRegisteredInDb(OUString const & url)
+{
+ bool ret = false;
+ if (m_backendDb.get())
+ ret = m_backendDb->getEntry(url);
+ return ret;
+}
+
+void BackendImpl::deleteDataFromDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->removeEntry(url);
}
// XPackageRegistry
@@ -125,8 +158,8 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
// PackageRegistryBackend
Reference<deployment::XPackage> BackendImpl::bindPackage_(
- OUString const & url, OUString const & mediaType,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ OUString const & url, OUString const & mediaType, sal_Bool bRemoved,
+ OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv )
{
if (mediaType.getLength() == 0)
{
@@ -141,13 +174,18 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
if (type.EqualsIgnoreCaseAscii("application"))
{
- ::ucbhelper::Content ucbContent( url, xCmdEnv );
- const OUString name( ucbContent.getPropertyValue(
- dp_misc::StrTitle::get() ).get<OUString>() );
+ OUString name;
+ if (!bRemoved)
+ {
+ ::ucbhelper::Content ucbContent( url, xCmdEnv );
+ name = ucbContent.getPropertyValue(
+ dp_misc::StrTitle::get() ).get<OUString>();
+ }
if (subType.EqualsIgnoreCaseAscii("vnd.sun.star.executable"))
{
return new BackendImpl::ExecutablePackageImpl(
- this, url, name, m_xExecutableTypeInfo);
+ this, url, name, m_xExecutableTypeInfo, bRemoved,
+ identifier);
}
}
}
@@ -179,23 +217,17 @@ BackendImpl::ExecutablePackageImpl::isRegistered_(
::rtl::Reference<dp_misc::AbortChannel> const &,
Reference<XCommandEnvironment> const & )
{
- //We must return Optional.isPresent = true, otherwise
- //processPackage is not called.
- //The user shall not be able to enable/disable the executable. This is not needed since
- //the executable does not affect the office. The best thing is to show no
- //status at all. See also BackendImpl::PackageImpl::isRegistered_ (dp_package.cxx)
- //On Windows there is no executable file attribute. One has to use security API for this.
- //However, on Windows we do not have the problem, that after unzipping the file cannot be
- //executed.
+ bool registered = getMyBackend()->isRegisteredInDb(getURL());
return beans::Optional< beans::Ambiguous<sal_Bool> >(
sal_True /* IsPresent */,
beans::Ambiguous<sal_Bool>(
- sal_True, sal_True /* IsAmbiguous */ ) );
+ registered, sal_False /* IsAmbiguous */ ) );
}
void BackendImpl::ExecutablePackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool /*startup*/,
::rtl::Reference<dp_misc::AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & /*xCmdEnv*/ )
{
@@ -216,19 +248,27 @@ void BackendImpl::ExecutablePackageImpl::processPackage_(
else if (getMyBackend()->m_context.equals(OUSTR("shared")))
attributes |= (osl_File_Attribute_OwnExe | osl_File_Attribute_GrpExe
| osl_File_Attribute_OthExe);
- else
+ else if (!getMyBackend()->m_context.equals(OUSTR("bundled")))
+ //Bundled extension are required to be in the properly
+ //installed. That is an executable must have the right flags
OSL_ASSERT(0);
//This won't have affect on Windows
- if (osl::File::E_None != osl::File::setAttributes(
- dp_misc::expandUnoRcUrl(m_url), attributes))
- OSL_ENSURE(0, "Extension Manager: Could not set executable file attribute.");
+ osl::File::setAttributes(
+ dp_misc::expandUnoRcUrl(m_url), attributes);
}
+ getMyBackend()->addDataToDb(getURL());
+ }
+ else
+ {
+ getMyBackend()->deleteDataFromDb(getURL());
}
}
-//We currently cannot check if this XPackage represents a content of a particular exension
+//We currently cannot check if this XPackage represents a content of a particular extension
//But we can check if we are within $UNO_USER_PACKAGES_CACHE etc.
+//Done for security reasons. For example an extension manifest could contain a path to
+//an executable outside the extension.
bool BackendImpl::ExecutablePackageImpl::isUrlTargetInExtension()
{
bool bSuccess = false;
@@ -237,6 +277,8 @@ bool BackendImpl::ExecutablePackageImpl::isUrlTargetInExtension()
sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$UNO_USER_PACKAGES_CACHE"));
else if (getMyBackend()->m_context.equals(OUSTR("shared")))
sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$UNO_SHARED_PACKAGES_CACHE"));
+ else if (getMyBackend()->m_context.equals(OUSTR("bundled")))
+ sExtensionDir = dp_misc::expandUnoRcTerm(OUSTR("$BUNDLED_EXTENSIONS"));
else
OSL_ASSERT(0);
//remove file ellipses
diff --git a/desktop/source/deployment/registry/executable/dp_executablebackenddb.cxx b/desktop/source/deployment/registry/executable/dp_executablebackenddb.cxx
new file mode 100644
index 000000000000..976a6281a2bd
--- /dev/null
+++ b/desktop/source/deployment/registry/executable/dp_executablebackenddb.cxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * 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: dp_package.cxx,v $
+ * $Revision: 1.34.16.2 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "rtl/string.h"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "dp_misc.h"
+#include "dp_executablebackenddb.hxx"
+
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+
+#define EXTENSION_REG_NS "http://openoffice.org/extensionmanager/executable-registry/2010"
+#define NS_PREFIX "exe"
+#define ROOT_ELEMENT_NAME "executable-backend-db"
+#define ENTRY_NAME "executable"
+
+namespace dp_registry {
+namespace backend {
+namespace executable {
+
+ExecutableBackendDb::ExecutableBackendDb(
+ Reference<XComponentContext> const & xContext,
+ ::rtl::OUString const & url):RegisteredDb(xContext, url)
+{
+
+}
+
+OUString ExecutableBackendDb::getDbNSName()
+{
+ return OUSTR(EXTENSION_REG_NS);
+}
+
+OUString ExecutableBackendDb::getNSPrefix()
+{
+ return OUSTR(NS_PREFIX);
+}
+
+OUString ExecutableBackendDb::getRootElementName()
+{
+ return OUSTR(ROOT_ELEMENT_NAME);
+}
+
+OUString ExecutableBackendDb::getKeyElementName()
+{
+ return OUSTR(ENTRY_NAME);
+}
+
+
+} // namespace executable
+} // namespace backend
+} // namespace dp_registry
+
diff --git a/desktop/source/deployment/registry/executable/dp_executablebackenddb.hxx b/desktop/source/deployment/registry/executable/dp_executablebackenddb.hxx
new file mode 100644
index 000000000000..4f17eeda24a6
--- /dev/null
+++ b/desktop/source/deployment/registry/executable/dp_executablebackenddb.hxx
@@ -0,0 +1,79 @@
+/*************************************************************************
+ *
+ * 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: dp_backend.h,v $
+ * $Revision: 1.18 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_EXECUTABLEBACKENDDB_HXX
+#define INCLUDED_DP_EXECUTABLEBACKENDDB_HXX
+
+#include "rtl/ustring.hxx"
+#include "dp_backenddb.hxx"
+
+namespace css = ::com::sun::star;
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class XComponentContext;
+ }
+}}}
+
+namespace dp_registry {
+namespace backend {
+namespace executable {
+
+/* The XML file stores the extensions which are currently registered.
+ They will be removed when they are revoked.
+ The format looks like this:
+
+<?xml version="1.0"?>
+ */
+class ExecutableBackendDb: public dp_registry::backend::RegisteredDb
+{
+protected:
+ virtual ::rtl::OUString getDbNSName();
+
+ virtual ::rtl::OUString getNSPrefix();
+
+ virtual ::rtl::OUString getRootElementName();
+
+ virtual ::rtl::OUString getKeyElementName();
+
+public:
+
+ ExecutableBackendDb( css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
+
+};
+
+
+
+}
+}
+}
+#endif
+
diff --git a/desktop/source/deployment/registry/executable/makefile.mk b/desktop/source/deployment/registry/executable/makefile.mk
index 1e57f5ecf3b1..81b2baa44e5d 100644
--- a/desktop/source/deployment/registry/executable/makefile.mk
+++ b/desktop/source/deployment/registry/executable/makefile.mk
@@ -36,7 +36,8 @@ ENABLE_EXCEPTIONS = TRUE
INCPRE += ..$/..$/inc
SLOFILES = \
- $(SLO)$/dp_executable.obj
+ $(SLO)$/dp_executable.obj \
+ $(SLO)$/dp_executablebackenddb.obj
.INCLUDE : ..$/..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/registry/help/dp_help.cxx b/desktop/source/deployment/registry/help/dp_help.cxx
index 2b0d91250e4a..bc17a1f7163d 100644
--- a/desktop/source/deployment/registry/help/dp_help.cxx
+++ b/desktop/source/deployment/registry/help/dp_help.cxx
@@ -30,9 +30,11 @@
#include "dp_help.hrc"
#include "dp_backend.h"
+#include "dp_helpbackenddb.hxx"
#include "dp_ucb.h"
#include "rtl/uri.hxx"
#include "osl/file.hxx"
+#include "rtl/bootstrap.hxx"
#include "ucbhelper/content.hxx"
#include "comphelper/servicedecl.hxx"
#include "svl/inettype.hxx"
@@ -44,6 +46,7 @@
#include <com/sun/star/uri/XUriReferenceFactory.hpp>
#include <com/sun/star/uri/XVndSunStarExpandUrl.hpp>
#include <com/sun/star/script/XInvocation.hpp>
+#include "boost/optional.hpp"
using namespace ::dp_misc;
using namespace ::com::sun::star;
@@ -63,6 +66,8 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
{
BackendImpl * getMyBackend() const;
+// HelpBackendDb::Data m_dbData;
+
// Package
virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_(
::osl::ResettableMutexGuard & guard,
@@ -71,36 +76,44 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
public:
- inline PackageImpl(
+ PackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
- Reference<deployment::XPackageTypeInfo> const & xPackageType )
- : Package( myBackend, url, name, name, xPackageType )
- {}
+ Reference<deployment::XPackageTypeInfo> const & xPackageType,
+ bool bRemoved, OUString const & identifier);
+
+ //XPackage
+ virtual css::beans::Optional< ::rtl::OUString > SAL_CALL getRegistrationDataURL()
+ throw (deployment::ExtensionRemovedException, css::uno::RuntimeException);
};
friend class PackageImpl;
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
OUString const & url, OUString const & mediaType,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv );
- void implProcessHelp( Reference< deployment::XPackage > xPackage, bool doRegisterPackage );
+ void implProcessHelp( Reference< deployment::XPackage > xPackage, bool doRegisterPackage,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv);
void implCollectXhpFiles( const rtl::OUString& aDir,
std::vector< rtl::OUString >& o_rXhpFileVector );
- rtl::OUString getFlagFileURL( Reference< deployment::XPackage > xPackage, const char* pFlagStr );
- rtl::OUString getRegisteredFlagFileURL( Reference< deployment::XPackage > xPackage );
- rtl::OUString getCompiledFlagFileURL( Reference< deployment::XPackage > xPackage );
- rtl::OUString expandURL( const rtl::OUString& aURL );
+
+ void addDataToDb(OUString const & url, HelpBackendDb::Data const & data);
+ ::boost::optional<HelpBackendDb::Data> readDataFromDb(OUString const & url);
+ void deleteDataFromDb(OUString const & url);
+
Reference< ucb::XSimpleFileAccess > getFileAccess( void );
Reference< ucb::XSimpleFileAccess > m_xSFA;
const Reference<deployment::XPackageTypeInfo> m_xHelpTypeInfo;
Sequence< Reference<deployment::XPackageTypeInfo> > m_typeInfos;
+ std::auto_ptr<HelpBackendDb> m_backendDb;
public:
BackendImpl( Sequence<Any> const & args,
@@ -124,6 +137,20 @@ BackendImpl::BackendImpl(
m_typeInfos( 1 )
{
m_typeInfos[ 0 ] = m_xHelpTypeInfo;
+ if (!transientMode())
+ {
+ OUString dbFile = makeURL(getCachePath(), OUSTR("backenddb.xml"));
+ m_backendDb.reset(
+ new HelpBackendDb(getComponentContext(), dbFile));
+
+ //clean up data folders which are no longer used.
+ //This must not be done in the same process where the help files
+ //are still registers. Only after revoking and restarting OOo the folders
+ //can be removed. This works now, because the extension manager is a singleton
+ //and the backends are only create once per process.
+ ::std::list<OUString> folders = m_backendDb->getAllDataUrls();
+ deleteUnusedFolders(OUString(), folders);
+ }
}
// XPackageRegistry
@@ -138,6 +165,7 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::bindPackage_(
OUString const & url, OUString const & mediaType_,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv )
{
// we don't support auto detection:
@@ -152,12 +180,20 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
if (type.EqualsIgnoreCaseAscii("application"))
{
- ::ucbhelper::Content ucbContent( url, xCmdEnv );
+ OUString name;
+ if (!bRemoved)
+ {
+ ::ucbhelper::Content ucbContent( url, xCmdEnv );
+ name = ucbContent.getPropertyValue(
+ StrTitle::get() ).get<OUString>();
+ }
+
if (subType.EqualsIgnoreCaseAscii(
"vnd.sun.star.help"))
{
- return new PackageImpl( this, url,
- ucbContent.getPropertyValue( StrTitle::get() ).get<OUString>(), m_xHelpTypeInfo );
+ return new PackageImpl(
+ this, url, name, m_xHelpTypeInfo, bRemoved,
+ identifier);
}
}
}
@@ -167,8 +203,45 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
static_cast<sal_Int16>(-1) );
}
+void BackendImpl::addDataToDb(
+ OUString const & url, HelpBackendDb::Data const & data)
+{
+ if (m_backendDb.get())
+ m_backendDb->addEntry(url, data);
+}
+
+::boost::optional<HelpBackendDb::Data> BackendImpl::readDataFromDb(
+ OUString const & url)
+{
+ ::boost::optional<HelpBackendDb::Data> data;
+ if (m_backendDb.get())
+ data = m_backendDb->getEntry(url);
+ return data;
+}
+
+void BackendImpl::deleteDataFromDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->removeEntry(url);
+}
//##############################################################################
+BackendImpl::PackageImpl::PackageImpl(
+ ::rtl::Reference<PackageRegistryBackend> const & myBackend,
+ OUString const & url, OUString const & name,
+ Reference<deployment::XPackageTypeInfo> const & xPackageType,
+ bool bRemoved, OUString const & identifier)
+ : Package( myBackend, url, name, name, xPackageType, bRemoved,
+ identifier)
+{
+// if (bRemoved)
+// {
+// ::boost::optional<HelpBackendDb::Data> opt =
+// getMyBackend()->readDataFromDb(url);
+// if (opt)
+// m_dbData = *opt;
+// }
+}
// Package
BackendImpl * BackendImpl::PackageImpl::getMyBackend() const
@@ -194,11 +267,10 @@ BackendImpl::PackageImpl::isRegistered_(
Reference<XCommandEnvironment> const & )
{
BackendImpl * that = getMyBackend();
- Reference< deployment::XPackage > xThisPackage( this );
- rtl::OUString aRegisteredFlagFile = that->getRegisteredFlagFileURL( xThisPackage );
- Reference< ucb::XSimpleFileAccess > xSFA = that->getFileAccess();
- bool bReg = xSFA->exists( aRegisteredFlagFile );
+ bool bReg = false;
+ if (that->readDataFromDb(getURL()))
+ bReg = true;
return beans::Optional< beans::Ambiguous<sal_Bool> >( true, beans::Ambiguous<sal_Bool>( bReg, false ) );
}
@@ -207,6 +279,7 @@ BackendImpl::PackageImpl::isRegistered_(
void BackendImpl::PackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool /* startup */,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv )
{
@@ -216,39 +289,46 @@ void BackendImpl::PackageImpl::processPackage_(
BackendImpl* that = getMyBackend();
Reference< deployment::XPackage > xThisPackage( this );
- that->implProcessHelp( xThisPackage, doRegisterPackage );
+ that->implProcessHelp( xThisPackage, doRegisterPackage, xCmdEnv);
}
+beans::Optional< OUString > BackendImpl::PackageImpl::getRegistrationDataURL()
+ throw (deployment::ExtensionRemovedException,
+ css::uno::RuntimeException)
+{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+
+ ::boost::optional<HelpBackendDb::Data> data =
+ getMyBackend()->readDataFromDb(getURL());
+
+ if (data)
+ return beans::Optional<OUString>(true, data->dataUrl);
+
+ return beans::Optional<OUString>(true, OUString());
+}
+
+
//##############################################################################
static rtl::OUString aSlash( rtl::OUString::createFromAscii( "/" ) );
static rtl::OUString aHelpStr( rtl::OUString::createFromAscii( "help" ) );
+
void BackendImpl::implProcessHelp
- ( Reference< deployment::XPackage > xPackage, bool doRegisterPackage )
+( Reference< deployment::XPackage > xPackage, bool doRegisterPackage,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
{
- if( !xPackage.is() )
- return;
-
- Reference< ucb::XSimpleFileAccess > xSFA = getFileAccess();
-
- rtl::OUString aRegisteredFlagFile = getRegisteredFlagFileURL( xPackage );
- if( !doRegisterPackage )
+ OSL_ASSERT(xPackage.is());
+ if (doRegisterPackage)
{
- if( xSFA->exists( aRegisteredFlagFile ) )
- xSFA->kill( aRegisteredFlagFile );
- return;
- }
-
- bool bCompile = true;
- rtl::OUString aCompiledFlagFile = getCompiledFlagFileURL( xPackage );
- if( xSFA->exists( aCompiledFlagFile ) )
- bCompile = false;
+ HelpBackendDb::Data data;
+ const OUString sHelpFolder = createFolder(OUString(), xCmdEnv);
+ data.dataUrl = sHelpFolder;
- if( bCompile )
- {
+ Reference< ucb::XSimpleFileAccess > xSFA = getFileAccess();
rtl::OUString aHelpURL = xPackage->getURL();
- rtl::OUString aExpandedHelpURL = expandURL( aHelpURL );
+ rtl::OUString aExpandedHelpURL = dp_misc::expandUnoRcUrl( aHelpURL );
rtl::OUString aName = xPackage->getName();
if( !xSFA->isFolder( aExpandedHelpURL ) )
{
@@ -256,7 +336,7 @@ void BackendImpl::implProcessHelp
aErrStr += rtl::OUString::createFromAscii( "No help folder" );
OWeakObject* oWeakThis = static_cast<OWeakObject *>(this);
throw deployment::DeploymentException( rtl::OUString(), oWeakThis,
- makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
+ makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
}
Reference<XComponentContext> const & xContext = getComponentContext();
@@ -267,7 +347,7 @@ void BackendImpl::implProcessHelp
{
xInvocation = Reference< script::XInvocation >(
xContext->getServiceManager()->createInstanceWithContext( rtl::OUString::createFromAscii(
- "com.sun.star.help.HelpIndexer" ), xContext ) , UNO_QUERY );
+ "com.sun.star.help.HelpIndexer" ), xContext ) , UNO_QUERY );
}
catch (Exception &)
{
@@ -286,34 +366,30 @@ void BackendImpl::implProcessHelp
{
std::vector< rtl::OUString > aXhpFileVector;
- // Delete (old) files in any case to allow compiler to be started every time
- rtl::OUString aLangWithPureNameURL( aLangURL );
- aLangWithPureNameURL += aSlash;
- aLangWithPureNameURL += aHelpStr;
- rtl::OUString aDbFile( aLangWithPureNameURL );
- aDbFile += rtl::OUString::createFromAscii( ".db" );
- if( xSFA->exists( aDbFile ) )
- xSFA->kill( aDbFile );
- rtl::OUString aHtFile( aLangWithPureNameURL );
- aHtFile += rtl::OUString::createFromAscii( ".ht" );
- if( xSFA->exists( aHtFile ) )
- xSFA->kill( aHtFile );
- rtl::OUString aKeyFile( aLangWithPureNameURL );
- aKeyFile += rtl::OUString::createFromAscii( ".key" );
- if( xSFA->exists( aKeyFile ) )
- xSFA->kill( aKeyFile );
-
// calculate jar file URL
- rtl::OUString aJarFile( aLangURL );
- aJarFile += aSlash;
- aJarFile += aHelpStr;
- aJarFile += rtl::OUString::createFromAscii( ".jar" );
- // remove in any case to clean up
- if( xSFA->exists( aJarFile ) )
- xSFA->kill( aJarFile );
-
- rtl::OUString aEncodedJarFilePath = rtl::Uri::encode( aJarFile,
- rtl_UriCharClassPchar, rtl_UriEncodeIgnoreEscapes, RTL_TEXTENCODING_UTF8 );
+ sal_Int32 indexStartSegment = aLangURL.lastIndexOf('/');
+ // for example "/en"
+ OUString langFolderURLSegment(
+ aLangURL.copy(
+ indexStartSegment + 1, aLangURL.getLength() - indexStartSegment - 1));
+
+ //create the folder in the "temporary folder"
+ ::ucbhelper::Content langFolderContent;
+ const OUString langFolderDest = makeURL(sHelpFolder, langFolderURLSegment);
+ const OUString langFolderDestExpanded = ::dp_misc::expandUnoRcUrl(langFolderDest);
+ ::dp_misc::create_folder(
+ &langFolderContent,
+ langFolderDest, xCmdEnv);
+
+ rtl::OUString aJarFile(
+ makeURL(sHelpFolder, langFolderURLSegment + aSlash + aHelpStr +
+ OUSTR(".jar")));
+ aJarFile = ::dp_misc::expandUnoRcUrl(aJarFile);
+
+ rtl::OUString aEncodedJarFilePath = rtl::Uri::encode(
+ aJarFile, rtl_UriCharClassPchar,
+ rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8 );
rtl::OUString aDestBasePath = rtl::OUString::createFromAscii( "vnd.sun.star.pkg://" );
aDestBasePath += aEncodedJarFilePath;
aDestBasePath += rtl::OUString::createFromAscii( "/" );
@@ -353,8 +429,10 @@ void BackendImpl::implProcessHelp
::osl::File::getFileURLFromSystemPath( aOfficeHelpPath, aOfficeHelpPathFileURL );
HelpProcessingErrorInfo aErrorInfo;
- bool bSuccess = compileExtensionHelp( aOfficeHelpPathFileURL, aHelpStr, aLangURL,
- nXhpFileCount, pXhpFiles, aErrorInfo );
+ bool bSuccess = compileExtensionHelp(
+ aOfficeHelpPathFileURL, aHelpStr, aLangURL,
+ nXhpFileCount, pXhpFiles,
+ langFolderDestExpanded, aErrorInfo );
if( bSuccess && xInvocation.is() )
{
@@ -375,13 +453,14 @@ void BackendImpl::implProcessHelp
aParamsSeq[4] = uno::makeAny( rtl::OUString::createFromAscii( "-zipdir" ) );
rtl::OUString aSystemPath;
- osl::FileBase::getSystemPathFromFileURL( aLangURL, aSystemPath );
+ osl::FileBase::getSystemPathFromFileURL(
+ langFolderDestExpanded, aSystemPath );
aParamsSeq[5] = uno::makeAny( aSystemPath );
Sequence< sal_Int16 > aOutParamIndex;
Sequence< uno::Any > aOutParam;
uno::Any aRet = xInvocation->invoke( rtl::OUString::createFromAscii( "createIndex" ),
- aParamsSeq, aOutParamIndex, aOutParam );
+ aParamsSeq, aOutParamIndex, aOutParam );
}
if( !bSuccess )
@@ -389,10 +468,10 @@ void BackendImpl::implProcessHelp
USHORT nErrStrId = 0;
switch( aErrorInfo.m_eErrorClass )
{
- case HELPPROCESSING_GENERAL_ERROR:
- case HELPPROCESSING_INTERNAL_ERROR: nErrStrId = RID_STR_HELPPROCESSING_GENERAL_ERROR; break;
- case HELPPROCESSING_XMLPARSING_ERROR: nErrStrId = RID_STR_HELPPROCESSING_XMLPARSING_ERROR; break;
- default: ;
+ case HELPPROCESSING_GENERAL_ERROR:
+ case HELPPROCESSING_INTERNAL_ERROR: nErrStrId = RID_STR_HELPPROCESSING_GENERAL_ERROR; break;
+ case HELPPROCESSING_XMLPARSING_ERROR: nErrStrId = RID_STR_HELPPROCESSING_XMLPARSING_ERROR; break;
+ default: ;
};
rtl::OUString aErrStr;
@@ -423,7 +502,7 @@ void BackendImpl::implProcessHelp
aErrStr += rtl::OUString::createFromAscii( " in " );
rtl::OUString aDecodedFile = rtl::Uri::decode( aErrorInfo.m_aXMLParsingFile,
- rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+ rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
aErrStr += aDecodedFile;
if( aErrorInfo.m_nXMLParsingLine != -1 )
{
@@ -435,96 +514,21 @@ void BackendImpl::implProcessHelp
OWeakObject* oWeakThis = static_cast<OWeakObject *>(this);
throw deployment::DeploymentException( rtl::OUString(), oWeakThis,
- makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
+ makeAny( uno::Exception( aErrStr, oWeakThis ) ) );
}
}
}
- // Write compiled flag file (this code is only reached in case of success)
- Reference< io::XOutputStream > xOutputStream = xSFA->openFileWrite( aCompiledFlagFile );
- if( xOutputStream.is() )
- xOutputStream->closeOutput();
-
- } // if( bCompile )
-
- // Write registered flag file (this code is only reached in case of success)
- if( !xSFA->exists( aRegisteredFlagFile ) )
+ //Writing the data entry replaces writing the flag file. If we got to this
+ //point the registration was successful.
+ addDataToDb(xPackage->getURL(), data);
+ }
+ else
{
- Reference< io::XOutputStream > xOutputStream = xSFA->openFileWrite( aRegisteredFlagFile );
- if( xOutputStream.is() )
- xOutputStream->closeOutput();
+ deleteDataFromDb(xPackage->getURL());
}
}
-rtl::OUString BackendImpl::getFlagFileURL( Reference< deployment::XPackage > xPackage, const char* pFlagStr )
-{
- rtl::OUString aRetURL;
- if( !xPackage.is() )
- return aRetURL;
- rtl::OUString aHelpURL = xPackage->getURL();
- aRetURL = expandURL( aHelpURL );
- aRetURL += rtl::OUString::createFromAscii( pFlagStr );
- return aRetURL;
-}
-
-rtl::OUString BackendImpl::getRegisteredFlagFileURL( Reference< deployment::XPackage > xPackage )
-{
- return getFlagFileURL( xPackage, "/RegisteredFlag" );
-}
-
-rtl::OUString BackendImpl::getCompiledFlagFileURL( Reference< deployment::XPackage > xPackage )
-{
- return getFlagFileURL( xPackage, "/CompiledFlag" );
-}
-
-rtl::OUString BackendImpl::expandURL( const rtl::OUString& aURL )
-{
- static Reference< util::XMacroExpander > xMacroExpander;
- static Reference< uri::XUriReferenceFactory > xFac;
-
- if( !xMacroExpander.is() || !xFac.is() )
- {
- Reference<XComponentContext> const & xContext = getComponentContext();
- if( xContext.is() )
- {
- xFac = Reference< uri::XUriReferenceFactory >(
- xContext->getServiceManager()->createInstanceWithContext( rtl::OUString::createFromAscii(
- "com.sun.star.uri.UriReferenceFactory"), xContext ) , UNO_QUERY );
- }
- if( !xFac.is() )
- {
- throw RuntimeException(
- ::rtl::OUString::createFromAscii(
- "dp_registry::backend::help::BackendImpl::expandURL(), "
- "could not instatiate UriReferenceFactory." ),
- Reference< XInterface >() );
- }
-
- xMacroExpander = Reference< util::XMacroExpander >(
- xContext->getValueByName(
- ::rtl::OUString::createFromAscii( "/singletons/com.sun.star.util.theMacroExpander" ) ),
- UNO_QUERY_THROW );
- }
-
- rtl::OUString aRetURL = aURL;
- if( xMacroExpander.is() )
- {
- Reference< uri::XUriReference > uriRef;
- for (;;)
- {
- uriRef = Reference< uri::XUriReference >( xFac->parse( aRetURL ), UNO_QUERY );
- if ( uriRef.is() )
- {
- Reference < uri::XVndSunStarExpandUrl > sxUri( uriRef, UNO_QUERY );
- if( !sxUri.is() )
- break;
-
- aRetURL = sxUri->expand( xMacroExpander );
- }
- }
- }
- return aRetURL;
-}
void BackendImpl::implCollectXhpFiles( const rtl::OUString& aDir,
std::vector< rtl::OUString >& o_rXhpFileVector )
diff --git a/desktop/source/deployment/registry/help/dp_helpbackenddb.cxx b/desktop/source/deployment/registry/help/dp_helpbackenddb.cxx
new file mode 100644
index 000000000000..3bf67e0c050b
--- /dev/null
+++ b/desktop/source/deployment/registry/help/dp_helpbackenddb.cxx
@@ -0,0 +1,178 @@
+/*************************************************************************
+ *
+ * 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: dp_package.cxx,v $
+ * $Revision: 1.34.16.2 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "rtl/string.h"
+#include "rtl/bootstrap.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
+#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
+#include "dp_misc.h"
+
+#include "dp_helpbackenddb.hxx"
+
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+
+#define EXTENSION_REG_NS "http://openoffice.org/extensionmanager/help-registry/2010"
+#define NS_PREFIX "help"
+#define ROOT_ELEMENT_NAME "help-backend-db"
+#define KEY_ELEMENT_NAME "help"
+
+namespace dp_registry {
+namespace backend {
+namespace help {
+
+HelpBackendDb::HelpBackendDb(
+ Reference<XComponentContext> const & xContext,
+ ::rtl::OUString const & url):BackendDb(xContext, url)
+{
+
+}
+
+OUString HelpBackendDb::getDbNSName()
+{
+ return OUSTR(EXTENSION_REG_NS);
+}
+
+OUString HelpBackendDb::getNSPrefix()
+{
+ return OUSTR(NS_PREFIX);
+}
+
+OUString HelpBackendDb::getRootElementName()
+{
+ return OUSTR(ROOT_ELEMENT_NAME);
+}
+
+OUString HelpBackendDb::getKeyElementName()
+{
+ return OUSTR(KEY_ELEMENT_NAME);
+}
+
+
+void HelpBackendDb::addEntry(::rtl::OUString const & url, Data const & data)
+{
+ try{
+ Reference<css::xml::dom::XNode> helpNode
+ = writeKeyElement(url);
+
+ writeSimpleElement(OUSTR("data-url"), data.dataUrl, helpNode);
+ save();
+ }
+ catch (css::deployment::DeploymentException& )
+ {
+ throw;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in help backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+
+::boost::optional<HelpBackendDb::Data>
+HelpBackendDb::getEntry(::rtl::OUString const & url)
+{
+ try
+ {
+ HelpBackendDb::Data retData;
+ Reference<css::xml::dom::XNode> aNode = getKeyElement(url);
+ if (aNode.is())
+ {
+ retData.dataUrl = readSimpleElement(OUSTR("data-url"), aNode);
+ }
+ else
+ {
+ return ::boost::optional<Data>();
+ }
+ return ::boost::optional<Data>(retData);
+ }
+ catch (css::deployment::DeploymentException& )
+ {
+ throw;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in help backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+::std::list<OUString> HelpBackendDb::getAllDataUrls()
+{
+ try
+ {
+ ::std::list<OUString> listRet;
+ Reference<css::xml::dom::XDocument> doc = getDocument();
+ Reference<css::xml::dom::XNode> root = doc->getFirstChild();
+
+ Reference<css::xml::xpath::XXPathAPI> xpathApi = getXPathAPI();
+ const OUString sPrefix = getNSPrefix();
+ OUString sExpression(
+ sPrefix + OUSTR(":help/") + sPrefix + OUSTR(":data-url/text()"));
+ Reference<css::xml::dom::XNodeList> nodes =
+ xpathApi->selectNodeList(root, sExpression);
+ if (nodes.is())
+ {
+ sal_Int32 length = nodes->getLength();
+ for (sal_Int32 i = 0; i < length; i++)
+ listRet.push_back(nodes->item(i)->getNodeValue());
+ }
+ return listRet;
+ }
+ catch (css::deployment::DeploymentException& )
+ {
+ throw;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in help backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+
+} // namespace help
+} // namespace backend
+} // namespace dp_registry
+
diff --git a/desktop/source/deployment/registry/help/dp_helpbackenddb.hxx b/desktop/source/deployment/registry/help/dp_helpbackenddb.hxx
new file mode 100644
index 000000000000..edf7dfdfc284
--- /dev/null
+++ b/desktop/source/deployment/registry/help/dp_helpbackenddb.hxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * 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: dp_backend.h,v $
+ * $Revision: 1.18 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_HELPBACKENDDB_HXX
+#define INCLUDED_DP_HELPBACKENDDB_HXX
+
+#include "rtl/ustring.hxx"
+#include <list>
+#include "boost/optional.hpp"
+#include "dp_backenddb.hxx"
+
+namespace css = ::com::sun::star;
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class XComponentContext;
+ }
+}}}
+
+namespace dp_registry {
+namespace backend {
+namespace help {
+
+/* The XML file stores the extensions which are currently registered.
+ They will be removed when they are revoked.
+ */
+class HelpBackendDb: public dp_registry::backend::BackendDb
+{
+protected:
+ virtual ::rtl::OUString getDbNSName();
+
+ virtual ::rtl::OUString getNSPrefix();
+
+ virtual ::rtl::OUString getRootElementName();
+
+ virtual ::rtl::OUString getKeyElementName();
+
+public:
+ struct Data
+ {
+ /* the URL to the folder containing the compiled help files, etc.
+ */
+ ::rtl::OUString dataUrl;
+
+ };
+
+public:
+
+ HelpBackendDb( css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
+
+ void addEntry(::rtl::OUString const & url, Data const & data);
+
+ ::boost::optional<Data> getEntry(::rtl::OUString const & url);
+ ::std::list< ::rtl::OUString> getAllDataUrls();
+
+};
+
+
+
+}
+}
+}
+#endif
+
diff --git a/desktop/source/deployment/registry/help/makefile.mk b/desktop/source/deployment/registry/help/makefile.mk
index ba904bb7f28a..d4934f71a46f 100644
--- a/desktop/source/deployment/registry/help/makefile.mk
+++ b/desktop/source/deployment/registry/help/makefile.mk
@@ -44,7 +44,8 @@ SRC1FILES = \
dp_help.src
SLOFILES = \
- $(SLO)$/dp_help.obj
+ $(SLO)$/dp_help.obj \
+ $(SLO)$/dp_helpbackenddb.obj
.INCLUDE : ..$/..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/registry/inc/dp_backend.h b/desktop/source/deployment/registry/inc/dp_backend.h
index fe52c8ffc7e3..3d3bf7cf912c 100644
--- a/desktop/source/deployment/registry/inc/dp_backend.h
+++ b/desktop/source/deployment/registry/inc/dp_backend.h
@@ -40,8 +40,10 @@
#include "com/sun/star/lang/XEventListener.hpp"
#include "com/sun/star/deployment/XPackageRegistry.hpp"
#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/InvalidRemovedParameterException.hpp"
#include <memory>
#include <hash_map>
+#include <list>
#include "dp_registry.hrc"
namespace dp_registry
@@ -62,8 +64,10 @@ typedef ::cppu::WeakComponentImplHelper1<
//==============================================================================
class Package : protected ::dp_misc::MutexHolder, public t_PackageBase
{
+ PackageRegistryBackend * getMyBackend() const;
void processPackage_impl(
bool registerPackage,
+ bool startup,
css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv );
@@ -73,6 +77,9 @@ protected:
::rtl::OUString m_name;
::rtl::OUString m_displayName;
const css::uno::Reference<css::deployment::XPackageTypeInfo> m_xPackageType;
+ const bool m_bRemoved;
+ //Only set if m_bRemoved = true;
+ const ::rtl::OUString m_identifier;
void check() const;
void fireModified();
@@ -91,6 +98,7 @@ protected:
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference< ::dp_misc::AbortChannel > const & abortChannel,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
= 0;
@@ -101,7 +109,9 @@ protected:
::rtl::OUString const & name,
::rtl::OUString const & displayName,
css::uno::Reference<css::deployment::XPackageTypeInfo> const &
- xPackageType );
+ xPackageType,
+ bool bRemoved,
+ ::rtl::OUString const & identifier);
public:
@@ -126,9 +136,11 @@ public:
virtual ::rtl::OUString SAL_CALL getMediaType()
throw (css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getDescription()
- throw (css::uno::RuntimeException);
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getShortDescription()
- throw (css::uno::RuntimeException);
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getFileFilter()
throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL getIcon( sal_Bool highContrast,
@@ -165,25 +177,29 @@ public:
css::ucb::CommandAbortedException,
css::uno::RuntimeException);
- virtual ::sal_Bool SAL_CALL checkPrerequisites(
+ virtual ::sal_Int32 SAL_CALL checkPrerequisites(
const css::uno::Reference< css::task::XAbortChannel >& xAbortChannel,
const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv,
- sal_Bool bInstalled, ::rtl::OUString const & aContextName)
+ sal_Bool noLicenseChecking)
throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::ucb::CommandAbortedException,
- css::uno::RuntimeException);
+ css::deployment::ExtensionRemovedException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL checkDependencies(
const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv )
throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::uno::RuntimeException);
+ css::deployment::ExtensionRemovedException,
+ css::ucb::CommandFailedException,
+ css::uno::RuntimeException);
virtual void SAL_CALL registerPackage(
+ sal_Bool startup,
css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
throw (css::deployment::DeploymentException,
+ css::deployment::ExtensionRemovedException,
css::ucb::CommandFailedException,
css::ucb::CommandAbortedException,
css::lang::IllegalArgumentException, css::uno::RuntimeException);
@@ -211,19 +227,27 @@ public:
virtual css::beans::Optional< ::rtl::OUString > SAL_CALL getIdentifier()
throw (css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getVersion()
- throw (css::uno::RuntimeException);
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getURL()
throw (css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getDisplayName()
- throw (css::uno::RuntimeException);
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getDescription()
- throw (css::uno::RuntimeException);
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL
- getUpdateInformationURLs() throw (css::uno::RuntimeException);
-
- virtual css::beans::StringPair SAL_CALL getPublisherInfo() throw (css::uno::RuntimeException);
- virtual css::uno::Reference< css::graphic::XGraphic > SAL_CALL getIcon( sal_Bool bHighContrast ) throw (css::uno::RuntimeException);
-
+ getUpdateInformationURLs()
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
+ virtual css::beans::StringPair SAL_CALL getPublisherInfo()
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
+ virtual css::uno::Reference< css::graphic::XGraphic > SAL_CALL
+ getIcon( sal_Bool bHighContrast )
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
virtual css::uno::Reference<css::deployment::XPackageTypeInfo> SAL_CALL
getPackageType() throw (css::uno::RuntimeException);
virtual void SAL_CALL exportTo(
@@ -231,8 +255,17 @@ public:
::rtl::OUString const & newTitle,
sal_Int32 nameClashAction,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
- throw (css::ucb::CommandFailedException,
+ throw (css::deployment::ExtensionRemovedException,
+ css::ucb::CommandFailedException,
css::ucb::CommandAbortedException, css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getRepositoryName()
+ throw (css::uno::RuntimeException);
+ virtual css::beans::Optional< ::rtl::OUString > SAL_CALL getRegistrationDataURL()
+ throw (css::deployment::ExtensionRemovedException,
+ css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL isRemoved()
+ throw (css::uno::RuntimeException);
+
};
typedef ::cppu::WeakComponentImplHelper2<
@@ -243,7 +276,6 @@ typedef ::cppu::WeakComponentImplHelper2<
class PackageRegistryBackend
: protected ::dp_misc::MutexHolder, public t_BackendBase
{
- ::rtl::OUString m_cachePath;
//The map held originally WeakReferences. The map entries are removed in the disposing
//function, which is called when the XPackages are destructed or they are
//explicitely disposed. The latter happens, for example, when a extension is
@@ -257,13 +289,14 @@ class PackageRegistryBackend
t_string2ref m_bound;
protected:
+ ::rtl::OUString m_cachePath;
css::uno::Reference<css::uno::XComponentContext> m_xComponentContext;
::rtl::OUString m_context;
// currently only for library containers:
enum context {
CONTEXT_UNKNOWN,
- CONTEXT_USER, CONTEXT_SHARED,
+ CONTEXT_USER, CONTEXT_SHARED,CONTEXT_BUNDLED, CONTEXT_TMP,
CONTEXT_DOCUMENT
} m_eContext;
bool m_readOnly;
@@ -276,6 +309,7 @@ protected:
// @@@ to be implemented by specific backend:
virtual css::uno::Reference<css::deployment::XPackage> bindPackage_(
::rtl::OUString const & url, ::rtl::OUString const & mediaType,
+ sal_Bool bRemoved, ::rtl::OUString const & identifier,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
= 0;
@@ -287,6 +321,28 @@ protected:
css::uno::Sequence<css::uno::Any> const & args,
css::uno::Reference<css::uno::XComponentContext> const & xContext );
+ /* creates a folder with a unique name.
+ If url is empty then it is created in the the backend folder, otherwise
+ at a location relative to that folder specified by url.
+ */
+ ::rtl::OUString createFolder(
+ ::rtl::OUString const & relUrl,
+ css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv);
+ /* deletes folders and files.
+
+ All folder all files which end with ".tmp" or ".tmp_" and which are
+ not used are deleted.
+ */
+ void deleteUnusedFolders(
+ ::rtl::OUString const & relUrl,
+ ::std::list< ::rtl::OUString> const & usedFolders);
+ /* deletes one folder with a "temporary" name and the corresponding
+ tmp file, which was used to derive the folder name.
+ */
+ static void deleteTempFolder(
+ ::rtl::OUString const & folderUrl);
+
+
public:
struct StrRegisteringPackage : public ::dp_misc::StaticResourceString<
StrRegisteringPackage, RID_STR_REGISTERING_PACKAGE> {};
@@ -299,6 +355,8 @@ public:
inline ::rtl::OUString const & getCachePath() const { return m_cachePath; }
inline bool transientMode() const { return m_cachePath.getLength() == 0; }
+ inline ::rtl::OUString getContext() const {return m_context; }
+
// XEventListener
virtual void SAL_CALL disposing( css::lang::EventObject const & evt )
throw (css::uno::RuntimeException);
@@ -306,13 +364,12 @@ public:
// XPackageRegistry
virtual css::uno::Reference<css::deployment::XPackage> SAL_CALL bindPackage(
::rtl::OUString const & url, ::rtl::OUString const & mediaType,
+ sal_Bool bRemoved, ::rtl::OUString const & identifier,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
throw (css::deployment::DeploymentException,
+ css::deployment::InvalidRemovedParameterException,
css::ucb::CommandFailedException,
css::lang::IllegalArgumentException, css::uno::RuntimeException);
-// virtual css::uno::Sequence<
-// css::uno::Reference<css::deployment::XPackageTypeInfo> > SAL_CALL
-// getSupportedPackageTypes() throw (css::uno::RuntimeException);
};
}
diff --git a/desktop/source/deployment/registry/inc/dp_backenddb.hxx b/desktop/source/deployment/registry/inc/dp_backenddb.hxx
new file mode 100644
index 000000000000..a0e477979f8c
--- /dev/null
+++ b/desktop/source/deployment/registry/inc/dp_backenddb.hxx
@@ -0,0 +1,170 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_DP_BACKENDDB_HXX
+#define INCLUDED_DP_BACKENDDB_HXX
+
+#include "rtl/ustring.hxx"
+#include <list>
+#include <vector>
+
+namespace css = ::com::sun::star;
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class XComponentContext;
+ }
+ namespace xml { namespace dom {
+ class XDocument;
+ class XNode;
+ }}
+ namespace xml { namespace xpath {
+ class XXPathAPI;
+ }}
+}}}
+
+namespace dp_registry {
+namespace backend {
+
+class BackendDb
+{
+private:
+
+ css::uno::Reference<css::xml::dom::XDocument> m_doc;
+ css::uno::Reference<css::xml::xpath::XXPathAPI> m_xpathApi;
+
+ BackendDb(BackendDb const &);
+ BackendDb & operator = (BackendDb const &);
+
+protected:
+ const css::uno::Reference<css::uno::XComponentContext> m_xContext;
+ ::rtl::OUString m_urlDb;
+
+protected:
+
+ /* caller must make sure that only one thread accesses the function
+ */
+ css::uno::Reference<css::xml::dom::XDocument> getDocument();
+
+ /* the namespace prefix is "reg" (without quotes)
+ */
+ css::uno::Reference<css::xml::xpath::XXPathAPI> getXPathAPI();
+ void save();
+ void removeElement(::rtl::OUString const & sXPathExpression);
+
+ css::uno::Reference<css::xml::dom::XNode> getKeyElement(
+ ::rtl::OUString const & url);
+
+ void writeSimpleList(
+ ::std::list< ::rtl::OUString> const & list,
+ ::rtl::OUString const & sListTagName,
+ ::rtl::OUString const & sMemberTagName,
+ css::uno::Reference<css::xml::dom::XNode> const & xParent);
+
+ void writeVectorOfPair(
+ ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString > > const & vecPairs,
+ ::rtl::OUString const & sVectorTagName,
+ ::rtl::OUString const & sPairTagName,
+ ::rtl::OUString const & sFirstTagName,
+ ::rtl::OUString const & sSecondTagName,
+ css::uno::Reference<css::xml::dom::XNode> const & xParent);
+
+ void writeSimpleElement(
+ ::rtl::OUString const & sElementName, ::rtl::OUString const & value,
+ css::uno::Reference<css::xml::dom::XNode> const & xParent);
+
+ css::uno::Reference<css::xml::dom::XNode> writeKeyElement(
+ ::rtl::OUString const & url);
+
+ ::rtl::OUString readSimpleElement(
+ ::rtl::OUString const & sElementName,
+ css::uno::Reference<css::xml::dom::XNode> const & xParent);
+
+ ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString > >
+ readVectorOfPair(
+ css::uno::Reference<css::xml::dom::XNode> const & parent,
+ ::rtl::OUString const & sListTagName,
+ ::rtl::OUString const & sPairTagName,
+ ::rtl::OUString const & sFirstTagName,
+ ::rtl::OUString const & sSecondTagName);
+
+ ::std::list< ::rtl::OUString> readList(
+ css::uno::Reference<css::xml::dom::XNode> const & parent,
+ ::rtl::OUString const & sListTagName,
+ ::rtl::OUString const & sMemberTagName);
+
+ /* returns the values of one particulary child element of all key elements.
+ */
+ ::std::list< ::rtl::OUString> getOneChildFromAllEntries(
+ ::rtl::OUString const & sElementName);
+
+
+ /* returns the namespace which is to be written as xmlns attribute
+ into the root element.
+ */
+ virtual ::rtl::OUString getDbNSName()=0;
+ /* return the namespace prefix which is to be registered with the XPath API.
+
+ The prefix can then be used in XPath expressions.
+ */
+ virtual ::rtl::OUString getNSPrefix()=0;
+ /* returns the name of the root element without any namespace prefix.
+ */
+ virtual ::rtl::OUString getRootElementName()=0;
+ /* returns the name of xml element for each entry
+ */
+ virtual ::rtl::OUString getKeyElementName()=0;
+
+
+
+public:
+ BackendDb(css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
+ virtual ~BackendDb() {};
+
+ void removeEntry(::rtl::OUString const & url);
+};
+
+class RegisteredDb: public BackendDb
+{
+
+public:
+ RegisteredDb( css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
+ virtual ~RegisteredDb() {};
+
+
+ virtual void addEntry(::rtl::OUString const & url);
+ virtual bool getEntry(::rtl::OUString const & url);
+
+};
+
+
+}
+}
+#endif
+
diff --git a/desktop/source/deployment/registry/makefile.mk b/desktop/source/deployment/registry/makefile.mk
index de0e943654d9..e45cec272ca7 100644
--- a/desktop/source/deployment/registry/makefile.mk
+++ b/desktop/source/deployment/registry/makefile.mk
@@ -41,7 +41,8 @@ INCPRE += inc
SLOFILES = \
$(SLO)$/dp_backend.obj \
- $(SLO)$/dp_registry.obj
+ $(SLO)$/dp_registry.obj \
+ $(SLO)$/dp_backenddb.obj
.INCLUDE : ..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/registry/package/dp_description.cxx b/desktop/source/deployment/registry/package/dp_description.cxx
deleted file mode 100644
index 7c05bfd90a5b..000000000000
--- a/desktop/source/deployment/registry/package/dp_description.cxx
+++ /dev/null
@@ -1,205 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_desktop.hxx"
-
-#include "dp_description.hxx"
-
-#include "cppuhelper/exc_hlp.hxx"
-#include "ucbhelper/content.hxx"
-#include "com/sun/star/deployment/DeploymentException.hpp"
-#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/ucb/CommandFailedException.hpp"
-#include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp"
-#include "com/sun/star/ucb/IOErrorCode.hpp"
-
-#include "com/sun/star/beans/PropertyValue.hpp"
-
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-
-namespace css = com::sun::star;
-namespace cssu = com::sun::star::uno;
-
-namespace dp_registry {
-namespace backend {
-namespace bundle {
-
-ExtensionDescription::ExtensionDescription(
- const cssu::Reference<cssu::XComponentContext>& xContext,
- const ::rtl::OUString& installDir,
- const cssu::Reference< css::ucb::XCommandEnvironment >& xCmdEnv)
-{
- try {
- m_sExtensionRootUrl = installDir;
- //may throw ::com::sun::star::ucb::ContentCreationException
- //If there is no description.xml then ucb will start an interaction which
- //brings up a dialog.We want to prevent this. Therefore we wrap the xCmdEnv
- //and filter the respective exception out.
- ::rtl::OUString sDescriptionUri(installDir + OUSTR("/description.xml"));
- cssu::Reference<css::ucb::XCommandEnvironment> xFilter =
- static_cast<css::ucb::XCommandEnvironment*>(
- new FileDoesNotExistFilter(xCmdEnv));
- ::ucbhelper::Content descContent(sDescriptionUri, xFilter);
-
- //throws an com::sun::star::uno::Exception if the file is not available
- cssu::Reference<css::io::XInputStream> xIn;
- try
- { //throws com.sun.star.ucb.InteractiveAugmentedIOException
- xIn = descContent.openStream();
- }
- catch (cssu::Exception& )
- {
- if ( ! static_cast<FileDoesNotExistFilter*>(xFilter.get())->exist())
- throw NoDescriptionException();
- throw;
- }
- if (!xIn.is())
- {
- throw cssu::Exception(
- OUSTR("Could not get XInputStream for description.xml of extension ") +
- sDescriptionUri, 0);
- }
-
- //get root node of description.xml
- cssu::Reference<css::xml::dom::XDocumentBuilder> xDocBuilder(
- xContext->getServiceManager()->createInstanceWithContext(
- OUSTR("com.sun.star.xml.dom.DocumentBuilder"),
- xContext ), cssu::UNO_QUERY);
- if (!xDocBuilder.is())
- throw css::uno::Exception(OUSTR(" Could not create service com.sun.star.xml.dom.DocumentBuilder"), 0);
-
- if (xDocBuilder->isNamespaceAware() == sal_False)
- {
- throw cssu::Exception(
- OUSTR("Service com.sun.star.xml.dom.DocumentBuilder is not namespace aware."), 0);
- }
-
- cssu::Reference<css::xml::dom::XDocument> xDoc = xDocBuilder->parse(xIn);
- if (!xDoc.is())
- {
- throw cssu::Exception(sDescriptionUri + OUSTR(" contains data which cannot be parsed. "), 0);
- }
-
- //check for proper root element and namespace
- cssu::Reference<css::xml::dom::XElement> xRoot = xDoc->getDocumentElement();
- if (!xRoot.is())
- {
- throw cssu::Exception(
- sDescriptionUri + OUSTR(" contains no root element."), 0);
- }
-
- if ( ! xRoot->getTagName().equals(OUSTR("description")))
- {
- throw cssu::Exception(
- sDescriptionUri + OUSTR(" does not contain the root element <description>."), 0);
- }
-
- m_xRoot = cssu::Reference<css::xml::dom::XNode>(
- xRoot, cssu::UNO_QUERY_THROW);
- ::rtl::OUString nsDescription = xRoot->getNamespaceURI();
-
- //check if this namespace is supported
- if ( ! nsDescription.equals(OUSTR("http://openoffice.org/extensions/description/2006")))
- {
- throw cssu::Exception(sDescriptionUri + OUSTR(" contains a root element with an unsupported namespace. "), 0);
- }
- } catch (css::uno::RuntimeException &) {
- throw;
- } catch (css::deployment::DeploymentException &) {
- throw;
- } catch (css::uno::Exception & e) {
- css::uno::Any a(cppu::getCaughtException());
- throw css::deployment::DeploymentException(
- e.Message, css::uno::Reference< css::uno::XInterface >(), a);
- }
-}
-
-ExtensionDescription::~ExtensionDescription()
-{
-}
-
-//======================================================================
-FileDoesNotExistFilter::FileDoesNotExistFilter(
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv):
- m_bExist(true), m_xCommandEnv(xCmdEnv)
-{}
-
-FileDoesNotExistFilter::~FileDoesNotExistFilter()
-{
-};
-
-bool FileDoesNotExistFilter::exist()
-{
- return m_bExist;
-}
- // XCommandEnvironment
-cssu::Reference<css::task::XInteractionHandler >
- FileDoesNotExistFilter::getInteractionHandler() throw (css::uno::RuntimeException)
-{
- return static_cast<css::task::XInteractionHandler*>(this);
-}
-
-cssu::Reference<css::ucb::XProgressHandler >
- FileDoesNotExistFilter::getProgressHandler() throw (css::uno::RuntimeException)
-{
- return m_xCommandEnv.is()
- ? m_xCommandEnv->getProgressHandler()
- : cssu::Reference<css::ucb::XProgressHandler>();
-}
-
-// XInteractionHandler
-//If the interaction was caused by a non-existing file which is specified in the ctor
-//of FileDoesNotExistFilter, then we do nothing
-void FileDoesNotExistFilter::handle(
- cssu::Reference<css::task::XInteractionRequest > const & xRequest )
- throw (css::uno::RuntimeException)
-{
- cssu::Any request( xRequest->getRequest() );
-
- css::ucb::InteractiveAugmentedIOException ioexc;
- if ((request>>= ioexc) && ioexc.Code == css::ucb::IOErrorCode_NOT_EXISTING )
- {
- m_bExist = false;
- return;
- }
- css::uno::Reference<css::task::XInteractionHandler> xInteraction;
- if (m_xCommandEnv.is()) {
- xInteraction = m_xCommandEnv->getInteractionHandler();
- }
- if (xInteraction.is()) {
- xInteraction->handle(xRequest);
- }
-}
-
-
-} // namespace bundle
-} // namespace backend
-} // namespace dp_registry
-
diff --git a/desktop/source/deployment/registry/package/dp_description.hxx b/desktop/source/deployment/registry/package/dp_description.hxx
deleted file mode 100644
index eb74c454af75..000000000000
--- a/desktop/source/deployment/registry/package/dp_description.hxx
+++ /dev/null
@@ -1,125 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-#if !defined INCLUDED_DESKTOP_EXTENSION_DESCRIPTION_HXX
-#define INCLUDED_DESKTOP_EXTENSION_DESCRIPTION_HXX
-
-
-
-#include "com/sun/star/uno/Reference.hxx"
-
-#include "com/sun/star/ucb/XCommandEnvironment.hpp"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/xml/dom/XNode.hpp"
-#include "com/sun/star/task/XInteractionHandler.hpp"
-#include "cppuhelper/implbase2.hxx"
-
-
-namespace css = ::com::sun::star;
-
-namespace dp_registry {
-namespace backend {
-namespace bundle {
-
-/**The class uses the UCB to access the description.xml file in an
- extension. The UCB must have been initialized already. It also
- requires that the extension has already be unzipped to a particular
- location.
- */
-class ExtensionDescription
-{
-public:
- /**throws an exception if the description.xml is not
- available, cannot be read, does not contain the expected data,
- or any other error occured. Therefore it shoult only be used with
- new extensions.
-
- Throws com::sun::star::uno::RuntimeException,
- com::sun::star::deployment::DeploymentException,
- dp_registry::backend::bundle::NoDescriptionException.
- */
- ExtensionDescription(
- const css::uno::Reference<css::uno::XComponentContext>& xContext,
- const ::rtl::OUString& installDir,
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv);
-
- ~ExtensionDescription();
-
- css::uno::Reference<css::xml::dom::XNode> getRootElement() const
- {
- return m_xRoot;
- }
-
- ::rtl::OUString getExtensionRootUrl() const
- {
- return m_sExtensionRootUrl;
- }
-
-
-private:
- css::uno::Reference<css::xml::dom::XNode> m_xRoot;
- ::rtl::OUString m_sExtensionRootUrl;
-};
-
-class NoDescriptionException
-{
-};
-
-class FileDoesNotExistFilter
- : public ::cppu::WeakImplHelper2< css::ucb::XCommandEnvironment,
- css::task::XInteractionHandler >
-
-{
- //css::uno::Reference<css::task::XInteractionHandler> m_xHandler;
- bool m_bExist;
- css::uno::Reference< css::ucb::XCommandEnvironment > m_xCommandEnv;
-
-public:
- virtual ~FileDoesNotExistFilter();
- FileDoesNotExistFilter(
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv);
-
- bool exist();
- // XCommandEnvironment
- virtual css::uno::Reference<css::task::XInteractionHandler > SAL_CALL
- getInteractionHandler() throw (css::uno::RuntimeException);
- virtual css::uno::Reference<css::ucb::XProgressHandler >
- SAL_CALL getProgressHandler() throw (css::uno::RuntimeException);
-
- // XInteractionHandler
- virtual void SAL_CALL handle(
- css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
- throw (css::uno::RuntimeException);
-};
-
-
-} // namespace bundle
-} // namespace backend
-} // namespace dp_registry
-
-
-#endif // INCLUDED_DESKTOP_LICENSE_INTERACT_HXX
diff --git a/desktop/source/deployment/registry/package/dp_extbackenddb.cxx b/desktop/source/deployment/registry/package/dp_extbackenddb.cxx
new file mode 100644
index 000000000000..2e92a907f8fb
--- /dev/null
+++ b/desktop/source/deployment/registry/package/dp_extbackenddb.cxx
@@ -0,0 +1,135 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "rtl/string.h"
+#include "rtl/bootstrap.hxx"
+#include "cppuhelper/exc_hlp.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
+#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
+#include "dp_misc.h"
+
+#include "dp_extbackenddb.hxx"
+
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+
+#define EXTENSION_REG_NS "http://openoffice.org/extensionmanager/extension-registry/2010"
+#define NS_PREFIX "ext"
+#define ROOT_ELEMENT_NAME "extension-backend-db"
+#define KEY_ELEMENT_NAME "extension"
+
+namespace dp_registry {
+namespace backend {
+namespace bundle {
+
+ExtensionBackendDb::ExtensionBackendDb(
+ Reference<XComponentContext> const & xContext,
+ ::rtl::OUString const & url):BackendDb(xContext, url)
+{
+
+}
+
+OUString ExtensionBackendDb::getDbNSName()
+{
+ return OUSTR(EXTENSION_REG_NS);
+}
+
+OUString ExtensionBackendDb::getNSPrefix()
+{
+ return OUSTR(NS_PREFIX);
+}
+
+OUString ExtensionBackendDb::getRootElementName()
+{
+ return OUSTR(ROOT_ELEMENT_NAME);
+}
+
+OUString ExtensionBackendDb::getKeyElementName()
+{
+ return OUSTR(KEY_ELEMENT_NAME);
+}
+
+void ExtensionBackendDb::addEntry(::rtl::OUString const & url, Data const & data)
+{
+ try{
+ Reference<css::xml::dom::XNode> extensionNodeNode = writeKeyElement(url);
+ writeVectorOfPair(
+ data.items,
+ OUSTR("extension-items"),
+ OUSTR("item"),
+ OUSTR("url"),
+ OUSTR("media-type"),
+ extensionNodeNode);
+ save();
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to write data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+ExtensionBackendDb::Data ExtensionBackendDb::getEntry(::rtl::OUString const & url)
+{
+ try
+ {
+ ExtensionBackendDb::Data retData;
+ Reference<css::xml::dom::XNode> aNode = getKeyElement(url);
+
+ if (aNode.is())
+ {
+ retData.items =
+ readVectorOfPair(
+ aNode,
+ OUSTR("extension-items"),
+ OUSTR("item"),
+ OUSTR("url"),
+ OUSTR("media-type"));
+ }
+ return retData;
+ }
+ catch(css::uno::Exception &)
+ {
+ Any exc( ::cppu::getCaughtException() );
+ throw css::deployment::DeploymentException(
+ OUSTR("Extension Manager: failed to read data entry in backend db: ") +
+ m_urlDb, 0, exc);
+ }
+}
+
+} // namespace bundle
+} // namespace backend
+} // namespace dp_registry
+
diff --git a/desktop/source/deployment/registry/package/dp_extbackenddb.hxx b/desktop/source/deployment/registry/package/dp_extbackenddb.hxx
new file mode 100644
index 000000000000..d09fd0891a32
--- /dev/null
+++ b/desktop/source/deployment/registry/package/dp_extbackenddb.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+
+#if ! defined INCLUDED_DP_EXTBACKENDDB_HXX
+#define INCLUDED_DP_EXTBACKENDDB_HXX
+
+#include "rtl/ustring.hxx"
+#include "rtl/string.hxx"
+#include <vector>
+#include "dp_backenddb.hxx"
+
+namespace css = ::com::sun::star;
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class XComponentContext;
+ }
+ namespace xml { namespace dom {
+ class XDocument;
+ class XNode;
+ }}
+ namespace xml { namespace xpath {
+ class XXPathAPI;
+ }}
+}}}
+
+namespace dp_registry {
+namespace backend {
+namespace bundle {
+
+/* The XML file stores the extensions which are currently registered.
+ They will be removed when they are revoked.
+ */
+class ExtensionBackendDb: public dp_registry::backend::BackendDb
+{
+protected:
+ virtual ::rtl::OUString getDbNSName();
+ virtual ::rtl::OUString getNSPrefix();
+ virtual ::rtl::OUString getRootElementName();
+ virtual ::rtl::OUString getKeyElementName();
+
+public:
+ struct Data
+ {
+ /* every element consists of a pair of the url to the item (jar,rdb, etc)
+ and the media type
+ */
+ ::std::vector< ::std::pair< ::rtl::OUString, ::rtl::OUString> > items;
+ typedef ::std::vector<
+ ::std::pair< ::rtl::OUString, ::rtl::OUString> >::const_iterator ITC_ITEMS;
+
+ };
+
+public:
+
+ ExtensionBackendDb( css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
+
+ void addEntry(::rtl::OUString const & url, Data const & data);
+
+ Data getEntry(::rtl::OUString const & url);
+
+};
+
+
+
+}
+}
+}
+#endif
+
diff --git a/desktop/source/deployment/registry/package/dp_package.cxx b/desktop/source/deployment/registry/package/dp_package.cxx
index b0b4a918c7a3..2ad6478b665c 100644
--- a/desktop/source/deployment/registry/package/dp_package.cxx
+++ b/desktop/source/deployment/registry/package/dp_package.cxx
@@ -34,7 +34,6 @@
#include "dp_interact.h"
#include "dp_dependencies.hxx"
#include "dp_platform.hxx"
-#include "dp_description.hxx"
#include "dp_descriptioninfoset.hxx"
#include "dp_identifier.hxx"
#include "rtl/uri.hxx"
@@ -65,8 +64,8 @@
#include "com/sun/star/packages/manifest/XManifestWriter.hpp"
#include "com/sun/star/deployment/DependencyException.hpp"
#include "com/sun/star/deployment/LicenseException.hpp"
-#include "com/sun/star/deployment/LicenseIndividualAgreementException.hpp"
#include "com/sun/star/deployment/PlatformException.hpp"
+#include "com/sun/star/deployment/Prerequisites.hpp"
#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
#include "com/sun/star/deployment/XPackageManager.hpp"
@@ -74,13 +73,13 @@
#include <vector>
#include <stdio.h>
-
+#include "dp_extbackenddb.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::ucb;
+
namespace css = ::com::sun::star;
-namespace cssu = ::com::sun::star::uno;
+
using ::rtl::OUString;
namespace dp_registry {
@@ -106,44 +105,48 @@ class BackendImpl : public ImplBaseT
Sequence< Reference<deployment::XPackage> > m_bundle;
Sequence< Reference<deployment::XPackage> > * m_pBundle;
+ ExtensionBackendDb::Data m_dbData;
+
Reference<deployment::XPackage> bindBundleItem(
OUString const & url, OUString const & mediaType,
- Reference<XCommandEnvironment> const & xCmdEnv,
+ sal_Bool bRemoved, //that is, useing data base information
+ OUString const & identifier,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv,
bool notifyDetectionError = true );
typedef ::std::vector< Reference<deployment::XPackage> > t_packagevec;
void scanBundle(
t_packagevec & bundle,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv );
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv );
void scanLegacyBundle(
t_packagevec & bundle,
OUString const & url,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv,
bool skip_registration = false );
-
+ ::std::vector<Reference<deployment::XPackage> > getPackagesFromDb(
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv);
bool checkPlatform(
- css::uno::Reference< css::ucb::XCommandEnvironment > const & environment);
+ Reference<ucb::XCommandEnvironment > const & environment);
bool checkDependencies(
- css::uno::Reference< css::ucb::XCommandEnvironment > const &
+ Reference<ucb::XCommandEnvironment > const &
environment,
- ExtensionDescription const & description);
+ DescriptionInfoset const & description);
// throws css::uno::RuntimeException,
// css::deployment::DeploymentException
::sal_Bool checkLicense(
- css::uno::Reference< css::ucb::XCommandEnvironment > const & xCmdEnv,
- ExtensionDescription const& description, bool bInstalled,
- OUString const & aContextName )
- throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::ucb::CommandAbortedException,
- css::uno::RuntimeException);
+ Reference< ucb::XCommandEnvironment > const & xCmdEnv,
+ DescriptionInfoset const & description, bool bNoLicenseChecking)
+ throw (deployment::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ RuntimeException);
// @throws DeploymentException
OUString getTextFromURL(
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv,
+ const Reference< ucb::XCommandEnvironment >& xCmdEnv,
const OUString& licenseUrl);
DescriptionInfoset getDescriptionInfoset();
@@ -152,12 +155,13 @@ class BackendImpl : public ImplBaseT
virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_(
::osl::ResettableMutexGuard & guard,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv );
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv );
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv );
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv );
virtual void SAL_CALL disposing();
@@ -169,57 +173,68 @@ class BackendImpl : public ImplBaseT
OUString const & url,
OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
- bool legacyBundle )
- : Package( myBackend, url, name, name /* display-name */,
- xPackageType ),
- m_url_expanded( expandUnoRcUrl( url ) ),
- m_legacyBundle( legacyBundle ),
- m_pBundle( 0 )
- {}
+ bool legacyBundle,
+ bool bRemoved,
+ OUString const & identifier);
// XPackage
virtual sal_Bool SAL_CALL isBundle() throw (RuntimeException);
+
virtual Sequence< Reference<deployment::XPackage> > SAL_CALL getBundle(
Reference<task::XAbortChannel> const & xAbortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
throw (deployment::DeploymentException,
- CommandFailedException, CommandAbortedException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
lang::IllegalArgumentException, RuntimeException);
- virtual OUString SAL_CALL getDescription() throw (RuntimeException);
+ virtual OUString SAL_CALL getDescription()
+ throw (deployment::ExtensionRemovedException, RuntimeException);
+
virtual void SAL_CALL exportTo(
OUString const & destFolderURL, OUString const & newTitle,
sal_Int32 nameClashAction,
- Reference<XCommandEnvironment> const & xCmdEnv )
- throw (CommandFailedException, CommandAbortedException,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (deployment::ExtensionRemovedException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
RuntimeException);
- virtual ::sal_Bool SAL_CALL checkPrerequisites(
- const css::uno::Reference< css::task::XAbortChannel >& xAbortChannel,
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv,
- ::sal_Bool bInstalled, OUString const & aContextName)
- throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::ucb::CommandAbortedException,
- css::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL checkPrerequisites(
+ const Reference< task::XAbortChannel >& xAbortChannel,
+ const Reference< ucb::XCommandEnvironment >& xCmdEnv,
+ ::sal_Bool noLicenseChecking)
+ throw (deployment::ExtensionRemovedException,
+ deployment::DeploymentException,
+ ucb::CommandFailedException,
+ ucb::CommandAbortedException,
+ RuntimeException);
virtual ::sal_Bool SAL_CALL checkDependencies(
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv )
- throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::uno::RuntimeException);
+ const Reference< ucb::XCommandEnvironment >& xCmdEnv )
+ throw (deployment::DeploymentException,
+ deployment::ExtensionRemovedException,
+ ucb::CommandFailedException,
+ RuntimeException);
virtual beans::Optional<OUString> SAL_CALL getIdentifier()
throw (RuntimeException);
- virtual OUString SAL_CALL getVersion() throw (RuntimeException);
+ virtual OUString SAL_CALL getVersion()
+ throw (deployment::ExtensionRemovedException, RuntimeException);
virtual Sequence<OUString> SAL_CALL getUpdateInformationURLs()
- throw (RuntimeException);
+ throw (deployment::ExtensionRemovedException, RuntimeException);
- virtual css::beans::StringPair SAL_CALL getPublisherInfo() throw (css::uno::RuntimeException);
+ virtual beans::StringPair SAL_CALL getPublisherInfo()
+ throw (deployment::ExtensionRemovedException, RuntimeException);
- virtual OUString SAL_CALL getDisplayName() throw (RuntimeException);
- virtual css::uno::Reference< css::graphic::XGraphic > SAL_CALL getIcon( ::sal_Bool bHighContrast ) throw (css::uno::RuntimeException);
+ virtual OUString SAL_CALL getDisplayName()
+ throw (deployment::ExtensionRemovedException, RuntimeException);
+
+ virtual Reference< graphic::XGraphic > SAL_CALL
+ getIcon( ::sal_Bool bHighContrast )
+ throw (deployment::ExtensionRemovedException,
+ RuntimeException);
};
friend class PackageImpl;
@@ -228,10 +243,17 @@ class BackendImpl : public ImplBaseT
const Reference<deployment::XPackageTypeInfo> m_xLegacyBundleTypeInfo;
Sequence< Reference<deployment::XPackageTypeInfo> > m_typeInfos;
+ std::auto_ptr<ExtensionBackendDb> m_backendDb;
+
+ void addDataToDb(OUString const & url, ExtensionBackendDb::Data const & data);
+ ExtensionBackendDb::Data readDataFromDb(OUString const & url);
+ void deleteDataFromDb(OUString const & url);
+
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
OUString const & url, OUString const & mediaType,
- Reference<XCommandEnvironment> const & xCmdEnv );
+ sal_Bool bRemoved, OUString const & identifier,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv );
virtual void SAL_CALL disposing();
@@ -291,6 +313,14 @@ BackendImpl::BackendImpl(
{
m_typeInfos[ 0 ] = m_xBundleTypeInfo;
m_typeInfos[ 1 ] = m_xLegacyBundleTypeInfo;
+
+ if (!transientMode())
+ {
+ OUString dbFile = makeURL(getCachePath(), getImplementationName());
+ dbFile = makeURL(dbFile, OUSTR("backenddb.xml"));
+ m_backendDb.reset(
+ new ExtensionBackendDb(getComponentContext(), dbFile));
+ }
}
//______________________________________________________________________________
@@ -333,7 +363,8 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::bindPackage_(
OUString const & url, OUString const & mediaType_,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ sal_Bool bRemoved, OUString const & identifier,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
{
OUString mediaType( mediaType_ );
if (mediaType.getLength() == 0)
@@ -347,7 +378,7 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
//Every .oxt, uno.pkg file must contain a META-INF folder
::ucbhelper::Content metaInfContent;
if (create_ucb_content(
- &metaInfContent, makeURL( url, OUSTR("META-INF/manifest.xml") ),
+ &metaInfContent, makeURL( url, OUSTR("META-INF") ),
xCmdEnv, false /* no throw */ ))
{
mediaType = OUSTR("application/vnd.sun.star.package-bundle");
@@ -381,19 +412,26 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
if (type.EqualsIgnoreCaseAscii("application"))
{
- ::ucbhelper::Content ucbContent( url, xCmdEnv );
+
+ //In case a XPackage is created for a removed extension, we cannot
+ //obtain the name
+ OUString name;
+ if (!bRemoved)
+ {
+ ::ucbhelper::Content ucbContent( url, xCmdEnv );
+ name = ucbContent.getPropertyValue(
+ StrTitle::get() ).get<OUString>();
+ }
if (subType.EqualsIgnoreCaseAscii("vnd.sun.star.package-bundle")) {
return new PackageImpl(
- this, url, ucbContent.getPropertyValue(
- StrTitle::get() ).get<OUString>(),
- m_xBundleTypeInfo, false );
+ this, url, name, m_xBundleTypeInfo, false, bRemoved,
+ identifier);
}
else if (subType.EqualsIgnoreCaseAscii(
"vnd.sun.star.legacy-package-bundle")) {
return new PackageImpl(
- this, url, ucbContent.getPropertyValue(
- StrTitle::get() ).get<OUString>(),
- m_xLegacyBundleTypeInfo, true );
+ this, url, name, m_xLegacyBundleTypeInfo, true, bRemoved,
+ identifier);
}
}
}
@@ -403,8 +441,47 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
static_cast<sal_Int16>(-1) );
}
+void BackendImpl::addDataToDb(
+ OUString const & url, ExtensionBackendDb::Data const & data)
+{
+ if (m_backendDb.get())
+ m_backendDb->addEntry(url, data);
+}
+
+ExtensionBackendDb::Data BackendImpl::readDataFromDb(
+ OUString const & url)
+{
+ ExtensionBackendDb::Data data;
+ if (m_backendDb.get())
+ data = m_backendDb->getEntry(url);
+ return data;
+}
+
+void BackendImpl::deleteDataFromDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->removeEntry(url);
+}
+
+
//##############################################################################
+BackendImpl::PackageImpl::PackageImpl(
+ ::rtl::Reference<PackageRegistryBackend> const & myBackend,
+ OUString const & url,
+ OUString const & name,
+ Reference<deployment::XPackageTypeInfo> const & xPackageType,
+ bool legacyBundle, bool bRemoved, OUString const & identifier)
+ : Package( myBackend, url, name, name /* display-name */,
+ xPackageType, bRemoved, identifier),
+ m_url_expanded( expandUnoRcUrl( url ) ),
+ m_legacyBundle( legacyBundle ),
+ m_pBundle( 0 )
+{
+ if (bRemoved)
+ m_dbData = getMyBackend()->readDataFromDb(url);
+}
+
BackendImpl * BackendImpl::PackageImpl::getMyBackend() const
{
BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
@@ -437,22 +514,23 @@ beans::Optional< beans::Ambiguous<sal_Bool> >
BackendImpl::PackageImpl::isRegistered_(
::osl::ResettableMutexGuard &,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
{
+ //In case the object was created for a removed extension (m_bRemoved = true)
+ //but the extension is not registered, then bundle will be empty. Then
+ //the return value will be Optional<...>.IsPresent= false. Althoug this is
+ //not true, this does not matter. Then registerPackage or revokePackage
+ //would never be called for the items. But since the extension is removed
+ //and not registered anyway, this does not matter.
const Sequence< Reference<deployment::XPackage> > bundle(
getBundle( abortChannel.get(), xCmdEnv ) );
+
bool reg = false;
bool present = false;
bool ambig = false;
for ( sal_Int32 pos = bundle.getLength(); pos--; )
{
Reference<deployment::XPackage> const & xPackage = bundle[ pos ];
- //disregard executable (application/vnd.sun.star.executable)
- //it will not be disabled/enabled.
- OUString sType = xPackage->getPackageType()->getMediaType();
- if (sType.equals(OUSTR("application/vnd.sun.star.executable")))
- continue;
-
Reference<task::XAbortChannel> xSubAbortChannel(
xPackage->createAbortChannel() );
AbortChannel::Chain chain( abortChannel, xSubAbortChannel );
@@ -510,23 +588,7 @@ OUString BackendImpl::PackageImpl::getTextFromURL(
DescriptionInfoset BackendImpl::PackageImpl::getDescriptionInfoset()
{
- css::uno::Reference< css::xml::dom::XNode > root;
- try {
- root =
- ExtensionDescription(
- getMyBackend()->getComponentContext(), m_url_expanded,
- css::uno::Reference< css::ucb::XCommandEnvironment >()).
- getRootElement();
- } catch (NoDescriptionException &) {
- } catch (css::deployment::DeploymentException & e) {
- throw RuntimeException(
- (OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.deployment.DeploymentException: ")) +
- e.Message),
- static_cast< OWeakObject * >(this));
- }
- return DescriptionInfoset(getMyBackend()->getComponentContext(), root);
+ return dp_misc::getDescriptionInfoset(m_url_expanded);
}
bool BackendImpl::PackageImpl::checkPlatform(
@@ -561,14 +623,11 @@ bool BackendImpl::PackageImpl::checkPlatform(
bool BackendImpl::PackageImpl::checkDependencies(
css::uno::Reference< css::ucb::XCommandEnvironment > const & environment,
- ExtensionDescription const & description)
+ DescriptionInfoset const & description)
{
css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
- unsatisfied(
- dp_misc::Dependencies::check(
- DescriptionInfoset(
- getMyBackend()->getComponentContext(),
- description.getRootElement())));
+ unsatisfied(dp_misc::Dependencies::check(description));
+
if (unsatisfied.getLength() == 0) {
return true;
} else {
@@ -590,7 +649,7 @@ bool BackendImpl::PackageImpl::checkDependencies(
::sal_Bool BackendImpl::PackageImpl::checkLicense(
css::uno::Reference< css::ucb::XCommandEnvironment > const & xCmdEnv,
- ExtensionDescription const & desc, bool bInstalled, OUString const & aContextName)
+ DescriptionInfoset const & info, bool alreadyInstalled)
throw (css::deployment::DeploymentException,
css::ucb::CommandFailedException,
css::ucb::CommandAbortedException,
@@ -598,7 +657,6 @@ bool BackendImpl::PackageImpl::checkDependencies(
{
try
{
- DescriptionInfoset info = getDescriptionInfoset();
::boost::optional<SimpleLicenseAttributes> simplLicAttr
= info.getSimpleLicenseAttributes();
if (! simplLicAttr)
@@ -610,7 +668,7 @@ bool BackendImpl::PackageImpl::checkDependencies(
if (sLic.getLength() == 0)
throw css::deployment::DeploymentException(
OUSTR("Could not obtain path to license. Possible error in description.xml"), 0, Any());
- OUString sHref = desc.getExtensionRootUrl() + OUSTR("/") + sLic;
+ OUString sHref = m_url_expanded + OUSTR("/") + sLic;
OUString sLicense = getTextFromURL(xCmdEnv, sHref);
////determine who has to agree to the license
//check correct value for attribute
@@ -618,41 +676,21 @@ bool BackendImpl::PackageImpl::checkDependencies(
throw css::deployment::DeploymentException(
OUSTR("Could not obtain attribute simple-lincense@accept-by or it has no valid value"), 0, Any());
- //If if @accept-by="user" then every user needs to accept the license before it can be installed.
- //Therefore we must prevent the installation as shared extension unless suppress-if-required="true"
- OSL_ASSERT(aContextName.getLength());
- if (simplLicAttr->acceptBy.equals(OUSTR("user")) && aContextName.equals(OUSTR("shared")))
- {
- css::deployment::LicenseIndividualAgreementException
- exc = css::deployment::LicenseIndividualAgreementException(
- OUString(), 0, m_name, simplLicAttr->suppressIfRequired);
-
- bool approve = false;
- bool abort = false;
- if (! interactContinuation(
- Any(exc), task::XInteractionApprove::static_type(), xCmdEnv, &approve, &abort ))
- throw css::deployment::DeploymentException(
- OUSTR("Could not interact with user."), 0, Any());
- if (abort == true)
- return false;
-
- //If the unopkg --suppress-license was used and simplLicAttr->suppressIfRequired == true,
- //then the user implicitely accepts the license
- }
//Only use interaction if there is no version of this extension already installed
//and the suppress-on-update flag is not set for the new extension
- // bInstalled | bSuppressOnUpdate | show license
+ // alreadyInstalled | bSuppressOnUpdate | show license
//----------------------------------------
// 0 | 0 | 1
// 0 | 1 | 1
// 1 | 0 | 1
// 1 | 1 | 0
- if ( !(bInstalled && simplLicAttr->suppressOnUpdate))
+ if ( !(alreadyInstalled && simplLicAttr->suppressOnUpdate))
{
css::deployment::LicenseException licExc(
- OUString(), 0, m_name, sLicense, simplLicAttr->suppressIfRequired);
+ OUString(), 0, getDisplayName(), sLicense,
+ simplLicAttr->acceptBy);
bool approve = false;
bool abort = false;
if (! interactContinuation(
@@ -684,69 +722,88 @@ bool BackendImpl::PackageImpl::checkDependencies(
}
}
-::sal_Bool BackendImpl::PackageImpl::checkPrerequisites(
+::sal_Int32 BackendImpl::PackageImpl::checkPrerequisites(
const css::uno::Reference< css::task::XAbortChannel >&,
const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv,
- sal_Bool bInstalled, OUString const & aContextName)
+ sal_Bool alreadyInstalled)
throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::ucb::CommandAbortedException,
- css::uno::RuntimeException)
+ css::deployment::ExtensionRemovedException,
+ css::ucb::CommandFailedException,
+ css::ucb::CommandAbortedException,
+ css::uno::RuntimeException)
{
- std::auto_ptr<ExtensionDescription> spDescription;
- try {
- spDescription.reset(
- new ExtensionDescription(
- getMyBackend()->getComponentContext(),
- m_url_expanded,
- xCmdEnv));
- } catch (NoDescriptionException& ) {
- return sal_True;
- }
- return checkPlatform(xCmdEnv)
- && checkDependencies(xCmdEnv, *spDescription)
- && checkLicense(xCmdEnv, *spDescription, bInstalled, aContextName);
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+ DescriptionInfoset info = getDescriptionInfoset();
+ if (!info.hasDescription())
+ return 0;
+
+ //always return LICENSE as long as the user did not accept the license
+ //so that XExtensonManager::checkPrerequisitesAndEnable will again
+ //check the license
+ if (!checkPlatform(xCmdEnv))
+ return deployment::Prerequisites::PLATFORM |
+ deployment::Prerequisites::LICENSE;
+ else if(!checkDependencies(xCmdEnv, info))
+ return deployment::Prerequisites::DEPENDENCIES |
+ deployment::Prerequisites::LICENSE;
+ else if(!checkLicense(xCmdEnv, info, alreadyInstalled))
+ return deployment::Prerequisites::LICENSE;
+ else
+ return 0;
}
::sal_Bool BackendImpl::PackageImpl::checkDependencies(
const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv )
- throw (css::deployment::DeploymentException,
- css::ucb::CommandFailedException,
- css::uno::RuntimeException)
+ throw (deployment::DeploymentException,
+ deployment::ExtensionRemovedException,
+ ucb::CommandFailedException,
+ RuntimeException)
{
- std::auto_ptr<ExtensionDescription> spDescription;
- try {
- spDescription.reset(
- new ExtensionDescription( getMyBackend()->getComponentContext(), m_url_expanded, xCmdEnv ));
- } catch (NoDescriptionException& ) {
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+ DescriptionInfoset info = getDescriptionInfoset();
+ if (!info.hasDescription())
return sal_True;
- }
- return checkDependencies(xCmdEnv, *spDescription);
+
+ return checkDependencies(xCmdEnv, info);
}
beans::Optional<OUString> BackendImpl::PackageImpl::getIdentifier()
throw (RuntimeException)
{
+ OUString identifier;
+ if (m_bRemoved)
+ identifier = m_identifier;
+ else
+ identifier = dp_misc::generateIdentifier(
+ getDescriptionInfoset().getIdentifier(), m_name);
+
return beans::Optional<OUString>(
- true,
- dp_misc::generateIdentifier(
- getDescriptionInfoset().getIdentifier(), m_name));
+ true, identifier);
}
-OUString BackendImpl::PackageImpl::getVersion() throw (RuntimeException)
+OUString BackendImpl::PackageImpl::getVersion()
+ throw (deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
return getDescriptionInfoset().getVersion();
}
Sequence<OUString> BackendImpl::PackageImpl::getUpdateInformationURLs()
- throw (RuntimeException)
+ throw (deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
return getDescriptionInfoset().getUpdateInformationUrls();
}
beans::StringPair BackendImpl::PackageImpl::getPublisherInfo()
- throw (RuntimeException)
+ throw (deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
::std::pair< OUString, OUString > aInfo = getDescriptionInfoset().getLocalizedPublisherNameAndURL();
beans::StringPair aStrPair( aInfo.first, aInfo.second );
return aStrPair;
@@ -754,8 +811,11 @@ beans::StringPair BackendImpl::PackageImpl::getPublisherInfo()
//______________________________________________________________________________
uno::Reference< graphic::XGraphic > BackendImpl::PackageImpl::getIcon( sal_Bool bHighContrast )
- throw ( RuntimeException )
+ throw (deployment::ExtensionRemovedException, RuntimeException )
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+
uno::Reference< graphic::XGraphic > xGraphic;
OUString aIconURL = getDescriptionInfoset().getIconURL( bHighContrast );
@@ -785,14 +845,16 @@ uno::Reference< graphic::XGraphic > BackendImpl::PackageImpl::getIcon( sal_Bool
void BackendImpl::PackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
{
const Sequence< Reference<deployment::XPackage> > bundle(
getBundle( abortChannel.get(), xCmdEnv ) );
if (doRegisterPackage)
{
+ ExtensionBackendDb::Data data;
const sal_Int32 len = bundle.getLength();
for ( sal_Int32 pos = 0; pos < len; ++pos )
{
@@ -802,12 +864,12 @@ void BackendImpl::PackageImpl::processPackage_(
xPackage->createAbortChannel() );
AbortChannel::Chain chain( abortChannel, xSubAbortChannel );
try {
- xPackage->registerPackage( xSubAbortChannel, xCmdEnv );
+ xPackage->registerPackage( startup, xSubAbortChannel, xCmdEnv );
}
catch (RuntimeException &) {
throw;
}
- catch (CommandAbortedException &) {
+ catch (ucb::CommandAbortedException &) {
throw;
}
catch (Exception &) {
@@ -845,7 +907,7 @@ void BackendImpl::PackageImpl::processPackage_(
catch (RuntimeException &) {
throw;
}
- catch (CommandAbortedException &) {
+ catch (ucb::CommandAbortedException &) {
throw;
}
catch (Exception &) {
@@ -862,7 +924,7 @@ void BackendImpl::PackageImpl::processPackage_(
deployment::DeploymentException dpExc;
if (exc >>= dpExc) {
- throw CommandFailedException(
+ throw ucb::CommandFailedException(
dpExc.Message, dpExc.Context, dpExc.Cause );
}
else {
@@ -870,7 +932,11 @@ void BackendImpl::PackageImpl::processPackage_(
::cppu::throwException(exc);
}
}
+ data.items.push_back(
+ ::std::make_pair(xPackage->getURL(),
+ xPackage->getPackageType()->getMediaType()));
}
+ getMyBackend()->addDataToDb(getURL(), data);
}
else
{
@@ -888,7 +954,7 @@ void BackendImpl::PackageImpl::processPackage_(
catch (RuntimeException &) {
throw;
}
- catch (CommandAbortedException &) {
+ catch (ucb::CommandAbortedException &) {
throw;
}
catch (Exception &) {
@@ -914,12 +980,17 @@ void BackendImpl::PackageImpl::processPackage_(
// selected
}
}
+ getMyBackend()->deleteDataFromDb(getURL());
}
}
//______________________________________________________________________________
-OUString BackendImpl::PackageImpl::getDescription() throw (RuntimeException)
+OUString BackendImpl::PackageImpl::getDescription()
+ throw (deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+
const OUString sRelativeURL(getDescriptionInfoset().getLocalizedDescriptionURL());
OUString sDescription;
if (sRelativeURL.getLength())
@@ -940,9 +1011,14 @@ OUString BackendImpl::PackageImpl::getDescription() throw (RuntimeException)
//______________________________________________________________________________
void BackendImpl::PackageImpl::exportTo(
OUString const & destFolderURL, OUString const & newTitle,
- sal_Int32 nameClashAction, Reference<XCommandEnvironment> const & xCmdEnv )
- throw (CommandFailedException, CommandAbortedException, RuntimeException)
+ sal_Int32 nameClashAction, Reference<ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (ucb::CommandFailedException,
+ deployment::ExtensionRemovedException,
+ ucb::CommandAbortedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+
::ucbhelper::Content sourceContent( m_url_expanded, xCmdEnv );
OUString title(newTitle);
if (title.getLength() == 0)
@@ -952,25 +1028,25 @@ void BackendImpl::PackageImpl::exportTo(
rtl_UriEncodeIgnoreEscapes,
RTL_TEXTENCODING_UTF8 ) ) );
- if (nameClashAction == NameClash::ASK)
+ if (nameClashAction == ucb::NameClash::ASK)
{
if (create_ucb_content(
0, destURL, xCmdEnv, false /* no throw */ )) {
bool replace = false, abort = false;
if (! interactContinuation(
- Any( NameClashResolveRequest(
+ Any( ucb::NameClashResolveRequest(
OUSTR("file already exists: ") + title,
static_cast<OWeakObject *>(this),
task::InteractionClassification_QUERY,
destFolderURL, title, OUString() ) ),
- XInteractionReplaceExistingData::static_type(), xCmdEnv,
+ ucb::XInteractionReplaceExistingData::static_type(), xCmdEnv,
&replace, &abort ) || !replace) {
return;
}
}
}
- else if (nameClashAction != NameClash::OVERWRITE) {
- throw CommandFailedException(
+ else if (nameClashAction != ucb::NameClash::OVERWRITE) {
+ throw ucb::CommandFailedException(
OUSTR("unsupported nameClashAction!"),
static_cast<OWeakObject *>(this), Any() );
}
@@ -996,11 +1072,11 @@ void BackendImpl::PackageImpl::exportTo(
while (xResultSet->next())
{
::ucbhelper::Content subContent(
- Reference<XContentAccess>(
+ Reference<ucb::XContentAccess>(
xResultSet, UNO_QUERY_THROW )->queryContent(), xCmdEnv );
if (! destFolderContent.transferContent(
subContent, ::ucbhelper::InsertOperation_COPY,
- OUString(), NameClash::OVERWRITE ))
+ OUString(), ucb::NameClash::OVERWRITE ))
throw RuntimeException( OUSTR("UCB transferContent() failed!"),
static_cast<OWeakObject *>(this) );
progress.update( Any() ); // animating progress bar
@@ -1108,7 +1184,7 @@ void BackendImpl::PackageImpl::exportTo(
if (! metainfFolderContent.transferContent(
manifestContent, ::ucbhelper::InsertOperation_COPY,
- OUString(), NameClash::OVERWRITE ))
+ OUString(), ucb::NameClash::OVERWRITE ))
throw RuntimeException( OUSTR("UCB transferContent() failed!"),
static_cast<OWeakObject *>(this) );
}
@@ -1117,7 +1193,7 @@ void BackendImpl::PackageImpl::exportTo(
try {
destFolderContent.executeCommand( OUSTR("flush"), Any() );
}
- catch (UnsupportedCommandException &) {
+ catch (ucb::UnsupportedCommandException &) {
}
}
@@ -1130,67 +1206,76 @@ sal_Bool BackendImpl::PackageImpl::isBundle() throw (RuntimeException)
//______________________________________________________________________________
Sequence< Reference<deployment::XPackage> > BackendImpl::PackageImpl::getBundle(
Reference<task::XAbortChannel> const & xAbortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
throw (deployment::DeploymentException,
- CommandFailedException, CommandAbortedException,
+ ucb::CommandFailedException, ucb::CommandAbortedException,
lang::IllegalArgumentException, RuntimeException)
{
Sequence< Reference<deployment::XPackage> > * pBundle = m_pBundle;
if (pBundle == 0)
{
t_packagevec bundle;
- try {
- if (m_legacyBundle)
- {
- // .zip legacy packages allow script.xlb, dialog.xlb in bundle
- // root folder:
- OUString mediaType;
- // probe for script.xlb:
- if (create_ucb_content(
- 0, makeURL( m_url_expanded, OUSTR("script.xlb") ),
- xCmdEnv, false /* no throw */ )) {
- mediaType = OUSTR("application/vnd.sun.star.basic-library");
+ if (m_bRemoved)
+ {
+ bundle = getPackagesFromDb(xCmdEnv);
+ }
+ else
+ {
+ try {
+ if (m_legacyBundle)
+ {
+ // .zip legacy packages allow script.xlb, dialog.xlb in bundle
+ // root folder:
+ OUString mediaType;
+ // probe for script.xlb:
+ if (create_ucb_content(
+ 0, makeURL( m_url_expanded, OUSTR("script.xlb") ),
+ xCmdEnv, false /* no throw */ )) {
+ mediaType = OUSTR("application/vnd.sun.star.basic-library");
+ }
+ // probe for dialog.xlb:
+ else if (create_ucb_content(
+ 0, makeURL( m_url_expanded, OUSTR("dialog.xlb") ),
+ xCmdEnv, false /* no throw */ ))
+ mediaType = OUSTR("application/vnd.sun.star."
+ "dialog-library");
+
+ if (mediaType.getLength() > 0) {
+ const Reference<deployment::XPackage> xPackage(
+ bindBundleItem( getURL(), mediaType, false, OUString(),
+ xCmdEnv ) );
+ if (xPackage.is())
+ bundle.push_back( xPackage );
+ // continue scanning:
+ }
+ scanLegacyBundle( bundle, getURL(),
+ AbortChannel::get(xAbortChannel), xCmdEnv );
}
- // probe for dialog.xlb:
- else if (create_ucb_content(
- 0, makeURL( m_url_expanded, OUSTR("dialog.xlb") ),
- xCmdEnv, false /* no throw */ ))
- mediaType = OUSTR("application/vnd.sun.star."
- "dialog-library");
-
- if (mediaType.getLength() > 0) {
- const Reference<deployment::XPackage> xPackage(
- bindBundleItem( getURL(), mediaType, xCmdEnv ) );
- if (xPackage.is())
- bundle.push_back( xPackage );
- // continue scanning:
+ else
+ {
+ // .oxt:
+ scanBundle( bundle, AbortChannel::get(xAbortChannel), xCmdEnv );
}
- scanLegacyBundle( bundle, getURL(),
- AbortChannel::get(xAbortChannel), xCmdEnv );
+
}
- else
- {
- // .oxt:
- scanBundle( bundle, AbortChannel::get(xAbortChannel), xCmdEnv );
+ catch (RuntimeException &) {
+ throw;
+ }
+ catch (ucb::CommandFailedException &) {
+ throw;
+ }
+ catch (ucb::CommandAbortedException &) {
+ throw;
+ }
+ catch (deployment::DeploymentException &) {
+ throw;
+ }
+ catch (Exception &) {
+ Any exc( ::cppu::getCaughtException() );
+ throw deployment::DeploymentException(
+ OUSTR("error scanning bundle: ") + getURL(),
+ static_cast<OWeakObject *>(this), exc );
}
- }
- catch (RuntimeException &) {
- throw;
- }
- catch (CommandFailedException &) {
- throw;
- }
- catch (CommandAbortedException &) {
- throw;
- }
- catch (deployment::DeploymentException &) {
- throw;
- }
- catch (Exception &) {
- Any exc( ::cppu::getCaughtException() );
- throw deployment::DeploymentException(
- OUSTR("error scanning bundle: ") + getURL(),
- static_cast<OWeakObject *>(this), exc );
}
// sort: schema before config data, typelibs before components:
@@ -1257,7 +1342,8 @@ inline bool isBundle_( OUString const & mediaType )
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::PackageImpl::bindBundleItem(
OUString const & url, OUString const & mediaType,
- Reference<XCommandEnvironment> const & xCmdEnv,
+ sal_Bool bRemoved, OUString const & identifier,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv,
bool notifyDetectionError )
{
// ignore any nested bundles:
@@ -1267,13 +1353,13 @@ Reference<deployment::XPackage> BackendImpl::PackageImpl::bindBundleItem(
Reference<deployment::XPackage>xPackage;
try {
xPackage.set( getMyBackend()->m_xRootRegistry->bindPackage(
- url, mediaType, xCmdEnv ) );
+ url, mediaType, bRemoved, identifier, xCmdEnv ) );
OSL_ASSERT( xPackage.is() );
}
catch (RuntimeException &) {
throw;
}
- catch (CommandFailedException &) {
+ catch (ucb::CommandFailedException &) {
// ignore already handled error
}
catch (Exception &) {
@@ -1306,7 +1392,7 @@ Reference<deployment::XPackage> BackendImpl::PackageImpl::bindBundleItem(
void BackendImpl::PackageImpl::scanBundle(
t_packagevec & bundle,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv )
{
OSL_ASSERT( !m_legacyBundle );
@@ -1403,7 +1489,7 @@ void BackendImpl::PackageImpl::scanBundle(
if (bundle.end() == std::find_if(bundle.begin(), bundle.end(), XPackage_eq(url)))
{
const Reference<deployment::XPackage> xPackage(
- bindBundleItem( url, mediaType, xCmdEnv ) );
+ bindBundleItem( url, mediaType, false, OUString(), xCmdEnv ) );
if (xPackage.is())
bundle.push_back( xPackage );
}
@@ -1442,7 +1528,7 @@ void BackendImpl::PackageImpl::scanLegacyBundle(
t_packagevec & bundle,
OUString const & url,
::rtl::Reference<AbortChannel> const & abortChannel,
- Reference<XCommandEnvironment> const & xCmdEnv,
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv,
bool skip_registration )
{
::ucbhelper::Content ucbContent( url, xCmdEnv );
@@ -1478,8 +1564,8 @@ void BackendImpl::PackageImpl::scanLegacyBundle(
OUString mediaType;
const Reference<deployment::XPackage> xPackage(
- bindBundleItem( path, OUString() /* detect */, xCmdEnv,
- false /* ignore detection errors */ ) );
+ bindBundleItem( path, OUString() /* detect */, false, OUString(),
+ xCmdEnv, false /* ignore detection errors */ ) );
if (xPackage.is()) {
const Reference<deployment::XPackageTypeInfo> xPackageType(
xPackage->getPackageType() );
@@ -1514,8 +1600,12 @@ void BackendImpl::PackageImpl::scanLegacyBundle(
}
}
-OUString BackendImpl::PackageImpl::getDisplayName() throw (RuntimeException)
+OUString BackendImpl::PackageImpl::getDisplayName()
+ throw (deployment::ExtensionRemovedException, RuntimeException)
{
+ if (m_bRemoved)
+ throw deployment::ExtensionRemovedException();
+
OUString sName = getDescriptionInfoset().getLocalizedDisplayName();
if (sName.getLength() == 0)
return m_displayName;
@@ -1523,6 +1613,24 @@ OUString BackendImpl::PackageImpl::getDisplayName() throw (RuntimeException)
return sName;
}
+::std::vector<Reference<deployment::XPackage> >
+BackendImpl::PackageImpl::getPackagesFromDb(
+ Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+{
+ ::std::vector<Reference<deployment::XPackage> > retVector;
+
+ typedef ::std::vector< ::std::pair<OUString, OUString> >::const_iterator ITC;
+ for (ITC i = m_dbData.items.begin(); i != m_dbData.items.end(); i++)
+ {
+ Reference<deployment::XPackage> xExtension =
+ bindBundleItem(i->first, i->second, true, m_identifier, xCmdEnv);
+ OSL_ASSERT(xExtension.is());
+ retVector.push_back(xExtension);
+ }
+
+ return retVector;
+}
+
} // anon namespace
//==============================================================================
diff --git a/desktop/source/deployment/registry/package/makefile.mk b/desktop/source/deployment/registry/package/makefile.mk
index ccadc2070301..203ce176d289 100644
--- a/desktop/source/deployment/registry/package/makefile.mk
+++ b/desktop/source/deployment/registry/package/makefile.mk
@@ -41,7 +41,7 @@ INCPRE += ..$/..$/inc
SLOFILES = \
$(SLO)$/dp_package.obj \
- $(SLO)$/dp_description.obj
+ $(SLO)$/dp_extbackenddb.obj
.INCLUDE : ..$/..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/registry/script/dp_script.cxx b/desktop/source/deployment/registry/script/dp_script.cxx
index 4af0cbb84130..edeae256cbaf 100644
--- a/desktop/source/deployment/registry/script/dp_script.cxx
+++ b/desktop/source/deployment/registry/script/dp_script.cxx
@@ -39,12 +39,12 @@
#include "comphelper/servicedecl.hxx"
#include "svl/inettype.hxx"
#include "com/sun/star/util/XUpdatable.hpp"
-#include "com/sun/star/script/XLibraryContainer.hpp"
+#include "com/sun/star/script/XLibraryContainer3.hpp"
#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
#include <com/sun/star/util/XMacroExpander.hpp>
#include <com/sun/star/uri/XUriReferenceFactory.hpp>
-#include <com/sun/star/uri/XVndSunStarExpandUrl.hpp>
#include <memory>
+#include "dp_scriptbackenddb.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
@@ -80,6 +80,7 @@ class BackendImpl : public t_helper
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
@@ -88,24 +89,30 @@ class BackendImpl : public t_helper
::rtl::Reference<BackendImpl> const & myBackend,
OUString const & url,
Reference<XCommandEnvironment> const &xCmdEnv,
- OUString const & scriptURL, OUString const & dialogURL );
+ OUString const & scriptURL, OUString const & dialogURL,
+ bool bRemoved, OUString const & identifier);
};
friend class PackageImpl;
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
OUString const & url, OUString const & mediaType,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv );
- rtl::OUString getRegisteredFlagFileURL( Reference< deployment::XPackage > xPackage );
- rtl::OUString expandURL( const rtl::OUString& aURL );
- Reference< ucb::XSimpleFileAccess > getFileAccess( void );
- Reference< ucb::XSimpleFileAccess > m_xSFA;
+ void addDataToDb(OUString const & url);
+ void deleteDataFromDb(OUString const & url);
+ bool isRegisteredInDb(OUString const & url);
+
+
+
+// Reference< ucb::XSimpleFileAccess > getFileAccess( void );
+// Reference< ucb::XSimpleFileAccess > m_xSFA;
const Reference<deployment::XPackageTypeInfo> m_xBasicLibTypeInfo;
const Reference<deployment::XPackageTypeInfo> m_xDialogLibTypeInfo;
Sequence< Reference<deployment::XPackageTypeInfo> > m_typeInfos;
-
+ std::auto_ptr<ScriptBackendDb> m_backendDb;
public:
BackendImpl( Sequence<Any> const & args,
Reference<XComponentContext> const & xComponentContext );
@@ -123,11 +130,12 @@ BackendImpl::PackageImpl::PackageImpl(
::rtl::Reference<BackendImpl> const & myBackend,
OUString const & url,
Reference<XCommandEnvironment> const &xCmdEnv,
- OUString const & scriptURL, OUString const & dialogURL )
+ OUString const & scriptURL, OUString const & dialogURL, bool bRemoved,
+ OUString const & identifier)
: Package( myBackend.get(), url,
OUString(), OUString(), // will be late-initialized
scriptURL.getLength() > 0 ? myBackend->m_xBasicLibTypeInfo
- : myBackend->m_xDialogLibTypeInfo ),
+ : myBackend->m_xDialogLibTypeInfo, bRemoved, identifier),
m_scriptURL( scriptURL ),
m_dialogURL( dialogURL )
{
@@ -168,6 +176,33 @@ BackendImpl::BackendImpl(
m_typeInfos[ 1 ] = m_xDialogLibTypeInfo;
OSL_ASSERT( ! transientMode() );
+
+ if (!transientMode())
+ {
+ OUString dbFile = makeURL(getCachePath(), OUSTR("backenddb.xml"));
+ m_backendDb.reset(
+ new ScriptBackendDb(getComponentContext(), dbFile));
+ }
+
+}
+void BackendImpl::addDataToDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->addEntry(url);
+}
+
+bool BackendImpl::isRegisteredInDb(OUString const & url)
+{
+ bool registered = false;
+ if (m_backendDb.get())
+ registered = m_backendDb->getEntry(url);
+ return registered;
+}
+
+void BackendImpl::deleteDataFromDb(OUString const & url)
+{
+ if (m_backendDb.get())
+ m_backendDb->removeEntry(url);
}
// XUpdatable
@@ -189,6 +224,7 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::bindPackage_(
OUString const & url, OUString const & mediaType_,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv )
{
OUString mediaType( mediaType_ );
@@ -222,22 +258,31 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
{
if (type.EqualsIgnoreCaseAscii("application"))
{
+ OUString dialogURL( makeURL( url, OUSTR("dialog.xlb") ) );
+ if (! create_ucb_content(
+ 0, dialogURL, xCmdEnv, false /* no throw */ )) {
+ dialogURL = OUString();
+ }
+
if (subType.EqualsIgnoreCaseAscii("vnd.sun.star.basic-library"))
{
- OUString dialogURL( makeURL( url, OUSTR("dialog.xlb") ) );
+ OUString scriptURL( makeURL( url, OUSTR("script.xlb")));
if (! create_ucb_content(
- 0, dialogURL, xCmdEnv, false /* no throw */ )) {
- dialogURL = OUString();
+ 0, scriptURL, xCmdEnv, false /* no throw */ )) {
+ scriptURL = OUString();
}
- return new PackageImpl( this, url, xCmdEnv,
- makeURL( url, OUSTR("script.xlb") ),
- dialogURL );
+
+ return new PackageImpl(
+ this, url, xCmdEnv, scriptURL,
+ dialogURL, bRemoved, identifier);
}
else if (subType.EqualsIgnoreCaseAscii(
"vnd.sun.star.dialog-library")) {
- return new PackageImpl( this, url, xCmdEnv,
- OUString() /* no script lib */,
- makeURL( url, OUSTR("dialog.xlb") ) );
+ return new PackageImpl(
+ this, url, xCmdEnv,
+ OUString() /* no script lib */,
+ dialogURL,
+ bRemoved, identifier);
}
}
}
@@ -247,90 +292,6 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
static_cast<sal_Int16>(-1) );
}
-rtl::OUString BackendImpl::getRegisteredFlagFileURL( Reference< deployment::XPackage > xPackage )
-{
- rtl::OUString aRetURL;
- if( !xPackage.is() )
- return aRetURL;
- rtl::OUString aHelpURL = xPackage->getURL();
- aRetURL = expandURL( aHelpURL );
- aRetURL += rtl::OUString::createFromAscii( "/RegisteredFlag" );
- return aRetURL;
-}
-
-rtl::OUString BackendImpl::expandURL( const rtl::OUString& aURL )
-{
- static Reference< util::XMacroExpander > xMacroExpander;
- static Reference< uri::XUriReferenceFactory > xFac;
-
- if( !xMacroExpander.is() || !xFac.is() )
- {
- Reference<XComponentContext> const & xContext = getComponentContext();
- if( xContext.is() )
- {
- xFac = Reference< uri::XUriReferenceFactory >(
- xContext->getServiceManager()->createInstanceWithContext( rtl::OUString::createFromAscii(
- "com.sun.star.uri.UriReferenceFactory"), xContext ) , UNO_QUERY );
- }
- if( !xFac.is() )
- {
- throw RuntimeException(
- ::rtl::OUString::createFromAscii(
- "dp_registry::backend::help::BackendImpl::expandURL(), "
- "could not instatiate UriReferenceFactory." ),
- Reference< XInterface >() );
- }
-
- xMacroExpander = Reference< util::XMacroExpander >(
- xContext->getValueByName(
- ::rtl::OUString::createFromAscii( "/singletons/com.sun.star.util.theMacroExpander" ) ),
- UNO_QUERY_THROW );
- }
-
- rtl::OUString aRetURL = aURL;
- if( xMacroExpander.is() )
- {
- Reference< uri::XUriReference > uriRef;
- for (;;)
- {
- uriRef = Reference< uri::XUriReference >( xFac->parse( aRetURL ), UNO_QUERY );
- if ( uriRef.is() )
- {
- Reference < uri::XVndSunStarExpandUrl > sxUri( uriRef, UNO_QUERY );
- if( !sxUri.is() )
- break;
-
- aRetURL = sxUri->expand( xMacroExpander );
- }
- }
- }
- return aRetURL;
-}
-
-Reference< ucb::XSimpleFileAccess > BackendImpl::getFileAccess( void )
-{
- if( !m_xSFA.is() )
- {
- Reference<XComponentContext> const & xContext = getComponentContext();
- if( xContext.is() )
- {
- m_xSFA = Reference< ucb::XSimpleFileAccess >(
- xContext->getServiceManager()->createInstanceWithContext(
- rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ),
- xContext ), UNO_QUERY );
- }
- if( !m_xSFA.is() )
- {
- throw RuntimeException(
- ::rtl::OUString::createFromAscii(
- "dp_registry::backend::help::BackendImpl::getFileAccess(), "
- "could not instatiate SimpleFileAccess." ),
- Reference< XInterface >() );
- }
- }
- return m_xSFA;
-}
-
//##############################################################################
// Package
@@ -359,20 +320,18 @@ BackendImpl::PackageImpl::isRegistered_(
BackendImpl * that = getMyBackend();
Reference< deployment::XPackage > xThisPackage( this );
- rtl::OUString aRegisteredFlagFile = that->getRegisteredFlagFileURL( xThisPackage );
-
- Reference< ucb::XSimpleFileAccess > xSFA = that->getFileAccess();
- bool bReg = xSFA->exists( aRegisteredFlagFile );
+ bool registered = that->isRegisteredInDb(getURL());
return beans::Optional< beans::Ambiguous<sal_Bool> >(
true /* IsPresent */,
- beans::Ambiguous<sal_Bool>( bReg, false /* IsAmbiguous */ ) );
+ beans::Ambiguous<sal_Bool>( registered, false /* IsAmbiguous */ ) );
}
//______________________________________________________________________________
void BackendImpl::PackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & xCmdEnv )
{
@@ -381,15 +340,13 @@ void BackendImpl::PackageImpl::processPackage_(
BackendImpl * that = getMyBackend();
Reference< deployment::XPackage > xThisPackage( this );
- rtl::OUString aRegisteredFlagFile = that->getRegisteredFlagFileURL( xThisPackage );
- Reference< ucb::XSimpleFileAccess > xSFA = that->getFileAccess();
Reference<XComponentContext> const & xComponentContext = that->getComponentContext();
bool bScript = (m_scriptURL.getLength() > 0);
- Reference<css::script::XLibraryContainer> xScriptLibs;
+ Reference<css::script::XLibraryContainer3> xScriptLibs;
bool bDialog = (m_dialogURL.getLength() > 0);
- Reference<css::script::XLibraryContainer> xDialogLibs;
+ Reference<css::script::XLibraryContainer3> xDialogLibs;
bool bRunning = office_is_running();
if( bRunning )
@@ -410,52 +367,121 @@ void BackendImpl::PackageImpl::processPackage_(
xComponentContext ), UNO_QUERY_THROW );
}
}
-
+ bool bRegistered = getMyBackend()->isRegisteredInDb(getURL());
if( !doRegisterPackage )
{
- if( xSFA->exists( aRegisteredFlagFile ) )
+ //We cannot just call removeLibrary(name) because this could remove a
+ //script which was added by an extension in a different repository. For
+ //example, extension foo is contained in the bundled repository and then
+ //the user adds it it to the user repository. The extension manager will
+ //then register the new script and revoke the script from the bundled
+ //extension. removeLibrary(name) would now remove the script from the
+ //user repository. That is, the script of the newly added user extension does
+ //not work anymore. Therefore we must check if the currently active
+ //script comes in fact from the currently processed extension.
+
+ if (bRegistered)
{
- xSFA->kill( aRegisteredFlagFile );
-
- if( bScript && xScriptLibs.is() && xScriptLibs->hasByName( m_name ) )
- xScriptLibs->removeLibrary( m_name );
+ //we also prevent and live deployment at startup
+ if (!isRemoved() && !startup)
+ {
+ if (bScript && xScriptLibs.is() && xScriptLibs->hasByName(m_name))
+ {
+ const OUString sScriptUrl = xScriptLibs->getOriginalLibraryLinkURL(m_name);
+ if (sScriptUrl.equals(m_scriptURL))
+ xScriptLibs->removeLibrary(m_name);
+ }
- if( bDialog && xDialogLibs.is() && xDialogLibs->hasByName( m_dialogName ) )
- xDialogLibs->removeLibrary( m_dialogName );
+ if (bDialog && xDialogLibs.is() && xDialogLibs->hasByName(m_dialogName))
+ {
+ const OUString sDialogUrl = xDialogLibs->getOriginalLibraryLinkURL(m_dialogName);
+ if (sDialogUrl.equals(m_dialogURL))
+ xDialogLibs->removeLibrary(m_dialogName);
+ }
+ }
+ getMyBackend()->deleteDataFromDb(getURL());
+ return;
}
- return;
}
-
- if( xSFA->exists( aRegisteredFlagFile ) )
+ if (bRegistered)
return; // Already registered
// Update LibraryContainer
bool bScriptSuccess = false;
const bool bReadOnly = false;
- if( bScript && xScriptLibs.is() && !xScriptLibs->hasByName( m_name ) )
- {
- xScriptLibs->createLibraryLink( m_name, m_scriptURL, bReadOnly );
- bScriptSuccess = xScriptLibs->hasByName( m_name );
- }
bool bDialogSuccess = false;
- if( bDialog && xDialogLibs.is() && !xDialogLibs->hasByName( m_dialogName ) )
+ if (!startup)
{
- xDialogLibs->createLibraryLink( m_dialogName, m_dialogURL, bReadOnly );
- bDialogSuccess = xDialogLibs->hasByName( m_dialogName );
- }
+ //If there is a bundled extension, and the user installes the same extension
+ //then the script from the bundled extension must be removed. If this does not work
+ //then live deployment does not work for scripts.
+ if (bScript && xScriptLibs.is())
+ {
+ bool bCanAdd = true;
+ if (xScriptLibs->hasByName(m_name))
+ {
+ const OUString sOriginalUrl = xScriptLibs->getOriginalLibraryLinkURL(m_name);
+ //We assume here that library names in extensions are unique, which may not be the case
+ //ToDo: If the script exist in another extension, then both extensions must have the
+ //same id
+ if (sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE"))
+ || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE"))
+ || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$BUNDLED_EXTENSIONS")))
+ {
+ xScriptLibs->removeLibrary(m_name);
+ bCanAdd = true;
+ }
+ else
+ {
+ bCanAdd = false;
+ }
+ }
+
+ if (bCanAdd)
+ {
+ xScriptLibs->createLibraryLink( m_name, m_scriptURL, bReadOnly );
+ bScriptSuccess = xScriptLibs->hasByName( m_name );
+ }
+ }
+
+
+ if (bDialog && xDialogLibs.is())
+ {
+ bool bCanAdd = true;
+ if (xDialogLibs->hasByName(m_dialogName))
+ {
+ const OUString sOriginalUrl = xDialogLibs->getOriginalLibraryLinkURL(m_dialogName);
+ //We assume here that library names in extensions are unique, which may not be the case
+ //ToDo: If the script exist in another extension, then both extensions must have the
+ //same id
+ if (sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE"))
+ || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE"))
+ || sOriginalUrl.match(OUSTR("vnd.sun.star.expand:$BUNDLED_EXTENSIONS")))
+ {
+ xDialogLibs->removeLibrary(m_dialogName);
+ bCanAdd = true;
+ }
+ else
+ {
+ bCanAdd = false;
+ }
+ }
+ if (bCanAdd)
+ {
+ xDialogLibs->createLibraryLink( m_dialogName, m_dialogURL, bReadOnly );
+ bDialogSuccess = xDialogLibs->hasByName(m_dialogName);
+ }
+ }
+ }
bool bSuccess = bScript || bDialog; // Something must have happened
- if( bRunning )
+ if( bRunning && !startup)
if( (bScript && !bScriptSuccess) || (bDialog && !bDialogSuccess) )
bSuccess = false;
- if( bSuccess && !xSFA->exists( aRegisteredFlagFile ) )
- {
- Reference< io::XOutputStream > xOutputStream = xSFA->openFileWrite( aRegisteredFlagFile );
- if( xOutputStream.is() )
- xOutputStream->closeOutput();
- }
+ if (bSuccess)
+ getMyBackend()->addDataToDb(getURL());
}
} // anon namespace
diff --git a/desktop/source/deployment/registry/script/dp_scriptbackenddb.cxx b/desktop/source/deployment/registry/script/dp_scriptbackenddb.cxx
new file mode 100644
index 000000000000..ce0d3029084d
--- /dev/null
+++ b/desktop/source/deployment/registry/script/dp_scriptbackenddb.cxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * 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: dp_package.cxx,v $
+ * $Revision: 1.34.16.2 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_desktop.hxx"
+
+#include "rtl/string.h"
+#include "cppuhelper/exc_hlp.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/xml/dom/XDocument.hpp"
+#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
+#include "dp_misc.h"
+#include "dp_scriptbackenddb.hxx"
+
+
+namespace css = ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using ::rtl::OUString;
+
+#define EXTENSION_REG_NS "http://openoffice.org/extensionmanager/script-registry/2010"
+#define NS_PREFIX "script"
+#define ROOT_ELEMENT_NAME "script-backend-db"
+#define KEY_ELEMENT_NAME "script"
+
+namespace dp_registry {
+namespace backend {
+namespace script {
+
+ScriptBackendDb::ScriptBackendDb(
+ Reference<XComponentContext> const & xContext,
+ ::rtl::OUString const & url):RegisteredDb(xContext, url)
+{
+
+}
+
+OUString ScriptBackendDb::getDbNSName()
+{
+ return OUSTR(EXTENSION_REG_NS);
+}
+
+OUString ScriptBackendDb::getNSPrefix()
+{
+ return OUSTR(NS_PREFIX);
+}
+
+OUString ScriptBackendDb::getRootElementName()
+{
+ return OUSTR(ROOT_ELEMENT_NAME);
+}
+
+OUString ScriptBackendDb::getKeyElementName()
+{
+ return OUSTR(KEY_ELEMENT_NAME);
+}
+
+
+
+} // namespace executable
+} // namespace backend
+} // namespace dp_registry
+
diff --git a/sd/source/ui/inc/printdialog.hxx b/desktop/source/deployment/registry/script/dp_scriptbackenddb.hxx
index de9791e22660..9d227f8b64b8 100644
--- a/sd/source/ui/inc/printdialog.hxx
+++ b/desktop/source/deployment/registry/script/dp_scriptbackenddb.hxx
@@ -2,10 +2,13 @@
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
+ * $RCSfile: dp_backend.h,v $
+ * $Revision: 1.18 $
+ *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -24,38 +27,50 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#ifndef _SD_PRINTDIALOG_HXX_
-#define _SD_PRINTDIALOG_HXX_
-#include <vcl/image.hxx>
-#include <svtools/printdlg.hxx>
-#include <boost/shared_ptr.hpp>
-#include <vector>
+#if ! defined INCLUDED_DP_SCRIPTBACKENDDB_HXX
+#define INCLUDED_DP_SCRIPTBACKENDDB_HXX
+
+#include "rtl/ustring.hxx"
+#include "dp_backenddb.hxx"
+#include "boost/optional.hpp"
+namespace css = ::com::sun::star;
+
+namespace com { namespace sun { namespace star {
+ namespace uno {
+ class XComponentContext;
+ }
+}}}
-class SdOptionsPrintItem;
+namespace dp_registry {
+namespace backend {
+namespace script {
-class SdPrintDialog : public PrintDialog
+/* The XML file stores the extensions which are currently registered.
+ They will be removed when they are revoked.
+ */
+class ScriptBackendDb: public dp_registry::backend::RegisteredDb
{
- public:
- static SdPrintDialog* Create( Window* pWindow, bool bImpress );
- virtual ~SdPrintDialog();
+protected:
+ virtual ::rtl::OUString getDbNSName();
- void Init( const SdOptionsPrintItem* pPrintOpts );
- bool Fill( SdOptionsPrintItem* pPrintOpts );
+ virtual ::rtl::OUString getNSPrefix();
-private:
- SdPrintDialog( Window* pWindow, bool bImpress );
+ virtual ::rtl::OUString getRootElementName();
- void UpdateStates();
- void LoadPreviewImages();
+ virtual ::rtl::OUString getKeyElementName();
- DECL_LINK( UpdateStatesHdl, void* );
- std::vector< boost::shared_ptr< Control > > mpControls;
- std::vector< boost::shared_ptr< Image > > mpPreviews;
- std::vector< boost::shared_ptr< Image > > mpPreviewsHC;
- bool mbImpress;
+public:
+
+ ScriptBackendDb( css::uno::Reference<css::uno::XComponentContext> const & xContext,
+ ::rtl::OUString const & url);
};
-#endif // _SD_PRINTDIALOG_HXX_
+
+
+}
+}
+}
+#endif
diff --git a/desktop/source/deployment/registry/script/makefile.mk b/desktop/source/deployment/registry/script/makefile.mk
index ae159914a548..708def358021 100644
--- a/desktop/source/deployment/registry/script/makefile.mk
+++ b/desktop/source/deployment/registry/script/makefile.mk
@@ -41,7 +41,8 @@ INCPRE += ..$/..$/inc
SLOFILES = \
$(SLO)$/dp_script.obj \
- $(SLO)$/dp_lib_container.obj
+ $(SLO)$/dp_lib_container.obj \
+ $(SLO)$/dp_scriptbackenddb.obj
.INCLUDE : ..$/..$/target.pmk
.INCLUDE : target.mk
diff --git a/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx b/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx
index 52ced6908bd8..8a4ee1b45fbc 100644
--- a/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx
+++ b/desktop/source/deployment/registry/sfwk/dp_sfwk.cxx
@@ -77,12 +77,15 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
+ bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
public:
- PackageImpl( ::rtl::Reference<BackendImpl> const & myBackend,
- OUString const & url, OUString const & libType );
+ PackageImpl(
+ ::rtl::Reference<BackendImpl> const & myBackend,
+ OUString const & url, OUString const & libType, bool bRemoved,
+ OUString const & identifier);
// XPackage
virtual OUString SAL_CALL getDescription() throw (RuntimeException);
};
@@ -91,6 +94,7 @@ class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
OUString const & url, OUString const & mediaType,
+ sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv );
const Reference<deployment::XPackageTypeInfo> m_xTypeInfo;
@@ -131,9 +135,10 @@ OUString BackendImpl::PackageImpl::getDescription() throw (RuntimeException)
//______________________________________________________________________________
BackendImpl::PackageImpl::PackageImpl(
::rtl::Reference<BackendImpl> const & myBackend,
- OUString const & url, OUString const & libType )
+ OUString const & url, OUString const & libType, bool bRemoved,
+ OUString const & identifier)
: Package( myBackend.get(), url, OUString(), OUString(),
- myBackend->m_xTypeInfo ),
+ myBackend->m_xTypeInfo, bRemoved, identifier),
m_descr(libType)
{
initPackageHandler();
@@ -217,8 +222,8 @@ BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
// PackageRegistryBackend
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::bindPackage_(
- OUString const & url, OUString const & mediaType_,
- Reference<XCommandEnvironment> const & xCmdEnv )
+ OUString const & url, OUString const & mediaType_, sal_Bool bRemoved,
+ OUString const & identifier, Reference<XCommandEnvironment> const & xCmdEnv )
{
OUString mediaType( mediaType_ );
if (mediaType.getLength() == 0)
@@ -294,7 +299,7 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
dp_misc::TRACE(OUSTR(" BackEnd detected lang = ") + lang + OUSTR("\n"));
dp_misc::TRACE(OUSTR(" for url ") + sParcelDescURL + OUSTR("\n") );
dp_misc::TRACE("******************************\n");
- return new PackageImpl( this, url, sfwkLibType );
+ return new PackageImpl( this, url, sfwkLibType, bRemoved, identifier);
}
}
}
@@ -322,6 +327,10 @@ void BackendImpl::PackageImpl:: initPackageHandler()
{
aContext <<= OUSTR("share");
}
+ else if ( that->m_eContext == CONTEXT_BUNDLED )
+ {
+ aContext <<= OUSTR("bundled");
+ }
else
{
OSL_ASSERT( 0 );
@@ -363,6 +372,7 @@ BackendImpl::PackageImpl::isRegistered_(
void BackendImpl::PackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
+ bool /* startup */,
::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & )
{
diff --git a/desktop/source/deployment/unopkg/unopkg.src b/desktop/source/deployment/unopkg/unopkg.src
index 79c578628676..dc204e265ec6 100644
--- a/desktop/source/deployment/unopkg/unopkg.src
+++ b/desktop/source/deployment/unopkg/unopkg.src
@@ -27,15 +27,10 @@
#include "deployment.hrc"
-String RID_STR_UNOPKG_NO_SHARED_ALLOWED
-{
- Text [ en-US ] = "The option \"--shared\" cannot be used to install the extension \'%NAME\', "
- "because every user has to agree to the license agreement of the extension. The extension will not be installed.";
-};
String RID_STR_UNOPKG_ACCEPT_LIC_1
{
- Text [ en-US ] = "Extension License Agreement:";
+ Text [ en-US ] = "Extension Software License Agreement of $NAME:";
};
String RID_STR_UNOPKG_ACCEPT_LIC_2
diff --git a/desktop/source/inc/exithelper.hxx b/desktop/source/inc/exithelper.hxx
index 2e6d7e774d98..e2604ce49b68 100644
--- a/desktop/source/inc/exithelper.hxx
+++ b/desktop/source/inc/exithelper.hxx
@@ -58,6 +58,8 @@ class ExitHelper
E_FATAL_ERROR = 333, // Only the low 8 bits are significant 333 % 256 = 77
/// user force automatic restart after crash
E_CRASH_WITH_RESTART = 79,
+ /// the office restarts itself
+ E_NORMAL_RESTART = 81
};
};
diff --git a/desktop/source/migration/migration.cxx b/desktop/source/migration/migration.cxx
index c219a839b99a..314537836921 100644..100755
--- a/desktop/source/migration/migration.cxx
+++ b/desktop/source/migration/migration.cxx
@@ -413,7 +413,7 @@ static void insertSorted(migrations_available& rAvailableMigrations, supported_m
{
rAvailableMigrations.insert(pIter, aSupportedMigration );
bInserted = true;
- break;
+ break; // i111193: insert invalidates iterator!
}
++pIter;
}
diff --git a/desktop/source/migration/services/cexports.cxx b/desktop/source/migration/services/cexports.cxx
index c1971e9d4d00..cf9a9ab30b0c 100644
--- a/desktop/source/migration/services/cexports.cxx
+++ b/desktop/source/migration/services/cexports.cxx
@@ -31,7 +31,7 @@
#include "cppuhelper/implementationentry.hxx"
#include "basicmigration.hxx"
#include "wordbookmigration.hxx"
-#include "extensionmigration.hxx"
+//#include "extensionmigration.hxx"
extern "C"
{
@@ -48,11 +48,11 @@ extern "C"
migration::WordbookMigration_getSupportedServiceNames, ::cppu::createSingleComponentFactory,
0, 0
},
- {
- migration::ExtensionMigration_create, migration::ExtensionMigration_getImplementationName,
- migration::ExtensionMigration_getSupportedServiceNames, ::cppu::createSingleComponentFactory,
- 0, 0
- },
+// {
+// migration::ExtensionMigration_create, migration::ExtensionMigration_getImplementationName,
+// migration::ExtensionMigration_getSupportedServiceNames, ::cppu::createSingleComponentFactory,
+// 0, 0
+// },
{ 0, 0, 0, 0, 0, 0 }
};
diff --git a/desktop/source/migration/services/extensionmigration.cxx b/desktop/source/migration/services/extensionmigration.cxx
deleted file mode 100755
index a926f17c0c19..000000000000
--- a/desktop/source/migration/services/extensionmigration.cxx
+++ /dev/null
@@ -1,540 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_desktop.hxx"
-#include "extensionmigration.hxx"
-#include <tools/urlobj.hxx>
-#include <unotools/bootstrap.hxx>
-#include <unotools/ucbstreamhelper.hxx>
-#include <ucbhelper/content.hxx>
-#include <com/sun/star/ucb/XCommandInfo.hpp>
-#include <com/sun/star/ucb/TransferInfo.hpp>
-#include <com/sun/star/ucb/NameClash.hpp>
-#include "comphelper/processfactory.hxx"
-#include "com/sun/star/deployment/XPackageManagerFactory.hpp"
-#include "com/sun/star/ucb/XCommandEnvironment.hpp"
-#include "com/sun/star/xml/sax/XParser.hpp"
-#include "rtl/instance.hxx"
-#include "osl/file.hxx"
-#include "osl/thread.h"
-
-#include "xmlscript/xmllib_imexp.hxx"
-#include "../../deployment/inc/dp_ucb.h"
-
-#ifdef SYSTEM_DB
-#include <db.h>
-#else
-#include <berkeleydb/db.h>
-#endif
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-namespace {
-
- struct LibDescriptor :
- public rtl::StaticWithInit<const ::xmlscript::LibDescriptorArray, LibDescriptor> {
- const ::xmlscript::LibDescriptorArray operator () () {
-
-
- return ::xmlscript::LibDescriptorArray();
- }
-};
-}
-//.........................................................................
-namespace migration
-{
-//.........................................................................
-
-
- static ::rtl::OUString sExtensionSubDir = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/user/uno_packages/" ) );
- static ::rtl::OUString sSubDirName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cache" ) );
- static ::rtl::OUString sConfigDir = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/user/registry/data" ) );
- static ::rtl::OUString sOrgDir = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/user/registry/data/org" ) );
- static ::rtl::OUString sExcludeDir1 = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/user/registry/data/org" ) );
- static ::rtl::OUString sExcludeDir2 = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/user/registry/data/org/openoffice" ) );
-
- static ::rtl::OUString sBasicType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("application/vnd.sun.star.basic-library"));
- static ::rtl::OUString sDialogType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("application/vnd.sun.star.dialog-library"));
-
- static ::rtl::OUString sConfigurationDataType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("application/vnd.sun.star.configuration-data"));
- static ::rtl::OUString sConfigurationSchemaType = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("application/vnd.sun.star.configuration-schema"));
-
- // =============================================================================
- // component operations
- // =============================================================================
-
- ::rtl::OUString ExtensionMigration_getImplementationName()
- {
- static ::rtl::OUString* pImplName = 0;
- if ( !pImplName )
- {
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- if ( !pImplName )
- {
- static ::rtl::OUString aImplName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.desktop.migration.Extensions" ) );
- pImplName = &aImplName;
- }
- }
- return *pImplName;
- }
-
- // -----------------------------------------------------------------------------
-
- Sequence< ::rtl::OUString > ExtensionMigration_getSupportedServiceNames()
- {
- static Sequence< ::rtl::OUString >* pNames = 0;
- if ( !pNames )
- {
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- if ( !pNames )
- {
- static Sequence< ::rtl::OUString > aNames(1);
- aNames.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.migration.Extensions" ) );
- pNames = &aNames;
- }
- }
- return *pNames;
- }
-
- // =============================================================================
- // ExtensionMigration
- // =============================================================================
-
- ExtensionMigration::ExtensionMigration(Reference< XComponentContext > const & ctx) :
- m_ctx(ctx)
- {
- }
-
- // -----------------------------------------------------------------------------
-
- ExtensionMigration::~ExtensionMigration()
- {
- }
-
- ::osl::FileBase::RC ExtensionMigration::checkAndCreateDirectory( INetURLObject& rDirURL )
- {
- ::osl::FileBase::RC aResult = ::osl::Directory::create( rDirURL.GetMainURL( INetURLObject::DECODE_TO_IURI ) );
- if ( aResult == ::osl::FileBase::E_NOENT )
- {
- INetURLObject aBaseURL( rDirURL );
- aBaseURL.removeSegment();
- checkAndCreateDirectory( aBaseURL );
- return ::osl::Directory::create( rDirURL.GetMainURL( INetURLObject::DECODE_TO_IURI ) );
- }
- else
- {
- return aResult;
- }
- }
-
- void ExtensionMigration::prepareBasicLibs()
- {
- prepareBasicLibs(m_sSourceDir + ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("/user/basic/script.xlc")), m_scriptElements);
- prepareBasicLibs(m_sSourceDir + ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("/user/basic/dialog.xlc")), m_dialogElements);
- }
-
- void ExtensionMigration::prepareBasicLibs(const ::rtl::OUString & sURL,
- ::xmlscript::LibDescriptorArray & out_elements)
- {
-
- ::ucbhelper::Content ucb_content;
- if (dp_misc::create_ucb_content( &ucb_content, sURL,
- uno::Reference< ucb::XCommandEnvironment>(), false /* no throw */ ))
- {
- uno::Reference<xml::sax::XParser> xParser(
- m_ctx->getServiceManager()->createInstanceWithContext(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.sax.Parser")),
- m_ctx ), UNO_QUERY_THROW );
-
- xParser->setDocumentHandler( ::xmlscript::importLibraryContainer( &out_elements ) );
- xml::sax::InputSource source;
- source.aInputStream = ucb_content.openStream();
- source.sSystemId = ucb_content.getURL();
- xParser->parseStream( source );
- }
- //else
- //The file need not exists
- }
- /* Checks if basic package is enabled in StarOffice 8. This is the case when the dialog.xlc or
- the script.xlc in the user installation contains an entry for this package.
- The passed package MUST be a basic package.
- */
- bool ExtensionMigration::isBasicPackageEnabled( const uno::Reference< deployment::XPackage > & xPkg)
- {
- ::rtl::OUString sScriptURL = xPkg->getURL();
- if ( sScriptURL[ sScriptURL.getLength()-1 ] != '/' )
- sScriptURL += ::rtl::OUString::createFromAscii("/");
- sScriptURL += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("script.xlb") );
-
- bool bEntryFound = false;
- for ( sal_Int32 nPos = m_scriptElements.mnLibCount; nPos--; )
- {
- ::xmlscript::LibDescriptor const & descr =
- m_scriptElements.mpLibs[ nPos ];
-
- if (descr.aStorageURL.equals(sScriptURL))
- {
- bEntryFound = true;
- break;
- }
- }
-
- ::rtl::OUString sDialogURL = xPkg->getURL();
- if ( sDialogURL[ sDialogURL.getLength()-1 ] != '/' )
- sDialogURL += ::rtl::OUString::createFromAscii("/");
- sScriptURL += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("dialog.xlb") );
-
- if (!bEntryFound)
- {
- for ( sal_Int32 nPos = m_dialogElements.mnLibCount; nPos--; )
- {
- ::xmlscript::LibDescriptor const & descr =
- m_dialogElements.mpLibs[ nPos ];
-
- if (descr.aStorageURL.equals(sDialogURL))
- {
- bEntryFound = true;
- break;
- }
- }
- }
- return bEntryFound;
- }
- /* This function only registers basic and dialog packages.
- */
- void ExtensionMigration::registerBasicPackage( const uno::Reference< deployment::XPackage > & xPkg)
- {
- const ::rtl::OUString sMediaType = xPkg->getPackageType()->getMediaType();
- if ( (sMediaType.equals(sBasicType) || sMediaType.equals(sDialogType))
- && isBasicPackageEnabled(xPkg))
- {
- xPkg->registerPackage(uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment> ());
- }
- }
-
- bool ExtensionMigration::processExtensions( const ::rtl::OUString& sSourceDir, const ::rtl::OUString& sTargetDir )
- {
- if (!copy(sSourceDir, sTargetDir))
- return false;
-
- // Find all basic and script packages and reregister them
- uno::Reference< deployment::XPackageManagerFactory > xPMF;
- if (! ( m_ctx->getValueByName( ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.deployment.thePackageManagerFactory")))
- >>= xPMF))
- throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ExtensionsMigration: could not get thePackageManagerFactory")), 0);
-
- const uno::Reference< deployment::XPackageManager > xPackageMgr =
- xPMF->getPackageManager(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("user")));
-
- if (!xPackageMgr.is())
- throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ExtensionsMigration: could not get XPackageManager")), 0);
-
- const uno::Sequence< uno::Reference< deployment::XPackage > > allPackages =
- xPackageMgr->getDeployedPackages(
- uno::Reference< task::XAbortChannel >(), uno::Reference< ucb::XCommandEnvironment> ());
-
- for (int i = 0; i < allPackages.getLength(); i ++)
- {
- const uno::Reference< deployment::XPackage > aPackage = allPackages[i];
- if ( aPackage->isBundle() )
- {
- const uno::Sequence< uno::Reference < deployment::XPackage > > seqPkg =
- aPackage->getBundle(
- uno::Reference< task::XAbortChannel >(),
- uno::Reference< ucb::XCommandEnvironment> ());
-
- for ( int k = 0; k < seqPkg.getLength(); k++ )
- registerBasicPackage(seqPkg[k]);
-
- for (int l = 0; l < seqPkg.getLength(); l++)
- {
- const ::rtl::OUString sMediaType = seqPkg[l]->getPackageType()->getMediaType();
- beans::Optional<beans::Ambiguous<sal_Bool> > opt =
- seqPkg[l]->isRegistered(uno::Reference< task::XAbortChannel >(), uno::Reference< ucb::XCommandEnvironment> ());
- bool bRegistered = opt.IsPresent && opt.Value.IsAmbiguous == sal_False && opt.Value.Value == sal_True ? true : false;
-
- if ( bRegistered && !sMediaType.equals(sBasicType) && !sMediaType.equals(sDialogType) )
- {
- seqPkg[l]->revokePackage(uno::Reference< task::XAbortChannel >(), uno::Reference< ucb::XCommandEnvironment> ());
- seqPkg[l]->registerPackage(uno::Reference< task::XAbortChannel >(), uno::Reference< ucb::XCommandEnvironment> ());
- }
- }
- }
- else
- {
- registerBasicPackage(aPackage);
- {
- aPackage->revokePackage(uno::Reference< task::XAbortChannel >(), uno::Reference< ucb::XCommandEnvironment> ());
- aPackage->registerPackage(uno::Reference< task::XAbortChannel >(), uno::Reference< ucb::XCommandEnvironment> ());
- }
- }
- }
-
-
- return true;
-
- }
-
-bool ExtensionMigration::isCompatibleBerkleyDb(const ::rtl::OUString& sSourceDir)
-{
- try
- {
- ::rtl::OUString sDb(sSourceDir + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/uno_packages.db")));
- //check if the db exist at all. If not then the call to db_create would create
- //the file.
- ::osl::File f(sDb);
- if (::osl::File::E_None != f.open(OpenFlag_Read))
- {
- f.close();
- return false;
- }
- f.close();
-
- //create a system path
- ::rtl::OUString sSysPath;
- if (::osl::File::getSystemPathFromFileURL(sDb, sSysPath ) != ::osl::File::E_None)
- return false;
-
- ::rtl::OString cstr_sysPath(
- ::rtl::OUStringToOString( sSysPath, osl_getThreadTextEncoding() ) );
- char const * pcstr_sysPath = cstr_sysPath.getStr();
-
- //Open the db. If it works then we assume that the file was written with a
- //compatible version of Berkeley Db
- DB* pDB = NULL;
- //using DB_RDONLY will return an "Invalid argument" error.
- //DB_CREATE: only creates the file if it does not exist.
- //An existing db is not modified.
- if (0 != db_create(& pDB, 0, DB_CREATE))
- return false;
-
- if (0 != pDB->open(pDB, 0, pcstr_sysPath , 0, DB_HASH, DB_RDONLY, 0664 /* fs mode */))
- return false;
-
- pDB->close(pDB, 0);
- }
- catch (uno::Exception& )
- {
- return false;
- }
-
- return true;
-}
-
-bool ExtensionMigration::copy( const ::rtl::OUString& sSourceDir, const ::rtl::OUString& sTargetDir )
-{
- bool bRet = false;
- if (! isCompatibleBerkleyDb(sSourceDir))
- return false;
-
- INetURLObject aSourceObj( sSourceDir );
- INetURLObject aDestObj( sTargetDir );
- String aName = aDestObj.getName();
- aDestObj.removeSegment();
- aDestObj.setFinalSlash();
-
- try
- {
- ::ucbhelper::Content aDestPath( aDestObj.GetMainURL( INetURLObject::NO_DECODE ), uno::Reference< ucb::XCommandEnvironment > () );
- uno::Reference< ucb::XCommandInfo > xInfo = aDestPath.getCommands();
- ::rtl::OUString aTransferName = ::rtl::OUString::createFromAscii( "transfer" );
- if ( xInfo->hasCommandByName( aTransferName ) )
- {
- aDestPath.executeCommand( aTransferName, uno::makeAny(
- ucb::TransferInfo( sal_False, aSourceObj.GetMainURL( INetURLObject::NO_DECODE ), aName, ucb::NameClash::OVERWRITE ) ) );
- bRet = true;
- }
- }
- catch( uno::Exception& )
- {
- }
-
- return bRet;
-}
-
-
- // -----------------------------------------------------------------------------
- // XServiceInfo
- // -----------------------------------------------------------------------------
-
- ::rtl::OUString ExtensionMigration::getImplementationName() throw (RuntimeException)
- {
- return ExtensionMigration_getImplementationName();
- }
-
- // -----------------------------------------------------------------------------
-
- sal_Bool ExtensionMigration::supportsService( const ::rtl::OUString& rServiceName ) throw (RuntimeException)
- {
- Sequence< ::rtl::OUString > aNames( getSupportedServiceNames() );
- const ::rtl::OUString* pNames = aNames.getConstArray();
- const ::rtl::OUString* pEnd = pNames + aNames.getLength();
- for ( ; pNames != pEnd && !pNames->equals( rServiceName ); ++pNames )
- ;
-
- return pNames != pEnd;
- }
-
- // -----------------------------------------------------------------------------
-
- Sequence< ::rtl::OUString > ExtensionMigration::getSupportedServiceNames() throw (RuntimeException)
- {
- return ExtensionMigration_getSupportedServiceNames();
- }
-
- // -----------------------------------------------------------------------------
- // XInitialization
- // -----------------------------------------------------------------------------
-
- void ExtensionMigration::initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException)
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- const Any* pIter = aArguments.getConstArray();
- const Any* pEnd = pIter + aArguments.getLength();
- for ( ; pIter != pEnd ; ++pIter )
- {
- beans::NamedValue aValue;
- *pIter >>= aValue;
- if ( aValue.Name.equalsAscii( "UserData" ) )
- {
- if ( !(aValue.Value >>= m_sSourceDir) )
- {
- OSL_ENSURE( false, "ExtensionMigration::initialize: argument UserData has wrong type!" );
- }
- break;
- }
- }
- prepareBasicLibs();
- }
-
- TStringVectorPtr getContent( const ::rtl::OUString& rBaseURL )
- {
- TStringVectorPtr aResult( new TStringVector );
- ::osl::Directory aDir( rBaseURL);
- if ( aDir.open() == ::osl::FileBase::E_None )
- {
- // iterate over directory content
- TStringVector aSubDirs;
- ::osl::DirectoryItem aItem;
- while ( aDir.getNextItem( aItem ) == ::osl::FileBase::E_None )
- {
- ::osl::FileStatus aFileStatus( FileStatusMask_Type | FileStatusMask_FileURL );
- if ( aItem.getFileStatus( aFileStatus ) == ::osl::FileBase::E_None )
- aResult->push_back( aFileStatus.getFileURL() );
- }
- }
-
- return aResult;
- }
-
- // -----------------------------------------------------------------------------
- // XJob
- // -----------------------------------------------------------------------------
-
-void ExtensionMigration::copyConfig( const ::rtl::OUString& sSourceDir, const ::rtl::OUString& sTargetDir )
-{
- ::rtl::OUString sEx1( m_sSourceDir );
- sEx1 += sExcludeDir1;
- ::rtl::OUString sEx2( m_sSourceDir );
- sEx2 += sExcludeDir2;
-
- TStringVectorPtr aList = getContent( sSourceDir );
- TStringVector::const_iterator aI = aList->begin();
- while ( aI != aList->end() )
- {
- ::rtl::OUString sSourceLocalName = aI->copy( sSourceDir.getLength() );
- ::rtl::OUString aTemp = aI->copy( m_sSourceDir.getLength() );
- if ( aTemp != sExcludeDir1 && aTemp != sExcludeDir2 )
- {
- ::rtl::OUString sTargetName = sTargetDir + sSourceLocalName;
- copy( (*aI), sTargetName );
- }
- ++aI;
- }
-}
-
- Any ExtensionMigration::execute( const Sequence< beans::NamedValue >& )
- throw (lang::IllegalArgumentException, Exception, RuntimeException)
- {
- ::osl::MutexGuard aGuard( m_aMutex );
-
- ::utl::Bootstrap::PathStatus aStatus = ::utl::Bootstrap::locateUserInstallation( m_sTargetDir );
- if ( aStatus == ::utl::Bootstrap::PATH_EXISTS )
- {
- // copy all extensions
- ::rtl::OUString sTargetDir(m_sTargetDir), sSourceDir( m_sSourceDir );
- sTargetDir += sExtensionSubDir;
- sSourceDir += sExtensionSubDir;
- sSourceDir += sSubDirName;
- sTargetDir += sSubDirName;
- processExtensions( sSourceDir, sTargetDir );
-
- // copy all user config settings in user/registry/data (except user/registry/data/org)
- sSourceDir = m_sSourceDir;
- sSourceDir += sConfigDir;
- sTargetDir = m_sTargetDir;
- sTargetDir += sConfigDir;
- copyConfig( sSourceDir, sTargetDir );
-
- // copy all user config settings in user/registry/data/org (except user/registry/data/org/openoffice)
- sSourceDir = m_sSourceDir;
- sSourceDir += sOrgDir;
- sTargetDir = m_sTargetDir;
- sTargetDir += sOrgDir;
- copyConfig( sSourceDir, sTargetDir );
- }
-
- return Any();
- }
-
- // =============================================================================
- // component operations
- // =============================================================================
-
- Reference< XInterface > SAL_CALL ExtensionMigration_create(
- Reference< XComponentContext > const & ctx )
- SAL_THROW( () )
- {
- return static_cast< lang::XTypeProvider * >( new ExtensionMigration(
- ctx) );
- }
-
- // -----------------------------------------------------------------------------
-
-//.........................................................................
-} // namespace migration
-//.........................................................................
diff --git a/desktop/source/migration/services/extensionmigration.hxx b/desktop/source/migration/services/extensionmigration.hxx
deleted file mode 100755
index 70f6a4c44c9b..000000000000
--- a/desktop/source/migration/services/extensionmigration.hxx
+++ /dev/null
@@ -1,130 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 _DESKTOP_EXTENSIONMIGRATION_HXX_
-#define _DESKTOP_EXTENSIONMIGRATION_HXX_
-
-#include "misc.hxx"
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/task/XJob.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <cppuhelper/implbase3.hxx>
-#include <osl/mutex.hxx>
-#include <osl/file.hxx>
-#include "xmlscript/xmllib_imexp.hxx"
-
-namespace com { namespace sun { namespace star {
- namespace uno {
- class XComponentContext;
- }
- namespace deployment {
- class XPackage;
- }
-}}}
-
-
-
-class INetURLObject;
-
-
-//.........................................................................
-namespace migration
-{
-//.........................................................................
-
- ::rtl::OUString SAL_CALL ExtensionMigration_getImplementationName();
- ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL ExtensionMigration_getSupportedServiceNames();
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL ExtensionMigration_create(
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > const & xContext )
- SAL_THROW( (::com::sun::star::uno::Exception) );
-
-
- // =============================================================================
- // class ExtensionMigration
- // =============================================================================
-
- typedef ::cppu::WeakImplHelper3<
- ::com::sun::star::lang::XServiceInfo,
- ::com::sun::star::lang::XInitialization,
- ::com::sun::star::task::XJob > ExtensionMigration_BASE;
-
- class ExtensionMigration : public ExtensionMigration_BASE
- {
- private:
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_ctx;
- ::osl::Mutex m_aMutex;
- ::rtl::OUString m_sSourceDir;
- ::rtl::OUString m_sTargetDir;
-
- ::xmlscript::LibDescriptorArray m_scriptElements;
- ::xmlscript::LibDescriptorArray m_dialogElements;
-
- ::osl::FileBase::RC checkAndCreateDirectory( INetURLObject& rDirURL );
- void copyConfig( const ::rtl::OUString& sSourceDir, const ::rtl::OUString& sTargetDir );
- bool isCompatibleBerkleyDb(const ::rtl::OUString& sSourceDir);
- bool copy( const ::rtl::OUString& sSourceDir, const ::rtl::OUString& sTargetDir );
- bool processExtensions( const ::rtl::OUString& sSourceDir,
- const ::rtl::OUString& sTargetDir );
- /* fills m_scriptElements and m_dialogElements
- */
- void prepareBasicLibs();
- void prepareBasicLibs(const ::rtl::OUString & sURL,
- ::xmlscript::LibDescriptorArray & out_elements);
- bool isBasicPackageEnabled( const ::com::sun::star::uno::Reference<
- ::com::sun::star::deployment::XPackage > & xPkg);
- void registerBasicPackage(
- const ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackage > & xPkg);
-
- public:
- ExtensionMigration(::com::sun::star::uno::Reference<
- ::com::sun::star::uno::XComponentContext > const & ctx);
- virtual ~ExtensionMigration();
-
- // XServiceInfo
- virtual ::rtl::OUString SAL_CALL getImplementationName()
- throw (::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& rServiceName )
- throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
- throw (::com::sun::star::uno::RuntimeException);
-
- // XInitialization
- virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
- throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
-
- // XJob
- virtual ::com::sun::star::uno::Any SAL_CALL execute(
- const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& Arguments )
- throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::Exception,
- ::com::sun::star::uno::RuntimeException);
- };
-
-//.........................................................................
-} // namespace migration
-//.........................................................................
-
-#endif // _DESKTOP_AUTOCORRMIGRATION_HXX_
diff --git a/desktop/source/migration/services/makefile.mk b/desktop/source/migration/services/makefile.mk
index 55ecff6bc06f..2f3eb9308ebd 100644
--- a/desktop/source/migration/services/makefile.mk
+++ b/desktop/source/migration/services/makefile.mk
@@ -51,7 +51,6 @@ SLOFILES= \
$(SLO)$/cexports.obj \
$(SLO)$/basicmigration.obj \
$(SLO)$/wordbookmigration.obj \
- $(SLO)$/extensionmigration.obj \
$(SLO)$/autocorrmigration.obj \
$(SLO)$/oo3extensionmigration.obj \
$(SLO)$/cexportsoo3.obj
@@ -61,7 +60,6 @@ SHL1OBJS= \
$(SLO)$/cexports.obj \
$(SLO)$/basicmigration.obj \
$(SLO)$/wordbookmigration.obj \
- $(SLO)$/extensionmigration.obj \
$(SLO)$/autocorrmigration.obj
SHL1TARGET=$(TARGET)
diff --git a/desktop/source/migration/services/oo3extensionmigration.cxx b/desktop/source/migration/services/oo3extensionmigration.cxx
index b7da88b85013..2e3a8d1d518c 100644
--- a/desktop/source/migration/services/oo3extensionmigration.cxx
+++ b/desktop/source/migration/services/oo3extensionmigration.cxx
@@ -43,8 +43,6 @@
#include <comphelper/processfactory.hxx>
#include <ucbhelper/content.hxx>
-#include <com/sun/star/deployment/thePackageManagerFactory.hpp>
-#include <com/sun/star/deployment/XPackageManagerFactory.hpp>
#include <com/sun/star/task/XInteractionApprove.hpp>
#include <com/sun/star/task/XInteractionAbort.hpp>
#include <com/sun/star/ucb/XCommandInfo.hpp>
@@ -52,6 +50,8 @@
#include <com/sun/star/ucb/NameClash.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#include <com/sun/star/xml/xpath/XXPathAPI.hpp>
+#include <com/sun/star/beans/NamedValue.hpp>
+#include <com/sun/star/deployment/ExtensionManager.hpp>
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
@@ -332,18 +332,17 @@ bool OO3ExtensionMigration::scanDescriptionXml( const ::rtl::OUString& sDescript
bool OO3ExtensionMigration::migrateExtension( const ::rtl::OUString& sSourceDir )
{
- if ( !m_xPackageManager.is() )
+ if ( !m_xExtensionManager.is() )
{
try
{
- m_xPackageManager = deployment::thePackageManagerFactory::get( m_ctx )->getPackageManager(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "user" )) );
+ m_xExtensionManager = deployment::ExtensionManager::get( m_ctx );
}
catch ( ucb::CommandFailedException & ){}
catch ( uno::RuntimeException & ) {}
}
- if ( m_xPackageManager.is() )
+ if ( m_xExtensionManager.is() )
{
try
{
@@ -353,7 +352,9 @@ bool OO3ExtensionMigration::migrateExtension( const ::rtl::OUString& sSourceDir
static_cast< cppu::OWeakObject* >( pCmdEnv ), uno::UNO_QUERY );
uno::Reference< task::XAbortChannel > xAbortChannel;
uno::Reference< deployment::XPackage > xPackage =
- m_xPackageManager->addPackage( sSourceDir, ::rtl::OUString(), xAbortChannel, xCmdEnv );
+ m_xExtensionManager->addExtension(
+ sSourceDir, uno::Sequence<beans::NamedValue>(),
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("user")), xAbortChannel, xCmdEnv );
if ( xPackage.is() )
return true;
diff --git a/desktop/source/migration/services/oo3extensionmigration.hxx b/desktop/source/migration/services/oo3extensionmigration.hxx
index fb7e69c2b87f..03995652888c 100644
--- a/desktop/source/migration/services/oo3extensionmigration.hxx
+++ b/desktop/source/migration/services/oo3extensionmigration.hxx
@@ -37,7 +37,7 @@
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/xml/dom/XDocumentBuilder.hpp>
#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
-#include <com/sun/star/deployment/XPackageManager.hpp>
+#include <com/sun/star/deployment/XExtensionManager.hpp>
#include <osl/mutex.hxx>
#include <osl/file.hxx>
@@ -83,7 +83,7 @@ namespace migration
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_ctx;
::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XDocumentBuilder > m_xDocBuilder;
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > m_xSimpleFileAccess;
- ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XPackageManager > m_xPackageManager;
+ ::com::sun::star::uno::Reference< ::com::sun::star::deployment::XExtensionManager > m_xExtensionManager;
::osl::Mutex m_aMutex;
::rtl::OUString m_sSourceDir;
::rtl::OUString m_sTargetDir;
diff --git a/desktop/source/offacc/acceptor.cxx b/desktop/source/offacc/acceptor.cxx
index 4eee12f5949a..4e100fd99665 100644
--- a/desktop/source/offacc/acceptor.cxx
+++ b/desktop/source/offacc/acceptor.cxx
@@ -67,6 +67,7 @@ Acceptor::Acceptor( const Reference< XMultiServiceFactory >& rFactory )
, m_aConnectString()
, m_aProtocol()
, m_bInit(sal_False)
+ , m_bDying(false)
{
m_rSMgr = rFactory;
m_rAcceptor = Reference< XAcceptor > (m_rSMgr->createInstance(
@@ -88,6 +89,9 @@ Acceptor::~Acceptor()
osl::MutexGuard g(m_aMutex);
t = m_thread;
}
+ //prevent locking if the thread is still waiting
+ m_bDying = true;
+ m_cEnable.set();
osl_joinWithThread(t);
{
// Make the final state of m_bridges visible to this thread (since
@@ -117,6 +121,8 @@ void SAL_CALL Acceptor::run()
RTL_LOGFILE_CONTEXT_TRACE( aLog, "desktop (lo119109)"\
"Acceptor::run waiting for office to come up");
m_cEnable.wait();
+ if (m_bDying) //see destructor
+ break;
RTL_LOGFILE_CONTEXT_TRACE( aLog, "desktop (lo119109)"\
"Acceptor::run now enabled and continuing");
diff --git a/desktop/source/offacc/acceptor.hxx b/desktop/source/offacc/acceptor.hxx
index 1693dd8b75d0..87f50db032dd 100644
--- a/desktop/source/offacc/acceptor.hxx
+++ b/desktop/source/offacc/acceptor.hxx
@@ -83,6 +83,7 @@ private:
OUString m_aProtocol;
sal_Bool m_bInit;
+ bool m_bDying;
public:
Acceptor( const Reference< XMultiServiceFactory >& aFactory );
diff --git a/desktop/source/pkgchk/unopkg/unopkg_app.cxx b/desktop/source/pkgchk/unopkg/unopkg_app.cxx
index 2acd4f79a781..a9a0c8271373 100644
--- a/desktop/source/pkgchk/unopkg/unopkg_app.cxx
+++ b/desktop/source/pkgchk/unopkg/unopkg_app.cxx
@@ -35,13 +35,16 @@
#include "tools/extendapplicationenvironment.hxx"
#include "rtl/ustrbuf.hxx"
#include "rtl/uri.hxx"
+#include "rtl/bootstrap.hxx"
#include "osl/thread.h"
#include "osl/process.h"
#include "osl/conditn.hxx"
#include "cppuhelper/implbase1.hxx"
#include "cppuhelper/exc_hlp.hxx"
#include "comphelper/anytostring.hxx"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
+#include "comphelper/sequence.hxx"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
+
#include "com/sun/star/deployment/ui/PackageManagerDialog.hpp"
#include "com/sun/star/ui/dialogs/XExecutableDialog.hpp"
#include "com/sun/star/lang/DisposedException.hpp"
@@ -59,10 +62,24 @@ using ::rtl::OUString;
namespace css = ::com::sun::star;
namespace {
+struct ExtensionName
+{
+ OUString m_str;
+ ExtensionName( OUString const & str ) : m_str( str ) {}
+ bool operator () ( Reference<deployment::XPackage> const & e ) const
+ {
+ if (m_str.equals(dp_misc::getIdentifier(e))
+ || m_str.equals(e->getName()))
+ return true;
+ return false;
+ }
+};
+
//------------------------------------------------------------------------------
const char s_usingText [] =
"\n"
"using: " APP_NAME " add <options> extension-path...\n"
+" " APP_NAME " validate <options> extension-identifier...\n"
" " APP_NAME " remove <options> extension-identifier...\n"
" " APP_NAME " list <options> extension-identifier...\n"
" " APP_NAME " reinstall <options>\n"
@@ -72,6 +89,8 @@ const char s_usingText [] =
"\n"
"sub-commands:\n"
" add add extension\n"
+" validate checks the prerequisites of an installed extension and"
+" registers it if possible\n"
" remove remove extensions by identifier\n"
" reinstall expert feature: reinstall all deployed extensions\n"
" list list information about deployed extensions\n"
@@ -89,6 +108,8 @@ const char s_usingText [] =
" deployment context;\n"
" run only when no concurrent Office\n"
" process(es) are running!\n"
+" --bundled expert feature: operate on bundled extensions. Only\n"
+" works with list, validate, reinstall;\n"
" --deployment-context expert feature: explicit deployment context\n"
" <context>\n"
"\n"
@@ -149,12 +170,13 @@ void DialogClosedListenerImpl::dialogClosed(
// installed with OOo 2.2 or later could not normally be found via its file
// name.
Reference<deployment::XPackage> findPackage(
- Reference<deployment::XPackageManager> const & manager,
+ OUString const & repository,
+ Reference<deployment::XExtensionManager> const & manager,
Reference<ucb::XCommandEnvironment > const & environment,
OUString const & idOrFileName )
{
Sequence< Reference<deployment::XPackage> > ps(
- manager->getDeployedPackages(
+ manager->getDeployedExtensions(repository,
Reference<task::XAbortChannel>(), environment ) );
for ( sal_Int32 i = 0; i < ps.getLength(); ++i )
if ( dp_misc::getIdentifier( ps[i] ) == idOrFileName )
@@ -214,7 +236,7 @@ extern "C" int unopkg_main()
bool subcmd_add = false;
bool subcmd_gui = false;
OUString logFile;
- OUString deploymentContext;
+ OUString repository;
OUString cmdArg;
::std::vector<OUString> cmdPackages;
@@ -250,7 +272,7 @@ extern "C" int unopkg_main()
return 0;
}
else if (isOption( info_version, &nPos )) {
- dp_misc::writeConsole("\n"APP_NAME" Version 3.0\n");
+ dp_misc::writeConsole("\n"APP_NAME" Version 3.3\n");
return 0;
}
//consume all bootstrap variables which may occur before the subcommannd
@@ -279,7 +301,7 @@ extern "C" int unopkg_main()
!readOption( &option_force, info_force, &nPos ) &&
!readOption( &option_bundled, info_bundled, &nPos ) &&
!readOption( &option_suppressLicense, info_suppressLicense, &nPos ) &&
- !readArgument( &deploymentContext, info_context, &nPos ) &&
+ !readArgument( &repository, info_context, &nPos ) &&
!isBootstrapVariable(&nPos))
{
osl_getCommandArg( nPos, &cmdArg.pData );
@@ -312,25 +334,18 @@ extern "C" int unopkg_main()
}
}
- //make sure the bundled option was provided together with shared
- if (option_bundled && !option_shared)
+ if (repository.getLength() == 0)
{
- dp_misc::writeConsoleError(
- "\nERROR: option --bundled can only be used together with --shared!");
- return 1;
- }
-
-
- xComponentContext = getUNO(
- disposeGuard, option_verbose, option_shared, subcmd_gui,
- xLocalComponentContext );
-
- if (deploymentContext.getLength() == 0) {
- deploymentContext = option_shared ? OUSTR("shared") : OUSTR("user");
+ if (option_shared)
+ repository = OUSTR("shared");
+ else if (option_bundled)
+ repository = OUSTR("bundled");
+ else
+ repository = OUSTR("user");
}
else
{
- if (deploymentContext.equalsAsciiL(
+ if (repository.equalsAsciiL(
RTL_CONSTASCII_STRINGPARAM("shared") )) {
option_shared = true;
}
@@ -343,15 +358,44 @@ extern "C" int unopkg_main()
}
}
- Reference<deployment::XPackageManagerFactory> xPackageManagerFactory(
- deployment::thePackageManagerFactory::get( xComponentContext ) );
- Reference<deployment::XPackageManager> xPackageManager(
- xPackageManagerFactory->getPackageManager( deploymentContext ) );
+ if (subCommand.equals(OUSTR("reinstall")))
+ {
+ //We must prevent that services and types are loaded by UNO,
+ //otherwise we cannot delete the registry data folder.
+ OUString extensionUnorc;
+ if (repository.equals(OUSTR("user")))
+ extensionUnorc = OUSTR("$UNO_USER_PACKAGES_CACHE/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc");
+ else if (repository.equals(OUSTR("shared")))
+ extensionUnorc = OUSTR("$SHARED_EXTENSIONS_USER/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc");
+ else if (repository.equals(OUSTR("bundled")))
+ extensionUnorc = OUSTR("$BUNDLED_EXTENSIONS_USER/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc");
+ else
+ OSL_ASSERT(0);
+
+ ::rtl::Bootstrap::expandMacros(extensionUnorc);
+ oslFileError e = osl_removeFile(extensionUnorc.pData);
+ if (e != osl_File_E_None && e != osl_File_E_NOENT)
+ throw Exception(OUSTR("Could not delete ") + extensionUnorc, 0);
+ }
+
+ xComponentContext = getUNO(
+ disposeGuard, option_verbose, option_shared, subcmd_gui,
+ xLocalComponentContext );
+
+ Reference<deployment::XExtensionManager> xExtensionManager(
+ deployment::ExtensionManager::get( xComponentContext ) );
Reference< ::com::sun::star::ucb::XCommandEnvironment > xCmdEnv(
createCmdEnv( xComponentContext, logFile,
- option_force, option_verbose, option_bundled,
- option_suppressLicense) );
+ option_force, option_verbose) );
+
+ //synchronize bundled/shared extensions
+ //Do not synchronize when command is "reinstall". This could add types and services to UNO and
+ //prevent the deletion of the registry data folder
+ //synching is done in XExtensionManager.reinstall
+ if (!subcmd_gui && ! subCommand.equals(OUSTR("reinstall"))
+ && ! dp_misc::office_is_running())
+ dp_misc::syncRepositories(xCmdEnv);
if (subcmd_add ||
subCommand.equalsAsciiL(
@@ -362,35 +406,32 @@ extern "C" int unopkg_main()
OUString const & cmdPackage = cmdPackages[ pos ];
if (subcmd_add)
{
- Reference<deployment::XPackage> xPackage(
- xPackageManager->addPackage(
- cmdPackage, OUString() /* to be detected */,
- Reference<task::XAbortChannel>(), xCmdEnv ) );
- OSL_ASSERT( xPackage.is() );
+ beans::NamedValue nvSuppress(
+ OUSTR("SUPPRESS_LICENSE"), option_suppressLicense ?
+ makeAny(OUSTR("1")):makeAny(OUSTR("0")));
+ xExtensionManager->addExtension(
+ cmdPackage, Sequence<beans::NamedValue>(&nvSuppress, 1),
+ repository, Reference<task::XAbortChannel>(), xCmdEnv);
}
else
{
try
{
- xPackageManager->removePackage(
- cmdPackage, cmdPackage,
+ xExtensionManager->removeExtension(
+ cmdPackage, cmdPackage, repository,
Reference<task::XAbortChannel>(), xCmdEnv );
}
catch (lang::IllegalArgumentException &)
{
Reference<deployment::XPackage> p(
- findPackage(
- xPackageManager, xCmdEnv, cmdPackage ) );
- //Todo. temporary preventing exception in bundled case.
- //In case of a bundled extension, remove would be called as a result of
- //uninstalling a rpm. Then we do not want to show an error when the
- //extension does not exist, because the package will be uninstalled anyway
- //and the error would only confuse people.
- if ( !p.is() && !option_bundled)
+ findPackage(repository,
+ xExtensionManager, xCmdEnv, cmdPackage ) );
+ if ( !p.is())
throw;
else if (p.is())
- xPackageManager->removePackage(
+ xExtensionManager->removeExtension(
::dp_misc::getIdentifier(p), p->getName(),
+ repository,
Reference<task::XAbortChannel>(), xCmdEnv );
}
}
@@ -399,37 +440,136 @@ extern "C" int unopkg_main()
else if (subCommand.equalsAsciiL(
RTL_CONSTASCII_STRINGPARAM("reinstall") ))
{
- xPackageManager->reinstallDeployedPackages(
- Reference<task::XAbortChannel>(), xCmdEnv );
+ xExtensionManager->reinstallDeployedExtensions(
+ repository, Reference<task::XAbortChannel>(), xCmdEnv);
}
else if (subCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("list") ))
{
- Sequence< Reference<deployment::XPackage> > packages;
+ ::std::vector<Reference<deployment::XPackage> > vecExtUnaccepted;
+ ::comphelper::sequenceToContainer(vecExtUnaccepted,
+ xExtensionManager->getExtensionsWithUnacceptedLicenses(
+ repository, xCmdEnv));
+
+ //This vector tells what XPackage in allExtensions has an
+ //unaccepted license.
+ std::vector<bool> vecUnaccepted;
+ std::vector<Reference<deployment::XPackage> > allExtensions;
if (cmdPackages.empty())
{
- packages = xPackageManager->getDeployedPackages(
- Reference<task::XAbortChannel>(), xCmdEnv );
+ Sequence< Reference<deployment::XPackage> >
+ packages = xExtensionManager->getDeployedExtensions(
+ repository, Reference<task::XAbortChannel>(), xCmdEnv );
+
+ ::std::vector<Reference<deployment::XPackage> > vec_packages;
+ ::comphelper::sequenceToContainer(vec_packages, packages);
+
+ //First copy the extensions with the unaccepted license
+ //to vector allExtensions.
+ allExtensions.resize(vecExtUnaccepted.size() + vec_packages.size());
+
+ ::std::vector<Reference<deployment::XPackage> >::iterator i_all_ext =
+ ::std::copy(vecExtUnaccepted.begin(), vecExtUnaccepted.end(),
+ allExtensions.begin());
+ //Now copy those we got from getDeployedExtensions
+ ::std::copy(vec_packages.begin(), vec_packages.end(), i_all_ext);
+
+ //Now prepare the vector which tells what extension has an
+ //unaccepted license
+ vecUnaccepted.resize(vecExtUnaccepted.size() + vec_packages.size());
+ ::std::vector<bool>::iterator i_unaccepted =
+ ::std::fill_n(vecUnaccepted.begin(),
+ vecExtUnaccepted.size(), true);
+ ::std::fill_n(i_unaccepted, vec_packages.size(), false);
+
dp_misc::writeConsole(
- OUSTR("all deployed ") + deploymentContext + OUSTR(" packages:\n"));
+ OUSTR("All deployed ") + repository + OUSTR(" extensions:\n\n"));
}
else
{
- packages.realloc( cmdPackages.size() );
+ //The user provided the names (ids or file names) of the extensions
+ //which shall be listed
for ( ::std::size_t pos = 0; pos < cmdPackages.size(); ++pos )
+ {
+ Reference<deployment::XPackage> extension;
try
{
- packages[ pos ] = xPackageManager->getDeployedPackage(
- cmdPackages[ pos ], cmdPackages[ pos ], xCmdEnv );
+ extension = xExtensionManager->getDeployedExtension(
+ repository, cmdPackages[ pos ], cmdPackages[ pos ], xCmdEnv );
}
catch (lang::IllegalArgumentException &)
{
- packages[ pos ] = findPackage(
- xPackageManager, xCmdEnv, cmdPackages[ pos ] );
- if ( !packages[ pos ].is() )
- throw;
+ extension = findPackage(repository,
+ xExtensionManager, xCmdEnv, cmdPackages[ pos ] );
+ }
+
+ //Now look if the requested extension has an unaccepted license
+ bool bUnacceptedLic = false;
+ if (!extension.is())
+ {
+ ::std::vector<Reference<deployment::XPackage> >::const_iterator
+ i = ::std::find_if(
+ vecExtUnaccepted.begin(),
+ vecExtUnaccepted.end(), ExtensionName(cmdPackages[pos]));
+ if (i != vecExtUnaccepted.end())
+ {
+ extension = *i;
+ bUnacceptedLic = true;
+ }
+ }
+
+ if (extension.is())
+ {
+ allExtensions.push_back(extension);
+ vecUnaccepted.push_back(bUnacceptedLic);
+ }
+
+ else
+ throw lang::IllegalArgumentException(
+ OUSTR("There is no such extension deployed: ") +
+ cmdPackages[pos],0,-1);
+ }
+
+ }
+
+ printf_packages(allExtensions, vecUnaccepted, xCmdEnv );
+ }
+ else if (subCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("validate") ))
+ {
+ ::std::vector<Reference<deployment::XPackage> > vecExtUnaccepted;
+ ::comphelper::sequenceToContainer(
+ vecExtUnaccepted, xExtensionManager->getExtensionsWithUnacceptedLicenses(
+ repository, xCmdEnv));
+
+ for ( ::std::size_t pos = 0; pos < cmdPackages.size(); ++pos )
+ {
+ Reference<deployment::XPackage> extension;
+ try
+ {
+ extension = xExtensionManager->getDeployedExtension(
+ repository, cmdPackages[ pos ], cmdPackages[ pos ], xCmdEnv );
+ }
+ catch (lang::IllegalArgumentException &)
+ {
+ extension = findPackage(
+ repository, xExtensionManager, xCmdEnv, cmdPackages[ pos ] );
+ }
+
+ if (!extension.is())
+ {
+ ::std::vector<Reference<deployment::XPackage> >::const_iterator
+ i = ::std::find_if(
+ vecExtUnaccepted.begin(),
+ vecExtUnaccepted.end(), ExtensionName(cmdPackages[pos]));
+ if (i != vecExtUnaccepted.end())
+ {
+ extension = *i;
}
+ }
+
+ if (extension.is())
+ xExtensionManager->checkPrerequisitesAndEnable(
+ extension, Reference<task::XAbortChannel>(), xCmdEnv);
}
- printf_packages( packages, xCmdEnv );
}
else if (subCommand.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("gui") ))
{
diff --git a/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx b/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx
index e4a503d98732..69a973b90a42 100644
--- a/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx
+++ b/desktop/source/pkgchk/unopkg/unopkg_cmdenv.cxx
@@ -49,7 +49,7 @@
#include "com/sun/star/deployment/PlatformException.hpp"
#include "com/sun/star/i18n/XCollator.hpp"
#include "com/sun/star/i18n/CollatorOptions.hpp"
-#include "com/sun/star/deployment/LicenseIndividualAgreementException.hpp"
+
#include <stdio.h>
#include "deployment.hrc"
#include "dp_version.hxx"
@@ -85,13 +85,12 @@ class CommandEnvironmentImpl
sal_Int32 m_logLevel;
bool m_option_force_overwrite;
bool m_option_verbose;
- bool m_option_bundled;
- bool m_option_suppressLicense;
Reference< XComponentContext > m_xComponentContext;
Reference< XProgressHandler > m_xLogFile;
void update_( Any const & Status ) throw (RuntimeException);
- void printLicense(const OUString& sLicense, bool & accept, bool & decline);
+ void printLicense(const OUString & sName,const OUString& sLicense,
+ bool & accept, bool & decline);
public:
virtual ~CommandEnvironmentImpl();
@@ -99,9 +98,7 @@ public:
Reference<XComponentContext> const & xComponentContext,
OUString const & log_file,
bool option_force_overwrite,
- bool option_verbose,
- bool option_bundled,
- bool option_suppressLicense);
+ bool option_verbose);
// XCommandEnvironment
virtual Reference< task::XInteractionHandler > SAL_CALL
@@ -120,19 +117,16 @@ public:
virtual void SAL_CALL pop() throw (RuntimeException);
};
+
//______________________________________________________________________________
CommandEnvironmentImpl::CommandEnvironmentImpl(
Reference<XComponentContext> const & xComponentContext,
OUString const & log_file,
bool option_force_overwrite,
- bool option_verbose,
- bool option_bundled,
- bool option_suppressLicense)
+ bool option_verbose)
: m_logLevel(0),
m_option_force_overwrite( option_force_overwrite ),
m_option_verbose( option_verbose ),
- m_option_bundled( option_bundled),
- m_option_suppressLicense( option_suppressLicense),
m_xComponentContext(xComponentContext)
{
if (log_file.getLength() > 0) {
@@ -162,10 +156,13 @@ CommandEnvironmentImpl::~CommandEnvironmentImpl()
}
//May throw exceptions
-void CommandEnvironmentImpl::printLicense(const OUString& sLicense, bool & accept, bool &decline)
+void CommandEnvironmentImpl::printLicense(
+ const OUString & sName, const OUString& sLicense, bool & accept, bool &decline)
{
ResMgr * pResMgr = DeploymentResMgr::get();
- OUString s1 = String(ResId(RID_STR_UNOPKG_ACCEPT_LIC_1, *pResMgr));
+ String s1tmp(ResId(RID_STR_UNOPKG_ACCEPT_LIC_1, *pResMgr));
+ s1tmp.SearchAndReplaceAllAscii( "$NAME", sName );
+ OUString s1(s1tmp);
OUString s2 = String(ResId(RID_STR_UNOPKG_ACCEPT_LIC_2, *pResMgr));
OUString s3 = String(ResId(RID_STR_UNOPKG_ACCEPT_LIC_3, *pResMgr));
OUString s4 = String(ResId(RID_STR_UNOPKG_ACCEPT_LIC_4, *pResMgr));
@@ -246,7 +243,6 @@ void CommandEnvironmentImpl::handle(
lang::WrappedTargetException wtExc;
deployment::LicenseException licExc;
deployment::InstallException instExc;
- deployment::LicenseIndividualAgreementException licAgreementExc;
deployment::PlatformException platExc;
deployment::VersionException verExc;
@@ -281,27 +277,9 @@ void CommandEnvironmentImpl::handle(
update_( wtExc.TargetException );
}
}
- else if (request >>= licAgreementExc)
- {
- if (m_option_suppressLicense && licAgreementExc.SuppressIfRequired)
- {
- approve = true;
- }
- else
- {
- String sResMsg( ResId( RID_STR_UNOPKG_NO_SHARED_ALLOWED, *DeploymentResMgr::get() ) );
- sResMsg.SearchAndReplaceAllAscii( "%NAME", licAgreementExc.ExtensionName );
- dp_misc::writeConsole(OUSTR("\n") + sResMsg + OUSTR("\n\n"));
- abort = true;
- }
- }
else if (request >>= licExc)
{
- bLicenseException = true;
- if (m_option_suppressLicense && licExc.SuppressIfRequired)
- approve = true;
- else
- printLicense(licExc.Text, approve, abort);
+ printLicense(licExc.ExtensionName, licExc.Text, approve, abort);
}
else if (request >>= instExc)
{
@@ -320,7 +298,7 @@ void CommandEnvironmentImpl::handle(
deployment::VersionException nc_exc;
if (request >>= nc_exc) {
approve = m_option_force_overwrite ||
- (::dp_misc::comparePackageVersions(nc_exc.New, nc_exc.Deployed)
+ (::dp_misc::compareVersions(nc_exc.NewVersion, nc_exc.Deployed->getVersion())
== ::dp_misc::GREATER);
abort = !approve;
}
@@ -436,6 +414,7 @@ void CommandEnvironmentImpl::pop() throw (RuntimeException)
m_xLogFile->pop();
}
+
} // anon namespace
namespace unopkg {
@@ -445,14 +424,10 @@ Reference< XCommandEnvironment > createCmdEnv(
Reference< XComponentContext > const & xContext,
OUString const & logFile,
bool option_force_overwrite,
- bool option_verbose,
- bool option_bundled,
- bool option_suppressLicense)
+ bool option_verbose)
{
return new CommandEnvironmentImpl(
- xContext, logFile, option_force_overwrite, option_verbose, option_bundled,
- option_suppressLicense);
+ xContext, logFile, option_force_overwrite, option_verbose);
}
-
} // unopkg
diff --git a/desktop/source/pkgchk/unopkg/unopkg_misc.cxx b/desktop/source/pkgchk/unopkg/unopkg_misc.cxx
index b25176e1dcee..3272810afee2 100644
--- a/desktop/source/pkgchk/unopkg/unopkg_misc.cxx
+++ b/desktop/source/pkgchk/unopkg/unopkg_misc.cxx
@@ -48,6 +48,7 @@
#include "unotools/configmgr.hxx"
#include "com/sun/star/lang/XMultiServiceFactory.hpp"
#include "cppuhelper/bootstrap.hxx"
+#include "comphelper/sequence.hxx"
#include <stdio.h>
using ::rtl::OUString;
@@ -317,7 +318,10 @@ void printf_package(
xPackage->getBundle( Reference<task::XAbortChannel>(), xCmdEnv ) );
printf_space( level + 1 );
dp_misc::writeConsole("bundled Packages: {\n");
- printf_packages( seq, xCmdEnv, level + 2 );
+ ::std::vector<Reference<deployment::XPackage> >vec_bundle;
+ ::comphelper::sequenceToContainer(vec_bundle, seq);
+ printf_packages( vec_bundle, ::std::vector<bool>(vec_bundle.size()),
+ xCmdEnv, level + 2 );
printf_space( level + 1 );
dp_misc::writeConsole("}\n");
}
@@ -325,23 +329,45 @@ void printf_package(
} // anon namespace
+void printf_unaccepted_licenses(
+ Reference<deployment::XPackage> const & ext)
+{
+ OUString id(
+ dp_misc::getIdentifier(ext) );
+ printf_line( OUSTR("Identifier"), id, 0 );
+ printf_space(1);
+ dp_misc::writeConsole(OUSTR("License not accepted\n\n"));
+}
+
//==============================================================================
void printf_packages(
- Sequence< Reference<deployment::XPackage> > const & seq,
+ ::std::vector< Reference<deployment::XPackage> > const & allExtensions,
+ ::std::vector<bool> const & vecUnaccepted,
Reference<XCommandEnvironment> const & xCmdEnv, sal_Int32 level )
{
- sal_Int32 len = seq.getLength();
- Reference< deployment::XPackage > const * p = seq.getConstArray();
- if (len == 0) {
+ OSL_ASSERT(allExtensions.size() == vecUnaccepted.size());
+
+ if (allExtensions.size() == 0)
+ {
printf_space( level );
dp_misc::writeConsole("<none>\n");
}
- else {
- for ( sal_Int32 pos = 0; pos < len; ++pos )
- printf_package( p[ pos ], xCmdEnv, level );
+ else
+ {
+ typedef ::std::vector< Reference<deployment::XPackage> >::const_iterator I_EXT;
+ int index = 0;
+ for (I_EXT i = allExtensions.begin(); i != allExtensions.end(); i++, index++)
+ {
+ if (vecUnaccepted[index])
+ printf_unaccepted_licenses(*i);
+ else
+ printf_package( *i, xCmdEnv, level );
+ dp_misc::writeConsole(OUSTR("\n"));
+ }
}
}
+
//##############################################################################
namespace {
diff --git a/desktop/source/pkgchk/unopkg/unopkg_shared.h b/desktop/source/pkgchk/unopkg/unopkg_shared.h
index 6e9d30cf0d42..43f77513b10c 100644
--- a/desktop/source/pkgchk/unopkg/unopkg_shared.h
+++ b/desktop/source/pkgchk/unopkg/unopkg_shared.h
@@ -162,14 +162,12 @@ css::uno::Reference<css::ucb::XCommandEnvironment> createCmdEnv(
css::uno::Reference<css::uno::XComponentContext> const & xContext,
::rtl::OUString const & logFile,
bool option_force_overwrite,
- bool option_verbose,
- bool option_bundled,
- bool option_suppressLicense);
-
+ bool option_verbose);
//==============================================================================
void printf_packages(
- css::uno::Sequence<
- css::uno::Reference<css::deployment::XPackage> > const & seq,
+ ::std::vector<
+ css::uno::Reference<css::deployment::XPackage> > const & allExtensions,
+ ::std::vector<bool> const & vecUnaccepted,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv,
sal_Int32 level = 0 );
diff --git a/desktop/source/splash/splash.cxx b/desktop/source/splash/splash.cxx
index 5fee3028b4f6..381a98ce008f 100644
--- a/desktop/source/splash/splash.cxx
+++ b/desktop/source/splash/splash.cxx
@@ -135,14 +135,21 @@ void SAL_CALL SplashScreen::reset()
}
}
-void SAL_CALL SplashScreen::setText(const OUString&)
+void SAL_CALL SplashScreen::setText(const OUString& rText)
throw (RuntimeException)
{
- if (_bVisible && !_bProgressEnd) {
- if ( _eBitmapMode == BM_FULLSCREEN )
- ShowFullScreenMode( TRUE );
- Show();
- Flush();
+ ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
+ if ( _sProgressText != rText )
+ {
+ _sProgressText = rText;
+
+ if (_bVisible && !_bProgressEnd)
+ {
+ if ( _eBitmapMode == BM_FULLSCREEN )
+ ShowFullScreenMode( TRUE );
+ Show();
+ updateStatus();
+ }
}
}
@@ -647,7 +654,7 @@ void SplashScreen::Paint( const Rectangle&)
}
if( (bNativeOK = DrawNativeControl( CTRL_INTROPROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
- CTRL_STATE_ENABLED, aValue, rtl::OUString() )) != FALSE )
+ CTRL_STATE_ENABLED, aValue, _sProgressText )) != FALSE )
{
return;
}
@@ -668,10 +675,8 @@ void SplashScreen::Paint( const Rectangle&)
_vdev.DrawRect(Rectangle(_tlx, _tly, _tlx+_barwidth, _tly+_barheight));
_vdev.SetFillColor( _cProgressBarColor );
_vdev.SetLineColor();
- Rectangle aRect(_tlx+_barspace, _tly+_barspace, _tlx+_barspace+length, _tly+_barheight-_barspace);
- _vdev.DrawRect(Rectangle(_tlx+_barspace, _tly+_barspace,
- _tlx+_barspace+length, _tly+_barheight-_barspace));
-
+ _vdev.DrawRect(Rectangle(_tlx+_barspace, _tly+_barspace, _tlx+_barspace+length, _tly+_barheight-_barspace));
+ _vdev.DrawText( Rectangle(_tlx, _tly+_barheight+5, _tlx+_barwidth, _tly+_barheight+5+20), _sProgressText, TEXT_DRAW_CENTER );
}
Size aSize = GetOutputSizePixel();
Size bSize = _vdev.GetOutputSizePixel();
diff --git a/desktop/source/splash/splash.hxx b/desktop/source/splash/splash.hxx
index 99677aa107f1..8480ed3df9ae 100644
--- a/desktop/source/splash/splash.hxx
+++ b/desktop/source/splash/splash.hxx
@@ -91,6 +91,7 @@ private:
Color _cProgressBarColor;
bool _bNativeProgress;
OUString _sAppName;
+ OUString _sProgressText;
std::vector< FullScreenProgressRatioValue > _sFullScreenProgressRatioValues;
sal_Int32 _iMax;
diff --git a/desktop/unx/source/officeloader/officeloader.cxx b/desktop/unx/source/officeloader/officeloader.cxx
index de84985cdea6..87621960c61a 100755
--- a/desktop/unx/source/officeloader/officeloader.cxx
+++ b/desktop/unx/source/officeloader/officeloader.cxx
@@ -93,7 +93,7 @@ SAL_IMPLEMENT_MAIN()
if ( info.Fields & osl_Process_EXITCODE )
{
exitcode = info.Code;
- bRestart = (ExitHelper::E_CRASH_WITH_RESTART == exitcode);
+ bRestart = (ExitHelper::E_CRASH_WITH_RESTART == exitcode || ExitHelper::E_NORMAL_RESTART == exitcode);
}
else
break;
diff --git a/desktop/util/makefile.mk b/desktop/util/makefile.mk
index 47885dfd6b73..8cf03f157254 100644
--- a/desktop/util/makefile.mk
+++ b/desktop/util/makefile.mk
@@ -108,7 +108,7 @@ APP5RPATH=BRAND
APP5OBJS=$(OBJ)$/copyright_ascii_ooo.obj $(OBJ)$/main.obj
APP5STDLIBS = $(SALLIB) $(SOFFICELIB)
.IF "$(OS)" == "LINUX"
-APP5STDLIBS+= -lXext
+APP5STDLIBS+= -lXext -lX11
#APP5STDLIBS+= -lXext -lSM -lICE
.ENDIF # LINUX
diff --git a/desktop/win32/source/officeloader/officeloader.cxx b/desktop/win32/source/officeloader/officeloader.cxx
index f36bfc134ded..7c2dafc79bbb 100644
--- a/desktop/win32/source/officeloader/officeloader.cxx
+++ b/desktop/win32/source/officeloader/officeloader.cxx
@@ -212,7 +212,7 @@ int WINAPI _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
LPTSTR lpCommandLine = NULL;
int argc = 0;
LPTSTR * argv = NULL;
- bool first = true;
+ bool bFirst = true;
WCHAR cwd[MAX_PATH];
DWORD cwdLen = GetCurrentDirectoryW(MAX_PATH, cwd);
if (cwdLen >= MAX_PATH) {
@@ -318,7 +318,7 @@ int WINAPI _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
}
}
- if (first) {
+ if ( bFirst ) {
argv = GetCommandArgs(&argc);
std::size_t n = wcslen(argv[0]) + 2;
for (int i = 1; i < argc; ++i) {
@@ -334,7 +334,7 @@ int WINAPI _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
lpCommandLine, MY_STRING(L"\""));
p = desktop_win32::commandLineAppend(p, argv[0]);
for (int i = 1; i < argc; ++i) {
- if (first || wcsncmp(argv[i], MY_STRING(L"-env:")) == 0) {
+ if (bFirst || ::desktop::ExitHelper::E_NORMAL_RESTART == dwExitCode || wcsncmp(argv[i], MY_STRING(L"-env:")) == 0) {
p = desktop_win32::commandLineAppend(p, MY_STRING(L"\" \""));
p = desktop_win32::commandLineAppend(p, argv[i]);
}
@@ -348,7 +348,7 @@ int WINAPI _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
p = desktop_win32::commandLineAppendEncoded(p, cwd);
}
desktop_win32::commandLineAppend(p, MY_STRING(L"\""));
- first = false;
+ bFirst = false;
TCHAR szParentProcessId[64]; // This is more than large enough for a 128 bit decimal value
BOOL bHeadlessMode( FALSE );
@@ -416,7 +416,8 @@ int WINAPI _tWinMain( HINSTANCE, HINSTANCE, LPTSTR, int )
CloseHandle( aProcessInfo.hProcess );
CloseHandle( aProcessInfo.hThread );
}
- } while ( fSuccess && ::desktop::ExitHelper::E_CRASH_WITH_RESTART == dwExitCode );
+ } while ( fSuccess
+ && ( ::desktop::ExitHelper::E_CRASH_WITH_RESTART == dwExitCode || ::desktop::ExitHelper::E_NORMAL_RESTART == dwExitCode ));
delete[] lpCommandLine;
return fSuccess ? dwExitCode : -1;
diff --git a/editeng/source/uno/unotext.cxx b/editeng/source/uno/unotext.cxx
index 45ef23c2be8f..ec7e76b144c0 100644
--- a/editeng/source/uno/unotext.cxx
+++ b/editeng/source/uno/unotext.cxx
@@ -260,12 +260,14 @@ SvxUnoTextRangeBase::SvxUnoTextRangeBase( const SvxEditSource* pSource, const Sv
DBG_ASSERT(pSource,"SvxUnoTextRangeBase: I need a valid SvxEditSource!");
mpEditSource = pSource->Clone();
- ESelection aSelection;
- ::GetSelection( aSelection, mpEditSource->GetTextForwarder() );
- SetSelection( aSelection );
+ if (mpEditSource != NULL)
+ {
+ ESelection aSelection;
+ ::GetSelection( aSelection, mpEditSource->GetTextForwarder() );
+ SetSelection( aSelection );
- if( mpEditSource )
mpEditSource->addRange( this );
+ }
#ifdef DEBUG
gNumRanges.add(this);
#endif
@@ -348,7 +350,8 @@ void SvxUnoTextRangeBase::SetSelection( const ESelection& rSelection ) throw()
OGuard aGuard( Application::GetSolarMutex() );
maSelection = rSelection;
- CheckSelection( maSelection, mpEditSource->GetTextForwarder() );
+ if (mpEditSource != NULL)
+ CheckSelection( maSelection, mpEditSource->GetTextForwarder() );
}
// Interface XTextRange ( XText )
diff --git a/extensions/source/scanner/sane.cxx b/extensions/source/scanner/sane.cxx
index af1a8d91c8fd..43c50e6f8451 100644
--- a/extensions/source/scanner/sane.cxx
+++ b/extensions/source/scanner/sane.cxx
@@ -642,6 +642,11 @@ BOOL Sane::Start( BitmapTransporter& rBitmap )
nStatus = p_get_parameters( maHandle, &aParams );
DUMP_STATE( nStatus, "sane_get_parameters" );
CheckConsistency( "sane_get_parameters" );
+ if (nStatus != SANE_STATUS_GOOD || aParams.bytes_per_line == 0)
+ {
+ bSuccess = FALSE;
+ break;
+ }
#if (OSL_DEBUG_LEVEL > 1) || defined DBG_UTIL
const char* ppFormats[] = { "SANE_FRAME_GRAY", "SANE_FRAME_RGB",
"SANE_FRAME_RED", "SANE_FRAME_GREEN",
diff --git a/extensions/source/update/check/updatecheck.cxx b/extensions/source/update/check/updatecheck.cxx
index d65a97e49dc6..8419569bd949 100755
--- a/extensions/source/update/check/updatecheck.cxx
+++ b/extensions/source/update/check/updatecheck.cxx
@@ -865,6 +865,9 @@ UpdateCheck::initialize(const uno::Sequence< beans::NamedValue >& rValues,
m_aUpdateInfo = UpdateInfo();
+ // Remove outdated release notes
+ storeReleaseNote( 1, rtl::OUString() );
+ storeReleaseNote( 2, rtl::OUString() );
}
else
{
diff --git a/external/gcc3_specific/makefile.mk b/external/gcc3_specific/makefile.mk
index 4ad02335c8ea..23940c30f8d1 100644
--- a/external/gcc3_specific/makefile.mk
+++ b/external/gcc3_specific/makefile.mk
@@ -47,14 +47,14 @@ $(MINGWGXXDLL) :
.EXPORT : CC
-all .SEQUENTIAL : $(LB)$/libstdc++.so.$(SHORTSTDCPP3) $(LB)$/libgcc_s.so.1
+all .SEQUENTIAL : $(LB)$/libstdc++.so.$(SHORTSTDCPP3) $(LB)$/libgcc_s.so.$(SHORTSTDC3)
$(LB)$/libstdc++.so.$(SHORTSTDCPP3) :
- $(GCCINSTLIB) libstdc++.so.$(SHORTSTDCPP3) $(LB)
+ $(GCCINSTLIB) libstdc++.so.$(SHORTSTDCPP3) $(LB)
-$(LB)$/libgcc_s.so.1 :
- $(GCCINSTLIB) libgcc_s.so.1 $(LB)
+$(LB)$/libgcc_s.so.$(SHORTSTDC3) :
+ $(GCCINSTLIB) libgcc_s.so.$(SHORTSTDC3) $(LB)
.ENDIF
.ENDIF
diff --git a/external/glibc-2.1.3.patch b/external/glibc-2.1.3.patch
index 57aae6a9c0fd..dddc22a3e009 100644
--- a/external/glibc-2.1.3.patch
+++ b/external/glibc-2.1.3.patch
@@ -76,7 +76,7 @@
extern int getopt ();
--- misc/glibc-2.1.3/posix/makefile.mk Mon Mar 31 09:43:50 2008
+++ misc/build/glibc-2.1.3/posix/makefile.mk Mon Mar 31 09:43:38 2008
-@@ -1 +1,63 @@
+@@ -1 +1,70 @@
-dummy
+#*************************************************************************
+#
@@ -123,14 +123,16 @@
+
+# --- Files --------------------------------------------------------
+
++.IF "$(HAVE_GETOPT)" != "YES"
+OBJFILES= $(OBJ)$/getopt.obj \
+ $(OBJ)$/getopt1.obj
+
+LIB1TARGET=$(SLB)$/$(TARGET).lib
+LIB1ARCHIV=$(LB)$/lib$(TARGET).a
+LIB1OBJFILES=$(OBJFILES)
++.ENDIF
+
-+.IF "$(OS)"=="NETBSD"
++.IF "$(HAVE_READDIR_R)" != "YES" && "$(OS)" != "WNT"
+TARGET2=gnu_readdir_r
+OBJFILES+= $(OBJ)$/readdir_r.obj
+LIB2TARGET=$(SLB)$/$(TARGET2).lib
@@ -138,6 +140,11 @@
+LIB2OBJFILES= $(OBJ)$/readdir_r.obj
+.ENDIF
+
++.IF "$(HAVE_READDIR_R)" == "YES" && "$(HAVE_GETOPT)" == "YES"
++@all:
++ @echo "Nothing to do here.
++.ENDIF
++
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/external/glibc/makefile.mk b/external/glibc/makefile.mk
index cf4516515a67..04e2ff5b99bd 100644
--- a/external/glibc/makefile.mk
+++ b/external/glibc/makefile.mk
@@ -36,10 +36,14 @@ TARGET=getopt
# --- Files --------------------------------------------------------
+.IF "$(HAVE_GETOPT)" != "YES" || "$(HAVE_READDIR_R)" != "YES"
TARFILE_NAME=glibc-2.1.3-stub
TARFILE_MD5=4a660ce8466c9df01f19036435425c3a
TARFILE_ROOTDIR=glibc-2.1.3
-ADDITIONAL_FILES=posix$/makefile.mk posix$/config.h posix$/readdir_r.c
+ADDITIONAL_FILES=posix$/makefile.mk posix$/config.h
+.IF "$(HAVE_READDIR_R)" != "YES"
+ADDITIONAL_FILES += posix$/readdir_r.c
+.ENDIF
PATCH_FILES=$(PRJ)$/glibc-2.1.3.patch
@@ -49,6 +53,15 @@ CONFIGURE_ACTION=
BUILD_DIR=posix
BUILD_ACTION=dmake $(MFLAGS) $(CALLMACROS)
+OUT2INC= \
+ posix/getopt.h \
+ posix/config.h
+
+.ELSE
+@all:
+ @echo "Nothing to do here."
+.ENDIF
+
# --- Targets ------------------------------------------------------
.INCLUDE : set_ext.mk
diff --git a/external/prj/d.lst b/external/prj/d.lst
index 2c50c4c6f801..9e0c68129c77 100644
--- a/external/prj/d.lst
+++ b/external/prj/d.lst
@@ -12,14 +12,16 @@ mkdir: %_DEST%\inc%_EXT%\external\mingw\include\sys
..\%__SRC%\lib\libgnu_getopt.a %_DEST%\lib%_EXT%\libgnu_getopt.a
..\%__SRC%\lib\libgnu_getopt_static.a %_DEST%\lib%_EXT%\libgnu_getopt_static.a
+..\%__SRC%\inc\*.h %_DEST%\inc%_EXT%\external\glibc\*.h
+
..\%__SRC%\misc\mingw\include\*.h %_DEST%\inc%_EXT%\external\mingw\include\*
..\%__SRC%\misc\mingw\include\atl\*.h %_DEST%\inc%_EXT%\external\mingw\include\atl\*
..\%__SRC%\misc\mingw\include\sys\*.h %_DEST%\inc%_EXT%\external\mingw\include\sys\*
..\%__SRC%\lib\libautorec*.* %_DEST%\lib%_EXT%\lib*.*
-..\%__SRC%\lib\libgcc_s.so.1 %_DEST%\lib%_EXT%\libgcc_s.so.1
-..\%__SRC%\lib\libstdc++.so.6 %_DEST%\lib%_EXT%\libstdc++.so.6
+..\%__SRC%\lib\libgcc_s.so.* %_DEST%\lib%_EXT%\libgcc_s.so.*
+..\%__SRC%\lib\libstdc++.so.* %_DEST%\lib%_EXT%\libstdc++.so.*
..\dbghelp\dbghelp.dll %_DEST%\bin%_EXT%\dbghelp.dll
diff --git a/extras/source/wordbook/delzip b/extras/source/wordbook/delzip
index 636fda90bfcb..a6596092cd05 100644
--- a/extras/source/wordbook/delzip
+++ b/extras/source/wordbook/delzip
@@ -1 +1,2 @@
+~
ECHO is OFF
diff --git a/extras/source/wordbook/makefile.mk b/extras/source/wordbook/makefile.mk
index 7d4e618a9c44..a012b89686f1 100644
--- a/extras/source/wordbook/makefile.mk
+++ b/extras/source/wordbook/makefile.mk
@@ -39,7 +39,7 @@ TARGET=wordbookall
ZIP1TARGET = $(WORDBOOK_ALL_TARGET)
-ZIP1LIST = sun.dic
+ZIP1LIST = oracle.dic
ZIP2TARGET = $(WORDBOOK_USER_TARGET)
diff --git a/extras/source/wordbook/oracle.dic b/extras/source/wordbook/oracle.dic
new file mode 100644
index 000000000000..5b7ab0957916
--- /dev/null
+++ b/extras/source/wordbook/oracle.dic
@@ -0,0 +1,626 @@
+OOoUserDict1
+lang: <none>
+type: positive
+---
+Accelerator
+Access
+Accessibility
+Account
+Accounting
+Accounts
+Acorde=
+Activity
+Adapter
+Adapters
+Add-in
+Add-on
+Add-On
+Administration
+Administrator
+Admissions
+Advanced
+Advantage
+Advisor
+Agent
+Agents
+Agile
+Analysis
+Analytics
+Analyzer
+AppConnect=
+Application
+Applications
+AppWizard=
+AppXaminer=
+AppXNavigator=
+AppXRay=
+Architecture
+Argus=
+Asset
+Assets
+Assistant
+Automation
+Automotive
+AutoVue=
+Backbone
+Banking
+Base
+Base24=
+Based
+Basel=
+Beehive=
+Berkeley
+Bill
+Billing
+Bills
+Blade
+BookBuilder=
+Brocade=
+Budgeting
+Budgets
+Builder
+Bulk
+Bus
+Business
+CADView=
+Calc=
+Call
+Campaigns
+Campus
+Candidate
+Capital
+Captovation=
+Capture
+Care
+Cartridge
+Case
+Cash
+Center
+Certified
+Chain
+Change
+ChangeCast=
+Channel
+Cisco=
+Clickstream=
+Client
+Clinical
+Cluster
+Clusters
+Cognos=
+Coherence
+Collaboration
+Collaborative
+Collection
+Collections
+Commerce
+Commercial
+Communications
+Compensation
+Compliance
+Component
+Components
+Configuration
+Configurator
+Connect2OracleSelf=
+Connection
+Connector
+Console
+Consulting
+Consumer
+Contact
+Content
+ConText=
+Contract
+Contracts
+Control
+Controls
+Core
+COREid=
+Corporate
+Corporation=
+Costing
+Credit
+Crypto
+Crystal
+Custom
+Customer
+Customers
+Dashboard
+Dashboards
+Data
+Database
+Datacenter=
+Daybreak
+Delivery
+Demand
+Demantra=
+Designer
+Desktop
+Developer
+Development
+Device
+Direct
+Director
+Directory
+Discoverer
+Discrete
+Distribution
+DistributionRPM=
+DocLink=
+Docuflex=
+Documaker=
+Document
+Documentum=
+Draw=
+Dynamic
+E-Business=
+e-Commerce
+E-Delivery
+E-Factoring
+E-Mail
+E-Records
+e-Support
+Easy*SQL=
+eAutomotive=
+eBenefits=
+eBill=
+eBilling=
+eCommunications=
+eCompensation=
+eConfigurator=
+eConsumer=
+eCustomer=
+eDevelopment=
+Edition
+Education
+Edwards
+eEnergy=
+eEvents=
+eFinance=
+eHealthcare=
+eInsurance=
+Electro-Mechanical
+Ellison=
+Email
+eMail
+eMedia=
+Encyclopedia
+Energy
+Engine
+Enterprise
+EnterpriseOne=
+eOil=
+ePay=
+ePayment=
+ePerformance=
+eProcurement=
+eProfile=
+ePublic=
+eRecruit=
+eRetail=
+eSales=
+eService=
+eSettlements=
+Essbase=
+Estate
+eStatement=
+eSupplier=
+Ethernet
+eTransportation=
+eTravel=
+Exadata=
+Exchange
+Execution
+Expansion
+Express
+ExpressModule=
+Extension
+Extensions
+FastForward=
+Field
+FieldService=
+FileAct=
+Filenet=
+Finance
+Financial
+Financials
+FinancialsRPM=
+Fire=
+Flash=
+FlashFire=
+Floor
+Flow
+Foundation
+Framework
+Fulfillment
+Funds
+Fusion
+Gateway
+General
+Gigabit
+GigaSwift=
+Global
+GoldenGate=
+Goods
+Government
+Gradebook=
+Grants
+Group
+Handheld
+Healthcare
+HelpDesk=
+High
+Hub
+Human
+Hummingbird=
+Hyperion=
+i-flex
+iAssets=
+iClaims=
+iDelivery=
+Identity
+iGovernment=
+iLearning=
+iMarketing=
+iMeeting=
+Impress=
+Incentive
+Industry
+InfiniBand=
+Information
+Informix=
+Infosync=
+Infrastructure
+Insight
+Institutional
+Insurance
+Integration
+Integrator
+Intellectual
+Intelligence
+InterAct=
+Interaction
+Interactive
+InterConnect=
+InterDev=
+Interface
+interMedia=
+Inventory
+iPayment=
+iPLS=
+iProcurement=
+iReceivables=
+iRecruitment=
+iSetup=
+iSQL*Plus=
+iStore=
+IStream=
+iSupplier=
+iSupport=
+iWay=
+Java=
+JDeveloper=
+JeOS
+JHeadstart=
+Jinitiator=
+Jolt=
+JRockit=
+JServer=
+Kit
+Kodo=
+Labor
+Larry=
+Learning
+Lease
+Leasing
+Ledger
+Legal
+Lending
+Library
+Life
+Lifecycle
+Lines
+Linux
+Livelink=
+Load
+Loans
+LogMiner=
+Loyalty
+Machine
+Mainframe
+Maintenance
+Managed
+Management
+management
+Manager
+Managers
+Mantas=
+Manufacturing
+Marketing
+Mart
+Marts
+Master
+Math=
+MatrixOne=
+Media
+Medical
+MessageQ=
+Messaging
+Metadata
+MetaSolv=
+Microsoft=
+MicroStrategy=
+Middleware
+Migration
+Mobile
+Model
+Modeling
+Module
+Modules
+Monitor
+Monitoring
+Multi-Currency
+Multi-Site
+Multichannel
+MultiChannel=
+MultiDB=
+Multilayer
+Multinational
+Multiprotocol
+MultiProtocol=
+Multiservice
+Multisite
+Multithreaded
+NetApp=
+Netra=
+NetSolutions=
+Network
+Nostro=
+Objectel=
+Objects
+Office=
+On
+OnDemand=
+One
+Online
+OnLine=
+Onsite
+Open=
+OpenBeleid=
+OpenDocument=
+OpenOffice.org=
+OpenText=
+OpenWorld=
+OpenZorg=
+Operational
+Operations
+Optimization
+Option
+Oracle=
+OracleBRONZE=
+OracleCONTACT=
+OracleDevConnect=
+OracleGOLD=
+OracleIncident=
+OracleJSP0
+OracleLifeCycle=
+OracleMERCURY=
+OracleMetaLink=
+Oraclemetals=
+OraclePLATINUM=
+OracleSILVER=
+OracleSTERLING=
+Order
+Origination
+Outage
+Pack
+Parkway=
+Partner
+PartnerNetwork=
+Payable
+Payables
+Payment
+Payments
+Payroll
+PayrollRPM=
+PeopleBooks=
+PeopleCode=
+PeopleSoft=
+Peoplesoft=
+PeopleTools=
+Performance
+Personal
+Phaos=
+Pharma
+Planning
+Platform
+Plug-in
+Plug-In
+Plug-ins
+Plus
+Point
+Policies
+Policy
+Port
+Portal
+PortalRPM=
+Pricing
+Primavera=
+PrimeSourcing=
+Process
+ProcessConnect=
+Processing
+Processor
+Procurement
+Product
+product
+Production
+Productivity
+Professional
+Profiles
+Profitability
+Project
+ProjectsRPM=
+Promotions
+Property
+Provider
+Provisioning
+Public
+Publisher
+Purchasing
+Quality
+Quickclip=
+Quoting
+Rack
+Rally
+Rating
+Real
+Real
+Real-Time
+Receivables
+Records
+Recruiting
+Redwood=
+Reference
+Relationship
+Repair
+Reporting
+Reports
+Repository
+Resource
+Resources
+ResourcesRPM=
+Retail
+Reveleus=
+Revenue
+Risk
+RosettaNet=
+Rules
+Sale
+Sales
+Samples
+Satmetrix=
+Scheduler
+Scheduling
+Sciences
+Scorecard
+Search
+Sector
+Secure
+SecureCARE=
+Security
+Self
+SellingPoint=
+Server
+Service
+Services
+Servicing
+Shores=
+Siebel=
+Sign-On
+SimBuilder=
+Single
+Site
+SiteMinder=
+SkillsVillage=
+Smart
+SmartScript=
+SmartViews=
+Software
+Solution
+Solutions
+Sophoi=
+Sourcing
+Space
+Spatial=
+SSLava=
+Standard
+Steward
+Storage
+StorageTek=
+Store
+Strategic
+Student
+Studio
+StyleBox=
+Subledger
+Succession
+Suite
+Sun=
+SunHSI=
+SunSAI=
+Superior
+Supervisor
+Supply
+Support
+SupportInsite=
+SupportNews=
+SupportNotes=
+SureTrak=
+SWIFTNet=
+Switch
+Switching
+System
+Talent
+Taxation
+Tech
+Technology
+Telco=
+Telecom
+Telemarketing
+Telephony
+TeleSales=
+TeleService=
+Testing
+Theory
+Time
+TimesTen=
+Tools
+TopLink=
+TopPlan=
+Tracking
+Trade
+Trading
+Transaction
+Transfer
+Transparent
+Transportation
+Treasury
+Trial
+TrialMinder=
+Tuxedo=
+Unbreakable=
+Unified
+Universal
+Update
+Upgrade
+User
+Utilities
+Utility
+Value
+Vault
+Veridata
+Virtual
+VoIP=
+VueLink=
+Warehouse
+Web
+WebCast=
+WebCenter=
+WebDB=
+WebHouse=
+WebLogic=
+Webmail
+WebServer=
+WebTrack=
+Whitehill=
+Wireless
+Work
+Workflow
+Workforce
+Workgroup
+Workspace
+Workspaces
+World
+Writer=
diff --git a/extras/source/wordbook/sun.dic b/extras/source/wordbook/sun.dic
deleted file mode 100644
index 21842ef2abc7..000000000000
--- a/extras/source/wordbook/sun.dic
+++ /dev/null
Binary files differ
diff --git a/filter/inc/filter/msfilter/msvbahelper.hxx b/filter/inc/filter/msfilter/msvbahelper.hxx
index 540097c054dc..81607c9b296c 100644
--- a/filter/inc/filter/msfilter/msvbahelper.hxx
+++ b/filter/inc/filter/msfilter/msvbahelper.hxx
@@ -48,7 +48,8 @@ namespace ooo { namespace vba
};
MSFILTER_DLLPUBLIC String makeMacroURL( const String& sMacroName );
- MSFILTER_DLLPUBLIC VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUString& sMod, bool bSearchGlobalTemplates = false );
+ MSFILTER_DLLPUBLIC ::rtl::OUString extractMacroName( const ::rtl::OUString& rMacroUrl );
+ MSFILTER_DLLPUBLIC VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUString& sMod, bool bSearchGlobalTemplates = false );
MSFILTER_DLLPUBLIC sal_Bool executeMacro( SfxObjectShell* pShell, const String& sMacroName, com::sun::star::uno::Sequence< com::sun::star::uno::Any >& aArgs, com::sun::star::uno::Any& aRet, const com::sun::star::uno::Any& aCaller );
} }
diff --git a/filter/source/config/cache/constant.hxx b/filter/source/config/cache/constant.hxx
index 827682e09cd9..244a78864228 100644
--- a/filter/source/config/cache/constant.hxx
+++ b/filter/source/config/cache/constant.hxx
@@ -114,13 +114,14 @@ extern rtl::OUString pFilterStrings[];
#define CFGDIRECTKEY_FORMATVERSION _FILTER_CONFIG_FROM_ASCII_("/org.openoffice.Setup/Product/ooXMLFileFormatVersion" )
#define CFGDIRECTKEY_PRODUCTNAME _FILTER_CONFIG_FROM_ASCII_("/org.openoffice.Setup/Product/ooName" )
-/** @short names of filter flags. */
+/** @short names of filter flags, sorted in alphabetical order */
#define FLAGNAME_3RDPARTYFILTER _FILTER_CONFIG_FROM_ASCII_("3RDPARTYFILTER" )
#define FLAGNAME_ALIEN _FILTER_CONFIG_FROM_ASCII_("ALIEN" )
#define FLAGNAME_ASYNCHRON _FILTER_CONFIG_FROM_ASCII_("ASYNCHRON" )
#define FLAGNAME_BROWSERPREFERRED _FILTER_CONFIG_FROM_ASCII_("BROWSERPREFERRED" )
#define FLAGNAME_CONSULTSERVICE _FILTER_CONFIG_FROM_ASCII_("CONSULTSERVICE" )
#define FLAGNAME_DEFAULT _FILTER_CONFIG_FROM_ASCII_("DEFAULT" )
+#define FLAGNAME_ENCRYPTION _FILTER_CONFIG_FROM_ASCII_("ENCRYPTION" )
#define FLAGNAME_EXPORT _FILTER_CONFIG_FROM_ASCII_("EXPORT" )
#define FLAGNAME_IMPORT _FILTER_CONFIG_FROM_ASCII_("IMPORT" )
#define FLAGNAME_INTERNAL _FILTER_CONFIG_FROM_ASCII_("INTERNAL" )
@@ -129,6 +130,7 @@ extern rtl::OUString pFilterStrings[];
#define FLAGNAME_NOTINSTALLED _FILTER_CONFIG_FROM_ASCII_("NOTINSTALLED" )
#define FLAGNAME_OWN _FILTER_CONFIG_FROM_ASCII_("OWN" )
#define FLAGNAME_PACKED _FILTER_CONFIG_FROM_ASCII_("PACKED" )
+#define FLAGNAME_PASSWORDTOMODIFY _FILTER_CONFIG_FROM_ASCII_("PASSWORDTOMODIFY" )
#define FLAGNAME_PREFERRED _FILTER_CONFIG_FROM_ASCII_("PREFERRED" )
#define FLAGNAME_READONLY _FILTER_CONFIG_FROM_ASCII_("READONLY" )
#define FLAGNAME_SILENTEXPORT _FILTER_CONFIG_FROM_ASCII_("SILENTEXPORT" )
@@ -138,30 +140,32 @@ extern rtl::OUString pFilterStrings[];
#define FLAGNAME_USESOPTIONS _FILTER_CONFIG_FROM_ASCII_("USESOPTIONS" )
#define FLAGNAME_COMBINED _FILTER_CONFIG_FROM_ASCII_("COMBINED" )
-/** @short values of filter flags */
-#define FLAGVAL_3RDPARTYFILTER 0x00080000 // 524288
-#define FLAGVAL_ALIEN 0x00000040 // 64
-#define FLAGVAL_ALL 0xffffffff // 4294967295
-#define FLAGVAL_ASYNCHRON 0x00004000 // 16384
-#define FLAGVAL_BROWSERPREFERRED 0x00400000 // 4194304
-#define FLAGVAL_CONSULTSERVICE 0x00040000 // 262144
-#define FLAGVAL_DEFAULT 0x00000100 // 256
-#define FLAGVAL_EXPORT 0x00000002 // 2
+/** @short values of filter flags, sorted based on value */
#define FLAGVAL_IMPORT 0x00000001 // 1
+#define FLAGVAL_EXPORT 0x00000002 // 2
+#define FLAGVAL_TEMPLATE 0x00000004 // 4
#define FLAGVAL_INTERNAL 0x00000008 // 8
-#define FLAGVAL_NOTINCHOOSER 0x00002000 // 8192
+#define FLAGVAL_TEMPLATEPATH 0x00000010 // 16
+#define FLAGVAL_OWN 0x00000020 // 32
+#define FLAGVAL_ALIEN 0x00000040 // 64
+#define FLAGVAL_USESOPTIONS 0x00000080 // 128
+#define FLAGVAL_DEFAULT 0x00000100 // 256
+#define FLAGVAL_SUPPORTSSELECTION 0x00000400 // 1024
#define FLAGVAL_NOTINFILEDIALOG 0x00001000 // 4096
+#define FLAGVAL_NOTINCHOOSER 0x00002000 // 8192
+#define FLAGVAL_ASYNCHRON 0x00004000 // 16384
+#define FLAGVAL_READONLY 0x00010000 // 65536
#define FLAGVAL_NOTINSTALLED 0x00020000 // 131072
-#define FLAGVAL_OWN 0x00000020 // 32
+#define FLAGVAL_CONSULTSERVICE 0x00040000 // 262144
+#define FLAGVAL_3RDPARTYFILTER 0x00080000 // 524288
#define FLAGVAL_PACKED 0x00100000 // 1048576
-#define FLAGVAL_PREFERRED 0x10000000 // 268435456
-#define FLAGVAL_READONLY 0x00010000 // 65536
#define FLAGVAL_SILENTEXPORT 0x00200000 // 2097152
-#define FLAGVAL_SUPPORTSSELECTION 0x00000400 // 1024
-#define FLAGVAL_TEMPLATE 0x00000004 // 4
-#define FLAGVAL_TEMPLATEPATH 0x00000010 // 16
-#define FLAGVAL_USESOPTIONS 0x00000080 // 128
+#define FLAGVAL_BROWSERPREFERRED 0x00400000 // 4194304
#define FLAGVAL_COMBINED 0x00800000 // 8388608
+#define FLAGVAL_ENCRYPTION 0x01000000 // 16777216
+#define FLAGVAL_PASSWORDTOMODIFY 0x02000000 // 33554432
+#define FLAGVAL_PREFERRED 0x10000000 // 268435456
+#define FLAGVAL_ALL 0xffffffff // 4294967295
/** @short uno service names of our document services
provided by our application modules.
diff --git a/filter/source/config/cache/filtercache.cxx b/filter/source/config/cache/filtercache.cxx
index 43886258abcd..d4435e2182f1 100644
--- a/filter/source/config/cache/filtercache.cxx
+++ b/filter/source/config/cache/filtercache.cxx
@@ -2098,6 +2098,7 @@ css::uno::Sequence< ::rtl::OUString > FilterCache::impl_convertFlagField2FlagNam
if ((nFlags & FLAGVAL_BROWSERPREFERRED ) == FLAGVAL_BROWSERPREFERRED ) lFlagNames.push_back(FLAGNAME_BROWSERPREFERRED );
if ((nFlags & FLAGVAL_CONSULTSERVICE ) == FLAGVAL_CONSULTSERVICE ) lFlagNames.push_back(FLAGNAME_CONSULTSERVICE );
if ((nFlags & FLAGVAL_DEFAULT ) == FLAGVAL_DEFAULT ) lFlagNames.push_back(FLAGNAME_DEFAULT );
+ if ((nFlags & FLAGVAL_ENCRYPTION ) == FLAGVAL_ENCRYPTION ) lFlagNames.push_back(FLAGNAME_ENCRYPTION );
if ((nFlags & FLAGVAL_EXPORT ) == FLAGVAL_EXPORT ) lFlagNames.push_back(FLAGNAME_EXPORT );
if ((nFlags & FLAGVAL_IMPORT ) == FLAGVAL_IMPORT ) lFlagNames.push_back(FLAGNAME_IMPORT );
if ((nFlags & FLAGVAL_INTERNAL ) == FLAGVAL_INTERNAL ) lFlagNames.push_back(FLAGNAME_INTERNAL );
@@ -2106,6 +2107,7 @@ css::uno::Sequence< ::rtl::OUString > FilterCache::impl_convertFlagField2FlagNam
if ((nFlags & FLAGVAL_NOTINSTALLED ) == FLAGVAL_NOTINSTALLED ) lFlagNames.push_back(FLAGNAME_NOTINSTALLED );
if ((nFlags & FLAGVAL_OWN ) == FLAGVAL_OWN ) lFlagNames.push_back(FLAGNAME_OWN );
if ((nFlags & FLAGVAL_PACKED ) == FLAGVAL_PACKED ) lFlagNames.push_back(FLAGNAME_PACKED );
+ if ((nFlags & FLAGVAL_PASSWORDTOMODIFY ) == FLAGVAL_PASSWORDTOMODIFY ) lFlagNames.push_back(FLAGNAME_PASSWORDTOMODIFY );
if ((nFlags & FLAGVAL_PREFERRED ) == FLAGVAL_PREFERRED ) lFlagNames.push_back(FLAGNAME_PREFERRED );
if ((nFlags & FLAGVAL_READONLY ) == FLAGVAL_READONLY ) lFlagNames.push_back(FLAGNAME_READONLY );
if ((nFlags & FLAGVAL_SILENTEXPORT ) == FLAGVAL_SILENTEXPORT ) lFlagNames.push_back(FLAGNAME_SILENTEXPORT );
@@ -2160,6 +2162,11 @@ sal_Int32 FilterCache::impl_convertFlagNames2FlagField(const css::uno::Sequence<
nField |= FLAGVAL_DEFAULT;
continue;
}
+ if (pNames[i].equals(FLAGNAME_ENCRYPTION))
+ {
+ nField |= FLAGVAL_ENCRYPTION;
+ continue;
+ }
if (pNames[i].equals(FLAGNAME_EXPORT))
{
nField |= FLAGVAL_EXPORT;
@@ -2200,6 +2207,11 @@ sal_Int32 FilterCache::impl_convertFlagNames2FlagField(const css::uno::Sequence<
nField |= FLAGVAL_PACKED;
continue;
}
+ if (pNames[i].equals(FLAGNAME_PASSWORDTOMODIFY))
+ {
+ nField |= FLAGVAL_PASSWORDTOMODIFY;
+ continue;
+ }
if (pNames[i].equals(FLAGNAME_PREFERRED))
{
nField |= FLAGVAL_PREFERRED;
diff --git a/filter/source/config/fragments/filters/MS_Excel_97.xcu b/filter/source/config/fragments/filters/MS_Excel_97.xcu
index 26df5966f821..1baa4341d90d 100644
--- a/filter/source/config/fragments/filters/MS_Excel_97.xcu
+++ b/filter/source/config/fragments/filters/MS_Excel_97.xcu
@@ -1,5 +1,5 @@
<node oor:name="MS Excel 97" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN PREFERRED ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"/>
diff --git a/filter/source/config/fragments/filters/MS_Excel_97_Vorlage_Template.xcu b/filter/source/config/fragments/filters/MS_Excel_97_Vorlage_Template.xcu
index 552b4b7b7ed7..42c997f967f9 100644
--- a/filter/source/config/fragments/filters/MS_Excel_97_Vorlage_Template.xcu
+++ b/filter/source/config/fragments/filters/MS_Excel_97_Vorlage_Template.xcu
@@ -1,5 +1,5 @@
<node oor:name="MS Excel 97 Vorlage/Template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN TEMPLATE TEMPLATEPATH</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN TEMPLATE TEMPLATEPATH ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"/>
diff --git a/filter/source/config/fragments/filters/MS_PowerPoint_97.xcu b/filter/source/config/fragments/filters/MS_PowerPoint_97.xcu
index 20c55429e465..7c61f7c14084 100644
--- a/filter/source/config/fragments/filters/MS_PowerPoint_97.xcu
+++ b/filter/source/config/fragments/filters/MS_PowerPoint_97.xcu
@@ -1,5 +1,5 @@
<node oor:name="MS PowerPoint 97" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>sdfilt</value></prop>
diff --git a/filter/source/config/fragments/filters/MS_PowerPoint_97_Vorlage.xcu b/filter/source/config/fragments/filters/MS_PowerPoint_97_Vorlage.xcu
index b0776fda9500..505084d4d39f 100644
--- a/filter/source/config/fragments/filters/MS_PowerPoint_97_Vorlage.xcu
+++ b/filter/source/config/fragments/filters/MS_PowerPoint_97_Vorlage.xcu
@@ -1,5 +1,5 @@
<node oor:name="MS PowerPoint 97 Vorlage" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH ALIEN ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>sdfilt</value></prop>
diff --git a/filter/source/config/fragments/filters/MS_Word_97.xcu b/filter/source/config/fragments/filters/MS_Word_97.xcu
index 3319c07c5c23..c02a895b82f8 100644
--- a/filter/source/config/fragments/filters/MS_Word_97.xcu
+++ b/filter/source/config/fragments/filters/MS_Word_97.xcu
@@ -1,5 +1,5 @@
<node oor:name="MS Word 97" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT ALIEN PREFERRED ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CWW8</value></prop>
diff --git a/filter/source/config/fragments/filters/MS_Word_97_Vorlage.xcu b/filter/source/config/fragments/filters/MS_Word_97_Vorlage.xcu
index 62aee6e4b493..35d694a4832d 100644
--- a/filter/source/config/fragments/filters/MS_Word_97_Vorlage.xcu
+++ b/filter/source/config/fragments/filters/MS_Word_97_Vorlage.xcu
@@ -1,5 +1,5 @@
<node oor:name="MS Word 97 Vorlage" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT TEMPLATE TEMPLATEPATH ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT TEMPLATE TEMPLATEPATH ALIEN ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CWW8</value></prop>
diff --git a/filter/source/config/fragments/filters/MathML_XML__Math_.xcu b/filter/source/config/fragments/filters/MathML_XML__Math_.xcu
index 7c80e41f6030..b6ab09ac89cd 100644
--- a/filter/source/config/fragments/filters/MathML_XML__Math_.xcu
+++ b/filter/source/config/fragments/filters/MathML_XML__Math_.xcu
@@ -1,5 +1,5 @@
<node oor:name="MathML XML (Math)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value></value></prop>
diff --git a/filter/source/config/fragments/filters/StarOffice_XML__Base_.xcu b/filter/source/config/fragments/filters/StarOffice_XML__Base_.xcu
index 34bc14a39a6c..c9bc143ac3d8 100644
--- a/filter/source/config/fragments/filters/StarOffice_XML__Base_.xcu
+++ b/filter/source/config/fragments/filters/StarOffice_XML__Base_.xcu
@@ -1,5 +1,5 @@
<node oor:name="StarOffice XML (Base)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT OWN DEFAULT 3RDPARTYFILTER</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT OWN DEFAULT 3RDPARTYFILTER ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"/>
diff --git a/filter/source/config/fragments/filters/StarOffice_XML__Calc_.xcu b/filter/source/config/fragments/filters/StarOffice_XML__Calc_.xcu
index ad43d312327b..36970e6aadae 100644
--- a/filter/source/config/fragments/filters/StarOffice_XML__Calc_.xcu
+++ b/filter/source/config/fragments/filters/StarOffice_XML__Calc_.xcu
@@ -1,5 +1,5 @@
<node oor:name="StarOffice XML (Calc)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value></value></prop>
diff --git a/filter/source/config/fragments/filters/StarOffice_XML__Chart_.xcu b/filter/source/config/fragments/filters/StarOffice_XML__Chart_.xcu
index ffc5331e8684..b7e05cb17860 100644
--- a/filter/source/config/fragments/filters/StarOffice_XML__Chart_.xcu
+++ b/filter/source/config/fragments/filters/StarOffice_XML__Chart_.xcu
@@ -1,5 +1,5 @@
<node oor:name="StarOffice XML (Chart)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT OWN ALIEN NOTINFILEDIALOG NOTINCHOOSER</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT OWN ALIEN NOTINFILEDIALOG NOTINCHOOSER ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"><value>com.sun.star.comp.chart2.XMLFilter</value></prop>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/StarOffice_XML__Draw_.xcu b/filter/source/config/fragments/filters/StarOffice_XML__Draw_.xcu
index 8ff6e431c970..089cc612d6c6 100644
--- a/filter/source/config/fragments/filters/StarOffice_XML__Draw_.xcu
+++ b/filter/source/config/fragments/filters/StarOffice_XML__Draw_.xcu
@@ -1,5 +1,5 @@
<node oor:name="StarOffice XML (Draw)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/StarOffice_XML__Impress_.xcu b/filter/source/config/fragments/filters/StarOffice_XML__Impress_.xcu
index e77c04c5ea1d..5912555177d1 100644
--- a/filter/source/config/fragments/filters/StarOffice_XML__Impress_.xcu
+++ b/filter/source/config/fragments/filters/StarOffice_XML__Impress_.xcu
@@ -1,5 +1,5 @@
<node oor:name="StarOffice XML (Impress)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/StarOffice_XML__Math_.xcu b/filter/source/config/fragments/filters/StarOffice_XML__Math_.xcu
index 64b73933cf0e..282bff7448ed 100644
--- a/filter/source/config/fragments/filters/StarOffice_XML__Math_.xcu
+++ b/filter/source/config/fragments/filters/StarOffice_XML__Math_.xcu
@@ -1,5 +1,5 @@
<node oor:name="StarOffice XML (Math)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value></value></prop>
diff --git a/filter/source/config/fragments/filters/StarOffice_XML__Writer_.xcu b/filter/source/config/fragments/filters/StarOffice_XML__Writer_.xcu
index d6604a1e872a..c86b1d3deda7 100644
--- a/filter/source/config/fragments/filters/StarOffice_XML__Writer_.xcu
+++ b/filter/source/config/fragments/filters/StarOffice_XML__Writer_.xcu
@@ -1,5 +1,5 @@
<node oor:name="StarOffice XML (Writer)" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/calc8.xcu b/filter/source/config/fragments/filters/calc8.xcu
index 1b1e025f176e..1c77a96ad887 100644
--- a/filter/source/config/fragments/filters/calc8.xcu
+++ b/filter/source/config/fragments/filters/calc8.xcu
@@ -1,5 +1,5 @@
<node oor:name="calc8" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value></value></prop>
diff --git a/filter/source/config/fragments/filters/calc8_template.xcu b/filter/source/config/fragments/filters/calc8_template.xcu
index f471287cc3d7..5b5c1d5c3d56 100644
--- a/filter/source/config/fragments/filters/calc8_template.xcu
+++ b/filter/source/config/fragments/filters/calc8_template.xcu
@@ -1,5 +1,5 @@
<node oor:name="calc8_template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value></value></prop>
diff --git a/filter/source/config/fragments/filters/calc_StarOffice_XML_Calc_Template.xcu b/filter/source/config/fragments/filters/calc_StarOffice_XML_Calc_Template.xcu
index 913cb231fb21..56e132620108 100644
--- a/filter/source/config/fragments/filters/calc_StarOffice_XML_Calc_Template.xcu
+++ b/filter/source/config/fragments/filters/calc_StarOffice_XML_Calc_Template.xcu
@@ -1,5 +1,5 @@
<node oor:name="calc_StarOffice_XML_Calc_Template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value></value></prop>
diff --git a/filter/source/config/fragments/filters/chart8.xcu b/filter/source/config/fragments/filters/chart8.xcu
index ed36251542c1..c3700acfeb65 100644
--- a/filter/source/config/fragments/filters/chart8.xcu
+++ b/filter/source/config/fragments/filters/chart8.xcu
@@ -1,5 +1,5 @@
<node oor:name="chart8" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT OWN DEFAULT NOTINFILEDIALOG NOTINCHOOSER</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT OWN DEFAULT NOTINFILEDIALOG NOTINCHOOSER ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"><value>com.sun.star.comp.chart2.XMLFilter</value></prop>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/draw8.xcu b/filter/source/config/fragments/filters/draw8.xcu
index 733619f798b8..6a1df34e4af3 100644
--- a/filter/source/config/fragments/filters/draw8.xcu
+++ b/filter/source/config/fragments/filters/draw8.xcu
@@ -1,5 +1,5 @@
<node oor:name="draw8" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT PREFERRED ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/draw8_template.xcu b/filter/source/config/fragments/filters/draw8_template.xcu
index b98082ffec29..3f42e65f5853 100644
--- a/filter/source/config/fragments/filters/draw8_template.xcu
+++ b/filter/source/config/fragments/filters/draw8_template.xcu
@@ -1,5 +1,5 @@
<node oor:name="draw8_template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLV</value></prop>
diff --git a/filter/source/config/fragments/filters/draw_StarOffice_XML_Draw_Template.xcu b/filter/source/config/fragments/filters/draw_StarOffice_XML_Draw_Template.xcu
index 447b7e976f81..55f1f96a922f 100644
--- a/filter/source/config/fragments/filters/draw_StarOffice_XML_Draw_Template.xcu
+++ b/filter/source/config/fragments/filters/draw_StarOffice_XML_Draw_Template.xcu
@@ -1,5 +1,5 @@
<node oor:name="draw_StarOffice_XML_Draw_Template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLV</value></prop>
diff --git a/filter/source/config/fragments/filters/impress8.xcu b/filter/source/config/fragments/filters/impress8.xcu
index 04c70d9d2ceb..099bce62d3c5 100644
--- a/filter/source/config/fragments/filters/impress8.xcu
+++ b/filter/source/config/fragments/filters/impress8.xcu
@@ -1,5 +1,5 @@
<node oor:name="impress8" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT PREFERRED ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/impress8_draw.xcu b/filter/source/config/fragments/filters/impress8_draw.xcu
index f88bc1bb9c61..5781c2a3e709 100644
--- a/filter/source/config/fragments/filters/impress8_draw.xcu
+++ b/filter/source/config/fragments/filters/impress8_draw.xcu
@@ -1,5 +1,5 @@
<node oor:name="impress8_draw" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/impress8_template.xcu b/filter/source/config/fragments/filters/impress8_template.xcu
index 3089f09cd037..891f8f86b0c4 100644
--- a/filter/source/config/fragments/filters/impress8_template.xcu
+++ b/filter/source/config/fragments/filters/impress8_template.xcu
@@ -1,5 +1,5 @@
<node oor:name="impress8_template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLV</value></prop>
diff --git a/filter/source/config/fragments/filters/impress_StarOffice_XML_Draw.xcu b/filter/source/config/fragments/filters/impress_StarOffice_XML_Draw.xcu
index 284a4a9dbf74..225843c661b7 100644
--- a/filter/source/config/fragments/filters/impress_StarOffice_XML_Draw.xcu
+++ b/filter/source/config/fragments/filters/impress_StarOffice_XML_Draw.xcu
@@ -1,5 +1,5 @@
<node oor:name="impress_StarOffice_XML_Draw" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>XML</value></prop>
diff --git a/filter/source/config/fragments/filters/impress_StarOffice_XML_Impress_Template.xcu b/filter/source/config/fragments/filters/impress_StarOffice_XML_Impress_Template.xcu
index 090c096cdb42..472dcf16130a 100644
--- a/filter/source/config/fragments/filters/impress_StarOffice_XML_Impress_Template.xcu
+++ b/filter/source/config/fragments/filters/impress_StarOffice_XML_Impress_Template.xcu
@@ -1,5 +1,5 @@
<node oor:name="impress_StarOffice_XML_Impress_Template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLV</value></prop>
diff --git a/filter/source/config/fragments/filters/math8.xcu b/filter/source/config/fragments/filters/math8.xcu
index 65ab9b04e568..94c86a96cf83 100644
--- a/filter/source/config/fragments/filters/math8.xcu
+++ b/filter/source/config/fragments/filters/math8.xcu
@@ -1,5 +1,5 @@
<node oor:name="math8" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value></value></prop>
diff --git a/filter/source/config/fragments/filters/writer8.xcu b/filter/source/config/fragments/filters/writer8.xcu
index 8d0ed46fd7ea..bcfd55640e79 100644
--- a/filter/source/config/fragments/filters/writer8.xcu
+++ b/filter/source/config/fragments/filters/writer8.xcu
@@ -1,5 +1,5 @@
<node oor:name="writer8" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN DEFAULT PREFERRED ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/writer8_template.xcu b/filter/source/config/fragments/filters/writer8_template.xcu
index 0b8c827498ab..34ee8055113c 100644
--- a/filter/source/config/fragments/filters/writer8_template.xcu
+++ b/filter/source/config/fragments/filters/writer8_template.xcu
@@ -1,5 +1,5 @@
<node oor:name="writer8_template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLV</value></prop>
diff --git a/filter/source/config/fragments/filters/writer_StarOffice_XML_Writer_Template.xcu b/filter/source/config/fragments/filters/writer_StarOffice_XML_Writer_Template.xcu
index 3f5a9f1e0b4a..9c54cf04e06b 100644
--- a/filter/source/config/fragments/filters/writer_StarOffice_XML_Writer_Template.xcu
+++ b/filter/source/config/fragments/filters/writer_StarOffice_XML_Writer_Template.xcu
@@ -1,5 +1,5 @@
<node oor:name="writer_StarOffice_XML_Writer_Template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLV</value></prop>
diff --git a/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer.xcu b/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer.xcu
index a68d2408ceaf..b1210080e631 100644
--- a/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer.xcu
+++ b/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer.xcu
@@ -1,5 +1,5 @@
<node oor:name="writer_globaldocument_StarOffice_XML_Writer" oor:op="replace">
- <prop oor:name="Flags"><value>EXPORT TEMPLATE ALIEN</value></prop>
+ <prop oor:name="Flags"><value>EXPORT TEMPLATE ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument.xcu b/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument.xcu
index 4d842afb8b8f..2dfb7fe0d21e 100644
--- a/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument.xcu
+++ b/filter/source/config/fragments/filters/writer_globaldocument_StarOffice_XML_Writer_GlobalDocument.xcu
@@ -1,5 +1,5 @@
<node oor:name="writer_globaldocument_StarOffice_XML_Writer_GlobalDocument" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN ALIEN PREFERRED ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer.xcu b/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer.xcu
index db05aeb0224a..8e217e6d79a8 100644
--- a/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer.xcu
+++ b/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer.xcu
@@ -1,5 +1,5 @@
<node oor:name="writer_web_StarOffice_XML_Writer" oor:op="replace">
- <prop oor:name="Flags"><value>EXPORT TEMPLATE ALIEN</value></prop>
+ <prop oor:name="Flags"><value>EXPORT TEMPLATE ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_Web_Template.xcu b/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_Web_Template.xcu
index b6d40705a892..64b3b8cdfe81 100644
--- a/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_Web_Template.xcu
+++ b/filter/source/config/fragments/filters/writer_web_StarOffice_XML_Writer_Web_Template.xcu
@@ -1,5 +1,5 @@
<node oor:name="writer_web_StarOffice_XML_Writer_Web_Template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ALIEN ENCRYPTION</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLVWEB</value></prop>
diff --git a/filter/source/config/fragments/filters/writerglobal8.xcu b/filter/source/config/fragments/filters/writerglobal8.xcu
index 02ee992f975c..df5fcb7e6d1b 100644
--- a/filter/source/config/fragments/filters/writerglobal8.xcu
+++ b/filter/source/config/fragments/filters/writerglobal8.xcu
@@ -1,5 +1,5 @@
<node oor:name="writerglobal8" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN PREFERRED</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE OWN PREFERRED ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/writerglobal8_writer.xcu b/filter/source/config/fragments/filters/writerglobal8_writer.xcu
index f61bbeeea958..ca3794de493b 100644
--- a/filter/source/config/fragments/filters/writerglobal8_writer.xcu
+++ b/filter/source/config/fragments/filters/writerglobal8_writer.xcu
@@ -1,5 +1,5 @@
<node oor:name="writerglobal8_writer" oor:op="replace">
- <prop oor:name="Flags"><value>EXPORT TEMPLATE DEFAULT</value></prop>
+ <prop oor:name="Flags"><value>EXPORT TEMPLATE DEFAULT ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/writerweb8_writer.xcu b/filter/source/config/fragments/filters/writerweb8_writer.xcu
index 7b9096fa8a60..a3fbc783e92a 100644
--- a/filter/source/config/fragments/filters/writerweb8_writer.xcu
+++ b/filter/source/config/fragments/filters/writerweb8_writer.xcu
@@ -1,5 +1,5 @@
<node oor:name="writerweb8_writer" oor:op="replace">
- <prop oor:name="Flags"><value>EXPORT TEMPLATE</value></prop>
+ <prop oor:name="Flags"><value>EXPORT TEMPLATE ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXML</value></prop>
diff --git a/filter/source/config/fragments/filters/writerweb8_writer_template.xcu b/filter/source/config/fragments/filters/writerweb8_writer_template.xcu
index 9834200c5117..eb383eafaeeb 100644
--- a/filter/source/config/fragments/filters/writerweb8_writer_template.xcu
+++ b/filter/source/config/fragments/filters/writerweb8_writer_template.xcu
@@ -1,5 +1,5 @@
<node oor:name="writerweb8_writer_template" oor:op="replace">
- <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN</value></prop>
+ <prop oor:name="Flags"><value>IMPORT EXPORT TEMPLATE TEMPLATEPATH OWN ENCRYPTION PASSWORDTOMODIFY</value></prop>
<prop oor:name="UIComponent"/>
<prop oor:name="FilterService"/>
<prop oor:name="UserData"><value>CXMLVWEB</value></prop>
diff --git a/filter/source/msfilter/msvbahelper.cxx b/filter/source/msfilter/msvbahelper.cxx
index 97529c22eae6..18ecc5ae6530 100644
--- a/filter/source/msfilter/msvbahelper.cxx
+++ b/filter/source/msfilter/msvbahelper.cxx
@@ -41,16 +41,27 @@
using namespace ::com::sun::star;
+namespace ooo { namespace vba {
+
const static rtl::OUString sUrlPart0 = rtl::OUString::createFromAscii( "vnd.sun.star.script:");
const static rtl::OUString sUrlPart1 = rtl::OUString::createFromAscii( "?language=Basic&location=document");
-namespace ooo { namespace vba {
-
String makeMacroURL( const String& sMacroName )
{
return sUrlPart0.concat( sMacroName ).concat( sUrlPart1 ) ;
}
+::rtl::OUString extractMacroName( const ::rtl::OUString& rMacroUrl )
+{
+ if( (rMacroUrl.getLength() > sUrlPart0.getLength() + sUrlPart1.getLength()) &&
+ rMacroUrl.match( sUrlPart0 ) &&
+ rMacroUrl.match( sUrlPart1, rMacroUrl.getLength() - sUrlPart1.getLength() ) )
+ {
+ return rMacroUrl.copy( sUrlPart0.getLength(), rMacroUrl.getLength() - sUrlPart0.getLength() - sUrlPart1.getLength() );
+ }
+ return ::rtl::OUString();
+}
+
SfxObjectShell* findShellForUrl( const rtl::OUString& sMacroURLOrPath )
{
SfxObjectShell* pFoundShell=NULL;
@@ -186,9 +197,15 @@ VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUStrin
if ( !pShell )
return aRes;
aRes.SetMacroDocContext( pShell );
+
+ // the name may be enclosed in apostrophs
+ ::rtl::OUString sMacroUrl = MacroName;
+ sal_Int32 nMacroLen = MacroName.getLength();
+ if( (nMacroLen >= 2) && (MacroName[0] == '\'') && (MacroName[nMacroLen-1] == '\'') )
+ sMacroUrl = MacroName.copy( 1, nMacroLen - 2 );
+
// parse the macro name
- sal_Int32 nDocSepIndex = MacroName.indexOfAsciiL( "!", 1 );
- String sMacroUrl = MacroName;
+ sal_Int32 nDocSepIndex = sMacroUrl.indexOf( '!' );
String sContainer;
String sModule;
@@ -201,8 +218,8 @@ VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUStrin
// recursively
// assume for now that the document name is *this* document
- String sDocUrlOrPath = MacroName.copy( 0, nDocSepIndex );
- sMacroUrl = MacroName.copy( nDocSepIndex + 1 );
+ String sDocUrlOrPath = sMacroUrl.copy( 0, nDocSepIndex );
+ sMacroUrl = sMacroUrl.copy( nDocSepIndex + 1 );
OSL_TRACE("doc search, current shell is 0x%x", pShell );
SfxObjectShell* pFoundShell = findShellForUrl( sDocUrlOrPath );
OSL_TRACE("doc search, after find, found shell is 0x%x", pFoundShell );
@@ -215,7 +232,7 @@ VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUStrin
// document is created from )
// macro format = Container.Module.Procedure
- parseMacro( MacroName, sContainer, sModule, sProcedure );
+ parseMacro( sMacroUrl, sContainer, sModule, sProcedure );
uno::Reference< lang::XMultiServiceFactory> xSF( pShell->GetModel(), uno::UNO_QUERY);
uno::Reference< container::XNameContainer > xPrjNameCache;
if ( xSF.is() )
diff --git a/filter/source/msfilter/msvbasic.cxx b/filter/source/msfilter/msvbasic.cxx
index be8ee6bd30e5..65d39953ec20 100644
--- a/filter/source/msfilter/msvbasic.cxx
+++ b/filter/source/msfilter/msvbasic.cxx
@@ -170,75 +170,36 @@ int VBA_Impl::ReadVBAProject(const SvStorageRef &rxVBAStorage)
return 0;
}
- static const sal_uInt8 aOffice2003LE_2[] =
- {
- 0x79, 0x00, 0x00, 0x01, 0x00, 0xFF
- };
-
- static const sal_uInt8 aOffice2003LE[] =
- {
- 0x76, 0x00, 0x00, 0x01, 0x00, 0xFF
- };
-
- static const sal_uInt8 aOfficeXPLE[] =
- {
- 0x73, 0x00, 0x00, 0x01, 0x00, 0xFF
- };
-
- static const sal_uInt8 aOfficeXPBE[] =
- {
- 0x63, 0x00, 0x00, 0x0E, 0x00, 0xFF
- };
+ static const sal_uInt8 aOffice2007LE[] = { 0x88, 0x00, 0x00, 0x01, 0x00, 0xFF };
+ static const sal_uInt8 aOffice2003LE_2[] = { 0x79, 0x00, 0x00, 0x01, 0x00, 0xFF };
+ static const sal_uInt8 aOffice2003LE[] = { 0x76, 0x00, 0x00, 0x01, 0x00, 0xFF };
+ static const sal_uInt8 aOfficeXPLE[] = { 0x73, 0x00, 0x00, 0x01, 0x00, 0xFF };
+ static const sal_uInt8 aOfficeXPBE[] = { 0x63, 0x00, 0x00, 0x0E, 0x00, 0xFF };
+ static const sal_uInt8 aOffice2000LE[] = { 0x6D, 0x00, 0x00, 0x01, 0x00, 0xFF };
+ static const sal_uInt8 aOffice98BE[] = { 0x60, 0x00, 0x00, 0x0E, 0x00, 0xFF };
+ static const sal_uInt8 aOffice97LE[] = { 0x5E, 0x00, 0x00, 0x01, 0x00, 0xFF };
- static const sal_uInt8 aOffice2000LE[] =
- {
- 0x6D, 0x00, 0x00, 0x01, 0x00, 0xFF
- };
- static const sal_uInt8 aOffice98BE[] =
- {
- 0x60, 0x00, 0x00, 0x0E, 0x00, 0xFF
- };
- static const sal_uInt8 aOffice97LE[] =
- {
- 0x5E, 0x00, 0x00, 0x01, 0x00, 0xFF
- };
sal_uInt8 aProduct[6];
xVBAProject->Read( aProduct, sizeof(aProduct) );
bool bIsUnicode;
- if (!(memcmp(aProduct, aOffice2003LE, sizeof(aProduct))) ||
- !(memcmp(aProduct, aOffice2003LE_2, sizeof(aProduct))) )
- {
- xVBAProject->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN );
- bIsUnicode = true;
- }
- else if (!(memcmp(aProduct, aOfficeXPLE, sizeof(aProduct))))
+ if (!(memcmp(aProduct, aOffice2007LE, sizeof(aProduct))) ||
+ !(memcmp(aProduct, aOffice2003LE, sizeof(aProduct))) ||
+ !(memcmp(aProduct, aOffice2003LE_2, sizeof(aProduct))) ||
+ !(memcmp(aProduct, aOfficeXPLE, sizeof(aProduct))) ||
+ !(memcmp(aProduct, aOffice2000LE, sizeof(aProduct))) ||
+ !(memcmp(aProduct, aOffice97LE, sizeof(aProduct))) )
{
xVBAProject->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN );
bIsUnicode = true;
}
- else if (!(memcmp(aProduct, aOfficeXPBE, sizeof(aProduct))))
+ else if (!(memcmp(aProduct, aOfficeXPBE, sizeof(aProduct))) ||
+ !(memcmp(aProduct, aOffice98BE, sizeof(aProduct))) )
{
xVBAProject->SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN );
mbMac = true;
bIsUnicode = false;
}
- else if (!(memcmp(aProduct, aOffice2000LE, sizeof(aProduct))))
- {
- xVBAProject->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN );
- bIsUnicode = true;
- }
- else if (!(memcmp(aProduct, aOffice98BE, sizeof(aProduct))))
- {
- xVBAProject->SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN );
- mbMac = true;
- bIsUnicode = false;
- }
- else if (!(memcmp(aProduct, aOffice97LE, sizeof(aProduct))))
- {
- xVBAProject->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN );
- bIsUnicode = true;
- }
else
{
switch (aProduct[3])
diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx
index 73868d3a9f55..747306f81677 100644
--- a/filter/source/msfilter/svdfppt.cxx
+++ b/filter/source/msfilter/svdfppt.cxx
@@ -5380,7 +5380,7 @@ void PPTStyleTextPropReader::Init( SvStream& rIn, SdrPowerPointImport& rMan, con
if ( nInstance == TSS_TYPE_PAGETITLE )
*pPtr = 0xb;
else
- aSpecMarkerList.Insert( (void*)( pPtr - pBuf | PPT_SPEC_NEWLINE ), LIST_APPEND );
+ aSpecMarkerList.Insert( (void*)( (pPtr - pBuf) | PPT_SPEC_NEWLINE ), LIST_APPEND );
}
pPtr++;
}
diff --git a/filter/source/msfilter/svxmsbas.cxx b/filter/source/msfilter/svxmsbas.cxx
index 55465850d8c8..49fd4a7544f3 100644
--- a/filter/source/msfilter/svxmsbas.cxx
+++ b/filter/source/msfilter/svxmsbas.cxx
@@ -360,10 +360,9 @@ BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
static ::rtl::OUString sClassOption( RTL_CONSTASCII_USTRINGPARAM( "Option ClassModule\n" ) );
if ( !bAsComment )
{
- modeTypeComment = modeTypeComment + sVBAOption;
+ modeTypeComment += sVBAOption;
if ( mType == ModuleType::CLASS )
- modeTypeComment = modeTypeComment + sClassOption;
-
+ modeTypeComment += sClassOption;
}
String sModule(sBasicModule); //#i52606# no need to split Macros in 64KB blocks any more!
diff --git a/filter/source/xslt/export/spreadsheetml/formular.xsl b/filter/source/xslt/export/spreadsheetml/formular.xsl
index 3acb4f393c42..8134412ec8d9 100644
--- a/filter/source/xslt/export/spreadsheetml/formular.xsl
+++ b/filter/source/xslt/export/spreadsheetml/formular.xsl
@@ -377,7 +377,7 @@
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$earlierCandidate" />
- <xsl:variable name="parameterCandidate">
+ <xsl:variable name="parameterCandidate2">
<xsl:variable name="formularAfterCandidate" select="substring-after($expressionSuffix, $earlierCandidate)" />
<xsl:variable name="parameterTillBracket" select="concat(substring-before($formularAfterCandidate,')'),')')" />
<xsl:variable name="parameterTillComma" select="substring-before(substring-after($expressionSuffix, $parameterTillBracket),',')" />
@@ -401,8 +401,8 @@
<xsl:call-template name="getParameter">
<xsl:with-param name="closingBracketCount" select="$closingBracketCount" />
<xsl:with-param name="openingBracketCount" select="$openingBracketCount" />
- <xsl:with-param name="parameterCandidate" select="$parameterCandidate" />
- <xsl:with-param name="earlierCandidate" select="$parameterCandidate" />
+ <xsl:with-param name="parameterCandidate" select="$parameterCandidate2" />
+ <xsl:with-param name="earlierCandidate" select="$parameterCandidate2" />
<xsl:with-param name="expressionSuffix" select="$expressionSuffix" />
</xsl:call-template>
</xsl:otherwise>
diff --git a/filter/source/xslt/export/spreadsheetml/ooo2spreadsheetml.xsl b/filter/source/xslt/export/spreadsheetml/ooo2spreadsheetml.xsl
index 027f732d2f2a..420d06474a3a 100644
--- a/filter/source/xslt/export/spreadsheetml/ooo2spreadsheetml.xsl
+++ b/filter/source/xslt/export/spreadsheetml/ooo2spreadsheetml.xsl
@@ -141,6 +141,17 @@
<RGB><xsl:value-of select="." /></RGB>
</Color>
</xsl:for-each>
+ <xsl:for-each select="key('config', 'TabColor')[not(.=preceding::config:config-item)]">
+ <xsl:sort select="." />
+ <Color>
+ <Index><xsl:value-of select="56 - position()" /></Index>
+ <RGB>
+ <xsl:call-template name="colordecimal2rgb">
+ <xsl:with-param name="colordecimal" select="."/>
+ </xsl:call-template>
+ </RGB>
+ </Color>
+ </xsl:for-each>
</Colors>
</OfficeDocumentSettings>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
@@ -171,6 +182,160 @@
</Workbook>
</xsl:template>
+ <xsl:template name="colordecimal2rgb">
+ <xsl:param name="colordecimal"/>
+ <xsl:choose>
+ <xsl:when test="$colordecimal &lt;= 16777215 and $colordecimal &gt;= 65536">
+ <xsl:variable name="redValue" select="floor(($colordecimal) div 65536)"/>
+ <xsl:variable name="greenValue" select="floor(($colordecimal - ($redValue*65536)) div 256)"/>
+ <xsl:variable name="blueValue" select="$colordecimal - ($redValue*65536) - ($greenValue*256)"/>
+ <xsl:call-template name="dec_rgb2Hex">
+ <xsl:with-param name="decRedValue" select="$redValue"/>
+ <xsl:with-param name="decGreenValue" select="$greenValue"/>
+ <xsl:with-param name="decBlueValue" select="$blueValue"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$colordecimal &lt;= 65535 and $colordecimal &gt;= 256">
+ <xsl:variable name="redValue" select="0"/>
+ <xsl:variable name="greenValue" select="$colordecimal div 256"/>
+ <xsl:variable name="blueValue" select="$colordecimal - ($greenValue*256)"/>
+ <xsl:call-template name="dec_rgb2Hex">
+ <xsl:with-param name="decRedValue" select="$redValue"/>
+ <xsl:with-param name="decGreenValue" select="$greenValue"/>
+ <xsl:with-param name="decBlueValue" select="$blueValue"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$colordecimal &lt;= 255 and $colordecimal &gt;= 0">
+ <xsl:variable name="redValue" select="0"/>
+ <xsl:variable name="greenValue" select="0"/>
+ <xsl:variable name="blueValue" select="$colordecimal"/>
+ <xsl:call-template name="dec_rgb2Hex">
+ <xsl:with-param name="decRedValue" select="$redValue"/>
+ <xsl:with-param name="decGreenValue" select="$greenValue"/>
+ <xsl:with-param name="decBlueValue" select="$blueValue"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="dec_rgb2Hex">
+ <xsl:param name="decRedValue"/>
+ <xsl:param name="decGreenValue"/>
+ <xsl:param name="decBlueValue"/>
+ <xsl:variable name="hexRedValue">
+ <xsl:variable name="tmpHexRedValue">
+ <xsl:call-template name="decimal2hex">
+ <xsl:with-param name="dec-number" select="$decRedValue"/>
+ <xsl:with-param name="last-value" select="'H'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($tmpHexRedValue) = 1">
+ <xsl:value-of select="concat('0',$tmpHexRedValue)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tmpHexRedValue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="hexGreenValue">
+ <xsl:variable name="tmpHexGreenValue">
+ <xsl:call-template name="decimal2hex">
+ <xsl:with-param name="dec-number" select="$decGreenValue"/>
+ <xsl:with-param name="last-value" select="'H'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($tmpHexGreenValue) = 1">
+ <xsl:value-of select="concat('0',$tmpHexGreenValue)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tmpHexGreenValue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="hexBlueValue">
+ <xsl:variable name="tmpHexBlueValue">
+ <xsl:call-template name="decimal2hex">
+ <xsl:with-param name="dec-number" select="$decBlueValue"/>
+ <xsl:with-param name="last-value" select="'H'"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($tmpHexBlueValue) = 1">
+ <xsl:value-of select="concat('0',$tmpHexBlueValue)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tmpHexBlueValue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="concat('#',$hexRedValue,$hexGreenValue,$hexBlueValue)"/>
+ </xsl:template>
+ <xsl:template name="decimal2hex">
+ <!-- transforms a decimal number to a hex number,only for two-bit hex(less than 256 in decimal) currently -->
+ <xsl:param name="dec-number"/>
+ <xsl:param name="last-value"/>
+ <xsl:variable name="current-value">
+ <xsl:call-template name="decNumber2hex">
+ <xsl:with-param name="dec-value">
+ <xsl:if test="$dec-number &gt; 15">
+ <xsl:value-of select="floor($dec-number div 16)"/>
+ </xsl:if>
+ <xsl:if test="$dec-number &lt; 16">
+ <xsl:value-of select="$dec-number"/>
+ </xsl:if>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$dec-number &gt; 15">
+ <xsl:call-template name="decimal2hex">
+ <xsl:with-param name="dec-number" select="$dec-number mod 16"/>
+ <xsl:with-param name="last-value" select="concat($last-value,$current-value)"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="$dec-number &lt; 16">
+ <xsl:value-of select="substring-after(concat($last-value,$current-value),'H')"/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="decNumber2hex">
+ <!-- return a hex number for a decimal character -->
+ <xsl:param name="dec-value"/>
+ <xsl:choose>
+ <xsl:when test="$dec-value = 10">
+ <xsl:value-of select="'A'"/>
+ </xsl:when>
+ <xsl:when test="$dec-value = 11">
+ <xsl:value-of select="'B'"/>
+ </xsl:when>
+ <xsl:when test="$dec-value = 12">
+ <xsl:value-of select="'C'"/>
+ </xsl:when>
+ <xsl:when test="$dec-value = 13">
+ <xsl:value-of select="'D'"/>
+ </xsl:when>
+ <xsl:when test="$dec-value = 14">
+ <xsl:value-of select="'E'"/>
+ </xsl:when>
+ <xsl:when test="$dec-value = 15">
+ <xsl:value-of select="'F'"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$dec-value"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="GetTabColorIndex">
+ <xsl:param name="SheetColor"/>
+ <xsl:for-each select="key('config', 'TabColor')[not(.=preceding::config:config-item)]">
+ <xsl:sort select="." />
+ <xsl:variable name="tmpColor" select="."/>
+ <xsl:if test=". = $SheetColor" >
+ <xsl:value-of select="56 - position()"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
<xsl:template match="office:body">
<!-- office:body table:table children are spreadsheets -->
<xsl:apply-templates />
@@ -183,8 +348,11 @@
<!-- office:body table:table children are spreadsheets -->
<xsl:template match="office:spreadsheet/table:table">
<xsl:element name="ss:Worksheet">
- <xsl:attribute name="ss:Name">
+ <xsl:variable name="TableName">
<xsl:value-of select="@table:name" />
+ </xsl:variable>
+ <xsl:attribute name="ss:Name">
+ <xsl:value-of select="$TableName" />
</xsl:attribute>
<xsl:call-template name="table:table" />
<xsl:element name="x:WorksheetOptions">
@@ -200,6 +368,16 @@
<xsl:if test="key('config', 'ShowZeroValues') = 'false'">
<xsl:element name="x:DoNotDisplayZeros" />
</xsl:if>
+ <xsl:if test="/*/office:settings/config:config-item-set/config:config-item-map-indexed/config:config-item-map-entry/config:config-item-map-named/config:config-item-map-entry[@config:name=$TableName]/config:config-item[@config:name='TabColor']">
+ <xsl:element name="x:TabColorIndex">
+ <xsl:variable name="TabColorIndex">
+ <xsl:call-template name="GetTabColorIndex">
+ <xsl:with-param name="SheetColor" select="/*/office:settings/config:config-item-set/config:config-item-map-indexed/config:config-item-map-entry/config:config-item-map-named/config:config-item-map-entry[@config:name=$TableName]/config:config-item[@config:name='TabColor']"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$TabColorIndex"/>
+ </xsl:element>
+ </xsl:if>
</xsl:element>
</xsl:element>
</xsl:template>
diff --git a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
index 64ac1302b744..71f1baa492d0 100644
--- a/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
+++ b/filter/source/xslt/import/spreadsheetml/spreadsheetml2ooo.xsl
@@ -381,6 +381,16 @@
</xsl:otherwise>
</xsl:choose>
<xsl:copy-of select="$sharedConfiguration"/>
+ <xsl:if test="x:WorksheetOptions/x:TabColorIndex">
+ <config:config-item config:name="TabColor" config:type="int">
+ <xsl:variable name="temp-value">
+ <xsl:call-template name="colorindex2decimal">
+ <xsl:with-param name="colorindex" select="x:WorksheetOptions/x:TabColorIndex"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of select="$temp-value"/>
+ </config:config-item>
+ </xsl:if>
</config:config-item-map-entry>
</xsl:for-each>
</config:config-item-map-named>
@@ -4637,6 +4647,211 @@
</xsl:variable>
<xsl:value-of select="concat('#',$R-value,$G-value,$B-value)"/>
</xsl:template>
+ <xsl:template name="colorindex2decimal">
+ <xsl:param name="colorindex"/>
+ <xsl:variable name="colorIndexLookup">
+ <xsl:value-of select="$colorindex - 8"/>
+ </xsl:variable>
+ <xsl:variable name="tempColorValue">
+ <xsl:choose>
+ <!-- Grab the color from the custom color index if it exists... -->
+ <xsl:when test="/ss:Workbook/o:OfficeDocumentSettings/o:Colors/o:Color/o:Index=$colorIndexLookup">
+ <xsl:value-of select="substring-after(normalize-space(/ss:Workbook/o:OfficeDocumentSettings/o:Colors/o:Color/o:RGB[/ss:Workbook/o:OfficeDocumentSettings/o:Colors/o:Color/o:Index=$colorIndexLookup]), '#')"/>
+ </xsl:when >
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$colorindex=8">
+ <xsl:value-of select="'000000'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=9">
+ <xsl:value-of select="'FFFFFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=10">
+ <xsl:value-of select="'FF0000'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=11">
+ <xsl:value-of select="'00FF00'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=12">
+ <xsl:value-of select="'0000FF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=13">
+ <xsl:value-of select="'FFFF00'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=14">
+ <xsl:value-of select="'FF00FF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=15">
+ <xsl:value-of select="'00FFFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=16">
+ <xsl:value-of select="'800000'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=17">
+ <xsl:value-of select="'008000'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=18">
+ <xsl:value-of select="'000080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=19">
+ <xsl:value-of select="'808000'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=20">
+ <xsl:value-of select="'800080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=21">
+ <xsl:value-of select="'008080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=22">
+ <xsl:value-of select="'C0C0C0'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=23">
+ <xsl:value-of select="'808080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=24">
+ <xsl:value-of select="'9999FF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=25">
+ <xsl:value-of select="'993366'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=26">
+ <xsl:value-of select="'FFFFCC'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=27">
+ <xsl:value-of select="'CCFFFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=28">
+ <xsl:value-of select="'660066'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=29">
+ <xsl:value-of select="'FF8080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=30">
+ <xsl:value-of select="'0066CC'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=31">
+ <xsl:value-of select="'CCCCFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=32">
+ <xsl:value-of select="'000080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=33">
+ <xsl:value-of select="'FF00FF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=34">
+ <xsl:value-of select="'FFFF00'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=35">
+ <xsl:value-of select="'00FFFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=36">
+ <xsl:value-of select="'800080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=37">
+ <xsl:value-of select="'800000'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=38">
+ <xsl:value-of select="'008080'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=39">
+ <xsl:value-of select="'0000FF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=40">
+ <xsl:value-of select="'00CCFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=41">
+ <xsl:value-of select="'CCFFFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=42">
+ <xsl:value-of select="'CCFFCC'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=43">
+ <xsl:value-of select="'FFFF99'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=44">
+ <xsl:value-of select="'99CCFF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=45">
+ <xsl:value-of select="'FF99CC'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=46">
+ <xsl:value-of select="'CC99FF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=47">
+ <xsl:value-of select="'FFCC99'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=48">
+ <xsl:value-of select="'3366FF'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=49">
+ <xsl:value-of select="'33CCCC'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=50">
+ <xsl:value-of select="'99CC00'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=51">
+ <xsl:value-of select="'FFCC00'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=52">
+ <xsl:value-of select="'FF9900'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=53">
+ <xsl:value-of select="'FF6600'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=54">
+ <xsl:value-of select="'666699'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=55">
+ <xsl:value-of select="'969696'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=56">
+ <xsl:value-of select="'003366'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=57">
+ <xsl:value-of select="'339966'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=58">
+ <xsl:value-of select="'003300'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=59">
+ <xsl:value-of select="'333300'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=60">
+ <xsl:value-of select="'993300'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=61">
+ <xsl:value-of select="'993366'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=62">
+ <xsl:value-of select="'333399'"/>
+ </xsl:when>
+ <xsl:when test="$colorindex=63">
+ <xsl:value-of select="'333333'"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="'NOTFOUND'"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="tempColorDecimal">
+ <xsl:choose>
+ <xsl:when test="not($tempColorValue = 'NOTFOUND')">
+ <xsl:call-template name="hex2decimal">
+ <xsl:with-param name="hex-number" select="$tempColorValue"/>
+ <xsl:with-param name="index" select="1"/>
+ <xsl:with-param name="str-length" select="6"/>
+ <xsl:with-param name="last-value" select="0"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="4294967295"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$tempColorDecimal"/>
+ </xsl:template>
<xsl:template name="hex2decimal">
<!-- transforms a hex number to a decimal number.parses the string from left to right -->
<xsl:param name="hex-number"/>
diff --git a/filter/source/xsltfilter/makefile.mk b/filter/source/xsltfilter/makefile.mk
index 1a20572d1698..a5e27135e17a 100644
--- a/filter/source/xsltfilter/makefile.mk
+++ b/filter/source/xsltfilter/makefile.mk
@@ -66,7 +66,7 @@ JARCLASSDIRS = XSLTransformer*.class XSLTFilterOLEExtracter*.class
JARTARGET = $(TARGET).jar
.IF "$(SYSTEM_SAXON)" == "YES"
-XCLASSPATH+=$(SAXON_JAR)
+XCLASSPATH:=$(XCLASSPATH)$(PATH_SEPERATOR)$(SAXON_JAR)
.ELSE
JARFILES += saxon9.jar
.ENDIF
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index 533ec85358c5..2010679907d2 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -493,7 +493,7 @@ void FormulaCompiler::OpCodeMap::putOpCode( const String & rStr, const OpCode eO
DBG_ASSERT( 0 < eOp && USHORT(eOp) < mnSymbols, "OpCodeMap::putOpCode: OpCode out of range");
if (0 < eOp && USHORT(eOp) < mnSymbols)
{
- DBG_ASSERT( (mpTable[eOp].Len() == 0) || (mpTable[eOp] == rStr),
+ DBG_ASSERT( (mpTable[eOp].Len() == 0) || (mpTable[eOp] == rStr) || (eOp == ocCurrency),
ByteString( "OpCodeMap::putOpCode: reusing OpCode ").
Append( ByteString::CreateFromInt32( sal_Int32( eOp))).Append( " (").
Append( ByteString( rStr, RTL_TEXTENCODING_ASCII_US)).Append( ')').GetBuffer());
diff --git a/fpicker/source/aqua/FilterHelper.cxx b/fpicker/source/aqua/FilterHelper.cxx
index 10e429f201c5..9c644326005e 100644
--- a/fpicker/source/aqua/FilterHelper.cxx
+++ b/fpicker/source/aqua/FilterHelper.cxx
@@ -35,6 +35,7 @@
// #endif
#include "CFStringUtilities.hxx"
#include "NSString_OOoAdditions.hxx"
+#include "NSURL_OOoAdditions.hxx"
#include "FilterHelper.hxx"
@@ -428,6 +429,16 @@ sal_Bool FilterHelper::filenameMatchesFilter(NSString* sFilename)
}
}
+ // might be an alias
+ NSString* pResolved = resolveAlias( sFilename );
+ if( pResolved )
+ {
+ sal_Bool bResult = filenameMatchesFilter( pResolved );
+ [pResolved autorelease];
+ if( bResult )
+ return sal_True;
+ }
+
DBG_PRINT_EXIT(CLASS_NAME, __func__);
return sal_False;
diff --git a/fpicker/source/aqua/NSURL_OOoAdditions.hxx b/fpicker/source/aqua/NSURL_OOoAdditions.hxx
index 8be2c0362096..31b55385e155 100644
--- a/fpicker/source/aqua/NSURL_OOoAdditions.hxx
+++ b/fpicker/source/aqua/NSURL_OOoAdditions.hxx
@@ -29,15 +29,20 @@
#define _NSURL_OOOADDITIONS_HXX_
#include <premac.h>
-#include <Foundation/Foundation.h>
+#include <CoreFoundation/CoreFoundation.h>
#include <postmac.h>
#include "CFStringUtilities.hxx"
#include <rtl/ustring.hxx>
-// #include <sal/types.h>
-
@interface NSURL (OOoAdditions)
- (rtl::OUString) OUStringForInfo:(InfoType)info;
@end
-#endif \ No newline at end of file
+/*
+ returns the resolved string if there was an alias
+ if there was no alias, nil is returned
+*/
+
+NSString* resolveAlias( NSString* i_pSystemPath );
+
+#endif
diff --git a/fpicker/source/aqua/NSURL_OOoAdditions.mm b/fpicker/source/aqua/NSURL_OOoAdditions.mm
index 56fc198650c8..ecc38b7e232b 100644
--- a/fpicker/source/aqua/NSURL_OOoAdditions.mm
+++ b/fpicker/source/aqua/NSURL_OOoAdditions.mm
@@ -80,3 +80,33 @@
return sResult;
}
@end
+
+NSString* resolveAlias( NSString* i_pSystemPath )
+{
+ NSString* pResolvedPath = nil;
+ CFURLRef rUrl = CFURLCreateWithFileSystemPath( kCFAllocatorDefault,
+ (CFStringRef)i_pSystemPath,
+ kCFURLPOSIXPathStyle, false);
+ if( rUrl != NULL )
+ {
+ FSRef rFS;
+ if( CFURLGetFSRef( rUrl, &rFS ) )
+ {
+ MacOSBoolean bIsFolder = false;
+ MacOSBoolean bAlias = false;
+ OSErr err = FSResolveAliasFile( &rFS, true, &bIsFolder, &bAlias);
+ if( (err == noErr) && bAlias )
+ {
+ CFURLRef rResolvedUrl = CFURLCreateFromFSRef( kCFAllocatorDefault, &rFS );
+ if( rResolvedUrl != NULL )
+ {
+ pResolvedPath = (NSString*)CFURLCopyFileSystemPath( rResolvedUrl, kCFURLPOSIXPathStyle );
+ CFRelease( rResolvedUrl );
+ }
+ }
+ }
+ CFRelease( rUrl );
+ }
+
+ return pResolvedPath;
+}
diff --git a/fpicker/source/unx/gnome/SalGtkFilePicker.cxx b/fpicker/source/unx/gnome/SalGtkFilePicker.cxx
index 4fe6f6f11b20..c6b0acd6a33f 100644
--- a/fpicker/source/unx/gnome/SalGtkFilePicker.cxx
+++ b/fpicker/source/unx/gnome/SalGtkFilePicker.cxx
@@ -96,6 +96,8 @@ namespace
static void expandexpanders(GtkContainer *pWidget)
{
+ GdkThreadLock aLock;
+
GList *pChildren = gtk_container_get_children(pWidget);
for( GList *p = pChildren; p; p = p->next )
{
@@ -114,6 +116,8 @@ void SalGtkFilePicker::dialog_mapped_cb(GtkWidget *, SalGtkFilePicker *pobjFP)
void SalGtkFilePicker::InitialMapping()
{
+ GdkThreadLock aLock;
+
if (!mbPreviewState )
{
gtk_widget_hide( m_pPreview );
@@ -208,6 +212,8 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact
CResourceProvider aResProvider;
OUString aFilePickerTitle = aResProvider.getResString( FILE_PICKER_TITLE_OPEN );
+ GdkThreadLock aLock;
+
m_pDialog = gtk_file_chooser_dialog_new(
OUStringToOString( aFilePickerTitle, RTL_TEXTENCODING_UTF8 ).getStr(),
NULL,
@@ -385,14 +391,12 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact
void SAL_CALL SalGtkFilePicker::addFilePickerListener( const uno::Reference<XFilePickerListener>& xListener )
throw( uno::RuntimeException )
{
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
m_xListener = xListener;
}
void SAL_CALL SalGtkFilePicker::removeFilePickerListener( const uno::Reference<XFilePickerListener>& )
throw( uno::RuntimeException )
{
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
m_xListener.clear();
}
@@ -591,6 +595,8 @@ shrinkFilterName( const rtl::OUString &rFilterName, bool bAllowNoStar = false )
static void
dialog_remove_buttons( GtkDialog *pDialog )
{
+ GdkThreadLock aLock;
+
g_return_if_fail( GTK_IS_DIALOG( pDialog ) );
GList *pChildren =
@@ -700,7 +706,6 @@ void SAL_CALL SalGtkFilePicker::appendFilter( const rtl::OUString& aTitle, const
throw( lang::IllegalArgumentException, uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
if( FilterNameExists( aTitle ) )
throw IllegalArgumentException();
@@ -721,7 +726,6 @@ void SAL_CALL SalGtkFilePicker::setCurrentFilter( const rtl::OUString& aTitle )
throw( lang::IllegalArgumentException, uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
OSL_TRACE( "Setting current filter to %s\n",
OUStringToOString( aTitle, RTL_TEXTENCODING_UTF8 ).getStr() );
@@ -763,6 +767,9 @@ void SalGtkFilePicker::UpdateFilterfromUI()
// from the filter of the files glob on which he is currently searching
if (!mnHID_FolderChange || !mnHID_SelectionChange)
return;
+
+ GdkThreadLock aLock;
+
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(m_pFilterView));
GtkTreeIter iter;
GtkTreeModel *model;
@@ -782,7 +789,6 @@ void SalGtkFilePicker::UpdateFilterfromUI()
rtl::OUString SAL_CALL SalGtkFilePicker::getCurrentFilter() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
OSL_TRACE( "GetCURRENTfilter\n" );
@@ -802,7 +808,6 @@ void SAL_CALL SalGtkFilePicker::appendFilterGroup( const rtl::OUString& /*sGroup
throw( lang::IllegalArgumentException, uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
// TODO m_pImpl->appendFilterGroup( sGroupTitle, aFilters );
// check the names
@@ -832,7 +837,8 @@ void SAL_CALL SalGtkFilePicker::appendFilterGroup( const rtl::OUString& /*sGroup
void SAL_CALL SalGtkFilePicker::setMultiSelectionMode( sal_Bool bMode ) throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
+ GdkThreadLock aLock;
gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER(m_pDialog), bMode );
}
@@ -841,7 +847,8 @@ void SAL_CALL SalGtkFilePicker::setDefaultName( const rtl::OUString& aName )
throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
+ GdkThreadLock aLock;
OString aStr = OUStringToOString( aName, RTL_TEXTENCODING_UTF8 );
GtkFileChooserAction eAction = gtk_file_chooser_get_action( GTK_FILE_CHOOSER( m_pDialog ) );
@@ -877,7 +884,8 @@ uno::Sequence<rtl::OUString> SAL_CALL SalGtkFilePicker::getFiles() throw( uno::R
uno::Sequence<rtl::OUString> SAL_CALL SalGtkFilePicker::getSelectedFiles() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
+ GdkThreadLock aLock;
GSList* pPathList = gtk_file_chooser_get_uris( GTK_FILE_CHOOSER(m_pDialog) );
@@ -1014,7 +1022,8 @@ sal_Int16 SAL_CALL SalGtkFilePicker::execute() throw( uno::RuntimeException )
{
OSL_TRACE( "1: HERE WE ARE\n");
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
+ GdkThreadLock aLock;
sal_Int16 retVal = 0;
@@ -1171,6 +1180,8 @@ namespace
{
void HackWidthToFirst(GtkComboBox *pWidget)
{
+ GdkThreadLock aLock;
+
GtkRequisition requisition;
gtk_widget_size_request(GTK_WIDGET(pWidget), &requisition);
gtk_widget_set_size_request(GTK_WIDGET(pWidget), requisition.width, -1);
@@ -1179,6 +1190,8 @@ namespace
void SalGtkFilePicker::HandleSetListValue(GtkComboBox *pWidget, sal_Int16 nControlAction, const uno::Any& rValue)
{
+ GdkThreadLock aLock;
+
switch (nControlAction)
{
case ControlActions::ADD_ITEM:
@@ -1253,6 +1266,8 @@ void SalGtkFilePicker::HandleSetListValue(GtkComboBox *pWidget, sal_Int16 nContr
uno::Any SalGtkFilePicker::HandleGetListValue(GtkComboBox *pWidget, sal_Int16 nControlAction) const
{
+ GdkThreadLock aLock;
+
uno::Any aAny;
switch (nControlAction)
{
@@ -1312,15 +1327,15 @@ void SAL_CALL SalGtkFilePicker::setValue( sal_Int16 nControlId, sal_Int16 nContr
throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
OSL_TRACE( "SETTING VALUE %d\n", nControlAction );
GType tType;
GtkWidget *pWidget;
+ GdkThreadLock aLock;
+
if( !( pWidget = getWidget( nControlId, &tType ) ) )
OSL_TRACE("enable unknown control %d\n", nControlId);
-
else if( tType == GTK_TYPE_TOGGLE_BUTTON )
{
sal_Bool bChecked = false;
@@ -1340,15 +1355,16 @@ uno::Any SAL_CALL SalGtkFilePicker::getValue( sal_Int16 nControlId, sal_Int16 nC
throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
uno::Any aRetval;
GType tType;
GtkWidget *pWidget;
+ GdkThreadLock aLock;
+
if( !( pWidget = getWidget( nControlId, &tType ) ) )
OSL_TRACE("enable unknown control %d\n", nControlId);
-
else if( tType == GTK_TYPE_TOGGLE_BUTTON )
aRetval <<= (sal_Bool) gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( pWidget ) );
else if( tType == GTK_TYPE_COMBO_BOX )
@@ -1364,13 +1380,13 @@ void SAL_CALL SalGtkFilePicker::enableControl( sal_Int16 nControlId, sal_Bool bE
throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
GtkWidget *pWidget;
+ GdkThreadLock aLock;
+
if ( nControlId == ExtendedFilePickerElementIds::LISTBOX_FILTER_SELECTOR )
gtk_expander_set_expanded( GTK_EXPANDER( m_pFilterExpander ), bEnable );
-
else if( ( pWidget = getWidget( nControlId ) ) )
{
if( bEnable )
@@ -1392,11 +1408,12 @@ void SAL_CALL SalGtkFilePicker::setLabel( sal_Int16 nControlId, const ::rtl::OUS
throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
GType tType;
GtkWidget *pWidget;
+ GdkThreadLock aLock;
+
if( !( pWidget = getWidget( nControlId, &tType ) ) )
{
OSL_TRACE("Set label on unknown control %d\n", nControlId);
@@ -1428,18 +1445,17 @@ rtl::OUString SAL_CALL SalGtkFilePicker::getLabel( sal_Int16 nControlId )
throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
GType tType;
OString aTxt;
GtkWidget *pWidget;
+ GdkThreadLock aLock;
+
if( !( pWidget = getWidget( nControlId, &tType ) ) )
OSL_TRACE("Get label on unknown control %d\n", nControlId);
-
else if( tType == GTK_TYPE_TOGGLE_BUTTON || tType == GTK_TYPE_BUTTON || tType == GTK_TYPE_LABEL )
aTxt = gtk_button_get_label( GTK_BUTTON( pWidget ) );
-
else
OSL_TRACE("Can't get label on list\n");
@@ -1453,7 +1469,6 @@ rtl::OUString SAL_CALL SalGtkFilePicker::getLabel( sal_Int16 nControlId )
uno::Sequence<sal_Int16> SAL_CALL SalGtkFilePicker::getSupportedImageFormats() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
// TODO return m_pImpl->getSupportedImageFormats();
return 0;
@@ -1462,7 +1477,6 @@ uno::Sequence<sal_Int16> SAL_CALL SalGtkFilePicker::getSupportedImageFormats() t
sal_Int32 SAL_CALL SalGtkFilePicker::getTargetColorDepth() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
// TODO return m_pImpl->getTargetColorDepth();
return 0;
@@ -1471,18 +1485,14 @@ sal_Int32 SAL_CALL SalGtkFilePicker::getTargetColorDepth() throw( uno::RuntimeEx
sal_Int32 SAL_CALL SalGtkFilePicker::getAvailableWidth() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
- // TODO return m_pImpl->getAvailableWidth();
return m_PreviewImageWidth;
}
sal_Int32 SAL_CALL SalGtkFilePicker::getAvailableHeight() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
- // TODO return m_pImpl->getAvailableHeight();
return m_PreviewImageHeight;
}
@@ -1490,7 +1500,6 @@ void SAL_CALL SalGtkFilePicker::setImage( sal_Int16 /*aImageFormat*/, const uno:
throw( lang::IllegalArgumentException, uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
// TODO m_pImpl->setImage( aImageFormat, aImage );
}
@@ -1499,6 +1508,9 @@ void SalGtkFilePicker::implChangeType( GtkTreeSelection *selection )
{
CResourceProvider aResProvider;
OUString aLabel = aResProvider.getResString( FILE_PICKER_FILE_TYPE );
+
+ GdkThreadLock aLock;
+
GtkTreeIter iter;
GtkTreeModel *model;
if (gtk_tree_selection_get_selected (selection, &model, &iter))
@@ -1523,6 +1535,8 @@ void SalGtkFilePicker::type_changed_cb( GtkTreeSelection *selection, SalGtkFileP
void SalGtkFilePicker::unselect_type()
{
+ GdkThreadLock aLock;
+
gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(m_pFilterView)));
}
@@ -1589,11 +1603,12 @@ void SalGtkFilePicker::update_preview_cb( GtkFileChooser *file_chooser, SalGtkFi
sal_Bool SAL_CALL SalGtkFilePicker::setShowState( sal_Bool bShowState ) throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
// TODO return m_pImpl->setShowState( bShowState );
if( bShowState != mbPreviewState )
{
+ GdkThreadLock aLock;
+
if( bShowState )
{
// Show
@@ -1622,9 +1637,7 @@ sal_Bool SAL_CALL SalGtkFilePicker::setShowState( sal_Bool bShowState ) throw( u
sal_Bool SAL_CALL SalGtkFilePicker::getShowState() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
- // TODO return m_pImpl->getShowState();
return mbPreviewState;
}
@@ -1740,6 +1753,8 @@ void SAL_CALL SalGtkFilePicker::initialize( const uno::Sequence<uno::Any>& aArgu
1 );
}
+ GdkThreadLock aLock;
+
if( GTK_FILE_CHOOSER_ACTION_SAVE == eAction )
{
CResourceProvider aResProvider;
@@ -1801,7 +1816,6 @@ void SalGtkFilePicker::preview_toggled_cb( GtkObject *cb, SalGtkFilePicker* pobj
void SAL_CALL SalGtkFilePicker::cancel() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
// TODO m_pImpl->cancel();
}
@@ -1848,6 +1862,8 @@ uno::Sequence<rtl::OUString> SAL_CALL SalGtkFilePicker::getSupportedServiceNames
//-------------------------------------------------
void SalGtkFilePicker::SetCurFilter( const OUString& rFilter )
{
+ GdkThreadLock aLock;
+
// Get all the filters already added
GSList *filters = gtk_file_chooser_list_filters ( GTK_FILE_CHOOSER( m_pDialog ) );
bool bFound = false;
@@ -1903,6 +1919,8 @@ case_insensitive_filter (const GtkFileFilterInfo *filter_info, gpointer data)
int SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rType )
{
+ GdkThreadLock aLock;
+
GtkFileFilter *filter = gtk_file_filter_new();
OUString aShrunkName = shrinkFilterName( rFilter );
@@ -1981,6 +1999,9 @@ int SalGtkFilePicker::implAddFilterGroup( const OUString& /*_rFilter*/, const Se
void SalGtkFilePicker::SetFilters()
{
OSL_TRACE( "start setting filters\n");
+
+ GdkThreadLock aLock;
+
int nAdded = 0;
if( m_pFilterList && !m_pFilterList->empty() )
{
diff --git a/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx b/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx
index 6b843d8b79f4..f9c78d76639c 100644
--- a/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx
+++ b/fpicker/source/unx/gnome/SalGtkFolderPicker.cxx
@@ -87,6 +87,9 @@ SalGtkFolderPicker::SalGtkFolderPicker( const uno::Reference<lang::XMultiService
m_xServiceMgr( xServiceMgr )
{
CResourceProvider aResProvider;
+
+ GdkThreadLock aLock;
+
m_pDialog = gtk_file_chooser_dialog_new(
OUStringToOString( aResProvider.getResString( FOLDERPICKER_TITLE ), RTL_TEXTENCODING_UTF8 ).getStr(),
NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
@@ -110,7 +113,6 @@ void SAL_CALL SalGtkFolderPicker::setDisplayDirectory( const rtl::OUString& aDir
throw( lang::IllegalArgumentException, uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
OString aTxt = unicodetouri( aDirectory );
@@ -119,14 +121,17 @@ void SAL_CALL SalGtkFolderPicker::setDisplayDirectory( const rtl::OUString& aDir
OSL_TRACE( "setting path to %s\n", aTxt.getStr() );
+ GdkThreadLock aLock;
+
gtk_file_chooser_set_current_folder_uri( GTK_FILE_CHOOSER( m_pDialog ),
- aTxt.getStr() );
+ aTxt.getStr() );
}
rtl::OUString SAL_CALL SalGtkFolderPicker::getDisplayDirectory() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
+ GdkThreadLock aLock;
gchar* pCurrentFolder =
gtk_file_chooser_get_current_folder_uri( GTK_FILE_CHOOSER( m_pDialog ) );
@@ -156,9 +161,10 @@ void SAL_CALL SalGtkFolderPicker::setDescription( const rtl::OUString& rDescript
void SAL_CALL SalGtkFolderPicker::setTitle( const rtl::OUString& aTitle ) throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
::rtl::OString aWindowTitle = OUStringToOString( aTitle, RTL_TEXTENCODING_UTF8 );
+
+ GdkThreadLock aLock;
gtk_window_set_title( GTK_WINDOW( m_pDialog ), aWindowTitle.getStr() );
}
@@ -166,7 +172,6 @@ sal_Int16 SAL_CALL SalGtkFolderPicker::execute() throw( uno::RuntimeException )
{
OSL_TRACE( "1: HERE WE ARE\n");
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
sal_Int16 retVal = 0;
@@ -199,7 +204,6 @@ sal_Int16 SAL_CALL SalGtkFolderPicker::execute() throw( uno::RuntimeException )
void SAL_CALL SalGtkFolderPicker::cancel() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
// TODO m_pImpl->cancel();
}
diff --git a/fpicker/source/unx/gnome/SalGtkPicker.cxx b/fpicker/source/unx/gnome/SalGtkPicker.cxx
index 2d2e086ba2ca..1a685e0981e6 100644
--- a/fpicker/source/unx/gnome/SalGtkPicker.cxx
+++ b/fpicker/source/unx/gnome/SalGtkPicker.cxx
@@ -148,6 +148,8 @@ RunDialog::RunDialog( GtkWidget *pDialog, uno::Reference< awt::XExtendedToolkit
}
}
+ GdkThreadLock aLock;
+
GdkDisplay *pDisplay = aWindowHandle.DisplayPointer ? gdk_x11_lookup_xdisplay(reinterpret_cast<void*>(static_cast<sal_IntPtr>(aWindowHandle.DisplayPointer))) : NULL;
GdkWindow* pParent = pDisplay ? gdk_window_lookup_for_display(pDisplay, aWindowHandle.WindowHandle) : NULL;
if (!pParent && pDisplay)
@@ -163,17 +165,22 @@ RunDialog::RunDialog( GtkWidget *pDialog, uno::Reference< awt::XExtendedToolkit
RunDialog::~RunDialog()
{
if (mpCreatedParent)
+ {
+ GdkThreadLock aLock;
gdk_window_destroy (mpCreatedParent);
+ }
}
void SAL_CALL RunDialog::windowOpened( const ::com::sun::star::lang::EventObject& )
throw (::com::sun::star::uno::RuntimeException)
{
+ GdkThreadLock aLock;
g_timeout_add_full(G_PRIORITY_HIGH_IDLE, 0, (GSourceFunc)canceldialog, this, NULL);
}
void RunDialog::cancel()
{
+ GdkThreadLock aLock;
gtk_dialog_response( GTK_DIALOG( mpDialog ), GTK_RESPONSE_CANCEL );
gtk_widget_hide( mpDialog );
}
@@ -183,6 +190,7 @@ gint RunDialog::run()
if (mxToolkit.is())
mxToolkit->addTopWindowListener(this);
+ GdkThreadLock aLock;
gint nStatus = gtk_dialog_run( GTK_DIALOG( mpDialog ) );
if (mxToolkit.is())
@@ -197,14 +205,16 @@ gint RunDialog::run()
SalGtkPicker::~SalGtkPicker()
{
if (m_pDialog)
+ {
+ GdkThreadLock aLock;
gtk_widget_destroy(m_pDialog);
+ }
}
void SAL_CALL SalGtkPicker::implsetDisplayDirectory( const rtl::OUString& aDirectory )
throw( lang::IllegalArgumentException, uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
OString aTxt = unicodetouri(aDirectory);
@@ -213,14 +223,16 @@ void SAL_CALL SalGtkPicker::implsetDisplayDirectory( const rtl::OUString& aDirec
OSL_TRACE( "setting path to %s\n", aTxt.getStr() );
+ GdkThreadLock aLock;
gtk_file_chooser_set_current_folder_uri( GTK_FILE_CHOOSER( m_pDialog ),
- aTxt.getStr() );
+ aTxt.getStr() );
}
rtl::OUString SAL_CALL SalGtkPicker::implgetDisplayDirectory() throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
+
+ GdkThreadLock aLock;
gchar* pCurrentFolder =
gtk_file_chooser_get_current_folder_uri( GTK_FILE_CHOOSER( m_pDialog ) );
@@ -233,8 +245,9 @@ rtl::OUString SAL_CALL SalGtkPicker::implgetDisplayDirectory() throw( uno::Runti
void SAL_CALL SalGtkPicker::implsetTitle( const rtl::OUString& aTitle ) throw( uno::RuntimeException )
{
OSL_ASSERT( m_pDialog != NULL );
- ::vos::OGuard aGuard( Application::GetSolarMutex() );
::rtl::OString aWindowTitle = OUStringToOString( aTitle, RTL_TEXTENCODING_UTF8 );
+
+ GdkThreadLock aLock;
gtk_window_set_title( GTK_WINDOW( m_pDialog ), aWindowTitle.getStr() );
}
diff --git a/fpicker/source/unx/gnome/SalGtkPicker.hxx b/fpicker/source/unx/gnome/SalGtkPicker.hxx
index 5baa5bdb56e8..6349d3ed4988 100644
--- a/fpicker/source/unx/gnome/SalGtkPicker.hxx
+++ b/fpicker/source/unx/gnome/SalGtkPicker.hxx
@@ -71,6 +71,13 @@ class SalGtkPicker
static rtl::OString unicodetouri(const rtl::OUString &rURL);
};
+class GdkThreadLock
+{
+public:
+ GdkThreadLock() { gdk_threads_enter(); }
+ ~GdkThreadLock() { gdk_threads_leave(); }
+};
+
//Run the Gtk Dialog. Watch for any "new windows" created while we're
//executing and consider that a CANCEL event to avoid e.g. "file cannot be opened"
//modal dialogs and this one getting locked if some other API call causes this
diff --git a/fpicker/source/unx/gnome/resourceprovider.cxx b/fpicker/source/unx/gnome/resourceprovider.cxx
index 393ea7585d5a..8df810060ee5 100644
--- a/fpicker/source/unx/gnome/resourceprovider.cxx
+++ b/fpicker/source/unx/gnome/resourceprovider.cxx
@@ -168,8 +168,6 @@ public:
String aResString;
OUString aResOUString;
- const ::vos::OGuard aGuard( Application::GetSolarMutex() );
-
try
{
OSL_ASSERT( m_ResMgr && m_OtherResMgr );
diff --git a/framework/inc/filterflags.h b/framework/inc/filterflags.h
deleted file mode 100644
index 227834bc41dd..000000000000
--- a/framework/inc/filterflags.h
+++ /dev/null
@@ -1,172 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 __FRAMEWORK_FILTERFLAGS_H_
-#define __FRAMEWORK_FILTERFLAGS_H_
-
-namespace framework{
-
-/*-************************************************************************************************************//**
- @short These values describe our supported filter flags.
- @attention Don't change flag values without reason - we must support old functionality and position
- in flag combined values!
-*//*-*************************************************************************************************************/
-
-#define FILTERFLAGNAME_IMPORT DECLARE_ASCII("Import" ) // x
-#define FILTERFLAGNAME_EXPORT DECLARE_ASCII("Export" ) // x
-#define FILTERFLAGNAME_TEMPLATE DECLARE_ASCII("Template" ) // x
-#define FILTERFLAGNAME_INTERNAL DECLARE_ASCII("Internal" ) // x
-#define FILTERFLAGNAME_TEMPLATEPATH DECLARE_ASCII("TemplatePath" ) // x
-#define FILTERFLAGNAME_OWN DECLARE_ASCII("Own" ) // x
-#define FILTERFLAGNAME_ALIEN DECLARE_ASCII("Alien" ) // x
-#define FILTERFLAGNAME_USESOPTIONS DECLARE_ASCII("UsesOptions" ) // x
-#define FILTERFLAGNAME_DEFAULT DECLARE_ASCII("Default" ) // x
-#define FILTERFLAGNAME_EXECUTABLE DECLARE_ASCII("Executable" ) // deprecated
-#define FILTERFLAGNAME_SUPPORTSSELECTION DECLARE_ASCII("SupportsSelection") // x
-#define FILTERFLAGNAME_MAPTOAPPPLUG DECLARE_ASCII("MapToAppPlug" ) // deprecated
-#define FILTERFLAGNAME_NOTINFILEDIALOG DECLARE_ASCII("NotInFileDialog" ) // x
-#define FILTERFLAGNAME_NOTINCHOOSER DECLARE_ASCII("NotInChooser" ) // x
-#define FILTERFLAGNAME_ASYNCHRON DECLARE_ASCII("Asynchron" ) // x
-#define FILTERFLAGNAME_CREATOR DECLARE_ASCII("Creator" ) // deprecated
-#define FILTERFLAGNAME_READONLY DECLARE_ASCII("Readonly" ) // x
-#define FILTERFLAGNAME_NOTINSTALLED DECLARE_ASCII("NotInstalled" ) // deprecated
-#define FILTERFLAGNAME_CONSULTSERVICE DECLARE_ASCII("ConsultService" ) // deprecated
-#define FILTERFLAGNAME_3RDPARTYFILTER DECLARE_ASCII("3rdPartyFilter" ) // x
-#define FILTERFLAGNAME_PACKED DECLARE_ASCII("Packed" ) // x
-#define FILTERFLAGNAME_SILENTEXPORT DECLARE_ASCII("SilentExport" ) // x
-#define FILTERFLAGNAME_BROWSERPREFERED DECLARE_ASCII("BrowserPrefered" ) // deprecated
-#define FILTERFLAGNAME_PREFERED DECLARE_ASCII("Prefered" ) // x
-
-#define FILTERFLAG_IMPORT 0x00000001L // 1
-#define FILTERFLAG_EXPORT 0x00000002L // 2
-#define FILTERFLAG_TEMPLATE 0x00000004L // 4
-#define FILTERFLAG_INTERNAL 0x00000008L // 8
-#define FILTERFLAG_TEMPLATEPATH 0x00000010L // 16
-#define FILTERFLAG_OWN 0x00000020L // 32
-#define FILTERFLAG_ALIEN 0x00000040L // 64
-#define FILTERFLAG_USESOPTIONS 0x00000080L // 128
-#define FILTERFLAG_DEFAULT 0x00000100L // 256
-#define FILTERFLAG_EXECUTABLE 0x00000200L // 512
-#define FILTERFLAG_SUPPORTSSELECTION 0x00000400L // 1024
-#define FILTERFLAG_MAPTOAPPPLUG 0x00000800L // 2048
-#define FILTERFLAG_NOTINFILEDIALOG 0x00001000L // 4096
-#define FILTERFLAG_NOTINCHOOSER 0x00002000L // 8192
-#define FILTERFLAG_ASYNCHRON 0x00004000L // 16384
-#define FILTERFLAG_CREATOR 0x00008000L // 32768
-#define FILTERFLAG_READONLY 0x00010000L // 65536
-#define FILTERFLAG_NOTINSTALLED 0x00020000L // 131072
-#define FILTERFLAG_CONSULTSERVICE 0x00040000L // 262144
-#define FILTERFLAG_3RDPARTYFILTER 0x00080000L // 524288
-#define FILTERFLAG_PACKED 0x00100000L // 1048576
-#define FILTERFLAG_SILENTEXPORT 0x00200000L // 2097152
-#define FILTERFLAG_BROWSERPREFERED 0x00400000L // 4194304
-//FREE! ... 0x00800000L
-#define FILTERFLAG_PREFERED 0x10000000L // 268435456
-
-class FlagCheck
-{
- public:
-
- //___________________________________________
-
- /** @short checks if the given flag mask is set.
-
- @param nFlags the flag field, which should be checked.
- @param nMask this mask field is searched inside parameter nFlags.
-
- @return TRUE if mask match to the given flag field.
- */
- static sal_Bool isMaskSet( sal_Int32 nFlags, sal_Int32 nMask )
- {
- return((nFlags & nMask) == nMask);
- }
-
- //___________________________________________
-
- /** @short checks if the given flag field contains unknown flags.
-
- @descr Of course it can work only, if not the whole range of an int32
- is used!
-
- @param nFlags the flag field, which should be checked.
-
- @return TRUE if only well known flags are set.
- */
- static sal_Bool isValid( sal_Int32 nFlags )
- {
- sal_Int32 nCheck = nFlags;
- nCheck &= ~FILTERFLAG_IMPORT;
- nCheck &= ~FILTERFLAG_EXPORT;
- nCheck &= ~FILTERFLAG_TEMPLATE;
- nCheck &= ~FILTERFLAG_INTERNAL;
- nCheck &= ~FILTERFLAG_TEMPLATEPATH;
- nCheck &= ~FILTERFLAG_OWN;
- nCheck &= ~FILTERFLAG_ALIEN;
- nCheck &= ~FILTERFLAG_USESOPTIONS;
- nCheck &= ~FILTERFLAG_DEFAULT;
- nCheck &= ~FILTERFLAG_EXECUTABLE;
- nCheck &= ~FILTERFLAG_SUPPORTSSELECTION;
- nCheck &= ~FILTERFLAG_MAPTOAPPPLUG;
- nCheck &= ~FILTERFLAG_NOTINFILEDIALOG;
- nCheck &= ~FILTERFLAG_NOTINCHOOSER;
- nCheck &= ~FILTERFLAG_ASYNCHRON;
- nCheck &= ~FILTERFLAG_CREATOR;
- nCheck &= ~FILTERFLAG_READONLY;
- nCheck &= ~FILTERFLAG_NOTINSTALLED;
- nCheck &= ~FILTERFLAG_CONSULTSERVICE;
- nCheck &= ~FILTERFLAG_3RDPARTYFILTER;
- nCheck &= ~FILTERFLAG_PACKED;
- nCheck &= ~FILTERFLAG_SILENTEXPORT;
- nCheck &= ~FILTERFLAG_BROWSERPREFERED;
- nCheck &= ~FILTERFLAG_PREFERED;
- return(nCheck == 0);
- }
-
- //___________________________________________
-
- /** @short checks if the given flag field uses deprecated flag values.
-
- @param nFlags the flag field, which should be checked.
-
- @return TRUE if one deprecated flag item could be found.
- */
- static sal_Bool useDeprecated( sal_Int32 nFlags )
- {
- return(
- isMaskSet(nFlags, FILTERFLAG_EXECUTABLE ) ||
- isMaskSet(nFlags, FILTERFLAG_MAPTOAPPPLUG ) ||
- isMaskSet(nFlags, FILTERFLAG_CREATOR ) ||
- isMaskSet(nFlags, FILTERFLAG_NOTINSTALLED ) ||
- isMaskSet(nFlags, FILTERFLAG_CONSULTSERVICE ) ||
- isMaskSet(nFlags, FILTERFLAG_BROWSERPREFERED )
- );
- }
-};
-
-} // namespace framework
-
-#endif // #ifndef __FRAMEWORK_FILTERFLAGS_H_
diff --git a/framework/inc/queries.h b/framework/inc/queries.h
index ce190a796dcb..b8d122118abf 100644
--- a/framework/inc/queries.h
+++ b/framework/inc/queries.h
@@ -32,7 +32,6 @@
// own includes
//_________________________________________________________________________________________________________________
-#include <filterflags.h>
#include <general.h>
//_________________________________________________________________________________________________________________
diff --git a/framework/inc/threadhelp/transactionmanager.hxx b/framework/inc/threadhelp/transactionmanager.hxx
index a3ce7e67ea8a..eca13d63103c 100644
--- a/framework/inc/threadhelp/transactionmanager.hxx
+++ b/framework/inc/threadhelp/transactionmanager.hxx
@@ -93,7 +93,6 @@ class TransactionManager : public ITransactionManager
virtual sal_Bool isCallRejected ( ERejectReason& eReason ) const;
virtual void registerTransaction ( EExceptionMode eMode, ERejectReason& eReason ) throw( css::uno::RuntimeException, css::lang::DisposedException );
virtual void unregisterTransaction ( ) throw( css::uno::RuntimeException, css::lang::DisposedException );
- static TransactionManager& getGlobalTransactionManager ( );
//-------------------------------------------------------------------------------------------------------------
// private methods
diff --git a/framework/source/constant/filter.cxx b/framework/source/constant/filter.cxx
deleted file mode 100644
index 57d94d772e6d..000000000000
--- a/framework/source/constant/filter.cxx
+++ /dev/null
@@ -1,119 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_framework.hxx"
-
-#ifndef __FRAMEWORK_CONSTANT_FILTER_HXX_
-#include <constant/filter.hxx>
-#endif
-
-namespace framework{
- namespace constant{
-
-const ::rtl::OUString Filter::PROP_NAME = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name" ));
-const ::rtl::OUString Filter::PROP_TYPE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Type" ));
-const ::rtl::OUString Filter::PROP_DOCUMENTSERVICE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DocumentService"));
-const ::rtl::OUString Filter::PROP_FILTERSERVICE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FilterService" ));
-const ::rtl::OUString Filter::PROP_UICOMPONENT = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UIComponent" ));
-const ::rtl::OUString Filter::PROP_FLAGS = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Flags" ));
-const ::rtl::OUString Filter::PROP_USERDATA = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UserData" ));
-const ::rtl::OUString Filter::PROP_TEMPLATENAME = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TemplateName" ));
-
-const ::rtl::OUString Filter::QUERY_GET_DEFAULT_FILTER_FOR_TYPE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("getDefaultFilterForType"));
-const ::rtl::OUString Filter::QUERY_ALL = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_all" ));
-const ::rtl::OUString Filter::QUERY_WRITER = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_writer" ));
-const ::rtl::OUString Filter::QUERY_WEB = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_web" ));
-const ::rtl::OUString Filter::QUERY_GLOBAL = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_global" ));
-const ::rtl::OUString Filter::QUERY_CHART = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_chart" ));
-const ::rtl::OUString Filter::QUERY_CALC = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_calc" ));
-const ::rtl::OUString Filter::QUERY_IMPRESS = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_impress" ));
-const ::rtl::OUString Filter::QUERY_DRAW = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_draw" ));
-const ::rtl::OUString Filter::QUERY_MATH = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_query_math" ));
-
-const ::rtl::OUString Filter::QUERYPARAM_IFLAGS = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("iflags" ));
-const ::rtl::OUString Filter::QUERYPARAM_EFLAGS = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("eflags" ));
-const ::rtl::OUString Filter::QUERYPARAM_SORT_PROP = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sort_prop" ));
-const ::rtl::OUString Filter::QUERYPARAM_DESCENDING = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("descending" ));
-const ::rtl::OUString Filter::QUERYPARAM_USE_ORDER = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("use_order" ));
-const ::rtl::OUString Filter::QUERYPARAM_DEFAULT_FIRST = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("default_first" ));
-const ::rtl::OUString Filter::QUERYPARAM_CASE_SENSITIVE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("case_sensitive"));
-const ::rtl::OUString Filter::QUERYPARAMVALUE_SORT_PROP_NAME = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("name" ));
-const ::rtl::OUString Filter::QUERYPARAMVALUE_SORT_PROP_UINAME = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("uiname" ));
-
-const ::rtl::OUString Filter::FLAGNAME_IMPORT = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Import" ));
-const ::rtl::OUString Filter::FLAGNAME_EXPORT = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Export" ));
-const ::rtl::OUString Filter::FLAGNAME_TEMPLATE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Template" ));
-const ::rtl::OUString Filter::FLAGNAME_INTERNAL = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Internal" ));
-const ::rtl::OUString Filter::FLAGNAME_TEMPLATEPATH = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TemplatePath" ));
-const ::rtl::OUString Filter::FLAGNAME_OWN = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Own" ));
-const ::rtl::OUString Filter::FLAGNAME_ALIEN = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Alien" ));
-const ::rtl::OUString Filter::FLAGNAME_USESOPTIONS = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UsesOptions" ));
-const ::rtl::OUString Filter::FLAGNAME_DEFAULT = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Default" ));
-const ::rtl::OUString Filter::FLAGNAME_EXECUTABLE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Executable" ));
-const ::rtl::OUString Filter::FLAGNAME_SUPPORTSSELECTION = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SupportsSelection"));
-const ::rtl::OUString Filter::FLAGNAME_MAPTOAPPPLUG = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MapToAppPlug" ));
-const ::rtl::OUString Filter::FLAGNAME_NOTINFILEDIALOG = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NotInFileDialog" ));
-const ::rtl::OUString Filter::FLAGNAME_NOTINCHOOSER = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NotInChooser" ));
-const ::rtl::OUString Filter::FLAGNAME_ASYNCHRON = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Asynchron" ));
-const ::rtl::OUString Filter::FLAGNAME_CREATOR = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Creator" ));
-const ::rtl::OUString Filter::FLAGNAME_READONLY = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Readonly" ));
-const ::rtl::OUString Filter::FLAGNAME_NOTINSTALLED = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NotInstalled" ));
-const ::rtl::OUString Filter::FLAGNAME_CONSULTSERVICE = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ConsultService" ));
-const ::rtl::OUString Filter::FLAGNAME_3RDPARTYFILTER = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("3rdPartyFilter" ));
-const ::rtl::OUString Filter::FLAGNAME_PACKED = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Packed" ));
-const ::rtl::OUString Filter::FLAGNAME_SILENTEXPORT = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SilentExport" ));
-const ::rtl::OUString Filter::FLAGNAME_BROWSERPREFERED = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BrowserPrefered" ));
-const ::rtl::OUString Filter::FLAGNAME_PREFERED = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Prefered" ));
-
-const sal_Int32 Filter::FLAGVALUE_IMPORT = 0x00000001L; // 1
-const sal_Int32 Filter::FLAGVALUE_EXPORT = 0x00000002L; // 2
-const sal_Int32 Filter::FLAGVALUE_TEMPLATE = 0x00000004L; // 4
-const sal_Int32 Filter::FLAGVALUE_INTERNAL = 0x00000008L; // 8
-const sal_Int32 Filter::FLAGVALUE_TEMPLATEPATH = 0x00000010L; // 16
-const sal_Int32 Filter::FLAGVALUE_OWN = 0x00000020L; // 32
-const sal_Int32 Filter::FLAGVALUE_ALIEN = 0x00000040L; // 64
-const sal_Int32 Filter::FLAGVALUE_USESOPTIONS = 0x00000080L; // 128
-const sal_Int32 Filter::FLAGVALUE_DEFAULT = 0x00000100L; // 256
-const sal_Int32 Filter::FLAGVALUE_EXECUTABLE = 0x00000200L; // 512
-const sal_Int32 Filter::FLAGVALUE_SUPPORTSSELECTION = 0x00000400L; // 1024
-const sal_Int32 Filter::FLAGVALUE_MAPTOAPPPLUG = 0x00000800L; // 2048
-const sal_Int32 Filter::FLAGVALUE_NOTINFILEDIALOG = 0x00001000L; // 4096
-const sal_Int32 Filter::FLAGVALUE_NOTINCHOOSER = 0x00002000L; // 8192
-const sal_Int32 Filter::FLAGVALUE_ASYNCHRON = 0x00004000L; // 16384
-const sal_Int32 Filter::FLAGVALUE_CREATOR = 0x00008000L; // 32768
-const sal_Int32 Filter::FLAGVALUE_READONLY = 0x00010000L; // 65536
-const sal_Int32 Filter::FLAGVALUE_NOTINSTALLED = 0x00020000L; // 131072
-const sal_Int32 Filter::FLAGVALUE_CONSULTSERVICE = 0x00040000L; // 262144
-const sal_Int32 Filter::FLAGVALUE_3RDPARTYFILTER = 0x00080000L; // 524288
-const sal_Int32 Filter::FLAGVALUE_PACKED = 0x00100000L; // 1048576
-const sal_Int32 Filter::FLAGVALUE_SILENTEXPORT = 0x00200000L; // 2097152
-const sal_Int32 Filter::FLAGVALUE_BROWSERPREFERED = 0x00400000L; // 4194304
-const sal_Int32 Filter::FLAGVALUE_PREFERED = 0x10000000L; // 268435456
-
- } // namespace constant
-} // namespace framework
diff --git a/framework/source/constant/makefile.mk b/framework/source/constant/makefile.mk
index 1c050db57dca..05fc28870d0a 100644
--- a/framework/source/constant/makefile.mk
+++ b/framework/source/constant/makefile.mk
@@ -35,8 +35,7 @@ ENABLE_EXCEPTIONS= TRUE
# --- Generate -----------------------------------------------------
-SLOFILES= $(SLO)$/filter.obj \
- $(SLO)$/frameloader.obj \
+SLOFILES= $(SLO)$/frameloader.obj \
$(SLO)$/contenthandler.obj \
$(SLO)$/containerquery.obj
diff --git a/framework/source/inc/constant/filter.hxx b/framework/source/inc/constant/filter.hxx
deleted file mode 100644
index 141440a77716..000000000000
--- a/framework/source/inc/constant/filter.hxx
+++ /dev/null
@@ -1,126 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 __FRAMEWORK_CONSTANT_FILTER_H_
-#define __FRAMEWORK_CONSTANT_FILTER_H_
-
-#include <rtl/ustring.hxx>
-
-namespace framework{
- namespace constant{
-
-struct Filter
-{
- public:
-
- static const ::rtl::OUString PROP_NAME; // string
- static const ::rtl::OUString PROP_TYPE; // string
- static const ::rtl::OUString PROP_DOCUMENTSERVICE; // string
- static const ::rtl::OUString PROP_FILTERSERVICE; // string
- static const ::rtl::OUString PROP_UICOMPONENT; // string
- static const ::rtl::OUString PROP_FLAGS; // int32
- static const ::rtl::OUString PROP_USERDATA; // seq< string >
- static const ::rtl::OUString PROP_TEMPLATENAME; // string
-
- static const ::rtl::OUString QUERY_GET_DEFAULT_FILTER_FOR_TYPE;
- static const ::rtl::OUString QUERY_ALL;
- static const ::rtl::OUString QUERY_WRITER;
- static const ::rtl::OUString QUERY_WEB;
- static const ::rtl::OUString QUERY_GLOBAL;
- static const ::rtl::OUString QUERY_CHART;
- static const ::rtl::OUString QUERY_CALC;
- static const ::rtl::OUString QUERY_IMPRESS;
- static const ::rtl::OUString QUERY_DRAW;
- static const ::rtl::OUString QUERY_MATH;
-
- static const ::rtl::OUString QUERYPARAM_IFLAGS;
- static const ::rtl::OUString QUERYPARAM_EFLAGS;
- static const ::rtl::OUString QUERYPARAM_SORT_PROP;
- static const ::rtl::OUString QUERYPARAM_DESCENDING;
- static const ::rtl::OUString QUERYPARAM_USE_ORDER;
- static const ::rtl::OUString QUERYPARAM_DEFAULT_FIRST;
- static const ::rtl::OUString QUERYPARAM_CASE_SENSITIVE;
- static const ::rtl::OUString QUERYPARAMVALUE_SORT_PROP_NAME;
- static const ::rtl::OUString QUERYPARAMVALUE_SORT_PROP_UINAME;
-
- static const ::rtl::OUString FLAGNAME_IMPORT;
- static const ::rtl::OUString FLAGNAME_EXPORT;
- static const ::rtl::OUString FLAGNAME_TEMPLATE;
- static const ::rtl::OUString FLAGNAME_INTERNAL;
- static const ::rtl::OUString FLAGNAME_TEMPLATEPATH;
- static const ::rtl::OUString FLAGNAME_OWN;
- static const ::rtl::OUString FLAGNAME_ALIEN;
- static const ::rtl::OUString FLAGNAME_USESOPTIONS;
- static const ::rtl::OUString FLAGNAME_DEFAULT;
- static const ::rtl::OUString FLAGNAME_EXECUTABLE;
- static const ::rtl::OUString FLAGNAME_SUPPORTSSELECTION;
- static const ::rtl::OUString FLAGNAME_MAPTOAPPPLUG;
- static const ::rtl::OUString FLAGNAME_NOTINFILEDIALOG;
- static const ::rtl::OUString FLAGNAME_NOTINCHOOSER;
- static const ::rtl::OUString FLAGNAME_ASYNCHRON;
- static const ::rtl::OUString FLAGNAME_CREATOR;
- static const ::rtl::OUString FLAGNAME_READONLY;
- static const ::rtl::OUString FLAGNAME_NOTINSTALLED;
- static const ::rtl::OUString FLAGNAME_CONSULTSERVICE;
- static const ::rtl::OUString FLAGNAME_3RDPARTYFILTER;
- static const ::rtl::OUString FLAGNAME_PACKED;
- static const ::rtl::OUString FLAGNAME_SILENTEXPORT;
- static const ::rtl::OUString FLAGNAME_BROWSERPREFERED;
- static const ::rtl::OUString FLAGNAME_PREFERED;
-
- static const sal_Int32 FLAGVALUE_IMPORT;
- static const sal_Int32 FLAGVALUE_EXPORT;
- static const sal_Int32 FLAGVALUE_TEMPLATE;
- static const sal_Int32 FLAGVALUE_INTERNAL;
- static const sal_Int32 FLAGVALUE_TEMPLATEPATH;
- static const sal_Int32 FLAGVALUE_OWN;
- static const sal_Int32 FLAGVALUE_ALIEN;
- static const sal_Int32 FLAGVALUE_USESOPTIONS;
- static const sal_Int32 FLAGVALUE_DEFAULT;
- static const sal_Int32 FLAGVALUE_EXECUTABLE;
- static const sal_Int32 FLAGVALUE_SUPPORTSSELECTION;
- static const sal_Int32 FLAGVALUE_MAPTOAPPPLUG;
- static const sal_Int32 FLAGVALUE_NOTINFILEDIALOG;
- static const sal_Int32 FLAGVALUE_NOTINCHOOSER;
- static const sal_Int32 FLAGVALUE_ASYNCHRON;
- static const sal_Int32 FLAGVALUE_CREATOR;
- static const sal_Int32 FLAGVALUE_READONLY;
- static const sal_Int32 FLAGVALUE_NOTINSTALLED;
- static const sal_Int32 FLAGVALUE_CONSULTSERVICE;
- static const sal_Int32 FLAGVALUE_3RDPARTYFILTER;
- static const sal_Int32 FLAGVALUE_PACKED;
- static const sal_Int32 FLAGVALUE_SILENTEXPORT;
- static const sal_Int32 FLAGVALUE_BROWSERPREFERED;
- //FREE! ... 0x00800000L
- static const sal_Int32 FLAGVALUE_PREFERED;
-
-};
-
- } // namespace constant
-} // namespace framework
-
-#endif // #ifndef __FRAMEWORK_CONSTANT_FILTER_H_
diff --git a/framework/source/loadenv/loadenv.cxx b/framework/source/loadenv/loadenv.cxx
index b9f1d2c8a09a..99dd3107f162 100644
--- a/framework/source/loadenv/loadenv.cxx
+++ b/framework/source/loadenv/loadenv.cxx
@@ -36,9 +36,6 @@
#endif
#include <classes/framelistanalyzer.hxx>
-#ifndef __FRAMEWORK_CONSTANT_FILTER_HXX_
-#include <constant/filter.hxx>
-#endif
#include <dispatch/interaction.hxx>
#ifndef __FRAMEWORK_CONSTANT_FRAMELOADER_HXX_
@@ -1774,7 +1771,10 @@ void LoadEnv::impl_makeFrameWindowVisible(const css::uno::Reference< css::awt::X
::comphelper::ConfigurationHelper::E_READONLY);
a >>= bForceFrontAndFocus;
- pWindow->Show(sal_True, (bForceFrontAndFocus || bForceToFront) ? SHOW_FOREGROUNDTASK : 0 );
+ if( pWindow->IsVisible() && (bForceFrontAndFocus || bForceToFront) )
+ pWindow->ToTop();
+ else
+ pWindow->Show(sal_True, (bForceFrontAndFocus || bForceToFront) ? SHOW_FOREGROUNDTASK : 0 );
}
/* #i19976#
diff --git a/framework/source/services/backingwindow.cxx b/framework/source/services/backingwindow.cxx
index 0f6815a69cc3..17def8e1c684 100644
--- a/framework/source/services/backingwindow.cxx
+++ b/framework/source/services/backingwindow.cxx
@@ -460,7 +460,7 @@ void BackingWindow::initBackground()
maOpenButton.SetMenuMode( MENUBUTTON_MENUMODE_TIMED );
maOpenButton.SetSelectHdl( LINK( this, BackingWindow, SelectHdl ) );
- prepareRecentFileMenu();
+ maOpenButton.SetActivateHdl( LINK( this, BackingWindow, ActivateHdl ) );
}
void BackingWindow::initControls()
@@ -1056,6 +1056,13 @@ IMPL_LINK( BackingWindow, SelectHdl, Button*, pButton )
return 0;
}
+IMPL_LINK( BackingWindow, ActivateHdl, Button*, pButton )
+{
+ if( pButton == &maOpenButton )
+ prepareRecentFileMenu();
+ return 0;
+}
+
struct ImplDelayedDispatch
{
Reference< XDispatch > xDispatch;
diff --git a/framework/source/services/backingwindow.hxx b/framework/source/services/backingwindow.hxx
index eaf5e9ec5a23..958ebfbb243e 100644
--- a/framework/source/services/backingwindow.hxx
+++ b/framework/source/services/backingwindow.hxx
@@ -159,6 +159,7 @@ namespace framework
DECL_LINK( ClickHdl, Button* );
DECL_LINK( SelectHdl, Button* );
+ DECL_LINK( ActivateHdl, Button* );
DECL_LINK( ToolboxHdl, void* );
void initControls();
diff --git a/framework/source/services/frame.cxx b/framework/source/services/frame.cxx
index 18d5a1c31bef..08a7c522831b 100644
--- a/framework/source/services/frame.cxx
+++ b/framework/source/services/frame.cxx
@@ -1551,8 +1551,9 @@ css::uno::Reference< css::awt::XWindow > SAL_CALL Frame::getComponentWindow() th
css::uno::Reference< css::frame::XController > SAL_CALL Frame::getController() throw( css::uno::RuntimeException )
{
/* UNSAFE AREA --------------------------------------------------------------------------------------------- */
+ // It seems to be unavoidable that disposed frames allow to ask for a Controller (#111452)
// Register transaction and reject wrong calls.
- TransactionGuard aTransaction( m_aTransactionManager, E_HARDEXCEPTIONS );
+ // TransactionGuard aTransaction( m_aTransactionManager, E_HARDEXCEPTIONS );
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
ReadGuard aReadLock( m_aLock );
diff --git a/framework/source/threadhelp/transactionmanager.cxx b/framework/source/threadhelp/transactionmanager.cxx
index 34b4892ccebe..a42c871c176e 100644
--- a/framework/source/threadhelp/transactionmanager.cxx
+++ b/framework/source/threadhelp/transactionmanager.cxx
@@ -319,42 +319,6 @@ sal_Bool TransactionManager::isCallRejected( ERejectReason& eReason ) const
}
/*-****************************************************************************************************//**
- @short return a reference to a static manager
- @descr Sometimes we need the global member! (e.g. in our own static methods)
- We create our own "class global static" member threadsafe.
- It will be created at first call only!
- All other requests use these created one then directly.
-
- @seealso -
-
- @param -
- @return A reference to a static member.
-
- @onerror No error should occure.
-*//*-*****************************************************************************************************/
-TransactionManager& TransactionManager::getGlobalTransactionManager()
-{
- // Initialize static member only for one time!
- static TransactionManager* pManager = NULL;
- // If these method first called (member not already exist!) ...
- if( pManager == NULL )
- {
- // ... we must create a new one. Protect follow code with the global mutex -
- // It must be - we create a static variable!
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- // We must check our pointer again - because ... another instance of ouer class could be faster then these one!
- if( pManager == NULL )
- {
- // Create the new manager and set it for return on static variable.
- static TransactionManager aManager;
- pManager = &aManager;
- }
- }
- // Return new created or already existing object.
- return *pManager;
-}
-
-/*-****************************************************************************************************//**
@short throw any exceptions for rejected calls
@descr If user whish to use our automaticly exception mode we use this impl-method.
We check all combinations of eReason and eExceptionMode and throw right exception with some
diff --git a/framework/util/makefile.mk b/framework/util/makefile.mk
index 6a65b9986f1e..91532cda76e2 100644
--- a/framework/util/makefile.mk
+++ b/framework/util/makefile.mk
@@ -256,7 +256,6 @@ SHL4OBJS= \
$(SLO)$/droptargetlistener.obj \
$(SLO)$/edittoolbarcontroller.obj \
$(SLO)$/factoryconfiguration.obj \
- $(SLO)$/filter.obj \
$(SLO)$/framecontainer.obj \
$(SLO)$/frameloader.obj \
$(SLO)$/frame.obj \
diff --git a/graphite/makefile.mk b/graphite/makefile.mk
index 2f4ff2535442..471bc3c366d7 100644
--- a/graphite/makefile.mk
+++ b/graphite/makefile.mk
@@ -102,11 +102,11 @@ GR_LIB_PATH=
.IF "$(OS)"=="WNT"
PATCH_FILES+=graphite-2.3.1.patch.mingw
-EXTRA_GR_CXX_FLAGS=-nostdinc
+EXTRA_GR_CXX_FLAGS=-mthreads -nostdinc
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
EXTRA_GR_CXX_FLAGS+=-shared-libgcc
.ENDIF
-EXTRA_GR_LD_FLAGS+=-no-undefined
+EXTRA_GR_LD_FLAGS+=-no-undefined -Wl,--enable-runtime-pseudo-reloc-v2
.ENDIF
# don't use SOLARLIB for LDFLAGS because it pulls in system graphite so build will fail
diff --git a/hunspell/hunspell-mingw.patch b/hunspell/hunspell-mingw.patch
new file mode 100644
index 000000000000..0120e01ddba1
--- /dev/null
+++ b/hunspell/hunspell-mingw.patch
@@ -0,0 +1,12 @@
+--- misc/hunspell-1.2.9/src/tools/hunspell.cxx 2010-02-27 23:37:14.000000000 +0900
++++ misc/build/hunspell-1.2.9/src/tools/hunspell.cxx 2010-04-25 07:57:39.233875000 +0900
+@@ -27,7 +27,9 @@
+
+ #ifdef WIN32
+
++#ifndef __MINGW32__
+ #define gettext
++#endif
+ #define LIBDIR "C:\\Hunspell\\"
+ #define USEROOODIR "Application Data\\OpenOffice.org 2\\user\\wordbook"
+ #define OOODIR \
diff --git a/hunspell/makefile.mk b/hunspell/makefile.mk
index f58204a33bc5..253607ab0c0f 100644
--- a/hunspell/makefile.mk
+++ b/hunspell/makefile.mk
@@ -71,8 +71,11 @@ OUT2LIB=$(BUILD_DIR)$/src$/hunspell$/.libs$/libhunspell-1.2.a
.IF "$(GUI)"=="WNT"
.IF "$(COM)"=="GCC"
+PATCH_FILES=\
+ hunspell-mingw.patch
+
CONFIGURE_ACTION=configure
-CONFIGURE_FLAGS= --disable-shared --with-pic
+CONFIGURE_FLAGS= --disable-shared --with-pic LDFLAGS=-Wl,--enable-runtime-pseudo-reloc-v2
BUILD_ACTION=make
OUT2LIB=$(BUILD_DIR)$/src$/hunspell$/.libs$/libhunspell-1.2.a
.ELSE
diff --git a/i18npool/inc/i18npool/lang.h b/i18npool/inc/i18npool/lang.h
index 8599ec75c634..52e4e51d7a41 100644
--- a/i18npool/inc/i18npool/lang.h
+++ b/i18npool/inc/i18npool/lang.h
@@ -512,5 +512,9 @@ typedef unsigned short LanguageType;
#define LANGUAGE_USER_SARDINIAN_LOGUDORESE 0x0652
#define LANGUAGE_USER_SARDINIAN_SASSARESE 0x0653
#define LANGUAGE_USER_BAFIA 0x0654
+#define LANGUAGE_USER_GIKUYU 0x0655
+#define LANGUAGE_USER_RUSYN_UKRAINE 0x0656
+#define LANGUAGE_USER_RUSYN_SLOVAKIA 0x8256 /* makeLangID( 0x20, getPrimaryLanguage( LANGUAGE_USER_RUSYN_UKRAINE)) */
+
#endif /* INCLUDED_I18NPOOL_LANG_H */
diff --git a/i18npool/source/breakiterator/data/char_in.txt b/i18npool/source/breakiterator/data/char_in.txt
index 72c4a44720cd..5e1ed67596c0 100644
--- a/i18npool/source/breakiterator/data/char_in.txt
+++ b/i18npool/source/breakiterator/data/char_in.txt
@@ -1,48 +1,108 @@
#
-# Copyright (C) 2002-2003, International Business Machines Corporation and others.
+# Copyright (C) 2002-2009, International Business Machines Corporation and others.
# All Rights Reserved.
#
# file: char.txt
#
# ICU Character Break Rules, also known as Grapheme Cluster Boundaries
# See Unicode Standard Annex #29.
-# These rules are based on TR29 Version 4.0.0
+# These rules are based on TR29 Revision 13, for Unicode Version 5.1
#
#
# Character Class Definitions.
-# The names are those from TR29.
#
-$CR = \r;
-$LF = \n;
-$Control = [[:Zl:] [:Zp:] [:Cc:] [:Cf:]];
-
-# add Japanese Half Width voicing marks to $Extend
-$VoiceMarks = [\uff9e\uff9f];
-$cmcextend = [ \u0903 \u093e-\u0940 \u0949-\u094C \u09bf-\u09c0 \u09c7-\u09c8 \u09cb-\u09cc \u0bc1-\u0bc2 \u0bc6-\u0bc8 \u0bca-\u0bcc \u0c01-\u0c03 \u0c41-\u0c44];
-$Extend = [[:Grapheme_Extend = TRUE:] $VoiceMarks $cmcextend];
+$CR = [\p{Grapheme_Cluster_Break = CR}];
+$LF = [\p{Grapheme_Cluster_Break = LF}];
+$Control = [\p{Grapheme_Cluster_Break = Control}];
+$Prepend = [\p{Grapheme_Cluster_Break = Prepend}];
+$Extend = [\p{Grapheme_Cluster_Break = Extend}];
+$SpacingMark = [\p{Grapheme_Cluster_Break = SpacingMark}];
+$BengaliLetter = [\u0985-\u09B9 \u09CE \u09DC-\u09E1 \u09F0-\u09F1];
+$BengaliSignVirama = \u09CD;
+$GujaratiLetter = [\u0A85-\u0A8C \u0A8F-\u0A90 \u0A93-\u0AB9 \u0AE0-\u0AE1];
+$GujaratiSignVirama = \u0ACD;
+$DevanagariLetter = [\u0904-\u0939 \u0958-\u0961 \u0972-\u097F];
+$DevanagariSignVirama = \u094D;
+$KannadaLetter = [\u0C85-\u0CB9 \u0CDE-\u0CE1];
+$KannadaSignVirama = \u0CCD;
+$MalayalamLetter = [\u0D05-\u0D39 \u0D60-\u0D61 \u0D7A-\u0D7F];
+$MalayalamSignVirama = \u0D4D;
+$OriyaLetter = [\u0B05-\u0B39 \u0B5C-\u0B61 \u0B71];
+$OriyaSignVirama = \u0B4D;
+$GurmukhiLetter = [\u0A05-\u0A39 \u0A59-\u0A5E];
+$GurmukhiSignVirama = \u0A4D;
+$TamilLetter = [\u0B85-\u0BB9];
+$TamilSignVirama = \u0BCD;
+$TeluguLetter = [\u0C05-\u0C39 \u0C58-\u0C61];
+$TeluguSignVirama = \u0C4D;
#
# Korean Syllable Definitions
#
-$L = [:Hangul_Syllable_Type = L:];
-$V = [:Hangul_Syllable_Type = V:];
-$T = [:Hangul_Syllable_Type = T:];
+$L = [\p{Grapheme_Cluster_Break = L}];
+$V = [\p{Grapheme_Cluster_Break = V}];
+$T = [\p{Grapheme_Cluster_Break = T}];
-$LV = [:Hangul_Syllable_Type = LV:];
-$LVT = [:Hangul_Syllable_Type = LVT:];
+$LV = [\p{Grapheme_Cluster_Break = LV}];
+$LVT = [\p{Grapheme_Cluster_Break = LVT}];
-$HangulSyllable = $L+ | ($L* ($LV? $V+ | $LV | $LVT) $T*) | $T+;
-#
-# Forward Break Rules
-#
+## -------------------------------------------------
+!!chain;
+
+!!forward;
+
$CR $LF;
-([^$Control] | $HangulSyllable) $Extend*;
-.;
+$BengaliLetter ($BengaliSignVirama $BengaliLetter?)+;
+$GujaratiLetter ($GujaratiSignVirama $GujaratiLetter?)+;
+$DevanagariLetter ($DevanagariSignVirama $DevanagariLetter?)+;
+$KannadaLetter ($KannadaSignVirama $KannadaLetter?)+;
+$MalayalamLetter ($MalayalamSignVirama $MalayalamLetter?)+;
+$OriyaLetter ($OriyaSignVirama $OriyaLetter?)+;
+$GurmukhiLetter ($GurmukhiSignVirama $GurmukhiLetter?)+;
+$TamilLetter ($TamilSignVirama $TamilLetter?)+;
+$TeluguLetter ($TeluguSignVirama $TeluguLetter?)+;
+
+$L ($L | $V | $LV | $LVT);
+($LV | $V) ($V | $T);
+($LVT | $T) $T;
+
+[^$Control $CR $LF] $Extend;
+
+[^$Control $CR $LF] $SpacingMark;
+$Prepend [^$Control $CR $LF];
+
+
+## -------------------------------------------------
+
+!!reverse;
+$LF $CR;
+($BengaliLetter? $BengaliSignVirama)+ $BengaliLetter;
+($GujaratiLetter? $GujaratiSignVirama)+ $GujaratiLetter;
+($DevanagariLetter? $DevanagariSignVirama)+ $DevanagariLetter;
+($KannadaLetter? $KannadaSignVirama)+ $KannadaLetter;
+($MalayalamLetter? $MalayalamSignVirama)+ $MalayalamLetter;
+($OriyaLetter? $OriyaSignVirama)+ $OriyaLetter;
+($GurmukhiLetter? $GurmukhiSignVirama)+ $GurmukhiLetter;
+($TamilLetter? $TamilSignVirama)+ $TamilLetter;
+($TeluguLetter? $TeluguSignVirama)+ $TeluguLetter;
+($L | $V | $LV | $LVT) $L;
+($V | $T) ($LV | $V);
+$T ($LVT | $T);
+
+$Extend [^$Control $CR $LF];
+$SpacingMark [^$Control $CR $LF];
+[^$Control $CR $LF] $Prepend;
+
+
+## -------------------------------------------------
+
+!!safe_reverse;
+
+
+## -------------------------------------------------
+
+!!safe_forward;
-#
-# Reverse Rule, back up to the beginning of some preceding grapheme cluster.
-#
-! ($Extend | $V | $T )* ($LF $CR | ($LV | $LVT)?$L* | .);
diff --git a/i18npool/source/isolang/isolang.cxx b/i18npool/source/isolang/isolang.cxx
index 9d80bf7050e6..357be80a69ea 100644
--- a/i18npool/source/isolang/isolang.cxx
+++ b/i18npool/source/isolang/isolang.cxx
@@ -287,8 +287,9 @@ static MsLangId::IsoLangEntry const aImplIsoLangEntries[] =
{ LANGUAGE_BELARUSIAN, "be", "BY" },
{ LANGUAGE_CATALAN, "ca", "ES" }, // Spain (default)
{ LANGUAGE_CATALAN, "ca", "AD" }, // Andorra
- { LANGUAGE_USER_CATALAN_VALENCIAN, "ca", "XV" }, // XV: ISO 3166 user-assigned; old workaround for UI localization only, do not use in document content! Kept just in case..
- { LANGUAGE_USER_CATALAN_VALENCIAN, "qcv", "ES" }, // qcv: ISO 639-3 reserved-for-local-use; for UI localization, use in document content on own risk!
+ { LANGUAGE_USER_CATALAN_VALENCIAN, "ca", "XV" }, // XV: ISO 3166 user-assigned; workaround for UI localization only, do not use in document content!
+ { LANGUAGE_CATALAN, "qcv", "ES" }, // qcv: ISO 639-3 reserved-for-local-use; UI localization quirk only, do not use in document content!
+// { LANGUAGE_USER_CATALAN_VALENCIAN, "ca", "ES" }, // In case MS format files escaped into the wild, map them back.
{ LANGUAGE_FRENCH_CAMEROON, "fr", "CM" },
{ LANGUAGE_FRENCH_COTE_D_IVOIRE, "fr", "CI" },
{ LANGUAGE_FRENCH_HAITI, "fr", "HT" },
@@ -457,6 +458,9 @@ static MsLangId::IsoLangEntry const aImplIsoLangEntries[] =
{ LANGUAGE_USER_TAHITIAN, "ty", "PF" },
{ LANGUAGE_USER_MALAGASY_PLATEAU, "plt", "MG" },
{ LANGUAGE_USER_BAFIA, "ksf", "CM" },
+ { LANGUAGE_USER_GIKUYU, "ki", "KE" },
+ { LANGUAGE_USER_RUSYN_UKRAINE, "rue", "UA" },
+ { LANGUAGE_USER_RUSYN_SLOVAKIA, "rue", "SK" },
{ LANGUAGE_NONE, "zxx", "" }, // added to ISO 639-2 on 2006-01-11: Used to declare the absence of linguistic information
{ LANGUAGE_DONTKNOW, "", "" } // marks end of table
};
@@ -1005,6 +1009,28 @@ LanguageType MsLangId::convertIsoByteStringToLanguage(
}
// -----------------------------------------------------------------------
+
+struct IsoLangGLIBCModifiersEntry
+{
+ LanguageType mnLang;
+ sal_Char maLangStr[4];
+ sal_Char maCountry[3];
+ sal_Char maAtString[9];
+};
+
+static IsoLangGLIBCModifiersEntry const aImplIsoLangGLIBCModifiersEntries[] =
+{
+ // MS-LANGID codes ISO639-1/2/3 ISO3166 glibc modifier
+ { LANGUAGE_BOSNIAN_CYRILLIC_BOSNIA_HERZEGOVINA, "bs", "BA", "cyrillic" },
+ { LANGUAGE_USER_SERBIAN_LATIN_SERBIA, "sr", "RS", "latin" }, // Serbian Latin in Serbia
+ { LANGUAGE_SERBIAN_LATIN, "sr", "CS", "latin" }, // Serbian Latin in Serbia and Montenegro
+ { LANGUAGE_USER_SERBIAN_LATIN_MONTENEGRO, "sr", "ME", "latin" }, // Serbian Latin in Montenegro
+ { LANGUAGE_SERBIAN_LATIN_NEUTRAL, "sr", "", "latin" },
+ { LANGUAGE_AZERI_CYRILLIC, "az", "AZ", "cyrillic" },
+ { LANGUAGE_UZBEK_CYRILLIC, "uz", "UZ", "cyrillic" },
+ { LANGUAGE_DONTKNOW, "", "", "" } // marks end of table
+};
+
// convert a unix locale string into LanguageType
// static
@@ -1013,15 +1039,20 @@ LanguageType MsLangId::convertUnxByteStringToLanguage(
{
rtl::OString aLang;
rtl::OString aCountry;
+ rtl::OString aAtString;
sal_Int32 nLangSepPos = rString.indexOf( (sal_Char)'_' );
sal_Int32 nCountrySepPos = rString.indexOf( (sal_Char)'.' );
+ sal_Int32 nAtPos = rString.indexOf( (sal_Char)'@' );
if (nCountrySepPos < 0)
- nCountrySepPos = rString.indexOf( (sal_Char)'@' );
+ nCountrySepPos = nAtPos;
if (nCountrySepPos < 0)
nCountrySepPos = rString.getLength();
+ if (nAtPos >= 0)
+ aAtString = rString.copy( nAtPos+1 );
+
if ( ((nLangSepPos >= 0) && (nLangSepPos > nCountrySepPos))
|| ((nLangSepPos < 0)) )
{
@@ -1035,6 +1066,30 @@ LanguageType MsLangId::convertUnxByteStringToLanguage(
aCountry = rString.copy( nLangSepPos+1, nCountrySepPos - nLangSepPos - 1);
}
+ // if there is a glibc modifier, first look for exact match in modifier table
+ if (aAtString.getLength())
+ {
+ // language is lower case in table
+ rtl::OString aLowerLang = aLang.toAsciiLowerCase();
+ // country is upper case in table
+ rtl::OString aUpperCountry = aCountry.toAsciiUpperCase();
+ const IsoLangGLIBCModifiersEntry* pGLIBCModifiersEntry = aImplIsoLangGLIBCModifiersEntries;
+ do
+ {
+ if (( aLowerLang.equals( pGLIBCModifiersEntry->maLangStr ) ) &&
+ ( aAtString.equals( pGLIBCModifiersEntry->maAtString ) ))
+ {
+ if ( !aUpperCountry.getLength() ||
+ aUpperCountry.equals( pGLIBCModifiersEntry->maCountry ) )
+ {
+ return pGLIBCModifiersEntry->mnLang;
+ }
+ }
+ ++pGLIBCModifiersEntry;
+ }
+ while ( pGLIBCModifiersEntry->mnLang != LANGUAGE_DONTKNOW );
+ }
+
return convertIsoNamesToLanguage( aLang, aCountry );
}
diff --git a/i18npool/source/isolang/langid.pl b/i18npool/source/isolang/langid.pl
index 06883279345b..8035178b7bb5 100755
--- a/i18npool/source/isolang/langid.pl
+++ b/i18npool/source/isolang/langid.pl
@@ -39,7 +39,8 @@ sub Usage()
"\n",
"langid - a hackish utility to lookup lang.h language defines and LangIDs,\n",
"isolang.cxx ISO639/ISO3166 mapping, locale data files, langtab.src language\n",
- "listbox entries, postset.mk and file_ooo.scp registry name.\n\n",
+ "listbox entries, postset.mk, file_ooo.scp registry name, globals.pm and\n",
+ "msi-encodinglist.txt\n\n",
"Usage: $0 [--single] {language string} | {LangID} | {primarylanguage sublanguage} | {language-country}\n\n",
@@ -105,7 +106,8 @@ sub grepFile($$$$@)
my( $regex, $path, $module, $name, @addregex) = @_;
my @result;
my $found = 0;
- my $arefound = '';
+ my $areopen = 0;
+ my $arecloser = '';
my $file;
# Try module under current working directory first to catch local
# modifications. A Not yet delivered lang.h is a special case.
@@ -145,17 +147,22 @@ sub grepFile($$$$@)
print "$line\n";
push( @result, $line);
}
- else
+ elsif (@addregex)
{
- for my $re (@addregex)
+ # By convention first element is opener, second element is closer.
+ if (!$areopen)
{
- if ($re ne $arefound && $line =~ /$re/)
+ if ($line =~ /$addregex[0]/)
{
- if ($arefound eq '')
- {
- $arefound = $re;
- }
- else
+ $areopen = 1;
+ $arecloser = $addregex[1];
+ }
+ }
+ if ($areopen)
+ {
+ for (my $i = 2; $i < @addregex; ++$i)
+ {
+ if ($line =~ /$addregex[$i]/)
{
if (!$found)
{
@@ -167,13 +174,19 @@ sub grepFile($$$$@)
push( @result, $line);
}
}
+ if ($line =~ /$arecloser/)
+ {
+ $areopen = 0;
+ }
}
}
}
close( IN);
}
if (!$found) {
- print "Not found in $file\n"; }
+ print "Not found in $file\n";
+ #print "Not found in $file for $regex @addregex\n";
+ }
return @result;
}
@@ -317,13 +330,13 @@ sub main()
if ($coun)
{
$loca = $lang . "_" . $coun;
- push( @langcoungreplist, $lang . '(-' . $coun . ')?');
+ push( @langcoungreplist, '\b' . $lang . '\b(-' . $coun . ')?');
}
else
{
$loca = $lang;
$coun = "";
- push( @langcoungreplist, $lang);
+ push( @langcoungreplist, '\b' . $lang . '\b');
}
my $file = "$SRC_ROOT/i18npool/source/localedata/data/$loca.xml";
my $found;
@@ -385,12 +398,24 @@ sub main()
grepFile(
'^\s*Name\s*\(' . $langcoun . '\)\s*=',
"$SRC_ROOT", "scp2", "source/ooo/file_ooo.scp", ());
+
# completelangiso=af ar as-IN ... zu
grepFile(
- '^\s*completelangiso\s*[= ](.{2,3}(-..)?)*' . $langcoun . '',
+ '^\s*completelangiso\s*=\s*(\s*([a-z]{2,3})(-[A-Z][A-Z])?)*' . $langcoun . '',
"$SRC_ROOT", "solenv", "inc/postset.mk",
# needs a duplicated pair of backslashes to produce a literal \\
- ('^\s*completelangiso\s*=', '^\s*' . $langcoun . '\s*\\\\*$'));
+ ('^\s*completelangiso\s*=', '^\s*$', '^\s*' . $langcoun . '\s*\\\\*$'));
+
+ # @noMSLocaleLangs = ( "br", "bs", ... )
+ grepFile(
+ '^\s*@noMSLocaleLangs\s*=\s*\(\s*(\s*"([a-z]{2,3})(-[A-Z][A-Z])?"\s*,?)*' . $langcoun . '',
+ "$SRC_ROOT", "solenv", "bin/modules/installer/globals.pm",
+ ('^\s*@noMSLocaleLangs\s*=', '\)\s*$', '"' . $langcoun . '"'));
+
+ # af 1252 1078 # Afrikaans
+ grepFile(
+ '^\s*' . $langcoun . '',
+ "$SRC_ROOT", "setup_native", "source/win32/msi-encodinglist.txt", ());
}
}
return 0;
diff --git a/i18npool/source/isolang/mslangid.cxx b/i18npool/source/isolang/mslangid.cxx
index 8e9dddff872b..da9da0ff8646 100644
--- a/i18npool/source/isolang/mslangid.cxx
+++ b/i18npool/source/isolang/mslangid.cxx
@@ -102,6 +102,8 @@ LanguageType MsLangId::getRealLanguageWithoutConfig( LanguageType nLang )
nLang = getSystemUILanguage();
break;
default:
+ /* TODO: would this be useful here? */
+ //nLang = MsLangId::getReplacementForObsoleteLanguage( nLang);
; // nothing
}
if (nLang == LANGUAGE_DONTKNOW)
@@ -128,6 +130,8 @@ LanguageType MsLangId::getRealLanguage( LanguageType nLang )
nLang = nConfiguredSystemUILanguage;
break;
default:
+ /* TODO: would this be useful here? */
+ //nLang = MsLangId::getReplacementForObsoleteLanguage( nLang);
; // nothing
}
if (nLang == LANGUAGE_DONTKNOW)
@@ -451,6 +455,12 @@ LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang )
case LANGUAGE_SPANISH_DATED:
nLang = LANGUAGE_SPANISH_MODERN;
break;
+
+ // Do not use ca-XV for document content.
+ /* TODO: remove in case we implement BCP47 language tags. */
+ case LANGUAGE_USER_CATALAN_VALENCIAN:
+ nLang = LANGUAGE_CATALAN;
+ break;
}
return nLang;
}
diff --git a/i18npool/source/localedata/LocaleNode.cxx b/i18npool/source/localedata/LocaleNode.cxx
index 4204b3636fcb..7a520047637d 100644
--- a/i18npool/source/localedata/LocaleNode.cxx
+++ b/i18npool/source/localedata/LocaleNode.cxx
@@ -493,6 +493,14 @@ void LCCTYPENode::generateCode (const OFileWriter &of) const
if (aDoubleQuoteStart == aDoubleQuoteEnd)
fprintf( stderr, "Warning: %s\n",
"DoubleQuotationStart equals DoubleQuotationEnd. Not necessarily an error, but unusual.");
+ /* TODO: should equalness of single and double quotes be an error? Would
+ * need to adapt quite some locales' data. */
+ if (aQuoteStart == aDoubleQuoteStart)
+ fprintf( stderr, "Warning: %s\n",
+ "QuotationStart equals DoubleQuotationStart. Not necessarily an error, but unusual.");
+ if (aQuoteEnd == aDoubleQuoteEnd)
+ fprintf( stderr, "Warning: %s\n",
+ "QuotationEnd equals DoubleQuotationEnd. Not necessarily an error, but unusual.");
writeParameterCheckLen( of, "TimeAM", "timeAM", 1, -1);
writeParameterCheckLen( of, "TimePM", "timePM", 1, -1);
@@ -689,7 +697,7 @@ void LCFormatNode::generateCode (const OFileWriter &of) const
incErrorInt( "ThousandSeparator not present in FormatCode formatindex=\"%d\".",
formatindex);
}
- if (nDec <= nGrp)
+ if (nDec >= 0 && nGrp >= 0 && nDec <= nGrp)
incErrorInt( "Ordering of ThousandSeparator and DecimalSeparator not correct in formatindex=\"%d\".",
formatindex);
}
@@ -724,7 +732,7 @@ void LCFormatNode::generateCode (const OFileWriter &of) const
incErrorInt( "Time100SecSeparator+00 not present in FormatCode formatindex=\"%d\".",
formatindex);
}
- if (n100s <= nTime)
+ if (n100s >= 0 && nTime >= 0 && n100s <= nTime)
incErrorInt( "Ordering of Time100SecSeparator and TimeSeparator not correct in formatindex=\"%d\".",
formatindex);
}
diff --git a/i18npool/source/localedata/data/ar_DZ.xml b/i18npool/source/localedata/data/ar_DZ.xml
new file mode 100644
index 000000000000..68cf3ed441e8
--- /dev/null
+++ b/i18npool/source/localedata/data/ar_DZ.xml
@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE Locale SYSTEM 'locale.dtd'>
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="yes" version="1.0">
+ <LC_INFO>
+ <Language>
+ <LangID>ar</LangID>
+ <DefaultName>Arabic</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>DZ</CountryID>
+ <DefaultName>Algeria</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE>
+ <Separators>
+ <DateSeparator>/</DateSeparator>
+ <ThousandSeparator> </ThousandSeparator>
+ <DecimalSeparator>٫</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>٫</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator>، </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator>، </LongDateDaySeparator>
+ <LongDateMonthSeparator>، </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>‘</QuotationStart>
+ <QuotationEnd>’</QuotationEnd>
+ <DoubleQuotationStart>"</DoubleQuotationStart>
+ <DoubleQuotationEnd>"</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>ص</TimeAM>
+ <TimePM>م</TimePM>
+ <MeasurementSystem>metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$د.ج.‏-1401]">
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>General</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0٫00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode># ##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode># ##0٫00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode># ###٫00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0٫00E+000</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0٫00E+00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0٫00%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[CURRENCY] # ##0;[CURRENCY] # ##0 -</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[CURRENCY] # ##0٫00;[CURRENCY] # ##0٫00 -</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[CURRENCY] # ##0;[RED][CURRENCY] # ##0 -</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[CURRENCY] # ##0٫00;[RED][CURRENCY] # ##0٫00 -</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode># ##0٫00 CCC</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[CURRENCY] # ##0٫--;[RED][CURRENCY] # ##0٫-- -</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey1" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>[~hijri]D/MM/YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>[~hijri]NNN DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>[NatNum1][~hijri]YYYY/MM/D</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>D/M/YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>[NatNum1][~hijri]NNN DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>[NatNum1]DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>NNN DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>[NatNum1]NNN DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey13" default="false" type="long" usage="DATE" formatindex="27">
+ <FormatCode>DD MMMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="28">
+ <FormatCode>[NatNum1]DD MMMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>[~hijri]DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>[NatNum1][~hijri]DD MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>[NatNum1][~hijri]YYYY/MM/D</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>[NatNum1]YY/MM/DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>[NatNum1]YYYY/MM/DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>DD MMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="true" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="true" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="false" type="short" usage="TIME" formatindex="41">
+ <FormatCode>AM/PMMM:HH</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="false" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>AM/PMSS:MM:HH</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS٫00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS٫00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>[~hijri]AM/PMHH:MM YYYY/MM/D</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>[NatNum1][~hijri]AM/PMHH:MM YYYY/MM/D</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey3" default="false" type="medium" usage="DATE_TIME" formatindex="50">
+ <FormatCode>AM/PMHH:MM YYYY/MM/D</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey4" default="false" type="medium" usage="DATE_TIME" formatindex="51">
+ <FormatCode>[NatNum1]AM/PMHH:MM YYYY/MM/D</FormatCode>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION ref="en_US" />
+ <LC_SEARCH ref="en_US"/>
+ <LC_INDEX ref="ar_EG"/>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>ح</DefaultAbbrvName>
+ <DefaultFullName>الأحد</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>ن</DefaultAbbrvName>
+ <DefaultFullName>الاثنين</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>ث</DefaultAbbrvName>
+ <DefaultFullName>الثلاثاء</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>ر</DefaultAbbrvName>
+ <DefaultFullName>الأربعاء</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>خ</DefaultAbbrvName>
+ <DefaultFullName>الخميس</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>ج</DefaultAbbrvName>
+ <DefaultFullName>الجمعة</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>س</DefaultAbbrvName>
+ <DefaultFullName>السبت</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>جانفي</DefaultAbbrvName>
+ <DefaultFullName>جانفي</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>فيفري</DefaultAbbrvName>
+ <DefaultFullName>فيفري</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>مارس</DefaultAbbrvName>
+ <DefaultFullName>مارس</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>أفريل</DefaultAbbrvName>
+ <DefaultFullName>أفريل</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>ماي</DefaultAbbrvName>
+ <DefaultFullName>ماي</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>جوان</DefaultAbbrvName>
+ <DefaultFullName>جوان</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>جويلية</DefaultAbbrvName>
+ <DefaultFullName>جويلية</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>أوت</DefaultAbbrvName>
+ <DefaultFullName>أوت</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>سبتمبر</DefaultAbbrvName>
+ <DefaultFullName>سبتمبر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>أكتوبر</DefaultAbbrvName>
+ <DefaultFullName>أكتوبر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>نوفمبر</DefaultAbbrvName>
+ <DefaultFullName>نوفمبر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>ديسمبر</DefaultAbbrvName>
+ <DefaultFullName>ديسمبر</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>ق.م</DefaultAbbrvName>
+ <DefaultFullName>قبل الميلاد</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>م</DefaultAbbrvName>
+ <DefaultFullName>ميلادي</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>sat</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ <Calendar unoid="hijri" default="false">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>ح</DefaultAbbrvName>
+ <DefaultFullName>الأحد</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>ن</DefaultAbbrvName>
+ <DefaultFullName>الاثنين</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>ث</DefaultAbbrvName>
+ <DefaultFullName>الثلاثاء</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>ر</DefaultAbbrvName>
+ <DefaultFullName>الأربعاء</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>خ</DefaultAbbrvName>
+ <DefaultFullName>الخميس</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>ج</DefaultAbbrvName>
+ <DefaultFullName>الجمعة</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>س</DefaultAbbrvName>
+ <DefaultFullName>السبت</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>محرم</DefaultAbbrvName>
+ <DefaultFullName>محرم</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>صفر</DefaultAbbrvName>
+ <DefaultFullName>صفر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>ربيع الأول</DefaultAbbrvName>
+ <DefaultFullName>ربيع الأول</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>ربيع الآخر</DefaultAbbrvName>
+ <DefaultFullName>ربيع الآخر</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>جمادى الأولى</DefaultAbbrvName>
+ <DefaultFullName>جمادى الأولى</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>جمادى الآخرة</DefaultAbbrvName>
+ <DefaultFullName>جمادى الآخرة</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>رجب</DefaultAbbrvName>
+ <DefaultFullName>رجب</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>شعبان</DefaultAbbrvName>
+ <DefaultFullName>شعبان</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>رمضان</DefaultAbbrvName>
+ <DefaultFullName>رمضان</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>شوال</DefaultAbbrvName>
+ <DefaultFullName>شوال</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>ذو القعدة</DefaultAbbrvName>
+ <DefaultFullName>ذو القعدة</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>ذو الحجة</DefaultAbbrvName>
+ <DefaultFullName>ذو الحجة</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>BeforeHijra</EraID>
+ <DefaultAbbrvName>ه‍</DefaultAbbrvName>
+ <DefaultFullName>قبل الهجرة</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>AfterHijra</EraID>
+ <DefaultAbbrvName/>
+ <DefaultFullName>هجري</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>sat</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>DZD</CurrencyID>
+ <CurrencySymbol>د.ج.‏</CurrencySymbol>
+ <BankSymbol>DZD</BankSymbol>
+ <CurrencyName>دينار جزائري</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION ref="en_US"/>
+ <LC_MISC ref="ar_EG"/>
+ <LC_NumberingLevel ref="ar_EG"/>
+ <LC_OutLineNumberingLevel ref="ar_EG"/>
+</Locale>
diff --git a/i18npool/source/localedata/data/localedata_euro.map b/i18npool/source/localedata/data/localedata_euro.map
index 130a3c5a249f..e0564b85ea25 100644
--- a/i18npool/source/localedata/data/localedata_euro.map
+++ b/i18npool/source/localedata/data/localedata_euro.map
@@ -55,6 +55,7 @@ getAllCalendars_pl_PL;
getAllCalendars_pt_BR;
getAllCalendars_pt_PT;
getAllCalendars_ro_RO;
+getAllCalendars_rue_SK;
getAllCalendars_ru_RU;
getAllCalendars_sc_IT;
getAllCalendars_sh_ME;
@@ -124,6 +125,7 @@ getAllCurrencies_pl_PL;
getAllCurrencies_pt_BR;
getAllCurrencies_pt_PT;
getAllCurrencies_ro_RO;
+getAllCurrencies_rue_SK;
getAllCurrencies_ru_RU;
getAllCurrencies_sc_IT;
getAllCurrencies_sh_ME;
@@ -193,6 +195,7 @@ getAllFormats0_pl_PL;
getAllFormats0_pt_BR;
getAllFormats0_pt_PT;
getAllFormats0_ro_RO;
+getAllFormats0_rue_SK;
getAllFormats0_ru_RU;
getAllFormats0_sc_IT;
getAllFormats0_sh_ME;
@@ -262,6 +265,7 @@ getBreakIteratorRules_pl_PL;
getBreakIteratorRules_pt_BR;
getBreakIteratorRules_pt_PT;
getBreakIteratorRules_ro_RO;
+getBreakIteratorRules_rue_SK;
getBreakIteratorRules_ru_RU;
getBreakIteratorRules_sc_IT;
getBreakIteratorRules_sh_ME;
@@ -331,6 +335,7 @@ getCollationOptions_pl_PL;
getCollationOptions_pt_BR;
getCollationOptions_pt_PT;
getCollationOptions_ro_RO;
+getCollationOptions_rue_SK;
getCollationOptions_ru_RU;
getCollationOptions_sc_IT;
getCollationOptions_sh_ME;
@@ -400,6 +405,7 @@ getCollatorImplementation_pl_PL;
getCollatorImplementation_pt_BR;
getCollatorImplementation_pt_PT;
getCollatorImplementation_ro_RO;
+getCollatorImplementation_rue_SK;
getCollatorImplementation_ru_RU;
getCollatorImplementation_sc_IT;
getCollatorImplementation_sh_ME;
@@ -469,6 +475,7 @@ getContinuousNumberingLevels_pl_PL;
getContinuousNumberingLevels_pt_BR;
getContinuousNumberingLevels_pt_PT;
getContinuousNumberingLevels_ro_RO;
+getContinuousNumberingLevels_rue_SK;
getContinuousNumberingLevels_ru_RU;
getContinuousNumberingLevels_sc_IT;
getContinuousNumberingLevels_sh_ME;
@@ -538,6 +545,7 @@ getFollowPageWords_pl_PL;
getFollowPageWords_pt_BR;
getFollowPageWords_pt_PT;
getFollowPageWords_ro_RO;
+getFollowPageWords_rue_SK;
getFollowPageWords_ru_RU;
getFollowPageWords_sc_IT;
getFollowPageWords_sh_ME;
@@ -607,6 +615,7 @@ getForbiddenCharacters_pl_PL;
getForbiddenCharacters_pt_BR;
getForbiddenCharacters_pt_PT;
getForbiddenCharacters_ro_RO;
+getForbiddenCharacters_rue_SK;
getForbiddenCharacters_ru_RU;
getForbiddenCharacters_sc_IT;
getForbiddenCharacters_sh_ME;
@@ -676,6 +685,7 @@ getIndexAlgorithm_pl_PL;
getIndexAlgorithm_pt_BR;
getIndexAlgorithm_pt_PT;
getIndexAlgorithm_ro_RO;
+getIndexAlgorithm_rue_SK;
getIndexAlgorithm_ru_RU;
getIndexAlgorithm_sc_IT;
getIndexAlgorithm_sh_ME;
@@ -745,6 +755,7 @@ getLCInfo_pl_PL;
getLCInfo_pt_BR;
getLCInfo_pt_PT;
getLCInfo_ro_RO;
+getLCInfo_rue_SK;
getLCInfo_ru_RU;
getLCInfo_sc_IT;
getLCInfo_sh_ME;
@@ -814,6 +825,7 @@ getLocaleItem_pl_PL;
getLocaleItem_pt_BR;
getLocaleItem_pt_PT;
getLocaleItem_ro_RO;
+getLocaleItem_rue_SK;
getLocaleItem_ru_RU;
getLocaleItem_sc_IT;
getLocaleItem_sh_ME;
@@ -883,6 +895,7 @@ getOutlineNumberingLevels_pl_PL;
getOutlineNumberingLevels_pt_BR;
getOutlineNumberingLevels_pt_PT;
getOutlineNumberingLevels_ro_RO;
+getOutlineNumberingLevels_rue_SK;
getOutlineNumberingLevels_ru_RU;
getOutlineNumberingLevels_sc_IT;
getOutlineNumberingLevels_sh_ME;
@@ -952,6 +965,7 @@ getReservedWords_pl_PL;
getReservedWords_pt_BR;
getReservedWords_pt_PT;
getReservedWords_ro_RO;
+getReservedWords_rue_SK;
getReservedWords_ru_RU;
getReservedWords_sc_IT;
getReservedWords_sh_ME;
@@ -1021,6 +1035,7 @@ getSearchOptions_pl_PL;
getSearchOptions_pt_BR;
getSearchOptions_pt_PT;
getSearchOptions_ro_RO;
+getSearchOptions_rue_SK;
getSearchOptions_ru_RU;
getSearchOptions_sc_IT;
getSearchOptions_sh_ME;
@@ -1090,6 +1105,7 @@ getTransliterations_pl_PL;
getTransliterations_pt_BR;
getTransliterations_pt_PT;
getTransliterations_ro_RO;
+getTransliterations_rue_SK;
getTransliterations_ru_RU;
getTransliterations_sc_IT;
getTransliterations_sh_ME;
@@ -1159,6 +1175,7 @@ getUnicodeScripts_pl_PL;
getUnicodeScripts_pt_BR;
getUnicodeScripts_pt_PT;
getUnicodeScripts_ro_RO;
+getUnicodeScripts_rue_SK;
getUnicodeScripts_ru_RU;
getUnicodeScripts_sc_IT;
getUnicodeScripts_sh_ME;
diff --git a/i18npool/source/localedata/data/localedata_others.map b/i18npool/source/localedata/data/localedata_others.map
index fd9e13cfb779..e5de10cb68e5 100644
--- a/i18npool/source/localedata/data/localedata_others.map
+++ b/i18npool/source/localedata/data/localedata_others.map
@@ -4,6 +4,7 @@ getAllCalendars_af_NA;
getAllCalendars_af_ZA;
getAllCalendars_ak_GH;
getAllCalendars_am_ET;
+getAllCalendars_ar_DZ;
getAllCalendars_ar_EG;
getAllCalendars_ar_LB;
getAllCalendars_ar_OM;
@@ -37,6 +38,7 @@ getAllCalendars_ky_KG;
getAllCalendars_lg_UG;
getAllCalendars_ln_CD;
getAllCalendars_lo_LA;
+getAllCalendars_mai_IN;
getAllCalendars_ml_IN;
getAllCalendars_mn_MN;
getAllCalendars_mr_IN;
@@ -80,6 +82,7 @@ getAllCurrencies_af_NA;
getAllCurrencies_af_ZA;
getAllCurrencies_ak_GH;
getAllCurrencies_am_ET;
+getAllCurrencies_ar_DZ;
getAllCurrencies_ar_EG;
getAllCurrencies_ar_LB;
getAllCurrencies_ar_OM;
@@ -113,6 +116,7 @@ getAllCurrencies_ky_KG;
getAllCurrencies_lg_UG;
getAllCurrencies_ln_CD;
getAllCurrencies_lo_LA;
+getAllCurrencies_mai_IN;
getAllCurrencies_ml_IN;
getAllCurrencies_mn_MN;
getAllCurrencies_mr_IN;
@@ -156,6 +160,7 @@ getAllFormats0_af_NA;
getAllFormats0_af_ZA;
getAllFormats0_ak_GH;
getAllFormats0_am_ET;
+getAllFormats0_ar_DZ;
getAllFormats0_ar_EG;
getAllFormats0_ar_LB;
getAllFormats0_ar_OM;
@@ -189,6 +194,7 @@ getAllFormats0_ky_KG;
getAllFormats0_lg_UG;
getAllFormats0_ln_CD;
getAllFormats0_lo_LA;
+getAllFormats0_mai_IN;
getAllFormats0_ml_IN;
getAllFormats0_mn_MN;
getAllFormats0_mr_IN;
@@ -232,6 +238,7 @@ getBreakIteratorRules_af_NA;
getBreakIteratorRules_af_ZA;
getBreakIteratorRules_ak_GH;
getBreakIteratorRules_am_ET;
+getBreakIteratorRules_ar_DZ;
getBreakIteratorRules_ar_EG;
getBreakIteratorRules_ar_LB;
getBreakIteratorRules_ar_OM;
@@ -265,6 +272,7 @@ getBreakIteratorRules_ky_KG;
getBreakIteratorRules_lg_UG;
getBreakIteratorRules_ln_CD;
getBreakIteratorRules_lo_LA;
+getBreakIteratorRules_mai_IN;
getBreakIteratorRules_ml_IN;
getBreakIteratorRules_mn_MN;
getBreakIteratorRules_mr_IN;
@@ -308,6 +316,7 @@ getCollationOptions_af_NA;
getCollationOptions_af_ZA;
getCollationOptions_ak_GH;
getCollationOptions_am_ET;
+getCollationOptions_ar_DZ;
getCollationOptions_ar_EG;
getCollationOptions_ar_LB;
getCollationOptions_ar_OM;
@@ -341,6 +350,7 @@ getCollationOptions_ky_KG;
getCollationOptions_lg_UG;
getCollationOptions_ln_CD;
getCollationOptions_lo_LA;
+getCollationOptions_mai_IN;
getCollationOptions_ml_IN;
getCollationOptions_mn_MN;
getCollationOptions_mr_IN;
@@ -384,6 +394,7 @@ getCollatorImplementation_af_NA;
getCollatorImplementation_af_ZA;
getCollatorImplementation_ak_GH;
getCollatorImplementation_am_ET;
+getCollatorImplementation_ar_DZ;
getCollatorImplementation_ar_EG;
getCollatorImplementation_ar_LB;
getCollatorImplementation_ar_OM;
@@ -417,6 +428,7 @@ getCollatorImplementation_ky_KG;
getCollatorImplementation_lg_UG;
getCollatorImplementation_ln_CD;
getCollatorImplementation_lo_LA;
+getCollatorImplementation_mai_IN;
getCollatorImplementation_ml_IN;
getCollatorImplementation_mn_MN;
getCollatorImplementation_mr_IN;
@@ -460,6 +472,7 @@ getContinuousNumberingLevels_af_NA;
getContinuousNumberingLevels_af_ZA;
getContinuousNumberingLevels_ak_GH;
getContinuousNumberingLevels_am_ET;
+getContinuousNumberingLevels_ar_DZ;
getContinuousNumberingLevels_ar_EG;
getContinuousNumberingLevels_ar_LB;
getContinuousNumberingLevels_ar_OM;
@@ -493,6 +506,7 @@ getContinuousNumberingLevels_ky_KG;
getContinuousNumberingLevels_lg_UG;
getContinuousNumberingLevels_ln_CD;
getContinuousNumberingLevels_lo_LA;
+getContinuousNumberingLevels_mai_IN;
getContinuousNumberingLevels_ml_IN;
getContinuousNumberingLevels_mn_MN;
getContinuousNumberingLevels_mr_IN;
@@ -536,6 +550,7 @@ getFollowPageWords_af_NA;
getFollowPageWords_af_ZA;
getFollowPageWords_ak_GH;
getFollowPageWords_am_ET;
+getFollowPageWords_ar_DZ;
getFollowPageWords_ar_EG;
getFollowPageWords_ar_LB;
getFollowPageWords_ar_OM;
@@ -569,6 +584,7 @@ getFollowPageWords_ky_KG;
getFollowPageWords_lg_UG;
getFollowPageWords_ln_CD;
getFollowPageWords_lo_LA;
+getFollowPageWords_mai_IN;
getFollowPageWords_ml_IN;
getFollowPageWords_mn_MN;
getFollowPageWords_mr_IN;
@@ -612,6 +628,7 @@ getForbiddenCharacters_af_NA;
getForbiddenCharacters_af_ZA;
getForbiddenCharacters_ak_GH;
getForbiddenCharacters_am_ET;
+getForbiddenCharacters_ar_DZ;
getForbiddenCharacters_ar_EG;
getForbiddenCharacters_ar_LB;
getForbiddenCharacters_ar_OM;
@@ -645,6 +662,7 @@ getForbiddenCharacters_ky_KG;
getForbiddenCharacters_lg_UG;
getForbiddenCharacters_ln_CD;
getForbiddenCharacters_lo_LA;
+getForbiddenCharacters_mai_IN;
getForbiddenCharacters_ml_IN;
getForbiddenCharacters_mn_MN;
getForbiddenCharacters_mr_IN;
@@ -688,6 +706,7 @@ getIndexAlgorithm_af_NA;
getIndexAlgorithm_af_ZA;
getIndexAlgorithm_ak_GH;
getIndexAlgorithm_am_ET;
+getIndexAlgorithm_ar_DZ;
getIndexAlgorithm_ar_EG;
getIndexAlgorithm_ar_LB;
getIndexAlgorithm_ar_OM;
@@ -721,6 +740,7 @@ getIndexAlgorithm_ky_KG;
getIndexAlgorithm_lg_UG;
getIndexAlgorithm_ln_CD;
getIndexAlgorithm_lo_LA;
+getIndexAlgorithm_mai_IN;
getIndexAlgorithm_ml_IN;
getIndexAlgorithm_mn_MN;
getIndexAlgorithm_mr_IN;
@@ -764,6 +784,7 @@ getLCInfo_af_NA;
getLCInfo_af_ZA;
getLCInfo_ak_GH;
getLCInfo_am_ET;
+getLCInfo_ar_DZ;
getLCInfo_ar_EG;
getLCInfo_ar_LB;
getLCInfo_ar_OM;
@@ -797,6 +818,7 @@ getLCInfo_ky_KG;
getLCInfo_lg_UG;
getLCInfo_ln_CD;
getLCInfo_lo_LA;
+getLCInfo_mai_IN;
getLCInfo_ml_IN;
getLCInfo_mn_MN;
getLCInfo_mr_IN;
@@ -840,6 +862,7 @@ getLocaleItem_af_NA;
getLocaleItem_af_ZA;
getLocaleItem_ak_GH;
getLocaleItem_am_ET;
+getLocaleItem_ar_DZ;
getLocaleItem_ar_EG;
getLocaleItem_ar_LB;
getLocaleItem_ar_OM;
@@ -873,6 +896,7 @@ getLocaleItem_ky_KG;
getLocaleItem_lg_UG;
getLocaleItem_ln_CD;
getLocaleItem_lo_LA;
+getLocaleItem_mai_IN;
getLocaleItem_ml_IN;
getLocaleItem_mn_MN;
getLocaleItem_mr_IN;
@@ -916,6 +940,7 @@ getOutlineNumberingLevels_af_NA;
getOutlineNumberingLevels_af_ZA;
getOutlineNumberingLevels_ak_GH;
getOutlineNumberingLevels_am_ET;
+getOutlineNumberingLevels_ar_DZ;
getOutlineNumberingLevels_ar_EG;
getOutlineNumberingLevels_ar_LB;
getOutlineNumberingLevels_ar_OM;
@@ -949,6 +974,7 @@ getOutlineNumberingLevels_ky_KG;
getOutlineNumberingLevels_lg_UG;
getOutlineNumberingLevels_ln_CD;
getOutlineNumberingLevels_lo_LA;
+getOutlineNumberingLevels_mai_IN;
getOutlineNumberingLevels_ml_IN;
getOutlineNumberingLevels_mn_MN;
getOutlineNumberingLevels_mr_IN;
@@ -992,6 +1018,7 @@ getReservedWords_af_NA;
getReservedWords_af_ZA;
getReservedWords_ak_GH;
getReservedWords_am_ET;
+getReservedWords_ar_DZ;
getReservedWords_ar_EG;
getReservedWords_ar_LB;
getReservedWords_ar_OM;
@@ -1025,6 +1052,7 @@ getReservedWords_ky_KG;
getReservedWords_lg_UG;
getReservedWords_ln_CD;
getReservedWords_lo_LA;
+getReservedWords_mai_IN;
getReservedWords_ml_IN;
getReservedWords_mn_MN;
getReservedWords_mr_IN;
@@ -1068,6 +1096,7 @@ getSearchOptions_af_NA;
getSearchOptions_af_ZA;
getSearchOptions_ak_GH;
getSearchOptions_am_ET;
+getSearchOptions_ar_DZ;
getSearchOptions_ar_EG;
getSearchOptions_ar_LB;
getSearchOptions_ar_OM;
@@ -1101,6 +1130,7 @@ getSearchOptions_ky_KG;
getSearchOptions_lg_UG;
getSearchOptions_ln_CD;
getSearchOptions_lo_LA;
+getSearchOptions_mai_IN;
getSearchOptions_ml_IN;
getSearchOptions_mn_MN;
getSearchOptions_mr_IN;
@@ -1144,6 +1174,7 @@ getTransliterations_af_NA;
getTransliterations_af_ZA;
getTransliterations_ak_GH;
getTransliterations_am_ET;
+getTransliterations_ar_DZ;
getTransliterations_ar_EG;
getTransliterations_ar_LB;
getTransliterations_ar_OM;
@@ -1177,6 +1208,7 @@ getTransliterations_ky_KG;
getTransliterations_lg_UG;
getTransliterations_ln_CD;
getTransliterations_lo_LA;
+getTransliterations_mai_IN;
getTransliterations_ml_IN;
getTransliterations_mn_MN;
getTransliterations_mr_IN;
@@ -1220,6 +1252,7 @@ getUnicodeScripts_af_NA;
getUnicodeScripts_af_ZA;
getUnicodeScripts_ak_GH;
getUnicodeScripts_am_ET;
+getUnicodeScripts_ar_DZ;
getUnicodeScripts_ar_EG;
getUnicodeScripts_ar_LB;
getUnicodeScripts_ar_OM;
@@ -1253,6 +1286,7 @@ getUnicodeScripts_ky_KG;
getUnicodeScripts_lg_UG;
getUnicodeScripts_ln_CD;
getUnicodeScripts_lo_LA;
+getUnicodeScripts_mai_IN;
getUnicodeScripts_ml_IN;
getUnicodeScripts_mn_MN;
getUnicodeScripts_mr_IN;
diff --git a/i18npool/source/localedata/data/ltg_LV.xml b/i18npool/source/localedata/data/ltg_LV.xml
index c41c38c86b9c..7d4445d26426 100644
--- a/i18npool/source/localedata/data/ltg_LV.xml
+++ b/i18npool/source/localedata/data/ltg_LV.xml
@@ -65,23 +65,23 @@
<FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
<FormatCode>0,00%</FormatCode>
</FormatElement>
- <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
- <FormatCode># ##0[$Ls-64B];-# ##0[$Ls-64B]</FormatCode>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[$Ls-64B] # ##0;[$Ls-64B] -# ##0</FormatCode>
</FormatElement>
- <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
- <FormatCode># ##0,00[$Ls-64B];-# ##0,00[$Ls-64B]</FormatCode>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[$Ls-64B] # ##0,00;[$Ls-64B] -# ##0,00</FormatCode>
</FormatElement>
- <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
- <FormatCode># ##0[$Ls-64B];[RED]-# ##0[$Ls-64B]</FormatCode>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[$Ls-64B] # ##0;[RED][$Ls-64B] -# ##0</FormatCode>
</FormatElement>
- <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
- <FormatCode># ##0,00[$Ls-64B];[RED]-# ##0,00[$Ls-64B]</FormatCode>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[$Ls-64B] # ##0,00;[RED][$Ls-64B] -# ##0,00</FormatCode>
</FormatElement>
- <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
<FormatCode># ##0,00 CCC</FormatCode>
</FormatElement>
- <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
- <FormatCode># ##0,--[$Ls-64B];[RED]-# ##0,--[$Ls-64B]</FormatCode>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[$Ls-64B] # ##0,--;[RED][$Ls-64B] -# ##0,--</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
<FormatCode>D.MM.YY</FormatCode>
diff --git a/i18npool/source/localedata/data/lv_LV.xml b/i18npool/source/localedata/data/lv_LV.xml
index ab76b4930bc6..0144bb4787cc 100644
--- a/i18npool/source/localedata/data/lv_LV.xml
+++ b/i18npool/source/localedata/data/lv_LV.xml
@@ -66,28 +66,28 @@
<FormatCode>0,00%</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
- <FormatCode># ##0[$Ls-426];-# ##0[$Ls-426]</FormatCode>
+ <FormatCode>[$Ls-426] # ##0;[$Ls-426] -# ##0</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
- <FormatCode># ##0,00[$Ls-426];-# ##0,00[$Ls-426]</FormatCode>
+ <FormatCode>[$Ls-426] # ##0,00;[$Ls-426] -# ##0,00</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
- <FormatCode># ##0[$Ls-426];[RED]-# ##0[$Ls-426]</FormatCode>
+ <FormatCode>[$Ls-426] # ##0;[RED][$Ls-426] -# ##0</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
- <FormatCode># ##0,00[$Ls-426];[RED]-# ##0,00[$Ls-426]</FormatCode>
+ <FormatCode>[$Ls-426] # ##0,00;[RED][$Ls-426] -# ##0,00</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
<FormatCode># ##0,00 CCC</FormatCode>
</FormatElement>
<FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
- <FormatCode># ##0,--[$Ls-426];[RED]-# ##0,--[$Ls-426]</FormatCode>
+ <FormatCode>[$Ls-426] # ##0,--;[RED][$Ls-426] -# ##0,--</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey1" default="true" type="short" usage="DATE" formatindex="18">
<FormatCode>D.M.YY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey9" default="true" type="long" usage="DATE" formatindex="19">
- <FormatCode>DD. NNNNMMMM, YYYY</FormatCode>
+ <FormatCode>YYYY. "gada" DD. MMMM, NNNN</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey8" default="true" type="medium" usage="DATE" formatindex="20">
<FormatCode>DD.MM.YY</FormatCode>
@@ -120,7 +120,7 @@
<FormatCode>NN, D. MMMM, YYYY</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="30">
- <FormatCode>NNNNMMMM D, YYYY</FormatCode>
+ <FormatCode>NNNN, YYYY. "gada" DD. MMMM</FormatCode>
</FormatElement>
<FormatElement msgid="DateFormatskey18" default="false" type="short" usage="DATE" formatindex="31">
<FormatCode>DD-MM</FormatCode>
diff --git a/i18npool/source/localedata/data/mai_IN.xml b/i18npool/source/localedata/data/mai_IN.xml
new file mode 100644
index 000000000000..07c3d39c6a9d
--- /dev/null
+++ b/i18npool/source/localedata/data/mai_IN.xml
@@ -0,0 +1,357 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE Locale SYSTEM 'locale.dtd'>
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+ <LC_INFO>
+ <Language>
+ <LangID>mai</LangID>
+ <DefaultName>Maithili</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>IN</CountryID>
+ <DefaultName>India</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE unoid="generic">
+ <Separators>
+ <DateSeparator>.</DateSeparator>
+ <ThousandSeparator>,</ThousandSeparator>
+ <DecimalSeparator>.</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>.</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator>, </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator>, </LongDateDaySeparator>
+ <LongDateMonthSeparator> </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>‘</QuotationStart>
+ <QuotationEnd>’</QuotationEnd>
+ <DoubleQuotationStart>“</DoubleQuotationStart>
+ <DoubleQuotationEnd>”</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>पूर्वाह्न</TimeAM>
+ <TimePM>अपराह्न</TimePM>
+ <MeasurementSystem>metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$रू.-645]">
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>General</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode>#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode>#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode>#,###.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0.00E+00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0.00E+000</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0.00%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[CURRENCY]#,##0;-[CURRENCY]#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[CURRENCY]#,##0.00;-[CURRENCY]#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[CURRENCY]#,##0;[RED]-[CURRENCY]#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[CURRENCY]#,##0.00;[RED]-[CURRENCY]#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode>CCC#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[CURRENCY]#,##0.--;[RED]-[CURRENCY]#,##0.--</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>D.MM.YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>NNNNDD, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>DD.MM.YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>DD.MM.YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey22" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>D, MMMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
+ <FormatCode>NN, DD.MMM.YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
+ <FormatCode>NN, D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>NN, D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>NNNND, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>MM.DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>YY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>MM.YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>MMM.DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="false" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="false" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="true" type="short" usage="TIME" formatindex="41">
+ <FormatCode>HH:MM AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="true" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>DD.MM.YY HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>DD.MM.YYYY HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION>
+ <Collator default="true" unoid="alphanumeric"/>
+ <CollationOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </CollationOptions>
+ </LC_COLLATION>
+ <LC_SEARCH>
+ <SearchOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </SearchOptions>
+ </LC_SEARCH>
+ <LC_INDEX>
+ <IndexKey phonetic="false" default="true" unoid="alphanumeric">अ-ह</IndexKey>
+ <UnicodeScript>14</UnicodeScript>
+ <FollowPageWord>आ.पृ.</FollowPageWord>
+ <FollowPageWord>आ.पृ.</FollowPageWord>
+ </LC_INDEX>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>रवि</DefaultAbbrvName>
+ <DefaultFullName>रविवार</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>सोम</DefaultAbbrvName>
+ <DefaultFullName>सोमवार</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>मंगल</DefaultAbbrvName>
+ <DefaultFullName>मंगलवार</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>बुध</DefaultAbbrvName>
+ <DefaultFullName>बुधवार</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>गुरु</DefaultAbbrvName>
+ <DefaultFullName>गुरुवार</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>शुक्र</DefaultAbbrvName>
+ <DefaultFullName>शुक्रवार</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>शनि</DefaultAbbrvName>
+ <DefaultFullName>शनिवार</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>जन</DefaultAbbrvName>
+ <DefaultFullName>जनवरी</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>फर</DefaultAbbrvName>
+ <DefaultFullName>फरवरी</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>मार्च</DefaultAbbrvName>
+ <DefaultFullName>मार्च</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>अप्रै</DefaultAbbrvName>
+ <DefaultFullName>अप्रैल</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>मई</DefaultAbbrvName>
+ <DefaultFullName>मई</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>जून</DefaultAbbrvName>
+ <DefaultFullName>जून</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>जुला</DefaultAbbrvName>
+ <DefaultFullName>जुलाई</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>अग</DefaultAbbrvName>
+ <DefaultFullName>अगस्त</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>सित</DefaultAbbrvName>
+ <DefaultFullName>सितम्बर</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>अक्टू</DefaultAbbrvName>
+ <DefaultFullName>अक्टूबर</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>नव</DefaultAbbrvName>
+ <DefaultFullName>नवम्बर</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>दिस</DefaultAbbrvName>
+ <DefaultFullName>दिसम्बर</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>ई.पू.</DefaultAbbrvName>
+ <DefaultFullName>ईस्वी पूर्व</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>ई.</DefaultAbbrvName>
+ <DefaultFullName>ईस्वी</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>sun</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>INR</CurrencyID>
+ <CurrencySymbol>रू.</CurrencySymbol>
+ <BankSymbol>INR</BankSymbol>
+ <CurrencyName>रुपया</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION>
+ <Transliteration unoid="LOWERCASE_UPPERCASE"/>
+ <Transliteration unoid="UPPERCASE_LOWERCASE"/>
+ <Transliteration unoid="IGNORE_CASE"/>
+ </LC_TRANSLITERATION>
+ <LC_MISC>
+ <ReservedWords>
+ <trueWord>सही</trueWord>
+ <falseWord>गलत</falseWord>
+ <quarter1Word>पहिल तीन मास</quarter1Word>
+ <quarter2Word>दोसर तीन मास</quarter2Word>
+ <quarter3Word>तेसर तीन मास</quarter3Word>
+ <quarter4Word>चौथा तीन मास</quarter4Word>
+ <aboveWord>उप्पर</aboveWord>
+ <belowWord>नीच्चाँ</belowWord>
+ <quarter1Abbreviation>पहिल चौथाई</quarter1Abbreviation>
+ <quarter2Abbreviation>दोसर चौथाई</quarter2Abbreviation>
+ <quarter3Abbreviation>तेसर चौथाई</quarter3Abbreviation>
+ <quarter4Abbreviation>चौथा चौथाई</quarter4Abbreviation>
+ </ReservedWords>
+ </LC_MISC>
+ <LC_NumberingLevel>
+ <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix="."/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+ </LC_NumberingLevel>
+ <LC_OutLineNumberingLevel ref="en_US"/>
+</Locale>
+<!--Version 1.0 -->
diff --git a/i18npool/source/localedata/data/makefile.mk b/i18npool/source/localedata/data/makefile.mk
index 2591b70fb63d..1ac16a31fe37 100644
--- a/i18npool/source/localedata/data/makefile.mk
+++ b/i18npool/source/localedata/data/makefile.mk
@@ -68,6 +68,7 @@ MY_MISC_CXXFILES = \
$(MISC)$/localedata_af_ZA.cxx \
$(MISC)$/localedata_ak_GH.cxx \
$(MISC)$/localedata_am_ET.cxx \
+ $(MISC)$/localedata_ar_DZ.cxx \
$(MISC)$/localedata_ar_EG.cxx \
$(MISC)$/localedata_ar_LB.cxx \
$(MISC)$/localedata_ar_SA.cxx \
@@ -176,6 +177,7 @@ MY_MISC_CXXFILES = \
$(MISC)$/localedata_lt_LT.cxx \
$(MISC)$/localedata_ltg_LV.cxx \
$(MISC)$/localedata_lv_LV.cxx \
+ $(MISC)$/localedata_mai_IN.cxx \
$(MISC)$/localedata_mk_MK.cxx \
$(MISC)$/localedata_ml_IN.cxx \
$(MISC)$/localedata_mn_MN.cxx \
@@ -200,6 +202,7 @@ MY_MISC_CXXFILES = \
$(MISC)$/localedata_pt_BR.cxx \
$(MISC)$/localedata_pt_PT.cxx \
$(MISC)$/localedata_ro_RO.cxx \
+ $(MISC)$/localedata_rue_SK.cxx \
$(MISC)$/localedata_ru_RU.cxx \
$(MISC)$/localedata_rw_RW.cxx \
$(MISC)$/localedata_sg_CF.cxx \
@@ -378,8 +381,9 @@ SHL3OBJS= \
$(SLO)$/localedata_pl_PL.obj \
$(SLO)$/localedata_pt_BR.obj \
$(SLO)$/localedata_pt_PT.obj \
- $(SLO)$/localedata_ru_RU.obj \
$(SLO)$/localedata_ro_RO.obj \
+ $(SLO)$/localedata_rue_SK.obj \
+ $(SLO)$/localedata_ru_RU.obj \
$(SLO)$/localedata_sc_IT.obj \
$(SLO)$/localedata_sh_ME.obj \
$(SLO)$/localedata_sh_RS.obj \
@@ -416,6 +420,7 @@ SHL4OBJS= \
$(SLO)$/localedata_af_ZA.obj \
$(SLO)$/localedata_ak_GH.obj \
$(SLO)$/localedata_am_ET.obj \
+ $(SLO)$/localedata_ar_DZ.obj \
$(SLO)$/localedata_ar_EG.obj \
$(SLO)$/localedata_ar_LB.obj \
$(SLO)$/localedata_ar_OM.obj \
@@ -449,6 +454,7 @@ SHL4OBJS= \
$(SLO)$/localedata_lg_UG.obj \
$(SLO)$/localedata_ln_CD.obj \
$(SLO)$/localedata_lo_LA.obj \
+ $(SLO)$/localedata_mai_IN.obj \
$(SLO)$/localedata_ml_IN.obj \
$(SLO)$/localedata_mn_MN.obj \
$(SLO)$/localedata_mr_IN.obj \
diff --git a/i18npool/source/localedata/data/rue_SK.xml b/i18npool/source/localedata/data/rue_SK.xml
new file mode 100644
index 000000000000..86b22d5c5a2e
--- /dev/null
+++ b/i18npool/source/localedata/data/rue_SK.xml
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE Locale SYSTEM 'locale.dtd'>
+<Locale versionDTD="2.0.3" allowUpdateFromCLDR="no" version="1.0">
+ <LC_INFO>
+ <Language>
+ <LangID>rue</LangID>
+ <DefaultName>Rusyn</DefaultName>
+ </Language>
+ <Country>
+ <CountryID>SK</CountryID>
+ <DefaultName>Slovakia</DefaultName>
+ </Country>
+ </LC_INFO>
+ <LC_CTYPE unoid="generic">
+ <Separators>
+ <DateSeparator>/</DateSeparator>
+ <ThousandSeparator>,</ThousandSeparator>
+ <DecimalSeparator>.</DecimalSeparator>
+ <TimeSeparator>:</TimeSeparator>
+ <Time100SecSeparator>.</Time100SecSeparator>
+ <ListSeparator>;</ListSeparator>
+ <LongDateDayOfWeekSeparator>, </LongDateDayOfWeekSeparator>
+ <LongDateDaySeparator>, </LongDateDaySeparator>
+ <LongDateMonthSeparator> </LongDateMonthSeparator>
+ <LongDateYearSeparator> </LongDateYearSeparator>
+ </Separators>
+ <Markers>
+ <QuotationStart>“</QuotationStart>
+ <QuotationEnd>”</QuotationEnd>
+ <DoubleQuotationStart>‘</DoubleQuotationStart>
+ <DoubleQuotationEnd>’</DoubleQuotationEnd>
+ </Markers>
+ <TimeAM>дообіду</TimeAM>
+ <TimePM>пообідї</TimePM>
+ <MeasurementSystem>metric</MeasurementSystem>
+ </LC_CTYPE>
+ <LC_FORMAT replaceFrom="[CURRENCY]" replaceTo="[$€-8256]">
+ <FormatElement msgid="FixedFormatskey1" default="true" type="medium" usage="FIXED_NUMBER" formatindex="0">
+ <FormatCode>General</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey2" default="true" type="short" usage="FIXED_NUMBER" formatindex="1">
+ <FormatCode>0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey3" default="false" type="medium" usage="FIXED_NUMBER" formatindex="2">
+ <FormatCode>0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey4" default="false" type="short" usage="FIXED_NUMBER" formatindex="3">
+ <FormatCode>#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey5" default="false" type="medium" usage="FIXED_NUMBER" formatindex="4">
+ <FormatCode>#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="FixedFormatskey6" default="false" type="medium" usage="FIXED_NUMBER" formatindex="5">
+ <FormatCode>#,###.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey1" default="true" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="6">
+ <FormatCode>0.00E+00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="ScientificFormatskey2" default="false" type="medium" usage="SCIENTIFIC_NUMBER" formatindex="7">
+ <FormatCode>0.00E+000</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey1" default="true" type="short" usage="PERCENT_NUMBER" formatindex="8">
+ <FormatCode>0%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="PercentFormatskey2" default="true" type="long" usage="PERCENT_NUMBER" formatindex="9">
+ <FormatCode>0.00%</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey1" default="true" type="short" usage="CURRENCY" formatindex="12">
+ <FormatCode>[CURRENCY]#,##0;-[CURRENCY]#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey2" default="false" type="medium" usage="CURRENCY" formatindex="13">
+ <FormatCode>[CURRENCY]#,##0.00;-[CURRENCY]#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey3" default="false" type="medium" usage="CURRENCY" formatindex="14">
+ <FormatCode>[CURRENCY]#,##0;[RED]-[CURRENCY]#,##0</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey4" default="true" type="medium" usage="CURRENCY" formatindex="15">
+ <FormatCode>[CURRENCY]#,##0.00;[RED]-[CURRENCY]#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey5" default="false" type="medium" usage="CURRENCY" formatindex="16">
+ <FormatCode>CCC#,##0.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="CurrencyFormatskey6" default="false" type="medium" usage="CURRENCY" formatindex="17">
+ <FormatCode>[CURRENCY]#,##0.--;[RED]-[CURRENCY]#,##0.--</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey11" default="true" type="short" usage="DATE" formatindex="18">
+ <FormatCode>D/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey14" default="true" type="long" usage="DATE" formatindex="19">
+ <FormatCode>NNNNDD, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey6" default="true" type="medium" usage="DATE" formatindex="20">
+ <FormatCode>DD/MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey5" default="false" type="medium" usage="DATE" formatindex="21">
+ <FormatCode>DD/MM/YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey15" default="false" type="long" usage="DATE" formatindex="22">
+ <FormatCode>D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey16" default="false" type="long" usage="DATE" formatindex="23">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey21" default="false" type="long" usage="DATE" formatindex="24">
+ <FormatCode>D, MMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey17" default="false" type="long" usage="DATE" formatindex="25">
+ <FormatCode>D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey22" default="false" type="long" usage="DATE" formatindex="26">
+ <FormatCode>D, MMMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey10" default="false" type="medium" usage="DATE" formatindex="27">
+ <FormatCode>NN, DD/MMM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey18" default="false" type="long" usage="DATE" formatindex="28">
+ <FormatCode>NN, D, MMM YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey19" default="false" type="long" usage="DATE" formatindex="29">
+ <FormatCode>NN, D, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey20" default="false" type="long" usage="DATE" formatindex="30">
+ <FormatCode>NNNND, MMMM YYYY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey12" default="false" type="short" usage="DATE" formatindex="31">
+ <FormatCode>MM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey7" default="false" type="medium" usage="DATE" formatindex="32">
+ <FormatCode>YY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey8" default="false" type="medium" usage="DATE" formatindex="33">
+ <FormatCode>YYYY-MM-DD</FormatCode>
+ <DefaultName>ISO 8601</DefaultName>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey1" default="false" type="medium" usage="DATE" formatindex="34">
+ <FormatCode>MM/YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey2" default="false" type="medium" usage="DATE" formatindex="35">
+ <FormatCode>MMM/DD</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey3" default="false" type="medium" usage="DATE" formatindex="36">
+ <FormatCode>MMMM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey4" default="false" type="medium" usage="DATE" formatindex="37">
+ <FormatCode>QQ YY</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateFormatskey9" default="false" type="medium" usage="DATE" formatindex="38">
+ <FormatCode>WW</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey1" default="false" type="short" usage="TIME" formatindex="39">
+ <FormatCode>HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey2" default="false" type="medium" usage="TIME" formatindex="40">
+ <FormatCode>HH:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey3" default="true" type="short" usage="TIME" formatindex="41">
+ <FormatCode>HH:MM AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey4" default="true" type="medium" usage="TIME" formatindex="42">
+ <FormatCode>HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey5" default="false" type="medium" usage="TIME" formatindex="43">
+ <FormatCode>[HH]:MM:SS</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey6" default="false" type="short" usage="TIME" formatindex="44">
+ <FormatCode>MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="TimeFormatskey7" default="false" type="medium" usage="TIME" formatindex="45">
+ <FormatCode>[HH]:MM:SS.00</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey1" default="true" type="medium" usage="DATE_TIME" formatindex="46">
+ <FormatCode>DD/MM/YY HH:MM</FormatCode>
+ </FormatElement>
+ <FormatElement msgid="DateTimeFormatskey2" default="false" type="medium" usage="DATE_TIME" formatindex="47">
+ <FormatCode>DD/MM/YYYY HH:MM:SS AM/PM</FormatCode>
+ </FormatElement>
+ </LC_FORMAT>
+ <LC_COLLATION>
+ <Collator default="true" unoid="alphanumeric"/>
+ <CollationOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </CollationOptions>
+ </LC_COLLATION>
+ <LC_SEARCH>
+ <SearchOptions>
+ <TransliterationModules>IGNORE_CASE</TransliterationModules>
+ </SearchOptions>
+ </LC_SEARCH>
+ <LC_INDEX>
+ <IndexKey phonetic="false" default="true" unoid="alphanumeric">A-Z</IndexKey>
+ <UnicodeScript>0</UnicodeScript>
+ <UnicodeScript>1</UnicodeScript>
+ <UnicodeScript>8</UnicodeScript>
+ <FollowPageWord>стр.</FollowPageWord>
+ <FollowPageWord>стр.</FollowPageWord>
+ </LC_INDEX>
+ <LC_CALENDAR>
+ <Calendar unoid="gregorian" default="true">
+ <DaysOfWeek>
+ <Day>
+ <DayID>sun</DayID>
+ <DefaultAbbrvName>нед</DefaultAbbrvName>
+ <DefaultFullName>недїля</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>mon</DayID>
+ <DefaultAbbrvName>пон</DefaultAbbrvName>
+ <DefaultFullName>понедїлёк</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>tue</DayID>
+ <DefaultAbbrvName>віт</DefaultAbbrvName>
+ <DefaultFullName>віторок</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>wed</DayID>
+ <DefaultAbbrvName>сер</DefaultAbbrvName>
+ <DefaultFullName>середа</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>thu</DayID>
+ <DefaultAbbrvName>чет</DefaultAbbrvName>
+ <DefaultFullName>четверь</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>fri</DayID>
+ <DefaultAbbrvName>пят</DefaultAbbrvName>
+ <DefaultFullName>пятніця</DefaultFullName>
+ </Day>
+ <Day>
+ <DayID>sat</DayID>
+ <DefaultAbbrvName>суб</DefaultAbbrvName>
+ <DefaultFullName>субота</DefaultFullName>
+ </Day>
+ </DaysOfWeek>
+ <MonthsOfYear>
+ <Month>
+ <MonthID>jan</MonthID>
+ <DefaultAbbrvName>ян</DefaultAbbrvName>
+ <DefaultFullName>януар</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>feb</MonthID>
+ <DefaultAbbrvName>феб</DefaultAbbrvName>
+ <DefaultFullName>фебруар</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>mar</MonthID>
+ <DefaultAbbrvName>мар</DefaultAbbrvName>
+ <DefaultFullName>марец</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>apr</MonthID>
+ <DefaultAbbrvName>апр</DefaultAbbrvName>
+ <DefaultFullName>апріль</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>may</MonthID>
+ <DefaultAbbrvName>май</DefaultAbbrvName>
+ <DefaultFullName>май</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jun</MonthID>
+ <DefaultAbbrvName>юн</DefaultAbbrvName>
+ <DefaultFullName>юн</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>jul</MonthID>
+ <DefaultAbbrvName>юл</DefaultAbbrvName>
+ <DefaultFullName>юл</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>aug</MonthID>
+ <DefaultAbbrvName>авґ</DefaultAbbrvName>
+ <DefaultFullName>авґуст</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>sep</MonthID>
+ <DefaultAbbrvName>сеп</DefaultAbbrvName>
+ <DefaultFullName>септембер</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>oct</MonthID>
+ <DefaultAbbrvName>окт</DefaultAbbrvName>
+ <DefaultFullName>октобер</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>nov</MonthID>
+ <DefaultAbbrvName>нов</DefaultAbbrvName>
+ <DefaultFullName>новембер</DefaultFullName>
+ </Month>
+ <Month>
+ <MonthID>dec</MonthID>
+ <DefaultAbbrvName>дец</DefaultAbbrvName>
+ <DefaultFullName>децембер</DefaultFullName>
+ </Month>
+ </MonthsOfYear>
+ <Eras>
+ <Era>
+ <EraID>bc</EraID>
+ <DefaultAbbrvName>п.н.е.</DefaultAbbrvName>
+ <DefaultFullName>перед нашов еров</DefaultFullName>
+ </Era>
+ <Era>
+ <EraID>ad</EraID>
+ <DefaultAbbrvName>н.е.</DefaultAbbrvName>
+ <DefaultFullName>нашой еры</DefaultFullName>
+ </Era>
+ </Eras>
+ <StartDayOfWeek>
+ <DayID>mon</DayID>
+ </StartDayOfWeek>
+ <MinimalDaysInFirstWeek>1</MinimalDaysInFirstWeek>
+ </Calendar>
+ </LC_CALENDAR>
+ <LC_CURRENCY>
+ <Currency default="true" usedInCompatibleFormatCodes="true">
+ <CurrencyID>EUR</CurrencyID>
+ <CurrencySymbol>€</CurrencySymbol>
+ <BankSymbol>EUR</BankSymbol>
+ <CurrencyName>евро</CurrencyName>
+ <DecimalPlaces>2</DecimalPlaces>
+ </Currency>
+ </LC_CURRENCY>
+ <LC_TRANSLITERATION>
+ <Transliteration unoid="LOWERCASE_UPPERCASE"/>
+ <Transliteration unoid="UPPERCASE_LOWERCASE"/>
+ <Transliteration unoid="IGNORE_CASE"/>
+ </LC_TRANSLITERATION>
+ <LC_MISC>
+ <ReservedWords>
+ <trueWord>Правда</trueWord>
+ <falseWord>Неправда</falseWord>
+ <quarter1Word>1. четвертина</quarter1Word>
+ <quarter2Word>2. четвертина</quarter2Word>
+ <quarter3Word>3. четвертина</quarter3Word>
+ <quarter4Word>4. четвертина</quarter4Word>
+ <aboveWord>Над</aboveWord>
+ <belowWord>Під</belowWord>
+ <quarter1Abbreviation>1.чет.</quarter1Abbreviation>
+ <quarter2Abbreviation>2.чет.</quarter2Abbreviation>
+ <quarter3Abbreviation>3.чет.</quarter3Abbreviation>
+ <quarter4Abbreviation>4.чет.</quarter4Abbreviation>
+ </ReservedWords>
+ </LC_MISC>
+ <LC_NumberingLevel>
+ <NumberingLevel NumType="4" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="4" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="4" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="2" Prefix=" " Suffix="."/>
+ <NumberingLevel NumType="0" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix=" " Suffix=")"/>
+ <NumberingLevel NumType="1" Prefix="(" Suffix=")"/>
+ <NumberingLevel NumType="3" Prefix=" " Suffix="."/>
+ </LC_NumberingLevel>
+ <LC_OutLineNumberingLevel ref="en_US"/>
+</Locale>
+<!--Version 1.0 -->
diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx
index 920a63fe149a..34f4f6bbb520 100644
--- a/i18npool/source/localedata/localedata.cxx
+++ b/i18npool/source/localedata/localedata.cxx
@@ -169,6 +169,7 @@ static const struct {
{ "ast_ES", lcl_DATA_EURO },
{ "ltg_LV", lcl_DATA_EURO },
{ "hsb_DE", lcl_DATA_EURO },
+ { "rue_SK", lcl_DATA_EURO },
{ "ja_JP", lcl_DATA_OTHERS },
{ "ko_KR", lcl_DATA_OTHERS },
@@ -179,6 +180,7 @@ static const struct {
{ "zh_MO", lcl_DATA_OTHERS },
{ "ar_EG", lcl_DATA_OTHERS },
+ { "ar_DZ", lcl_DATA_OTHERS },
{ "ar_LB", lcl_DATA_OTHERS },
{ "ar_SA", lcl_DATA_OTHERS },
{ "ar_TN", lcl_DATA_OTHERS },
@@ -248,6 +250,7 @@ static const struct {
{ "ug_CN", lcl_DATA_OTHERS },
{ "om_ET", lcl_DATA_OTHERS },
{ "plt_MG", lcl_DATA_OTHERS },
+ { "mai_IN", lcl_DATA_OTHERS },
};
static const sal_Unicode under = sal_Unicode('_');
diff --git a/i18npool/source/localedata/saxparser.cxx b/i18npool/source/localedata/saxparser.cxx
index 083d2097a54a..9787b9c810a6 100644
--- a/i18npool/source/localedata/saxparser.cxx
+++ b/i18npool/source/localedata/saxparser.cxx
@@ -125,13 +125,14 @@ Reference< XInputStream > createStreamFromFile(
if( f ) {
fseek( f , 0 , SEEK_END );
- int nLength = ftell( f );
+ size_t nLength = ftell( f );
fseek( f , 0 , SEEK_SET );
Sequence<sal_Int8> seqIn(nLength);
- fread( seqIn.getArray() , nLength , 1 , f );
-
- r = Reference< XInputStream > ( new OInputStream( seqIn ) );
+ if (fread( seqIn.getArray() , nLength , 1 , f ) == 1)
+ r = Reference< XInputStream > ( new OInputStream( seqIn ) );
+ else
+ fprintf(stderr, "failure reading %s\n", pcFile);
fclose( f );
}
return r;
diff --git a/i18npool/source/paper/paper.cxx b/i18npool/source/paper/paper.cxx
index 21be12588e37..e94efa6e06c5 100644
--- a/i18npool/source/paper/paper.cxx
+++ b/i18npool/source/paper/paper.cxx
@@ -436,8 +436,8 @@ Paper PaperInfo::fromPSName(const rtl::OString &rName)
}
//http://wiki.services.openoffice.org/wiki/DefaultPaperSize
-//http://sources.redhat.com/cgi-bin/cvsweb.cgi/libc/localedata/locales/?cvsroot=glibc
//http://www.unicode.org/cldr/data/charts/supplemental/territory_language_information.html
+//http://sourceware.org/git/?p=glibc.git;a=tree;f=localedata/locales
//http://en.wikipedia.org/wiki/Paper_size
//http://msdn.microsoft.com/en-us/library/cc195164.aspx
PaperInfo PaperInfo::getDefaultPaperForLocale(
@@ -448,22 +448,57 @@ PaperInfo PaperInfo::getDefaultPaperForLocale(
if (
//United States, Letter
!rLocale.Country.compareToAscii("US") ||
- //Puerto Rico, http://sources.redhat.com/ml/libc-hacker/2001-07/msg00046.html
+ //Puerto Rico:
+ // http://unicode.org/cldr/trac/ticket/1710
+ // http://sources.redhat.com/ml/libc-hacker/2001-07/msg00046.html
!rLocale.Country.compareToAscii("PR") ||
- //Canada, http://sources.redhat.com/ml/libc-hacker/2001-07/msg00053.html
+ //Canada:
+ // http://sources.redhat.com/ml/libc-hacker/2001-07/msg00053.html
!rLocale.Country.compareToAscii("CA") ||
- //Venuzuela, https://www.redhat.com/archives/fedora-devel-list/2008-August/msg00019.html
+ //Venuzuela:
+ // http://unicode.org/cldr/trac/ticket/1710
+ // https://www.redhat.com/archives/fedora-devel-list/2008-August/msg00019.html
!rLocale.Country.compareToAscii("VE") ||
- //Chile, https://www.redhat.com/archives/fedora-devel-list/2008-August/msg00240.html
+ //Chile:
+ // http://unicode.org/cldr/trac/ticket/1710
+ // https://www.redhat.com/archives/fedora-devel-list/2008-August/msg00240.html
!rLocale.Country.compareToAscii("CL") ||
- //Mexico, http://qa.openoffice.org/issues/show_bug.cgi?id=49739
+ //Mexico:
+ // http://unicode.org/cldr/trac/ticket/1710
+ // http://qa.openoffice.org/issues/show_bug.cgi?id=49739
!rLocale.Country.compareToAscii("MX") ||
- //Colombia, http://qa.openoffice.org/issues/show_bug.cgi?id=69703
+ //Colombia:
+ // http://unicode.org/cldr/trac/ticket/1710
+ // http://qa.openoffice.org/issues/show_bug.cgi?id=69703
!rLocale.Country.compareToAscii("CO") ||
- //Philippines,
+ //Philippines:
+ // http://unicode.org/cldr/trac/ticket/1710
// http://ubuntuliving.blogspot.com/2008/07/default-paper-size-in-evince.html
// http://www.gov.ph/faqs/driverslicense.asp
- !rLocale.Country.compareToAscii("PH")
+ !rLocale.Country.compareToAscii("PH") ||
+ //Belize:
+ // http://unicode.org/cldr/trac/ticket/2585
+ // http://www.belize.gov.bz/ct.asp?xItem=1666&ctNode=486&mp=27
+ !rLocale.Country.compareToAscii("BZ") ||
+ //Costa Rica:
+ // http://unicode.org/cldr/trac/ticket/2585
+ // http://sources.redhat.com/bugzilla/show_bug.cgi?id=11258
+ !rLocale.Country.compareToAscii("CR") ||
+ //Guatemala:
+ // http://unicode.org/cldr/trac/ticket/2585
+ // http://sources.redhat.com/bugzilla/show_bug.cgi?id=10936
+ !rLocale.Country.compareToAscii("GT") ||
+ //Nicaragua:
+ // http://unicode.org/cldr/trac/ticket/2585
+ !rLocale.Country.compareToAscii("NI") ||
+ //Panama:
+ // http://unicode.org/cldr/trac/ticket/2585
+ // http://www.minsa.gob.pa/minsa/tl_files/documents/baner_informativo/INSTRUMENTO%20DE%20INVESTIGACION%20DE%20RAAV%202009.pdf
+ !rLocale.Country.compareToAscii("PA") ||
+ //El Salvador:
+ // http://unicode.org/cldr/trac/ticket/2585
+ // http://www.tse.gob.sv
+ !rLocale.Country.compareToAscii("SV")
)
{
eType = PAPER_LETTER;
diff --git a/icu/makefile.mk b/icu/makefile.mk
index 70ff42c1a443..2fafcfa75e8d 100644
--- a/icu/makefile.mk
+++ b/icu/makefile.mk
@@ -158,6 +158,7 @@ icu_LIBS=-lmingwthrd
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
icu_LIBS+=-lstdc++_s
.ENDIF
+icu_LDFLAGS+=-Wl,--enable-runtime-pseudo-reloc-v2
CONFIGURE_ACTION+=sh -c 'CFLAGS="-O -D_MT" CXXFLAGS="-O -D_MT" LDFLAGS="$(icu_LDFLAGS)" LIBS="$(icu_LIBS)" ./configure --build=i586-pc-mingw32 --enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no'
#CONFIGURE_FLAGS=--enable-layout --enable-static --enable-shared=yes --enable-64bit-libs=no
diff --git a/idlc/source/preproc/getopt.c b/idlc/source/preproc/getopt.c
deleted file mode 100644
index a6163e75075c..000000000000
--- a/idlc/source/preproc/getopt.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-#include <stdio.h>
-#include <string.h>
-
-#define EPR fprintf(stderr,
-#define ERR(str, chr) if(opterr) { EPR "%s%c\n", str, chr); }
-
-int opterr = 1;
-int optind = 1;
-int optopt;
-char *optarg;
-
-int
- cppgetopt(int argc, char *const argv[], const char *opts)
-{
- static int sp = 1;
- register int c;
- register char *cp;
-
- if (sp == 1)
- {
- if (optind >= argc ||
- argv[optind][0] != '-' || argv[optind][1] == '\0')
- return -1;
- else
- if (strcmp(argv[optind], "--") == 0)
- {
- optind++;
- return -1;
- }
- }
- optopt = c = argv[optind][sp];
- if (c == ':' || (cp = strchr(opts, c)) == 0)
- {
- ERR(": illegal option -- ", c);
- if (argv[optind][++sp] == '\0')
- {
- optind++;
- sp = 1;
- }
- return '?';
- }
- if (*++cp == ':')
- {
- if (argv[optind][sp + 1] != '\0')
- optarg = &argv[optind++][sp + 1];
- else
- if (++optind >= argc)
- {
- ERR(": option requires an argument -- ", c);
- sp = 1;
- return '?';
- }
- else
- optarg = argv[optind++];
- sp = 1;
- }
- else
- {
- if (argv[optind][++sp] == '\0')
- {
- sp = 1;
- optind++;
- }
- optarg = 0;
- }
- return c;
-}
diff --git a/idlc/source/preproc/makefile.mk b/idlc/source/preproc/makefile.mk
index 7347f815a23f..e6aa457e8b3d 100644
--- a/idlc/source/preproc/makefile.mk
+++ b/idlc/source/preproc/makefile.mk
@@ -43,7 +43,6 @@ LIBSALCPPRT=$(0)
OBJFILES= \
$(OBJ)$/cpp.obj \
$(OBJ)$/eval.obj \
- $(OBJ)$/getopt.obj \
$(OBJ)$/include.obj \
$(OBJ)$/lex.obj \
$(OBJ)$/macro.obj \
@@ -64,6 +63,12 @@ APP1OBJS=$(OBJ)$/cpp.obj
APP1LIBS= $(LB)$/idlcpp.lib
+.IF "$(HAVE_GETOPT)" != "YES"
+.IF "$(GUI)" == "WNT"
+APP1STDLIBS=gnu_getopt.lib
+.ENDIF
+.ENDIF
+
# --- Targets ------------------------------------------------------
.INCLUDE : target.mk
diff --git a/idlc/source/preproc/nlist.c b/idlc/source/preproc/nlist.c
index 3f32fd4cca28..f41313c22aac 100644
--- a/idlc/source/preproc/nlist.c
+++ b/idlc/source/preproc/nlist.c
@@ -29,9 +29,6 @@
#include <string.h>
#include "cpp.h"
-extern int cppgetopt(int, char *const *, const char *);
-extern char *optarg;
-extern int optind;
extern int Cplusplus;
Nlist *kwdefined;
char wd[128];
diff --git a/idlc/source/preproc/tokens.c b/idlc/source/preproc/tokens.c
index 6df35ae1f238..23ab88a5a9e3 100644
--- a/idlc/source/preproc/tokens.c
+++ b/idlc/source/preproc/tokens.c
@@ -474,7 +474,8 @@ void
if (wbp >= &wbuf[OBS])
{
- write(1, wbuf, OBS);
+ if (write(1, wbuf, OBS) != OBS)
+ error(ERROR, "short write!");
if (wbp > &wbuf[OBS])
memcpy(wbuf, wbuf + OBS, wbp - &wbuf[OBS]);
wbp -= OBS;
@@ -490,7 +491,8 @@ void
{
if (wbp > wbuf)
{
- write(1, wbuf, wbp - wbuf);
+ if (write(1, wbuf, wbp - wbuf) != wbp - wbuf)
+ error(ERROR, "short write!");
wbp = wbuf;
}
}
diff --git a/idlc/source/preproc/unix.c b/idlc/source/preproc/unix.c
index a1b52ce72f06..4997e317e697 100644
--- a/idlc/source/preproc/unix.c
+++ b/idlc/source/preproc/unix.c
@@ -33,15 +33,14 @@
#if (defined(_WIN32) || defined(_MSDOS) || defined(__IBMC__))
#include <io.h>
#include <sys/stat.h>
+#include <external/glibc/getopt.h>
#else
#include <unistd.h>
#endif
#include "cpp.h"
-extern int cppgetopt(int, char *const *, const char *);
-extern char *optarg, rcsid[];
-extern int optind;
+extern char rcsid[];
int Pflag = 0; /* print no line information */
int Iflag = 0; /* print includes */
@@ -62,7 +61,7 @@ void
Tokenrow tr;
setup_kwtab();
- while ((c = cppgetopt(argc, argv, "NOPV:I:D:U:F:A:X:u:l:+")) != -1)
+ while ((c = getopt(argc, argv, "NOPV:I:D:U:F:A:X:u:l:+")) != -1)
switch (c)
{
case 'N':
diff --git a/instsetoo_native/util/makefile.mk b/instsetoo_native/util/makefile.mk
index 885fba22411b..72f4262b1c4e 100644
--- a/instsetoo_native/util/makefile.mk
+++ b/instsetoo_native/util/makefile.mk
@@ -172,6 +172,7 @@ ADDDEPS+=hack_msitemplates
.ENDIF
$(foreach,i,$(alllangiso) openoffice_$i) : $(ADDDEPS)
+openoffice_$(defaultlangiso).archive : $(ADDDEPS)
$(foreach,i,$(alllangiso) openofficedev_$i) : $(ADDDEPS)
diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst
index 5fb95b4821f9..221aee9868b2 100644
--- a/instsetoo_native/util/openoffice.lst
+++ b/instsetoo_native/util/openoffice.lst
@@ -100,6 +100,7 @@ OpenOffice
STARTCENTER_LAYOUT_STYLE 0
REGISTRATION_PRODUCT OpenOffice.org
REGISTRATION_CID 926117
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -165,6 +166,7 @@ OpenOffice_wJRE
STARTCENTER_LAYOUT_STYLE 0
REGISTRATION_PRODUCT OpenOffice.org
REGISTRATION_CID 926117
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -236,6 +238,7 @@ OpenOffice_Dev
STARTCENTER_LAYOUT_STYLE 0
REGISTRATION_PRODUCT OpenOffice.org
REGISTRATION_CID 926117
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -279,6 +282,7 @@ URE
STARTCENTER_LAYOUT_STYLE 0
ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk
PACKAGEMAP package_names_ext.txt
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -323,6 +327,7 @@ OpenOffice_SDK
STARTCENTER_INFO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/homepage.jsp
STARTCENTER_TEMPLREP_URL http://tools.services.openoffice.org/forward/OpenOffice.org/templates.jsp?cid=926383
STARTCENTER_LAYOUT_STYLE 0
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -374,6 +379,7 @@ OpenOffice_Dev_SDK
STARTCENTER_INFO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/homepage.jsp
STARTCENTER_TEMPLREP_URL http://tools.services.openoffice.org/forward/OpenOffice.org/templates.jsp?cid=926383
STARTCENTER_LAYOUT_STYLE 0
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -441,6 +447,7 @@ BrOffice
STARTCENTER_LAYOUT_STYLE 0
REGISTRATION_PRODUCT OpenOffice.org
REGISTRATION_CID 926117
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -512,6 +519,7 @@ BrOffice_wJRE
STARTCENTER_LAYOUT_STYLE 0
REGISTRATION_PRODUCT OpenOffice.org
REGISTRATION_CID 926117
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
@@ -583,6 +591,7 @@ BrOffice_Dev
STARTCENTER_LAYOUT_STYLE 0
REGISTRATION_PRODUCT OpenOffice.org
REGISTRATION_CID 926117
+ DICT_REPO_URL http://tools.services.openoffice.org/forward/OpenOffice.org/dictionaries.jsp
}
active 1
compression 5
diff --git a/javainstaller2/src/Properties/setupfiles_template.properties b/javainstaller2/src/Properties/setupfiles_template.properties
index 66fb366e536a..04852635e784 100755..100644
--- a/javainstaller2/src/Properties/setupfiles_template.properties
+++ b/javainstaller2/src/Properties/setupfiles_template.properties
@@ -1,6 +1,7 @@
#
# setupfiles_${LANGUAGE}.properties
#
+# x-no-translate
String_Helpfile_AcceptLicense=AcceptLicense_${LANGUAGE}.html
String_Helpfile_ChooseComponents=ChooseComponents_${LANGUAGE}.html
diff --git a/javainstaller2/src/Properties/setupstrings_template.properties b/javainstaller2/src/Properties/setupstrings_template.properties
index d74113e66213..07bfa3ec192f 100755..100644
--- a/javainstaller2/src/Properties/setupstrings_template.properties
+++ b/javainstaller2/src/Properties/setupstrings_template.properties
@@ -1,6 +1,7 @@
#
# setupstrings_${LANGUAGE}.properties
#
+# x-no-translate
String_Previous=${STRING_PREVIOUS}
String_Next=${STRING_NEXT}
diff --git a/javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java b/javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java
index 25aba48c777a..ad2c8c7bcf88 100644
--- a/javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java
+++ b/javaunohelper/com/sun/star/lib/uno/helper/PropertySet.java
@@ -836,7 +836,6 @@ XMultiPropertySet
* @return The value of the property.
*/
protected Object getPropertyValue(Property property)
- throws com.sun.star.lang.WrappedTargetException
{
Object ret= null;
try
@@ -853,9 +852,13 @@ XMultiPropertySet
ret= propField.get(this);
}
}
- catch(java.lang.Exception e)
+ catch(java.lang.NoSuchFieldException e)
+ {
+ throw new java.lang.RuntimeException(e);
+ }
+ catch(java.lang.IllegalAccessException e)
{
- throw new WrappedTargetException("PropertySet.setPropertyValue_NoBroadcast", this, e);
+ throw new java.lang.RuntimeException(e);
}
return ret;
}
@@ -1001,7 +1004,7 @@ XMultiPropertySet
{
value= getPropertyValue(prop);
}
- catch(WrappedTargetException e)
+ catch(Exception e)
{
continue;
}
diff --git a/jvmfwk/inc/jvmfwk/framework.h b/jvmfwk/inc/jvmfwk/framework.h
index 0159e9d7993c..53914a3debed 100644
--- a/jvmfwk/inc/jvmfwk/framework.h
+++ b/jvmfwk/inc/jvmfwk/framework.h
@@ -69,14 +69,15 @@ extern "C" {
The content of this file is an implementation detail and may change in the future.</dd>
<dt>UNO_JAVA_JFW_INSTALL_DATA</dt>
- <dd>The file contains settings for all users. A user cannot override these settings.
+ <dd><b>DEPRECATED. Support for this variable will soon be removed.</b><br>
+ The file contains settings for all users. A user cannot override these settings.
When this parameter is provided then UNO_JAVA_JFW_SHARED_DATA and UNO_JAVA_JFW_USER_DATA
are irrelevant. This parameter is intended for use during the setup. For example, to
install extensions which contain java components. If there is already a file at this
location then it will be overwritten if it is too old. The period of validatity is per
default one hour. This value can be overridden by the bootstrap parameter
- UNO_JAVA_JFW_INSTALL_EXPIRE. Setting this variable to 1000 means the settings file
- is only valid for 1000 seconds.
+ UNO_JAVA_JFW_INSTALL_EXPIRE (<b>DEPRECATED</b>). Setting this variable to 1000 means
+ the settings file is only valid for 1000 seconds.
<p>If one would not use UNO_JAVA_JFW_INSTALL_DATA during setup then most probably
a user installation directory would be created in the home directory of root. This is
diff --git a/l10ntools/java/jpropex/java/JPropEx.java b/l10ntools/java/jpropex/java/JPropEx.java
index d0f72d627aaf..224bed783cf6 100644
--- a/l10ntools/java/jpropex/java/JPropEx.java
+++ b/l10ntools/java/jpropex/java/JPropEx.java
@@ -43,7 +43,10 @@ public class JPropEx
private boolean isQuiet = false;
private final String resourceType = "javaproperties";
private final String sourceLanguage = "en-US";
- //private SdfData data;
+
+ static final int JAVA_TYPE = 0;
+ static final int JAVA_ENUS_TYPE = 1;
+ static final int EXTENSION_TYPE = 2;
public JPropEx()
{
@@ -178,6 +181,7 @@ public class JPropEx
private void mergeFile( String filename , SdfData data , boolean isSingleFile )
{
+ int type = detectFormat( filename );
java.util.Properties sourceProp = loadProp( filename );
Vector langs = getLanguages( data );
HashMap props = new HashMap();
@@ -209,7 +213,7 @@ public class JPropEx
mergedEntity = data.get( curEntity );
if( mergedEntity == null )
{
- // if case there is not translation the fallback to the en-US source string
+ // in case there is no translation then fallback to the en-US source string
( (java.util.Properties) props.get( curLang )).setProperty( curEntity.getLid() , sourceString );
}
else
@@ -225,10 +229,10 @@ public class JPropEx
for( Iterator i = props.keySet().iterator() ; i.hasNext() ; )
{
lang = (String) i.next();
- writeSinglePropertiesFile( filename , (java.util.Properties) props.get( lang ) , lang , isSingleFile );
+ writeSinglePropertiesFile( filename , (java.util.Properties) props.get( lang ) , lang , isSingleFile , type );
}
}
- private void writeSinglePropertiesFile( String filename , java.util.Properties prop , String lang , boolean isSingleFile )
+ private void writeSinglePropertiesFile( String filename , java.util.Properties prop , String lang , boolean isSingleFile , int type )
{
// Prepare path to file
int filenameIdx = filename.lastIndexOf( "/" ) > 0 ? filename.lastIndexOf( "/" )+1 : 0 ;
@@ -240,24 +244,21 @@ public class JPropEx
if( pathPrefixArg != null && pathPrefixArg.length()>0 && pathPostfixArg != null && pathPostfixArg.length()>0 )
{
path = new StringBuffer().append( pathPrefixArg ).append( "/" ).append( lcLang ).append( "/" ).append( pathPostfixArg ).append( "/" ).toString();
- name = new StringBuffer().append( filename.substring( filenameIdx , filename.lastIndexOf( ".properties" ) ) )
- .append( "_" ).append( lcLang.replaceAll("-","_") ).append( ".properties" ).toString();
+ name += formatFilename( filename , filenameIdx , lang , type );
}
//use of -i <one_filename>
else if( !isSingleFile && outputFileArg != null && outputFileArg.length()>0 )
{
- name = outputFileArg;
- name += new StringBuffer().append( filename.substring( filenameIdx , filename.lastIndexOf( ".properties" ) ) )
- .append( "_" ).append( lcLang.replaceAll("-","_") ).append( ".properties" ).toString();
//name = outputFileArg;
+ path = outputFileArg;
+ name += formatFilename( filename , filenameIdx , lang , type );
}
//use of -i @<file_containing_many_filenames>
else if( isSingleFile && outputFileArg != null && outputFileArg.length()>0 )
{
- name = outputFileArg;
- name += new StringBuffer().append( inputFileArg.substring( filenameIdx , filename.lastIndexOf( ".properties" ) ) )
- .append( "_" ).append( lcLang.replaceAll("-","_") ).append( ".properties" ).toString();
//name = outputFileArg;
+ path = outputFileArg;
+ name += formatFilename( filename , filenameIdx , lang , type );
}
else
{
@@ -284,7 +285,7 @@ public class JPropEx
}
path += name;
// Write the properties file
- System.out.println("DBG: Writing to "+path);
+ //System.out.println("DBG: Writing to "+path);
try{
BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream( path ) );
if( prop == null )
@@ -298,6 +299,75 @@ public class JPropEx
}
}
+ // we have different types of properties in the source code
+ // each needs a different file nameing scheme
+ private int detectFormat( String filename )
+ {
+ if( filename.endsWith( "_en_US.properties" ) )
+ return EXTENSION_TYPE;
+ else if( filename.endsWith("_en_us.properties" ) )
+ return JAVA_ENUS_TYPE;
+ else if( filename.endsWith( ".properties" ) )
+ return JAVA_TYPE;
+
+ // Can not detect, exit
+ System.err.println("ERROR: Invalid file name. Only allowed (case sensitive!) *_en_US.properties , *_en_us.properties or *.properties\n");
+ System.exit(-1);
+ return JAVA_TYPE; // dummy
+ }
+
+ private String formatFilename( String filename , int filenameIdx , String lang , int type )
+ {
+
+ if( !lang.equals( "en-US" ) )
+ {
+ // Parse iso code
+ int pos = lang.indexOf("-");
+ String langpart1 = new String();
+ String langpart2 = new String();
+ if( pos == -1 )
+ {
+ langpart1 = lang;
+ }
+ else if( pos > 0 )
+ {
+ langpart1 = lang.substring( 0 , pos );
+ langpart2 = lang.substring( pos+1 , lang.length() );
+ }
+ // change filename according to the type
+ switch( type )
+ {
+ // -> de_DE
+ case EXTENSION_TYPE:
+ lang = langpart1.toLowerCase();
+ if( langpart2.length() > 0 ) // -> en_US
+ lang += "_" + langpart2.toUpperCase();
+ else // -> de_DE
+ lang += "_" + langpart1.toUpperCase();
+ return new StringBuffer().append( filename.substring( filenameIdx , filename.lastIndexOf( "_en_US.properties" ) ) )
+ .append( "_" ).append( lang.replaceAll("-","_") ).append( ".properties" ).toString();
+ // -> de
+ case JAVA_ENUS_TYPE:
+ lang = langpart1.toLowerCase();
+ if( langpart2.length() > 0 )
+ lang += "_" + langpart2.toLowerCase();
+ return new StringBuffer().append( filename.substring( filenameIdx , filename.lastIndexOf( "_en_us.properties" ) ) )
+ .append( "_" ).append( lang.replaceAll("-","_") ).append( ".properties" ).toString();
+ // -> de
+ case JAVA_TYPE:
+ lang = langpart1.toLowerCase();
+ if( langpart2.length() > 0 )
+ lang += "_" + langpart2.toLowerCase();
+ return new StringBuffer().append( filename.substring( filenameIdx , filename.lastIndexOf( ".properties" ) ) )
+ .append( "_" ).append( lang.replaceAll("-","_") ).append( ".properties" ).toString();
+ default:
+ System.err.println("ERROR: Something is really broken here, l10ntools/java/jprop/java/JPropEx.java :: formatFilename()");
+ System.exit( -1 );
+ break;
+ }
+ }
+ return filename; // don't change en-US source file name
+ }
private SdfData getSdfData()
{
SdfData data = new SdfData( inputSdfFileArg );
diff --git a/l10ntools/java/jpropex/java/NoLocalizeFilter.java b/l10ntools/java/jpropex/java/NoLocalizeFilter.java
index 3bfa53df2296..989ee64bfc86 100644
--- a/l10ntools/java/jpropex/java/NoLocalizeFilter.java
+++ b/l10ntools/java/jpropex/java/NoLocalizeFilter.java
@@ -44,9 +44,7 @@ public class NoLocalizeFilter extends FilterInputStream
String search = new String( b );
Matcher m = p.matcher( search );
if( m.find() )
- //if( search.contains("x-no-translate" ) ) // TODO: fixme!
{
- System.out.println("found x-no-translate");
in.close();
close();
System.exit( 0 );
diff --git a/l10ntools/java/jpropex/java/SdfData.java b/l10ntools/java/jpropex/java/SdfData.java
index 80b8ea890f26..6f79909df1b2 100644
--- a/l10ntools/java/jpropex/java/SdfData.java
+++ b/l10ntools/java/jpropex/java/SdfData.java
@@ -84,8 +84,7 @@ public class SdfData
}
catch( IOException e )
{
- System.out.println("Error: reading file " + filename);
- System.exit( -1 );
+ System.out.println("Warning: can not read file " + filename);
}
}
public void write( String filename )
diff --git a/l10ntools/source/export2.cxx b/l10ntools/source/export2.cxx
index 8a384b415b6f..fc8f823b7deb 100644
--- a/l10ntools/source/export2.cxx
+++ b/l10ntools/source/export2.cxx
@@ -703,11 +703,6 @@ void Export::getRandomName( ByteString& sRandStr )
DirEntry Export::GetTempFile()
/*****************************************************************************/
{
-#if defined(WNT) || defined(OS2)
- String sTempDir( Export::GetEnv( "TEMP" ), RTL_TEXTENCODING_ASCII_US );
-#else
- String sTempDir( String::CreateFromAscii( "/tmp" ));
-#endif
rtl::OUString* sTempFilename = new rtl::OUString();
// Create a temp file
diff --git a/l10ntools/source/help/HelpLinker.cxx b/l10ntools/source/help/HelpLinker.cxx
index 9eed9132a5ec..94139f89de1e 100644
--- a/l10ntools/source/help/HelpLinker.cxx
+++ b/l10ntools/source/help/HelpLinker.cxx
@@ -245,7 +245,11 @@ class HelpLinker
{
public:
void main(std::vector<std::string> &args,
- std::string* pExtensionPath = NULL, const rtl::OUString* pOfficeHelpPath = NULL )
+// std::string* pExtensionPath = NULL, const rtl::OUString* pOfficeHelpPath = NULL )
+ std::string* pExtensionPath = NULL,
+ std::string* pDestination = NULL,
+ const rtl::OUString* pOfficeHelpPath = NULL )
+
throw( HelpProcessingException );
HelpLinker()
@@ -269,6 +273,7 @@ private:
std::string lang;
std::string hid;
std::string extensionPath;
+ std::string extensionDestination;
bool bExtensionMode;
fs::path indexDirName;
Stringtable hidlistTranslation;
@@ -396,7 +401,8 @@ void HelpLinker::link() throw( HelpProcessingException )
if( bExtensionMode )
{
- indexDirParentName = sourceRoot;
+ //indexDirParentName = sourceRoot;
+ indexDirParentName = extensionDestination;
}
else
{
@@ -752,8 +758,9 @@ void HelpLinker::link() throw( HelpProcessingException )
void HelpLinker::main( std::vector<std::string> &args,
- std::string* pExtensionPath, const rtl::OUString* pOfficeHelpPath )
- throw( HelpProcessingException )
+ std::string* pExtensionPath, std::string* pDestination,
+ const rtl::OUString* pOfficeHelpPath )
+ throw( HelpProcessingException )
{
rtl::OUString aOfficeHelpPath;
@@ -764,7 +771,7 @@ void HelpLinker::main( std::vector<std::string> &args,
bExtensionMode = true;
extensionPath = *pExtensionPath;
sourceRoot = fs::path(extensionPath);
-
+ extensionDestination = *pDestination;
aOfficeHelpPath = *pOfficeHelpPath;
}
if (args.size() > 0 && args[0][0] == '@')
@@ -1069,6 +1076,7 @@ HELPLINKER_DLLPUBLIC bool compileExtensionHelp
const rtl::OUString& aExtensionName,
const rtl::OUString& aExtensionLanguageRoot,
sal_Int32 nXhpFileCount, const rtl::OUString* pXhpFiles,
+ const rtl::OUString& aDestination,
HelpProcessingErrorInfo& o_rHelpProcessingErrorInfo
)
{
@@ -1102,13 +1110,16 @@ HELPLINKER_DLLPUBLIC bool compileExtensionHelp
rtl::OString aOExtensionLanguageRoot = rtl::OUStringToOString( aExtensionLanguageRoot, fs::getThreadTextEncoding() );
const char* pExtensionPath = aOExtensionLanguageRoot.getStr();
std::string aStdStrExtensionPath = pExtensionPath;
+ rtl::OString aODestination = rtl::OUStringToOString(aDestination, fs::getThreadTextEncoding());
+ const char* pDestination = aODestination.getStr();
+ std::string aStdStrDestination = pDestination;
// Set error handler
xmlSetStructuredErrorFunc( NULL, (xmlStructuredErrorFunc)StructuredXMLErrorFunction );
try
{
HelpLinker* pHelpLinker = new HelpLinker();
- pHelpLinker->main( args, &aStdStrExtensionPath, &aOfficeHelpPath );
+ pHelpLinker->main( args, &aStdStrExtensionPath, &aStdStrDestination, &aOfficeHelpPath );
delete pHelpLinker;
}
catch( const HelpProcessingException& e )
diff --git a/l10ntools/source/help/compilehelp.hxx b/l10ntools/source/help/compilehelp.hxx
index 472b15231639..9c59083bf038 100644
--- a/l10ntools/source/help/compilehelp.hxx
+++ b/l10ntools/source/help/compilehelp.hxx
@@ -72,6 +72,7 @@ HELPLINKER_DLLPUBLIC bool compileExtensionHelp
const rtl::OUString& aExtensionName,
const rtl::OUString& aExtensionLanguageRoot,
sal_Int32 nXhpFileCount, const rtl::OUString* pXhpFiles,
+ const rtl::OUString& aDestination,
HelpProcessingErrorInfo& o_rHelpProcessingErrorInfo
);
diff --git a/l10ntools/source/localize.cxx b/l10ntools/source/localize.cxx
index 1d1428ff2dc0..6cecb0972cb7 100644
--- a/l10ntools/source/localize.cxx
+++ b/l10ntools/source/localize.cxx
@@ -66,7 +66,7 @@ const char *ExeTable[][5] = {
{ "xcs", "cfgex", "-UTF8 -e -f", "negative", "iso" },
{ "xrm", "xrmex", "-UTF8 -e", "negative", "iso" },
{ "xhp", "helpex", " -e", "negative", "noiso" },
- //{ "properties", "jpropex", " -e", "negative", "noiso" },
+ { "properties", "jpropex", " -e", "negative", "noiso" },
{ "NULL", "NULL", "NULL", "NULL", "NULL" }
};
diff --git a/l10ntools/source/merge.cxx b/l10ntools/source/merge.cxx
index e15a5c8a28fa..eb68215c791e 100644
--- a/l10ntools/source/merge.cxx
+++ b/l10ntools/source/merge.cxx
@@ -351,7 +351,7 @@ MergeData *MergeDataFile::GetMergeData( ResData *pResData , bool bCaseSensitive
sLID = pResData->sId;
pResData->sGId = sGID;
pResData->sId = sLID;
-
+ //printf("MergeData:: Search gid=%s lid=%s filename=%s \n", pResData->sGId.GetBuffer(),pResData->sId.GetBuffer(),pResData->sFilename.GetBuffer() );
ByteString sKey = CreateKey( pResData->sResTyp , pResData->sGId , pResData->sId , pResData->sFilename , bCaseSensitive );
//printf("DBG: Searching [%s]\n",sKey.GetBuffer());
@@ -361,6 +361,7 @@ MergeData *MergeDataFile::GetMergeData( ResData *pResData , bool bCaseSensitive
//printf("DBG: Found[%s]\n",sKey.GetBuffer());
return aMap[ sKey ];
}
+ //Dump();
pResData->sGId = sOldG;
pResData->sId = sOldL;
//printf("DBG: Found[%s]\n",sKey.GetBuffer());
diff --git a/l10ntools/source/xrmlex.l b/l10ntools/source/xrmlex.l
index c28aede4c6c1..4770a851c741 100644
--- a/l10ntools/source/xrmlex.l
+++ b/l10ntools/source/xrmlex.l
@@ -55,54 +55,55 @@ int bText=0;
%%
-"<Readme"[^\>]*\> {
- WorkOnTokenSet( XRM_README_START, yytext );
+"<p "[^\>]*xml:lang[^\>]*\> {
+ WorkOnTokenSet( XRM_TEXT_START , yytext );
}
-"</Readme>" {
- WorkOnTokenSet( XRM_README_END, yytext );
+"</p>" {
+ WorkOnTokenSet( XRM_TEXT_END, yytext );
}
-"<apochelp"[^\>]*\> {
- WorkOnTokenSet( XRM_README_START, yytext );
+"<h1 "[^\>]*xml:lang[^\>]*\> {
+ WorkOnTokenSet( XRM_TEXT_START , yytext );
}
-"</apochelp>" {
- WorkOnTokenSet( XRM_README_END, yytext );
+"</h1>" {
+ WorkOnTokenSet( XRM_TEXT_END, yytext );
}
-
-"<Section"[^\>]*\> {
- WorkOnTokenSet( XRM_SECTION_START, yytext );
+"<h2 "[^\>]*xml:lang[^\>]*\> {
+ WorkOnTokenSet( XRM_TEXT_START , yytext );
}
-"</Section>" {
- WorkOnTokenSet( XRM_SECTION_END, yytext );
+"</h2>" {
+ WorkOnTokenSet( XRM_TEXT_END, yytext );
}
-
-"<Paragraph"[^\>]*\> {
- WorkOnTokenSet( XRM_PARAGRAPH_START, yytext );
+"<h3 "[^\>]*xml:lang[^\>]*\> {
+ WorkOnTokenSet( XRM_TEXT_START , yytext );
}
-"</Paragraph>" {
- WorkOnTokenSet( XRM_PARAGRAPH_END, yytext );
+"</h3>" {
+ WorkOnTokenSet( XRM_TEXT_END, yytext );
}
-
-"<Text"[^\>]*\> {
- WorkOnTokenSet( XRM_TEXT_START, yytext );
+"<h4 "[^\>]*xml:lang[^\>]*\> {
+ WorkOnTokenSet( XRM_TEXT_START , yytext );
}
-"</Text>" {
+"</h4>" {
WorkOnTokenSet( XRM_TEXT_END, yytext );
}
-
-"<List"[^\>]*\> {
- WorkOnTokenSet( XRM_LIST_START, yytext );
+"<h5 "[^\>]*xml:lang[^\>]*\> {
+ WorkOnTokenSet( XRM_TEXT_START , yytext );
}
-"</List>" {
- WorkOnTokenSet( XRM_LIST_END, yytext );
+"</h5>" {
+ WorkOnTokenSet( XRM_TEXT_END, yytext );
}
+
+
+
+
+
"<!--" {
char c1 = 0, c2 = 0, c3 = input();
char pChar[2];
diff --git a/l10ntools/source/xrmmerge.cxx b/l10ntools/source/xrmmerge.cxx
index 149fd560fe3b..b77f75ea04e5 100644
--- a/l10ntools/source/xrmmerge.cxx
+++ b/l10ntools/source/xrmmerge.cxx
@@ -268,7 +268,7 @@ extern FILE *GetXrmFile()
int WorkOnTokenSet( int nTyp, char *pTokenText )
/*****************************************************************************/
{
-// printf("Typ = %d , text = '%s'\n",nTyp , pTokenText );
+ //printf("Typ = %d , text = '%s'\n",nTyp , pTokenText );
pParser->Execute( nTyp, pTokenText );
return 1;
@@ -346,10 +346,10 @@ int XRMResParser::Execute( int nToken, char * pToken )
sLID = "";
sGID += ".";
sGID += GetAttribute( rToken, "id" );
- if ( GetAttribute( rToken, "localized" ) == "false" )
+// if ( GetAttribute( rToken, "localized" ) == "false" )
// sLocalized += "0";
- sLocalized = false;
- else
+// sLocalized = false;
+// else
// sLocalized += "1";
sLocalized = true;
break;
@@ -368,47 +368,32 @@ int XRMResParser::Execute( int nToken, char * pToken )
}
break;
- case XRM_TEXT_START:
-// if ( sLocalized.GetChar( sLocalized.Len() - 1 ) == '1' ) {
- if ( sLocalized ) {
-
+ case XRM_TEXT_START:{
+ //printf("->XRM_TEXT_START\n");
ByteString sNewLID = GetAttribute( rToken, "id" );
if ( sNewLID != sLID ) {
- EndOfText( sCurrentOpenTag, sCurrentCloseTag );
+ //EndOfText( sCurrentOpenTag, sCurrentCloseTag );
sLID = sNewLID;
}
bText = TRUE;
sCurrentText = "";
sCurrentOpenTag = rToken;
Output( rToken );
+ //printf("<-XRM_TEXT_START\n");
}
break;
case XRM_TEXT_END: {
-// if ( sLocalized.GetChar( sLocalized.Len() - 1 ) == '1' ) {
- if( sLocalized ){
sCurrentCloseTag = rToken;
-
+ //printf("->XRM_TEXT_END\n");
ByteString sLang = GetAttribute( sCurrentOpenTag, "xml:lang" );
- if( sLang.EqualsIgnoreCaseAscii("de") ){
- ULONG nLen = 0;
- while ( sCurrentText.Len() != nLen )
- {
- nLen = sCurrentText.Len();
- sCurrentText.SearchAndReplaceAll( "\n\t", "\n" );
- sCurrentText.SearchAndReplaceAll( "\n ", "\n" );
- }
- sCurrentText.SearchAndReplaceAll( "\n", " " );
- sCurrentCloseTag = rToken;
- }
WorkOnText( sCurrentOpenTag, sCurrentText );
Output( sCurrentText );
-
- //fprintf( stdout, "%s %s\n", sGID.GetBuffer(), sLID.GetBuffer());
- //fprintf( stdout, "%s\n\n", sCurrentText.GetBuffer());
-
+ EndOfText( sCurrentOpenTag, sCurrentCloseTag );// <---
bText = FALSE;
- }
+ rToken = ByteString("");
+ sCurrentText = ByteString("");
+ //printf("<-XRM_TEXT_END");
}
break;
@@ -429,8 +414,9 @@ int XRMResParser::Execute( int nToken, char * pToken )
}
if ( !bText )
+ {
Output( rToken );
-
+ }
return 0;
}
@@ -598,15 +584,19 @@ void XRMResExport::EndOfText(
sCur = aLanguages[ n ];
ByteString sAct = pResData->sText[ sCur ];
- Export::UnquotHTML( sAct );
+ //Export::UnquotHTML( sAct );
sAct.EraseAllChars( 0x0A );
ByteString sOutput( sPrj ); sOutput += "\t";
sOutput += sPath;
sOutput += "\t0\t";
sOutput += "readmeitem\t";
- sOutput += pResData->sGId; sOutput += "\t";
- sOutput += pResData->sId; sOutput += "\t\t\t0\t";
+ sOutput += pResData->sId;
+ // USE LID AS GID OR MERGE DON'T WORK
+ //sOutput += pResData->sGId;
+ sOutput += "\t";
+ sOutput += pResData->sId;
+ sOutput += "\t\t\t0\t";
sOutput += sCur;
sOutput += "\t";
@@ -615,7 +605,8 @@ void XRMResExport::EndOfText(
sOutput.SearchAndReplaceAll( sSearch, "_" );
//if( !sCur.EqualsIgnoreCaseAscii("de") ||( sCur.EqualsIgnoreCaseAscii("de") && !Export::isMergingGermanAllowed( sPrj ) ) )
- pOutputStream->WriteLine( sOutput );
+ if( sAct.Len() > 1 )
+ pOutputStream->WriteLine( sOutput );
}
}
delete pResData;
@@ -666,12 +657,14 @@ void XRMResMerge::WorkOnText(
if ( pMergeDataFile ) {
if ( !pResData ) {
ByteString sPlatform( "" );
- pResData = new ResData( sPlatform, GetGID() , sFilename );
+// pResData = new ResData( sPlatform, GetGID() , sFilename );
+ pResData = new ResData( sPlatform, GetLID() , sFilename );
pResData->sId = GetLID();
+
pResData->sResTyp = "readmeitem";
}
- PFormEntrys *pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
+ PFormEntrys *pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
if ( pEntrys ) {
ByteString sContent;
if ( Export::isAllowed( sLang ) &&
@@ -682,7 +675,7 @@ void XRMResMerge::WorkOnText(
{
rText = sContent;
ConvertStringToXMLFormat( rText );
- Export::QuotHTMLXRM( rText );
+ //Export::QuotHTMLXRM( rText );
}
}
}
@@ -692,7 +685,8 @@ void XRMResMerge::WorkOnText(
void XRMResMerge::Output( const ByteString& rOutput )
/*****************************************************************************/
{
- if ( pOutputStream )
+ //printf("W: %s\n",rOutput.GetBuffer());
+ if ( pOutputStream && rOutput.Len() > 0 )
pOutputStream->Write( rOutput.GetBuffer(), rOutput.Len());
}
@@ -703,6 +697,8 @@ void XRMResMerge::EndOfText(
)
/*****************************************************************************/
{
+
+ Output( rCloseTag );
if ( pMergeDataFile && pResData ) {
PFormEntrys *pEntrys = pMergeDataFile->GetPFormEntrys( pResData );
if ( pEntrys ) {
@@ -710,18 +706,13 @@ void XRMResMerge::EndOfText(
for( unsigned int n = 0; n < aLanguages.size(); n++ ){
sCur = aLanguages[ n ];
ByteString sContent;
-//<<<<<<< xrmmerge.cxx
if ( !sCur.EqualsIgnoreCaseAscii("en-US") &&
- // ( !sCur.EqualsIgnoreCaseAscii("de") ||( sCur.EqualsIgnoreCaseAscii("de") && Export::isMergingGermanAllowed( sPrj ) )) &&
-//=======
-// if ( Export::isAllowed( sCur ) &&
-//>>>>>>> 1.17
( pEntrys->GetText(
sContent, STRING_TYP_TEXT, sCur, TRUE )) &&
( sContent != "-" ) && ( sContent.Len()))
{
ByteString sText( sContent );
- Export::QuotHTMLXRM( sText );
+ //Export::QuotHTMLXRM( sText );
ByteString sAdditionalLine( "\t" );
sAdditionalLine += rOpenTag;
diff --git a/libxml2/libxml2-mingw.patch b/libxml2/libxml2-mingw.patch
index d160dcb70138..651b0c13f1bb 100755..100644
--- a/libxml2/libxml2-mingw.patch
+++ b/libxml2/libxml2-mingw.patch
@@ -9,6 +9,19 @@
*-*-cygwin*)
MODULE_EXTENSION=".dll"
{ $as_echo "$as_me:$LINENO: checking for dlopen in -lcygwin" >&5
+@@ -20632,11 +20636,10 @@
+
+ fi
+ case $host_os in
+- *mingw32*) if test "$THREAD_LIBS" != "-lpthread"; then
++ *mingw32*)
+ WITH_THREADS="1"
+ THREADS_W32="Win32"
+ THREAD_CFLAGS="$THREAD_CFLAGS -DHAVE_WIN32_THREADS"
+- fi
+ ;;
+ *cygwin*) THREAD_LIBS=""
+ ;;
--- misc/libxml2-2.7.6/libxml.h 2007-11-23 19:47:23.000000000 +0900
+++ misc/build/libxml2-2.7.6/libxml.h 2009-07-10 14:37:34.988250000 +0900
@@ -30,6 +30,10 @@
@@ -22,3 +35,14 @@
#include <libxml/xmlversion.h>
#endif
+--- misc/libxml2-2.7.6/include/libxml/xmlexports.h 2009-09-25 00:31:59.000000000 +0900
++++ misc/build/libxml2-2.7.6/include/libxml/xmlexports.h 2010-06-06 11:15:54.160750000 +0900
+@@ -113,7 +113,7 @@
+ * _imp__xmlFree listed as missing. Try to workaround the problem
+ * by also making that declaration when compiling client code.
+ */
+- #if !defined(LIBXML_STATIC)
++ #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
+ #define XMLPUBFUN __declspec(dllexport)
+ #define XMLPUBVAR __declspec(dllexport)
+ #else
diff --git a/libxml2/makefile.mk b/libxml2/makefile.mk
index 93275b65b2d8..555d87254ff8 100644
--- a/libxml2/makefile.mk
+++ b/libxml2/makefile.mk
@@ -55,17 +55,17 @@ PATCH_FILES=libxml2-configure.patch \
.IF "$(OS)"=="WNT"
.IF "$(COM)"=="GCC"
-xml2_CC=$(CC)
+xml2_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
xml2_CC+=-shared-libgcc
.ENDIF
-xml2_LIBS=-lws2_32 -lmingwthrd
+xml2_LIBS=-lws2_32
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
xml2_LIBS+=-lstdc++_s
.ENDIF
CONFIGURE_DIR=
CONFIGURE_ACTION=.$/configure
-CONFIGURE_FLAGS=--enable-ipv6=no --without-python --without-zlib --enable-static=no --without-debug --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(xml2_CC)" CFLAGS=-D_MT LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc -L$(ILIB:s/;/ -L/)" LIBS="$(xml2_LIBS)" OBJDUMP="$(WRAPCMD) objdump"
+CONFIGURE_FLAGS=--enable-ipv6=no --without-python --without-zlib --enable-static=no --without-debug --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(xml2_CC)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc-v2 -L$(ILIB:s/;/ -L/)" LIBS="$(xml2_LIBS)" OBJDUMP=objdump
BUILD_ACTION=$(GNUMAKE)
BUILD_DIR=$(CONFIGURE_DIR)
.ELSE
diff --git a/libxmlsec/makefile.mk b/libxmlsec/makefile.mk
index 1f0e5976f5e5..9b7ea1b0aa08 100644
--- a/libxmlsec/makefile.mk
+++ b/libxmlsec/makefile.mk
@@ -87,17 +87,17 @@ CRYPTOLIB=nss
.IF "$(OS)"=="WNT"
.IF "$(COM)"=="GCC"
-xmlsec_CC=$(CC)
+xmlsec_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
xmlsec_CC+=-shared-libgcc
.ENDIF
-xmlsec_LIBS=-lmingwthrd
+xmlsec_LIBS=
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
xmlsec_LIBS+=-lstdc++_s
.ENDIF
CONFIGURE_DIR=
CONFIGURE_ACTION=.$/configure
-CONFIGURE_FLAGS=--with-libxslt=no --with-openssl=no --with-gnutls=no --with-mozilla_ver=1.7.5 --enable-mscrypto --disable-crypto-dl --build=i586-pc-mingw32 --host=i586-pc-mingw32 CC="$(xmlsec_CC)" CFLAGS="-D_MT" LDFLAGS="-no-undefined -L$(ILIB:s/;/ -L/)" LIBS="$(xmlsec_LIBS)" LIBXML2LIB=$(LIBXML2LIB) ZLIB3RDLIB=$(ZLIB3RDLIB) OBJDUMP="$(WRAPCMD) objdump"
+CONFIGURE_FLAGS=--with-libxslt=no --with-openssl=no --with-gnutls=no --with-mozilla_ver=1.7.5 --enable-mscrypto --disable-crypto-dl --build=i586-pc-mingw32 --host=i586-pc-mingw32 CC="$(xmlsec_CC)" LDFLAGS="-no-undefined -L$(ILIB:s/;/ -L/)" LIBS="$(xmlsec_LIBS)" LIBXML2LIB=$(LIBXML2LIB) ZLIB3RDLIB=$(ZLIB3RDLIB) OBJDUMP="$(WRAPCMD) objdump"
.IF "$(SYSTEM_MOZILLA)" != "YES"
CONFIGURE_FLAGS+=--enable-pkgconfig=no
diff --git a/libxmlsec/xmlsec1-customkeymanage.patch b/libxmlsec/xmlsec1-customkeymanage.patch
index d5c771a67ab8..8bc97c474d56 100644
--- a/libxmlsec/xmlsec1-customkeymanage.patch
+++ b/libxmlsec/xmlsec1-customkeymanage.patch
@@ -445,7 +445,7 @@
+
--- misc/xmlsec1-1.2.14/src/mscrypto/akmngr.c 2009-09-21 14:07:19.078910929 +0200
+++ misc/build/xmlsec1-1.2.14/src/mscrypto/akmngr.c 2009-09-21 14:02:48.531281225 +0200
-@@ -1 +1,235 @@
+@@ -1 +1,236 @@
-dummy
+/**
+ * XMLSec library
@@ -459,6 +459,7 @@
+
+#include <xmlsec/xmlsec.h>
+#include <xmlsec/keys.h>
++#include <xmlsec/keysmngr.h>
+#include <xmlsec/transforms.h>
+#include <xmlsec/errors.h>
+
diff --git a/libxmlsec/xmlsec1-mingw32.patch b/libxmlsec/xmlsec1-mingw32.patch
index 3aaf19fe5a5c..fd71ddf87c54 100644
--- a/libxmlsec/xmlsec1-mingw32.patch
+++ b/libxmlsec/xmlsec1-mingw32.patch
@@ -221,332 +221,6 @@
*.$libext)
if test "$pass" = conv; then
deplibs="$deplib $deplibs"
---- misc/xmlsec1-1.2.14/src/mscrypto/certkeys.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/certkeys.c 2009-09-29 15:49:39.643186151 +0200
-@@ -947,7 +947,11 @@
- static void xmlSecMSCryptoKeyDataRsaDebugDump(xmlSecKeyDataPtr data, FILE* output);
- static void xmlSecMSCryptoKeyDataRsaDebugXmlDump(xmlSecKeyDataPtr data, FILE* output);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRsaKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRsaKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecMSCryptoKeyDataSize,
-
-@@ -1658,7 +1662,11 @@
- static void xmlSecMSCryptoKeyDataDsaDebugXmlDump(xmlSecKeyDataPtr data,
- FILE* output);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDsaKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDsaKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecMSCryptoKeyDataSize,
-
---- misc/xmlsec1-1.2.14/src/mscrypto/ciphers.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/ciphers.c 2009-09-29 15:49:39.652528324 +0200
-@@ -802,7 +802,11 @@
- * AES CBC cipher transforms
- *
- ********************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoAes128CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoAes128CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
-@@ -841,7 +845,11 @@
- return(&xmlSecMSCryptoAes128CbcKlass);
- }
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoAes192CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoAes192CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
-@@ -880,7 +888,11 @@
- return(&xmlSecMSCryptoAes192CbcKlass);
- }
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoAes256CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoAes256CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoBlockCipherSize, /* xmlSecSize objSize */
-@@ -923,7 +935,11 @@
-
-
- #ifndef XMLSEC_NO_DES
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoDes3CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoDes3CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* size_t klassSize */
- xmlSecMSCryptoBlockCipherSize, /* size_t objSize */
---- misc/xmlsec1-1.2.14/src/mscrypto/digests.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/digests.c 2009-09-29 15:49:39.660554904 +0200
-@@ -329,7 +329,11 @@
- * SHA1
- *
- *****************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoSha1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoSha1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* size_t klassSize */
- xmlSecMSCryptoDigestSize, /* size_t objSize */
---- misc/xmlsec1-1.2.14/src/mscrypto/keysstore.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/keysstore.c 2009-09-29 15:49:39.667289994 +0200
-@@ -66,7 +66,11 @@
- const xmlChar* name,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyStoreKlass xmlSecMSCryptoKeysStoreKlass = {
-+#else
- static xmlSecKeyStoreKlass xmlSecMSCryptoKeysStoreKlass = {
-+#endif
- sizeof(xmlSecKeyStoreKlass),
- xmlSecMSCryptoKeysStoreSize,
-
---- misc/xmlsec1-1.2.14/src/mscrypto/kt_rsa.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/kt_rsa.c 2009-09-29 15:49:39.674284044 +0200
-@@ -66,7 +66,11 @@
- static int xmlSecMSCryptoRsaPkcs1Process (xmlSecTransformPtr transform,
- xmlSecTransformCtxPtr transformCtx);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoRsaPkcs1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoRsaPkcs1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoRsaPkcs1Size, /* xmlSecSize objSize */
---- misc/xmlsec1-1.2.14/src/mscrypto/signatures.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/signatures.c 2009-09-29 15:49:39.682580497 +0200
-@@ -524,7 +524,11 @@
- * RSA-SHA1 signature transform
- *
- ***************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoRsaSha1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoRsaSha1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoSignatureSize, /* xmlSecSize objSize */
-@@ -572,7 +576,11 @@
- *
- ***************************************************************************/
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecMSCryptoDsaSha1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecMSCryptoDsaSha1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecMSCryptoSignatureSize, /* xmlSecSize objSize */
---- misc/xmlsec1-1.2.14/src/mscrypto/symkeys.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/symkeys.c 2009-09-29 15:49:39.691081347 +0200
-@@ -72,7 +72,11 @@
- * <xmlsec:AESKeyValue> processing
- *
- *************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataAesKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataAesKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecKeyDataBinarySize,
-
-@@ -153,7 +157,11 @@
- * <xmlsec:DESKeyValue> processing
- *
- *************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDesKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataDesKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecKeyDataBinarySize,
-
---- misc/xmlsec1-1.2.14/src/mscrypto/x509.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/x509.c 2009-09-29 15:49:39.699931741 +0200
-@@ -243,7 +243,11 @@
-
-
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataX509Klass = {
-+#else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataX509Klass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecMSCryptoX509DataSize,
-
-@@ -2159,7 +2163,11 @@
- xmlSecSize bufSize,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRawX509CertKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecMSCryptoKeyDataRawX509CertKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- sizeof(xmlSecKeyData),
-
---- misc/xmlsec1-1.2.14/src/mscrypto/x509vfy.c 2009-09-29 15:55:33.502779834 +0200
-+++ misc/build/xmlsec1-1.2.14/src/mscrypto/x509vfy.c 2009-09-29 15:49:39.708831697 +0200
-@@ -67,7 +67,11 @@
- static int xmlSecMSCryptoX509StoreInitialize (xmlSecKeyDataStorePtr store);
- static void xmlSecMSCryptoX509StoreFinalize (xmlSecKeyDataStorePtr store);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataStoreKlass xmlSecMSCryptoX509StoreKlass = {
-+#else
- static xmlSecKeyDataStoreKlass xmlSecMSCryptoX509StoreKlass = {
-+#endif
- sizeof(xmlSecKeyDataStoreKlass),
- xmlSecMSCryptoX509StoreSize,
-
---- misc/xmlsec1-1.2.14/src/nss/ciphers.c 2009-09-29 15:55:33.488430535 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/ciphers.c 2009-09-29 15:49:39.717511164 +0200
-@@ -777,7 +777,11 @@
- * AES CBC cipher transforms
- *
- ********************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssAes128CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecNssAes128CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
-@@ -816,7 +820,11 @@
- return(&xmlSecNssAes128CbcKlass);
- }
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecNssAes192CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
-@@ -855,7 +863,11 @@
- return(&xmlSecNssAes192CbcKlass);
- }
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecNssAes256CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
-@@ -897,7 +909,11 @@
- #endif /* XMLSEC_NO_AES */
-
- #ifndef XMLSEC_NO_DES
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
-+#else
- static xmlSecTransformKlass xmlSecNssDes3CbcKlass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssBlockCipherSize, /* xmlSecSize objSize */
---- misc/xmlsec1-1.2.14/src/nss/digests.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/digests.c 2009-09-29 15:49:39.725650968 +0200
-@@ -285,7 +285,11 @@
- * SHA1 Digest transforms
- *
- *****************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssSha1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecNssSha1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssDigestSize, /* xmlSecSize objSize */
---- misc/xmlsec1-1.2.14/src/nss/hmac.c 2009-09-29 15:55:33.409285968 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/hmac.c 2009-09-29 15:49:39.733673690 +0200
-@@ -504,7 +504,11 @@
- /**
- * HMAC SHA1
- */
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssHmacSha1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecNssHmacSha1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssHmacSize, /* xmlSecSize objSize */
-@@ -546,7 +550,11 @@
- /**
- * HMAC Ripemd160
- */
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssHmacRipemd160Klass = {
-+#else
- static xmlSecTransformKlass xmlSecNssHmacRipemd160Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssHmacSize, /* xmlSecSize objSize */
-@@ -588,7 +596,11 @@
- /**
- * HMAC Md5
- */
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssHmacMd5Klass = {
-+#else
- static xmlSecTransformKlass xmlSecNssHmacMd5Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssHmacSize, /* xmlSecSize objSize */
---- misc/xmlsec1-1.2.14/src/nss/keysstore.c 2009-09-29 15:55:33.422265895 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/keysstore.c 2009-09-29 15:49:39.741628057 +0200
-@@ -487,7 +487,11 @@
- return NULL ;
- }
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
-+#else
- static xmlSecKeyStoreKlass xmlSecNssKeysStoreKlass = {
-+#endif
- sizeof( xmlSecKeyStoreKlass ) ,
- xmlSecNssKeysStoreSize ,
- BAD_CAST "implicit_nss_keys_store" ,
--- misc/xmlsec1-1.2.14/src/nss/keywrapers.c 2009-09-29 15:55:33.430875248 +0200
+++ misc/build/xmlsec1-1.2.14/src/nss/keywrapers.c 2009-09-29 15:49:39.749963247 +0200
@@ -1126,6 +1126,7 @@
@@ -581,133 +255,3 @@
#endif /* XMLSEC_NO_DES */
---- misc/xmlsec1-1.2.14/src/nss/pkikeys.c 2009-09-29 15:55:33.440002568 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/pkikeys.c 2009-09-29 15:49:39.757984523 +0200
-@@ -491,7 +491,11 @@
- static void xmlSecNssKeyDataDsaDebugXmlDump (xmlSecKeyDataPtr data,
- FILE* output);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecNssKeyDataDsaKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecNssKeyDataDsaKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssPKIKeyDataSize,
-
-@@ -1124,7 +1128,11 @@
- static void xmlSecNssKeyDataRsaDebugXmlDump (xmlSecKeyDataPtr data,
- FILE* output);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecNssKeyDataRsaKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecNssKeyDataRsaKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssPKIKeyDataSize,
-
---- misc/xmlsec1-1.2.14/src/nss/signatures.c 2009-06-25 22:53:18.000000000 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/signatures.c 2009-09-29 15:49:39.765851110 +0200
-@@ -459,7 +459,11 @@
- *
- ***************************************************************************/
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssDsaSha1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecNssDsaSha1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssSignatureSize, /* xmlSecSize objSize */
-@@ -506,7 +510,11 @@
- * RSA-SHA1 signature transform
- *
- ***************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecTransformKlass xmlSecNssRsaSha1Klass = {
-+#else
- static xmlSecTransformKlass xmlSecNssRsaSha1Klass = {
-+#endif
- /* klass/object sizes */
- sizeof(xmlSecTransformKlass), /* xmlSecSize klassSize */
- xmlSecNssSignatureSize, /* xmlSecSize objSize */
---- misc/xmlsec1-1.2.14/src/nss/symkeys.c 2009-09-29 15:55:33.448817761 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/symkeys.c 2009-09-29 15:49:39.773211741 +0200
-@@ -856,7 +856,11 @@
- * <xmlsec:AESKeyValue> processing
- *
- *************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecNssKeyDataAesKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecNssKeyDataAesKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssSymKeyDataSize,
-
-@@ -937,7 +941,11 @@
- * <xmlsec:DESKeyValue> processing
- *
- *************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecNssKeyDataDesKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecNssKeyDataDesKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssSymKeyDataSize,
-
-@@ -1019,7 +1027,11 @@
- * <xmlsec:HMACKeyValue> processing
- *
- *************************************************************************/
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecNssKeyDataHmacKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecNssKeyDataHmacKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssSymKeyDataSize,
-
---- misc/xmlsec1-1.2.14/src/nss/x509.c 2009-09-29 15:55:33.465839785 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/x509.c 2009-09-29 15:49:39.784408301 +0200
-@@ -235,7 +235,11 @@
-
-
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecNssKeyDataX509Klass = {
-+#else
- static xmlSecKeyDataKlass xmlSecNssKeyDataX509Klass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- xmlSecNssX509DataSize,
-
-@@ -1785,7 +1789,11 @@
- xmlSecSize bufSize,
- xmlSecKeyInfoCtxPtr keyInfoCtx);
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataKlass xmlSecNssKeyDataRawX509CertKlass = {
-+#else
- static xmlSecKeyDataKlass xmlSecNssKeyDataRawX509CertKlass = {
-+#endif
- sizeof(xmlSecKeyDataKlass),
- sizeof(xmlSecKeyData),
-
---- misc/xmlsec1-1.2.14/src/nss/x509vfy.c 2009-09-29 15:55:33.510337681 +0200
-+++ misc/build/xmlsec1-1.2.14/src/nss/x509vfy.c 2009-09-29 15:49:39.791239957 +0200
-@@ -64,7 +64,11 @@
- static void xmlSecNssX509StoreFinalize (xmlSecKeyDataStorePtr store);
- static int xmlSecNssIntegerToItem( const xmlChar* integer , SECItem *it ) ;
-
-+#ifdef __MINGW32__ // for runtime-pseudo-reloc
-+static struct _xmlSecKeyDataStoreKlass xmlSecNssX509StoreKlass = {
-+#else
- static xmlSecKeyDataStoreKlass xmlSecNssX509StoreKlass = {
-+#endif
- sizeof(xmlSecKeyDataStoreKlass),
- xmlSecNssX509StoreSize,
-
diff --git a/libxslt/libxslt-mingw.patch b/libxslt/libxslt-mingw.patch
new file mode 100644
index 000000000000..da8eee3b1098
--- /dev/null
+++ b/libxslt/libxslt-mingw.patch
@@ -0,0 +1,36 @@
+--- misc/libxslt-1.1.26/ltmain.sh 2010-06-06 14:43:28.785750000 +0900
++++ misc/build/libxslt-1.1.26/ltmain.sh 2010-06-06 15:14:26.176375000 +0900
+@@ -2983,15 +2983,7 @@
+ *mingw* )
+ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+ case $build in
+- *mingw* ) # actually, msys
+- # awkward: cmd appends spaces to result
+- lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+- func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+- $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+- func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+- $SED -e "$lt_sed_naive_backslashify"`
+- ;;
+- *cygwin* )
++ *cygwin* | *mingw* )
+ func_to_host_path_tmp1=`cygpath -w "$1"`
+ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+ $SED -e "$lt_sed_naive_backslashify"`
+@@ -3062,15 +3054,7 @@
+ func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e 's|^:*||' -e 's|:*$||'`
+ case $build in
+- *mingw* ) # Actually, msys.
+- # Awkward: cmd appends spaces to result.
+- lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+- func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+- $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+- func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+- $SED -e "$lt_sed_naive_backslashify"`
+- ;;
+- *cygwin* )
++ *cygwin* | *mingw* )
+ func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+ $SED -e "$lt_sed_naive_backslashify"`
diff --git a/libxslt/makefile.mk b/libxslt/makefile.mk
index b3f9ed203653..1c9370bbe8ed 100644
--- a/libxslt/makefile.mk
+++ b/libxslt/makefile.mk
@@ -52,22 +52,23 @@ TARFILE_NAME=$(PRJNAME)-$(LIBXSLTVERSION)
TARFILE_MD5=e61d0364a30146aaa3001296f853b2b9
PATCH_FILES=libxslt-configure.patch \
libxslt-win_manifest.patch \
+ libxslt-mingw.patch \
libxslt-gnome602728.patch
# This is only for UNX environment now
.IF "$(OS)"=="WNT"
.IF "$(COM)"=="GCC"
-xslt_CC=$(CC)
+xslt_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
xslt_CC+=-shared-libgcc
.ENDIF
-xslt_LIBS=-lmingwthrd
+xslt_LIBS=
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
xslt_LIBS+=-lstdc++_s
.ENDIF
CONFIGURE_DIR=
CONFIGURE_ACTION=.$/configure
-CONFIGURE_FLAGS=--enable-ipv6=no --without-crypto --without-python --enable-static=no --with-sax1=yes --build=i586-pc-mingw32 --host=i586-pc-mingw32 CC="$(xslt_CC)" CFLAGS="$(xslt_CFLAGS) -D_MT" LDFLAGS="-no-undefined -L$(ILIB:s/;/ -L/)" LIBS="$(xslt_LIBS)" LIBXML2LIB=$(LIBXML2LIB) OBJDUMP="$(WRAPCMD) objdump"
+CONFIGURE_FLAGS=--without-crypto --without-python --enable-static=no --build=i586-pc-mingw32 --host=i586-pc-mingw32 CC="$(xslt_CC)" CFLAGS="$(xslt_CFLAGS)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc-v2 -L$(ILIB:s/;/ -L/)" LIBS="$(xslt_LIBS)" LIBXML2LIB=$(LIBXML2LIB) OBJDUMP=objdump
BUILD_ACTION=chmod 777 xslt-config && $(GNUMAKE)
BUILD_FLAGS+= -j$(EXTMAXPROCESS)
BUILD_DIR=$(CONFIGURE_DIR)
diff --git a/lingucomponent/prj/build.lst b/lingucomponent/prj/build.lst
index 138e5858f70e..045aaee82999 100644
--- a/lingucomponent/prj/build.lst
+++ b/lingucomponent/prj/build.lst
@@ -1,9 +1,8 @@
-lc lingucomponent : linguistic libtextcat svl HYPHEN:hyphen HUNSPELL:hunspell NULL
+lc lingucomponent : linguistic libtextcat svl HYPHEN:hyphen HUNSPELL:hunspell MYTHES:mythes NULL
lc lingucomponent usr1 - all lc_mkout NULL
lc lingucomponent\inc nmake - all lc_inc NULL
lc lingucomponent\source\lingutil nmake - all lc_util lc_inc NULL
-lc lingucomponent\source\thesaurus\mythes nmake - all lc_mythes lc_util lc_inc NULL
-lc lingucomponent\source\thesaurus\libnth nmake - all lc_libnth lc_mythes lc_util lc_inc NULL
+lc lingucomponent\source\thesaurus\libnth nmake - all lc_libnth lc_util lc_inc NULL
lc lingucomponent\source\spellcheck\spell nmake - all lc_libspell lc_util lc_inc NULL
lc lingucomponent\source\hyphenator\altlinuxhyph\hyphen nmake - all lc_libhyphen lc_util lc_inc NULL
lc lingucomponent\source\languageguessing nmake - all lc_languageguessing lc_util lc_inc NULL
diff --git a/lingucomponent/source/spellcheck/spell/sspellimp.cxx b/lingucomponent/source/spellcheck/spell/sspellimp.cxx
index 8486f4fb38fd..0cb6ad8ec3da 100644
--- a/lingucomponent/source/spellcheck/spell/sspellimp.cxx
+++ b/lingucomponent/source/spellcheck/spell/sspellimp.cxx
@@ -452,17 +452,14 @@ Reference< XSpellAlternatives >
count = pMS->suggest(&suglst, (const char *) aWrd.getStr());
if (count) {
-
aStr.realloc( numsug + count );
OUString *pStr = aStr.getArray();
- for (int ii=0; ii < count; ii++)
+ for (int ii=0; ii < count; ++ii)
{
- // if needed add: if (suglst[ii] == NULL) continue;
OUString cvtwrd(suglst[ii],strlen(suglst[ii]),aEnc);
pStr[numsug + ii] = cvtwrd;
- free(suglst[ii]);
}
- free(suglst);
+ pMS->free_list(&suglst, count);
numsug += count;
}
}
diff --git a/lingucomponent/source/thesaurus/mythes/Makefile b/lingucomponent/source/thesaurus/mythes/Makefile
deleted file mode 100644
index b1d811296714..000000000000
--- a/lingucomponent/source/thesaurus/mythes/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-
-CXX=g++
-
-CXXFLAGS= -O2 -Wall -ansi -pedantic -I.
-
-LDFLAGS=-L. -lmythes
-
-LIBS=libmythes.a
-
-AR=ar rc
-RANLIB=ranlib
-
-OBJS = mythes.o
-
-all: example
-
-libmythes.a: $(OBJS)
- $(AR) $@ $(OBJS)
- -@ ($(RANLIB) $@ || true) >/dev/null 2>&1
-
-example: example.o $(LIBS)
- $(CXX) $(CXXFLAGS) -o $@ example.o $(LDFLAGS)
-
-%.o: %.cxx
- $(CXX) $(CXXFLAGS) -c $<
-
-clean:
- rm -f *.o *~ example libthes.a
-
-distclean: clean
-
-depend:
- makedepend -- $(CXXFLAGS) -- *.[ch]xx
-
-# DO NOT DELETE THIS LINE -- make depend depends on it.
-
-mythes.o: mythes.hxx
-example.o: mythes.hxx
-
diff --git a/lingucomponent/source/thesaurus/mythes/README b/lingucomponent/source/thesaurus/mythes/README
deleted file mode 100644
index 421f16a712fe..000000000000
--- a/lingucomponent/source/thesaurus/mythes/README
+++ /dev/null
@@ -1,60 +0,0 @@
-MyThes is a simple thesaurus that uses a structured
-text data file and an index file with binary search
-to lookup words and phrases and return information
-on part of speech, meanings, and synonyms
-
-MyThes was written to provide a thesaurus for the
-OpenOffice.org project
-
-The Main features of MyThes are:
-
-1. written in C++ to make it easier to interface with
- Pspell, OpenOffice, AbiWord, etc
-
-2. it is stateless, uses no static variables and
- should be completely reentrant with no ifdefs
-
-3. it compiles with -ansi and -pedantic and -Wall
- with no warnings so it should be quite portable
-
-4. it uses a perl program to read the structured
- text file and create the index needed for bianry
- searching (see dictionaries/en_US/th_gen_idx.pl)
-
-5. it is very simple with *lots* of comments.
- The main "smarts" are in the structure of the
- text file that makes up the thesaurus data
-
-6. It comes with a ready-to-go structured thesaurus
- data file for en_US extracted from the WordNet-2.0 data.
- (see dictioanries/en_US/th_en_US_new.dat)
-
- Please see WordNet_license.txt and WordNet_readme.txt
- for more information on the very useful project!
- (found in dictionaries/en_US/)
-
-7. The source code has a BSD license (and no advertising clause)
-
-
-MyThes has the world's simplest Makefile and no
-configure support. It does come with a simple example
-program that looks up some words and returns meanings
-and synonyms.
-
-To build it simply do the following:
-
-unzip mythes.zip
-cd mythes
-make
-
-To run the example program:
-./example th_en_US_new.idx th_en_US_new.dat checkme.lst
-
-Please play around with it and let me know
-what you think.
-
-Thanks,
-
-Kevin Hendricks
-kevin.hendricks@sympatico.ca
-
diff --git a/lingucomponent/source/thesaurus/mythes/checkme.lst b/lingucomponent/source/thesaurus/mythes/checkme.lst
deleted file mode 100644
index 120d343a9e0f..000000000000
--- a/lingucomponent/source/thesaurus/mythes/checkme.lst
+++ /dev/null
@@ -1,4 +0,0 @@
-simple
-complex
-junk
-jhjhjh
diff --git a/lingucomponent/source/thesaurus/mythes/data_layout.txt b/lingucomponent/source/thesaurus/mythes/data_layout.txt
deleted file mode 100644
index ef4bc255d96a..000000000000
--- a/lingucomponent/source/thesaurus/mythes/data_layout.txt
+++ /dev/null
@@ -1,131 +0,0 @@
-Description of the Structure of the Data needed by MyThes
---------------------------------------------------------
-
-MyThes is very simple. Almost all of the "smarts" are really
-in the thesaurus data file itself.
-
-The format for this file is at follows:
-
-- no binary data
-
-- line ending is a newline '\n' and not carriage return/linefeeds
-
-- Line 1 is a character string that describes the encoding
-used for the file. It is up to the calling program to convert
-to and from this encoding if necessary.
-
- ISO8859-1 is used by the th_en_US_new.dat file.
-
- Strings currently recognized by OpenOffice.org are:
-
- UTF-8
- ISO8859-1
- ISO8859-2
- ISO8859-3
- ISO8859-4
- ISO8859-5
- ISO8859-6
- ISO8859-7
- ISO8859-8
- ISO8859-9
- ISO8859-10
- KOI8-R
- CP-1251
- ISO8859-14
- ISCII-DEVANAGARI
-
-
-- All of the remaning lines of the file follow this structure
-
-entry|num_mean
-pos|syn1_mean|syn2|...
-.
-.
-.
-pos|mean_syn1|syn2|...
-
-
-where:
-
- entry - all lowercase version of the word or phrase being described
- num_mean - number of meanings for this entry
-
- There is one meaning per line and each meaning is comprised of
-
- pos - part of speech or other meaning specific description
- syn1_mean - synonym 1 also used to describe the meaning itself
- syn2 - synonym 2 for that meaning etc.
-
-
-To make this even more clearer, here is actual data for the
-entry "simple".
-
-simple|9
-(adj)|simple |elemental|ultimate|oversimplified|simplistic|simplex|simplified|unanalyzable|
-undecomposable|uncomplicated|unsophisticated|easy|plain|unsubdivided
-(adj)|elementary|uncomplicated|unproblematic|easy
-(adj)|bare|mere|plain
-(adj)|childlike|wide-eyed|dewy-eyed|naive |naif
-(adj)|dim-witted|half-witted|simple-minded|retarded
-(adj)|simple |unsubdivided|unlobed|smooth
-(adj)|plain
-(noun)|herb|herbaceous plant
-(noun)|simpleton|person|individual|someone|somebody|mortal|human|soul
-
-
-It says that "simple" has 9 different meanings and each
-meaning will have its part of speech and at least 1 synonym
-with other if presetn following on the same line.
-
-
-
-Once you ahve created your own structured text file you can use
-the perl program "th_gen_idx.pl" which can be found in this
-directory to create an index file that is used to seek into
-your data file by the MyThes code.
-
-The correct way to run the perl program is as follows:
-
-cat th_en_US_new.dat | ./th_gen_idx.pl > th_en_US_new.idx
-
-
-
-Then if you head the resulting index file you should see the
-following:
-
-ISO8859-1
-142689
-'hood|10
-'s gravenhage|88
-'tween|173
-'tween decks|196
-.22|231
-.22 caliber|319
-.22 calibre|365
-.38 caliber|411
-.38 calibre|457
-.45 caliber|503
-.45 calibre|549
-0|595
-1|666
-1 chronicles|6283
-1 esdras|6336
-
-
-Line 1 is the same encoding string taken from the
-structured thesaurus data file.
-
-Line 2 is a count of the total number of entries
-in your thesaurus.
-
-All of the remaining lines are of the form
-
-entry|byte_offset_into_data_file_where_entry_is_found
-
-
-That's all there is too it.
-
-
-Kevin
-kevin.hendricks@sympatico.ca
-
diff --git a/lingucomponent/source/thesaurus/mythes/example.cxx b/lingucomponent/source/thesaurus/mythes/example.cxx
deleted file mode 100644
index 31c85989cf26..000000000000
--- a/lingucomponent/source/thesaurus/mythes/example.cxx
+++ /dev/null
@@ -1,128 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_lingucomponent.hxx"
-#include <cstring>
-#include <cstdlib>
-#include <cstdio>
-
-#include "mythes.hxx"
-
-extern char * mystrdup(const char * s);
-
-using namespace std;
-
-int
-main(int argc, char** argv)
-{
-
- char * af;
- char * df;
- char * wtc;
- FILE* wtclst;
-
- /* first parse the command line options */
- /* arg1 - index file, arg2 thesaurus data file, arg3 - file of words to check */
-
- if (argv[1]) {
- af = mystrdup(argv[1]);
- } else {
- fprintf(stderr,"correct syntax is:\n");
- fprintf(stderr,"example index_file thesaurus_file file_of_words_to_check\n");
- exit(1);
- }
- if (argv[2]) {
- df = mystrdup(argv[2]);
- } else {
- fprintf(stderr,"correct syntax is:\n");
- fprintf(stderr,"example index_file thesaurus_file file_of_words_to_check\n");
- exit(1);
- }
- if (argv[3]) {
- wtc = mystrdup(argv[3]);
- } else {
- fprintf(stderr,"correct syntax is:\n");
- fprintf(stderr,"example index_file thesaurus_file file_of_words_to_check\n");
- exit(1);
- }
-
-
- /* open the words to check list */
- wtclst = fopen(wtc,"r");
- if (!wtclst) {
- fprintf(stderr,"Error - could not open file of words to check\n");
- exit(1);
- }
-
- // open a new thesaurus object
- MyThes * pMT= new MyThes(af,df);
-
- // get the encoding used for the thesaurus data
- char * encoding = pMT->get_th_encoding();
- fprintf(stdout,"Thesaurus uses encoding %s\n\n",encoding);
-
- int k;
- char buf[101];
- mentry * pmean;
-
- while(fgets(buf,100,wtclst)) {
- k = strlen(buf);
- *(buf + k - 1) = '\0';
- int len = strlen(buf);
- int count = pMT->Lookup(buf,len,&pmean);
- // don't change value of pmean
- // or count since needed for CleanUpAfterLookup routine
- mentry* pm = pmean;
- if (count) {
- fprintf(stdout,"%s has %d meanings\n",buf,count);
- for (int i=0; i < count; i++) {
- fprintf(stdout," meaning %d: %s\n",i,pm->defn);
- for (int j=0; j < pm->count; j++) {
- fprintf(stdout," %s\n",pm->psyns[j]);
- }
- fprintf(stdout,"\n");
- pm++;
- }
- fprintf(stdout,"\n\n");
- // now clean up all allocated memory
- pMT->CleanUpAfterLookup(&pmean,count);
- } else {
- fprintf(stdout,"\"%s\" is not in thesaurus!\n",buf);
- }
- }
-
- delete pMT;
- fclose(wtclst);
- free(wtc);
- free(df);
- free(af);
-
- return 0;
-}
-
diff --git a/lingucomponent/source/thesaurus/mythes/license.readme b/lingucomponent/source/thesaurus/mythes/license.readme
deleted file mode 100644
index b6bf70a0c7fe..000000000000
--- a/lingucomponent/source/thesaurus/mythes/license.readme
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2003 Kevin B. Hendricks, Stratford, Ontario, Canada
- * And Contributors. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All modifications to the source code must be clearly marked as
- * such. Binary redistributions based on modified source code
- * must be clearly marked as modified versions in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
diff --git a/lingucomponent/source/thesaurus/mythes/mythes.cxx b/lingucomponent/source/thesaurus/mythes/mythes.cxx
deleted file mode 100644
index ebb224d92140..000000000000
--- a/lingucomponent/source/thesaurus/mythes/mythes.cxx
+++ /dev/null
@@ -1,403 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_lingucomponent.hxx"
-#include "license.readme"
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-
-#include "mythes.hxx"
-
-
-
-MyThes::MyThes(const char* idxpath, const char * datpath)
-{
- nw = 0;
- encoding = NULL;
- list = NULL;
- offst = NULL;
-
- if (thInitialize(idxpath, datpath) != 1) {
- fprintf(stderr,"Error - can't open %s or %s\n",idxpath, datpath);
- fflush(stderr);
- thCleanup();
- // did not initialize properly - throw exception?
- }
-}
-
-
-MyThes::~MyThes()
-{
- thCleanup();
-}
-
-
-int MyThes::thInitialize(const char* idxpath, const char* datpath)
-{
-
- // open the index file
- FILE * pifile = fopen(idxpath,"r");
- if (!pifile) {
- return 0;
- }
-
- // parse in encoding and index size */
- char * wrd;
- wrd = (char *)calloc(1, MAX_WD_LEN);
- if (!wrd) {
- fprintf(stderr,"Error - bad memory allocation\n");
- fflush(stderr);
- fclose(pifile);
- return 0;
- }
- int len = readLine(pifile,wrd,MAX_WD_LEN);
- encoding = mystrdup(wrd);
- len = readLine(pifile,wrd,MAX_WD_LEN);
- int idxsz = atoi(wrd);
-
-
- // now allocate list, offst for the given size
- list = (char**) calloc(idxsz,sizeof(char*));
- offst = (unsigned int*) calloc(idxsz,sizeof(unsigned int));
-
- if ( (!(list)) || (!(offst)) ) {
- fprintf(stderr,"Error - bad memory allocation\n");
- fflush(stderr);
- fclose(pifile);
- return 0;
- }
-
- // now parse the remaining lines of the index
- len = readLine(pifile,wrd,MAX_WD_LEN);
- while (len > 0)
- {
- int np = mystr_indexOfChar(wrd,'|');
- if (nw < idxsz) {
- if (np >= 0) {
- *(wrd+np) = '\0';
- list[nw] = (char *)calloc(1,(np+1));
- if (!list[nw]) {
- fprintf(stderr,"Error - bad memory allocation\n");
- fflush(stderr);
- fclose(pifile);
- return 0;
- }
- memcpy((list[nw]),wrd,np);
- offst[nw] = atoi(wrd+np+1);
- nw++;
- }
- }
- len = readLine(pifile,wrd,MAX_WD_LEN);
- }
-
- free((void *)wrd);
- fclose(pifile);
-
- /* next open the data file */
- pdfile = fopen(datpath,"r");
- if (!pdfile) {
- return 0;
- }
-
- return 1;
-}
-
-
-void MyThes::thCleanup()
-{
- /* first close the data file */
- if (pdfile) {
- fclose(pdfile);
- pdfile=NULL;
- }
-
- if (list)
- {
- /* now free up all the allocated strings on the list */
- for (int i=0; i < nw; i++)
- {
- if (list[i]) {
- free(list[i]);
- list[i] = 0;
- }
- }
- free((void*)list);
- }
-
- if (encoding) free((void*)encoding);
- if (offst) free((void*)offst);
-
- encoding = NULL;
- list = NULL;
- offst = NULL;
- nw = 0;
-}
-
-
-
-// lookup text in index and count of meanings and a list of meaning entries
-// with each entry having a synonym count and pointer to an
-// array of char * (i.e the synonyms)
-//
-// note: calling routine should call CleanUpAfterLookup with the original
-// meaning point and count to properly deallocate memory
-
-int MyThes::Lookup(const char * pText, int len, mentry** pme)
-{
-
- *pme = NULL;
-
- // handle the case of missing file or file related errors
- if (! pdfile) return 0;
-
- long offset = 0;
-
- /* copy search word and make sure null terminated */
- char * wrd = (char *) calloc(1,(len+1));
- memcpy(wrd,pText,len);
-
- /* find it in the list */
- int idx = nw > 0 ? binsearch(wrd,list,nw) : -1;
- free(wrd);
- if (idx < 0) return 0;
-
- // now seek to the offset
- offset = (long) offst[idx];
- int rc = fseek(pdfile,offset,SEEK_SET);
- if (rc) {
- return 0;
- }
-
- // grab the count of the number of meanings
- // and allocate a list of meaning entries
- char * buf = NULL;
- buf = (char *) malloc( MAX_LN_LEN );
- if (!buf) return 0;
- readLine(pdfile, buf, (MAX_LN_LEN-1));
- int np = mystr_indexOfChar(buf,'|');
- if (np < 0) {
- free(buf);
- return 0;
- }
- int nmeanings = atoi(buf+np+1);
- *pme = (mentry*) malloc( nmeanings * sizeof(mentry) );
- if (!(*pme)) {
- free(buf);
- return 0;
- }
-
- // now read in each meaning and parse it to get defn, count and synonym lists
- mentry* pm = *(pme);
- char dfn[MAX_WD_LEN];
-
- for (int j = 0; j < nmeanings; j++) {
- readLine(pdfile, buf, (MAX_LN_LEN-1));
-
- pm->count = 0;
- pm->psyns = NULL;
- pm->defn = NULL;
-
- // store away the part of speech for later use
- char * p = buf;
- char * pos = NULL;
- np = mystr_indexOfChar(p,'|');
- if (np >= 0) {
- *(buf+np) = '\0';
- pos = mystrdup(p);
- p = p + np + 1;
- } else {
- pos = mystrdup("");
- }
-
- // count the number of fields in the remaining line
- int nf = 1;
- char * d = p;
- np = mystr_indexOfChar(d,'|');
- while ( np >= 0 ) {
- nf++;
- d = d + np + 1;
- np = mystr_indexOfChar(d,'|');
- }
- pm->count = nf;
- pm->psyns = (char **) malloc(nf*sizeof(char*));
-
- // fill in the synonym list
- d = p;
- for (int jj = 0; jj < nf; jj++)
- {
- np = mystr_indexOfChar(d,'|');
- if (np > 0)
- {
- *(d+np) = '\0';
- pm->psyns[jj] = mystrdup(d);
- d = d + np + 1;
- }
- else
- {
- pm->psyns[jj] = mystrdup(d);
- }
- }
-
- // add pos to first synonym to create the definition
- int k = strlen(pos);
- int m = strlen(pm->psyns[0]);
- if ((k+m) < (MAX_WD_LEN - 1)) {
- strncpy(dfn,pos,k);
- *(dfn+k) = ' ';
- strncpy((dfn+k+1),(pm->psyns[0]),m+1);
- pm->defn = mystrdup(dfn);
- } else {
- pm->defn = mystrdup(pm->psyns[0]);
- }
- free(pos);
- pm++;
-
- }
- free(buf);
-
- return nmeanings;
-}
-
-
-
-void MyThes::CleanUpAfterLookup(mentry ** pme, int nmeanings)
-{
-
- if (nmeanings == 0) return;
- if ((*pme) == NULL) return;
-
- mentry * pm = *pme;
-
- for (int i = 0; i < nmeanings; i++) {
- int count = pm->count;
- for (int j = 0; j < count; j++) {
- if (pm->psyns[j]) free(pm->psyns[j]);
- pm->psyns[j] = NULL;
- }
- if (pm->psyns) free(pm->psyns);
- pm->psyns = NULL;
- if (pm->defn) free(pm->defn);
- pm->defn = NULL;
- pm->count = 0;
- pm++;
- }
- pm = *pme;
- free(pm);
- *pme = NULL;
- return;
-}
-
-
-// read a line of text from a text file stripping
-// off the line terminator and replacing it with
-// a null string terminator.
-// returns: -1 on error or the number of characters in
-// in the returning string
-
-// A maximum of nc characters will be returned
-
-int MyThes::readLine(FILE * pf, char * buf, int nc)
-{
-
- if (fgets(buf,nc,pf)) {
- mychomp(buf);
- return strlen(buf);
- }
- return -1;
-}
-
-
-
-// performs a binary search on null terminated character
-// strings
-//
-// returns: -1 on not found
-// index of wrd in the list[]
-
-int MyThes::binsearch(char * sw, char* _list[], int nlst)
-{
- int lp, up, mp, j, indx;
- lp = 0;
- up = nlst-1;
- indx = -1;
- if (strcmp(sw,_list[lp]) < 0) return -1;
- if (strcmp(sw,_list[up]) > 0) return -1;
- while (indx < 0 ) {
- mp = (int)((lp+up) >> 1);
- j = strcmp(sw,_list[mp]);
- if ( j > 0) {
- lp = mp + 1;
- } else if (j < 0 ) {
- up = mp - 1;
- } else {
- indx = mp;
- }
- if (lp > up) return -1;
- }
- return indx;
-}
-
-char * MyThes::get_th_encoding()
-{
- if (encoding) return encoding;
- return NULL;
-}
-
-
-// string duplication routine
-char * MyThes::mystrdup(const char * p)
-{
- int sl = strlen(p) + 1;
- char * d = (char *)malloc(sl);
- if (d) {
- memcpy(d,p,sl);
- return d;
- }
- return NULL;
-}
-
-// remove cross-platform text line end characters
-void MyThes::mychomp(char * s)
-{
- int k = strlen(s);
- if ((k > 0) && ((*(s+k-1)=='\r') || (*(s+k-1)=='\n'))) *(s+k-1) = '\0';
- if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0';
-}
-
-
-// return index of char in string
-int MyThes::mystr_indexOfChar(const char * d, int c)
-{
- char * p = strchr((char *)d,c);
- if (p) return (int)(p-d);
- return -1;
-}
-
diff --git a/lingucomponent/source/thesaurus/mythes/mythes.hxx b/lingucomponent/source/thesaurus/mythes/mythes.hxx
deleted file mode 100644
index 539e6723c42d..000000000000
--- a/lingucomponent/source/thesaurus/mythes/mythes.hxx
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef _MYTHES_HXX_
-#define _MYTHES_HXX_
-
-// some maximum sizes for buffers
-#define MAX_WD_LEN 200
-#define MAX_LN_LEN 16384
-
-
-// a meaning with definition, count of synonyms and synonym list
-struct mentry {
- char* defn;
- int count;
- char** psyns;
-};
-
-
-class MyThes
-{
-
- int nw; /* number of entries in thesaurus */
- char** list; /* stores word list */
- unsigned int* offst; /* stores offset list */
- char * encoding; /* stores text encoding; */
-
- FILE *pdfile;
-
- // disallow copy-constructor and assignment-operator for now
- MyThes();
- MyThes(const MyThes &);
- MyThes & operator = (const MyThes &);
-
-public:
- MyThes(const char* idxpath, const char* datpath);
- ~MyThes();
-
- // lookup text in index and return number of meanings
- // each meaning entry has a defintion, synonym count and pointer
- // when complete return the *original* meaning entry and count via
- // CleanUpAfterLookup to properly handle memory deallocation
-
- int Lookup(const char * pText, int len, mentry** pme);
-
- void CleanUpAfterLookup(mentry** pme, int nmean);
-
- char* get_th_encoding();
-
-private:
- // Open index and dat files and load list array
- int thInitialize (const char* indxpath, const char* datpath);
-
- // internal close and cleanup dat and idx files
- void thCleanup ();
-
- // read a text line (\n terminated) stripping off line terminator
- int readLine(FILE * pf, char * buf, int nc);
-
- // binary search on null terminated character strings
- int binsearch(char * wrd, char* list[], int nlst);
-
- // string duplication routine
- char * mystrdup(const char * p);
-
- // remove cross-platform text line end characters
- void mychomp(char * s);
-
- // return index of char in string
- int mystr_indexOfChar(const char * d, int c);
-
-};
-
-#endif
-
-
-
-
-
diff --git a/lingucomponent/source/thesaurus/mythes/makefile.mk b/mdds/makefile.mk
index ac45219b97a0..ea896767edcf 100644
--- a/lingucomponent/source/thesaurus/mythes/makefile.mk
+++ b/mdds/makefile.mk
@@ -25,35 +25,42 @@
#
#*************************************************************************
-PRJ = ..$/..$/..
+PRJ=.
-PRJNAME = lingucomponent
-TARGET = mythes
-LIBTARGET=NO
+PRJNAME=mdds
+TARGET=mdds
-#----- Settings ---------------------------------------------------------
+# --- Settings -----------------------------------------------------
-.INCLUDE : settings.mk
+.INCLUDE : settings.mk
# --- Files --------------------------------------------------------
-.IF "$(SYSTEM_MYTHES)" == "YES"
-@all:
- @echo "Using system mythes..."
-.ENDIF
+TARFILE_NAME=mdds_0.3.0
+TARFILE_MD5=cf8a6967f7de535ae257fa411c98eb88
+PATCH_FILES=
-all_target: ALLTAR
+CONFIGURE_DIR=
+CONFIGURE_ACTION=
+BUILD_DIR=
+BUILD_ACTION=
+BUILD_FLAGS=
+# --- Targets ------------------------------------------------------
-SLOFILES= \
- $(SLO)$/mythes.obj
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+.INCLUDE : tg_ext.mk
-LIB1TARGET= $(SLB)$/lib$(TARGET).lib
-LIB1ARCHIV= $(LB)/lib$(TARGET).a
-LIB1OBJFILES= $(SLOFILES)
+# --- post-build ---------------------------------------------------
-# --- Targets ------------------------------------------------------
+NORMALIZE_FLAG_FILE=so_normalized_$(TARGET)
+
+$(PACKAGE_DIR)$/$(NORMALIZE_FLAG_FILE) : $(PACKAGE_DIR)$/$(BUILD_FLAG_FILE)
+ -@$(MKDIRHIER) $(INCCOM)
+ @$(GNUCOPY) -r $(PACKAGE_DIR)$/$(TARFILE_NAME)$/inc$/mdds $(INCCOM)
+ @$(TOUCH) $(PACKAGE_DIR)$/$(NORMALIZE_FLAG_FILE)
-.INCLUDE : target.mk
+$(PACKAGE_DIR)$/$(PREDELIVER_FLAG_FILE) : $(PACKAGE_DIR)$/$(NORMALIZE_FLAG_FILE)
diff --git a/mdds/prj/build.lst b/mdds/prj/build.lst
new file mode 100644
index 000000000000..da7d095cf7b5
--- /dev/null
+++ b/mdds/prj/build.lst
@@ -0,0 +1,3 @@
+mdd mdds : solenv BOOST:boost NULL
+mdd mdds usr1 - all mdd_mkout NULL
+mdd mdds nmake - all mdd_mdds NULL
diff --git a/mdds/prj/d.lst b/mdds/prj/d.lst
new file mode 100644
index 000000000000..65cafee5cdc0
--- /dev/null
+++ b/mdds/prj/d.lst
@@ -0,0 +1,5 @@
+mkdir: %_DEST%\inc%_EXT%\mdds
+
+..\%__SRC%\inc\mdds\* %_DEST%\inc%_EXT%\mdds
+
+
diff --git a/migrationanalysis/no_localization b/migrationanalysis/no_localization
new file mode 100644
index 000000000000..502bb06d023a
--- /dev/null
+++ b/migrationanalysis/no_localization
@@ -0,0 +1 @@
+Touch me to prevent that the localisation process extracts strings here
diff --git a/mythes/makefile.mk b/mythes/makefile.mk
new file mode 100644
index 000000000000..77d88bc4ca5f
--- /dev/null
+++ b/mythes/makefile.mk
@@ -0,0 +1,115 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# 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.
+#
+#*************************************************************************
+
+PRJ=.
+
+PRJNAME=mythes
+TARGET=mythes
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+TARFILE_NAME=mythes-1.2.0
+TARFILE_MD5=067201ea8b126597670b5eff72e1f66c
+
+ADDITIONAL_FILES += makefile.mk
+
+PATCH_FILES=mythes-1.2.0-vanilla-th-gen-idx.patch \
+ mythes-1.2.0-makefile-mk.diff
+
+.IF "$(GUI)"=="UNX"
+CONFIGURE_DIR=$(BUILD_DIR)
+
+.IF "$(SYSTEM_HUNSPELL)" != "YES"
+HUNSPELL_CFLAGS +:= -I$(SOLARINCDIR)$/hunspell
+HUNSPELL_LIBS +:= -L$(SOLARLIBDIR) -lhunspell-1.2
+.ENDIF
+
+#relative to CONFIGURE_DIR
+# still needed also in system-mythes case as it creates the makefile
+CONFIGURE_ACTION=configure
+CONFIGURE_FLAGS= --disable-shared --with-pic
+
+.IF "$(COM)"=="C52" && "$(CPU)"=="U"
+LCL_CONFIGURE_CFLAGS+=-m64
+.ENDIF
+
+.IF "$(SYSBASE)"!=""
+.IF "$(EXTRA_CFLAGS)"!=""
+LCL_CONFIGURE_CFLAGS+=$(EXTRA_CFLAGS)
+CONFIGURE_FLAGS+=CXXFLAGS="$(EXTRA_CFLAGS)"
+.ENDIF # "$(EXTRA_CFLAGS)"!=""
+.ELIF "$(OS)"=="MACOSX" # "$(SYSBASE)"!=""
+CONFIGURE_FLAGS+=CPPFLAGS="$(EXTRA_CDEFS)"
+.ENDIF
+
+.IF "$(LCL_CONFIGURE_CFLAGS)"!=""
+CONFIGURE_FLAGS+=CFLAGS='$(LCL_CONFIGURE_CFLAGS)'
+.ENDIF
+
+.IF "$(SYSTEM_MYTHES)" == "YES"
+@all:
+ echo "Nothing to do here."
+.ELSE
+BUILD_ACTION=make
+OUT2INC += mythes.hxx
+.ENDIF
+
+.ENDIF # "$(GUI)"=="UNX"
+
+
+.IF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+CONFIGURE_ACTION=configure
+CONFIGURE_FLAGS= --disable-shared --with-pic
+
+BUILD_ACTION=make
+
+.ELSE
+BUILD_ACTION=dmake
+.ENDIF # "$(COM)"=="GCC"
+OUT2INC += mythes.hxx
+.ENDIF # "$(GUI)"=="WNT"
+
+.IF "$(GUI)"=="OS2"
+BUILD_ACTION=dmake
+OUT2INC += mythes.hxx
+.ENDIF # "$(GUI)"=="OS2"
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : set_ext.mk
+.INCLUDE : target.mk
+.INCLUDE : tg_ext.mk
+
+.IF "$(SYSTEM_HUNSPELL)" != "YES"
+.EXPORT: HUNSPELL_LIBS HUNSPELL_CFLAGS
+.ENDIF
+
diff --git a/mythes/mythes-1.2.0-makefile-mk.diff b/mythes/mythes-1.2.0-makefile-mk.diff
new file mode 100644
index 000000000000..30cdf4694186
--- /dev/null
+++ b/mythes/mythes-1.2.0-makefile-mk.diff
@@ -0,0 +1,94 @@
+--- misc/mythes-1.2.0/makefile.mk 2010-05-14 23:36:09.000000000 +0200
++++ misc/build/mythes-1.2.0/makefile.mk 2010-05-14 23:35:14.000000000 +0200
+@@ -1 +1,90 @@
+-dummy
++#*************************************************************************
++#
++# $RCSfile: makefile.mk,v $
++#
++# $Revision: 1.1.1.1 $
++#
++# last change: $Author: caolan $ $Date: 2010/02/27 15:52:17 $
++#
++# The Contents of this file are made available subject to the terms of
++# either of the following licenses
++#
++# - GNU Lesser General Public License Version 2.1
++# - Sun Industry Standards Source License Version 1.1
++#
++# Sun Microsystems Inc., October, 2000
++#
++# GNU Lesser General Public License Version 2.1
++# =============================================
++# Copyright 2000 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
++#
++#
++# Sun Industry Standards Source License Version 1.1
++# =================================================
++# The contents of this file are subject to the Sun Industry Standards
++# Source License Version 1.1 (the "License"); You may not use this file
++# except in compliance with the License. You may obtain a copy of the
++# License at http://www.openoffice.org/license.html.
++#
++# Software provided under this License is provided on an "AS IS" basis,
++# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
++# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
++# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
++# See the License for the specific provisions governing your rights and
++# obligations concerning the Software.
++#
++# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
++#
++# Copyright: 2000 by Sun Microsystems, Inc.
++#
++# All Rights Reserved.
++#
++# Contributor(s): _______________________________________
++#
++#
++#
++#*************************************************************************
++
++PRJ = ../../../..
++
++PRJNAME = mythes
++TARGET = mythes
++LIBTARGET=YES
++EXTERNAL_WARNINGS_NOT_ERRORS := TRUE
++
++#----- Settings ---------------------------------------------------------
++
++.INCLUDE : settings.mk
++
++# --- Files --------------------------------------------------------
++
++all_target: ALLTAR
++
++
++
++SLOFILES= \
++ $(SLO)$/mythes.obj
++
++LIB1TARGET= $(SLB)$/lib$(TARGET).lib
++LIB1ARCHIV= $(LB)/lib$(TARGET).a
++LIB1OBJFILES= $(SLOFILES)
++
++# --- Targets ------------------------------------------------------
++
++.INCLUDE : target.mk
++
diff --git a/mythes/mythes-1.2.0-vanilla-th-gen-idx.patch b/mythes/mythes-1.2.0-vanilla-th-gen-idx.patch
new file mode 100644
index 000000000000..776fac46a08e
--- /dev/null
+++ b/mythes/mythes-1.2.0-vanilla-th-gen-idx.patch
@@ -0,0 +1,97 @@
+--- misc/mythes-1.2.0.orig/th_gen_idx.pl
++++ misc/build/mythes-1.2.0/th_gen_idx.pl
+@@ -1,11 +1,32 @@
+-#!/usr/bin/perl
+-
+-# perl program to take a thesaurus structured text data file
+-# and create the proper sorted index file (.idx)
++:
++eval 'exec perl -wS $0 ${1+"$@"}'
++ if 0;
++#*************************************************************************
++#
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++#
++# Copyright 2000, 2010 Oracle and/or its affiliates.
++#
++# OpenOffice.org - a multi-platform office productivity suite
++#
++# 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).
+ #
+-# typcially invoked as follows:
+-# cat th_en_US_new.dat | ./th_gen_idx.pl > th_en_US_new.idx
++# 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.
+ #
++#*************************************************************************
+
+ sub by_entry {
+ my ($aent, $aoff) = split('\|',$a);
+@@ -13,6 +34,27 @@ sub by_entry {
+ $aent cmp $bent;
+ }
+
++#FIXME: someone may want "infile" or even parameter parsing
++sub get_outfile {
++ my $next_is_file = 0;
++ foreach ( @ARGV ) {
++ if ( $next_is_file ) {
++ return $_
++ }
++ if ( $_ eq "-o" ) {
++ $next_is_file = 1;
++ }
++ }
++ return "";
++}
++
++sub usage {
++ print "usage:\n";
++ print "$0 -o outfile < input\n";
++
++ exit 99;
++}
++
+ # main routine
+ my $ne = 0; # number of entries in index
+ my @tindex=(); # the index itself
+@@ -24,6 +66,10 @@ my $nm=0; # number of meaning fo
+ my $meaning=""; # current meaning and synonyms
+ my $p; # misc uses
+ my $encoding; # encoding used by text file
++my $outfile = "";
++
++$outfile = get_outfile();
++usage() if ( $outfile eq "" );
+
+ # top line of thesaurus provides encoding
+ $encoding=<STDIN>;
+@@ -51,9 +97,13 @@ while ($rec=<STDIN>){
+ # now we have all of the information
+ # so sort it and then output the encoding, count and index data
+ @tindex = sort by_entry @tindex;
+-print STDOUT "$encoding\n";
+-print STDOUT "$ne\n";
++
++print "$outfile\n";
++open OUTFILE, ">$outfile" or die "ERROR: Can't open $outfile for writing!";
++print OUTFILE "$encoding\n";
++print OUTFILE "$ne\n";
+ foreach $one (@tindex) {
+- print STDOUT "$one\n";
++ print OUTFILE "$one\n";
+ }
++close OUTFILE;
+
diff --git a/mythes/prj/build.lst b/mythes/prj/build.lst
new file mode 100644
index 000000000000..6c3cb8022aac
--- /dev/null
+++ b/mythes/prj/build.lst
@@ -0,0 +1,3 @@
+myt mythes : soltools solenv HUNSPELL:hunspell NULL
+myt mythes usr1 - all myt_mkout NULL
+myt mythes nmake - all myt_mythes NULL
diff --git a/mythes/prj/d.lst b/mythes/prj/d.lst
new file mode 100644
index 000000000000..417855e879d8
--- /dev/null
+++ b/mythes/prj/d.lst
@@ -0,0 +1,7 @@
+..\%__SRC%\slb\libmythes.lib %_DEST%\lib%_EXT%\libmythes.lib
+
+..\%__SRC%\inc\mythes.hxx %_DEST%\inc%_EXT%\mythes.hxx
+..\%__SRC%\misc\build\mythes-1.2.0\.libs\libmythes-1.2.a %_DEST%\lib%_EXT%\libmythes-1.2.a
+..\%__SRC%\lib\libmythes-1.2.a %_DEST%\lib%_EXT%\libmythes-1.2.a
+..\%__SRC%\misc\build\mythes-1.2.0\th_gen_idx.pl %_DEST%\bin%_EXT%\th_gen_idx.pl
+
diff --git a/odk/docs/images/sdk_head-1.png b/odk/docs/images/sdk_head-1.png
index 1c13f7e7f072..56094aabab52 100644
--- a/odk/docs/images/sdk_head-1.png
+++ b/odk/docs/images/sdk_head-1.png
Binary files differ
diff --git a/odk/docs/install.html b/odk/docs/install.html
index 21611d2abdf7..baf9b5f1259f 100644
--- a/odk/docs/install.html
+++ b/odk/docs/install.html
@@ -1,6 +1,6 @@
<html>
<head>
- <title>OpenOffice.org 3.2 SDK - Installation Guide</title>
+ <title>OpenOffice.org %PRODUCT_RELEASE% SDK - Installation Guide</title>
<link rel="stylesheet" type="text/css" href="sdk_styles.css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="author" content="J&uuml;rgen Schmidt">
@@ -36,16 +36,16 @@
<table class="table3">
<tr>
<td colspan="2">
- <p>The OpenOffice.org 3.2 SDK comes with a set of development tools, base
+ <p>The OpenOffice.org %PRODUCT_RELEASE% SDK comes with a set of development tools, base
libraries, header files and helper class files that can be used to
- develop Java/C++ components, to embed the OpenOffice.org 3.2 application in
+ develop Java/C++ components, to embed the OpenOffice.org %PRODUCT_RELEASE% application in
your own programs, or to use the API (scripting or remote control the
office). For a complete working environment, we have some additional
requirements:</p>
</td>
</tr>
<tr valign="top">
- <td><b>OpenOffice.org 3.2 installation</td>
+ <td><b>OpenOffice.org %PRODUCT_RELEASE% installation</td>
<td class="content80">The SDK works on top of an existing office
installation and uses the same libraries as the office installation.</td>
</tr>
@@ -218,7 +218,7 @@
the output is generated in the SDK directory itself. If an output
directory is specified, the output is generated in a SDK dependent
subdirectory in this directory (e.g. &lt;OO_SDK_OUTPUT_DIR&gt;
- /OpenOffice.org 3.2/LINUXExample.out)</td>
+ /OpenOffice.org %PRODUCT_RELEASE%/LINUXExample.out)</td>
</tr>
<tr>
<td class="cell20"><b>SDK_AUTO_DEPLOYMENT</b></td>
diff --git a/odk/docs/notsupported.html b/odk/docs/notsupported.html
index 446e83200762..02a497c59a3d 100644
--- a/odk/docs/notsupported.html
+++ b/odk/docs/notsupported.html
@@ -1,4 +1,4 @@
-<html><head> <title>OpenOffice.org 3.2 SDK - Not supported page</title> <link rel="stylesheet" type="text/css" href="sdk_styles.css"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="author" content="J&uuml;rgen Schmidt"> <meta name="created" content="2004-12-14"></head><body class="sdkbody"><table class="table1" cellpadding=0> <tr style="background-image:url(images/sdk_head-2.gif); backgorund-position: bottom; "> <td colspan="2" align="left"><img src="images/sdk_head-1.gif" width="335" height="109" usemap="#Map" border="0"></td> <td align=right><img src="images/sdk_head-3.gif" width="32" height="109"></td> </tr> <tr> <td colspan="3"><img class="nothing10" src="images/nada.gif"></td> </tr> <tr> <td colspan="3"> <table class="table2"> <tr> <td> <p align="center"><a href="../index.html" title="link to the SDK start page"><img class="navigate" src="images/nav_home.png"></a></p> </td> </tr> <tr> <td><img class="nothing8" src="images/nada.gif"></td> </tr> <tr> <td> <p class="note">This page is currently not supported!</p> </td> </tr> </table> </td> </tr> <tr> <td colspan="3"><img class="nothing30" src="images/nada.gif"></td> </tr> <tr> <td colspan="3"><img class="line" src="images/sdk_line-1.gif"></td> </tr> <tr> <td colspan="3"> <div class="centertext">
+<html><head> <title>OpenOffice.org %PRODUCT_RELEASE% SDK - Not supported page</title> <link rel="stylesheet" type="text/css" href="sdk_styles.css"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="author" content="J&uuml;rgen Schmidt"> <meta name="created" content="2004-12-14"></head><body class="sdkbody"><table class="table1" cellpadding=0> <tr style="background-image:url(images/sdk_head-2.gif); backgorund-position: bottom; "> <td colspan="2" align="left"><img src="images/sdk_head-1.gif" width="335" height="109" usemap="#Map" border="0"></td> <td align=right><img src="images/sdk_head-3.gif" width="32" height="109"></td> </tr> <tr> <td colspan="3"><img class="nothing10" src="images/nada.gif"></td> </tr> <tr> <td colspan="3"> <table class="table2"> <tr> <td> <p align="center"><a href="../index.html" title="link to the SDK start page"><img class="navigate" src="images/nav_home.png"></a></p> </td> </tr> <tr> <td><img class="nothing8" src="images/nada.gif"></td> </tr> <tr> <td> <p class="note">This page is currently not supported!</p> </td> </tr> </table> </td> </tr> <tr> <td colspan="3"><img class="nothing30" src="images/nada.gif"></td> </tr> <tr> <td colspan="3"><img class="line" src="images/sdk_line-1.gif"></td> </tr> <tr> <td colspan="3"> <div class="centertext">
<p><img class="oraclelogo" src="images/odk-footer-logo.gif" title="Sponsored by Oracle" alt="Oracle Logo" />
Copyright &copy; 2010, Oracle and/or its affiliates. All rights reserved. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.<p>
</div> </td> </tr></table><map name="Map"> <area shape="rect" coords="10,68,93,105" href="http://www.sun.com"></map></body></html>
diff --git a/odk/docs/tools.html b/odk/docs/tools.html
index 8b9d604e7143..6ff9060f26f1 100644
--- a/odk/docs/tools.html
+++ b/odk/docs/tools.html
@@ -1,6 +1,6 @@
<html>
<head>
- <title>OpenOffice.org 3.2 SDK SDK - Development Tools</title>
+ <title>OpenOffice.org %PRODUCT_RELEASE% SDK - Development Tools</title>
<link rel="stylesheet" type="text/css" href="sdk_styles.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="author" content="J&uuml;rgen Schmidt">
@@ -145,7 +145,7 @@
office installation. UNO packages are UNO components (single libraries or
Jar files or more complex zip files that contains one or more libraries|
Jar files, type libraries and configuration items), scripts and
- OpenOffice.org 3.2 Basic libraries as zip package. 'unopkg' is not part of the
+ OpenOffice.org %PRODUCT_RELEASE% Basic libraries as zip package. 'unopkg' is not part of the
SDK but comes with the office directly and is a development tool as well
as an end user tool to deploy extension into an office installation.</p>
<p>More details concerning deployment and this tool can be find in the
diff --git a/odk/examples/DevelopersGuide/examples.html b/odk/examples/DevelopersGuide/examples.html
index 1a48788f0991..4beca94f9828 100644
--- a/odk/examples/DevelopersGuide/examples.html
+++ b/odk/examples/DevelopersGuide/examples.html
@@ -1,6 +1,6 @@
<html>
<head>
- <title>OpenOffice.org 3.2 SDK - Developer's Guide Examples</title>
+ <title>OpenOffice.org %PRODUCT_RELEASE% SDK - Developer's Guide Examples</title>
<link rel="stylesheet" type="text/css"
href="../../docs/sdk_styles.css">
<meta http-equiv="Content-Type"
@@ -134,7 +134,7 @@ Presentation Documents</a></td>
<td class="content3"><img
src="../../docs/images/arrow-1.gif"></td>
<td><a href="#BasicandDialogs"
- title="link to the Basic And Dialogs examples">OpenOffice.org 3.2 Basic and
+ title="link to the Basic And Dialogs examples">OpenOffice.org %PRODUCT_RELEASE% Basic and
Dialogs</a></td>
</tr>
<tr valign="top">
@@ -233,7 +233,7 @@ examples</a></td>
href="./FirstSteps/FirstUnoContact.java"
title="link to FirstSteps/FirstUnoContact.java">FirstUnoContact</a></td>
<td class="cell80">Shows how to initialize UNO and
-get a remote office service manager from a running OpenOffice.org 3.2 in a
+get a remote office service manager from a running OpenOffice.org %PRODUCT_RELEASE% in a
different process space.</td>
</tr>
<tr>
@@ -242,7 +242,7 @@ different process space.</td>
href="./FirstSteps/FirstLoadComponent.java"
title="link to FirstSteps/FirstLoadComponent.java">FirstLoadComponent</a></td>
<td class="cell80">Demonstrates how to load a
-component into OpenOffice.org 3.2 by a Java application.</td>
+component into OpenOffice.org %PRODUCT_RELEASE% by a Java application.</td>
</tr>
<tr>
<td class="cell20"><img
@@ -333,7 +333,7 @@ mechanism in C++.</td>
href="./ProfUNO/InterprocessConn/ConnectionAwareClient.java"
title="link to ProfUNO/InterprocessConn/ConnectionAwareClient/.java">ConnectionAwareClient</a></td>
<td class="cell80">Implements a client which is aware
-of losing connection to OpenOffice.org 3.2.</td>
+of losing connection to OpenOffice.org %PRODUCT_RELEASE%.</td>
</tr>
<tr>
<td class="cell20"><img
@@ -341,7 +341,7 @@ of losing connection to OpenOffice.org 3.2.</td>
href="./ProfUNO/InterprocessConn/UrlResolver.java"
title="link to ProfUNO/InterProcessConn/UrlResolver.java">UrlResolver</a></td>
<td class="cell80">Builds a connection to
-OpenOffice.org 3.2 using the URL given on the command line. This example
+OpenOffice.org %PRODUCT_RELEASE% using the URL given on the command line. This example
shows the usage of <a
href="../../docs/common/ref/com/sun/star/bridge/XUnoUrlResolver.html"
title="link to the reference documentation of com.sun.star.bridge.XUnoResolver"><code>XUnoUrlResolver</code></a>.</td>
@@ -364,7 +364,7 @@ shows the usage of <a
href="./ProfUNO/CppBinding/office_connect.cxx"
title="link to ProfUNO/CppBinding/office_connect.java">office_connect.cxx</a></td>
<td class="cell80">Builds a connection to
-OpenOffice.org 3.2 using C++.</td>
+OpenOffice.org %PRODUCT_RELEASE% using C++.</td>
</tr>
<tr>
<td class="cell20"><img
@@ -725,7 +725,7 @@ for the image shrink component and instantiates it.</td>
href="./Components/DialogComponent/DialogComponent.java"
title="link to Components/DialogComponent/DialogComponent.java">DialogComponent.java</a></td>
<td class="cell80">Implements a component accessing a dialog created
- with the OpenOffice.org 3.2 Basic IDE. The component provides methods that
+ with the OpenOffice.org %PRODUCT_RELEASE% Basic IDE. The component provides methods that
can be bound to dialog respectively control events .</td>
</tr>
<tr>
@@ -942,7 +942,7 @@ document component.</td>
<td class="cell80">This is the main part of a demo
application based on the framework APIs. It mainly shows the mechanisms
to load, store and convert documents, as well as dispatch and dispatch
-interception. It integrates windows from OpenOffice.org 3.2 via system
+interception. It integrates windows from OpenOffice.org %PRODUCT_RELEASE% via system
window handle. This is the same mechanism as used by the OOoBean, but
the OOoBean itself is not used here, just the JNI window handle access.</td>
</tr>
@@ -958,7 +958,7 @@ and it's actions.</td>
href="./OfficeDev/DesktopEnvironment/FunctionHelper.java"
title="link to OfficeDev/DesktopEnvironment/FunctionHelper.java">FunctionHelper</a></td>
<td class="cell80">This helper comprises all
-OpenOffice.org 3.2 API calls. Thus it is possible to learn about these
+OpenOffice.org %PRODUCT_RELEASE% API calls. Thus it is possible to learn about these
aspects separately from the rest of the application example.</td>
</tr>
<tr>
@@ -973,7 +973,7 @@ asynchronous events from UNO oneway calls.</td>
href="./OfficeDev/DesktopEnvironment/IShutdownListener.java"
title="link to OfficeDev/DesktopEnvironment/IShutdownListener.java">IShutdownListener</a></td>
<td class="cell80">This is a listener interface to
-clean up on shutdown of OpenOffice.org 3.2.</td>
+clean up on shutdown of OpenOffice.org %PRODUCT_RELEASE%.</td>
</tr>
<tr>
<td class="cell20"><a
@@ -1004,7 +1004,7 @@ get the window handle of the Java window.</td>
href="./OfficeDev/DesktopEnvironment/OfficeConnect.java"
title=" link to OfficeDev/DesktopEnvironment/OfficeConnect.java">OfficeConnect</a></td>
<td class="cell80">Builds the remote bridge to
-OpenOffice.org 3.2 and exports its UNO service manager for the Java side of
+OpenOffice.org %PRODUCT_RELEASE% and exports its UNO service manager for the Java side of
the application.</td>
</tr>
<tr>
@@ -1035,7 +1035,7 @@ the application is registered as an event listener.</td>
href="./OfficeDev/DesktopEnvironment/ViewContainer.java"
title="link to OfficeDev/DesktopEnvironment/ViewContainer.java">ViewContainer</a></td>
<td class="cell80">Performs a clean up on the Java
-side on OpenOffice.org 3.2 shutdown.</td>
+side on OpenOffice.org %PRODUCT_RELEASE% shutdown.</td>
</tr>
</tbody>
</table>
@@ -1054,7 +1054,7 @@ side on OpenOffice.org 3.2 shutdown.</td>
href="./OfficeDev/OfficeConnect.java"
title="link to OfficeDev/OfficeConnect.java">OfficeConnect</a></td>
<td class="cell80">Builds the remote bridge to
-OpenOffice.org 3.2 and exports its UNO service manager to the Java side.</td>
+OpenOffice.org %PRODUCT_RELEASE% and exports its UNO service manager to the Java side.</td>
</tr>
<tr>
<td class="cell20"><img
@@ -1110,7 +1110,7 @@ TerminateListener and shows the use of them in a running program.</td>
href="../../docs/common/ref/com/sun/star/frame/XTerminateListener.html"
title="link to the reference documentation of com.sun.star.frame.XTerminationListener">
<code>XTerminateListener</code></a>. It is called
-when OpenOffice.org 3.2 terminates.</td>
+when OpenOffice.org %PRODUCT_RELEASE% terminates.</td>
</tr>
</tbody>
</table>
@@ -1176,7 +1176,7 @@ of formats.</td>
href="./OfficeDev/Linguistic/LinguisticExamples.java"
title="link to OfficeDev/Linguistic/LinguisticExamples.java">LinguisticExamples</a></td>
<td class="cell80">A short example that uses most of
-the functionality from the OpenOffice.org 3.2 linguistic API.</td>
+the functionality from the OpenOffice.org %PRODUCT_RELEASE% linguistic API.</td>
</tr>
<tr>
<td class="cell20"><a
@@ -1657,7 +1657,7 @@ URLs.</td>
<td class="cell20"><a href="./Drawing/Helper.java"
title="link to Drawing/Helper.java">Helper</a></td>
<td class="cell80">Contains a helper class for the
-other examples to connect to OpenOffice.org 3.2 and open or create a drawing
+other examples to connect to OpenOffice.org %PRODUCT_RELEASE% and open or create a drawing
document.</td>
</tr>
<tr>
@@ -1808,7 +1808,7 @@ is not implemented. To be more precise.</td>
<td class="cell20"><a href="./Charts/Helper.java"
title="link to Charts/Helper.java">Helper</a></td>
<td class="cell80">Shows how to connect to
-OpenOffice.org 3.2 and create text, drawing or spreadsheet document. This
+OpenOffice.org %PRODUCT_RELEASE% and create text, drawing or spreadsheet document. This
class is used as a helper class for the other examples.</td>
</tr>
<tr>
@@ -1863,7 +1863,7 @@ changes.</td>
<tbody>
<tr>
<td colspan="2" class="head1"><a
- name="BasicandDialogs">OpenOffice.org 3.2 Basic and Dialogs examples</a></td>
+ name="BasicandDialogs">OpenOffice.org %PRODUCT_RELEASE% Basic and Dialogs examples</a></td>
<td align="right"> <a href="#examples"
title="link to the Developer's Guide examples overview"><img
class="navigate" src="../../docs/images/nav_up.png"></a> <a
@@ -1985,7 +1985,7 @@ the example. </td>
href="./Database/CodeSamples.java"
title="link to Database/CodeSamples.java">CodeSamples</a></td>
<td class="cell80">Creates the connection to
-OpenOffice.org 3.2 and executes the code SalesMan samples for database API.</td>
+OpenOffice.org %PRODUCT_RELEASE% and executes the code SalesMan samples for database API.</td>
</tr>
<tr>
<td class="cell20"><img
@@ -2668,7 +2668,7 @@ Management examples</a></td>
href="./Config/ConfigExamples.java"
title="link to Config/ConfigExamples.java">ConfigExamples</a></td>
<td class="cell80">This example connects to a
-OpenOffice.org 3.2, gets the configuration manager and accesses the
+OpenOffice.org %PRODUCT_RELEASE%, gets the configuration manager and accesses the
configuration in various ways.</td>
</tr>
</tbody>
diff --git a/odk/examples/examples.html b/odk/examples/examples.html
index 12758ea3100d..ed6669582cb6 100644
--- a/odk/examples/examples.html
+++ b/odk/examples/examples.html
@@ -1,6 +1,6 @@
<html>
<head>
- <title>OpenOffice.org 3.2 SDK - Examples</title>
+ <title>OpenOffice.org %PRODUCT_RELEASE% SDK - Examples</title>
<link rel="stylesheet" type="text/css" href="../docs/sdk_styles.css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="author" content="J&uuml;rgen Schmidt">
@@ -38,10 +38,10 @@
<tr>
<td colspan="3">
<p>The SDK provides a rich set of examples in different programming
- languages (Java, C++, OpenOffice.org 3.2 Basic, OLE) to illustrate the use
+ languages (Java, C++, OpenOffice.org %PRODUCT_RELEASE% Basic, OLE) to illustrate the use
of the API and demonstrate how to benefit from the included word
processor, spreadsheet, presentation software, graphics program and
- database of OpenOffice.org 3.2.<br>
+ database of OpenOffice.org %PRODUCT_RELEASE%.<br>
Some fo the examples need a running office instance listening on a
port. If this is necessary you will get further information in the
makefiles.</p>
@@ -83,9 +83,9 @@
</tr>
<tr valign="top">
<td class="content3"><img src="../docs/images/arrow-1.gif"></td>
- <td><a href="#Basic_examples" title="link to the OpenOffice.org 3.2 Basic examples section">OpenOffice.org 3.2 Basic examples</a></td>
+ <td><a href="#Basic_examples" title="link to the OpenOffice.org %PRODUCT_RELEASE% Basic examples section">OpenOffice.org %PRODUCT_RELEASE% Basic examples</a></td>
<td class="content75">Small set of examples which shows the use of
- the API from OpenOffice.org 3.2 Basic.</td>
+ the API from OpenOffice.org %PRODUCT_RELEASE% Basic.</td>
</tr>
<tr valign="top">
<td class="content3"><img src="../docs/images/arrow-1.gif"></td>
@@ -214,7 +214,7 @@
</tr>
<tr>
<td class="cell20"><a href="java/Spreadsheet/" title="link to the source directory of the Java Spreadsheet examples">ChartTypeChange</a></td>
- <td class="cell80">This class loads an OpenOffice.org 3.2 Calc document and
+ <td class="cell80">This class loads an OpenOffice.org %PRODUCT_RELEASE% Calc document and
changes the type of the embedded chart.</td>
</tr>
<tr>
@@ -298,7 +298,7 @@
<td class="cell20"><a href="http://wiki.services.openoffice.org/wiki/Object_Inspector" title="link to the Object Inspector project page in the wiki">Object Inspector</a></td>
<td class="cell80">The Object Inspector is primarily an auxiliary tool
for the developer, which can present information about an object of the
- OpenOffice.org 3.2 API at run-time. Depending on the object to be inspected,
+ OpenOffice.org %PRODUCT_RELEASE% API at run-time. Depending on the object to be inspected,
appropriate methods, interfaces, services, and attributes can be displayed
to the developer. The methods, interfaces, services and attributes are
represented in a predictable tree. If the attributes contained in an
@@ -460,7 +460,7 @@
<td>
<table class="table3">
<tr>
- <td colspan="2" class="head1"><a name="Basic_examples">OpenOffice.org 3.2 Basic examples</td>
+ <td colspan="2" class="head1"><a name="Basic_examples">OpenOffice.org %PRODUCT_RELEASE% Basic examples</td>
<td align="right">
<a href="#examples" title="link to the examples overview"><img class="navigate" src="../docs/images/nav_up.png"></a>
<a href="../index.html" title="link to the SDK start page"><img class="navigate" src="../docs/images/nav_home.png"></a>
@@ -468,8 +468,8 @@
</tr>
<tr>
<td colspan="3">
- <p>The example programs are embedded in OpenOffice.org 3.2 documents in the
- samples directory. To view or edit the OpenOffice.org 3.2 Basic source,
+ <p>The example programs are embedded in OpenOffice.org %PRODUCT_RELEASE% documents in the
+ samples directory. To view or edit the OpenOffice.org %PRODUCT_RELEASE% Basic source,
select the appropriate document and then select Tools-&gt;Macro.</p>
<p>Most of the examples are stand-alone, but two of them (Creating an
Index and Import/Export of ASCII Files) have an associated data file
@@ -491,7 +491,7 @@
<td class="cell80">Description</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org 3.2 Basic text/modifying_text_automatically examples">Changing Appearance</a></td>
+ <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic text/modifying_text_automatically examples">Changing Appearance</a></td>
<td class="cell80"> To change the style used for certain words, you can
start with the following example. This code searches for the regular
expression <code>the[a-z]</code>, which stands for the text portion the
@@ -502,7 +502,7 @@
must execute it from an open text document.</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org 3.2 Basic text/modifying_text_automatically examples">Replacing Text</a></td>
+ <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic text/modifying_text_automatically examples">Replacing Text</a></td>
<td class="cell80">If you regularly receive documents from other people
for editing, you might want to make sure that certain words are always
written the same. The next example illustrates this by forcing certain
@@ -512,7 +512,7 @@
words from an external file.</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org 3.2 Basic text/modifying_text_automatically examples">Using Regular Expressions</a></td>
+ <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic text/modifying_text_automatically examples">Using Regular Expressions</a></td>
<td class="cell80">Another application of automatic text modification is
related to stylistic questions. Suppose your company&#146;s policy is to
avoid the use of certain words. You want to replace these words, but you
@@ -529,7 +529,7 @@
(plural, adjective etc.).</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org 3.2 Basic text/modifying_text_automatically examples">Inserting Bookmarks</a></td>
+ <td class="cell20"><a href="basic/text/modifying_text_automatically/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic text/modifying_text_automatically examples">Inserting Bookmarks</a></td>
<td class="cell80">
<p>The next example does something very similar. This time, however, we
do not change the color of the words but insert a bookmark at each of
@@ -544,14 +544,14 @@
word.</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/text/creating_an_index/" title="link to the source directory of the OpenOffice.org 3.2 Basic text/create_index example">Creating an Index</a></td>
+ <td class="cell20"><a href="basic/text/creating_an_index/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic text/create_index example">Creating an Index</a></td>
<td class="cell80">Indices for text documents can be created manually in
- OpenOffice.org 3.2 Writer by clicking on the words that should appear in the
+ OpenOffice.org %PRODUCT_RELEASE% Writer by clicking on the words that should appear in the
index. If the document is large, or if you have to generate indices for
several documents, this task should be automated.</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/sheet/" title="link to the source directory of the OpenOffice.org 3.2 Basic sheet example">Adapting to Euroland</a></td>
+ <td class="cell20"><a href="basic/sheet/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic sheet example">Adapting to Euroland</a></td>
<td class="cell80">Most of the members of the European Union will abandon
their old currency in favor of the new Euro in 2001. This requires
modifications to all programs using the old currencies. Since the exchange
@@ -560,14 +560,14 @@
in a table that are formatted with the currency string DM.</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/drawing/" title="link to the source directory of the OpenOffice.org 3.2 Basic drawing example">Import/Export of ASCII Files</a></td>
+ <td class="cell20"><a href="basic/drawing/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic drawing example">Import/Export of ASCII Files</a></td>
<td class="cell80">You can use the drawing facilities of StarOffice API
to generate a picture from ASCII input. One application would be a
hierarchical representation of a directory listing, based on textual
data.</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/stock_quotes_updater/" title="link to the source directory of the OpenOffice.org 3.2 Basic stock_quotes_updater example">Stock Quotes Updater</a></td>
+ <td class="cell20"><a href="basic/stock_quotes_updater/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic stock_quotes_updater example">Stock Quotes Updater</a></td>
<td class="cell80">If you want to display stock charts for certain
companies, you can open up your browser every day, go to a search engine,
look up the quote and copy it by hand into a table. Or you can use a
@@ -579,7 +579,7 @@
<code>UpdateValue()</code>, and <code>UpdateChart()</code>.</td>
</tr>
<tr>
- <td class="cell20"><a href="basic/forms_and_controls/" title="link to the source directory of the OpenOffice.org 3.2 Basic forms_and_controls example">Forms and Controls</a></td>
+ <td class="cell20"><a href="basic/forms_and_controls/" title="link to the source directory of the OpenOffice.org %PRODUCT_RELEASE% Basic forms_and_controls example">Forms and Controls</a></td>
<td class="cell80">The example document Burger Factory offers some forms
and controls, which you can use to order your desired burger type,
beverage, topping, and sauce. By hitting the button
@@ -594,7 +594,7 @@
<table class="table3">
<tr>
<td colspan="3">
- Additional information: <a href="http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Basic/OpenOffice.org_Basic" title="link to the &quot;OpenOffice.org 3.2 Basic language binding&quot; chapter in the Developer's Guide">OpenOffice.org 3.2 Basic language binding</a>
+ Additional information: <a href="http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Basic/OpenOffice.org_Basic" title="link to the &quot;OpenOffice.org %PRODUCT_RELEASE% Basic language binding&quot; chapter in the Developer's Guide">OpenOffice.org %PRODUCT_RELEASE% Basic language binding</a>
</td>
</tr>
</table>
diff --git a/odk/index.html b/odk/index.html
index f926fdc0d7b5..6490e2354218 100644
--- a/odk/index.html
+++ b/odk/index.html
@@ -1,6 +1,6 @@
<html>
<head>
- <title>OpenOffice.org 3.2 SDK - SDK</title>
+ <title>OpenOffice.org %PRODUCT_RELEASE% SDK - Overview</title>
<link rel="stylesheet" type="text/css" href="docs/sdk_styles.css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="author" content="J&uuml;rgen Schmidt">
@@ -21,12 +21,12 @@
<tr>
<td><img class="nothing8" src="docs/images/nada.gif"></td>
<td>
- <p>OpenOffice.org 3.2 software is a complete, feature-rich
+ <p>OpenOffice.org %PRODUCT_RELEASE% software is a complete, feature-rich
office productivity suite that provides, in combination with this
SDK, all the essential tools for building and deploying custom
- solutions that build on, or integrate with, the OpenOffice.org 3.2 suite
+ solutions that build on, or integrate with, the OpenOffice.org %PRODUCT_RELEASE% suite
of products.</p>
- <p>The SDK is a development kit for OpenOffice.org 3.2, which
+ <p>The SDK is a development kit for OpenOffice.org %PRODUCT_RELEASE%, which
eases the development of office components. It provides a set of
libraries, binaries, header, and IDL files which have final API's
and can only be extended with new functionality. This set of libraries
@@ -41,8 +41,8 @@
with new functions.</p>
<p>The SDK provides the basic building blocks for external developers
to develop components in any language for which a binding exists.
- Currently, there are language bindings for OpenOffice.org 3.2 Basic, Java,
- and different C++ compilers on different platforms, for OpenOffice.org 3.2,
+ Currently, there are language bindings for OpenOffice.org %PRODUCT_RELEASE% Basic, Java,
+ and different C++ compilers on different platforms, for OpenOffice.org %PRODUCT_RELEASE%,
thus covering the two most commonly used programming languages. There
will be no limit for office automation in heterogeneous environments.
Currently supported platforms of the SDK are Linux, Solaris (sparc,
@@ -83,7 +83,7 @@
<tr valign="top">
<td class="content4"><img src="docs/images/arrow-1.gif"></td>
<td colspan="2"><a href="http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide" title="link to the Developer's Guide in the Wiki">Developer's Guide</a></td>
- <td class="content70">Detailed documentation, explaining the OpenOffice.org 3.2
+ <td class="content70">Detailed documentation, explaining the OpenOffice.org %PRODUCT_RELEASE%
API and the concepts behind it, with a rich set of examples,
implemented mainly in Java. This documentation is online in the
OpenOffice.org Wiki.</td>
@@ -91,7 +91,7 @@
<tr valign="top">
<td class="content4"><img src="docs/images/arrow-1.gif"></td>
<td colspan="2"><a href="docs/common/ref/com/sun/star/module-ix.html" title="link to the IDL reference documentation">IDL Reference</a></td>
- <td class="content70">Complete OpenOffice.org 3.2 API reference.</td>
+ <td class="content70">Complete OpenOffice.org %PRODUCT_RELEASE% API reference.</td>
</tr>
<tr valign="top">
<td class="content4"><img src="docs/images/arrow-1.gif"></td>
@@ -132,7 +132,7 @@
Office Applications (OpenDocument) Technical Committee where you
can find the latest information about the OASIS Open Document XML
file format which is the default document format
- for OpenOffice.org 3.2.</td>
+ for OpenOffice.org %PRODUCT_RELEASE%.</td>
</tr>
<tr valign="top">
<td class="content4"><img src="docs/images/arrow-1.gif"></td>
@@ -147,7 +147,7 @@
<tr valign="top">
<td class="content4"><img src="docs/images/arrow-1.gif"></td>
<td colspan="2"><a href="share/readme/LICENSE_en-US.html" title="link to the SDK license file">License</a></td>
- <td class="content70">The license for the OpenOffice.org 3.2 SDK.</td>
+ <td class="content70">The license for the OpenOffice.org %PRODUCT_RELEASE% SDK.</td>
</tr>
<tr valign="middle">
<td><img class="nothing10" src="docs/images/nada.gif"></td>
diff --git a/odk/pack/copying/makefile.mk b/odk/pack/copying/makefile.mk
index b8a7b9a6cd48..52efe87ff797 100644
--- a/odk/pack/copying/makefile.mk
+++ b/odk/pack/copying/makefile.mk
@@ -241,7 +241,7 @@ $(DESTDIRSETTINGS)/dk.mk : dk.mk
tr -d "\015" < dk.mk | sed -e 's/@@RELEASE@@/$(PRODUCT_RELEASE)/' -e 's/@@BUILDID@@/$(RSCREVISION)/'> $@
$(CONVERTTAGFLAG) : $(DOCUHTMLFILES)
- $(PERL) $(CONVERTTAGSCRIPT) 1 "$(TITLE)" "$(OFFICEPRODUCTNAME)" $(DOCUHTMLFILES)
+# $(PERL) $(CONVERTTAGSCRIPT) 1 "$(TITLE)" "$(OFFICEPRODUCTNAME)" $(DOCUHTMLFILES)
@echo "tags converted" > $@
$(IDL_DOCU_CLEANUP_FLAG) : $(IDL_CHAPTER_REFS) $(PRJ)/docs/common/ref/idl.css $(DESTIDLLIST)
diff --git a/odk/settings/std.mk b/odk/settings/std.mk
index 26e5c2319030..6deb065f9dc1 100644
--- a/odk/settings/std.mk
+++ b/odk/settings/std.mk
@@ -32,8 +32,16 @@ OFFICE_SERVICES=$(subst \\,\,$(OFFICE_BASE_PROGRAM_PATH)$(PS)services.rdb)
OFFICE_TYPE_LIBRARY="$(OFFICE_TYPES)"
+JAVA_OPTIONS=
+ifneq "$(OO_SDK_JAVA_HOME)" ""
+JAVA_BITS := $(shell $(OO_SDK_JAVA_HOME)/$(JAVABIN)/java -version 2>&1 | tail -1 | cut -d " " -f3)
+ifeq "$(JAVA_BITS)" "64-Bit"
+JAVA_OPTIONS=-d32
+endif
+endif
+
DEPLOYTOOL="$(OFFICE_PROGRAM_PATH)$(PS)unopkg" add -f
-SDK_JAVA="$(OO_SDK_JAVA_HOME)/$(JAVABIN)/java"
+SDK_JAVA="$(OO_SDK_JAVA_HOME)/$(JAVABIN)/java" $(JAVA_OPTIONS)
SDK_JAVAC="$(OO_SDK_JAVA_HOME)/$(JAVABIN)/javac"
SDK_JAR="$(OO_SDK_JAVA_HOME)/$(JAVABIN)/jar"
SDK_ZIP="$(OO_SDK_ZIP_HOME)/zip"
diff --git a/odk/util/odk_rules.pmk b/odk/util/odk_rules.pmk
index 6c2fa72600a1..bb62664053f1 100644
--- a/odk/util/odk_rules.pmk
+++ b/odk/util/odk_rules.pmk
@@ -28,15 +28,15 @@
$(DESTDIRDOCU)/%.html : $(PRJ)/docs/%.html
@@-rm -f $@
- $(MY_TEXTCOPY) $< $@
+ tr -d "\015" < $< | sed -e 's/%PRODUCT_RELEASE%/$(PRODUCT_RELEASE)/g' > $@
$(DESTDIREXAMPLES)/%.html : $(PRJ)/examples/%.html
@@-rm -f $@
- $(MY_TEXTCOPY) $< $@
+ tr -d "\015" < $< | sed -e 's/%PRODUCT_RELEASE%/$(PRODUCT_RELEASE)/g' > $@
$(DESTDIR)/index.html : $(PRJ)/index.html
@@-rm -f $@
- $(MY_TEXTCOPY) $< $@
+ tr -d "\015" < $< | sed -e 's/%PRODUCT_RELEASE%/$(PRODUCT_RELEASE)/g' > $@
$(DESTDIRDOCU)/%.css : $(PRJ)/docs/%.css
@@-rm -f $@
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParsingException.java b/offapi/com/sun/star/deployment/ExtensionManager.idl
index 631244ad0d96..1911ce04dd81 100644
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParsingException.java
+++ b/offapi/com/sun/star/deployment/ExtensionManager.idl
@@ -1,4 +1,4 @@
-/************************************************************************
+/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -25,22 +25,25 @@
*
************************************************************************/
+#if ! defined INCLUDED_com_sun_star_deployment_ExtensionManagerFactory_idl
+#define INCLUDED_com_sun_star_deployment_ExtensionManagerFactory_idl
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
+#include <com/sun/star/deployment/XExtensionManager.idl>
-/*
- * If the formula failed to be parsed properly this exception will be thrown
- *
- * Martin Maher
- */
-import java.io.*;
+module com { module sun { module star { module deployment {
+
+/** the ExtensionManager service.
+
+ The component context entry is
+ <code>
+ /singletons/com.sun.star.deployment.ExtensionManager
+ </code>.
-import org.openoffice.xmerge.util.Debug;
+ @since OOo 3.3.0
+*/
+singleton ExtensionManager : XExtensionManager;
-public class FormulaParsingException extends Exception {
+}; }; }; };
- public FormulaParsingException(String message) {
- super(message);
- }
- }
+#endif
diff --git a/offapi/com/sun/star/deployment/ExtensionRemovedException.idl b/offapi/com/sun/star/deployment/ExtensionRemovedException.idl
new file mode 100644
index 000000000000..bb3116c9f554
--- /dev/null
+++ b/offapi/com/sun/star/deployment/ExtensionRemovedException.idl
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * 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: VersionException.idl,v $
+ * $Revision: 1.3 $
+ *
+ * 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 INCLUDED_COM_SUN_STAR_DEPLOYMENT_EXTENSIONREMOVEDEXCEPTION_IDL
+#define INCLUDED_COM_SUN_STAR_DEPLOYMENT_EXTENSIONREMOVEDEXCEPTION_IDL
+
+#include "com/sun/star/uno/Exception.idl"
+
+module com { module sun { module star { module deployment {
+
+interface XPackage;
+
+/**
+ indicates that a function call with the given arguments is not supported
+ because the extension was removed. <member>XPackage::isRemoved</member> will
+ return true on that object.
+
+ @since OOo 3.3.0
+*/
+exception ExtensionRemovedException: com::sun::star::uno::Exception {
+
+};
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/deployment/InstallException.idl b/offapi/com/sun/star/deployment/InstallException.idl
index 6c16e058b38d..3186ecedbdfc 100644
--- a/offapi/com/sun/star/deployment/InstallException.idl
+++ b/offapi/com/sun/star/deployment/InstallException.idl
@@ -44,11 +44,10 @@ interface XPackage;
*/
exception InstallException: com::sun::star::uno::Exception {
/**
- represents the new deployment unit.
+ the display name of the extension, which is to be installed.
- <p>Must not be <NULL/>.</p>
*/
- XPackage New;
+ string displayName;
};
diff --git a/offapi/com/sun/star/deployment/InvalidRemovedParameterException.idl b/offapi/com/sun/star/deployment/InvalidRemovedParameterException.idl
new file mode 100644
index 000000000000..3a2cb5e330cc
--- /dev/null
+++ b/offapi/com/sun/star/deployment/InvalidRemovedParameterException.idl
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * 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: VersionException.idl,v $
+ * $Revision: 1.3 $
+ *
+ * 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 INCLUDED_COM_SUN_STAR_DEPLOYMENT_INVALIDREMOVEDPARAMETEREXCEPTION_IDL
+#define INCLUDED_COM_SUN_STAR_DEPLOYMENT_INVALIDREMOVEDPARAMETEREXCEPTION_IDL
+
+#include "com/sun/star/uno/Exception.idl"
+
+module com { module sun { module star { module deployment {
+
+interface XPackage;
+
+/**
+ indicates that <member>XPackageRegistry::bindPackage</member> was previously
+ called with a different value for the <code>removed</code> parameter and that
+ the <type>XPackage</type> object created by that call still exist.
+
+ @since OOo 3.3.0
+*/
+exception InvalidRemovedParameterException: com::sun::star::uno::Exception {
+ /** the value of the <code>removed</code> parameter which was used in
+ <member>XPackageRegistry::bindPackage</member> to create the currently
+ existing <type>XPackage</type> object.
+ */
+ boolean PreviousValue;
+ /**
+ the <type>XPackage</type> that was already bound to the provided
+ <code>url</code> paramter during
+ <member>XPackageRegistry::bindPackage</member>.
+
+ <p>Must not be <NULL/>.</p>
+ */
+ XPackage Extension;
+};
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/deployment/LicenseException.idl b/offapi/com/sun/star/deployment/LicenseException.idl
index 4d3996da191b..a80a5e463dd6 100644
--- a/offapi/com/sun/star/deployment/LicenseException.idl
+++ b/offapi/com/sun/star/deployment/LicenseException.idl
@@ -41,20 +41,19 @@ exception LicenseException : com::sun::star::uno::Exception
{
/** name of the extension.
- Contains the file name only.
+ The display name of the extension.
+ See <member>XPackage::getDisplayName</member>
*/
string ExtensionName;
/** contains the text of the license.
*/
string Text;
- /** indicates if the user can prevent to show the license
-
- Represents the attribute value
- /description/registration/simple-license/@suppress-if-required
+ /** contains the value of the attribute
+ /description/registration/simple-license/@accept-by
from the description.xml
*/
- boolean SuppressIfRequired;
+ string AcceptBy;
};
}; }; }; };
diff --git a/sd/source/ui/dlg/printdialog.hrc b/offapi/com/sun/star/deployment/Prerequisites.idl
index 702dc3898b18..52987ad9bd77 100644
--- a/sd/source/ui/dlg/printdialog.hrc
+++ b/offapi/com/sun/star/deployment/Prerequisites.idl
@@ -2,10 +2,13 @@
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
+ * $RCSfile: KeyUsage.idl,v $
+ * $Revision: 1.4 $
+ *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -25,14 +28,21 @@
*
************************************************************************/
-#define DLG_PRINTDIALOG 1847
-#define FL_PRINTCONTENT 1
-#define FT_CONTENT 2
-#define CB_CONTENT 3
-#define FT_SLIDESPERPAGE 4
-#define CB_SLIDESPERPAGE 5
-#define FT_ORDER 6
-#define RBT_HORIZONTAL 7
-#define RBT_VERTICAL 8
-#define IMG_PREVIEW 9
-#define PRINTDLG_CONTROLCOUNT 9
+#ifndef __com_sun_star_deployment_prerequisites_idl_
+#define __com_sun_star_deployment_prerequisites_idl_
+
+module com { module sun { module star { module deployment {
+
+constants Prerequisites
+{
+ const long PLATFORM = 0x1;
+ const long DEPENDENCIES = 0x2;
+ const long LICENSE = 0x04;
+};
+
+
+} ; } ; } ; } ;
+
+
+#endif
+
diff --git a/offapi/com/sun/star/deployment/VersionException.idl b/offapi/com/sun/star/deployment/VersionException.idl
index 74683adab7a0..2d69c918c3a2 100644
--- a/offapi/com/sun/star/deployment/VersionException.idl
+++ b/offapi/com/sun/star/deployment/VersionException.idl
@@ -44,11 +44,13 @@ interface XPackage;
*/
exception VersionException: com::sun::star::uno::Exception {
/**
- represents the new version of the deployment unit.
-
- <p>Must not be <NULL/>.</p>
+ the version of the extension which is being installed.
+ */
+ string NewVersion;
+ /**
+ the display name of the extension which is being installed.
*/
- XPackage New;
+ string NewDisplayName;
/**
represents the already installed version of the deployment unit.
diff --git a/offapi/com/sun/star/deployment/XExtensionManager.idl b/offapi/com/sun/star/deployment/XExtensionManager.idl
new file mode 100644
index 000000000000..b807df54af65
--- /dev/null
+++ b/offapi/com/sun/star/deployment/XExtensionManager.idl
@@ -0,0 +1,342 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#if ! defined INCLUDED_com_sun_star_deployment_XExtensionManager_idl
+#define INCLUDED_com_sun_star_deployment_XExtensionManager_idl
+
+#include <com/sun/star/lang/XComponent.idl>
+#include <com/sun/star/task/XAbortChannel.idl>
+#include <com/sun/star/util/XModifyBroadcaster.idl>
+#include <com/sun/star/deployment/XPackage.idl>
+#include <com/sun/star/deployment/XPackageTypeInfo.idl>
+#include <com/sun/star/ucb/XCommandEnvironment.idl>
+#include <com/sun/star/deployment/DeploymentException.idl>
+#include <com/sun/star/container/NoSuchElementException.idl>
+#include <com/sun/star/lang/IllegalArgumentException.idl>
+#include <com/sun/star/beans/NamedValue.idl>
+
+module com { module sun { module star { module deployment {
+
+/** The <type>XExtensionManager</type> interface is used to manage extensions
+ in the user, shared and bundled repository.
+
+ @see ExtensionManager
+ @since OOo 3.3.0
+*/
+interface XExtensionManager
+{
+ /** interface to notify disposing
+ */
+ interface com::sun::star::lang::XComponent;
+
+ /** interface to notify changes of the set of deployed packages of
+ this manager
+ */
+ interface com::sun::star::util::XModifyBroadcaster;
+
+
+ /** gets the supported <type>XPackageTypeInfo</type>s.
+
+ @return
+ supported <type>XPackageTypeInfo</type>s.
+ */
+ sequence<XPackageTypeInfo> getSupportedPackageTypes();
+
+ /** creates a command channel to be used to asynchronously abort a command.
+
+ @return
+ abort channel
+ */
+ com::sun::star::task::XAbortChannel createAbortChannel();
+
+ /** adds an extension.
+
+ The properties argument is currently only used to suppress the license information
+ for shared extensions.
+
+ @param url
+ package URL, must be UCB conform
+ @param properties
+ additional properties, for example, that the license is to be
+ suppressed (if supported by the extension)
+ @param repository
+ the name of the repository
+ @param xAbortChannel
+ abort channel to asynchronously abort the adding process,
+ or null
+ @param xCmdEnv
+ command environment for error and progress handling
+ @return
+ object representing the extension.
+ */
+ XPackage addExtension( [in] string url,
+ [in] sequence<com::sun::star::beans::NamedValue> properties,
+ [in] string repository,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+ /** removes an extension.
+
+ @param identifier
+ package identifier
+ @param fileName
+ package file name
+ @param repository
+ the name of the repository
+ @param xAbortChannel
+ abort channel to asynchronously abort the removing process,
+ or null
+ @param xCmdEnv
+ command environment for error and progress handling
+ */
+ void removeExtension(
+ [in] string identifier,
+ [in] string fileName,
+ [in] string repository,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+
+ /** enable an extension.
+
+ If the extension is not from the user repository then an
+ IllegalArgumentException is thrown.
+
+ @param extension
+ the extension which is to be enabled.
+ @param xAbortChannel
+ abort channel to asynchronously abort the removing process,
+ or null
+ @param xCmdEnv
+ command environment for error and progress handling
+ */
+ void enableExtension(
+ [in] XPackage extension,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+ /** disable an extension.
+
+ If the extension is not from the user repository then an
+ IllegalArgumentException is thrown.
+
+ @param extension
+ the extension which is to be disabled
+ @param xAbortChannel
+ abort channel to asynchronously abort the removing process,
+ or null
+ @param xCmdEnv
+ command environment for error and progress handling
+ */
+ void disableExtension(
+ [in] XPackage extension,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+ /** gets all currently installed extensions, including disabled
+ user extensions.
+
+ @param repository
+ the repository from which the extensions are returned
+ @param xAbortChannel
+ abort channel to asynchronously abort the removing process,
+ or null
+ @param xCmdEnv
+ command environment for error and progress handling
+ @return
+ all currently installed packages
+ */
+ sequence<XPackage> getDeployedExtensions(
+ [in] string repository,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+
+ /** gets an installed extensions.
+
+ @param repositroy
+ the name of the repository
+ @param identifier
+ extension identifier
+ @param fileName
+ extension file name
+ @param xCmdEnv
+ command environment for error and progress handling
+ @return
+ <type>XPackage</type> object
+ */
+ XPackage getDeployedExtension(
+ [in] string repository,
+ [in] string identifier,
+ [in] string fileName,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+ /** gets all extensions with the same identifer from all repositories.
+
+ The extension at the first position in the returned sequence represents
+ the extension from the user repository. The next element is from the shared
+ and the last one is from the bundled repository.
+ If one repository does not contain this extension, then the respective
+ element is a null reference.
+ */
+ sequence<XPackage> getExtensionsWithSameIdentifier(
+ [in] string identifier,
+ [in] string fileName,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+
+ /** returns a sequence containing all installed extensions.
+
+ The members of the returned sequence correspond to an extension with a
+ particular extension identifer. The members are also sequences which
+ contain as many elements as there are repositories. Those are ordered
+ according to the priority of the repository. That is, the first member
+ is the extension from the user repository, the second is from the shared
+ repository and the last is from the bundled repository.
+ */
+ sequence<sequence<XPackage> > getAllExtensions(
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+
+ /** Expert feature: erases the underlying registry cache and reinstalls
+ all previously added extensions. Please keep in mind that all
+ registration status get lost.
+ <p>
+ Please use this in case of suspected cache inconsistencies only.
+ </p>
+ @param repositroy
+ the name of the repository
+ @param xAbortChannel
+ abort channel to asynchronously abort the adding process
+ @param xCmdEnv
+ command environment for error and progress handling
+ */
+ void reinstallDeployedExtensions(
+ [in] string repository,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+
+ /** synchronizes the extension database with the contents of the extensions
+ folder of shared and bundled extensinos.
+
+ Added extensions will be added to the database and removed extensions
+ will be removed from the database.
+
+ @return
+ If true - then at least one extension was removed or added. Otherwise
+ nothing was chaned.
+ */
+ boolean synchronize(
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+
+ /** returns all extensions which are currently not in use
+ because the user did not accept the license.
+
+ The function will not return any object for the user repository, because
+ a user extension will not be kept in the user repository if its license
+ is declined. Only extensions which are registered at start-up of OOo,
+ that is, shared and bundled extensions, can be returned.
+
+ Extensions which allow the license to be suppressed, that is, it does not
+ need to be displayed, and which are installed with the corresponding option,
+ are also not returned.
+
+ Extensions returned by this functions are not returned by
+ <member>XExtensionManger::getDeployedExtension</member>
+ <member>XExtensionManger::getDeployedExtensions</member>
+ <member>XExtensionManger::getAllExtensions</member>
+ <member>XExtensionManger::getExtensionsWithSameIdentifier</member>
+ */
+ sequence<XPackage> getExtensionsWithUnacceptedLicenses(
+ [in] string repository,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::lang::IllegalArgumentException);
+
+ /** check if all prerequisites for the extension are fulfilled
+ and activates it, if possible.
+ */
+ long checkPrerequisitesAndEnable(
+ [in] XPackage extension,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
+ /** determines if the current user has write access to the extensions folder
+ of the repository.
+ */
+ boolean isReadOnlyRepository([in] string repository);
+};
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/deployment/XPackage.idl b/offapi/com/sun/star/deployment/XPackage.idl
index f54ec347e368..9709b579bc2e 100644
--- a/offapi/com/sun/star/deployment/XPackage.idl
+++ b/offapi/com/sun/star/deployment/XPackage.idl
@@ -33,6 +33,7 @@
#include <com/sun/star/beans/StringPair.idl>
#include <com/sun/star/deployment/DeploymentException.idl>
#include <com/sun/star/deployment/XPackageTypeInfo.idl>
+#include <com/sun/star/deployment/ExtensionRemovedException.idl>
#include <com/sun/star/graphic/XGraphic.idl>
#include <com/sun/star/lang/XComponent.idl>
#include <com/sun/star/lang/IllegalArgumentException.idl>
@@ -72,30 +73,25 @@ interface XPackage
Only if the return value is true the package is allowed to be installed.
In case of false or in case of an exception, the package must be removed
- in completely.
+ completely.
After return of this function no code from the extension may be used
anymore, so that the extension can be safely removed from the harddisk.
@param xCmdEnv
command environment for error handling and other interaction.
- @installed
- signalls if an extension with the same identifyer is already installed.
-
- @aContextName
- the name of the context of XPackageManager implementation that is to be used
- to install the extension. Currently we use the names "user"
- and "shared".
+ @alreadyInstalled
+ indicates that an extension with the same identifyer is already installed.
@return
- true - the package can be installed
- false - the package must not be installed.
+ null - all prerequisites are met. Otherwise, a value from
+ <member>Prerequisites</member> indicating what prerequisites are missing.
*/
- boolean checkPrerequisites(
+ long checkPrerequisites(
[in] com::sun::star::task::XAbortChannel xAbortChannel,
[in] com::sun::star::ucb::XCommandEnvironment xCmdEnv,
- [in] boolean installed,
- [in] string aContextName)
+ [in] boolean alreadyInstalled)
raises (DeploymentException,
+ ExtensionRemovedException,
com::sun::star::ucb::CommandFailedException,
com::sun::star::ucb::CommandAbortedException);
@@ -116,6 +112,7 @@ interface XPackage
boolean checkDependencies(
[in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
raises (DeploymentException,
+ ExtensionRemovedException,
com::sun::star::ucb::CommandFailedException);
@@ -140,8 +137,14 @@ interface XPackage
com::sun::star::ucb::CommandFailedException,
com::sun::star::ucb::CommandAbortedException);
- /** registers this <type>XPackage</type>, thus activating the package.
+ /** registers this <type>XPackage</type>.
+
+ NEVER call this directly. This is done by the extension manager if necessary.
+ @param startup
+ indicates that registration is adapted to the particular
+ startup scenario. That is, it is set to true, when called
+ from <member>XExtensionManager::synchronize</member>
@param xAbortChannel
abort channel to asynchronously abort the registration process,
or null
@@ -149,15 +152,19 @@ interface XPackage
command environment for error and progress handling
*/
void registerPackage(
+ [in] boolean startup,
[in] com::sun::star::task::XAbortChannel xAbortChannel,
[in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
raises (DeploymentException,
+ ExtensionRemovedException,
com::sun::star::ucb::CommandFailedException,
com::sun::star::ucb::CommandAbortedException,
com::sun::star::lang::IllegalArgumentException);
/** revokes this <type>XPackage</type>.
+ NEVER call this directly. This is done by the extension manager if necessary.
+
@param xAbortChannel
abort channel to asynchronously abort the registration process,
or null
@@ -182,6 +189,9 @@ interface XPackage
/** Gets packages of the bundle.
+ If <member>isRemoved</member> returns true then getBundle may return an
+ empty sequence in case the object is not registered.
+
@param xAbortChannel
abort channel to asynchronously abort the registration process,
or null
@@ -225,7 +235,8 @@ interface XPackage
@return
the textual version representation
*/
- string getVersion();
+ string getVersion()
+ raises (ExtensionRemovedException);
/** returns the location of the package.
@@ -240,14 +251,16 @@ interface XPackage
@return
display name of the package
*/
- string getDisplayName();
+ string getDisplayName()
+ raises (ExtensionRemovedException);
/** returns a description string to describe the package.
@return
description
*/
- string getDescription();
+ string getDescription()
+ raises (ExtensionRemovedException);
/** returns a sequence of update information URLs.
@@ -258,8 +271,8 @@ interface XPackage
@return
update information URLs
*/
- sequence<string> getUpdateInformationURLs();
-
+ sequence<string> getUpdateInformationURLs()
+ raises (ExtensionRemovedException);
/** returns the publisher info for a package, the strings
might be empty, if there are no publisher
@@ -269,8 +282,8 @@ interface XPackage
represents the URL to the publisher.
*/
- ::com::sun::star::beans::StringPair getPublisherInfo();
-
+ ::com::sun::star::beans::StringPair getPublisherInfo()
+ raises (ExtensionRemovedException);
/** returns the <type>XPackageTypeInfo</type>, e.g. media-type etc.
@return
@@ -293,8 +306,10 @@ interface XPackage
[in] string newTitle,
[in] long nameClashAction,
[in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
- raises (com::sun::star::ucb::CommandFailedException,
- com::sun::star::ucb::CommandAbortedException);
+ raises (
+ ExtensionRemovedException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException);
/** returns an icon for a package.
@@ -305,7 +320,37 @@ interface XPackage
database application window, or <NULL/> if the default icon
should be used.
*/
- com::sun::star::graphic::XGraphic getIcon( [in] boolean highContrast );
+ com::sun::star::graphic::XGraphic getIcon( [in] boolean highContrast )
+ raises (ExtensionRemovedException);
+
+ /** returns the name of the repository where this object comes from.
+ */
+ string getRepositoryName();
+
+ /** return a URL to a directory which contains the registration data.
+
+ This data may be created when calling
+ <member>XPackage::registerPackage</member>. If this is the case is
+ indicated by <member
+ scope="com::sun::star::beans">Optional::IsPresent</member> of the return
+ value.
+ If registration data are created during registration, but the package is
+ currently not registered, for example after calling
+ <member>XPackage::revokePackage</member>, then <member
+ scope="com::sun::star::beans">Optional::IsPresent</member> is true and
+ the <member scope="com::sun::star::beans">Optional::Value</member> may
+ be an empty string.
+ */
+ com::sun::star::beans::Optional<string> getRegistrationDataURL()
+ raises (ExtensionRemovedException);
+
+ /** indicates if this object represents a removed extension or extension
+ item. This is the case when it was created by providing
+ <code>true</code> for the <code>removed</code> parameter in the function
+ <member>XPackageRegistry::bindPackage</member>.
+ */
+ boolean isRemoved();
+
};
}; }; }; };
diff --git a/offapi/com/sun/star/deployment/XPackageManager.idl b/offapi/com/sun/star/deployment/XPackageManager.idl
index 544cd7758eb0..da329bb9367f 100644
--- a/offapi/com/sun/star/deployment/XPackageManager.idl
+++ b/offapi/com/sun/star/deployment/XPackageManager.idl
@@ -37,21 +37,26 @@
#include <com/sun/star/deployment/DeploymentException.idl>
#include <com/sun/star/container/NoSuchElementException.idl>
#include <com/sun/star/lang/IllegalArgumentException.idl>
+#include <com/sun/star/beans/NamedValue.idl>
module com { module sun { module star { module deployment {
/** The <type>XPackageManager</type> interface is used to add or remove
- packages to a specific deployment context.
+ packages to a specific repository. This interface represents a particular
+ repository.
Packages are deployable files, e.g. scripts or UNO components.
<p>
Adding an UNO package means that a copy of the package is stored
- with respect to the context of the manager and the package is registered,
- thus activated.
+ in the repository.
</p>
<p>
- Removing an UNO package means that the previously added package is revoked,
- thus deactivated, first and then removed from the context.
+ Removing an UNO package means that the previously added package is
+ removed from the repository.
+ </p>
+ <p>
+ All interface methods do neither register nor revoke an extension.
+ This happens exclusively by <type>XExtensionManager</type>.
</p>
<p>
Objects of this interface are created using the
@@ -63,6 +68,8 @@ module com { module sun { module star { module deployment {
@see thePackageManagerFactory
@since OOo 2.0.0
+ @deprecated
+ Use <type>XExtensionManager</type>.
*/
interface XPackageManager
{
@@ -75,7 +82,8 @@ interface XPackageManager
*/
interface com::sun::star::util::XModifyBroadcaster;
- /** returns the underlying deployment context.
+ /** returns the underlying deployment context, that is,
+ the name of the repository..
@return
underlying deployment context
@@ -98,8 +106,15 @@ interface XPackageManager
/** adds an UNO package.
+ The properties argument is currently only used to suppress the license information
+ for shared extensions.
+
+
@param url
package URL, must be UCB conform
+ @param properties
+ additional properties, for example, that the license is to be
+ suppressed (if supported by the extension)
@param mediaType
media-type of package, empty string if to be detected
@param xAbortChannel
@@ -111,6 +126,7 @@ interface XPackageManager
<type>XPackage</type> handle
*/
XPackage addPackage( [in] string url,
+ [in] sequence<com::sun::star::beans::NamedValue> properties,
[in] string mediaType,
[in] com::sun::star::task::XAbortChannel xAbortChannel,
[in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
@@ -119,6 +135,30 @@ interface XPackageManager
com::sun::star::ucb::CommandAbortedException,
com::sun::star::lang::IllegalArgumentException);
+ /** adds an extension.
+
+ This copies the extension. If it was from the same repository,
+ which is represented by this XPackageManager insterface, then
+ nothing happens.
+
+ @param extension
+
+ @param xAbortChannel
+ abort channel to asynchronously abort the adding process,
+ or null
+ @param xCmdEnv
+ command environment for error and progress handling
+ @return
+ <type>XPackage</type> handle
+ */
+ XPackage importExtension( [in] XPackage extension,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
/** removes an UNO package.
@param identifier
@@ -212,6 +252,61 @@ interface XPackageManager
*/
boolean isReadOnly();
+ /** synchronizes the extension database with the contents of the extensions
+ folder.
+
+ Added extensions will be added to the database and removed extensions
+ will be removed from the database.
+
+ @param xAddedExtension
+ new extensions which may need to be registered.
+
+ @param
+ removed extensions which must be revoked
+ @return
+ If true - then at least one extension was removed or added. Otherwise
+ nothing was chaned.
+ */
+ boolean synchronize([in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException);
+
+
+ /** returns all extensions which are currently not in use
+ because the user did not accept the license.
+
+ The function will not return any object for the user repository, because
+ a user extension will not be kept in the user repository if its license
+ is declined. Only extensions which are registered at start-up of OOo,
+ that is, shared and bundled extensions, can be returned.
+
+ Extensions which allow the license to be suppressed, that is, it does not
+ need to be displayed, and which are installed with the corresponding option,
+ are also not returned.
+ */
+ sequence<XPackage> getExtensionsWithUnacceptedLicenses(
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException);
+
+ /** checks if the extension can be used.
+
+ The extension must be managed by this package manager, that is, it must
+ be recorded in its database. The package manager calls
+ XPackage::checkPrerequisites and updates its data base with the
+ result. The result, which is from <type>Prerequisites</type> will be
+ returned.
+ */
+ long checkPrerequisites(
+ [in] XPackage extension,
+ [in] com::sun::star::task::XAbortChannel xAbortChannel,
+ [in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
+ raises (DeploymentException,
+ com::sun::star::ucb::CommandFailedException,
+ com::sun::star::ucb::CommandAbortedException,
+ com::sun::star::lang::IllegalArgumentException);
+
};
}; }; }; };
diff --git a/offapi/com/sun/star/deployment/XPackageManagerFactory.idl b/offapi/com/sun/star/deployment/XPackageManagerFactory.idl
index e3264bc0babf..4b5b7183ba47 100644
--- a/offapi/com/sun/star/deployment/XPackageManagerFactory.idl
+++ b/offapi/com/sun/star/deployment/XPackageManagerFactory.idl
@@ -45,6 +45,8 @@ module com { module sun { module star { module deployment {
</p>
@since OOo 2.0.0
+ @deprecated
+ Use <type>XExtensionManager</type>.
*/
interface XPackageManagerFactory
{
diff --git a/offapi/com/sun/star/deployment/XPackageRegistry.idl b/offapi/com/sun/star/deployment/XPackageRegistry.idl
index 3cfa6a75236c..c84f37625ec5 100644
--- a/offapi/com/sun/star/deployment/XPackageRegistry.idl
+++ b/offapi/com/sun/star/deployment/XPackageRegistry.idl
@@ -30,6 +30,7 @@
#include <com/sun/star/deployment/XPackage.idl>
#include <com/sun/star/deployment/XPackageTypeInfo.idl>
+#include <com/sun/star/deployment/InvalidRemovedParameterException.idl>
#include <com/sun/star/beans/StringPair.idl>
@@ -46,10 +47,52 @@ interface XPackageRegistry
thus the process of binding must not be an expensive operation, because
it is not abortable.
+ Calling the function several time with the same parameters must result
+ in returning the same object.
+
+ The file or folder at the location where url points to may not exist or
+ it was replaced. This can happen, for example, when a bundled extension
+ was removed by the setup and a user later starts OOo. Then the user data
+ may still contain all registration data of that extension, but the
+ actual extension files do not exist anymore. The registration data must
+ then be cleaned of all the remains of that extension. To to that one
+ creates an <type>XPackage</type> object on behalf of that extension and
+ calls <member>XPackage::revokePakage</member>. The parameter
+ <code>removed</code> indicates this case. The returned object may not
+ rely on the file or folder to which refers <code>url</url>. Instead it
+ must use previously saved data to successfully carry out the revocation
+ of this object (<member>XPackage::revokePackage</member>).
+
+ The implementation must ensure that there is only one instance of
+ <type>XPackage</type> for the same <code>url</code> at any
+ time. Therefore calling <member>bindPackage</member> again with the same
+ <code>url</code> but different <code>mediaType<code> (the exeption is,
+ if previsously an empty string was proveded to cause the determination
+ of the media type) or <code>removed</code> parameters will cause an
+ exception. An <type
+ scope="com::sun::star::lang">IllegalArgumentException</type> will be
+ thrown in case of a different <code>mediaType</code> parameter and a
+ <type>InvalidRemovedParameterException</type> is thrown if the
+ <code>removed</code> parameter is different.
+
+ The <code>identifier</code> parameter must be provided when
+ <code>removed</code> = true. If not, then an <type
+ scope="com::sun::star::lang">IllegalArgumentException</type> will be
+ thrown.
+
@param url
package URL, must be UCB conform
@param mediaType
media type of package, empty string if to be detected
+ @param removed
+
+ @para unfulfilledPrerequisites
+ has a value other null if the extension could not be installed previously
+ because <member>XPackage::checkPrerequisites</member> failed.
+
+ @param identifier
+ the identifier of the extension
+
@param xCmdEnv
command environment for error and progress handling
@return
@@ -58,8 +101,11 @@ interface XPackageRegistry
XPackage bindPackage(
[in] string url,
[in] string mediaType,
+ [in] boolean removed,
+ [in] string identifier,
[in] com::sun::star::ucb::XCommandEnvironment xCmdEnv )
raises (DeploymentException,
+ InvalidRemovedParameterException,
com::sun::star::ucb::CommandFailedException,
com::sun::star::lang::IllegalArgumentException);
diff --git a/offapi/com/sun/star/deployment/XPackageTypeInfo.idl b/offapi/com/sun/star/deployment/XPackageTypeInfo.idl
index 2f53d003c315..7252f73d200b 100644
--- a/offapi/com/sun/star/deployment/XPackageTypeInfo.idl
+++ b/offapi/com/sun/star/deployment/XPackageTypeInfo.idl
@@ -29,7 +29,7 @@
#define INCLUDED_com_sun_star_deployment_XPackageTypeInfo_idl
#include <com/sun/star/uno/XInterface.idl>
-
+#include <com/sun/star/deployment/ExtensionRemovedException.idl>
module com { module sun { module star { module deployment {
@@ -52,7 +52,8 @@ interface XPackageTypeInfo
@return
description
*/
- string getDescription();
+ string getDescription()
+ raises (ExtensionRemovedException);
/** returns a short description string to describe a package type
(one line only).
@@ -60,7 +61,8 @@ interface XPackageTypeInfo
@return
description
*/
- string getShortDescription();
+ string getShortDescription()
+ raises (ExtensionRemovedException);
/** returns a file filter string for the file picker user interface.
Both, the short description string and file filter string
diff --git a/offapi/com/sun/star/deployment/makefile.mk b/offapi/com/sun/star/deployment/makefile.mk
index fef835e62f31..1e3a77b89573 100644
--- a/offapi/com/sun/star/deployment/makefile.mk
+++ b/offapi/com/sun/star/deployment/makefile.mk
@@ -35,25 +35,29 @@ PACKAGE = com$/sun$/star$/deployment
.INCLUDE : $(PRJ)$/util$/makefile.pmk
IDLFILES = \
- DeploymentException.idl \
- XPackageTypeInfo.idl \
- XPackage.idl \
- XPackageRegistry.idl \
- PackageRegistryBackend.idl \
- XPackageManager.idl \
- XPackageManagerFactory.idl \
- thePackageManagerFactory.idl \
- DependencyException.idl \
- LicenseException.idl \
- VersionException.idl \
- InstallException.idl \
- UpdateInformationEntry.idl \
- XUpdateInformationProvider.idl \
- UpdateInformationProvider.idl \
- XPackageInformationProvider.idl \
- PackageInformationProvider.idl \
- LicenseIndividualAgreementException.idl \
- PlatformException.idl
+ DeploymentException.idl \
+ XPackageTypeInfo.idl \
+ XPackage.idl \
+ XPackageRegistry.idl \
+ PackageRegistryBackend.idl \
+ XPackageManager.idl \
+ XPackageManagerFactory.idl \
+ XExtensionManager.idl \
+ ExtensionManager.idl \
+ thePackageManagerFactory.idl \
+ DependencyException.idl \
+ LicenseException.idl \
+ VersionException.idl \
+ InstallException.idl \
+ UpdateInformationEntry.idl \
+ XUpdateInformationProvider.idl \
+ UpdateInformationProvider.idl \
+ XPackageInformationProvider.idl \
+ PackageInformationProvider.idl \
+ PlatformException.idl \
+ InvalidRemovedParameterException.idl \
+ ExtensionRemovedException.idl \
+ Prerequisites.idl
.INCLUDE : target.mk
.INCLUDE : $(PRJ)$/util$/target.pmk
diff --git a/offapi/com/sun/star/deployment/thePackageManagerFactory.idl b/offapi/com/sun/star/deployment/thePackageManagerFactory.idl
index 612eae1e2513..85e95acea598 100644
--- a/offapi/com/sun/star/deployment/thePackageManagerFactory.idl
+++ b/offapi/com/sun/star/deployment/thePackageManagerFactory.idl
@@ -43,6 +43,8 @@ module com { module sun { module star { module deployment {
</p>
@since OOo 2.0.0
+ @deprecated
+ Use <type>XExtensionManager</type>.
*/
singleton thePackageManagerFactory : XPackageManagerFactory;
diff --git a/offapi/com/sun/star/deployment/ui/LicenseDialog.idl b/offapi/com/sun/star/deployment/ui/LicenseDialog.idl
index 64295b60a476..308b5b5b9814 100644
--- a/offapi/com/sun/star/deployment/ui/LicenseDialog.idl
+++ b/offapi/com/sun/star/deployment/ui/LicenseDialog.idl
@@ -45,10 +45,14 @@ service LicenseDialog : com::sun::star::ui::dialogs::XExecutableDialog
@param xParent
parent window
+
+ @param extensionName
+ the display name of the extension
@param licenseText
text to be displayed
*/
create( [in] com::sun::star::awt::XWindow xParent,
+ [in] string extensionName,
[in] string licenseText );
};
diff --git a/offapi/com/sun/star/document/MediaDescriptor.idl b/offapi/com/sun/star/document/MediaDescriptor.idl
index 89a3141a443d..36da721cc159 100644
--- a/offapi/com/sun/star/document/MediaDescriptor.idl
+++ b/offapi/com/sun/star/document/MediaDescriptor.idl
@@ -141,6 +141,11 @@ published service MediaDescriptor
for a special component type. Format of that depends from real
type of adressed component.
</p>
+
+ <p>
+ For extensibility, it is recommended to use values of type
+ sequence<com.sun.star.beans.PropertyValue> with this property.
+ </p>
*/
[optional,property] any ComponentData;
diff --git a/offapi/com/sun/star/embed/XVisualObject.idl b/offapi/com/sun/star/embed/XVisualObject.idl
index bed94da4fa7d..158c49851a6f 100644
--- a/offapi/com/sun/star/embed/XVisualObject.idl
+++ b/offapi/com/sun/star/embed/XVisualObject.idl
@@ -71,13 +71,13 @@ published interface XVisualObject: ::com::sun::star::uno::XInterface
</p>
@param nAspect
- the aspect specifying the form of object representation
- can take values from <type>Aspects</type> constant set
+ the aspect specifying the form of object representation.
+ Can take values from <type>Aspects</type> constant set.
@param aSize
the new size of the visual area
- @thrown ::com::sun::star::lang::IllegalArgumentException
+ @throws ::com::sun::star::lang::IllegalArgumentException
one of arguments is illegal
@throws ::com::sun::star::embed::WrongStateException
@@ -101,13 +101,13 @@ published interface XVisualObject: ::com::sun::star::uno::XInterface
</p>
@param nAspect
- the aspect specifying the form of object representation
- can take values from <type>Aspects</type> constant set
+ the aspect specifying the form of object representation.
+ Can take values from <type>Aspects</type> constant set.
@return
the size of visual area
- @thrown ::com::sun::star::lang::IllegalArgumentException
+ @throws ::com::sun::star::lang::IllegalArgumentException
one of arguments is illegal
@throws ::com::sun::star::embed::WrongStateException
@@ -127,7 +127,8 @@ published interface XVisualObject: ::com::sun::star::uno::XInterface
</p>
@param nAspect
- the aspect the representation is requested for
+ the aspect the representation is requested for.
+ Can take values from <type>Aspects</type> constant set.
@return
the visual representation of the object in the default format and
@@ -153,7 +154,8 @@ published interface XVisualObject: ::com::sun::star::uno::XInterface
/** retrieves map mode the object communicates in.
@param nAspect
- the aspect the map mode is requested for
+ the aspect the map mode is requested for.
+ Can take values from <type>Aspects</type> constant set.
@return
the map mode the object communicates in, it can take values from
diff --git a/offapi/com/sun/star/script/XLibraryContainer3.idl b/offapi/com/sun/star/script/XLibraryContainer3.idl
new file mode 100644
index 000000000000..cb3f2a5e0f6c
--- /dev/null
+++ b/offapi/com/sun/star/script/XLibraryContainer3.idl
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * 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: XLibraryContainer2.idl,v $
+ * $Revision: 1.5 $
+ *
+ * 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 __com_sun_star_script_XLibraryContainer3_idl__
+#define __com_sun_star_script_XLibraryContainer3_idl__
+
+#ifndef __com_sun_star_script_XLibraryContainer2_idl__
+#include <com/sun/star/script/XLibraryContainer2.idl>
+#endif
+
+
+//=============================================================================
+
+ module com { module sun { module star { module script {
+
+//=============================================================================
+
+/**
+ Extension of <type>XLibraryContainer2</type>.
+ */
+published interface XLibraryContainer3: com::sun::star::script::XLibraryContainer2
+{
+
+ /**
+ returns the location of the library link target.
+
+ The returned URL is literally the same as the one provided in
+ <member>XLibraryContainer::createLibraryLink</member>. Otherwise the behavior
+ is the same as <member>XLibraryContainer2::getLibraryLinkURL</member>
+ */
+ string getOriginalLibraryLinkURL( [in] string Name )
+ raises( com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::container::NoSuchElementException );
+
+
+};
+
+//=============================================================================
+
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/script/makefile.mk b/offapi/com/sun/star/script/makefile.mk
index b694a753f7d7..24d5fcc83af4 100644
--- a/offapi/com/sun/star/script/makefile.mk
+++ b/offapi/com/sun/star/script/makefile.mk
@@ -43,6 +43,7 @@ IDLFILES=\
LibraryNotLoadedException.idl\
XLibraryContainer.idl\
XLibraryContainer2.idl\
+ XLibraryContainer3.idl\
XLibraryContainerPassword.idl\
XLibraryContainerExport.idl\
XPersistentLibraryContainer.idl\
diff --git a/offapi/com/sun/star/sheet/FunctionAccess.idl b/offapi/com/sun/star/sheet/FunctionAccess.idl
index aae5aa2c1196..0bce84d3627d 100644
--- a/offapi/com/sun/star/sheet/FunctionAccess.idl
+++ b/offapi/com/sun/star/sheet/FunctionAccess.idl
@@ -59,6 +59,32 @@ published service FunctionAccess
*/
interface com::sun::star::sheet::XFunctionAccess;
+ //-------------------------------------------------------------------------
+
+ /** specifies whether the function call is performed as array function
+ call.
+
+ <p>If set to <TRUE/>, the result of the function call will be
+ calculated similar to array formulas in a spreadsheet document. The
+ return value of the function call will usually be a sequence of
+ sequences containing the values of the resulting array. Example: If the
+ function ABS is called for a 3x2 cell range, the result will be a 3x2
+ array containing the absolute values of the numbers contained in the
+ specified cell range.</p>
+
+ <p>If set to <FALSE/>, the result of the function call will be
+ calculated similar to simple cell formulas in a spreadsheet document.
+ The return value of the function call will usually be a single value.
+ Of course, some functions always return an array, for example the
+ MUNIT function.</p>
+
+ <p>For compatibility with older versions, the default value of this
+ property is <TRUE/>.</p>
+
+ @since OOo 3.3
+ */
+ [optional, property] boolean IsArrayFunction;
+
};
//=============================================================================
diff --git a/svtools/source/dialogs/logindlg.hrc b/offapi/com/sun/star/sheet/NoConvergenceException.idl
index 7baf6010f531..b427b67f28ea 100644
--- a/svtools/source/dialogs/logindlg.hrc
+++ b/offapi/com/sun/star/sheet/NoConvergenceException.idl
@@ -25,33 +25,28 @@
*
************************************************************************/
+#ifndef __com_sun_star_sheet_NoConvergenceException_idl__
+#define __com_sun_star_sheet_NoConvergenceException_idl__
-#ifndef _SVTOOLS_LOGINDLG_HRC_
-#define _SVTOOLS_LOGINDLG_HRC_
-
-//============================================================================
-#define INFO_LOGIN_ERROR 10
-#define GB_LOGIN_ERROR 11
-
-#define INFO_LOGIN_REQUEST 20
-#define FT_LOGIN_PATH 21
-#define ED_LOGIN_PATH 22
-#define INFO_LOGIN_PATH 23
-#define BTN_LOGIN_PATH 24
-#define FT_LOGIN_USERNAME 25
-#define ED_LOGIN_USERNAME 26
-#define INFO_LOGIN_USERNAME 27
-#define FT_LOGIN_PASSWORD 28
-#define ED_LOGIN_PASSWORD 29
-#define FT_LOGIN_ACCOUNT 30
-#define ED_LOGIN_ACCOUNT 31
-#define CB_LOGIN_SAVEPASSWORD 32
-#define GB_LOGIN_LOGIN 33
-
-#define BTN_LOGIN_OK 50
-#define BTN_LOGIN_CANCEL 51
-#define BTN_LOGIN_HELP 52
-
-#define STR_LOGIN_AT 60
-
-#endif // _SVTOOLS_LOGINDLG_HRC_
+#ifndef __com_sun_star_uno_Exception_idl__
+#include <com/sun/star/uno/Exception.idl>
+#endif
+
+//=============================================================================
+
+module com { module sun { module star { module sheet {
+
+//=============================================================================
+
+/** Thrown by a Calc Add-In function this exception indicates the
+ function's algorithm did not converge to a meaningful result.
+
+ @since OOo 3.3
+ */
+exception NoConvergenceException : ::com::sun::star::uno::Exception{};
+
+//=============================================================================
+}; }; }; };
+//=============================================================================
+
+#endif
diff --git a/offapi/com/sun/star/sheet/Spreadsheet.idl b/offapi/com/sun/star/sheet/Spreadsheet.idl
index 40361659dd9f..0b21a050d099 100644
--- a/offapi/com/sun/star/sheet/Spreadsheet.idl
+++ b/offapi/com/sun/star/sheet/Spreadsheet.idl
@@ -96,6 +96,8 @@
#include <com/sun/star/sheet/XExternalSheetName.idl>
#endif
+#include <com/sun/star/util/Color.idl>
+
//=============================================================================
module com { module sun { module star { module sheet {
@@ -264,6 +266,9 @@ service Spreadsheet
*/
[optional, property] boolean AutomaticPrintArea;
+ /** specifies the color of the sheet tab, if any.
+ */
+ [optional, property] com::sun::star::util::Color TabColor;
};
//=============================================================================
diff --git a/offapi/com/sun/star/sheet/makefile.mk b/offapi/com/sun/star/sheet/makefile.mk
index dc1935ba2299..016378178f29 100644
--- a/offapi/com/sun/star/sheet/makefile.mk
+++ b/offapi/com/sun/star/sheet/makefile.mk
@@ -164,6 +164,7 @@ IDLFILES=\
NamedRangeFlag.idl\
NamedRanges.idl\
NamedRangesEnumeration.idl\
+ NoConvergenceException.idl\
PasteOperation.idl\
RangeSelectionArguments.idl\
RangeSelectionEvent.idl\
diff --git a/offapi/com/sun/star/style/NumberingType.idl b/offapi/com/sun/star/style/NumberingType.idl
index 1386305cd3dc..25094b1ed677 100644
--- a/offapi/com/sun/star/style/NumberingType.idl
+++ b/offapi/com/sun/star/style/NumberingType.idl
@@ -121,6 +121,7 @@ published constants NumberingType
//-------------------------------------------------------------------------
/** Numbering for Chinese lower case number
+ as "一,二,三..."
*/
const short NUMBER_LOWER_ZH = 15;
@@ -136,11 +137,13 @@ published constants NumberingType
//-------------------------------------------------------------------------
/** Bullet for Chinese Tian Gan
+ as "甲,乙,丙..."
*/
const short TIAN_GAN_ZH = 18;
//-------------------------------------------------------------------------
/** Bullet for Chinese Di Zi
+ as "子,丑,寅..."
*/
const short DI_ZI_ZH = 19;
@@ -171,36 +174,43 @@ published constants NumberingType
//-------------------------------------------------------------------------
/** Numbering for Korean upper case number
+ as "壹,貳,參..."
*/
const short NUMBER_UPPER_KO = 25;
//-------------------------------------------------------------------------
/** Numbering for Korean hangul number
+ as "일,이,삼..."
*/
const short NUMBER_HANGUL_KO = 26;
//-------------------------------------------------------------------------
/** Bullet for Korean Hangul Jamo
+ as "ㄱ,ㄴ,ㄷ..."
*/
const short HANGUL_JAMO_KO = 27;
//-------------------------------------------------------------------------
/** Bullet for Korean Hangul Syllable
+ as "가,나,다..."
*/
const short HANGUL_SYLLABLE_KO = 28;
//-------------------------------------------------------------------------
/** Bullet for Korean Hangul Circled Jamo
+ as "㉠,㉡,㉢..."
*/
const short HANGUL_CIRCLED_JAMO_KO = 29;
//-------------------------------------------------------------------------
/** Bullet for Korean Hangul Circled Syllable
+ as "㉮,㉯,㉰..."
*/
const short HANGUL_CIRCLED_SYLLABLE_KO = 30;
//-------------------------------------------------------------------------
/** Numbering in Arabic alphabet letters
+ as "أ,ب,ت..."
@since OOo 1.1.2
*/
diff --git a/offapi/com/sun/star/task/DocumentMSPasswordRequest2.idl b/offapi/com/sun/star/task/DocumentMSPasswordRequest2.idl
new file mode 100755
index 000000000000..94ce75683dea
--- /dev/null
+++ b/offapi/com/sun/star/task/DocumentMSPasswordRequest2.idl
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright IBM Corporation 2009.
+ * Copyright 2009 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: DocumentMSPasswordRequest.idl,v $
+ * $Revision: 1.0 $
+ *
+ * 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 __com_sun_star_task_DocumentMSPasswordRequest2_idl__
+#define __com_sun_star_task_DocumentMSPasswordRequest2_idl__
+
+#include <com/sun/star/task/DocumentMSPasswordRequest.idl>
+
+
+//=============================================================================
+
+module com { module sun { module star { module task {
+
+//=============================================================================
+/** this request specifies if a password for opening or modifying of an encrypted Microsoft Office document is requested.
+
+ <P>
+ It is supported by <type>InteractionHandler</type> service, and can
+ be used to interact for a document password. Continuations for using with
+ the mentioned service are Abort and Approve.
+ </P>
+
+ @see com::sun::star::task::PasswordRequest
+ @see com::sun::star::task::DocumentMSPasswordRequest
+
+ @since OOo 3.3
+*/
+exception DocumentMSPasswordRequest2 : DocumentMSPasswordRequest
+{
+ //-------------------------------------------------------------------------
+ /** specifies if the requested password is for opening a document or for mofiying it.
+ */
+ boolean IsRequestPasswordToModify;
+
+};
+
+//=============================================================================
+
+}; }; }; };
+
+#endif
diff --git a/offapi/com/sun/star/task/DocumentPasswordRequest2.idl b/offapi/com/sun/star/task/DocumentPasswordRequest2.idl
new file mode 100755
index 000000000000..0f49e29255f0
--- /dev/null
+++ b/offapi/com/sun/star/task/DocumentPasswordRequest2.idl
@@ -0,0 +1,67 @@
+/*************************************************************************
+ *
+ * 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: DocumentPasswordRequest.idl,v $
+ * $Revision: 1.8 $
+ *
+ * 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 __com_sun_star_task_DocumentPasswordRequest2_idl__
+#define __com_sun_star_task_DocumentPasswordRequest2_idl__
+
+#include <com/sun/star/task/DocumentPasswordRequest.idl>
+
+
+//=============================================================================
+
+module com { module sun { module star { module task {
+
+//=============================================================================
+/** this request specifies if a password for opening or modifying a document is requested.
+
+ <P>
+ It is supported by <type>InteractionHandler</type> service, and can
+ be used to interact for a document password. Continuations for using with
+ the mentioned service are Abort and Approve.
+ </P>
+
+ @see com::sun::star::task::PasswordRequest
+ @see com::sun::star::task::DocumentPasswordRequest
+
+ @since OOo 3.3
+*/
+exception DocumentPasswordRequest2 : DocumentPasswordRequest
+{
+ //-------------------------------------------------------------------------
+ /** specifies if the requested password is for opening a document or for mofiying it.
+ */
+ boolean IsRequestPasswordToModify;
+
+};
+
+//=============================================================================
+
+}; }; }; };
+
+#endif
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcConstants.java b/offapi/com/sun/star/task/OfficeRestartManager.idl
index 7c9fff61a2e6..9205992d169f 100644
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcConstants.java
+++ b/offapi/com/sun/star/task/OfficeRestartManager.idl
@@ -1,4 +1,4 @@
-/************************************************************************
+/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -25,26 +25,29 @@
*
************************************************************************/
+#ifndef __com_sun_star_task_OfficeRestartManager_idl__
+#define __com_sun_star_task_OfficeRestartManager_idl__
-package org.openoffice.xmerge.converter.xml.sxc;
+//=============================================================================
+module com { module sun { module star { module task {
-/**
- * Interface defining constants for Sxc attributes.
- *
- * @author Martin Maher
+interface XRestartManager;
+
+//=============================================================================
+
+/** This singleton is intended to allow to restart the office asynchronously.
+
+ @since OOo 3.3
*/
-public interface SxcConstants {
+singleton OfficeRestartManager : XRestartManager;
+
+//=============================================================================
+
+}; }; }; };
- /** Family name for column styles. */
- public static final String COLUMN_STYLE_FAMILY = "table-column";
+//=============================================================================
- /** Family name for row styles. */
- public static final String ROW_STYLE_FAMILY = "table-row";
- /** Family name for table-cell styles. */
- public static final String TABLE_CELL_STYLE_FAMILY = "table-cell";
+#endif
- /** Name of the default style. */
- public static final String DEFAULT_STYLE = "Default";
-}
diff --git a/offapi/com/sun/star/task/XInteractionPassword2.idl b/offapi/com/sun/star/task/XInteractionPassword2.idl
new file mode 100644
index 000000000000..925f96f30e5a
--- /dev/null
+++ b/offapi/com/sun/star/task/XInteractionPassword2.idl
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * 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: XInteractionPassword.idl,v $
+ * $Revision: 1.8 $
+ *
+ * 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 __com_sun_star_task_XInteractionPassword2_idl__
+#define __com_sun_star_task_XInteractionPassword2_idl__
+
+#ifndef __com_sun_star_task_XInteractionPassword_idl__
+#include <com/sun/star/task/XInteractionPassword.idl>
+#endif
+
+//=============================================================================
+
+module com { module sun { module star { module task {
+
+//=============================================================================
+/** A continuation to get a password from interaction helper, extends
+ <type>XInteractionPassword</type> with possibility to provide password
+ to modify.
+
+ @since OOo 3.3
+*/
+published interface XInteractionPassword2 : ::com::sun::star::task::XInteractionPassword
+{
+ //-------------------------------------------------------------------------
+ /** stores "password to modify" to the continuation.
+ */
+ void setPasswordToModify( [in] string aPasswd );
+
+ //-------------------------------------------------------------------------
+ /** gets "password to modify" from the continuation.
+ */
+ string getPasswordToModify();
+
+ //-------------------------------------------------------------------------
+ /** stores "recommend readonly" to the continuation. It specifies whether
+ the document should be loaded readonly per default.
+ */
+ void setRecommendReadOnly( [in] boolean bReadOnly );
+
+ //-------------------------------------------------------------------------
+ /** gets "recommend readonly" from the continuation. It specifies whether
+ the document should be loaded readonly per default.
+ */
+ boolean getRecommendReadOnly();
+
+
+};
+
+//=============================================================================
+
+}; }; }; };
+
+#endif
+
diff --git a/offapi/com/sun/star/task/XRestartManager.idl b/offapi/com/sun/star/task/XRestartManager.idl
new file mode 100644
index 000000000000..102a1044d2e8
--- /dev/null
+++ b/offapi/com/sun/star/task/XRestartManager.idl
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 __com_sun_star_task_XRestartManager_idl__
+#define __com_sun_star_task_XRestartManager_idl__
+
+#ifndef __com_sun_star_uno_XInterface_idl__
+#include <com/sun/star/uno/XInterface.idl>
+#endif
+
+#ifndef __com_sun_star_task_XInteractionHandler_idl__
+#include <com/sun/star/task/XInteractionHandler.idl>
+#endif
+
+#ifndef __com_sun_star_uno_Exception_idl__
+#include <com/sun/star/uno/Exception.idl>
+#endif
+
+//============================================================================
+
+module com { module sun { module star { module task {
+
+//=============================================================================
+/** allows to try to restart the office.
+
+ @since OOo3.3
+*/
+published interface XRestartManager : com::sun::star::uno::XInterface
+{
+ //------------------------------------------------------------------------
+ /** let the office restart asynchronously
+ @param xInteractionHandler
+ the <type scope="com::sun::star::task">InteractionHandler</type>
+ service implementation, that is used in case a problem is detected
+ during requesting the restart.
+
+ @throws com::sun::star::uno::Exception
+ to notify the caller about possible failures
+ */
+ void requestRestart(
+ [in] com::sun::star::task::XInteractionHandler xInteractionHandler )
+ raises( com::sun::star::uno::Exception );
+
+ //------------------------------------------------------------------------
+ /** allows to get info whether the restart has been requested and provide
+ the initialization status.
+
+ <p>
+ The office has to call this method just before the main loop has been
+ started, with the <TRUE/> as argument, so that the implementation
+ knows that the office is initialized. If the method returns <TRUE/>,
+ the office should restart without starting the main loop.
+ </p>
+
+ @param bInitialized
+ specifies whether the office process is initialized already,
+ if the caller does not have this information, he should provide
+ <FALSE/>.
+
+ @returns
+ <TRUE/> if the office restart has been requested,
+ <FALSE/> otherwise
+
+ @throws com::sun::star::uno::Exception
+ to notify the caller about possible failures
+ */
+ boolean isRestartRequested(
+ [in] boolean bInitialized )
+ raises( com::sun::star::uno::Exception );
+};
+
+}; }; }; };
+
+#endif
+
diff --git a/offapi/com/sun/star/task/makefile.mk b/offapi/com/sun/star/task/makefile.mk
index 3b622b469b63..16b0be56e36c 100644..100755
--- a/offapi/com/sun/star/task/makefile.mk
+++ b/offapi/com/sun/star/task/makefile.mk
@@ -42,7 +42,9 @@ IDLFILES=\
ClassifiedInteractionRequest.idl\
DocumentMacroConfirmationRequest.idl\
DocumentPasswordRequest.idl\
+ DocumentPasswordRequest2.idl\
DocumentMSPasswordRequest.idl\
+ DocumentMSPasswordRequest2.idl\
ErrorCodeRequest.idl\
ErrorCodeIOException.idl\
FutureDocumentVersionProductUpdateRequest.idl\
@@ -57,6 +59,7 @@ IDLFILES=\
PasswordContainerInteractionHandler.idl\
PasswordRequest.idl\
PasswordRequestMode.idl\
+ OfficeRestartManager.idl\
UnsupportedOverwriteRequest.idl\
UrlRecord.idl\
UserRecord.idl\
@@ -65,12 +68,14 @@ IDLFILES=\
XInteractionAskLater.idl\
XInteractionDisapprove.idl\
XInteractionPassword.idl\
+ XInteractionPassword2.idl\
XJob.idl\
XJobExecutor.idl\
XJobListener.idl\
XMasterPasswordHandling.idl\
XMasterPasswordHandling2.idl\
XPasswordContainer.idl\
+ XRestartManager.idl\
XStatusIndicator.idl\
XStatusIndicatorFactory.idl\
XStatusIndicatorSupplier.idl\
diff --git a/officecfg/registry/data/org/openoffice/Office/Common.xcu b/officecfg/registry/data/org/openoffice/Office/Common.xcu
index 03e37b72f9ad..b7c019f24c28 100644
--- a/officecfg/registry/data/org/openoffice/Office/Common.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Common.xcu
@@ -157,6 +157,11 @@
<value install:module="wnt">WIN</value>
</prop>
</node>
+ <node oor:name="Dictionaries">
+ <prop oor:name="RepositoryURL" install:module="brand">
+ <value>${DICT_REPO_URL}</value>
+ </prop>
+ </node>
<node oor:name="AutoCorrect">
<prop oor:name="ReplaceSingleQuote" install:module="korea">
<value>true</value>
diff --git a/officecfg/registry/data/org/openoffice/Office/Paths.xcu b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
index a7ecd0e224e8..91a26137b24d 100644
--- a/officecfg/registry/data/org/openoffice/Office/Paths.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Paths.xcu
@@ -98,7 +98,13 @@
</node>
</node>
- <node oor:name="Gallery" oor:op="fuse" oor:mandatory="true">
+ <node oor:name="Libraries" oor:op="fuse" oor:mandatory="true">
+ <node oor:name="InternalPaths">
+ <node oor:name="$(progpath)/libraries" oor:op="fuse" />
+ </node>
+ </node>
+
+ <node oor:name="Gallery" oor:op="fuse" oor:mandatory="true">
<node oor:name="InternalPaths">
<node oor:name="$(insturl)/share/gallery" oor:op="fuse" />
</node>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
index d3db05206a6a..33e5109405d0 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/CalcCommands.xcu
@@ -1254,6 +1254,19 @@
<value xml:lang="en-US">Rename Sheet</value>
</prop>
</node>
+ <node oor:name=".uno:SetTabBgColor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">~Tab Color...</value>
+ </prop>
+ <prop oor:name="ContextLabel" oor:type="xs:string">
+ <value xml:lang="en-US">~Tab Color...</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:TabBgColor" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Tab Color</value>
+ </prop>
+ </node>
<node oor:name=".uno:Move" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">~Move/Copy Sheet...</value>
diff --git a/officecfg/registry/data/org/openoffice/VCL.xcu b/officecfg/registry/data/org/openoffice/VCL.xcu
index 33e5c9f26f2f..575c0aba053b 100644
--- a/officecfg/registry/data/org/openoffice/VCL.xcu
+++ b/officecfg/registry/data/org/openoffice/VCL.xcu
@@ -547,22 +547,22 @@
</node>
<node oor:name="zh-cn" oor:op="replace">
<prop oor:name="CJK_DISPLAY" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;MSung Light SC;SimSun;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正宋体;MSung Light SC;SimSun;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="LATIN_FIXED" oor:type="xs:string" oor:op="replace">
<value>方正宋体;新宋体;NSimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="CJK_HEADING" oor:type="xs:string" oor:op="replace">
- <value>方正黑体;方正宋体;宋体;SimSun;黑体;文鼎PL中楷Uni;AR PL ZenKai Uni;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正黑体;方正宋体;宋体;SimSun;黑体;文鼎PL中楷Uni;AR PL ZenKai Uni;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_PRESENTATION" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_SPREADSHEET" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_TEXT" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>方正宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Song;FZSongYi;FZShuSong;NSimSun;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="UI_FIXED" oor:type="xs:string" oor:op="replace">
<value>方正宋体;新宋体;NSimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
@@ -571,7 +571,7 @@
<value>方正宋体;新宋体;NSimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light SC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="UI_SANS" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;ZYSong18030;AR PL SungtiL GB;AR PL KaitiM GB;SimSun;Arial Unicode MS;Fangsong;Hei;Song;Kai;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
+ <value>方正宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;ZYSong18030;AR PL SungtiL GB;AR PL KaitiM GB;SimSun;Arial Unicode MS;Fangsong;Hei;Song;Kai;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
</prop>
</node>
<node oor:name="zh-tw" oor:op="replace">
@@ -579,19 +579,19 @@
<value>方正明體;細明體;MingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="CJK_DISPLAY" oor:type="xs:string" oor:op="replace">
- <value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_HEADING" oor:type="xs:string" oor:op="replace">
<value>方正黑体;新細明體;PMingLiU;文鼎PL中楷Uni;AR PL ZenKai Uni;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_PRESENTATION" oor:type="xs:string" oor:op="replace">
- <value>方正明體;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正明體;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_SPREADSHEET" oor:type="xs:string" oor:op="replace">
- <value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_TEXT" oor:type="xs:string" oor:op="replace">
- <value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="UI_FIXED" oor:type="xs:string" oor:op="replace">
<value>方正明體;細明體;MingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
@@ -600,7 +600,7 @@
<value>方正明體;細明體;MingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="UI_SANS" oor:type="xs:string" oor:op="replace">
- <value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;AR PL Mingti2L Big5;AR PL KaitiM Big5;Kai;Arial Unicode MS;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
+ <value>微软雅黑;方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;AR PL Mingti2L Big5;AR PL KaitiM Big5;Kai;Arial Unicode MS;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
</prop>
</node>
<node oor:name="zh-hk" oor:op="replace">
@@ -608,16 +608,16 @@
<value>方正明體;細明體;MingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="CJK_DISPLAY" oor:type="xs:string" oor:op="replace">
- <value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_HEADING" oor:type="xs:string" oor:op="replace">
- <value>FZHeiTi;方正明體;新細明體;PMingLiU;文鼎PL中楷Uni;AR PL ZenKai Uni;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;FZHeiTi;方正明體;新細明體;PMingLiU;文鼎PL中楷Uni;AR PL ZenKai Uni;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_PRESENTATION" oor:type="xs:string" oor:op="replace">
- <value>方正明體;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正明體;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_SPREADSHEET" oor:type="xs:string" oor:op="replace">
- <value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_TEXT" oor:type="xs:string" oor:op="replace">
<value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;MingLiU;Ming;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
@@ -629,7 +629,7 @@
<value>方正明體;細明體;MingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="UI_SANS" oor:type="xs:string" oor:op="replace">
- <value>方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;AR PL Mingti2L Big5;AR PL KaitiM Big5;Kai;Arial Unicode MS;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
+ <value>微软雅黑;方正明體;新細明體;PMingLiU;文鼎PL細上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;AR PL Mingti2L Big5;AR PL KaitiM Big5;Kai;Arial Unicode MS;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
</prop>
</node>
<node oor:name="zh-sg" oor:op="replace">
@@ -637,19 +637,19 @@
<value>方正宋体;新宋体;NSimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="CJK_DISPLAY" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_HEADING" oor:type="xs:string" oor:op="replace">
- <value>方正黑体;方正宋体;宋体;SimSun;文鼎PL中楷Uni;AR PL ZenKai Uni;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正黑体;方正宋体;宋体;SimSun;文鼎PL中楷Uni;AR PL ZenKai Uni;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_PRESENTATION" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_SPREADSHEET" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="CJK_TEXT" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
+ <value>微软雅黑;方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Song;FZSongYi;FZShuSong;MSung Light TC;MingLiU;Ming;PMingLiU;Andale Sans UI;Arial Unicode MS;Lucida Sans Unicode;Tahoma</value>
</prop>
<prop oor:name="UI_FIXED" oor:type="xs:string" oor:op="replace">
<value>方正宋体;新宋体;NSimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
@@ -658,7 +658,7 @@
<value>方正宋体;新宋体;NSimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;MSung Light TC;Cumberland AMT;Cumberland;Courier New;Nimbus Mono L;Courier;Lucida Sans Typewriter;Lucida Typewriter;Monaco;Monospaced</value>
</prop>
<prop oor:name="UI_SANS" oor:type="xs:string" oor:op="replace">
- <value>方正宋体;宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;ZYSong18030;AR PL SungtiL GB;AR PL KaitiM GB;SimSun;Arial Unicode MS;Fangsong;Hei;Song;Kai;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
+ <value>方正宋体;SimSun;文鼎PL细上海宋Uni;AR PL ShanHeiSun Uni;文鼎PL新宋;AR PL New Sung;Andale Sans UI;ZYSong18030;AR PL SungtiL GB;AR PL KaitiM GB;SimSun;Arial Unicode MS;Fangsong;Hei;Song;Kai;Ming;gnu-unifont;Interface User;WarpSans;Geneva;Tahoma;MS Sans Serif;Helv;Dialog;Albany AMT;Albany;Lucida;Arial;Nimbus Sans L;Helvetica;Charcoal;Chicago;Arial;Helmet;Interface System;Sans Serif</value>
</prop>
</node>
<node oor:name="ko-kr" oor:op="replace">
diff --git a/officecfg/registry/schema/oo-ldap-attr-map.properties b/officecfg/registry/schema/oo-ldap-attr-map.properties
index c67cd5262fd4..684dfbdebfa3 100644
--- a/officecfg/registry/schema/oo-ldap-attr-map.properties
+++ b/officecfg/registry/schema/oo-ldap-attr-map.properties
@@ -1,4 +1,5 @@
# inetOrgPerson.givenName
+# x-no-translate
org.openoffice.UserProfile/Data/givenname = givenname
# person.sn
diff --git a/officecfg/registry/schema/oo-org-map.properties b/officecfg/registry/schema/oo-org-map.properties
index 1f4b4377677c..dc87a4346ce9 100644
--- a/officecfg/registry/schema/oo-org-map.properties
+++ b/officecfg/registry/schema/oo-org-map.properties
@@ -1,5 +1,6 @@
# attribute and objectclass identifying a user
# multi values are supported, separated by comma
+# x-no-translate
User/ObjectClass=inetorgperson
User/NamingAttribute=uid
User/Container=ou=People
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index cb19bb01e1ba..02e05a932952 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -974,6 +974,19 @@
<value>false</value>
</prop>
</group>
+ <group oor:name="Dictionaries">
+ <info>
+ <author>CD</author>
+ <desc>Contains settings related to dictionaries.</desc>
+ </info>
+ <prop oor:name="RepositoryURL" oor:type="xs:string">
+ <info>
+ <author>CD</author>
+ <desc>Specifies a repository URL where users can download additional dictionaries.</desc>
+ </info>
+ <value/>
+ </prop>
+ </group>
<group oor:name="Drawinglayer">
<info>
<author>AW</author>
diff --git a/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs b/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
index 7cb13b70700c..8762f839b781 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Linguistic.xcs
@@ -252,7 +252,7 @@
<desc>Specifies the custom dictionaries to be used. The Ignore list (IgnoreAllList (All)) is administered in the RAM only for the current spellcheck.</desc>
<label>Custom dictionaries</label>
</info>
- <value oor:separator=";">IgnoreAllList;soffice.dic;standard.dic;sun.dic</value>
+ <value oor:separator=";">IgnoreAllList;soffice.dic;standard.dic;oracle.dic</value>
</prop>
<prop oor:name="IsUseDictionaryList" oor:type="xs:boolean">
<!-- OldLocation: NEW -->
diff --git a/officecfg/registry/schema/org/openoffice/Office/OOoImprovement/Settings.xcs b/officecfg/registry/schema/org/openoffice/Office/OOoImprovement/Settings.xcs
index 7ff91464727d..7b0b221f15a9 100755
--- a/officecfg/registry/schema/org/openoffice/Office/OOoImprovement/Settings.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/OOoImprovement/Settings.xcs
@@ -15,7 +15,7 @@
OpenOffice.org Improvement Program. If this is zero the user will get asked.
</desc>
</info>
- <value>1</value>
+ <value>2</value>
</prop>
<prop oor:name="InvitationAccepted" oor:type="xs:boolean">
<info>
diff --git a/oovbaapi/ooo/vba/XApplicationBase.idl b/oovbaapi/ooo/vba/XApplicationBase.idl
index b42e456bd7eb..7f59ddb75247 100644
--- a/oovbaapi/ooo/vba/XApplicationBase.idl
+++ b/oovbaapi/ooo/vba/XApplicationBase.idl
@@ -38,19 +38,27 @@
module ooo { module vba {
//=============================================================================
+
+
interface XApplicationBase
{
interface ::ooo::vba::XHelperInterface;
[attribute] boolean ScreenUpdating;
[attribute] boolean DisplayStatusBar;
+ [attribute] boolean Interactive;
[attribute, readonly] string Version;
+ //mbn
+ [attribute, readonly] any VBE;
+ [attribute, readonly] any VBProjects;
void Quit();
any CommandBars( [in] any aIndex );
void Run([in] string MacroName, [in] /*Optional*/ any varg1, [in] /*Optional*/ any varg2, [in] /*Optional*/ any varg3, [in] /*Optional*/ any varg4, [in] /*Optional*/ any varg5, [in] /*Optional*/ any varg6, [in] /*Optional*/ any varg7, [in] /*Optional*/ any varg8, [in] /*Optional*/ any varg9, [in] /*Optional*/ any varg10, [in] /*Optional*/ any varg11, [in] /*Optional*/ any varg12, [in] /*Optional*/ any varg13, [in] /*Optional*/ any varg14, [in] /*Optional*/ any varg15, [in] /*Optional*/ any varg16, [in] /*Optional*/ any varg17, [in] /*Optional*/ any varg18, [in] /*Optional*/ any varg19, [in] /*Optional*/ any varg20, [in] /*Optional*/ any varg21, [in] /*Optional*/ any varg22, [in] /*Optional*/ any varg23, [in] /*Optional*/ any varg24, [in] /*Optional*/ any varg25, [in] /*Optional*/ any varg26, [in] /*Optional*/ any varg27, [in] /*Optional*/ any varg28, [in] /*Optional*/ any varg29, [in] /*Optional*/ any varg30);
+ void OnTime( [in] any aEarliestTime, [in] string aFunction, [in] any aLatestTime, [in] any aSchedule );
float CentimetersToPoints([in] float Centimeters );
+ void Undo();
};
}; };
diff --git a/oovbaapi/ooo/vba/XCollection.idl b/oovbaapi/ooo/vba/XCollection.idl
index 60971034bb5d..63982aab36d6 100644
--- a/oovbaapi/ooo/vba/XCollection.idl
+++ b/oovbaapi/ooo/vba/XCollection.idl
@@ -52,6 +52,7 @@ interface XCollection
interface ::com::sun::star::container::XEnumerationAccess;
[attribute, readonly] long Count;
+
any Item( [in] any Index1, [in] any Index2 );
};
diff --git a/oovbaapi/ooo/vba/XCommandBarControl.idl b/oovbaapi/ooo/vba/XCommandBarControl.idl
index 2f89959cdaa0..7f20a6bf2c3f 100644
--- a/oovbaapi/ooo/vba/XCommandBarControl.idl
+++ b/oovbaapi/ooo/vba/XCommandBarControl.idl
@@ -48,6 +48,7 @@ interface XCommandBarControl
[attribute] boolean Visible;
[attribute, readonly] long Type;
[attribute] boolean Enabled;
+ [attribute] boolean BeginGroup;
void Delete() raises ( com::sun::star::script::BasicErrorException );
any Controls( [in] any Index ) raises ( com::sun::star::script::BasicErrorException );
diff --git a/oovbaapi/ooo/vba/XDocumentBase.idl b/oovbaapi/ooo/vba/XDocumentBase.idl
index 12cb931987d6..a4ee8b4366c6 100644
--- a/oovbaapi/ooo/vba/XDocumentBase.idl
+++ b/oovbaapi/ooo/vba/XDocumentBase.idl
@@ -38,6 +38,8 @@
module ooo { module vba {
//=============================================================================
+
+
interface XDocumentBase
{
interface ::ooo::vba::XHelperInterface;
@@ -46,6 +48,7 @@ interface XDocumentBase
[attribute, readonly] string Path;
[attribute, readonly] string FullName;
[attribute] boolean Saved;
+ [attribute, readonly] any VBProject; // Michael E. Bohn
void Close([in] any SaveChanges, [in] any FileName, [in] any RouteWorkBook);
void Save();
diff --git a/oovbaapi/ooo/vba/XVBAAppService.idl b/oovbaapi/ooo/vba/XVBAAppService.idl
new file mode 100755
index 000000000000..1c4a0920fbf8
--- /dev/null
+++ b/oovbaapi/ooo/vba/XVBAAppService.idl
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * 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: XWorkbook.idl,v $
+ * $Revision: 1.4 $
+ *
+ * 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 __ooo_vba_appservice_idl__
+#define __ooo_vba_appservice_idl__
+
+#ifndef __com_sun_star_uno_XInterface_idl__
+#include <com/sun/star/uno/XInterface.idl>
+#endif
+
+#ifndef __com_sun_star_uno_XComponentContext_idl__
+#include <com/sun/star/uno/XComponentContext.idl>
+#endif
+
+#ifndef __com_sun_star_frame_XModel_idl__
+#include <com/sun/star/frame/XModel.idl>
+#endif
+
+#ifndef __com_sun_star_script_XLibraryContainer_idl__
+#include <com/sun/star/script/XLibraryContainer.idl>
+#endif
+
+//=============================================================================
+
+module ooo { module vba {
+
+//=============================================================================
+
+
+interface XHelperInterface;
+interface XComponentContext;
+interface XModel;
+
+interface XVBAAppService
+{
+ interface ::com::sun::star::uno::XInterface;
+
+ any getVBE([in] XHelperInterface xParent, [in] ::com::sun::star::uno::XComponentContext xContext, [in] ::com::sun::star::frame::XModel xModel);
+ any getVBProjects([in] XHelperInterface xParent, [in] ::com::sun::star::uno::XComponentContext xContext, [in] ::com::sun::star::frame::XModel xModel, [in] ::com::sun::star::script::XLibraryContainer xMacroLibraryContainer, [in] com::sun::star::script::XLibraryContainer xDialogLibraryContainer);
+
+
+};
+
+ }; };
+
+#endif
diff --git a/oovbaapi/ooo/vba/XVBADocService.idl b/oovbaapi/ooo/vba/XVBADocService.idl
new file mode 100755
index 000000000000..6500f028934b
--- /dev/null
+++ b/oovbaapi/ooo/vba/XVBADocService.idl
@@ -0,0 +1,72 @@
+/*************************************************************************
+ *
+ * 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: XVBADocService.idl,v $
+ * $Revision: 1.4 $
+ *
+ * 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 __ooo_vba_socservice_idl__
+#define __ooo_vba_appservice_idl__
+
+#ifndef __com_sun_star_uno_XInterface_idl__
+#include <com/sun/star/uno/XInterface.idl>
+#endif
+
+#ifndef __com_sun_star_uno_XComponentContext_idl__
+#include <com/sun/star/uno/XComponentContext.idl>
+#endif
+
+#ifndef __com_sun_star_frame_XModel_idl__
+#include <com/sun/star/frame/XModel.idl>
+#endif
+
+#ifndef __com_sun_star_script_XLibraryContainer_idl__
+#include <com/sun/star/script/XLibraryContainer.idl>
+#endif
+
+//=============================================================================
+
+module ooo { module vba {
+
+//=============================================================================
+
+
+interface XHelperInterface;
+interface XComponentContext;
+interface XModel;
+
+interface XVBADocService
+{
+ interface ::com::sun::star::uno::XInterface;
+
+
+ any getVBProject([in] XHelperInterface xParent, [in] ::com::sun::star::uno::XComponentContext xContext, [in] ::com::sun::star::frame::XModel xModel, [in] ::com::sun::star::script::XLibraryContainer xMacroLibraryContainer, [in] com::sun::star::script::XLibraryContainer xDialogLibraryContainer);
+
+
+};
+
+ }; };
+
+#endif
diff --git a/oovbaapi/ooo/vba/excel/SheetObject.idl b/oovbaapi/ooo/vba/excel/SheetObject.idl
new file mode 100755
index 000000000000..e4037e69b84d
--- /dev/null
+++ b/oovbaapi/ooo/vba/excel/SheetObject.idl
@@ -0,0 +1,131 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 __ooo_vba_excel_SheetObject_idl__
+#define __ooo_vba_excel_SheetObject_idl__
+
+#include <ooo/vba/excel/XCharacters.idl>
+
+//=============================================================================
+
+/* Note: This file collects all compatibility interfaces for drawing objects
+ and drawing controls embedded in sheets. All these symbols are deprecated
+ in VBA and kept for compatibility with old VBA scripts. */
+
+//=============================================================================
+
+module ooo { module vba { module excel {
+
+//=============================================================================
+
+/** Base interface for graphic objects and drawing controls in a single sheet.
+
+ <p>The objects supporting this interface are now deprecated in VBA in
+ favour of the Shapes and OLEObjects collections, but are kept for
+ compatibility with old VBA scripts. All form control objects do NOT belong
+ to ActiveX form controls but to the old-style drawing controls.</p>
+ */
+interface XSheetObject : ooo::vba::XHelperInterface
+{
+ /** Left coordinate of the drawing object, in points. */
+ [attribute] double Left;
+
+ /** Top coordinate of the drawing object, in points. */
+ [attribute] double Top;
+
+ /** Width of the drawing object, in points. */
+ [attribute] double Width;
+
+ /** Height of the drawing object, in points. */
+ [attribute] double Height;
+
+ /** The name of the drawing object, used as collection key. */
+ [attribute] string Name;
+
+ /** Name of a macro that will be executed when the drawing object is clicked. */
+ [attribute] string OnAction;
+
+ /** Anchor mode of the object (fixed or variable position and size). Must
+ be a value from <type>ooo::vba::excel::XlPlacement</type>. */
+ [attribute] long Placement;
+
+ /** True = print object, false = skip object on printing. */
+ [attribute] boolean PrintObject;
+};
+
+//=============================================================================
+
+/** Additional attributes for all drawing controls (this interface does not
+ belong to ActiveX form controls).
+ */
+interface XControlObject : com::sun::star::uno::XInterface
+{
+ [attribute] boolean AutoSize;
+};
+
+//=============================================================================
+
+/** Additional attributes for a push button drawing control (this interface
+ does not belong to ActiveX form controls).
+ */
+interface XButton : com::sun::star::uno::XInterface
+{
+ /** Visible caption of the button. */
+ [attribute] string Caption;
+
+ /** Font settings for the entire caption text. */
+ [attribute] XFont Font;
+
+ /** Horizontal alignment of the caption. */
+ [attribute] long HorizontalAlignment;
+
+ /** Vertical alignment of the caption. */
+ [attribute] long VerticalAlignment;
+
+ /** Orientation (rotation) of the text. Must be a value from
+ <type>ooo::vba::excel::XlOrientation</type>. */
+ [attribute] long Orientation;
+
+ /** Access to text and text formatting of the button caption. */
+ XCharacters Characters( [in] any aStart, [in] any aLength );
+};
+
+//=============================================================================
+
+/** Represents a drawing button control in a spreadsheet. */
+service Button
+{
+ interface XSheetObject;
+ interface XControlObject;
+ interface XButton;
+};
+
+//=============================================================================
+
+}; }; };
+
+#endif
diff --git a/oovbaapi/ooo/vba/excel/SheetObjects.idl b/oovbaapi/ooo/vba/excel/SheetObjects.idl
new file mode 100755
index 000000000000..0339059e1231
--- /dev/null
+++ b/oovbaapi/ooo/vba/excel/SheetObjects.idl
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 __ooo_vba_excel_SheetObjects_idl__
+#define __ooo_vba_excel_SheetObjects_idl__
+
+#include <ooo/vba/XCollection.idl>
+
+//=============================================================================
+
+/* Note: This file collects all compatibility interfaces for collections of
+ drawing objects and drawing controls embedded in sheets. All these symbols
+ are deprecated in VBA and kept for compatibility with old VBA scripts. */
+
+//=============================================================================
+
+module ooo { module vba { module excel {
+
+//=============================================================================
+
+/** Collections that implement this interface provide access to a specific type
+ of drawing objects in a single sheet.
+
+ <p>The following sheet symbols represent collections of graphic objects,
+ and therefore implement this interface:</p>
+ <ul><li>Buttons: push button (command button) controls,</li>
+ <li>ChartObjects: chart objects embedded in the sheet,</li>
+ <li>CheckBoxes: check box controls,</li>
+ <li>DropDowns: drop-down listbox controls,</li>
+ <li>EditBoxes: text edit controls (dialog sheets only),</li>
+ <li>GroupBoxes: group frame controls,</li>
+ <li>GroupObjects: group objects containing other child objects,</li>
+ <li>Labels: fixed text controls,</li>
+ <li>ListBoxes: plain listbox controls,</li>
+ <li>OptionButtons: option button (radio button) controls,</li>
+ <li>Ovals: simple ovals and circles,</li>
+ <li>Pictures: picture objects,</li>
+ <li>Rectangles: simple rectangle objects,</li>
+ <li>ScrollBars: scrollbar controls,</li>
+ <li>Spinners: spinner (spin button) controls,</li>
+ <li>TextBoxes: rectangle objects with embedded text.</li></ul>
+
+ <p>These symbols are now deprecated in VBA but kept for compatibility with
+ old VBA scripts. All symbols representing collections of form controls do
+ NOT belong to ActiveX form controls but to the old-style drawing controls.
+ </p>
+ */
+interface XGraphicObjects : com::sun::star::uno::XInterface
+{
+ /** Adds a new graphic object to the sheet this collection belongs to. The
+ type of the object is determined by the type of the collection.
+
+ @param fLeft Position of the left border in points (1/72 inch).
+ @param fTop Position of the top border in points (1/72 inch).
+ @param fWidth Width of the object in points (1/72 inch).
+ @param fHeight Height of the object in points (1/72 inch).
+
+ @return The created graphic object.
+ */
+ any Add( [in] any fLeft, [in] any fTop, [in] any fWidth, [in] any fHeight );
+};
+
+//=============================================================================
+
+/** Collections that implement this interface provide access to a specific type
+ of drawing objects in a single sheet.
+
+ <p>The following sheet symbols represent collections of line objects, and
+ therefore implement this interface:</p>
+ <ul><li>Arcs: arc objects, and</li>
+ <li>Lines: straight line ojects.</li></ul>
+
+ <p>These symbols are now deprecated in VBA but kept for compatibility with
+ old VBA scripts.</p>
+ */
+interface XLineObjects : com::sun::star::uno::XInterface
+{
+ /** Adds a new line object to the sheet this collection belongs to. The
+ type of the object is determined by the type of the collection.
+
+ @param fX1 Position of the first X coordinate in points (1/72 inch).
+ @param fY1 Position of the first Y coordinate in points (1/72 inch).
+ @param fX2 Position of the last X coordinate in points (1/72 inch).
+ @param fY2 Position of the last Y coordinate in points (1/72 inch).
+
+ @return The created line object.
+ */
+ any Add( [in] any fX1, [in] any fY1, [in] any fX2, [in] any fY2 );
+};
+
+//=============================================================================
+
+/** A collection providing access to all polygon objects in a single sheet.
+
+ <p>This symbol is now deprecated in VBA but kept for compatibility with old
+ VBA scripts.</p>
+ */
+interface XDrawings : com::sun::star::uno::XInterface
+{
+ /** Adds a new polygon object to the sheet this collection belongs to.
+
+ @param fX1 Position of the first X coordinate in points (1/72 inch).
+ @param fY1 Position of the first Y coordinate in points (1/72 inch).
+ @param fX2 Position of the last X coordinate in points (1/72 inch).
+ @param fY2 Position of the last Y coordinate in points (1/72 inch).
+ @param bClosed True = outline closed (last and first point connected).
+
+ @return The created polygon object.
+ */
+ any Add( [in] any fX1, [in] any fY1, [in] any fX2, [in] any fY2, [in] any bClosed );
+};
+
+//=============================================================================
+
+/** Represents the collection of drawing button controls in a spreadsheet. */
+service Buttons
+{
+ interface ooo::vba::XCollection;
+ interface XGraphicObjects;
+};
+
+//=============================================================================
+
+}; }; };
+
+#endif
diff --git a/oovbaapi/ooo/vba/excel/XApplication.idl b/oovbaapi/ooo/vba/excel/XApplication.idl
index e4c063d161cf..39693a37511c 100644
--- a/oovbaapi/ooo/vba/excel/XApplication.idl
+++ b/oovbaapi/ooo/vba/excel/XApplication.idl
@@ -27,17 +27,10 @@
#ifndef __ooo_vba_excel_XApplication_idl__
#define __ooo_vba_excel_XApplication_idl__
-#ifndef __com_sun_star_uno_XInterface_idl__
-#include <com/sun/star/uno/XInterface.idl>
-#endif
-
-#ifndef __ooo_vba_XHelperInterface_idl__
+#include <com/sun/star/beans/XExactName.idl>
+#include <com/sun/star/script/XInvocation.idl>
#include <ooo/vba/XHelperInterface.idl>
-#endif
-
-#ifndef __ooo_vba_XAssistant_idl__
#include <ooo/vba/XAssistant.idl>
-#endif
module ooo { module vba { module excel {
@@ -49,8 +42,11 @@ interface XWorksheetFunction;
interface XWindow;
interface XWorksheet;
-interface XApplication : com::sun::star::uno::XInterface
+interface XApplication
{
+ // Application serves as WorksheetFunction object with little differences
+ interface ::com::sun::star::beans::XExactName;
+ interface ::com::sun::star::script::XInvocation;
// interface ::ooo::vba::XHelperInterface;
@@ -86,8 +82,7 @@ interface XApplication : com::sun::star::uno::XInterface
any Range( [in] any Cell1, [in] any Cell2 );
any Names( [in] any Index );
void GoTo( [in] any Reference, [in] any Scroll );
- // #FIXME #TODO up to 30 args needed
- double CountA( [in] any arg1 );
+
void wait( [in] double time );
void Calculate() raises(com::sun::star::script::BasicErrorException);
XRange Intersect([in] XRange Arg1, [in] XRange Arg2, [in] /*Optional*/ any Arg3, [in] /*Optional*/ any Arg4, [in] /*Optional*/ any Arg5, [in] /*Optional*/ any Arg6, [in] /*Optional*/ any Arg7, [in] /*Optional*/ any Arg8, [in] /*Optional*/ any Arg9, [in] /*Optional*/ any Arg10, [in] /*Optional*/ any Arg11, [in] /*Optional*/ any Arg12, [in] /*Optional*/ any Arg13, [in] /*Optional*/ any Arg14, [in] /*Optional*/ any Arg15, [in] /*Optional*/ any Arg16, [in] /*Optional*/ any Arg17, [in] /*Optional*/ any Arg18, [in] /*Optional*/ any Arg19, [in] /*Optional*/ any Arg20, [in] /*Optional*/ any Arg21, [in] /*Optional*/ any Arg22, [in] /*Optional*/ any Arg23, [in] /*Optional*/ any Arg24, [in] /*Optional*/ any Arg25, [in] /*Optional*/ any Arg26, [in] /*Optional*/ any Arg27, [in] /*Optional*/ any Arg28, [in] /*Optional*/ any Arg29, [in] /*Optional*/ any Arg30)
diff --git a/oovbaapi/ooo/vba/excel/XComment.idl b/oovbaapi/ooo/vba/excel/XComment.idl
index 9f333cfd9542..8b811f31cc41 100644
--- a/oovbaapi/ooo/vba/excel/XComment.idl
+++ b/oovbaapi/ooo/vba/excel/XComment.idl
@@ -27,15 +27,8 @@
#ifndef __ooo_vba_excel_XComment_idl__
#define __ooo_vba_excel_XComment_idl__
-#ifndef __com_sun_star_uno_XInterface_idl__
-#include <com/sun/star/uno/XInterface.idl>
-#endif
-#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
-#include <com/sun/star/lang/IllegalArgumentException.idl>
-#endif
-#ifndef __ooo_vba_XHelperInterface_idl__
-#include <ooo/vba/XHelperInterface.idl>
-#endif
+#include <ooo/vba/msforms/XShape.idl>
+
//=============================================================================
module ooo { module vba { module excel {
@@ -48,7 +41,7 @@ interface XComment
interface ::ooo::vba::XHelperInterface;
[attribute] string Author;
-// [attribute, readonly] Shape Shape;
+ [attribute, readonly] ooo::vba::msforms::XShape Shape;
[attribute] boolean Visible;
void Delete();
diff --git a/oovbaapi/ooo/vba/excel/XHyperlink.idl b/oovbaapi/ooo/vba/excel/XHyperlink.idl
index 32fd985a4a37..1f6f9d23bfa6 100644
--- a/oovbaapi/ooo/vba/excel/XHyperlink.idl
+++ b/oovbaapi/ooo/vba/excel/XHyperlink.idl
@@ -27,31 +27,38 @@
#ifndef __ooo_vba_excel_XHyperlink_idl__
#define __ooo_vba_excel_XHyperlink_idl__
-#ifndef __com_sun_star_uno_XInterface_idl__
-#include <com/sun/star/uno/XInterface.idl>
-#endif
-
-#ifndef __ooo_vba_XHelperInterface_idl__
#include <ooo/vba/XHelperInterface.idl>
-#endif
//=============================================================================
+module ooo { module vba { module msforms {
+ interface XShape;
+}; }; };
+
module ooo { module vba { module excel {
-//=============================================================================
interface XRange;
+
+//=============================================================================
+
interface XHyperlink
{
interface ::ooo::vba::XHelperInterface;
- [attribute] string Address;
[attribute] string Name;
+ [attribute] string Address;
+ [attribute] string SubAddress;
+ [attribute] string ScreenTip;
[attribute] string TextToDisplay;
-
- XRange Range();
+ [attribute, readonly] long Type;
+ [attribute, readonly] XRange Range;
+ [attribute, readonly] ooo::vba::msforms::XShape Shape;
};
+//=============================================================================
+
}; }; };
+//=============================================================================
+
#endif
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XFilterAdapter.idl b/oovbaapi/ooo/vba/excel/XHyperlinks.idl
index 2fa9fd8269d4..dbaab84568e8 100755
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XFilterAdapter.idl
+++ b/oovbaapi/ooo/vba/excel/XHyperlinks.idl
@@ -24,48 +24,47 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#ifndef _COM_SUN_STAR_DOCUMENT_XFILTERADAPTOR_IDL__
-#define _COM_SUN_STAR_DOCUMENT_XFILTERADAPTOR_IDL__
-#ifndef __com_sun_star_uno_RuntimeException_idl__
-#include <com/sun/star/uno/RuntimeException.idl>
-#endif
-
-#include <com/sun/star/uno/XInterface.idl>
-#include <com/sun/star/io/XInputStream.idl>
-#include <com/sun/star/io/XOutputStream.idl>
+#ifndef __ooo_vba_excel_XHyperlinks_idl__
+#define __ooo_vba_excel_XHyperlinks_idl__
+#include <ooo/vba/XCollection.idl>
//=============================================================================
- module com { module sun { module star { module document {
+module ooo { module vba { module excel {
//=============================================================================
- /** This is an interface that can be used to link a filter to the
- XmlFilterAdaptor
-
- @throws com::sun::star::uno::RuntimeException
- */
- interface XFilterAdapter : com::sun::star::uno::XInterface
- {
- void convert(
- [in] com::sun::star::io::XInputStream xml,
- [in] com::sun::star::io::XOutputStream device,
- [in] boolean convertToOffice,
- [in] string pluginUrl,
- [in] string fileName);
- /*raises( com::sun::star::uno::RuntimeException );*/
-
- };
- service FilterAdapter
- {
- interface XFilterAdapter;
- };
-
- };
- };
- };
+interface XHyperlink;
+
+interface XHyperlinks
+{
+ // ------------------------------------------------------------------------
+
+ interface ::ooo::vba::XCollection;
+
+ // ------------------------------------------------------------------------
+
+ XHyperlink Add(
+ [in] any aAnchor,
+ [in] any aAddress,
+ [in] any aSubAddress,
+ [in] any aScreenTip,
+ [in] any aTextToDisplay );
+
+ // ------------------------------------------------------------------------
+
+ void Delete();
+
+ // ------------------------------------------------------------------------
+
};
+//=============================================================================
+
+}; }; };
+
+//=============================================================================
+
#endif
diff --git a/oovbaapi/ooo/vba/excel/XPane.idl b/oovbaapi/ooo/vba/excel/XPane.idl
index acc5520bb9ea..ac9ec2e3ca08 100644
--- a/oovbaapi/ooo/vba/excel/XPane.idl
+++ b/oovbaapi/ooo/vba/excel/XPane.idl
@@ -27,9 +27,7 @@
#ifndef __com_sun_star_helper_XPane_idl__
#define __com_sun_star_helper_XPane_idl__
-#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
-#endif
//============================================================================
@@ -37,10 +35,13 @@ module ooo { module vba { module excel {
//============================================================================
-interface XPane: com::sun::star::uno::XInterface
+interface XRange;
+
+interface XPane : com::sun::star::uno::XInterface
{
[attribute] long ScrollColumn;
[attribute] long ScrollRow;
+ [attribute, readonly] XRange VisibleRange;
void SmallScroll([in] /*Optional*/ any Down, [in] /*Optional*/ any Up, [in] /*Optional*/ any ToRight, [in] /*Optional*/ any ToLeft);
void LargeScroll([in] /*Optional*/ any Down, [in] /*Optional*/ any Up, [in] /*Optional*/ any ToRight, [in] /*Optional*/ any ToLeft);
diff --git a/oovbaapi/ooo/vba/excel/XRange.idl b/oovbaapi/ooo/vba/excel/XRange.idl
index 5eb1913fc40a..3820911f2c96 100644
--- a/oovbaapi/ooo/vba/excel/XRange.idl
+++ b/oovbaapi/ooo/vba/excel/XRange.idl
@@ -98,6 +98,7 @@ interface XRange
[attribute, readonly ] any Left;
[attribute] any PageBreak;
[attribute, readonly] XValidation Validation;
+ [attribute, readonly] any PrefixCharacter;
[attribute] any Style;
[attribute] any AddIndent;
[attribute] any ShowDetail;
@@ -164,7 +165,7 @@ interface XRange
void RemoveSubtotal() raises ( com::sun::star::script::BasicErrorException );
void Subtotal( [in] long GroupBy, [in] long Function, [in] /*Optional*/ sequence<long> TotalList, [in] /*Optional*/ any Replace, [in] /*Optional*/ any PageBreaks, [in] any SummaryBelowData ) raises ( com::sun::star::script::BasicErrorException );
XRange MergeArea( ) raises ( com::sun::star::script::BasicErrorException );
-
+ any Hyperlinks( [in] any aIndex );
};
//=============================================================================
diff --git a/oovbaapi/ooo/vba/excel/XWindow.idl b/oovbaapi/ooo/vba/excel/XWindow.idl
index 0ac2271a32d6..dde7818ebda7 100644
--- a/oovbaapi/ooo/vba/excel/XWindow.idl
+++ b/oovbaapi/ooo/vba/excel/XWindow.idl
@@ -27,22 +27,18 @@
#ifndef __ooo_vba_excel_XWindow_idl__
#define __ooo_vba_excel_XWindow_idl__
-#ifndef __com_sun_star_uno_XInterface_idl__
-#include <com/sun/star/uno/XInterface.idl>
-#endif
-
-#ifndef __ooo_vba_XHelperInterface_idl__
#include <ooo/vba/XHelperInterface.idl>
-#endif
//=============================================================================
module ooo { module vba { module excel {
//=============================================================================
+
interface XRange;
interface XWorksheet;
interface XPane;
+
interface XWindow : com::sun::star::uno::XInterface
{
[attribute] any Caption;
@@ -61,6 +57,7 @@ interface XWindow : com::sun::star::uno::XInterface
[attribute] any ScrollColumn;
[attribute] any ScrollRow;
[attribute] any View;
+ [attribute, readonly] XRange VisibleRange;
[attribute] any WindowState;
[attribute] any Zoom;
any SelectedSheets( [in] any aIndex );
@@ -71,6 +68,7 @@ interface XWindow : com::sun::star::uno::XInterface
void Close([in] any SaveChanges, [in] any FileName, [in] any RouteWorkBook);
XRange ActiveCell() raises(com::sun::star::script::BasicErrorException);
any Selection() raises(com::sun::star::script::BasicErrorException);
+ XRange RangeSelection() raises(com::sun::star::script::BasicErrorException);
long PointsToScreenPixelsX([in] long Points) raises(com::sun::star::script::BasicErrorException);
long PointsToScreenPixelsY([in] long Points) raises(com::sun::star::script::BasicErrorException);
void PrintOut([in] /*optional short*/ any From,
diff --git a/oovbaapi/ooo/vba/excel/XWorksheet.idl b/oovbaapi/ooo/vba/excel/XWorksheet.idl
index 3620c899de83..271cd81d4d0e 100644
--- a/oovbaapi/ooo/vba/excel/XWorksheet.idl
+++ b/oovbaapi/ooo/vba/excel/XWorksheet.idl
@@ -83,6 +83,8 @@ interface XWorksheet
void Protect([in] any Password,[in] any DrawingObjects ,[in] any Contents,[in] any Scenarios,[in] any UserInterfaceOnly);
void Unprotect([in] any Password );
void CheckSpelling([in] any CustomDictionary,[in] any IgnoreUppercase, [in] any AlwaysSuggest,[in] any SpellingLang );
+ void ShowDataForm();
+
XRange Range([in] any Cell1, [in] any Cell2 );
any ChartObjects([in] any Index);
any PivotTables([in] any Index);
@@ -92,23 +94,32 @@ interface XWorksheet
any HPageBreaks([in] any Index);
any VPageBreaks([in] any Index);
any OLEObjects([in] any Index);
- void ShowDataForm();
any Shapes([in] any Index);
+ /* The following form control related symbols do not refer to ActiveX form
+ controls embedded in the sheet, but to the old-style drawing controls
+ of Excel. This is an Excel-only feature. */
+ any Buttons( [in] any aIndex );
+ any CheckBoxes( [in] any aIndex );
+ any DropDowns( [in] any aIndex );
+ any GroupBoxes( [in] any aIndex );
+ any Labels( [in] any aIndex );
+ any ListBoxes( [in] any aIndex );
+ any OptionButtons( [in] any aIndex );
+ any ScrollBars( [in] any aIndex );
+ any Spinners( [in] any aIndex );
// FIXME: should prolly inherit from Range somehow...
XRange Cells([in] any RowIndex, [in] any ColumnIndex);
XRange Rows([in] any aIndex);
XRange Columns([in] any aIndex);
+ any Hyperlinks( [in] any aIndex );
any Evaluate( [in] string Name);
-
void setEnableCalculation([in] boolean EnableCalculation) raises(com::sun::star::script::BasicErrorException);
boolean getEnableCalculation() raises(com::sun::star::script::BasicErrorException);
void PrintOut( [in] any From, [in] any To, [in] any Copies, [in] any Preview, [in] any ActivePrinter, [in] any PrintToFile, [in] any Collate, [in] any PrToFileName, [in] any IgnorePrintAreas );
-
-
};
//=============================================================================
@@ -116,5 +127,3 @@ interface XWorksheet
}; }; };
#endif
-
-
diff --git a/oovbaapi/ooo/vba/excel/makefile.mk b/oovbaapi/ooo/vba/excel/makefile.mk
index 01e26d4cb19b..12dcf025e489 100644
--- a/oovbaapi/ooo/vba/excel/makefile.mk
+++ b/oovbaapi/ooo/vba/excel/makefile.mk
@@ -39,6 +39,8 @@ PACKAGE=ooo$/vba$/Excel
IDLFILES= XGlobals.idl\
Globals.idl\
+ SheetObject.idl\
+ SheetObjects.idl\
XApplication.idl\
XComment.idl\
XComments.idl\
@@ -92,6 +94,7 @@ IDLFILES= XGlobals.idl\
Window.idl \
XHyperlink.idl \
Hyperlink.idl \
+ XHyperlinks.idl \
XPageSetup.idl \
XPageBreak.idl \
XHPageBreak.idl \
diff --git a/oovbaapi/ooo/vba/makefile.mk b/oovbaapi/ooo/vba/makefile.mk
index 7fc70303d942..75f6465bf4c0 100644
--- a/oovbaapi/ooo/vba/makefile.mk
+++ b/oovbaapi/ooo/vba/makefile.mk
@@ -1,4 +1,4 @@
-#*************************************************************************
+ #*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
@@ -62,7 +62,8 @@ IDLFILES=\
XDialogsBase.idl\
XDialogBase.idl\
XPageSetupBase.idl \
-
+ XVBAAppService.idl\
+ XVBADocService.idl\
# ------------------------------------------------------------------
.ENDIF
.INCLUDE : target.mk
diff --git a/oovbaapi/ooo/vba/msforms/XControl.idl b/oovbaapi/ooo/vba/msforms/XControl.idl
index 867fd564c9af..97ca9d152716 100644
--- a/oovbaapi/ooo/vba/msforms/XControl.idl
+++ b/oovbaapi/ooo/vba/msforms/XControl.idl
@@ -45,13 +45,16 @@ interface XControl
{
interface ::ooo::vba::XHelperInterface;
void SetFocus();
+ void Move( [in] double Left, [in] double Top, [in] any Width, [in] any Height );
+
[attribute, readonly ] com::sun::star::uno::XInterface Object;
[attribute] string ControlSource;
[attribute] string RowSource;
[attribute] boolean Enabled;
[attribute] boolean Visible;
//Size. there are some defferent between Mso and OOo.
- //Mso use double but OOo use long. OOo 1 = 1/100mm but Mso use pt
+ //Mso use double but OOo use long. OOo 1 = 1/100mm but Mso use pt.
+ //in Dialogs Mso uses pixels
[attribute] double Height;
[attribute] double Width;
//Postion
@@ -59,6 +62,7 @@ interface XControl
[attribute] double Top;
[attribute] string Name;
[attribute] string ControlTipText;
+ [attribute] string Tag;
};
//=============================================================================
diff --git a/oovbaapi/ooo/vba/msforms/XControls.idl b/oovbaapi/ooo/vba/msforms/XControls.idl
index 00d8f16f9dd9..11325303d56c 100644
--- a/oovbaapi/ooo/vba/msforms/XControls.idl
+++ b/oovbaapi/ooo/vba/msforms/XControls.idl
@@ -41,6 +41,13 @@ interface XControls
{
interface ooo::vba::XCollection;
void Move( [in] double cx, [in] double cy );
+
+ // the following two methods should be actually part of XCollection, but at least Add conflicts with
+ // methods in the derived from XCollection interfaces
+ // thus the methods are declared in the top-level interface
+ any Add( [in] any Object, [in] any StringKey, [in] any Before, [in] any After );
+ void Remove( [in] any StringKeyOrIndex );
+
};
}; }; };
diff --git a/oovbaapi/prj/d.lst b/oovbaapi/prj/d.lst
index 1acd2acd5b4b..ac5924e2d684 100644
--- a/oovbaapi/prj/d.lst
+++ b/oovbaapi/prj/d.lst
@@ -1 +1,15 @@
+mkdir: %COMMON_DEST%\idl%_EXT%\ooo
+
+mkdir: %COMMON_DEST%\idl%_EXT%\ooo\vba
+mkdir: %COMMON_DEST%\idl%_EXT%\ooo\vba\constants
+mkdir: %COMMON_DEST%\idl%_EXT%\ooo\vba\excel
+mkdir: %COMMON_DEST%\idl%_EXT%\ooo\vba\msforms
+mkdir: %COMMON_DEST%\idl%_EXT%\ooo\vba\word
+
..\%__SRC%\ucr\oovbaapi.db %_DEST%\bin%_EXT%\oovbaapi.rdb
+
+..\ooo\vba\*.idl %COMMON_DEST%\idl%_EXT%\ooo\vba\
+..\ooo\vba\constants\*.idl %COMMON_DEST%\idl%_EXT%\ooo\vba\constants
+..\ooo\vba\excel\*.idl %COMMON_DEST%\idl%_EXT%\ooo\vba\excel
+..\ooo\vba\msforms\*.idl %COMMON_DEST%\idl%_EXT%\ooo\vba\msforms
+..\ooo\vba\word\*.idl %COMMON_DEST%\idl%_EXT%\ooo\vba\word
diff --git a/oox/inc/oox/core/filterbase.hxx b/oox/inc/oox/core/filterbase.hxx
index 31e26d38f590..1757b2be4334 100644
--- a/oox/inc/oox/core/filterbase.hxx
+++ b/oox/inc/oox/core/filterbase.hxx
@@ -113,9 +113,6 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&
getGlobalFactory() const;
- /** Returns the media descriptor. */
- ::comphelper::MediaDescriptor& getMediaDescriptor() const;
-
/** Returns the document model (always existing). */
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >&
getModel() const;
@@ -136,6 +133,9 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >&
getInteractionHandler() const;
+ /** Returns the media descriptor. */
+ ::comphelper::MediaDescriptor& getMediaDescriptor() const;
+
/** Returns the URL of the imported or exported file. */
const ::rtl::OUString& getFileUrl() const;
@@ -202,12 +202,6 @@ public:
@return True, if the data could be imported from the stream. */
bool importBinaryData( StreamDataSequence& orDataSeq, const ::rtl::OUString& rStreamName );
- /** Imports a graphic from the storage stream with the passed path and name. */
- ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
- importEmbeddedGraphic( const ::rtl::OUString& rStreamName ) const;
- /** Imports a graphic object from the storage stream with the passed path and name. */
- ::rtl::OUString importEmbeddedGraphicObject( const ::rtl::OUString& rStreamName ) const;
-
// com.sun.star.lang.XServiceInfo interface -------------------------------
virtual ::rtl::OUString SAL_CALL
diff --git a/oox/inc/oox/core/filterdetect.hxx b/oox/inc/oox/core/filterdetect.hxx
index e38008305d71..76e46050c24a 100644
--- a/oox/inc/oox/core/filterdetect.hxx
+++ b/oox/inc/oox/core/filterdetect.hxx
@@ -41,6 +41,7 @@ namespace com { namespace sun { namespace star {
} } }
namespace comphelper { class MediaDescriptor; }
+
namespace oox { class AttributeList; }
namespace oox {
diff --git a/oox/inc/oox/dump/dumperbase.hxx b/oox/inc/oox/dump/dumperbase.hxx
index f65eeceebf27..ed1a3e1fc938 100644
--- a/oox/inc/oox/dump/dumperbase.hxx
+++ b/oox/inc/oox/dump/dumperbase.hxx
@@ -39,9 +39,9 @@
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/util/DateTime.hpp>
#include <comphelper/mediadescriptor.hxx>
+#include "oox/helper/binaryinputstream.hxx"
#include "oox/helper/helper.hxx"
#include "oox/helper/storagebase.hxx"
-#include "oox/helper/binaryinputstream.hxx"
#define OOX_INCLUDE_DUMPER (OSL_DEBUG_LEVEL > 0)
diff --git a/oox/inc/oox/helper/attributelist.hxx b/oox/inc/oox/helper/attributelist.hxx
index 89981160b699..631d7ec4b66e 100644
--- a/oox/inc/oox/helper/attributelist.hxx
+++ b/oox/inc/oox/helper/attributelist.hxx
@@ -37,27 +37,12 @@ namespace oox {
// ============================================================================
-/** Provides access to attribute values of an element.
-
- Wraps a com.sun.star.xml.sax.XFastAttributeList object. Provides
- convenience functions that convert the string value of an attribute to
- various other data types.
+/** Static helpers for conversion of strings to attribute values of various
+ different data types.
*/
-class AttributeList
+class AttributeConversion
{
public:
- explicit AttributeList(
- const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& rxAttribs );
-
- /** Returns the wrapped com.sun.star.xml.sax.XFastAttributeList object. */
- inline ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >
- getFastAttributeList() const { return mxAttribs; }
-
- /** Returns true, if the specified attribute is present. */
- bool hasAttribute( sal_Int32 nElement ) const;
-
- // static string conversion -----------------------------------------------
-
/** Returns the decoded string value. All characters in the format
'_xHHHH_' (H being a hexadecimal digit), will be decoded. */
static ::rtl::OUString decodeXString( const ::rtl::OUString& rValue );
@@ -82,95 +67,117 @@ public:
/** Returns the 64-bit signed integer value from the passed string (hexadecimal). */
static sal_Int64 decodeHyperHex( const ::rtl::OUString& rValue );
+};
+
+// ============================================================================
+
+/** Provides access to attribute values of an element.
+
+ Wraps a com.sun.star.xml.sax.XFastAttributeList object. Provides
+ convenience functions that convert the string value of an attribute to
+ various other data types.
+ */
+class AttributeList
+{
+public:
+ explicit AttributeList(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& rxAttribs );
+
+ /** Returns the wrapped com.sun.star.xml.sax.XFastAttributeList object. */
+ inline ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >
+ getFastAttributeList() const { return mxAttribs; }
+
+ /** Returns true, if the specified attribute is present. */
+ bool hasAttribute( sal_Int32 nAttrToken ) const;
// optional return values -------------------------------------------------
/** Returns the token identifier of the value of the specified attribute. */
- OptValue< sal_Int32 > getToken( sal_Int32 nElement ) const;
+ OptValue< sal_Int32 > getToken( sal_Int32 nAttrToken ) const;
/** Returns the string value of the specified attribute. */
- OptValue< ::rtl::OUString > getString( sal_Int32 nElement ) const;
+ OptValue< ::rtl::OUString > getString( sal_Int32 nAttrToken ) const;
/** Returns the string value of the specified attribute. All characters in
the format '_xHHHH_' (H being a hexadecimal digit), will be decoded. */
- OptValue< ::rtl::OUString > getXString( sal_Int32 nElement ) const;
+ OptValue< ::rtl::OUString > getXString( sal_Int32 nAttrToken ) const;
/** Returns the double value of the specified attribute. */
- OptValue< double > getDouble( sal_Int32 nElement ) const;
+ OptValue< double > getDouble( sal_Int32 nAttrToken ) const;
/** Returns the 32-bit signed integer value of the specified attribute (decimal). */
- OptValue< sal_Int32 > getInteger( sal_Int32 nElement ) const;
+ OptValue< sal_Int32 > getInteger( sal_Int32 nAttrToken ) const;
/** Returns the 32-bit unsigned integer value of the specified attribute (decimal). */
- OptValue< sal_uInt32 > getUnsigned( sal_Int32 nElement ) const;
+ OptValue< sal_uInt32 > getUnsigned( sal_Int32 nAttrToken ) const;
/** Returns the 64-bit signed integer value of the specified attribute (decimal). */
- OptValue< sal_Int64 > getHyper( sal_Int32 nElement ) const;
+ OptValue< sal_Int64 > getHyper( sal_Int32 nAttrToken ) const;
/** Returns the 32-bit signed integer value of the specified attribute (hexadecimal). */
- OptValue< sal_Int32 > getIntegerHex( sal_Int32 nElement ) const;
+ OptValue< sal_Int32 > getIntegerHex( sal_Int32 nAttrToken ) const;
/** Returns the 32-bit unsigned integer value of the specified attribute (hexadecimal). */
- OptValue< sal_uInt32 > getUnsignedHex( sal_Int32 nElement ) const;
+ OptValue< sal_uInt32 > getUnsignedHex( sal_Int32 nAttrToken ) const;
/** Returns the 64-bit signed integer value of the specified attribute (hexadecimal). */
- OptValue< sal_Int64 > getHyperHex( sal_Int32 nElement ) const;
+ OptValue< sal_Int64 > getHyperHex( sal_Int32 nAttrToken ) const;
/** Returns the boolean value of the specified attribute. */
- OptValue< bool > getBool( sal_Int32 nElement ) const;
+ OptValue< bool > getBool( sal_Int32 nAttrToken ) const;
/** Returns the date/time value of the specified attribute. */
- OptValue< ::com::sun::star::util::DateTime > getDateTime( sal_Int32 nElement ) const;
+ OptValue< ::com::sun::star::util::DateTime > getDateTime( sal_Int32 nAttrToken ) const;
// defaulted return values ------------------------------------------------
/** Returns the token identifier of the value of the specified attribute,
or the passed default identifier if the attribute is missing. */
- sal_Int32 getToken( sal_Int32 nElement, sal_Int32 nDefault ) const;
+ sal_Int32 getToken( sal_Int32 nAttrToken, sal_Int32 nDefault ) const;
/** Returns the string value of the specified attribute, or the passed
default string if the attribute is missing. */
- ::rtl::OUString getString( sal_Int32 nElement, const ::rtl::OUString& rDefault ) const;
+ ::rtl::OUString getString( sal_Int32 nAttrToken, const ::rtl::OUString& rDefault ) const;
/** Returns the decoded string value of the specified attribute, or the
passed default string if the attribute is missing. */
- ::rtl::OUString getXString( sal_Int32 nElement, const ::rtl::OUString& rDefault ) const;
+ ::rtl::OUString getXString( sal_Int32 nAttrToken, const ::rtl::OUString& rDefault ) const;
/** Returns the double value of the specified attribute, or the passed
default value if the attribute is missing or not convertible to a double. */
- double getDouble( sal_Int32 nElement, double fDefault ) const;
+ double getDouble( sal_Int32 nAttrToken, double fDefault ) const;
/** Returns the 32-bit signed integer value of the specified attribute, or the
passed default value if the attribute is missing or not convertible to integer. */
- sal_Int32 getInteger( sal_Int32 nElement, sal_Int32 nDefault ) const;
+ sal_Int32 getInteger( sal_Int32 nAttrToken, sal_Int32 nDefault ) const;
/** Returns the 32-bit unsigned integer value of the specified attribute, or the
passed default value if the attribute is missing or not convertible to unsigned. */
- sal_uInt32 getUnsigned( sal_Int32 nElement, sal_uInt32 nDefault ) const;
+ sal_uInt32 getUnsigned( sal_Int32 nAttrToken, sal_uInt32 nDefault ) const;
/** Returns the 64-bit signed integer value of the specified attribute, or the
passed default value if the attribute is missing or not convertible to integer. */
- sal_Int64 getHyper( sal_Int32 nElement, sal_Int64 nDefault ) const;
+ sal_Int64 getHyper( sal_Int32 nAttrToken, sal_Int64 nDefault ) const;
/** Returns the 32-bit signed integer value of the specified attribute (hexadecimal),
or the passed default value if the attribute is missing or not convertible. */
- sal_Int32 getIntegerHex( sal_Int32 nElement, sal_Int32 nDefault ) const;
+ sal_Int32 getIntegerHex( sal_Int32 nAttrToken, sal_Int32 nDefault ) const;
/** Returns the 32-bit unsigned integer value of the specified attribute (hexadecimal),
or the passed default value if the attribute is missing or not convertible. */
- sal_uInt32 getUnsignedHex( sal_Int32 nElement, sal_uInt32 nDefault ) const;
+ sal_uInt32 getUnsignedHex( sal_Int32 nAttrToken, sal_uInt32 nDefault ) const;
/** Returns the 64-bit signed integer value of the specified attribute (hexadecimal),
or the passed default value if the attribute is missing or not convertible. */
- sal_Int64 getHyperHex( sal_Int32 nElement, sal_Int64 nDefault ) const;
+ sal_Int64 getHyperHex( sal_Int32 nAttrToken, sal_Int64 nDefault ) const;
/** Returns the boolean value of the specified attribute, or the passed
default value if the attribute is missing or not convertible to bool. */
- bool getBool( sal_Int32 nElement, bool bDefault ) const;
+ bool getBool( sal_Int32 nAttrToken, bool bDefault ) const;
/** Returns the date/time value of the specified attribute, or the default
value if the attribute is missing or not convertible to a date/time value. */
- ::com::sun::star::util::DateTime getDateTime( sal_Int32 nElement, const ::com::sun::star::util::DateTime& rDefault ) const;
+ ::com::sun::star::util::DateTime getDateTime( sal_Int32 nAttrToken, const ::com::sun::star::util::DateTime& rDefault ) const;
private:
::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >
diff --git a/oox/inc/oox/helper/graphichelper.hxx b/oox/inc/oox/helper/graphichelper.hxx
index 2d0964b37715..37002940cb17 100644
--- a/oox/inc/oox/helper/graphichelper.hxx
+++ b/oox/inc/oox/helper/graphichelper.hxx
@@ -34,6 +34,7 @@
#include <com/sun/star/awt/DeviceInfo.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include "oox/helper/binarystreambase.hxx"
+#include "oox/helper/storagebase.hxx"
namespace com { namespace sun { namespace star {
namespace awt { struct Point; }
@@ -68,9 +69,12 @@ class GraphicHelper
public:
explicit GraphicHelper(
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxGlobalFactory,
- const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxTargetFrame );
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxTargetFrame,
+ const StorageRef& rxStorage );
virtual ~GraphicHelper();
+ // System colors and predefined colors ------------------------------------
+
/** Returns a system color specified by the passed XML token identifier. */
sal_Int32 getSystemColor( sal_Int32 nToken, sal_Int32 nDefaultRgb = API_RGB_TRANSPARENT ) const;
/** Derived classes may implement to resolve a scheme color from the passed XML token identifier. */
@@ -78,6 +82,8 @@ public:
/** Derived classes may implement to resolve a palette index to an RGB color. */
virtual sal_Int32 getPaletteColor( sal_Int32 nPaletteIdx ) const;
+ // Device info and device dependent unit conversion -----------------------
+
/** Returns information about the output device. */
const ::com::sun::star::awt::DeviceInfo& getDeviceInfo() const;
@@ -109,6 +115,8 @@ public:
/** Converts the passed size from 1/100 mm to AppFont units. */
::com::sun::star::awt::Size convertHmmToAppFont( const ::com::sun::star::awt::Size& rHmm ) const;
+ // Graphics and graphic objects ------------------------------------------
+
/** Imports a graphic from the passed input stream. */
::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
importGraphic(
@@ -118,6 +126,10 @@ public:
::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
importGraphic( const StreamDataSequence& rGraphicData ) const;
+ /** Imports a graphic from the storage stream with the passed path and name. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
+ importEmbeddedGraphic( const ::rtl::OUString& rStreamName ) const;
+
/** Creates a persistent graphic object from the passed graphic.
@return The URL of the created and internally cached graphic object. */
::rtl::OUString createGraphicObject(
@@ -132,16 +144,24 @@ public:
@return The URL of the created and internally cached graphic object. */
::rtl::OUString importGraphicObject( const StreamDataSequence& rGraphicData ) const;
+ /** Imports a graphic object from the storage stream with the passed path and name.
+ @return The URL of the created and internally cached graphic object. */
+ ::rtl::OUString importEmbeddedGraphicObject( const ::rtl::OUString& rStreamName ) const;
+
+ // ------------------------------------------------------------------------
private:
typedef ::std::map< sal_Int32, sal_Int32 > SystemPalette;
typedef ::std::deque< ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > > GraphicObjectDeque;
+ typedef ::std::map< ::rtl::OUString, ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > > EmbeddedGraphicMap;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mxCompContext;
::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicProvider > mxGraphicProvider;
::com::sun::star::uno::Reference< ::com::sun::star::awt::XUnitConversion > mxUnitConversion;
::com::sun::star::awt::DeviceInfo maDeviceInfo; /// Current output device info.
SystemPalette maSystemPalette; /// Maps system colors (XML tokens) to RGB color values.
+ StorageRef mxStorage; /// Storage containing embedded graphics.
mutable GraphicObjectDeque maGraphicObjects; /// Caches all created graphic objects to keep them alive.
+ mutable EmbeddedGraphicMap maEmbeddedGraphics; /// Maps all embedded graphics by their storage path.
const ::rtl::OUString maGraphicObjScheme; /// The URL scheme name for graphic objects.
double mfPixelPerHmmX; /// Number of screen pixels per 1/100 mm in X direction.
double mfPixelPerHmmY; /// Number of screen pixels per 1/100 mm in Y direction.
diff --git a/oox/inc/oox/ole/axbinaryreader.hxx b/oox/inc/oox/ole/axbinaryreader.hxx
index d036e958a446..e3f102716e17 100755
--- a/oox/inc/oox/ole/axbinaryreader.hxx
+++ b/oox/inc/oox/ole/axbinaryreader.hxx
@@ -87,6 +87,9 @@ private:
/** A pair of integer values as a property. */
typedef ::std::pair< sal_Int32, sal_Int32 > AxPairData;
+/** An array of string values as a property. */
+typedef ::std::vector< ::rtl::OUString > AxStringArray;
+
// ============================================================================
const sal_uInt32 AX_FONTDATA_BOLD = 0x00000001;
@@ -149,6 +152,9 @@ public:
/** Reads the next string property from the stream, if the respective flag
in the property mask is set. */
void readStringProperty( ::rtl::OUString& orValue );
+ /** Reads a string array property from the stream, if the respective flag
+ in the property mask is set. */
+ void readStringArrayProperty( AxStringArray& orArray );
/** Reads the next GUID property from the stream, if the respective flag
in the property mask is set. The GUID will be enclosed in braces. */
void readGuidProperty( ::rtl::OUString& orGuid );
@@ -172,6 +178,9 @@ public:
/** Skips the next string property in the stream, if the respective flag in
the property mask is set. */
inline void skipStringProperty() { readStringProperty( maDummyString ); }
+ /** Skips the next string array property in the stream, if the respective
+ flag in the property mask is set. */
+ inline void skipStringArrayProperty() { readStringArrayProperty( maDummyStringArray ); }
/** Skips the next GUID property in the stream, if the respective flag in
the property mask is set. */
inline void skipGuidProperty() { readGuidProperty( maDummyString ); }
@@ -221,6 +230,16 @@ private:
virtual bool readProperty( AxAlignedInputStream& rInStrm );
};
+ /** Complex property for an array of strings. */
+ struct StringArrayProperty : public ComplexProperty
+ {
+ AxStringArray& mrArray;
+ sal_uInt32 mnSize;
+ inline explicit StringArrayProperty( AxStringArray& rArray, sal_uInt32 nSize ) :
+ mrArray( rArray ), mnSize( nSize ) {}
+ virtual bool readProperty( AxAlignedInputStream& rInStrm );
+ };
+
/** Complex property for a GUID value. */
struct GuidProperty : public ComplexProperty
{
@@ -261,6 +280,7 @@ private:
AxFontData maDummyFontData; /// Dummy font for unsupported properties.
StreamDataSequence maDummyPicData; /// Dummy picture for unsupported properties.
::rtl::OUString maDummyString; /// Dummy string for unsupported properties.
+ AxStringArray maDummyStringArray; /// Dummy string array for unsupported properties.
sal_Int64 mnPropFlags; /// Flags specifying existing properties.
sal_Int64 mnNextProp; /// Next property to read.
sal_Int64 mnPropsEnd; /// End position of simple/large properties.
diff --git a/oox/inc/oox/ole/axcontrol.hxx b/oox/inc/oox/ole/axcontrol.hxx
index 7c533334cc49..8df45ece6065 100644
--- a/oox/inc/oox/ole/axcontrol.hxx
+++ b/oox/inc/oox/ole/axcontrol.hxx
@@ -111,8 +111,12 @@ enum ApiControlType
API_CONTROL_COMBOBOX,
API_CONTROL_SPINBUTTON,
API_CONTROL_SCROLLBAR,
+ API_CONTROL_TABSTRIP,
API_CONTROL_PROGRESSBAR,
API_CONTROL_GROUPBOX,
+ API_CONTROL_FRAME,
+ API_CONTROL_PAGE,
+ API_CONTROL_MULTIPAGE,
API_CONTROL_DIALOG
};
@@ -639,19 +643,50 @@ private:
// ============================================================================
+/** Model for a Forms 2.0 tabstrip control. */
+class AxTabStripModel : public AxFontDataModel
+{
+public:
+ explicit AxTabStripModel();
+
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+
+ /** Returns the caption with the specified zero-based index. */
+ ::rtl::OUString getCaption( sal_Int32 nIndex ) const;
+
+private:
+ AxStringArray maCaptions; /// Captions of all tabs.
+ sal_uInt32 mnBackColor; /// Fill color.
+ sal_uInt32 mnTextColor; /// Text color.
+ sal_uInt32 mnFlags; /// Various flags.
+ sal_Int32 mnSelectedTab; /// The index of the selected tab.
+ sal_uInt32 mnTabStyle; /// Visual style of the tabs.
+ sal_Int32 mnTabFlagCount; /// Number of entries in tab flag array.
+};
+
+typedef ::boost::shared_ptr< AxTabStripModel > AxTabStripModelRef;
+
+// ============================================================================
+
typedef ::std::vector< ::rtl::OUString > AxClassTable;
/** Base class for ActiveX container controls. */
class AxContainerModelBase : public AxFontDataModel
{
public:
- explicit AxContainerModelBase();
+ explicit AxContainerModelBase( bool bFontSupport = false );
/** Allows to set single properties specified by XML token identifier. */
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
/** Reads the leading structure in the 'f' stream containing the model for
this control. */
virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+ /** Converts font settings if supported. */
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+
/** Reads the class table structure for embedded controls following the own
model from the 'f' stream. */
bool importClassTable( BinaryInputStream& rInStrm, AxClassTable& orClassTable );
@@ -672,13 +707,14 @@ protected:
sal_Int32 mnPicAlign; /// Anchor position of the picture.
sal_Int32 mnPicSizeMode; /// Clip, stretch, zoom.
bool mbPicTiling; /// True = picture is repeated.
+ bool mbFontSupport; /// True = control supports the font property.
};
typedef ::boost::shared_ptr< AxContainerModelBase > AxContainerModelRef;
// ============================================================================
-/** Model for a Forms 2.0 frame (group box). */
+/** Model for a Forms 2.0 frame control. */
class AxFrameModel : public AxContainerModelBase
{
public:
@@ -690,6 +726,38 @@ public:
// ============================================================================
+/** Model for a Forms 2.0 formpage control (a single page in a multipage control). */
+class AxFormPageModel : public AxContainerModelBase
+{
+public:
+ explicit AxFormPageModel();
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+};
+
+// ============================================================================
+
+/** Model for a Forms 2.0 multipage control. Contains the tabstrip control
+ (class AxTabStripModel) and the single pages (class AxFormPageModel). */
+class AxMultiPageModel : public AxContainerModelBase
+{
+public:
+ explicit AxMultiPageModel();
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+
+ /** Sets the tabstrip control model related to this multipage control.
+ Contains all formatting attributes of the page tabs. */
+ void setTabStripModel( const AxTabStripModelRef& rxTabStrip );
+
+private:
+ AxTabStripModelRef mxTabStrip;
+};
+
+// ============================================================================
+
/** Model for a Forms 2.0 user form. */
class AxUserFormModel : public AxContainerModelBase
{
diff --git a/oox/inc/oox/ole/vbacontrol.hxx b/oox/inc/oox/ole/vbacontrol.hxx
index ec1c25be6952..c2490b3506bf 100755
--- a/oox/inc/oox/ole/vbacontrol.hxx
+++ b/oox/inc/oox/ole/vbacontrol.hxx
@@ -39,8 +39,6 @@ namespace oox { class StorageBase; }
namespace oox {
namespace ole {
-class VbaFormControl;
-
// ============================================================================
/** Common properties for all controls that are part of a VBA user form or of
@@ -62,6 +60,10 @@ public:
inline const ::rtl::OUString& getName() const { return maName; }
/** Returns the position of the control in its parent. */
inline const AxPairData& getPosition() const { return maPos; }
+ /** Returns the unique identifier of this control. */
+ inline sal_Int32 getId() const { return mnId; }
+ /** Returns true, if the control is visible. */
+ bool isVisible() const;
/** Returns true, if this control is a container control. */
bool isContainer() const;
/** Returns the length of the stream data for stream based controls. */
@@ -122,6 +124,8 @@ public:
/** Returns the programmatical name of the control. */
::rtl::OUString getControlName() const;
+ /** Returns the unique identifier of this control. */
+ sal_Int32 getControlId() const;
/** Creates the UNO control model, inserts it into the passed container,
and converts all control properties. */
diff --git a/oox/inc/oox/vml/vmldrawing.hxx b/oox/inc/oox/vml/vmldrawing.hxx
index 2312514d7117..c2f8432dca6f 100644
--- a/oox/inc/oox/vml/vmldrawing.hxx
+++ b/oox/inc/oox/vml/vmldrawing.hxx
@@ -36,6 +36,7 @@ namespace com { namespace sun { namespace star {
namespace awt { struct Rectangle; }
namespace awt { class XControlModel; }
namespace drawing { class XDrawPage; }
+ namespace drawing { class XShape; }
} } }
namespace oox { namespace core { class XmlFilterBase; } }
@@ -123,7 +124,8 @@ public:
/** Final processing after import of the fragment. */
void finalizeFragmentImport();
- /** Creates and inserts all UNO shapes into the passed container. */
+ /** Creates and inserts all UNO shapes into the passed container. The virtual
+ function notifyShapeInserted() will be called for each new shape. */
void convertAndInsert() const;
/** Returns the registered info structure for an OLE object, if extant. */
@@ -146,6 +148,12 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& rxCtrlModel,
const ShapeClientData& rClientData ) const;
+ /** Derived classes may want to know that a shape has been inserted. Will
+ be called from the convertAndInsert() implementation. */
+ virtual void notifyShapeInserted(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rxShape,
+ const ::com::sun::star::awt::Rectangle& rShapeRect );
+
private:
typedef ::std::auto_ptr< ::oox::ole::EmbeddedForm > EmbeddedFormPtr;
typedef ::std::auto_ptr< ShapeContainer > ShapeContainerPtr;
diff --git a/oox/inc/oox/vml/vmlformatting.hxx b/oox/inc/oox/vml/vmlformatting.hxx
index 1a9c1811cf6b..db67d7a85af4 100644
--- a/oox/inc/oox/vml/vmlformatting.hxx
+++ b/oox/inc/oox/vml/vmlformatting.hxx
@@ -169,6 +169,7 @@ struct FillModel
OptValue< double > moFocus; /// Linear gradient focus of second color.
OptValue< DoublePair > moFocusPos; /// Rectanguar gradient focus position of second color.
OptValue< DoublePair > moFocusSize; /// Rectanguar gradient focus size of second color.
+ OptValue< ::rtl::OUString > moBitmapPath; /// Path to fill bitmap fragment.
OptValue< bool > moRotate; /// True = rotate gradient/bitmap with shape.
void assignUsed( const FillModel& rSource );
diff --git a/oox/inc/oox/vml/vmlshape.hxx b/oox/inc/oox/vml/vmlshape.hxx
index 18eaa7513fc5..7c770df28477 100644
--- a/oox/inc/oox/vml/vmlshape.hxx
+++ b/oox/inc/oox/vml/vmlshape.hxx
@@ -83,7 +83,7 @@ struct ShapeTypeModel
class ShapeType
{
public:
- explicit ShapeType( const Drawing& rDrawing );
+ explicit ShapeType( Drawing& rDrawing );
virtual ~ShapeType();
/** Returns read/write access to the shape template model structure. */
@@ -109,7 +109,7 @@ private:
::com::sun::star::awt::Rectangle getRelRectangle() const;
protected:
- const Drawing& mrDrawing; /// The VML drawing page that contains this shape.
+ Drawing& mrDrawing; /// The VML drawing page that contains this shape.
ShapeTypeModel maTypeModel; /// The model structure containing shape type data.
};
@@ -180,7 +180,7 @@ public:
const ShapeParentAnchor* pParentAnchor = 0 ) const;
protected:
- explicit ShapeBase( const Drawing& rDrawing );
+ explicit ShapeBase( Drawing& rDrawing );
/** Derived classes create the corresponding XShape and insert it into the passed container. */
virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
@@ -207,7 +207,7 @@ protected:
class SimpleShape : public ShapeBase
{
public:
- explicit SimpleShape( const Drawing& rDrawing, const ::rtl::OUString& rService );
+ explicit SimpleShape( Drawing& rDrawing, const ::rtl::OUString& rService );
protected:
/** Creates the corresponding XShape and inserts it into the passed container. */
@@ -226,7 +226,7 @@ private:
class RectangleShape : public SimpleShape
{
public:
- explicit RectangleShape( const Drawing& rDrawing );
+ explicit RectangleShape( Drawing& rDrawing );
};
// ============================================================================
@@ -235,7 +235,7 @@ public:
class EllipseShape : public SimpleShape
{
public:
- explicit EllipseShape( const Drawing& rDrawing );
+ explicit EllipseShape( Drawing& rDrawing );
};
// ============================================================================
@@ -244,7 +244,7 @@ public:
class PolyLineShape : public SimpleShape
{
public:
- explicit PolyLineShape( const Drawing& rDrawing );
+ explicit PolyLineShape( Drawing& rDrawing );
protected:
/** Creates the corresponding XShape and inserts it into the passed container. */
@@ -260,7 +260,7 @@ protected:
class CustomShape : public SimpleShape
{
public:
- explicit CustomShape( const Drawing& rDrawing );
+ explicit CustomShape( Drawing& rDrawing );
protected:
/** Creates the corresponding XShape and inserts it into the passed container. */
@@ -277,7 +277,7 @@ protected:
class ComplexShape : public CustomShape
{
public:
- explicit ComplexShape( const Drawing& rDrawing );
+ explicit ComplexShape( Drawing& rDrawing );
protected:
/** Creates the corresponding XShape and inserts it into the passed container. */
@@ -293,7 +293,7 @@ protected:
class GroupShape : public ShapeBase
{
public:
- explicit GroupShape( const Drawing& rDrawing );
+ explicit GroupShape( Drawing& rDrawing );
virtual ~GroupShape();
/** Returns read/write access to the container of child shapes and templates. */
diff --git a/oox/inc/oox/vml/vmlshapecontainer.hxx b/oox/inc/oox/vml/vmlshapecontainer.hxx
index d2682c89fd6c..a878fda2b74c 100644
--- a/oox/inc/oox/vml/vmlshapecontainer.hxx
+++ b/oox/inc/oox/vml/vmlshapecontainer.hxx
@@ -56,7 +56,7 @@ struct ShapeParentAnchor
class ShapeContainer
{
public:
- explicit ShapeContainer( const Drawing& rDrawing );
+ explicit ShapeContainer( Drawing& rDrawing );
~ShapeContainer();
/** Creates and returns a new shape template object. */
@@ -101,7 +101,7 @@ private:
typedef RefMap< ::rtl::OUString, ShapeType > ShapeTypeMap;
typedef RefMap< ::rtl::OUString, ShapeBase > ShapeMap;
- const Drawing& mrDrawing; /// The VML drawing page that contains this shape.
+ Drawing& mrDrawing; /// The VML drawing page that contains this shape.
ShapeTypeVector maTypes; /// All shape templates.
ShapeVector maShapes; /// All shape definitions.
ShapeTypeMap maTypesById; /// All shape templates mapped by identifier.
diff --git a/oox/inc/oox/vml/vmlshapecontext.hxx b/oox/inc/oox/vml/vmlshapecontext.hxx
index a72d3fd09039..bda7d90f34e2 100644
--- a/oox/inc/oox/vml/vmlshapecontext.hxx
+++ b/oox/inc/oox/vml/vmlshapecontext.hxx
@@ -94,6 +94,9 @@ private:
/** Processes the 'style' attribute. */
void setStyle( const ::rtl::OUString& rStyle );
+ /** Resolve a relation identifier to a fragment path. */
+ OptValue< ::rtl::OUString > decodeFragmentPath( const AttributeList& rAttribs, sal_Int32 nToken ) const;
+
private:
ShapeTypeModel& mrTypeModel;
};
diff --git a/oox/inc/oox/xls/biffhelper.hxx b/oox/inc/oox/xls/biffhelper.hxx
index 10c62aa17513..ce43e44fb613 100644
--- a/oox/inc/oox/xls/biffhelper.hxx
+++ b/oox/inc/oox/xls/biffhelper.hxx
@@ -151,6 +151,7 @@ const sal_Int32 OOBIN_ID_NUMFMT = 0x002C;
const sal_Int32 OOBIN_ID_NUMFMTS = 0x0267;
const sal_Int32 OOBIN_ID_OLEOBJECT = 0x027F;
const sal_Int32 OOBIN_ID_OLEOBJECTS = 0x027E;
+const sal_Int32 OOBIN_ID_OLESIZE = 0x0225;
const sal_Int32 OOBIN_ID_PAGEMARGINS = 0x01DC;
const sal_Int32 OOBIN_ID_PAGESETUP = 0x01DE;
const sal_Int32 OOBIN_ID_PANE = 0x0097;
@@ -428,6 +429,7 @@ const sal_uInt16 BIFF2_ID_NUMBER = 0x0003;
const sal_uInt16 BIFF3_ID_NUMBER = 0x0203;
const sal_uInt16 BIFF_ID_OBJ = 0x005D;
const sal_uInt16 BIFF_ID_OBJECTPROTECT = 0x0063;
+const sal_uInt16 BIFF_ID_OLESIZE = 0x00DE;
const sal_uInt16 BIFF_ID_PAGELAYOUTVIEW = 0x088B;
const sal_uInt16 BIFF_ID_PAGESETUP = 0x00A1;
const sal_uInt16 BIFF_ID_PALETTE = 0x0092;
diff --git a/oox/inc/oox/xls/drawingfragment.hxx b/oox/inc/oox/xls/drawingfragment.hxx
index 22fddd373a86..66d716220b8a 100644
--- a/oox/inc/oox/xls/drawingfragment.hxx
+++ b/oox/inc/oox/xls/drawingfragment.hxx
@@ -177,6 +177,11 @@ public:
virtual void convertControlClientData(
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& rxCtrlModel,
const ::oox::vml::ShapeClientData& rClientData ) const;
+
+ /** Updates the bounding box covering all shapes of this drawing. */
+ virtual void notifyShapeInserted(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rxShape,
+ const ::com::sun::star::awt::Rectangle& rShapeRect );
};
// ============================================================================
diff --git a/oox/inc/oox/xls/viewsettings.hxx b/oox/inc/oox/xls/viewsettings.hxx
index 9715644cd54c..1f82aedeef91 100644
--- a/oox/inc/oox/xls/viewsettings.hxx
+++ b/oox/inc/oox/xls/viewsettings.hxx
@@ -179,15 +179,24 @@ public:
/** Imports the workbookView element containing workbook view settings. */
void importWorkbookView( const AttributeList& rAttribs );
+ /** Imports the oleSize element containing the visible size of the workbook. */
+ void importOleSize( const AttributeList& rAttribs );
/** Imports the WORKBOOKVIEW record containing workbook view settings. */
void importWorkbookView( RecordInputStream& rStrm );
+ /** Imports the OLESIZE record containing the visible size of the workbook. */
+ void importOleSize( RecordInputStream& rStrm );
/** Imports the WINDOW1 record containing workbook view settings. */
void importWindow1( BiffInputStream& rStrm );
+ /** Imports the OLESIZE record containing the visible size of the workbook. */
+ void importOleSize( BiffInputStream& rStrm );
/** Stores converted view settings for a specific worksheet. */
void setSheetViewSettings( sal_Int16 nSheet,
const SheetViewModelRef& rxSheetView,
const ::com::sun::star::uno::Any& rProperties );
+ /** Stores the used area for a specific worksheet. */
+ void setSheetUsedArea(
+ const ::com::sun::star::table::CellRangeAddress& rUsedArea );
/** Converts all imported document view settings. */
void finalizeImport();
@@ -199,13 +208,18 @@ private:
WorkbookViewModel& createWorkbookView();
private:
- typedef RefVector< WorkbookViewModel > WorkbookViewModelVec;
- typedef RefMap< sal_Int16, SheetViewModel > SheetViewModelMap;
- typedef ::std::map< sal_Int16, ::com::sun::star::uno::Any > SheetPropertiesMap;
+ typedef RefVector< WorkbookViewModel > WorkbookViewModelVec;
+ typedef RefMap< sal_Int16, SheetViewModel > SheetViewModelMap;
+ typedef ::std::map< sal_Int16, ::com::sun::star::uno::Any > SheetPropertiesMap;
+ typedef ::std::map< sal_Int16, ::com::sun::star::table::CellRangeAddress > SheetUsedAreaMap;
WorkbookViewModelVec maBookViews; /// Workbook view models.
SheetViewModelMap maSheetViews; /// Active view model for each sheet.
SheetPropertiesMap maSheetProps; /// Converted property sequences for each sheet.
+ SheetUsedAreaMap maSheetUsedAreas; /// Used area (cell range) of every sheet.
+ ::com::sun::star::table::CellRangeAddress
+ maOleSize; /// Visible area if this is an embedded OLE object.
+ bool mbValidOleSize; /// True = imported OLE size is a valid cell range.
};
// ============================================================================
diff --git a/oox/inc/oox/xls/workbooksettings.hxx b/oox/inc/oox/xls/workbooksettings.hxx
index d0f4ca17e73e..8ba322103955 100644
--- a/oox/inc/oox/xls/workbooksettings.hxx
+++ b/oox/inc/oox/xls/workbooksettings.hxx
@@ -109,8 +109,6 @@ public:
/** Sets the save external linked values flag, e.g. from the WSBOOL record. */
void setSaveExtLinkValues( bool bSaveExtLinks );
- /** Imports the FILESHARING record. */
- void importFileSharing( BiffInputStream& rStrm );
/** Imports the BOOKBOOL record. */
void importBookBool( BiffInputStream& rStrm );
/** Imports the CALCCOUNT record. */
@@ -123,6 +121,8 @@ public:
void importDateMode( BiffInputStream& rStrm );
/** Imports the DELTA record. */
void importDelta( BiffInputStream& rStrm );
+ /** Imports the FILESHARING record. */
+ void importFileSharing( BiffInputStream& rStrm );
/** Imports the HIDEOBJ record. */
void importHideObj( BiffInputStream& rStrm );
/** Imports the ITERATION record. */
diff --git a/oox/inc/oox/xls/worksheethelper.hxx b/oox/inc/oox/xls/worksheethelper.hxx
index 4fdd827ff648..632d7027403f 100644
--- a/oox/inc/oox/xls/worksheethelper.hxx
+++ b/oox/inc/oox/xls/worksheethelper.hxx
@@ -35,6 +35,7 @@
namespace com { namespace sun { namespace star {
namespace awt { struct Point; }
+ namespace awt { struct Rectangle; }
namespace awt { struct Size; }
namespace util { struct DateTime; }
namespace drawing { class XDrawPage; }
@@ -355,8 +356,6 @@ public:
/** Changes the current sheet type. */
void setSheetType( WorksheetType eSheetType );
- /** Sets the dimension (used area) of the sheet. */
- void setDimension( const ::com::sun::star::table::CellRangeAddress& rRange );
/** Stores the cell formatting data of the current cell. */
void setCellFormat( const CellModel& rModel );
/** Merges the cells in the passed cell range. */
@@ -380,6 +379,14 @@ public:
/** Sets the path to the legacy VML drawing fragment of this sheet. */
void setVmlDrawingPath( const ::rtl::OUString& rVmlDrawingPath );
+ /** Extends the used area of this sheet by the passed cell position. */
+ void extendUsedArea( const ::com::sun::star::table::CellAddress& rAddress );
+ /** Extends the used area of this sheet by the passed cell range. */
+ void extendUsedArea( const ::com::sun::star::table::CellRangeAddress& rRange );
+ /** Extends the shape bounding box by the position and size of the passed rectangle. */
+ void extendShapeBoundingBox(
+ const ::com::sun::star::awt::Rectangle& rShapeRect );
+
/** Sets base width for all columns (without padding pixels). This value
is only used, if width has not been set with setDefaultColumnWidth(). */
void setBaseColumnWidth( sal_Int32 nWidth );
diff --git a/oox/source/core/filterbase.cxx b/oox/source/core/filterbase.cxx
index 902784cafe80..fb9e43c732de 100755..100644
--- a/oox/source/core/filterbase.cxx
+++ b/oox/source/core/filterbase.cxx
@@ -130,10 +130,9 @@ enum FilterDirection
struct FilterBaseImpl
{
- typedef ::boost::shared_ptr< GraphicHelper > GraphicHelperRef;
- typedef ::boost::shared_ptr< ModelObjectHelper > ModelObjHelperRef;
- typedef ::boost::shared_ptr< OleObjectHelper > OleObjHelperRef;
- typedef ::std::map< OUString, Reference< XGraphic > > EmbeddedGraphicMap;
+ typedef ::boost::shared_ptr< GraphicHelper > GraphicHelperRef;
+ typedef ::boost::shared_ptr< ModelObjectHelper > ModelObjHelperRef;
+ typedef ::boost::shared_ptr< OleObjectHelper > OleObjHelperRef;
FilterDirection meDirection;
SequenceAsHashMap maArguments;
@@ -144,7 +143,6 @@ struct FilterBaseImpl
GraphicHelperRef mxGraphicHelper; /// Graphic and graphic object handling.
ModelObjHelperRef mxModelObjHelper; /// Tables to create new named drawing objects.
OleObjHelperRef mxOleObjHelper; /// OLE object handling.
- EmbeddedGraphicMap maEmbeddedGraphics; /// Maps all imported embedded graphics by their path.
Reference< XMultiServiceFactory > mxGlobalFactory;
Reference< XModel > mxModel;
@@ -200,11 +198,7 @@ void FilterBaseImpl::finalizeFilter()
{
try
{
- // clear the 'ComponentData' property in the descriptor
- MediaDescriptor::iterator aIt = maMediaDesc.find( MediaDescriptor::PROP_COMPONENTDATA() );
- if( aIt != maMediaDesc.end() )
- aIt->second.clear();
- // write the descriptor back to the document model (adds the password)
+ // write the descriptor back to the document model (adds the passwords)
mxModel->attachResource( maFileUrl, maMediaDesc.getAsConstPropertyValueList() );
// unlock the model controllers
mxModel->unlockControllers();
@@ -248,11 +242,6 @@ const Reference< XMultiServiceFactory >& FilterBase::getGlobalFactory() const
return mxImpl->mxGlobalFactory;
}
-MediaDescriptor& FilterBase::getMediaDescriptor() const
-{
- return mxImpl->maMediaDesc;
-}
-
const Reference< XModel >& FilterBase::getModel() const
{
return mxImpl->mxModel;
@@ -278,6 +267,11 @@ const Reference< XInteractionHandler >& FilterBase::getInteractionHandler() cons
return mxImpl->mxInteractionHandler;
}
+MediaDescriptor& FilterBase::getMediaDescriptor() const
+{
+ return mxImpl->maMediaDesc;
+}
+
const OUString& FilterBase::getFileUrl() const
{
return mxImpl->maFileUrl;
@@ -423,31 +417,6 @@ bool FilterBase::importBinaryData( StreamDataSequence& orDataSeq, const OUString
return true;
}
-Reference< XGraphic > FilterBase::importEmbeddedGraphic( const OUString& rStreamName ) const
-{
- Reference< XGraphic > xGraphic;
- OSL_ENSURE( rStreamName.getLength() > 0, "FilterBase::importEmbeddedGraphic - empty stream name" );
- if( rStreamName.getLength() > 0 )
- {
- FilterBaseImpl::EmbeddedGraphicMap::const_iterator aIt = mxImpl->maEmbeddedGraphics.find( rStreamName );
- if( aIt == mxImpl->maEmbeddedGraphics.end() )
- {
- xGraphic = getGraphicHelper().importGraphic( openInputStream( rStreamName ) );
- if( xGraphic.is() )
- mxImpl->maEmbeddedGraphics[ rStreamName ] = xGraphic;
- }
- else
- xGraphic = aIt->second;
- }
- return xGraphic;
-}
-
-OUString FilterBase::importEmbeddedGraphicObject( const OUString& rStreamName ) const
-{
- Reference< XGraphic > xGraphic = importEmbeddedGraphic( rStreamName );
- return xGraphic.is() ? getGraphicHelper().createGraphicObject( xGraphic ) : OUString();
-}
-
// com.sun.star.lang.XServiceInfo interface -----------------------------------
OUString SAL_CALL FilterBase::getImplementationName() throw( RuntimeException )
@@ -560,7 +529,7 @@ Reference< XStream > FilterBase::implGetOutputStream( MediaDescriptor& rMediaDes
void FilterBase::setMediaDescriptor( const Sequence< PropertyValue >& rMediaDescSeq )
{
- mxImpl->maMediaDesc = rMediaDescSeq;
+ mxImpl->maMediaDesc << rMediaDescSeq;
switch( mxImpl->meDirection )
{
@@ -587,7 +556,7 @@ void FilterBase::setMediaDescriptor( const Sequence< PropertyValue >& rMediaDesc
GraphicHelper* FilterBase::implCreateGraphicHelper() const
{
// default: return base implementation without any special behaviour
- return new GraphicHelper( mxImpl->mxGlobalFactory, mxImpl->mxTargetFrame );
+ return new GraphicHelper( mxImpl->mxGlobalFactory, mxImpl->mxTargetFrame, mxImpl->mxStorage );
}
// ============================================================================
diff --git a/oox/source/core/filterdetect.cxx b/oox/source/core/filterdetect.cxx
index 12cafc48305a..00244c224778 100644
--- a/oox/source/core/filterdetect.cxx
+++ b/oox/source/core/filterdetect.cxx
@@ -41,6 +41,7 @@
#include "oox/ole/olestorage.hxx"
using ::rtl::OUString;
+using ::com::sun::star::uno::Any;
using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::RuntimeException;
@@ -474,9 +475,7 @@ Reference< XInputStream > FilterDetect::extractUnencryptedPackage( MediaDescript
return xInStrm;
// check if a temporary file is passed in the 'ComponentData' property
- Sequence< NamedValue > aCompData = rMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_COMPONENTDATA(), Sequence< NamedValue >() );
- SequenceAsHashMap aCompDataMap( aCompData );
- Reference< XStream > xDecrypted = aCompDataMap.getUnpackedValueOrDefault( CREATE_OUSTRING( "DecryptedPackage" ), Reference< XStream >() );
+ Reference< XStream > xDecrypted( rMediaDesc.getComponentDataEntry( CREATE_OUSTRING( "DecryptedPackage" ) ), UNO_QUERY );
if( xDecrypted.is() )
{
Reference< XInputStream > xDecrInStrm = xDecrypted->getInputStream();
@@ -559,10 +558,7 @@ Reference< XInputStream > FilterDetect::extractUnencryptedPackage( MediaDescript
aDecryptedPackage.seekToStart();
// store temp file in media descriptor to keep it alive
- Sequence< NamedValue > aPropSeq( 1 );
- aPropSeq[ 0 ].Name = CREATE_OUSTRING( "DecryptedPackage" );
- aPropSeq[ 0 ].Value <<= xTempFile;
- rMediaDesc[ MediaDescriptor::PROP_COMPONENTDATA() ] <<= aPropSeq;
+ rMediaDesc.setComponentDataEntry( CREATE_OUSTRING( "DecryptedPackage" ), Any( xTempFile ) );
Reference< XInputStream > xDecrInStrm = xTempFile->getInputStream();
if( lclIsZipPackage( mxFactory, xDecrInStrm ) )
diff --git a/oox/source/docprop/docprophandler.cxx b/oox/source/docprop/docprophandler.cxx
index 97453d5bddb0..1830a8c5d5f9 100644
--- a/oox/source/docprop/docprophandler.cxx
+++ b/oox/source/docprop/docprophandler.cxx
@@ -618,7 +618,7 @@ void SAL_CALL OOXMLDocPropHandler::characters( const ::rtl::OUString& aChars )
case XML_bstr|NMSP_VT:
case XML_lpstr|NMSP_VT:
case XML_lpwstr|NMSP_VT:
- AddCustomProperty( uno::makeAny( AttributeList::decodeXString( aChars ) ) ); // the property has string type
+ AddCustomProperty( uno::makeAny( AttributeConversion::decodeXString( aChars ) ) ); // the property has string type
break;
case XML_date|NMSP_VT:
diff --git a/oox/source/drawingml/fillpropertiesgroupcontext.cxx b/oox/source/drawingml/fillpropertiesgroupcontext.cxx
index 8adffb265240..b9d7fa7e1142 100644
--- a/oox/source/drawingml/fillpropertiesgroupcontext.cxx
+++ b/oox/source/drawingml/fillpropertiesgroupcontext.cxx
@@ -27,6 +27,7 @@
#include "oox/drawingml/fillpropertiesgroupcontext.hxx"
#include "oox/helper/attributelist.hxx"
+#include "oox/helper/graphichelper.hxx"
#include "oox/core/namespaces.hxx"
#include "oox/core/xmlfilterbase.hxx"
#include "oox/drawingml/drawingmltypes.hxx"
@@ -170,7 +171,7 @@ BlipContext::BlipContext( ContextHandler& rParent,
// internal picture URL
OUString aFragmentPath = getFragmentPathFromRelId( aAttribs.getString( R_TOKEN( embed ), OUString() ) );
if( aFragmentPath.getLength() > 0 )
- mrBlipProps.mxGraphic = getFilter().importEmbeddedGraphic( aFragmentPath );
+ mrBlipProps.mxGraphic = getFilter().getGraphicHelper().importEmbeddedGraphic( aFragmentPath );
}
else if( aAttribs.hasAttribute( R_TOKEN( link ) ) )
{
diff --git a/oox/source/drawingml/graphicshapecontext.cxx b/oox/source/drawingml/graphicshapecontext.cxx
index 8537017c2118..48461bb2858e 100644
--- a/oox/source/drawingml/graphicshapecontext.cxx
+++ b/oox/source/drawingml/graphicshapecontext.cxx
@@ -36,6 +36,7 @@
#include "oox/core/namespaces.hxx"
#include "oox/core/xmlfilterbase.hxx"
#include "oox/helper/attributelist.hxx"
+#include "oox/helper/graphichelper.hxx"
#include "oox/helper/propertyset.hxx"
#include "oox/vml/vmldrawing.hxx"
#include "oox/vml/vmlshape.hxx"
@@ -190,7 +191,7 @@ OUString CreateOleObjectCallback::onCreateXShape( const OUString&, const awt::Re
// import and store the graphic
if( aGraphicPath.getLength() > 0 )
{
- Reference< graphic::XGraphic > xGraphic = mrFilter.importEmbeddedGraphic( aGraphicPath );
+ Reference< graphic::XGraphic > xGraphic = mrFilter.getGraphicHelper().importEmbeddedGraphic( aGraphicPath );
if( xGraphic.is() )
maShapeProps[ PROP_Graphic ] <<= xGraphic;
}
diff --git a/oox/source/drawingml/textbodyproperties.cxx b/oox/source/drawingml/textbodyproperties.cxx
index afd4766b0106..6cec7643e58e 100644
--- a/oox/source/drawingml/textbodyproperties.cxx
+++ b/oox/source/drawingml/textbodyproperties.cxx
@@ -2,13 +2,10 @@
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2008 by Sun Microsystems, Inc.
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: textbodyproperties.cxx,v $
- * $Revision: 1.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/oox/source/dump/biffdumper.cxx b/oox/source/dump/biffdumper.cxx
index aa32cbe53d1b..30938f9ebbe6 100644
--- a/oox/source/dump/biffdumper.cxx
+++ b/oox/source/dump/biffdumper.cxx
@@ -2532,6 +2532,11 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpObjRec();
break;
+ case BIFF_ID_OLESIZE:
+ dumpUnused( 2 );
+ dumpRange( "visible-range", false );
+ break;
+
case BIFF_ID_PAGELAYOUTVIEW:
dumpFrHeader( true, true );
dumpDec< sal_uInt16 >( "scaling", "CONV-PERCENT" );
diff --git a/oox/source/dump/biffdumper.ini b/oox/source/dump/biffdumper.ini
index 2d1f4bdf7897..d4b862825b3c 100644
--- a/oox/source/dump/biffdumper.ini
+++ b/oox/source/dump/biffdumper.ini
@@ -2075,6 +2075,7 @@ flagslist=XF-PROTECTION-FLAGS
0x01=locked
0x02=formula-hidden
0x04=style-xf
+ 0x08=apostroph-quote
end
flagslist=XF-USEDATTRIBS-FLAGS
diff --git a/oox/source/dump/dumperbase.ini b/oox/source/dump/dumperbase.ini
index 84d742c2b35f..34ef302c784c 100644
--- a/oox/source/dump/dumperbase.ini
+++ b/oox/source/dump/dumperbase.ini
@@ -254,7 +254,7 @@ end
combilist=RK-FLAGS
0x00000001=div-100
0x00000002=integer
- 0xFFFFFFFC=int32,dec,value,,filter=0x2~0x2
+ 0xFFFFFFFC=int32,hex,value
end
constlist=CHARSET
diff --git a/oox/source/dump/oledumper.ini b/oox/source/dump/oledumper.ini
index 7efe424b0ddc..13478464e6b3 100644
--- a/oox/source/dump/oledumper.ini
+++ b/oox/source/dump/oledumper.ini
@@ -206,7 +206,7 @@ shortlist=COMCTL-SCROLLBAR-ARROWS,0,both,left-up,right-down
constlist=COMCTL-SLIDER-SELECTRANGE
0x00000000=off
0x0000FFFF=on
- end
+end
shortlist=COMCTL-SLIDER-TICKSTYLE,0,bottom-right,top-left,both,no-ticks
@@ -218,13 +218,13 @@ shortlist=COMCTL-SLIDER-TICKSTYLE,0,bottom-right,top-left,both,no-ticks
flagslist=COMCTL-UPDOWN-FLAGS1
0x00000001=!align-left!align-right
0x00000004=!vertical!horizontal
- end
+end
flagslist=COMCTL-UPDOWN-FLAGS2
0x00000004=wrap
0x00000020=ole-drop-manual
0x00000080=enabled
- end
+end
# image list -----------------------------------------------------------------
@@ -725,11 +725,6 @@ combilist=VBA-FORMSITE-CLASSIDCACHE
0x8000=!predefined-class-id!class-table-index
end
-constlist=VBA-FORMSITE-CLASSIDCACHEINDEX
- include=VBA-FORMSITE-CLASSNAMES
- 0x7FFF=invalid
-end
-
constlist=VBA-FORMSITE-CLASSNAMES
7=Forms.Form.1
12=Forms.Image.1
@@ -749,6 +744,11 @@ constlist=VBA-FORMSITE-CLASSNAMES
57=Forms.MultiPage.1
end
+constlist=VBA-FORMSITE-CLASSIDCACHEINDEX
+ include=VBA-FORMSITE-CLASSNAMES
+ 0x7FFF=invalid
+end
+
# form design extender ------------------------------------------------------
flagslist=VBA-FORMDESIGNEXT-PROPERTIES
diff --git a/oox/source/dump/xlsbdumper.cxx b/oox/source/dump/xlsbdumper.cxx
index 80fccddff2ea..dd78ac3c4e2e 100644
--- a/oox/source/dump/xlsbdumper.cxx
+++ b/oox/source/dump/xlsbdumper.cxx
@@ -1626,6 +1626,10 @@ void RecordStreamObject::implDumpRecordBody()
}
break;
+ case OOBIN_ID_OLESIZE:
+ dumpRange( "visible-range" );
+ break;
+
case OOBIN_ID_PAGEMARGINS:
dumpDec< double >( "left-margin" );
dumpDec< double >( "right-margin" );
diff --git a/oox/source/dump/xlsbdumper.ini b/oox/source/dump/xlsbdumper.ini
index d8bc97ddb6bc..f2ac3b49b4d6 100644
--- a/oox/source/dump/xlsbdumper.ini
+++ b/oox/source/dump/xlsbdumper.ini
@@ -216,7 +216,7 @@ multilist=RECORD-NAMES
0x0208=VOLTYPETP,VOLTYPETP_END,VOLTYPESTP,VOLTYPETR,,VOLTYPE_ERROR,,
0x0210=CALCCHAIN,CALCCHAIN_END,,,,,,SHEETPROTECTION
0x0218=,PHONETICPR,,,,,,
- 0x0220=,,,,,,DRAWING,LEGACYDRAWING
+ 0x0220=,,,,,OLESIZE,DRAWING,LEGACYDRAWING
0x0230=,,PICTURE,,CFCOLOR,INDEXEDCOLORS,INDEXEDCOLORS_END,
0x0238=,MRUCOLORS,MRUCOLORS_END,,COLOR,DATAVALIDATIONS,DATAVALIDATIONS_END,
diff --git a/oox/source/helper/attributelist.cxx b/oox/source/helper/attributelist.cxx
index 4e121497c452..5479fae46f82 100644
--- a/oox/source/helper/attributelist.cxx
+++ b/oox/source/helper/attributelist.cxx
@@ -72,22 +72,9 @@ sal_Unicode lclGetXChar( const sal_Unicode*& rpcStr, const sal_Unicode* pcEnd )
} // namespace
-// ============================================================================
-
-AttributeList::AttributeList( const Reference< XFastAttributeList >& rxAttribs ) :
- mxAttribs( rxAttribs )
-{
- OSL_ENSURE( mxAttribs.is(), "AttributeList::AttributeList - missing attribute list interface" );
-}
-
-bool AttributeList::hasAttribute( sal_Int32 nElement ) const
-{
- return mxAttribs->hasAttribute( nElement );
-}
-
-// static string conversion -----------------------------------------------
+// ----------------------------------------------------------------------------
-OUString AttributeList::decodeXString( const OUString& rValue )
+OUString AttributeConversion::decodeXString( const OUString& rValue )
{
// string shorter than one encoded character - no need to decode
if( rValue.getLength() < XSTRING_ENCCHAR_LEN )
@@ -100,127 +87,146 @@ OUString AttributeList::decodeXString( const OUString& rValue )
return aBuffer.makeStringAndClear();
}
-double AttributeList::decodeDouble( const OUString& rValue )
+double AttributeConversion::decodeDouble( const OUString& rValue )
{
return rValue.toDouble();
}
-sal_Int32 AttributeList::decodeInteger( const OUString& rValue )
+sal_Int32 AttributeConversion::decodeInteger( const OUString& rValue )
{
return rValue.toInt32();
}
-sal_uInt32 AttributeList::decodeUnsigned( const OUString& rValue )
+sal_uInt32 AttributeConversion::decodeUnsigned( const OUString& rValue )
{
return getLimitedValue< sal_uInt32, sal_Int64 >( rValue.toInt64(), 0, SAL_MAX_UINT32 );
}
-sal_Int64 AttributeList::decodeHyper( const OUString& rValue )
+sal_Int64 AttributeConversion::decodeHyper( const OUString& rValue )
{
return rValue.toInt64();
}
-sal_Int32 AttributeList::decodeIntegerHex( const OUString& rValue )
+sal_Int32 AttributeConversion::decodeIntegerHex( const OUString& rValue )
{
return rValue.toInt32( 16 );
}
-sal_uInt32 AttributeList::decodeUnsignedHex( const OUString& rValue )
+sal_uInt32 AttributeConversion::decodeUnsignedHex( const OUString& rValue )
{
return getLimitedValue< sal_uInt32, sal_Int64 >( rValue.toInt64( 16 ), 0, SAL_MAX_UINT32 );
}
-sal_Int64 AttributeList::decodeHyperHex( const OUString& rValue )
+sal_Int64 AttributeConversion::decodeHyperHex( const OUString& rValue )
{
return rValue.toInt64( 16 );
}
+// ============================================================================
+
+AttributeList::AttributeList( const Reference< XFastAttributeList >& rxAttribs ) :
+ mxAttribs( rxAttribs )
+{
+ OSL_ENSURE( mxAttribs.is(), "AttributeList::AttributeList - missing attribute list interface" );
+}
+
+bool AttributeList::hasAttribute( sal_Int32 nAttrToken ) const
+{
+ return mxAttribs->hasAttribute( nAttrToken );
+}
+
// optional return values -----------------------------------------------------
-OptValue< sal_Int32 > AttributeList::getToken( sal_Int32 nElement ) const
+OptValue< sal_Int32 > AttributeList::getToken( sal_Int32 nAttrToken ) const
{
- sal_Int32 nToken = mxAttribs->getOptionalValueToken( nElement, XML_TOKEN_INVALID );
+ sal_Int32 nToken = mxAttribs->getOptionalValueToken( nAttrToken, XML_TOKEN_INVALID );
return OptValue< sal_Int32 >( nToken != XML_TOKEN_INVALID, nToken );
}
-OptValue< OUString > AttributeList::getString( sal_Int32 nElement ) const
+OptValue< OUString > AttributeList::getString( sal_Int32 nAttrToken ) const
{
- return OptValue< OUString >( mxAttribs->hasAttribute( nElement ), mxAttribs->getOptionalValue( nElement ) );
+ // check if the attribute exists (empty string may be different to missing attribute)
+ if( mxAttribs->hasAttribute( nAttrToken ) )
+ return OptValue< OUString >( mxAttribs->getOptionalValue( nAttrToken ) );
+ return OptValue< OUString >();
}
-OptValue< OUString > AttributeList::getXString( sal_Int32 nElement ) const
+OptValue< OUString > AttributeList::getXString( sal_Int32 nAttrToken ) const
{
- return OptValue< OUString >( mxAttribs->hasAttribute( nElement ), decodeXString( mxAttribs->getOptionalValue( nElement ) ) );
+ // check if the attribute exists (empty string may be different to missing attribute)
+ if( mxAttribs->hasAttribute( nAttrToken ) )
+ return OptValue< OUString >( AttributeConversion::decodeXString( mxAttribs->getOptionalValue( nAttrToken ) ) );
+ return OptValue< OUString >();
}
-OptValue< double > AttributeList::getDouble( sal_Int32 nElement ) const
+OptValue< double > AttributeList::getDouble( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
bool bValid = aValue.getLength() > 0;
- return OptValue< double >( bValid, bValid ? decodeDouble( aValue ) : 0.0 );
+ return OptValue< double >( bValid, bValid ? AttributeConversion::decodeDouble( aValue ) : 0.0 );
}
-OptValue< sal_Int32 > AttributeList::getInteger( sal_Int32 nElement ) const
+OptValue< sal_Int32 > AttributeList::getInteger( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
bool bValid = aValue.getLength() > 0;
- return OptValue< sal_Int32 >( bValid, bValid ? decodeInteger( aValue ) : 0 );
+ return OptValue< sal_Int32 >( bValid, bValid ? AttributeConversion::decodeInteger( aValue ) : 0 );
}
-OptValue< sal_uInt32 > AttributeList::getUnsigned( sal_Int32 nElement ) const
+OptValue< sal_uInt32 > AttributeList::getUnsigned( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
bool bValid = aValue.getLength() > 0;
- return OptValue< sal_uInt32 >( bValid, decodeUnsigned( aValue ) );
+ return OptValue< sal_uInt32 >( bValid, AttributeConversion::decodeUnsigned( aValue ) );
}
-OptValue< sal_Int64 > AttributeList::getHyper( sal_Int32 nElement ) const
+OptValue< sal_Int64 > AttributeList::getHyper( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
bool bValid = aValue.getLength() > 0;
- return OptValue< sal_Int64 >( bValid, bValid ? decodeHyper( aValue ) : 0 );
+ return OptValue< sal_Int64 >( bValid, bValid ? AttributeConversion::decodeHyper( aValue ) : 0 );
}
-OptValue< sal_Int32 > AttributeList::getIntegerHex( sal_Int32 nElement ) const
+OptValue< sal_Int32 > AttributeList::getIntegerHex( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
bool bValid = aValue.getLength() > 0;
- return OptValue< sal_Int32 >( bValid, bValid ? decodeIntegerHex( aValue ) : 0 );
+ return OptValue< sal_Int32 >( bValid, bValid ? AttributeConversion::decodeIntegerHex( aValue ) : 0 );
}
-OptValue< sal_uInt32 > AttributeList::getUnsignedHex( sal_Int32 nElement ) const
+OptValue< sal_uInt32 > AttributeList::getUnsignedHex( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
bool bValid = aValue.getLength() > 0;
- return OptValue< sal_uInt32 >( bValid, bValid ? decodeUnsignedHex( aValue ) : 0 );
+ return OptValue< sal_uInt32 >( bValid, bValid ? AttributeConversion::decodeUnsignedHex( aValue ) : 0 );
}
-OptValue< sal_Int64 > AttributeList::getHyperHex( sal_Int32 nElement ) const
+OptValue< sal_Int64 > AttributeList::getHyperHex( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
bool bValid = aValue.getLength() > 0;
- return OptValue< sal_Int64 >( bValid, bValid ? decodeHyperHex( aValue ) : 0 );
+ return OptValue< sal_Int64 >( bValid, bValid ? AttributeConversion::decodeHyperHex( aValue ) : 0 );
}
-OptValue< bool > AttributeList::getBool( sal_Int32 nElement ) const
+OptValue< bool > AttributeList::getBool( sal_Int32 nAttrToken ) const
{
// boolean attributes may be "t", "f", "true", "false", "on", "off", "1", or "0"
- switch( getToken( nElement, -1 ) )
+ switch( getToken( nAttrToken, XML_TOKEN_INVALID ) )
{
- case XML_t: return OptValue< bool >( true, true ); // used in VML
- case XML_true: return OptValue< bool >( true, true );
- case XML_on: return OptValue< bool >( true, true );
- case XML_f: return OptValue< bool >( true, false ); // used in VML
- case XML_false: return OptValue< bool >( true, false );
- case XML_off: return OptValue< bool >( true, false );
+ case XML_t: return OptValue< bool >( true ); // used in VML
+ case XML_true: return OptValue< bool >( true );
+ case XML_on: return OptValue< bool >( true );
+ case XML_f: return OptValue< bool >( false ); // used in VML
+ case XML_false: return OptValue< bool >( false );
+ case XML_off: return OptValue< bool >( false );
}
- OptValue< sal_Int32 > onValue = getInteger( nElement );
+ OptValue< sal_Int32 > onValue = getInteger( nAttrToken );
return OptValue< bool >( onValue.has(), onValue.get() != 0 );
}
-OptValue< DateTime > AttributeList::getDateTime( sal_Int32 nElement ) const
+OptValue< DateTime > AttributeList::getDateTime( sal_Int32 nAttrToken ) const
{
- OUString aValue = mxAttribs->getOptionalValue( nElement );
+ OUString aValue = mxAttribs->getOptionalValue( nAttrToken );
DateTime aDateTime;
bool bValid = (aValue.getLength() == 19) && (aValue[ 4 ] == '-') && (aValue[ 7 ] == '-') &&
(aValue[ 10 ] == 'T') && (aValue[ 13 ] == ':') && (aValue[ 16 ] == ':');
@@ -238,16 +244,16 @@ OptValue< DateTime > AttributeList::getDateTime( sal_Int32 nElement ) const
// defaulted return values ----------------------------------------------------
-sal_Int32 AttributeList::getToken( sal_Int32 nElement, sal_Int32 nDefault ) const
+sal_Int32 AttributeList::getToken( sal_Int32 nAttrToken, sal_Int32 nDefault ) const
{
- return mxAttribs->getOptionalValueToken( nElement, nDefault );
+ return mxAttribs->getOptionalValueToken( nAttrToken, nDefault );
}
-OUString AttributeList::getString( sal_Int32 nElement, const OUString& rDefault ) const
+OUString AttributeList::getString( sal_Int32 nAttrToken, const OUString& rDefault ) const
{
try
{
- return mxAttribs->getValue( nElement );
+ return mxAttribs->getValue( nAttrToken );
}
catch( Exception& )
{
@@ -255,54 +261,54 @@ OUString AttributeList::getString( sal_Int32 nElement, const OUString& rDefault
return rDefault;
}
-OUString AttributeList::getXString( sal_Int32 nElement, const OUString& rDefault ) const
+OUString AttributeList::getXString( sal_Int32 nAttrToken, const OUString& rDefault ) const
{
- return getXString( nElement ).get( rDefault );
+ return getXString( nAttrToken ).get( rDefault );
}
-double AttributeList::getDouble( sal_Int32 nElement, double fDefault ) const
+double AttributeList::getDouble( sal_Int32 nAttrToken, double fDefault ) const
{
- return getDouble( nElement ).get( fDefault );
+ return getDouble( nAttrToken ).get( fDefault );
}
-sal_Int32 AttributeList::getInteger( sal_Int32 nElement, sal_Int32 nDefault ) const
+sal_Int32 AttributeList::getInteger( sal_Int32 nAttrToken, sal_Int32 nDefault ) const
{
- return getInteger( nElement ).get( nDefault );
+ return getInteger( nAttrToken ).get( nDefault );
}
-sal_uInt32 AttributeList::getUnsigned( sal_Int32 nElement, sal_uInt32 nDefault ) const
+sal_uInt32 AttributeList::getUnsigned( sal_Int32 nAttrToken, sal_uInt32 nDefault ) const
{
- return getUnsigned( nElement ).get( nDefault );
+ return getUnsigned( nAttrToken ).get( nDefault );
}
-sal_Int64 AttributeList::getHyper( sal_Int32 nElement, sal_Int64 nDefault ) const
+sal_Int64 AttributeList::getHyper( sal_Int32 nAttrToken, sal_Int64 nDefault ) const
{
- return getHyper( nElement ).get( nDefault );
+ return getHyper( nAttrToken ).get( nDefault );
}
-sal_Int32 AttributeList::getIntegerHex( sal_Int32 nElement, sal_Int32 nDefault ) const
+sal_Int32 AttributeList::getIntegerHex( sal_Int32 nAttrToken, sal_Int32 nDefault ) const
{
- return getIntegerHex( nElement ).get( nDefault );
+ return getIntegerHex( nAttrToken ).get( nDefault );
}
-sal_uInt32 AttributeList::getUnsignedHex( sal_Int32 nElement, sal_uInt32 nDefault ) const
+sal_uInt32 AttributeList::getUnsignedHex( sal_Int32 nAttrToken, sal_uInt32 nDefault ) const
{
- return getUnsignedHex( nElement ).get( nDefault );
+ return getUnsignedHex( nAttrToken ).get( nDefault );
}
-sal_Int64 AttributeList::getHyperHex( sal_Int32 nElement, sal_Int64 nDefault ) const
+sal_Int64 AttributeList::getHyperHex( sal_Int32 nAttrToken, sal_Int64 nDefault ) const
{
- return getHyperHex( nElement ).get( nDefault );
+ return getHyperHex( nAttrToken ).get( nDefault );
}
-bool AttributeList::getBool( sal_Int32 nElement, bool bDefault ) const
+bool AttributeList::getBool( sal_Int32 nAttrToken, bool bDefault ) const
{
- return getBool( nElement ).get( bDefault );
+ return getBool( nAttrToken ).get( bDefault );
}
-DateTime AttributeList::getDateTime( sal_Int32 nElement, const DateTime& rDefault ) const
+DateTime AttributeList::getDateTime( sal_Int32 nAttrToken, const DateTime& rDefault ) const
{
- return getDateTime( nElement ).get( rDefault );
+ return getDateTime( nAttrToken ).get( rDefault );
}
// ============================================================================
diff --git a/oox/source/helper/graphichelper.cxx b/oox/source/helper/graphichelper.cxx
index 6b294f61abef..455778f939f7 100644
--- a/oox/source/helper/graphichelper.cxx
+++ b/oox/source/helper/graphichelper.cxx
@@ -76,8 +76,9 @@ inline sal_Int32 lclConvertScreenPixelToHmm( double fPixel, double fPixelPerHmm
// ============================================================================
-GraphicHelper::GraphicHelper( const Reference< XMultiServiceFactory >& rxGlobalFactory, const Reference< XFrame >& rxTargetFrame ) :
+GraphicHelper::GraphicHelper( const Reference< XMultiServiceFactory >& rxGlobalFactory, const Reference< XFrame >& rxTargetFrame, const StorageRef& rxStorage ) :
mxGraphicProvider( rxGlobalFactory->createInstance( CREATE_OUSTRING( "com.sun.star.graphic.GraphicProvider" ) ), UNO_QUERY ),
+ mxStorage( rxStorage ),
maGraphicObjScheme( CREATE_OUSTRING( "vnd.sun.star.GraphicObject:" ) )
{
::comphelper::ComponentContext aContext( rxGlobalFactory );
@@ -149,6 +150,8 @@ GraphicHelper::~GraphicHelper()
{
}
+// System colors and predefined colors ----------------------------------------
+
sal_Int32 GraphicHelper::getSystemColor( sal_Int32 nToken, sal_Int32 nDefaultRgb ) const
{
return ContainerHelper::getMapElement( maSystemPalette, nToken, nDefaultRgb );
@@ -166,6 +169,8 @@ sal_Int32 GraphicHelper::getPaletteColor( sal_Int32 /*nPaletteIdx*/ ) const
return API_RGB_TRANSPARENT;
}
+// Device info and device dependent unit conversion ---------------------------
+
const DeviceInfo& GraphicHelper::getDeviceInfo() const
{
return maDeviceInfo;
@@ -267,6 +272,8 @@ Size GraphicHelper::convertHmmToAppFont( const Size& rHmm ) const
return Size( 0, 0 );
}
+// Graphics and graphic objects ----------------------------------------------
+
Reference< XGraphic > GraphicHelper::importGraphic( const Reference< XInputStream >& rxInStrm ) const
{
Reference< XGraphic > xGraphic;
@@ -294,6 +301,25 @@ Reference< XGraphic > GraphicHelper::importGraphic( const StreamDataSequence& rG
return xGraphic;
}
+Reference< XGraphic > GraphicHelper::importEmbeddedGraphic( const OUString& rStreamName ) const
+{
+ Reference< XGraphic > xGraphic;
+ OSL_ENSURE( rStreamName.getLength() > 0, "GraphicHelper::importEmbeddedGraphic - empty stream name" );
+ if( rStreamName.getLength() > 0 )
+ {
+ EmbeddedGraphicMap::const_iterator aIt = maEmbeddedGraphics.find( rStreamName );
+ if( aIt == maEmbeddedGraphics.end() )
+ {
+ xGraphic = importGraphic( mxStorage->openInputStream( rStreamName ) );
+ if( xGraphic.is() )
+ maEmbeddedGraphics[ rStreamName ] = xGraphic;
+ }
+ else
+ xGraphic = aIt->second;
+ }
+ return xGraphic;
+}
+
OUString GraphicHelper::createGraphicObject( const Reference< XGraphic >& rxGraphic ) const
{
OUString aGraphicObjUrl;
@@ -320,6 +346,12 @@ OUString GraphicHelper::importGraphicObject( const StreamDataSequence& rGraphicD
return createGraphicObject( importGraphic( rGraphicData ) );
}
+OUString GraphicHelper::importEmbeddedGraphicObject( const OUString& rStreamName ) const
+{
+ Reference< XGraphic > xGraphic = importEmbeddedGraphic( rStreamName );
+ return xGraphic.is() ? createGraphicObject( xGraphic ) : OUString();
+}
+
// ============================================================================
} // namespace oox
diff --git a/oox/source/ole/axbinaryreader.cxx b/oox/source/ole/axbinaryreader.cxx
index cb7e292b8cf4..68a18932bf42 100755
--- a/oox/source/ole/axbinaryreader.cxx
+++ b/oox/source/ole/axbinaryreader.cxx
@@ -156,6 +156,30 @@ bool AxFontData::importGuidAndFont( BinaryInputStream& rInStrm )
// ============================================================================
+namespace {
+
+bool lclReadString( AxAlignedInputStream& rInStrm, OUString& rValue, sal_uInt32 nSize, bool bArrayString )
+{
+ bool bCompressed = getFlag( nSize, AX_STRING_COMPRESSED );
+ sal_uInt32 nBufSize = nSize & AX_STRING_SIZEMASK;
+ // Unicode: simple strings store byte count, array strings store char count
+ sal_Int32 nChars = static_cast< sal_Int32 >( nBufSize / ((bCompressed || bArrayString) ? 1 : 2) );
+ bool bValidChars = nChars <= 65536;
+ OSL_ENSURE( bValidChars, "lclReadString - string too long" );
+ sal_Int64 nEndPos = rInStrm.tell() + nChars * (bCompressed ? 1 : 2);
+ nChars = ::std::min< sal_Int32 >( nChars, 65536 );
+ rValue = bCompressed ?
+ // ISO-8859-1 maps all byte values xx to the same Unicode code point U+00xx
+ rInStrm.readCharArrayUC( nChars, RTL_TEXTENCODING_ISO_8859_1 ) :
+ rInStrm.readUnicodeArray( nChars );
+ rInStrm.seek( nEndPos );
+ return bValidChars;
+}
+
+} // namespace
+
+// ----------------------------------------------------------------------------
+
AxBinaryPropertyReader::ComplexProperty::~ComplexProperty()
{
}
@@ -168,19 +192,22 @@ bool AxBinaryPropertyReader::PairProperty::readProperty( AxAlignedInputStream& r
bool AxBinaryPropertyReader::StringProperty::readProperty( AxAlignedInputStream& rInStrm )
{
- bool bCompressed = getFlag( mnSize, AX_STRING_COMPRESSED );
- sal_uInt32 nBufSize = mnSize & AX_STRING_SIZEMASK;
- sal_Int64 nEndPos = rInStrm.tell() + nBufSize;
- sal_Int32 nChars = static_cast< sal_Int32 >( nBufSize / (bCompressed ? 1 : 2) );
- bool bValidChars = nChars <= 65536;
- OSL_ENSURE( bValidChars, "StringProperty::readProperty - string too long" );
- nChars = ::std::min< sal_Int32 >( nChars, 65536 );
- mrValue = bCompressed ?
- // ISO-8859-1 maps all byte values xx to the same Unicode code point U+00xx
- rInStrm.readCharArrayUC( nChars, RTL_TEXTENCODING_ISO_8859_1 ) :
- rInStrm.readUnicodeArray( nChars );
- rInStrm.seek( nEndPos );
- return bValidChars;
+ return lclReadString( rInStrm, mrValue, mnSize, false );
+}
+
+bool AxBinaryPropertyReader::StringArrayProperty::readProperty( AxAlignedInputStream& rInStrm )
+{
+ sal_Int64 nEndPos = rInStrm.tell() + mnSize;
+ while( rInStrm.tell() < nEndPos )
+ {
+ OUString aString;
+ if( !lclReadString( rInStrm, aString, rInStrm.readuInt32(), true ) )
+ return false;
+ mrArray.push_back( aString );
+ // every array string is aligned on 4 byte boundries
+ rInStrm.align( 4 );
+ }
+ return true;
}
bool AxBinaryPropertyReader::GuidProperty::readProperty( AxAlignedInputStream& rInStrm )
@@ -238,6 +265,15 @@ void AxBinaryPropertyReader::readStringProperty( OUString& orValue )
}
}
+void AxBinaryPropertyReader::readStringArrayProperty( AxStringArray& orArray )
+{
+ if( startNextProperty() )
+ {
+ sal_uInt32 nSize = maInStrm.readAligned< sal_uInt32 >();
+ maLargeProps.push_back( ComplexPropVector::value_type( new StringArrayProperty( orArray, nSize ) ) );
+ }
+}
+
void AxBinaryPropertyReader::readGuidProperty( ::rtl::OUString& orGuid )
{
if( startNextProperty() )
diff --git a/oox/source/ole/axcontrol.cxx b/oox/source/ole/axcontrol.cxx
index 95d5c7dc67b7..82616026a505 100644
--- a/oox/source/ole/axcontrol.cxx
+++ b/oox/source/ole/axcontrol.cxx
@@ -128,6 +128,7 @@ const sal_uInt32 AX_IMAGE_DEFFLAGS = 0x0000001B;
const sal_uInt32 AX_MORPHDATA_DEFFLAGS = 0x2C80081B;
const sal_uInt32 AX_SPINBUTTON_DEFFLAGS = 0x0000001B;
const sal_uInt32 AX_SCROLLBAR_DEFFLAGS = 0x0000001B;
+const sal_uInt32 AX_TABSTRIP_DEFFLAGS = 0x0000001B;
const sal_uInt16 AX_POS_TOPLEFT = 0;
const sal_uInt16 AX_POS_TOP = 1;
@@ -186,6 +187,10 @@ const sal_Int32 AX_ORIENTATION_HORIZONTAL = 1;
const sal_Int32 AX_PROPTHUMB_ON = -1;
const sal_Int32 AX_PROPTHUMB_OFF = 0;
+const sal_uInt32 AX_TABSTRIP_TABS = 0;
+const sal_uInt32 AX_TABSTRIP_BUTTONS = 1;
+const sal_uInt32 AX_TABSTRIP_NONE = 2;
+
const sal_uInt32 AX_CONTAINER_ENABLED = 0x00000004;
const sal_uInt32 AX_CONTAINER_HASDESIGNEXT = 0x00004000;
const sal_uInt32 AX_CONTAINER_NOCLASSTABLE = 0x00008000;
@@ -231,14 +236,6 @@ ControlConverter::~ControlConverter()
// Generic conversion ---------------------------------------------------------
-void ControlConverter::convertSize( PropertyMap& rPropMap, const AxPairData& rSize ) const
-{
- // size is given in 1/100 mm, UNO needs AppFont units
- Size aAppFontSize = mrGraphicHelper.convertHmmToAppFont( Size( rSize.first, rSize.second ) );
- rPropMap.setProperty( PROP_Width, aAppFontSize.Width );
- rPropMap.setProperty( PROP_Height, aAppFontSize.Height );
-}
-
void ControlConverter::convertPosition( PropertyMap& rPropMap, const AxPairData& rPos ) const
{
// position is given in 1/100 mm, UNO needs AppFont units
@@ -247,6 +244,14 @@ void ControlConverter::convertPosition( PropertyMap& rPropMap, const AxPairData&
rPropMap.setProperty( PROP_PositionY, aAppFontPos.Y );
}
+void ControlConverter::convertSize( PropertyMap& rPropMap, const AxPairData& rSize ) const
+{
+ // size is given in 1/100 mm, UNO needs AppFont units
+ Size aAppFontSize = mrGraphicHelper.convertHmmToAppFont( Size( rSize.first, rSize.second ) );
+ rPropMap.setProperty( PROP_Width, aAppFontSize.Width );
+ rPropMap.setProperty( PROP_Height, aAppFontSize.Height );
+}
+
void ControlConverter::convertColor( PropertyMap& rPropMap, sal_Int32 nPropId, sal_uInt32 nOleColor ) const
{
rPropMap.setProperty( nPropId, OleHelper::decodeOleColor( mrGraphicHelper, nOleColor, mbDefaultColorBgr ) );
@@ -687,11 +692,11 @@ void AxFontDataModel::importProperty( sal_Int32 nPropId, const OUString& rValue
{
switch( nPropId )
{
- case XML_FontName: maFontData.maFontName = rValue; break;
- case XML_FontEffects: maFontData.mnFontEffects = AttributeList::decodeUnsigned( rValue ); break;
- case XML_FontHeight: maFontData.mnFontHeight = AttributeList::decodeInteger( rValue ); break;
- case XML_FontCharSet: maFontData.mnFontCharSet = AttributeList::decodeInteger( rValue ); break;
- case XML_ParagraphAlign: maFontData.mnHorAlign = AttributeList::decodeInteger( rValue ); break;
+ case XML_FontName: maFontData.maFontName = rValue; break;
+ case XML_FontEffects: maFontData.mnFontEffects = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_FontHeight: maFontData.mnFontHeight = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_FontCharSet: maFontData.mnFontCharSet = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_ParagraphAlign: maFontData.mnHorAlign = AttributeConversion::decodeInteger( rValue ); break;
default: AxControlModelBase::importProperty( nPropId, rValue );
}
}
@@ -757,12 +762,12 @@ void AxCommandButtonModel::importProperty( sal_Int32 nPropId, const OUString& rV
{
switch( nPropId )
{
- case XML_Caption: maCaption = rValue; break;
- case XML_ForeColor: mnTextColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BackColor: mnBackColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_VariousPropertyBits: mnFlags = AttributeList::decodeUnsigned( rValue ); break;
- case XML_PicturePosition: mnPicturePos = AttributeList::decodeUnsigned( rValue ); break;
- case XML_TakeFocusOnClick: mbFocusOnClick = AttributeList::decodeInteger( rValue ) != 0; break;
+ case XML_Caption: maCaption = rValue; break;
+ case XML_ForeColor: mnTextColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BackColor: mnBackColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_VariousPropertyBits: mnFlags = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_PicturePosition: mnPicturePos = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_TakeFocusOnClick: mbFocusOnClick = AttributeConversion::decodeInteger( rValue ) != 0; break;
default: AxFontDataModel::importProperty( nPropId, rValue );
}
}
@@ -828,12 +833,12 @@ void AxLabelModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
switch( nPropId )
{
case XML_Caption: maCaption = rValue; break;
- case XML_ForeColor: mnTextColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BackColor: mnBackColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_VariousPropertyBits: mnFlags = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BorderColor: mnBorderColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BorderStyle: mnBorderStyle = AttributeList::decodeInteger( rValue ); break;
- case XML_SpecialEffect: mnSpecialEffect = AttributeList::decodeInteger( rValue ); break;
+ case XML_ForeColor: mnTextColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BackColor: mnBackColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_VariousPropertyBits: mnFlags = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BorderColor: mnBorderColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BorderStyle: mnBorderStyle = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_SpecialEffect: mnSpecialEffect = AttributeConversion::decodeInteger( rValue ); break;
default: AxFontDataModel::importProperty( nPropId, rValue );
}
}
@@ -892,14 +897,14 @@ void AxImageModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
{
switch( nPropId )
{
- case XML_BackColor: mnBackColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_VariousPropertyBits: mnFlags = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BorderColor: mnBorderColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BorderStyle: mnBorderStyle = AttributeList::decodeInteger( rValue ); break;
- case XML_SpecialEffect: mnSpecialEffect = AttributeList::decodeInteger( rValue ); break;
- case XML_SizeMode: mnPicSizeMode = AttributeList::decodeInteger( rValue ); break;
- case XML_PictureAlignment: mnPicAlign = AttributeList::decodeInteger( rValue ); break;
- case XML_PictureTiling: mbPicTiling = AttributeList::decodeInteger( rValue ) != 0; break;
+ case XML_BackColor: mnBackColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_VariousPropertyBits: mnFlags = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BorderColor: mnBorderColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BorderStyle: mnBorderStyle = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_SpecialEffect: mnSpecialEffect = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_SizeMode: mnPicSizeMode = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_PictureAlignment: mnPicAlign = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_PictureTiling: mbPicTiling = AttributeConversion::decodeInteger( rValue ) != 0; break;
default: AxControlModelBase::importProperty( nPropId, rValue );
}
}
@@ -973,24 +978,24 @@ void AxMorphDataModelBase::importProperty( sal_Int32 nPropId, const OUString& rV
{
switch( nPropId )
{
- case XML_Caption: maCaption = rValue; break;
- case XML_Value: maValue = rValue; break;
- case XML_GroupName: maGroupName = rValue; break;
- case XML_ForeColor: mnTextColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BackColor: mnBackColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_VariousPropertyBits: mnFlags = AttributeList::decodeUnsigned( rValue ); break;
- case XML_PicturePosition: mnPicturePos = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BorderColor: mnBorderColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BorderStyle: mnBorderStyle = AttributeList::decodeInteger( rValue ); break;
- case XML_SpecialEffect: mnSpecialEffect = AttributeList::decodeInteger( rValue ); break;
- case XML_DisplayStyle: mnDisplayStyle = AttributeList::decodeInteger( rValue ); break;
- case XML_MultiSelect: mnMultiSelect = AttributeList::decodeInteger( rValue ); break;
- case XML_ScrollBars: mnScrollBars = AttributeList::decodeInteger( rValue ); break;
- case XML_MatchEntry: mnMatchEntry = AttributeList::decodeInteger( rValue ); break;
- case XML_ShowDropButtonWhen: mnShowDropButton = AttributeList::decodeInteger( rValue ); break;
- case XML_MaxLength: mnMaxLength = AttributeList::decodeInteger( rValue ); break;
- case XML_PasswordChar: mnPasswordChar = AttributeList::decodeInteger( rValue ); break;
- case XML_ListRows: mnListRows = AttributeList::decodeInteger( rValue ); break;
+ case XML_Caption: maCaption = rValue; break;
+ case XML_Value: maValue = rValue; break;
+ case XML_GroupName: maGroupName = rValue; break;
+ case XML_ForeColor: mnTextColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BackColor: mnBackColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_VariousPropertyBits: mnFlags = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_PicturePosition: mnPicturePos = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BorderColor: mnBorderColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BorderStyle: mnBorderStyle = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_SpecialEffect: mnSpecialEffect = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_DisplayStyle: mnDisplayStyle = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_MultiSelect: mnMultiSelect = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_ScrollBars: mnScrollBars = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_MatchEntry: mnMatchEntry = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_ShowDropButtonWhen: mnShowDropButton = AttributeConversion::decodeInteger( rValue );break;
+ case XML_MaxLength: mnMaxLength = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_PasswordChar: mnPasswordChar = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_ListRows: mnListRows = AttributeConversion::decodeInteger( rValue ); break;
default: AxFontDataModel::importProperty( nPropId, rValue );
}
}
@@ -1225,15 +1230,15 @@ void AxSpinButtonModel::importProperty( sal_Int32 nPropId, const OUString& rValu
{
switch( nPropId )
{
- case XML_ForeColor: mnArrowColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BackColor: mnBackColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_VariousPropertyBits: mnFlags = AttributeList::decodeUnsigned( rValue ); break;
- case XML_Orientation: mnOrientation = AttributeList::decodeInteger( rValue ); break;
- case XML_Min: mnMin = AttributeList::decodeInteger( rValue ); break;
- case XML_Max: mnMax = AttributeList::decodeInteger( rValue ); break;
- case XML_Position: mnPosition = AttributeList::decodeInteger( rValue ); break;
- case XML_SmallChange: mnSmallChange = AttributeList::decodeInteger( rValue ); break;
- case XML_Delay: mnDelay = AttributeList::decodeInteger( rValue ); break;
+ case XML_ForeColor: mnArrowColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BackColor: mnBackColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_VariousPropertyBits: mnFlags = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_Orientation: mnOrientation = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Min: mnMin = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Max: mnMax = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Position: mnPosition = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_SmallChange: mnSmallChange = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Delay: mnDelay = AttributeConversion::decodeInteger( rValue ); break;
default: AxControlModelBase::importProperty( nPropId, rValue );
}
}
@@ -1303,17 +1308,17 @@ void AxScrollBarModel::importProperty( sal_Int32 nPropId, const OUString& rValue
{
switch( nPropId )
{
- case XML_ForeColor: mnArrowColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_BackColor: mnBackColor = AttributeList::decodeUnsigned( rValue ); break;
- case XML_VariousPropertyBits: mnFlags = AttributeList::decodeUnsigned( rValue ); break;
- case XML_Orientation: mnOrientation = AttributeList::decodeInteger( rValue ); break;
- case XML_ProportionalThumb: mnPropThumb = AttributeList::decodeInteger( rValue ); break;
- case XML_Min: mnMin = AttributeList::decodeInteger( rValue ); break;
- case XML_Max: mnMax = AttributeList::decodeInteger( rValue ); break;
- case XML_Position: mnPosition = AttributeList::decodeInteger( rValue ); break;
- case XML_SmallChange: mnSmallChange = AttributeList::decodeInteger( rValue ); break;
- case XML_LargeChange: mnLargeChange = AttributeList::decodeInteger( rValue ); break;
- case XML_Delay: mnDelay = AttributeList::decodeInteger( rValue ); break;
+ case XML_ForeColor: mnArrowColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_BackColor: mnBackColor = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_VariousPropertyBits: mnFlags = AttributeConversion::decodeUnsigned( rValue ); break;
+ case XML_Orientation: mnOrientation = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_ProportionalThumb: mnPropThumb = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Min: mnMin = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Max: mnMax = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Position: mnPosition = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_SmallChange: mnSmallChange = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_LargeChange: mnLargeChange = AttributeConversion::decodeInteger( rValue ); break;
+ case XML_Delay: mnDelay = AttributeConversion::decodeInteger( rValue ); break;
default: AxControlModelBase::importProperty( nPropId, rValue );
}
}
@@ -1362,7 +1367,69 @@ void AxScrollBarModel::convertProperties( PropertyMap& rPropMap, const ControlCo
// ============================================================================
-AxContainerModelBase::AxContainerModelBase() :
+AxTabStripModel::AxTabStripModel() :
+ AxFontDataModel( false ), // no support for Align property
+ mnBackColor( AX_SYSCOLOR_BUTTONFACE ),
+ mnTextColor( AX_SYSCOLOR_BUTTONTEXT ),
+ mnFlags( AX_TABSTRIP_DEFFLAGS ),
+ mnSelectedTab( -1 ),
+ mnTabStyle( AX_TABSTRIP_TABS ),
+ mnTabFlagCount( 0 )
+{
+}
+
+bool AxTabStripModel::importBinaryModel( BinaryInputStream& rInStrm )
+{
+ AxBinaryPropertyReader aReader( rInStrm );
+ aReader.readIntProperty< sal_Int32 >( mnSelectedTab );
+ aReader.readIntProperty< sal_uInt32 >( mnBackColor );
+ aReader.readIntProperty< sal_uInt32 >( mnTextColor );
+ aReader.skipUndefinedProperty();
+ aReader.readPairProperty( maSize );
+ aReader.readStringArrayProperty( maCaptions );
+ aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
+ aReader.skipUndefinedProperty();
+ aReader.skipIntProperty< sal_uInt32 >(); // tab orientation
+ aReader.readIntProperty< sal_uInt32 >( mnTabStyle );
+ aReader.skipBoolProperty(); // multiple rows
+ aReader.skipIntProperty< sal_uInt32 >(); // fixed width
+ aReader.skipIntProperty< sal_uInt32 >(); // fixed height
+ aReader.skipBoolProperty(); // tooltips
+ aReader.skipUndefinedProperty();
+ aReader.skipStringArrayProperty(); // tooltip strings
+ aReader.skipUndefinedProperty();
+ aReader.skipStringArrayProperty(); // tab names
+ aReader.readIntProperty< sal_uInt32 >( mnFlags );
+ aReader.skipBoolProperty(); // new version
+ aReader.skipIntProperty< sal_uInt32 >(); // tabs allocated
+ aReader.skipStringArrayProperty(); // tags
+ aReader.readIntProperty< sal_uInt32 >( mnTabFlagCount );
+ aReader.skipStringArrayProperty(); // accelerators
+ aReader.skipPictureProperty(); // mouse icon
+ return aReader.finalizeImport() && AxFontDataModel::importBinaryModel( rInStrm );
+}
+
+ApiControlType AxTabStripModel::getControlType() const
+{
+ return API_CONTROL_TABSTRIP;
+}
+
+void AxTabStripModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
+{
+ rPropMap.setProperty( PROP_Decoration, mnTabStyle != AX_TABSTRIP_NONE );
+ rPropMap.setProperty( PROP_MultiPageValue, mnSelectedTab );
+ rConv.convertColor( rPropMap, PROP_BackgroundColor, mnBackColor );
+ AxFontDataModel::convertProperties( rPropMap, rConv );
+}
+
+OUString AxTabStripModel::getCaption( sal_Int32 nIndex ) const
+{
+ return ContainerHelper::getVectorElement( maCaptions, nIndex, OUString() );
+}
+
+// ============================================================================
+
+AxContainerModelBase::AxContainerModelBase( bool bFontSupport ) :
AxFontDataModel( false ), // no support for Align property
maLogicalSize( AX_CONTAINER_DEFWIDTH, AX_CONTAINER_DEFHEIGHT ),
maScrollPos( 0, 0 ),
@@ -1376,7 +1443,8 @@ AxContainerModelBase::AxContainerModelBase() :
mnSpecialEffect( AX_SPECIALEFFECT_FLAT ),
mnPicAlign( AX_PICALIGN_CENTER ),
mnPicSizeMode( AX_PICSIZE_CLIP ),
- mbPicTiling( false )
+ mbPicTiling( false ),
+ mbFontSupport( bFontSupport )
{
setAwtModelMode();
// different default size for frame
@@ -1423,6 +1491,15 @@ bool AxContainerModelBase::importBinaryModel( BinaryInputStream& rInStrm )
return aReader.finalizeImport();
}
+void AxContainerModelBase::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
+{
+ if( mbFontSupport )
+ {
+ rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor );
+ AxFontDataModel::convertProperties( rPropMap, rConv );
+ }
+}
+
bool AxContainerModelBase::importClassTable( BinaryInputStream& rInStrm, AxClassTable& orClassTable )
{
bool bValid = true;
@@ -1457,7 +1534,8 @@ bool AxContainerModelBase::importClassTable( BinaryInputStream& rInStrm, AxClass
// ============================================================================
-AxFrameModel::AxFrameModel()
+AxFrameModel::AxFrameModel() :
+ AxContainerModelBase( true )
{
}
@@ -1475,6 +1553,49 @@ void AxFrameModel::convertProperties( PropertyMap& rPropMap, const ControlConver
// ============================================================================
+AxFormPageModel::AxFormPageModel()
+{
+}
+
+ApiControlType AxFormPageModel::getControlType() const
+{
+ return API_CONTROL_PAGE;
+}
+
+void AxFormPageModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
+{
+ rPropMap.setProperty( PROP_Title, maCaption );
+ rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_CONTAINER_ENABLED ) );
+ rConv.convertColor( rPropMap, PROP_BackgroundColor, mnBackColor );
+ AxContainerModelBase::convertProperties( rPropMap, rConv );
+}
+
+// ============================================================================
+
+AxMultiPageModel::AxMultiPageModel()
+{
+}
+
+ApiControlType AxMultiPageModel::getControlType() const
+{
+ return API_CONTROL_MULTIPAGE;
+}
+
+void AxMultiPageModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
+{
+ rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_CONTAINER_ENABLED ) );
+ if( mxTabStrip.get() )
+ mxTabStrip->convertProperties( rPropMap, rConv );
+ AxContainerModelBase::convertProperties( rPropMap, rConv );
+}
+
+void AxMultiPageModel::setTabStripModel( const AxTabStripModelRef& rxTabStrip )
+{
+ mxTabStrip = rxTabStrip;
+}
+
+// ============================================================================
+
AxUserFormModel::AxUserFormModel()
{
}
diff --git a/oox/source/ole/vbacontrol.cxx b/oox/source/ole/vbacontrol.cxx
index b43e8289a592..6ea28f424a83 100755
--- a/oox/source/ole/vbacontrol.cxx
+++ b/oox/source/ole/vbacontrol.cxx
@@ -198,9 +198,9 @@ void VbaSiteModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
{
switch( nPropId )
{
- case XML_Name: maName = rValue; break;
- case XML_Tag: maTag = rValue; break;
- case XML_VariousPropertyBits: mnFlags = AttributeList::decodeUnsigned( rValue ); break;
+ case XML_Name: maName = rValue; break;
+ case XML_Tag: maTag = rValue; break;
+ case XML_VariousPropertyBits: mnFlags = AttributeConversion::decodeUnsigned( rValue ); break;
}
}
@@ -231,6 +231,11 @@ void VbaSiteModel::moveRelative( const AxPairData& rDistance )
maPos.second += rDistance.second;
}
+bool VbaSiteModel::isVisible() const
+{
+ return getFlag( mnFlags, VBA_SITE_VISIBLE );
+}
+
bool VbaSiteModel::isContainer() const
{
return !getFlag( mnFlags, VBA_SITE_OSTREAM );
@@ -326,7 +331,7 @@ void VbaSiteModel::convertProperties( PropertyMap& rPropMap,
if( (0 <= nCtrlIndex) && (nCtrlIndex <= SAL_MAX_INT16) )
rPropMap.setProperty( PROP_TabIndex, static_cast< sal_Int16 >( nCtrlIndex ) );
// progress bar and group box support TabIndex, but not Tabstop...
- if( (eCtrlType != API_CONTROL_PROGRESSBAR) && (eCtrlType != API_CONTROL_GROUPBOX) )
+ if( (eCtrlType != API_CONTROL_PROGRESSBAR) && (eCtrlType != API_CONTROL_GROUPBOX) && (eCtrlType != API_CONTROL_FRAME) && (eCtrlType != API_CONTROL_PAGE) )
rPropMap.setProperty( PROP_Tabstop, getFlag( mnFlags, VBA_SITE_TABSTOP ) );
rConv.convertPosition( rPropMap, maPos );
}
@@ -367,6 +372,11 @@ OUString VbaFormControl::getControlName() const
return mxSiteModel.get() ? mxSiteModel->getName() : OUString();
}
+sal_Int32 VbaFormControl::getControlId() const
+{
+ return mxSiteModel.get() ? mxSiteModel->getId() : -1;
+}
+
void VbaFormControl::createAndConvert( sal_Int32 nCtrlIndex,
const Reference< XNameContainer >& rxParentNC, const ControlConverter& rConv ) const
{
diff --git a/oox/source/ppt/pptimport.cxx b/oox/source/ppt/pptimport.cxx
index 39ad52316a92..d60629b4481b 100644
--- a/oox/source/ppt/pptimport.cxx
+++ b/oox/source/ppt/pptimport.cxx
@@ -163,7 +163,7 @@ private:
};
PptGraphicHelper::PptGraphicHelper( const PowerPointImport& rFilter ) :
- GraphicHelper( rFilter.getGlobalFactory(), rFilter.getTargetFrame() ),
+ GraphicHelper( rFilter.getGlobalFactory(), rFilter.getTargetFrame(), rFilter.getStorage() ),
mrFilter( rFilter )
{
}
diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx
index 05734b65e2a7..e253d43e56e7 100644
--- a/oox/source/shape/ShapeContextHandler.cxx
+++ b/oox/source/shape/ShapeContextHandler.cxx
@@ -31,11 +31,6 @@
#include "oox/vml/vmlshapecontainer.hxx"
#include "tokens.hxx"
-#if DEBUG
-#include <iostream>
-using namespace std;
-#endif
-
namespace oox { namespace shape {
using namespace ::com::sun::star;
@@ -93,9 +88,6 @@ ShapeContextHandler::getGraphicShapeContext(::sal_Int32 Element )
uno::Reference<xml::sax::XFastContextHandler>
ShapeContextHandler::getDrawingShapeContext()
{
-#if DEBUG
- clog << "ShapeContextHandler::getDrawingShapeContext" << endl;
-#endif
if (!mxDrawingFragmentHandler.is())
{
mpDrawing.reset( new oox::vml::Drawing( *mxFilterBase, mxDrawPage, oox::vml::VMLDRAWING_WORD ) );
@@ -186,9 +178,6 @@ ShapeContextHandler::createFastChildContext
const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
throw (uno::RuntimeException, xml::sax::SAXException)
{
-#if DEBUG
- clog << "ShapeContextHandler::createFastChildContext" << endl;
-#endif
uno::Reference< xml::sax::XFastContextHandler > xResult;
uno::Reference< xml::sax::XFastContextHandler > xContextHandler(getContextHandler());
@@ -243,6 +232,7 @@ ShapeContextHandler::getShape() throw (uno::RuntimeException)
{
mpShape->addShape(*mxFilterBase, mpThemePtr.get(), xShapes);
xResult.set(mpShape->getXShape());
+ mxGraphicShapeContext.clear( );
}
}
diff --git a/oox/source/token/makefile.mk b/oox/source/token/makefile.mk
index 3c2e9201ea33..7884c375fde6 100644
--- a/oox/source/token/makefile.mk
+++ b/oox/source/token/makefile.mk
@@ -51,6 +51,7 @@ $(MISC)$/tokens.gperf $(INCCOM)$/tokenwords.inc $(INCCOM)$/tokens.hxx $(INCCOM)$
@@noop $(assign do_phony:=.PHONY)
$(MISC)$/do_tokens $(do_phony) : tokens.txt gentoken.pl $(MISC)$/tokens.gperf $(INCCOM)$/tokenwords.inc $(INCCOM)$/tokens.hxx
+ @@-$(RM) $@
$(PERL) gentoken.pl tokens.txt $(INCCOM)$/tokens.hxx $(INCCOM)$/tokenwords.inc $(MISC)$/tokens.gperf && $(TOUCH) $@
$(INCCOM)$/oox:
@@ -60,6 +61,7 @@ $(INCCOM)$/oox$/core: $(INCCOM)$/oox
$(MKDIR) $(INCCOM)$/oox$/core
$(MISC)$/do_namespaces $(do_phony) : namespaces.txt gennamespaces.pl
+ @@-$(RM) $@
$(MKDIRHIER) $(INCCOM)$/oox$/core
$(PERL) gennamespaces.pl namespaces.txt $(INCCOM)$/oox$/core$/namespaces.hxx && $(TOUCH) $@
@@ -69,7 +71,8 @@ $(INCCOM)$/tokens.inc : $(MISC)$/tokens.gperf $(MISC)$/do_tokens
$(SLO)$/tokenmap.obj : $(INCCOM)$/tokens.inc $(INCCOM)$/tokenwords.inc $(INCCOM)$/tokens.hxx $(INCCOM)$/oox$/core$/namespaces.hxx $(MISC)$/do_tokens $(MISC)$/do_namespaces
$(MISC)$/do_properties $(do_phony) : properties.txt genproperties.pl $(INCCOM)$/properties.hxx $(INCCOM)$/propertywords.inc
- $(PERL) genproperties.pl properties.txt $(INCCOM)$/properties.hxx $(INCCOM)$/propertywords.inc && $(TOUCH) $@
+ @@-$(RM) $@
+ $(PERL) genproperties.pl properties.txt $(INCCOM)$/properties.hxx $(INCCOM)$/propertywords.inc && $(TOUCH) $@
$(SLO)$/propertylist.obj : $(INCCOM)$/propertywords.inc $(INCCOM)$/properties.hxx $(MISC)$/do_properties
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
index 2b32b0a14d91..8244a298956a 100644
--- a/oox/source/token/properties.txt
+++ b/oox/source/token/properties.txt
@@ -103,6 +103,7 @@ D3DScenePerspective
D3DSceneShadeMode
DDELinks
DatabaseRanges
+Decoration
DefaultContext
DefaultScrollValue
DefaultSpinValue
@@ -250,6 +251,7 @@ LineStyle
LineTransparence
LineWidth
LinkURL
+LoadReadonly
LookUpLabels
MajorTickmarks
MarkPosition
@@ -259,7 +261,9 @@ MediaType
MinorTickmarks
MissingValueTreatment
Model
+ModifyPasswordHash
MultiLine
+MultiPageValue
MultiSelection
Name
NamedRanges
@@ -394,6 +398,7 @@ Suffix
SwapXAndYAxis
Symbol
SymbolColor
+TabColor
TabIndex
TableBorder
TableLayout
@@ -449,7 +454,6 @@ VisualEffect
Weight
WhiteDay
Width
-WriteProtectionPassword
WritingMode
ZoomType
ZoomValue
diff --git a/oox/source/vml/vmldrawing.cxx b/oox/source/vml/vmldrawing.cxx
index 9a5f4451ec04..1cc74c32aa2d 100644
--- a/oox/source/vml/vmldrawing.cxx
+++ b/oox/source/vml/vmldrawing.cxx
@@ -39,6 +39,7 @@ using ::com::sun::star::uno::UNO_QUERY;
using ::com::sun::star::awt::Rectangle;
using ::com::sun::star::awt::XControlModel;
using ::com::sun::star::drawing::XDrawPage;
+using ::com::sun::star::drawing::XShape;
using ::com::sun::star::drawing::XShapes;
using ::oox::core::XmlFilterBase;
@@ -155,6 +156,10 @@ void Drawing::convertControlClientData( const Reference< XControlModel >& /*rxCt
{
}
+void Drawing::notifyShapeInserted( const Reference< XShape >& /*rxShape*/, const Rectangle& /*rShapeRect*/ )
+{
+}
+
// ============================================================================
} // namespace vml
diff --git a/oox/source/vml/vmldrawingfragment.cxx b/oox/source/vml/vmldrawingfragment.cxx
index aae5b5c40556..333df72bbaf7 100644
--- a/oox/source/vml/vmldrawingfragment.cxx
+++ b/oox/source/vml/vmldrawingfragment.cxx
@@ -50,6 +50,7 @@ DrawingFragment::DrawingFragment( XmlFilterBase& rFilter, const OUString& rFragm
Reference< XInputStream > DrawingFragment::openFragmentStream() const
{
+ // #i104719# create an input stream that preprocesses the VML data
return new InputStream( FragmentHandler2::openFragmentStream() );
}
diff --git a/oox/source/vml/vmlformatting.cxx b/oox/source/vml/vmlformatting.cxx
index 6baea708c8a2..827930c22496 100644
--- a/oox/source/vml/vmlformatting.cxx
+++ b/oox/source/vml/vmlformatting.cxx
@@ -470,6 +470,7 @@ void FillModel::assignUsed( const FillModel& rSource )
moFocus.assignIfUsed( rSource.moFocus );
moFocusPos.assignIfUsed( rSource.moFocusPos );
moFocusSize.assignIfUsed( rSource.moFocusSize );
+ moBitmapPath.assignIfUsed( rSource.moBitmapPath );
moRotate.assignIfUsed( rSource.moRotate );
}
@@ -561,6 +562,23 @@ void FillModel::pushToPropMap( PropertyMap& rPropMap,
}
break;
+ case XML_pattern:
+ case XML_tile:
+ case XML_frame:
+ {
+ if( moBitmapPath.has() && moBitmapPath.get().getLength() > 0 )
+ {
+ aFillProps.maBlipProps.mxGraphic = rGraphicHelper.importEmbeddedGraphic( moBitmapPath.get() );
+ if( aFillProps.maBlipProps.mxGraphic.is() )
+ {
+ aFillProps.moFillType = XML_blipFill;
+ aFillProps.maBlipProps.moBitmapMode = (nFillType == XML_frame) ? XML_stretch : XML_tile;
+ break; // do not break if bitmap is missing, but run to XML_solid instead
+ }
+ }
+ }
+ // run-through to XML_solid in case of missing bitmap path intended!
+
case XML_solid:
default:
{
diff --git a/oox/source/vml/vmlinputstream.cxx b/oox/source/vml/vmlinputstream.cxx
index d80058c8f3e0..a6d50e193bc4 100644
--- a/oox/source/vml/vmlinputstream.cxx
+++ b/oox/source/vml/vmlinputstream.cxx
@@ -26,9 +26,13 @@
************************************************************************/
#include "oox/vml/vmlinputstream.hxx"
-#include <algorithm>
-#include <string.h>
+#include <map>
+#include <rtl/strbuf.hxx>
+#include <rtl/strbuf.hxx>
+#include "oox/helper/helper.hxx"
+using ::rtl::OString;
+using ::rtl::OStringBuffer;
using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::io::XInputStream;
@@ -38,6 +42,116 @@ namespace vml {
// ============================================================================
+namespace {
+
+inline const sal_Char* lclFindCharacter( const sal_Char* pcBeg, const sal_Char* pcEnd, sal_Char cChar )
+{
+ sal_Int32 nIndex = rtl_str_indexOfChar_WithLength( pcBeg, static_cast< sal_Int32 >( pcEnd - pcBeg ), cChar );
+ return (nIndex < 0) ? pcEnd : (pcBeg + nIndex);
+}
+
+inline bool lclIsWhiteSpace( sal_Char cChar )
+{
+ return (cChar == ' ') || (cChar == '\t') || (cChar == '\n') || (cChar == '\r');
+}
+
+const sal_Char* lclFindWhiteSpace( const sal_Char* pcBeg, const sal_Char* pcEnd )
+{
+ for( ; pcBeg < pcEnd; ++pcBeg )
+ if( lclIsWhiteSpace( *pcBeg ) )
+ return pcBeg;
+ return pcEnd;
+}
+
+const sal_Char* lclFindNonWhiteSpace( const sal_Char* pcBeg, const sal_Char* pcEnd )
+{
+ for( ; pcBeg < pcEnd; ++pcBeg )
+ if( !lclIsWhiteSpace( *pcBeg ) )
+ return pcBeg;
+ return pcEnd;
+}
+
+const sal_Char* lclTrimWhiteSpaceFromEnd( const sal_Char* pcBeg, const sal_Char* pcEnd )
+{
+ while( (pcBeg < pcEnd) && lclIsWhiteSpace( pcEnd[ -1 ] ) )
+ --pcEnd;
+ return pcEnd;
+}
+
+inline void lclAppendToBuffer( OStringBuffer& rBuffer, const sal_Char* pcBeg, const sal_Char* pcEnd )
+{
+ rBuffer.append( pcBeg, static_cast< sal_Int32 >( pcEnd - pcBeg ) );
+}
+
+// ----------------------------------------------------------------------------
+
+void lclProcessAttribs( OStringBuffer& rBuffer, const sal_Char* pcBeg, const sal_Char* pcEnd )
+{
+ /* Map attribute names to char-pointer of all attributes. This map is used
+ to find multiple occurences of attributes with the same name. The
+ mapped pointers are used as map key in the next map below. */
+ typedef ::std::map< OString, const sal_Char* > AttributeNameMap;
+ AttributeNameMap aAttributeNames;
+
+ /* Map the char-pointers of all attributes to the full attribute definition
+ string. This preserves the original order of the used attributes. */
+ typedef ::std::map< const sal_Char*, OString > AttributeDataMap;
+ AttributeDataMap aAttributes;
+
+ bool bOk = true;
+ const sal_Char* pcNameBeg = pcBeg;
+ while( bOk && (pcNameBeg < pcEnd) )
+ {
+ // pcNameBeg points to begin of attribute name, find equality sign
+ const sal_Char* pcEqualSign = lclFindCharacter( pcNameBeg, pcEnd, '=' );
+ if( (bOk = pcEqualSign < pcEnd) == true )
+ {
+ // find end of attribute name (ignore whitespace between name and equality sign)
+ const sal_Char* pcNameEnd = lclTrimWhiteSpaceFromEnd( pcNameBeg, pcEqualSign );
+ if( (bOk = pcNameBeg < pcNameEnd) == true )
+ {
+ // find begin of attribute value (must be single or double quote)
+ const sal_Char* pcValueBeg = lclFindNonWhiteSpace( pcEqualSign + 1, pcEnd );
+ if( (bOk = (pcValueBeg < pcEnd) && ((*pcValueBeg == '\'') || (*pcValueBeg == '"'))) == true )
+ {
+ // find end of attribute value (matching quote character)
+ const sal_Char* pcValueEnd = lclFindCharacter( pcValueBeg + 1, pcEnd, *pcValueBeg );
+ if( (bOk = pcValueEnd < pcEnd) == true )
+ {
+ ++pcValueEnd;
+ OString aAttribName( pcNameBeg, static_cast< sal_Int32 >( pcNameEnd - pcNameBeg ) );
+ OString aAttribData( pcNameBeg, static_cast< sal_Int32 >( pcValueEnd - pcNameBeg ) );
+ // search for an existing attribute with the same name
+ AttributeNameMap::iterator aIt = aAttributeNames.find( aAttribName );
+ // remove its definition from the data map
+ if( aIt != aAttributeNames.end() )
+ aAttributes.erase( aIt->second );
+ // insert the attribute into both maps
+ aAttributeNames[ aAttribName ] = pcNameBeg;
+ aAttributes[ pcNameBeg ] = aAttribData;
+ // continue with next attribute (skip whitespace after this attribute)
+ pcNameBeg = pcValueEnd;
+ if( (pcNameBeg < pcEnd) && ((bOk = lclIsWhiteSpace( *pcNameBeg )) == true) )
+ pcNameBeg = lclFindNonWhiteSpace( pcNameBeg + 1, pcEnd );
+ }
+ }
+ }
+ }
+ }
+
+ // if no error has occured, build the resulting attribute list
+ if( bOk )
+ for( AttributeDataMap::iterator aIt = aAttributes.begin(), aEnd = aAttributes.end(); aIt != aEnd; ++aIt )
+ rBuffer.append( ' ' ).append( aIt->second );
+ // on error, just append the complete passed string
+ else
+ lclAppendToBuffer( rBuffer, pcBeg, pcEnd );
+}
+
+} // namespace
+
+// ============================================================================
+
StreamDataContainer::StreamDataContainer( const Reference< XInputStream >& rxInStrm )
{
if( rxInStrm.is() ) try
@@ -49,26 +163,101 @@ StreamDataContainer::StreamDataContainer( const Reference< XInputStream >& rxInS
{
}
- // parse the data and eat all parser instructions that make expat sad
if( maDataSeq.hasElements() )
{
- sal_Char* pcBeg = reinterpret_cast< sal_Char* >( maDataSeq.getArray() );
- sal_Char* pcEnd = pcBeg + maDataSeq.getLength();
- sal_Char* pcCurr = pcBeg;
+ const OString aCDataOpen = CREATE_OSTRING( "<![CDATA[" );
+ const OString aCDataClose = CREATE_OSTRING( "]]>" );
+
+ OStringBuffer aBuffer;
+ aBuffer.ensureCapacity( maDataSeq.getLength() + 256 );
+ const sal_Char* pcCurr = reinterpret_cast< const sal_Char* >( maDataSeq.getConstArray() );
+ const sal_Char* pcEnd = pcCurr + maDataSeq.getLength();
while( pcCurr < pcEnd )
{
- pcCurr = ::std::find( pcCurr, pcEnd, '<' );
- sal_Char* pcClose = ::std::find( pcCurr, pcEnd, '>' );
- if( (pcCurr < pcEnd) && (pcClose < pcEnd) && (pcClose - pcCurr >= 5) && (pcCurr[ 1 ] == '!') && (pcCurr[ 2 ] == '[') && (pcClose[ -1 ] == ']') )
+ // look for the next opening angle bracket
+ const sal_Char* pcOpen = lclFindCharacter( pcCurr, pcEnd, '<' );
+ // copy all characters from current position to opening bracket
+ lclAppendToBuffer( aBuffer, pcCurr, pcOpen );
+
+ // nothing to do if no opening bracket has been found
+ if( pcOpen < pcEnd )
{
- ++pcClose;
- memmove( pcCurr, pcClose, pcEnd - pcClose );
- pcEnd -= (pcClose - pcCurr);
+ // string length from opening bracket to end
+ sal_Int32 nLengthToEnd = static_cast< sal_Int32 >( pcEnd - pcOpen );
+
+ // check for CDATA part, starting with '<![CDATA['
+ if( rtl_str_compare_WithLength( pcOpen, nLengthToEnd, aCDataOpen.getStr(), aCDataOpen.getLength() ) == 0 )
+ {
+ // search the position after the end tag ']]>'
+ sal_Int32 nClosePos = rtl_str_indexOfStr_WithLength( pcOpen, nLengthToEnd, aCDataClose.getStr(), aCDataClose.getLength() );
+ pcCurr = (nClosePos < 0) ? pcEnd : (pcOpen + nClosePos + aCDataClose.getLength());
+ // copy the entire CDATA part
+ lclAppendToBuffer( aBuffer, pcOpen, pcCurr );
+ }
+
+ // no CDATA part - process the element starting at pcOpen
+ else
+ {
+ // look for the next closing angle bracket
+ const sal_Char* pcClose = lclFindCharacter( pcOpen + 1, pcEnd, '>' );
+ // complete element found?
+ if( pcClose < pcEnd )
+ {
+ // continue after closing bracket
+ pcCurr = pcClose + 1;
+ // length of entire element with angle brackets
+ sal_Int32 nElementLen = static_cast< sal_Int32 >( pcCurr - pcOpen );
+
+ // skip parser instructions: '<![...]>'
+ if( (nElementLen >= 5) && (pcOpen[ 1 ] == '!') && (pcOpen[ 2 ] == '[') && (pcClose[ -1 ] == ']') )
+ {
+ // do nothing
+ }
+
+ // replace '<br>' elements with '<br/>' elements
+ else if( (nElementLen >= 4) && (pcOpen[ 1 ] == 'b') && (pcOpen[ 2 ] == 'r') && (lclFindNonWhiteSpace( pcOpen + 3, pcClose ) == pcClose) )
+ {
+ aBuffer.append( RTL_CONSTASCII_STRINGPARAM( "<br/>" ) );
+ }
+
+ // check start elements and empty elements for repeated attributes
+ else if( pcOpen[ 1 ] != '/' )
+ {
+ // find positions of text content inside brackets, exclude '/' in '<emptyelement/>'
+ const sal_Char* pcContentBeg = pcOpen + 1;
+ bool bIsEmptyElement = pcClose[ -1 ] == '/';
+ const sal_Char* pcContentEnd = bIsEmptyElement ? (pcClose - 1) : pcClose;
+ // append element name to buffer
+ const sal_Char* pcWhiteSpace = lclFindWhiteSpace( pcContentBeg, pcContentEnd );
+ lclAppendToBuffer( aBuffer, pcOpen, pcWhiteSpace );
+ // find begin of attributes, and process all attributes
+ const sal_Char* pcAttribBeg = lclFindNonWhiteSpace( pcWhiteSpace, pcContentEnd );
+ if( pcAttribBeg < pcContentEnd )
+ lclProcessAttribs( aBuffer, pcAttribBeg, pcContentEnd );
+ // close the element
+ if( bIsEmptyElement )
+ aBuffer.append( '/' );
+ aBuffer.append( '>' );
+ }
+
+ // append end elements without further processing
+ else
+ {
+ lclAppendToBuffer( aBuffer, pcOpen, pcCurr );
+ }
+ }
+ else
+ {
+ // no complete element found, copy all from opening bracket to end
+ lclAppendToBuffer( aBuffer, pcOpen, pcEnd );
+ pcCurr = pcEnd;
+ }
+ }
}
- else
- pcCurr = pcClose;
}
- maDataSeq.realloc( static_cast< sal_Int32 >( pcEnd - pcBeg ) );
+
+ // set the final data sequence
+ maDataSeq = ::comphelper::ByteSequence( reinterpret_cast< const sal_Int8* >( aBuffer.getStr() ), aBuffer.getLength() );
}
}
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
index 40b3e9952b43..d557a7f50354 100644
--- a/oox/source/vml/vmlshape.cxx
+++ b/oox/source/vml/vmlshape.cxx
@@ -36,6 +36,7 @@
#include <com/sun/star/drawing/XShapes.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include "properties.hxx"
+#include "oox/helper/graphichelper.hxx"
#include "oox/helper/propertymap.hxx"
#include "oox/helper/propertyset.hxx"
#include "oox/core/xmlfilterbase.hxx"
@@ -99,7 +100,7 @@ Reference< XShape > lclCreateXShape( const XmlFilterBase& rFilter, const OUStrin
Reference< XShape > xShape;
try
{
- Reference< XMultiServiceFactory > xFactory( rFilter.getModel(), UNO_QUERY_THROW );
+ Reference< XMultiServiceFactory > xFactory( rFilter.getModelFactory(), UNO_SET_THROW );
xShape.set( xFactory->createInstance( rService ), UNO_QUERY_THROW );
}
catch( Exception& )
@@ -165,7 +166,7 @@ void ShapeTypeModel::assignUsed( const ShapeTypeModel& rSource )
// ----------------------------------------------------------------------------
-ShapeType::ShapeType( const Drawing& rDrawing ) :
+ShapeType::ShapeType( Drawing& rDrawing ) :
mrDrawing( rDrawing )
{
}
@@ -237,7 +238,7 @@ ShapeClientData& ShapeModel::createClientData()
// ----------------------------------------------------------------------------
-ShapeBase::ShapeBase( const Drawing& rDrawing ) :
+ShapeBase::ShapeBase( Drawing& rDrawing ) :
ShapeType( rDrawing )
{
}
@@ -270,7 +271,14 @@ Reference< XShape > ShapeBase::convertAndInsert( const Reference< XShapes >& rxS
Rectangle aShapeRect = calcShapeRectangle( pParentAnchor );
// convert the shape, if the calculated rectangle is not empty
if( ((aShapeRect.Width > 0) || (aShapeRect.Height > 0)) && rxShapes.is() )
+ {
xShape = implConvertAndInsert( rxShapes, aShapeRect );
+ /* Notify the drawing that a new shape has been inserted (but not
+ for children of group shapes). For convenience, pass the
+ rectangle that contains position and size of the shape. */
+ if( !pParentAnchor && xShape.is() )
+ mrDrawing.notifyShapeInserted( xShape, aShapeRect );
+ }
}
return xShape;
}
@@ -318,7 +326,7 @@ void ShapeBase::convertShapeProperties( const Reference< XShape >& rxShape ) con
// ============================================================================
-SimpleShape::SimpleShape( const Drawing& rDrawing, const OUString& rService ) :
+SimpleShape::SimpleShape( Drawing& rDrawing, const OUString& rService ) :
ShapeBase( rDrawing ),
maService( rService )
{
@@ -333,21 +341,21 @@ Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes
// ============================================================================
-RectangleShape::RectangleShape( const Drawing& rDrawing ) :
+RectangleShape::RectangleShape( Drawing& rDrawing ) :
SimpleShape( rDrawing, CREATE_OUSTRING( "com.sun.star.drawing.RectangleShape" ) )
{
}
// ============================================================================
-EllipseShape::EllipseShape( const Drawing& rDrawing ) :
+EllipseShape::EllipseShape( Drawing& rDrawing ) :
SimpleShape( rDrawing, CREATE_OUSTRING( "com.sun.star.drawing.EllipseShape" ) )
{
}
// ============================================================================
-PolyLineShape::PolyLineShape( const Drawing& rDrawing ) :
+PolyLineShape::PolyLineShape( Drawing& rDrawing ) :
SimpleShape( rDrawing, CREATE_OUSTRING( "com.sun.star.drawing.PolyLineShape" ) )
{
}
@@ -372,7 +380,7 @@ Reference< XShape > PolyLineShape::implConvertAndInsert( const Reference< XShape
// ============================================================================
-CustomShape::CustomShape( const Drawing& rDrawing ) :
+CustomShape::CustomShape( Drawing& rDrawing ) :
SimpleShape( rDrawing, CREATE_OUSTRING( "com.sun.star.drawing.CustomShape" ) )
{
}
@@ -397,7 +405,7 @@ Reference< XShape > CustomShape::implConvertAndInsert( const Reference< XShapes
// ============================================================================
-ComplexShape::ComplexShape( const Drawing& rDrawing ) :
+ComplexShape::ComplexShape( Drawing& rDrawing ) :
CustomShape( rDrawing )
{
}
@@ -424,7 +432,7 @@ Reference< XShape > ComplexShape::implConvertAndInsert( const Reference< XShapes
// set the replacement graphic
if( aGraphicPath.getLength() > 0 )
{
- Reference< XGraphic > xGraphic = rFilter.importEmbeddedGraphic( aGraphicPath );
+ Reference< XGraphic > xGraphic = rFilter.getGraphicHelper().importEmbeddedGraphic( aGraphicPath );
if( xGraphic.is() )
aOleProps[ PROP_Graphic ] <<= xGraphic;
}
@@ -471,7 +479,7 @@ Reference< XShape > ComplexShape::implConvertAndInsert( const Reference< XShapes
Reference< XShape > xShape = lclCreateAndInsertXShape( rFilter, rxShapes, CREATE_OUSTRING( "com.sun.star.drawing.GraphicObjectShape" ), rShapeRect );
if( xShape.is() )
{
- OUString aGraphicUrl = rFilter.importEmbeddedGraphicObject( aGraphicPath );
+ OUString aGraphicUrl = rFilter.getGraphicHelper().importEmbeddedGraphicObject( aGraphicPath );
if( aGraphicUrl.getLength() > 0 )
{
PropertySet aPropSet( xShape );
@@ -487,7 +495,7 @@ Reference< XShape > ComplexShape::implConvertAndInsert( const Reference< XShapes
// ============================================================================
-GroupShape::GroupShape( const Drawing& rDrawing ) :
+GroupShape::GroupShape( Drawing& rDrawing ) :
ShapeBase( rDrawing ),
mxChildren( new ShapeContainer( rDrawing ) )
{
diff --git a/oox/source/vml/vmlshapecontainer.cxx b/oox/source/vml/vmlshapecontainer.cxx
index 8e36e4b0054e..a3bdfdb217d7 100644
--- a/oox/source/vml/vmlshapecontainer.cxx
+++ b/oox/source/vml/vmlshapecontainer.cxx
@@ -60,7 +60,7 @@ void lclMapShapesById( RefMap< OUString, ShapeType >& orMap, const RefVector< Sh
// ============================================================================
-ShapeContainer::ShapeContainer( const Drawing& rDrawing ) :
+ShapeContainer::ShapeContainer( Drawing& rDrawing ) :
mrDrawing( rDrawing )
{
}
diff --git a/oox/source/vml/vmlshapecontext.cxx b/oox/source/vml/vmlshapecontext.cxx
index 09aa19902366..ec7da1d4d900 100644
--- a/oox/source/vml/vmlshapecontext.cxx
+++ b/oox/source/vml/vmlshapecontext.cxx
@@ -44,9 +44,9 @@ namespace {
/** Returns the boolean value from the specified VML attribute (if present).
*/
-OptValue< bool > lclDecodeBool( const AttributeList& rAttribs, sal_Int32 nElement )
+OptValue< bool > lclDecodeBool( const AttributeList& rAttribs, sal_Int32 nToken )
{
- OptValue< OUString > oValue = rAttribs.getString( nElement );
+ OptValue< OUString > oValue = rAttribs.getString( nToken );
if( oValue.has() ) return OptValue< bool >( ConversionHelper::decodeBool( oValue.get() ) );
return OptValue< bool >();
}
@@ -54,18 +54,18 @@ OptValue< bool > lclDecodeBool( const AttributeList& rAttribs, sal_Int32 nElemen
/** Returns the percentage value from the specified VML attribute (if present).
The value will be normalized (1.0 is returned for 100%).
*/
-OptValue< double > lclDecodePercent( const AttributeList& rAttribs, sal_Int32 nElement, double fDefValue )
+OptValue< double > lclDecodePercent( const AttributeList& rAttribs, sal_Int32 nToken, double fDefValue )
{
- OptValue< OUString > oValue = rAttribs.getString( nElement );
+ OptValue< OUString > oValue = rAttribs.getString( nToken );
if( oValue.has() ) return OptValue< double >( ConversionHelper::decodePercent( oValue.get(), fDefValue ) );
return OptValue< double >();
}
/** Returns the integer value pair from the specified VML attribute (if present).
*/
-OptValue< Int32Pair > lclDecodeInt32Pair( const AttributeList& rAttribs, sal_Int32 nElement )
+OptValue< Int32Pair > lclDecodeInt32Pair( const AttributeList& rAttribs, sal_Int32 nToken )
{
- OptValue< OUString > oValue = rAttribs.getString( nElement );
+ OptValue< OUString > oValue = rAttribs.getString( nToken );
OptValue< Int32Pair > oRetValue;
if( oValue.has() )
{
@@ -78,9 +78,9 @@ OptValue< Int32Pair > lclDecodeInt32Pair( const AttributeList& rAttribs, sal_Int
/** Returns the percentage pair from the specified VML attribute (if present).
*/
-OptValue< DoublePair > lclDecodePercentPair( const AttributeList& rAttribs, sal_Int32 nElement )
+OptValue< DoublePair > lclDecodePercentPair( const AttributeList& rAttribs, sal_Int32 nToken )
{
- OptValue< OUString > oValue = rAttribs.getString( nElement );
+ OptValue< OUString > oValue = rAttribs.getString( nToken );
OptValue< DoublePair > oRetValue;
if( oValue.has() )
{
@@ -235,18 +235,26 @@ ContextHandlerRef ShapeTypeContext::onCreateContext( sal_Int32 nElement, const A
mrTypeModel.maFillModel.moFocus = lclDecodePercent( rAttribs, XML_focus, 0.0 );
mrTypeModel.maFillModel.moFocusPos = lclDecodePercentPair( rAttribs, XML_focusposition );
mrTypeModel.maFillModel.moFocusSize = lclDecodePercentPair( rAttribs, XML_focussize );
+ mrTypeModel.maFillModel.moBitmapPath = decodeFragmentPath( rAttribs, O_TOKEN( relid ) );
mrTypeModel.maFillModel.moRotate = lclDecodeBool( rAttribs, XML_rotate );
break;
case VML_TOKEN( imagedata ):
- OptValue< OUString > oGraphicRelId = rAttribs.getString( O_TOKEN( relid ) );
- if( oGraphicRelId.has() )
- mrTypeModel.moGraphicPath = getFragmentPathFromRelId( oGraphicRelId.get() );
+ mrTypeModel.moGraphicPath = decodeFragmentPath( rAttribs, O_TOKEN( relid ) );
mrTypeModel.moGraphicTitle = rAttribs.getString( O_TOKEN( title ) );
break;
}
return 0;
}
+OptValue< OUString > ShapeTypeContext::decodeFragmentPath( const AttributeList& rAttribs, sal_Int32 nToken ) const
+{
+ OptValue< OUString > oFragmentPath;
+ OptValue< OUString > oRelId = rAttribs.getString( nToken );
+ if( oRelId.has() )
+ oFragmentPath = getFragmentPathFromRelId( oRelId.get() );
+ return oFragmentPath;
+}
+
void ShapeTypeContext::setStyle( const OUString& rStyle )
{
sal_Int32 nIndex = 0;
diff --git a/oox/source/xls/chartsheetfragment.cxx b/oox/source/xls/chartsheetfragment.cxx
index 4980312900fd..287518584cc3 100644
--- a/oox/source/xls/chartsheetfragment.cxx
+++ b/oox/source/xls/chartsheetfragment.cxx
@@ -263,6 +263,7 @@ bool BiffChartsheetFragment::importFragment()
case BIFF8: switch( nRecId )
{
+ case BIFF_ID_CODENAME: rWorksheetSett.importCodeName( mrStrm ); break;
case BIFF_ID_HCENTER: rPageSett.importHorCenter( mrStrm ); break;
case BIFF_ID_OBJECTPROTECT: rWorksheetSett.importObjectProtect( mrStrm ); break;
case BIFF_ID_PICTURE: rPageSett.importPicture( mrStrm ); break;
diff --git a/oox/source/xls/drawingfragment.cxx b/oox/source/xls/drawingfragment.cxx
index 28687ba92da7..172530692923 100644
--- a/oox/source/xls/drawingfragment.cxx
+++ b/oox/source/xls/drawingfragment.cxx
@@ -62,6 +62,7 @@ using ::com::sun::star::form::binding::XBindableValue;
using ::com::sun::star::form::binding::XListEntrySink;
using ::com::sun::star::form::binding::XListEntrySource;
using ::com::sun::star::form::binding::XValueBinding;
+using ::com::sun::star::drawing::XShape;
using ::com::sun::star::table::CellAddress;
using ::com::sun::star::table::CellRangeAddress;
using ::oox::core::ContextHandlerRef;
@@ -508,9 +509,13 @@ void OoxDrawingFragment::onEndElement( const OUString& rChars )
case XDR_TOKEN( twoCellAnchor ):
if( mxDrawPage.is() && mxShape.get() && mxAnchor.get() && mxAnchor->isValidAnchor() )
{
- Rectangle aLoc = mxAnchor->calcEmuLocation( maEmuSheetSize );
- if( (aLoc.X >= 0) && (aLoc.Y >= 0) && (aLoc.Width >= 0) && (aLoc.Height >= 0) )
- mxShape->addShape( getOoxFilter(), &getTheme(), mxDrawPage, &aLoc );
+ Rectangle aShapeRect = mxAnchor->calcEmuLocation( maEmuSheetSize );
+ if( (aShapeRect.X >= 0) && (aShapeRect.Y >= 0) && (aShapeRect.Width >= 0) && (aShapeRect.Height >= 0) )
+ {
+ mxShape->addShape( getOoxFilter(), &getTheme(), mxDrawPage, &aShapeRect );
+ // collect all shape positions in the WorksheetHelper base class
+ extendShapeBoundingBox( aShapeRect );
+ }
}
mxShape.reset();
mxAnchor.reset();
@@ -648,6 +653,12 @@ void VmlDrawing::convertControlClientData( const Reference< XControlModel >& rxC
}
}
+void VmlDrawing::notifyShapeInserted( const Reference< XShape >& /*rxShape*/, const Rectangle& rShapeRect )
+{
+ // collect all shape positions in the WorksheetHelper base class
+ extendShapeBoundingBox( rShapeRect );
+}
+
// ============================================================================
OoxVmlDrawingFragment::OoxVmlDrawingFragment( const WorksheetHelper& rHelper, const OUString& rFragmentPath ) :
diff --git a/oox/source/xls/formulabase.cxx b/oox/source/xls/formulabase.cxx
index b2e5ba0ee931..ea353bb48558 100644
--- a/oox/source/xls/formulabase.cxx
+++ b/oox/source/xls/formulabase.cxx
@@ -1262,6 +1262,11 @@ bool OpCodeProviderImpl::initFuncOpCode( FunctionInfo& orFuncInfo, const ApiToke
maParserMap.push_back( aEntry );
}
}
+ else
+ {
+ // ignore entries for functions unknown by Calc *and* by Excel
+ bIsValid = orFuncInfo.maOoxFuncName.getLength() == 0;
+ }
}
else if( orFuncInfo.mnBiffFuncId == BIFF_FUNC_EXTERNCALL )
{
diff --git a/oox/source/xls/pagesettings.cxx b/oox/source/xls/pagesettings.cxx
index c0b1011fdbcc..0a5ce05a37df 100644
--- a/oox/source/xls/pagesettings.cxx
+++ b/oox/source/xls/pagesettings.cxx
@@ -440,7 +440,7 @@ void PageSettings::importPictureData( const Relations& rRelations, const OUStrin
{
OUString aPicturePath = rRelations.getFragmentPathFromRelId( rRelId );
if( aPicturePath.getLength() > 0 )
- maModel.maGraphicUrl = getBaseFilter().importEmbeddedGraphicObject( aPicturePath );
+ maModel.maGraphicUrl = getBaseFilter().getGraphicHelper().importEmbeddedGraphicObject( aPicturePath );
}
// ============================================================================
diff --git a/oox/source/xls/sheetdatacontext.cxx b/oox/source/xls/sheetdatacontext.cxx
index 43c2f1b0b654..05e4c5bfe767 100644
--- a/oox/source/xls/sheetdatacontext.cxx
+++ b/oox/source/xls/sheetdatacontext.cxx
@@ -364,6 +364,10 @@ void OoxSheetDataContext::importCell( const AttributeList& rAttribs )
maCurrCell.mnXfId = rAttribs.getInteger( XML_s, -1 );
maCurrCell.mbShowPhonetic = rAttribs.getBool( XML_ph, false );
mxInlineStr.reset();
+
+ // update used area of the sheet
+ if( maCurrCell.mxCell.is() )
+ extendUsedArea( maCurrCell.maAddress );
}
void OoxSheetDataContext::importFormula( const AttributeList& rAttribs )
@@ -396,6 +400,10 @@ void OoxSheetDataContext::importCellHeader( RecordInputStream& rStrm, CellType e
maCurrCell.mxCell = getCell( maCurrPos, &maCurrCell.maAddress );
maCurrCell.mnXfId = extractValue< sal_Int32 >( nXfId, 0, 24 );
maCurrCell.mbShowPhonetic = getFlag( nXfId, OOBIN_CELL_SHOWPHONETIC );
+
+ // update used area of the sheet
+ if( maCurrCell.mxCell.is() )
+ extendUsedArea( maCurrCell.maAddress );
}
void OoxSheetDataContext::importCellBool( RecordInputStream& rStrm, CellType eCellType )
@@ -701,6 +709,9 @@ void BiffSheetDataContext::setCurrCell( const BinAddress& rAddr )
{
maCurrCell.reset();
maCurrCell.mxCell = getCell( rAddr, &maCurrCell.maAddress );
+ // update used area of the sheet
+ if( maCurrCell.mxCell.is() )
+ extendUsedArea( maCurrCell.maAddress );
}
void BiffSheetDataContext::importXfId( bool bBiff2 )
diff --git a/oox/source/xls/stylesbuffer.cxx b/oox/source/xls/stylesbuffer.cxx
index b9a11b5104ea..5a149961c0e2 100644
--- a/oox/source/xls/stylesbuffer.cxx
+++ b/oox/source/xls/stylesbuffer.cxx
@@ -306,7 +306,7 @@ sal_Int32 lclReadRgbColor( BinaryInputStream& rStrm )
// ============================================================================
ExcelGraphicHelper::ExcelGraphicHelper( const WorkbookHelper& rHelper ) :
- GraphicHelper( rHelper.getGlobalFactory(), rHelper.getBaseFilter().getTargetFrame() ),
+ GraphicHelper( rHelper.getGlobalFactory(), rHelper.getBaseFilter().getTargetFrame(), rHelper.getBaseFilter().getStorage() ),
WorkbookHelper( rHelper )
{
}
diff --git a/oox/source/xls/viewsettings.cxx b/oox/source/xls/viewsettings.cxx
index 3d88e64dbb12..05dfa7bf9f96 100644
--- a/oox/source/xls/viewsettings.cxx
+++ b/oox/source/xls/viewsettings.cxx
@@ -26,11 +26,14 @@
************************************************************************/
#include "oox/xls/viewsettings.hxx"
+#include <com/sun/star/awt/Point.hpp>
+#include <com/sun/star/awt/Size.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/container/XIndexContainer.hpp>
#include <com/sun/star/document/XViewDataSupplier.hpp>
#include <com/sun/star/text/WritingMode2.hpp>
+#include <comphelper/mediadescriptor.hxx>
#include "properties.hxx"
#include "oox/helper/attributelist.hxx"
#include "oox/helper/containerhelper.hxx"
@@ -38,22 +41,26 @@
#include "oox/helper/propertyset.hxx"
#include "oox/helper/recordinputstream.hxx"
#include "oox/core/filterbase.hxx"
+#include "oox/xls/addressconverter.hxx"
#include "oox/xls/biffinputstream.hxx"
#include "oox/xls/unitconverter.hxx"
#include "oox/xls/workbooksettings.hxx"
#include "oox/xls/worksheetbuffer.hxx"
using ::rtl::OUString;
-using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::uno::Exception;
-using ::com::sun::star::uno::UNO_QUERY_THROW;
+using ::com::sun::star::awt::Point;
+using ::com::sun::star::awt::Size;
using ::com::sun::star::container::XNameContainer;
using ::com::sun::star::container::XIndexContainer;
using ::com::sun::star::container::XIndexAccess;
using ::com::sun::star::document::XViewDataSupplier;
using ::com::sun::star::table::CellAddress;
+using ::com::sun::star::table::CellRangeAddress;
+using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::UNO_QUERY_THROW;
using ::oox::core::FilterBase;
namespace oox {
@@ -622,7 +629,8 @@ WorkbookViewModel::WorkbookViewModel() :
// ----------------------------------------------------------------------------
ViewSettings::ViewSettings( const WorkbookHelper& rHelper ) :
- WorkbookHelper( rHelper )
+ WorkbookHelper( rHelper ),
+ mbValidOleSize( false )
{
}
@@ -643,6 +651,12 @@ void ViewSettings::importWorkbookView( const AttributeList& rAttribs )
rModel.mbMinimized = rAttribs.getBool( XML_minimized, false );
}
+void ViewSettings::importOleSize( const AttributeList& rAttribs )
+{
+ OUString aRange = rAttribs.getString( XML_ref, OUString() );
+ mbValidOleSize = getAddressConverter().convertToCellRange( maOleSize, aRange, 0, true, false );
+}
+
void ViewSettings::importWorkbookView( RecordInputStream& rStrm )
{
WorkbookViewModel& rModel = createWorkbookView();
@@ -655,6 +669,13 @@ void ViewSettings::importWorkbookView( RecordInputStream& rStrm )
rModel.mbMinimized = getFlag( nFlags, OOBIN_WBVIEW_MINIMIZED );
}
+void ViewSettings::importOleSize( RecordInputStream& rStrm )
+{
+ BinRange aBinRange;
+ rStrm >> aBinRange;
+ mbValidOleSize = getAddressConverter().convertToCellRange( maOleSize, aBinRange, 0, true, false );
+}
+
void ViewSettings::importWindow1( BiffInputStream& rStrm )
{
sal_uInt16 nWinX, nWinY, nWinWidth, nWinHeight;
@@ -691,12 +712,25 @@ void ViewSettings::importWindow1( BiffInputStream& rStrm )
}
}
+void ViewSettings::importOleSize( BiffInputStream& rStrm )
+{
+ rStrm.skip( 2 );
+ BinRange aBinRange;
+ aBinRange.read( rStrm, false );
+ mbValidOleSize = getAddressConverter().convertToCellRange( maOleSize, aBinRange, 0, true, false );
+}
+
void ViewSettings::setSheetViewSettings( sal_Int16 nSheet, const SheetViewModelRef& rxSheetView, const Any& rProperties )
{
maSheetViews[ nSheet ] = rxSheetView;
maSheetProps[ nSheet ] = rProperties;
}
+void ViewSettings::setSheetUsedArea( const CellRangeAddress& rUsedArea )
+{
+ maSheetUsedAreas[ rUsedArea.Sheet ] = rUsedArea;
+}
+
void ViewSettings::finalizeImport()
{
const WorksheetBuffer& rWorksheets = getWorksheets();
@@ -751,6 +785,31 @@ void ViewSettings::finalizeImport()
{
OSL_ENSURE( false, "ViewSettings::finalizeImport - cannot create document view settings" );
}
+
+ /* Set visible area to be used if this document is an embedded OLE object.
+ #i44077# If a new OLE object is inserted from file, there is no OLESIZE
+ record in the Excel file. In this case, use the used area calculated
+ from file contents (used cells and drawing objects). */
+ maOleSize.Sheet = nActiveSheet;
+ const CellRangeAddress* pVisibleArea = mbValidOleSize ?
+ &maOleSize : ContainerHelper::getMapElement( maSheetUsedAreas, nActiveSheet );
+ if( pVisibleArea )
+ {
+ // calculate the visible area in units of 1/100 mm
+ PropertySet aRangeProp( getCellRangeFromDoc( *pVisibleArea ) );
+ Point aPos;
+ Size aSize;
+ if( aRangeProp.getProperty( aPos, PROP_Position ) && aRangeProp.getProperty( aSize, PROP_Size ) )
+ {
+ // set the visible area as sequence of long at the media descriptor
+ Sequence< sal_Int32 > aWinExtent( 4 );
+ aWinExtent[ 0 ] = aPos.X;
+ aWinExtent[ 1 ] = aPos.Y;
+ aWinExtent[ 2 ] = aPos.X + aSize.Width;
+ aWinExtent[ 3 ] = aPos.Y + aSize.Height;
+ getBaseFilter().getMediaDescriptor()[ CREATE_OUSTRING( "WinExtent" ) ] <<= aWinExtent;
+ }
+ }
}
sal_Int16 ViewSettings::getActiveCalcSheet() const
@@ -771,4 +830,3 @@ WorkbookViewModel& ViewSettings::createWorkbookView()
} // namespace xls
} // namespace oox
-
diff --git a/oox/source/xls/workbookfragment.cxx b/oox/source/xls/workbookfragment.cxx
index d64abf268008..6e43a32495be 100644
--- a/oox/source/xls/workbookfragment.cxx
+++ b/oox/source/xls/workbookfragment.cxx
@@ -105,6 +105,7 @@ ContextHandlerRef OoxWorkbookFragment::onCreateContext( sal_Int32 nElement, cons
case XLS_TOKEN( fileSharing ): getWorkbookSettings().importFileSharing( rAttribs ); break;
case XLS_TOKEN( workbookPr ): getWorkbookSettings().importWorkbookPr( rAttribs ); break;
case XLS_TOKEN( calcPr ): getWorkbookSettings().importCalcPr( rAttribs ); break;
+ case XLS_TOKEN( oleSize ): getViewSettings().importOleSize( rAttribs ); break;
}
break;
@@ -156,6 +157,7 @@ ContextHandlerRef OoxWorkbookFragment::onCreateRecordContext( sal_Int32 nRecId,
case OOBIN_ID_FILESHARING: getWorkbookSettings().importFileSharing( rStrm ); break;
case OOBIN_ID_WORKBOOKPR: getWorkbookSettings().importWorkbookPr( rStrm ); break;
case OOBIN_ID_CALCPR: getWorkbookSettings().importCalcPr( rStrm ); break;
+ case OOBIN_ID_OLESIZE: getViewSettings().importOleSize( rStrm ); break;
case OOBIN_ID_DEFINEDNAME: getDefinedNames().importDefinedName( rStrm ); break;
}
break;
@@ -565,6 +567,7 @@ bool BiffWorkbookFragment::importGlobalsFragment( ISegmentProgressBar& rProgress
case BIFF5_ID_FONT: rStyles.importFont( mrStrm ); break;
case BIFF4_ID_FORMAT: rStyles.importFormat( mrStrm ); break;
case BIFF_ID_HIDEOBJ: rWorkbookSett.importHideObj( mrStrm ); break;
+ case BIFF_ID_OLESIZE: rViewSett.importOleSize( mrStrm ); break;
case BIFF_ID_PALETTE: rStyles.importPalette( mrStrm ); break;
case BIFF_ID_PIVOTCACHE: rPivotCaches.importPivotCacheRef( mrStrm ); break;
case BIFF_ID_SHEET: rWorksheets.importSheet( mrStrm ); break;
@@ -587,14 +590,15 @@ bool BiffWorkbookFragment::importGlobalsFragment( ISegmentProgressBar& rProgress
case BIFF5_ID_FONT: rStyles.importFont( mrStrm ); break;
case BIFF4_ID_FORMAT: rStyles.importFormat( mrStrm ); break;
case BIFF_ID_HIDEOBJ: rWorkbookSett.importHideObj( mrStrm ); break;
- case BIFF_ID_VBAPROJECT: bHasVbaProject = true; break;
- case BIFF_ID_VBAPROJECTEMPTY: bEmptyVbaProject = true; break;
+ case BIFF_ID_OLESIZE: rViewSett.importOleSize( mrStrm ); break;
case BIFF_ID_PALETTE: rStyles.importPalette( mrStrm ); break;
case BIFF_ID_PIVOTCACHE: rPivotCaches.importPivotCacheRef( mrStrm ); break;
case BIFF_ID_SHEET: rWorksheets.importSheet( mrStrm ); break;
case BIFF_ID_SST: rSharedStrings.importSst( mrStrm ); break;
case BIFF_ID_STYLE: rStyles.importStyle( mrStrm ); break;
case BIFF_ID_USESELFS: rWorkbookSett.importUsesElfs( mrStrm ); break;
+ case BIFF_ID_VBAPROJECT: bHasVbaProject = true; break;
+ case BIFF_ID_VBAPROJECTEMPTY: bEmptyVbaProject = true; break;
case BIFF_ID_XCT: bExtLinkRec = true; break;
case BIFF5_ID_XF: rStyles.importXf( mrStrm ); break;
}
diff --git a/oox/source/xls/workbooksettings.cxx b/oox/source/xls/workbooksettings.cxx
index 40d400da7757..51d60ebafe3b 100644
--- a/oox/source/xls/workbooksettings.cxx
+++ b/oox/source/xls/workbooksettings.cxx
@@ -26,9 +26,9 @@
************************************************************************/
#include "oox/xls/workbooksettings.hxx"
+#include <com/sun/star/sheet/XCalculatable.hpp>
#include <com/sun/star/util/Date.hpp>
#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
-#include <com/sun/star/sheet/XCalculatable.hpp>
#include <comphelper/mediadescriptor.hxx>
#include "properties.hxx"
#include "oox/helper/attributelist.hxx"
@@ -39,11 +39,16 @@
#include "oox/xls/unitconverter.hxx"
using ::rtl::OUString;
+using ::com::sun::star::beans::XPropertySet;
+using ::com::sun::star::sheet::XCalculatable;
+using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::UNO_QUERY;
+using ::com::sun::star::uno::UNO_QUERY_THROW;
using ::com::sun::star::util::Date;
using ::com::sun::star::util::XNumberFormatsSupplier;
-using ::com::sun::star::sheet::XCalculatable;
+using ::comphelper::MediaDescriptor;
using ::oox::core::CodecHelper;
namespace oox {
@@ -191,23 +196,6 @@ void WorkbookSettings::setSaveExtLinkValues( bool bSaveExtLinks )
maBookSettings.mbSaveExtLinkValues = bSaveExtLinks;
}
-void WorkbookSettings::importFileSharing( BiffInputStream& rStrm )
-{
- maFileSharing.mbRecommendReadOnly = rStrm.readuInt16() != 0;
- rStrm >> maFileSharing.mnPasswordHash;
- if( getBiff() == BIFF8 )
- {
- sal_uInt16 nStrLen = rStrm.readuInt16();
- // there is no string flags field if string is empty
- if( nStrLen > 0 )
- maFileSharing.maUserName = rStrm.readUniStringBody( nStrLen );
- }
- else
- {
- maFileSharing.maUserName = rStrm.readByteStringUC( false, getTextEncoding() );
- }
-}
-
void WorkbookSettings::importBookBool( BiffInputStream& rStrm )
{
// value of 0 means save external values, value of 1 means strip external values
@@ -241,6 +229,23 @@ void WorkbookSettings::importDelta( BiffInputStream& rStrm )
rStrm >> maCalcSettings.mfIterateDelta;
}
+void WorkbookSettings::importFileSharing( BiffInputStream& rStrm )
+{
+ maFileSharing.mbRecommendReadOnly = rStrm.readuInt16() != 0;
+ rStrm >> maFileSharing.mnPasswordHash;
+ if( getBiff() == BIFF8 )
+ {
+ sal_uInt16 nStrLen = rStrm.readuInt16();
+ // there is no string flags field if string is empty
+ if( nStrLen > 0 )
+ maFileSharing.maUserName = rStrm.readUniStringBody( nStrLen );
+ }
+ else
+ {
+ maFileSharing.maUserName = rStrm.readByteStringUC( false, getTextEncoding() );
+ }
+}
+
void WorkbookSettings::importHideObj( BiffInputStream& rStrm )
{
maBookSettings.setBinObjectMode( rStrm.readuInt16() );
@@ -293,10 +298,21 @@ void WorkbookSettings::finalizeImport()
}
// write protection
- if( maFileSharing.mbRecommendReadOnly || (maFileSharing.mnPasswordHash != 0) )
+ if( maFileSharing.mbRecommendReadOnly || (maFileSharing.mnPasswordHash != 0) ) try
+ {
getBaseFilter().getMediaDescriptor()[ CREATE_OUSTRING( "ReadOnly" ) ] <<= true;
- if( maFileSharing.mnPasswordHash != 0 )
- aPropSet.setProperty( PROP_WriteProtectionPassword, static_cast< sal_Int32 >( maFileSharing.mnPasswordHash ) );
+
+ Reference< XPropertySet > xDocumentSettings( getDocumentFactory()->createInstance(
+ CREATE_OUSTRING( "com.sun.star.document.Settings" ) ), UNO_QUERY_THROW );
+ PropertySet aSettingsProp( xDocumentSettings );
+ if( maFileSharing.mbRecommendReadOnly )
+ aSettingsProp.setProperty( PROP_LoadReadonly, true );
+// if( maFileSharing.mnPasswordHash != 0 )
+// aSettingsProp.setProperty( PROP_ModifyPasswordHash, static_cast< sal_Int32 >( maFileSharing.mnPasswordHash ) );
+ }
+ catch( Exception& )
+ {
+ }
// calculation settings
Date aNullDate = getNullDate();
diff --git a/oox/source/xls/worksheetfragment.cxx b/oox/source/xls/worksheetfragment.cxx
index 14cf80a91d52..bee58fdbaff3 100644
--- a/oox/source/xls/worksheetfragment.cxx
+++ b/oox/source/xls/worksheetfragment.cxx
@@ -514,7 +514,12 @@ void OoxWorksheetFragment::importDimension( const AttributeList& rAttribs )
{
CellRangeAddress aRange;
getAddressConverter().convertToCellRangeUnchecked( aRange, rAttribs.getString( XML_ref, OUString() ), getSheetIndex() );
- setDimension( aRange );
+ /* OOXML stores the used area, if existing, or "A1" if the sheet is empty.
+ In case of "A1", the dimension at the WorksheetHelper object will not
+ be set. If the cell A1 exists, the used area will be updated while
+ importing the cell. */
+ if( (aRange.EndColumn > 0) || (aRange.EndRow > 0) )
+ extendUsedArea( aRange );
}
void OoxWorksheetFragment::importSheetFormatPr( const AttributeList& rAttribs )
@@ -619,7 +624,12 @@ void OoxWorksheetFragment::importDimension( RecordInputStream& rStrm )
aBinRange.read( rStrm );
CellRangeAddress aRange;
getAddressConverter().convertToCellRangeUnchecked( aRange, aBinRange, getSheetIndex() );
- setDimension( aRange );
+ /* BIFF12 stores the used area, if existing, or "A1" if the sheet is
+ empty. In case of "A1", the dimension at the WorksheetHelper object
+ will not be set. If the cell A1 exists, the used area will be updated
+ while importing the cell. */
+ if( (aRange.EndColumn > 0) || (aRange.EndRow > 0) )
+ extendUsedArea( aRange );
}
void OoxWorksheetFragment::importSheetFormatPr( RecordInputStream& rStrm )
@@ -1056,15 +1066,21 @@ void BiffWorksheetFragment::importDataValidation()
void BiffWorksheetFragment::importDimension()
{
+ // 32-bit row indexes in BIFF8
+ bool bInt32Rows = (mrStrm.getRecId() == BIFF3_ID_DIMENSION) && (getBiff() == BIFF8);
BinRange aBinRange;
- aBinRange.read( mrStrm, true, (mrStrm.getRecId() == BIFF3_ID_DIMENSION) && (getBiff() == BIFF8) );
- // first unused row/column index in BIFF, not last used
- if( aBinRange.maFirst.mnCol < aBinRange.maLast.mnCol ) --aBinRange.maLast.mnCol;
- if( aBinRange.maFirst.mnRow < aBinRange.maLast.mnRow ) --aBinRange.maLast.mnRow;
- // set dimension
- CellRangeAddress aRange;
- getAddressConverter().convertToCellRangeUnchecked( aRange, aBinRange, getSheetIndex() );
- setDimension( aRange );
+ aBinRange.read( mrStrm, true, bInt32Rows );
+ /* BIFF stores the used area with end column and end row increased by 1
+ (first unused column and row). */
+ if( (aBinRange.maFirst.mnCol < aBinRange.maLast.mnCol) && (aBinRange.maFirst.mnRow < aBinRange.maLast.mnRow) )
+ {
+ // reduce range to used area
+ --aBinRange.maLast.mnCol;
+ --aBinRange.maLast.mnRow;
+ CellRangeAddress aRange;
+ getAddressConverter().convertToCellRangeUnchecked( aRange, aBinRange, getSheetIndex() );
+ extendUsedArea( aRange );
+ }
}
void BiffWorksheetFragment::importHyperlink()
diff --git a/oox/source/xls/worksheethelper.cxx b/oox/source/xls/worksheethelper.cxx
index 381def644ce5..99c2d844f4b5 100644
--- a/oox/source/xls/worksheethelper.cxx
+++ b/oox/source/xls/worksheethelper.cxx
@@ -76,6 +76,7 @@
using ::rtl::OUString;
using ::rtl::OUStringBuffer;
using ::com::sun::star::awt::Point;
+using ::com::sun::star::awt::Rectangle;
using ::com::sun::star::awt::Size;
using ::com::sun::star::beans::XPropertySet;
using ::com::sun::star::drawing::XDrawPage;
@@ -124,11 +125,11 @@ namespace xls {
namespace {
-void lclUpdateProgressBar( ISegmentProgressBarRef xProgressBar, const CellRangeAddress& rDimension, sal_Int32 nRow )
+void lclUpdateProgressBar( ISegmentProgressBarRef xProgressBar, const CellRangeAddress& rUsedArea, sal_Int32 nRow )
{
- if( xProgressBar.get() && (rDimension.StartRow <= nRow) && (nRow <= rDimension.EndRow) )
+ if( xProgressBar.get() && (rUsedArea.StartRow <= nRow) && (nRow <= rUsedArea.EndRow) )
{
- double fPosition = static_cast< double >( nRow - rDimension.StartRow + 1 ) / (rDimension.EndRow - rDimension.StartRow + 1);
+ double fPosition = static_cast< double >( nRow - rUsedArea.StartRow + 1 ) / (rUsedArea.EndRow - rUsedArea.StartRow + 1);
if( xProgressBar->getPosition() < fPosition )
xProgressBar->setPosition( fPosition );
}
@@ -370,7 +371,7 @@ public:
/** Returns the type of this sheet. */
inline WorksheetType getSheetType() const { return meSheetType; }
/** Returns the index of the current sheet. */
- inline sal_Int16 getSheetIndex() const { return mnSheet; }
+ inline sal_Int16 getSheetIndex() const { return maUsedArea.Sheet; }
/** Returns the XSpreadsheet interface of the current sheet. */
inline const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet >&
getSheet() const { return mxSheet; }
@@ -394,13 +395,18 @@ public:
/** Returns the XDrawPage interface of the draw page of the current sheet. */
Reference< XDrawPage > getDrawPage() const;
+ /** Returns the size of the entire drawing page in 1/100 mm. */
+ Size getDrawPageSize() const;
- /** Returns the absolute cell position in 1/100 mm. */
+ /** Returns the absolute position of the top-left corner of the cell in 1/100 mm. */
Point getCellPosition( sal_Int32 nCol, sal_Int32 nRow ) const;
- /** Returns the cell size in 1/100 mm. */
+ /** Returns the size of the cell in 1/100 mm. */
Size getCellSize( sal_Int32 nCol, sal_Int32 nRow ) const;
- /** Returns the size of the entire drawing page in 1/100 mm. */
- Size getDrawPageSize() const;
+
+ /** Returns the address of the cell that contains the passed point in 1/100 mm. */
+ CellAddress getCellAddressFromPosition( const Point& rPosition, const CellAddress* pStartAddr = 0 ) const;
+ /** Returns the cell range address that contains the passed rectangle in 1/100 mm. */
+ CellRangeAddress getCellRangeFromRectangle( const Rectangle& rRect ) const;
/** Returns the worksheet settings object. */
inline WorksheetSettings& getWorksheetSettings() { return maSheetSett; }
@@ -419,8 +425,6 @@ public:
/** Changes the current sheet type. */
inline void setSheetType( WorksheetType eSheetType ) { meSheetType = eSheetType; }
- /** Sets the dimension (used area) of the sheet. */
- void setDimension( const CellRangeAddress& rRange );
/** Stores the cell format at the passed address. */
void setCellFormat( const CellModel& rModel );
/** Merges the cells in the passed cell range. */
@@ -436,6 +440,13 @@ public:
/** Sets the path to the legacy VML drawing fragment of this sheet. */
void setVmlDrawingPath( const OUString& rVmlDrawingPath );
+ /** Extends the used area of this sheet by the passed cell position. */
+ void extendUsedArea( const CellAddress& rAddress );
+ /** Extends the used area of this sheet by the passed cell range. */
+ void extendUsedArea( const CellRangeAddress& rRange );
+ /** Extends the shape bounding box by the position and size of the passed rectangle. */
+ void extendShapeBoundingBox( const Rectangle& rShapeRect );
+
/** Sets base width for all columns (without padding pixels). This value
is only used, if base width has not been set with setDefaultColumnWidth(). */
void setBaseColumnWidth( sal_Int32 nWidth );
@@ -536,6 +547,8 @@ private:
void finalizeDrawing();
/** Imports the drawing layer of the sheet (VML part). */
void finalizeVmlDrawing();
+ /** Extends the used cell area with the area used by drawing objects. */
+ void finalizeUsedArea();
/** Converts column properties for all columns in the sheet. */
void convertColumns();
@@ -560,7 +573,7 @@ private:
const OUString maSheetCellRanges; /// Service name for a SheetCellRanges object.
const OUString maUrlTextField; /// Service name for a URL text field.
const CellAddress& mrMaxApiPos; /// Reference to maximum Calc cell address from address converter.
- CellRangeAddress maDimension; /// Dimension (used) area of the sheet.
+ CellRangeAddress maUsedArea; /// Used area of the sheet, and sheet index of the sheet.
ColumnModel maDefColModel; /// Default column formatting.
ColumnModelMap maColModels; /// Columns sorted by first column index.
RowModel maDefRowModel; /// Default row formatting.
@@ -581,12 +594,12 @@ private:
VmlDrawingPtr mxVmlDrawing; /// Collection of all VML shapes.
OUString maDrawingPath; /// Path to DrawingML fragment.
OUString maVmlDrawingPath; /// Path to legacy VML drawing fragment.
+ Rectangle maShapeBoundingBox; /// Bounding box for all shapes from all drawings.
ISegmentProgressBarRef mxProgressBar; /// Sheet progress bar.
ISegmentProgressBarRef mxRowProgress; /// Progress bar for row/cell processing.
ISegmentProgressBarRef mxFinalProgress; /// Progress bar for finalization.
WorksheetType meSheetType; /// Type of this sheet.
Reference< XSpreadsheet > mxSheet; /// Reference to the current sheet.
- sal_Int16 mnSheet; /// Index of the current sheet.
bool mbHasDefWidth; /// True = default column width is set from defaultColWidth attribute.
};
@@ -599,6 +612,7 @@ WorksheetData::WorksheetData( const WorkbookHelper& rHelper, ISegmentProgressBar
maSheetCellRanges( CREATE_OUSTRING( "com.sun.star.sheet.SheetCellRanges" ) ),
maUrlTextField( CREATE_OUSTRING( "com.sun.star.text.TextField.URL" ) ),
mrMaxApiPos( rHelper.getAddressConverter().getMaxApiAddress() ),
+ maUsedArea( nSheet, SAL_MAX_INT32, SAL_MAX_INT32, -1, -1 ),
maSheetSett( *this ),
maSharedFmlas( *this ),
maCondFormats( *this ),
@@ -607,14 +621,11 @@ WorksheetData::WorksheetData( const WorkbookHelper& rHelper, ISegmentProgressBar
maSheetViewSett( *this ),
mxProgressBar( xProgressBar ),
meSheetType( eSheetType ),
- mnSheet( nSheet ),
mbHasDefWidth( false )
{
mxSheet = getSheetFromDoc( nSheet );
if( !mxSheet.is() )
- mnSheet = -1;
-
- maDimension.Sheet = mnSheet;
+ maUsedArea.Sheet = -1;
// default column settings (width and hidden state may be updated later)
maDefColModel.mfWidth = 8.5;
@@ -727,7 +738,7 @@ Reference< XTableColumns > WorksheetData::getColumns( sal_Int32 nFirstCol, sal_I
nLastCol = ::std::min( nLastCol, mrMaxApiPos.Column );
if( (0 <= nFirstCol) && (nFirstCol <= nLastCol) )
{
- Reference< XColumnRowRange > xRange( getCellRange( CellRangeAddress( mnSheet, nFirstCol, 0, nLastCol, 0 ) ), UNO_QUERY );
+ Reference< XColumnRowRange > xRange( getCellRange( CellRangeAddress( getSheetIndex(), nFirstCol, 0, nLastCol, 0 ) ), UNO_QUERY );
if( xRange.is() )
xColumns = xRange->getColumns();
}
@@ -740,7 +751,7 @@ Reference< XTableRows > WorksheetData::getRows( sal_Int32 nFirstRow, sal_Int32 n
nLastRow = ::std::min( nLastRow, mrMaxApiPos.Row );
if( (0 <= nFirstRow) && (nFirstRow <= nLastRow) )
{
- Reference< XColumnRowRange > xRange( getCellRange( CellRangeAddress( mnSheet, 0, nFirstRow, 0, nLastRow ) ), UNO_QUERY );
+ Reference< XColumnRowRange > xRange( getCellRange( CellRangeAddress( getSheetIndex(), 0, nFirstRow, 0, nLastRow ) ), UNO_QUERY );
if( xRange.is() )
xRows = xRange->getRows();
}
@@ -752,8 +763,7 @@ Reference< XDrawPage > WorksheetData::getDrawPage() const
Reference< XDrawPage > xDrawPage;
try
{
- Reference< XDrawPageSupplier > xDrawPageSupp( mxSheet, UNO_QUERY_THROW );
- xDrawPage = xDrawPageSupp->getDrawPage();
+ xDrawPage = Reference< XDrawPageSupplier >( mxSheet, UNO_QUERY_THROW )->getDrawPage();
}
catch( Exception& )
{
@@ -761,10 +771,18 @@ Reference< XDrawPage > WorksheetData::getDrawPage() const
return xDrawPage;
}
+Size WorksheetData::getDrawPageSize() const
+{
+ Size aSize;
+ PropertySet aRangeProp( getCellRange( CellRangeAddress( getSheetIndex(), 0, 0, mrMaxApiPos.Column, mrMaxApiPos.Row ) ) );
+ aRangeProp.getProperty( aSize, PROP_Size );
+ return aSize;
+}
+
Point WorksheetData::getCellPosition( sal_Int32 nCol, sal_Int32 nRow ) const
{
Point aPoint;
- PropertySet aCellProp( getCell( CellAddress( mnSheet, nCol, nRow ) ) );
+ PropertySet aCellProp( getCell( CellAddress( getSheetIndex(), nCol, nRow ) ) );
aCellProp.getProperty( aPoint, PROP_Position );
return aPoint;
}
@@ -772,22 +790,59 @@ Point WorksheetData::getCellPosition( sal_Int32 nCol, sal_Int32 nRow ) const
Size WorksheetData::getCellSize( sal_Int32 nCol, sal_Int32 nRow ) const
{
Size aSize;
- PropertySet aCellProp( getCell( CellAddress( mnSheet, nCol, nRow ) ) );
+ PropertySet aCellProp( getCell( CellAddress( getSheetIndex(), nCol, nRow ) ) );
aCellProp.getProperty( aSize, PROP_Size );
return aSize;
}
-Size WorksheetData::getDrawPageSize() const
+CellAddress WorksheetData::getCellAddressFromPosition( const Point& rPosition, const CellAddress* pStartAddr ) const
{
- Size aSize;
- PropertySet aRangeProp( getCellRange( CellRangeAddress( mnSheet, 0, 0, mrMaxApiPos.Column, mrMaxApiPos.Row ) ) );
- aRangeProp.getProperty( aSize, PROP_Size );
- return aSize;
+ // prepare start address for search loop
+ sal_Int32 nCol = pStartAddr ? ::std::min< sal_Int32 >( pStartAddr->Column + 1, mrMaxApiPos.Column ) : 1;
+ sal_Int32 nRow = pStartAddr ? ::std::min< sal_Int32 >( pStartAddr->Row + 1, mrMaxApiPos.Row ) : 1;
+
+ /* The loop will find the column/row index of the cell right of/below
+ the cell containing the passed point, unless the point is located at
+ the top or left border of the containing cell. */
+ bool bNextCol = true;
+ bool bNextRow = true;
+ Point aCellPos;
+ do
+ {
+ aCellPos = getCellPosition( nCol, nRow );
+ if( bNextCol && ((bNextCol = (aCellPos.X < rPosition.X) && (nCol < mrMaxApiPos.Column)) == true) )
+ ++nCol;
+ if( bNextRow && ((bNextRow = (aCellPos.Y < rPosition.Y) && (nRow < mrMaxApiPos.Row)) == true) )
+ ++nRow;
+ }
+ while( bNextCol || bNextRow );
+
+ /* The cell left of/above the current search position contains the passed
+ point, unless the point is located on the top/left border of the cell,
+ or the last column/row of the sheet has been reached. */
+ if( aCellPos.X > rPosition.X ) --nCol;
+ if( aCellPos.Y > rPosition.Y ) --nRow;
+ return CellAddress( getSheetIndex(), nCol, nRow );
}
-void WorksheetData::setDimension( const CellRangeAddress& rRange )
+CellRangeAddress WorksheetData::getCellRangeFromRectangle( const Rectangle& rRect ) const
{
- maDimension = rRange;
+ CellAddress aStartAddr = getCellAddressFromPosition( Point( rRect.X, rRect.Y ) );
+ Point aBotRight( rRect.X + rRect.Width, rRect.Y + rRect.Height );
+ CellAddress aEndAddr = getCellAddressFromPosition( aBotRight );
+ bool bMultiCols = aStartAddr.Column < aEndAddr.Column;
+ bool bMultiRows = aStartAddr.Row < aEndAddr.Row;
+ if( bMultiCols || bMultiRows )
+ {
+ /* Reduce end position of the cell range to previous column or row, if
+ the rectangle ends exactly between two columns or rows. */
+ Point aEndPos = getCellPosition( aEndAddr.Column, aEndAddr.Row );
+ if( bMultiCols && (aBotRight.X <= aEndPos.X) )
+ --aEndAddr.Column;
+ if( bMultiRows && (aBotRight.Y <= aEndPos.Y) )
+ --aEndAddr.Row;
+ }
+ return CellRangeAddress( getSheetIndex(), aStartAddr.Column, aStartAddr.Row, aEndAddr.Column, aEndAddr.Row );
}
void WorksheetData::setCellFormat( const CellModel& rModel )
@@ -874,6 +929,38 @@ void WorksheetData::setVmlDrawingPath( const OUString& rVmlDrawingPath )
maVmlDrawingPath = rVmlDrawingPath;
}
+void WorksheetData::extendUsedArea( const CellAddress& rAddress )
+{
+ maUsedArea.StartColumn = ::std::min( maUsedArea.StartColumn, rAddress.Column );
+ maUsedArea.StartRow = ::std::min( maUsedArea.StartRow, rAddress.Row );
+ maUsedArea.EndColumn = ::std::max( maUsedArea.EndColumn, rAddress.Column );
+ maUsedArea.EndRow = ::std::max( maUsedArea.EndRow, rAddress.Row );
+}
+
+void WorksheetData::extendUsedArea( const CellRangeAddress& rRange )
+{
+ extendUsedArea( CellAddress( rRange.Sheet, rRange.StartColumn, rRange.StartRow ) );
+ extendUsedArea( CellAddress( rRange.Sheet, rRange.EndColumn, rRange.EndRow ) );
+}
+
+void WorksheetData::extendShapeBoundingBox( const Rectangle& rShapeRect )
+{
+ if( (maShapeBoundingBox.Width == 0) && (maShapeBoundingBox.Height == 0) )
+ {
+ // width and height of maShapeBoundingBox are assumed to be zero on first cell
+ maShapeBoundingBox = rShapeRect;
+ }
+ else
+ {
+ sal_Int32 nEndX = ::std::max( maShapeBoundingBox.X + maShapeBoundingBox.Width, rShapeRect.X + rShapeRect.Width );
+ sal_Int32 nEndY = ::std::max( maShapeBoundingBox.Y + maShapeBoundingBox.Height, rShapeRect.Y + rShapeRect.Height );
+ maShapeBoundingBox.X = ::std::min( maShapeBoundingBox.X, rShapeRect.X );
+ maShapeBoundingBox.Y = ::std::min( maShapeBoundingBox.Y, rShapeRect.Y );
+ maShapeBoundingBox.Width = nEndX - maShapeBoundingBox.X;
+ maShapeBoundingBox.Height = nEndY - maShapeBoundingBox.Y;
+ }
+}
+
void WorksheetData::setBaseColumnWidth( sal_Int32 nWidth )
{
// do not modify width, if setDefaultColumnWidth() has been used
@@ -948,12 +1035,12 @@ void WorksheetData::setRowModel( const RowModel& rModel )
if( maRowModels.empty() || !maRowModels.rbegin()->second.tryExpand( rModel ) )
maRowModels[ nFirstRow ] = rModel;
}
- lclUpdateProgressBar( mxRowProgress, maDimension, nLastRow );
+ lclUpdateProgressBar( mxRowProgress, maUsedArea, nLastRow );
}
void WorksheetData::convertColumnFormat( sal_Int32 nFirstCol, sal_Int32 nLastCol, sal_Int32 nXfId ) const
{
- CellRangeAddress aRange( mnSheet, nFirstCol, 0, nLastCol, mrMaxApiPos.Row );
+ CellRangeAddress aRange( getSheetIndex(), nFirstCol, 0, nLastCol, mrMaxApiPos.Row );
if( getAddressConverter().validateCellRange( aRange, true, false ) )
{
PropertySet aPropSet( getCellRange( aRange ) );
@@ -963,7 +1050,7 @@ void WorksheetData::convertColumnFormat( sal_Int32 nFirstCol, sal_Int32 nLastCol
void WorksheetData::convertRowFormat( sal_Int32 nFirstRow, sal_Int32 nLastRow, sal_Int32 nXfId ) const
{
- CellRangeAddress aRange( mnSheet, 0, nFirstRow, mrMaxApiPos.Column, nLastRow );
+ CellRangeAddress aRange( getSheetIndex(), 0, nFirstRow, mrMaxApiPos.Column, nLastRow );
if( getAddressConverter().validateCellRange( aRange, true, false ) )
{
PropertySet aPropSet( getCellRange( aRange ) );
@@ -979,7 +1066,7 @@ void WorksheetData::initializeWorksheetImport()
/* Remember current sheet index in global data, needed by some global
objects, e.g. the chart converter. */
- setCurrentSheetIndex( mnSheet );
+ setCurrentSheetIndex( getSheetIndex() );
}
void WorksheetData::finalizeWorksheetImport()
@@ -994,6 +1081,8 @@ void WorksheetData::finalizeWorksheetImport()
maCondFormats.finalizeImport();
maPageSett.finalizeImport();
maSheetViewSett.finalizeImport();
+ maSheetSett.finalizeImport();
+
lclUpdateProgressBar( mxFinalProgress, 0.5 );
convertColumns();
convertRows();
@@ -1001,6 +1090,7 @@ void WorksheetData::finalizeWorksheetImport()
finalizeDrawing();
finalizeVmlDrawing();
maComments.finalizeImport(); // after VML drawing
+ finalizeUsedArea(); // after DML and VML drawing
lclUpdateProgressBar( mxFinalProgress, 1.0 );
// reset current sheet index in global data
@@ -1162,7 +1252,7 @@ void WorksheetData::finalizeHyperlinkRanges() const
OUString aUrl = getHyperlinkUrl( *aIt );
// try to insert URL into each cell of the range
if( aUrl.getLength() > 0 )
- for( CellAddress aAddress( mnSheet, aIt->maRange.StartColumn, aIt->maRange.StartRow ); aAddress.Row <= aIt->maRange.EndRow; ++aAddress.Row )
+ for( CellAddress aAddress( getSheetIndex(), aIt->maRange.StartColumn, aIt->maRange.StartRow ); aAddress.Row <= aIt->maRange.EndRow; ++aAddress.Row )
for( aAddress.Column = aIt->maRange.StartColumn; aAddress.Column <= aIt->maRange.EndColumn; ++aAddress.Column )
insertHyperlink( aAddress, aUrl );
}
@@ -1348,13 +1438,13 @@ void WorksheetData::finalizeMergedRange( const CellRangeAddress& rRange )
xMerge->merge( sal_True );
// if merging this range worked (no overlapping merged ranges), update cell borders
- Reference< XCell > xTopLeft( getCell( CellAddress( mnSheet, rRange.StartColumn, rRange.StartRow ) ), UNO_SET_THROW );
+ Reference< XCell > xTopLeft( getCell( CellAddress( getSheetIndex(), rRange.StartColumn, rRange.StartRow ) ), UNO_SET_THROW );
PropertySet aTopLeftProp( xTopLeft );
// copy right border of top-right cell to right border of top-left cell
if( bMultiCol )
{
- PropertySet aTopRightProp( getCell( CellAddress( mnSheet, rRange.EndColumn, rRange.StartRow ) ) );
+ PropertySet aTopRightProp( getCell( CellAddress( getSheetIndex(), rRange.EndColumn, rRange.StartRow ) ) );
BorderLine aLine;
if( aTopRightProp.getProperty( aLine, PROP_RightBorder ) )
aTopLeftProp.setProperty( PROP_RightBorder, aLine );
@@ -1363,7 +1453,7 @@ void WorksheetData::finalizeMergedRange( const CellRangeAddress& rRange )
// copy bottom border of bottom-left cell to bottom border of top-left cell
if( bMultiRow )
{
- PropertySet aBottomLeftProp( getCell( CellAddress( mnSheet, rRange.StartColumn, rRange.EndRow ) ) );
+ PropertySet aBottomLeftProp( getCell( CellAddress( getSheetIndex(), rRange.StartColumn, rRange.EndRow ) ) );
BorderLine aLine;
if( aBottomLeftProp.getProperty( aLine, PROP_BottomBorder ) )
aTopLeftProp.setProperty( PROP_BottomBorder, aLine );
@@ -1403,6 +1493,26 @@ void WorksheetData::finalizeVmlDrawing()
importOoxFragment( new OoxVmlDrawingFragment( *this, maVmlDrawingPath ) );
}
+void WorksheetData::finalizeUsedArea()
+{
+ /* Extend used area of the sheet by cells covered with drawing objects.
+ Needed if the imported document is inserted as "OLE object from file"
+ and thus does not provide an OLE size property by itself. */
+ if( (maShapeBoundingBox.Width > 0) || (maShapeBoundingBox.Height > 0) )
+ extendUsedArea( getCellRangeFromRectangle( maShapeBoundingBox ) );
+
+ // if no used area is set, default to A1
+ if( maUsedArea.StartColumn > maUsedArea.EndColumn )
+ maUsedArea.StartColumn = maUsedArea.EndColumn = 0;
+ if( maUsedArea.StartRow > maUsedArea.EndRow )
+ maUsedArea.StartRow = maUsedArea.EndRow = 0;
+
+ /* Register the used area of this sheet in global view settings. The
+ global view settings will set the visible area if this document is an
+ embedded OLE object. */
+ getViewSettings().setSheetUsedArea( maUsedArea );
+}
+
void WorksheetData::convertColumns()
{
sal_Int32 nNextCol = 0;
@@ -1549,14 +1659,14 @@ void WorksheetData::groupColumnsOrRows( sal_Int32 nFirstColRow, sal_Int32 nLastC
Reference< XSheetOutline > xOutline( mxSheet, UNO_QUERY_THROW );
if( bRows )
{
- CellRangeAddress aRange( mnSheet, 0, nFirstColRow, 0, nLastColRow );
+ CellRangeAddress aRange( getSheetIndex(), 0, nFirstColRow, 0, nLastColRow );
xOutline->group( aRange, ::com::sun::star::table::TableOrientation_ROWS );
if( bCollapse )
xOutline->hideDetail( aRange );
}
else
{
- CellRangeAddress aRange( mnSheet, nFirstColRow, 0, nLastColRow, 0 );
+ CellRangeAddress aRange( getSheetIndex(), nFirstColRow, 0, nLastColRow, 0 );
xOutline->group( aRange, ::com::sun::star::table::TableOrientation_COLUMNS );
if( bCollapse )
xOutline->hideDetail( aRange );
@@ -1856,11 +1966,6 @@ void WorksheetHelper::setSheetType( WorksheetType eSheetType )
mrSheetData.setSheetType( eSheetType );
}
-void WorksheetHelper::setDimension( const CellRangeAddress& rRange )
-{
- mrSheetData.setDimension( rRange );
-}
-
void WorksheetHelper::setCellFormat( const CellModel& rModel )
{
mrSheetData.setCellFormat( rModel );
@@ -2003,6 +2108,21 @@ void WorksheetHelper::setVmlDrawingPath( const OUString& rVmlDrawingPath )
mrSheetData.setVmlDrawingPath( rVmlDrawingPath );
}
+void WorksheetHelper::extendUsedArea( const CellAddress& rAddress )
+{
+ mrSheetData.extendUsedArea( rAddress );
+}
+
+void WorksheetHelper::extendUsedArea( const CellRangeAddress& rRange )
+{
+ mrSheetData.extendUsedArea( rRange );
+}
+
+void WorksheetHelper::extendShapeBoundingBox( const Rectangle& rShapeRect )
+{
+ mrSheetData.extendShapeBoundingBox( rShapeRect );
+}
+
void WorksheetHelper::setBaseColumnWidth( sal_Int32 nWidth )
{
mrSheetData.setBaseColumnWidth( nWidth );
diff --git a/oox/source/xls/worksheetsettings.cxx b/oox/source/xls/worksheetsettings.cxx
index 6a42c38e1647..0cc9d5f17780 100644
--- a/oox/source/xls/worksheetsettings.cxx
+++ b/oox/source/xls/worksheetsettings.cxx
@@ -26,15 +26,19 @@
************************************************************************/
#include "oox/xls/worksheetsettings.hxx"
-#include <com/sun/star/util/XProtectable.hpp>
-#include "properties.hxx"
#include "oox/helper/attributelist.hxx"
#include "oox/helper/recordinputstream.hxx"
#include "oox/xls/biffinputstream.hxx"
#include "oox/xls/pagesettings.hxx"
#include "oox/xls/workbooksettings.hxx"
+#include "oox/core/filterbase.hxx"
+#include "properties.hxx"
+
+#include <com/sun/star/util/XProtectable.hpp>
using ::rtl::OUString;
+using ::com::sun::star::beans::XPropertySet;
+using ::com::sun::star::uno::Any;
using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::UNO_QUERY_THROW;
@@ -319,6 +323,12 @@ void WorksheetSettings::finalizeImport()
// VBA code name
PropertySet aPropSet( getSheet() );
aPropSet.setProperty( PROP_CodeName, maSheetSettings.maCodeName );
+
+ if (!maSheetSettings.maTabColor.isAuto())
+ {
+ sal_Int32 nColor = maSheetSettings.maTabColor.getColor(getBaseFilter().getGraphicHelper());
+ aPropSet.setProperty(PROP_TabColor, nColor);
+ }
}
// ============================================================================
diff --git a/postprocess/checkdeliver/checkdeliver.pl b/postprocess/checkdeliver/checkdeliver.pl
index d2270a841848..a2c3800940ca 100644
--- a/postprocess/checkdeliver/checkdeliver.pl
+++ b/postprocess/checkdeliver/checkdeliver.pl
@@ -52,6 +52,7 @@ my @exceptionmodlist = (
"postprocess",
"instset.*native",
"smoketest.*native",
+ "testautomation",
"testgraphical"
); # modules not yet delivered
@@ -151,6 +152,11 @@ sub check
return 1;
}
+ if ( -z $listname ) {
+ print_logged( "Warning: empty deliver log file \'$listname\'. Module '$module' not delivered correctly?\n\n" );
+ return 0;
+ }
+
# read deliver log file
if ( ! open( DELIVERLOG, "< $listname" ) ) {
print_logged( "Error: cannot open file \'$listname\'\n$!" );
@@ -159,7 +165,7 @@ sub check
foreach ( <DELIVERLOG> ) {
next if ( /^LINK / );
# What's this modules' repository?
- if ( / (\w+?)\/$module\/prj\/build.lst/ ) {
+ if ( /COPY (\w[\w\s-]*?)\/$module\/prj\/build.lst/ ) {
$repository = $1;
}
# For now we concentrate on binaries, located in 'bin' or 'lib' and 'misc/build/<...>/[bin|lib]'.
@@ -177,7 +183,7 @@ sub check
close( DELIVERLOG );
if ( ! $repository ) {
- print_logged( "Error parsing \'$listname\': cannot determine repository\n");
+ print_logged( "Error parsing \'$listname\': cannot determine repository. Module '$module' not delivered correctly?\n\n" );
$error ++;
return $error;
}
diff --git a/python/makefile.mk b/python/makefile.mk
index 86d9835e8604..a35e596669a0 100644
--- a/python/makefile.mk
+++ b/python/makefile.mk
@@ -93,6 +93,7 @@ python_LDFLAGS=-mno-cygwin -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
python_LDFLAGS+=-shared-libgcc
.ENDIF
+python_LDFLAGS+=-shared-libgcc -Wl,--enable-runtime-pseudo-reloc-v2
CONFIGURE_ACTION=./configure --prefix=$(MYCWD)/python-inst --enable-shared CC="$(CC:s/guw.exe //)" CXX="$(CXX:s/guw.exe //)" MACHDEP=MINGW32 LN="cp -p" CFLAGS="$(python_CFLAGS)" LDFLAGS="$(python_LDFLAGS)"
BUILD_ACTION=$(ENV_BUILD) make && make install
.ELSE
diff --git a/readlicense_oo/docs/readme.xsl b/readlicense_oo/docs/readme.xsl
index 2c98b011c315..4e77fa522c3d 100755..100644
--- a/readlicense_oo/docs/readme.xsl
+++ b/readlicense_oo/docs/readme.xsl
@@ -1,232 +1,173 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
- <xsl:output method="html" doctype-public="-//W3C//DTD HTML 3.2//EN" />
-
- <!-- inputvariable declaration -->
- <xsl:param name="os1"/>
- <xsl:param name="gui1"/>
- <xsl:param name="cp1" />
- <xsl:param name="com1"/>
- <xsl:param name="lang1"/>
- <xsl:param name="type"/>
- <xsl:param name="file"/>
- <xsl:strip-space elements="*"/>
-<xsl:template match="/Readme">
- <!-- creates the HTML-output-->
- <xsl:if test="$type='html'">
- <!-- the outputname for htlm-files-->
- <html>
- <!-- HTML utf-8 encoding enable -->
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- </head>
- <body>
- <xsl:apply-templates/>
- </body>
- </html>
+<!-- <xsl:output method="text" doctype-public="-//W3C//DTD HTML 3.2//EN" omit-xml-declaration="yes"/> -->
- </xsl:if>
- <!-- creates the Textoutput -->
- <xsl:if test="$type='text'">
- <!-- the outputfilename for Textfiles -->
- <xsl:apply-templates/>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="Section">
- <xsl:apply-templates/>
-</xsl:template>
-
-
-<xsl:template match="Paragraph">
- <!-- match the given parameters one of the xmlattributes? -->
- <xsl:if test="@os=$os1 or @os='all'">
- <xsl:if test="@cpuname=$cp1 or @cpuname='all'">
- <xsl:if test="@gui=$gui1 or @gui='all'">
- <xsl:if test="@com=$com1 or @com='all'">
- <!--html-output -->
- <xsl:if test="$type='html'">
- <xsl:element name="{@style}">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:if>
- <!--text-output -->
- <xsl:if test="$type='text'">
- <xsl:if test="@style='h1' or @style='h2' or @style='h3' or @style='H1' or @style='H2' or @style='H3'">
- <xsl:choose>
- <xsl:when test='$os1="WNT"'>
- <xsl:text>&#xD;&#xA;------------------------------------------------------------&#xD;&#xA;</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>&#xA;------------------------------------------------------------&#xA;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- <!-- enter an carriage return line feed -->
- <xsl:if test="@style='p' or @style='P'">
- <xsl:choose>
- <xsl:when test='$os1="WNT"'>
- <xsl:text>&#xD;&#xA;</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>&#xA;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- <xsl:apply-templates/>
- <xsl:if test="@style='h1' or @style='h2' or @style='h3' or @style='hr' or @style='H1' or @style='H2' or @style='H3' or @style='HR'">
- <xsl:choose>
- <xsl:when test='$os1="WNT"'>
- <xsl:text>------------------------------------------------------------&#xD;&#xA;</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>------------------------------------------------------------&#xA;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="List">
- <!-- creates the listoutput, the html-tags will be ignored if textoutput is choosen -->
- <xsl:choose>
- <xsl:when test="@Enum='false'">
- <ul type="circle">
- <xsl:apply-templates/>
- </ul>
- </xsl:when>
- <xsl:when test="@Enum='true'">
- <ol>
- <xsl:apply-templates/>
- </ol>
- </xsl:when>
- </xsl:choose>
-</xsl:template>
-
-<xsl:template match="List//Text">
- <!-- create the list -->
- <xsl:if test="$type='html'">
- <xsl:if test="@xml:lang=$lang1">
- <li><xsl:apply-templates/></li>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$type='text'">
- <xsl:if test="@xml:lang=$lang1">
- <xsl:text>- </xsl:text>
- <xsl:apply-templates/>
- <xsl:choose>
- <xsl:when test='$os1="WNT"'>
- <xsl:text>&#xD;&#xA;</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>&#xA;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:if>
-</xsl:template>
-
-<!-- the textoutput of normal paragraph nodes -->
-<!-- these template will be used if an attribute xml:lang exists -->
-<xsl:template match="Section/Paragraph/Text[@xml:lang]">
- <xsl:if test="@xml:lang=$lang1">
- <!-- make the output with the given template -->
- <xsl:call-template name="out"/>
- </xsl:if>
-</xsl:template>
-
-<!-- these template will be used if no attribute xml:lang exists -->
-<xsl:template match="Section/Paragraph/Text[not (@xml:lang)]">
- <xsl:call-template name="out"/>
-</xsl:template>
-
-<!-- creates the outputtemplate out -->
-<xsl:template name="out">
- <!-- creates output with an extra CR/LF -->
- <xsl:if test="@Wrap='true'">
- <xsl:if test="$type='html'">
- <xsl:element name="br"/>
- <xsl:call-template name="prelinked"/>
+ <!-- inputvariable declaration -->
+ <xsl:param name="os1"/>
+ <xsl:param name="gui1"/>
+ <xsl:param name="cp1"/>
+ <xsl:param name="com1"/>
+ <xsl:param name="lang1"/>
+ <xsl:param name="type"/>
+ <xsl:param name="file"/>
+ <xsl:strip-space elements="*"/>
+
+ <xsl:param name="platform">
+ <xsl:if test="$os1='LINUX'">
+ <xsl:value-of select="'LINUX'"/>
</xsl:if>
- <xsl:if test="$type='text'">
- <xsl:choose>
- <xsl:when test='$os1="WNT"'>
- <xsl:text>&#xD;&#xA;</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>&#xA;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:call-template name="linked"/>
+ <xsl:if test="$os1='WNT'">
+ <xsl:value-of select="'WIN'"/>
</xsl:if>
- </xsl:if>
-
- <!-- here without the extra CR/LF-->
- <xsl:if test="@Wrap='false'">
- <xsl:if test="$type='html'">
- <xsl:call-template name="prelinked"/>
+ <xsl:if test="$os1='SOLARIS'">
+ <xsl:if test="$cp1='SPARC'">
+ <xsl:value-of select="'SOLSPARC'"/>
+ </xsl:if>
+ <xsl:if test="$cp1='INTEL'">
+ <xsl:value-of select="'SOLX86'"/>
+ </xsl:if>
</xsl:if>
- <xsl:if test="$type='text'">
- <xsl:call-template name="linked"/>
+ <xsl:if test="$os1='MACOSX'">
+ <xsl:value-of select="'MAC'"/>
</xsl:if>
- </xsl:if>
-</xsl:template>
+ </xsl:param>
+
+ <xsl:template match="/">
+ <xsl:choose>
+ <xsl:when test="$type='html'">
+
+ <xsl:document method="html" href="{$file}" doctype-public="-//W3C//DTD HTML 3.2//EN">
+ <xsl:apply-templates mode="html"/>
+ </xsl:document>
+
+ </xsl:when>
+ <xsl:when test="$type='text'">
+
+ <xsl:document method="text" href="{$file}">
+ <xsl:call-template name="textout" />
+ </xsl:document>
+
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="*" mode="html">
+ <xsl:choose>
+ <xsl:when test="(contains(@class,$platform) or not(@class) or (name(.)='p'))">
+ <xsl:if test="(@xml:lang=$lang1 or not(@xml:lang))"> <!-- check for correct language -->
+ <xsl:element name="{name(.)}">
+ <xsl:if test="(name(.)='a')">
+ <xsl:attribute name="href">
+ <xsl:value-of select="@href"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="(name(.)='p') and (@class)">
+ <xsl:attribute name="class">
+ <xsl:value-of select="@class"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:if test="name(.)='div'">
+ <xsl:attribute name="id">
+ <xsl:value-of select="@id"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates mode="html"/>
+ </xsl:element>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="textout">
+ <xsl:apply-templates />
+ </xsl:template>
+
+ <xsl:template match="*">
+ <xsl:if test="(@xml:lang=$lang1 or not(@xml:lang))"> <!-- check for correct language -->
+ <xsl:choose>
+ <xsl:when test="name(.)='html'">
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='body'">
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='hr'">
+ <xsl:text>
+
+----------------------------------------------------------------------------------------------------------
-<xsl:template name="prelinked">
- <xsl:if test=" @style='b ' or @style='B ' or @style='i ' or @style='I ' or @style='u ' or @style='U '">
- <xsl:element name="{@style}">
- <xsl:call-template name="linked"/>
- </xsl:element>
- </xsl:if>
- <xsl:if test="@style='none'">
- <xsl:call-template name="linked"/>
- </xsl:if>
-</xsl:template>
+</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(.)='div'">
+ <xsl:if test="(contains(@class,$platform) or not(@class))">
+ <xsl:apply-templates/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="name(.)='a'">
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='tt'">
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='li'">
+ <xsl:text>
+</xsl:text>* <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='ul'">
+ <xsl:text>
+</xsl:text>
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='ol'">
+ <xsl:text>
+</xsl:text>
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='p'">
+ <xsl:if test="(not(name(..)='li') and (count(a) = 0))">
+ <xsl:text>
-<xsl:template name="linked">
- <xsl:if test="$type='html'">
- <!--this template creates a link if the url attribute is true -->
- <xsl:if test="@url='false'">
- <xsl:apply-templates/>
- </xsl:if>
- <xsl:if test="@url='true'">
- <xsl:if test="@path='none'">
- <a><xsl:attribute name="href"> <xsl:apply-templates/></xsl:attribute><xsl:apply-templates/></a>
- </xsl:if>
- <xsl:if test="@path='file'">
- <a><xsl:attribute name="href"><xsl:text>file://localhost/</xsl:text><xsl:apply-templates/></xsl:attribute><xsl:apply-templates/></a>
- </xsl:if>
- <xsl:if test="@path='url'">
- <a><xsl:attribute name="href"><xsl:text>http://</xsl:text><xsl:apply-templates/></xsl:attribute><xsl:apply-templates/></a>
- </xsl:if>
- </xsl:if>
- <!-- this code is needed for the line before an link, if not an <p> will be added-->
- <xsl:if test="@url='ahead'">
- <xsl:apply-templates/>
- </xsl:if>
- </xsl:if>
- <xsl:if test="$type='text'">
- <xsl:if test="@url='false'">
- <xsl:apply-templates/>
- <xsl:choose>
- <xsl:when test='$os1="WNT"'>
- <xsl:text>&#xD;&#xA;</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>&#xA;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- <xsl:if test="@url='true' or @url='ahead'">
- <xsl:apply-templates/>
- </xsl:if>
+</xsl:text>
+ </xsl:if>
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when test="name(.)='h1'">
+ <xsl:text>
+
+======================================================================
+</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>
+======================================================================</xsl:text>
+ </xsl:when>
+ <xsl:when test="name(.)='h2'">
+ <xsl:text>
+
+----------------------------------------------------------------------
+</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>
+----------------------------------------------------------------------</xsl:text>
+
+ </xsl:when>
+ <xsl:when test="name(.)='h3'">
+ <xsl:text>
+
+</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>
+----------------------------------------------------------------------</xsl:text>
+
+ </xsl:when>
+ </xsl:choose>
</xsl:if>
-</xsl:template>
+ </xsl:template>
+
+
</xsl:stylesheet>
diff --git a/readlicense_oo/docs/readme/readme.xrm b/readlicense_oo/docs/readme/readme.xrm
index 2a8a409b4eff..78716869e822 100755
--- a/readlicense_oo/docs/readme/readme.xrm
+++ b/readlicense_oo/docs/readme/readme.xrm
@@ -1,524 +1,309 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE Readme SYSTEM "../readme.dtd"><!-- A paragraph id has to be unique within one section -->
-<Readme name="ooo_readme" col-span="0">
-
- <Section id="Welcome"> <!-- ALL PLATFORMS -->
-
- <Paragraph id="Welcome" style="H1">
- <Text id="a" xml:lang="en-US">Welcome</Text>
- </Paragraph>
-
- <Paragraph id="ReadMeTitle" style="H1">
- <Text id="a" xml:lang="en-US">${PRODUCTNAME} ${PRODUCTVERSION} ReadMe</Text>
- </Paragraph>
-
- <Paragraph id="LaterstUpdates">
- <Text id="a" xml:lang="en-US" url="ahead">For latest updates to this readme file, see </Text>
- <Text id="b" xml:lang="en-US" url="true">http://www.openoffice.org/welcome/readme.html</Text>
- </Paragraph>
-
- <Paragraph id="A5">
- <Text id="c" xml:lang="en-US">Dear User</Text>
- </Paragraph>
-
- <Paragraph id="A6">
- <Text id="d" xml:lang="en-US">This file contains important information about this program. Please read this information very carefully before starting work.</Text>
- </Paragraph>
-
- <Paragraph id="A7">
- <Text id="a" xml:lang="en-US" url="ahead">The OpenOffice.org Community, responsible for the development of this product, would like to invite you to participate as a community member. As a new user, you can check out the ${PRODUCTNAME} site with helpful user information at </Text>
- </Paragraph>
-
- <Paragraph id="A8">
- <Text id="empty" xml:lang="en-US"/>
- <Text id="b" xml:lang="en-US" url="true">http://www.openoffice.org/about_us/introduction.html </Text>
- </Paragraph>
-
- <Paragraph id="A9">
- <Text id="empty" xml:lang="en-US"/>
- <Text id="c" xml:lang="en-US">Also read the sections below about getting involved in the OpenOffice.org project. </Text>
- </Paragraph>
-
- <Paragraph id="A10" style="H3">
- <Text id="c" xml:lang="en-US">Is ${PRODUCTNAME} really free for any user? </Text>
- </Paragraph>
-
- <Paragraph id="A11">
- <Text id="empty" xml:lang="en-US"/>
- <Text id="a" xml:lang="en-US" url="ahead">${PRODUCTNAME} is free for use by everybody. You may take this copy of ${PRODUCTNAME} and install it on as many computers as you like, and use it for any purpose you like (including commercial, government, public administration and educational use). For further details see the license text delivered together with ${PRODUCTNAME} or </Text>
- <Text id="b" xml:lang="en-US" url="true">http://www.openoffice.org/license.html </Text>
- <Text id="d" xml:lang="en-US"></Text>
- </Paragraph>
-
- <Paragraph id="A12" style="H3">
- <Text id="A12a" xml:lang="en-US">Why is ${PRODUCTNAME} free for any user?</Text>
- </Paragraph>
-
- <Paragraph id="A13">
- <Text id="empty" xml:lang="en-US"/>
- <Text id="A13a" xml:lang="en-US">
- You can use this copy of ${PRODUCTNAME} today free of charge because individual contributors and corporate sponsors have designed, developed, tested, translated, documented, supported, marketed, and helped in many other ways to make ${PRODUCTNAME} what it is today - the world's leading open-source office software.</Text>
- <Text id="A13b" xml:lang="en-US" url="ahead">If you appreciate their efforts, and would like to ensure OpenOffice.org continues into the future, please consider contributing to the project - see </Text>
- <Text id="A13c" xml:lang="en-US" url="true">http://contributing.openoffice.org</Text>
- <Text id="A13d" xml:lang="en-US"> for details. Everyone has a contribution to make.</Text>
- </Paragraph>
-
- </Section>
-
- <Section id="Installation">
-
- <Paragraph id="Header" style="H2">
- <Text id="rr3fgf42r" xml:lang="en-US">Notes on Installation</Text>
- </Paragraph>
-
- <Paragraph id="All">
- <Text id="sdfsdfgf42r" xml:lang="en-US">System Requirements:</Text>
- </Paragraph>
-
- <Paragraph id="MacX_INTEL" os="MACOSX" cpuname="INTEL"><!-- MAC -->
- <List>
- <Text id="macxiOSX" xml:lang="en-US">MacOSX 10.4 (Tiger) or higher</Text>
- <Text id="macxicpu" xml:lang="en-US">Intel processor</Text>
- <Text id="macxiRAM" xml:lang="en-US">512 MB RAM</Text>
- <Text id="macxHardDiksSpace" xml:lang="en-US">500 MB available hard disk space</Text>
- <Text id="macxHardDiksSpaceCJK" xml:lang="en-US">Chinese, Japanese and Korean versions: 600 MB (multi-language version: 800 MB) available hard disk space)</Text>
- <Text id="macxivideo" xml:lang="en-US">1024 x 768 graphic device with 256 colors (higher resolution recommended)</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="WNT2" os="WNT"><!-- WINDOWS -->
- <List>
- <Text id="s2s3sdf2" xml:lang="en-US">Microsoft Windows 2000 (Service Pack 4 or higher), XP, or Vista</Text>
- <Text id="utzu6" xml:lang="en-US">Pentium compatible PC (Pentium III or Athlon recommended)</Text>
- <Text id="ghuj67" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</Text>
- <Text id="jzjtzu6" xml:lang="en-US">370 MB available hard disk space</Text>
- <Text id="WinHDCJK" xml:lang="en-US">Chinese, Japanese and Korean versions: 650 MB available hard disk space</Text>
- <Text id="jtzu56" xml:lang="en-US">1024x768 resolution (higher resolution recommended), at least 256 colors</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="Sols2" os="SOLARIS" cpuname="SPARC"><!-- SOLARIS SPARC-->
- <List>
- <Text id="s2335" xml:lang="en-US">Solaris 10 operating system (SPARC platform) or higher</Text>
- <Text id="s253" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</Text>
- <Text id="s23seg" xml:lang="en-US">480 MB available hard disk space</Text>
- <Text id="SolsHDCJK" xml:lang="en-US">Chinese, Japanese and Korean versions: 480 MB available hard disk space</Text>
- <Text id="s2s43gfe" xml:lang="en-US">X Server with 1024x768 resolution (higher resolution recommended), with at least 256 colors</Text>
- <Text id="n4234rw" xml:lang="en-US">Window Manager</Text>
- <Text id="wd2dff" xml:lang="en-US">Gnome 2.6 or higher, with the gail 1.8.6 and the at-spi 1.7 packages, required for support of assistive technology tools (AT tools)</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="Solia2" os="SOLARIS" cpuname="INTEL"><!-- SOLARIS INTEL -->
- <List>
- <Text id="s23h" xml:lang="en-US">Solaris 10 operating system (x86 platform) or higher</Text>
- <Text id="s24f" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</Text>
- <Text id="fgheg" xml:lang="en-US">480 MB available hard disk space</Text>
- <Text id="SoliHDCJK" xml:lang="en-US">Chinese, Japanese and Korean versions: 480 MB available hard disk space</Text>
- <Text id="fghfgh" xml:lang="en-US">X Server with 1024x768 resolution (higher resolution recommended), with at least 256 colors</Text>
- <Text id="mgjfg" xml:lang="en-US">Window Manager</Text>
- <Text id="wd2dff" xml:lang="en-US">Gnome 2.6 or higher, with the gail 1.8.6 and the at-spi 1.7 packages, required for support of assistive technology tools (AT tools)</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="Linuxi2" os="LINUX" cpuname="INTEL"><!-- LINUX -->
- <List>
- <Text id="s2we35" xml:lang="en-US">Linux Kernel version 2.4 or higher</Text>
- <Text id="s253we" xml:lang="en-US">glibc2 version 2.3.2 or higher</Text>
- <Text id="s256we" xml:lang="en-US">gtk version 2.2.0 or higher</Text>
- <Text id="s2etfseg" xml:lang="en-US">Pentium compatible PC (Pentium III or Athlon recommended)</Text>
- <Text id="s2ssdfe" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</Text>
- <Text id="n42dfgf" xml:lang="en-US">440 MB available hard disk space</Text>
- <Text id="LinHDCJK" xml:lang="en-US">Chinese, Japanese and Korean versions: 440 MB available hard disk space</Text>
- <Text id="ghjhhr" xml:lang="en-US">X Server with 1024x768 resolution (higher resolution recommended), with at least 256 colors</Text>
- <Text id="fhrtz5" xml:lang="en-US">Window Manager</Text>
- <Text id="wd2dff" xml:lang="en-US">Gnome 2.6 or higher, with the gail 1.8.6 and the at-spi 1.7 packages, required for support of assistive technology tools (AT tools)</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="Linuxi3" os="LINUX">
- <Text id="Linuxi3a" xml:lang="en-US">There is a wide variety of Linux distributions, and even within the same distribution there may be different installation options (KDE vs Gnome, etc.). Some distributions ship with their own ‘native’ version of ${PRODUCTNAME}, which may have different features from this Community ${PRODUCTNAME}. Sometimes you can install the Community ${PRODUCTNAME} alongside the ‘native’ version. However, it’s usually safer to remove the ‘native’ version before installing this Community version. Consult the documentation for your distribution for details of how to do this. </Text>
- </Paragraph>
-
- <Paragraph id="Linuxi4" os="LINUX">
- <Text id="Linuxi4a" xml:lang="en-US">It is recommended that you always backup your system before you remove or install software.</Text>
- </Paragraph>
-
- <Paragraph id="MSOReg" os="WNT">
- <Text id="MSOReg1" xml:lang="en-US">Registration of ${PRODUCTNAME} as default application for Microsoft Office formats can be forced or suppressed by using the following command line switches with the installer:</Text>
- <List>
- <Text id="MSOReg2" xml:lang="en-US">/msoreg=1 will force registration of ${PRODUCTNAME} as default application for Microsoft Office formats.</Text>
- <Text id="MSOReg3" xml:lang="en-US">/msoreg=0 will suppress registration of ${PRODUCTNAME} as default application for Microsoft Office formats.</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="DLLA" os="WNT">
- <Text id="DLLA1" xml:lang="en-US" url="ahead">If you perform an administrative installation using setup /a, you need to make sure that the file msvc90.dll is installed on the system. This file is required for ${PRODUCTNAME} to start after an administrative installation. You can get the file from </Text>
- <Text id="DLLA2" xml:lang="en-US" url="true">http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF </Text>
- <Text id="DLLA3" xml:lang="en-US"></Text>
- </Paragraph>
-
- <Section id="BerkeleyDB">
- <Paragraph id="BDB1" style="H2">
- <Text id="BDB11" xml:lang="en-US">Extension Database Incompatibility</Text>
- </Paragraph>
- </Section>
-
- <Paragraph id="BDB2">
- <Text id="BDB2a" xml:lang="en-US">The Berkeley database engine has been upgraded in this version of ${PRODUCTNAME}. The database engine upgrade introduces an incompatibility with user data for installed extensions for ${PRODUCTNAME} versions prior to 3.2 that may require your action if you downgrade your version of ${PRODUCTNAME}.</Text>
- </Paragraph>
-
- <Paragraph id="BDB3">
- <Text id="BDB3a" xml:lang="en-US">This version of ${PRODUCTNAME} will convert your extension database to the new Berkeley database format when extensions are installed or removed. After this conversion, the database can no longer be read by earlier versions of ${PRODUCTNAME}. Downgrading to an earlier version may result in a dysfunctional installation.</Text>
- </Paragraph>
-
- <Paragraph id="BDB4">
- <Text id="BDB4a" xml:lang="en-US">If you downgrade to an earlier version of ${PRODUCTNAME}, you must remove the user data directory {user data}/uno_packages, for example ~/.openoffice.org/3/user/uno_packages, and reinstall all extensions.</Text>
- </Paragraph>
-
-
- <Paragraph id="StartupProblemsHeader" style="H2" os="all">
- <Text id="naso" xml:lang="en-US">Problems During Program Startup</Text>
- </Paragraph>
-
- <Paragraph id="GnomeStartupProblems" os="LINUX">
- <Text id="naso2" xml:lang="en-US">If you experience ${PRODUCTNAME} startup problems (most notably while using Gnome) please &apos;unset&apos; the SESSION_MANAGER environment variable inside the shell you use to start ${PRODUCTNAME}. This can be done by adding the line &quot;unset SESSION_MANAGER&quot; to the beginning of the soffice shell script found in the &quot;[office folder]/program&quot; directory.</Text>
- </Paragraph>
-
- <Paragraph id="GraphicsCardDriverWIN" os="WNT">
- <Text id="abcdef" xml:lang="en-US">Difficulties starting ${PRODUCTNAME} (e.g. applications hang) as well as problems with the screen display are often caused by the graphics card driver. If these problems occur, please update your graphics card driver or try using the graphics driver delivered with your operating system. Difficulties displaying 3D objects can often be solved by deactivating the option &quot;Use OpenGL&quot; under &apos;Tools - Options - ${PRODUCTNAME} - View - 3D view&apos;.</Text>
- </Paragraph>
-
- <Paragraph id="GraphicsCardDriver" os="LINUX">
- <Text id="abcdef" xml:lang="en-US">Difficulties starting ${PRODUCTNAME} (e.g. applications hang) as well as problems with the screen display are often caused by the graphics card driver. If these problems occur, please update your graphics card driver or try using the graphics driver delivered with your operating system. Difficulties displaying 3D objects can often be solved by deactivating the option &quot;Use OpenGL&quot; under &apos;Tools - Options - ${PRODUCTNAME} - View - 3D view&apos;.</Text>
- </Paragraph>
-
- <!--
- <Paragraph id="PatchSolaris" os="SOLARIS">
- <Text id="ghtz5" xml:lang="en-US">Before installing ${PRODUCTNAME}, one or more operating system patches from SUN Microsystems must be installed. You can find them on the program CD in the following directories or download them at http://sunsolve.sun.com</Text>
- </Paragraph>
-
- <Paragraph id="ListOfPatchesSolaris" os="SOLARIS">
- <Text id="dfg4tr" xml:lang="en-US">Operating system patches required:</Text>
- </Paragraph>
-
- <Paragraph id="SolS_PatchList" os="SOLARIS" cpuname="SPARC">
- <List>
- <Text id="SPatches2" xml:lang="en-US">for Solaris 9: 111711-04, 111712-10 (64 bit), and 113713-03</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="SolI_PatchList" os="SOLARIS" cpuname="INTEL">
- <List>
- <Text id="IPatches2" xml:lang="en-US">for Solaris 9: 111713-02, 114568-02</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="SOLPatch_Note" os="SOLARIS">
- <Text id="Note" xml:lang="en-US">The versions mentioned above are the minimum requirements, newer (higher) version numbers are also allowed.</Text>
- </Paragraph>
-
- //-->
-
- <!--
- <Paragraph id="ParallelInstall" os="WNT">
- <Text id="Parallel" xml:lang="en-US">You can install ${PRODUCTNAME} ${PRODUCTVERSION} alongside of an older version of ${PRODUCTNAME}. If you later choose to deinstall the older version of ${PRODUCTNAME}, you must call the installation program of the newer version and choose &apos;Repair&apos;. This ensures that the new version is correctly registered in your system.</Text>
- </Paragraph>
- //-->
-
- <Paragraph id="CopyProblem">
- <Text id="CopyProblemsV1toV2" xml:lang="en-US">Please note that copy and paste via clipboard between ${PRODUCTNAME} 1.x and ${PRODUCTNAME} ${PRODUCTVERSION} might not work in OpenOffice.org format. If that happens, choose &apos;Edit - Paste Special&apos; and choose a format other than ${PRODUCTNAME}, or open the document in ${PRODUCTNAME} ${PRODUCTVERSION} directly.</Text>
- </Paragraph>
-
- <Paragraph id="GlobalPrecautions">
- <Text id="Precautions" xml:lang="en-US">Please make sure you have enough free memory in the temporary directory on your system and that read, write and run access rights have been granted. Close all other programs before starting the installation.</Text>
- </Paragraph>
-
- <Paragraph id="AdminNeededWIN" os="WNT">
- <Text id="AdminNeeded" xml:lang="en-US">Note: Please be aware that administrator rights are needed for the installation process.</Text>
- </Paragraph>
-
- </Section>
-
- <Section id="Scroll">
-
- <Paragraph id="F1a" style="H2" gui="WNT">
- <Text id="naso" xml:lang="en-US">ALPS/Synaptics notebook touchpads in Windows</Text>
- </Paragraph>
-
- <Paragraph id="F1b" gui="WNT">
- <Text id="naso2" xml:lang="en-US">Due to a Windows driver issue, you cannot scroll through ${PRODUCTNAME} documents when you slide your finger across an ALPS/Synaptics touchpad.</Text>
- </Paragraph>
-
- <Paragraph id="F1c" gui="WNT">
- <Text id="naso2" xml:lang="en-US">To enable touchpad scrolling, add the following lines to the &quot;C:\Program Files\Synaptics\SynTP\SynTPEnh.ini&quot; configuration file, and restart your computer:</Text>
- </Paragraph>
-
- <Paragraph id="F1d" gui="WNT">
- <Text id="naso2" xml:lang="en-US">[${PRODUCTNAME}]</Text>
- <Text id="naso3" xml:lang="en-US">FC = &quot;SALFRAME&quot;</Text>
- <Text id="naso4" xml:lang="en-US">SF = 0x10000000</Text>
- <Text id="naso5" xml:lang="en-US">SF |= 0x00004000</Text>
- </Paragraph>
-
- <Paragraph id="F1e" gui="WNT">
- <Text id="naso2" xml:lang="en-US">Note: The location of the configuration file might vary on different versions of Windows.</Text>
- </Paragraph>
- </Section>
-
- <Section id="NetscapeAdressBook">
-
- <Paragraph id="AdressBookHeader" style="H2" os="SOLARIS">
- <Text id="sdfsd32asrc" xml:lang="en-US">Mozilla Address Book Driver</Text>
- </Paragraph>
-
- <Paragraph id="AdressBookDriver" os="SOLARIS">
- <Text id="sdcc32asrc" xml:lang="en-US">The Mozilla address book driver requires the SUNWzlib package. This package is not part of the minimum Solaris operating system installation. If you require access to the Mozilla address book, then add this package to your Solaris operating system using the command &quot;pkgadd&quot; from the installation CD.</Text>
- </Paragraph>
- </Section>
-
- <Section id="Keyboard">
-
- <Paragraph id="abc2" style="H2">
- <Text id="awe1" xml:lang="en-US">Shortcut Keys</Text>
- </Paragraph>
-
- <Paragraph id="abc12">
- <Text id="w32e1" xml:lang="en-US">Only shortcut keys (key combinations) not used by the operating system can be used in ${PRODUCTNAME}. If a key combination in ${PRODUCTNAME} does not work as described in the ${PRODUCTNAME} Help, check if that shortcut is already used by the operating system. To rectify such conflicts, you can change the keys assigned by your operating system. Alternatively, you can change almost any key assignment in ${PRODUCTNAME}. For more information on this topic, refer to the ${PRODUCTNAME} Help or the Help documentation of your operating system.</Text>
- </Paragraph>
-
- <Paragraph id="MACKeysBETA" os="MACOSX">
- <Text id="mackeys1" xml:lang="en-US">The application help of ${PRODUCTNAME} may use shortcut combinations for PC keyboards only.</Text>
- </Paragraph>
-
- <Paragraph id="KeysChanged">
- <Text id="KeysChanged1" xml:lang="en-US">Due to a conflict with input method switching on multiple platforms, the following shortcut keys required to be changed at last minute:</Text>
- </Paragraph>
-
- <Paragraph id="KeysChangedMAC" os="MACOSX">
- <List>
- <Text id="KeysChangedMAC2" xml:lang="en-US">Cmd-Space is now Cmd-Shift-Space</Text>
- <Text id="KeysChangedMAC3" xml:lang="en-US">Cmd-Shift-Space is now Cmd-M</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="KeysChangedWNT" os="WNT">
- <List>
- <Text id="KeysChangedWNT2" xml:lang="en-US">Ctrl-Space is now Ctrl-Shift-Space</Text>
- <Text id="KeysChangedWNT3" xml:lang="en-US">Ctrl-Shift-Space is now Ctrl-M</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="KeysChangedLIN" os="LINUX">
- <List>
- <Text id="KeysChangedLIN2" xml:lang="en-US">Ctrl-Space is now Ctrl-Shift-Space</Text>
- <Text id="KeysChangedLIN" xml:lang="en-US">Ctrl-Shift-Space is now Ctrl-M</Text>
- </List>
- </Paragraph>
-
- <Paragraph id="KeysChangedSOL" os="SOLARIS">
- <List>
- <Text id="KeysChangedSOL2" xml:lang="en-US">Ctrl-Space is now Ctrl-Shift-Space</Text>
- <Text id="KeysChangedSOL3" xml:lang="en-US">Ctrl-Shift-Space is now Ctrl-M</Text>
- </List>
- </Paragraph>
-
- </Section>
-
- <Section id="FileLocking">
-
- <Paragraph id="G1" style="H2" gui="UNX">
- <Text id="gfh6w" xml:lang="en-US">File Locking</Text>
- </Paragraph>
-
- <Paragraph id="G2" gui="UNX">
- <Text id="pji76w" xml:lang="en-US">In the default setting, file locking is turned on in ${PRODUCTNAME}. To deactivate it, you have to set the appropriate environment variables SAL_ENABLE_FILE_LOCKING=0 and export SAL_ENABLE_FILE_LOCKING. These entries are already in enabled form in the soffice script file.</Text>
- </Paragraph>
-
- <Paragraph id="G3" gui="UNX">
- <Text id="pji76wsdf" xml:lang="en-US">Warning: The activated file locking feature can cause problems with Solaris 2.5.1 and 2.7 used in conjunction with Linux NFS 2.0. If your system environment has these parameters, we strongly recommend that you avoid using the file locking feature. Otherwise, ${PRODUCTNAME} will hang when you try to open a file from a NFS mounted directory from a Linux computer.</Text>
- </Paragraph>
- </Section>
-
- <Section id="Mapi">
-
- <Paragraph id="G1a" style="H2" gui="WNT">
- <Text id="gfh6w" xml:lang="en-US">Problems When Sending Documents as E-mails From ${PRODUCTNAME}</Text>
- </Paragraph>
-
- <Paragraph id="G2a" gui="WNT">
- <Text id="pji76w" xml:lang="en-US">When sending a document via &apos;File - Send - Document as E-mail&apos; or &apos;Document as PDF Attachment&apos; problems might occur (program crashes or hangs). This is due to the Windows system file &quot;Mapi&quot; (Messaging Application Programming Interface) which causes problems in some file versions. Unfortunately, the problem cannot be narrowed down to a certain version number. For more information visit http://www.microsoft.com to search the Microsoft Knowledge Base for &quot;mapi dll&quot;.</Text>
- </Paragraph>
- </Section>
-
- <Section id="A11y">
- <Paragraph id="aw44" style="H2">
- <Text id="aw22" xml:lang="en-US">Important Accessibility Notes</Text>
- </Paragraph>
-
- <Paragraph id="F2c" os="all">
- <Text id="access7" xml:lang="en-US">For information on the accessibility features in ${PRODUCTNAME}, see </Text>
- <Text id="abdfs2b" url="true" xml:lang="en-US">http://www.openoffice.org/access/</Text>
- <Text id="abdfs2c" xml:lang="en-US">.</Text>
- </Paragraph>
-
- </Section>
-
- <Section id="Registration"> <!-- ALL PLATFORMS -->
-
- <Paragraph id="A1" style="H2">
- <Text id="a" xml:lang="en-US">Registration </Text>
- </Paragraph>
-
- <Paragraph id="A2">
- <Text id="a" xml:lang="en-US" url="ahead">Please take a little time to complete the minimal Product Registration process when you install the software. While registration is optional, we encourage you to register, since the information enables the community to make an even better software suite and address user needs directly. Through its Privacy Policy, the ${PRODUCTNAME} Community takes every precaution to safeguard your personal data. If you missed the registration at installation, you can return and register at any time at by choosing "Help > Registration" from the main menu.</Text>
- </Paragraph>
- </Section>
-
- <Section id="UserSurvey">
-
- <Paragraph id="A1" style="H2">
- <Text id="a" xml:lang="en-US">User Survey </Text>
- </Paragraph>
-
- <Paragraph id="A2">
- <Text id="a" xml:lang="en-US">There is also a User Survey located online which we encourage you to fill out. The User Survey results will help ${PRODUCTNAME} move more rapidly in setting new standards for the creation of the next-generation office suite. Through its Privacy Policy, the ${PRODUCTNAME} Community takes every precaution to safeguard your personal data.</Text>
- </Paragraph>
- </Section>
-
- <Section id="UserSupport"> <!-- ALL PLATFORMS -->
-
- <Paragraph id="A1" style="H2">
- <Text id="a" xml:lang="en-US">User Support</Text>
- </Paragraph>
-
- <Paragraph id="A2">
- <Text id="a" xml:lang="en-US" url="ahead">The main support page </Text>
- <Text id="b" xml:lang="en-US" url="true">http://support.openoffice.org/</Text>
- <Text id="c" xml:lang="en-US" url="ahead">offers various possibilities for help with ${PRODUCTNAME}. Your question may have already been answered - check the Community Forum.</Text>
- <Text id="d" xml:lang="en-US" url="true">http://user.services.openoffice.org</Text>
- <Text id="e" xml:lang="en-US" url="ahead"> or search the archives of the 'users@openoffice.org' mailing list at </Text>
- <Text id="f" xml:lang="en-US" url="true">http://www.openoffice.org/mail_list.html</Text>
- <Text id="g" xml:lang="en-US" url="ahead">. Alternatively, you can send in your questions to </Text>
- <Text id="h" xml:lang="en-US" url="true">users@openoffice.org</Text>
- <Text id="i" xml:lang="en-US" url="ahead">. How to subscribe to the list (to get an email response) is explained on this page: </Text>
- <Text id="j" xml:lang="en-US" url="true">http://wiki.services.openoffice.org/wiki/Website/Content/help/mailinglists</Text>
- <Text id="k" xml:lang="en-US">.</Text>
- </Paragraph>
-
- <Paragraph id="A3">
- <Text id="a" xml:lang="en-US" url="ahead">Also check the FAQ section at </Text>
- <Text id="b" xml:lang="en-US" url="true">http://wiki.services.openoffice.org/wiki/Documentation/FAQ</Text>
- <Text id="c" xml:lang="en-US">.</Text>
- </Paragraph>
- </Section>
-
- <Section id="ReportBugsIssues"> <!-- ALL PLATFORMS -->
-
- <Paragraph id="A1" style="H2">
- <Text id="a" xml:lang="en-US">Report Bugs &amp; Issues </Text>
- </Paragraph>
-
- <Paragraph id="A2">
- <Text id="a" xml:lang="en-US">The ${PRODUCTNAME} Web site hosts IssueZilla, our mechanism for reporting, tracking and solving bugs and issues. We encourage all users to feel entitled and welcome to report issues that may arise on your particular platform. Energetic reporting of issues is one of the most important contributions that the user community can make to the ongoing development and improvement of the suite. </Text>
- </Paragraph>
- </Section>
-
- <Section id="GettingInvolved"> <!-- ALL PLATFORMS -->
-
- <Paragraph id="A1" style="H2">
- <Text id="a" xml:lang="en-US">Getting Involved </Text>
- </Paragraph>
-
- <Paragraph id="A2">
- <Text id="a" xml:lang="en-US">The ${PRODUCTNAME} Community would very much benefit from your active participation in the development of this important open source project.</Text>
- </Paragraph>
-
- <Paragraph id="A3">
- <Text id="a" xml:lang="en-US" url="ahead">As a user, you are already a valuable part of the suite&apos;s development process and we would like to encourage you to take an even more active role with a view to being a long-term contributor to the community. Please join and check out the user page at: </Text>
- <Text id="b" xml:lang="en-US" url="true">http://www.openoffice.org </Text>
- </Paragraph>
-
- <Paragraph id="emptyparagraph" localized="false" />
-
- <Paragraph id="A4" style="H3">
- <Text id="a" xml:lang="en-US">Way to Start</Text>
- </Paragraph>
-
- <Paragraph id="A5">
- <Text id="a" xml:lang="en-US" url="ahead">The best way to start contributing is to subscribe to one or more of the mailing lists, lurk for a while, and gradually use the mail archives to familiarize yourself with many of the topics covered since the ${PRODUCTNAME} source code was released back in October 2000. When you&apos;re comfortable, all you need to do is send an email self-introduction and jump right in. If you are familiar with Open Source Projects, check out our To-Dos list and see if there is anything you would like to help with at </Text>
- <Text id="b" xml:lang="en-US" url="true">http://development.openoffice.org/todo.html</Text>
- <Text id="c" xml:lang="en-US">.</Text>
- </Paragraph>
-
-
- <Paragraph id="A6" style="H3">
- <Text id="a" xml:lang="en-US">Subscribe</Text>
- </Paragraph>
-
- <Paragraph id="A7">
- <Text id="a" xml:lang="en-US" url="ahead">Here are a few of the Project mailing lists to which you can subscribe at </Text>
- <Text id="b" xml:lang="en-US" url="true">http://www.openoffice.org/mail_list.html</Text>
- </Paragraph>
-
- <Paragraph id="A8">
- <List>
- <Text id="a" xml:lang="en-US">News: announce@openoffice.org *recommended to all users* (light traffic) </Text>
- <Text id="c" xml:lang="en-US">Main user forum: user@openoffice.org *easy way to lurk on discussions* (heavy traffic) </Text>
- <Text id="d" xml:lang="en-US">Marketing project: dev@marketing.openoffice.org *beyond development* (getting heavy) </Text>
- <Text id="e" xml:lang="en-US">General code contributor list: dev@openoffice.org (moderate/heavy) </Text>
- </List>
- </Paragraph>
-
-
- <Paragraph id="A9" style="H3">
- <Text id="a" xml:lang="en-US">Join one or more Projects</Text>
- </Paragraph>
-
- <Paragraph id="A10">
- <Text id="a" xml:lang="en-US">You can make major contributions to this important open source project even if you have limited software design or coding experience. Yes, you!</Text>
- </Paragraph>
-
- <Paragraph id="A11">
- <Text id="a" xml:lang="en-US" url="ahead">At </Text>
- <Text id="b" xml:lang="en-US" url="true">http://projects.openoffice.org/index.html</Text>
- <Text id="c" xml:lang="en-US"> you will find projects ranging from Localization, Porting and Groupware to some real core coding projects. If you are not a developer, try the Documentation or the Marketing Project. The OpenOffice.org Marketing Project is applying both guerrilla and traditional commercial techniques to marketing open source software, and we are doing it across language and cultural barriers, so you can help just by spreading the word and telling a friend about this office suite.</Text>
- </Paragraph>
-
- <Paragraph id="A12">
- <Text id="a" xml:lang="en-US" url="ahead">You can help by joining the Marketing Communications &amp; Information Network here: </Text>
- <Text id="b" xml:lang="en-US" url="true">http://marketing.openoffice.org/contacts.html </Text>
- <Text id="c" xml:lang="en-US"> where you can provide point communication contact with press, media, government agencies, consultants, schools, Linux Users Groups and developers in your country and local community.</Text>
- </Paragraph>
- </Section>
-
-
- <Section id="Credits"> <!-- ALL PLATFORMS -->
-
- <Paragraph id="emptyparagraph" localized="false" />
-
- <Paragraph id="A1">
- <Text id="a" xml:lang="en-US">We hope you enjoy working with the new ${PRODUCTNAME} ${PRODUCTVERSION} and will join us online.</Text>
- </Paragraph>
-
- <Paragraph id="A2">
- <Text id="a" xml:lang="en-US">The OpenOffice.org Community</Text>
- </Paragraph>
-
- <Paragraph id="A3" localized="false">
- <Text id="a" xml:lang="en-US" />
- <Text id="b" xml:lang="en-US" />
- </Paragraph>
- </Section>
-
- <Section id="ModifiedSourceCode"> <!-- ALL PLATFORMS -->
-
- <Paragraph id="HH1" style="H2">
- <Text id="sdffd23r3cefwefew" xml:lang="en-US">Used / Modified Source Code</Text>
- </Paragraph>
-
- <Paragraph id="HH2">
- <Text id="sdffd23red32efew" xml:lang="en-US">Portions Copyright 1998, 1999 James Clark. Portions Copyright 1996, 1998 Netscape Communications Corporation.</Text>
- </Paragraph>
- </Section>
-</Readme>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
+
+ <title id="title" xml:lang="en-US">${PRODUCTNAME} Readme File</title>
+
+ <style type="text/css">
+ #Copyright_Trademark * {font-size: .7em;}
+ .note {border: 1px solid #993333; padding: 3px;}
+ p { margin-top: .1em; margin-bottom: .1em;}
+ .code {font-family: monospace;}
+ </style>
+ </head>
+
+ <body>
+ <div id="Intro">
+ <h1 id="Welcome" xml:lang="en-US">${PRODUCTNAME} ${PRODUCTVERSION} ReadMe</h1>
+ <p id="LatestUpdates" xml:lang="en-US">For latest updates to this readme file, see <a href="http://www.openoffice.org/welcome/readme.html">http://www.openoffice.org/welcome/readme.html</a></p>
+ <p id="A6" xml:lang="en-US">This file contains important information about this program. Please read this information very carefully before starting work.</p>
+ <p id="A7" xml:lang="en-US">The OpenOffice.org Community, responsible for the development of this product, would like to invite you to participate as a community member. As a new user, you can check out the ${PRODUCTNAME} site with helpful user information at <a href="http://www.openoffice.org/about_us/introduction.html">http://www.openoffice.org/about_us/introduction.html</a></p>
+ <p id="A9" xml:lang="en-US">Also read the sections below about getting involved in the OpenOffice.org project.</p>
+ <h3 id="A10" xml:lang="en-US">Is ${PRODUCTNAME} really free for any user? </h3>
+ <p id="A11" xml:lang="en-US">${PRODUCTNAME} is free for use by everybody. You may take this copy of ${PRODUCTNAME} and install it on as many computers as you like, and use it for any purpose you like (including commercial, government, public administration and educational use). For further details see the license text delivered together with ${PRODUCTNAME} or <a href="http://www.openoffice.org/license.html">http://www.openoffice.org/license.html</a></p>
+ <h3 id="A12" xml:lang="en-US">Why is ${PRODUCTNAME} free for any user?</h3>
+ <p id="A13" xml:lang="en-US">You can use this copy of ${PRODUCTNAME} today free of charge because individual contributors and corporate sponsors have designed, developed, tested, translated, documented, supported, marketed, and helped in many other ways to make ${PRODUCTNAME} what it is today - the world's leading open-source office software.</p>
+ <p id="A13b" xml:lang="en-US">If you appreciate their efforts, and would like to ensure OpenOffice.org continues into the future, please consider contributing to the project - see <a href="http://contributing.openoffice.org">http://contributing.openoffice.org</a> for details. Everyone has a contribution to make.</p>
+ </div>
+
+ <div id="Installation">
+ <h2 id="rr3fgf42r" xml:lang="en-US">Notes on Installation</h2>
+ <h3 id="sdfsdfgf42r" xml:lang="en-US">System Requirements</h3>
+ <div class="MAC" id="SystemRequirements_OSX">
+ <ul>
+ <li>
+ <p id="macxiOSX" xml:lang="en-US">MacOSX 10.4 (Tiger) or higher</p>
+ </li>
+
+ <li>
+ <p id="macxicpu" xml:lang="en-US">Intel processor</p>
+ </li>
+
+ <li>
+ <p id="macxiRAM" xml:lang="en-US">512 MB RAM</p>
+ </li>
+
+ <li>
+ <p id="macxHardDiksSpace" xml:lang="en-US">Up to 1.5 GB available hard disk space</p>
+ </li>
+
+ <li>
+ <p id="macxivideo" xml:lang="en-US">1024 x 768 graphic device with 256 colors (higher resolution recommended)</p>
+ </li>
+ </ul>
+ </div>
+ <div class="WIN" id="SystemRequirements_WIN">
+ <ul>
+ <li>
+ <p id="s2s3sdf2" xml:lang="en-US">Microsoft Windows 2000 (Service Pack 4 or higher), XP, Vista, or Windows 7</p>
+ </li>
+
+ <li>
+ <p id="utzu6" xml:lang="en-US">Pentium compatible PC (Pentium III or Athlon recommended)</p>
+ </li>
+
+ <li>
+ <p id="ghuj67" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</p>
+ </li>
+
+ <li>
+ <p id="jzjtzu6" xml:lang="en-US">Up to 1.5 GB available hard disk space</p>
+ </li>
+
+ <li>
+ <p id="jtzu56" xml:lang="en-US">1024x768 resolution (higher resolution recommended), at least 256 colors</p>
+ </li>
+ </ul>
+ <p class="note" id="edssc3d" xml:lang="en-US">Please be aware that administrator rights are needed for the installation process.</p>
+ <p id="MSOReg1" xml:lang="en-US">Registration of ${PRODUCTNAME} as default application for Microsoft Office formats can be forced or suppressed by using the following command line switches with the installer:</p>
+ <ul>
+ <li>
+ <p id="MSOReg2" xml:lang="en-US"><tt>/msoreg=1</tt> will force registration of ${PRODUCTNAME} as default application for Microsoft Office formats.</p>
+ </li>
+
+ <li>
+ <p id="MSOReg3" xml:lang="en-US"><tt>/msoreg=0</tt> will suppress registration of ${PRODUCTNAME} as default application for Microsoft Office formats.</p>
+ </li>
+ </ul>
+ <p id="DLLA1" xml:lang="en-US">If you perform an administrative installation using setup /a, you need to make sure that the file msvc90.dll is installed on the system. This file is required for ${PRODUCTNAME} to start after an administrative installation. You can get the file from <a href="http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF">http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF</a></p>
+ <p class="note" id="AdminNeeded" xml:lang="en-US">Please be aware that administrator rights are needed for the installation process.</p>
+ </div>
+ <div class="SOLSPARC" id="Sols2">
+ <ul>
+ <li>
+ <p id="s2335" xml:lang="en-US">Solaris 10 operating system (SPARC platform) or higher</p>
+ </li>
+
+ <li>
+ <p id="s253" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</p>
+ </li>
+
+ <li>
+ <p id="s23seg" xml:lang="en-US">Up to 1.55 GB available hard disk space</p>
+ </li>
+
+ <li>
+ <p id="s2s43gfe" xml:lang="en-US">X Server with 1024x768 resolution (higher resolution recommended), with at least 256 colors</p>
+ </li>
+
+ <li>
+ <p id="n4234rw" xml:lang="en-US">Window Manager</p>
+ </li>
+
+ <li>
+ <p id="wd2dff2" xml:lang="en-US">Gnome 2.6 or higher, with the gail 1.8.6 and the at-spi 1.7 packages, required for support of assistive technology tools (AT tools)</p>
+ </li>
+ </ul>
+ </div>
+ <div class="SOLX86" id="Solia2">
+ <ul>
+ <li>
+ <p id="s23h" xml:lang="en-US">Solaris 10 operating system (x86 platform) or higher</p>
+ </li>
+
+ <li>
+ <p id="s24f" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</p>
+ </li>
+
+ <li>
+ <p id="fgheg" xml:lang="en-US">Up to 1.55 GB available hard disk space</p>
+ </li>
+
+ <li>
+ <p id="fghfgh" xml:lang="en-US">X Server with 1024x768 resolution (higher resolution recommended), with at least 256 colors</p>
+ </li>
+
+ <li>
+ <p id="mgjfg" xml:lang="en-US">Window Manager</p>
+ </li>
+
+ <li>
+ <p id="wd2dff1" xml:lang="en-US">Gnome 2.6 or higher, with the gail 1.8.6 and the at-spi 1.7 packages, required for support of assistive technology tools (AT tools)</p>
+ </li>
+ </ul>
+ </div>
+ <div class="LINUX" id="Linuxi2">
+ <ul>
+ <li>
+ <p id="s2we35" xml:lang="en-US">Linux Kernel version 2.6.18 or higher</p>
+ </li>
+
+ <li>
+ <p id="s253we" xml:lang="en-US">glibc2 version 2.5 or higher</p>
+ </li>
+
+ <li>
+ <p id="s256we" xml:lang="en-US">gtk version 2.10.4 or higher</p>
+ </li>
+
+ <li>
+ <p id="s2etfseg" xml:lang="en-US">Pentium compatible PC (Pentium III or Athlon recommended)</p>
+ </li>
+
+ <li>
+ <p id="s2ssdfe" xml:lang="en-US">256 MB RAM (512 MB RAM recommended)</p>
+ </li>
+
+ <li>
+ <p id="n42dfgf" xml:lang="en-US">Up to 1.55 GB available hard disk space</p>
+ </li>
+
+ <li>
+ <p id="ghjhhr" xml:lang="en-US">X Server with 1024x768 resolution (higher resolution recommended), with at least 256 colors</p>
+ </li>
+
+ <li>
+ <p id="fhrtz5" xml:lang="en-US">Window Manager</p>
+ </li>
+
+ <li>
+ <p id="wd2dff" xml:lang="en-US">Gnome 2.16 or higher, with the gail 1.8.6 and the at-spi 1.7 packages, required for support of assistive technology tools (AT tools)</p>
+ </li>
+ </ul>
+ <p id="Linuxi3a" xml:lang="en-US">There is a wide variety of Linux distributions, and even within the same distribution there may be different installation options (KDE vs Gnome, etc.). Some distributions ship with their own ‘native’ version of ${PRODUCTNAME}, which may have different features from this Community ${PRODUCTNAME}. Sometimes you can install the Community ${PRODUCTNAME} alongside the ‘native’ version. However, it’s usually safer to remove the ‘native’ version before installing this Community version. Consult the documentation for your distribution for details of how to do this.</p>
+ <p class="note" id="Linuxi4a" xml:lang="en-US">It is recommended that you always backup your system before you remove or install software.</p>
+ </div>
+ <p id="Precautions" xml:lang="en-US">Please make sure you have enough free memory in the temporary directory on your system and that read, write and run access rights have been granted. Close all other programs before starting the installation.</p>
+ </div>
+
+ <div id="BerkeleyDB">
+ <h2 id="BDB11" xml:lang="en-US">Extension Database Incompatibility</h2>
+ <p id="BDB2a" xml:lang="en-US">The Berkeley database engine has been upgraded in this version of ${PRODUCTNAME}. The database engine upgrade introduces an incompatibility with user data for installed extensions for ${PRODUCTNAME} versions prior to 3.2 that may require your action if you downgrade your version of ${PRODUCTNAME}.</p>
+ <p id="BDB3a" xml:lang="en-US">This version of ${PRODUCTNAME} will convert your extension database to the new Berkeley database format when extensions are installed or removed. After this conversion, the database can no longer be read by earlier versions of ${PRODUCTNAME}. Downgrading to an earlier version may result in a dysfunctional installation.</p>
+ <p id="BDB4a" xml:lang="en-US">If you downgrade to an earlier version of ${PRODUCTNAME}, you must remove the user data directory <tt>{user data}/uno_packages</tt>, for example <tt>~/.openoffice.org/3/user/uno_packages</tt>, and reinstall all extensions.</p>
+ </div>
+
+ <div class="LINUX WIN" id="StartupProblems">
+ <h2 id="naso01" xml:lang="en-US">Problems During Program Startup</h2>
+ <div class="LINUX" id="GnomeStartupProblems">
+ <p id="naso02" xml:lang="en-US">If you experience ${PRODUCTNAME} startup problems (most notably while using Gnome) please 'unset' the <tt>SESSION_MANAGER</tt> environment variable inside the shell you use to start ${PRODUCTNAME}. This can be done by adding the line "<tt>unset SESSION_MANAGER</tt>" to the beginning of the soffice shell script found in the "<tt>[office folder]/program</tt>" directory.</p>
+ </div>
+ <p id="abcdef" xml:lang="en-US">Difficulties starting ${PRODUCTNAME} (e.g. applications hang) as well as problems with the screen display are often caused by the graphics card driver. If these problems occur, please update your graphics card driver or try using the graphics driver delivered with your operating system. Difficulties displaying 3D objects can often be solved by deactivating the option "Use OpenGL" under 'Tools - Options - ${PRODUCTNAME} - View - 3D view'.</p>
+ </div>
+
+ <div class="WIN" id="Scroll">
+ <h2 id="naso" xml:lang="en-US">ALPS/Synaptics notebook touchpads in Windows</h2>
+ <p id="naso2" xml:lang="en-US">Due to a Windows driver issue, you cannot scroll through ${PRODUCTNAME} documents when you slide your finger across an ALPS/Synaptics touchpad.</p>
+ <p id="naso6" xml:lang="en-US">To enable touchpad scrolling, add the following lines to the "<tt>C:\Program Files\Synaptics\SynTP\SynTPEnh.ini</tt>" configuration file, and restart your computer:</p>
+ <p class="code" id="naso7">[${PRODUCTNAME}]</p>
+ <p class="code" id="naso3">FC = "SALFRAME"</p>
+ <p class="code" id="naso4">SF = 0x10000000</p>
+ <p class="code" id="naso5">SF |= 0x00004000</p>
+ <p class="note" id="naso8" xml:lang="en-US">The location of the configuration file might vary on different versions of Windows.</p>
+ </div>
+
+ <div class="SOLSPARC SOLX86" id="NetscapeAdressBook">
+ <h2 id="sdfsd32asrc" xml:lang="en-US">Mozilla Address Book Driver</h2>
+ <p id="sdcc32asrc" xml:lang="en-US">The Mozilla address book driver requires the <tt>SUNWzlib</tt> package. This package is not part of the minimum Solaris operating system installation. If you require access to the Mozilla address book, then add this package to your Solaris operating system using the command "<tt>pkgadd</tt>" from the installation CD.</p>
+ </div>
+
+ <div id="Keyboard">
+ <h2 id="awe1" xml:lang="en-US">Shortcut Keys</h2>
+ <p id="w32e1" xml:lang="en-US">Only shortcut keys (key combinations) not used by the operating system can be used in ${PRODUCTNAME}. If a key combination in ${PRODUCTNAME} does not work as described in the ${PRODUCTNAME} Help, check if that shortcut is already used by the operating system. To rectify such conflicts, you can change the keys assigned by your operating system. Alternatively, you can change almost any key assignment in ${PRODUCTNAME}. For more information on this topic, refer to the ${PRODUCTNAME} Help or the Help documention of your operating system.</p>
+ <div class="MAC" id="MACKeysBETA">
+ <p id="mackeys1" xml:lang="en-US">The application help of ${PRODUCTNAME} may use shortcut combinations for PC keyboards only.</p>
+ </div>
+ </div>
+
+ <div class="LINUX MAC SOLSPARC SOLX86" id="FileLocking">
+ <h2 id="gfh6w" xml:lang="en-US">File Locking</h2>
+ <p id="pji76w" xml:lang="en-US">File locking is enabled by default in ${PRODUCTNAME}. On a network that uses the Network File System protocol (NFS), the locking daemon for NFS clients must be active. To disable file locking, edit the <tt>soffice</tt> script and change the line "<tt>export SAL_ENABLE_FILE_LOCKING</tt>" to "<tt># export SAL_ENABLE_FILE_LOCKING</tt>". If you disable file locking, the write access of a document is not restricted to the user who first opens the document.</p>
+ <p class="note" id="pji76wsdf" xml:lang="en-US">Warning: The activated file locking feature can cause problems with Solaris 2.5.1 and 2.7 used in conjunction with Linux NFS 2.0. If your system environment has these parameters, we strongly recommend that you avoid using the file locking feature. Otherwise, ${PRODUCTNAME} will hang when you try to open a file from a NFS mounted directory from a Linux computer.</p>
+ </div>
+
+ <div class="WIN" id="Mapi">
+ <h2 id="gfh6w1" xml:lang="en-US">Problems When Sending Documents as E-mails From ${PRODUCTNAME}</h2>
+ <p id="pji76w1" xml:lang="en-US">When sending a document via 'File - Send - Document as E-mail' or 'Document as PDF Attachment' problems might occur (program crashes or hangs). This is due to the Windows system file "Mapi" (Messaging Application Programming Interface) which causes problems in some file versions. Unfortunately, the problem cannot be narrowed down to a certain version number. For more information visit <a href="http://www.microsoft.com">http://www.microsoft.com</a> to search the Microsoft Knowledge Base for "mapi dll".</p>
+ </div>
+
+ <div id="A11y">
+ <h2 id="aw22" xml:lang="en-US">Important Accessibility Notes</h2>
+ <p id="access7" xml:lang="en-US">For more information on the accessibility features in ${PRODUCTNAME}, see <a href="http://www.openoffice.org/access/">http://www.openoffice.org/access/</a></p>
+ </div>
+
+ <div id="Registration">
+ <h2 id="reg1" xml:lang="en-US">Registration </h2>
+ <p id="reg2" xml:lang="en-US">Please take a little time to complete the minimal Product Registration process when you install the software. While registration is optional, we encourage you to register, since the information enables the community to make an even better software suite and address user needs directly. Through its Privacy Policy, the ${PRODUCTNAME} Community takes every precaution to safeguard your personal data. If you missed the registration at installation, you can return and register at any time at by choosing "Help - Registration" from the main menu.</p>
+ </div>
+
+ <div id="UserSurvey">
+ <h2 id="survey" xml:lang="en-US">User Survey</h2>
+ <p id="survey1" xml:lang="en-US">There is also a User Survey located online which we encourage you to fill out. The User Survey results will help ${PRODUCTNAME} move more rapidly in setting new standards for the creation of the next-generation office suite. Through its Privacy Policy, the ${PRODUCTNAME} Community takes every precaution to safeguard your personal data.</p>
+ </div>
+
+ <div id="UserSupport">
+ <h2 id="support" xml:lang="en-US">User Support</h2>
+ <p id="support1" xml:lang="en-US">The main support page <a href="http://support.openoffice.org/">http://support.openoffice.org/</a> offers various possibilities for help with ${PRODUCTNAME}. Your question may have already been answered - check the Community Forum at <a href="http://user.services.openoffice.org">http://user.services.openoffice.org</a> or search the archives of the 'users@openoffice.org' mailing list at <a href="http://www.openoffice.org/mail_list.html">http://www.openoffice.org/mail_list.html</a>. Alternatively, you can send in your questions to <a href="mailto:users@openoffice.org">users@openoffice.org</a>. How to subscribe to the list (to get an email response) is explained on this page: <a href="http://wiki.services.openoffice.org/wiki/Website/Content/help/mailinglists">http://wiki.services.openoffice.org/wiki/Website/Content/help/mailinglists</a>.</p>
+ <p id="faq" url="ahead" xml:lang="en-US">Also check the FAQ section at <a href="http://wiki.services.openoffice.org/wiki/Documentation/FAQ">http://wiki.services.openoffice.org/wiki/Documentation/FAQ.</a></p>
+ </div>
+
+ <div id="ReportBugsIssues">
+ <h2 id="reportbugs" xml:lang="en-US">Reporting Bugs &amp; Issues</h2>
+ <p id="reportbugs1" xml:lang="en-US">The ${PRODUCTNAME} Web site hosts IssueZilla, our mechanism for reporting, tracking and solving bugs and issues. We encourage all users to feel entitled and welcome to report issues that may arise on your particular platform. Energetic reporting of issues is one of the most important contributions that the user community can make to the ongoing development and improvement of the suite.</p>
+ </div>
+
+ <div id="GettingInvolved">
+ <h2 id="gettinginvolved1" xml:lang="en-US">Getting Involved</h2>
+ <p id="gettinginvolved2" xml:lang="en-US">The ${PRODUCTNAME} Community would very much benefit from your active participation in the development of this important open source project.</p>
+ <p id="gettingimvolved3" xml:lang="en-US">As a user, you are already a valuable part of the suite's development process and we would like to encourage you to take an even more active role with a view to being a long-term contributor to the community. Please join and check out the user page at <a href="http://www.openoffice.org">http://www.openoffice.org</a></p>
+ <h3 id="howtostart" xml:lang="en-US">How to Start</h3>
+ <p id="howtostart1" xml:lang="en-US">The best way to start contributing is to subscribe to one or more of the mailing lists, lurk for a while, and gradually use the mail archives to familiarize yourself with many of the topics covered since the ${PRODUCTNAME} source code was released back in October 2000. When you're comfortable, all you need to do is send an email self-introduction and jump right in. If you are familiar with Open Source Projects, check out our To-Dos list and see if there is anything you would like to help with at <a href="http://development.openoffice.org/todo.html">http://development.openoffice.org/todo.html</a>.</p>
+ <h3 id="subscribe" xml:lang="en-US">Subscribe</h3>
+ <p id="subscribe1" xml:lang="en-US">Here are a few of the Project mailing lists to which you can subscribe at <a href="http://www.openoffice.org/mail_list.html">http://www.openoffice.org/mail_list.html</a></p>
+ <ul>
+ <li>
+ <p id="subscribelist1" xml:lang="en-US">News: announce@openoffice.org *recommended to all users* (light traffic)</p>
+ </li>
+
+ <li>
+ <p id="subscribelist2" xml:lang="en-US">Main user forum: user@openoffice.org *easy way to lurk on discussions* (heavy traffic)</p>
+ </li>
+
+ <li>
+ <p id="subscribelist3" xml:lang="en-US">Marketing project: dev@marketing.openoffice.org *beyond development* (getting heavy)</p>
+ </li>
+
+ <li>
+ <p id="subscribelist4" xml:lang="en-US">General code contributor list: dev@openoffice.org (moderate/heavy)</p>
+ </li>
+ </ul>
+ <h3 xml:lang="en-US">Joining one or more Projects</h3>
+ <p id="joining" xml:lang="en-US">You can make major contributions to this important open source project even if you have limited software design or coding experience. Yes, you!</p>
+ <p id="joining1" url="ahead" xml:lang="en-US">At <a href="http://projects.openoffice.org/index.html">http://projects.openoffice.org/index.html</a> you will find projects ranging from Localization, Porting and Groupware to some real core coding projects. If you are not a developer, try the Documentation or the Marketing Project. The OpenOffice.org Marketing Project is applying both guerilla and traditional commercial techniques to marketing open source software, and we are doing it across language and cultural barriers, so you can help just by spreading the word and telling a friend about this office suite.</p>
+ <p id="joining3" xml:lang="en-US">You can help by joining the Marketing Communications &amp; Information Network on <a href="http://marketing.openoffice.org/contacts.html">http://marketing.openoffice.org/contacts.html</a> where you can provide point communication contact with press, media, government agencies, consultants, schools, Linux Users Groups and developers in your country and local community.</p>
+ </div>
+
+ <div id="Credits">
+ <p id="credits" xml:lang="en-US">We hope you enjoy working with the new ${PRODUCTNAME} ${PRODUCTVERSION} and will join us online.</p>
+ <p id="credits2" xml:lang="en-US">The OpenOffice.org Community</p>
+ </div>
+
+ <div id="ModifiedSourceCode">
+ <h2 id="sdffd23r3cefwefew" xml:lang="en-US">Used / Modified Source Code</h2>
+ <p id="sdffd23red32efew">Portions Copyright 1998, 1999 James Clark. Portions Copyright 1996, 1998 Netscape Communications Corporation.</p>
+ </div>
+ </body>
+</html>
diff --git a/readlicense_oo/util/makefile.pmk b/readlicense_oo/util/makefile.pmk
index 8aee1ce3b69a..30e07779457b 100755
--- a/readlicense_oo/util/makefile.pmk
+++ b/readlicense_oo/util/makefile.pmk
@@ -53,7 +53,7 @@ $(COMMONMISC)$/readme.dtd : ..$/readme.dtd
virtual : $(MERGEDXRM) $(COMMONMISC)$/readme.dtd $(PRJ)$/docs/readme.xsl
$(MISC)$/readme_text.xsl : virtual
- $(SED) 's#method="html".*>#method="text"/>#' < ..$/readme.xsl > $@
+ $(SED) '' < ..$/readme.xsl > $@
$(MISC)$/$(GUI)$/$(eq,$(GUI),WNT readme README)_%.html : 'virtual'
@@-$(MKDIRHIER) $(@:d)
@@ -79,6 +79,7 @@ $(SYSTEXTDOCS) : $(MISC)$/readme_text.xsl
--stringparam os1 $(OS) --stringparam gui1 $(GUI) --stringparam com1 $(COM) \
--stringparam cp1 $(CPUNAME) --stringparam type text --stringparam lang1 $(@:b:s/readme_//:s/README_//) \
$< $(MERGEDXRM)
+
.IF "$(GUI)"=="UNX"
chmod g+w $(MISC)$/$(GUI)
.ENDIF # "$(GUI)"=="UNX"
diff --git a/redland/raptor/makefile.mk b/redland/raptor/makefile.mk
index 1375ae878497..62d4f704d0e4 100644
--- a/redland/raptor/makefile.mk
+++ b/redland/raptor/makefile.mk
@@ -68,11 +68,11 @@ BUILD_DIR=$(CONFIGURE_DIR)$/src
.ELIF "$(OS)"=="WNT"
.IF "$(COM)"=="GCC"
OOO_PATCH_FILES+=$(TARFILE_NAME).patch.mingw
-raptor_CC=$(CC)
+raptor_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
raptor_CC+=-shared-libgcc
.ENDIF
-raptor_LIBS=-lmingwthrd
+raptor_LIBS=
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
raptor_LIBS+=-lstdc++_s
.ENDIF
@@ -80,7 +80,7 @@ raptor_LIBS+=-lstdc++_s
CONFIGURE_DIR=
CONFIGURE_ACTION=.$/configure
# do not enable grddl parser (#i93768#)
-CONFIGURE_FLAGS=--disable-static --disable-gtk-doc --with-openssl-digests --with-xml-parser=libxml --enable-parsers="rdfxml ntriples turtle trig guess rss-tag-soup" --without-bdb --without-sqlite --without-mysql --without-postgresql --without-threestore --with-regex-library=posix --with-decimal=none --with-www=xml --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(raptor_CC)" CFLAGS=-D_MT CPPFLAGS="-nostdinc $(INCLUDE)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc,--export-all-symbols -L$(ILIB:s/;/ -L/)" LIBS="$(raptor_LIBS)" OBJDUMP="$(WRAPCMD) objdump" LIBXML2LIB=$(LIBXML2LIB) XSLTLIB="$(XSLTLIB)"
+CONFIGURE_FLAGS=--disable-static --disable-gtk-doc --with-openssl-digests --with-xml-parser=libxml --enable-parsers="rdfxml ntriples turtle trig guess rss-tag-soup" --without-bdb --without-sqlite --without-mysql --without-postgresql --without-threestore --with-regex-library=posix --with-decimal=none --with-www=xml --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(raptor_CC)" CPPFLAGS="-nostdinc $(INCLUDE)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc-v2,--export-all-symbols -L$(ILIB:s/;/ -L/)" LIBS="$(raptor_LIBS)" OBJDUMP="$(WRAPCMD) objdump" LIBXML2LIB=$(LIBXML2LIB) XSLTLIB="$(XSLTLIB)"
BUILD_ACTION=$(GNUMAKE)
BUILD_FLAGS+= -j$(EXTMAXPROCESS)
BUILD_DIR=$(CONFIGURE_DIR)
diff --git a/redland/rasqal/makefile.mk b/redland/rasqal/makefile.mk
index d48b7af39cb4..efe099c88049 100644
--- a/redland/rasqal/makefile.mk
+++ b/redland/rasqal/makefile.mk
@@ -66,18 +66,18 @@ BUILD_ACTION=dmake
BUILD_DIR=$(CONFIGURE_DIR)$/src
.ELIF "$(OS)"=="WNT"
.IF "$(COM)"=="GCC"
-rasqal_CC=$(CC)
+rasqal_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
rasqal_CC+=-shared-libgcc
.ENDIF
-rasqal_LIBS=-lmingwthrd
+rasqal_LIBS=
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
rasqal_LIBS+=-lstdc++_s
.ENDIF
CONFIGURE_DIR=
CONFIGURE_ACTION=.$/configure PATH="..$/..$/..$/bin:$$PATH"
-CONFIGURE_FLAGS=--disable-static --disable-gtk-doc --with-openssl-digests --with-xml-parser=libxml --without-bdb --without-sqlite --without-mysql --without-postgresql --without-threestore --disable-pcre --with-decimal=none --with-www=xml --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(rasqal_CC)" CFLAGS=-D_MT CPPFLAGS="-nostdinc $(INCLUDE)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc,--export-all-symbols -L$(ILIB:s/;/ -L/)" LIBS="$(rasqal_LIBS)" OBJDUMP="$(WRAPCMD) objdump" LIBXML2LIB=$(LIBXML2LIB) XSLTLIB="$(XSLTLIB)"
+CONFIGURE_FLAGS=--disable-static --disable-gtk-doc --with-openssl-digests --with-xml-parser=libxml --without-bdb --without-sqlite --without-mysql --without-postgresql --without-threestore --disable-pcre --with-decimal=none --with-www=xml --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(rasqal_CC)" CPPFLAGS="-nostdinc $(INCLUDE)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc-v2,--export-all-symbols -L$(ILIB:s/;/ -L/)" LIBS="$(rasqal_LIBS)" OBJDUMP="$(WRAPCMD) objdump" LIBXML2LIB=$(LIBXML2LIB) XSLTLIB="$(XSLTLIB)"
BUILD_ACTION=$(GNUMAKE)
BUILD_FLAGS+= -j$(EXTMAXPROCESS)
BUILD_DIR=$(CONFIGURE_DIR)
diff --git a/redland/redland/makefile.mk b/redland/redland/makefile.mk
index d6acd4d8ea4d..3db7c0559d2e 100644
--- a/redland/redland/makefile.mk
+++ b/redland/redland/makefile.mk
@@ -66,18 +66,18 @@ BUILD_ACTION=dmake
BUILD_DIR=$(CONFIGURE_DIR)$/librdf
.ELIF "$(OS)"=="WNT"
.IF "$(COM)"=="GCC"
-redland_CC=$(CC)
+redland_CC=$(CC) -mthreads
.IF "$(MINGW_SHARED_GCCLIB)"=="YES"
redland_CC+=-shared-libgcc
.ENDIF
-redland_LIBS=-lmingwthrd
+redland_LIBS=
.IF "$(MINGW_SHARED_GXXLIB)"=="YES"
redland_LIBS+=-lstdc++_s
.ENDIF
CONFIGURE_DIR=
CONFIGURE_ACTION=.$/configure PATH="..$/..$/..$/bin:$$PATH"
-CONFIGURE_FLAGS=--disable-static --disable-gtk-doc --with-openssl-digests --with-xml-parser=libxml --with-raptor=system --with-rasqual=system --without-bdb --without-sqlite --without-mysql --without-postgresql --without-threestore --with-regex-library=posix --with-decimal=none --with-www=xml --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(redland_CC)" CFLAGS=-D_MT CPPFLAGS="-nostdinc $(INCLUDE)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc,--export-all-symbols -L$(ILIB:s/;/ -L/)" LIBS="$(redland_LIBS)" OBJDUMP="$(WRAPCMD) objdump" LIBXML2LIB=$(LIBXML2LIB) XSLTLIB="$(XSLTLIB)"
+CONFIGURE_FLAGS=--disable-static --disable-gtk-doc --with-openssl-digests --with-xml-parser=libxml --with-raptor=system --with-rasqual=system --without-bdb --without-sqlite --without-mysql --without-postgresql --without-threestore --with-regex-library=posix --with-decimal=none --with-www=xml --build=i586-pc-mingw32 --host=i586-pc-mingw32 lt_cv_cc_dll_switch="-shared" CC="$(redland_CC)" CPPFLAGS="-nostdinc $(INCLUDE)" LDFLAGS="-no-undefined -Wl,--enable-runtime-pseudo-reloc-v2,--export-all-symbols -L$(ILIB:s/;/ -L/)" LIBS="$(redland_LIBS)" OBJDUMP="$(WRAPCMD) objdump" LIBXML2LIB=$(LIBXML2LIB) XSLTLIB="$(XSLTLIB)"
BUILD_ACTION=$(GNUMAKE)
BUILD_FLAGS+= -j$(EXTMAXPROCESS)
BUILD_DIR=$(CONFIGURE_DIR)
diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties
index a8313094932f..287c7155e5ed 100644
--- a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties
+++ b/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
display-name=AUTHOR
description=Returns the author of the report.
diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties
index a8313094932f..287c7155e5ed 100644
--- a/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties
+++ b/reportbuilder/java/com/sun/star/report/function/metadata/Author-Function_en_US.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
display-name=AUTHOR
description=Returns the author of the report.
diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties
index 6c9ab290bc69..aa0e5bdbd2a5 100644
--- a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties
+++ b/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
display-name=TITLE
description=Returns the title of the report.
diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties b/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties
index 6c9ab290bc69..aa0e5bdbd2a5 100644
--- a/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties
+++ b/reportbuilder/java/com/sun/star/report/function/metadata/Title-Function_en_US.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
display-name=TITLE
description=Returns the title of the report.
diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/category.properties b/reportbuilder/java/com/sun/star/report/function/metadata/category.properties
index 504df7f45b3f..9192d2fecf7c 100644
--- a/reportbuilder/java/com/sun/star/report/function/metadata/category.properties
+++ b/reportbuilder/java/com/sun/star/report/function/metadata/category.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
display-name=Document Information
description=Contains functions to access document information.
diff --git a/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties b/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties
index b380d19cc640..5de2933bb2ab 100644
--- a/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties
+++ b/reportbuilder/java/com/sun/star/report/function/metadata/category_en_US.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
display-name=MetaData
description=Contains functions about meta data
diff --git a/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties b/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties
index 1b0cafb0909b..26e8548a9566 100644
--- a/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties
+++ b/reportbuilder/java/com/sun/star/report/pentaho/configuration.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
##
diff --git a/reportbuilder/java/com/sun/star/report/pentaho/module.properties b/reportbuilder/java/com/sun/star/report/pentaho/module.properties
index 7038a47a410c..b3c538048426 100644
--- a/reportbuilder/java/com/sun/star/report/pentaho/module.properties
+++ b/reportbuilder/java/com/sun/star/report/pentaho/module.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
module-info:
diff --git a/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties b/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties
index a8f0ad275941..19ba06839e62 100644
--- a/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties
+++ b/reportbuilder/java/com/sun/star/report/pentaho/parser/selectors.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
# <style:style style:name="S1" style:family="graphics">
# <style:section-properties fo:background-color="#ffffff"/>
diff --git a/reportbuilder/java/jfreereport.properties b/reportbuilder/java/jfreereport.properties
index 2548cb110089..d06a2dc28885 100644
--- a/reportbuilder/java/jfreereport.properties
+++ b/reportbuilder/java/jfreereport.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
org.jfree.report.modules.sun.report.Module=com.sun.star.report.pentaho.StarReportModule
diff --git a/reportbuilder/java/libformula.properties b/reportbuilder/java/libformula.properties
index c9a7d35d1afe..894a95b10b2a 100644
--- a/reportbuilder/java/libformula.properties
+++ b/reportbuilder/java/libformula.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
##
# Any configuration will happen here.
diff --git a/reportbuilder/java/loader.properties b/reportbuilder/java/loader.properties
index fc5926371eaf..d51a30de1a2c 100644
--- a/reportbuilder/java/loader.properties
+++ b/reportbuilder/java/loader.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
org.pentaho.reporting.libraries.resourceloader.factory.type.com.sun.star.report.pentaho.model.OfficeDocument=com.sun.star.report.pentaho.parser.OfficeDocumentXmlResourceFactory
org.pentaho.reporting.libraries.resourceloader.factory.type.com.sun.star.report.pentaho.model.OfficeStylesCollection=com.sun.star.report.pentaho.parser.OfficeStylesXmlResourceFactory
diff --git a/reportbuilder/license/readme_en-US.html b/reportbuilder/license/readme_en-US.html
index c9fa84bf663b..ec35388c3250 100644
--- a/reportbuilder/license/readme_en-US.html
+++ b/reportbuilder/license/readme_en-US.html
@@ -1,147 +1,30 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
- <TITLE>Sun&trade; Report Builder</TITLE>
- <META NAME="GENERATOR" CONTENT="StarOffice 8 (Solaris Sparc)">
- <META NAME="CREATED" CONTENT="20070207;14293857">
- <META NAME="CHANGEDBY" CONTENT="ufi">
- <META NAME="CHANGED" CONTENT="20070814;14045700">
- <META NAME="CHANGEDBY" CONTENT="ufi">
- <META NAME="CHANGEDBY" CONTENT="ufi">
- <META NAME="CHANGEDBY" CONTENT="UFI">
- <STYLE TYPE="text/css">
- <!--
- H4 { margin-bottom: 0.07in; font-family: "Bitstream Vera Sans", "Arial", "Helvetica", "Lucida", "Geneva", "Helmet", sans-serif, "Andale Sans UI", "Arial Unicode MS", "Lucida Sans Unicode", "Tahoma"; font-size: 10pt }
- -->
- </STYLE>
-</HEAD>
-<BODY LANG="en-US" DIR="LTR">
-<H1>Sun&trade; Report Builder</H1>
-<P>This file contains important information about the installation.</P>
-<P>This software offered by Sun Microsystems, Inc. will enhance
-StarOffice(TM) 8, StarSuite(TM) 8, and OpenOffice.org 2.3 software.
-The following features will be added:</P>
-<UL>
- <LI><P>In a Base database document, in the Reports window, you now
- have an additional choice to &quot;Create Report in Design View&quot;.</P>
- <LI><P>An interactive window allows you to create a database report
- by drag-and-drop, with visual feedback.</P>
- <LI><P>All reports created by Report Builder can also be edited in
- the Report Builder window.
- </P>
-</UL>
-<P>You find more information about installation and usage of the
-plugin in the following paragraphs of this readme file.
-</P>
-<H2>Notes on Installation</H2>
-<H3>System Requirements</H3>
-<UL TYPE=CIRCLE>
- <LI><P STYLE="margin-bottom: 0in">Microsoft Windows 98, ME, 2000
- (Service Pack 2 or higher), XP, Vista</P>
- <LI><P STYLE="margin-bottom: 0in">A recent version of Java(TM)
- Runtime Environment</P>
- <LI><P STYLE="margin-bottom: 0in">A recent version of StarOffice(TM)
- 8, StarSuite(TM) 8, or OpenOffice.org 2.3</P>
- <LI><P STYLE="margin-bottom: 0in">256 MB RAM (512 MB RAM
- recommended)
- </P>
- <LI><P STYLE="margin-bottom: 0in">5 MB available hard disk space
- </P>
-</UL>
-<H3>Installing</H3>
-<P>Installing Sun&trade; Report Builder adds additional functionality
-to an installed version of StarOffice, StarSuite, or OpenOffice.org.</P>
-<UL>
- <LI><P>You need administrator rights to install a shared extension
- for all users on your network. You do not need administrator rights
- to install a user extension for your own use only.</P>
-</UL>
-<H3>To install a user extension</H3>
-<UL>
- <LI><P>Double-click the <FONT FACE="Bitstream Vera Sans Mono, Cumberland, Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, Monaco, Monospaced">sun-report-builder.oxt</FONT>
- file in your system's file browser</P>
- <P>or</P>
- <LI><P>Choose <B>Tools - Extension Manager</B>, select <B>My
- Extensions</B> and click <B>Add</B>.</P>
-</UL>
-<H3>To install a shared extension with UI</H3>
-<P>There are two ways of installing a shared extension with a
-graphical user interface:</P>
-<H4>From the Command Line</H4>
-<OL>
- <LI><P>Open a terminal or command shell.</P>
- <LI><P STYLE="margin-top: 0.02in; margin-bottom: 0in">Change to the
- StarOffice/program directory. (Replace StarOffice by StarSuite or
- OpenOffice.org as applicable)</P>
- <LI><P>Terminate <B>any running instances</B> of StarOffice and the
- Quickstarter, if this happens to be running.</P>
- <LI><P>Enter the following command:</P>
- <P STYLE="margin-top: 0.01in; margin-bottom: 0.01in"><FONT FACE="Bitstream Vera Sans Mono, Cumberland, Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, Monaco, Monospaced">unopkg
- gui</FONT>
- </P>
- <P>The Extension Manager starts with a graphical user interface.
- </P>
- <LI><P>Click the <B>StarOffice Extensions</B> entry and click Add.</P>
-</OL>
-<H4>From Within StarOffice</H4>
-<UL>
- <LI><P>Choose <B>Tools - Extension Manager</B>, select <B>StarOffice
- Extensions</B> and click <B>Add</B>.</P>
-</UL>
-<H3>To install a shared extension in text mode</H3>
-<OL>
- <LI><P>Open a terminal or command shell.</P>
- <LI><P STYLE="margin-top: 0.02in; margin-bottom: 0in">Change to the
- StarOffice/program directory.</P>
- <LI><P>Enter the following command, using the path and file name of
- your extension:</P>
- <P STYLE="margin-top: 0.01in; margin-bottom: 0.01in"><FONT FACE="Bitstream Vera Sans Mono, Cumberland, Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, Monaco, Monospaced">unopkg
- add --shared (path/)sun-report-builder.oxt</FONT>
- </P>
-</OL>
-<P STYLE="margin-top: 0.01in; margin-bottom: 0.01in">You need write
-access to the StarOffice installation directory to be able to install
-a <B>shared</B> extension. The extension manager will disable shared
-extension installation if you have no write access to the directory.</P>
-<P STYLE="margin-top: 0.01in; margin-bottom: 0.01in">All running
-instances of StarOffice need to be terminated for a successful
-installation of a <B>shared</B> extension.</P>
-<H3>Uninstalling</H3>
-<P>Open Extension Manager, click the Sun&trade; Report Builder entry,
-then click Remove.</P>
-<H2>Using the Plugin</H2>
-<UL>
- <LI><P>You find complete instructions on using the Sun Report
- Builder in the application help that is installed with a recent
- version of StarOffice, StarSuite, or OpenOffice.org. Press F1 to
- open the Help Viewer, then enter the words Report Builder in the
- Index text box.</P>
-</UL>
-<H2>Support and Feedback</H2>
-<P>Product support for end users for the Sun&trade; Report Builder is
-available by Sun Micosystems, Inc.
-</P>
-<P>We appreciate feedback or questions about the plugin but cannot
-guarantee a response to every email.</P>
-<P>We hope you enjoy using the new Sun&trade; Report Builder.</P>
-<H2>Legal Disclaimers</H2>
-<PRE>Copyright &copy; 2007 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. All rights reserved.
-
-U.S. Government Rights - Commercial software. Government users are subject to the Sun Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its supplements.
-
-Use is subject to license terms.
-
-This distribution may include materials developed by third parties.
-Sun, Sun Microsystems and the Sun logo are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
-
-This product is covered and controlled by U.S. Export Control laws and may be subject to the export or import laws in other countries. Nuclear, missile, chemical biological weapons or nuclear maritime end uses or end users, whether direct or indirect, are strictly prohibited. Export or reexport to countries subject to U.S. embargo or to entities identified on U.S. export exclusion lists, including, but not limited to, the denied persons and specially designated nationals lists is strictly prohibited.
-
-
-Copyright &copy; 2007 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, Etats-Unis. Tous droits r&eacute;serv&eacute;s.
-L'utilisation est soumise aux termes de la Licence.
-Cette distribution peut comprendre des composants d&eacute;velopp&eacute;s par des tierces parties.
-Sun, Sun Microsystems et le logo Sun sont des marques de fabrique ou des marques d&eacute;pos&eacute;es de Sun Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
-Ce produit est soumis &agrave; la l&eacute;gislation am&eacute;ricaine en mati&egrave;re de contr&ocirc;le des exportations et peut &ecirc;tre soumis &agrave; la r&egrave;glementation en vigueur dans d'autres pays dans le domaine des exportations et importations. Les utilisations, ou utilisateurs finaux, pour des armes nucl&eacute;aires,des missiles, des armes biologiques et chimiques ou du nucl&eacute;aire maritime, directement ou indirectement, sont strictement interdites. Les exportations ou r&eacute;exportations vers les pays sous embargo am&eacute;ricain, ou vers des entit&eacute;s figurant sur les listes d'exclusion d'exportation am&eacute;ricaines, y compris, mais de mani&egrave;re non exhaustive, la liste de personnes qui font objet d'un ordre de ne pas participer, d'une fa&ccedil;on directe ou indirecte, aux exportations des produits ou des services qui sont r&eacute;gis par la l&eacute;gislation am&eacute;ricaine en mati&egrave;re de contr&ocirc;le des exportations et la liste de ressortissants sp&eacute;cifiquement d&eacute;sign&eacute;s, sont rigoureusement interdites.</PRE>
-</BODY>
-</HTML> \ No newline at end of file
+<html>
+ <head>
+ <title>Oracle Report Builder</title>
+ </head>
+ <body>
+ <h1>Oracle Report Builder</h1>
+ <p>This file contains important information about the installation.</p>
+ <p>This software offered by Oracle will enhance Oracle Open Office and OpenOffice.org software. The following features will be added:</p>
+ <ul>
+ <li><p>In a Base database document, in the Reports window, you now have an additional choice to &quot;Create Report in Design View&quot;.</p></li>
+ <li><p>An interactive window allows you to create a database report by drag-and-drop, with visual feedback.</p></li>
+ <li><p>All reports created by Report Builder can also be edited in the Report Builder window. </p></li>
+ </ul>
+ <p>You find more information about installation and usage of the extension in the following paragraphs of this readme file.</p>
+ <h2>Notes on Installation</h2>
+ <h3>System Requirements</h3>
+ <ul>
+ <li><p>A recent version of Oracle Open Office or OpenOffice.org</p></li>
+ <li><p>A recent version of the Java(TM) Runtime Environment</p></li>
+ </ul>
+ <h3>Installing</h3>
+ <p>You need administrator rights to install a shared extension for all users on your network. You do not need administrator rights to install a user extension for your own use only.</p>
+ <p>Double-click the extension file (*.oxt) in your system's file browser or choose <b>Tools &gt; Extension Manager</b>and click <B>Add</B>.</P>
+ <h3>Uninstalling</h3>
+ <p>Choose Tools &gt; Extension Manager, click the Oracle Report Builder entry, then click Remove.</P>
+ <h2>Using the Extension</h2>
+ <p>You find complete instructions on using the Oracle Report Builder in the application help that is installed with Oracle Open Office or OpenOffice.org. Press F1 to open the Help Viewer, then enter the words "Report Builder" in the Index text box.</p>
+ <p>Copyright &copy; 2007, 2010 Oracle and/or its affiliates. All rights reserved.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/reportbuilder/license/readme_en-US.txt b/reportbuilder/license/readme_en-US.txt
index 8c8d14397b1c..bd9eb48567af 100644
--- a/reportbuilder/license/readme_en-US.txt
+++ b/reportbuilder/license/readme_en-US.txt
@@ -1,87 +1,34 @@
-Sun(TM) Report Builder
-
+Oracle Report Builder
+=====================
This file contains important information about the installation.
-This software offered by Sun Microsystems, Inc. will enhance StarOffice(TM) 8, StarSuite(TM) 8, and OpenOffice.org 2.3 software. The following features will be added:
-
-- In a Base database document, in the Reports window, you now have an additional choice to "Create Report in Design View".
-- An interactive window allows you to create a database report by drag-and-drop, with visual feedback.
-- All reports created by Report Builder can also be edited in the Report Builder window.
-
-You find more information about installation and usage of the plugin in the following paragraphs of this readme file.
+This software offered by Oracle will enhance Oracle Open Office and OpenOffice.org software. The following features will be added:
+* In a Base database document, in the Reports window, you now have an additional choice to "Create Report in Design View".
+* An interactive window allows you to create a database report by drag-and-drop, with visual feedback.
+* All reports created by Report Builder can also be edited in the Report Builder window.
+
+You find more information about installation and usage of the extension in the following paragraphs of this readme file.
Notes on Installation
-
+---------------------
+
System Requirements
-Microsoft Windows 98, ME, 2000 (Service Pack 2 or higher), XP, Vista
-- A recent version of Java(TM) Runtime Environment
-- A recent version of StarOffice(TM) 8, StarSuite(TM) 8, or OpenOffice.org 2.3
-- 256 MB RAM (512 MB RAM recommended)
-- 5 MB available hard disk space
-
+* A recent version of Oracle Open Office or OpenOffice.org
+* A recent version of the Java(TM) Runtime Environment
+
Installing
-Installing Sun(TM) Report Builder adds additional functionality to an installed version of StarOffice, StarSuite, or OpenOffice.org.
-You need administrator rights to install a shared extension for all users on your network. You do not need administrator rights to install a user extension for your own use only.
-
-To install a user extension
-
-Double-click the sun-report-builder.oxt file in your system's file browser
-or
-Choose Tools - Extension Manager, select My Extensions and click Add.
-
-To install a shared extension with UI
-
-There are two ways of installing a shared extension with a graphical user interface:
-From the Command Line
-1. Open a terminal or command shell.
-2. Change to the StarOffice/program directory. (Replace StarOffice by StarSuite or OpenOffice.org as applicable)
-3. Terminate any running instances of StarOffice and the Quickstarter, if this happens to be running.
-4. Enter the following command:
-unopkg gui
-The Extension Manager starts with a graphical user interface.
-5. Click the StarOffice Extensions entry and click Add.
-From Within StarOffice
-Choose Tools - Extension Manager, select StarOffice Extensions and click Add.
-To install a shared extension in text mode
-1. Open a terminal or command shell.
-2. Change to the StarOffice/program directory.
-3. Enter the following command, using the path and file name of your extension:
-unopkg add --shared (path/)sun-report-builder.oxt
-You need write access to the StarOffice installation directory to be able to install a shared extension. The extension manager will disable shared extension installation if you have no write access to the directory.
-All running instances of StarOffice need to be terminated for a successful installation of a shared extension.
+You need administrator rights to install a shared extension for all users on your network. You do not need administrator rights to install a user extension for your own use only.
+* Double-click the extension file (*.oxt) in your system's file browser or choose Tools > Extension Manager and click Add.
Uninstalling
+
+* Choose Tools > Extension Manager, click the Oracle Report Builder entry, then click Remove.
-Open Extension Manager, click the Sun? Report Builder entry, then click Remove.
-
-Using the Plugin
-
-You find complete instructions on using the Sun Report Builder in the application help that is installed with a recent version of StarOffice, StarSuite, or OpenOffice.org. Press F1 to open the Help Viewer, then enter the words Report Builder in the Index text box.
-
-Support and Feedback
-
-Product support for end users for the Sun? Report Builder is available by Sun Micosystems, Inc.
-We appreciate feedback or questions about the plugin but cannot guarantee a response to every email.
-We hope you enjoy using the new Sun? Report Builder.
-
-Legal Disclaimers
-
-Copyright 2007 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. All rights reserved.
-
-U.S. Government Rights - Commercial software. Government users are subject to the Sun Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its supplements.
-
-Use is subject to license terms.
-
-This distribution may include materials developed by third parties.
-Sun, Sun Microsystems and the Sun logo are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
-
-This product is covered and controlled by U.S. Export Control laws and may be subject to the export or import laws in other countries. Nuclear, missile, chemical biological weapons or nuclear maritime end uses or end users, whether direct or indirect, are strictly prohibited. Export or reexport to countries subject to U.S. embargo or to entities identified on U.S. export exclusion lists, including, but not limited to, the denied persons and specially designated nationals lists is strictly prohibited.
+Using the Extension
+You find complete instructions on using the Oracle Report Builder in the application help that is installed with Oracle Open Office or OpenOffice.org. Press F1 to open the Help Viewer, then enter the words "Report Builder" in the Index text box.
-Copyright 2007 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, Etats-Unis. Tous droits rservs.
-L'utilisation est soumise aux termes de la Licence.
-Cette distribution peut comprendre des composants dvelopps par des tierces parties.
-Sun, Sun Microsystems et le logo Sun sont des marques de fabrique ou des marques dposes de Sun Microsystems, Inc. aux Etats-Unis et dans d'autres pays.
-Ce produit est soumis la lgislation amricaine en matire de contrle des exportations et peut tre soumis la rglementation en vigueur dans d'autres pays dans le domaine des exportations et importations. Les utilisations, ou utilisateurs finaux, pour des armes nuclaires,des missiles, des armes biologiques et chimiques ou du nuclaire maritime, directement ou indirectement, sont strictement interdites. Les exportations ou rexportations vers les pays sous embargo amricain, ou vers des entits figurant sur les listes d'exclusion d'exportation amricaines, y compris, mais de manire non exhaustive, la liste de personnes qui font objet d'un ordre de ne pas participer, d'une faon directe ou indirecte, aux exportations des produits ou des services qui sont rgis par la lgislation amricaine en matire de contrle des exportations et la liste de ressortissants spcifiquement dsigns, sont rigoureusement interdites. \ No newline at end of file
+------------------------------------------------------------------------------
+Copyright (c) 2007, 2010 Oracle and/or its affiliates. All rights reserved. \ No newline at end of file
diff --git a/sal/inc/rtl/locale.h b/sal/inc/rtl/locale.h
index 8767f41d88b7..f2b0016942a3 100644
--- a/sal/inc/rtl/locale.h
+++ b/sal/inc/rtl/locale.h
@@ -49,7 +49,7 @@ extern "C" {
typedef struct _rtl_Locale
{
/**
- Lowercase two-letter ISO-639 code.
+ Lowercase two-letter ISO 639-1 or three-letter ISO 639-3 code.
*/
rtl_uString * Language;
/**
@@ -72,7 +72,7 @@ typedef struct _rtl_Locale
/**
Register a locale from language, country and variant.
- @param language lowercase two-letter ISO-639 code.
+ @param language lowercase two-letter ISO 639-1 or three-letter ISO 639-3 code.
@param country uppercase two-letter ISO-3166 code. May be null.
@param variant vendor and browser specific code. May be null.
*/
@@ -95,7 +95,7 @@ rtl_Locale * SAL_CALL rtl_locale_getDefault();
Sets the default.
Normally set once at the beginning of applet or application,
then never reset. <code>setDefault</code> does not reset the host locale.
- @param language lowercase two-letter ISO-639 code.
+ @param language lowercase two-letter ISO 639-1 or three-letter ISO 639-3 code.
@param country uppercase two-letter ISO-3166 code.
@param variant vendor and browser specific code. See class description.
*/
@@ -103,7 +103,7 @@ void SAL_CALL rtl_locale_setDefault( const sal_Unicode * language, const sal_Uni
/**
Getter for programmatic name of field,
- an lowercased two-letter ISO-639 code.
+ a lowercased two-letter ISO 639-1 or three-letter ISO 639-3 code.
@see #getDisplayLanguage
*/
rtl_uString * SAL_CALL rtl_locale_getLanguage( rtl_Locale * This );
diff --git a/sal/osl/unx/nlsupport.c b/sal/osl/unx/nlsupport.c
index 0b09cf1ac2a4..c9f4fd18df21 100644
--- a/sal/osl/unx/nlsupport.c
+++ b/sal/osl/unx/nlsupport.c
@@ -105,7 +105,8 @@ _pair_search (const char *key, const _pair *base, unsigned int member )
static char * _compose_locale( rtl_Locale * pLocale, char * buffer, size_t n )
{
/* check if a valid locale is specified */
- if( pLocale && pLocale->Language && (pLocale->Language->length == 2) )
+ if( pLocale && pLocale->Language &&
+ (pLocale->Language->length == 2 || pLocale->Language->length == 3) )
{
size_t offset = 0;
@@ -193,16 +194,20 @@ static rtl_Locale * _parse_locale( const char * locale )
rtl_Locale * ret;
+ /* language is a two or three letter code */
+ if( (len > 3 && '_' == locale[3]) || (len == 3 && '_' != locale[2]) )
+ offset = 3;
+
/* convert language code to unicode */
- rtl_string2UString( &pLanguage, locale, 2, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+ rtl_string2UString( &pLanguage, locale, offset, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
OSL_ASSERT(pLanguage != NULL);
/* convert country code to unicode */
- if( len >= 5 && '_' == locale[2] )
+ if( len >= offset+3 && '_' == locale[offset] )
{
- rtl_string2UString( &pCountry, locale + 3, 2, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
+ rtl_string2UString( &pCountry, locale + offset + 1, 2, RTL_TEXTENCODING_ASCII_US, OSTRING_TO_OUSTRING_CVTFLAGS );
OSL_ASSERT(pCountry != NULL);
- offset = 5;
+ offset += 3;
}
/* convert variant code to unicode - do not rely on "." as delimiter */
diff --git a/sal/systools/win32/uwinapi/DllMain.cpp b/sal/systools/win32/uwinapi/DllMain.cpp
index ff42ebf1f1dd..94f6c34fec24 100644
--- a/sal/systools/win32/uwinapi/DllMain.cpp
+++ b/sal/systools/win32/uwinapi/DllMain.cpp
@@ -223,14 +223,13 @@ extern "C" BOOL WINAPI DllMain( HMODULE hModule, DWORD dwReason, LPVOID )
{
case DLL_PROCESS_ATTACH:
UWINAPI_BaseAddress = hModule;
+#ifdef __MINGW32__
+ return TRUE;
+#else
return DisableThreadLibraryCalls( hModule );
+#endif
default:
return TRUE;
}
}
-
-
-
-
-
diff --git a/sal/systools/win32/uwinapi/sntprintf.c b/sal/systools/win32/uwinapi/sntprintf.c
index 25e9c6df1f41..69d47821311c 100644
--- a/sal/systools/win32/uwinapi/sntprintf.c
+++ b/sal/systools/win32/uwinapi/sntprintf.c
@@ -10,7 +10,7 @@
#pragma warning(disable:4273) // inconsistent dll linkage
#endif
-#if _MSC_VER < 1300
+#if (defined(_MSC_VER) && (_MSC_VER < 1300)) || (defined(__MINGW32_VERSION) && ((__MINGW32_MAJOR_VERSION < 3)||((__MINGW32_MAJOR_VERSION == 3)&&(__MINGW32_MINOR_VERSION < 18))))
/* The non-debug versions of _vscprintf/_scprintf are just calls
to _vsprintf/_sprintf with string buffer pointer set to NULL,
diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx
index a43c7e52a353..1a4cc9278e1e 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -176,18 +176,38 @@ OUString SAL_CALL FastLocatorImpl::getSystemId(void) throw (RuntimeException)
}
// --------------------------------------------------------------------
-// FastSaxParser implementation
-// --------------------------------------------------------------------
-FastSaxParser::FastSaxParser()
+ParserData::ParserData()
{
- mxDocumentLocator.set( new FastLocatorImpl( this ) );
+}
+
+ParserData::~ParserData()
+{
+}
+// --------------------------------------------------------------------
+
+Entity::Entity( const ParserData& rData ) :
+ ParserData( rData )
+{
// performance-Improvment. Reference is needed when calling the startTag callback.
// Handing out the same object with every call is allowed (see sax-specification)
mxAttributes.set( new FastAttributeList( mxTokenHandler ) );
}
+Entity::~Entity()
+{
+}
+
+// --------------------------------------------------------------------
+// FastSaxParser implementation
+// --------------------------------------------------------------------
+
+FastSaxParser::FastSaxParser()
+{
+ mxDocumentLocator.set( new FastLocatorImpl( this ) );
+}
+
// --------------------------------------------------------------------
FastSaxParser::~FastSaxParser()
@@ -200,46 +220,43 @@ FastSaxParser::~FastSaxParser()
void FastSaxParser::pushContext()
{
- bool bRootContext = false;
- SaxContextImplPtr p;
- if( maContextStack.empty() )
+ Entity& rEntity = getEntity();
+ if( rEntity.maContextStack.empty() )
{
- p.reset( new SaxContextImpl() );
- bRootContext = true;
+ rEntity.maContextStack.push( SaxContextImplPtr( new SaxContextImpl ) );
+ DefineNamespace( OString("xml"), "http://www.w3.org/XML/1998/namespace");
}
else
{
- p.reset( new SaxContextImpl( maContextStack.top() ) );
+ rEntity.maContextStack.push( SaxContextImplPtr( new SaxContextImpl( rEntity.maContextStack.top() ) ) );
}
- maContextStack.push( p );
-
- if( bRootContext )
- DefineNamespace( OString("xml"), "http://www.w3.org/XML/1998/namespace");
}
// --------------------------------------------------------------------
void FastSaxParser::popContext()
{
- OSL_ENSURE( !maContextStack.empty(), "sax::FastSaxParser::popContext(), pop without push?" );
- if( !maContextStack.empty() )
- maContextStack.pop();
+ Entity& rEntity = getEntity();
+ OSL_ENSURE( !rEntity.maContextStack.empty(), "sax::FastSaxParser::popContext(), pop without push?" );
+ if( !rEntity.maContextStack.empty() )
+ rEntity.maContextStack.pop();
}
// --------------------------------------------------------------------
void FastSaxParser::DefineNamespace( const OString& rPrefix, const sal_Char* pNamespaceURL )
{
- OSL_ENSURE( !maContextStack.empty(), "sax::FastSaxParser::DefineNamespace(), I need a context!" );
- if( !maContextStack.empty() )
+ Entity& rEntity = getEntity();
+ OSL_ENSURE( !rEntity.maContextStack.empty(), "sax::FastSaxParser::DefineNamespace(), I need a context!" );
+ if( !rEntity.maContextStack.empty() )
{
- sal_uInt32 nOffset = maContextStack.top()->mnNamespaceCount++;
+ sal_uInt32 nOffset = rEntity.maContextStack.top()->mnNamespaceCount++;
- if( maNamespaceDefines.size() <= nOffset )
- maNamespaceDefines.resize( maNamespaceDefines.size() + 64 );
+ if( rEntity.maNamespaceDefines.size() <= nOffset )
+ rEntity.maNamespaceDefines.resize( rEntity.maNamespaceDefines.size() + 64 );
const OUString aNamespaceURL( pNamespaceURL, strlen( pNamespaceURL ), RTL_TEXTENCODING_UTF8 );
- maNamespaceDefines[nOffset].reset( new NamespaceDefine( rPrefix, GetNamespaceToken( aNamespaceURL ), aNamespaceURL ) );
+ rEntity.maNamespaceDefines[nOffset].reset( new NamespaceDefine( rPrefix, GetNamespaceToken( aNamespaceURL ), aNamespaceURL ) );
}
}
@@ -249,7 +266,7 @@ sal_Int32 FastSaxParser::GetToken( const OString& rToken )
{
Sequence< sal_Int8 > aSeq( (sal_Int8*)rToken.getStr(), rToken.getLength() );
- return mxTokenHandler->getTokenFromUTF8( aSeq );
+ return getEntity().mxTokenHandler->getTokenFromUTF8( aSeq );
}
sal_Int32 FastSaxParser::GetToken( const sal_Char* pToken, sal_Int32 nLen /* = 0 */ )
@@ -259,7 +276,7 @@ sal_Int32 FastSaxParser::GetToken( const sal_Char* pToken, sal_Int32 nLen /* = 0
Sequence< sal_Int8 > aSeq( (sal_Int8*)pToken, nLen );
- return mxTokenHandler->getTokenFromUTF8( aSeq );
+ return getEntity().mxTokenHandler->getTokenFromUTF8( aSeq );
}
// --------------------------------------------------------------------
@@ -268,12 +285,13 @@ sal_Int32 FastSaxParser::GetTokenWithPrefix( const OString& rPrefix, const OStri
{
sal_Int32 nNamespaceToken = FastToken::DONTKNOW;
- sal_uInt32 nNamespace = maContextStack.top()->mnNamespaceCount;
+ Entity& rEntity = getEntity();
+ sal_uInt32 nNamespace = rEntity.maContextStack.top()->mnNamespaceCount;
while( nNamespace-- )
{
- if( maNamespaceDefines[nNamespace]->maPrefix == rPrefix )
+ if( rEntity.maNamespaceDefines[nNamespace]->maPrefix == rPrefix )
{
- nNamespaceToken = maNamespaceDefines[nNamespace]->mnToken;
+ nNamespaceToken = rEntity.maNamespaceDefines[nNamespace]->mnToken;
break;
}
@@ -295,14 +313,15 @@ sal_Int32 FastSaxParser::GetTokenWithPrefix( const sal_Char*pPrefix, int nPrefix
{
sal_Int32 nNamespaceToken = FastToken::DONTKNOW;
- sal_uInt32 nNamespace = maContextStack.top()->mnNamespaceCount;
+ Entity& rEntity = getEntity();
+ sal_uInt32 nNamespace = rEntity.maContextStack.top()->mnNamespaceCount;
while( nNamespace-- )
{
- const OString& rPrefix( maNamespaceDefines[nNamespace]->maPrefix );
+ const OString& rPrefix( rEntity.maNamespaceDefines[nNamespace]->maPrefix );
if( (rPrefix.getLength() == nPrefixLen) &&
(strncmp( rPrefix.getStr(), pPrefix, nPrefixLen ) == 0 ) )
{
- nNamespaceToken = maNamespaceDefines[nNamespace]->mnToken;
+ nNamespaceToken = rEntity.maNamespaceDefines[nNamespace]->mnToken;
break;
}
@@ -335,12 +354,13 @@ sal_Int32 FastSaxParser::GetNamespaceToken( const OUString& rNamespaceURL )
OUString FastSaxParser::GetNamespaceURL( const OString& rPrefix ) throw (SAXException)
{
- if( !maContextStack.empty() )
+ Entity& rEntity = getEntity();
+ if( !rEntity.maContextStack.empty() )
{
- sal_uInt32 nNamespace = maContextStack.top()->mnNamespaceCount;
+ sal_uInt32 nNamespace = rEntity.maContextStack.top()->mnNamespaceCount;
while( nNamespace-- )
- if( maNamespaceDefines[nNamespace]->maPrefix == rPrefix )
- return maNamespaceDefines[nNamespace]->maNamespaceURL;
+ if( rEntity.maNamespaceDefines[nNamespace]->maPrefix == rPrefix )
+ return rEntity.maNamespaceDefines[nNamespace]->maNamespaceURL;
}
throw SAXException(); // prefix that has no defined namespace url
@@ -348,16 +368,17 @@ OUString FastSaxParser::GetNamespaceURL( const OString& rPrefix ) throw (SAXExce
OUString FastSaxParser::GetNamespaceURL( const sal_Char*pPrefix, int nPrefixLen ) throw(SAXException)
{
- if( pPrefix && !maContextStack.empty() )
+ Entity& rEntity = getEntity();
+ if( pPrefix && !rEntity.maContextStack.empty() )
{
- sal_uInt32 nNamespace = maContextStack.top()->mnNamespaceCount;
+ sal_uInt32 nNamespace = rEntity.maContextStack.top()->mnNamespaceCount;
while( nNamespace-- )
{
- const OString& rPrefix( maNamespaceDefines[nNamespace]->maPrefix );
+ const OString& rPrefix( rEntity.maNamespaceDefines[nNamespace]->maPrefix );
if( (rPrefix.getLength() == nPrefixLen) &&
(strncmp( rPrefix.getStr(), pPrefix, nPrefixLen ) == 0 ) )
{
- return maNamespaceDefines[nNamespace]->maNamespaceURL;
+ return rEntity.maNamespaceDefines[nNamespace]->maNamespaceURL;
}
}
}
@@ -421,7 +442,7 @@ void FastSaxParser::parseStream( const InputSource& maStructSource) throw (SAXEx
// Only one text at one time
MutexGuard guard( maMutex );
- struct Entity entity;
+ Entity entity( maData );
entity.maStructSource = maStructSource;
if( !entity.maStructSource.aInputStream.is() )
@@ -442,26 +463,23 @@ void FastSaxParser::parseStream( const InputSource& maStructSource) throw (SAXEx
XML_SetCharacterDataHandler( entity.mpParser, call_callbackCharacters );
XML_SetExternalEntityRefHandler( entity.mpParser, call_callbackExternalEntityRef );
- // maSavedException used to transport exceptions through C callbacks
- maSavedException.clear();
-
pushEntity( entity );
try
{
// start the document
- if( mxDocumentHandler.is() )
+ if( entity.mxDocumentHandler.is() )
{
Reference< XLocator > xLoc( mxDocumentLocator.get() );
- mxDocumentHandler->setDocumentLocator( xLoc );
- mxDocumentHandler->startDocument();
+ entity.mxDocumentHandler->setDocumentLocator( xLoc );
+ entity.mxDocumentHandler->startDocument();
}
parse();
// finish document
- if( mxDocumentHandler.is() )
+ if( entity.mxDocumentHandler.is() )
{
- mxDocumentHandler->endDocument();
+ entity.mxDocumentHandler->endDocument();
}
}
catch( SAXException & )
@@ -489,13 +507,12 @@ void FastSaxParser::parseStream( const InputSource& maStructSource) throw (SAXEx
void FastSaxParser::setFastDocumentHandler( const Reference< XFastDocumentHandler >& Handler ) throw (RuntimeException)
{
- mxDocumentHandler = Handler;
+ maData.mxDocumentHandler = Handler;
}
void SAL_CALL FastSaxParser::setTokenHandler( const Reference< XFastTokenHandler >& Handler ) throw (RuntimeException)
{
- mxTokenHandler = Handler;
- mxAttributes.set( new FastAttributeList( mxTokenHandler ) );
+ maData.mxTokenHandler = Handler;
}
void SAL_CALL FastSaxParser::registerNamespace( const OUString& NamespaceURL, sal_Int32 NamespaceToken ) throw (IllegalArgumentException, RuntimeException)
@@ -513,17 +530,17 @@ void SAL_CALL FastSaxParser::registerNamespace( const OUString& NamespaceURL, sa
void FastSaxParser::setErrorHandler(const Reference< XErrorHandler > & Handler) throw (RuntimeException)
{
- mxErrorHandler = Handler;
+ maData.mxErrorHandler = Handler;
}
void FastSaxParser::setEntityResolver(const Reference < XEntityResolver > & Resolver) throw (RuntimeException)
{
- mxEntityResolver = Resolver;
+ maData.mxEntityResolver = Resolver;
}
void FastSaxParser::setLocale( const Locale & Locale ) throw (RuntimeException)
{
- maLocale = Locale;
+ maData.maLocale = Locale;
}
Sequence< OUString > FastSaxParser::getSupportedServiceNames_Static(void)
@@ -619,29 +636,30 @@ void FastSaxParser::parse()
const int BUFFER_SIZE = 16 * 1024;
Sequence< sal_Int8 > seqOut( BUFFER_SIZE );
+ Entity& rEntity = getEntity();
int nRead = 0;
do
{
- nRead = getEntity().maConverter.readAndConvert( seqOut, BUFFER_SIZE );
+ nRead = rEntity.maConverter.readAndConvert( seqOut, BUFFER_SIZE );
if( nRead <= 0 )
{
- XML_Parse( getEntity().mpParser, (const char*) seqOut.getConstArray(), 0, 1 );
+ XML_Parse( rEntity.mpParser, (const char*) seqOut.getConstArray(), 0, 1 );
break;
}
- bool bContinue = XML_Parse( getEntity().mpParser, (const char*) seqOut.getConstArray(), nRead, 0 ) != 0;
+ bool bContinue = XML_Parse( rEntity.mpParser, (const char*) seqOut.getConstArray(), nRead, 0 ) != 0;
// callbacks used inside XML_Parse may have caught an exception
- if( !bContinue || maSavedException.hasValue() )
+ if( !bContinue || rEntity.maSavedException.hasValue() )
{
// Error during parsing !
- XML_Error xmlE = XML_GetErrorCode( getEntity().mpParser );
+ XML_Error xmlE = XML_GetErrorCode( rEntity.mpParser );
OUString sSystemId = mxDocumentLocator->getSystemId();
sal_Int32 nLine = mxDocumentLocator->getLineNumber();
SAXParseException aExcept(
lclGetErrorMessage( xmlE, sSystemId, nLine ),
Reference< XInterface >(),
- Any( &maSavedException, getCppuType( &maSavedException ) ),
+ Any( &rEntity.maSavedException, getCppuType( &rEntity.maSavedException ) ),
mxDocumentLocator->getPublicId(),
mxDocumentLocator->getSystemId(),
mxDocumentLocator->getLineNumber(),
@@ -649,8 +667,8 @@ void FastSaxParser::parse()
);
// error handler is set, it may throw the exception
- if( mxErrorHandler.is() )
- mxErrorHandler->fatalError( Any( aExcept ) );
+ if( rEntity.mxErrorHandler.is() )
+ rEntity.mxErrorHandler->fatalError( Any( aExcept ) );
// error handler has not thrown, but parsing cannot go on, the
// exception MUST be thrown
@@ -680,9 +698,10 @@ struct AttributeData
void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char** awAttributes )
{
Reference< XFastContextHandler > xParentContext;
- if( !maContextStack.empty() )
+ Entity& rEntity = getEntity();
+ if( !rEntity.maContextStack.empty() )
{
- xParentContext = maContextStack.top()->mxContext;
+ xParentContext = rEntity.maContextStack.top()->mxContext;
if( !xParentContext.is() )
{
// we ignore current elements, so no processing needed
@@ -693,7 +712,7 @@ void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char
pushContext();
- mxAttributes->clear();
+ rEntity.mxAttributes->clear();
// create attribute map and process namespace instructions
int i = 0;
@@ -734,7 +753,7 @@ void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char
if( (nNameLen == 5) && (strcmp( pName, "xmlns" ) == 0) )
{
// namespace of the element found
- maContextStack.top()->maNamespace = OUString( awAttributes[i+1], strlen( awAttributes[i+1] ), RTL_TEXTENCODING_UTF8 );
+ rEntity.maContextStack.top()->maNamespace = OUString( awAttributes[i+1], strlen( awAttributes[i+1] ), RTL_TEXTENCODING_UTF8 );
}
else
{
@@ -752,17 +771,17 @@ void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char
{
sal_Int32 nAttributeToken = GetTokenWithPrefix( aIt->maPrefix, aIt->maName );
if( nAttributeToken != FastToken::DONTKNOW )
- mxAttributes->add( nAttributeToken, aIt->maValue );
+ rEntity.mxAttributes->add( nAttributeToken, aIt->maValue );
else
- mxAttributes->addUnknown( GetNamespaceURL( aIt->maPrefix ), aIt->maName, aIt->maValue );
+ rEntity.mxAttributes->addUnknown( GetNamespaceURL( aIt->maPrefix ), aIt->maName, aIt->maValue );
}
else
{
sal_Int32 nAttributeToken = GetToken( aIt->maName );
if( nAttributeToken != FastToken::DONTKNOW )
- mxAttributes->add( nAttributeToken, aIt->maValue );
+ rEntity.mxAttributes->add( nAttributeToken, aIt->maValue );
else
- mxAttributes->addUnknown( aIt->maName, aIt->maValue );
+ rEntity.mxAttributes->addUnknown( aIt->maName, aIt->maValue );
}
}
@@ -770,31 +789,31 @@ void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char
splitName( pwName, pPrefix, nPrefixLen, pName, nNameLen );
if( nPrefixLen > 0 )
nElementToken = GetTokenWithPrefix( pPrefix, nPrefixLen, pName, nNameLen );
- else if( maContextStack.top()->maNamespace.getLength() > 0 )
- nElementToken = GetTokenWithNamespaceURL( maContextStack.top()->maNamespace, pName, nNameLen );
+ else if( rEntity.maContextStack.top()->maNamespace.getLength() > 0 )
+ nElementToken = GetTokenWithNamespaceURL( rEntity.maContextStack.top()->maNamespace, pName, nNameLen );
else
nElementToken = GetToken( pName );
- maContextStack.top()->mnElementToken = nElementToken;
+ rEntity.maContextStack.top()->mnElementToken = nElementToken;
- Reference< XFastAttributeList > xAttr( mxAttributes.get() );
+ Reference< XFastAttributeList > xAttr( rEntity.mxAttributes.get() );
Reference< XFastContextHandler > xContext;
if( nElementToken == FastToken::DONTKNOW )
{
if( nPrefixLen > 0 )
- maContextStack.top()->maNamespace = GetNamespaceURL( pPrefix, nPrefixLen );
+ rEntity.maContextStack.top()->maNamespace = GetNamespaceURL( pPrefix, nPrefixLen );
- const OUString aNamespace( maContextStack.top()->maNamespace );
+ const OUString aNamespace( rEntity.maContextStack.top()->maNamespace );
const OUString aElementName( pPrefix, nPrefixLen, RTL_TEXTENCODING_UTF8 );
- maContextStack.top()->maElementName = aElementName;
+ rEntity.maContextStack.top()->maElementName = aElementName;
if( xParentContext.is() )
xContext = xParentContext->createUnknownChildContext( aNamespace, aElementName, xAttr );
else
- xContext = mxDocumentHandler->createUnknownChildContext( aNamespace, aElementName, xAttr );
+ xContext = rEntity.mxDocumentHandler->createUnknownChildContext( aNamespace, aElementName, xAttr );
if( xContext.is() )
{
- maContextStack.top()->mxContext = xContext;
+ rEntity.maContextStack.top()->mxContext = xContext;
xContext->startUnknownElement( aNamespace, aElementName, xAttr );
}
}
@@ -803,28 +822,29 @@ void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char
if( xParentContext.is() )
xContext = xParentContext->createFastChildContext( nElementToken, xAttr );
else
- xContext = mxDocumentHandler->createFastChildContext( nElementToken, xAttr );
+ xContext = rEntity.mxDocumentHandler->createFastChildContext( nElementToken, xAttr );
if( xContext.is() )
{
- maContextStack.top()->mxContext = xContext;
+ rEntity.maContextStack.top()->mxContext = xContext;
xContext->startFastElement( nElementToken, xAttr );
}
}
}
catch( Exception& e )
{
- maSavedException <<= e;
+ rEntity.maSavedException <<= e;
}
}
void FastSaxParser::callbackEndElement( const XML_Char* )
{
- OSL_ENSURE( !maContextStack.empty(), "FastSaxParser::callbackEndElement - no context" );
- if( !maContextStack.empty() )
+ Entity& rEntity = getEntity();
+ OSL_ENSURE( !rEntity.maContextStack.empty(), "FastSaxParser::callbackEndElement - no context" );
+ if( !rEntity.maContextStack.empty() )
{
- SaxContextImplPtr pContext( maContextStack.top() );
+ SaxContextImplPtr pContext = rEntity.maContextStack.top();
const Reference< XFastContextHandler >& xContext( pContext->mxContext );
if( xContext.is() ) try
{
@@ -836,7 +856,7 @@ void FastSaxParser::callbackEndElement( const XML_Char* )
}
catch( Exception& e )
{
- maSavedException <<= e;
+ rEntity.maSavedException <<= e;
}
popContext();
@@ -846,14 +866,15 @@ void FastSaxParser::callbackEndElement( const XML_Char* )
void FastSaxParser::callbackCharacters( const XML_Char* s, int nLen )
{
- const Reference< XFastContextHandler >& xContext( maContextStack.top()->mxContext );
+ Entity& rEntity = getEntity();
+ const Reference< XFastContextHandler >& xContext( rEntity.maContextStack.top()->mxContext );
if( xContext.is() ) try
{
xContext->characters( OUString( s, nLen, RTL_TEXTENCODING_UTF8 ) );
}
catch( Exception& e )
{
- maSavedException <<= e;
+ rEntity.maSavedException <<= e;
}
}
@@ -863,22 +884,23 @@ int FastSaxParser::callbackExternalEntityRef( XML_Parser parser,
bool bOK = true;
InputSource source;
- struct Entity entity;
+ Entity& rCurrEntity = getEntity();
+ Entity aNewEntity( rCurrEntity );
- if( mxEntityResolver.is() ) try
+ if( rCurrEntity.mxEntityResolver.is() ) try
{
- entity.maStructSource = mxEntityResolver->resolveEntity(
+ aNewEntity.maStructSource = rCurrEntity.mxEntityResolver->resolveEntity(
OUString( publicId, strlen( publicId ), RTL_TEXTENCODING_UTF8 ) ,
OUString( systemId, strlen( systemId ), RTL_TEXTENCODING_UTF8 ) );
}
catch( SAXParseException & e )
{
- maSavedException <<= e;
+ rCurrEntity.maSavedException <<= e;
bOK = false;
}
catch( SAXException & e )
{
- maSavedException <<= SAXParseException(
+ rCurrEntity.maSavedException <<= SAXParseException(
e.Message, e.Context, e.WrappedException,
mxDocumentLocator->getPublicId(),
mxDocumentLocator->getSystemId(),
@@ -887,43 +909,42 @@ int FastSaxParser::callbackExternalEntityRef( XML_Parser parser,
bOK = false;
}
- if( entity.maStructSource.aInputStream.is() )
+ if( aNewEntity.maStructSource.aInputStream.is() )
{
- entity.mpParser = XML_ExternalEntityParserCreate( parser, context, 0 );
- if( ! entity.mpParser )
+ aNewEntity.mpParser = XML_ExternalEntityParserCreate( parser, context, 0 );
+ if( !aNewEntity.mpParser )
{
return false;
}
- entity.maConverter.setInputStream( entity.maStructSource.aInputStream );
- pushEntity( entity );
+ aNewEntity.maConverter.setInputStream( aNewEntity.maStructSource.aInputStream );
+ pushEntity( aNewEntity );
try
{
parse();
}
catch( SAXParseException & e )
{
- maSavedException <<= e;
+ rCurrEntity.maSavedException <<= e;
bOK = false;
}
catch( IOException &e )
{
SAXException aEx;
aEx.WrappedException <<= e;
- maSavedException <<= aEx;
+ rCurrEntity.maSavedException <<= aEx;
bOK = false;
}
catch( RuntimeException &e )
{
SAXException aEx;
aEx.WrappedException <<= e;
- maSavedException <<= aEx;
+ rCurrEntity.maSavedException <<= aEx;
bOK = false;
}
popEntity();
-
- XML_ParserFree( entity.mpParser );
+ XML_ParserFree( aNewEntity.mpParser );
}
return bOK;
diff --git a/sax/source/fastparser/fastparser.hxx b/sax/source/fastparser/fastparser.hxx
index 3d494a6d3c81..a0331fe4035a 100644
--- a/sax/source/fastparser/fastparser.hxx
+++ b/sax/source/fastparser/fastparser.hxx
@@ -47,25 +47,51 @@
#define PARSER_IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.FastParser"
#define PARSER_SERVICE_NAME "com.sun.star.xml.sax.FastParser"
-namespace sax_fastparser
+namespace sax_fastparser {
+
+class FastLocatorImpl;
+struct NamespaceDefine;
+struct SaxContextImpl;
+
+typedef ::boost::shared_ptr< SaxContextImpl > SaxContextImplPtr;
+typedef ::boost::shared_ptr< NamespaceDefine > NamespaceDefineRef;
+
+typedef ::std::hash_map< ::rtl::OUString, sal_Int32,
+ ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > NamespaceMap;
+
+// --------------------------------------------------------------------
+
+struct ParserData
{
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastDocumentHandler > mxDocumentHandler;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XErrorHandler > mxErrorHandler;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XEntityResolver > mxEntityResolver;
+ ::com::sun::star::lang::Locale maLocale;
- class FastLocatorImpl;
- struct NamespaceDefine;
- struct SaxContextImpl;
- typedef boost::shared_ptr< SaxContextImpl > SaxContextImplPtr;
- typedef ::std::hash_map< ::rtl::OUString, sal_Int32,
- ::rtl::OUStringHash, ::std::equal_to< ::rtl::OUString >
- > NamespaceMap;
+ ParserData();
+ ~ParserData();
+};
// --------------------------------------------------------------------
-// Entity binds all information neede for a single file
-struct Entity
+// Entity binds all information needed for a single file
+struct Entity : public ParserData
{
- ::com::sun::star::xml::sax::InputSource maStructSource;
- XML_Parser mpParser;
- sax_expatwrap::XMLFile2UTFConverter maConverter;
+ ::com::sun::star::xml::sax::InputSource maStructSource;
+ XML_Parser mpParser;
+ ::sax_expatwrap::XMLFile2UTFConverter maConverter;
+ ::rtl::Reference< FastAttributeList > mxAttributes;
+
+ // Exceptions cannot be thrown through the C-XmlParser (possible resource leaks),
+ // therefore the exception must be saved somewhere.
+ ::com::sun::star::uno::Any maSavedException;
+
+ ::std::stack< SaxContextImplPtr > maContextStack;
+ ::std::vector< NamespaceDefineRef > maNamespaceDefines;
+
+ explicit Entity( const ParserData& rData );
+ ~Entity();
};
// --------------------------------------------------------------------
@@ -75,7 +101,7 @@ class FastSaxParser : public ::cppu::WeakImplHelper2< ::com::sun::star::xml::sax
{
public:
FastSaxParser();
- ~FastSaxParser();
+ virtual ~FastSaxParser();
// The implementation details
static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static(void);
@@ -100,9 +126,9 @@ public:
void callbackCharacters( const XML_Char* s, int nLen );
int callbackExternalEntityRef( XML_Parser parser, const XML_Char *openEntityNames, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId);
- void pushEntity( const struct Entity &entity ) { vecEntity.push_back( entity ); }
- void popEntity() { vecEntity.pop_back( ); }
- struct Entity &getEntity() { return vecEntity.back(); }
+ inline void pushEntity( const Entity& rEntity ) { maEntities.push( rEntity ); }
+ inline void popEntity() { maEntities.pop(); }
+ Entity& getEntity() { return maEntities.top(); }
private:
void parse();
@@ -126,26 +152,11 @@ private:
private:
::osl::Mutex maMutex;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastDocumentHandler > mxDocumentHandler;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastTokenHandler > mxTokenHandler;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XErrorHandler > mxErrorHandler;
- ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XEntityResolver > mxEntityResolver;
-
- rtl::Reference < FastLocatorImpl > mxDocumentLocator;
- rtl::Reference < FastAttributeList > mxAttributes;
-
- // External entity stack
- std::vector< struct Entity > vecEntity;
-
- // Exceptions cannot be thrown through the C-XmlParser (possible resource leaks),
- // therefore the exception must be saved somewhere.
- ::com::sun::star::uno::Any maSavedException;
-
- ::com::sun::star::lang::Locale maLocale;
+ ::rtl::Reference< FastLocatorImpl > mxDocumentLocator;
+ NamespaceMap maNamespaceMap;
- std::stack< SaxContextImplPtr > maContextStack;
- std::vector< boost::shared_ptr< NamespaceDefine > > maNamespaceDefines;
- NamespaceMap maNamespaceMap;
+ ParserData maData; /// Cached parser configuration for next call of parseStream().
+ ::std::stack< Entity > maEntities; /// Entity stack for each call of parseStream().
};
}
diff --git a/sc/inc/AccessibleFilterTopWindow.hxx b/sc/inc/AccessibleFilterTopWindow.hxx
index 7d01317c6b8d..55fcb503f51b 100644
--- a/sc/inc/AccessibleFilterTopWindow.hxx
+++ b/sc/inc/AccessibleFilterTopWindow.hxx
@@ -58,9 +58,6 @@ public:
// Non-UNO Methods
- ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >
- getAccessibleChildMenu();
-
enum ChildControlType {
LISTBOX, TOGGLE_ALL, SINGLE_ON_BTN, SINGLE_OFF_BTN, OK_BTN, CANCEL_BTN
};
diff --git a/sc/inc/ViewSettingsSequenceDefines.hxx b/sc/inc/ViewSettingsSequenceDefines.hxx
index 9e787ea590fe..f23229d31a43 100644
--- a/sc/inc/ViewSettingsSequenceDefines.hxx
+++ b/sc/inc/ViewSettingsSequenceDefines.hxx
@@ -61,7 +61,7 @@
// this are the defines for the position of the settings in the
// TableViewSettingsSequence
-#define SC_TABLE_VIEWSETTINGS_COUNT 14
+#define SC_TABLE_VIEWSETTINGS_COUNT 15
#define SC_CURSOR_X 0
#define SC_CURSOR_Y 1
@@ -77,6 +77,7 @@
#define SC_TABLE_ZOOM_TYPE 11
#define SC_TABLE_ZOOM_VALUE 12
#define SC_TABLE_PAGE_VIEW_ZOOM_VALUE 13
+#define SC_TABLE_TAB_BG_COLOR 14
#define SC_CURSORPOSITIONX "CursorPositionX"
#define SC_CURSORPOSITIONY "CursorPositionY"
diff --git a/sc/inc/address.hxx b/sc/inc/address.hxx
index 3eef919e2f1b..c5d49632292e 100644
--- a/sc/inc/address.hxx
+++ b/sc/inc/address.hxx
@@ -82,9 +82,10 @@ const SCSIZE SCSIZE_MAX = ::std::numeric_limits<SCSIZE>::max();
// A define to handle critical sections we hopefully don't need very often.
#define SC_ROWLIMIT_MORE_THAN_32K 1 /* set to 1 if we throw the switch */
-// The maximum values. Defines are needed for preprocessor checks in
-// bcaslot.cxx, otherwise type safe constants are preferred.
-#define MAXROWCOUNT_DEFINE 65536
+// The maximum values. Defines are needed for preprocessor checks, for example
+// in bcaslot.cxx, otherwise type safe constants are preferred.
+//#define MAXROWCOUNT_DEFINE 65536
+#define MAXROWCOUNT_DEFINE 1048576
#define MAXCOLCOUNT_DEFINE 1024
// Count values
@@ -123,7 +124,11 @@ const SCROW SCROW_REPEAT_NONE = SCROW_MAX;
// #if SC_ROWLIMIT_MORE_THAN_64K
// #error row limit 64k
// #endif
-#define SC_ROWLIMIT_MORE_THAN_64K 0 /* set to 1 if we throw the switch */
+#if MAXROWCOUNT_DEFINE > 65536
+#define SC_ROWLIMIT_MORE_THAN_64K 1
+#else
+#define SC_ROWLIMIT_MORE_THAN_64K 0
+#endif
const SCROW SCROWS64K = 65536;
// === old stuff defines =====================================================
diff --git a/sc/inc/attarray.hxx b/sc/inc/attarray.hxx
index c82d607577bf..11b21bab0162 100644
--- a/sc/inc/attarray.hxx
+++ b/sc/inc/attarray.hxx
@@ -35,6 +35,7 @@ class ScDocument;
class ScMarkArray;
class ScPatternAttr;
class ScStyleSheet;
+class ScFlatBoolRowSegments;
class Rectangle;
class SfxItemPoolCache;
@@ -154,7 +155,7 @@ public:
BOOL bRefresh, BOOL bAttrs );
BOOL RemoveAreaMerge( SCROW nStartRow, SCROW nEndRow );
- void FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, BOOL* pUsed, BOOL bReset );
+ void FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, ScFlatBoolRowSegments& rUsedRows, bool bReset );
BOOL IsStyleSheetUsed( const ScStyleSheet& rStyle, BOOL bGatherAllStyles ) const;
void DeleteAreaSafe(SCROW nStartRow, SCROW nEndRow);
diff --git a/sc/inc/cellsuno.hxx b/sc/inc/cellsuno.hxx
index 13469b110455..a53f167b164a 100644
--- a/sc/inc/cellsuno.hxx
+++ b/sc/inc/cellsuno.hxx
@@ -90,6 +90,7 @@
#include <com/sun/star/document/XActionLockable.hpp>
#include <com/sun/star/beans/XTolerantMultiPropertySet.hpp>
#include <com/sun/star/sheet/XExternalSheetName.hpp>
+#include <com/sun/star/document/XEventsSupplier.hpp>
#include <cppuhelper/implbase2.hxx>
#include <cppuhelper/implbase3.hxx>
@@ -1002,7 +1003,8 @@ class ScTableSheetObj : public ScCellRangeObj,
public com::sun::star::util::XProtectable,
public com::sun::star::sheet::XScenario,
public com::sun::star::sheet::XScenarioEnhanced,
- public com::sun::star::sheet::XExternalSheetName
+ public com::sun::star::sheet::XExternalSheetName,
+ public com::sun::star::document::XEventsSupplier
{
friend class ScTableSheetsObj; // fuer insertByName()
@@ -1207,6 +1209,10 @@ public:
throw (::com::sun::star::container::ElementExistException,
::com::sun::star::uno::RuntimeException);
+ // XEventsSupplier
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameReplace > SAL_CALL getEvents()
+ throw (::com::sun::star::uno::RuntimeException);
+
// XPropertySet ueberladen wegen Sheet-Properties
virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >
SAL_CALL getPropertySetInfo()
diff --git a/sc/inc/chartuno.hxx b/sc/inc/chartuno.hxx
index 795d655f3d06..fe261f26e517 100644
--- a/sc/inc/chartuno.hxx
+++ b/sc/inc/chartuno.hxx
@@ -31,6 +31,8 @@
#include "address.hxx"
#include <svl/lstner.hxx>
#include <tools/string.hxx>
+#include <comphelper/proparrhlp.hxx>
+#include <comphelper/propertycontainer.hxx>
#include <com/sun/star/table/XTableChart.hpp>
#include <com/sun/star/table/XTableCharts.hpp>
@@ -39,6 +41,7 @@
#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/container/XNamed.hpp>
+#include <cppuhelper/compbase4.hxx>
#include <cppuhelper/implbase4.hxx>
@@ -113,12 +116,20 @@ public:
};
-class ScChartObj : public cppu::WeakImplHelper4<
- com::sun::star::table::XTableChart,
- com::sun::star::document::XEmbeddedObjectSupplier,
- com::sun::star::container::XNamed,
- com::sun::star::lang::XServiceInfo >,
- public SfxListener
+typedef ::cppu::WeakComponentImplHelper4<
+ ::com::sun::star::table::XTableChart,
+ ::com::sun::star::document::XEmbeddedObjectSupplier,
+ ::com::sun::star::container::XNamed,
+ ::com::sun::star::lang::XServiceInfo > ScChartObj_Base;
+
+typedef ::comphelper::OPropertyContainer ScChartObj_PBase;
+typedef ::comphelper::OPropertyArrayUsageHelper< ScChartObj > ScChartObj_PABase;
+
+class ScChartObj : public ::comphelper::OBaseMutex
+ ,public ScChartObj_Base
+ ,public ScChartObj_PBase
+ ,public ScChartObj_PABase
+ ,public SfxListener
{
private:
ScDocShell* pDocShell;
@@ -128,12 +139,32 @@ private:
void Update_Impl( const ScRangeListRef& rRanges, bool bColHeaders, bool bRowHeaders );
void GetData_Impl( ScRangeListRef& rRanges, bool& rColHeaders, bool& rRowHeaders ) const;
+protected:
+ // ::comphelper::OPropertySetHelper
+ virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();
+ 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;
+ virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
+
+ // ::comphelper::OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const;
+
public:
ScChartObj(ScDocShell* pDocSh, SCTAB nT, const String& rN);
virtual ~ScChartObj();
virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+ // XInterface
+ DECLARE_XINTERFACE()
+
+ // XTypeProvider
+ DECLARE_XTYPEPROVIDER()
+
+ // XComponent
+ virtual void SAL_CALL disposing();
+
// XTableChart
virtual sal_Bool SAL_CALL getHasColumnHeaders() throw(::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL setHasColumnHeaders( sal_Bool bHasColumnHeaders )
@@ -163,6 +194,10 @@ public:
throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
throw(::com::sun::star::uno::RuntimeException);
+
+ // XPropertySet
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo()
+ throw (::com::sun::star::uno::RuntimeException);
};
#endif
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index 503f0975c5c9..af6292bbd830 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -30,7 +30,6 @@
#include "markarr.hxx"
#include "global.hxx"
-#include "compressedarray.hxx"
#include "address.hxx"
#include "rangenam.hxx"
#include <tools/solar.h>
@@ -65,7 +64,7 @@ class ScPostIt;
struct ScFunctionData;
struct ScLineFlags;
struct ScMergePatternState;
-
+class ScFlatBoolRowSegments;
#define COLUMN_DELTA 4
@@ -209,10 +208,10 @@ public:
// UpdateSelectionFunction: Mehrfachselektion
void UpdateSelectionFunction( const ScMarkData& rMark,
ScFunctionData& rData,
- const ScBitMaskCompressedArray< SCROW, BYTE>* pRowFlags,
+ ScFlatBoolRowSegments& rHiddenRows,
BOOL bDoExclude, SCROW nExStartRow, SCROW nExEndRow );
void UpdateAreaFunction( ScFunctionData& rData,
- const ScBitMaskCompressedArray< SCROW, BYTE>* pRowFlags,
+ ScFlatBoolRowSegments& rHiddenRows,
SCROW nStartRow, SCROW nEndRow );
void CopyToColumn(SCROW nRow1, SCROW nRow2, USHORT nFlags, BOOL bMarked,
@@ -329,7 +328,7 @@ public:
const ScStyleSheet* GetSelectionStyle( const ScMarkData& rMark, BOOL& rFound ) const;
const ScStyleSheet* GetAreaStyle( BOOL& rFound, SCROW nRow1, SCROW nRow2 ) const;
- void FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, BOOL* pUsed, BOOL bReset );
+ void FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, ScFlatBoolRowSegments& rUsedRows, bool bReset );
BOOL IsStyleSheetUsed( const ScStyleSheet& rStyle, BOOL bGatherAllStyles ) const;
/// May return -1 if not found
diff --git a/sc/inc/convuno.hxx b/sc/inc/convuno.hxx
index 135ac055b2fe..0f93d6d6de0d 100644
--- a/sc/inc/convuno.hxx
+++ b/sc/inc/convuno.hxx
@@ -28,6 +28,7 @@
#ifndef SC_CONVUNO_HXX
#define SC_CONVUNO_HXX
+#include <algorithm>
#include <i18npool/lang.h>
#include <com/sun/star/table/CellAddress.hpp>
#include <com/sun/star/table/CellRangeAddress.hpp>
@@ -70,6 +71,19 @@ public:
static inline void FillApiEndAddress(
::com::sun::star::table::CellAddress& rApiAddress,
const ::com::sun::star::table::CellRangeAddress& rApiRange );
+
+ /** Returns true, if the passed ranges have at least one common cell. */
+ static inline bool Intersects(
+ const ::com::sun::star::table::CellRangeAddress& rApiARange1,
+ const ::com::sun::star::table::CellRangeAddress& rApiARange2 );
+ /** Returns true, if the passed address rApiInner is inside the passed range rApiOuter. */
+ static inline bool Contains(
+ const ::com::sun::star::table::CellRangeAddress& rApiOuter,
+ const ::com::sun::star::table::CellAddress& rApiInner );
+ /** Returns true, if the passed range rApiInner is completely inside the passed range rApiOuter. */
+ static inline bool Contains(
+ const ::com::sun::star::table::CellRangeAddress& rApiOuter,
+ const ::com::sun::star::table::CellRangeAddress& rApiInner );
};
@@ -135,6 +149,33 @@ inline void ScUnoConversion::FillApiEndAddress(
rApiAddress.Sheet = rApiRange.Sheet;
}
+inline bool ScUnoConversion::Intersects(
+ const ::com::sun::star::table::CellRangeAddress& rApiRange1,
+ const ::com::sun::star::table::CellRangeAddress& rApiRange2 )
+{
+ return (rApiRange1.Sheet == rApiRange2.Sheet) &&
+ (::std::max( rApiRange1.StartColumn, rApiRange2.StartColumn ) <= ::std::min( rApiRange1.EndColumn, rApiRange2.EndColumn )) &&
+ (::std::max( rApiRange1.StartRow, rApiRange2.StartRow ) <= ::std::min( rApiRange1.EndRow, rApiRange2.EndRow ));
+}
+
+inline bool ScUnoConversion::Contains(
+ const ::com::sun::star::table::CellRangeAddress& rApiOuter,
+ const ::com::sun::star::table::CellAddress& rApiInner )
+{
+ return (rApiOuter.Sheet == rApiInner.Sheet) &&
+ (rApiOuter.StartColumn <= rApiInner.Column) && (rApiInner.Column <= rApiOuter.EndColumn) &&
+ (rApiOuter.StartRow <= rApiInner.Row) && (rApiInner.Row <= rApiOuter.EndRow);
+}
+
+inline bool ScUnoConversion::Contains(
+ const ::com::sun::star::table::CellRangeAddress& rApiOuter,
+ const ::com::sun::star::table::CellRangeAddress& rApiInner )
+{
+ return (rApiOuter.Sheet == rApiInner.Sheet) &&
+ (rApiOuter.StartColumn <= rApiInner.StartColumn) && (rApiInner.EndColumn <= rApiOuter.EndColumn) &&
+ (rApiOuter.StartRow <= rApiInner.StartRow) && (rApiInner.EndRow <= rApiOuter.EndRow);
+}
+
//___________________________________________________________________
inline sal_Bool operator==(
diff --git a/sc/inc/dociter.hxx b/sc/inc/dociter.hxx
index dd1d18e49a51..d995550a2f1d 100644
--- a/sc/inc/dociter.hxx
+++ b/sc/inc/dociter.hxx
@@ -36,6 +36,8 @@
#include <memory>
+#include <set>
+
class ScDocument;
class ScBaseCell;
class ScPatternAttr;
@@ -206,8 +208,6 @@ private:
::std::auto_ptr<ScDBQueryParamBase> mpParam;
::std::auto_ptr<DataAccess> mpData;
- bool GetThis(Value& rValue);
-
public:
ScDBQueryDataIterator(ScDocument* pDocument, ScDBQueryParamBase* pParam);
/// Does NOT reset rValue if no value found!
@@ -305,7 +305,6 @@ public:
ScBaseCell* GetNext();
SCCOL GetCol() { return nCol; }
SCROW GetRow() { return nRow; }
- ULONG GetNumberFormat();
// setzt alle Entry.nField einen weiter, wenn Spalte
// wechselt, fuer ScInterpreter ScHLookup()
@@ -514,6 +513,23 @@ public:
const ScBaseCell* GetCell() const { return pFoundCell; }
};
+// ============================================================================
+
+class ScRowBreakIterator
+{
+public:
+ static SCROW NOT_FOUND;
+
+ explicit ScRowBreakIterator(::std::set<SCROW>& rBreaks);
+ SCROW first();
+ SCROW next();
+
+private:
+ ::std::set<SCROW>& mrBreaks;
+ ::std::set<SCROW>::const_iterator maItr;
+ ::std::set<SCROW>::const_iterator maEnd;
+};
+
#endif
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 768dc815a482..f7ae5e63f165 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -44,6 +44,7 @@
#include <memory>
#include <map>
+#include <set>
// Wang Xu Ming -- 2009-8-17
// DataPilot Migration - Cache&&Performance
@@ -144,6 +145,7 @@ class SfxUndoManager;
class ScFormulaParserPool;
struct ScClipParam;
struct ScClipRangeNameData;
+class ScRowBreakIterator;
namespace com { namespace sun { namespace star {
namespace lang {
@@ -159,6 +161,9 @@ namespace com { namespace sun { namespace star {
namespace embed {
class XEmbeddedObject;
}
+ namespace sheet {
+ struct TablePageBreakData;
+ }
} } }
#include <svl/zforlist.hxx>
@@ -381,12 +386,12 @@ private:
// kein Broadcast, keine Listener aufbauen waehrend aus einem anderen
// Doc (per Filter o.ae.) inserted wird, erst bei CompileAll / CalcAfterLoad
BOOL bInsertingFromOtherDoc;
- BOOL bImportingXML; // special handling of formula text
+ bool bLoadingMedium;
+ bool bImportingXML; // special handling of formula text
BOOL bXMLFromWrapper; // distinguish ScXMLImportWrapper from external component
BOOL bCalcingAfterLoad; // in CalcAfterLoad TRUE
// wenn temporaer keine Listener auf/abgebaut werden sollen
BOOL bNoListening;
- BOOL bLoadingDone;
BOOL bIdleDisabled;
BOOL bInLinkUpdate; // TableLink or AreaLink
BOOL bChartListenerCollectionNeedsUpdate;
@@ -428,8 +433,6 @@ private:
sal_Int16 mnNamedRangesLockCount;
- inline BOOL RowHidden( SCROW nRow, SCTAB nTab ); // FillInfo
-
public:
SC_DLLPUBLIC ULONG GetCellCount() const; // alle Zellen
SCSIZE GetCellCount(SCTAB nTab, SCCOL nCol) const;
@@ -616,6 +619,9 @@ public:
Color& rColor, USHORT& rFlags ) const;
SC_DLLPUBLIC void SetScenarioData( SCTAB nTab, const String& rComment,
const Color& rColor, USHORT nFlags );
+ SC_DLLPUBLIC Color GetTabBgColor( SCTAB nTab ) const;
+ SC_DLLPUBLIC void SetTabBgColor( SCTAB nTab, const Color& rColor );
+ SC_DLLPUBLIC bool IsDefaultTabBgColor( SCTAB nTab ) const;
void GetScenarioFlags( SCTAB nTab, USHORT& rFlags ) const;
SC_DLLPUBLIC BOOL IsActiveScenario( SCTAB nTab ) const;
SC_DLLPUBLIC void SetActiveScenario( SCTAB nTab, BOOL bActive ); // nur fuer Undo etc.
@@ -731,6 +737,14 @@ public:
BOOL HasBackgroundDraw( SCTAB nTab, const Rectangle& rMMRect );
BOOL HasAnyDraw( SCTAB nTab, const Rectangle& rMMRect );
+ const ScSheetEvents* GetSheetEvents( SCTAB nTab ) const;
+ void SetSheetEvents( SCTAB nTab, const ScSheetEvents* pNew );
+ bool HasSheetEventScript( sal_Int32 nEvent ) const; // on any sheet
+
+ BOOL HasCalcNotification( SCTAB nTab ) const;
+ void SetCalcNotification( SCTAB nTab );
+ void ResetCalcNotifications();
+
SC_DLLPUBLIC ScOutlineTable* GetOutlineTable( SCTAB nTab, BOOL bCreate = FALSE );
BOOL SetOutlineTable( SCTAB nTab, const ScOutlineTable* pNewOutline );
@@ -917,12 +931,17 @@ public:
SCROW& rEndRow, BOOL bNotes = TRUE ) const;
void InvalidateTableArea();
+
SC_DLLPUBLIC BOOL GetDataStart( SCTAB nTab, SCCOL& rStartCol, SCROW& rStartRow ) const;
+ /**
+ * Find the maximum column position that contains printable data for the
+ * specified row range. The final column position must be equal or less
+ * than the initial value of rEndCol.
+ */
void ExtendPrintArea( OutputDevice* pDev, SCTAB nTab,
SCCOL nStartCol, SCROW nStartRow,
SCCOL& rEndCol, SCROW nEndRow );
-
SC_DLLPUBLIC SCSIZE GetEmptyLinesInBlock( SCCOL nStartCol, SCROW nStartRow, SCTAB nStartTab,
SCCOL nEndCol, SCROW nEndRow, SCTAB nEndTab,
ScDirection eDir );
@@ -1246,19 +1265,20 @@ public:
void DeleteSelection( USHORT nDelFlag, const ScMarkData& rMark );
void DeleteSelectionTab( SCTAB nTab, USHORT nDelFlag, const ScMarkData& rMark );
- //
-
SC_DLLPUBLIC void SetColWidth( SCCOL nCol, SCTAB nTab, USHORT nNewWidth );
SC_DLLPUBLIC void SetRowHeight( SCROW nRow, SCTAB nTab, USHORT nNewHeight );
SC_DLLPUBLIC void SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, SCTAB nTab,
USHORT nNewHeight );
- void SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bManual );
+
+ SC_DLLPUBLIC void SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, SCTAB nTab,
+ USHORT nNewHeight );
+ void SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bManual );
SC_DLLPUBLIC USHORT GetColWidth( SCCOL nCol, SCTAB nTab ) const;
- SC_DLLPUBLIC USHORT GetRowHeight( SCROW nRow, SCTAB nTab ) const;
+ SC_DLLPUBLIC USHORT GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero = true ) const;
SC_DLLPUBLIC ULONG GetRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab ) const;
- ULONG GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, double fScale ) const;
- SC_DLLPUBLIC const ScSummableCompressedArray< SCROW, USHORT> & GetRowHeightArray( SCTAB nTab ) const;
+ SCROW GetRowForHeight( SCTAB nTab, ULONG nHeight ) const;
+ ULONG GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, double fScale ) const;
SC_DLLPUBLIC ULONG GetColOffset( SCCOL nCol, SCTAB nTab ) const;
SC_DLLPUBLIC ULONG GetRowOffset( SCROW nRow, SCTAB nTab ) const;
@@ -1267,22 +1287,6 @@ public:
USHORT GetCommonWidth( SCCOL nEndCol, SCTAB nTab ) const;
- // All FastGet...() methods have no check for valid nTab!
- // They access ScCompressedArray objects, so using the
- // single row taking ones in loops to access a sequence of
- // single rows is no good idea! Use specialized range
- // taking methods instead, or iterators.
- SC_DLLPUBLIC ULONG FastGetRowHeight( SCROW nStartRow, SCROW nEndRow,
- SCTAB nTab ) const;
- inline ULONG FastGetScaledRowHeight( SCROW nStartRow, SCROW nEndRow,
- SCTAB nTab, double fScale ) const;
- SC_DLLPUBLIC inline USHORT FastGetRowHeight( SCROW nRow, SCTAB nTab ) const;
- inline SCROW FastGetRowForHeight( SCTAB nTab, ULONG nHeight ) const;
- inline SCROW FastGetFirstNonHiddenRow( SCROW nStartRow, SCTAB nTab ) const;
- /** No check for flags whether row is hidden, height value
- is returned unconditionally. */
- inline USHORT FastGetOriginalRowHeight( SCROW nRow, SCTAB nTab ) const;
-
SCROW GetHiddenRowCount( SCROW nRow, SCTAB nTab ) const;
USHORT GetOptimalColWidth( SCCOL nCol, SCTAB nTab, OutputDevice* pDev,
@@ -1319,6 +1323,44 @@ public:
SC_DLLPUBLIC const ScBitMaskCompressedArray< SCROW, BYTE> & GetRowFlagsArray( SCTAB nTab ) const;
SC_DLLPUBLIC ScBitMaskCompressedArray< SCROW, BYTE> & GetRowFlagsArrayModifiable( SCTAB nTab );
+ SC_DLLPUBLIC void GetAllRowBreaks(::std::set<SCROW>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const;
+ SC_DLLPUBLIC void GetAllColBreaks(::std::set<SCCOL>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const;
+ SC_DLLPUBLIC ScBreakType HasRowBreak(SCROW nRow, SCTAB nTab) const;
+ SC_DLLPUBLIC ScBreakType HasColBreak(SCCOL nCol, SCTAB nTab) const;
+ SC_DLLPUBLIC void SetRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual);
+ SC_DLLPUBLIC void SetColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual);
+ void RemoveRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual);
+ void RemoveColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual);
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::sheet::TablePageBreakData> GetRowBreakData(SCTAB nTab) const;
+
+ SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL);
+ SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW& rLastRow);
+ SC_DLLPUBLIC bool HasHiddenRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+ SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL& rLastCol);
+ SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL);
+ SC_DLLPUBLIC void SetRowHidden(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bHidden);
+ SC_DLLPUBLIC void SetColHidden(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bHidden);
+ SC_DLLPUBLIC SCROW FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+ SC_DLLPUBLIC SCROW LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+ SCROW CountVisibleRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+
+ bool RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL);
+ bool HasFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+ bool ColFiltered(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL);
+ SC_DLLPUBLIC void SetRowFiltered(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bFiltered);
+ SC_DLLPUBLIC void SetColFiltered(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bFiltered);
+ SCROW FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+ SCROW LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+ SCROW CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab);
+
+ /**
+ * Write all column row flags to table's flag data, because not all column
+ * row attributes are stored in the flag data members. This is necessary
+ * for ods export.
+ */
+ void SyncColRowFlags();
+
/// @return the index of the last row with any set flags (auto-pagebreak is ignored).
SC_DLLPUBLIC SCROW GetLastFlaggedRow( SCTAB nTab ) const;
@@ -1340,8 +1382,6 @@ public:
BOOL GetColDefault( SCTAB nTab, SCCOL nCol, SCROW nLastRow, SCROW& nDefault);
BOOL GetRowDefault( SCTAB nTab, SCROW nRow, SCCOL nLastCol, SCCOL& nDefault);
- BOOL IsFiltered( SCROW nRow, SCTAB nTab ) const;
-
BOOL UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, BOOL bShow );
BOOL UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bShow );
@@ -1358,6 +1398,7 @@ public:
Size GetPageSize( SCTAB nTab ) const;
void SetPageSize( SCTAB nTab, const Size& rSize );
void SetRepeatArea( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCROW nEndRow );
+ void InvalidatePageBreaks(SCTAB nTab);
void UpdatePageBreaks( SCTAB nTab, const ScRange* pUserArea = NULL );
void RemoveManualBreaks( SCTAB nTab );
BOOL HasManualBreaks( SCTAB nTab ) const;
@@ -1454,8 +1495,6 @@ public:
void DoColResize( SCTAB nTab, SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd );
- // Idleberechnung der OutputDevice-Zelltextbreite
- BOOL IsLoadingDone() const { return bLoadingDone; }
void InvalidateTextWidth( const String& rStyleName );
void InvalidateTextWidth( SCTAB nTab );
void InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress* pAdrTo, BOOL bNumFormatChanged );
@@ -1492,8 +1531,9 @@ public:
BOOL GetNoSetDirty() const { return bNoSetDirty; }
void SetInsertingFromOtherDoc( BOOL bVal ) { bInsertingFromOtherDoc = bVal; }
BOOL IsInsertingFromOtherDoc() const { return bInsertingFromOtherDoc; }
- void SetImportingXML( BOOL bVal );
- BOOL IsImportingXML() const { return bImportingXML; }
+ void SetLoadingMedium( bool bVal );
+ void SetImportingXML( bool bVal );
+ bool IsImportingXML() const { return bImportingXML; }
void SetXMLFromWrapper( BOOL bVal );
BOOL IsXMLFromWrapper() const { return bXMLFromWrapper; }
void SetCalcingAfterLoad( BOOL bVal ) { bCalcingAfterLoad = bVal; }
@@ -1750,6 +1790,7 @@ public:
SfxUndoManager* GetUndoManager();
bool IsInVBAMode() const;
+ ScRowBreakIterator* GetRowBreakIterator(SCTAB nTab) const;
private: // CLOOK-Impl-Methoden
@@ -1812,53 +1853,6 @@ inline void ScDocument::SetSortParam( ScSortParam& rParam, SCTAB nTab )
mSheetSortParams[ nTab ] = rParam;
}
-
-inline ULONG ScDocument::FastGetScaledRowHeight( SCROW nStartRow, SCROW nEndRow,
- SCTAB nTab, double fScale ) const
-{
- return pTab[nTab]->pRowFlags->SumScaledCoupledArrayForCondition( nStartRow,
- nEndRow, CR_HIDDEN, 0, *(pTab[nTab]->pRowHeight), fScale);
-}
-
-inline USHORT ScDocument::FastGetRowHeight( SCROW nRow, SCTAB nTab ) const
-{
- return ( pTab[nTab]->pRowFlags->GetValue(nRow) & CR_HIDDEN ) ? 0 :
- pTab[nTab]->pRowHeight->GetValue(nRow);
-}
-
-inline SCROW ScDocument::FastGetRowForHeight( SCTAB nTab, ULONG nHeight ) const
-{
- ScCoupledCompressedArrayIterator< SCROW, BYTE, USHORT> aIter(
- *(pTab[nTab]->pRowFlags), 0, MAXROW, CR_HIDDEN, 0,
- *(pTab[nTab]->pRowHeight));
- ULONG nSum = 0;
- for ( ; aIter; aIter.NextRange() )
- {
- ULONG nNew = *aIter * (aIter.GetRangeEnd() - aIter.GetRangeStart() + 1);
- if (nSum + nNew > nHeight)
- {
- for ( ; aIter && nSum <= nHeight; ++aIter )
- {
- nSum += *aIter;
- }
- return aIter.GetPos();
- }
- nSum += nNew;
- }
- return aIter.GetPos();
-}
-
-inline SCROW ScDocument::FastGetFirstNonHiddenRow( SCROW nStartRow, SCTAB nTab) const
-{
- return pTab[nTab]->pRowFlags->GetFirstForCondition( nStartRow, MAXROW,
- CR_HIDDEN, 0);
-}
-
-inline USHORT ScDocument::FastGetOriginalRowHeight( SCROW nRow, SCTAB nTab ) const
-{
- return pTab[nTab]->pRowHeight->GetValue(nRow);
-}
-
#endif
diff --git a/sc/inc/docuno.hxx b/sc/inc/docuno.hxx
index 15a0c5e72359..14c9515dfacb 100644
--- a/sc/inc/docuno.hxx
+++ b/sc/inc/docuno.hxx
@@ -112,9 +112,9 @@ private:
const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& rOptions,
ScMarkData& rMark, ScPrintSelectionStatus& rStatus, String& rPagesStr ) const;
com::sun::star::uno::Reference<com::sun::star::uno::XAggregation> GetFormatter();
+ void HandleCalculateEvents();
rtl::OUString maBuildId;
- sal_Int32 mnXlsWriteProtPass;
protected:
const SfxItemPropertySet& GetPropertySet() const { return aPropSet; }
diff --git a/sc/inc/dpobject.hxx b/sc/inc/dpobject.hxx
index 65e89ec75d41..44aa1daa9a92 100644
--- a/sc/inc/dpobject.hxx
+++ b/sc/inc/dpobject.hxx
@@ -276,6 +276,7 @@ public:
virtual ScDataObject* Clone() const;
ScDPObject* operator[](USHORT nIndex) const {return (ScDPObject*)At(nIndex);}
+ ScDPObject* GetByName(const String& rName) const;
void DeleteOnTab( SCTAB nTab );
void UpdateReference( UpdateRefMode eUpdateRefMode,
diff --git a/sc/inc/eventuno.hxx b/sc/inc/eventuno.hxx
new file mode 100755
index 000000000000..f3ae72f0f1bf
--- /dev/null
+++ b/sc/inc/eventuno.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * 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: sheetdata.hxx,v $
+ * $Revision: 1.16.32.2 $
+ *
+ * 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 SC_EVENTUNO_HXX
+#define SC_EVENTUNO_HXX
+
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/container/XNameReplace.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <svl/lstner.hxx>
+
+#include "global.hxx"
+
+class ScDocShell;
+
+class ScSheetEventsObj : public cppu::WeakImplHelper2<
+ com::sun::star::container::XNameReplace,
+ com::sun::star::lang::XServiceInfo>,
+ public SfxListener
+{
+private:
+ ScDocShell* mpDocShell;
+ SCTAB mnTab;
+
+public:
+ ScSheetEventsObj(ScDocShell* pDocSh, SCTAB nT);
+ virtual ~ScSheetEventsObj();
+
+ virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
+
+ // XNameReplace
+ virtual void SAL_CALL replaceByName( const ::rtl::OUString& aName,
+ const ::com::sun::star::uno::Any& aElement )
+ throw(::com::sun::star::lang::IllegalArgumentException,
+ ::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ // XNameAccess
+ virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw(::com::sun::star::uno::RuntimeException);
+
+ // XElementAccess
+ virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName()
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ throw(::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
+ throw(::com::sun::star::uno::RuntimeException);
+};
+
+#endif
+
diff --git a/sc/inc/funcuno.hxx b/sc/inc/funcuno.hxx
index 3eef9082e26d..4413782a0e2f 100644
--- a/sc/inc/funcuno.hxx
+++ b/sc/inc/funcuno.hxx
@@ -72,7 +72,8 @@ private:
ScTempDocCache aDocCache;
ScDocOptions* pOptions;
SfxItemPropertyMap aPropertyMap;
- BOOL bInvalid;
+ bool mbArray;
+ bool mbValid;
public:
ScFunctionAccess();
diff --git a/sc/inc/global.hxx b/sc/inc/global.hxx
index 23668aa6813d..8178eb4a01d2 100644
--- a/sc/inc/global.hxx
+++ b/sc/inc/global.hxx
@@ -203,13 +203,16 @@ const SCSIZE PIVOT_MAXPAGEFIELD = 10;
// FILTERED und MANUALSIZE nur fuer Zeilen moeglich
const BYTE CR_HIDDEN = 1;
//const BYTE CR_MARKED = 2;
-const BYTE CR_PAGEBREAK = 4;
+//const BYTE CR_PAGEBREAK = 4;
const BYTE CR_MANUALBREAK = 8;
const BYTE CR_FILTERED = 16;
const BYTE CR_MANUALSIZE = 32;
+const BYTE CR_ALL = (CR_HIDDEN | CR_MANUALBREAK | CR_FILTERED | CR_MANUALSIZE);
-// was davon kommt in die Datei:
-#define CR_SAVEMASK ( ~CR_PAGEBREAK )
+typedef BYTE ScBreakType;
+const ScBreakType BREAK_NONE = 0;
+const ScBreakType BREAK_PAGE = 1;
+const ScBreakType BREAK_MANUAL = 2;
// Insert-/Delete-Flags
const USHORT IDF_NONE = 0x0000;
diff --git a/sc/inc/globstr.hrc b/sc/inc/globstr.hrc
index a9c1997f74f5..31934067988a 100644
--- a/sc/inc/globstr.hrc
+++ b/sc/inc/globstr.hrc
@@ -571,9 +571,13 @@
#define STR_STYLE_FAMILY_PAGE 434
#define STR_ERR_DATAPILOTSOURCE 435
-#define STR_PIVOT_FIRSTROWEMPTYERR 436
+#define STR_PIVOT_FIRSTROWEMPTYERR 436
#define STR_PIVOT_ONLYONEROWERR 437
-#define STR_COUNT 438
+
+#define STR_UNDO_SET_TAB_BG_COLOR 438
+#define STR_UNDO_SET_MULTI_TAB_BG_COLOR 439
+
+#define STR_COUNT 440
#endif
diff --git a/sc/inc/olinetab.hxx b/sc/inc/olinetab.hxx
index 3ffc03f4a249..82a49b3ba025 100644
--- a/sc/inc/olinetab.hxx
+++ b/sc/inc/olinetab.hxx
@@ -30,24 +30,24 @@
#include "collect.hxx"
-#include "compressedarray.hxx"
#include "scdllapi.h"
#define SC_OL_MAXDEPTH 7
class SvStream;
+class ScTable;
class ScOutlineEntry : public ScDataObject
{
SCCOLROW nStart;
SCSIZE nSize;
- BOOL bHidden;
- BOOL bVisible;
+ bool bHidden;
+ bool bVisible;
public:
ScOutlineEntry( SCCOLROW nNewStart, SCCOLROW nNewSize,
- BOOL bNewHidden = FALSE );
+ bool bNewHidden = FALSE );
ScOutlineEntry( const ScOutlineEntry& rEntry );
virtual ScDataObject* Clone() const;
@@ -55,14 +55,14 @@ public:
SCCOLROW GetStart() const { return nStart; }
SCSIZE GetSize() const { return nSize; }
SCCOLROW GetEnd() const { return nStart+nSize-1; }
- BOOL IsHidden() const { return bHidden; } // Gruppe versteckt
- BOOL IsVisible() const { return bVisible; } // Control sichtbar?
+ bool IsHidden() const { return bHidden; } // Gruppe versteckt
+ bool IsVisible() const { return bVisible; } // Control sichtbar?
void Move( SCsCOLROW nDelta );
void SetSize( SCSIZE nNewSize );
void SetPosSize( SCCOLROW nNewPos, SCSIZE nNewSize );
- void SetHidden( BOOL bNewHidden );
- void SetVisible( BOOL bNewVisible );
+ void SetHidden( bool bNewHidden );
+ void SetVisible( bool bNewVisible );
};
@@ -123,9 +123,7 @@ public:
void InsertSpace( SCCOLROW nStartPos, SCSIZE nSize );
BOOL DeleteSpace( SCCOLROW nStartPos, SCSIZE nSize );
- BOOL ManualAction( SCCOLROW nStartPos, SCCOLROW nEndPos,
- BOOL bShow,
- const ScBitMaskCompressedArray< SCCOLROW, BYTE>& rHiddenFlags );
+ bool ManualAction( SCCOLROW nStartPos, SCCOLROW nEndPos, bool bShow, ScTable& rTable, bool bCol );
void RemoveAll();
};
diff --git a/sc/inc/sc.hrc b/sc/inc/sc.hrc
index c2bf3e96ed5c..4a697dc57558 100644
--- a/sc/inc/sc.hrc
+++ b/sc/inc/sc.hrc
@@ -833,8 +833,11 @@
#define FID_TAB_INDEX (TAB_POPUP_START+6)
#define FID_TAB_RTL (TAB_POPUP_START+7)
#define FID_TAB_DESELECTALL (TAB_POPUP_START+8)
+#define FID_TAB_MENU_SET_TAB_BG_COLOR (TAB_POPUP_START + 9)
+#define FID_TAB_SET_TAB_BG_COLOR (TAB_POPUP_START + 10)
+#define FID_TAB_EVENTS (TAB_POPUP_START+11)
-#define TAB_POPUP_END (DATA_MENU_END + 20)
+#define TAB_POPUP_END (TAB_POPUP_START + 20)
#define OBJBAR_FORMAT_START (TAB_POPUP_END)
#define SID_ALIGNLEFT (OBJBAR_FORMAT_START+6)
@@ -1423,7 +1426,10 @@
#define RID_SCSTR_ONCLICK (STR_START + 402)
-#define STR_END RID_SCSTR_ONCLICK
+#define SCSTR_SET_TAB_BG_COLOR (STR_START + 403)
+#define SCSTR_NO_TAB_BG_COLOR (STR_START + 404)
+
+#define STR_END (SCSTR_NO_TAB_BG_COLOR)
#define BMP_START (STR_END)
@@ -1631,8 +1637,9 @@
#define RID_SCDLG_RETYPEPASS_INPUT (SC_DIALOGS_START + 151)
#define RID_SCDLG_TEXT_IMPORT_OPTIONS (SC_DIALOGS_START + 152)
#define RID_POPUP_FILTER (SC_DIALOGS_START + 153)
+#define RID_SCDLG_TAB_BG_COLOR (SC_DIALOGS_START + 154)
-#define SC_DIALOGS_END (SC_DIALOGS_START + 154)
+#define SC_DIALOGS_END (SC_DIALOGS_START + 155)
#ifndef STD_MASKCOLOR
#define STD_MASKCOLOR Color { Red = 0xFF00; Green = 0x0000; Blue = 0xFF00; }
diff --git a/sc/inc/scabstdlg.hxx b/sc/inc/scabstdlg.hxx
index d3c19bb539d5..442e62bdd9cb 100644
--- a/sc/inc/scabstdlg.hxx
+++ b/sc/inc/scabstdlg.hxx
@@ -286,6 +286,12 @@ public:
virtual void GetInputString( String& rString ) const = 0;
};
+class AbstractScTabBgColorDlg : public VclAbstractDialog //add for ScTabBgColorDlg
+{
+public:
+ virtual void GetSelectedColor( Color& rColor ) const = 0;
+};
+
class AbstractScImportOptionsDlg : public VclAbstractDialog //add for ScImportOptionsDlg
{
public:
@@ -435,6 +441,14 @@ public:
const String& rDefault,
ULONG nHelpId ,
int nId ) = 0;
+
+ virtual AbstractScTabBgColorDlg * CreateScTabBgColorDlg ( Window* pParent, //add for ScTabBgColorDlg
+ const String& rTitle, //Dialog Title
+ const String& rTabBgColorNoColorText, //Label for no tab color
+ const Color& rDefaultColor, //Currently selected Color
+ ULONG nHelpId ,
+ int nId ) = 0;
+
virtual AbstractScImportOptionsDlg * CreateScImportOptionsDlg ( Window* pParent, //add for ScImportOptionsDlg
int nId,
BOOL bAscii = TRUE,
diff --git a/sc/inc/scextopt.hxx b/sc/inc/scextopt.hxx
index b02df9816ef4..d7586fb8df95 100644
--- a/sc/inc/scextopt.hxx
+++ b/sc/inc/scextopt.hxx
@@ -38,7 +38,6 @@
/** Extended settings for the document, used in import/export filters. */
struct ScExtDocSettings
{
- ScRange maOleSize; /// Visible range if embedded.
String maGlobCodeName; /// Global codename (VBA module name).
double mfTabBarWidth; /// Width of the tabbar, relative to frame window width (0.0 ... 1.0).
sal_uInt32 mnLinkCnt; /// Recursive counter for loading external documents.
diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx
index 984e36bec03e..bd5d40709cd4 100644
--- a/sc/inc/scmod.hxx
+++ b/sc/inc/scmod.hxx
@@ -282,13 +282,11 @@ SC_DLLPUBLIC void SetAppOptions ( const ScAppOptions& rO
void SetInSharedDocSaving( bool bNew ) { mbIsInSharedDocSaving = bNew; }
bool IsInSharedDocSaving() const { return mbIsInSharedDocSaving; }
- //<!--Added by PengYunQuan for Validity Cell Range Picker
SC_DLLPUBLIC BOOL RegisterRefWindow( USHORT nSlotId, Window *pWnd );
SC_DLLPUBLIC BOOL UnregisterRefWindow( USHORT nSlotId, Window *pWnd );
SC_DLLPUBLIC BOOL IsAliveRefDlg( USHORT nSlotId, Window *pWnd );
SC_DLLPUBLIC Window * Find1RefWindow( USHORT nSlotId, Window *pWndAncestor );
SC_DLLPUBLIC Window * Find1RefWindow( Window *pWndAncestor );
- //-->Added by PengYunQuan for Validity Cell Range Picker
};
#define SC_MOD() ( *(ScModule**) GetAppData(SHL_CALC) )
diff --git a/sc/inc/segmenttree.hxx b/sc/inc/segmenttree.hxx
new file mode 100644
index 000000000000..195331c750ad
--- /dev/null
+++ b/sc/inc/segmenttree.hxx
@@ -0,0 +1,172 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 SC_SEGMENTTREE_HXX
+#define SC_SEGMENTTREE_HXX
+
+#include "address.hxx"
+
+#include <memory>
+
+class ScFlatBoolSegmentsImpl;
+
+class ScFlatBoolRowSegments
+{
+public:
+ struct RangeData
+ {
+ SCROW mnRow1;
+ SCROW mnRow2;
+ bool mbValue;
+ };
+
+ class ForwardIterator
+ {
+ public:
+ explicit ForwardIterator(ScFlatBoolRowSegments& rSegs);
+
+ bool getValue(SCROW nPos, bool& rVal);
+ SCROW getLastPos() const;
+
+ private:
+ ScFlatBoolRowSegments& mrSegs;
+
+ SCROW mnCurPos;
+ SCROW mnLastPos;
+ bool mbCurValue;
+ };
+
+ class RangeIterator
+ {
+ public:
+ explicit RangeIterator(ScFlatBoolRowSegments& rSegs);
+ bool getFirst(RangeData& rRange);
+ bool getNext(RangeData& rRange);
+ private:
+ ScFlatBoolRowSegments& mrSegs;
+ };
+
+ ScFlatBoolRowSegments();
+ ScFlatBoolRowSegments(const ScFlatBoolRowSegments& r);
+ ~ScFlatBoolRowSegments();
+
+ void setTrue(SCROW nRow1, SCROW nRow2);
+ void setFalse(SCROW nRow1, SCROW nRow2);
+ bool getValue(SCROW nRow);
+ bool getRangeData(SCROW nRow, RangeData& rData);
+ void removeSegment(SCROW nRow1, SCROW nRow2);
+ void insertSegment(SCROW nRow, SCROW nSize, bool bSkipStartBoundary);
+
+ SCROW findLastNotOf(bool bValue) const;
+
+ void enableTreeSearch(bool bEnable);
+ void setInsertFromBack(bool bInsertFromBack);
+
+private:
+ ::std::auto_ptr<ScFlatBoolSegmentsImpl> mpImpl;
+};
+
+// ============================================================================
+
+class ScFlatBoolColSegments
+{
+public:
+ struct RangeData
+ {
+ SCCOL mnCol1;
+ SCCOL mnCol2;
+ bool mbValue;
+ };
+ ScFlatBoolColSegments();
+ ScFlatBoolColSegments(const ScFlatBoolColSegments& r);
+ ~ScFlatBoolColSegments();
+
+ void setTrue(SCCOL nCol1, SCCOL nCol2);
+ void setFalse(SCCOL nCol1, SCCOL nCol2);
+ bool getValue(SCCOL nCol);
+ bool getRangeData(SCCOL nCol, RangeData& rData);
+ void removeSegment(SCCOL nCol1, SCCOL nCol2);
+ void insertSegment(SCCOL nCol, SCCOL nSize, bool bSkipStartBoundary);
+
+ void enableTreeSearch(bool bEnable);
+ void setInsertFromBack(bool bInsertFromBack);
+
+private:
+ ::std::auto_ptr<ScFlatBoolSegmentsImpl> mpImpl;
+};
+
+// ============================================================================
+
+class ScFlatUInt16SegmentsImpl;
+
+class ScFlatUInt16RowSegments
+{
+public:
+ struct RangeData
+ {
+ SCROW mnRow1;
+ SCROW mnRow2;
+ sal_uInt16 mnValue;
+ };
+
+ class ForwardIterator
+ {
+ public:
+ explicit ForwardIterator(ScFlatUInt16RowSegments& rSegs);
+
+ bool getValue(SCROW nPos, sal_uInt16& rVal);
+ SCROW getLastPos() const;
+
+ private:
+ ScFlatUInt16RowSegments& mrSegs;
+
+ SCROW mnCurPos;
+ SCROW mnLastPos;
+ sal_uInt16 mnCurValue;
+ };
+
+ ScFlatUInt16RowSegments(sal_uInt16 nDefault);
+ ScFlatUInt16RowSegments(const ScFlatUInt16RowSegments& r);
+ ~ScFlatUInt16RowSegments();
+
+ void setValue(SCROW nRow1, SCROW nRow2, sal_uInt16 nValue);
+ sal_uInt16 getValue(SCROW nRow);
+ sal_uInt32 getSumValue(SCROW nRow1, SCROW nRow2);
+ bool getRangeData(SCROW nRow, RangeData& rData);
+ void removeSegment(SCROW nRow1, SCROW nRow2);
+ void insertSegment(SCROW nRow, SCROW nSize, bool bSkipStartBoundary);
+
+ SCROW findLastNotOf(sal_uInt16 nValue) const;
+
+ void enableTreeSearch(bool bEnable);
+ void setInsertFromBack(bool bInsertFromBack);
+
+private:
+ ::std::auto_ptr<ScFlatUInt16SegmentsImpl> mpImpl;
+};
+
+#endif
diff --git a/offapi/com/sun/star/deployment/LicenseIndividualAgreementException.idl b/sc/inc/sheetevents.hxx
index 4239d14f075f..8f52efb990f7 100644..100755
--- a/offapi/com/sun/star/deployment/LicenseIndividualAgreementException.idl
+++ b/sc/inc/sheetevents.hxx
@@ -2,10 +2,13 @@
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
+ * $RCSfile: sheetdata.hxx,v $
+ * $Revision: 1.16.32.2 $
+ *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -25,35 +28,38 @@
*
************************************************************************/
-#if ! defined INCLUDED_com_sun_star_deployment_LicenseIndividualAgreementException_idl
-#define INCLUDED_com_sun_star_deployment_LicenseIndividualAgreementException_idl
+#ifndef SC_SHEETEVENTS_HXX
+#define SC_SHEETEVENTS_HXX
-#include <com/sun/star/uno/Exception.idl>
+#include <rtl/ustring.hxx>
+#define SC_SHEETEVENT_FOCUS 0
+#define SC_SHEETEVENT_UNFOCUS 1
+#define SC_SHEETEVENT_SELECT 2
+#define SC_SHEETEVENT_DOUBLECLICK 3
+#define SC_SHEETEVENT_RIGHTCLICK 4
+#define SC_SHEETEVENT_CHANGE 5
+#define SC_SHEETEVENT_CALCULATE 6
+#define SC_SHEETEVENT_COUNT 7
-module com { module sun { module star { module deployment {
+class ScSheetEvents
+{
+ rtl::OUString** mpScriptNames;
-/** The exception signals that an extension is about to be installed for more than
- one user, allthough every user needs to agree to the license.
+ void Clear();
- @since OOo 2.0.6
- */
-exception LicenseIndividualAgreementException : com::sun::star::uno::Exception
-{
- /** name of the extension.
-
- Contains the file name only.
- */
- string ExtensionName;
- /** indicates if the user can prevent to show the license
-
- Represents the attribute value
- /description/registration/simple-license/@suppress-if-required
- from the description.xml
- */
- boolean SuppressIfRequired;
-};
+public:
+ ScSheetEvents();
+ ScSheetEvents(const ScSheetEvents& rOther);
+ ~ScSheetEvents();
-}; }; }; };
+ const ScSheetEvents& operator= (const ScSheetEvents& rOther);
+
+ const rtl::OUString* GetScript(sal_Int32 nEvent) const;
+ void SetScript(sal_Int32 nEvent, const rtl::OUString* pNew);
+
+ static rtl::OUString GetEventName(sal_Int32 nEvent);
+};
#endif
+
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcConstants.java b/sc/inc/tabbgcolor.hxx
index 07530013ea84..c2b2a63baf65 100644
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcConstants.java
+++ b/sc/inc/tabbgcolor.hxx
@@ -1,11 +1,14 @@
-/************************************************************************
+/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
+ * $RCSfile: tabbgcolor.hxx,v $
+ * $Revision: 1.00 $
+ *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
@@ -25,21 +28,27 @@
*
************************************************************************/
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
+#ifndef SC_TABBGCOLOR_HXX
+#define SC_TABBGCOLOR_HXX
-import org.openoffice.xmerge.converter.palm.PdbUtil;
+#include "tools/color.hxx"
+#include "address.hxx"
-/**
- * Constants used for encoding and decoding the MiniCalc format.
- *
- * @author Herbie Ong
- */
-interface MinicalcConstants {
+#include <vector>
+
+struct ScUndoTabColorInfo
+{
+ SCTAB mnTabId;
+ Color maOldTabBgColor;
+ Color maNewTabBgColor;
+
+ bool IsDefaultOldTabBgColor() const;
+ bool IsDefaultNewTabBgColor() const;
- /** Creator ID. */
- public static final int CREATOR_ID = PdbUtil.intID("PiMC");
+ explicit ScUndoTabColorInfo(SCTAB nTab);
+ ScUndoTabColorInfo(const ScUndoTabColorInfo& r);
- /** Type ID. */
- public static final int TYPE_ID = PdbUtil.intID("Data");
-}
+ typedef ::std::vector<ScUndoTabColorInfo> List;
+};
+#endif
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index aed123bd7a65..78e5875b6879 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -39,12 +39,20 @@
#include "compressedarray.hxx"
#include <memory>
+#include <set>
+#include <boost/shared_ptr.hpp>
namespace utl {
class SearchParam;
class TextSearch;
}
+namespace com { namespace sun { namespace star {
+ namespace sheet {
+ struct TablePageBreakData;
+ }
+} } }
+
class SfxItemSet;
class SfxStyleSheetBase;
class SvxBoxInfoItem;
@@ -63,6 +71,7 @@ class ScPrintSaverTab;
class ScProgress;
class ScProgress;
class ScRangeList;
+class ScSheetEvents;
class ScSortInfoArray;
class ScStyleSheet;
class ScTableLink;
@@ -72,6 +81,9 @@ struct RowInfo;
struct ScFunctionData;
struct ScLineFlags;
class CollatorWrapper;
+class ScFlatUInt16RowSegments;
+class ScFlatBoolRowSegments;
+class ScFlatBoolColSegments;
class ScTable
@@ -111,13 +123,24 @@ private:
::std::auto_ptr<ScTableProtection> pTabProtection;
USHORT* pColWidth;
- ScSummableCompressedArray< SCROW, USHORT>* pRowHeight;
+ ::boost::shared_ptr<ScFlatUInt16RowSegments> mpRowHeights;
BYTE* pColFlags;
ScBitMaskCompressedArray< SCROW, BYTE>* pRowFlags;
+ ::boost::shared_ptr<ScFlatBoolColSegments> mpHiddenCols;
+ ::boost::shared_ptr<ScFlatBoolRowSegments> mpHiddenRows;
+ ::boost::shared_ptr<ScFlatBoolColSegments> mpFilteredCols;
+ ::boost::shared_ptr<ScFlatBoolRowSegments> mpFilteredRows;
+
+ ::std::set<SCROW> maRowPageBreaks;
+ ::std::set<SCROW> maRowManualBreaks;
+ ::std::set<SCCOL> maColPageBreaks;
+ ::std::set<SCCOL> maColManualBreaks;
ScOutlineTable* pOutlineTable;
+ ScSheetEvents* pSheetEvents;
+
SCCOL nTableAreaX;
SCROW nTableAreaY;
BOOL bTableAreaValid;
@@ -126,6 +149,7 @@ private:
BOOL bVisible;
BOOL bStreamValid;
BOOL bPendingRowHeights;
+ BOOL bCalcNotification;
SCTAB nTab;
USHORT nRecalcLvl; // Rekursionslevel Size-Recalc
@@ -153,8 +177,10 @@ private:
ScRangeList* pScenarioRanges;
Color aScenarioColor;
+ Color aTabBgColor;
USHORT nScenarioFlags;
BOOL bActiveScenario;
+ bool mbPageBreaksValid;
friend class ScDocument; // fuer FillInfo
friend class ScDocumentIterator;
@@ -189,6 +215,9 @@ public:
void RemoveSubTotals( ScSubTotalParam& rParam );
BOOL DoSubTotals( ScSubTotalParam& rParam );
+ const ScSheetEvents* GetSheetEvents() const { return pSheetEvents; }
+ void SetSheetEvents( const ScSheetEvents* pNew );
+
BOOL IsVisible() const { return bVisible; }
void SetVisible( BOOL bVis );
@@ -198,6 +227,9 @@ public:
BOOL IsPendingRowHeights() const { return bPendingRowHeights; }
void SetPendingRowHeights( BOOL bSet );
+ BOOL GetCalcNotification() const { return bCalcNotification; }
+ void SetCalcNotification( BOOL bSet );
+
BOOL IsLayoutRTL() const { return bLayoutRTL; }
BOOL IsLoadingRTL() const { return bLoadingRTL; }
void SetLayoutRTL( BOOL bSet );
@@ -209,6 +241,8 @@ public:
void SetScenarioComment( const String& rComment ) { aComment = rComment; }
const Color& GetScenarioColor() const { return aScenarioColor; }
void SetScenarioColor(const Color& rNew) { aScenarioColor = rNew; }
+ const Color& GetTabBgColor() const;
+ void SetTabBgColor(const Color& rColor);
USHORT GetScenarioFlags() const { return nScenarioFlags; }
void SetScenarioFlags(USHORT nNew) { nScenarioFlags = nNew; }
void SetActiveScenario(BOOL bSet) { bActiveScenario = bSet; }
@@ -364,7 +398,8 @@ public:
void CopyUpdated( const ScTable* pPosTab, ScTable* pDestTab ) const;
- void InvalidateTableArea() { bTableAreaValid = FALSE; }
+ void InvalidateTableArea();
+ void InvalidatePageBreaks();
BOOL GetCellArea( SCCOL& rEndCol, SCROW& rEndRow ) const; // FALSE = leer
BOOL GetTableArea( SCCOL& rEndCol, SCROW& rEndRow ) const;
@@ -463,7 +498,7 @@ public:
SCCOL& rCol, SCROW& rRow, ScMarkData& rMark,
String& rUndoStr, ScDocument* pUndoDoc);
- void FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2 ) const;
+ void FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2 );
void GetBorderLines( SCCOL nCol, SCROW nRow,
const SvxBorderLine** ppLeft, const SvxBorderLine** ppTop,
@@ -580,29 +615,49 @@ public:
void SetRowHeight( SCROW nRow, USHORT nNewHeight );
BOOL SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeight,
double nPPTX, double nPPTY );
+
+ /**
+ * Set specified row height to specified ranges. Don't check for drawing
+ * objects etc. Just set the row height. Nothing else.
+ *
+ * Note that setting a new row height via this function will not
+ * invalidate page breaks.
+ */
+ void SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeight );
+
// nPPT fuer Test auf Veraenderung
void SetManualHeight( SCROW nStartRow, SCROW nEndRow, BOOL bManual );
- USHORT GetColWidth( SCCOL nCol ) const;
- USHORT GetRowHeight( SCROW nRow ) const;
- ULONG GetRowHeight( SCROW nStartRow, SCROW nEndRow ) const;
- ULONG GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, double fScale ) const;
- ULONG GetColOffset( SCCOL nCol ) const;
- ULONG GetRowOffset( SCROW nRow ) const;
+ USHORT GetColWidth( SCCOL nCol );
+ SC_DLLPUBLIC USHORT GetRowHeight( SCROW nRow, SCROW* pStartRow = NULL, SCROW* pEndRow = NULL, bool bHiddenAsZero = true );
+ ULONG GetRowHeight( SCROW nStartRow, SCROW nEndRow );
+ ULONG GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, double fScale );
+ ULONG GetColOffset( SCCOL nCol );
+ ULONG GetRowOffset( SCROW nRow );
+
+ /**
+ * Get the last row such that the height of row 0 to the end row is as
+ * high as possible without exceeding the specified height value.
+ *
+ * @param nHeight maximum desired height
+ *
+ * @return SCROW last row of the range within specified height.
+ */
+ SCROW GetRowForHeight(ULONG nHeight);
USHORT GetOriginalWidth( SCCOL nCol ) const;
USHORT GetOriginalHeight( SCROW nRow ) const;
- USHORT GetCommonWidth( SCCOL nEndCol ) const;
+ USHORT GetCommonWidth( SCCOL nEndCol );
- SCROW GetHiddenRowCount( SCROW nRow ) const;
+ SCROW GetHiddenRowCount( SCROW nRow );
- void ShowCol(SCCOL nCol, BOOL bShow);
- void ShowRow(SCROW nRow, BOOL bShow);
- void DBShowRow(SCROW nRow, BOOL bShow);
+ void ShowCol(SCCOL nCol, bool bShow);
+ void ShowRow(SCROW nRow, bool bShow);
+ void DBShowRow(SCROW nRow, bool bShow);
- void ShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow);
- void DBShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow);
+ void ShowRows(SCROW nRow1, SCROW nRow2, bool bShow);
+ void DBShowRows(SCROW nRow1, SCROW nRow2, bool bShow);
void SetColFlags( SCCOL nCol, BYTE nNewFlags );
void SetRowFlags( SCROW nRow, BYTE nNewFlags );
@@ -616,15 +671,11 @@ public:
/// @return the index of the last changed row (flags and row height, auto pagebreak is ignored).
SCROW GetLastChangedRow() const;
- BOOL IsFiltered(SCROW nRow) const;
-
BYTE GetColFlags( SCCOL nCol ) const;
BYTE GetRowFlags( SCROW nRow ) const;
const ScBitMaskCompressedArray< SCROW, BYTE> * GetRowFlagsArray() const
{ return pRowFlags; }
- const ScSummableCompressedArray< SCROW, USHORT> * GetRowHeightArray() const
- { return pRowHeight; }
BOOL UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, BOOL bShow );
BOOL UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, BOOL bShow );
@@ -633,6 +684,63 @@ public:
void RemoveManualBreaks();
BOOL HasManualBreaks() const;
+ void GetAllRowBreaks(::std::set<SCROW>& rBreaks, bool bPage, bool bManual) const;
+ void GetAllColBreaks(::std::set<SCCOL>& rBreaks, bool bPage, bool bManual) const;
+ bool HasRowPageBreak(SCROW nRow) const;
+ bool HasColPageBreak(SCCOL nCol) const;
+ bool HasRowManualBreak(SCROW nRow) const;
+ bool HasColManualBreak(SCCOL nCol) const;
+
+ /**
+ * Get the row position of the next manual break that occurs at or below
+ * specified row. When no more manual breaks are present at or below
+ * the specified row, -1 is returned.
+ *
+ * @param nRow row at which the search begins.
+ *
+ * @return SCROW next row position with manual page break, or -1 if no
+ * more manual breaks are present.
+ */
+ SCROW GetNextManualBreak(SCROW nRow) const;
+
+ void RemoveRowPageBreaks(SCROW nStartRow, SCROW nEndRow);
+ void RemoveRowBreak(SCROW nRow, bool bPage, bool bManual);
+ void RemoveColBreak(SCCOL nCol, bool bPage, bool bManual);
+ void SetRowBreak(SCROW nRow, bool bPage, bool bManual);
+ void SetColBreak(SCCOL nCol, bool bPage, bool bManual);
+ ::com::sun::star::uno::Sequence<
+ ::com::sun::star::sheet::TablePageBreakData> GetRowBreakData() const;
+
+ bool RowHidden(SCROW nRow, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL);
+ bool RowHidden(SCROW nRow, SCROW& rLastRow);
+ bool HasHiddenRows(SCROW nStartRow, SCROW nEndRow);
+ bool ColHidden(SCCOL nCol, SCCOL& rLastCol);
+ bool ColHidden(SCCOL nCol, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL);
+ void SetRowHidden(SCROW nStartRow, SCROW nEndRow, bool bHidden);
+ void SetColHidden(SCCOL nStartCol, SCCOL nEndCol, bool bHidden);
+ void CopyColHidden(ScTable& rTable, SCCOL nStartCol, SCCOL nEndCol);
+ void CopyRowHidden(ScTable& rTable, SCROW nStartRow, SCROW nEndRow);
+ void CopyRowHeight(ScTable& rSrcTable, SCROW nStartRow, SCROW nEndRow, SCROW nSrcOffset);
+ SCROW FirstVisibleRow(SCROW nStartRow, SCROW nEndRow);
+ SCROW LastVisibleRow(SCROW nStartRow, SCROW nEndRow);
+ SCROW CountVisibleRows(SCROW nStartRow, SCROW nEndRow);
+ sal_uInt32 GetTotalRowHeight(SCROW nStartRow, SCROW nEndRow);
+
+ SCCOLROW LastHiddenColRow(SCCOLROW nPos, bool bCol);
+
+ bool RowFiltered(SCROW nRow, SCROW* pFirstRow = NULL, SCROW* pLastRow = NULL);
+ bool ColFiltered(SCCOL nCol, SCCOL* pFirstCol = NULL, SCCOL* pLastCol = NULL);
+ bool HasFilteredRows(SCROW nStartRow, SCROW nEndRow);
+ void CopyColFiltered(ScTable& rTable, SCCOL nStartCol, SCCOL nEndCol);
+ void CopyRowFiltered(ScTable& rTable, SCROW nStartRow, SCROW nEndRow);
+ void SetRowFiltered(SCROW nStartRow, SCROW nEndRow, bool bFiltered);
+ void SetColFiltered(SCCOL nStartCol, SCCOL nEndCol, bool bFiltered);
+ SCROW FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow);
+ SCROW LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow);
+ SCROW CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow);
+
+ void SyncColRowFlags();
+
void StripHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 );
void ExtendHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 );
@@ -750,14 +858,65 @@ private:
void StartNeededListeners(); // only for cells where NeedsListening()==TRUE
void SetRelNameDirty();
+ void SetLoadingMedium(bool bLoading);
+
SCSIZE FillMaxRot( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2,
SCCOL nCol, SCROW nAttrRow1, SCROW nAttrRow2, SCSIZE nArrY,
- const ScPatternAttr* pPattern, const SfxItemSet* pCondSet ) const;
+ const ScPatternAttr* pPattern, const SfxItemSet* pCondSet );
// idle calculation of OutputDevice text width for cell
// also invalidates script type, broadcasts for "calc as shown"
void InvalidateTextWidth( const ScAddress* pAdrFrom, const ScAddress* pAdrTo,
BOOL bNumFormatChanged, BOOL bBroadcast );
+
+ /**
+ * In case the cell text goes beyond the column width, move the max column
+ * position to the right. This is called from ExtendPrintArea.
+ */
+ void MaybeAddExtraColumn(SCCOL& rCol, SCROW nRow, OutputDevice* pDev, double nPPTX, double nPPTY);
+
+ /**
+ * Use this to iterate through non-empty visible cells in a single column.
+ */
+ class VisibleDataCellIterator
+ {
+ public:
+ static SCROW ROW_NOT_FOUND;
+
+ explicit VisibleDataCellIterator(ScFlatBoolRowSegments& rRowSegs, ScColumn& rColumn);
+ ~VisibleDataCellIterator();
+
+ /**
+ * Set the start row position. In case there is not visible data cell
+ * at the specified row position, it will move to the position of the
+ * first visible data cell below that point.
+ *
+ * @return First visible data cell if found, or NULL otherwise.
+ */
+ ScBaseCell* reset(SCROW nRow);
+
+ /**
+ * Find the next visible data cell position.
+ *
+ * @return Next visible data cell if found, or NULL otherwise.
+ */
+ ScBaseCell* next();
+
+ /**
+ * Get the current row position.
+ *
+ * @return Current row position, or ROW_NOT_FOUND if the iterator
+ * doesn't point to a valid data cell position.
+ */
+ SCROW getRow() const;
+
+ private:
+ ScFlatBoolRowSegments& mrRowSegs;
+ ScColumn& mrColumn;
+ ScBaseCell* mpCell;
+ SCROW mnCurRow;
+ SCROW mnUBound;
+ };
};
diff --git a/sc/inc/unonames.hxx b/sc/inc/unonames.hxx
index 330251742870..2d011f425398 100644
--- a/sc/inc/unonames.hxx
+++ b/sc/inc/unonames.hxx
@@ -173,6 +173,7 @@
#define SC_UNONAME_COPYFORM "CopyFormulas"
#define SC_UNONAME_TABLAYOUT "TableLayout"
#define SC_UNONAME_AUTOPRINT "AutomaticPrintArea"
+#define SC_UNONAME_TABCOLOR "TabColor"
// LinkTarget
#define SC_UNO_LINKDISPBIT "LinkDisplayBitmap"
@@ -527,6 +528,7 @@
#define SC_UNO_ZOOMTYPE "ZoomType"
#define SC_UNO_ZOOMVALUE "ZoomValue"
#define SC_UNO_UPDTEMPL "UpdateFromTemplate"
+
/*Stampit enable/disable print cancel */
#define SC_UNO_ALLOWPRINTJOBCANCEL "AllowPrintJobCancel"
@@ -612,6 +614,7 @@
// --> PB 2004-08-23 #i33095# Security Options
#define SC_UNO_LOADREADONLY "LoadReadonly"
// <--
+#define SC_UNO_MODIFYPASSWORDINFO "ModifyPasswordInfo"
// FormulaParser
#define SC_UNO_COMPILEENGLISH "CompileEnglish"
@@ -632,5 +635,10 @@
#define SC_UNO_SHAREDOC "IsDocumentShared"
+// EventDescriptor
+
+#define SC_UNO_EVENTTYPE "EventType"
+#define SC_UNO_SCRIPT "Script"
+
#endif
diff --git a/sc/inc/unowids.hxx b/sc/inc/unowids.hxx
index f58c3248bf81..175022a0ba14 100644
--- a/sc/inc/unowids.hxx
+++ b/sc/inc/unowids.hxx
@@ -78,7 +78,8 @@
#define SC_WID_UNO_AUTOPRINT ( SC_WID_UNO_START + 38 )
#define SC_WID_UNO_ABSNAME ( SC_WID_UNO_START + 39 )
#define SC_WID_UNO_CODENAME ( SC_WID_UNO_START + 40 )
-#define SC_WID_UNO_END ( SC_WID_UNO_START + 40 )
+#define SC_WID_UNO_TABCOLOR ( SC_WID_UNO_START + 41 )
+#define SC_WID_UNO_END ( SC_WID_UNO_START + 41 )
inline BOOL IsScUnoWid( USHORT nWid )
diff --git a/sc/inc/viewuno.hxx b/sc/inc/viewuno.hxx
index 988602b2056f..19b5c60fd070 100644
--- a/sc/inc/viewuno.hxx
+++ b/sc/inc/viewuno.hxx
@@ -48,6 +48,8 @@
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/datatransfer/XTransferableSupplier.hpp>
+#include "address.hxx"
+
class ScTabViewShell;
#define SC_VIEWPANE_ACTIVE 0xFFFF
@@ -195,6 +197,7 @@ private:
XViewPropertyChangeListenerArr_Impl aPropertyChgListeners;
XMouseClickHandlerArr_Impl aMouseClickHandlers;
XActivationEventListenerArr_Impl aActivationListeners;
+ SCTAB nPreviousTab;
sal_Bool bDrawSelModeSet;
ScViewPaneObj* GetObjectByIndex_Impl(USHORT nIndex) const;
@@ -223,7 +226,7 @@ public:
void SelectionChanged();
void VisAreaChanged();
void SheetChanged();
- sal_Bool IsMouseListening() { return aMouseClickHandlers.Count() > 0; }
+ bool IsMouseListening() const;
sal_Bool MousePressed( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
sal_Bool MouseReleased( const ::com::sun::star::awt::MouseEvent& e ) throw (::com::sun::star::uno::RuntimeException);
diff --git a/sc/prj/build.lst b/sc/prj/build.lst
index 115e92990f3c..afdd953d2274 100755
--- a/sc/prj/build.lst
+++ b/sc/prj/build.lst
@@ -1,4 +1,4 @@
-sc sc : filter l10n vbahelper oovbaapi svx uui stoc BOOST:boost formula oox NULL
+sc sc : filter l10n vbahelper oovbaapi svx uui stoc BOOST:boost formula MDDS:mdds oox NULL
sc sc usr1 - all sc_mkout NULL
sc sc\inc nmake - all sc_inc NULL
sc sc\prj get - all sc_prj NULL
diff --git a/sc/sdi/docsh.sdi b/sc/sdi/docsh.sdi
index 80a330f51890..94cd06d9f699 100644
--- a/sc/sdi/docsh.sdi
+++ b/sc/sdi/docsh.sdi
@@ -60,6 +60,7 @@ interface TableSelection
FID_DELETE_TABLE [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
FID_TAB_RENAME [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
FID_TAB_RTL [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
+ FID_TAB_SET_TAB_BG_COLOR [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
SID_TABLE_ACTIVATE [ ExecMethod = Execute; ]
}
diff --git a/sc/sdi/scalc.sdi b/sc/sdi/scalc.sdi
index 904ee22d3d8c..1e42ce5fb1dc 100644
--- a/sc/sdi/scalc.sdi
+++ b/sc/sdi/scalc.sdi
@@ -6819,6 +6819,31 @@ SfxVoidItem TableDeselectAll FID_TAB_DESELECTALL
]
//--------------------------------------------------------------------------
+SfxVoidItem TableEvents FID_TAB_EVENTS
+()
+[
+ /* flags: */
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = TRUE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Synchron;
+
+ /* config: */
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = FALSE,
+ GroupId = GID_EDIT;
+]
+
+//--------------------------------------------------------------------------
SfxVoidItem TextAttributes SID_DRAWTEXT_ATTR_DLG
()
[
@@ -7748,3 +7773,56 @@ SfxVoidItem ShareDocument SID_SHARE_DOC
ToolBoxConfig = FALSE,
GroupId = GID_OPTIONS;
]
+
+//--------------------------------------------------------------------------
+SvxColorItem TabBgColor FID_TAB_SET_TAB_BG_COLOR
+
+[
+ // flags:
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = TRUE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Synchron;
+
+ Readonly = FALSE,
+
+ // config:
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = FALSE,
+ GroupId = GID_FORMAT;
+]
+
+//--------------------------------------------------------------------------
+SfxVoidItem SetTabBgColor FID_TAB_MENU_SET_TAB_BG_COLOR
+(SvxColorItem TabBgColor FID_TAB_SET_TAB_BG_COLOR)
+[
+ /* flags: */
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = TRUE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Synchron;
+
+ /* config: */
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = FALSE,
+ GroupId = GID_FORMAT;
+]
+
diff --git a/sc/sdi/tabvwsh.sdi b/sc/sdi/tabvwsh.sdi
index 4129aaef7d85..fac67839e656 100644
--- a/sc/sdi/tabvwsh.sdi
+++ b/sc/sdi/tabvwsh.sdi
@@ -52,12 +52,14 @@ interface Tables
FID_TAB_SELECTALL [ ExecMethod = Execute; StateMethod = GetState; ]
FID_TAB_DESELECTALL [ ExecMethod = Execute; StateMethod = GetState; ]
FID_TAB_MENU_RENAME [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
- FID_TAB_APPEND [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
- FID_INS_TABLE [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
+ FID_TAB_APPEND [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
+ FID_INS_TABLE [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
FID_INS_TABLE_EXT [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
- FID_TABLE_HIDE [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
- FID_TABLE_SHOW [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
- SID_SELECT_TABLES [ ExecMethod = Execute; StateMethod = GetState; ]
+ FID_TABLE_HIDE [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
+ FID_TABLE_SHOW [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
+ SID_SELECT_TABLES [ ExecMethod = Execute; StateMethod = GetState; ]
+ FID_TAB_MENU_SET_TAB_BG_COLOR [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
+ FID_TAB_EVENTS [ ExecMethod = ExecuteTable; StateMethod = GetStateTable; ]
}
// ===========================================================================
diff --git a/sc/source/core/data/attarray.cxx b/sc/source/core/data/attarray.cxx
index 53df13b4cd62..f3443312bd4e 100644
--- a/sc/source/core/data/attarray.cxx
+++ b/sc/source/core/data/attarray.cxx
@@ -52,7 +52,7 @@
#include "markarr.hxx"
#include "rechead.hxx"
#include "globstr.hrc"
-
+#include "segmenttree.hxx"
#undef DBG_INVALIDATE
#define DBGOUTPUT(s) \
@@ -1727,8 +1727,7 @@ SCsROW ScAttrArray::GetNextUnprotected( SCsROW nRow, BOOL bUp ) const
return nRet;
}
-
-void ScAttrArray::FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, BOOL* pUsed, BOOL bReset )
+void ScAttrArray::FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, ScFlatBoolRowSegments& rUsedRows, bool bReset )
{
SCROW nStart = 0;
SCSIZE nPos = 0;
@@ -1740,7 +1739,7 @@ void ScAttrArray::FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, BOOL* pU
// for (SCROW nRow = nStart; nRow <= nEnd; nRow++)
// pUsed[nRow] = TRUE;
- memset( &pUsed[nStart], TRUE, nEnd-nStart+1 );
+ rUsedRows.setTrue(nStart, nEnd);
if (bReset)
{
diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx
index 48a0e8597e1c..95482b1c624b 100644
--- a/sc/source/core/data/bcaslot.cxx
+++ b/sc/source/core/data/bcaslot.cxx
@@ -47,8 +47,10 @@
#define BCA_SLOTS_COL ((MAXCOLCOUNT_DEFINE) / 16)
#if MAXROWCOUNT_DEFINE == 32000
#define BCA_SLOTS_ROW 256
+#define BCA_SLICE 125
#else
-#define BCA_SLOTS_ROW ((MAXROWCOUNT_DEFINE) / 128)
+#define BCA_SLICE 128
+#define BCA_SLOTS_ROW ((MAXROWCOUNT_DEFINE) / BCA_SLICE)
#endif
#define BCA_SLOT_COLS ((MAXCOLCOUNT_DEFINE) / BCA_SLOTS_COL)
#define BCA_SLOT_ROWS ((MAXROWCOUNT_DEFINE) / BCA_SLOTS_ROW)
@@ -59,7 +61,7 @@
#if (BCA_SLOT_ROWS * BCA_SLOTS_ROW) != (MAXROWCOUNT_DEFINE)
#error bad BCA_SLOTS_ROW value!
#endif
-// size of slot array
+// size of slot array if linear
#define BCA_SLOTS_DEFINE (BCA_SLOTS_COL * BCA_SLOTS_ROW)
// Arbitrary 2**31/8, assuming size_t can hold at least 2^31 values and
// sizeof_ptr is at most 8 bytes. You'd probably doom your machine's memory
@@ -67,14 +69,60 @@
#if BCA_SLOTS_DEFINE > 268435456
#error BCA_SLOTS_DEFINE DOOMed!
#endif
-// type safe constant
-const SCSIZE BCA_SLOTS = BCA_SLOTS_DEFINE;
// STATIC DATA -----------------------------------------------------------
TYPEINIT1( ScHint, SfxSimpleHint );
TYPEINIT1( ScAreaChangedHint, SfxHint );
+struct ScSlotData
+{
+ SCROW nStartRow; // first row of this segment
+ SCROW nStopRow; // first row of next segment
+ SCSIZE nSlice; // slice size in this segment
+ SCSIZE nCumulated; // cumulated slots of previous segments
+
+ ScSlotData( SCROW r1, SCROW r2, SCSIZE s, SCSIZE c ) : nStartRow(r1), nStopRow(r2), nSlice(s), nCumulated(c) {}
+};
+typedef ::std::vector< ScSlotData > ScSlotDistribution;
+#if MAXROWCOUNT_DEFINE <= 65536
+// Linear distribution.
+static ScSlotDistribution aSlotDistribution( ScSlotData( 0, MAXROWCOUNT, BCA_SLOT_ROWS, 0));
+static SCSIZE nBcaSlotsRow = BCA_SLOTS_ROW;
+static SCSIZE nBcaSlots = BCA_SLOTS_DEFINE;
+#else
+// Logarithmic or any other distribution.
+// Upper sheet part usually is more populated and referenced and gets fine
+// grained resolution, larger data in larger hunks.
+// Could be further enhanced by also applying a different distribution of
+// column slots.
+static SCSIZE initSlotDistribution( ScSlotDistribution & rSD, SCSIZE & rBSR )
+{
+ SCSIZE nSlots = 0;
+ SCROW nRow1 = 0;
+ SCROW nRow2 = 32*1024;
+ SCSIZE nSlice = 128;
+ // Must be sorted by row1,row2!
+ while (nRow2 <= MAXROWCOUNT)
+ {
+ //fprintf( stderr, "r1,r2,slice,cum: %7zu, %7zu, %7zu, %7zu\n", (size_t)nRow1, (size_t)nRow2, (size_t)nSlice, (size_t)nSlots);
+ // {0,32k,128,0;32k,64k,256,0+256;64k,128k,512,0+256+128;128k,256k,1024,0+256+128+128;256k,512k,2048,...;512k,1M,4096,...}
+ rSD.push_back( ScSlotData( nRow1, nRow2, nSlice, nSlots));
+ nSlots += (nRow2 - nRow1) / nSlice;
+ nRow1 = nRow2;
+ nRow2 *= 2;
+ nSlice *= 2;
+ }
+ //fprintf( stderr, "Slices: %zu, slots per sheet: %zu, memory per referenced sheet: %zu\n", (size_t) nSlots, (size_t) nSlots * BCA_SLOTS_COL, (size_t) nSlots * BCA_SLOTS_COL * sizeof(void*));
+ rBSR = nSlots;
+ return nSlots;
+}
+static ScSlotDistribution aSlotDistribution;
+static SCSIZE nBcaSlotsRow;
+static SCSIZE nBcaSlots = initSlotDistribution( aSlotDistribution, nBcaSlotsRow) * BCA_SLOTS_COL;
+// Ensure that all static variables are initialized with this one call.
+#endif
+
ScBroadcastAreaSlot::ScBroadcastAreaSlot( ScDocument* pDocument,
ScBroadcastAreaSlotMachine* pBASMa ) :
@@ -393,14 +441,14 @@ void ScBroadcastAreaSlot::UpdateInsert( ScBroadcastArea* pArea )
ScBroadcastAreaSlotMachine::TableSlots::TableSlots()
{
- ppSlots = new ScBroadcastAreaSlot* [ BCA_SLOTS ];
- memset( ppSlots, 0 , sizeof( ScBroadcastAreaSlot* ) * BCA_SLOTS );
+ ppSlots = new ScBroadcastAreaSlot* [ nBcaSlots ];
+ memset( ppSlots, 0 , sizeof( ScBroadcastAreaSlot* ) * nBcaSlots );
}
ScBroadcastAreaSlotMachine::TableSlots::~TableSlots()
{
- for ( ScBroadcastAreaSlot** pp = ppSlots + BCA_SLOTS; --pp >= ppSlots; /* nothing */ )
+ for ( ScBroadcastAreaSlot** pp = ppSlots + nBcaSlots; --pp >= ppSlots; /* nothing */ )
{
if (*pp)
delete *pp;
@@ -417,16 +465,16 @@ ScBroadcastAreaSlotMachine::ScBroadcastAreaSlotMachine(
pEOUpdateChain( NULL ),
nInBulkBroadcast( 0 )
{
- for (TableSlotsMap::iterator iTab( aTableSlotsMap.begin());
- iTab != aTableSlotsMap.end(); ++iTab)
- {
- delete (*iTab).second;
- }
}
ScBroadcastAreaSlotMachine::~ScBroadcastAreaSlotMachine()
{
+ for (TableSlotsMap::iterator iTab( aTableSlotsMap.begin());
+ iTab != aTableSlotsMap.end(); ++iTab)
+ {
+ delete (*iTab).second;
+ }
delete pBCAlways;
}
@@ -438,13 +486,21 @@ inline SCSIZE ScBroadcastAreaSlotMachine::ComputeSlotOffset(
SCCOL nCol = rAddress.Col();
if ( !ValidRow(nRow) || !ValidCol(nCol) )
{
- DBG_ASSERT( FALSE, "Row/Col ungueltig!" );
+ DBG_ERRORFILE( "Row/Col invalid, using first slot!" );
return 0;
}
- else
- return
- static_cast<SCSIZE>(nRow) / BCA_SLOT_ROWS +
- static_cast<SCSIZE>(nCol) / BCA_SLOT_COLS * BCA_SLOTS_ROW;
+ for (size_t i=0; i < aSlotDistribution.size(); ++i)
+ {
+ if (nRow < aSlotDistribution[i].nStopRow)
+ {
+ const ScSlotData& rSD = aSlotDistribution[i];
+ return rSD.nCumulated +
+ (static_cast<SCSIZE>(nRow - rSD.nStartRow)) / rSD.nSlice +
+ static_cast<SCSIZE>(nCol) / BCA_SLOT_COLS * nBcaSlotsRow;
+ }
+ }
+ DBG_ERRORFILE( "No slot found, using last!" );
+ return nBcaSlots - 1;
}
@@ -459,9 +515,28 @@ void ScBroadcastAreaSlotMachine::ComputeAreaPoints( const ScRange& rRange,
}
+inline void ComputeNextSlot( SCSIZE & nOff, SCSIZE & nBreak, ScBroadcastAreaSlot** & pp,
+ SCSIZE & nStart, ScBroadcastAreaSlot** const & ppSlots, SCSIZE const & nRowBreak )
+{
+ if ( nOff < nBreak )
+ {
+ ++nOff;
+ ++pp;
+ }
+ else
+ {
+ nStart += nBcaSlotsRow;
+ nOff = nStart;
+ pp = ppSlots + nOff;
+ nBreak = nOff + nRowBreak;
+ }
+}
+
+
void ScBroadcastAreaSlotMachine::StartListeningArea( const ScRange& rRange,
SvtListener* pListener )
{
+ //fprintf( stderr, "StartListeningArea (c,r,t): %d, %d, %d, %d, %d, %d\n", (int)rRange.aStart.Col(), (int)rRange.aStart.Row(), (int)rRange.aStart.Tab(), (int)rRange.aEnd.Col(), (int)rRange.aEnd.Row(), (int)rRange.aEnd.Tab());
if ( rRange == BCA_LISTEN_ALWAYS )
{
if ( !pBCAlways )
@@ -500,18 +575,7 @@ void ScBroadcastAreaSlotMachine::StartListeningArea( const ScRange& rRange,
}
else
(*pp)->InsertListeningArea( pArea);
- if ( nOff < nBreak )
- {
- ++nOff;
- ++pp;
- }
- else
- {
- nStart += BCA_SLOTS_ROW;
- nOff = nStart;
- pp = ppSlots + nOff;
- nBreak = nOff + nRowBreak;
- }
+ ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak);
}
}
}
@@ -521,6 +585,7 @@ void ScBroadcastAreaSlotMachine::StartListeningArea( const ScRange& rRange,
void ScBroadcastAreaSlotMachine::EndListeningArea( const ScRange& rRange,
SvtListener* pListener )
{
+ //fprintf( stderr, "EndListeningArea (c,r,t): %d, %d, %d, %d, %d, %d\n", (int)rRange.aStart.Col(), (int)rRange.aStart.Row(), (int)rRange.aStart.Tab(), (int)rRange.aEnd.Col(), (int)rRange.aEnd.Row(), (int)rRange.aEnd.Tab());
if ( rRange == BCA_LISTEN_ALWAYS )
{
DBG_ASSERT( pBCAlways, "ScBroadcastAreaSlotMachine::EndListeningArea: BCA_LISTEN_ALWAYS but none established");
@@ -547,7 +612,7 @@ void ScBroadcastAreaSlotMachine::EndListeningArea( const ScRange& rRange,
SCSIZE nBreak = nOff + nRowBreak;
ScBroadcastAreaSlot** pp = ppSlots + nOff;
ScBroadcastArea* pArea = NULL;
- if (nOff == 0 && nEnd == BCA_SLOTS-1)
+ if (nOff == 0 && nEnd == nBcaSlots-1)
{
// Slightly optimized for 0,0,MAXCOL,MAXROW calls as they
// happen for insertion and deletion of sheets.
@@ -564,18 +629,7 @@ void ScBroadcastAreaSlotMachine::EndListeningArea( const ScRange& rRange,
{
if ( *pp )
(*pp)->EndListeningArea( rRange, pListener, pArea );
- if ( nOff < nBreak )
- {
- ++nOff;
- ++pp;
- }
- else
- {
- nStart += BCA_SLOTS_ROW;
- nOff = nStart;
- pp = ppSlots + nOff;
- nBreak = nOff + nRowBreak;
- }
+ ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak);
}
}
}
@@ -629,18 +683,7 @@ BOOL ScBroadcastAreaSlotMachine::AreaBroadcastInRange( const ScRange& rRange,
{
if ( *pp )
bBroadcasted |= (*pp)->AreaBroadcastInRange( rRange, rHint );
- if ( nOff < nBreak )
- {
- ++nOff;
- ++pp;
- }
- else
- {
- nStart += BCA_SLOTS_ROW;
- nOff = nStart;
- pp = ppSlots + nOff;
- nBreak = nOff + nRowBreak;
- }
+ ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak);
}
}
return bBroadcasted;
@@ -660,7 +703,7 @@ void ScBroadcastAreaSlotMachine::DelBroadcastAreasInRange(
SCSIZE nOff = nStart;
SCSIZE nBreak = nOff + nRowBreak;
ScBroadcastAreaSlot** pp = ppSlots + nOff;
- if (nOff == 0 && nEnd == BCA_SLOTS-1)
+ if (nOff == 0 && nEnd == nBcaSlots-1)
{
// Slightly optimized for 0,0,MAXCOL,MAXROW calls as they
// happen for insertion and deletion of sheets.
@@ -677,18 +720,7 @@ void ScBroadcastAreaSlotMachine::DelBroadcastAreasInRange(
{
if ( *pp )
(*pp)->DelBroadcastAreasInRange( rRange );
- if ( nOff < nBreak )
- {
- ++nOff;
- ++pp;
- }
- else
- {
- nStart += BCA_SLOTS_ROW;
- nOff = nStart;
- pp = ppSlots + nOff;
- nBreak = nOff + nRowBreak;
- }
+ ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak);
}
}
}
@@ -711,7 +743,7 @@ void ScBroadcastAreaSlotMachine::UpdateBroadcastAreas(
SCSIZE nOff = nStart;
SCSIZE nBreak = nOff + nRowBreak;
ScBroadcastAreaSlot** pp = ppSlots + nOff;
- if (nOff == 0 && nEnd == BCA_SLOTS-1)
+ if (nOff == 0 && nEnd == nBcaSlots-1)
{
// Slightly optimized for 0,0,MAXCOL,MAXROW calls as they
// happen for insertion and deletion of sheets.
@@ -728,18 +760,7 @@ void ScBroadcastAreaSlotMachine::UpdateBroadcastAreas(
{
if ( *pp )
(*pp)->UpdateRemove( eUpdateRefMode, rRange, nDx, nDy, nDz );
- if ( nOff < nBreak )
- {
- ++nOff;
- ++pp;
- }
- else
- {
- nStart += BCA_SLOTS_ROW;
- nOff = nStart;
- pp = ppSlots + nOff;
- nBreak = nOff + nRowBreak;
- }
+ ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak);
}
}
}
@@ -771,18 +792,7 @@ void ScBroadcastAreaSlotMachine::UpdateBroadcastAreas(
{
if (*pp)
(*pp)->UpdateRemoveArea( pArea);
- if ( nOff < nBreak )
- {
- ++nOff;
- ++pp;
- }
- else
- {
- nStart += BCA_SLOTS_ROW;
- nOff = nStart;
- pp = ppSlots + nOff;
- nBreak = nOff + nRowBreak;
- }
+ ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak);
}
}
@@ -876,18 +886,7 @@ void ScBroadcastAreaSlotMachine::UpdateBroadcastAreas(
if (!*pp)
*pp = new ScBroadcastAreaSlot( pDoc, this );
(*pp)->UpdateInsert( pArea );
- if ( nOff < nBreak )
- {
- ++nOff;
- ++pp;
- }
- else
- {
- nStart += BCA_SLOTS_ROW;
- nOff = nStart;
- pp = ppSlots + nOff;
- nBreak = nOff + nRowBreak;
- }
+ ComputeNextSlot( nOff, nBreak, pp, nStart, ppSlots, nRowBreak);
}
}
diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx
index a70a9b86e186..aa492630ab0e 100644
--- a/sc/source/core/data/cell.cxx
+++ b/sc/source/core/data/cell.cxx
@@ -277,21 +277,21 @@ void ScBaseCell::StartListeningTo( ScDocument* pDoc )
if ( rRef1.IsColRel() )
{ // ColName
pDoc->StartListeningArea( ScRange (
- 0,
+ rRef1.nCol,
rRef1.nRow,
rRef1.nTab,
- MAXCOL,
- rRef2.nRow,
+ rRef2.nCol,
+ MAXROW,
rRef2.nTab ), pFormCell );
}
else
{ // RowName
pDoc->StartListeningArea( ScRange (
rRef1.nCol,
- 0,
+ rRef1.nRow,
rRef1.nTab,
- rRef2.nCol,
- MAXROW,
+ MAXCOL,
+ rRef2.nRow,
rRef2.nTab ), pFormCell );
}
}
@@ -367,21 +367,21 @@ void ScBaseCell::EndListeningTo( ScDocument* pDoc, ScTokenArray* pArr,
if ( rRef1.IsColRel() )
{ // ColName
pDoc->EndListeningArea( ScRange (
- 0,
+ rRef1.nCol,
rRef1.nRow,
rRef1.nTab,
- MAXCOL,
- rRef2.nRow,
+ rRef2.nCol,
+ MAXROW,
rRef2.nTab ), pFormCell );
}
else
{ // RowName
pDoc->EndListeningArea( ScRange (
rRef1.nCol,
- 0,
+ rRef1.nRow,
rRef1.nTab,
- rRef2.nCol,
- MAXROW,
+ MAXCOL,
+ rRef2.nRow,
rRef2.nTab ), pFormCell );
}
}
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 6a5fe824197b..e9fd26ced939 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -600,13 +600,11 @@ const ScStyleSheet* ScColumn::GetAreaStyle( BOOL& rFound, SCROW nRow1, SCROW nRo
return bEqual ? pStyle : NULL;
}
-
-void ScColumn::FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, BOOL* pUsed, BOOL bReset )
+void ScColumn::FindStyleSheet( const SfxStyleSheetBase* pStyleSheet, ScFlatBoolRowSegments& rUsedRows, bool bReset )
{
- pAttrArray->FindStyleSheet( pStyleSheet, pUsed, bReset );
+ pAttrArray->FindStyleSheet( pStyleSheet, rUsedRows, bReset );
}
-
BOOL ScColumn::IsStyleSheetUsed( const ScStyleSheet& rStyle, BOOL bGatherAllStyles ) const
{
return pAttrArray->IsStyleSheetUsed( rStyle, bGatherAllStyles );
@@ -893,11 +891,6 @@ void ScColumn::SwapRow(SCROW nRow1, SCROW nRow2)
SvtBroadcaster* pBC2 = pCell2->ReleaseBroadcaster();
pCell1->TakeBroadcaster( pBC2 );
pCell2->TakeBroadcaster( pBC1 );
-
- ScHint aHint1( SC_HINT_DATACHANGED, aPos1, pCell2 );
- pDocument->Broadcast( aHint1 );
- ScHint aHint2( SC_HINT_DATACHANGED, aPos2, pCell1 );
- pDocument->Broadcast( aHint2 );
}
else
{
@@ -918,7 +911,6 @@ void ScColumn::SwapRow(SCROW nRow1, SCROW nRow2)
// insert ColEntry at new position
Insert( nRow2, pCell1 );
- pDocument->Broadcast( ScHint( SC_HINT_DATACHANGED, aPos1, pDummyCell ) );
}
return;
@@ -999,14 +991,6 @@ void ScColumn::SwapRow(SCROW nRow1, SCROW nRow2)
Delete( nRow2 ); // deletes pCell2
else if ( pNew2 )
Insert( nRow2, pNew2 ); // deletes pCell2 (if existing), inserts pNew2
-
- // #64122# Bei Formeln hinterher nochmal broadcasten, damit die Formel nicht in irgendwelchen
- // FormulaTrack-Listen landet, ohne die Broadcaster beruecksichtigt zu haben
- // (erst hier, wenn beide Zellen eingefuegt sind)
- if ( pBC1 && pFmlaCell2 )
- pDocument->Broadcast( ScHint( SC_HINT_DATACHANGED, aPos1, pNew1 ) );
- if ( pBC2 && pFmlaCell1 )
- pDocument->Broadcast( ScHint( SC_HINT_DATACHANGED, aPos2, pNew2 ) );
}
@@ -1402,7 +1386,7 @@ void ScColumn::CopyScenarioFrom( const ScColumn& rSrcCol )
// Dies ist die Szenario-Tabelle, die Daten werden hineinkopiert
ScAttrIterator aAttrIter( pAttrArray, 0, MAXROW );
- SCROW nStart, nEnd;
+ SCROW nStart = -1, nEnd = -1;
const ScPatternAttr* pPattern = aAttrIter.Next( nStart, nEnd );
while (pPattern)
{
@@ -1433,7 +1417,7 @@ void ScColumn::CopyScenarioTo( ScColumn& rDestCol ) const
// Dies ist die Szenario-Tabelle, die Daten werden in die andere kopiert
ScAttrIterator aAttrIter( pAttrArray, 0, MAXROW );
- SCROW nStart, nEnd;
+ SCROW nStart = -1, nEnd = -1;
const ScPatternAttr* pPattern = aAttrIter.Next( nStart, nEnd );
while (pPattern)
{
@@ -1482,7 +1466,7 @@ void ScColumn::MarkScenarioIn( ScMarkData& rDestMark ) const
ScRange aRange( nCol, 0, nTab );
ScAttrIterator aAttrIter( pAttrArray, 0, MAXROW );
- SCROW nStart, nEnd;
+ SCROW nStart = -1, nEnd = -1;
const ScPatternAttr* pPattern = aAttrIter.Next( nStart, nEnd );
while (pPattern)
{
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx
index 4c8de67ba271..2adf6d926f0f 100644
--- a/sc/source/core/data/column2.cxx
+++ b/sc/source/core/data/column2.cxx
@@ -66,6 +66,7 @@
#include "compiler.hxx" // ScTokenArray GetCodeLen
#include "dbcolect.hxx"
#include "fillinfo.hxx"
+#include "segmenttree.hxx"
#include <math.h>
@@ -760,8 +761,8 @@ void ScColumn::GetOptimalHeight( SCROW nStartRow, SCROW nEndRow, USHORT* pHeight
{
ScAttrIterator aIter( pAttrArray, nStartRow, nEndRow );
- SCROW nStart;
- SCROW nEnd;
+ SCROW nStart = -1;
+ SCROW nEnd = -1;
SCROW nEditPos = 0;
SCROW nNextEnd = 0;
@@ -1407,11 +1408,11 @@ BOOL ScColumn::GetPrevDataPos(SCROW& rRow) const
return bFound;
}
-BOOL ScColumn::GetNextDataPos(SCROW& rRow) const // groesser als rRow
+BOOL ScColumn::GetNextDataPos(SCROW& rRow) const // greater than rRow
{
SCSIZE nIndex;
if (Search( rRow, nIndex ))
- ++nIndex; // naechste Zelle
+ ++nIndex; // next cell
BOOL bMore = ( nIndex < nCount );
if ( bMore )
@@ -1782,7 +1783,7 @@ void lcl_UpdateSubTotal( ScFunctionData& rData, ScBaseCell* pCell )
// Mehrfachselektion:
void ScColumn::UpdateSelectionFunction( const ScMarkData& rMark,
ScFunctionData& rData,
- const ScBitMaskCompressedArray< SCROW, BYTE>* pRowFlags,
+ ScFlatBoolRowSegments& rHiddenRows,
BOOL bDoExclude, SCROW nExStartRow, SCROW nExEndRow )
{
SCSIZE nIndex;
@@ -1790,7 +1791,8 @@ void ScColumn::UpdateSelectionFunction( const ScMarkData& rMark,
while (aDataIter.Next( nIndex ))
{
SCROW nRow = pItems[nIndex].nRow;
- if ( !pRowFlags || !( pRowFlags->GetValue(nRow) & CR_HIDDEN ) )
+ bool bRowHidden = rHiddenRows.getValue(nRow);
+ if ( !bRowHidden )
if ( !bDoExclude || nRow < nExStartRow || nRow > nExEndRow )
lcl_UpdateSubTotal( rData, pItems[nIndex].pCell );
}
@@ -1798,7 +1800,7 @@ void ScColumn::UpdateSelectionFunction( const ScMarkData& rMark,
// bei bNoMarked die Mehrfachselektion weglassen
void ScColumn::UpdateAreaFunction( ScFunctionData& rData,
- const ScBitMaskCompressedArray< SCROW, BYTE>* pRowFlags,
+ ScFlatBoolRowSegments& rHiddenRows,
SCROW nStartRow, SCROW nEndRow )
{
SCSIZE nIndex;
@@ -1806,7 +1808,8 @@ void ScColumn::UpdateAreaFunction( ScFunctionData& rData,
while ( nIndex<nCount && pItems[nIndex].nRow<=nEndRow )
{
SCROW nRow = pItems[nIndex].nRow;
- if ( !pRowFlags || !( pRowFlags->GetValue(nRow) & CR_HIDDEN ) )
+ bool bRowHidden = rHiddenRows.getValue(nRow);
+ if ( !bRowHidden )
lcl_UpdateSubTotal( rData, pItems[nIndex].pCell );
++nIndex;
}
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index be7211138c1d..65e896c7f2c4 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -1648,8 +1648,8 @@ BOOL ScColumn::GetDataEntries(SCROW nStartRow, TypedScStrCollection& rStrings, B
void ScColumn::RemoveProtected( SCROW nStartRow, SCROW nEndRow )
{
ScAttrIterator aAttrIter( pAttrArray, nStartRow, nEndRow );
- SCROW nTop;
- SCROW nBottom;
+ SCROW nTop = -1;
+ SCROW nBottom = -1;
SCSIZE nIndex;
const ScPatternAttr* pPattern = aAttrIter.Next( nTop, nBottom );
while (pPattern)
diff --git a/sc/source/core/data/dociter.cxx b/sc/source/core/data/dociter.cxx
index 706783579a24..aa5b011da93b 100644
--- a/sc/source/core/data/dociter.cxx
+++ b/sc/source/core/data/dociter.cxx
@@ -49,6 +49,7 @@
using ::rtl::math::approxEqual;
using ::std::vector;
using ::rtl::OUString;
+using ::std::set;
// STATIC DATA -----------------------------------------------------------
@@ -345,7 +346,7 @@ BOOL ScValueIterator::GetThis(double& rValue, USHORT& rErr)
if ( nColRow < pCol->nCount && pCol->pItems[nColRow].nRow <= nEndRow )
{
nRow = pCol->pItems[nColRow].nRow + 1;
- if ( !bSubTotal || !pDoc->pTab[nTab]->IsFiltered( nRow-1 ) )
+ if ( !bSubTotal || !pDoc->pTab[nTab]->RowFiltered( nRow-1 ) )
{
ScBaseCell* pCell = pCol->pItems[nColRow].pCell;
++nColRow;
@@ -940,11 +941,6 @@ ScDBQueryDataIterator::ScDBQueryDataIterator(ScDocument* pDocument, ScDBQueryPar
}
}
-bool ScDBQueryDataIterator::GetThis(Value& rValue)
-{
- return mpData->getCurrent(rValue);
-}
-
bool ScDBQueryDataIterator::GetFirst(Value& rValue)
{
return mpData->getFirst(rValue);
@@ -1071,7 +1067,7 @@ ScBaseCell* ScCellIterator::GetThis()
if ( nColRow < pCol->nCount && pCol->pItems[nColRow].nRow <= nEndRow )
{
nRow = pCol->pItems[nColRow].nRow;
- if ( !bSubTotal || !pDoc->pTab[nTab]->IsFiltered( nRow ) )
+ if ( !bSubTotal || !pDoc->pTab[nTab]->RowFiltered( nRow ) )
{
ScBaseCell* pCell = pCol->pItems[nColRow].pCell;
@@ -1259,14 +1255,6 @@ ScBaseCell* ScQueryCellIterator::GetNext()
return GetThis();
}
-ULONG ScQueryCellIterator::GetNumberFormat()
-{
- ScColumn* pCol = &(pDoc->pTab[nTab])->aCol[nCol];
- lcl_IterGetNumberFormat( nNumFormat, pAttrArray,
- nAttrEndRow, pCol->pAttrArray, nRow, pDoc );
- return nNumFormat;
-}
-
void ScQueryCellIterator::AdvanceQueryParamEntryField()
{
SCSIZE nEntries = aParam.GetEntryCount();
@@ -2147,3 +2135,24 @@ const ScPatternAttr* ScAttrRectIterator::GetNext( SCCOL& rCol1, SCCOL& rCol2,
return NULL; // is nix mehr
}
+// ============================================================================
+
+SCROW ScRowBreakIterator::NOT_FOUND = -1;
+
+ScRowBreakIterator::ScRowBreakIterator(set<SCROW>& rBreaks) :
+ mrBreaks(rBreaks),
+ maItr(rBreaks.begin()), maEnd(rBreaks.end())
+{
+}
+
+SCROW ScRowBreakIterator::first()
+{
+ maItr = mrBreaks.begin();
+ return maItr == maEnd ? NOT_FOUND : *maItr;
+}
+
+SCROW ScRowBreakIterator::next()
+{
+ ++maItr;
+ return maItr == maEnd ? NOT_FOUND : *maItr;
+}
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index c5922aa88dcc..e8ea10f7cf52 100755..100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -188,11 +188,11 @@ ScDocument::ScDocument( ScDocumentMode eMode,
// bNoSetDirty( TRUE ),
bNoSetDirty( FALSE ),
bInsertingFromOtherDoc( FALSE ),
- bImportingXML( FALSE ),
+ bLoadingMedium( false ),
+ bImportingXML( false ),
bXMLFromWrapper( FALSE ),
bCalcingAfterLoad( FALSE ),
bNoListening( FALSE ),
- bLoadingDone( TRUE ),
bIdleDisabled( FALSE ),
bInLinkUpdate( FALSE ),
bChartListenerCollectionNeedsUpdate( FALSE ),
@@ -897,6 +897,8 @@ BOOL ScDocument::CopyTab( SCTAB nOldPos, SCTAB nNewPos, const ScMarkData* pOnlyM
SetNoListening( TRUE ); // noch nicht bei CopyToTable/Insert
pTab[nOldPos]->CopyToTable(0, 0, MAXCOL, MAXROW, IDF_ALL, (pOnlyMarked != NULL),
pTab[nNewPos], pOnlyMarked );
+ pTab[nNewPos]->SetTabBgColor(pTab[nOldPos]->GetTabBgColor());
+
SCsTAB nDz;
/* if (nNewPos < nOldPos)
nDz = ((short)nNewPos) - (short)nOldPos + 1;
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index 77f59254e049..1861988d78aa 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -83,6 +83,7 @@
#include "tabprotection.hxx"
#include "formulaparserpool.hxx"
#include "clipparam.hxx"
+#include "sheetevents.hxx"
#include <memory>
@@ -285,6 +286,26 @@ void ScDocument::SetScenarioData( SCTAB nTab, const String& rComment,
}
}
+Color ScDocument::GetTabBgColor( SCTAB nTab ) const
+{
+ if (ValidTab(nTab) && pTab[nTab])
+ return pTab[nTab]->GetTabBgColor();
+ return Color(COL_AUTO);
+}
+
+void ScDocument::SetTabBgColor( SCTAB nTab, const Color& rColor )
+{
+ if (ValidTab(nTab) && pTab[nTab])
+ pTab[nTab]->SetTabBgColor(rColor);
+}
+
+bool ScDocument::IsDefaultTabBgColor( SCTAB nTab ) const
+{
+ if (ValidTab(nTab) && pTab[nTab])
+ return pTab[nTab]->GetTabBgColor() == COL_AUTO;
+ return true;
+}
+
void ScDocument::GetScenarioData( SCTAB nTab, String& rComment,
Color& rColor, USHORT& rFlags ) const
{
@@ -478,6 +499,52 @@ ScFormulaParserPool& ScDocument::GetFormulaParserPool() const
return *mxFormulaParserPool;
}
+const ScSheetEvents* ScDocument::GetSheetEvents( SCTAB nTab ) const
+{
+ if (VALIDTAB(nTab) && pTab[nTab])
+ return pTab[nTab]->GetSheetEvents();
+ return NULL;
+}
+
+void ScDocument::SetSheetEvents( SCTAB nTab, const ScSheetEvents* pNew )
+{
+ if (VALIDTAB(nTab) && pTab[nTab])
+ pTab[nTab]->SetSheetEvents( pNew );
+}
+
+bool ScDocument::HasSheetEventScript( sal_Int32 nEvent ) const
+{
+ for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++)
+ if (pTab[nTab])
+ {
+ const ScSheetEvents* pEvents = pTab[nTab]->GetSheetEvents();
+ if ( pEvents && pEvents->GetScript( nEvent ) )
+ return true;
+ }
+ return false;
+}
+
+BOOL ScDocument::HasCalcNotification( SCTAB nTab ) const
+{
+ if (VALIDTAB(nTab) && pTab[nTab])
+ return pTab[nTab]->GetCalcNotification();
+ return FALSE;
+}
+
+void ScDocument::SetCalcNotification( SCTAB nTab )
+{
+ // set only if not set before
+ if (VALIDTAB(nTab) && pTab[nTab] && !pTab[nTab]->GetCalcNotification())
+ pTab[nTab]->SetCalcNotification(TRUE);
+}
+
+void ScDocument::ResetCalcNotifications()
+{
+ for (SCTAB nTab = 0; nTab <= MAXTAB; nTab++)
+ if (pTab[nTab] && pTab[nTab]->GetCalcNotification())
+ pTab[nTab]->SetCalcNotification(FALSE);
+}
+
ScOutlineTable* ScDocument::GetOutlineTable( SCTAB nTab, BOOL bCreate )
{
ScOutlineTable* pVal = NULL;
@@ -1123,15 +1190,6 @@ BOOL ScDocument::SearchAndReplace(const SvxSearchItem& rSearchItem,
return bFound;
}
-BOOL ScDocument::IsFiltered( SCROW nRow, SCTAB nTab ) const
-{
- if (VALIDTAB(nTab))
- if (pTab[nTab])
- return pTab[nTab]->IsFiltered( nRow );
- DBG_ERROR("Falsche Tabellennummer");
- return 0;
-}
-
// Outline anpassen
BOOL ScDocument::UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, BOOL bShow )
@@ -1544,46 +1602,43 @@ ScRange ScDocument::GetRange( SCTAB nTab, const Rectangle& rMMRect )
nTwips = (long) (aPosRect.Top() / HMM_PER_TWIPS);
SCROW nY1 = 0;
- ScCoupledCompressedArrayIterator< SCROW, BYTE, USHORT> aIter(
- *(pTable->GetRowFlagsArray()), nY1, MAXROW, CR_HIDDEN, 0,
- *(pTable->GetRowHeightArray()));
bEnd = FALSE;
- while (!bEnd && aIter)
+ for (SCROW i = nY1; i <= MAXROW && !bEnd; ++i)
{
- nY1 = aIter.GetPos();
- nAdd = (long) *aIter;
+ if (pTable->RowHidden(i))
+ continue;
+
+ nY1 = i;
+ nAdd = static_cast<long>(pTable->GetRowHeight(i));
if (nSize+nAdd <= nTwips+1 && nY1<MAXROW)
{
nSize += nAdd;
++nY1;
- ++aIter;
}
else
bEnd = TRUE;
}
- if (!aIter)
- nY1 = aIter.GetIterEnd(); // all hidden down to the bottom
+ if (!bEnd)
+ nY1 = MAXROW; // all hidden down to the bottom
nTwips = (long) (aPosRect.Bottom() / HMM_PER_TWIPS);
SCROW nY2 = nY1;
- aIter.NewLimits( nY2, MAXROW);
bEnd = FALSE;
- while (!bEnd && aIter)
+ for (SCROW i = nY2; i <= MAXROW && !bEnd; ++i)
{
- nY2 = aIter.GetPos();
- nAdd = (long) *aIter;
+ nY2 = i;
+ nAdd = static_cast<long>(pTable->GetRowHeight(i));
if (nSize+nAdd < nTwips && nY2<MAXROW)
{
nSize += nAdd;
++nY2;
- ++aIter;
}
else
bEnd = TRUE;
}
- if (!aIter)
- nY2 = aIter.GetIterEnd(); // all hidden down to the bottom
+ if (!bEnd)
+ nY2 = MAXROW; // all hidden down to the bottom
return ScRange( nX1,nY1,nTab, nX2,nY2,nTab );
}
@@ -1621,24 +1676,33 @@ void lcl_SnapVer( ScTable* pTable, long& rVal, SCROW& rStartRow )
SCROW nRow = 0;
long nTwips = (long) (rVal / HMM_PER_TWIPS);
long nSnap = 0;
- ScCoupledCompressedArrayIterator< SCROW, BYTE, USHORT> aIter(
- *(pTable->GetRowFlagsArray()), nRow, MAXROW, CR_HIDDEN, 0,
- *(pTable->GetRowHeightArray()));
- while ( aIter )
+
+ bool bFound = false;
+ for (SCROW i = nRow; i <= MAXROW; ++i)
{
- nRow = aIter.GetPos();
- long nAdd = *aIter;
+ SCROW nLastRow;
+ if (pTable->RowHidden(i, NULL, &nLastRow))
+ {
+ i = nLastRow;
+ continue;
+ }
+
+ nRow = i;
+ long nAdd = pTable->GetRowHeight(i);
if ( nSnap + nAdd/2 < nTwips || nRow < rStartRow )
{
nSnap += nAdd;
++nRow;
- ++aIter;
}
else
+ {
+ bFound = true;
break;
+ }
}
- if (!aIter)
+ if (!bFound)
nRow = MAXROW; // all hidden down to the bottom
+
rVal = (long) ( nSnap * HMM_PER_TWIPS );
rStartRow = nRow;
}
@@ -1796,14 +1860,14 @@ Rectangle ScDocument::GetMMRect( SCCOL nStartCol, SCROW nStartRow,
for (i=0; i<nStartCol; i++)
aRect.Left() += GetColWidth(i,nTab);
- aRect.Top() += FastGetRowHeight( 0, nStartRow-1, nTab);
+ aRect.Top() += GetRowHeight( 0, nStartRow-1, nTab);
aRect.Right() = aRect.Left();
aRect.Bottom() = aRect.Top();
for (i=nStartCol; i<=nEndCol; i++)
aRect.Right() += GetColWidth(i,nTab);
- aRect.Bottom() += FastGetRowHeight( nStartRow, nEndRow, nTab);
+ aRect.Bottom() += GetRowHeight( nStartRow, nEndRow, nTab);
aRect.Left() = (long)(aRect.Left() * HMM_PER_TWIPS);
aRect.Right() = (long)(aRect.Right() * HMM_PER_TWIPS);
diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx
index ad2ec90379df..97aae44f1a7b 100644
--- a/sc/source/core/data/documen7.cxx
+++ b/sc/source/core/data/documen7.cxx
@@ -52,6 +52,7 @@
#include "scmod.hxx" // SC_MOD
#include "inputopt.hxx" // GetExpandRefs
#include "conditio.hxx"
+#include "sheetevents.hxx"
#include <tools/shl.hxx>
@@ -452,6 +453,8 @@ void ScDocument::TrackFormulas( ULONG nHintId )
if ( pFormulaTrack )
{
erBEEPER();
+ // outside the loop, check if any sheet has a "calculate" event script
+ bool bCalcEvent = HasSheetEventScript( SC_SHEETEVENT_CALCULATE );
SvtBroadcaster* pBC;
ScFormulaCell* pTrack;
ScFormulaCell* pNext;
@@ -465,6 +468,9 @@ void ScDocument::TrackFormulas( ULONG nHintId )
// Repaint fuer bedingte Formate mit relativen Referenzen:
if ( pCondFormList )
pCondFormList->SourceChanged( pTrack->aPos );
+ // for "calculate" event, keep track of which sheets are affected by tracked formulas
+ if ( bCalcEvent )
+ SetCalcNotification( pTrack->aPos.Tab() );
pTrack = pTrack->GetNextTrack();
} while ( pTrack );
pTrack = pFormulaTrack;
diff --git a/sc/source/core/data/documen9.cxx b/sc/source/core/data/documen9.cxx
index 9da788fca01c..abef7d53c2af 100644
--- a/sc/source/core/data/documen9.cxx
+++ b/sc/source/core/data/documen9.cxx
@@ -67,7 +67,7 @@
#include "charthelper.hxx"
using namespace ::com::sun::star;
-
+#include <stdio.h>
// -----------------------------------------------------------------------
@@ -722,7 +722,19 @@ void ScDocument::UpdateFontCharSet()
}
}
-void ScDocument::SetImportingXML( BOOL bVal )
+void ScDocument::SetLoadingMedium( bool bVal )
+{
+ bLoadingMedium = bVal;
+ for (SCTAB nTab = 0; nTab <= MAXTAB; ++nTab)
+ {
+ if (!pTab[nTab])
+ return;
+
+ pTab[nTab]->SetLoadingMedium(bVal);
+ }
+}
+
+void ScDocument::SetImportingXML( bool bVal )
{
bImportingXML = bVal;
if (pDrawLayer)
@@ -739,6 +751,8 @@ void ScDocument::SetImportingXML( BOOL bVal )
SetLayoutRTL( nTab, TRUE ); // includes mirroring; bImportingXML must be cleared first
}
}
+
+ SetLoadingMedium(bVal);
}
void ScDocument::SetXMLFromWrapper( BOOL bVal )
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 7c08c4327183..bef4cbf87396 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -52,6 +52,7 @@
#include <com/sun/star/text/WritingMode2.hpp>
#include <com/sun/star/script/XVBACompat.hpp>
+#include <com/sun/star/sheet/TablePageBreakData.hpp>
#include "document.hxx"
#include "table.hxx"
@@ -94,8 +95,12 @@
#include "clipparam.hxx"
#include <map>
+#include <limits>
namespace WritingMode2 = ::com::sun::star::text::WritingMode2;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::sheet::TablePageBreakData;
+using ::std::set;
struct ScDefaultAttr
{
@@ -125,6 +130,7 @@ void ScDocument::MakeTable( SCTAB nTab,bool _bNeedsNameCheck )
CreateValidTabName( aString ); // keine doppelten
pTab[nTab] = new ScTable(this, nTab, aString);
+ pTab[nTab]->SetLoadingMedium(bLoadingMedium);
++nMaxTableNumber;
}
}
@@ -2009,9 +2015,6 @@ void ScDocument::CopyNonFilteredFromClip( SCCOL nCol1, SCROW nRow1,
while ( nFlagTab < MAXTAB && !ppClipTab[nFlagTab] )
++nFlagTab;
- const ScBitMaskCompressedArray< SCROW, BYTE> & rSourceFlags =
- pCBFCP->pClipDoc->GetRowFlagsArray( nFlagTab);
-
SCROW nSourceRow = rClipStartRow;
SCROW nSourceEnd = 0;
if (pCBFCP->pClipDoc->GetClipParam().maRanges.Count())
@@ -2021,12 +2024,15 @@ void ScDocument::CopyNonFilteredFromClip( SCCOL nCol1, SCROW nRow1,
while ( nSourceRow <= nSourceEnd && nDestRow <= nRow2 )
{
// skip filtered rows
- nSourceRow = rSourceFlags.GetFirstForCondition( nSourceRow, nSourceEnd, CR_FILTERED, 0);
+ nSourceRow = pCBFCP->pClipDoc->FirstNonFilteredRow(nSourceRow, nSourceEnd, nFlagTab);
if ( nSourceRow <= nSourceEnd )
{
// look for more non-filtered rows following
- SCROW nFollow = rSourceFlags.GetBitStateEnd( nSourceRow, CR_FILTERED, 0) - nSourceRow;
+ SCROW nLastRow = nSourceRow;
+ pCBFCP->pClipDoc->RowFiltered(nSourceRow, nFlagTab, NULL, &nLastRow);
+ SCROW nFollow = nLastRow - nSourceRow;
+
if (nFollow > nSourceEnd - nSourceRow)
nFollow = nSourceEnd - nSourceRow;
if (nFollow > nRow2 - nDestRow)
@@ -2434,8 +2440,7 @@ void ScDocument::GetClipArea(SCCOL& nClipX, SCROW& nClipY, BOOL bIncludeFiltered
while ( nCountTab < MAXTAB && !pTab[nCountTab] )
++nCountTab;
- SCROW nResult = GetRowFlagsArray( nCountTab).CountForCondition(
- nStartRow, nEndRow, CR_FILTERED, 0);
+ SCROW nResult = CountNonFilteredRows(nStartRow, nEndRow, nCountTab);
if ( nResult > 0 )
nClipY = nResult - 1;
@@ -2474,8 +2479,13 @@ BOOL ScDocument::HasClipFilteredRows()
if (!rClipRanges.Count())
return false;
- return GetRowFlagsArray( nCountTab).HasCondition( rClipRanges.First()->aStart.Row(),
- rClipRanges.First()->aEnd.Row(), CR_FILTERED, CR_FILTERED);
+ for (ScRange* p = rClipRanges.First(); p; p = rClipRanges.Next())
+ {
+ bool bAnswer = pTab[nCountTab]->HasFilteredRows(p->aStart.Row(), p->aEnd.Row());
+ if (bAnswer)
+ return true;
+ }
+ return false;
}
@@ -3098,6 +3108,11 @@ void ScDocument::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, SCTAB nTab,
( nStartRow, nEndRow, nNewHeight, 1.0, 1.0 );
}
+void ScDocument::SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, USHORT nNewHeight )
+{
+ if ( ValidTab(nTab) && pTab[nTab] )
+ pTab[nTab]->SetRowHeightOnly( nStartRow, nEndRow, nNewHeight );
+}
void ScDocument::SetManualHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab, BOOL bManual )
{
@@ -3142,10 +3157,10 @@ USHORT ScDocument::GetOriginalHeight( SCROW nRow, SCTAB nTab ) const
}
-USHORT ScDocument::GetRowHeight( SCROW nRow, SCTAB nTab ) const
+USHORT ScDocument::GetRowHeight( SCROW nRow, SCTAB nTab, bool bHiddenAsZero ) const
{
if ( ValidTab(nTab) && pTab[nTab] )
- return pTab[nTab]->GetRowHeight( nRow );
+ return pTab[nTab]->GetRowHeight( nRow, NULL, NULL, bHiddenAsZero );
DBG_ERROR("Falsche Tabellennummer");
return 0;
}
@@ -3167,11 +3182,9 @@ ULONG ScDocument::GetRowHeight( SCROW nStartRow, SCROW nEndRow, SCTAB nTab ) con
return 0;
}
-ULONG ScDocument::FastGetRowHeight( SCROW nStartRow, SCROW nEndRow,
- SCTAB nTab ) const
+SCROW ScDocument::GetRowForHeight( SCTAB nTab, ULONG nHeight ) const
{
- return pTab[nTab]->pRowFlags->SumCoupledArrayForCondition( nStartRow,
- nEndRow, CR_HIDDEN, 0, *(pTab[nTab]->pRowHeight));
+ return pTab[nTab]->GetRowForHeight(nHeight);
}
ULONG ScDocument::GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow,
@@ -3192,29 +3205,6 @@ ULONG ScDocument::GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow,
return 0;
}
-
-const ScSummableCompressedArray< SCROW, USHORT> & ScDocument::GetRowHeightArray(
- SCTAB nTab ) const
-{
- const ScSummableCompressedArray< SCROW, USHORT> * pHeight;
- if ( ValidTab(nTab) && pTab[nTab] )
- pHeight = pTab[nTab]->GetRowHeightArray();
- else
- {
- DBG_ERROR("wrong sheet number");
- pHeight = 0;
- }
- if (!pHeight)
- {
- DBG_ERROR("no row heights at sheet");
- static ScSummableCompressedArray< SCROW, USHORT> aDummy( MAXROW,
- ScGlobal::nStdRowHeight);
- pHeight = &aDummy;
- }
- return *pHeight;
-}
-
-
SCROW ScDocument::GetHiddenRowCount( SCROW nRow, SCTAB nTab ) const
{
if ( ValidTab(nTab) && pTab[nTab] )
@@ -3397,6 +3387,259 @@ const ScBitMaskCompressedArray< SCROW, BYTE> & ScDocument::GetRowFlagsArray(
return *pFlags;
}
+void ScDocument::GetAllRowBreaks(set<SCROW>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return;
+
+ pTab[nTab]->GetAllRowBreaks(rBreaks, bPage, bManual);
+}
+
+void ScDocument::GetAllColBreaks(set<SCCOL>& rBreaks, SCTAB nTab, bool bPage, bool bManual) const
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return;
+
+ pTab[nTab]->GetAllColBreaks(rBreaks, bPage, bManual);
+}
+
+ScBreakType ScDocument::HasRowBreak(SCROW nRow, SCTAB nTab) const
+{
+ ScBreakType nType = BREAK_NONE;
+ if (!ValidTab(nTab) || !pTab[nTab] || !ValidRow(nRow))
+ return nType;
+
+ if (pTab[nTab]->HasRowPageBreak(nRow))
+ nType |= BREAK_PAGE;
+
+ if (pTab[nTab]->HasRowManualBreak(nRow))
+ nType |= BREAK_MANUAL;
+
+ return nType;
+}
+
+ScBreakType ScDocument::HasColBreak(SCCOL nCol, SCTAB nTab) const
+{
+ ScBreakType nType = BREAK_NONE;
+ if (!ValidTab(nTab) || !pTab[nTab] || !ValidCol(nCol))
+ return nType;
+
+ if (pTab[nTab]->HasColPageBreak(nCol))
+ nType |= BREAK_PAGE;
+
+ if (pTab[nTab]->HasColManualBreak(nCol))
+ nType |= BREAK_MANUAL;
+
+ return nType;
+}
+
+void ScDocument::SetRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual)
+{
+ if (!ValidTab(nTab) || !pTab[nTab] || !ValidRow(nRow))
+ return;
+
+ pTab[nTab]->SetRowBreak(nRow, bPage, bManual);
+}
+
+void ScDocument::SetColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual)
+{
+ if (!ValidTab(nTab) || !pTab[nTab] || !ValidCol(nCol))
+ return;
+
+ pTab[nTab]->SetColBreak(nCol, bPage, bManual);
+}
+
+void ScDocument::RemoveRowBreak(SCROW nRow, SCTAB nTab, bool bPage, bool bManual)
+{
+ if (!ValidTab(nTab) || !pTab[nTab] || !ValidRow(nRow))
+ return;
+
+ pTab[nTab]->RemoveRowBreak(nRow, bPage, bManual);
+}
+
+void ScDocument::RemoveColBreak(SCCOL nCol, SCTAB nTab, bool bPage, bool bManual)
+{
+ if (!ValidTab(nTab) || !pTab[nTab] || !ValidCol(nCol))
+ return;
+
+ pTab[nTab]->RemoveColBreak(nCol, bPage, bManual);
+}
+
+Sequence<TablePageBreakData> ScDocument::GetRowBreakData(SCTAB nTab) const
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return Sequence<TablePageBreakData>();
+
+ return pTab[nTab]->GetRowBreakData();
+}
+
+bool ScDocument::RowHidden(SCROW nRow, SCTAB nTab, SCROW* pFirstRow, SCROW* pLastRow)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return false;
+
+ return pTab[nTab]->RowHidden(nRow, pFirstRow, pLastRow);
+}
+
+bool ScDocument::RowHidden(SCROW nRow, SCTAB nTab, SCROW& rLastRow)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ {
+ rLastRow = nRow;
+ return false;
+ }
+
+ return pTab[nTab]->RowHidden(nRow, rLastRow);
+}
+
+
+bool ScDocument::HasHiddenRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return false;
+
+ return pTab[nTab]->HasHiddenRows(nStartRow, nEndRow);
+}
+
+bool ScDocument::ColHidden(SCCOL nCol, SCTAB nTab, SCCOL& rLastCol)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ {
+ rLastCol = nCol;
+ return false;
+ }
+
+ return pTab[nTab]->ColHidden(nCol, rLastCol);
+}
+
+bool ScDocument::ColHidden(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol, SCCOL* pLastCol)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ {
+ if (pFirstCol)
+ *pFirstCol = nCol;
+ if (pLastCol)
+ *pLastCol = nCol;
+ return false;
+ }
+
+ return pTab[nTab]->ColHidden(nCol, pFirstCol, pLastCol);
+}
+
+void ScDocument::SetRowHidden(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bHidden)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return;
+
+ pTab[nTab]->SetRowHidden(nStartRow, nEndRow, bHidden);
+}
+
+void ScDocument::SetColHidden(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bHidden)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return;
+
+ pTab[nTab]->SetColHidden(nStartCol, nEndCol, bHidden);
+}
+
+SCROW ScDocument::FirstVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return ::std::numeric_limits<SCROW>::max();;
+
+ return pTab[nTab]->FirstVisibleRow(nStartRow, nEndRow);
+}
+
+SCROW ScDocument::LastVisibleRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return ::std::numeric_limits<SCROW>::max();;
+
+ return pTab[nTab]->LastVisibleRow(nStartRow, nEndRow);
+}
+
+SCROW ScDocument::CountVisibleRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return 0;
+
+ return pTab[nTab]->CountVisibleRows(nStartRow, nEndRow);
+}
+
+bool ScDocument::RowFiltered(SCROW nRow, SCTAB nTab, SCROW* pFirstRow, SCROW* pLastRow)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return false;
+
+ return pTab[nTab]->RowFiltered(nRow, pFirstRow, pLastRow);
+}
+
+bool ScDocument::HasFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return false;
+
+ return pTab[nTab]->HasFilteredRows(nStartRow, nEndRow);
+}
+
+bool ScDocument::ColFiltered(SCCOL nCol, SCTAB nTab, SCCOL* pFirstCol, SCCOL* pLastCol)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return false;
+
+ return pTab[nTab]->ColFiltered(nCol, pFirstCol, pLastCol);
+}
+
+void ScDocument::SetRowFiltered(SCROW nStartRow, SCROW nEndRow, SCTAB nTab, bool bFiltered)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return;
+
+ pTab[nTab]->SetRowFiltered(nStartRow, nEndRow, bFiltered);
+}
+
+void ScDocument::SetColFiltered(SCCOL nStartCol, SCCOL nEndCol, SCTAB nTab, bool bFiltered)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return;
+
+ pTab[nTab]->SetColFiltered(nStartCol, nEndCol, bFiltered);
+}
+
+SCROW ScDocument::FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return ::std::numeric_limits<SCROW>::max();;
+
+ return pTab[nTab]->FirstNonFilteredRow(nStartRow, nEndRow);
+}
+
+SCROW ScDocument::LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return ::std::numeric_limits<SCROW>::max();;
+
+ return pTab[nTab]->LastNonFilteredRow(nStartRow, nEndRow);
+}
+
+SCROW ScDocument::CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow, SCTAB nTab)
+{
+ if (!ValidTab(nTab) || !pTab[nTab])
+ return 0;
+
+ return pTab[nTab]->CountNonFilteredRows(nStartRow, nEndRow);
+}
+
+void ScDocument::SyncColRowFlags()
+{
+ for (SCTAB i = 0; i <= nMaxTableNumber; ++i)
+ {
+ if (!ValidTab(i) || !pTab[i])
+ continue;
+
+ pTab[i]->SyncColRowFlags();
+ }
+}
SCROW ScDocument::GetLastFlaggedRow( SCTAB nTab ) const
{
@@ -3441,7 +3684,7 @@ SCCOL ScDocument::GetNextDifferentChangedCol( SCTAB nTab, SCCOL nStart) const
SCROW ScDocument::GetNextDifferentChangedRow( SCTAB nTab, SCROW nStart, bool bCareManualSize) const
{
- if ( ValidTab(nTab) && pTab[nTab] && pTab[nTab]->GetRowFlagsArray() && pTab[nTab]->GetRowHeightArray() )
+ if ( ValidTab(nTab) && pTab[nTab] && pTab[nTab]->GetRowFlagsArray() && pTab[nTab]->mpRowHeights )
{
BYTE nStartFlags = pTab[nTab]->GetRowFlags(nStart);
USHORT nStartHeight = pTab[nTab]->GetOriginalHeight(nStart);
@@ -3451,7 +3694,7 @@ SCROW ScDocument::GetNextDifferentChangedRow( SCTAB nTab, SCROW nStart, bool bCa
SCROW nFlagsEndRow;
SCROW nHeightEndRow;
BYTE nFlags = pTab[nTab]->GetRowFlagsArray()->GetValue( nRow, nIndex, nFlagsEndRow );
- USHORT nHeight = pTab[nTab]->GetRowHeightArray()->GetValue( nRow, nIndex, nHeightEndRow );
+ USHORT nHeight = pTab[nTab]->GetRowHeight(nRow, NULL, &nHeightEndRow);
if (((nStartFlags & CR_MANUALBREAK) != (nFlags & CR_MANUALBREAK)) ||
((nStartFlags & CR_MANUALSIZE) != (nFlags & CR_MANUALSIZE)) ||
(bCareManualSize && (nStartFlags & CR_MANUALSIZE) && (nStartHeight != nHeight)) ||
@@ -4781,6 +5024,11 @@ void ScDocument::SetRepeatArea( SCTAB nTab, SCCOL nStartCol, SCCOL nEndCol, SCRO
pTab[nTab]->SetRepeatArea( nStartCol, nEndCol, nStartRow, nEndRow );
}
+void ScDocument::InvalidatePageBreaks(SCTAB nTab)
+{
+ if (ValidTab(nTab) && pTab[nTab])
+ pTab[nTab]->InvalidatePageBreaks();
+}
void ScDocument::UpdatePageBreaks( SCTAB nTab, const ScRange* pUserArea )
{
@@ -4960,6 +5208,12 @@ SfxUndoManager* ScDocument::GetUndoManager()
return mpUndoManager;
}
+ScRowBreakIterator* ScDocument::GetRowBreakIterator(SCTAB nTab) const
+{
+ if (ValidTab(nTab) && pTab[nTab])
+ return new ScRowBreakIterator(pTab[nTab]->maRowPageBreaks);
+ return NULL;
+}
void ScDocument::EnableUndo( bool bVal )
{
diff --git a/sc/source/core/data/dpobject.cxx b/sc/source/core/data/dpobject.cxx
index 5394605969d0..a2a10329cf68 100755
--- a/sc/source/core/data/dpobject.cxx
+++ b/sc/source/core/data/dpobject.cxx
@@ -410,7 +410,7 @@ void ScDPObject::CreateOutput()
nNewRow = 0;
ScAddress aStart( aOutRange.aStart );
- aStart.SetRow( (USHORT) nNewRow );
+ aStart.SetRow(nNewRow);
pOutput->SetPosition( aStart );
//! modify aOutRange?
@@ -2434,6 +2434,14 @@ void ScDPCollection::WriteRefsTo( ScDPCollection& r ) const
}
}
+ScDPObject* ScDPCollection::GetByName(const String& rName) const
+{
+ for (USHORT i=0; i<nCount; i++)
+ if (static_cast<const ScDPObject*>(pItems[i])->GetName() == rName)
+ return static_cast<ScDPObject*>(pItems[i]);
+ return NULL;
+}
+
String ScDPCollection::CreateNewName( USHORT nMin ) const
{
String aBase = String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("DataPilot"));
diff --git a/sc/source/core/data/dpoutput.cxx b/sc/source/core/data/dpoutput.cxx
index 91688c6c0e2a..bdd6fd555b89 100755
--- a/sc/source/core/data/dpoutput.cxx
+++ b/sc/source/core/data/dpoutput.cxx
@@ -1185,9 +1185,9 @@ void ScDPOutput::GetPositionData(const ScAddress& rPos, DataPilotTablePositionDa
Reference<beans::XPropertySet> xPropSet(xSource, UNO_QUERY);
if (xPropSet.is())
{
- sal_Int32 nDataFieldCount = 0;
- Any any = xPropSet->getPropertyValue(rtl::OUString::createFromAscii("DataFieldCount"));
- if ((any >>= nDataFieldCount) && nDataFieldCount > 0)
+ sal_Int32 nDataFieldCount = ScUnoHelpFunctions::GetLongProperty( xPropSet,
+ rtl::OUString::createFromAscii(SC_UNO_DATAFIELDCOUNT) );
+ if (nDataFieldCount > 0)
aResData.DataFieldIndex = (nRow - nDataStartRow) % nDataFieldCount;
}
@@ -1267,9 +1267,9 @@ bool ScDPOutput::GetDataResultPositionData(vector<sheet::DataPilotFieldFilter>&
if (!xPropSet.is())
return false;
- sal_Int32 nDataFieldCount = 0;
- Any any = xPropSet->getPropertyValue(rtl::OUString::createFromAscii("DataFieldCount"));
- if (!(any >>= nDataFieldCount) || nDataFieldCount == 0)
+ sal_Int32 nDataFieldCount = ScUnoHelpFunctions::GetLongProperty( xPropSet,
+ rtl::OUString::createFromAscii(SC_UNO_DATAFIELDCOUNT) );
+ if (nDataFieldCount == 0)
// No data field is present in this datapilot table.
return false;
diff --git a/sc/source/core/data/dptabresmember.cxx b/sc/source/core/data/dptabresmember.cxx
deleted file mode 100644
index 8c3b7b164bc3..000000000000
--- a/sc/source/core/data/dptabresmember.cxx
+++ /dev/null
@@ -1,831 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright IBM Corporation 2009.
- * Copyright 2009 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: dptabresmember.cxx,v $
- * $Revision: 1.0 $
- *
- * 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.
- *
- ************************************************************************/
-#include "dptabresmember.hxx"
-// -----------------------------------------------------------------------
-ScDPResultMember( const ScDPResultData* pData, const ScDPParentDimData& rParentDimData ,
- BOOL bForceSub ) :
- pResultData( pData ),
- aParentDimData( rParentDimData ),
- /* pParentDim( pDim ),
- pParentLevel( pLev ),
- pMemberDesc( pDesc ),*/
- pChildDimension( NULL ),
- pDataRoot( NULL ),
- bHasElements( FALSE ),
- bForceSubTotal( bForceSub ),
- bHasHiddenDetails( FALSE ),
- bInitialized( FALSE ),
- nMemberStep( 1 ),
- bAutoHidden( FALSE )
-{
- // pParentLevel/pMemberDesc is 0 for root members
-}
-
-ScDPNormalResultMember::ScDPNormalResultMember( const ScDPResultData* pData,
- BOOL bForceSub ) :
- pResultData( pData ),
- pChildDimension( NULL ),
- pDataRoot( NULL ),
- bHasElements( FALSE ),
- bForceSubTotal( bForceSub ),
- bHasHiddenDetails( FALSE ),
- bInitialized( FALSE ),
- nMemberStep( 1 ),
- bAutoHidden( FALSE )
-{
-}
-
-ScDPNormalResultMember::~ScDPNormalResultMember()
-{
- delete pChildDimension;
- delete pDataRoot;
-}
-
-String ScDPNormalResultMember::GetName() const
-{
-// Wang Xu Ming -- 2009-6-10
-// DataPilot Migration
- const ScDPMember* pMemberDesc = GetDPMember();
- // End Comments
- if (pMemberDesc)
- return pMemberDesc->GetNameStr();
- else
- return ScGlobal::GetRscString(STR_PIVOT_TOTAL); // root member
-}
-
-void ScDPNormalResultMember::FillItemData( ScDPItemData& rData ) const
-{
-// Wang Xu Ming -- 2009-6-10
-// DataPilot Migration
- const ScDPMember* pMemberDesc = GetDPMember();
-// End Comments
- if (pMemberDesc)
- pMemberDesc->FillItemData( rData );
- else
- rData.SetString( ScGlobal::GetRscString(STR_PIVOT_TOTAL) ); // root member
-}
-
-BOOL ScDPNormalResultMember::IsNamedItem( /*const ScDPItemData& r */SCROW nIndex ) const
-{
- //! store ScDPMember pointer instead of ScDPMember ???
- const ScDPMember* pMemberDesc = GetDPMember();
- if (pMemberDesc)
- return ((ScDPMember*)pMemberDesc)->IsNamedItem(/* r*/ nIndex );
- return FALSE;
-}
-
-// Wang Xu Ming -- 2009-5-27
-// DataPilot Migration
-bool ScDPNormalResultMember::IsValidEntry( const vector< SCROW >& aMembers ) const
-{
- return GetEntryStatus( aMembers ) != ENTRY_INVALID;
-}
-// End Comments
-
-ENTRYSTATUS ScDPNormalResultMember::GetEntryStatus( const vector< SCROW >& aMembers ) const
-{
- if ( !IsValid() )
- return ENTRY_INVALID;
-
- const ScDPResultDimension* pChildDim = GetChildDimension();
- if (pChildDim)
- {
- if (aMembers.size() < 2)
- return ENTRY_INVALID;
-
- vector</*ScDPItemData*/SCROW>::const_iterator itr = aMembers.begin();
- vector</*ScDPItemData*/SCROW> aChildMembers(++itr, aMembers.end());
- return pChildDim->GetEntryStatus(aChildMembers);
- }
- else if( bHasHiddenDetails )
- return ENTRY_HASHIDDENDETAIL;
- else
- return ENTRY_VALID;
-}
-
-void ScDPNormalResultMember::InitFrom( const vector<ScDPDimension*>& ppDim, const vector<ScDPLevel*>& ppLev,
- size_t nPos, ScDPInitState& rInitState ,
- BOOL bInitChild /*= TRUE */)
- {
- // with LateInit, initialize only those members that have data
- if ( pResultData->IsLateInit() )
- return;
-
- bInitialized = TRUE;
-
- if (nPos >= ppDim.size() )
- return;
-
- // skip child dimension if details are not shown
- if ( GetDPMember() && !GetDPMember()->getShowDetails() )
- {
- // Wang Xu Ming -- 2009-6-16
- // Show DataLayout dimention
- nMemberStep = 1;
- while ( nPos < ppDim.size() )
- {
- if ( ppDim[nPos] ->getIsDataLayoutDimension() )
- {
- if ( !pChildDimension )
- pChildDimension = new ScDPResultDimension( pResultData );
- pChildDimension->InitFrom( ppDim, ppLev, nPos, rInitState , FALSE );
- return;
- }
- else
- { //find next dim
- nPos ++;
- nMemberStep ++;
- }
- }
- // End Comments
- bHasHiddenDetails = TRUE; // only if there is a next dimension
- return;
- }
-
- if ( bInitChild )
- {
- pChildDimension = new ScDPResultDimension( pResultData );
- pChildDimension->InitFrom( ppDim, ppLev, nPos, rInitState, TRUE );
- }
-}
-
-// Wang Xu Ming -- 2009-6-10
-// DataPilot Migration
-void ScDPNormalResultMember::LateInitFrom( LateInitParams& rParams/*const vector<ScDPDimension*>& ppDim, const vector<ScDPLevel*>& ppLev*/,
- const vector< SCROW >& pItemData, size_t nPos,
- ScDPInitState& rInitState )
-// End Comments
-{
- // without LateInit, everything has already been initialized
- if ( !pResultData->IsLateInit() )
- return;
-
- bInitialized = TRUE;
-
- if ( rParams.IsEnd( nPos ) /*nPos >= ppDim.size()*/)
- // No next dimension. Bail out.
- return;
-
- // skip child dimension if details are not shown
- if ( GetDPMember() && !GetDPMember()->getShowDetails() )
- {
- // Wang Xu Ming -- 2009-6-16
- // DataPilot Migration
- // Show DataLayout dimention
- nMemberStep = 1;
- while ( !rParams.IsEnd( nPos ) )
- {
- if ( rParams.GetDim( nPos ) ->getIsDataLayoutDimension() )
- {
- if ( !pChildDimension )
- pChildDimension = new ScDPResultDimension( pResultData );
- rParams.SetInitChild( FALSE );
- pChildDimension->LateInitFrom( rParams, pItemData, nPos, rInitState );
- return;
- }
- else
- { //find next dim
- nPos ++;
- nMemberStep ++;
- }
- }
- // End Comments
- bHasHiddenDetails = TRUE; // only if there is a next dimension
- return;
- }
-
- // LateInitFrom is called several times...
- if ( rParams.GetInitChild() )
- {
- if ( !pChildDimension )
- pChildDimension = new ScDPResultDimension( pResultData );
- pChildDimension->LateInitFrom( rParams, pItemData, nPos, rInitState );
- }
-}
-
-BOOL ScDPNormalResultMember::IsSubTotalInTitle(long nMeasure) const
-{
- BOOL bRet = FALSE;
- if ( pChildDimension && /*pParentLevel*/GetParentLevel() &&
- /*pParentLevel*/GetParentLevel()->IsOutlineLayout() && /*pParentLevel*/GetParentLevel()->IsSubtotalsAtTop() )
- {
- long nUserSubStart;
- long nSubTotals = GetSubTotalCount( &nUserSubStart );
- nSubTotals -= nUserSubStart; // visible count
- if ( nSubTotals )
- {
- if ( nMeasure == SC_DPMEASURE_ALL )
- nSubTotals *= pResultData->GetMeasureCount(); // number of subtotals that will be inserted
-
- // only a single subtotal row will be shown in the outline title row
- if ( nSubTotals == 1 )
- bRet = TRUE;
- }
- }
- return bRet;
-}
-
-long ScDPNormalResultMember::GetSize(long nMeasure) const
-{
- if ( !IsVisible() )
- return 0;
- const ScDPLevel* pParentLevel = GetParentLevel();
- long nExtraSpace = 0;
- if ( pParentLevel && pParentLevel->IsAddEmpty() )
- ++nExtraSpace;
-
- if ( pChildDimension )
- {
- // outline layout takes up an extra row for the title only if subtotals aren't shown in that row
- if ( pParentLevel && pParentLevel->IsOutlineLayout() && !IsSubTotalInTitle( nMeasure ) )
- ++nExtraSpace;
-
- long nSize = pChildDimension->GetSize(nMeasure);
- long nUserSubStart;
- long nUserSubCount = GetSubTotalCount( &nUserSubStart );
- nUserSubCount -= nUserSubStart; // for output size, use visible count
- if ( nUserSubCount )
- {
- if ( nMeasure == SC_DPMEASURE_ALL )
- nSize += pResultData->GetMeasureCount() * nUserSubCount;
- else
- nSize += nUserSubCount;
- }
- return nSize + nExtraSpace;
- }
- else
- {
- if ( nMeasure == SC_DPMEASURE_ALL )
- return pResultData->GetMeasureCount() + nExtraSpace;
- else
- return 1 + nExtraSpace;
- }
-}
-
-
-BOOL ScDPNormalResultMember::IsVisible() const
-{
- // not initialized -> shouldn't be there at all
- // (allocated only to preserve ordering)
- const ScDPLevel* pParentLevel = GetParentLevel();
- return ( bHasElements || ( pParentLevel && pParentLevel->getShowEmpty() ) ) && IsValid() && bInitialized;
-}
-
-BOOL ScDPNormalResultMember::IsValid() const
-{
- // non-Valid members are left out of calculation
-
- // was member set no invisible at the DataPilotSource?
- const ScDPMember* pMemberDesc =GetDPMember();
- if ( pMemberDesc && !pMemberDesc->getIsVisible() )
- return FALSE;
-
- if ( bAutoHidden )
- return FALSE;
-
- return TRUE;
-}
-
-BOOL ScDPNormalResultMember::HasHiddenDetails() const
-{
- // bHasHiddenDetails is set only if the "show details" flag is off,
- // and there was a child dimension to skip
-
- return bHasHiddenDetails;
-}
-
-long ScDPNormalResultMember::GetSubTotalCount( long* pUserSubStart ) const
-{
- if ( pUserSubStart )
- *pUserSubStart = 0; // default
-
- const ScDPLevel* pParentLevel = GetParentLevel();
-
- if ( bForceSubTotal ) // set if needed for root members
- return 1; // grand total is always "automatic"
- else if ( pParentLevel )
- {
- //! direct access via ScDPLevel
-
- uno::Sequence<sheet::GeneralFunction> aSeq = pParentLevel->getSubTotals();
- long nSequence = aSeq.getLength();
- if ( nSequence && aSeq[0] != sheet::GeneralFunction_AUTO )
- {
- // For manual subtotals, always add "automatic" as first function
- // (used for calculation, but not for display, needed for sorting, see lcl_GetForceFunc)
-
- ++nSequence;
- if ( pUserSubStart )
- *pUserSubStart = 1; // visible subtotals start at 1
- }
- return nSequence;
- }
- else
- return 0;
-}
-
-void ScDPNormalResultMember::ProcessData( const vector< SCROW >& aChildMembers, const ScDPResultDimension* pDataDim,
- const vector< SCROW >& aDataMembers, const vector<ScDPValueData>& aValues )
-{
- SetHasElements();
-
- if (pChildDimension)
- pChildDimension->ProcessData( aChildMembers, pDataDim, aDataMembers, aValues );
-
- if ( !pDataRoot )
- {
- pDataRoot = new ScDPDataMember( pResultData, NULL );
- if ( pDataDim )
- pDataRoot->InitFrom( pDataDim ); // recursive
- }
-
- ScDPSubTotalState aSubState; // initial state
-
- long nUserSubCount = GetSubTotalCount();
-
- // Calculate at least automatic if no subtotals are selected,
- // show only own values if there's no child dimension (innermost).
- if ( !nUserSubCount || !pChildDimension )
- nUserSubCount = 1;
-
- const ScDPLevel* pParentLevel = GetParentLevel();
-
- for (long nUserPos=0; nUserPos<nUserSubCount; nUserPos++) // including hidden "automatic"
- {
- // #i68338# if nUserSubCount is 1 (automatic only), don't set nRowSubTotalFunc
- if ( pChildDimension && nUserSubCount > 1 )
- {
- aSubState.nRowSubTotalFunc = nUserPos;
- aSubState.eRowForce = lcl_GetForceFunc( pParentLevel, nUserPos );
- }
-
- pDataRoot->ProcessData( aDataMembers, aValues, aSubState );
- }
-}
-
-void ScDPNormalResultMember::FillMemberResults( uno::Sequence<sheet::MemberResult>* pSequences,
- long& rPos, long nMeasure, BOOL bRoot,
- const String* pMemberName,
- const String* pMemberCaption )
-{
- // IsVisible() test is in ScDPResultDimension::FillMemberResults
- // (not on data layout dimension)
-
- long nSize = GetSize(nMeasure);
- sheet::MemberResult* pArray = pSequences->getArray();
- DBG_ASSERT( rPos+nSize <= pSequences->getLength(), "bumm" );
-
- BOOL bIsNumeric = FALSE;
- String aName;
- if ( pMemberName ) // if pMemberName != NULL, use instead of real member name
- aName = *pMemberName;
- else
- {
- ScDPItemData aItemData;
- FillItemData( aItemData );
- aName = aItemData.GetString();
- bIsNumeric = aItemData.IsValue();
- }
- const ScDPDimension* pParentDim = GetParentDim();
- if ( bIsNumeric && pParentDim && pResultData->IsNumOrDateGroup( pParentDim->GetDimension() ) )
- {
- // Numeric group dimensions use numeric entries for proper sorting,
- // but the group titles must be output as text.
- bIsNumeric = FALSE;
- }
-
- String aCaption = aName;
- if ( pMemberCaption ) // use pMemberCaption if != NULL
- aCaption = *pMemberCaption;
- if (!aCaption.Len())
- aCaption = ScGlobal::GetRscString(STR_EMPTYDATA);
-
- if ( !bIsNumeric )
- {
- // add a "'" character so a string isn't parsed as value in the output cell
- //! have a separate bit in Flags (MemberResultFlags) instead?
- aCaption.Insert( (sal_Unicode) '\'', 0 );
- }
-
- if ( nSize && !bRoot ) // root is overwritten by first dimension
- {
- pArray[rPos].Name = rtl::OUString(aName);
- pArray[rPos].Caption = rtl::OUString(aCaption);
- pArray[rPos].Flags |= sheet::MemberResultFlags::HASMEMBER;
-
- // set "continue" flag (removed for subtotals later)
- for (long i=1; i<nSize; i++)
- pArray[rPos+i].Flags |= sheet::MemberResultFlags::CONTINUE;
- }
-
- const ScDPLevel* pParentLevel = GetParentLevel();
- long nExtraSpace = 0;
- if ( pParentLevel && pParentLevel->IsAddEmpty() )
- ++nExtraSpace;
-
- BOOL bTitleLine = FALSE;
- if ( pParentLevel && pParentLevel->IsOutlineLayout() )
- bTitleLine = TRUE;
-
- // if the subtotals are shown at the top (title row) in outline layout,
- // no extra row for the subtotals is needed
- BOOL bSubTotalInTitle = IsSubTotalInTitle( nMeasure );
-
- BOOL bHasChild = ( pChildDimension != NULL );
- if (bHasChild)
- {
- if ( bTitleLine ) // in tabular layout the title is on a separate row
- ++rPos; // -> fill child dimension one row below
-
- if (bRoot) // same sequence for root member
- pChildDimension->FillMemberResults( pSequences, rPos, nMeasure );
- else
- // Wang Xu Ming -- 2009-6-16
- // DataPilot Migration
- // for show details
- pChildDimension->FillMemberResults( pSequences + nMemberStep/*1*/, rPos, nMeasure );
- // End Comments
-
- if ( bTitleLine ) // title row is included in GetSize, so the following
- --rPos; // positions are calculated with the normal values
- }
-
- rPos += nSize;
-
- long nUserSubStart;
- long nUserSubCount = GetSubTotalCount(&nUserSubStart);
- if ( nUserSubCount && pChildDimension && !bSubTotalInTitle )
- {
- long nMemberMeasure = nMeasure;
- long nSubSize = pResultData->GetCountForMeasure(nMeasure);
-
- rPos -= nSubSize * (nUserSubCount - nUserSubStart); // GetSize includes space for SubTotal
- rPos -= nExtraSpace; // GetSize includes the empty line
-
- for (long nUserPos=nUserSubStart; nUserPos<nUserSubCount; nUserPos++)
- {
- for ( long nSubCount=0; nSubCount<nSubSize; nSubCount++ )
- {
- if ( nMeasure == SC_DPMEASURE_ALL )
- nMemberMeasure = nSubCount;
-
- ScSubTotalFunc eForce = SUBTOTAL_FUNC_NONE;
- if (bHasChild)
- eForce = lcl_GetForceFunc( pParentLevel, nUserPos );
-
- String aSubStr = aName; //! caption?
- aSubStr += ' ';
- aSubStr += pResultData->GetMeasureString(nMemberMeasure, FALSE, eForce);
-
- pArray[rPos].Name = rtl::OUString(aName);
- pArray[rPos].Caption = rtl::OUString(aSubStr);
- pArray[rPos].Flags = ( pArray[rPos].Flags |
- ( sheet::MemberResultFlags::HASMEMBER | sheet::MemberResultFlags::SUBTOTAL) ) &
- ~sheet::MemberResultFlags::CONTINUE;
-
- if ( nMeasure == SC_DPMEASURE_ALL )
- {
- // data layout dimension is (direct/indirect) child of this.
- // data layout dimension must have name for all entries.
-
- uno::Sequence<sheet::MemberResult>* pLayoutSeq = pSequences;
- if (!bRoot)
- ++pLayoutSeq;
- ScDPResultDimension* pLayoutDim = pChildDimension;
- while ( pLayoutDim && !pLayoutDim->IsDataLayout() )
- {
- pLayoutDim = pLayoutDim->GetFirstChildDimension();
- ++pLayoutSeq;
- }
- if ( pLayoutDim )
- {
- sheet::MemberResult* pLayoutArray = pLayoutSeq->getArray();
- String aDataName = pResultData->GetMeasureDimensionName(nMemberMeasure);
- pLayoutArray[rPos].Name = rtl::OUString(aDataName);
- }
- }
-
- rPos += 1;
- }
- }
-
- rPos += nExtraSpace; // add again (subtracted above)
- }
-}
-
-void ScDPNormalResultMember::FillDataResults( const ScDPResultMember* pRefMember,
- uno::Sequence< uno::Sequence<sheet::DataResult> >& rSequence,
- long& rRow, long nMeasure ) const
-{
- // IsVisible() test is in ScDPResultDimension::FillDataResults
- // (not on data layout dimension)
- const ScDPLevel* pParentLevel = GetParentLevel();
- long nStartRow = rRow;
-
- long nExtraSpace = 0;
- if ( pParentLevel && pParentLevel->IsAddEmpty() )
- ++nExtraSpace;
-
- BOOL bTitleLine = FALSE;
- if ( pParentLevel && pParentLevel->IsOutlineLayout() )
- bTitleLine = TRUE;
-
- BOOL bSubTotalInTitle = IsSubTotalInTitle( nMeasure );
-
- BOOL bHasChild = ( pChildDimension != NULL );
- if (bHasChild)
- {
- if ( bTitleLine ) // in tabular layout the title is on a separate row
- ++rRow; // -> fill child dimension one row below
-
- pChildDimension->FillDataResults( pRefMember, rSequence, rRow, nMeasure ); // doesn't modify rRow
- rRow += (USHORT) GetSize( nMeasure );
-
- if ( bTitleLine ) // title row is included in GetSize, so the following
- --rRow; // positions are calculated with the normal values
- }
-
- long nUserSubStart;
- long nUserSubCount = GetSubTotalCount(&nUserSubStart);
- if ( nUserSubCount || !bHasChild )
- {
- // Calculate at least automatic if no subtotals are selected,
- // show only own values if there's no child dimension (innermost).
- if ( !nUserSubCount || !bHasChild )
- {
- nUserSubCount = 1;
- nUserSubStart = 0;
- }
-
- long nMemberMeasure = nMeasure;
- long nSubSize = pResultData->GetCountForMeasure(nMeasure);
- if (bHasChild)
- {
- rRow -= nSubSize * ( nUserSubCount - nUserSubStart ); // GetSize includes space for SubTotal
- rRow -= nExtraSpace; // GetSize includes the empty line
- }
-
- long nMoveSubTotal = 0;
- if ( bSubTotalInTitle )
- {
- nMoveSubTotal = rRow - nStartRow; // force to first (title) row
- rRow = nStartRow;
- }
-
- if ( pDataRoot )
- {
- ScDPSubTotalState aSubState; // initial state
-
- for (long nUserPos=nUserSubStart; nUserPos<nUserSubCount; nUserPos++)
- {
- if ( bHasChild && nUserSubCount > 1 )
- {
- aSubState.nRowSubTotalFunc = nUserPos;
- aSubState.eRowForce = lcl_GetForceFunc( /*pParentLevel*/GetParentLevel() , nUserPos );
- }
-
- for ( long nSubCount=0; nSubCount<nSubSize; nSubCount++ )
- {
- if ( nMeasure == SC_DPMEASURE_ALL )
- nMemberMeasure = nSubCount;
- else if ( pResultData->GetColStartMeasure() == SC_DPMEASURE_ALL )
- nMemberMeasure = SC_DPMEASURE_ALL;
-
- DBG_ASSERT( rRow < rSequence.getLength(), "bumm" );
- uno::Sequence<sheet::DataResult>& rSubSeq = rSequence.getArray()[rRow];
- long nSeqCol = 0;
- pDataRoot->FillDataRow( pRefMember, rSubSeq, nSeqCol, nMemberMeasure, bHasChild, aSubState );
-
- rRow += 1;
- }
- }
- }
- else
- rRow += nSubSize * ( nUserSubCount - nUserSubStart ); // empty rows occur when ShowEmpty is true
-
- // add extra space again if subtracted from GetSize above,
- // add to own size if no children
- rRow += nExtraSpace;
-
- rRow += nMoveSubTotal;
- }
-}
-
-void ScDPNormalResultMember::UpdateDataResults( const ScDPResultMember* pRefMember, long nMeasure ) const
-{
- // IsVisible() test is in ScDPResultDimension::FillDataResults
- // (not on data layout dimension)
-
- BOOL bHasChild = ( pChildDimension != NULL );
-
- long nUserSubCount = GetSubTotalCount();
- // process subtotals even if not shown
-// if ( nUserSubCount || !bHasChild )
- {
- // Calculate at least automatic if no subtotals are selected,
- // show only own values if there's no child dimension (innermost).
- if ( !nUserSubCount || !bHasChild )
- nUserSubCount = 1;
-
- long nMemberMeasure = nMeasure;
- long nSubSize = pResultData->GetCountForMeasure(nMeasure);
-
- if ( pDataRoot )
- {
- ScDPSubTotalState aSubState; // initial state
-
- for (long nUserPos=0; nUserPos<nUserSubCount; nUserPos++) // including hidden "automatic"
- {
- if ( bHasChild && nUserSubCount > 1 )
- {
- aSubState.nRowSubTotalFunc = nUserPos;
- aSubState.eRowForce = lcl_GetForceFunc( /*pParentLevel*/GetParentLevel() , nUserPos );
- }
-
- for ( long nSubCount=0; nSubCount<nSubSize; nSubCount++ )
- {
- if ( nMeasure == SC_DPMEASURE_ALL )
- nMemberMeasure = nSubCount;
- else if ( pResultData->GetColStartMeasure() == SC_DPMEASURE_ALL )
- nMemberMeasure = SC_DPMEASURE_ALL;
-
- pDataRoot->UpdateDataRow( pRefMember, nMemberMeasure, bHasChild, aSubState );
- }
- }
- }
- }
-
- if (bHasChild) // child dimension must be processed last, so the column total is known
- {
- pChildDimension->UpdateDataResults( pRefMember, nMeasure );
- }
-}
-
-void ScDPNormalResultMember::SortMembers( ScDPResultMember* pRefMember )
-{
- BOOL bHasChild = ( pChildDimension != NULL );
- if (bHasChild)
- pChildDimension->SortMembers( pRefMember ); // sorting is done at the dimension
-
- if ( IsRoot() && pDataRoot )
- {
- // use the row root member to sort columns
- // sub total count is always 1
-
- pDataRoot->SortMembers( pRefMember );
- }
-}
-
-void ScDPNormalResultMember::DoAutoShow( ScDPResultMember* pRefMember )
-{
- BOOL bHasChild = ( pChildDimension != NULL );
- if (bHasChild)
- pChildDimension->DoAutoShow( pRefMember ); // sorting is done at the dimension
-
- if ( IsRoot()&& pDataRoot )
- {
- // use the row root member to sort columns
- // sub total count is always 1
-
- pDataRoot->DoAutoShow( pRefMember );
- }
-}
-
-void ScDPNormalResultMember::ResetResults( BOOL bRoot )
-{
- if (pDataRoot)
- pDataRoot->ResetResults();
-
- if (pChildDimension)
- pChildDimension->ResetResults();
-
-// Wang Xu Ming -- 3/4/2009
-// Dim refresh and filter. SODC_19023
- // if (!bRoot)
- // bHasElements = FALSE;
-// End Comments
-}
-
-void ScDPNormalResultMember::UpdateRunningTotals( const ScDPResultMember* pRefMember, long nMeasure,
- ScDPRunningTotalState& rRunning, ScDPRowTotals& rTotals ) const
-{
- // IsVisible() test is in ScDPResultDimension::FillDataResults
- // (not on data layout dimension)
-
- rTotals.SetInColRoot( IsRoot() );
-
- BOOL bHasChild = ( pChildDimension != NULL );
-
- long nUserSubCount = GetSubTotalCount();
- if ( nUserSubCount || !bHasChild )
- {
- // Calculate at least automatic if no subtotals are selected,
- // show only own values if there's no child dimension (innermost).
- if ( !nUserSubCount || !bHasChild )
- nUserSubCount = 1;
-
- long nMemberMeasure = nMeasure;
- long nSubSize = pResultData->GetCountForMeasure(nMeasure);
-
- if ( pDataRoot )
- {
- ScDPSubTotalState aSubState; // initial state
-
- for (long nUserPos=0; nUserPos<nUserSubCount; nUserPos++) // including hidden "automatic"
- {
- if ( bHasChild && nUserSubCount > 1 )
- {
- aSubState.nRowSubTotalFunc = nUserPos;
- aSubState.eRowForce = lcl_GetForceFunc( /*pParentLevel*/GetParentLevel(), nUserPos );
- }
-
- for ( long nSubCount=0; nSubCount<nSubSize; nSubCount++ )
- {
- if ( nMeasure == SC_DPMEASURE_ALL )
- nMemberMeasure = nSubCount;
- else if ( pResultData->GetColStartMeasure() == SC_DPMEASURE_ALL )
- nMemberMeasure = SC_DPMEASURE_ALL;
-
- pDataRoot->UpdateRunningTotals( pRefMember, nMemberMeasure,
- bHasChild, aSubState, rRunning, rTotals, *this );
- }
- }
- }
- }
-
- if (bHasChild) // child dimension must be processed last, so the column total is known
- {
- pChildDimension->UpdateRunningTotals( pRefMember, nMeasure, rRunning, rTotals );
- }
-}
-
-void ScDPNormalResultMember::DumpState( const ScDPResultMember* pRefMember, ScDocument* pDoc, ScAddress& rPos ) const
-{
- lcl_DumpRow( String::CreateFromAscii("ScDPResultMember"), GetName(), NULL, pDoc, rPos );
- SCROW nStartRow = rPos.Row();
-
- if (pDataRoot)
- pDataRoot->DumpState( pRefMember, pDoc, rPos );
-
- if (pChildDimension)
- pChildDimension->DumpState( pRefMember, pDoc, rPos );
-
- lcl_Indent( pDoc, nStartRow, rPos );
-}
-
-ScDPAggData* ScDPNormalResultMember::GetColTotal( long nMeasure ) const
-{
- return lcl_GetChildTotal( const_cast<ScDPAggData*>(&aColTotal), nMeasure );
-}
-
-void ScDPNormalResultMember::FillVisibilityData(ScDPResultVisibilityData& rData) const
-{
- if (pChildDimension)
- pChildDimension->FillVisibilityData(rData);
-}
-// Wang Xu Ming -- 2009-6-10
-// DataPilot Migration
-SCROW ScDPNormalResultMember::GetDataId( ) const
-{
-// TODO:
- const ScDPMember* pMemberDesc = GetDPMember();
- if (pMemberDesc)
- return pMemberDesc->GetItemDataId();
- return -1;
-}
-
-// -----------------------------------------------------------------------
-ScDPHideDetailsMember:: ScDPHideDetailsMember( const ScDPResultData* pData, const ScDPParentDimData& rParentDimData,
- BOOL bForceSub ):ScDPResultMember(pData,rParentDimData, bForceSub)
-{
- pOrigMember = new ScDPNormalResultMember(pData,rParentDimData, bForceSub);
-
-} \ No newline at end of file
diff --git a/sc/source/core/data/dptabresmember.hxx b/sc/source/core/data/dptabresmember.hxx
deleted file mode 100644
index 72657167d07d..000000000000
--- a/sc/source/core/data/dptabresmember.hxx
+++ /dev/null
@@ -1,161 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright IBM Corporation 2009.
- * Copyright 2009 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: dptabresmember.hxx,v $
- * $Revision: 1.0 $
- *
- * 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 DPTABRESMEMBER_HXX
-#define DPTABRESMEMBER_HXX
-
-class ScDPNormalResultMember: public ScDPResultMember
-{
-private:
- // Wang Xu Ming -- 2009-6-9
- // DataPilot Migration
- ScDPParentDimData aParentDimData;
- // End Comments
- BOOL bHasElements:1;
- BOOL bForceSubTotal:1;
- BOOL bHasHiddenDetails:1;
- BOOL bInitialized:1;
- BOOL bAutoHidden:1;
- ScDPAggData aColTotal; // to store column totals
-
-// Wang Xu Ming -- 2009-6-9
-// DataPilot Migration
- USHORT nMemberStep; // step to show details
-// End Comments
-public:
- // Wang Xu Ming -- 2009-6-9
- // DataPilot Migration
- ScDPNormalResultMember( const ScDPResultData* pData, const ScDPParentDimData& rParentDimData,
- BOOL bForceSub ); //! Ref
- ScDPNormalResultMember( const ScDPResultData* pData, BOOL bForceSub );
- // End Comments
- ~ScDPNormalResultMember();
-
- // Wang Xu Ming -- 2009-6-9
- // DataPilot Migration
- // Add parameter: BOOL bInitChild
- void InitFrom( const ::std::vector<ScDPDimension*>& ppDim,
- const ::std::vector<ScDPLevel*>& ppLev,
- size_t nPos,
- ScDPInitState& rInitState,
- BOOL bInitChild = TRUE );
- // End Comments
- // Wang Xu Ming -- 2009-6-9
- // DataPilot Migration
- void LateInitFrom(
- LateInitParams& rParams,
- const ::std::vector< SCROW >& pItemData,
- size_t nPos,
- ScDPInitState& rInitState);
- // End Comments
-
- String GetName() const;
- void FillItemData( ScDPItemData& rData ) const;
- BOOL IsValid() const;
- BOOL IsVisible() const;
- long GetSize(long nMeasure) const;
- BOOL HasHiddenDetails() const;
- BOOL IsSubTotalInTitle(long nMeasure) const;
-
-// BOOL SubTotalEnabled() const;
- long GetSubTotalCount( long* pUserSubStart = NULL ) const;
-
-// Wang Xu Ming -- 2009-6-9
-// DataPilot Migration
-// Use item index
-// BOOL IsNamedItem( const ScDPItemData& r ) const;
- BOOL IsNamedItem( SCROW nIndex ) const;
-// End Comments
- bool IsValidEntry( const ::std::vector< SCROW >& aMembers ) const;
- ENTRYSTATUS GetEntryStatus( const ::std::vector<SCROW>& aMembers ) const;
-
- void SetHasElements() { bHasElements = TRUE; }
- void SetAutoHidden() { bAutoHidden = TRUE; }
-
- void ProcessData( const ::std::vector<SCROW>& aChildMembers,
- const ScDPResultDimension* pDataDim,
- const ::std::vector<SCROW>& aDataMembers,
- const ::std::vector<ScDPValueData>& aValues );
-
- void FillMemberResults( com::sun::star::uno::Sequence<
- com::sun::star::sheet::MemberResult>* pSequences,
- long& rPos, long nMeasure, BOOL bRoot,
- const String* pMemberName,
- const String* pMemberCaption );
-
- void FillDataResults( const ScDPResultMember* pRefMember,
- com::sun::star::uno::Sequence<
- com::sun::star::uno::Sequence<
- com::sun::star::sheet::DataResult> >& rSequence,
- long& rRow, long nMeasure ) const;
-
- void UpdateDataResults( const ScDPResultMember* pRefMember, long nMeasure ) const;
- void UpdateRunningTotals( const ScDPResultMember* pRefMember, long nMeasure,
- ScDPRunningTotalState& rRunning, ScDPRowTotals& rTotals ) const;
-
- void SortMembers( ScDPResultMember* pRefMember );
- void DoAutoShow( ScDPResultMember* pRefMember );
-
- void ResetResults( BOOL bRoot );
-
- void DumpState( const ScDPResultMember* pRefMember, ScDocument* pDoc, ScAddress& rPos ) const;
-
- // Wang Xu Ming -- 2009-6-9
- // DataPilot Migration
- const ScDPDimension* GetParentDim() const { return aParentDimData.mpParentDim; } //! Ref
- const ScDPLevel* GetParentLevel() const { return aParentDimData.mpParentLevel; } //! Ref
- const ScDPMember* GetDPMember()const { return aParentDimData.mpMemberDesc; } //! Ref
- inline SCROW GetOrder() const { return aParentDimData.mnOrder; } //! Ref
- inline BOOL IsRoot() const { return GetParentLevel() == NULL; }
- // End Comments
-
- ScDPAggData* GetColTotal( long nMeasure ) const;
-
- void FillVisibilityData(ScDPResultVisibilityData& rData) const;
-// Wang Xu Ming -- 2009-6-10
-// DataPilot Migration
- SCROW GetDataId( ) const ;
-// End Comments
-};
-
-class ScDPHideDetailsMember: public ScDPResultMember
-{
-private:
- ScDPNormalResultMember * pOrigMember;
-public:
- ScDPHideDetailsMember( const ScDPResultData* pData, const ScDPParentDimData& rParentDimData,
- BOOL bForceSub );
-
-
-};
-
-
-#endif //DPTABRESMEMBER_HXX
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index 3d7fc007818b..4df709768279 100755..100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -592,12 +592,14 @@ void ScDrawLayer::RecalcPos( SdrObject* pObj, const ScDrawObjData& rData, bool b
{
//! nicht mehrere Undos fuer ein Objekt erzeugen (hinteres kann dann weggelassen werden)
+ SCCOL nLastCol;
+ SCROW nLastRow;
if( bValid1 )
{
Point aPos( pDoc->GetColOffset( nCol1, nTab1 ), pDoc->GetRowOffset( nRow1, nTab1 ) );
- if( (pDoc->GetColFlags( nCol1, nTab1 ) & CR_HIDDEN) == 0 )
+ if (!pDoc->ColHidden(nCol1, nTab1, nLastCol))
aPos.X() += pDoc->GetColWidth( nCol1, nTab1 ) / 4;
- if( (pDoc->GetRowFlags( nRow1, nTab1 ) & CR_HIDDEN) == 0 )
+ if (!pDoc->RowHidden(nRow1, nTab1, nLastRow))
aPos.Y() += pDoc->GetRowHeight( nRow1, nTab1 ) / 2;
TwipsToMM( aPos.X() );
TwipsToMM( aPos.Y() );
@@ -629,9 +631,9 @@ void ScDrawLayer::RecalcPos( SdrObject* pObj, const ScDrawObjData& rData, bool b
if( bValid2 )
{
Point aPos( pDoc->GetColOffset( nCol2, nTab2 ), pDoc->GetRowOffset( nRow2, nTab2 ) );
- if( (pDoc->GetColFlags( nCol2, nTab2 ) & CR_HIDDEN) == 0 )
+ if (!pDoc->ColHidden(nCol2, nTab2, nLastCol))
aPos.X() += pDoc->GetColWidth( nCol2, nTab2 ) / 4;
- if( (pDoc->GetRowFlags( nRow2, nTab2 ) & CR_HIDDEN) == 0 )
+ if (!pDoc->RowHidden(nRow2, nTab2, nLastRow))
aPos.Y() += pDoc->GetRowHeight( nRow2, nTab2 ) / 2;
TwipsToMM( aPos.X() );
TwipsToMM( aPos.Y() );
@@ -735,8 +737,8 @@ BOOL ScDrawLayer::GetPrintArea( ScRange& rRange, BOOL bSetHor, BOOL bSetVer ) co
}
if (!bSetVer)
{
- nStartY = pDoc->FastGetRowHeight( 0, rRange.aStart.Row()-1, nTab);
- nEndY = nStartY + pDoc->FastGetRowHeight( rRange.aStart.Row(),
+ nStartY = pDoc->GetRowHeight( 0, rRange.aStart.Row()-1, nTab);
+ nEndY = nStartY + pDoc->GetRowHeight( rRange.aStart.Row(),
rRange.aEnd.Row(), nTab);
nStartY = (long)(nStartY * HMM_PER_TWIPS);
nEndY = (long)(nEndY * HMM_PER_TWIPS);
@@ -817,9 +819,9 @@ BOOL ScDrawLayer::GetPrintArea( ScRange& rRange, BOOL bSetHor, BOOL bSetVer ) co
{
nStartY = (long) (nStartY / HMM_PER_TWIPS);
nEndY = (long) (nEndY / HMM_PER_TWIPS);
- SCROW nRow = pDoc->FastGetRowForHeight( nTab, nStartY);
+ SCROW nRow = pDoc->GetRowForHeight( nTab, nStartY);
rRange.aStart.SetRow( nRow>0 ? (nRow-1) : 0);
- nRow = pDoc->FastGetRowForHeight( nTab, nEndY);
+ nRow = pDoc->GetRowForHeight( nTab, nEndY);
rRange.aEnd.SetRow( nRow == MAXROW ? MAXROW :
(nRow>0 ? (nRow-1) : 0));
}
@@ -1041,9 +1043,9 @@ void ScDrawLayer::MoveArea( SCTAB nTab, SCCOL nCol1,SCROW nRow1, SCCOL nCol2,SCR
for (SCsCOL s=-1; s>=nDx; s--)
aMove.X() -= pDoc->GetColWidth(s+(SCsCOL)nCol1,nTab);
if (nDy > 0)
- aMove.Y() += pDoc->FastGetRowHeight( nRow1, nRow1+nDy-1, nTab);
+ aMove.Y() += pDoc->GetRowHeight( nRow1, nRow1+nDy-1, nTab);
else
- aMove.Y() -= pDoc->FastGetRowHeight( nRow1+nDy, nRow1-1, nTab);
+ aMove.Y() -= pDoc->GetRowHeight( nRow1+nDy, nRow1-1, nTab);
if ( bNegativePage )
aMove.X() = -aMove.X();
@@ -1115,9 +1117,9 @@ void ScDrawLayer::HeightChanged( SCTAB nTab, SCROW nRow, long nDifTwips )
Rectangle aRect;
Point aTopLeft;
- aRect.Top() += pDoc->FastGetRowHeight( 0, nRow-1, nTab);
+ aRect.Top() += pDoc->GetRowHeight( 0, nRow-1, nTab);
aTopLeft.Y() = aRect.Top();
- aRect.Top() += pDoc->FastGetRowHeight(nRow,nTab);
+ aRect.Top() += pDoc->GetRowHeight(nRow, nTab);
aRect.Bottom() = MAXMM;
aRect.Left() = 0;
@@ -1143,14 +1145,14 @@ BOOL ScDrawLayer::HasObjectsInRows( SCTAB nTab, SCROW nStartRow, SCROW nEndRow )
Rectangle aTestRect;
- aTestRect.Top() += pDoc->FastGetRowHeight( 0, nStartRow-1, nTab);
+ aTestRect.Top() += pDoc->GetRowHeight( 0, nStartRow-1, nTab);
if (nEndRow==MAXROW)
aTestRect.Bottom() = MAXMM;
else
{
aTestRect.Bottom() = aTestRect.Top();
- aTestRect.Bottom() += pDoc->FastGetRowHeight( nStartRow, nEndRow, nTab);
+ aTestRect.Bottom() += pDoc->GetRowHeight( nStartRow, nEndRow, nTab);
TwipsToMM( aTestRect.Bottom() );
}
@@ -1706,7 +1708,7 @@ Rectangle ScDrawLayer::GetCellRect( ScDocument& rDoc, const ScAddress& rPos, boo
for( SCCOL nCol = 0; nCol < rPos.Col(); ++nCol )
aTopLeft.X() += rDoc.GetColWidth( nCol, rPos.Tab() );
if( rPos.Row() > 0 )
- aTopLeft.Y() += rDoc.FastGetRowHeight( 0, rPos.Row() - 1, rPos.Tab() );
+ aTopLeft.Y() += rDoc.GetRowHeight( 0, rPos.Row() - 1, rPos.Tab() );
// find bottom-right position of passed cell address
ScAddress aEndPos = rPos;
@@ -1721,7 +1723,7 @@ Rectangle ScDrawLayer::GetCellRect( ScDocument& rDoc, const ScAddress& rPos, boo
Point aBotRight = aTopLeft;
for( SCCOL nCol = rPos.Col(); nCol <= aEndPos.Col(); ++nCol )
aBotRight.X() += rDoc.GetColWidth( nCol, rPos.Tab() );
- aBotRight.Y() += rDoc.FastGetRowHeight( rPos.Row(), aEndPos.Row(), rPos.Tab() );
+ aBotRight.Y() += rDoc.GetRowHeight( rPos.Row(), aEndPos.Row(), rPos.Tab() );
// twips -> 1/100 mm
aTopLeft.X() = static_cast< long >( aTopLeft.X() * HMM_PER_TWIPS );
diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx
index 05e0d98c9719..8418cb3c3a25 100644
--- a/sc/source/core/data/fillinfo.cxx
+++ b/sc/source/core/data/fillinfo.cxx
@@ -52,7 +52,6 @@
#include "conditio.hxx"
#include "stlpool.hxx"
-
// -----------------------------------------------------------------------
const USHORT ROWINFO_MAX = 1024;
@@ -97,11 +96,13 @@ void lcl_GetMergeRange( SCsCOL nX, SCsROW nY, SCSIZE nArrY,
rStartY = nY;
BOOL bHOver = pInfo->bHOverlapped;
BOOL bVOver = pInfo->bVOverlapped;
+ SCCOL nLastCol;
+ SCROW nLastRow;
while (bHOver) // nY konstant
{
--rStartX;
- if (rStartX >= (SCsCOL) nX1 && (pDoc->GetColFlags(rStartX,nTab) & CR_HIDDEN) == 0)
+ if (rStartX >= (SCsCOL) nX1 && !pDoc->ColHidden(rStartX, nTab, nLastCol))
{
bHOver = pRowInfo[nArrY].pCellInfo[rStartX+1].bHOverlapped;
bVOver = pRowInfo[nArrY].pCellInfo[rStartX+1].bVOverlapped;
@@ -123,8 +124,8 @@ void lcl_GetMergeRange( SCsCOL nX, SCsROW nY, SCSIZE nArrY,
--nArrY; // lokale Kopie !
if (rStartX >= (SCsCOL) nX1 && rStartY >= (SCsROW) nY1 &&
- (pDoc->GetColFlags(rStartX,nTab) & CR_HIDDEN) == 0 &&
- (pDoc->GetRowFlags(rStartY,nTab) & CR_HIDDEN) == 0 &&
+ !pDoc->ColHidden(rStartX, nTab, nLastCol) &&
+ !pDoc->RowHidden(rStartY, nTab, nLastRow) &&
(SCsROW) pRowInfo[nArrY].nRowNo == rStartY)
{
bHOver = pRowInfo[nArrY].pCellInfo[rStartX+1].bHOverlapped;
@@ -141,8 +142,8 @@ void lcl_GetMergeRange( SCsCOL nX, SCsROW nY, SCSIZE nArrY,
const ScMergeAttr* pMerge;
if (rStartX >= (SCsCOL) nX1 && rStartY >= (SCsROW) nY1 &&
- (pDoc->GetColFlags(rStartX,nTab) & CR_HIDDEN) == 0 &&
- (pDoc->GetRowFlags(rStartY,nTab) & CR_HIDDEN) == 0 &&
+ !pDoc->ColHidden(rStartX, nTab, nLastCol) &&
+ !pDoc->RowHidden(rStartY, nTab, nLastRow) &&
(SCsROW) pRowInfo[nArrY].nRowNo == rStartY)
{
pMerge = (const ScMergeAttr*) &pRowInfo[nArrY].pCellInfo[rStartX+1].pPatternAttr->
@@ -155,12 +156,6 @@ void lcl_GetMergeRange( SCsCOL nX, SCsROW nY, SCSIZE nArrY,
rEndY = rStartY + pMerge->GetRowMerge() - 1;
}
-inline BOOL ScDocument::RowHidden( SCROW nRow, SCTAB nTab )
-{
- return ( pTab[nTab]->pRowFlags->GetValue(nRow) & CR_HIDDEN ) != 0;
-}
-
-
#define CELLINFO(x,y) pRowInfo[nArrY+y].pCellInfo[nArrX+x]
void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
@@ -356,7 +351,7 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX
nX = nArrX-1;
if ( ValidCol(nX) )
{
- if ( (GetColFlags(nX,nTab) & CR_HIDDEN) == 0 ) // Spalte nicht versteckt
+ if (!ColHidden(nX, nTab))
{
USHORT nThisWidth = (USHORT) (GetColWidth( nX, nTab ) * nScaleX);
if (!nThisWidth)
@@ -376,7 +371,8 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX
// #i58049#, #i57939# Hidden columns must be skipped here, or their attributes
// will disturb the output
- if ( (GetColFlags(nX,nTab) & CR_HIDDEN) == 0 ) // column not hidden
+ // TODO: Optimize this loop.
+ if (!ColHidden(nX, nTab))
{
USHORT nThisWidth = (USHORT) (GetColWidth( nX, nTab ) * nScaleX);
if (!nThisWidth)
@@ -481,7 +477,9 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX
do
{
- if ( nArrY==0 || !RowHidden( nCurRow,nTab ) )
+ SCROW nLastHiddenRow = -1;
+ bool bRowHidden = RowHidden(nCurRow, nTab, nLastHiddenRow);
+ if ( nArrY==0 || !bRowHidden )
{
RowInfo* pThisRowInfo = &pRowInfo[nArrY];
if (pBackground != pDefBackground) // Spalten-HG == Standard ?
@@ -551,6 +549,12 @@ void ScDocument::FillInfo( ScTableInfo& rTabInfo, SCCOL nX1, SCROW nY1, SCCOL nX
++nArrY;
}
+ else if (bRowHidden && nLastHiddenRow >= 0)
+ {
+ nCurRow = nLastHiddenRow;
+ if (nCurRow > nThisRow)
+ nCurRow = nThisRow;
+ }
++nCurRow;
}
while (nCurRow <= nThisRow && nCurRow <= nYExtra);
diff --git a/sc/source/core/data/makefile.mk b/sc/source/core/data/makefile.mk
index cf51e1e543a4..95ce6bcec179 100755..100644
--- a/sc/source/core/data/makefile.mk
+++ b/sc/source/core/data/makefile.mk
@@ -98,9 +98,12 @@ SLOFILES = \
$(SLO)$/patattr.obj \
$(SLO)$/pivot2.obj \
$(SLO)$/poolhelp.obj \
+ $(SLO)$/sheetevents.obj \
+ $(SLO)$/segmenttree.obj \
$(SLO)$/sortparam.obj \
$(SLO)$/stlpool.obj \
$(SLO)$/stlsheet.obj \
+ $(SLO)$/tabbgcolor.obj \
$(SLO)$/table1.obj \
$(SLO)$/table2.obj \
$(SLO)$/table3.obj \
@@ -128,6 +131,7 @@ EXCEPTIONSFILES= \
$(SLO)$/dptabres.obj \
$(SLO)$/dptabdat.obj \
$(SLO)$/global2.obj \
+ $(SLO)$/tabbgcolor.obj \
$(SLO)$/table1.obj \
$(SLO)$/table2.obj \
$(SLO)$/table3.obj \
@@ -148,7 +152,8 @@ EXCEPTIONSFILES= \
$(SLO)$/dbdocutl.obj \
$(SLO)$/dptabsrc.obj \
$(SLO)$/drwlayer.obj \
- $(SLO)$/globalx.obj
+ $(SLO)$/globalx.obj \
+ $(SLO)$/segmenttree.obj
.IF "$(OS)$(COM)$(CPUNAME)"=="LINUXGCCSPARC"
NOOPTFILES= \
@@ -164,7 +169,8 @@ EXCEPTIONSNOOPTFILES= \
.ELSE
EXCEPTIONSFILES+= \
$(SLO)$/cell.obj \
- $(SLO)$/global.obj
+ $(SLO)$/global.obj \
+ $(SLO)$/table5.obj
.ENDIF
# --- Tagets -------------------------------------------------------
diff --git a/sc/source/core/data/olinetab.cxx b/sc/source/core/data/olinetab.cxx
index 55f7ba46b898..af444c4b2123 100644
--- a/sc/source/core/data/olinetab.cxx
+++ b/sc/source/core/data/olinetab.cxx
@@ -41,10 +41,11 @@
#include "global.hxx"
#include "rechead.hxx"
#include "address.hxx"
+#include "table.hxx"
//------------------------------------------------------------------------
-ScOutlineEntry::ScOutlineEntry( SCCOLROW nNewStart, SCCOLROW nNewSize, BOOL bNewHidden ) :
+ScOutlineEntry::ScOutlineEntry( SCCOLROW nNewStart, SCCOLROW nNewSize, bool bNewHidden ) :
nStart ( nNewStart ),
nSize ( nNewSize ),
bHidden ( bNewHidden ),
@@ -93,12 +94,12 @@ void ScOutlineEntry::SetPosSize( SCCOLROW nNewPos, SCSIZE nNewSize )
SetSize( nNewSize );
}
-void ScOutlineEntry::SetHidden( BOOL bNewHidden )
+void ScOutlineEntry::SetHidden( bool bNewHidden )
{
bHidden = bNewHidden;
}
-void ScOutlineEntry::SetVisible( BOOL bNewVisible )
+void ScOutlineEntry::SetVisible( bool bNewVisible )
{
bVisible = bNewVisible;
}
@@ -637,10 +638,9 @@ BOOL ScOutlineArray::DeleteSpace( SCCOLROW nStartPos, SCSIZE nSize )
return bNeedSave;
}
-BOOL ScOutlineArray::ManualAction( SCCOLROW nStartPos, SCCOLROW nEndPos,
- BOOL bShow, const ScBitMaskCompressedArray< SCCOLROW, BYTE>& rHiddenFlags )
+bool ScOutlineArray::ManualAction( SCCOLROW nStartPos, SCCOLROW nEndPos, bool bShow, ScTable& rTable, bool bCol )
{
- BOOL bModified = FALSE;
+ bool bModified = false;
ScSubOutlineIterator aIter( this );
ScOutlineEntry* pEntry;
while((pEntry=aIter.GetNext())!=NULL)
@@ -654,18 +654,16 @@ BOOL ScOutlineArray::ManualAction( SCCOLROW nStartPos, SCCOLROW nEndPos,
{
// #i12341# hide if all columns/rows are hidden, show if at least one
// is visible
-
- SCCOLROW nEnd = rHiddenFlags.GetBitStateEnd( nEntryStart,
- CR_HIDDEN, CR_HIDDEN);
- BOOL bAllHidden = (nEntryEnd <= nEnd && nEnd <
+ SCCOLROW nEnd = rTable.LastHiddenColRow(nEntryStart, bCol);
+ bool bAllHidden = (nEntryEnd <= nEnd && nEnd <
::std::numeric_limits<SCCOLROW>::max());
- BOOL bToggle = ( bShow != bAllHidden );
+ bool bToggle = ( bShow != bAllHidden );
if ( bToggle )
{
pEntry->SetHidden( !bShow );
SetVisibleBelow( aIter.LastLevel(), aIter.LastEntry(), bShow, bShow );
- bModified = TRUE;
+ bModified = true;
}
}
}
diff --git a/sc/source/core/data/segmenttree.cxx b/sc/source/core/data/segmenttree.cxx
new file mode 100644
index 000000000000..86b53582d1d4
--- /dev/null
+++ b/sc/source/core/data/segmenttree.cxx
@@ -0,0 +1,582 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+#include "segmenttree.hxx"
+
+#include <mdds/flat_segment_tree.hpp>
+
+#include <limits>
+
+using ::std::numeric_limits;
+
+// ============================================================================
+
+template<typename _ValueType, typename _ExtValueType = _ValueType>
+class ScFlatSegmentsImpl
+{
+public:
+ typedef _ValueType ValueType;
+ typedef _ExtValueType ExtValueType;
+
+ struct RangeData
+ {
+ SCCOLROW mnPos1;
+ SCCOLROW mnPos2;
+ ValueType mnValue;
+ };
+
+ ScFlatSegmentsImpl(SCCOLROW nMax, ValueType nDefault);
+ ScFlatSegmentsImpl(const ScFlatSegmentsImpl& r);
+ ~ScFlatSegmentsImpl();
+
+ void setValue(SCCOLROW nPos1, SCCOLROW nPos2, ValueType nValue);
+ ValueType getValue(SCCOLROW nPos);
+ ExtValueType getSumValue(SCCOLROW nPos1, SCCOLROW nPos2);
+ bool getRangeData(SCCOLROW nPos, RangeData& rData);
+ void removeSegment(SCCOLROW nPos1, SCCOLROW nPos2);
+ void insertSegment(SCCOLROW nPos, SCCOLROW nSize, bool bSkipStartBoundary);
+
+ SCROW findLastNotOf(ValueType nValue) const;
+
+ // range iteration
+ bool getFirst(RangeData& rData);
+ bool getNext(RangeData& rData);
+
+ void enableTreeSearch(bool b)
+ {
+ mbTreeSearchEnabled = b;
+ }
+
+ void setInsertFromBack(bool b)
+ {
+ mbInsertFromBack = b;
+ }
+
+private:
+ typedef ::mdds::flat_segment_tree<SCCOLROW, ValueType> fst_type;
+ fst_type maSegments;
+ typename fst_type::const_iterator maItr;
+
+ bool mbTreeSearchEnabled:1;
+ bool mbInsertFromBack:1;
+};
+
+template<typename _ValueType, typename _ExtValueType>
+ScFlatSegmentsImpl<_ValueType, _ExtValueType>::ScFlatSegmentsImpl(SCCOLROW nMax, ValueType nDefault) :
+ maSegments(0, nMax+1, nDefault),
+ mbTreeSearchEnabled(true),
+ mbInsertFromBack(false)
+{
+}
+
+template<typename _ValueType, typename _ExtValueType>
+ScFlatSegmentsImpl<_ValueType, _ExtValueType>::ScFlatSegmentsImpl(const ScFlatSegmentsImpl<_ValueType, _ExtValueType>& r) :
+ maSegments(r.maSegments),
+ mbTreeSearchEnabled(r.mbTreeSearchEnabled),
+ mbInsertFromBack(r.mbInsertFromBack)
+{
+}
+
+template<typename _ValueType, typename _ExtValueType>
+ScFlatSegmentsImpl<_ValueType, _ExtValueType>::~ScFlatSegmentsImpl()
+{
+}
+
+template<typename _ValueType, typename _ExtValueType>
+void ScFlatSegmentsImpl<_ValueType, _ExtValueType>::setValue(SCCOLROW nPos1, SCCOLROW nPos2, ValueType nValue)
+{
+ if (mbInsertFromBack)
+ maSegments.insert_back(nPos1, nPos2+1, nValue);
+ else
+ maSegments.insert_front(nPos1, nPos2+1, nValue);
+}
+
+template<typename _ValueType, typename _ExtValueType>
+typename ScFlatSegmentsImpl<_ValueType, _ExtValueType>::ValueType ScFlatSegmentsImpl<_ValueType, _ExtValueType>::getValue(SCCOLROW nPos)
+{
+ ValueType nValue = 0;
+ if (!mbTreeSearchEnabled)
+ {
+ maSegments.search(nPos, nValue);
+ return nValue;
+ }
+
+ if (!maSegments.is_tree_valid())
+ maSegments.build_tree();
+
+ maSegments.search_tree(nPos, nValue);
+ return nValue;
+}
+
+template<typename _ValueType, typename _ExtValueType>
+typename ScFlatSegmentsImpl<_ValueType, _ExtValueType>::ExtValueType
+ScFlatSegmentsImpl<_ValueType, _ExtValueType>::getSumValue(SCCOLROW nPos1, SCCOLROW nPos2)
+{
+ RangeData aData;
+ if (!getRangeData(nPos1, aData))
+ return 0;
+
+ sal_uInt32 nValue = 0;
+
+ SCROW nCurPos = nPos1;
+ SCROW nEndPos = aData.mnPos2;
+ while (nEndPos <= nPos2)
+ {
+ nValue += aData.mnValue * (nEndPos - nCurPos + 1);
+ nCurPos = nEndPos + 1;
+ if (!getRangeData(nCurPos, aData))
+ break;
+
+ nEndPos = aData.mnPos2;
+ }
+ if (nCurPos <= nPos2)
+ {
+ nEndPos = ::std::min(nEndPos, nPos2);
+ nValue += aData.mnValue * (nEndPos - nCurPos + 1);
+ }
+ return nValue;
+}
+
+template<typename _ValueType, typename _ExtValueType>
+bool ScFlatSegmentsImpl<_ValueType, _ExtValueType>::getRangeData(SCCOLROW nPos, RangeData& rData)
+{
+ ValueType nValue;
+ SCCOLROW nPos1, nPos2;
+
+ if (mbTreeSearchEnabled)
+ {
+ if (!maSegments.is_tree_valid())
+ maSegments.build_tree();
+
+ if (!maSegments.search_tree(nPos, nValue, &nPos1, &nPos2))
+ return false;
+ }
+ else
+ {
+ // Conduct leaf-node only search. Faster when searching between range insertion.
+ if (!maSegments.search(nPos, nValue, &nPos1, &nPos2))
+ return false;
+ }
+
+ rData.mnPos1 = nPos1;
+ rData.mnPos2 = nPos2-1; // end point is not inclusive.
+ rData.mnValue = nValue;
+ return true;
+}
+
+template<typename _ValueType, typename _ExtValueType>
+void ScFlatSegmentsImpl<_ValueType, _ExtValueType>::removeSegment(SCCOLROW nPos1, SCCOLROW nPos2)
+{
+ maSegments.shift_left(nPos1, nPos2);
+}
+
+template<typename _ValueType, typename _ExtValueType>
+void ScFlatSegmentsImpl<_ValueType, _ExtValueType>::insertSegment(SCCOLROW nPos, SCCOLROW nSize, bool bSkipStartBoundary)
+{
+ maSegments.shift_right(nPos, nSize, bSkipStartBoundary);
+}
+
+template<typename _ValueType, typename _ExtValueType>
+SCCOLROW ScFlatSegmentsImpl<_ValueType, _ExtValueType>::findLastNotOf(ValueType nValue) const
+{
+ SCCOLROW nPos = numeric_limits<SCCOLROW>::max(); // position not found.
+ typename fst_type::const_reverse_iterator itr = maSegments.rbegin(), itrEnd = maSegments.rend();
+ // Note that when searching in reverse direction, we need to skip the first
+ // node, since the right-most leaf node does not store a valid value.
+ for (++itr; itr != itrEnd; ++itr)
+ {
+ if (itr->second != nValue)
+ {
+ nPos = (--itr)->first - 1;
+ break;
+ }
+ }
+ return nPos;
+}
+
+template<typename _ValueType, typename _ExtValueType>
+bool ScFlatSegmentsImpl<_ValueType, _ExtValueType>::getFirst(RangeData& rData)
+{
+ maItr = maSegments.begin();
+ return getNext(rData);
+}
+
+template<typename _ValueType, typename _ExtValueType>
+bool ScFlatSegmentsImpl<_ValueType, _ExtValueType>::getNext(RangeData& rData)
+{
+ typename fst_type::const_iterator itrEnd = maSegments.end();
+ if (maItr == itrEnd)
+ return false;
+
+ rData.mnPos1 = maItr->first;
+ rData.mnValue = maItr->second;
+
+ ++maItr;
+ if (maItr == itrEnd)
+ return false;
+
+ rData.mnPos2 = maItr->first - 1;
+ return true;
+}
+
+// ============================================================================
+
+class ScFlatUInt16SegmentsImpl : public ScFlatSegmentsImpl<sal_uInt16, sal_uInt32>
+{
+public:
+ explicit ScFlatUInt16SegmentsImpl(SCCOLROW nMax, sal_uInt16 nDefault) :
+ ScFlatSegmentsImpl<sal_uInt16, sal_uInt32>(nMax, nDefault)
+ {
+ }
+};
+
+// ----------------------------------------------------------------------------
+
+class ScFlatBoolSegmentsImpl : public ScFlatSegmentsImpl<bool>
+{
+public:
+ explicit ScFlatBoolSegmentsImpl(SCCOLROW nMax) :
+ ScFlatSegmentsImpl<bool>(nMax, false)
+ {
+ }
+
+ void setTrue(SCCOLROW nPos1, SCCOLROW nPos2);
+ void setFalse(SCCOLROW nPos1, SCCOLROW nPos2);
+};
+
+void ScFlatBoolSegmentsImpl::setTrue(SCCOLROW nPos1, SCCOLROW nPos2)
+{
+ setValue(nPos1, nPos2, true);
+}
+
+void ScFlatBoolSegmentsImpl::setFalse(SCCOLROW nPos1, SCCOLROW nPos2)
+{
+ setValue(nPos1, nPos2, false);
+}
+
+// ============================================================================
+
+ScFlatBoolRowSegments::ForwardIterator::ForwardIterator(ScFlatBoolRowSegments& rSegs) :
+ mrSegs(rSegs), mnCurPos(0), mnLastPos(-1), mbCurValue(false)
+{
+}
+
+bool ScFlatBoolRowSegments::ForwardIterator::getValue(SCROW nPos, bool& rVal)
+{
+ if (nPos >= mnCurPos)
+ // It can only go in a forward direction.
+ mnCurPos = nPos;
+
+ if (mnCurPos > mnLastPos)
+ {
+ // position not in the current segment. Update the current value.
+ ScFlatBoolRowSegments::RangeData aData;
+ if (!mrSegs.getRangeData(mnCurPos, aData))
+ return false;
+
+ mbCurValue = aData.mbValue;
+ mnLastPos = aData.mnRow2;
+ }
+
+ rVal = mbCurValue;
+ return true;
+}
+
+SCROW ScFlatBoolRowSegments::ForwardIterator::getLastPos() const
+{
+ return mnLastPos;
+}
+
+// ----------------------------------------------------------------------------
+
+ScFlatBoolRowSegments::RangeIterator::RangeIterator(ScFlatBoolRowSegments& rSegs) :
+ mrSegs(rSegs)
+{
+}
+
+bool ScFlatBoolRowSegments::RangeIterator::getFirst(RangeData& rRange)
+{
+ ScFlatBoolSegmentsImpl::RangeData aData;
+ if (!mrSegs.mpImpl->getFirst(aData))
+ return false;
+
+ rRange.mnRow1 = static_cast<SCROW>(aData.mnPos1);
+ rRange.mnRow2 = static_cast<SCROW>(aData.mnPos2);
+ rRange.mbValue = static_cast<bool>(aData.mnValue);
+ return true;
+}
+
+bool ScFlatBoolRowSegments::RangeIterator::getNext(RangeData& rRange)
+{
+ ScFlatBoolSegmentsImpl::RangeData aData;
+ if (!mrSegs.mpImpl->getNext(aData))
+ return false;
+
+ rRange.mnRow1 = static_cast<SCROW>(aData.mnPos1);
+ rRange.mnRow2 = static_cast<SCROW>(aData.mnPos2);
+ rRange.mbValue = static_cast<bool>(aData.mnValue);
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+
+ScFlatBoolRowSegments::ScFlatBoolRowSegments() :
+ mpImpl(new ScFlatBoolSegmentsImpl(static_cast<SCCOLROW>(MAXROW)))
+{
+}
+
+ScFlatBoolRowSegments::ScFlatBoolRowSegments(const ScFlatBoolRowSegments& r) :
+ mpImpl(new ScFlatBoolSegmentsImpl(*r.mpImpl))
+{
+}
+
+ScFlatBoolRowSegments::~ScFlatBoolRowSegments()
+{
+}
+
+void ScFlatBoolRowSegments::setTrue(SCROW nRow1, SCROW nRow2)
+{
+ mpImpl->setTrue(static_cast<SCCOLROW>(nRow1), static_cast<SCCOLROW>(nRow2));
+}
+
+void ScFlatBoolRowSegments::setFalse(SCROW nRow1, SCROW nRow2)
+{
+ mpImpl->setFalse(static_cast<SCCOLROW>(nRow1), static_cast<SCCOLROW>(nRow2));
+}
+
+bool ScFlatBoolRowSegments::getValue(SCROW nRow)
+{
+ return mpImpl->getValue(static_cast<SCCOLROW>(nRow));
+}
+
+bool ScFlatBoolRowSegments::getRangeData(SCROW nRow, RangeData& rData)
+{
+ ScFlatBoolSegmentsImpl::RangeData aData;
+ if (!mpImpl->getRangeData(static_cast<SCCOLROW>(nRow), aData))
+ return false;
+
+ rData.mbValue = aData.mnValue;
+ rData.mnRow1 = static_cast<SCROW>(aData.mnPos1);
+ rData.mnRow2 = static_cast<SCROW>(aData.mnPos2);
+ return true;
+}
+
+void ScFlatBoolRowSegments::removeSegment(SCROW nRow1, SCROW nRow2)
+{
+ mpImpl->removeSegment(static_cast<SCCOLROW>(nRow1), static_cast<SCCOLROW>(nRow2));
+}
+
+void ScFlatBoolRowSegments::insertSegment(SCROW nRow, SCROW nSize, bool bSkipStartBoundary)
+{
+ mpImpl->insertSegment(static_cast<SCCOLROW>(nRow), static_cast<SCCOLROW>(nSize), bSkipStartBoundary);
+}
+
+SCROW ScFlatBoolRowSegments::findLastNotOf(bool bValue) const
+{
+ return static_cast<SCROW>(mpImpl->findLastNotOf(bValue));
+}
+
+void ScFlatBoolRowSegments::enableTreeSearch(bool bEnable)
+{
+ mpImpl->enableTreeSearch(bEnable);
+}
+
+void ScFlatBoolRowSegments::setInsertFromBack(bool bInsertFromBack)
+{
+ mpImpl->setInsertFromBack(bInsertFromBack);
+}
+
+// ============================================================================
+
+ScFlatBoolColSegments::ScFlatBoolColSegments() :
+ mpImpl(new ScFlatBoolSegmentsImpl(static_cast<SCCOLROW>(MAXCOL)))
+{
+}
+
+ScFlatBoolColSegments::ScFlatBoolColSegments(const ScFlatBoolColSegments& r) :
+ mpImpl(new ScFlatBoolSegmentsImpl(*r.mpImpl))
+{
+}
+
+ScFlatBoolColSegments::~ScFlatBoolColSegments()
+{
+}
+
+void ScFlatBoolColSegments::setTrue(SCCOL nCol1, SCCOL nCol2)
+{
+ mpImpl->setTrue(static_cast<SCCOLROW>(nCol1), static_cast<SCCOLROW>(nCol2));
+}
+
+void ScFlatBoolColSegments::setFalse(SCCOL nCol1, SCCOL nCol2)
+{
+ mpImpl->setFalse(static_cast<SCCOLROW>(nCol1), static_cast<SCCOLROW>(nCol2));
+}
+
+bool ScFlatBoolColSegments::getValue(SCCOL nCol)
+{
+ return mpImpl->getValue(static_cast<SCCOLROW>(nCol));
+}
+
+bool ScFlatBoolColSegments::getRangeData(SCCOL nCol, RangeData& rData)
+{
+ ScFlatBoolSegmentsImpl::RangeData aData;
+ if (!mpImpl->getRangeData(static_cast<SCCOLROW>(nCol), aData))
+ return false;
+
+ rData.mbValue = aData.mnValue;
+ rData.mnCol1 = static_cast<SCCOL>(aData.mnPos1);
+ rData.mnCol2 = static_cast<SCCOL>(aData.mnPos2);
+ return true;
+}
+
+void ScFlatBoolColSegments::removeSegment(SCCOL nCol1, SCCOL nCol2)
+{
+ mpImpl->removeSegment(static_cast<SCCOLROW>(nCol1), static_cast<SCCOLROW>(nCol2));
+}
+
+void ScFlatBoolColSegments::insertSegment(SCCOL nCol, SCCOL nSize, bool bSkipStartBoundary)
+{
+ mpImpl->insertSegment(static_cast<SCCOLROW>(nCol), static_cast<SCCOLROW>(nSize), bSkipStartBoundary);
+}
+
+void ScFlatBoolColSegments::enableTreeSearch(bool bEnable)
+{
+ mpImpl->enableTreeSearch(bEnable);
+}
+
+void ScFlatBoolColSegments::setInsertFromBack(bool bInsertFromBack)
+{
+ mpImpl->setInsertFromBack(bInsertFromBack);
+}
+
+// ============================================================================
+
+
+// ============================================================================
+
+ScFlatUInt16RowSegments::ForwardIterator::ForwardIterator(ScFlatUInt16RowSegments& rSegs) :
+ mrSegs(rSegs), mnCurPos(0), mnLastPos(-1), mnCurValue(0)
+{
+}
+
+bool ScFlatUInt16RowSegments::ForwardIterator::getValue(SCROW nPos, sal_uInt16& rVal)
+{
+ if (nPos >= mnCurPos)
+ // It can only go in a forward direction.
+ mnCurPos = nPos;
+
+ if (mnCurPos > mnLastPos)
+ {
+ // position not in the current segment. Update the current value.
+ ScFlatUInt16RowSegments::RangeData aData;
+ if (!mrSegs.getRangeData(mnCurPos, aData))
+ return false;
+
+ mnCurValue = aData.mnValue;
+ mnLastPos = aData.mnRow2;
+ }
+
+ rVal = mnCurValue;
+ return true;
+}
+
+SCROW ScFlatUInt16RowSegments::ForwardIterator::getLastPos() const
+{
+ return mnLastPos;
+}
+
+// ----------------------------------------------------------------------------
+
+ScFlatUInt16RowSegments::ScFlatUInt16RowSegments(sal_uInt16 nDefault) :
+ mpImpl(new ScFlatUInt16SegmentsImpl(static_cast<SCCOLROW>(MAXROW), nDefault))
+{
+}
+
+ScFlatUInt16RowSegments::ScFlatUInt16RowSegments(const ScFlatUInt16RowSegments& r) :
+ mpImpl(new ScFlatUInt16SegmentsImpl(*r.mpImpl))
+{
+}
+
+ScFlatUInt16RowSegments::~ScFlatUInt16RowSegments()
+{
+}
+
+void ScFlatUInt16RowSegments::setValue(SCROW nRow1, SCROW nRow2, sal_uInt16 nValue)
+{
+ mpImpl->setValue(static_cast<SCCOLROW>(nRow1), static_cast<SCCOLROW>(nRow2), nValue);
+}
+
+sal_uInt16 ScFlatUInt16RowSegments::getValue(SCROW nRow)
+{
+ return mpImpl->getValue(static_cast<SCCOLROW>(nRow));
+}
+
+sal_uInt32 ScFlatUInt16RowSegments::getSumValue(SCROW nRow1, SCROW nRow2)
+{
+ return mpImpl->getSumValue(static_cast<SCCOLROW>(nRow1), static_cast<SCCOLROW>(nRow2));
+}
+
+bool ScFlatUInt16RowSegments::getRangeData(SCROW nRow, RangeData& rData)
+{
+ ScFlatUInt16SegmentsImpl::RangeData aData;
+ if (!mpImpl->getRangeData(static_cast<SCCOLROW>(nRow), aData))
+ return false;
+
+ rData.mnRow1 = aData.mnPos1;
+ rData.mnRow2 = aData.mnPos2;
+ rData.mnValue = aData.mnValue;
+ return true;
+}
+
+void ScFlatUInt16RowSegments::removeSegment(SCROW nRow1, SCROW nRow2)
+{
+ mpImpl->removeSegment(static_cast<SCCOLROW>(nRow1), static_cast<SCCOLROW>(nRow2));
+}
+
+void ScFlatUInt16RowSegments::insertSegment(SCROW nRow, SCROW nSize, bool bSkipStartBoundary)
+{
+ mpImpl->insertSegment(static_cast<SCCOLROW>(nRow), static_cast<SCCOLROW>(nSize), bSkipStartBoundary);
+}
+
+SCROW ScFlatUInt16RowSegments::findLastNotOf(sal_uInt16 nValue) const
+{
+ return static_cast<SCROW>(mpImpl->findLastNotOf(nValue));
+}
+
+void ScFlatUInt16RowSegments::enableTreeSearch(bool bEnable)
+{
+ mpImpl->enableTreeSearch(bEnable);
+}
+
+void ScFlatUInt16RowSegments::setInsertFromBack(bool bInsertFromBack)
+{
+ mpImpl->setInsertFromBack(bInsertFromBack);
+}
+
diff --git a/sc/source/core/data/sheetevents.cxx b/sc/source/core/data/sheetevents.cxx
new file mode 100755
index 000000000000..e9e430ef85d9
--- /dev/null
+++ b/sc/source/core/data/sheetevents.cxx
@@ -0,0 +1,141 @@
+/*************************************************************************
+ *
+ * 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: sheetdata.cxx,v $
+ * $Revision: 1.69.32.3 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+// INCLUDE ---------------------------------------------------------------
+
+#include <tools/debug.hxx>
+
+#include "sheetevents.hxx"
+
+// -----------------------------------------------------------------------
+
+// static
+rtl::OUString ScSheetEvents::GetEventName(sal_Int32 nEvent)
+{
+ if (nEvent<0 || nEvent>=SC_SHEETEVENT_COUNT)
+ {
+ DBG_ERRORFILE("invalid event number");
+ return rtl::OUString();
+ }
+
+ static const sal_Char* aEventNames[] =
+ {
+ "OnFocus", // SC_SHEETEVENT_FOCUS
+ "OnUnfocus", // SC_SHEETEVENT_UNFOCUS
+ "OnSelect", // SC_SHEETEVENT_SELECT
+ "OnDoubleClick", // SC_SHEETEVENT_DOUBLECLICK
+ "OnRightClick", // SC_SHEETEVENT_RIGHTCLICK
+ "OnChange", // SC_SHEETEVENT_CHANGE
+ "OnCalculate" // SC_SHEETEVENT_CALCULATE
+ };
+ return rtl::OUString::createFromAscii(aEventNames[nEvent]);
+}
+
+// -----------------------------------------------------------------------
+
+ScSheetEvents::ScSheetEvents() :
+ mpScriptNames(NULL)
+{
+}
+
+ScSheetEvents::~ScSheetEvents()
+{
+ Clear();
+}
+
+void ScSheetEvents::Clear()
+{
+ if (mpScriptNames)
+ {
+ for (sal_Int32 nEvent=0; nEvent<SC_SHEETEVENT_COUNT; ++nEvent)
+ delete mpScriptNames[nEvent];
+ delete[] mpScriptNames;
+ mpScriptNames = NULL;
+ }
+}
+
+ScSheetEvents::ScSheetEvents(const ScSheetEvents& rOther) :
+ mpScriptNames(NULL)
+{
+ *this = rOther;
+}
+
+const ScSheetEvents& ScSheetEvents::operator=(const ScSheetEvents& rOther)
+{
+ Clear();
+ if (rOther.mpScriptNames)
+ {
+ mpScriptNames = new rtl::OUString*[SC_SHEETEVENT_COUNT];
+ for (sal_Int32 nEvent=0; nEvent<SC_SHEETEVENT_COUNT; ++nEvent)
+ if (rOther.mpScriptNames[nEvent])
+ mpScriptNames[nEvent] = new rtl::OUString(*rOther.mpScriptNames[nEvent]);
+ else
+ mpScriptNames[nEvent] = NULL;
+ }
+ return *this;
+}
+
+const rtl::OUString* ScSheetEvents::GetScript(sal_Int32 nEvent) const
+{
+ if (nEvent<0 || nEvent>=SC_SHEETEVENT_COUNT)
+ {
+ DBG_ERRORFILE("invalid event number");
+ return NULL;
+ }
+
+ if (mpScriptNames)
+ return mpScriptNames[nEvent];
+ return NULL;
+}
+
+void ScSheetEvents::SetScript(sal_Int32 nEvent, const rtl::OUString* pNew)
+{
+ if (nEvent<0 || nEvent>=SC_SHEETEVENT_COUNT)
+ {
+ DBG_ERRORFILE("invalid event number");
+ return;
+ }
+
+ if (!mpScriptNames)
+ {
+ mpScriptNames = new rtl::OUString*[SC_SHEETEVENT_COUNT];
+ for (sal_Int32 nEventIdx=0; nEventIdx<SC_SHEETEVENT_COUNT; ++nEventIdx)
+ mpScriptNames[nEventIdx] = NULL;
+ }
+ delete mpScriptNames[nEvent];
+ if (pNew)
+ mpScriptNames[nEvent] = new rtl::OUString(*pNew);
+ else
+ mpScriptNames[nEvent] = NULL;
+}
+
diff --git a/sc/source/core/data/stlsheet.cxx b/sc/source/core/data/stlsheet.cxx
index 4a4210a7925c..a3319eafd3fd 100644
--- a/sc/source/core/data/stlsheet.cxx
+++ b/sc/source/core/data/stlsheet.cxx
@@ -171,7 +171,7 @@ SfxItemSet& __EXPORT ScStyleSheet::GetItemSet()
// gespeicherte Printer noch nicht geladen ist!
ScDocument* pDoc = ((ScStyleSheetPool&)GetPool()).GetDocument();
- if ( pDoc && pDoc->IsLoadingDone() )
+ if ( pDoc )
{
// Setzen von sinnvollen Default-Werten:
SvxPageItem aPageItem( ATTR_PAGE );
diff --git a/sc/source/core/data/tabbgcolor.cxx b/sc/source/core/data/tabbgcolor.cxx
new file mode 100644
index 000000000000..a3d9eec16d99
--- /dev/null
+++ b/sc/source/core/data/tabbgcolor.cxx
@@ -0,0 +1,62 @@
+/*************************************************************************
+ *
+ * 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: tabbgcolor.hxx,v $
+ * $Revision: 1.00 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+
+
+// INCLUDE ---------------------------------------------------------------
+
+#include "tabbgcolor.hxx"
+
+bool ScUndoTabColorInfo::IsDefaultOldTabBgColor() const
+{
+ return maOldTabBgColor == Color(COL_AUTO);
+}
+
+bool ScUndoTabColorInfo::IsDefaultNewTabBgColor() const
+{
+ return maOldTabBgColor == Color(COL_AUTO);
+}
+
+ScUndoTabColorInfo::ScUndoTabColorInfo(SCTAB nTab) :
+ mnTabId(nTab),
+ maOldTabBgColor(COL_AUTO),
+ maNewTabBgColor(COL_AUTO)
+{
+}
+
+ScUndoTabColorInfo::ScUndoTabColorInfo(const ScUndoTabColorInfo& r) :
+ mnTabId(r.mnTabId),
+ maOldTabBgColor(r.maOldTabBgColor),
+ maNewTabBgColor(r.maNewTabBgColor)
+{
+}
diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx
index a8b819072c21..87561abf1513 100644
--- a/sc/source/core/data/table1.cxx
+++ b/sc/source/core/data/table1.cxx
@@ -112,6 +112,8 @@
#include "hints.hxx" // fuer Paint-Broadcast
#include "prnsave.hxx"
#include "tabprotection.hxx"
+#include "sheetevents.hxx"
+#include "segmenttree.hxx"
// STATIC DATA -----------------------------------------------------------
@@ -131,14 +133,20 @@ ScTable::ScTable( ScDocument* pDoc, SCTAB nNewTab, const String& rNewName,
nRepeatStartY( SCROW_REPEAT_NONE ),
pTabProtection( NULL ),
pColWidth( NULL ),
- pRowHeight( NULL ),
+ mpRowHeights( static_cast<ScFlatUInt16RowSegments*>(NULL) ),
pColFlags( NULL ),
pRowFlags( NULL ),
+ mpHiddenCols(new ScFlatBoolColSegments),
+ mpHiddenRows(new ScFlatBoolRowSegments),
+ mpFilteredCols(new ScFlatBoolColSegments),
+ mpFilteredRows(new ScFlatBoolRowSegments),
pOutlineTable( NULL ),
+ pSheetEvents( NULL ),
bTableAreaValid( FALSE ),
bVisible( TRUE ),
bStreamValid( FALSE ),
bPendingRowHeights( FALSE ),
+ bCalcNotification( FALSE ),
nTab( nNewTab ),
nRecalcLvl( 0 ),
pDocument( pDoc ),
@@ -151,8 +159,10 @@ ScTable::ScTable( ScDocument* pDoc, SCTAB nNewTab, const String& rNewName,
nLockCount( 0 ),
pScenarioRanges( NULL ),
aScenarioColor( COL_LIGHTGRAY ),
+ aTabBgColor( COL_AUTO ),
nScenarioFlags( 0 ),
- bActiveScenario( FALSE )
+ bActiveScenario( FALSE ),
+ mbPageBreaksValid(false)
{
if (bColInfo)
@@ -169,7 +179,7 @@ ScTable::ScTable( ScDocument* pDoc, SCTAB nNewTab, const String& rNewName,
if (bRowInfo)
{
- pRowHeight = new ScSummableCompressedArray< SCROW, USHORT>( MAXROW, ScGlobal::nStdRowHeight);
+ mpRowHeights.reset(new ScFlatUInt16RowSegments(ScGlobal::nStdRowHeight));
pRowFlags = new ScBitMaskCompressedArray< SCROW, BYTE>( MAXROW, 0);
}
@@ -211,8 +221,8 @@ ScTable::~ScTable()
delete[] pColWidth;
delete[] pColFlags;
- delete pRowHeight;
delete pRowFlags;
+ delete pSheetEvents;
delete pOutlineTable;
delete pSearchParam;
delete pSearchText;
@@ -271,6 +281,22 @@ void ScTable::SetLoadingRTL( BOOL bSet )
bLoadingRTL = bSet;
}
+const Color& ScTable::GetTabBgColor() const
+{
+ return aTabBgColor;
+}
+
+void ScTable::SetTabBgColor(const Color& rColor)
+{
+ if (aTabBgColor != rColor)
+ {
+ // The tab color has changed. Set this table 'modified'.
+ aTabBgColor = rColor;
+ if (IsStreamValid())
+ SetStreamValid(false);
+ }
+}
+
void ScTable::SetScenario( BOOL bFlag )
{
bScenario = bFlag;
@@ -969,9 +995,10 @@ BOOL ScTable::ValidNextPos( SCCOL nCol, SCROW nRow, const ScMarkData& rMark,
// auf der naechsten Zelle landet, auch wenn die geschuetzt/nicht markiert ist.
//! per Extra-Parameter steuern, nur fuer Cursor-Bewegung ???
- if ( pRowFlags && ( pRowFlags->GetValue(nRow) & CR_HIDDEN ) )
+ if (RowHidden(nRow))
return FALSE;
- if ( pColFlags && ( pColFlags[nCol] & CR_HIDDEN ) )
+
+ if (ColHidden(nCol))
return FALSE;
}
@@ -998,8 +1025,8 @@ void ScTable::GetNextPos( SCCOL& rCol, SCROW& rRow, SCsCOL nMovX, SCsROW nMovY,
{
BOOL bUp = ( nMovY < 0 );
nRow = rMark.GetNextMarked( nCol, nRow, bUp );
- while ( VALIDROW(nRow) && ((pRowFlags && (pRowFlags->GetValue(nRow) & CR_HIDDEN)) ||
- pDocument->HasAttrib(nCol, nRow, nTab, nCol, nRow, nTab, HASATTR_OVERLAPPED)) )
+ while ( VALIDROW(nRow) &&
+ (RowHidden(nRow) || pDocument->HasAttrib(nCol, nRow, nTab, nCol, nRow, nTab, HASATTR_OVERLAPPED)) )
{
// #53697# ausgeblendete ueberspringen (s.o.)
nRow += nMovY;
@@ -1009,7 +1036,7 @@ void ScTable::GetNextPos( SCCOL& rCol, SCROW& rRow, SCsCOL nMovX, SCsROW nMovY,
while ( nRow < 0 || nRow > MAXROW )
{
nCol = sal::static_int_cast<SCsCOL>( nCol + static_cast<SCsCOL>(nMovY) );
- while ( VALIDCOL(nCol) && pColFlags && (pColFlags[nCol] & CR_HIDDEN) )
+ while ( VALIDCOL(nCol) && ColHidden(nCol) )
nCol = sal::static_int_cast<SCsCOL>( nCol + static_cast<SCsCOL>(nMovY) ); // #53697# skip hidden rows (see above)
if (nCol < 0)
{
@@ -1028,8 +1055,8 @@ void ScTable::GetNextPos( SCCOL& rCol, SCROW& rRow, SCsCOL nMovX, SCsROW nMovY,
else if (nRow > MAXROW)
nRow = 0;
nRow = rMark.GetNextMarked( nCol, nRow, bUp );
- while ( VALIDROW(nRow) && ((pRowFlags && (pRowFlags->GetValue(nRow) & CR_HIDDEN)) ||
- pDocument->HasAttrib(nCol, nRow, nTab, nCol, nRow, nTab, HASATTR_OVERLAPPED)) )
+ while ( VALIDROW(nRow) &&
+ (RowHidden(nRow) || pDocument->HasAttrib(nCol, nRow, nTab, nCol, nRow, nTab, HASATTR_OVERLAPPED)) )
{
// #53697# ausgeblendete ueberspringen (s.o.)
nRow += nMovY;
@@ -1420,93 +1447,140 @@ void ScTable::ExtendPrintArea( OutputDevice* pDev,
double nPPTX = aPix1000.X() / 1000.0;
double nPPTY = aPix1000.Y() / 1000.0;
- BOOL bEmpty[MAXCOLCOUNT];
- for (SCCOL i=0; i<=MAXCOL; i++)
- bEmpty[i] = ( aCol[i].GetCellCount() == 0 );
-
- SCSIZE nIndex;
- SCCOL nPrintCol = rEndCol;
- SCSIZE nRowFlagsIndex;
- SCROW nRowFlagsEndRow;
- BYTE nRowFlag = pRowFlags->GetValue( nStartRow, nRowFlagsIndex, nRowFlagsEndRow);
- for (SCROW nRow = nStartRow; nRow<=nEndRow; nRow++)
+ // First, mark those columns that we need to skip i.e. hidden and empty columns.
+
+ ScFlatBoolColSegments aSkipCols;
+ aSkipCols.setInsertFromBack(true); // speed optimazation.
+ aSkipCols.setFalse(0, MAXCOL);
+ for (SCCOL i = 0; i <= MAXCOL; ++i)
{
- if (nRow > nRowFlagsEndRow)
- nRowFlag = pRowFlags->GetNextValue( nRowFlagsIndex, nRowFlagsEndRow);
- if ( ( nRowFlag & CR_HIDDEN ) == 0 )
+ SCCOL nLastCol = i;
+ if (ColHidden(i, NULL, &nLastCol))
+ {
+ // Columns are hidden in this range.
+ aSkipCols.setTrue(i, nLastCol);
+ }
+ else
{
- SCCOL nDataCol = rEndCol;
- while (nDataCol > 0 && ( bEmpty[nDataCol] || !aCol[nDataCol].Search(nRow,nIndex) ) )
- --nDataCol;
- if ( ( pColFlags[nDataCol] & CR_HIDDEN ) == 0 )
+ // These columns are visible. Check for empty columns.
+ for (SCCOL j = i; j <= nLastCol; ++j)
{
- ScBaseCell* pCell = aCol[nDataCol].GetCell(nRow);
- if (pCell)
- {
- CellType eType = pCell->GetCellType();
- if (eType == CELLTYPE_STRING || eType == CELLTYPE_EDIT
- || (eType == CELLTYPE_FORMULA && !((ScFormulaCell*)pCell)->IsValue()) )
- {
- BOOL bFormula = FALSE; //! uebergeben
- long nPixel = pCell->GetTextWidth();
-
- // Breite bereits im Idle-Handler berechnet?
- if ( TEXTWIDTH_DIRTY == nPixel )
- {
- ScNeededSizeOptions aOptions;
- aOptions.bTotalSize = TRUE;
- aOptions.bFormula = bFormula;
- aOptions.bSkipMerged = FALSE;
-
- Fraction aZoom(1,1);
- nPixel = aCol[nDataCol].GetNeededSize( nRow,
- pDev,nPPTX,nPPTY,aZoom,aZoom,
- TRUE, aOptions );
- pCell->SetTextWidth( (USHORT)nPixel );
- }
+ if (aCol[j].GetCellCount() == 0)
+ // empty
+ aSkipCols.setTrue(j,j);
+ }
+ }
+ i = nLastCol;
+ }
- long nTwips = (long) (nPixel / nPPTX);
- long nDocW = GetColWidth( nDataCol );
+ ScFlatBoolColSegments::RangeData aColData;
+ for (SCCOL nCol = rEndCol; nCol >= 0; --nCol)
+ {
+ if (!aSkipCols.getRangeData(nCol, aColData))
+ // Failed to get the data. This should never happen!
+ return;
- long nMissing = nTwips - nDocW;
- if ( nMissing > 0 )
- {
- // look at alignment
-
- const ScPatternAttr* pPattern = GetPattern( nDataCol, nRow );
- const SfxItemSet* pCondSet = NULL;
- if ( ((const SfxUInt32Item&)pPattern->GetItem(ATTR_CONDITIONAL)).GetValue() )
- pCondSet = pDocument->GetCondResult( nDataCol, nRow, nTab );
-
- SvxCellHorJustify eHorJust = (SvxCellHorJustify)((const SvxHorJustifyItem&)
- pPattern->GetItem( ATTR_HOR_JUSTIFY, pCondSet )).GetValue();
- if ( eHorJust == SVX_HOR_JUSTIFY_CENTER )
- nMissing /= 2; // distributed into both directions
- else
- {
- // STANDARD is LEFT (only text is handled here)
- BOOL bRight = ( eHorJust == SVX_HOR_JUSTIFY_RIGHT );
- if ( IsLayoutRTL() )
- bRight = !bRight;
- if ( bRight )
- nMissing = 0; // extended only to the left (logical)
- }
- }
+ if (aColData.mbValue)
+ {
+ // Skip these columns.
+ nCol = aColData.mnCol1; // move toward 0.
+ continue;
+ }
- SCCOL nCol = nDataCol;
- while (nMissing > 0 && nCol < MAXCOL)
- {
- ++nCol;
- nMissing -= GetColWidth( nCol );
- }
- if (nCol>nPrintCol)
- nPrintCol = nCol;
- }
- }
+ // These are visible and non-empty columns.
+ for (SCCOL nDataCol = nCol; 0 <= nDataCol && nDataCol >= aColData.mnCol1; --nDataCol)
+ {
+ SCCOL nPrintCol = nDataCol;
+ VisibleDataCellIterator aIter(*mpHiddenRows, aCol[nDataCol]);
+ ScBaseCell* pCell = aIter.reset(nStartRow);
+ if (!pCell)
+ // No visible cells found in this column. Skip it.
+ continue;
+
+ while (pCell)
+ {
+ SCCOL nNewCol = nDataCol;
+ SCROW nRow = aIter.getRow();
+ if (nRow > nEndRow)
+ // Went past the last row position. Bail out.
+ break;
+
+ MaybeAddExtraColumn(nNewCol, nRow, pDev, nPPTX, nPPTY);
+ if (nNewCol > nPrintCol)
+ nPrintCol = nNewCol;
+ pCell = aIter.next();
}
+
+ if (nPrintCol > rEndCol)
+ // Make sure we don't shrink the print area.
+ rEndCol = nPrintCol;
+ }
+ nCol = aColData.mnCol1; // move toward 0.
+ }
+}
+
+void ScTable::MaybeAddExtraColumn(SCCOL& rCol, SCROW nRow, OutputDevice* pDev, double nPPTX, double nPPTY)
+{
+ ScBaseCell* pCell = aCol[rCol].GetCell(nRow);
+ if (!pCell || !pCell->HasStringData())
+ return;
+
+ bool bFormula = false; //! ueberge
+ long nPixel = pCell->GetTextWidth();
+
+ // Breite bereits im Idle-Handler berechnet?
+ if ( TEXTWIDTH_DIRTY == nPixel )
+ {
+ ScNeededSizeOptions aOptions;
+ aOptions.bTotalSize = TRUE;
+ aOptions.bFormula = bFormula;
+ aOptions.bSkipMerged = FALSE;
+
+ Fraction aZoom(1,1);
+ nPixel = aCol[rCol].GetNeededSize(
+ nRow, pDev, nPPTX, nPPTY, aZoom, aZoom, true, aOptions );
+ pCell->SetTextWidth( (USHORT)nPixel );
+ }
+
+ long nTwips = (long) (nPixel / nPPTX);
+ long nDocW = GetColWidth( rCol );
+
+ long nMissing = nTwips - nDocW;
+ if ( nMissing > 0 )
+ {
+ // look at alignment
+
+ const ScPatternAttr* pPattern = GetPattern( rCol, nRow );
+ const SfxItemSet* pCondSet = NULL;
+ if ( ((const SfxUInt32Item&)pPattern->GetItem(ATTR_CONDITIONAL)).GetValue() )
+ pCondSet = pDocument->GetCondResult( rCol, nRow, nTab );
+
+ SvxCellHorJustify eHorJust = (SvxCellHorJustify)((const SvxHorJustifyItem&)
+ pPattern->GetItem( ATTR_HOR_JUSTIFY, pCondSet )).GetValue();
+ if ( eHorJust == SVX_HOR_JUSTIFY_CENTER )
+ nMissing /= 2; // distributed into both directions
+ else
+ {
+ // STANDARD is LEFT (only text is handled here)
+ bool bRight = ( eHorJust == SVX_HOR_JUSTIFY_RIGHT );
+ if ( IsLayoutRTL() )
+ bRight = !bRight;
+ if ( bRight )
+ nMissing = 0; // extended only to the left (logical)
}
}
- rEndCol = nPrintCol;
+
+ SCCOL nNewCol = rCol;
+ while (nMissing > 0 && nNewCol < MAXCOL)
+ {
+ ScBaseCell* pNextCell = aCol[nNewCol+1].GetCell(nRow);
+ if (pNextCell && pNextCell->GetCellType() != CELLTYPE_NOTE)
+ // Cell content in a next column ends display of this string.
+ nMissing = 0;
+ else
+ nMissing -= GetColWidth(++nNewCol);
+ }
+ rCol = nNewCol;
}
void ScTable::DoColResize( SCCOL nCol1, SCCOL nCol2, SCSIZE nAdd )
@@ -1597,7 +1671,104 @@ void ScTable::RestorePrintRanges( const ScPrintSaverTab& rSaveTab )
UpdatePageBreaks(NULL);
}
+SCROW ScTable::VisibleDataCellIterator::ROW_NOT_FOUND = -1;
+
+ScTable::VisibleDataCellIterator::VisibleDataCellIterator(ScFlatBoolRowSegments& rRowSegs, ScColumn& rColumn) :
+ mrRowSegs(rRowSegs),
+ mrColumn(rColumn),
+ mpCell(NULL),
+ mnCurRow(ROW_NOT_FOUND),
+ mnUBound(ROW_NOT_FOUND)
+{
+}
+
+ScTable::VisibleDataCellIterator::~VisibleDataCellIterator()
+{
+}
+ScBaseCell* ScTable::VisibleDataCellIterator::reset(SCROW nRow)
+{
+ if (nRow > MAXROW)
+ {
+ mnCurRow = ROW_NOT_FOUND;
+ return NULL;
+ }
+ ScFlatBoolRowSegments::RangeData aData;
+ if (!mrRowSegs.getRangeData(nRow, aData))
+ {
+ mnCurRow = ROW_NOT_FOUND;
+ return NULL;
+ }
+ if (!aData.mbValue)
+ {
+ // specified row is visible. Take it.
+ mnCurRow = nRow;
+ mnUBound = aData.mnRow2;
+ }
+ else
+ {
+ // specified row is not-visible. The first visible row is the start of
+ // the next segment.
+ mnCurRow = aData.mnRow2 + 1;
+ mnUBound = mnCurRow; // get range data on the next iteration.
+ if (mnCurRow > MAXROW)
+ {
+ // Make sure the row doesn't exceed our current limit.
+ mnCurRow = ROW_NOT_FOUND;
+ return NULL;
+ }
+ }
+
+ mpCell = mrColumn.GetCell(mnCurRow);
+ if (mpCell)
+ // First visible cell found.
+ return mpCell;
+
+ // Find a first visible cell below this row (if any).
+ return next();
+}
+
+ScBaseCell* ScTable::VisibleDataCellIterator::next()
+{
+ if (mnCurRow == ROW_NOT_FOUND)
+ return NULL;
+
+ while (mrColumn.GetNextDataPos(mnCurRow))
+ {
+ if (mnCurRow > mnUBound)
+ {
+ // We don't know the visibility of this row range. Query it.
+ ScFlatBoolRowSegments::RangeData aData;
+ if (!mrRowSegs.getRangeData(mnCurRow, aData))
+ {
+ mnCurRow = ROW_NOT_FOUND;
+ return NULL;
+ }
+
+ if (aData.mbValue)
+ {
+ // This row is invisible. Skip to the last invisible row and
+ // try again.
+ mnCurRow = mnUBound = aData.mnRow2;
+ continue;
+ }
+
+ // This row is visible.
+ mnUBound = aData.mnRow2;
+ }
+
+ mpCell = mrColumn.GetCell(mnCurRow);
+ if (mpCell)
+ return mpCell;
+ }
+ mnCurRow = ROW_NOT_FOUND;
+ return NULL;
+}
+
+SCROW ScTable::VisibleDataCellIterator::getRow() const
+{
+ return mnCurRow;
+}
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 69d16df7be58..9bd5b031fde5 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -56,7 +56,9 @@
#include "fillinfo.hxx"
#include "bcaslot.hxx"
#include "postit.hxx"
+#include "sheetevents.hxx"
#include "globstr.hrc"
+#include "segmenttree.hxx"
#include <math.h>
@@ -97,6 +99,27 @@ void ScTable::StartOutlineTable()
}
+void ScTable::SetSheetEvents( const ScSheetEvents* pNew )
+{
+ delete pSheetEvents;
+ if (pNew)
+ pSheetEvents = new ScSheetEvents(*pNew);
+ else
+ pSheetEvents = NULL;
+
+ SetCalcNotification( FALSE ); // discard notifications before the events were set
+
+ if (IsStreamValid())
+ SetStreamValid(FALSE);
+}
+
+
+void ScTable::SetCalcNotification( BOOL bSet )
+{
+ bCalcNotification = bSet;
+}
+
+
BOOL ScTable::TestInsertRow( SCCOL nStartCol, SCCOL nEndCol, SCSIZE nSize )
{
BOOL bTest = TRUE;
@@ -117,22 +140,28 @@ void ScTable::InsertRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
InitializeNoteCaptions();
if (nStartCol==0 && nEndCol==MAXCOL)
{
- if (pRowHeight && pRowFlags)
+ if (mpRowHeights && pRowFlags)
{
- pRowHeight->Insert( nStartRow, nSize);
+ mpRowHeights->insertSegment(nStartRow, nSize, false);
BYTE nNewFlags = pRowFlags->Insert( nStartRow, nSize);
// only copy manual size flag, clear all others
if (nNewFlags && (nNewFlags != CR_MANUALSIZE))
pRowFlags->SetValue( nStartRow, nStartRow + nSize - 1,
nNewFlags & CR_MANUALSIZE);
}
+
if (pOutlineTable)
pOutlineTable->InsertRow( nStartRow, nSize );
+
+ mpFilteredRows->insertSegment(nStartRow, nSize, true);
+ mpHiddenRows->insertSegment(nStartRow, nSize, true);
}
for (SCCOL j=nStartCol; j<=nEndCol; j++)
aCol[j].InsertRow( nStartRow, nSize );
DecRecalcLevel( false );
+
+ InvalidatePageBreaks();
}
@@ -143,15 +172,19 @@ void ScTable::DeleteRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
InitializeNoteCaptions();
if (nStartCol==0 && nEndCol==MAXCOL)
{
- if (pRowHeight && pRowFlags)
- {
- pRowHeight->Remove( nStartRow, nSize);
+ if (pRowFlags)
pRowFlags->Remove( nStartRow, nSize);
- }
+
+ if (mpRowHeights)
+ mpRowHeights->removeSegment(nStartRow, nStartRow+nSize);
+
if (pOutlineTable)
if (pOutlineTable->DeleteRow( nStartRow, nSize ))
if (pUndoOutline)
*pUndoOutline = TRUE;
+
+ mpFilteredRows->removeSegment(nStartRow, nStartRow+nSize);
+ mpHiddenRows->removeSegment(nStartRow, nStartRow+nSize);
}
{ // scope for bulk broadcast
@@ -160,6 +193,8 @@ void ScTable::DeleteRow( SCCOL nStartCol, SCCOL nEndCol, SCROW nStartRow, SCSIZE
aCol[j].DeleteRow( nStartRow, nSize );
}
DecRecalcLevel();
+
+ InvalidatePageBreaks();
}
@@ -195,6 +230,9 @@ void ScTable::InsertCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
}
if (pOutlineTable)
pOutlineTable->InsertCol( nStartCol, nSize );
+
+ mpHiddenCols->insertSegment(nStartCol, static_cast<SCCOL>(nSize), true);
+ mpFilteredCols->insertSegment(nStartCol, static_cast<SCCOL>(nSize), true);
}
@@ -226,6 +264,8 @@ void ScTable::InsertCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
}
}
DecRecalcLevel();
+
+ InvalidatePageBreaks();
}
@@ -247,6 +287,10 @@ void ScTable::DeleteCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
if (pOutlineTable->DeleteCol( nStartCol, nSize ))
if (pUndoOutline)
*pUndoOutline = TRUE;
+
+ SCCOL nRmSize = nStartCol + static_cast<SCCOL>(nSize);
+ mpHiddenCols->removeSegment(nStartCol, nRmSize);
+ mpFilteredCols->removeSegment(nStartCol, nRmSize);
}
@@ -268,6 +312,8 @@ void ScTable::DeleteCol( SCCOL nStartCol, SCROW nStartRow, SCROW nEndRow, SCSIZE
aCol[nStartCol + nSize + i].MoveTo(nStartRow, nEndRow, aCol[nStartCol + i]);
}
DecRecalcLevel();
+
+ InvalidatePageBreaks();
}
@@ -339,20 +385,21 @@ void ScTable::CopyToClip(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
// copy widths/heights, and only "hidden", "filtered" and "manual" flags
// also for all preceding columns/rows, to have valid positions for drawing objects
- if (pColFlags && pTable->pColFlags && pColWidth && pTable->pColWidth)
+ if (pColWidth && pTable->pColWidth)
for (i=0; i<=nCol2; i++)
- {
- pTable->pColFlags[i] = pColFlags[i] & CR_HIDDEN;
pTable->pColWidth[i] = pColWidth[i];
- }
- if (pRowFlags && pTable->pRowFlags && pRowHeight && pTable->pRowHeight)
+ pTable->CopyColHidden(*this, 0, nCol2);
+ pTable->CopyColFiltered(*this, 0, nCol2);
+
+ if (pRowFlags && pTable->pRowFlags && mpRowHeights && pTable->mpRowHeights)
{
- pTable->pRowFlags->CopyFromAnded( *pRowFlags, 0, nRow2,
- (CR_HIDDEN | CR_FILTERED | CR_MANUALSIZE));
- pTable->pRowHeight->CopyFrom( *pRowHeight, 0, nRow2);
+ pTable->pRowFlags->CopyFromAnded( *pRowFlags, 0, nRow2, CR_MANUALSIZE);
+ pTable->CopyRowHeight(*this, 0, nRow2, 0);
}
+ pTable->CopyRowHidden(*this, 0, nRow2);
+ pTable->CopyRowFiltered(*this, 0, nRow2);
// ggf. Formeln durch Werte ersetzen
@@ -393,10 +440,10 @@ void ScTable::CopyFromClip(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
for (i=nCol1; i<=nCol2; i++)
pColWidth[i] = pTable->pColWidth[i-nDx];
- if (nCol1==0 && nCol2==MAXCOL && pRowHeight && pTable->pRowHeight &&
+ if (nCol1==0 && nCol2==MAXCOL && mpRowHeights && pTable->mpRowHeights &&
pRowFlags && pTable->pRowFlags)
{
- pRowHeight->CopyFrom( *pTable->pRowHeight, nRow1, nRow2, -nDy);
+ CopyRowHeight(*pTable, nRow1, nRow2, -nDy);
// Must copy CR_MANUALSIZE bit too, otherwise pRowHeight doesn't make sense
for (SCROW j=nRow1; j<=nRow2; j++)
{
@@ -631,8 +678,10 @@ void ScTable::CopyToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
// Charts muessen beim Ein-/Ausblenden angepasst werden
ScChartListenerCollection* pCharts = pDestTab->pDocument->GetChartListenerCollection();
+ bool bFlagChange = false;
+
BOOL bWidth = (nRow1==0 && nRow2==MAXROW && pColWidth && pDestTab->pColWidth);
- BOOL bHeight = (nCol1==0 && nCol2==MAXCOL && pRowHeight && pDestTab->pRowHeight);
+ BOOL bHeight = (nCol1==0 && nCol2==MAXCOL && mpRowHeights && pDestTab->mpRowHeights);
if (bWidth||bHeight)
{
@@ -641,33 +690,77 @@ void ScTable::CopyToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
if (bWidth)
for (SCCOL i=nCol1; i<=nCol2; i++)
{
- BOOL bChange = pCharts &&
- ( pDestTab->pColFlags[i] & CR_HIDDEN ) != ( pColFlags[i] & CR_HIDDEN );
+ bool bThisHidden = ColHidden(i);
+ bool bHiddenChange = (pDestTab->ColHidden(i) != bThisHidden);
+ bool bChange = bHiddenChange || (pDestTab->pColWidth[i] != pColWidth[i]);
pDestTab->pColWidth[i] = pColWidth[i];
pDestTab->pColFlags[i] = pColFlags[i];
+ pDestTab->SetColHidden(i, i, bThisHidden);
//! Aenderungen zusammenfassen?
- if (bChange)
+ if (bHiddenChange && pCharts)
pCharts->SetRangeDirty(ScRange( i, 0, nTab, i, MAXROW, nTab ));
+
+ if (bChange)
+ bFlagChange = true;
}
if (bHeight)
{
- pDestTab->pRowHeight->CopyFrom( *pRowHeight, nRow1, nRow2);
- for (SCROW i=nRow1; i<=nRow2; i++)
+ bool bChange = pDestTab->GetRowHeight(nRow1, nRow2) != GetRowHeight(nRow1, nRow2);
+
+ if (bChange)
+ bFlagChange = true;
+
+ pDestTab->CopyRowHeight(*this, nRow1, nRow2, 0);
+ pDestTab->pRowFlags->CopyFrom(*pRowFlags, nRow1, nRow2);
+
+ // Hidden flags.
+ for (SCROW i = nRow1; i <= nRow2; ++i)
{
- // TODO: might need some performance improvement, block
- // operations instead of single GetValue()/SetValue() calls.
- BYTE nThisRowFlags = pRowFlags->GetValue(i);
- BOOL bChange = pCharts &&
- ( pDestTab->pRowFlags->GetValue(i) & CR_HIDDEN ) != ( nThisRowFlags & CR_HIDDEN );
- pDestTab->pRowFlags->SetValue( i, nThisRowFlags );
- //! Aenderungen zusammenfassen?
- if (bChange)
- pCharts->SetRangeDirty(ScRange( 0, i, nTab, MAXCOL, i, nTab ));
+ SCROW nThisLastRow, nDestLastRow;
+ bool bThisHidden = RowHidden(i, NULL, &nThisLastRow);
+ bool bDestHidden = pDestTab->RowHidden(i, NULL, &nDestLastRow);
+
+ // If the segment sizes differ, we take the shorter segment of the two.
+ SCROW nLastRow = ::std::min(nThisLastRow, nDestLastRow);
+ if (nLastRow >= nRow2)
+ // the last row shouldn't exceed the upper bound the caller specified.
+ nLastRow = nRow2;
+
+ pDestTab->SetRowHidden(i, nLastRow, bThisHidden);
+
+ bool bThisHiddenChange = (bThisHidden != bDestHidden);
+ if (bThisHiddenChange && pCharts)
+ {
+ // Hidden flags differ.
+ pCharts->SetRangeDirty(ScRange(0, i, nTab, MAXCOL, nLastRow, nTab));
+ }
+
+ if (bThisHiddenChange)
+ bFlagChange = true;
+
+ // Jump to the last row of the identical flag segment.
+ i = nLastRow;
+ }
+
+ // Filtered flags.
+ for (SCROW i = nRow1; i <= nRow2; ++i)
+ {
+ SCROW nLastRow;
+ bool bFiltered = RowFiltered(i, NULL, &nLastRow);
+ if (nLastRow >= nRow2)
+ // the last row shouldn't exceed the upper bound the caller specified.
+ nLastRow = nRow2;
+ pDestTab->SetRowFiltered(i, nLastRow, bFiltered);
+ i = nLastRow;
}
}
pDestTab->DecRecalcLevel();
}
+
+ if (bFlagChange)
+ pDestTab->InvalidatePageBreaks();
+
pDestTab->SetOutlineTable( pOutlineTable ); // auch nur wenn bColRowFlags
}
}
@@ -681,7 +774,7 @@ void ScTable::UndoToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
if (ValidColRow(nCol1, nRow1) && ValidColRow(nCol2, nRow2))
{
BOOL bWidth = (nRow1==0 && nRow2==MAXROW && pColWidth && pDestTab->pColWidth);
- BOOL bHeight = (nCol1==0 && nCol2==MAXCOL && pRowHeight && pDestTab->pRowHeight);
+ BOOL bHeight = (nCol1==0 && nCol2==MAXCOL && mpRowHeights && pDestTab->mpRowHeights);
if (bWidth||bHeight)
IncRecalcLevel();
@@ -701,8 +794,8 @@ void ScTable::UndoToTable(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
for (SCCOL i=nCol1; i<=nCol2; i++)
pDestTab->pColWidth[i] = pColWidth[i];
if (bHeight)
- pDestTab->pRowHeight->CopyFrom( *pRowHeight, nRow1, nRow2);
- DecRecalcLevel();
+ pDestTab->CopyRowHeight(*this, nRow1, nRow2, 0);
+ DecRecalcLevel();
}
}
}
@@ -714,6 +807,16 @@ void ScTable::CopyUpdated( const ScTable* pPosTab, ScTable* pDestTab ) const
aCol[i].CopyUpdated( pPosTab->aCol[i], pDestTab->aCol[i] );
}
+void ScTable::InvalidateTableArea()
+{
+ bTableAreaValid = FALSE;
+}
+
+void ScTable::InvalidatePageBreaks()
+{
+ mbPageBreaksValid = false;
+}
+
void ScTable::CopyScenarioTo( ScTable* pDestTab ) const
{
DBG_ASSERT( bScenario, "bScenario == FALSE" );
@@ -1093,6 +1196,17 @@ void ScTable::SetRelNameDirty()
}
+void ScTable::SetLoadingMedium(bool bLoading)
+{
+ mpRowHeights->enableTreeSearch(!bLoading);
+
+ // When loading a medium, prefer inserting row heights from the back
+ // position since the row heights are stored and read in ascending order
+ // during import.
+ mpRowHeights->setInsertFromBack(bLoading);
+}
+
+
void ScTable::CalcAll()
{
for (SCCOL i=0; i<=MAXCOL; i++) aCol[i].CalcAll();
@@ -1240,7 +1354,7 @@ BOOL ScTable::IsBlockEmpty( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
SCSIZE ScTable::FillMaxRot( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2,
SCCOL nCol, SCROW nAttrRow1, SCROW nAttrRow2, SCSIZE nArrY,
- const ScPatternAttr* pPattern, const SfxItemSet* pCondSet ) const
+ const ScPatternAttr* pPattern, const SfxItemSet* pCondSet )
{
// Rueckgabe = neues nArrY
@@ -1273,7 +1387,7 @@ SCSIZE ScTable::FillMaxRot( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCO
for ( SCROW nRow = nAttrRow1; nRow <= nAttrRow2; nRow++ )
{
- if ( !(pRowFlags->GetValue(nRow) & CR_HIDDEN) )
+ if (!RowHidden(nRow))
{
BOOL bHitOne = TRUE;
if ( nCol > nX2+1 )
@@ -1281,7 +1395,7 @@ SCSIZE ScTable::FillMaxRot( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCO
// reicht die gedrehte Zelle bis in den sichtbaren Bereich?
SCCOL nTouchedCol = nCol;
- long nWidth = (long) ( pRowHeight->GetValue(nRow) * nFactor );
+ long nWidth = static_cast<long>(mpRowHeights->getValue(nRow) * nFactor);
DBG_ASSERT(nWidth <= 0, "Richtung falsch");
while ( nWidth < 0 && nTouchedCol > 0 )
{
@@ -1307,9 +1421,9 @@ SCSIZE ScTable::FillMaxRot( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCO
return nArrY;
}
-void ScTable::FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2 ) const
+void ScTable::FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCCOL nX2 )
{
- if ( !pColWidth || !pRowHeight || !pColFlags || !pRowFlags )
+ if ( !pColWidth || !mpRowHeights || !pColFlags || !pRowFlags )
{
DBG_ERROR( "Spalten-/Zeileninfo fehlt" );
return;
@@ -1322,7 +1436,7 @@ void ScTable::FindMaxRotCol( RowInfo* pRowInfo, SCSIZE nArrCount, SCCOL nX1, SCC
for (SCCOL nCol=0; nCol<=MAXCOL; nCol++)
{
- if ( !(pColFlags[nCol] & CR_HIDDEN) )
+ if (!ColHidden(nCol))
{
SCSIZE nArrY = 0;
ScDocAttrIterator aIter( pDocument, nTab, nCol, nY1, nCol, nY2 );
@@ -1837,36 +1951,24 @@ void ScTable::StyleSheetChanged( const SfxStyleSheetBase* pStyleSheet, BOOL bRem
double nPPTX, double nPPTY,
const Fraction& rZoomX, const Fraction& rZoomY )
{
- BOOL* pUsed = new BOOL[MAXROWCOUNT];
- memset( pUsed, 0, sizeof(BOOL) * (MAXROWCOUNT) );
+ ScFlatBoolRowSegments aUsedRows;
+ for (SCCOL i = 0; i <= MAXCOL; ++i)
+ aCol[i].FindStyleSheet(pStyleSheet, aUsedRows, bRemoved);
- SCCOL nCol;
- for (nCol=0; nCol<=MAXCOL; nCol++)
- aCol[nCol].FindStyleSheet( pStyleSheet, pUsed, bRemoved );
-
- BOOL bFound = FALSE;
- SCROW nStart = 0, nEnd = 0;
- for (SCROW i=0; i<=MAXROW; i++)
+ SCROW nRow = 0;
+ while (nRow <= MAXROW)
{
- if (pUsed[i])
- {
- if (!bFound)
- {
- nStart = i;
- bFound = TRUE;
- }
- nEnd = i;
- }
- else if (bFound)
- {
- SetOptimalHeight( nStart, nEnd, 0, pDev, nPPTX, nPPTY, rZoomX, rZoomY, FALSE );
- bFound = FALSE;
- }
- }
- if (bFound)
- SetOptimalHeight( nStart, nEnd, 0, pDev, nPPTX, nPPTY, rZoomX, rZoomY, FALSE );
+ ScFlatBoolRowSegments::RangeData aData;
+ if (!aUsedRows.getRangeData(nRow, aData))
+ // search failed!
+ return;
- delete[] pUsed;
+ SCROW nEndRow = aData.mnRow2;
+ if (aData.mbValue)
+ SetOptimalHeight(nRow, nEndRow, 0, pDev, nPPTX, nPPTY, rZoomX, rZoomY, FALSE);
+
+ nRow = nEndRow + 1;
+ }
}
@@ -1948,6 +2050,8 @@ void ScTable::SetColWidth( SCCOL nCol, USHORT nNewWidth )
pDrawLayer->WidthChanged( nTab, nCol, ((long) nNewWidth) - (long) pColWidth[nCol] );
pColWidth[nCol] = nNewWidth;
DecRecalcLevel();
+
+ InvalidatePageBreaks();
}
}
else
@@ -1959,7 +2063,7 @@ void ScTable::SetColWidth( SCCOL nCol, USHORT nNewWidth )
void ScTable::SetRowHeight( SCROW nRow, USHORT nNewHeight )
{
- if (VALIDROW(nRow) && pRowHeight)
+ if (VALIDROW(nRow) && mpRowHeights)
{
if (!nNewHeight)
{
@@ -1967,7 +2071,7 @@ void ScTable::SetRowHeight( SCROW nRow, USHORT nNewHeight )
nNewHeight = ScGlobal::nStdRowHeight;
}
- USHORT nOldHeight = pRowHeight->GetValue(nRow);
+ sal_uInt16 nOldHeight = mpRowHeights->getValue(nRow);
if ( nNewHeight != nOldHeight )
{
IncRecalcLevel();
@@ -1975,8 +2079,10 @@ void ScTable::SetRowHeight( SCROW nRow, USHORT nNewHeight )
ScDrawLayer* pDrawLayer = pDocument->GetDrawLayer();
if (pDrawLayer)
pDrawLayer->HeightChanged( nTab, nRow, ((long) nNewHeight) - (long) nOldHeight );
- pRowHeight->SetValue( nRow, nNewHeight);
+ mpRowHeights->setValue(nRow, nRow, nNewHeight);
DecRecalcLevel();
+
+ InvalidatePageBreaks();
}
}
else
@@ -1985,12 +2091,45 @@ void ScTable::SetRowHeight( SCROW nRow, USHORT nNewHeight )
}
}
+namespace {
+
+/**
+ * Check if the new pixel size is different from the old size between
+ * specified ranges.
+ */
+bool lcl_pixelSizeChanged(
+ ScFlatUInt16RowSegments& rRowHeights, SCROW nStartRow, SCROW nEndRow,
+ sal_uInt16 nNewHeight, double nPPTY)
+{
+ long nNewPix = static_cast<long>(nNewHeight * nPPTY);
+
+ ScFlatUInt16RowSegments::ForwardIterator aFwdIter(rRowHeights);
+ for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
+ {
+ sal_uInt16 nHeight;
+ if (!aFwdIter.getValue(nRow, nHeight))
+ break;
+
+ if (nHeight != nNewHeight)
+ {
+ bool bChanged = (nNewPix != static_cast<long>(nHeight * nPPTY));
+ if (bChanged)
+ return true;
+ }
+
+ // Skip ahead to the last position of the current range.
+ nRow = aFwdIter.getLastPos();
+ }
+ return false;
+}
+
+}
BOOL ScTable::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeight,
double /* nPPTX */, double nPPTY )
{
BOOL bChanged = FALSE;
- if (VALIDROW(nStartRow) && VALIDROW(nEndRow) && pRowHeight)
+ if (VALIDROW(nStartRow) && VALIDROW(nEndRow) && mpRowHeights)
{
IncRecalcLevel();
InitializeNoteCaptions();
@@ -2000,8 +2139,6 @@ BOOL ScTable::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeig
nNewHeight = ScGlobal::nStdRowHeight;
}
- long nNewPix = (long) ( nNewHeight * nPPTY );
-
BOOL bSingle = FALSE; // TRUE = process every row for its own
ScDrawLayer* pDrawLayer = pDocument->GetDrawLayer();
if (pDrawLayer)
@@ -2010,24 +2147,17 @@ BOOL ScTable::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeig
if (bSingle)
{
- size_t nIndex;
- SCROW nRegionEndRow;
- USHORT nOldHeight = pRowHeight->GetValue( nStartRow, nIndex, nRegionEndRow);
- if (nNewHeight == nOldHeight && nEndRow <= nRegionEndRow)
+ ScFlatUInt16RowSegments::RangeData aData;
+ mpRowHeights->getRangeData(nStartRow, aData);
+ if (nNewHeight == aData.mnValue && nEndRow <= aData.mnRow2)
bSingle = FALSE; // no difference in this range
}
if (bSingle)
{
if (nEndRow-nStartRow < 20)
{
- // Whether new pixel size will differ from old pixel size in any row.
- ScCompressedArrayIterator< SCROW, USHORT> aIter( *pRowHeight,
- nStartRow, nEndRow);
- do
- {
- if (*aIter != nNewHeight)
- bChanged = (nNewPix != (long) (*aIter * nPPTY));
- } while (!bChanged && aIter.NextRange());
+ if (!bChanged)
+ bChanged = lcl_pixelSizeChanged(*mpRowHeights, nStartRow, nEndRow, nNewHeight, nPPTY);
/* #i94028# #i94991# If drawing objects are involved, each row
has to be changed for its own, because each call to
@@ -2039,12 +2169,12 @@ BOOL ScTable::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeig
for( SCROW nRow = nStartRow; nRow <= nEndRow ; ++nRow )
{
pDrawLayer->HeightChanged( nTab, nRow,
- ((long) nNewHeight) - ((long) pRowHeight->GetValue( nRow )));
- pRowHeight->SetValue( nRow, nNewHeight );
+ static_cast<long>(nNewHeight) - static_cast<long>(mpRowHeights->getValue(nRow)));
+ mpRowHeights->setValue(nRow, nRow, nNewHeight);
}
}
else
- pRowHeight->SetValue( nStartRow, nEndRow, nNewHeight);
+ mpRowHeights->setValue(nStartRow, nEndRow, nNewHeight);
}
else
{
@@ -2059,23 +2189,22 @@ BOOL ScTable::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeig
{
if (pDrawLayer)
{
- unsigned long nOldHeights = pRowHeight->SumValues( nStartRow, nEndRow);
+ unsigned long nOldHeights = GetRowHeight(nStartRow, nEndRow);
// FIXME: should we test for overflows?
long nHeightDif = (long) (unsigned long) nNewHeight *
(nEndRow - nStartRow + 1) - nOldHeights;
pDrawLayer->HeightChanged( nTab, nEndRow, nHeightDif );
}
- // Whether new pixel size will differ from old pixel size in any row.
- ScCompressedArrayIterator< SCROW, USHORT> aIter( *pRowHeight,
- nStartRow, nEndRow);
- do
- {
- if (*aIter != nNewHeight)
- bChanged = (nNewPix != (long) (*aIter * nPPTY));
- } while (!bChanged && aIter.NextRange());
- pRowHeight->SetValue( nStartRow, nEndRow, nNewHeight);
+
+ if (!bChanged)
+ bChanged = lcl_pixelSizeChanged(*mpRowHeights, nStartRow, nEndRow, nNewHeight, nPPTY);
+
+ mpRowHeights->setValue(nStartRow, nEndRow, nNewHeight);
}
DecRecalcLevel();
+
+ if (bChanged)
+ InvalidatePageBreaks();
}
else
{
@@ -2085,6 +2214,16 @@ BOOL ScTable::SetRowHeightRange( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeig
return bChanged;
}
+void ScTable::SetRowHeightOnly( SCROW nStartRow, SCROW nEndRow, USHORT nNewHeight )
+{
+ if (!ValidRow(nStartRow) || !ValidRow(nEndRow) || !mpRowHeights)
+ return;
+
+ if (!nNewHeight)
+ nNewHeight = ScGlobal::nStdRowHeight;
+
+ mpRowHeights->setValue(nStartRow, nEndRow, nNewHeight);
+}
void ScTable::SetManualHeight( SCROW nStartRow, SCROW nEndRow, BOOL bManual )
{
@@ -2102,13 +2241,13 @@ void ScTable::SetManualHeight( SCROW nStartRow, SCROW nEndRow, BOOL bManual )
}
-USHORT ScTable::GetColWidth( SCCOL nCol ) const
+USHORT ScTable::GetColWidth( SCCOL nCol )
{
DBG_ASSERT(VALIDCOL(nCol),"Falsche Spaltennummer");
if (VALIDCOL(nCol) && pColFlags && pColWidth)
{
- if ( pColFlags[nCol] & CR_HIDDEN )
+ if (ColHidden(nCol))
return 0;
else
return pColWidth[nCol];
@@ -2129,7 +2268,7 @@ USHORT ScTable::GetOriginalWidth( SCCOL nCol ) const // immer die eingest
}
-USHORT ScTable::GetCommonWidth( SCCOL nEndCol ) const
+USHORT ScTable::GetCommonWidth( SCCOL nEndCol )
{
// get the width that is used in the largest continuous column range (up to nEndCol)
@@ -2141,24 +2280,24 @@ USHORT ScTable::GetCommonWidth( SCCOL nEndCol ) const
USHORT nMaxWidth = 0;
USHORT nMaxCount = 0;
- USHORT nRangeStart = 0;
+ SCCOL nRangeStart = 0;
while ( nRangeStart <= nEndCol )
{
// skip hidden columns
- while ( nRangeStart <= nEndCol && (pColFlags[nRangeStart] & CR_HIDDEN) )
+ while ( nRangeStart <= nEndCol && ColHidden(nRangeStart) )
++nRangeStart;
if ( nRangeStart <= nEndCol )
{
USHORT nThisCount = 0;
USHORT nThisWidth = pColWidth[nRangeStart];
- USHORT nRangeEnd = nRangeStart;
+ SCCOL nRangeEnd = nRangeStart;
while ( nRangeEnd <= nEndCol && pColWidth[nRangeEnd] == nThisWidth )
{
++nThisCount;
++nRangeEnd;
// skip hidden columns
- while ( nRangeEnd <= nEndCol && (pColFlags[nRangeEnd] & CR_HIDDEN) )
+ while ( nRangeEnd <= nEndCol && ColHidden(nRangeEnd) )
++nRangeEnd;
}
@@ -2176,44 +2315,80 @@ USHORT ScTable::GetCommonWidth( SCCOL nEndCol ) const
}
-USHORT ScTable::GetRowHeight( SCROW nRow ) const
+USHORT ScTable::GetRowHeight( SCROW nRow, SCROW* pStartRow, SCROW* pEndRow, bool bHiddenAsZero )
{
DBG_ASSERT(VALIDROW(nRow),"Falsche Zeilennummer");
- if (VALIDROW(nRow) && pRowFlags && pRowHeight)
+ if (VALIDROW(nRow) && mpRowHeights)
{
- if ( pRowFlags->GetValue(nRow) & CR_HIDDEN )
+ if (bHiddenAsZero && RowHidden(nRow))
return 0;
else
- return pRowHeight->GetValue(nRow);
+ {
+ ScFlatUInt16RowSegments::RangeData aData;
+ if (!mpRowHeights->getRangeData(nRow, aData))
+ // TODO: What should we return in case the search fails?
+ return 0;
+
+ if (pStartRow)
+ *pStartRow = aData.mnRow1;
+ if (pEndRow)
+ *pEndRow = aData.mnRow2;
+ return aData.mnValue;
+ }
}
else
return (USHORT) ScGlobal::nStdRowHeight;
}
-ULONG ScTable::GetRowHeight( SCROW nStartRow, SCROW nEndRow ) const
+ULONG ScTable::GetRowHeight( SCROW nStartRow, SCROW nEndRow )
{
DBG_ASSERT(VALIDROW(nStartRow) && VALIDROW(nEndRow),"Falsche Zeilennummer");
- if (VALIDROW(nStartRow) && VALIDROW(nEndRow) && pRowFlags && pRowHeight)
+ if (VALIDROW(nStartRow) && VALIDROW(nEndRow) && mpRowHeights)
{
- return pRowFlags->SumCoupledArrayForCondition( nStartRow, nEndRow,
- CR_HIDDEN, 0, *pRowHeight);
+ ULONG nHeight = 0;
+ SCROW nRow = nStartRow;
+ while (nRow <= nEndRow)
+ {
+ SCROW nLastRow = -1;
+ if (!RowHidden(nRow, nLastRow))
+ {
+ if (nLastRow > nEndRow)
+ nLastRow = nEndRow;
+ nHeight += mpRowHeights->getSumValue(nRow, nLastRow);
+ }
+ nRow = nLastRow + 1;
+ }
+ return nHeight;
}
else
return (ULONG) ((nEndRow - nStartRow + 1) * ScGlobal::nStdRowHeight);
}
-ULONG ScTable::GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, double fScale ) const
+ULONG ScTable::GetScaledRowHeight( SCROW nStartRow, SCROW nEndRow, double fScale )
{
DBG_ASSERT(VALIDROW(nStartRow) && VALIDROW(nEndRow),"Falsche Zeilennummer");
- if (VALIDROW(nStartRow) && VALIDROW(nEndRow) && pRowFlags && pRowHeight)
+ if (VALIDROW(nStartRow) && VALIDROW(nEndRow) && mpRowHeights)
{
- return pRowFlags->SumScaledCoupledArrayForCondition( nStartRow,
- nEndRow, CR_HIDDEN, 0, *pRowHeight, fScale);
+ ULONG nHeight = 0;
+ SCROW nRow = nStartRow;
+ while (nRow <= nEndRow)
+ {
+ SCROW nLastRow = -1;
+ if (!RowHidden(nRow, nLastRow))
+ {
+ if (nLastRow > nEndRow)
+ nLastRow = nEndRow;
+ sal_uInt32 nThisHeight = mpRowHeights->getSumValue(nRow, nLastRow);
+ nHeight += static_cast<ULONG>(nThisHeight * fScale);
+ }
+ nRow = nLastRow + 1;
+ }
+ return nHeight;
}
else
return (ULONG) ((nEndRow - nStartRow + 1) * ScGlobal::nStdRowHeight * fScale);
@@ -2224,8 +2399,8 @@ USHORT ScTable::GetOriginalHeight( SCROW nRow ) const // non-0 even if hid
{
DBG_ASSERT(VALIDROW(nRow),"wrong row number");
- if (VALIDROW(nRow) && pRowHeight)
- return pRowHeight->GetValue(nRow);
+ if (VALIDROW(nRow) && mpRowHeights)
+ return mpRowHeights->getValue(nRow);
else
return (USHORT) ScGlobal::nStdRowHeight;
}
@@ -2234,28 +2409,26 @@ USHORT ScTable::GetOriginalHeight( SCROW nRow ) const // non-0 even if hid
// Spalten-/Zeilen-Flags
-SCROW ScTable::GetHiddenRowCount( SCROW nRow ) const
+SCROW ScTable::GetHiddenRowCount( SCROW nRow )
{
- SCROW nEndRow = nRow;
- if ( pRowFlags )
- {
- nEndRow = pRowFlags->GetBitStateEnd( nRow, CR_HIDDEN, CR_HIDDEN);
- if (ValidRow(nEndRow))
- ++nEndRow;
- else
- nEndRow = nRow;
- }
- return nEndRow - nRow;
+ if (!ValidRow(nRow))
+ return 0;
+
+ SCROW nLastRow = -1;
+ if (!RowHidden(nRow, nLastRow) || !ValidRow(nLastRow))
+ return 0;
+
+ return nLastRow - nRow + 1;
}
//! ShowRows / DBShowRows zusammenfassen
-void ScTable::ShowCol(SCCOL nCol, BOOL bShow)
+void ScTable::ShowCol(SCCOL nCol, bool bShow)
{
- if (VALIDCOL(nCol) && pColFlags)
+ if (VALIDCOL(nCol))
{
- BOOL bWasVis = ( pColFlags[nCol] & CR_HIDDEN ) == 0;
+ bool bWasVis = !ColHidden(nCol);
if (bWasVis != bShow)
{
IncRecalcLevel();
@@ -2269,11 +2442,8 @@ void ScTable::ShowCol(SCCOL nCol, BOOL bShow)
pDrawLayer->WidthChanged( nTab, nCol, -(long) pColWidth[nCol] );
}
- if (bShow)
- pColFlags[nCol] &= ~CR_HIDDEN;
- else
- pColFlags[nCol] |= CR_HIDDEN;
- DecRecalcLevel();
+ SetColHidden(nCol, nCol, !bShow);
+ DecRecalcLevel();
ScChartListenerCollection* pCharts = pDocument->GetChartListenerCollection();
if ( pCharts )
@@ -2287,12 +2457,11 @@ void ScTable::ShowCol(SCCOL nCol, BOOL bShow)
}
-void ScTable::ShowRow(SCROW nRow, BOOL bShow)
+void ScTable::ShowRow(SCROW nRow, bool bShow)
{
if (VALIDROW(nRow) && pRowFlags)
{
- BYTE nFlags = pRowFlags->GetValue(nRow);
- BOOL bWasVis = ( nFlags & CR_HIDDEN ) == 0;
+ bool bWasVis = !RowHidden(nRow);
if (bWasVis != bShow)
{
IncRecalcLevel();
@@ -2301,20 +2470,23 @@ void ScTable::ShowRow(SCROW nRow, BOOL bShow)
if (pDrawLayer)
{
if (bShow)
- pDrawLayer->HeightChanged( nTab, nRow, (long) pRowHeight->GetValue(nRow) );
+ pDrawLayer->HeightChanged(
+ nTab, nRow, static_cast<long>(mpRowHeights->getValue(nRow)));
else
- pDrawLayer->HeightChanged( nTab, nRow, -(long) pRowHeight->GetValue(nRow) );
+ pDrawLayer->HeightChanged(
+ nTab, nRow, -static_cast<long>(mpRowHeights->getValue(nRow)));
}
+ SetRowHidden(nRow, nRow, !bShow);
if (bShow)
- pRowFlags->SetValue( nRow, nFlags & ~(CR_HIDDEN | CR_FILTERED));
- else
- pRowFlags->SetValue( nRow, nFlags | CR_HIDDEN);
- DecRecalcLevel();
+ SetRowFiltered(nRow, nRow, false);
+ DecRecalcLevel();
ScChartListenerCollection* pCharts = pDocument->GetChartListenerCollection();
if ( pCharts )
pCharts->SetRangeDirty(ScRange( 0, nRow, nTab, MAXCOL, nRow, nTab ));
+
+ InvalidatePageBreaks();
}
}
else
@@ -2324,12 +2496,11 @@ void ScTable::ShowRow(SCROW nRow, BOOL bShow)
}
-void ScTable::DBShowRow(SCROW nRow, BOOL bShow)
+void ScTable::DBShowRow(SCROW nRow, bool bShow)
{
if (VALIDROW(nRow) && pRowFlags)
{
- BYTE nFlags = pRowFlags->GetValue(nRow);
- BOOL bWasVis = ( nFlags & CR_HIDDEN ) == 0;
+ bool bWasVis = !RowHidden(nRow);
IncRecalcLevel();
InitializeNoteCaptions();
if (bWasVis != bShow)
@@ -2338,18 +2509,18 @@ void ScTable::DBShowRow(SCROW nRow, BOOL bShow)
if (pDrawLayer)
{
if (bShow)
- pDrawLayer->HeightChanged( nTab, nRow, (long) pRowHeight->GetValue(nRow) );
+ pDrawLayer->HeightChanged(
+ nTab, nRow, static_cast<long>(mpRowHeights->getValue(nRow)));
else
- pDrawLayer->HeightChanged( nTab, nRow, -(long) pRowHeight->GetValue(nRow) );
+ pDrawLayer->HeightChanged(
+ nTab, nRow, -static_cast<long>(mpRowHeights->getValue(nRow)));
}
}
// Filter-Flag immer setzen, auch wenn Hidden unveraendert
- if (bShow)
- pRowFlags->SetValue( nRow, nFlags & ~(CR_HIDDEN | CR_FILTERED));
- else
- pRowFlags->SetValue( nRow, nFlags | (CR_HIDDEN | CR_FILTERED));
- DecRecalcLevel();
+ SetRowHidden(nRow, nRow, !bShow);
+ SetRowFiltered(nRow, nRow, !bShow);
+ DecRecalcLevel();
if (bWasVis != bShow)
{
@@ -2359,6 +2530,8 @@ void ScTable::DBShowRow(SCROW nRow, BOOL bShow)
if (pOutlineTable)
UpdateOutlineRow( nRow, nRow, bShow );
+
+ InvalidatePageBreaks();
}
}
else
@@ -2368,26 +2541,25 @@ void ScTable::DBShowRow(SCROW nRow, BOOL bShow)
}
-void ScTable::DBShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow)
+void ScTable::DBShowRows(SCROW nRow1, SCROW nRow2, bool bShow)
{
SCROW nStartRow = nRow1;
IncRecalcLevel();
InitializeNoteCaptions();
while (nStartRow <= nRow2)
{
- BYTE nOldFlag = pRowFlags->GetValue(nStartRow) & CR_HIDDEN;
- SCROW nEndRow = pRowFlags->GetBitStateEnd( nStartRow, CR_HIDDEN, nOldFlag);
+ SCROW nEndRow = -1;
+ bool bWasVis = !RowHidden(nStartRow, nEndRow);
if (nEndRow > nRow2)
nEndRow = nRow2;
- BOOL bWasVis = ( nOldFlag == 0 );
BOOL bChanged = ( bWasVis != bShow );
if ( bChanged )
{
ScDrawLayer* pDrawLayer = pDocument->GetDrawLayer();
if (pDrawLayer)
{
- long nHeight = (long) pRowHeight->SumValues( nStartRow, nEndRow);
+ long nHeight = static_cast<long>(mpRowHeights->getSumValue(nStartRow, nEndRow));
if (bShow)
pDrawLayer->HeightChanged( nTab, nStartRow, nHeight );
else
@@ -2395,10 +2567,8 @@ void ScTable::DBShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow)
}
}
- if (bShow)
- pRowFlags->AndValue( nStartRow, nEndRow, sal::static_int_cast<BYTE>(~(CR_HIDDEN | CR_FILTERED)) );
- else
- pRowFlags->OrValue( nStartRow, nEndRow, (CR_HIDDEN | CR_FILTERED));
+ SetRowHidden(nStartRow, nEndRow, !bShow);
+ SetRowFiltered(nStartRow, nEndRow, !bShow);
if ( bChanged )
{
@@ -2420,26 +2590,25 @@ void ScTable::DBShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow)
}
-void ScTable::ShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow)
+void ScTable::ShowRows(SCROW nRow1, SCROW nRow2, bool bShow)
{
SCROW nStartRow = nRow1;
IncRecalcLevel();
InitializeNoteCaptions();
while (nStartRow <= nRow2)
{
- BYTE nOldFlag = pRowFlags->GetValue(nStartRow) & CR_HIDDEN;
- SCROW nEndRow = pRowFlags->GetBitStateEnd( nStartRow, CR_HIDDEN, nOldFlag);
+ SCROW nEndRow = -1;
+ bool bWasVis = !RowHidden(nStartRow, nEndRow);
if (nEndRow > nRow2)
nEndRow = nRow2;
- BOOL bWasVis = ( nOldFlag == 0 );
BOOL bChanged = ( bWasVis != bShow );
if ( bChanged )
{
ScDrawLayer* pDrawLayer = pDocument->GetDrawLayer();
if (pDrawLayer)
{
- long nHeight = (long) pRowHeight->SumValues( nStartRow, nEndRow);
+ long nHeight = static_cast<long>(mpRowHeights->getSumValue(nStartRow, nEndRow));
if (bShow)
pDrawLayer->HeightChanged( nTab, nStartRow, nHeight );
else
@@ -2447,16 +2616,17 @@ void ScTable::ShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow)
}
}
+ SetRowHidden(nStartRow, nEndRow, !bShow);
if (bShow)
- pRowFlags->AndValue( nStartRow, nEndRow, sal::static_int_cast<BYTE>(~(CR_HIDDEN | CR_FILTERED)) );
- else
- pRowFlags->OrValue( nStartRow, nEndRow, CR_HIDDEN);
+ SetRowFiltered(nStartRow, nEndRow, false);
if ( bChanged )
{
ScChartListenerCollection* pCharts = pDocument->GetChartListenerCollection();
if ( pCharts )
pCharts->SetRangeDirty(ScRange( 0, nStartRow, nTab, MAXCOL, nEndRow, nTab ));
+
+ InvalidatePageBreaks();
}
nStartRow = nEndRow + 1;
@@ -2465,16 +2635,6 @@ void ScTable::ShowRows(SCROW nRow1, SCROW nRow2, BOOL bShow)
}
-BOOL ScTable::IsFiltered(SCROW nRow) const
-{
- if (VALIDROW(nRow) && pRowFlags)
- return ( pRowFlags->GetValue(nRow) & CR_FILTERED ) != 0;
-
- DBG_ERROR("Falsche Zeilennummer oder keine Flags");
- return FALSE;
-}
-
-
void ScTable::SetColFlags( SCCOL nCol, BYTE nNewFlags )
{
if (VALIDCOL(nCol) && pColFlags)
@@ -2528,11 +2688,32 @@ BYTE ScTable::GetRowFlags( SCROW nRow ) const
SCROW ScTable::GetLastFlaggedRow() const
{
- if ( !pRowFlags )
- return 0;
+ SCROW nLastFound = 0;
+ if (pRowFlags)
+ {
+ SCROW nRow = pRowFlags->GetLastAnyBitAccess( 0, sal::static_int_cast<BYTE>(CR_ALL) );
+ if (ValidRow(nRow))
+ nLastFound = nRow;
+ }
+
+ if (!maRowManualBreaks.empty())
+ nLastFound = ::std::max(nLastFound, *maRowManualBreaks.rbegin());
+
+ if (mpHiddenRows)
+ {
+ SCROW nRow = mpHiddenRows->findLastNotOf(false);
+ if (ValidRow(nRow))
+ nLastFound = ::std::max(nLastFound, nRow);
+ }
+
+ if (mpFilteredRows)
+ {
+ SCROW nRow = mpFilteredRows->findLastNotOf(false);
+ if (ValidRow(nRow))
+ nLastFound = ::std::max(nLastFound, nRow);
+ }
- SCROW nLastFound = pRowFlags->GetLastAnyBitAccess( 0, sal::static_int_cast<BYTE>(~CR_PAGEBREAK) );
- return ValidRow(nLastFound) ? nLastFound : 0;
+ return nLastFound;
}
@@ -2543,7 +2724,7 @@ SCCOL ScTable::GetLastChangedCol() const
SCCOL nLastFound = 0;
for (SCCOL nCol = 1; nCol <= MAXCOL; nCol++)
- if ((pColFlags[nCol] & ~CR_PAGEBREAK) || (pColWidth[nCol] != STD_COL_WIDTH))
+ if ((pColFlags[nCol] & CR_ALL) || (pColWidth[nCol] != STD_COL_WIDTH))
nLastFound = nCol;
return nLastFound;
@@ -2555,11 +2736,12 @@ SCROW ScTable::GetLastChangedRow() const
if ( !pRowFlags )
return 0;
- SCROW nLastFlags = pRowFlags->GetLastAnyBitAccess( 0, sal::static_int_cast<BYTE>(~CR_PAGEBREAK) );
- if (!ValidRow(nLastFlags))
- nLastFlags = 0;
+ SCROW nLastFlags = GetLastFlaggedRow();
- SCROW nLastHeight = pRowHeight->GetLastUnequalAccess( 0, ScGlobal::nStdRowHeight);
+ // Find the last row position where the height is NOT the standard row
+ // height.
+ // KOHEI: Test this to make sure it does what it's supposed to.
+ SCROW nLastHeight = mpRowHeights->findLastNotOf(ScGlobal::nStdRowHeight);
if (!ValidRow(nLastHeight))
nLastHeight = 0;
@@ -2572,7 +2754,7 @@ BOOL ScTable::UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, BOOL bShow )
if (pOutlineTable && pColFlags)
{
ScBitMaskCompressedArray< SCCOLROW, BYTE> aArray( MAXCOL, pColFlags, MAXCOLCOUNT);
- return pOutlineTable->GetColArray()->ManualAction( nStartCol, nEndCol, bShow, aArray );
+ return pOutlineTable->GetColArray()->ManualAction( nStartCol, nEndCol, bShow, *this, true );
}
else
return FALSE;
@@ -2582,7 +2764,7 @@ BOOL ScTable::UpdateOutlineCol( SCCOL nStartCol, SCCOL nEndCol, BOOL bShow )
BOOL ScTable::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, BOOL bShow )
{
if (pOutlineTable && pRowFlags)
- return pOutlineTable->GetRowArray()->ManualAction( nStartRow, nEndRow, bShow, *pRowFlags );
+ return pOutlineTable->GetRowArray()->ManualAction( nStartRow, nEndRow, bShow, *this, false );
else
return FALSE;
}
@@ -2590,54 +2772,58 @@ BOOL ScTable::UpdateOutlineRow( SCROW nStartRow, SCROW nEndRow, BOOL bShow )
void ScTable::ExtendHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 )
{
- if (pColFlags)
- {
- while ( rX1>0 ? (pColFlags[rX1-1] & CR_HIDDEN) : FALSE )
- --rX1;
- while ( rX2<MAXCOL ? (pColFlags[rX2+1] & CR_HIDDEN) : FALSE )
- ++rX2;
- }
- if (pRowFlags)
+ // Column-wise expansion
+
+ while (rX1 > 0 && ColHidden(rX1-1))
+ --rX1;
+
+ while (rX2 < MAXCOL && ColHidden(rX2+1))
+ ++rX2;
+
+ // Row-wise expansion
+
+ if (rY1 > 0)
{
- if (rY1 > 0)
+ ScFlatBoolRowSegments::RangeData aData;
+ if (mpHiddenRows->getRangeData(rY1-1, aData) && aData.mbValue)
{
- SCROW nStartRow = pRowFlags->GetBitStateStart( rY1-1, CR_HIDDEN, CR_HIDDEN);
+ SCROW nStartRow = aData.mnRow1;
if (ValidRow(nStartRow))
rY1 = nStartRow;
}
- if (rY2 < MAXROW)
- {
- SCROW nEndRow = pRowFlags->GetBitStateEnd( rY2+1, CR_HIDDEN, CR_HIDDEN);
- if (ValidRow(nEndRow))
- rY2 = nEndRow;
- }
+ }
+ if (rY2 < MAXROW)
+ {
+ SCROW nEndRow = -1;
+ if (RowHidden(rY2+1, nEndRow) && ValidRow(nEndRow))
+ rY2 = nEndRow;
}
}
void ScTable::StripHidden( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 )
{
- if (pColFlags)
- {
- while ( rX2>rX1 && (pColFlags[rX2] & CR_HIDDEN) )
- --rX2;
- while ( rX2>rX1 && (pColFlags[rX1] & CR_HIDDEN) )
- ++rX1;
- }
- if (pRowFlags)
+ while ( rX2>rX1 && ColHidden(rX2) )
+ --rX2;
+ while ( rX2>rX1 && ColHidden(rX1) )
+ ++rX1;
+
+ if (rY1 < rY2)
{
- if (rY1 < rY2)
+ ScFlatBoolRowSegments::RangeData aData;
+ if (mpHiddenRows->getRangeData(rY2, aData) && aData.mbValue)
{
- SCROW nStartRow = pRowFlags->GetBitStateStart( rY2, CR_HIDDEN, CR_HIDDEN);
+ SCROW nStartRow = aData.mnRow1;
if (ValidRow(nStartRow) && nStartRow >= rY1)
rY2 = nStartRow;
}
- if (rY1 < rY2)
- {
- SCROW nEndRow = pRowFlags->GetBitStateEnd( rY1, CR_HIDDEN, CR_HIDDEN);
- if (ValidRow(nEndRow) && nEndRow <= rY2)
- rY1 = nEndRow;
- }
+ }
+
+ if (rY1 < rY2)
+ {
+ SCROW nEndRow = -1;
+ if (RowHidden(rY1, nEndRow) && ValidRow(nEndRow) && nEndRow <= rY2)
+ rY1 = nEndRow;
}
}
@@ -2799,16 +2985,16 @@ BOOL ScTable::RefVisible(ScFormulaCell* pCell)
if (pCell->HasOneReference(aRef))
{
- if (aRef.aStart.Col()==aRef.aEnd.Col() && aRef.aStart.Tab()==aRef.aEnd.Tab() && pRowFlags)
+ if (aRef.aStart.Col()==aRef.aEnd.Col() && aRef.aStart.Tab()==aRef.aEnd.Tab())
{
- // while ((value & CR_FILTERED) == CR_FILTERED)
- // most times will be faster than
- // while ((value & CR_FILTERED) == 0)
- SCROW nEndRow = pRowFlags->GetBitStateEnd( aRef.aStart.Row(),
- CR_FILTERED, CR_FILTERED);
+ SCROW nEndRow;
+ if (!RowFiltered(aRef.aStart.Row(), NULL, &nEndRow))
+ // row not filtered.
+ nEndRow = ::std::numeric_limits<SCROW>::max();
+
if (!ValidRow(nEndRow) || nEndRow < aRef.aEnd.Row())
return TRUE; // at least partly visible
- return FALSE; // completely unvisible
+ return FALSE; // completely invisible
}
}
@@ -2850,18 +3036,17 @@ void ScTable::SetDrawPageSize(bool bResetStreamValid, bool bUpdateNoteCaptionPos
}
-ULONG ScTable::GetRowOffset( SCROW nRow ) const
+ULONG ScTable::GetRowOffset( SCROW nRow )
{
ULONG n = 0;
- if ( pRowFlags && pRowHeight )
+ if ( mpHiddenRows && mpRowHeights )
{
if (nRow == 0)
return 0;
else if (nRow == 1)
return GetRowHeight(0);
- n = pRowFlags->SumCoupledArrayForCondition( 0, nRow-1, CR_HIDDEN, 0,
- *pRowHeight);
+ n = GetTotalRowHeight(0, nRow-1);
#ifdef DBG_UTIL
if (n == ::std::numeric_limits<unsigned long>::max())
DBG_ERRORFILE("ScTable::GetRowOffset: row heights overflow");
@@ -2874,18 +3059,42 @@ ULONG ScTable::GetRowOffset( SCROW nRow ) const
return n;
}
+SCROW ScTable::GetRowForHeight(ULONG nHeight)
+{
+ sal_uInt32 nSum = 0;
+
+ ScFlatBoolRowSegments::RangeData aData;
+ for (SCROW nRow = 0; nRow <= MAXROW; ++nRow)
+ {
+ if (!mpHiddenRows->getRangeData(nRow, aData))
+ break;
+
+ if (aData.mbValue)
+ {
+ nRow = aData.mnRow2;
+ continue;
+ }
+
+ sal_uInt32 nNew = mpRowHeights->getValue(nRow);
+ nSum += nNew;
+ if (nSum > nHeight)
+ {
+ return nRow < MAXROW ? nRow + 1 : MAXROW;
+ }
+ }
+ return -1;
+}
+
-ULONG ScTable::GetColOffset( SCCOL nCol ) const
+ULONG ScTable::GetColOffset( SCCOL nCol )
{
ULONG n = 0;
- if ( pColFlags && pColWidth )
+ if ( pColWidth )
{
SCCOL i;
- BYTE* pFlags = pColFlags;
- USHORT* pWidth = pColWidth;
- for( i = 0; i < nCol; i++, pFlags++, pWidth++ )
- if( !( *pFlags & CR_HIDDEN ) )
- n += *pWidth;
+ for( i = 0; i < nCol; i++ )
+ if (!ColHidden(i))
+ n += pColWidth[i];
}
else
{
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 7d295b6286a8..bd6a2c92c442 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -208,17 +208,14 @@ void ScTable::SortReorder( ScSortInfoArray* pArray, ScProgress& rProgress )
{
BOOL bByRow = aSortParam.bByRow;
SCSIZE nCount = pArray->GetCount();
+ SCCOLROW nStart = pArray->GetStart();
ScSortInfo** ppInfo = pArray->GetFirstArray();
- // hngngn.. Win16 legacy? Table has ULONG count but can only be initialized using USHORT :-/
- // FIXME: use std::vector instead, would be better anyway (type safe)
- USHORT nArghl = (nCount > USHRT_MAX ? USHRT_MAX : static_cast<USHORT>(nCount));
- Table aTable( nArghl );
+ ::std::vector<ScSortInfo*> aTable(nCount);
SCSIZE nPos;
for ( nPos = 0; nPos < nCount; nPos++ )
- {
- aTable.Insert( ppInfo[nPos]->nOrg, (void*) ppInfo[nPos] );
- }
- SCCOLROW nDest = pArray->GetStart();
+ aTable[ppInfo[nPos]->nOrg - nStart] = ppInfo[nPos];
+
+ SCCOLROW nDest = nStart;
for ( nPos = 0; nPos < nCount; nPos++, nDest++ )
{
SCCOLROW nOrg = ppInfo[nPos]->nOrg;
@@ -231,9 +228,9 @@ void ScTable::SortReorder( ScSortInfoArray* pArray, ScProgress& rProgress )
// neue Position des weggeswapten eintragen
ScSortInfo* p = ppInfo[nPos];
p->nOrg = nDest;
- p = (ScSortInfo*) aTable.Replace( nDest, (void*) p );
+ ::std::swap(p, aTable[nDest-nStart]);
p->nOrg = nOrg;
- p = (ScSortInfo*) aTable.Replace( nOrg, (void*) p );
+ ::std::swap(p, aTable[nOrg-nStart]);
DBG_ASSERT( p == ppInfo[nPos], "SortReorder: nOrg MisMatch" );
}
rProgress.SetStateOnPercent( nPos );
@@ -449,14 +446,17 @@ void ScTable::SwapRow(SCROW nRow1, SCROW nRow2)
}
}
}
- if (bGlobalKeepQuery && pRowFlags)
+ if (bGlobalKeepQuery)
{
- BYTE nRow1Flags = pRowFlags->GetValue(nRow1);
- BYTE nRow2Flags = pRowFlags->GetValue(nRow2);
- BYTE nFlags1 = nRow1Flags & ( CR_HIDDEN | CR_FILTERED );
- BYTE nFlags2 = nRow2Flags & ( CR_HIDDEN | CR_FILTERED );
- pRowFlags->SetValue( nRow1, (nRow1Flags & ~( CR_HIDDEN | CR_FILTERED )) | nFlags2);
- pRowFlags->SetValue( nRow2, (nRow2Flags & ~( CR_HIDDEN | CR_FILTERED )) | nFlags1);
+ bool bRow1Hidden = RowHidden(nRow1);
+ bool bRow2Hidden = RowHidden(nRow2);
+ SetRowHidden(nRow1, nRow1, bRow2Hidden);
+ SetRowHidden(nRow2, nRow2, bRow1Hidden);
+
+ bool bRow1Filtered = RowFiltered(nRow1);
+ bool bRow2Filtered = RowFiltered(nRow2);
+ SetRowFiltered(nRow1, nRow1, bRow2Filtered);
+ SetRowFiltered(nRow2, nRow2, bRow1Filtered);
}
}
@@ -616,7 +616,7 @@ void ScTable::RemoveSubTotals( ScSubTotalParam& rParam )
if ( pCell->GetCellType() == CELLTYPE_FORMULA )
if (((ScFormulaCell*)pCell)->IsSubTotal())
{
- SetRowFlags(nRow+1,GetRowFlags(nRow+1)&(~CR_MANUALBREAK));
+ RemoveRowBreak(nRow+1, false, true);
pDocument->DeleteRow( 0,nTab, MAXCOL,nTab, nRow, 1 );
--nEndRow;
aIter = ScColumnIterator( &aCol[nCol],nRow,nEndRow );
@@ -784,9 +784,7 @@ BOOL ScTable::DoSubTotals( ScSubTotalParam& rParam )
bBlockVis = FALSE;
if ( rParam.bPagebreak && nRow < MAXROW &&
aRowEntry.nSubStartRow != nStartRow && nLevel == 0)
- SetRowFlags( aRowEntry.nSubStartRow,
- GetRowFlags(aRowEntry.nSubStartRow) |
- CR_MANUALBREAK);
+ SetRowBreak(aRowEntry.nSubStartRow, false, true);
if (bSpaceLeft)
{
@@ -839,13 +837,6 @@ BOOL ScTable::DoSubTotals( ScSubTotalParam& rParam )
SetString( nGroupCol[aRowEntry.nGroupNo], aRowEntry.nDestRow, nTab, aOutString );
ApplyStyle( nGroupCol[aRowEntry.nGroupNo], aRowEntry.nDestRow, *pStyle );
-/* if (rParam.bPagebreak && nRow < MAXROW)
- {
- BYTE nFlags = GetRowFlags( nRow+1 );
- nFlags |= CR_MANUALBREAK;
- SetRowFlags( nRow+1, nFlags );
- }
-*/
++nRow;
++nEndRow;
aRowEntry.nSubStartRow = nRow;
@@ -859,11 +850,7 @@ BOOL ScTable::DoSubTotals( ScSubTotalParam& rParam )
}
}
}
- if (!pRowFlags)
- bBlockVis = TRUE;
- else
- if ( (pRowFlags->GetValue(nRow) & CR_FILTERED) == 0 )
- bBlockVis = TRUE;
+ bBlockVis = !RowFiltered(nRow);
}
}
else
@@ -1935,8 +1922,8 @@ void ScTable::UpdateSelectionFunction( ScFunctionData& rData,
SCCOL nCol;
if ( rMark.IsMultiMarked() )
for (nCol=0; nCol<=MAXCOL && !rData.bError; nCol++)
- if ( !pColFlags || !( pColFlags[nCol] & CR_HIDDEN ) )
- aCol[nCol].UpdateSelectionFunction( rMark, rData, pRowFlags,
+ if ( !pColFlags || !ColHidden(nCol) )
+ aCol[nCol].UpdateSelectionFunction( rMark, rData, *mpHiddenRows,
bSingle && ( nCol >= nStartCol && nCol <= nEndCol ),
nStartRow, nEndRow );
@@ -1944,8 +1931,8 @@ void ScTable::UpdateSelectionFunction( ScFunctionData& rData,
if ( bSingle && !rMark.IsMarkNegative() )
for (nCol=nStartCol; nCol<=nEndCol && !rData.bError; nCol++)
- if ( !pColFlags || !( pColFlags[nCol] & CR_HIDDEN ) )
- aCol[nCol].UpdateAreaFunction( rData, pRowFlags, nStartRow, nEndRow );
+ if ( !pColFlags || !ColHidden(nCol) )
+ aCol[nCol].UpdateAreaFunction( rData, *mpHiddenRows, nStartRow, nEndRow );
}
void ScTable::FindConditionalFormat( ULONG nKey, ScRangeList& rList )
diff --git a/sc/source/core/data/table5.cxx b/sc/source/core/data/table5.cxx
index a3a0153a4b97..2635b5821e4f 100644
--- a/sc/source/core/data/table5.cxx
+++ b/sc/source/core/data/table5.cxx
@@ -50,8 +50,15 @@
#include "brdcst.hxx"
#include "tabprotection.hxx"
#include "globstr.hrc"
+#include "segmenttree.hxx"
+#include <com/sun/star/sheet/TablePageBreakData.hpp>
+
+#include <algorithm>
+#include <limits>
using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::sheet::TablePageBreakData;
+using ::std::set;
// STATIC DATA -----------------------------------------------------------
@@ -62,8 +69,18 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
{
if ( pDocument->IsImportingXML() )
return;
- if ( !pUserArea && !bPageSizeValid )
- return;
+
+ // pUserArea != NULL -> print area is specified. We need to force-update
+ // the page breaks.
+
+ if (!pUserArea)
+ {
+ if (!bPageSizeValid)
+ return;
+
+ if (mbPageBreaksValid)
+ return;
+ }
SfxStyleSheetBase* pStyle = pDocument->GetStyleSheetPool()->
Find( aPageStyle, SFX_STYLE_FAMILY_PAGE );
@@ -76,7 +93,6 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
const SfxPoolItem* pItem;
SCCOL nX;
- SCROW nY;
SCCOL nStartCol = 0;
SCROW nStartRow = 0;
SCCOL nEndCol = MAXCOL;
@@ -96,8 +112,9 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
// bei mehreren Bereichen nichts anzeigen:
for (nX=0; nX<MAXCOL; nX++)
- pColFlags[nX] &= ~CR_PAGEBREAK;
- pRowFlags->AndValue( 0, MAXROW-1, sal::static_int_cast<BYTE>(~CR_PAGEBREAK) );
+ RemoveColBreak(nX, true, false);
+
+ RemoveRowPageBreaks(0, MAXROW-1);
return;
}
@@ -143,13 +160,13 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
// Anfang: Breaks loeschen
for (nX=0; nX<nStartCol; nX++)
- pColFlags[nX] &= ~CR_PAGEBREAK;
- pRowFlags->AndValue( 0, nStartRow-1, sal::static_int_cast<BYTE>(~CR_PAGEBREAK) );
+ RemoveColBreak(nX, true, false);
+ RemoveRowPageBreaks(0, nStartRow-1);
if (nStartCol > 0)
- pColFlags[nStartCol] |= CR_PAGEBREAK; //! AREABREAK
+ SetColBreak(nStartCol, true, false); // AREABREAK
if (nStartRow > 0)
- pRowFlags->OrValue( nStartRow, CR_PAGEBREAK); //! AREABREAK
+ SetRowBreak(nStartRow, true, false); // AREABREAK
// Mittelteil: Breaks verteilen
@@ -159,15 +176,16 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
for (nX=nStartCol; nX<=nEndCol; nX++)
{
BOOL bStartOfPage = FALSE;
- long nThisX = ( pColFlags[nX] & CR_HIDDEN ) ? 0 : pColWidth[nX];
- if ( (nSizeX+nThisX > nPageSizeX) || ((pColFlags[nX] & CR_MANUALBREAK) && !bSkipColBreaks) )
+ long nThisX = ColHidden(nX) ? 0 : pColWidth[nX];
+ bool bManualBreak = HasColManualBreak(nX);
+ if ( (nSizeX+nThisX > nPageSizeX) || (bManualBreak && !bSkipColBreaks) )
{
- pColFlags[nX] |= CR_PAGEBREAK;
+ SetColBreak(nX, true, false);
nSizeX = 0;
bStartOfPage = TRUE;
}
else if (nX != nStartCol)
- pColFlags[nX] &= ~CR_PAGEBREAK;
+ RemoveColBreak(nX, true, false);
else
bStartOfPage = TRUE;
@@ -175,9 +193,9 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
{
// subtract size of repeat columns from page size
for (SCCOL i=nRepeatStartX; i<=nRepeatEndX; i++)
- nPageSizeX -= ( pColFlags[i] & CR_HIDDEN ) ? 0 : pColWidth[i];
+ nPageSizeX -= ColHidden(i) ? 0 : pColWidth[i];
while (nX<=nRepeatEndX)
- pColFlags[++nX] &= ~CR_PAGEBREAK;
+ RemoveColBreak(++nX, true, false);
bColFound = TRUE;
}
@@ -185,23 +203,40 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
}
// Remove all page breaks in range.
- pRowFlags->AndValue( nStartRow+1, nEndRow, sal::static_int_cast<BYTE>(~CR_PAGEBREAK) );
+ RemoveRowPageBreaks(nStartRow+1, nEndRow);
+
// And set new page breaks.
BOOL bRepeatRow = ( nRepeatStartY != SCROW_REPEAT_NONE );
BOOL bRowFound = FALSE;
long nSizeY = 0;
- ScCompressedArrayIterator< SCROW, BYTE> aFlagsIter( *pRowFlags, nStartRow, nEndRow);
- ScCompressedArrayIterator< SCROW, USHORT> aHeightIter( *pRowHeight, nStartRow, nEndRow);
- for ( ; aFlagsIter; ++aFlagsIter, ++aHeightIter)
+ ScFlatBoolRowSegments::ForwardIterator aIterHidden(*mpHiddenRows);
+ ScFlatUInt16RowSegments::ForwardIterator aIterHeights(*mpRowHeights);
+ SCROW nNextManualBreak = GetNextManualBreak(nStartRow); // -1 => no more manual breaks
+ for (SCROW nY = nStartRow; nY <= nEndRow; ++nY)
{
- nY = aFlagsIter.GetPos();
BOOL bStartOfPage = FALSE;
- BYTE nFlags = *aFlagsIter;
- long nThisY = (nFlags & CR_HIDDEN) ? 0 : *aHeightIter;
- if ( (nSizeY+nThisY > nPageSizeY) || ((nFlags & CR_MANUALBREAK) && !bSkipRowBreaks) )
+ bool bThisRowHidden = false;
+ aIterHidden.getValue(nY, bThisRowHidden);
+ long nThisY = 0;
+ if (!bThisRowHidden)
+ {
+ sal_uInt16 nTmp;
+ aIterHeights.getValue(nY, nTmp);
+ nThisY = static_cast<long>(nTmp);
+ }
+
+ bool bManualBreak = false;
+ if (nNextManualBreak >= 0)
+ {
+ bManualBreak = (nY == nNextManualBreak);
+ if (nY >= nNextManualBreak)
+ // Query the next menual break position.
+ nNextManualBreak = GetNextManualBreak(nY+1);
+ }
+
+ if ( (nSizeY+nThisY > nPageSizeY) || (bManualBreak && !bSkipRowBreaks) )
{
- pRowFlags->SetValue( nY, nFlags | CR_PAGEBREAK);
- aFlagsIter.Resync( nY);
+ SetRowBreak(nY, true, false);
nSizeY = 0;
bStartOfPage = TRUE;
}
@@ -213,21 +248,47 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
if ( bStartOfPage && bRepeatRow && nY>nRepeatStartY && !bRowFound )
{
// subtract size of repeat rows from page size
- unsigned long nHeights = pRowFlags->SumCoupledArrayForCondition(
- nRepeatStartY, nRepeatEndY, CR_HIDDEN, 0, *pRowHeight);
+ unsigned long nHeights = GetTotalRowHeight(nRepeatStartY, nRepeatEndY);
#ifdef DBG_UTIL
if (nHeights == ::std::numeric_limits<unsigned long>::max())
DBG_ERRORFILE("ScTable::UpdatePageBreaks: row heights overflow");
#endif
nPageSizeY -= nHeights;
if (nY <= nRepeatEndY)
+ RemoveRowPageBreaks(nY, nRepeatEndY);
+ bRowFound = TRUE;
+ }
+
+ if (bThisRowHidden)
+ {
+ // Hidden row range. Skip them unless there is a manual break.
+ SCROW nLastCommon = aIterHidden.getLastPos();
+ if (nNextManualBreak >= 0)
+ nLastCommon = ::std::min(nLastCommon, nNextManualBreak-1);
+ nY = nLastCommon;
+ }
+ else
+ {
+ // Visible row range.
+
+ SCROW nLastHidden = aIterHidden.getLastPos();
+ SCROW nLastHeight = aIterHeights.getLastPos();
+ SCROW nLastCommon = ::std::min(nLastHidden, nLastHeight);
+ if (nNextManualBreak >= 0)
+ nLastCommon = ::std::min(nLastCommon, nNextManualBreak-1);
+
+ if (nLastCommon > nY)
{
- pRowFlags->AndValue( nY, nRepeatEndY, sal::static_int_cast<BYTE>(~CR_PAGEBREAK) );
- nY = nRepeatEndY + 1;
- aFlagsIter.Resync( nY);
- aHeightIter.Resync( nY);
+ long nMaxMultiple = static_cast<long>(nLastCommon - nY);
+ long nMultiple = (nPageSizeY - nSizeY) / nThisY;
+ if (nMultiple > nMaxMultiple)
+ nMultiple = nMaxMultiple;
+ if (nMultiple > 1)
+ {
+ nSizeY += nThisY * (nMultiple - 1);
+ nY += nMultiple - 1;
+ }
}
- bRowFound = TRUE;
}
nSizeY += nThisY;
@@ -237,26 +298,24 @@ void ScTable::UpdatePageBreaks( const ScRange* pUserArea )
if (nEndCol < MAXCOL)
{
- pColFlags[nEndCol+1] |= CR_PAGEBREAK; //! AREABREAK
+ SetColBreak(nEndCol+1, true, false); // AREABREAK
for (nX=nEndCol+2; nX<=MAXCOL; nX++)
- pColFlags[nX] &= ~CR_PAGEBREAK;
+ RemoveColBreak(nX, true, false);
}
if (nEndRow < MAXROW)
{
- pRowFlags->OrValue( nEndRow+1, CR_PAGEBREAK); //! AREABREAK
+ SetRowBreak(nEndRow+1, true, false); // AREABREAK
if (nEndRow+2 <= MAXROW)
- pRowFlags->AndValue( nEndRow+2, MAXROW, sal::static_int_cast<BYTE>(~CR_PAGEBREAK) );
+ RemoveRowPageBreaks(nEndRow+2, MAXROW);
}
+ mbPageBreaksValid = true;
}
void ScTable::RemoveManualBreaks()
{
- if (pColFlags)
- for (SCCOL nCol = 0; nCol <= MAXCOL; nCol++)
- pColFlags[nCol] &= ~CR_MANUALBREAK;
-
- if (pRowFlags)
- pRowFlags->AndValue( 0, MAXROW, sal::static_int_cast<BYTE>(~CR_MANUALBREAK) );
+ maRowManualBreaks.clear();
+ maColManualBreaks.clear();
+ InvalidatePageBreaks();
if (IsStreamValid())
SetStreamValid(FALSE);
@@ -264,22 +323,673 @@ void ScTable::RemoveManualBreaks()
BOOL ScTable::HasManualBreaks() const
{
- if (pColFlags)
- for (SCCOL nCol = 0; nCol <= MAXCOL; nCol++)
- if ( pColFlags[nCol] & CR_MANUALBREAK )
- return TRUE;
+ return !maRowManualBreaks.empty() || !maColManualBreaks.empty();
+}
+
+void ScTable::GetAllRowBreaks(set<SCROW>& rBreaks, bool bPage, bool bManual) const
+{
+ if (bPage)
+ rBreaks = maRowPageBreaks;
+
+ if (bManual)
+ {
+ using namespace std;
+ copy(maRowManualBreaks.begin(), maRowManualBreaks.end(), inserter(rBreaks, rBreaks.begin()));
+ }
+}
+
+void ScTable::GetAllColBreaks(set<SCCOL>& rBreaks, bool bPage, bool bManual) const
+{
+ if (bPage)
+ rBreaks = maColPageBreaks;
- if (pRowFlags)
- if (ValidRow( pRowFlags->GetLastAnyBitAccess( 0, CR_MANUALBREAK)))
- return TRUE;
+ if (bManual)
+ {
+ using namespace std;
+ copy(maColManualBreaks.begin(), maColManualBreaks.end(), inserter(rBreaks, rBreaks.begin()));
+ }
+}
+
+bool ScTable::HasRowPageBreak(SCROW nRow) const
+{
+ if (!ValidRow(nRow))
+ return false;
+
+ return maRowPageBreaks.count(nRow) > 0;
+}
+
+bool ScTable::HasColPageBreak(SCCOL nCol) const
+{
+ if (!ValidCol(nCol))
+ return false;
+
+ return maColPageBreaks.count(nCol) > 0;
+}
+
+bool ScTable::HasRowManualBreak(SCROW nRow) const
+{
+ if (!ValidRow(nRow))
+ return false;
+
+ return maRowManualBreaks.count(nRow) > 0;
+}
- return FALSE;
+bool ScTable::HasColManualBreak(SCCOL nCol) const
+{
+ if (!ValidCol(nCol))
+ return false;
+
+ return (maColManualBreaks.count(nCol) > 0);
+}
+
+SCROW ScTable::GetNextManualBreak(SCROW nRow) const
+{
+ set<SCROW>::const_iterator itr = maRowManualBreaks.lower_bound(nRow);
+ return itr == maRowManualBreaks.end() ? -1 : *itr;
+}
+
+void ScTable::RemoveRowPageBreaks(SCROW nStartRow, SCROW nEndRow)
+{
+ using namespace std;
+
+ if (!ValidRow(nStartRow) || !ValidRow(nEndRow))
+ return;
+
+ set<SCROW>::iterator low = maRowPageBreaks.lower_bound(nStartRow);
+ set<SCROW>::iterator high = maRowPageBreaks.upper_bound(nEndRow);
+ maRowPageBreaks.erase(low, high);
+}
+
+void ScTable::RemoveRowBreak(SCROW nRow, bool bPage, bool bManual)
+{
+ if (!ValidRow(nRow))
+ return;
+
+ if (bPage)
+ maRowPageBreaks.erase(nRow);
+
+ if (bManual)
+ {
+ maRowManualBreaks.erase(nRow);
+ InvalidatePageBreaks();
+ }
+}
+
+void ScTable::RemoveColBreak(SCCOL nCol, bool bPage, bool bManual)
+{
+ if (!ValidCol(nCol))
+ return;
+
+ if (bPage)
+ maColPageBreaks.erase(nCol);
+
+ if (bManual)
+ {
+ maColManualBreaks.erase(nCol);
+ InvalidatePageBreaks();
+ }
+}
+
+void ScTable::SetRowBreak(SCROW nRow, bool bPage, bool bManual)
+{
+ if (!ValidRow(nRow))
+ return;
+
+ if (bPage)
+ maRowPageBreaks.insert(nRow);
+
+ if (bManual)
+ {
+ maRowManualBreaks.insert(nRow);
+ InvalidatePageBreaks();
+ }
+}
+
+void ScTable::SetColBreak(SCCOL nCol, bool bPage, bool bManual)
+{
+ if (!ValidCol(nCol))
+ return;
+
+ if (bPage)
+ maColPageBreaks.insert(nCol);
+
+ if (bManual)
+ {
+ maColManualBreaks.insert(nCol);
+ InvalidatePageBreaks();
+ }
+}
+
+Sequence<TablePageBreakData> ScTable::GetRowBreakData() const
+{
+ using ::std::copy;
+ using ::std::inserter;
+
+ set<SCROW> aRowBreaks = maRowPageBreaks;
+ copy(maRowManualBreaks.begin(), maRowManualBreaks.end(), inserter(aRowBreaks, aRowBreaks.begin()));
+
+ set<SCROW>::const_iterator itr = aRowBreaks.begin(), itrEnd = aRowBreaks.end();
+ Sequence<TablePageBreakData> aSeq(aRowBreaks.size());
+
+ for (sal_Int32 i = 0; itr != itrEnd; ++itr, ++i)
+ {
+ SCROW nRow = *itr;
+ TablePageBreakData aData;
+ aData.Position = nRow;
+ aData.ManualBreak = HasRowManualBreak(nRow);
+ aSeq[i] = aData;
+ }
+
+ return aSeq;
+}
+
+bool ScTable::RowHidden(SCROW nRow, SCROW* pFirstRow, SCROW* pLastRow)
+{
+ if (!ValidRow(nRow))
+ return true;
+
+ ScFlatBoolRowSegments::RangeData aData;
+ if (!mpHiddenRows->getRangeData(nRow, aData))
+ // search failed.
+ return true;
+
+ if (pFirstRow)
+ *pFirstRow = aData.mnRow1;
+ if (pLastRow)
+ *pLastRow = aData.mnRow2;
+
+ return aData.mbValue;
+}
+
+
+bool ScTable::RowHidden(SCROW nRow, SCROW& rLastRow)
+{
+ rLastRow = nRow;
+ if (!ValidRow(nRow))
+ return true;
+
+ ScFlatBoolRowSegments::RangeData aData;
+ if (!mpHiddenRows->getRangeData(nRow, aData))
+ // search failed.
+ return true;
+
+ rLastRow = aData.mnRow2;
+ return aData.mbValue;
+}
+
+bool ScTable::HasHiddenRows(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nStartRow;
+ while (nRow <= nEndRow)
+ {
+ SCROW nLastRow = -1;
+ bool bHidden = RowHidden(nRow, nLastRow);
+ if (bHidden)
+ return true;
+
+ nRow = nLastRow + 1;
+ }
+ return false;
+}
+
+bool ScTable::ColHidden(SCCOL nCol, SCCOL& rLastCol)
+{
+ rLastCol = nCol;
+ if (!ValidCol(nCol))
+ return true;
+
+ ScFlatBoolColSegments::RangeData aData;
+ if (!mpHiddenCols->getRangeData(nCol, aData))
+ return true;
+
+ rLastCol = aData.mnCol2;
+ return aData.mbValue;
+}
+
+bool ScTable::ColHidden(SCCOL nCol, SCCOL* pFirstCol, SCCOL* pLastCol)
+{
+ if (!ValidCol(nCol))
+ return true;
+
+ ScFlatBoolColSegments::RangeData aData;
+ if (!mpHiddenCols->getRangeData(nCol, aData))
+ return true;
+
+ if (pFirstCol)
+ *pFirstCol = aData.mnCol1;
+ if (pLastCol)
+ *pLastCol = aData.mnCol2;
+
+ return aData.mbValue;
+}
+
+void ScTable::SetRowHidden(SCROW nStartRow, SCROW nEndRow, bool bHidden)
+{
+ if (bHidden)
+ mpHiddenRows->setTrue(nStartRow, nEndRow);
+ else
+ mpHiddenRows->setFalse(nStartRow, nEndRow);
+}
+
+void ScTable::SetColHidden(SCCOL nStartCol, SCCOL nEndCol, bool bHidden)
+{
+ if (bHidden)
+ mpHiddenCols->setTrue(nStartCol, nEndCol);
+ else
+ mpHiddenCols->setFalse(nStartCol, nEndCol);
+}
+
+void ScTable::CopyColHidden(ScTable& rTable, SCCOL nStartCol, SCCOL nEndCol)
+{
+ SCCOL nCol = nStartCol;
+ while (nCol <= nEndCol)
+ {
+ SCCOL nLastCol;
+ bool bHidden = rTable.ColHidden(nCol, NULL, &nLastCol);
+ if (nLastCol > nEndCol)
+ nLastCol = nEndCol;
+
+ SetColHidden(nCol, nLastCol, bHidden);
+ nCol = nLastCol + 1;
+ }
+}
+
+void ScTable::CopyRowHidden(ScTable& rTable, SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nStartRow;
+ while (nRow <= nEndRow)
+ {
+ SCROW nLastRow = -1;
+ bool bHidden = rTable.RowHidden(nRow, nLastRow);
+ if (nLastRow > nEndRow)
+ nLastRow = nEndRow;
+ SetRowHidden(nRow, nLastRow, bHidden);
+ nRow = nLastRow + 1;
+ }
+}
+
+void ScTable::CopyRowHeight(ScTable& rSrcTable, SCROW nStartRow, SCROW nEndRow, SCROW nSrcOffset)
+{
+ SCROW nRow = nStartRow;
+ ScFlatUInt16RowSegments::RangeData aSrcData;
+ while (nRow <= nEndRow)
+ {
+ if (!rSrcTable.mpRowHeights->getRangeData(nRow + nSrcOffset, aSrcData))
+ // Something is wrong !
+ return;
+
+ SCROW nLastRow = aSrcData.mnRow2 - nSrcOffset;
+ if (nLastRow > nEndRow)
+ nLastRow = nEndRow;
+
+ mpRowHeights->setValue(nRow, nLastRow, aSrcData.mnValue);
+ nRow = nLastRow + 1;
+ }
+}
+
+SCROW ScTable::FirstVisibleRow(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nStartRow;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow <= nEndRow)
+ {
+ if (!ValidRow(nRow))
+ break;
+
+ if (!mpHiddenRows->getRangeData(nRow, aData))
+ // failed to get range data.
+ break;
+
+ if (!aData.mbValue)
+ // visible row found
+ return nRow;
+
+ nRow = aData.mnRow2 + 1;
+ }
+
+ return ::std::numeric_limits<SCROW>::max();
+}
+
+SCROW ScTable::LastVisibleRow(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nEndRow;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow >= nStartRow)
+ {
+ if (!ValidRow(nRow))
+ break;
+
+ if (!mpHiddenRows->getRangeData(nRow, aData))
+ // failed to get range data.
+ break;
+
+ if (!aData.mbValue)
+ // visible row found
+ return nRow;
+
+ nRow = aData.mnRow1 - 1;
+ }
+
+ return ::std::numeric_limits<SCROW>::max();
+}
+
+SCROW ScTable::CountVisibleRows(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nCount = 0;
+ SCROW nRow = nStartRow;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow <= nEndRow)
+ {
+ if (!mpHiddenRows->getRangeData(nRow, aData))
+ break;
+
+ if (aData.mnRow2 > nEndRow)
+ aData.mnRow2 = nEndRow;
+
+ if (!aData.mbValue)
+ nCount += aData.mnRow2 - nRow + 1;
+
+ nRow = aData.mnRow2 + 1;
+ }
+ return nCount;
+}
+
+sal_uInt32 ScTable::GetTotalRowHeight(SCROW nStartRow, SCROW nEndRow)
+{
+ sal_uInt32 nHeight = 0;
+ SCROW nRow = nStartRow;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow <= nEndRow)
+ {
+ if (!mpHiddenRows->getRangeData(nRow, aData))
+ break;
+
+ if (aData.mnRow2 > nEndRow)
+ aData.mnRow2 = nEndRow;
+
+ if (!aData.mbValue)
+ // visible row range.
+ nHeight += mpRowHeights->getSumValue(nRow, aData.mnRow2);
+
+ nRow = aData.mnRow2 + 1;
+ }
+
+ return nHeight;
+}
+
+SCCOLROW ScTable::LastHiddenColRow(SCCOLROW nPos, bool bCol)
+{
+ if (bCol)
+ {
+ SCCOL nCol = static_cast<SCCOL>(nPos);
+ if (ColHidden(nCol))
+ {
+ for (SCCOL i = nCol+1; i <= MAXCOL; ++i)
+ {
+ if (!ColHidden(nCol))
+ return nCol - 1;
+ }
+ }
+ }
+ else
+ {
+ SCROW nRow = static_cast<SCROW>(nPos);
+ SCROW nLastRow;
+ if (RowHidden(nRow, NULL, &nLastRow))
+ return static_cast<SCCOLROW>(nLastRow);
+ }
+ return ::std::numeric_limits<SCCOLROW>::max();
+}
+
+bool ScTable::RowFiltered(SCROW nRow, SCROW* pFirstRow, SCROW* pLastRow)
+{
+ if (!ValidRow(nRow))
+ return false;
+
+ ScFlatBoolRowSegments::RangeData aData;
+ if (!mpFilteredRows->getRangeData(nRow, aData))
+ // search failed.
+ return false;
+
+ if (pFirstRow)
+ *pFirstRow = aData.mnRow1;
+ if (pLastRow)
+ *pLastRow = aData.mnRow2;
+
+ return aData.mbValue;
+}
+
+bool ScTable::ColFiltered(SCCOL nCol, SCCOL* pFirstCol, SCCOL* pLastCol)
+{
+ if (!ValidCol(nCol))
+ return false;
+
+ ScFlatBoolColSegments::RangeData aData;
+ if (!mpFilteredCols->getRangeData(nCol, aData))
+ // search failed.
+ return false;
+
+ if (pFirstCol)
+ *pFirstCol = aData.mnCol1;
+ if (pLastCol)
+ *pLastCol = aData.mnCol2;
+
+ return aData.mbValue;
+}
+
+bool ScTable::HasFilteredRows(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nStartRow;
+ while (nRow <= nEndRow)
+ {
+ SCROW nLastRow = nRow;
+ bool bFiltered = RowFiltered(nRow, NULL, &nLastRow);
+ if (bFiltered)
+ return true;
+
+ nRow = nLastRow + 1;
+ }
+ return false;
+}
+
+void ScTable::CopyColFiltered(ScTable& rTable, SCCOL nStartCol, SCCOL nEndCol)
+{
+ SCCOL nCol = nStartCol;
+ while (nCol <= nEndCol)
+ {
+ SCCOL nLastCol;
+ bool bFiltered = rTable.ColFiltered(nCol, NULL, &nLastCol);
+ if (nLastCol > nEndCol)
+ nLastCol = nEndCol;
+
+ SetColFiltered(nCol, nLastCol, bFiltered);
+ nCol = nLastCol + 1;
+ }
+}
+
+void ScTable::CopyRowFiltered(ScTable& rTable, SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nStartRow;
+ while (nRow <= nEndRow)
+ {
+ SCROW nLastRow = -1;
+ bool bFiltered = rTable.RowFiltered(nRow, NULL, &nLastRow);
+ if (nLastRow > nEndRow)
+ nLastRow = nEndRow;
+ SetRowFiltered(nRow, nLastRow, bFiltered);
+ nRow = nLastRow + 1;
+ }
+}
+
+void ScTable::SetRowFiltered(SCROW nStartRow, SCROW nEndRow, bool bFiltered)
+{
+ if (bFiltered)
+ mpFilteredRows->setTrue(nStartRow, nEndRow);
+ else
+ mpFilteredRows->setFalse(nStartRow, nEndRow);
+}
+
+void ScTable::SetColFiltered(SCCOL nStartCol, SCCOL nEndCol, bool bFiltered)
+{
+ if (bFiltered)
+ mpFilteredCols->setTrue(nStartCol, nEndCol);
+ else
+ mpFilteredCols->setFalse(nStartCol, nEndCol);
+}
+
+SCROW ScTable::FirstNonFilteredRow(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nStartRow;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow <= nEndRow)
+ {
+ if (!ValidRow(nRow))
+ break;
+
+ if (!mpFilteredRows->getRangeData(nRow, aData))
+ // failed to get range data.
+ break;
+
+ if (!aData.mbValue)
+ // non-filtered row found
+ return nRow;
+
+ nRow = aData.mnRow2 + 1;
+ }
+
+ return ::std::numeric_limits<SCROW>::max();
+}
+
+SCROW ScTable::LastNonFilteredRow(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nRow = nEndRow;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow >= nStartRow)
+ {
+ if (!ValidRow(nRow))
+ break;
+
+ if (!mpFilteredRows->getRangeData(nRow, aData))
+ // failed to get range data.
+ break;
+
+ if (!aData.mbValue)
+ // non-filtered row found
+ return nRow;
+
+ nRow = aData.mnRow1 - 1;
+ }
+
+ return ::std::numeric_limits<SCROW>::max();
+}
+
+SCROW ScTable::CountNonFilteredRows(SCROW nStartRow, SCROW nEndRow)
+{
+ SCROW nCount = 0;
+ SCROW nRow = nStartRow;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow <= nEndRow)
+ {
+ if (!mpFilteredRows->getRangeData(nRow, aData))
+ break;
+
+ if (aData.mnRow2 > nEndRow)
+ aData.mnRow2 = nEndRow;
+
+ if (!aData.mbValue)
+ nCount += aData.mnRow2 - nRow + 1;
+
+ nRow = aData.mnRow2 + 1;
+ }
+ return nCount;
+}
+
+namespace {
+
+void lcl_syncFlags(ScFlatBoolColSegments& rColSegments, ScFlatBoolRowSegments& rRowSegments,
+ BYTE* pColFlags, ScBitMaskCompressedArray< SCROW, BYTE>* pRowFlags, const BYTE nFlagMask)
+{
+ using ::sal::static_int_cast;
+
+ pRowFlags->AndValue(0, MAXROW, static_int_cast<BYTE>(~nFlagMask));
+ for (SCCOL i = 0; i <= MAXCOL; ++i)
+ pColFlags[i] &= static_int_cast<BYTE>(~nFlagMask);
+
+ {
+ // row hidden flags.
+
+ SCROW nRow = 0;
+ ScFlatBoolRowSegments::RangeData aData;
+ while (nRow <= MAXROW)
+ {
+ if (!rRowSegments.getRangeData(nRow, aData))
+ break;
+
+ if (aData.mbValue)
+ pRowFlags->OrValue(nRow, aData.mnRow2, static_int_cast<BYTE>(nFlagMask));
+
+ nRow = aData.mnRow2 + 1;
+ }
+ }
+
+ {
+ // column hidden flags.
+
+ SCCOL nCol = 0;
+ ScFlatBoolColSegments::RangeData aData;
+ while (nCol <= MAXCOL)
+ {
+ if (!rColSegments.getRangeData(nCol, aData))
+ break;
+
+ if (aData.mbValue)
+ {
+ for (SCCOL i = nCol; i <= aData.mnCol2; ++i)
+ pColFlags[i] |= nFlagMask;
+ }
+
+ nCol = aData.mnCol2 + 1;
+ }
+ }
+}
+
+}
+
+void ScTable::SyncColRowFlags()
+{
+ using ::sal::static_int_cast;
+
+ // Manual breaks.
+ pRowFlags->AndValue(0, MAXROW, static_int_cast<BYTE>(~CR_MANUALBREAK));
+ for (SCCOL i = 0; i <= MAXCOL; ++i)
+ pColFlags[i] &= static_int_cast<BYTE>(~CR_MANUALBREAK);
+
+ if (!maRowManualBreaks.empty())
+ {
+ for (set<SCROW>::const_iterator itr = maRowManualBreaks.begin(), itrEnd = maRowManualBreaks.end();
+ itr != itrEnd; ++itr)
+ pRowFlags->OrValue(*itr, static_int_cast<BYTE>(CR_MANUALBREAK));
+ }
+
+ if (!maColManualBreaks.empty())
+ {
+ for (set<SCCOL>::const_iterator itr = maColManualBreaks.begin(), itrEnd = maColManualBreaks.end();
+ itr != itrEnd; ++itr)
+ pColFlags[*itr] |= CR_MANUALBREAK;
+ }
+
+ // Hidden flags.
+ lcl_syncFlags(*mpHiddenCols, *mpHiddenRows, pColFlags, pRowFlags, CR_HIDDEN);
+ lcl_syncFlags(*mpFilteredCols, *mpFilteredRows, pColFlags, pRowFlags, CR_FILTERED);
}
void ScTable::SetPageSize( const Size& rSize )
{
if ( rSize.Width() != 0 && rSize.Height() != 0 )
{
+ if (aPageSizeTwips != rSize)
+ InvalidatePageBreaks();
+
bPageSizeValid = TRUE;
aPageSizeTwips = rSize;
}
diff --git a/sc/source/core/data/tabprotection.cxx b/sc/source/core/data/tabprotection.cxx
index 5b87fef3151a..2709dd54d1fb 100644
--- a/sc/source/core/data/tabprotection.cxx
+++ b/sc/source/core/data/tabprotection.cxx
@@ -33,6 +33,7 @@
#include "tabprotection.hxx"
#include "tools/debug.hxx"
#include "svl/PasswordHelper.hxx"
+#include <comphelper/docpasswordhelper.hxx>
#include "document.hxx"
#define DEBUG_TAB_PROTECTION 0
@@ -75,40 +76,6 @@ ScPassHashProtectable::~ScPassHashProtectable()
// ============================================================================
-static sal_uInt16 lcl_getXLHashFromChar(const sal_Char* szPassword)
-{
- sal_uInt16 cchPassword = static_cast< sal_uInt16 >( strlen(szPassword) );
- sal_uInt16 wPasswordHash = 0;
- if (!cchPassword)
- return wPasswordHash;
-
- const char* pch = &szPassword[cchPassword];
- while (pch-- != szPassword)
- {
- wPasswordHash = ((wPasswordHash >> 14) & 0x01) |
- ((wPasswordHash << 1) & 0x7fff);
- wPasswordHash ^= *pch;
- }
-
- wPasswordHash = ((wPasswordHash >> 14) & 0x01) |
- ((wPasswordHash << 1) & 0x7fff);
-
- wPasswordHash ^= (0x8000 | ('N' << 8) | 'K');
- wPasswordHash ^= cchPassword;
-
- return wPasswordHash;
-}
-
-static Sequence<sal_Int8> lcl_getXLHash(const String& aPassText)
-{
- const sal_Char* szBuf = OUStringToOString(OUString(aPassText), RTL_TEXTENCODING_UTF8).getStr();
- sal_uInt16 nHash = lcl_getXLHashFromChar(szBuf);
- Sequence<sal_Int8> aHash(2);
- aHash[0] = (nHash >> 8) & 0xFF;
- aHash[1] = nHash & 0xFF;
- return aHash;
-}
-
class ScTableProtectionImpl
{
public:
@@ -146,7 +113,7 @@ Sequence<sal_Int8> ScTableProtectionImpl::hashPassword(const String& aPassText,
switch (eHash)
{
case PASSHASH_XL:
- aHash = lcl_getXLHash(aPassText);
+ aHash = ::comphelper::DocPasswordHelper::GetXLHashAsSequence( aPassText, RTL_TEXTENCODING_UTF8 );
break;
case PASSHASH_OOO:
default:
diff --git a/sc/source/core/inc/bcaslot.hxx b/sc/source/core/inc/bcaslot.hxx
index 1ecbefe4a9b1..13384b033628 100644
--- a/sc/source/core/inc/bcaslot.hxx
+++ b/sc/source/core/inc/bcaslot.hxx
@@ -214,10 +214,6 @@ private:
+---+---+
*/
- /* TODO: When going for 1M rows this will definitely need some change, or
- * with lots of referred sheets even the reservation of NULL pointers would
- * be a memory hog. */
-
class TableSlots
{
public:
@@ -227,7 +223,8 @@ private:
/**
Obtain slot pointer, no check on validity! It is assumed that
- all calls are made with the result of ComputeSlotOfsset()
+ all calls are made with the results of ComputeSlotOffset(),
+ ComputeAreaPoints() and ComputeNextSlot()
*/
inline ScBroadcastAreaSlot* getAreaSlot( SCSIZE nOff ) { return *(ppSlots + nOff); }
diff --git a/sc/source/core/inc/doubleref.hxx b/sc/source/core/inc/doubleref.hxx
index e7bd2dfa6ae1..10221d942c9c 100644
--- a/sc/source/core/inc/doubleref.hxx
+++ b/sc/source/core/inc/doubleref.hxx
@@ -47,11 +47,10 @@ struct ScQueryParamBase;
class ScDBRangeBase
{
public:
- enum RefType { INTERNAL, EXTERNAL };
+ enum RefType { INTERNAL, EXTERNAL }; // TODO: We may not need this after all... (kohei)
virtual ~ScDBRangeBase() = 0;
- RefType getType() const;
bool fillQueryEntries(ScQueryParamBase* pParam, const ScDBRangeBase* pDBRef) const;
virtual SCCOL getColSize() const = 0;
diff --git a/sc/source/core/tool/addincol.cxx b/sc/source/core/tool/addincol.cxx
index c0ae60f13841..07b79c11b373 100644
--- a/sc/source/core/tool/addincol.cxx
+++ b/sc/source/core/tool/addincol.cxx
@@ -51,6 +51,7 @@
#include <com/sun/star/table/XCellRange.hpp>
#include <com/sun/star/lang/Locale.hpp>
#include <com/sun/star/sheet/XCompatibilityNames.hpp>
+#include <com/sun/star/sheet/NoConvergenceException.hpp>
#include "addincol.hxx"
#include "addinhelpid.hxx"
@@ -1582,9 +1583,13 @@ void ScUnoAddInCall::ExecuteCallWithArgs(uno::Sequence<uno::Any>& rCallArgs)
if ( rWrapped.TargetException.getValueType().equals(
getCppuType( (lang::IllegalArgumentException*)0 ) ) )
nErrCode = errIllegalArgument;
+ else if ( rWrapped.TargetException.getValueType().equals(
+ getCppuType( (sheet::NoConvergenceException*)0 ) ) )
+ nErrCode = errNoConvergence;
else
nErrCode = errNoValue;
}
+
catch(uno::Exception&)
{
nErrCode = errNoValue;
diff --git a/sc/source/core/tool/chartarr.cxx b/sc/source/core/tool/chartarr.cxx
index 9e4e77b7c1d4..573763141b18 100644
--- a/sc/source/core/tool/chartarr.cxx
+++ b/sc/source/core/tool/chartarr.cxx
@@ -44,6 +44,9 @@
#include "cell.hxx"
#include "docoptio.hxx"
+#include <vector>
+
+using ::std::vector;
// -----------------------------------------------------------------------
@@ -163,11 +166,17 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
SCCOL nStrCol = nCol1; // fuer Beschriftung merken
SCROW nStrRow = nRow1;
- // Beschriftungen auch nach HiddenCols finden
- while ( (pDocument->GetColFlags( nCol1, nTab1) & CR_HIDDEN) != 0 )
- nCol1++;
- nRow1 = pDocument->GetRowFlagsArray( nTab1).GetFirstForCondition( nRow1,
- nRow2, CR_HIDDEN, 0);
+ // Skip hidden columns.
+ // TODO: make use of last column value once implemented.
+ SCCOL nLastCol = -1;
+ while (pDocument->ColHidden(nCol1, nTab1, nLastCol))
+ ++nCol1;
+
+ // Skip hidden rows.
+ SCROW nLastRow = -1;
+ if (pDocument->RowHidden(nRow1, nTab1, nLastRow))
+ nRow1 = nLastRow + 1;
+
// falls alles hidden ist, bleibt die Beschriftung am Anfang
if ( nCol1 <= nCol2 )
{
@@ -181,17 +190,33 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
}
SCSIZE nTotalCols = ( nCol1 <= nCol2 ? nCol2 - nCol1 + 1 : 0 );
- SCCOL* pCols = new SCCOL[nTotalCols > 0 ? nTotalCols : 1];
- SCSIZE nColCount = 0;
+ vector<SCCOL> aCols;
+ aCols.reserve(nTotalCols);
for (SCSIZE i=0; i<nTotalCols; i++)
- if ((pDocument->GetColFlags(sal::static_int_cast<SCCOL>(nCol1+i),nTab1)&CR_HIDDEN)==0)
- pCols[nColCount++] = sal::static_int_cast<SCCOL>(nCol1+i);
+ {
+ SCCOL nThisCol = sal::static_int_cast<SCCOL>(nCol1+i);
+ if (!pDocument->ColHidden(nThisCol, nTab1, nLastCol))
+ aCols.push_back(nThisCol);
+ }
+ SCSIZE nColCount = aCols.size();
SCSIZE nTotalRows = ( nRow1 <= nRow2 ? nRow2 - nRow1 + 1 : 0 );
- SCROW* pRows = new SCROW[nTotalRows > 0 ? nTotalRows : 1];
- SCSIZE nRowCount = (nTotalRows ?
- pDocument->GetRowFlagsArray( nTab1).FillArrayForCondition( nRow1,
- nRow2, CR_HIDDEN, 0, pRows, nTotalRows) : 0);
+ vector<SCROW> aRows;
+ aRows.reserve(nTotalRows);
+ if (nRow1 <= nRow2)
+ {
+ // Get all visible rows between nRow1 and nRow2.
+ SCROW nThisRow = nRow1;
+ while (nThisRow <= nRow2)
+ {
+ if (pDocument->RowHidden(nThisRow, nTab1, nLastRow))
+ nThisRow = nLastRow;
+ else
+ aRows.push_back(nThisRow);
+ ++nThisRow;
+ }
+ }
+ SCSIZE nRowCount = aRows.size();
// May happen at least with more than 32k rows.
if (nColCount > SHRT_MAX || nRowCount > SHRT_MAX)
@@ -205,13 +230,13 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
{
bValidData = FALSE;
nColCount = 1;
- pCols[0] = nStrCol;
+ aCols.push_back(nStrCol);
}
if ( !nRowCount )
{
bValidData = FALSE;
nRowCount = 1;
- pRows[0] = nStrRow;
+ aRows.push_back(nStrRow);
}
//
@@ -234,7 +259,7 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
{
double nVal = DBL_MIN; // Hack fuer Chart, um leere Zellen zu erkennen
- pDocument->GetCell( pCols[nCol], pRows[nRow], nTab1, pCell );
+ pDocument->GetCell( aCols[nCol], aRows[nRow], nTab1, pCell );
if (pCell)
{
CellType eType = pCell->GetCellType();
@@ -244,8 +269,8 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
if ( bCalcAsShown && nVal != 0.0 )
{
sal_uInt32 nFormat;
- pDocument->GetNumberFormat( pCols[nCol],
- pRows[nRow], nTab1, nFormat );
+ pDocument->GetNumberFormat( aCols[nCol],
+ aRows[nRow], nTab1, nFormat );
nVal = pDocument->RoundValueAsShown( nVal, nFormat );
}
}
@@ -277,13 +302,13 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
{
String aString, aColStr;
if (HasColHeaders())
- pDocument->GetString( pCols[nCol], nStrRow, nTab1, aString );
+ pDocument->GetString( aCols[nCol], nStrRow, nTab1, aString );
if ( !aString.Len() )
{
aString = ScGlobal::GetRscString(STR_COLUMN);
aString += ' ';
// aString += String::CreateFromInt32( pCols[nCol]+1 );
- ScAddress aPos( pCols[ nCol ], 0, 0 );
+ ScAddress aPos( aCols[ nCol ], 0, 0 );
aPos.Format( aColStr, SCA_VALID_COL, NULL );
aString += aColStr;
}
@@ -303,14 +328,14 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
String aString;
if (HasRowHeaders())
{
- ScAddress aAddr( nStrCol, pRows[nRow], nTab1 );
- pDocument->GetString( nStrCol, pRows[nRow], nTab1, aString );
+ ScAddress aAddr( nStrCol, aRows[nRow], nTab1 );
+ pDocument->GetString( nStrCol, aRows[nRow], nTab1, aString );
}
if ( !aString.Len() )
{
aString = ScGlobal::GetRscString(STR_ROW);
aString += ' ';
- aString += String::CreateFromInt32( pRows[nRow]+1 );
+ aString += String::CreateFromInt32( aRows[nRow]+1 );
}
pMemChart->SetRowText( static_cast<short>(nRow), aString);
@@ -346,11 +371,6 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
// SetExtraStrings( *pMemChart );
}
- // Aufraeumen
-
- delete[] pRows;
- delete[] pCols;
-
return pMemChart;
}
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 5f4b86b7cd18..c28d295275ae 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -121,6 +121,24 @@ enum ScanState
ssStop
};
+// ODFF names that are not written in the current mapping but to be recognized.
+// New names will be written in a future relase, then exchange (!) with the
+// names in formula/source/core/resource/core_resource.src to be able to still
+// read the old names as well.
+struct FunctionName
+{
+ const sal_Char* pName;
+ OpCode eOp;
+};
+static const FunctionName aOdffAliases[] = {
+ // Renamed old names:
+ // XXX none yet.
+ // Renamed new names:
+ { "BINOM.DIST.RANGE", ocB }, // B -> BINOM.DIST.RANGE
+ { "LEGACY.TDIST", ocTDist } // TDIST -> LEGACY.TDIST
+};
+static const size_t nOdffAliases = sizeof(aOdffAliases) / sizeof(aOdffAliases[0]);
+
static const sal_Char* pInternal[ 1 ] = { "TTT" };
using namespace ::com::sun::star::i18n;
@@ -2504,7 +2522,21 @@ BOOL ScCompiler::IsOpCode( const String& rName, bool bInArray )
aToken.SetOpCode(eOp);
pRawToken = aToken.Clone();
}
- else
+ else if (mxSymbols->isODFF())
+ {
+ for (size_t i=0; i<nOdffAliases; ++i)
+ {
+ if (rName.EqualsIgnoreCaseAscii( aOdffAliases[i].pName))
+ {
+ ScRawToken aToken;
+ aToken.SetOpCode( aOdffAliases[i].eOp);
+ pRawToken = aToken.Clone();
+ bFound = TRUE;
+ break; // for
+ }
+ }
+ }
+ if (!bFound)
{
String aIntName;
if (mxSymbols->hasExternals())
@@ -2887,6 +2919,7 @@ BOOL ScCompiler::IsReference( const String& rName )
BOOL ScCompiler::IsMacro( const String& rName )
{
+ String aName( rName);
StarBASIC* pObj = 0;
SfxObjectShell* pDocSh = pDoc->GetDocumentShell();
@@ -2898,7 +2931,14 @@ BOOL ScCompiler::IsMacro( const String& rName )
else
pObj = pSfxApp->GetBasic();
- SbxMethod* pMeth = (SbxMethod*) pObj->Find( rName, SbxCLASS_METHOD );
+ // ODFF recommends to store user-defined functions prefixed with "USER.",
+ // use only unprefixed name if encountered. BASIC doesn't allow '.' in a
+ // function name so a function "USER.FOO" could not exist, and macro check
+ // is assigned the lowest priority in function name check.
+ if (FormulaGrammar::isODFF( GetGrammar()) && aName.EqualsIgnoreCaseAscii( "USER.", 0, 5))
+ aName.Erase( 0, 5);
+
+ SbxMethod* pMeth = (SbxMethod*) pObj->Find( aName, SbxCLASS_METHOD );
if( !pMeth )
{
pSfxApp->LeaveBasicCall();
@@ -2913,7 +2953,7 @@ BOOL ScCompiler::IsMacro( const String& rName )
return FALSE;
}
ScRawToken aToken;
- aToken.SetExternal( rName.GetBuffer() );
+ aToken.SetExternal( aName.GetBuffer() );
aToken.eOp = ocMacro;
pRawToken = aToken.Clone();
pSfxApp->LeaveBasicCall();
diff --git a/sc/source/core/tool/detfunc.cxx b/sc/source/core/tool/detfunc.cxx
index 1f257512ae50..e86bb22646c8 100644
--- a/sc/source/core/tool/detfunc.cxx
+++ b/sc/source/core/tool/detfunc.cxx
@@ -359,7 +359,7 @@ Point ScDetectiveFunc::GetDrawPos( SCCOL nCol, SCROW nRow, DrawPosMode eMode ) c
for ( SCCOL i = 0; i < nCol; ++i )
aPos.X() += pDoc->GetColWidth( i, nTab );
- aPos.Y() += pDoc->FastGetRowHeight( 0, nRow - 1, nTab );
+ aPos.Y() += pDoc->GetRowHeight( 0, nRow - 1, nTab );
aPos.X() = static_cast< long >( aPos.X() * HMM_PER_TWIPS );
aPos.Y() = static_cast< long >( aPos.Y() * HMM_PER_TWIPS );
diff --git a/sc/source/core/tool/doubleref.cxx b/sc/source/core/tool/doubleref.cxx
index 5c2d3f575654..740413ea8533 100644
--- a/sc/source/core/tool/doubleref.cxx
+++ b/sc/source/core/tool/doubleref.cxx
@@ -268,11 +268,6 @@ ScDBRangeBase::~ScDBRangeBase()
{
}
-ScDBRangeBase::RefType ScDBRangeBase::getType() const
-{
- return meType;
-}
-
bool ScDBRangeBase::fillQueryEntries(ScQueryParamBase* pParam, const ScDBRangeBase* pDBRef) const
{
if (!pDBRef)
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 2bf6a5680613..5c326001ff02 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -537,9 +537,14 @@ BOOL ScInterpreter::CreateDoubleArr(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
SCCOL nCol2, SCROW nRow2, SCTAB nTab2, BYTE* pCellArr)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "sc", "er", "ScInterpreter::CreateDoubleArr" );
-#if SC_ROWLIMIT_MORE_THAN_64K
-#error row limit 64k
+
+ // Old Add-Ins are hard limited to USHORT values.
+#if MAXCOLCOUNT_DEFINE > USHRT_MAX
+#error Add check for columns > USHRT_MAX!
#endif
+ if (nRow1 > USHRT_MAX || nRow2 > USHRT_MAX)
+ return FALSE;
+
USHORT nCount = 0;
USHORT* p = (USHORT*) pCellArr;
*p++ = static_cast<USHORT>(nCol1);
@@ -618,9 +623,14 @@ BOOL ScInterpreter::CreateStringArr(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
BYTE* pCellArr)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "sc", "er", "ScInterpreter::CreateStringArr" );
-#if SC_ROWLIMIT_MORE_THAN_64K
-#error row limit 64k
+
+ // Old Add-Ins are hard limited to USHORT values.
+#if MAXCOLCOUNT_DEFINE > USHRT_MAX
+#error Add check for columns > USHRT_MAX!
#endif
+ if (nRow1 > USHRT_MAX || nRow2 > USHRT_MAX)
+ return FALSE;
+
USHORT nCount = 0;
USHORT* p = (USHORT*) pCellArr;
*p++ = static_cast<USHORT>(nCol1);
@@ -713,9 +723,14 @@ BOOL ScInterpreter::CreateCellArr(SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
BYTE* pCellArr)
{
RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "sc", "er", "ScInterpreter::CreateCellArr" );
-#if SC_ROWLIMIT_MORE_THAN_64K
-#error row limit 64k
+
+ // Old Add-Ins are hard limited to USHORT values.
+#if MAXCOLCOUNT_DEFINE > USHRT_MAX
+#error Add check for columns > USHRT_MAX!
#endif
+ if (nRow1 > USHRT_MAX || nRow2 > USHRT_MAX)
+ return FALSE;
+
USHORT nCount = 0;
USHORT* p = (USHORT*) pCellArr;
*p++ = static_cast<USHORT>(nCol1);
@@ -2125,7 +2140,7 @@ void ScInterpreter::ScExternal()
if (ScGlobal::GetFuncCollection()->SearchFunc(aFuncName, nIndex))
{
FuncData* pFuncData = (FuncData*)ScGlobal::GetFuncCollection()->At(nIndex);
- if (nParamCount == pFuncData->GetParamCount() - 1)
+ if (nParamCount <= MAXFUNCPARAM && nParamCount == pFuncData->GetParamCount() - 1)
{
ParamType eParamType[MAXFUNCPARAM];
void* ppParam[MAXFUNCPARAM];
diff --git a/sc/source/filter/excel/colrowst.cxx b/sc/source/filter/excel/colrowst.cxx
index 3a48aa6b96ba..01587c036dea 100644
--- a/sc/source/filter/excel/colrowst.cxx
+++ b/sc/source/filter/excel/colrowst.cxx
@@ -207,7 +207,7 @@ void XclImpColRowSettings::Convert( SCTAB nScTab )
// row heights ------------------------------------------------------------
// #i54252# set default row height
- rDoc.SetRowHeightRange( 0, MAXROW, nScTab, mnDefHeight );
+ rDoc.SetRowHeightOnly( 0, MAXROW, nScTab, mnDefHeight );
if( ::get_flag( mnDefRowFlags, EXC_DEFROW_UNSYNCED ) )
// first access to row flags, do not ask for old flags
rDoc.SetRowFlags( 0, MAXROW, nScTab, CR_MANUALSIZE );
@@ -258,7 +258,7 @@ void XclImpColRowSettings::Convert( SCTAB nScTab )
{
DBG_ASSERT( (nScRow == 0) || (nFirstScRow >= 0), "XclImpColRowSettings::Convert - algorithm error" );
if( nScRow > 0 )
- rDoc.SetRowHeightRange( nFirstScRow, nScRow - 1, nScTab, nLastHeight );
+ rDoc.SetRowHeightOnly( nFirstScRow, nScRow - 1, nScTab, nLastHeight );
nFirstScRow = nScRow;
nLastHeight = nHeight;
@@ -267,7 +267,7 @@ void XclImpColRowSettings::Convert( SCTAB nScTab )
// set row height of last portion
if( mnLastScRow >= 0 )
- rDoc.SetRowHeightRange( nFirstScRow, mnLastScRow, nScTab, nLastHeight );
+ rDoc.SetRowHeightOnly( nFirstScRow, mnLastScRow, nScTab, nLastHeight );
// ------------------------------------------------------------------------
@@ -307,7 +307,7 @@ void XclImpColRowSettings::ConvertHiddenFlags( SCTAB nScTab )
rDoc.ShowRow( nScRow, nScTab, FALSE );
// #i38093# rows hidden by filter need extra flag
if( (nFirstFilterScRow <= nScRow) && (nScRow <= nLastFilterScRow) )
- rDoc.SetRowFlags( nScRow, nScTab, rDoc.GetRowFlags( nScRow, nScTab ) | CR_FILTERED );
+ rDoc.SetRowFiltered(nScRow, nScRow, nScTab, true);
}
}
diff --git a/sc/source/filter/excel/excdoc.cxx b/sc/source/filter/excel/excdoc.cxx
index 5534f8e775a9..2cf2d8f580c0 100644
--- a/sc/source/filter/excel/excdoc.cxx
+++ b/sc/source/filter/excel/excdoc.cxx
@@ -200,17 +200,12 @@ void ExcTable::FillAsHeader( ExcBoundsheetList& rBoundsheetList )
UINT16 nExcTabCount = rTabInfo.GetXclTabCount();
UINT16 nCodenames = static_cast< UINT16 >( GetExtDocOptions().GetCodeNameCount() );
- sal_uInt16 nWriteProtHash = 0;
- if( SfxObjectShell* pDocShell = GetDocShell() )
- {
- ScfPropertySet aPropSet( pDocShell->GetModel() );
- sal_Int32 nApiHash = 0;
- if( aPropSet.GetProperty( nApiHash, CREATE_OUSTRING( "WriteProtectionPassword" ) ) && (0 < nApiHash) && (nApiHash <= SAL_MAX_UINT16) )
- {
- nWriteProtHash = static_cast< sal_uInt16 >( nApiHash );
- Add( new XclExpEmptyRecord( EXC_ID_WRITEPROT ) );
- }
- }
+ SfxObjectShell* pShell = GetDocShell();
+ sal_uInt16 nWriteProtHash = pShell ? pShell->GetModifyPasswordHash() : 0;
+ bool bRecommendReadOnly = pShell && pShell->IsLoadReadonly();
+
+ if( (nWriteProtHash > 0) || bRecommendReadOnly )
+ Add( new XclExpEmptyRecord( EXC_ID_WRITEPROT ) );
// TODO: correct codepage for BIFF5?
sal_uInt16 nCodePage = XclTools::GetXclCodePage( (GetBiff() <= EXC_BIFF5) ? RTL_TEXTENCODING_MS_1252 : RTL_TEXTENCODING_UNICODE );
@@ -234,7 +229,7 @@ void ExcTable::FillAsHeader( ExcBoundsheetList& rBoundsheetList )
Add( new XclExpWriteAccess );
}
- Add( new XclExpFileSharing( GetRoot(), nWriteProtHash ) );
+ Add( new XclExpFileSharing( GetRoot(), nWriteProtHash, bRecommendReadOnly ) );
Add( new XclExpUInt16Record( EXC_ID_CODEPAGE, nCodePage ) );
if( GetBiff() == EXC_BIFF8 )
diff --git a/sc/source/filter/excel/excimp8.cxx b/sc/source/filter/excel/excimp8.cxx
index a3ea403bf4c3..9608804da9f9 100644
--- a/sc/source/filter/excel/excimp8.cxx
+++ b/sc/source/filter/excel/excimp8.cxx
@@ -30,6 +30,7 @@
#include "excimp8.hxx"
+#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <scitems.hxx>
#include <comphelper/processfactory.hxx>
@@ -54,6 +55,8 @@
#include <editeng/flditem.hxx>
#include <svx/xflclit.hxx>
#include <filter/msfilter/svxmsbas.hxx>
+#include <basic/basmgr.hxx>
+#include <oox/xls/excelvbaproject.hxx>
#include <vcl/graph.hxx>
#include <vcl/bmpacc.hxx>
@@ -64,6 +67,7 @@
#include <tools/string.hxx>
#include <tools/urlobj.hxx>
#include <rtl/math.hxx>
+#include <rtl/ustrbuf.hxx>
#include <unotools/localedatawrapper.hxx>
#include <unotools/charclass.hxx>
#include <drwlayer.hxx>
@@ -99,27 +103,19 @@
#include <com/sun/star/document/XDocumentProperties.hpp>
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
-#include <basic/basmgr.hxx>
#include <cppuhelper/component_context.hxx>
-#include <com/sun/star/container/XNameContainer.hpp>
#include <sfx2/app.hxx>
using namespace com::sun::star;
-
-
-#define INVALID_POS 0xFFFFFFFF
-
-
+using ::rtl::OUString;
ImportExcel8::ImportExcel8( XclImpRootData& rImpData, SvStream& rStrm ) :
- ImportExcel( rImpData, rStrm ), mnTab(0)
+ ImportExcel( rImpData, rStrm )
{
+ // replace BIFF2-BIFF5 formula importer with BIFF8 formula importer
delete pFormConv;
-
pFormConv = pExcRoot->pFmlaConverter = new ExcelToSc8( GetRoot() );
-
- bHasBasic = FALSE;
}
@@ -228,27 +224,6 @@ void ImportExcel8::Labelsst( void )
}
-void ImportExcel8::Codename( BOOL bWorkbookGlobals )
-{
- if( bHasBasic )
- {
- String aName( aIn.ReadUniString() );
- if( aName.Len() )
- {
- if( bWorkbookGlobals )
- {
- GetExtDocOptions().GetDocSettings().maGlobCodeName = aName;
- GetDoc().SetCodeName( aName );
- }
- else
- {
- GetExtDocOptions().AppendCodeName( aName );
- GetDoc().SetCodeName( mnTab++, aName );
- }
- }
- }
-}
-
void ImportExcel8::SheetProtection( void )
{
GetSheetProtectBuffer().ReadOptions( aIn, GetCurrScTab() );
@@ -294,9 +269,8 @@ void ImportExcel8::EndSheet( void )
void ImportExcel8::PostDocLoad( void )
{
- // delay reading basic until sheet object ( codenames etc. ) are read
-
- if ( bHasBasic )
+ // reading basic has been delayed until sheet objects (codenames etc.) are read
+ if( HasBasic() )
ReadBasic();
// #i11776# filtered ranges before outlines and hidden rows
if( pExcRoot->pAutoFilterBuffer )
@@ -317,24 +291,47 @@ void ImportExcel8::PostDocLoad( void )
}
// read doc info (no docshell while pasting from clipboard)
+ LoadDocumentProperties();
+ // attach document events to VBA macros
+ AttachDocumentEvents();
+
+ // #i45843# Pivot tables are now handled outside of PostDocLoad, so they are available
+ // when formula cells are calculated, for the GETPIVOTDATA function.
+}
+
+void ImportExcel8::LoadDocumentProperties()
+{
+ // no docshell while pasting from clipboard
if( SfxObjectShell* pShell = GetDocShell() )
{
// BIFF5+ without storage is possible
SotStorageRef xRootStrg = GetRootStorage();
- if( xRootStrg.Is() )
+ if( xRootStrg.Is() ) try
+ {
+ uno::Reference< document::XDocumentPropertiesSupplier > xDPS( pShell->GetModel(), uno::UNO_QUERY_THROW );
+ uno::Reference< document::XDocumentProperties > xDocProps( xDPS->getDocumentProperties(), uno::UNO_SET_THROW );
+ sfx2::LoadOlePropertySet( xDocProps, xRootStrg );
+ }
+ catch( uno::Exception& )
{
- uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
- pShell->GetModel(), uno::UNO_QUERY_THROW);
- uno::Reference<document::XDocumentProperties> xDocProps
- = xDPS->getDocumentProperties();
- sfx2::LoadOlePropertySet(xDocProps, GetRootStorage());
}
}
-
- // #i45843# Pivot tables are now handled outside of PostDocLoad, so they are available
- // when formula cells are calculated, for the GETPIVOTDATA function.
}
+void ImportExcel8::AttachDocumentEvents()
+{
+ SfxObjectShell* pShell = GetDocShell();
+ if( HasBasic() && pShell )
+ {
+ uno::Reference< lang::XMultiServiceFactory > xGlobalFactory = ::comphelper::getProcessServiceFactory();
+ uno::Reference< sheet::XSpreadsheetDocument > xDocument( pShell->GetModel(), uno::UNO_QUERY );
+ if( xGlobalFactory.is() && xDocument.is() )
+ {
+ ::oox::xls::VbaProject aVbaProject( xGlobalFactory, xDocument );
+ aVbaProject.attachToEvents();
+ }
+ }
+}
//___________________________________________________________________
// autofilter
diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx
index e62f050f2351..209d24ac043d 100644
--- a/sc/source/filter/excel/impop.cxx
+++ b/sc/source/filter/excel/impop.cxx
@@ -122,7 +122,8 @@ ImportExcel::ImportExcel( XclImpRootData& rImpData, SvStream& rStrm ):
ImportTyp( &rImpData.mrDoc, rImpData.meTextEnc ),
XclImpRoot( rImpData ),
maStrm( rStrm, GetRoot() ),
- aIn( maStrm )
+ aIn( maStrm ),
+ maScOleSize( ScAddress::INITIALIZE_INVALID )
{
mnLastRefIdx = 0;
nBdshtTab = 0;
@@ -178,15 +179,16 @@ void ImportExcel::ReadFileSharing()
maStrm >> nRecommendReadOnly >> nPasswordHash;
if( (nRecommendReadOnly != 0) || (nPasswordHash != 0) )
+ {
if( SfxItemSet* pItemSet = GetMedium().GetItemSet() )
pItemSet->Put( SfxBoolItem( SID_DOC_READONLY, TRUE ) );
- if( nPasswordHash != 0 )
- {
- if( SfxObjectShell* pDocShell = GetDocShell() )
+ if( SfxObjectShell* pShell = GetDocShell() )
{
- ScfPropertySet aPropSet( pDocShell->GetModel() );
- aPropSet.SetProperty( CREATE_OUSTRING( "WriteProtectionPassword" ), static_cast< sal_Int32 >( nPasswordHash ) );
+ if( nRecommendReadOnly != 0 )
+ pShell->SetLoadReadonly( sal_True );
+ if( nPasswordHash != 0 )
+ pShell->SetModifyPasswordHash( nPasswordHash );
}
}
}
@@ -919,8 +921,7 @@ void ImportExcel::Olesize( void )
aXclOleSize.Read( maStrm, false );
SCTAB nScTab = GetCurrScTab();
- ScRange& rOleSize = GetExtDocOptions().GetDocSettings().maOleSize;
- GetAddressConverter().ConvertRange( rOleSize, aXclOleSize, nScTab, nScTab, false );
+ GetAddressConverter().ConvertRange( maScOleSize, aXclOleSize, nScTab, nScTab, false );
}
@@ -1204,45 +1205,40 @@ void ImportExcel::PostDocLoad( void )
// process all drawing objects (including OLE, charts, controls; after hiding rows/columns; before visible OLE area)
GetObjectManager().ConvertObjects();
- // visible area if embedded OLE
- if( ScModelObj* pDocObj = GetDocModelObj() )
+ // visible area (used if this document is an embedded OLE object)
+ if( SfxObjectShell* pDocShell = GetDocShell() )
{
- if( SfxObjectShell* pEmbObj = pDocObj->GetEmbeddedObject() )
+ // visible area if embedded
+ const ScExtDocSettings& rDocSett = GetExtDocOptions().GetDocSettings();
+ SCTAB nDisplScTab = rDocSett.mnDisplTab;
+
+ /* #i44077# If a new OLE object is inserted from file, there is no
+ OLESIZE record in the Excel file. Calculate used area from file
+ contents (used cells and drawing objects). */
+ if( !maScOleSize.IsValid() )
{
- // visible area if embedded
- const ScExtDocSettings& rDocSett = GetExtDocOptions().GetDocSettings();
- SCTAB nDisplScTab = rDocSett.mnDisplTab;
-
- // first try if there was an OLESIZE record
- ScRange aScOleSize = rDocSett.maOleSize;
-
- /* #i44077# If a new OLE object is inserted from file, there
- is no OLESIZE record in the Excel file. Calculate used area
- from file contents (used cells and drawing objects). */
- if( !aScOleSize.IsValid() )
- {
- // used area of displayed sheet (cell contents)
- if( const ScExtTabSettings* pTabSett = GetExtDocOptions().GetTabSettings( nDisplScTab ) )
- aScOleSize = pTabSett->maUsedArea;
- // add all valid drawing objects
- ScRange aScObjArea = GetObjectManager().GetUsedArea( nDisplScTab );
- if( aScObjArea.IsValid() )
- aScOleSize.ExtendTo( aScObjArea );
- }
+ // used area of displayed sheet (cell contents)
+ if( const ScExtTabSettings* pTabSett = GetExtDocOptions().GetTabSettings( nDisplScTab ) )
+ maScOleSize = pTabSett->maUsedArea;
+ // add all valid drawing objects
+ ScRange aScObjArea = GetObjectManager().GetUsedArea( nDisplScTab );
+ if( aScObjArea.IsValid() )
+ maScOleSize.ExtendTo( aScObjArea );
+ }
- // valid size found - set it at the document
- if( aScOleSize.IsValid() )
- {
- pEmbObj->SetVisArea( GetDoc().GetMMRect(
- aScOleSize.aStart.Col(), aScOleSize.aStart.Row(),
- aScOleSize.aEnd.Col(), aScOleSize.aEnd.Row(), nDisplScTab ) );
- GetDoc().SetVisibleTab( nDisplScTab );
- }
+ // valid size found - set it at the document
+ if( maScOleSize.IsValid() )
+ {
+ pDocShell->SetVisArea( GetDoc().GetMMRect(
+ maScOleSize.aStart.Col(), maScOleSize.aStart.Row(),
+ maScOleSize.aEnd.Col(), maScOleSize.aEnd.Row(), nDisplScTab ) );
+ GetDoc().SetVisibleTab( nDisplScTab );
}
+ }
- // #111099# open forms in alive mode (has no effect, if no controls in document)
+ // #111099# open forms in alive mode (has no effect, if no controls in document)
+ if( ScModelObj* pDocObj = GetDocModelObj() )
pDocObj->setPropertyValue( CREATE_OUSTRING( SC_UNO_APPLYFMDES ), uno::Any( false ) );
- }
// enables extended options to be set to the view after import
GetExtDocOptions().SetChanged( true );
diff --git a/sc/source/filter/excel/read.cxx b/sc/source/filter/excel/read.cxx
index 3aef51d10c54..cfe5aedb867e 100644
--- a/sc/source/filter/excel/read.cxx
+++ b/sc/source/filter/excel/read.cxx
@@ -986,10 +986,10 @@ FltError ImportExcel8::Read( void )
case 0x22: Rec1904(); break; // 1904 [ 2345 ]
case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
case 0x8D: Hideobj(); break; // HIDEOBJ [ 345 ]
- case 0xD3: bHasBasic = true; break;
+ case 0xD3: SetHasBasic(); break;
case 0xDE: Olesize(); break;
- case 0x01BA: Codename( TRUE ); break;
+ case EXC_ID_CODENAME: ReadCodeName( aIn, true ); break;
case EXC_ID_USESELFS: ReadUsesElfs(); break;
case EXC_ID2_FONT: rFontBfr.ReadFont( maStrm ); break;
@@ -1082,6 +1082,8 @@ FltError ImportExcel8::Read( void )
case EXC_ID2_DIMENSIONS:
case EXC_ID3_DIMENSIONS: ReadDimensions(); break;
+ case EXC_ID_CODENAME: ReadCodeName( aIn, false ); break;
+
case 0x0A: // EOF [ 2345 ]
eAkt = EXC_STATE_SHEET;
aIn.SeekGlobalPosition(); // und zurueck an alte Position
@@ -1097,7 +1099,6 @@ FltError ImportExcel8::Read( void )
case 0x9B: FilterMode(); break; // FILTERMODE
case 0x9D: AutoFilterInfo(); break;// AUTOFILTERINFO
case 0x9E: AutoFilter(); break; // AUTOFILTER
- case 0x01BA: Codename( FALSE ); break;
case 0x0208: Row34(); break; // ROW [ 34 ]
case 0x0021:
case 0x0221: Array34(); break; // ARRAY [ 34 ]
@@ -1192,6 +1193,7 @@ FltError ImportExcel8::Read( void )
case EXC_ID_SXDI: rPTableMgr.ReadSxdi( maStrm ); break;
case EXC_ID_SXVDEX: rPTableMgr.ReadSxvdex( maStrm ); break;
case EXC_ID_SXEX: rPTableMgr.ReadSxex( maStrm ); break;
+ case EXC_ID_SHEETEXT: rTabViewSett.ReadTabBgColor( maStrm, rPal ); break;
case EXC_ID_SXVIEWEX9: rPTableMgr.ReadSxViewEx9( maStrm ); break;
}
}
diff --git a/sc/source/filter/excel/xeescher.cxx b/sc/source/filter/excel/xeescher.cxx
index a4b5864668b4..0509f2afa5fa 100644
--- a/sc/source/filter/excel/xeescher.cxx
+++ b/sc/source/filter/excel/xeescher.cxx
@@ -146,7 +146,7 @@ void XclExpDffSheetAnchor::ImplSetFlags( const SdrObject& rSdrObj )
void XclExpDffSheetAnchor::ImplCalcAnchorRect( const Rectangle& rRect, MapUnit eMapUnit )
{
- maAnchor.SetRect( GetDoc(), mnScTab, rRect, eMapUnit );
+ maAnchor.SetRect( GetRoot(), mnScTab, rRect, eMapUnit );
}
// ----------------------------------------------------------------------------
@@ -175,7 +175,7 @@ void XclExpDffEmbeddedAnchor::ImplCalcAnchorRect( const Rectangle& rRect, MapUni
XclExpDffNoteAnchor::XclExpDffNoteAnchor( const XclExpRoot& rRoot, const Rectangle& rRect ) :
XclExpDffAnchorBase( rRoot, EXC_ESC_ANCHOR_SIZELOCKED )
{
- maAnchor.SetRect( GetDoc(), rRoot.GetCurrScTab(), rRect, MAP_100TH_MM );
+ maAnchor.SetRect( rRoot, rRoot.GetCurrScTab(), rRect, MAP_100TH_MM );
}
// ----------------------------------------------------------------------------
diff --git a/sc/source/filter/excel/xepage.cxx b/sc/source/filter/excel/xepage.cxx
index 753d43e8d584..6194a04c27f6 100644
--- a/sc/source/filter/excel/xepage.cxx
+++ b/sc/source/filter/excel/xepage.cxx
@@ -45,9 +45,14 @@
#include "xehelper.hxx"
#include "xeescher.hxx"
+#include <set>
+#include <limits>
+
#include <oox/core/tokens.hxx>
using ::rtl::OString;
+using ::std::set;
+using ::std::numeric_limits;
// Page settings records ======================================================
@@ -299,17 +304,23 @@ XclExpPageSettings::XclExpPageSettings( const XclExpRoot& rRoot ) :
// *** page breaks ***
- ScCompressedArrayIterator< SCROW, BYTE> aIter( rDoc.GetRowFlagsArray( nScTab), 1, GetMaxPos().Row());
- do
+ set<SCROW> aRowBreaks;
+ rDoc.GetAllRowBreaks(aRowBreaks, nScTab, false, true);
+
+ SCROW nMaxRow = numeric_limits<sal_uInt16>::max();
+ for (set<SCROW>::const_iterator itr = aRowBreaks.begin(), itrEnd = aRowBreaks.end(); itr != itrEnd; ++itr)
{
- if (*aIter & CR_MANUALBREAK)
- for (SCROW j=aIter.GetRangeStart(); j<=aIter.GetRangeEnd(); ++j)
- maData.maHorPageBreaks.push_back( static_cast< sal_uInt16 >( j ) );
- } while (aIter.NextRange());
-
- for( SCCOL nScCol = 1, nScMaxCol = GetMaxPos().Col(); nScCol <= nScMaxCol; ++nScCol )
- if( rDoc.GetColFlags( nScCol, nScTab ) & CR_MANUALBREAK )
- maData.maVerPageBreaks.push_back( static_cast< sal_uInt16 >( nScCol ) );
+ SCROW nRow = *itr;
+ if (nRow > nMaxRow)
+ break;
+
+ maData.maHorPageBreaks.push_back(nRow);
+ }
+
+ set<SCCOL> aColBreaks;
+ rDoc.GetAllColBreaks(aColBreaks, nScTab, false, true);
+ for (set<SCCOL>::const_iterator itr = aColBreaks.begin(), itrEnd = aColBreaks.end(); itr != itrEnd; ++itr)
+ maData.maVerPageBreaks.push_back(*itr);
}
static void lcl_WriteHeaderFooter( XclExpXmlStream& rStrm )
diff --git a/sc/source/filter/excel/xeroot.cxx b/sc/source/filter/excel/xeroot.cxx
index 834873740d68..50e07ae1f2ed 100644
--- a/sc/source/filter/excel/xeroot.cxx
+++ b/sc/source/filter/excel/xeroot.cxx
@@ -33,6 +33,7 @@
#include <unotools/saveopt.hxx>
#include <svl/itemset.hxx>
#include <svl/stritem.hxx>
+#include <svl/intitem.hxx>
#include <svl/eitem.hxx>
#include "xecontent.hxx"
#include "xltracer.hxx"
@@ -247,24 +248,16 @@ bool XclExpRoot::IsDocumentEncrypted() const
return false;
}
-const String XclExpRoot::GetPassword() const
+String XclExpRoot::GetPassword() const
{
- SfxItemSet* pSet = GetMedium().GetItemSet();
- if (!pSet)
- return String();
-
- const SfxPoolItem* pItem = NULL;
- if (SFX_ITEM_SET == pSet->GetItemState(SID_PASSWORD, sal_True, &pItem))
+ if( SfxItemSet* pItemSet = GetMedium().GetItemSet() )
{
- const SfxStringItem* pStrItem = dynamic_cast<const SfxStringItem*>(pItem);
- if (pStrItem)
- {
- // Password from the save dialog.
- return pStrItem->GetValue();
- }
+ const SfxPoolItem* pItem = 0;
+ if( pItemSet->GetItemState( SID_PASSWORD, TRUE, &pItem ) == SFX_ITEM_SET )
+ if( const SfxStringItem* pStrItem = dynamic_cast< const SfxStringItem* >( pItem ) )
+ return pStrItem->GetValue();
}
-
- return String();
+ return String::EmptyString();
}
XclExpRootData::XclExpLinkMgrRef XclExpRoot::GetLocalLinkMgrRef() const
diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index 315282098cec..ccebe9a4280f 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -74,6 +74,7 @@ sal_uInt32 lclGetWeighting( XclExpColorType eType )
case EXC_COLOR_CELLTEXT:
case EXC_COLOR_CHARTTEXT:
case EXC_COLOR_CTRLTEXT: return 10;
+ case EXC_COLOR_TABBG:
case EXC_COLOR_CELLAREA: return 20;
case EXC_COLOR_GRID: return 50;
default: DBG_ERRORFILE( "lclGetWeighting - unknown color type" );
diff --git a/sc/source/filter/excel/xetable.cxx b/sc/source/filter/excel/xetable.cxx
index e9aaa70bceba..b5ca318a91b4 100644
--- a/sc/source/filter/excel/xetable.cxx
+++ b/sc/source/filter/excel/xetable.cxx
@@ -1601,8 +1601,7 @@ XclExpColinfo::XclExpColinfo( const XclExpRoot& rRoot,
mnWidth = XclTools::GetXclColumnWidth( nScWidth, GetCharWidth() );
// column flags
- BYTE nScColFlags = rDoc.GetColFlags( nScCol, nScTab );
- ::set_flag( mnFlags, EXC_COLINFO_HIDDEN, (nScColFlags & CR_HIDDEN) != 0 );
+ ::set_flag( mnFlags, EXC_COLINFO_HIDDEN, rDoc.ColHidden(nScCol, nScTab) );
// outline data
rOutlineBfr.Update( nScCol );
@@ -1827,23 +1826,17 @@ XclExpRow::XclExpRow( const XclExpRoot& rRoot, sal_uInt16 nXclRow,
BYTE nRowFlags = GetDoc().GetRowFlags( nScRow, nScTab );
bool bUserHeight = ::get_flag< BYTE >( nRowFlags, CR_MANUALSIZE );
- bool bHidden = ::get_flag< BYTE >( nRowFlags, CR_HIDDEN );
+ bool bHidden = GetDoc().RowHidden(nScRow, nScTab);
::set_flag( mnFlags, EXC_ROW_UNSYNCED, bUserHeight );
::set_flag( mnFlags, EXC_ROW_HIDDEN, bHidden );
// *** Row height *** -----------------------------------------------------
- USHORT nScHeight = GetDoc().GetRowHeight( nScRow, nScTab );
- if( nScHeight == 0 )
- {
- ::set_flag( mnFlags, EXC_ROW_HIDDEN );
- mnHeight = EXC_ROW_DEFAULTHEIGHT;
- }
+ if (bUserHeight)
+ mnHeight = GetDoc().GetRowHeight(nScRow, nScTab, false);
else
- {
- // Calc and Excel use twips
- mnHeight = static_cast< sal_uInt16 >( nScHeight );
- }
+ mnHeight = EXC_ROW_DEFAULTHEIGHT;
+
// #76250# not usable in Applix
// ::set_flag( mnHeight, EXC_ROW_FLAGDEFHEIGHT, !bUserHeight );
diff --git a/sc/source/filter/excel/xeview.cxx b/sc/source/filter/excel/xeview.cxx
index c342b5a40ea1..035afd0a5830 100644
--- a/sc/source/filter/excel/xeview.cxx
+++ b/sc/source/filter/excel/xeview.cxx
@@ -256,6 +256,35 @@ void XclExpSelection::WriteBody( XclExpStream& rStrm )
maSelData.maXclSelection.Write( rStrm, false );
}
+// ----------------------------------------------------------------------------
+
+XclExpTabBgColor::XclExpTabBgColor( const XclTabViewData& rTabViewData ) :
+ XclExpRecord( EXC_ID_SHEETEXT, 18 ),
+ mrTabViewData( rTabViewData )
+{
+}
+//TODO Fix savexml...
+/*void XclExpTabBgColor::SaveXml( XclExpXmlStream& rStrm )
+{
+}*/
+
+void XclExpTabBgColor::WriteBody( XclExpStream& rStrm )
+{
+ if ( mrTabViewData.IsDefaultTabBgColor() )
+ return;
+ sal_uInt16 rt = 0x0862; //rt
+ sal_uInt16 grbitFrt = 0x0000; //grbit must be set to 0
+ sal_uInt32 unused = 0x00000000; //Use twice...
+ sal_uInt32 cb = 0x00000014; // Record Size, may be larger in future...
+ sal_uInt16 reserved = 0x0000; //trailing bits are 0
+ sal_uInt16 TabBgColorIndex;
+ XclExpPalette& rPal = rStrm.GetRoot().GetPalette();
+ TabBgColorIndex = rPal.GetColorIndex(mrTabViewData.mnTabBgColorId);
+ if (TabBgColorIndex < 8 || TabBgColorIndex > 63 ) // only numbers 8 - 63 are valid numbers
+ TabBgColorIndex = 127; //Excel specs: 127 makes excel ignore tab color information.
+ rStrm << rt << grbitFrt << unused << unused << cb << TabBgColorIndex << reserved;
+}
+
// Sheet view settings ========================================================
namespace {
@@ -366,6 +395,14 @@ XclExpTabViewSettings::XclExpTabViewSettings( const XclExpRoot& rRoot, SCTAB nSc
maData.mnPageZoom = lclGetXclZoom( rTabSett.mnPageZoom, EXC_WIN2_PAGEZOOM_DEF );
maData.mnCurrentZoom = maData.mbPageMode ? maData.mnPageZoom : maData.mnNormalZoom;
}
+
+ // Tab Bg Color
+ if ( GetBiff() == EXC_BIFF8 && !GetDoc().IsDefaultTabBgColor(nScTab) )
+ {
+ XclExpPalette& rPal = GetPalette();
+ maData.maTabBgColor = GetDoc().GetTabBgColor(nScTab);
+ maData.mnTabBgColorId = rPal.InsertColor(maData.maTabBgColor, EXC_COLOR_TABBG, EXC_COLOR_NOTABBG );
+ }
}
void XclExpTabViewSettings::Save( XclExpStream& rStrm )
@@ -377,6 +414,7 @@ void XclExpTabViewSettings::Save( XclExpStream& rStrm )
WriteSelection( rStrm, EXC_PANE_TOPRIGHT );
WriteSelection( rStrm, EXC_PANE_BOTTOMLEFT );
WriteSelection( rStrm, EXC_PANE_BOTTOMRIGHT );
+ WriteTabBgColor( rStrm );
}
static void lcl_WriteSelection( XclExpXmlStream& rStrm, const XclTabViewData& rData, sal_uInt8 nPane )
@@ -491,5 +529,10 @@ void XclExpTabViewSettings::WriteSelection( XclExpStream& rStrm, sal_uInt8 nPane
XclExpSelection( maData, nPane ).Save( rStrm );
}
+void XclExpTabViewSettings::WriteTabBgColor( XclExpStream& rStrm ) const
+{
+ if ( !maData.IsDefaultTabBgColor() )
+ XclExpTabBgColor( maData ).Save( rStrm );
+}
// ============================================================================
diff --git a/sc/source/filter/excel/xichart.cxx b/sc/source/filter/excel/xichart.cxx
index 35ad5b41e0cb..7cbd74a836d2 100755
--- a/sc/source/filter/excel/xichart.cxx
+++ b/sc/source/filter/excel/xichart.cxx
@@ -4053,6 +4053,16 @@ void XclImpChart::ReadChartSubStream( XclImpStream& rStrm )
case EXC_ID_WINDOW2: rTabViewSett.ReadWindow2( rStrm, true );break;
case EXC_ID_SCL: rTabViewSett.ReadScl( rStrm ); break;
+
+ case EXC_ID_SHEETEXT: //0x0862
+ {
+ // FIXME: do not need to pass palette, XclImpTabVieSettings is derived from root
+ XclImpPalette& rPal = GetPalette();
+ rTabViewSett.ReadTabBgColor( rStrm, rPal);
+ }
+ break;
+
+ case EXC_ID_CODENAME: ReadCodeName( rStrm, false ); break;
}
// common records
diff --git a/sc/source/filter/excel/xiescher.cxx b/sc/source/filter/excel/xiescher.cxx
index 3d055d94a498..dc87bba4c050 100644
--- a/sc/source/filter/excel/xiescher.cxx
+++ b/sc/source/filter/excel/xiescher.cxx
@@ -62,10 +62,6 @@
#include <basegfx/point/b2dpoint.hxx>
#include <basegfx/polygon/b2dpolygon.hxx>
-#include <basic/sbstar.hxx>
-#include <basic/sbmod.hxx>
-#include <basic/sbmeth.hxx>
-
#include <svx/svdopath.hxx>
#include <svx/svdocirc.hxx>
#include <svx/svdoedge.hxx>
@@ -478,14 +474,14 @@ void XclImpDrawObjBase::PreProcessSdrObject( XclImpDffConverter& rDffConv, SdrOb
{
if( ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( &rSdrObj, TRUE ) )
{
- pInfo->SetMacro( XclControlHelper::GetScMacroName( maMacroName, GetDocShell() ) );
+ pInfo->SetMacro( XclTools::GetSbMacroUrl( maMacroName, GetDocShell() ) );
pInfo->SetHlink( maHyperlink );
}
}
#else
if( mbSimpleMacro && (maMacroName.Len() > 0) )
if( ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( &rSdrObj, TRUE ) )
- pInfo->SetMacro( XclControlHelper::GetScMacroName( maMacroName, GetDocShell() ) );
+ pInfo->SetMacro( XclTools::GetSbMacroUrl( maMacroName, GetDocShell() ) );
#endif
// call virtual function for object type specific processing
@@ -550,16 +546,7 @@ void XclImpDrawObjBase::ReadMacro8( XclImpStream& rStrm )
DBG_ASSERT( nTokenId == XclTokenArrayHelper::GetTokenId( EXC_TOKID_NAMEX, EXC_TOKCLASS_REF ),
"XclImpDrawObjBase::ReadMacro - tNameXR token expected" );
if( nTokenId == XclTokenArrayHelper::GetTokenId( EXC_TOKID_NAMEX, EXC_TOKCLASS_REF ) )
- {
maMacroName = GetLinkManager().GetMacroName( nExtSheet, nExtName );
- // #i38718# missing module name - try to find the macro in the imported modules
- if( maMacroName.Len() && (maMacroName.Search( '.' ) == STRING_NOTFOUND) )
- if( SfxObjectShell* pDocShell = GetDocShell() )
- if( StarBASIC* pBasic = pDocShell->GetBasic() )
- if( SbMethod* pMethod = dynamic_cast< SbMethod* >( pBasic->Find( maMacroName, SbxCLASS_METHOD ) ) )
- if( SbModule* pModule = pMethod->GetModule() )
- maMacroName.Insert( '.', 0 ).Insert( pModule->GetName(), 0 );
- }
}
}
}
@@ -1709,7 +1696,7 @@ void XclImpChartObj::FinalizeTabChart()
// create the object anchor
XclObjAnchor aAnchor;
- aAnchor.SetRect( GetDoc(), GetCurrScTab(), Rectangle( 1000, 500, nWidth, nHeight ), MAP_100TH_MM );
+ aAnchor.SetRect( GetRoot(), GetCurrScTab(), Rectangle( 1000, 500, nWidth, nHeight ), MAP_100TH_MM );
SetAnchor( aAnchor );
}
@@ -3939,7 +3926,7 @@ void XclImpSheetDrawing::ConvertObjects( XclImpDffConverter& rDffConv )
Rectangle XclImpSheetDrawing::CalcAnchorRect( const XclObjAnchor& rAnchor, bool /*bDffAnchor*/ ) const
{
- return rAnchor.GetRect( GetDoc(), maScUsedArea.aStart.Tab(), MAP_100TH_MM );
+ return rAnchor.GetRect( GetRoot(), maScUsedArea.aStart.Tab(), MAP_100TH_MM );
}
void XclImpSheetDrawing::OnObjectInserted( const XclImpDrawObjBase& rDrawObj )
diff --git a/sc/source/filter/excel/xipage.cxx b/sc/source/filter/excel/xipage.cxx
index c689d0eb7feb..38cebc2e6ca8 100644
--- a/sc/source/filter/excel/xipage.cxx
+++ b/sc/source/filter/excel/xipage.cxx
@@ -375,14 +375,14 @@ void XclImpPageSettings::Finalize()
{
SCROW nScRow = static_cast< SCROW >( *aIt );
if( nScRow <= MAXROW )
- rDoc.SetRowFlags( nScRow, nScTab, rDoc.GetRowFlags( nScRow, nScTab ) | CR_MANUALBREAK );
+ rDoc.SetRowBreak(nScRow, nScTab, false, true);
}
for( aIt = maData.maVerPageBreaks.begin(), aEnd = maData.maVerPageBreaks.end(); aIt != aEnd; ++aIt )
{
SCCOL nScCol = static_cast< SCCOL >( *aIt );
if( nScCol <= MAXCOL )
- rDoc.SetColFlags( nScCol, nScTab, rDoc.GetColFlags( nScCol, nScTab ) | CR_MANUALBREAK );
+ rDoc.SetColBreak(nScCol, nScTab, false, true);
}
}
diff --git a/sc/source/filter/excel/xiroot.cxx b/sc/source/filter/excel/xiroot.cxx
index 3384cf248c87..3fd2650cf2ff 100644
--- a/sc/source/filter/excel/xiroot.cxx
+++ b/sc/source/filter/excel/xiroot.cxx
@@ -29,6 +29,8 @@
#include "precompiled_sc.hxx"
#include "xiroot.hxx"
#include "addincol.hxx"
+#include "document.hxx"
+#include "scextopt.hxx"
#include "xltracer.hxx"
#include "xihelper.hxx"
#include "xiformula.hxx"
@@ -49,7 +51,8 @@
XclImpRootData::XclImpRootData( XclBiff eBiff, SfxMedium& rMedium,
SotStorageRef xRootStrg, ScDocument& rDoc, rtl_TextEncoding eTextEnc ) :
XclRootData( eBiff, rMedium, xRootStrg, rDoc, eTextEnc, false ),
- mbHasCodePage( false )
+ mbHasCodePage( false ),
+ mbHasBasic( false )
{
}
@@ -272,5 +275,25 @@ String XclImpRoot::GetScAddInName( const String& rXclName ) const
return rXclName;
}
-// ============================================================================
+void XclImpRoot::ReadCodeName( XclImpStream& rStrm, bool bGlobals )
+{
+ if( mrImpData.mbHasBasic && (GetBiff() == EXC_BIFF8) )
+ {
+ String aName = rStrm.ReadUniString();
+ if( aName.Len() > 0 )
+ {
+ if( bGlobals )
+ {
+ GetExtDocOptions().GetDocSettings().maGlobCodeName = aName;
+ GetDoc().SetCodeName( aName );
+ }
+ else
+ {
+ GetExtDocOptions().AppendCodeName( aName );
+ GetDoc().SetCodeName( GetCurrScTab(), aName );
+ }
+ }
+ }
+}
+// ============================================================================
diff --git a/sc/source/filter/excel/xiview.cxx b/sc/source/filter/excel/xiview.cxx
index 6eeee8e04839..f75032ff461e 100644
--- a/sc/source/filter/excel/xiview.cxx
+++ b/sc/source/filter/excel/xiview.cxx
@@ -106,6 +106,24 @@ void XclImpTabViewSettings::Initialize()
maData.SetDefaults();
}
+void XclImpTabViewSettings::ReadTabBgColor( XclImpStream& rStrm, XclImpPalette& rPal )
+{
+ DBG_ASSERT_BIFF( GetBiff() >= EXC_BIFF8 );
+ if( GetBiff() < EXC_BIFF8 )
+ return;
+
+ sal_uInt8 ColorIndex;
+ Color TabBgColor;
+
+ rStrm.Ignore( 16 );
+ ColorIndex = rStrm.ReaduInt8() & EXC_SHEETEXT_TABCOLOR; //0x7F
+ if ( ColorIndex >= 8 && ColorIndex <= 63 ) //only accept valid index values
+ {
+ TabBgColor = rPal.GetColor( ColorIndex );
+ maData.maTabBgColor = TabBgColor;
+ }
+}
+
void XclImpTabViewSettings::ReadWindow2( XclImpStream& rStrm, bool bChart )
{
if( GetBiff() == EXC_BIFF2 )
@@ -276,6 +294,10 @@ void XclImpTabViewSettings::Finalize()
aViewOpt.SetOption( VOPT_OUTLINER, maData.mbShowOutline );
rDoc.SetViewOptions( aViewOpt );
}
+
+ // *** set tab bg color
+ if ( !maData.IsDefaultTabBgColor() )
+ rDoc.SetTabBgColor(nScTab, maData.maTabBgColor);
}
// ============================================================================
diff --git a/sc/source/filter/excel/xlescher.cxx b/sc/source/filter/excel/xlescher.cxx
index e1132c1b5606..bb77fac2be73 100644
--- a/sc/source/filter/excel/xlescher.cxx
+++ b/sc/source/filter/excel/xlescher.cxx
@@ -28,14 +28,16 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
+#include "xlescher.hxx"
+
#include <com/sun/star/drawing/XControlShape.hpp>
#include <com/sun/star/script/ScriptEventDescriptor.hpp>
#include <svx/unoapi.hxx>
-#include "xestream.hxx"
#include "document.hxx"
+#include "xestream.hxx"
#include "xistream.hxx"
-#include "xlescher.hxx"
-#include <filter/msfilter/msvbahelper.hxx>
+#include "xltools.hxx"
+#include "xlroot.hxx"
using ::rtl::OUString;
using ::com::sun::star::uno::Reference;
@@ -109,15 +111,15 @@ long lclGetYFromRow( ScDocument& rDoc, SCTAB nScTab, sal_uInt16 nXclRow, sal_uIn
/** Calculates an object column position from a drawing layer X position (in twips). */
void lclGetColFromX(
ScDocument& rDoc, SCTAB nScTab, sal_uInt16& rnXclCol,
- sal_uInt16& rnOffset, sal_uInt16 nXclStartCol,
+ sal_uInt16& rnOffset, sal_uInt16 nXclStartCol, sal_uInt16 nXclMaxCol,
long& rnStartW, long nX, double fScale )
{
// rnStartW in conjunction with nXclStartCol is used as buffer for previously calculated width
long nTwipsX = static_cast< long >( nX / fScale + 0.5 );
long nColW = 0;
- for( rnXclCol = nXclStartCol; rnXclCol <= MAXCOL; ++rnXclCol )
+ for( rnXclCol = nXclStartCol; rnXclCol <= nXclMaxCol; ++rnXclCol )
{
- nColW = rDoc.GetColWidth( static_cast<SCCOL>(rnXclCol), nScTab );
+ nColW = rDoc.GetColWidth( static_cast< SCCOL >( rnXclCol ), nScTab );
if( rnStartW + nColW > nTwipsX )
break;
rnStartW += nColW;
@@ -127,28 +129,27 @@ void lclGetColFromX(
/** Calculates an object row position from a drawing layer Y position (in twips). */
void lclGetRowFromY(
- ScDocument& rDoc, SCTAB nScTab,
- sal_uInt16& rnXclRow, sal_uInt16& rnOffset, sal_uInt16 nXclStartRow,
+ ScDocument& rDoc, SCTAB nScTab, sal_uInt16& rnXclRow,
+ sal_uInt16& rnOffset, sal_uInt16 nXclStartRow, sal_uInt16 nXclMaxRow,
long& rnStartH, long nY, double fScale )
{
// rnStartH in conjunction with nXclStartRow is used as buffer for previously calculated height
long nTwipsY = static_cast< long >( nY / fScale + 0.5 );
long nRowH = 0;
- ScCoupledCompressedArrayIterator< SCROW, BYTE, USHORT> aIter(
- rDoc.GetRowFlagsArray( nScTab), static_cast<SCROW>(nXclStartRow),
- MAXROW, CR_HIDDEN, 0, rDoc.GetRowHeightArray( nScTab));
- for ( ; aIter; ++aIter )
+ bool bFound = false;
+ for( SCROW nRow = static_cast< SCROW >( nXclStartRow ); nRow <= nXclMaxRow; ++nRow )
{
- nRowH = *aIter;
+ nRowH = rDoc.GetRowHeight( nRow, nScTab );
if( rnStartH + nRowH > nTwipsY )
{
- rnXclRow = static_cast< sal_uInt16 >( aIter.GetPos() );
+ rnXclRow = static_cast< sal_uInt16 >( nRow );
+ bFound = true;
break;
}
rnStartH += nRowH;
}
- if (!aIter)
- rnXclRow = static_cast< sal_uInt16 >( aIter.GetIterEnd() ); // down to the bottom..
+ if( !bFound )
+ rnXclRow = nXclMaxRow;
rnOffset = static_cast< sal_uInt16 >( nRowH ? ((nTwipsY - rnStartH) * 256.0 / nRowH + 0.5) : 0 );
}
@@ -177,8 +178,9 @@ XclObjAnchor::XclObjAnchor() :
{
}
-Rectangle XclObjAnchor::GetRect( ScDocument& rDoc, SCTAB nScTab, MapUnit eMapUnit ) const
+Rectangle XclObjAnchor::GetRect( const XclRoot& rRoot, SCTAB nScTab, MapUnit eMapUnit ) const
{
+ ScDocument& rDoc = rRoot.GetDoc();
double fScale = lclGetTwipsScale( eMapUnit );
Rectangle aRect(
lclGetXFromCol( rDoc, nScTab, maFirst.mnCol, mnLX, fScale ),
@@ -192,20 +194,24 @@ Rectangle XclObjAnchor::GetRect( ScDocument& rDoc, SCTAB nScTab, MapUnit eMapUni
return aRect;
}
-void XclObjAnchor::SetRect( ScDocument& rDoc, SCTAB nScTab, const Rectangle& rRect, MapUnit eMapUnit )
+void XclObjAnchor::SetRect( const XclRoot& rRoot, SCTAB nScTab, const Rectangle& rRect, MapUnit eMapUnit )
{
- Rectangle aRect( rRect );
+ ScDocument& rDoc = rRoot.GetDoc();
+ sal_uInt16 nXclMaxCol = rRoot.GetXclMaxPos().Col();
+ sal_uInt16 nXclMaxRow = static_cast<sal_uInt16>( rRoot.GetXclMaxPos().Row());
+
// #106948# adjust coordinates in mirrored sheets
+ Rectangle aRect( rRect );
if( rDoc.IsLayoutRTL( nScTab ) )
lclMirrorRectangle( aRect );
double fScale = lclGetTwipsScale( eMapUnit );
long nDummy = 0;
- lclGetColFromX( rDoc, nScTab, maFirst.mnCol, mnLX, 0, nDummy, aRect.Left(), fScale );
- lclGetColFromX( rDoc, nScTab, maLast.mnCol, mnRX, maFirst.mnCol, nDummy, aRect.Right(), fScale );
+ lclGetColFromX( rDoc, nScTab, maFirst.mnCol, mnLX, 0, nXclMaxCol, nDummy, aRect.Left(), fScale );
+ lclGetColFromX( rDoc, nScTab, maLast.mnCol, mnRX, maFirst.mnCol, nXclMaxCol, nDummy, aRect.Right(), fScale );
nDummy = 0;
- lclGetRowFromY( rDoc, nScTab, maFirst.mnRow, mnTY, 0, nDummy, aRect.Top(), fScale );
- lclGetRowFromY( rDoc, nScTab, maLast.mnRow, mnBY, maFirst.mnRow, nDummy, aRect.Bottom(), fScale );
+ lclGetRowFromY( rDoc, nScTab, maFirst.mnRow, mnTY, 0, nXclMaxRow, nDummy, aRect.Top(), fScale );
+ lclGetRowFromY( rDoc, nScTab, maLast.mnRow, mnBY, maFirst.mnRow, nXclMaxRow, nDummy, aRect.Bottom(), fScale );
}
void XclObjAnchor::SetRect( const Size& rPageSize, sal_Int32 nScaleX, sal_Int32 nScaleY,
@@ -326,33 +332,7 @@ Reference< XControlModel > XclControlHelper::GetControlModel( Reference< XShape
return xCtrlModel;
}
-#define EXC_MACRONAME_PRE "vnd.sun.star.script:Standard."
-#define EXC_MACRONAME_SUF "?language=Basic&location=document"
-
-OUString XclControlHelper::GetScMacroName( const String& rXclMacroName, SfxObjectShell* pDocShell )
-{
- String sTmp( rXclMacroName );
- if( rXclMacroName.Len() > 0 )
- {
- ooo::vba::VBAMacroResolvedInfo aMacro = ooo::vba::resolveVBAMacro( pDocShell, rXclMacroName, false );
- if ( aMacro.IsResolved() )
- return ooo::vba::makeMacroURL( aMacro.ResolvedMacro() );
-
- }
- return OUString();
-}
-
-String XclControlHelper::GetXclMacroName( const OUString& rScMacroName )
-{
- const OUString saMacroNamePre = CREATE_OUSTRING( EXC_MACRONAME_PRE );
- const OUString saMacroNameSuf = CREATE_OUSTRING( EXC_MACRONAME_SUF );
- sal_Int32 snScMacroNameLen = rScMacroName.getLength();
- sal_Int32 snXclMacroNameLen = snScMacroNameLen - saMacroNamePre.getLength() - saMacroNameSuf.getLength();
- if( (snXclMacroNameLen > 0) && rScMacroName.matchIgnoreAsciiCase( saMacroNamePre, 0 ) &&
- rScMacroName.matchIgnoreAsciiCase( saMacroNameSuf, snScMacroNameLen - saMacroNameSuf.getLength() ) )
- return rScMacroName.copy( saMacroNamePre.getLength(), snXclMacroNameLen );
- return String::EmptyString();
-}
+namespace {
static const struct
{
@@ -369,17 +349,17 @@ spTbxListenerData[] =
/*EXC_TBX_EVENT_CHANGE*/ { "XChangeListener", "changed" }
};
-#define EXC_MACROSCRIPT "Script"
+} // namespace
bool XclControlHelper::FillMacroDescriptor( ScriptEventDescriptor& rDescriptor,
- XclTbxEventType eEventType, const String& rXclMacroName, SfxObjectShell* pShell )
+ XclTbxEventType eEventType, const String& rXclMacroName, SfxObjectShell* pDocShell )
{
if( rXclMacroName.Len() > 0 )
{
rDescriptor.ListenerType = OUString::createFromAscii( spTbxListenerData[ eEventType ].mpcListenerType );
rDescriptor.EventMethod = OUString::createFromAscii( spTbxListenerData[ eEventType ].mpcEventMethod );
- rDescriptor.ScriptType = CREATE_OUSTRING( EXC_MACROSCRIPT );
- rDescriptor.ScriptCode = GetScMacroName( rXclMacroName, pShell );
+ rDescriptor.ScriptType = CREATE_OUSTRING( "Script" );
+ rDescriptor.ScriptCode = XclTools::GetSbMacroUrl( rXclMacroName, pDocShell );
return true;
}
return false;
@@ -389,12 +369,11 @@ String XclControlHelper::ExtractFromMacroDescriptor(
const ScriptEventDescriptor& rDescriptor, XclTbxEventType eEventType )
{
if( (rDescriptor.ScriptCode.getLength() > 0) &&
- rDescriptor.ScriptType.equalsIgnoreAsciiCaseAscii( EXC_MACROSCRIPT ) &&
+ rDescriptor.ScriptType.equalsIgnoreAsciiCaseAscii( "Script" ) &&
rDescriptor.ListenerType.equalsAscii( spTbxListenerData[ eEventType ].mpcListenerType ) &&
rDescriptor.EventMethod.equalsAscii( spTbxListenerData[ eEventType ].mpcEventMethod ) )
- return GetXclMacroName( rDescriptor.ScriptCode );
+ return XclTools::GetXclMacroName( rDescriptor.ScriptCode );
return String::EmptyString();
}
// ============================================================================
-
diff --git a/sc/source/filter/excel/xltools.cxx b/sc/source/filter/excel/xltools.cxx
index 90393ae6a787..0dd988d67586 100644
--- a/sc/source/filter/excel/xltools.cxx
+++ b/sc/source/filter/excel/xltools.cxx
@@ -34,6 +34,7 @@
#include <unotools/fontcvt.hxx>
#include <sfx2/objsh.hxx>
#include <editeng/editstat.hxx>
+#include <filter/msfilter/msvbahelper.hxx>
#include "xestream.hxx"
#include "document.hxx"
#include "docuno.hxx"
@@ -46,6 +47,8 @@
#include "xiroot.hxx"
#include "xltools.hxx"
+using ::rtl::OUString;
+
// GUID import/export =========================================================
XclGuid::XclGuid()
@@ -684,6 +687,37 @@ void XclTools::SkipSubStream( XclImpStream& rStrm )
}
}
+// Basic macro names ----------------------------------------------------------
+
+const OUString XclTools::maSbMacroPrefix( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.script:Standard." ) );
+const OUString XclTools::maSbMacroSuffix( RTL_CONSTASCII_USTRINGPARAM( "?language=Basic&location=document" ) );
+
+OUString XclTools::GetSbMacroUrl( const String& rMacroName, SfxObjectShell* pDocShell )
+{
+ OSL_ENSURE( rMacroName.Len() > 0, "XclTools::GetSbMacroUrl - macro name is empty" );
+ ::ooo::vba::VBAMacroResolvedInfo aMacroInfo = ::ooo::vba::resolveVBAMacro( pDocShell, rMacroName, false );
+ if( aMacroInfo.IsResolved() )
+ return ::ooo::vba::makeMacroURL( aMacroInfo.ResolvedMacro() );
+ return OUString();
+}
+
+OUString XclTools::GetSbMacroUrl( const String& rModuleName, const String& rMacroName, SfxObjectShell* pDocShell )
+{
+ OSL_ENSURE( rModuleName.Len() > 0, "XclTools::GetSbMacroUrl - module name is empty" );
+ OSL_ENSURE( rMacroName.Len() > 0, "XclTools::GetSbMacroUrl - macro name is empty" );
+ return GetSbMacroUrl( rModuleName + OUString( sal_Unicode( '.' ) ) + rMacroName, pDocShell );
+}
+
+String XclTools::GetXclMacroName( const OUString& rSbMacroUrl )
+{
+ sal_Int32 nSbMacroUrlLen = rSbMacroUrl.getLength();
+ sal_Int32 nMacroNameLen = nSbMacroUrlLen - maSbMacroPrefix.getLength() - maSbMacroSuffix.getLength();
+ if( (nMacroNameLen > 0) && rSbMacroUrl.matchIgnoreAsciiCase( maSbMacroPrefix, 0 ) &&
+ rSbMacroUrl.matchIgnoreAsciiCase( maSbMacroSuffix, nSbMacroUrlLen - maSbMacroSuffix.getLength() ) )
+ return rSbMacroUrl.copy( maSbMacroPrefix.getLength(), nMacroNameLen );
+ return String::EmptyString();
+}
+
// read/write colors ----------------------------------------------------------
XclImpStream& operator>>( XclImpStream& rStrm, Color& rColor )
@@ -700,4 +734,3 @@ XclExpStream& operator<<( XclExpStream& rStrm, const Color& rColor )
}
// ============================================================================
-
diff --git a/sc/source/filter/excel/xlview.cxx b/sc/source/filter/excel/xlview.cxx
index d9cbbbb4b7c0..8e9df7e0ac1f 100644
--- a/sc/source/filter/excel/xlview.cxx
+++ b/sc/source/filter/excel/xlview.cxx
@@ -76,6 +76,7 @@ void XclTabViewData::SetDefaults()
mbDefGridColor = true;
mbShowFormulas = false;
mbShowGrid = mbShowHeadings = mbShowZeros = mbShowOutline = true;
+ maTabBgColor.SetColor( COL_AUTO );
}
bool XclTabViewData::IsSplit() const
diff --git a/sc/source/filter/html/htmlexp.cxx b/sc/source/filter/html/htmlexp.cxx
index 0ab97170621e..b4d764dc74a7 100644
--- a/sc/source/filter/html/htmlexp.cxx
+++ b/sc/source/filter/html/htmlexp.cxx
@@ -718,7 +718,7 @@ void ScHTMLExport::WriteTables()
SCCOL nCol;
for ( nCol=nStartCol; nCol<=nEndCol; nCol++ )
{
- if ( !(pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN) )
+ if ( !pDoc->ColHidden(nCol, nTab) )
++nColCnt;
}
(((aByteStrOut += ' ') += OOO_STRING_SVTOOLS_HTML_O_cols) += '=') += ByteString::CreateFromInt32( nColCnt );
@@ -739,7 +739,7 @@ void ScHTMLExport::WriteTables()
aByteStr += '=';
for ( nCol=nStartCol; nCol<=nEndCol; nCol++ )
{
- if ( pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN )
+ if ( pDoc->ColHidden(nCol, nTab) )
continue; // for
aByteStrOut = aByteStr;
@@ -754,14 +754,12 @@ void ScHTMLExport::WriteTables()
// At least old (3.x, 4.x?) Netscape doesn't follow <TABLE COLS=n> and
// <COL WIDTH=x> specified, but needs a width at every column.
bTableDataWidth = TRUE; // widths in first row
- bool bHasHiddenRows = pDoc->GetRowFlagsArray( nTab).HasCondition(
- nStartRow, nEndRow, CR_HIDDEN, CR_HIDDEN);
+ bool bHasHiddenRows = pDoc->HasHiddenRows(nStartRow, nEndRow, nTab);
for ( SCROW nRow=nStartRow; nRow<=nEndRow; nRow++ )
{
- if ( bHasHiddenRows && (pDoc->GetRowFlags( nRow, nTab ) & CR_HIDDEN) )
+ if ( bHasHiddenRows && pDoc->RowHidden(nRow, nTab) )
{
- nRow = pDoc->GetRowFlagsArray( nTab).GetFirstForCondition(
- nRow+1, nEndRow, CR_HIDDEN, 0);
+ nRow = pDoc->FirstVisibleRow(nRow+1, nEndRow, nTab);
--nRow;
continue; // for
}
@@ -770,7 +768,7 @@ void ScHTMLExport::WriteTables()
bTableDataHeight = TRUE; // height at every first cell of each row
for ( SCCOL nCol2=nStartCol; nCol2<=nEndCol; nCol2++ )
{
- if ( pDoc->GetColFlags( nCol2, nTab ) & CR_HIDDEN )
+ if ( pDoc->ColHidden(nCol2, nTab) )
continue; // for
if ( nCol2 == nEndCol )
diff --git a/sc/source/filter/inc/excimp8.hxx b/sc/source/filter/inc/excimp8.hxx
index 1340f7c6f8be..5b2bbe2e7b5d 100644
--- a/sc/source/filter/inc/excimp8.hxx
+++ b/sc/source/filter/inc/excimp8.hxx
@@ -50,37 +50,38 @@ class XclImpStream;
class ImportExcel8 : public ImportExcel
{
- SCTAB mnTab;
- protected:
- ExcScenarioList aScenList;
-
- BOOL bHasBasic;
-
- void Calccount( void ); // 0x0C
- void Precision( void ); // 0x0E
- void Delta( void ); // 0x10
- void Iteration( void ); // 0x11
- void Boundsheet( void ); // 0x85
- void FilterMode( void ); // 0x9B
- void AutoFilterInfo( void ); // 0x9D
- void AutoFilter( void ); // 0x9E
- void Scenman( void ); // 0xAE
- void Scenario( void ); // 0xAF
- void ReadBasic( void ); // 0xD3
- void Labelsst( void ); // 0xFD
-
- void Hlink( void ); // 0x01B8
- void Codename( BOOL bWBGlobals ); // 0x01BA
- void SheetProtection( void ); // 0x0867
-
- virtual void EndSheet( void );
- virtual void PostDocLoad( void );
-
- public:
- ImportExcel8( XclImpRootData& rImpData, SvStream& rStrm );
- virtual ~ImportExcel8( void );
-
- virtual FltError Read( void );
+public:
+ ImportExcel8( XclImpRootData& rImpData, SvStream& rStrm );
+ virtual ~ImportExcel8( void );
+
+ virtual FltError Read( void );
+
+protected:
+ ExcScenarioList aScenList;
+
+ void Calccount( void ); // 0x0C
+ void Precision( void ); // 0x0E
+ void Delta( void ); // 0x10
+ void Iteration( void ); // 0x11
+ void Boundsheet( void ); // 0x85
+ void FilterMode( void ); // 0x9B
+ void AutoFilterInfo( void ); // 0x9D
+ void AutoFilter( void ); // 0x9E
+ void Scenman( void ); // 0xAE
+ void Scenario( void ); // 0xAF
+ void ReadBasic( void ); // 0xD3
+ void Labelsst( void ); // 0xFD
+
+ void Hlink( void ); // 0x01B8
+ void Codename( BOOL bWBGlobals ); // 0x01BA
+ void SheetProtection( void ); // 0x0867
+
+ virtual void EndSheet( void );
+ virtual void PostDocLoad( void );
+
+private:
+ void LoadDocumentProperties();
+ void AttachDocumentEvents();
};
diff --git a/sc/source/filter/inc/imp_op.hxx b/sc/source/filter/inc/imp_op.hxx
index 065678d5c792..2df58173a63a 100644
--- a/sc/source/filter/inc/imp_op.hxx
+++ b/sc/source/filter/inc/imp_op.hxx
@@ -97,6 +97,7 @@ protected:
XclImpStream& aIn; // input stream
ScfUInt32Vec maSheetOffsets;
+ ScRange maScOleSize; /// Visible range if embedded.
NameBuffer* pExtNameBuff; // ... externe Namen (Ind.-Basis=1)
ExcelToSc* pFormConv; // Formel-Konverter
diff --git a/sc/source/filter/inc/xcl97rec.hxx b/sc/source/filter/inc/xcl97rec.hxx
index 7a2a33795520..201562fa752c 100644
--- a/sc/source/filter/inc/xcl97rec.hxx
+++ b/sc/source/filter/inc/xcl97rec.hxx
@@ -535,7 +535,7 @@ private:
class XclExpFileSharing : public XclExpRecord
{
public:
- explicit XclExpFileSharing( const XclExpRoot& rRoot, sal_uInt16 nPasswordHash );
+ explicit XclExpFileSharing( const XclExpRoot& rRoot, sal_uInt16 nPasswordHash, bool bRecommendReadOnly );
virtual void Save( XclExpStream& rStrm );
@@ -545,6 +545,7 @@ private:
private:
XclExpString maUserName;
sal_uInt16 mnPasswordHash;
+ bool mbRecommendReadOnly;
};
// ============================================================================
diff --git a/sc/source/filter/inc/xeroot.hxx b/sc/source/filter/inc/xeroot.hxx
index f9d3a6ab2f95..980590f9d4ff 100644
--- a/sc/source/filter/inc/xeroot.hxx
+++ b/sc/source/filter/inc/xeroot.hxx
@@ -158,7 +158,7 @@ public:
bool IsDocumentEncrypted() const;
- const String GetPassword() const;
+ String GetPassword() const;
private:
diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx
index cb12e03b21ad..fd7303509688 100644
--- a/sc/source/filter/inc/xestyle.hxx
+++ b/sc/source/filter/inc/xestyle.hxx
@@ -58,7 +58,8 @@ enum XclExpColorType
EXC_COLOR_CHARTLINE, /// Line in a chart.
EXC_COLOR_CHARTAREA, /// Area in a chart.
EXC_COLOR_CTRLTEXT, /// Text color in a form control.
- EXC_COLOR_GRID /// Spreadsheet grid color.
+ EXC_COLOR_GRID, /// Spreadsheet grid color.
+ EXC_COLOR_TABBG /// Spreadsheet tab bg color.
};
// ----------------------------------------------------------------------------
diff --git a/sc/source/filter/inc/xeview.hxx b/sc/source/filter/inc/xeview.hxx
index ca94e6eae3f9..61e349ab1e86 100644
--- a/sc/source/filter/inc/xeview.hxx
+++ b/sc/source/filter/inc/xeview.hxx
@@ -131,6 +131,20 @@ private:
sal_uInt8 mnPane; /// Pane identifier of this selection.
};
+class XclExpTabBgColor : public XclExpRecord
+{
+public:
+ explicit XclExpTabBgColor( const XclTabViewData& rTabViewData );
+
+ /* virtual void SaveXml( XclExpXmlStream& rStrm ); TODO Fix XML Saving Stream */
+private:
+ /** Writes the contents of the SHEETEXT record. */
+ virtual void WriteBody( XclExpStream& rStrm );
+
+private:
+ const XclTabViewData& mrTabViewData; /// view settings data of current sheet.
+};
+
// View settings ==============================================================
/** Contains all view settings records for a single sheet. */
@@ -153,6 +167,7 @@ private:
void WriteScl( XclExpStream& rStrm ) const;
void WritePane( XclExpStream& rStrm ) const;
void WriteSelection( XclExpStream& rStrm, sal_uInt8 nPane ) const;
+ void WriteTabBgColor( XclExpStream& rStrm ) const;
private:
XclTabViewData maData; /// All view settings for a sheet.
diff --git a/sc/source/filter/inc/xiroot.hxx b/sc/source/filter/inc/xiroot.hxx
index 0e06b31b650d..c5cf284d2d2e 100644
--- a/sc/source/filter/inc/xiroot.hxx
+++ b/sc/source/filter/inc/xiroot.hxx
@@ -116,6 +116,7 @@ struct XclImpRootData : public XclRootData
XclImpDocProtectRef mxDocProtect; /// Document protection options.
bool mbHasCodePage; /// true = CODEPAGE record exists.
+ bool mbHasBasic; /// true = document contains VB project.
explicit XclImpRootData( XclBiff eBiff, SfxMedium& rMedium,
SotStorageRef xRootStrg, ScDocument& rDoc, rtl_TextEncoding eTextEnc );
@@ -202,6 +203,13 @@ public:
/** Returns the Calc add-in function name for an Excel function name. */
String GetScAddInName( const String& rXclName ) const;
+ /** Returns true, if the document contains a VB project. */
+ inline bool HasBasic() const { return mrImpData.mbHasBasic; }
+ /** Called to indicate that the document contains a VB project. */
+ inline void SetHasBasic() { mrImpData.mbHasBasic = true; }
+ /** Reads the CODENAME record and inserts the codename into the document. */
+ void ReadCodeName( XclImpStream& rStrm, bool bGlobals );
+
private:
mutable XclImpRootData& mrImpData; /// Reference to the global import data struct.
};
@@ -209,4 +217,3 @@ private:
// ============================================================================
#endif
-
diff --git a/sc/source/filter/inc/xiview.hxx b/sc/source/filter/inc/xiview.hxx
index 5f6d11c3439d..2451d69ee01c 100644
--- a/sc/source/filter/inc/xiview.hxx
+++ b/sc/source/filter/inc/xiview.hxx
@@ -80,7 +80,8 @@ public:
void ReadPane( XclImpStream& rStrm );
/** Reads a SELECTION record. */
void ReadSelection( XclImpStream& rStrm );
-
+ /** Reads a SHEETEXT record (Tab Color). */
+ void ReadTabBgColor( XclImpStream& rStrm, XclImpPalette& rPal );
/** Sets the view settings at the current sheet or the extended sheet options object. */
void Finalize();
diff --git a/sc/source/filter/inc/xlconst.hxx b/sc/source/filter/inc/xlconst.hxx
index 0ffdcc3f1a6d..42160aae7529 100644
--- a/sc/source/filter/inc/xlconst.hxx
+++ b/sc/source/filter/inc/xlconst.hxx
@@ -250,7 +250,11 @@ const sal_uInt16 EXC_ID_DSF = 0x0161;
const sal_uInt16 EXC_ID_USERSVIEWBEGIN = 0x01AA;
const sal_uInt16 EXC_ID_USERSVIEWEND = 0x01AB;
-// (0x01C0) XL9FILE --------------------------------------------------------
+// (0x01BA) CODENAME ----------------------------------------------------------
+
+const sal_uInt16 EXC_ID_CODENAME = 0x01BA;
+
+// (0x01C0) XL9FILE -----------------------------------------------------------
const sal_uInt16 EXC_ID_XL9FILE = 0x01C0;
diff --git a/sc/source/filter/inc/xlescher.hxx b/sc/source/filter/inc/xlescher.hxx
index 95a87b51de12..921da6b8741b 100644
--- a/sc/source/filter/inc/xlescher.hxx
+++ b/sc/source/filter/inc/xlescher.hxx
@@ -28,6 +28,7 @@
#ifndef SC_XLESCHER_HXX
#define SC_XLESCHER_HXX
+#include <tools/gen.hxx>
#include <vcl/mapunit.hxx>
#include "fapihelper.hxx"
#include "xladdress.hxx"
@@ -320,9 +321,9 @@ struct XclObjAnchor : public XclRange
explicit XclObjAnchor();
/** Calculates a rectangle from the contained coordinates. */
- Rectangle GetRect( ScDocument& rDoc, SCTAB nScTab, MapUnit eMapUnit ) const;
+ Rectangle GetRect( const XclRoot& rRoot, SCTAB nScTab, MapUnit eMapUnit ) const;
/** Initializes the anchor coordinates for a sheet. */
- void SetRect( ScDocument& rDoc, SCTAB nScTab, const Rectangle& rRect, MapUnit eMapUnit );
+ void SetRect( const XclRoot& rRoot, SCTAB nScTab, const Rectangle& rRect, MapUnit eMapUnit );
/** Initializes the anchor coordinates for an embedded draw page. */
void SetRect( const Size& rPageSize, sal_Int32 nScaleX, sal_Int32 nScaleY,
@@ -431,16 +432,12 @@ public:
static ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >
GetControlModel( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
- /** Returns the Calc macro name from an Excel macro name. */
- static ::rtl::OUString GetScMacroName( const String& rXclMacroName, SfxObjectShell* pShell = NULL );
- /** Returns the Excel macro name from a Calc macro name. */
- static String GetXclMacroName( const ::rtl::OUString& rScMacroName );
-
/** Fills the macro descriptor according to the passed macro name. */
static bool FillMacroDescriptor(
::com::sun::star::script::ScriptEventDescriptor& rDescriptor,
XclTbxEventType eEventType,
- const String& rXclMacroName, SfxObjectShell* pShell = NULL );
+ const String& rXclMacroName,
+ SfxObjectShell* pDocShell = 0 );
/** Tries to extract an Excel macro name from the passed macro descriptor. */
static String ExtractFromMacroDescriptor(
const ::com::sun::star::script::ScriptEventDescriptor& rDescriptor,
diff --git a/sc/source/filter/inc/xltools.hxx b/sc/source/filter/inc/xltools.hxx
index e8ceed8248d6..efe20a583104 100644
--- a/sc/source/filter/inc/xltools.hxx
+++ b/sc/source/filter/inc/xltools.hxx
@@ -31,6 +31,8 @@
#include "address.hxx"
#include "ftools.hxx"
+class SfxObjectShell;
+
// BIFF versions ==============================================================
#define DBG_ERROR_BIFF() DBG_ERRORFILE( "Unknown BIFF type!" )
@@ -229,13 +231,24 @@ public:
/** Skips a substream (BOF/EOF record block). Includes all embedded substreams. */
static void SkipSubStream( XclImpStream& rStrm );
- // ------------------------------------------------------------------------
+ // Basic macro names ------------------------------------------------------
+
+ /** Returns the full StarBasic macro URL from an Excel macro name. */
+ static ::rtl::OUString GetSbMacroUrl( const String& rMacroName, SfxObjectShell* pDocShell = 0 );
+ /** Returns the full StarBasic macro URL from an Excel module and macro name. */
+ static ::rtl::OUString GetSbMacroUrl( const String& rModuleName, const String& rMacroName, SfxObjectShell* pDocShell = 0 );
+ /** Returns the Excel macro name from a full StarBasic macro URL. */
+ static String GetXclMacroName( const ::rtl::OUString& rSbMacroUrl );
+
+// ------------------------------------------------------------------------
private:
- static const String maDefNamePrefix; /// Prefix for built-in defined names.
- static const String maStyleNamePrefix1; /// Prefix for built-in cell style names.
- static const String maStyleNamePrefix2; /// Prefix for built-in cell style names from OOX filter.
- static const String maCFStyleNamePrefix1; /// Prefix for cond. formatting style names.
- static const String maCFStyleNamePrefix2; /// Prefix for cond. formatting style names from OOX filter.
+ static const String maDefNamePrefix; /// Prefix for built-in defined names.
+ static const String maStyleNamePrefix1; /// Prefix for built-in cell style names.
+ static const String maStyleNamePrefix2; /// Prefix for built-in cell style names from OOX filter.
+ static const String maCFStyleNamePrefix1; /// Prefix for cond. formatting style names.
+ static const String maCFStyleNamePrefix2; /// Prefix for cond. formatting style names from OOX filter.
+ static const ::rtl::OUString maSbMacroPrefix; /// Prefix for StarBasic macros.
+ static const ::rtl::OUString maSbMacroSuffix; /// Suffix for StarBasic macros.
};
// read/write colors ----------------------------------------------------------
diff --git a/sc/source/filter/inc/xlview.hxx b/sc/source/filter/inc/xlview.hxx
index 1a116c84c08e..c0c9d4b3d6e1 100644
--- a/sc/source/filter/inc/xlview.hxx
+++ b/sc/source/filter/inc/xlview.hxx
@@ -86,6 +86,11 @@ const sal_uInt8 EXC_PANE_TOPLEFT = 3; /// Single, top, left, o
const sal_uInt16 EXC_ID_SCL = 0x00A0;
+// (0x0862) SHEETEXT ----------------------------------------------------------
+
+const sal_uInt16 EXC_ID_SHEETEXT = 0x0862; /// header id for sheetext
+const sal_uInt8 EXC_SHEETEXT_TABCOLOR = 0x7F; /// mask for tab color
+const sal_uInt16 EXC_COLOR_NOTABBG = 0x7F; /// Excel ignores Tab color when set to this value...
// Structs ====================================================================
/** Contains all view settings for the entire document. */
@@ -146,6 +151,9 @@ struct XclTabViewData
bool mbShowHeadings; /// true = Show column/row headings.
bool mbShowZeros; /// true = Show zero value zells.
bool mbShowOutline; /// true = Show outlines.
+ Color maTabBgColor; /// Tab Color default = (COL_AUTO )
+ bool IsDefaultTabBgColor() const { return maTabBgColor == Color(COL_AUTO) ? TRUE : FALSE; };
+ sal_uInt32 mnTabBgColorId; /// pallette color id
explicit XclTabViewData();
~XclTabViewData();
diff --git a/sc/source/filter/lotus/lotimpop.cxx b/sc/source/filter/lotus/lotimpop.cxx
index 5173d5303321..2f6f81b7279c 100644
--- a/sc/source/filter/lotus/lotimpop.cxx
+++ b/sc/source/filter/lotus/lotimpop.cxx
@@ -180,8 +180,7 @@ void ImportLotus::Hiddencolumn( UINT16 nRecLen )
{
Read( nCol );
- pD->SetColFlags( static_cast<SCCOL> (nCol), static_cast<SCTAB> (nLTab), pD->GetColFlags( static_cast<SCCOL> (nCol), static_cast<SCTAB> (nLTab) ) | CR_HIDDEN );
-
+ pD->SetColHidden(static_cast<SCCOL>(nCol), static_cast<SCCOL>(nCol), static_cast<SCTAB>(nLTab), true);
nCnt--;
}
}
diff --git a/sc/source/filter/lotus/op.cxx b/sc/source/filter/lotus/op.cxx
index 0306bdc6315b..4ab0c8bb3b14 100644
--- a/sc/source/filter/lotus/op.cxx
+++ b/sc/source/filter/lotus/op.cxx
@@ -226,7 +226,7 @@ void OP_ColumnWidth( SvStream& r, UINT16 /*n*/ )
nBreite = ( UINT16 ) ( TWIPS_PER_CHAR * nWidthSpaces );
else
{
- pDoc->SetColFlags( static_cast<SCCOL> (nCol), 0, pDoc->GetColFlags( static_cast<SCCOL> (nCol), 0 ) | CR_HIDDEN );
+ pDoc->SetColHidden(static_cast<SCCOL>(nCol), static_cast<SCCOL>(nCol), 0, true);
nBreite = nDefWidth;
}
@@ -335,7 +335,7 @@ void OP_HiddenCols( SvStream& r, UINT16 /*n*/ )
{
if( nAkt & 0x01 ) // unterstes Bit gesetzt?
// -> Hidden Col
- pDoc->SetColFlags( nCount, 0, pDoc->GetColFlags( nCount, 0 ) | CR_HIDDEN );
+ pDoc->SetColHidden(nCount, nCount, 0, true);
nCount++;
nAkt = nAkt / 2; // der Naechste bitte...
diff --git a/sc/source/filter/rtf/eeimpars.cxx b/sc/source/filter/rtf/eeimpars.cxx
index 86a347970ff6..7fb3d16c6c8d 100644
--- a/sc/source/filter/rtf/eeimpars.cxx
+++ b/sc/source/filter/rtf/eeimpars.cxx
@@ -435,7 +435,7 @@ void ScEEImport::WriteToDocument( BOOL bSizeColsRows, double nOutputFactor, SvNu
for ( SCROW nRow = nStartRow; nRow <= nEndRow; nRow++ )
{
USHORT nHeight = (USHORT)(ULONG) mpRowHeights->Get( nRow );
- if ( nHeight > mpDoc->FastGetRowHeight( nRow, nTab ) )
+ if ( nHeight > mpDoc->GetRowHeight( nRow, nTab ) )
mpDoc->SetRowHeight( nRow, nTab, nHeight );
}
}
diff --git a/sc/source/filter/rtf/expbase.cxx b/sc/source/filter/rtf/expbase.cxx
index 3188b4f920e7..cd3f30ef9c9f 100644
--- a/sc/source/filter/rtf/expbase.cxx
+++ b/sc/source/filter/rtf/expbase.cxx
@@ -75,16 +75,13 @@ BOOL ScExportBase::GetDataArea( SCTAB nTab, SCCOL& nStartCol,
BOOL ScExportBase::TrimDataArea( SCTAB nTab, SCCOL& nStartCol,
SCROW& nStartRow, SCCOL& nEndCol, SCROW& nEndRow ) const
{
- while ( nStartCol <= nEndCol &&
- pDoc->GetColFlags( nStartCol, nTab ) & CR_HIDDEN )
+ SCCOL nLastCol;
+ while ( nStartCol <= nEndCol && pDoc->ColHidden(nStartCol, nTab, nLastCol))
++nStartCol;
- while ( nStartCol <= nEndCol &&
- pDoc->GetColFlags( nEndCol, nTab ) & CR_HIDDEN )
+ while ( nStartCol <= nEndCol && pDoc->ColHidden(nEndCol, nTab, nLastCol))
--nEndCol;
- nStartRow = pDoc->GetRowFlagsArray( nTab).GetFirstForCondition( nStartRow,
- nEndRow, CR_HIDDEN, 0);
- nEndRow = pDoc->GetRowFlagsArray( nTab).GetLastForCondition( nStartRow,
- nEndRow, CR_HIDDEN, 0);
+ nStartRow = pDoc->FirstVisibleRow(nStartRow, nEndRow, nTab);
+ nEndRow = pDoc->LastVisibleRow(nStartRow, nEndRow, nTab);
return nStartCol <= nEndCol && nStartRow <= nEndRow && nEndRow !=
::std::numeric_limits<SCROW>::max();
}
diff --git a/sc/source/filter/starcalc/scflt.cxx b/sc/source/filter/starcalc/scflt.cxx
index 104d0d7fe192..c9bf2a90a7a5 100644
--- a/sc/source/filter/starcalc/scflt.cxx
+++ b/sc/source/filter/starcalc/scflt.cxx
@@ -1548,14 +1548,14 @@ void Sc10Import::LoadTables()
rStream >> DataValue;
if (DataValue != 0)
{
- BYTE nFlags = 0;
- if ((DataValue & crfSoftBreak) == crfSoftBreak)
- nFlags |= CR_PAGEBREAK;
- if ((DataValue & crfHardBreak) == crfHardBreak)
- nFlags |= CR_MANUALBREAK;
- if ((DataValue & crfHidden) == crfHidden)
- nFlags |= CR_HIDDEN;
- for (SCCOL k = static_cast<SCCOL>(DataStart); k <= static_cast<SCCOL>(DataEnd); k++) pDoc->SetColFlags(k, static_cast<SCTAB> (TabNo), nFlags);
+ bool bPageBreak = ((DataValue & crfSoftBreak) == crfSoftBreak);
+ bool bManualBreak = ((DataValue & crfHardBreak) == crfHardBreak);
+ bool bHidden = ((DataValue & crfHidden) == crfHidden);
+ for (SCCOL k = static_cast<SCCOL>(DataStart); k <= static_cast<SCCOL>(DataEnd); k++)
+ {
+ pDoc->SetColHidden(k, k, static_cast<SCTAB>(TabNo), bHidden);
+ pDoc->SetColBreak(k, static_cast<SCTAB> (TabNo), bPageBreak, bManualBreak);
+ }
}
DataStart = DataEnd + 1;
}
@@ -1598,14 +1598,14 @@ void Sc10Import::LoadTables()
rStream >> DataValue;
if (DataValue != 0)
{
- BYTE nFlags = 0;
- if ((DataValue & crfSoftBreak) == crfSoftBreak)
- nFlags |= CR_PAGEBREAK;
- if ((DataValue & crfHardBreak) == crfHardBreak)
- nFlags |= CR_MANUALBREAK;
- if ((DataValue & crfHidden) == crfHidden)
- nFlags |= CR_HIDDEN;
- for (SCROW l = static_cast<SCROW>(DataStart); l <= static_cast<SCROW>(DataEnd); l++) pDoc->SetRowFlags(l, static_cast<SCTAB> (TabNo), nFlags);
+ bool bPageBreak = ((DataValue & crfSoftBreak) == crfSoftBreak);
+ bool bManualBreak = ((DataValue & crfHardBreak) == crfHardBreak);
+ bool bHidden = ((DataValue & crfHidden) == crfHidden);
+ for (SCROW l = static_cast<SCROW>(DataStart); l <= static_cast<SCROW>(DataEnd); l++)
+ {
+ pDoc->SetRowHidden(l, l, static_cast<SCTAB> (TabNo), bHidden);
+ pDoc->SetRowBreak(l, static_cast<SCTAB> (TabNo), bPageBreak, bManualBreak);
+ }
}
DataStart = DataEnd + 1;
}
@@ -2396,7 +2396,7 @@ void Sc10Import::LoadObjects()
nStartX = (long) ( nStartX * HMM_PER_TWIPS );
nStartX += (long) ( GraphHeader.x / nPPTX * HMM_PER_TWIPS );
long nSizeX = (long) ( GraphHeader.w / nPPTX * HMM_PER_TWIPS );
- long nStartY = pDoc->FastGetRowHeight( 0,
+ long nStartY = pDoc->GetRowHeight( 0,
static_cast<SCsROW>(GraphHeader.CarretY) - 1,
static_cast<SCTAB>(GraphHeader.CarretZ));
nStartY = (long) ( nStartY * HMM_PER_TWIPS );
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 67a295ccec8b..df6bdcbbe671 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -1354,9 +1354,10 @@ void XclExpWriteAccess::WriteBody( XclExpStream& rStrm )
// ============================================================================
-XclExpFileSharing::XclExpFileSharing( const XclExpRoot& rRoot, sal_uInt16 nPasswordHash ) :
+XclExpFileSharing::XclExpFileSharing( const XclExpRoot& rRoot, sal_uInt16 nPasswordHash, bool bRecommendReadOnly ) :
XclExpRecord( EXC_ID_FILESHARING ),
- mnPasswordHash( nPasswordHash )
+ mnPasswordHash( nPasswordHash ),
+ mbRecommendReadOnly( bRecommendReadOnly )
{
if( rRoot.GetBiff() <= EXC_BIFF5 )
maUserName.AssignByte( rRoot.GetUserName(), rRoot.GetTextEncoding(), EXC_STR_8BITLENGTH );
@@ -1366,13 +1367,13 @@ XclExpFileSharing::XclExpFileSharing( const XclExpRoot& rRoot, sal_uInt16 nPassw
void XclExpFileSharing::Save( XclExpStream& rStrm )
{
- if( mnPasswordHash != 0 )
+ if( (mnPasswordHash != 0) || mbRecommendReadOnly )
XclExpRecord::Save( rStrm );
}
void XclExpFileSharing::WriteBody( XclExpStream& rStrm )
{
- rStrm << sal_uInt16( 0 ) << mnPasswordHash << maUserName;
+ rStrm << sal_uInt16( mbRecommendReadOnly ? 1 : 0 ) << mnPasswordHash << maUserName;
}
// ============================================================================
diff --git a/sc/source/filter/xml/XMLCodeNameProvider.cxx b/sc/source/filter/xml/XMLCodeNameProvider.cxx
new file mode 100755
index 000000000000..ca4bac7eb511
--- /dev/null
+++ b/sc/source/filter/xml/XMLCodeNameProvider.cxx
@@ -0,0 +1,204 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+// INCLUDE ---------------------------------------------------------------
+
+#include "XMLCodeNameProvider.hxx"
+#include "document.hxx"
+
+using namespace rtl;
+using namespace com::sun::star;
+
+sal_Bool XMLCodeNameProvider::_getCodeName( const uno::Any& aAny, String& rCodeName )
+{
+ uno::Sequence<beans::PropertyValue> aProps;
+ if( !(aAny >>= aProps) )
+ return sal_False;
+
+ OUString sCodeNameProp( RTL_CONSTASCII_USTRINGPARAM("CodeName") );
+ sal_Int32 nPropCount = aProps.getLength();
+ for( sal_Int32 i=0; i<nPropCount; i++ )
+ {
+ if( aProps[i].Name == sCodeNameProp )
+ {
+ OUString sCodeName;
+ if( aProps[i].Value >>= sCodeName )
+ {
+ rCodeName = sCodeName;
+ return sal_True;
+ }
+ }
+ }
+
+ return sal_False;
+}
+
+
+XMLCodeNameProvider::XMLCodeNameProvider( ScDocument* pDoc ) :
+ mpDoc( pDoc ),
+ msDocName( RTL_CONSTASCII_USTRINGPARAM("*doc*") ),
+ msCodeNameProp( RTL_CONSTASCII_USTRINGPARAM("CodeName") )
+{
+}
+
+XMLCodeNameProvider::~XMLCodeNameProvider()
+{
+}
+
+::sal_Bool SAL_CALL XMLCodeNameProvider::hasByName( const OUString& aName )
+ throw (uno::RuntimeException )
+{
+ if( aName == msDocName )
+ return mpDoc->GetCodeName().Len() > 0;
+
+ SCTAB nCount = mpDoc->GetTableCount();
+ String sName( aName );
+ String sSheetName, sCodeName;
+ for( SCTAB i = 0; i < nCount; i++ )
+ {
+ if( mpDoc->GetName( i, sSheetName ) && sSheetName == sName )
+ {
+ mpDoc->GetCodeName( i, sCodeName );
+ return sCodeName.Len() > 0;
+ }
+ }
+
+ return sal_False;
+}
+
+uno::Any SAL_CALL XMLCodeNameProvider::getByName( const OUString& aName )
+ throw (container::NoSuchElementException,
+ lang::WrappedTargetException, uno::RuntimeException)
+{
+ uno::Any aRet;
+ uno::Sequence<beans::PropertyValue> aProps(1);
+ aProps[0].Name = msCodeNameProp;
+ if( aName == msDocName )
+ {
+ OUString sUCodeName( mpDoc->GetCodeName() );
+ aProps[0].Value <<= sUCodeName;
+ aRet <<= aProps;
+ return aRet;
+ }
+
+ SCTAB nCount = mpDoc->GetTableCount();
+ String sName( aName );
+ String sSheetName, sCodeName;
+ for( SCTAB i = 0; i < nCount; i++ )
+ {
+ if( mpDoc->GetName( i, sSheetName ) && sSheetName == sName )
+ {
+ mpDoc->GetCodeName( i, sCodeName );
+ OUString sUCodeName( sCodeName );
+ aProps[0].Value <<= sUCodeName;
+ aRet <<= aProps;
+ return aRet;
+ }
+ }
+
+ return aRet;
+}
+
+uno::Sequence< OUString > SAL_CALL XMLCodeNameProvider::getElementNames( )
+ throw (uno::RuntimeException)
+{
+ SCTAB nCount = mpDoc->GetTableCount() + 1;
+ uno::Sequence< rtl::OUString > aNames( nCount );
+ sal_Int32 nRealCount = 0;
+
+ if( mpDoc->GetCodeName().Len() )
+ aNames[nRealCount++] = msDocName;
+
+ String sSheetName, sCodeName;
+ for( SCTAB i = 0; i < nCount; i++ )
+ {
+ mpDoc->GetCodeName( i, sCodeName );
+ if( sCodeName.Len() > 0 )
+ {
+ if( mpDoc->GetName( i, sSheetName ) )
+ aNames[nRealCount++] = sSheetName;
+ }
+ }
+
+ if( nCount != nRealCount )
+ aNames.realloc( nRealCount );
+
+ return aNames;
+}
+
+uno::Type SAL_CALL XMLCodeNameProvider::getElementType( )
+ throw (uno::RuntimeException)
+{
+ return uno::Type();
+}
+
+::sal_Bool SAL_CALL XMLCodeNameProvider::hasElements()
+ throw (uno::RuntimeException )
+{
+ if( mpDoc->GetCodeName().Len() > 0 )
+ return sal_True;
+
+ SCTAB nCount = mpDoc->GetTableCount();
+ String sSheetName, sCodeName;
+ for( SCTAB i = 0; i < nCount; i++ )
+ {
+ mpDoc->GetCodeName( i, sCodeName );
+ if( sCodeName.Len() > 0 && mpDoc->GetName( i, sSheetName ) )
+ return sal_True;
+ }
+
+ return sal_False;
+}
+
+void XMLCodeNameProvider::set( const uno::Reference< container::XNameAccess>& xNameAccess, ScDocument *pDoc )
+{
+ uno::Any aAny;
+ OUString sDocName( RTL_CONSTASCII_USTRINGPARAM("*doc*") );
+ String sCodeName;
+ if( xNameAccess->hasByName( sDocName ) )
+ {
+ aAny = xNameAccess->getByName( sDocName );
+ if( _getCodeName( aAny, sCodeName ) )
+ pDoc->SetCodeName( sCodeName );
+ }
+
+ SCTAB nCount = pDoc->GetTableCount();
+ String sSheetName;
+ for( SCTAB i = 0; i < nCount; i++ )
+ {
+ if( pDoc->GetName( i, sSheetName ) &&
+ xNameAccess->hasByName( sSheetName ) )
+ {
+ aAny = xNameAccess->getByName( sSheetName );
+ if( _getCodeName( aAny, sCodeName ) )
+ pDoc->SetCodeName( i, sCodeName );
+ }
+ }
+}
diff --git a/sc/source/filter/xml/XMLCodeNameProvider.hxx b/sc/source/filter/xml/XMLCodeNameProvider.hxx
new file mode 100755
index 000000000000..39d84409c555
--- /dev/null
+++ b/sc/source/filter/xml/XMLCodeNameProvider.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 SC_XMLCODENAMEPROVIDER_HXX
+#define SC_XMLCODENAMEPROVIDER_HXX
+
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <cppuhelper/implbase1.hxx>
+
+class ScDocument;
+class String;
+
+class XMLCodeNameProvider : public ::cppu::WeakImplHelper1< ::com::sun::star::container::XNameAccess >
+{
+ ScDocument* mpDoc;
+ ::rtl::OUString msDocName;
+ ::rtl::OUString msCodeNameProp;
+
+ static sal_Bool _getCodeName( const ::com::sun::star::uno::Any& aAny,
+ String& rCodeName );
+
+public:
+ XMLCodeNameProvider( ScDocument* pDoc );
+ virtual ~XMLCodeNameProvider();
+
+ virtual ::sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
+ throw (::com::sun::star::uno::RuntimeException );
+
+ virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
+ throw (::com::sun::star::container::NoSuchElementException,
+ ::com::sun::star::lang::WrappedTargetException,
+ ::com::sun::star::uno::RuntimeException);
+
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames( )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ virtual ::com::sun::star::uno::Type SAL_CALL getElementType( )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ virtual ::sal_Bool SAL_CALL hasElements()
+ throw (::com::sun::star::uno::RuntimeException );
+
+ static void set( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& xNameAccess, ScDocument *pDoc );
+};
+
+#endif
diff --git a/sc/source/filter/xml/makefile.mk b/sc/source/filter/xml/makefile.mk
index 360148d38244..7f9f2d529a90 100644
--- a/sc/source/filter/xml/makefile.mk
+++ b/sc/source/filter/xml/makefile.mk
@@ -96,7 +96,8 @@ SLOFILES = \
$(SLO)$/XMLChangeTrackingImportHelper.obj \
$(SLO)$/XMLTrackedChangesContext.obj \
$(SLO)$/XMLExportSharedData.obj \
- $(SLO)$/XMLEmptyContext.obj
+ $(SLO)$/XMLEmptyContext.obj \
+ $(SLO)$/XMLCodeNameProvider.obj
NOOPTFILES= \
diff --git a/sc/source/filter/xml/xmldpimp.cxx b/sc/source/filter/xml/xmldpimp.cxx
index 93e529c4ceca..ba107347b46a 100644
--- a/sc/source/filter/xml/xmldpimp.cxx
+++ b/sc/source/filter/xml/xmldpimp.cxx
@@ -464,6 +464,11 @@ void ScXMLDataPilotTableContext::EndElement()
if (pDoc)
{
ScDPCollection* pDPCollection = pDoc->GetDPCollection();
+
+ // #i94570# Names have to be unique, or the tables can't be accessed by API.
+ if ( pDPCollection->GetByName(pDPObject->GetName()) )
+ pDPObject->SetName( String() ); // ignore the invalid name, create a new name in AfterXMLLoading
+
pDPObject->SetAlive(sal_True);
pDPCollection->InsertNewTable(pDPObject);
}
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index 5963fd72bad2..0563f6430063 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -80,10 +80,12 @@
#include <xmloff/txtparae.hxx>
#include <xmloff/xmlcnitm.hxx>
#include <xmloff/xmlerror.hxx>
+#include <xmloff/XMLEventExport.hxx>
#include <rtl/ustring.hxx>
#include <tools/debug.hxx>
+#include "tools/color.hxx"
#include <rtl/math.hxx>
#include <svl/zforlist.hxx>
#include <svx/unoshape.hxx>
@@ -124,6 +126,7 @@
#include <com/sun/star/form/XFormsSupplier2.hpp>
#include <com/sun/star/io/XActiveDataSource.hpp>
#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/chart2/XChartDocument.hpp>
#include <com/sun/star/chart2/data/XRangeXMLConversion.hpp>
@@ -132,6 +135,8 @@
#include <com/sun/star/document/XDocumentProperties.hpp>
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include "XMLCodeNameProvider.hxx"
+
#include <sfx2/objsh.hxx>
#include <vector>
@@ -161,6 +166,7 @@ using namespace formula;
using namespace com::sun::star;
using namespace xmloff::token;
using ::std::vector;
+using ::com::sun::star::uno::UNO_QUERY;
//----------------------------------------------------------------------------
@@ -1705,132 +1711,140 @@ void ScXMLExport::_ExportContent()
}
else
{
- //! indent after rebasing to m52
-
- uno::Reference<sheet::XSpreadsheet> xTable(xIndex->getByIndex(nTable), uno::UNO_QUERY);
- if (xTable.is())
- {
- xCurrentTable.set(xTable);
- xCurrentTableCellRange.set(xTable, uno::UNO_QUERY);
- uno::Reference<container::XNamed> xName (xTable, uno::UNO_QUERY );
- if ( xName.is() )
+ uno::Reference<sheet::XSpreadsheet> xTable(xIndex->getByIndex(nTable), uno::UNO_QUERY);
+ if (xTable.is())
{
- nCurrentTable = sal::static_int_cast<sal_uInt16>( nTable );
- rtl::OUString sOUTableName(xName->getName());
- AddAttribute(sAttrName, sOUTableName);
- AddAttribute(sAttrStyleName, aTableStyles[nTable]);
- uno::Reference<util::XProtectable> xProtectable (xTable, uno::UNO_QUERY);
- if (xProtectable.is() && xProtectable->isProtected())
+ xCurrentTable.set(xTable);
+ xCurrentTableCellRange.set(xTable, uno::UNO_QUERY);
+ uno::Reference<container::XNamed> xName (xTable, uno::UNO_QUERY );
+ if ( xName.is() )
{
- AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TRUE);
- rtl::OUStringBuffer aBuffer;
- if (pDoc)
+ nCurrentTable = sal::static_int_cast<sal_uInt16>( nTable );
+ rtl::OUString sOUTableName(xName->getName());
+ AddAttribute(sAttrName, sOUTableName);
+ AddAttribute(sAttrStyleName, aTableStyles[nTable]);
+
+ uno::Reference<util::XProtectable> xProtectable (xTable, uno::UNO_QUERY);
+ if (xProtectable.is() && xProtectable->isProtected())
{
- ScTableProtection* pProtect = pDoc->GetTabProtection(static_cast<SCTAB>(nTable));
- if (pProtect)
- SvXMLUnitConverter::encodeBase64(aBuffer, pProtect->getPasswordHash(PASSHASH_OOO));
+ AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TRUE);
+ rtl::OUStringBuffer aBuffer;
+ if (pDoc)
+ {
+ ScTableProtection* pProtect = pDoc->GetTabProtection(static_cast<SCTAB>(nTable));
+ if (pProtect)
+ SvXMLUnitConverter::encodeBase64(aBuffer, pProtect->getPasswordHash(PASSHASH_OOO));
+ }
+ if (aBuffer.getLength())
+ AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear());
}
- if (aBuffer.getLength())
- AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear());
- }
- rtl::OUString sPrintRanges;
- table::CellRangeAddress aColumnHeaderRange;
- sal_Bool bHasColumnHeader;
- GetColumnRowHeader(bHasColumnHeader, aColumnHeaderRange, bHasRowHeader, aRowHeaderRange, sPrintRanges);
- if( sPrintRanges.getLength() )
- AddAttribute( XML_NAMESPACE_TABLE, XML_PRINT_RANGES, sPrintRanges );
- else if (!pDoc->IsPrintEntireSheet(static_cast<SCTAB>(nTable)))
- AddAttribute( XML_NAMESPACE_TABLE, XML_PRINT, XML_FALSE);
- SvXMLElementExport aElemT(*this, sElemTab, sal_True, sal_True);
- CheckAttrList();
- WriteTableSource();
- WriteScenario();
- uno::Reference<drawing::XDrawPage> xDrawPage;
- if (pSharedData->HasForm(nTable, xDrawPage) && xDrawPage.is())
- {
- ::xmloff::OOfficeFormsExport aForms(*this);
- GetFormExport()->exportForms( xDrawPage );
- sal_Bool bRet(GetFormExport()->seekPage( xDrawPage ));
- DBG_ASSERT( bRet, "OFormLayerXMLExport::seekPage failed!" );
- (void)bRet; // avoid warning in product version
- }
- if (pSharedData->HasDrawPage())
- {
- GetShapeExport()->seekShapes(uno::Reference<drawing::XShapes>(pSharedData->GetDrawPage(nTable), uno::UNO_QUERY));
- WriteTableShapes();
- }
- table::CellRangeAddress aRange(GetEndAddress(xTable, nTable));
- pSharedData->SetLastColumn(nTable, aRange.EndColumn);
- pSharedData->SetLastRow(nTable, aRange.EndRow);
- pCellsItr->SetCurrentTable(static_cast<SCTAB>(nTable), xCurrentTable);
- pGroupColumns->NewTable();
- pGroupRows->NewTable();
- FillColumnRowGroups();
- if (bHasColumnHeader)
- pSharedData->SetLastColumn(nTable, aColumnHeaderRange.EndColumn);
- bRowHeaderOpen = sal_False;
- if (bHasRowHeader)
- pSharedData->SetLastRow(nTable, aRowHeaderRange.EndRow);
- pDefaults->FillDefaultStyles(nTable, pSharedData->GetLastRow(nTable),
- pSharedData->GetLastColumn(nTable), pCellStyles, pDoc);
- pRowFormatRanges->SetRowDefaults(pDefaults->GetRowDefaults());
- pRowFormatRanges->SetColDefaults(pDefaults->GetColDefaults());
- pCellStyles->SetRowDefaults(pDefaults->GetRowDefaults());
- pCellStyles->SetColDefaults(pDefaults->GetColDefaults());
- ExportColumns(nTable, aColumnHeaderRange, bHasColumnHeader);
- sal_Bool bIsFirst(sal_True);
- sal_Int32 nEqualCells(0);
- ScMyCell aCell;
- ScMyCell aPrevCell;
- while(pCellsItr->GetNext(aCell, pCellStyles))
- {
- if (bIsFirst)
+ rtl::OUString sPrintRanges;
+ table::CellRangeAddress aColumnHeaderRange;
+ sal_Bool bHasColumnHeader;
+ GetColumnRowHeader(bHasColumnHeader, aColumnHeaderRange, bHasRowHeader, aRowHeaderRange, sPrintRanges);
+ if( sPrintRanges.getLength() )
+ AddAttribute( XML_NAMESPACE_TABLE, XML_PRINT_RANGES, sPrintRanges );
+ else if (!pDoc->IsPrintEntireSheet(static_cast<SCTAB>(nTable)))
+ AddAttribute( XML_NAMESPACE_TABLE, XML_PRINT, XML_FALSE);
+ SvXMLElementExport aElemT(*this, sElemTab, sal_True, sal_True);
+ CheckAttrList();
+
+ if ( pDoc && pDoc->GetSheetEvents( static_cast<SCTAB>(nTable) ) &&
+ getDefaultVersion() == SvtSaveOptions::ODFVER_LATEST )
{
- ExportFormatRanges(0, 0, aCell.aCellAddress.Column - 1, aCell.aCellAddress.Row, nTable);
- aPrevCell = aCell;
- bIsFirst = sal_False;
+ // store sheet events
+ uno::Reference<document::XEventsSupplier> xSupplier(xTable, uno::UNO_QUERY);
+ uno::Reference<container::XNameAccess> xEvents(xSupplier->getEvents(), uno::UNO_QUERY);
+ GetEventExport().ExportExt( xEvents );
}
- else
+
+ WriteTableSource();
+ WriteScenario();
+ uno::Reference<drawing::XDrawPage> xDrawPage;
+ if (pSharedData->HasForm(nTable, xDrawPage) && xDrawPage.is())
+ {
+ ::xmloff::OOfficeFormsExport aForms(*this);
+ GetFormExport()->exportForms( xDrawPage );
+ sal_Bool bRet(GetFormExport()->seekPage( xDrawPage ));
+ DBG_ASSERT( bRet, "OFormLayerXMLExport::seekPage failed!" );
+ (void)bRet; // avoid warning in product version
+ }
+ if (pSharedData->HasDrawPage())
+ {
+ GetShapeExport()->seekShapes(uno::Reference<drawing::XShapes>(pSharedData->GetDrawPage(nTable), uno::UNO_QUERY));
+ WriteTableShapes();
+ }
+ table::CellRangeAddress aRange(GetEndAddress(xTable, nTable));
+ pSharedData->SetLastColumn(nTable, aRange.EndColumn);
+ pSharedData->SetLastRow(nTable, aRange.EndRow);
+ pCellsItr->SetCurrentTable(static_cast<SCTAB>(nTable), xCurrentTable);
+ pGroupColumns->NewTable();
+ pGroupRows->NewTable();
+ FillColumnRowGroups();
+ if (bHasColumnHeader)
+ pSharedData->SetLastColumn(nTable, aColumnHeaderRange.EndColumn);
+ bRowHeaderOpen = sal_False;
+ if (bHasRowHeader)
+ pSharedData->SetLastRow(nTable, aRowHeaderRange.EndRow);
+ pDefaults->FillDefaultStyles(nTable, pSharedData->GetLastRow(nTable),
+ pSharedData->GetLastColumn(nTable), pCellStyles, pDoc);
+ pRowFormatRanges->SetRowDefaults(pDefaults->GetRowDefaults());
+ pRowFormatRanges->SetColDefaults(pDefaults->GetColDefaults());
+ pCellStyles->SetRowDefaults(pDefaults->GetRowDefaults());
+ pCellStyles->SetColDefaults(pDefaults->GetColDefaults());
+ ExportColumns(nTable, aColumnHeaderRange, bHasColumnHeader);
+ sal_Bool bIsFirst(sal_True);
+ sal_Int32 nEqualCells(0);
+ ScMyCell aCell;
+ ScMyCell aPrevCell;
+ while(pCellsItr->GetNext(aCell, pCellStyles))
{
- if ((aPrevCell.aCellAddress.Row == aCell.aCellAddress.Row) &&
- (aPrevCell.aCellAddress.Column + nEqualCells + 1 == aCell.aCellAddress.Column))
+ if (bIsFirst)
+ {
+ ExportFormatRanges(0, 0, aCell.aCellAddress.Column - 1, aCell.aCellAddress.Row, nTable);
+ aPrevCell = aCell;
+ bIsFirst = sal_False;
+ }
+ else
{
- if(IsCellEqual(aPrevCell, aCell))
- ++nEqualCells;
+ if ((aPrevCell.aCellAddress.Row == aCell.aCellAddress.Row) &&
+ (aPrevCell.aCellAddress.Column + nEqualCells + 1 == aCell.aCellAddress.Column))
+ {
+ if(IsCellEqual(aPrevCell, aCell))
+ ++nEqualCells;
+ else
+ {
+ SetRepeatAttribute(nEqualCells);
+ WriteCell(aPrevCell);
+ nEqualCells = 0;
+ aPrevCell = aCell;
+ }
+ }
else
{
SetRepeatAttribute(nEqualCells);
WriteCell(aPrevCell);
+ ExportFormatRanges(aPrevCell.aCellAddress.Column + nEqualCells + 1, aPrevCell.aCellAddress.Row,
+ aCell.aCellAddress.Column - 1, aCell.aCellAddress.Row, nTable);
nEqualCells = 0;
aPrevCell = aCell;
}
}
- else
- {
- SetRepeatAttribute(nEqualCells);
- WriteCell(aPrevCell);
- ExportFormatRanges(aPrevCell.aCellAddress.Column + nEqualCells + 1, aPrevCell.aCellAddress.Row,
- aCell.aCellAddress.Column - 1, aCell.aCellAddress.Row, nTable);
- nEqualCells = 0;
- aPrevCell = aCell;
- }
}
+ if (!bIsFirst)
+ {
+ SetRepeatAttribute(nEqualCells);
+ WriteCell(aPrevCell);
+ ExportFormatRanges(aPrevCell.aCellAddress.Column + nEqualCells + 1, aPrevCell.aCellAddress.Row,
+ pSharedData->GetLastColumn(nTable), pSharedData->GetLastRow(nTable), nTable);
+ }
+ else
+ ExportFormatRanges(0, 0, pSharedData->GetLastColumn(nTable), pSharedData->GetLastRow(nTable), nTable);
+ CloseRow(pSharedData->GetLastRow(nTable));
+ nEqualCells = 0;
}
- if (!bIsFirst)
- {
- SetRepeatAttribute(nEqualCells);
- WriteCell(aPrevCell);
- ExportFormatRanges(aPrevCell.aCellAddress.Column + nEqualCells + 1, aPrevCell.aCellAddress.Row,
- pSharedData->GetLastColumn(nTable), pSharedData->GetLastRow(nTable), nTable);
- }
- else
- ExportFormatRanges(0, 0, pSharedData->GetLastColumn(nTable), pSharedData->GetLastRow(nTable), nTable);
- CloseRow(pSharedData->GetLastRow(nTable));
- nEqualCells = 0;
}
}
-
- }
IncrementProgressBar(sal_False);
}
}
@@ -2148,505 +2162,507 @@ uno::Any lcl_GetEnumerated( uno::Reference<container::XEnumerationAccess> xEnumA
void ScXMLExport::_ExportAutoStyles()
{
- if (GetModel().is())
+ if (!GetModel().is())
+ return;
+
+ uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( GetModel(), uno::UNO_QUERY );
+ if (!xSpreadDoc.is())
+ return;
+
+ uno::Reference<container::XIndexAccess> xIndex( xSpreadDoc->getSheets(), uno::UNO_QUERY );
+ if (!xIndex.is())
+ return;
+
+ if (getExportFlags() & EXPORT_CONTENT)
{
- uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( GetModel(), uno::UNO_QUERY );
- if ( xSpreadDoc.is() )
+ // re-create automatic styles with old names from stored data
+ ScSheetSaveData* pSheetData = ScModelObj::getImplementation(xSpreadDoc)->GetSheetSaveData();
+ if (pSheetData && pDoc)
{
- uno::Reference<container::XIndexAccess> xIndex( xSpreadDoc->getSheets(), uno::UNO_QUERY );
- if ( xIndex.is() )
- {
- if (getExportFlags() & EXPORT_CONTENT)
+ // formulas have to be calculated now, to detect changed results
+ // (during normal save, they will be calculated anyway)
+ SCTAB nTabCount = pDoc->GetTableCount();
+ for (SCTAB nTab=0; nTab<nTabCount; ++nTab)
+ if (pDoc->IsStreamValid(nTab))
{
- // re-create automatic styles with old names from stored data
- ScSheetSaveData* pSheetData = ScModelObj::getImplementation(xSpreadDoc)->GetSheetSaveData();
- if (pSheetData && pDoc)
+ ScCellIterator aIter( pDoc, 0,0,nTab, MAXCOL,MAXROW,nTab );
+ ScBaseCell* pCell = aIter.GetFirst();
+ while (pCell)
{
- // formulas have to be calculated now, to detect changed results
- // (during normal save, they will be calculated anyway)
- SCTAB nTabCount = pDoc->GetTableCount();
- for (SCTAB nTab=0; nTab<nTabCount; ++nTab)
- if (pDoc->IsStreamValid(nTab))
- {
- ScCellIterator aIter( pDoc, 0,0,nTab, MAXCOL,MAXROW,nTab );
- ScBaseCell* pCell = aIter.GetFirst();
- while (pCell)
- {
- if (pCell->GetCellType() == CELLTYPE_FORMULA)
- static_cast<ScFormulaCell*>(pCell)->IsValue(); // interpret if dirty
- pCell = aIter.GetNext();
- }
- }
+ if (pCell->GetCellType() == CELLTYPE_FORMULA)
+ static_cast<ScFormulaCell*>(pCell)->IsValue(); // interpret if dirty
+ pCell = aIter.GetNext();
+ }
+ }
- // stored cell styles
- const std::vector<ScCellStyleEntry>& rCellEntries = pSheetData->GetCellStyles();
- std::vector<ScCellStyleEntry>::const_iterator aCellIter = rCellEntries.begin();
- std::vector<ScCellStyleEntry>::const_iterator aCellEnd = rCellEntries.end();
- while (aCellIter != aCellEnd)
- {
- ScAddress aPos = aCellIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
- {
- uno::Reference <sheet::XSpreadsheet> xTable(xIndex->getByIndex(nTable), uno::UNO_QUERY);
- uno::Reference <beans::XPropertySet> xProperties(
- xTable->getCellByPosition( aPos.Col(), aPos.Row() ), uno::UNO_QUERY );
+ // stored cell styles
+ const std::vector<ScCellStyleEntry>& rCellEntries = pSheetData->GetCellStyles();
+ std::vector<ScCellStyleEntry>::const_iterator aCellIter = rCellEntries.begin();
+ std::vector<ScCellStyleEntry>::const_iterator aCellEnd = rCellEntries.end();
+ while (aCellIter != aCellEnd)
+ {
+ ScAddress aPos = aCellIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ uno::Reference <sheet::XSpreadsheet> xTable(xIndex->getByIndex(nTable), uno::UNO_QUERY);
+ uno::Reference <beans::XPropertySet> xProperties(
+ xTable->getCellByPosition( aPos.Col(), aPos.Row() ), uno::UNO_QUERY );
- AddStyleFromCells(xProperties, xTable, nTable, &aCellIter->maName);
- }
- ++aCellIter;
- }
+ AddStyleFromCells(xProperties, xTable, nTable, &aCellIter->maName);
+ }
+ ++aCellIter;
+ }
- // stored column styles
- const std::vector<ScCellStyleEntry>& rColumnEntries = pSheetData->GetColumnStyles();
- std::vector<ScCellStyleEntry>::const_iterator aColumnIter = rColumnEntries.begin();
- std::vector<ScCellStyleEntry>::const_iterator aColumnEnd = rColumnEntries.end();
- while (aColumnIter != aColumnEnd)
- {
- ScAddress aPos = aColumnIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
- {
- uno::Reference<table::XColumnRowRange> xColumnRowRange(xIndex->getByIndex(nTable), uno::UNO_QUERY);
- uno::Reference<table::XTableColumns> xTableColumns(xColumnRowRange->getColumns());
- uno::Reference<beans::XPropertySet> xColumnProperties(xTableColumns->getByIndex( aPos.Col() ), uno::UNO_QUERY);
+ // stored column styles
+ const std::vector<ScCellStyleEntry>& rColumnEntries = pSheetData->GetColumnStyles();
+ std::vector<ScCellStyleEntry>::const_iterator aColumnIter = rColumnEntries.begin();
+ std::vector<ScCellStyleEntry>::const_iterator aColumnEnd = rColumnEntries.end();
+ while (aColumnIter != aColumnEnd)
+ {
+ ScAddress aPos = aColumnIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ uno::Reference<table::XColumnRowRange> xColumnRowRange(xIndex->getByIndex(nTable), uno::UNO_QUERY);
+ uno::Reference<table::XTableColumns> xTableColumns(xColumnRowRange->getColumns());
+ uno::Reference<beans::XPropertySet> xColumnProperties(xTableColumns->getByIndex( aPos.Col() ), uno::UNO_QUERY);
- sal_Int32 nIndex(-1);
- sal_Bool bIsVisible(sal_True);
- AddStyleFromColumn( xColumnProperties, &aColumnIter->maName, nIndex, bIsVisible );
- }
- ++aColumnIter;
- }
+ sal_Int32 nIndex(-1);
+ sal_Bool bIsVisible(sal_True);
+ AddStyleFromColumn( xColumnProperties, &aColumnIter->maName, nIndex, bIsVisible );
+ }
+ ++aColumnIter;
+ }
- // stored row styles
- const std::vector<ScCellStyleEntry>& rRowEntries = pSheetData->GetRowStyles();
- std::vector<ScCellStyleEntry>::const_iterator aRowIter = rRowEntries.begin();
- std::vector<ScCellStyleEntry>::const_iterator aRowEnd = rRowEntries.end();
- while (aRowIter != aRowEnd)
- {
- ScAddress aPos = aRowIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
- {
- uno::Reference<table::XColumnRowRange> xColumnRowRange(xIndex->getByIndex(nTable), uno::UNO_QUERY);
- uno::Reference<table::XTableRows> xTableRows(xColumnRowRange->getRows());
- uno::Reference<beans::XPropertySet> xRowProperties(xTableRows->getByIndex( aPos.Row() ), uno::UNO_QUERY);
+ // stored row styles
+ const std::vector<ScCellStyleEntry>& rRowEntries = pSheetData->GetRowStyles();
+ std::vector<ScCellStyleEntry>::const_iterator aRowIter = rRowEntries.begin();
+ std::vector<ScCellStyleEntry>::const_iterator aRowEnd = rRowEntries.end();
+ while (aRowIter != aRowEnd)
+ {
+ ScAddress aPos = aRowIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ uno::Reference<table::XColumnRowRange> xColumnRowRange(xIndex->getByIndex(nTable), uno::UNO_QUERY);
+ uno::Reference<table::XTableRows> xTableRows(xColumnRowRange->getRows());
+ uno::Reference<beans::XPropertySet> xRowProperties(xTableRows->getByIndex( aPos.Row() ), uno::UNO_QUERY);
- sal_Int32 nIndex(-1);
- AddStyleFromRow( xRowProperties, &aRowIter->maName, nIndex );
- }
- ++aRowIter;
- }
+ sal_Int32 nIndex(-1);
+ AddStyleFromRow( xRowProperties, &aRowIter->maName, nIndex );
+ }
+ ++aRowIter;
+ }
- // stored table styles
- const std::vector<ScCellStyleEntry>& rTableEntries = pSheetData->GetTableStyles();
- std::vector<ScCellStyleEntry>::const_iterator aTableIter = rTableEntries.begin();
- std::vector<ScCellStyleEntry>::const_iterator aTableEnd = rTableEntries.end();
- while (aTableIter != aTableEnd)
- {
- ScAddress aPos = aTableIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
- {
- //! separate method AddStyleFromTable needed?
- uno::Reference<beans::XPropertySet> xTableProperties(xIndex->getByIndex(nTable), uno::UNO_QUERY);
- if (xTableProperties.is())
- {
- std::vector<XMLPropertyState> xPropStates(xTableStylesExportPropertySetMapper->Filter(xTableProperties));
- rtl::OUString sParent;
- rtl::OUString sName( aTableIter->maName );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TABLE_TABLE, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TABLE_TABLE, sName);
- }
- }
- ++aTableIter;
- }
+ // stored table styles
+ const std::vector<ScCellStyleEntry>& rTableEntries = pSheetData->GetTableStyles();
+ std::vector<ScCellStyleEntry>::const_iterator aTableIter = rTableEntries.begin();
+ std::vector<ScCellStyleEntry>::const_iterator aTableEnd = rTableEntries.end();
+ while (aTableIter != aTableEnd)
+ {
+ ScAddress aPos = aTableIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ //! separate method AddStyleFromTable needed?
+ uno::Reference<beans::XPropertySet> xTableProperties(xIndex->getByIndex(nTable), uno::UNO_QUERY);
+ if (xTableProperties.is())
+ {
+ std::vector<XMLPropertyState> xPropStates(xTableStylesExportPropertySetMapper->Filter(xTableProperties));
+ rtl::OUString sParent;
+ rtl::OUString sName( aTableIter->maName );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TABLE_TABLE, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TABLE_TABLE, sName);
+ }
+ }
+ ++aTableIter;
+ }
- // stored styles for notes
+ // stored styles for notes
- UniReference<SvXMLExportPropertyMapper> xShapeMapper = XMLShapeExport::CreateShapePropMapper( *this );
- GetShapeExport(); // make sure the graphics styles family is added
+ UniReference<SvXMLExportPropertyMapper> xShapeMapper = XMLShapeExport::CreateShapePropMapper( *this );
+ GetShapeExport(); // make sure the graphics styles family is added
+
+ const std::vector<ScNoteStyleEntry>& rNoteEntries = pSheetData->GetNoteStyles();
+ std::vector<ScNoteStyleEntry>::const_iterator aNoteIter = rNoteEntries.begin();
+ std::vector<ScNoteStyleEntry>::const_iterator aNoteEnd = rNoteEntries.end();
+ while (aNoteIter != aNoteEnd)
+ {
+ ScAddress aPos = aNoteIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ //! separate method AddStyleFromNote needed?
- const std::vector<ScNoteStyleEntry>& rNoteEntries = pSheetData->GetNoteStyles();
- std::vector<ScNoteStyleEntry>::const_iterator aNoteIter = rNoteEntries.begin();
- std::vector<ScNoteStyleEntry>::const_iterator aNoteEnd = rNoteEntries.end();
- while (aNoteIter != aNoteEnd)
+ ScPostIt* pNote = pDoc->GetNote( aPos );
+ DBG_ASSERT( pNote, "note not found" );
+ if (pNote)
+ {
+ SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
+ // all uno shapes are created anyway in CollectSharedData
+ uno::Reference<beans::XPropertySet> xShapeProperties( pDrawObj->getUnoShape(), uno::UNO_QUERY );
+ if (xShapeProperties.is())
{
- ScAddress aPos = aNoteIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
+ if ( aNoteIter->maStyleName.getLength() )
{
- //! separate method AddStyleFromNote needed?
-
- ScPostIt* pNote = pDoc->GetNote( aPos );
- DBG_ASSERT( pNote, "note not found" );
- if (pNote)
- {
- SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
- // all uno shapes are created anyway in CollectSharedData
- uno::Reference<beans::XPropertySet> xShapeProperties( pDrawObj->getUnoShape(), uno::UNO_QUERY );
- if (xShapeProperties.is())
- {
- if ( aNoteIter->maStyleName.getLength() )
- {
- std::vector<XMLPropertyState> xPropStates(xShapeMapper->Filter(xShapeProperties));
- rtl::OUString sParent;
- rtl::OUString sName( aNoteIter->maStyleName );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_SD_GRAPHICS_ID, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_SD_GRAPHICS_ID, sName);
- }
- if ( aNoteIter->maTextStyle.getLength() )
- {
- std::vector<XMLPropertyState> xPropStates(
- GetTextParagraphExport()->GetParagraphPropertyMapper()->Filter(xShapeProperties));
- rtl::OUString sParent;
- rtl::OUString sName( aNoteIter->maTextStyle );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
- }
- }
- }
+ std::vector<XMLPropertyState> xPropStates(xShapeMapper->Filter(xShapeProperties));
+ rtl::OUString sParent;
+ rtl::OUString sName( aNoteIter->maStyleName );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_SD_GRAPHICS_ID, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_SD_GRAPHICS_ID, sName);
+ }
+ if ( aNoteIter->maTextStyle.getLength() )
+ {
+ std::vector<XMLPropertyState> xPropStates(
+ GetTextParagraphExport()->GetParagraphPropertyMapper()->Filter(xShapeProperties));
+ rtl::OUString sParent;
+ rtl::OUString sName( aNoteIter->maTextStyle );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
}
- ++aNoteIter;
}
+ }
+ }
+ ++aNoteIter;
+ }
- // note paragraph styles
+ // note paragraph styles
- //UniReference<SvXMLExportPropertyMapper> xParaPropMapper = XMLTextParagraphExport::CreateParaExtPropMapper( *this );
- UniReference<SvXMLExportPropertyMapper> xParaPropMapper = GetTextParagraphExport()->GetParagraphPropertyMapper();
+ //UniReference<SvXMLExportPropertyMapper> xParaPropMapper = XMLTextParagraphExport::CreateParaExtPropMapper( *this );
+ UniReference<SvXMLExportPropertyMapper> xParaPropMapper = GetTextParagraphExport()->GetParagraphPropertyMapper();
- const std::vector<ScTextStyleEntry>& rNoteParaEntries = pSheetData->GetNoteParaStyles();
- std::vector<ScTextStyleEntry>::const_iterator aNoteParaIter = rNoteParaEntries.begin();
- std::vector<ScTextStyleEntry>::const_iterator aNoteParaEnd = rNoteParaEntries.end();
- while (aNoteParaIter != aNoteParaEnd)
+ const std::vector<ScTextStyleEntry>& rNoteParaEntries = pSheetData->GetNoteParaStyles();
+ std::vector<ScTextStyleEntry>::const_iterator aNoteParaIter = rNoteParaEntries.begin();
+ std::vector<ScTextStyleEntry>::const_iterator aNoteParaEnd = rNoteParaEntries.end();
+ while (aNoteParaIter != aNoteParaEnd)
+ {
+ ScAddress aPos = aNoteParaIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ ScPostIt* pNote = pDoc->GetNote( aPos );
+ DBG_ASSERT( pNote, "note not found" );
+ if (pNote)
+ {
+ SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
+ uno::Reference<container::XEnumerationAccess> xCellText(pDrawObj->getUnoShape(), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xParaProp(
+ lcl_GetEnumerated( xCellText, aNoteParaIter->maSelection.nStartPara ), uno::UNO_QUERY );
+ if ( xParaProp.is() )
{
- ScAddress aPos = aNoteParaIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
- {
- ScPostIt* pNote = pDoc->GetNote( aPos );
- DBG_ASSERT( pNote, "note not found" );
- if (pNote)
- {
- SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
- uno::Reference<container::XEnumerationAccess> xCellText(pDrawObj->getUnoShape(), uno::UNO_QUERY);
- uno::Reference<beans::XPropertySet> xParaProp(
- lcl_GetEnumerated( xCellText, aNoteParaIter->maSelection.nStartPara ), uno::UNO_QUERY );
- if ( xParaProp.is() )
- {
- std::vector<XMLPropertyState> xPropStates(xParaPropMapper->Filter(xParaProp));
- rtl::OUString sParent;
- rtl::OUString sName( aNoteParaIter->maName );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
- }
- }
- }
- ++aNoteParaIter;
+ std::vector<XMLPropertyState> xPropStates(xParaPropMapper->Filter(xParaProp));
+ rtl::OUString sParent;
+ rtl::OUString sName( aNoteParaIter->maName );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_PARAGRAPH, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_PARAGRAPH, sName);
}
+ }
+ }
+ ++aNoteParaIter;
+ }
- // note text styles
+ // note text styles
- UniReference<SvXMLExportPropertyMapper> xTextPropMapper = XMLTextParagraphExport::CreateCharExtPropMapper( *this );
+ UniReference<SvXMLExportPropertyMapper> xTextPropMapper = XMLTextParagraphExport::CreateCharExtPropMapper( *this );
- const std::vector<ScTextStyleEntry>& rNoteTextEntries = pSheetData->GetNoteTextStyles();
- std::vector<ScTextStyleEntry>::const_iterator aNoteTextIter = rNoteTextEntries.begin();
- std::vector<ScTextStyleEntry>::const_iterator aNoteTextEnd = rNoteTextEntries.end();
- while (aNoteTextIter != aNoteTextEnd)
+ const std::vector<ScTextStyleEntry>& rNoteTextEntries = pSheetData->GetNoteTextStyles();
+ std::vector<ScTextStyleEntry>::const_iterator aNoteTextIter = rNoteTextEntries.begin();
+ std::vector<ScTextStyleEntry>::const_iterator aNoteTextEnd = rNoteTextEntries.end();
+ while (aNoteTextIter != aNoteTextEnd)
+ {
+ ScAddress aPos = aNoteTextIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ ScPostIt* pNote = pDoc->GetNote( aPos );
+ DBG_ASSERT( pNote, "note not found" );
+ if (pNote)
+ {
+ SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
+ uno::Reference<text::XSimpleText> xCellText(pDrawObj->getUnoShape(), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xCursorProp(xCellText->createTextCursor(), uno::UNO_QUERY);
+ ScDrawTextCursor* pCursor = ScDrawTextCursor::getImplementation( xCursorProp );
+ if (pCursor)
{
- ScAddress aPos = aNoteTextIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
- {
- ScPostIt* pNote = pDoc->GetNote( aPos );
- DBG_ASSERT( pNote, "note not found" );
- if (pNote)
- {
- SdrCaptionObj* pDrawObj = pNote->GetOrCreateCaption( aPos );
- uno::Reference<text::XSimpleText> xCellText(pDrawObj->getUnoShape(), uno::UNO_QUERY);
- uno::Reference<beans::XPropertySet> xCursorProp(xCellText->createTextCursor(), uno::UNO_QUERY);
- ScDrawTextCursor* pCursor = ScDrawTextCursor::getImplementation( xCursorProp );
- if (pCursor)
- {
- pCursor->SetSelection( aNoteTextIter->maSelection );
+ pCursor->SetSelection( aNoteTextIter->maSelection );
- std::vector<XMLPropertyState> xPropStates(xTextPropMapper->Filter(xCursorProp));
- rtl::OUString sParent;
- rtl::OUString sName( aNoteTextIter->maName );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_TEXT, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_TEXT, sName);
- }
- }
- }
- ++aNoteTextIter;
+ std::vector<XMLPropertyState> xPropStates(xTextPropMapper->Filter(xCursorProp));
+ rtl::OUString sParent;
+ rtl::OUString sName( aNoteTextIter->maName );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_TEXT, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_TEXT, sName);
}
+ }
+ }
+ ++aNoteTextIter;
+ }
- // stored text styles
+ // stored text styles
- //UniReference<SvXMLExportPropertyMapper> xTextPropMapper = XMLTextParagraphExport::CreateCharExtPropMapper( *this );
+ //UniReference<SvXMLExportPropertyMapper> xTextPropMapper = XMLTextParagraphExport::CreateCharExtPropMapper( *this );
- const std::vector<ScTextStyleEntry>& rTextEntries = pSheetData->GetTextStyles();
- std::vector<ScTextStyleEntry>::const_iterator aTextIter = rTextEntries.begin();
- std::vector<ScTextStyleEntry>::const_iterator aTextEnd = rTextEntries.end();
- while (aTextIter != aTextEnd)
- {
- ScAddress aPos = aTextIter->maCellPos;
- sal_Int32 nTable = aPos.Tab();
- bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
- if (bCopySheet)
- {
- //! separate method AddStyleFromText needed?
- //! cache sheet object
-
- uno::Reference<table::XCellRange> xCellRange(xIndex->getByIndex(nTable), uno::UNO_QUERY);
- uno::Reference<text::XSimpleText> xCellText(xCellRange->getCellByPosition(aPos.Col(), aPos.Row()), uno::UNO_QUERY);
- uno::Reference<beans::XPropertySet> xCursorProp(xCellText->createTextCursor(), uno::UNO_QUERY);
- ScCellTextCursor* pCursor = ScCellTextCursor::getImplementation( xCursorProp );
- if (pCursor)
- {
- pCursor->SetSelection( aTextIter->maSelection );
+ const std::vector<ScTextStyleEntry>& rTextEntries = pSheetData->GetTextStyles();
+ std::vector<ScTextStyleEntry>::const_iterator aTextIter = rTextEntries.begin();
+ std::vector<ScTextStyleEntry>::const_iterator aTextEnd = rTextEntries.end();
+ while (aTextIter != aTextEnd)
+ {
+ ScAddress aPos = aTextIter->maCellPos;
+ sal_Int32 nTable = aPos.Tab();
+ bool bCopySheet = pDoc->IsStreamValid( static_cast<SCTAB>(nTable) );
+ if (bCopySheet)
+ {
+ //! separate method AddStyleFromText needed?
+ //! cache sheet object
+
+ uno::Reference<table::XCellRange> xCellRange(xIndex->getByIndex(nTable), uno::UNO_QUERY);
+ uno::Reference<text::XSimpleText> xCellText(xCellRange->getCellByPosition(aPos.Col(), aPos.Row()), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xCursorProp(xCellText->createTextCursor(), uno::UNO_QUERY);
+ ScCellTextCursor* pCursor = ScCellTextCursor::getImplementation( xCursorProp );
+ if (pCursor)
+ {
+ pCursor->SetSelection( aTextIter->maSelection );
- std::vector<XMLPropertyState> xPropStates(xTextPropMapper->Filter(xCursorProp));
- rtl::OUString sParent;
- rtl::OUString sName( aTextIter->maName );
- GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_TEXT, sParent, xPropStates);
- GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_TEXT, sName);
- }
- }
- ++aTextIter;
- }
+ std::vector<XMLPropertyState> xPropStates(xTextPropMapper->Filter(xCursorProp));
+ rtl::OUString sParent;
+ rtl::OUString sName( aTextIter->maName );
+ GetAutoStylePool()->AddNamed(sName, XML_STYLE_FAMILY_TEXT_TEXT, sParent, xPropStates);
+ GetAutoStylePool()->RegisterName(XML_STYLE_FAMILY_TEXT_TEXT, sName);
}
+ }
+ ++aTextIter;
+ }
+ }
- ExportExternalRefCacheStyles();
+ ExportExternalRefCacheStyles();
- if (!pSharedData)
+ if (!pSharedData)
+ {
+ sal_Int32 nTableCount(0);
+ sal_Int32 nShapesCount(0);
+ sal_Int32 nCellCount(pDoc ? pDoc->GetCellCount() : 0);
+ CollectSharedData(nTableCount, nShapesCount, nCellCount);
+ //DBG_ERROR("no shared data setted");
+ }
+ sal_Int32 nTableCount(xIndex->getCount());
+ pCellStyles->AddNewTable(nTableCount - 1);
+ CollectShapesAutoStyles(nTableCount);
+ for (sal_Int32 nTable = 0; nTable < nTableCount; ++nTable)
+ {
+ bool bUseStream = pSheetData && pDoc && pDoc->IsStreamValid((SCTAB)nTable) &&
+ pSheetData->HasStreamPos(nTable) && xSourceStream.is();
+
+ uno::Reference <sheet::XSpreadsheet> xTable(xIndex->getByIndex(nTable), uno::UNO_QUERY);
+ if (xTable.is())
+ {
+ // table styles array must be complete, including copied tables - Add should find the stored style
+ uno::Reference<beans::XPropertySet> xTableProperties(xTable, uno::UNO_QUERY);
+ if (xTableProperties.is())
+ {
+ std::vector<XMLPropertyState> xPropStates(xTableStylesExportPropertySetMapper->Filter(xTableProperties));
+ if(xPropStates.size())
{
- sal_Int32 nTableCount(0);
- sal_Int32 nShapesCount(0);
- sal_Int32 nCellCount(pDoc ? pDoc->GetCellCount() : 0);
- CollectSharedData(nTableCount, nShapesCount, nCellCount);
- //DBG_ERROR("no shared data setted");
+ rtl::OUString sParent;
+ rtl::OUString sName;
+ GetAutoStylePool()->Add(sName, XML_STYLE_FAMILY_TABLE_TABLE, sParent, xPropStates);
+ aTableStyles.push_back(sName);
}
- sal_Int32 nTableCount(xIndex->getCount());
- pCellStyles->AddNewTable(nTableCount - 1);
- CollectShapesAutoStyles(nTableCount);
- for (sal_Int32 nTable = 0; nTable < nTableCount; ++nTable)
+ }
+ }
+ // collect other auto-styles only for non-copied sheets
+ if (xTable.is() && !bUseStream)
+ {
+ uno::Reference<sheet::XUniqueCellFormatRangesSupplier> xCellFormatRanges ( xTable, uno::UNO_QUERY );
+ if ( xCellFormatRanges.is() )
+ {
+ uno::Reference<container::XIndexAccess> xFormatRangesIndex(xCellFormatRanges->getUniqueCellFormatRanges());
+ if (xFormatRangesIndex.is())
{
- bool bUseStream = pSheetData && pDoc && pDoc->IsStreamValid((SCTAB)nTable) &&
- pSheetData->HasStreamPos(nTable) && xSourceStream.is();
-
- uno::Reference <sheet::XSpreadsheet> xTable(xIndex->getByIndex(nTable), uno::UNO_QUERY);
- if (xTable.is())
+ sal_Int32 nFormatRangesCount(xFormatRangesIndex->getCount());
+ GetProgressBarHelper()->ChangeReference(GetProgressBarHelper()->GetReference() + nFormatRangesCount);
+ for (sal_Int32 nFormatRange = 0; nFormatRange < nFormatRangesCount; ++nFormatRange)
{
- // table styles array must be complete, including copied tables - Add should find the stored style
- uno::Reference<beans::XPropertySet> xTableProperties(xTable, uno::UNO_QUERY);
- if (xTableProperties.is())
+ uno::Reference< sheet::XSheetCellRanges> xCellRanges(xFormatRangesIndex->getByIndex(nFormatRange), uno::UNO_QUERY);
+ if (xCellRanges.is())
{
- std::vector<XMLPropertyState> xPropStates(xTableStylesExportPropertySetMapper->Filter(xTableProperties));
- if(xPropStates.size())
+ uno::Reference <beans::XPropertySet> xProperties (xCellRanges, uno::UNO_QUERY);
+ if (xProperties.is())
{
- rtl::OUString sParent;
- rtl::OUString sName;
- GetAutoStylePool()->Add(sName, XML_STYLE_FAMILY_TABLE_TABLE, sParent, xPropStates);
- aTableStyles.push_back(sName);
+ AddStyleFromCells(xProperties, xTable, nTable, NULL);
+ IncrementProgressBar(sal_False);
}
}
}
- // collect other auto-styles only for non-copied sheets
- if (xTable.is() && !bUseStream)
+ }
+ }
+ uno::Reference<table::XColumnRowRange> xColumnRowRange (xTable, uno::UNO_QUERY);
+ if (xColumnRowRange.is())
+ {
+ if (pDoc)
+ {
+ pDoc->SyncColRowFlags();
+ uno::Reference<table::XTableColumns> xTableColumns(xColumnRowRange->getColumns());
+ if (xTableColumns.is())
{
- uno::Reference<sheet::XUniqueCellFormatRangesSupplier> xCellFormatRanges ( xTable, uno::UNO_QUERY );
- if ( xCellFormatRanges.is() )
+ sal_Int32 nColumns(pDoc->GetLastChangedCol(sal::static_int_cast<SCTAB>(nTable)));
+ pSharedData->SetLastColumn(nTable, nColumns);
+ table::CellRangeAddress aCellAddress(GetEndAddress(xTable, nTable));
+ if (aCellAddress.EndColumn > nColumns)
{
- uno::Reference<container::XIndexAccess> xFormatRangesIndex(xCellFormatRanges->getUniqueCellFormatRanges());
- if (xFormatRangesIndex.is())
- {
- sal_Int32 nFormatRangesCount(xFormatRangesIndex->getCount());
- GetProgressBarHelper()->ChangeReference(GetProgressBarHelper()->GetReference() + nFormatRangesCount);
- for (sal_Int32 nFormatRange = 0; nFormatRange < nFormatRangesCount; ++nFormatRange)
- {
- uno::Reference< sheet::XSheetCellRanges> xCellRanges(xFormatRangesIndex->getByIndex(nFormatRange), uno::UNO_QUERY);
- if (xCellRanges.is())
- {
- uno::Reference <beans::XPropertySet> xProperties (xCellRanges, uno::UNO_QUERY);
- if (xProperties.is())
- {
- AddStyleFromCells(xProperties, xTable, nTable, NULL);
- IncrementProgressBar(sal_False);
- }
- }
- }
- }
+ ++nColumns;
+ pColumnStyles->AddNewTable(nTable, aCellAddress.EndColumn);
}
- uno::Reference<table::XColumnRowRange> xColumnRowRange (xTable, uno::UNO_QUERY);
- if (xColumnRowRange.is())
+// else if (nColumns < MAXCOL)
+// pColumnStyles->AddNewTable(nTable, ++nColumns);
+ else
+ pColumnStyles->AddNewTable(nTable, nColumns);
+ sal_Int32 nColumn = 0;
+ while (/*nColumn <= nColumns && */nColumn <= MAXCOL)
{
- if (pDoc)
+ sal_Int32 nIndex(-1);
+ sal_Bool bIsVisible(sal_True);
+ uno::Reference <beans::XPropertySet> xColumnProperties(xTableColumns->getByIndex(nColumn), uno::UNO_QUERY);
+ if (xColumnProperties.is())
{
- uno::Reference<table::XTableColumns> xTableColumns(xColumnRowRange->getColumns());
- if (xTableColumns.is())
- {
- sal_Int32 nColumns(pDoc->GetLastChangedCol(sal::static_int_cast<SCTAB>(nTable)));
- pSharedData->SetLastColumn(nTable, nColumns);
- table::CellRangeAddress aCellAddress(GetEndAddress(xTable, nTable));
- if (aCellAddress.EndColumn > nColumns)
- {
- ++nColumns;
- pColumnStyles->AddNewTable(nTable, aCellAddress.EndColumn);
- }
- // else if (nColumns < MAXCOL)
- // pColumnStyles->AddNewTable(nTable, ++nColumns);
- else
- pColumnStyles->AddNewTable(nTable, nColumns);
- sal_Int32 nColumn = 0;
- while (/*nColumn <= nColumns && */nColumn <= MAXCOL)
- {
- sal_Int32 nIndex(-1);
- sal_Bool bIsVisible(sal_True);
- uno::Reference <beans::XPropertySet> xColumnProperties(xTableColumns->getByIndex(nColumn), uno::UNO_QUERY);
- if (xColumnProperties.is())
- {
- AddStyleFromColumn( xColumnProperties, NULL, nIndex, bIsVisible );
- //if(xPropStates.size())
- pColumnStyles->AddFieldStyleName(nTable, nColumn, nIndex, bIsVisible);
- }
- sal_Int32 nOld(nColumn);
- nColumn = pDoc->GetNextDifferentChangedCol(sal::static_int_cast<SCTAB>(nTable), static_cast<USHORT>(nColumn));
- for (sal_Int32 i = nOld + 1; i < nColumn; ++i)
- pColumnStyles->AddFieldStyleName(nTable, i, nIndex, bIsVisible);
- }
- if (aCellAddress.EndColumn > nColumns)
- {
- sal_Bool bIsVisible(sal_True);
- sal_Int32 nIndex(pColumnStyles->GetStyleNameIndex(nTable, nColumns, bIsVisible));
- for (sal_Int32 i = nColumns + 1; i <= aCellAddress.EndColumn; ++i)
- pColumnStyles->AddFieldStyleName(nTable, i, nIndex, bIsVisible);
- }
- }
- uno::Reference<table::XTableRows> xTableRows(xColumnRowRange->getRows());
- if (xTableRows.is())
- {
- sal_Int32 nRows(pDoc->GetLastChangedRow(sal::static_int_cast<SCTAB>(nTable)));
- pSharedData->SetLastRow(nTable, nRows);
- table::CellRangeAddress aCellAddress(GetEndAddress(xTable, nTable));
- if (aCellAddress.EndRow > nRows)
- {
- ++nRows;
- pRowStyles->AddNewTable(nTable, aCellAddress.EndRow);
- }
- // else if (nRows < MAXROW)
- // pRowStyles->AddNewTable(nTable, ++nRows);
- else
- pRowStyles->AddNewTable(nTable, nRows);
- sal_Int32 nRow = 0;
- while ( /*nRow <= nRows && */nRow <= MAXROW)
- {
- sal_Int32 nIndex = 0;
- uno::Reference <beans::XPropertySet> xRowProperties(xTableRows->getByIndex(nRow), uno::UNO_QUERY);
- if(xRowProperties.is())
- {
- AddStyleFromRow( xRowProperties, NULL, nIndex );
- //if(xPropStates.size())
- pRowStyles->AddFieldStyleName(nTable, nRow, nIndex);
- }
- sal_Int32 nOld(nRow);
- nRow = pDoc->GetNextDifferentChangedRow(sal::static_int_cast<SCTAB>(nTable), static_cast<USHORT>(nRow), false);
- for (sal_Int32 i = nOld + 1; i < nRow; ++i)
- pRowStyles->AddFieldStyleName(nTable, i, nIndex);
- }
- if (aCellAddress.EndRow > nRows)
- {
- sal_Int32 nIndex(pRowStyles->GetStyleNameIndex(nTable, nRows));
- for (sal_Int32 i = nRows + 1; i <= aCellAddress.EndRow; ++i)
- pRowStyles->AddFieldStyleName(nTable, i, nIndex);
- }
- }
+ AddStyleFromColumn( xColumnProperties, NULL, nIndex, bIsVisible );
+ //if(xPropStates.size())
+ pColumnStyles->AddFieldStyleName(nTable, nColumn, nIndex, bIsVisible);
}
+ sal_Int32 nOld(nColumn);
+ nColumn = pDoc->GetNextDifferentChangedCol(sal::static_int_cast<SCTAB>(nTable), static_cast<SCCOL>(nColumn));
+ for (sal_Int32 i = nOld + 1; i < nColumn; ++i)
+ pColumnStyles->AddFieldStyleName(nTable, i, nIndex, bIsVisible);
+ }
+ if (aCellAddress.EndColumn > nColumns)
+ {
+ sal_Bool bIsVisible(sal_True);
+ sal_Int32 nIndex(pColumnStyles->GetStyleNameIndex(nTable, nColumns, bIsVisible));
+ for (sal_Int32 i = nColumns + 1; i <= aCellAddress.EndColumn; ++i)
+ pColumnStyles->AddFieldStyleName(nTable, i, nIndex, bIsVisible);
}
- uno::Reference<sheet::XCellRangesQuery> xCellRangesQuery (xTable, uno::UNO_QUERY);
- if (xCellRangesQuery.is())
+ }
+ uno::Reference<table::XTableRows> xTableRows(xColumnRowRange->getRows());
+ if (xTableRows.is())
+ {
+ sal_Int32 nRows(pDoc->GetLastChangedRow(sal::static_int_cast<SCTAB>(nTable)));
+ pSharedData->SetLastRow(nTable, nRows);
+ table::CellRangeAddress aCellAddress(GetEndAddress(xTable, nTable));
+ if (aCellAddress.EndRow > nRows)
+ {
+ ++nRows;
+ pRowStyles->AddNewTable(nTable, aCellAddress.EndRow);
+ }
+// else if (nRows < MAXROW)
+// pRowStyles->AddNewTable(nTable, ++nRows);
+ else
+ pRowStyles->AddNewTable(nTable, nRows);
+ sal_Int32 nRow = 0;
+ while (nRow <= nRows && nRow <= MAXROW)
{
- uno::Reference<sheet::XSheetCellRanges> xSheetCellRanges(xCellRangesQuery->queryContentCells(sheet::CellFlags::FORMATTED));
- uno::Reference<sheet::XSheetOperation> xSheetOperation(xSheetCellRanges, uno::UNO_QUERY);
- if (xSheetCellRanges.is() && xSheetOperation.is())
+ sal_Int32 nIndex = 0;
+ uno::Reference <beans::XPropertySet> xRowProperties(xTableRows->getByIndex(nRow), uno::UNO_QUERY);
+ if(xRowProperties.is())
{
- sal_uInt32 nCount(sal_uInt32(xSheetOperation->computeFunction(sheet::GeneralFunction_COUNT)));
- uno::Reference<container::XEnumerationAccess> xCellsAccess(xSheetCellRanges->getCells());
- if (xCellsAccess.is())
- {
- GetProgressBarHelper()->ChangeReference(GetProgressBarHelper()->GetReference() + nCount);
- uno::Reference<container::XEnumeration> xCells(xCellsAccess->createEnumeration());
- if (xCells.is())
- {
- sal_uInt32 nCount2(0);
- while (xCells->hasMoreElements())
- {
- uno::Reference<text::XText> xText(xCells->nextElement(), uno::UNO_QUERY);
- if (xText.is())
- GetTextParagraphExport()->collectTextAutoStyles(xText, sal_False, sal_False);
- ++nCount2;
- IncrementProgressBar(sal_False);
- }
- if(nCount2 > nCount)
- GetProgressBarHelper()->SetReference(GetProgressBarHelper()->GetReference() + nCount2 - nCount);
- }
- }
+ AddStyleFromRow( xRowProperties, NULL, nIndex );
+ //if(xPropStates.size())
+ pRowStyles->AddFieldStyleName(nTable, nRow, nIndex);
}
+ sal_Int32 nOld(nRow);
+ nRow = pDoc->GetNextDifferentChangedRow(sal::static_int_cast<SCTAB>(nTable), static_cast<SCROW>(nRow), false);
+ for (sal_Int32 i = nOld + 1; i < nRow; ++i)
+ pRowStyles->AddFieldStyleName(nTable, i, nIndex);
+ }
+ if (aCellAddress.EndRow > nRows)
+ {
+ sal_Int32 nIndex(pRowStyles->GetStyleNameIndex(nTable, nRows));
+ for (sal_Int32 i = nRows + 1; i <= aCellAddress.EndRow; ++i)
+ pRowStyles->AddFieldStyleName(nTable, i, nIndex);
}
}
- IncrementProgressBar(sal_False);
}
- pChangeTrackingExportHelper->CollectAutoStyles();
-
- GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_COLUMN,
- GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
- GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_ROW,
- GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
- GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_TABLE,
- GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
- exportAutoDataStyles();
- GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_CELL,
- GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
-
- GetShapeExport()->exportAutoStyles();
- GetFormExport()->exportAutoStyles( );
-
- if (pDoc)
+ }
+ uno::Reference<sheet::XCellRangesQuery> xCellRangesQuery (xTable, uno::UNO_QUERY);
+ if (xCellRangesQuery.is())
+ {
+ uno::Reference<sheet::XSheetCellRanges> xSheetCellRanges(xCellRangesQuery->queryContentCells(sheet::CellFlags::FORMATTED));
+ uno::Reference<sheet::XSheetOperation> xSheetOperation(xSheetCellRanges, uno::UNO_QUERY);
+ if (xSheetCellRanges.is() && xSheetOperation.is())
{
- ScExternalRefManager* pRefMgr = pDoc->GetExternalRefManager();
- // #i100879# write the table style for cached tables only if there are cached tables
- // (same logic as in ExportExternalRefCacheStyles)
- if (pRefMgr->hasExternalData())
+ sal_uInt32 nCount(sal_uInt32(xSheetOperation->computeFunction(sheet::GeneralFunction_COUNT)));
+ uno::Reference<container::XEnumerationAccess> xCellsAccess(xSheetCellRanges->getCells());
+ if (xCellsAccess.is())
{
- // Special table style for the external ref cache tables.
- AddAttribute(XML_NAMESPACE_STYLE, XML_NAME, sExternalRefTabStyleName);
- AddAttribute(XML_NAMESPACE_STYLE, XML_FAMILY, XML_TABLE);
- SvXMLElementExport aElemStyle(*this, XML_NAMESPACE_STYLE, XML_STYLE, sal_True, sal_True);
- AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY, XML_FALSE);
- SvXMLElementExport aElemStyleTabProps(*this, XML_NAMESPACE_STYLE, XML_TABLE_PROPERTIES, sal_True, sal_True);
+ GetProgressBarHelper()->ChangeReference(GetProgressBarHelper()->GetReference() + nCount);
+ uno::Reference<container::XEnumeration> xCells(xCellsAccess->createEnumeration());
+ if (xCells.is())
+ {
+ sal_uInt32 nCount2(0);
+ while (xCells->hasMoreElements())
+ {
+ uno::Reference<text::XText> xText(xCells->nextElement(), uno::UNO_QUERY);
+ if (xText.is())
+ GetTextParagraphExport()->collectTextAutoStyles(xText, sal_False, sal_False);
+ ++nCount2;
+ IncrementProgressBar(sal_False);
+ }
+ if(nCount2 > nCount)
+ GetProgressBarHelper()->SetReference(GetProgressBarHelper()->GetReference() + nCount2 - nCount);
+ }
}
}
}
- if (getExportFlags() & EXPORT_MASTERSTYLES)
- {
- GetPageExport()->collectAutoStyles(sal_True);
- GetPageExport()->exportAutoStyles();
- }
+ }
+ IncrementProgressBar(sal_False);
+ }
+ pChangeTrackingExportHelper->CollectAutoStyles();
- // #i30251#; only write Text Styles once
+ GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_COLUMN,
+ GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
+ GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_ROW,
+ GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
+ GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_TABLE,
+ GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
+ exportAutoDataStyles();
+ GetAutoStylePool()->exportXML(XML_STYLE_FAMILY_TABLE_CELL,
+ GetDocHandler(), GetMM100UnitConverter(), GetNamespaceMap());
- if ((getExportFlags() & EXPORT_CONTENT) || (getExportFlags() & EXPORT_MASTERSTYLES))
- GetTextParagraphExport()->exportTextAutoStyles();
+ GetShapeExport()->exportAutoStyles();
+ GetFormExport()->exportAutoStyles( );
+
+ if (pDoc)
+ {
+ ScExternalRefManager* pRefMgr = pDoc->GetExternalRefManager();
+ // #i100879# write the table style for cached tables only if there are cached tables
+ // (same logic as in ExportExternalRefCacheStyles)
+ if (pRefMgr->hasExternalData())
+ {
+ // Special table style for the external ref cache tables.
+ AddAttribute(XML_NAMESPACE_STYLE, XML_NAME, sExternalRefTabStyleName);
+ AddAttribute(XML_NAMESPACE_STYLE, XML_FAMILY, XML_TABLE);
+ SvXMLElementExport aElemStyle(*this, XML_NAMESPACE_STYLE, XML_STYLE, sal_True, sal_True);
+ AddAttribute(XML_NAMESPACE_TABLE, XML_DISPLAY, XML_FALSE);
+ SvXMLElementExport aElemStyleTabProps(*this, XML_NAMESPACE_STYLE, XML_TABLE_PROPERTIES, sal_True, sal_True);
}
}
}
+
+ if (getExportFlags() & EXPORT_MASTERSTYLES)
+ {
+ GetPageExport()->collectAutoStyles(sal_True);
+ GetPageExport()->exportAutoStyles();
+ }
+
+ // #i30251#; only write Text Styles once
+
+ if ((getExportFlags() & EXPORT_CONTENT) || (getExportFlags() & EXPORT_MASTERSTYLES))
+ GetTextParagraphExport()->exportTextAutoStyles();
}
void ScXMLExport::_ExportMasterStyles()
@@ -3064,32 +3080,69 @@ void ScXMLExport::ExportShape(const uno::Reference < drawing::XShape >& xShape,
if ( sCLSID.equalsIgnoreAsciiCase(GetChartExport()->getChartCLSID()) )
{
// we have a chart
- uno::Reference< frame::XModel > xChartModel;
- if( ( xShapeProps->getPropertyValue( sPropModel ) >>= xChartModel ) &&
- xChartModel.is())
+ ::rtl::OUString sRanges;
+ if ( pDoc )
+ {
+ ::rtl::OUString aChartName;
+ xShapeProps->getPropertyValue( sPersistName ) >>= aChartName;
+ ScRange aEmptyRange;
+ ScChartListener aSearcher( aChartName, pDoc, aEmptyRange );
+ USHORT nIndex = 0;
+ ScChartListenerCollection* pCollection = pDoc->GetChartListenerCollection();
+ if ( pCollection && pCollection->Search( &aSearcher, nIndex ) )
+ {
+ ScChartListener* pListener = static_cast< ScChartListener* >( pCollection->At( nIndex ) );
+ if ( pListener )
+ {
+ const ScRangeListRef& rRangeList = pListener->GetRangeList();
+ if ( rRangeList.Is() )
+ {
+ ScRangeStringConverter::GetStringFromRangeList( sRanges, rRangeList, pDoc, FormulaGrammar::CONV_OOO );
+ if ( sRanges.getLength() > 0 )
+ {
+ bIsChart = true;
+ SvXMLAttributeList* pAttrList = new SvXMLAttributeList();
+ if ( pAttrList )
+ {
+ pAttrList->AddAttribute(
+ GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_DRAW, GetXMLToken( XML_NOTIFY_ON_UPDATE_OF_RANGES ) ), sRanges );
+ }
+ GetShapeExport()->exportShape( xShape, SEF_EXPORT_NO_CHART_DATA | SEF_DEFAULT, pPoint, pAttrList );
+ }
+ }
+ }
+ }
+ }
+
+ if ( sRanges.getLength() == 0 )
{
- uno::Reference< chart2::XChartDocument > xChartDoc( xChartModel, uno::UNO_QUERY );
- uno::Reference< chart2::data::XDataReceiver > xReceiver( xChartModel, uno::UNO_QUERY );
- if( xChartDoc.is() && xReceiver.is() &&
- ! xChartDoc->hasInternalDataProvider())
+ uno::Reference< frame::XModel > xChartModel;
+ if( ( xShapeProps->getPropertyValue( sPropModel ) >>= xChartModel ) &&
+ xChartModel.is())
{
- // we have a chart that gets its data from Calc
- bIsChart = true;
- uno::Sequence< ::rtl::OUString > aRepresentations(
- xReceiver->getUsedRangeRepresentations());
- SvXMLAttributeList* pAttrList = 0;
- if(aRepresentations.getLength())
+ uno::Reference< chart2::XChartDocument > xChartDoc( xChartModel, uno::UNO_QUERY );
+ uno::Reference< chart2::data::XDataReceiver > xReceiver( xChartModel, uno::UNO_QUERY );
+ if( xChartDoc.is() && xReceiver.is() &&
+ ! xChartDoc->hasInternalDataProvider())
{
- // add the ranges used by the chart to the shape
- // element to be able to start listening after
- // load (when the chart is not yet loaded)
- uno::Reference< chart2::data::XRangeXMLConversion > xRangeConverter( xChartDoc->getDataProvider(), uno::UNO_QUERY );
- ::rtl::OUString sRanges( lcl_RangeSequenceToString( aRepresentations, xRangeConverter ));
- pAttrList = new SvXMLAttributeList();
- pAttrList->AddAttribute(
- GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_DRAW, GetXMLToken(XML_NOTIFY_ON_UPDATE_OF_RANGES) ), sRanges );
+ // we have a chart that gets its data from Calc
+ bIsChart = true;
+ uno::Sequence< ::rtl::OUString > aRepresentations(
+ xReceiver->getUsedRangeRepresentations());
+ SvXMLAttributeList* pAttrList = 0;
+ if(aRepresentations.getLength())
+ {
+ // add the ranges used by the chart to the shape
+ // element to be able to start listening after
+ // load (when the chart is not yet loaded)
+ uno::Reference< chart2::data::XRangeXMLConversion > xRangeConverter( xChartDoc->getDataProvider(), uno::UNO_QUERY );
+ sRanges = lcl_RangeSequenceToString( aRepresentations, xRangeConverter );
+ pAttrList = new SvXMLAttributeList();
+ pAttrList->AddAttribute(
+ GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_DRAW, GetXMLToken(XML_NOTIFY_ON_UPDATE_OF_RANGES) ), sRanges );
+ }
+ GetShapeExport()->exportShape(xShape, SEF_EXPORT_NO_CHART_DATA | SEF_DEFAULT, pPoint, pAttrList);
}
- GetShapeExport()->exportShape(xShape, SEF_EXPORT_NO_CHART_DATA | SEF_DEFAULT, pPoint, pAttrList);
}
}
@@ -4263,6 +4316,9 @@ void ScXMLExport::GetViewSettings(uno::Sequence<beans::PropertyValue>& rProps)
GetChangeTrackViewSettings(rProps);
}
+
+
+
void ScXMLExport::GetConfigurationSettings(uno::Sequence<beans::PropertyValue>& rProps)
{
if (GetModel().is())
@@ -4273,16 +4329,41 @@ void ScXMLExport::GetConfigurationSettings(uno::Sequence<beans::PropertyValue>&
uno::Reference <beans::XPropertySet> xProperties(xMultiServiceFactory->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.SpreadsheetSettings"))), uno::UNO_QUERY);
if (xProperties.is())
SvXMLUnitConverter::convertPropertySet(rProps, xProperties);
+
+ sal_Int32 nPropsToAdd = 0;
+ rtl::OUStringBuffer aTrackedChangesKey;
if (GetDocument() && GetDocument()->GetChangeTrack() && GetDocument()->GetChangeTrack()->IsProtected())
{
- rtl::OUStringBuffer aBuffer;
- SvXMLUnitConverter::encodeBase64(aBuffer, GetDocument()->GetChangeTrack()->GetProtection());
- if (aBuffer.getLength())
+ SvXMLUnitConverter::encodeBase64(aTrackedChangesKey, GetDocument()->GetChangeTrack()->GetProtection());
+ if (aTrackedChangesKey.getLength())
+ ++nPropsToAdd;
+ }
+
+ uno::Reference <container::XNameAccess> xCodeNameAccess;
+ DBG_ASSERT( pDoc, "ScXMLExport::GetConfigurationSettings - no ScDocument!" );
+ if( pDoc )
+ {
+ xCodeNameAccess = new XMLCodeNameProvider( pDoc );
+ if( xCodeNameAccess.is() && xCodeNameAccess->hasElements() )
+ ++nPropsToAdd;
+ else
+ xCodeNameAccess = 0;
+ }
+
+ if( nPropsToAdd > 0 )
+ {
+ sal_Int32 nCount(rProps.getLength());
+ rProps.realloc(nCount + nPropsToAdd);
+ if (aTrackedChangesKey.getLength())
{
- sal_Int32 nCount(rProps.getLength());
- rProps.realloc(nCount + 1);
rProps[nCount].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TrackedChangesProtectionKey"));
- rProps[nCount].Value <<= aBuffer.makeStringAndClear();
+ rProps[nCount].Value <<= aTrackedChangesKey.makeStringAndClear();
+ ++nCount;
+ }
+ if( xCodeNameAccess.is() )
+ {
+ rProps[nCount].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ScriptConfiguration"));
+ rProps[nCount].Value <<= xCodeNameAccess;
}
}
}
@@ -4370,6 +4451,22 @@ sal_uInt32 ScXMLExport::exportDoc( enum XMLTokenEnum eClass )
CollectUserDefinedNamespaces(&pDrawLayer->GetItemPool(), EE_CHAR_XMLATTRIBS);
CollectUserDefinedNamespaces(&pDrawLayer->GetItemPool(), SDRATTR_XMLATTRIBUTES);
}
+
+ // sheet events use officeooo namespace
+ if( (getExportFlags() & EXPORT_CONTENT) != 0 &&
+ getDefaultVersion() == SvtSaveOptions::ODFVER_LATEST )
+ {
+ bool bAnySheetEvents = false;
+ SCTAB nTabCount = pDoc->GetTableCount();
+ for (SCTAB nTab=0; nTab<nTabCount; ++nTab)
+ if (pDoc->GetSheetEvents(nTab))
+ bAnySheetEvents = true;
+ if (bAnySheetEvents)
+ _GetNamespaceMap().Add(
+ GetXMLToken( XML_NP_OFFICE_EXT ),
+ GetXMLToken( XML_N_OFFICE_EXT ),
+ XML_NAMESPACE_OFFICE_EXT );
+ }
}
}
return SvXMLExport::exportDoc( eClass );
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 69c7144191d6..269e1dd9a7e4 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -645,6 +645,8 @@ const SvXMLTokenMap& ScXMLImport::GetTableElemTokenMap()
{ XML_NAMESPACE_TABLE, XML_SCENARIO, XML_TOK_TABLE_SCENARIO },
{ XML_NAMESPACE_TABLE, XML_SHAPES, XML_TOK_TABLE_SHAPES },
{ XML_NAMESPACE_OFFICE, XML_FORMS, XML_TOK_TABLE_FORMS },
+ { XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS, XML_TOK_TABLE_EVENT_LISTENERS },
+ { XML_NAMESPACE_OFFICE_EXT, XML_EVENT_LISTENERS, XML_TOK_TABLE_EVENT_LISTENERS_EXT },
XML_TOKEN_MAP_END
};
@@ -698,12 +700,12 @@ const SvXMLTokenMap& ScXMLImport::GetTableAttrTokenMap()
{
static __FAR_DATA SvXMLTokenMapEntry aTableAttrTokenMap[] =
{
- { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_TABLE_NAME },
- { XML_NAMESPACE_TABLE, XML_STYLE_NAME, XML_TOK_TABLE_STYLE_NAME },
- { XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TOK_TABLE_PROTECTION },
- { XML_NAMESPACE_TABLE, XML_PRINT_RANGES, XML_TOK_TABLE_PRINT_RANGES },
- { XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, XML_TOK_TABLE_PASSWORD },
- { XML_NAMESPACE_TABLE, XML_PRINT, XML_TOK_TABLE_PRINT },
+ { XML_NAMESPACE_TABLE, XML_NAME, XML_TOK_TABLE_NAME },
+ { XML_NAMESPACE_TABLE, XML_STYLE_NAME, XML_TOK_TABLE_STYLE_NAME },
+ { XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TOK_TABLE_PROTECTION },
+ { XML_NAMESPACE_TABLE, XML_PRINT_RANGES, XML_TOK_TABLE_PRINT_RANGES },
+ { XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, XML_TOK_TABLE_PASSWORD },
+ { XML_NAMESPACE_TABLE, XML_PRINT, XML_TOK_TABLE_PRINT },
XML_TOKEN_MAP_END
};
@@ -2216,10 +2218,11 @@ void ScXMLImport::SetConfigurationSettings(const uno::Sequence<beans::PropertyVa
if (xMultiServiceFactory.is())
{
sal_Int32 nCount(aConfigProps.getLength());
- rtl::OUString sName(RTL_CONSTASCII_USTRINGPARAM("TrackedChangesProtectionKey"));
+ rtl::OUString sCTName(RTL_CONSTASCII_USTRINGPARAM("TrackedChangesProtectionKey"));
+ rtl::OUString sSCName(RTL_CONSTASCII_USTRINGPARAM("ScriptConfiguration"));
for (sal_Int32 i = nCount - 1; i >= 0; --i)
{
- if (aConfigProps[i].Name == sName)
+ if (aConfigProps[i].Name == sCTName)
{
rtl::OUString sKey;
if (aConfigProps[i].Value >>= sKey)
@@ -2240,6 +2243,28 @@ void ScXMLImport::SetConfigurationSettings(const uno::Sequence<beans::PropertyVa
}
}
}
+ else if (aConfigProps[i].Name == sSCName)
+ {
+ uno::Type aType = aConfigProps[i].Value.getValueType();
+ uno::Reference<beans::XPropertySet> xImportInfo =
+ getImportInfo();
+
+ if (xImportInfo.is() &&
+ (aType.equals(getCppuType(
+ (uno::Reference<container::XNameContainer> *)0 ) ) ||
+ aType.equals(getCppuType(
+ (uno::Reference<container::XNameAccess> *)0 ) ) ) )
+ {
+ uno::Reference< beans::XPropertySetInfo > xPropertySetInfo =
+ xImportInfo->getPropertySetInfo();
+ if (xPropertySetInfo.is() &&
+ xPropertySetInfo->hasPropertyByName(sSCName) )
+ {
+ xImportInfo->setPropertyValue(sSCName,
+ aConfigProps[i].Value );
+ }
+ }
+ }
}
uno::Reference <uno::XInterface> xInterface = xMultiServiceFactory->createInstance(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.SpreadsheetSettings")));
uno::Reference <beans::XPropertySet> xProperties(xInterface, uno::UNO_QUERY);
diff --git a/sc/source/filter/xml/xmlimprt.hxx b/sc/source/filter/xml/xmlimprt.hxx
index e2cea5ae9609..9771655ebd4b 100644
--- a/sc/source/filter/xml/xmlimprt.hxx
+++ b/sc/source/filter/xml/xmlimprt.hxx
@@ -174,7 +174,9 @@ enum ScXMLTableTokens
XML_TOK_TABLE_SOURCE,
XML_TOK_TABLE_SCENARIO,
XML_TOK_TABLE_SHAPES,
- XML_TOK_TABLE_FORMS
+ XML_TOK_TABLE_FORMS,
+ XML_TOK_TABLE_EVENT_LISTENERS,
+ XML_TOK_TABLE_EVENT_LISTENERS_EXT
};
enum ScXMLTableRowsTokens
diff --git a/sc/source/filter/xml/xmlstyle.cxx b/sc/source/filter/xml/xmlstyle.cxx
index 733a11c9a1da..4127f5246428 100644
--- a/sc/source/filter/xml/xmlstyle.cxx
+++ b/sc/source/filter/xml/xmlstyle.cxx
@@ -66,6 +66,7 @@ using namespace ::formula;
using ::rtl::OUString;
#define MAP(name,prefix,token,type,context) { name, sizeof(name)-1, prefix, token, type, context, SvtSaveOptions::ODFVER_010 }
+#define MAP_EXT(name,prefix,token,type,context) { name, sizeof(name)-1, prefix, token, type, context, SvtSaveOptions::ODFVER_LATEST }
#define MAP_END() { NULL, 0, 0, XML_TOKEN_INVALID, 0, 0, SvtSaveOptions::ODFVER_010 }
const XMLPropertyMapEntry aXMLScCellStylesProperties[] =
@@ -161,6 +162,8 @@ const XMLPropertyMapEntry aXMLScTableStylesImportProperties[] =
MAP( "IsVisible", XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TYPE_PROP_TABLE|XML_TYPE_BOOL, 0 ),
MAP( "PageStyle", XML_NAMESPACE_STYLE, XML_MASTER_PAGE_NAME, XML_TYPE_PROP_TABLE|XML_TYPE_STRING|MID_FLAG_SPECIAL_ITEM, CTF_SC_MASTERPAGENAME ),
MAP( "TableLayout", XML_NAMESPACE_STYLE, XML_WRITING_MODE, XML_TYPE_PROP_TABLE|XML_TYPE_TEXT_WRITING_MODE, 0 ),
+ MAP( "TabColor", XML_NAMESPACE_TABLE, XML_TAB_COLOR, XML_TYPE_PROP_TABLE|XML_TYPE_COLORAUTO, 0 ),
+ MAP_EXT( "TabColor", XML_NAMESPACE_TABLE_EXT, XML_TAB_COLOR, XML_TYPE_PROP_TABLE|XML_TYPE_COLORAUTO, 0 ),
MAP_END()
};
@@ -169,6 +172,7 @@ const XMLPropertyMapEntry aXMLScTableStylesProperties[] =
MAP( "IsVisible", XML_NAMESPACE_TABLE, XML_DISPLAY, XML_TYPE_PROP_TABLE|XML_TYPE_BOOL, 0 ),
MAP( "PageStyle", XML_NAMESPACE_STYLE, XML_MASTER_PAGE_NAME, XML_TYPE_PROP_TABLE|XML_TYPE_STRING|MID_FLAG_SPECIAL_ITEM, CTF_SC_MASTERPAGENAME ),
MAP( "TableLayout", XML_NAMESPACE_STYLE, XML_WRITING_MODE, XML_TYPE_PROP_TABLE|XML_TYPE_TEXT_WRITING_MODE, 0 ),
+ MAP_EXT( "TabColor", XML_NAMESPACE_TABLE_EXT, XML_TAB_COLOR, XML_TYPE_PROP_TABLE|XML_TYPE_COLORAUTO, 0 ),
MAP_END()
};
diff --git a/sc/source/filter/xml/xmltabi.cxx b/sc/source/filter/xml/xmltabi.cxx
index 095b6ee6d450..69f00106b7c7 100644
--- a/sc/source/filter/xml/xmltabi.cxx
+++ b/sc/source/filter/xml/xmltabi.cxx
@@ -53,6 +53,7 @@
#include <xmloff/nmspmap.hxx>
#include <xmloff/formsimp.hxx>
#include <xmloff/xmltoken.hxx>
+#include <xmloff/XMLEventsImportContext.hxx>
#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/sheet/XSpreadsheets.hpp>
@@ -323,6 +324,14 @@ SvXMLImportContext *ScXMLTableContext::CreateChildContext( USHORT nPrefix,
pContext = GetScImport().GetFormImport()->createOfficeFormsContext( GetScImport(), nPrefix, rLName );
}
break;
+ case XML_TOK_TABLE_EVENT_LISTENERS:
+ case XML_TOK_TABLE_EVENT_LISTENERS_EXT:
+ {
+ // use XEventsSupplier interface of the sheet
+ uno::Reference<document::XEventsSupplier> xSupplier( GetScImport().GetTables().GetCurrentXSheet(), uno::UNO_QUERY );
+ pContext = new XMLEventsImportContext( GetImport(), nPrefix, rLName, xSupplier );
+ }
+ break;
default:
;
}
diff --git a/sc/source/filter/xml/xmlwrap.cxx b/sc/source/filter/xml/xmlwrap.cxx
index f21ed7d55ac2..dbe647bc433f 100644
--- a/sc/source/filter/xml/xmlwrap.cxx
+++ b/sc/source/filter/xml/xmlwrap.cxx
@@ -80,6 +80,7 @@
#include "XMLExportSharedData.hxx"
#include "docuno.hxx"
#include "sheetdata.hxx"
+#include "XMLCodeNameProvider.hxx"
#define MAP_LEN(x) x, sizeof(x) - 1
@@ -425,6 +426,7 @@ sal_Bool ScXMLImportWrapper::Import(sal_Bool bStylesOnly, ErrCode& nError)
{ MAP_LEN( "StreamRelPath" ), 0, &::getCppuType( (rtl::OUString *)0 ), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0 },
{ MAP_LEN( "StreamName" ), 0, &::getCppuType( (rtl::OUString *)0 ), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0 },
{ MAP_LEN( "BuildId" ), 0, &::getCppuType( (OUString *)0 ), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0 },
+ { MAP_LEN( "ScriptConfiguration" ), 0, &::getCppuType((uno::Reference<container::XNameAccess> *)0), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0},
{ NULL, 0, 0, NULL, 0, 0 }
};
@@ -635,6 +637,12 @@ sal_Bool ScXMLImportWrapper::Import(sal_Bool bStylesOnly, ErrCode& nError)
xModelSet->setPropertyValue( sBuildPropName, xInfoSet->getPropertyValue(sBuildPropName) );
}
}
+
+ // Set Code Names
+ uno::Any aAny = xInfoSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("ScriptConfiguration") ));
+ uno::Reference <container::XNameAccess> xCodeNameAccess;
+ if( aAny >>= xCodeNameAccess )
+ XMLCodeNameProvider::set( xCodeNameAccess, &rDoc );
}
// Don't test bStylesRetval and bMetaRetval, because it could be an older file which not contain such streams
diff --git a/sc/source/ui/Accessibility/AccessibleCellBase.cxx b/sc/source/ui/Accessibility/AccessibleCellBase.cxx
index 92ff551f2724..cc93d0a93350 100644
--- a/sc/source/ui/Accessibility/AccessibleCellBase.cxx
+++ b/sc/source/ui/Accessibility/AccessibleCellBase.cxx
@@ -92,10 +92,12 @@ sal_Bool SAL_CALL ScAccessibleCellBase::isVisible( )
sal_Bool bVisible(sal_True);
if (mpDoc)
{
- BYTE nColFlags = mpDoc->GetColFlags(maCellAddress.Col(), maCellAddress.Tab());
- BYTE nRowFlags = mpDoc->GetRowFlags(maCellAddress.Row(), maCellAddress.Tab());
- if (((nColFlags & CR_HIDDEN) == CR_HIDDEN) || ((nColFlags & CR_FILTERED) == CR_FILTERED) ||
- ((nRowFlags & CR_HIDDEN) == CR_HIDDEN) || ((nRowFlags & CR_FILTERED) == CR_FILTERED))
+ bool bColHidden = mpDoc->ColHidden(maCellAddress.Col(), maCellAddress.Tab());
+ bool bRowHidden = mpDoc->RowHidden(maCellAddress.Row(), maCellAddress.Tab());
+ bool bColFiltered = mpDoc->ColFiltered(maCellAddress.Col(), maCellAddress.Tab());
+ bool bRowFiltered = mpDoc->RowFiltered(maCellAddress.Row(), maCellAddress.Tab());
+
+ if (bColHidden || bColFiltered || bRowHidden || bRowFiltered)
bVisible = sal_False;
}
return bVisible;
diff --git a/sc/source/ui/Accessibility/AccessibleContextBase.cxx b/sc/source/ui/Accessibility/AccessibleContextBase.cxx
index e438224ecfb6..0f1fcfa337a5 100644
--- a/sc/source/ui/Accessibility/AccessibleContextBase.cxx
+++ b/sc/source/ui/Accessibility/AccessibleContextBase.cxx
@@ -626,7 +626,3 @@ void ScAccessibleContextBase::IsObjectValid() const
throw lang::DisposedException();
}
-void ScAccessibleContextBase::SetRole(sal_Int16 nRole)
-{
- maRole = nRole;
-}
diff --git a/sc/source/ui/Accessibility/AccessibleFilterTopWindow.cxx b/sc/source/ui/Accessibility/AccessibleFilterTopWindow.cxx
index f536b8b9a8f7..2af69faa33c8 100644
--- a/sc/source/ui/Accessibility/AccessibleFilterTopWindow.cxx
+++ b/sc/source/ui/Accessibility/AccessibleFilterTopWindow.cxx
@@ -99,13 +99,6 @@ OUString ScAccessibleFilterTopWindow::getImplementationName() throw (RuntimeExce
return OUString::createFromAscii("ScAccessibleFilterTopWindow");
}
-Reference<XAccessible> ScAccessibleFilterTopWindow::getAccessibleChildMenu()
-{
- if (!mxAccMenu.is())
- mxAccMenu.set(new ScAccessibleFilterMenu(this, mpWindow, getAccessibleName(), ScMenuFloatingWindow::MENU_NOT_SELECTED, mpDoc));
- return mxAccMenu;
-}
-
void ScAccessibleFilterTopWindow::setAccessibleChild(
const Reference<XAccessible>& rAccessible, ChildControlType eType)
{
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index f6fc2cb27b71..2cabe7f9f2d6 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -289,7 +289,7 @@ sal_Bool ScInputWindow::UseSubTotal(ScRangeList* pRangeList) const
SCROW nRow(pRange->aStart.Row());
while (!bSubTotal && nRow <= nRowEnd)
{
- if (pDoc->IsFiltered(nRow, nTab))
+ if (pDoc->RowFiltered(nRow, nTab))
bSubTotal = sal_True;
else
++nRow;
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index 94e18def8a11..272852efcf71 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -1908,21 +1908,19 @@ IMPL_LINK( ScModule, IdleHandler, Timer*, EMPTYARG )
if ( pDocSh )
{
ScDocument* pDoc = pDocSh->GetDocument();
- if ( pDoc->IsLoadingDone() )
- {
- BOOL bLinks = pDoc->IdleCheckLinks();
- BOOL bWidth = pDoc->IdleCalcTextWidth();
- BOOL bSpell = pDoc->ContinueOnlineSpelling();
- if ( bSpell )
- aSpellTimer.Start(); // da ist noch was
-
- bMore = bLinks || bWidth || bSpell; // ueberhaupt noch was?
-
- // While calculating a Basic formula, a paint event may have occured,
- // so check the bNeedsRepaint flags for this document's views
- if (bWidth)
- lcl_CheckNeedsRepaint( pDocSh );
- }
+
+ BOOL bLinks = pDoc->IdleCheckLinks();
+ BOOL bWidth = pDoc->IdleCalcTextWidth();
+ BOOL bSpell = pDoc->ContinueOnlineSpelling();
+ if ( bSpell )
+ aSpellTimer.Start(); // da ist noch was
+
+ bMore = bLinks || bWidth || bSpell; // ueberhaupt noch was?
+
+ // While calculating a Basic formula, a paint event may have occured,
+ // so check the bNeedsRepaint flags for this document's views
+ if (bWidth)
+ lcl_CheckNeedsRepaint( pDocSh );
}
ULONG nOldTime = aIdleTimer.GetTimeout();
@@ -2192,9 +2190,6 @@ IMPL_LINK( ScModule, CalcFieldValueHdl, EditFieldInfo*, pInfo )
return 0;
}
-
-
-//<!--Added by PengYunQuan for Validity Cell Range Picker
BOOL ScModule::RegisterRefWindow( USHORT nSlotId, Window *pWnd )
{
std::list<Window*> & rlRefWindow = m_mapRefWindow[nSlotId];
@@ -2244,10 +2239,13 @@ BOOL ScModule::IsAliveRefDlg( USHORT nSlotId, Window *pWnd )
Window * ScModule::Find1RefWindow( USHORT nSlotId, Window *pWndAncestor )
{
+ if (!pWndAncestor)
+ return NULL;
+
std::map<USHORT, std::list<Window*> >::iterator iSlot = m_mapRefWindow.find( nSlotId );
if( iSlot == m_mapRefWindow.end() )
- return FALSE;
+ return NULL;
std::list<Window*> & rlRefWindow = iSlot->second;
@@ -2262,6 +2260,9 @@ Window * ScModule::Find1RefWindow( USHORT nSlotId, Window *pWndAncestor )
Window * ScModule::Find1RefWindow( Window *pWndAncestor )
{
+ if (!pWndAncestor)
+ return NULL;
+
while( Window *pParent = pWndAncestor->GetParent() ) pWndAncestor = pParent;
for( std::map<USHORT, std::list<Window*> >::iterator i = m_mapRefWindow.begin();
@@ -2272,4 +2273,4 @@ Window * ScModule::Find1RefWindow( Window *pWndAncestor )
return NULL;
}
-//<!--Added by PengYunQuan for Validity Cell Range Picker
+
diff --git a/sc/source/ui/app/transobj.cxx b/sc/source/ui/app/transobj.cxx
index a5b286e8a9ea..4b268b9da791 100644
--- a/sc/source/ui/app/transobj.cxx
+++ b/sc/source/ui/app/transobj.cxx
@@ -602,25 +602,23 @@ void ScTransferObj::InitDocShell()
// widths / heights
// (must be copied before CopyFromClip, for drawing objects)
- SCCOL nCol;
- SCROW nRow;
+ SCCOL nCol, nLastCol;
SCTAB nSrcTab = aBlock.aStart.Tab();
pDestDoc->SetLayoutRTL(0, pDoc->IsLayoutRTL(nSrcTab));
for (nCol=nStartX; nCol<=nEndX; nCol++)
- if ( pDoc->GetColFlags( nCol, nSrcTab ) & CR_HIDDEN )
+ if ( pDoc->ColHidden(nCol, nSrcTab, nLastCol) )
pDestDoc->ShowCol( nCol, 0, FALSE );
else
pDestDoc->SetColWidth( nCol, 0, pDoc->GetColWidth( nCol, nSrcTab ) );
ScBitMaskCompressedArray< SCROW, BYTE> & rDestRowFlags =
pDestDoc->GetRowFlagsArrayModifiable(0);
- ScCompressedArrayIterator< SCROW, BYTE> aIter( pDoc->GetRowFlagsArray(
- nSrcTab), nStartY, nEndY);
- for ( ; aIter; ++aIter )
+
+ for (SCROW nRow = nStartY; nRow <= nEndY; ++nRow)
{
- nRow = aIter.GetPos();
- BYTE nSourceFlags = *aIter;
- if ( nSourceFlags & CR_HIDDEN )
+ BYTE nSourceFlags = pDoc->GetRowFlags(nRow, nSrcTab);
+ SCROW nLastRow = -1;
+ if ( pDoc->RowHidden(nRow, nSrcTab, nLastRow) )
pDestDoc->ShowRow( nRow, 0, FALSE );
else
{
@@ -684,7 +682,7 @@ void ScTransferObj::InitDocShell()
for (nCol=0; nCol<nStartX; nCol++)
nPosX += pDestDoc->GetColWidth( nCol, 0 );
- nPosY += pDestDoc->FastGetRowHeight( 0, nStartY-1, 0 );
+ nPosY += pDestDoc->GetRowHeight( 0, nStartY-1, 0 );
nPosX = (long) ( nPosX * HMM_PER_TWIPS );
nPosY = (long) ( nPosY * HMM_PER_TWIPS );
@@ -701,9 +699,9 @@ void ScTransferObj::InitDocShell()
break;
nSizeX += nAdd;
}
- for (nRow=nStartY; nRow<=nEndY; nRow++)
+ for (SCROW nRow=nStartY; nRow<=nEndY; nRow++)
{
- long nAdd = pDestDoc->FastGetRowHeight( nRow, 0 );
+ long nAdd = pDestDoc->GetRowHeight( nRow, 0 );
if ( nSizeY+nAdd > aPaperSize.Height() && nSizeY ) // above limit?
break;
nSizeY += nAdd;
diff --git a/sc/source/ui/attrdlg/scdlgfact.cxx b/sc/source/ui/attrdlg/scdlgfact.cxx
index 0af2c30d628f..73a5f1a1c4ee 100644
--- a/sc/source/ui/attrdlg/scdlgfact.cxx
+++ b/sc/source/ui/attrdlg/scdlgfact.cxx
@@ -62,6 +62,7 @@
#include "scendlg.hxx" //add for ScNewScenarioDlg
#include "shtabdlg.hxx" //add for ScShowTabDlg
#include "strindlg.hxx" //add for ScStringInputDlg
+#include "tabbgcolordlg.hxx"//add for ScTabBgColorDlg
#include "scuiimoptdlg.hxx" //add for ScImportOptionsDlg
#include "attrdlg.hxx" //add for ScAttrDlg
#include "hfedtdlg.hxx" //add for ScHFEditDlg
@@ -112,6 +113,7 @@ IMPL_ABSTDLG_BASE(AbstractScDPShowDetailDlg_Impl); //add for ScDPShowDetailDlg
IMPL_ABSTDLG_BASE(AbstractScNewScenarioDlg_Impl); //add for ScNewScenarioDlg
IMPL_ABSTDLG_BASE(AbstractScShowTabDlg_Impl); //add for ScShowTabDlg
IMPL_ABSTDLG_BASE(AbstractScStringInputDlg_Impl); //add for ScStringInputDlg
+IMPL_ABSTDLG_BASE(AbstractScTabBgColorDlg_Impl); //add for ScTabBgColorDlg
IMPL_ABSTDLG_BASE(AbstractScImportOptionsDlg_Impl); //add for ScImportOptionsDlg
IMPL_ABSTDLG_BASE(AbstractScTextImportOptionsDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractTabDialog_Impl); //add for ScAttrDlg, ScHFEditDlg, ScStyleDlg, ScSubTotalDlg,ScCharDlg, ScParagraphDlg, ScValidationDlg, ScSortDlg
@@ -618,6 +620,14 @@ void AbstractScStringInputDlg_Impl::GetInputString( String& rString ) const //a
}
//add for AbstractScStringInputDlg_Impl end
+//add for AbstractScTabBgColorDlg_Impl begin
+void AbstractScTabBgColorDlg_Impl::GetSelectedColor( Color& rColor ) const //add for ScTabBgColorDlg
+{
+ pDlg->GetSelectedColor( rColor );
+}
+//add for AbstractScTabBgColorDlg_Impl end
+
+
//add for AbstractScImportOptionsDlg_Impl begin
void AbstractScImportOptionsDlg_Impl::GetImportOptions( ScImportOptions& rOptions ) const //add for ScImportOptionsDlg
{
@@ -1293,6 +1303,31 @@ AbstractScShowTabDlg * ScAbstractDialogFactory_Impl::CreateScShowTabDlg ( Window
}
//add for ScStringInputDlg end
+//add for ScTabBgColorDlg begin
+AbstractScTabBgColorDlg * ScAbstractDialogFactory_Impl::CreateScTabBgColorDlg (
+ Window* pParent,
+ const String& rTitle,
+ const String& rTabBgColorNoColorText,
+ const Color& rDefaultColor,
+ ULONG nHelpId ,
+ int nId )
+{
+ScTabBgColorDlg * pDlg=NULL;
+switch ( nId )
+{
+ case RID_SCDLG_TAB_BG_COLOR :
+ pDlg = new ScTabBgColorDlg( pParent, rTitle, rTabBgColorNoColorText, rDefaultColor, nHelpId );
+ break;
+ default:
+ break;
+}
+
+if ( pDlg )
+ return new AbstractScTabBgColorDlg_Impl( pDlg );
+return 0;
+}
+//add for ScTabBgColorDlg end
+
//add for ScImportOptionsDlg begin
AbstractScImportOptionsDlg * ScAbstractDialogFactory_Impl::CreateScImportOptionsDlg ( Window* pParent,
int nId,
diff --git a/sc/source/ui/attrdlg/scdlgfact.hxx b/sc/source/ui/attrdlg/scdlgfact.hxx
index d9752c83da9a..cd0f79dd1598 100644
--- a/sc/source/ui/attrdlg/scdlgfact.hxx
+++ b/sc/source/ui/attrdlg/scdlgfact.hxx
@@ -58,6 +58,7 @@ class ScDPShowDetailDlg;
class ScNewScenarioDlg;
class ScShowTabDlg;
class ScStringInputDlg;
+class ScTabBgColorDlg;
class ScImportOptionsDlg;
class SfxTabDialog;
class ScSortWarningDlg;
@@ -336,6 +337,12 @@ class AbstractScStringInputDlg_Impl : public AbstractScStringInputDlg //add fo
virtual void GetInputString( String& rString ) const;
};
+class AbstractScTabBgColorDlg_Impl : public AbstractScTabBgColorDlg //add for ScTabBgColorDlg
+{
+ DECL_ABSTDLG_BASE( AbstractScTabBgColorDlg_Impl, ScTabBgColorDlg )
+ virtual void GetSelectedColor( Color& rColor ) const;
+};
+
class AbstractScImportOptionsDlg_Impl : public AbstractScImportOptionsDlg //add for ScImportOptionsDlg
{
DECL_ABSTDLG_BASE( AbstractScImportOptionsDlg_Impl, ScImportOptionsDlg)
@@ -519,6 +526,14 @@ public:
const String& rDefault,
ULONG nHelpId ,
int nId );
+
+ virtual AbstractScTabBgColorDlg * CreateScTabBgColorDlg ( Window* pParent, //add for ScStringInputDlg
+ const String& rTitle, //Dialog Title
+ const String& rTabBgColorNoColorText, //Label for no tab color
+ const Color& rDefaultColor, //Currently selected Color
+ ULONG nHelpId ,
+ int nId );
+
virtual AbstractScImportOptionsDlg * CreateScImportOptionsDlg ( Window* pParent, //add for ScImportOptionsDlg
int nId,
BOOL bAscii = TRUE,
diff --git a/sc/source/ui/cctrl/dpcontrol.cxx b/sc/source/ui/cctrl/dpcontrol.cxx
index fa14a5497826..52aae575b7d7 100644
--- a/sc/source/ui/cctrl/dpcontrol.cxx
+++ b/sc/source/ui/cctrl/dpcontrol.cxx
@@ -169,11 +169,6 @@ void ScDPFieldButton::getPopupBoundingBox(Point& rPos, Size& rSize) const
rSize.setHeight(nH);
}
-bool ScDPFieldButton::isPopupButton() const
-{
- return mbPopupButton;
-}
-
void ScDPFieldButton::drawPopupButton()
{
Point aPos;
@@ -732,27 +727,6 @@ ScMenuFloatingWindow* ScMenuFloatingWindow::getSubMenuWindow(size_t nPos) const
return maMenuItems[nPos].mpSubMenuWin.get();
}
-size_t ScMenuFloatingWindow::getMenuItemCount() const
-{
- return maMenuItems.size();
-}
-
-OUString ScMenuFloatingWindow::getMenuItemName(size_t nPos) const
-{
- if (maMenuItems.size() <= nPos)
- return ScGlobal::GetEmptyString();
-
- return maMenuItems[nPos].maText;
-}
-
-bool ScMenuFloatingWindow::isMenuItemEnabled(size_t nPos) const
-{
- if (maMenuItems.size() <= nPos)
- return false;
-
- return maMenuItems[nPos].mbEnabled;
-}
-
bool ScMenuFloatingWindow::isMenuItemSelected(size_t nPos) const
{
return nPos == mnSelectedMenu;
diff --git a/sc/source/ui/dbgui/asciiopt.cxx b/sc/source/ui/dbgui/asciiopt.cxx
index cd1f85fb99cc..a22953ade25b 100644
--- a/sc/source/ui/dbgui/asciiopt.cxx
+++ b/sc/source/ui/dbgui/asciiopt.cxx
@@ -253,20 +253,13 @@ void ScAsciiOptions::ReadFromString( const String& rString )
eCharSet = ScGlobal::GetCharsetValue( aToken );
}
- // Language
- if (nCount >= 4)
- {
- aToken = rString.GetToken(3, ',');
- eLang = static_cast<LanguageType>(aToken.ToInt32());
- }
-
//
// Startzeile
//
- if ( nCount >= 5 )
+ if ( nCount >= 4 )
{
- aToken = rString.GetToken(4,',');
+ aToken = rString.GetToken(3,',');
nStartRow = aToken.ToInt32();
}
@@ -274,12 +267,12 @@ void ScAsciiOptions::ReadFromString( const String& rString )
// Spalten-Infos
//
- if ( nCount >= 6 )
+ if ( nCount >= 5 )
{
delete[] pColStart;
delete[] pColFormat;
- aToken = rString.GetToken(5,',');
+ aToken = rString.GetToken(4,',');
nSub = aToken.GetTokenCount('/');
nInfoCount = nSub / 2;
if (nInfoCount)
@@ -299,6 +292,13 @@ void ScAsciiOptions::ReadFromString( const String& rString )
}
}
+ // Language
+ if (nCount >= 6)
+ {
+ aToken = rString.GetToken(5, ',');
+ eLang = static_cast<LanguageType>(aToken.ToInt32());
+ }
+
// Import quoted field as text.
if (nCount >= 7)
{
@@ -362,10 +362,6 @@ String ScAsciiOptions::WriteToString() const
aOutStr += ScGlobal::GetCharsetString( eCharSet );
aOutStr += ','; // Token-Ende
- // Language
- aOutStr += String::CreateFromInt32(eLang);
- aOutStr += ',';
-
//
// Startzeile
//
@@ -387,6 +383,13 @@ String ScAsciiOptions::WriteToString() const
aOutStr += String::CreateFromInt32(pColFormat[nInfo]);
}
+ // #i112025# the options string is used in macros and linked sheets,
+ // so new options must be added at the end, to remain compatible
+
+ aOutStr += ',';
+
+ // Language
+ aOutStr += String::CreateFromInt32(eLang);
aOutStr += ',';
// Import quoted field as text.
diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx
index 9895f0f43610..cf149d258062 100644
--- a/sc/source/ui/docshell/dbdocfun.cxx
+++ b/sc/source/ui/docshell/dbdocfun.cxx
@@ -937,7 +937,10 @@ BOOL ScDBDocFunc::Query( SCTAB nTab, const ScQueryParam& rQueryParam,
}
if (!bCopy)
+ {
+ pDoc->InvalidatePageBreaks(nTab);
pDoc->UpdatePageBreaks( nTab );
+ }
// #i23299# because of Subtotal functions, the whole rows must be set dirty
ScRange aDirtyRange( 0 , aLocalParam.nRow1, nDestTab,
@@ -1275,6 +1278,13 @@ BOOL ScDBDocFunc::DataPilotUpdate( ScDPObject* pOldObj, const ScDPObject* pNewOb
// output range must be set at pNewObj
pDestObj = new ScDPObject( *pNewObj );
+
+ // #i94570# When changing the output position in the dialog, a new table is created
+ // with the settings from the old table, including the name.
+ // So we have to check for duplicate names here (before inserting).
+ if ( pDoc->GetDPCollection()->GetByName(pDestObj->GetName()) )
+ pDestObj->SetName( String() ); // ignore the invalid name, create a new name below
+
pDestObj->SetAlive(TRUE);
if ( !pDoc->GetDPCollection()->InsertNewTable(pDestObj) )
{
diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index e08c930301cf..27b8eef7bbd6 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -2791,6 +2791,8 @@ BOOL ScDocFunc::DeleteTable( SCTAB nTab, BOOL bRecord, BOOL /* bApi */ )
pUndoDoc->SetActiveScenario( nTab, bActive );
}
pUndoDoc->SetVisible( nTab, pDoc->IsVisible( nTab ) );
+ pUndoDoc->SetTabBgColor( nTab, pDoc->GetTabBgColor(nTab) );
+ pUndoDoc->SetSheetEvents( nTab, pDoc->GetSheetEvents( nTab ) );
// Drawing-Layer muss sein Undo selbst in der Hand behalten !!!
pDoc->BeginDrawUndo(); // DeleteTab erzeugt ein SdrUndoDelPage
@@ -2995,6 +2997,104 @@ BOOL ScDocFunc::RenameTable( SCTAB nTab, const String& rName, BOOL bRecord, BOOL
return bSuccess;
}
+bool ScDocFunc::SetTabBgColor( SCTAB nTab, const Color& rColor, bool bRecord, bool bApi )
+{
+
+ ScDocument* pDoc = rDocShell.GetDocument();
+ if (bRecord && !pDoc->IsUndoEnabled())
+ bRecord = false;
+ if ( !pDoc->IsDocEditable() || pDoc->IsTabProtected(nTab) )
+ {
+ if (!bApi)
+ rDocShell.ErrorMessage(STR_PROTECTIONERR); //TODO Check to see what this string is...
+ return false;
+ }
+
+ Color aOldTabBgColor;
+ aOldTabBgColor = pDoc->GetTabBgColor(nTab);
+
+ bool bSuccess = false;
+ pDoc->SetTabBgColor(nTab, rColor);
+ if ( pDoc->GetTabBgColor(nTab) == rColor)
+ bSuccess = true;
+ if (bSuccess)
+ {
+ if (bRecord)
+ {
+ rDocShell.GetUndoManager()->AddUndoAction(
+ new ScUndoTabColor( &rDocShell, nTab, aOldTabBgColor, rColor));
+ }
+ rDocShell.PostPaintExtras();
+ ScDocShellModificator aModificator( rDocShell );
+ aModificator.SetDocumentModified();
+ SFX_APP()->Broadcast( SfxSimpleHint( SC_HINT_TABLES_CHANGED ) );
+
+ bSuccess = true;
+ }
+ return bSuccess;
+}
+
+bool ScDocFunc::SetTabBgColor(
+ ScUndoTabColorInfo::List& rUndoTabColorList, bool bRecord, bool bApi )
+{
+ ScDocument* pDoc = rDocShell.GetDocument();
+ if (bRecord && !pDoc->IsUndoEnabled())
+ bRecord = false;
+
+ if ( !pDoc->IsDocEditable() )
+ {
+ if (!bApi)
+ rDocShell.ErrorMessage(STR_PROTECTIONERR); //TODO Get a better String Error...
+ return false;
+ }
+
+ USHORT nTab;
+ Color aNewTabBgColor;
+ bool bSuccess = true;
+ size_t nTabProtectCount = 0;
+ size_t nTabListCount = rUndoTabColorList.size();
+ for ( size_t i = 0; i < nTabListCount; ++i )
+ {
+ ScUndoTabColorInfo& rInfo = rUndoTabColorList[i];
+ nTab = rInfo.mnTabId;
+ if ( !pDoc->IsTabProtected(nTab) )
+ {
+ aNewTabBgColor = rInfo.maNewTabBgColor;
+ rInfo.maOldTabBgColor = pDoc->GetTabBgColor(nTab);
+ pDoc->SetTabBgColor(nTab, aNewTabBgColor);
+ if ( pDoc->GetTabBgColor(nTab) != aNewTabBgColor)
+ {
+ bSuccess = false;
+ break;
+ }
+ }
+ else
+ {
+ nTabProtectCount++;
+ }
+ }
+
+ if ( nTabProtectCount == nTabListCount )
+ {
+ if (!bApi)
+ rDocShell.ErrorMessage(STR_PROTECTIONERR); //TODO Get a better String Error...
+ return false;
+ }
+
+ if (bSuccess)
+ {
+ if (bRecord)
+ {
+ rDocShell.GetUndoManager()->AddUndoAction(
+ new ScUndoTabColor( &rDocShell, rUndoTabColorList));
+ }
+ rDocShell.PostPaintExtras();
+ ScDocShellModificator aModificator( rDocShell );
+ aModificator.SetDocumentModified();
+ }
+ return bSuccess;
+}
+
//------------------------------------------------------------------------
//! SetWidthOrHeight - noch doppelt zu ViewFunc !!!!!!
@@ -3097,7 +3197,9 @@ BOOL ScDocFunc::SetWidthOrHeight( BOOL bWidth, SCCOLROW nRangeCnt, SCCOLROW* pRa
for (SCROW nRow=nStartNo; nRow<=nEndNo; nRow++)
{
BYTE nOld = pDoc->GetRowFlags(nRow,nTab);
- if ( (nOld & CR_HIDDEN) == 0 && ( nOld & CR_MANUALSIZE ) )
+ SCROW nLastRow = -1;
+ bool bHidden = pDoc->RowHidden(nRow, nTab, nLastRow);
+ if ( !bHidden && ( nOld & CR_MANUALSIZE ) )
pDoc->SetRowFlags( nRow, nTab, nOld & ~CR_MANUALSIZE );
}
}
@@ -3132,8 +3234,8 @@ BOOL ScDocFunc::SetWidthOrHeight( BOOL bWidth, SCCOLROW nRangeCnt, SCCOLROW* pRa
{
for (SCCOL nCol=static_cast<SCCOL>(nStartNo); nCol<=static_cast<SCCOL>(nEndNo); nCol++)
{
- if ( eMode != SC_SIZE_VISOPT ||
- (pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN) == 0 )
+ SCCOL nLastCol = -1;
+ if ( eMode != SC_SIZE_VISOPT || !pDoc->ColHidden(nCol, nTab, nLastCol) )
{
USHORT nThisSize = nSizeTwips;
@@ -3203,20 +3305,22 @@ BOOL ScDocFunc::InsertPageBreak( BOOL bColumn, const ScAddress& rPos,
if (nPos == 0)
return FALSE; // erste Spalte / Zeile
- BYTE nFlags = bColumn ? pDoc->GetColFlags( static_cast<SCCOL>(nPos), nTab )
- : pDoc->GetRowFlags( static_cast<SCROW>(nPos), nTab );
- if (nFlags & CR_MANUALBREAK)
- return TRUE; // Umbruch schon gesetzt
+ ScBreakType nBreak = bColumn ?
+ pDoc->HasColBreak(static_cast<SCCOL>(nPos), nTab) :
+ pDoc->HasRowBreak(static_cast<SCROW>(nPos), nTab);
+ if (nBreak & BREAK_MANUAL)
+ return true;
if (bRecord)
rDocShell.GetUndoManager()->AddUndoAction(
new ScUndoPageBreak( &rDocShell, rPos.Col(), rPos.Row(), nTab, bColumn, TRUE ) );
- nFlags |= CR_MANUALBREAK;
if (bColumn)
- pDoc->SetColFlags( static_cast<SCCOL>(nPos), nTab, nFlags );
+ pDoc->SetColBreak(static_cast<SCCOL>(nPos), nTab, false, true);
else
- pDoc->SetRowFlags( static_cast<SCROW>(nPos), nTab, nFlags );
+ pDoc->SetRowBreak(static_cast<SCROW>(nPos), nTab, false, true);
+
+ pDoc->InvalidatePageBreaks(nTab);
pDoc->UpdatePageBreaks( nTab );
if (pDoc->IsStreamValid(nTab))
@@ -3262,20 +3366,25 @@ BOOL ScDocFunc::RemovePageBreak( BOOL bColumn, const ScAddress& rPos,
SCCOLROW nPos = bColumn ? static_cast<SCCOLROW>(rPos.Col()) :
static_cast<SCCOLROW>(rPos.Row());
- BYTE nFlags = bColumn ? pDoc->GetColFlags( static_cast<SCCOL>(nPos), nTab )
- : pDoc->GetRowFlags( static_cast<SCROW>(nPos), nTab );
- if ((nFlags & CR_MANUALBREAK)==0)
- return FALSE; // kein Umbruch gesetzt
+
+ ScBreakType nBreak;
+ if (bColumn)
+ nBreak = pDoc->HasColBreak(static_cast<SCCOL>(nPos), nTab);
+ else
+ nBreak = pDoc->HasRowBreak(static_cast<SCROW>(nPos), nTab);
+ if ((nBreak & BREAK_MANUAL) == 0)
+ // There is no manual break.
+ return false;
if (bRecord)
rDocShell.GetUndoManager()->AddUndoAction(
new ScUndoPageBreak( &rDocShell, rPos.Col(), rPos.Row(), nTab, bColumn, FALSE ) );
- nFlags &= ~CR_MANUALBREAK;
if (bColumn)
- pDoc->SetColFlags( static_cast<SCCOL>(nPos), nTab, nFlags );
+ pDoc->RemoveColBreak(static_cast<SCCOL>(nPos), nTab, false, true);
else
- pDoc->SetRowFlags( static_cast<SCROW>(nPos), nTab, nFlags );
+ pDoc->RemoveRowBreak(static_cast<SCROW>(nPos), nTab, false, true);
+
pDoc->UpdatePageBreaks( nTab );
if (pDoc->IsStreamValid(nTab))
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 135bbcdace49..a446c86b4d1b 100644..100755
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -49,6 +49,7 @@
#include <svtools/ctrltool.hxx>
#include <svtools/sfxecode.hxx>
#include <svl/zforlist.hxx>
+#include <svl/PasswordHelper.hxx>
#include <sfx2/app.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/dinfdlg.hxx>
@@ -68,6 +69,9 @@
#include "chgviset.hxx"
#include <sfx2/request.hxx>
#include <com/sun/star/document/UpdateDocMode.hpp>
+#include <com/sun/star/container/XContentEnumerationAccess.hpp>
+#include <com/sun/star/sheet/XSpreadsheetView.hpp>
+#include <com/sun/star/task/XJob.hpp>
#include "scabstdlg.hxx" //CHINA001
@@ -351,6 +355,20 @@ void ScDocShell::AfterXMLLoading(sal_Bool bRet)
// else; nothing has to happen, because it is a user given name
}
}
+
+ // #i94570# DataPilot table names have to be unique, or the tables can't be accessed by API.
+ // If no name (or an invalid name, skipped in ScXMLDataPilotTableContext::EndElement) was set, create a new name.
+ ScDPCollection* pDPCollection = aDocument.GetDPCollection();
+ if ( pDPCollection )
+ {
+ USHORT nDPCount = pDPCollection->GetCount();
+ for (USHORT nDP=0; nDP<nDPCount; nDP++)
+ {
+ ScDPObject* pDPObj = (*pDPCollection)[nDP];
+ if ( !pDPObj->GetName().Len() )
+ pDPObj->SetName( pDPCollection->CreateNewName() );
+ }
+ }
}
ScColumn::bDoubleAlloc = sal_False;
}
@@ -457,7 +475,7 @@ BOOL __EXPORT ScDocShell::Load( SfxMedium& rMedium )
// only the latin script language is loaded
// -> initialize the others from options (before loading)
- InitOptions();
+ InitOptions(true);
GetUndoManager()->Clear();
@@ -581,6 +599,46 @@ void __EXPORT ScDocShell::Notify( SfxBroadcaster&, const SfxHint& rHint )
}
}
}
+
+ try
+ {
+ uno::Reference< uno::XComponentContext > xContext;
+ uno::Reference< lang::XMultiServiceFactory > xServiceManager = ::comphelper::getProcessServiceFactory();
+ uno::Reference< beans::XPropertySet > xProp( xServiceManager, uno::UNO_QUERY_THROW );
+ xProp->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ) ) ) >>= xContext;
+ if ( xContext.is() )
+ {
+ uno::Reference< container::XContentEnumerationAccess > xEnumAccess( xServiceManager, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XEnumeration> xEnum = xEnumAccess->createContentEnumeration(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sheet.SpreadsheetDocumentJob" ) ) );
+ if ( xEnum.is() )
+ {
+ while ( xEnum->hasMoreElements() )
+ {
+ uno::Any aAny = xEnum->nextElement();
+ uno::Reference< lang::XSingleComponentFactory > xFactory;
+ aAny >>= xFactory;
+ if ( xFactory.is() )
+ {
+ uno::Reference< task::XJob > xJob( xFactory->createInstanceWithContext( xContext ), uno::UNO_QUERY_THROW );
+ uno::Sequence< beans::NamedValue > aArgsForJob(1);
+ ScViewData* pViewData = GetViewData();
+ SfxViewShell* pViewShell = ( pViewData ? pViewData->GetViewShell() : NULL );
+ SfxViewFrame* pViewFrame = ( pViewShell ? pViewShell->GetViewFrame() : NULL );
+ SfxFrame* pFrame = ( pViewFrame ? &pViewFrame->GetFrame() : NULL );
+ uno::Reference< frame::XController > xController = ( pFrame ? pFrame->GetController() : 0 );
+ uno::Reference< sheet::XSpreadsheetView > xSpreadsheetView( xController, uno::UNO_QUERY_THROW );
+ aArgsForJob[0] = beans::NamedValue( ::rtl::OUString::createFromAscii( "SpreadsheetView" ),
+ uno::makeAny( xSpreadsheetView ) );
+ xJob->execute( aArgsForJob );
+ }
+ }
+ }
+ }
+ }
+ catch ( uno::Exception & )
+ {
+ }
}
break;
case SFX_EVENT_SAVEDOC:
@@ -867,10 +925,33 @@ static void lcl_parseHtmlFilterOption(const OUString& rOption, LanguageType& rLa
rDateConvert = static_cast<bool>(aTokens[1].toInt32());
}
+namespace {
+
+class LoadMediumGuard
+{
+public:
+ explicit LoadMediumGuard(ScDocument* pDoc) :
+ mpDoc(pDoc)
+ {
+ mpDoc->SetLoadingMedium(true);
+ }
+
+ ~LoadMediumGuard()
+ {
+ mpDoc->SetLoadingMedium(false);
+ }
+private:
+ ScDocument* mpDoc;
+};
+
+}
+
BOOL __EXPORT ScDocShell::ConvertFrom( SfxMedium& rMedium )
{
RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::ConvertFrom" );
+ LoadMediumGuard aLoadGuard(&aDocument);
+
BOOL bRet = FALSE; // FALSE heisst Benutzerabbruch !!
// bei Fehler: Fehler am Stream setzen!!
@@ -1937,7 +2018,7 @@ BOOL __EXPORT ScDocShell::ConvertTo( SfxMedium &rMed )
/* #115980# #i104990# If the imported document contains a medium
password, determine if we can save it, otherwise ask the users
whether they want to save without it. */
- if( !::sfx2::CheckMSPasswordCapabilityForExport( aFltName ) )
+ if( (rMed.GetFilter()->GetFilterFlags() & SFX_FILTER_ENCRYPTION) == 0 )
{
SfxItemSet* pItemSet = rMed.GetItemSet();
const SfxPoolItem* pItem = 0;
@@ -2652,3 +2733,97 @@ sal_Bool ScDocShell::AcceptStateUpdate() const
return sal_False;
}
//-->Added by PengYunQuan for Validity Cell Range Picker
+
+
+bool ScDocShell::IsChangeRecording() const
+{
+ ScChangeTrack* pChangeTrack = aDocument.GetChangeTrack();
+ return pChangeTrack != NULL;
+}
+
+
+bool ScDocShell::HasChangeRecordProtection() const
+{
+ bool bRes = false;
+ ScChangeTrack* pChangeTrack = aDocument.GetChangeTrack();
+ if (pChangeTrack)
+ bRes = pChangeTrack->IsProtected();
+ return bRes;
+}
+
+
+void ScDocShell::SetChangeRecording( bool bActivate )
+{
+ bool bOldChangeRecording = IsChangeRecording();
+
+ if (bActivate)
+ {
+ aDocument.StartChangeTracking();
+ ScChangeViewSettings aChangeViewSet;
+ aChangeViewSet.SetShowChanges(TRUE);
+ aDocument.SetChangeViewSettings(aChangeViewSet);
+ }
+ else
+ {
+ aDocument.EndChangeTracking();
+ PostPaintGridAll();
+ }
+
+ if (bOldChangeRecording != IsChangeRecording())
+ {
+ UpdateAcceptChangesDialog();
+ // Slots invalidieren
+ SfxBindings* pBindings = GetViewBindings();
+ if (pBindings)
+ pBindings->InvalidateAll(FALSE);
+ }
+}
+
+
+bool ScDocShell::SetProtectionPassword( const String &rNewPassword )
+{
+ bool bRes = false;
+ ScChangeTrack* pChangeTrack = aDocument.GetChangeTrack();
+ if (pChangeTrack)
+ {
+ sal_Bool bProtected = pChangeTrack->IsProtected();
+
+ if (rNewPassword.Len())
+ {
+ // when password protection is applied change tracking must always be active
+ SetChangeRecording( true );
+
+ ::com::sun::star::uno::Sequence< sal_Int8 > aProtectionHash;
+ SvPasswordHelper::GetHashPassword( aProtectionHash, rNewPassword );
+ pChangeTrack->SetProtection( aProtectionHash );
+ }
+ else
+ {
+ pChangeTrack->SetProtection( ::com::sun::star::uno::Sequence< sal_Int8 >() );
+ }
+ bRes = true;
+
+ if ( bProtected != pChangeTrack->IsProtected() )
+ {
+ UpdateAcceptChangesDialog();
+ SetDocumentModified();
+ }
+ }
+
+ return bRes;
+}
+
+
+bool ScDocShell::GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash )
+{
+ bool bRes = false;
+ ScChangeTrack* pChangeTrack = aDocument.GetChangeTrack();
+ if (pChangeTrack && pChangeTrack->IsProtected())
+ {
+ rPasswordHash = pChangeTrack->GetProtection();
+ bRes = true;
+ }
+ return bRes;
+}
+
+
diff --git a/sc/source/ui/docshell/docsh2.cxx b/sc/source/ui/docshell/docsh2.cxx
index 9e3ed217382f..14ff7622818c 100644
--- a/sc/source/ui/docshell/docsh2.cxx
+++ b/sc/source/ui/docshell/docsh2.cxx
@@ -93,7 +93,7 @@ BOOL __EXPORT ScDocShell::InitNew( const uno::Reference < embed::XStorage >& xSt
aDocument.SetDrawDefaults(); // drawing layer defaults that are set only in InitNew
// InitOptions sets the document languages, must be called before CreateStandardStyles
- InitOptions();
+ InitOptions(false);
aDocument.GetStyleSheetPool()->CreateStandardStyles();
aDocument.UpdStlShtPtrsFrmNms();
diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx
index 4709a065792f..233843935bbd 100644
--- a/sc/source/ui/docshell/docsh3.cxx
+++ b/sc/source/ui/docshell/docsh3.cxx
@@ -424,7 +424,7 @@ double ScDocShell::GetOutputFactor() const
//---------------------------------------------------------------------
-void ScDocShell::InitOptions() // Fortsetzung von InitNew (CLOOKs)
+void ScDocShell::InitOptions(bool bForLoading) // called from InitNew and Load
{
// Einstellungen aus dem SpellCheckCfg kommen in Doc- und ViewOptions
@@ -440,6 +440,14 @@ void ScDocShell::InitOptions() // Fortsetzung von InitNew (CLOOKs)
// zweistellige Jahreszahleneingabe aus Extras->Optionen->Allgemein->Sonstiges
aDocOpt.SetYear2000( sal::static_int_cast<USHORT>( ::utl::MiscCfg().GetYear2000() ) );
+ if (bForLoading)
+ {
+ // #i112123# No style:decimal-places attribute means automatic decimals, not the configured default,
+ // so it must not be taken from the global options.
+ // Calculation settings are handled separately in ScXMLBodyContext::EndElement.
+ aDocOpt.SetStdPrecision( SvNumberFormatter::UNLIMITED_PRECISION );
+ }
+
aDocument.SetDocOptions( aDocOpt );
aDocument.SetViewOptions( aViewOpt );
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index 157b98497e83..0993d2ce4a14 100644..100755
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -66,6 +66,7 @@ using namespace ::com::sun::star;
#include <svx/svditer.hxx>
#include <svx/svdpage.hxx>
#include <svx/fmshell.hxx>
+#include <svtools/xwindowitem.hxx>
#include <sfx2/passwd.hxx>
#include <sfx2/filedlghelper.hxx>
#include <sfx2/docinsert.hxx>
@@ -120,9 +121,9 @@ using namespace ::com::sun::star;
#include "scresid.hxx" //add by CHINA001
#include "scabstdlg.hxx" //CHINA001
#include "externalrefmgr.hxx"
-
#include "sharedocdlg.hxx"
#include "conditio.hxx"
+#include "sheetevents.hxx"
//------------------------------------------------------------------
@@ -623,8 +624,8 @@ void ScDocShell::Execute( SfxRequest& rReq )
// getting real parent window when called from Security-Options TP
Window* pParent = NULL;
const SfxPoolItem* pParentItem;
- if( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( SID_ATTR_PARENTWINDOW, FALSE, &pParentItem ) )
- pParent = ( Window* ) ( ( const OfaPtrItem* ) pParentItem )->GetValue();
+ if( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( SID_ATTR_XWINDOW, FALSE, &pParentItem ) )
+ pParent = ( ( const XWindowItem* ) pParentItem )->GetWindowPtr();
// desired state
ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack();
@@ -664,17 +665,7 @@ void ScDocShell::Execute( SfxRequest& rReq )
if ( bDo )
{
- // update "accept changes" dialog
- //! notify all views
- SfxViewFrame* pViewFrm = SfxViewFrame::Current();
- if ( pViewFrm && pViewFrm->HasChildWindow(FID_CHG_ACCEPT) )
- {
- SfxChildWindow* pChild = pViewFrm->GetChildWindow(FID_CHG_ACCEPT);
- if (pChild)
- {
- ((ScAcceptChgDlgWrapper*)pChild)->ReInitDlg();
- }
- }
+ UpdateAcceptChangesDialog();
// Slots invalidieren
if (pBindings)
@@ -693,8 +684,8 @@ void ScDocShell::Execute( SfxRequest& rReq )
{
Window* pParent = NULL;
const SfxPoolItem* pParentItem;
- if( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( SID_ATTR_PARENTWINDOW, FALSE, &pParentItem ) )
- pParent = ( Window* ) ( ( const OfaPtrItem* ) pParentItem )->GetValue();
+ if( pReqArgs && SFX_ITEM_SET == pReqArgs->GetItemState( SID_ATTR_XWINDOW, FALSE, &pParentItem ) )
+ pParent = ( ( const XWindowItem* ) pParentItem )->GetWindowPtr();
if ( ExecuteChangeProtectionDialog( pParent ) )
{
rReq.Done();
@@ -1164,6 +1155,21 @@ void ScDocShell::Execute( SfxRequest& rReq )
//------------------------------------------------------------------
+void UpdateAcceptChangesDialog()
+{
+ // update "accept changes" dialog
+ //! notify all views
+ SfxViewFrame* pViewFrm = SfxViewFrame::Current();
+ if ( pViewFrm && pViewFrm->HasChildWindow( FID_CHG_ACCEPT ) )
+ {
+ SfxChildWindow* pChild = pViewFrm->GetChildWindow( FID_CHG_ACCEPT );
+ if ( pChild )
+ ((ScAcceptChgDlgWrapper*)pChild)->ReInitDlg();
+ }
+}
+
+//------------------------------------------------------------------
+
BOOL ScDocShell::ExecuteChangeProtectionDialog( Window* _pParent, BOOL bJustQueryIfProtected )
{
BOOL bDone = FALSE;
@@ -1217,15 +1223,7 @@ BOOL ScDocShell::ExecuteChangeProtectionDialog( Window* _pParent, BOOL bJustQuer
}
if ( bProtected != pChangeTrack->IsProtected() )
{
- // update "accept changes" dialog
- //! notify all views
- SfxViewFrame* pViewFrm = SfxViewFrame::Current();
- if ( pViewFrm && pViewFrm->HasChildWindow( FID_CHG_ACCEPT ) )
- {
- SfxChildWindow* pChild = pViewFrm->GetChildWindow( FID_CHG_ACCEPT );
- if ( pChild )
- ((ScAcceptChgDlgWrapper*)pChild)->ReInitDlg();
- }
+ UpdateAcceptChangesDialog();
bDone = TRUE;
}
}
@@ -1291,6 +1289,14 @@ void ScDocShell::DoHardRecalc( BOOL /* bApi */ )
if ( pSh )
pSh->UpdateCharts(TRUE);
+ // set notification flags for "calculate" event (used in SFX_HINT_DATACHANGED broadcast)
+ // (might check for the presence of any formulas on each sheet)
+ SCTAB nTabCount = aDocument.GetTableCount();
+ SCTAB nTab;
+ if (aDocument.HasSheetEventScript( SC_SHEETEVENT_CALCULATE ))
+ for (nTab=0; nTab<nTabCount; nTab++)
+ aDocument.SetCalcNotification(nTab);
+
// CalcAll doesn't broadcast value changes, so SC_HINT_CALCALL is broadcasted globally
// in addition to SFX_HINT_DATACHANGED.
aDocument.BroadcastUno( SfxSimpleHint( SC_HINT_CALCALL ) );
@@ -1298,8 +1304,7 @@ void ScDocShell::DoHardRecalc( BOOL /* bApi */ )
// use hard recalc also to disable stream-copying of all sheets
// (somewhat consistent with charts)
- SCTAB nTabCount = aDocument.GetTableCount();
- for (SCTAB nTab=0; nTab<nTabCount; nTab++)
+ for (nTab=0; nTab<nTabCount; nTab++)
if (aDocument.IsStreamValid(nTab))
aDocument.SetStreamValid(nTab, FALSE);
@@ -1484,12 +1489,12 @@ BOOL ScDocShell::AdjustPrintZoom( const ScRange& rRange )
SCROW nEndRow = rRange.aEnd.Row();
if ( pRepeatRow && nStartRow >= pRepeatRow->aStart.Row() )
{
- nBlkTwipsY += aDocument.FastGetRowHeight( pRepeatRow->aStart.Row(),
+ nBlkTwipsY += aDocument.GetRowHeight( pRepeatRow->aStart.Row(),
pRepeatRow->aEnd.Row(), nTab );
if ( nStartRow <= pRepeatRow->aEnd.Row() )
nStartRow = pRepeatRow->aEnd.Row() + 1;
}
- nBlkTwipsY += aDocument.FastGetRowHeight( nStartRow, nEndRow, nTab );
+ nBlkTwipsY += aDocument.GetRowHeight( nStartRow, nEndRow, nTab );
Size aPhysPage;
long nHdr, nFtr;
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index 46b6b7af3a63..a17279f409a9 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -1441,7 +1441,7 @@ BOOL ScImportExport::Doc2Text( SvStream& rStrm )
for (nRow = nStartRow; nRow <= nEndRow; nRow++)
{
- if (bIncludeFiltered || !pDoc->IsFiltered( nRow, aRange.aStart.Tab() ))
+ if (bIncludeFiltered || !pDoc->RowFiltered( nRow, aRange.aStart.Tab() ))
{
for (nCol = nStartCol; nCol <= nEndCol; nCol++)
{
diff --git a/sc/source/ui/docshell/olinefun.cxx b/sc/source/ui/docshell/olinefun.cxx
index 2f42c77ed5f4..822c74800ab2 100644
--- a/sc/source/ui/docshell/olinefun.cxx
+++ b/sc/source/ui/docshell/olinefun.cxx
@@ -420,7 +420,7 @@ BOOL ScOutlineDocFunc::SelectLevel( SCTAB nTab, BOOL bColumns, USHORT nLevel,
if ( bColumns )
pDoc->ShowCol( static_cast<SCCOL>(i), nTab, bShow );
else
- if ( !bShow || !pDoc->IsFiltered( i,nTab ) )
+ if ( !bShow || !pDoc->RowFiltered( i,nTab ) )
pDoc->ShowRow( i, nTab, bShow );
}
}
@@ -518,7 +518,7 @@ BOOL ScOutlineDocFunc::ShowMarkedOutlines( const ScRange& rRange, BOOL bRecord,
}
}
for ( i=nMin; i<=nMax; i++ )
- if ( !pDoc->IsFiltered( i,nTab ) ) // weggefilterte nicht einblenden
+ if ( !pDoc->RowFiltered( i,nTab ) ) // weggefilterte nicht einblenden
pDoc->ShowRow( i, nTab, TRUE );
pDoc->UpdatePageBreaks( nTab );
@@ -678,7 +678,7 @@ BOOL ScOutlineDocFunc::ShowOutline( SCTAB nTab, BOOL bColumns, USHORT nLevel, US
if ( bColumns )
pDoc->ShowCol( static_cast<SCCOL>(i), nTab, TRUE );
else
- if ( !pDoc->IsFiltered( i,nTab ) ) // weggefilterte nicht einblenden
+ if ( !pDoc->RowFiltered( i,nTab ) ) // weggefilterte nicht einblenden
pDoc->ShowRow( i, nTab, TRUE );
}
@@ -701,6 +701,7 @@ BOOL ScOutlineDocFunc::ShowOutline( SCTAB nTab, BOOL bColumns, USHORT nLevel, US
pArray->SetVisibleBelow( nLevel, nEntry, TRUE, TRUE );
+ pDoc->InvalidatePageBreaks(nTab);
pDoc->UpdatePageBreaks( nTab );
if (bPaint)
@@ -766,6 +767,7 @@ BOOL ScOutlineDocFunc::HideOutline( SCTAB nTab, BOOL bColumns, USHORT nLevel, US
pArray->SetVisibleBelow( nLevel, nEntry, FALSE );
+ pDoc->InvalidatePageBreaks(nTab);
pDoc->UpdatePageBreaks( nTab );
if (bPaint)
diff --git a/sc/source/ui/inc/AccessibleContextBase.hxx b/sc/source/ui/inc/AccessibleContextBase.hxx
index 191f56c22d3d..ecfeff96af39 100644
--- a/sc/source/ui/inc/AccessibleContextBase.hxx
+++ b/sc/source/ui/inc/AccessibleContextBase.hxx
@@ -316,8 +316,6 @@ protected:
/// Use this method to set initial Description without notification
void SetDescription(const rtl::OUString& rDesc) { msDescription = rDesc; }
- void SetRole(sal_Int16 nRole);
-
/// Reference to the parent object.
::com::sun::star::uno::Reference<
::com::sun::star::accessibility::XAccessible> mxParent;
diff --git a/sc/source/ui/inc/docfunc.hxx b/sc/source/ui/inc/docfunc.hxx
index df4ff685816f..c92cc082986d 100644
--- a/sc/source/ui/inc/docfunc.hxx
+++ b/sc/source/ui/inc/docfunc.hxx
@@ -31,6 +31,7 @@
#include <tools/link.hxx>
#include "global.hxx"
#include "formula/grammar.hxx"
+#include "tabbgcolor.hxx"
class ScEditEngineDefaulter;
class SdrUndoAction;
@@ -117,6 +118,9 @@ public:
BOOL RenameTable( SCTAB nTab, const String& rName, BOOL bRecord, BOOL bApi );
BOOL DeleteTable( SCTAB nTab, BOOL bRecord, BOOL bApi );
+ bool SetTabBgColor( SCTAB nTab, const Color& rColor, bool bRecord, bool bApi );
+ bool SetTabBgColor( ScUndoTabColorInfo::List& rUndoTabColorList, bool bRecord, bool bApi );
+
BOOL SetTableVisible( SCTAB nTab, BOOL bVisible, BOOL bApi );
BOOL SetLayoutRTL( SCTAB nTab, BOOL bRTL, BOOL bApi );
diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx
index 09d34c661995..5b4fc6227225 100644..100755
--- a/sc/source/ui/inc/docsh.hxx
+++ b/sc/source/ui/inc/docsh.hxx
@@ -125,7 +125,7 @@ class SC_DLLPUBLIC ScDocShell: public SfxObjectShell, public SfxListener
SC_DLLPRIVATE void InitItems();
SC_DLLPRIVATE void DoEnterHandler();
- SC_DLLPRIVATE void InitOptions();
+ SC_DLLPRIVATE void InitOptions(bool bForLoading);
SC_DLLPRIVATE void ResetDrawObjectShell();
// SUNWS needs a forward declared friend, otherwise types and members
@@ -418,8 +418,20 @@ public:
sal_Bool AcceptStateUpdate() const;
//-->Added by PengYunQuan for Validity Cell Range Picker
ScSheetSaveData* GetSheetSaveData();
+
+ // passwword protection for Calc (derived from SfxObjectShell)
+ // see also: FID_CHG_RECORD, SID_CHG_PROTECT
+ virtual bool IsChangeRecording() const;
+ virtual bool HasChangeRecordProtection() const;
+ virtual void SetChangeRecording( bool bActivate );
+ virtual bool SetProtectionPassword( const String &rPassword );
+ virtual bool GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash );
};
+
+void UpdateAcceptChangesDialog();
+
+
SO2_DECL_REF(ScDocShell)
SO2_IMPL_REF(ScDocShell)
diff --git a/sc/source/ui/inc/dpcontrol.hxx b/sc/source/ui/inc/dpcontrol.hxx
index 40e6167aee48..15f0c9174cc8 100644
--- a/sc/source/ui/inc/dpcontrol.hxx
+++ b/sc/source/ui/inc/dpcontrol.hxx
@@ -76,7 +76,6 @@ public:
void draw();
void getPopupBoundingBox(Point& rPos, Size& rSize) const;
- bool isPopupButton() const;
private:
void drawPopupButton();
@@ -127,9 +126,6 @@ public:
void selectMenuItem(size_t nPos, bool bSelected, bool bSubMenuTimer);
void clearSelectedMenuItem();
ScMenuFloatingWindow* getSubMenuWindow(size_t nPos) const;
- size_t getMenuItemCount() const;
- ::rtl::OUString getMenuItemName(size_t nPos) const;
- bool isMenuItemEnabled(size_t nPos) const;
bool isMenuItemSelected(size_t nPos) const;
size_t getSelectedMenuItem() const;
diff --git a/sc/source/ui/inc/gridwin.hxx b/sc/source/ui/inc/gridwin.hxx
index 4d6ef782aed6..a2283bf2b7de 100644
--- a/sc/source/ui/inc/gridwin.hxx
+++ b/sc/source/ui/inc/gridwin.hxx
@@ -39,6 +39,7 @@
#include <vector>
#include <memory>
+#include <boost/shared_ptr.hpp>
// ---------------------------------------------------------------------------
@@ -112,6 +113,25 @@ private:
::sdr::overlay::OverlayObjectList* mpOOHeader;
::sdr::overlay::OverlayObjectList* mpOOShrink;
+ ::boost::shared_ptr<Rectangle> mpAutoFillRect;
+
+ /**
+ * Stores current visible column and row ranges, used to avoid expensive
+ * operations on objects that are outside visible area.
+ */
+ struct VisibleRange
+ {
+ SCCOL mnCol1;
+ SCCOL mnCol2;
+ SCROW mnRow1;
+ SCROW mnRow2;
+
+ VisibleRange();
+
+ bool isInside(SCCOL nCol, SCROW nRow) const;
+ };
+ VisibleRange maVisibleRange;
+
private:
ScViewData* pViewData;
ScSplitPos eWhich;
diff --git a/sc/source/ui/inc/miscdlgs.hrc b/sc/source/ui/inc/miscdlgs.hrc
index 908a6bd2221c..becd05165a4e 100644
--- a/sc/source/ui/inc/miscdlgs.hrc
+++ b/sc/source/ui/inc/miscdlgs.hrc
@@ -181,3 +181,9 @@
#define BTN_GROUP_ROWS 3
#define STR_GROUP 1
#define STR_UNGROUP 2
+
+// Tab Bg Color
+#define TAB_BG_COLOR_CT_BORDER 1
+#define TAB_BG_COLOR_SET_BGDCOLOR 2
+#define TAB_BG_COLOR_GB_BGDCOLOR 3
+
diff --git a/sc/source/ui/inc/tabbgcolordlg.hxx b/sc/source/ui/inc/tabbgcolordlg.hxx
new file mode 100644
index 000000000000..241fc806022d
--- /dev/null
+++ b/sc/source/ui/inc/tabbgcolordlg.hxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * 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: tabbgcolordlg.hxx,v $
+ * $Revision: 1.0 $
+ *
+ * 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 SC_TABBGCOLORDLG_HXX
+#define SC_TABBGCOLORDLG_HXX
+
+#include <vcl/dialog.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/imagebtn.hxx>
+#include <svtools/valueset.hxx>
+
+//------------------------------------------------------------------------
+
+class ScTabBgColorDlg : public ModalDialog
+{
+public:
+ ScTabBgColorDlg( Window* pParent,
+ const String& rTitle,
+ const String& rTabBgColorNoColorText,
+ const Color& rDefaultColor,
+ ULONG nHelpId );
+ ~ScTabBgColorDlg();
+
+ void GetSelectedColor( Color& rColor ) const;
+
+private:
+ class ScTabBgColorValueSet : public ValueSet
+ {
+ public:
+ ScTabBgColorValueSet(Control* pParent, const ResId& rResId, ScTabBgColorDlg* pTabBgColorDlg);
+
+ virtual void KeyInput( const KeyEvent& rKEvt );
+ private:
+ ScTabBgColorDlg* aTabBgColorDlg;
+ };
+
+ Control aBorderWin;
+ ScTabBgColorValueSet aTabBgColorSet;
+ FixedLine aTabBgColorBox;
+ OKButton aBtnOk;
+ CancelButton aBtnCancel;
+ HelpButton aBtnHelp;
+ Color aTabBgColor;
+ const String aTabBgColorNoColorText;
+ ULONG mnHelpId;
+
+ void FillColorValueSets_Impl();
+
+ DECL_LINK( TabBgColorDblClickHdl_Impl, ValueSet* );
+ DECL_LINK( TabBgColorOKHdl_Impl, OKButton* pBtn );
+};
+
+#endif // SC_TABBGCOLORDLG_HXX
diff --git a/sc/source/ui/inc/undotab.hxx b/sc/source/ui/inc/undotab.hxx
index 276ea3d7e204..c8d135070ab1 100644
--- a/sc/source/ui/inc/undotab.hxx
+++ b/sc/source/ui/inc/undotab.hxx
@@ -32,6 +32,7 @@
#include "markdata.hxx"
#include "formula/grammar.hxx"
#include <tools/color.hxx>
+#include "tabbgcolor.hxx"
#ifndef _SVSTDARR_SHORTS
@@ -223,6 +224,33 @@ private:
void DoChange() const;
};
+class ScUndoTabColor: public ScSimpleUndo
+{
+public:
+ TYPEINFO();
+ ScUndoTabColor(
+ ScDocShell* pNewDocShell,
+ SCTAB nT,
+ const Color& aOTabBgColor,
+ const Color& aNTabBgColor);
+ ScUndoTabColor(
+ ScDocShell* pNewDocShell,
+ const ScUndoTabColorInfo::List& rUndoTabColorList);
+ virtual ~ScUndoTabColor();
+
+ virtual void Undo();
+ virtual void Redo();
+ virtual void Repeat(SfxRepeatTarget& rTarget);
+ virtual BOOL CanRepeat(SfxRepeatTarget& rTarget) const;
+
+virtual String GetComment() const;
+
+private:
+ ScUndoTabColorInfo::List aTabColorList;
+ bool bIsMultipleUndo;
+
+ void DoChange(bool bUndoType) const;
+};
class ScUndoMakeScenario: public ScSimpleUndo
{
diff --git a/sc/source/ui/inc/viewfunc.hxx b/sc/source/ui/inc/viewfunc.hxx
index 21feb272c339..59da2966cc60 100644
--- a/sc/source/ui/inc/viewfunc.hxx
+++ b/sc/source/ui/inc/viewfunc.hxx
@@ -29,6 +29,8 @@
#include "tabview.hxx"
+#include "tabbgcolor.hxx"
+
#ifndef _SVSTDARR_SHORTS
#define _SVSTDARR_SHORTS
#include <svl/svstdarr.hxx>
@@ -273,6 +275,9 @@ public:
SCTAB nCount, const SCTAB* pSrcTabs,
BOOL bLink,SCTAB nTab);
+ bool SetTabBgColor( const Color& rColor, SCTAB nTabNr );
+ bool SetTabBgColor( ScUndoTabColorInfo::List& rUndoSetTabBgColorInfoList );
+
void InsertTableLink( const String& rFile,
const String& rFilter, const String& rOptions,
const String& rTabName );
diff --git a/sc/source/ui/inc/viewutil.hxx b/sc/source/ui/inc/viewutil.hxx
index 8b103d3761d8..eb1c6df2f902 100644
--- a/sc/source/ui/inc/viewutil.hxx
+++ b/sc/source/ui/inc/viewutil.hxx
@@ -68,10 +68,10 @@ public:
static sal_Int32 GetTransliterationType( USHORT nSlotID );
- static bool HasFiltered( const ScRange& rRange, const ScDocument* pDoc );
+ static bool HasFiltered( const ScRange& rRange, ScDocument* pDoc );
/** Fit a range to cover nRows number of unfiltered rows.
@return <TRUE/> if the resulting range covers nRows unfiltered rows. */
- static bool FitToUnfilteredRows( ScRange & rRange, const ScDocument * pDoc, size_t nRows );
+ static bool FitToUnfilteredRows( ScRange & rRange, ScDocument * pDoc, size_t nRows );
static void UnmarkFiltered( ScMarkData& rMark, ScDocument* pDoc );
static void HideDisabledSlot( SfxItemSet& rSet, SfxBindings& rBindings, USHORT nSlotId );
diff --git a/sc/source/ui/miscdlgs/acredlin.src b/sc/source/ui/miscdlgs/acredlin.src
index cad4747acb63..4baa9f3d388c 100644
--- a/sc/source/ui/miscdlgs/acredlin.src
+++ b/sc/source/ui/miscdlgs/acredlin.src
@@ -170,7 +170,6 @@ Menu RID_POPUP_CHANGES
MenuItem
{
Identifier = SC_SUB_SORT ;
- RadioCheck = TRUE ;
SubMenu = Menu
{
ItemList =
diff --git a/sc/source/ui/miscdlgs/makefile.mk b/sc/source/ui/miscdlgs/makefile.mk
index ac210bcfaa83..d34994341ade 100644
--- a/sc/source/ui/miscdlgs/makefile.mk
+++ b/sc/source/ui/miscdlgs/makefile.mk
@@ -46,6 +46,7 @@ SLOFILES = \
$(SLO)$/delcodlg.obj \
$(SLO)$/inscodlg.obj \
$(SLO)$/strindlg.obj \
+ $(SLO)$/tabbgcolordlg.obj \
$(SLO)$/mtrindlg.obj \
$(SLO)$/lbseldlg.obj \
$(SLO)$/filldlg.obj \
diff --git a/sc/source/ui/miscdlgs/tabbgcolordlg.cxx b/sc/source/ui/miscdlgs/tabbgcolordlg.cxx
new file mode 100644
index 000000000000..fdc4c9fd34bf
--- /dev/null
+++ b/sc/source/ui/miscdlgs/tabbgcolordlg.cxx
@@ -0,0 +1,199 @@
+/*************************************************************************
+ *
+ * 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: tabbgcolordlg.cxx,v $
+ * $Revision: 1.0 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+#undef SC_DLLIMPLEMENTATION
+
+//------------------------------------------------------------------
+
+#include "tabbgcolordlg.hxx"
+#include "scresid.hxx"
+#include "miscdlgs.hrc"
+
+#include "tools/debug.hxx"
+#include "tools/color.hxx"
+#include "sfx2/objsh.hxx"
+#include "svx/xtable.hxx"
+#include "svx/drawitem.hxx"
+#include "unotools/pathoptions.hxx"
+#include "tools/resid.hxx"
+#include "editeng/editrids.hrc"
+
+#include <boost/scoped_ptr.hpp>
+
+//==================================================================
+
+#define HDL(hdl) LINK(this,ScTabBgColorDlg,hdl)
+
+ScTabBgColorDlg::ScTabBgColorDlg( Window* pParent,
+ const String& rTitle,
+ const String& rTabBgColorNoColorText,
+ const Color& rDefaultColor,
+ ULONG nHelpId ) :
+ ModalDialog ( pParent, ScResId( RID_SCDLG_TAB_BG_COLOR ) ),
+ aBorderWin ( this, ScResId( TAB_BG_COLOR_CT_BORDER ) ),
+ aTabBgColorSet ( &aBorderWin, ScResId( TAB_BG_COLOR_SET_BGDCOLOR ), this ),
+ aTabBgColorBox ( this, ScResId( TAB_BG_COLOR_GB_BGDCOLOR ) ),
+ aBtnOk ( this, ScResId( BTN_OK ) ),
+ aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
+ aBtnHelp ( this, ScResId( BTN_HELP ) ),
+ aTabBgColor ( rDefaultColor ),
+ aTabBgColorNoColorText ( rTabBgColorNoColorText ),
+ mnHelpId ( nHelpId )
+
+{
+ SetHelpId( nHelpId );
+ this->SetText( rTitle );
+ this->SetStyle(GetStyle() | WB_BORDER | WB_STDFLOATWIN | WB_3DLOOK | WB_DIALOGCONTROL | WB_SYSTEMWINDOW | WB_STANDALONE | WB_HIDE);
+
+ aTabBgColorBox.SetText(rTitle);
+ FillColorValueSets_Impl();
+ aTabBgColorSet.SetDoubleClickHdl( HDL(TabBgColorDblClickHdl_Impl) );
+ aBtnOk.SetClickHdl( HDL(TabBgColorOKHdl_Impl) );
+ FreeResource();
+}
+
+//------------------------------------------------------------------------
+
+void ScTabBgColorDlg::GetSelectedColor( Color& rColor ) const
+{
+ rColor = this->aTabBgColor;
+}
+
+ScTabBgColorDlg::~ScTabBgColorDlg()
+{
+}
+
+void ScTabBgColorDlg::FillColorValueSets_Impl()
+{
+ SfxObjectShell* pDocSh = SfxObjectShell::Current();
+ const SfxPoolItem* pItem = NULL;
+ XColorTable* pColorTable = NULL;
+ ::boost::scoped_ptr<XColorTable> pOwnColorTable; // locally instantiated in case the doc shell doesn't have one.
+
+ const Size aSize15x15 = Size( 15, 15 );
+ const Size aSize10x10 = Size( 10, 10 );
+ const Size aSize5x5 = Size( 5, 5 );
+ USHORT nSelectedItem = 0;
+
+ DBG_ASSERT( pDocSh, "DocShell not found!" );
+
+ if ( pDocSh && ( 0 != ( pItem = pDocSh->GetItem(SID_COLOR_TABLE) ) ) )
+ pColorTable = ( (SvxColorTableItem*)pItem )->GetColorTable();
+ if ( !pColorTable )
+ {
+ pOwnColorTable.reset(new XColorTable(SvtPathOptions().GetPalettePath()));
+ pColorTable = pOwnColorTable.get();
+ }
+ if ( pColorTable )
+ {
+ sal_uInt16 i = 0;
+ long nCount = pColorTable->Count();
+ XColorEntry* pEntry = NULL;
+ Color aColWhite( COL_WHITE );
+ String aStrWhite( ScResId( RID_SVXITEMS_COLOR_WHITE ) );
+ WinBits nBits = ( aTabBgColorSet.GetStyle() | WB_NAMEFIELD | WB_ITEMBORDER | WB_NONEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT | WB_NOPOINTERFOCUS);
+ aTabBgColorSet.SetText( aTabBgColorNoColorText );
+ aTabBgColorSet.SetStyle( nBits );
+ for ( i = 0; i < nCount; i++ )
+ {
+ pEntry = pColorTable->GetColor(i);
+ aTabBgColorSet.InsertItem( i + 1, pEntry->GetColor(), pEntry->GetName() );
+ if (pEntry->GetColor() == aTabBgColor)
+ nSelectedItem = (i + 1);
+ }
+
+ while ( i < 80 )
+ {
+ aTabBgColorSet.InsertItem( i + 1, aColWhite, aStrWhite );
+ i++;
+ }
+
+ if ( nCount > 80 )
+ {
+ aTabBgColorSet.SetStyle( nBits | WB_VSCROLL );
+ }
+ }
+ aTabBgColorSet.SetColCount( 10 );
+ aTabBgColorSet.SetLineCount( 10 );
+ aTabBgColorSet.CalcWindowSizePixel( aSize15x15 );
+ aTabBgColorSet.Format();
+ aTabBgColorSet.SelectItem(nSelectedItem);
+ aTabBgColorSet.Resize();
+}
+
+IMPL_LINK( ScTabBgColorDlg, TabBgColorDblClickHdl_Impl, ValueSet*, EMPTYARG )
+/*
+ Handler, called when color selection is changed
+*/
+{
+ USHORT nItemId = aTabBgColorSet.GetSelectItemId();
+ Color aColor = nItemId ? ( aTabBgColorSet.GetItemColor( nItemId ) ) : Color( COL_AUTO );
+ aTabBgColor = aColor;
+ EndDialog( TRUE );
+ return 0;
+}
+
+IMPL_LINK( ScTabBgColorDlg, TabBgColorOKHdl_Impl, OKButton*, EMPTYARG )
+{
+
+// Handler, called when the OK button is pushed
+
+ USHORT nItemId = aTabBgColorSet.GetSelectItemId();
+ Color aColor = nItemId ? ( aTabBgColorSet.GetItemColor( nItemId ) ) : Color( COL_AUTO );
+ aTabBgColor = aColor;
+ EndDialog( TRUE );
+ return 0;
+}
+
+ScTabBgColorDlg::ScTabBgColorValueSet::ScTabBgColorValueSet( Control* pParent, const ResId& rResId, ScTabBgColorDlg* pTabBgColorDlg ) :
+ ValueSet(pParent, rResId)
+{
+ aTabBgColorDlg = pTabBgColorDlg;
+}
+
+void ScTabBgColorDlg::ScTabBgColorValueSet::KeyInput( const KeyEvent& rKEvt )
+{
+ switch ( rKEvt.GetKeyCode().GetCode() )
+ {
+ case KEY_SPACE:
+ case KEY_RETURN:
+ {
+ USHORT nItemId = GetSelectItemId();
+ const Color& aColor = nItemId ? ( GetItemColor( nItemId ) ) : Color( COL_AUTO );
+ aTabBgColorDlg->aTabBgColor = aColor;
+ aTabBgColorDlg->EndDialog(TRUE);
+ }
+ break;
+ }
+ ValueSet::KeyInput(rKEvt);
+}
diff --git a/sc/source/ui/src/globstr.src b/sc/source/ui/src/globstr.src
index bbf20c436065..6c15762bda6a 100644
--- a/sc/source/ui/src/globstr.src
+++ b/sc/source/ui/src/globstr.src
@@ -1123,6 +1123,14 @@ Resource RID_GLOBSTR
{
Text [ en-US ] = "Rename Sheet" ;
};
+ String STR_UNDO_SET_TAB_BG_COLOR
+ {
+ Text [ en-US ] = "Color Tab" ;
+ };
+ String STR_UNDO_SET_MULTI_TAB_BG_COLOR
+ {
+ Text [ en-US ] = "Color Tabs" ;
+ };
String STR_UNDO_MOVE_TAB
{
Text [ en-US ] = "Move Sheets" ;
diff --git a/sc/source/ui/src/miscdlgs.src b/sc/source/ui/src/miscdlgs.src
index 06a19af7a8a7..6d4761c8589c 100644
--- a/sc/source/ui/src/miscdlgs.src
+++ b/sc/source/ui/src/miscdlgs.src
@@ -538,6 +538,96 @@ ModalDialog RID_SCDLG_STRINPUT
Size = MAP_APPFONT ( 110 , 8 ) ;
};
};
+ModalDialog RID_SCDLG_TAB_BG_COLOR
+{
+ OutputSize = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT ( 118 , 167 ) ;
+ Moveable = TRUE ;
+ Closeable = TRUE ;
+ Control TAB_BG_COLOR_CT_BORDER
+ {
+ Border = TRUE ;
+ Pos = MAP_APPFONT ( 1 , 1 ) ; //12, 32
+ Size = MAP_APPFONT ( 116+2 , 145+2 ) ;
+ DialogControl = TRUE;
+ };
+ Control TAB_BG_COLOR_SET_BGDCOLOR
+ {
+ // * HelpId = HID_BACKGROUND_CTL_BGDCOLORSET ;
+ Hide = FALSE ;
+ Pos = MAP_APPFONT ( 0 , 0 ) ;
+ Size = MAP_APPFONT ( 116 , 145 ) ;
+ TabStop = TRUE ;
+ };
+ CancelButton BTN_CANCEL
+ {
+ Pos = MAP_APPFONT ( 82 , 151 ) ;
+ Size = MAP_APPFONT ( 35 , 14 ) ;
+ TabStop = TRUE ;
+ DefButton = FALSE ;
+ };
+ OKButton BTN_OK
+ {
+ Pos = MAP_APPFONT ( 45 , 151 ) ;
+ Size = MAP_APPFONT ( 35 , 14 ) ;
+ TabStop = TRUE ;
+ DefButton = TRUE ;
+ };
+ HelpButton BTN_HELP
+ {
+ Pos = MAP_APPFONT ( 2 , 151 ) ;
+ Size = MAP_APPFONT ( 35 , 14 ) ;
+ TabStop = TRUE ;
+ DefButton = FALSE ;
+ };
+};
+/*
+ModalDialog RID_SCDLG_TAB_BG_COLOR
+{
+ OutputSize = TRUE ;
+ SVLook = TRUE ;
+ Size = MAP_APPFONT ( 180 , 150 ) ;
+ Moveable = TRUE ;
+ Closeable = TRUE ;
+ Control TAB_BG_COLOR_CT_BORDER
+ {
+ Border = TRUE ;
+ Pos = MAP_APPFONT ( 1 , 1 ) ; //12, 32
+ Size = MAP_APPFONT ( 116+2 , 145+2 ) ;
+ DialogControl = TRUE;
+ };
+ Control TAB_BG_COLOR_SET_BGDCOLOR
+ {
+ // * HelpId = HID_BACKGROUND_CTL_BGDCOLORSET ;
+ Hide = FALSE ;
+ Pos = MAP_APPFONT ( 0 , 0 ) ;
+ Size = MAP_APPFONT ( 116 , 145 ) ;
+ TabStop = TRUE ;
+ };
+ OKButton BTN_OK
+ {
+ Pos = MAP_APPFONT ( 125 , 50 ) ;
+ Size = MAP_APPFONT ( 50 , 14 ) ;
+ TabStop = TRUE ;
+ DefButton = TRUE ;
+ };
+ CancelButton BTN_CANCEL
+ {
+ Pos = MAP_APPFONT ( 125 , 67 ) ;
+ Size = MAP_APPFONT ( 50 , 14 ) ;
+ TabStop = TRUE ;
+ DefButton = FALSE ;
+ };
+ HelpButton BTN_HELP
+ {
+ Pos = MAP_APPFONT ( 125 , 84 ) ;
+ Size = MAP_APPFONT ( 50 , 14 ) ;
+ TabStop = TRUE ;
+ DefButton = FALSE ;
+ };
+};
+*/
/*
ModalDialog RID_SCDLG_MTRINPUT
{
diff --git a/sc/source/ui/src/popup.src b/sc/source/ui/src/popup.src
index abda5c9a0994..9753aa1590e3 100644
--- a/sc/source/ui/src/popup.src
+++ b/sc/source/ui/src/popup.src
@@ -190,6 +190,21 @@ Menu RID_POPUP_TAB
HelpId = FID_TAB_RTL ;
Text [ en-US ] = "S~heet Right-To-Left" ;
};
+ MenuItem
+ {
+ Identifier = FID_TAB_EVENTS ;
+ HelpId = FID_TAB_EVENTS ;
+ Text [ en-US ] = "Sheet E~vents..." ;
+ };
+ //------------------------------
+ MenuItem { Separator = TRUE ; };
+ //------------------------------
+ MenuItem
+ {
+ Identifier = FID_TAB_MENU_SET_TAB_BG_COLOR ;
+ HelpId = FID_TAB_MENU_SET_TAB_BG_COLOR ;
+ Text [ en-US ] = "~Tab Color..." ;
+ };
};
};
diff --git a/sc/source/ui/src/scstring.src b/sc/source/ui/src/scstring.src
index 7f5337e11b89..9c47a42239cc 100644
--- a/sc/source/ui/src/scstring.src
+++ b/sc/source/ui/src/scstring.src
@@ -280,6 +280,14 @@ String SCSTR_RENAMETAB
{
Text [ en-US ] = "Rename Sheet" ;
};
+String SCSTR_SET_TAB_BG_COLOR
+{
+ Text [ en-US ] = "Tab Color" ;
+};
+String SCSTR_NO_TAB_BG_COLOR
+{
+ Text [ en-US ] = "Default" ;
+};
String SCSTR_RENAMEOBJECT
{
Text [ en-US ] = "Name Object";
diff --git a/sc/source/ui/undo/makefile.mk b/sc/source/ui/undo/makefile.mk
index 01edd92f8553..50fab82972ca 100644
--- a/sc/source/ui/undo/makefile.mk
+++ b/sc/source/ui/undo/makefile.mk
@@ -76,7 +76,8 @@ SLOFILES = \
EXCEPTIONSFILES= \
$(SLO)$/undoblk3.obj \
$(SLO)$/undocell.obj \
- $(SLO)$/undostyl.obj
+ $(SLO)$/undostyl.obj \
+ $(SLO)$/undotab.obj
# --- Tagets -------------------------------------------------------
diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx
index a35ba96112e3..c284045c5b11 100644
--- a/sc/source/ui/undo/undoblk.cxx
+++ b/sc/source/ui/undo/undoblk.cxx
@@ -1148,10 +1148,10 @@ ScUndoDragDrop::ScUndoDragDrop( ScDocShell* pNewDocShell,
BOOL bIncludeFiltered = bCut;
if ( !bIncludeFiltered )
{
- // manually find number of non-filtered rows
- SCROW nPastedCount = pDocShell->GetDocument()->GetRowFlagsArray(
- aSrcRange.aStart.Tab()).CountForCondition(
- aSrcRange.aStart.Row(), aSrcRange.aEnd.Row(), CR_FILTERED, 0);
+ // find number of non-filtered rows
+ SCROW nPastedCount = pDocShell->GetDocument()->CountNonFilteredRows(
+ aSrcRange.aStart.Row(), aSrcRange.aEnd.Row(), aSrcRange.aStart.Tab());
+
if ( nPastedCount == 0 )
nPastedCount = 1;
aDestEnd.SetRow( aNewDestPos.Row() + nPastedCount - 1 );
diff --git a/sc/source/ui/undo/undoblk3.cxx b/sc/source/ui/undo/undoblk3.cxx
index 4011d4755ab1..506afeac138e 100644
--- a/sc/source/ui/undo/undoblk3.cxx
+++ b/sc/source/ui/undo/undoblk3.cxx
@@ -1028,17 +1028,20 @@ void __EXPORT ScUndoAutoFormat::Redo()
aDestMark.MarkToMulti();
// wie SC_SIZE_VISOPT
+ SCROW nLastRow = -1;
for (SCROW nRow=nStartY; nRow<=nEndY; nRow++)
{
BYTE nOld = pDoc->GetRowFlags(nRow,nTab);
- if ( (nOld & CR_HIDDEN) == 0 && ( nOld & CR_MANUALSIZE ) )
+ bool bHidden = pDoc->RowHidden(nRow, nTab, nLastRow);
+ if ( !bHidden && ( nOld & CR_MANUALSIZE ) )
pDoc->SetRowFlags( nRow, nTab, nOld & ~CR_MANUALSIZE );
}
pDoc->SetOptimalHeight( nStartY, nEndY, nTab, 0, &aVirtDev,
nPPTX, nPPTY, aZoomX, aZoomY, FALSE );
+ SCCOL nLastCol = -1;
for (SCCOL nCol=nStartX; nCol<=nEndX; nCol++)
- if ((pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN) == 0)
+ if (!pDoc->ColHidden(nCol, nTab, nLastCol))
{
USHORT nThisSize = STD_EXTRA_WIDTH + pDoc->GetOptimalColWidth( nCol, nTab,
&aVirtDev, nPPTX, nPPTY, aZoomX, aZoomY, bFormula,
diff --git a/sc/source/ui/undo/undocell.cxx b/sc/source/ui/undo/undocell.cxx
index 77142bb13799..cc13ce9f1412 100644
--- a/sc/source/ui/undo/undocell.cxx
+++ b/sc/source/ui/undo/undocell.cxx
@@ -568,6 +568,8 @@ void ScUndoPageBreak::DoChange( BOOL bInsertP ) const
pViewShell->InsertPageBreak(bColumn, FALSE);
else
pViewShell->DeletePageBreak(bColumn, FALSE);
+
+ pDocShell->GetDocument()->InvalidatePageBreaks(nTab);
}
}
diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx
index d550d54f1aea..0f7834b2a8df 100644
--- a/sc/source/ui/undo/undodat.cxx
+++ b/sc/source/ui/undo/undodat.cxx
@@ -1027,7 +1027,10 @@ void __EXPORT ScUndoQuery::Undo()
pDoc->SetDBCollection( new ScDBCollection( *pUndoDB ), TRUE );
if (!bCopy)
+ {
+ pDoc->InvalidatePageBreaks(nTab);
pDoc->UpdatePageBreaks( nTab );
+ }
ScRange aDirtyRange( 0 , aQueryParam.nRow1, nTab,
MAXCOL, aQueryParam.nRow2, nTab );
diff --git a/sc/source/ui/undo/undotab.cxx b/sc/source/ui/undo/undotab.cxx
index 17f15af54701..2d8340ad030b 100644
--- a/sc/source/ui/undo/undotab.cxx
+++ b/sc/source/ui/undo/undotab.cxx
@@ -59,6 +59,7 @@
#include "printfun.hxx"
#include "chgtrack.hxx"
#include "tabprotection.hxx"
+#include "viewdata.hxx"
// for ScUndoRenameObject - might me moved to another file later
#include <svx/svditer.hxx>
@@ -90,6 +91,7 @@ TYPEINIT1(ScUndoScenarioFlags, SfxUndoAction);
TYPEINIT1(ScUndoRenameObject, SfxUndoAction);
TYPEINIT1(ScUndoLayoutRTL, SfxUndoAction);
//UNUSED2009-05 TYPEINIT1(ScUndoSetGrammar, SfxUndoAction);
+TYPEINIT1(ScUndoTabColor, SfxUndoAction);
// -----------------------------------------------------------------------
@@ -411,6 +413,8 @@ void ScUndoDeleteTab::Undo()
pDoc->SetActiveScenario( nTab, bActive );
}
pDoc->SetVisible( nTab, pRefUndoDoc->IsVisible( nTab ) );
+ pDoc->SetTabBgColor( nTab, pRefUndoDoc->GetTabBgColor(nTab) );
+ pDoc->SetSheetEvents( nTab, pRefUndoDoc->GetSheetEvents( nTab ) );
if ( pRefUndoDoc->IsTabProtected( nTab ) )
pDoc->SetTabProtection(nTab, pRefUndoDoc->GetTabProtection(nTab));
@@ -776,6 +780,78 @@ BOOL ScUndoCopyTab::CanRepeat(SfxRepeatTarget& /* rTarget */) const
return FALSE;
}
+//---------------------------------------------------------------------------------
+//
+// Tab Bg Color
+//
+
+ScUndoTabColor::ScUndoTabColor(
+ ScDocShell* pNewDocShell, SCTAB nT, const Color& aOTabBgColor, const Color& aNTabBgColor) :
+ ScSimpleUndo( pNewDocShell )
+{
+ ScUndoTabColorInfo aInfo(nT);
+ aInfo.maOldTabBgColor = aOTabBgColor;
+ aInfo.maNewTabBgColor = aNTabBgColor;
+ aTabColorList.push_back(aInfo);
+}
+
+ScUndoTabColor::ScUndoTabColor(
+ ScDocShell* pNewDocShell,
+ const ScUndoTabColorInfo::List& rUndoTabColorList) :
+ ScSimpleUndo(pNewDocShell),
+ aTabColorList(rUndoTabColorList)
+{
+}
+
+ScUndoTabColor::~ScUndoTabColor()
+{
+}
+
+String ScUndoTabColor::GetComment() const
+{
+ if (aTabColorList.size() > 1)
+ return ScGlobal::GetRscString(STR_UNDO_SET_MULTI_TAB_BG_COLOR);
+ return ScGlobal::GetRscString(STR_UNDO_SET_TAB_BG_COLOR);
+}
+
+void ScUndoTabColor::DoChange(bool bUndoType) const
+{
+ ScDocument* pDoc = pDocShell->GetDocument();
+ if (!pDoc)
+ return;
+
+ size_t nTabColorCount = aTabColorList.size();
+ for (size_t i = 0; i < nTabColorCount; ++i)
+ {
+ const ScUndoTabColorInfo& rTabColor = aTabColorList[i];
+ pDoc->SetTabBgColor(rTabColor.mnTabId,
+ bUndoType ? rTabColor.maOldTabBgColor : rTabColor.maNewTabBgColor);
+ }
+
+ pDocShell->PostPaintExtras();
+ ScDocShellModificator aModificator( *pDocShell );
+ aModificator.SetDocumentModified();
+}
+
+void ScUndoTabColor::Undo()
+{
+ DoChange(true);
+}
+
+void ScUndoTabColor::Redo()
+{
+ DoChange(false);
+}
+
+void ScUndoTabColor::Repeat(SfxRepeatTarget& /* rTarget */)
+{
+ // No Repeat
+}
+
+BOOL ScUndoTabColor::CanRepeat(SfxRepeatTarget& /* rTarget */) const
+{
+ return FALSE;
+}
// -----------------------------------------------------------------------
//
diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index 980a73307797..dea7cc056756 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -84,6 +84,7 @@
#include "srchuno.hxx"
#include "targuno.hxx"
#include "tokenuno.hxx"
+#include "eventuno.hxx"
#include "docsh.hxx"
#include "markdata.hxx"
#include "patattr.hxx"
@@ -769,6 +770,7 @@ const SfxItemPropertySet* lcl_GetSheetPropertySet()
{MAP_CHAR_LEN(SC_UNONAME_VALIXML), SC_WID_UNO_VALIXML, &getCppuType((uno::Reference<beans::XPropertySet>*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_CELLVJUS), ATTR_VER_JUSTIFY, &getCppuType((table::CellVertJustify*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNONAME_WRITING), ATTR_WRITINGDIR, &getCppuType((sal_Int16*)0), 0, 0 },
+ {MAP_CHAR_LEN(SC_UNONAME_TABCOLOR), SC_WID_UNO_TABCOLOR, &getCppuType((sal_Int32*)0), 0, 0 },
{MAP_CHAR_LEN(SC_UNO_CODENAME), SC_WID_UNO_CODENAME, &getCppuType(static_cast< const rtl::OUString * >(0)), 0, 0},
{0,0,0,0,0,0}
};
@@ -3375,18 +3377,25 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryVisibleC
ScMarkData aMarkData(*GetMarkData());
ScDocument* pDoc = pDocShell->GetDocument();
- for (SCCOL nCol=0; nCol<=MAXCOL; nCol++)
- if (pDoc->GetColFlags(nCol,nTab) & CR_HIDDEN)
- aMarkData.SetMultiMarkArea( ScRange( nCol,0,nTab, nCol,MAXROW,nTab ), FALSE );
+ SCCOL nCol = 0, nLastCol;
+ while (nCol <= MAXCOL)
+ {
+ if (pDoc->ColHidden(nCol, nTab, nLastCol))
+ // hidden columns. Unselect them.
+ aMarkData.SetMultiMarkArea(ScRange(nCol, 0, nTab, nLastCol, MAXROW, nTab), false);
- //! nur bis zur letzten selektierten Zeile testen?
- ScCompressedArrayIterator< SCROW, BYTE> aIter( pDoc->GetRowFlagsArray( nTab), 0, MAXROW);
- do
+ nCol = nLastCol + 1;
+ }
+
+ SCROW nRow = 0, nLastRow;
+ while (nRow <= MAXROW)
{
- if (*aIter & CR_HIDDEN)
- aMarkData.SetMultiMarkArea( ScRange( 0, aIter.GetRangeStart(),
- nTab, MAXCOL, aIter.GetRangeEnd(), nTab ), FALSE );
- } while (aIter.NextRange());
+ if (pDoc->RowHidden(nRow, nTab, nLastRow))
+ // These rows are hidden. Unselect them.
+ aMarkData.SetMultiMarkArea(ScRange(0, nRow, nTab, MAXCOL, nLastRow, nTab), false);
+
+ nRow = nLastRow + 1;
+ }
ScRangeList aNewRanges;
aMarkData.FillRangeListWithMarks( &aNewRanges, FALSE );
@@ -6837,6 +6846,7 @@ uno::Any SAL_CALL ScTableSheetObj::queryInterface( const uno::Type& rType ) thro
SC_QUERYINTERFACE( sheet::XScenarioEnhanced )
SC_QUERYINTERFACE( sheet::XSheetLinkable )
SC_QUERYINTERFACE( sheet::XExternalSheetName )
+ SC_QUERYINTERFACE( document::XEventsSupplier )
return ScCellRangeObj::queryInterface( rType );
}
@@ -6860,7 +6870,7 @@ uno::Sequence<uno::Type> SAL_CALL ScTableSheetObj::getTypes() throw(uno::Runtime
long nParentLen = aParentTypes.getLength();
const uno::Type* pParentPtr = aParentTypes.getConstArray();
- aTypes.realloc( nParentLen + 17 );
+ aTypes.realloc( nParentLen + 18 );
uno::Type* pPtr = aTypes.getArray();
pPtr[nParentLen + 0] = getCppuType((const uno::Reference<sheet::XSpreadsheet>*)0);
pPtr[nParentLen + 1] = getCppuType((const uno::Reference<container::XNamed>*)0);
@@ -6879,6 +6889,7 @@ uno::Sequence<uno::Type> SAL_CALL ScTableSheetObj::getTypes() throw(uno::Runtime
pPtr[nParentLen +14] = getCppuType((const uno::Reference<sheet::XScenarioEnhanced>*)0);
pPtr[nParentLen +15] = getCppuType((const uno::Reference<sheet::XSheetLinkable>*)0);
pPtr[nParentLen +16] = getCppuType((const uno::Reference<sheet::XExternalSheetName>*)0);
+ pPtr[nParentLen +17] = getCppuType((const uno::Reference<document::XEventsSupplier>*)0);
for (long i=0; i<nParentLen; i++)
pPtr[i] = pParentPtr[i]; // parent types first
@@ -7050,7 +7061,7 @@ uno::Sequence<sheet::TablePageBreakData> SAL_CALL ScTableSheetObj::getColumnPage
SCCOL nCount = 0;
SCCOL nCol;
for (nCol=0; nCol<=MAXCOL; nCol++)
- if (pDoc->GetColFlags( nCol, nTab ) & ( CR_PAGEBREAK | CR_MANUALBREAK ))
+ if (pDoc->HasColBreak(nCol, nTab))
++nCount;
sheet::TablePageBreakData aData;
@@ -7059,11 +7070,11 @@ uno::Sequence<sheet::TablePageBreakData> SAL_CALL ScTableSheetObj::getColumnPage
USHORT nPos = 0;
for (nCol=0; nCol<=MAXCOL; nCol++)
{
- BYTE nFlags = pDoc->GetColFlags( nCol, nTab );
- if (nFlags & ( CR_PAGEBREAK | CR_MANUALBREAK ))
+ ScBreakType nBreak = pDoc->HasColBreak(nCol, nTab);
+ if (nBreak)
{
aData.Position = nCol;
- aData.ManualBreak = ( nFlags & CR_MANUALBREAK ) != 0;
+ aData.ManualBreak = (nBreak & BREAK_MANUAL);
pAry[nPos] = aData;
++nPos;
}
@@ -7092,33 +7103,7 @@ uno::Sequence<sheet::TablePageBreakData> SAL_CALL ScTableSheetObj::getRowPageBre
ScPrintFunc aPrintFunc( pDocSh, pDocSh->GetPrinter(), nTab );
aPrintFunc.UpdatePages();
}
-
- SCROW nCount = pDoc->GetRowFlagsArray( nTab).CountForAnyBitCondition(
- 0, MAXROW, (CR_PAGEBREAK | CR_MANUALBREAK));
-
- uno::Sequence<sheet::TablePageBreakData> aSeq(nCount);
- if (nCount)
- {
- sheet::TablePageBreakData aData;
- sheet::TablePageBreakData* pAry = aSeq.getArray();
- size_t nPos = 0;
- ScCompressedArrayIterator< SCROW, BYTE> aIter( pDoc->GetRowFlagsArray( nTab), 0, MAXROW);
- do
- {
- BYTE nFlags = *aIter;
- if (nFlags & ( CR_PAGEBREAK | CR_MANUALBREAK ))
- {
- for (SCROW nRow = aIter.GetRangeStart(); nRow <= aIter.GetRangeEnd(); ++nRow)
- {
- aData.Position = nRow;
- aData.ManualBreak = ( nFlags & CR_MANUALBREAK ) != 0;
- pAry[nPos] = aData;
- ++nPos;
- }
- }
- } while (aIter.NextRange());
- }
- return aSeq;
+ return pDoc->GetRowBreakData(nTab);
}
return uno::Sequence<sheet::TablePageBreakData>(0);
}
@@ -8160,6 +8145,18 @@ void ScTableSheetObj::setExternalName( const ::rtl::OUString& aUrl, const ::rtl:
}
}
+// XEventsSupplier
+
+uno::Reference<container::XNameReplace> SAL_CALL ScTableSheetObj::getEvents() throw (uno::RuntimeException)
+{
+ ScUnoGuard aGuard;
+ ScDocShell* pDocSh = GetDocShell();
+ if ( pDocSh )
+ return new ScSheetEventsObj( pDocSh, GetTab_Impl() );
+
+ return NULL;
+}
+
// XPropertySet erweitert fuer Sheet-Properties
uno::Reference<beans::XPropertySetInfo> SAL_CALL ScTableSheetObj::getPropertySetInfo()
@@ -8471,15 +8468,24 @@ void ScTableSheetObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEn
pDoc->ClearPrintRanges( nTab ); // if this flag is true, there are no PrintRanges, so Clear clears only the flag.
}
}
- else if ( pEntry->nWID == SC_WID_UNO_CODENAME )
+ else if ( pEntry->nWID == SC_WID_UNO_TABCOLOR )
{
- rtl::OUString aCodeName;
- if ( pDocSh && ( aValue >>= aCodeName ) )
+ sal_Int32 nColor = COL_AUTO;
+ if (aValue >>= nColor)
+ {
+ if (static_cast<ColorData>(nColor) != COL_AUTO)
+ pDoc->SetTabBgColor(nTab, Color(static_cast<ColorData>(nColor)));
+ }
+ }
+ else if ( pEntry->nWID == SC_WID_UNO_CODENAME )
{
- String sNewName( aCodeName );
- pDocSh->GetDocument()->SetCodeName( GetTab_Impl(), sNewName );
+ rtl::OUString aCodeName;
+ if ( pDocSh && ( aValue >>= aCodeName ) )
+ {
+ String sNewName( aCodeName );
+ pDocSh->GetDocument()->SetCodeName( GetTab_Impl(), sNewName );
+ }
}
- }
else
ScCellRangeObj::SetOnePropertyValue(pEntry, aValue); // base class, no Item WID
}
@@ -8618,13 +8624,17 @@ void ScTableSheetObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEn
BOOL bAutoPrint = pDoc->IsPrintEntireSheet( nTab );
ScUnoHelpFunctions::SetBoolInAny( rAny, bAutoPrint );
}
+ else if ( pEntry->nWID == SC_WID_UNO_TABCOLOR )
+ {
+ rAny <<= sal_Int32(pDoc->GetTabBgColor(nTab).GetColor());
+ }
else if ( pEntry->nWID == SC_WID_UNO_CODENAME )
{
- String aCodeName;
- if ( pDocSh )
- pDocSh->GetDocument()->GetCodeName( GetTab_Impl(), aCodeName );
- rAny <<= rtl::OUString( aCodeName );
- }
+ String aCodeName;
+ if ( pDocSh )
+ pDocSh->GetDocument()->GetCodeName( GetTab_Impl(), aCodeName );
+ rAny <<= rtl::OUString( aCodeName );
+ }
else
ScCellRangeObj::GetOnePropertyValue(pEntry, rAny);
}
@@ -8893,8 +8903,9 @@ void ScTableColumnObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
}
else if ( pEntry->nWID == SC_WID_UNO_CELLVIS )
{
- BOOL bVis = !(pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN);
- ScUnoHelpFunctions::SetBoolInAny( rAny, bVis );
+ SCCOL nDummy;
+ bool bHidden = pDoc->ColHidden(nCol, nTab, nDummy);
+ ScUnoHelpFunctions::SetBoolInAny( rAny, !bHidden );
}
else if ( pEntry->nWID == SC_WID_UNO_OWIDTH )
{
@@ -8904,13 +8915,13 @@ void ScTableColumnObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
}
else if ( pEntry->nWID == SC_WID_UNO_NEWPAGE )
{
- BOOL bBreak = ( 0 != (pDoc->GetColFlags( nCol, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak );
+ ScBreakType nBreak = pDoc->HasColBreak(nCol, nTab);
+ ScUnoHelpFunctions::SetBoolInAny( rAny, nBreak );
}
else if ( pEntry->nWID == SC_WID_UNO_MANPAGE )
{
- BOOL bBreak = ( 0 != (pDoc->GetColFlags( nCol, nTab ) & (CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak );
+ ScBreakType nBreak = pDoc->HasColBreak(nCol, nTab);
+ ScUnoHelpFunctions::SetBoolInAny(rAny, (nBreak & BREAK_MANUAL));
}
else
ScCellRangeObj::GetOnePropertyValue(pEntry, rAny);
@@ -8996,12 +9007,7 @@ void ScTableRowObj::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntr
// ScSizeMode eMode = bVis ? SC_SIZE_SHOW : SC_SIZE_DIRECT;
// aFunc.SetWidthOrHeight( FALSE, 1, nRowArr, nTab, eMode, 0, TRUE, TRUE );
// SC_SIZE_DIRECT mit Groesse 0 blendet aus
- BYTE nFlags = pDoc->GetRowFlags(nRow, nTab);
- if (bFil)
- nFlags |= CR_FILTERED;
- else
- nFlags &= ~CR_FILTERED;
- pDoc->SetRowFlags(nRow, nTab, nFlags);
+ pDoc->SetRowFiltered(nRow, nRow, nTab, bFil);
}
else if ( pEntry->nWID == SC_WID_UNO_OHEIGHT )
{
@@ -9053,12 +9059,13 @@ void ScTableRowObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntr
}
else if ( pEntry->nWID == SC_WID_UNO_CELLVIS )
{
- BOOL bVis = !(pDoc->GetRowFlags( nRow, nTab ) & CR_HIDDEN);
- ScUnoHelpFunctions::SetBoolInAny( rAny, bVis );
+ SCROW nDummy;
+ bool bHidden = pDoc->RowHidden(nRow, nTab, nDummy);
+ ScUnoHelpFunctions::SetBoolInAny( rAny, !bHidden );
}
else if ( pEntry->nWID == SC_WID_UNO_CELLFILT )
{
- BOOL bVis = ((pDoc->GetRowFlags( nRow, nTab ) & CR_FILTERED) != 0);
+ bool bVis = pDoc->RowFiltered(nRow, nTab);
ScUnoHelpFunctions::SetBoolInAny( rAny, bVis );
}
else if ( pEntry->nWID == SC_WID_UNO_OHEIGHT )
@@ -9068,13 +9075,13 @@ void ScTableRowObj::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pEntr
}
else if ( pEntry->nWID == SC_WID_UNO_NEWPAGE )
{
- BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nRow, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak );
+ ScBreakType nBreak = pDoc->HasRowBreak(nRow, nTab);
+ ScUnoHelpFunctions::SetBoolInAny( rAny, nBreak );
}
else if ( pEntry->nWID == SC_WID_UNO_MANPAGE )
{
- BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nRow, nTab ) & (CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( rAny, bBreak );
+ ScBreakType nBreak = (pDoc->HasRowBreak(nRow, nTab) & BREAK_MANUAL);
+ ScUnoHelpFunctions::SetBoolInAny( rAny, nBreak );
}
else
ScCellRangeObj::GetOnePropertyValue(pEntry, rAny);
diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 8654de8a429e..8a8081e412d3 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -2569,14 +2569,17 @@ void ScChart2DataSequence::BuildDataCache()
if (!ScRefTokenHelper::getRangeFromToken(aRange, *itr))
continue;
+ SCCOL nLastCol = -1;
+ SCROW nLastRow = -1;
for (SCTAB nTab = aRange.aStart.Tab(); nTab <= aRange.aEnd.Tab(); ++nTab)
{
for (SCCOL nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); ++nCol)
{
for (SCROW nRow = aRange.aStart.Row(); nRow <= aRange.aEnd.Row(); ++nRow)
{
- bool bColHidden = (m_pDocument->GetColFlags(nCol, nTab) & CR_HIDDEN);
- bool bRowHidden = (m_pDocument->GetRowFlags(nRow, nTab) & CR_HIDDEN);
+ bool bColHidden = m_pDocument->ColHidden(nCol, nTab, nLastCol);
+ bool bRowHidden = m_pDocument->RowHidden(nRow, nTab, nLastRow);
+
if (bColHidden || bRowHidden)
{
// hidden cell
diff --git a/sc/source/ui/unoobj/chartuno.cxx b/sc/source/ui/unoobj/chartuno.cxx
index 201c411ea45c..86f59d66a7a4 100644
--- a/sc/source/ui/unoobj/chartuno.cxx
+++ b/sc/source/ui/unoobj/chartuno.cxx
@@ -31,10 +31,12 @@
#include <com/sun/star/embed/Aspects.hpp>
#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/chart2/data/XDataReceiver.hpp>
#include <com/sun/star/chart/ChartDataRowSource.hpp>
#include <com/sun/star/chart2/XChartDocument.hpp>
#include <com/sun/star/embed/Aspects.hpp>
+#include <com/sun/star/table/CellRangeAddress.hpp>
#include <svx/svditer.hxx>
#include <svx/svdoole2.hxx>
@@ -54,9 +56,12 @@
#include "chartlis.hxx"
#include "unoguard.hxx"
#include "chart2uno.hxx"
+#include "convuno.hxx"
using namespace com::sun::star;
+#define PROP_HANDLE_RELATED_CELLRANGES 1
+
//------------------------------------------------------------------------
SC_SIMPLE_SERVICE_INFO( ScChartObj, "ScChartObj", "com.sun.star.table.TableChart" )
@@ -222,7 +227,7 @@ void SAL_CALL ScChartsObj::addNewByName( const rtl::OUString& aName,
xObj = pDocShell->GetEmbeddedObjectContainer().CreateEmbeddedObject( SvGlobalName( SO3_SCH_CLASSID ).GetByteSequence(), aTmp );
if ( xObj.is() )
{
- String aObjName = aNameString; // wirklich eingefuegter Name...
+ String aObjName = aTmp; // wirklich eingefuegter Name...
// Rechteck anpassen
//! Fehler/Exception, wenn leer/ungueltig ???
@@ -451,12 +456,19 @@ sal_Bool SAL_CALL ScChartsObj::hasByName( const rtl::OUString& aName )
//------------------------------------------------------------------------
-ScChartObj::ScChartObj(ScDocShell* pDocSh, SCTAB nT, const String& rN) :
- pDocShell( pDocSh ),
- nTab( nT ),
- aChartName( rN )
+ScChartObj::ScChartObj(ScDocShell* pDocSh, SCTAB nT, const String& rN)
+ :ScChartObj_Base( m_aMutex )
+ ,ScChartObj_PBase( ScChartObj_Base::rBHelper )
+ ,pDocShell( pDocSh )
+ ,nTab( nT )
+ ,aChartName( rN )
{
pDocShell->GetDocument()->AddUnoObject(*this);
+
+ uno::Sequence< table::CellRangeAddress > aInitialPropValue;
+ registerPropertyNoMember( ::rtl::OUString::createFromAscii( "RelatedCellRanges" ),
+ PROP_HANDLE_RELATED_CELLRANGES, beans::PropertyAttribute::MAYBEVOID,
+ ::getCppuType( &aInitialPropValue ), &aInitialPropValue );
}
ScChartObj::~ScChartObj()
@@ -552,6 +564,117 @@ void ScChartObj::Update_Impl( const ScRangeListRef& rRanges, bool bColHeaders, b
}
}
+// ::comphelper::OPropertySetHelper
+
+::cppu::IPropertyArrayHelper& ScChartObj::getInfoHelper()
+{
+ return *ScChartObj_PABase::getArrayHelper();
+}
+
+void ScChartObj::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const uno::Any& rValue ) throw (uno::Exception)
+{
+ switch ( nHandle )
+ {
+ case PROP_HANDLE_RELATED_CELLRANGES:
+ {
+ uno::Sequence< table::CellRangeAddress > aCellRanges;
+ if ( rValue >>= aCellRanges )
+ {
+ ScRangeListRef rRangeList = new ScRangeList();
+ const table::CellRangeAddress* pCellRanges = aCellRanges.getArray();
+ sal_Int32 nCount = aCellRanges.getLength();
+ for ( sal_Int32 i = 0; i < nCount; ++i )
+ {
+ table::CellRangeAddress aCellRange = pCellRanges[ i ];
+ ScRange aRange;
+ ScUnoConversion::FillScRange( aRange, aCellRange );
+ rRangeList->Append( aRange );
+ }
+ ScDocument* pDoc = ( pDocShell ? pDocShell->GetDocument() : NULL );
+ ScChartListenerCollection* pCollection = ( pDoc ? pDoc->GetChartListenerCollection() : NULL );
+ if ( pCollection )
+ {
+ pCollection->ChangeListening( aChartName, rRangeList );
+ }
+ }
+ }
+ break;
+ default:
+ {
+ }
+ break;
+ }
+}
+
+void ScChartObj::getFastPropertyValue( uno::Any& rValue, sal_Int32 nHandle ) const
+{
+ switch ( nHandle )
+ {
+ case PROP_HANDLE_RELATED_CELLRANGES:
+ {
+ ScDocument* pDoc = ( pDocShell ? pDocShell->GetDocument() : NULL );
+ if ( pDoc )
+ {
+ ScRange aEmptyRange;
+ USHORT nIndex = 0;
+ ScChartListener aSearcher( aChartName, pDoc, aEmptyRange );
+ ScChartListenerCollection* pCollection = pDoc->GetChartListenerCollection();
+ if ( pCollection && pCollection->Search( &aSearcher, nIndex ) )
+ {
+ ScChartListener* pListener = static_cast< ScChartListener* >( pCollection->At( nIndex ) );
+ if ( pListener )
+ {
+ const ScRangeListRef& rRangeList = pListener->GetRangeList();
+ if ( rRangeList.Is() )
+ {
+ ULONG nCount = rRangeList->Count();
+ uno::Sequence< table::CellRangeAddress > aCellRanges( nCount );
+ table::CellRangeAddress* pCellRanges = aCellRanges.getArray();
+ for ( USHORT i = 0; i < nCount; ++i )
+ {
+ ScRange aRange( *rRangeList->GetObject( i ) );
+ table::CellRangeAddress aCellRange;
+ ScUnoConversion::FillApiRange( aCellRange, aRange );
+ pCellRanges[ i ] = aCellRange;
+ }
+ rValue <<= aCellRanges;
+ }
+ }
+ }
+ }
+ }
+ break;
+ default:
+ {
+ }
+ break;
+ }
+}
+
+// ::comphelper::OPropertyArrayUsageHelper
+
+::cppu::IPropertyArrayHelper* ScChartObj::createArrayHelper() const
+{
+ uno::Sequence< beans::Property > aProps;
+ describeProperties( aProps );
+ return new ::cppu::OPropertyArrayHelper( aProps );
+}
+
+// XInterface
+
+IMPLEMENT_FORWARD_XINTERFACE2( ScChartObj, ScChartObj_Base, ScChartObj_PBase )
+
+// XTypeProvider
+
+IMPLEMENT_FORWARD_XTYPEPROVIDER2( ScChartObj, ScChartObj_Base, ScChartObj_PBase )
+
+// XComponent
+
+void ScChartObj::disposing()
+{
+ ScChartObj_Base::disposing();
+}
+
// XTableChart
sal_Bool SAL_CALL ScChartObj::getHasColumnHeaders() throw(uno::RuntimeException)
@@ -681,6 +804,13 @@ void SAL_CALL ScChartObj::setName( const rtl::OUString& /* aName */ ) throw(uno:
throw uno::RuntimeException(); // name cannot be changed
}
+// XPropertySet
+
+uno::Reference< beans::XPropertySetInfo > ScChartObj::getPropertySetInfo() throw (uno::RuntimeException)
+{
+ return createPropertySetInfo( getInfoHelper() ) ;
+}
+
//------------------------------------------------------------------------
diff --git a/sc/source/ui/unoobj/confuno.cxx b/sc/source/ui/unoobj/confuno.cxx
index dd8f15359559..75e415b8f018 100644
--- a/sc/source/ui/unoobj/confuno.cxx
+++ b/sc/source/ui/unoobj/confuno.cxx
@@ -88,6 +88,7 @@ const SfxItemPropertyMapEntry* lcl_GetConfigPropertyMap()
{MAP_CHAR_LEN(SC_UNO_LOADREADONLY), 0, &getBooleanCppuType(), 0, 0},
// <--
{MAP_CHAR_LEN(SC_UNO_SHAREDOC), 0, &getBooleanCppuType(), 0, 0},
+ {MAP_CHAR_LEN(SC_UNO_MODIFYPASSWORDINFO), 0, &getCppuType((uno::Sequence< beans::PropertyValue >*)0), 0, 0},
{0,0,0,0,0,0}
};
return aConfigPropertyMap_Impl;
@@ -274,6 +275,20 @@ void SAL_CALL ScDocumentConfiguration::setPropertyValue(
pDocShell->SetSharedXMLFlag( bDocShared );
}
}
+ else if ( aPropertyName.compareToAscii( SC_UNO_MODIFYPASSWORDINFO ) == 0 )
+ {
+ uno::Sequence< beans::PropertyValue > aInfo;
+ if ( !( aValue >>= aInfo ) )
+ throw lang::IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Value of type Sequence<PropertyValue> expected!" ) ),
+ uno::Reference< uno::XInterface >(),
+ 2 );
+
+ if ( !pDocShell->SetModifyPasswordInfo( aInfo ) )
+ throw beans::PropertyVetoException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "The hash is not allowed to be changed now!" ) ),
+ uno::Reference< uno::XInterface >() );
+ }
else
{
ScGridOptions aGridOpt(aViewOpt.GetGridOptions());
@@ -407,6 +422,8 @@ uno::Any SAL_CALL ScDocumentConfiguration::getPropertyValue( const rtl::OUString
{
ScUnoHelpFunctions::SetBoolInAny( aRet, pDocShell->HasSharedXMLFlagSet() );
}
+ else if ( aPropertyName.compareToAscii( SC_UNO_MODIFYPASSWORDINFO ) == 0 )
+ aRet <<= pDocShell->GetModifyPasswordInfo();
else
{
const ScGridOptions& aGridOpt = aViewOpt.GetGridOptions();
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index d9fb4d53e634..6d267d4098ff 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -96,6 +96,7 @@
#include "scmod.hxx"
#include "rangeutl.hxx"
#include "ViewSettingsSequenceDefines.hxx"
+#include "sheetevents.hxx"
#include "sc.hrc"
#include "scresid.hxx"
@@ -367,8 +368,7 @@ ScModelObj::ScModelObj( ScDocShell* pDocSh ) :
pDocShell( pDocSh ),
pPrintFuncCache( NULL ),
pPrinterOptions( NULL ),
- maChangesListeners( m_aMutex ),
- mnXlsWriteProtPass( 0 )
+ maChangesListeners( m_aMutex )
{
// pDocShell may be NULL if this is the base of a ScDocOptionsObj
if ( pDocShell )
@@ -591,6 +591,10 @@ void ScModelObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
// (if a broadcast is added to SetDrawModified, is has to be tested here, too)
DELETEZ( pPrintFuncCache );
+
+ // handle "OnCalculate" sheet events
+ if ( pDocShell && pDocShell->GetDocument()->HasSheetEventScript( SC_SHEETEVENT_CALCULATE ) )
+ HandleCalculateEvents();
}
}
else if ( rHint.ISA( ScPointerChangedHint ) )
@@ -1746,14 +1750,6 @@ void SAL_CALL ScModelObj::setPropertyValue(
if ( aObjName.getLength() )
pDoc->RestoreChartListener( aObjName );
}
- else if ( aString.EqualsAscii( "WriteProtectionPassword" ) )
- {
- /* This is a hack for #160550# to preserve the write-protection
- password in an XLS roundtrip. This property MUST NOT be used
- for any other purpose. This property will be deleted when the
- feature "Write Protection With Password" will be implemented. */
- aValue >>= mnXlsWriteProtPass;
- }
if ( aNewOpt != rOldOpt )
{
@@ -1922,14 +1918,6 @@ uno::Any SAL_CALL ScModelObj::getPropertyValue( const rtl::OUString& aPropertyNa
{
ScUnoHelpFunctions::SetBoolInAny( aRet, (pDocShell->GetCreateMode() == SFX_CREATE_MODE_INTERNAL) );
}
- else if ( aString.EqualsAscii( "WriteProtectionPassword" ) )
- {
- /* This is a hack for #160550# to preserve the write-protection
- password in an XLS roundtrip. This property MUST NOT be used
- for any other purpose. This property will be deleted when the
- feature "Write Protection With Password" will be implemented. */
- aRet <<= mnXlsWriteProtPass;
- }
}
return aRet;
@@ -2092,11 +2080,11 @@ sal_Int64 SAL_CALL ScModelObj::getSomething(
}
if ( rId.getLength() == 16 &&
- 0 == rtl_compareMemory( SfxObjectShell::getUnoTunnelId().getConstArray(),
+ 0 == rtl_compareMemory( SfxObjectShell::getUnoTunnelId().getConstArray(),
rId.getConstArray(), 16 ) )
- {
- return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(pDocShell ));
- }
+ {
+ return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(pDocShell ));
+ }
// aggregated number formats supplier has XUnoTunnel, too
// interface from aggregated object must be obtained via queryAggregation
@@ -2165,7 +2153,23 @@ void ScModelObj::removeChangesListener( const uno::Reference< util::XChangesList
bool ScModelObj::HasChangesListeners() const
{
- return ( maChangesListeners.getLength() > 0 );
+ if ( maChangesListeners.getLength() > 0 )
+ return true;
+
+ if ( pDocShell )
+ {
+ // "change" event set in any sheet?
+ ScDocument* pDoc = pDocShell->GetDocument();
+ SCTAB nTabCount = pDoc->GetTableCount();
+ for (SCTAB nTab = 0; nTab < nTabCount; nTab++)
+ {
+ const ScSheetEvents* pEvents = pDoc->GetSheetEvents(nTab);
+ if (pEvents && pEvents->GetScript(SC_SHEETEVENT_CHANGE))
+ return true;
+ }
+ }
+
+ return false;
}
void ScModelObj::NotifyChanges( const ::rtl::OUString& rOperation, const ScRangeList& rRanges,
@@ -2211,6 +2215,91 @@ void ScModelObj::NotifyChanges( const ::rtl::OUString& rOperation, const ScRange
}
}
}
+
+ // handle sheet events
+ //! separate method with ScMarkData? Then change HasChangesListeners back.
+ if ( rOperation.compareToAscii("cell-change") == 0 && pDocShell )
+ {
+ ScMarkData aMarkData;
+ aMarkData.MarkFromRangeList( rRanges, FALSE );
+ ScDocument* pDoc = pDocShell->GetDocument();
+ SCTAB nTabCount = pDoc->GetTableCount();
+ for (SCTAB nTab = 0; nTab < nTabCount; nTab++)
+ if (aMarkData.GetTableSelect(nTab))
+ {
+ const ScSheetEvents* pEvents = pDoc->GetSheetEvents(nTab);
+ if (pEvents)
+ {
+ const rtl::OUString* pScript = pEvents->GetScript(SC_SHEETEVENT_CHANGE);
+ if (pScript)
+ {
+ ScRangeList aTabRanges; // collect ranges on this sheet
+ ULONG nRangeCount = rRanges.Count();
+ for ( ULONG nIndex = 0; nIndex < nRangeCount; ++nIndex )
+ {
+ ScRange aRange( *rRanges.GetObject( nIndex ) );
+ if ( aRange.aStart.Tab() == nTab )
+ aTabRanges.Append( aRange );
+ }
+ ULONG nTabRangeCount = aTabRanges.Count();
+ if ( nTabRangeCount > 0 )
+ {
+ uno::Reference<uno::XInterface> xTarget;
+ if ( nTabRangeCount == 1 )
+ {
+ ScRange aRange( *aTabRanges.GetObject( 0 ) );
+ if ( aRange.aStart == aRange.aEnd )
+ xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellObj( pDocShell, aRange.aStart ) ) );
+ else
+ xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellRangeObj( pDocShell, aRange ) ) );
+ }
+ else
+ xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellRangesObj( pDocShell, aTabRanges ) ) );
+
+ uno::Sequence<uno::Any> aParams(1);
+ aParams[0] <<= xTarget;
+
+ uno::Any aRet;
+ uno::Sequence<sal_Int16> aOutArgsIndex;
+ uno::Sequence<uno::Any> aOutArgs;
+
+ /*ErrCode eRet =*/ pDocShell->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
+ }
+ }
+ }
+ }
+ }
+}
+
+void ScModelObj::HandleCalculateEvents()
+{
+ if (pDocShell)
+ {
+ ScDocument* pDoc = pDocShell->GetDocument();
+ // don't call events before the document is visible
+ // (might also set a flag on SFX_EVENT_LOADFINISHED and only disable while loading)
+ if ( pDoc->IsDocVisible() )
+ {
+ SCTAB nTabCount = pDoc->GetTableCount();
+ for (SCTAB nTab = 0; nTab < nTabCount; nTab++)
+ {
+ const ScSheetEvents* pEvents = pDoc->GetSheetEvents(nTab);
+ if (pEvents)
+ {
+ const rtl::OUString* pScript = pEvents->GetScript(SC_SHEETEVENT_CALCULATE);
+ if (pScript && pDoc->HasCalcNotification(nTab))
+ {
+ uno::Any aRet;
+ uno::Sequence<uno::Any> aParams;
+ uno::Sequence<sal_Int16> aOutArgsIndex;
+ uno::Sequence<uno::Any> aOutArgs;
+ pDocShell->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
+ }
+ }
+ }
+ }
+ pDoc->ResetCalcNotifications();
+ }
}
//------------------------------------------------------------------------
@@ -2965,7 +3054,8 @@ uno::Any SAL_CALL ScTableColumnsObj::getPropertyValue( const rtl::OUString& aPro
}
else if ( aNameString.EqualsAscii( SC_UNONAME_CELLVIS ) )
{
- BOOL bVis = !(pDoc->GetColFlags( nStartCol, nTab ) & CR_HIDDEN);
+ SCCOL nLastCol;
+ bool bVis = !pDoc->ColHidden(nStartCol, nTab, nLastCol);
ScUnoHelpFunctions::SetBoolInAny( aAny, bVis );
}
else if ( aNameString.EqualsAscii( SC_UNONAME_OWIDTH ) )
@@ -2975,13 +3065,13 @@ uno::Any SAL_CALL ScTableColumnsObj::getPropertyValue( const rtl::OUString& aPro
}
else if ( aNameString.EqualsAscii( SC_UNONAME_NEWPAGE ) )
{
- BOOL bBreak = ( 0 != (pDoc->GetColFlags( nStartCol, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak );
+ ScBreakType nBreak = pDoc->HasColBreak(nStartCol, nTab);
+ ScUnoHelpFunctions::SetBoolInAny( aAny, nBreak );
}
else if ( aNameString.EqualsAscii( SC_UNONAME_MANPAGE ) )
{
- BOOL bBreak = ( 0 != (pDoc->GetColFlags( nStartCol, nTab ) & (CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak );
+ ScBreakType nBreak = pDoc->HasColBreak(nStartCol, nTab);
+ ScUnoHelpFunctions::SetBoolInAny( aAny, (nBreak & BREAK_MANUAL) );
}
return aAny;
@@ -3141,8 +3231,11 @@ void SAL_CALL ScTableRowsObj::setPropertyValue(
sal_Int32 nNewHeight = 0;
if ( pDoc->IsImportingXML() && ( aValue >>= nNewHeight ) )
{
- // used to set the stored row height for rows with optimal height when loading
- pDoc->SetRowHeightRange( nStartRow, nEndRow, nTab, (USHORT)HMMToTwips(nNewHeight) );
+ // used to set the stored row height for rows with optimal height when loading.
+
+ // TODO: It's probably cleaner to use a different property name
+ // for this.
+ pDoc->SetRowHeightOnly( nStartRow, nEndRow, nTab, (USHORT)HMMToTwips(nNewHeight) );
}
else
{
@@ -3173,9 +3266,9 @@ void SAL_CALL ScTableRowsObj::setPropertyValue(
{
//! undo etc.
if (ScUnoHelpFunctions::GetBoolFromAny( aValue ))
- pDoc->GetRowFlagsArrayModifiable( nTab).OrValue( nStartRow, nEndRow, CR_FILTERED);
+ pDoc->SetRowFiltered(nStartRow, nEndRow, nTab, true);
else
- pDoc->GetRowFlagsArrayModifiable( nTab).AndValue( nStartRow, nEndRow, sal::static_int_cast<BYTE>(~CR_FILTERED) );
+ pDoc->SetRowFiltered(nStartRow, nEndRow, nTab, false);
}
else if ( aNameString.EqualsAscii( SC_UNONAME_NEWPAGE) || aNameString.EqualsAscii( SC_UNONAME_MANPAGE) )
{
@@ -3223,12 +3316,13 @@ uno::Any SAL_CALL ScTableRowsObj::getPropertyValue( const rtl::OUString& aProper
}
else if ( aNameString.EqualsAscii( SC_UNONAME_CELLVIS ) )
{
- BOOL bVis = !(pDoc->GetRowFlags( nStartRow, nTab ) & CR_HIDDEN);
+ SCROW nLastRow;
+ bool bVis = !pDoc->RowHidden(nStartRow, nTab, nLastRow);
ScUnoHelpFunctions::SetBoolInAny( aAny, bVis );
}
else if ( aNameString.EqualsAscii( SC_UNONAME_CELLFILT ) )
{
- BOOL bVis = ((pDoc->GetRowFlags( nStartRow, nTab ) & CR_FILTERED) != 0);
+ bool bVis = pDoc->RowFiltered(nStartRow, nTab);
ScUnoHelpFunctions::SetBoolInAny( aAny, bVis );
}
else if ( aNameString.EqualsAscii( SC_UNONAME_OHEIGHT ) )
@@ -3238,13 +3332,13 @@ uno::Any SAL_CALL ScTableRowsObj::getPropertyValue( const rtl::OUString& aProper
}
else if ( aNameString.EqualsAscii( SC_UNONAME_NEWPAGE ) )
{
- BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nStartRow, nTab ) & (CR_PAGEBREAK|CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak );
+ ScBreakType nBreak = pDoc->HasRowBreak(nStartRow, nTab);
+ ScUnoHelpFunctions::SetBoolInAny( aAny, nBreak );
}
else if ( aNameString.EqualsAscii( SC_UNONAME_MANPAGE ) )
{
- BOOL bBreak = ( 0 != (pDoc->GetRowFlags( nStartRow, nTab ) & (CR_MANUALBREAK)) );
- ScUnoHelpFunctions::SetBoolInAny( aAny, bBreak );
+ ScBreakType nBreak = pDoc->HasRowBreak(nStartRow, nTab);
+ ScUnoHelpFunctions::SetBoolInAny( aAny, (nBreak & BREAK_MANUAL) );
}
else if ( aNameString.EqualsAscii( SC_UNONAME_CELLBACK ) || aNameString.EqualsAscii( SC_UNONAME_CELLTRAN ) )
{
diff --git a/sc/source/ui/unoobj/eventuno.cxx b/sc/source/ui/unoobj/eventuno.cxx
new file mode 100755
index 000000000000..d7de00f4cc56
--- /dev/null
+++ b/sc/source/ui/unoobj/eventuno.cxx
@@ -0,0 +1,201 @@
+/*************************************************************************
+ *
+ * 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: tokenuno.cxx,v $
+ * $Revision: 1.6.108.8 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+#include "eventuno.hxx"
+#include "miscuno.hxx"
+#include "unoguard.hxx"
+#include "docsh.hxx"
+#include "sheetevents.hxx"
+#include "unonames.hxx"
+
+using namespace ::com::sun::star;
+
+//------------------------------------------------------------------------
+
+SC_SIMPLE_SERVICE_INFO( ScSheetEventsObj, "ScSheetEventsObj", "com.sun.star.document.Events" )
+
+//------------------------------------------------------------------------
+
+ScSheetEventsObj::ScSheetEventsObj(ScDocShell* pDocSh, SCTAB nT) :
+ mpDocShell( pDocSh ),
+ mnTab( nT )
+{
+ mpDocShell->GetDocument()->AddUnoObject(*this);
+}
+
+ScSheetEventsObj::~ScSheetEventsObj()
+{
+ if (mpDocShell)
+ mpDocShell->GetDocument()->RemoveUnoObject(*this);
+}
+
+void ScSheetEventsObj::Notify( SfxBroadcaster&, const SfxHint& rHint )
+{
+ //! reference update
+ if ( rHint.ISA( SfxSimpleHint ) &&
+ ((const SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING )
+ {
+ mpDocShell = NULL;
+ }
+}
+
+sal_Int32 lcl_GetEventFromName( const rtl::OUString& aName )
+{
+ for (sal_Int32 nEvent=0; nEvent<SC_SHEETEVENT_COUNT; ++nEvent)
+ if ( aName == ScSheetEvents::GetEventName(nEvent) )
+ return nEvent;
+
+ return -1; // not found
+}
+
+// XNameReplace
+
+void SAL_CALL ScSheetEventsObj::replaceByName( const rtl::OUString& aName, const uno::Any& aElement )
+ throw(lang::IllegalArgumentException, container::NoSuchElementException,
+ lang::WrappedTargetException, uno::RuntimeException)
+{
+ ScUnoGuard aGuard;
+ if (!mpDocShell)
+ throw uno::RuntimeException();
+
+ sal_Int32 nEvent = lcl_GetEventFromName(aName);
+ if (nEvent < 0)
+ throw container::NoSuchElementException();
+
+ ScSheetEvents aNewEvents;
+ const ScSheetEvents* pOldEvents = mpDocShell->GetDocument()->GetSheetEvents(mnTab);
+ if (pOldEvents)
+ aNewEvents = *pOldEvents;
+
+ rtl::OUString aScript;
+ if ( aElement.hasValue() ) // empty Any -> reset event
+ {
+ uno::Sequence<beans::PropertyValue> aPropSeq;
+ if ( aElement >>= aPropSeq )
+ {
+ sal_Int32 nPropCount = aPropSeq.getLength();
+ for (sal_Int32 nPos=0; nPos<nPropCount; ++nPos)
+ {
+ const beans::PropertyValue& rProp = aPropSeq[nPos];
+ if ( rProp.Name.compareToAscii( SC_UNO_EVENTTYPE ) == 0 )
+ {
+ rtl::OUString aEventType;
+ if ( rProp.Value >>= aEventType )
+ {
+ // only "Script" is supported
+ if ( aEventType.compareToAscii( SC_UNO_SCRIPT ) != 0 )
+ throw lang::IllegalArgumentException();
+ }
+ }
+ else if ( rProp.Name.compareToAscii( SC_UNO_SCRIPT ) == 0 )
+ rProp.Value >>= aScript;
+ }
+ }
+ }
+ if (aScript.getLength())
+ aNewEvents.SetScript( nEvent, &aScript );
+ else
+ aNewEvents.SetScript( nEvent, NULL ); // reset
+
+ mpDocShell->GetDocument()->SetSheetEvents( mnTab, &aNewEvents );
+ mpDocShell->SetDocumentModified();
+}
+
+// XNameAccess
+
+uno::Any SAL_CALL ScSheetEventsObj::getByName( const rtl::OUString& aName )
+ throw(container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
+{
+ ScUnoGuard aGuard;
+ sal_Int32 nEvent = lcl_GetEventFromName(aName);
+ if (nEvent < 0)
+ throw container::NoSuchElementException();
+
+ const rtl::OUString* pScript = NULL;
+ if (mpDocShell)
+ {
+ const ScSheetEvents* pEvents = mpDocShell->GetDocument()->GetSheetEvents(mnTab);
+ if (pEvents)
+ pScript = pEvents->GetScript(nEvent);
+ }
+
+ uno::Any aRet;
+ if (pScript)
+ {
+ uno::Sequence<beans::PropertyValue> aPropSeq( 2 );
+ aPropSeq[0] = beans::PropertyValue(
+ rtl::OUString::createFromAscii("EventType"), -1,
+ uno::makeAny( rtl::OUString::createFromAscii("Script") ), beans::PropertyState_DIRECT_VALUE );
+ aPropSeq[1] = beans::PropertyValue(
+ rtl::OUString::createFromAscii("Script"), -1,
+ uno::makeAny( *pScript ), beans::PropertyState_DIRECT_VALUE );
+ aRet <<= aPropSeq;
+ }
+ // empty Any if nothing was set
+ return aRet;
+}
+
+uno::Sequence<rtl::OUString> SAL_CALL ScSheetEventsObj::getElementNames() throw(uno::RuntimeException)
+{
+ ScUnoGuard aGuard;
+ uno::Sequence<rtl::OUString> aNames(SC_SHEETEVENT_COUNT);
+ for (sal_Int32 nEvent=0; nEvent<SC_SHEETEVENT_COUNT; ++nEvent)
+ aNames[nEvent] = ScSheetEvents::GetEventName(nEvent);
+ return aNames;
+}
+
+sal_Bool SAL_CALL ScSheetEventsObj::hasByName( const ::rtl::OUString& aName ) throw(uno::RuntimeException)
+{
+ ScUnoGuard aGuard;
+ sal_Int32 nEvent = lcl_GetEventFromName(aName);
+ return (nEvent >= 0);
+}
+
+// XElementAccess
+
+uno::Type SAL_CALL ScSheetEventsObj::getElementType() throw(uno::RuntimeException)
+{
+ ScUnoGuard aGuard;
+ return getCppuType((uno::Sequence<beans::PropertyValue>*)0);
+}
+
+sal_Bool SAL_CALL ScSheetEventsObj::hasElements() throw(uno::RuntimeException)
+{
+ ScUnoGuard aGuard;
+ if (mpDocShell)
+ return sal_True;
+ return sal_False;
+}
+
+
+
diff --git a/sc/source/ui/unoobj/funcuno.cxx b/sc/source/ui/unoobj/funcuno.cxx
index 0c197a8b738d..7012b477050c 100644
--- a/sc/source/ui/unoobj/funcuno.cxx
+++ b/sc/source/ui/unoobj/funcuno.cxx
@@ -34,6 +34,7 @@
#include <sfx2/app.hxx>
#include <svl/itemprop.hxx>
+#include "scitems.hxx"
#include "funcuno.hxx"
#include "miscuno.hxx"
#include "cellsuno.hxx"
@@ -55,6 +56,7 @@
#include "docpool.hxx"
#include "attrib.hxx"
#include "clipparam.hxx"
+#include "dociter.hxx"
using namespace com::sun::star;
@@ -185,6 +187,32 @@ BOOL lcl_CopyData( ScDocument* pSrcDoc, const ScRange& rSrcRange,
pClipDoc->ApplyPatternAreaTab( 0,0, MAXCOL,MAXROW, nSrcTab, aPattern );
}
+ // If the range contains formula cells with default number format,
+ // apply a number format for the formula result
+ ScCellIterator aIter( pClipDoc, rSrcRange );
+ ScBaseCell* pCell = aIter.GetFirst();
+ while (pCell)
+ {
+ if (pCell->GetCellType() == CELLTYPE_FORMULA)
+ {
+ ScAddress aCellPos = aIter.GetPos();
+ sal_uInt32 nFormat = pClipDoc->GetNumberFormat(aCellPos);
+ if ( (nFormat % SV_COUNTRY_LANGUAGE_OFFSET) == 0 )
+ {
+ ScFormulaCell* pFCell = static_cast<ScFormulaCell*>(pCell);
+ USHORT nErrCode = pFCell->GetErrCode();
+ if ( nErrCode == 0 && pFCell->IsValue() )
+ {
+ sal_uInt32 nNewFormat = pFCell->GetStandardFormat( *pClipDoc->GetFormatTable(), nFormat );
+ if ( nNewFormat != nFormat )
+ pClipDoc->ApplyAttr( aCellPos.Col(), aCellPos.Row(), aCellPos.Tab(),
+ SfxUInt32Item( ATTR_VALUE_FORMAT, nNewFormat ) );
+ }
+ }
+ }
+ pCell = aIter.GetNext();
+ }
+
ScMarkData aDestMark;
aDestMark.SelectOneTable( nDestTab );
aDestMark.SetMarkArea( aNewRange );
@@ -199,7 +227,8 @@ BOOL lcl_CopyData( ScDocument* pSrcDoc, const ScRange& rSrcRange,
ScFunctionAccess::ScFunctionAccess() :
pOptions( NULL ),
aPropertyMap( ScDocOptionsHelper::GetPropertyMap() ),
- bInvalid( FALSE )
+ mbArray( true ), // default according to behaviour of older Office versions
+ mbValid( true )
{
StartListening( *SFX_APP() ); // for SFX_HINT_DEINITIALIZING
}
@@ -216,7 +245,7 @@ void ScFunctionAccess::Notify( SfxBroadcaster&, const SfxHint& rHint )
{
// document must not be used anymore
aDocCache.Clear();
- bInvalid = TRUE;
+ mbValid = false;
}
}
@@ -288,14 +317,22 @@ void SAL_CALL ScFunctionAccess::setPropertyValue(
{
ScUnoGuard aGuard;
- if ( !pOptions )
- pOptions = new ScDocOptions();
+ if( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsArrayFunction" ) ) )
+ {
+ if( !(aValue >>= mbArray) )
+ throw lang::IllegalArgumentException();
+ }
+ else
+ {
+ if ( !pOptions )
+ pOptions = new ScDocOptions();
- // options aren't initialized from configuration - always get the same default behaviour
+ // options aren't initialized from configuration - always get the same default behaviour
- BOOL bDone = ScDocOptionsHelper::setPropertyValue( *pOptions, aPropertyMap, aPropertyName, aValue );
- if (!bDone)
- throw beans::UnknownPropertyException();
+ BOOL bDone = ScDocOptionsHelper::setPropertyValue( *pOptions, aPropertyMap, aPropertyName, aValue );
+ if (!bDone)
+ throw beans::UnknownPropertyException();
+ }
}
uno::Any SAL_CALL ScFunctionAccess::getPropertyValue( const rtl::OUString& aPropertyName )
@@ -304,6 +341,9 @@ uno::Any SAL_CALL ScFunctionAccess::getPropertyValue( const rtl::OUString& aProp
{
ScUnoGuard aGuard;
+ if( aPropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "IsArrayFunction" ) ) )
+ return uno::Any( mbArray );
+
if ( !pOptions )
pOptions = new ScDocOptions();
@@ -497,7 +537,7 @@ uno::Any SAL_CALL ScFunctionAccess::callFunction( const rtl::OUString& aName,
{
ScUnoGuard aGuard;
- if (bInvalid)
+ if (!mbValid)
throw uno::RuntimeException();
// use cached document if not in use, temporary document otherwise
@@ -556,12 +596,13 @@ uno::Any SAL_CALL ScFunctionAccess::callFunction( const rtl::OUString& aName,
uno::TypeClass eClass = rArg.getValueTypeClass();
uno::Type aType = rArg.getValueType();
if ( eClass == uno::TypeClass_BYTE ||
- eClass == uno::TypeClass_SHORT ||
- eClass == uno::TypeClass_UNSIGNED_SHORT ||
- eClass == uno::TypeClass_LONG ||
- eClass == uno::TypeClass_UNSIGNED_LONG ||
- eClass == uno::TypeClass_FLOAT ||
- eClass == uno::TypeClass_DOUBLE )
+ eClass == uno::TypeClass_BOOLEAN ||
+ eClass == uno::TypeClass_SHORT ||
+ eClass == uno::TypeClass_UNSIGNED_SHORT ||
+ eClass == uno::TypeClass_LONG ||
+ eClass == uno::TypeClass_UNSIGNED_LONG ||
+ eClass == uno::TypeClass_FLOAT ||
+ eClass == uno::TypeClass_DOUBLE )
{
// #87871# accept integer types because Basic passes a floating point
// variable as byte, short or long if it's an integer number.
@@ -650,13 +691,13 @@ uno::Any SAL_CALL ScFunctionAccess::callFunction( const rtl::OUString& aName,
// GRAM_PODF_A1 doesn't really matter for the token array but fits with
// other API compatibility grammars.
ScFormulaCell* pFormula = new ScFormulaCell( pDoc, aFormulaPos,
- &aTokenArr,formula::FormulaGrammar::GRAM_PODF_A1, MM_FORMULA );
+ &aTokenArr, formula::FormulaGrammar::GRAM_PODF_A1, (BYTE)(mbArray ? MM_FORMULA : MM_NONE) );
pDoc->PutCell( aFormulaPos, pFormula ); //! necessary?
// call GetMatrix before GetErrCode because GetMatrix always recalculates
// if there is no matrix result
- const ScMatrix* pMat = pFormula->GetMatrix();
+ const ScMatrix* pMat = mbArray ? pFormula->GetMatrix() : 0;
USHORT nErrCode = pFormula->GetErrCode();
if ( nErrCode == 0 )
{
diff --git a/sc/source/ui/unoobj/makefile.mk b/sc/source/ui/unoobj/makefile.mk
index 35fdf164bf92..36c3493ceefc 100644
--- a/sc/source/ui/unoobj/makefile.mk
+++ b/sc/source/ui/unoobj/makefile.mk
@@ -79,6 +79,7 @@ SLO1FILES = \
$(SLO)$/filtuno.obj \
$(SLO)$/unodoc.obj \
$(SLO)$/addruno.obj \
+ $(SLO)$/eventuno.obj \
$(SLO)$/listenercalls.obj \
$(SLO)$/cellvaluebinding.obj \
$(SLO)$/celllistsource.obj \
diff --git a/sc/source/ui/unoobj/scdetect.cxx b/sc/source/ui/unoobj/scdetect.cxx
index 80cb88595b11..03d6d14a3ac7 100644..100755
--- a/sc/source/ui/unoobj/scdetect.cxx
+++ b/sc/source/ui/unoobj/scdetect.cxx
@@ -298,7 +298,7 @@ static BOOL lcl_IsAnyXMLFilter( const SfxFilter* pFilter )
}
else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("InteractionHandler")) )
lDescriptor[nProperty].Value >>= xInteraction;
- else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RapairPackage")) )
+ else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RepairPackage")) )
lDescriptor[nProperty].Value >>= bRepairPackage;
else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("DocumentTitle")) )
nIndexOfDocumentTitle = nProperty;
diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx
index 15fb8183a88f..d10d3ba54f86 100644
--- a/sc/source/ui/unoobj/viewuno.cxx
+++ b/sc/source/ui/unoobj/viewuno.cxx
@@ -66,7 +66,9 @@
#include "scmod.hxx"
#include "appoptio.hxx"
#include "gridwin.hxx"
+#include "sheetevents.hxx"
#include <com/sun/star/view/DocumentZoomType.hpp>
+#include <com/sun/star/awt/MouseButton.hpp>
#include "AccessibilityHints.hxx"
#include <svx/sdrhittesthelper.hxx>
@@ -476,9 +478,11 @@ ScTabViewObj::ScTabViewObj( ScTabViewShell* pViewSh ) :
aPropSet( lcl_GetViewOptPropertyMap() ),
aMouseClickHandlers( 0 ),
aActivationListeners( 0 ),
+ nPreviousTab( 0 ),
bDrawSelModeSet(sal_False)
{
- //! Listening oder so
+ if (pViewSh)
+ nPreviousTab = pViewSh->GetViewData()->GetTabNo();
}
ScTabViewObj::~ScTabViewObj()
@@ -529,15 +533,44 @@ void SAL_CALL ScTabViewObj::release() throw()
SfxBaseController::release();
}
+void lcl_CallActivate( ScDocShell* pDocSh, SCTAB nTab, sal_Int32 nEvent )
+{
+ ScDocument* pDoc = pDocSh->GetDocument();
+ // when deleting a sheet, nPreviousTab can be invalid
+ // (could be handled with reference updates)
+ if (!pDoc->HasTable(nTab))
+ return;
+
+ const ScSheetEvents* pEvents = pDoc->GetSheetEvents(nTab);
+ if (pEvents)
+ {
+ const rtl::OUString* pScript = pEvents->GetScript(nEvent);
+ if (pScript)
+ {
+ uno::Any aRet;
+ uno::Sequence<uno::Any> aParams;
+ uno::Sequence<sal_Int16> aOutArgsIndex;
+ uno::Sequence<uno::Any> aOutArgs;
+
+ /*ErrCode eRet =*/ pDocSh->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
+ }
+ }
+}
+
void ScTabViewObj::SheetChanged()
{
- if (aActivationListeners.Count() > 0 && GetViewShell())
+ if ( !GetViewShell() )
+ return;
+
+ ScViewData* pViewData = GetViewShell()->GetViewData();
+ ScDocShell* pDocSh = pViewData->GetDocShell();
+ if (aActivationListeners.Count() > 0)
{
sheet::ActivationEvent aEvent;
uno::Reference< sheet::XSpreadsheetView > xView(this);
uno::Reference< uno::XInterface > xSource(xView, uno::UNO_QUERY);
aEvent.Source = xSource;
- aEvent.ActiveSheet = new ScTableSheetObj(GetViewShell()->GetViewData()->GetDocShell(), GetViewShell()->GetViewData()->GetTabNo());
+ aEvent.ActiveSheet = new ScTableSheetObj(pDocSh, pViewData->GetTabNo());
for ( USHORT n=0; n<aActivationListeners.Count(); n++ )
{
try
@@ -551,6 +584,15 @@ void ScTabViewObj::SheetChanged()
}
}
}
+
+ // handle sheet events
+ SCTAB nNewTab = pViewData->GetTabNo();
+ if ( nNewTab != nPreviousTab )
+ {
+ lcl_CallActivate( pDocSh, nPreviousTab, SC_SHEETEVENT_UNFOCUS );
+ lcl_CallActivate( pDocSh, nNewTab, SC_SHEETEVENT_FOCUS );
+ }
+ nPreviousTab = nNewTab;
}
uno::Sequence<uno::Type> SAL_CALL ScTabViewObj::getTypes() throw(uno::RuntimeException)
@@ -1194,6 +1236,22 @@ uno::Reference< uno::XInterface > ScTabViewObj::GetClickedObject(const Point& rP
return xTarget;
}
+bool ScTabViewObj::IsMouseListening() const
+{
+ if ( aMouseClickHandlers.Count() > 0 )
+ return true;
+
+ // also include sheet events, because MousePressed must be called for them
+ ScTabViewShell* pViewSh = GetViewShell();
+ ScViewData* pViewData = pViewSh->GetViewData();
+ const ScSheetEvents* pEvents = pViewData->GetDocument()->GetSheetEvents(pViewData->GetTabNo());
+ if ( pEvents && ( pEvents->GetScript(SC_SHEETEVENT_RIGHTCLICK) != NULL ||
+ pEvents->GetScript(SC_SHEETEVENT_DOUBLECLICK) != NULL ) )
+ return true;
+
+ return false;
+}
+
sal_Bool ScTabViewObj::MousePressed( const awt::MouseEvent& e )
throw (::uno::RuntimeException)
{
@@ -1229,6 +1287,50 @@ sal_Bool ScTabViewObj::MousePressed( const awt::MouseEvent& e )
}
}
}
+
+ // handle sheet events
+ bool bDoubleClick = ( e.Buttons == awt::MouseButton::LEFT && e.ClickCount == 2 );
+ bool bRightClick = ( e.Buttons == awt::MouseButton::RIGHT && e.ClickCount == 1 );
+ if ( ( bDoubleClick || bRightClick ) && !bReturn )
+ {
+ sal_Int32 nEvent = bDoubleClick ? SC_SHEETEVENT_DOUBLECLICK : SC_SHEETEVENT_RIGHTCLICK;
+
+ ScTabViewShell* pViewSh = GetViewShell();
+ ScViewData* pViewData = pViewSh->GetViewData();
+ ScDocShell* pDocSh = pViewData->GetDocShell();
+ ScDocument* pDoc = pDocSh->GetDocument();
+ SCTAB nTab = pViewData->GetTabNo();
+ const ScSheetEvents* pEvents = pDoc->GetSheetEvents(nTab);
+ if (pEvents)
+ {
+ const rtl::OUString* pScript = pEvents->GetScript(nEvent);
+ if (pScript)
+ {
+ // the macro parameter is the clicked object, as in the mousePressed call above
+ uno::Reference< uno::XInterface > xTarget = GetClickedObject(Point(e.X, e.Y));
+ if (xTarget.is())
+ {
+ uno::Sequence<uno::Any> aParams(1);
+ aParams[0] <<= xTarget;
+
+ uno::Any aRet;
+ uno::Sequence<sal_Int16> aOutArgsIndex;
+ uno::Sequence<uno::Any> aOutArgs;
+
+ /*ErrCode eRet =*/ pDocSh->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
+
+ // look for a boolean return value of true
+ sal_Bool bRetValue = sal_False;
+ if (aRet >>= bRetValue)
+ {
+ if (bRetValue)
+ bReturn = sal_True;
+ }
+ }
+ }
+ }
+ }
+
return bReturn;
}
@@ -1702,6 +1804,30 @@ void ScTabViewObj::SelectionChanged()
aEvent.Source.set(static_cast<cppu::OWeakObject*>(this));
for ( USHORT n=0; n<aSelectionListeners.Count(); n++ )
(*aSelectionListeners[n])->selectionChanged( aEvent );
+
+ // handle sheet events
+ ScTabViewShell* pViewSh = GetViewShell();
+ ScViewData* pViewData = pViewSh->GetViewData();
+ ScDocShell* pDocSh = pViewData->GetDocShell();
+ ScDocument* pDoc = pDocSh->GetDocument();
+ SCTAB nTab = pViewData->GetTabNo();
+ const ScSheetEvents* pEvents = pDoc->GetSheetEvents(nTab);
+ if (pEvents)
+ {
+ const rtl::OUString* pScript = pEvents->GetScript(SC_SHEETEVENT_SELECT);
+ if (pScript)
+ {
+ // the macro parameter is the selection as returned by getSelection
+ uno::Sequence<uno::Any> aParams(1);
+ aParams[0] = getSelection();
+
+ uno::Any aRet;
+ uno::Sequence<sal_Int16> aOutArgsIndex;
+ uno::Sequence<uno::Any> aOutArgs;
+
+ /*ErrCode eRet =*/ pDocSh->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs );
+ }
+ }
}
diff --git a/sc/source/ui/vba/makefile.mk b/sc/source/ui/vba/makefile.mk
index 00a26e2f94de..0a84b8dd12a5 100644
--- a/sc/source/ui/vba/makefile.mk
+++ b/sc/source/ui/vba/makefile.mk
@@ -78,28 +78,31 @@ SLOFILES= \
$(SLO)$/vbaborders.obj \
$(SLO)$/vbacharacters.obj \
$(SLO)$/vbavalidation.obj \
- $(SLO)$/vbaoleobject.obj \
- $(SLO)$/vbaoleobjects.obj \
- $(SLO)$/vbatextboxshape.obj \
- $(SLO)$/vbapane.obj \
- $(SLO)$/vbatextframe.obj \
- $(SLO)$/vbacharttitle.obj \
- $(SLO)$/vbacharts.obj \
- $(SLO)$/vbaaxistitle.obj \
- $(SLO)$/vbaaxes.obj \
- $(SLO)$/vbaaxis.obj \
- $(SLO)$/vbaformat.obj \
- $(SLO)$/vbacondition.obj \
- $(SLO)$/vbaformatcondition.obj \
- $(SLO)$/vbaformatconditions.obj \
- $(SLO)$/vbastyle.obj \
- $(SLO)$/vbastyles.obj \
- $(SLO)$/vbaassistant.obj \
- $(SLO)$/vbahyperlink.obj \
- $(SLO)$/vbapagesetup.obj \
- $(SLO)$/vbapagebreak.obj \
- $(SLO)$/vbapagebreaks.obj \
- $(SLO)$/service.obj
+ $(SLO)$/vbasheetobject.obj \
+ $(SLO)$/vbasheetobjects.obj \
+ $(SLO)$/vbaoleobject.obj \
+ $(SLO)$/vbaoleobjects.obj \
+ $(SLO)$/vbatextboxshape.obj \
+ $(SLO)$/vbapane.obj \
+ $(SLO)$/vbatextframe.obj \
+ $(SLO)$/vbacharttitle.obj \
+ $(SLO)$/vbacharts.obj \
+ $(SLO)$/vbaaxistitle.obj \
+ $(SLO)$/vbaaxes.obj \
+ $(SLO)$/vbaaxis.obj \
+ $(SLO)$/vbaformat.obj \
+ $(SLO)$/vbacondition.obj \
+ $(SLO)$/vbaformatcondition.obj \
+ $(SLO)$/vbaformatconditions.obj \
+ $(SLO)$/vbastyle.obj \
+ $(SLO)$/vbastyles.obj \
+ $(SLO)$/vbaassistant.obj \
+ $(SLO)$/vbahyperlink.obj \
+ $(SLO)$/vbahyperlinks.obj \
+ $(SLO)$/vbapagesetup.obj \
+ $(SLO)$/vbapagebreak.obj \
+ $(SLO)$/vbapagebreaks.obj \
+ $(SLO)$/service.obj
.ENDIF
# --- Targets ------------------------------------------------------
diff --git a/sc/source/ui/vba/vbaapplication.cxx b/sc/source/ui/vba/vbaapplication.cxx
index 3d5af01acef1..aea8d8bc11d4 100644
--- a/sc/source/ui/vba/vbaapplication.cxx
+++ b/sc/source/ui/vba/vbaapplication.cxx
@@ -114,7 +114,10 @@ public:
ActiveWorkbook( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext) : ScVbaWorkbook( xParent, xContext ){}
};
-ScVbaApplication::ScVbaApplication( const uno::Reference<uno::XComponentContext >& xContext ): ScVbaApplication_BASE( xContext ), m_xCalculation( excel::XlCalculation::xlCalculationAutomatic )
+ScVbaApplication::ScVbaApplication( const uno::Reference<uno::XComponentContext >& xContext ) :
+ ScVbaApplication_BASE( xContext ),
+ m_xCalculation( excel::XlCalculation::xlCalculationAutomatic ),
+ m_xDisplayAlerts( sal_True)
{
}
@@ -127,6 +130,66 @@ SfxObjectShell* ScVbaApplication::GetDocShell( const uno::Reference< frame::XMod
return static_cast< SfxObjectShell* >( excel::getDocShell( xModel ) );
}
+::rtl::OUString SAL_CALL
+ScVbaApplication::getExactName( const ::rtl::OUString& aApproximateName ) throw (uno::RuntimeException)
+{
+ uno::Reference< beans::XExactName > xWSF( new ScVbaWSFunction( this, mxContext ) );
+ return xWSF->getExactName( aApproximateName );
+}
+
+uno::Reference< beans::XIntrospectionAccess > SAL_CALL
+ScVbaApplication::getIntrospection() throw(css::uno::RuntimeException)
+{
+ uno::Reference< script::XInvocation > xWSF( new ScVbaWSFunction( this, mxContext ) );
+ return xWSF->getIntrospection();
+}
+
+uno::Any SAL_CALL
+ScVbaApplication::invoke( const ::rtl::OUString& FunctionName, const uno::Sequence< uno::Any >& Params, uno::Sequence< sal_Int16 >& OutParamIndex, uno::Sequence< uno::Any >& OutParam) throw(lang::IllegalArgumentException, script::CannotConvertException, reflection::InvocationTargetException, uno::RuntimeException)
+{
+ /* When calling the functions directly at the Application object, no runtime
+ errors are thrown, but the error is inserted into the return value. */
+ uno::Any aAny;
+ try
+ {
+ uno::Reference< script::XInvocation > xWSF( new ScVbaWSFunction( this, mxContext ) );
+ aAny = xWSF->invoke( FunctionName, Params, OutParamIndex, OutParam );
+ }
+ catch( uno::Exception& )
+ {
+ aAny <<= script::BasicErrorException( ::rtl::OUString(), uno::Reference< uno::XInterface >(), 1000, ::rtl::OUString() );
+ }
+ return aAny;
+}
+
+void SAL_CALL
+ScVbaApplication::setValue( const ::rtl::OUString& PropertyName, const uno::Any& Value ) throw(beans::UnknownPropertyException, script::CannotConvertException, reflection::InvocationTargetException, uno::RuntimeException)
+{
+ uno::Reference< script::XInvocation > xWSF( new ScVbaWSFunction( this, mxContext ) );
+ xWSF->setValue( PropertyName, Value );
+}
+
+uno::Any SAL_CALL
+ScVbaApplication::getValue( const ::rtl::OUString& PropertyName ) throw(beans::UnknownPropertyException, uno::RuntimeException)
+{
+ uno::Reference< script::XInvocation > xWSF( new ScVbaWSFunction( this, mxContext ) );
+ return xWSF->getValue( PropertyName );
+}
+
+sal_Bool SAL_CALL
+ScVbaApplication::hasMethod( const ::rtl::OUString& Name ) throw(uno::RuntimeException)
+{
+ uno::Reference< script::XInvocation > xWSF( new ScVbaWSFunction( this, mxContext ) );
+ return xWSF->hasMethod( Name );
+}
+
+sal_Bool SAL_CALL
+ScVbaApplication::hasProperty( const ::rtl::OUString& Name ) throw(uno::RuntimeException)
+{
+ uno::Reference< script::XInvocation > xWSF( new ScVbaWSFunction( this, mxContext ) );
+ return xWSF->hasProperty( Name );
+}
+
uno::Reference< excel::XWorkbook >
ScVbaApplication::getActiveWorkbook() throw (uno::RuntimeException)
{
@@ -190,7 +253,7 @@ ScVbaApplication::getSelection() throw (uno::RuntimeException)
}
else
{
- throw uno::RuntimeException( sImpementaionName + rtl::OUString::createFromAscii(" donot be surpported"), uno::Reference< uno::XInterface >() );
+ throw uno::RuntimeException( sImpementaionName + rtl::OUString::createFromAscii(" not suported"), uno::Reference< uno::XInterface >() );
}
}
@@ -244,7 +307,7 @@ ScVbaApplication::Worksheets( const uno::Any& aIndex ) throw (uno::RuntimeExcept
uno::Any SAL_CALL
ScVbaApplication::WorksheetFunction( ) throw (::com::sun::star::uno::RuntimeException)
{
- return uno::makeAny( uno::Reference< script::XInvocation >( new ScVbaWSFunction( this, mxContext) ) );
+ return uno::makeAny( uno::Reference< script::XInvocation >( new ScVbaWSFunction( this, mxContext ) ) );
}
uno::Any SAL_CALL
@@ -270,7 +333,10 @@ uno::Reference< excel::XWindow > SAL_CALL
ScVbaApplication::getActiveWindow() throw (uno::RuntimeException)
{
// #FIXME sofar can't determine Parent
- return new ScVbaWindow( uno::Reference< XHelperInterface >(), mxContext, getCurrentDocument() );
+ uno::Reference< frame::XModel > xModel = getCurrentDocument();
+ ScVbaWindow* pWin = new ScVbaWindow( uno::Reference< XHelperInterface >(), mxContext, xModel );
+ uno::Reference< excel::XWindow > xWin( pWin );
+ return xWin;
}
uno::Any SAL_CALL
@@ -321,23 +387,6 @@ ScVbaApplication::setStatusBar( const uno::Any& _statusbar ) throw (uno::Runtime
uno::Reference< uno::XInterface >() );
}
-double SAL_CALL
-ScVbaApplication::CountA( const uno::Any& arg1 ) throw (uno::RuntimeException)
-{
- double result = 0;
- uno::Reference< script::XInvocation > xInvoc( WorksheetFunction(), uno::UNO_QUERY_THROW );
- if ( xInvoc.is() )
- {
- static rtl::OUString FunctionName( RTL_CONSTASCII_USTRINGPARAM("CountA" ) );
- uno::Sequence< uno::Any > Params(1);
- Params[0] = arg1;
- uno::Sequence< sal_Int16 > OutParamIndex;
- uno::Sequence< uno::Any > OutParam;
- xInvoc->invoke( FunctionName, Params, OutParamIndex, OutParam ) >>= result;
- }
- return result;
-}
-
::sal_Int32 SAL_CALL
ScVbaApplication::getCalculation() throw (uno::RuntimeException)
{
@@ -482,8 +531,11 @@ ScVbaApplication::GoTo( const uno::Any& Reference, const uno::Any& Scroll ) thro
ScGridWindow* gridWindow = (ScGridWindow*)pShell->GetWindow();
try
{
- uno::Reference< excel::XRange > xVbaSheetRange = ScVbaRange::getRangeObjectForName( mxContext, sRangeName, excel::getDocShell( xModel ), formula::FormulaGrammar::CONV_XL_R1C1 );
-;
+ // FIXME: pass proper Worksheet parent
+ uno::Reference< excel::XRange > xVbaSheetRange = ScVbaRange::getRangeObjectForName(
+ uno::Reference< XHelperInterface >(), mxContext, sRangeName,
+ excel::getDocShell( xModel ), formula::FormulaGrammar::CONV_XL_R1C1 );
+
if( bScroll )
{
xVbaSheetRange->Select();
@@ -621,15 +673,21 @@ ScVbaApplication::getName() throw (uno::RuntimeException)
}
// #TODO #FIXME get/setDisplayAlerts are just stub impl
+// here just the status of the switch is set
+// the function that throws an error message needs to
+// evaluate this switch in order to know whether it has to disable the
+// error message thrown by OpenOffice
+
void SAL_CALL
-ScVbaApplication::setDisplayAlerts(sal_Bool /*displayAlerts*/) throw (uno::RuntimeException)
+ScVbaApplication::setDisplayAlerts(sal_Bool displayAlerts) throw (uno::RuntimeException)
{
+ m_xDisplayAlerts = displayAlerts;
}
sal_Bool SAL_CALL
ScVbaApplication::getDisplayAlerts() throw (uno::RuntimeException)
{
- return sal_True;
+ return m_xDisplayAlerts;
}
void SAL_CALL
ScVbaApplication::Calculate() throw( script::BasicErrorException , uno::RuntimeException )
@@ -889,7 +947,8 @@ lcl_intersectionImpl( ScRangeList& rl1, ScRangeList& rl2 )
RangesList lcl_intersections( RangesList& vRanges )
{
RangesList intersections;
- for( RangesList::iterator it = vRanges.begin(); it != vRanges.end(); ++it )
+ RangesList::iterator it = vRanges.begin();
+ while( it != vRanges.end() )
{
Ranges intermediateList;
for( RangesList::iterator it_inner = vRanges.begin(); it_inner != vRanges.end(); ++it_inner )
@@ -902,6 +961,7 @@ RangesList lcl_intersections( RangesList& vRanges )
}
}
it = vRanges.erase( it ); // remove it so we don't include it in the next pass.
+ // 'it' is removed uncontidionally from vRanges, so the while loop will terminate
ScRangeList argIntersect;
lcl_strip_containedRanges( intermediateList );
diff --git a/sc/source/ui/vba/vbaapplication.hxx b/sc/source/ui/vba/vbaapplication.hxx
index 02822e9f18ad..96638651bcd1 100644
--- a/sc/source/ui/vba/vbaapplication.hxx
+++ b/sc/source/ui/vba/vbaapplication.hxx
@@ -43,15 +43,29 @@ class ScVbaApplication : public ScVbaApplication_BASE
{
private:
sal_Int32 m_xCalculation;
+ sal_Bool m_xDisplayAlerts;
rtl::OUString getOfficePath( const rtl::OUString& sPath ) throw ( css::uno::RuntimeException );
+
protected:
- virtual css::uno::Reference< css::frame::XModel > getCurrentDocument() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< css::frame::XModel > getCurrentDocument() throw (css::uno::RuntimeException);
+
public:
ScVbaApplication( const css::uno::Reference< css::uno::XComponentContext >& m_xContext );
virtual ~ScVbaApplication();
virtual SfxObjectShell* GetDocShell( const css::uno::Reference< css::frame::XModel >& xModel ) throw (css::uno::RuntimeException);
+ // XExactName
+ virtual ::rtl::OUString SAL_CALL getExactName( const ::rtl::OUString& aApproximateName ) throw (css::uno::RuntimeException);
+
+ // XInvocation
+ virtual css::uno::Reference< css::beans::XIntrospectionAccess > SAL_CALL getIntrospection(void) throw(css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL invoke(const rtl::OUString& FunctionName, const css::uno::Sequence< css::uno::Any >& Params, css::uno::Sequence< sal_Int16 >& OutParamIndex, css::uno::Sequence< css::uno::Any >& OutParam) throw(css::lang::IllegalArgumentException, css::script::CannotConvertException, css::reflection::InvocationTargetException, css::uno::RuntimeException);
+ virtual void SAL_CALL setValue(const rtl::OUString& PropertyName, const css::uno::Any& Value) throw(css::beans::UnknownPropertyException, css::script::CannotConvertException, css::reflection::InvocationTargetException, css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getValue(const rtl::OUString& PropertyName) throw(css::beans::UnknownPropertyException, css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasMethod(const rtl::OUString& Name) throw(css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasProperty(const rtl::OUString& Name) throw(css::uno::RuntimeException);
+
// XApplication
virtual ::rtl::OUString SAL_CALL PathSeparator( ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
virtual void SAL_CALL setDefaultFilePath( const ::rtl::OUString& DefaultFilePath ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
@@ -67,8 +81,8 @@ public:
virtual css::uno::Any SAL_CALL getSelection() throw (css::uno::RuntimeException);
virtual css::uno::Reference< ov::excel::XWorkbook > SAL_CALL getActiveWorkbook() throw (css::uno::RuntimeException);
virtual css::uno::Reference< ov::excel::XRange > SAL_CALL getActiveCell() throw ( css::uno::RuntimeException);
- virtual css::uno::Reference< ov::excel::XWindow > SAL_CALL getActiveWindow() throw (css::uno::RuntimeException);
- virtual css::uno::Reference< ov::excel::XWorksheet > SAL_CALL getActiveSheet() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XWindow > SAL_CALL getActiveWindow() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XWorksheet > SAL_CALL getActiveSheet() throw (css::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL getDisplayFormulaBar() throw ( css::uno::RuntimeException );
virtual void SAL_CALL setDisplayFormulaBar( ::sal_Bool _displayformulabar ) throw ( css::uno::RuntimeException );
@@ -86,8 +100,6 @@ public:
virtual ::sal_Int32 SAL_CALL getCursor() throw (css::uno::RuntimeException);
virtual void SAL_CALL setCursor( ::sal_Int32 _cursor ) throw (css::uno::RuntimeException);
- virtual double SAL_CALL CountA( const css::uno::Any& arg1 ) throw (css::uno::RuntimeException) ;
-
virtual css::uno::Any SAL_CALL Windows( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
virtual void SAL_CALL wait( double time ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL Range( const css::uno::Any& Cell1, const css::uno::Any& Cell2 ) throw (css::uno::RuntimeException);
diff --git a/sc/source/ui/vba/vbacomment.cxx b/sc/source/ui/vba/vbacomment.cxx
index a8026f151c79..9c50a25b8b7c 100644
--- a/sc/source/ui/vba/vbacomment.cxx
+++ b/sc/source/ui/vba/vbacomment.cxx
@@ -27,14 +27,17 @@
#include "vbacomment.hxx"
#include <ooo/vba/excel/XlCreator.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
#include <com/sun/star/sheet/XSpreadsheet.hpp>
#include <com/sun/star/sheet/XSheetAnnotationAnchor.hpp>
#include <com/sun/star/sheet/XSheetAnnotationsSupplier.hpp>
+#include <com/sun/star/sheet/XSheetAnnotationShapeSupplier.hpp>
#include <com/sun/star/sheet/XSheetCellRange.hpp>
#include <com/sun/star/table/CellAddress.hpp>
#include <com/sun/star/table/XCell.hpp>
#include <com/sun/star/text/XText.hpp>
+#include <vbahelper/vbashape.hxx>
#include "vbaglobals.hxx"
#include "vbacomments.hxx"
@@ -42,8 +45,14 @@
using namespace ::ooo::vba;
using namespace ::com::sun::star;
-ScVbaComment::ScVbaComment( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< table::XCellRange >& xRange ) throw( lang::IllegalArgumentException )
-: ScVbaComment_BASE( xParent, xContext ), mxRange( xRange )
+ScVbaComment::ScVbaComment(
+ const uno::Reference< XHelperInterface >& xParent,
+ const uno::Reference< uno::XComponentContext >& xContext,
+ const uno::Reference< frame::XModel >& xModel,
+ const uno::Reference< table::XCellRange >& xRange ) throw( lang::IllegalArgumentException ) :
+ ScVbaComment_BASE( xParent, xContext ),
+ mxModel( xModel, uno::UNO_SET_THROW ),
+ mxRange( xRange )
{
if ( !xRange.is() )
throw lang::IllegalArgumentException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "range is not set " ) ), uno::Reference< uno::XInterface >() , 1 );
@@ -100,7 +109,7 @@ ScVbaComment::getCommentByIndex( sal_Int32 Index ) throw (uno::RuntimeException)
{
uno::Reference< container::XIndexAccess > xIndexAccess( getAnnotations(), uno::UNO_QUERY_THROW );
// parent is sheet ( parent of the range which is the parent of the comment )
- uno::Reference< XCollection > xColl( new ScVbaComments( getParent()->getParent(), mxContext, xIndexAccess ) );
+ uno::Reference< XCollection > xColl( new ScVbaComments( getParent()->getParent(), mxContext, mxModel, xIndexAccess ) );
return uno::Reference< excel::XComment > ( xColl->Item( uno::makeAny( Index ), uno::Any() ), uno::UNO_QUERY_THROW );
}
@@ -119,6 +128,17 @@ ScVbaComment::setAuthor( const rtl::OUString& /*_author*/ ) throw (uno::RuntimeE
// #TODO #FIXME implementation needed
}
+uno::Reference< msforms::XShape > SAL_CALL
+ScVbaComment::getShape() throw (uno::RuntimeException)
+{
+ uno::Reference< sheet::XSheetAnnotationShapeSupplier > xAnnoShapeSupp( getAnnotation(), uno::UNO_QUERY_THROW );
+ uno::Reference< drawing::XShape > xAnnoShape( xAnnoShapeSupp->getAnnotationShape(), uno::UNO_SET_THROW );
+ uno::Reference< sheet::XSheetCellRange > xCellRange( mxRange, uno::UNO_QUERY_THROW );
+ uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupp( xCellRange->getSpreadsheet(), uno::UNO_QUERY_THROW );
+ uno::Reference< drawing::XShapes > xShapes( xDrawPageSupp->getDrawPage(), uno::UNO_QUERY_THROW );
+ return new ScVbaShape( this, mxContext, xAnnoShape, xShapes, mxModel, office::MsoShapeType::msoComment );
+}
+
sal_Bool SAL_CALL
ScVbaComment::getVisible() throw (uno::RuntimeException)
{
@@ -186,12 +206,15 @@ ScVbaComment::Text( const uno::Any& aText, const uno::Any& aStart, const uno::An
uno::Reference< text::XTextRange > xRange( xTextCursor, uno::UNO_QUERY_THROW );
xAnnoText->insertString( xRange, sText, bOverwrite );
+ return xAnnoText->getString();
}
- else
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ScVbaComment::Text - bad Start value " ) ), uno::Reference< uno::XInterface >() );
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ScVbaComment::Text - bad Start value " ) ), uno::Reference< uno::XInterface >() );
}
else if ( aText.hasValue() )
+ {
xAnnoText->setString( sText );
+ return sText;
+ }
return sAnnoText;
}
diff --git a/sc/source/ui/vba/vbacomment.hxx b/sc/source/ui/vba/vbacomment.hxx
index 91d8a8a8e437..4a7d2fab91ef 100644
--- a/sc/source/ui/vba/vbacomment.hxx
+++ b/sc/source/ui/vba/vbacomment.hxx
@@ -31,6 +31,7 @@
#include <ooo/vba/excel/XComment.hpp>
#include <ooo/vba/excel/XApplication.hpp>
+#include <ooo/vba/msforms/XShape.hpp>
#include <com/sun/star/sheet/XSheetAnnotations.hpp>
#include <com/sun/star/sheet/XSheetAnnotation.hpp>
#include <com/sun/star/table/XCellRange.hpp>
@@ -42,6 +43,7 @@ typedef InheritedHelperInterfaceImpl1< ov::excel::XComment > ScVbaComment_BASE;
class ScVbaComment : public ScVbaComment_BASE
{
+ css::uno::Reference< css::frame::XModel > mxModel;
css::uno::Reference< css::table::XCellRange > mxRange;
private:
@@ -50,13 +52,18 @@ private:
sal_Int32 SAL_CALL getAnnotationIndex() throw (css::uno::RuntimeException);
css::uno::Reference< ov::excel::XComment > SAL_CALL getCommentByIndex( sal_Int32 Index ) throw (css::uno::RuntimeException);
public:
- ScVbaComment( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::table::XCellRange >& xRange ) throw ( css::lang::IllegalArgumentException );
+ ScVbaComment(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const css::uno::Reference< css::uno::XComponentContext >& xContext,
+ const css::uno::Reference< css::frame::XModel >& xModel,
+ const css::uno::Reference< css::table::XCellRange >& xRange ) throw ( css::lang::IllegalArgumentException );
virtual ~ScVbaComment() {}
// Attributes
virtual rtl::OUString SAL_CALL getAuthor() throw (css::uno::RuntimeException);
virtual void SAL_CALL setAuthor( const rtl::OUString& _author ) throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::msforms::XShape > SAL_CALL getShape() throw (css::uno::RuntimeException);
virtual sal_Bool SAL_CALL getVisible() throw (css::uno::RuntimeException);
virtual void SAL_CALL setVisible( sal_Bool _visible ) throw (css::uno::RuntimeException);
diff --git a/sc/source/ui/vba/vbacomments.cxx b/sc/source/ui/vba/vbacomments.cxx
index 5090fa6f5ee6..a68dd4245741 100644
--- a/sc/source/ui/vba/vbacomments.cxx
+++ b/sc/source/ui/vba/vbacomments.cxx
@@ -34,30 +34,43 @@
using namespace ::ooo::vba;
using namespace ::com::sun::star;
-uno::Any AnnotationToComment( const uno::Any& aSource, uno::Reference< uno::XComponentContext > & xContext )
+uno::Any AnnotationToComment( const uno::Any& aSource, uno::Reference< uno::XComponentContext > & xContext, const uno::Reference< frame::XModel >& xModel )
{
uno::Reference< sheet::XSheetAnnotation > xAnno( aSource, uno::UNO_QUERY_THROW );
uno::Reference< container::XChild > xChild( xAnno, uno::UNO_QUERY_THROW );
uno::Reference< table::XCellRange > xCellRange( xChild->getParent(), uno::UNO_QUERY_THROW );
// #FIXME needs to find the correct Parent
- return uno::makeAny( uno::Reference< excel::XComment > ( new ScVbaComment( uno::Reference< XHelperInterface >(), xContext, xCellRange ) ) );
+ return uno::makeAny( uno::Reference< excel::XComment > (
+ new ScVbaComment( uno::Reference< XHelperInterface >(), xContext, xModel, xCellRange ) ) );
}
class CommentEnumeration : public EnumerationHelperImpl
{
+ css::uno::Reference< css::frame::XModel > mxModel;
public:
- CommentEnumeration( const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< container::XEnumeration >& xEnumeration ) throw ( uno::RuntimeException ) : EnumerationHelperImpl( xContext, xEnumeration ) {}
+ CommentEnumeration(
+ const uno::Reference< uno::XComponentContext >& xContext,
+ const uno::Reference< container::XEnumeration >& xEnumeration,
+ const uno::Reference< frame::XModel >& xModel ) throw ( uno::RuntimeException ) :
+ EnumerationHelperImpl( xContext, xEnumeration ),
+ mxModel( xModel, uno::UNO_SET_THROW )
+ {}
virtual uno::Any SAL_CALL nextElement() throw (container::NoSuchElementException, lang::WrappedTargetException, uno::RuntimeException)
{
- return AnnotationToComment( m_xEnumeration->nextElement(), m_xContext );
+ return AnnotationToComment( m_xEnumeration->nextElement(), m_xContext, mxModel );
}
};
-ScVbaComments::ScVbaComments( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext > & xContext, const uno::Reference< container::XIndexAccess >& xIndexAccess )
-: ScVbaComments_BASE( xParent, xContext, xIndexAccess )
+ScVbaComments::ScVbaComments(
+ const uno::Reference< XHelperInterface >& xParent,
+ const uno::Reference< uno::XComponentContext > & xContext,
+ const uno::Reference< frame::XModel >& xModel,
+ const uno::Reference< container::XIndexAccess >& xIndexAccess ) :
+ ScVbaComments_BASE( xParent, xContext, xIndexAccess ),
+ mxModel( xModel, uno::UNO_SET_THROW )
{
}
@@ -68,13 +81,13 @@ ScVbaComments::createEnumeration() throw (uno::RuntimeException)
{
uno::Reference< container::XEnumerationAccess > xEnumAccess( m_xIndexAccess, uno::UNO_QUERY_THROW );
- return new CommentEnumeration( mxContext, xEnumAccess->createEnumeration() );
+ return new CommentEnumeration( mxContext, xEnumAccess->createEnumeration(), mxModel );
}
uno::Any
ScVbaComments::createCollectionObject( const css::uno::Any& aSource )
{
- return AnnotationToComment( aSource, mxContext );
+ return AnnotationToComment( aSource, mxContext, mxModel );
}
uno::Type
diff --git a/sc/source/ui/vba/vbacomments.hxx b/sc/source/ui/vba/vbacomments.hxx
index 0ab11e8d5e97..2f98e5b71897 100644
--- a/sc/source/ui/vba/vbacomments.hxx
+++ b/sc/source/ui/vba/vbacomments.hxx
@@ -40,7 +40,11 @@ typedef CollTestImplHelper< ov::excel::XComments > ScVbaComments_BASE;
class ScVbaComments : public ScVbaComments_BASE
{
public:
- ScVbaComments( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext > & xContext, const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess );
+ ScVbaComments(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const css::uno::Reference< css::uno::XComponentContext > & xContext,
+ const css::uno::Reference< css::frame::XModel >& xModel,
+ const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess );
virtual ~ScVbaComments() {}
@@ -53,6 +57,8 @@ public:
virtual rtl::OUString& getServiceImplName();
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
+private:
+ css::uno::Reference< css::frame::XModel > mxModel;
};
#endif /* SC_VBA_COMMENTS_HXX */
diff --git a/sc/source/ui/vba/vbafont.cxx b/sc/source/ui/vba/vbafont.cxx
index a8aac44770a9..5894d3ea8c71 100644
--- a/sc/source/ui/vba/vbafont.cxx
+++ b/sc/source/ui/vba/vbafont.cxx
@@ -36,6 +36,7 @@
#include <ooo/vba/excel/XlColorIndex.hpp>
#include <ooo/vba/excel/XlUnderlineStyle.hpp>
#include <svl/itemset.hxx>
+#include "excelvbahelper.hxx"
#include "vbafont.hxx"
#include "scitems.hxx"
#include "cellsuno.hxx"
@@ -43,15 +44,22 @@
using namespace ::ooo::vba;
using namespace ::com::sun::star;
-ScVbaFont::ScVbaFont( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const ScVbaPalette& dPalette, uno::Reference< beans::XPropertySet > xPropertySet, ScCellRangeObj* pRangeObj ) throw ( uno::RuntimeException ) : ScVbaFont_BASE( xParent, xContext, dPalette.getPalette(), xPropertySet ), mPalette( dPalette ), mpRangeObj( pRangeObj )
+ScVbaFont::ScVbaFont(
+ const uno::Reference< XHelperInterface >& xParent,
+ const uno::Reference< uno::XComponentContext >& xContext,
+ const ScVbaPalette& dPalette,
+ const uno::Reference< beans::XPropertySet >& xPropertySet,
+ ScCellRangeObj* pRangeObj, bool bFormControl ) throw ( uno::RuntimeException ) :
+ ScVbaFont_BASE( xParent, xContext, dPalette.getPalette(), xPropertySet, bFormControl ),
+ mPalette( dPalette ),
+ mpRangeObj( pRangeObj )
{
}
SfxItemSet*
ScVbaFont::GetDataSet()
{
- SfxItemSet* pDataSet = excel::ScVbaCellRangeAccess::GetDataSet( mpRangeObj );
- return pDataSet;
+ return mpRangeObj ? excel::ScVbaCellRangeAccess::GetDataSet( mpRangeObj ) : 0;
}
ScVbaFont::~ScVbaFont()
diff --git a/sc/source/ui/vba/vbafont.hxx b/sc/source/ui/vba/vbafont.hxx
index 4cbcd483b2d8..3ef52c6d240f 100644
--- a/sc/source/ui/vba/vbafont.hxx
+++ b/sc/source/ui/vba/vbafont.hxx
@@ -46,7 +46,12 @@ class ScVbaFont : public ScVbaFont_BASE
ScCellRangeObj* mpRangeObj;
SfxItemSet* GetDataSet();
public:
- ScVbaFont( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const ScVbaPalette& dPalette, css::uno::Reference< css::beans::XPropertySet > xPropertySet, ScCellRangeObj* pRangeObj = NULL ) throw ( css::uno::RuntimeException );
+ ScVbaFont(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const css::uno::Reference< css::uno::XComponentContext >& xContext,
+ const ScVbaPalette& dPalette,
+ const css::uno::Reference< css::beans::XPropertySet >& xPropertySet,
+ ScCellRangeObj* pRangeObj = 0, bool bFormControl = false ) throw ( css::uno::RuntimeException );
virtual ~ScVbaFont();// {}
// Attributes
diff --git a/sc/source/ui/vba/vbaformat.cxx b/sc/source/ui/vba/vbaformat.cxx
index 23c2bf96a810..d08451af63f4 100644
--- a/sc/source/ui/vba/vbaformat.cxx
+++ b/sc/source/ui/vba/vbaformat.cxx
@@ -40,6 +40,7 @@
#include <rtl/math.hxx>
+#include "excelvbahelper.hxx"
#include "vbaborders.hxx"
#include "vbapalette.hxx"
#include "vbafont.hxx"
diff --git a/sc/source/ui/vba/vbahelper.cxx b/sc/source/ui/vba/vbahelper.cxx
index 4bc57e150c8f..cc76b1e60125 100644
--- a/sc/source/ui/vba/vbahelper.cxx
+++ b/sc/source/ui/vba/vbahelper.cxx
@@ -160,73 +160,6 @@ public:
}
};
-void
-dispatchRequests (uno::Reference< frame::XModel>& xModel,rtl::OUString & aUrl, uno::Sequence< beans::PropertyValue >& sProps )
-{
-
- util::URL url ;
- url.Complete = aUrl;
- rtl::OUString emptyString = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "" ));
- uno::Reference<frame::XController> xController = xModel->getCurrentController();
- uno::Reference<frame::XFrame> xFrame = xController->getFrame();
- uno::Reference<frame::XDispatchProvider> xDispatchProvider (xFrame,uno::UNO_QUERY_THROW);
- try
- {
- uno::Reference< beans::XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), uno::UNO_QUERY_THROW );
- uno::Reference<uno::XComponentContext > xContext( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))), uno::UNO_QUERY_THROW );
- if ( !xContext.is() )
- {
- return ;
- }
-
- uno::Reference<lang::XMultiComponentFactory > xServiceManager(
- xContext->getServiceManager() );
- if ( !xServiceManager.is() )
- {
- return ;
- }
- uno::Reference<util::XURLTransformer> xParser( xServiceManager->createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ) )
- ,xContext), uno::UNO_QUERY_THROW );
- if (!xParser.is())
- return;
- xParser->parseStrict (url);
- }
- catch ( uno::Exception & /*e*/ )
- {
- return ;
- }
-
- uno::Reference<frame::XDispatch> xDispatcher = xDispatchProvider->queryDispatch(url,emptyString,0);
-
- uno::Sequence<beans::PropertyValue> dispatchProps(1);
-
- sal_Int32 nProps = sProps.getLength();
- beans::PropertyValue* pDest = dispatchProps.getArray();
- if ( nProps )
- {
- dispatchProps.realloc( nProps + 1 );
- // need to reaccquire pDest after realloc
- pDest = dispatchProps.getArray();
- beans::PropertyValue* pSrc = sProps.getArray();
- for ( sal_Int32 index=0; index<nProps; ++index, ++pSrc, ++pDest )
- *pDest = *pSrc;
- }
-
- (*pDest).Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Silent" ));
- (*pDest).Value <<= (sal_Bool)sal_True;
-
- if (xDispatcher.is())
- xDispatcher->dispatch( url, dispatchProps );
-}
-
-void
-dispatchRequests (uno::Reference< frame::XModel>& xModel,rtl::OUString & aUrl)
-{
- uno::Sequence<beans::PropertyValue> dispatchProps;
- dispatchRequests( xModel, aUrl, dispatchProps );
-}
-
-
void dispatchExecute(css::uno::Reference< css::frame::XModel>& xModel, USHORT nSlot, SfxCallMode nCall)
{
ScTabViewShell* pViewShell = getBestViewShell( xModel );
@@ -821,7 +754,5 @@ ScVbaCellRangeAccess::GetDataSet( ScCellRangeObj* pRangeObj )
}
-} // openoffice
-} //org
-=======
->>>>>>> other
+} // vba
+} // ooo
diff --git a/sc/source/ui/vba/vbahyperlink.cxx b/sc/source/ui/vba/vbahyperlink.cxx
index f3203b130bf2..e37df1e118b4 100644
--- a/sc/source/ui/vba/vbahyperlink.cxx
+++ b/sc/source/ui/vba/vbahyperlink.cxx
@@ -24,100 +24,213 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#include <vbahelper/helperdecl.hxx>
+
#include "vbahyperlink.hxx"
+#include <vbahelper/helperdecl.hxx>
#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/text/XText.hpp>
#include <com/sun/star/text/XTextFieldsSupplier.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <ooo/vba/office/MsoHyperlinkType.hpp>
+#include <ooo/vba/msforms/XShape.hpp>
#include "vbarange.hxx"
using namespace ::ooo::vba;
using namespace ::com::sun::star;
+using ::rtl::OUString;
+using ::rtl::OUStringBuffer;
-ScVbaHyperlink::ScVbaHyperlink( uno::Sequence< uno::Any> const & args,
- uno::Reference< uno::XComponentContext> const & xContext ) throw ( lang::IllegalArgumentException ) : HyperlinkImpl_BASE( getXSomethingFromArgs< XHelperInterface >( args, 0 ), xContext ), mxCell( getXSomethingFromArgs< table::XCell >( args, 1, false ) )
+// ============================================================================
+
+ScVbaHyperlink::ScVbaHyperlink( const uno::Sequence< uno::Any >& rArgs,
+ const uno::Reference< uno::XComponentContext >& rxContext ) throw (lang::IllegalArgumentException) :
+ HyperlinkImpl_BASE( getXSomethingFromArgs< XHelperInterface >( rArgs, 0 ), rxContext ),
+ mxCell( getXSomethingFromArgs< table::XCell >( rArgs, 1, false ) ),
+ mnType( office::MsoHyperlinkType::msoHyperlinkRange )
{
- mxCell = getXSomethingFromArgs< table::XCell >( args, 1, false );
uno::Reference< text::XTextFieldsSupplier > xTextFields( mxCell, uno::UNO_QUERY_THROW );
uno::Reference< container::XIndexAccess > xIndex( xTextFields->getTextFields(), uno::UNO_QUERY_THROW );
mxTextField.set( xIndex->getByIndex(0), uno::UNO_QUERY_THROW );
}
-ScVbaHyperlink::~ScVbaHyperlink()
+ScVbaHyperlink::ScVbaHyperlink( const uno::Reference< XHelperInterface >& rxAnchor,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Any& rAddress, const uno::Any& rSubAddress,
+ const uno::Any& rScreenTip, const uno::Any& rTextToDisplay ) throw (uno::RuntimeException) :
+ HyperlinkImpl_BASE( rxAnchor, rxContext ) // parent of Hyperlink is the anchor object
{
-}
+ // extract parameters, Address must not be empty
+ UrlComponents aUrlComp;
+ OUString aTextToDisplay;
+ if( !(rAddress >>= aUrlComp.first) || (aUrlComp.first.getLength() == 0) )
+ throw uno::RuntimeException( OUString( RTL_CONSTASCII_USTRINGPARAM( "Cannot get address" ) ), uno::Reference< uno::XInterface >() );
+ rSubAddress >>= aUrlComp.second;
+ rScreenTip >>= maScreenTip;
+ rTextToDisplay >>= aTextToDisplay;
-::rtl::OUString
-ScVbaHyperlink::getAddress() throw (css::uno::RuntimeException)
-{
- rtl::OUString aAddress;
- uno::Any aValue = mxTextField->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ) );
- aValue >>= aAddress;
- return aAddress;
+ // get anchor range or anchor shape
+ uno::Reference< excel::XRange > xAnchorRange( rxAnchor, uno::UNO_QUERY );
+ if( xAnchorRange.is() )
+ {
+ mnType = office::MsoHyperlinkType::msoHyperlinkRange;
+ // only single ranges are allowed
+ uno::Reference< table::XCellRange > xUnoRange( ScVbaRange::getCellRange( xAnchorRange ), uno::UNO_QUERY_THROW );
+ // insert the hyperlink into the top-left cell only
+ mxCell.set( xUnoRange->getCellByPosition( 0, 0 ), uno::UNO_SET_THROW );
+ uno::Reference< text::XText > xText( mxCell, uno::UNO_QUERY_THROW );
+ // use cell text or URL if no TextToDisplay has been passed
+ if( aTextToDisplay.getLength() == 0 )
+ {
+ aTextToDisplay = xText->getString();
+ if( aTextToDisplay.getLength() == 0 )
+ {
+ OUStringBuffer aBuffer( aUrlComp.first );
+ if( aUrlComp.second.getLength() > 0 )
+ aBuffer.appendAscii( RTL_CONSTASCII_STRINGPARAM( " - " ) ).append( aUrlComp.second );
+ aTextToDisplay = aBuffer.makeStringAndClear();
+ }
+ }
+ // create and initialize a new URL text field
+ uno::Reference< lang::XMultiServiceFactory > xFactory( ScVbaRange::getUnoModel( xAnchorRange ), uno::UNO_QUERY_THROW );
+ uno::Reference< text::XTextContent > xUrlField( xFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.text.TextField.URL" ) ) ), uno::UNO_QUERY_THROW );
+ mxTextField.set( xUrlField, uno::UNO_QUERY_THROW );
+ setUrlComponents( aUrlComp );
+ setTextToDisplay( aTextToDisplay );
+ // insert the text field into the document
+ xText->setString( OUString() );
+ uno::Reference< text::XTextRange > xRange( xText->createTextCursor(), uno::UNO_QUERY_THROW );
+ xText->insertTextContent( xRange, xUrlField, sal_False );
+ }
+ else
+ {
+ uno::Reference< msforms::XShape > xAnchorShape( rxAnchor, uno::UNO_QUERY_THROW );
+ mnType = office::MsoHyperlinkType::msoHyperlinkShape;
+ // FIXME: insert hyperlink into shape
+ throw uno::RuntimeException();
+ }
}
-void
-ScVbaHyperlink::setAddress( const ::rtl::OUString & rAddress ) throw (css::uno::RuntimeException)
+ScVbaHyperlink::~ScVbaHyperlink()
{
- uno::Any aValue;
- aValue <<= rAddress;
- mxTextField->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ), aValue );
}
-::rtl::OUString
-ScVbaHyperlink::getName() throw (css::uno::RuntimeException)
+OUString ScVbaHyperlink::getName() throw (uno::RuntimeException)
{
// it seems this attribute is same as TextToDisplay
return getTextToDisplay();
}
-void
-ScVbaHyperlink::setName( const ::rtl::OUString & rName ) throw (css::uno::RuntimeException)
+void ScVbaHyperlink::setName( const OUString& rName ) throw (uno::RuntimeException)
{
setTextToDisplay( rName );
}
-::rtl::OUString
-ScVbaHyperlink::getTextToDisplay() throw (css::uno::RuntimeException)
+OUString ScVbaHyperlink::getAddress() throw (uno::RuntimeException)
{
- rtl::OUString aTextToDisplay;
- uno::Any aValue = mxTextField->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Representation" ) ) );
- aValue >>= aTextToDisplay;
- return aTextToDisplay;
+ return getUrlComponents().first;
+}
+
+void ScVbaHyperlink::setAddress( const OUString& rAddress ) throw (uno::RuntimeException)
+{
+ UrlComponents aUrlComp = getUrlComponents();
+ aUrlComp.first = rAddress;
+ setUrlComponents( aUrlComp );
+}
+
+OUString ScVbaHyperlink::getSubAddress() throw (uno::RuntimeException)
+{
+ return getUrlComponents().second;
+}
+
+void ScVbaHyperlink::setSubAddress( const OUString& rSubAddress ) throw (uno::RuntimeException)
+{
+ UrlComponents aUrlComp = getUrlComponents();
+ aUrlComp.second = rSubAddress;
+ setUrlComponents( aUrlComp );
}
-void
-ScVbaHyperlink::setTextToDisplay( const ::rtl::OUString & rTextToDisplay ) throw (css::uno::RuntimeException)
+OUString SAL_CALL ScVbaHyperlink::getScreenTip() throw (uno::RuntimeException)
{
- uno::Any aValue;
- aValue <<= rTextToDisplay;
- mxTextField->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Representation" ) ), aValue );
+ return maScreenTip;
}
-css::uno::Reference< ov::excel::XRange > SAL_CALL ScVbaHyperlink::Range() throw (css::uno::RuntimeException)
+void SAL_CALL ScVbaHyperlink::setScreenTip( const OUString& rScreenTip ) throw (uno::RuntimeException)
{
- uno::Reference< table::XCellRange > xRange( mxCell,uno::UNO_QUERY_THROW );
- // FIXME: need to pass current worksheet as the parent of XRange.
- return uno::Reference< excel::XRange >( new ScVbaRange( uno::Reference< XHelperInterface > (), mxContext, xRange ) );
+ maScreenTip = rScreenTip;
}
-rtl::OUString&
-ScVbaHyperlink::getServiceImplName()
+OUString ScVbaHyperlink::getTextToDisplay() throw (uno::RuntimeException)
{
- static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("ScVbaHyperlink") );
- return sImplName;
+ ensureTextField();
+ OUString aTextToDisplay;
+ mxTextField->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Representation" ) ) ) >>= aTextToDisplay;
+ return aTextToDisplay;
+}
+
+void ScVbaHyperlink::setTextToDisplay( const OUString& rTextToDisplay ) throw (uno::RuntimeException)
+{
+ ensureTextField();
+ mxTextField->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "Representation" ) ), uno::Any( rTextToDisplay ) );
}
-uno::Sequence< rtl::OUString >
-ScVbaHyperlink::getServiceNames()
+sal_Int32 SAL_CALL ScVbaHyperlink::getType() throw (uno::RuntimeException)
{
- static uno::Sequence< rtl::OUString > aServiceNames;
- if ( aServiceNames.getLength() == 0 )
+ return mnType;
+}
+
+uno::Reference< excel::XRange > SAL_CALL ScVbaHyperlink::getRange() throw (uno::RuntimeException)
+{
+ if( mnType == office::MsoHyperlinkType::msoHyperlinkRange )
{
- aServiceNames.realloc( 1 );
- aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.excel.Hyperlink" ) );
+ // if constructed from Hyperlinks object, range has been passed as parent
+ uno::Reference< excel::XRange > xAnchorRange( getParent(), uno::UNO_QUERY );
+ if( !xAnchorRange.is() )
+ {
+ // if constructed via service c'tor, create new range based on cell
+ uno::Reference< table::XCellRange > xRange( mxCell, uno::UNO_QUERY_THROW );
+ // FIXME: need to pass current worksheet as the parent of XRange.
+ xAnchorRange.set( new ScVbaRange( uno::Reference< XHelperInterface >(), mxContext, xRange ) );
+ }
+ return xAnchorRange;
}
- return aServiceNames;
+ // error if called at a shape Hyperlink object
+ throw uno::RuntimeException();
+}
+
+uno::Reference< msforms::XShape > SAL_CALL ScVbaHyperlink::getShape() throw (uno::RuntimeException)
+{
+ // error if called at a range Hyperlink object
+ return uno::Reference< msforms::XShape >( getParent(), uno::UNO_QUERY_THROW );
+}
+
+VBAHELPER_IMPL_XHELPERINTERFACE( ScVbaHyperlink, "ooo.vba.excel.Hyperlink" )
+
+// private --------------------------------------------------------------------
+
+void ScVbaHyperlink::ensureTextField() throw (uno::RuntimeException)
+{
+ if( !mxTextField.is() )
+ throw uno::RuntimeException();
+}
+
+ScVbaHyperlink::UrlComponents ScVbaHyperlink::getUrlComponents() throw (uno::RuntimeException)
+{
+ ensureTextField();
+ OUString aUrl;
+ mxTextField->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ) ) >>= aUrl;
+ sal_Int32 nHashPos = aUrl.indexOf( '#' );
+ if( nHashPos < 0 )
+ return UrlComponents( aUrl, OUString() );
+ return UrlComponents( aUrl.copy( 0, nHashPos ), aUrl.copy( nHashPos + 1 ) );
+}
+
+void ScVbaHyperlink::setUrlComponents( const UrlComponents& rUrlComp ) throw (uno::RuntimeException)
+{
+ ensureTextField();
+ OUStringBuffer aUrl( rUrlComp.first );
+ if( rUrlComp.second.getLength() > 0 )
+ aUrl.append( sal_Unicode( '#' ) ).append( rUrlComp.second );
+ mxTextField->setPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ), uno::Any( aUrl.makeStringAndClear() ) );
}
namespace hyperlink
@@ -129,3 +242,5 @@ extern sdecl::ServiceDecl const serviceDecl(
"ScVbaHyperlink",
"ooo.vba.excel.Hyperlink" );
}
+
+// ============================================================================
diff --git a/sc/source/ui/vba/vbahyperlink.hxx b/sc/source/ui/vba/vbahyperlink.hxx
index 570ecdcc2f45..e1520b59c15a 100644
--- a/sc/source/ui/vba/vbahyperlink.hxx
+++ b/sc/source/ui/vba/vbahyperlink.hxx
@@ -24,6 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+
#ifndef SC_VBA_HYPERLINK_HXX
#define SC_VBA_HYPERLINK_HXX
@@ -38,27 +39,50 @@ typedef InheritedHelperInterfaceImpl1< ov::excel::XHyperlink > HyperlinkImpl_BAS
class ScVbaHyperlink : public HyperlinkImpl_BASE
{
- css::uno::Reference< css::table::XCell > mxCell;
- css::uno::Reference< css::beans::XPropertySet > mxTextField;
-
public:
- ScVbaHyperlink( css::uno::Sequence< css::uno::Any > const& aArgs, css::uno::Reference< css::uno::XComponentContext > const& xContext ) throw ( css::lang::IllegalArgumentException );
+ ScVbaHyperlink(
+ const css::uno::Sequence< css::uno::Any >& rArgs,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext ) throw (css::lang::IllegalArgumentException);
+
+ ScVbaHyperlink(
+ const css::uno::Reference< ov::XHelperInterface >& rxAnchor,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Any& rAddress, const css::uno::Any& rSubAddress,
+ const css::uno::Any& rScreenTip, const css::uno::Any& rTextToDisplay ) throw (css::uno::RuntimeException);
+
virtual ~ScVbaHyperlink();
// Attributes
- virtual ::rtl::OUString SAL_CALL getAddress() throw (css::uno::RuntimeException);
- virtual void SAL_CALL setAddress( const ::rtl::OUString &rAddress ) throw (css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
- virtual void SAL_CALL setName( const ::rtl::OUString &rName ) throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setName( const ::rtl::OUString& rName ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getAddress() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setAddress( const ::rtl::OUString& rAddress ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getSubAddress() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setSubAddress( const ::rtl::OUString& rSubAddress ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getScreenTip() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setScreenTip( const ::rtl::OUString& rScreenTip ) throw (css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getTextToDisplay() throw (css::uno::RuntimeException);
- virtual void SAL_CALL setTextToDisplay( const ::rtl::OUString &rTextToDisplay ) throw (css::uno::RuntimeException);
-
- // Methods
- virtual css::uno::Reference< ov::excel::XRange > SAL_CALL Range() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setTextToDisplay( const ::rtl::OUString& rTextToDisplay ) throw (css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL getType() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XRange > SAL_CALL getRange() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::msforms::XShape > SAL_CALL getShape() throw (css::uno::RuntimeException);
// XHelperInterface
- virtual rtl::OUString& getServiceImplName();
- virtual css::uno::Sequence<rtl::OUString> getServiceNames();
+ VBAHELPER_DECL_XHELPERINTERFACE
+
+private:
+ typedef ::std::pair< ::rtl::OUString, ::rtl::OUString > UrlComponents;
+
+ void ensureTextField() throw (css::uno::RuntimeException);
+ UrlComponents getUrlComponents() throw (css::uno::RuntimeException);
+ void setUrlComponents( const UrlComponents& rUrlComp ) throw (css::uno::RuntimeException);
+
+private:
+ css::uno::Reference< css::table::XCell > mxCell;
+ css::uno::Reference< css::beans::XPropertySet > mxTextField;
+ ::rtl::OUString maScreenTip;
+ long mnType;
};
+
#endif /* SC_VBA_HYPERLINK_HXX */
diff --git a/sc/source/ui/vba/vbahyperlinks.cxx b/sc/source/ui/vba/vbahyperlinks.cxx
new file mode 100755
index 000000000000..89a8109e6aa2
--- /dev/null
+++ b/sc/source/ui/vba/vbahyperlinks.cxx
@@ -0,0 +1,293 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#include "vbahyperlinks.hxx"
+#include <algorithm>
+#include <vector>
+#include <ooo/vba/office/MsoHyperlinkType.hpp>
+#include "rangelst.hxx"
+#include "vbahyperlink.hxx"
+#include "vbarange.hxx"
+
+using namespace ::ooo::vba;
+using namespace ::com::sun::star;
+using ::rtl::OUString;
+
+// ============================================================================
+
+namespace {
+
+/** Returns true, if every range of rxInner is contained in any range of rScOuter. */
+bool lclContains( const ScRangeList& rScOuter, const uno::Reference< excel::XRange >& rxInner ) throw (uno::RuntimeException)
+{
+ const ScRangeList& rScInner = ScVbaRange::getScRangeList( rxInner );
+ if( (rScInner.Count() == 0) || (rScOuter.Count() == 0) )
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Empty range objects" ) ), uno::Reference< uno::XInterface >() );
+
+ for( ULONG nIndex = 0, nCount = rScInner.Count(); nIndex < nCount; ++nIndex )
+ if( !rScOuter.In( *rScInner.GetObject( nIndex ) ) )
+ return false;
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+
+/** Functor to decide whether the anchors of two Hyperlink objects are equal. */
+struct EqualAnchorFunctor
+{
+ uno::Reference< excel::XRange > mxAnchorRange;
+ uno::Reference< msforms::XShape > mxAnchorShape;
+ sal_Int32 mnType;
+ EqualAnchorFunctor( const uno::Reference< excel::XHyperlink >& rxHlink ) throw (uno::RuntimeException);
+ bool operator()( const uno::Reference< excel::XHyperlink >& rxHlink ) const throw (uno::RuntimeException);
+};
+
+EqualAnchorFunctor::EqualAnchorFunctor( const uno::Reference< excel::XHyperlink >& rxHlink ) throw (uno::RuntimeException) :
+ mnType( rxHlink->getType() )
+{
+ switch( mnType )
+ {
+ case office::MsoHyperlinkType::msoHyperlinkRange:
+ mxAnchorRange.set( rxHlink->getRange(), uno::UNO_QUERY_THROW );
+ break;
+ case office::MsoHyperlinkType::msoHyperlinkShape:
+ case office::MsoHyperlinkType::msoHyperlinkInlineShape:
+ mxAnchorShape.set( rxHlink->getShape(), uno::UNO_QUERY_THROW );
+ break;
+ default:
+ throw uno::RuntimeException();
+ }
+}
+
+bool EqualAnchorFunctor::operator()( const uno::Reference< excel::XHyperlink >& rxHlink ) const throw (uno::RuntimeException)
+{
+ sal_Int32 nType = rxHlink->getType();
+ if( nType != mnType )
+ return false;
+
+ switch( nType )
+ {
+ case office::MsoHyperlinkType::msoHyperlinkRange:
+ {
+ uno::Reference< excel::XRange > xAnchorRange( rxHlink->getRange(), uno::UNO_QUERY_THROW );
+ const ScRangeList& rScRanges1 = ScVbaRange::getScRangeList( xAnchorRange );
+ const ScRangeList& rScRanges2 = ScVbaRange::getScRangeList( mxAnchorRange );
+ return (rScRanges1.Count() == 1) && (rScRanges2.Count() == 1) && (*rScRanges1.GetObject( 0 ) == *rScRanges2.GetObject( 0 ));
+ }
+ case office::MsoHyperlinkType::msoHyperlinkShape:
+ case office::MsoHyperlinkType::msoHyperlinkInlineShape:
+ {
+ uno::Reference< msforms::XShape > xAnchorShape( rxHlink->getShape(), uno::UNO_QUERY_THROW );
+ return xAnchorShape.get() == mxAnchorShape.get();
+ }
+ default:
+ throw uno::RuntimeException();
+ }
+}
+
+} // namespace
+
+// ============================================================================
+
+namespace detail {
+
+class ScVbaHlinkContainer : public ::cppu::WeakImplHelper1< container::XIndexAccess >
+{
+public:
+ explicit ScVbaHlinkContainer() throw (uno::RuntimeException);
+ explicit ScVbaHlinkContainer( const ScVbaHlinkContainerRef& rxSheetContainer, const ScRangeList& rScRanges ) throw (uno::RuntimeException);
+ virtual ~ScVbaHlinkContainer();
+
+ /** Inserts the passed hyperlink into the collection. Will remove a
+ Hyperlink object with the same anchor as the passed Hyperlink object. */
+ void insertHyperlink( const uno::Reference< excel::XHyperlink >& rxHlink ) throw (uno::RuntimeException);
+
+ // XIndexAccess
+ virtual sal_Int32 SAL_CALL getCount() throw (uno::RuntimeException);
+ virtual uno::Any SAL_CALL getByIndex( sal_Int32 nIndex ) throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException);
+
+ // XElementAccess
+ virtual uno::Type SAL_CALL getElementType() throw (uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements() throw (uno::RuntimeException);
+
+private:
+ typedef ::std::vector< uno::Reference< excel::XHyperlink > > HyperlinkVector;
+ HyperlinkVector maHlinks;
+};
+
+// ----------------------------------------------------------------------------
+
+ScVbaHlinkContainer::ScVbaHlinkContainer() throw (uno::RuntimeException)
+{
+ // TODO FIXME: fill with existing hyperlinks
+}
+
+ScVbaHlinkContainer::ScVbaHlinkContainer( const ScVbaHlinkContainerRef& rxSheetContainer,
+ const ScRangeList& rScRanges ) throw (uno::RuntimeException)
+{
+ for( sal_Int32 nIndex = 0, nCount = rxSheetContainer->getCount(); nIndex < nCount; ++nIndex )
+ {
+ uno::Reference< excel::XHyperlink > xHlink( rxSheetContainer->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
+ uno::Reference< excel::XRange > xHlinkRange( xHlink->getRange(), uno::UNO_QUERY_THROW );
+ if( lclContains( rScRanges, xHlinkRange ) )
+ maHlinks.push_back( xHlink );
+ }
+}
+
+ScVbaHlinkContainer::~ScVbaHlinkContainer()
+{
+}
+
+void ScVbaHlinkContainer::insertHyperlink( const uno::Reference< excel::XHyperlink >& rxHlink ) throw (uno::RuntimeException)
+{
+ HyperlinkVector::iterator aIt = ::std::find_if( maHlinks.begin(), maHlinks.end(), EqualAnchorFunctor( rxHlink ) );
+ if( aIt == maHlinks.end() )
+ maHlinks.push_back( rxHlink );
+ else
+ *aIt = rxHlink;
+}
+
+sal_Int32 SAL_CALL ScVbaHlinkContainer::getCount() throw (uno::RuntimeException)
+{
+ return static_cast< sal_Int32 >( maHlinks.size() );
+}
+
+uno::Any SAL_CALL ScVbaHlinkContainer::getByIndex( sal_Int32 nIndex )
+ throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException)
+{
+ if( (0 <= nIndex) && (nIndex < getCount()) )
+ return uno::Any( maHlinks[ static_cast< size_t >( nIndex ) ] );
+ throw lang::IndexOutOfBoundsException();
+}
+
+uno::Type SAL_CALL ScVbaHlinkContainer::getElementType() throw (uno::RuntimeException)
+{
+ return excel::XHyperlink::static_type( 0 );
+}
+
+sal_Bool SAL_CALL ScVbaHlinkContainer::hasElements() throw (uno::RuntimeException)
+{
+ return !maHlinks.empty();
+}
+
+// ============================================================================
+
+ScVbaHlinkContainerMember::ScVbaHlinkContainerMember( ScVbaHlinkContainer* pContainer ) :
+ mxContainer( pContainer )
+{
+}
+
+ScVbaHlinkContainerMember::~ScVbaHlinkContainerMember()
+{
+}
+
+} // namespace detail
+
+// ============================================================================
+
+ScVbaHyperlinks::ScVbaHyperlinks( const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext ) throw (uno::RuntimeException) :
+ detail::ScVbaHlinkContainerMember( new detail::ScVbaHlinkContainer ),
+ ScVbaHyperlinks_BASE( rxParent, rxContext, uno::Reference< container::XIndexAccess >( mxContainer.get() ) )
+{
+}
+
+ScVbaHyperlinks::ScVbaHyperlinks( const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const ScVbaHyperlinksRef& rxSheetHlinks, const ScRangeList& rScRanges ) throw (uno::RuntimeException) :
+ detail::ScVbaHlinkContainerMember( new detail::ScVbaHlinkContainer( rxSheetHlinks->mxContainer, rScRanges ) ),
+ ScVbaHyperlinks_BASE( rxParent, rxContext, uno::Reference< container::XIndexAccess >( mxContainer.get() ) ),
+ mxSheetHlinks( rxSheetHlinks )
+{
+}
+
+ScVbaHyperlinks::~ScVbaHyperlinks()
+{
+}
+
+// XHyperlinks ----------------------------------------------------------------
+
+uno::Reference< excel::XHyperlink > SAL_CALL ScVbaHyperlinks::Add(
+ const uno::Any& rAnchor, const uno::Any& rAddress, const uno::Any& rSubAddress,
+ const uno::Any& rScreenTip, const uno::Any& rTextToDisplay ) throw (uno::RuntimeException)
+{
+ /* If this Hyperlinks object has been craeted from a Range object, the
+ call to Add() is passed to the Hyperlinks object of the parent
+ worksheet. This container will not be modified (it will not contain the
+ inserted hyperlink).
+ For details, see documentation in hyperlinks.hxx.
+ */
+ if( mxSheetHlinks.is() )
+ return mxSheetHlinks->Add( rAnchor, rAddress, rSubAddress, rScreenTip, rTextToDisplay );
+
+ // get anchor object (can be a Range or a Shape object)
+ uno::Reference< XHelperInterface > xAnchor( rAnchor, uno::UNO_QUERY_THROW );
+
+ /* Create the Hyperlink object, this tries to insert the hyperlink into
+ the spreadsheet document. Parent of the Hyperlink is the anchor object. */
+ uno::Reference< excel::XHyperlink > xHlink( new ScVbaHyperlink(
+ xAnchor, mxContext, rAddress, rSubAddress, rScreenTip, rTextToDisplay ) );
+
+ /* If creation of the hyperlink did not throw, insert it into the
+ collection. */
+ mxContainer->insertHyperlink( xHlink );
+ return xHlink;
+}
+
+void SAL_CALL ScVbaHyperlinks::Delete() throw (uno::RuntimeException)
+{
+ // FIXME not implemented
+ throw uno::RuntimeException();
+}
+
+// XEnumerationAccess ---------------------------------------------------------
+
+uno::Reference< container::XEnumeration > SAL_CALL ScVbaHyperlinks::createEnumeration() throw (uno::RuntimeException)
+{
+ return new SimpleIndexAccessToEnumeration( m_xIndexAccess );
+}
+
+// XElementAccess -------------------------------------------------------------
+
+uno::Type SAL_CALL ScVbaHyperlinks::getElementType() throw (uno::RuntimeException)
+{
+ return excel::XHyperlink::static_type( 0 );
+}
+
+// ScVbaCollectionBase --------------------------------------------------------
+
+uno::Any ScVbaHyperlinks::createCollectionObject( const uno::Any& rSource )
+{
+ // container stores XHyperlink objects, just return the passed object
+ return rSource;
+}
+
+// XHelperInterface -----------------------------------------------------------
+
+VBAHELPER_IMPL_XHELPERINTERFACE( ScVbaHyperlinks, "ooo.vba.excel.Hyperlinks" )
+
+// ============================================================================
diff --git a/sc/source/ui/vba/vbahyperlinks.hxx b/sc/source/ui/vba/vbahyperlinks.hxx
new file mode 100755
index 000000000000..ca7d990ad6a8
--- /dev/null
+++ b/sc/source/ui/vba/vbahyperlinks.hxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 SC_VBA_HYPERLINKS_HXX
+#define SC_VBA_HYPERLINKS_HXX
+
+#include <ooo/vba/excel/XHyperlinks.hpp>
+#include <rtl/ref.hxx>
+#include <vbahelper/vbacollectionimpl.hxx>
+
+class ScRangeList;
+
+// ============================================================================
+
+namespace detail {
+
+class ScVbaHlinkContainer;
+typedef ::rtl::Reference< ScVbaHlinkContainer > ScVbaHlinkContainerRef;
+
+/** Base class for ScVbaHyperlinks to get an initialized ScVbaHlinkContainer
+ class member before the ScVbaHyperlinks_BASE base class will be constructed.
+ */
+struct ScVbaHlinkContainerMember
+{
+ ScVbaHlinkContainerRef mxContainer;
+
+ explicit ScVbaHlinkContainerMember( ScVbaHlinkContainer* pContainer );
+ ~ScVbaHlinkContainerMember();
+};
+
+} // namespace detail
+
+// ============================================================================
+
+class ScVbaHyperlinks;
+typedef ::rtl::Reference< ScVbaHyperlinks > ScVbaHyperlinksRef;
+
+typedef CollTestImplHelper< ov::excel::XHyperlinks > ScVbaHyperlinks_BASE;
+
+/** Represents a collection of hyperlinks of a worksheet or of a range.
+
+ When a Hyperlinks collection object has been constructed from a VBA
+ Worksheet object, it will always represent the current set of all
+ hyperlinks existing in the sheet. Insertion and deletion of hyperlinks will
+ be reflected by the instance.
+
+ When a Hyperlinks collection object has been constructed from a VBA Range
+ object, it will represent the set of hyperlinks that have existed at its
+ construction time, and that are located completely inside the range(s)
+ represented by the Range object. Insertion and deletion of hyperlinks will
+ *not* be reflected by that instance. The instance will always offer all
+ hyperlinks it has been constructed with, even if they no longer exist.
+ Furthermore, the instance will not offer hyperlinks inserted later, even if
+ the instance itself has been used to insert the new hyperlinks.
+
+ VBA code example:
+
+ With ThisWorkbook.Worksheets(1)
+
+ Set hlinks = .Hyperlinks ' global Hyperlinks object
+ Set myrange = .Range("A1:C3")
+ Set rangelinks1 = myrange.Hyperlinks ' hyperlinks of range A1:C3
+
+ MsgBox hlinks.Count ' 0
+ MsgBox rangelinks1.Count ' 0
+
+ hlinks.Add .Range("A1"), "http://example.com"
+ ' a new hyperlink has been added in cell A1
+
+ MsgBox hlinks.Count ' 1
+ MsgBox rangelinks1.Count ' still 0!
+ Set rangelinks2 = myrange.Hyperlinks ' hyperlinks of range A1:C3
+ MsgBox rangelinks2.Count ' 1 (constructed after Add)
+
+ rangelinks1.Add .Range("A2"), "http://example.com"
+ ' a new hyperlink has been constructed via the rangelinks1 object
+ ' but this addition has been done by the worksheet Hyperlinks object
+
+ MsgBox hlinks.Count ' 2
+ MsgBox rangelinks1.Count ' still 0!!!
+ MsgBox rangelinks2.Count ' still 1!!!
+ MsgBox myrange.Hyperlinks.Count ' 2 (constructed after Add)
+
+ End With
+ */
+class ScVbaHyperlinks : private detail::ScVbaHlinkContainerMember, public ScVbaHyperlinks_BASE
+{
+public:
+ explicit ScVbaHyperlinks(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext ) throw (css::uno::RuntimeException);
+
+ explicit ScVbaHyperlinks(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const ScVbaHyperlinksRef& rxSheetHlinks, const ScRangeList& rScRanges ) throw (css::uno::RuntimeException);
+
+ virtual ~ScVbaHyperlinks();
+
+ // XHyperlinks
+ virtual css::uno::Reference< ov::excel::XHyperlink > SAL_CALL Add(
+ const css::uno::Any& rAnchor, const css::uno::Any& rAddress, const css::uno::Any& rSubAddress,
+ const css::uno::Any& rScreenTip, const css::uno::Any& rTextToDisplay )
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL Delete() throw (css::uno::RuntimeException);
+
+ // XEnumerationAccess
+ virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() throw (css::uno::RuntimeException);
+
+ // XElementAccess
+ virtual css::uno::Type SAL_CALL getElementType() throw (css::uno::RuntimeException);
+
+ // ScVbaCollectionBase
+ virtual css::uno::Any createCollectionObject( const css::uno::Any& rSource );
+
+ // XHelperInterface
+ VBAHELPER_DECL_XHELPERINTERFACE
+
+private:
+ ScVbaHyperlinksRef mxSheetHlinks;
+};
+
+// ============================================================================
+
+#endif
diff --git a/sc/source/ui/vba/vbainterior.cxx b/sc/source/ui/vba/vbainterior.cxx
index 3af6243e0fa7..face47767bdc 100644
--- a/sc/source/ui/vba/vbainterior.cxx
+++ b/sc/source/ui/vba/vbainterior.cxx
@@ -40,10 +40,13 @@
#include <comphelper/processfactory.hxx>
#include <cppuhelper/queryinterface.hxx>
+#include <map>
+
#include <svx/xtable.hxx>
#include "vbainterior.hxx"
#include "vbapalette.hxx"
+#include "document.hxx"
#define STATIC_TABLE_SIZE( array ) (sizeof(array)/sizeof(*(array)))
#define COLORMAST 0xFFFFFF
diff --git a/sc/source/ui/vba/vbainterior.hxx b/sc/source/ui/vba/vbainterior.hxx
index f0d4db1334fd..027d06040af9 100644
--- a/sc/source/ui/vba/vbainterior.hxx
+++ b/sc/source/ui/vba/vbainterior.hxx
@@ -36,6 +36,8 @@
#include <com/sun/star/script/XInvocation.hpp>
#include <vbahelper/vbahelperinterface.hxx>
+#include <tools/color.hxx>
+
class ScDocument;
typedef InheritedHelperInterfaceImpl1< ov::excel::XInterior > ScVbaInterior_BASE;
diff --git a/sc/source/ui/vba/vbaname.cxx b/sc/source/ui/vba/vbaname.cxx
index bc0b016177c7..a6e8a402425f 100644
--- a/sc/source/ui/vba/vbaname.cxx
+++ b/sc/source/ui/vba/vbaname.cxx
@@ -232,7 +232,10 @@ ScVbaName::setRefersToR1C1Local( const ::rtl::OUString & rRefersTo ) throw (css:
css::uno::Reference< ov::excel::XRange >
ScVbaName::getRefersToRange() throw (css::uno::RuntimeException)
{
- uno::Reference< ov::excel::XRange > xRange = ScVbaRange::getRangeObjectForName( mxContext, mxNamedRange->getName(), excel::getDocShell( mxModel ), formula::FormulaGrammar::CONV_XL_R1C1 );
+ // FIXME: pass proper Worksheet parent
+ uno::Reference< ov::excel::XRange > xRange = ScVbaRange::getRangeObjectForName(
+ uno::Reference< XHelperInterface >(), mxContext,
+ mxNamedRange->getName(), excel::getDocShell( mxModel ), formula::FormulaGrammar::CONV_XL_R1C1 );
return xRange;
}
diff --git a/sc/source/ui/vba/vbapalette.cxx b/sc/source/ui/vba/vbapalette.cxx
index 0ce55547d4a1..c6ae5c488a20 100644
--- a/sc/source/ui/vba/vbapalette.cxx
+++ b/sc/source/ui/vba/vbapalette.cxx
@@ -24,10 +24,12 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+
#include "vbapalette.hxx"
#include <cppuhelper/implbase1.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
-
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include "excelvbahelper.hxx"
using namespace ::com::sun::star;
using namespace ::ooo::vba;
@@ -82,6 +84,11 @@ public:
};
+ScVbaPalette::ScVbaPalette( const uno::Reference< frame::XModel >& rxModel ) :
+ m_pShell( excel::getDocShell( rxModel ) )
+{
+}
+
uno::Reference< container::XIndexAccess >
ScVbaPalette::getDefaultPalette()
{
diff --git a/sc/source/ui/vba/vbapalette.hxx b/sc/source/ui/vba/vbapalette.hxx
index 9c7ea2ebc3f1..b51483772674 100644
--- a/sc/source/ui/vba/vbapalette.hxx
+++ b/sc/source/ui/vba/vbapalette.hxx
@@ -24,19 +24,26 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+
#ifndef SC_VBAPALETTE_HXX
#define SC_VBAPALETTE_HXX
-#include "excelvbahelper.hxx"
-#include <document.hxx>
-#include <com/sun/star/container/XIndexAccess.hpp>
+#include <vbahelper/vbahelper.hxx>
+
+namespace com { namespace sun { namespace star {
+ namespace container { class XIndexAccess; }
+ namespace frame { class XModel; }
+} } }
+
+class SfxObjectShell;
class ScVbaPalette
{
private:
SfxObjectShell* m_pShell;
public:
- ScVbaPalette( SfxObjectShell* pShell = NULL ) : m_pShell( pShell ){}
+ ScVbaPalette( SfxObjectShell* pShell = 0 ) : m_pShell( pShell ) {}
+ ScVbaPalette( const css::uno::Reference< css::frame::XModel >& rxModel );
// if no palette available e.g. because the document doesn't have a
// palette defined then a default palette will be returned.
css::uno::Reference< css::container::XIndexAccess > getPalette() const;
diff --git a/sc/source/ui/vba/vbapane.cxx b/sc/source/ui/vba/vbapane.cxx
index 263529dde145..29d7a286b402 100644
--- a/sc/source/ui/vba/vbapane.cxx
+++ b/sc/source/ui/vba/vbapane.cxx
@@ -24,18 +24,26 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#include<com/sun/star/table/CellRangeAddress.hpp>
-#include<vbapane.hxx>
+
+#include "vbapane.hxx"
+#include <com/sun/star/sheet/XSpreadsheet.hpp>
+#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
+#include <com/sun/star/table/CellRangeAddress.hpp>
+#include "vbarange.hxx"
using namespace com::sun::star;
using namespace ooo::vba;
-/*
-ScVbaPane::ScVbaPane( uno::Reference< uno::XComponentContext > xContext, uno::Refrence< sheet::XViewPane > xViewPane )
- : m_xContext( xContext ), m_xViewPane( xViewPane )
+ScVbaPane::ScVbaPane(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const uno::Reference< uno::XComponentContext >& xContext,
+ const uno::Reference< frame::XModel >& xModel,
+ const uno::Reference< sheet::XViewPane > xViewPane ) throw (uno::RuntimeException) :
+ ScVbaPane_BASE( xParent, xContext ),
+ m_xModel( xModel, uno::UNO_SET_THROW ),
+ m_xViewPane( xViewPane, uno::UNO_SET_THROW )
{
}
-*/
sal_Int32 SAL_CALL
ScVbaPane::getScrollColumn() throw (uno::RuntimeException)
@@ -71,6 +79,19 @@ ScVbaPane::setScrollRow( sal_Int32 _scrollrow ) throw (uno::RuntimeException)
m_xViewPane->setFirstVisibleRow( _scrollrow - 1 );
}
+uno::Reference< excel::XRange > SAL_CALL
+ScVbaPane::getVisibleRange() throw (uno::RuntimeException)
+{
+ // TODO: Excel includes partly visible rows/columns, Calc does not
+ table::CellRangeAddress aRangeAddr = m_xViewPane->getVisibleRange();
+ uno::Reference< sheet::XSpreadsheetDocument > xDoc( m_xModel, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XIndexAccess > xSheetsIA( xDoc->getSheets(), uno::UNO_QUERY_THROW );
+ uno::Reference< sheet::XSpreadsheet > xSheet( xSheetsIA->getByIndex( aRangeAddr.Sheet ), uno::UNO_QUERY_THROW );
+ uno::Reference< table::XCellRange > xRange( xSheet->getCellRangeByPosition( aRangeAddr.StartColumn, aRangeAddr.StartRow, aRangeAddr.EndColumn, aRangeAddr.EndRow ), uno::UNO_SET_THROW );
+ // TODO: getParent() returns the window, Range needs the worksheet
+ return new ScVbaRange( getParent(), mxContext, xRange );
+}
+
//Method
void SAL_CALL
ScVbaPane::SmallScroll( const uno::Any& Down, const uno::Any& Up, const uno::Any& ToRight, const uno::Any& ToLeft ) throw (uno::RuntimeException)
@@ -83,54 +104,34 @@ ScVbaPane::SmallScroll( const uno::Any& Down, const uno::Any& Up, const uno::Any
if( Down.hasValue() )
{
sal_Int32 down = 0;
- try
- {
- Down >>= down;
+ if( Down >>= down )
downRows += down;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: Down\n" );
- }
}
if( Up.hasValue() )
{
sal_Int32 up = 0;
- try
- {
- Up >>= up;
+ if( Up >>= up )
downRows -= up;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: Up\n" );
- }
}
if( ToRight.hasValue() )
{
sal_Int32 right = 0;
- try
- {
- ToRight >>= right;
+ if( ToRight >>= right )
rightCols += right;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: ToRight\n" );
- }
}
if( ToLeft.hasValue() )
{
sal_Int32 left = 0;
- try
- {
- ToLeft >>= left;
+ if( ToLeft >>= left )
rightCols -= left;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: ToLeft\n" );
- }
}
if( messageBuffer.getLength() > 0 )
throw(uno::RuntimeException( messageBuffer, uno::Reference< uno::XInterface >() ) );
@@ -158,56 +159,35 @@ ScVbaPane::LargeScroll( const uno::Any& Down, const uno::Any& Up, const uno::Any
if( Down.hasValue() )
{
sal_Int32 down = 0;
- try
- {
- Down >>= down;
+ if( Down >>= down )
downPages += down;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: Down\n" );
- }
}
if( Up.hasValue() )
{
sal_Int32 up = 0;
- try
- {
- Up >>= up;
+ if( Up >>= up )
downPages -= up;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: Up\n" );
- }
}
if( ToRight.hasValue() )
{
sal_Int32 right = 0;
- try
- {
- ToRight >>= right;
+ if( ToRight >>= right )
acrossPages += right;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: ToRight\n" );
- }
}
if( ToLeft.hasValue() )
{
sal_Int32 left = 0;
- try
- {
- ToLeft >>= left;
+ if( ToLeft >>= left )
acrossPages -= left;
- }
- catch ( uno::Exception )
- {
+ else
messageBuffer += rtl::OUString::createFromAscii( "Error getting parameter: ToLeft\n" );
- }
}
-
if( messageBuffer.getLength() > 0 )
throw(uno::RuntimeException( messageBuffer, uno::Reference< uno::XInterface >() ) );
@@ -220,3 +200,7 @@ ScVbaPane::LargeScroll( const uno::Any& Down, const uno::Any& Up, const uno::Any
m_xViewPane->setFirstVisibleRow( newStartRow );
m_xViewPane->setFirstVisibleColumn( newStartCol );
}
+
+// XHelperInterface
+
+VBAHELPER_IMPL_XHELPERINTERFACE( ScVbaPane, "ooo.vba.excel.Pane" )
diff --git a/sc/source/ui/vba/vbapane.hxx b/sc/source/ui/vba/vbapane.hxx
index 0fa1d49709de..ff87a9966d80 100644
--- a/sc/source/ui/vba/vbapane.hxx
+++ b/sc/source/ui/vba/vbapane.hxx
@@ -27,34 +27,41 @@
#ifndef SC_VBA_PANE_HXX
#define SC_VBA_PANE_HXX
-#include<cppuhelper/implbase1.hxx>
-#include<com/sun/star/sheet/XViewPane.hpp>
-#include<ooo/vba/excel/XPane.hpp>
+#include <com/sun/star/sheet/XViewPane.hpp>
+#include <ooo/vba/excel/XPane.hpp>
+#include <vbahelper/vbahelperinterface.hxx>
+#include "excelvbahelper.hxx"
-#include"excelvbahelper.hxx"
+typedef InheritedHelperInterfaceImpl1< ov::excel::XPane > ScVbaPane_BASE;
-typedef cppu::WeakImplHelper1< ov::excel::XPane > PaneImpl_Base;
-
-class ScVbaPane : public PaneImpl_Base
+class ScVbaPane : public ScVbaPane_BASE
{
-protected:
- css::uno::Reference< css::uno::XComponentContext > m_xContext;
- css::uno::Reference< css::sheet::XViewPane > m_xViewPane;
public:
- ScVbaPane( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::sheet::XViewPane > xViewPane ) : m_xContext( xContext ), m_xViewPane( xViewPane ) {}
+ ScVbaPane(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const css::uno::Reference< css::uno::XComponentContext >& xContext,
+ const css::uno::Reference< css::frame::XModel >& xModel,
+ const css::uno::Reference< css::sheet::XViewPane > xViewPane ) throw (css::uno::RuntimeException);
css::uno::Reference< css::sheet::XViewPane > getViewPane() { return m_xViewPane; }
- //Attribute
+ // XPane attributes
virtual sal_Int32 SAL_CALL getScrollColumn() throw (css::uno::RuntimeException);
virtual void SAL_CALL setScrollColumn( sal_Int32 _scrollcolumn ) throw (css::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getScrollRow() throw (css::uno::RuntimeException);
virtual void SAL_CALL setScrollRow( sal_Int32 _scrollrow ) throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XRange > SAL_CALL getVisibleRange() throw (css::uno::RuntimeException);
- //Method
+ // XPane methods
virtual void SAL_CALL SmallScroll( const css::uno::Any& Down, const css::uno::Any& Up, const css::uno::Any& ToRight, const css::uno::Any& ToLeft ) throw (css::uno::RuntimeException);
virtual void SAL_CALL LargeScroll( const css::uno::Any& Down, const css::uno::Any& Up, const css::uno::Any& ToRight, const css::uno::Any& ToLeft ) throw (css::uno::RuntimeException);
+ // XHelperInterface
+ VBAHELPER_DECL_XHELPERINTERFACE
+
+protected:
+ css::uno::Reference< css::frame::XModel > m_xModel;
+ css::uno::Reference< css::sheet::XViewPane > m_xViewPane;
};
-#endif//SC_VBA_PANE_HXX
+#endif //SC_VBA_PANE_HXX
diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx
index 1a153b440b15..ccf5a3bc5b54 100644
--- a/sc/source/ui/vba/vbarange.cxx
+++ b/sc/source/ui/vba/vbarange.cxx
@@ -81,6 +81,7 @@
#include <com/sun/star/sheet/XSheetFilterable.hpp>
#include <com/sun/star/sheet/FilterConnection.hpp>
#include <com/sun/star/util/CellProtection.hpp>
+#include <com/sun/star/util/TriState.hpp>
#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
#include <com/sun/star/awt/XDevice.hpp>
@@ -141,6 +142,7 @@
#include "vbaborders.hxx"
#include "vbaworksheet.hxx"
#include "vbavalidation.hxx"
+#include "vbahyperlinks.hxx"
#include "tabvwsh.hxx"
#include "rangelst.hxx"
@@ -367,7 +369,7 @@ ScVbaRangeAreas::createCollectionObject( const uno::Any& aSource )
ScDocShell*
getDocShellFromIf( const uno::Reference< uno::XInterface >& xIf ) throw ( uno::RuntimeException )
{
- ScCellRangesBase* pUno= dynamic_cast< ScCellRangesBase* >( xIf.get() );
+ ScCellRangesBase* pUno = ScCellRangesBase::getImplementation( xIf );
if ( !pUno )
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Failed to access underlying uno range object" ) ), uno::Reference< uno::XInterface >() );
return pUno->GetDocShell();
@@ -381,6 +383,14 @@ getDocShellFromRange( const uno::Reference< table::XCellRange >& xRange ) throw
return getDocShellFromIf(xIf );
}
+ScDocShell*
+getDocShellFromRanges( const uno::Reference< sheet::XSheetCellRangeContainer >& xRanges ) throw ( uno::RuntimeException )
+{
+ // need the ScCellRangesBase to get docshell
+ uno::Reference< uno::XInterface > xIf( xRanges, uno::UNO_QUERY_THROW );
+ return getDocShellFromIf(xIf );
+}
+
uno::Reference< frame::XModel > getModelFromXIf( const uno::Reference< uno::XInterface >& xIf ) throw ( uno::RuntimeException )
{
ScDocShell* pDocShell = getDocShellFromIf(xIf );
@@ -405,7 +415,7 @@ getDocumentFromRange( const uno::Reference< table::XCellRange >& xRange )
ScDocument*
-ScVbaRange::getScDocument()
+ScVbaRange::getScDocument() throw (uno::RuntimeException)
{
if ( mxRanges.is() )
{
@@ -417,7 +427,7 @@ ScVbaRange::getScDocument()
}
ScDocShell*
-ScVbaRange::getScDocShell()
+ScVbaRange::getScDocShell() throw (uno::RuntimeException)
{
if ( mxRanges.is() )
{
@@ -428,6 +438,41 @@ ScVbaRange::getScDocShell()
return getDocShellFromRange( mxRange );
}
+/*static*/ ScVbaRange* ScVbaRange::getImplementation( const uno::Reference< excel::XRange >& rxRange )
+{
+ // FIXME: always save to use dynamic_cast? Or better to (implement and) use XTunnel?
+ return dynamic_cast< ScVbaRange* >( rxRange.get() );
+}
+
+uno::Reference< frame::XModel > ScVbaRange::getUnoModel() throw (uno::RuntimeException)
+{
+ if( ScDocShell* pDocShell = getScDocShell() )
+ return pDocShell->GetModel();
+ throw uno::RuntimeException();
+}
+
+/*static*/ uno::Reference< frame::XModel > ScVbaRange::getUnoModel( const uno::Reference< excel::XRange >& rxRange ) throw (uno::RuntimeException)
+{
+ if( ScVbaRange* pScVbaRange = getImplementation( rxRange ) )
+ return pScVbaRange->getUnoModel();
+ throw uno::RuntimeException();
+}
+
+const ScRangeList& ScVbaRange::getScRangeList() throw (uno::RuntimeException)
+{
+ if( ScCellRangesBase* pScRangesBase = getCellRangesBase() )
+ return pScRangesBase->GetRangeList();
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Cannot obtain UNO range implementation object" ) ), uno::Reference< uno::XInterface >() );
+}
+
+/*static*/ const ScRangeList& ScVbaRange::getScRangeList( const uno::Reference< excel::XRange >& rxRange ) throw (uno::RuntimeException)
+{
+ if( ScVbaRange* pScVbaRange = getImplementation( rxRange ) )
+ return pScVbaRange->getScRangeList();
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Cannot obtain VBA range implementation object" ) ), uno::Reference< uno::XInterface >() );
+}
+
+
class NumFormatHelper
{
uno::Reference< util::XNumberFormatsSupplier > mxSupplier;
@@ -472,7 +517,7 @@ public:
rtl::OUString getNumberFormatString()
{
uno::Reference< uno::XInterface > xIf( mxRangeProps, uno::UNO_QUERY_THROW );
- ScCellRangeObj* pUnoCellRange = dynamic_cast< ScCellRangeObj* >( xIf.get() );
+ ScCellRangesBase* pUnoCellRange = ScCellRangesBase::getImplementation( xIf );
if ( pUnoCellRange )
{
@@ -577,20 +622,17 @@ class CellsEnumeration : public CellsEnumeration_BASE
uno::Reference< XCollection > m_xAreas;
vCellPos m_CellPositions;
vCellPos::const_iterator m_it;
+
uno::Reference< table::XCellRange > getArea( sal_Int32 nVBAIndex ) throw ( uno::RuntimeException )
{
if ( nVBAIndex < 1 || nVBAIndex > m_xAreas->getCount() )
throw uno::RuntimeException();
uno::Reference< excel::XRange > xRange( m_xAreas->Item( uno::makeAny(nVBAIndex), uno::Any() ), uno::UNO_QUERY_THROW );
- ScVbaRange* pRange = dynamic_cast< ScVbaRange* >( xRange.get() );
- uno::Reference< table::XCellRange > xCellRange;
- if ( !pRange )
- throw uno::RuntimeException();
- xCellRange.set( pRange->getCellRange(), uno::UNO_QUERY_THROW );;
+ uno::Reference< table::XCellRange > xCellRange( ScVbaRange::getCellRange( xRange ), uno::UNO_QUERY_THROW );
return xCellRange;
-
}
- void populateArea( sal_Int32 nVBAIndex )
+
+ void populateArea( sal_Int32 nVBAIndex )
{
uno::Reference< table::XCellRange > xRange = getArea( nVBAIndex );
uno::Reference< table::XColumnRowRange > xColumnRowRange(xRange, uno::UNO_QUERY_THROW );
@@ -1136,7 +1178,7 @@ bool getScRangeListForAddress( const rtl::OUString& sName, ScDocShell* pDocSh, S
ScVbaRange*
-getRangeForName( const uno::Reference< uno::XComponentContext >& xContext, const rtl::OUString& sName, ScDocShell* pDocSh, table::CellRangeAddress& pAddr, formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_XL_A1 ) throw ( uno::RuntimeException )
+getRangeForName( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const rtl::OUString& sName, ScDocShell* pDocSh, table::CellRangeAddress& pAddr, formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_XL_A1 ) throw ( uno::RuntimeException )
{
ScRangeList aCellRanges;
ScRange refRange;
@@ -1147,20 +1189,107 @@ getRangeForName( const uno::Reference< uno::XComponentContext >& xContext, const
if ( aCellRanges.First() == aCellRanges.Last() )
{
uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pDocSh, *aCellRanges.First() ) );
- // #FIXME need proper (WorkSheet) parent
- return new ScVbaRange( uno::Reference< XHelperInterface >(), xContext, xRange );
+ return new ScVbaRange( xParent, xContext, xRange );
}
uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( pDocSh, aCellRanges ) );
+ return new ScVbaRange( xParent, xContext, xRanges );
+}
- // #FIXME need proper (WorkSheet) parent
- return new ScVbaRange( uno::Reference< XHelperInterface >(), xContext, xRanges );
+// ----------------------------------------------------------------------------
+
+namespace {
+
+template< typename RangeType >
+inline table::CellRangeAddress lclGetRangeAddress( const uno::Reference< RangeType >& rxCellRange ) throw (uno::RuntimeException)
+{
+ return uno::Reference< sheet::XCellRangeAddressable >( rxCellRange, uno::UNO_QUERY_THROW )->getRangeAddress();
+}
+
+uno::Reference< sheet::XSheetCellRange > lclExpandToMerged( const uno::Reference< table::XCellRange >& rxCellRange, bool bRecursive ) throw (uno::RuntimeException)
+{
+ uno::Reference< sheet::XSheetCellRange > xNewCellRange( rxCellRange, uno::UNO_QUERY_THROW );
+ uno::Reference< sheet::XSpreadsheet > xSheet( xNewCellRange->getSpreadsheet(), uno::UNO_SET_THROW );
+ table::CellRangeAddress aNewAddress = lclGetRangeAddress( xNewCellRange );
+ table::CellRangeAddress aOldAddress;
+ // expand as long as there are new merged ranges included
+ do
+ {
+ aOldAddress = aNewAddress;
+ uno::Reference< sheet::XSheetCellCursor > xCursor( xSheet->createCursorByRange( xNewCellRange ), uno::UNO_SET_THROW );
+ xCursor->collapseToMergedArea();
+ xNewCellRange.set( xCursor, uno::UNO_QUERY_THROW );
+ aNewAddress = lclGetRangeAddress( xNewCellRange );
+ }
+ while( bRecursive && (aOldAddress != aNewAddress) );
+ return xNewCellRange;
}
+uno::Reference< sheet::XSheetCellRangeContainer > lclExpandToMerged( const uno::Reference< sheet::XSheetCellRangeContainer >& rxCellRanges, bool bRecursive ) throw (uno::RuntimeException)
+{
+ if( !rxCellRanges.is() )
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Missing cell ranges object" ) ), uno::Reference< uno::XInterface >() );
+ sal_Int32 nCount = rxCellRanges->getCount();
+ if( nCount < 1 )
+ throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Missing cell ranges object" ) ), uno::Reference< uno::XInterface >() );
+
+ ScRangeList aScRanges;
+ for( sal_Int32 nIndex = 0; nIndex < nCount; ++nIndex )
+ {
+ uno::Reference< table::XCellRange > xRange( rxCellRanges->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
+ table::CellRangeAddress aRangeAddr = lclGetRangeAddress( lclExpandToMerged( xRange, bRecursive ) );
+ ScRange aScRange;
+ ScUnoConversion::FillScRange( aScRange, aRangeAddr );
+ aScRanges.Append( aScRange );
+ }
+ return new ScCellRangesObj( getDocShellFromRanges( rxCellRanges ), aScRanges );
+}
+
+void lclExpandAndMerge( const uno::Reference< table::XCellRange >& rxCellRange, bool bMerge ) throw (uno::RuntimeException)
+{
+ uno::Reference< util::XMergeable > xMerge( lclExpandToMerged( rxCellRange, true ), uno::UNO_QUERY_THROW );
+ // Calc cannot merge over merged ranges, always unmerge first
+ xMerge->merge( sal_False );
+ if( bMerge )
+ xMerge->merge( sal_True );
+ // FIXME need to check whether all the cell contents are retained or lost by popping up a dialog
+}
+
+util::TriState lclGetMergedState( const uno::Reference< table::XCellRange >& rxCellRange ) throw (uno::RuntimeException)
+{
+ /* 1) Check if range is completely inside one single merged range. To do
+ this, try to extend from top-left cell only (not from entire range).
+ This will excude cases where this range consists of several merged
+ ranges (or parts of them). */
+ table::CellRangeAddress aRangeAddr = lclGetRangeAddress( rxCellRange );
+ uno::Reference< table::XCellRange > xTopLeft( rxCellRange->getCellRangeByPosition( 0, 0, 0, 0 ), uno::UNO_SET_THROW );
+ uno::Reference< sheet::XSheetCellRange > xExpanded( lclExpandToMerged( xTopLeft, false ), uno::UNO_SET_THROW );
+ table::CellRangeAddress aExpAddr = lclGetRangeAddress( xExpanded );
+ // check that expanded range has more than one cell (really merged)
+ if( ((aExpAddr.StartColumn < aExpAddr.EndColumn) || (aExpAddr.StartRow < aExpAddr.EndRow)) && ScUnoConversion::Contains( aExpAddr, aRangeAddr ) )
+ return util::TriState_YES;
+
+ /* 2) Check if this range contains any merged cells (completely or
+ partly). This seems to be hardly possible via API, as
+ XMergeable::getIsMerged() returns only true, if the top-left cell of a
+ merged range is part of this range, so cases where just the lower part
+ of a merged range is part of this range are not covered. */
+ ScRange aScRange;
+ ScUnoConversion::FillScRange( aScRange, aRangeAddr );
+ bool bHasMerged = getDocumentFromRange( rxCellRange )->HasAttrib( aScRange, HASATTR_MERGED | HASATTR_OVERLAPPED );
+ return bHasMerged ? util::TriState_INDETERMINATE : util::TriState_NO;
+}
+
+} // namespace
+
+// ----------------------------------------------------------------------------
+
css::uno::Reference< excel::XRange >
-ScVbaRange::getRangeObjectForName( const uno::Reference< uno::XComponentContext >& xContext, const rtl::OUString& sRangeName, ScDocShell* pDocSh, formula::FormulaGrammar::AddressConvention eConv ) throw ( uno::RuntimeException )
+ScVbaRange::getRangeObjectForName( const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const uno::Reference< uno::XComponentContext >& xContext, const rtl::OUString& sRangeName,
+ ScDocShell* pDocSh, formula::FormulaGrammar::AddressConvention eConv ) throw ( uno::RuntimeException )
{
table::CellRangeAddress refAddr;
- return getRangeForName( xContext, sRangeName, pDocSh, refAddr, eConv );
+ return getRangeForName( xParent, xContext, sRangeName, pDocSh, refAddr, eConv );
}
@@ -1196,9 +1325,7 @@ table::CellRangeAddress getCellRangeAddressForVBARange( const uno::Any& aParam,
default:
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Can't extact CellRangeAddress from type" ) ), uno::Reference< uno::XInterface >() );
}
- uno::Reference< sheet::XCellRangeAddressable > xAddressable( xRangeParam, uno::UNO_QUERY_THROW );
- return xAddressable->getRangeAddress();
-
+ return lclGetRangeAddress( xRangeParam );
}
uno::Reference< XCollection >
@@ -1398,7 +1525,7 @@ ScVbaRange::ClearContents( sal_Int32 nFlags ) throw (uno::RuntimeException)
for ( sal_Int32 index=1; index <= nItems; ++index )
{
uno::Reference< excel::XRange > xRange( m_Areas->Item( uno::makeAny(index), uno::Any() ), uno::UNO_QUERY_THROW );
- ScVbaRange* pRange = dynamic_cast< ScVbaRange* >( xRange.get() );
+ ScVbaRange* pRange = getImplementation( xRange );
if ( pRange )
pRange->ClearContents( nFlags );
}
@@ -1595,7 +1722,7 @@ ScVbaRange::fillSeries( sheet::FillDirection nFillDirection, sheet::FillMode nFi
for ( sal_Int32 index = 1; index <= xCollection->getCount(); ++index )
{
uno::Reference< excel::XRange > xRange( xCollection->Item( uno::makeAny( index ), uno::Any() ), uno::UNO_QUERY_THROW );
- ScVbaRange* pThisRange = dynamic_cast< ScVbaRange* >( xRange.get() );
+ ScVbaRange* pThisRange = getImplementation( xRange );
pThisRange->fillSeries( nFillDirection, nFillMode, nFillDateMode, fStep, fEndValue );
}
@@ -1975,9 +2102,9 @@ ScVbaRange::Select() throw (uno::RuntimeException)
uno::Reference< frame::XModel > xModel( pShell->GetModel(), uno::UNO_QUERY_THROW );
uno::Reference< view::XSelectionSupplier > xSelection( xModel->getCurrentController(), uno::UNO_QUERY_THROW );
if ( mxRanges.is() )
- xSelection->select( uno::makeAny( mxRanges ) );
+ xSelection->select( uno::Any( lclExpandToMerged( mxRanges, true ) ) );
else
- xSelection->select( uno::makeAny( mxRange ) );
+ xSelection->select( uno::Any( lclExpandToMerged( mxRange, true ) ) );
// set focus on document e.g.
// ThisComponent.CurrentController.Frame.getContainerWindow.SetFocus
try
@@ -1990,7 +2117,6 @@ ScVbaRange::Select() throw (uno::RuntimeException)
catch( uno::Exception& )
{
}
-
}
}
@@ -2168,36 +2294,65 @@ ScVbaRange::Columns(const uno::Any& aIndex ) throw (uno::RuntimeException)
void
ScVbaRange::setMergeCells( const uno::Any& aIsMerged ) throw (script::BasicErrorException, uno::RuntimeException)
{
- sal_Bool bIsMerged = sal_False;
- aIsMerged >>= bIsMerged;
- uno::Reference< util::XMergeable > xMerge( mxRange, ::uno::UNO_QUERY_THROW );
- //FIXME need to check whether all the cell contents are retained or lost by popping up a dialog
- xMerge->merge( bIsMerged );
+ bool bMerge = false;
+ aIsMerged >>= bMerge;
+
+ if( mxRanges.is() )
+ {
+ sal_Int32 nCount = mxRanges->getCount();
+
+ // VBA does nothing (no error) if the own ranges overlap somehow
+ ::std::vector< table::CellRangeAddress > aList;
+ for( sal_Int32 nIndex = 0; nIndex < nCount; ++nIndex )
+ {
+ uno::Reference< sheet::XCellRangeAddressable > xRangeAddr( mxRanges->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
+ table::CellRangeAddress aAddress = xRangeAddr->getRangeAddress();
+ for( ::std::vector< table::CellRangeAddress >::const_iterator aIt = aList.begin(), aEnd = aList.end(); aIt != aEnd; ++aIt )
+ if( ScUnoConversion::Intersects( *aIt, aAddress ) )
+ return;
+ aList.push_back( aAddress );
+ }
+
+ // (un)merge every range after it has been extended to intersecting merged ranges from sheet
+ for( sal_Int32 nIndex = 0; nIndex < nCount; ++nIndex )
+ {
+ uno::Reference< table::XCellRange > xRange( mxRanges->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
+ lclExpandAndMerge( xRange, bMerge );
+ }
+ return;
+ }
+
+ // otherwise, merge single range
+ lclExpandAndMerge( mxRange, bMerge );
}
uno::Any
ScVbaRange::getMergeCells() throw (script::BasicErrorException, uno::RuntimeException)
{
- sal_Int32 nItems = m_Areas->getCount();
-
- if ( nItems > 1 )
+ if( mxRanges.is() )
{
- uno::Any aResult = aNULL();
- for ( sal_Int32 index=1; index != nItems; ++index )
+ sal_Int32 nCount = mxRanges->getCount();
+ for( sal_Int32 nIndex = 0; nIndex < nCount; ++nIndex )
{
- uno::Reference< excel::XRange > xRange( m_Areas->Item( uno::makeAny(index), uno::Any() ), uno::UNO_QUERY_THROW );
- if ( index > 1 )
- if ( aResult != xRange->getMergeCells() )
- return aNULL();
- aResult = xRange->getMergeCells();
- if ( aNULL() == aResult )
+ uno::Reference< table::XCellRange > xRange( mxRanges->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
+ util::TriState eMerged = lclGetMergedState( xRange );
+ /* Excel always returns NULL, if one range of the range list is
+ partly or completely merged. Even if all ranges are completely
+ merged, the return value is still NULL. */
+ if( eMerged != util::TriState_NO )
return aNULL();
}
- return aResult;
+ // no range is merged anyhow, return false
+ return uno::Any( false );
+ }
+ // otherwise, check single range
+ switch( lclGetMergedState( mxRange ) )
+ {
+ case util::TriState_YES: return uno::Any( true );
+ case util::TriState_NO: return uno::Any( false );
+ default: return aNULL();
}
- uno::Reference< util::XMergeable > xMerge( mxRange, ::uno::UNO_QUERY_THROW );
- return uno::makeAny( xMerge->getIsMerged() );
}
void
@@ -2425,7 +2580,7 @@ ScVbaRange::Range( const uno::Any &Cell1, const uno::Any &Cell2, bool bForceUseI
Cell1 >>= sName;
RangeHelper referRange( xReferrer );
table::CellRangeAddress referAddress = referRange.getCellRangeAddressable()->getRangeAddress();
- return getRangeForName( mxContext, sName, getScDocShell(), referAddress );
+ return getRangeForName( getParent(), mxContext, sName, getScDocShell(), referAddress );
}
else
@@ -2488,8 +2643,7 @@ ScVbaRange::Range( const uno::Any &Cell1, const uno::Any &Cell2, bool bForceUseI
// Allow access to underlying openoffice uno api ( useful for debugging
// with openoffice basic )
-::com::sun::star::uno::Any SAL_CALL
-ScVbaRange::getCellRange( ) throw (::com::sun::star::uno::RuntimeException)
+uno::Any SAL_CALL ScVbaRange::getCellRange( ) throw (uno::RuntimeException)
{
uno::Any aAny;
if ( mxRanges.is() )
@@ -2499,6 +2653,13 @@ ScVbaRange::getCellRange( ) throw (::com::sun::star::uno::RuntimeException)
return aAny;
}
+/*static*/ uno::Any ScVbaRange::getCellRange( const uno::Reference< excel::XRange >& rxRange ) throw (uno::RuntimeException)
+{
+ if( ScVbaRange* pVbaRange = getImplementation( rxRange ) )
+ return pVbaRange->getCellRange();
+ throw uno::RuntimeException();
+}
+
static USHORT
getPasteFlags (sal_Int32 Paste)
{
@@ -2632,14 +2793,25 @@ ScVbaRange::getEntireColumn() throw (uno::RuntimeException)
uno::Reference< excel::XComment > SAL_CALL
ScVbaRange::AddComment( const uno::Any& Text ) throw (uno::RuntimeException)
{
+ // if there is already a comment in the top-left cell then throw
+ if( getComment().is() )
+ throw uno::RuntimeException();
- uno::Reference< excel::XComment > xComment( new ScVbaComment( this, mxContext, mxRange ) );
- // if you don't pass a valid text or if there is already a comment
- // associated with the range then return NULL
- if ( !xComment->Text( Text, uno::Any(), uno::Any() ).getLength()
- || xComment->Text( uno::Any(), uno::Any(), uno::Any() ).getLength() )
- return NULL;
- return xComment;
+ // workaround: Excel allows to create empty comment, Calc does not
+ ::rtl::OUString aNoteText;
+ if( Text.hasValue() && !(Text >>= aNoteText) )
+ throw uno::RuntimeException();
+ if( aNoteText.getLength() == 0 )
+ aNoteText = ::rtl::OUString( sal_Unicode( ' ' ) );
+
+ // try to create a new annotation
+ table::CellRangeAddress aRangePos = lclGetRangeAddress( mxRange );
+ table::CellAddress aNotePos( aRangePos.Sheet, aRangePos.StartColumn, aRangePos.StartRow );
+ uno::Reference< sheet::XSheetCellRange > xCellRange( mxRange, uno::UNO_QUERY_THROW );
+ uno::Reference< sheet::XSheetAnnotationsSupplier > xAnnosSupp( xCellRange->getSpreadsheet(), uno::UNO_QUERY_THROW );
+ uno::Reference< sheet::XSheetAnnotations > xAnnos( xAnnosSupp->getAnnotations(), uno::UNO_SET_THROW );
+ xAnnos->insertNew( aNotePos, aNoteText );
+ return new ScVbaComment( this, mxContext, getUnoModel(), mxRange );
}
uno::Reference< excel::XComment > SAL_CALL
@@ -2647,7 +2819,7 @@ ScVbaRange::getComment() throw (uno::RuntimeException)
{
// intentional behavior to return a null object if no
// comment defined
- uno::Reference< excel::XComment > xComment( new ScVbaComment( this, mxContext, mxRange ) );
+ uno::Reference< excel::XComment > xComment( new ScVbaComment( this, mxContext, getUnoModel(), mxRange ) );
if ( !xComment->Text( uno::Any(), uno::Any(), uno::Any() ).getLength() )
return NULL;
return xComment;
@@ -2976,7 +3148,7 @@ uno::Reference< table::XCellRange > processKey( const uno::Any& Key, uno::Refere
table::CellRangeAddress aRefAddr;
if ( !pDocSh )
throw uno::RuntimeException( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Range::Sort no docshell to calculate key param")), uno::Reference< uno::XInterface >() );
- xKeyRange = getRangeForName( xContext, sRangeName, pDocSh, aRefAddr );
+ xKeyRange = getRangeForName( uno::Reference< XHelperInterface >(), xContext, sRangeName, pDocSh, aRefAddr );
}
else
throw uno::RuntimeException( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Range::Sort illegal type value for key param")), uno::Reference< uno::XInterface >() );
@@ -3734,16 +3906,16 @@ ScVbaRange::getPageBreak() throw (uno::RuntimeException)
{
ScDocument* pDoc = getDocumentFromRange( mxRange );
- BYTE nFlag = 0;
+ ScBreakType nBreak = BREAK_NONE;
if ( !bColumn )
- nFlag = pDoc -> GetRowFlags(thisAddress.StartRow, thisAddress.Sheet);
+ nBreak = pDoc->HasRowBreak(thisAddress.StartRow, thisAddress.Sheet);
else
- nFlag = pDoc -> GetColFlags(static_cast<SCCOL>(thisAddress.StartColumn), thisAddress.Sheet);
+ nBreak = pDoc->HasColBreak(thisAddress.StartColumn, thisAddress.Sheet);
- if ( nFlag & CR_PAGEBREAK)
+ if (nBreak & BREAK_PAGE)
nPageBreak = excel::XlPageBreak::xlPageBreakAutomatic;
- if ( nFlag & CR_MANUALBREAK)
+ if (nBreak & BREAK_MANUAL)
nPageBreak = excel::XlPageBreak::xlPageBreakManual;
}
}
@@ -4147,7 +4319,7 @@ ScVbaRange::AutoFilter( const uno::Any& Field, const uno::Any& Criteria1, const
uno::Reference< excel::XRange > xCurrent( CurrentRegion() );
if ( xCurrent.is() )
{
- ScVbaRange* pRange = dynamic_cast< ScVbaRange* >( xCurrent.get() );
+ ScVbaRange* pRange = getImplementation( xCurrent );
if ( pRange->isSingleCellRange() )
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Can't create AutoFilter") ), uno::Reference< uno::XInterface >() );
if ( pRange )
@@ -4569,6 +4741,27 @@ ScVbaRange::TextToColumns( const css::uno::Any& Destination, const css::uno::Any
//TODO* TrailingMinusNumbers Optional Variant. Numbers that begin with a minus character.
}
+uno::Any SAL_CALL
+ScVbaRange::Hyperlinks( const uno::Any& aIndex ) throw (uno::RuntimeException)
+{
+ /* The range object always returns a new Hyperlinks object containing a
+ fixed list of existing hyperlinks in the range.
+ See vbahyperlinks.hxx for more details. */
+
+ // get the global hyperlink object of the sheet (sheet should always be the parent of a Range object)
+ uno::Reference< excel::XWorksheet > xWorksheet( getParent(), uno::UNO_QUERY_THROW );
+ uno::Reference< excel::XHyperlinks > xSheetHlinks( xWorksheet->Hyperlinks( uno::Any() ), uno::UNO_QUERY_THROW );
+ ScVbaHyperlinksRef xScSheetHlinks( dynamic_cast< ScVbaHyperlinks* >( xSheetHlinks.get() ) );
+ if( !xScSheetHlinks.is() )
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Cannot obtain hyperlinks implementation object" ) ), uno::Reference< uno::XInterface >() );
+
+ // create a new local hyperlinks object based on the sheet hyperlinks
+ ScVbaHyperlinksRef xHlinks( new ScVbaHyperlinks( getParent(), mxContext, xScSheetHlinks, getScRangeList() ) );
+ if( aIndex.hasValue() )
+ return xHlinks->Item( aIndex, uno::Any() );
+ return uno::Any( uno::Reference< excel::XHyperlinks >( xHlinks.get() ) );
+}
+
css::uno::Reference< excel::XValidation > SAL_CALL
ScVbaRange::getValidation() throw (css::uno::RuntimeException)
{
@@ -4577,6 +4770,97 @@ ScVbaRange::getValidation() throw (css::uno::RuntimeException)
return m_xValidation;
}
+namespace {
+
+sal_Unicode lclGetPrefixChar( const uno::Reference< table::XCell >& rxCell ) throw (uno::RuntimeException)
+{
+ /* TODO/FIXME: We need an apostroph-prefix property at the cell to
+ implement this correctly. For now, return an apostroph for every text
+ cell.
+
+ TODO/FIXME: When Application.TransitionNavigKeys is supported and true,
+ this function needs to inspect the cell formatting and return different
+ prefixes according to the horizontal cell alignment.
+ */
+ return (rxCell->getType() == table::CellContentType_TEXT) ? '\'' : 0;
+}
+
+sal_Unicode lclGetPrefixChar( const uno::Reference< table::XCellRange >& rxRange ) throw (uno::RuntimeException)
+{
+ /* This implementation is able to handle different prefixes (needed if
+ Application.TransitionNavigKeys is true). The function lclGetPrefixChar
+ for single cells called from here may return any prefix. If that
+ function returns an empty prefix (NUL character) or different non-empty
+ prefixes for two cells, this function returns 0.
+ */
+ sal_Unicode cCurrPrefix = 0;
+ table::CellRangeAddress aRangeAddr = lclGetRangeAddress( rxRange );
+ sal_Int32 nEndCol = aRangeAddr.EndColumn - aRangeAddr.StartColumn;
+ sal_Int32 nEndRow = aRangeAddr.EndRow - aRangeAddr.StartRow;
+ for( sal_Int32 nRow = 0; nRow <= nEndRow; ++nRow )
+ {
+ for( sal_Int32 nCol = 0; nCol <= nEndCol; ++nCol )
+ {
+ uno::Reference< table::XCell > xCell( rxRange->getCellByPosition( nCol, nRow ), uno::UNO_SET_THROW );
+ sal_Unicode cNewPrefix = lclGetPrefixChar( xCell );
+ if( (cNewPrefix == 0) || ((cCurrPrefix != 0) && (cNewPrefix != cCurrPrefix)) )
+ return 0;
+ cCurrPrefix = cNewPrefix;
+ }
+ }
+ // all cells contain the same prefix - return it
+ return cCurrPrefix;
+}
+
+sal_Unicode lclGetPrefixChar( const uno::Reference< sheet::XSheetCellRangeContainer >& rxRanges ) throw (uno::RuntimeException)
+{
+ sal_Unicode cCurrPrefix = 0;
+ uno::Reference< container::XEnumerationAccess > xRangesEA( rxRanges, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XEnumeration > xRangesEnum( xRangesEA->createEnumeration(), uno::UNO_SET_THROW );
+ while( xRangesEnum->hasMoreElements() )
+ {
+ uno::Reference< table::XCellRange > xRange( xRangesEnum->nextElement(), uno::UNO_QUERY_THROW );
+ sal_Unicode cNewPrefix = lclGetPrefixChar( xRange );
+ if( (cNewPrefix == 0) || ((cCurrPrefix != 0) && (cNewPrefix != cCurrPrefix)) )
+ return 0;
+ cCurrPrefix = cNewPrefix;
+ }
+ // all ranges contain the same prefix - return it
+ return cCurrPrefix;
+}
+
+inline uno::Any lclGetPrefixVariant( sal_Unicode cPrefixChar )
+{
+ return uno::Any( (cPrefixChar == 0) ? ::rtl::OUString() : ::rtl::OUString( cPrefixChar ) );
+}
+
+} // namespace
+
+uno::Any SAL_CALL ScVbaRange::getPrefixCharacter() throw (uno::RuntimeException)
+{
+ /* (1) If Application.TransitionNavigKeys is false, this function returns
+ an apostroph character if the text cell begins with an apostroph
+ character (formula return values are not taken into account); otherwise
+ an empty string.
+
+ (2) If Application.TransitionNavigKeys is true, this function returns
+ an apostroph character, if the cell is left-aligned; a double-quote
+ character, if the cell is right-aligned; a circumflex character, if the
+ cell is centered; a backslash character, if the cell is set to filled;
+ or an empty string, if nothing of the above.
+
+ If a range or a list of ranges contains texts with leading apostroph
+ character as well as other cells, this function returns an empty
+ string.
+ */
+
+ if( mxRange.is() )
+ return lclGetPrefixVariant( lclGetPrefixChar( mxRange ) );
+ if( mxRanges.is() )
+ return lclGetPrefixVariant( lclGetPrefixChar( mxRanges ) );
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected empty Range object" ) ), uno::Reference< uno::XInterface >() );
+}
+
uno::Any ScVbaRange::getShowDetail() throw ( css::uno::RuntimeException)
{
// #FIXME, If the specified range is in a PivotTable report
@@ -4701,7 +4985,7 @@ ScVbaRange::PrintOut( const uno::Any& From, const uno::Any& To, const uno::Any&
table::CellRangeAddress rangeAddress = thisRange.getCellRangeAddressable()->getRangeAddress();
if ( index == 1 )
{
- ScVbaRange* pRange = dynamic_cast< ScVbaRange* >( xRange.get() );
+ ScVbaRange* pRange = getImplementation( xRange );
// initialise the doc shell and the printareas
pShell = getDocShellFromRange( pRange->mxRange );
xPrintAreas.set( thisRange.getSpreadSheet(), uno::UNO_QUERY_THROW );
@@ -4723,7 +5007,7 @@ void SAL_CALL
ScVbaRange::AutoFill( const uno::Reference< excel::XRange >& Destination, const uno::Any& Type ) throw (uno::RuntimeException)
{
uno::Reference< excel::XRange > xDest( Destination, uno::UNO_QUERY_THROW );
- ScVbaRange* pRange = dynamic_cast< ScVbaRange* >( xDest.get() );
+ ScVbaRange* pRange = getImplementation( xDest );
RangeHelper destRangeHelper( pRange->mxRange );
table::CellRangeAddress destAddress = destRangeHelper.getCellRangeAddressable()->getRangeAddress();
@@ -5133,7 +5417,7 @@ ScVbaRange::SpecialCells( const uno::Any& _oType, const uno::Any& _oValue) throw
{
uno::Reference< excel::XRange > xRange( m_Areas->Item( uno::makeAny(index), uno::Any() ), uno::UNO_QUERY_THROW );
xRange = xRange->SpecialCells( _oType, _oValue);
- ScVbaRange* pRange = dynamic_cast< ScVbaRange* >( xRange.get() );
+ ScVbaRange* pRange = getImplementation( xRange );
if ( xRange.is() && pRange )
{
sal_Int32 nElems = ( pRange->m_Areas->getCount() + 1 );
diff --git a/sc/source/ui/vba/vbarange.hxx b/sc/source/ui/vba/vbarange.hxx
index 1f161a79d973..a9147a0d7840 100644
--- a/sc/source/ui/vba/vbarange.hxx
+++ b/sc/source/ui/vba/vbarange.hxx
@@ -60,6 +60,7 @@ class ScCellRangeObj;
class ScCellRangesObj;
class ScDocShell;
class ScDocument;
+class ScRangeList;
//typedef InheritedHelperInterfaceImpl1< ov::excel::XRange > ScVbaRange_BASE;
typedef ScVbaFormat< ov::excel::XRange > ScVbaRange_BASE;
@@ -127,13 +128,27 @@ public:
ScVbaRange( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::sheet::XSheetCellRangeContainer >& xRanges, sal_Bool bIsRows = false, sal_Bool bIsColumns = false ) throw ( css::lang::IllegalArgumentException );
ScVbaRange( css::uno::Sequence< css::uno::Any > const& aArgs, css::uno::Reference< css::uno::XComponentContext >const& xContext ) throw ( css::lang::IllegalArgumentException );
- ScDocument* getScDocument();
- ScDocShell* getScDocShell();
+ ScDocument* getScDocument() throw (css::uno::RuntimeException);
+ ScDocShell* getScDocShell() throw (css::uno::RuntimeException);
+
+ /** Returns the ScVbaRange implementation object for the passed VBA Range object. */
+ static ScVbaRange* getImplementation( const css::uno::Reference< ov::excel::XRange >& rxRange );
+
+ css::uno::Reference< css::frame::XModel > getUnoModel() throw (css::uno::RuntimeException);
+ static css::uno::Reference< css::frame::XModel > getUnoModel( const css::uno::Reference< ov::excel::XRange >& rxRange ) throw (css::uno::RuntimeException);
+
+ const ScRangeList& getScRangeList() throw (css::uno::RuntimeException);
+ static const ScRangeList& getScRangeList( const css::uno::Reference< ov::excel::XRange >& rxRange ) throw (css::uno::RuntimeException);
virtual ~ScVbaRange();
virtual css::uno::Reference< ov::XHelperInterface > thisHelperIface() { return this; }
bool isSingleCellRange();
- static css::uno::Reference< ov::excel::XRange > getRangeObjectForName( const css::uno::Reference< css::uno::XComponentContext >& xContext, const rtl::OUString& sRangeName, ScDocShell* pDocSh, formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_XL_A1 ) throw ( css::uno::RuntimeException );
+
+ static css::uno::Reference< ov::excel::XRange > getRangeObjectForName(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const css::uno::Reference< css::uno::XComponentContext >& xContext,
+ const rtl::OUString& sRangeName, ScDocShell* pDocSh,
+ formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_XL_A1 ) throw ( css::uno::RuntimeException );
// Attributes
virtual css::uno::Any SAL_CALL getValue() throw (css::uno::RuntimeException);
@@ -173,6 +188,7 @@ public:
virtual css::uno::Any SAL_CALL getPageBreak() throw (css::uno::RuntimeException);
virtual void SAL_CALL setPageBreak( const css::uno::Any& _pagebreak ) throw (css::uno::RuntimeException);
virtual css::uno::Reference< ov::excel::XValidation > SAL_CALL getValidation() throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getPrefixCharacter() throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL getShowDetail() throw (css::uno::RuntimeException);
virtual void SAL_CALL setShowDetail(const css::uno::Any& aShowDetail) throw (css::uno::RuntimeException);
// Methods
@@ -212,6 +228,7 @@ public:
virtual css::uno::Reference< ov::excel::XRange > SAL_CALL Range( const css::uno::Any &Cell1, const css::uno::Any &Cell2 ) throw (css::uno::RuntimeException);
virtual css::uno::Reference< ov::excel::XRange > Range( const css::uno::Any &Cell1, const css::uno::Any &Cell2, bool bForceUseInpuRangeTab ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL getCellRange( ) throw (css::uno::RuntimeException);
+ static css::uno::Any getCellRange( const css::uno::Reference< ov::excel::XRange >& rxRange ) throw (css::uno::RuntimeException);
virtual void SAL_CALL PasteSpecial( const css::uno::Any& Paste, const css::uno::Any& Operation, const css::uno::Any& SkipBlanks, const css::uno::Any& Transpose ) throw (css::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL Replace( const ::rtl::OUString& What, const ::rtl::OUString& Replacement, const css::uno::Any& LookAt, const css::uno::Any& SearchOrder, const css::uno::Any& MatchCase, const css::uno::Any& MatchByte, const css::uno::Any& SearchFormat, const css::uno::Any& ReplaceFormat ) throw (css::uno::RuntimeException);
virtual css::uno::Reference< ov::excel::XRange > SAL_CALL Find( const css::uno::Any& What, const css::uno::Any& After, const css::uno::Any& LookIn, const css::uno::Any& LookAt, const css::uno::Any& SearchOrder, const css::uno::Any& SearchDirection, const css::uno::Any& MatchCase, const css::uno::Any& MatchByte, const css::uno::Any& SearchFormat ) throw (css::uno::RuntimeException);
@@ -227,6 +244,7 @@ public:
const css::uno::Any& ConsecutinveDelimiter, const css::uno::Any& Tab, const css::uno::Any& Semicolon, const css::uno::Any& Comma,
const css::uno::Any& Space, const css::uno::Any& Other, const css::uno::Any& OtherChar, const css::uno::Any& FieldInfo,
const css::uno::Any& DecimalSeparator, const css::uno::Any& ThousandsSeparator, const css::uno::Any& TrailingMinusNumbers ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL Hyperlinks( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
virtual void SAL_CALL AutoFilter( const css::uno::Any& Field, const css::uno::Any& Criteria1, const css::uno::Any& Operator, const css::uno::Any& Criteria2, const css::uno::Any& VisibleDropDown ) throw (css::uno::RuntimeException);
virtual void SAL_CALL Insert( const css::uno::Any& Shift, const css::uno::Any& CopyOrigin ) throw (css::uno::RuntimeException);
diff --git a/sc/source/ui/vba/vbasheetobject.cxx b/sc/source/ui/vba/vbasheetobject.cxx
new file mode 100755
index 000000000000..4bd0f1d60547
--- /dev/null
+++ b/sc/source/ui/vba/vbasheetobject.cxx
@@ -0,0 +1,517 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#include "vbasheetobject.hxx"
+#include <com/sun/star/awt/TextAlign.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+#include <com/sun/star/drawing/XControlShape.hpp>
+#include <com/sun/star/script/ScriptEventDescriptor.hpp>
+#include <com/sun/star/script/XEventAttacherManager.hpp>
+#include <com/sun/star/style/VerticalAlignment.hpp>
+#include <ooo/vba/excel/Constants.hpp>
+#include <ooo/vba/excel/XlOrientation.hpp>
+#include <ooo/vba/excel/XlPlacement.hpp>
+#include <rtl/ustrbuf.hxx>
+#include <filter/msfilter/msvbahelper.hxx>
+#include <oox/helper/helper.hxx>
+#include "vbafont.hxx"
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::ooo::vba;
+
+// ============================================================================
+
+ScVbaButtonCharacters::ScVbaButtonCharacters(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< beans::XPropertySet >& rxPropSet,
+ const ScVbaPalette& rPalette,
+ const uno::Any& rStart,
+ const uno::Any& rLength ) throw (uno::RuntimeException) :
+ ScVbaButtonCharacters_BASE( rxParent, rxContext ),
+ maPalette( rPalette ),
+ mxPropSet( rxPropSet, uno::UNO_SET_THROW )
+{
+ // extract optional start parameter (missing or invalid -> from beginning)
+ if( !(rStart >>= mnStart) || (mnStart < 1) )
+ mnStart = 1;
+ --mnStart; // VBA is 1-based, rtl string is 0-based
+
+ // extract optional length parameter (missing or invalid -> to end)
+ if( !(rLength >>= mnLength) || (mnLength < 1) )
+ mnLength = SAL_MAX_INT32;
+}
+
+ScVbaButtonCharacters::~ScVbaButtonCharacters()
+{
+}
+
+// XCharacters attributes
+
+OUString SAL_CALL ScVbaButtonCharacters::getCaption() throw (uno::RuntimeException)
+{
+ // ignore invalid mnStart and/or mnLength members
+ OUString aString = getFullString();
+ sal_Int32 nStart = ::std::min( mnStart, aString.getLength() );
+ sal_Int32 nLength = ::std::min( mnLength, aString.getLength() - nStart );
+ return aString.copy( nStart, nLength );
+}
+
+void SAL_CALL ScVbaButtonCharacters::setCaption( const OUString& rCaption ) throw (uno::RuntimeException)
+{
+ /* Replace the covered text with the passed text, ignore invalid mnStart
+ and/or mnLength members. This operation does not affect the mnLength
+ parameter. If the inserted text is longer than mnLength, the additional
+ characters are not covered by this object. If the inserted text is
+ shorter than mnLength, other uncovered characters from the original
+ string will be covered now, thus may be changed with subsequent
+ operations. */
+ OUString aString = getFullString();
+ sal_Int32 nStart = ::std::min( mnStart, aString.getLength() );
+ sal_Int32 nLength = ::std::min( mnLength, aString.getLength() - nStart );
+ setFullString( aString.replaceAt( nStart, nLength, rCaption ) );
+}
+
+sal_Int32 SAL_CALL ScVbaButtonCharacters::getCount() throw (uno::RuntimeException)
+{
+ // always return the total length of the caption
+ return getFullString().getLength();
+}
+
+OUString SAL_CALL ScVbaButtonCharacters::getText() throw (uno::RuntimeException)
+{
+ // Text attribute same as Caption attribute?
+ return getCaption();
+}
+
+void SAL_CALL ScVbaButtonCharacters::setText( const OUString& rText ) throw (uno::RuntimeException)
+{
+ // Text attribute same as Caption attribute?
+ setCaption( rText );
+}
+
+uno::Reference< excel::XFont > SAL_CALL ScVbaButtonCharacters::getFont() throw (uno::RuntimeException)
+{
+ return new ScVbaFont( this, mxContext, maPalette, mxPropSet, 0, true );
+}
+
+void SAL_CALL ScVbaButtonCharacters::setFont( const uno::Reference< excel::XFont >& /*rxFont*/ ) throw (uno::RuntimeException)
+{
+ // TODO
+}
+
+// XCharacters methods
+
+void SAL_CALL ScVbaButtonCharacters::Insert( const OUString& rString ) throw (uno::RuntimeException)
+{
+ /* The Insert() operation is in fact "replace covered characters", at
+ least for buttons... It seems there is no easy way to really insert a
+ substring. This operation does not affect the mnLength parameter. */
+ setCaption( rString );
+}
+
+void SAL_CALL ScVbaButtonCharacters::Delete() throw (uno::RuntimeException)
+{
+ /* The Delete() operation is nothing else than "replace with empty string".
+ This does not affect the mnLength parameter, multiple calls of Delete()
+ will remove characters as long as there are some more covered by this
+ object. */
+ setCaption( OUString() );
+}
+
+// XHelperInterface
+
+VBAHELPER_IMPL_XHELPERINTERFACE( ScVbaButtonCharacters, "ooo.vba.excel.Characters" )
+
+// private
+
+OUString ScVbaButtonCharacters::getFullString() const throw (uno::RuntimeException)
+{
+ return mxPropSet->getPropertyValue( CREATE_OUSTRING( "Label" ) ).get< OUString >();
+}
+
+void ScVbaButtonCharacters::setFullString( const OUString& rString ) throw (uno::RuntimeException)
+{
+ mxPropSet->setPropertyValue( CREATE_OUSTRING( "Label" ), uno::Any( rString ) );
+}
+
+// ============================================================================
+
+ScVbaSheetObjectBase::ScVbaSheetObjectBase(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException) :
+ ScVbaSheetObject_BASE( rxParent, rxContext ),
+ maPalette( rxModel ),
+ mxModel( rxModel, uno::UNO_SET_THROW ),
+ mxShape( rxShape, uno::UNO_SET_THROW ),
+ mxShapeProps( rxShape, uno::UNO_QUERY_THROW )
+{
+}
+
+// XSheetObject attributes
+
+double SAL_CALL ScVbaSheetObjectBase::getLeft() throw (uno::RuntimeException)
+{
+ return HmmToPoints( mxShape->getPosition().X );
+}
+
+void SAL_CALL ScVbaSheetObjectBase::setLeft( double fLeft ) throw (uno::RuntimeException)
+{
+ if( fLeft < 0.0 )
+ throw uno::RuntimeException();
+ mxShape->setPosition( awt::Point( PointsToHmm( fLeft ), mxShape->getPosition().Y ) );
+}
+
+double SAL_CALL ScVbaSheetObjectBase::getTop() throw (uno::RuntimeException)
+{
+ return HmmToPoints( mxShape->getPosition().Y );
+}
+
+void SAL_CALL ScVbaSheetObjectBase::setTop( double fTop ) throw (uno::RuntimeException)
+{
+ if( fTop < 0.0 )
+ throw uno::RuntimeException();
+ mxShape->setPosition( awt::Point( mxShape->getPosition().X, PointsToHmm( fTop ) ) );
+}
+
+double SAL_CALL ScVbaSheetObjectBase::getWidth() throw (uno::RuntimeException)
+{
+ return HmmToPoints( mxShape->getSize().Width );
+}
+
+void SAL_CALL ScVbaSheetObjectBase::setWidth( double fWidth ) throw (uno::RuntimeException)
+{
+ if( fWidth <= 0.0 )
+ throw uno::RuntimeException();
+ mxShape->setSize( awt::Size( PointsToHmm( fWidth ), mxShape->getSize().Height ) );
+}
+
+double SAL_CALL ScVbaSheetObjectBase::getHeight() throw (uno::RuntimeException)
+{
+ return HmmToPoints( mxShape->getSize().Height );
+}
+
+void SAL_CALL ScVbaSheetObjectBase::setHeight( double fHeight ) throw (uno::RuntimeException)
+{
+ if( fHeight <= 0.0 )
+ throw uno::RuntimeException();
+ mxShape->setSize( awt::Size( mxShape->getSize().Width, PointsToHmm( fHeight ) ) );
+}
+
+OUString SAL_CALL ScVbaSheetObjectBase::getName() throw (uno::RuntimeException)
+{
+ return mxShapeProps->getPropertyValue( CREATE_OUSTRING( "Name" ) ).get< OUString >();
+}
+
+void SAL_CALL ScVbaSheetObjectBase::setName( const OUString& rName ) throw (uno::RuntimeException)
+{
+ mxShapeProps->setPropertyValue( CREATE_OUSTRING( "Name" ), uno::Any( rName ) );
+}
+
+sal_Int32 SAL_CALL ScVbaSheetObjectBase::getPlacement() throw (uno::RuntimeException)
+{
+ // TODO
+ return excel::XlPlacement::xlMoveAndSize;
+}
+
+void SAL_CALL ScVbaSheetObjectBase::setPlacement( sal_Int32 /*nPlacement*/ ) throw (uno::RuntimeException)
+{
+ // TODO
+}
+
+sal_Bool SAL_CALL ScVbaSheetObjectBase::getPrintObject() throw (uno::RuntimeException)
+{
+ // not supported
+ return sal_True;
+}
+
+void SAL_CALL ScVbaSheetObjectBase::setPrintObject( sal_Bool /*bPrintObject*/ ) throw (uno::RuntimeException)
+{
+ // not supported
+}
+
+// private
+
+void ScVbaSheetObjectBase::setDefaultProperties( sal_Int32 nIndex ) throw (uno::RuntimeException)
+{
+ OUString aName = ::rtl::OUStringBuffer( implGetBaseName() ).append( sal_Unicode( ' ' ) ).append( nIndex + 1 ).makeStringAndClear();
+ setName( aName );
+ implSetDefaultProperties();
+}
+
+void ScVbaSheetObjectBase::implSetDefaultProperties() throw (uno::RuntimeException)
+{
+}
+
+// ============================================================================
+
+ScVbaControlObjectBase::ScVbaControlObjectBase(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< container::XIndexContainer >& rxFormIC,
+ const uno::Reference< drawing::XControlShape >& rxControlShape,
+ ListenerType eListenerType ) throw (uno::RuntimeException) :
+ ScVbaControlObject_BASE( rxParent, rxContext, rxModel, uno::Reference< drawing::XShape >( rxControlShape, uno::UNO_QUERY_THROW ) ),
+ mxFormIC( rxFormIC, uno::UNO_SET_THROW ),
+ mxControlProps( rxControlShape->getControl(), uno::UNO_QUERY_THROW )
+{
+ // set listener and event name to be used for OnAction attribute
+ switch( eListenerType )
+ {
+ case LISTENER_ACTION:
+ maListenerType = CREATE_OUSTRING( "XActionListener" );
+ maEventMethod = CREATE_OUSTRING( "actionPerformed" );
+ break;
+ case LISTENER_MOUSE:
+ maListenerType = CREATE_OUSTRING( "XMouseListener" );
+ maEventMethod = CREATE_OUSTRING( "mouseReleased" );
+ break;
+ case LISTENER_TEXT:
+ maListenerType = CREATE_OUSTRING( "XTextListener" );
+ maEventMethod = CREATE_OUSTRING( "textChanged" );
+ break;
+ case LISTENER_VALUE:
+ maListenerType = CREATE_OUSTRING( "XAdjustmentListener" );
+ maEventMethod = CREATE_OUSTRING( "adjustmentValueChanged" );
+ break;
+ case LISTENER_CHANGE:
+ maListenerType = CREATE_OUSTRING( "XChangeListener" );
+ maEventMethod = CREATE_OUSTRING( "changed" );
+ break;
+ // no default, to let the compiler complain about missing case
+ }
+}
+
+// XSheetObject attributes
+
+OUString SAL_CALL ScVbaControlObjectBase::getName() throw (uno::RuntimeException)
+{
+ return mxControlProps->getPropertyValue( CREATE_OUSTRING( "Name" ) ).get< OUString >();
+}
+
+void SAL_CALL ScVbaControlObjectBase::setName( const OUString& rName ) throw (uno::RuntimeException)
+{
+ mxControlProps->setPropertyValue( CREATE_OUSTRING( "Name" ), uno::Any( rName ) );
+}
+
+OUString SAL_CALL ScVbaControlObjectBase::getOnAction() throw (uno::RuntimeException)
+{
+ uno::Reference< script::XEventAttacherManager > xEventMgr( mxFormIC, uno::UNO_QUERY_THROW );
+ sal_Int32 nIndex = getModelIndexInForm();
+ uno::Sequence< script::ScriptEventDescriptor > aEvents = xEventMgr->getScriptEvents( nIndex );
+ if( aEvents.hasElements() )
+ {
+ const script::ScriptEventDescriptor* pEvent = aEvents.getConstArray();
+ const script::ScriptEventDescriptor* pEventEnd = pEvent + aEvents.getLength();
+ const OUString aScriptType = CREATE_OUSTRING( "Script" );
+ for( ; pEvent < pEventEnd; ++pEvent )
+ if( (pEvent->ListenerType == maListenerType) && (pEvent->EventMethod == maEventMethod) && (pEvent->ScriptType == aScriptType) )
+ return extractMacroName( pEvent->ScriptCode );
+ }
+ return OUString();
+}
+
+void SAL_CALL ScVbaControlObjectBase::setOnAction( const OUString& rMacroName ) throw (uno::RuntimeException)
+{
+ uno::Reference< script::XEventAttacherManager > xEventMgr( mxFormIC, uno::UNO_QUERY_THROW );
+ sal_Int32 nIndex = getModelIndexInForm();
+
+ // first, remove a registered event (try/catch just in case implementation throws)
+ try { xEventMgr->revokeScriptEvent( nIndex, maListenerType, maEventMethod, OUString() ); } catch( uno::Exception& ) {}
+
+ // if a macro name has been passed, try to attach it to the event
+ if( rMacroName.getLength() > 0 )
+ {
+ VBAMacroResolvedInfo aResolvedMacro = resolveVBAMacro( getSfxObjShell( mxModel ), rMacroName );
+ if( !aResolvedMacro.IsResolved() )
+ throw uno::RuntimeException();
+ script::ScriptEventDescriptor aDescriptor;
+ aDescriptor.ListenerType = maListenerType;
+ aDescriptor.EventMethod = maEventMethod;
+ aDescriptor.ScriptType = CREATE_OUSTRING( "Script" );
+ aDescriptor.ScriptCode = makeMacroURL( aResolvedMacro.ResolvedMacro() );
+ xEventMgr->registerScriptEvent( nIndex, aDescriptor );
+ }
+}
+
+sal_Bool SAL_CALL ScVbaControlObjectBase::getPrintObject() throw (uno::RuntimeException)
+{
+ return mxControlProps->getPropertyValue( CREATE_OUSTRING( "Printable" ) ).get< sal_Bool >();
+}
+
+void SAL_CALL ScVbaControlObjectBase::setPrintObject( sal_Bool bPrintObject ) throw (uno::RuntimeException)
+{
+ mxControlProps->setPropertyValue( CREATE_OUSTRING( "Printable" ), uno::Any( bPrintObject ) );
+}
+
+// XControlObject attributes
+
+sal_Bool SAL_CALL ScVbaControlObjectBase::getAutoSize() throw (uno::RuntimeException)
+{
+ // not supported
+ return sal_False;
+}
+
+void SAL_CALL ScVbaControlObjectBase::setAutoSize( sal_Bool /*bAutoSize*/ ) throw (uno::RuntimeException)
+{
+ // not supported
+}
+
+// private
+
+sal_Int32 ScVbaControlObjectBase::getModelIndexInForm() const throw (uno::RuntimeException)
+{
+ for( sal_Int32 nIndex = 0, nCount = mxFormIC->getCount(); nIndex < nCount; ++nIndex )
+ {
+ uno::Reference< beans::XPropertySet > xProps( mxFormIC->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
+ if( mxControlProps.get() == xProps.get() )
+ return nIndex;
+ }
+ throw uno::RuntimeException();
+}
+
+// ============================================================================
+
+ScVbaButton::ScVbaButton(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< container::XIndexContainer >& rxFormIC,
+ const uno::Reference< drawing::XControlShape >& rxControlShape ) throw (uno::RuntimeException) :
+ ScVbaButton_BASE( rxParent, rxContext, rxModel, rxFormIC, rxControlShape, LISTENER_ACTION )
+{
+}
+
+// XButton attributes
+
+OUString SAL_CALL ScVbaButton::getCaption() throw (uno::RuntimeException)
+{
+ return mxControlProps->getPropertyValue( CREATE_OUSTRING( "Label" ) ).get< OUString >();
+}
+
+void SAL_CALL ScVbaButton::setCaption( const OUString& rCaption ) throw (uno::RuntimeException)
+{
+ mxControlProps->setPropertyValue( CREATE_OUSTRING( "Label" ), uno::Any( rCaption ) );
+}
+
+uno::Reference< excel::XFont > SAL_CALL ScVbaButton::getFont() throw (uno::RuntimeException)
+{
+ return new ScVbaFont( this, mxContext, maPalette, mxControlProps, 0, true );
+}
+
+void SAL_CALL ScVbaButton::setFont( const uno::Reference< excel::XFont >& /*rxFont*/ ) throw (uno::RuntimeException)
+{
+ // TODO
+}
+
+sal_Int32 SAL_CALL ScVbaButton::getHorizontalAlignment() throw (uno::RuntimeException)
+{
+ switch( mxControlProps->getPropertyValue( CREATE_OUSTRING( "Align" ) ).get< sal_Int16 >() )
+ {
+ case awt::TextAlign::LEFT: return excel::Constants::xlLeft;
+ case awt::TextAlign::RIGHT: return excel::Constants::xlRight;
+ case awt::TextAlign::CENTER: return excel::Constants::xlCenter;
+ }
+ return excel::Constants::xlCenter;
+}
+
+void SAL_CALL ScVbaButton::setHorizontalAlignment( sal_Int32 nAlign ) throw (uno::RuntimeException)
+{
+ sal_Int32 nAwtAlign = awt::TextAlign::CENTER;
+ switch( nAlign )
+ {
+ case excel::Constants::xlLeft: nAwtAlign = awt::TextAlign::LEFT; break;
+ case excel::Constants::xlRight: nAwtAlign = awt::TextAlign::RIGHT; break;
+ case excel::Constants::xlCenter: nAwtAlign = awt::TextAlign::CENTER; break;
+ }
+ // form controls expect short value
+ mxControlProps->setPropertyValue( CREATE_OUSTRING( "Align" ), uno::Any( static_cast< sal_Int16 >( nAwtAlign ) ) );
+}
+
+sal_Int32 SAL_CALL ScVbaButton::getVerticalAlignment() throw (uno::RuntimeException)
+{
+ switch( mxControlProps->getPropertyValue( CREATE_OUSTRING( "VerticalAlign" ) ).get< style::VerticalAlignment >() )
+ {
+ case style::VerticalAlignment_TOP: return excel::Constants::xlTop;
+ case style::VerticalAlignment_BOTTOM: return excel::Constants::xlBottom;
+ case style::VerticalAlignment_MIDDLE: return excel::Constants::xlCenter;
+ default:;
+ }
+ return excel::Constants::xlCenter;
+}
+
+void SAL_CALL ScVbaButton::setVerticalAlignment( sal_Int32 nAlign ) throw (uno::RuntimeException)
+{
+ style::VerticalAlignment eAwtAlign = style::VerticalAlignment_MIDDLE;
+ switch( nAlign )
+ {
+ case excel::Constants::xlTop: eAwtAlign = style::VerticalAlignment_TOP; break;
+ case excel::Constants::xlBottom: eAwtAlign = style::VerticalAlignment_BOTTOM; break;
+ case excel::Constants::xlCenter: eAwtAlign = style::VerticalAlignment_MIDDLE; break;
+ }
+ mxControlProps->setPropertyValue( CREATE_OUSTRING( "VerticalAlign" ), uno::Any( eAwtAlign ) );
+}
+
+sal_Int32 SAL_CALL ScVbaButton::getOrientation() throw (uno::RuntimeException)
+{
+ // not supported
+ return excel::XlOrientation::xlHorizontal;
+}
+
+void SAL_CALL ScVbaButton::setOrientation( sal_Int32 /*nOrientation*/ ) throw (uno::RuntimeException)
+{
+ // not supported
+}
+
+// XButton methods
+
+uno::Reference< excel::XCharacters > SAL_CALL ScVbaButton::Characters( const uno::Any& rStart, const uno::Any& rLength ) throw (uno::RuntimeException)
+{
+ return new ScVbaButtonCharacters( this, mxContext, mxControlProps, maPalette, rStart, rLength );
+}
+
+// XHelperInterface
+
+VBAHELPER_IMPL_XHELPERINTERFACE( ScVbaButton, "ooo.vba.excel.Button" )
+
+// private
+
+OUString ScVbaButton::implGetBaseName() const
+{
+ return CREATE_OUSTRING( "Button" );
+}
+
+void ScVbaButton::implSetDefaultProperties() throw (uno::RuntimeException)
+{
+ setCaption( getName() );
+}
+
+// ============================================================================
diff --git a/sc/source/ui/vba/vbasheetobject.hxx b/sc/source/ui/vba/vbasheetobject.hxx
new file mode 100755
index 000000000000..b2546ca09c93
--- /dev/null
+++ b/sc/source/ui/vba/vbasheetobject.hxx
@@ -0,0 +1,220 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 SC_VBA_SHEETOBJECT_HXX
+#define SC_VBA_SHEETOBJECT_HXX
+
+#include <memory>
+#include <ooo/vba/excel/XButton.hpp>
+#include <ooo/vba/excel/XControlObject.hpp>
+#include <ooo/vba/excel/XSheetObject.hpp>
+#include <vbahelper/vbahelperinterface.hxx>
+#include "vbapalette.hxx"
+
+namespace com { namespace sun { namespace star {
+ namespace container { class XIndexContainer; }
+ namespace drawing { class XControlShape; }
+} } }
+
+// ============================================================================
+
+typedef InheritedHelperInterfaceImpl1< ov::excel::XCharacters > ScVbaButtonCharacters_BASE;
+
+/** Simple implementation of the Characters symbol for drawing button objects. */
+class ScVbaButtonCharacters : public ScVbaButtonCharacters_BASE
+{
+public:
+ explicit ScVbaButtonCharacters(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::beans::XPropertySet >& rxPropSet,
+ const ScVbaPalette& rPalette,
+ const css::uno::Any& rStart,
+ const css::uno::Any& rLength ) throw (css::uno::RuntimeException);
+ virtual ~ScVbaButtonCharacters();
+
+ // XCharacters attributes
+ virtual ::rtl::OUString SAL_CALL getCaption() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setCaption( const ::rtl::OUString& rCaption ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getText() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setText( const ::rtl::OUString& rText ) throw (css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL getCount() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XFont > SAL_CALL getFont() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setFont( const css::uno::Reference< ov::excel::XFont >& rxFont ) throw (css::uno::RuntimeException);
+
+ // XCharacters methods
+ virtual void SAL_CALL Insert( const ::rtl::OUString& rString ) throw (css::uno::RuntimeException);
+ virtual void SAL_CALL Delete() throw (css::uno::RuntimeException);
+
+ // XHelperInterface
+ VBAHELPER_DECL_XHELPERINTERFACE
+
+private:
+ ::rtl::OUString getFullString() const throw (css::uno::RuntimeException);
+ void setFullString( const ::rtl::OUString& rString ) throw (css::uno::RuntimeException);
+
+private:
+ ScVbaPalette maPalette;
+ css::uno::Reference< css::beans::XPropertySet > mxPropSet;
+ sal_Int32 mnStart;
+ sal_Int32 mnLength;
+};
+
+// ============================================================================
+
+typedef InheritedHelperInterfaceImpl1< ov::excel::XSheetObject > ScVbaSheetObject_BASE;
+
+/** Base class for drawing objects embedded in sheets. */
+class ScVbaSheetObjectBase : public ScVbaSheetObject_BASE
+{
+public:
+ explicit ScVbaSheetObjectBase(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::frame::XModel >& rxModel,
+ const css::uno::Reference< css::drawing::XShape >& rxShape ) throw (css::uno::RuntimeException);
+
+ // XSheetObject attributes
+ virtual double SAL_CALL getLeft() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setLeft( double fLeft ) throw (css::uno::RuntimeException);
+ virtual double SAL_CALL getTop() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setTop( double fTop ) throw (css::uno::RuntimeException);
+ virtual double SAL_CALL getWidth() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setWidth( double fWidth ) throw (css::uno::RuntimeException);
+ virtual double SAL_CALL getHeight() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setHeight( double fHeight ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setName( const ::rtl::OUString& rName ) throw (css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL getPlacement() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setPlacement( sal_Int32 nPlacement ) throw (css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL getPrintObject() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setPrintObject( sal_Bool bPrintObject ) throw (css::uno::RuntimeException);
+
+ /** Sets default properties after a new object has been created. */
+ void setDefaultProperties( sal_Int32 nIndex ) throw (css::uno::RuntimeException);
+
+protected:
+ /** Derived classes return the base name used for new objects. */
+ virtual ::rtl::OUString implGetBaseName() const = 0;
+ /** Derived classes set default properties for new drawing objects. */
+ virtual void implSetDefaultProperties() throw (css::uno::RuntimeException);
+
+protected:
+ ScVbaPalette maPalette;
+ css::uno::Reference< css::frame::XModel > mxModel;
+ css::uno::Reference< css::drawing::XShape > mxShape;
+ css::uno::Reference< css::beans::XPropertySet > mxShapeProps;
+};
+
+// ============================================================================
+
+typedef ::cppu::ImplInheritanceHelper1< ScVbaSheetObjectBase, ov::excel::XControlObject > ScVbaControlObject_BASE;
+
+class ScVbaControlObjectBase : public ScVbaControlObject_BASE
+{
+public:
+ /** Specifies the listener used for OnAction events. */
+ enum ListenerType
+ {
+ LISTENER_ACTION, /// XActionListener.actionPerformed
+ LISTENER_MOUSE, /// XMouseListener.mouseReleased
+ LISTENER_TEXT, /// XTextListener.textChanged
+ LISTENER_VALUE, /// XAdjustmentListener.adjustmentValueChanged
+ LISTENER_CHANGE /// XChangeListener.changed
+ };
+
+ explicit ScVbaControlObjectBase(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::frame::XModel >& rxModel,
+ const css::uno::Reference< css::container::XIndexContainer >& rxFormIC,
+ const css::uno::Reference< css::drawing::XControlShape >& rxControlShape,
+ ListenerType eListenerType ) throw (css::uno::RuntimeException);
+
+ // XSheetObject attributes
+ virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setName( const ::rtl::OUString& rName ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getOnAction() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setOnAction( const ::rtl::OUString& rMacroName ) throw (css::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL getPrintObject() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setPrintObject( sal_Bool bPrintObject ) throw (css::uno::RuntimeException);
+
+ // XControlObject attributes
+ virtual sal_Bool SAL_CALL getAutoSize() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setAutoSize( sal_Bool bAutoSize ) throw (css::uno::RuntimeException);
+
+protected:
+ sal_Int32 getModelIndexInForm() const throw (css::uno::RuntimeException);
+
+protected:
+ css::uno::Reference< css::container::XIndexContainer > mxFormIC;
+ css::uno::Reference< css::beans::XPropertySet > mxControlProps;
+ ::rtl::OUString maListenerType;
+ ::rtl::OUString maEventMethod;
+};
+
+// ============================================================================
+
+typedef ::cppu::ImplInheritanceHelper1< ScVbaControlObjectBase, ov::excel::XButton > ScVbaButton_BASE;
+
+class ScVbaButton : public ScVbaButton_BASE
+{
+public:
+ explicit ScVbaButton(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::frame::XModel >& rxModel,
+ const css::uno::Reference< css::container::XIndexContainer >& rxFormIC,
+ const css::uno::Reference< css::drawing::XControlShape >& rxControlShape ) throw (css::uno::RuntimeException);
+
+ // XButton attributes
+ virtual ::rtl::OUString SAL_CALL getCaption() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setCaption( const ::rtl::OUString& rCaption ) throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XFont > SAL_CALL getFont() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setFont( const css::uno::Reference< ov::excel::XFont >& rxFont ) throw (css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL getHorizontalAlignment() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setHorizontalAlignment( sal_Int32 nAlign ) throw (css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL getVerticalAlignment() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setVerticalAlignment( sal_Int32 nAlign ) throw (css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL getOrientation() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setOrientation( sal_Int32 nOrientation ) throw (css::uno::RuntimeException);
+
+ // XButton methods
+ css::uno::Reference< ov::excel::XCharacters > SAL_CALL Characters(
+ const css::uno::Any& rStart, const css::uno::Any& rLength ) throw (css::uno::RuntimeException);
+
+ // XHelperInterface
+ VBAHELPER_DECL_XHELPERINTERFACE
+
+protected:
+ virtual ::rtl::OUString implGetBaseName() const;
+ virtual void implSetDefaultProperties() throw (css::uno::RuntimeException);
+};
+
+// ============================================================================
+
+#endif
diff --git a/sc/source/ui/vba/vbasheetobjects.cxx b/sc/source/ui/vba/vbasheetobjects.cxx
new file mode 100755
index 000000000000..ced94db5ba76
--- /dev/null
+++ b/sc/source/ui/vba/vbasheetobjects.cxx
@@ -0,0 +1,534 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#include "vbasheetobjects.hxx"
+#include <vector>
+#include <rtl/math.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+#include <com/sun/star/container/XNamed.hpp>
+#include <com/sun/star/drawing/XControlShape.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/drawing/XShapes.hpp>
+#include <com/sun/star/form/FormComponentType.hpp>
+#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/form/XFormsSupplier.hpp>
+#include <oox/helper/helper.hxx>
+#include "vbasheetobject.hxx"
+
+using ::rtl::OUString;
+using namespace ::com::sun::star;
+using namespace ::ooo::vba;
+
+// ============================================================================
+
+namespace {
+
+template< typename Type >
+inline bool lclGetProperty( Type& orValue, const uno::Reference< beans::XPropertySet >& rxPropSet, const OUString& rPropName )
+{
+ try
+ {
+ return rxPropSet->getPropertyValue( rPropName ) >>= orValue;
+ }
+ catch( uno::Exception& )
+ {
+ }
+ return false;
+}
+
+/** Rounds the passed value to a multiple of 0.75 and converts it to 1/100 mm. */
+inline double lclPointsToHmm( const uno::Any& rPoints ) throw (uno::RuntimeException)
+{
+ return PointsToHmm( ::rtl::math::approxFloor( rPoints.get< double >() / 0.75 ) * 0.75 );
+}
+
+} // namespace
+
+// ============================================================================
+// Base implementations
+// ============================================================================
+
+/** Container for a specific type of drawing object in a spreadsheet.
+
+ Derived classes provide all required functionality specific to the type of
+ shapes covered by the container.
+ */
+class ScVbaObjectContainer : public ::cppu::WeakImplHelper1< container::XIndexAccess >
+{
+public:
+ explicit ScVbaObjectContainer(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< sheet::XSpreadsheet >& rxSheet,
+ const uno::Type& rVbaType ) throw (uno::RuntimeException);
+
+ /** Returns the VBA helper interface of the VBA collection object. */
+ inline const uno::Reference< XHelperInterface >& getParent() const { return mxParent; }
+ /** Returns the component context of the VBA collection object. */
+ inline const uno::Reference< uno::XComponentContext >& getContext() const { return mxContext; }
+ /** Returns the VBA type information of the objects in this container. */
+ inline const uno::Type& getVbaType() const { return maVbaType; }
+
+ /** Collects all shapes supported by this instance and inserts them into
+ the internal shape vector. */
+ void collectShapes() throw (uno::RuntimeException);
+ /** Creates and returns a new UNO shape. */
+ uno::Reference< drawing::XShape > createShape( const awt::Point& rPos, const awt::Size& rSize ) throw (uno::RuntimeException);
+ /** Inserts the passed shape into the draw page and into this container, and returns its index in the draw page. */
+ sal_Int32 insertShape( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException);
+ /** Creates and returns a new VBA implementation object for the passed shape. */
+ ::rtl::Reference< ScVbaSheetObjectBase > createVbaObject( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException);
+ /** Creates and returns a new VBA implementation object for the passed shape in an Any. */
+ uno::Any createCollectionObject( const uno::Any& rSource ) throw (uno::RuntimeException);
+ /** Returns the VBA implementation object with the specified name. */
+ uno::Any getItemByStringIndex( const OUString& rIndex ) throw (uno::RuntimeException);
+
+ // XIndexAccess
+ virtual sal_Int32 SAL_CALL getCount() throw (uno::RuntimeException);
+ virtual uno::Any SAL_CALL getByIndex( sal_Int32 nIndex ) throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException);
+
+ // XElementAccess
+ virtual uno::Type SAL_CALL getElementType() throw (uno::RuntimeException);
+ virtual sal_Bool SAL_CALL hasElements() throw (uno::RuntimeException);
+
+protected:
+ /** Derived classes return true, if the passed shape is supported by the instance. */
+ virtual bool implPickShape( const uno::Reference< drawing::XShape >& rxShape ) const = 0;
+ /** Derived classes create and return a new VBA implementation object for the passed shape. */
+ virtual ScVbaSheetObjectBase* implCreateVbaObject( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException) = 0;
+ /** Derived classes return the service name of the UNO shape. */
+ virtual OUString implGetShapeServiceName() const = 0;
+
+ /** Returns the shape name via 'Name' property of the UNO shape. May be overwritten. */
+ virtual OUString implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const throw (uno::RuntimeException);
+ /** Is called when a new UNO shape has been created but not yet inserted into the drawing page. */
+ virtual void implOnShapeCreated( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException);
+ /** Is called when a new UNO shape has been inserted into the drawing page. */
+ virtual void implOnShapeInserted( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException);
+
+protected:
+ uno::Reference< XHelperInterface > mxParent;
+ uno::Reference< uno::XComponentContext > mxContext;
+ uno::Reference< frame::XModel > mxModel;
+ uno::Reference< lang::XMultiServiceFactory > mxFactory;
+ uno::Reference< drawing::XShapes > mxShapes;
+
+private:
+ typedef ::std::vector< uno::Reference< drawing::XShape > > ShapeVector;
+ const uno::Type maVbaType;
+ ShapeVector maShapes;
+};
+
+// ----------------------------------------------------------------------------
+
+ScVbaObjectContainer::ScVbaObjectContainer(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< sheet::XSpreadsheet >& rxSheet,
+ const uno::Type& rVbaType ) throw (uno::RuntimeException) :
+ mxParent( rxParent ),
+ mxContext( rxContext ),
+ mxModel( rxModel, uno::UNO_SET_THROW ),
+ mxFactory( rxModel, uno::UNO_QUERY_THROW ),
+ maVbaType( rVbaType )
+{
+ uno::Reference< drawing::XDrawPageSupplier > xDrawPageSupp( rxSheet, uno::UNO_QUERY_THROW );
+ mxShapes.set( xDrawPageSupp->getDrawPage(), uno::UNO_QUERY_THROW );
+}
+
+void ScVbaObjectContainer::collectShapes() throw (uno::RuntimeException)
+{
+ maShapes.clear();
+ for( sal_Int32 nIndex = 0, nCount = mxShapes->getCount(); nIndex < nCount; ++nIndex )
+ {
+ uno::Reference< drawing::XShape > xShape( mxShapes->getByIndex( nIndex ), uno::UNO_QUERY_THROW );
+ if( implPickShape( xShape ) )
+ maShapes.push_back( xShape );
+ }
+}
+
+uno::Reference< drawing::XShape > ScVbaObjectContainer::createShape( const awt::Point& rPos, const awt::Size& rSize ) throw (uno::RuntimeException)
+{
+ uno::Reference< drawing::XShape > xShape( mxFactory->createInstance( implGetShapeServiceName() ), uno::UNO_QUERY_THROW );
+ xShape->setPosition( rPos );
+ xShape->setSize( rSize );
+ implOnShapeCreated( xShape );
+ return xShape;
+}
+
+sal_Int32 ScVbaObjectContainer::insertShape( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException)
+{
+ mxShapes->add( rxShape );
+ maShapes.push_back( rxShape );
+ implOnShapeInserted( rxShape );
+ return mxShapes->getCount() - 1;
+}
+
+::rtl::Reference< ScVbaSheetObjectBase > ScVbaObjectContainer::createVbaObject(
+ const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException)
+{
+ return implCreateVbaObject( rxShape );
+}
+
+uno::Any ScVbaObjectContainer::createCollectionObject( const uno::Any& rSource ) throw (uno::RuntimeException)
+{
+ uno::Reference< drawing::XShape > xShape( rSource, uno::UNO_QUERY_THROW );
+ uno::Reference< excel::XSheetObject > xSheetObject( implCreateVbaObject( xShape ) );
+ return uno::Any( xSheetObject );
+}
+
+uno::Any ScVbaObjectContainer::getItemByStringIndex( const OUString& rIndex ) throw (uno::RuntimeException)
+{
+ for( ShapeVector::iterator aIt = maShapes.begin(), aEnd = maShapes.end(); aIt != aEnd; ++aIt )
+ if( rIndex == implGetShapeName( *aIt ) )
+ return createCollectionObject( uno::Any( *aIt ) );
+ throw uno::RuntimeException();
+}
+
+// XIndexAccess
+
+sal_Int32 SAL_CALL ScVbaObjectContainer::getCount() throw (uno::RuntimeException)
+{
+ return static_cast< sal_Int32 >( maShapes.size() );
+}
+
+uno::Any SAL_CALL ScVbaObjectContainer::getByIndex( sal_Int32 nIndex )
+ throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException)
+{
+ if( (0 <= nIndex) && (nIndex < getCount()) )
+ return uno::Any( maShapes[ static_cast< size_t >( nIndex ) ] );
+ throw lang::IndexOutOfBoundsException();
+}
+
+// XElementAccess
+
+uno::Type SAL_CALL ScVbaObjectContainer::getElementType() throw (uno::RuntimeException)
+{
+ return drawing::XShape::static_type( 0 );
+}
+
+sal_Bool SAL_CALL ScVbaObjectContainer::hasElements() throw (uno::RuntimeException)
+{
+ return !maShapes.empty();
+}
+
+// private
+
+OUString ScVbaObjectContainer::implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const throw (uno::RuntimeException)
+{
+ uno::Reference< beans::XPropertySet > xPropSet( rxShape, uno::UNO_QUERY_THROW );
+ return xPropSet->getPropertyValue( CREATE_OUSTRING( "Name" ) ).get< OUString >();
+}
+
+void ScVbaObjectContainer::implOnShapeCreated( const uno::Reference< drawing::XShape >& /*rxShape*/ ) throw (uno::RuntimeException)
+{
+}
+
+void ScVbaObjectContainer::implOnShapeInserted( const uno::Reference< drawing::XShape >& /*rxShape*/ ) throw (uno::RuntimeException)
+{
+}
+
+// ============================================================================
+
+class ScVbaObjectEnumeration : public SimpleEnumerationBase
+{
+public:
+ explicit ScVbaObjectEnumeration( const ScVbaObjectContainerRef& rxContainer );
+ virtual uno::Any createCollectionObject( const uno::Any& rSource );
+
+private:
+ ScVbaObjectContainerRef mxContainer;
+};
+
+// ----------------------------------------------------------------------------
+
+ScVbaObjectEnumeration::ScVbaObjectEnumeration( const ScVbaObjectContainerRef& rxContainer ) :
+ SimpleEnumerationBase( rxContainer->getParent(), rxContainer->getContext(), rxContainer.get() ),
+ mxContainer( rxContainer )
+{
+}
+
+uno::Any ScVbaObjectEnumeration::createCollectionObject( const uno::Any& rSource )
+{
+ return mxContainer->createCollectionObject( rSource );
+}
+
+// ============================================================================
+
+ScVbaSheetObjectsBase::ScVbaSheetObjectsBase( const ScVbaObjectContainerRef& rxContainer ) throw (css::uno::RuntimeException) :
+ ScVbaSheetObjects_BASE( rxContainer->getParent(), rxContainer->getContext(), rxContainer.get() ),
+ mxContainer( rxContainer )
+{
+ mxContainer->collectShapes();
+}
+
+ScVbaSheetObjectsBase::~ScVbaSheetObjectsBase()
+{
+}
+
+void ScVbaSheetObjectsBase::collectShapes() throw (uno::RuntimeException)
+{
+ mxContainer->collectShapes();
+}
+
+// XEnumerationAccess
+
+uno::Reference< container::XEnumeration > SAL_CALL ScVbaSheetObjectsBase::createEnumeration() throw (uno::RuntimeException)
+{
+ return new ScVbaObjectEnumeration( mxContainer );
+}
+
+// XElementAccess
+
+uno::Type SAL_CALL ScVbaSheetObjectsBase::getElementType() throw (uno::RuntimeException)
+{
+ return mxContainer->getVbaType();
+}
+
+// ScVbaCollectionBase
+
+uno::Any ScVbaSheetObjectsBase::createCollectionObject( const uno::Any& rSource )
+{
+ return mxContainer->createCollectionObject( rSource );
+}
+
+uno::Any ScVbaSheetObjectsBase::getItemByStringIndex( const OUString& rIndex ) throw (uno::RuntimeException)
+{
+ return mxContainer->getItemByStringIndex( rIndex );
+}
+
+// ============================================================================
+// Graphic object containers supporting ooo.vba.excel.XGraphicObject
+// ============================================================================
+
+ScVbaGraphicObjectsBase::ScVbaGraphicObjectsBase( const ScVbaObjectContainerRef& rxContainer ) throw (uno::RuntimeException) :
+ ScVbaGraphicObjects_BASE( rxContainer )
+{
+}
+
+// XGraphicObjects
+
+uno::Any SAL_CALL ScVbaGraphicObjectsBase::Add( const uno::Any& rLeft, const uno::Any& rTop, const uno::Any& rWidth, const uno::Any& rHeight ) throw (uno::RuntimeException)
+{
+ /* Extract double values from passed Anys (the lclPointsToHmm() helper
+ function will throw a RuntimeException on any error), and convert from
+ points to 1/100 mm. */
+ awt::Point aPos( lclPointsToHmm( rLeft ), lclPointsToHmm( rTop ) );
+ awt::Size aSize( lclPointsToHmm( rWidth ), lclPointsToHmm( rHeight ) );
+ // TODO: translate coordinates for RTL sheets
+ if( (aPos.X < 0) || (aPos.Y < 0) || (aSize.Width <= 0) || (aSize.Height <= 0) )
+ throw uno::RuntimeException();
+
+ // create the UNO shape
+ uno::Reference< drawing::XShape > xShape( mxContainer->createShape( aPos, aSize ), uno::UNO_SET_THROW );
+ sal_Int32 nIndex = mxContainer->insertShape( xShape );
+
+ // create and return the VBA object
+ ::rtl::Reference< ScVbaSheetObjectBase > xVbaObject = mxContainer->createVbaObject( xShape );
+ xVbaObject->setDefaultProperties( nIndex );
+ return uno::Any( uno::Reference< excel::XSheetObject >( xVbaObject.get() ) );
+}
+
+// ============================================================================
+// Drawing controls
+// ============================================================================
+
+class ScVbaControlContainer : public ScVbaObjectContainer
+{
+public:
+ explicit ScVbaControlContainer(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< sheet::XSpreadsheet >& rxSheet,
+ const uno::Type& rVbaType,
+ const OUString& rModelServiceName,
+ sal_Int16 nComponentType ) throw (uno::RuntimeException);
+
+protected:
+ uno::Reference< container::XIndexContainer > createForm() throw (uno::RuntimeException);
+
+ virtual bool implPickShape( const uno::Reference< drawing::XShape >& rxShape ) const;
+ virtual OUString implGetShapeServiceName() const;
+ virtual bool implCheckProperties( const uno::Reference< beans::XPropertySet >& rxModelProps ) const;
+ virtual OUString implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const throw (uno::RuntimeException);
+ virtual void implOnShapeCreated( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException);
+
+protected:
+ uno::Reference< container::XIndexContainer > mxFormIC;
+ OUString maModelServiceName;
+ sal_Int16 mnComponentType;
+};
+
+// ----------------------------------------------------------------------------
+
+ScVbaControlContainer::ScVbaControlContainer(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< sheet::XSpreadsheet >& rxSheet,
+ const uno::Type& rVbaType,
+ const OUString& rModelServiceName,
+ sal_Int16 nComponentType ) throw (uno::RuntimeException) :
+ ScVbaObjectContainer( rxParent, rxContext, rxModel, rxSheet, rVbaType ),
+ maModelServiceName( rModelServiceName ),
+ mnComponentType( nComponentType )
+{
+}
+
+uno::Reference< container::XIndexContainer > ScVbaControlContainer::createForm() throw (uno::RuntimeException)
+{
+ if( !mxFormIC.is() )
+ {
+ uno::Reference< form::XFormsSupplier > xFormsSupp( mxShapes, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameContainer > xFormsNC( xFormsSupp->getForms(), uno::UNO_SET_THROW );
+ OUString aFormName = CREATE_OUSTRING( "Standard" );
+ if( xFormsNC->hasByName( aFormName ) )
+ {
+ mxFormIC.set( xFormsNC->getByName( aFormName ), uno::UNO_QUERY_THROW );
+ }
+ else
+ {
+ uno::Reference< form::XForm > xForm( mxFactory->createInstance( CREATE_OUSTRING( "com.sun.star.form.component.Form" ) ), uno::UNO_QUERY_THROW );
+ xFormsNC->insertByName( aFormName, uno::Any( xForm ) );
+ mxFormIC.set( xForm, uno::UNO_QUERY_THROW );
+ }
+ }
+ return mxFormIC;
+}
+
+bool ScVbaControlContainer::implPickShape( const uno::Reference< drawing::XShape >& rxShape ) const
+{
+ try
+ {
+ uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xModelProps( xControlShape->getControl(), uno::UNO_QUERY_THROW );
+ sal_Int16 nClassId = -1;
+ return lclGetProperty( nClassId, xModelProps, CREATE_OUSTRING( "ClassId" ) ) &&
+ (nClassId == mnComponentType) && implCheckProperties( xModelProps );
+ }
+ catch( uno::Exception& )
+ {
+ }
+ return false;
+}
+
+OUString ScVbaControlContainer::implGetShapeServiceName() const
+{
+ return CREATE_OUSTRING( "com.sun.star.drawing.ControlShape" );
+}
+
+bool ScVbaControlContainer::implCheckProperties( const uno::Reference< beans::XPropertySet >& /*rxModelProps*/ ) const
+{
+ return true;
+}
+
+OUString ScVbaControlContainer::implGetShapeName( const uno::Reference< drawing::XShape >& rxShape ) const throw (uno::RuntimeException)
+{
+ uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
+ return uno::Reference< container::XNamed >( xControlShape->getControl(), uno::UNO_QUERY_THROW )->getName();
+}
+
+void ScVbaControlContainer::implOnShapeCreated( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException)
+{
+ // passed shape must be a control shape
+ uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
+
+ // create the UNO control model
+ uno::Reference< form::XFormComponent > xFormComponent( mxFactory->createInstance( maModelServiceName ), uno::UNO_QUERY_THROW );
+ uno::Reference< awt::XControlModel > xControlModel( xFormComponent, uno::UNO_QUERY_THROW );
+
+ // insert the control model into the form and the shape
+ createForm();
+ mxFormIC->insertByIndex( mxFormIC->getCount(), uno::Any( xFormComponent ) );
+ xControlShape->setControl( xControlModel );
+}
+
+// ============================================================================
+// Push button
+// ============================================================================
+
+class ScVbaButtonContainer : public ScVbaControlContainer
+{
+public:
+ explicit ScVbaButtonContainer(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< sheet::XSpreadsheet >& rxSheet ) throw (uno::RuntimeException);
+
+protected:
+ virtual ScVbaSheetObjectBase* implCreateVbaObject( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException);
+ virtual bool implCheckProperties( const uno::Reference< beans::XPropertySet >& rxModelProps ) const;
+};
+
+// ----------------------------------------------------------------------------
+
+ScVbaButtonContainer::ScVbaButtonContainer(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< sheet::XSpreadsheet >& rxSheet ) throw (uno::RuntimeException) :
+ ScVbaControlContainer(
+ rxParent, rxContext, rxModel, rxSheet,
+ excel::XButton::static_type( 0 ),
+ CREATE_OUSTRING( "com.sun.star.form.component.CommandButton" ),
+ form::FormComponentType::COMMANDBUTTON )
+{
+}
+
+ScVbaSheetObjectBase* ScVbaButtonContainer::implCreateVbaObject( const uno::Reference< drawing::XShape >& rxShape ) throw (uno::RuntimeException)
+{
+ uno::Reference< drawing::XControlShape > xControlShape( rxShape, uno::UNO_QUERY_THROW );
+ return new ScVbaButton( mxParent, mxContext, mxModel, createForm(), xControlShape );
+}
+
+bool ScVbaButtonContainer::implCheckProperties( const uno::Reference< beans::XPropertySet >& rxModelProps ) const
+{
+ // do not insert toggle buttons into the 'Buttons' collection
+ bool bToggle = false;
+ return lclGetProperty( bToggle, rxModelProps, CREATE_OUSTRING( "Toggle" ) ) && !bToggle;
+}
+
+// ============================================================================
+
+ScVbaButtons::ScVbaButtons(
+ const uno::Reference< XHelperInterface >& rxParent,
+ const uno::Reference< uno::XComponentContext >& rxContext,
+ const uno::Reference< frame::XModel >& rxModel,
+ const uno::Reference< sheet::XSpreadsheet >& rxSheet ) throw (uno::RuntimeException) :
+ ScVbaGraphicObjectsBase( new ScVbaButtonContainer( rxParent, rxContext, rxModel, rxSheet ) )
+{
+}
+
+VBAHELPER_IMPL_XHELPERINTERFACE( ScVbaButtons, "ooo.vba.excel.Buttons" )
+
+// ============================================================================
diff --git a/sc/source/ui/vba/vbasheetobjects.hxx b/sc/source/ui/vba/vbasheetobjects.hxx
new file mode 100755
index 000000000000..fd69d4927a20
--- /dev/null
+++ b/sc/source/ui/vba/vbasheetobjects.hxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 SC_VBA_SHEETOBJECTS_HXX
+#define SC_VBA_SHEETOBJECTS_HXX
+
+#include <ooo/vba/excel/XGraphicObjects.hpp>
+#include <vbahelper/vbacollectionimpl.hxx>
+#include <rtl/ref.hxx>
+
+namespace com { namespace sun { namespace star {
+ namespace container { class XEnumeration; }
+ namespace frame { class XModel; }
+ namespace sheet { class XSpreadsheet; }
+} } }
+
+// ============================================================================
+
+class ScVbaObjectContainer;
+typedef ::rtl::Reference< ScVbaObjectContainer > ScVbaObjectContainerRef;
+
+// ============================================================================
+
+typedef CollTestImplHelper< ov::XCollection > ScVbaSheetObjects_BASE;
+
+/** Base class for collections containing a specific type of drawing object
+ embedded in a sheet (worksheet, chart sheet, or dialog sheet).
+ */
+class ScVbaSheetObjectsBase : public ScVbaSheetObjects_BASE
+{
+public:
+ explicit ScVbaSheetObjectsBase( const ScVbaObjectContainerRef& rxContainer ) throw (css::uno::RuntimeException);
+ virtual ~ScVbaSheetObjectsBase();
+
+ /** Updates the collection by fetching all shapes from the draw page. */
+ void collectShapes() throw (css::uno::RuntimeException);
+
+ // XEnumerationAccess
+ virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() throw (css::uno::RuntimeException);
+
+ // XElementAccess
+ virtual css::uno::Type SAL_CALL getElementType() throw (css::uno::RuntimeException);
+
+ // ScVbaCollectionBase
+ virtual css::uno::Any createCollectionObject( const css::uno::Any& rSource );
+ virtual css::uno::Any getItemByStringIndex( const ::rtl::OUString& rIndex ) throw (css::uno::RuntimeException);
+
+protected:
+ ScVbaObjectContainerRef mxContainer;
+};
+
+// ============================================================================
+
+typedef ::cppu::ImplInheritanceHelper1< ScVbaSheetObjectsBase, ov::excel::XGraphicObjects > ScVbaGraphicObjects_BASE;
+
+/** Base class for collections containing a specific type of graphic object
+ from a sheet.
+ */
+class ScVbaGraphicObjectsBase : public ScVbaGraphicObjects_BASE
+{
+public:
+ explicit ScVbaGraphicObjectsBase( const ScVbaObjectContainerRef& rxContainer ) throw (css::uno::RuntimeException);
+
+ // XGraphicObjects
+ virtual css::uno::Any SAL_CALL Add(
+ const css::uno::Any& rLeft,
+ const css::uno::Any& rTop,
+ const css::uno::Any& rWidth,
+ const css::uno::Any& rHeight ) throw (css::uno::RuntimeException);
+};
+
+// ============================================================================
+
+/** Collection containing all button controls from a sheet (not ActiveX controls). */
+class ScVbaButtons : public ScVbaGraphicObjectsBase
+{
+public:
+ explicit ScVbaButtons(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::frame::XModel >& rxModel,
+ const css::uno::Reference< css::sheet::XSpreadsheet >& rxSheet ) throw (css::uno::RuntimeException);
+
+ VBAHELPER_DECL_XHELPERINTERFACE
+};
+
+// ============================================================================
+
+#endif
diff --git a/sc/source/ui/vba/vbawindow.cxx b/sc/source/ui/vba/vbawindow.cxx
index f0aafe83908b..10dad39341b7 100644
--- a/sc/source/ui/vba/vbawindow.cxx
+++ b/sc/source/ui/vba/vbawindow.cxx
@@ -55,9 +55,6 @@ using namespace ::com::sun::star;
using namespace ::ooo::vba;
using namespace ::ooo::vba::excel::XlWindowState;
-// nameExists defined in vbaworksheet.cxx
-bool nameExists( uno::Reference <sheet::XSpreadsheetDocument>& xSpreadDoc, ::rtl::OUString & name, SCTAB& nTab ) throw ( lang::IllegalArgumentException );
-
typedef std::hash_map< rtl::OUString,
SCTAB, ::rtl::OUStringHash,
::std::equal_to< ::rtl::OUString > > NameIndexHash;
@@ -213,18 +210,25 @@ ScVbaWindow::ScVbaWindow( uno::Sequence< uno::Any > const & args, uno::Reference
{
init();
}
+
void
ScVbaWindow::init()
{
+ /* This method is called from the constructor, thus the own refcount is
+ still zero. The implementation of ActivePane() uses a UNO reference of
+ this (to set this window as parent of the pane obejct). This requires
+ the own refcount to be non-zero, otherwise this instance will be
+ desctructed immediately! */
+ osl_incrementInterlockedCount( &m_refCount );
uno::Reference< frame::XController > xController( m_xModel->getCurrentController(), uno::UNO_QUERY_THROW );
m_xViewPane.set( xController, uno::UNO_QUERY_THROW );
m_xViewFreezable.set( xController, uno::UNO_QUERY_THROW );
m_xViewSplitable.set( xController, uno::UNO_QUERY_THROW );
m_xPane.set( ActivePane(), uno::UNO_QUERY_THROW );
m_xDevice.set( xController->getFrame()->getComponentWindow(), uno::UNO_QUERY_THROW );
+ osl_decrementInterlockedCount( &m_refCount );
}
-
void
ScVbaWindow::Scroll( const uno::Any& Down, const uno::Any& Up, const uno::Any& ToRight, const uno::Any& ToLeft, bool bLargeScroll ) throw (uno::RuntimeException)
{
@@ -233,11 +237,13 @@ ScVbaWindow::Scroll( const uno::Any& Down, const uno::Any& Up, const uno::Any& T
else
m_xPane->SmallScroll( Down, Up, ToRight, ToLeft );
}
+
void SAL_CALL
ScVbaWindow::SmallScroll( const uno::Any& Down, const uno::Any& Up, const uno::Any& ToRight, const uno::Any& ToLeft ) throw (uno::RuntimeException)
{
Scroll( Down, Up, ToRight, ToLeft );
}
+
void SAL_CALL
ScVbaWindow::LargeScroll( const uno::Any& Down, const uno::Any& Up, const uno::Any& ToRight, const uno::Any& ToLeft ) throw (uno::RuntimeException)
{
@@ -450,7 +456,7 @@ ScVbaWindow::Close( const uno::Any& SaveChanges, const uno::Any& FileName, const
uno::Reference< excel::XPane > SAL_CALL
ScVbaWindow::ActivePane() throw (script::BasicErrorException, uno::RuntimeException)
{
- return new ScVbaPane( mxContext, m_xViewPane );
+ return new ScVbaPane( this, mxContext, m_xModel, m_xViewPane );
}
uno::Reference< excel::XRange > SAL_CALL
@@ -467,6 +473,14 @@ ScVbaWindow::Selection( ) throw (script::BasicErrorException, uno::RuntimeExcep
return xApplication->getSelection();
}
+uno::Reference< excel::XRange > SAL_CALL
+ScVbaWindow::RangeSelection() throw (script::BasicErrorException, uno::RuntimeException)
+{
+ /* TODO / FIXME: According to documentation, this method returns the range
+ selection even if shapes are selected. */
+ return uno::Reference< excel::XRange >( Selection(), uno::UNO_QUERY_THROW );
+}
+
::sal_Bool SAL_CALL
ScVbaWindow::getDisplayGridlines() throw (uno::RuntimeException)
{
@@ -732,9 +746,7 @@ ScVbaWindow::setZoom( const uno::Any& _zoom ) throw (uno::RuntimeException)
uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( m_xModel, uno::UNO_QUERY_THROW );
uno::Reference< excel::XWorksheet > xActiveSheet = ActiveSheet();
SCTAB nTab = 0;
- rtl::OUString sName = xActiveSheet->getName();
- bool bSheetExists = nameExists (xSpreadDoc, sName, nTab);
- if ( !bSheetExists )
+ if ( !ScVbaWorksheets::nameExists (xSpreadDoc, xActiveSheet->getName(), nTab) )
throw uno::RuntimeException();
std::vector< SCTAB > vTabs;
vTabs.push_back( nTab );
@@ -778,6 +790,15 @@ ScVbaWindow::setView( const uno::Any& _view) throw (uno::RuntimeException)
dispatchExecute( pViewShell, nSlot );
}
+uno::Reference< excel::XRange > SAL_CALL
+ScVbaWindow::getVisibleRange() throw (uno::RuntimeException)
+{
+ uno::Reference< container::XIndexAccess > xPanesIA( m_xViewPane, uno::UNO_QUERY_THROW );
+ uno::Reference< sheet::XViewPane > xTopLeftPane( xPanesIA->getByIndex( 0 ), uno::UNO_QUERY_THROW );
+ uno::Reference< excel::XPane > xPane( new ScVbaPane( this, mxContext, m_xModel, xTopLeftPane ) );
+ return xPane->getVisibleRange();
+}
+
sal_Int32 SAL_CALL
ScVbaWindow::PointsToScreenPixelsX(sal_Int32 _points) throw (css::script::BasicErrorException, css::uno::RuntimeException)
{
diff --git a/sc/source/ui/vba/vbawindow.hxx b/sc/source/ui/vba/vbawindow.hxx
index e72401a2baac..d58d2a07cb4b 100644
--- a/sc/source/ui/vba/vbawindow.hxx
+++ b/sc/source/ui/vba/vbawindow.hxx
@@ -26,6 +26,7 @@
************************************************************************/
#ifndef SC_VBA_WINDOW_HXX
#define SC_VBA_WINDOW_HXX
+
#include <cppuhelper/implbase1.hxx>
#include <ooo/vba/excel/XWindow.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
@@ -40,7 +41,6 @@
#include <vbahelper/vbawindowbase.hxx>
#include "vbaworkbook.hxx"
-//typedef InheritedHelperInterfaceImpl1<ov::excel::XWindow > WindowImpl_BASE;
typedef cppu::ImplInheritanceHelper1< VbaWindowBase, ov::excel::XWindow > WindowImpl_BASE;
class ScVbaWindow : public WindowImpl_BASE
@@ -96,6 +96,7 @@ public:
virtual void SAL_CALL setScrollColumn( const css::uno::Any& _scrollcolumn ) throw (css::uno::RuntimeException) ;
virtual css::uno::Any SAL_CALL getView() throw (css::uno::RuntimeException);
virtual void SAL_CALL setView( const css::uno::Any& _view ) throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XRange > SAL_CALL getVisibleRange() throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL getWindowState() throw (css::uno::RuntimeException);
virtual void SAL_CALL setWindowState( const css::uno::Any& _windowstate ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL getZoom() throw (css::uno::RuntimeException);
@@ -108,11 +109,12 @@ public:
virtual void SAL_CALL ScrollWorkbookTabs( const css::uno::Any& Sheets, const css::uno::Any& Position ) throw (css::uno::RuntimeException);
virtual void SAL_CALL Activate( ) throw (css::uno::RuntimeException);
virtual void SAL_CALL Close( const css::uno::Any& SaveChanges, const css::uno::Any& FileName, const css::uno::Any& RouteWorkBook ) throw (css::uno::RuntimeException);
- virtual css::uno::Any SAL_CALL Selection( ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
- virtual sal_Int32 SAL_CALL PointsToScreenPixelsX(sal_Int32 _points) throw (css::script::BasicErrorException, css::uno::RuntimeException);
- virtual sal_Int32 SAL_CALL PointsToScreenPixelsY(sal_Int32 _points) throw (css::script::BasicErrorException, css::uno::RuntimeException);
- virtual void SAL_CALL PrintOut( const css::uno::Any& From, const css::uno::Any&To, const css::uno::Any& Copies, const css::uno::Any& Preview, const css::uno::Any& ActivePrinter, const css::uno::Any& PrintToFile, const css::uno::Any& Collate, const css::uno::Any& PrToFileName ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
- virtual void SAL_CALL PrintPreview( const css::uno::Any& EnableChanges ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL Selection( ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::excel::XRange > SAL_CALL RangeSelection() throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL PointsToScreenPixelsX(sal_Int32 _points) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL PointsToScreenPixelsY(sal_Int32 _points) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual void SAL_CALL PrintOut( const css::uno::Any& From, const css::uno::Any&To, const css::uno::Any& Copies, const css::uno::Any& Preview, const css::uno::Any& ActivePrinter, const css::uno::Any& PrintToFile, const css::uno::Any& Collate, const css::uno::Any& PrToFileName ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual void SAL_CALL PrintPreview( const css::uno::Any& EnableChanges ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
// XHelperInterface
virtual rtl::OUString& getServiceImplName();
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
diff --git a/sc/source/ui/vba/vbaworkbook.cxx b/sc/source/ui/vba/vbaworkbook.cxx
index 6694f4e5e135..365c8b35a00c 100644
--- a/sc/source/ui/vba/vbaworkbook.cxx
+++ b/sc/source/ui/vba/vbaworkbook.cxx
@@ -345,32 +345,8 @@ ScVbaWorkbook::getServiceNames()
::rtl::OUString SAL_CALL
ScVbaWorkbook::getCodeName() throw (css::uno::RuntimeException)
{
-#ifdef VBA_OOBUILD_HACK
- uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW );
- ScDocument* pDoc = excel::getDocShell( xModel )->GetDocument();
- ScExtDocOptions* pExtOptions = pDoc->GetExtDocOptions();
- ScExtDocSettings pExtSettings = pExtOptions->GetDocSettings();
- ::rtl::OUString sGlobCodeName = pExtSettings.maGlobCodeName;
- return sGlobCodeName;
-#else
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Not implemented") ), uno::Reference< uno::XInterface >() );
-#endif
-}
-#ifdef VBA_OOBUILD_HACK
-void SAL_CALL
-ScVbaWorkbook::setCodeName( const ::rtl::OUString& sGlobCodeName ) throw (css::uno::RuntimeException)
-{
- uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW );
- ScDocument* pDoc = excel::getDocShell( xModel )->GetDocument();
- ScExtDocOptions* pExtOptions = pDoc->GetExtDocOptions();
- ScExtDocSettings pExtSettings = pExtOptions->GetDocSettings();
- pExtSettings.maGlobCodeName = sGlobCodeName;
-#else
-void SAL_CALL
-ScVbaWorkbook::setCodeName( const ::rtl::OUString& ) throw (css::uno::RuntimeException)
-{
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Not implemented") ), uno::Reference< uno::XInterface >() );
-#endif
+ uno::Reference< beans::XPropertySet > xModelProp( getModel(), uno::UNO_QUERY_THROW );
+ return xModelProp->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CodeName" ) ) ).get< ::rtl::OUString >();
}
namespace workbook
diff --git a/sc/source/ui/vba/vbaworkbook.hxx b/sc/source/ui/vba/vbaworkbook.hxx
index 40234aca21d7..4aff58078403 100644
--- a/sc/source/ui/vba/vbaworkbook.hxx
+++ b/sc/source/ui/vba/vbaworkbook.hxx
@@ -71,7 +71,6 @@ public:
virtual void SAL_CALL SaveCopyAs( const rtl::OUString& Filename ) throw ( css::uno::RuntimeException);
// code name
virtual ::rtl::OUString SAL_CALL getCodeName() throw ( css::uno::RuntimeException);
- virtual void SAL_CALL setCodeName( const ::rtl::OUString& sGlobCodeName ) throw (css::uno::RuntimeException);
// XHelperInterface
virtual rtl::OUString& getServiceImplName();
diff --git a/sc/source/ui/vba/vbaworksheet.cxx b/sc/source/ui/vba/vbaworksheet.cxx
index be988509aa68..5b1963e3d242 100644
--- a/sc/source/ui/vba/vbaworksheet.cxx
+++ b/sc/source/ui/vba/vbaworksheet.cxx
@@ -24,9 +24,12 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+
#include <vbahelper/helperdecl.hxx>
#include <cppuhelper/queryinterface.hxx>
+#include "vbaworksheet.hxx"
+
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XIntrospectionAccess.hpp>
#include <com/sun/star/beans/XIntrospection.hpp>
@@ -60,14 +63,15 @@
#include <ooo/vba/XControlProvider.hpp>
#include <comphelper/processfactory.hxx>
+#include <vbahelper/vbashapes.hxx>
#include <tools/string.hxx>
//zhangyun showdataform
#include <sfx2/sfxdlg.hxx>
-#include <scabstdlg.hxx>
-#include <tabvwsh.hxx>
-#include <scitems.hxx>
+#include "scabstdlg.hxx"
+#include "tabvwsh.hxx"
+#include "scitems.hxx"
#include <svx/svdouno.hxx>
#include <svx/svdpage.hxx>
@@ -79,43 +83,22 @@
#include "vbaoutline.hxx"
#include "vbarange.hxx"
#include "vbacomments.hxx"
-#include "vbaworksheet.hxx"
#include "vbachartobjects.hxx"
#include "vbapivottables.hxx"
#include "vbaoleobject.hxx"
#include "vbaoleobjects.hxx"
-#include <vbahelper/vbashapes.hxx>
#include "vbapagesetup.hxx"
#include "vbapagebreaks.hxx"
+#include "vbaworksheets.hxx"
+#include "vbahyperlinks.hxx"
+#include "vbasheetobjects.hxx"
#define STANDARDWIDTH 2267
#define STANDARDHEIGHT 427
#define DOESNOTEXIST -1
+
using namespace com::sun::star;
using namespace ooo::vba;
-bool
-nameExists( uno::Reference <sheet::XSpreadsheetDocument>& xSpreadDoc, ::rtl::OUString & name, SCTAB& nTab ) throw ( lang::IllegalArgumentException )
-{
- if (!xSpreadDoc.is())
- throw lang::IllegalArgumentException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nameExists() xSpreadDoc is null" ) ), uno::Reference< uno::XInterface >(), 1 );
- uno::Reference <sheet::XSpreadsheets> xSheets = xSpreadDoc->getSheets();
- uno::Reference <container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY );
- if ( xIndex.is() )
- {
- SCTAB nCount = static_cast< SCTAB >( xIndex->getCount() );
- for (SCTAB i=0; i < nCount; i++)
- {
- uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(i), uno::UNO_QUERY);
- uno::Reference< container::XNamed > xNamed( xSheet, uno::UNO_QUERY_THROW );
- if (xNamed->getName() == name)
- {
- nTab = i;
- return true;
- }
- }
- }
- return false;
-}
static void getNewSpreadsheetName (rtl::OUString &aNewName, rtl::OUString aOldName, uno::Reference <sheet::XSpreadsheetDocument>& xSpreadDoc )
{
@@ -125,7 +108,7 @@ static void getNewSpreadsheetName (rtl::OUString &aNewName, rtl::OUString aOldNa
int currentNum =2;
aNewName = aOldName + aUnderScre+ String::CreateFromInt32(currentNum) ;
SCTAB nTab = 0;
- while ( nameExists(xSpreadDoc,aNewName, nTab ) )
+ while ( ScVbaWorksheets::nameExists(xSpreadDoc,aNewName, nTab ) )
{
aNewName = aOldName + aUnderScre +
String::CreateFromInt32(++currentNum) ;
@@ -152,7 +135,8 @@ static void removeAllSheets( uno::Reference <sheet::XSpreadsheetDocument>& xSpre
}
}
- uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(0), uno::UNO_QUERY); uno::Reference< container::XNamed > xNamed( xSheet, uno::UNO_QUERY_THROW );
+ uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference< container::XNamed > xNamed( xSheet, uno::UNO_QUERY_THROW );
if (xNamed.is())
{
xNamed->setName(aSheetName);
@@ -196,6 +180,7 @@ openNewDoc(rtl::OUString aSheetName )
ScVbaWorksheet::ScVbaWorksheet( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext ) : WorksheetImpl_BASE( xParent, xContext )
{
}
+
ScVbaWorksheet::ScVbaWorksheet(const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext,
const uno::Reference< sheet::XSpreadsheet >& xSheet,
const uno::Reference< frame::XModel >& xModel ) throw (uno::RuntimeException) : WorksheetImpl_BASE( xParent, xContext ), mxSheet( xSheet ), mxModel(xModel)
@@ -216,6 +201,10 @@ ScVbaWorksheet::ScVbaWorksheet( uno::Sequence< uno::Any> const & args,
mxSheet.set( xNameAccess->getByName( sSheetName ), uno::UNO_QUERY_THROW );
}
+ScVbaWorksheet::~ScVbaWorksheet()
+{
+}
+
::rtl::OUString
ScVbaWorksheet::getName() throw (uno::RuntimeException)
{
@@ -261,9 +250,7 @@ ScVbaWorksheet::getEnableSelection() throw (uno::RuntimeException)
{
uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( getModel(), uno::UNO_QUERY_THROW );
SCTAB nTab = 0;
- rtl::OUString aSheetName = getName();
- bool bSheetExists = nameExists (xSpreadDoc, aSheetName, nTab);
- if ( bSheetExists )
+ if ( ScVbaWorksheets::nameExists(xSpreadDoc, getName(), nTab) )
{
uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW );
ScDocument* pDoc = excel::getDocShell( xModel )->GetDocument();
@@ -301,9 +288,7 @@ ScVbaWorksheet::setEnableSelection( sal_Int32 nSelection ) throw (uno::RuntimeEx
uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( getModel(), uno::UNO_QUERY_THROW );
SCTAB nTab = 0;
- rtl::OUString aSheetName = getName();
- bool bSheetExists = nameExists (xSpreadDoc, aSheetName, nTab);
- if ( bSheetExists )
+ if ( ScVbaWorksheets::nameExists(xSpreadDoc, getName(), nTab) )
{
uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW );
ScDocument* pDoc = excel::getDocShell( xModel )->GetDocument();
@@ -426,9 +411,8 @@ ScVbaWorksheet::Select() throw (uno::RuntimeException)
void
ScVbaWorksheet::Move( const uno::Any& Before, const uno::Any& After ) throw (uno::RuntimeException)
{
- rtl::OUString aSheetName;
uno::Reference<excel::XWorksheet> xSheet;
- rtl::OUString aCurrSheetName =getName();
+ rtl::OUString aCurrSheetName = getName();
if (!(Before >>= xSheet) && !(After >>=xSheet)&& !(Before.hasValue()) && !(After.hasValue()))
{
@@ -451,9 +435,7 @@ ScVbaWorksheet::Move( const uno::Any& Before, const uno::Any& After ) throw (uno
uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( getModel(), uno::UNO_QUERY_THROW );
SCTAB nDest = 0;
- aSheetName = xSheet->getName();
- bool bSheetExists = nameExists (xSpreadDoc, aSheetName, nDest);
- if ( bSheetExists )
+ if ( ScVbaWorksheets::nameExists (xSpreadDoc, xSheet->getName(), nDest) )
{
sal_Bool bAfter = After.hasValue();
if (bAfter)
@@ -466,7 +448,6 @@ ScVbaWorksheet::Move( const uno::Any& Before, const uno::Any& After ) throw (uno
void
ScVbaWorksheet::Copy( const uno::Any& Before, const uno::Any& After ) throw (uno::RuntimeException)
{
- rtl::OUString aSheetName;
uno::Reference<excel::XWorksheet> xSheet;
rtl::OUString aCurrSheetName =getName();
if (!(Before >>= xSheet) && !(After >>=xSheet)&& !(Before.hasValue()) && !(After.hasValue()))
@@ -488,10 +469,8 @@ ScVbaWorksheet::Copy( const uno::Any& Before, const uno::Any& After ) throw (uno
uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( getModel(), uno::UNO_QUERY );
SCTAB nDest = 0;
- aSheetName = xSheet->getName();
- bool bSheetExists = nameExists (xSpreadDoc, aSheetName, nDest );
-
- if ( bSheetExists )
+ rtl::OUString aSheetName = xSheet->getName();
+ if ( ScVbaWorksheets::nameExists (xSpreadDoc, aSheetName, nDest ) )
{
sal_Bool bAfter = After.hasValue();
if(bAfter)
@@ -521,7 +500,7 @@ ScVbaWorksheet::Delete() throw (uno::RuntimeException)
if ( xSpreadDoc.is() )
{
SCTAB nTab = 0;
- if (!nameExists(xSpreadDoc, aSheetName, nTab ))
+ if (!ScVbaWorksheets::nameExists(xSpreadDoc, aSheetName, nTab ))
{
return;
}
@@ -539,11 +518,8 @@ ScVbaWorksheet::getSheetAtOffset(SCTAB offset) throw (uno::RuntimeException)
uno::Reference <sheet::XSpreadsheets> xSheets( xSpreadDoc->getSheets(), uno::UNO_QUERY_THROW );
uno::Reference <container::XIndexAccess> xIndex( xSheets, uno::UNO_QUERY_THROW );
- rtl::OUString aName = getName();
SCTAB nIdx = 0;
- bool bSheetExists = nameExists (xSpreadDoc, aName, nIdx );
-
- if ( !bSheetExists )
+ if ( !ScVbaWorksheets::nameExists (xSpreadDoc, getName(), nIdx ) )
return uno::Reference< excel::XWorksheet >();
nIdx = nIdx + offset;
uno::Reference< sheet::XSpreadsheet > xSheet(xIndex->getByIndex(nIdx), uno::UNO_QUERY_THROW);
@@ -677,13 +653,25 @@ ScVbaWorksheet::Comments( const uno::Any& Index ) throw (uno::RuntimeException)
uno::Reference< sheet::XSheetAnnotationsSupplier > xAnnosSupp( xSheet, uno::UNO_QUERY_THROW );
uno::Reference< sheet::XSheetAnnotations > xAnnos( xAnnosSupp->getAnnotations(), uno::UNO_QUERY_THROW );
uno::Reference< container::XIndexAccess > xIndexAccess( xAnnos, uno::UNO_QUERY_THROW );
- uno::Reference< XCollection > xColl( new ScVbaComments( this, mxContext, xIndexAccess ) );
+ uno::Reference< XCollection > xColl( new ScVbaComments( this, mxContext, mxModel, xIndexAccess ) );
if ( Index.hasValue() )
return xColl->Item( Index, uno::Any() );
return uno::makeAny( xColl );
}
uno::Any SAL_CALL
+ScVbaWorksheet::Hyperlinks( const uno::Any& aIndex ) throw (uno::RuntimeException)
+{
+ /* The worksheet always returns the same Hyperlinks object.
+ See vbahyperlinks.hxx for more details. */
+ if( !mxHlinks.is() )
+ mxHlinks.set( new ScVbaHyperlinks( this, mxContext ) );
+ if( aIndex.hasValue() )
+ return uno::Reference< XCollection >( mxHlinks, uno::UNO_QUERY_THROW )->Item( aIndex, uno::Any() );
+ return uno::Any( mxHlinks );
+}
+
+uno::Any SAL_CALL
ScVbaWorksheet::OLEObjects( const uno::Any& Index ) throw (uno::RuntimeException)
{
ScVbaOLEObjects* aOleObjects;
@@ -716,6 +704,66 @@ ScVbaWorksheet::Shapes( const uno::Any& aIndex ) throw (uno::RuntimeException)
return uno::makeAny( xVbaShapes );
}
+uno::Any SAL_CALL
+ScVbaWorksheet::Buttons( const uno::Any& rIndex ) throw (uno::RuntimeException)
+{
+ if( !mxButtons.is() )
+ mxButtons.set( new ScVbaButtons( this, mxContext, mxModel, mxSheet ) );
+ else
+ mxButtons->collectShapes();
+ if( rIndex.hasValue() )
+ return mxButtons->Item( rIndex, uno::Any() );
+ return uno::Any( uno::Reference< XCollection >( mxButtons.get() ) );
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::CheckBoxes( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::DropDowns( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::GroupBoxes( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::Labels( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::ListBoxes( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::OptionButtons( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::ScrollBars( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
+uno::Any SAL_CALL
+ScVbaWorksheet::Spinners( const uno::Any& /*rIndex*/ ) throw (uno::RuntimeException)
+{
+ throw uno::RuntimeException();
+}
+
void SAL_CALL
ScVbaWorksheet::ShowDataForm( ) throw (uno::RuntimeException)
{
@@ -882,52 +930,8 @@ ScVbaWorksheet::getServiceNames()
rtl::OUString SAL_CALL
ScVbaWorksheet::getCodeName() throw (css::uno::RuntimeException)
{
-#ifdef VBA_OOBUILD_HACK
- uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( getModel(), uno::UNO_QUERY_THROW );
- SCTAB nTab = 0;
- rtl::OUString aSheetName = getName();
- bool bSheetExists = nameExists (xSpreadDoc, aSheetName, nTab);
- if ( bSheetExists )
- {
- uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW );
- ScDocument* pDoc = getDocShell( xModel )->GetDocument();
- ScExtDocOptions* pExtOptions = pDoc->GetExtDocOptions();
- rtl::OUString sCodeName = pExtOptions->GetCodeName( nTab );
- return sCodeName;
- }
- else
- throw uno::RuntimeException(::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "Sheet Name does not exist. ") ),
- uno::Reference< XInterface >() );
-#else
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Not implemented") ), uno::Reference< uno::XInterface >() );
-#endif
-}
-#ifdef VBA_OOBUILD_HACK
-void SAL_CALL
-ScVbaWorksheet::setCodeName( const rtl::OUString& sCodeName ) throw (css::uno::RuntimeException)
-{
- uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( getModel(), uno::UNO_QUERY_THROW );
- SCTAB nTab = 0;
- rtl::OUString aSheetName = getName();
- bool bSheetExists = nameExists (xSpreadDoc, aSheetName, nTab);
- if ( bSheetExists )
- {
- uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW );
- ScDocument* pDoc = getDocShell( xModel )->GetDocument();
- ScExtDocOptions* pExtOptions = pDoc->GetExtDocOptions();
- pExtOptions->SetCodeName( sCodeName, nTab );
- }
- else
- throw uno::RuntimeException(::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "Sheet Name does not exist. ") ),
- uno::Reference< XInterface >() );
-#else
-void SAL_CALL
-ScVbaWorksheet::setCodeName( const rtl::OUString& ) throw (css::uno::RuntimeException)
-{
- throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Not implemented") ), uno::Reference< uno::XInterface >() );
-#endif
+ uno::Reference< beans::XPropertySet > xSheetProp( mxSheet, uno::UNO_QUERY_THROW );
+ return xSheetProp->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CodeName" ) ) ).get< ::rtl::OUString >();
}
sal_Int16
diff --git a/sc/source/ui/vba/vbaworksheet.hxx b/sc/source/ui/vba/vbaworksheet.hxx
index 5fe1343f9237..d07cc1a8d55c 100644
--- a/sc/source/ui/vba/vbaworksheet.hxx
+++ b/sc/source/ui/vba/vbaworksheet.hxx
@@ -42,11 +42,17 @@
#include <ooo/vba/excel/XPageSetup.hpp>
#include <ooo/vba/excel/XHPageBreaks.hpp>
#include <ooo/vba/excel/XVPageBreaks.hpp>
-#include <ooo/vba/excel/XChartObjects.hpp>
#include <vbahelper/vbahelperinterface.hxx>
#include "address.hxx"
+namespace ooo { namespace vba { namespace excel {
+ class XChartObjects;
+ class XHyperlinks;
+} } }
+
+class ScVbaSheetObjectsBase;
+
typedef InheritedHelperInterfaceImpl1< ov::excel::XWorksheet > WorksheetImpl_BASE;
class ScVbaWorksheet : public WorksheetImpl_BASE
@@ -54,6 +60,8 @@ class ScVbaWorksheet : public WorksheetImpl_BASE
css::uno::Reference< css::sheet::XSpreadsheet > mxSheet;
css::uno::Reference< css::frame::XModel > mxModel;
css::uno::Reference< ov::excel::XChartObjects > mxCharts;
+ css::uno::Reference< ov::excel::XHyperlinks > mxHlinks;
+ ::rtl::Reference< ScVbaSheetObjectsBase > mxButtons;
css::uno::Reference< ov::excel::XWorksheet > getSheetAtOffset(SCTAB offset) throw (css::uno::RuntimeException);
css::uno::Reference< ov::excel::XRange > getSheetRange() throw (css::uno::RuntimeException);
@@ -70,7 +78,7 @@ public:
const css::uno::Reference< css::frame::XModel >& xModel )throw (css::uno::RuntimeException) ;
ScVbaWorksheet( css::uno::Sequence< css::uno::Any > const& aArgs, css::uno::Reference< css::uno::XComponentContext >const& xContext ) throw ( css::lang::IllegalArgumentException );
- virtual ~ScVbaWorksheet() {}
+ virtual ~ScVbaWorksheet();
virtual css::uno::Reference< css::frame::XModel > getModel()
{ return mxModel; }
@@ -120,9 +128,21 @@ public:
virtual css::uno::Any SAL_CALL Evaluate( const ::rtl::OUString& Name ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL PivotTables( const css::uno::Any& Index ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL Comments( const css::uno::Any& Index ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL Hyperlinks( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL OLEObjects( const css::uno::Any& Index ) throw (css::uno::RuntimeException);
virtual css::uno::Any SAL_CALL Shapes( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
+
+ virtual css::uno::Any SAL_CALL Buttons( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL CheckBoxes( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL DropDowns( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL GroupBoxes( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL Labels( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL ListBoxes( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL OptionButtons( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL ScrollBars( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL Spinners( const css::uno::Any& rIndex ) throw (css::uno::RuntimeException);
+
virtual void SAL_CALL setEnableCalculation( ::sal_Bool EnableCalculation ) throw ( css::script::BasicErrorException, css::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL getEnableCalculation( ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
virtual void SAL_CALL ShowDataForm( ) throw (css::uno::RuntimeException);
@@ -135,7 +155,6 @@ public:
virtual ::sal_Bool SAL_CALL hasProperty( const ::rtl::OUString& aName ) throw (css::uno::RuntimeException);
// CodeName
virtual rtl::OUString SAL_CALL getCodeName() throw (css::uno::RuntimeException);
- virtual void SAL_CALL setCodeName( const rtl::OUString& sCodeName ) throw (css::uno::RuntimeException);
sal_Int16 getSheetID() throw (css::uno::RuntimeException);
virtual void SAL_CALL PrintOut( const css::uno::Any& From, const css::uno::Any& To, const css::uno::Any& Copies, const css::uno::Any& Preview, const css::uno::Any& ActivePrinter, const css::uno::Any& PrintToFile, const css::uno::Any& Collate, const css::uno::Any& PrToFileName, const css::uno::Any& IgnorePrintAreas ) throw (css::uno::RuntimeException);
diff --git a/sc/source/ui/vba/vbaworksheets.cxx b/sc/source/ui/vba/vbaworksheets.cxx
index e7de0b82fcaa..60cf7b904026 100644
--- a/sc/source/ui/vba/vbaworksheets.cxx
+++ b/sc/source/ui/vba/vbaworksheets.cxx
@@ -435,3 +435,24 @@ ScVbaWorksheets::getServiceNames()
}
return sNames;
}
+
+/*static*/ bool ScVbaWorksheets::nameExists( uno::Reference <sheet::XSpreadsheetDocument>& xSpreadDoc, const ::rtl::OUString & name, SCTAB& nTab ) throw ( lang::IllegalArgumentException )
+{
+ if (!xSpreadDoc.is())
+ throw lang::IllegalArgumentException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "nameExists() xSpreadDoc is null" ) ), uno::Reference< uno::XInterface >(), 1 );
+ uno::Reference <container::XIndexAccess> xIndex( xSpreadDoc->getSheets(), uno::UNO_QUERY );
+ if ( xIndex.is() )
+ {
+ SCTAB nCount = static_cast< SCTAB >( xIndex->getCount() );
+ for (SCTAB i=0; i < nCount; i++)
+ {
+ uno::Reference< container::XNamed > xNamed( xIndex->getByIndex(i), uno::UNO_QUERY_THROW );
+ if (xNamed->getName() == name)
+ {
+ nTab = i;
+ return true;
+ }
+ }
+ }
+ return false;
+}
diff --git a/sc/source/ui/vba/vbaworksheets.hxx b/sc/source/ui/vba/vbaworksheets.hxx
index 4c8120084b02..2ced68bc9e27 100644
--- a/sc/source/ui/vba/vbaworksheets.hxx
+++ b/sc/source/ui/vba/vbaworksheets.hxx
@@ -31,11 +31,14 @@
#include <ooo/vba/excel/XWorksheets.hpp>
#include <com/sun/star/sheet/XSpreadsheets.hpp>
+#include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <vbahelper/vbacollectionimpl.hxx>
+#include "address.hxx"
+
class ScModelObj;
@@ -74,6 +77,7 @@ public:
virtual rtl::OUString& getServiceImplName();
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
+ static bool nameExists( css::uno::Reference <css::sheet::XSpreadsheetDocument>& xSpreadDoc, const ::rtl::OUString & name, SCTAB& nTab ) throw ( css::lang::IllegalArgumentException );
};
#endif /* SC_VBA_WORKSHEETS_HXX */
diff --git a/sc/source/ui/vba/vbawsfunction.cxx b/sc/source/ui/vba/vbawsfunction.cxx
index c355244f6815..60daa7303f2e 100644
--- a/sc/source/ui/vba/vbawsfunction.cxx
+++ b/sc/source/ui/vba/vbawsfunction.cxx
@@ -31,6 +31,7 @@
#include <com/sun/star/beans/XIntrospectionAccess.hpp>
#include <com/sun/star/sheet/XFunctionAccess.hpp>
#include <com/sun/star/sheet/XCellRangesQuery.hpp>
+#include <com/sun/star/sheet/XCellRangeAddressable.hpp>
#include <com/sun/star/sheet/CellFlags.hpp>
#include <com/sun/star/reflection/XIdlMethod.hpp>
#include <com/sun/star/beans/MethodConcept.hpp>
@@ -44,10 +45,27 @@
using namespace com::sun::star;
using namespace ooo::vba;
-ScVbaWSFunction::ScVbaWSFunction( const uno::Reference< XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext): ScVbaWSFunction_BASE( xParent, xContext )
+namespace {
+
+void lclConvertDoubleToBoolean( uno::Any& rAny )
{
+ if( rAny.has< double >() )
+ {
+ double fValue = rAny.get< double >();
+ if( fValue == 0.0 )
+ rAny <<= false;
+ else if( fValue == 1.0 )
+ rAny <<= true;
+ // do nothing for other values or types
+ }
}
+} // namespace
+
+ScVbaWSFunction::ScVbaWSFunction( const uno::Reference< XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext ) :
+ ScVbaWSFunction_BASE( xParent, xContext )
+{
+}
uno::Reference< beans::XIntrospectionAccess >
ScVbaWSFunction::getIntrospection(void) throw(uno::RuntimeException)
@@ -58,33 +76,101 @@ ScVbaWSFunction::getIntrospection(void) throw(uno::RuntimeException)
uno::Any SAL_CALL
ScVbaWSFunction::invoke(const rtl::OUString& FunctionName, const uno::Sequence< uno::Any >& Params, uno::Sequence< sal_Int16 >& /*OutParamIndex*/, uno::Sequence< uno::Any >& /*OutParam*/) throw(lang::IllegalArgumentException, script::CannotConvertException, reflection::InvocationTargetException, uno::RuntimeException)
{
- uno::Reference< lang::XMultiComponentFactory > xSMgr( mxContext->getServiceManager(), uno::UNO_QUERY_THROW );
- uno::Reference< sheet::XFunctionAccess > xFunctionAccess(
- xSMgr->createInstanceWithContext(::rtl::OUString::createFromAscii(
- "com.sun.star.sheet.FunctionAccess"), mxContext),
- ::uno::UNO_QUERY_THROW);
- uno::Sequence< uno::Any > aParamTemp;
- sal_Int32 nParamCount = Params.getLength();
- aParamTemp.realloc(nParamCount);
- const uno::Any* aArray = Params.getConstArray();
- uno::Any* aArrayTemp = aParamTemp.getArray();
-
- for (int i=0; i < Params.getLength();i++)
+ // create copy of parameters, replace Excel range objects with UNO range objects
+ uno::Sequence< uno::Any > aParamTemp( Params );
+ if( aParamTemp.hasElements() )
+ {
+ uno::Any* pArray = aParamTemp.getArray();
+ uno::Any* pArrayEnd = pArray + aParamTemp.getLength();
+ for( ; pArray < pArrayEnd; ++pArray )
+ {
+ uno::Reference< excel::XRange > myRange( *pArray, uno::UNO_QUERY );
+ if( myRange.is() )
+ *pArray = myRange->getCellRange();
+ OSL_TRACE("Param[%d] is %s", (int)(pArray - aParamTemp.getConstArray()), rtl::OUStringToOString( comphelper::anyToString( *pArray ), RTL_TEXTENCODING_UTF8 ).getStr() );
+ }
+ }
+
+ uno::Any aRet;
+ bool bAsArray = true;
+
+ // special handing for some functions that don't work correctly in FunctionAccess
+ ScCompiler aCompiler( 0, ScAddress() );
+ OpCode eOpCode = aCompiler.GetEnglishOpCode( FunctionName.toAsciiUpperCase() );
+ switch( eOpCode )
{
- uno::Reference<excel::XRange> myRange( aArray[ i ], uno::UNO_QUERY );
- if ( myRange.is() )
+ // ISLOGICAL does not work in array formula mode
+ case ocIsLogical:
{
- aArrayTemp[i] = myRange->getCellRange();
- continue;
+ if( aParamTemp.getLength() != 1 )
+ throw lang::IllegalArgumentException();
+ const uno::Any& rParam = aParamTemp[ 0 ];
+ if( rParam.has< bool >() )
+ {
+ aRet <<= true;
+ }
+ else if( rParam.has< uno::Reference< table::XCellRange > >() ) try
+ {
+ uno::Reference< sheet::XCellRangeAddressable > xRangeAddr( rParam, uno::UNO_QUERY_THROW );
+ table::CellRangeAddress aRangeAddr = xRangeAddr->getRangeAddress();
+ bAsArray = (aRangeAddr.StartColumn != aRangeAddr.EndColumn) || (aRangeAddr.StartRow != aRangeAddr.EndRow);
+ }
+ catch( uno::Exception& )
+ {
+ }
}
- aArrayTemp[i]= aArray[i];
+ break;
+ default:;
}
- for ( int count=0; count < aParamTemp.getLength(); ++count )
- OSL_TRACE("Param[%d] is %s",
- count, rtl::OUStringToOString( comphelper::anyToString( aParamTemp[count] ), RTL_TEXTENCODING_UTF8 ).getStr() );
+ if( !aRet.hasValue() )
+ {
+ uno::Reference< lang::XMultiComponentFactory > xSMgr( mxContext->getServiceManager(), uno::UNO_QUERY_THROW );
+ uno::Reference< sheet::XFunctionAccess > xFunctionAccess( xSMgr->createInstanceWithContext(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sheet.FunctionAccess" ) ), mxContext ),
+ uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xPropSet( xFunctionAccess, uno::UNO_QUERY_THROW );
+ xPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsArrayFunction" ) ), uno::Any( bAsArray ) );
+ aRet = xFunctionAccess->callFunction( FunctionName, aParamTemp );
+ }
- uno::Any aRet = xFunctionAccess->callFunction(FunctionName,aParamTemp);
+ /* Convert return value from double to to Boolean for some functions that
+ return Booleans. */
+ typedef uno::Sequence< uno::Sequence< uno::Any > > AnySeqSeq;
+ if( (eOpCode == ocIsEmpty) || (eOpCode == ocIsString) || (eOpCode == ocIsNonString) || (eOpCode == ocIsLogical) ||
+ (eOpCode == ocIsRef) || (eOpCode == ocIsValue) || (eOpCode == ocIsFormula) || (eOpCode == ocIsNA) ||
+ (eOpCode == ocIsErr) || (eOpCode == ocIsError) || (eOpCode == ocIsEven) || (eOpCode == ocIsOdd) ||
+ (eOpCode == ocAnd) || (eOpCode == ocOr) || (eOpCode == ocNot) || (eOpCode == ocTrue) || (eOpCode == ocFalse) )
+ {
+ if( aRet.has< AnySeqSeq >() )
+ {
+ AnySeqSeq aAnySeqSeq = aRet.get< AnySeqSeq >();
+ for( sal_Int32 nRow = 0; nRow < aAnySeqSeq.getLength(); ++nRow )
+ for( sal_Int32 nCol = 0; nCol < aAnySeqSeq[ nRow ].getLength(); ++nCol )
+ lclConvertDoubleToBoolean( aAnySeqSeq[ nRow ][ nCol ] );
+ aRet <<= aAnySeqSeq;
+ }
+ else
+ {
+ lclConvertDoubleToBoolean( aRet );
+ }
+ }
+
+ /* Hack/workaround (?): shorten single-row matrix to simple array, shorten
+ 1x1 matrix to single value. */
+ if( aRet.has< AnySeqSeq >() )
+ {
+ AnySeqSeq aAnySeqSeq = aRet.get< AnySeqSeq >();
+ if( aAnySeqSeq.getLength() == 1 )
+ {
+ if( aAnySeqSeq[ 0 ].getLength() == 1 )
+ aRet = aAnySeqSeq[ 0 ][ 0 ];
+ else
+ aRet <<= aAnySeqSeq[ 0 ];
+ }
+ }
+
+#if 0
// MATCH function should alwayse return a double value, but currently if the first argument is XCellRange, MATCH function returns an array instead of a double value. Don't know why?
// To fix this issue in safe, current solution is to convert this array to a double value just for MATCH function.
String aUpper( FunctionName );
@@ -101,6 +187,8 @@ ScVbaWSFunction::invoke(const rtl::OUString& FunctionName, const uno::Sequence<
throw uno::RuntimeException();
aRet <<= fVal;
}
+#endif
+
return aRet;
}
@@ -122,7 +210,7 @@ ScVbaWSFunction::hasMethod(const rtl::OUString& Name) throw(uno::RuntimeExcepti
sal_Bool bIsFound = sal_False;
try
{
- // the function name contained in the com.sun.star.sheet.FunctionDescription service is alwayse localized.
+ // the function name contained in the com.sun.star.sheet.FunctionDescription service is alwayse localized.
// but the function name used in WorksheetFunction is a programmatic name (seems English).
// So m_xNameAccess->hasByName( Name ) may fail to find name when a function name has a localized name.
ScCompiler aCompiler( NULL, ScAddress() );
diff --git a/sc/source/ui/vba/vbawsfunction.hxx b/sc/source/ui/vba/vbawsfunction.hxx
index 58a895f6d47b..ffd33849afe5 100644
--- a/sc/source/ui/vba/vbawsfunction.hxx
+++ b/sc/source/ui/vba/vbawsfunction.hxx
@@ -52,7 +52,6 @@ public:
// XHelperInterface
virtual rtl::OUString& getServiceImplName();
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
-
};
#endif
diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx
index a461c54f255e..c880a29f8067 100644
--- a/sc/source/ui/view/cellsh.cxx
+++ b/sc/source/ui/view/cellsh.cxx
@@ -715,22 +715,22 @@ void ScCellShell::GetState(SfxItemSet &rSet)
break;
case FID_INS_ROWBRK:
- if ( nPosY==0 || (pDoc->GetRowFlags(nPosY,nTab) & CR_MANUALBREAK) )
+ if ( nPosY==0 || (pDoc->HasRowBreak(nPosY, nTab) & BREAK_MANUAL) )
rSet.DisableItem( nWhich );
break;
case FID_INS_COLBRK:
- if ( nPosX==0 || (pDoc->GetColFlags(nPosX,nTab) & CR_MANUALBREAK) )
+ if ( nPosX==0 || (pDoc->HasColBreak(nPosX, nTab) & BREAK_MANUAL) )
rSet.DisableItem( nWhich );
break;
case FID_DEL_ROWBRK:
- if ( nPosY==0 || (pDoc->GetRowFlags(nPosY,nTab) & CR_MANUALBREAK)==0 )
+ if ( nPosY==0 || (pDoc->HasRowBreak(nPosY, nTab) & BREAK_MANUAL) == 0 )
rSet.DisableItem( nWhich );
break;
case FID_DEL_COLBRK:
- if ( nPosX==0 || (pDoc->GetColFlags(nPosX,nTab) & CR_MANUALBREAK)==0 )
+ if ( nPosX==0 || (pDoc->HasColBreak(nPosX, nTab) & BREAK_MANUAL) == 0 )
rSet.DisableItem( nWhich );
break;
diff --git a/sc/source/ui/view/colrowba.cxx b/sc/source/ui/view/colrowba.cxx
index 8916624fdb52..d802c08f642f 100644
--- a/sc/source/ui/view/colrowba.cxx
+++ b/sc/source/ui/view/colrowba.cxx
@@ -98,7 +98,8 @@ USHORT ScColBar::GetEntrySize( SCCOLROW nEntryNo )
{
ScDocument* pDoc = pViewData->GetDocument();
SCTAB nTab = pViewData->GetTabNo();
- if ( pDoc->GetColFlags( static_cast<SCCOL>(nEntryNo), nTab ) & CR_HIDDEN )
+ SCCOL nLastCol = -1;
+ if (pDoc->ColHidden(static_cast<SCCOL>(nEntryNo), nTab, nLastCol))
return 0;
else
return (USHORT) ScViewData::ToPixel( pDoc->GetColWidth( static_cast<SCCOL>(nEntryNo), nTab ), pViewData->GetPPTX() );
@@ -265,7 +266,8 @@ USHORT ScRowBar::GetEntrySize( SCCOLROW nEntryNo )
{
ScDocument* pDoc = pViewData->GetDocument();
SCTAB nTab = pViewData->GetTabNo();
- if ( pDoc->GetRowFlags( nEntryNo, nTab ) & CR_HIDDEN )
+ SCROW nLastRow = -1;
+ if (pDoc->RowHidden(nEntryNo, nTab, nLastRow))
return 0;
else
return (USHORT) ScViewData::ToPixel( pDoc->GetOriginalHeight( nEntryNo,
diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx
index 35befa8f7a36..dbdeae1ae0b1 100755
--- a/sc/source/ui/view/dbfunc3.cxx
+++ b/sc/source/ui/view/dbfunc3.cxx
@@ -694,6 +694,9 @@ ULONG RefreshDPObject( ScDPObject *pDPObj, ScDocument *pDoc, ScDocShell *pDocSh,
if( !pDPObj )
return STR_PIVOT_NOTFOUND;
+ if ( pDocSh && !pDoc )
+ pDoc = pDocSh->GetDocument();
+
if( !pDoc )
return static_cast<ULONG>(-1);
diff --git a/sc/source/ui/view/drawutil.cxx b/sc/source/ui/view/drawutil.cxx
index 3885b0adc752..ba250767c169 100644
--- a/sc/source/ui/view/drawutil.cxx
+++ b/sc/source/ui/view/drawutil.cxx
@@ -66,14 +66,19 @@ void ScDrawUtil::CalcScale( ScDocument* pDoc, SCTAB nTab,
nTwipsX += (long) nWidth;
nPixelX += ScViewData::ToPixel( nWidth, nPPTX );
}
- ScCoupledCompressedArrayIterator< SCROW, BYTE, USHORT> aIter(
- pDoc->GetRowFlagsArray( nTab), nStartRow, nEndRow-1, CR_HIDDEN, 0,
- pDoc->GetRowHeightArray( nTab));
- for ( ; aIter; ++aIter )
+
+ for (SCROW nRow = nStartRow; nRow <= nEndRow-1; ++nRow)
{
- USHORT nHeight = *aIter;
- nTwipsY += (long) nHeight;
- nPixelY += ScViewData::ToPixel( nHeight, nPPTY );
+ SCROW nLastRow = nRow;
+ if (pDoc->RowHidden(nRow, nTab, NULL, &nLastRow))
+ {
+ nRow = nLastRow;
+ continue;
+ }
+
+ USHORT nHeight = pDoc->GetRowHeight(nRow, nTab);
+ nTwipsY += static_cast<long>(nHeight);
+ nPixelY += ScViewData::ToPixel(nHeight, nPPTY);
}
MapMode aHMMMode( MAP_100TH_MM, Point(), rZoomX, rZoomY );
@@ -100,10 +105,10 @@ void ScDrawUtil::CalcScale( ScDocument* pDoc, SCTAB nTab,
else
rScaleY = Fraction( 1, 1 );
- // 17 bits of accuracy are needed to always hit the right part of
- // cells in the last rows
- rScaleX.ReduceInaccurate( 17 );
- rScaleY.ReduceInaccurate( 17 );
+ // 25 bits of accuracy are needed to always hit the right part of
+ // cells in the last rows (was 17 before 1M rows).
+ rScaleX.ReduceInaccurate( 25 );
+ rScaleY.ReduceInaccurate( 25 );
}
diff --git a/sc/source/ui/view/drawvie4.cxx b/sc/source/ui/view/drawvie4.cxx
index 8b9debdabfae..3a28096d2853 100644
--- a/sc/source/ui/view/drawvie4.cxx
+++ b/sc/source/ui/view/drawvie4.cxx
@@ -282,8 +282,8 @@ void ScDrawView::CalcNormScale( Fraction& rFractX, Fraction& rFractY ) const
pDoc->GetTableArea( nTab, nEndCol, nEndRow );
if (nEndCol<20)
nEndCol = 20;
- if (nEndRow<20)
- nEndRow = 20;
+ if (nEndRow<1000)
+ nEndRow = 1000;
Fraction aZoom(1,1);
ScDrawUtil::CalcScale( pDoc, nTab, 0,0, nEndCol,nEndRow, pDev, aZoom,aZoom,
diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx
index cc09722530ad..1d2b797b3a9b 100644
--- a/sc/source/ui/view/drawview.cxx
+++ b/sc/source/ui/view/drawview.cxx
@@ -187,7 +187,7 @@ void ScDrawView::AddCustomHdl()
if(nCol > 0)
--nCol;
- SCROW nRow = nPosY <= 0 ? 0 : pDoc->FastGetRowForHeight( nTab,
+ SCROW nRow = nPosY <= 0 ? 0 : pDoc->GetRowForHeight( nTab,
(ULONG) nPosY);
if(nRow > 0)
--nRow;
@@ -376,8 +376,8 @@ void ScDrawView::RecalcScale()
pDoc->GetTableArea( nTab, nEndCol, nEndRow );
if (nEndCol<20)
nEndCol = 20;
- if (nEndRow<20)
- nEndRow = 20;
+ if (nEndRow<1000)
+ nEndRow = 1000;
ScDrawUtil::CalcScale( pDoc, nTab, 0,0, nEndCol,nEndRow, pDev,aZoomX,aZoomY,nPPTX,nPPTY,
aScaleX,aScaleY );
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 87740a88e4df..db72d87f30a2 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -153,7 +153,19 @@ extern USHORT nScFillModeMouseModifier; // global.cxx
#define SC_FILTERLISTBOX_LINES 12
-//==================================================================
+// ============================================================================
+
+ScGridWindow::VisibleRange::VisibleRange() :
+ mnCol1(0), mnCol2(MAXCOL), mnRow1(0), mnRow2(MAXROW)
+{
+}
+
+bool ScGridWindow::VisibleRange::isInside(SCCOL nCol, SCROW nRow) const
+{
+ return mnCol1 <= nCol && nCol <= mnCol2 && mnRow1 <= nRow && nRow <= mnRow2;
+}
+
+// ============================================================================
class ScFilterListBox : public ListBox
{
@@ -366,6 +378,7 @@ ScGridWindow::ScGridWindow( Window* pParent, ScViewData* pData, ScSplitPos eWhic
mpOODragRect( NULL ),
mpOOHeader( NULL ),
mpOOShrink( NULL ),
+ mpAutoFillRect(static_cast<Rectangle*>(NULL)),
pViewData( pData ),
eWhich( eWhichPos ),
pNoteMarker( NULL ),
@@ -1323,37 +1336,23 @@ BOOL ScGridWindow::TestMouse( const MouseEvent& rMEvt, BOOL bAction )
ScDocument* pDoc = pViewData->GetDocument();
SCTAB nTab = pViewData->GetTabNo();
BOOL bLayoutRTL = pDoc->IsLayoutRTL( nTab );
- long nLayoutSign = bLayoutRTL ? -1 : 1;
// Auto-Fill
ScRange aMarkRange;
if (pViewData->GetSimpleArea( aMarkRange ) == SC_MARK_SIMPLE)
{
- if ( aMarkRange.aStart.Tab() == pViewData->GetTabNo() )
+ if (aMarkRange.aStart.Tab() == pViewData->GetTabNo() && mpAutoFillRect)
{
- // Block-Ende wie in DrawAutoFillMark
- SCCOL nX = aMarkRange.aEnd.Col();
- SCROW nY = aMarkRange.aEnd.Row();
-
- Point aFillPos = pViewData->GetScrPos( nX, nY, eWhich, TRUE );
- long nSizeXPix;
- long nSizeYPix;
- pViewData->GetMergeSizePixel( nX, nY, nSizeXPix, nSizeYPix );
- aFillPos.X() += nSizeXPix * nLayoutSign;
- aFillPos.Y() += nSizeYPix;
- if ( bLayoutRTL )
- aFillPos.X() -= 1;
-
Point aMousePos = rMEvt.GetPosPixel();
- // Abfrage hier passend zu DrawAutoFillMark
- // (ein Pixel mehr als markiert)
- if ( aMousePos.X() >= aFillPos.X()-3 && aMousePos.X() <= aFillPos.X()+4 &&
- aMousePos.Y() >= aFillPos.Y()-3 && aMousePos.Y() <= aFillPos.Y()+4 )
+ if (mpAutoFillRect->IsInside(aMousePos))
{
SetPointer( Pointer( POINTER_CROSS ) ); //! dickeres Kreuz ?
if (bAction)
{
+ SCCOL nX = aMarkRange.aEnd.Col();
+ SCROW nY = aMarkRange.aEnd.Row();
+
if ( lcl_IsEditableMatrix( pViewData->GetDocument(), aMarkRange ) )
pViewData->SetDragMode(
aMarkRange.aStart.Col(), aMarkRange.aStart.Row(), nX, nY, SC_FILL_MATRIX );
@@ -2405,6 +2404,7 @@ void lcl_InitMouseEvent( ::com::sun::star::awt::MouseEvent& rEvent, const MouseE
long ScGridWindow::PreNotify( NotifyEvent& rNEvt )
{
+ bool bDone = false;
USHORT nType = rNEvt.GetType();
if ( nType == EVENT_MOUSEBUTTONUP || nType == EVENT_MOUSEBUTTONDOWN )
{
@@ -2425,16 +2425,31 @@ long ScGridWindow::PreNotify( NotifyEvent& rNEvt )
if ( rNEvt.GetWindow() )
aEvent.Source = rNEvt.GetWindow()->GetComponentInterface();
if ( nType == EVENT_MOUSEBUTTONDOWN)
- pImp->MousePressed( aEvent );
+ bDone = pImp->MousePressed( aEvent );
else
- pImp->MouseReleased( aEvent );
+ bDone = pImp->MouseReleased( aEvent );
}
}
}
}
}
+ if (bDone) // event consumed by a listener
+ {
+ if ( nType == EVENT_MOUSEBUTTONDOWN )
+ {
+ const MouseEvent* pMouseEvent = rNEvt.GetMouseEvent();
+ if ( pMouseEvent->IsRight() && pMouseEvent->GetClicks() == 1 )
+ {
+ // If a listener returned true for a right-click call, also prevent opening the context menu
+ // (this works only if the context menu is opened on mouse-down)
+ nMouseStatus = SC_GM_IGNORE;
+ }
+ }
- return Window::PreNotify( rNEvt );
+ return 1;
+ }
+ else
+ return Window::PreNotify( rNEvt );
}
void ScGridWindow::Tracking( const TrackingEvent& rTEvt )
@@ -2678,6 +2693,10 @@ void __EXPORT ScGridWindow::Command( const CommandEvent& rCEvt )
if ( nCmd == COMMAND_CONTEXTMENU && !SC_MOD()->GetIsWaterCan() )
{
+ BOOL bMouse = rCEvt.IsMouseEvent();
+ if ( bMouse && nMouseStatus == SC_GM_IGNORE )
+ return;
+
if (pViewData->IsAnyFillMode())
{
pViewData->GetView()->StopRefMode();
@@ -2688,7 +2707,6 @@ void __EXPORT ScGridWindow::Command( const CommandEvent& rCEvt )
Point aPosPixel = rCEvt.GetMousePosPixel();
Point aMenuPos = aPosPixel;
- BOOL bMouse = rCEvt.IsMouseEvent();
if ( bMouse )
{
@@ -2934,7 +2952,7 @@ void ScGridWindow::SelectForContextMenu( const Point& rPosPixel, SCsCOL nCellX,
// clicked on selected object -> don't change anything
bHitSelected = TRUE;
}
- else if ( pViewData->GetMarkData().IsCellMarked( (USHORT) nCellX, (USHORT) nCellY ) )
+ else if ( pViewData->GetMarkData().IsCellMarked(nCellX, nCellY) )
{
// clicked on selected cell -> don't change anything
bHitSelected = TRUE;
@@ -2958,7 +2976,7 @@ void ScGridWindow::SelectForContextMenu( const Point& rPosPixel, SCsCOL nCellX,
if ( !bHitDraw )
{
pView->Unmark();
- pView->SetCursor( (USHORT) nCellX, (USHORT) nCellY );
+ pView->SetCursor(nCellX, nCellY);
if ( bWasDraw )
pViewData->GetViewShell()->SetDrawShell( FALSE ); // switch shells
}
@@ -4533,18 +4551,17 @@ void lcl_PaintOneRange( ScDocShell* pDocSh, const ScRange& rRange, USHORT nEdges
SCROW nTmp;
ScDocument* pDoc = pDocSh->GetDocument();
- while ( nCol1 > 0 && ( pDoc->GetColFlags( nCol1, nTab1 ) & CR_HIDDEN ) )
+ while ( nCol1 > 0 && pDoc->ColHidden(nCol1, nTab1) )
{
--nCol1;
bHiddenEdge = TRUE;
}
- while ( nCol2 < MAXCOL && ( pDoc->GetColFlags( nCol2, nTab1 ) & CR_HIDDEN ) )
+ while ( nCol2 < MAXCOL && pDoc->ColHidden(nCol2, nTab1) )
{
++nCol2;
bHiddenEdge = TRUE;
}
- nTmp = pDoc->GetRowFlagsArray( nTab1).GetLastForCondition( 0, nRow1,
- CR_HIDDEN, 0);
+ nTmp = pDoc->FirstVisibleRow(0, nRow1, nTab1);
if (!ValidRow(nTmp))
nTmp = 0;
if (nTmp < nRow1)
@@ -4552,8 +4569,7 @@ void lcl_PaintOneRange( ScDocShell* pDocSh, const ScRange& rRange, USHORT nEdges
nRow1 = nTmp;
bHiddenEdge = TRUE;
}
- nTmp = pDoc->GetRowFlagsArray( nTab1).GetFirstForCondition( nRow2, MAXROW,
- CR_HIDDEN, 0);
+ nTmp = pDoc->FirstVisibleRow(nRow2, MAXROW, nTab1);
if (!ValidRow(nTmp))
nTmp = MAXROW;
if (nTmp > nRow2)
@@ -5123,6 +5139,9 @@ void ScGridWindow::UpdateCursorOverlay()
SCCOL nX = pViewData->GetCurX();
SCROW nY = pViewData->GetCurY();
+ if (!maVisibleRange.isInside(nX, nY))
+ return;
+
// don't show the cursor in overlapped cells
ScDocument* pDoc = pViewData->GetDocument();
@@ -5298,6 +5317,7 @@ void ScGridWindow::UpdateSelectionOverlay()
void ScGridWindow::DeleteAutoFillOverlay()
{
DELETEZ( mpOOAutoFill );
+ mpAutoFillRect.reset();
}
void ScGridWindow::UpdateAutoFillOverlay()
@@ -5318,6 +5338,11 @@ void ScGridWindow::UpdateAutoFillOverlay()
{
SCCOL nX = aAutoMarkPos.Col();
SCROW nY = aAutoMarkPos.Row();
+
+ if (!maVisibleRange.isInside(nX, nY))
+ // Autofill mark is not visible. Bail out.
+ return;
+
SCTAB nTab = pViewData->GetTabNo();
ScDocument* pDoc = pViewData->GetDocument();
BOOL bLayoutRTL = pDoc->IsLayoutRTL( nTab );
@@ -5333,7 +5358,7 @@ void ScGridWindow::UpdateAutoFillOverlay()
aFillPos.Y() += nSizeYPix;
aFillPos.Y() -= 2;
- Rectangle aFillRect( aFillPos, Size(6,6) );
+ mpAutoFillRect.reset(new Rectangle(aFillPos, Size(6, 6)));
// #i70788# get the OverlayManager safely
::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager();
@@ -5343,7 +5368,7 @@ void ScGridWindow::UpdateAutoFillOverlay()
const Color aHandleColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor );
std::vector< basegfx::B2DRange > aRanges;
const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation());
- basegfx::B2DRange aRB(aFillRect.Left(), aFillRect.Top(), aFillRect.Right() + 1, aFillRect.Bottom() + 1);
+ basegfx::B2DRange aRB(mpAutoFillRect->Left(), mpAutoFillRect->Top(), mpAutoFillRect->Right() + 1, mpAutoFillRect->Bottom() + 1);
aRB.transform(aTransform);
aRanges.push_back(aRB);
@@ -5358,10 +5383,10 @@ void ScGridWindow::UpdateAutoFillOverlay()
mpOOAutoFill = new ::sdr::overlay::OverlayObjectList;
mpOOAutoFill->append(*pOverlay);
}
- }
- if ( aOldMode != aDrawMode )
- SetMapMode( aOldMode );
+ if ( aOldMode != aDrawMode )
+ SetMapMode( aOldMode );
+ }
}
void ScGridWindow::DeleteDragRectOverlay()
diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx
index 6d9bb94eb76b..f8b5c25c4a70 100644
--- a/sc/source/ui/view/gridwin2.cxx
+++ b/sc/source/ui/view/gridwin2.cxx
@@ -933,7 +933,7 @@ void ScGridWindow::PagebreakMove( const MouseEvent& rMEvt, BOOL bUp )
BOOL bGrow = !bHide && nNew > nPagebreakBreak;
if ( bColumn )
{
- if ( pDoc->GetColFlags( static_cast<SCCOL>(nPagebreakBreak), nTab ) & CR_MANUALBREAK )
+ if (pDoc->HasColBreak(static_cast<SCCOL>(nPagebreakBreak), nTab) & BREAK_MANUAL)
{
ScAddress aOldAddr( static_cast<SCCOL>(nPagebreakBreak), nPosY, nTab );
pViewFunc->DeletePageBreak( TRUE, TRUE, &aOldAddr, FALSE );
@@ -946,8 +946,8 @@ void ScGridWindow::PagebreakMove( const MouseEvent& rMEvt, BOOL bUp )
if ( bGrow )
{
// vorigen Break auf hart, und Skalierung aendern
- if ( static_cast<SCCOL>(nPagebreakPrev) > aPagebreakSource.aStart.Col() &&
- !(pDoc->GetColFlags( static_cast<SCCOL>(nPagebreakPrev), nTab ) & CR_MANUALBREAK) )
+ bool bManualBreak = (pDoc->HasColBreak(static_cast<SCCOL>(nPagebreakPrev), nTab) & BREAK_MANUAL);
+ if ( static_cast<SCCOL>(nPagebreakPrev) > aPagebreakSource.aStart.Col() && !bManualBreak )
{
ScAddress aPrev( static_cast<SCCOL>(nPagebreakPrev), nPosY, nTab );
pViewFunc->InsertPageBreak( TRUE, TRUE, &aPrev, FALSE );
@@ -960,7 +960,7 @@ void ScGridWindow::PagebreakMove( const MouseEvent& rMEvt, BOOL bUp )
}
else
{
- if ( pDoc->GetRowFlags( nPagebreakBreak, nTab ) & CR_MANUALBREAK )
+ if (pDoc->HasRowBreak(nPagebreakBreak, nTab) & BREAK_MANUAL)
{
ScAddress aOldAddr( nPosX, nPagebreakBreak, nTab );
pViewFunc->DeletePageBreak( FALSE, TRUE, &aOldAddr, FALSE );
@@ -973,8 +973,8 @@ void ScGridWindow::PagebreakMove( const MouseEvent& rMEvt, BOOL bUp )
if ( bGrow )
{
// vorigen Break auf hart, und Skalierung aendern
- if ( nPagebreakPrev > aPagebreakSource.aStart.Row() &&
- !(pDoc->GetRowFlags( nPagebreakPrev, nTab ) & CR_MANUALBREAK) )
+ bool bManualBreak = (pDoc->HasRowBreak(nPagebreakPrev, nTab) & BREAK_MANUAL);
+ if ( nPagebreakPrev > aPagebreakSource.aStart.Row() && !bManualBreak )
{
ScAddress aPrev( nPosX, nPagebreakPrev, nTab );
pViewFunc->InsertPageBreak( FALSE, TRUE, &aPrev, FALSE );
diff --git a/sc/source/ui/view/gridwin3.cxx b/sc/source/ui/view/gridwin3.cxx
index 5bfc0483b553..f16c2fe1ada7 100644
--- a/sc/source/ui/view/gridwin3.cxx
+++ b/sc/source/ui/view/gridwin3.cxx
@@ -265,7 +265,7 @@ MapMode ScGridWindow::GetDrawMapMode( BOOL bForce )
SCROW nEndRow = 0;
pDoc->GetTableArea( nTab, nEndCol, nEndRow );
if (nEndCol<20) nEndCol = 20;
- if (nEndRow<20) nEndRow = 20;
+ if (nEndRow<1000) nEndRow = 1000;
ScDrawUtil::CalcScale( pDoc, nTab, 0,0, nEndCol,nEndRow, this,
pViewData->GetZoomX(),pViewData->GetZoomY(),
pViewData->GetPPTX(),pViewData->GetPPTY(),
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index f698913ea758..d8024e439173 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -449,6 +449,12 @@ void ScGridWindow::Draw( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2, ScUpdateMod
SCROW nYBottom = nPosY + pViewData->VisibleCellsY(eVWhich);
if (nYBottom > MAXROW) nYBottom = MAXROW;
+ // Store the current visible range.
+ maVisibleRange.mnCol1 = nPosX;
+ maVisibleRange.mnCol2 = nXRight;
+ maVisibleRange.mnRow1 = nPosY;
+ maVisibleRange.mnRow2 = nYBottom;
+
if (nX1 > nXRight || nY1 > nYBottom)
return; // unsichtbar
if (nX2 > nXRight) nX2 = nXRight;
@@ -1086,7 +1092,7 @@ void ScGridWindow::DrawPagePreview( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
if ( nBreak >= nX1 && nBreak <= nX2+1 )
{
//! hidden suchen
- if ( pDoc->GetColFlags( nBreak, nTab ) & CR_MANUALBREAK )
+ if (pDoc->HasColBreak(nBreak, nTab) & BREAK_MANUAL)
pContentDev->SetFillColor( aManual );
else
pContentDev->SetFillColor( aAutomatic );
@@ -1105,7 +1111,7 @@ void ScGridWindow::DrawPagePreview( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
if ( nBreak >= nY1 && nBreak <= nY2+1 )
{
//! hidden suchen
- if ( pDoc->GetRowFlags( nBreak, nTab ) & CR_MANUALBREAK )
+ if (pDoc->HasRowBreak(nBreak, nTab) & BREAK_MANUAL)
pContentDev->SetFillColor( aManual );
else
pContentDev->SetFillColor( aAutomatic );
@@ -1374,7 +1380,7 @@ Rectangle ScGridWindow::GetListValButtonRect( const ScAddress& rButtonPos )
const ScMergeAttr* pMerge = static_cast<const ScMergeAttr*>(pDoc->GetAttr( nCol,nRow,nTab, ATTR_MERGE ));
if ( pMerge->GetColMerge() > 1 )
nNextCol = nCol + pMerge->GetColMerge(); // next cell after the merged area
- while ( nNextCol <= MAXCOL && (pDoc->GetColFlags( nNextCol, nTab ) & CR_HIDDEN) )
+ while ( nNextCol <= MAXCOL && pDoc->ColHidden(nNextCol, nTab) )
++nNextCol;
BOOL bNextCell = ( nNextCol <= MAXCOL );
if ( bNextCell )
@@ -1577,7 +1583,7 @@ void ScGridWindow::InvertSimple( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
if ( pMergeFlag->IsVerOverlapped() && ( bDoHidden || bFirstRow ) )
{
while ( pMergeFlag->IsVerOverlapped() && nThisY > 0 &&
- ( (pDoc->GetRowFlags( nThisY-1, nTab ) & CR_HIDDEN) || bFirstRow ) )
+ (pDoc->RowHidden(nThisY-1, nTab) || bFirstRow) )
{
--nThisY;
pPattern = pDoc->GetPattern( nX, nThisY, nTab );
@@ -1764,7 +1770,7 @@ void ScGridWindow::GetSelectionRects( ::std::vector< Rectangle >& rPixelRects )
if ( pMergeFlag->IsVerOverlapped() && ( bDoHidden || bFirstRow ) )
{
while ( pMergeFlag->IsVerOverlapped() && nThisY > 0 &&
- ( (pDoc->GetRowFlags( nThisY-1, nTab ) & CR_HIDDEN) || bFirstRow ) )
+ (pDoc->RowHidden(nThisY-1, nTab) || bFirstRow) )
{
--nThisY;
pPattern = pDoc->GetPattern( nX, nThisY, nTab );
diff --git a/sc/source/ui/view/hdrcont.cxx b/sc/source/ui/view/hdrcont.cxx
index 6c389d496b73..25f3c1c8f10a 100644
--- a/sc/source/ui/view/hdrcont.cxx
+++ b/sc/source/ui/view/hdrcont.cxx
@@ -102,7 +102,7 @@ ScHeaderControl::ScHeaderControl( Window* pParent, SelectionEngine* pSelectionEn
nWidth = nSmallWidth = aSize.Width();
nBigWidth = LogicToPixel( Size( GetTextWidth(
- String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("88888")) ), 0 ) ).Width() + 4;
+ String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM("8888888")) ), 0 ) ).Width() + 5;
SetBackground(); // sonst Probleme auf OS/2 !?!?!
}
diff --git a/sc/source/ui/view/makefile.mk b/sc/source/ui/view/makefile.mk
index feeacc865fba..1b2fef913fc2 100644
--- a/sc/source/ui/view/makefile.mk
+++ b/sc/source/ui/view/makefile.mk
@@ -155,6 +155,7 @@ EXCEPTIONSFILES= \
$(SLO)$/gridwin2.obj \
$(SLO)$/scextopt.obj \
$(SLO)$/tabvwshb.obj \
+ $(SLO)$/tabvwshf.obj \
$(SLO)$/viewdata.obj \
$(SLO)$/viewfunc.obj \
$(SLO)$/viewfun2.obj \
diff --git a/sc/source/ui/view/olinewin.cxx b/sc/source/ui/view/olinewin.cxx
index bec88920f989..b1e82fd9217f 100644
--- a/sc/source/ui/view/olinewin.cxx
+++ b/sc/source/ui/view/olinewin.cxx
@@ -183,16 +183,15 @@ const ScOutlineEntry* ScOutlineWindow::GetOutlineEntry( size_t nLevel, size_t nE
bool ScOutlineWindow::IsHidden( SCCOLROW nColRowIndex ) const
{
- sal_uInt8 nFlags = mbHoriz ?
- GetDoc().GetColFlags( static_cast<SCCOL>(nColRowIndex), GetTab() ) :
- GetDoc().GetRowFlags( static_cast<SCROW>(nColRowIndex), GetTab() );
- return (nFlags & CR_HIDDEN) != 0;
+ return mbHoriz ?
+ GetDoc().ColHidden(static_cast<SCCOL>(nColRowIndex), GetTab()) :
+ GetDoc().RowHidden(static_cast<SCROW>(nColRowIndex), GetTab());
}
bool ScOutlineWindow::IsFiltered( SCCOLROW nColRowIndex ) const
{
// columns cannot be filtered
- return !mbHoriz && GetDoc().IsFiltered( static_cast<SCROW>(nColRowIndex), GetTab() );
+ return !mbHoriz && GetDoc().RowFiltered( static_cast<SCROW>(nColRowIndex), GetTab() );
}
bool ScOutlineWindow::IsFirstVisible( SCCOLROW nColRowIndex ) const
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index 265e54fe0e12..961572fc0185 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -322,8 +322,9 @@ void ScOutputData::DrawGrid( BOOL bGrid, BOOL bPage )
long nPosX;
long nPosY;
SCSIZE nArrY;
- BYTE nOldFlags = 0;
- BYTE nFlags;
+ ScBreakType nBreak = BREAK_NONE;
+ ScBreakType nBreakOld = BREAK_NONE;
+
BOOL bSingle;
Color aPageColor;
Color aManualColor;
@@ -378,27 +379,27 @@ void ScOutputData::DrawGrid( BOOL bGrid, BOOL bPage )
if ( bPage )
{
// Seitenumbrueche auch in ausgeblendeten suchen
- nFlags = 0;
SCCOL nCol = nXplus1;
while (nCol <= MAXCOL)
{
- BYTE nDocFl = pDoc->GetColFlags( nCol, nTab );
- nFlags = nDocFl & ( CR_PAGEBREAK | CR_MANUALBREAK );
- if ( nFlags || !(nDocFl & CR_HIDDEN) )
+ nBreak = pDoc->HasColBreak(nCol, nTab);
+ bool bHidden = pDoc->ColHidden(nCol, nTab);
+
+ if ( nBreak || !bHidden )
break;
++nCol;
}
- if (nFlags != nOldFlags)
+ if (nBreak != nBreakOld)
{
aGrid.Flush();
- pDev->SetLineColor( (nFlags & CR_MANUALBREAK) ? aManualColor :
- (nFlags) ? aPageColor : aGridColor );
- nOldFlags = nFlags;
+ pDev->SetLineColor( (nBreak & BREAK_MANUAL) ? aManualColor :
+ nBreak ? aPageColor : aGridColor );
+ nBreakOld = nBreak;
}
}
- BOOL bDraw = bGrid || nOldFlags; // einfaches Gitter nur wenn eingestellt
+ BOOL bDraw = bGrid || nBreakOld; // einfaches Gitter nur wenn eingestellt
//! Mit dieser Abfrage wird zuviel weggelassen, wenn ein automatischer
//! Umbruch mitten in den Wiederholungsspalten liegt.
@@ -409,7 +410,7 @@ void ScOutputData::DrawGrid( BOOL bGrid, BOOL bPage )
{
if ( nX == MAXCOL )
bDraw = FALSE;
- else if (pDoc->GetColFlags(nXplus1,nTab) & ( CR_PAGEBREAK | CR_MANUALBREAK ))
+ else if (pDoc->HasColBreak(nXplus1, nTab))
bDraw = FALSE;
}
#endif
@@ -500,28 +501,24 @@ void ScOutputData::DrawGrid( BOOL bGrid, BOOL bPage )
{
if ( bPage )
{
- // Seitenumbrueche auch in ausgeblendeten suchen
- nFlags = 0;
- ScCompressedArrayIterator< SCROW, BYTE > aIter(
- pDoc->GetRowFlagsArray( nTab), nYplus1, MAXROW);
- do
+ for (SCROW i = nYplus1; i <= MAXROW; ++i)
{
- BYTE nDocFl = *aIter;
- nFlags = nDocFl & ( CR_PAGEBREAK | CR_MANUALBREAK );
- if ( nFlags || !(nDocFl & CR_HIDDEN) )
+ nBreak = pDoc->HasRowBreak(i, nTab);
+ bool bHidden = pDoc->RowHidden(i, nTab);
+ if (nBreak || !bHidden)
break;
- } while (aIter.NextRange());
+ }
- if (nFlags != nOldFlags)
+ if (nBreakOld != nBreak)
{
aGrid.Flush();
- pDev->SetLineColor( (nFlags & CR_MANUALBREAK) ? aManualColor :
- (nFlags) ? aPageColor : aGridColor );
- nOldFlags = nFlags;
+ pDev->SetLineColor( (nBreak & BREAK_MANUAL) ? aManualColor :
+ (nBreak) ? aPageColor : aGridColor );
+ nBreakOld = nBreak;
}
}
- BOOL bDraw = bGrid || nOldFlags; // einfaches Gitter nur wenn eingestellt
+ BOOL bDraw = bGrid || nBreakOld; // einfaches Gitter nur wenn eingestellt
//! Mit dieser Abfrage wird zuviel weggelassen, wenn ein automatischer
//! Umbruch mitten in den Wiederholungszeilen liegt.
@@ -532,7 +529,7 @@ void ScOutputData::DrawGrid( BOOL bGrid, BOOL bPage )
{
if ( nY == MAXROW )
bDraw = FALSE;
- else if (pDoc->GetRowFlags(nYplus1,nTab) & ( CR_PAGEBREAK | CR_MANUALBREAK ))
+ else if (pDoc->HasRowBreak(nYplus1, nTab))
bDraw = FALSE;
}
#endif
@@ -654,7 +651,7 @@ void ScOutputData::FindRotated()
const ScPatternAttr* pPattern = pInfo->pPatternAttr;
const SfxItemSet* pCondSet = pInfo->pConditionSet;
- if ( !pPattern && (pDoc->GetColFlags(nX,nTab) & CR_HIDDEN) == 0 )
+ if ( !pPattern && !pDoc->ColHidden(nX, nTab) )
{
pPattern = pDoc->GetPattern( nX, nY, nTab );
pCondSet = pDoc->GetCondResult( nX, nY, nTab );
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index 37bc941c0f16..b0b040f9b5e0 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -114,6 +114,7 @@ class ScDrawStringsVars
long nMaxDigitWidth;
long nSignWidth;
long nDotWidth;
+ long nExpWidth;
ScBaseCell* pLastCell;
ULONG nValueFormat;
@@ -173,6 +174,7 @@ private:
long GetMaxDigitWidth();
long GetSignWidth();
long GetDotWidth();
+ long GetExpWidth();
void TextChanged();
long ConvertWidthLogicToPixel( long nWidth ) const;
};
@@ -193,6 +195,7 @@ ScDrawStringsVars::ScDrawStringsVars(ScOutputData* pData, BOOL bPTL) :
nMaxDigitWidth( 0 ),
nSignWidth( 0 ),
nDotWidth( 0 ),
+ nExpWidth( 0 ),
pLastCell ( NULL ),
nValueFormat( 0 ),
bLineBreak ( FALSE ),
@@ -262,6 +265,7 @@ void ScDrawStringsVars::SetPattern( const ScPatternAttr* pNew, const SfxItemSet*
nMaxDigitWidth = 0;
nSignWidth = 0;
nDotWidth = 0;
+ nExpWidth = 0;
pPattern = pNew;
pCondSet = pSet;
@@ -417,6 +421,7 @@ void ScDrawStringsVars::SetPatternSimple( const ScPatternAttr* pNew, const SfxIt
nMaxDigitWidth = 0;
nSignWidth = 0;
nDotWidth = 0;
+ nExpWidth = 0;
// wird gerufen, wenn sich die Font-Variablen nicht aendern (!StringDiffer)
pPattern = pNew;
@@ -547,7 +552,7 @@ void ScDrawStringsVars::SetTextToWidthOrHash( ScBaseCell* pCell, long nWidth )
// Failed to get output string. Bail out.
return;
- sal_uInt8 nSignCount = 0, nDecimalCount = 0;
+ sal_uInt8 nSignCount = 0, nDecimalCount = 0, nExpCount = 0;
xub_StrLen nLen = aString.Len();
sal_Unicode cDecSep = ScGlobal::GetpLocaleData()->getLocaleItem().decimalSeparator.getStr()[0];
for (xub_StrLen i = 0; i < nLen; ++i)
@@ -557,13 +562,17 @@ void ScDrawStringsVars::SetTextToWidthOrHash( ScBaseCell* pCell, long nWidth )
++nSignCount;
else if (c == cDecSep)
++nDecimalCount;
+ else if (c == sal_Unicode('E'))
+ ++nExpCount;
}
if (nDecimalCount)
nWidth += (nMaxDigit - GetDotWidth()) * nDecimalCount;
if (nSignCount)
nWidth += (nMaxDigit - GetSignWidth()) * nSignCount;
+ if (nExpCount)
+ nWidth += (nMaxDigit - GetExpWidth()) * nExpCount;
- if (nDecimalCount || nSignCount)
+ if (nDecimalCount || nSignCount || nExpCount)
{
// Re-calculate.
nNumDigits = static_cast<sal_uInt16>(nWidth / nMaxDigit);
@@ -658,6 +667,17 @@ long ScDrawStringsVars::GetDotWidth()
return nDotWidth;
}
+long ScDrawStringsVars::GetExpWidth()
+{
+ if (nExpWidth > 0)
+ return nExpWidth;
+
+ nExpWidth = pOutput->pFmtDevice->GetTextWidth(String('E'));
+ if (bPixelToLogic)
+ nExpWidth = ConvertWidthLogicToPixel(nExpWidth);
+ return nExpWidth;
+}
+
void ScDrawStringsVars::TextChanged()
{
OutputDevice* pRefDevice = pOutput->pRefDevice;
@@ -844,7 +864,7 @@ BOOL ScOutputData::GetMergeOrigin( SCCOL nX, SCROW nY, SCSIZE nArrY,
while (bHOver) // nY konstant
{
--rOverX;
- bHidden = ( (pDoc->GetColFlags(rOverX,nTab) & CR_HIDDEN) != 0 );
+ bHidden = pDoc->ColHidden(rOverX, nTab);
if ( !bDoMerge && !bHidden )
return FALSE;
@@ -868,7 +888,7 @@ BOOL ScOutputData::GetMergeOrigin( SCCOL nX, SCROW nY, SCSIZE nArrY,
while (bVOver)
{
--rOverY;
- bHidden = ( (pDoc->GetRowFlags(rOverY,nTab) & CR_HIDDEN) != 0 );
+ bHidden = pDoc->RowHidden(rOverY, nTab);
if ( !bDoMerge && !bHidden )
return FALSE;
@@ -876,8 +896,8 @@ BOOL ScOutputData::GetMergeOrigin( SCCOL nX, SCROW nY, SCSIZE nArrY,
--nArrY; // lokale Kopie !
if (rOverX >= nX1 && rOverY >= nY1 &&
- (pDoc->GetColFlags(rOverX,nTab) & CR_HIDDEN) == 0 &&
- (pDoc->GetRowFlags(rOverY,nTab) & CR_HIDDEN) == 0 &&
+ !pDoc->ColHidden(rOverX, nTab) &&
+ !pDoc->RowHidden(rOverY, nTab) &&
pRowInfo[nArrY].nRowNo == rOverY)
{
// rVirtPosY -= pRowInfo[nArrY].nHeight;
@@ -2176,7 +2196,7 @@ void ScOutputData::DrawEdit(BOOL bPixelToLogic)
if (bDoCell)
{
if ( nCellY == nY && nCellX >= nX1 && nCellX <= nX2 &&
- (pDoc->GetColFlags(nCellX,nTab) & CR_HIDDEN) == 0 )
+ !pDoc->ColHidden(nCellX, nTab) )
{
CellInfo& rCellInfo = pThisRowInfo->pCellInfo[nCellX+1];
pPattern = rCellInfo.pPatternAttr;
diff --git a/sc/source/ui/view/prevloc.cxx b/sc/source/ui/view/prevloc.cxx
index 67e1aa86553a..fd36a1b2c1d0 100644
--- a/sc/source/ui/view/prevloc.cxx
+++ b/sc/source/ui/view/prevloc.cxx
@@ -350,9 +350,9 @@ Rectangle ScPreviewLocationData::GetOffsetPixel( const ScAddress& rCellPos, cons
long nSizeX = (long) ( pDoc->GetColWidth( nEndCol, nTab ) * nScaleX );
SCROW nEndRow = rCellPos.Row();
- long nPosY = (long) pDoc->FastGetScaledRowHeight( rRange.aStart.Row(),
+ long nPosY = (long) pDoc->GetScaledRowHeight( rRange.aStart.Row(),
nEndRow, nTab, nScaleY);
- long nSizeY = (long) ( pDoc->FastGetRowHeight( nEndRow, nTab ) * nScaleY );
+ long nSizeY = (long) ( pDoc->GetRowHeight( nEndRow, nTab ) * nScaleY );
Size aOffsetLogic( nPosX, nPosY );
Size aSizeLogic( nSizeX, nSizeY );
@@ -599,11 +599,11 @@ void ScPreviewLocationData::GetTableInfo( const Rectangle& rVisiblePixel, ScPrev
++nColCount;
if ( bHasRepCols )
for ( nCol=nRepeatColStart; nCol<=nRepeatColEnd; nCol++ )
- if ( ( pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN ) == 0 )
+ if (!pDoc->ColHidden(nCol, nTab))
++nColCount;
if ( bHasMainCols )
for ( nCol=nMainColStart; nCol<=nMainColEnd; nCol++ )
- if ( ( pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN ) == 0 )
+ if (!pDoc->ColHidden(nCol, nTab))
++nColCount;
if ( nColCount > 0 )
@@ -620,7 +620,7 @@ void ScPreviewLocationData::GetTableInfo( const Rectangle& rVisiblePixel, ScPrev
{
long nPosX = 0;
for ( nCol=nRepeatColStart; nCol<=nRepeatColEnd; nCol++ )
- if ( ( pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN ) == 0 )
+ if (!pDoc->ColHidden(nCol, nTab))
{
USHORT nDocW = pDoc->GetColWidth( nCol, nTab );
long nNextX = nPosX + (long) (nDocW * nScaleX);
@@ -639,7 +639,7 @@ void ScPreviewLocationData::GetTableInfo( const Rectangle& rVisiblePixel, ScPrev
{
long nPosX = 0;
for ( nCol=nMainColStart; nCol<=nMainColEnd; nCol++ )
- if ( ( pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN ) == 0 )
+ if (!pDoc->ColHidden(nCol, nTab))
{
USHORT nDocW = pDoc->GetColWidth( nCol, nTab );
long nNextX = nPosX + (long) (nDocW * nScaleX);
@@ -667,11 +667,9 @@ void ScPreviewLocationData::GetTableInfo( const Rectangle& rVisiblePixel, ScPrev
if ( bHasHeaderRow )
++nRowCount;
if ( bHasRepRows )
- nRowCount += pDoc->GetRowFlagsArray( nTab).CountForCondition(
- nRepeatRowStart, nRepeatRowEnd, CR_HIDDEN, 0);
+ nRowCount += pDoc->CountVisibleRows(nRepeatRowStart, nRepeatRowEnd, nTab);
if ( bHasMainRows )
- nRowCount += pDoc->GetRowFlagsArray( nTab).CountForCondition(
- nMainRowStart, nMainRowEnd, CR_HIDDEN, 0);
+ nRowCount += pDoc->CountVisibleRows(nMainRowStart, nMainRowEnd, nTab);
if ( nRowCount > 0 )
{
@@ -686,58 +684,44 @@ void ScPreviewLocationData::GetTableInfo( const Rectangle& rVisiblePixel, ScPrev
if ( bHasRepRows )
{
long nPosY = 0;
- ScCompressedArrayIterator< SCROW, BYTE> aIter(
- pDoc->GetRowFlagsArray( nTab), nRepeatRowStart,
- nRepeatRowEnd);
- do
+ for (SCROW nRow = nRepeatRowStart; nRow <= nRepeatRowEnd; ++nRow)
{
- if ((*aIter & CR_HIDDEN) == 0)
- {
- SCROW nRangeEnd = aIter.GetRangeEnd();
- for (SCROW nRow=aIter.GetRangeStart(); nRow<=nRangeEnd; ++nRow)
- {
- USHORT nDocH = pDoc->FastGetOriginalRowHeight( nRow, nTab );
- long nNextY = nPosY + (long) (nDocH * nScaleY);
-
- long nPixelStart = pWindow->LogicToPixel( Size( 0, nPosY ), aCellMapMode ).Height();
- long nPixelEnd = pWindow->LogicToPixel( Size( 0, nNextY ), aCellMapMode ).Height() - 1;
- pRowInfo[nRowPos].Set( FALSE, nRow,
- aRepeatRect.Top() + nPixelStart,
- aRepeatRect.Top() + nPixelEnd );
-
- nPosY = nNextY;
- ++nRowPos;
- }
- }
- } while (aIter.NextRange());
+ if (pDoc->RowHidden(nRow, nTab))
+ continue;
+
+ USHORT nDocH = pDoc->GetOriginalHeight( nRow, nTab );
+ long nNextY = nPosY + (long) (nDocH * nScaleY);
+
+ long nPixelStart = pWindow->LogicToPixel( Size( 0, nPosY ), aCellMapMode ).Height();
+ long nPixelEnd = pWindow->LogicToPixel( Size( 0, nNextY ), aCellMapMode ).Height() - 1;
+ pRowInfo[nRowPos].Set( FALSE, nRow,
+ aRepeatRect.Top() + nPixelStart,
+ aRepeatRect.Top() + nPixelEnd );
+
+ nPosY = nNextY;
+ ++nRowPos;
+ }
}
if ( bHasMainRows )
{
long nPosY = 0;
- ScCompressedArrayIterator< SCROW, BYTE> aIter(
- pDoc->GetRowFlagsArray( nTab), nMainRowStart,
- nMainRowEnd);
- do
+ for (SCROW nRow = nMainRowStart; nRow <= nMainRowEnd; ++nRow)
{
- if ((*aIter & CR_HIDDEN) == 0)
- {
- SCROW nRangeEnd = aIter.GetRangeEnd();
- for (SCROW nRow=aIter.GetRangeStart(); nRow<=nRangeEnd; ++nRow)
- {
- USHORT nDocH = pDoc->FastGetOriginalRowHeight( nRow, nTab );
- long nNextY = nPosY + (long) (nDocH * nScaleY);
-
- long nPixelStart = pWindow->LogicToPixel( Size( 0, nPosY ), aCellMapMode ).Height();
- long nPixelEnd = pWindow->LogicToPixel( Size( 0, nNextY ), aCellMapMode ).Height() - 1;
- pRowInfo[nRowPos].Set( FALSE, nRow,
- aMainRect.Top() + nPixelStart,
- aMainRect.Top() + nPixelEnd );
-
- nPosY = nNextY;
- ++nRowPos;
- }
- }
- } while (aIter.NextRange());
+ if (pDoc->RowHidden(nRow, nTab))
+ continue;
+
+ USHORT nDocH = pDoc->GetOriginalHeight( nRow, nTab );
+ long nNextY = nPosY + (long) (nDocH * nScaleY);
+
+ long nPixelStart = pWindow->LogicToPixel( Size( 0, nPosY ), aCellMapMode ).Height();
+ long nPixelEnd = pWindow->LogicToPixel( Size( 0, nNextY ), aCellMapMode ).Height() - 1;
+ pRowInfo[nRowPos].Set( FALSE, nRow,
+ aMainRect.Top() + nPixelStart,
+ aMainRect.Top() + nPixelEnd );
+
+ nPosY = nNextY;
+ ++nRowPos;
+ }
}
rInfo.SetRowInfo( nRowCount, pRowInfo );
}
diff --git a/sc/source/ui/view/printfun.cxx b/sc/source/ui/view/printfun.cxx
index afe23892e786..378ea1233cf9 100644
--- a/sc/source/ui/view/printfun.cxx
+++ b/sc/source/ui/view/printfun.cxx
@@ -85,6 +85,8 @@
#include <vcl/lineinfo.hxx>
#include <tools/pstm.hxx>
+#include <boost/scoped_ptr.hpp>
+
#define ZOOM_MIN 10
#define GET_BOOL(set,which) ((const SfxBoolItem&)(set)->Get((which))).GetValue()
@@ -1501,7 +1503,7 @@ void ScPrintFunc::PrintRowHdr( SCROW nY1, SCROW nY2, long nScrX, long nScrY )
for (SCROW nRow=nY1; nRow<=nY2; nRow++)
{
- USHORT nDocH = pDoc->FastGetRowHeight( nRow, nPrintTab );
+ USHORT nDocH = pDoc->GetRowHeight( nRow, nPrintTab );
if (nDocH)
{
long nHeight = (long) (nDocH * nScaleY);
@@ -1557,7 +1559,7 @@ void ScPrintFunc::LocateRowHdr( SCROW nY1, SCROW nY2, long nScrX, long nScrY,
nEndX -= nOneX;
long nPosY = nScrY - nOneY;
- nPosY += pDoc->FastGetScaledRowHeight( nY1, nY2, nPrintTab, nScaleY);
+ nPosY += pDoc->GetScaledRowHeight( nY1, nY2, nPrintTab, nScaleY);
Rectangle aCellRect( nScrX, nScrY, nEndX, nPosY );
rLocationData.AddRowHeaders( aCellRect, nY1, nY2, bRepRow );
}
@@ -1599,7 +1601,7 @@ void ScPrintFunc::LocateArea( SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
}
long nPosY = nScrY - nOneY;
- nPosY += pDoc->FastGetScaledRowHeight( nY1, nY2, nPrintTab, nScaleY);
+ nPosY += pDoc->GetScaledRowHeight( nY1, nY2, nPrintTab, nScaleY);
Rectangle aCellRect( nScrX, nScrY, nPosX, nPosY );
rLocationData.AddCellRange( aCellRect, ScRange( nX1,nY1,nPrintTab, nX2,nY2,nPrintTab ),
bRepCol, bRepRow, aDrawMapMode );
@@ -2181,9 +2183,9 @@ void ScPrintFunc::PrintPage( long nPageNo, SCCOL nX1, SCROW nY1, SCCOL nX2, SCRO
}
if ( bCenterVer )
{
- long nDataHeight = pDoc->FastGetRowHeight( nY1, nY2, nPrintTab);
+ long nDataHeight = pDoc->GetRowHeight( nY1, nY2, nPrintTab);
if (bDoRepRow)
- nDataHeight += pDoc->FastGetRowHeight( nRepeatStartRow,
+ nDataHeight += pDoc->GetRowHeight( nRepeatStartRow,
nRepeatEndRow, nPrintTab);
if (aTableParam.bHeaders)
nDataHeight += (long) PRINT_HEADER_HEIGHT;
@@ -2216,11 +2218,11 @@ void ScPrintFunc::PrintPage( long nPageNo, SCCOL nX1, SCROW nY1, SCCOL nX2, SCRO
for (SCCOL i=nRepeatStartCol; i<=nRepeatEndCol; i++)
nRepeatWidth += (long) (pDoc->GetColWidth(i,nPrintTab) * nScaleX);
if (bDoRepRow)
- nRepeatHeight += pDoc->FastGetScaledRowHeight( nRepeatStartRow,
+ nRepeatHeight += pDoc->GetScaledRowHeight( nRepeatStartRow,
nRepeatEndRow, nPrintTab, nScaleY);
for (SCCOL i=nX1; i<=nX2; i++)
nContentWidth += (long) (pDoc->GetColWidth(i,nPrintTab) * nScaleX);
- nContentHeight += pDoc->FastGetScaledRowHeight( nY1, nY2, nPrintTab,
+ nContentHeight += pDoc->GetScaledRowHeight( nY1, nY2, nPrintTab,
nScaleY);
// partition the page
@@ -2886,30 +2888,84 @@ void ScPrintFunc::CalcZoom( USHORT nRangeNo ) // Zoom bere
if (aTableParam.bScalePageNum)
{
nZoom = 100;
- BOOL bFound = FALSE;
USHORT nPagesToFit = aTableParam.nScalePageNum;
- while (!bFound)
+
+ sal_uInt16 nLastFitZoom = 0, nLastNonFitZoom = 0;
+ while (true)
{
+ if (nZoom <= ZOOM_MIN)
+ break;
+
CalcPages();
- if ( nPagesX * nPagesY <= nPagesToFit || nZoom <= ZOOM_MIN )
- bFound = TRUE;
+ bool bFitsPage = (nPagesX * nPagesY <= nPagesToFit);
+
+ if (bFitsPage)
+ {
+ if (nZoom == 100)
+ // If it fits at 100 %, it's good enough for me.
+ break;
+
+ nLastFitZoom = nZoom;
+ nZoom = (nLastNonFitZoom + nZoom) / 2;
+
+ if (nLastFitZoom == nZoom)
+ // It converged. Use this zoom level.
+ break;
+ }
else
- --nZoom;
+ {
+ if (nZoom - nLastFitZoom <= 1)
+ {
+ nZoom = nLastFitZoom;
+ CalcPages();
+ break;
+ }
+
+ nLastNonFitZoom = nZoom;
+ nZoom = (nLastFitZoom + nZoom) / 2;
+ }
}
}
else if (aTableParam.bScaleTo)
{
nZoom = 100;
- BOOL bFound = FALSE;
USHORT nW = aTableParam.nScaleWidth;
USHORT nH = aTableParam.nScaleHeight;
- while (!bFound)
+
+ sal_uInt16 nLastFitZoom = 0, nLastNonFitZoom = 0;
+ while (true)
{
+ if (nZoom <= ZOOM_MIN)
+ break;
+
CalcPages();
- if ( ((!nW || (nPagesX <= nW)) && (!nH || (nPagesY <= nH))) || (nZoom <= ZOOM_MIN) )
- bFound = TRUE;
+ bool bFitsPage = ((!nW || (nPagesX <= nW)) && (!nH || (nPagesY <= nH)));
+
+ if (bFitsPage)
+ {
+ if (nZoom == 100)
+ // If it fits at 100 %, it's good enough for me.
+ break;
+
+ nLastFitZoom = nZoom;
+ nZoom = (nLastNonFitZoom + nZoom) / 2;
+
+ if (nLastFitZoom == nZoom)
+ // It converged. Use this zoom level.
+ break;
+ }
else
- --nZoom;
+ {
+ if (nZoom - nLastFitZoom <= 1)
+ {
+ nZoom = nLastFitZoom;
+ CalcPages();
+ break;
+ }
+
+ nLastNonFitZoom = nZoom;
+ nZoom = (nLastFitZoom + nZoom) / 2;
+ }
}
}
else if (aTableParam.bScaleAll)
@@ -3029,18 +3085,20 @@ void ScPrintFunc::CalcPages() // berechnet aPageRect und Seiten au
nPagesY = 0;
nTotalY = 0;
- BOOL bVisCol = FALSE;
+ bool bVisCol = false;
+ SCCOL nLastCol = -1;
for (SCCOL i=nStartCol; i<=nEndCol; i++)
{
- BYTE nFlags = pDoc->GetColFlags(i,nPrintTab);
- if ( i>nStartCol && bVisCol && (nFlags & CR_PAGEBREAK) )
+ bool bHidden = pDoc->ColHidden(i, nPrintTab, nLastCol);
+ bool bPageBreak = (pDoc->HasColBreak(i, nPrintTab) & BREAK_PAGE);
+ if ( i>nStartCol && bVisCol && bPageBreak )
{
pPageEndX[nPagesX] = i-1;
++nPagesX;
- bVisCol = FALSE;
+ bVisCol = false;
}
- if (!(nFlags & CR_HIDDEN))
- bVisCol = TRUE;
+ if (!bHidden)
+ bVisCol = true;
}
if (bVisCol) // auch am Ende keine leeren Seiten
{
@@ -3048,39 +3106,60 @@ void ScPrintFunc::CalcPages() // berechnet aPageRect und Seiten au
++nPagesX;
}
- BOOL bVisRow = FALSE;
+ bool bVisRow = false;
SCROW nPageStartRow = nStartRow;
- ScCompressedArrayIterator< SCROW, BYTE> aIter( pDoc->GetRowFlagsArray(
- nPrintTab), nStartRow, nEndRow);
- do
+ SCROW nLastVisibleRow = -1;
+
+ ::boost::scoped_ptr<ScRowBreakIterator> pRowBreakIter(pDoc->GetRowBreakIterator(nPrintTab));
+ SCROW nNextPageBreak = pRowBreakIter->first();
+ while (nNextPageBreak != ScRowBreakIterator::NOT_FOUND && nNextPageBreak < nStartRow)
+ // Skip until the page break position is at the start row or greater.
+ nNextPageBreak = pRowBreakIter->next();
+
+ for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
{
- BYTE nFlags = *aIter;
- SCROW nRangeEnd = aIter.GetRangeEnd();
- for (SCROW j=aIter.GetRangeStart(); j<=nRangeEnd; ++j)
+ bool bPageBreak = (nNextPageBreak == nRow);
+ if (bPageBreak)
+ nNextPageBreak = pRowBreakIter->next();
+
+ if (nRow > nStartRow && bVisRow && bPageBreak )
{
- if ( j>nStartRow && bVisRow && (nFlags & CR_PAGEBREAK) )
+ pPageEndY[nTotalY] = nRow-1;
+ ++nTotalY;
+
+ if ( !aTableParam.bSkipEmpty ||
+ !pDoc->IsPrintEmpty( nPrintTab, nStartCol, nPageStartRow, nEndCol, nRow-1 ) )
{
- pPageEndY[nTotalY] = j-1;
- ++nTotalY;
+ pPageRows[nPagesY].SetStartRow( nPageStartRow );
+ pPageRows[nPagesY].SetEndRow( nRow-1 );
+ pPageRows[nPagesY].SetPagesX( nPagesX );
+ if (aTableParam.bSkipEmpty)
+ lcl_SetHidden( pDoc, nPrintTab, pPageRows[nPagesY], nStartCol, pPageEndX );
+ ++nPagesY;
+ }
- if ( !aTableParam.bSkipEmpty ||
- !pDoc->IsPrintEmpty( nPrintTab, nStartCol, nPageStartRow, nEndCol, j-1 ) )
- {
- pPageRows[nPagesY].SetStartRow( nPageStartRow );
- pPageRows[nPagesY].SetEndRow( j-1 );
- pPageRows[nPagesY].SetPagesX( nPagesX );
- if (aTableParam.bSkipEmpty)
- lcl_SetHidden( pDoc, nPrintTab, pPageRows[nPagesY], nStartCol, pPageEndX );
- ++nPagesY;
- }
+ nPageStartRow = nRow;
+ bVisRow = false;
+ }
- nPageStartRow = j;
- bVisRow = FALSE;
- }
- if (!(nFlags & CR_HIDDEN))
- bVisRow = TRUE;
+ if (nRow <= nLastVisibleRow)
+ {
+ // This row is still visible. Don't bother calling RowHidden() to
+ // find out, for speed optimization.
+ bVisRow = true;
+ continue;
+ }
+
+ SCROW nLastRow = -1;
+ if (!pDoc->RowHidden(nRow, nPrintTab, NULL, &nLastRow))
+ {
+ bVisRow = true;
+ nLastVisibleRow = nLastRow;
}
- } while (aIter.NextRange());
+ else
+ // skip all hidden rows.
+ nRow = nLastRow;
+ }
if (bVisRow)
{
diff --git a/sc/source/ui/view/scextopt.cxx b/sc/source/ui/view/scextopt.cxx
index bead62419bb3..1faa105d2bd7 100644
--- a/sc/source/ui/view/scextopt.cxx
+++ b/sc/source/ui/view/scextopt.cxx
@@ -36,7 +36,6 @@
// ============================================================================
ScExtDocSettings::ScExtDocSettings() :
- maOleSize( ScAddress::INITIALIZE_INVALID ),
mfTabBarWidth( -1.0 ),
mnLinkCnt( 0 ),
mnDisplTab( 0 )
diff --git a/sc/source/ui/view/select.cxx b/sc/source/ui/view/select.cxx
index 4887895c8e6b..b2c9ffdc1395 100644
--- a/sc/source/ui/view/select.cxx
+++ b/sc/source/ui/view/select.cxx
@@ -275,12 +275,12 @@ BOOL __EXPORT ScViewFunctionSet::SetCursorAtPoint( const Point& rPointPixel, BOO
ScDocument* pDoc = pViewData->GetDocument();
SCTAB nTab = pViewData->GetTabNo();
if ( bLeft && !bRightScroll )
- do --nPosX; while ( nPosX>=0 && ( pDoc->GetColFlags( nPosX, nTab ) & CR_HIDDEN ) );
+ do --nPosX; while ( nPosX>=0 && pDoc->ColHidden( nPosX, nTab ) );
if ( bTop && !bBottomScroll )
{
if (--nPosY >= 0)
{
- pDoc->GetRowFlagsArray( nTab).GetLastForCondition( 0, nPosY, CR_HIDDEN, 0);
+ nPosY = pDoc->LastVisibleRow(0, nPosY, nTab);
if (!ValidRow(nPosY))
nPosY = -1;
}
@@ -476,7 +476,7 @@ BOOL ScViewFunctionSet::SetCursorAtCell( SCsCOL nPosX, SCsROW nPosY, BOOL bScrol
{
// #94321# in SetCursorAtPoint hidden columns are skipped.
// They must be skipped here too, or the result will always be the first hidden column.
- do ++nPosX; while ( nPosX<nStartX && ( pDoc->GetColFlags( nPosX, nTab ) & CR_HIDDEN ) );
+ do ++nPosX; while ( nPosX<nStartX && pDoc->ColHidden(nPosX, nTab) );
for (SCCOL i=nPosX; i<nStartX; i++)
nSizeX += pDoc->GetColWidth( i, nTab );
}
@@ -491,8 +491,7 @@ BOOL ScViewFunctionSet::SetCursorAtCell( SCsCOL nPosX, SCsROW nPosY, BOOL bScrol
// They must be skipped here too, or the result will always be the first hidden row.
if (++nPosY < nStartY)
{
- nPosY = pDoc->GetRowFlagsArray( nTab).GetFirstForCondition(
- nPosY, nStartY-1, CR_HIDDEN, 0);
+ nPosY = pDoc->FirstVisibleRow(nPosY, nStartY-1, nTab);
if (!ValidRow(nPosY))
nPosY = nStartY;
}
diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx
index c5572fb9844a..6014ded96e1e 100644
--- a/sc/source/ui/view/tabcont.cxx
+++ b/sc/source/ui/view/tabcont.cxx
@@ -59,13 +59,14 @@ ScTabControl::ScTabControl( Window* pParent, ScViewData* pData ) :
DropTargetHelper( this ),
DragSourceHelper( this ),
pViewData( pData ),
- nMouseClickPageId( TABBAR_PAGE_NOTFOUND ),
- nSelPageIdByMouse( TABBAR_PAGE_NOTFOUND ),
+ nMouseClickPageId( TabBar::PAGE_NOT_FOUND ),
+ nSelPageIdByMouse( TabBar::PAGE_NOT_FOUND ),
bErrorShown( FALSE )
{
ScDocument* pDoc = pViewData->GetDocument();
String aString;
+ Color aTabBgColor;
SCTAB nCount = pDoc->GetTableCount();
for (SCTAB i=0; i<nCount; i++)
{
@@ -77,6 +78,11 @@ ScTabControl::ScTabControl( Window* pParent, ScViewData* pData ) :
InsertPage( static_cast<sal_uInt16>(i)+1, aString, TPB_SPECIAL );
else
InsertPage( static_cast<sal_uInt16>(i)+1, aString );
+ if ( !pDoc->IsDefaultTabBgColor(i) )
+ {
+ aTabBgColor = pDoc->GetTabBgColor(i);
+ SetTabBgColor( static_cast<sal_uInt16>(i)+1, aTabBgColor );
+ }
}
}
}
@@ -157,7 +163,7 @@ void ScTabControl::MouseButtonDown( const MouseEvent& rMEvt )
if( rMEvt.IsLeft() && (rMEvt.GetModifier() == 0) )
nMouseClickPageId = GetPageId( rMEvt.GetPosPixel() );
else
- nMouseClickPageId = TABBAR_PAGE_NOTFOUND;
+ nMouseClickPageId = TabBar::PAGE_NOT_FOUND;
TabBar::MouseButtonDown( rMEvt );
}
@@ -168,7 +174,7 @@ void ScTabControl::MouseButtonUp( const MouseEvent& rMEvt )
// mouse button down and up on same page?
if( nMouseClickPageId != GetPageId( aPos ) )
- nMouseClickPageId = TABBAR_PAGE_NOTFOUND;
+ nMouseClickPageId = TabBar::PAGE_NOT_FOUND;
if ( rMEvt.GetClicks() == 2 && rMEvt.IsLeft() && nMouseClickPageId != 0 && nMouseClickPageId != TAB_PAGE_NOTFOUND )
{
@@ -185,7 +191,7 @@ void ScTabControl::MouseButtonUp( const MouseEvent& rMEvt )
SfxDispatcher* pDispatcher = pViewData->GetViewShell()->GetViewFrame()->GetDispatcher();
pDispatcher->Execute( nSlot, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD );
// forget page ID, to be really sure that the dialog is not called twice
- nMouseClickPageId = TABBAR_PAGE_NOTFOUND;
+ nMouseClickPageId = TabBar::PAGE_NOT_FOUND;
}
TabBar::MouseButtonUp( rMEvt );
@@ -197,7 +203,7 @@ void ScTabControl::Select()
nSelPageIdByMouse = nMouseClickPageId;
/* Reset nMouseClickPageId, so that next Select() call may invalidate
nSelPageIdByMouse (i.e. if called from keyboard). */
- nMouseClickPageId = TABBAR_PAGE_NOTFOUND;
+ nMouseClickPageId = TabBar::PAGE_NOT_FOUND;
ScModule* pScMod = SC_MOD();
ScDocument* pDoc = pViewData->GetDocument();
@@ -262,6 +268,7 @@ void ScTabControl::Select()
rBind.Invalidate( FID_DELETE_TABLE );
rBind.Invalidate( FID_TABLE_SHOW );
rBind.Invalidate( FID_TABLE_HIDE );
+ rBind.Invalidate( FID_TAB_SET_TAB_BG_COLOR );
// SetReference nur wenn der Konsolidieren-Dialog offen ist
// (fuer Referenzen ueber mehrere Tabellen)
@@ -288,16 +295,22 @@ void ScTabControl::UpdateStatus()
SCTAB i;
String aString;
SCTAB nMaxCnt = Max( nCount, static_cast<SCTAB>(GetMaxId()) );
+ Color aTabBgColor;
BOOL bModified = FALSE; // Tabellen-Namen
for (i=0; i<nMaxCnt && !bModified; i++)
{
if (pDoc->IsVisible(i))
+ {
pDoc->GetName(i,aString);
+ aTabBgColor = pDoc->GetTabBgColor(i);
+ }
else
+ {
aString.Erase();
+ }
- if (GetPageText(static_cast<sal_uInt16>(i)+1) != aString)
+ if ( (GetPageText(static_cast<sal_uInt16>(i)+1) != aString) || (GetTabBgColor(static_cast<sal_uInt16>(i)+1) != aTabBgColor) )
bModified = TRUE;
}
@@ -314,6 +327,11 @@ void ScTabControl::UpdateStatus()
InsertPage( static_cast<sal_uInt16>(i)+1, aString, TPB_SPECIAL );
else
InsertPage( static_cast<sal_uInt16>(i)+1, aString );
+ if ( !pDoc->IsDefaultTabBgColor(i) )
+ {
+ aTabBgColor = pDoc->GetTabBgColor(i);
+ SetTabBgColor( static_cast<sal_uInt16>(i)+1, aTabBgColor );
+ }
}
}
}
@@ -371,7 +389,7 @@ void ScTabControl::ActivateView(BOOL bActivate)
void ScTabControl::SetSheetLayoutRTL( BOOL bSheetRTL )
{
SetEffectiveRTL( bSheetRTL );
- nSelPageIdByMouse = TABBAR_PAGE_NOTFOUND;
+ nSelPageIdByMouse = TabBar::PAGE_NOT_FOUND;
}
@@ -607,12 +625,12 @@ void ScTabControl::EndRenaming()
void ScTabControl::Mirror()
{
TabBar::Mirror();
- if( nSelPageIdByMouse != TABBAR_PAGE_NOTFOUND )
+ if( nSelPageIdByMouse != TabBar::PAGE_NOT_FOUND )
{
Rectangle aRect( GetPageRect( GetCurPageId() ) );
if( !aRect.IsEmpty() )
SetPointerPosPixel( aRect.Center() );
- nSelPageIdByMouse = TABBAR_PAGE_NOTFOUND; // only once after a Select()
+ nSelPageIdByMouse = TabBar::PAGE_NOT_FOUND; // only once after a Select()
}
}
diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx
index 4938defa437d..0bc4617a9af4 100644
--- a/sc/source/ui/view/tabview.cxx
+++ b/sc/source/ui/view/tabview.cxx
@@ -1439,7 +1439,7 @@ void ScTabView::ScrollX( long nDeltaX, ScHSplitPos eWhich, BOOL bUpdBars )
SCsCOL nDir = ( nDeltaX > 0 ) ? 1 : -1;
ScDocument* pDoc = aViewData.GetDocument();
SCTAB nTab = aViewData.GetTabNo();
- while ( ( pDoc->GetColFlags( nNewX, nTab ) & CR_HIDDEN ) &&
+ while ( pDoc->ColHidden(nNewX, nTab) &&
nNewX+nDir >= 0 && nNewX+nDir <= MAXCOL )
nNewX = sal::static_int_cast<SCsCOL>( nNewX + nDir );
@@ -1528,7 +1528,7 @@ void ScTabView::ScrollY( long nDeltaY, ScVSplitPos eWhich, BOOL bUpdBars )
SCsROW nDir = ( nDeltaY > 0 ) ? 1 : -1;
ScDocument* pDoc = aViewData.GetDocument();
SCTAB nTab = aViewData.GetTabNo();
- while ( ( pDoc->GetRowFlags( nNewY, nTab ) & CR_HIDDEN ) &&
+ while ( pDoc->RowHidden(nNewY, nTab) &&
nNewY+nDir >= 0 && nNewY+nDir <= MAXROW )
nNewY += nDir;
@@ -1615,7 +1615,7 @@ SCROW lcl_LastVisible( ScViewData& rViewData )
SCTAB nTab = rViewData.GetTabNo();
SCROW nVis = MAXROW;
- while ( nVis > 0 && pDoc->FastGetRowHeight( nVis, nTab ) == 0 )
+ while ( nVis > 0 && pDoc->GetRowHeight( nVis, nTab ) == 0 )
--nVis;
return nVis;
}
diff --git a/sc/source/ui/view/tabview2.cxx b/sc/source/ui/view/tabview2.cxx
index b7a773ab2abd..674f6f8ae0ff 100644
--- a/sc/source/ui/view/tabview2.cxx
+++ b/sc/source/ui/view/tabview2.cxx
@@ -640,13 +640,13 @@ BOOL lcl_FitsInWindow( double fScaleX, double fScaleY, USHORT nZoom,
}
long nBlockY = 0;
- ScCoupledCompressedArrayIterator< SCROW, BYTE, USHORT> aIter(
- pDoc->GetRowFlagsArray( nTab), 0, nFixPosY-1, CR_HIDDEN, 0,
- pDoc->GetRowHeightArray( nTab));
- for ( ; aIter; ++aIter)
+ for (SCROW nRow = 0; nRow <= nFixPosY-1; ++nRow)
{
+ if (pDoc->RowHidden(nRow, nTab))
+ continue;
+
// for frozen panes, add both parts
- USHORT nRowTwips = *aIter;
+ USHORT nRowTwips = pDoc->GetRowHeight(nRow, nTab);
if (nRowTwips)
{
nBlockY += (long)(nRowTwips * fScaleY);
@@ -654,10 +654,9 @@ BOOL lcl_FitsInWindow( double fScaleX, double fScaleY, USHORT nZoom,
return FALSE;
}
}
- aIter.NewLimits( nStartRow, nEndRow);
- for ( ; aIter; ++aIter)
+ for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
{
- USHORT nRowTwips = *aIter;
+ USHORT nRowTwips = pDoc->GetRowHeight(nRow, nTab);
if (nRowTwips)
{
nBlockY += (long)(nRowTwips * fScaleY);
diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx
index 750e49ec2334..86f68a1878cc 100644
--- a/sc/source/ui/view/tabview3.cxx
+++ b/sc/source/ui/view/tabview3.cxx
@@ -968,8 +968,8 @@ void ScTabView::MoveCursorRel( SCsCOL nMovX, SCsROW nMovY, ScFollowMode eMode,
BOOL bHFlip = FALSE;
do
{
- BYTE nColFlags = pDoc->GetColFlags( nCurX, nTab );
- bSkipCell = (nColFlags & CR_HIDDEN) || pDoc->IsHorOverlapped( nCurX, nCurY, nTab );
+ SCCOL nLastCol = -1;
+ bSkipCell = pDoc->ColHidden(nCurX, nTab, nLastCol) || pDoc->IsHorOverlapped( nCurX, nCurY, nTab );
if (bSkipProtected && !bSkipCell)
bSkipCell = pDoc->HasAttrib(nCurX, nCurY, nTab, nCurX, nCurY, nTab, HASATTR_PROTECTED);
if (bSkipUnprotected && !bSkipCell)
@@ -1010,8 +1010,8 @@ void ScTabView::MoveCursorRel( SCsCOL nMovX, SCsROW nMovY, ScFollowMode eMode,
BOOL bVFlip = FALSE;
do
{
- BYTE nRowFlags = pDoc->GetRowFlags( nCurY, nTab );
- bSkipCell = (nRowFlags & CR_HIDDEN) || pDoc->IsVerOverlapped( nCurX, nCurY, nTab );
+ SCROW nLastRow = -1;
+ bSkipCell = pDoc->RowHidden(nCurY, nTab, nLastRow) || pDoc->IsVerOverlapped( nCurX, nCurY, nTab );
if (bSkipProtected && !bSkipCell)
bSkipCell = pDoc->HasAttrib(nCurX, nCurY, nTab, nCurX, nCurY, nTab, HASATTR_PROTECTED);
if (bSkipUnprotected && !bSkipCell)
@@ -2093,17 +2093,18 @@ void ScTabView::PaintRangeFinder( long nNumber )
BOOL bHiddenEdge = FALSE;
SCROW nTmp;
ScDocument* pDoc = aViewData.GetDocument();
- while ( nCol1 > 0 && ( pDoc->GetColFlags( nCol1, nTab ) & CR_HIDDEN ) )
+ SCCOL nLastCol = -1;
+ while ( nCol1 > 0 && pDoc->ColHidden(nCol1, nTab, nLastCol) )
{
--nCol1;
bHiddenEdge = TRUE;
}
- while ( nCol2 < MAXCOL && ( pDoc->GetColFlags( nCol2, nTab ) & CR_HIDDEN ) )
+ while ( nCol2 < MAXCOL && pDoc->ColHidden(nCol2, nTab, nLastCol) )
{
++nCol2;
bHiddenEdge = TRUE;
}
- nTmp = pDoc->GetRowFlagsArray( nTab).GetLastForCondition( 0, nRow1, CR_HIDDEN, 0);
+ nTmp = pDoc->LastVisibleRow(0, nRow1, nTab);
if (!ValidRow(nTmp))
nTmp = 0;
if (nTmp < nRow1)
@@ -2111,7 +2112,7 @@ void ScTabView::PaintRangeFinder( long nNumber )
nRow1 = nTmp;
bHiddenEdge = TRUE;
}
- nTmp = pDoc->GetRowFlagsArray( nTab).GetFirstForCondition( nRow2, MAXROW, CR_HIDDEN, 0);
+ nTmp = pDoc->FirstVisibleRow(nRow2, MAXROW, nTab);
if (!ValidRow(nTmp))
nTmp = MAXROW;
if (nTmp > nRow2)
diff --git a/sc/source/ui/view/tabview5.cxx b/sc/source/ui/view/tabview5.cxx
index bc5c94c271e2..f0ac3fc42869 100644
--- a/sc/source/ui/view/tabview5.cxx
+++ b/sc/source/ui/view/tabview5.cxx
@@ -666,7 +666,7 @@ void ScTabView::MakeVisible( const Rectangle& rHMMRect )
if (nScrollY > 0)
while (nScrollY > 0 && nPosY < MAXROW)
{
- nScrollY -= (long) ( pDoc->FastGetRowHeight(nPosY, nTab) * nPPTY );
+ nScrollY -= (long) ( pDoc->GetRowHeight(nPosY, nTab) * nPPTY );
++nPosY;
++nLinesY;
}
@@ -674,7 +674,7 @@ void ScTabView::MakeVisible( const Rectangle& rHMMRect )
while (nScrollY < 0 && nPosY > 0)
{
--nPosY;
- nScrollY += (long) ( pDoc->FastGetRowHeight(nPosY, nTab) * nPPTY );
+ nScrollY += (long) ( pDoc->GetRowHeight(nPosY, nTab) * nPPTY );
--nLinesY;
}
diff --git a/sc/source/ui/view/tabvwshe.cxx b/sc/source/ui/view/tabvwshe.cxx
index a94d73a4b022..c0af39226c3f 100644
--- a/sc/source/ui/view/tabvwshe.cxx
+++ b/sc/source/ui/view/tabvwshe.cxx
@@ -52,6 +52,7 @@
#include "editsh.hxx"
#include "dociter.hxx"
#include "inputhdl.hxx"
+#include "document.hxx"
//==================================================================
@@ -88,6 +89,22 @@ String __EXPORT ScTabViewShell::GetSelectionText( BOOL bWholeWord )
else
aRange.aEnd = aRange.aStart;
}
+ else
+ {
+ // #i111531# with 1M rows it was necessary to limit the range
+ // to the actually used data area.
+ SCCOL nCol1, nCol2;
+ SCROW nRow1, nRow2;
+ SCTAB nTab1, nTab2;
+ aRange.GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2);
+ if (pDoc->ShrinkToUsedDataArea( nTab1, nCol1, nRow1, nCol2, nRow2, false))
+ {
+ aRange.aStart.SetCol( nCol1 );
+ aRange.aStart.SetRow( nRow1 );
+ aRange.aEnd.SetCol( nCol2 );
+ aRange.aEnd.SetRow( nRow2 );
+ }
+ }
ScImportExport aObj( pDoc, aRange );
aObj.SetFormulas( GetViewData()->GetOptions().GetOption( VOPT_FORMULAS ) );
diff --git a/sc/source/ui/view/tabvwshf.cxx b/sc/source/ui/view/tabvwshf.cxx
index 68a852c4a3b7..20a10f149a3a 100644
--- a/sc/source/ui/view/tabvwshf.cxx
+++ b/sc/source/ui/view/tabvwshf.cxx
@@ -28,18 +28,19 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
-
-
-// INCLUDE ---------------------------------------------------------------
+#include <boost/scoped_ptr.hpp>
#include "scitems.hxx"
#include <sfx2/request.hxx>
+#include <sfx2/viewfrm.hxx>
#include <basic/sbstar.hxx>
#include <layout/layout.hxx>
#include <svl/languageoptions.hxx>
#include <svl/stritem.hxx>
#include <svl/whiter.hxx>
#include <vcl/msgbox.hxx>
+#include <svx/svxdlg.hxx>
+#include <editeng/colritem.hxx>
#include "tabvwsh.hxx"
#include "sc.hrc"
@@ -52,9 +53,16 @@
//CHINA001 #include "strindlg.hxx"
//CHINA001 #include "mvtabdlg.hxx"
#include "docfunc.hxx"
+#include "eventuno.hxx"
#include "scabstdlg.hxx" //CHINA001
+#include "tabbgcolor.hxx"
+#include "tabbgcolordlg.hxx"
+
+using ::boost::scoped_ptr;
+using namespace com::sun::star;
+
#define IS_AVAILABLE(WhichId,ppItem) \
(pReqArgs->GetItemState((WhichId), TRUE, ppItem ) == SFX_ITEM_SET)
@@ -683,6 +691,134 @@ void ScTabViewShell::ExecuteTable( SfxRequest& rReq )
}
break;
+ case FID_TAB_SET_TAB_BG_COLOR:
+ case FID_TAB_MENU_SET_TAB_BG_COLOR:
+ {
+ if ( nSlot == FID_TAB_MENU_SET_TAB_BG_COLOR )
+ nSlot = FID_TAB_SET_TAB_BG_COLOR;
+ SCTAB nTabNr = pViewData->GetTabNo();
+ ScMarkData& rMark = pViewData->GetMarkData();
+ SCTAB nTabSelCount = rMark.GetSelectCount();
+ if ( !pDoc->IsDocEditable() )
+ break;
+
+ if ( pDoc->IsTabProtected( nTabNr ) ) // ||nTabSelCount > 1
+ break;
+
+ if( pReqArgs != NULL )
+ {
+ BOOL bDone = FALSE;
+ const SfxPoolItem* pItem;
+ Color aColor;
+ if( IS_AVAILABLE( FN_PARAM_1, &pItem ) )
+ nTabNr = ((const SfxUInt16Item*)pItem)->GetValue();
+
+ if( IS_AVAILABLE( nSlot, &pItem ) )
+ aColor = ((const SvxColorItem*)pItem)->GetValue();
+
+ if ( nTabSelCount > 1 )
+ {
+ scoped_ptr<ScUndoTabColorInfo::List>
+ pTabColorList(new ScUndoTabColorInfo::List);
+ for (SCTAB nTab=0; nTab<nTabCount; nTab++)
+ {
+ if ( rMark.GetTableSelect(nTab) && !pDoc->IsTabProtected(nTab) )
+ {
+ ScUndoTabColorInfo aTabColorInfo(nTab);
+ aTabColorInfo.maNewTabBgColor = aColor;
+ pTabColorList->push_back(aTabColorInfo);
+ }
+ }
+ bDone = SetTabBgColor( *pTabColorList );
+ }
+ else
+ {
+ bDone = SetTabBgColor( aColor, nCurrentTab ); //ScViewFunc.SetTabBgColor
+ }
+ if( bDone )
+ {
+ rReq.Done( *pReqArgs );
+ }
+ }
+ else
+ {
+ USHORT nRet = RET_OK; /// temp
+ BOOL bDone = FALSE; /// temp
+ Color aTabBgColor;
+ Color aNewTabBgColor;
+
+ aTabBgColor = pDoc->GetTabBgColor( nCurrentTab );
+ ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
+ DBG_ASSERT(pFact, "ScAbstractFactory create fail!");
+ AbstractScTabBgColorDlg* pDlg = pFact->CreateScTabBgColorDlg(
+ GetDialogParent(),
+ String(ScResId(SCSTR_SET_TAB_BG_COLOR)),
+ String(ScResId(SCSTR_NO_TAB_BG_COLOR)),
+ aTabBgColor,
+ nSlot,RID_SCDLG_TAB_BG_COLOR);
+ while ( !bDone && nRet == RET_OK )
+ {
+ nRet = pDlg->Execute();
+ if( nRet == RET_OK )
+ {
+ Color aSelectedColor;
+ pDlg->GetSelectedColor(aSelectedColor);
+ scoped_ptr<ScUndoTabColorInfo::List>
+ pTabColorList(new ScUndoTabColorInfo::List);
+ if ( nTabSelCount > 1 )
+ {
+ for (SCTAB nTab=0; nTab<nTabCount; nTab++)
+ {
+ if ( rMark.GetTableSelect(nTab) && !pDoc->IsTabProtected(nTab) )
+ {
+ ScUndoTabColorInfo aTabColorInfo(nTab);
+ aTabColorInfo.maNewTabBgColor = aSelectedColor;
+ pTabColorList->push_back(aTabColorInfo);
+ }
+ }
+ bDone = SetTabBgColor( *pTabColorList );
+ }
+ else
+ {
+ bDone = SetTabBgColor( aSelectedColor, nCurrentTab ); //ScViewFunc.SetTabBgColor
+ }
+ if ( bDone )
+ {
+ rReq.AppendItem( SvxColorItem( aTabBgColor, nSlot ) );
+ rReq.Done();
+ }
+ else
+ {
+ if( rReq.IsAPI() )
+ {
+ StarBASIC::Error( SbERR_SETPROP_FAILED );
+ }
+ }
+ }
+ }
+ delete( pDlg );
+ }
+ }
+ break;
+
+ case FID_TAB_EVENTS:
+ {
+ ScDocShell* pDocSh = pViewData->GetDocShell();
+ uno::Reference<container::XNameReplace> xEvents( new ScSheetEventsObj( pDocSh, nCurrentTab ) );
+ uno::Reference<frame::XFrame> xFrame = GetViewFrame()->GetFrame().GetFrameInterface();
+ SvxAbstractDialogFactory* pDlgFactory = SvxAbstractDialogFactory::Create();
+ if (pDlgFactory)
+ {
+ std::auto_ptr<VclAbstractDialog> pDialog( pDlgFactory->CreateSvxMacroAssignDlg(
+ GetDialogParent(), xFrame, false, xEvents, 0 ) );
+ if ( pDialog.get() && pDialog->Execute() == RET_OK )
+ {
+ // the dialog modifies the settings directly
+ }
+ }
+ }
+ break;
+
default:
DBG_ERROR("Unbekannte Message bei ViewShell");
break;
@@ -801,6 +937,23 @@ void ScTabViewShell::GetStateTable( SfxItemSet& rSet )
rSet.Put( SfxBoolItem( nWhich, pDoc->IsLayoutRTL( nTab ) ) );
}
break;
+
+ case FID_TAB_MENU_SET_TAB_BG_COLOR:
+ {
+ if ( !pDoc->IsDocEditable()
+ || ( pDocShell && pDocShell->IsDocShared() )
+ || pDoc->IsTabProtected(nTab) )
+ rSet.DisableItem( nWhich );
+ }
+ break;
+
+ case FID_TAB_SET_TAB_BG_COLOR:
+ {
+ Color aColor;
+ aColor = pDoc->GetTabBgColor( nTab );
+ rSet.Put( SvxColorItem( aColor, nWhich ) );
+ }
+ break;
}
nWhich = aIter.NextWhich();
}
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index 6b13c1bedcbf..c034836d4d4a 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -160,9 +160,6 @@ void ScViewDataTable::WriteUserDataSequence(uno::Sequence <beans::PropertyValue>
pSettings[SC_TABLE_ZOOM_VALUE].Value <<= nZoomValue;
pSettings[SC_TABLE_PAGE_VIEW_ZOOM_VALUE].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_PAGEVIEWZOOMVALUE));
pSettings[SC_TABLE_PAGE_VIEW_ZOOM_VALUE].Value <<= nPageZoomValue;
-
-// pSettings[SC_TABLE_SELECTED].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SC_TABLESELECTED));
-// pSettings[SC_TABLE_SELECTED].Value <<= bool(rViewData.GetMarkData().GetTableSelect( nTab ));
}
}
@@ -273,6 +270,17 @@ void ScViewDataTable::ReadUserDataSequence(const uno::Sequence <beans::PropertyV
aSettings[i].Value >>= bSelected;
rViewData.GetMarkData().SelectTable( nTab, bSelected );
}
+ else if (sName.compareToAscii(SC_UNONAME_TABCOLOR) == 0)
+ {
+ // There are documents out there that have their tab color defined as a view setting.
+ sal_Int32 nColor = COL_AUTO;
+ aSettings[i].Value >>= nColor;
+ if (static_cast<ColorData>(nColor) != COL_AUTO)
+ {
+ ScDocument* pDoc = rViewData.GetDocument();
+ pDoc->SetTabBgColor(nTab, Color(static_cast<ColorData>(nColor)));
+ }
+ }
}
if (eHSplitMode == SC_SPLIT_FIX)
nFixPosX = SanitizeCol( static_cast<SCCOL>( bHasHSplitInTwips ? nTempPosHTw : nTempPosH ));
@@ -1595,7 +1603,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich,
nScrPosY = 65535;
else
{
- nTSize = pDoc->FastGetRowHeight( nY, nTabNo );
+ nTSize = pDoc->GetRowHeight( nY, nTabNo );
if (nTSize)
{
long nSizeYPix = ToPixel( nTSize, nPPTY );
@@ -1604,7 +1612,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich,
else if ( nY < MAXROW )
{
// skip multiple hidden rows (forward only for now)
- SCROW nNext = pDoc->FastGetFirstNonHiddenRow( nY + 1, nTabNo );
+ SCROW nNext = pDoc->FirstVisibleRow(nY + 1, MAXROW, nTabNo);
if ( nNext > MAXROW )
nY = MAXROW;
else
@@ -1616,7 +1624,7 @@ Point ScViewData::GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich,
for (nY=nPosY; nY>nWhereY;)
{
--nY;
- nTSize = pDoc->FastGetRowHeight( nY, nTabNo );
+ nTSize = pDoc->GetRowHeight( nY, nTabNo );
if (nTSize)
{
long nSizeYPix = ToPixel( nTSize, nPPTY );
@@ -1706,8 +1714,7 @@ SCROW ScViewData::CellsAtY( SCsROW nPosY, SCsROW nDir, ScVSplitPos eWhichY, USHO
bOut = TRUE;
else
{
-// USHORT nTSize = pDoc->GetRowHeight( nRowNo, nTabNo );
- USHORT nTSize = pDoc->FastGetRowHeight( nRowNo, nTabNo );
+ USHORT nTSize = pDoc->GetRowHeight( nRowNo, nTabNo );
if (nTSize)
{
long nSizeYPix = ToPixel( nTSize, nPPTY );
@@ -1716,7 +1723,7 @@ SCROW ScViewData::CellsAtY( SCsROW nPosY, SCsROW nDir, ScVSplitPos eWhichY, USHO
else if ( nDir == 1 && nRowNo < MAXROW )
{
// skip multiple hidden rows (forward only for now)
- SCROW nNext = pDoc->FastGetFirstNonHiddenRow( nRowNo + 1, nTabNo );
+ SCROW nNext = pDoc->FirstVisibleRow(nRowNo + 1, MAXROW, nTabNo);
if ( nNext > MAXROW )
{
// same behavior as without the optimization: set bOut with nY=MAXROW+1
@@ -1779,11 +1786,19 @@ BOOL ScViewData::GetMergeSizePixel( SCCOL nX, SCROW nY, long& rSizeXPix, long& r
for (SCCOL i=0; i<nCountX; i++)
nOutWidth += ToPixel( pDoc->GetColWidth(nX+i,nTabNo), nPPTX );
SCROW nCountY = pMerge->GetRowMerge();
- ScCoupledCompressedArrayIterator< SCROW, BYTE, USHORT> aIter(
- pDoc->GetRowFlagsArray( nTabNo), nY, nY+nCountY-1, CR_HIDDEN,
- 0, pDoc->GetRowHeightArray( nTabNo));
- for ( ; aIter; ++aIter )
- nOutHeight += ToPixel( *aIter, nPPTY );
+
+ for (SCROW nRow = nY; nRow <= nY+nCountY-1; ++nRow)
+ {
+ SCROW nLastRow = nRow;
+ if (pDoc->RowHidden(nRow, nTabNo, NULL, &nLastRow))
+ {
+ nRow = nLastRow;
+ continue;
+ }
+
+ USHORT nHeight = pDoc->GetRowHeight(nRow, nTabNo);
+ nOutHeight += ToPixel(nHeight, nPPTY);
+ }
rSizeXPix = nOutWidth;
rSizeYPix = nOutHeight;
@@ -1843,7 +1858,7 @@ BOOL ScViewData::GetPosFromPixel( long nClickX, long nClickY, ScSplitPos eWhich,
{
while ( rPosY<=MAXROW && nClickY >= nScrY )
{
- nScrY += ToPixel( pDoc->FastGetRowHeight( rPosY, nTabNo ), nPPTY );
+ nScrY += ToPixel( pDoc->GetRowHeight( rPosY, nTabNo ), nPPTY );
++rPosY;
}
--rPosY;
@@ -1853,7 +1868,7 @@ BOOL ScViewData::GetPosFromPixel( long nClickX, long nClickY, ScSplitPos eWhich,
while ( rPosY>0 && nClickY < nScrY )
{
--rPosY;
- nScrY -= ToPixel( pDoc->FastGetRowHeight( rPosY, nTabNo ), nPPTY );
+ nScrY -= ToPixel( pDoc->GetRowHeight( rPosY, nTabNo ), nPPTY );
}
}
@@ -1973,14 +1988,14 @@ void ScViewData::SetPosY( ScVSplitPos eWhich, SCROW nNewPosY )
if ( nNewPosY > nOldPosY )
for ( i=nOldPosY; i<nNewPosY; i++ )
{
- long nThis = pDoc->FastGetRowHeight( i,nTabNo );
+ long nThis = pDoc->GetRowHeight( i,nTabNo );
nTPosY -= nThis;
nPixPosY -= ToPixel(sal::static_int_cast<USHORT>(nThis), nPPTY);
}
else
for ( i=nNewPosY; i<nOldPosY; i++ )
{
- long nThis = pDoc->FastGetRowHeight( i,nTabNo );
+ long nThis = pDoc->GetRowHeight( i,nTabNo );
nTPosY += nThis;
nPixPosY += ToPixel(sal::static_int_cast<USHORT>(nThis), nPPTY);
}
@@ -2010,7 +2025,7 @@ void ScViewData::RecalcPixPos() // nach Zoom-Aenderungen
long nPixPosY = 0;
SCROW nPosY = pThisTab->nPosY[eWhich];
for (SCROW j=0; j<nPosY; j++)
- nPixPosY -= ToPixel(pDoc->FastGetRowHeight(j,nTabNo), nPPTY);
+ nPixPosY -= ToPixel(pDoc->GetRowHeight(j,nTabNo), nPPTY);
pThisTab->nPixPosY[eWhich] = nPixPosY;
}
}
@@ -2053,7 +2068,7 @@ void ScViewData::SetScreen( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 )
for (nRow=nRow1; nRow<=nRow2; nRow++)
{
- nTSize = pDoc->FastGetRowHeight( nRow, nTabNo );
+ nTSize = pDoc->GetRowHeight( nRow, nTabNo );
if (nTSize)
{
nSizePix = ToPixel( nTSize, nPPTY );
@@ -2095,7 +2110,7 @@ void ScViewData::SetScreenPos( const Point& rVisAreaStart )
bEnd = FALSE;
while (!bEnd)
{
- nAdd = (long) pDoc->FastGetRowHeight(nY1,nTabNo);
+ nAdd = (long) pDoc->GetRowHeight(nY1,nTabNo);
if (nSize+nAdd <= nTwips+1 && nY1<MAXROW)
{
nSize += nAdd;
@@ -3047,7 +3062,7 @@ BOOL ScViewData::UpdateFixY( SCTAB nTab ) // TRUE = Wert geaendert
long nNewPos = 0;
for (SCROW nY=pTabData[nTab]->nPosY[SC_SPLIT_TOP]; nY<nFix; nY++)
{
- USHORT nTSize = pLocalDoc->FastGetRowHeight( nY, nTab );
+ USHORT nTSize = pLocalDoc->GetRowHeight( nY, nTab );
if (nTSize)
{
long nPix = ToPixel( nTSize, nPPTY );
diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx
index 11ecfa5aae8c..34fbbfdad5b5 100644
--- a/sc/source/ui/view/viewfun2.cxx
+++ b/sc/source/ui/view/viewfun2.cxx
@@ -86,6 +86,7 @@
#include "funcdesc.hxx"
#include "docuno.hxx"
#include "charthelper.hxx"
+#include "tabbgcolor.hxx"
#include <basic/sbstar.hxx>
#include <com/sun/star/container/XNameContainer.hpp>
@@ -2201,6 +2202,8 @@ BOOL ScViewFunc::DeleteTables(const SvShorts &TheTabs, BOOL bRecord )
pUndoDoc->SetActiveScenario( nTab, bActive );
}
pUndoDoc->SetVisible( nTab, pDoc->IsVisible( nTab ) );
+ pUndoDoc->SetTabBgColor( nTab, pDoc->GetTabBgColor(nTab) );
+ pUndoDoc->SetSheetEvents( nTab, pDoc->GetSheetEvents( nTab ) );
if ( pDoc->IsTabProtected( nTab ) )
pUndoDoc->SetTabProtection(nTab, pDoc->GetTabProtection(nTab));
@@ -2291,6 +2294,28 @@ BOOL ScViewFunc::RenameTable( const String& rName, SCTAB nTab )
//----------------------------------------------------------------------------
+bool ScViewFunc::SetTabBgColor( const Color& rColor, SCTAB nTab )
+{
+ bool bSuccess = GetViewData()->GetDocShell()->GetDocFunc().SetTabBgColor( nTab, rColor, TRUE, FALSE );
+ if (bSuccess)
+ {
+ GetViewData()->GetViewShell()->UpdateInputHandler();
+ }
+ return bSuccess;
+}
+
+bool ScViewFunc::SetTabBgColor( ScUndoTabColorInfo::List& rUndoSetTabBgColorInfoList )
+{
+ bool bSuccess = GetViewData()->GetDocShell()->GetDocFunc().SetTabBgColor( rUndoSetTabBgColorInfoList, TRUE, FALSE );
+ if (bSuccess)
+ {
+ GetViewData()->GetViewShell()->UpdateInputHandler();
+ }
+ return bSuccess;
+}
+
+//----------------------------------------------------------------------------
+
void ScViewFunc::InsertAreaLink( const String& rFile,
const String& rFilter, const String& rOptions,
const String& rSource, ULONG nRefresh )
diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx
index dacb41cd1aea..24fab9ac2eba 100644
--- a/sc/source/ui/view/viewfun3.cxx
+++ b/sc/source/ui/view/viewfun3.cxx
@@ -1723,10 +1723,10 @@ BOOL ScViewFunc::MoveBlockTo( const ScRange& rSource, const ScAddress& rDestPos,
BOOL bIncludeFiltered = bCut;
if ( !bIncludeFiltered )
{
- // manually find number of non-filtered rows
- SCROW nPastedCount = pDocSh->GetDocument()->GetRowFlagsArray(
- rSource.aStart.Tab()).CountForCondition(
- rSource.aStart.Row(), rSource.aEnd.Row(), CR_FILTERED, 0);
+ // find number of non-filtered rows
+ SCROW nPastedCount = pDocSh->GetDocument()->CountNonFilteredRows(
+ rSource.aStart.Row(), rSource.aEnd.Row(), rSource.aStart.Tab());
+
if ( nPastedCount == 0 )
nPastedCount = 1;
aDestEnd.SetRow( rDestPos.Row() + nPastedCount - 1 );
diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx
index 9697cae3a57e..dc4e96bbbf34 100644
--- a/sc/source/ui/view/viewfun5.cxx
+++ b/sc/source/ui/view/viewfun5.cxx
@@ -110,7 +110,7 @@ BOOL ScViewFunc::PasteDataFormat( ULONG nFormatId,
nXT += pDoc->GetColWidth(i,nTab);
if (pDoc->IsNegativePage(nTab))
nXT = -nXT;
- ULONG nYT = pDoc->FastGetRowHeight( 0, nPosY-1, nTab);
+ ULONG nYT = pDoc->GetRowHeight( 0, nPosY-1, nTab);
aPos = Point( (long)(nXT * HMM_PER_TWIPS), (long)(nYT * HMM_PER_TWIPS) );
}
}
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index 5d3bf97aa29c..231eb4e67562 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -2195,28 +2195,19 @@ void ScViewFunc::SetWidthOrHeight( BOOL bWidth, SCCOLROW nRangeCnt, SCCOLROW* pR
{
// fuer alle eingeblendeten CR_MANUALSIZE loeschen,
// dann SetOptimalHeight mit bShrink = FALSE
- ScCompressedArrayIterator< SCROW, BYTE> aIter(
- pDoc->GetRowFlagsArray( nTab), nStartNo,
- nEndNo);
- do
+ for (SCROW nRow = nStartNo; nRow <= nEndNo; ++nRow)
{
- BYTE nOld = *aIter;
- if ( (nOld & CR_HIDDEN) == 0 && ( nOld & CR_MANUALSIZE ) )
+ SCROW nLastRow = nRow;
+ if (pDoc->RowHidden(nRow, nTab, NULL, &nLastRow))
{
- SCROW nRangeEnd = aIter.GetRangeEnd();
- pDoc->SetRowFlags( aIter.GetRangeStart(),
- nRangeEnd, nTab,
- nOld & ~CR_MANUALSIZE);
- aIter.Resync( nRangeEnd);
- // Range may be extended due to merges and
- // now aIter.GetRangeEnd() may point behind
- // the previous row, but all flags of this
- // range have the CR_MANUALSIZE bit
- // removed, so it is safe to continue with
- // the next range, not necessary to catch
- // up with the remaining rows.
+ nRow = nLastRow;
+ continue;
}
- } while (aIter.NextRange());
+
+ BYTE nOld = pDoc->GetRowFlags(nRow, nTab);
+ if (nOld & CR_MANUALSIZE)
+ pDoc->SetRowFlags(nRow, nTab, nOld & ~CR_MANUALSIZE);
+ }
}
double nPPTX = GetViewData()->GetPPTX();
@@ -2258,8 +2249,7 @@ void ScViewFunc::SetWidthOrHeight( BOOL bWidth, SCCOLROW nRangeCnt, SCCOLROW* pR
{
for (SCCOL nCol=static_cast<SCCOL>(nStartNo); nCol<=static_cast<SCCOL>(nEndNo); nCol++)
{
- if ( eMode != SC_SIZE_VISOPT ||
- (pDoc->GetColFlags( nCol, nTab ) & CR_HIDDEN) == 0 )
+ if ( eMode != SC_SIZE_VISOPT || !pDoc->ColHidden(nCol, nTab) )
{
USHORT nThisSize = nSizeTwips;
diff --git a/sc/source/ui/view/viewutil.cxx b/sc/source/ui/view/viewutil.cxx
index d887aec8bc5b..a6b4e320d3ab 100644
--- a/sc/source/ui/view/viewutil.cxx
+++ b/sc/source/ui/view/viewutil.cxx
@@ -271,20 +271,19 @@ void ScViewUtil::UnmarkFiltered( ScMarkData& rMark, ScDocument* pDoc )
for (SCTAB nTab=0; nTab<nTabCount; nTab++)
if ( rMark.GetTableSelect(nTab ) )
{
- ScCompressedArrayIterator<SCROW, BYTE> aIter(pDoc->GetRowFlagsArray(nTab), nStartRow, nEndRow);
- do
+ for (SCROW nRow = nStartRow; nRow <= nEndRow; ++nRow)
{
- if (*aIter & CR_FILTERED)
+ SCROW nLastRow = nRow;
+ if (pDoc->RowFiltered(nRow, nTab, NULL, &nLastRow))
{
// use nStartCol/nEndCol, so the multi mark area isn't extended to all columns
// (visible in repaint for indentation)
-
- rMark.SetMultiMarkArea( ScRange( nStartCol, aIter.GetRangeStart(), nTab,
- nEndCol, aIter.GetRangeEnd(), nTab ), FALSE );
+ rMark.SetMultiMarkArea(
+ ScRange(nStartCol, nRow, nTab, nEndCol, nLastRow, nTab), false);
bChanged = true;
+ nRow = nLastRow;
}
}
- while (aIter.NextRange());
}
if ( bChanged && !rMark.HasAnyMultiMarks() )
@@ -295,34 +294,29 @@ void ScViewUtil::UnmarkFiltered( ScMarkData& rMark, ScDocument* pDoc )
// static
-bool ScViewUtil::FitToUnfilteredRows( ScRange & rRange, const ScDocument * pDoc, size_t nRows )
+bool ScViewUtil::FitToUnfilteredRows( ScRange & rRange, ScDocument * pDoc, size_t nRows )
{
SCTAB nTab = rRange.aStart.Tab();
bool bOneTabOnly = (nTab == rRange.aEnd.Tab());
// Always fit the range on its first sheet.
DBG_ASSERT( bOneTabOnly, "ScViewUtil::ExtendToUnfilteredRows: works only on one sheet");
SCROW nStartRow = rRange.aStart.Row();
- // FillArrayForCondition() usually is the fastest to determine such a set
- // in one pass, even if the array isn't used but the last element.
- SCROW* pArr = new SCROW[nRows];
- size_t nCount = pDoc->GetRowFlagsArray( nTab).FillArrayForCondition(
- nStartRow, MAXROW, CR_FILTERED, 0, pArr, nRows);
- if (nCount)
- rRange.aEnd.SetRow( pArr[nCount-1]);
- delete [] pArr;
- return nCount == nRows && bOneTabOnly;
+ SCROW nLastRow = pDoc->LastNonFilteredRow(nStartRow, MAXROW, nTab);
+ if (ValidRow(nLastRow))
+ rRange.aEnd.SetRow(nLastRow);
+ SCROW nCount = pDoc->CountNonFilteredRows(nStartRow, MAXROW, nTab);
+ return static_cast<size_t>(nCount) == nRows && bOneTabOnly;
}
// static
-bool ScViewUtil::HasFiltered( const ScRange& rRange, const ScDocument* pDoc )
+bool ScViewUtil::HasFiltered( const ScRange& rRange, ScDocument* pDoc )
{
SCROW nStartRow = rRange.aStart.Row();
SCROW nEndRow = rRange.aEnd.Row();
for (SCTAB nTab=rRange.aStart.Tab(); nTab<=rRange.aEnd.Tab(); nTab++)
{
- if ( pDoc->GetRowFlagsArray( nTab).HasCondition( nStartRow, nEndRow,
- CR_FILTERED, CR_FILTERED ) )
+ if (pDoc->HasFilteredRows(nStartRow, nEndRow, nTab))
return true;
}
diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index da8e6efdad55..855db09ff50c 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -215,6 +215,8 @@
<menu:menuitem menu:id=".uno:Hide"/>
<menu:menuitem menu:id=".uno:Show"/>
<menu:menuitem menu:id=".uno:SheetRightToLeft"/>
+ <menu:menuseparator/>
+ <menu:menuitem menu:id=".uno:SetTabBgColor"/>
</menu:menupopup>
</menu:menu>
<menu:menuitem menu:id=".uno:ToggleMergeCells"/>
diff --git a/sc/util/makefile.mk b/sc/util/makefile.mk
index b7b12e07ee6a..980d271ae7c0 100644
--- a/sc/util/makefile.mk
+++ b/sc/util/makefile.mk
@@ -255,6 +255,7 @@ LIB8OBJFILES = \
$(SLO)$/attrdlg.obj \
$(SLO)$/scuiimoptdlg.obj \
$(SLO)$/strindlg.obj \
+ $(SLO)$/tabbgcolordlg.obj \
$(SLO)$/shtabdlg.obj \
$(SLO)$/scendlg.obj \
$(SLO)$/pvfundlg.obj \
@@ -314,7 +315,7 @@ SHL9STDLIBS= \
$(ISCLIB) \
$(VCLLIB) \
$(TKLIB) \
- $(SVXMSFILTERLIB) \
+ $(MSFILTERLIB) \
$(FORLIB)
SHL9DEPN=$(SHL1TARGETN) $(SHL8TARGETN)
diff --git a/scaddins/source/analysis/analysis.cxx b/scaddins/source/analysis/analysis.cxx
index bbc58ed27c9c..0d206d0286dd 100644
--- a/scaddins/source/analysis/analysis.cxx
+++ b/scaddins/source/analysis/analysis.cxx
@@ -915,21 +915,21 @@ double SAL_CALL AnalysisAddIn::getLcm( constREFXPS& xOpt, const SEQSEQ( double )
}
-double SAL_CALL AnalysisAddIn::getBesseli( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE
+double SAL_CALL AnalysisAddIn::getBesseli( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE
{
double fRet = sca::analysis::BesselI( fNum, nOrder );
RETURN_FINITE( fRet );
}
-double SAL_CALL AnalysisAddIn::getBesselj( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE
+double SAL_CALL AnalysisAddIn::getBesselj( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE
{
double fRet = sca::analysis::BesselJ( fNum, nOrder );
RETURN_FINITE( fRet );
}
-double SAL_CALL AnalysisAddIn::getBesselk( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE
+double SAL_CALL AnalysisAddIn::getBesselk( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE
{
if( nOrder < 0 || fNum <= 0.0 )
THROW_IAE;
@@ -939,7 +939,7 @@ double SAL_CALL AnalysisAddIn::getBesselk( double fNum, sal_Int32 nOrder ) THROW
}
-double SAL_CALL AnalysisAddIn::getBessely( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE
+double SAL_CALL AnalysisAddIn::getBessely( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE
{
if( nOrder < 0 || fNum <= 0.0 )
THROW_IAE;
diff --git a/scaddins/source/analysis/analysis.hxx b/scaddins/source/analysis/analysis.hxx
index fbf7dd012050..ff789838b299 100644
--- a/scaddins/source/analysis/analysis.hxx
+++ b/scaddins/source/analysis/analysis.hxx
@@ -36,6 +36,7 @@
#include <com/sun/star/sheet/addin/XAnalysis.hpp>
#include <com/sun/star/sheet/LocalizedName.hpp>
#include <com/sun/star/sheet/XCompatibilityNames.hpp>
+#include <com/sun/star/sheet/NoConvergenceException.hpp>
#include <cppuhelper/implbase5.hxx> // helper for implementations
@@ -143,10 +144,10 @@ public:
virtual double SAL_CALL getGcd( constREFXPS& xOpt, const SEQSEQ( double )& aVLst, const SEQ( ANY )& aOptVLst ) THROWDEF_RTE_IAE;
virtual double SAL_CALL getLcm( constREFXPS& xOpt, const SEQSEQ( double )& aVLst, const SEQ( ANY )& aOptVLst ) THROWDEF_RTE_IAE;
- virtual double SAL_CALL getBesseli( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE;
- virtual double SAL_CALL getBesselj( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE;
- virtual double SAL_CALL getBesselk( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE;
- virtual double SAL_CALL getBessely( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE;
+ virtual double SAL_CALL getBesseli( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE;
+ virtual double SAL_CALL getBesselj( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE;
+ virtual double SAL_CALL getBesselk( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE;
+ virtual double SAL_CALL getBessely( double fNum, sal_Int32 nOrder ) THROWDEF_RTE_IAE_NCE;
virtual STRING SAL_CALL getBin2Oct( constREFXPS& xOpt, const STRING& aNum, const ANY& rPlaces ) THROWDEF_RTE_IAE;
virtual double SAL_CALL getBin2Dec( const STRING& aNum ) THROWDEF_RTE_IAE;
diff --git a/scaddins/source/analysis/analysisadd.idl b/scaddins/source/analysis/analysisadd.idl
index 14b47ac256fc..6245bff9ad5a 100644
--- a/scaddins/source/analysis/analysisadd.idl
+++ b/scaddins/source/analysis/analysisadd.idl
@@ -25,6 +25,9 @@
*
************************************************************************/
+#ifndef __com_sun_star_sheet_NoConvergenceException_idl__
+#include <com/sun/star/sheet/NoConvergenceException.idl>
+#endif
#include <com/sun/star/uno/XInterface.idl>
#include <com/sun/star/beans/XPropertySet.idl>
@@ -145,19 +148,23 @@ module addin
/// besseli.
double getBesseli( [in] double Num, [in] long Order )
- raises( com::sun::star::lang::IllegalArgumentException );
+ raises( com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::sheet::NoConvergenceException );
/// besselj.
double getBesselj( [in] double Num, [in] long Order )
- raises( com::sun::star::lang::IllegalArgumentException );
+ raises( com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::sheet::NoConvergenceException );
/// besselk.
double getBesselk( [in] double Num, [in] long Order )
- raises( com::sun::star::lang::IllegalArgumentException );
+ raises( com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::sheet::NoConvergenceException );
/// bessely.
double getBessely( [in] double Num, [in] long Order )
- raises( com::sun::star::lang::IllegalArgumentException );
+ raises( com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::sheet::NoConvergenceException );
/// bin2oct.
string getBin2Oct(
diff --git a/scaddins/source/analysis/analysisdefs.hxx b/scaddins/source/analysis/analysisdefs.hxx
index 81f7435abc19..dae4205e2d84 100644
--- a/scaddins/source/analysis/analysisdefs.hxx
+++ b/scaddins/source/analysis/analysisdefs.hxx
@@ -44,6 +44,8 @@
#define THROW_RTE throw CSS::uno::RuntimeException()
#define THROWDEF_RTE_IAE throw(CSS::uno::RuntimeException,CSS::lang::IllegalArgumentException)
#define THROW_IAE throw CSS::lang::IllegalArgumentException()
+#define THROWDEF_RTE_IAE_NCE throw(CSS::uno::RuntimeException,CSS::lang::IllegalArgumentException,CSS::sheet::NoConvergenceException)
+#define THROW_NCE throw CSS::sheet::NoConvergenceException()
#define CHK_Freq ( nFreq != 1 && nFreq != 2 && nFreq != 4 )
#define CHK_FINITE(d) if( !::rtl::math::isFinite( d ) ) THROW_IAE
diff --git a/scaddins/source/analysis/analysishelper.cxx b/scaddins/source/analysis/analysishelper.cxx
index 417d30c24d9b..d47c02a4e961 100644
--- a/scaddins/source/analysis/analysishelper.cxx
+++ b/scaddins/source/analysis/analysishelper.cxx
@@ -2530,8 +2530,8 @@ ConvertDataList::ConvertDataList( void )
NEWD( "ly3", 1.1810108125623799E-51, CDC_Volume ); // *** Cubic light-year
NEWD( "MTON", 1.4125866688595436E00, CDC_Volume ); // *** Measurement ton
NEWD( "tspm", 5.0000000000000000E02, CDC_Volume ); // *** Modern teaspoon
- NEWD( "uk_gal", 2.6411458333333333E-01, CDC_Volume ); // U.K. / Imperial gallon ??
- NEWD( "uk_qt", 1.0564583333333333E00, CDC_Volume ); // U.K. / Imperial quart ??
+ NEWD( "uk_gal", 2.199694619402070E-01, CDC_Volume ); // U.K. / Imperial gallon
+ NEWD( "uk_qt", 8.798778477608300E-01, CDC_Volume ); // U.K. / Imperial quart
// 1 Square Meter is...
NEWDP( "m2", 1.0000000000000000E00, CDC_Area ); // *** Square Meter
diff --git a/scaddins/source/analysis/bessel.cxx b/scaddins/source/analysis/bessel.cxx
index 9b1f79b6d405..f853b49eb443 100644
--- a/scaddins/source/analysis/bessel.cxx
+++ b/scaddins/source/analysis/bessel.cxx
@@ -31,6 +31,7 @@
#include <rtl/math.hxx>
using ::com::sun::star::lang::IllegalArgumentException;
+using ::com::sun::star::sheet::NoConvergenceException;
namespace sca {
namespace analysis {
@@ -47,93 +48,129 @@ const double THRESHOLD = 30.0; // Threshold for usage of approximation form
const double MAXEPSILON = 1e-10; // Maximum epsilon for end of iteration.
const sal_Int32 MAXITER = 100; // Maximum number of iterations.
-
// ============================================================================
// BESSEL J
// ============================================================================
/* The BESSEL function, first kind, unmodified:
-
- inf (-1)^k (x/2)^(n+2k)
- J_n(x) = SUM TERM(n,k) with TERM(n,k) := ---------------------
- k=0 k! (n+k)!
-
- Approximation for the BESSEL function, first kind, unmodified, for great x:
-
- J_n(x) ~ sqrt( 2 / (PI x) ) cos( x - n PI/2 - PI/4 ) for x>=0.
- */
+ The algorithm follows
+ http://www.reference-global.com/isbn/978-3-11-020354-7
+ Numerical Mathematics 1 / Numerische Mathematik 1,
+ An algorithm-based introduction / Eine algorithmisch orientierte Einführung
+ Deuflhard, Peter; Hohmann, Andreas
+ Berlin, New York (Walter de Gruyter) 2008
+ 4. überarb. u. erw. Aufl. 2008
+ eBook ISBN: 978-3-11-020355-4
+ Chapter 6.3.2 , algorithm 6.24
+ The source is in German.
+ The BesselJ-function is a special case of the adjoint summation with
+ a_k = 2*(k-1)/x for k=1,...
+ b_k = -1, for all k, directly substituted
+ m_0=1, m_k=2 for k even, and m_k=0 for k odd, calculated on the fly
+ alpha_k=1 for k=N and alpha_k=0 otherwise
+*/
// ----------------------------------------------------------------------------
-double BesselJ( double x, sal_Int32 n ) throw( IllegalArgumentException )
+double BesselJ( double x, sal_Int32 N ) throw (IllegalArgumentException, NoConvergenceException)
+
{
- if( n < 0 )
+ if( N < 0 )
throw IllegalArgumentException();
-
- double fResult = 0.0;
- if( fabs( x ) <= THRESHOLD )
+ if (x==0.0)
+ return (N==0) ? 1.0 : 0.0;
+
+ /* The algorithm works only for x>0, therefore remember sign. BesselJ
+ with integer order N is an even function for even N (means J(-x)=J(x))
+ and an odd function for odd N (means J(-x)=-J(x)).*/
+ double fSign = (N % 2 == 1 && x < 0) ? -1.0 : 1.0;
+ double fX = fabs(x);
+
+ const double fMaxIteration = 9000000.0; //experimental, for to return in < 3 seconds
+ double fEstimateIteration = fX * 1.5 + N;
+ bool bAsymptoticPossible = pow(fX,0.4) > N;
+ if (fEstimateIteration > fMaxIteration)
{
- /* Start the iteration without TERM(n,0), which is set here.
-
- TERM(n,0) = (x/2)^n / n!
- */
- double fTerm = pow( x / 2.0, (double)n ) / Fak( n );
- sal_Int32 nK = 1; // Start the iteration with k=1.
- fResult = fTerm; // Start result with TERM(n,0).
-
- const double fSqrX = x * x / -4.0;
+ if (bAsymptoticPossible)
+ return fSign * sqrt(f_2_DIV_PI/fX)* cos(fX-N*f_PI_DIV_2-f_PI_DIV_4);
+ else
+ throw NoConvergenceException();
+ }
- do
+ double epsilon = 1.0e-15; // relative error
+ bool bHasfound = false;
+ double k= 0.0;
+ // e_{-1} = 0; e_0 = alpha_0 / b_2
+ double u ; // u_0 = e_0/f_0 = alpha_0/m_0 = alpha_0
+
+ // first used with k=1
+ double m_bar; // m_bar_k = m_k * f_bar_{k-1}
+ double g_bar; // g_bar_k = m_bar_k - a_{k+1} + g_{k-1}
+ double g_bar_delta_u; // g_bar_delta_u_k = f_bar_{k-1} * alpha_k
+ // - g_{k-1} * delta_u_{k-1} - m_bar_k * u_{k-1}
+ // f_{-1} = 0.0; f_0 = m_0 / b_2 = 1/(-1) = -1
+ double g = 0.0; // g_0= f_{-1} / f_0 = 0/(-1) = 0
+ double delta_u = 0.0; // dummy initialize, first used with * 0
+ double f_bar = -1.0; // f_bar_k = 1/f_k, but only used for k=0
+
+ if (N==0)
+ {
+ //k=0; alpha_0 = 1.0
+ u = 1.0; // u_0 = alpha_0
+ // k = 1.0; at least one step is necessary
+ // m_bar_k = m_k * f_bar_{k-1} ==> m_bar_1 = 0.0
+ g_bar_delta_u = 0.0; // alpha_k = 0.0, m_bar = 0.0; g= 0.0
+ g_bar = - 2.0/fX; // k = 1.0, g = 0.0
+ delta_u = g_bar_delta_u / g_bar;
+ u = u + delta_u ; // u_k = u_{k-1} + delta_u_k
+ g = -1.0 / g_bar; // g_k=b_{k+2}/g_bar_k
+ f_bar = f_bar * g; // f_bar_k = f_bar_{k-1}* g_k
+ k = 2.0;
+ // From now on all alpha_k = 0.0 and k > N+1
+ }
+ else
+ { // N >= 1 and alpha_k = 0.0 for k<N
+ u=0.0; // u_0 = alpha_0
+ for (k =1.0; k<= N-1; k = k + 1.0)
{
- /* Calculation of TERM(n,k) from TERM(n,k-1):
-
- (-1)^k (x/2)^(n+2k)
- TERM(n,k) = ---------------------
- k! (n+k)!
-
- (-1)(-1)^(k-1) (x/2)^2 (x/2)^(n+2(k-1))
- = -----------------------------------------
- k (k-1)! (n+k) (n+k-1)!
-
- -(x/2)^2 (-1)^(k-1) (x/2)^(n+2(k-1))
- = ---------- * -----------------------------
- k(n+k) (k-1)! (n+k-1)!
-
- -(x^2/4)
- = ---------- TERM(n,k-1)
- k(n+k)
- */
- fTerm *= fSqrX; // defined above as -(x^2/4)
- fTerm /= (nK * (nK + n));
- fResult += fTerm;
+ m_bar=2.0 * fmod(k-1.0, 2.0) * f_bar;
+ g_bar_delta_u = - g * delta_u - m_bar * u; // alpha_k = 0.0
+ g_bar = m_bar - 2.0*k/fX + g;
+ delta_u = g_bar_delta_u / g_bar;
+ u = u + delta_u;
+ g = -1.0/g_bar;
+ f_bar=f_bar * g;
}
- while( (fabs( fTerm ) > MAXEPSILON) && (++nK < MAXITER) );
+ // Step alpha_N = 1.0
+ m_bar=2.0 * fmod(k-1.0, 2.0) * f_bar;
+ g_bar_delta_u = f_bar - g * delta_u - m_bar * u; // alpha_k = 1.0
+ g_bar = m_bar - 2.0*k/fX + g;
+ delta_u = g_bar_delta_u / g_bar;
+ u = u + delta_u;
+ g = -1.0/g_bar;
+ f_bar = f_bar * g;
+ k = k + 1.0;
}
- else
+ // Loop until desired accuracy, always alpha_k = 0.0
+ do
{
- /* Approximation for the BESSEL function, first kind, unmodified:
-
- J_n(x) ~ sqrt( 2 / (PI x) ) cos( x - n PI/2 - PI/4 ) for x>=0.
-
- The BESSEL function J_n with n IN {0,2,4,...} is axially symmetric at
- x=0, means J_n(x) = J_n(-x). Therefore the approximation for x<0 is:
-
- J_n(x) = J_n(|x|) for x<0 and n IN {0,2,4,...}.
-
- The BESSEL function J_n with n IN {1,3,5,...} is point-symmetric at
- x=0, means J_n(x) = -J_n(-x). Therefore the approximation for x<0 is:
-
- J_n(x) = -J_n(|x|) for x<0 and n IN {1,3,5,...}.
- */
- double fXAbs = fabs( x );
- fResult = sqrt( f_2_DIV_PI / fXAbs ) * cos( fXAbs - n * f_PI_DIV_2 - f_PI_DIV_4 );
- if( (n & 1) && (x < 0.0) )
- fResult = -fResult;
+ m_bar = 2.0 * fmod(k-1.0, 2.0) * f_bar;
+ g_bar_delta_u = - g * delta_u - m_bar * u;
+ g_bar = m_bar - 2.0*k/fX + g;
+ delta_u = g_bar_delta_u / g_bar;
+ u = u + delta_u;
+ g = -1.0/g_bar;
+ f_bar = f_bar * g;
+ bHasfound = (fabs(delta_u)<=fabs(u)*epsilon);
+ k = k + 1.0;
}
- return fResult;
+ while (!bHasfound && k <= fMaxIteration);
+ if (bHasfound)
+ return u * fSign;
+ else
+ throw NoConvergenceException(); // unlikely to happen
}
-
// ============================================================================
// BESSEL I
// ============================================================================
@@ -151,7 +188,7 @@ double BesselJ( double x, sal_Int32 n ) throw( IllegalArgumentException )
// ----------------------------------------------------------------------------
-double BesselI( double x, sal_Int32 n ) throw( IllegalArgumentException )
+double BesselI( double x, sal_Int32 n ) throw( IllegalArgumentException, NoConvergenceException )
{
if( n < 0 )
throw IllegalArgumentException();
@@ -222,7 +259,7 @@ double BesselI( double x, sal_Int32 n ) throw( IllegalArgumentException )
// ============================================================================
-double Besselk0( double fNum ) throw( IllegalArgumentException )
+double Besselk0( double fNum ) throw( IllegalArgumentException, NoConvergenceException )
{
double fRet;
@@ -248,7 +285,7 @@ double Besselk0( double fNum ) throw( IllegalArgumentException )
}
-double Besselk1( double fNum ) throw( IllegalArgumentException )
+double Besselk1( double fNum ) throw( IllegalArgumentException, NoConvergenceException )
{
double fRet;
@@ -275,7 +312,7 @@ double Besselk1( double fNum ) throw( IllegalArgumentException )
}
-double BesselK( double fNum, sal_Int32 nOrder ) throw( IllegalArgumentException )
+double BesselK( double fNum, sal_Int32 nOrder ) throw( IllegalArgumentException, NoConvergenceException )
{
switch( nOrder )
{
@@ -301,87 +338,136 @@ double BesselK( double fNum, sal_Int32 nOrder ) throw( IllegalArgumentException
}
}
+// ============================================================================
+// BESSEL Y
+// ============================================================================
-double Bessely0( double fNum ) throw( IllegalArgumentException )
+/* The BESSEL function, second kind, unmodified:
+ The algorithm for order 0 and for order 1 follows
+ http://www.reference-global.com/isbn/978-3-11-020354-7
+ Numerical Mathematics 1 / Numerische Mathematik 1,
+ An algorithm-based introduction / Eine algorithmisch orientierte Einführung
+ Deuflhard, Peter; Hohmann, Andreas
+ Berlin, New York (Walter de Gruyter) 2008
+ 4. überarb. u. erw. Aufl. 2008
+ eBook ISBN: 978-3-11-020355-4
+ Chapter 6.3.2 , algorithm 6.24
+ The source is in German.
+ See #i31656# for a commented version of the implementation, attachment #desc6
+ http://www.openoffice.org/nonav/issues/showattachment.cgi/63609/Comments%20to%20the%20implementation%20of%20the%20Bessel%20functions.odt
+*/
+
+double Bessely0( double fX ) throw( IllegalArgumentException, NoConvergenceException )
{
- double fRet;
-
- if( fNum < 8.0 )
+ if (fX <= 0)
+ throw IllegalArgumentException();
+ const double fMaxIteration = 9000000.0; // should not be reached
+ if (fX > 5.0e+6) // iteration is not considerable better then approximation
+ return sqrt(1/f_PI/fX)
+ *(rtl::math::sin(fX)-rtl::math::cos(fX));
+ const double epsilon = 1.0e-15;
+ const double EulerGamma = 0.57721566490153286060;
+ double alpha = log(fX/2.0)+EulerGamma;
+ double u = alpha;
+
+ double k = 1.0;
+ double m_bar = 0.0;
+ double g_bar_delta_u = 0.0;
+ double g_bar = -2.0 / fX;
+ double delta_u = g_bar_delta_u / g_bar;
+ double g = -1.0/g_bar;
+ double f_bar = -1 * g;
+
+ double sign_alpha = 1.0;
+ double km1mod2;
+ bool bHasFound = false;
+ k = k + 1;
+ do
{
- double y = fNum * fNum;
-
- double f1 = -2957821389.0 + y * ( 7062834065.0 + y * ( -512359803.6 +
- y * ( 10879881.29 + y * ( -86327.92757 + y * 228.4622733 ) ) ) );
-
- double f2 = 40076544269.0 + y * ( 745249964.8 + y * ( 7189466.438 +
- y * ( 47447.26470 + y * ( 226.1030244 + y ) ) ) );
-
- fRet = f1 / f2 + 0.636619772 * BesselJ( fNum, 0 ) * log( fNum );
+ km1mod2 = fmod(k-1.0,2.0);
+ m_bar=(2.0*km1mod2) * f_bar;
+ if (km1mod2 == 0.0)
+ alpha = 0.0;
+ else
+ {
+ alpha = sign_alpha * (4.0/k);
+ sign_alpha = -sign_alpha;
+ }
+ g_bar_delta_u = f_bar * alpha - g * delta_u - m_bar * u;
+ g_bar = m_bar - (2.0*k)/fX + g;
+ delta_u = g_bar_delta_u / g_bar;
+ u = u+delta_u;
+ g = -1.0 / g_bar;
+ f_bar = f_bar*g;
+ bHasFound = (fabs(delta_u)<=fabs(u)*epsilon);
+ k=k+1;
}
+ while (!bHasFound && k<fMaxIteration);
+ if (bHasFound)
+ return u*f_2_DIV_PI;
else
- {
- double z = 8.0 / fNum;
- double y = z * z;
- double xx = fNum - 0.785398164;
-
- double f1 = 1.0 + y * ( -0.1098628627e-2 + y * ( 0.2734510407e-4 +
- y * ( -0.2073370639e-5 + y * 0.2093887211e-6 ) ) );
-
- double f2 = -0.1562499995e-1 + y * ( 0.1430488765e-3 +
- y * ( -0.6911147651e-5 + y * ( 0.7621095161e-6 +
- y * ( -0.934945152e-7 ) ) ) );
-
- fRet = sqrt( 0.636619772 / fNum ) * ( sin( xx ) * f1 + z * cos( xx ) * f2 );
- }
-
- return fRet;
+ throw NoConvergenceException(); // not likely to happen
}
-
-double Bessely1( double fNum ) throw( IllegalArgumentException )
+// See #i31656# for a commented version of this implementation, attachment #desc6
+// http://www.openoffice.org/nonav/issues/showattachment.cgi/63609/Comments%20to%20the%20implementation%20of%20the%20Bessel%20functions.odt
+double Bessely1( double fX ) throw( IllegalArgumentException, NoConvergenceException )
{
- double fRet;
-
- if( fNum < 8.0 )
+ if (fX <= 0)
+ throw IllegalArgumentException();
+ const double fMaxIteration = 9000000.0; // should not be reached
+ if (fX > 5.0e+6) // iteration is not considerable better then approximation
+ return - sqrt(1/f_PI/fX)
+ *(rtl::math::sin(fX)+rtl::math::cos(fX));
+ const double epsilon = 1.0e-15;
+ const double EulerGamma = 0.57721566490153286060;
+ double alpha = 1.0/fX;
+ double f_bar = -1.0;
+ double g = 0.0;
+ double u = alpha;
+ double k = 1.0;
+ double m_bar = 0.0;
+ alpha = 1.0 - EulerGamma - log(fX/2.0);
+ double g_bar_delta_u = -alpha;
+ double g_bar = -2.0 / fX;
+ double delta_u = g_bar_delta_u / g_bar;
+ u = u + delta_u;
+ g = -1.0/g_bar;
+ f_bar = f_bar * g;
+ double sign_alpha = -1.0;
+ double km1mod2; //will be (k-1) mod 2
+ double q; // will be (k-1) div 2
+ bool bHasFound = false;
+ k = k + 1.0;
+ do
{
- double y = fNum * fNum;
-
- double f1 = fNum * ( -0.4900604943e13 + y * ( 0.1275274390e13 +
- y * ( -0.5153438139e11 + y * ( 0.7349264551e9 +
- y * ( -0.4237922726e7 + y * 0.8511937935e4 ) ) ) ) );
-
- double f2 = 0.2499580570e14 + y * ( 0.4244419664e12 +
- y * ( 0.3733650367e10 + y * ( 0.2245904002e8 +
- y * ( 0.1020426050e6 + y * ( 0.3549632885e3 + y ) ) ) ) );
-
- fRet = f1 / f2 + 0.636619772 * ( BesselJ( fNum, 1 ) * log( fNum ) - 1.0 / fNum );
+ km1mod2 = fmod(k-1.0,2.0);
+ m_bar=(2.0*km1mod2) * f_bar;
+ q = (k-1.0)/2.0;
+ if (km1mod2 == 0.0) // k is odd
+ {
+ alpha = sign_alpha * (1.0/q + 1.0/(q+1.0));
+ sign_alpha = -sign_alpha;
+ }
+ else
+ alpha = 0.0;
+ g_bar_delta_u = f_bar * alpha - g * delta_u - m_bar * u;
+ g_bar = m_bar - (2.0*k)/fX + g;
+ delta_u = g_bar_delta_u / g_bar;
+ u = u+delta_u;
+ g = -1.0 / g_bar;
+ f_bar = f_bar*g;
+ bHasFound = (fabs(delta_u)<=fabs(u)*epsilon);
+ k=k+1;
}
+ while (!bHasFound && k<fMaxIteration);
+ if (bHasFound)
+ return -u*2.0/f_PI;
else
- {
-#if 0
- // #i12430# don't know the intention of this piece of code...
- double z = 8.0 / fNum;
- double y = z * z;
- double xx = fNum - 2.356194491;
-
- double f1 = 1.0 + y * ( 0.183105e-2 + y * ( -0.3516396496e-4 +
- y * ( 0.2457520174e-5 + y * ( -0.240337019e6 ) ) ) );
-
- double f2 = 0.04687499995 + y * ( -0.2002690873e-3 +
- y * ( 0.8449199096e-5 + y * ( -0.88228987e-6 +
- y * 0.105787412e-6 ) ) );
-
- fRet = sqrt( 0.636619772 / fNum ) * ( sin( xx ) * f1 + z * cos( xx ) * f2 );
-#endif
- // #i12430# ...but this seems to work much better.
- fRet = sqrt( 0.636619772 / fNum ) * sin( fNum - 2.356194491 );
- }
-
- return fRet;
+ throw NoConvergenceException();
}
-
-double BesselY( double fNum, sal_Int32 nOrder ) throw( IllegalArgumentException )
+double BesselY( double fNum, sal_Int32 nOrder ) throw( IllegalArgumentException, NoConvergenceException )
{
switch( nOrder )
{
@@ -407,7 +493,6 @@ double BesselY( double fNum, sal_Int32 nOrder ) throw( IllegalArgumentException
}
}
-
// ============================================================================
} // namespace analysis
diff --git a/scaddins/source/analysis/bessel.hxx b/scaddins/source/analysis/bessel.hxx
index 24e8217537d5..c94b4f1a9b77 100644
--- a/scaddins/source/analysis/bessel.hxx
+++ b/scaddins/source/analysis/bessel.hxx
@@ -29,6 +29,7 @@
#define SCA_BESSEL_HXX
#include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/sheet/NoConvergenceException.hpp>
#include <sal/types.h>
namespace sca {
@@ -39,16 +40,16 @@ namespace analysis {
// ============================================================================
/** Returns the result for the unmodified BESSEL function of first kind (J), n-th order, at point x. */
-double BesselJ( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException );
+double BesselJ( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::sheet::NoConvergenceException );
/** Returns the result for the modified BESSEL function of first kind (I), n-th order, at point x. */
-double BesselI( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException );
+double BesselI( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::sheet::NoConvergenceException );
/** Returns the result for the unmodified BESSEL function of second kind (Y), n-th order, at point x. */
-double BesselY( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException );
+double BesselY( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::sheet::NoConvergenceException );
/** Returns the result for the modified BESSEL function of second kind (K), n-th order, at point x. */
-double BesselK( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException );
+double BesselK( double x, sal_Int32 n ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::sheet::NoConvergenceException );
// ============================================================================
diff --git a/scaddins/source/analysis/makefile.mk b/scaddins/source/analysis/makefile.mk
index d837d644dc21..a23f9886b9b1 100644
--- a/scaddins/source/analysis/makefile.mk
+++ b/scaddins/source/analysis/makefile.mk
@@ -73,7 +73,8 @@ UNOTYPES=\
com.sun.star.uno.XComponentContext \
com.sun.star.util.Date \
com.sun.star.util.XNumberFormatter \
- com.sun.star.util.XNumberFormatTypes
+ com.sun.star.util.XNumberFormatTypes \
+ com.sun.star.sheet.NoConvergenceException
# --- Files -------------------------------------
diff --git a/scp2/source/ooo/common_brand.scp b/scp2/source/ooo/common_brand.scp
index 6558dd1a55ff..f505a886cba8 100644
--- a/scp2/source/ooo/common_brand.scp
+++ b/scp2/source/ooo/common_brand.scp
@@ -43,7 +43,6 @@ Module gid_Module_Root_Brand
gid_Brand_Dir_Share_C05_Faq,
gid_Brand_Dir_Share_Config,
gid_Brand_Dir_Share_Extension,
- gid_Brand_Dir_Share_Extension_Install,
gid_Brand_Dir_Share_Uno_Packages,
gid_Brand_Dir_Share_Uno_Packages_Cache,
gid_Brand_Dir_Share_Registry,
@@ -80,6 +79,8 @@ Module gid_Module_Root_Brand
gid_Brand_File_Lib_Msvcr80,
gid_Brand_File_Lib_Msvcp80,
gid_Brand_File_Lib_Msvcm80,
+ gid_Brand_File_Lib_Oirm,
+ gid_Brand_File_Lib_Oirm2,
gid_Brand_File_Msvcm80crt_Manifest,
gid_Brand_File_Lib_Npsoplugin,
gid_Brand_File_Lib_Subscrib_C05,
@@ -91,9 +92,11 @@ Module gid_Module_Root_Brand
gid_Brand_File_Share_Xdg_Draw,
gid_Brand_File_Share_Xdg_Extension,
gid_Brand_File_Share_Xdg_Impress,
+ gid_Brand_File_Share_Xdg_JavaFilter,
gid_Brand_File_Share_Xdg_Math,
gid_Brand_File_Share_Xdg_Printeradmin,
gid_Brand_File_Share_Xdg_QStart,
+ gid_Brand_File_Share_Xdg_StartCenter,
gid_Brand_File_Share_Xdg_Writer);
Unixlinks = (gid_Brand_Unixlink_BasisLink,
gid_Brand_Unixlink_Program,
@@ -119,6 +122,7 @@ Module gid_Module_Langpack_Brand_Template
gid_Brand_Dir_Share_Readme);
Files = (gid_Brand_File_Res_Iso,
gid_Brand_File_Res_Ooo,
+ gid_Brand_File_Res_Oirm,
gid_Brand_File_Help_C05_Sdatabase_Zip,
gid_Brand_File_Help_C05_Scalc_Zip,
gid_Brand_File_Help_C05_Sdraw_Zip,
@@ -212,10 +216,179 @@ Directory gid_Brand_Dir_Share_Extension
DosName = "extension";
End
-Directory gid_Brand_Dir_Share_Extension_Install
+Directory gid_Brand_Dir_Share_Extensions
+ ParentID = gid_Brand_Dir_Share;
+ DosName = "extensions";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Install
ParentID = gid_Brand_Dir_Share_Extension;
DosName = "install";
- Styles = (CREATE);
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Af
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-af";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Ca
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-ca";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Cs
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-cs";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Da
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-da";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_De_At
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-de-AT";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_De_Ch
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-de-CH";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_De_De
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-de-DE";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_En
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-en";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Es
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-es";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Et
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-et";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Fr
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-fr";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Gl
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-gl";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_He
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-he";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Hu
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-hu";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_It
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-it";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Ku_Tr
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-ku-TR";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Lt
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-lt";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Ne
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-ne";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Nl
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-nl";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_No
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-no";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Pl
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-pl";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Pt
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-pt";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Ro
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-ro";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Ru
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-ru";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Sk
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-sk";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Sl
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-sl";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Sr
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-sr";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Sv
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-sv";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Sw
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-sw";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Th
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-th";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Vi
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-vi";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Dict_Zu
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "dict-zu";
+End
+
+Directory gid_Brand_Dir_Share_Extensions_Oooimprovement
+ ParentID = gid_Brand_Dir_Share_Extensions;
+ DosName = "OOoImprovement";
End
Directory gid_Brand_Dir_Share_Uno_Packages
@@ -569,6 +742,25 @@ File gid_Brand_File_Share_Xdg_Writer
End
#endif
+#if defined UNX && ! defined MACOSX
+File gid_Brand_File_Share_Xdg_StartCenter
+ TXT_FILE_BODY;
+ Dir = gid_Brand_Dir_Share_Xdg;
+ Name = "startcenter.desktop";
+ Styles = (PACKED,SCPZIP_REPLACE);
+End
+#endif
+
+#if defined UNX && ! defined MACOSX
+File gid_Brand_File_Share_Xdg_JavaFilter
+ TXT_FILE_BODY;
+ Dir = gid_Brand_Dir_Share_Xdg;
+ Name = "javafilter.desktop";
+ Styles = (PACKED,SCPZIP_REPLACE);
+End
+#endif
+
+
#if defined WNT && defined(_gcc3)
File gid_Brand_File_Lib_Mingwm10
BIN_FILE_BODY;
@@ -1025,6 +1217,22 @@ ProfileItem gid_Brand_Profileitem_Fundamental_Ooo_Base_Dir
#endif
End
+ProfileItem gid_Brand_Profileitem_Fundamental_Uno_Bundled_Extensions
+ ModuleID = gid_Module_Root_Brand;
+ ProfileID = gid_Brand_Profile_Fundamental_Ini;
+ Section = "Bootstrap";
+ Key = "BUNDLED_EXTENSIONS";
+ Value = "${${OOO_BASE_DIR}/program/" PROFILENAME(fundamentalbasis) ":BUNDLED_EXTENSIONS}";
+End
+
+ProfileItem gid_Brand_Profileitem_Fundamental_Uno_Bundled_Extensions_User
+ ModuleID = gid_Module_Root_Brand;
+ ProfileID = gid_Brand_Profile_Fundamental_Ini;
+ Section = "Bootstrap";
+ Key = "BUNDLED_EXTENSIONS_USER";
+ Value = "${${OOO_BASE_DIR}/program/" PROFILENAME(fundamentalbasis) ":BUNDLED_EXTENSIONS_USER}";
+End
+
ProfileItem gid_Brand_Profileitem_Fundamental_Uno_Shared_Packages_Cache
ModuleID = gid_Module_Root_Brand;
ProfileID = gid_Brand_Profile_Fundamental_Ini;
@@ -1033,6 +1241,14 @@ ProfileItem gid_Brand_Profileitem_Fundamental_Uno_Shared_Packages_Cache
Value = "${${OOO_BASE_DIR}/program/" PROFILENAME(fundamentalbasis) ":UNO_SHARED_PACKAGES_CACHE}";
End
+ProfileItem gid_Brand_Profileitem_Fundamental_Uno_Shared_Extensions_User
+ ModuleID = gid_Module_Root_Brand;
+ ProfileID = gid_Brand_Profile_Fundamental_Ini;
+ Section = "Bootstrap";
+ Key = "SHARED_EXTENSIONS_USER";
+ Value = "${${OOO_BASE_DIR}/program/" PROFILENAME(fundamentalbasis) ":SHARED_EXTENSIONS_USER}";
+End
+
ProfileItem gid_Brand_Profileitem_Fundamental_Uno_User_Packages_Cache
ModuleID = gid_Module_Root_Brand;
ProfileID = gid_Brand_Profile_Fundamental_Ini;
@@ -1041,6 +1257,14 @@ ProfileItem gid_Brand_Profileitem_Fundamental_Uno_User_Packages_Cache
Value = "${${OOO_BASE_DIR}/program/" PROFILENAME(fundamentalbasis) ":UNO_USER_PACKAGES_CACHE}";
End
+ProfileItem gid_Brand_Profileitem_Fundamental_Uno_Tmp_Extensions
+ ModuleID = gid_Module_Root_Brand;
+ ProfileID = gid_Brand_Profile_Fundamental_Ini;
+ Section = "Bootstrap";
+ Key = "TMP_EXTENSIONS";
+ Value = "${${OOO_BASE_DIR}/program/" PROFILENAME(fundamentalbasis) ":TMP_EXTENSIONS}";
+End
+
ProfileItem gid_Brand_Profileitem_Fundamental_Ure_More_Types
ModuleID = gid_Module_Root_Brand;
ProfileID = gid_Brand_Profile_Fundamental_Ini;
diff --git a/scp2/source/ooo/file_ooo.scp b/scp2/source/ooo/file_ooo.scp
index 81ee4eac2960..a600c135de01 100755..100644
--- a/scp2/source/ooo/file_ooo.scp
+++ b/scp2/source/ooo/file_ooo.scp
@@ -1870,288 +1870,288 @@ End
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Af
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Af;
Name = "dict-af.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Ca
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Ca;
Name = "dict-ca.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Cs
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Cs;
Name = "dict-cs.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Da
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Da;
Name = "dict-da.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_De_AT
- Dir = gid_Brand_Dir_Share_Extension_Install;
- Name = "dict-de-AT.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_De_At;
+ Name = "dict-de-AT.oxt";
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_De_CH
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_De_Ch;
Name = "dict-de-CH.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_De_DE
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_De_De;
Name = "dict-de-DE.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_En
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_En;
Name = "dict-en.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Es
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Es;
Name = "dict-es.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Et
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Et;
Name = "dict-et.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Fr
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Fr;
Name = "dict-fr.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Gl
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Gl;
Name = "dict-gl.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_He
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_He;
Name = "dict-he.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Hu
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Hu;
Name = "dict-hu.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_It
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_It;
Name = "dict-it.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Ku_Tr
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Ku_Tr;
Name = "dict-ku-TR.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Lt
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Lt;
Name = "dict-lt.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Ne
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Ne;
Name = "dict-ne.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Nl
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Nl;
Name = "dict-nl.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_No
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_No;
Name = "dict-no.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Pl
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Pl;
Name = "dict-pl.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Pt
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Pt;
Name = "dict-pt.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Ro
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Ro;
Name = "dict-ro.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Ru
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Ru;
Name = "dict-ru.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Sk
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Sk;
Name = "dict-sk.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Sl
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Sl;
Name = "dict-sl.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Sr
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Sr;
Name = "dict-sr.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Sv
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Sv;
Name = "dict-sv.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Sw
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Sw;
Name = "dict-sw.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Th
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Th;
Name = "dict-th.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Vi
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Vi;
Name = "dict-vi.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
#ifndef WITHOUT_MYSPELL_DICTS
File gid_File_Extension_Dictionary_Zu
- Dir = gid_Brand_Dir_Share_Extension_Install;
+ Dir = gid_Brand_Dir_Share_Extensions_Dict_Zu;
Name = "dict-zu.oxt";
- Styles = (PACKED, FORCELANGUAGEPACK);
+ Styles = (PACKED, FORCELANGUAGEPACK, ARCHIVE);
UnixRights = 444;
End
#endif
@@ -2159,8 +2159,8 @@ End
// #ifdef BUILD_SPECIAL
// File gid_File_Extension_Oxt_Oooimprovement
// Name = "OOoImprovement.oxt";
-// Dir = gid_Brand_Dir_Share_Extension_Install;
-// Styles = (PACKED);
+// Dir = gid_Brand_Dir_Share_Extensions_Oooimprovement;
+// Styles = (PACKED, ARCHIVE);
// UnixRights = 444;
// End
// #endif
diff --git a/scp2/source/ooo/module_hidden_ooo.scp b/scp2/source/ooo/module_hidden_ooo.scp
index a4ab3bfab762..19bdd6cc3c25 100644
--- a/scp2/source/ooo/module_hidden_ooo.scp
+++ b/scp2/source/ooo/module_hidden_ooo.scp
@@ -808,354 +808,4 @@ End
// End
// #endif
-Module gid_Module_Root_Extension_Dictionary_Af
- Name = "gid_Module_Root_Extension_Dictionary_Af";
- Description = "gid_Module_Root_Extension_Dictionary_Af";
- Files = (gid_File_Extension_Dictionary_Af);
- InstallOrder = "2000";
- Spellcheckerlanguage = "af";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Ca
- Name = "gid_Module_Root_Extension_Dictionary_Ca";
- Description = "gid_Module_Root_Extension_Dictionary_Ca";
- Files = (gid_File_Extension_Dictionary_Ca);
- InstallOrder = "2000";
- Spellcheckerlanguage = "ca";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Cs
- Name = "gid_Module_Root_Extension_Dictionary_Cs";
- Description = "gid_Module_Root_Extension_Dictionary_Cs";
- Files = (gid_File_Extension_Dictionary_Cs);
- InstallOrder = "2000";
- Spellcheckerlanguage = "cs";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Da
- Name = "gid_Module_Root_Extension_Dictionary_Da";
- Description = "gid_Module_Root_Extension_Dictionary_Da";
- Files = (gid_File_Extension_Dictionary_Da);
- InstallOrder = "2000";
- Spellcheckerlanguage = "da";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_De_AT
- Name = "gid_Module_Root_Extension_Dictionary_De_AT";
- Description = "gid_Module_Root_Extension_Dictionary_De_AT";
- Files = (gid_File_Extension_Dictionary_De_AT);
- InstallOrder = "2000";
- Spellcheckerlanguage = "de-AT";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_De_CH
- Name = "gid_Module_Root_Extension_Dictionary_De_CH";
- Description = "gid_Module_Root_Extension_Dictionary_De_CH";
- Files = (gid_File_Extension_Dictionary_De_CH);
- InstallOrder = "2000";
- Spellcheckerlanguage = "de-CH";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_De_DE
- Name = "gid_Module_Root_Extension_Dictionary_De_DE";
- Description = "gid_Module_Root_Extension_Dictionary_De_DE";
- Files = (gid_File_Extension_Dictionary_De_DE);
- InstallOrder = "2000";
- Spellcheckerlanguage = "de-DE";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_En
- Name = "gid_Module_Root_Extension_Dictionary_En";
- Description = "gid_Module_Root_Extension_Dictionary_En";
- Files = (gid_File_Extension_Dictionary_En);
- InstallOrder = "2000";
- Spellcheckerlanguage = "en-US";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Es
- Name = "gid_Module_Root_Extension_Dictionary_Es";
- Description = "gid_Module_Root_Extension_Dictionary_Es";
- Files = (gid_File_Extension_Dictionary_Es);
- InstallOrder = "2000";
- Spellcheckerlanguage = "es";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Et
- Name = "gid_Module_Root_Extension_Dictionary_Et";
- Description = "gid_Module_Root_Extension_Dictionary_Et";
- Files = (gid_File_Extension_Dictionary_Et);
- InstallOrder = "2000";
- Spellcheckerlanguage = "et";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Fr
- Name = "gid_Module_Root_Extension_Dictionary_Fr";
- Description = "gid_Module_Root_Extension_Dictionary_Fr";
- Files = (gid_File_Extension_Dictionary_Fr);
- InstallOrder = "2000";
- Spellcheckerlanguage = "fr";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Gl
- Name = "gid_Module_Root_Extension_Dictionary_Gl";
- Description = "gid_Module_Root_Extension_Dictionary_Gl";
- Files = (gid_File_Extension_Dictionary_Gl);
- InstallOrder = "2000";
- Spellcheckerlanguage = "gl";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_He
- Name = "gid_Module_Root_Extension_Dictionary_He";
- Description = "gid_Module_Root_Extension_Dictionary_He";
- Files = (gid_File_Extension_Dictionary_He);
- InstallOrder = "2000";
- Spellcheckerlanguage = "he";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Hu
- Name = "gid_Module_Root_Extension_Dictionary_Hu";
- Description = "gid_Module_Root_Extension_Dictionary_Hu";
- Files = (gid_File_Extension_Dictionary_Hu);
- InstallOrder = "2000";
- Spellcheckerlanguage = "hu";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_It
- Name = "gid_Module_Root_Extension_Dictionary_It";
- Description = "gid_Module_Root_Extension_Dictionary_It";
- Files = (gid_File_Extension_Dictionary_It);
- InstallOrder = "2000";
- Spellcheckerlanguage = "it";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Ku_Tr
- Name = "gid_Module_Root_Extension_Dictionary_Ku_Tr";
- Description = "gid_Module_Root_Extension_Dictionary_Ku_Tr";
- Files = (gid_File_Extension_Dictionary_Ku_Tr);
- InstallOrder = "2000";
- Spellcheckerlanguage = "ku-TR";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Lt
- Name = "gid_Module_Root_Extension_Dictionary_Lt";
- Description = "gid_Module_Root_Extension_Dictionary_Lt";
- Files = (gid_File_Extension_Dictionary_Lt);
- InstallOrder = "2000";
- Spellcheckerlanguage = "lt";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Ne
- Name = "gid_Module_Root_Extension_Dictionary_Ne";
- Description = "gid_Module_Root_Extension_Dictionary_Ne";
- Files = (gid_File_Extension_Dictionary_Ne);
- InstallOrder = "2000";
- Spellcheckerlanguage = "ne";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Nl
- Name = "gid_Module_Root_Extension_Dictionary_Nl";
- Description = "gid_Module_Root_Extension_Dictionary_Nl";
- Files = (gid_File_Extension_Dictionary_Nl);
- InstallOrder = "2000";
- Spellcheckerlanguage = "nl";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_No
- Name = "gid_Module_Root_Extension_Dictionary_No";
- Description = "gid_Module_Root_Extension_Dictionary_No";
- Files = (gid_File_Extension_Dictionary_No);
- InstallOrder = "2000";
- Spellcheckerlanguage = "no";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Pl
- Name = "gid_Module_Root_Extension_Dictionary_Pl";
- Description = "gid_Module_Root_Extension_Dictionary_Pl";
- Files = (gid_File_Extension_Dictionary_Pl);
- InstallOrder = "2000";
- Spellcheckerlanguage = "pl";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Pt
- Name = "gid_Module_Root_Extension_Dictionary_Pt";
- Description = "gid_Module_Root_Extension_Dictionary_Pt";
- Files = (gid_File_Extension_Dictionary_Pt);
- InstallOrder = "2000";
- Spellcheckerlanguage = "pt";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Ro
- Name = "gid_Module_Root_Extension_Dictionary_Ro";
- Description = "gid_Module_Root_Extension_Dictionary_Ro";
- Files = (gid_File_Extension_Dictionary_Ro);
- InstallOrder = "2000";
- Spellcheckerlanguage = "ro";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Ru
- Name = "gid_Module_Root_Extension_Dictionary_Ru";
- Description = "gid_Module_Root_Extension_Dictionary_Ru";
- Files = (gid_File_Extension_Dictionary_Ru);
- InstallOrder = "2000";
- Spellcheckerlanguage = "ru";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-Module gid_Module_Root_Extension_Dictionary_Sk
- Name = "gid_Module_Root_Extension_Dictionory_Sk";
- Description = "gid_Module_Root_Extension_Dictionary_Sk";
- Files = (gid_File_Extension_Dictionary_Sk);
- InstallOrder = "2000";
- Spellcheckerlanguage = "sk";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Sl
- Name = "gid_Module_Root_Extension_Dictionary_Sl";
- Description = "gid_Module_Root_Extension_Dictionary_Sl";
- Files = (gid_File_Extension_Dictionary_Sl);
- InstallOrder = "2000";
- Spellcheckerlanguage = "sl";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Sr
- Name = "gid_Module_Root_Extension_Dictionary_Sr";
- Description = "gid_Module_Root_Extension_Dictionary_Sr";
- Files = (gid_File_Extension_Dictionary_Sr);
- InstallOrder = "2000";
- Spellcheckerlanguage = "sr";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Sv
- Name = "gid_Module_Root_Extension_Dictionary_Sv";
- Description = "gid_Module_Root_Extension_Dictionary_Sv";
- Files = (gid_File_Extension_Dictionary_Sv);
- InstallOrder = "2000";
- Spellcheckerlanguage = "sv";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Sw
- Name = "gid_Module_Root_Extension_Dictionary_Sw";
- Description = "gid_Module_Root_Extension_Dictionary_Sw";
- Files = (gid_File_Extension_Dictionary_Sw);
- InstallOrder = "2000";
- Spellcheckerlanguage = "sw";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Th
- Name = "gid_Module_Root_Extension_Dictionary_Th";
- Description = "gid_Module_Root_Extension_Dictionary_Th";
- Files = (gid_File_Extension_Dictionary_Th);
- InstallOrder = "2000";
- Spellcheckerlanguage = "th";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Vi
- Name = "gid_Module_Root_Extension_Dictionary_Vi";
- Description = "gid_Module_Root_Extension_Dictionary_Vi";
- Files = (gid_File_Extension_Dictionary_Vi);
- InstallOrder = "2000";
- Spellcheckerlanguage = "vi";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
-
-Module gid_Module_Root_Extension_Dictionary_Zu
- Name = "gid_Module_Root_Extension_Dictionary_Zu";
- Description = "gid_Module_Root_Extension_Dictionary_Zu";
- Files = (gid_File_Extension_Dictionary_Zu);
- InstallOrder = "2000";
- Spellcheckerlanguage = "zu";
- PackageInfo = "packinfo_office.txt";
- ParentID = gid_Module_Root;
- Styles = (HIDDEN_ROOT);
-End
diff --git a/scp2/source/ooo/module_ooo.scp b/scp2/source/ooo/module_ooo.scp
index d77c05768fbb..5b1de3897f77 100644
--- a/scp2/source/ooo/module_ooo.scp
+++ b/scp2/source/ooo/module_ooo.scp
@@ -49,3 +49,362 @@ Module gid_Module_Optional
Sortkey = "200";
MOD_NAME_DESC ( MODULE_OPTIONAL );
End
+
+Module gid_Module_Dictionaries
+ ParentID = gid_Module_Root;
+ XPDParentID = "root";
+ Sortkey = "300";
+ MOD_NAME_DESC ( MODULE_DICTIONARIES );
+End
+
+Module gid_Module_Root_Extension_Dictionary_Af
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_AF );
+ Files = (gid_File_Extension_Dictionary_Af);
+ InstallOrder = "2000";
+ Sortkey = "510";
+ Spellcheckerlanguage = "af";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Ca
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_CA );
+ Files = (gid_File_Extension_Dictionary_Ca);
+ InstallOrder = "2000";
+ Sortkey = "520";
+ Spellcheckerlanguage = "ca";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Cs
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_CS );
+ Files = (gid_File_Extension_Dictionary_Cs);
+ InstallOrder = "2000";
+ Sortkey = "530";
+ Spellcheckerlanguage = "cs";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Da
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_DA );
+ Files = (gid_File_Extension_Dictionary_Da);
+ Sortkey = "540";
+ InstallOrder = "2000";
+ Spellcheckerlanguage = "da";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_De_AT
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_DE_AT );
+ Files = (gid_File_Extension_Dictionary_De_AT);
+ InstallOrder = "2000";
+ Sortkey = "570";
+ Spellcheckerlanguage = "de-AT";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_De_CH
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_DE_CH );
+ Files = (gid_File_Extension_Dictionary_De_CH);
+ InstallOrder = "2000";
+ Sortkey = "580";
+ Spellcheckerlanguage = "de-CH";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_De_DE
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_DE_DE );
+ Files = (gid_File_Extension_Dictionary_De_DE);
+ InstallOrder = "2000";
+ Sortkey = "575";
+ Spellcheckerlanguage = "de-DE";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_En
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_EN );
+ Files = (gid_File_Extension_Dictionary_En);
+ InstallOrder = "2000";
+ Sortkey = "550";
+ Spellcheckerlanguage = "en-US";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Es
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_ES );
+ Files = (gid_File_Extension_Dictionary_Es);
+ InstallOrder = "2000";
+ Sortkey = "720";
+ Spellcheckerlanguage = "es";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Et
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_ET );
+ Files = (gid_File_Extension_Dictionary_Et);
+ InstallOrder = "2000";
+ Sortkey = "555";
+ Spellcheckerlanguage = "et";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Fr
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_FR );
+ Files = (gid_File_Extension_Dictionary_Fr);
+ InstallOrder = "2000";
+ Sortkey = "560";
+ Spellcheckerlanguage = "fr";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Gl
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_GL );
+ Files = (gid_File_Extension_Dictionary_Gl);
+ InstallOrder = "2000";
+ Sortkey = "565";
+ Spellcheckerlanguage = "gl";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_He
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_HE );
+ Files = (gid_File_Extension_Dictionary_He);
+ InstallOrder = "2000";
+ Sortkey = "590";
+ Spellcheckerlanguage = "he";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Hu
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_HU );
+ Files = (gid_File_Extension_Dictionary_Hu);
+ InstallOrder = "2000";
+ Sortkey = "600";
+ Spellcheckerlanguage = "hu";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_It
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_IT );
+ Files = (gid_File_Extension_Dictionary_It);
+ InstallOrder = "2000";
+ Sortkey = "610";
+ Spellcheckerlanguage = "it";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Ku_Tr
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_KU_TR );
+ Files = (gid_File_Extension_Dictionary_Ku_Tr);
+ InstallOrder = "2000";
+ Sortkey = "620";
+ Spellcheckerlanguage = "ku-TR";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Lt
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_LT );
+ Files = (gid_File_Extension_Dictionary_Lt);
+ InstallOrder = "2000";
+ Sortkey = "630";
+ Spellcheckerlanguage = "lt";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Ne
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_NE );
+ Files = (gid_File_Extension_Dictionary_Ne);
+ InstallOrder = "2000";
+ Sortkey = "640";
+ Spellcheckerlanguage = "ne";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Nl
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_NL );
+ Files = (gid_File_Extension_Dictionary_Nl);
+ InstallOrder = "2000";
+ Sortkey = "545";
+ Spellcheckerlanguage = "nl";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_No
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_NO );
+ Files = (gid_File_Extension_Dictionary_No);
+ InstallOrder = "2000";
+ Sortkey = "650";
+ Spellcheckerlanguage = "no";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Pl
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_PL );
+ Files = (gid_File_Extension_Dictionary_Pl);
+ InstallOrder = "2000";
+ Sortkey = "660";
+ Spellcheckerlanguage = "pl";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Pt
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_PT );
+ Files = (gid_File_Extension_Dictionary_Pt);
+ InstallOrder = "2000";
+ Sortkey = "515";
+ Spellcheckerlanguage = "pt";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Ro
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_RO );
+ Files = (gid_File_Extension_Dictionary_Ro);
+ InstallOrder = "2000";
+ Sortkey = "670";
+ Spellcheckerlanguage = "ro";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Ru
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_RU );
+ Files = (gid_File_Extension_Dictionary_Ru);
+ InstallOrder = "2000";
+ Sortkey = "680";
+ Spellcheckerlanguage = "ru";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Sk
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_SK );
+ Files = (gid_File_Extension_Dictionary_Sk);
+ InstallOrder = "2000";
+ Sortkey = "700";
+ Spellcheckerlanguage = "sk";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Sl
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_SL );
+ Files = (gid_File_Extension_Dictionary_Sl);
+ InstallOrder = "2000";
+ Sortkey = "710";
+ Spellcheckerlanguage = "sl";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Sr
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_SR );
+ Files = (gid_File_Extension_Dictionary_Sr);
+ InstallOrder = "2000";
+ Sortkey = "690";
+ Spellcheckerlanguage = "sr";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Sv
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_SV );
+ Files = (gid_File_Extension_Dictionary_Sv);
+ InstallOrder = "2000";
+ Sortkey = "740";
+ Spellcheckerlanguage = "sv";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Sw
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_SW );
+ Files = (gid_File_Extension_Dictionary_Sw);
+ InstallOrder = "2000";
+ Sortkey = "730";
+ Spellcheckerlanguage = "sw";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Th
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_TH );
+ Files = (gid_File_Extension_Dictionary_Th);
+ InstallOrder = "2000";
+ Sortkey = "750";
+ Spellcheckerlanguage = "th";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Vi
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_VI );
+ Files = (gid_File_Extension_Dictionary_Vi);
+ InstallOrder = "2000";
+ Sortkey = "760";
+ Spellcheckerlanguage = "vi";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
+
+Module gid_Module_Root_Extension_Dictionary_Zu
+ MOD_NAME_DESC ( MODULE_EXTENSION_DICTIONARY_ZU );
+ Files = (gid_File_Extension_Dictionary_Zu);
+ InstallOrder = "2000";
+ Sortkey = "770";
+ Spellcheckerlanguage = "zu";
+ PackageInfo = "packinfo_office.txt";
+ ParentID = gid_Module_Dictionaries;
+ Styles = ();
+End
diff --git a/scp2/source/ooo/module_ooo.ulf b/scp2/source/ooo/module_ooo.ulf
index 4660a2a442df..ee818ae4a82e 100644
--- a/scp2/source/ooo/module_ooo.ulf
+++ b/scp2/source/ooo/module_ooo.ulf
@@ -43,5 +43,200 @@ en-US = "Optional Components"
[STR_DESC_MODULE_OPTIONAL]
en-US = "Common components and additional programs shared by all %PRODUCTNAME programs."
+[STR_NAME_MODULE_DICTIONARIES]
+en-US = "Dictionaries"
+[STR_DESC_MODULE_DICTIONARIES]
+en-US = "Spelling and hyphenation dictionaries and thesauri."
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_AF]
+en-US = "Afrikaans"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_AF]
+en-US = "Afrikaans spell checker"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_CA]
+en-US = "Catalan"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_CA]
+en-US = "Spelling and hyphenation dictionaries and thesaurus for Catalan language (general)"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_CS]
+en-US = "Czech"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_CS]
+en-US = "Czech thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_DA]
+en-US = "Danish"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_DA]
+en-US = "Spelling and hyphenation dictionary for Danish"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_DE_AT]
+en-US = "German (Austria)"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_DE_AT]
+en-US = "German (AT-frami) spelling, hyphenation, thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_DE_CH]
+en-US = "German (Switzerland)"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_DE_CH]
+en-US = "German (CH-frami) spelling, hyphenation, thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_DE_DE]
+en-US = "German (Germany)"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_DE_DE]
+en-US = "German (DE-frami) spelling, hyphenation, thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_EN]
+en-US = "English"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_EN]
+en-US = "English spelling and hyphenation dictionaries and thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_ES]
+en-US = "Spanish"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_ES]
+en-US = "Spanish spelling dictionary"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_ET]
+en-US = "Estonian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_ET]
+en-US = "Estonian spelling and hyphenation dictionaries"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_FR]
+en-US = "French"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_FR]
+en-US = "French 'Classic and Reform 1990' spelling, thesaurus and hyphenation"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_GL]
+en-US = "Galician"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_GL]
+en-US = "Galician spellchecker dictionary for OpenOffice.org"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_HE]
+en-US = "Hebrew"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_HE]
+en-US = "Hebrew spell check dictionary"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_HU]
+en-US = "Hungarian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_HU]
+en-US = "Hungarian spelling dictionary, hyphenation patterns, and thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_IT]
+en-US = "Italian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_IT]
+en-US = "Italian spelling and hyphenation dictionaries and thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_KU_TR]
+en-US = "Kurdish (Turkey)"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_KU_TR]
+en-US = "Kurdish (Turkey) spell check dictionary"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_LT]
+en-US = "Lithuanian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_LT]
+en-US = "Lithuanian spelling and hyphenation dictionaries"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_NE]
+en-US = "Nepali"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_NE]
+en-US = "Nepali spelling dictionary and thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_NL]
+en-US = "Dutch"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_NL]
+en-US = "Dutch spelling and hyphenation dictionaries"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_NO]
+en-US = "Norwegian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_NO]
+en-US = "Norwegian dictionaries (Nynorsk and Bokmal)"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_PL]
+en-US = "Polish"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_PL]
+en-US = "Polish spell check dictionary, hyphenation rules and thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_PT]
+en-US = "Brazilian Portuguese"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_PT]
+en-US = "Brazilian Portuguese Spelling Dictionary - 1990 Spelling Agreement"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_RO]
+en-US = "Romanian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_RO]
+en-US = "Romanian Dictionaries"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_RU]
+en-US = "Russian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_RU]
+en-US = "Russian hyphenation dictionary and thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_SK]
+en-US = "Slovak"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_SK]
+en-US = "Slovak spell check dictionary, hyphenation rules and thesaurus"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_SL]
+en-US = "Slovenian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_SL]
+en-US = "Slovenian dictionary pack"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_SR]
+en-US = "Serbian"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_SR]
+en-US = "Serbian spelling and hyphenation dictionaries"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_SV]
+en-US = "Swedish"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_SV]
+en-US = "Swedish Dictionary"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_SW]
+en-US = "Swahili"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_SW]
+en-US = "Swahili spelling dictionary"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_TH]
+en-US = "Thai"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_TH]
+en-US = "Thai spelling dictionary"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_VI]
+en-US = "Vietnamese"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_VI]
+en-US = "Vietnamese spellchecker dictionary"
+
+[STR_NAME_MODULE_EXTENSION_DICTIONARY_ZU]
+en-US = "Zulu"
+
+[STR_DESC_MODULE_EXTENSION_DICTIONARY_ZU]
+en-US = "Zulu hyphenation dictionary"
diff --git a/scp2/source/ooo/profileitem_ooo.scp b/scp2/source/ooo/profileitem_ooo.scp
index ebd0b87fbabd..9818d5b26749 100644
--- a/scp2/source/ooo/profileitem_ooo.scp
+++ b/scp2/source/ooo/profileitem_ooo.scp
@@ -173,6 +173,24 @@ End
#endif
+ProfileItem gid_Profileitem_Uno_Uno_Bundled_Extensions
+ ProfileID = gid_Profile_Uno_Ini;
+ ModuleID = gid_Module_Root;
+ Section = "Bootstrap";
+ Order = 1;
+ Key = "BUNDLED_EXTENSIONS";
+ Value = "$BRAND_BASE_DIR/share/extensions";
+End
+
+ProfileItem gid_Profileitem_Uno_Uno_Bundled_Extensions_User
+ ProfileID = gid_Profile_Uno_Ini;
+ ModuleID = gid_Module_Root;
+ Section = "Bootstrap";
+ Order = 1;
+ Key = "BUNDLED_EXTENSIONS_USER";
+ Value = "${$BRAND_BASE_DIR/program/" PROFILENAME(bootstrap) ":UserInstallation}/user/extensions/bundled";
+End
+
ProfileItem gid_Profileitem_Uno_Uno_Shared_Packages
ProfileID = gid_Profile_Uno_Ini;
ModuleID = gid_Module_Root;
@@ -191,6 +209,15 @@ ProfileItem gid_Profileitem_Uno_Uno_Shared_Packages_Cache
Value = "$UNO_SHARED_PACKAGES/cache";
End
+ProfileItem gid_Profileitem_Uno_Uno_Shared_Extensions_User
+ ProfileID = gid_Profile_Uno_Ini;
+ ModuleID = gid_Module_Root;
+ Section = "Bootstrap";
+ Order = 1;
+ Key = "SHARED_EXTENSIONS_USER";
+ Value = "${$BRAND_BASE_DIR/program/" PROFILENAME(bootstrap) ":UserInstallation}/user/extensions/shared";
+End
+
ProfileItem gid_Profileitem_Uno_Uno_User_Packages
ProfileID = gid_Profile_Uno_Ini;
ModuleID = gid_Module_Root;
@@ -200,6 +227,15 @@ ProfileItem gid_Profileitem_Uno_Uno_User_Packages
Value = "${$BRAND_BASE_DIR/program/" PROFILENAME(bootstrap) ":UserInstallation}/user/uno_packages";
End
+ProfileItem gid_Profileitem_Uno_Uno_Bundled_Tmp_Extensions
+ ProfileID = gid_Profile_Uno_Ini;
+ ModuleID = gid_Module_Root;
+ Section = "Bootstrap";
+ Order = 1;
+ Key = "TMP_EXTENSIONS";
+ Value = "${$BRAND_BASE_DIR/program/" PROFILENAME(bootstrap) ":UserInstallation}/user/extensions/tmp";
+End
+
ProfileItem gid_Profileitem_Uno_Uno_User_Packages_Cache
ProfileID = gid_Profile_Uno_Ini;
ModuleID = gid_Module_Root;
@@ -208,6 +244,14 @@ ProfileItem gid_Profileitem_Uno_Uno_User_Packages_Cache
Key = "UNO_USER_PACKAGES_CACHE";
Value = "$UNO_USER_PACKAGES/cache";
End
+ProfileItem gid_Profileitem_Uno_Pkg_BundledUnoFile
+ ProfileID = gid_Profile_Uno_Ini;
+ ModuleID = gid_Module_Root;
+ Section = "Bootstrap";
+ Order = 5;
+ Key = "PKG_BundledUnoFile";
+ Value = "$BUNDLED_EXTENSIONS_USER/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc";
+End
ProfileItem gid_Profileitem_Uno_Pkg_SharedUnoFile
ProfileID = gid_Profile_Uno_Ini;
@@ -215,7 +259,7 @@ ProfileItem gid_Profileitem_Uno_Pkg_SharedUnoFile
Section = "Bootstrap";
Order = 5;
Key = "PKG_SharedUnoFile";
- Value = "$UNO_SHARED_PACKAGES_CACHE/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc";
+ Value = "$SHARED_EXTENSIONS_USER/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc";
End
ProfileItem gid_Profileitem_Uno_Pkg_UserUnoFile
@@ -227,6 +271,22 @@ ProfileItem gid_Profileitem_Uno_Pkg_UserUnoFile
Value = "$UNO_USER_PACKAGES_CACHE/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc";
End
+ProfileItem gid_Profileitem_Fundamentalbasis_Uno_Bundled_Extensions
+ ModuleID = gid_Module_Root;
+ ProfileID = gid_Profile_Fundamentalbasis_Ini;
+ Section = "Bootstrap";
+ Key = "BUNDLED_EXTENSIONS";
+ Value = "${$ORIGIN/" PROFILENAME(uno) ":BUNDLED_EXTENSIONS}";
+End
+
+ProfileItem gid_Profileitem_Fundamentalbasis_Uno_Bundled_Extensions_User
+ ModuleID = gid_Module_Root;
+ ProfileID = gid_Profile_Fundamentalbasis_Ini;
+ Section = "Bootstrap";
+ Key = "BUNDLED_EXTENSIONS_USER";
+ Value = "${$ORIGIN/" PROFILENAME(uno) ":BUNDLED_EXTENSIONS_USER}";
+End
+
ProfileItem gid_Profileitem_Fundamentalbasis_Uno_Shared_Packages_Cache
ModuleID = gid_Module_Root;
ProfileID = gid_Profile_Fundamentalbasis_Ini;
@@ -235,6 +295,14 @@ ProfileItem gid_Profileitem_Fundamentalbasis_Uno_Shared_Packages_Cache
Value = "${$ORIGIN/" PROFILENAME(uno) ":UNO_SHARED_PACKAGES_CACHE}";
End
+ProfileItem gid_Profileitem_Fundamentalbasis_Uno_Shared_Extensions_User
+ ModuleID = gid_Module_Root;
+ ProfileID = gid_Profile_Fundamentalbasis_Ini;
+ Section = "Bootstrap";
+ Key = "SHARED_EXTENSIONS_USER";
+ Value = "${$ORIGIN/" PROFILENAME(uno) ":SHARED_EXTENSIONS_USER}";
+End
+
ProfileItem gid_Profileitem_Fundamentalbasis_Uno_User_Packages_Cache
ModuleID = gid_Module_Root;
ProfileID = gid_Profile_Fundamentalbasis_Ini;
@@ -243,15 +311,23 @@ ProfileItem gid_Profileitem_Fundamentalbasis_Uno_User_Packages_Cache
Value = "${$ORIGIN/" PROFILENAME(uno) ":UNO_USER_PACKAGES_CACHE}";
End
+ProfileItem gid_Profileitem_Fundamentalbasis_Uno_Tmp_Extensions
+ ModuleID = gid_Module_Root;
+ ProfileID = gid_Profile_Fundamentalbasis_Ini;
+ Section = "Bootstrap";
+ Key = "TMP_EXTENSIONS";
+ Value = "${$ORIGIN/" PROFILENAME(uno) ":TMP_EXTENSIONS}";
+End
+
ProfileItem gid_Profileitem_Fundamentalbasis_Ure_More_Types
ModuleID = gid_Module_Root;
ProfileID = gid_Profile_Fundamentalbasis_Ini;
Section = "Bootstrap";
Key = "URE_MORE_TYPES";
#if defined ENABLE_VBA && !defined VBA_EXTENSION
- Value = "$ORIGIN/offapi.rdb $ORIGIN/oovbaapi.rdb ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_TYPES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_TYPES}";
+ Value = "$ORIGIN/offapi.rdb $ORIGIN/oovbaapi.rdb ${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_TYPES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_TYPES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_BundledUnoFile}:UNO_TYPES}";
#else
- Value = "$ORIGIN/offapi.rdb ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_TYPES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_TYPES}";
+ Value = "$ORIGIN/offapi.rdb ${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_TYPES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_TYPES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_BundledUnoFile}:UNO_TYPES}";
#endif
End
@@ -260,7 +336,7 @@ ProfileItem gid_Profileitem_Fundamentalbasis_Ure_More_Services
ProfileID = gid_Profile_Fundamentalbasis_Ini;
Section = "Bootstrap";
Key = "URE_MORE_SERVICES";
- Value = "${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_SERVICES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_SERVICES} $ORIGIN/services.rdb";
+ Value = "${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_SERVICES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_SERVICES} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_BundledUnoFile}:UNO_SERVICES} $ORIGIN/services.rdb";
End
ProfileItem gid_Profileitem_Fundamentalbasis_Ure_More_Java_Types
@@ -268,7 +344,7 @@ ProfileItem gid_Profileitem_Fundamentalbasis_Ure_More_Java_Types
ProfileID = gid_Profile_Fundamentalbasis_Ini;
Section = "Bootstrap";
Key = "URE_MORE_JAVA_TYPES";
- Value = "$ORIGIN/classes/unoil.jar $ORIGIN/classes/ScriptFramework.jar ${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_JAVA_CLASSPATH} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_JAVA_CLASSPATH}";
+ Value = "$ORIGIN/classes/unoil.jar $ORIGIN/classes/ScriptFramework.jar ${${$ORIGIN/" PROFILENAME(uno) ":PKG_UserUnoFile}:UNO_JAVA_CLASSPATH} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_SharedUnoFile}:UNO_JAVA_CLASSPATH} ${${$ORIGIN/" PROFILENAME(uno) ":PKG_BundledUnoFile}:UNO_JAVA_CLASSPATH}";
End
ProfileItem gid_Profileitem_Fundamentalbasis_Ure_Java_Jfw_Shared_Data
diff --git a/scp2/source/ooo/ure.scp b/scp2/source/ooo/ure.scp
index 22aba304c09e..9aeaf32c5bcb 100755
--- a/scp2/source/ooo/ure.scp
+++ b/scp2/source/ooo/ure.scp
@@ -896,7 +896,7 @@ End
File gid_File_Dl_GccS
TXT_FILE_BODY;
Dir = SCP2_URE_DL_DIR;
- Name = SCP2_URE_DL_VER("gcc_s", "1");
+ Name = SCP2_URE_DL_VER("gcc_s", STRING(SHORTSTDC3));
Styles = (PACKED, VERSION_INDEPENDENT_COMP_ID);
// CompID = "C601D04B-2194-4F1B-BB09-7B4930D6E1DB";
End
diff --git a/scp2/source/ooo/windowscustomaction_ooo.scp b/scp2/source/ooo/windowscustomaction_ooo.scp
index 9228b5cd711c..568b3996a8b7 100755
--- a/scp2/source/ooo/windowscustomaction_ooo.scp
+++ b/scp2/source/ooo/windowscustomaction_ooo.scp
@@ -199,16 +199,6 @@ WindowsCustomAction gid_Customaction_Shellextensionsdll7
Assignment1 = ("InstallExecuteSequence", "REMOVE=\"ALL\" And Not PATCH", "InstallValidate");
End
-WindowsCustomAction gid_Customaction_Register_Extensions
- Name = "RegisterExtensions";
- Typ = "65";
- Source = "shlxtmsi.dll";
- Target = "RegisterExtensions";
- Inbinarytable = 1;
- Assignment1 = ("InstallExecuteSequence", "Not REMOVE=\"ALL\"", "end");
- Assignment2 = ("AdminExecuteSequence", "Not REMOVE=\"ALL\"", "end");
-End
-
WindowsCustomAction gid_Customaction_Set_Admininstall
Name = "SetAdminInstallProperty";
Typ = "65";
@@ -218,27 +208,6 @@ WindowsCustomAction gid_Customaction_Set_Admininstall
Assignment1 = ("AdminExecuteSequence", "", "InstallInitialize");
End
-/*
-WindowsCustomAction gid_Customaction_Remove_Extensions
- Name = "RemoveExtensions";
- Typ = "65";
- Source = "shlxtmsi.dll";
- Target = "RemoveExtensions";
- Inbinarytable = 1;
- Assignment1 = ("InstallExecuteSequence", "REMOVE=\"ALL\"", "Shellextensionsdll4");
-End
-*/
-
-WindowsCustomAction gid_Customaction_Deregister_Extensions
- Name = "DeregisterExtensions";
- Typ = "65";
- Source = "shlxtmsi.dll";
- Target = "DeregisterExtensions";
- Inbinarytable = 1;
- // Assignment1 = ("InstallExecuteSequence", "Not REMOVE=\"\"", "gid_Customaction_Remove_Extensions");
- Assignment1 = ("InstallExecuteSequence", "Not REMOVE=\"\"", "behind_IsolateComponents");
-End
-
WindowsCustomAction gid_Customaction_Check_Install_Directory
Name = "CheckInstallDirectory";
Typ = "65";
@@ -318,44 +287,6 @@ WindowsCustomAction gid_Customaction_Patch_InstallExchangeFiles
Assignment2 = ("AdminExecuteSequence", "", "behind_InstallFinalize");
End
-WindowsCustomAction gid_Customaction_Langpack_Register_Extensions
- Name = "RegisterExtensions";
- Typ = "65";
- Source = "lngpckinsthlp.dll";
- Target = "RegisterExtensions";
- Inbinarytable = 1;
- Assignment1 = ("InstallExecuteSequence", "", "end");
- Assignment2 = ("AdminExecuteSequence", "", "end");
-End
-
-WindowsCustomAction gid_Customaction_Langpack_Deregister_Extensions
- Name = "DeregisterExtensions";
- Typ = "65";
- Source = "lngpckinsthlp.dll";
- Target = "DeregisterExtensions";
- Inbinarytable = 1;
- Assignment1 = ("InstallExecuteSequence", "", "InstallInitialize");
-End
-
-WindowsCustomAction gid_Customaction_Patch_Register_Extensions
- Name = "RegisterExtensions";
- Typ = "65";
- Source = "patchmsi.dll";
- Target = "RegisterExtensions";
- Inbinarytable = 1;
- Assignment1 = ("InstallExecuteSequence", "", "end");
- Assignment2 = ("AdminExecuteSequence", "", "end");
-End
-
-WindowsCustomAction gid_Customaction_Patch_Deregister_Extensions
- Name = "DeregisterExtensions";
- Typ = "65";
- Source = "patchmsi.dll";
- Target = "DeregisterExtensions";
- Inbinarytable = 1;
- Assignment1 = ("InstallExecuteSequence", "", "InstallInitialize");
-End
-
WindowsCustomAction gid_Customaction_Patch_SetFeatureState
Name = "SetFeatureState";
Typ = "65";
diff --git a/scripting/java/com/sun/star/script/framework/container/UnoPkgContainer.java b/scripting/java/com/sun/star/script/framework/container/UnoPkgContainer.java
index 3b9e04a27210..edf6a2d806b7 100644
--- a/scripting/java/com/sun/star/script/framework/container/UnoPkgContainer.java
+++ b/scripting/java/com/sun/star/script/framework/container/UnoPkgContainer.java
@@ -44,15 +44,21 @@ import com.sun.star.io.XOutputStream;
import com.sun.star.io.XTruncate;
import com.sun.star.deployment.XPackage;
+import com.sun.star.deployment.ExtensionRemovedException;
public class UnoPkgContainer extends ParcelContainer
{
private Map registeredPackages = new HashMap();
+ protected String extensionDb;
+ protected String extensionRepository;
- public UnoPkgContainer( XComponentContext xCtx, String locationURL, String language ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
+ public UnoPkgContainer( XComponentContext xCtx, String locationURL,
+ String _extensionDb, String _extensionRepository, String language ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
{
super( xCtx, locationURL, language, false );
+ extensionDb = _extensionDb;
+ extensionRepository = _extensionRepository;
init();
}
@@ -217,8 +223,8 @@ public class UnoPkgContainer extends ParcelContainer
DeployedUnoPackagesDB dp = null;
try
{
- String path = containerUrl.substring( 0, containerUrl.lastIndexOf("/") );
- String packagesUrl = PathUtils.make_url( path, "Scripts/unopkg-desc.xml" );
+// String path = containerUrl.substring( 0, containerUrl.lastIndexOf("/") );
+ String packagesUrl = PathUtils.make_url( extensionDb, "/Scripts/" + extensionRepository + "-extension-desc.xml" );
LogUtils.DEBUG("getUnoPackagesDB() looking for existing db in " + packagesUrl );
if ( m_xSFA.exists( packagesUrl ) )
{
@@ -276,8 +282,8 @@ public class UnoPkgContainer extends ParcelContainer
OutputStream os = null;
try
{
- String path = containerUrl.substring( 0, containerUrl.lastIndexOf("/") );
- String packagesUrl = PathUtils.make_url( path, "Scripts/unopkg-desc.xml" );
+// String path = containerUrl.substring( 0, containerUrl.lastIndexOf("/") );
+ String packagesUrl = PathUtils.make_url( extensionDb, "/Scripts/" + extensionRepository + "-extension-desc.xml" );
xos = m_xSFA.openFileWrite( packagesUrl );
XTruncate xTrc = (XTruncate) UnoRuntime.queryInterface( XTruncate.class, xos );
if ( xTrc != null )
@@ -336,7 +342,15 @@ public class UnoPkgContainer extends ParcelContainer
LogUtils.DEBUG("** processUnoPackage getURL() -> " + uri );
LogUtils.DEBUG("** processUnoPackage getName() -> " + dPackage.getName() );
LogUtils.DEBUG("** processUnoPackage getMediaType() -> " + dPackage.getPackageType().getMediaType() );
- LogUtils.DEBUG("** processUnoPackage getDisplayName() -> " + dPackage.getDisplayName() );
+ try
+ {
+ LogUtils.DEBUG("** processUnoPackage getDisplayName() -> " + dPackage.getDisplayName() );
+ }
+ catch (com.sun.star.deployment.ExtensionRemovedException e)
+ {
+ throw new com.sun.star.lang.WrappedTargetException(e.toString(), this, e);
+ }
+
processUnoPackage( uri, language );
db = getUnoPackagesDB();
@@ -366,7 +380,10 @@ public class UnoPkgContainer extends ParcelContainer
String parentUrl = uri;
if ( uri.indexOf( "%2Funo_packages%2F" ) > -1 ||
- uri.indexOf( "/uno_packages/" ) > -1 )
+ uri.indexOf( "/uno_packages/" ) > -1 ||
+ uri.indexOf("$UNO_USER_PACKAGES_CACHE/") > -1 ||
+ uri.indexOf("$UNO_SHARED_PACKAGES_CACHE/") > -1 ||
+ uri.indexOf("$BUNDLED_EXTENSIONS/") > -1 )
{
//its in a bundle need to determine the uno-package file its in
LogUtils.DEBUG("processUnoPackage - is part of a uno bundle");
diff --git a/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java b/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java
index c43756072ba3..e83410f3f35c 100755
--- a/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java
+++ b/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java
@@ -213,26 +213,40 @@ public abstract class ScriptProvider
}
else
{
+ String extensionDb = null;
+ String extensionRepository = null;
+ if ( originalContextURL.startsWith( "bundled" ) )
+ {
+ contextUrl = "vnd.sun.star.expand:$BUNDLED_EXTENSIONS";
+ extensionDb = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionRepository = "bundled";
+ }
+
if ( originalContextURL.startsWith( "share" ) )
{
contextUrl = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::BaseInstallation}/share";
+ extensionDb = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionRepository = "shared";
}
else if ( originalContextURL.startsWith( "user" ) )
{
contextUrl = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionDb = "vnd.sun.star.expand:${$BRAND_BASE_DIR/program/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
+ extensionRepository = "user";
}
if ( originalContextURL.endsWith( "uno_packages") )
{
isPkgProvider = true;
}
- if ( originalContextURL.endsWith( "uno_packages") && !originalContextURL.equals( contextUrl ) )
+ if ( originalContextURL.endsWith( "uno_packages") && !originalContextURL.equals( contextUrl )
+ && !extensionRepository.equals("bundled"))
{
contextUrl = PathUtils.make_url( contextUrl, "uno_packages" );
}
if ( isPkgProvider )
{
- m_container = new UnoPkgContainer( m_xContext, contextUrl, language );
+ m_container = new UnoPkgContainer( m_xContext, contextUrl, extensionDb, extensionRepository, language );
}
else
{
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/filesystem/Bundle.properties b/scripting/java/org/openoffice/netbeans/modules/office/filesystem/Bundle.properties
index 3137b89dde94..f776ff9e7933 100644
--- a/scripting/java/org/openoffice/netbeans/modules/office/filesystem/Bundle.properties
+++ b/scripting/java/org/openoffice/netbeans/modules/office/filesystem/Bundle.properties
@@ -1,5 +1,6 @@
# Filesystems API
# {0} - root path
+# x-no-translate
LAB_invalid_file_system=invalid OpenOffice.org document {0}
# {0} - root path
LAB_valid_file_system={0}
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/loader/Bundle.properties b/scripting/java/org/openoffice/netbeans/modules/office/loader/Bundle.properties
index a3bf47447607..eab2fa1f3fbc 100644
--- a/scripting/java/org/openoffice/netbeans/modules/office/loader/Bundle.properties
+++ b/scripting/java/org/openoffice/netbeans/modules/office/loader/Bundle.properties
@@ -3,6 +3,7 @@
#HINT_myProp=<description of my property>
#LBL_DataNode_exec_sheet=Execution
#HINT_DataNode_exec_sheet=Properties pertaining to compiling, running, and debugging.
+# x-no-translate
LBL_loaderName=<display name of the data loader>
# Datasystems API
#PROP_myProp=<name of my property>
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/options/Bundle.properties b/scripting/java/org/openoffice/netbeans/modules/office/options/Bundle.properties
index b823204cb227..6a9112e8c768 100644
--- a/scripting/java/org/openoffice/netbeans/modules/office/options/Bundle.properties
+++ b/scripting/java/org/openoffice/netbeans/modules/office/options/Bundle.properties
@@ -1,4 +1,5 @@
# Options API
+# x-no-translate
LBL_settings=Office Settings
PROP_OfficeDirectory=Path to Office installation
HINT_OfficeDirectory=Path to the Office installation
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/resources/Bundle.properties b/scripting/java/org/openoffice/netbeans/modules/office/resources/Bundle.properties
index 58989c2506b7..22aea6525f3d 100644
--- a/scripting/java/org/openoffice/netbeans/modules/office/resources/Bundle.properties
+++ b/scripting/java/org/openoffice/netbeans/modules/office/resources/Bundle.properties
@@ -1,3 +1,4 @@
+# x-no-translate
Templates/OfficeScripting=Office Scripting
Templates/OfficeScripting/parcel.xml=Script Parcel Descriptor
Services/MIMEResolver/org-netbeans-modules-office-mime-resolver.xml=Script Parcel Descriptor File
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/wizard/Bundle.properties b/scripting/java/org/openoffice/netbeans/modules/office/wizard/Bundle.properties
index 0e4f2bd100c7..a40b4b373959 100644
--- a/scripting/java/org/openoffice/netbeans/modules/office/wizard/Bundle.properties
+++ b/scripting/java/org/openoffice/netbeans/modules/office/wizard/Bundle.properties
@@ -1,4 +1,5 @@
# Window System API
+# x-no-translate
# TopComponent
LBL_component_name=<name of component>
diff --git a/scripting/source/provider/ActiveMSPList.cxx b/scripting/source/provider/ActiveMSPList.cxx
index f8400ed77950..3c6206d8d051 100644
--- a/scripting/source/provider/ActiveMSPList.cxx
+++ b/scripting/source/provider/ActiveMSPList.cxx
@@ -59,6 +59,7 @@ ActiveMSPList::ActiveMSPList( const Reference< XComponentContext > & xContext )
{
userDirString = ::rtl::OUString::createFromAscii("user");
shareDirString = ::rtl::OUString::createFromAscii("share");
+ bundledDirString = ::rtl::OUString::createFromAscii("bundled");
}
ActiveMSPList::~ActiveMSPList()
@@ -307,6 +308,12 @@ ActiveMSPList::createNonDocMSPs()
Reference< provider::XScriptProvider > shareMsp( m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext( serviceName, args, m_xContext ), UNO_QUERY );
// should check if provider reference is valid
m_hMsps[ shareDirString ] = shareMsp;
+
+ args[ 0 ] <<= bundledDirString;
+ Reference< provider::XScriptProvider > bundledMsp( m_xContext->getServiceManager()->createInstanceWithArgumentsAndContext( serviceName, args, m_xContext ), UNO_QUERY );
+ // should check if provider reference is valid
+ m_hMsps[ bundledDirString ] = bundledMsp;
+
created = true;
}
diff --git a/scripting/source/provider/ActiveMSPList.hxx b/scripting/source/provider/ActiveMSPList.hxx
index 5adf2fc5a961..b127f3c41b16 100644
--- a/scripting/source/provider/ActiveMSPList.hxx
+++ b/scripting/source/provider/ActiveMSPList.hxx
@@ -107,6 +107,7 @@ private:
osl::Mutex m_mutex;
::rtl::OUString userDirString;
::rtl::OUString shareDirString;
+ ::rtl::OUString bundledDirString;
css::uno::Reference< css::uno::XComponentContext > m_xContext;
};
} // func_provider
diff --git a/scripting/source/pyprov/mailmerge.py b/scripting/source/pyprov/mailmerge.py
index f9c2f0f70b09..55c204f87dbf 100644
--- a/scripting/source/pyprov/mailmerge.py
+++ b/scripting/source/pyprov/mailmerge.py
@@ -16,6 +16,8 @@ import uno
import re
#to implement com::sun::star::mail::XMailServiceProvider
+#and
+#to implement com.sun.star.mail.XMailMessage
from com.sun.star.mail import XMailServiceProvider
from com.sun.star.mail import XMailService
@@ -37,7 +39,7 @@ from email import Encoders
from email.Header import Header
from email.MIMEMultipart import MIMEMultipart
from email.Utils import formatdate
-from email.Utils import formataddr
+from email.Utils import parseaddr
import sys, smtplib, imaplib, poplib
@@ -118,30 +120,46 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
print >> sys.stderr, "PyMailSMPTService sendMailMessage"
recipients = xMailMessage.getRecipients()
sendermail = xMailMessage.SenderAddress
- sendername = xMailMessage.SenderName
+ sendername = xMailMessage.SenderName
subject = xMailMessage.Subject
ccrecipients = xMailMessage.getCcRecipients()
bccrecipients = xMailMessage.getBccRecipients()
if dbg:
print >> sys.stderr, "PyMailSMPTService subject", subject
- print >> sys.stderr, "PyMailSMPTService from", sendername.encode('utf-8'), sendermail
- print >> sys.stderr, "PyMailSMTPService from", formataddr((sendername.encode('utf-8'), sendermail))
+ print >> sys.stderr, "PyMailSMPTService from", sendername.encode('utf-8')
+ print >> sys.stderr, "PyMailSMTPService from", sendermail
print >> sys.stderr, "PyMailSMPTService send to", recipients
attachments = xMailMessage.getAttachments()
+ textmsg = Message()
+
content = xMailMessage.Body
flavors = content.getTransferDataFlavors()
- flavor = flavors[0]
if dbg:
- print >> sys.stderr, "PyMailSMPTService mimetype is", flavor.MimeType
- textbody = content.getTransferData(flavor)
+ print >> sys.stderr, "PyMailSMPTService flavors len", len(flavors)
- textmsg = Message()
- mimeEncoding = re.sub("charset=.*", "charset=UTF-8", flavor.MimeType)
- textmsg['Content-Type'] = mimeEncoding
- textmsg['MIME-Version'] = '1.0'
- textmsg.set_payload(textbody.encode('utf-8'))
+ #Use first flavor that's sane for an email body
+ for flavor in flavors:
+ if flavor.MimeType.find('text/html') != -1 or flavor.MimeType.find('text/plain') != -1:
+ if dbg:
+ print >> sys.stderr, "PyMailSMPTService mimetype is", flavor.MimeType
+ textbody = content.getTransferData(flavor)
+ try:
+ textbody = textbody.value
+ except:
+ pass
+ textbody = textbody.encode('utf-8')
+
+ if len(textbody):
+ mimeEncoding = re.sub("charset=.*", "charset=UTF-8", flavor.MimeType)
+ if mimeEncoding.find('charset=UTF-8') == -1:
+ mimeEncoding = mimeEncoding + "; charset=UTF-8"
+ textmsg['Content-Type'] = mimeEncoding
+ textmsg['MIME-Version'] = '1.0'
+ textmsg.set_payload(textbody)
+
+ break
if (len(attachments)):
msg = MIMEMultipart()
@@ -150,15 +168,31 @@ class PyMailSMTPService(unohelper.Base, XSmtpService):
else:
msg = textmsg
- msg['Subject'] = subject
- msg['From'] = formataddr((sendername.encode('utf-8'), sendermail))
+ hdr = Header(sendername, 'utf-8')
+ hdr.append('<'+sendermail+'>','us-ascii')
+ msg['Subject'] = subject
+ msg['From'] = hdr
msg['To'] = COMMASPACE.join(recipients)
if len(ccrecipients):
msg['Cc'] = COMMASPACE.join(ccrecipients)
if xMailMessage.ReplyToAddress != '':
msg['Reply-To'] = xMailMessage.ReplyToAddress
- msg['X-Mailer'] = "OpenOffice.org 2.0 via Caolan's mailmerge component"
+ mailerstring = "OpenOffice.org 2.0 via Caolan's mailmerge component"
+ try:
+ ctx = uno.getComponentContext()
+ aConfigProvider = ctx.ServiceManager.createInstance("com.sun.star.configuration.ConfigurationProvider")
+ prop = uno.createUnoStruct('com.sun.star.beans.PropertyValue')
+ prop.Name = "nodepath"
+ prop.Value = "/org.openoffice.Setup/Product"
+ aSettings = aConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess",
+ (prop,))
+ mailerstring = aSettings.getByName("ooName") + " " + \
+ aSettings.getByName("ooSetupVersion") + " via Caolan's mailmerge component"
+ except:
+ pass
+
+ msg['X-Mailer'] = mailerstring
msg['Date'] = formatdate(localtime=True)
for attachment in attachments:
@@ -344,9 +378,63 @@ class PyMailServiceProvider(unohelper.Base, XMailServiceProvider):
else:
print >> sys.stderr, "PyMailServiceProvider, unknown TYPE", aType
+class PyMailMessage(unohelper.Base, XMailMessage):
+ def __init__( self, ctx, sTo='', sFrom='', Subject='', Body=None, aMailAttachment=None ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage init"
+ self.ctx = ctx
+
+ self.recipients = sTo,
+ self.ccrecipients = ()
+ self.bccrecipients = ()
+ self.aMailAttachments = ()
+ if aMailAttachment != None:
+ self.aMailAttachments = aMailAttachment,
+
+ self.SenderName, self.SenderAddress = parseaddr(sFrom)
+ self.ReplyToAddress = sFrom
+ self.Subject = Subject
+ self.Body = Body
+ if dbg:
+ print >> sys.stderr, "post PyMailMessage init"
+ def addRecipient( self, recipient ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.addRecipient", recipient
+ self.recipients = self.recipients, recipient
+ def addCcRecipient( self, ccrecipient ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.addCcRecipient", ccrecipient
+ self.ccrecipients = self.ccrecipients, ccrecipient
+ def addBccRecipient( self, bccrecipient ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.addBccRecipient", bccrecipient
+ self.bccrecipients = self.bccrecipients, bccrecipient
+ def getRecipients( self ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.getRecipients", self.recipients
+ return self.recipients
+ def getCcRecipients( self ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.getCcRecipients", self.ccrecipients
+ return self.ccrecipients
+ def getBccRecipients( self ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.getBccRecipients", self.bccrecipients
+ return self.bccrecipients
+ def addAttachment( self, aMailAttachment ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.addAttachment"
+ self.aMailAttachments = self.aMailAttachments, aMailAttachment
+ def getAttachments( self ):
+ if dbg:
+ print >> sys.stderr, "PyMailMessage.getAttachments"
+ return self.aMailAttachments
+
# pythonloader looks for a static g_ImplementationHelper variable
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation( \
PyMailServiceProvider, "org.openoffice.pyuno.MailServiceProvider",
("com.sun.star.mail.MailServiceProvider",),)
-
+g_ImplementationHelper.addImplementation( \
+ PyMailMessage, "org.openoffice.pyuno.MailMessage",
+ ("com.sun.star.mail.MailMessage",),)
diff --git a/sd/inc/sdabstdlg.hxx b/sd/inc/sdabstdlg.hxx
index e9ae8df1a192..f265314fa6e9 100644..100755
--- a/sd/inc/sdabstdlg.hxx
+++ b/sd/inc/sdabstdlg.hxx
@@ -153,12 +153,6 @@ public:
virtual void GetAttr( SfxItemSet& rOutAttrs ) = 0;
};
-class AbstractSdPrintDlg : public VclAbstractDialog //add for SdPrintDlg
-{
-public:
- virtual USHORT GetAttr() = 0;
-};
-
class AbstractSdPresLayoutDlg : public VclAbstractDialog //add for SdPresLayoutDlg
{
public:
@@ -206,7 +200,6 @@ public:
virtual SfxAbstractTabDialog* CreateSdOutlineBulletTabDlg ( ::Window* pParent, const SfxItemSet* pAttr, ::sd::View* pView = NULL ) = 0;
virtual SfxAbstractTabDialog* CreateSdParagraphTabDlg ( ::Window* pParent, const SfxItemSet* pAttr ) = 0;
virtual AbstractSdStartPresDlg* CreateSdStartPresentationDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, List& rPageNames, List* pCSList ) = 0;
- virtual AbstractSdPrintDlg* CreateSdPrintDlg( ::Window* pWindow ) = 0; //add for SdPrintDlg
virtual SfxAbstractTabDialog* CreateSdPresLayoutTemplateDlg( SfxObjectShell* pDocSh, ::Window* pParent, SdResId DlgId, SfxStyleSheetBase& rStyleBase, PresentationObjects ePO, SfxStyleSheetBasePool* pSSPool ) = 0;
virtual AbstractSdPresLayoutDlg* CreateSdPresLayoutDlg( ::sd::DrawDocShell* pDocShell, ::sd::ViewShell* pViewShell, ::Window* pWindow, const SfxItemSet& rInAttrs) = 0;
virtual SfxAbstractTabDialog* CreateSdTabTemplateDlg( ::Window* pParent, const SfxObjectShell* pDocShell, SfxStyleSheetBase& rStyleBase, SdrModel* pModel, SdrView* pView ) = 0;
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
index 248a844a768d..76450cf76760 100755
--- a/sd/source/core/sdpage.cxx
+++ b/sd/source/core/sdpage.cxx
@@ -60,6 +60,7 @@
#include <svx/unopage.hxx>
#include <editeng/flditem.hxx>
#include <svx/sdr/contact/displayinfo.hxx>
+#include <svx/svditer.hxx>
#include <editeng/adjitem.hxx>
@@ -364,7 +365,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, BOOL bVertical, const Rec
// #i105146# We want no content to be displayed for PK_HANDOUT,
// so just never set a page as content
pSdrObj = new SdrPageObj(0);
- pSdrObj->SetResizeProtect(TRUE);
+// pSdrObj->SetResizeProtect(TRUE);
}
break;
@@ -2939,146 +2940,160 @@ void SdPage::CalculateHandoutAreas( SdDrawDocument& rModel, AutoLayout eLayout,
{
SdPage& rHandoutMaster = *rModel.GetMasterSdPage( 0, PK_HANDOUT );
- Size aArea = rHandoutMaster.GetSize();
-
- const long nGapW = 1000; // gap is 1cm
- const long nGapH = 1000;
+ if( eLayout == AUTOLAYOUT_NONE )
+ {
+ // use layout from handout master
+ SdrObjListIter aShapeIter (rHandoutMaster);
+ while (aShapeIter.IsMore())
+ {
+ SdrPageObj* pPageObj = dynamic_cast<SdrPageObj*>(aShapeIter.Next());
+ if (pPageObj)
+ rAreas.push_back( pPageObj->GetCurrentBoundRect() );
+ }
+ }
+ else
+ {
+ Size aArea = rHandoutMaster.GetSize();
- long nLeftBorder = rHandoutMaster.GetLftBorder();
- long nRightBorder = rHandoutMaster.GetRgtBorder();
- long nTopBorder = rHandoutMaster.GetUppBorder();
- long nBottomBorder = rHandoutMaster.GetLwrBorder();
+ const long nGapW = 1000; // gap is 1cm
+ const long nGapH = 1000;
- const long nHeaderFooterHeight = static_cast< long >( (aArea.Height() - nTopBorder - nLeftBorder) * 0.05 );
+ long nLeftBorder = rHandoutMaster.GetLftBorder();
+ long nRightBorder = rHandoutMaster.GetRgtBorder();
+ long nTopBorder = rHandoutMaster.GetUppBorder();
+ long nBottomBorder = rHandoutMaster.GetLwrBorder();
- nTopBorder += nHeaderFooterHeight;
- nBottomBorder += nHeaderFooterHeight;
+ const long nHeaderFooterHeight = static_cast< long >( (aArea.Height() - nTopBorder - nLeftBorder) * 0.05 );
- long nX = nGapW + nLeftBorder;
- long nY = nGapH + nTopBorder;
+ nTopBorder += nHeaderFooterHeight;
+ nBottomBorder += nHeaderFooterHeight;
- aArea.Width() -= nGapW * 2 + nLeftBorder + nRightBorder;
- aArea.Height() -= nGapH * 2 + nTopBorder + nBottomBorder;
+ long nX = nGapW + nLeftBorder;
+ long nY = nGapH + nTopBorder;
- const bool bLandscape = aArea.Width() > aArea.Height();
+ aArea.Width() -= nGapW * 2 + nLeftBorder + nRightBorder;
+ aArea.Height() -= nGapH * 2 + nTopBorder + nBottomBorder;
- static sal_uInt16 aOffsets[5][9] =
- {
- { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, // AUTOLAYOUT_HANDOUT9, Portrait, Horizontal order
- { 0, 2, 4, 1, 3, 5, 0, 0, 0 }, // AUTOLAYOUT_HANDOUT3, Landscape, Vertical
- { 0, 2, 1, 3, 0, 0, 0, 0, 0 }, // AUTOLAYOUT_HANDOUT4, Landscape, Vertical
- { 0, 3, 1, 4, 2, 5, 0, 0, 0 }, // AUTOLAYOUT_HANDOUT4, Portrait, Vertical
- { 0, 3, 6, 1, 4, 7, 2, 5, 8 }, // AUTOLAYOUT_HANDOUT9, Landscape, Vertical
- };
+ const bool bLandscape = aArea.Width() > aArea.Height();
- sal_uInt16* pOffsets = aOffsets[0];
- USHORT nColCnt = 0, nRowCnt = 0;
- switch ( eLayout )
- {
- case AUTOLAYOUT_HANDOUT1:
- nColCnt = 1; nRowCnt = 1;
- break;
+ static sal_uInt16 aOffsets[5][9] =
+ {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8 }, // AUTOLAYOUT_HANDOUT9, Portrait, Horizontal order
+ { 0, 2, 4, 1, 3, 5, 0, 0, 0 }, // AUTOLAYOUT_HANDOUT3, Landscape, Vertical
+ { 0, 2, 1, 3, 0, 0, 0, 0, 0 }, // AUTOLAYOUT_HANDOUT4, Landscape, Vertical
+ { 0, 3, 1, 4, 2, 5, 0, 0, 0 }, // AUTOLAYOUT_HANDOUT4, Portrait, Vertical
+ { 0, 3, 6, 1, 4, 7, 2, 5, 8 }, // AUTOLAYOUT_HANDOUT9, Landscape, Vertical
+ };
- case AUTOLAYOUT_HANDOUT2:
- if( bLandscape )
- {
- nColCnt = 2; nRowCnt = 1;
- }
- else
- {
- nColCnt = 1; nRowCnt = 2;
- }
- break;
+ sal_uInt16* pOffsets = aOffsets[0];
+ USHORT nColCnt = 0, nRowCnt = 0;
+ switch ( eLayout )
+ {
+ case AUTOLAYOUT_HANDOUT1:
+ nColCnt = 1; nRowCnt = 1;
+ break;
- case AUTOLAYOUT_HANDOUT3:
- if( bLandscape )
- {
- nColCnt = 3; nRowCnt = 2;
- }
- else
- {
- nColCnt = 2; nRowCnt = 3;
- }
- pOffsets = aOffsets[ bLandscape ? 1 : 0 ];
- break;
+ case AUTOLAYOUT_HANDOUT2:
+ if( bLandscape )
+ {
+ nColCnt = 2; nRowCnt = 1;
+ }
+ else
+ {
+ nColCnt = 1; nRowCnt = 2;
+ }
+ break;
- case AUTOLAYOUT_HANDOUT4:
- nColCnt = 2; nRowCnt = 2;
- pOffsets = aOffsets[ bHorizontal ? 0 : 2 ];
- break;
+ case AUTOLAYOUT_HANDOUT3:
+ if( bLandscape )
+ {
+ nColCnt = 3; nRowCnt = 2;
+ }
+ else
+ {
+ nColCnt = 2; nRowCnt = 3;
+ }
+ pOffsets = aOffsets[ bLandscape ? 1 : 0 ];
+ break;
- case AUTOLAYOUT_HANDOUT6:
- if( bLandscape )
- {
- nColCnt = 3; nRowCnt = 2;
- }
- else
- {
- nColCnt = 2; nRowCnt = 3;
- }
- if( !bHorizontal )
- pOffsets = aOffsets[ bLandscape ? 1 : 3 ];
- break;
+ case AUTOLAYOUT_HANDOUT4:
+ nColCnt = 2; nRowCnt = 2;
+ pOffsets = aOffsets[ bHorizontal ? 0 : 2 ];
+ break;
- default:
- case AUTOLAYOUT_HANDOUT9:
- nColCnt = 3; nRowCnt = 3;
+ case AUTOLAYOUT_HANDOUT6:
+ if( bLandscape )
+ {
+ nColCnt = 3; nRowCnt = 2;
+ }
+ else
+ {
+ nColCnt = 2; nRowCnt = 3;
+ }
+ if( !bHorizontal )
+ pOffsets = aOffsets[ bLandscape ? 1 : 3 ];
+ break;
- if( !bHorizontal )
- pOffsets = aOffsets[4];
- break;
- }
+ default:
+ case AUTOLAYOUT_HANDOUT9:
+ nColCnt = 3; nRowCnt = 3;
- rAreas.resize( nColCnt * nRowCnt );
+ if( !bHorizontal )
+ pOffsets = aOffsets[4];
+ break;
+ }
- Size aPartArea, aSize;
- aPartArea.Width() = ((aArea.Width() - ((nColCnt-1) * nGapW) ) / nColCnt);
- aPartArea.Height() = ((aArea.Height() - ((nRowCnt-1) * nGapH) ) / nRowCnt);
+ rAreas.resize( nColCnt * nRowCnt );
- SdrPage* pFirstPage = rModel.GetMasterSdPage(0, PK_STANDARD);
- if ( pFirstPage )
- {
- // scale actual size into handout rect
- double fScale = (double)aPartArea.Width() / (double)pFirstPage->GetWdt();
+ Size aPartArea, aSize;
+ aPartArea.Width() = ((aArea.Width() - ((nColCnt-1) * nGapW) ) / nColCnt);
+ aPartArea.Height() = ((aArea.Height() - ((nRowCnt-1) * nGapH) ) / nRowCnt);
- aSize.Height() = (long)(fScale * pFirstPage->GetHgt() );
- if( aSize.Height() > aPartArea.Height() )
+ SdrPage* pFirstPage = rModel.GetMasterSdPage(0, PK_STANDARD);
+ if ( pFirstPage )
{
- fScale = (double)aPartArea.Height() / (double)pFirstPage->GetHgt();
- aSize.Height() = aPartArea.Height();
- aSize.Width() = (long)(fScale * pFirstPage->GetWdt());
+ // scale actual size into handout rect
+ double fScale = (double)aPartArea.Width() / (double)pFirstPage->GetWdt();
+
+ aSize.Height() = (long)(fScale * pFirstPage->GetHgt() );
+ if( aSize.Height() > aPartArea.Height() )
+ {
+ fScale = (double)aPartArea.Height() / (double)pFirstPage->GetHgt();
+ aSize.Height() = aPartArea.Height();
+ aSize.Width() = (long)(fScale * pFirstPage->GetWdt());
+ }
+ else
+ {
+ aSize.Width() = aPartArea.Width();
+ }
+
+ nX += (aPartArea.Width() - aSize.Width()) / 2;
+ nY += (aPartArea.Height()- aSize.Height())/ 2;
}
else
{
- aSize.Width() = aPartArea.Width();
+ aSize = aPartArea;
}
- nX += (aPartArea.Width() - aSize.Width()) / 2;
- nY += (aPartArea.Height()- aSize.Height())/ 2;
- }
- else
- {
- aSize = aPartArea;
- }
+ Point aPos( nX, nY );
- Point aPos( nX, nY );
+ const bool bRTL = rModel.GetDefaultWritingMode() == ::com::sun::star::text::WritingMode_RL_TB;
- const bool bRTL = rModel.GetDefaultWritingMode() == ::com::sun::star::text::WritingMode_RL_TB;
+ const long nOffsetX = (aPartArea.Width() + nGapW) * (bRTL ? -1 : 1);
+ const long nOffsetY = aPartArea.Height() + nGapH;
+ const long nStartX = bRTL ? nOffsetX*(1 - nColCnt) - nX : nX;
- const long nOffsetX = (aPartArea.Width() + nGapW) * (bRTL ? -1 : 1);
- const long nOffsetY = aPartArea.Height() + nGapH;
- const long nStartX = bRTL ? nOffsetX*(1 - nColCnt) - nX : nX;
-
- for(sal_uInt16 nRow = 0; nRow < nRowCnt; nRow++)
- {
- aPos.X() = nStartX;
- for(sal_uInt16 nCol = 0; nCol < nColCnt; nCol++)
+ for(sal_uInt16 nRow = 0; nRow < nRowCnt; nRow++)
{
- rAreas[*pOffsets++] = Rectangle(aPos, aSize);
- aPos.X() += nOffsetX;
- }
+ aPos.X() = nStartX;
+ for(sal_uInt16 nCol = 0; nCol < nColCnt; nCol++)
+ {
+ rAreas[*pOffsets++] = Rectangle(aPos, aSize);
+ aPos.X() += nOffsetX;
+ }
- aPos.Y() += nOffsetY;
+ aPos.Y() += nOffsetY;
+ }
}
}
diff --git a/sd/source/ui/accessibility/AccessibleSlideSorterObject.cxx b/sd/source/ui/accessibility/AccessibleSlideSorterObject.cxx
index 1f5e99d69f58..ae1f6f633edc 100644..100755
--- a/sd/source/ui/accessibility/AccessibleSlideSorterObject.cxx
+++ b/sd/source/ui/accessibility/AccessibleSlideSorterObject.cxx
@@ -255,25 +255,21 @@ Reference<XAccessibleStateSet> SAL_CALL
if (mxParent.is())
{
- // SELECTABLE
+ // Unconditional states.
pStateSet->AddState(AccessibleStateType::SELECTABLE);
+ pStateSet->AddState(AccessibleStateType::FOCUSABLE);
+ pStateSet->AddState(AccessibleStateType::ENABLED);
+ pStateSet->AddState(AccessibleStateType::VISIBLE);
+ pStateSet->AddState(AccessibleStateType::SHOWING);
+ pStateSet->AddState(AccessibleStateType::ACTIVE);
+ pStateSet->AddState(AccessibleStateType::SENSITIVE);
- // SELECTED
+ // Conditional states.
if (mrSlideSorter.GetController().GetPageSelector().IsPageSelected(mnPageNumber))
pStateSet->AddState(AccessibleStateType::SELECTED);
-
- // FOCUSABLE
- pStateSet->AddState(AccessibleStateType::FOCUSABLE);
-
- // FOCUSED
if (mrSlideSorter.GetController().GetFocusManager().GetFocusedPageIndex() == mnPageNumber)
if (mrSlideSorter.GetController().GetFocusManager().IsFocusShowing())
pStateSet->AddState(AccessibleStateType::FOCUSED);
-
- pStateSet->AddState(AccessibleStateType::ENABLED);
- pStateSet->AddState(AccessibleStateType::VISIBLE);
- pStateSet->AddState(AccessibleStateType::SHOWING);
- pStateSet->AddState(AccessibleStateType::ACTIVE);
}
return pStateSet;
diff --git a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
index 10596bd5f793..6f3508d731a8 100644..100755
--- a/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
+++ b/sd/source/ui/accessibility/AccessibleSlideSorterView.cxx
@@ -72,7 +72,6 @@ public:
::Window* pWindow);
~Implementation (void);
- void UpdateVisibility (void);
void UpdateChildren (void);
void Clear (void);
sal_Int32 GetVisibleChildCount (void) const;
@@ -85,6 +84,7 @@ public:
DECL_LINK(WindowEventListener, VclWindowEvent*);
DECL_LINK(SelectionChangeListener, void*);
DECL_LINK(FocusChangeListener, void*);
+ DECL_LINK(VisibilityChangeListener, void*);
private:
AccessibleSlideSorterView& mrAccessibleSlideSorter;
@@ -789,7 +789,6 @@ AccessibleSlideSorterView::Implementation::Implementation (
{
ConnectListeners();
UpdateChildren();
- UpdateVisibility();
}
@@ -804,24 +803,27 @@ AccessibleSlideSorterView::Implementation::~Implementation (void)
-void AccessibleSlideSorterView::Implementation::UpdateVisibility (void)
+void AccessibleSlideSorterView::Implementation::UpdateChildren (void)
{
+ if (mbModelChangeLocked)
+ {
+ // Do nothing right now. When the flag is reset, this method is
+ // called again.
+ return;
+ }
+
::sd::slidesorter::view::SlideSorterView::PageRange aRange (
mrSlideSorter.GetView().GetVisiblePageRange());
mnFirstVisibleChild = aRange.first;
mnLastVisibleChild = aRange.second;
-}
-
-
-
-void AccessibleSlideSorterView::Implementation::UpdateChildren (void)
-{
- // Clear the list of accessible children and adapt its size. It is
- // refilled on demand when later the children are requested.
+ // Release all children.
Clear();
+
+ // Create new children for the modified visible range.
maPageObjects.resize(mrSlideSorter.GetModel().GetPageCount());
- UpdateVisibility();
+ for (sal_Int32 nIndex(mnFirstVisibleChild); nIndex<=mnLastVisibleChild; ++nIndex)
+ GetAccessibleChild(nIndex);
}
@@ -834,6 +836,11 @@ void AccessibleSlideSorterView::Implementation::Clear (void)
for (iPageObject=maPageObjects.begin(); iPageObject!=iEnd; ++iPageObject)
if (*iPageObject != NULL)
{
+ mrAccessibleSlideSorter.FireAccessibleEvent(
+ AccessibleEventId::CHILD,
+ Any(Reference<XAccessible>(iPageObject->get())),
+ Any());
+
Reference<XComponent> xComponent (Reference<XWeak>(iPageObject->get()), UNO_QUERY);
if (xComponent.is())
xComponent->dispose();
@@ -870,8 +877,6 @@ AccessibleSlideSorterObject* AccessibleSlideSorterView::Implementation::GetVisib
AccessibleSlideSorterObject* AccessibleSlideSorterView::Implementation::GetAccessibleChild (
sal_Int32 nIndex)
{
- OSL_ASSERT(nIndex>=0 && (sal_uInt32)nIndex<maPageObjects.size());
-
AccessibleSlideSorterObject* pChild = NULL;
if (nIndex>=0 && (sal_uInt32)nIndex<maPageObjects.size())
@@ -881,14 +886,26 @@ AccessibleSlideSorterObject* AccessibleSlideSorterView::Implementation::GetAcces
::sd::slidesorter::model::SharedPageDescriptor pDescriptor(
mrSlideSorter.GetModel().GetPageDescriptor(nIndex));
if (pDescriptor.get() != NULL)
+ {
maPageObjects[nIndex] = new AccessibleSlideSorterObject(
&mrAccessibleSlideSorter,
mrSlideSorter,
(pDescriptor->GetPage()->GetPageNum()-1)/2);
+
+ mrAccessibleSlideSorter.FireAccessibleEvent(
+ AccessibleEventId::CHILD,
+ Any(),
+ Any(Reference<XAccessible>(maPageObjects[nIndex].get())));
+ }
+
}
pChild = maPageObjects[nIndex].get();
}
+ else
+ {
+ OSL_ASSERT(nIndex>=0 && (sal_uInt32)nIndex<maPageObjects.size());
+ }
return pChild;
}
@@ -909,9 +926,10 @@ void AccessibleSlideSorterView::Implementation::ConnectListeners (void)
mrSlideSorter.GetController().GetSelectionManager()->AddSelectionChangeListener(
LINK(this,AccessibleSlideSorterView::Implementation,SelectionChangeListener));
-
mrSlideSorter.GetController().GetFocusManager().AddFocusChangeListener(
LINK(this,AccessibleSlideSorterView::Implementation,FocusChangeListener));
+ mrSlideSorter.GetView().AddVisibilityChangeListener(
+ LINK(this,AccessibleSlideSorterView::Implementation,VisibilityChangeListener));
}
@@ -921,9 +939,10 @@ void AccessibleSlideSorterView::Implementation::ReleaseListeners (void)
{
mrSlideSorter.GetController().GetFocusManager().RemoveFocusChangeListener(
LINK(this,AccessibleSlideSorterView::Implementation,FocusChangeListener));
-
mrSlideSorter.GetController().GetSelectionManager()->RemoveSelectionChangeListener(
LINK(this,AccessibleSlideSorterView::Implementation,SelectionChangeListener));
+ mrSlideSorter.GetView().RemoveVisibilityChangeListener(
+ LINK(this,AccessibleSlideSorterView::Implementation,VisibilityChangeListener));
if (mpWindow != NULL)
mpWindow->RemoveEventListener(
@@ -951,14 +970,7 @@ void AccessibleSlideSorterView::Implementation::Notify (
switch (rSdrHint.GetKind())
{
case HINT_PAGEORDERCHG:
- if ( ! mbModelChangeLocked)
- {
- UpdateChildren();
- mrAccessibleSlideSorter.FireAccessibleEvent(
- AccessibleEventId::INVALIDATE_ALL_CHILDREN,
- Any(),
- Any());
- }
+ UpdateChildren();
break;
default:
break;
@@ -976,10 +988,6 @@ void AccessibleSlideSorterView::Implementation::Notify (
case sd::ViewShellHint::HINT_COMPLEX_MODEL_CHANGE_END:
mbModelChangeLocked = false;
UpdateChildren();
- mrAccessibleSlideSorter.FireAccessibleEvent(
- AccessibleEventId::INVALIDATE_ALL_CHILDREN,
- Any(),
- Any());
break;
default:
break;
@@ -996,11 +1004,7 @@ IMPL_LINK(AccessibleSlideSorterView::Implementation, WindowEventListener, VclWin
{
case VCLEVENT_WINDOW_MOVE:
case VCLEVENT_WINDOW_RESIZE:
- UpdateVisibility();
- mrAccessibleSlideSorter.FireAccessibleEvent(
- AccessibleEventId::INVALIDATE_ALL_CHILDREN,
- Any(),
- Any());
+ UpdateChildren();
break;
case VCLEVENT_WINDOW_GETFOCUS:
@@ -1062,4 +1066,16 @@ IMPL_LINK(AccessibleSlideSorterView::Implementation, FocusChangeListener, void*,
}
+
+
+IMPL_LINK(AccessibleSlideSorterView::Implementation, VisibilityChangeListener, void*, EMPTYARG )
+{
+ UpdateChildren();
+
+ return 1;
+}
+
+
+
+
} // end of namespace ::accessibility
diff --git a/sd/source/ui/controller/slidelayoutcontroller.cxx b/sd/source/ui/controller/slidelayoutcontroller.cxx
index 489f6e489386..1a9201af6555 100644
--- a/sd/source/ui/controller/slidelayoutcontroller.cxx
+++ b/sd/source/ui/controller/slidelayoutcontroller.cxx
@@ -273,7 +273,7 @@ LayoutToolbarMenu::LayoutToolbarMenu( SlideLayoutController& rController, const
sSlotStr = OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DuplicatePage" ) );
else
sSlotStr = OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Undo" ) );
- aSlotImage = ::GetImage( mxFrame, sSlotStr, FALSE, FALSE );
+ aSlotImage = ::GetImage( mxFrame, sSlotStr, FALSE, bHighContrast );
String sSlotTitle;
if( bInsertPage )
diff --git a/sd/source/ui/dlg/makefile.mk b/sd/source/ui/dlg/makefile.mk
index de3cff7b903d..ef763dc87f5f 100755
--- a/sd/source/ui/dlg/makefile.mk
+++ b/sd/source/ui/dlg/makefile.mk
@@ -63,7 +63,6 @@ SRC1FILES =\
navigatr.src\
sdpreslt.src\
morphdlg.src\
- printdlg.src\
dlgfield.src\
custsdlg.src\
brkdlg.src\
@@ -71,8 +70,7 @@ SRC1FILES =\
dlgolbul.src \
LayerDialog.src \
PaneDockingWindow.src \
- layeroptionsdlg.src \
- printdialog.src
+ layeroptionsdlg.src
SLOFILES = \
$(SLO)$/inspagob.obj \
@@ -102,7 +100,6 @@ SLOFILES = \
$(SLO)$/navigatr.obj \
$(SLO)$/sdpreslt.obj \
$(SLO)$/morphdlg.obj \
- $(SLO)$/printdlg.obj \
$(SLO)$/dlgfield.obj \
$(SLO)$/custsdlg.obj \
$(SLO)$/brkdlg.obj \
@@ -120,8 +117,7 @@ SLOFILES = \
$(SLO)$/sdabstdlg.obj \
$(SLO)$/PaneChildWindows.obj \
$(SLO)$/PaneDockingWindow.obj \
- $(SLO)$/PaneShells.obj \
- $(SLO)$/printdialog.obj
+ $(SLO)$/PaneShells.obj
LIB1TARGET= $(SLB)$/$(TARGET).lib
@@ -147,8 +143,7 @@ LIB1OBJFILES= \
$(SLO)$/sdabstdlg.obj \
$(SLO)$/PaneChildWindows.obj \
$(SLO)$/PaneDockingWindow.obj \
- $(SLO)$/PaneShells.obj \
- $(SLO)$/printdialog.obj
+ $(SLO)$/PaneShells.obj
LIB2TARGET= $(SLB)$/sdui.lib
@@ -173,7 +168,6 @@ LIB2OBJFILES= \
$(SLO)$/dlgolbul.obj \
$(SLO)$/paragr.obj \
$(SLO)$/present.obj \
- $(SLO)$/printdlg.obj \
$(SLO)$/prltempl.obj \
$(SLO)$/sdpreslt.obj \
$(SLO)$/tabtempl.obj \
diff --git a/sd/source/ui/dlg/printdialog.cxx b/sd/source/ui/dlg/printdialog.cxx
deleted file mode 100644
index 3e02a18c2af7..000000000000
--- a/sd/source/ui/dlg/printdialog.cxx
+++ /dev/null
@@ -1,342 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
-
-#include <boost/scoped_ptr.hpp>
-
-#include "sdresid.hxx"
-#include "printdialog.hxx"
-#include "printdialog.hrc"
-#include "optsitem.hxx"
-#include "res_bmp.hrc"
-
-class SdPrintDialogImpl : public ModalDialog
-{
-public:
- SdPrintDialogImpl()
- : ModalDialog( 0, SdResId( DLG_PRINTDIALOG ) )
- {
- }
-
- virtual ~SdPrintDialogImpl()
- {
- FreeResource();
- }
-};
-
-/**
- aOptions.GetOptionsPrint().SetDraw( aCbxDraw.IsChecked() );
- aOptions.GetOptionsPrint().SetNotes( aCbxNotes.IsChecked() );
- aOptions.GetOptionsPrint().SetHandout( aCbxHandout.IsChecked() );
- aOptions.GetOptionsPrint().SetOutline( aCbxOutline.IsChecked() );
-
- aCbxDraw.Check( pPrintOpts->GetOptionsPrint().IsDraw() );
- aCbxNotes.Check( pPrintOpts->GetOptionsPrint().IsNotes() );
- aCbxHandout.Check( pPrintOpts->GetOptionsPrint().IsHandout() );
- aCbxOutline.Check( pPrintOpts->GetOptionsPrint().IsOutline() );
-
- only for impress!!
-*/
-
-SdPrintDialog* SdPrintDialog::Create( Window* pWindow, bool bImpress )
-{
- return new SdPrintDialog( pWindow, bImpress );
-}
-
-SdPrintDialog::SdPrintDialog( Window* pWindow, bool bImpress )
-: PrintDialog( pWindow, false )
-, mbImpress( bImpress )
-{
- if( bImpress )
- {
- mpControls.resize( PRINTDLG_CONTROLCOUNT );
-
- boost::scoped_ptr< SdPrintDialogImpl > aImplDlg( new SdPrintDialogImpl() );
-
- USHORT nChildCount = GetChildCount();
-
- mpControls[FL_PRINTCONTENT-1].reset( new FixedLine( this, SdResId( FL_PRINTCONTENT ) ) );
- mpControls[FT_CONTENT-1].reset( new FixedText( this, SdResId( FT_CONTENT ) ) );
- mpControls[CB_CONTENT-1].reset( new ListBox( this, SdResId( CB_CONTENT ) ) );
- mpControls[FT_SLIDESPERPAGE-1].reset( new FixedText( this, SdResId( FT_SLIDESPERPAGE ) ) );
- mpControls[CB_SLIDESPERPAGE-1].reset( new ListBox( this, SdResId( CB_SLIDESPERPAGE ) ) );
- mpControls[FT_ORDER-1].reset( new FixedText( this, SdResId( FT_ORDER ) ) );
- mpControls[RBT_HORIZONTAL-1].reset( new RadioButton( this, SdResId( RBT_HORIZONTAL ) ) );
- mpControls[RBT_VERTICAL-1].reset( new RadioButton( this, SdResId( RBT_VERTICAL ) ) );
- mpControls[IMG_PREVIEW-1].reset( new FixedImage( this, SdResId( IMG_PREVIEW ) ) );
-
- sal_Int32 nHeight = LogicToPixel( Size( 0, 71 ), MAP_APPFONT ).Height();
-
- sal_Int32 nInsertY = nHeight;
-
- Window* pNextControl = 0;
-
- // find second fixed line
- USHORT nChild = 0;
- USHORT nFixedLine = 2;
- while( nChildCount-- )
- {
- pNextControl = GetChild( nChild++ );
- if( dynamic_cast< FixedLine* >( pNextControl ) )
- {
- if( --nFixedLine == 0 )
- {
- nInsertY = pNextControl->GetPosPixel().Y();
- nChild--;
- nChildCount++;
- break;
- }
- }
- }
-
- // move lower controls down
- std::vector< Window* > aLowerControls;
- while( nChildCount-- )
- {
- Window* pControl = GetChild( nChild++ );
- if( pControl )
- {
- Point aPos( pControl->GetPosPixel() );
- aPos.Y() += nHeight;
- pControl->SetPosPixel(aPos);
- aLowerControls.push_back(pControl);
- }
- }
-
- // positionate new controls
- for( int i = 0; i < PRINTDLG_CONTROLCOUNT; i++ )
- {
- Control* pControl = mpControls[i].get();
- if( pControl )
- {
- Point aPos( pControl->GetPosPixel() );
- aPos.Y() += nInsertY;
- pControl->SetPosPixel(aPos);
- pControl->SetZOrder( pNextControl, WINDOW_ZORDER_BEFOR );
- }
- }
-
- Size aDialogSize( GetSizePixel() );
- aDialogSize.Height() += nHeight;
- SetSizePixel( aDialogSize );
- }
-}
-
-SdPrintDialog::~SdPrintDialog()
-{
-}
-
-void SdPrintDialog::Init( const SdOptionsPrintItem* pPrintOpts )
-{
- if( mbImpress )
- {
- bool bDraw = true, bHandout = false, bNotes = false, bOutline = false;
- sal_uInt16 nPagesPerHandout = 6;
- bool bHandoutHorizontal = true;
-
- if( pPrintOpts )
- {
- const SdOptionsPrint& rOpts = pPrintOpts->GetOptionsPrint();
- bDraw = rOpts.IsDraw();
- bHandout = rOpts.IsHandout();
- bNotes = rOpts.IsNotes();
- bOutline = rOpts.IsOutline();
- nPagesPerHandout = rOpts.GetHandoutPages();
- bHandoutHorizontal = rOpts.IsHandoutHorizontal();
- }
-
- sal_uInt16 nPos = 0;
- if( !bDraw )
- {
- if( bHandout )
- nPos = 1;
- else if( bNotes )
- nPos = 2;
- else if( bOutline )
- nPos = 3;
- }
- static_cast<ListBox*>( mpControls[CB_CONTENT-1].get() )->SelectEntryPos( nPos );
-
- switch( nPagesPerHandout )
- {
- case 1: nPos = 0; break;
- case 2: nPos = 1; break;
- case 3: nPos = 2; break;
- case 4: nPos = 3; break;
- case 5:
- case 6: nPos = 4; break;
- default:nPos = 5; break;
- }
- static_cast<ListBox*>( mpControls[CB_SLIDESPERPAGE-1].get() )->SelectEntryPos( nPos );
-
-
- static_cast<RadioButton*>( mpControls[RBT_HORIZONTAL-1].get() )->Check( bHandoutHorizontal == true ) ;
- static_cast<RadioButton*>( mpControls[RBT_VERTICAL-1].get() )->Check( bHandoutHorizontal == false ) ;
-
- LoadPreviewImages();
-
- Image* pImage = mpPreviews[0].get();
- if( pImage )
- {
- FixedImage* pPreviewImage = static_cast<FixedImage*>( mpControls[IMG_PREVIEW-1].get() );
-
- Point aPos( pPreviewImage->GetPosPixel() );
- pPreviewImage->SetSizePixel( pImage->GetSizePixel() );
- aPos.X() -= pImage->GetSizePixel().Width();
-
- pPreviewImage->SetPosPixel( aPos );
- }
-
- UpdateStates();
-
- Link aLink( LINK(this,SdPrintDialog,UpdateStatesHdl) );
- static_cast<ListBox*>( mpControls[CB_CONTENT-1].get() )->SetSelectHdl( aLink );
- static_cast<ListBox*>( mpControls[CB_SLIDESPERPAGE-1].get() )->SetSelectHdl( aLink );
- }
-}
-
-bool SdPrintDialog::Fill( SdOptionsPrintItem* pPrintOpts )
-{
- bool bChanges = false;
- if( mbImpress && pPrintOpts )
- {
- SdOptionsPrint& rOpts = pPrintOpts->GetOptionsPrint();
-
- BOOL bDraw = FALSE, bHandout = FALSE, bNotes = FALSE, bOutline = FALSE;
- switch( static_cast<ListBox*>( mpControls[CB_CONTENT-1].get() )->GetSelectEntryPos() )
- {
- case 1: bHandout = TRUE; break;
- case 2: bNotes = TRUE; break;
- case 3: bOutline = TRUE; break;
- default: bDraw = TRUE; break;
- }
- if( rOpts.IsDraw() != bDraw )
- {
- bChanges = true;
- rOpts.SetDraw( bDraw );
- }
-
- if( rOpts.IsNotes() != bNotes )
- {
- bChanges = true;
- rOpts.SetNotes( bNotes );
- }
-
- if( rOpts.IsHandout() != bHandout )
- {
- bChanges = true;
- rOpts.SetHandout( bHandout );
- }
-
- if( rOpts.IsOutline() != bOutline )
- {
- bChanges = true;
- rOpts.SetOutline( bOutline );
- }
-
- sal_uInt16 nSlidePerHandout = 6;
- switch( static_cast<ListBox*>( mpControls[CB_SLIDESPERPAGE-1].get() )->GetSelectEntryPos() )
- {
- case 0: nSlidePerHandout = 1; break;
- case 1: nSlidePerHandout = 2; break;
- case 2: nSlidePerHandout = 3; break;
- case 3: nSlidePerHandout = 4; break;
- case 5: nSlidePerHandout = 9; break;
- }
-
- if( rOpts.GetHandoutPages() != nSlidePerHandout )
- {
- bChanges = true;
- rOpts.SetHandoutPages( nSlidePerHandout );
- }
-
- const BOOL bHorizontal = static_cast<RadioButton*>( mpControls[RBT_HORIZONTAL-1].get() )->IsChecked();
- if( rOpts.IsHandoutHorizontal() != bHorizontal )
- {
- bChanges = true;
- rOpts.SetHandoutHorizontal( bHorizontal );
- }
- }
- return bChanges;
-}
-
-static const sal_uInt16 PREVIEW_COUNT = 6;
-
-void SdPrintDialog::UpdateStates()
-{
- const sal_uInt16 nSlidesPerPagePos = static_cast<ListBox*>( mpControls[CB_SLIDESPERPAGE-1].get() )->GetSelectEntryPos();
- bool bHandout = static_cast<ListBox*>( mpControls[CB_CONTENT-1].get() )->GetSelectEntryPos() == 1;
- bool bOrder = bHandout && ( nSlidesPerPagePos >= 3);
-
- static_cast<Control*>( mpControls[FT_SLIDESPERPAGE-1].get() )->Enable( bHandout );
- static_cast<Control*>( mpControls[CB_SLIDESPERPAGE-1].get() )->Enable( bHandout );
- static_cast<Control*>( mpControls[FT_ORDER-1].get() )->Enable( bHandout && bOrder );
- static_cast<Control*>( mpControls[RBT_HORIZONTAL-1].get() )->Enable( bHandout && bOrder );
- static_cast<Control*>( mpControls[RBT_VERTICAL-1].get() )->Enable( bHandout && bOrder );
-
- FixedImage* pPreviewImage = static_cast<FixedImage*>( mpControls[IMG_PREVIEW-1].get() );
-
- if( pPreviewImage )
- {
- pPreviewImage->Show( bHandout );
- if( bHandout )
- {
- if( nSlidesPerPagePos < PREVIEW_COUNT)
- {
- if( mpPreviews[nSlidesPerPagePos].get() )
- pPreviewImage->SetModeImage( *mpPreviews[nSlidesPerPagePos].get(), BMP_COLOR_NORMAL );
-
- if( mpPreviewsHC[nSlidesPerPagePos].get() )
- pPreviewImage->SetModeImage( *mpPreviewsHC[nSlidesPerPagePos].get(), BMP_COLOR_HIGHCONTRAST );
- }
- }
- }
-}
-
-IMPL_LINK( SdPrintDialog, UpdateStatesHdl, void*, EMPTYARG )
-{
- UpdateStates();
- return 0;
-}
-
-void SdPrintDialog::LoadPreviewImages()
-{
- static const sal_uInt16 aResId[2*PREVIEW_COUNT] = { BMP_FOILH_01, BMP_FOILH_01_H, BMP_FOILH_02, BMP_FOILH_02_H, BMP_FOILH_03, BMP_FOILH_03_H, BMP_FOILH_04, BMP_FOILH_04_H, BMP_FOILH_06, BMP_FOILH_06_H, BMP_FOILH_09, BMP_FOILH_09_H };
-
- mpPreviews.resize( PREVIEW_COUNT );
- mpPreviewsHC.resize( PREVIEW_COUNT );
-
- const sal_uInt16* pResId( aResId );
- for( sal_uInt16 i = 0; i < PREVIEW_COUNT; i++ )
- {
- mpPreviews[i].reset( new Image( Bitmap( SdResId( *pResId++ ) ) ) );
- mpPreviewsHC[i].reset( new Image( Bitmap( SdResId( *pResId++ ) ) ) );
- }
-}
-
diff --git a/sd/source/ui/dlg/printdialog.src b/sd/source/ui/dlg/printdialog.src
deleted file mode 100644
index be014c588b55..000000000000
--- a/sd/source/ui/dlg/printdialog.src
+++ /dev/null
@@ -1,130 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-#include "app.hrc"
-#include "printdialog.hrc"
-
-ModalDialog DLG_PRINTDIALOG
-{
- Size = MAP_APPFONT ( 260, 77 ) ;
-
- FixedLine FL_PRINTCONTENT
- {
- Pos = MAP_APPFONT ( 6 , 0 ) ;
- Size = MAP_APPFONT ( 248 , 8 ) ;
- Text [ en-US ] = "Print content" ;
- };
- FixedText FT_CONTENT
- {
- Pos = MAP_APPFONT ( 12 , 12 ) ;
- Size = MAP_APPFONT ( 45 , 10 ) ;
- Text [ en-US ] = "Content" ;
- };
- ListBox CB_CONTENT
- {
- Border = TRUE ;
- Pos = MAP_APPFONT ( 60 , 10 ) ;
- Size = MAP_APPFONT ( 108 , 80 ) ;
- TabStop = TRUE ;
- DropDown = TRUE ;
- StringList [ en-US ] =
- {
- < "Slides" ; > ;
- < "Handouts" ; > ;
- < "Notes" ; > ;
- < "Outline" ; > ;
- };
- };
- FixedText FT_SLIDESPERPAGE
- {
- Pos = MAP_APPFONT ( 12 , 30 ) ;
- Size = MAP_APPFONT ( 45 , 8 ) ;
- Text [ en-US ] = "Slides per page" ;
- };
- ListBox CB_SLIDESPERPAGE
- {
- Border = TRUE ;
- Pos = MAP_APPFONT ( 60 , 28 ) ;
- Size = MAP_APPFONT ( 24 , 80 ) ;
- TabStop = TRUE ;
- DropDown = TRUE ;
- StringList [ en-US ] =
- {
- < "1" ; > ;
- < "2" ; > ;
- < "3" ; > ;
- < "4" ; > ;
- < "6" ; > ;
- < "9" ; > ;
- };
- };
- FixedText FT_ORDER
- {
- Pos = MAP_APPFONT ( 12 , 47 ) ;
- Size = MAP_APPFONT ( 45 , 8 ) ;
- Text [ en-US ] = "Order" ;
- };
- RadioButton RBT_HORIZONTAL
- {
- Pos = MAP_APPFONT ( 60 , 45 ) ;
- Size = MAP_APPFONT ( 60 , 10 ) ;
- TabStop = TRUE ;
- Text [ en-US ] = "Horizontal" ;
- };
- RadioButton RBT_VERTICAL
- {
- Pos = MAP_APPFONT ( 60 , 58 ) ;
- Size = MAP_APPFONT ( 60 , 10 ) ;
- TabStop = TRUE ;
- Text [ en-US ] = "Vertical" ;
- };
- FixedImage IMG_PREVIEW
- {
- Pos = MAP_APPFONT ( 168 , 28 ) ;
- };
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sd/source/ui/dlg/printdlg.src b/sd/source/ui/dlg/printdlg.src
deleted file mode 100644
index 45121e72f3ff..000000000000
--- a/sd/source/ui/dlg/printdlg.src
+++ /dev/null
@@ -1,130 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-#include "printdlg.hrc"
-ModalDialog DLG_PRINT_WARNINGS
-{
- OutputSize = TRUE ;
- SVLook = TRUE ;
- Size = MAP_APPFONT ( 212 , 87 ) ;
- Moveable = TRUE ;
- OKButton BTN_OK
- {
- Pos = MAP_APPFONT ( 156 , 6 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
- TabStop = TRUE ;
- DefButton = TRUE ;
- };
- CancelButton BTN_CANCEL
- {
- Pos = MAP_APPFONT ( 156 , 23 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
- TabStop = TRUE ;
- };
- HelpButton BTN_HELP
- {
- Pos = MAP_APPFONT ( 156 , 43 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
- TabStop = TRUE ;
- };
- FixedLine GRP_OPTIONS
- {
- Pos = MAP_APPFONT ( 6 , 3 ) ;
- Size = MAP_APPFONT ( 144 , 8 ) ;
- Text [ en-US ] = "Print options" ;
- };
- RadioButton RBT_SCALE
- {
- Pos = MAP_APPFONT ( 12 , 42 ) ;
- Size = MAP_APPFONT ( 129 , 12 ) ;
- TabStop = TRUE ;
- Text [ en-US ] = "~Fit page to print range" ;
- };
- RadioButton RBT_POSTER
- {
- Pos = MAP_APPFONT ( 12 , 54 ) ;
- Size = MAP_APPFONT ( 130 , 12 ) ;
- TabStop = TRUE ;
- Text [ en-US ] = "~Print on multiple pages" ;
- };
- RadioButton RBT_CUT
- {
- Pos = MAP_APPFONT ( 12 , 66 ) ;
- Size = MAP_APPFONT ( 127 , 12 ) ;
- TabStop = TRUE ;
- Text [ en-US ] = "~Trim" ;
- };
- FixedText FI_INFO
- {
- Pos = MAP_APPFONT ( 12 , 14 ) ;
- Size = MAP_APPFONT ( 134 , 25 ) ;
- /* ### ACHTUNG: Neuer Text in Resource? Die Seiteneinstellungen stimmen nicht mit dem Druckbereich berein.\nSie knnen folgende Optionen whlen : Die Seiteneinstellungen stimmen nicht mit dem Druckbereich berein.\nSie knnen folgende Optionen whlen */
- Text [ en-US ] = "The page settings do not match the print range.\nChoose one of the following options" ;
- WordBreak = TRUE ;
- };
- Text [ en-US ] = "Warning Print Options" ;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sd/source/ui/dlg/sddlgfact.cxx b/sd/source/ui/dlg/sddlgfact.cxx
index 468b55f56c8a..aa0bb5ce9f27 100644..100755
--- a/sd/source/ui/dlg/sddlgfact.cxx
+++ b/sd/source/ui/dlg/sddlgfact.cxx
@@ -51,7 +51,6 @@
#include "OutlineBulletDlg.hxx"
#include "paragr.hxx"
#include "present.hxx"
-#include "printdlg.hxx"
#include "prltempl.hxx"
#include "sdpreslt.hxx"
#include "tabtempl.hxx"
@@ -76,7 +75,6 @@ IMPL_ABSTDLG_BASE(AbstractSdInsertPasteDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractSdInsertPagesObjsDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractMorphDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractSdStartPresDlg_Impl);
-IMPL_ABSTDLG_BASE(AbstractSdPrintDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractSdPresLayoutDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractSfxDialog_Impl);
IMPL_ABSTDLG_BASE(AbstractSdVectorizeDlg_Impl);
@@ -326,13 +324,6 @@ void AbstractSdStartPresDlg_Impl::GetAttr( SfxItemSet& rOutAttrs )
}
// AbstractSdStartPresDlg_Impl end
-//AbstractSdPrintDlg_Impl begin
-USHORT AbstractSdPrintDlg_Impl::GetAttr()
-{
- return pDlg->GetAttr();
-}
-// AbstractSdPrintDlg_Impl end
-
//AbstractSdPresLayoutDlg_Impl begin
void AbstractSdPresLayoutDlg_Impl::GetAttr( SfxItemSet& rOutAttrs )
{
@@ -498,13 +489,6 @@ AbstractSdStartPresDlg * SdAbstractDialogFactory_Impl::CreateSdStartPresentatio
}
// add for SdStartPresentationDlg end
-// add for SdPrintDlg begin
-AbstractSdPrintDlg * SdAbstractDialogFactory_Impl::CreateSdPrintDlg( ::Window* pWindow )
-{
- return new AbstractSdPrintDlg_Impl( new SdPrintDlg( pWindow ) );
-}
-// add for SdPrintDlg end
-
// add for SdPresLayoutTemplateDlg begin
SfxAbstractTabDialog * SdAbstractDialogFactory_Impl::CreateSdPresLayoutTemplateDlg( SfxObjectShell* pDocSh, ::Window* pParent, SdResId DlgId, SfxStyleSheetBase& rStyleBase, PresentationObjects ePO, SfxStyleSheetBasePool* pSSPool )
{
diff --git a/sd/source/ui/dlg/sddlgfact.hxx b/sd/source/ui/dlg/sddlgfact.hxx
index 44f5b0813a04..fa5e53ebac54 100644..100755
--- a/sd/source/ui/dlg/sddlgfact.hxx
+++ b/sd/source/ui/dlg/sddlgfact.hxx
@@ -209,14 +209,6 @@ class AbstractSdStartPresDlg_Impl : public AbstractSdStartPresDlg
virtual void GetAttr( SfxItemSet& rOutAttrs );
};
-// add for SdPrintDlg
-class SdPrintDlg;
-class AbstractSdPrintDlg_Impl : public AbstractSdPrintDlg
-{
- DECL_ABSTDLG_BASE(AbstractSdPrintDlg_Impl,SdPrintDlg)
- virtual USHORT GetAttr();
-};
-
// add for SdPresLayoutDlg
class SdPresLayoutDlg;
class AbstractSdPresLayoutDlg_Impl : public AbstractSdPresLayoutDlg
@@ -281,7 +273,6 @@ public:
virtual SfxAbstractTabDialog* CreateSdOutlineBulletTabDlg ( ::Window* pParent, const SfxItemSet* pAttr, ::sd::View* pView = NULL );
virtual SfxAbstractTabDialog* CreateSdParagraphTabDlg ( ::Window* pParent, const SfxItemSet* pAttr );
virtual AbstractSdStartPresDlg* CreateSdStartPresentationDlg( ::Window* pWindow, const SfxItemSet& rInAttrs, List& rPageNames, List* pCSList );
- virtual AbstractSdPrintDlg* CreateSdPrintDlg( ::Window* pWindow ); //add for SdPrintDlg
virtual SfxAbstractTabDialog* CreateSdPresLayoutTemplateDlg( SfxObjectShell* pDocSh, ::Window* pParent, SdResId DlgId, SfxStyleSheetBase& rStyleBase, PresentationObjects ePO, SfxStyleSheetBasePool* pSSPool );
virtual AbstractSdPresLayoutDlg* CreateSdPresLayoutDlg( ::sd::DrawDocShell* pDocShell, ::sd::ViewShell* pViewShell, ::Window* pWindow, const SfxItemSet& rInAttrs);
virtual SfxAbstractTabDialog* CreateSdTabTemplateDlg( ::Window* pParent, const SfxObjectShell* pDocShell, SfxStyleSheetBase& rStyleBase, SdrModel* pModel, SdrView* pView );
diff --git a/sd/source/ui/inc/view/viewoverlaymanager.hxx b/sd/source/ui/inc/view/viewoverlaymanager.hxx
index 0693d1faea7a..9b56267ff327 100755
--- a/sd/source/ui/inc/view/viewoverlaymanager.hxx
+++ b/sd/source/ui/inc/view/viewoverlaymanager.hxx
@@ -59,12 +59,7 @@ public:
virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint);
- static BitmapEx maLargeButtonImages[BMP_PLACEHOLDER_LARGE_END - BMP_PLACEHOLDER_LARGE_START];
- static BitmapEx maSmallButtonImages[BMP_PLACEHOLDER_SMALL_END - BMP_PLACEHOLDER_SMALL_START];
-
private:
- void UpdateImages();
-
ViewShellBase& mrBase;
ULONG mnUpdateTagsEvent;
diff --git a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx b/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
index 6c16a154ecfd..2ef520b1df89 100755
--- a/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
+++ b/sd/source/ui/slidesorter/inc/view/SlideSorterView.hxx
@@ -219,6 +219,21 @@ public:
*/
void AddSdrObject (SdrObject& rObject);
+ /** Add a listener that is called when the set of visible slides.
+ @param rListener
+ When this method is called multiple times for the same listener
+ the second and all following calls are ignored. Each listener
+ is added only once.
+ */
+ void AddVisibilityChangeListener (const Link& rListener);
+
+ /** Remove a listener that is called when the set of visible slides changes.
+ @param rListener
+ It is save to pass a listener that was not added or has been
+ removed previously. Such calls are ignored.
+ */
+ void RemoveVisibilityChangeListener (const Link& rListener);
+
protected:
virtual void Notify (SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
@@ -253,6 +268,8 @@ private:
Orientation meOrientation;
+ ::std::vector<Link> maVisibilityChangeListeners;
+
/** Adapt the coordinates of the given bounding box according to the
other parameters.
@param rModelPageObjectBoundingBox
diff --git a/sd/source/ui/slidesorter/view/SlideSorterView.cxx b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
index 47ce907be637..d2c2310329a6 100755
--- a/sd/source/ui/slidesorter/view/SlideSorterView.cxx
+++ b/sd/source/ui/slidesorter/view/SlideSorterView.cxx
@@ -70,10 +70,9 @@
#include <svx/sdr/contact/objectcontact.hxx>
#include <svx/sdrpagewindow.hxx>
#include <svl/itempool.hxx>
-
-#ifndef _SFXITEMPOOL_HXX
#include <svl/itempool.hxx>
-#endif
+
+#include <boost/foreach.hpp>
using namespace std;
using namespace ::sd::slidesorter::model;
@@ -420,12 +419,28 @@ void SlideSorterView::DeterminePageObjectVisibilities (void)
pContact = pDescriptor->GetViewObjectContact();
if (pDescriptor.get() != NULL)
- pDescriptor->SetVisible (bIsVisible);
+ pDescriptor->SetVisible(bIsVisible);
}
}
- mnFirstVisiblePageIndex = nFirstIndex;
- mnLastVisiblePageIndex = nLastIndex;
+
+ if (mnFirstVisiblePageIndex != nFirstIndex
+ || mnLastVisiblePageIndex != nLastIndex)
+ {
+ mnFirstVisiblePageIndex = nFirstIndex;
+ mnLastVisiblePageIndex = nLastIndex;
+
+ // Tell the listeners that the visibility of some objects has changed.
+ ::std::vector<Link> aChangeListeners (maVisibilityChangeListeners);
+ for (::std::vector<Link>::const_iterator
+ iListener=aChangeListeners.begin(),
+ iEnd=aChangeListeners.end();
+ iListener!=iEnd;
+ ++iListener)
+ {
+ iListener->Call(NULL);
+ }
+ }
}
}
@@ -773,4 +788,34 @@ void SlideSorterView::AddSdrObject (SdrObject& rObject)
rObject.SetModel(&maPageModel);
}
+
+
+
+void SlideSorterView::AddVisibilityChangeListener (const Link& rListener)
+{
+ if (::std::find (
+ maVisibilityChangeListeners.begin(),
+ maVisibilityChangeListeners.end(),
+ rListener) == maVisibilityChangeListeners.end())
+ {
+ maVisibilityChangeListeners.push_back(rListener);
+ }
+}
+
+
+
+
+void SlideSorterView::RemoveVisibilityChangeListener(const Link&rListener)
+{
+ maVisibilityChangeListeners.erase (
+ ::std::find (
+ maVisibilityChangeListeners.begin(),
+ maVisibilityChangeListeners.end(),
+ rListener));
+}
+
+
+
+
+
} } } // end of namespace ::sd::slidesorter::view
diff --git a/sd/source/ui/unoidl/UnoDocumentSettings.cxx b/sd/source/ui/unoidl/UnoDocumentSettings.cxx
index ed47e57b2130..ed47e57b2130 100644..100755
--- a/sd/source/ui/unoidl/UnoDocumentSettings.cxx
+++ b/sd/source/ui/unoidl/UnoDocumentSettings.cxx
diff --git a/sd/source/ui/unoidl/sddetect.cxx b/sd/source/ui/unoidl/sddetect.cxx
index 90767a332609..9f268dec0cfa 100644..100755
--- a/sd/source/ui/unoidl/sddetect.cxx
+++ b/sd/source/ui/unoidl/sddetect.cxx
@@ -167,7 +167,7 @@ SdFilterDetect::~SdFilterDetect()
}
else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("InteractionHandler")) )
lDescriptor[nProperty].Value >>= xInteraction;
- else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RapairPackage")) )
+ else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RepairPackage")) )
lDescriptor[nProperty].Value >>= bRepairPackage;
else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("DocumentTitle")) )
nIndexOfDocumentTitle = nProperty;
diff --git a/sd/source/ui/view/DocumentRenderer.cxx b/sd/source/ui/view/DocumentRenderer.cxx
index a23d8b2ad908..0689dc0e3851 100644..100755
--- a/sd/source/ui/view/DocumentRenderer.cxx
+++ b/sd/source/ui/view/DocumentRenderer.cxx
@@ -122,7 +122,7 @@ namespace {
sal_Int32 GetHandoutPageCount (void) const
{
- sal_uInt32 nIndex = static_cast<sal_Int32>(mrProperties.getIntValue("SlidesPerPage", sal_Int32(4)));
+ sal_uInt32 nIndex = static_cast<sal_Int32>(mrProperties.getIntValue("SlidesPerPage", sal_Int32(0)));
if (nIndex<maSlidesPerPage.size())
return maSlidesPerPage[nIndex];
else if ( ! maSlidesPerPage.empty())
@@ -464,7 +464,7 @@ namespace {
CreateChoice(_STR_IMPRESS_PRINT_UI_SLIDESPERPAGE_CHOICES_HELP),
OUString( RTL_CONSTASCII_USTRINGPARAM( "SlidesPerPage" ) ),
GetSlidesPerPageSequence(),
- 4,
+ 0,
OUString( RTL_CONSTASCII_USTRINGPARAM( "List" ) ),
aContentOpt
)
@@ -672,7 +672,8 @@ namespace {
const Sequence<rtl::OUString> aChoice (
CreateChoice(_STR_IMPRESS_PRINT_UI_SLIDESPERPAGE_CHOICES));
maSlidesPerPage.clear();
- for (sal_Int32 nIndex=0,nCount=aChoice.getLength(); nIndex<nCount; ++nIndex)
+ maSlidesPerPage.push_back(0); // first is using the default
+ for (sal_Int32 nIndex=1,nCount=aChoice.getLength(); nIndex<nCount; ++nIndex)
maSlidesPerPage.push_back(aChoice[nIndex].toInt32());
return aChoice;
}
@@ -1528,6 +1529,7 @@ private:
AutoLayout eLayout = AUTOLAYOUT_HANDOUT6;
switch (nSlidesPerHandout)
{
+ case 0: eLayout = AUTOLAYOUT_NONE; break; // AUTOLAYOUT_HANDOUT1; break;
case 1: eLayout = AUTOLAYOUT_HANDOUT1; break;
case 2: eLayout = AUTOLAYOUT_HANDOUT2; break;
case 3: eLayout = AUTOLAYOUT_HANDOUT3; break;
diff --git a/sd/source/ui/view/DocumentRenderer.src b/sd/source/ui/view/DocumentRenderer.src
index 6419cb5c4e90..abd82ea0d397 100644..100755
--- a/sd/source/ui/view/DocumentRenderer.src
+++ b/sd/source/ui/view/DocumentRenderer.src
@@ -72,6 +72,7 @@ Resource _STR_IMPRESS_PRINT_UI_OPTIONS
{
ItemList [ en-US ] =
{
+ < "Default" ; > ;
< "1" ; > ;
< "2" ; > ;
< "3" ; > ;
diff --git a/sd/source/ui/view/viewoverlaymanager.cxx b/sd/source/ui/view/viewoverlaymanager.cxx
index ab165eea600b..447f50ec2222 100755
--- a/sd/source/ui/view/viewoverlaymanager.cxx
+++ b/sd/source/ui/view/viewoverlaymanager.cxx
@@ -45,6 +45,7 @@
#include <vcl/help.hxx>
#include <vcl/imagerepository.hxx>
+#include <vcl/lazydelete.hxx>
#include <svx/sdrpagewindow.hxx>
#include <svx/sdrpaintwindow.hxx>
@@ -79,9 +80,6 @@ class ImageButtonHdl;
// --------------------------------------------------------------------
-BitmapEx ViewOverlayManager::maSmallButtonImages[BMP_PLACEHOLDER_SMALL_END - BMP_PLACEHOLDER_SMALL_START];
-BitmapEx ViewOverlayManager::maLargeButtonImages[BMP_PLACEHOLDER_LARGE_END - BMP_PLACEHOLDER_LARGE_START];
-
static USHORT gButtonSlots[] = { SID_INSERT_TABLE, SID_INSERT_DIAGRAM, SID_INSERT_GRAPHIC, SID_INSERT_AVMEDIA };
static USHORT gButtonToolTips[] = { STR_INSERT_TABLE, STR_INSERT_CHART, STR_INSERT_PICTURE, STR_INSERT_MOVIE };
@@ -97,6 +95,32 @@ static BitmapEx loadImageResource( USHORT nId )
// --------------------------------------------------------------------
+static BitmapEx* getButtonImage( int index, bool large )
+{
+ static vcl::DeleteOnDeinit< BitmapEx > gSmallButtonImages[BMP_PLACEHOLDER_SMALL_END - BMP_PLACEHOLDER_SMALL_START] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+ static vcl::DeleteOnDeinit< BitmapEx > gLargeButtonImages[BMP_PLACEHOLDER_LARGE_END - BMP_PLACEHOLDER_LARGE_START] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+
+ if( !gSmallButtonImages[0].get() )
+ {
+ for( sal_uInt16 i = 0; i < (BMP_PLACEHOLDER_SMALL_END-BMP_PLACEHOLDER_SMALL_START); i++ )
+ {
+ gSmallButtonImages[i].set( new BitmapEx( loadImageResource( BMP_PLACEHOLDER_SMALL_START + i ) ) );
+ gLargeButtonImages[i].set( new BitmapEx( loadImageResource( BMP_PLACEHOLDER_LARGE_START + i ) ) );
+ }
+ }
+
+ if( large )
+ {
+ return gLargeButtonImages[index].get();
+ }
+ else
+ {
+ return gSmallButtonImages[index].get();
+ }
+}
+
+// --------------------------------------------------------------------
+
const sal_uInt32 SMART_TAG_HDL_NUM = SAL_MAX_UINT32;
class ChangePlaceholderTag : public SmartTag
@@ -374,20 +398,20 @@ BitmapEx ChangePlaceholderTag::createOverlayImage( int nHighlight )
Size aShapeSizePix = pDev->LogicToPixel(rSnapRect.GetSize());
long nShapeSizePix = std::min(aShapeSizePix.Width(),aShapeSizePix.Height());
- BitmapEx* pImages = (nShapeSizePix > 250) ? &ViewOverlayManager::maLargeButtonImages[0] : &ViewOverlayManager::maSmallButtonImages[0];
+ bool bLarge = nShapeSizePix > 250;
- Size aSize( pImages->GetSizePixel() );
+ Size aSize( getButtonImage( 0, bLarge )->GetSizePixel() );
aRet.SetSizePixel( Size( aSize.Width() << 1, aSize.Height() << 1 ) );
const Rectangle aRectSrc( Point( 0, 0 ), aSize );
- aRet = pImages[(nHighlight == 0) ? 4 : 0];
+ aRet = *(getButtonImage((nHighlight == 0) ? 4 : 0, bLarge));
aRet.Expand( aSize.Width(), aSize.Height(), NULL, TRUE );
- aRet.CopyPixel( Rectangle( Point( aSize.Width(), 0 ), aSize ), aRectSrc, &pImages[(nHighlight == 1) ? 5 : 1] );
- aRet.CopyPixel( Rectangle( Point( 0, aSize.Height() ), aSize ), aRectSrc, &pImages[(nHighlight == 2) ? 6 : 2] );
- aRet.CopyPixel( Rectangle( Point( aSize.Width(), aSize.Height() ), aSize ), aRectSrc, &pImages[(nHighlight == 3) ? 7 : 3] );
+ aRet.CopyPixel( Rectangle( Point( aSize.Width(), 0 ), aSize ), aRectSrc, getButtonImage((nHighlight == 1) ? 5 : 1, bLarge) );
+ aRet.CopyPixel( Rectangle( Point( 0, aSize.Height() ), aSize ), aRectSrc, getButtonImage((nHighlight == 2) ? 6 : 2, bLarge) );
+ aRet.CopyPixel( Rectangle( Point( aSize.Width(), aSize.Height() ), aSize ), aRectSrc, getButtonImage((nHighlight == 3) ? 7 : 3, bLarge) );
}
return aRet;
@@ -411,9 +435,9 @@ void ChangePlaceholderTag::addCustomHandles( SdrHdlList& rHandlerList )
if( 50 > nShapeSizePix )
return;
- BitmapEx* pImages = (nShapeSizePix > 250) ? &ViewOverlayManager::maLargeButtonImages[0] : &ViewOverlayManager::maSmallButtonImages[0];
+ bool bLarge = nShapeSizePix > 250;
- Size aButtonSize( pDev->PixelToLogic(pImages[0].GetSizePixel()) );
+ Size aButtonSize( pDev->PixelToLogic( getButtonImage(0, bLarge )->GetSizePixel()) );
const int nColumns = 2;
const int nRows = 2;
@@ -490,17 +514,6 @@ ViewOverlayManager::~ViewOverlayManager()
// --------------------------------------------------------------------
-void ViewOverlayManager::UpdateImages()
-{
- for( sal_uInt16 i = 0; i < (BMP_PLACEHOLDER_SMALL_END-BMP_PLACEHOLDER_SMALL_START); i++ )
- {
- maSmallButtonImages[i] = loadImageResource( BMP_PLACEHOLDER_SMALL_START + i );
- maLargeButtonImages[i] = loadImageResource( BMP_PLACEHOLDER_LARGE_START + i );
- }
-}
-
-// --------------------------------------------------------------------
-
void ViewOverlayManager::Notify(SfxBroadcaster&, const SfxHint& rHint)
{
const SfxSimpleHint* pSimpleHint = dynamic_cast<const SfxSimpleHint*>(&rHint);
@@ -548,9 +561,6 @@ bool ViewOverlayManager::CreateTags()
if( pPage )
{
- if( !maSmallButtonImages[0] )
- UpdateImages();
-
const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList();
for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); iter++ )
diff --git a/sd/util/makefile.mk b/sd/util/makefile.mk
index 8f56a0d47f7f..088057e90ce0 100755
--- a/sd/util/makefile.mk
+++ b/sd/util/makefile.mk
@@ -230,7 +230,7 @@ SHL4OBJS += $(SLO)$/pchname.obj \
.ENDIF # "$(GUI)$(COM)" == "WNTMSC"
# $(ISDLIB) is build in SHL1TARGET
-.IF "$(GUI)" == "UNX"
+.IF "$(GUI)"=="UNX" || ("$(COM)"=="GCC" && "$(GUI)"=="WNT")
SHL4DEPN=$(SHL1TARGETN)
SHL5DEPN=$(SHL1TARGETN)
.ELSE
diff --git a/set_soenv.in b/set_soenv.in
index 7983933c655e..e827c3cb3eef 100644
--- a/set_soenv.in
+++ b/set_soenv.in
@@ -1662,6 +1662,7 @@ ToFile( "MOC4", "@MOC4@", "e" );
ToFile( "ENABLE_KAB", "@ENABLE_KAB@", "e" );
ToFile( "PSPRINT", "TRUE", "e" );
ToFile( "MKDEPENDSOLVER", "TRUE", "e" );
+ToFile( "nodep", "@nodep@", "e" );
ToFile( "TARFILE_LOCATION", $TARFILE_LOCATION, "e" );
ToFile( "DO_FETCH_TARBALLS", "@DO_FETCH_TARBALLS@", "e" );
#
@@ -1896,6 +1897,7 @@ ToFile( "SYSTEM_CURL", "@SYSTEM_CURL@", "e" );
ToFile( "CURL_CFLAGS", "@CURL_CFLAGS@", "e" );
ToFile( "CURL_LIBS", "@CURL_LIBS@", "e" );
ToFile( "SYSTEM_BOOST", "@SYSTEM_BOOST@", "e" );
+ToFile( "SYSTEM_MDDS", "@SYSTEM_MDDS@", "e" );
ToFile( "SYSTEM_VIGRA", "@SYSTEM_VIGRA@", "e" );
ToFile( "SYSTEM_NEON", "@SYSTEM_NEON@", "e" );
ToFile( "NEON_VERSION", "@NEON_VERSION@", "e" );
@@ -1916,9 +1918,14 @@ ToFile( "SYSTEM_HUNSPELL", "@SYSTEM_HUNSPELL@", "e" );
ToFile( "HUNSPELL_CFLAGS", "@HUNSPELL_CFLAGS@", "e" );
ToFile( "HUNSPELL_LIBS", "@HUNSPELL_LIBS@", "e" );
ToFile( "SYSTEM_LPSOLVE", "@SYSTEM_LPSOLVE@", "e" );
+ToFile( "HAVE_GETOPT", "@HAVE_GETOPT@", "e" );
+ToFile( "HAVE_READDIR_R", "@HAVE_READDIR_R@", "e" );
+ToFile( "SYSTEM_LIBC", "@SYSTEM_LIBC@", "e" );
ToFile( "SYSTEM_HYPH", "@SYSTEM_HYPH@", "e" );
ToFile( "HYPHEN_LIB", "@HYPHEN_LIB@", "e" );
ToFile( "SYSTEM_MYTHES", "@SYSTEM_MYTHES@", "e" );
+ToFile( "MYTHES_CFLAGS", "@MYTHES_CFLAGS@", "e" );
+ToFile( "MYTHES_LIBS", "@MYTHES_LIBS@", "e" );
ToFile( "PAM", "@PAM@", "e" );
ToFile( "NEW_SHADOW_API", "@NEW_SHADOW_API@", "e" );
ToFile( "PAM_LINK", "@PAM_LINK@", "e" );
diff --git a/setup_native/source/packinfo/packinfo_office.txt b/setup_native/source/packinfo/packinfo_office.txt
index fb04b347fcdf..903e1834e764 100755
--- a/setup_native/source/packinfo/packinfo_office.txt
+++ b/setup_native/source/packinfo/packinfo_office.txt
@@ -477,7 +477,6 @@ End
Start
module = "gid_Module_Root_Extension_Oooimprovement"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-oooimprovement"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-oooimprovement"
@@ -493,7 +492,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Af"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-af"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-af"
@@ -509,7 +507,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Ca"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-ca"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ca"
@@ -525,7 +522,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Cs"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-cs"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-cs"
@@ -541,7 +537,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Da"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-da"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-da"
@@ -557,7 +552,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_De_AT"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-de-AT"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-de-AT"
@@ -573,7 +567,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_De_CH"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-de-CH"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-de-CH"
@@ -589,7 +582,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_De_DE"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-de-DE"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-de-DE"
@@ -605,7 +597,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_En"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-en"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-en"
@@ -621,7 +612,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Es"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-es"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-es"
@@ -637,7 +627,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Et"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-et"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-et"
@@ -653,7 +642,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Fr"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-fr"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-fr"
@@ -669,7 +657,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Gl"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-gl"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%BASISPACKAGEPREFIX%OOOBASEVERSION-dict-gl"
@@ -685,7 +672,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_He"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-he"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-he"
@@ -701,7 +687,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Hu"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-hu"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-hu"
@@ -717,7 +702,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_It"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-it"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-it"
@@ -733,7 +717,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Ku_Tr"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%WITHOUTDOTUNIXPRODUCTNAME%BRANDPACKAGEVERSION-dict-ku-TR"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%WITHOUTDOTUNIXPRODUCTNAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPRODUCTNAME%BRANDPACKAGEVERSION-dict-ku-TR"
@@ -749,7 +732,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Lt"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-lt"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-lt"
@@ -765,7 +747,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Ne"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-ne"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ne"
@@ -781,7 +762,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Nl"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-nl"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-nl"
@@ -797,7 +777,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_No"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-no"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-no"
@@ -813,7 +792,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Pl"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-pl"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-pl"
@@ -829,7 +807,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Pt"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-pt"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-pt"
@@ -845,7 +822,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Ro"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-ro"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ro"
@@ -861,7 +837,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Ru"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-ru"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-ru"
@@ -877,7 +852,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Sk"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-sk"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sk"
@@ -893,7 +867,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Sl"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-sl"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sl"
@@ -909,7 +882,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Sr"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-sr"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sr"
@@ -925,7 +897,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Sv"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-sv"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sv"
@@ -941,7 +912,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Sw"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-sw"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-sw"
@@ -957,7 +927,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Th"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-th"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-th"
@@ -973,7 +942,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Vi"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-vi"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%BASISPACKAGEPREFIX%OOOBASEVERSION-dict-vi"
@@ -989,7 +957,6 @@ End
Start
module = "gid_Module_Root_Extension_Dictionary_Zu"
-script = "shellscripts_extensions.txt"
solarispackagename = "%PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION-dict-zu"
solarisrequires = "%SOLSUREPACKAGEPREFIX-ure, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core01, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core02, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core03, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core04, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core05, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core06, %BASISPACKAGEPREFIX%WITHOUTDOTOOOBASEVERSION-core07, %PACKAGEPREFIX%SOLARISBRANDPACKAGENAME%BRANDPACKAGEVERSION"
packagename = "%UNIXPACKAGENAME%BRANDPACKAGEVERSION-dict-zu"
diff --git a/setup_native/source/win32/customactions/languagepacks/exports.dxp b/setup_native/source/win32/customactions/languagepacks/exports.dxp
index 7461090d7233..d01befd5d0d9 100644
--- a/setup_native/source/win32/customactions/languagepacks/exports.dxp
+++ b/setup_native/source/win32/customactions/languagepacks/exports.dxp
@@ -2,6 +2,3 @@ SetProductInstallationPath
RegisterLanguagePack
GetUserInstallMode
IsOfficeRunning
-RegisterExtensions
-DeregisterExtensions
-RemoveExtensions
diff --git a/setup_native/source/win32/customactions/languagepacks/makefile.mk b/setup_native/source/win32/customactions/languagepacks/makefile.mk
index 8da47ab1cc4f..69526077c509 100644
--- a/setup_native/source/win32/customactions/languagepacks/makefile.mk
+++ b/setup_native/source/win32/customactions/languagepacks/makefile.mk
@@ -77,7 +77,6 @@ STDSHL+= \
#SHL1LIBS = $(SLB)$/$(TARGET).lib
SHL1OBJS = $(SLOFILES) \
- $(SLO)$/registerextensions.obj \
$(SLO)$/seterror.obj
SHL1TARGET = $(TARGET)
diff --git a/setup_native/source/win32/customactions/patch/exports.dxp b/setup_native/source/win32/customactions/patch/exports.dxp
index b5f7bfcd099a..b57f2838bf34 100755
--- a/setup_native/source/win32/customactions/patch/exports.dxp
+++ b/setup_native/source/win32/customactions/patch/exports.dxp
@@ -7,6 +7,3 @@ IsOfficeRunning
SetFeatureState
SetNewFeatureState
ShowOnlineUpdateDialog
-RegisterExtensions
-DeregisterExtensions
-RemoveExtensions
diff --git a/setup_native/source/win32/customactions/patch/makefile.mk b/setup_native/source/win32/customactions/patch/makefile.mk
index 6af0ddf9ab2a..cb8733de20b6 100755
--- a/setup_native/source/win32/customactions/patch/makefile.mk
+++ b/setup_native/source/win32/customactions/patch/makefile.mk
@@ -76,7 +76,6 @@ SHL1OBJS = $(SLOFILES) \
$(SLO)$/shutdown_quickstart.obj \
$(SLO)$/quickstarter.obj \
$(SLO)$/upgrade.obj \
- $(SLO)$/registerextensions.obj \
$(SLO)$/seterror.obj
SHL1TARGET = $(TARGET)
diff --git a/setup_native/source/win32/customactions/shellextensions/exports.dxp b/setup_native/source/win32/customactions/shellextensions/exports.dxp
index cafa011057c9..0e53492e460f 100644
--- a/setup_native/source/win32/customactions/shellextensions/exports.dxp
+++ b/setup_native/source/win32/customactions/shellextensions/exports.dxp
@@ -6,9 +6,6 @@ SetProductInstallMode
RebuildShellIconCache
ExecutePostUninstallScript
MigrateInstallPath
-RegisterExtensions
-DeregisterExtensions
-RemoveExtensions
CheckInstallDirectory
SetAdminInstallProperty
CreateLayerLinks
diff --git a/setup_native/source/win32/customactions/shellextensions/makefile.mk b/setup_native/source/win32/customactions/shellextensions/makefile.mk
index 220ac727b774..9eef136a82a4 100644
--- a/setup_native/source/win32/customactions/shellextensions/makefile.mk
+++ b/setup_native/source/win32/customactions/shellextensions/makefile.mk
@@ -62,7 +62,6 @@ SLOFILES = \
$(SLO)$/setadmininstall.obj \
$(SLO)$/layerlinks.obj \
$(SLO)$/dotnetcheck.obj \
- $(SLO)$/registerextensions.obj \
$(SLO)$/copyeditiondata.obj \
$(SLO)$/vistaspecial.obj \
$(SLO)$/checkrunningoffice.obj \
diff --git a/sfx2/inc/brokenpackageint.hxx b/sfx2/inc/brokenpackageint.hxx
index e39c92c599ae..16f332480cf6 100644..100755
--- a/sfx2/inc/brokenpackageint.hxx
+++ b/sfx2/inc/brokenpackageint.hxx
@@ -36,7 +36,9 @@ using namespace ::framework;
typedef ContinuationBase< ::com::sun::star::task::XInteractionApprove > SfxContinuationApprove;
typedef ContinuationBase< ::com::sun::star::task::XInteractionDisapprove > SfxContinuationDisapprove;
-class SFX2_DLLPUBLIC RequestPackageReparation : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
+class SFX2_DLLPUBLIC RequestPackageReparation :
+ public ::com::sun::star::task::XInteractionRequest,
+ public ::cppu::OWeakObject
{
::com::sun::star::uno::Any m_aRequest;
@@ -50,6 +52,11 @@ class SFX2_DLLPUBLIC RequestPackageReparation : public ::cppu::WeakImplHelper1<
public:
RequestPackageReparation( ::rtl::OUString aName );
+ // XInterface / OWeakObject
+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL acquire( ) throw ();
+ virtual void SAL_CALL release( ) throw ();
+
sal_Bool isApproved() { return m_pApprove->isSelected(); }
virtual ::com::sun::star::uno::Any SAL_CALL getRequest()
@@ -61,7 +68,9 @@ public:
throw( ::com::sun::star::uno::RuntimeException );
};
-class SFX2_DLLPUBLIC NotifyBrokenPackage : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionRequest >
+class SFX2_DLLPUBLIC NotifyBrokenPackage :
+ public ::com::sun::star::task::XInteractionRequest,
+ public ::cppu::OWeakObject
{
::com::sun::star::uno::Any m_aRequest;
@@ -74,6 +83,11 @@ class SFX2_DLLPUBLIC NotifyBrokenPackage : public ::cppu::WeakImplHelper1< ::com
public:
NotifyBrokenPackage( ::rtl::OUString aName );
+ // XInterface / OWeakObject
+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL acquire( ) throw ();
+ virtual void SAL_CALL release( ) throw ();
+
sal_Bool isAborted() { return m_pAbort->isSelected(); }
virtual ::com::sun::star::uno::Any SAL_CALL getRequest()
diff --git a/sfx2/inc/sfx2/app.hxx b/sfx2/inc/sfx2/app.hxx
index 8a49fde7b958..980eec04cfa6 100644
--- a/sfx2/inc/sfx2/app.hxx
+++ b/sfx2/inc/sfx2/app.hxx
@@ -259,7 +259,7 @@ public:
void ResetLastDir();
//#if 0 // _SOLAR__PRIVATE
- SAL_DLLPRIVATE static SfxApplication* Is_Impl() { return pApp;}
+ SAL_DLLPRIVATE static SfxApplication* Get() { return pApp;}
SAL_DLLPRIVATE SfxDispatcher* GetAppDispatcher_Impl();
SAL_DLLPRIVATE SfxDispatcher* GetDispatcher_Impl();
diff --git a/sfx2/inc/sfx2/docfile.hxx b/sfx2/inc/sfx2/docfile.hxx
index 074f74cb0e72..e4d3ff023b3b 100644
--- a/sfx2/inc/sfx2/docfile.hxx
+++ b/sfx2/inc/sfx2/docfile.hxx
@@ -154,6 +154,7 @@ public:
const SfxFilter * GetFilter() const { return pFilter; }
const SfxFilter * GetOrigFilter( sal_Bool bNotCurrent = sal_False ) const;
const String& GetOrigURL() const;
+
SfxItemSet * GetItemSet() const;
void SetItemSet(SfxItemSet *pSet);
void Close();
@@ -327,6 +328,7 @@ public:
static sal_Bool CallApproveHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler, ::com::sun::star::uno::Any aRequest, sal_Bool bAllowAbort );
static sal_Bool SetWritableForUserOnly( const ::rtl::OUString& aURL );
+ static sal_uInt32 CreatePasswordToModifyHash( const ::rtl::OUString& aPasswd, sal_Bool bWriter );
};
SV_DECL_IMPL_REF( SfxMedium )
diff --git a/sfx2/inc/sfx2/docfilt.hxx b/sfx2/inc/sfx2/docfilt.hxx
index b4118272bb88..f024fdb07c06 100644
--- a/sfx2/inc/sfx2/docfilt.hxx
+++ b/sfx2/inc/sfx2/docfilt.hxx
@@ -37,6 +37,7 @@
#include <com/sun/star/uno/RuntimeException.hpp>
#include <tools/wldcrd.hxx>
+// TODO/LATER: The flags should be part of the UNO specification
#define SFX_FILTER_IMPORT 0x00000001L
#define SFX_FILTER_EXPORT 0x00000002L
#define SFX_FILTER_TEMPLATE 0x00000004L
@@ -45,13 +46,13 @@
#define SFX_FILTER_OWN 0x00000020L
#define SFX_FILTER_ALIEN 0x00000040L
#define SFX_FILTER_USESOPTIONS 0x00000080L
-#define SFX_FILTER_NOTINFILEDLG 0x00001000L
-#define SFX_FILTER_NOTINCHOOSER 0x00002000L
#define SFX_FILTER_DEFAULT 0x00000100L
#define SFX_FILTER_EXECUTABLE 0x00000200L
#define SFX_FILTER_SUPPORTSSELECTION 0x00000400L
#define SFX_FILTER_MAPTOAPPPLUG 0x00000800L
+#define SFX_FILTER_NOTINFILEDLG 0x00001000L
+#define SFX_FILTER_NOTINCHOOSER 0x00002000L
#define SFX_FILTER_ASYNC 0x00004000L
// Legt Objekt nur an, kein Laden
#define SFX_FILTER_CREATOR 0x00008000L
@@ -64,6 +65,10 @@
#define SFX_FILTER_SILENTEXPORT 0x00200000L
#define SFX_FILTER_BROWSERPREFERED 0x00400000L
+
+#define SFX_FILTER_ENCRYPTION 0x01000000L
+#define SFX_FILTER_PASSWORDTOMODIFY 0x02000000L
+
#define SFX_FILTER_PREFERED 0x10000000L
#define SFX_FILTER_VERSION_NONE 0
@@ -72,20 +77,6 @@
#include <sfx2/sfxdefs.hxx>
//========================================================================
-
-namespace sfx2 {
-
-/** Returns true if the passed string is the name of a Microsoft Office file
- format filter supporting export of password protected documents.
-
- This function is just a hack for #i105076# is fixed and needs to be removed
- then.
- */
-SFX2_DLLPUBLIC bool CheckMSPasswordCapabilityForExport( const String& rFilterName );
-
-} // namespace sfx2
-
-//========================================================================
class SfxFilterContainer;
class SotStorage;
class SFX2_DLLPUBLIC SfxFilter
diff --git a/sfx2/inc/sfx2/htmlmode.hxx b/sfx2/inc/sfx2/htmlmode.hxx
new file mode 100644
index 000000000000..51f341c5c3c0
--- /dev/null
+++ b/sfx2/inc/sfx2/htmlmode.hxx
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 _SFX_HTMLMODE_HXX_
+#define _SFX_HTMLMODE_HXX_
+
+
+#define HTMLMODE_ON 0x0001
+#define HTMLMODE_PARA_BORDER 0x0002 /* Absatzumrandungen */
+#define HTMLMODE_PARA_DISTANCE 0x0004 /* bestimmte Absatzabstaende */
+#define HTMLMODE_SMALL_CAPS 0x0008 /* Kapitaelchen */
+#define HTMLMODE_FRM_COLUMNS 0x0010 /* spaltige Rahmen */
+#define HTMLMODE_SOME_STYLES 0x0020 /* mind. MS IE */
+#define HTMLMODE_FULL_STYLES 0x0040 /* == SW */
+#define HTMLMODE_BLINK 0x0080 /* blinkende Zeichen*/
+#define HTMLMODE_PARA_BLOCK 0x0100 /* Blocksatz */
+#define HTMLMODE_DROPCAPS 0x0200 /* Initialen*/
+#define HTMLMODE_FIRSTLINE 0x0400 /* Erstzeileneinzug mit Spacer == NS 3.0 */
+#define HTMLMODE_GRAPH_POS 0x0800 /* Grafikpositionen Hintergrund */
+#define HTMLMODE_FULL_ABS_POS 0x1000 /* abs. Rahmenpositionierung */
+#define HTMLMODE_SOME_ABS_POS 0x2000 /* abs. Rahmenpositionierung vollst.*/
+#define HTMLMODE_RESERVED1 0x4000
+#define HTMLMODE_RESERVED0 0x8000
+
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sfx2/inc/sfx2/objsh.hxx b/sfx2/inc/sfx2/objsh.hxx
index d514235cbfa2..63eb9e8c876f 100644..100755
--- a/sfx2/inc/sfx2/objsh.hxx
+++ b/sfx2/inc/sfx2/objsh.hxx
@@ -286,6 +286,7 @@ public:
sal_Bool HasName() const { return bHasName; }
virtual String GetAPIName() const;
void SetHasName( sal_Bool bSet = sal_True ) { bHasName = bSet; }
+ void SetReadOnly();
sal_Bool IsReadOnly() const;
sal_Bool IsReadOnlyMedium() const;
void SetReadOnlyUI( sal_Bool bReadOnly = sal_True );
@@ -438,6 +439,13 @@ public:
void SetSaveVersionOnClose( sal_Bool bSet );
void ResetFromTemplate( const String& rTemplateName, const String& rFileName );
+ // TODO/LATER: the following two methods should be replaced by Get/SetModifPasswordInfo in future
+ sal_uInt32 GetModifyPasswordHash() const;
+ sal_Bool SetModifyPasswordHash( sal_uInt32 nHash );
+
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > GetModifyPasswordInfo() const;
+ sal_Bool SetModifyPasswordInfo( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aInfo );
+
static sal_uInt32 HandleFilter( SfxMedium* pMedium, SfxObjectShell* pDoc );
virtual void ViewAssigned();
@@ -685,6 +693,15 @@ public:
sal_Int32 nVersion,
sal_Bool bTemplate = sal_False) const = 0;
+ // change recording and respective passwword protection for Writer and Calc
+ // slots available for Writer: FN_REDLINE_ON, FN_REDLINE_ON
+ // slots used for Calc: FID_CHG_RECORD, SID_CHG_PROTECT
+ virtual bool IsChangeRecording() const;
+ virtual bool HasChangeRecordProtection() const;
+ virtual void SetChangeRecording( bool bActivate );
+ virtual bool SetProtectionPassword( const String &rPassword );
+ virtual bool GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash );
+
// =================================
//#if 0 // _SOLAR__PRIVATE
@@ -713,6 +730,8 @@ public:
SAL_DLLPRIVATE sal_uInt16 ImplCheckSignaturesInformation(
const ::com::sun::star::uno::Sequence< ::com::sun::star::security::DocumentSignatureInformation >& aInfos );
SAL_DLLPRIVATE void CheckEncryption_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler );
+ SAL_DLLPRIVATE void SetModifyPasswordEntered( sal_Bool bEntered = sal_True );
+ SAL_DLLPRIVATE sal_Bool IsModifyPasswordEntered();
SAL_DLLPRIVATE void InitBasicManager_Impl();
SAL_DLLPRIVATE SfxObjectShell_Impl* Get_Impl() { return pImp; }
diff --git a/sfx2/inc/sfx2/securitypage.hxx b/sfx2/inc/sfx2/securitypage.hxx
new file mode 100755
index 000000000000..d25f0ee0b967
--- /dev/null
+++ b/sfx2/inc/sfx2/securitypage.hxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 _SECURITYPAGE_HXX_
+#define _SECURITYPAGE_HXX_
+
+#include "sfx2/tabdlg.hxx"
+#include "sfx2/htmlmode.hxx"
+
+#include <memory>
+
+
+//////////////////////////////////////////////////////////////////////
+
+struct SfxSecurityPage_Impl;
+
+class SfxSecurityPage : public SfxTabPage
+{
+ std::auto_ptr< SfxSecurityPage_Impl > m_pImpl;
+
+protected:
+ SfxSecurityPage( Window* pParent, const SfxItemSet& );
+ virtual ~SfxSecurityPage();
+
+ virtual BOOL FillItemSet( SfxItemSet& );
+ virtual void Reset( const SfxItemSet& );
+
+public:
+ static SfxTabPage* Create( Window* pParent, const SfxItemSet& );
+};
+
+//////////////////////////////////////////////////////////////////////
+
+#endif // #ifndef _SECURITYPAGE_HXX_
+
diff --git a/sfx2/inc/sfx2/sfx.hrc b/sfx2/inc/sfx2/sfx.hrc
index 917bd75e4138..a49b003b5b49 100644..100755
--- a/sfx2/inc/sfx2/sfx.hrc
+++ b/sfx2/inc/sfx2/sfx.hrc
@@ -229,10 +229,15 @@
#define TP_DOCINFOUSER (RID_SFX_START+5)
#define TP_DOCINFORELOAD (RID_SFX_START+13)
#define TP_CUSTOMPROPERTIES (RID_SFX_START+14)
+#define TP_DOCINFOSECURITY (RID_SFX_START+215)
#define DLG_DOCINFO_EDT (RID_SFX_START+6)
#define TP_MANAGE_STYLES (RID_SFX_START+7)
#define DLG_STYLE_DESIGNER (RID_SFX_START+8)
+#define RID_SFX_PROTECT_RECORDS (RID_SFX_START+216)
+#define RID_SFX_UNPROTECT_RECORDS (RID_SFX_START+217)
+#define RID_SFX_INCORRECT_PASSWORD (RID_SFX_START+218)
+
#define STR_STYLE_FILTER_AUTO (RID_SFX_START+9)
#define STR_STYLE_FILTER_USED (RID_SFX_START+10)
#define STR_STYLE_FILTER_USERDEF (RID_SFX_START+11)
diff --git a/sfx2/inc/sfx2/sfxsids.hrc b/sfx2/inc/sfx2/sfxsids.hrc
index 275e5c06a7be..26e1991c24b8 100644
--- a/sfx2/inc/sfx2/sfxsids.hrc
+++ b/sfx2/inc/sfx2/sfxsids.hrc
@@ -155,6 +155,7 @@
#define SID_RELOAD (SID_SFX_START + 508)
#define SID_PRINTDOCDIRECT (SID_SFX_START + 509)
#define SID_PICKLIST (SID_SFX_START + 510)
+#define SID_ATTR_XWINDOW (SID_SFX_START + 777)
#define SID_PLUGIN_MODE (SID_SFX_START + 827)
#define SID_EXPORTDOC (SID_SFX_START + 829)
#define SID_EXPORTDOCASPDF (SID_SFX_START + 1673)
@@ -306,7 +307,9 @@
#define SID_ACTIVATE_STYLE_APPLY (SID_SFX_START + 1715)
#define SID_FONT_NAME (SID_SFX_START + 1716)
#define SID_DEFAULTFILENAME (SID_SFX_START + 1717)
-#define SID_SFX_free_START (SID_SFX_START + 1718)
+#define SID_MODIFYPASSWORDINFO (SID_SFX_START + 1718)
+#define SID_RECOMMENDREADONLY (SID_SFX_START + 1719)
+#define SID_SFX_free_START (SID_SFX_START + 1720)
#define SID_SFX_free_END (SID_SFX_START + 3999)
#define SID_OPEN_NEW_VIEW (SID_SFX_START + 520)
@@ -1002,5 +1005,30 @@
#endif // #ifndef _SFXSIDS_HRC
+//-----------------------------------------------------------------------
+// SfxSecurityPage related stuff
+
+#define FN_EDIT2 (SID_SW_START + 1800)
+#define FN_REDLINE_PROTECT (FN_EDIT2 + 23)
+#define FN_REDLINE_ON (FN_EDIT2 + 25)
+
+#define SID_HTML_MODE (SID_SVX_START + 414)
+
+// Calc-Id's used for SfxSecurityPage
+#ifndef SC_FUNCTION_START
+#define SC_FUNCTION_START (SID_SC_START + 200)
+#endif
+#ifndef FILE_MENU_END
+#define FILE_MENU_END (SC_FUNCTION_START + 20)
+#endif
+#ifndef EDIT_MENU_START
+#define EDIT_MENU_START (FILE_MENU_END)
+#endif
+#ifndef SC_VIEW_START
+#define SC_VIEW_START (SID_SC_START)
+#endif
+#define FID_CHG_RECORD (EDIT_MENU_START + 18)
+#define SID_CHG_PROTECT (SC_VIEW_START + 84)
+
// eof ------------------------------------------------------------------------
diff --git a/sfx2/sdi/sfx.sdi b/sfx2/sdi/sfx.sdi
index e4e43c51052f..8ca8645a05ff 100644..100755
--- a/sfx2/sdi/sfx.sdi
+++ b/sfx2/sdi/sfx.sdi
@@ -3594,6 +3594,34 @@ SfxVoidItem MacroOrganizer SID_MACROORGANIZER
]
//--------------------------------------------------------------------------
+SfxBoolItem ReccomendReadonly SID_RECOMMENDREADONLY
+
+[
+ /* flags: */
+ AutoUpdate = FALSE,
+ Cachable = Cachable,
+ FastCall = FALSE,
+ HasCoreId = FALSE,
+ HasDialog = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = TRUE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+ Synchron;
+
+ Readonly = TRUE,
+
+ /* config: */
+ AccelConfig = FALSE,
+ MenuConfig = FALSE,
+ StatusBarConfig = FALSE,
+ ToolBoxConfig = FALSE,
+ GroupId = ;
+]
+
+
+//--------------------------------------------------------------------------
SfxVoidItem RunMacro SID_RUNMACRO
()
[
diff --git a/sfx2/source/appl/appdata.cxx b/sfx2/source/appl/appdata.cxx
index a07623df46b1..38ea69280c49 100644
--- a/sfx2/source/appl/appdata.cxx
+++ b/sfx2/source/appl/appdata.cxx
@@ -89,7 +89,7 @@ void SfxBasicManagerCreationListener::onBasicManagerCreated( const Reference< XM
m_rAppData.OnApplicationBasicManagerCreated( _rBasicManager );
}
-SfxAppData_Impl::SfxAppData_Impl( SfxApplication* pApp ) :
+SfxAppData_Impl::SfxAppData_Impl( SfxApplication* ) :
pDdeService( 0 ),
pDocTopics( 0 ),
pTriggerTopic(0),
@@ -116,8 +116,7 @@ SfxAppData_Impl::SfxAppData_Impl( SfxApplication* pApp ) :
nRescheduleLocks(0),
nInReschedule(0),
nAsynchronCalls(0),
- m_xImeStatusWindow(new sfx2::appl::ImeStatusWindow(
- *pApp, comphelper::getProcessServiceFactory()))
+ m_xImeStatusWindow(new sfx2::appl::ImeStatusWindow(comphelper::getProcessServiceFactory()))
, pTbxCtrlFac(0)
, pStbCtrlFac(0)
, pViewFrames(0)
diff --git a/sfx2/source/appl/appmain.cxx b/sfx2/source/appl/appmain.cxx
index 020f68d01e8d..cf097b900b52 100644
--- a/sfx2/source/appl/appmain.cxx
+++ b/sfx2/source/appl/appmain.cxx
@@ -93,9 +93,6 @@ static SfxItemInfo __READONLY_DATA aItemInfos[] =
//===================================================================
-typedef Link* LinkPtr;
-SV_DECL_PTRARR(SfxInitLinkList, LinkPtr, 4, 4)
-
TYPEINIT2(SfxApplication,SfxShell,SfxBroadcaster);
//--------------------------------------------------------------------
diff --git a/sfx2/source/appl/appquit.cxx b/sfx2/source/appl/appquit.cxx
index 4da32cf9f566..d615d90ff37a 100644
--- a/sfx2/source/appl/appquit.cxx
+++ b/sfx2/source/appl/appquit.cxx
@@ -74,57 +74,11 @@
using ::basic::BasicManagerRepository;
-#ifdef DBG_UTIL
-DECLARE_LIST( SfxFrameWindowFactoryArray_Impl, SfxFrameWindowFactory* )
-SV_DECL_PTRARR(SfxInitLinkList, Link*, 2, 2)
-#endif
-
//===================================================================
BOOL SfxApplication::QueryExit_Impl()
{
BOOL bQuit = TRUE;
-/*
- BOOL bPrinting = FALSE;
- for ( SfxViewShell *pViewSh = SfxViewShell::GetFirst();
- !bPrinting && pViewSh;
- pViewSh = SfxViewShell::GetNext(*pViewSh) )
- {
- SfxPrinter *pPrinter = pViewSh->GetPrinter();
- bPrinting = pPrinter && pPrinter->IsPrinting();
- }
-
- if ( bPrinting )
- {
- // Benutzer fragen, ob abgebrochen werden soll
- if ( RET_OK == QueryBox( 0, SfxResId( MSG_ISPRINTING_QUERYABORT ) ).Execute() )
- {
- // alle Jobs canceln
- for ( SfxViewShell *pViewSh = SfxViewShell::GetFirst();
- !bPrinting && pViewSh;
- pViewSh = SfxViewShell::GetNext(*pViewSh) )
- {
- SfxPrinter *pPrinter = pViewSh->GetPrinter();
- if ( pPrinter && pPrinter->IsPrinting() )
- pPrinter->AbortJob();
- }
-
- // da das Canceln asynchron ist, Quit erstmal wieder verlassen
- GetDispatcher_Impl()->Execute( SID_QUITAPP, SFX_CALLMODE_ASYNCHRON );
- DBG_TRACE( "QueryExit => FALSE (printing)" );
- return FALSE;
- }
- }
-*/
-/*
- SfxObjectShell *pLastDocSh = SfxObjectShell::GetFirst();
- if ( bQuit )
- {
- // Jetzt zur Sicherheit auch hidden Frames abr"aumen
- SfxViewFrame::CloseHiddenFrames_Impl();
- pLastDocSh = SfxObjectShell::GetFirst();
- }
-*/
// will trotzdem noch jemand, den man nicht abschiessen kann, die App haben?
if ( !bQuit )
{
@@ -197,22 +151,18 @@ void SfxApplication::Deinitialize()
delete pAppData_Impl->pLabelResMgr;
-#ifdef DBG_UTIL
DELETEX(pAppData_Impl->pSlotPool);
DELETEX(pAppData_Impl->pEventConfig);
SfxMacroConfig::Release_Impl();
DELETEX(pAppData_Impl->pFactArr);
DELETEX(pAppData_Impl->pInitLinkList);
-#endif
-#ifdef DBG_UTIL
DELETEX(pAppData_Impl->pTbxCtrlFac);
DELETEX(pAppData_Impl->pStbCtrlFac);
DELETEX(pAppData_Impl->pMenuCtrlFac);
DELETEX(pAppData_Impl->pViewFrames);
DELETEX(pAppData_Impl->pViewShells);
DELETEX(pAppData_Impl->pObjShells);
-#endif
//TODO/CLEANTUP
//ReleaseArgs could be used instead!
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index 14789100bb24..bd9efc9bca1e 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -51,20 +51,15 @@
#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
#include <com/sun/star/system/SystemShellExecuteException.hpp>
-#ifndef _UNOTOOLS_PROCESSFACTORY_HXX
#include <comphelper/processfactory.hxx>
-#endif
#include <comphelper/storagehelper.hxx>
+#include "comphelper/configurationhelper.hxx"
-#ifndef _SVT_DOC_ADDRESSTEMPLATE_HXX_
#include <svtools/addresstemplate.hxx>
-#endif
#include <svl/visitem.hxx>
#include <unotools/intlwrapper.hxx>
-#ifndef _UNOTOOLS_CONFIGMGR_HXX_
#include <unotools/configmgr.hxx>
-#endif
#include <tools/config.hxx>
#include <tools/diagnose_ex.h>
#include <vcl/msgbox.hxx>
@@ -90,6 +85,7 @@
#include <vos/process.hxx>
#include <rtl/bootstrap.hxx>
#include <cppuhelper/exc_hlp.hxx>
+#include <rtl/ustrbuf.hxx>
#include <com/sun/star/script/provider/XScriptProviderFactory.hpp>
#include <com/sun/star/frame/XModuleManager.hpp>
@@ -879,6 +875,31 @@ namespace
}
}
+static ::rtl::OUString getConfigurationStringValue(
+ const ::rtl::OUString& rPackage,
+ const ::rtl::OUString& rRelPath,
+ const ::rtl::OUString& rKey,
+ const ::rtl::OUString& rDefaultValue )
+{
+ ::rtl::OUString aDefVal( rDefaultValue );
+
+ try
+ {
+ ::comphelper::ConfigurationHelper::readDirectKey(
+ comphelper::getProcessServiceFactory(),
+ rPackage,
+ rRelPath,
+ rKey,
+ ::comphelper::ConfigurationHelper::E_READONLY) >>= aDefVal;
+ }
+ catch(const com::sun::star::uno::RuntimeException& exRun)
+ { throw exRun; }
+ catch(const com::sun::star::uno::Exception&)
+ {}
+
+ return aDefVal;
+}
+
void SfxApplication::OfaExec_Impl( SfxRequest& rReq )
{
DBG_MEMTEST();
@@ -924,8 +945,34 @@ void SfxApplication::OfaExec_Impl( SfxRequest& rReq )
uno::Reference< css::system::XSystemShellExecute > xSystemShell(
xSMGR->createInstance( DEFINE_CONST_UNICODE("com.sun.star.system.SystemShellExecute" ) ),
uno::UNO_QUERY_THROW );
- if ( xSystemShell.is() )
- xSystemShell->execute( DEFINE_CONST_UNICODE("http://extensions.services.openoffice.org/dictionary?cid=926385"), ::rtl::OUString(), css::system::SystemShellExecuteFlags::DEFAULTS );
+
+ // read repository URL from configuration
+ ::rtl::OUString sTemplRepoURL =
+ getConfigurationStringValue(
+ ::rtl::OUString::createFromAscii("org.openoffice.Office.Common"),
+ ::rtl::OUString::createFromAscii("Dictionaries"),
+ ::rtl::OUString::createFromAscii("RepositoryURL"),
+ ::rtl::OUString());
+
+ if ( xSystemShell.is() && sTemplRepoURL.getLength() > 0 )
+ {
+ ::rtl::OUStringBuffer aURLBuf( sTemplRepoURL );
+ aURLBuf.appendAscii( "?" );
+ aURLBuf.appendAscii( "lang=" );
+
+ // read locale from configuration
+ ::rtl::OUString sLocale = getConfigurationStringValue(
+ ::rtl::OUString::createFromAscii("org.openoffice.Setup"),
+ ::rtl::OUString::createFromAscii("L10N"),
+ ::rtl::OUString::createFromAscii("ooLocale"),
+ ::rtl::OUString::createFromAscii("en-US"));
+
+ aURLBuf.append( sLocale );
+ xSystemShell->execute(
+ aURLBuf.makeStringAndClear(),
+ ::rtl::OUString(),
+ css::system::SystemShellExecuteFlags::DEFAULTS );
+ }
}
catch( const ::com::sun::star::uno::Exception& )
{
diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx
index fd33e21ea645..6f9d3b258745 100644..100755
--- a/sfx2/source/appl/appuno.cxx
+++ b/sfx2/source/appl/appuno.cxx
@@ -191,6 +191,7 @@ static char const sFolderName[] = "FolderName";
static char const sUseSystemDialog[] = "UseSystemDialog";
static char const sStandardDir[] = "StandardDir";
static char const sBlackList[] = "BlackList";
+static char const sModifyPasswordInfo[] = "ModifyPasswordInfo";
void TransformParameters( sal_uInt16 nSlotId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& rArgs, SfxAllItemSet& rSet, const SfxSlot* pSlot )
{
@@ -846,6 +847,10 @@ void TransformParameters( sal_uInt16 nSlotId, const ::com::sun::star::uno::Seque
if (bOK)
rSet.Put( SfxBoolItem( SID_NOAUTOSAVE, bVal ) );
}
+ else if ( aName.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(sModifyPasswordInfo)) )
+ {
+ rSet.Put( SfxUnoAnyItem( SID_MODIFYPASSWORDINFO, rProp.Value ) );
+ }
#ifdef DBG_UTIL
else
--nFoundArgs;
@@ -1058,6 +1063,8 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, ::com::sun::sta
nAdditional++;
if ( rSet.GetItemState( SID_NOAUTOSAVE ) == SFX_ITEM_SET )
nAdditional++;
+ if ( rSet.GetItemState( SID_MODIFYPASSWORDINFO ) == SFX_ITEM_SET )
+ nAdditional++;
// consider additional arguments
nProps += nAdditional;
@@ -1197,7 +1204,9 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, ::com::sun::sta
// used only internally
if ( nId == SID_SAVETO )
continue;
- }
+ if ( nId == SID_MODIFYPASSWORDINFO )
+ continue;
+ }
ByteString aDbg( "Unknown item detected: ");
aDbg += ByteString::CreateFromInt32( nId );
@@ -1555,7 +1564,11 @@ void TransformItems( sal_uInt16 nSlotId, const SfxItemSet& rSet, ::com::sun::sta
pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sNoAutoSave));
pValue[nActProp++].Value <<= ( ((SfxBoolItem*)pItem)->GetValue() );
}
-
+ if ( rSet.GetItemState( SID_MODIFYPASSWORDINFO, sal_False, &pItem ) == SFX_ITEM_SET )
+ {
+ pValue[nActProp].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(sModifyPasswordInfo));
+ pValue[nActProp++].Value = ( ((SfxUnoAnyItem*)pItem)->GetValue() );
+ }
}
}
@@ -2411,6 +2424,26 @@ RequestPackageReparation::RequestPackageReparation( ::rtl::OUString aName )
m_lContinuations[1] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pDisapprove );
}
+/*uno::*/Any SAL_CALL RequestPackageReparation::queryInterface( const /*uno::*/Type& rType ) throw (RuntimeException)
+{
+ return ::cppu::queryInterface ( rType,
+ // OWeakObject interfaces
+ dynamic_cast< XInterface* > ( (XInteractionRequest *) this ),
+ static_cast< XWeak* > ( this ),
+ // my own interfaces
+ static_cast< XInteractionRequest* > ( this ) );
+}
+
+void SAL_CALL RequestPackageReparation::acquire( ) throw ()
+{
+ OWeakObject::acquire();
+}
+
+void SAL_CALL RequestPackageReparation::release( ) throw ()
+{
+ OWeakObject::release();
+}
+
::com::sun::star::uno::Any SAL_CALL RequestPackageReparation::getRequest()
throw( ::com::sun::star::uno::RuntimeException )
{
@@ -2442,6 +2475,26 @@ NotifyBrokenPackage::NotifyBrokenPackage( ::rtl::OUString aName )
m_lContinuations[0] = ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation >( m_pAbort );
}
+/*uno::*/Any SAL_CALL NotifyBrokenPackage::queryInterface( const /*uno::*/Type& rType ) throw (RuntimeException)
+{
+ return ::cppu::queryInterface ( rType,
+ // OWeakObject interfaces
+ dynamic_cast< XInterface* > ( (XInteractionRequest *) this ),
+ static_cast< XWeak* > ( this ),
+ // my own interfaces
+ static_cast< XInteractionRequest* > ( this ) );
+}
+
+void SAL_CALL NotifyBrokenPackage::acquire( ) throw ()
+{
+ OWeakObject::acquire();
+}
+
+void SAL_CALL NotifyBrokenPackage::release( ) throw ()
+{
+ OWeakObject::release();
+}
+
::com::sun::star::uno::Any SAL_CALL NotifyBrokenPackage::getRequest()
throw( ::com::sun::star::uno::RuntimeException )
{
diff --git a/sfx2/source/appl/imestatuswindow.cxx b/sfx2/source/appl/imestatuswindow.cxx
index 3cdc3064fb81..07eb47bd92ad 100644
--- a/sfx2/source/appl/imestatuswindow.cxx
+++ b/sfx2/source/appl/imestatuswindow.cxx
@@ -57,10 +57,8 @@ namespace css = com::sun::star;
using sfx2::appl::ImeStatusWindow;
ImeStatusWindow::ImeStatusWindow(
- SfxApplication & rApplication,
css::uno::Reference< css::lang::XMultiServiceFactory > const &
rServiceFactory):
- m_rApplication(rApplication),
m_xServiceFactory(rServiceFactory),
m_bDisposed(false)
{}
@@ -161,7 +159,9 @@ ImeStatusWindow::propertyChange(css::beans::PropertyChangeEvent const & )
throw (css::uno::RuntimeException)
{
vos::OGuard aGuard(Application::GetSolarMutex());
- m_rApplication.Invalidate(SID_SHOW_IME_STATUS_WINDOW);
+ SfxApplication* pApp = SfxApplication::Get();
+ if (pApp)
+ pApp->Invalidate(SID_SHOW_IME_STATUS_WINDOW);
}
css::uno::Reference< css::beans::XPropertySet > ImeStatusWindow::getConfig()
diff --git a/sfx2/source/appl/imestatuswindow.hxx b/sfx2/source/appl/imestatuswindow.hxx
index 71c0b371f796..4edba523ed30 100644
--- a/sfx2/source/appl/imestatuswindow.hxx
+++ b/sfx2/source/appl/imestatuswindow.hxx
@@ -37,7 +37,6 @@ namespace com { namespace sun { namespace star {
namespace beans { class XPropertySet; }
namespace lang { class XMultiServiceFactory; }
} } }
-class SfxApplication;
namespace sfx2 { namespace appl {
@@ -56,10 +55,7 @@ ImeStatusWindow_Impl;
class ImeStatusWindow: private ImeStatusWindow_Impl
{
public:
- ImeStatusWindow(SfxApplication & rApplication,
- com::sun::star::uno::Reference<
- com::sun::star::lang::XMultiServiceFactory > const &
- rServiceFactory);
+ ImeStatusWindow( com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > const& rServiceFactory );
/** Set up VCL according to the configuration.
@@ -115,7 +111,6 @@ private:
com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet >
getConfig();
- SfxApplication & m_rApplication;
com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
m_xServiceFactory;
diff --git a/sfx2/source/bastyp/progress.cxx b/sfx2/source/bastyp/progress.cxx
index 649ae121c274..3af0ba2b0a6f 100644
--- a/sfx2/source/bastyp/progress.cxx
+++ b/sfx2/source/bastyp/progress.cxx
@@ -706,7 +706,7 @@ SfxProgress* SfxProgress::GetActiveProgress
*/
{
- if ( !SfxApplication::Is_Impl() )
+ if ( !SfxApplication::Get() )
return 0;
SfxProgress *pProgress = 0;
diff --git a/sfx2/source/bastyp/sfxhtml.cxx b/sfx2/source/bastyp/sfxhtml.cxx
index 6132e958b900..8a4b434f460b 100644
--- a/sfx2/source/bastyp/sfxhtml.cxx
+++ b/sfx2/source/bastyp/sfxhtml.cxx
@@ -62,11 +62,7 @@ sal_Char __FAR_DATA sHTML_MIME_application[] = "application/";
sal_Char __FAR_DATA sHTML_MIME_experimental[] = "x-";
// <INPUT TYPE=xxx>
-#ifdef __MINGW32__ // for runtime pseudo reloc
-static HTMLOptionEnum aAreaShapeOptEnums[] =
-#else
static HTMLOptionEnum __READONLY_DATA aAreaShapeOptEnums[] =
-#endif
{
{ OOO_STRING_SVTOOLS_HTML_SH_rect, IMAP_OBJ_RECTANGLE },
{ OOO_STRING_SVTOOLS_HTML_SH_rectangle, IMAP_OBJ_RECTANGLE },
diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx
index d2ad8c645eb7..e53f1766b7b9 100644
--- a/sfx2/source/control/unoctitm.cxx
+++ b/sfx2/source/control/unoctitm.cxx
@@ -823,7 +823,7 @@ void SAL_CALL SfxDispatchController_Impl::dispatch( const ::com::sun::star::util
pItem = pDispatcher->Execute( GetId(), nCall, 0, &aInternalSet, nModifier );
// no bindings, no invalidate ( usually done in SfxDispatcher::Call_Impl()! )
- if ( SfxApplication::Is_Impl() )
+ if ( SfxApplication::Get() )
{
SfxDispatcher* pAppDispat = SFX_APP()->GetAppDispatcher_Impl();
if ( pAppDispat )
diff --git a/sfx2/source/dialog/about.cxx b/sfx2/source/dialog/about.cxx
index 4635733b934d..fab379f9f215 100644
--- a/sfx2/source/dialog/about.cxx
+++ b/sfx2/source/dialog/about.cxx
@@ -172,20 +172,6 @@ AboutDialog::AboutDialog( Window* pParent, const ResId& rId, const String& rVerS
rtl::OUString sProduct;
utl::ConfigManager::GetDirectConfigProperty(utl::ConfigManager::PRODUCTNAME) >>= sProduct;
- if ( sProduct.equals( rtl::OUString::createFromAscii("StarOffice") ) ||
- sProduct.equals( rtl::OUString::createFromAscii("StarSuite") ) )
- {
- // --> PB 2004-11-18 #118455# new copyright text (only in french version show a french text)
- ::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
- ::rtl::OUString sFrenchLang( DEFINE_CONST_OUSTRING( "fr" ) );
- if ( aLocale.Language.equals( sFrenchLang ) )
- {
- String sNewCopyrightText( ResId( ABOUT_STR_FRENCH_COPYRIGHT, *rId.GetResMgr() ) );
- aCopyrightText.SetText( sNewCopyrightText );
- }
- // <--
- }
-
// load image from module path
aAppLogo = SfxApplication::GetApplicationLogo();
@@ -299,22 +285,6 @@ AboutDialog::AboutDialog( Window* pParent, const ResId& rId, const String& rVerS
// explizite Help-Id
SetHelpId( SID_ABOUT );
-
- //#112429# replace occurences of "StarOffice" in the "StarSuite" version
- String sCopyright( aCopyrightText.GetText() );
- if(sProduct.equals(rtl::OUString::createFromAscii("StarSuite")))
- {
- String sSO(String::CreateFromAscii("StarOffice"));
- sCopyright.SearchAndReplaceAll(sSO, sProduct);
- }
-
- String sNewYear( DEFINE_CONST_UNICODE("2005") );
- xub_StrLen nIdx = sCopyright.SearchAndReplace( DEFINE_CONST_UNICODE("2002"), sNewYear );
- if ( STRING_NOTFOUND == nIdx )
- nIdx = sCopyright.SearchAndReplace( DEFINE_CONST_UNICODE("2003"), sNewYear );
- if ( STRING_NOTFOUND == nIdx )
- nIdx = sCopyright.SearchAndReplace( DEFINE_CONST_UNICODE("2004"), sNewYear );
- aCopyrightText.SetText( sCopyright );
}
// -----------------------------------------------------------------------
diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx
index 45ebfeac69f9..0ad62ae1eec1 100644..100755
--- a/sfx2/source/dialog/dinfdlg.cxx
+++ b/sfx2/source/dialog/dinfdlg.cxx
@@ -27,6 +27,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sfx2.hxx"
+
#include <tools/urlobj.hxx>
#include <vcl/msgbox.hxx>
#include <svl/eitem.hxx>
@@ -59,7 +60,8 @@
#include <com/sun/star/document/XDocumentProperties.hpp>
#include <vcl/timer.hxx>
-#include <sfx2/dinfdlg.hxx>
+#include "sfx2/dinfdlg.hxx"
+#include "sfx2/securitypage.hxx"
#include "sfxresid.hxx"
#include "dinfedt.hxx"
#include <sfx2/frame.hxx>
@@ -1564,6 +1566,7 @@ SfxDocumentInfoDialog::SfxDocumentInfoDialog( Window* pParent,
AddTabPage(TP_DOCINFODOC, SfxDocumentPage::Create, 0);
AddTabPage(TP_CUSTOMPROPERTIES, SfxCustomPropertiesPage::Create, 0);
AddTabPage(TP_DOCINFORELOAD, SfxInternetPage::Create, 0);
+ AddTabPage(TP_DOCINFOSECURITY, SfxSecurityPage::Create, 0);
}
// -----------------------------------------------------------------------
diff --git a/sfx2/source/dialog/dinfdlg.src b/sfx2/source/dialog/dinfdlg.src
index 99a062c4aecf..53b0f35685cb 100644..100755
--- a/sfx2/source/dialog/dinfdlg.src
+++ b/sfx2/source/dialog/dinfdlg.src
@@ -27,11 +27,11 @@
// include ---------------------------------------------------------------
-#include <sfx2/sfx.hrc>
+#include "sfx2/sfx.hrc"
#include "helpid.hrc"
#include "sfxlocal.hrc"
#include "dinfdlg.hrc"
-#include <dialog.hrc>
+#include "dialog.hrc"
// TP_DOCINFODESC --------------------------------------------------------
String STR_SFX_NEWOFFICEDOC
@@ -685,8 +685,6 @@ QueryBox SFX_QB_WRONG_TYPE
Message [ en-US ] = "The value entered does not match the specified type.\nThe value will be stored as text." ;
};
- // SID_DOCINFO -----------------------------------------------------------
-
TabDialog SID_DOCINFO
{
OutputSize = TRUE ;
@@ -718,6 +716,11 @@ TabDialog SID_DOCINFO
Identifier = TP_DOCINFORELOAD ;
Text [ en-US ] = "Internet" ;
};
+ PageItem
+ {
+ Identifier = TP_DOCINFOSECURITY ;
+ Text [ en-US ] = "Security" ;
+ };
};
};
};
diff --git a/sfx2/source/dialog/filedlghelper.cxx b/sfx2/source/dialog/filedlghelper.cxx
index 7d177d0bbfd8..b0890a3ee781 100644
--- a/sfx2/source/dialog/filedlghelper.cxx
+++ b/sfx2/source/dialog/filedlghelper.cxx
@@ -81,11 +81,13 @@
#include <svtools/helpid.hrc>
#include <svl/pickerhelper.hxx>
#include <comphelper/docpasswordrequest.hxx>
+#include <comphelper/docpasswordhelper.hxx>
#include <ucbhelper/content.hxx>
#include <ucbhelper/commandenvironment.hxx>
#include <comphelper/storagehelper.hxx>
#include <toolkit/helper/vclunohelper.hxx>
#include <sfx2/app.hxx>
+#include <sfx2/frame.hxx>
#include <sfx2/docfile.hxx>
#include <sfx2/docfac.hxx>
#include "openflag.hxx"
@@ -465,31 +467,6 @@ sal_Bool FileDialogHelper_Impl::isInOpenMode() const
// ------------------------------------------------------------------------
-namespace {
-
-bool lclCheckODFPasswordCapability( const SfxFilter* pFilter )
-{
- return pFilter && pFilter->IsOwnFormat() && pFilter->UsesStorage() && (pFilter->GetVersion() >= SOFFICE_FILEFORMAT_60);
-}
-
-bool lclCheckMSPasswordCapability( const SfxFilter* pFilter )
-{
- // TODO #i105076# this should be in the filter configuration!!!
- return pFilter && CheckMSPasswordCapabilityForExport( pFilter->GetFilterName() );
-}
-
-bool lclCheckPasswordCapability( const SfxFilter* pFilter )
-{
- return
- lclCheckODFPasswordCapability( pFilter ) ||
- // TODO #i105076# this should be in the filter configuration!!!
- lclCheckMSPasswordCapability( pFilter );
-}
-
-}
-
-// ------------------------------------------------------------------------
-
void FileDialogHelper_Impl::updateFilterOptionsBox()
{
if ( !m_bHaveFilterOptions )
@@ -546,10 +523,30 @@ void FileDialogHelper_Impl::updateSelectionBox()
if ( !mbHasSelectionBox )
return;
- const SfxFilter* pFilter = getCurentSfxFilter();
- mbSelectionFltrEnabled = updateExtendedControl(
- ExtendedFilePickerElementIds::CHECKBOX_SELECTION,
- ( mbSelectionEnabled && pFilter && ( pFilter->GetFilterFlags() & SFX_FILTER_SUPPORTSSELECTION ) != 0 ) );
+ // Does the selection box exist?
+ sal_Bool bSelectionBoxFound = sal_False;
+ uno::Reference< XControlInformation > xCtrlInfo( mxFileDlg, UNO_QUERY );
+ if ( xCtrlInfo.is() )
+ {
+ Sequence< ::rtl::OUString > aCtrlList = xCtrlInfo->getSupportedControls();
+ sal_uInt32 nCount = aCtrlList.getLength();
+ for ( sal_uInt32 nCtrl = 0; nCtrl < nCount; ++nCtrl )
+ if ( aCtrlList[ nCtrl ].equalsAscii("SelectionBox") )
+ {
+ bSelectionBoxFound = sal_False;
+ break;
+ }
+ }
+
+ if ( bSelectionBoxFound )
+ {
+ const SfxFilter* pFilter = getCurentSfxFilter();
+ mbSelectionFltrEnabled = updateExtendedControl(
+ ExtendedFilePickerElementIds::CHECKBOX_SELECTION,
+ ( mbSelectionEnabled && pFilter && ( pFilter->GetFilterFlags() & SFX_FILTER_SUPPORTSSELECTION ) != 0 ) );
+ uno::Reference< XFilePickerControlAccess > xCtrlAccess( mxFileDlg, UNO_QUERY );
+ xCtrlAccess->setValue( ExtendedFilePickerElementIds::CHECKBOX_SELECTION, 0, makeAny( (sal_Bool)mbSelection ) );
+ }
}
// ------------------------------------------------------------------------
@@ -560,9 +557,10 @@ void FileDialogHelper_Impl::enablePasswordBox( sal_Bool bInit )
sal_Bool bWasEnabled = mbIsPwdEnabled;
+ const SfxFilter* pCurrentFilter = getCurentSfxFilter();
mbIsPwdEnabled = updateExtendedControl(
ExtendedFilePickerElementIds::CHECKBOX_PASSWORD,
- lclCheckPasswordCapability( getCurentSfxFilter() )
+ pCurrentFilter && ( pCurrentFilter->GetFilterFlags() & SFX_FILTER_ENCRYPTION )
);
if( bInit )
@@ -1534,6 +1532,10 @@ ErrCode FileDialogHelper_Impl::execute( SvStringsDtor*& rpURLList,
{
SFX_ITEMSET_ARG( rpSet, pPassItem, SfxStringItem, SID_PASSWORD, FALSE );
mbPwdCheckBoxState = ( pPassItem != NULL );
+
+ // in case the document has password to modify, the dialog should be shown
+ SFX_ITEMSET_ARG( rpSet, pPassToModifyItem, SfxUnoAnyItem, SID_MODIFYPASSWORDINFO, FALSE );
+ mbPwdCheckBoxState |= ( pPassToModifyItem && pPassToModifyItem->GetValue().hasValue() );
}
SFX_ITEMSET_ARG( rpSet, pSelectItem, SfxBoolItem, SID_SELECTION, FALSE );
@@ -1544,6 +1546,9 @@ ErrCode FileDialogHelper_Impl::execute( SvStringsDtor*& rpURLList,
// the password will be set in case user decide so
rpSet->ClearItem( SID_PASSWORD );
+ rpSet->ClearItem( SID_RECOMMENDREADONLY );
+ rpSet->ClearItem( SID_MODIFYPASSWORDINFO );
+
}
if ( mbHasPassword && !mbPwdCheckBoxState )
@@ -1620,13 +1625,15 @@ ErrCode FileDialogHelper_Impl::execute( SvStringsDtor*& rpURLList,
// set the filter
getRealFilter( rFilter );
+ const SfxFilter* pCurrentFilter = getCurentSfxFilter();
+
// fill the rpURLList
- implGetAndCacheFiles(mxFileDlg, rpURLList, getCurentSfxFilter());
+ implGetAndCacheFiles( mxFileDlg, rpURLList, pCurrentFilter );
if ( rpURLList == NULL || rpURLList->GetObject(0) == NULL )
return ERRCODE_ABORT;
// check, wether or not we have to display a password box
- if ( mbHasPassword && mbIsPwdEnabled && xCtrlAccess.is() )
+ if ( pCurrentFilter && mbHasPassword && mbIsPwdEnabled && xCtrlAccess.is() )
{
try
{
@@ -1640,18 +1647,38 @@ ErrCode FileDialogHelper_Impl::execute( SvStringsDtor*& rpURLList,
if( xInteractionHandler.is() )
{
// TODO: need a save way to distinguish MS filters from other filters
- bool bMSType = CheckMSPasswordCapabilityForExport( rFilter );
+ // for now MS-filters are the only alien filters that support encryption
+ sal_Bool bMSType = !pCurrentFilter->IsOwnFormat();
::comphelper::DocPasswordRequestType eType = bMSType ?
::comphelper::DocPasswordRequestType_MS :
::comphelper::DocPasswordRequestType_STANDARD;
- ::comphelper::DocPasswordRequest* pPasswordRequest = new ::comphelper::DocPasswordRequest(
- eType, ::com::sun::star::task::PasswordRequestMode_PASSWORD_CREATE, *(rpURLList->GetObject(0)) );
+ ::rtl::Reference< ::comphelper::DocPasswordRequest > pPasswordRequest( new ::comphelper::DocPasswordRequest( eType, ::com::sun::star::task::PasswordRequestMode_PASSWORD_CREATE, *(rpURLList->GetObject(0)), ( pCurrentFilter->GetFilterFlags() & SFX_FILTER_PASSWORDTOMODIFY ) != 0 ) );
- uno::Reference< com::sun::star::task::XInteractionRequest > rRequest( pPasswordRequest );
+ uno::Reference< com::sun::star::task::XInteractionRequest > rRequest( pPasswordRequest.get() );
xInteractionHandler->handle( rRequest );
if ( pPasswordRequest->isPassword() )
- rpSet->Put( SfxStringItem( SID_PASSWORD, pPasswordRequest->getPassword() ) );
+ {
+ if ( pPasswordRequest->getPassword().getLength() )
+ rpSet->Put( SfxStringItem( SID_PASSWORD, pPasswordRequest->getPassword() ) );
+
+ if ( pPasswordRequest->getRecommendReadOnly() )
+ rpSet->Put( SfxBoolItem( SID_RECOMMENDREADONLY, sal_True ) );
+
+ if ( bMSType )
+ {
+ // the empty password has 0 as Hash
+ sal_Int32 nHash = SfxMedium::CreatePasswordToModifyHash( pPasswordRequest->getPasswordToModify(), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.text.TextDocument" ) ).equals( pCurrentFilter->GetServiceName() ) );
+ if ( nHash )
+ rpSet->Put( SfxUnoAnyItem( SID_MODIFYPASSWORDINFO, uno::makeAny( nHash ) ) );
+ }
+ else
+ {
+ uno::Sequence< beans::PropertyValue > aModifyPasswordInfo = ::comphelper::DocPasswordHelper::GenerateNewModifyPasswordInfo( pPasswordRequest->getPasswordToModify() );
+ if ( aModifyPasswordInfo.getLength() )
+ rpSet->Put( SfxUnoAnyItem( SID_MODIFYPASSWORDINFO, uno::makeAny( aModifyPasswordInfo ) ) );
+ }
+ }
else
return ERRCODE_ABORT;
}
diff --git a/sfx2/source/dialog/makefile.mk b/sfx2/source/dialog/makefile.mk
index 3d0c53cdb932..4c56cd683e34 100644..100755
--- a/sfx2/source/dialog/makefile.mk
+++ b/sfx2/source/dialog/makefile.mk
@@ -69,6 +69,7 @@ SLOFILES =\
$(SLO)$/tplcitem.obj \
$(SLO)$/tplpitem.obj \
$(SLO)$/versdlg.obj \
+ $(SLO)$/securitypage.obj \
$(SLO)$/titledockwin.obj
SRS1NAME=$(TARGET)
@@ -87,6 +88,7 @@ SRC1FILES =\
versdlg.src \
printopt.src \
srchdlg.src \
+ securitypage.src \
titledockwin.src \
taskpane.src
diff --git a/sfx2/source/dialog/securitypage.cxx b/sfx2/source/dialog/securitypage.cxx
new file mode 100755
index 000000000000..d32ee843cbf2
--- /dev/null
+++ b/sfx2/source/dialog/securitypage.cxx
@@ -0,0 +1,523 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sfx2.hxx"
+
+#include "sfx2/securitypage.hxx"
+
+#include "securitypage.hrc"
+#include "sfxresid.hxx"
+
+#include <sfx2/sfx.hrc>
+#include <sfx2/sfxsids.hrc>
+#include <sfx2/objsh.hxx>
+#include <sfx2/viewsh.hxx>
+#include <sfx2/dispatch.hxx>
+#include <sfx2/passwd.hxx>
+
+#include <vcl/button.hxx>
+#include <vcl/edit.hxx>
+#include <vcl/fixed.hxx>
+#include <vcl/msgbox.hxx>
+#include <svl/eitem.hxx>
+#include <svl/poolitem.hxx>
+#include <svl/intitem.hxx>
+#include <svl/PasswordHelper.hxx>
+#include <svtools/xwindowitem.hxx>
+
+
+using namespace ::com::sun::star;
+
+//////////////////////////////////////////////////////////////////////
+
+
+namespace
+{
+ enum RedliningMode { RL_NONE, RL_WRITER, RL_CALC };
+ enum RedlineFunc { RF_ON, RF_PROTECT };
+
+/*
+ bool QueryIsEnabled( USHORT _nSlot )
+ {
+ bool bRes = false;
+ SfxViewShell* pViewSh = SfxViewShell::Current();
+ if (pViewSh)
+ {
+ const SfxPoolItem* pItem;
+ SfxDispatcher* pDisp = pViewSh->GetDispatcher();
+ SfxItemState eState = pDisp->QueryState( _nSlot, pItem );
+ bRes = (eState & SFX_ITEM_DISABLED) == 0;
+ }
+ return bRes;
+ }
+*/
+
+ bool QueryState( USHORT _nSlot, bool& _rValue )
+ {
+ bool bRet = false;
+ SfxViewShell* pViewSh = SfxViewShell::Current();
+ if (pViewSh)
+ {
+ const SfxPoolItem* pItem;
+ SfxDispatcher* pDisp = pViewSh->GetDispatcher();
+ SfxItemState nState = pDisp->QueryState( _nSlot, pItem );
+ bRet = SFX_ITEM_AVAILABLE <= nState;
+ if (bRet)
+ _rValue = ( static_cast< const SfxBoolItem* >( pItem ) )->GetValue();
+ }
+ return bRet;
+ }
+
+
+ bool QueryRecordChangesProtectionState( RedliningMode _eMode, bool& _rValue )
+ {
+ bool bRet = false;
+ if (_eMode != RL_NONE)
+ {
+ USHORT nSlot = _eMode == RL_WRITER ? FN_REDLINE_PROTECT : SID_CHG_PROTECT;
+ bRet = QueryState( nSlot, _rValue );
+ }
+ return bRet;
+ }
+
+
+ bool QueryRecordChangesState( RedliningMode _eMode, bool& _rValue )
+ {
+ bool bRet = false;
+ if (_eMode != RL_NONE)
+ {
+ USHORT nSlot = _eMode == RL_WRITER ? FN_REDLINE_ON : FID_CHG_RECORD;
+ bRet = QueryState( nSlot, _rValue );
+ }
+ return bRet;
+ }
+}
+
+
+//////////////////////////////////////////////////////////////////////
+
+
+static short lcl_GetPassword(
+ Window *pParent,
+ bool bProtect,
+ /*out*/String &rPassword )
+{
+ bool bRes = false;
+ SfxPasswordDialog aPasswdDlg( pParent );
+ const String aTitle( SfxResId( bProtect ? RID_SFX_PROTECT_RECORDS : RID_SFX_UNPROTECT_RECORDS ) );
+ aPasswdDlg.SetText( aTitle );
+ aPasswdDlg.SetMinLen( 1 );
+ if (bProtect)
+ aPasswdDlg.ShowExtras( SHOWEXTRAS_CONFIRM );
+ if (RET_OK == aPasswdDlg.Execute() && aPasswdDlg.GetPassword().Len() > 0)
+ {
+ rPassword = aPasswdDlg.GetPassword();
+ bRes = true;
+ }
+ return bRes;
+}
+
+
+static bool lcl_IsPasswordCorrect( const String &rPassword )
+{
+ bool bRes = false;
+
+ SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
+ uno::Sequence< sal_Int8 > aPasswordHash;
+ pCurDocShell->GetProtectionHash( aPasswordHash );
+
+ // check if supplied password was correct
+ uno::Sequence< sal_Int8 > aNewPasswd( aPasswordHash );
+ SvPasswordHelper::GetHashPassword( aNewPasswd, rPassword );
+ if (SvPasswordHelper::CompareHashPassword( aPasswordHash, rPassword ))
+ bRes = true; // password was correct
+ else
+ InfoBox( NULL, String( SfxResId( RID_SFX_INCORRECT_PASSWORD ) ) ).Execute();
+
+ return bRes;
+}
+
+
+//////////////////////////////////////////////////////////////////////
+
+
+struct SfxSecurityPage_Impl
+{
+ SfxSecurityPage & m_rMyTabPage;
+
+ FixedLine m_aNewPasswordToOpenFL;
+ FixedText m_aNewPasswordToOpenFT;
+ Edit m_aNewPasswordToOpenED;
+ FixedText m_aConfirmPasswordToOpenFT;
+ Edit m_aConfirmPasswordToOpenED;
+ FixedText m_aNewPasswordInfoFT;
+
+ FixedLine m_aNewPasswordToModifyFL;
+ FixedText m_aNewPasswordToModifyFT;
+ Edit m_aNewPasswordToModifyED;
+ FixedText m_aConfirmPasswordToModifyFT;
+ Edit m_aConfirmPasswordToModifyED;
+
+ FixedLine m_aOptionsFL;
+ CheckBox m_aOpenReadonlyCB;
+ CheckBox m_aRecordChangesCB; // for record changes
+ PushButton m_aChangeProtectionPB; // for record changes
+ String m_aProtectSTR; // for record changes
+ String m_aUnProtectSTR; // for record changes
+ RedliningMode m_eRedlingMode; // for record changes
+
+ bool m_bOrigPasswordIsConfirmed;
+ bool m_bNewPasswordIsValid;
+ String m_aNewPassword;
+
+ String m_aEndRedliningWarning;
+ bool m_bEndRedliningWarningDone;
+
+ DECL_LINK( RecordChangesCBToggleHdl, void* );
+ DECL_LINK( ChangeProtectionPBHdl, void* );
+
+ SfxSecurityPage_Impl( SfxSecurityPage &rDlg, const SfxItemSet &rItemSet );
+ ~SfxSecurityPage_Impl();
+
+ BOOL FillItemSet_Impl( SfxItemSet & );
+ void Reset_Impl( const SfxItemSet & );
+};
+
+
+SfxSecurityPage_Impl::SfxSecurityPage_Impl( SfxSecurityPage &rTabPage, const SfxItemSet & ) :
+ m_rMyTabPage (rTabPage),
+ m_aNewPasswordToOpenFL (&rTabPage, SfxResId( PASSWORD_TO_OPEN_FL ) ),
+ m_aNewPasswordToOpenFT (&rTabPage, SfxResId( PASSWORD_TO_OPEN_FT ) ),
+ m_aNewPasswordToOpenED (&rTabPage, SfxResId( PASSWORD_TO_OPEN_ED ) ),
+ m_aConfirmPasswordToOpenFT (&rTabPage, SfxResId( CONFIRM_PASSWORD_TO_OPEN_FT ) ),
+ m_aConfirmPasswordToOpenED (&rTabPage, SfxResId( CONFIRM_PASSWORD_TO_OPEN_ED ) ),
+ m_aNewPasswordInfoFT (&rTabPage, SfxResId( PASSWORD_INFO_FT ) ),
+ m_aNewPasswordToModifyFL (&rTabPage, SfxResId( PASSWORD_TO_MODIFY_FL ) ),
+ m_aNewPasswordToModifyFT (&rTabPage, SfxResId( PASSWORD_TO_MODIFY_FT ) ),
+ m_aNewPasswordToModifyED (&rTabPage, SfxResId( PASSWORD_TO_MODIFY_ED ) ),
+ m_aConfirmPasswordToModifyFT (&rTabPage, SfxResId( CONFIRM_PASSWORD_TO_MODIFY_FT ) ),
+ m_aConfirmPasswordToModifyED (&rTabPage, SfxResId( CONFIRM_PASSWORD_TO_MODIFY_ED ) ),
+ m_aOptionsFL (&rTabPage, SfxResId( OPTIONS_FL ) ),
+ m_aOpenReadonlyCB (&rTabPage, SfxResId( OPEN_READONLY_CB ) ),
+ m_aRecordChangesCB (&rTabPage, SfxResId( RECORD_CHANGES_CB ) ),
+ m_aChangeProtectionPB (&rTabPage, SfxResId( CHANGE_PROTECTION_PB ) ),
+ m_aProtectSTR ( SfxResId( STR_PROTECT ) ),
+ m_aUnProtectSTR ( SfxResId( STR_UNPROTECT ) ),
+ m_eRedlingMode ( RL_NONE ),
+ m_bOrigPasswordIsConfirmed ( false ),
+ m_bNewPasswordIsValid ( false ),
+ m_aEndRedliningWarning ( SfxResId( STR_END_REDLINING_WARNING ) ),
+ m_bEndRedliningWarningDone ( false )
+{
+ m_aChangeProtectionPB.SetText( m_aProtectSTR );
+ // adjust button width if necessary
+ long nBtnTextWidth = 0;
+ long nTemp = m_aChangeProtectionPB.GetCtrlTextWidth( m_aChangeProtectionPB.GetText() );
+ if (nTemp > nBtnTextWidth)
+ nBtnTextWidth = nTemp;
+
+ // force toggle hdl called before visual change of checkbox
+ m_aRecordChangesCB.SetStyle( m_aRecordChangesCB.GetStyle() | WB_EARLYTOGGLE );
+ m_aRecordChangesCB.SetToggleHdl( LINK( this, SfxSecurityPage_Impl, RecordChangesCBToggleHdl ) );
+ m_aChangeProtectionPB.SetClickHdl( LINK( this, SfxSecurityPage_Impl, ChangeProtectionPBHdl ) );
+}
+
+
+SfxSecurityPage_Impl::~SfxSecurityPage_Impl()
+{
+}
+
+
+BOOL SfxSecurityPage_Impl::FillItemSet_Impl( SfxItemSet & )
+{
+ bool bModified = false;
+
+ SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
+ if (pCurDocShell&& !pCurDocShell->IsReadOnly())
+ {
+ if (m_eRedlingMode != RL_NONE )
+ {
+ const bool bDoRecordChanges = m_aRecordChangesCB.IsChecked();
+ const bool bDoChangeProtection = m_aChangeProtectionPB.GetText() != m_aProtectSTR;
+
+ // sanity checks
+ DBG_ASSERT( bDoRecordChanges || !bDoChangeProtection, "no change recording should imply no change protection" );
+ DBG_ASSERT( bDoChangeProtection || !bDoRecordChanges, "no change protection should imply no change recording" );
+ DBG_ASSERT( !bDoChangeProtection || m_aNewPassword.Len() > 0, "change protection should imply password length is > 0" );
+ DBG_ASSERT( bDoChangeProtection || m_aNewPassword.Len() == 0, "no change protection should imply password length is 0" );
+
+ // change recording
+ if (bDoRecordChanges != pCurDocShell->IsChangeRecording())
+ {
+ pCurDocShell->SetChangeRecording( bDoRecordChanges );
+ bModified = true;
+ }
+
+ // change record protection
+ if (m_bNewPasswordIsValid &&
+ bDoChangeProtection != pCurDocShell->HasChangeRecordProtection())
+ {
+ DBG_ASSERT( !bDoChangeProtection || bDoRecordChanges,
+ "change protection requires record changes to be active!" );
+ pCurDocShell->SetProtectionPassword( m_aNewPassword );
+ bModified = true;
+ }
+ }
+
+ // open read-only?
+ const sal_Bool bDoOpenReadonly = m_aOpenReadonlyCB.IsChecked();
+ if (pCurDocShell->HasSecurityOptOpenReadOnly() &&
+ bDoOpenReadonly != pCurDocShell->IsSecurityOptOpenReadOnly())
+ {
+ pCurDocShell->SetSecurityOptOpenReadOnly( bDoOpenReadonly );
+ bModified = true;
+ }
+ }
+
+ return bModified;
+}
+
+
+void SfxSecurityPage_Impl::Reset_Impl( const SfxItemSet & )
+{
+ SfxObjectShell* pCurDocShell = SfxObjectShell::Current();
+
+ String sNewText = m_aProtectSTR;
+ if (!pCurDocShell)
+ {
+ // no doc -> hide document settings
+ m_aOpenReadonlyCB.Disable();
+ m_aRecordChangesCB.Disable();
+ m_aChangeProtectionPB.Disable();
+ }
+ else
+ {
+ bool bIsHTMLDoc = false;
+ SfxViewShell* pViewSh = SfxViewShell::Current();
+ if (pViewSh)
+ {
+ const SfxPoolItem* pItem;
+ SfxDispatcher* pDisp = pViewSh->GetDispatcher();
+ if (SFX_ITEM_AVAILABLE <= pDisp->QueryState( SID_HTML_MODE, pItem ))
+ {
+ USHORT nMode = static_cast< const SfxUInt16Item* >( pItem )->GetValue();
+ bIsHTMLDoc = ( ( nMode & HTMLMODE_ON ) != 0 );
+ }
+ }
+
+ sal_Bool bIsReadonly = pCurDocShell->IsReadOnly();
+ if (pCurDocShell->HasSecurityOptOpenReadOnly() && !bIsHTMLDoc)
+ {
+ m_aOpenReadonlyCB.Check( pCurDocShell->IsSecurityOptOpenReadOnly() );
+ m_aOpenReadonlyCB.Enable( !bIsReadonly );
+ }
+ else
+ m_aOpenReadonlyCB.Disable();
+
+ bool bRecordChanges;
+ if (QueryRecordChangesState( RL_WRITER, bRecordChanges ) && !bIsHTMLDoc)
+ m_eRedlingMode = RL_WRITER;
+ else if (QueryRecordChangesState( RL_CALC, bRecordChanges ))
+ m_eRedlingMode = RL_CALC;
+ else
+ m_eRedlingMode = RL_NONE;
+
+ if (m_eRedlingMode != RL_NONE)
+ {
+ bool bProtection;
+ QueryRecordChangesProtectionState( m_eRedlingMode, bProtection );
+
+ m_aChangeProtectionPB.Enable( !bIsReadonly );
+ // set the right text
+ if (bProtection)
+ sNewText = m_aUnProtectSTR;
+
+ m_aRecordChangesCB.Check( bRecordChanges );
+ m_aRecordChangesCB.Enable( /*!bProtection && */!bIsReadonly );
+
+ m_bOrigPasswordIsConfirmed = true; // default case if no password is set
+ uno::Sequence< sal_Int8 > aPasswordHash;
+ // check if password is available
+ if (pCurDocShell->GetProtectionHash( aPasswordHash ) &&
+ aPasswordHash.getLength() > 0)
+ m_bOrigPasswordIsConfirmed = false; // password found, needs to be confirmed later on
+ }
+ else
+ {
+ // A Calc document that is shared will have 'm_eRedlingMode == RL_NONE'
+ // In shared documents change recording and protection must be disabled,
+ // similar to documents that do not support change recording at all.
+ m_aRecordChangesCB.Check( FALSE );
+ m_aRecordChangesCB.Disable();
+ m_aChangeProtectionPB.Check( FALSE );
+ m_aChangeProtectionPB.Disable();
+ }
+ }
+
+ m_aChangeProtectionPB.SetText( sNewText );
+}
+
+
+IMPL_LINK( SfxSecurityPage_Impl, RecordChangesCBToggleHdl, void*, EMPTYARG )
+{
+ // when change recording gets disabled protection must be disabled as well
+ if (!m_aRecordChangesCB.IsChecked()) // the new check state is already present, thus the '!'
+ {
+ bool bAlreadyDone = false;
+ if (!m_bEndRedliningWarningDone)
+ {
+ WarningBox aBox( m_rMyTabPage.GetParent(), WinBits(WB_YES_NO | WB_DEF_NO),
+ m_aEndRedliningWarning );
+ if (aBox.Execute() != RET_YES)
+ bAlreadyDone = true;
+ else
+ m_bEndRedliningWarningDone = true;
+ }
+
+ const bool bNeedPasssword = !m_bOrigPasswordIsConfirmed
+ && m_aChangeProtectionPB.GetText() != m_aProtectSTR;
+ if (!bAlreadyDone && bNeedPasssword)
+ {
+ String aPasswordText;
+
+ // dialog canceled or no password provided
+ if (!lcl_GetPassword( m_rMyTabPage.GetParent(), false, aPasswordText ))
+ bAlreadyDone = true;
+
+ // ask for password and if dialog is canceled or no password provided return
+ if (lcl_IsPasswordCorrect( aPasswordText ))
+ m_bOrigPasswordIsConfirmed = true;
+ else
+ bAlreadyDone = true;
+ }
+
+ if (bAlreadyDone)
+ m_aRecordChangesCB.Check( true ); // restore original state
+ else
+ {
+ // remember required values to change protection and change recording in
+ // FillItemSet_Impl later on if password was correct.
+ m_bNewPasswordIsValid = true;
+ m_aNewPassword = String();
+
+ m_aChangeProtectionPB.SetText( m_aProtectSTR );
+ }
+ }
+
+ return 0;
+}
+
+
+IMPL_LINK( SfxSecurityPage_Impl, ChangeProtectionPBHdl, void*, EMPTYARG )
+{
+ if (m_eRedlingMode == RL_NONE)
+ return 0;
+
+ // the push button text is always the opposite of the current state. Thus:
+ const bool bCurrentProtection = m_aChangeProtectionPB.GetText() != m_aProtectSTR;
+
+ // ask user for password (if still necessary)
+ String aPasswordText;
+ bool bNewProtection = !bCurrentProtection;
+ const bool bNeedPassword = bNewProtection || !m_bOrigPasswordIsConfirmed;
+ if (bNeedPassword)
+ {
+ // ask for password and if dialog is canceled or no password provided return
+ if (!lcl_GetPassword( m_rMyTabPage.GetParent(), bNewProtection, aPasswordText ))
+ return 0;
+
+ // provided password still needs to be checked?
+ if (!bNewProtection && !m_bOrigPasswordIsConfirmed)
+ {
+ if (lcl_IsPasswordCorrect( aPasswordText ))
+ m_bOrigPasswordIsConfirmed = true;
+ else
+ return 0;
+ }
+ }
+ DBG_ASSERT( m_bOrigPasswordIsConfirmed, "ooops... this should not have happened!" );
+
+ // remember required values to change protection and change recording in
+ // FillItemSet_Impl later on if password was correct.
+ m_bNewPasswordIsValid = true;
+ m_aNewPassword = bNewProtection? aPasswordText : String();
+
+// // RecordChangesCB is enabled if protection is off
+// m_aRecordChangesCB.Enable( !bNewProtection );
+ m_aRecordChangesCB.Check( bNewProtection );
+ // toggle text of button "Protect" <-> "Unprotect"
+ m_aChangeProtectionPB.SetText( bNewProtection ? m_aUnProtectSTR : m_aProtectSTR );
+
+ return 0;
+}
+
+
+//////////////////////////////////////////////////////////////////////
+
+
+SfxTabPage* SfxSecurityPage::Create( Window * pParent, const SfxItemSet & rItemSet )
+{
+ return new SfxSecurityPage( pParent, rItemSet );
+}
+
+
+SfxSecurityPage::SfxSecurityPage( Window* pParent, const SfxItemSet& rItemSet ) :
+ SfxTabPage( pParent, SfxResId( TP_DOCINFOSECURITY ), rItemSet )
+{
+ m_pImpl = std::auto_ptr< SfxSecurityPage_Impl >(new SfxSecurityPage_Impl( *this, rItemSet ));
+
+ FreeResource();
+}
+
+
+SfxSecurityPage::~SfxSecurityPage()
+{
+}
+
+
+BOOL SfxSecurityPage::FillItemSet( SfxItemSet & rItemSet )
+{
+ bool bModified = false;
+ DBG_ASSERT( m_pImpl.get(), "implementation pointer is 0. Still in c-tor?" );
+ if (m_pImpl.get() != 0)
+ bModified = m_pImpl->FillItemSet_Impl( rItemSet );
+ return bModified;
+}
+
+
+void SfxSecurityPage::Reset( const SfxItemSet & rItemSet )
+{
+ DBG_ASSERT( m_pImpl.get(), "implementation pointer is 0. Still in c-tor?" );
+ if (m_pImpl.get() != 0)
+ m_pImpl->Reset_Impl( rItemSet );
+}
+
+
+//////////////////////////////////////////////////////////////////////
+
+
diff --git a/sd/source/ui/inc/printdlg.hxx b/sfx2/source/dialog/securitypage.hrc
index 2795bccc2160..d425131b4772 100644..100755
--- a/sd/source/ui/inc/printdlg.hxx
+++ b/sfx2/source/dialog/securitypage.hrc
@@ -24,47 +24,29 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+#ifndef _SECURITYPAGE_HRC_
+#define _SECURITYPAGE_HRC_
+
+
+#define PASSWORD_TO_OPEN_FL 1
+#define PASSWORD_TO_OPEN_FT 2
+#define PASSWORD_TO_OPEN_ED 3
+#define CONFIRM_PASSWORD_TO_OPEN_FT 4
+#define CONFIRM_PASSWORD_TO_OPEN_ED 5
+#define PASSWORD_INFO_FT 6
+#define PASSWORD_TO_MODIFY_FL 7
+#define PASSWORD_TO_MODIFY_FT 8
+#define PASSWORD_TO_MODIFY_ED 9
+#define CONFIRM_PASSWORD_TO_MODIFY_FT 10
+#define CONFIRM_PASSWORD_TO_MODIFY_ED 11
+#define OPTIONS_FL 12
+#define OPEN_READONLY_CB 13
+#define RECORD_CHANGES_CB 14
+#define CHANGE_PROTECTION_PB 15
+
+#define STR_PROTECT 101
+#define STR_UNPROTECT 102
+#define STR_END_REDLINING_WARNING 103
-
-#ifndef _SD_PRINTDLG_HXX_
-#define _SD_PRINTDLG_HXX_
-
-
-#include <vcl/group.hxx>
-#include <vcl/dialog.hxx>
-
-#ifndef _SV_BUTTON_HXX //autogen
-#include <vcl/button.hxx>
#endif
-#include <svtools/stdctrl.hxx>
-
-
-/*************************************************************************
-|*
-|* SdPrintDlg::SdPrintDlg()
-|*
-|* Beschreibung Dialog zum Einstellen von Printoptionen
-|*
-*************************************************************************/
-
-class SdPrintDlg : public ModalDialog
-{
-private:
- FixedInfo aFtInfo;
- RadioButton aRbtScale;
- RadioButton aRbtPoster;
- RadioButton aRbtCut;
- FixedLine aGrpOptions;
- OKButton aBtnOK;
- CancelButton aBtnCancel;
- HelpButton aBtnHelp;
-
-public:
-
- SdPrintDlg( Window* pWindow );
-
- USHORT GetAttr();
-};
-
-#endif // _SD_PRINTDLG_HXX_
diff --git a/sfx2/source/dialog/securitypage.src b/sfx2/source/dialog/securitypage.src
new file mode 100755
index 000000000000..fee60404d01c
--- /dev/null
+++ b/sfx2/source/dialog/securitypage.src
@@ -0,0 +1,174 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#include "sfx2/sfx.hrc"
+#include "securitypage.hrc"
+#include "helpid.hrc"
+#include "dialog.hrc"
+#include "sfxlocal.hrc"
+
+#include <svtools/controldims.hrc>
+
+
+TabPage TP_DOCINFOSECURITY
+{
+ HelpId = HID_DOCINFOSECURITY ;
+ Hide = TRUE ;
+ Size = MAP_APPFONT ( 260 , 185 ) ;
+
+ FixedLine PASSWORD_TO_OPEN_FL
+ {
+ Pos = MAP_APPFONT( 6, 6 );
+ Size = MAP_APPFONT( 248, RSC_CD_FIXEDLINE_HEIGHT );
+ Text [ en-US ] = "File encryption password";
+ };
+ FixedText PASSWORD_TO_OPEN_FT
+ {
+ Pos = MAP_APPFONT( 12, 20 );
+ Size = MAP_APPFONT( 82, RSC_CD_FIXEDTEXT_HEIGHT );
+ Text [ en-US ] = "~Enter password to open";
+ };
+ Edit PASSWORD_TO_OPEN_ED
+ {
+ HelpId = HID_SECURITYTAB_PASSWORD_TO_OPEN;
+ Pos = MAP_APPFONT( 100, 18 );
+ Size = MAP_APPFONT( 88, RSC_CD_TEXTBOX_HEIGHT );
+ Border = TRUE;
+ PassWord = TRUE;
+ };
+ FixedText CONFIRM_PASSWORD_TO_OPEN_FT
+ {
+ Pos = MAP_APPFONT( 12, 34 );
+ Size = MAP_APPFONT( 82, RSC_CD_FIXEDTEXT_HEIGHT );
+ Text [ en-US ] = "~Reenter password to open";
+ };
+ Edit CONFIRM_PASSWORD_TO_OPEN_ED
+ {
+ HelpId = HID_SECURITYTAB_CONFIRM_PASSWORD_TO_OPEN;
+ Pos = MAP_APPFONT( 100, 32 );
+ Size = MAP_APPFONT( 88, RSC_CD_TEXTBOX_HEIGHT );
+ Border = TRUE;
+ PassWord = TRUE;
+ };
+ FixedText PASSWORD_INFO_FT
+ {
+ Pos = MAP_APPFONT( 12, 48 );
+ Size = MAP_APPFONT( 236, 3 * RSC_CD_FIXEDTEXT_HEIGHT );
+ Text [ en-US ] =
+ "Note: After a password has been set, the document will only open "\
+ "with the password. Should you lose the password, there will be "\
+ "no way to recover the document. Please also note that this password "\
+ "is case-sensitive.";
+ WordBreak = TRUE;
+ };
+ FixedLine PASSWORD_TO_MODIFY_FL
+ {
+ Pos = MAP_APPFONT( 6, 78 );
+ Size = MAP_APPFONT( 248, RSC_CD_FIXEDLINE_HEIGHT );
+ Text [ en-US ] = "File sharing password";
+ };
+ FixedText PASSWORD_TO_MODIFY_FT
+ {
+ Pos = MAP_APPFONT( 12, 92 );
+ Size = MAP_APPFONT( 82, RSC_CD_FIXEDTEXT_HEIGHT );
+ Text [ en-US ] = "Enter password to modify";
+ };
+ Edit PASSWORD_TO_MODIFY_ED
+ {
+ HelpId = HID_SECURITYTAB_PASSWORD_TO_MODIFY;
+ Pos = MAP_APPFONT( 100, 90 );
+ Size = MAP_APPFONT( 88, RSC_CD_TEXTBOX_HEIGHT );
+ Border = TRUE;
+ PassWord = TRUE;
+ };
+ FixedText CONFIRM_PASSWORD_TO_MODIFY_FT
+ {
+ Pos = MAP_APPFONT( 12, 106 );
+ Size = MAP_APPFONT( 82, RSC_CD_FIXEDTEXT_HEIGHT );
+ Text [ en-US ] = "Reenter password to modify";
+ };
+ Edit CONFIRM_PASSWORD_TO_MODIFY_ED
+ {
+ HelpId = HID_SECURITYTAB_CONFIRM_PASSWORD_TO_MODIFY;
+ Pos = MAP_APPFONT( 100, 104 );
+ Size = MAP_APPFONT( 88, RSC_CD_TEXTBOX_HEIGHT );
+ Border = TRUE;
+ PassWord = TRUE;
+ };
+ FixedLine OPTIONS_FL
+ {
+ Pos = MAP_APPFONT( 6, 120 );
+ Size = MAP_APPFONT( 248, RSC_CD_FIXEDLINE_HEIGHT );
+ Text [ en-US ] = "File sharing options";
+ };
+ CheckBox OPEN_READONLY_CB
+ {
+ HelpId = HID_SECURITYTAB_OPEN_FILE_READONLY;
+ Pos = MAP_APPFONT( 12, 133 );
+ Size = MAP_APPFONT( 176, RSC_CD_CHECKBOX_HEIGHT );
+ Text [ en-US ] = "~Open file read-only";
+ };
+ CheckBox RECORD_CHANGES_CB
+ {
+ HelpId = HID_SECURITYTAB_RECORD_CHANGES;
+ Pos = MAP_APPFONT( 12, 147 );
+ Size = MAP_APPFONT( 176, RSC_CD_CHECKBOX_HEIGHT );
+ Text [ en-US ] = "Record ~changes";
+ };
+ PushButton CHANGE_PROTECTION_PB
+ {
+ HelpId = HID_SECURITYTAB_PROTECTION;
+ Pos = MAP_APPFONT( 194, 145 );
+ Size = MAP_APPFONT( 60, RSC_CD_PUSHBUTTON_HEIGHT );
+ };
+ String STR_PROTECT
+ {
+ Text [ en-US ] = "~Protect...";
+ };
+ String STR_UNPROTECT
+ {
+ Text [ en-US ] = "~Unprotect...";
+ };
+ String STR_END_REDLINING_WARNING
+ {
+ Text [ en-US ] = "This action will exit the change recording mode.\nAny information about changes will be lost.\n\nExit change recording mode?\n\n" ;
+ };
+};
+
+String RID_SFX_PROTECT_RECORDS
+{
+ Text [ en-US ] = "Protect Records" ;
+};
+String RID_SFX_UNPROTECT_RECORDS
+{
+ Text [ en-US ] = "Unprotect Records" ;
+};
+String RID_SFX_INCORRECT_PASSWORD
+{
+ Text [ en-US ] = "Incorrect password" ;
+};
+
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 298da13be147..1dea202e0d0e 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -115,6 +115,7 @@ using namespace ::com::sun::star::io;
#include <comphelper/storagehelper.hxx>
#include <comphelper/mediadescriptor.hxx>
#include <comphelper/configurationhelper.hxx>
+#include <comphelper/docpasswordhelper.hxx>
#include <tools/urlobj.hxx>
#include <tools/inetmime.hxx>
#include <unotools/ucblockbytes.hxx>
@@ -2558,18 +2559,72 @@ void SfxMedium::SetFilter( const SfxFilter* pFilterP, sal_Bool /*bResetOrig*/ )
pFilter = pFilterP;
pImp->nFileVersion = 0;
}
+
//----------------------------------------------------------------
const SfxFilter* SfxMedium::GetOrigFilter( sal_Bool bNotCurrent ) const
{
return ( pImp->pOrigFilter || bNotCurrent ) ? pImp->pOrigFilter : pFilter;
}
+
//----------------------------------------------------------------
void SfxMedium::SetOrigFilter_Impl( const SfxFilter* pOrigFilter )
{
pImp->pOrigFilter = pOrigFilter;
}
+
+//------------------------------------------------------------------
+
+sal_uInt32 SfxMedium::CreatePasswordToModifyHash( const ::rtl::OUString& aPasswd, sal_Bool bWriter )
+{
+ sal_uInt32 nHash = 0;
+
+ if ( aPasswd.getLength() )
+ {
+ if ( bWriter )
+ {
+ nHash = ::comphelper::DocPasswordHelper::GetWordHashAsUINT32( aPasswd );
+ }
+ else
+ {
+ rtl_TextEncoding nEncoding = RTL_TEXTENCODING_UTF8;
+
+ // if the MS-filter should be used
+ // use the inconsistent algorithm to find the encoding specified by MS
+ nEncoding = osl_getThreadTextEncoding();
+ switch( nEncoding )
+ {
+ case RTL_TEXTENCODING_ISO_8859_15:
+ case RTL_TEXTENCODING_MS_874:
+ case RTL_TEXTENCODING_MS_1250:
+ case RTL_TEXTENCODING_MS_1251:
+ case RTL_TEXTENCODING_MS_1252:
+ case RTL_TEXTENCODING_MS_1253:
+ case RTL_TEXTENCODING_MS_1254:
+ case RTL_TEXTENCODING_MS_1255:
+ case RTL_TEXTENCODING_MS_1256:
+ case RTL_TEXTENCODING_MS_1257:
+ case RTL_TEXTENCODING_MS_1258:
+ case RTL_TEXTENCODING_SHIFT_JIS:
+ case RTL_TEXTENCODING_GB_2312:
+ case RTL_TEXTENCODING_BIG5:
+ // in case the system uses an encoding from the list above, it should be used
+ break;
+
+ default:
+ // in case other encoding is used, use one of the encodings from the list
+ nEncoding = RTL_TEXTENCODING_MS_1250;
+ break;
+ }
+
+ nHash = ::comphelper::DocPasswordHelper::GetXLHashAsUINT16( aPasswd, nEncoding );
+ }
+ }
+
+ return nHash;
+}
+
//------------------------------------------------------------------
void SfxMedium::Close()
diff --git a/sfx2/source/doc/docfilt.cxx b/sfx2/source/doc/docfilt.cxx
index e955c43af705..1219d30d7b27 100644
--- a/sfx2/source/doc/docfilt.cxx
+++ b/sfx2/source/doc/docfilt.cxx
@@ -49,20 +49,6 @@
using namespace ::com::sun::star;
-namespace sfx2 {
-
-// TODO #i105076# this should be in the filter configuration!!!
-bool CheckMSPasswordCapabilityForExport( const String& rFilterName )
-{
- return
- rFilterName.EqualsAscii( "MS Word 97" ) ||
- rFilterName.EqualsAscii( "MS Word 97 Vorlage" ) ||
- rFilterName.EqualsAscii( "MS Excel 97" ) ||
- rFilterName.EqualsAscii( "MS Excel 97 Vorlage/Template" );
-}
-
-} // namespace sfx2
-
// STATIC DATA -----------------------------------------------------------
DBG_NAME(SfxFilter)
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index 24f2f359607f..3c4df7276d6b 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -62,6 +62,9 @@
#include <unotools/pathoptions.hxx>
#include <unotools/pathoptions.hxx>
#include <svl/itemset.hxx>
+#include <svl/eitem.hxx>
+#include <svl/stritem.hxx>
+#include <svl/intitem.hxx>
#include <unotools/useroptions.hxx>
#include <unotools/saveopt.hxx>
#include <tools/debug.hxx>
@@ -80,6 +83,7 @@
#include <sfx2/app.hxx>
#include <sfx2/objsh.hxx>
#include <sfx2/dinfdlg.hxx>
+#include <sfx2/request.hxx>
#include <sfxtypes.hxx>
#include "alienwarn.hxx"
@@ -108,6 +112,7 @@ const ::rtl::OUString aFilterFlagsString = ::rtl::OUString::createFromAscii( "
using namespace ::com::sun::star;
+namespace {
//-------------------------------------------------------------------------
static sal_uInt16 getSlotIDFromMode( sal_Int8 nStoreMode )
{
@@ -168,6 +173,69 @@ static sal_Int32 getDontFlags( sal_Int8 nStoreMode )
}
//=========================================================================
+// class DocumentSettingsGuard
+//=========================================================================
+
+class DocumentSettingsGuard
+{
+ uno::Reference< beans::XPropertySet > m_xDocumentSettings;
+ sal_Bool m_bPreserveReadOnly;
+ sal_Bool m_bReadOnlySupported;
+
+ sal_Bool m_bRestoreSettings;
+public:
+ DocumentSettingsGuard( const uno::Reference< frame::XModel >& xModel, sal_Bool bReadOnly, sal_Bool bRestore )
+ : m_bPreserveReadOnly( sal_False )
+ , m_bReadOnlySupported( sal_False )
+ , m_bRestoreSettings( bRestore )
+ {
+ try
+ {
+ uno::Reference< lang::XMultiServiceFactory > xDocSettingsSupplier( xModel, uno::UNO_QUERY_THROW );
+ m_xDocumentSettings.set(
+ xDocSettingsSupplier->createInstance(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.Settings" ) ) ),
+ uno::UNO_QUERY_THROW );
+
+ ::rtl::OUString aLoadReadonlyString( RTL_CONSTASCII_USTRINGPARAM( "LoadReadonly" ) );
+
+ try
+ {
+ m_xDocumentSettings->getPropertyValue( aLoadReadonlyString ) >>= m_bPreserveReadOnly;
+ m_xDocumentSettings->setPropertyValue( aLoadReadonlyString, uno::makeAny( bReadOnly ) );
+ m_bReadOnlySupported = sal_True;
+ }
+ catch( uno::Exception& )
+ {}
+ }
+ catch( uno::Exception& )
+ {}
+
+ if ( ( bReadOnly && !m_bReadOnlySupported ) )
+ throw uno::RuntimeException(); // the user could provide the data, so it must be stored
+ }
+
+ ~DocumentSettingsGuard()
+ {
+ if ( m_bRestoreSettings )
+ {
+ ::rtl::OUString aLoadReadonlyString( RTL_CONSTASCII_USTRINGPARAM( "LoadReadonly" ) );
+
+ try
+ {
+ if ( m_bReadOnlySupported )
+ m_xDocumentSettings->setPropertyValue( aLoadReadonlyString, uno::makeAny( m_bPreserveReadOnly ) );
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ASSERT( "Unexpected exception!" );
+ }
+ }
+ }
+};
+} // anonymous namespace
+
+//=========================================================================
// class ModelData_Impl
//=========================================================================
class ModelData_Impl
@@ -184,6 +252,8 @@ class ModelData_Impl
::comphelper::SequenceAsHashMap m_aMediaDescrHM;
+ sal_Bool m_bRecommendReadOnly;
+
public:
ModelData_Impl( SfxStoringHelper& aOwner,
const uno::Reference< frame::XModel >& xModel,
@@ -200,6 +270,8 @@ public:
::comphelper::SequenceAsHashMap& GetMediaDescr() { return m_aMediaDescrHM; }
+ sal_Bool IsRecommendReadOnly() { return m_bRecommendReadOnly; }
+
const ::comphelper::SequenceAsHashMap& GetDocProps();
::rtl::OUString GetModuleName();
@@ -252,6 +324,7 @@ ModelData_Impl::ModelData_Impl( SfxStoringHelper& aOwner,
, m_pDocumentPropsHM( NULL )
, m_pModulePropsHM( NULL )
, m_aMediaDescrHM( aMediaDescr )
+, m_bRecommendReadOnly( sal_False )
{
CheckInteractionHandler();
}
@@ -923,6 +996,12 @@ sal_Bool ModelData_Impl::OutputFileDialog( sal_Int8 nStoreMode,
::rtl::OUString aFilterName = aStringTypeFN;
+ // the following two arguments can not be converted in MediaDescriptor,
+ // so they should be removed from the ItemSet after retrieving
+ SFX_ITEMSET_ARG( pDialogParams, pRecommendReadOnly, SfxBoolItem, SID_RECOMMENDREADONLY, sal_False );
+ m_bRecommendReadOnly = ( pRecommendReadOnly && pRecommendReadOnly->GetValue() );
+ pDialogParams->ClearItem( SID_RECOMMENDREADONLY );
+
uno::Sequence< beans::PropertyValue > aPropsFromDialog;
TransformItems( nSlotID, *pDialogParams, aPropsFromDialog, NULL );
GetMediaDescr() << aPropsFromDialog;
@@ -1509,6 +1588,8 @@ sal_Bool SfxStoringHelper::GUIStoreModel( const uno::Reference< frame::XModel >&
// store the document and handle it's docinfo
SvtSaveOptions aOptions;
+ DocumentSettingsGuard aSettingsGuard( aModelData.GetModel(), aModelData.IsRecommendReadOnly(), nStoreMode & EXPORT_REQUESTED );
+
if ( aOptions.IsDocInfoSave()
&& ( !aModelData.GetStorable()->hasLocation()
|| INetURLObject( aModelData.GetStorable()->getLocation() ) != aURL ) )
diff --git a/sfx2/source/doc/objcont.cxx b/sfx2/source/doc/objcont.cxx
index e73594af1e10..451e33084c07 100644
--- a/sfx2/source/doc/objcont.cxx
+++ b/sfx2/source/doc/objcont.cxx
@@ -1242,3 +1242,51 @@ void SfxObjectShell::SetSaveVersionOnClose( sal_Bool bNew )
pImp->bSaveVersionOnClose = bNew;
}
+sal_uInt32 SfxObjectShell::GetModifyPasswordHash() const
+{
+ return pImp->m_nModifyPasswordHash;
+}
+
+sal_Bool SfxObjectShell::SetModifyPasswordHash( sal_uInt32 nHash )
+{
+ if ( ( !IsReadOnly() && !IsReadOnlyUI() )
+ || !(pImp->nFlagsInProgress & SFX_LOADED_MAINDOCUMENT ) )
+ {
+ // the hash can be changed only in editable documents,
+ // or during loading of document
+ pImp->m_nModifyPasswordHash = nHash;
+ return sal_True;
+ }
+
+ return sal_False;
+}
+
+uno::Sequence< beans::PropertyValue > SfxObjectShell::GetModifyPasswordInfo() const
+{
+ return pImp->m_aModifyPasswordInfo;
+}
+
+sal_Bool SfxObjectShell::SetModifyPasswordInfo( const uno::Sequence< beans::PropertyValue >& aInfo )
+{
+ if ( ( !IsReadOnly() && !IsReadOnlyUI() )
+ || !(pImp->nFlagsInProgress & SFX_LOADED_MAINDOCUMENT ) )
+ {
+ // the hash can be changed only in editable documents,
+ // or during loading of document
+ pImp->m_aModifyPasswordInfo = aInfo;
+ return sal_True;
+ }
+
+ return sal_False;
+}
+
+void SfxObjectShell::SetModifyPasswordEntered( sal_Bool bEntered )
+{
+ pImp->m_bModifyPasswordEntered = bEntered;
+}
+
+sal_Bool SfxObjectShell::IsModifyPasswordEntered()
+{
+ return pImp->m_bModifyPasswordEntered;
+}
+
diff --git a/sfx2/source/doc/objmisc.cxx b/sfx2/source/doc/objmisc.cxx
index 628c3b020c08..addb648ef2e9 100755
--- a/sfx2/source/doc/objmisc.cxx
+++ b/sfx2/source/doc/objmisc.cxx
@@ -470,6 +470,32 @@ void SfxObjectShell::SetReadOnlyUI( sal_Bool bReadOnly )
//-------------------------------------------------------------------------
+void SfxObjectShell::SetReadOnly()
+{
+ // Let the document be completely readonly, means that the
+ // medium open mode is adjusted accordingly, and the write lock
+ // on the file is removed.
+
+ if ( pMedium && !IsReadOnlyMedium() )
+ {
+ sal_Bool bWasROUI = IsReadOnly();
+
+ pMedium->UnlockFile( sal_False );
+
+ // the storage-based mediums are already based on the temporary file
+ // so UnlockFile has already closed the locking stream
+ if ( !pMedium->HasStorage_Impl() && IsLoadingFinished() )
+ pMedium->CloseInStream();
+
+ pMedium->SetOpenMode( SFX_STREAM_READONLY, pMedium->IsDirect(), sal_True );
+ pMedium->GetItemSet()->Put( SfxBoolItem( SID_DOC_READONLY, sal_True ) );
+
+ if ( !bWasROUI )
+ Broadcast( SfxSimpleHint(SFX_HINT_MODECHANGED) );
+ }
+}
+//-------------------------------------------------------------------------
+
sal_Bool SfxObjectShell::IsReadOnly() const
{
return pImp->bReadOnlyUI || IsReadOnlyMedium();
@@ -1363,6 +1389,9 @@ void SfxObjectShell::FinishedLoading( sal_uInt16 nFlags )
if( !IsAbortingImport() )
PositionView_Impl();
+ if ( ( GetModifyPasswordHash() || GetModifyPasswordInfo().getLength() ) && !IsModifyPasswordEntered() )
+ SetReadOnly();
+
// Salvage
if ( pSalvageItem )
bSetModifiedTRUE = sal_True;
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index 6e1d89f2a8cd..49188defc4f1 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -1332,7 +1332,6 @@ sal_Bool SfxObjectShell::SaveTo_Impl
{
if ( pFilt->GetServiceName() != rMedium.GetFilter()->GetServiceName() )
{
-//REMOVE rMedium.GetStorage()->SetClass( SvFactory::GetServerName( nFormat ), nFormat, pFilt->GetTypeName() );
datatransfer::DataFlavor aDataFlavor;
SotExchange::GetFormatDataFlavor( nFormat, aDataFlavor );
@@ -2049,9 +2048,6 @@ sal_Bool SfxObjectShell::DoSaveCompleted( SfxMedium* pNewMed )
}
else
{
-//REMOVE if( pFilter->UsesStorage() )
-//REMOVE pMedium->GetStorage();
-//REMOVE else if( pMedium->GetOpenMode() & STREAM_WRITE )
if( pMedium->GetOpenMode() & STREAM_WRITE )
pMedium->GetInStream();
xStorage = GetStorage();
@@ -2589,9 +2585,6 @@ sal_Bool SfxObjectShell::DoSave_Impl( const SfxItemSet* pArgs )
SetError(pMediumTmp->GetErrorCode(), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) );
-//REMOVE if ( !IsHandsOff() )
-//REMOVE pMediumTmp->Close();
-
sal_Bool bOpen( sal_False );
bOpen = DoSaveCompleted( pMediumTmp );
DBG_ASSERT(bOpen,"Fehlerbehandlung fuer DoSaveCompleted nicht implementiert");
@@ -2602,13 +2595,7 @@ sal_Bool SfxObjectShell::DoSave_Impl( const SfxItemSet* pArgs )
SetError( pMediumTmp->GetError(), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) );
// reconnect to object storage
-//REMOVE if ( IsHandsOff() )
-//REMOVE {
-//REMOVE if ( !DoSaveCompleted( pRetrMedium ) )
-//REMOVE DBG_ERROR("Case not handled - no way to get a storage!");
-//REMOVE }
-//REMOVE else
- DoSaveCompleted( 0 );
+ DoSaveCompleted( 0 );
if( pRetrMedium->GetItemSet() )
{
@@ -2867,8 +2854,6 @@ sal_Bool SfxObjectShell::PreDoSaveAs_Impl
else
pNewFile->SetFilter( GetFactory().GetFilterContainer()->GetAnyFilter( SFX_FILTER_IMPORT | SFX_FILTER_EXPORT ) );
-//REMOVE // saving is alway done using a temporary file
-//REMOVE pNewFile->CreateTempFileNoCopy();
if ( pNewFile->GetErrorCode() != ERRCODE_NONE )
{
// creating temporary file failed ( f.e. floppy disk not inserted! )
@@ -2905,18 +2890,8 @@ sal_Bool SfxObjectShell::PreDoSaveAs_Impl
SetError( pNewFile->GetErrorCode(), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) );
// notify the document that saving was done successfully
-//REMOVE if ( bCopyTo )
-//REMOVE {
-//REMOVE if ( IsHandsOff() )
-//REMOVE bOk = DoSaveCompleted( pMedium );
-//REMOVE }
-//REMOVE else
if ( !bCopyTo )
{
- // Muss !!!
-//REMOVE if ( bToOwnFormat )
-//REMOVE SetFileName( pNewFile->GetPhysicalName() );
-
bOk = DoSaveCompleted( pNewFile );
}
else
@@ -2948,31 +2923,12 @@ sal_Bool SfxObjectShell::PreDoSaveAs_Impl
// by the storage
DELETEZ( pNewFile );
}
-
- // TODO/LATER: there is no need in the following code in case HandsOff is not used,
- // hope we will not have to introduce it back
-//REMOVE String aPasswd;
-//REMOVE if ( IsOwnStorageFormat_Impl( *GetMedium() ) && GetPasswd_Impl( GetMedium()->GetItemSet(), aPasswd ) )
-//REMOVE {
-//REMOVE try
-//REMOVE {
-//REMOVE // the following code must throw an exception in case of failure
-//REMOVE ::comphelper::OStorageHelper::SetCommonStoragePassword( GetMedium->GetStorage(), aPasswd );
-//REMOVE }
-//REMOVE catch( uno::Exception& )
-//REMOVE {
-//REMOVE // TODO: handle the error
-//REMOVE }
-//REMOVE }
}
else
{
SetError( pNewFile->GetErrorCode(), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) );
-//REMOVE // reconnect to the old storage
-//REMOVE if ( IsHandsOff() )
-//REMOVE DoSaveCompleted( pMedium );
-//REMOVE else
+ // reconnect to the old storage
DoSaveCompleted( 0 );
DELETEZ( pNewFile );
@@ -3153,9 +3109,6 @@ sal_Bool SfxObjectShell::LoadOwnFormat( SfxMedium& rMedium )
uno::Reference< embed::XStorage > xStorage = rMedium.GetStorage();
if ( xStorage.is() )
{
-//REMOVE if ( rMedium.GetFileVersion() )
-//REMOVE xStor->SetVersion( rMedium.GetFileVersion() );
-
// Password
SFX_ITEMSET_ARG( rMedium.GetItemSet(), pPasswdItem, SfxStringItem, SID_PASSWORD, sal_False );
if ( pPasswdItem || ERRCODE_IO_ABORT != CheckPasswd_Impl( this, SFX_APP()->GetPool(), pMedium ) )
diff --git a/sfx2/source/doc/objxtor.cxx b/sfx2/source/doc/objxtor.cxx
index 6502eeaeb78c..f202266dd74e 100644..100755
--- a/sfx2/source/doc/objxtor.cxx
+++ b/sfx2/source/doc/objxtor.cxx
@@ -247,6 +247,8 @@ SfxObjectShell_Impl::SfxObjectShell_Impl( SfxObjectShell& _rDocShell )
,m_bCreateTempStor( sal_False )
,m_bIsInit( sal_False )
,m_bIncomplEncrWarnShown( sal_False )
+ ,m_nModifyPasswordHash( 0 )
+ ,m_bModifyPasswordEntered( sal_False )
{
SfxObjectShell* pDoc = &_rDocShell;
SfxObjectShellArr_Impl &rArr = SFX_APP()->GetObjectShells_Impl();
@@ -1074,3 +1076,43 @@ void SfxObjectShell::SetInitialized_Impl( const bool i_fromInitNew )
SFX_APP()->NotifyEvent( SfxEventHint( SFX_EVENT_LOADFINISHED, GlobalEventConfig::GetEventName(STR_EVENT_LOADFINISHED), this ) );
}
}
+
+
+bool SfxObjectShell::IsChangeRecording() const
+{
+ // currently this function needs to be overwritten by Writer and Calc only
+ DBG_ASSERT( 0, "function not implemented" );
+ return false;
+}
+
+
+bool SfxObjectShell::HasChangeRecordProtection() const
+{
+ // currently this function needs to be overwritten by Writer and Calc only
+ DBG_ASSERT( 0, "function not implemented" );
+ return false;
+}
+
+
+void SfxObjectShell::SetChangeRecording( bool /*bActivate*/ )
+{
+ // currently this function needs to be overwritten by Writer and Calc only
+ DBG_ASSERT( 0, "function not implemented" );
+}
+
+
+bool SfxObjectShell::SetProtectionPassword( const String & /*rPassword*/ )
+{
+ // currently this function needs to be overwritten by Writer and Calc only
+ DBG_ASSERT( 0, "function not implemented" );
+ return false;
+}
+
+
+bool SfxObjectShell::GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > & /*rPasswordHash*/ )
+{
+ // currently this function needs to be overwritten by Writer and Calc only
+ DBG_ASSERT( 0, "function not implemented" );
+ return false;
+}
+
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index e1b37c119f1a..b5a9536b12c5 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -74,6 +74,7 @@
#include <svl/itemset.hxx>
#include <svl/stritem.hxx>
#include <svl/eitem.hxx>
+#include <svl/intitem.hxx>
#include <basic/sbx.hxx>
#include <basic/sbuno.hxx>
#include <tools/urlobj.hxx>
@@ -2731,6 +2732,24 @@ void SfxBaseModel::impl_store( const ::rtl::OUString& sURL
uno::Reference< uno::XInterface >() );
}
+ sal_uInt32 nModifyPasswordHash = 0;
+ uno::Sequence< beans::PropertyValue > aModifyPasswordInfo;
+ SFX_ITEMSET_ARG( aParams, pModifyPasswordInfoItem, SfxUnoAnyItem, SID_MODIFYPASSWORDINFO, sal_False );
+ if ( pModifyPasswordInfoItem )
+ {
+ // it contains either a simple hash or a set of PropertyValues
+ // TODO/LATER: the sequence of PropertyValue should replace the hash completely in future
+ sal_Int32 nMPHTmp = 0;
+ pModifyPasswordInfoItem->GetValue() >>= nMPHTmp;
+ nModifyPasswordHash = (sal_uInt32)nMPHTmp;
+ pModifyPasswordInfoItem->GetValue() >>= aModifyPasswordInfo;
+ }
+ aParams->ClearItem( SID_MODIFYPASSWORDINFO );
+ sal_uInt32 nOldModifyPasswordHash = m_pData->m_pObjectShell->GetModifyPasswordHash();
+ m_pData->m_pObjectShell->SetModifyPasswordHash( nModifyPasswordHash );
+ uno::Sequence< beans::PropertyValue > aOldModifyPasswordInfo = m_pData->m_pObjectShell->GetModifyPasswordInfo();
+ m_pData->m_pObjectShell->SetModifyPasswordInfo( aModifyPasswordInfo );
+
// since saving a document modifies its DocumentInfo, the current
// DocumentInfo must be saved on "SaveTo", so it can be restored
// after saving
@@ -2809,10 +2828,15 @@ void SfxBaseModel::impl_store( const ::rtl::OUString& sURL
if ( !bSaveTo )
{
m_pData->m_aPreusedFilterName = GetMediumFilterName_Impl();
+ m_pData->m_pObjectShell->SetModifyPasswordEntered();
+
SFX_APP()->NotifyEvent( SfxEventHint( SFX_EVENT_SAVEASDOCDONE, GlobalEventConfig::GetEventName(STR_EVENT_SAVEASDOCDONE), m_pData->m_pObjectShell ) );
}
else
{
+ m_pData->m_pObjectShell->SetModifyPasswordHash( nOldModifyPasswordHash );
+ m_pData->m_pObjectShell->SetModifyPasswordInfo( aOldModifyPasswordInfo );
+
SFX_APP()->NotifyEvent( SfxEventHint( SFX_EVENT_SAVETODOCDONE, GlobalEventConfig::GetEventName(STR_EVENT_SAVETODOCDONE), m_pData->m_pObjectShell ) );
}
}
@@ -2822,6 +2846,10 @@ void SfxBaseModel::impl_store( const ::rtl::OUString& sURL
m_pData->m_pObjectShell->AddLog( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX "Storing failed!" ) ) );
m_pData->m_pObjectShell->StoreLog();
+ m_pData->m_pObjectShell->SetModifyPasswordHash( nOldModifyPasswordHash );
+ m_pData->m_pObjectShell->SetModifyPasswordInfo( aOldModifyPasswordInfo );
+
+
SFX_APP()->NotifyEvent( SfxEventHint( bSaveTo ? SFX_EVENT_SAVETODOCFAILED : SFX_EVENT_SAVEASDOCFAILED, GlobalEventConfig::GetEventName( bSaveTo ? STR_EVENT_SAVETODOCFAILED : STR_EVENT_SAVEASDOCFAILED),
m_pData->m_pObjectShell ) );
diff --git a/sfx2/source/inc/appdata.hxx b/sfx2/source/inc/appdata.hxx
index 91305eb95cce..bd12f3db80dc 100644
--- a/sfx2/source/inc/appdata.hxx
+++ b/sfx2/source/inc/appdata.hxx
@@ -82,6 +82,9 @@ class SfxBasicManagerCreationListener;
namespace sfx2 { namespace appl { class ImeStatusWindow; } }
+typedef Link* LinkPtr;
+SV_DECL_PTRARR(SfxInitLinkList, LinkPtr, 4, 4)
+
//=========================================================================
// SfxAppData_Impl
//=========================================================================
diff --git a/sfx2/source/inc/helpid.hrc b/sfx2/source/inc/helpid.hrc
index 848446a774e9..79dba3208729 100644..100755
--- a/sfx2/source/inc/helpid.hrc
+++ b/sfx2/source/inc/helpid.hrc
@@ -46,6 +46,7 @@
#define HID_DOCINFODESC (HID_SFX_START + 8)
#define HID_DOCINFODOC (HID_SFX_START + 9)
#define HID_DOCINFOUSER (HID_SFX_START + 10)
+#define HID_DOCINFOSECURITY (HID_SFX_START + 11)
#define HID_BOOKMARKPROPS (HID_SFX_START + 14)
#define HID_BOOKGROUPPROPS (HID_SFX_START + 15)
#define HID_BOOKFILEPROPS (HID_SFX_START + 16)
@@ -346,7 +347,15 @@
#define HID_CTRL_CUSTOMPROPS_YES_NO (HID_SFX_START + 326)
#define HID_DLG_CUSTOMPROPS_DURATION (HID_SFX_START + 327)
-#define ACT_SFX_HID_END HID_DLG_CUSTOMPROPS_DURATION
+#define HID_SECURITYTAB_PASSWORD_TO_OPEN (HID_SFX_START + 328)
+#define HID_SECURITYTAB_CONFIRM_PASSWORD_TO_OPEN (HID_SFX_START + 329)
+#define HID_SECURITYTAB_PASSWORD_TO_MODIFY (HID_SFX_START + 330)
+#define HID_SECURITYTAB_CONFIRM_PASSWORD_TO_MODIFY (HID_SFX_START + 331)
+#define HID_SECURITYTAB_OPEN_FILE_READONLY (HID_SFX_START + 332)
+#define HID_SECURITYTAB_RECORD_CHANGES (HID_SFX_START + 333)
+#define HID_SECURITYTAB_PROTECTION (HID_SFX_START + 334)
+
+#define ACT_SFX_HID_END HID_SECURITYTAB_PROTECTION
// "Uberlaufpr"ufung --------------------------------------------------------
diff --git a/sfx2/source/inc/objshimp.hxx b/sfx2/source/inc/objshimp.hxx
index a882cfedd821..b5087fb46294 100644
--- a/sfx2/source/inc/objshimp.hxx
+++ b/sfx2/source/inc/objshimp.hxx
@@ -149,6 +149,10 @@ struct SfxObjectShell_Impl : public ::sfx2::IMacroDocumentAccess
sal_Bool m_bIncomplEncrWarnShown;
+ // TODO/LATER: m_aModifyPasswordInfo should completely replace m_nModifyPasswordHash in future
+ sal_uInt32 m_nModifyPasswordHash;
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aModifyPasswordInfo;
+ sal_Bool m_bModifyPasswordEntered;
SfxObjectShell_Impl( SfxObjectShell& _rDocShell );
virtual ~SfxObjectShell_Impl();
diff --git a/sfx2/source/view/ipclient.cxx b/sfx2/source/view/ipclient.cxx
index 6d61f4182bbb..328d88d8b2b9 100644
--- a/sfx2/source/view/ipclient.cxx
+++ b/sfx2/source/view/ipclient.cxx
@@ -131,6 +131,8 @@ public:
, m_bResizeNoScale( sal_False )
{}
+ ~SfxInPlaceClient_Impl();
+
void SizeHasChanged();
DECL_LINK (TimerHdl, Timer*);
uno::Reference < frame::XFrame > GetFrame() const;
@@ -168,6 +170,10 @@ public:
virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
};
+SfxInPlaceClient_Impl::~SfxInPlaceClient_Impl()
+{
+}
+
void SAL_CALL SfxInPlaceClient_Impl::changingState(
const ::com::sun::star::lang::EventObject& /*aEvent*/,
::sal_Int32 /*nOldState*/,
@@ -645,6 +651,7 @@ SfxInPlaceClient::SfxInPlaceClient( SfxViewShell* pViewShell, Window *pDraw, sal
m_pViewSh( pViewShell ),
m_pEditWin( pDraw )
{
+ m_pImp->acquire();
m_pImp->m_pClient = this;
m_pImp->m_nAspect = nAspect;
m_pImp->m_aScaleWidth = m_pImp->m_aScaleHeight = Fraction(1,1);
@@ -668,6 +675,7 @@ SfxInPlaceClient::~SfxInPlaceClient()
// the next call will destroy m_pImp if no other reference to it exists
m_pImp->m_xClient = uno::Reference < embed::XEmbeddedClient >();
+ m_pImp->release();
// TODO/LATER:
// the class is not intended to be used in multithreaded environment;
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 189c9a8aae0e..035fd3f794de 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -83,6 +83,8 @@
#include <comphelper/componentcontext.hxx>
#include <comphelper/namedvaluecollection.hxx>
#include <comphelper/configurationhelper.hxx>
+#include <comphelper/docpasswordrequest.hxx>
+#include <comphelper/docpasswordhelper.hxx>
#include <com/sun/star/uno/Reference.h>
#include <com/sun/star/ucb/XContent.hpp>
@@ -185,6 +187,56 @@ namespace
return *i_rViewFrameImpl.aHasToolPanels;
}
}
+
+//-------------------------------------------------------------------------
+static sal_Bool AskPasswordToModify_Impl( const uno::Reference< task::XInteractionHandler >& xHandler, const ::rtl::OUString& aPath, const SfxFilter* pFilter, sal_uInt32 nPasswordHash, const uno::Sequence< beans::PropertyValue > aInfo )
+{
+ // TODO/LATER: In future the info should replace the direct hash completely
+ sal_Bool bResult = ( !nPasswordHash && !aInfo.getLength() );
+
+ OSL_ENSURE( pFilter && ( pFilter->GetFilterFlags() & SFX_FILTER_PASSWORDTOMODIFY ), "PasswordToModify feature is active for a filter that does not support it!" );
+
+ if ( pFilter && xHandler.is() )
+ {
+ sal_Bool bCancel = sal_False;
+ sal_Bool bFirstTime = sal_True;
+
+ while ( !bResult && !bCancel )
+ {
+ sal_Bool bMSType = !pFilter->IsOwnFormat();
+
+ ::rtl::Reference< ::comphelper::DocPasswordRequest > pPasswordRequest(
+ new ::comphelper::DocPasswordRequest(
+ bMSType ? ::comphelper::DocPasswordRequestType_MS : ::comphelper::DocPasswordRequestType_STANDARD,
+ bFirstTime ? ::com::sun::star::task::PasswordRequestMode_PASSWORD_ENTER : ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER,
+ aPath,
+ sal_True ) );
+
+ uno::Reference< com::sun::star::task::XInteractionRequest > rRequest( pPasswordRequest.get() );
+ xHandler->handle( rRequest );
+
+ if ( pPasswordRequest->isPassword() )
+ {
+ if ( aInfo.getLength() )
+ {
+ bResult = ::comphelper::DocPasswordHelper::IsModifyPasswordCorrect( pPasswordRequest->getPasswordToModify(), aInfo );
+ }
+ else
+ {
+ // the binary format
+ bResult = ( SfxMedium::CreatePasswordToModifyHash( pPasswordRequest->getPasswordToModify(), ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.text.TextDocument" ) ).equals( pFilter->GetServiceName() ) ) == nPasswordHash );
+ }
+ }
+ else
+ bCancel = sal_True;
+
+ bFirstTime = sal_False;
+ }
+ }
+
+ return bResult;
+}
+
//-------------------------------------------------------------------------
void SfxViewFrame::SetDowning_Impl()
{
@@ -324,10 +376,11 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
if( !pSh || !pSh->HasName() || !(pSh->Get_Impl()->nLoadedFlags & SFX_LOADED_MAINDOCUMENT ))
break;
+ SfxMedium* pMed = pSh->GetMedium();
+
SFX_ITEMSET_ARG( pSh->GetMedium()->GetItemSet(), pItem, SfxBoolItem, SID_VIEWONLY, sal_False );
if ( pItem && pItem->GetValue() )
{
- SfxMedium* pMed = pSh->GetMedium();
SfxApplication* pApp = SFX_APP();
SfxAllItemSet aSet( pApp->GetPool() );
aSet.Put( SfxStringItem( SID_FILE_NAME, pMed->GetURLObject().GetMainURL(INetURLObject::NO_DECODE) ) );
@@ -359,17 +412,38 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
// Speichern und Readonly Reloaden
if( pSh->IsModified() )
{
- if ( !pSh->PrepareClose() )
+ if ( pSh->PrepareClose() )
+ {
+ // the storing could let the medium be changed
+ pMed = pSh->GetMedium();
+ bNeedsReload = sal_True;
+ }
+ else
{
rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), sal_False ) );
return;
}
- else bNeedsReload = sal_True;
}
nOpenMode = SFX_STREAM_READONLY;
}
else
{
+ if ( pSh->IsReadOnlyMedium()
+ && ( pSh->GetModifyPasswordHash() || pSh->GetModifyPasswordInfo().getLength() )
+ && !pSh->IsModifyPasswordEntered() )
+ {
+ ::rtl::OUString aDocumentName = INetURLObject( pMed->GetOrigURL() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET );
+ if( !AskPasswordToModify_Impl( pMed->GetInteractionHandler(), aDocumentName, pMed->GetOrigFilter(), pSh->GetModifyPasswordHash(), pSh->GetModifyPasswordInfo() ) )
+ {
+ // this is a read-only document, if it has "Password to modify"
+ // the user should enter password before he can edit the document
+ rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), sal_False ) );
+ return;
+ }
+
+ pSh->SetModifyPasswordEntered();
+ }
+
nOpenMode = SFX_STREAM_READWRITE;
pSh->SetReadOnlyUI( sal_False );
@@ -389,130 +463,113 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
}
// doing
- if( pSh )
+
+ String aTemp;
+ utl::LocalFileHelper::ConvertPhysicalNameToURL( pMed->GetPhysicalName(), aTemp );
+ INetURLObject aPhysObj( aTemp );
+ SFX_ITEMSET_ARG( pSh->GetMedium()->GetItemSet(),
+ pVersionItem, SfxInt16Item, SID_VERSION, sal_False );
+
+ INetURLObject aMedObj( pMed->GetName() );
+
+ // the logic below is following, if the document seems not to need to be reloaded and the physical name is different
+ // to the logical one, then on file system it can be checked that the copy is still newer than the original and no document reload is required
+ if ( ( !bNeedsReload && ( (aMedObj.GetProtocol() == INET_PROT_FILE &&
+ aMedObj.getFSysPath(INetURLObject::FSYS_DETECT) != aPhysObj.getFSysPath(INetURLObject::FSYS_DETECT) &&
+ !::utl::UCBContentHelper::IsYounger( aMedObj.GetMainURL( INetURLObject::NO_DECODE ), aPhysObj.GetMainURL( INetURLObject::NO_DECODE ) ))
+ || pMed->IsRemote() ) )
+ || pVersionItem )
{
- SfxMedium* pMed = pSh->GetMedium();
- String aTemp;
- utl::LocalFileHelper::ConvertPhysicalNameToURL( pMed->GetPhysicalName(), aTemp );
- INetURLObject aPhysObj( aTemp );
- SFX_ITEMSET_ARG( pSh->GetMedium()->GetItemSet(),
- pVersionItem, SfxInt16Item, SID_VERSION, sal_False );
-
- INetURLObject aMedObj( pMed->GetName() );
-
- // the logic below is following, if the document seems not to need to be reloaded and the physical name is different
- // to the logical one, then on file system it can be checked that the copy is still newer than the original and no document reload is required
- if ( ( !bNeedsReload && ( (aMedObj.GetProtocol() == INET_PROT_FILE &&
- aMedObj.getFSysPath(INetURLObject::FSYS_DETECT) != aPhysObj.getFSysPath(INetURLObject::FSYS_DETECT) &&
- !::utl::UCBContentHelper::IsYounger( aMedObj.GetMainURL( INetURLObject::NO_DECODE ), aPhysObj.GetMainURL( INetURLObject::NO_DECODE ) ))
- || pMed->IsRemote() ) )
- || pVersionItem )
+ sal_Bool bOK = sal_False;
+ if ( !pVersionItem )
{
- sal_Bool bOK = sal_False;
- if ( !pVersionItem )
+ sal_Bool bHasStorage = pMed->HasStorage_Impl();
+ // switching edit mode could be possible without reload
+ if ( bHasStorage && pMed->GetStorage() == pSh->GetStorage() )
{
- sal_Bool bHasStorage = pMed->HasStorage_Impl();
- // switching edit mode could be possible without reload
- if ( bHasStorage && pMed->GetStorage() == pSh->GetStorage() )
- {
- // TODO/LATER: faster creation of copy
- if ( !pSh->ConnectTmpStorage_Impl( pMed->GetStorage(), pMed ) )
- return;
- }
+ // TODO/LATER: faster creation of copy
+ if ( !pSh->ConnectTmpStorage_Impl( pMed->GetStorage(), pMed ) )
+ return;
+ }
- pMed->CloseAndRelease();
- pMed->GetItemSet()->Put( SfxBoolItem( SID_DOC_READONLY, !( nOpenMode & STREAM_WRITE ) ) );
- pMed->SetOpenMode( nOpenMode, pMed->IsDirect() );
+ pMed->CloseAndRelease();
+ pMed->GetItemSet()->Put( SfxBoolItem( SID_DOC_READONLY, !( nOpenMode & STREAM_WRITE ) ) );
+ pMed->SetOpenMode( nOpenMode, pMed->IsDirect() );
- pMed->CompleteReOpen();
- if ( nOpenMode & STREAM_WRITE )
- pMed->LockOrigFileOnDemand( sal_False, sal_True );
+ pMed->CompleteReOpen();
+ if ( nOpenMode & STREAM_WRITE )
+ pMed->LockOrigFileOnDemand( sal_False, sal_True );
- // LockOrigFileOnDemand might set the readonly flag itself, it should be set back
- pMed->GetItemSet()->Put( SfxBoolItem( SID_DOC_READONLY, !( nOpenMode & STREAM_WRITE ) ) );
+ // LockOrigFileOnDemand might set the readonly flag itself, it should be set back
+ pMed->GetItemSet()->Put( SfxBoolItem( SID_DOC_READONLY, !( nOpenMode & STREAM_WRITE ) ) );
- if ( !pMed->GetErrorCode() )
- bOK = sal_True;
- }
+ if ( !pMed->GetErrorCode() )
+ bOK = sal_True;
+ }
- if( !bOK )
+ if( !bOK )
+ {
+ ErrCode nErr = pMed->GetErrorCode();
+ if ( pVersionItem )
+ nErr = ERRCODE_IO_ACCESSDENIED;
+ else
{
- ErrCode nErr = pMed->GetErrorCode();
- if ( pVersionItem )
- nErr = ERRCODE_IO_ACCESSDENIED;
- else
- {
- pMed->ResetError();
- pMed->SetOpenMode( SFX_STREAM_READONLY, pMed->IsDirect() );
- pMed->ReOpen();
- pSh->DoSaveCompleted( pMed );
- }
+ pMed->ResetError();
+ pMed->SetOpenMode( SFX_STREAM_READONLY, pMed->IsDirect() );
+ pMed->ReOpen();
+ pSh->DoSaveCompleted( pMed );
+ }
- // r/o-Doc kann nicht in Editmode geschaltet werden?
- rReq.Done( sal_False );
+ // r/o-Doc kann nicht in Editmode geschaltet werden?
+ rReq.Done( sal_False );
- if ( nOpenMode == SFX_STREAM_READWRITE && !rReq.IsAPI() )
+ if ( nOpenMode == SFX_STREAM_READWRITE && !rReq.IsAPI() )
+ {
+ // dem ::com::sun::star::sdbcx::User anbieten, als Vorlage zu oeffnen
+ QueryBox aBox( &GetWindow(), SfxResId(MSG_QUERY_OPENASTEMPLATE) );
+ if ( RET_YES == aBox.Execute() )
{
- // dem ::com::sun::star::sdbcx::User anbieten, als Vorlage zu oeffnen
- QueryBox aBox( &GetWindow(), SfxResId(MSG_QUERY_OPENASTEMPLATE) );
- if ( RET_YES == aBox.Execute() )
+ SfxApplication* pApp = SFX_APP();
+ SfxAllItemSet aSet( pApp->GetPool() );
+ aSet.Put( SfxStringItem( SID_FILE_NAME, pMed->GetName() ) );
+ SFX_ITEMSET_ARG( pMed->GetItemSet(), pReferer, SfxStringItem, SID_REFERER, sal_False );
+ if ( pReferer )
+ aSet.Put( *pReferer );
+ aSet.Put( SfxBoolItem( SID_TEMPLATE, sal_True ) );
+ if ( pVersionItem )
+ aSet.Put( *pVersionItem );
+
+ if( pMed->GetFilter() )
{
- SfxApplication* pApp = SFX_APP();
- SfxAllItemSet aSet( pApp->GetPool() );
- aSet.Put( SfxStringItem( SID_FILE_NAME, pMed->GetName() ) );
- SFX_ITEMSET_ARG( pMed->GetItemSet(), pReferer, SfxStringItem, SID_REFERER, sal_False );
- if ( pReferer )
- aSet.Put( *pReferer );
- aSet.Put( SfxBoolItem( SID_TEMPLATE, sal_True ) );
- if ( pVersionItem )
- aSet.Put( *pVersionItem );
-
- if( pMed->GetFilter() )
- {
- aSet.Put( SfxStringItem( SID_FILTER_NAME, pMed->GetFilter()->GetFilterName() ) );
- SFX_ITEMSET_ARG( pMed->GetItemSet(), pOptions,
- SfxStringItem, SID_FILE_FILTEROPTIONS, sal_False );
- if ( pOptions )
- aSet.Put( *pOptions );
- }
-
- GetDispatcher()->Execute( SID_OPENDOC, SFX_CALLMODE_ASYNCHRON, aSet );
- return;
+ aSet.Put( SfxStringItem( SID_FILTER_NAME, pMed->GetFilter()->GetFilterName() ) );
+ SFX_ITEMSET_ARG( pMed->GetItemSet(), pOptions,
+ SfxStringItem, SID_FILE_FILTEROPTIONS, sal_False );
+ if ( pOptions )
+ aSet.Put( *pOptions );
}
- else
- nErr = 0;
- }
- ErrorHandler::HandleError( nErr );
- rReq.SetReturnValue(
- SfxBoolItem( rReq.GetSlot(), sal_False ) );
- return;
- }
- else
- {
- pSh->DoSaveCompleted( pMed );
- pSh->Broadcast( SfxSimpleHint(SFX_HINT_MODECHANGED) );
- rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), sal_True ) );
- rReq.Done( sal_True );
- // if( nOpenMode == SFX_STREAM_READONLY )
- // pMed->Close();
- return;
+ GetDispatcher()->Execute( SID_OPENDOC, SFX_CALLMODE_ASYNCHRON, aSet );
+ return;
+ }
+ else
+ nErr = 0;
}
- }
- /*
- if ( !bReload )
- {
- // Es soll nicht reloaded werden
- SfxErrorContext aEc( ERRCODE_SFX_NODOCRELOAD );
- ErrorHandler::HandleError( ERRCODE_SFX_NODOCRELOAD );
+ ErrorHandler::HandleError( nErr );
rReq.SetReturnValue(
SfxBoolItem( rReq.GetSlot(), sal_False ) );
return;
}
- */
- // Ansonsten ( lokal und arbeiten auf Kopie ) muss gereloaded
- // werden.
+ else
+ {
+ pSh->DoSaveCompleted( pMed );
+ pSh->Broadcast( SfxSimpleHint(SFX_HINT_MODECHANGED) );
+ rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), sal_True ) );
+ rReq.Done( sal_True );
+ // if( nOpenMode == SFX_STREAM_READONLY )
+ // pMed->Close();
+ return;
+ }
}
rReq.AppendItem( SfxBoolItem( SID_FORCERELOAD, sal_True) );
@@ -692,6 +749,10 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
}
xNewObj = SfxObjectShell::CreateObject( pFilter->GetServiceName(), SFX_CREATE_MODE_STANDARD );
+
+ if ( xOldObj->IsModifyPasswordEntered() )
+ xNewObj->SetModifyPasswordEntered();
+
uno::Sequence < beans::PropertyValue > aLoadArgs;
TransformItems( SID_OPENDOC, *pNewSet, aLoadArgs );
try
@@ -747,6 +808,12 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
}
else
{
+ if ( xNewObj->GetModifyPasswordHash() && xNewObj->GetModifyPasswordHash() != xOldObj->GetModifyPasswordHash() )
+ {
+ xNewObj->SetModifyPasswordEntered( sal_False );
+ xNewObj->SetReadOnly();
+ }
+
if ( xNewObj->IsDocShared() )
{
// the file is shared but the closing can change the sharing control file
@@ -759,10 +826,7 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
TransformItems( SID_OPENDOC, *xNewObj->GetMedium()->GetItemSet(), aLoadArgs );
UpdateDocument_Impl();
- }
- if ( xNewObj.Is() )
- {
try
{
while ( !aViewFrames.empty() )
@@ -1527,7 +1591,7 @@ void SfxViewFrame::KillDispatcher_Impl()
//------------------------------------------------------------------------
SfxViewFrame* SfxViewFrame::Current()
{
- return SfxApplication::Is_Impl() ? SFX_APP()->Get_Impl()->pViewFrame : NULL;
+ return SfxApplication::Get() ? SFX_APP()->Get_Impl()->pViewFrame : NULL;
}
//--------------------------------------------------------------------
@@ -2079,9 +2143,7 @@ SfxViewShell* SfxViewFrame::LoadViewIntoFrame_Impl( const SfxObjectShell& i_rDoc
else
aTransformLoadArgs.remove( "Hidden" );
- ::rtl::OUString sURL( xDocument->getURL() );
- if ( !sURL.getLength() )
- sURL = i_rDoc.GetFactory().GetFactoryURL();
+ ::rtl::OUString sURL( RTL_CONSTASCII_USTRINGPARAM( "private:object" ) );
Reference< XComponentLoader > xLoader( i_rFrame, UNO_QUERY_THROW );
xLoader->loadComponentFromURL( sURL, ::rtl::OUString::createFromAscii( "_self" ), 0,
diff --git a/sfx2/util/hidother.src b/sfx2/util/hidother.src
index bbea19100df9..38e5577a72be 100644
--- a/sfx2/util/hidother.src
+++ b/sfx2/util/hidother.src
@@ -165,4 +165,6 @@ hidspecial HID_DID_SAVE_PACKED_XML { HelpID = HID_DID_SAVE_PACKED_X
hidspecial HID_HELP_ONHELP { HelpID = HID_HELP_ONHELP; };
hidspecial HID_HELP_TEXT_SELECTION_MODE { HelpID = HID_HELP_TEXT_SELECTION_MODE; };
hidspecial HID_DLG_CHECKFORONLINEUPDATE { HelpID = HID_DLG_CHECKFORONLINEUPDATE; };
-hidspecial HID_TASKPANE_VIEW_MENU { HelpID = HID_TASKPANE_VIEW_MENU; }; \ No newline at end of file
+hidspecial HID_DOCINFOSECURITY { HelpID = HID_DOCINFOSECURITY; };
+hidspecial HID_TASKPANE_VIEW_MENU { HelpID = HID_TASKPANE_VIEW_MENU; };
+
diff --git a/shell/source/unix/misc/gnome-open-url.sh b/shell/source/unix/misc/gnome-open-url.sh
index 1a52fc763783..ab730d169a49 100644
--- a/shell/source/unix/misc/gnome-open-url.sh
+++ b/shell/source/unix/misc/gnome-open-url.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-# use gnome-open utility coming with libgnome if available
-gnome-open "$1" 2>/dev/null || "$0.bin" $1
+# use xdg-open or gnome-open if available
+xdg-open "$1" 2>/dev/null || gnome-open "$1" 2>/dev/null || "$0.bin" $1
exit 0
diff --git a/shell/source/unix/misc/open-url.sh b/shell/source/unix/misc/open-url.sh
index 5a70785f89d3..449af5915ce8 100755
--- a/shell/source/unix/misc/open-url.sh
+++ b/shell/source/unix/misc/open-url.sh
@@ -46,38 +46,48 @@ run_browser() {
# special handling for mailto: uris
if echo $1 | grep '^mailto:' > /dev/null; then
+ # check for xdg-email
+ mailer=`which xdg-email`
+ if [ ! -z "$mailer" ]; then
+ $mailer "$1" &
+ exit 0
+ fi
# check $MAILER variable
if [ ! -z "$MAILER" ]; then
$MAILER "$1" &
exit 0
- else
- # mozilla derivates may need -remote semantics
- for i in thunderbird mozilla netscape; do
- mailer=`which $i`
- if [ ! -z "$mailer" ]; then
- run_mozilla "$mailer" "$1"
- exit 0
- fi
- done
- # handle all non mozilla mail clients below
- # ..
fi
+ # mozilla derivates may need -remote semantics
+ for i in thunderbird mozilla netscape; do
+ mailer=`which $i`
+ if [ ! -z "$mailer" ]; then
+ run_mozilla "$mailer" "$1"
+ exit 0
+ fi
+ done
+ # handle all non mozilla mail clients below
+ # ..
else
+ # check for xdg-open
+ browser=`which xdg-open`
+ if [ ! -z "$browser" ]; then
+ $browser "$1" &
+ exit 0
+ fi
# check $BROWSER variable
if [ ! -z "$BROWSER" ]; then
$BROWSER "$1" &
exit 0
- else
- # mozilla derivates may need -remote semantics
- for i in firefox mozilla netscape; do
- browser=`which $i`
- if [ ! -z "$browser" ]; then
- run_mozilla "$browser" "$1"
- exit 0
- fi
- done
- # handle all non mozilla browers below
- # ..
fi
+ # mozilla derivates may need -remote semantics
+ for i in firefox mozilla netscape; do
+ browser=`which $i`
+ if [ ! -z "$browser" ]; then
+ run_mozilla "$browser" "$1"
+ exit 0
+ fi
+ done
+ # handle all non mozilla browers below
+ # ..
fi
exit 1
diff --git a/shell/source/unix/sysshell/recently_used_file.cxx b/shell/source/unix/sysshell/recently_used_file.cxx
index cc4fbf75adcc..8a9de90c8b16 100644
--- a/shell/source/unix/sysshell/recently_used_file.cxx
+++ b/shell/source/unix/sysshell/recently_used_file.cxx
@@ -114,7 +114,8 @@ void recently_used_file::reset() const
//------------------------------------------------
void recently_used_file::truncate(off_t length)
{
- ftruncate(fileno(file_), length);
+ if (ftruncate(fileno(file_), length) == -1)
+ throw "I/O error: ftruncate failed";
}
//------------------------------------------------
diff --git a/smoketestoo_native/data/smoketestdoc.sxw b/smoketestoo_native/data/smoketestdoc.sxw
index 84e1e30bfc4e..84f5d231b3b7 100755
--- a/smoketestoo_native/data/smoketestdoc.sxw
+++ b/smoketestoo_native/data/smoketestdoc.sxw
Binary files differ
diff --git a/solenv/bin/cws.pl b/solenv/bin/cws.pl
index f24db23897af..439ce02e2742 100644
--- a/solenv/bin/cws.pl
+++ b/solenv/bin/cws.pl
@@ -56,10 +56,7 @@ use Cws;
#### globals ####
-# TODO: replace dummy vales with actual SVN->hg and source_config migration milestones
-my $dev300_migration_milestone = 'm64';
-my $dev300_source_config_milestone = 'm65';
-my $ooo320_migration_milestone = 'm13';
+# TODO: replace dummy vales with actual source_config migration milestone
my $ooo320_source_config_milestone = 'm999';
# valid command with possible abbreviations
@@ -67,11 +64,8 @@ my @valid_commands = (
'help', 'h', '?',
'create',
'fetch', 'f',
- 'rebase', 'rb',
'query', 'q',
'task', 't',
- 'integrate',
- 'cdiff', 'cd',
'eisclone',
'setcurrent'
);
@@ -80,13 +74,10 @@ my @valid_commands = (
my %valid_options_hash = (
'help' => ['help'],
'create' => ['help', 'milestone', 'migration', 'hg'],
- 'fetch' => ['help', 'switch', 'milestone', 'childworkspace','platforms','quiet',
+ 'fetch' => ['help', 'milestone', 'childworkspace','platforms','quiet',
'onlysolver'],
- 'rebase' => ['help', 'milestone','commit'],
'query' => ['help', 'milestone','masterworkspace','childworkspace'],
'task' => ['help'],
- 'integrate' => ['help', 'childworkspace'],
- 'cdiff' => ['help', 'childworkspace', 'masterworkspace', 'files', 'modules'],
'setcurrent' => ['help', 'milestone'],
'eisclone' => ['help']
);
@@ -128,12 +119,9 @@ sub parse_command_line
'debug',
'profile',
'commit|C',
- 'switch|s',
'platforms|p=s',
'onlysolver|o',
'quiet|q',
- 'files',
- 'modules',
'help|h'
);
@@ -151,18 +139,12 @@ sub parse_command_line
elsif ($command eq 'f') {
$command = 'fetch';
}
- elsif ($command eq 'rb') {
- $command = 'rebase';
- }
elsif ($command eq 'q') {
$command = 'query';
}
elsif ($command eq 't') {
$command = 'task';
}
- elsif ($command eq 'cd') {
- $command = 'cdiff';
- }
# An unkown option might be accompanied with a valid command.
# Show the command specific help
@@ -202,8 +184,6 @@ sub verify_options
}
}
- # TODO here should be specific checks for the arguments
- # if the check is globally valid
}
# Dispatches to the do_xxx() routines depending on command.
@@ -259,66 +239,6 @@ BEGIN {
}
}
-# Fetches milestone URL for given server and milestone.
-sub get_milestone_url
-{
- my $server = shift;
- my $master = shift;
- my $milestone = shift;
-
- my $milestone_url = "$server/tags/${master}_${milestone}";
- return $milestone_url;
-}
-
-# Fetches CWS URL for given server and CWSname.
-sub get_cws_url
-{
- my $server = shift;
- my $cws = shift;
-
- my $cws_url = "$server/cws/$cws";
- return $cws_url;
-}
-
-sub get_master_url
-{
- my $server = shift;
- my $master = shift;
- my $revision = shift;
-
- my $url = "${server}/";
-
- # TODO: update EIS function for subversion
- my $cws = get_this_cws();
- my $trunk = $cws->get_cvs_head();
- if ( $master eq $trunk ) {
- $url .= 'trunk';
- }
- else {
- my $master_label = uc($master);
- $url .= "branches/$master_label";
- }
-
- # attach revision if needed
- if ( $revision != 0 ) {
- $url .= "\@$revision";
- }
- return $url;
-}
-
-# Returns the URL shortened by the server part
-sub get_short_url
-{
- my $server = shift;
- my $url = shift;
-
- my $offset = length("$server/");
- $url = substr($url, $offset);
-
- return $url;
-}
-
-
# Fetches the current CWS from environment, returns a Cws object
sub get_cws_from_environment
{
@@ -849,11 +769,11 @@ sub query_latest
if ( $latest ) {
print_message("Master workspace '$masterws':");
- print_message("Latest milestone available for rebase:");
+ print_message("Latest milestone available for update:");
print "$masterws $latest\n";
}
else {
- print_error("Can't determine latest milestone of '$masterws' available for rebase.", 3);
+ print_error("Can't determine latest milestone of '$masterws' available for update.", 3);
}
return;
@@ -1420,106 +1340,6 @@ sub update_solver
}
}
-sub write_rebase_configuration
-{
- my $workspace = shift;
- my $cwsname = shift;
- my $master = shift;
- my $milestone = shift;
-
- my $rebase_config = "$workspace/REBASE.CONFIG_DONT_DELETE";
-
- open(REBASE, ">$rebase_config") or print_error("Can't open file '$rebase_config' for writing: $!", 98);
- print REBASE "CWS-TOOLING: do not delete this file, it's needed for 'cws rebase -C'\n";
- print REBASE "CWS: $cwsname\n";
- print REBASE "New MWS: $master\n";
- print REBASE "New milestone: $milestone\n";
- close(REBASE);
-}
-
-sub read_rebase_configuration
-{
- my $workspace = shift;
-
- my $rebase_config = "$workspace/REBASE.CONFIG_DONT_DELETE";
-
- my $master;
- my $milestone;
-
- open(REBASE, "<$rebase_config") or print_error("Can't open file '$rebase_config' for reading: $!", 98);
- while(<REBASE>) {
- if ( /New MWS: (\w+)/ ) {
- $master = $1;
- }
- if ( /New milestone: (\w+)/ ) {
- $milestone = $1;
- }
- }
- close(REBASE);
-
- if ( !defined($master) || !defined($milestone) ) {
- print_error("File '$rebase_config' seems to be garbled. Can't continue.", 98)
- }
-
- return ($master, $milestone);
-}
-
-sub diff_print_files
-{
- my $files_ref = shift;
- my $diff_options = shift;
-
- my @files = sort(@{$files_ref});
-
- if ( $diff_options eq 'files') {
- foreach(@files) {
- print "$_\n";
- }
- }
- else {
- my @modules;
- foreach(@files) {
- my ($module) = split(/\//, $_);
- push(@modules, $module);
- }
- # remove adjacent uniques
- my $prev = 'nosuchmodule';
- my @unique_modules = grep($_ ne $prev && (($prev) = $_), @modules);
- foreach(@unique_modules) {
- print "$_\n";
- }
- }
-}
-
-# TODO: special provisions for SVN->HG migrations, remove this
-# some time after migration
-sub get_scm_for_milestone
-{
- my $masterws = shift;
- my $milestone = shift;
-
- my $milestone_sequence_number = extract_milestone_sequence_number($milestone);
- my $dev300_migration_sequence_number = extract_milestone_sequence_number($dev300_migration_milestone);
- my $ooo320_migration_sequence_number = extract_milestone_sequence_number($ooo320_migration_milestone);
-
- my $scm = 'SVN';
-
- if ( $masterws eq 'DEV300' ) {
- if ( $milestone_sequence_number >= $dev300_migration_sequence_number ) {
- $scm = 'HG';
- }
- }
- elsif ( $masterws eq 'OOO320' ) {
- if ( $milestone_sequence_number >= $ooo320_migration_sequence_number ) {
- $scm = 'HG';
- }
- }
- else {
- $scm = 'SVN';
- }
- return $scm;
-}
-
# TODO: special provisions for "source_config" migration, remove this
# some time after migration
sub get_source_config_for_milestone
@@ -1528,24 +1348,14 @@ sub get_source_config_for_milestone
my $milestone = shift;
my $milestone_sequence_number = extract_milestone_sequence_number($milestone);
- my $dev300_migration_sequence_number = extract_milestone_sequence_number($dev300_source_config_milestone);
my $ooo320_migration_sequence_number = extract_milestone_sequence_number($ooo320_source_config_milestone);
- my $source_config = 0;
-
- if ( $masterws eq 'DEV300' ) {
- if ( $milestone_sequence_number >= $dev300_migration_sequence_number ) {
- $source_config = 1;
- }
- }
- elsif ( $masterws eq 'OOO320' ) {
- if ( $milestone_sequence_number >= $ooo320_migration_sequence_number ) {
- $source_config = '1';
+ my $source_config = 1;
+ if ( $masterws eq 'OOO320' ) {
+ if ( $milestone_sequence_number < $ooo320_migration_sequence_number ) {
+ $source_config = 0;
}
}
- else {
- $source_config = 0;
- }
return $source_config;
}
@@ -1577,12 +1387,9 @@ sub do_help
print STDERR "\thelp (h,?)\n";
print STDERR "\tcreate\n";
print STDERR "\tfetch (f)\n";
- print STDERR "\trebase (rb) (SVN only)\n";
print STDERR "\tquery (q)\n";
print STDERR "\ttask (t)\n";
- print STDERR "\tcdiff (cd) (SVN only)\n";
print STDERR "\tsetcurrent\n";
- print STDERR "\tintegrate *** release engineers only ***\n";
print STDERR "\teisclone *** release engineers only ***\n";
}
@@ -1594,13 +1401,10 @@ sub do_help
}
elsif ($arg eq 'create') {
print STDERR "create: Create a new child workspace\n";
- print STDERR "usage: create [--hg] [-m milestone] <master workspace> <child workspace>\n";
+ print STDERR "usage: create [-m milestone] <master workspace> <child workspace>\n";
print STDERR "\t-m milestone: Milestone to base the child workspace on. If ommitted the\n";
print STDERR "\t last published milestone will be used.\n";
print STDERR "\t--milestone milestone: Same as -m milestone.\n";
- print STDERR "\t--hg: Create Mercurial (hg) based CWS.\n";
- print STDERR "\t--migration: Used only for the migration of an exitisting CWS from CVS to SVN.\n";
- print STDERR "\t Disables existence check in EIS, creates CWS branch in SVN, sets SVN flag.\n";
}
elsif ($arg eq 'task') {
print STDERR "task: Add a task to a child workspace\n";
@@ -1651,18 +1455,16 @@ sub do_help
}
elsif ($arg eq 'fetch') {
print STDERR "fetch: fetch a milestone or CWS\n";
- print STDERR "usage: fetch [-q] [-s] [-p platforms] [-o] <-m milestone> <workspace>\n";
- print STDERR "usage: fetch [-q] [-s] [-p platforms] [-o] <-c cws> <workspace>\n";
- print STDERR "usage: fetch [-q] [-s] <-m milestone> <workspace>\n";
- print STDERR "usage: fetch [-q] [-s] <-c cws> <workspace>\n";
+ print STDERR "usage: fetch [-q] [-p platforms] [-o] <-m milestone> <workspace>\n";
+ print STDERR "usage: fetch [-q] [-p platforms] [-o] <-c cws> <workspace>\n";
+ print STDERR "usage: fetch [-q] <-m milestone> <workspace>\n";
+ print STDERR "usage: fetch [-q] <-c cws> <workspace>\n";
print STDERR "\t-m milestone: Checkout milestone <milestone> to workspace <workspace>\n";
print STDERR "\t Use 'latest' for the for lastest published milestone on the current master\n";
print STDERR "\t For cross master checkouts use the form <MWS>:<milestone>\n";
print STDERR "\t--milestone milestone: Same as -m milestone\n";
print STDERR "\t-c childworkspace: Checkout CWS <childworkspace> to workspace <workspace>\n";
print STDERR "\t--child childworkspace: Same as -c childworkspace\n";
- print STDERR "\t-s: Try to switch an existing workspace <workspace> to milestone or CWS\n";
- print STDERR "\t--switch: Same as -s\n";
print STDERR "\t-p platform: Copy one or more prebuilt platforms 'platform'. \n";
print STDERR "\t Separate multiple platforms with commas.\n";
print STDERR "\t--platforms platform: Same as -p\n";
@@ -1671,36 +1473,6 @@ sub do_help
print STDERR "\t-q Silence some of the output of the command.\n";
print STDERR "\t--quiet: Same as -q\n";
}
- elsif ($arg eq 'rebase') {
- print STDERR "rebase: Rebase a child workspace to a new milestone (SVN only)\n";
- print STDERR "usage: rebase <-m milestone> <workspace>\n";
- print STDERR "usage: rebase <-C> <workspace>\n";
- print STDERR "\t-m milestone: Merge changes on MWS into CWS up to and including milestone <milestone>\n";
- print STDERR "\t Use 'latest' for the for lastest published milestone on the current master\n";
- print STDERR "\t For cross master rebases use the form <MWS>:<milestone>\n";
- print STDERR "\t--milestone milestone: Same as -m milestone\n";
- print STDERR "\t-C: Commit changes made by merge step and update current milestone in database\n";
- print STDERR "\t--commit: Same as -C\n"
- }
- elsif ($arg eq 'integrate') {
- print STDERR "integrate: Integrate a child workspace into a master workspace\n";
- print STDERR "usage: integrate <-c childworkspace>\n";
- print STDERR "usage: integrate <-C>\n";
- print STDERR "\t-c childworkspace: Merge changes on CWS <childworkspace> into MWS\n";
- print STDERR "\t--child childworkspace: Same as -c childworkspace\n";
- print STDERR "\t-C: Commit changes made by merge step and update CWS status in database\n";
- print STDERR "\t--commit: Same as -C\n"
- }
- elsif ($arg eq 'cdiff') {
- print STDERR "cdiff: Show changes on CWS relative to current milestone (SVN only)\n";
- print STDERR "usage: cdiff [-M master] [-c child] [--files] [--modules]\n";
- print STDERR "\t-M master:\t\toverride MWS specified in environment\n";
- print STDERR "\t-c child:\t\toverride CWS specified in environment\n";
- print STDERR "\t--master master:\tSame as -M master\t\n";
- print STDERR "\t--child child:\t\tSame -c child\n";
- print STDERR "\t--files: Print only file names\n";
- print STDERR "\t--modules: Print only top level directories aka modules\n"
- }
elsif ($arg eq 'setcurrent') {
print STDERR "setcurrent: Set the current milestone for the CWS (only hg based CWSs)\n";
print STDERR "usage: setcurrent [-m milestone]\n";
@@ -1726,14 +1498,8 @@ sub do_create
do_help(['create']);
}
- my $is_migration = 0;
- if ( exists $options_ref->{'migration'} ) {
- $is_migration = 1;
- }
-
- my $is_hg = 0;
if ( exists $options_ref->{'hg'} ) {
- $is_hg = 1;
+ print_warning("All childworkspaces are now hosted on Mercurial. The switch --hg is obsolete.");
}
my $master = uc $args_ref->[0];
@@ -1765,12 +1531,7 @@ sub do_create
$is_promotion++;
}
else {
- if ( $is_migration ) {
- print_message("Create CWS branch in Subversion for migrating CWS '$cws_name' from CVS.");
- }
- else {
- print_error("Child workspace '$cws_name' already exists.", 7);
- }
+ print_error("Child workspace '$cws_name' already exists.", 7);
}
}
else {
@@ -1796,332 +1557,11 @@ sub do_create
# set milestone
$cws->milestone($milestone);
- # handle mercurial(hg) based CWSs
- if ( $is_hg ) {
- register_child_workspace($cws, 'hg', $is_promotion);
- return;
- }
-
- # Refuse to create Subversion hosted cildworkspaces after
- # migration milestone
- my $milestone_scm = get_scm_for_milestone($cws->master(), $cws->milestone());
- if ( $milestone_scm eq 'HG' ) {
- print_error("This code line has been migrated to Mercurial.", 0);
- print_error("Please use the '--hg' option to create a Mercurial hosted CWS.", 8);
- }
-
- my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
- my $so_svn_server = $config->get_so_svn_server();
-
- if (!defined($ooo_svn_server)) {
- print_error("No OpenOffice.org SVN server defined, please check your configuration file.", 8);
- }
-
- my $ooo_milestone_url = get_milestone_url($ooo_svn_server, $cws->master(), $milestone);
- my $ooo_cws_url = get_cws_url($ooo_svn_server, $cws_name);
-
- my $so_milestone_url;
- my $so_cws_url;
- if ( defined($so_svn_server) ) {
- $so_milestone_url = get_milestone_url($so_svn_server, $cws->master(), $milestone);
- $so_cws_url = get_cws_url($so_svn_server, $cws_name);
- }
-
- # There is a slight chance that the cws creation was interrupted before registration before.
- # Check for potential remains in the repository
- my $ooo_path_exists = 0;
- my $so_path_exists = 0;
-
- print STDERR "... check cws path:\t'$ooo_cws_url'";
- if ( svn_path_exists($ooo_cws_url) ) {
- $ooo_path_exists=1;
- print STDERR "\n";
- }
- else {
- print STDERR ", OK\n";
- }
-
- if ( defined($so_svn_server) ) {
- print STDERR "... check cws path:\t'$so_cws_url'";
- if ( svn_path_exists($so_cws_url) ) {
- print STDERR "\n";
- $so_path_exists = 1;
- }
- else {
- print STDERR ", OK\n";
- }
- }
-
- if ( $ooo_path_exists ) {
- print_error("SVN path '$ooo_cws_url' already exists.\nThis can happen if a previous CWS creation attempt failed before registering the CWS with EIS.\nIf this is the case, please delete the path with:\n\t svn delete -m'CWS-TOOLING: undo broken CWS creation' $ooo_cws_url\n", 0);
- }
-
- if ( $so_path_exists ) {
- print_error("SVN path '$so_cws_url' already exists.\nThis can happen if a previous CWS creation attempt failed before registering the CWS with EIS.\nIf this is the case, please delete the path with:\n\t svn delete -m'CWS-TOOLING: undo broken CWS creation' $so_cws_url\n", 0);
- }
+ register_child_workspace($cws, 'hg', $is_promotion);
- if ( $ooo_path_exists || $so_path_exists ) {
- exit(15);
- }
-
- # determine the revision from which the milestone was copied
- my $ooo_milestone_revision;
- my $so_milestone_revision;
-
- $ooo_milestone_revision = svn_milestone_revision($ooo_milestone_url);
- if ( !$ooo_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$milestone', url '$ooo_milestone_url.", 17 );
- }
- if ( defined($so_svn_server) ) {
- $so_milestone_revision = svn_milestone_revision($so_milestone_url);
- if ( !$so_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$milestone', url '$so_milestone_url.", 17 );
- }
- }
-
- my $ooo_master_url;
- my $so_master_url;
-
- $ooo_master_url = get_master_url($ooo_svn_server, $cws->master(), $ooo_milestone_revision);
- if ( defined($so_svn_server) ) {
- $so_master_url = get_master_url($so_svn_server, $cws->master(), $so_milestone_revision);
- }
-
- my $ooo_short_url = get_short_url($ooo_svn_server, $ooo_master_url);
- my $ooo_creation_comment = "CWS-TOOLING: create CWS " . $cws->child() . " from $ooo_short_url (milestone: " . $cws->master() . ":$milestone)";
- # create branches an ooo server and an optional so server
- print STDERR "... create branch:\t'$ooo_cws_url'";
- svn_copy($ooo_creation_comment, $ooo_master_url, $ooo_cws_url);
- if ( defined($so_svn_server) ) {
- my $so_short_url = get_short_url($so_svn_server, $so_master_url);
- my $so_creation_comment = "CWS-TOOLING: create CWS " . $cws->child() . " from $so_short_url (milestone: " . $cws->master() . ":$milestone)";
- print STDERR "... create branch:\t'$so_cws_url'";
- svn_copy($so_creation_comment, $so_master_url, $so_cws_url);
- }
-
- if ( $is_migration ) {
- # Set master and milestone
- $cws->master($master);
- $cws->milestone($milestone);
- my $rc = $cws->set_subversion_flag(1);
- if ( !$rc ) {
- print_error("Failed to set subversion flag on child workspace '$cws_name'.\nContact EIS administrator!\n", 12);
- }
- }
- else {
- register_child_workspace($cws, 'svn', $is_promotion);
- }
return;
}
-sub do_rebase
-{
- my $args_ref = shift;
- my $options_ref = shift;
-
- my $commit_phase = 0;
- my $milestone;
-
- # TODO: Switching to a new master dooes work not correctly yet
-
- if (exists $options_ref->{'help'} || @{$args_ref} != 1) {
- do_help(['rebase']);
- }
- if ( exists($options_ref->{'commit'}) && exists($options_ref->{'milestone'}) ) {
- print_error("Option -m (--milestone) and -C (--commit) are mutually exclusive.", 0 );
- do_help(['rebase']);
- }
- if ( !exists($options_ref->{'commit'}) && !exists($options_ref->{'milestone'}) ) {
- print_error("At least one of the options -m (--milestone) or -C (--commit) are required.", 0 );
- do_help(['rebase']);
- }
-
- if ( !svn_version_check() ) {
- print_error("cws rebase requires svn-1.5.4 or later (merge tracking and bug fixes). Please upgrade your svn client.", 1);
- }
-
- my $cws = get_cws_from_environment();
-
- my $old_masterws = $cws->master();
- my $new_masterws;
- my $new_milestone;
-
- my $workspace = $args_ref->[0];
-
- if ( ! -d $workspace ) {
- print_error("Can't find workspace '$workspace': $!", 99);
- }
-
- if ( exists($options_ref->{'commit'}) ) {
- $commit_phase=1;
- ($new_masterws, $new_milestone) = read_rebase_configuration($workspace);
- }
- elsif( exists($options_ref->{'milestone'}) ) {
- $milestone = $options_ref->{'milestone'};
- if ( $milestone eq 'latest' ) {
- my $latest = $cws->get_current_milestone($old_masterws);
-
- if ( !$latest ) {
- print_error("Can't determine latest milestone of '$old_masterws' available for rebase.", 22);
- }
- $new_masterws = $old_masterws;
- $new_milestone = $latest;
- }
- else {
- ($new_masterws, $new_milestone) = verify_milestone($cws, $milestone);
- }
- }
- else {
- do_help(['rebase']);
- }
-
- if ( $cws->get_scm() eq 'HG' ) {
- my $child = $cws->child();
- print_error("cws rebase is not supported for mercurial based childworkspaces", 0);
- print_error("re-synchronize your CWS with:", 0);
- print_error("hg pull <master>", 0);
- print_error("hg merge", 0);
- print_error("hg commit -m\"$child: merge with $new_masterws $new_milestone\"", 0);
- print_error("and update EIS with:", 0);
- print_error("cws setcurrent -m $new_milestone", 99);
- }
-
- my $so_setup = 0;
- my $ooo_path;
- my $so_path;
- # Determine if we got a three directory (so) setup or a plain (ooo) setup.
- # This is only needed as long the build system still relies
- # on having "modules" from different repositories in the same
- # directory besides each other.
- if ( -d "$workspace/$old_masterws/sun" ) {
- $so_setup = 1;
- $ooo_path = "$workspace/$old_masterws/ooo";
- $so_path = "$workspace/$old_masterws/sun";
- }
- else {
- $ooo_path = "$workspace";
- }
-
- my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
- my $so_svn_server = $config->get_so_svn_server();
-
- if (!defined($ooo_svn_server)) {
- print_error("No OpenOffice.org SVN server defined, please check your configuration file.", 8);
- }
-
- my $ooo_milestone_url = get_milestone_url($ooo_svn_server, $new_masterws, $new_milestone);
- my $ooo_cws_url = get_cws_url($ooo_svn_server, $cws->child());
-
- my $so_milestone_url;
- my $so_cws_url;
- if ( $so_setup ) {
- $so_milestone_url = get_milestone_url($so_svn_server, $new_masterws, $new_milestone);
- $so_cws_url = get_cws_url($so_svn_server, $cws->child());
- }
-
- my $ooo_milestone_revision;
- my $so_milestone_revision;
-
- $ooo_milestone_revision = svn_milestone_revision($ooo_milestone_url);
- if ( !$ooo_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$new_milestone', url '$ooo_milestone_url.", 17 );
- }
- if ( defined($so_svn_server) ) {
- $so_milestone_revision = svn_milestone_revision($so_milestone_url);
- if ( !$so_milestone_revision ) {
- print_error("Can't retrieve revision for milestone '$new_milestone', url '$so_milestone_url.", 17 );
- }
- }
-
- my $ooo_master_url;
- my $so_master_url;
-
- $ooo_master_url = get_master_url($ooo_svn_server, $new_masterws, $ooo_milestone_revision);
- if ( defined($so_svn_server) ) {
- $so_master_url = get_master_url($so_svn_server, $new_masterws, $so_milestone_revision);
- }
-
- if ( $commit_phase ) {
- # commit
- print_message("... committing merged changes to workspace '$workspace'.");
- my $ooo_short_url = get_short_url($ooo_svn_server, $ooo_master_url);
- my $commit_message = "CWS-TOOLING: rebase CWS " . $cws->child() . " to $ooo_short_url (milestone: " . $new_masterws . ":$new_milestone)";
- svn_commit($ooo_path, $commit_message);
- if ( $so_setup ) {
- my $so_short_url = get_short_url($so_svn_server, $so_master_url);
- $commit_message = "CWS-TOOLING: rebase CWS " . $cws->child() . " to $so_short_url (milestone: " . $new_masterws . ":$new_milestone)";
- svn_commit($so_path, $commit_message);
- }
- if ( $so_setup) {
- print_message("... rename '$workspace/$old_masterws' -> '$workspace/$new_masterws'\n");
- if ( !rename("$workspace/$old_masterws", "$workspace/$new_masterws") ) {
- print_error("Can't rename '$workspace/$old_masterws' -> '$workspace/$new_masterws': $!", 98);
- }
- print_message("... relinking workspace\n");
- relink_workspace("$workspace/$new_masterws/src.$new_milestone", 1);
- if ( !unlink("$workspace/REBASE.CONFIG_DONT_DELETE") ) {
- print_error("Can't unlink '$workspace/REBASE.CONFIG_DONT_DELETE': $!", 0);
- }
-
- }
-
- print_message("... updating EIS database");
- my $push_return = $cws->set_master_and_milestone($new_masterws, $new_milestone);
- # sanity check
- if ( $$push_return[1] ne $new_milestone) {
- print_error("Couldn't push new milestone '$new_milestone' to database", 0);
- }
- }
- else {
- # merge phase
-
- # check if working directory is switched to the right cws branch
- my $ooo_wc_url;
- my $so_wc_url;
- my $cwsname = $cws->child();
- print_message("... verifying if workspace '$workspace' is switched to CWS '$cwsname'.");
- $ooo_wc_url = svn_wc_url($ooo_path);
- if ( $ooo_wc_url !~ /\/$cwsname$/ ) {
- print_error("Your working copy '$ooo_path' is not switched to the cws branch.\nPlease fix and restart rebasing.", 24);
- }
- if ( $so_setup ) {
- $so_wc_url = svn_wc_url($so_path);
-
- if ( $so_wc_url !~ /\/$cwsname$/ ) {
- print_error("Your working copy '$so_path' is not switched to the cws branch.\nPlease fix and restart rebasing.", 24);
- }
- }
- # check for mixed revisions, locally modified files etc
- if ( !svn_wc_is_clean($ooo_path) || ($so_setup && !svn_wc_is_clean($so_path)) ) {
- print_error("Please fix and restart rebasing.", 25);
- }
-
- print_message("... merging changes up to '$new_masterws:$new_milestone' to workspace '$workspace'.");
- svn_merge($ooo_milestone_url, $ooo_path);
- if ( $so_setup ) {
- svn_merge($so_milestone_url, $so_path);
- }
- # write out the rebase configuration to store new milestone and master information
- write_rebase_configuration($workspace, $cwsname, $new_masterws, $new_milestone);
- }
-}
-
-sub do_integrate
-{
- my $args_ref = shift;
- my $options_ref = shift;
-
- if (exists $options_ref->{'help'} || @{$args_ref} > 0) {
- do_help(['integrate']);
- }
- if ( exists($options_ref->{'commit'}) && exists($options_ref->{'childworkspace'}) ) {
- print_error("Option -c (--child) and -C (--commit) are mutually exclusive.", 0 );
- do_help(['integrate']);
- }
-}
-
# Executes the fetch command.
sub do_fetch
{
@@ -2150,11 +1590,6 @@ sub do_fetch
do_help(['fetch']);
}
- if ( defined($platforms) && $switch ) {
- print_error("Option '-p' is not usuable with Option '-s'.", 0);
- do_help(['fetch']);
- }
-
if ( $onlysolver && !defined($platforms) ) {
print_error("Option '-o' is Only usuable combination with option '-p'.", 0);
do_help(['fetch']);
@@ -2167,7 +1602,6 @@ sub do_fetch
}
$cws->master($masterws);
my $milestone;
- my $scm;
if( defined($milestone_opt) ) {
if ( $milestone_opt eq 'latest' ) {
$cws->master($masterws);
@@ -2181,29 +1615,19 @@ sub do_fetch
else {
($masterws, $milestone) = verify_milestone($cws, $milestone_opt);
}
- $scm = get_scm_for_milestone($masterws, $milestone);
}
elsif ( defined($child) ) {
$cws = get_cws_by_name($child);
$masterws = $cws->master(); # CWS can have another master than specified in ENV
$milestone = $cws->milestone();
- $scm = $cws->get_scm();
}
else {
do_help(['fetch']);
}
- if ( $switch && $scm eq 'HG' ) {
- print_error("Option '-s' is not supported with a hg based CWS.", 0);
- do_help(['fetch']);
- }
-
- if ( $debug ) {
- print STDERR "CWS-DEBUG: SCM: $scm\n";
- }
-
my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
+ # $so_svn_server is still required to determine if we are in SO environment
+ # TODO: change this configuration setting to something more meaningful
my $so_svn_server = $config->get_so_svn_server();
my $prebuild_dir = $config->get_prebuild_binaries_location();
my $external_tarball_source = $prebuild_dir;
@@ -2262,111 +1686,43 @@ sub do_fetch
my $workspace = $args_ref->[0];
if ( !$onlysolver ) {
- my $url_suffix = $milestone_opt ? ("/tags/$masterws" . "_$milestone") : ('/cws/' . $cwsname);
- if ( $switch ) {
- # check if to be switched working copy exist or bail out
- if ( ! -d $workspace ) {
- print_error("Can't open workspace '$workspace': $!", 21);
- }
-
- my $so_setup = 0;
- my $ooo_path;
- my $so_path;
- # Determine if we got a three directory (so) setup or a plain (ooo) setup.
- # This is only needed as long the build system still relies
- # on having "modules" from different repositories in the same
- # directory besides each other.
- if ( -d "$workspace/$masterws/sun" ) {
- $so_setup = 1;
- $ooo_path = "$workspace/$masterws/ooo";
- $so_path = "$workspace/$masterws/sun";
- }
- else {
- $ooo_path = "$workspace";
- }
-
- # get the working copy URLs
- my $ooo_new_url = svn_wc_root($ooo_path) . $url_suffix;
- my $so_new_url;
- if ( $so_setup ) {
- $so_new_url = svn_wc_root($so_path) . $url_suffix;
- }
-
- print_message("... switching '$ooo_path' to URL '$ooo_new_url'");
- svn_switch($ooo_path, $ooo_new_url, $quiet);
- # switch working copies
- if ( $so_setup ) {
- print_message("... switching '$so_path' to URL '$so_new_url'");
- svn_switch($so_path, $so_new_url, $quiet);
- }
-
- if ( $so_setup ) {
- relink_workspace("$workspace/$masterws/$linkdir", 0);
- }
+ if ( -e $workspace ) {
+ print_error("File or directory '$workspace' already exists.", 8);
}
- else {
- if (!defined($ooo_svn_server)) {
- print_error("No OpenOffice.org SVN server defined, please check your configuration file.", 8);
- }
- my $ooo_url = $ooo_svn_server . $url_suffix;
- if ( -e $workspace ) {
- print_error("File or directory '$workspace' already exists.", 8);
+ my $clone_milestone_only = $milestone_opt ? $milestone : 0;
+ if ( defined($so_svn_server) ) {
+ if ( !mkdir($workspace) ) {
+ print_error("Can't create directory '$workspace': $!.", 8);
}
-
- if ( !(($scm eq 'SVN') || ($scm eq 'HG')) ) {
- print_error("Unsupported SCM '$scm'.", 8);
+ my $work_master = "$workspace/$masterws";
+ if ( !mkdir($work_master) ) {
+ print_error("Can't create directory '$work_master': $!.", 8);
}
-
- my $clone_milestone_only = $milestone_opt ? $milestone : 0;
- if ( defined($so_svn_server) ) {
- if ( !mkdir($workspace) ) {
- print_error("Can't create directory '$workspace': $!.", 8);
- }
- my $work_master = "$workspace/$masterws";
- if ( !mkdir($work_master) ) {
- print_error("Can't create directory '$work_master': $!.", 8);
- }
- if ( $scm eq 'SVN' ) {
- print_message("... checkout '$ooo_url' to '$work_master/ooo'");
- svn_checkout($ooo_url, "$work_master/ooo", $quiet);
- my $so_url = $so_svn_server . $url_suffix;
- print_message("... checkout '$so_url' to '$work_master/sun'");
- svn_checkout($so_url, "$work_master/sun", $quiet);
- }
- else{
- hg_clone_cws_or_milestone('ooo', $cws, "$work_master/ooo", $clone_milestone_only);
- hg_clone_cws_or_milestone('so', $cws, "$work_master/sun", $clone_milestone_only);
- }
- if ( get_source_config_for_milestone($masterws, $milestone) ) {
- # write source_config file
- my $source_config_file = "$work_master/source_config";
- if ( !open(SOURCE_CONFIG, ">$source_config_file") ) {
- print_error("Can't create source_config file '$source_config_file': $!.", 8);
- }
- print SOURCE_CONFIG "[repositories]\n";
- print SOURCE_CONFIG "ooo=active\n";
- print SOURCE_CONFIG "sun=active\n";
- close(SOURCE_CONFIG);
- }
- else {
- my $linkdir = "$work_master/src.$milestone";
- if ( !mkdir($linkdir) ) {
- print_error("Can't create directory '$linkdir': $!.", 8);
- }
- relink_workspace($linkdir);
+ hg_clone_cws_or_milestone('ooo', $cws, "$work_master/ooo", $clone_milestone_only);
+ hg_clone_cws_or_milestone('so', $cws, "$work_master/sun", $clone_milestone_only);
+ if ( get_source_config_for_milestone($masterws, $milestone) ) {
+ # write source_config file
+ my $source_config_file = "$work_master/source_config";
+ if ( !open(SOURCE_CONFIG, ">$source_config_file") ) {
+ print_error("Can't create source_config file '$source_config_file': $!.", 8);
}
+ print SOURCE_CONFIG "[repositories]\n";
+ print SOURCE_CONFIG "ooo=active\n";
+ print SOURCE_CONFIG "sun=active\n";
+ close(SOURCE_CONFIG);
}
else {
- if ( $scm eq 'SVN' ) {
- print_message("... checkout '$ooo_url' to '$workspace'");
- svn_checkout($ooo_url, $workspace, $quiet);
- }
- else {
- hg_clone_cws_or_milestone('ooo', $cws, $workspace, $clone_milestone_only);
+ my $linkdir = "$work_master/src.$milestone";
+ if ( !mkdir($linkdir) ) {
+ print_error("Can't create directory '$linkdir': $!.", 8);
}
+ relink_workspace($linkdir);
}
}
+ else {
+ hg_clone_cws_or_milestone('ooo', $cws, $workspace, $clone_milestone_only);
+ }
}
if ( !$onlysolver && defined($external_tarball_source) ) {
@@ -2516,91 +1872,6 @@ sub do_task
return;
}
-sub do_cdiff
-{
- my $args_ref = shift;
- my $options_ref = shift;
-
- if ( exists $options_ref->{'help'} || @{$args_ref} != 0) {
- do_help(['cdiff']);
- }
-
- my $files = exists $options_ref->{'files'} ? 1 : 0;
- my $modules = exists $options_ref->{'modules'} ? 1 : 0;
-
- if ( $files && $modules ) {
- print_error("Options --files and --modules are mutally exclusive", 0);
- do_help(['cdiff']);
- }
-
- my $diff_option;
- if ( $files ) {
- $diff_option = 'files';
- }
- elsif ( $modules ) {
- $diff_option = 'modules';
- }
- else {
- $diff_option = 0;
- }
-
-
- my $masterws = exists $options_ref->{'masterworkspace'} ? uc($options_ref->{'masterworkspace'}) : $ENV{WORK_STAMP};
- my $childws = exists $options_ref->{'childworkspace'} ? $options_ref->{'childworkspace'} : $ENV{CWS_WORK_STAMP};
-
- if ( !defined($masterws) ) {
- print_error("Can't determine master workspace environment.\n", 30);
- }
-
- if ( !defined($childws) ) {
- print_error("Can't determine child workspace environment.\n", 30);
- }
-
- my $cws = Cws->new();
- $cws->child($childws);
- $cws->master($masterws);
-
- if ( !is_valid_cws($cws) ) {
- print_error("'$childws' is not a valid CWS name.\n", 30);
- }
-
- if ( $cws->get_scm() eq 'HG' ) {
- print_error("cws cdiff is not supported for mercurial based childworkspaces", 80);
- }
- my $milestone = $cws->milestone();
-
- my $config = CwsConfig->new();
- my $ooo_svn_server = $config->get_ooo_svn_server();
- my $so_svn_server = $config->get_so_svn_server();
-
- my $ooo_milestone_url = get_milestone_url($ooo_svn_server, $masterws, $milestone);
- my $ooo_cws_url = get_cws_url($ooo_svn_server, $childws);
- my $ooo_files;
- if ( $diff_option ) {
- $ooo_files = svn_diff($ooo_milestone_url, $ooo_cws_url, $diff_option);
- diff_print_files($ooo_files, $diff_option);
- }
- else {
- svn_diff($ooo_milestone_url, $ooo_cws_url, 0);
- }
-
- my $so_files;
- if ( $so_svn_server ) {
- my $so_milestone_url = get_milestone_url($so_svn_server, $masterws, $milestone);
- my $so_cws_url = get_cws_url($so_svn_server, $childws);
- if ( svn_path_exists($so_cws_url) ) {
- if ( $diff_option ) {
- $so_files = svn_diff($so_milestone_url, $so_cws_url, $diff_option);
- diff_print_files($so_files, $diff_option);
- }
- else {
- svn_diff($so_milestone_url, $so_cws_url, 0);
- }
- }
- }
-
-}
-
sub do_setcurrent
{
my $args_ref = shift;
@@ -2685,347 +1956,6 @@ sub usage
print STDERR "Type 'cws help' for usage.\n";
}
-### SVN glue ###
-
-# TODO: is it a better idea to use the SVN bindings?
-# pro:
-# - SVN make guarantees about API stability but no about the command line
-# - finer access to the SVN functionality, better error reporting
-# - prevents parsing errors due to localized SVN messages
-# con:
-# - the bindings are difficult to install, mostly due to subtle install bugs
-# - we do not really use much of the SVN functionality here
-
-sub svn_wc_is_clean
-{
- my $wc_path = shift;
-
- my $result = execute_svnversion_command($wc_path);
-
- my $error = 0;
-
- if ( $result =~ /:/ ) {
- print_error("Working copy '$wc_path' contains mixed revisions. Please run 'svn update'!", 0);
- $error++;
- }
- if ( $result =~ /M/ ) {
- print_error("Working copy '$wc_path' contains locally modified files. Please commit or revert all modified files.", 0);
- $error++;
- }
- if ( $result =~ /S/ ) {
- print_error("Working copy '$wc_path' is partially switched. The whole working copy needs to be switched to the CWS branch.", 0);
- $error++;
- }
- if ( $result =~ /P/ ) {
- print_error("Working copy '$wc_path' is only partially checked out. CWS tools can't work on partially checked out working copies.", 0);
- $error++;
- }
-
- return !$error;
-}
-
-sub svn_version_check
-{
- my $major_required = 1;
- my $minor_required = 5;
- my $patchlevel_required = 4;
-
- my $version_required = $major_required*1000000 + $minor_required*1000 + $patchlevel_required;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... svn version\n";
- }
-
- my @result = execute_svn_command(0, '--version --quiet', " ");
- # svn --version --quiet returns the version in major.minor.patchlevel scheme
- # for example: 1.5.4 or 1.6.0-dev (for developer codelines)
- # hopefully they don't change the versioning scheme
- my ($major, $minor, $patchlevel);
- if ( $result[0] =~ /^(\d+)\.(\d+)\.(\d+)/ ) {
- $major = $1;
- $minor = $2;
- $patchlevel = $3;
- }
- else {
- print_error("Can't determine svn version. Please file an issue with the output of 'svn --version --quiet'. CWS tooling requires svn-1.5.4 or later\n", 1)
- }
-
- my $version = $major*1000000 + $minor*1000 + $patchlevel;
-
- if ( $version < $version_required ) {
- return 0;
- }
- return 1;
-}
-
-sub svn_copy
-{
- my $comment = shift;
- my $source = shift;
- my $dest = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing branch: '$source' -> '$dest'\n";
- }
-
- my @result = execute_svn_command(0, 'copy', "-m '$comment'", $source, $dest);
- if ( $result[1] =~ /Committed revision (\d+)\./ ) {
- print STDERR ", committed revision $1\n";
- } else {
- print STDERR "failed!\n";
- print STDERR @result;
- }
-}
-
-sub svn_milestone_revision
-{
- my $milestone_url = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing log --stop-on-copy: '$milestone_url'\n";
- }
-
- my @result = execute_svn_command(0, 'log', '--stop-on-copy', $milestone_url);
-
- # There might be revisions committed to a tag (allowed in subversion).
- # The lowestmost revision listed in a 'log --stop-on-copy' is the one which
- # was current when the tag was created
- my $revision = 0;
- foreach ( @result ) {
- if ( /^r(\d+)\s+\|\s+/ ) {
- $revision = $1;
- }
- }
-
- return $revision;
-}
-
-sub svn_path_exists
-{
- my $url = shift;
-
- my @result = svn_info($url);
-
- foreach ( @result ) {
- if ( /^Path: / ) {
- return 1;
- }
- }
- return 0;
-}
-
-sub svn_wc_url
-{
- my $wc_path = shift;
-
- my @result = svn_info($wc_path);
-
- foreach ( @result ) {
- if ( /^URL: (.+)$/ ) {
- return $1;
- }
- }
-
- print_error("Can't retrieve svn info from working copy '$wc_path'\n", 23);
-}
-
-sub svn_wc_root
-{
- my $wc_path = shift;
-
- my @result = svn_info($wc_path);
-
- foreach ( @result ) {
- if ( /^Repository Root: (.+)$/ ) {
- return $1;
- }
- }
-
- print_error("Can't retrieve svn info from working copy '$wc_path'\n", 23);
-}
-
-sub svn_info
-{
- my $url = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing info: '$url'\n";
- }
-
- my @result = execute_svn_command(0, 'info', '--depth empty', $url);
- return @result;
-}
-
-sub svn_merge
-{
- my $url = shift;
- my $wc = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing merge: '$url -> $wc'\n";
- }
-
- my $log_file = "$wc/REBASE.LOG";
- my @result = execute_svn_command($log_file, 'merge', '--accept postpone', $url, $wc);
- return @result;
-}
-
-sub svn_switch
-{
- my $wc = shift;
- my $url = shift;
- my $quiet = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing switch: '$url -> $wc'\n";
- }
-
- my $switch = $quiet ? 'switch --quiet' : 'switch';
-
- my @result = execute_svn_command('print', $switch, $url, $wc);
- return @result;
-}
-
-sub svn_checkout
-{
- my $url = shift;
- my $wc = shift;
- my $quiet = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing checkout: '$url -> $wc'\n";
- }
-
- my $checkout = $quiet ? 'checkout --quiet' : 'checkout';
-
- my @result = execute_svn_command('print', $checkout, $url, $wc);
- return @result;
-}
-
-sub svn_commit
-{
- my $wc = shift;
- my $commit_message = shift;
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing commit: '$wc'\n";
- }
-
- my $log_file = "$wc/REBASE.LOG";
- my @result = execute_svn_command($log_file, 'commit', "-m '$commit_message'", $wc);
- return @result;
-}
-
-sub svn_diff
-{
- my $url1 = shift;
- my $url2 = shift;
- my $diff_option = shift;
-
- my $summarize = '';
- if ( $diff_option ) {
- $summarize = '--summarize';
- }
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... preparing diff $summarize: '$url1' vs. '$url2'\n";
- }
-
- if ( $summarize ) {
- my $result = execute_svn_command(0, 'diff', $summarize, $url1, $url2);
- my $nlen = length($url1);
- my @files;
- foreach( @{$result} ) {
- my ($dummy, $url) = split();
- next if length($url) <= $nlen; # skip short URLs (like $url1)
- my $file = substr($url, $nlen+1);
- next if index($file, '/') == -1; # skip 'modified' top level dirs
- push (@files, $file);
- }
- return \@files;
- }
- else {
- execute_svn_command('print', 'diff', $url1, $url2);
- }
-}
-
-sub execute_svn_command
-{
- my $log = shift;
- my $command = shift;
- my $options = shift;
- my @args = @_;
-
- my $args_str = join(" ", @args);
-
- # we can only parse english strings, hopefully a C locale is available everywhere
- $ENV{LC_ALL}='C';
- $command = "svn $command $options $args_str";
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... execute command line: '$command'\n";
- }
-
- my @result;
- my $date;
- if ( $log && $log ne 'print') {
- open(LOG, ">>$log") or print_error("can't open log file '$log'", 30);
- $date = localtime();
- print LOG "Start $command $args_str at $date\n";
- }
- open(OUTPUT, "$command 2>&1 |") or print_error("Can't execute svn command line client", 98);
- STDOUT->autoflush(1) if $log;
- while (<OUTPUT>) {
- if ( $log ) {
- print STDOUT $_;
- print LOG $_ if $log ne 'print';
- }
- else {
- push(@result, $_);
- }
- }
- STDOUT->autoflush(0) if $log;
- close(OUTPUT);
- if ( $log && $log ne 'print') {
- $date = localtime();
- print LOG "Stop $command $args_str at $date\n";
- close (LOG);
- }
-
- my $rc = $? >> 8;
-
- if ( $rc > 0) {
- print STDERR "\n";
- print STDERR @result if !$log;
- print_error("The subversion command line client failed with exit status '$rc'", 99);
- }
- return wantarray ? @result : \@result;
-}
-
-sub execute_svnversion_command
-{
- my $options = shift;
- my @args = @_;
-
- my $args_str = join(" ", @args);
-
- # we can only parse english strings, hopefully a C locale is available everywhere
- $ENV{LC_ALL}='C';
- $command = "svnversion $options $args_str";
-
- if ( $debug ) {
- print STDERR "\nCWS-DEBUG: ... execute command line: '$command'\n";
- }
-
- my $result = `$command`;
- my $rc = $? >> 8;
- if ($rc > 0) {
- print_error("The subversion command line tool 'svnversion' failed with exit status '$rc'", 99);
- }
-
- return $result;
-}
-
### HG glue ###
sub hg_clone
diff --git a/solenv/bin/gccinstlib.pl b/solenv/bin/gccinstlib.pl
index 7c9ac4b24c2e..90c8f02a3e06 100755
--- a/solenv/bin/gccinstlib.pl
+++ b/solenv/bin/gccinstlib.pl
@@ -53,4 +53,13 @@ foreach $Src (@CopySrc) {
system ("/bin/cp $Src $Dest") && die "copy failed: $!";
}
+
+foreach $File (@ARGV) {
+ #https://bugzilla.redhat.com/show_bug.cgi?id=149465
+ printf "unprelinking $Dest/$File\n";
+ #If it's already unprelinked .i.e. no .gnu.prelink_undo section, that's fine
+ #If prelink is not installed, it's massively unlikely that it's prelinked
+ system ("prelink -u $Dest/$File > /dev/null 2>&1");
+}
+
exit (0);
diff --git a/solenv/bin/jpropex b/solenv/bin/jpropex
new file mode 100755
index 000000000000..2d62d13b093e
--- /dev/null
+++ b/solenv/bin/jpropex
@@ -0,0 +1,10 @@
+#!/bin/sh
+if [ x${SOLARENV}x = xx ]; then
+ echo No environment found, please use 'configure' or 'setsolar'
+ exit 1
+fi
+if [ x${JAVA_HOME}x = xx ]; then
+ echo No Java found!
+ exit 1
+fi
+exec java -DSOLARSRC=${SOLARSRC} -DWORK_STAMP=${WORK_STAMP} -DUSE_SHELL= -jar ${SOLARVER}/${INPATH}/bin${UPDMINOREXT}/jpropex.jar "$@"
diff --git a/solenv/bin/macosx-change-install-names.pl b/solenv/bin/macosx-change-install-names.pl
index 5ccedccb6027..05fa12f06070 100644
--- a/solenv/bin/macosx-change-install-names.pl
+++ b/solenv/bin/macosx-change-install-names.pl
@@ -45,7 +45,7 @@ sub action($$$)
'shl/OOO/OOO' => '@loader_path',
'shl/OXT/URELIB' => '@executable_path/urelibs',
'shl/BOXT/URELIB' => '@executable_path/urelibs',
- 'shl/BOXT/OOO' => '@loader_path/../../../../../../basis-link/program',
+ 'shl/BOXT/OOO' => '@loader_path/../../../basis-link/program',
'shl/NONE/URELIB' => '@__VIA_LIBRARY_PATH__',
'shl/NONE/OOO' => '@__VIA_LIBRARY_PATH__',
'shl/NONE/NONE' => '@__VIA_LIBRARY_PATH__');
diff --git a/solenv/bin/modules/installer/archivefiles.pm b/solenv/bin/modules/installer/archivefiles.pm
index 4a9586c9fdd4..e85903c699aa 100644
--- a/solenv/bin/modules/installer/archivefiles.pm
+++ b/solenv/bin/modules/installer/archivefiles.pm
@@ -93,6 +93,54 @@ sub get_patch_file_list
}
#################################################################
+# Reading all executables in the "manifest.xml"
+#################################################################
+
+sub get_all_executables_from_manifest
+{
+ my ($unzipdir, $manifestfile, $executable_files_in_extensions) = @_;
+
+ my $is_executable = 0;
+
+ for ( my $i = 0; $i <= $#{$manifestfile}; $i++ )
+ {
+ my $line = ${$manifestfile}[$i];
+
+ if ( $line =~ /\"application\/vnd\.sun\.star\.executable\"/ ) { $is_executable = 1; }
+
+ if (( $line =~ /manifest\:full\-path=\"(.*?)\"/ ) && ( $is_executable ))
+ {
+ my $filename = $unzipdir . $installer::globals::separator . $1;
+ # making only slashes for comparison reasons
+ $filename =~ s/\\/\//g;
+ $executable_files_in_extensions->{$filename} = 1;
+ }
+
+ if ( $line =~ /\/\>/ ) { $is_executable = 0; }
+ }
+}
+
+#################################################################
+# Reading the "manifest.xml" in extensions and determine, if
+# there are executable files
+#################################################################
+
+sub collect_all_executable_files_in_extensions
+{
+ my ($unzipdir, $executable_files_in_extensions) = @_;
+
+ $unzipdir =~ s/\Q$installer::globals::separator\E\s*$//;
+
+ my $manifestfilename = $unzipdir . $installer::globals::separator . "META-INF" . $installer::globals::separator . "manifest.xml";
+
+ if ( -f $manifestfilename )
+ {
+ my $manifestfile = installer::files::read_file($manifestfilename);
+ get_all_executables_from_manifest($unzipdir, $manifestfile, $executable_files_in_extensions);
+ }
+}
+
+#################################################################
# Analyzing files with flag ARCHIVE
#################################################################
@@ -141,6 +189,10 @@ sub resolving_archive_flag
my $rename_to_language = 0;
if ( $styles =~ /\bRENAME_TO_LANGUAGE\b/ ) { $rename_to_language = 1; } # special handling for renamed files (scriptitems.pm)
+ my %executable_files_in_extensions = ();
+ my $set_executable_privileges = 0; # setting privileges for exectables is required for oxt files
+ if ( $onefile->{'Name'} =~ /\.oxt\s*$/ ) { $set_executable_privileges = 1; }
+
# mechanism to select files from an archive files
my $select_files = 0;
my $selectlistfiles = "";
@@ -260,6 +312,12 @@ sub resolving_archive_flag
push( @installer::globals::logfileinfo, $infoline);
}
}
+
+ # Selecting names of executable files in extensions
+ if ( $set_executable_privileges )
+ {
+ collect_all_executable_files_in_extensions($unzipdir, \%executable_files_in_extensions);
+ }
}
my $zipfileref = \@zipfile;
@@ -313,6 +371,19 @@ sub resolving_archive_flag
push( @installer::globals::logfileinfo, $infoline);
}
+ if ( $set_executable_privileges )
+ {
+ # All pathes to executables are saved in the hash %executable_files_in_extensions
+ my $compare_path = $newfile{'sourcepath'};
+ $compare_path =~ s/\\/\//g; # contains only slashes for comparison reasons
+ if ( exists($executable_files_in_extensions{$compare_path}) )
+ {
+ $newfile{'UnixRights'} = "775";
+ $infoline = "Executable in Extension: Setting unix rights for \"$newfile{'sourcepath'}\" to \"$newfile{'UnixRights'}\"\n";
+ push( @installer::globals::logfileinfo, $infoline);
+ }
+ }
+
if ( $select_files )
{
if ( ! installer::existence::exists_in_array($zipname,$selectlistfiles) )
diff --git a/solenv/bin/modules/installer/simplepackage.pm b/solenv/bin/modules/installer/simplepackage.pm
index 314bcef64ee2..fdf9fc6fa4c3 100644
--- a/solenv/bin/modules/installer/simplepackage.pm
+++ b/solenv/bin/modules/installer/simplepackage.pm
@@ -62,6 +62,21 @@ sub check_simple_packager_project
}
####################################################
+# Detecting the directory with extensions
+####################################################
+
+sub get_extensions_dir
+{
+ my ( $subfolderdir ) = @_;
+
+ my $extensiondir = $subfolderdir . $installer::globals::separator;
+ if ( $installer::globals::officedirhostname ne "" ) { $extensiondir = $extensiondir . $installer::globals::officedirhostname . $installer::globals::separator; }
+ $extensiondir = $extensiondir . "share" . $installer::globals::separator . "extensions";
+
+ return $extensiondir;
+}
+
+####################################################
# Registering extensions
####################################################
@@ -774,9 +789,16 @@ sub create_simple_package
# Registering the extensions
- installer::logger::print_message( "... registering extensions ...\n" );
- installer::logger::include_header_into_logfile("Registering extensions:");
- register_extensions($subfolderdir, $languagestringref);
+ # installer::logger::print_message( "... registering extensions ...\n" );
+ # installer::logger::include_header_into_logfile("Registering extensions:");
+ # register_extensions($subfolderdir, $languagestringref);
+
+ installer::logger::print_message( "... removing superfluous directories ...\n" );
+ installer::logger::include_header_into_logfile("Removing superfluous directories:");
+
+ my $extensionfolder = get_extensions_dir($subfolderdir);
+
+ installer::systemactions::remove_empty_dirs_in_folder($extensionfolder);
if ( $installer::globals::compiler =~ /^unxmacx/ )
{
diff --git a/solenv/bin/modules/installer/systemactions.pm b/solenv/bin/modules/installer/systemactions.pm
index df3b331b80d8..981dc40f3209 100644
--- a/solenv/bin/modules/installer/systemactions.pm
+++ b/solenv/bin/modules/installer/systemactions.pm
@@ -1664,4 +1664,51 @@ sub read_full_directory {
return
}
+##############################################################
+# Removing all empty directories below a specified directory
+##############################################################
+
+sub remove_empty_dirs_in_folder
+{
+ my ( $dir ) = @_;
+
+ my @content = ();
+ my $infoline = "";
+
+ $dir =~ s/\Q$installer::globals::separator\E\s*$//;
+
+ if ( -d $dir )
+ {
+ opendir(DIR, $dir);
+ @content = readdir(DIR);
+ closedir(DIR);
+
+ my $oneitem;
+
+ foreach $oneitem (@content)
+ {
+ if ((!($oneitem eq ".")) && (!($oneitem eq "..")))
+ {
+ my $item = $dir . $installer::globals::separator . $oneitem;
+
+ if ( -d $item ) # recursive
+ {
+ remove_empty_dirs_in_folder($item);
+ }
+ }
+ }
+
+ # try to remove empty directory
+ my $returnvalue = rmdir $dir;
+
+ if ( $returnvalue )
+ {
+ $infoline = "Successfully removed empty dir $dir\n";
+ push(@installer::globals::logfileinfo, $infoline);
+ }
+
+ }
+
+}
+
1;
diff --git a/solenv/bin/modules/installer/windows/admin.pm b/solenv/bin/modules/installer/windows/admin.pm
index 3564770e76ba..47a71b059b2a 100644
--- a/solenv/bin/modules/installer/windows/admin.pm
+++ b/solenv/bin/modules/installer/windows/admin.pm
@@ -436,6 +436,8 @@ sub copy_files_into_directory_structure
{
my ($fileorder, $filehash, $componenthash, $fullpathhash, $maxsequence, $unpackdir, $installdir, $dirhash) = @_;
+ my $unopkgfile = "";
+
for ( my $i = 1; $i <= $maxsequence; $i++ )
{
if ( exists($fileorder->{$i}) )
@@ -486,6 +488,8 @@ sub copy_files_into_directory_structure
installer::exiter::exit_program($infoline, "copy_files_into_directory_structure");
}
+ if ( $destfile =~ /unopkg\.exe\s*$/ ) { $unopkgfile = $destfile; }
+
# installer::systemactions::copy_one_file($sourcefile, $destfile);
}
# else # allowing missing sequence numbers ?
@@ -493,6 +497,8 @@ sub copy_files_into_directory_structure
# installer::exiter::exit_program("ERROR: No file assigned to sequence $i", "copy_files_into_directory_structure");
# }
}
+
+ return $unopkgfile;
}
@@ -742,6 +748,68 @@ sub write_sis_info
}
}
+####################################################
+# Detecting the directory with extensions
+####################################################
+
+sub get_extensions_dir
+{
+ my ( $unopkgfile ) = @_;
+
+ my $localbranddir = $unopkgfile;
+ installer::pathanalyzer::get_path_from_fullqualifiedname(\$localbranddir); # "program" dir in brand layer
+ installer::pathanalyzer::get_path_from_fullqualifiedname(\$localbranddir); # root dir in brand layer
+ $localbranddir =~ s/\Q$installer::globals::separator\E\s*$//;
+ my $extensiondir = $localbranddir . $installer::globals::separator . "share" . $installer::globals::separator . "extensions";
+
+ return $extensiondir;
+}
+
+##############################################################
+# Removing all empty directories below a specified directory
+##############################################################
+
+sub remove_empty_dirs_in_folder
+{
+ my ( $dir, $firstrun ) = @_;
+
+ if ( $firstrun )
+ {
+ print "Removing superfluous directories\n";
+ }
+
+ my @content = ();
+
+ $dir =~ s/\Q$installer::globals::separator\E\s*$//;
+
+ if ( -d $dir )
+ {
+ opendir(DIR, $dir);
+ @content = readdir(DIR);
+ closedir(DIR);
+
+ my $oneitem;
+
+ foreach $oneitem (@content)
+ {
+ if ((!($oneitem eq ".")) && (!($oneitem eq "..")))
+ {
+ my $item = $dir . $installer::globals::separator . $oneitem;
+
+ if ( -d $item ) # recursive
+ {
+ remove_empty_dirs_in_folder($item, 0);
+ }
+ }
+ }
+
+ # try to remove empty directory
+ my $returnvalue = rmdir $dir;
+
+ # if ( $returnvalue ) { print "Successfully removed empty dir $dir\n"; }
+ }
+}
+
####################################################################################
# Simulating an administrative installation
####################################################################################
@@ -813,11 +881,18 @@ sub make_admin_install
my $fullpathhash = create_directory_structure($dirhash, $targetdir);
# Copying files
- copy_files_into_directory_structure($fileorder, $filehash, $componenthash, $fullpathhash, $maxsequence, $unpackdir, $installdir, $dirhash);
+ my $unopkgfile = copy_files_into_directory_structure($fileorder, $filehash, $componenthash, $fullpathhash, $maxsequence, $unpackdir, $installdir, $dirhash);
my $msidatabase = $targetdir . $installer::globals::separator . $databasefilename;
installer::systemactions::copy_one_file($databasepath, $msidatabase);
+ if ( $unopkgfile ne "" )
+ {
+ # Removing empty dirs in extension folder
+ my $extensionfolder = get_extensions_dir($unopkgfile);
+ if ( -d $extensionfolder ) { remove_empty_dirs_in_folder($extensionfolder, 1); }
+ }
+
# Editing registry table because of wrong Property value
# my $registryfilename = $helperdir . $installer::globals::separator . "Registry.idt";
# my $componentfilename = $helperdir . $installer::globals::separator . "Component.idt";
diff --git a/solenv/config/sdev300.ini b/solenv/config/sdev300.ini
index d04a87c595e2..3e80e1460885 100644..100755
--- a/solenv/config/sdev300.ini
+++ b/solenv/config/sdev300.ini
@@ -8,7 +8,7 @@ common
BIG_SVX TRUE
BMP_WRITES_FLAG TRUE
BUILD_SPECIAL TRUE
- BUILD_TYPE SO OOo EXT BINFILTER MORE_FONTS BSH CURL DICTIONARIES HSQLDB HUNSPELL HYPHEN JPEG LIBXML2 LIBXMLSEC LPSOLVE MOZ NEON TWAIN PYTHON ZLIB SANE UNIXODBC X11_EXTENSIONS LIBWPD EPM ODK MSFONTEXTRACT MATHMLDTD BOOST EXPAT CRASHREP BERKELEYDB LIBXSLT SUN AGG GTK ICU SYSTRAY_GTK JAVAINSTALLER2 VIGRA OPENSSL JFREEREPORT APACHE_COMMONS TOMCAT REPORTBUILDER SDEXT SWEXT XPDF LUCENE REDLAND SAXON WRITER2LATEX NSS L10N GRAPHITE MYSQLCPPCONN MYSQLC CPPUNIT
+ BUILD_TYPE SO OOo EXT BINFILTER MORE_FONTS BSH CURL DICTIONARIES HSQLDB HUNSPELL HYPHEN MYTHES JPEG LIBXML2 LIBXMLSEC LPSOLVE MOZ NEON TWAIN PYTHON ZLIB SANE UNIXODBC X11_EXTENSIONS LIBWPD EPM ODK MSFONTEXTRACT MATHMLDTD BOOST MDDS EXPAT CRASHREP BERKELEYDB LIBXSLT SUN AGG GTK ICU SYSTRAY_GTK JAVAINSTALLER2 VIGRA OPENSSL JFREEREPORT APACHE_COMMONS TOMCAT REPORTBUILDER SDEXT SWEXT XPDF LUCENE REDLAND SAXON WRITER2LATEX NSS L10N GRAPHITE MYSQLCPPCONN MYSQLC CPPUNIT
common_build TRUE
COMMON_OUTDIR common
CONFIG_PROJECT config_office
diff --git a/solenv/inc/ant.properties b/solenv/inc/ant.properties
index 40373957997a..b2c0f748ef7a 100644
--- a/solenv/inc/ant.properties
+++ b/solenv/inc/ant.properties
@@ -1,3 +1,4 @@
+# x-no-translate
build.bin=${build.dir}/bin
build.class=${build.dir}/class
build.inc=${build.dir}/inc
diff --git a/solenv/inc/libs.mk b/solenv/inc/libs.mk
index 7237832e1cd3..09b6df9d33d9 100644
--- a/solenv/inc/libs.mk
+++ b/solenv/inc/libs.mk
@@ -344,7 +344,11 @@ HUNSPELLLIB=$(HUNSPELL_LIBS)
.ELSE
HUNSPELLLIB=-lhunspell-1.2
.ENDIF
-MYTHESLIB=-lmythes
+.IF "$(SYSTEM_MYTHES)" == "YES"
+MYTHESLIB=$(MYTHES_LIBS)
+.ELSE
+MYTHESLIB=-lmythes-1.2
+.ENDIF
PYUNOLIB=-lpyuno
LPSOLVELIB=-llpsolve55
SOFFICELIB=-lsofficeapp
diff --git a/solenv/inc/minor.mk b/solenv/inc/minor.mk
index 519831ffb932..42eb91b48474 100644
--- a/solenv/inc/minor.mk
+++ b/solenv/inc/minor.mk
@@ -1,5 +1,5 @@
RSCVERSION=300
-RSCREVISION=300m83(Build:9511)
-BUILD=9511
-LAST_MINOR=m83
+RSCREVISION=300m84(Build:9512)
+BUILD=9512
+LAST_MINOR=m84
SOURCEVERSION=DEV300
diff --git a/solenv/inc/settings.mk b/solenv/inc/settings.mk
index ccd8f929d5fe..c5283fb1b59e 100644
--- a/solenv/inc/settings.mk
+++ b/solenv/inc/settings.mk
@@ -865,7 +865,7 @@ SCPDEFS+=-DUDK_MAJOR=$(UDK_MAJOR)
SCPDEFS+=-U$(COMID) -DCOMID=$(COMID) -DCOMNAME=$(COMNAME) -D_$(COMID)
SCPDEFS+=-DCCNUMVER=$(CCNUMVER)
.IF "$(COM)"=="GCC"
-SCPDEFS+=-DSHORTSTDCPP3=$(SHORTSTDCPP3)
+SCPDEFS+=-DSHORTSTDCPP3=$(SHORTSTDCPP3) -DSHORTSTDC3=$(SHORTSTDC3)
.ENDIF # "$(SHORTSTDCPP3)"!=""
# extend library path for OS/2 gcc/wlink
.IF "$(GUI)"=="OS2"
diff --git a/solenv/inc/target.mk b/solenv/inc/target.mk
index 0319e92f3418..1a4ad6e182a0 100644
--- a/solenv/inc/target.mk
+++ b/solenv/inc/target.mk
@@ -1461,6 +1461,7 @@ COMPVTMP:=$(mktmp iii)
@echo COMID:=$(COMID) >> $(COMPVTMP)
.IF "$(COM)"=="GCC"
@echo SHORTSTDCPP3:=$(SHORTSTDCPP3) >> $(COMPVTMP)
+ @echo SHORTSTDC3:=$(SHORTSTDC3) >> $(COMPVTMP)
.ENDIF
@echo CCNUMVER:=$(CCNUMVER) >> $(COMPVTMP)
@echo CCVER:=$(CCVER:s/-/ /:1) >> $(COMPVTMP)
@@ -2041,6 +2042,7 @@ $(subst,$(OUTPATH),$(COMMON_OUTDIR) $(BIN))/hid.lst .PHONY :
.ENDIF # "$(SOLAR_JAVA)"!=""
.INCLUDE : tg_merge.mk
+.INCLUDE : tg_propmerge.mk
wordcount:
wc *.* >> $(TMP)/wc.lst
diff --git a/solenv/inc/tg_compv.mk b/solenv/inc/tg_compv.mk
index 8218887528fe..c68ae5af430e 100644
--- a/solenv/inc/tg_compv.mk
+++ b/solenv/inc/tg_compv.mk
@@ -77,6 +77,7 @@ COMNAME=msci
.IF "$(COM)"=="GCC"
SHORTSTDCPP3:=
+SHORTSTDC3:="1"
.IF "$(CCNUMVER)">="000200910000"
COMID=GCC
@@ -101,6 +102,19 @@ SHORTSTDCPP3="5"
.ENDIF
.IF "$(CCNUMVER)">="000300040000"
+.IF "$(OS)$(CPU)" == "LINUX6" || "$(OS)$(CPU)" == "LINUXH"
+#for gcc >= 3.4.0 on m68k-linux this is libgcc_s.so.2.
+#for gcc >= 3.4.0 < 4.2.0 on hppa-linux this is libgcc_s.so.2.
+SHORTSTDC3:="2"
+.ENDIF
+SHORTSTDCPP3="6"
+.ENDIF
+
+.IF "$(CCNUMVER)">="000400020000"
+.IF "$(OS)$(CPU)" == "LINUXH"
+#for gcc >= 4.2.0 on hppa-linux this is libgcc_s.so.4.
+SHORTSTDC3:="4"
+.ENDIF
SHORTSTDCPP3="6"
.ENDIF
diff --git a/solenv/inc/tg_propmerge.mk b/solenv/inc/tg_propmerge.mk
new file mode 100755
index 000000000000..796bca982815
--- /dev/null
+++ b/solenv/inc/tg_propmerge.mk
@@ -0,0 +1,66 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# 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.
+#
+#*************************************************************************
+
+.IF "$(L10NPROPERTYFILES)"!=""
+ALLTAR : $(MISC)/$(TARGET).pmerge.mk $(L10NPROPERTYFILES)
+
+$(MISC)/$(TARGET).pmerge.mk : $(L10NPROPERTYFILES)
+
+$(L10NPROPERTYFILES) : $(LOCALIZESDF)
+
+.INCLUDE .IGNORE : $(MISC)/$(TARGET).pmerge.mk
+
+.IF "$(alllangiso)"!="$(last_merge)"
+MERGEPHONY:=.PHONY
+.ENDIF # "$(alllangiso)" != "$(last_merge)"
+
+$(CLASSDIR)/$(PACKAGE)/%.properties $(MERGEPHONY) : %.properties
+ @@-$(MKDIRHIER) $(@:d)
+.IF "$(WITH_LANG)"==""
+ $(COMMAND_ECHO)$(COPY) $< $@
+.ELSE # "$(WITH_LANG)"==""
+ @@-$(RM) $@
+ $(COMMAND_ECHO)@noop $(assign PMERGELIST+:=$(<:f))
+ $(COMMAND_ECHO)@noop $(assign PDESTDIR:=$(@:d))
+.ENDIF # "$(WITH_LANG)"==""
+
+$(MISC)/$(TARGET).pmerge.mk : $(PMERGELIST)
+.IF "$(WITH_LANG)"!=""
+# jpropex command file requirements:
+# - one file per line
+# - no spaces
+# - no empty lines
+# $(uniq ...) to workaround $assign adding the value twice...
+ @noop $(assign PMERGEFILELIST:=$(uniq $(PMERGELIST)))
+ $(COMMAND_ECHO)$(SOLARBINDIR)/jpropex -p $(PRJNAME) -r $(PRJ) -o $(PDESTDIR) -i @$(mktmp $(PMERGEFILELIST:t"\n":s/ //)) -l all -lf $(alllangiso:s/ /,/) -m $(LOCALIZESDF)
+.ENDIF # "$(WITH_LANG)"!=""
+ @-$(RM) $@
+ $(COMMAND_ECHO)echo last_merge=$(alllangiso) > $@
+
+.ENDIF # "$(L10NPROPERTYFILES)"!=""
+
+
diff --git a/solenv/inc/unxlng.mk b/solenv/inc/unxlng.mk
index 62a96f9c5f49..be8c5d01b714 100644
--- a/solenv/inc/unxlng.mk
+++ b/solenv/inc/unxlng.mk
@@ -151,7 +151,7 @@ LINKFLAGSRUNPATH_OOO=-Wl,-rpath,\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_SDK=-Wl,-rpath,\''$$ORIGIN/../../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-Wl,-rpath,\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-Wl,-rpath,\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-Wl,-rpath,\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
# flag -Wl,-z,noexecstack sets the NX bit on the stack
LINKFLAGS=-Wl,-z,noexecstack -Wl,-z,combreloc $(LINKFLAGSDEFS)
diff --git a/solenv/inc/unxsoli4.mk b/solenv/inc/unxsoli4.mk
index 5ddbe058b299..b1778a0edfde 100644
--- a/solenv/inc/unxsoli4.mk
+++ b/solenv/inc/unxsoli4.mk
@@ -137,7 +137,7 @@ LINKFLAGSRUNPATH_OOO=-R\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_SDK=-R\''$$ORIGIN/../../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-R\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
LINKFLAGS=-w -mt -z combreloc -PIC -temp=/tmp -norunpath -library=no%Cstd
LINKCFLAGS=-w -mt -z combreloc -norunpath
diff --git a/solenv/inc/unxsols4.mk b/solenv/inc/unxsols4.mk
index 92720da3de47..4febb67d446a 100644
--- a/solenv/inc/unxsols4.mk
+++ b/solenv/inc/unxsols4.mk
@@ -143,7 +143,7 @@ LINKFLAGSRUNPATH_OOO=-R\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_SDK=-R\''$$ORIGIN/../../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-R\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
LINKFLAGS=-w -mt -z combreloc -PIC -temp=/tmp -norunpath -library=no%Cstd
LINKCFLAGS=-w -mt -z combreloc -norunpath
diff --git a/solenv/inc/unxsolu4.mk b/solenv/inc/unxsolu4.mk
index 45dadc53f533..c73d6fc37283 100644
--- a/solenv/inc/unxsolu4.mk
+++ b/solenv/inc/unxsolu4.mk
@@ -137,7 +137,7 @@ LINKFLAGSRUNPATH_UREBIN=-R\''$$ORIGIN/../lib:$$ORIGIN'\'
LINKFLAGSRUNPATH_OOO=-R\''$$ORIGIN:$$ORIGIN/../ure-link/lib'\'
LINKFLAGSRUNPATH_BRAND=-R\''$$ORIGIN:$$ORIGIN/../basis-link/program:$$ORIGIN/../basis-link/ure-link/lib'\'
LINKFLAGSRUNPATH_OXT=
-LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../../../../basis-link/program'\'
+LINKFLAGSRUNPATH_BOXT=-R\''$$ORIGIN/../../../basis-link/program'\'
LINKFLAGSRUNPATH_NONE=
LINKFLAGS=-m64 -w -mt -z combreloc -PIC -temp=/tmp -norunpath -library=stlport4
LINKCFLAGS=-m64 -w -mt -z combreloc -norunpath
diff --git a/solenv/inc/wntgcci.mk b/solenv/inc/wntgcci.mk
index abb2bb25e34d..a6c7e67cfd9f 100644
--- a/solenv/inc/wntgcci.mk
+++ b/solenv/inc/wntgcci.mk
@@ -110,7 +110,7 @@ LINK*=$(CXX)
LINKC*=$(CC)
CYGLIB=$(LIB:s/;/ -L/)
-LINKFLAGS=-nostdlib -Wl,--enable-stdcall-fixup,--enable-runtime-pseudo-reloc -L$(CYGLIB)
+LINKFLAGS=-nostdlib -Wl,--enable-stdcall-fixup,--enable-runtime-pseudo-reloc-v2 -L$(CYGLIB)
.IF "$(USE_MINGW)"=="cygwin"
MINGWLIBDIR=$(COMPATH)$/lib$/mingw
.ELSE
diff --git a/soltools/cpp/_nlist.c b/soltools/cpp/_nlist.c
index 9144f2b7e15e..a71085bfbbf9 100644
--- a/soltools/cpp/_nlist.c
+++ b/soltools/cpp/_nlist.c
@@ -3,9 +3,6 @@
#include <string.h>
#include "cpp.h"
-extern int stgetopt(int, char *const *, const char *);
-extern char *optarg;
-extern int optind;
extern int Cplusplus;
Nlist *kwdefined;
char wd[128];
diff --git a/soltools/cpp/_unix.c b/soltools/cpp/_unix.c
index 5574bb3ecef7..5352f6f1f5f9 100644
--- a/soltools/cpp/_unix.c
+++ b/soltools/cpp/_unix.c
@@ -12,9 +12,15 @@
#include "cpp.h"
+#if defined MACOSX || !defined HAVE_GETOPT
extern int stgetopt(int, char *const *, const char *);
-extern char *optarg, rcsid[];
+extern char *optarg;
extern int optind;
+#else
+#include <getopt.h>
+#endif
+
+extern char rcsid[];
int Pflag = 0; /* print no line information */
int Iflag = 0; /* print includes */
@@ -36,7 +42,11 @@ void
Tokenrow tr;
setup_kwtab();
+#if defined MACOSX || !defined HAVE_GETOPT
while ((c = stgetopt(argc, argv, "NOPV:I:D:U:F:A:X:u:l:+")) != -1)
+#else
+ while ((c = getopt(argc, argv, "NOPV:I:D:U:F:A:X:u:l:+")) != -1)
+#endif
switch (c)
{
case 'N':
diff --git a/soltools/cpp/makefile.mk b/soltools/cpp/makefile.mk
index 818c27028345..533cf9a91ab7 100644
--- a/soltools/cpp/makefile.mk
+++ b/soltools/cpp/makefile.mk
@@ -45,7 +45,6 @@ LIBSALCPPRT=$(0)
OBJFILES= \
$(OBJ)$/_cpp.obj \
$(OBJ)$/_eval.obj \
- $(OBJ)$/_getopt.obj \
$(OBJ)$/_include.obj \
$(OBJ)$/_lex.obj \
$(OBJ)$/_macro.obj \
@@ -54,6 +53,15 @@ OBJFILES= \
$(OBJ)$/_tokens.obj \
$(OBJ)$/_unix.obj
+# nonstandard cpp options needed for Mac (-isysroot),
+# needs the custom stgetopt defined here :/
+.IF "$(OS)" == "MACOSX" || "$(HAVE_GETOPT)" != "YES"
+OBJFILES += $(OBJ)$/_getopt.obj
+.ENDIF
+.IF "$(HAVE_GETOPT)" == "YES"
+CDEFS += -DHAVE_GETOPT
+.ENDIF
+
APP1TARGET = $(TARGET)
.IF "$(GUI)" != "OS2"
APP1STACK = 1000000
diff --git a/soltools/javadep/javadep.c b/soltools/javadep/javadep.c
index d840e6606689..a573d78eed75 100644
--- a/soltools/javadep/javadep.c
+++ b/soltools/javadep/javadep.c
@@ -138,12 +138,14 @@ void usage(void);
void err_quit(const char *, ...);
void silent_quit(void);
+#ifdef WNT
/* poor man's getopt() */
int simple_getopt(char *pargv[], const char *poptstring);
char *optarg = NULL;
int optind = 1;
int optopt = 0;
int opterr = 0;
+#endif
uint8
read_uint8(const file_t *pfile)
@@ -748,7 +750,7 @@ int simple_getopt(char *pargv[], const char *poptstring)
char *popt;
int c = parg[1];
if ( (popt = strchr(poptstring, c)) == NULL ) {
- optopt = c;
+ optopt = c;
if ( opterr )
fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
return '?';
@@ -769,7 +771,6 @@ int simple_getopt(char *pargv[], const char *poptstring)
return -1;
}
-
int CDECL
main(int argc, char *argv[])
{
@@ -817,7 +818,11 @@ main(int argc, char *argv[])
opterr = 0;
pincs = allocate_growable();
+#ifdef WNT
while( (c = simple_getopt(pall_argv, ":i:I:s:S:o:OhHvV")) != -1 ) {
+#else
+ while( (c = getopt(nall_argc, pall_argv, ":i:I:s:S:o:OhHvV")) != -1 ) {
+#endif
switch(c) {
case 'i':
case 'I':
diff --git a/splitbuild/extern.lst b/splitbuild/extern.lst
index 000db8095f5c..a3e85950337c 100644
--- a/splitbuild/extern.lst
+++ b/splitbuild/extern.lst
@@ -1 +1 @@
-afms agg apache-commons apple_remote beanshell berkeleydb boost cairo cppunit curl epm expat external graphite hsqldb hunspell hyphen icc icu jfreereport jpeg libegg libtextcat libwpd libxml2 libxmlsec libxslt lpsolve lucene MathMLDTD more_fonts moz neon np_sdk nss openssl python redland rhino sane saxon stax stlport tomcat twain unixODBC vigra x11_extensions xpdf xsltml zlib
+afms agg apache-commons apple_remote beanshell berkeleydb boost cairo cppunit curl epm expat external graphite hsqldb hunspell hyphen icc icu jfreereport jpeg libegg libtextcat libwpd libxml2 libxmlsec libxslt lpsolve lucene MathMLDTD more_fonts moz mythes neon np_sdk nss openssl python redland rhino sane saxon stax stlport tomcat twain unixODBC vigra x11_extensions xpdf xsltml zlib
diff --git a/starmath/source/smdetect.cxx b/starmath/source/smdetect.cxx
index aef4df112431..583098b6d8a2 100644
--- a/starmath/source/smdetect.cxx
+++ b/starmath/source/smdetect.cxx
@@ -168,7 +168,7 @@ SmFilterDetect::~SmFilterDetect()
}
else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("InteractionHandler")) )
lDescriptor[nProperty].Value >>= xInteraction;
- else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RapairPackage")) )
+ else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RepairPackage")) )
lDescriptor[nProperty].Value >>= bRepairPackage;
else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("DocumentTitle")) )
nIndexOfDocumentTitle = nProperty;
diff --git a/svtools/inc/svtools/accessibletable.hxx b/svtools/inc/svtools/accessibletable.hxx
index 198a24b8eb62..8ff17a2b71c7 100755
--- a/svtools/inc/svtools/accessibletable.hxx
+++ b/svtools/inc/svtools/accessibletable.hxx
@@ -124,7 +124,7 @@ public:
virtual ::com::sun::star::uno::Any GetCellContent( sal_Int32 _nRowPos, sal_Int32 _nColPos) const = 0;
virtual std::vector<sal_Int32>& GetSelectedRows() = 0;
virtual void RemoveSelectedRow(sal_Int32 _nRowPos) = 0;
- virtual ::rtl::OUString GetAccessibleCellText(sal_Int32 _nRowPos, sal_Int32 _nColPos) = 0;
+ virtual ::rtl::OUString GetAccessibleCellText(sal_Int32 _nRowPos, sal_Int32 _nColPos) const = 0;
};
// ----------------------------------------------------------------------------
diff --git a/svtools/inc/svtools/logindlg.hxx b/svtools/inc/svtools/logindlg.hxx
deleted file mode 100644
index 9cf12dd70610..000000000000
--- a/svtools/inc/svtools/logindlg.hxx
+++ /dev/null
@@ -1,118 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 _SVTOOLS_LOGINDLG_HXX_
-#define _SVTOOLS_LOGINDLG_HXX_
-
-#include "svtools/svtdllapi.h"
-#include <svtools/stdctrl.hxx>
-#ifndef _SV_BUTTON_HXX
-#include <vcl/button.hxx>
-#endif
-#include <vcl/dialog.hxx>
-#include <vcl/edit.hxx>
-#include <vcl/fixed.hxx>
-
-//============================================================================
-#define LF_NO_PATH 0x0001 // hide "path"
-#define LF_NO_USERNAME 0x0002 // hide "name"
-#define LF_NO_PASSWORD 0x0004 // hide "password"
-#define LF_NO_SAVEPASSWORD 0x0008 // hide "save password"
-#define LF_NO_ERRORTEXT 0x0010 // hide message
-#define LF_PATH_READONLY 0x0020 // "path" readonly
-#define LF_USERNAME_READONLY 0x0040 // "name" readonly
-#define LF_NO_ACCOUNT 0x0080 // hide "account"
-
-//............................................................................
-namespace svt
-{
-//............................................................................
-
-//============================================================================
-class SVT_DLLPUBLIC LoginDialog : public ModalDialog
-{
- FixedInfo aErrorInfo;
- FixedLine aErrorGB;
- FixedInfo aRequestInfo;
- FixedText aPathFT;
- Edit aPathED;
- FixedInfo aPathInfo;
- PushButton aPathBtn;
- FixedText aNameFT;
- Edit aNameED;
- FixedInfo aNameInfo;
- FixedText aPasswordFT;
- Edit aPasswordED;
- FixedText aAccountFT;
- Edit aAccountED;
- CheckBox aSavePasswdBtn;
- FixedLine aLoginGB;
- OKButton aOKBtn;
- CancelButton aCancelBtn;
- HelpButton aHelpBtn;
-
- SVT_DLLPRIVATE void HideControls_Impl( USHORT nFlags );
-
- DECL_DLLPRIVATE_LINK( OKHdl_Impl, OKButton * );
- DECL_DLLPRIVATE_LINK( PathHdl_Impl, PushButton * );
-
-public:
- LoginDialog( Window* pParent, USHORT nFlags,
- const String& rServer, const String* pRealm = NULL );
-
- String GetPath() const { return aPathED.GetText(); }
- void SetPath( const String& rNewPath )
- { aPathED.SetText( rNewPath );
- aPathInfo.SetText( rNewPath );}
- String GetName() const { return aNameED.GetText(); }
- void SetName( const String& rNewName );
- String GetPassword() const { return aPasswordED.GetText(); }
- void SetPassword( const String& rNew )
- { aPasswordED.SetText( rNew ); }
- String GetAccount() const { return aAccountED.GetText(); }
- void SetAccount( const String& rNew )
- { aAccountED.SetText( rNew ); }
- BOOL IsSavePassword() const
- { return aSavePasswdBtn.IsChecked(); }
- void SetSavePassword( BOOL bSave )
- { aSavePasswdBtn.Check( bSave ); }
- void SetSavePasswordText( const String& rTxt )
- { aSavePasswdBtn.SetText( rTxt ); }
- void SetErrorText( const String& rTxt )
- { aErrorInfo.SetText( rTxt ); }
- void SetLoginRequestText( const String& rTxt )
- { aRequestInfo.SetText( rTxt ); }
- void ClearPassword();
- void ClearAccount();
-};
-
-//............................................................................
-} // namespace svt
-//............................................................................
-
-#endif // _SVTOOLS_LOGINDLG_HXX_
-
diff --git a/svtools/inc/svtools/table/abstracttablecontrol.hxx b/svtools/inc/svtools/table/abstracttablecontrol.hxx
index 2b3951f6aaf3..9206f20ecbcb 100644
--- a/svtools/inc/svtools/table/abstracttablecontrol.hxx
+++ b/svtools/inc/svtools/table/abstracttablecontrol.hxx
@@ -116,6 +116,7 @@ namespace svt { namespace table
/** returns selection engine*/
virtual SelectionEngine* getSelEngine() = 0;
virtual void setCursorAtCurrentCell(const Point& rPoint) = 0;
+ virtual bool isTooltipActive() = 0;
virtual rtl::OUString& setTooltip(const Point& rPoint ) = 0;
virtual RowPos getCurrentRow(const Point& rPoint ) = 0;
virtual void resizeColumn(const Point& rPoint ) = 0;
diff --git a/svtools/inc/svtools/table/tablecontrol.hxx b/svtools/inc/svtools/table/tablecontrol.hxx
index 6eb7f063f9fa..f3b7ed88b565 100644
--- a/svtools/inc/svtools/table/tablecontrol.hxx
+++ b/svtools/inc/svtools/table/tablecontrol.hxx
@@ -79,6 +79,7 @@ namespace svt { namespace table
::com::sun::star::uno::Sequence< ::rtl::OUString > m_aText;
Link m_aSelectHdl;
bool m_bSelectionChanged;
+ bool m_bTooltip;
public:
::std::auto_ptr< AccessibleTableControl_Impl > m_pAccessTable;
@@ -217,12 +218,13 @@ namespace svt { namespace table
virtual sal_Bool isAccessibleAlive( ) const;
virtual void commitGridControlEvent( sal_Int16 _nEventId, const com::sun::star::uno::Any& _rNewValue, const com::sun::star::uno::Any& _rOldValue );
virtual void RemoveSelectedRow(RowPos _nRowPos);
- virtual ::rtl::OUString GetAccessibleCellText(sal_Int32 _nRowPos, sal_Int32 _nColPos);
+ virtual ::rtl::OUString GetAccessibleCellText(sal_Int32 _nRowPos, sal_Int32 _nColPos) const;
::com::sun::star::uno::Sequence< sal_Int32 >& getColumnsForTooltip();
::com::sun::star::uno::Sequence< ::rtl::OUString >& getTextForTooltip();
void setTooltip(const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aText, const ::com::sun::star::uno::Sequence< sal_Int32 >& nCols);
void clearSelection();
void selectionChanged(bool _bChanged);
+ bool isTooltip();
protected:
/// retrieves the XAccessible implementation associated with the GridControl instance
diff --git a/svtools/inc/svtools/table/tabledatawindow.hxx b/svtools/inc/svtools/table/tabledatawindow.hxx
index c9f96483d943..9a6ece489119 100644
--- a/svtools/inc/svtools/table/tabledatawindow.hxx
+++ b/svtools/inc/svtools/table/tabledatawindow.hxx
@@ -74,6 +74,11 @@ namespace svt { namespace table
virtual void CaptureMouse();
virtual void ReleaseMouse();
virtual long Notify(NotifyEvent& rNEvt);
+ virtual void SetControlBackground(const Color& rColor);
+ virtual void SetControlBackground();
+
+ void SetBackground(const Wallpaper& rColor);
+ void SetBackground();
};
//........................................................................
} } // namespace svt::table
diff --git a/svtools/inc/svtools/xwindowitem.hxx b/svtools/inc/svtools/xwindowitem.hxx
new file mode 100755
index 000000000000..eca425cf1369
--- /dev/null
+++ b/svtools/inc/svtools/xwindowitem.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * 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: chrtitem.hxx,v $
+ * $Revision: 1.9 $
+ *
+ * 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 _XWINDOWITEM_HXX_
+#define _XWINDOWITEM_HXX_
+
+
+#include "svtools/svtdllapi.h"
+
+#include <svl/poolitem.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
+
+#include <com/sun/star/awt/XWindow.hpp>
+
+class Window;
+
+//////////////////////////////////////////////////////////////////////
+
+class SVT_DLLPUBLIC XWindowItem : public SfxPoolItem
+{
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > m_xWin;
+
+ // disallow use assignment operator
+ XWindowItem & operator = ( const XWindowItem & );
+
+public:
+ TYPEINFO();
+ XWindowItem();
+ explicit XWindowItem( USHORT nWhich, Window * pWin );
+ XWindowItem( USHORT nWhich, com::sun::star::uno::Reference< com::sun::star::awt::XWindow > & rxWin );
+ XWindowItem( const XWindowItem &rItem );
+ ~XWindowItem();
+
+ virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const;
+ virtual int operator == ( const SfxPoolItem& rAttr ) const;
+
+ Window * GetWindowPtr() const { return VCLUnoHelper::GetWindow( m_xWin ); }
+ com::sun::star::uno::Reference< com::sun::star::awt::XWindow > GetXWindow() const { return m_xWin; }
+};
+
+//////////////////////////////////////////////////////////////////////
+
+#endif
+
diff --git a/svtools/inc/tabbar.hxx b/svtools/inc/tabbar.hxx
index cf89d4426726..e036f4c2f045 100644
--- a/svtools/inc/tabbar.hxx
+++ b/svtools/inc/tabbar.hxx
@@ -320,9 +320,6 @@ typedef USHORT TabBarPageBits;
// - TabBar-Types -
// ----------------
-#define TABBAR_APPEND ((USHORT)0xFFFF)
-#define TABBAR_PAGE_NOTFOUND ((USHORT)0xFFFF)
-
#define TABBAR_RENAMING_YES ((long)TRUE)
#define TABBAR_RENAMING_NO ((long)FALSE)
#define TABBAR_RENAMING_CANCEL ((long)2)
@@ -400,6 +397,9 @@ private:
DECL_DLLPRIVATE_LINK( ImplClickHdl, ImplTabButton* );
public:
+ static const sal_uInt16 APPEND;
+ static const sal_uInt16 PAGE_NOT_FOUND;
+
TabBar( Window* pParent, WinBits nWinStyle = WB_STDTABBAR );
virtual ~TabBar();
@@ -424,9 +424,14 @@ public:
void InsertPage( USHORT nPageId, const XubString& rText,
TabBarPageBits nBits = 0,
- USHORT nPos = TABBAR_APPEND );
+ USHORT nPos = TabBar::APPEND );
void RemovePage( USHORT nPageId );
void MovePage( USHORT nPageId, USHORT nNewPos );
+
+ Color GetTabBgColor( USHORT nPageId ) const;
+ void SetTabBgColor( USHORT nPageId, const Color& aTabBgColor );
+ BOOL IsDefaultTabBgColor( USHORT nPageId );
+
void Clear();
void EnablePage( USHORT nPageId, BOOL bEnable = TRUE );
@@ -453,7 +458,7 @@ public:
void SelectPage( USHORT nPageId, BOOL bSelect = TRUE );
void SelectPageRange( BOOL bSelect = FALSE,
USHORT nStartPos = 0,
- USHORT nEndPos = TABBAR_APPEND );
+ USHORT nEndPos = TabBar::APPEND );
USHORT GetSelectPage( USHORT nSelIndex = 0 ) const;
USHORT GetSelectPageCount() const;
BOOL IsPageSelected( USHORT nPageId ) const;
diff --git a/svtools/source/contnr/fileview.cxx b/svtools/source/contnr/fileview.cxx
index 843de83f7710..af19379d8b8f 100644
--- a/svtools/source/contnr/fileview.cxx
+++ b/svtools/source/contnr/fileview.cxx
@@ -54,6 +54,9 @@
#include <vcl/waitobj.hxx>
#include <com/sun/star/io/XPersist.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/ucb/XCommandInfo.hpp>
+#include <com/sun/star/beans/XPropertySetInfo.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <algorithm>
#include <memory>
@@ -100,7 +103,7 @@ using ::rtl::OUString;
DECLARE_LIST( StringList_Impl, OUString* )
-#define ROW_HEIGHT 17 // the height of a row has to be a little higher than the bitmap
+#define ROW_HEIGHT 17 // the height of a row has to be a little higher than the bitmap
#define QUICK_SEARCH_TIMEOUT 1500 // time in mSec before the quicksearch string will be reseted
namespace
@@ -210,6 +213,7 @@ private:
sal_Bool mbResizeDisabled : 1;
sal_Bool mbAutoResize : 1;
sal_Bool mbEnableDelete : 1;
+ sal_Bool mbEnableRename : 1;
void DeleteEntries();
void DoQuickSearch( const xub_Unicode& rChar );
@@ -232,6 +236,7 @@ public:
void EnableAutoResize() { mbAutoResize = sal_True; }
void EnableDelete( sal_Bool bEnable ) { mbEnableDelete = bEnable; }
+ void EnableRename( sal_Bool bEnable ) { mbEnableRename = bEnable; }
sal_Bool IsDeleteOrContextMenuEnabled() { return mbEnableDelete || IsContextMenuHandlingEnabled(); }
Reference< XCommandEnvironment > GetCommandEnvironment() const { return mxCmdEnv; }
@@ -299,11 +304,11 @@ inline const OUString& HashedEntry::GetName() const
class HashedEntryList : protected List
{// provides a list of _unique_ Entries
protected:
- inline HashedEntry* First();
- inline HashedEntry* Next();
- inline void Append( HashedEntry* pNewEntry );
+ inline HashedEntry* First();
+ inline HashedEntry* Next();
+ inline void Append( HashedEntry* pNewEntry );
public:
- virtual ~HashedEntryList();
+ virtual ~HashedEntryList();
const HashedEntry* Find( const OUString& rNameToSearchFor );
const HashedEntry* Find( const HashedEntry& rToSearchFor );
@@ -338,7 +343,7 @@ HashedEntryList::~HashedEntryList()
const HashedEntry* HashedEntryList::Find( const OUString& rRefName )
{ // simple linear search, which should be fast enough for this purpose
- HashedEntry aRef( rRefName );
+ HashedEntry aRef( rRefName );
HashedEntry* pIter = First();
while( pIter && *pIter != aRef )
pIter = Next();
@@ -419,12 +424,12 @@ class NameTranslationList : protected HashedEntryList
{ // contains a list of substitutes of strings for a given folder (as URL)
// explanation of the circumstances see in remarks for Init();
protected:
- INetURLObject maTransFile; // URL of file with translation entries
- HashedEntry maHashedURL; // for future purposes when dealing with a set of cached
- // NameTranslationLists
+ INetURLObject maTransFile; // URL of file with translation entries
+ HashedEntry maHashedURL; // for future purposes when dealing with a set of cached
+ // NameTranslationLists
private:
const String maTransFileName;
- void Init(); // reads the translation file and fills the (internal) list
+ void Init(); // reads the translation file and fills the (internal) list
public:
NameTranslationList( const INetURLObject& rBaseURL );
@@ -436,12 +441,12 @@ public:
using List::operator!=;
inline sal_Bool operator !=( const HashedEntry& rRef ) const;
- const OUString* Translate( const OUString& rName ) const;
+ const OUString* Translate( const OUString& rName ) const;
// returns NULL, if rName can't be found
- inline void Update(); // clears list and init
+ inline void Update(); // clears list and init
- inline const String& GetTransTableFileName() const;
+ inline const String& GetTransTableFileName() const;
// returns the name for the file, which contains the translation strings
};
@@ -463,7 +468,7 @@ void NameTranslationList::Init()
if( aTestContent.isDocument() )
{// ... also tests the existence of maTransFile by throwing an Exception
- const sal_Char* pSection = "TRANSLATIONNAMES";
+ const sal_Char* pSection = "TRANSLATIONNAMES";
String aFsysName( maTransFile.getFSysPath( INetURLObject::FSYS_DETECT ) );
Config aConfig( aFsysName );
@@ -475,7 +480,7 @@ void NameTranslationList::Init()
Insert( new NameTranslationEntry( aConfig.GetKeyName( nCnt ), aConfig.ReadKey( nCnt ) ) );
}
}
- catch( Exception& ) {}
+ catch( Exception const & ) {}
}
NameTranslationList::NameTranslationList( const INetURLObject& rBaseURL ):
@@ -527,7 +532,7 @@ public:
// IContentTitleTranslation
virtual sal_Bool GetTranslation( const OUString& rOriginalName, OUString& rTranslatedName ) const;
- void UpdateTranslationTable(); // reads the translation file again
+ void UpdateTranslationTable(); // reads the translation file again
void SetActualFolder( const INetURLObject& rActualFolder );
const String* GetTransTableFileName() const;
@@ -600,7 +605,7 @@ public:
void OpenFolder_Impl();
// #83004# -------
- void ReplaceTabWithString( OUString& aValue );
+ void ReplaceTabWithString( OUString& aValue );
void CreateDisplayText_Impl();
void CreateVector_Impl( const Sequence < OUString > &rList );
void SortFolderContent_Impl();
@@ -661,11 +666,13 @@ inline void SvtFileView_Impl::EnableDelete( sal_Bool bEnable )
inline sal_Bool SvtFileView_Impl::EnableNameReplacing( sal_Bool bEnable )
{
+ mpView->EnableRename( bEnable );
+
sal_Bool bRet;
if( mpView->IsDeleteOrContextMenuEnabled() )
{
DBG_ASSERT( !mbReplaceNames, "SvtFileView_Impl::EnableNameReplacing(): state should be not possible!" );
- bRet = !bEnable; // only for enabling this is an unsuccessful result
+ bRet = !bEnable; // only for enabling this is an unsuccessful result
}
else
{
@@ -744,7 +751,8 @@ ViewTabListBox_Impl::ViewTabListBox_Impl( Window* pParentWin,
mnSearchIndex ( 0 ),
mbResizeDisabled ( sal_False ),
mbAutoResize ( sal_False ),
- mbEnableDelete ( sal_True )
+ mbEnableDelete ( sal_True ),
+ mbEnableRename ( sal_True )
{
Size aBoxSize = pParentWin->GetSizePixel();
@@ -824,7 +832,7 @@ void ViewTabListBox_Impl::Resize()
mbResizeDisabled = sal_True;
Point aPos = GetPosPixel();
SetPosSizePixel( Point( 0, aBarSize.Height() ),
- Size( aBoxSize.Width(), aBoxSize.Height() - aBarSize.Height() ) );
+ Size( aBoxSize.Width(), aBoxSize.Height() - aBarSize.Height() ) );
mbResizeDisabled = sal_False;
}
}
@@ -870,20 +878,90 @@ void ViewTabListBox_Impl::KeyInput( const KeyEvent& rKEvt )
PopupMenu* ViewTabListBox_Impl::CreateContextMenu( void )
{
- PopupMenu* pRet;
- sal_Int32 nSelectedEntries = GetSelectionCount();
+ bool bEnableDelete = mbEnableDelete;
+ bool bEnableRename = mbEnableRename;
+
+ if ( bEnableDelete || bEnableRename )
+ {
+ sal_Int32 nSelectedEntries = GetSelectionCount();
+ bEnableDelete &= nSelectedEntries > 0;
+ bEnableRename &= nSelectedEntries == 1;
+ }
+
+ if ( bEnableDelete || bEnableRename )
+ {
+ SvLBoxEntry* pEntry = FirstSelected();
+ while ( pEntry )
+ {
+ ::ucbhelper::Content aCnt;
+ try
+ {
+ OUString aURL( static_cast< SvtContentEntry * >(
+ pEntry->GetUserData() )->maURL );
+ aCnt = ::ucbhelper::Content( aURL, mxCmdEnv );
+ }
+ catch( Exception const & )
+ {
+ bEnableDelete = bEnableRename = false;
+ }
+
+ if ( bEnableDelete )
+ {
+ try
+ {
+ Reference< XCommandInfo > aCommands = aCnt.getCommands();
+ if ( aCommands.is() )
+ bEnableDelete
+ = aCommands->hasCommandByName(
+ OUString::createFromAscii( "delete" ) );
+ else
+ bEnableDelete = false;
+ }
+ catch( Exception const & )
+ {
+ bEnableDelete = false;
+ }
+ }
+
+ if ( bEnableRename )
+ {
+ try
+ {
+ Reference< XPropertySetInfo > aProps = aCnt.getProperties();
+ if ( aProps.is() )
+ {
+ Property aProp
+ = aProps->getPropertyByName(
+ OUString::createFromAscii( "Title" ) );
+ bEnableRename
+ = !( aProp.Attributes & PropertyAttribute::READONLY );
+ }
+ else
+ bEnableRename = false;
+ }
+ catch( Exception const & )
+ {
+ bEnableRename = false;
+ }
+ }
+
+ pEntry = ( bEnableDelete || bEnableRename )
+ ? NextSelected( pEntry )
+ : 0;
+ }
+ }
- if ( nSelectedEntries )
+ if ( bEnableDelete || bEnableRename )
{
- pRet = new PopupMenu( SvtResId( RID_FILEVIEW_CONTEXTMENU ) );
- pRet->EnableItem( MID_FILEVIEW_DELETE, 0 < nSelectedEntries );
- pRet->EnableItem( MID_FILEVIEW_RENAME, 1 == nSelectedEntries );
+ PopupMenu * pRet
+ = new PopupMenu( SvtResId( RID_FILEVIEW_CONTEXTMENU ) );
+ pRet->EnableItem( MID_FILEVIEW_DELETE, bEnableDelete );
+ pRet->EnableItem( MID_FILEVIEW_RENAME, bEnableRename );
pRet->RemoveDisabledEntries( sal_True, sal_True );
+ return pRet;
}
- else
- pRet = NULL;
- return pRet;
+ return NULL;
}
// -----------------------------------------------------------------------
@@ -928,12 +1006,31 @@ void ViewTabListBox_Impl::DeleteEntries()
aURL = ( (SvtContentEntry*)pCurEntry->GetUserData() )->maURL;
if ( !aURL.Len() )
- return;
+ continue;
+
+ bool canDelete = true;
+ try
+ {
+ ::ucbhelper::Content aCnt( aURL, mxCmdEnv );
+ Reference< XCommandInfo > aCommands = aCnt.getCommands();
+ if ( aCommands.is() )
+ canDelete
+ = aCommands->hasCommandByName(
+ OUString::createFromAscii( "delete" ) );
+ else
+ canDelete = false;
+ }
+ catch( Exception const & )
+ {
+ canDelete = false;
+ }
- INetURLObject aObj( aURL );
+ if (!canDelete)
+ continue; // process next entry
if ( eResult != svtools::QUERYDELETE_ALL )
{
+ INetURLObject aObj( aURL );
svtools::QueryDeleteDlg_Impl aDlg( NULL, aObj.GetName( INetURLObject::DECODE_WITH_CHARSET ) );
if ( sDialogPosition.Len() )
aDlg.SetWindowState( sDialogPosition );
@@ -979,22 +1076,44 @@ BOOL ViewTabListBox_Impl::EditedEntry( SvLBoxEntry* pEntry,
try
{
+ OUString aPropName = OUString::createFromAscii( "Title" );
+ bool canRename = true;
::ucbhelper::Content aContent( aURL, mxCmdEnv );
- OUString aPropName = OUString::createFromAscii( "Title" );
- Any aValue;
- aValue <<= OUString( rNewText );
- aContent.setPropertyValue( aPropName, aValue );
- mpParent->EntryRenamed( aURL, rNewText );
+ try
+ {
+ Reference< XPropertySetInfo > aProps = aContent.getProperties();
+ if ( aProps.is() )
+ {
+ Property aProp = aProps->getPropertyByName( aPropName );
+ canRename = !( aProp.Attributes & PropertyAttribute::READONLY );
+ }
+ else
+ {
+ canRename = false;
+ }
+ }
+ catch ( Exception const & )
+ {
+ canRename = false;
+ }
+
+ if ( canRename )
+ {
+ Any aValue;
+ aValue <<= OUString( rNewText );
+ aContent.setPropertyValue( aPropName, aValue );
+ mpParent->EntryRenamed( aURL, rNewText );
- pData->maURL = aURL;
- pEntry->SetUserData( pData );
+ pData->maURL = aURL;
+ pEntry->SetUserData( pData );
- bRet = TRUE;
+ bRet = TRUE;
+ }
+ }
+ catch( Exception const & )
+ {
}
- catch( ::com::sun::star::ucb::ContentCreationException ) {}
- catch( ::com::sun::star::ucb::CommandAbortedException ) {}
- catch( ::com::sun::star::uno::Exception ) {}
return bRet;
}
@@ -1095,12 +1214,12 @@ sal_Bool ViewTabListBox_Impl::Kill( const OUString& rContent )
::ucbhelper::Content aCnt( rContent, mxCmdEnv );
aCnt.executeCommand( OUString::createFromAscii( "delete" ), makeAny( sal_Bool( sal_True ) ) );
}
- catch( ::com::sun::star::ucb::CommandAbortedException& )
+ catch( ::com::sun::star::ucb::CommandAbortedException const & )
{
DBG_WARNING( "CommandAbortedException" );
bRet = sal_False;
}
- catch( ::com::sun::star::uno::Exception& )
+ catch( Exception const & )
{
DBG_WARNING( "Any other exception" );
bRet = sal_False;
@@ -1314,7 +1433,7 @@ sal_Bool SvtFileView::GetParentURL( String& rParentURL ) const
}
}
}
- catch( ::com::sun::star::uno::Exception )
+ catch( Exception const & )
{
// perhaps an unkown url protocol (e.g. "private:newdoc")
}
@@ -1366,7 +1485,7 @@ sal_Bool SvtFileView::Initialize( const ::com::sun::star::uno::Reference< ::com:
mpImp->FilterFolderContent_Impl( rFilter );
- mpImp->SortFolderContent_Impl(); // possibly not necessary!!!!!!!!!!
+ mpImp->SortFolderContent_Impl(); // possibly not necessary!!!!!!!!!!
mpImp->CreateDisplayText_Impl();
mpImp->OpenFolder_Impl();
@@ -1999,7 +2118,7 @@ void SvtFileView_Impl::FilterFolderContent_Impl( const OUString &rFilter )
{
// normalize the content title (we always match case-insensitive)
// 91872 - 11.09.2001 - frank.schoenheit@sun.com
- sCompareString = (*aContentLoop)->GetFileName(); // filter works on file name, not on title!
+ sCompareString = (*aContentLoop)->GetFileName(); // filter works on file name, not on title!
sal_Bool bDelete;
if( bHideTransFile && sCompareString == sHideEntry )
@@ -2643,12 +2762,12 @@ QueryDeleteDlg_Impl::QueryDeleteDlg_Impl
ModalDialog( pParent, SvtResId( DLG_SVT_QUERYDELETE ) ),
- _aEntryLabel ( this, SvtResId( TXT_ENTRY ) ),
- _aEntry ( this, SvtResId( TXT_ENTRYNAME ) ),
- _aQueryMsg ( this, SvtResId( TXT_QUERYMSG ) ),
- _aYesButton ( this, SvtResId( BTN_YES ) ),
- _aAllButton ( this, SvtResId( BTN_ALL ) ),
- _aNoButton ( this, SvtResId( BTN_NO ) ),
+ _aEntryLabel ( this, SvtResId( TXT_ENTRY ) ),
+ _aEntry ( this, SvtResId( TXT_ENTRYNAME ) ),
+ _aQueryMsg ( this, SvtResId( TXT_QUERYMSG ) ),
+ _aYesButton ( this, SvtResId( BTN_YES ) ),
+ _aAllButton ( this, SvtResId( BTN_ALL ) ),
+ _aNoButton ( this, SvtResId( BTN_NO ) ),
_aCancelButton( this, SvtResId( BTN_CANCEL ) )
{
@@ -2671,12 +2790,6 @@ QueryDeleteDlg_Impl::QueryDeleteDlg_Impl
// -----------------------------------------------------------------------
IMPL_STATIC_LINK( QueryDeleteDlg_Impl, ClickLink, PushButton*, pBtn )
-
-/* [Beschreibung]
-
- Die Methode wertet das Resultat der Abfrage aus.
-*/
-
{
if ( pBtn == &pThis->_aYesButton )
pThis->_eResult = QUERYDELETE_YES;
diff --git a/svtools/source/control/tabbar.cxx b/svtools/source/control/tabbar.cxx
index c4896ba8b812..2ad81da40716 100644..100755
--- a/svtools/source/control/tabbar.cxx
+++ b/svtools/source/control/tabbar.cxx
@@ -39,6 +39,8 @@
#include <vcl/edit.hxx>
#include "svtaccessiblefactory.hxx"
+#include <limits>
+
// =======================================================================
#define TABBAR_OFFSET_X 7
@@ -62,6 +64,10 @@ struct ImplTabBarItem
BOOL mbShort;
BOOL mbSelect;
BOOL mbEnable;
+ Color maTabBgColor;
+ bool IsDefaultTabBgColor() const { return maTabBgColor == Color(COL_AUTO) ? TRUE : FALSE; };
+ Color maTabTextColor;
+ bool IsDefaultTabTextColor() const { return maTabTextColor == Color(COL_AUTO) ? TRUE : FALSE; };
ImplTabBarItem( USHORT nItemId, const XubString& rText,
TabBarPageBits nPageBits ) :
@@ -74,6 +80,8 @@ struct ImplTabBarItem
mbShort = FALSE;
mbSelect = FALSE;
mbEnable = TRUE;
+ maTabBgColor = Color( COL_AUTO );
+ maTabTextColor = Color( COL_AUTO );
}
};
@@ -348,6 +356,9 @@ struct TabBar_Impl
// =======================================================================
+const sal_uInt16 TabBar::APPEND = ::std::numeric_limits<sal_uInt16>::max();
+const sal_uInt16 TabBar::PAGE_NOT_FOUND = ::std::numeric_limits<sal_uInt16>::max();
+
void TabBar::ImplInit( WinBits nWinStyle )
{
mpItemList = new ImplTabBarList;
@@ -1046,7 +1057,8 @@ void TabBar::Paint( const Rectangle& )
// Font selektieren
Font aFont = GetFont();
Font aLightFont = aFont;
- aLightFont.SetWeight( WEIGHT_LIGHT );
+ //aLightFont.SetWeight( WEIGHT_LIGHT ); //TODO Make font weight light on custom color only?
+ aLightFont.SetWeight( WEIGHT_NORMAL );
// #i36013# exclude push buttons from painting area
Rectangle aClipRect( Point( mnOffX, 0 ), Point( mnLastOffX, GetOutputHeightPixel() - 1 ) );
@@ -1120,15 +1132,23 @@ void TabBar::Paint( const Rectangle& )
SetFont( aLightFont );
// Je nach Status die richtige FillInBrush setzen
+ // Set the correct FillInBrush depending upon status
if ( pItem->mbSelect || (pItem->mnId == mnCurPageId) )
{
+ // Currently selected Tab
SetFillColor( aSelectColor );
SetTextColor( aSelectTextColor );
}
else
{
- SetFillColor( aFaceColor );
- SetTextColor( aFaceTextColor );
+ if ( !pItem->IsDefaultTabBgColor() && !rStyleSettings.GetHighContrastMode() )
+ {
+ SetFillColor( pItem->maTabBgColor );
+ SetTextColor( pItem->maTabTextColor );
+ } else {
+ SetFillColor( aFaceColor );
+ SetTextColor( aFaceTextColor );
+ }
}
// Muss Font Kursiv geschaltet werden
@@ -1160,21 +1180,38 @@ void TabBar::Paint( const Rectangle& )
long nTextHeight = GetTextHeight();
Point aTxtPos( aRect.Left()+(aRectSize.Width()-nTextWidth)/2,
(aRectSize.Height()-nTextHeight)/2 );
- if ( !pItem->mbEnable )
- DrawCtrlText( aTxtPos, aText, 0, STRING_LEN, (TEXT_DRAW_DISABLE | TEXT_DRAW_MNEMONIC) );
- else
- DrawText( aTxtPos, aText );
-
+ if ( pItem->IsDefaultTabBgColor() || (!pItem->mbSelect) )
+ {
+ if ( !pItem->mbEnable )
+ DrawCtrlText( aTxtPos, aText, 0, STRING_LEN, (TEXT_DRAW_DISABLE | TEXT_DRAW_MNEMONIC) );
+ else
+ DrawText( aTxtPos, aText );
+ }
// Jetzt im Inhalt den 3D-Effekt ausgeben
aPos0.X()++;
aPos1.X()++;
aPos2.X()--;
aPos3.X()--;
- SetLineColor( rStyleSettings.GetLightColor() );
+
+ // If this is the current tab, draw the left inner shadow the default color,
+ // otherwise make it the same as the custom background color
+ if ( pItem->mbSelect || (pItem->mnId == mnCurPageId) ) {
+ SetLineColor( rStyleSettings.GetLightColor() );
+ } else {
+ if ( !pItem->IsDefaultTabBgColor() && ! rStyleSettings.GetHighContrastMode() )
+ {
+ SetLineColor( pItem->maTabBgColor );
+ } else {
+ SetLineColor( rStyleSettings.GetLightColor() );
+ }
+ }
+ // Draw the left side of the tab
DrawLine( aPos0, aPos1 );
if ( !pItem->mbSelect && (pItem->mnId != mnCurPageId) )
{
+ // Draw the top inner shadow
+ // ToDo: Change from this static color to tab custom bg color
DrawLine( Point( aPos0.X(), aPos0.Y()+1 ),
Point( aPos3.X(), aPos3.Y()+1 ) );
}
@@ -1184,8 +1221,27 @@ void TabBar::Paint( const Rectangle& )
aPos1.X()--;
aPos1.Y()--;
aPos2.Y()--;
+ if ( !pItem->IsDefaultTabBgColor() && ( pItem->mbSelect || (pItem->mnId == mnCurPageId) ) )
+ {
+ SetLineColor( pItem->maTabBgColor );
+ DrawLine( Point(aPos1.X()-1, aPos1.Y()-1), Point(aPos2.X(), aPos2.Y()-1) );
+ }
DrawLine( aPos1, aPos2 );
+ // draw a small 2px sliver of the original background color at the bottom of the selected tab
+
+ if ( !pItem->IsDefaultTabBgColor() )
+ {
+ if ( pItem->mbSelect || (pItem->mnId == mnCurPageId) || rStyleSettings.GetHighContrastMode() ) {
+ SetLineColor( pItem->maTabBgColor );
+ DrawLine( Point(aPos1.X()-1, aPos1.Y()-1), Point(aPos2.X(), aPos2.Y()-1) );
+ if ( !pItem->mbEnable )
+ DrawCtrlText( aTxtPos, aText, 0, STRING_LEN, (TEXT_DRAW_DISABLE | TEXT_DRAW_MNEMONIC) );
+ else
+ DrawText( aTxtPos, aText );
+ }
+ }
+
// Da etwas uebermalt werden konnte, muessen wir die Polygon-
// umrandung nocheinmal ausgeben
SetLineColor( rStyleSettings.GetDarkShadowColor() );
@@ -1540,7 +1596,7 @@ void TabBar::InsertPage( USHORT nPageId, const XubString& rText,
TabBarPageBits nBits, USHORT nPos )
{
DBG_ASSERT( nPageId, "TabBar::InsertPage(): PageId == 0" );
- DBG_ASSERT( GetPagePos( nPageId ) == TABBAR_PAGE_NOTFOUND,
+ DBG_ASSERT( GetPagePos( nPageId ) == PAGE_NOT_FOUND,
"TabBar::InsertPage(): PageId already exists" );
DBG_ASSERT( nBits <= TPB_SPECIAL, "TabBar::InsertPage(): nBits is wrong" );
@@ -1562,12 +1618,47 @@ void TabBar::InsertPage( USHORT nPageId, const XubString& rText,
// -----------------------------------------------------------------------
+Color TabBar::GetTabBgColor( USHORT nPageId ) const
+{
+ USHORT nPos = GetPagePos( nPageId );
+
+ if ( nPos != PAGE_NOT_FOUND )
+ return mpItemList->GetObject( nPos )->maTabBgColor;
+ else
+ return Color( COL_AUTO );
+}
+
+void TabBar::SetTabBgColor( USHORT nPageId, const Color& aTabBgColor )
+{
+ USHORT nPos = GetPagePos( nPageId );
+ ImplTabBarItem* pItem;
+ if ( nPos != PAGE_NOT_FOUND )
+ {
+ pItem = mpItemList->GetObject( nPos );
+ if ( aTabBgColor != Color( COL_AUTO ) )
+ {
+ pItem->maTabBgColor = aTabBgColor;
+ if ( aTabBgColor.GetLuminance() <= 128 ) //Do not use aTabBgColor.IsDark(), because that threshold is way too low...
+ pItem->maTabTextColor = Color( COL_WHITE );
+ else
+ pItem->maTabTextColor = Color( COL_BLACK );
+ }
+ else
+ {
+ pItem->maTabBgColor = Color( COL_AUTO );
+ pItem->maTabTextColor = Color( COL_AUTO );
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
void TabBar::RemovePage( USHORT nPageId )
{
USHORT nPos = GetPagePos( nPageId );
// Existiert Item
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
if ( mnCurPageId == nPageId )
mnCurPageId = 0;
@@ -1602,7 +1693,7 @@ void TabBar::MovePage( USHORT nPageId, USHORT nNewPos )
return;
// Existiert Item
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
// TabBar-Item in der Liste verschieben
ImplTabBarItem* pItem = mpItemList->Remove( nPos );
@@ -1640,7 +1731,7 @@ void TabBar::Clear()
if ( IsReallyVisible() && IsUpdateMode() )
Invalidate();
- CallEventListeners( VCLEVENT_TABBAR_PAGEREMOVED, (void*) TABBAR_PAGE_NOTFOUND );
+ CallEventListeners( VCLEVENT_TABBAR_PAGEREMOVED, (void*) PAGE_NOT_FOUND );
}
// -----------------------------------------------------------------------
@@ -1649,7 +1740,7 @@ void TabBar::EnablePage( USHORT nPageId, BOOL bEnable )
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
@@ -1672,7 +1763,7 @@ BOOL TabBar::IsPageEnabled( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
return mpItemList->GetObject( nPos )->mbEnable;
else
return FALSE;
@@ -1684,7 +1775,7 @@ void TabBar::SetPageBits( USHORT nPageId, TabBarPageBits nBits )
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
@@ -1705,7 +1796,7 @@ TabBarPageBits TabBar::GetPageBits( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
return mpItemList->GetObject( nPos )->mnBits;
else
return FALSE;
@@ -1742,7 +1833,7 @@ USHORT TabBar::GetPagePos( USHORT nPageId ) const
pItem = mpItemList->Next();
}
- return TABBAR_PAGE_NOTFOUND;
+ return PAGE_NOT_FOUND;
}
// -----------------------------------------------------------------------
@@ -1767,7 +1858,7 @@ Rectangle TabBar::GetPageRect( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
return mpItemList->GetObject( nPos )->maRect;
else
return Rectangle();
@@ -1780,7 +1871,7 @@ void TabBar::SetCurPageId( USHORT nPageId )
USHORT nPos = GetPagePos( nPageId );
// Wenn Item nicht existiert, dann nichts machen
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
// Wenn sich aktuelle Page nicht geaendert hat, dann muessen wir
// jetzt nichts mehr machen
@@ -1872,7 +1963,7 @@ void TabBar::MakeVisible( USHORT nPageId )
USHORT nPos = GetPagePos( nPageId );
// Wenn Item nicht existiert, dann nichts machen
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
if ( nPos < mnFirstPos )
SetFirstPageId( nPageId );
@@ -1921,7 +2012,7 @@ void TabBar::SetFirstPageId( USHORT nPageId )
USHORT nPos = GetPagePos( nPageId );
// Wenn Item nicht existiert, dann FALSE zurueckgeben
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
if ( nPos != mnFirstPos )
{
@@ -1955,7 +2046,7 @@ void TabBar::SelectPage( USHORT nPageId, BOOL bSelect )
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
@@ -2036,7 +2127,7 @@ USHORT TabBar::GetSelectPageCount() const
BOOL TabBar::IsPageSelected( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
return mpItemList->GetObject( nPos )->mbSelect;
else
return FALSE;
@@ -2047,7 +2138,7 @@ BOOL TabBar::IsPageSelected( USHORT nPageId ) const
BOOL TabBar::StartEditMode( USHORT nPageId )
{
USHORT nPos = GetPagePos( nPageId );
- if ( mpEdit || (nPos == TABBAR_PAGE_NOTFOUND) || (mnLastOffX < 8) )
+ if ( mpEdit || (nPos == PAGE_NOT_FOUND) || (mnLastOffX < 8) )
return FALSE;
mnEditId = nPageId;
@@ -2268,7 +2359,7 @@ void TabBar::SetSelectTextColor( const Color& rColor )
void TabBar::SetPageText( USHORT nPageId, const XubString& rText )
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
mpItemList->GetObject( nPos )->maText = rText;
mbSizeFormat = TRUE;
@@ -2286,7 +2377,7 @@ void TabBar::SetPageText( USHORT nPageId, const XubString& rText )
XubString TabBar::GetPageText( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
return mpItemList->GetObject( nPos )->maText;
else
return XubString();
@@ -2297,7 +2388,7 @@ XubString TabBar::GetPageText( USHORT nPageId ) const
void TabBar::SetHelpText( USHORT nPageId, const XubString& rText )
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
mpItemList->GetObject( nPos )->maHelpText = rText;
}
@@ -2306,7 +2397,7 @@ void TabBar::SetHelpText( USHORT nPageId, const XubString& rText )
XubString TabBar::GetHelpText( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
{
ImplTabBarItem* pItem = mpItemList->GetObject( nPos );
if ( !pItem->maHelpText.Len() && pItem->mnHelpId )
@@ -2327,7 +2418,7 @@ XubString TabBar::GetHelpText( USHORT nPageId ) const
void TabBar::SetHelpId( USHORT nPageId, ULONG nHelpId )
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
mpItemList->GetObject( nPos )->mnHelpId = nHelpId;
}
@@ -2336,7 +2427,7 @@ void TabBar::SetHelpId( USHORT nPageId, ULONG nHelpId )
ULONG TabBar::GetHelpId( USHORT nPageId ) const
{
USHORT nPos = GetPagePos( nPageId );
- if ( nPos != TABBAR_PAGE_NOTFOUND )
+ if ( nPos != PAGE_NOT_FOUND )
return mpItemList->GetObject( nPos )->mnHelpId;
else
return 0;
@@ -2483,9 +2574,12 @@ USHORT TabBar::ShowDropPos( const Point& rPos )
nX--;
else
nX++;
+ if ( !pItem->IsDefaultTabBgColor() && !pItem->mbSelect)
+ SetLineColor( pItem->maTabTextColor );
DrawLine( Point( nX, nY ), Point( nX, nY ) );
DrawLine( Point( nX+1, nY-1 ), Point( nX+1, nY+1 ) );
DrawLine( Point( nX+2, nY-2 ), Point( nX+2, nY+2 ) );
+ SetLineColor( aBlackColor );
}
if ( (mnDropPos > 0) && (mnDropPos < nItemCount+1) )
{
@@ -2493,6 +2587,8 @@ USHORT TabBar::ShowDropPos( const Point& rPos )
nX = pItem->maRect.Right()-TABBAR_OFFSET_X;
if ( mnDropPos == nCurPos )
nX++;
+ if ( !pItem->IsDefaultTabBgColor() && !pItem->mbSelect)
+ SetLineColor( pItem->maTabTextColor );
DrawLine( Point( nX, nY ), Point( nX, nY ) );
DrawLine( Point( nX-1, nY-1 ), Point( nX-1, nY+1 ) );
DrawLine( Point( nX-2, nY-2 ), Point( nX-2, nY+2 ) );
diff --git a/svtools/source/control/toolbarmenu.cxx b/svtools/source/control/toolbarmenu.cxx
index f07ebd7fe8cd..fa393da3d5a8 100644
--- a/svtools/source/control/toolbarmenu.cxx
+++ b/svtools/source/control/toolbarmenu.cxx
@@ -481,6 +481,9 @@ void ToolbarMenu::implInit(const Reference< XFrame >& rFrame)
{
mpImpl = new ToolbarMenu_Impl( *this, rFrame );
+ const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
+ SetControlBackground( rStyleSettings.GetMenuColor() );
+
initWindow();
Window* pWindow = GetTopMostParentSystemWindow( this );
@@ -638,8 +641,6 @@ void ToolbarMenu::initWindow()
{
const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
- SetControlBackground( GetSettings().GetStyleSettings().GetFaceGradientColor() );
-
SetPointFont( rStyleSettings.GetMenuFont() );
SetBackground( Wallpaper( GetControlBackground() ) );
SetTextColor( rStyleSettings.GetMenuTextColor() );
diff --git a/svtools/source/dialogs/logindlg.cxx b/svtools/source/dialogs/logindlg.cxx
deleted file mode 100644
index 036d5d71a4cf..000000000000
--- a/svtools/source/dialogs/logindlg.cxx
+++ /dev/null
@@ -1,312 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_svtools.hxx"
-#include <filedlg.hxx>
-#include <vcl/msgbox.hxx>
-#include <svtools/logindlg.hxx>
-
-#ifndef _SVTOOLS_LOGINDLG_HRC_
-#include "logindlg.hrc"
-#endif
-#ifndef _SVTOOLS_HRC
-#include <svtools/svtools.hrc>
-#endif
-#include <svtools/svtdata.hxx>
-
-#ifdef UNX
-#include <limits.h>
-#define _MAX_PATH PATH_MAX
-#endif
-
-// LoginDialog -------------------------------------------------------
-
-//............................................................................
-namespace svt
-{
-//............................................................................
-
-void LoginDialog::HideControls_Impl( USHORT nFlags )
-{
- FASTBOOL bPathHide = FALSE;
- FASTBOOL bErrorHide = FALSE;
- FASTBOOL bAccountHide = FALSE;
-
- if ( ( nFlags & LF_NO_PATH ) == LF_NO_PATH )
- {
- aPathFT.Hide();
- aPathED.Hide();
- aPathBtn.Hide();
- bPathHide = TRUE;
- }
- else if ( ( nFlags & LF_PATH_READONLY ) == LF_PATH_READONLY )
- {
- aPathED.Hide();
- aPathInfo.Show();
- aPathBtn.Hide();
- }
-
- if ( ( nFlags & LF_NO_USERNAME ) == LF_NO_USERNAME )
- {
- aNameFT.Hide();
- aNameED.Hide();
- }
- else if ( ( nFlags & LF_USERNAME_READONLY ) == LF_USERNAME_READONLY )
- {
- aNameED.Hide();
- aNameInfo.Show();
- }
-
- if ( ( nFlags & LF_NO_PASSWORD ) == LF_NO_PASSWORD )
- {
- aPasswordFT.Hide();
- aPasswordED.Hide();
- }
-
- if ( ( nFlags & LF_NO_SAVEPASSWORD ) == LF_NO_SAVEPASSWORD )
- aSavePasswdBtn.Hide();
-
- if ( ( nFlags & LF_NO_ERRORTEXT ) == LF_NO_ERRORTEXT )
- {
- aErrorInfo.Hide();
- aErrorGB.Hide();
- bErrorHide = TRUE;
- }
-
- if ( ( nFlags & LF_NO_ACCOUNT ) == LF_NO_ACCOUNT )
- {
- aAccountFT.Hide();
- aAccountED.Hide();
- bAccountHide = TRUE;
- }
-
- if ( bErrorHide )
- {
- long nOffset = aLoginGB.GetPosPixel().Y() -
- aErrorGB.GetPosPixel().Y();
- Point aNewPnt = aRequestInfo.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aRequestInfo.SetPosPixel( aNewPnt );
- aNewPnt = aPathFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathFT.SetPosPixel( aNewPnt );
- aNewPnt = aPathED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathED.SetPosPixel( aNewPnt );
- aNewPnt = aPathInfo.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathInfo.SetPosPixel( aNewPnt );
- aNewPnt = aPathBtn.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathBtn.SetPosPixel( aNewPnt );
- aNewPnt = aNameFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aNameFT.SetPosPixel( aNewPnt );
- aNewPnt = aNameED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aNameED.SetPosPixel( aNewPnt );
- aNewPnt = aNameInfo.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aNameInfo.SetPosPixel( aNewPnt );
- aNewPnt = aPasswordFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPasswordFT.SetPosPixel( aNewPnt );
- aNewPnt = aPasswordED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPasswordED.SetPosPixel( aNewPnt );
- aNewPnt = aAccountFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aAccountFT.SetPosPixel( aNewPnt );
- aNewPnt = aAccountED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aAccountED.SetPosPixel( aNewPnt );
- aNewPnt = aSavePasswdBtn.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aSavePasswdBtn.SetPosPixel( aNewPnt );
- aNewPnt = aLoginGB.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aLoginGB.SetPosPixel( aNewPnt );
- Size aNewSiz = GetSizePixel();
- aNewSiz.Height() -= nOffset;
- SetSizePixel( aNewSiz );
- }
-
- if ( bPathHide )
- {
- long nOffset = aNameED.GetPosPixel().Y() -
- aPathED.GetPosPixel().Y();
-
- Point aTmpPnt1 = aNameFT.GetPosPixel();
- Point aTmpPnt2 = aPasswordFT.GetPosPixel();
- aNameFT.SetPosPixel( aPathFT.GetPosPixel() );
- aPasswordFT.SetPosPixel( aTmpPnt1 );
- aAccountFT.SetPosPixel( aTmpPnt2 );
- aTmpPnt1 = aNameED.GetPosPixel();
- aTmpPnt2 = aPasswordED.GetPosPixel();
- aNameED.SetPosPixel( aPathED.GetPosPixel() );
- aPasswordED.SetPosPixel( aTmpPnt1 );
- aAccountED.SetPosPixel( aTmpPnt2 );
- aNameInfo.SetPosPixel( aPathInfo.GetPosPixel() );
- aTmpPnt1 = aSavePasswdBtn.GetPosPixel();
- aTmpPnt1.Y() -= nOffset;
- aSavePasswdBtn.SetPosPixel( aTmpPnt1 );
- Size aNewSz = GetSizePixel();
- aNewSz.Height() -= nOffset;
- SetSizePixel( aNewSz );
- }
-
- if ( bAccountHide )
- {
- long nOffset = aAccountED.GetPosPixel().Y() - aPasswordED.GetPosPixel().Y();
-
- Point aTmpPnt = aSavePasswdBtn.GetPosPixel();
- aTmpPnt.Y() -= nOffset;
- aSavePasswdBtn.SetPosPixel( aTmpPnt );
- Size aNewSz = GetSizePixel();
- aNewSz.Height() -= nOffset;
- SetSizePixel( aNewSz );
- }
-};
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( LoginDialog, OKHdl_Impl, OKButton *, EMPTYARG )
-{
- // trim the strings
- aNameED.SetText( aNameED.GetText().EraseLeadingChars().
- EraseTrailingChars() );
- aPasswordED.SetText( aPasswordED.GetText().EraseLeadingChars().
- EraseTrailingChars() );
- EndDialog( RET_OK );
- return 1;
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( LoginDialog, PathHdl_Impl, PushButton *, EMPTYARG )
-{
- PathDialog* pDlg = new PathDialog( this, WB_3DLOOK );
-// DirEntry aEntry;
-// aEntry.ToAbs();
-// pDlg->SetPath( aEntry.GetFull() );
-
- if ( pDlg->Execute() == RET_OK )
- aPathED.SetText( pDlg->GetPath() );
-
- delete pDlg;
- return 1;
-}
-
-// -----------------------------------------------------------------------
-
-LoginDialog::LoginDialog
-(
- Window* pParent,
- USHORT nFlags,
- const String& rServer,
- const String* pRealm
-) :
-
- ModalDialog( pParent, SvtResId( DLG_LOGIN ) ),
-
- aErrorInfo ( this, SvtResId( INFO_LOGIN_ERROR ) ),
- aErrorGB ( this, SvtResId( GB_LOGIN_ERROR ) ),
- aRequestInfo ( this, SvtResId( INFO_LOGIN_REQUEST ) ),
- aPathFT ( this, SvtResId( FT_LOGIN_PATH ) ),
- aPathED ( this, SvtResId( ED_LOGIN_PATH ) ),
- aPathInfo ( this, SvtResId( INFO_LOGIN_PATH ) ),
- aPathBtn ( this, SvtResId( BTN_LOGIN_PATH ) ),
- aNameFT ( this, SvtResId( FT_LOGIN_USERNAME ) ),
- aNameED ( this, SvtResId( ED_LOGIN_USERNAME ) ),
- aNameInfo ( this, SvtResId( INFO_LOGIN_USERNAME ) ),
- aPasswordFT ( this, SvtResId( FT_LOGIN_PASSWORD ) ),
- aPasswordED ( this, SvtResId( ED_LOGIN_PASSWORD ) ),
- aAccountFT ( this, SvtResId( FT_LOGIN_ACCOUNT ) ),
- aAccountED ( this, SvtResId( ED_LOGIN_ACCOUNT ) ),
- aSavePasswdBtn ( this, SvtResId( CB_LOGIN_SAVEPASSWORD ) ),
- aLoginGB ( this, SvtResId( GB_LOGIN_LOGIN ) ),
- aOKBtn ( this, SvtResId( BTN_LOGIN_OK ) ),
- aCancelBtn ( this, SvtResId( BTN_LOGIN_CANCEL ) ),
- aHelpBtn ( this, SvtResId( BTN_LOGIN_HELP ) )
-
-{
- // Einlog-Ort eintragen
- String aServer;
-
- if ( ( ( nFlags & LF_NO_ACCOUNT ) == LF_NO_ACCOUNT ) && pRealm && pRealm->Len() )
- {
- aServer = *pRealm;
- ( ( aServer += ' ' ) += String( SvtResId( STR_LOGIN_AT ) ) ) += ' ';
- }
- aServer += rServer;
- String aTxt = aRequestInfo.GetText();
- aTxt.SearchAndReplaceAscii( "%1", aServer );
- aRequestInfo.SetText( aTxt );
-
- FreeResource();
-
- aPathED.SetMaxTextLen( _MAX_PATH );
- aNameED.SetMaxTextLen( _MAX_PATH );
-
- aOKBtn.SetClickHdl( LINK( this, LoginDialog, OKHdl_Impl ) );
- aPathBtn.SetClickHdl( LINK( this, LoginDialog, PathHdl_Impl ) );
-
- HideControls_Impl( nFlags );
-};
-
-// -----------------------------------------------------------------------
-
-void LoginDialog::SetName( const String& rNewName )
-{
- aNameED.SetText( rNewName );
- aNameInfo.SetText( rNewName );
-}
-
-// -----------------------------------------------------------------------
-
-void LoginDialog::ClearPassword()
-{
- aPasswordED.SetText( String() );
-
- if ( 0 == aNameED.GetText().Len() )
- aNameED.GrabFocus();
- else
- aPasswordED.GrabFocus();
-};
-
-// -----------------------------------------------------------------------
-
-void LoginDialog::ClearAccount()
-{
- aAccountED.SetText( String() );
- aAccountED.GrabFocus();
-};
-
-//............................................................................
-} // namespace svt
-//............................................................................
diff --git a/svtools/source/dialogs/logindlg.src b/svtools/source/dialogs/logindlg.src
deleted file mode 100644
index f6e3565d8cd9..000000000000
--- a/svtools/source/dialogs/logindlg.src
+++ /dev/null
@@ -1,200 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 _SVTOOLS_HRC
-#include <svtools/svtools.hrc>
-#endif
-
-#ifndef _SVTOOLS_LOGINDLG_HRC_
-#include "logindlg.hrc"
-#endif
-
-ModalDialog DLG_LOGIN
-{
-// HelpId = HID_DLG_LOGIN ;
- Border = TRUE ;
- Moveable = TRUE ;
- OutputSize = TRUE ;
- SVLook = TRUE ;
- Size = MAP_APPFONT ( 265 , 158 ) ;
- FixedText INFO_LOGIN_ERROR
- {
- Pos = MAP_APPFONT ( 12 , 14 ) ;
- Size = MAP_APPFONT ( 185 , 18 ) ;
- WordBreak = TRUE ;
- };
- FixedLine GB_LOGIN_ERROR
- {
- Pos = MAP_APPFONT ( 6 , 3 ) ;
- Size = MAP_APPFONT ( 197 , 8 ) ;
- Text [ en-US ] = "Message from server" ;
- };
- FixedText INFO_LOGIN_REQUEST
- {
- Pos = MAP_APPFONT ( 12 , 55 ) ;
- Size = MAP_APPFONT ( 185 , 18 ) ;
- WordBreak = TRUE ;
- Text [ en-US ] = "Please enter user name and password for %1." ;
- };
- FixedText FT_LOGIN_PATH
- {
- Pos = MAP_APPFONT ( 12 , 77 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
- Text [ en-US ] = "~Path" ;
- };
- Edit ED_LOGIN_PATH
- {
- Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 76 ) ;
- Size = MAP_APPFONT ( 108 , 12 ) ;
- };
- FixedText INFO_LOGIN_PATH
- {
- Hide = TRUE ;
- Pos = MAP_APPFONT ( 72 , 77 ) ;
- Size = MAP_APPFONT ( 125 , 10 ) ;
- };
- PushButton BTN_LOGIN_PATH
- {
- Pos = MAP_APPFONT ( 183 , 75 ) ;
- Size = MAP_APPFONT ( 14 , 14 ) ;
- Text = "~..." ;
- };
- FixedText FT_LOGIN_USERNAME
- {
- Pos = MAP_APPFONT ( 12 , 92 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
- Text [ en-US ] = "~User name" ;
- };
- Edit ED_LOGIN_USERNAME
- {
- Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 91 ) ;
- Size = MAP_APPFONT ( 125 , 12 ) ;
- };
- FixedText INFO_LOGIN_USERNAME
- {
- Hide = TRUE ;
- Pos = MAP_APPFONT ( 72 , 92 ) ;
- Size = MAP_APPFONT ( 125 , 10 ) ;
- };
- FixedText FT_LOGIN_PASSWORD
- {
- Pos = MAP_APPFONT ( 12 , 107 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
- Text [ en-US ] = "Pass~word" ;
- };
- Edit ED_LOGIN_PASSWORD
- {
- Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 106 ) ;
- Size = MAP_APPFONT ( 125 , 12 ) ;
- PassWord = TRUE ;
- };
- FixedText FT_LOGIN_ACCOUNT
- {
- Pos = MAP_APPFONT ( 12 , 122 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
- Text [ en-US ] = "A~ccount";
- };
- Edit ED_LOGIN_ACCOUNT
- {
- Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 121 ) ;
- Size = MAP_APPFONT ( 125 , 12 ) ;
- PassWord = TRUE ;
- };
- CheckBox CB_LOGIN_SAVEPASSWORD
- {
- Pos = MAP_APPFONT ( 12 , 136 ) ;
- Size = MAP_APPFONT ( 185 , 10 ) ;
- Text [ en-US ] = "~Save password" ;
- };
- FixedLine GB_LOGIN_LOGIN
- {
- Pos = MAP_APPFONT ( 7 , 44 ) ;
- Size = MAP_APPFONT ( 197 , 8 ) ;
- Text [ en-US ] = "Log in" ;
- };
- OKButton BTN_LOGIN_OK
- {
- Pos = MAP_APPFONT ( 209 , 6 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
- DefButton = TRUE ;
- };
- CancelButton BTN_LOGIN_CANCEL
- {
- Pos = MAP_APPFONT ( 209 , 23 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
- };
- HelpButton BTN_LOGIN_HELP
- {
- Pos = MAP_APPFONT ( 209 , 43 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
- };
- String STR_LOGIN_AT
- {
- Text [ en-US ] = "to " ;
- };
- Text [ en-US ] = "User Name and Password Required" ;
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/svtools/source/dialogs/makefile.mk b/svtools/source/dialogs/makefile.mk
index 16528ee7d4cd..99c4b59b76ae 100644..100755
--- a/svtools/source/dialogs/makefile.mk
+++ b/svtools/source/dialogs/makefile.mk
@@ -44,7 +44,6 @@ SRC1FILES= filedlg2.src \
prnsetup.src \
printdlg.src \
colrdlg.src \
- logindlg.src \
addresstemplate.src \
wizardmachine.src
@@ -69,8 +68,7 @@ SLOFILES= \
$(SLO)$/colrdlg.obj \
$(SLO)$/property.obj \
$(SLO)$/wizdlg.obj \
- $(SLO)$/mcvmath.obj \
- $(SLO)$/logindlg.obj
+ $(SLO)$/mcvmath.obj
# --- Targets ------------------------------------------------------
diff --git a/svtools/source/misc/errtxt.src b/svtools/source/misc/errtxt.src
index 6c1a90ae6412..f33896e20003 100644
--- a/svtools/source/misc/errtxt.src
+++ b/svtools/source/misc/errtxt.src
@@ -328,23 +328,23 @@ Resource RID_ERRHDL
};
String ERRCODE_INET_CONNECT
{
- Text [ en-US ] = "Could not establish Internet connection to $(ARG1)." ;
+ Text [ en-US ] = "Could not establish network connection to $(ARG1)." ;
};
String ERRCODE_INET_READ
{
- Text [ en-US ] = "Error reading data from the Internet.\nServer error message: $(ARG1)." ;
+ Text [ en-US ] = "Error reading data from the network.\nServer error message: $(ARG1)." ;
};
String ERRCODE_INET_WRITE
{
- Text [ en-US ] = "Error transferring data to the Internet.\nServer error message: $(ARG1)." ;
+ Text [ en-US ] = "Error transferring data to the network.\nServer error message: $(ARG1)." ;
};
String ERRCODE_INET_GENERAL
{
- Text [ en-US ] = "General Internet error has occurred." ;
+ Text [ en-US ] = "General network error has occurred." ;
};
String ERRCODE_INET_OFFLINE
{
- Text [ en-US ] = "The requested Internet data is not available in the cache and cannot be transmitted as the Online mode has not be activated." ;
+ Text [ en-US ] = "The requested network data is not available in the cache and cannot be transmitted as the Online mode has not be activated." ;
};
String ERRCODE_SFXMSG_STYLEREPLACE
{
diff --git a/svtools/source/misc/langtab.src b/svtools/source/misc/langtab.src
index 1cb20d27fc12..067eb601a5af 100644
--- a/svtools/source/misc/langtab.src
+++ b/svtools/source/misc/langtab.src
@@ -319,6 +319,10 @@ StringArray STR_ARR_SVT_LANGUAGE_TABLE
< "Sardinian, Logudorese" ; LANGUAGE_USER_SARDINIAN_LOGUDORESE ; > ;
< "Sardinian, Sassarese" ; LANGUAGE_USER_SARDINIAN_SASSARESE ; > ;
< "Bafia" ; LANGUAGE_USER_BAFIA ; > ;
+ < "Gikuyu" ; LANGUAGE_USER_GIKUYU ; > ;
+ < "Yoruba" ; LANGUAGE_YORUBA ; > ;
+ < "Rusyn (Ukraine)" ; LANGUAGE_USER_RUSYN_UKRAINE ; > ;
+ < "Rusyn (Slovakia)" ; LANGUAGE_USER_RUSYN_SLOVAKIA ; > ;
};
};
diff --git a/svtools/source/misc/makefile.mk b/svtools/source/misc/makefile.mk
index 65e43747a586..32781dbfefb1 100644..100755
--- a/svtools/source/misc/makefile.mk
+++ b/svtools/source/misc/makefile.mk
@@ -75,7 +75,8 @@ SLOFILES=\
$(SLO)$/transfer.obj \
$(SLO)$/transfer2.obj \
$(SLO)$/unitconv.obj \
- $(SLO)$/wallitem.obj
+ $(SLO)$/wallitem.obj \
+ $(SLO)$/xwindowitem.obj
# --- Targets -------------------------------------------------------
diff --git a/sd/source/ui/dlg/printdlg.cxx b/svtools/source/misc/xwindowitem.cxx
index cc20e0f67a84..a382d8293617 100644..100755
--- a/sd/source/ui/dlg/printdlg.cxx
+++ b/svtools/source/misc/xwindowitem.cxx
@@ -26,63 +26,72 @@
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sd.hxx"
+#include "precompiled_svtools.hxx"
-#ifdef SD_DLLIMPLEMENTATION
-#undef SD_DLLIMPLEMENTATION
-#endif
+#include "svtools/xwindowitem.hxx"
+#include <vcl/window.hxx>
-#include "sdresid.hxx"
-#include "printdlg.hxx"
-#include "printdlg.hrc"
-/*************************************************************************
-|*
-|* SdPrintDlg::SdPrintDlg()
-|*
-|* Beschreibung Dialog zum Einstellen von Printoptionen
-|*
-*************************************************************************/
-
-SdPrintDlg::SdPrintDlg( Window* pWindow ) :
- ModalDialog ( pWindow, SdResId( DLG_PRINT_WARNINGS ) ),
- aFtInfo ( this, SdResId( FI_INFO ) ),
- aRbtScale ( this, SdResId( RBT_SCALE ) ),
- aRbtPoster ( this, SdResId( RBT_POSTER ) ),
- aRbtCut ( this, SdResId( RBT_CUT ) ),
- aGrpOptions ( this, SdResId( GRP_OPTIONS ) ),
- aBtnOK ( this, SdResId( BTN_OK ) ),
- aBtnCancel ( this, SdResId( BTN_CANCEL ) ),
- aBtnHelp ( this, SdResId( BTN_HELP ) )
+using namespace ::com::sun::star;
+
+//////////////////////////////////////////////////////////////////////
+
+TYPEINIT1_FACTORY( XWindowItem, SfxPoolItem, new XWindowItem );
+
+
+XWindowItem::XWindowItem() :
+ SfxPoolItem()
{
- FreeResource();
+}
+
- aRbtScale.Check();
+XWindowItem::XWindowItem( USHORT nWhichId, Window * pWin ) :
+ SfxPoolItem( nWhichId )
+{
+ if (pWin)
+ {
+ m_xWin = uno::Reference< awt::XWindow >( pWin->GetComponentInterface(), uno::UNO_QUERY );
+ // the assertion can't possibly fails since VCLXWindow implements XWindow...
+ DBG_ASSERT( m_xWin.is(), "failed to get XWindow" );
+ }
}
-/*************************************************************************
-|*
-|* SdPrintDlg::GetAttr()
-|*
-|* Beschreibung Liefert eingestellte Option zurueck
-|*
-*************************************************************************/
-
-USHORT SdPrintDlg::GetAttr()
+
+XWindowItem::XWindowItem( USHORT nWhichId, uno::Reference< awt::XWindow > & rxWin ) :
+ SfxPoolItem( nWhichId ),
+ m_xWin( rxWin )
{
- USHORT nOption = 0;
+}
+
- if( aRbtScale.IsChecked() )
- nOption = 1;
- else if( aRbtPoster.IsChecked() )
- nOption = 2;
- else if( aRbtCut.IsChecked() )
- nOption = 3;
+XWindowItem::XWindowItem( const XWindowItem &rItem ) :
+ SfxPoolItem( Which() ),
+ m_xWin( rItem.m_xWin )
+{
+}
+
+
+XWindowItem::~XWindowItem()
+{
+}
+
+
+SfxPoolItem * XWindowItem::Clone( SfxItemPool* /*pPool*/ ) const
+{
+ return new XWindowItem( *this );
+}
+
+
+int XWindowItem::operator == ( const SfxPoolItem & rAttr ) const
+{
+ DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" );
- return( nOption );
+ const XWindowItem * pItem = dynamic_cast< const XWindowItem * >(&rAttr);
+ return pItem ? m_xWin == pItem->m_xWin : 0;
}
+//////////////////////////////////////////////////////////////////////
diff --git a/svtools/source/svhtml/parhtml.cxx b/svtools/source/svhtml/parhtml.cxx
index 67fc5f619fdf..ade58688dc55 100644
--- a/svtools/source/svhtml/parhtml.cxx
+++ b/svtools/source/svhtml/parhtml.cxx
@@ -2118,11 +2118,7 @@ enum eHtmlMetas {
};
// <META NAME=xxx>
-#ifdef __MINGW32__ // for runtime pseudo reloc
-static HTMLOptionEnum aHTMLMetaNameTable[] =
-#else
static HTMLOptionEnum __READONLY_DATA aHTMLMetaNameTable[] =
-#endif
{
{ OOO_STRING_SVTOOLS_HTML_META_author, HTML_META_AUTHOR },
{ OOO_STRING_SVTOOLS_HTML_META_changed, HTML_META_CHANGED },
diff --git a/svtools/source/table/gridtablerenderer.cxx b/svtools/source/table/gridtablerenderer.cxx
index a3f954e0bef5..8e5bd181a583 100644
--- a/svtools/source/table/gridtablerenderer.cxx
+++ b/svtools/source/table/gridtablerenderer.cxx
@@ -109,7 +109,10 @@ namespace svt { namespace table
DBG_ASSERT( !!pColumn, "GridTableRenderer::PaintColumnHeader: invalid column model object!" );
if ( !!pColumn )
sHeaderText = pColumn->getName();
- _rDevice.SetTextColor(m_pImpl->rModel.getTextColor());
+ if(m_pImpl->rModel.getTextColor() != 0x000000)
+ _rDevice.SetTextColor(m_pImpl->rModel.getTextColor());
+ else
+ _rDevice.SetTextColor(_rStyle.GetFieldTextColor());
ULONG nHorFlag = TEXT_DRAW_LEFT;
ULONG nVerFlag = TEXT_DRAW_TOP;
if(m_pImpl->rModel.getVerticalAlign() == 1)
@@ -146,6 +149,11 @@ namespace svt { namespace table
Color aRowBackground = m_pImpl->rModel.getOddRowBackgroundColor();
Color line = m_pImpl->rModel.getLineColor();
Color aRowBackground2 = m_pImpl->rModel.getEvenRowBackgroundColor();
+ Color fieldColor = _rStyle.GetFieldColor();
+ if(aRowBackground == 0xFFFFFF)
+ aRowBackground = fieldColor;
+ if(aRowBackground2 == 0xFFFFFF)
+ aRowBackground2 = fieldColor;
//if row is selected background color becomes blue, and lines should be also blue
//if they aren't user defined
if(_bSelected)
@@ -161,7 +169,7 @@ namespace svt { namespace table
//and set line color to be the same
else
{
- if(aRowBackground2 != 0xFFFFFF && _nRow%2)
+ if(aRowBackground2 != fieldColor && _nRow%2)
{
aRowBackground = aRowBackground2;
if(line == 0xFFFFFF)
@@ -170,7 +178,7 @@ namespace svt { namespace table
_rDevice.SetLineColor(line);
}
//fill the rows with alternating background colors if second background color is specified
- else if(aRowBackground != 0xFFFFFF && line == 0xFFFFFF)
+ else if(aRowBackground != fieldColor && line == 0xFFFFFF)
_rDevice.SetLineColor(aRowBackground);
else
{
@@ -195,7 +203,10 @@ namespace svt { namespace table
_rDevice.Push( PUSH_LINECOLOR);
_rDevice.SetLineColor(_rStyle.GetSeparatorColor());
_rDevice.DrawLine( _rArea.BottomLeft(), _rArea.BottomRight() );
- _rDevice.SetTextColor(m_pImpl->rModel.getTextColor());
+ if(m_pImpl->rModel.getTextColor() != 0x000000)
+ _rDevice.SetTextColor(m_pImpl->rModel.getTextColor());
+ else
+ _rDevice.SetTextColor(_rStyle.GetFieldTextColor());
ULONG nHorFlag = TEXT_DRAW_LEFT;
ULONG nVerFlag = TEXT_DRAW_TOP;
if(m_pImpl->rModel.getVerticalAlign() == 1)
@@ -221,44 +232,42 @@ namespace svt { namespace table
void GridTableRenderer::PaintCellImage( ColPos _nColumn, bool _bSelected, bool _bActive,
OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle, Image* _pCellData )
{
- _rDevice.Push( PUSH_LINECOLOR | PUSH_FILLCOLOR | PUSH_CLIPREGION);
- _rDevice.IntersectClipRegion( _rArea );
- Color background1 = m_pImpl->rModel.getOddRowBackgroundColor();
- Color background2 = m_pImpl->rModel.getEvenRowBackgroundColor();
- Color line = m_pImpl->rModel.getLineColor();
- //if row is selected and line color isn't user specified, set it blue
- if(_bSelected)
- {
- if(line == 0xFFFFFF)
- _rDevice.SetLineColor(_rStyle.GetHighlightColor());
- else
- _rDevice.SetLineColor(line);
- }
- //else set line color to the color of row background
- else
- {
- if(background2 != 0xFFFFFF && m_pImpl->nCurrentRow%2)
+ _rDevice.Push( PUSH_LINECOLOR | PUSH_FILLCOLOR);
+ Color background1 = m_pImpl->rModel.getOddRowBackgroundColor();
+ Color background2 = m_pImpl->rModel.getEvenRowBackgroundColor();
+ Color line = m_pImpl->rModel.getLineColor();
+ //if row is selected and line color isn't user specified, set it blue
+ if(_bSelected)
{
if(line == 0xFFFFFF)
- _rDevice.SetLineColor(background2);
+ _rDevice.SetLineColor(_rStyle.GetHighlightColor());
else
_rDevice.SetLineColor(line);
}
- else if(background1 != 0xFFFFFF && line == 0xFFFFFF)
- _rDevice.SetLineColor(background1);
+ //else set line color to the color of row background
else
{
- //if line color is set, then it was user defined and should be visible
- //if it wasn't set, it'll be the same as the default background color, so lines still won't be visible
- _rDevice.SetLineColor(line);
+ if(background2 != 0xFFFFFF && m_pImpl->nCurrentRow%2)
+ {
+ if(line == 0xFFFFFF)
+ _rDevice.SetLineColor(background2);
+ else
+ _rDevice.SetLineColor(line);
+ }
+ else if(background1 != 0xFFFFFF && line == 0xFFFFFF)
+ _rDevice.SetLineColor(background1);
+ else
+ {
+ //if line color is set, then it was user defined and should be visible
+ //if it wasn't set, it'll be the same as the default background color, so lines still won't be visible
+ _rDevice.SetLineColor(line);
+ }
}
- }
- _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
- {
- // TODO: remove those temporary place holders
- Rectangle aRect( _rArea );
- ++aRect.Left(); --aRect.Right();
- aRect.Top(); aRect.Bottom();
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+
+ Rectangle aRect( _rArea );
+ ++aRect.Left(); --aRect.Right();
+ aRect.Top(); aRect.Bottom();
Point imagePos(Point(aRect.Left(), aRect.Top()));
Size imageSize = _pCellData->GetSizePixel();
if(aRect.GetWidth() > imageSize.Width())
@@ -281,8 +290,7 @@ namespace svt { namespace table
imageSize.Height() = aRect.GetHeight()-1;
Image& image (*_pCellData);
_rDevice.DrawImage(imagePos, imageSize, image, 0);
- }
- _rDevice.Pop();
+ _rDevice.Pop();
(void)_bActive;
// no special painting for the active cell at the moment
@@ -293,48 +301,47 @@ namespace svt { namespace table
OutputDevice& _rDevice, const Rectangle& _rArea, const StyleSettings& _rStyle, rtl::OUString& _rText )
{
_rDevice.Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
- Color background1 = m_pImpl->rModel.getOddRowBackgroundColor();
- Color background2 = m_pImpl->rModel.getEvenRowBackgroundColor();
- Color line = m_pImpl->rModel.getLineColor();
- //if row is selected and line color isn't user specified, set it blue
- if(_bSelected)
- {
- if(line == 0xFFFFFF)
- _rDevice.SetLineColor(_rStyle.GetHighlightColor());
- else
- _rDevice.SetLineColor(line);
- }
- //else set line color to the color of row background
- else
- {
- if(background2 != 0xFFFFFF && m_pImpl->nCurrentRow%2)
+ Color background1 = m_pImpl->rModel.getOddRowBackgroundColor();
+ Color background2 = m_pImpl->rModel.getEvenRowBackgroundColor();
+ Color line = m_pImpl->rModel.getLineColor();
+ //if row is selected and line color isn't user specified, set it blue
+ if(_bSelected)
{
if(line == 0xFFFFFF)
- _rDevice.SetLineColor(background2);
+ _rDevice.SetLineColor(_rStyle.GetHighlightColor());
else
_rDevice.SetLineColor(line);
}
- else if(background1 != 0xFFFFFF && line == 0xFFFFFF)
- _rDevice.SetLineColor(background1);
+ //else set line color to the color of row background
else
{
- //if Line color is set, then it was user defined and should be visible
- //if it wasn't set, it'll be the same as the default background color, so lines still won't be visible
- _rDevice.SetLineColor(line);
+ if(background2 != 0xFFFFFF && m_pImpl->nCurrentRow%2)
+ {
+ if(line == 0xFFFFFF)
+ _rDevice.SetLineColor(background2);
+ else
+ _rDevice.SetLineColor(line);
+ }
+ else if(background1 != 0xFFFFFF && line == 0xFFFFFF)
+ _rDevice.SetLineColor(background1);
+ else
+ {
+ //if Line color is set, then it was user defined and should be visible
+ //if it wasn't set, it'll be the same as the default background color, so lines still won't be visible
+ _rDevice.SetLineColor(line);
+ }
}
- }
- _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
- {
- // TODO: remove those temporary place holders
- Rectangle aRect( _rArea );
- ++aRect.Left(); --aRect.Right();
- aRect.Top(); aRect.Bottom();
+ _rDevice.DrawLine( _rArea.BottomRight(), _rArea.TopRight() );
+
+ Rectangle aRect( _rArea );
+ ++aRect.Left(); --aRect.Right();
+ aRect.Top(); aRect.Bottom();
if(_bSelected)
- {
_rDevice.SetTextColor(_rStyle.GetHighlightTextColor());
- }
- else
+ else if(m_pImpl->rModel.getTextColor() != 0x000000)
_rDevice.SetTextColor(m_pImpl->rModel.getTextColor());
+ else
+ _rDevice.SetTextColor(_rStyle.GetFieldTextColor());
ULONG nHorFlag = TEXT_DRAW_LEFT;
ULONG nVerFlag = TEXT_DRAW_TOP;
if(m_pImpl->rModel.getVerticalAlign() == 1)
@@ -348,8 +355,8 @@ namespace svt { namespace table
Rectangle textRect(_rArea);
textRect.Left()+=4; textRect.Right()-=4;
textRect.Bottom()-=2;
- _rDevice.DrawText( textRect, _rText, nHorFlag | nVerFlag | TEXT_DRAW_CLIP);
- }
+ _rDevice.DrawText( textRect, _rText, nHorFlag | nVerFlag | TEXT_DRAW_CLIP);
+
_rDevice.Pop();
(void)_bActive;
// no special painting for the active cell at the moment
diff --git a/svtools/source/table/tablecontrol.cxx b/svtools/source/table/tablecontrol.cxx
index 1770bfd7dd02..33c80e642118 100644
--- a/svtools/source/table/tablecontrol.cxx
+++ b/svtools/source/table/tablecontrol.cxx
@@ -70,6 +70,7 @@ namespace svt { namespace table
:Control( _pParent, _nStyle )
,m_pImpl( new TableControl_Impl( *this ) )
,m_bSelectionChanged(false)
+ ,m_bTooltip(false)
{
TableDataWindow* aTableData = m_pImpl->getDataWindow();
aTableData->SetMouseButtonDownHdl( LINK( this, TableControl, ImplMouseButtonDownHdl ) );
@@ -306,7 +307,7 @@ namespace svt { namespace table
aRetText = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ColumnHeaderBar" ) );
break;
case TCTYPE_TABLECELL:
- aRetText = GetRowName(_nRow);
+ aRetText = GetAccessibleCellText(_nRow, _nCol);
break;
case TCTYPE_ROWHEADERCELL:
aRetText = GetRowName(_nRow);
@@ -389,9 +390,9 @@ namespace svt { namespace table
}
// -----------------------------------------------------------------------------
-::rtl::OUString TableControl::GetAccessibleCellText( sal_Int32 _nRowPos, sal_Int32 _nColPos)
+::rtl::OUString TableControl::GetAccessibleCellText( sal_Int32 _nRowPos, sal_Int32 _nColPos) const
{
- ::com::sun::star::uno::Any cellContent = GetCellContent(_nRowPos, _nColPos);
+ const ::com::sun::star::uno::Any cellContent = GetCellContent(_nRowPos, _nColPos);
return m_pImpl->convertToString(cellContent);
}
// -----------------------------------------------------------------------------
@@ -589,6 +590,7 @@ void TableControl::setTooltip(const ::com::sun::star::uno::Sequence< ::rtl::OUSt
{
m_aText = aText;
m_nCols = nCols;
+ m_bTooltip = true;
}
// -----------------------------------------------------------------------
void TableControl::selectionChanged(bool _bChanged)
@@ -596,6 +598,11 @@ void TableControl::selectionChanged(bool _bChanged)
m_bSelectionChanged = _bChanged;
}
// -----------------------------------------------------------------------
+bool TableControl::isTooltip()
+{
+ return m_bTooltip;
+}
+// -----------------------------------------------------------------------
IMPL_LINK( TableControl, ImplSelectHdl, void*, EMPTYARG )
{
Select();
diff --git a/svtools/source/table/tablecontrol_impl.cxx b/svtools/source/table/tablecontrol_impl.cxx
index 3288ab6a4284..90bc4899209b 100644
--- a/svtools/source/table/tablecontrol_impl.cxx
+++ b/svtools/source/table/tablecontrol_impl.cxx
@@ -609,10 +609,10 @@ namespace svt { namespace table
if(pColumn->getMinWidth() == 0 && bResizable)
{
pColumn->setMinWidth(1);
- minColWithoutFixedSum+=m_rAntiImpl.LogicToPixel( Size( 1, 0 ), MAP_APPFONT ).Width();
+ minColWithoutFixedSum+=m_rAntiImpl.PixelToLogic( Size( 1, 0 ), MAP_APPFONT ).Width();
}
if(pColumn->getMaxWidth() == 0 && bResizable)
- pColumn->setMaxWidth(m_rAntiImpl.LogicToPixel( Size( (int)gridWidth, 0 ), MAP_APPFONT ).Width());
+ pColumn->setMaxWidth(m_rAntiImpl.PixelToLogic( Size( (int)gridWidth, 0 ), MAP_APPFONT ).Width());
if( colPrefWidth != 0)
{
if(m_bResizingGrid)
@@ -884,6 +884,16 @@ namespace svt { namespace table
// position it
if ( m_pHScroll )
{
+ TableSize nVisibleUnits = lcl_getColumnsVisibleWithin( aDataCellPlayground, m_nLeftColumn, *this, false );
+ int nRange = m_nColumnCount;
+ if( m_nLeftColumn + nVisibleUnits == nRange-1)
+ {
+ if(m_aAccColumnWidthsPixel[nRange-2] - m_aAccColumnWidthsPixel[m_nLeftColumn] + m_aColumnWidthsPixel[nRange-1]>aDataCellPlayground.GetWidth())
+ {
+ m_pHScroll->SetVisibleSize( nVisibleUnits -1 );
+ m_pHScroll->SetPageSize(nVisibleUnits -1);
+ }
+ }
Rectangle aScrollbarArea(
Point( 0, aDataCellPlayground.Bottom() + 1 ),
Size( aDataCellPlayground.Right() + 1, nScrollbarMetrics )
@@ -1000,7 +1010,6 @@ namespace svt { namespace table
*m_pDataWindow, aCell.getRect(), rStyle );
}
}
-
// the area occupied by the row header, if any
Rectangle aRowHeaderArea;
if ( m_pModel->hasRowHeaders() )
@@ -1014,12 +1023,13 @@ namespace svt { namespace table
//to avoid double lines when scrolling vertically
if(m_nTopRow != 0)
--aRowHeaderArea.Top();
+ --aRowHeaderArea.Right();
pRenderer->PaintHeaderArea(*m_pDataWindow, aRowHeaderArea, false, true, rStyle);
// Note that strictly, aRowHeaderArea also contains the intersection between column
// and row header area. However, below we go to paint this intersection, again,
// so this hopefully doesn't hurt if we already paint it here.
- if ( getModel()->hasColumnHeaders() )
+ if ( m_pModel->hasColumnHeaders() )
{
TableCellGeometry aIntersection( *this, Rectangle( Point( 0, 0 ),
aAllCellsWithHeaders.BottomRight() ), COL_ROW_HEADERS, ROW_COL_HEADERS );
@@ -1030,6 +1040,7 @@ namespace svt { namespace table
--aInters.Top();
--aInters.Bottom();
}
+ --aInters.Right();
pRenderer->PaintHeaderArea(
*m_pDataWindow, aInters, true, true, rStyle
);
@@ -1068,6 +1079,11 @@ namespace svt { namespace table
--aRect.Top();
if(m_nLeftColumn != 0)
--aRect.Left();
+ else
+ {
+ if(m_pModel->hasRowHeaders())
+ --aRect.Left();
+ }
// give the redenderer a chance to prepare the row
pRenderer->PrepareRow( aRowIterator.getRow(), isActiveRow, isSelectedRow,
*m_pDataWindow, aRect, rStyle );
@@ -1908,6 +1924,11 @@ namespace svt { namespace table
return -1;
}
//-------------------------------------------------------------------------------
+ bool TableControl_Impl::isTooltipActive()
+ {
+ return m_rAntiImpl.isTooltip();
+ }
+ //-------------------------------------------------------------------------------
::rtl::OUString& TableControl_Impl::setTooltip(const Point& rPoint )
{
::rtl::OUString aTooltipText;
@@ -2033,8 +2054,8 @@ namespace svt { namespace table
{
m_pDataWindow->HideTracking();
PColumnModel pColumn = m_pModel->getColumnModel(m_nResizingColumn);
- int maxWidth = pColumn->getMaxWidth();
- int minWidth = pColumn->getMinWidth();
+ int maxWidth = m_rAntiImpl.LogicToPixel( Size( pColumn->getMaxWidth(), 0 ), MAP_APPFONT ).Width();
+ int minWidth = m_rAntiImpl.LogicToPixel( Size( pColumn->getMinWidth(), 0 ), MAP_APPFONT ).Width();
int resizeCol = m_nResizingColumn-m_nLeftColumn;
//new position of mouse
int actX = rPoint.X();
@@ -2044,7 +2065,7 @@ namespace svt { namespace table
int leftX = 0;
if(m_nResizingColumn > m_nLeftColumn)
leftX = m_aVisibleColumnWidthsPixel[resizeCol-1];
- else if(m_nResizingColumn == 0 && m_pModel->hasRowHeaders())
+ else if(m_nResizingColumn == m_nLeftColumn && m_pModel->hasRowHeaders())
leftX = m_rAntiImpl.LogicToPixel( Size( m_pModel->getRowHeaderWidth(), 0 ), MAP_APPFONT ).Width();
int actWidth = actX - leftX;
int newActWidth = 0;
@@ -2057,7 +2078,7 @@ namespace svt { namespace table
pColumn->setPreferredWidth(newActWidth);
}
else
- pColumn->setPreferredWidth(minWidth);
+ pColumn->setPreferredWidth(pColumn->getMinWidth());
if(m_nLeftColumn != 0)
impl_updateLeftColumn();
}
@@ -2069,7 +2090,7 @@ namespace svt { namespace table
pColumn->setPreferredWidth(newActWidth);
}
else
- pColumn->setPreferredWidth(maxWidth);
+ pColumn->setPreferredWidth(pColumn->getMaxWidth());
}
m_nCurColumn = m_nResizingColumn;
impl_ni_updateColumnWidths();
diff --git a/svtools/source/table/tablecontrol_impl.hxx b/svtools/source/table/tablecontrol_impl.hxx
index 12b518aa3578..053766d92841 100644
--- a/svtools/source/table/tablecontrol_impl.hxx
+++ b/svtools/source/table/tablecontrol_impl.hxx
@@ -210,6 +210,7 @@ namespace svt { namespace table
virtual void showCursor();
virtual bool dispatchAction( TableControlAction _eAction );
virtual SelectionEngine* getSelEngine();
+ virtual bool isTooltipActive();
virtual rtl::OUString& setTooltip(const Point& rPoint );
virtual void resizeColumn(const Point& rPoint);
virtual bool startResizeColumn(const Point& rPoint);
diff --git a/svtools/source/table/tabledatawindow.cxx b/svtools/source/table/tabledatawindow.cxx
index 3245b7e84aac..e2e1ce5353fe 100644
--- a/svtools/source/table/tabledatawindow.cxx
+++ b/svtools/source/table/tabledatawindow.cxx
@@ -58,14 +58,33 @@ namespace svt { namespace table
{
m_rTableControl.doPaintContent( rUpdateRect );
}
-
+ //--------------------------------------------------------------------
+ void TableDataWindow::SetBackground( const Wallpaper& rColor )
+ {
+ Window::SetBackground( rColor );
+ }
+ //--------------------------------------------------------------------
+ void TableDataWindow::SetControlBackground( const Color& rColor )
+ {
+ Window::SetControlBackground( rColor );
+ }
+ //--------------------------------------------------------------------
+ void TableDataWindow::SetBackground()
+ {
+ Window::SetBackground();
+ }
+ //--------------------------------------------------------------------
+ void TableDataWindow::SetControlBackground()
+ {
+ Window::SetControlBackground();
+ }
//--------------------------------------------------------------------
void TableDataWindow::MouseMove( const MouseEvent& rMEvt )
{
Point aPoint = rMEvt.GetPosPixel();
if ( !m_rTableControl.getInputHandler()->MouseMove( m_rTableControl, rMEvt ) )
{
- if(m_rTableControl.getCurrentRow(aPoint)>=0 )
+ if(m_rTableControl.getCurrentRow(aPoint)>=0 && m_rTableControl.isTooltipActive() )
{
SetPointer(POINTER_ARROW);
rtl::OUString& rHelpText = m_rTableControl.setTooltip(aPoint);
@@ -102,12 +121,9 @@ namespace svt { namespace table
m_nRowAlreadySelected = nCurRow;
m_aSelectHdl.Call( NULL );
}
- else
- m_aMouseButtonDownHdl.Call((MouseEvent*) &rMEvt);
}
- else
- m_aMouseButtonDownHdl.Call((MouseEvent*) &rMEvt);
}
+ m_aMouseButtonDownHdl.Call((MouseEvent*) &rMEvt);
m_rTableControl.getAntiImpl().LoseFocus();
}
//--------------------------------------------------------------------
@@ -115,8 +131,7 @@ namespace svt { namespace table
{
if ( !m_rTableControl.getInputHandler()->MouseButtonUp( m_rTableControl, rMEvt ) )
Window::MouseButtonUp( rMEvt );
- else
- m_aMouseButtonUpHdl.Call((MouseEvent*) &rMEvt);
+ m_aMouseButtonUpHdl.Call((MouseEvent*) &rMEvt);
m_rTableControl.getAntiImpl().GetFocus();
}
//--------------------------------------------------------------------
diff --git a/svtools/source/uno/svtxgridcontrol.cxx b/svtools/source/uno/svtxgridcontrol.cxx
index 99b36c390f23..f5bc837f60b0 100755
--- a/svtools/source/uno/svtxgridcontrol.cxx
+++ b/svtools/source/uno/svtxgridcontrol.cxx
@@ -191,7 +191,7 @@ void SVTXGridControl::setProperty( const ::rtl::OUString& PropertyName, const An
}
case BASEPROPERTY_GRID_HEADER_BACKGROUND:
{
- sal_Int32 colorHeader = 0x000000;
+ sal_Int32 colorHeader = 0xFFFFFF;
if( aValue >>= colorHeader )
{
m_pTableModel->setHeaderBackgroundColor(colorHeader);
@@ -200,7 +200,7 @@ void SVTXGridControl::setProperty( const ::rtl::OUString& PropertyName, const An
}
case BASEPROPERTY_GRID_LINE_COLOR:
{
- sal_Int32 colorLine = 0x000000;
+ sal_Int32 colorLine = 0xFFFFFF;
if( aValue >>= colorLine )
{
m_pTableModel->setLineColor(colorLine);
@@ -209,7 +209,7 @@ void SVTXGridControl::setProperty( const ::rtl::OUString& PropertyName, const An
}
case BASEPROPERTY_GRID_EVEN_ROW_BACKGROUND:
{
- sal_Int32 colorEvenRow = 0x000000;
+ sal_Int32 colorEvenRow = 0xFFFFFF;
if( aValue >>= colorEvenRow )
{
m_pTableModel->setEvenRowBackgroundColor(colorEvenRow);
@@ -218,7 +218,7 @@ void SVTXGridControl::setProperty( const ::rtl::OUString& PropertyName, const An
}
case BASEPROPERTY_GRID_ROW_BACKGROUND:
{
- sal_Int32 colorBackground = 0x000000;
+ sal_Int32 colorBackground = 0xFFFFFF;
if( aValue >>= colorBackground )
{
m_pTableModel->setOddRowBackgroundColor(colorBackground);
@@ -227,7 +227,7 @@ void SVTXGridControl::setProperty( const ::rtl::OUString& PropertyName, const An
}
case BASEPROPERTY_TEXTCOLOR:
{
- sal_Int32 colorText = 0xFFFFFF;
+ sal_Int32 colorText = 0x000000;
if( aValue >>= colorText )
{
m_pTableModel->setTextColor(colorText);
@@ -673,10 +673,10 @@ void SAL_CALL SVTXGridControl::selectRows(const ::com::sun::star::uno::Sequence<
if((start >= 0 && start < m_pTableModel->getRowCount()) && (end >= 0 && end < m_pTableModel->getRowCount()))
{
std::vector<RowPos>& selectedRows = pTable->GetSelectedRows();
- if(!selectedRows.empty())
- selectedRows.clear();
if(eSelMode == SINGLE_SELECTION)
{
+ if(!selectedRows.empty())
+ selectedRows.clear();
if(rangeOfRows.getLength() == 1)
selectedRows.push_back(start);
else
@@ -685,7 +685,10 @@ void SAL_CALL SVTXGridControl::selectRows(const ::com::sun::star::uno::Sequence<
else
{
for(int i=0;i<seqSize;i++)
- selectedRows.push_back(rangeOfRows[i]);
+ {
+ if(!isSelectedIndex(rangeOfRows[i]))
+ selectedRows.push_back(rangeOfRows[i]);
+ }
}
pTable->selectionChanged(true);
pTable->InvalidateDataWindow(start, end, false);
@@ -713,24 +716,23 @@ void SAL_CALL SVTXGridControl::selectAllRows() throw (::com::sun::star::uno::Run
SetSynthesizingVCLEvent( sal_False );
}
}
+
void SAL_CALL SVTXGridControl::deselectRows(const ::com::sun::star::uno::Sequence< ::sal_Int32 >& rangeOfRows) throw (::com::sun::star::uno::RuntimeException)
{
TableControl* pTable = (TableControl*)GetWindow();
std::vector<RowPos>& selectedRows = pTable->GetSelectedRows();
std::vector<RowPos>::iterator itStart = selectedRows.begin();
std::vector<RowPos>::iterator itEnd = selectedRows.end();
- sal_Int32 start = rangeOfRows[0];
- sal_Int32 end = rangeOfRows[rangeOfRows.getLength()-1];
- if((start >= 0 && start < m_pTableModel->getRowCount()) && (end >= 0 && end < m_pTableModel->getRowCount()))
+ for(int i = 0; i < rangeOfRows.getLength(); i++ )
{
- std::vector<RowPos>::iterator iter = std::find(itStart, itEnd, start);
- selectedRows.erase(iter, iter+(end-start)+1);
- pTable->selectionChanged(true);
- pTable->InvalidateDataWindow(start, end, false);
- SetSynthesizingVCLEvent( sal_True );
- pTable->Select();
- SetSynthesizingVCLEvent( sal_False );
+ std::vector<RowPos>::iterator iter = std::find(itStart, itEnd, rangeOfRows[i]);
+ selectedRows.erase(iter);
}
+ pTable->selectionChanged(true);
+ pTable->Invalidate();
+ SetSynthesizingVCLEvent( sal_True );
+ pTable->Select();
+ SetSynthesizingVCLEvent( sal_False );
}
void SAL_CALL SVTXGridControl::deselectAllRows() throw (::com::sun::star::uno::RuntimeException)
@@ -869,7 +871,7 @@ void SVTXGridControl::ImplCallItemListeners()
aEvent.Range = diff;
}
//selected row changed
- else if(diff == 0)
+ else if(diff == 0 && actSelRowCount != 0)
{
aEvent.Row = selRows[actSelRowCount-1];
aEvent.Action = com::sun::star::awt::grid::SelectionEventType(2);
diff --git a/svx/inc/htmlmode.hxx b/svx/inc/htmlmode.hxx
index a1c5bf0cdf11..dab1b5b1db70 100644
--- a/svx/inc/htmlmode.hxx
+++ b/svx/inc/htmlmode.hxx
@@ -27,28 +27,7 @@
#ifndef _SVX_HTMLMODE_HXX
#define _SVX_HTMLMODE_HXX
-// include ---------------------------------------------------------------
-
-// define ----------------------------------------------------------------
-
-#define HTMLMODE_ON 0x0001
-#define HTMLMODE_PARA_BORDER 0x0002 /* Absatzumrandungen */
-#define HTMLMODE_PARA_DISTANCE 0x0004 /* bestimmte Absatzabstaende */
-#define HTMLMODE_SMALL_CAPS 0x0008 /* Kapitaelchen */
-#define HTMLMODE_FRM_COLUMNS 0x0010 /* spaltige Rahmen */
-#define HTMLMODE_SOME_STYLES 0x0020 /* mind. MS IE */
-#define HTMLMODE_FULL_STYLES 0x0040 /* == SW */
-#define HTMLMODE_BLINK 0x0080 /* blinkende Zeichen*/
-#define HTMLMODE_PARA_BLOCK 0x0100 /* Blocksatz */
-#define HTMLMODE_DROPCAPS 0x0200 /* Initialen*/
-#define HTMLMODE_FIRSTLINE 0x0400 /* Erstzeileneinzug mit Spacer == NS 3.0 */
-#define HTMLMODE_GRAPH_POS 0x0800 /* Grafikpositionen Hintergrund */
-#define HTMLMODE_FULL_ABS_POS 0x1000 /* abs. Rahmenpositionierung */
-#define HTMLMODE_SOME_ABS_POS 0x2000 /* abs. Rahmenpositionierung vollst.*/
-#define HTMLMODE_RESERVED1 0x4000
-#define HTMLMODE_RESERVED0 0x8000
-
-
+#include <sfx2/htmlmode.hxx>
#endif
diff --git a/svx/inc/svx/svxids.hrc b/svx/inc/svx/svxids.hrc
index 7a90b5c75526..1cdfc9fb2b9e 100644..100755
--- a/svx/inc/svx/svxids.hrc
+++ b/svx/inc/svx/svxids.hrc
@@ -342,18 +342,19 @@
// Calc-Id's
// --------------------------------------------------------------------------
-#ifndef SC_FUNCTION_START
-#define SC_FUNCTION_START (SID_SC_START + 200)
-#endif
-#ifndef FILE_MENU_END
-#define FILE_MENU_END (SC_FUNCTION_START + 20)
-#endif
-#ifndef EDIT_MENU_START
-#define EDIT_MENU_START (FILE_MENU_END)
-#endif
-#ifndef SC_VIEW_START
-#define SC_VIEW_START (SID_SC_START)
-#endif
+//! moved to sfx2, still in use:
+//#ifndef SC_FUNCTION_START
+//#define SC_FUNCTION_START (SID_SC_START + 200)
+//#endif
+//#ifndef FILE_MENU_END
+//#define FILE_MENU_END (SC_FUNCTION_START + 20)
+//#endif
+//#ifndef EDIT_MENU_START
+//#define EDIT_MENU_START (FILE_MENU_END)
+//#endif
+//#ifndef SC_VIEW_START
+//#define SC_VIEW_START (SID_SC_START)
+//#endif
#define SID_OUTLINE_HIDE (SID_SC_START + 329)
#define SID_OUTLINE_SHOW (SID_SC_START + 330)
@@ -365,8 +366,9 @@
#define SID_ATTR_SECIALCHAR (SID_SC_START + 581)
#define SID_ATTR_SPECIALCHAR (SID_SC_START + 581)
-#define FID_CHG_RECORD (EDIT_MENU_START + 18)
-#define SID_CHG_PROTECT (SC_VIEW_START + 84)
+//! moved to sfx2, still in use:
+//#define FID_CHG_RECORD (EDIT_MENU_START + 18)
+//#define SID_CHG_PROTECT (SC_VIEW_START + 84)
// --------------------------------------------------------------------------
// Writer-Id's
@@ -402,9 +404,10 @@
#define FN_PGPREVIEW (SID_SW_START + 1250)
#define FN_SHOW_MULTIPLE_PAGES (FN_PGPREVIEW + 2)
-#define FN_EDIT2 (SID_SW_START + 1800)
-#define FN_REDLINE_PROTECT (FN_EDIT2 + 23)
-#define FN_REDLINE_ON (FN_EDIT2 + 25)
+//! moved to sfx2, still in use:
+//#define FN_EDIT2 (SID_SW_START + 1800)
+//#define FN_REDLINE_PROTECT (FN_EDIT2 + 23)
+//#define FN_REDLINE_ON (FN_EDIT2 + 25)
// --------------------------------------------------------------------------
// Svx-Id's
@@ -749,7 +752,10 @@
#define SID_ATTR_3D_AMBIENTINTENSITY ( SID_SVX_START + 410 ) /* --> Slots mit --> koennen demnaechst entfallen ( heute 12.03.1998 ) */
#define SID_ATTR_3D_AMBIENTCOLOR ( SID_SVX_START + 411 )
#define SID_IMPORT_GRAPH_LINK ( SID_SVX_START + 412 )
-#define SID_HTML_MODE ( SID_SVX_START + 414 )
+
+//! moved to sfx2, still in use:
+//#define SID_HTML_MODE ( SID_SVX_START + 414 )
+
#define SID_RULER_PROTECT ( SID_SVX_START + 415 )
//#define SID_INET_DLG ( SID_SVX_START + 416 ) -> sfxsids.hrc
#define SID_COLOR_CONTROL ( SID_SVX_START + 417 )
diff --git a/svx/inc/svx/unoshprp.hxx b/svx/inc/svx/unoshprp.hxx
index fcf86488f7a3..232708d9a14a 100644
--- a/svx/inc/svx/unoshprp.hxx
+++ b/svx/inc/svx/unoshprp.hxx
@@ -160,7 +160,7 @@
#define OWN_ATTR_PAGE_NUMBER (OWN_ATTR_VALUE_START+65)
#define OWN_ATTR_THUMBNAIL (OWN_ATTR_VALUE_START+66)
#define OWN_ATTR_PERSISTNAME (OWN_ATTR_VALUE_START+67)
-//#define OWN_ATTR_HASLEVELS (OWN_ATTR_VALUE_START+68)
+#define OWN_ATTR_OLE_EMBEDDED_OBJECT_NONEWCLIENT (OWN_ATTR_VALUE_START+68)
#define OWN_ATTR_MEDIA_URL (OWN_ATTR_VALUE_START+69)
#define OWN_ATTR_MEDIA_PREFERREDSIZE (OWN_ATTR_VALUE_START+70)
#define OWN_ATTR_MEDIA_LOOP (OWN_ATTR_VALUE_START+71)
diff --git a/svx/source/dialog/hdft.cxx b/svx/source/dialog/hdft.cxx
index 729d4f748921..551f682abda0 100644
--- a/svx/source/dialog/hdft.cxx
+++ b/svx/source/dialog/hdft.cxx
@@ -37,6 +37,8 @@
#include <vcl/msgbox.hxx>
#include <vcl/graph.hxx>
+#include <sfx2/sfxsids.hrc>
+#include <svx/svxids.hrc>
#include <svx/dialogs.hrc>
#include "hdft.hrc"
#include <svl/intitem.hxx>
diff --git a/svx/source/smarttags/SmartTagMgr.cxx b/svx/source/smarttags/SmartTagMgr.cxx
index b3a19ecc65bd..0070646b3330 100644
--- a/svx/source/smarttags/SmartTagMgr.cxx
+++ b/svx/source/smarttags/SmartTagMgr.cxx
@@ -35,8 +35,7 @@
#include <vcl/svapp.hxx>
#include <com/sun/star/smarttags/XSmartTagRecognizer.hpp>
#include <com/sun/star/smarttags/XSmartTagAction.hpp>
-#include <com/sun/star/deployment/XPackageManagerFactory.hpp>
-#include <com/sun/star/deployment/thePackageManagerFactory.hpp>
+#include <com/sun/star/deployment/ExtensionManager.hpp>
#include <com/sun/star/text/XTextMarkup.hpp>
#include <com/sun/star/smarttags/SmartTagRecognizerMode.hpp>
#include <com/sun/star/i18n/XBreakIterator.hpp>
@@ -472,11 +471,9 @@ void SmartTagMgr::RegisterListener()
// register as listener at package manager
try
{
- Reference<deployment::XPackageManagerFactory> xPackageManagerFactory(
- deployment::thePackageManagerFactory::get( mxContext ) );
- Reference<deployment::XPackageManager> xPackageManager(
- xPackageManagerFactory->getPackageManager( C2U("user" ) ) );
- Reference< util::XModifyBroadcaster > xMB ( xPackageManager, UNO_QUERY_THROW );
+ Reference<deployment::XExtensionManager> xExtensionManager(
+ deployment::ExtensionManager::get( mxContext ) );
+ Reference< util::XModifyBroadcaster > xMB ( xExtensionManager, UNO_QUERY_THROW );
Reference< util::XModifyListener > xListener( this );
xMB->addModifyListener( xListener );
diff --git a/svx/source/svdraw/svdoole2.cxx b/svx/source/svdraw/svdoole2.cxx
index 88d9aba87673..483c247c064f 100644
--- a/svx/source/svdraw/svdoole2.cxx
+++ b/svx/source/svdraw/svdoole2.cxx
@@ -1714,8 +1714,8 @@ void SdrOle2Obj::ImpSetVisAreaSize()
if ( pClient || bHasOwnClient )
{
// TODO/LATER: IMHO we need to do similar things when object is UIActive or OutplaceActive?! (MBA)
- if ( (nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
- svt::EmbeddedObjectRef::TryRunningState( xObjRef.GetObject() )
+ if ( ((nMiscStatus & embed::EmbedMisc::MS_EMBED_RECOMPOSEONRESIZE) &&
+ svt::EmbeddedObjectRef::TryRunningState( xObjRef.GetObject() ))
|| xObjRef->getCurrentState() == embed::EmbedStates::INPLACE_ACTIVE
)
{
@@ -1832,11 +1832,7 @@ void SdrOle2Obj::NbcResize(const Point& rRef, const Fraction& xFact, const Fract
// if the object needs recompose on resize
// the client site should be created before the resize will take place
// check whether there is no client site and create it if necessary
- if ( !SfxInPlaceClient::GetClient( dynamic_cast<SfxObjectShell*>(pModel->GetPersist()), xObjRef.GetObject() )
- && !( mpImpl->pLightClient && xObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >( mpImpl->pLightClient ) ) )
- {
- AddOwnLightClient();
- }
+ AddOwnLightClient();
}
}
@@ -2197,26 +2193,32 @@ sal_Bool SdrOle2Obj::CalculateNewScaling( Fraction& aScaleWidth, Fraction& aScal
sal_Bool SdrOle2Obj::AddOwnLightClient()
{
// The Own Light Client must be registered in object only using this method!
- Connect();
-
- if ( xObjRef.is() && mpImpl->pLightClient )
+ if ( !SfxInPlaceClient::GetClient( dynamic_cast<SfxObjectShell*>(pModel->GetPersist()), xObjRef.GetObject() )
+ && !( mpImpl->pLightClient && xObjRef->getClientSite() == uno::Reference< embed::XEmbeddedClient >( mpImpl->pLightClient ) ) )
{
- Fraction aScaleWidth;
- Fraction aScaleHeight;
- Size aObjAreaSize;
- if ( CalculateNewScaling( aScaleWidth, aScaleHeight, aObjAreaSize ) )
+ Connect();
+
+ if ( xObjRef.is() && mpImpl->pLightClient )
{
- mpImpl->pLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
- try {
- xObjRef->setClientSite( mpImpl->pLightClient );
- return sal_True;
- } catch( uno::Exception& )
- {}
+ Fraction aScaleWidth;
+ Fraction aScaleHeight;
+ Size aObjAreaSize;
+ if ( CalculateNewScaling( aScaleWidth, aScaleHeight, aObjAreaSize ) )
+ {
+ mpImpl->pLightClient->SetSizeScale( aScaleWidth, aScaleHeight );
+ try {
+ xObjRef->setClientSite( mpImpl->pLightClient );
+ return sal_True;
+ } catch( uno::Exception& )
+ {}
+ }
+
}
+ return sal_False;
}
- return sal_False;
+ return sal_True;
}
//////////////////////////////////////////////////////////////////////////////
diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx
index 9a9717b34495..ea875d8d9427 100644
--- a/svx/source/unodraw/unoprov.cxx
+++ b/svx/source/unodraw/unoprov.cxx
@@ -478,6 +478,7 @@ SfxItemPropertyMapEntry* ImplGetSvxOle2PropertyMap()
{ MAP_CHAR_LEN("ThumbnailGraphicURL"), OWN_ATTR_THUMBNAIL , &::getCppuType(( const ::rtl::OUString*)0), 0, 0 },
{ MAP_CHAR_LEN("Model"), OWN_ATTR_OLEMODEL , &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0},
{ MAP_CHAR_LEN("EmbeddedObject"), OWN_ATTR_OLE_EMBEDDED_OBJECT , &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XEmbeddedObject >*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0},
+ { MAP_CHAR_LEN("EmbeddedObjectNoNewClient"),OWN_ATTR_OLE_EMBEDDED_OBJECT_NONEWCLIENT, &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XEmbeddedObject >*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0},
{ MAP_CHAR_LEN("OriginalSize"), OWN_ATTR_OLESIZE , &::getCppuType(( const ::com::sun::star::awt::Size*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0},
{ MAP_CHAR_LEN("CLSID"), OWN_ATTR_CLSID , &::getCppuType(( const ::rtl::OUString*)0), 0, 0 },
{ MAP_CHAR_LEN("IsInternal"), OWN_ATTR_INTERNAL_OLE , &::getBooleanCppuType() , ::com::sun::star::beans::PropertyAttribute::READONLY, 0},
diff --git a/svx/source/unodraw/unoshap4.cxx b/svx/source/unodraw/unoshap4.cxx
index cf3bdc6621f0..96804103f610 100644
--- a/svx/source/unodraw/unoshap4.cxx
+++ b/svx/source/unodraw/unoshap4.cxx
@@ -355,22 +355,26 @@ bool SvxOle2Shape::getPropertyValueImpl( const ::rtl::OUString& rName, const Sfx
case OWN_ATTR_OLEMODEL:
case OWN_ATTR_OLE_EMBEDDED_OBJECT:
+ case OWN_ATTR_OLE_EMBEDDED_OBJECT_NONEWCLIENT:
{
SdrOle2Obj* pObj = dynamic_cast<SdrOle2Obj*>( mpObj.get() );
if( pObj )
{
uno::Reference < embed::XEmbeddedObject > xObj( pObj->GetObjRef() );
if ( xObj.is()
- && ( pProperty->nWID == OWN_ATTR_OLE_EMBEDDED_OBJECT || svt::EmbeddedObjectRef::TryRunningState( xObj ) ) )
+ && ( pProperty->nWID == OWN_ATTR_OLE_EMBEDDED_OBJECT || pProperty->nWID == OWN_ATTR_OLE_EMBEDDED_OBJECT_NONEWCLIENT || svt::EmbeddedObjectRef::TryRunningState( xObj ) ) )
{
// Discussed with CL fue to the before GetPaintingPageView
// usage. Removed it, former fallback is used now
+ if ( pProperty->nWID == OWN_ATTR_OLEMODEL || pProperty->nWID == OWN_ATTR_OLE_EMBEDDED_OBJECT )
+ {
#ifdef DBG_UTIL
- const sal_Bool bSuccess(pObj->AddOwnLightClient());
- OSL_ENSURE( bSuccess, "An object without client is provided!" );
+ const sal_Bool bSuccess(pObj->AddOwnLightClient());
+ OSL_ENSURE( bSuccess, "An object without client is provided!" );
#else
- pObj->AddOwnLightClient();
+ pObj->AddOwnLightClient();
#endif
+ }
if ( pProperty->nWID == OWN_ATTR_OLEMODEL )
rValue <<= pObj->GetObjRef()->getComponent();
diff --git a/sw/inc/SidebarWin.hxx b/sw/inc/SidebarWin.hxx
index b74931d8d9ef..729dc18a780b 100644
--- a/sw/inc/SidebarWin.hxx
+++ b/sw/inc/SidebarWin.hxx
@@ -170,7 +170,7 @@ class SwSidebarWin : public Window
virtual bool IsProtected() {return mbReadonly;};
DECL_LINK( WindowEventListener, VclSimpleEvent* );
- inline const bool IsMouseOverSidebarWin() const { return mbMouseOver; }
+ inline bool IsMouseOverSidebarWin() const { return mbMouseOver; }
void SetLanguage(const SvxLanguageItem aNewItem);
diff --git a/sw/inc/docsh.hxx b/sw/inc/docsh.hxx
index 16e6cd047fb6..3dd338a5e129 100755..100644
--- a/sw/inc/docsh.hxx
+++ b/sw/inc/docsh.hxx
@@ -29,6 +29,7 @@
#include <rtl/ref.hxx>
#include <com/sun/star/frame/XController.hpp>
+#include <com/sun/star/uno/Sequence.h>
#include <vcl/timer.hxx>
#include <sfx2/docfac.hxx>
#include <sfx2/objsh.hxx>
@@ -302,6 +303,14 @@ public:
SfxInPlaceClient* GetIPClient( const ::svt::EmbeddedObjectRef& xObjRef );
virtual const ::sfx2::IXmlIdRegistry* GetXmlIdRegistry() const;
+
+ // passwword protection for Writer (derived from SfxObjectShell)
+ // see also: FN_REDLINE_ON, FN_REDLINE_ON
+ virtual bool IsChangeRecording() const;
+ virtual bool HasChangeRecordProtection() const;
+ virtual void SetChangeRecording( bool bActivate );
+ virtual bool SetProtectionPassword( const String &rPassword );
+ virtual bool GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash );
};
class Graphic;
diff --git a/sw/inc/swmodule.hxx b/sw/inc/swmodule.hxx
index 8ad108513297..c8e601143877 100644
--- a/sw/inc/swmodule.hxx
+++ b/sw/inc/swmodule.hxx
@@ -133,7 +133,7 @@ protected:
public:
// public Data - used for internal Clipboard / Drag & Drop / XSelection
- SwTransferable *pClipboard, *pDragDrop, *pXSelection;
+ SwTransferable *pDragDrop, *pXSelection;
TYPEINFO();
SFX_DECL_INTERFACE(SW_INTERFACE_MODULE)
diff --git a/sw/inc/unotext.hxx b/sw/inc/unotext.hxx
index 76fa7ee3befe..d6ada94d5396 100644
--- a/sw/inc/unotext.hxx
+++ b/sw/inc/unotext.hxx
@@ -31,6 +31,7 @@
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/text/XText.hpp>
+#include <com/sun/star/text/XTextCopy.hpp>
#include <com/sun/star/text/XTextRangeCompare.hpp>
#include <com/sun/star/text/XRelativeTextContentInsert.hpp>
#include <com/sun/star/text/XRelativeTextContentRemove.hpp>
@@ -62,6 +63,7 @@ class SwXText
, public ::com::sun::star::lang::XUnoTunnel
, public ::com::sun::star::beans::XPropertySet
, public ::com::sun::star::text::XTextAppendAndConvert
+ , public ::com::sun::star::text::XTextCopy
, public ::com::sun::star::text::XTextRangeCompare
, public ::com::sun::star::text::XRelativeTextContentInsert
, public ::com::sun::star::text::XRelativeTextContentRemove
@@ -333,6 +335,11 @@ public:
throw (::com::sun::star::lang::IllegalArgumentException,
::com::sun::star::uno::RuntimeException);
+ // XTextCopy
+ virtual void SAL_CALL copyText(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::text::XTextCopy >& xSource )
+ throw (::com::sun::star::uno::RuntimeException);
};
#endif // SW_UNOTEXT_HXX
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index c27ac20b0013..aae7ec7a019c 100644..100755
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -6623,7 +6623,7 @@ SfxBoolItem ProtectTraceChangeMode FN_REDLINE_PROTECT
FastCall = FALSE,
HasCoreId = FALSE,
HasDialog = FALSE,
- ReadOnlyDoc = TRUE,
+ ReadOnlyDoc = FALSE,
Toggle = FALSE,
Container = FALSE,
RecordAbsolute = FALSE,
diff --git a/sw/source/core/access/accportions.cxx b/sw/source/core/access/accportions.cxx
index c2a6d011be85..093d22136d81 100644
--- a/sw/source/core/access/accportions.cxx
+++ b/sw/source/core/access/accportions.cxx
@@ -173,6 +173,17 @@ void SwAccessiblePortionData::Special(
sDisplay = aTmpBuffer.makeStringAndClear();
break;
}
+ // --> OD 2010-06-04 #i111768# - apply patch from kstribley:
+ // Include the control characters.
+ case POR_CONTROLCHAR:
+ {
+ OUStringBuffer aTmpBuffer( rText.Len() + 1 );
+ aTmpBuffer.append( rText );
+ aTmpBuffer.append( pTxtNode->GetTxt().GetChar(nModelPosition) );
+ sDisplay = aTmpBuffer.makeStringAndClear();
+ break;
+ }
+ // <--
default:
sDisplay = rText;
break;
diff --git a/sw/source/core/doc/number.cxx b/sw/source/core/doc/number.cxx
index d60abccddc21..7af292626f06 100644
--- a/sw/source/core/doc/number.cxx
+++ b/sw/source/core/doc/number.cxx
@@ -998,7 +998,15 @@ void SwNumRule::SetInvalidRule(BOOL bFlag)
for ( aIter = maTxtNodeList.begin(); aIter != maTxtNodeList.end(); ++aIter )
{
const SwTxtNode* pTxtNode = *aIter;
- aLists.insert( pTxtNode->GetDoc()->getListByName( pTxtNode->GetListId() ) );
+ // --> OD 2010-06-04 #i111681# - applying patch from cmc
+// aLists.insert( pTxtNode->GetDoc()->getListByName( pTxtNode->GetListId() ) );
+ SwList* pList = pTxtNode->GetDoc()->getListByName( pTxtNode->GetListId() );
+ ASSERT( pList, "<SwNumRule::SetInvalidRule(..)> - list at which the text node is registered at does not exist. This is a serious issue --> please inform OD.");
+ if ( pList )
+ {
+ aLists.insert( pList );
+ }
+ // <--
}
std::for_each( aLists.begin(), aLists.end(),
std::mem_fun( &SwList::InvalidateListTree ) );
diff --git a/sw/source/core/layout/pagechg.cxx b/sw/source/core/layout/pagechg.cxx
index 72976a786fa1..b45f1bcb2ceb 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -1385,11 +1385,15 @@ SwPageFrm *SwFrm::InsertPage( SwPageFrm *pPrevPage, BOOL bFtn )
return pPage;
}
-// false = right, true = left
sw::sidebarwindows::SidebarPosition SwPageFrm::SidebarPosition() const
{
- if (!GetShell() || GetShell()->getIDocumentSettingAccess()->get(IDocumentSettingAccess::BROWSE_MODE))
- return sw::sidebarwindows::SIDEBAR_NONE;
+ if ( !GetShell() ||
+ GetShell()->getIDocumentSettingAccess()->get(IDocumentSettingAccess::BROWSE_MODE) )
+ {
+ // --> OD 2010-06-03 #i111964# - provide default sidebar position
+ return sw::sidebarwindows::SIDEBAR_RIGHT;
+ // <--
+ }
else
{
const bool bLTR = GetUpper() ? static_cast<const SwRootFrm*>(GetUpper())->IsLeftToRightViewLayout() : true;
diff --git a/sw/source/core/text/porfld.cxx b/sw/source/core/text/porfld.cxx
index 1a05aa38098a..59edb6fa59c9 100644
--- a/sw/source/core/text/porfld.cxx
+++ b/sw/source/core/text/porfld.cxx
@@ -416,6 +416,12 @@ sal_Bool SwFldPortion::Format( SwTxtFormatInfo &rInf )
// case CHAR_RLM :
// case CHAR_LRM :
// <--
+ // --> OD 2010-06-03 #i111750#
+ // - Erasing further control characters from field string in
+ // to avoid loop.
+ case CH_TXTATR_BREAKWORD:
+ case CH_TXTATR_INWORD:
+ // <--
{
aNew.Erase( 0, 1 );
++nNextOfst;
diff --git a/sw/source/core/unocore/unotext.cxx b/sw/source/core/unocore/unotext.cxx
index d8682062f039..3ddcfc1d2ed7 100644
--- a/sw/source/core/unocore/unotext.cxx
+++ b/sw/source/core/unocore/unotext.cxx
@@ -76,8 +76,6 @@
#include <stdlib.h>
#include <iostream>
-
-
using namespace ::com::sun::star;
using ::rtl::OUString;
@@ -277,6 +275,10 @@ SwXText::queryInterface(const uno::Type& rType) throw (uno::RuntimeException)
{
aRet <<= uno::Reference< text::XTextContentAppend >(this);
}
+ else if(rType == text::XTextCopy::static_type())
+ {
+ aRet <<= uno::Reference< text::XTextCopy >( this );
+ }
return aRet;
}
/* -----------------------------15.03.00 17:42--------------------------------
@@ -1860,6 +1862,32 @@ static bool lcl_SimilarPosition( const sal_Int32 nPos1, const sal_Int32 nPos2 )
return abs( nPos1 - nPos2 ) < COL_POS_FUZZY;
}
+void SwXText::copyText(
+ const uno::Reference< text::XTextCopy >& xSource )
+ throw ( uno::RuntimeException )
+{
+ uno::Reference< lang::XUnoTunnel > xTTunnel( xSource, uno::UNO_QUERY_THROW );
+ SwXText* pText = 0;
+ pText = reinterpret_cast< SwXText* >(
+ sal::static_int_cast< sal_IntPtr >( xTTunnel->getSomething( SwXText::getUnoTunnelId()) ));
+
+ uno::Reference< text::XText > xText( xSource, uno::UNO_QUERY_THROW );
+ uno::Reference< text::XTextCursor > xCursor = xText->createTextCursor( );
+ xCursor->gotoEnd( sal_True );
+
+ uno::Reference< lang::XUnoTunnel > xTunnel( xCursor, uno::UNO_QUERY_THROW );
+
+ OTextCursorHelper* pCursor = 0;
+ pCursor = reinterpret_cast< OTextCursorHelper* >(
+ sal::static_int_cast< sal_IntPtr >( xTunnel->getSomething( OTextCursorHelper::getUnoTunnelId()) ));
+ if ( pCursor )
+ {
+ SwNodeIndex rNdIndex( *GetStartNode( ), 1 );
+ SwPosition rPos( rNdIndex );
+ m_pImpl->m_pDoc->CopyRange( *pCursor->GetPaM( ), rPos, false );
+ }
+}
+
void SwXText::Impl::ConvertCell(
const bool bFirstCell,
const uno::Sequence< uno::Reference< text::XTextRange > > & rCell,
diff --git a/sw/source/filter/basflt/fltini.cxx b/sw/source/filter/basflt/fltini.cxx
index 553554df8f52..6f4cca8993d2 100644
--- a/sw/source/filter/basflt/fltini.cxx
+++ b/sw/source/filter/basflt/fltini.cxx
@@ -1,1031 +1,1037 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sw.hxx"
-#define _SVSTDARR_STRINGS
-
-#include <string.h>
-#include <stdio.h> // sscanf
-#include <hintids.hxx>
-#include <i18npool/lang.h>
-#include <i18npool/mslangid.hxx>
-#include <vcl/msgbox.hxx>
-#include <svtools/parhtml.hxx>
-#include <svl/svstdarr.hxx>
-#include <sot/storage.hxx>
-#include <sot/clsids.hxx>
-#include <sfx2/app.hxx>
-#include <sfx2/docfilt.hxx>
-#include <sfx2/fcontnr.hxx>
-#include <sfx2/docfile.hxx>
-#include <editeng/lrspitem.hxx>
-#include <editeng/tstpitem.hxx>
-#include <doc.hxx>
-#include <docary.hxx>
-#include <pam.hxx>
-#include <shellio.hxx>
-#include <errhdl.hxx>
-#include <docsh.hxx>
-#include <wdocsh.hxx>
-#include <fltini.hxx>
-#include <hints.hxx>
-#include <frmatr.hxx>
-#include <fmtfsize.hxx>
-#include <swtable.hxx>
-#include <fmtcntnt.hxx>
-#include <editeng/boxitem.hxx>
-#include <frmatr.hxx>
-#include <frmfmt.hxx>
-#include <numrule.hxx>
-#include <ndtxt.hxx>
-#include <swfltopt.hxx>
-#include <swerror.h>
-#include <osl/module.hxx>
-
-using namespace utl;
-using rtl::OUString;
-using namespace com::sun::star::uno;
-
-SwRead ReadAscii = 0, /*ReadSwg = 0, ReadSw3 = 0,*/
- ReadHTML = 0, ReadXML = 0;
-
-Reader* GetRTFReader();
-Reader* GetWW8Reader();
-
-// Note: if editing, please don't forget to modify also the enum
-// ReaderWriterEnum and aFilterDetect in shellio.hxx
-SwReaderWriterEntry aReaderWriter[] =
-{
- SwReaderWriterEntry( &::GetRTFReader, &::GetRTFWriter, TRUE ),
- SwReaderWriterEntry( 0, &::GetASCWriter, FALSE ),
- SwReaderWriterEntry( &::GetWW8Reader, &::GetWW8Writer, TRUE ),
- SwReaderWriterEntry( &::GetWW8Reader, &::GetWW8Writer, TRUE ),
- SwReaderWriterEntry( &::GetRTFReader, &::GetRTFWriter, TRUE ),
- SwReaderWriterEntry( 0, &::GetHTMLWriter, TRUE ),
- SwReaderWriterEntry( 0, 0, TRUE ),
- SwReaderWriterEntry( &::GetWW8Reader, 0, TRUE ),
- SwReaderWriterEntry( 0, &::GetXMLWriter, TRUE ),
- SwReaderWriterEntry( 0, &::GetASCWriter, TRUE ),
- SwReaderWriterEntry( 0, &::GetASCWriter, TRUE )
-};
-
-Reader* SwReaderWriterEntry::GetReader()
-{
- if ( pReader )
- return pReader;
- else if ( fnGetReader )
- {
- pReader = (*fnGetReader)();
- return pReader;
- }
- return NULL;
-}
-
-void SwReaderWriterEntry::GetWriter( const String& rNm, const String& rBaseURL, WriterRef& xWrt ) const
-{
- if ( fnGetWriter )
- (*fnGetWriter)( rNm, rBaseURL, xWrt );
- else
- xWrt = WriterRef(0);
-}
-
-/*SwRead SwGetReaderSw3() // SW_DLLPUBLIC
-{
- return ReadSw3;
-}
-*/
-SwRead SwGetReaderXML() // SW_DLLPUBLIC
-{
- return ReadXML;
-}
-
-bool IsDocShellRegistered()
-{
- return 0 != SwDocShell::_GetInterface();
-}
-
-inline void _SetFltPtr( USHORT rPos, SwRead pReader )
-{
- aReaderWriter[ rPos ].pReader = pReader;
-}
-
-void _InitFilter()
-{
- _SetFltPtr( READER_WRITER_BAS, (ReadAscii = new AsciiReader) );
- _SetFltPtr( READER_WRITER_HTML, (ReadHTML = new HTMLReader) );
- _SetFltPtr( READER_WRITER_WW1, new WW1Reader );
- _SetFltPtr( READER_WRITER_XML, (ReadXML = new XMLReader) );
-
-#ifdef NEW_WW97_EXPORT
- aReaderWriter[ READER_WRITER_WW1 ].fnGetWriter = &::GetWW8Writer;
- aReaderWriter[ READER_WRITER_WW5 ].fnGetWriter = &::GetWW8Writer;
-#endif
-
- _SetFltPtr( READER_WRITER_TEXT_DLG, ReadAscii );
- _SetFltPtr( READER_WRITER_TEXT, ReadAscii );
-}
-
-void _FinitFilter()
-{
- // die Reader vernichten
- for( USHORT n = 0; n < MAXFILTER; ++n )
- {
- SwReaderWriterEntry& rEntry = aReaderWriter[n];
- if( rEntry.bDelReader && rEntry.pReader )
- delete rEntry.pReader, rEntry.pReader = NULL;
- }
-}
-
-
-/* */
-
-namespace SwReaderWriter {
-
-Reader* GetReader( ReaderWriterEnum eReader )
-{
- return aReaderWriter[eReader].GetReader();
-}
-
-void GetWriter( const String& rFltName, const String& rBaseURL, WriterRef& xRet )
-{
- for( USHORT n = 0; n < MAXFILTER; ++n )
- if( aFilterDetect[n].IsFilter( rFltName ) )
- {
- aReaderWriter[n].GetWriter( rFltName, rBaseURL, xRet );
- break;
- }
-}
-
-SwRead GetReader( const String& rFltName )
-{
- SwRead pRead = 0;
- for( USHORT n = 0; n < MAXFILTER; ++n )
- if( aFilterDetect[n].IsFilter( rFltName ) )
- {
- pRead = aReaderWriter[n].GetReader();
- // fuer einige Reader noch eine Sonderbehandlung:
- if ( pRead )
- pRead->SetFltName( rFltName );
- break;
- }
- return pRead;
-}
-
-} // namespace SwReaderWriter
-
-/* */
-
-/////////////// die Storage Reader/Writer ////////////////////////////////
-
-/*void GetSw3Writer( const String&, const String& rBaseURL, WriterRef& xRet )
-{
- DBG_ERROR( "Shouldn't happen!");
- xRet = new Sw3Writer;
-}
-*/
-
-ULONG StgReader::OpenMainStream( SvStorageStreamRef& rRef, USHORT& rBuffSize )
-{
- ULONG nRet = ERR_SWG_READ_ERROR;
- ASSERT( pStg, "wo ist mein Storage?" );
- const SfxFilter* pFltr = SwIoSystem::GetFilterOfFormat( aFltName );
- if( pFltr )
- {
- rRef = pStg->OpenSotStream( SwIoSystem::GetSubStorageName( *pFltr ),
- STREAM_READ | STREAM_SHARE_DENYALL );
-
- if( rRef.Is() )
- {
- if( SVSTREAM_OK == rRef->GetError() )
- {
- USHORT nOld = rRef->GetBufferSize();
- rRef->SetBufferSize( rBuffSize );
- rBuffSize = nOld;
- nRet = 0;
- }
- else
- nRet = rRef->GetError();
- }
- }
- return nRet;
-}
-
-/* */
-/*
-ULONG Sw3Reader::Read( SwDoc &rDoc, SwPaM &rPam, const String & )
-{
- ULONG nRet;
- if( pStg && pIO )
- {
- // TRUE: Vorlagen ueberschreiben
- pIO->SetReadOptions( aOpt,TRUE );
- if( !bInsertMode )
- {
- // Im Laden-Modus darf der PaM-Content-Teil nicht
- // in den Textbereich zeigen (Nodes koennen geloescht werden)
- rPam.GetBound( TRUE ).nContent.Assign( 0, 0 );
- rPam.GetBound( FALSE ).nContent.Assign( 0, 0 );
- }
- nRet = pIO->Load( pStg, bInsertMode ? &rPam : 0 );
- aOpt.ResetAllFmtsOnly();
- pIO->SetReadOptions( aOpt, TRUE );
- }
- else
- {
- ASSERT( !this, "Sw3-Read ohne Storage und/oder IO-System" );
- nRet = ERR_SWG_READ_ERROR;
- }
- return nRet;
-}
-
- // read the sections of the document, which is equal to the medium.
- // returns the count of it
-USHORT Sw3Reader::GetSectionList( SfxMedium& rMedium,
- SvStrings& rStrings ) const
-{
- SvStorageRef aStg( rMedium.GetStorage() );
- const SfxFilter* pFlt = rMedium.GetFilter();
- ASSERT( pFlt && pFlt->GetVersion(),
- "Kein Filter oder Filter ohne FF-Version" );
- if( pFlt && pFlt->GetVersion() )
- aStg->SetVersion( (long)pFlt->GetVersion() );
-
- if( pIO )
- pIO->GetSectionList( &aStg, rStrings );
- return rStrings.Count();
- return 0;
-}
-*/
-
-/*ULONG Sw3Writer::WriteStorage()
-{
- ULONG nRet;
- if( pIO )
- {
- // der gleiche Storage -> Save, sonst SaveAs aufrufen
- if( !bSaveAs )
- nRet = pIO->Save( pOrigPam, bWriteAll );
- else
- nRet = pIO->SaveAs( pStg, pOrigPam, bWriteAll );
-
- pIO = 0; // nach dem Schreiben ist der Pointer ungueltig !!
- }
- else
- {
- ASSERT( !this, "Sw3-Writer ohne IO-System" )
- nRet = ERR_SWG_WRITE_ERROR;
- }
- return nRet;
-}
-
-ULONG Sw3Writer::WriteMedium( SfxMedium& )
-{
- DBG_ERROR( "Shouldn't be used currently!");
- return WriteStorage();
-}
-
-BOOL Sw3Writer::IsSw3Writer() const { return TRUE; }
-*/
-
-void Writer::SetPasswd( const String& ) {}
-
-
-void Writer::SetVersion( const String&, long ) {}
-
-
-BOOL Writer::IsStgWriter() const { return FALSE; }
-//BOOL Writer::IsSw3Writer() const { return FALSE; }
-
-BOOL StgWriter::IsStgWriter() const { return TRUE; }
-
-/* */
-
-
-
-BOOL SwReader::NeedsPasswd( const Reader& /*rOptions*/ )
-{
- BOOL bRes = FALSE;
- return bRes;
-}
-
-
-BOOL SwReader::CheckPasswd( const String& /*rPasswd*/, const Reader& /*rOptions*/ )
-{
- return TRUE;
-}
-
-
-/* */
-
-//-----------------------------------------------------------------------
-// Filter Flags lesen, wird von WW8 / W4W / EXCEL / LOTUS benutzt.
-//-----------------------------------------------------------------------
-
-/*
-<FilterFlags>
- <Excel_Lotus>
- <MinRow cfg:type="long">0</MinRow>
- <MaxRow cfg:type="long">0</MaxRow>
- <MinCol cfg:type="long">0</MinCol>
- <MaxCol cfg:type="long">0</MaxCol>
- </Excel_Lotus>
- <W4W>
- <W4WHD cfg:type="long">0</W4WHD>
- <W4WFT cfg:type="long">0</W4WFT>
- <W4W000 cfg:type="long">0</W4W000>
- </W4W>
- <WinWord>
- <WW1F cfg:type="long">0</WW1F>
- <WW cfg:type="long">0</WW>
- <WW8 cfg:type="long">0</WW8>
- <WWF cfg:type="long">0</WWF>
- <WWFA0 cfg:type="long">0</WWFA0>
- <WWFA1 cfg:type="long">0</WWFA1>
- <WWFA2 cfg:type="long">0</WWFA2>
- <WWFB0 cfg:type="long">0</WWFB0>
- <WWFB1 cfg:type="long">0</WWFB1>
- <WWFB2 cfg:type="long">0</WWFB2>
- <WWFLX cfg:type="long">0</WWFLX>
- <WWFLY cfg:type="long">0</WWFLY>
- <WWFT cfg:type="long">0</WWFT>
- <WWWR cfg:type="long">0</WWWR>
- </WinWord>
- <Writer>
- <SW3Imp cfg:type="long">0</SW3Imp>
- </Writer>
-</FilterFlags>
-*/
-
-#define FILTER_OPTION_ROOT String::CreateFromAscii( \
- RTL_CONSTASCII_STRINGPARAM( "Office.Writer/FilterFlags" ) )
-
-SwFilterOptions::SwFilterOptions( sal_uInt16 nCnt, const sal_Char** ppNames,
- sal_uInt32* pValues )
- : ConfigItem( FILTER_OPTION_ROOT )
-{
- GetValues( nCnt, ppNames, pValues );
-}
-
-void SwFilterOptions::GetValues( sal_uInt16 nCnt, const sal_Char** ppNames,
- sal_uInt32* pValues )
-{
- Sequence<OUString> aNames( nCnt );
- OUString* pNames = aNames.getArray();
- USHORT n;
-
- for( n = 0; n < nCnt; ++n )
- pNames[ n ] = OUString::createFromAscii( ppNames[ n ] );
- Sequence<Any> aValues = GetProperties( aNames );
-
- if( nCnt == aValues.getLength() )
- {
- const Any* pAnyValues = aValues.getConstArray();
- for( n = 0; n < nCnt; ++n )
- pValues[ n ] = pAnyValues[ n ].hasValue()
- ? *(sal_uInt32*)pAnyValues[ n ].getValue()
- : 0;
- }
- else
- for( n = 0; n < nCnt; ++n )
- pValues[ n ] = 0;
-}
-
-void SwFilterOptions::Commit() {}
-void SwFilterOptions::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
-
-/* */
-
-
-void StgReader::SetFltName( const String& rFltNm )
-{
- if( SW_STORAGE_READER & GetReaderType() )
- aFltName = rFltNm;
-}
-
-
-/* */
-
-SwRelNumRuleSpaces::SwRelNumRuleSpaces( SwDoc& rDoc, BOOL bNDoc )
- : bNewDoc( bNDoc )
-{
- pNumRuleTbl = new SwNumRuleTbl( 8, 8 );
- if( !bNDoc )
- pNumRuleTbl->Insert( &rDoc.GetNumRuleTbl(), 0 );
-}
-
-SwRelNumRuleSpaces::~SwRelNumRuleSpaces()
-{
- if( pNumRuleTbl )
- {
- pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
- delete pNumRuleTbl;
- }
-}
-
-void SwRelNumRuleSpaces::SetNumRelSpaces( SwDoc& rDoc )
-{
- const SwNumRuleTbl* pRuleTbl = NULL;
-
- if( !bNewDoc )
- {
- // jetzt alle schon vorhanden NumRules aus dem Array entfernen,
- // damit nur die neuen angepasst werden
- SwNumRuleTbl aNumRuleTbl;
- aNumRuleTbl.Insert( pNumRuleTbl, 0 );
- pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
- const SwNumRuleTbl& rRuleTbl = rDoc.GetNumRuleTbl();
- SwNumRule* pRule;
-
- for( USHORT n = 0; n < rRuleTbl.Count(); ++n )
- if( USHRT_MAX == aNumRuleTbl.GetPos( ( pRule = rRuleTbl[ n ] )))
- // war noch nicht vorhanden, also neu
- pNumRuleTbl->Insert( pRule, pNumRuleTbl->Count() );
-
- aNumRuleTbl.Remove( 0, aNumRuleTbl.Count() );
-
- pRuleTbl = pNumRuleTbl;
- }
- else
- {
- pRuleTbl = &rDoc.GetNumRuleTbl();
- }
-
- if( pRuleTbl )
- {
- for( USHORT n = pRuleTbl->Count(); n; )
- {
- SwNumRule* pRule = (*pRuleTbl)[ --n ];
- // Rule noch gueltig und am Doc vorhanden?
- if( USHRT_MAX != rDoc.GetNumRuleTbl().GetPos( pRule ))
- {
- // --> OD 2008-02-19 #refactorlists#
-// SwNumRuleInfo aUpd( pRule->GetName() );
-// aUpd.MakeList( rDoc );
-
-// // bei allen nmumerierten Absaetzen vom linken Rand
-// // den absoluten Wert des NumFormates abziehen
-// for( ULONG nUpdPos = 0; nUpdPos < aUpd.GetList().Count();
-// ++nUpdPos )
-// {
-// SwTxtNode* pNd = aUpd.GetList().GetObject( nUpdPos );
-// SetNumLSpace( *pNd, *pRule );
-// }
- SwNumRule::tTxtNodeList aTxtNodeList;
- pRule->GetTxtNodeList( aTxtNodeList );
- for ( SwNumRule::tTxtNodeList::iterator aIter = aTxtNodeList.begin();
- aIter != aTxtNodeList.end(); ++aIter )
- {
- SwTxtNode* pNd = *aIter;
- SetNumLSpace( *pNd, *pRule );
- }
- // <--
- }
- }
- }
-
- if( pNumRuleTbl )
- {
- pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
- delete pNumRuleTbl, pNumRuleTbl = 0;
- }
-
- if( bNewDoc )
- {
- SetOultineRelSpaces( SwNodeIndex( rDoc.GetNodes() ),
- SwNodeIndex( rDoc.GetNodes().GetEndOfContent()));
- }
-}
-
-void SwRelNumRuleSpaces::SetOultineRelSpaces( const SwNodeIndex& rStt,
- const SwNodeIndex& rEnd )
-{
- SwDoc* pDoc = rStt.GetNode().GetDoc();
- const SwOutlineNodes& rOutlNds = pDoc->GetNodes().GetOutLineNds();
- if( rOutlNds.Count() )
- {
- USHORT nPos;
- rOutlNds.Seek_Entry( &rStt.GetNode(), &nPos );
- for( ; nPos < rOutlNds.Count() &&
- rOutlNds[ nPos ]->GetIndex() < rEnd.GetIndex(); ++nPos )
- {
- SwTxtNode* pNd = rOutlNds[ nPos ]->GetTxtNode();
- if( pNd->IsOutline() && !pNd->GetNumRule() )
- SetNumLSpace( *pNd, *pDoc->GetOutlineNumRule() );
- }
- }
-}
-
-void SwRelNumRuleSpaces::SetNumLSpace( SwTxtNode& rNd, const SwNumRule& rRule )
-{
- BOOL bOutlineRule = OUTLINE_RULE == rRule.GetRuleType();
- // --> OD 2005-11-18 #128056#
- // correction of refactoring done by cws swnumtree:
- // - assure a correct level for retrieving numbering format.
-// BYTE nLvl = rNd.GetLevel();
- BYTE nLvl = 0;
- if ( rNd.GetActualListLevel() >= 0 && rNd.GetActualListLevel() < MAXLEVEL )
- {
- nLvl = static_cast< BYTE >(rNd.GetActualListLevel());
- }
- // <--
- const SwNumFmt& rFmt = rRule.Get( nLvl );
- const SvxLRSpaceItem& rLR = rNd.GetSwAttrSet().GetLRSpace();
-
- SvxLRSpaceItem aLR( rLR );
- aLR.SetTxtFirstLineOfst( 0 );
-
- // sagt der Node, das die Numerierung den Wert vorgibt?
- if( !bOutlineRule && rNd.IsSetNumLSpace() )
- aLR.SetTxtLeft( 0 );
- else
- {
- long nLeft = rFmt.GetAbsLSpace(), nParaLeft = rLR.GetTxtLeft();
- if( 0 < rLR.GetTxtFirstLineOfst() )
- nParaLeft += rLR.GetTxtFirstLineOfst();
- else if( nParaLeft >= nLeft )
- // #82963#/#82962#: set correct paragraph indent
- nParaLeft -= nLeft;
- else
- //#83154#, Don't think any of the older #80856# bugfix code is
- //relevent anymore.
- nParaLeft = rLR.GetTxtLeft()+rLR.GetTxtFirstLineOfst();
- aLR.SetTxtLeft( nParaLeft );
- }
-
- if( aLR.GetTxtLeft() != rLR.GetTxtLeft() )
- {
- //bevor rLR geloescht wird!
- long nOffset = rLR.GetTxtLeft() - aLR.GetTxtLeft();
- rNd.SetAttr( aLR );
-
- // Tabs anpassen !!
- const SfxPoolItem* pItem;
- if( SFX_ITEM_SET == rNd.GetSwAttrSet().GetItemState(
- RES_PARATR_TABSTOP, TRUE, &pItem ))
- {
- SvxTabStopItem aTStop( *(SvxTabStopItem*)pItem );
- for( USHORT n = 0; n < aTStop.Count(); ++n )
- {
- SvxTabStop& rTab = (SvxTabStop&)aTStop[ n ];
- if( SVX_TAB_ADJUST_DEFAULT != rTab.GetAdjustment() )
- {
- if( !rTab.GetTabPos() )
- {
- aTStop.Remove( n );
- --n;
- }
- else
- rTab.GetTabPos() += nOffset;
- }
- }
- rNd.SetAttr( aTStop );
- }
- }
-}
-
-/* */
-
-
-void CalculateFlySize(SfxItemSet& rFlySet, const SwNodeIndex& rAnchor,
- SwTwips nPageWidth)
-{
- const SfxPoolItem* pItem = 0;
- if( SFX_ITEM_SET != rFlySet.GetItemState( RES_FRM_SIZE, TRUE, &pItem ) ||
- MINFLY > ((SwFmtFrmSize*)pItem)->GetWidth() )
- {
- SwFmtFrmSize aSz((SwFmtFrmSize&)rFlySet.Get(RES_FRM_SIZE, TRUE));
- if (pItem)
- aSz = (SwFmtFrmSize&)(*pItem);
-
- SwTwips nWidth;
- // dann die Breite des Flys selbst bestimmen. Ist eine Tabelle
- // defininiert, dann benutze deren Breite, sonst die Breite der
- // Seite
- const SwTableNode* pTblNd = rAnchor.GetNode().FindTableNode();
- if( pTblNd )
- nWidth = pTblNd->GetTable().GetFrmFmt()->GetFrmSize().GetWidth();
- else
- nWidth = nPageWidth;
-
- const SwNodeIndex* pSttNd = ((SwFmtCntnt&)rFlySet.Get( RES_CNTNT )).
- GetCntntIdx();
- if( pSttNd )
- {
- BOOL bOnlyOneNode = TRUE;
- ULONG nMinFrm = 0;
- ULONG nMaxFrm = 0;
- SwTxtNode* pFirstTxtNd = 0;
- SwNodeIndex aIdx( *pSttNd, 1 );
- SwNodeIndex aEnd( *pSttNd->GetNode().EndOfSectionNode() );
- while( aIdx < aEnd )
- {
- SwTxtNode *pTxtNd = aIdx.GetNode().GetTxtNode();
- if( pTxtNd )
- {
- if( !pFirstTxtNd )
- pFirstTxtNd = pTxtNd;
- else if( pFirstTxtNd != pTxtNd )
- {
- // forget it
- bOnlyOneNode = FALSE;
- break;
- }
-
- ULONG nAbsMinCnts;
- pTxtNd->GetMinMaxSize( aIdx.GetIndex(), nMinFrm,
- nMaxFrm, nAbsMinCnts );
- }
- aIdx++;
- }
-
- if( bOnlyOneNode )
- {
- if( nMinFrm < MINLAY && pFirstTxtNd )
- {
- // if the first node dont contained any content, then
- // insert one char in it calc again and delete once again
- SwIndex aNdIdx( pFirstTxtNd );
- pFirstTxtNd->InsertText( String::CreateFromAscii(
- RTL_CONSTASCII_STRINGPARAM( "MM" )), aNdIdx );
- ULONG nAbsMinCnts;
- pFirstTxtNd->GetMinMaxSize( pFirstTxtNd->GetIndex(),
- nMinFrm, nMaxFrm, nAbsMinCnts );
- aNdIdx -= 2;
- pFirstTxtNd->EraseText( aNdIdx, 2 );
- }
-
- // Umrandung und Abstand zum Inhalt beachten
- const SvxBoxItem& rBoxItem = (SvxBoxItem&)rFlySet.Get( RES_BOX );
- USHORT nLine = BOX_LINE_LEFT;
- for( int i = 0; i < 2; ++i )
- {
- const SvxBorderLine* pLn = rBoxItem.GetLine( nLine );
- if( pLn )
- {
- USHORT nWidthTmp = pLn->GetOutWidth() + pLn->GetInWidth();
- nWidthTmp = nWidthTmp + rBoxItem.GetDistance( nLine );
- nMinFrm += nWidthTmp;
- nMaxFrm += nWidthTmp;
- }
- nLine = BOX_LINE_RIGHT;
- }
-
- // Mindestbreite fuer Inhalt einhalten
- if( nMinFrm < MINLAY )
- nMinFrm = MINLAY;
- if( nMaxFrm < MINLAY )
- nMaxFrm = MINLAY;
-
- if( nWidth > (USHORT)nMaxFrm )
- nWidth = nMaxFrm;
- else if( nWidth > (USHORT)nMinFrm )
- nWidth = nMinFrm;
- }
- }
-
- if( MINFLY > nWidth )
- nWidth = MINFLY;
-
- aSz.SetWidth( nWidth );
- if( MINFLY > aSz.GetHeight() )
- aSz.SetHeight( MINFLY );
- rFlySet.Put( aSz );
- }
- else if( MINFLY > ((SwFmtFrmSize*)pItem)->GetHeight() )
- {
- SwFmtFrmSize aSz( *(SwFmtFrmSize*)pItem );
- aSz.SetHeight( MINFLY );
- rFlySet.Put( aSz );
- }
-}
-
-/* */
-struct CharSetNameMap
-{
- rtl_TextEncoding eCode;
- const sal_Char* pName;
-};
-
-const CharSetNameMap *GetCharSetNameMap()
-{
- static const CharSetNameMap aMapArr[] =
- {
-# define IMPLENTRY(X) { RTL_TEXTENCODING_##X, "" #X "" }
- IMPLENTRY(DONTKNOW),
- IMPLENTRY(MS_1252),
- IMPLENTRY(APPLE_ROMAN),
- IMPLENTRY(IBM_437),
- IMPLENTRY(IBM_850),
- IMPLENTRY(IBM_860),
- IMPLENTRY(IBM_861),
- IMPLENTRY(IBM_863),
- IMPLENTRY(IBM_865),
- IMPLENTRY(SYMBOL),
- IMPLENTRY(ASCII_US),
- IMPLENTRY(ISO_8859_1),
- IMPLENTRY(ISO_8859_2),
- IMPLENTRY(ISO_8859_3),
- IMPLENTRY(ISO_8859_4),
- IMPLENTRY(ISO_8859_5),
- IMPLENTRY(ISO_8859_6),
- IMPLENTRY(ISO_8859_7),
- IMPLENTRY(ISO_8859_8),
- IMPLENTRY(ISO_8859_9),
- IMPLENTRY(ISO_8859_14),
- IMPLENTRY(ISO_8859_15),
- IMPLENTRY(IBM_737),
- IMPLENTRY(IBM_775),
- IMPLENTRY(IBM_852),
- IMPLENTRY(IBM_855),
- IMPLENTRY(IBM_857),
- IMPLENTRY(IBM_862),
- IMPLENTRY(IBM_864),
- IMPLENTRY(IBM_866),
- IMPLENTRY(IBM_869),
- IMPLENTRY(MS_874),
- IMPLENTRY(MS_1250),
- IMPLENTRY(MS_1251),
- IMPLENTRY(MS_1253),
- IMPLENTRY(MS_1254),
- IMPLENTRY(MS_1255),
- IMPLENTRY(MS_1256),
- IMPLENTRY(MS_1257),
- IMPLENTRY(MS_1258),
- IMPLENTRY(APPLE_ARABIC),
- IMPLENTRY(APPLE_CENTEURO),
- IMPLENTRY(APPLE_CROATIAN),
- IMPLENTRY(APPLE_CYRILLIC),
- IMPLENTRY(APPLE_DEVANAGARI),
- IMPLENTRY(APPLE_FARSI),
- IMPLENTRY(APPLE_GREEK),
- IMPLENTRY(APPLE_GUJARATI),
- IMPLENTRY(APPLE_GURMUKHI),
- IMPLENTRY(APPLE_HEBREW),
- IMPLENTRY(APPLE_ICELAND),
- IMPLENTRY(APPLE_ROMANIAN),
- IMPLENTRY(APPLE_THAI),
- IMPLENTRY(APPLE_TURKISH),
- IMPLENTRY(APPLE_UKRAINIAN),
- IMPLENTRY(APPLE_CHINSIMP),
- IMPLENTRY(APPLE_CHINTRAD),
- IMPLENTRY(APPLE_JAPANESE),
- IMPLENTRY(APPLE_KOREAN),
- IMPLENTRY(MS_932),
- IMPLENTRY(MS_936),
- IMPLENTRY(MS_949),
- IMPLENTRY(MS_950),
- IMPLENTRY(SHIFT_JIS),
- IMPLENTRY(GB_2312),
- IMPLENTRY(GBT_12345),
- IMPLENTRY(GBK),
- IMPLENTRY(BIG5),
- IMPLENTRY(EUC_JP),
- IMPLENTRY(EUC_CN),
- IMPLENTRY(EUC_TW),
- IMPLENTRY(ISO_2022_JP),
- IMPLENTRY(ISO_2022_CN),
- IMPLENTRY(KOI8_R),
- IMPLENTRY(KOI8_U),
- IMPLENTRY(UTF7),
- IMPLENTRY(UTF8),
- IMPLENTRY(ISO_8859_10),
- IMPLENTRY(ISO_8859_13),
- IMPLENTRY(EUC_KR),
- IMPLENTRY(ISO_2022_KR),
- IMPLENTRY(JIS_X_0201),
- IMPLENTRY(JIS_X_0208),
- IMPLENTRY(JIS_X_0212),
- IMPLENTRY(MS_1361),
- IMPLENTRY(GB_18030),
- IMPLENTRY(BIG5_HKSCS),
- IMPLENTRY(TIS_620),
- IMPLENTRY(PT154),
- IMPLENTRY(UCS4),
- IMPLENTRY(UCS2),
- IMPLENTRY(UNICODE),
- {0,0} //Last
- };
- return &aMapArr[0];
-}
-/*
- Get a rtl_TextEncoding from its name
- */
-rtl_TextEncoding CharSetFromName(const String& rChrSetStr)
-{
- const CharSetNameMap *pStart = GetCharSetNameMap();
- rtl_TextEncoding nRet = pStart->eCode;
-
- for(const CharSetNameMap *pMap = pStart; pMap->pName; ++pMap)
- {
- if(rChrSetStr.EqualsIgnoreCaseAscii(pMap->pName))
- {
- nRet = pMap->eCode;
- break;
- }
- }
-
- ASSERT(nRet != pStart->eCode, "TXT: That was an unknown language!");
-
- return nRet;
-}
-
-
-/*
- Get the String name of an rtl_TextEncoding
- */
-String NameFromCharSet(rtl_TextEncoding nChrSet)
-{
- const CharSetNameMap *pStart = GetCharSetNameMap();
- const char *pRet = pStart->pName;
-
- for(const CharSetNameMap *pMap = pStart; pMap->pName; ++pMap)
- {
- if (nChrSet == pMap->eCode)
- {
- pRet = pMap->pName;
- break;
- }
- }
-
- ASSERT(pRet != pStart->pName, "TXT: That was an unknown language!");
-
- return String::CreateFromAscii(pRet);
-}
-
-// for the automatic conversion (mail/news/...)
-// The user data contains the options for the ascii import/export filter.
-// The format is:
-// 1. CharSet - as ascii chars
-// 2. LineEnd - as CR/LR/CRLF
-// 3. Fontname
-// 4. Language
-// the delimetercharacter is ","
-//
-
-void SwAsciiOptions::ReadUserData( const String& rStr )
-{
- xub_StrLen nToken = 0;
- USHORT nCnt = 0;
- String sToken;
- do {
- if( 0 != (sToken = rStr.GetToken( 0, ',', nToken )).Len() )
- {
- switch( nCnt )
- {
- case 0: // CharSet
- eCharSet = CharSetFromName(sToken);
- break;
- case 1: // LineEnd
- if( sToken.EqualsIgnoreCaseAscii( "CRLF" ))
- eCRLF_Flag = LINEEND_CRLF;
- else if( sToken.EqualsIgnoreCaseAscii( "LF" ))
- eCRLF_Flag = LINEEND_LF;
- else
- eCRLF_Flag = LINEEND_CR;
- break;
- case 2: // fontname
- sFont = sToken;
- break;
- case 3: // Language
- nLanguage = MsLangId::convertIsoStringToLanguage( sToken );
- break;
- }
- }
- ++nCnt;
- } while( STRING_NOTFOUND != nToken );
-}
-
-void SwAsciiOptions::WriteUserData( String& rStr )
-{
- // 1. charset
- rStr = NameFromCharSet(eCharSet);
- rStr += ',';
-
- // 2. LineEnd
- switch(eCRLF_Flag)
- {
- case LINEEND_CRLF:
- rStr.AppendAscii( "CRLF" );
- break;
- case LINEEND_CR:
- rStr.AppendAscii( "CR" );
- break;
- case LINEEND_LF:
- rStr.AppendAscii( "LF" );
- break;
- }
- rStr += ',';
-
- // 3. Fontname
- rStr += sFont;
- rStr += ',';
-
- // 4. Language
- if (nLanguage)
- {
- rtl::OUString sTmp = MsLangId::convertLanguageToIsoString( nLanguage );
- rStr += (String)sTmp;
- }
- rStr += ',';
-}
-
-extern "C" { static void SAL_CALL thisModule() {} }
-
-static oslGenericFunction GetMswordLibSymbol( const char *pSymbol )
-{
- static ::osl::Module aModule;
- if ( aModule.is() ||
- aModule.loadRelative( &thisModule,
- ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "msword" ) ) ) ) )
- {
- return aModule.getFunctionSymbol( ::rtl::OUString::createFromAscii( pSymbol ) );
- }
-
- return NULL;
-}
-
-Reader* GetRTFReader()
-{
- FnGetReader pFunction = reinterpret_cast<FnGetReader>( GetMswordLibSymbol( "ImportRTF" ) );
-
- if ( pFunction )
- return (*pFunction)();
-
- return NULL;
-}
-
-void GetRTFWriter( const String& rFltName, const String& rBaseURL, WriterRef& xRet )
-{
- FnGetWriter pFunction = reinterpret_cast<FnGetWriter>( GetMswordLibSymbol( "ExportRTF" ) );
-
- if ( pFunction )
- (*pFunction)( rFltName, rBaseURL, xRet );
- else
- xRet = WriterRef(0);
-}
-
-Reader* GetWW8Reader()
-{
- FnGetReader pFunction = reinterpret_cast<FnGetReader>( GetMswordLibSymbol( "ImportDOC" ) );
-
- if ( pFunction )
- return (*pFunction)();
-
- return NULL;
-}
-
-void GetWW8Writer( const String& rFltName, const String& rBaseURL, WriterRef& xRet )
-{
- FnGetWriter pFunction = reinterpret_cast<FnGetWriter>( GetMswordLibSymbol( "ExportDOC" ) );
-
- if ( pFunction )
- (*pFunction)( rFltName, rBaseURL, xRet );
- else
- xRet = WriterRef(0);
-}
-
-typedef ULONG ( __LOADONCALLAPI *SaveOrDel )( SfxObjectShell&, SotStorage&, BOOL, const String& );
-typedef ULONG ( __LOADONCALLAPI *GetSaveWarning )( SfxObjectShell& );
-
-ULONG SaveOrDelMSVBAStorage( SfxObjectShell& rDoc, SotStorage& rStor, BOOL bSaveInto, const String& rStorageName )
-{
- SaveOrDel pFunction = reinterpret_cast<SaveOrDel>( GetMswordLibSymbol( "SaveOrDelMSVBAStorage_ww8" ) );
- if( pFunction )
- return pFunction( rDoc, rStor, bSaveInto, rStorageName );
- return ERRCODE_NONE;
-}
-
-ULONG GetSaveWarningOfMSVBAStorage( SfxObjectShell &rDocS )
-{
- GetSaveWarning pFunction = reinterpret_cast<GetSaveWarning>( GetMswordLibSymbol( "GetSaveWarningOfMSVBAStorage_ww8" ) );
- if( pFunction )
- return pFunction( rDocS );
- return ERRCODE_NONE;
-}
-
-
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+#define _SVSTDARR_STRINGS
+
+#include <string.h>
+#include <stdio.h> // sscanf
+#include <hintids.hxx>
+#include <i18npool/lang.h>
+#include <i18npool/mslangid.hxx>
+#include <vcl/msgbox.hxx>
+#include <svtools/parhtml.hxx>
+#include <svl/svstdarr.hxx>
+#include <sot/storage.hxx>
+#include <sot/clsids.hxx>
+#include <sfx2/app.hxx>
+#include <sfx2/docfilt.hxx>
+#include <sfx2/fcontnr.hxx>
+#include <sfx2/docfile.hxx>
+#include <editeng/lrspitem.hxx>
+#include <editeng/tstpitem.hxx>
+#include <doc.hxx>
+#include <docary.hxx>
+#include <pam.hxx>
+#include <shellio.hxx>
+#include <errhdl.hxx>
+#include <docsh.hxx>
+#include <wdocsh.hxx>
+#include <fltini.hxx>
+#include <hints.hxx>
+#include <frmatr.hxx>
+#include <fmtfsize.hxx>
+#include <swtable.hxx>
+#include <fmtcntnt.hxx>
+#include <editeng/boxitem.hxx>
+#include <frmatr.hxx>
+#include <frmfmt.hxx>
+#include <numrule.hxx>
+#include <ndtxt.hxx>
+#include <swfltopt.hxx>
+#include <swerror.h>
+#include <osl/module.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/componentcontext.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/util/XMacroExpander.hpp>
+#include <rtl/uri.hxx>
+#include <tools/svlibrary.hxx>
+
+using namespace utl;
+using rtl::OUString;
+using namespace com::sun::star::uno;
+using namespace com::sun::star;
+
+SwRead ReadAscii = 0, /*ReadSwg = 0, ReadSw3 = 0,*/
+ ReadHTML = 0, ReadXML = 0;
+
+Reader* GetRTFReader();
+Reader* GetWW8Reader();
+
+// Note: if editing, please don't forget to modify also the enum
+// ReaderWriterEnum and aFilterDetect in shellio.hxx
+SwReaderWriterEntry aReaderWriter[] =
+{
+ SwReaderWriterEntry( &::GetRTFReader, &::GetRTFWriter, TRUE ),
+ SwReaderWriterEntry( 0, &::GetASCWriter, FALSE ),
+ SwReaderWriterEntry( &::GetWW8Reader, &::GetWW8Writer, TRUE ),
+ SwReaderWriterEntry( &::GetWW8Reader, &::GetWW8Writer, TRUE ),
+ SwReaderWriterEntry( &::GetRTFReader, &::GetRTFWriter, TRUE ),
+ SwReaderWriterEntry( 0, &::GetHTMLWriter, TRUE ),
+ SwReaderWriterEntry( 0, 0, TRUE ),
+ SwReaderWriterEntry( &::GetWW8Reader, 0, TRUE ),
+ SwReaderWriterEntry( 0, &::GetXMLWriter, TRUE ),
+ SwReaderWriterEntry( 0, &::GetASCWriter, TRUE ),
+ SwReaderWriterEntry( 0, &::GetASCWriter, TRUE )
+};
+
+Reader* SwReaderWriterEntry::GetReader()
+{
+ if ( pReader )
+ return pReader;
+ else if ( fnGetReader )
+ {
+ pReader = (*fnGetReader)();
+ return pReader;
+ }
+ return NULL;
+}
+
+void SwReaderWriterEntry::GetWriter( const String& rNm, const String& rBaseURL, WriterRef& xWrt ) const
+{
+ if ( fnGetWriter )
+ (*fnGetWriter)( rNm, rBaseURL, xWrt );
+ else
+ xWrt = WriterRef(0);
+}
+
+/*SwRead SwGetReaderSw3() // SW_DLLPUBLIC
+{
+ return ReadSw3;
+}
+*/
+SwRead SwGetReaderXML() // SW_DLLPUBLIC
+{
+ return ReadXML;
+}
+
+bool IsDocShellRegistered()
+{
+ return 0 != SwDocShell::_GetInterface();
+}
+
+inline void _SetFltPtr( USHORT rPos, SwRead pReader )
+{
+ aReaderWriter[ rPos ].pReader = pReader;
+}
+
+void _InitFilter()
+{
+ _SetFltPtr( READER_WRITER_BAS, (ReadAscii = new AsciiReader) );
+ _SetFltPtr( READER_WRITER_HTML, (ReadHTML = new HTMLReader) );
+ _SetFltPtr( READER_WRITER_WW1, new WW1Reader );
+ _SetFltPtr( READER_WRITER_XML, (ReadXML = new XMLReader) );
+
+#ifdef NEW_WW97_EXPORT
+ aReaderWriter[ READER_WRITER_WW1 ].fnGetWriter = &::GetWW8Writer;
+ aReaderWriter[ READER_WRITER_WW5 ].fnGetWriter = &::GetWW8Writer;
+#endif
+
+ _SetFltPtr( READER_WRITER_TEXT_DLG, ReadAscii );
+ _SetFltPtr( READER_WRITER_TEXT, ReadAscii );
+}
+
+void _FinitFilter()
+{
+ // die Reader vernichten
+ for( USHORT n = 0; n < MAXFILTER; ++n )
+ {
+ SwReaderWriterEntry& rEntry = aReaderWriter[n];
+ if( rEntry.bDelReader && rEntry.pReader )
+ delete rEntry.pReader, rEntry.pReader = NULL;
+ }
+}
+
+
+/* */
+
+namespace SwReaderWriter {
+
+Reader* GetReader( ReaderWriterEnum eReader )
+{
+ return aReaderWriter[eReader].GetReader();
+}
+
+void GetWriter( const String& rFltName, const String& rBaseURL, WriterRef& xRet )
+{
+ for( USHORT n = 0; n < MAXFILTER; ++n )
+ if( aFilterDetect[n].IsFilter( rFltName ) )
+ {
+ aReaderWriter[n].GetWriter( rFltName, rBaseURL, xRet );
+ break;
+ }
+}
+
+SwRead GetReader( const String& rFltName )
+{
+ SwRead pRead = 0;
+ for( USHORT n = 0; n < MAXFILTER; ++n )
+ if( aFilterDetect[n].IsFilter( rFltName ) )
+ {
+ pRead = aReaderWriter[n].GetReader();
+ // fuer einige Reader noch eine Sonderbehandlung:
+ if ( pRead )
+ pRead->SetFltName( rFltName );
+ break;
+ }
+ return pRead;
+}
+
+} // namespace SwReaderWriter
+
+/* */
+
+/////////////// die Storage Reader/Writer ////////////////////////////////
+
+/*void GetSw3Writer( const String&, const String& rBaseURL, WriterRef& xRet )
+{
+ DBG_ERROR( "Shouldn't happen!");
+ xRet = new Sw3Writer;
+}
+*/
+
+ULONG StgReader::OpenMainStream( SvStorageStreamRef& rRef, USHORT& rBuffSize )
+{
+ ULONG nRet = ERR_SWG_READ_ERROR;
+ ASSERT( pStg, "wo ist mein Storage?" );
+ const SfxFilter* pFltr = SwIoSystem::GetFilterOfFormat( aFltName );
+ if( pFltr )
+ {
+ rRef = pStg->OpenSotStream( SwIoSystem::GetSubStorageName( *pFltr ),
+ STREAM_READ | STREAM_SHARE_DENYALL );
+
+ if( rRef.Is() )
+ {
+ if( SVSTREAM_OK == rRef->GetError() )
+ {
+ USHORT nOld = rRef->GetBufferSize();
+ rRef->SetBufferSize( rBuffSize );
+ rBuffSize = nOld;
+ nRet = 0;
+ }
+ else
+ nRet = rRef->GetError();
+ }
+ }
+ return nRet;
+}
+
+/* */
+/*
+ULONG Sw3Reader::Read( SwDoc &rDoc, SwPaM &rPam, const String & )
+{
+ ULONG nRet;
+ if( pStg && pIO )
+ {
+ // TRUE: Vorlagen ueberschreiben
+ pIO->SetReadOptions( aOpt,TRUE );
+ if( !bInsertMode )
+ {
+ // Im Laden-Modus darf der PaM-Content-Teil nicht
+ // in den Textbereich zeigen (Nodes koennen geloescht werden)
+ rPam.GetBound( TRUE ).nContent.Assign( 0, 0 );
+ rPam.GetBound( FALSE ).nContent.Assign( 0, 0 );
+ }
+ nRet = pIO->Load( pStg, bInsertMode ? &rPam : 0 );
+ aOpt.ResetAllFmtsOnly();
+ pIO->SetReadOptions( aOpt, TRUE );
+ }
+ else
+ {
+ ASSERT( !this, "Sw3-Read ohne Storage und/oder IO-System" );
+ nRet = ERR_SWG_READ_ERROR;
+ }
+ return nRet;
+}
+
+ // read the sections of the document, which is equal to the medium.
+ // returns the count of it
+USHORT Sw3Reader::GetSectionList( SfxMedium& rMedium,
+ SvStrings& rStrings ) const
+{
+ SvStorageRef aStg( rMedium.GetStorage() );
+ const SfxFilter* pFlt = rMedium.GetFilter();
+ ASSERT( pFlt && pFlt->GetVersion(),
+ "Kein Filter oder Filter ohne FF-Version" );
+ if( pFlt && pFlt->GetVersion() )
+ aStg->SetVersion( (long)pFlt->GetVersion() );
+
+ if( pIO )
+ pIO->GetSectionList( &aStg, rStrings );
+ return rStrings.Count();
+ return 0;
+}
+*/
+
+/*ULONG Sw3Writer::WriteStorage()
+{
+ ULONG nRet;
+ if( pIO )
+ {
+ // der gleiche Storage -> Save, sonst SaveAs aufrufen
+ if( !bSaveAs )
+ nRet = pIO->Save( pOrigPam, bWriteAll );
+ else
+ nRet = pIO->SaveAs( pStg, pOrigPam, bWriteAll );
+
+ pIO = 0; // nach dem Schreiben ist der Pointer ungueltig !!
+ }
+ else
+ {
+ ASSERT( !this, "Sw3-Writer ohne IO-System" )
+ nRet = ERR_SWG_WRITE_ERROR;
+ }
+ return nRet;
+}
+
+ULONG Sw3Writer::WriteMedium( SfxMedium& )
+{
+ DBG_ERROR( "Shouldn't be used currently!");
+ return WriteStorage();
+}
+
+BOOL Sw3Writer::IsSw3Writer() const { return TRUE; }
+*/
+
+void Writer::SetPasswd( const String& ) {}
+
+
+void Writer::SetVersion( const String&, long ) {}
+
+
+BOOL Writer::IsStgWriter() const { return FALSE; }
+//BOOL Writer::IsSw3Writer() const { return FALSE; }
+
+BOOL StgWriter::IsStgWriter() const { return TRUE; }
+
+/* */
+
+
+
+BOOL SwReader::NeedsPasswd( const Reader& /*rOptions*/ )
+{
+ BOOL bRes = FALSE;
+ return bRes;
+}
+
+
+BOOL SwReader::CheckPasswd( const String& /*rPasswd*/, const Reader& /*rOptions*/ )
+{
+ return TRUE;
+}
+
+
+/* */
+
+//-----------------------------------------------------------------------
+// Filter Flags lesen, wird von WW8 / W4W / EXCEL / LOTUS benutzt.
+//-----------------------------------------------------------------------
+
+/*
+<FilterFlags>
+ <Excel_Lotus>
+ <MinRow cfg:type="long">0</MinRow>
+ <MaxRow cfg:type="long">0</MaxRow>
+ <MinCol cfg:type="long">0</MinCol>
+ <MaxCol cfg:type="long">0</MaxCol>
+ </Excel_Lotus>
+ <W4W>
+ <W4WHD cfg:type="long">0</W4WHD>
+ <W4WFT cfg:type="long">0</W4WFT>
+ <W4W000 cfg:type="long">0</W4W000>
+ </W4W>
+ <WinWord>
+ <WW1F cfg:type="long">0</WW1F>
+ <WW cfg:type="long">0</WW>
+ <WW8 cfg:type="long">0</WW8>
+ <WWF cfg:type="long">0</WWF>
+ <WWFA0 cfg:type="long">0</WWFA0>
+ <WWFA1 cfg:type="long">0</WWFA1>
+ <WWFA2 cfg:type="long">0</WWFA2>
+ <WWFB0 cfg:type="long">0</WWFB0>
+ <WWFB1 cfg:type="long">0</WWFB1>
+ <WWFB2 cfg:type="long">0</WWFB2>
+ <WWFLX cfg:type="long">0</WWFLX>
+ <WWFLY cfg:type="long">0</WWFLY>
+ <WWFT cfg:type="long">0</WWFT>
+ <WWWR cfg:type="long">0</WWWR>
+ </WinWord>
+ <Writer>
+ <SW3Imp cfg:type="long">0</SW3Imp>
+ </Writer>
+</FilterFlags>
+*/
+
+#define FILTER_OPTION_ROOT String::CreateFromAscii( \
+ RTL_CONSTASCII_STRINGPARAM( "Office.Writer/FilterFlags" ) )
+
+SwFilterOptions::SwFilterOptions( sal_uInt16 nCnt, const sal_Char** ppNames,
+ sal_uInt32* pValues )
+ : ConfigItem( FILTER_OPTION_ROOT )
+{
+ GetValues( nCnt, ppNames, pValues );
+}
+
+void SwFilterOptions::GetValues( sal_uInt16 nCnt, const sal_Char** ppNames,
+ sal_uInt32* pValues )
+{
+ Sequence<OUString> aNames( nCnt );
+ OUString* pNames = aNames.getArray();
+ USHORT n;
+
+ for( n = 0; n < nCnt; ++n )
+ pNames[ n ] = OUString::createFromAscii( ppNames[ n ] );
+ Sequence<Any> aValues = GetProperties( aNames );
+
+ if( nCnt == aValues.getLength() )
+ {
+ const Any* pAnyValues = aValues.getConstArray();
+ for( n = 0; n < nCnt; ++n )
+ pValues[ n ] = pAnyValues[ n ].hasValue()
+ ? *(sal_uInt32*)pAnyValues[ n ].getValue()
+ : 0;
+ }
+ else
+ for( n = 0; n < nCnt; ++n )
+ pValues[ n ] = 0;
+}
+
+void SwFilterOptions::Commit() {}
+void SwFilterOptions::Notify( const ::com::sun::star::uno::Sequence< rtl::OUString >& ) {}
+
+/* */
+
+
+void StgReader::SetFltName( const String& rFltNm )
+{
+ if( SW_STORAGE_READER & GetReaderType() )
+ aFltName = rFltNm;
+}
+
+
+/* */
+
+SwRelNumRuleSpaces::SwRelNumRuleSpaces( SwDoc& rDoc, BOOL bNDoc )
+ : bNewDoc( bNDoc )
+{
+ pNumRuleTbl = new SwNumRuleTbl( 8, 8 );
+ if( !bNDoc )
+ pNumRuleTbl->Insert( &rDoc.GetNumRuleTbl(), 0 );
+}
+
+SwRelNumRuleSpaces::~SwRelNumRuleSpaces()
+{
+ if( pNumRuleTbl )
+ {
+ pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
+ delete pNumRuleTbl;
+ }
+}
+
+void SwRelNumRuleSpaces::SetNumRelSpaces( SwDoc& rDoc )
+{
+ const SwNumRuleTbl* pRuleTbl = NULL;
+
+ if( !bNewDoc )
+ {
+ // jetzt alle schon vorhanden NumRules aus dem Array entfernen,
+ // damit nur die neuen angepasst werden
+ SwNumRuleTbl aNumRuleTbl;
+ aNumRuleTbl.Insert( pNumRuleTbl, 0 );
+ pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
+ const SwNumRuleTbl& rRuleTbl = rDoc.GetNumRuleTbl();
+ SwNumRule* pRule;
+
+ for( USHORT n = 0; n < rRuleTbl.Count(); ++n )
+ if( USHRT_MAX == aNumRuleTbl.GetPos( ( pRule = rRuleTbl[ n ] )))
+ // war noch nicht vorhanden, also neu
+ pNumRuleTbl->Insert( pRule, pNumRuleTbl->Count() );
+
+ aNumRuleTbl.Remove( 0, aNumRuleTbl.Count() );
+
+ pRuleTbl = pNumRuleTbl;
+ }
+ else
+ {
+ pRuleTbl = &rDoc.GetNumRuleTbl();
+ }
+
+ if( pRuleTbl )
+ {
+ for( USHORT n = pRuleTbl->Count(); n; )
+ {
+ SwNumRule* pRule = (*pRuleTbl)[ --n ];
+ // Rule noch gueltig und am Doc vorhanden?
+ if( USHRT_MAX != rDoc.GetNumRuleTbl().GetPos( pRule ))
+ {
+ // --> OD 2008-02-19 #refactorlists#
+// SwNumRuleInfo aUpd( pRule->GetName() );
+// aUpd.MakeList( rDoc );
+
+// // bei allen nmumerierten Absaetzen vom linken Rand
+// // den absoluten Wert des NumFormates abziehen
+// for( ULONG nUpdPos = 0; nUpdPos < aUpd.GetList().Count();
+// ++nUpdPos )
+// {
+// SwTxtNode* pNd = aUpd.GetList().GetObject( nUpdPos );
+// SetNumLSpace( *pNd, *pRule );
+// }
+ SwNumRule::tTxtNodeList aTxtNodeList;
+ pRule->GetTxtNodeList( aTxtNodeList );
+ for ( SwNumRule::tTxtNodeList::iterator aIter = aTxtNodeList.begin();
+ aIter != aTxtNodeList.end(); ++aIter )
+ {
+ SwTxtNode* pNd = *aIter;
+ SetNumLSpace( *pNd, *pRule );
+ }
+ // <--
+ }
+ }
+ }
+
+ if( pNumRuleTbl )
+ {
+ pNumRuleTbl->Remove( 0, pNumRuleTbl->Count() );
+ delete pNumRuleTbl, pNumRuleTbl = 0;
+ }
+
+ if( bNewDoc )
+ {
+ SetOultineRelSpaces( SwNodeIndex( rDoc.GetNodes() ),
+ SwNodeIndex( rDoc.GetNodes().GetEndOfContent()));
+ }
+}
+
+void SwRelNumRuleSpaces::SetOultineRelSpaces( const SwNodeIndex& rStt,
+ const SwNodeIndex& rEnd )
+{
+ SwDoc* pDoc = rStt.GetNode().GetDoc();
+ const SwOutlineNodes& rOutlNds = pDoc->GetNodes().GetOutLineNds();
+ if( rOutlNds.Count() )
+ {
+ USHORT nPos;
+ rOutlNds.Seek_Entry( &rStt.GetNode(), &nPos );
+ for( ; nPos < rOutlNds.Count() &&
+ rOutlNds[ nPos ]->GetIndex() < rEnd.GetIndex(); ++nPos )
+ {
+ SwTxtNode* pNd = rOutlNds[ nPos ]->GetTxtNode();
+ if( pNd->IsOutline() && !pNd->GetNumRule() )
+ SetNumLSpace( *pNd, *pDoc->GetOutlineNumRule() );
+ }
+ }
+}
+
+void SwRelNumRuleSpaces::SetNumLSpace( SwTxtNode& rNd, const SwNumRule& rRule )
+{
+ BOOL bOutlineRule = OUTLINE_RULE == rRule.GetRuleType();
+ // --> OD 2005-11-18 #128056#
+ // correction of refactoring done by cws swnumtree:
+ // - assure a correct level for retrieving numbering format.
+// BYTE nLvl = rNd.GetLevel();
+ BYTE nLvl = 0;
+ if ( rNd.GetActualListLevel() >= 0 && rNd.GetActualListLevel() < MAXLEVEL )
+ {
+ nLvl = static_cast< BYTE >(rNd.GetActualListLevel());
+ }
+ // <--
+ const SwNumFmt& rFmt = rRule.Get( nLvl );
+ const SvxLRSpaceItem& rLR = rNd.GetSwAttrSet().GetLRSpace();
+
+ SvxLRSpaceItem aLR( rLR );
+ aLR.SetTxtFirstLineOfst( 0 );
+
+ // sagt der Node, das die Numerierung den Wert vorgibt?
+ if( !bOutlineRule && rNd.IsSetNumLSpace() )
+ aLR.SetTxtLeft( 0 );
+ else
+ {
+ long nLeft = rFmt.GetAbsLSpace(), nParaLeft = rLR.GetTxtLeft();
+ if( 0 < rLR.GetTxtFirstLineOfst() )
+ nParaLeft += rLR.GetTxtFirstLineOfst();
+ else if( nParaLeft >= nLeft )
+ // #82963#/#82962#: set correct paragraph indent
+ nParaLeft -= nLeft;
+ else
+ //#83154#, Don't think any of the older #80856# bugfix code is
+ //relevent anymore.
+ nParaLeft = rLR.GetTxtLeft()+rLR.GetTxtFirstLineOfst();
+ aLR.SetTxtLeft( nParaLeft );
+ }
+
+ if( aLR.GetTxtLeft() != rLR.GetTxtLeft() )
+ {
+ //bevor rLR geloescht wird!
+ long nOffset = rLR.GetTxtLeft() - aLR.GetTxtLeft();
+ rNd.SetAttr( aLR );
+
+ // Tabs anpassen !!
+ const SfxPoolItem* pItem;
+ if( SFX_ITEM_SET == rNd.GetSwAttrSet().GetItemState(
+ RES_PARATR_TABSTOP, TRUE, &pItem ))
+ {
+ SvxTabStopItem aTStop( *(SvxTabStopItem*)pItem );
+ for( USHORT n = 0; n < aTStop.Count(); ++n )
+ {
+ SvxTabStop& rTab = (SvxTabStop&)aTStop[ n ];
+ if( SVX_TAB_ADJUST_DEFAULT != rTab.GetAdjustment() )
+ {
+ if( !rTab.GetTabPos() )
+ {
+ aTStop.Remove( n );
+ --n;
+ }
+ else
+ rTab.GetTabPos() += nOffset;
+ }
+ }
+ rNd.SetAttr( aTStop );
+ }
+ }
+}
+
+/* */
+
+
+void CalculateFlySize(SfxItemSet& rFlySet, const SwNodeIndex& rAnchor,
+ SwTwips nPageWidth)
+{
+ const SfxPoolItem* pItem = 0;
+ if( SFX_ITEM_SET != rFlySet.GetItemState( RES_FRM_SIZE, TRUE, &pItem ) ||
+ MINFLY > ((SwFmtFrmSize*)pItem)->GetWidth() )
+ {
+ SwFmtFrmSize aSz((SwFmtFrmSize&)rFlySet.Get(RES_FRM_SIZE, TRUE));
+ if (pItem)
+ aSz = (SwFmtFrmSize&)(*pItem);
+
+ SwTwips nWidth;
+ // dann die Breite des Flys selbst bestimmen. Ist eine Tabelle
+ // defininiert, dann benutze deren Breite, sonst die Breite der
+ // Seite
+ const SwTableNode* pTblNd = rAnchor.GetNode().FindTableNode();
+ if( pTblNd )
+ nWidth = pTblNd->GetTable().GetFrmFmt()->GetFrmSize().GetWidth();
+ else
+ nWidth = nPageWidth;
+
+ const SwNodeIndex* pSttNd = ((SwFmtCntnt&)rFlySet.Get( RES_CNTNT )).
+ GetCntntIdx();
+ if( pSttNd )
+ {
+ BOOL bOnlyOneNode = TRUE;
+ ULONG nMinFrm = 0;
+ ULONG nMaxFrm = 0;
+ SwTxtNode* pFirstTxtNd = 0;
+ SwNodeIndex aIdx( *pSttNd, 1 );
+ SwNodeIndex aEnd( *pSttNd->GetNode().EndOfSectionNode() );
+ while( aIdx < aEnd )
+ {
+ SwTxtNode *pTxtNd = aIdx.GetNode().GetTxtNode();
+ if( pTxtNd )
+ {
+ if( !pFirstTxtNd )
+ pFirstTxtNd = pTxtNd;
+ else if( pFirstTxtNd != pTxtNd )
+ {
+ // forget it
+ bOnlyOneNode = FALSE;
+ break;
+ }
+
+ ULONG nAbsMinCnts;
+ pTxtNd->GetMinMaxSize( aIdx.GetIndex(), nMinFrm,
+ nMaxFrm, nAbsMinCnts );
+ }
+ aIdx++;
+ }
+
+ if( bOnlyOneNode )
+ {
+ if( nMinFrm < MINLAY && pFirstTxtNd )
+ {
+ // if the first node dont contained any content, then
+ // insert one char in it calc again and delete once again
+ SwIndex aNdIdx( pFirstTxtNd );
+ pFirstTxtNd->InsertText( String::CreateFromAscii(
+ RTL_CONSTASCII_STRINGPARAM( "MM" )), aNdIdx );
+ ULONG nAbsMinCnts;
+ pFirstTxtNd->GetMinMaxSize( pFirstTxtNd->GetIndex(),
+ nMinFrm, nMaxFrm, nAbsMinCnts );
+ aNdIdx -= 2;
+ pFirstTxtNd->EraseText( aNdIdx, 2 );
+ }
+
+ // Umrandung und Abstand zum Inhalt beachten
+ const SvxBoxItem& rBoxItem = (SvxBoxItem&)rFlySet.Get( RES_BOX );
+ USHORT nLine = BOX_LINE_LEFT;
+ for( int i = 0; i < 2; ++i )
+ {
+ const SvxBorderLine* pLn = rBoxItem.GetLine( nLine );
+ if( pLn )
+ {
+ USHORT nWidthTmp = pLn->GetOutWidth() + pLn->GetInWidth();
+ nWidthTmp = nWidthTmp + rBoxItem.GetDistance( nLine );
+ nMinFrm += nWidthTmp;
+ nMaxFrm += nWidthTmp;
+ }
+ nLine = BOX_LINE_RIGHT;
+ }
+
+ // Mindestbreite fuer Inhalt einhalten
+ if( nMinFrm < MINLAY )
+ nMinFrm = MINLAY;
+ if( nMaxFrm < MINLAY )
+ nMaxFrm = MINLAY;
+
+ if( nWidth > (USHORT)nMaxFrm )
+ nWidth = nMaxFrm;
+ else if( nWidth > (USHORT)nMinFrm )
+ nWidth = nMinFrm;
+ }
+ }
+
+ if( MINFLY > nWidth )
+ nWidth = MINFLY;
+
+ aSz.SetWidth( nWidth );
+ if( MINFLY > aSz.GetHeight() )
+ aSz.SetHeight( MINFLY );
+ rFlySet.Put( aSz );
+ }
+ else if( MINFLY > ((SwFmtFrmSize*)pItem)->GetHeight() )
+ {
+ SwFmtFrmSize aSz( *(SwFmtFrmSize*)pItem );
+ aSz.SetHeight( MINFLY );
+ rFlySet.Put( aSz );
+ }
+}
+
+/* */
+struct CharSetNameMap
+{
+ rtl_TextEncoding eCode;
+ const sal_Char* pName;
+};
+
+const CharSetNameMap *GetCharSetNameMap()
+{
+ static const CharSetNameMap aMapArr[] =
+ {
+# define IMPLENTRY(X) { RTL_TEXTENCODING_##X, "" #X "" }
+ IMPLENTRY(DONTKNOW),
+ IMPLENTRY(MS_1252),
+ IMPLENTRY(APPLE_ROMAN),
+ IMPLENTRY(IBM_437),
+ IMPLENTRY(IBM_850),
+ IMPLENTRY(IBM_860),
+ IMPLENTRY(IBM_861),
+ IMPLENTRY(IBM_863),
+ IMPLENTRY(IBM_865),
+ IMPLENTRY(SYMBOL),
+ IMPLENTRY(ASCII_US),
+ IMPLENTRY(ISO_8859_1),
+ IMPLENTRY(ISO_8859_2),
+ IMPLENTRY(ISO_8859_3),
+ IMPLENTRY(ISO_8859_4),
+ IMPLENTRY(ISO_8859_5),
+ IMPLENTRY(ISO_8859_6),
+ IMPLENTRY(ISO_8859_7),
+ IMPLENTRY(ISO_8859_8),
+ IMPLENTRY(ISO_8859_9),
+ IMPLENTRY(ISO_8859_14),
+ IMPLENTRY(ISO_8859_15),
+ IMPLENTRY(IBM_737),
+ IMPLENTRY(IBM_775),
+ IMPLENTRY(IBM_852),
+ IMPLENTRY(IBM_855),
+ IMPLENTRY(IBM_857),
+ IMPLENTRY(IBM_862),
+ IMPLENTRY(IBM_864),
+ IMPLENTRY(IBM_866),
+ IMPLENTRY(IBM_869),
+ IMPLENTRY(MS_874),
+ IMPLENTRY(MS_1250),
+ IMPLENTRY(MS_1251),
+ IMPLENTRY(MS_1253),
+ IMPLENTRY(MS_1254),
+ IMPLENTRY(MS_1255),
+ IMPLENTRY(MS_1256),
+ IMPLENTRY(MS_1257),
+ IMPLENTRY(MS_1258),
+ IMPLENTRY(APPLE_ARABIC),
+ IMPLENTRY(APPLE_CENTEURO),
+ IMPLENTRY(APPLE_CROATIAN),
+ IMPLENTRY(APPLE_CYRILLIC),
+ IMPLENTRY(APPLE_DEVANAGARI),
+ IMPLENTRY(APPLE_FARSI),
+ IMPLENTRY(APPLE_GREEK),
+ IMPLENTRY(APPLE_GUJARATI),
+ IMPLENTRY(APPLE_GURMUKHI),
+ IMPLENTRY(APPLE_HEBREW),
+ IMPLENTRY(APPLE_ICELAND),
+ IMPLENTRY(APPLE_ROMANIAN),
+ IMPLENTRY(APPLE_THAI),
+ IMPLENTRY(APPLE_TURKISH),
+ IMPLENTRY(APPLE_UKRAINIAN),
+ IMPLENTRY(APPLE_CHINSIMP),
+ IMPLENTRY(APPLE_CHINTRAD),
+ IMPLENTRY(APPLE_JAPANESE),
+ IMPLENTRY(APPLE_KOREAN),
+ IMPLENTRY(MS_932),
+ IMPLENTRY(MS_936),
+ IMPLENTRY(MS_949),
+ IMPLENTRY(MS_950),
+ IMPLENTRY(SHIFT_JIS),
+ IMPLENTRY(GB_2312),
+ IMPLENTRY(GBT_12345),
+ IMPLENTRY(GBK),
+ IMPLENTRY(BIG5),
+ IMPLENTRY(EUC_JP),
+ IMPLENTRY(EUC_CN),
+ IMPLENTRY(EUC_TW),
+ IMPLENTRY(ISO_2022_JP),
+ IMPLENTRY(ISO_2022_CN),
+ IMPLENTRY(KOI8_R),
+ IMPLENTRY(KOI8_U),
+ IMPLENTRY(UTF7),
+ IMPLENTRY(UTF8),
+ IMPLENTRY(ISO_8859_10),
+ IMPLENTRY(ISO_8859_13),
+ IMPLENTRY(EUC_KR),
+ IMPLENTRY(ISO_2022_KR),
+ IMPLENTRY(JIS_X_0201),
+ IMPLENTRY(JIS_X_0208),
+ IMPLENTRY(JIS_X_0212),
+ IMPLENTRY(MS_1361),
+ IMPLENTRY(GB_18030),
+ IMPLENTRY(BIG5_HKSCS),
+ IMPLENTRY(TIS_620),
+ IMPLENTRY(PT154),
+ IMPLENTRY(UCS4),
+ IMPLENTRY(UCS2),
+ IMPLENTRY(UNICODE),
+ {0,0} //Last
+ };
+ return &aMapArr[0];
+}
+/*
+ Get a rtl_TextEncoding from its name
+ */
+rtl_TextEncoding CharSetFromName(const String& rChrSetStr)
+{
+ const CharSetNameMap *pStart = GetCharSetNameMap();
+ rtl_TextEncoding nRet = pStart->eCode;
+
+ for(const CharSetNameMap *pMap = pStart; pMap->pName; ++pMap)
+ {
+ if(rChrSetStr.EqualsIgnoreCaseAscii(pMap->pName))
+ {
+ nRet = pMap->eCode;
+ break;
+ }
+ }
+
+ ASSERT(nRet != pStart->eCode, "TXT: That was an unknown language!");
+
+ return nRet;
+}
+
+
+/*
+ Get the String name of an rtl_TextEncoding
+ */
+String NameFromCharSet(rtl_TextEncoding nChrSet)
+{
+ const CharSetNameMap *pStart = GetCharSetNameMap();
+ const char *pRet = pStart->pName;
+
+ for(const CharSetNameMap *pMap = pStart; pMap->pName; ++pMap)
+ {
+ if (nChrSet == pMap->eCode)
+ {
+ pRet = pMap->pName;
+ break;
+ }
+ }
+
+ ASSERT(pRet != pStart->pName, "TXT: That was an unknown language!");
+
+ return String::CreateFromAscii(pRet);
+}
+
+// for the automatic conversion (mail/news/...)
+// The user data contains the options for the ascii import/export filter.
+// The format is:
+// 1. CharSet - as ascii chars
+// 2. LineEnd - as CR/LR/CRLF
+// 3. Fontname
+// 4. Language
+// the delimetercharacter is ","
+//
+
+void SwAsciiOptions::ReadUserData( const String& rStr )
+{
+ xub_StrLen nToken = 0;
+ USHORT nCnt = 0;
+ String sToken;
+ do {
+ if( 0 != (sToken = rStr.GetToken( 0, ',', nToken )).Len() )
+ {
+ switch( nCnt )
+ {
+ case 0: // CharSet
+ eCharSet = CharSetFromName(sToken);
+ break;
+ case 1: // LineEnd
+ if( sToken.EqualsIgnoreCaseAscii( "CRLF" ))
+ eCRLF_Flag = LINEEND_CRLF;
+ else if( sToken.EqualsIgnoreCaseAscii( "LF" ))
+ eCRLF_Flag = LINEEND_LF;
+ else
+ eCRLF_Flag = LINEEND_CR;
+ break;
+ case 2: // fontname
+ sFont = sToken;
+ break;
+ case 3: // Language
+ nLanguage = MsLangId::convertIsoStringToLanguage( sToken );
+ break;
+ }
+ }
+ ++nCnt;
+ } while( STRING_NOTFOUND != nToken );
+}
+
+void SwAsciiOptions::WriteUserData( String& rStr )
+{
+ // 1. charset
+ rStr = NameFromCharSet(eCharSet);
+ rStr += ',';
+
+ // 2. LineEnd
+ switch(eCRLF_Flag)
+ {
+ case LINEEND_CRLF:
+ rStr.AppendAscii( "CRLF" );
+ break;
+ case LINEEND_CR:
+ rStr.AppendAscii( "CR" );
+ break;
+ case LINEEND_LF:
+ rStr.AppendAscii( "LF" );
+ break;
+ }
+ rStr += ',';
+
+ // 3. Fontname
+ rStr += sFont;
+ rStr += ',';
+
+ // 4. Language
+ if (nLanguage)
+ {
+ rtl::OUString sTmp = MsLangId::convertLanguageToIsoString( nLanguage );
+ rStr += (String)sTmp;
+ }
+ rStr += ',';
+}
+
+extern "C" { static void SAL_CALL thisModule() {} }
+
+static oslGenericFunction GetMswordLibSymbol( const char *pSymbol )
+{
+ static ::osl::Module aModule;
+ static sal_Bool bLoaded = sal_False;
+ static ::rtl::OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "msword" ) ) );
+ if (!bLoaded)
+ bLoaded = SvLibrary::LoadModule( aModule, aLibName, &thisModule );
+ if (bLoaded)
+ return aModule.getFunctionSymbol( ::rtl::OUString::createFromAscii( pSymbol ) );
+ return NULL;
+}
+
+Reader* GetRTFReader()
+{
+ FnGetReader pFunction = reinterpret_cast<FnGetReader>( GetMswordLibSymbol( "ImportRTF" ) );
+
+ if ( pFunction )
+ return (*pFunction)();
+
+ return NULL;
+}
+
+void GetRTFWriter( const String& rFltName, const String& rBaseURL, WriterRef& xRet )
+{
+ FnGetWriter pFunction = reinterpret_cast<FnGetWriter>( GetMswordLibSymbol( "ExportRTF" ) );
+
+ if ( pFunction )
+ (*pFunction)( rFltName, rBaseURL, xRet );
+ else
+ xRet = WriterRef(0);
+}
+
+Reader* GetWW8Reader()
+{
+ FnGetReader pFunction = reinterpret_cast<FnGetReader>( GetMswordLibSymbol( "ImportDOC" ) );
+
+ if ( pFunction )
+ return (*pFunction)();
+
+ return NULL;
+}
+
+void GetWW8Writer( const String& rFltName, const String& rBaseURL, WriterRef& xRet )
+{
+ FnGetWriter pFunction = reinterpret_cast<FnGetWriter>( GetMswordLibSymbol( "ExportDOC" ) );
+
+ if ( pFunction )
+ (*pFunction)( rFltName, rBaseURL, xRet );
+ else
+ xRet = WriterRef(0);
+}
+
+typedef ULONG ( __LOADONCALLAPI *SaveOrDel )( SfxObjectShell&, SotStorage&, BOOL, const String& );
+typedef ULONG ( __LOADONCALLAPI *GetSaveWarning )( SfxObjectShell& );
+
+ULONG SaveOrDelMSVBAStorage( SfxObjectShell& rDoc, SotStorage& rStor, BOOL bSaveInto, const String& rStorageName )
+{
+ SaveOrDel pFunction = reinterpret_cast<SaveOrDel>( GetMswordLibSymbol( "SaveOrDelMSVBAStorage_ww8" ) );
+ if( pFunction )
+ return pFunction( rDoc, rStor, bSaveInto, rStorageName );
+ return ERRCODE_NONE;
+}
+
+ULONG GetSaveWarningOfMSVBAStorage( SfxObjectShell &rDocS )
+{
+ GetSaveWarning pFunction = reinterpret_cast<GetSaveWarning>( GetMswordLibSymbol( "GetSaveWarningOfMSVBAStorage_ww8" ) );
+ if( pFunction )
+ return pFunction( rDocS );
+ return ERRCODE_NONE;
+}
+
+
diff --git a/sw/source/filter/rtf/rtfatr.cxx b/sw/source/filter/rtf/rtfatr.cxx
index 507c83c2a204..17050299c84b 100644
--- a/sw/source/filter/rtf/rtfatr.cxx
+++ b/sw/source/filter/rtf/rtfatr.cxx
@@ -3776,11 +3776,7 @@ static Writer& OutRTF_SwFmtBox( Writer& rWrt, const SfxPoolItem& rHt )
static USHORT __READONLY_DATA aBorders[] = {
BOX_LINE_TOP, BOX_LINE_LEFT, BOX_LINE_BOTTOM, BOX_LINE_RIGHT };
-#ifdef __MINGW32__ // for runtime pseudo reloc
- static const sal_Char* aBorderNames[] = {
-#else
static const sal_Char* __READONLY_DATA aBorderNames[] = {
-#endif
OOO_STRING_SVTOOLS_RTF_BRDRT, OOO_STRING_SVTOOLS_RTF_BRDRL, OOO_STRING_SVTOOLS_RTF_BRDRB, OOO_STRING_SVTOOLS_RTF_BRDRR };
USHORT nDist = rBox.GetDistance();
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index 2e992335598e..952ab3f2767f 100755..100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -257,11 +257,28 @@ static void WriteDop( WW8Export& rWrt )
SwDocShell *pDocShell(rWrt.pDoc->GetDocShell());
DBG_ASSERT(pDocShell, "no SwDocShell");
uno::Reference<document::XDocumentProperties> xDocProps;
+ uno::Reference<beans::XPropertySet> xProps;
if (pDocShell) {
+ uno::Reference<lang::XComponent> xModelComp(pDocShell->GetModel(),
+ uno::UNO_QUERY);
+ xProps = uno::Reference<beans::XPropertySet>(xModelComp,
+ uno::UNO_QUERY);
uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
- pDocShell->GetModel(), uno::UNO_QUERY_THROW);
+ xModelComp, uno::UNO_QUERY_THROW);
xDocProps = xDPS->getDocumentProperties();
DBG_ASSERT(xDocProps.is(), "DocumentProperties is null");
+
+ rDop.lKeyProtDoc = pDocShell->GetModifyPasswordHash();
+ }
+
+ if ((rWrt.pSepx && rWrt.pSepx->DocumentIsProtected()) ||
+ rDop.lKeyProtDoc != 0)
+ {
+ rDop.fProtEnabled = 1;
+ }
+ else
+ {
+ rDop.fProtEnabled = 0;
}
if (!xDocProps.is()) {
@@ -279,9 +296,8 @@ static void WriteDop( WW8Export& rWrt )
Date aD3(uDT.Day, uDT.Month, uDT.Year);
Time aT3(uDT.Hours, uDT.Minutes, uDT.Seconds, uDT.HundredthSeconds);
rDop.dttmLastPrint = sw::ms::DateTime2DTTM(DateTime(aD3,aT3));
- }
- rDop.fProtEnabled = rWrt.pSepx ? rWrt.pSepx->DocumentIsProtected() : 0;
+ }
// auch damit werden die DocStat-Felder in Kopf-/Fusszeilen nicht korrekt
// berechnet.
@@ -2456,7 +2472,7 @@ typedef ::std::deque<SwNode *> SwNodeDeque;
void MSWordExportBase::WriteText()
{
// whoever has need of the missing function should go and implement it!
-// This damned piece of code always breaks builds...
+// This piece of code always breaks builds...
//#ifdef DEBUG
// ::std::clog << "<WriteText>" << ::std::endl;
// ::std::clog << dbg_out(pCurPam->GetDoc()->GetNodes()) << ::std::endl;
@@ -2472,7 +2488,7 @@ void MSWordExportBase::WriteText()
SwNode * pNd = pCurPam->GetNode();
// whoever has need of the missing function should go and implement it!
-// This damned piece of code always breaks builds...
+// This piece of code always breaks builds...
#if 0
#ifdef DEBUG
if (aNodeSet.find(pNd) == aNodeSet.end())
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 983bc9c73c77..ba932c33c479 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1420,14 +1420,19 @@ void SwWW8ImplReader::ImportDop()
uno::Reference<beans::XPropertySetInfo> xInfo =
xDocProps->getPropertySetInfo();
sal_Bool bValue = false;
- if (xInfo.is() &&
- xInfo->hasPropertyByName(C2U("ApplyFormDesignMode")))
+ if (xInfo.is())
{
- xDocProps->setPropertyValue(C2U("ApplyFormDesignMode"),
- cppu::bool2any(bValue));
+ if (xInfo->hasPropertyByName(C2U("ApplyFormDesignMode")))
+ {
+ xDocProps->setPropertyValue(C2U("ApplyFormDesignMode"),
+ cppu::bool2any(bValue));
+ }
}
}
}
+
+ mpDocShell->SetModifyPasswordHash(pWDop->lKeyProtDoc);
+
const SvtFilterOptions* pOpt = SvtFilterOptions::Get();
sal_Bool bUseEnhFields=(pOpt && pOpt->IsUseEnhancedFields());
if (bUseEnhFields) {
@@ -1852,7 +1857,7 @@ void SwWW8ImplReader::Read_HdFt(bool bIsTitle, int nSect,
bool wwSectionManager::SectionIsProtected(const wwSection &rSection) const
{
- return (mrReader.pWDop->fProtEnabled && !rSection.IsNotProtected());
+ return (!rSection.IsNotProtected());
}
void wwSectionManager::SetHdFt(wwSection &rSection, int nSect,
diff --git a/sw/source/ui/app/docsh.cxx b/sw/source/ui/app/docsh.cxx
index c3f6585e325e..3c14ed6c46f0 100644..100755
--- a/sw/source/ui/app/docsh.cxx
+++ b/sw/source/ui/app/docsh.cxx
@@ -39,6 +39,7 @@
#include <svl/zforlist.hxx>
#include <svl/eitem.hxx>
#include <svl/stritem.hxx>
+#include <svl/PasswordHelper.hxx>
#include <editeng/adjitem.hxx>
#include <basic/sbx.hxx>
#include <unotools/moduleoptions.hxx>
@@ -1367,3 +1368,79 @@ const ::sfx2::IXmlIdRegistry* SwDocShell::GetXmlIdRegistry() const
{
return pDoc ? &pDoc->GetXmlIdRegistry() : 0;
}
+
+
+bool SwDocShell::IsChangeRecording() const
+{
+ return (pWrtShell->GetRedlineMode() & nsRedlineMode_t::REDLINE_ON) != 0;
+}
+
+
+bool SwDocShell::HasChangeRecordProtection() const
+{
+ return pWrtShell->getIDocumentRedlineAccess()->GetRedlinePassword().getLength() > 0;
+}
+
+
+void SwDocShell::SetChangeRecording( bool bActivate )
+{
+ USHORT nOn = bActivate ? nsRedlineMode_t::REDLINE_ON : 0;
+ USHORT nMode = pWrtShell->GetRedlineMode();
+ pWrtShell->SetRedlineModeAndCheckInsMode( (nMode & ~nsRedlineMode_t::REDLINE_ON) | nOn);
+}
+
+
+bool SwDocShell::SetProtectionPassword( const String &rNewPassword )
+{
+ const SfxAllItemSet aSet( GetPool() );
+ const SfxItemSet* pArgs = &aSet;
+ const SfxPoolItem* pItem = NULL;
+
+ IDocumentRedlineAccess* pIDRA = pWrtShell->getIDocumentRedlineAccess();
+ Sequence< sal_Int8 > aPasswd = pIDRA->GetRedlinePassword();
+ if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( FN_REDLINE_PROTECT, FALSE, &pItem )
+ && ((SfxBoolItem*)pItem)->GetValue() == aPasswd.getLength() > 0)
+ return false;
+
+ bool bRes = false;
+
+ if (rNewPassword.Len())
+ {
+ // when password protection is applied change tracking must always be active
+ SetChangeRecording( true );
+
+ Sequence< sal_Int8 > aNewPasswd;
+ SvPasswordHelper::GetHashPassword( aNewPasswd, rNewPassword );
+ pIDRA->SetRedlinePassword( aNewPasswd );
+ bRes = true;
+ }
+ else
+ {
+ pIDRA->SetRedlinePassword( Sequence< sal_Int8 >() );
+ bRes = true;
+ }
+
+ return bRes;
+}
+
+
+bool SwDocShell::GetProtectionHash( /*out*/ ::com::sun::star::uno::Sequence< sal_Int8 > &rPasswordHash )
+{
+ bool bRes = false;
+
+ const SfxAllItemSet aSet( GetPool() );
+ const SfxItemSet* pArgs = &aSet;
+ const SfxPoolItem* pItem = NULL;
+
+ IDocumentRedlineAccess* pIDRA = pWrtShell->getIDocumentRedlineAccess();
+ Sequence< sal_Int8 > aPasswdHash( pIDRA->GetRedlinePassword() );
+ if (pArgs && SFX_ITEM_SET == pArgs->GetItemState( FN_REDLINE_PROTECT, FALSE, &pItem )
+ && ((SfxBoolItem*)pItem)->GetValue() == (aPasswdHash.getLength() != 0))
+ return false;
+ rPasswordHash = aPasswdHash;
+ bRes = true;
+
+ return bRes;
+}
+
+
diff --git a/sw/source/ui/app/swmodule.cxx b/sw/source/ui/app/swmodule.cxx
index 4bf8238ade61..3f1c4665c6e3 100644
--- a/sw/source/ui/app/swmodule.cxx
+++ b/sw/source/ui/app/swmodule.cxx
@@ -207,7 +207,6 @@ SwModule::SwModule( SfxObjectFactory* pWebFact,
pView(0),
bAuthorInitialised(sal_False),
bEmbeddedLoadSave( sal_False ),
- pClipboard( 0 ),
pDragDrop( 0 ),
pXSelection( 0 )
{
diff --git a/sw/source/ui/dochdl/swdtflvr.cxx b/sw/source/ui/dochdl/swdtflvr.cxx
index 704172b21074..8220c7ee2c8d 100644
--- a/sw/source/ui/dochdl/swdtflvr.cxx
+++ b/sw/source/ui/dochdl/swdtflvr.cxx
@@ -300,9 +300,7 @@ SwTransferable::~SwTransferable()
SwModule* pMod = SW_MOD();
if(pMod)
{
- if ( pMod->pClipboard == this )
- pMod->pClipboard = 0;
- else if ( pMod->pDragDrop == this )
+ if ( pMod->pDragDrop == this )
pMod->pDragDrop = 0;
else if ( pMod->pXSelection == this )
pMod->pXSelection = 0;
@@ -338,9 +336,7 @@ static SwDoc * lcl_GetDoc(SwDocFac & rDocFac)
void SwTransferable::ObjectReleased()
{
SwModule *pMod = SW_MOD();
- if( this == pMod->pClipboard )
- pMod->pClipboard = 0;
- else if( this == pMod->pDragDrop )
+ if( this == pMod->pDragDrop )
pMod->pDragDrop = 0;
else if( this == pMod->pXSelection )
pMod->pXSelection = 0;
@@ -1013,7 +1009,6 @@ int SwTransferable::Copy( BOOL bIsCut )
int nRet = PrepareForCopy( bIsCut );
if ( nRet )
{
- SW_MOD()->pClipboard = this;
CopyToClipboard( &pWrtShell->GetView().GetEditWin() );
}
return nRet;
@@ -1035,7 +1030,6 @@ int SwTransferable::CalculateAndCopy()
eBufferType = TRNSFR_DOCUMENT;
AddFormat( FORMAT_STRING );
- SW_MOD()->pClipboard = this;
CopyToClipboard( &pWrtShell->GetView().GetEditWin() );
return 1;
@@ -1086,7 +1080,6 @@ int SwTransferable::CopyGlossary( SwTextBlocks& rGlossary,
PrepareOLE( aObjDesc );
AddFormat( SOT_FORMATSTR_ID_OBJECTDESCRIPTOR );
- SW_MOD()->pClipboard = this;
CopyToClipboard( &pWrtShell->GetView().GetEditWin() );
return 1;
@@ -1104,20 +1097,14 @@ BOOL SwTransferable::IsPaste( const SwWrtShell& rSh,
// Check the common case first: We can always paste our own data!
// #106503#: If _only_ the internal format can be pasted, this check will
// yield 'true', while the one below would give a (wrong) result 'false'.
- bool bIsPaste = ( SW_MOD()->pClipboard != NULL );
+
+ bool bIsPaste = ( GetSwTransferable( rData ) != NULL );
// if it's not our own data, we need to have a closer look:
if( ! bIsPaste )
{
// determine the proper paste action, and return true if we find one
uno::Reference<XTransferable> xTransferable( rData.GetXTransferable() );
- uno::Reference<XUnoTunnel> xTunnel( xTransferable, UNO_QUERY );
- if ( xTunnel.is() )
- {
- sal_Int64 nHandle = xTunnel->getSomething( getUnoTunnelId() );
- if ( nHandle )
- return TRUE;
- }
USHORT nDestination = SwTransferable::GetSotDestination( rSh );
USHORT nSourceOptions =
@@ -1153,36 +1140,27 @@ int SwTransferable::Paste( SwWrtShell& rSh, TransferableDataHelper& rData )
nDestination = SwTransferable::GetSotDestination( rSh );
ULONG nFormat = 0;
- if( SW_MOD()->pClipboard )
+ if( GetSwTransferable( rData ) )
+ {
nAction = EXCHG_OUT_ACTION_INSERT_PRIVATE;
+ }
else
{
- uno::Reference<XUnoTunnel> xTunnel( rData.GetTransferable(), UNO_QUERY );
- if ( xTunnel.is() )
- {
- sal_Int64 nHandle = xTunnel->getSomething( getUnoTunnelId() );
- if ( nHandle )
- nAction = EXCHG_OUT_ACTION_INSERT_PRIVATE;
- }
-
- if ( !nAction )
- {
- USHORT nSourceOptions =
- (( EXCHG_DEST_DOC_TEXTFRAME == nDestination ||
- EXCHG_DEST_SWDOC_FREE_AREA == nDestination ||
- EXCHG_DEST_DOC_TEXTFRAME_WEB == nDestination ||
- EXCHG_DEST_SWDOC_FREE_AREA_WEB == nDestination )
- ? EXCHG_IN_ACTION_COPY
- : EXCHG_IN_ACTION_MOVE);
- uno::Reference<XTransferable> xTransferable( rData.GetXTransferable() );
- nAction = SotExchange::GetExchangeAction(
- rData.GetDataFlavorExVector(),
- nDestination,
- nSourceOptions, /* ?? */
- EXCHG_IN_ACTION_DEFAULT, /* ?? */
- nFormat, nEventAction, 0,
- lcl_getTransferPointer ( xTransferable ) );
- }
+ USHORT nSourceOptions =
+ (( EXCHG_DEST_DOC_TEXTFRAME == nDestination ||
+ EXCHG_DEST_SWDOC_FREE_AREA == nDestination ||
+ EXCHG_DEST_DOC_TEXTFRAME_WEB == nDestination ||
+ EXCHG_DEST_SWDOC_FREE_AREA_WEB == nDestination )
+ ? EXCHG_IN_ACTION_COPY
+ : EXCHG_IN_ACTION_MOVE);
+ uno::Reference<XTransferable> xTransferable( rData.GetXTransferable() );
+ nAction = SotExchange::GetExchangeAction(
+ rData.GetDataFlavorExVector(),
+ nDestination,
+ nSourceOptions, /* ?? */
+ EXCHG_IN_ACTION_DEFAULT, /* ?? */
+ nFormat, nEventAction, 0,
+ lcl_getTransferPointer ( xTransferable ) );
}
// special case for tables from draw application
@@ -1245,7 +1223,7 @@ int SwTransferable::PasteData( TransferableDataHelper& rData,
}
}
}
- else if( ( !pMod->pClipboard || bIsPasteFmt ) &&
+ else if( ( !GetSwTransferable( rData ) || bIsPasteFmt ) &&
!rSh.IsTableMode() && rSh.HasSelection() )
{
// dann die Selektionen loeschen
@@ -1273,14 +1251,14 @@ int SwTransferable::PasteData( TransferableDataHelper& rData,
// <--
}
- SwTransferable *pTrans=0, *pTunneledTrans=0;
- uno::Reference<XUnoTunnel> xTunnel( rData.GetTransferable(), UNO_QUERY );
- if ( xTunnel.is() )
- {
- sal_Int64 nHandle = xTunnel->getSomething( getUnoTunnelId() );
- if ( nHandle )
- pTunneledTrans = (SwTransferable*) (sal_IntPtr) nHandle;
- }
+ SwTransferable *pTrans=0, *pTunneledTrans=GetSwTransferable( rData );
+// uno::Reference<XUnoTunnel> xTunnel( rData.GetTransferable(), UNO_QUERY );
+// if ( xTunnel.is() )
+// {
+// sal_Int64 nHandle = xTunnel->getSomething( getUnoTunnelId() );
+// if ( nHandle )
+// pTunneledTrans = (SwTransferable*) (sal_IntPtr) nHandle;
+// }
if( pPt && ( bPasteSelection ? 0 != ( pTrans = pMod->pXSelection )
: 0 != ( pTrans = pMod->pDragDrop) ))
@@ -1289,7 +1267,7 @@ int SwTransferable::PasteData( TransferableDataHelper& rData,
nRet = pTrans->PrivateDrop( rSh, *pPt, DND_ACTION_MOVE == nDropAction,
bPasteSelection );
}
- else if( !pPt && ( pTunneledTrans || 0 != ( pTunneledTrans = pMod->pClipboard ) ) &&
+ else if( !pPt && pTunneledTrans &&
EXCHG_OUT_ACTION_INSERT_PRIVATE == nAction )
{
// then internal paste
@@ -2816,7 +2794,7 @@ int SwTransferable::PasteFormat( SwWrtShell& rSh,
int nRet = 0;
ULONG nPrivateFmt = FORMAT_PRIVATE;
- SwTransferable *pClipboard = SW_MOD()->pClipboard;
+ SwTransferable *pClipboard = GetSwTransferable( rData );
if( pClipboard &&
((TRNSFR_DOCUMENT|TRNSFR_GRAPHIC|TRNSFR_OLE) & pClipboard->eBufferType ))
nPrivateFmt = SOT_FORMATSTR_ID_EMBED_SOURCE;
@@ -2912,7 +2890,7 @@ int SwTransferable::PasteSpecial( SwWrtShell& rSh, TransferableDataHelper& rData
USHORT nDest = SwTransferable::GetSotDestination( rSh );
- SwTransferable *pClipboard = SW_MOD()->pClipboard;
+ SwTransferable *pClipboard = GetSwTransferable( rData );
if( pClipboard )
{
aDesc = pClipboard->aObjDesc;
@@ -2978,7 +2956,8 @@ void SwTransferable::FillClipFmtItem( const SwWrtShell& rSh,
SvxClipboardFmtItem & rToFill )
{
USHORT nDest = SwTransferable::GetSotDestination( rSh );
- SwTransferable *pClipboard = SW_MOD()->pClipboard;
+
+ SwTransferable *pClipboard = GetSwTransferable( rData );
if( pClipboard )
{
USHORT nResId;
@@ -3634,6 +3613,22 @@ sal_Int64 SwTransferable::getSomething( const Sequence< sal_Int8 >& rId ) throw(
return nRet;
}
+SwTransferable* SwTransferable::GetSwTransferable( const TransferableDataHelper& rData )
+{
+ SwTransferable* pSwTransferable = NULL;
+
+ uno::Reference<XUnoTunnel> xTunnel( rData.GetTransferable(), UNO_QUERY );
+ if ( xTunnel.is() )
+ {
+ sal_Int64 nHandle = xTunnel->getSomething( getUnoTunnelId() );
+ if ( nHandle )
+ pSwTransferable = (SwTransferable*) (sal_IntPtr) nHandle;
+ }
+
+ return pSwTransferable;
+
+}
+
/* */
// -----------------------------------------------------------------------
diff --git a/sw/source/ui/docvw/AnchorOverlayObject.cxx b/sw/source/ui/docvw/AnchorOverlayObject.cxx
index 53afaf625710..5ed5b076a967 100644
--- a/sw/source/ui/docvw/AnchorOverlayObject.cxx
+++ b/sw/source/ui/docvw/AnchorOverlayObject.cxx
@@ -95,7 +95,7 @@ public:
const basegfx::B2DPolygon& getTriangle() const { return maTriangle; }
const basegfx::B2DPolygon& getLine() const { return maLine; }
const basegfx::B2DPolygon& getLineTop() const { return maLineTop; }
- const AnchorState getAnchorState() const { return maAnchorState; }
+ AnchorState getAnchorState() const { return maAnchorState; }
const basegfx::BColor& getColor() const { return maColor; }
double getLogicLineWidth() const { return mfLogicLineWidth; }
bool getShadow() const { return mbShadow; }
diff --git a/sw/source/ui/docvw/PostItMgr.cxx b/sw/source/ui/docvw/PostItMgr.cxx
index 53770059cbcd..645d4773626a 100644
--- a/sw/source/ui/docvw/PostItMgr.cxx
+++ b/sw/source/ui/docvw/PostItMgr.cxx
@@ -1645,28 +1645,36 @@ void SwPostItMgr::CorrectPositions()
if (!pFirstPostIt)
return;
- // yeah, I know, if this is a left page it could be wrong, but finding the page and the note is probably not even faster than just doing it
- const long aAnchorX = mpEditWin->LogicToPixel( Point((long)(pFirstPostIt->Anchor()->GetSixthPosition().getX()),0)).X();
- const long aAnchorY = mpEditWin->LogicToPixel( Point(0,(long)(pFirstPostIt->Anchor()->GetSixthPosition().getY()))).Y() + 1;
- if (Point(aAnchorX,aAnchorY) != pFirstPostIt->GetPosPixel())
- {
- long aAnchorPosX = 0;
- long aAnchorPosY = 0;
- for (unsigned long n=0;n<mPages.size();n++)
- {
- for(SwSidebarItem_iterator i = mPages[n]->mList->begin(); i!= mPages[n]->mList->end(); i++)
- {
- if ((*i)->bShow && (*i)->pPostIt)
- {
+ // yeah, I know, if this is a left page it could be wrong, but finding the page and the note is probably not even faster than just doing it
+ // --> OD 2010-06-03 #i111964# - check, if anchor overlay object exists.
+ const long aAnchorX = pFirstPostIt->Anchor()
+ ? mpEditWin->LogicToPixel( Point((long)(pFirstPostIt->Anchor()->GetSixthPosition().getX()),0)).X()
+ : 0;
+ const long aAnchorY = pFirstPostIt->Anchor()
+ ? mpEditWin->LogicToPixel( Point(0,(long)(pFirstPostIt->Anchor()->GetSixthPosition().getY()))).Y() + 1
+ : 0;
+ // <--
+ if (Point(aAnchorX,aAnchorY) != pFirstPostIt->GetPosPixel())
+ {
+ long aAnchorPosX = 0;
+ long aAnchorPosY = 0;
+ for (unsigned long n=0;n<mPages.size();n++)
+ {
+ for(SwSidebarItem_iterator i = mPages[n]->mList->begin(); i!= mPages[n]->mList->end(); i++)
+ {
+ // --> OD 2010-06-03 #i111964# - check, if anchor overlay object exists.
+ if ( (*i)->bShow && (*i)->pPostIt && (*i)->pPostIt->Anchor() )
+ // <--
+ {
aAnchorPosX = mPages[n]->eSidebarPosition == sw::sidebarwindows::SIDEBAR_LEFT
? mpEditWin->LogicToPixel( Point((long)((*i)->pPostIt->Anchor()->GetSeventhPosition().getX()),0)).X()
: mpEditWin->LogicToPixel( Point((long)((*i)->pPostIt->Anchor()->GetSixthPosition().getX()),0)).X();
aAnchorPosY = mpEditWin->LogicToPixel( Point(0,(long)((*i)->pPostIt->Anchor()->GetSixthPosition().getY()))).Y() + 1;
(*i)->pPostIt->SetPosPixel(Point(aAnchorPosX,aAnchorPosY));
}
- }
- }
- }
+ }
+ }
+ }
}
diff --git a/sw/source/ui/docvw/SidebarWin.cxx b/sw/source/ui/docvw/SidebarWin.cxx
index cce6db3a891b..dc4f006e2026 100755
--- a/sw/source/ui/docvw/SidebarWin.cxx
+++ b/sw/source/ui/docvw/SidebarWin.cxx
@@ -334,12 +334,6 @@ void SwSidebarWin::InitControls()
mpOutliner->SetUpdateMode( TRUE );
Rescale();
- OutputDevice* pDev = aShell->GetDoc()->getReferenceDevice(TRUE);
- if ( pDev )
- {
- mpOutliner->SetRefDevice( pDev );
- }
-
mpOutlinerView = new OutlinerView ( mpOutliner, mpSidebarTxtControl );
mpOutlinerView->SetBackgroundColor(COL_TRANSPARENT);
mpOutliner->InsertView(mpOutlinerView );
@@ -560,14 +554,28 @@ void SwSidebarWin::SetPosAndSize()
{
if (IsFollow() && !HasChildPathFocus())
{
- mpAnchor->SetAnchorState(AS_END);
+ // --> OD 2010-06-03 #i111964#
+ if ( mpAnchor )
+ {
+ mpAnchor->SetAnchorState(AS_END);
+ }
+ // <--
}
else
{
- mpAnchor->SetAnchorState(AS_ALL);
+ // --> OD 2010-06-03 #i111964#
+ if ( mpAnchor )
+ {
+ mpAnchor->SetAnchorState(AS_ALL);
+ }
+ // <--
SwSidebarWin* pWin = GetTopReplyNote();
- if (pWin)
+ // --> OD 2010-06-03 #i111964#
+ if ( pWin && pWin->Anchor() )
+ // <--
+ {
pWin->Anchor()->SetAnchorState(AS_END);
+ }
}
}
}
@@ -1127,8 +1135,12 @@ void SwSidebarWin::SetViewState(ViewState bViewState)
{
mpAnchor->SetAnchorState(AS_ALL);
SwSidebarWin* pWin = GetTopReplyNote();
- if (pWin)
+ // --> OD 2010-06-03 #i111964#
+ if ( pWin && pWin->Anchor() )
+ // <--
+ {
pWin->Anchor()->SetAnchorState(AS_END);
+ }
mpAnchor->setLineSolid(true);
}
if (mpShadow)
@@ -1156,17 +1168,24 @@ void SwSidebarWin::SetViewState(ViewState bViewState)
SwSidebarWin* pTopWinActive = mrMgr.HasActiveSidebarWin()
? mrMgr.GetActiveSidebarWin()->GetTopReplyNote()
: 0;
- if (pTopWinSelf && (pTopWinSelf!=pTopWinActive))
+ // --> OD 2010-06-03 #i111964#
+ if ( pTopWinSelf && ( pTopWinSelf != pTopWinActive ) &&
+ pTopWinSelf->Anchor() )
+ // <--
{
- if (pTopWinSelf!=mrMgr.GetActiveSidebarWin())
+ if ( pTopWinSelf != mrMgr.GetActiveSidebarWin() )
+ {
pTopWinSelf->Anchor()->setLineSolid(false);
+ }
pTopWinSelf->Anchor()->SetAnchorState(AS_ALL);
}
}
mpAnchor->setLineSolid(false);
}
- if (mpShadow)
+ if ( mpShadow )
+ {
mpShadow->SetShadowState(SS_NORMAL);
+ }
break;
}
}
diff --git a/sw/source/ui/inc/swdtflvr.hxx b/sw/source/ui/inc/swdtflvr.hxx
index a239f13f1ec2..041b55d9c6db 100644
--- a/sw/source/ui/inc/swdtflvr.hxx
+++ b/sw/source/ui/inc/swdtflvr.hxx
@@ -91,6 +91,7 @@ class SwTransferable : public TransferableHelper
void DeleteSelection();
// helper methods for the paste
+ static SwTransferable* GetSwTransferable( const TransferableDataHelper& rData );
static void SetSelInShell( SwWrtShell& , BOOL , const Point* );
static BOOL _CheckForURLOrLNKFile( TransferableDataHelper& rData,
String& rFileName, String* pTitle = 0 );
diff --git a/sw/source/ui/uiview/srcview.cxx b/sw/source/ui/uiview/srcview.cxx
index c7c52e3f53ff..801ecba22c73 100644
--- a/sw/source/ui/uiview/srcview.cxx
+++ b/sw/source/ui/uiview/srcview.cxx
@@ -599,15 +599,11 @@ void SwSrcView::GetState(SfxItemSet& rSet)
break;
case SID_PASTE:
{
- BOOL bDisable = 0 == SW_MOD()->pClipboard;
- if( bDisable )
- {
- TransferableDataHelper aDataHelper(
- TransferableDataHelper::CreateFromSystemClipboard(
- &aEditWin) );
- bDisable = !aDataHelper.GetXTransferable().is() ||
- 0 == aDataHelper.GetFormatCount();
- }
+ TransferableDataHelper aDataHelper(
+ TransferableDataHelper::CreateFromSystemClipboard(
+ &aEditWin) );
+ BOOL bDisable = !aDataHelper.GetXTransferable().is() ||
+ 0 == aDataHelper.GetFormatCount();
if( bDisable )
rSet.DisableItem(nWhich);
}
diff --git a/sw/source/ui/uiview/view2.cxx b/sw/source/ui/uiview/view2.cxx
index e19e06916145..3a7003ff7bca 100644..100755
--- a/sw/source/ui/uiview/view2.cxx
+++ b/sw/source/ui/uiview/view2.cxx
@@ -55,6 +55,7 @@
#include <editeng/langitem.hxx>
#include <svx/viewlayoutitem.hxx>
#include <svx/zoomslideritem.hxx>
+#include <svtools/xwindowitem.hxx>
#include <svx/htmlmode.hxx>
#include <vcl/svapp.hxx>
#include <vcl/wrkwin.hxx>
@@ -538,11 +539,12 @@ void __EXPORT SwView::Execute(SfxRequest &rReq)
// xmlsec05: new password dialog
Window* pParent;
const SfxPoolItem* pParentItem;
- if( SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_PARENTWINDOW, FALSE, &pParentItem ) )
- pParent = ( Window* ) ( ( const OfaPtrItem* ) pParentItem )->GetValue();
+ if( SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_XWINDOW, FALSE, &pParentItem ) )
+ pParent = ( ( const XWindowItem* ) pParentItem )->GetWindowPtr();
else
pParent = &GetViewFrame()->GetWindow();
SfxPasswordDialog aPasswdDlg( pParent );
+ aPasswdDlg.SetMinLen( 1 );
//#i69751# the result of Execute() can be ignored
aPasswdDlg.Execute();
String sNewPasswd( aPasswdDlg.GetPassword() );
@@ -574,11 +576,12 @@ void __EXPORT SwView::Execute(SfxRequest &rReq)
// message box for wrong password
Window* pParent;
const SfxPoolItem* pParentItem;
- if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_PARENTWINDOW, FALSE, &pParentItem ) )
- pParent = ( Window* ) ( ( const OfaPtrItem* ) pParentItem )->GetValue();
+ if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_ATTR_XWINDOW, FALSE, &pParentItem ) )
+ pParent = ( ( const XWindowItem* ) pParentItem )->GetWindowPtr();
else
pParent = &GetViewFrame()->GetWindow();
SfxPasswordDialog aPasswdDlg( pParent );
+ aPasswdDlg.SetMinLen( 1 );
if(!aPasswd.getLength())
aPasswdDlg.ShowExtras(SHOWEXTRAS_CONFIRM);
if (aPasswdDlg.Execute())
diff --git a/sw/source/ui/uiview/viewstat.cxx b/sw/source/ui/uiview/viewstat.cxx
index f23b73f5dfad..b0d5f71744c9 100644..100755
--- a/sw/source/ui/uiview/viewstat.cxx
+++ b/sw/source/ui/uiview/viewstat.cxx
@@ -269,12 +269,10 @@ void SwView::GetState(SfxItemSet &rSet)
}
break;
case FN_REDLINE_ON:
- rSet.Put( SfxBoolItem( nWhich, (pWrtShell->GetRedlineMode() & nsRedlineMode_t::REDLINE_ON) != 0 ) );
- break;
+ rSet.Put( SfxBoolItem( nWhich, GetDocShell()->IsChangeRecording() ) );
+ break;
case FN_REDLINE_PROTECT :
- {
- rSet.Put( SfxBoolItem( nWhich, pWrtShell->getIDocumentRedlineAccess()->GetRedlinePassword().getLength() > 0 ) );
- }
+ rSet.Put( SfxBoolItem( nWhich, GetDocShell()->HasChangeRecordProtection() ) );
break;
case FN_REDLINE_SHOW:
{
diff --git a/sw/source/ui/uno/SwXDocumentSettings.cxx b/sw/source/ui/uno/SwXDocumentSettings.cxx
index 63a674e0efad..b0ad816df4a1 100644
--- a/sw/source/ui/uno/SwXDocumentSettings.cxx
+++ b/sw/source/ui/uno/SwXDocumentSettings.cxx
@@ -122,8 +122,9 @@ enum SwDocumentSettingsPropertyHandles
HANDLE_PROTECT_FORM,
HANDLE_TABS_RELATIVE_TO_INDENT,
// --> OD 2008-06-05 #i89181#
- HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST
+ HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST,
// <--
+ HANDLE_MODIFYPASSWORDINFO
};
MasterPropertySetInfo * lcl_createSettingsInfo()
@@ -177,6 +178,7 @@ MasterPropertySetInfo * lcl_createSettingsInfo()
{ RTL_CONSTASCII_STRINGPARAM("ProtectForm"), HANDLE_PROTECT_FORM, CPPUTYPE_BOOLEAN, 0, 0},
// --> OD 2008-06-05 #i89181#
{ RTL_CONSTASCII_STRINGPARAM("TabAtLeftIndentForParagraphsInList"), HANDLE_TAB_AT_LEFT_INDENT_FOR_PARA_IN_LIST, CPPUTYPE_BOOLEAN, 0, 0},
+ { RTL_CONSTASCII_STRINGPARAM("ModifyPasswordInfo"), HANDLE_MODIFYPASSWORDINFO, CPPUTYPE_PROPERTYVALUE, 0, 0},
/*
* As OS said, we don't have a view when we need to set this, so I have to
@@ -671,6 +673,21 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf
}
break;
// <--
+ case HANDLE_MODIFYPASSWORDINFO:
+ {
+ uno::Sequence< beans::PropertyValue > aInfo;
+ if ( !( rValue >>= aInfo ) )
+ throw lang::IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Value of type Sequence<PropertyValue> expected!" ) ),
+ uno::Reference< uno::XInterface >(),
+ 2 );
+
+ if ( !mpDocSh->SetModifyPasswordInfo( aInfo ) )
+ throw beans::PropertyVetoException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "The hash is not allowed to be changed now!" ) ),
+ uno::Reference< uno::XInterface >() );
+ }
+ break;
default:
throw UnknownPropertyException();
}
@@ -998,6 +1015,11 @@ void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInf
}
break;
// <--
+ case HANDLE_MODIFYPASSWORDINFO:
+ {
+ rValue <<= mpDocSh->GetModifyPasswordInfo();
+ }
+ break;
default:
throw UnknownPropertyException();
diff --git a/sw/source/ui/uno/swdetect.cxx b/sw/source/ui/uno/swdetect.cxx
index c33d7428b630..cbde03479433 100644
--- a/sw/source/ui/uno/swdetect.cxx
+++ b/sw/source/ui/uno/swdetect.cxx
@@ -167,7 +167,7 @@ SwFilterDetect::~SwFilterDetect()
lDescriptor[nProperty].Value >>= xInteraction;
nIndexOfInteractionHandler = nProperty;
}
- else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RapairPackage")) )
+ else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("RepairPackage")) )
lDescriptor[nProperty].Value >>= bRepairPackage;
else if( lDescriptor[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("DocumentTitle")) )
nIndexOfDocumentTitle = nProperty;
diff --git a/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png b/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png
index b009ee2b9277..1b51a60bddea 100644
--- a/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/128x128/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png b/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png
index c81fc95d4770..3aa8f08a8c5d 100644
--- a/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/16x16/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png b/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png
index 22bdd4a7fef9..296c6f4c58b1 100644
--- a/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/32x32/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png b/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png
index f67dc976750b..86bcf599553f 100644
--- a/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png
+++ b/sysui/desktop/icons/hicolor/48x48/apps/startcenter.png
Binary files differ
diff --git a/sysui/desktop/menus/base.desktop b/sysui/desktop/menus/base.desktop
index 89d0a20adb00..9497666691fe 100644
--- a/sysui/desktop/menus/base.desktop
+++ b/sysui/desktop/menus/base.desktop
@@ -9,3 +9,4 @@ MimeType=application/vnd.oasis.opendocument.database;application/vnd.sun.xml.bas
Name=%PRODUCTNAME Base
GenericName=Database Development
Comment=Manage databases, create queries and reports to track and manage your information by using Base.
+InitialPreference=5
diff --git a/sysui/desktop/menus/calc.desktop b/sysui/desktop/menus/calc.desktop
index e49b114b0954..bc0c9ee8b618 100644
--- a/sysui/desktop/menus/calc.desktop
+++ b/sysui/desktop/menus/calc.desktop
@@ -9,3 +9,4 @@ MimeType=application/vnd.oasis.opendocument.spreadsheet;application/vnd.oasis.op
Name=%PRODUCTNAME Calc
GenericName=Spreadsheet
Comment=Perform calculation, analyze information and manage lists in spreadsheets by using Calc.
+InitialPreference=5
diff --git a/sysui/desktop/menus/draw.desktop b/sysui/desktop/menus/draw.desktop
index 438d603e06a2..42db7c6f84a0 100644
--- a/sysui/desktop/menus/draw.desktop
+++ b/sysui/desktop/menus/draw.desktop
@@ -9,3 +9,4 @@ MimeType=application/vnd.oasis.opendocument.graphics;application/vnd.oasis.opend
Name=%PRODUCTNAME Draw
GenericName=Drawing Program
Comment=Create and edit drawings, flow charts, and logos by using Draw.
+InitialPreference=5
diff --git a/sysui/desktop/menus/impress.desktop b/sysui/desktop/menus/impress.desktop
index 0aa3cdecdc04..90df11ac54f1 100644
--- a/sysui/desktop/menus/impress.desktop
+++ b/sysui/desktop/menus/impress.desktop
@@ -9,3 +9,4 @@ MimeType=application/vnd.oasis.opendocument.presentation;application/vnd.oasis.o
Name=%PRODUCTNAME Impress
GenericName=Presentation
Comment=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+InitialPreference=5
diff --git a/sysui/desktop/menus/math.desktop b/sysui/desktop/menus/math.desktop
index 15a6d42efc2c..f97536d6ef04 100644
--- a/sysui/desktop/menus/math.desktop
+++ b/sysui/desktop/menus/math.desktop
@@ -9,3 +9,4 @@ MimeType=application/vnd.oasis.opendocument.formula;application/vnd.sun.xml.math
Name=%PRODUCTNAME Math
GenericName=Formula Editor
Comment=Create and edit scientific formulas and equations by using Math.
+InitialPreference=5
diff --git a/sysui/desktop/menus/startcenter.desktop b/sysui/desktop/menus/startcenter.desktop
index b6067494a68c..6302a5b16289 100644
--- a/sysui/desktop/menus/startcenter.desktop
+++ b/sysui/desktop/menus/startcenter.desktop
@@ -5,7 +5,7 @@ Icon=startcenter
Type=Application
Categories=Office;X-Red-Hat-Base;X-SuSE-Core-Office;X-MandrivaLinux-Office-Other;
Exec=openoffice %U
-MimeType=
+MimeType=application/vnd.openofficeorg.extension;
Name=%PRODUCTNAME
GenericName=Office
Comment=The office productivity suite compatible to the open and standardized ODF document format. Supported by Sun Microsystems.
diff --git a/sysui/desktop/menus/writer.desktop b/sysui/desktop/menus/writer.desktop
index 0184d916e2ab..1509de0fb402 100644
--- a/sysui/desktop/menus/writer.desktop
+++ b/sysui/desktop/menus/writer.desktop
@@ -9,3 +9,4 @@ MimeType=application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocum
Name=%PRODUCTNAME Writer
GenericName=Word Processor
Comment=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+InitialPreference=5
diff --git a/testautomation/chart2/optional/includes/ch2_datadialogue.inc b/testautomation/chart2/optional/includes/ch2_datadialogue.inc
index e0db844353c1..fd7876057db5 100644
--- a/testautomation/chart2/optional/includes/ch2_datadialogue.inc
+++ b/testautomation/chart2/optional/includes/ch2_datadialogue.inc
@@ -45,12 +45,6 @@ testcase tChartDataDialogueButtons
Printlog " Insert a new Chart-object, via the Menu: 'Insert - Chart'."
InsertChart
WaitSlot()
- '/// Press 'TAB' once to select the object
- printlog " Press 'TAB' once to select the object."
- DocumentImpress.TypeKeys "<TAB>"
- '/// Click the button 'RETURN' / 'ENTER' to enter the Chart-Data-dialogue
- printlog " Click the button 'Return', to enter the Chart-Data-dialogue."
- DocumentImpress.TypeKeys "<RETURN>"
Kontext "DocumentChart"
'/// Open context menu
printlog "Open context menu"
@@ -230,12 +224,6 @@ testcase tChartDataDialogueFieldsUndo
printlog " Insert a new Chart-object, via the Menu: 'Insert - Chart'."
InsertChart
WaitSlot()
- '/// Press 'TAB' once to select the object
- printlog " Press 'TAB' once to select the object."
- DocumentImpress.TypeKeys "<TAB>"
- '/// Click the button 'RETURN' / 'ENTER' to enter the Chart-Data-dialogue
- printlog " Click the button 'Return', to enter the Chart-Data-dialogue."
- DocumentImpress.TypeKeys "<RETURN>"
Kontext "DocumentChart"
'/// Open context menu
printlog "Open context menu"
diff --git a/testautomation/chart2/optional/includes/ch2_lvl1a.inc b/testautomation/chart2/optional/includes/ch2_lvl1a.inc
index 5f72fd7e32f9..99ca5a985bc4 100755..100644
--- a/testautomation/chart2/optional/includes/ch2_lvl1a.inc
+++ b/testautomation/chart2/optional/includes/ch2_lvl1a.inc
@@ -40,109 +40,111 @@ end sub
testcase tPlotOptions
-
- Dim sOutputFile as string
- sOutputFile = convertpath(gOfficepath & "user\work\hiddenCells.ods")
- printlog "Load simple chart document"
- if fLoadVerySimpleChartAndSaveLocal() > 0 then
- warnlog "Loading test document seems to have failed -> Check this out!"
- goto endsub
- endif
- printlog "Select chart using navigator"
- if fSelectFirstOLE = -1 then
- warnlog "It was not possible to select the chart object!"
- Call hCloseDocument
- goto endsub
- endif
+ Dim sOutputFile as string
+ sOutputFile = convertpath(gOfficepath & "user\work\hiddenCells.ods")
- printlog "Edit / Object / Edit"
- EditObjectEdit
+ gApplication = "CALC"
- printlog "Select DataSeries A by toolbar selectorbox"
- Kontext "DocumentChart"
- call fChartSelectElement (8)
+ printlog "Load simple chart document"
+ if fLoadVerySimpleChartAndSaveLocal() > 0 then
+ warnlog "Loading test document seems to have failed -> Check this out!"
+ goto endsub
+ endif
+ printlog "Select chart using navigator"
+ if fSelectFirstOLE = -1 then
+ warnlog "It was not possible to select the chart object!"
+ Call hCloseDocument
+ goto endsub
+ endif
+
+ printlog "Edit / Object / Edit"
+ EditObjectEdit
+ waitslot()
+ printlog "Select DataSeries A by toolbar selectorbox"
+ Kontext "DocumentChart"
+ call fChartSelectElement (8)
+
+ printlog "Invoke Format::ObjectProperties"
+ Kontext "Toolbar"
+ FormatSelection.Click
- printlog "Invoke Format::ObjectProperties"
- Kontext "Toolbar"
- FormatSelection.Click
+ printlog "Select tab page Options"
+ Kontext
+ Active.SetPage TabDataSeriesOptions
+ Kontext "TabDataSeriesOptions"
+ printlog "activate checkbox 'Include values from hidden cells'"
+ try
+ IncludeHiddenCells.Check
+ catch
+ Warnlog "checkbox hidden or disabled"
+ Call hCloseDocument
+ goto endsub
+ endcatch
- printlog "Select tab page Options"
- Kontext
- Active.SetPage TabDataSeriesOptions
- Kontext "TabDataSeriesOptions"
- printlog "activate checkbox 'Include values from hidden cells'"
- try
- IncludeHiddenCells.Check
- catch
- Warnlog "checkbox hidden or disabled"
- Call hCloseDocument
- goto endsub
- endcatch
-
- printlog "Close and reopen data series dialog - checkbox should be still activated"
- TabDataSeriesOptions.Ok
- Kontext "DocumentChart"
- FormatSelection
- printlog "Select tab page Options"
- Kontext
- Active.SetPage TabDataSeriesOptions
- Kontext "TabDataSeriesOptions"
- if Not IncludeHiddenCells.IsChecked then
- Warnlog "After closing and reopening of Data-Series dialog the checkbox isn't checked anymore"
- TabDataSeriesOptions.Cancel
- Kontext "DocumentCalc"
- DocumentCalc.TypeKeys "<Escape>"
- call hCloseDocument
- goto endsub
- endif
+ printlog "Close and reopen data series dialog - checkbox should be still activated"
+ TabDataSeriesOptions.Ok
+ Kontext "DocumentChart"
+ FormatSelection
+ printlog "Select tab page Options"
+ Kontext
+ Active.SetPage TabDataSeriesOptions
+ Kontext "TabDataSeriesOptions"
+ if Not IncludeHiddenCells.IsChecked then
+ Warnlog "After closing and reopening of Data-Series dialog the checkbox isn't checked anymore"
+ TabDataSeriesOptions.Cancel
+ Kontext "DocumentCalc"
+ DocumentCalc.TypeKeys "<Escape>"
+ call hCloseDocument
+ goto endsub
+ endif
+
+ TabDataSeriesOptions.Ok
+
+ printlog "save and reopen file - checkbox still must be checked"
+ if NOT hFileSaveAsKill (sOutputFile) then
+ warnlog "Saving test document failed -> Aborting"
+ Kontext "DocumentCalc"
+ DocumentCalc.TypeKeys "<Escape>"
+ call hCloseDocument
+ goto endsub
+ endif
+ Call hCloseDocument
- TabDataSeriesOptions.Ok
-
- printlog "save and reopen file - checkbox still must be checked"
- if NOT hFileSaveAsKill (sOutputFile) then
- warnlog "Saving test document failed -> Aborting"
- Kontext "DocumentCalc"
- DocumentCalc.TypeKeys "<Escape>"
- call hCloseDocument
- goto endsub
- endif
- Call hCloseDocument
-
Call hFileOpen(sOutputFile)
- if fSelectFirstOLE = -1 then
- warnlog "It was not possible to select the chart object!"
- Call hCloseDocument
- goto endsub
- endif
+ if fSelectFirstOLE = -1 then
+ warnlog "It was not possible to select the chart object!"
+ Call hCloseDocument
+ goto endsub
+ endif
- EditObjectEdit
+ EditObjectEdit
+ waitslot()
+ printlog "Select DataSeries A by toolbar selectorbox"
+ call fChartSelectElement (8)
- printlog "Select DataSeries A by toolbar selectorbox"
- call fChartSelectElement (8)
+ printlog "Invoke Format::ObjectProperties"
+ Kontext "Toolbar"
+ FormatSelection.Click
+ Kontext
+ Active.SetPage TabDataSeriesOptions
+ Kontext "TabDataSeriesOptions"
+ if Not IncludeHiddenCells.IsChecked then
+ Warnlog "After closing and reopening of Data-Series dialog the checkbox isn't checked anymore"
+ TabDataSeriesOptions.Cancel
+ Kontext "DocumentCalc"
+ DocumentCalc.TypeKeys "<Escape>"
+ call hCloseDocument
+ goto endsub
+ endif
- printlog "Invoke Format::ObjectProperties"
- Kontext "Toolbar"
- FormatSelection.Click
- Kontext
- Active.SetPage TabDataSeriesOptions
- Kontext "TabDataSeriesOptions"
- if Not IncludeHiddenCells.IsChecked then
- Warnlog "After closing and reopening of Data-Series dialog the checkbox isn't checked anymore"
- TabDataSeriesOptions.Cancel
- Kontext "DocumentCalc"
- DocumentCalc.TypeKeys "<Escape>"
- call hCloseDocument
- goto endsub
- endif
-
- '/// Close dialog with Cancel-button
- TabDataSeriesOptions.Cancel
- '/// Close document
- Kontext "DocumentCalc"
- DocumentCalc.TypeKeys "<Escape>"
+ '/// Close dialog with Cancel-button
+ TabDataSeriesOptions.Cancel
+ '/// Close document
+ Kontext "DocumentCalc"
+ DocumentCalc.TypeKeys "<Escape>"
- Call hCloseDocument
+ Call hCloseDocument
endcase
'
@@ -150,14 +152,16 @@ endcase
'
testcase tChartShapes
- Dim sLocalFile as string
- Dim sLocalFileXLS as string
- Dim sFormatXLS as string
- sLocalFile = convertpath(gOfficepath & "user\work\chartshapes.ods")
- sLocalFileXLS = convertpath(gOfficepath & "user\work\chartshapes.xls")
- sFormatXLS = "MS Excel 97"
-
- printlog " Load simple chart document"
+ Dim sLocalFile as string
+ Dim sLocalFileXLS as string
+ Dim sFormatXLS as string
+ sLocalFile = convertpath(gOfficepath & "user\work\chartshapes.ods")
+ sLocalFileXLS = convertpath(gOfficepath & "user\work\chartshapes.xls")
+ sFormatXLS = "MS Excel 97"
+
+ gApplication = "CALC"
+
+ printlog " Load simple chart document"
if fLoadVerySimpleChartAndSaveLocal() > 0 then
warnlog "Loading test document seems to have failed -> Check this out!"
goto endsub
@@ -168,11 +172,11 @@ testcase tChartShapes
EditObjectEdit
printlog " Verify that the drawbar is visible"
Kontext "DrawBar"
-
+
qaerrorlog "#i107003# disabled because of bug in toolbars"
-' if Not DrawBar.Exists then
-' Call hToolbarSelect("Drawing", true)
-' endif
+ ' if Not DrawBar.Exists then
+ ' Call hToolbarSelect("Drawing", true)
+ ' endif
printlog " Insert a shape to the chart by <STRG-RETURN>"
Kontext "DocumentChart"
@@ -197,7 +201,7 @@ testcase tChartShapes
Kontext "DocumentCalc"
DocumentCalc.TypeKeys "<Escape>"
printlog "Select chart using navigator"
- call fSelectFirstOLE
+ call fSelectFirstOLE
printlog "Invoke Edit::Object::Edit to enter Inplace Mode"
EditObjectEdit
printlog " Check if shape is still there"
@@ -206,7 +210,7 @@ testcase tChartShapes
Sleep (1)
Kontext "Toolbar"
if ChartElementSelector.GetSelText <> "ChartShape1" then
- warnlog "Something is wrong with the shape"
+ warnlog "Something is wrong with the shape"
endif
printlog " Leave Chart"
Kontext "DocumentCalc"
@@ -219,12 +223,12 @@ testcase tChartShapes
call hCloseDocument
goto endsub
end if
- printlog " Close document"
+ printlog " Close document"
call hCloseDocument
printlog " Open document"
call hFileOpen ( sLocalFile )
- printlog "Select chart using navigator"
- call fSelectFirstOLE
+ printlog "Select chart using navigator"
+ call fSelectFirstOLE
printlog "Invoke Edit::Object::Edit to enter Inplace Mode"
EditObjectEdit
printlog " Check if shape is still there"
@@ -233,16 +237,16 @@ testcase tChartShapes
Sleep (1)
Kontext "Toolbar"
if ChartElementSelector.GetSelText <> "ChartShape1" then
- warnlog "Something is wrong with the shape"
+ warnlog "Something is wrong with the shape"
endif
printlog " Leave Chart"
Kontext "DocumentCalc"
DocumentCalc.TypeKeys "<Escape>"
printlog " Close document"
Call hCloseDocument
- call hFileOpen ( sLocalFileXLS )
- printlog "Select chart using navigator"
- call fSelectFirstOLE
+ call hFileOpen ( sLocalFileXLS )
+ printlog "Select chart using navigator"
+ call fSelectFirstOLE
printlog "Invoke Edit::Object::Edit to enter Inplace Mode"
EditObjectEdit
printlog " Check if shape is still there"
@@ -251,12 +255,12 @@ testcase tChartShapes
Sleep (1)
Kontext "Toolbar"
if ChartElementSelector.GetSelText <> "ChartShape1" then
- warnlog "Something is wrong with the shape"
+ warnlog "Something is wrong with the shape"
endif
printlog " Leave Chart"
Kontext "DocumentCalc"
DocumentCalc.TypeKeys "<Escape>"
printlog " Close document"
Call hCloseDocument
-
+
endcase
diff --git a/testautomation/chart2/optional/includes/loadsave/ch2_losa.inc b/testautomation/chart2/optional/includes/loadsave/ch2_losa.inc
index c2cb96636557..34b84e85250e 100644..100755
--- a/testautomation/chart2/optional/includes/loadsave/ch2_losa.inc
+++ b/testautomation/chart2/optional/includes/loadsave/ch2_losa.inc
@@ -23,192 +23,197 @@
' <http://www.openoffice.org/license.html>
' for a copy of the LGPLv3 License.
'
-'/************************************************************************
+'/******************************************************************************
'*
'* owner : oliver.craemer@sun.com
'*
'* short description : Load file of one Spreadsheet format and save to another
'*
-'************************************************************************
-'*
-' #1 subLoSaFromTo ' Initial routine
-' #1 tLoadSaveFromTo
-'*
-'\************************************************************************
+'\******************************************************************************
sub subLoSaFromTo
- Dim sSourcePath as STRING
- Dim lsInputFileList ( 500 ) as STRING
- Dim iFilesInList as INTEGER
- Dim sCurrentFileInList as STRING
- Dim iMainIndex as INTEGER
-
+
+ dim sSourcePath as string
+ dim lsInputFileList ( 500 ) as string
+ dim iFilesInList as integer
+ dim sCurrentFileInList as string
+ dim iMainIndex as integer
+
+ dim cRelativePath as string
+ cRelativePath = "chart2\optional\input\" & gsDirectoryInSourcePath &"\"
+
'///<u><b>Load/Save files with charts</b></u>
printLog Chr(13) + "--------- Save with filter: " & gsFileFormat & " ----------"
- sSourcePath = convertPath ( gtesttoolpath & "chart2\optional\input\" & gsDirectoryInSourcePath &"\" )
+ sSourcePath = convertPath ( gtesttoolpath & cRelativePath )
+
'///+<ul><li>Determine list of files to test (All files in 'chart2\loadsave\input\<gsDirectoryInSourcePath>\')</li>
- Call GetAllFileList( sSourcePath , "*." & gsDirectoryInSourcePath , lsInputFileList() )
- '///+<li>Determine number of files found</li>
- iFilesInList = cInt( lsInputFileList(0) )
+ GetAllFileList( sSourcePath , "*." & gsDirectoryInSourcePath , lsInputFileList() )
+ iFilesInList = ListCount( lsInputFileList() )
'///+<li>Run testcase 'tLoadSaveFromTo' for each file in list</li></ul>
for iMainIndex = 2 to iFilesInList
+
sCurrentFileInList = lsInputFileList( iMainIndex )
printlog "* * * * * * *"
printlog "Loop " & ( iMainIndex - 1 ) & " of " & ( iFilesInList - 1 )
printlog "Test document: " & sCurrentFileInList
call tLoadSaveFromTo ( sCurrentFileInList )
+
next iMainIndex
-End Sub
-
-'*******************************************************************
-
-testcase tLoadSaveFromTo ( sCurrentFile as STRING )
- Dim sCurrentFileLength as INTEGER
- Dim iCurrentPostionInFileName as INTEGER
- Dim iLastPathSignePositon as INTEGER
- Dim sExtractedFileName as STRING
- Dim sExtractedExtension as STRING
- Dim sTemporaryFile as STRING
- Dim sOutputFile as STRING
- Dim iIndex as INTEGER
-
- '///<u><b>Load file - SaveAs... - Close - Relaod</b></u>
+
+end sub
+
+'*******************************************************************************
+
+function hLoSaEscape() as boolean
+
+ ' Fine grained function to send Escape-keystroke to a spreadsheet document
+
+ const MAX_TRIES = 12
+ dim iTry as integer
+
+ for iTry = 1 to MAX_TRIES
+
+ wait( 250 )
+
+ Kontext "DocumentCalc"
+ try
+ DocumentCalc.TypeKeys( "<ESCAPE>" )
+ hLoSaEscape() = true
+ exit for
+ catch
+ if ( iTry = MAX_TRIES ) then
+ warnlog( "hLoSaEscape(): Sending <ESCAPE> to document failed." )
+ hLoSaEscape() = false
+ endif
+ endcatch
+
+ next iTry
+
+end function
+
+'*******************************************************************************
+
+function hLoSaInplaceEditing() as boolean
+
+ ' Enter in-place editing mode
+
+ const RC_TIMEOUT = -1
+
+ Kontext "DocumentCalc"
+ printlog( "Enable in-place editing by slot <EditObjectEdit>" )
+ if ( hUseAsyncSlot( "EditObjectEdit" ) <> RC_TIMEOUT ) then
+
+ printlog( "Clicked menuitem: Format->Charttype" )
+ if ( hUseAsyncSlot( "FormatChartType" ) <> RC_TIMEOUT ) then
+
+ Kontext "ChartType"
+ if ChartType.exists(2) then
+
+ printlog( "Chart type dialog open, Chart object was found." )
+ Kontext "ChartType"
+ if ( hCloseDialog( ChartType, "cancel" ) ) then
+ printlog( "Chart type dialog closed successfully" )
+ hLoSaInplaceEditing() = true
+ else
+ warnlog( "hLoSaInplaceEditing(): Failed to close dialog <ChartType>" )
+ hLoSaInplaceEditing() = false
+ endif
+ else
+ warnlog( "hLoSaInplaceEditing(): Chart type dialog not open, please check the Chart object" )
+ hLoSaInplaceEditing() = false
+ endif
+
+ else
+ warnlog( "hLoSaInplaceEditing(): Failed to execute slot <FormatChartType>" )
+ hLoSaInplaceEditing() = false
+ endif
+ else
+ warnlog( "hLoSaInplaceEditing(): Failed to execute slot <EditObjectEdit>" )
+ hLoSaInplaceEditing() = false
+ endif
+
+end function
+
+'*******************************************************************************
+
+testcase tLoadSaveFromTo ( sCurrentFile as string )
+
+ printlog( "Load/Save files containing Chart OLE objects in multiple file-formats" )
+
+ dim sCurrentFileLength as integer
+ dim iCurrentPostionInFileName as integer
+ dim iLastPathSignePositon as integer : iLastPathSignePositon = 0
+ dim sExtractedFileName as string
+ dim sExtractedExtension as string
+ dim sTemporaryFile as string
+ dim sOutputFile as string
+ dim iIndex as integer
+
sCurrentFileLength = len ( sCurrentFile )
- iCurrentPostionInFileName = 0
- iLastPathSignePositon = 0
+
'Remove path and extension from file name
- DO
+ do
iCurrentPostionInFileName = instr ( iCurrentPostionInFileName + 1 , sCurrentFile , gPathSigne )
if iCurrentPostionInFileName = 0 then
- Exit DO
+ exit do
endif
iLastPathSignePositon = iCurrentPostionInFileName
- LOOP
+ loop
+
sExtractedFileName = right ( sCurrentFile , sCurrentFileLength - iLastPathSignePositon )
sCurrentFileLength = len ( sExtractedFileName )
- sExtractedExtension = right ( sExtractedFileName , 4 )
+ sExtractedExtension = right ( sExtractedFileName , 4 )
sExtractedFileName = left ( sExtractedFileName , sCurrentFileLength - 4 )
sTemporaryFile = ( gOfficePath & ConvertPath("user\work\TemporaryFileToAvoidLocking" ) )
- sOutputFile = ( gOfficePath & ConvertPath("user\work\") & sExtractedFileName & "_" & gsDirectoryInSourcePath & "_to" & gsOutputFileCustomExtension )
- '///+<ul><li>Open test document</li>
- try
- call hFileOpen(sCurrentFile)
- catch
- warnlog "Serious Problem occured while loading the input file -> Quit"
+ sOutputFile = ( gOfficePath & ConvertPath("user\work\" & sExtractedFileName & "_" & gsDirectoryInSourcePath & "_to" & gsOutputFileCustomExtension ) )
+
+ printlog( "Open file: " & sCurrentFile )
+ if ( not hFileOpen( sCurrentFile ) ) then
+ warnlog( "Unable to read file" )
goto endsub
- endcatch
-
- '///+<li>Save file localy to avoid locking issues</li>
- if hFileSaveAsKill ( sTemporaryFile & sExtractedExtension ) then
- printlog ">> OK, successfully saved the test document localy!"
- else
- warnlog "Saving the testdocument localy in source format failed!"
- endif
- sleep (2)
-
- '///+<li>Check existence of chart in file using following steps</li>
- '///+<li>1. Select Chart</li>
- printlog ">> Check if chart exist after loading file"
- call fSelectFirstOLE
-
- Kontext "DocumentCalc"
- try
- '///+<li>2. Invoke 'Edit::Object::Edit' to enter inplace mode</li>
- EditObjectEdit
- sleep(2)
- '///+<li>3. Invoke Chart Type</li>
- FormatChartType
- '///+<li>4. Check if Chart Type came up</li>
- Kontext "ChartType"
- if ChartType.exists(2) then
- printlog ">> OK, found a Chart object after loading the file."
- else
- warnlog "Chart Type did not appear -> Check this out!"
- endif
- '///+<li>5. Close Chart Type</li>
- Kontext "ChartType"
- ChartType.Cancel
- catch
- warnlog "Chart does not exist in file or a serious problem occured -> Check this out!"
- endcatch
- sleep(3)
-
- '///+<li>Hit 'ESCAPE' key to leave inplace mode</li>
- Kontext "DocumentCalc"
- try
- DocumentCalc.TypeKeys "<ESCAPE>"
- catch
- warnlog "CRASH???"
- goto endsub
- endcatch
-
- '///+<li>Save file using ODS format</li>
- printlog "Save file as " & sOutputFile
- try
- if hFileSaveAsWithFilter ( sOutputFile , gsFileFormat ) then
- printlog ">> OK, successfully saved the test document!"
- else
- warnlog "Saving the testdocument failed!"
- endif
- catch
- warnlog "A serious problem occured while saving file to target format -> Check this out!"
- goto endsub
- endcatch
- sleep(2)
-
- '///+<li>Close document</li>
- printlog "Closing test document"
- call hCloseDocument
- sleep(5)
-
- '///+<li>Open document again</li>
- printlog "Reloading saved document"
- try
- call hFileOpen(sOutputFile)
- catch
- warnlog "Serious Problem occured while reloading the output file -> Quit"
+ endif
+
+ printlog( "Save file locally, overwriting existing" )
+ if ( not hFileSaveAsKill( sTemporaryFile & sExtractedExtension ) ) then
+ warnlog( "Unable to save file locally" )
goto endsub
- endcatch
- sleep(2)
-
- '///+<li>Check existence of chart after saving to target format in file using following steps</li>
- '///+<li>1. Select Chart</li>
- printlog ">> Check if chart exist after saving file to target format"
- call fSelectFirstOLE
-
- Kontext "DocumentCalc"
- try
- '///+<li>2. Invoke 'Edit::Object::Edit' to enter inplace mode</li>
- EditObjectEdit
- '///+<li>3. Invoke Chart Type</li>
- FormatChartType
- '///+<li>4. Check if Chart Type came up</li>
- Kontext "ChartType"
- if ChartType.exists(2) then
- printlog ">> OK, found a Chart object after saving the file to target format."
- else
- warnlog "Chart Type did not appear after saving the file to target format -> Check this out!"
- endif
- '///+<li>5. Close Chart Type</li>
- Kontext "ChartType"
- ChartType.Cancel
- catch
- warnlog "Chart does not exist in file or a serious problem occured after saving the file to target format -> Check this out!"
- endcatch
- sleep(3)
+ endif
- '///+<li>Hit 'ESCAPE' key to leave inplace mode</li>
- Kontext "DocumentCalc"
- try
- DocumentCalc.TypeKeys "<ESCAPE>"
- catch
- warnlog "CRASH???"
- goto endsub
- endcatch
+ printlog( "Select the first OLE object via Navigator" )
+ call fSelectFirstOLE
+
+ printlog( "Enter in-place editing mode" )
+ hLoSaInplaceEditing()
+
+ printlog( "Type <Escape> to exit in-place editing mode" )
+ hLoSaEscape()
+
+ printlog( "Save file as " & sOutputFile & " using filter: " & gsFileFormat )
+ if ( not hFileSaveAsWithFilterKill ( sOutputFile , gsFileFormat ) ) then
+ warnlog( "Saving the document failed using filter: " & gsFileFormat )
+ goto endsub
+ endif
+
+ printlog( "Close the document" )
+ hCloseDocument()
- '///+<li>Close document</li>
- printlog "Closing test document"
- call hCloseDocument
- '///+<li>END</li></ul>
+ printlog( "Reload document" )
+ if ( not hFileOpen(sOutputFile) ) then
+ warnlog( "Failed to reload document" )
+ goto endsub
+ endif
+
+ printlog( "Select the first (and only) OLE object" )
+ call fSelectFirstOLE
+
+ printlog( "Enter in-place editing mode" )
+ hLoSaInplaceEditing()
+
+ printlog( "Type <Escape> to exit in-place editing mode" )
+ hLoSaEscape()
+
+ printlog( "Close the document" )
+ call hCloseDocument()
+
endcase
diff --git a/testautomation/chart2/optional/includes/loadsave/ch2_xml_format.inc b/testautomation/chart2/optional/includes/loadsave/ch2_xml_format.inc
index 515d9fe55ca6..0cf868bacaaf 100644
--- a/testautomation/chart2/optional/includes/loadsave/ch2_xml_format.inc
+++ b/testautomation/chart2/optional/includes/loadsave/ch2_xml_format.inc
@@ -37,17 +37,17 @@
'\***********************************************************************
testcase tCompareXMLFormatCreate
-'///+ Test purpose: Verify within three characteristics that there is really a chart
+ '///+ Test purpose: Verify within three characteristics that there is really a chart
dim sOutputFile as string
dim sUnpackedStorageDir as string
dim sChartContentXML as string
-
+
gApplication = "WRITER"
sOutputFile = convertpath(gOfficepath & "user\work\Chart2_XML.odt")
sUnpackedStorageDir = (gOfficePath & ConvertPath("user\work\chart2_XML2"))
sChartContentXML = (gOfficePath & ConvertPath("user\work\chart2_XML2") & ConvertPath("\Object 1\content.xml"))
-
+
'/// File / New / Text
printlog " Open new Writer document"
call hNewDocument
@@ -62,25 +62,25 @@ testcase tCompareXMLFormatCreate
goto endsub
else
printlog "File saved successfully."
- endif
+ endif
'/// File / Close
call hCloseDocument
sleep(3)
- printlog "File closed"
- '/// Uncompress with <i>unzip</i> or <i>jar</i> the
+ printlog "File closed"
+ '/// Uncompress with <i>unzip</i> or <i>jar</i> the
'///+ <i>gOfficepath</i>/user/work/verySimpleChart.ods document
'///+ into <i>gOfficePath</i>/user/work/chart2_XML-directory
printlog "Unpack storage of test document."
UnpackStorage(sOutputFile, sUnpackedStorageDir)
- printlog "Read the test documents DOM."
+ printlog "Read the test documents DOM."
'/// Load the XML file <i>gOfficePath</i>/user/work/chart2_XML/Object 1/content.xml
'///+ in an XML editor
- SAXReadFile(sChartContentXML)
+ SAXReadFile(sChartContentXML)
printlog "Set the DOM pointer to document root"
printlog "|-/"
SAXSeekElement("/")
printlog " |-office:document-content"
- '/// Open the element 'office:document-content'
+ '/// Open the element 'office:document-content'
SAXSeekElement("office:document-content")
printlog " |-office:body"
'/// Open the element 'office:body'
@@ -96,9 +96,9 @@ testcase tCompareXMLFormatCreate
'///+ passed.
if SAXGetAttributeValue("chart:class") = "chart:bar" then
printlog "This is a bar chart as expected"
- else
+ else
warnlog "This is no bar chart, it is a " & SaxGetAttributeValue("chart:class")
- endif
+ endif
printlog "Seek for chart:plot-area"
printlog " |-chart:plot-area"
'/// Open the element 'chart:plot-area'
@@ -107,9 +107,9 @@ testcase tCompareXMLFormatCreate
'///+ the second characteristics validation has been passed.
if SAXGetAttributeValue("chart:data-source-has-labels") = "both" then
printlog "The label attribute for chart:plot-area is correct"
- else
+ else
warnlog "The lable attribute is not both, it is " & SaxGetAttributeValue("chart:data-source-has-labels")
- endif
+ endif
printlog "Seek for chart:series"
printlog " |-chart:series"
'/// Open the element 'chart:series'
@@ -118,51 +118,51 @@ testcase tCompareXMLFormatCreate
'///+ the hird characteristics validation has been passed.
if SAXGetAttributeValue("chart:values-cell-range-address") = "local-table.$B$2:.$B$5" then
printlog "The cell range for chart:series is correct"
- else
+ else
warnlog "The cell range is not local-table.$B$2:.$B$5, it is " & SaxGetAttributeValue("chart:values-cell-range-address")
endif
- ' DEBUG: printlog "I'm here: " & SAXGetElementName
+ ' DEBUG: printlog "I'm here: " & SAXGetElementName
'/// Close the XML editor.
- SAXRelease
+ SAXRelease
endcase
'
'--------------------------------------------------------------------
'
testcase tCompareXMLFormatLoad
-'///+ Test purpose: Verify within three characteristics that there is really a chart
+ '///+ Test purpose: Verify within three characteristics that there is really a chart
dim sOutputFile as string
dim sUnpackedStorageDir as string
dim sChartContentXML as string
-
+
gApplication = "CALC"
sOutputFile = convertpath(gOfficepath & "user\work\verySimpleChart.ods")
sUnpackedStorageDir = (gOfficePath & ConvertPath("user\work\chart2_XML"))
sChartContentXML = (gOfficePath & ConvertPath("user\work\chart2_XML") & ConvertPath("\Object 1\content.xml"))
-
+
'/// File / Open / <i>gTestToolPath</i>/chart2/update/input/verySimpleChart.ods
- '/// File / Save As / <i>gOfficepath</i>/user/work/verySimpleChart.ods
+ '/// File / Save As / <i>gOfficepath</i>/user/work/verySimpleChart.ods
if fLoadVerySimpleChartAndSaveLocal() > 0 then
warnlog "Loading test document failed!"
goto endsub
else
printlog "Test document has successfully been loaded."
endif
-
+
'/// Select the chart object using the navigator
printlog "Select chart using navigator"
if fSelectFirstOLE = 0 then
printlog "Chart is selected"
- else
+ else
warnlog "Chart could not be selected"
call hCloseDocument
goto endsub
endif
-
+
'/// Activate chart with Edit / Object / Edit
printlog "Activate chart by Edit / Object / Edit"
EditObjectEdit
-
+
'Save document localy
Kontext "DocumentCalc"
'/// Press twice <ESCAPE> to leave the chart object
@@ -178,25 +178,25 @@ testcase tCompareXMLFormatLoad
goto endsub
else
printlog "File with very simple chart saved successfully."
- endif
+ endif
'/// File / Close
call hCloseDocument
sleep(3)
- printlog "File with very simple chart closed"
- '/// Uncompress with <i>unzip</i> or <i>jar</i> the
+ printlog "File with very simple chart closed"
+ '/// Uncompress with <i>unzip</i> or <i>jar</i> the
'///+ <i>gOfficepath</i>/user/work/verySimpleChart.ods document
'///+ into <i>gOfficePath</i>/user/work/chart2_XML-directory
printlog "Unpack storage of test document."
UnpackStorage(sOutputFile, sUnpackedStorageDir)
- printlog "Read the test documents DOM."
+ printlog "Read the test documents DOM."
'/// Load the XML file <i>gOfficePath</i>/user/work/chart2_XML/Object 1/content.xml
'///+ in an XML editor
- SAXReadFile(sChartContentXML)
+ SAXReadFile(sChartContentXML)
printlog "Set the DOM pointer to document root"
printlog "|-/"
SAXSeekElement("/")
printlog " |-office:document-content"
- '/// Open the element 'office:document-content'
+ '/// Open the element 'office:document-content'
SAXSeekElement("office:document-content")
printlog " |-office:body"
'/// Open the element 'office:body'
@@ -212,9 +212,9 @@ testcase tCompareXMLFormatLoad
'///+ passed.
if SAXGetAttributeValue("chart:class") = "chart:bar" then
printlog "This is a bar chart as expected"
- else
+ else
warnlog "This is no bar chart, it is a " & SaxGetAttributeValue("chart:class")
- endif
+ endif
printlog "Seek for chart:plot-area"
printlog " |-chart:plot-area"
'/// Open the element 'chart:plot-area'
@@ -223,9 +223,9 @@ testcase tCompareXMLFormatLoad
'///+ the second characteristics validation has been passed.
if SAXGetAttributeValue("table:cell-range-address") = "Sheet1.A1:B2" then
printlog "The cell range for chart:plot-area is correct"
- else
+ else
warnlog "#i100780#: The cell range is not Sheet1.A1:B2, it is " & SaxGetAttributeValue("table:cell-range-address")
- endif
+ endif
printlog "Seek for chart:series"
printlog " |-chart:series"
'/// Open the element 'chart:series'
@@ -234,10 +234,10 @@ testcase tCompareXMLFormatLoad
'///+ the hird characteristics validation has been passed.
if SAXGetAttributeValue("chart:values-cell-range-address") = "Sheet1.A1:A2" then
printlog "The cell range for chart:series is correct"
- else
+ else
warnlog "#i100780#: The cell range is not Sheet1.A1:A2, it is " & SaxGetAttributeValue("chart:values-cell-range-address")
endif
- ' DEBUG: printlog "I'm here: " & SAXGetElementName
+ ' DEBUG: printlog "I'm here: " & SAXGetElementName
'/// Close the XML editor.
- SAXRelease
+ SAXRelease
endcase
diff --git a/testautomation/chart2/optional/includes/wizard/ch2_lvl1_wizard.inc b/testautomation/chart2/optional/includes/wizard/ch2_lvl1_wizard.inc
index 10ba7eb017e1..6bcf3399796d 100644..100755
--- a/testautomation/chart2/optional/includes/wizard/ch2_lvl1_wizard.inc
+++ b/testautomation/chart2/optional/includes/wizard/ch2_lvl1_wizard.inc
@@ -199,7 +199,7 @@ testcase tCreateNew3DChart
endif
printlog "Check that 3D look is 'simple' (=default)"
if Scheme3D.GetSelIndex <> 1 then
- warnlog "Default 3D Look ('simple') has not been preserved after save and reload."
+ warnlog "#i112522# - Default 3D Look ('simple') has not been preserved after save and reload."
endif
printlog "Check that 3D shape 'cone' is selected"
if BarColumnShape.GetSelIndex <> 3 Then
diff --git a/testautomation/chart2/tools/ch_tools_common.inc b/testautomation/chart2/tools/ch_tools_common.inc
index 311e8c354f74..2a8664109e19 100644
--- a/testautomation/chart2/tools/ch_tools_common.inc
+++ b/testautomation/chart2/tools/ch_tools_common.inc
@@ -29,83 +29,92 @@
'*
'* short description : Chart2 Tool library
'*
-'**************************************************************************************************
-'*
-' #1 fInsertOLE ' User Insert / Object / OLE to insert a chart
-' #1 fLoadVerySimpleChart ' Load file with a very simple chart
-' #1 fLoadVerySimpleChartAndSaveLocal ' Load file with a very simple chart and save it loacally
-' #1 fConvertChartTo3D ' Function to invoke the 'Insert::Titles...' dialog
-' #1 fOpenTestDocumentAndSelectDataRange ' Opens a test document and executes FormatDataRange
-' #1 fOpenTestDocumentAndInsertChart ' Opens a test document and selects a data range at a specific position
-'*
'\************************************************************************************************
-sub fInsertOLE as BOOLEAN
-'Insert Chart OLE in Document
- 'Get localised OLE names
- call GetOleDefaultNames()
- fInsertOLE = FALSE
+sub fInsertOLE() as boolean
+
+ ' Insert an OLE object (the name is localized)
+ call GetOleDefaultNames()
+
'/// Insert / Object / OLE
InsertObjectOLEObject
- sleep(1)
+
Kontext "OLEObjektEinfuegen"
- '/// Check if list box is not empty
- if Objekttyp.getItemcount < 1 then
- warnlog "There are no OLE-Objects in the listbox"
+ if ( OLEObjektEinfuegen.exists( 1 ) ) then
+
+ if ( Objekttyp.getItemcount() = 0 ) then
+
+ warnlog( "fInsertOLE(): There are no OLE-Objects in the <Objekttyp> listbox" )
+ OLEObjektEinfuegen.cancel()
+ fInsertOLE() = false
+
+ else
+
+ try
+ Objekttyp.Select gOLEChart
+ OLEObjektEinfuegen.ok()
+ sleep( 2 )
+ fInsertOLE() = true
+ catch
+ warnlog( "fInsertOLE(): Invalid OLE Object selected: " & gOLEChart )
+ OLEObjektEinfuegen.cancel()
+ fInsertOLE() = false
+ endcatch
+
+ endif
+
+ else
+ warnlog( "fInsertOLE(): Failed to open <Insert OLE object> dialog" )
+ fInsertOLE() = false
endif
- '/// Select chart in listbox
- Objekttyp.Select gOLEChart
- '/// Quit dialog using OK
- OLEObjektEinfuegen.OK
- sleep(2)
- fInsertOLE = TRUE
+
end sub
'
'--------------------------------------------------------------------
'
function fLoadVerySimpleChart() as INTEGER
- fLoadVerySimpleChart = 99
-'Load file with a very simple chart
-'No Input
-'Returns error-code:
-'+ 0 := Sucess
-'+ 1 := Serious problem trying to load the document
-'+99 := Unexpected error
+ fLoadVerySimpleChart = 99
+ 'Load file with a very simple chart
+ 'No Input
+ 'Returns error-code:
+ '+ 0 := Sucess
+ '+ 1 := Serious problem trying to load the document
+ '+99 := Unexpected error
- dim sInputFile as string
- sInputFile = convertpath( gtesttoolpath & "chart2/required/input/verySimpleChart.ods" )
- '/// Load file <i>gTesttoolpath</i>/chart2/required/input/verySimpleChart.ods
- try
- call hFileOpen ( sInputFile )
- printlog "File with very simple chart loaded"
- fLoadVerySimpleChart = 0
- catch
- qaErrorLog "Loading file with very simple chart seems to fail"
- fLoadVerySimpleChart = 1
- endcatch
+ dim sInputFile as string
+ sInputFile = convertpath( gtesttoolpath & "chart2/required/input/verySimpleChart.ods" )
+ '/// Load file <i>gTesttoolpath</i>/chart2/required/input/verySimpleChart.ods
+ try
+ call hFileOpen ( sInputFile )
+ printlog "File with very simple chart loaded"
+ fLoadVerySimpleChart = 0
+ catch
+ qaErrorLog "Loading file with very simple chart seems to fail"
+ fLoadVerySimpleChart = 1
+ endcatch
end function
'
'--------------------------------------------------------------------
'
function fLoadVerySimpleChartAndSaveLocal() as INTEGER
- fLoadVerySimpleChartAndSaveLocal = 99
-'Load file with a very simple chart and save it loacally
-'No Input
-'Returns error-code:
-'+ 0 := Sucess
-'+ 1 := Serious problem trying to load the document
-'+ 2 := Serious problem trying to save the document
+ fLoadVerySimpleChartAndSaveLocal = 99
+ 'Load file with a very simple chart and save it loacally
+ 'No Input
+ 'Returns error-code:
+ '+ 0 := Sucess
+ '+ 1 := Serious problem trying to load the document
+ '+ 2 := Serious problem trying to save the document
dim iCheckIsFileLoaded as INTEGER
dim sOutputFile as STRING
- sOutputFile = convertpath( gOfficepath & "user/work/verySimpleChart.ods" )
+ sOutputFile = convertpath( gOfficepath & "user/work/verySimpleChart.ods" )
iCheckIsFileLoaded = fLoadVerySimpleChart()
if iCheckIsFileLoaded > 0 then
'When loading fails pass error code to current function
fLoadVerySimpleChartAndSaveLocal = iCheckIsFileLoaded
exit function
else
- printlog "File with very simple chart loaded successfully."
+ printlog "File with very simple chart loaded successfully."
endif
'/// Save document local
Kontext "DocumentCalc"
@@ -125,28 +134,28 @@ end function
'--------------------------------------------------------------------
'
function fConvertChartTo3D() as BOOLEAN
- fConvertChartTo3D = FALSE
-'Function to invoke the 'Insert::Titles...' dialog
-'No Input
-'Returns TRUE on success
+ fConvertChartTo3D = FALSE
+ 'Function to invoke the 'Insert::Titles...' dialog
+ 'No Input
+ 'Returns TRUE on success
- '/// Invoke Format::Chart Type...
- if fInvokeChartTypeDialog() > 0 then
- warnlog "Invoking 'Format::Chart Type...' seems to cause an Error"
- exit function
- endif
- '/// Check 3D box
- if fSetChartType3D ( TRUE ) = 0 then
- fConvertChartTo3D = TRUE
- else
- warnlog "Converting chart to 3D seems to cause an Error"
- exit function
- endif
- '/// Close Chart Type dialog with OK
- if fCloseChartTypeDialogOK() > 0 then
- warnlog "Closing Chart Type dialog seems to cause an Error"
- fConvertChartTo3D = FALSE
- endif
+ '/// Invoke Format::Chart Type...
+ if fInvokeChartTypeDialog() > 0 then
+ warnlog "Invoking 'Format::Chart Type...' seems to cause an Error"
+ exit function
+ endif
+ '/// Check 3D box
+ if fSetChartType3D ( TRUE ) = 0 then
+ fConvertChartTo3D = TRUE
+ else
+ warnlog "Converting chart to 3D seems to cause an Error"
+ exit function
+ endif
+ '/// Close Chart Type dialog with OK
+ if fCloseChartTypeDialogOK() > 0 then
+ warnlog "Closing Chart Type dialog seems to cause an Error"
+ fConvertChartTo3D = FALSE
+ endif
end function
'
'-------------------------------------------------------------------------
@@ -155,13 +164,13 @@ function fOpenTestDocumentAndSelectDataRange(sInputFile as string) as BOOLEAN
fOpenTestDocumentAndSelectDataRange = FALSE
call hFileOpen(sInputFile)
sleep(2)
- Call sMakeReadOnlyDocumentEditable()
+ Call sMakeReadOnlyDocumentEditable()
'/// Select chart using navigator
printlog "Select chart using navigator"
- call fSelectFirstOLE
+ call fSelectFirstOLE
'/// Edit / Object / Edit
printlog "Edit / Object / Edit"
- EditObjectEdit
+ EditObjectEdit
'///Open FORMAT / DATA RANGES
printlog "Open FORMAT / DATA RANGES"
FormatDataRanges
@@ -172,9 +181,9 @@ function fOpenTestDocumentAndSelectDataRange(sInputFile as string) as BOOLEAN
'Switching tabpages as workaround for #i77237#
Active.SetPage TabChartTypeDataSeries
QAErrorLog "#i77237#-Testtool can't access OK after switching tabpage"
- Active.SetPage TabChartTypeDataRange
+ Active.SetPage TabChartTypeDataRange
Kontext "TabChartTypeDataRange"
- call DialogTest ( TabChartTypeDataRange )
+ call DialogTest ( TabChartTypeDataRange )
fOpenTestDocumentAndSelectDataRange = TRUE
end function
'
@@ -184,20 +193,20 @@ function fOpenTestDocumentAndInsertChart(sInputFile as string) as BOOLEAN
fOpenTestDocumentAndInsertChart = FALSE
call hFileOpen(sInputFile)
sleep(2)
- Call sMakeReadOnlyDocumentEditable()
- Kontext "DocumentCalc"
- printlog "Type <STRG+HOME>"
- DocumentCalc.TypeKeys "<MOD1 HOME>"
+ Call sMakeReadOnlyDocumentEditable()
+ Kontext "DocumentCalc"
+ printlog "Type <STRG+HOME>"
+ DocumentCalc.TypeKeys "<MOD1 HOME>"
printlog "Type twice <RIGHT> cursor key"
- DocumentCalc.TypeKeys "<RIGHT>" , 2
+ DocumentCalc.TypeKeys "<RIGHT>" , 2
printlog "Type thrice <DOWN> cursor key"
- DocumentCalc.TypeKeys "<DOWN>" , 3
- printlog "Menu Insert chart to open chart wizard"
+ DocumentCalc.TypeKeys "<DOWN>" , 3
+ printlog "Menu Insert chart to open chart wizard"
InsertChart
try
WaitSlot()
fOpenTestDocumentAndInsertChart = TRUE
- catch
+ catch
fOpenTestDocumentAndInsertChart = FALSE
endcatch
end function
diff --git a/testautomation/dbaccess/required/includes/MainApp.inc b/testautomation/dbaccess/required/includes/MainApp.inc
index 4d5855ac9bba..eab441cbb228 100755
--- a/testautomation/dbaccess/required/includes/MainApp.inc
+++ b/testautomation/dbaccess/required/includes/MainApp.inc
@@ -29,18 +29,8 @@
'*
'* short description : test the Main Application Window
'*
-'************************************************************************
-'*
-' #1 tMainApp
-' #1 tMainMenuBar
-' #1 tDatabaseProperties
-' #1 tTableView
-' #1 tPreview
-' #1 tTableFilters
-' #1 tRegisterDatabaseDialog
-' #1 tDatabaseBeamer
-'*
-'\***********************************************************************************
+'\******************************************************************************
+
sub MainApp
printlog "------------------ MainApp.inc ---------------------"
@@ -299,7 +289,7 @@ testcase tMainMenuBar
hMenuSelectNr(1) ' FILE/NEW menu
iCount = hMenuItemGetCount()
if (iCount <> 12) then
- warnlog "There should 12 items in the FILE/NEW menu but there are " + iCount + " items."
+ warnlog "#i112496# - There should 12 items in the FILE/NEW menu but there are " + iCount + " items."
end if
call hMenuClose() ' close the FILE menu
diff --git a/testautomation/dbaccess/tools/dbcreatetools.inc b/testautomation/dbaccess/tools/dbcreatetools.inc
index 159f27cc249f..964c2be5e64d 100755
--- a/testautomation/dbaccess/tools/dbcreatetools.inc
+++ b/testautomation/dbaccess/tools/dbcreatetools.inc
@@ -1462,6 +1462,7 @@ function fSetJDBCDriverFiles(sClassPath) as boolean
call hCloseDocument
end function
+
'-------------------------------------------------------------------------
function hGetInstalledDatabaseDrivers( dbDriverList() as string ) as integer
@@ -1510,7 +1511,7 @@ function hGetInstalledDatabaseDrivers( dbDriverList() as string ) as integer
endif
- if ( VERBOSE ) then
+ if ( GVERBOSE ) then
printlog( CFN & "Returning " & iDriverCount & " drivers" )
endif
@@ -1588,7 +1589,7 @@ function hGetDatabaseDisplayName( dbDriverURL as string ) as string
endif
- if ( VERBOSE ) then
+ if ( GVERBOSE ) then
printlog( CFN & "Database display string: " & sDatabaseName )
endif
hGetDataBaseDisplayName() = sDatabaseName
diff --git a/testautomation/extensions/optional/includes/publisher.inc b/testautomation/extensions/optional/includes/publisher.inc
index fcf4400ae748..ca8e31bb07b6 100644..100755
--- a/testautomation/extensions/optional/includes/publisher.inc
+++ b/testautomation/extensions/optional/includes/publisher.inc
@@ -43,15 +43,15 @@ testcase tExtensionPublisher
' Specification document
' http://specs.openoffice.org/appwide/packagemanager/online_update_for_extensions.odt
' http://specs.openoffice.org/appwide/packagemanager/online_update_for_extensions.odt
-
+
' This is the path where the test-extensions and the info file are located
dim cBasePath as string
cBasePath = gTesttoolPath & "extensions/optional/input/publisher/"
cBasePath = convertpath( cBasePath )
-
+
' Modify this file to add test cases or attributes
dim cInfoFile as string : cinfoFile = cBasePath & "extension.info"
-
+
' The number of files to test. Information about this is stored in the file
' specified by cInfoFile
dim iFileCount as integer
@@ -60,72 +60,73 @@ testcase tExtensionPublisher
dim iExitCounter as integer
dim iCurrentExtensionCount as integer : iCurrentExtensionCount = 0
dim iTry as integer
-
+
' This is the data we get from the configuration file
dim cCurrentFileName as string
dim cHasReleaseNotes as string
dim cReleaseNotes as string
dim cHasPublisher as string
dim cPublisher as string
-
+
' This is where we store the configuration data. This array must have more
' lines than cInfoFile contains.
dim cConfigArray( 60 ) as string
-
+
dim cTestString as string
dim bInstallationComplete as boolean : bInstallationComplete = false
-
+
iExtensionCount = hGetExtensionCount()
-
-
+
+
hGetDataFileSection( cInfoFile, cConfigArray(), "info", "", "" )
iFileCount = int( hGetValueForKeyAsString( cConfigArray() , "filecount" ) )
printlog( cInfoFile & " specifies " & iFileCount & " documents to load" )
-
+
iExtensionCount = iExtensionCount + iFileCount
printlog( "Expected number of extensions after installation: " & iExtensionCount )
printlog( "Installing extensions" )
for iCurrentFile = 1 to iFileCount
-
+
hGetDataFileSection( cInfoFile, cConfigArray(), iCurrentFile, "", "" )
cCurrentFileName = hGetValueForKeyAsString( cConfigArray() , "file" )
cCurrentFileName = cBasePath & cCurrentFileName
sExtensionCLI( "add" , cCurrentFileName )
wait 1000 ' This is required, sExtensionCLI is asynchronous.
-
+
next iCurrentFile
printlog( "Finished installing extensions, now verifying..." )
-
+
hNewDocument()
ToolsPackageManager
-
+
kontext "PackageManager"
if ( PackageManager.exists( 3 ) ) then
-
- for iTry = 1 to 30
-
+
+ for iTry = 1 to 30
+
iCurrentExtensionCount = BrowsePackages.getItemCount()
-
+
if ( iCurrentExtensionCount = iExtensionCount ) then
printlog( "All extensions have been installed, good." )
bInstallationComplete = true
exit for
endif
-
+
printlog( "Waiting for listbox: Number of extensions: " & iCurrentExtensionCount )
-
+ wait( 1000 ) ' Required, the list takes considerable time to fill.
+
next iTry
-
+
' If one or more extensions have not been added to the list we better abort the
' test as the remaining parts need all extensions to be installed causing
' lots of cryptig errors to appear in the log.
if ( not bInstallationComplete ) then
warnlog( "Not all extensions have been installed. Aborting test." )
- kontext "PackageManager"
+ kontext "PackageManager"
if ( PackageManager.exists() ) then
PackageManager.cancel()
- PackageManager.notExists( 2 )
+ PackageManager.notExists( 2 )
endif
goto endsub
endif
@@ -133,24 +134,24 @@ testcase tExtensionPublisher
warnlog( "The Extension Manager did not open, Aborting test" )
goto endsub
endif
-
-
+
+
kontext "PackageManager"
printlog( "Going for the update-dialog" )
if ( Updates.isEnabled() ) then
-
+
printlog( "Updates-button is enabled" )
Updates.click()
-
+
kontext "ExtensionUpdate"
if ( ExtensionUpdate.exists( 2 ) ) then
-
+
iExitCounter = 0
- do while ( AvailableUpdatesList.getItemCount() < iFileCount )
+ do while ( AvailableUpdatesList.getItemCount() < iFileCount )
printlog( "Waiting for Updates List to populate..." )
wait( 1000 )
iExitCounter = iExitCounter + 1
- if ( iExitCounter = 200 ) then
+ if ( iExitCounter = 200 ) then
warnlog( "Update list for extensions is stalled (expected: 7), " & _
"found: " & AvailableUpdatesList.getItemCount() )
kontext "ExtensionUpdate"
@@ -162,7 +163,7 @@ testcase tExtensionPublisher
goto endsub
endif
loop
-
+
if ( ShowAllUpdates.exists() ) then
if ( ShowAllUpdates.isEnabled() ) then
warnlog( """Show all updates"" should be disabled" )
@@ -172,29 +173,29 @@ testcase tExtensionPublisher
else
qaerrorlog( """Show all updates"" checkbox could not be accessed" )
endif
-
+
if ( AvailableUpdatesList.isEnabled() ) then
-
+
printlog( "Available updates list populated in " & iExitCounter & " seconds" )
-
+
if ( iExitCounter < 20 ) then
for iCurrentFile = 1 to iFileCount
-
+
hGetDataFileSection( cInfoFile, cConfigArray(), iCurrentFile, "", "" )
cCurrentFileName = hGetValueForKeyAsString( cConfigArray() , "display_name" )
-
+
cHasReleaseNotes = hGetValueForKeyAsString( cConfigArray() , "has_release_notes" )
cReleaseNotes = hGetValueForKeyAsString( cConfigArray() , "release_notes" )
-
+
cHasPublisher = hGetValueForKeyAsString( cConfigArray() , "has_publisher" )
cPublisher = hGetValueForKeyAsString( cConfigArray() , "publisher" )
-
+
AvailableUpdatesList.select( iCurrentFile )
-
+
if ( AvailableUpdatesList.getText() = cCurrentFileName ) then
printlog( "Testing extension: " & cCurrentFileName )
-
+
if ( lcase( cHasReleaseNotes ) = "yes" ) then
if ( ReleaseNotesText.isVisible() ) then
printlog( " - Release notes text is visible. Good." )
@@ -217,7 +218,7 @@ testcase tExtensionPublisher
printlog( " - No release notes for this extension." )
endif
endif
-
+
if ( lcase( cHasPublisher ) = "yes" ) then
if ( UpdatePublisherText.isVisible() ) then
printlog( " - Publisher text is visible. Good." )
@@ -240,14 +241,14 @@ testcase tExtensionPublisher
printlog( " - No Publisher for this extension." )
endif
endif
-
+
else
- warnlog( "The extension is not at the expected position" )
+ printlog( "The extension is not at the expected position" )
printlog( "Expected: " & cCurrentFileName )
printlog( "Found...: " & AvailableUpdatesList.getText() )
exit for
endif
-
+
next iCurrentFile
else
warnlog( "Updates list not fully populated in 15 seconds -> fail" )
@@ -262,15 +263,15 @@ testcase tExtensionPublisher
else
warnlog( "Extension Update dialog is not open" )
endif
-
+
else
warnlog( "Update-button on extension manager ui is disabled" )
endif
-
+
kontext "PackageManager"
PackageManager.close()
PackageManager.notExists( 2 )
-
+
printlog( "Removing extensions" )
for iCurrentFile = 1 to iFileCount
hGetDataFileSection( cInfoFile, cConfigArray(), iCurrentFile, "", "" )
@@ -278,7 +279,7 @@ testcase tExtensionPublisher
sExtensionCLI( "remove" , cCurrentFileName )
next iCurrentFile
printlog( "Finished removing extensions" )
-
+
hFileCloseAll()
endcase
diff --git a/testautomation/extensions/optional/input/dependencies/version30.oxt b/testautomation/extensions/optional/input/dependencies/version30.oxt
index 8750e712f8cd..59b8dc545973 100755..100644
--- a/testautomation/extensions/optional/input/dependencies/version30.oxt
+++ b/testautomation/extensions/optional/input/dependencies/version30.oxt
Binary files differ
diff --git a/testautomation/extensions/optional/input/dependencies/version31.oxt b/testautomation/extensions/optional/input/dependencies/version31.oxt
index 870b4cc97a9a..843cb02f10ec 100644
--- a/testautomation/extensions/optional/input/dependencies/version31.oxt
+++ b/testautomation/extensions/optional/input/dependencies/version31.oxt
Binary files differ
diff --git a/testautomation/extensions/optional/input/dependencies/version310.oxt b/testautomation/extensions/optional/input/dependencies/version310.oxt
new file mode 100644
index 000000000000..40b66db99b65
--- /dev/null
+++ b/testautomation/extensions/optional/input/dependencies/version310.oxt
Binary files differ
diff --git a/testautomation/extensions/optional/input/dependencies/version33.oxt b/testautomation/extensions/optional/input/dependencies/version33.oxt
new file mode 100644
index 000000000000..11525f5be3bd
--- /dev/null
+++ b/testautomation/extensions/optional/input/dependencies/version33.oxt
Binary files differ
diff --git a/testautomation/extensions/optional/input/dependencies/version330.oxt b/testautomation/extensions/optional/input/dependencies/version330.oxt
new file mode 100644
index 000000000000..abc13cdc07a2
--- /dev/null
+++ b/testautomation/extensions/optional/input/dependencies/version330.oxt
Binary files differ
diff --git a/testautomation/extensions/optional/input/dependencies/version34.oxt b/testautomation/extensions/optional/input/dependencies/version34.oxt
new file mode 100644
index 000000000000..e14671c77e92
--- /dev/null
+++ b/testautomation/extensions/optional/input/dependencies/version34.oxt
Binary files differ
diff --git a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/genfiles.properties b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/genfiles.properties
index e4e5fc11997d..2f144fe1f264 100755..100644
--- a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/genfiles.properties
+++ b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/genfiles.properties
@@ -1,3 +1,4 @@
+# x-no-translate
build.xml.data.CRC32=2b754fcd
build.xml.script.CRC32=0a20deac
build.xml.stylesheet.CRC32=d5b6853a
diff --git a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/private/private.properties b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/private/private.properties
index c090eb0e8f9c..1b26762e782d 100755..100644
--- a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/private/private.properties
+++ b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/private/private.properties
@@ -1,3 +1,4 @@
+# x-no-translate
compile.on.save=false
do.depend=false
do.jar=true
diff --git a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project-uno.properties b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project-uno.properties
index 35a0535e7d02..8abadd201d42 100755..100644
--- a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project-uno.properties
+++ b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project-uno.properties
@@ -1,3 +1,4 @@
+# x-no-translate
uno.project.type=office.component.project
project.name=TaskPaneComponent
registration.classname=com.example.TaskPaneComponent
diff --git a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project.properties b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project.properties
index b6059cf3113c..7ca12dec0468 100755..100644
--- a/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project.properties
+++ b/testautomation/extensions/optional/input/extension_sources/TaskPaneComponent/nbproject/project.properties
@@ -1,3 +1,4 @@
+# x-no-translate
application.args=
application.title=TaskPaneComponent
application.vendor=qamsc
diff --git a/testautomation/extensions/optional/input/files.txt b/testautomation/extensions/optional/input/files.txt
index 5e37bbd64659..369cb99b74d2 100755
--- a/testautomation/extensions/optional/input/files.txt
+++ b/testautomation/extensions/optional/input/files.txt
@@ -29,8 +29,12 @@ dependencies\version25.oxt;0,0,1,0,0
dependencies\version30.oxt;0,0,1,0,0
dependencies\version300.oxt;0,0,1,0,0
dependencies\version301.oxt;0,0,1,0,0
+dependencies\version310.oxt;0,0,1,0,0
+dependencies\version330.oxt;0,0,1,0,0
dependencies\versionempty.oxt;0,0,1,0,0
-dependencies\version31.oxt;1,0,0,0,0
+dependencies\version31.oxt;0,0,1,0,0
+dependencies\version33.oxt;0,0,1,0,0
+dependencies\version34.oxt;1,0,0,0,0
dependencies\version937.oxt;1,0,0,0,0
dependencies\versionnone.oxt;0,0,1,0,0
versions/plain.oxt;0,0,1,0,0
@@ -43,3 +47,4 @@ versions/version_1.2.4.7/plain.oxt;0,0,1,0,2
versions/version_1.02.4.7.0/plain.oxt;0,0,1,0,1
versions/version_1.2.3/plain.oxt;0,0,1,0,2
versions/version_1.2.15.3/plain.oxt;0,0,1,0,2
+issues/111434.oxt;0,1,1,0,0
diff --git a/testautomation/extensions/optional/input/issues/111434.oxt b/testautomation/extensions/optional/input/issues/111434.oxt
new file mode 100644
index 000000000000..d88965e803f1
--- /dev/null
+++ b/testautomation/extensions/optional/input/issues/111434.oxt
Binary files differ
diff --git a/testautomation/extensions/required/includes/e_update.inc b/testautomation/extensions/required/includes/e_update.inc
index c3114a65dbbc..769259aeaa7c 100644
--- a/testautomation/extensions/required/includes/e_update.inc
+++ b/testautomation/extensions/required/includes/e_update.inc
@@ -120,161 +120,30 @@ testcase tExtensionManagerResources()
printlog( "Extension Options button does not exist, no options available" )
endif
- if ( bUserIsAdmin ) then
-
- ' If the user is Admin or the office was installed in the users
- ' home directory we have access to the extensions that reside in
- ' the shared layer. This means that the user can remove and disable
- ' these extensions.
-
- kontext "PackageManager"
- BrowsePackages.select( 1 )
- if ( disable.exists() ) then
- if ( disable.isEnabled() ) then
-
- disable.click()
-
- kontext "Active"
- if ( Active.exists( 1 ) ) then
- printlog( "Disable extension: Warning for other office instance. Good." )
- active.ok()
- else
- warnlog( "No warning for other office instances running" )
- endif
-
- ' We now re-enable the extensions. Depending on the "size"
- ' of the extension it might take the Extension Manager UI
- ' a few seconds to complete the "disable" action. We need to
- ' wait for that.
- kontext "PackageManager"
- BrowsePackages.select( 1 )
- iBreakCounter = 0
- do while( not enable.exists() )
- iBreakCounter = iBreakCounter + 1
- wait( 100 )
- if ( iBreakCounter = MAX_ITERATIONS ) then
- warnlog( "Extension not ready within timeframe. Aborting" )
- goto endsub
- endif
- loop
- enable.click()
-
- kontext "Active"
- if ( Active.exists( 1 ) ) then
- printlog( "Enable extension: Warning for other office instance. Good." )
- active.ok()
- else
- warnlog( "No warning for other office instances running" )
- endif
-
- ' The Extension Manager UI remembers when it has warned about
- ' other running instances of the office, so the next time we try
- ' to disable/enable the extension there should be no warning.
-
- kontext "PackageManager"
- iBreakCounter = 0
- do while( not disable.exists() )
- iBreakCounter = iBreakCounter + 1
- wait( 100 )
- if ( iBreakCounter = MAX_ITERATIONS ) then
- warnlog( "Extension not ready within timeframe. Aborting" )
- goto endsub
- endif
- loop
- disable.click()
+ kontext "PackageManager"
+ BrowsePackages.select( 1 )
- kontext "Active"
- if ( Active.exists( 1 ) ) then
- warnlog( "There should be no warning when disabling the extension a second time" )
- active.ok()
- else
- printlog( "Disable extension: No warning for other office instances. Good." )
- endif
-
- kontext "PackageManager"
- iBreakCounter = 0
- do while( not enable.exists() )
- iBreakCounter = iBreakCounter + 1
- wait( 100 )
- if ( iBreakCounter = MAX_ITERATIONS ) then
- warnlog( "Extension not ready within timeframe. Aborting" )
- goto endsub
- endif
- loop
- enable.click()
-
- kontext "Active"
- if ( Active.exists( 1 ) ) then
- warnlog( "There should be no warning when enabling the extension a second time" )
- active.ok()
- else
- printlog( "Enable extension: No warning for other office instances. Good." )
- endif
- WaitSlot()
-
- else
- warnlog( "User should be able to disable shared extension" )
- endif
+ printlog( "Check visibility of some controls, many are hidden for bundled extensions" )
+ if ( disable.exists() ) then
+ if ( disable.isVisible() ) then
+ warnlog( "Button <Disable> should not be visible for shared extensions" )
else
- warnlog( "Cannot disable extension. It might be disabled already or defunct" )
+ printlog( "Button <Disable> is hidden" )
endif
-
- kontext "PackageManager"
- iBreakCounter = 0
- do while( not remove.isEnabled() )
- iBreakCounter = iBreakCounter + 1
- wait( 100 )
- if ( iBreakCounter = MAX_ITERATIONS ) then
- warnlog( "Extension not ready within timeframe. Aborting" )
- goto endsub
- endif
- loop
-
- kontext "PackageManager"
- if ( remove.isEnabled() ) then
-
- remove.click()
-
- ' Note: First time we try to remove an extension we should get a
- ' warning that we must make sure that no other office instances
- ' are running. If this warning is missing we actually remove the
- ' extension which leaves the installation in an inconsistent
- ' state. In a "real life" installation this would not work, in a
- ' "user space" installation we have to reinstall. Bad that is.
-
- kontext "Active"
- if ( Active.exists( 1 ) ) then
- printlog( "Remove extension: Warning for other office instances. Good." )
- active.cancel()
- else
- warnlog( "No warning for other office instances running" )
- warnlog( "Installation inconsistency: Extension was removed!" )
- endif
- WaitSlot()
-
- ' Note: Like for the disable/enable buttons we should not get
- ' a warning for another running office instance when removing
- ' an extension for the second time.
-
+ else
+ printlog( "The control <Disable> is not defined in this context" )
+ endif
+
+ if ( remove.exists() ) then
+ if ( remove.isVisible() ) then
+ warnlog( "Button <Remove> should not be visible for shared extensions" )
else
- warnlog( "User should be able to remove extension" )
+ printlog( "Button <Remove> is hidden" )
endif
else
-
- ' if the user does not have Administrator rights he may neither
- ' he may neither disable or remove extensions.
-
- kontext "PackageManager"
- if ( disable.isEnabled() ) then
- warnlog( "Disable-button enabled for shared extension" )
- endif
-
- kontext "PackageManager"
- if ( remove.isEnabled() ) then
- warnlog( "Remove-button enabled for shared extension" )
- endif
+ printlog( "The control <Remove> is not defined in this context" )
endif
-
+
kontext "PackageManager"
PackageManager.close()
diff --git a/testautomation/extensions/required/includes/e_update_oooimprovement.inc b/testautomation/extensions/required/includes/e_update_oooimprovement.inc
deleted file mode 100644
index 0981a1836937..000000000000
--- a/testautomation/extensions/required/includes/e_update_oooimprovement.inc
+++ /dev/null
@@ -1,94 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Extension Update Test
-'*
-'\******************************************************************************
-
-testcase tUpdtOOoImprovement
-
- printlog( "Update test for the tools/options dialog of the OOo Improvement extension" )
- if ( not gExtensionOOoImprovementIsInstalled ) then
- qaerrorlog( "The extension is not installed." )
- goto endsub
- endif
-
- dim cLogFile as string
- cLogFile = gOfficePath & "user\temp\feedback\Current.csv"
- cLogFile = convertpath( cLogFile )
-
- if ( hDeleteFile( cLogFile ) ) then
- printlog( "Test environment is clean, no logfile present (anymore)" )
- endif
-
- ToolsOptions
- hToolsOptions( "StarOffice", "Improvement" )
- printlog( "Improvement Program tabpage" )
-
- call DialogTest( TabOOoImprovement )
-
- ParticipateNo.check()
- ParticipateYes.check()
-
- if ( ShowData.isEnabled() ) then
-
- ShowData.click()
-
- Kontext "TextImport"
- if ( TextImport.exists( 1 ) ) then
- printlog( "Text import dialog" )
-
- call DialogTest( TextImport )
- TextImport.cancel()
- else
- warnlog( "#i97340# Show Data button enabled but no logged data found" )
- endif
-
- Kontext "Active"
- if ( Active.exists( 1 ) ) then
- printlog( "Messagebox: " & Active.getText() )
- Active.ok()
- else
- warnlog( "No warning for missing file: " & cLogFile )
- endif
-
- Kontext "Active"
- if ( Active.exists( 1 ) ) then
- warnlog( "#97342# Second message for missing " & cLogFile )
- Active.ok()
- endif
- else
- printlog( "Show data is disabled" )
- endif
-
- Kontext "OptionenDlg"
- OptionenDlg.cancel()
-
-endcase
-
diff --git a/testautomation/framework/optional/f_CJK_GridLayout.bas b/testautomation/framework/optional/f_CJK_GridLayout.bas
index 030fa64e6dfd..1569816cd3a5 100755
--- a/testautomation/framework/optional/f_CJK_GridLayout.bas
+++ b/testautomation/framework/optional/f_CJK_GridLayout.bas
@@ -72,8 +72,6 @@ end sub
sub LoadIncludeFiles
use "global\system\includes\master.inc"
use "global\system\includes\gvariabl.inc"
- use "global\tools\includes\required\t_doc1.inc"
- use "global\tools\includes\required\t_tools1.inc"
use "global\tools\includes\optional\t_docfuncs.inc"
use "framework\tools\includes\CJK_tools.inc"
diff --git a/testautomation/framework/optional/f_CJK_RubyDialogueProposal.bas b/testautomation/framework/optional/f_CJK_RubyDialogueProposal.bas
index 2e7d9e80ecef..2bf56608181b 100755
--- a/testautomation/framework/optional/f_CJK_RubyDialogueProposal.bas
+++ b/testautomation/framework/optional/f_CJK_RubyDialogueProposal.bas
@@ -63,8 +63,6 @@ end sub
sub LoadIncludeFiles
use "global\system\includes\master.inc"
use "global\system\includes\gvariabl.inc"
- use "global\tools\includes\required\t_doc1.inc"
- use "global\tools\includes\required\t_tools1.inc"
use "framework\tools\includes\CJK_tools.inc"
diff --git a/testautomation/framework/optional/f_basic_dialog_i18n.bas b/testautomation/framework/optional/f_basic_dialog_i18n.bas
index e3b50ffd188a..291894eb6296 100755
--- a/testautomation/framework/optional/f_basic_dialog_i18n.bas
+++ b/testautomation/framework/optional/f_basic_dialog_i18n.bas
@@ -56,6 +56,7 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_docfuncs.inc"
use "global\tools\includes\optional\t_control_objects.inc"
use "global\tools\includes\optional\t_stringtools.inc"
+ use "global\tools\includes\optional\t_treelist_tools.inc"
use "framework\tools\includes\formcontrols.inc"
use "framework\tools\includes\pbrowser_tools.inc"
diff --git a/testautomation/framework/optional/f_basic_documents.bas b/testautomation/framework/optional/f_basic_documents.bas
index 87f022d4e74e..a9887adda4fc 100755
--- a/testautomation/framework/optional/f_basic_documents.bas
+++ b/testautomation/framework/optional/f_basic_documents.bas
@@ -56,8 +56,7 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_accels.inc"
use "global\tools\includes\optional\t_security_tools.inc"
use "global\tools\includes\optional\t_listfuncs.inc"
-
- use "framework\tools\includes\init_tools.inc"
+ use "global\tools\includes\optional\t_stringtools.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_basic_gridcontrol.bas b/testautomation/framework/optional/f_basic_gridcontrol.bas
index 697618e7fc65..74ee57c52c5d 100644..100755
--- a/testautomation/framework/optional/f_basic_gridcontrol.bas
+++ b/testautomation/framework/optional/f_basic_gridcontrol.bas
@@ -32,17 +32,26 @@
'\******************************************************************************
sub main
+
use "framework\optional\includes\basic_gridcontrol.inc"
+
call hStatusIn ("framework", "f_basic_gridcontrol.bas")
- printlog "Load Document with gridcontrol"
+
+ hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_LOW )
call tGridcontrolLoad
hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_DEFAULT )
- call hStatusOut
+
+ call hStatusOut()
+
end sub
sub LoadIncludeFiles
+
use "global\system\includes\master.inc"
use "global\system\includes\gvariabl.inc"
+
+ use "global\tools\includes\optional\t_treelist_tools.inc"
+
gApplication = "WRITER"
call GetUseFiles()
end sub
diff --git a/testautomation/framework/optional/f_basic_issues.bas b/testautomation/framework/optional/f_basic_issues.bas
index b6be47be72c4..57e94aa505e4 100755
--- a/testautomation/framework/optional/f_basic_issues.bas
+++ b/testautomation/framework/optional/f_basic_issues.bas
@@ -49,7 +49,10 @@ sub LoadIncludeFiles
use "global\system\includes\master.inc"
use "global\tools\includes\optional\t_basic_ide_tools.inc"
+ use "global\tools\includes\optional\t_treelist_tools.inc"
use "global\tools\includes\optional\t_macro_tools.inc"
+ use "global\tools\includes\optional\t_basic_organizer_tools.inc"
+ use "global\tools\includes\optional\t_docfuncs.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_basic_library_export_import.bas b/testautomation/framework/optional/f_basic_library_export_import.bas
index e09742c2e3dc..a03e4bfe4804 100755
--- a/testautomation/framework/optional/f_basic_library_export_import.bas
+++ b/testautomation/framework/optional/f_basic_library_export_import.bas
@@ -68,8 +68,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_listfuncs.inc"
use "global\tools\includes\optional\t_stringtools.inc"
use "global\tools\includes\optional\t_macro_tools.inc"
-
- use "framework\tools\includes\init_tools.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_basic_modules.bas b/testautomation/framework/optional/f_basic_modules.bas
index a2719c27bada..fa7aa18f9ef5 100755
--- a/testautomation/framework/optional/f_basic_modules.bas
+++ b/testautomation/framework/optional/f_basic_modules.bas
@@ -71,6 +71,7 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_filetools.inc"
use "global\tools\includes\optional\t_accels.inc"
use "global\tools\includes\optional\t_stringtools.inc"
+ use "global\tools\includes\optional\t_macro_tools.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_basic_package_export_import.bas b/testautomation/framework/optional/f_basic_package_export_import.bas
index b8c392dd38b8..db1b43c9f76d 100755
--- a/testautomation/framework/optional/f_basic_package_export_import.bas
+++ b/testautomation/framework/optional/f_basic_package_export_import.bas
@@ -65,8 +65,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_listfuncs.inc"
use "global\tools\includes\optional\t_macro_tools.inc"
- use "framework\tools\includes\init_tools.inc"
-
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_basic_shared_modules.bas b/testautomation/framework/optional/f_basic_shared_modules.bas
index 1bdb59eb2218..aef11a739c8a 100755
--- a/testautomation/framework/optional/f_basic_shared_modules.bas
+++ b/testautomation/framework/optional/f_basic_shared_modules.bas
@@ -52,8 +52,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_treelist_tools.inc"
use "global\tools\includes\optional\t_docfuncs.inc"
- use "framework\tools\includes\init_tools.inc"
-
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_basic_templatedocuments.bas b/testautomation/framework/optional/f_basic_templatedocuments.bas
index 576de3006b2e..064502e96e33 100755
--- a/testautomation/framework/optional/f_basic_templatedocuments.bas
+++ b/testautomation/framework/optional/f_basic_templatedocuments.bas
@@ -38,8 +38,10 @@ sub main
call hStatusIn( "framework" , "f_basic_templatedocuments.bas" )
+ hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_MEDIUM )
call tMacroUserTemplate()
call tBasicSpecTemplate()
+ hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_DEFAULT )
call hStatusOut()
@@ -64,7 +66,6 @@ sub LoadIncludeFiles
use "framework\tools\includes\private_environment.inc"
use "framework\tools\includes\webtools.inc"
use "framework\tools\includes\template_tools.inc"
- use "framework\tools\includes\init_tools.inc"
use "framework\tools\includes\scriptorganizer_tools.inc"
gApplication = "WRITER"
diff --git a/testautomation/framework/optional/f_basic_vba-compat.bas b/testautomation/framework/optional/f_basic_vba-compat.bas
index 80b48eb5c1e6..7b96728c1580 100755
--- a/testautomation/framework/optional/f_basic_vba-compat.bas
+++ b/testautomation/framework/optional/f_basic_vba-compat.bas
@@ -64,6 +64,7 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_security_tools.inc"
use "global\tools\includes\optional\t_macro_tools.inc"
use "global\tools\includes\optional\t_docfuncs.inc"
+ use "global\tools\includes\optional\t_user_info.inc"
use "framework\optional\includes\basic_vba_compat_tools.inc"
diff --git a/testautomation/framework/optional/f_extras_samplefileopen.bas b/testautomation/framework/optional/f_extras_samplefileopen.bas
index 8f57fe7e2242..a07609135c62 100755
--- a/testautomation/framework/optional/f_extras_samplefileopen.bas
+++ b/testautomation/framework/optional/f_extras_samplefileopen.bas
@@ -57,7 +57,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_filetools.inc"
use "global\tools\includes\optional\t_listfuncs.inc"
- use "framework\tools\includes\apicalls.inc"
use "framework\tools\includes\template_tools.inc"
gApplication = "WRITER"
diff --git a/testautomation/framework/optional/f_extras_sampleopen.bas b/testautomation/framework/optional/f_extras_sampleopen.bas
index e1dfee91afed..ac11a9f330d1 100755
--- a/testautomation/framework/optional/f_extras_sampleopen.bas
+++ b/testautomation/framework/optional/f_extras_sampleopen.bas
@@ -59,7 +59,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_filetools.inc"
use "global\tools\includes\optional\t_key_tools.inc"
- use "framework\tools\includes\apicalls.inc"
use "framework\tools\includes\template_tools.inc"
gApplication = "WRITER"
diff --git a/testautomation/framework/optional/f_extras_templatefileopen.bas b/testautomation/framework/optional/f_extras_templatefileopen.bas
index e4121b8df960..037dcaa6c166 100755
--- a/testautomation/framework/optional/f_extras_templatefileopen.bas
+++ b/testautomation/framework/optional/f_extras_templatefileopen.bas
@@ -57,7 +57,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_security_tools.inc"
use "global\tools\includes\optional\t_listfuncs.inc"
- use "framework\tools\includes\apicalls.inc"
use "framework\tools\includes\template_tools.inc"
gApplication = "WRITER"
diff --git a/testautomation/framework/optional/f_extras_templateopen.bas b/testautomation/framework/optional/f_extras_templateopen.bas
index f78e023b5e33..e4fc9a1abe96 100755
--- a/testautomation/framework/optional/f_extras_templateopen.bas
+++ b/testautomation/framework/optional/f_extras_templateopen.bas
@@ -59,7 +59,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_filetools.inc"
use "global\tools\includes\optional\t_security_tools.inc"
- use "framework\tools\includes\apicalls.inc"
use "framework\tools\includes\template_tools.inc"
gApplication = "WRITER"
diff --git a/testautomation/framework/optional/f_filedlg_dialogtest.bas b/testautomation/framework/optional/f_filedlg_dialogtest.bas
index d9ccb1038780..6ef9dd84dd84 100755
--- a/testautomation/framework/optional/f_filedlg_dialogtest.bas
+++ b/testautomation/framework/optional/f_filedlg_dialogtest.bas
@@ -59,8 +59,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_docfuncs.inc"
use "global\tools\includes\optional\t_accels.inc"
- use "framework\tools\includes\tabpages.inc"
-
gApplication = "WRITER"
Call GetUseFiles
diff --git a/testautomation/framework/optional/f_options_ooo.bas b/testautomation/framework/optional/f_options_ooo.bas
index b280a4427b05..6f18669466f1 100755
--- a/testautomation/framework/optional/f_options_ooo.bas
+++ b/testautomation/framework/optional/f_options_ooo.bas
@@ -79,7 +79,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_control_objects.inc"
use "global\tools\includes\optional\t_key_tools.inc"
- use "framework\tools\includes\init_tools.inc"
use "framework\tools\includes\options_tools.inc"
Call GetUseFiles
diff --git a/testautomation/framework/optional/f_scripting_basics.bas b/testautomation/framework/optional/f_scripting_basics.bas
deleted file mode 100755
index 494dc1e21ad5..000000000000
--- a/testautomation/framework/optional/f_scripting_basics.bas
+++ /dev/null
@@ -1,56 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Quick tests for the scripting framework
-'*
-'\******************************************************************************
-
-sub main
-
- use "framework\optional\includes\scripting_basics.inc"
-
- call hStatusIn( "framework" , "f_scripting_basics.bas" )
- call tScripting()
- call hStatusOut()
-
-end sub
-
-'-------------------------------------------------------------------------
-
-sub LoadIncludeFiles
-
- use "global\system\includes\master.inc"
- use "global\system\includes\gvariabl.inc"
-
- use "framework\tools\includes\init_tools.inc"
-
- gApplication = "WRITER"
- call GetUseFiles()
-
-end sub
diff --git a/testautomation/framework/optional/f_security_certified_docs.bas b/testautomation/framework/optional/f_security_certified_docs.bas
index 52a5693a9920..26d76b74ee7d 100755
--- a/testautomation/framework/optional/f_security_certified_docs.bas
+++ b/testautomation/framework/optional/f_security_certified_docs.bas
@@ -69,8 +69,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_docfuncs.inc"
use "global\tools\includes\optional\t_treelist_tools.inc"
use "global\tools\includes\optional\t_listfuncs.inc"
-
- use "framework\tools\includes\signature_tools.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_security_incorrect_password.bas b/testautomation/framework/optional/f_security_incorrect_password.bas
index 10f0cf2d76dc..1ce5abe7e3f4 100755
--- a/testautomation/framework/optional/f_security_incorrect_password.bas
+++ b/testautomation/framework/optional/f_security_incorrect_password.bas
@@ -61,8 +61,6 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_security_tools.inc"
use "global\tools\includes\optional\t_filetools.inc"
use "global\tools\includes\optional\t_docfuncs.inc"
-
- use "framework\tools\includes\init_tools.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/optional/f_toolbar_items.bas b/testautomation/framework/optional/f_toolbar_items.bas
index b9e0550f6296..4277ce17d7aa 100755
--- a/testautomation/framework/optional/f_toolbar_items.bas
+++ b/testautomation/framework/optional/f_toolbar_items.bas
@@ -53,8 +53,6 @@ sub LoadIncludeFiles
use "framework\tools\includes\toolbar_tools.inc"
use "framework\tools\includes\customize_tools.inc"
- use "framework\tools\includes\performance.inc"
- use "framework\tools\includes\init_tools.inc"
gApplication = "WRITER"
call GetUseFiles
diff --git a/testautomation/framework/optional/includes/CJK_FeatureSwitchTest_1.inc b/testautomation/framework/optional/includes/CJK_FeatureSwitchTest_1.inc
index d144b7cdb88a..b8ddc55e012a 100644
--- a/testautomation/framework/optional/includes/CJK_FeatureSwitchTest_1.inc
+++ b/testautomation/framework/optional/includes/CJK_FeatureSwitchTest_1.inc
@@ -78,7 +78,7 @@ testcase tWriterUIChangesTest1
TabAusrichtungAbsatz.Cancel
'/// turn off "Asian Language support" , check if checkbox "Snap to text grid" isn't enable
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
Kontext
@@ -96,27 +96,30 @@ testcase tWriterUIChangesTest1
TabAusrichtungAbsatz.Cancel
end if
- TabAusrichtungAbsatz.Cancel
+ ' JSK I have no idea why the tabpage was closed a second time so i do not fix it
+ ' but make closing the tabpage optional. I hate this.
+ kontext "TabAusrichtungAbsatz"
+ hCloseDialog( TabAusrichtungAbsatz, "cancel,optional" )
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
- Call CheckAsianLanguageSupport("Off")
+ if ( not hSystemHasAsianLocale() ) then
+ Call CheckAsianLanguageSupport("Off")
- Kontext
- FormatParagraph
- Active.SetPage TabAusrichtungAbsatz
- Kontext "TabAusrichtungAbsatz"
+ Kontext
+ FormatParagraph
+ Active.SetPage TabAusrichtungAbsatz
+ Kontext "TabAusrichtungAbsatz"
- try
- if TextrasterFangen.IsChecked = TRUE Or TextrasterFangen.IsChecked <> TRUE then
- warnlog "Something wrong in checkbox 'snap to text grid'"
- end if
- catch
- endcatch
+ try
+ if TextrasterFangen.IsChecked = TRUE Or TextrasterFangen.IsChecked <> TRUE then
+ warnlog "Something wrong in checkbox 'snap to text grid'"
+ end if
+ catch
+ endcatch
- TabAusrichtungAbsatz.Cancel
- end if
+ TabAusrichtungAbsatz.Cancel
+ end if
- Call hCloseDocument
+ Call hCloseDocument
endcase
'-------------------------------------------------------------------------
@@ -143,7 +146,7 @@ testcase tWriterUIChangesTest2
endcatch
'/// turn off "Asian Language support" , check if tabpage "Asian Typography" disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
Kontext
@@ -186,7 +189,7 @@ testcase tWriterUIChangesTest3
TabFont.Cancel
'/// turn off "Asian Language support" , Check if list box "Asian text font" disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
Kontext
@@ -227,7 +230,7 @@ testcase tWriterUIChangesTest4
TabFontEffects.Cancel
'/// turn off "Asian Language support" , Check if list box "Emphasis mark" disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
Kontext
@@ -264,7 +267,7 @@ testcase tWriterUIChangesTest5
ExtrasOptionenDlg.Cancel
'/// turn on "Asian Language support" , Check if tabpage "Searching in Japanese" disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
ToolsOptions
@@ -299,7 +302,7 @@ testcase tWriterUIChangesTest6
ExtrasOptionenDlg.Cancel
'/// turn off "Asian Language support" , Check if tabpage "Asian Layout" disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
ToolsOptions
@@ -335,7 +338,7 @@ testcase tWriterUIChangesTest7
endcatch
'/// turn off "Asian Language support" , Check if menu format/Ruby is inactived
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
try
@@ -390,7 +393,7 @@ testcase tWriterUIChangesTest8
endcatch
'/// turn off "Asian Language support" , Check if submenus in format/change case is inactived
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
try
@@ -424,7 +427,7 @@ endcase
'-------------------------------------------------------------------------
testcase tWriterUIChangesTest9
- call hNewDocument
+ call hNewDocument
'/// turn on "Asian Language support" , Check if list box text direction appear
Call CheckAsianLanguageSupport("On")
@@ -442,7 +445,7 @@ testcase tWriterUIChangesTest9
TabSeite.Cancel
'/// turn off "Asian Language support" , Check if list box text direction disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
FormatPageWriter
@@ -485,7 +488,7 @@ testcase tWriterUIChangesTest10
endcatch
'/// turn off "Asian Language support" , Check if vertical text box and callout disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
Kontext "Drawbar"
try
@@ -507,12 +510,12 @@ endcase
'-------------------------------------------------------------------------
testcase tWriterUIChangesTest11
- Dim iHopeNumber1 , iHopeNumber2 as Integer
- dim i as integer
- dim iCount as integer
- iHopeNumber1 = 38
- iHopeNumber2 = 19
+ dim i as integer
+ dim iCount as integer
+
+ const iHopeNumber1 = 42
+ const iHopeNumber2 = 23
'/// Check if the number in listbox numbering is right or not.
'/// [if the number of the listbox numbering is changed, this case should be modified according]
@@ -543,16 +546,11 @@ testcase tWriterUIChangesTest11
Active.Ok
QAErrorLog "No Default-Printer!"
Kontext "Printing"
- if ( Printing.exists( 1 ) ) then
- Printing.cancel()
- endif
+ hCloseDialog( Printing, "cancel,optional" )
end if
else
Kontext "Printing"
- if ( Printing.exists( 2 ) ) then
- Printing.cancel()
- Printing.notExists( 5 )
- endif
+ hCloseDialog( Printing, "cancel,optional" )
endif
else
for i =1 to iCount
@@ -561,14 +559,14 @@ testcase tWriterUIChangesTest11
'Referenze:
TabOptionenNumerierung.Cancel
qaerrorlog "the number of list box numbering is wrong when Asian Language support is on; expected: " + iHopeNumber1 + "; is: " + iCount
- end if
-
- 'print warning if no printer is available
- kontext
- if active.exists(5) then
- qaErrorlog "print warning: '" + active.getText + "'"
- active.ok
- endif
+ end if
+
+ 'print warning if no printer is available
+ kontext
+ if active.exists(5) then
+ qaErrorlog "print warning: '" + active.getText + "'"
+ active.ok
+ endif
'print warning if no printer is available
kontext
@@ -578,7 +576,7 @@ testcase tWriterUIChangesTest11
endif
'/// turn off "Asian Language support" , Check if the number in listbox numbering is right
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
FormatNumberingBullets
@@ -613,7 +611,7 @@ testcase tProlongedVowelsTest1
ToolsOptions
Call hToolsOptions("LANGUAGESETTINGS","SEARCHINGINJAPANESE")
- if ProlongedSoundmarks.IsChecked <> TRUE then
+ if ( not ProlongedSoundmarks.IsChecked ) then
warnlog "The default setting of 'Prolonged vowels (ka-/kaa)' isn't ACTIVATED."
end if
@@ -648,7 +646,7 @@ testcase tCalcUIChangesTest_10
endcatch
'/// turn off "Asian Language support" , Check if vertical text box and callout disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
Kontext "Drawbar"
try
@@ -686,7 +684,7 @@ testcase tImpressUIChangesTest_10
endcatch
'/// turn off "Asian Language support" , Check if vertical text box disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
sleep(1)
Kontext "Drawbar"
@@ -719,7 +717,7 @@ testcase tDrawUIChangesTest_10
endcatch
'/// turn off "Asian Language support" , Check if vertical text box disappear
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
+ if ( not hSystemHasAsianLocale() ) then
Call CheckAsianLanguageSupport("Off")
Kontext "Drawbar"
try
@@ -734,3 +732,12 @@ testcase tDrawUIChangesTest_10
endcase
'-------------------------------------------------------------------------
+
+function hSystemHasAsianLocale() as boolean
+
+ select case ( iSystemSprache )
+ case 81, 82, 86, 88 : hSystemHasAsianLocale() = true
+ case else : hSystemHasAsianLocale() = false
+ end select
+
+end function \ No newline at end of file
diff --git a/testautomation/framework/optional/includes/basic_delete_modules.inc b/testautomation/framework/optional/includes/basic_delete_modules.inc
index 3fe642ea8ec6..5418c322ce96 100644..100755
--- a/testautomation/framework/optional/includes/basic_delete_modules.inc
+++ b/testautomation/framework/optional/includes/basic_delete_modules.inc
@@ -35,6 +35,8 @@ testcase tDeleteModulesAtRunningBasic
printlog( "Delete BASIC module while BASIC is running" )
+ const RAISE_MESSAGEBOX = 1
+
dim brc as boolean
const MAX_WAIT = 3000
dim iMenuItemCount as integer
@@ -44,11 +46,7 @@ testcase tDeleteModulesAtRunningBasic
Call hNewDocument()
printlog( "Open the BASIC Organizer" )
- brc = hOpenBasicOrganizerFromDoc()
- if ( not brc ) then
- warnlog( "Unable to open BASIC organizer for the document" )
- goto endsub
- endif
+ ToolsMacro_uno
printlog( "Create a new module for the current document" )
brc = hCreateModuleForDoc()
@@ -58,7 +56,7 @@ testcase tDeleteModulesAtRunningBasic
endif
printlog( "Insert a short script (1. page)" )
- brc = hInsertMacro( 1 )
+ brc = hInsertMacro( RAISE_MESSAGEBOX )
if ( not brc ) then
warnlog( "Unable to create a basic module for the document" )
goto endsub
@@ -79,10 +77,10 @@ testcase tDeleteModulesAtRunningBasic
iMenuItemCount = hMenuItemGetCount()
select case ( iMenuItemCount )
- case 2 : printlog( "Correct number of items in menu: " & iMenuItemCount )
- case 3 : warnlog ( "Delete is active in context menu for a running macro => BUG!" )
- case 5 : warnlog ( "#i101972# - Disabled entries are shown in context menu on tab bar" )
- default : warnlog ( "Incorrect itemcount in context menu: " & iMenuItemCount )
+ case 2 : printlog( "Correct number of items in menu: " & iMenuItemCount )
+ case 3 : warnlog ( "Delete is active in context menu for a running macro => BUG!" )
+ case 5 : warnlog ( "#i101972# - Disabled entries are shown in context menu on tab bar" )
+ case else : warnlog ( "Incorrect itemcount in context menu: " & iMenuItemCount )
end select
catch
warnlog( "Unable to retrieve the number of menuitems" )
diff --git a/testautomation/framework/optional/includes/basic_dialog_i18n_copy_control.inc b/testautomation/framework/optional/includes/basic_dialog_i18n_copy_control.inc
index 1a47c8296588..c3db79efc08d 100644..100755
--- a/testautomation/framework/optional/includes/basic_dialog_i18n_copy_control.inc
+++ b/testautomation/framework/optional/includes/basic_dialog_i18n_copy_control.inc
@@ -38,6 +38,7 @@ testcase tBasicDialogI18nCopyControl
const DIALOG_NAME = "DialogExport" ' Name of the first module
const LANGUAGES_TO_COPY = 5 ' Only copy n languages
const TARGET_DIALOG = "Target" ' The name of the dialog the control is pasted to
+ const DEFAULT_TIMEOUT = 2
dim cLanguageList( LANGUAGES_TO_COPY ) as string ' Note: Index 0 is used
dim iCurrentLanguage as integer
@@ -56,146 +57,145 @@ testcase tBasicDialogI18nCopyControl
' These are the IDE internal coordinates of the control, used to restore
' identical coordinates in the source and target dialogs
dim iOriginalCoordinates( 4 ) as integer
-
- ' Some multi purpose returncode
- dim brc as boolean
hCreateDocument()
printlog( "Test init: Setting up environment" )
- brc = hInitFormControls( DIALOG_NAME )
- if ( not brc ) then
- warnlog( "Failed to initialize BASIC IDE/Dialog editor, aborting" )
- goto endsub
- endif
-
- hDrawControlOnDialog( COMMAND_BUTTON )
-
- hOpenPropertyBrowser()
- kontext "TabGeneralControl"
- printlog( "Get internal coordinates for the control" )
- iOriginalCoordinates( 1 ) = height.getText()
- iOriginalCoordinates( 2 ) = width.getText()
- iOriginalCoordinates( 3 ) = PosX.getText()
- iOriginalCoordinates( 4 ) = PosY.getText()
- printlog( "Height: " & iOriginalCoordinates( 1 ) )
- printlog( "Width.: " & iOriginalCoordinates( 2 ) )
- printlog( "Pos X.: " & iOriginalCoordinates( 3 ) )
- printlog( "Pos Y.: " & iOriginalCoordinates( 4 ) )
- hClosePropertyBrowser()
-
- qaerrorlog( "#i80456# properties button not enabled when a formcontrol is inserted via keyboard" )
-
- kontext "ToolsCollectionBar"
- ManageLanguage.click()
-
- kontext "ManageUILanguages"
- if ( ManageUILanguages.exists( 2 ) ) then
-
- add.click()
-
- kontext "SetDefaultLanguage"
- if ( SetDefaultLanguage.exists( 1 ) ) then
- SetDefaultLanguage.ok()
+ if ( hInitFormControls( DIALOG_NAME ) ) then
+
+ printlog( "Draw a commandbutton on the dialog" )
+ hDrawControlOnDialog( COMMAND_BUTTON )
+
+ printlog( "Open the property browser" )
+ hOpenPropertyBrowser()
+ kontext "TabGeneralControl"
+ printlog( "Get internal coordinates for the control" )
+ iOriginalCoordinates( 1 ) = height.getText()
+ iOriginalCoordinates( 2 ) = width.getText()
+ iOriginalCoordinates( 3 ) = PosX.getText()
+ iOriginalCoordinates( 4 ) = PosY.getText()
+ printlog( "Height: " & iOriginalCoordinates( 1 ) )
+ printlog( "Width.: " & iOriginalCoordinates( 2 ) )
+ printlog( "Pos X.: " & iOriginalCoordinates( 3 ) )
+ printlog( "Pos Y.: " & iOriginalCoordinates( 4 ) )
+ hClosePropertyBrowser()
+
+ qaerrorlog( "#i80456# properties button not enabled when a formcontrol is inserted via keyboard" )
+
+ kontext "ToolsCollectionBar"
+ printlog( "Click <Manage Languages>" )
+ ManageLanguage.click()
+
+ kontext "ManageUILanguages"
+ if ( ManageUILanguages.exists( DEFAULT_TIMEOUT ) ) then
+
+ printlog( "Click <Add>" )
+ hClickButton( Add )
+
+ kontext "SetDefaultLanguage"
+ if ( SetDefaultLanguage.exists( DEFAULT_TIMEOUT ) ) then
+ hCloseDialog( SetDefaultLanguage, "ok" )
+ else
+ warnlog( "Set Default Language dialog is missing" )
+ endif
else
- warnlog( "Set Default Language dialog is missing" )
+ warnlog( "Unable to open Manage UI Languages dialog" )
endif
- else
- warnlog( "Unable to open Manage UI Languages dialog" )
- endif
-
- kontext "ManageUILanguages"
- if ( ManageUILanguages.exists( 1 ) ) then
-
- add.click()
-
- kontext "AddUserInterface"
- if ( AddUserInterface.exists( 1 ) ) then
- for iCurrentLanguage = 1 to LANGUAGES_TO_COPY
- AddNewControl.select( iCurrentLanguage )
- AddNewControl.check()
- next iCurrentLanguage
- AddUserInterface.ok()
+
+ kontext "ManageUILanguages"
+ if ( ManageUILanguages.exists( DEFAULT_TIMEOUT ) ) then
+
+ printlog( "Click <Add>" )
+ hClickButton( Add )
+
+ kontext "AddUserInterface"
+ if ( AddUserInterface.exists( DEFAULT_TIMEOUT ) ) then
+ for iCurrentLanguage = 1 to LANGUAGES_TO_COPY
+ AddNewControl.select( iCurrentLanguage )
+ AddNewControl.check()
+ next iCurrentLanguage
+ hCloseDialog( AddUserInterface, "ok" )
+ else
+ warnlog( "Add User Interface Language dialog is missing" )
+ endif
else
- warnlog( "Add User Interface Language dialog is missing" )
+ warnlog( "Unable to open Manage UI Languages dialog" )
endif
- else
- warnlog( "Unable to open Manage UI Languages dialog" )
- endif
-
- kontext "ManageUILanguages"
- for iCurrentLanguage = 0 to LANGUAGES_TO_COPY
- PresentLanguages.select( iCurrentLanguage + 1 )
- cLanguageList( iCurrentLanguage ) = PresentLanguages.getSelText()
- printlog( iCurrentLanguage & ": " & cLanguageList( iCurrentLanguage ) )
- next iCurrentLanguage
-
- kontext "ManageUILanguages"
- ManageUILanguages.close()
-
- printlog( "Localizing control" )
- for iCurrentLanguage = 0 to LANGUAGES_TO_COPY
- kontext "TranslationBar"
- CurrentLanguage.select( iCurrentLanguage + 1 )
- kontext "BasicIde"
- hSelectControl( COMMAND_BUTTON )
+
+ kontext "ManageUILanguages"
+ for iCurrentLanguage = 0 to LANGUAGES_TO_COPY
+ PresentLanguages.select( iCurrentLanguage + 1 )
+ cLanguageList( iCurrentLanguage ) = PresentLanguages.getSelText()
+ printlog( iCurrentLanguage & ": " & cLanguageList( iCurrentLanguage ) )
+ next iCurrentLanguage
+
+ kontext "ManageUILanguages"
+ hCloseDialog( ManageUILanguages, "close" )
+
+ printlog( "Localizing control" )
+ for iCurrentLanguage = 0 to LANGUAGES_TO_COPY
+ kontext "TranslationBar"
+ CurrentLanguage.select( iCurrentLanguage + 1 )
+ kontext "BasicIde"
+ hSelectControl( COMMAND_BUTTON )
+ hOpenPropertyBrowser()
+ printlog( "Setting string: " & cIDStrings( iCurrentLanguage ) )
+ kontext "TabGeneralControl"
+ NameText.typeKeys( cIDStrings( iCurrentLanguage ) & "<RETURN>" )
+ hClosePropertyBrowser()
+ next iCurrentLanguage
+
+ printlog( "Copy control" )
+ hUseAsyncSlot( "EditCopy" )
+
+ printlog( "New dialog" )
+ hNewDialog()
+
+ printlog( "Paste control" )
+ hUseAsyncSlot( "EditPaste" )
+
hOpenPropertyBrowser()
- printlog( "Setting string: " & cIDStrings( iCurrentLanguage ) )
kontext "TabGeneralControl"
- NameText.typeKeys( cIDStrings( iCurrentLanguage ) & "<RETURN>" )
+ printlog( "Set coordinates to be identical with those from the source control" )
+ PosX.typeKeys ( )
+ PosX.typeKeys ( "<HOME><SHIFT END>" & iOriginalCoordinates( 3 ) & "<RETURN>" )
+ PosY.typeKeys ( "<HOME><SHIFT END>" & iOriginalCoordinates( 4 ) & "<RETURN>" )
+ Height.typeKeys( "<HOME><SHIFT END>" & iOriginalCoordinates( 1 ) & "<RETURN>" )
+ Width.typeKeys ( "<HOME><SHIFT END>" & iOriginalCoordinates( 2 ) & "<RETURN>" )
+ hClosePropertyBrowser
+
+
+ hOpenPropertyBrowser()
+ kontext "TabGeneralControl"
+ printlog( "Get internal coordinates for the control" )
+ iOriginalCoordinates( 1 ) = height.getText()
+ iOriginalCoordinates( 2 ) = width.getText()
+ iOriginalCoordinates( 3 ) = PosX.getText()
+ iOriginalCoordinates( 4 ) = PosY.getText()
+ printlog( "Height: " & iOriginalCoordinates( 1 ) )
+ printlog( "Width.: " & iOriginalCoordinates( 2 ) )
+ printlog( "Pos X.: " & iOriginalCoordinates( 3 ) )
+ printlog( "Pos Y.: " & iOriginalCoordinates( 4 ) )
hClosePropertyBrowser()
- next iCurrentLanguage
-
- printlog( "Copy control" )
- EditCopy
-
- printlog( "New dialog" )
- Call hNewDialog()
-
- printlog( "Paste control" )
- EditPaste
-
- hOpenPropertyBrowser()
- kontext "TabGeneralControl"
- printlog( "Set coordinates to be identical with those from the source control" )
- PosX.typeKeys ( )
- PosX.typeKeys ( "<HOME><SHIFT END>" & iOriginalCoordinates( 3 ) & "<RETURN>" )
- PosY.typeKeys ( "<HOME><SHIFT END>" & iOriginalCoordinates( 4 ) & "<RETURN>" )
- Height.typeKeys( "<HOME><SHIFT END>" & iOriginalCoordinates( 1 ) & "<RETURN>" )
- Width.typeKeys ( "<HOME><SHIFT END>" & iOriginalCoordinates( 2 ) & "<RETURN>" )
- hClosePropertyBrowser
-
-
- hOpenPropertyBrowser()
- kontext "TabGeneralControl"
- printlog( "Get internal coordinates for the control" )
- iOriginalCoordinates( 1 ) = height.getText()
- iOriginalCoordinates( 2 ) = width.getText()
- iOriginalCoordinates( 3 ) = PosX.getText()
- iOriginalCoordinates( 4 ) = PosY.getText()
- printlog( "Height: " & iOriginalCoordinates( 1 ) )
- printlog( "Width.: " & iOriginalCoordinates( 2 ) )
- printlog( "Pos X.: " & iOriginalCoordinates( 3 ) )
- printlog( "Pos Y.: " & iOriginalCoordinates( 4 ) )
- hClosePropertyBrowser()
-
- kontext "TranslationBar"
- for iCurrentLanguage = 0 to LANGUAGES_TO_COPY
- CurrentLanguage.select( iCurrentLanguage + 1 )
- cTempString = CurrentLanguage.getSelText()
- if ( cTempString = cLanguageList( iCurrentLanguage ) ) then
- printlog( "Language <" & cTempString & "> was successfully copied" )
- else
- warnlog( "Either a language was lost or the sort order changed" )
- printlog( "Expected: " & cLanguageList( iCurrentLanguage ) )
- printlog( "Found...: " & cTempString )
- endif
- next iCurrentLanguage
-
-
- kontext "BasicIde"
- hDestroyDocument()
+
+ kontext "TranslationBar"
+ for iCurrentLanguage = 0 to LANGUAGES_TO_COPY
+ CurrentLanguage.select( iCurrentLanguage + 1 )
+ cTempString = CurrentLanguage.getSelText()
+ if ( cTempString = cLanguageList( iCurrentLanguage ) ) then
+ printlog( "Language <" & cTempString & "> was successfully copied" )
+ else
+ warnlog( "Either a language was lost or the sort order changed" )
+ printlog( "Expected: " & cLanguageList( iCurrentLanguage ) )
+ printlog( "Found...: " & cTempString )
+ endif
+ next iCurrentLanguage
+
+ hCloseBasicIDE()
+ else
+ warnlog( "Failed to initialize dialog" )
+ endif
hDestroyDocument()
endcase
diff --git a/testautomation/framework/optional/includes/basic_documents.inc b/testautomation/framework/optional/includes/basic_documents.inc
index d5d12b1aa12f..13dd3567716a 100644..100755
--- a/testautomation/framework/optional/includes/basic_documents.inc
+++ b/testautomation/framework/optional/includes/basic_documents.inc
@@ -37,7 +37,6 @@ testcase tBasicDocuments
const CFN = "tBasicDocuments::"
- dim brc as boolean
dim sFileWriter as string
dim sFileCalc as string
dim iDocumentCount as integer
@@ -62,32 +61,32 @@ testcase tBasicDocuments
gApplication = "WRITER"
printlog( "Create a Writer workfilename (build path and filename)" )
- brc = hCreateBasicWorkFiles()
+ hCreateBasicWorkFiles()
sFileWriter = hGetBasicWorkFile( "current" )
gApplication = "CALC"
printlog( "Create a Calc workfilename (build path and filename)" )
- brc = hCreateBasicWorkFiles()
+ hCreateBasicWorkFiles()
sFileCalc = hGetBasicWorkFile( "current" )
printlog( "Open the writer file" )
- brc = hFileOpen( sFileWriter )
- brc = hAllowMacroExecution()
- if ( not brc ) then
+ hFileOpen( sFileWriter )
+ if ( not hAllowMacroExecution() ) then
warnlog( "Missing Macro execution dialog. Please check the file/security settings" )
endif
printlog( "Open the Calc file" )
- brc = hFileOpen( sFileCalc )
- brc = hAllowMacroExecution()
- if ( not brc ) then
+ hFileOpen( sFileCalc )
+ if ( not hAllowMacroExecution() ) then
warnlog( "Missing Macro execution dialog. Please check the file/security settings" )
endif
printlog( "Open the BASIC organizer" )
- brc = hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
+ WaitSlot()
printlog( "Retreive the names of all nodes from the treelist" )
+ kontext "Makro"
hGetVisibleNodeNames( MakroAus , cNodeListA() )
printlog( "Verify that both documents are listed - one Writer, one Calc with identical names" )
@@ -97,10 +96,10 @@ testcase tBasicDocuments
endif
printlog( "Click Manage..." )
- verwalten.click()
+ hClickButton( verwalten )
printlog( "Get the nodes list from the object organizer tabs - first tab" )
- brc = hSelectBasicObjectOrganizerTab( 1 )
+ hSelectBasicObjectOrganizerTab( 1 )
ListAllDelete( cNodeListB() )
hGetVisibleNodeNames( ModulListe , cNodeListB() )
@@ -111,7 +110,7 @@ testcase tBasicDocuments
endif
printlog( "Switch to second tab" )
- brc = hSelectBasicObjectOrganizerTab( 2 )
+ hSelectBasicObjectOrganizerTab( 2 )
ListAllDelete( cNodeListB() )
hGetVisibleNodeNames( ModuleList , cNodeListB() )
if ( listcount( cNodeListB() ) <> 5 ) then
@@ -126,22 +125,22 @@ testcase tBasicDocuments
endif
printlog( "Third tab (should not list the document" )
- brc = hSelectBasicObjectOrganizerTab( 3 )
- brc = hTestLibraryListBox( cNodeListA() )
+ hSelectBasicObjectOrganizerTab( 3 )
+ hTestLibraryListBox( cNodeListA() )
printlog( CFN & "Closing dialogs..." )
- TabBibliotheken.cancel()
+ hCloseDialog( TabBibliotheken, "cancel" )
printlog( "Cleanup: Close macro organizer" )
Kontext "Makro"
- Makro.cancel()
+ hCloseDialog( Makro, "cancel" )
printlog( "Cleanup: Close all files" )
hFileCloseAll()
printlog( "Cleanup: Remove workfiles" )
- brc = hDeleteFile( sFileWriter )
- brc = hDeleteFile( sFileCalc )
+ hDeleteFile( sFileWriter )
+ hDeleteFile( sFileCalc )
printlog( "Rest macro security level" )
hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_DEFAULT )
@@ -153,17 +152,19 @@ endcase
function hTestLibraryListBox( cNodeList() ) as boolean
const CFN = "hTestLibraryListBox::"
+ const EXACT_MATCH = 1
dim iEntry as integer
dim cEntry as string
- dim brc as boolean : brc = true
dim irc as integer
+
+ hTestLibraryListBox() = true
if ( bibliothek.getItemCount() <> IDOCS ) then
warnlog( CFN & "Incorrect number of items in listbox" )
printlog( CFN & "Expected: " & bibliothek.getItemCount() )
printlog( CFN & "Found...: " & listcount( cNodeList() ) )
- brc = false
+ hTestLibraryListBox() = false
endif
for iEntry = 3 to IDOCS
@@ -171,11 +172,10 @@ function hTestLibraryListBox( cNodeList() ) as boolean
Bibliothek.select( iEntry )
cEntry = Bibliothek.getSelText()
- irc = hCompareSubStrings( cNodeList( iEntry ) , cEntry )
- if ( irc <> 1 ) then
+ if ( hCompareSubStrings( cNodeList( iEntry ) , cEntry ) <> EXACT_MATCH ) then
warnlog( CFN & "Comparision failed" )
printlog( CFN & "Expected: " & cNodeList( iEntry ) & "<>" & cEntry )
- brc = false
+ hTestLibraryListBox() = false
else
printlog( CFN & "Comparision succeeded:" & cEntry )
endif
diff --git a/testautomation/framework/optional/includes/basic_formcontrols.inc b/testautomation/framework/optional/includes/basic_formcontrols.inc
index 01af07357d52..f755d645b888 100644..100755
--- a/testautomation/framework/optional/includes/basic_formcontrols.inc
+++ b/testautomation/framework/optional/includes/basic_formcontrols.inc
@@ -31,18 +31,18 @@
'*
'\******************************************************************************
+private const ICONTROLCOUNT = 22
+
testcase tAllControlsOnDialog( cMajor as string )
printlog( "Insert all available controls into a BASIC dialog and verify that changed settings persist a save/load cycle" )
- qaerrorlog( "#i105685# - Test disabled" )
- goto endsub
+ 'qaerrorlog( "#i105685# - Test disabled" )
+ 'goto endsub
dim iApplication as Integer ' numeric expression for gApplication
dim cApplication as string ' Name of the current application
- dim lsControlNames( 30 ) as string ' list containing the names of the controls
-
' number of controls and the name of the current control
dim iCurrentControl as integer
dim sCurrentControl as string
@@ -50,44 +50,30 @@ testcase tAllControlsOnDialog( cMajor as string )
' the workfile and the filter (Tested for 569, 645, 680)
dim sFile as string
- ' errorstatus: if false, something went wrong and the test cancels
- ' trying to recover somehow
- dim bOpen as boolean
- dim brc as boolean
- dim irc as integer
-
const CMODULE = "tacod" ' abbreviation for tAllControlsOnDialog
+ const BUTTON_TIMEOUT = -1
+ const UPPER_BOUNDARY = 1 ' 1 = only writer, increase to add Calc, Impress, Draw...
- printlog( "Perform the test for one application only: WRITER" )
- for iApplication = 1 to 1
+ ' Currently set to test writer only. Increase upper boundary to add applications
+ ' Up to 4 should be useful
+ for iApplication = 1 to UPPER_BOUNDARY
- printlog( "Set document type" )
cApplication = hNumericDoctype( iApplication )
+ printlog( "Document type: " & cApplication )
- printlog( "Build the filename" )
- sFile = hGetWorkPath() & "basic" & hGetSuffix( cMajor )
- sFile = ConvertPath( sFile )
+ sFile = convertpath( hGetWorkPath() & "basic" & hGetSuffix( cMajor ) )
printlog( "Using file: " & sFile )
printlog( "Delete the file, if it exists" )
hDeleteFile( sFile )
printlog( "Open a second document" )
- printlog( "" )
- printlog( cApplication )
- brc = hCreateDocument()
- if ( not brc ) then
- warnlog( "Failed to create a new document, aborting" )
- goto endsub
- endif
+ hCreateDocument()
- printlog( "Create a new module for the new document" )
- printlog( "Create a new dialog in BasicIDE" )
- printlog( "Open the macro controls float" )
- bOpen = hInitFormControls( CMODULE )
- if ( not bOpen ) then
+ printlog( "Create a new module for the new document, new dialog, open macro controls" )
+ if ( not hInitFormControls( CMODULE ) ) then
printlog( "Aborting due to previous errors" )
- call hCloseDocument()
+ hDestroyDocument()
goto endsub
endif
@@ -95,192 +81,150 @@ testcase tAllControlsOnDialog( cMajor as string )
for iCurrentControl = 1 to ICONTROLCOUNT
sCurrentControl = hDrawControlOnDialog( iCurrentControl )
- listappend( lsControlNames() , sCurrentControl )
- hOpenPropertyBrowser()
- hPBSetControlName( sCurrentControl )
- hClosePropertyBrowser()
+ hUseAsyncSlot( "ContextProperties" )
+ kontext "ControlPropertiesTabControl"
+ if ( ControlPropertiesTabControl.exists( 1 ) ) then
+ hPBSetControlName( sCurrentControl )
+ hUseAsyncSlot( "ContextProperties" )
+ else
+ warnlog( "Property browser not open" )
+ endif
next iCurrentControl
-
Kontext "BASICIDE"
printlog( "close the BASIC-IDE" )
hCloseBasicIde()
-
printlog( "" )
printlog( "Test case 1: Verify that settings survive a close and reopen of the BASIC IDE" )
ToolsMacro_uno
kontext "Makro"
- irc = hSelectNodeByName( MakroAus , CMODULE )
- if ( irc = 0 ) then
+ if ( hSelectNodeByName( MakroAus , CMODULE ) ) then
+ printlog( "The node was found. Good." )
+ else
qaerrorlog( "Searching node by name failed. Using fallback" )
hSelectTheLastnode( MakroAus )
- else
- printlog( "The node was found. Good." )
endif
- brc = hIsMacroEditButtonEnabled()
- if ( not brc ) then
+ printlog( "Edit the module" )
+ if ( hClickButton( Bearbeiten ) = BUTTON_TIMEOUT ) then
warnlog( "Edit-Button is not enabled, the test cannot continue" )
kontext "Makro"
- Makro.cancel()
- brc = hDestroyDocument()
+ hCloseDialog( Makro, "cancel" )
+ hDestroyDocument()
goto endsub
endif
-
- printlog( "Click 'Edit' to edit the module" )
- printlog( "Edit the module" )
- Bearbeiten.Click()
- if ( WaitSlot <> WSFinished ) then
- warnlog( "Slot not finished after 1 second" )
- endif
kontext "BasicIDE"
printlog( "Find the dialog we created before" )
- ' try to find our dialog again by stepping through the tabbar
- bOpen = hFindFirstDialog()
- if ( not bOpen ) then
- warnlog( "Could access dialog, aborting test" )
+ if ( hFindFirstDialog() ) then
+ printlog( "First dialog found. Good." )
+ else
+ warnlog( "Could not access dialog, aborting test" )
hCloseBasicIde()
- brc = hDestroyDocument()
+ hDestroyDocument()
goto endsub
endif
- printlog( "Open the macro controls float" )
- ' if the dialog is open, open the macro controls toolbar as well,
- ' we need access to the "properties" button
- bOpen = hShowMacroControls()
- if ( not bOpen ) then
- warnlog( "Could not open macro controls, aborting" )
- hCloseBasicIde()
- brc = hDestroyDocument()
- goto endsub
- endif
-
printlog( "Select every control, open its properties and verify its name, close properties" )
for iCurrentControl = 1 to ICONTROLCOUNT
- if ( instr( gtSysName, "Solaris" ) > 0 ) then
- qaerrorlog( "Skipping frame control on Solaris" )
+ sCurrentControl = hGetControlName( iCurrentControl )
+ if ( hSelectControl( iCurrentControl ) ) then
+ kontext "ControlPropertiesTabControl"
+ if ( ControlPropertiesTabControl.exists( 5 ) ) then
+ wait( 300 )
+ hPBGetControlName( sCurrentControl )
+ hUseAsyncSlot( "ContextProperties" )
+ kontext "ControlPropertiesTabControl" : ControlPropertiesTabControl.notExists( 3 )
+ else
+ warnlog( "Property browser not open for " & sCurrentControl )
+ endif
else
- hSelectControl( iCurrentControl )
- hOpenPropertyBrowser()
- sCurrentControl = lsControlNames( iCurrentControl )
- hPBGetControlName( sCurrentControl )
- hClosePropertyBrowser()
+ warnlog( "Failed to select control: " & sCurrentControl )
endif
next iCurrentControl
-
- ' we need to delete the list-content otherwise we run into index-problems
- ListAllDelete( lsControlNames() )
- printlog( "Cleanup: Close the BASIC-IDE" )
- printlog( "Close the BASIC IDE" )
+ printlog( "Close the BASIC-IDE" )
hCloseBasicIde()
- if ( getDocumentCount <> 1 ) then
- warnlog( "Number of open documents is incorrect, expected one only" )
- endif
+ if ( getDocumentCount <> 1 ) then warnlog( "Number of open documents is incorrect, expected one only" )
- printlog "Save the document"
- printlog( "save the document" )
+ printlog( "Save the document" )
Call hFileSaveAsKill( sFile )
- printlog "Close it"
- printlog( "close the document" )
- brc = hDestroyDocument()
+ printlog( "Close the document" )
+ hDestroyDocument()
printlog( "" )
printlog( "Test case 2: Verify that all items keep their names after close and reload of the document" )
printlog( "Open the file again" )
- printlog( "Open the document" )
hFileOpen( sFile )
- printlog "Open tools/macro and select the last module for the current document"
- printlog( "open the basic-IDE of this document, open controls, activate 'Select-mode' and open the properties" )
+ printlog( "Open the basic-IDE from this document, open controls, activate 'Select-mode' and open the properties" )
ToolsMacro_uno
+
kontext "Makro"
- irc = hSelectNodeByName( MakroAus , CMODULE )
- if ( irc = 0 ) then
+ if ( hSelectNodeByName( MakroAus , CMODULE ) ) then
+ printlog( "The node was found. Good." )
+ else
qaerrorlog( "Searching node by name failed. Using fallback" )
hSelectTheLastnode( MakroAus )
- else
- printlog( "The node was found. Good." )
endif
- brc = hIsMacroEditButtonEnabled()
- if ( not brc ) then
+ printlog( "Edit the module" )
+ if ( hClickButton( Bearbeiten ) = BUTTON_TIMEOUT ) then
warnlog( "Edit-Button is not enabled, the test cannot continue" )
kontext "Makro"
- Makro.cancel()
- brc = hDestroyDocument()
+ hCloseDialog( Makro, "cancel" )
+ hDestroyDocument()
goto endsub
endif
-
- printlog( "Click 'Edit' to edit the module" )
- printlog( "Edit the module" )
- Bearbeiten.Click()
- if ( WaitSlot <> WSFinished ) then
- warnlog( "Slot not finished after 1 second" )
- endif
kontext "BasicIDE"
printlog( "Find the dialog we created before" )
- ' try to find our dialog again by stepping through the tabbar
- bOpen = hFindFirstDialog()
- if ( not bOpen ) then
- warnlog( "Could access dialog, aborting test" )
+ if ( hFindFirstDialog() ) then
+ printlog( "First dialog found. Good." )
+ else
+ warnlog( "Could not access dialog, aborting test" )
hCloseBasicIde()
- brc = hDestroyDocument()
+ hDestroyDocument()
goto endsub
endif
- printlog( "Open the macro controls float" )
- ' if the dialog is open, open the macro controls toolbar as well,
- ' we need access to the "properties" button
- bOpen = hShowMacroControls()
- if ( not bOpen ) then
- warnlog( "Could not open macro controls, aborting" )
- hCloseBasicIde()
- brc = hDestroyDocument()
- goto endsub
- endif
-
printlog( "Select every control, open its properties and verify its name, close properties" )
for iCurrentControl = 1 to ICONTROLCOUNT
- if ( instr( gtSysName, "Solaris" ) > 0 ) then
- qaerrorlog( "Skipping frame control on Solaris" )
+ sCurrentControl = hGetControlName( iCurrentControl )
+ if ( hSelectControl( iCurrentControl ) ) then
+ kontext "ControlPropertiesTabControl"
+ if ( ControlPropertiesTabControl.exists( 5 ) ) then
+ wait( 300 )
+ hPBGetControlName( sCurrentControl )
+ hUseAsyncSlot( "ContextProperties" )
+ kontext "ControlPropertiesTabControl" : ControlPropertiesTabControl.notExists( 3 )
+ else
+ warnlog( "Property browser not open for " & sCurrentControl )
+ endif
else
- hSelectControl( iCurrentControl )
- hOpenPropertyBrowser()
- sCurrentControl = lsControlNames( iCurrentControl )
- hPBGetControlName( sCurrentControl )
- hClosePropertyBrowser()
+ warnlog( "Failed to select control: " & sCurrentControl )
endif
next iCurrentControl
-
- ' we need to delete the list-content otherwise we run into index-problems
- ListAllDelete( lsControlNames() )
-
+
printlog( "Cleanup: Close the BASIC-IDE" )
- printlog( "Close the BASIC IDE" )
hCloseBasicIde()
printlog( "Cleanup: Close the document" )
- printlog( "Close the document" )
- brc = hDestroyDocument()
+ hDestroyDocument()
printlog( "Cleanup: Delete the file we created" )
hDeleteFile( sFile )
- printlog( "Repeat this for every application" )
-
next iApplication
endcase
diff --git a/testautomation/framework/optional/includes/basic_gridcontrol.inc b/testautomation/framework/optional/includes/basic_gridcontrol.inc
index b23e2318d657..7f914ba9dafc 100755
--- a/testautomation/framework/optional/includes/basic_gridcontrol.inc
+++ b/testautomation/framework/optional/includes/basic_gridcontrol.inc
@@ -32,26 +32,22 @@
'\******************************************************************************
testcase tGridcontrolLoad
- dim sLocation as string
- dim i,x,a as integer
- dim sTemp as string
- dim lFiles(200) as string
- dim bTemp as boolean
- dim iError, iOK as integer
+
+ const MACRO_NAME = "VclTestTool"
+ const MACRO_NOT_FOUND = 0
+ const FILE_NAME = "framework/optional/input/gridcontrol.odt"
+
+ dim iPos as integer
- sLocation = "framework/optional/include/basic_gridcontrol.inc::"
+ printlog( "Open the test document: " & FILE_NAME )
+ call hFileOpen( gTestToolPath & FILE_NAME )
- hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_LOW )
+ printlog( "Open the <Run Macro> dialog" )
+ ToolsMacrosRunMacro
- printlog "Open the test document"
- call hFileOpen(convertPath(gTestToolPath + "framework/optional/input/gridcontrol.odt"))
- printlog "Security dialog might come up"
- kontext "SecurityWarning"
- if SecurityWarning.exists(5) then
- printlog "Allow to run macros"
- SecurityWarning.ok
- endif
- call sleep 1
+ printlog( "Find the document, its library and the test macro, run the macro" )
+ Kontext "ScriptSelector"
+ if ( ScriptSelector.exists( 10 ) ) then
printlog "Start the macro, that performs the test"
Kontext "GridControlDialogStarter"
@@ -100,11 +96,9 @@ testcase tGridcontrolLoad
warnlog "Gridcontrol Dialog did not come up after pressing button"
endif
- printlog "clean up"
- printlog "Close the document, else an error about the navigator will be thrown"
- if getDocumentcount > 0 then
- call hCloseDocument()
- endif
+ printlog( "Test exit, cleanup" )
+ hFileCloseAll()
+
endcase
diff --git a/testautomation/framework/optional/includes/basic_ide.inc b/testautomation/framework/optional/includes/basic_ide.inc
index 799260201257..c8db670e8cc3 100644..100755
--- a/testautomation/framework/optional/includes/basic_ide.inc
+++ b/testautomation/framework/optional/includes/basic_ide.inc
@@ -33,116 +33,129 @@
testcase tBasic_IDE_Toolbar_Module
- qaerrorlog( "Replace this test asap, the approach is unusable" )
+ printlog( "BASIC toolbars for modules" )
+
+ const DIALOG_DELAY = 2
+ const RC_FAILURE = -1
+
+ dim cTargetFile as string
+ cTargetFile = convertpath( gOfficepath & "user\work\global_test.bas" )
- dim brc as boolean
dim cSourceFile as string
cSourceFile = gTesttoolpath & "framework\optional\input\resetregistration.txt"
cSourceFile = convertpath( cSourceFile )
-
-
-
printlog "open a new writer-doc"
gApplication = "WRITER"
hCreateDocument()
- brc = hOpenBasicOrganizerFromDoc()
- brc = hCreateModuleForDoc()
-
+ if ( hInitBasicIDE( "tBasic_IDE_Toolbar_Module" ) ) then
- kontext "macrobar"
- printlog "- compile"
- hClickToolbarButton( Compile )
-
- printlog "- Run Basic"
- hClickToolbarButton( BasicRun )
-
- printlog "- Step Procedure"
- hClickToolbarButton( ProcedureStep )
-
- printlog "- Stop Basic"
- hClickToolbarButton( BasicStop )
+ kontext "macrobar"
+ printlog "- compile"
+ hClickButton( Compile )
- printlog "- Single Step"
- hClickToolbarButton( SingleStep )
+ printlog "- Run Basic"
+ hClickButton( BasicRun )
- printlog "- Step Back"
- hClickToolbarButton( StepBack )
+ printlog "- Step Procedure"
+ hClickButton( ProcedureStep )
- printlog "- Breakpoint => activate"
- hClickToolbarButton( Breakpoint )
+ printlog "- Stop Basic"
+ hClickButton( BasicStop )
+ printlog "- Single Step"
+ hClickButton( SingleStep )
- printlog "- Breakpoint => deactivate"
- hClickToolbarButton( Breakpoint )
+ printlog "- Step Back"
+ hClickButton( StepBack )
- printlog "- Add Watch => deactivate"
- hClickToolbarButton( AddWatch )
+ printlog "- Breakpoint => activate"
+ hClickButton( Breakpoint )
- printlog "- Find Paranthese"
- kontext "macrobar"
- hClickToolbarButton( FindParanthese )
+ printlog "- Breakpoint => deactivate"
+ hClickButton( Breakpoint )
- try
- Controls.TearOff()
- warnlog "Controls are active in a module window => bug!"
- catch
- printlog( "Controls are not active->OK" )
- endcatch
- if ( WaitSlot <> WSFinished ) then
- warnlog( "Slot not finished within 1 second" )
- endif
+ printlog "- Add Watch => deactivate"
+ hClickButton( AddWatch )
- printlog( "- Insert Source Text (" & cSourceFile & ")" )
+ printlog "- Find Paranthese"
+ kontext "macrobar"
+ hClickButton( FindParanthese )
- InsertSourceText.Click()
- kontext "oeffnendlg"
- if ( OeffnenDlg.exists( 1 ) ) then
- Dateiname.SetText( cSourceFile )
- Oeffnen.click()
- else
- warnlog( "File Open dialog did not open" )
- endif
-
- ' possible 'could not read from file' error-message -> this is a bug
- kontext "Active"
- if ( Active.exists( 1 ) ) then
- warnlog( "Unexpected active: " & active.gettext() )
- active.ok()
- endif
+ try
+ Controls.TearOff()
+ warnlog "Controls are active in a module window => bug!"
+ catch
+ printlog( "Controls are not active->OK" )
+ endcatch
+ if ( WaitSlot <> WSFinished ) then
+ warnlog( "Slot not finished within 1 second" )
+ endif
- kontext "macrobar"
- printlog "- Save Source Test "
+ kontext "MacroBar"
+ printlog( "- Insert Source Text (" & cSourceFile & ")" )
+ if ( hClickButton( InsertSourceText ) <> RC_FAILURE ) then
+
+ kontext "oeffnendlg"
+ if ( OeffnenDlg.exists( DIALOG_DELAY ) ) then
+ Dateiname.SetText( cSourceFile )
+ Oeffnen.click()
+ WaitSlot( 5000 )
+ else
+ warnlog( "File Open dialog did not open" )
+ endif
+
+ ' possible 'could not read from file' error-message -> this is a bug
+ kontext "Active"
+ if ( Active.exists( DIALOG_DELAY ) ) then
+ warnlog( "Unexpected active: " & active.gettext() )
+ active.ok()
+ endif
+ else
+ warnlog( "<File Open> dialog is not open, <Insert Source Text> button failed" )
+ endif
- hClickToolbarButton( SaveSourceTest )
+ kontext "macrobar"
+ printlog "- Save Source Text "
+ if ( hClickButton( SaveSourceText ) <> RC_FAILURE ) then
+
+ kontext "speicherndlg"
+ if ( SpeichernDlg.exists( DIALOG_DELAY ) ) then
+ Dateiname.SetText( cTargetFile )
+ Speichern.click()
+ else
+ warnlog( "File Save dialog is missing" )
+ endif
+
+ kontext "active"
+ if ( Active.Exists( DIALOG_DELAY ) ) then
+ printlog( "Closing Messagebox with <Yes>")
+ Active.Yes()
+ endif
+ else
+ warnlog( "<File Save> dialog did not open, slot <SaveSourceText> did not work" )
+ endif
- kontext "speicherndlg"
- if ( SpeichernDlg.exists( 1 ) ) then
- Dateiname.SetText ConvertPath (gOfficepath + "user\work\global_test.bas")
- Speichern.click()
+ hFileCloseAll()
else
- warnlog( "File Save dialog is missing" )
- endif
-
- kontext "active"
- if ( Active.Exists( 1 ) ) then
- printlog( "Closing Messagebox with <Yes>")
- Active.Yes()
+ warnlog( "Unable to init BASIC IDE" )
endif
- hDestroyDocument() ' for Basic-IDE
- hDestroyDocument() ' the new writer-doc
-
endcase
'*******************************************************************************
testcase tBasic_IDE_Toolbar_Dialogs
- qaerrorlog( "Replace this test asap, the approach is unusable" )
+ printlog( "BASIC toolbar for Dialogs" )
+
+ const DIALOG_DELAY = 2
+
+ const TABBAR_MENU_NEW = 1
+ const TABBAR_MENU_NEW_DIALOG = 2
dim bIsOpen as boolean
dim brc as boolean
@@ -159,177 +172,140 @@ testcase tBasic_IDE_Toolbar_Dialogs
gApplication = "WRITER"
hCreateDocument()
- printlog "create a new module "
- brc = hOpenBasicOrganizerFromDoc()
- brc = hCreateModuleForDoc()
+ if ( hInitBasicIDE( "tBasic_IDE_Toolbar_Dialogs" ) ) then
- kontext "basicide"
- Tabbar.OpenContextMenu
- hMenuSelectNr ( 1 )
- hMenuSelectNr ( 2 )
- if ( DialogWindow.Exists ( 2 ) ) then
- printlog( "Dialog Editor window is open. Good." )
- else
- warnlog "No dialog window is shown!"
- end if
-
- try
- kontext "MacroBar"
- Compile.Click()
- warnlog( """Compile"" is enabled" )
- catch
- printlog( """Compile"" is disabled" )
- endcatch
-
- try
- kontext "MacroBar"
- BasicRun.Click()
- warnlog( """Run Basic"" is enabled" )
- catch
- printlog( """Run Basic"" is disabled" )
- endcatch
-
- printlog "- Step Procedure (disabled)"
- try
- kontext "MacroBar"
- ProcedureStep.Click()
- warnlog( """Step Procedure"" is enabled" )
- catch
- printlog( """Step Procedure"" is disabled" )
- endcatch
+ kontext "basicide"
+ Tabbar.OpenContextMenu
+ hMenuSelectNr ( TABBAR_MENU_NEW )
+ hMenuSelectNr ( TABBAR_MENU_NEW_DIALOG )
- try
- kontext "MacroBar"
- BasicStop.Click()
- warnlog( """Stop Basic"" is enabled" )
- catch
- printlog( """Stop Basic"" is disabled" )
- endcatch
-
- try
- kontext "MacroBar"
- SingleStep.Click()
- warnlog( """Single Step"" is enabled" )
- catch
- printlog( """Single Step"" is enabled" )
- endcatch
-
- try
- kontext "MacroBar"
- StepBack.Click()
- warnlog( """Single Step Back"" is enabled" )
- catch
- printlog( """Single Step Back"" is enabled" )
- endcatch
-
- try
- kontext "MacroBar"
- Breakpoint.Click()
- warnlog( """Breakpoint"" is enabled" )
- catch
- printlog( """Breakpoint"" is disabled" )
- endcatch
-
-
- try
- kontext "MacroBar"
- AddWatch.Click()
- warnlog( """Add Watch"" is enabled" )
- catch
- printlog( """Add Watch"" is disabled" )
- endcatch
+ if ( DialogWindow.Exists ( DIALOG_DELAY ) ) then
+ printlog( "Dialog Editor window is open. Good." )
+ else
+ warnlog "No dialog window is shown!"
+ end if
+ try
+ kontext "MacroBar"
+ Compile.Click()
+ warnlog( """Compile"" is enabled" )
+ catch
+ printlog( """Compile"" is disabled" )
+ endcatch
- try
- kontext "MacroBar"
- FindParanthese.Click()
- warnlog( """Find Paranthese"" is enabled" )
- catch
- printlog( """Find Paranthese"" is disabled" )
- endcatch
+ try
+ kontext "MacroBar"
+ BasicRun.Click()
+ warnlog( """Run Basic"" is enabled" )
+ catch
+ printlog( """Run Basic"" is disabled" )
+ endcatch
+ printlog "- Step Procedure (disabled)"
+ try
+ kontext "MacroBar"
+ ProcedureStep.Click()
+ warnlog( """Step Procedure"" is enabled" )
+ catch
+ printlog( """Step Procedure"" is disabled" )
+ endcatch
- try
- kontext "macrobar"
- InsertSourceText.Click()
- warnlog( """Insert Source Text"" is enabled" )
+ try
+ kontext "MacroBar"
+ BasicStop.Click()
+ warnlog( """Stop Basic"" is enabled" )
+ catch
+ printlog( """Stop Basic"" is disabled" )
+ endcatch
- kontext "oeffnendlg"
- if ( OeffnenDlg.exists( 2 ) ) then
- Dateiname.SetText( sBasFile1 )
- Oeffnen.Click()
- else
- warnlog( "File Open dialog missing" )
- endif
- catch
- printlog( """Insert Source Text"" is disabled" )
- endcatch
+ try
+ kontext "MacroBar"
+ SingleStep.Click()
+ warnlog( """Single Step"" is enabled" )
+ catch
+ printlog( """Single Step"" is enabled" )
+ endcatch
-
- printlog "- Save Source Test (disabled)"
+ try
+ kontext "MacroBar"
+ StepBack.Click()
+ warnlog( """Single Step Back"" is enabled" )
+ catch
+ printlog( """Single Step Back"" is enabled" )
+ endcatch
- try
- kontext "macrobar"
- SaveSourceTest.Click()
- warnlog( """Save Source Text"" is enabled" )
+ try
+ kontext "MacroBar"
+ Breakpoint.Click()
+ warnlog( """Breakpoint"" is enabled" )
+ catch
+ printlog( """Breakpoint"" is disabled" )
+ endcatch
- kontext "speicherndlg"
- if ( SpeichernDlg.exists( 2 ) ) then
- Dateiname.SetText( sBasFile2 )
- Speichern.Click()
- else
- warnlog( "File Save dialog is missing" )
- endif
- kontext "active"
- if ( Active.Exists( 1 ) ) then
- Active.Yes()
- endif
- catch
- printlog( """Save Source Text"" is disabled" )
- endcatch
+ try
+ kontext "MacroBar"
+ AddWatch.Click()
+ warnlog( """Add Watch"" is enabled" )
+ catch
+ printlog( """Add Watch"" is disabled" )
+ endcatch
-
- bIsOpen = hShowMacroControls()
- if ( bIsOpen ) then
- ToolsCollectionBar.Close()
- end if
- Call hDestroyDocument() ' for Basic-IDE
- Call hDestroyDocument() ' the new writer-doc
+ try
+ kontext "MacroBar"
+ FindParanthese.Click()
+ warnlog( """Find Paranthese"" is enabled" )
+ catch
+ printlog( """Find Paranthese"" is disabled" )
+ endcatch
-endcase
-'******************************************************************************'
+ try
+ kontext "macrobar"
+ InsertSourceText.Click()
+ warnlog( """Insert Source Text"" is enabled" )
+
+ kontext "oeffnendlg"
+ if ( OeffnenDlg.exists( DIALOG_DELAY ) ) then
+ Dateiname.SetText( sBasFile1 )
+ Oeffnen.Click()
+ else
+ warnlog( "File Open dialog missing" )
+ endif
+ catch
+ printlog( """Insert Source Text"" is disabled" )
+ endcatch
-function hClickToolbarButton( oButton as object ) as boolean
- const CFN = "hClickToolbarButton(): "
+ printlog "- Save Source Test (disabled)"
- dim iTry as integer
- dim brc as boolean : brc = false
-
- printlog( CFN & "Clicking button on toolbar: " & oButton.name() )
- for iTry = 1 to 5
-
try
- oButton.click()
- brc = true
- exit for
+ kontext "macrobar"
+ SaveSourceText.Click()
+ warnlog( """Save Source Text"" is enabled" )
+
+ kontext "speicherndlg"
+ if ( SpeichernDlg.exists( DIALOG_DELAY ) ) then
+ Dateiname.SetText( sBasFile2 )
+ Speichern.Click()
+ else
+ warnlog( "File Save dialog is missing" )
+ endif
+
+ kontext "active"
+ if ( Active.Exists( DIALOG_DELAY ) ) then
+ Active.Yes()
+ endif
catch
- printlog( CFN & "Retrying..." )
+ printlog( """Save Source Text"" is disabled" )
endcatch
-
- if ( iTry = 5 ) then
- exit for
- endif
-
- wait( 500 )
-
- next iTry
-
- if ( WaitSlot( 2000 ) <> WSFinished ) then
- warnlog( CFN & "Slot not finished within 1 second" )
+
+ hCloseBasicIDE()
+ hDestroyDocument()
+ else
+ warnlog( "Unable to open BASIC IDE" )
endif
-end function
+endcase
+
diff --git a/testautomation/framework/optional/includes/basic_library_export.inc b/testautomation/framework/optional/includes/basic_library_export.inc
index 18bb4af4441c..6f5acacbdb24 100644..100755
--- a/testautomation/framework/optional/includes/basic_library_export.inc
+++ b/testautomation/framework/optional/includes/basic_library_export.inc
@@ -38,7 +38,9 @@ testcase tBasicLibraryExport
' Assumption: All actions take place in the user/work directory
' macro taken from framework/tools/input/macros.txt::tBasicLibraryExport
- ' For constants (UPPERCASE) see .BAS-file
+ ' For test specific global constants (UPPERCASE) see .BAS-file
+
+ const LIBRARIES_TAB = 3
dim cDocumentName as string
dim cLibraryName as string
@@ -124,7 +126,7 @@ testcase tBasicLibraryExport
Verwalten.click()
printlog( "Go to the libraries-tab" )
- hSelectBasicObjectOrganizerTab( 3 )
+ hSelectBasicObjectOrganizerTab( LIBRARIES_TAB )
kontext "TabBibliotheken"
printlog( "Select the document at pos. " & DOCUMENT_POSITION )
diff --git a/testautomation/framework/optional/includes/basic_library_import.inc b/testautomation/framework/optional/includes/basic_library_import.inc
index ec4cc8fa3b53..9d5dae88ff40 100644..100755
--- a/testautomation/framework/optional/includes/basic_library_import.inc
+++ b/testautomation/framework/optional/includes/basic_library_import.inc
@@ -35,21 +35,29 @@ testcase tBasicLibraryImport
printlog( "Import a BASIC library" )
+ const MY_MACROS = 1
+ const LIBRARIES_TAB = 3
+ const STANDARD_LIBRARY = 1
+
+ const XLB_DIALOG_FILE = "dialog.xlb"
+
dim cMsg as string
dim iCurrentLib as integer
+ dim cPath as string : cPath = hGetWorkPath() & LIBRARY_NAME
+
ToolsMacro_uno
kontext "Makro"
- MakroAus.Select( 1 )
+ MakroAus.Select( MY_MACROS )
Verwalten.click()
- hSelectBasicObjectOrganizerTab( 3 )
+ hSelectBasicObjectOrganizerTab( LIBRARIES_TAB )
printlog( "Select My macros" )
kontext "TabBibliotheken"
- Bibliothek.select( 1 )
+ Bibliothek.select( STANDARD_LIBRARY )
printlog( "Click to add a library" )
Hinzufuegen.click()
@@ -62,20 +70,18 @@ testcase tBasicLibraryImport
OeffnenDlg.typeKeys( "<RETURN>" )
printlog( "Enter &quot;dialog.xlb&quot;" )
- DateiName.setText( "dialog.xlb" )
+ DateiName.setText( XLB_DIALOG_FILE )
- printlog( "Open dialog.xlb" )
+ printlog( "Open " & XLB_DIALOG_FILE )
Oeffnen.click()
kontext "active"
if ( active.exists( 1 ) ) then
if ( active.getRT() <> 373 ) then
- cMSG = Active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- warnlog( "Autocompletion failed: " & cMsg )
+ warnlog( "Autocompletion failed: " & Active.getText() )
Active.ok()
Kontext "OeffnenDlg"
- DateiName.setText( "dialog.xlb" )
+ DateiName.setText( XLB_DIALOG_FILE )
Oeffnen.click()
endif
endif
@@ -114,10 +120,10 @@ testcase tBasicLibraryImport
hDestroyDocument()
- hDeleteFile( hGetWorkPath() & LIBRARY_NAME & gPathSigne & "dialog.xlb" )
- hDeleteFile( hGetWorkPath() & LIBRARY_NAME & gPathSigne & "Module1.xba" )
- hDeleteFile( hGetWorkPath() & LIBRARY_NAME & gPathSigne & "script.xlb" )
- rmdir( hGetWorkPath() & LIBRARY_NAME ) : printlog( "Remove directory" )
+ hDeleteFile( cPath & GetPathSeparator & XLB_DIALOG_FILE )
+ hDeleteFile( cPath & GetPathSeparator & "Module1.xba" )
+ hDeleteFile( cPath & GetPathSeparator & "script.xlb" )
+ rmdir( cPath ) : printlog( "Remove directory" )
endcase
diff --git a/testautomation/framework/optional/includes/basic_macros.inc b/testautomation/framework/optional/includes/basic_macros.inc
index 0d5e2a451d60..17e1b83d5e18 100644..100755
--- a/testautomation/framework/optional/includes/basic_macros.inc
+++ b/testautomation/framework/optional/includes/basic_macros.inc
@@ -34,51 +34,42 @@
testcase tMakro_In_All_Apps
-
- dim brc as boolean
- dim cApp as string
+ printlog( "Attach a macro to all application types" )
+
dim iApp as Integer
- dim bBug as Boolean
- dim cMsg as string
- bBug = FALSE
const CMACRO = "AppMakro"
-
+ const DIALOG_TIMEOUT = 2
for iApp = 1 to 7
- cApp = hNumericDoctype( iApp )
- printlog( cApp )
+ printlog( hNumericDoctype( iApp ) )
printlog( "Open a new document" )
- brc = hCreateDocument()
+ hCreateDocument()
- brc = hInitBasicIde( CMACRO )
- if ( not brc ) then
+ if ( hInitBasicIde( CMACRO ) ) then
+ printlog "Close the BASIC-IDE"
+ hCloseBasicIde()
+
+ printlog( "Close the navigator (Master-doc)" )
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
+
+ printlog( "Close the document" )
+ hUseAsyncSlot( "FileClose" )
+
+ printlog( "Close the messagebox (document changed)" )
+ kontext "messagebox"
+ if ( MessageBox.Exists( DIALOG_TIMEOUT ) ) then
+ printlog( "MessageBox: " & MessageBox.getText() )
+ hCloseDialog( Messagebox, "no" )
+ else
+ warnlog( "No warning for changed document" )
+ end if
+ else
warnlog( "Could not open the BASIC Macro Organizer, aborting" )
- call hDestroyDocument()
- goto endsub
endif
-
- printlog "Close the BASIC-IDE"
- brc = hCloseBasicIde()
-
- printlog( "Close the navigator (Master-doc)" )
- brc = hCloseNavigator()
-
- printlog( "Close the document" )
- FileClose
-
- printlog( "Close the messagebox (document changed)" )
- kontext "messagebox"
- if ( MessageBox.Exists( 1 ) ) then
- cMsg = MessageBox.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- printlog( "MessageBox: " & cMsg )
- MessageBox.No()
- else
- warnlog( "No warning for changed document" )
- end if
next iApp
@@ -88,32 +79,30 @@ endcase
testcase tMakro_Dialog
- if ( gBuild < 9305 ) then
- warnlog( "#i87457# - Application macros assigned to userlayer" )
- goto endsub
- endif
+ printlog( "Update test for the BASIC organizer - libraries, modules and dialogs" )
+
+ const CFN = "tMakro_Dialog::"
+ const CMACRO = "MacroDlg"
+ const RC_TIMEOUT = -1
+ const DIALOG_TIMEOUT = 2
+ const TAB_MODULES = 1
+ const TAB_DIALOGS = 2
+ const TAB_LIBRARIES = 3
+ const REFERENCE_LIBRARY = "AppLibrary1"
-
- dim brc as boolean
- dim cMsg as string
-
- dim iPos as integer
dim iLibraryItemCount as integer
-
dim iCurrentLibrary as Integer
dim XLBFILE as String
XLBFILE = gTesttoolPath & "framework\optional\input\AppLibrary1\script.xlb"
- const CFN = "tMakro_Dialog::"
- const CMACRO = "MacroDlg"
-
+ XLBFILE = convertpath( XLBFILE )
gApplication = "WRITER"
+
printlog( "Open a new document" )
- brc = hCreateDocument()
+ hCreateDocument()
printlog( "Create a new library, a new module, open Basic-Ide" )
- brc = hInitBasicIde( CMACRO )
- if ( not brc ) then
+ if ( not hInitBasicIde( CMACRO ) ) then
warnlog( CFN & "Could not open BASIC-IDE, aborting" )
goto endsub
endif
@@ -123,284 +112,268 @@ testcase tMakro_Dialog
hCloseBasicIde()
printlog( "Open the Basic Macro Organizer" )
- brc = hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
- printlog( "Select the last Module for the current document" )
- iPos = hSelectTheLastNode( MakroAus )
-
- printlog( "Click Organize..." )
- Verwalten.Click()
-
- printlog( "Select Modules-tab" )
- brc = hSelectBasicObjectOrganizerTab( 1 )
+ kontext "Makro"
+ if ( Makro.exists( DIALOG_TIMEOUT ) ) then
-
- printlog( "Press 'new module'" )
- kontext "tabmodule"
- NeuesModul.Click()
+ printlog( "Select the last Module for the current document" )
+ hSelectTheLastNode( MakroAus )
- kontext "neuesmodul"
- printlog( "Cancel the dialog" )
- NeuesModul.Cancel()
+ printlog( "Click Organize..." )
+ Verwalten.Click()
- brc = hSelectBasicObjectOrganizerTab( 2 )
+ printlog( "Select Modules-tab" )
+ hSelectBasicObjectOrganizerTab( TAB_MODULES )
- kontext "tabdialogs"
- printlog( "Press 'new dialog'" )
- NewDialog.Click()
-
- printlog( "Cancel the dialog" )
- kontext "neuerdialog"
- NeuerDialog.Cancel()
+ printlog( "Press 'new module'" )
+ kontext "tabmodule"
+ NeuesModul.Click()
- kontext
- printlog( "Select the libraries Tab" )
- brc = hSelectBasicObjectOrganizerTab( 3 )
+ kontext "neuesmodul"
+ printlog( "Cancel the dialog" )
+ NeuesModul.Cancel()
-
- printlog( "Press 'New' on the libraries tab" )
- kontext "tabbibliotheken"
- Neu.Click()
-
- kontext "neuebibliothek"
- printlog( "Close the dialog with 'OK'" )
- Call DialogTest( NeueBibliothek )
- NeueBibliothek.OK()
-
- printlog( "Delete 'Library1'" )
- kontext "tabbibliotheken"
- Loeschen.Click()
-
- printlog( "Close the warning" )
- kontext "active"
- if ( Active.Exists() ) then
- cMsg = active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- printlog( "MessageBox: " & cMsg )
- Active.Yes()
- else
- warnlog( "Deletion warning is missing" )
- endif
-
- printlog( "Check the number of libraries in list" )
- kontext "tabbibliotheken"
- iLibraryItemCount = Bibliotheksliste.getItemCount()
- if ( iLibraryItemCount <> 1 ) then
- if ( iLibraryItemCount = 11 ) then
- warnlog( "#i87457# Macros moved from 'OpenOffice.org Macros' to 'My Macros'" )
- else
- warnlog( "Incorrect item count. Should be 1, is: " & iLibraryItemCount )
+ hSelectBasicObjectOrganizerTab( TAB_DIALOGS )
+
+ kontext "tabdialogs"
+ printlog( "Press 'new dialog'" )
+ NewDialog.Click()
+
+ printlog( "Cancel the dialog" )
+ kontext "neuerdialog"
+ NeuerDialog.Cancel()
+
+ kontext
+ printlog( "Select the libraries Tab" )
+ hSelectBasicObjectOrganizerTab( TAB_LIBRARIES )
+
+
+ printlog( "Press 'New' on the libraries tab" )
+ kontext "tabbibliotheken"
+ Neu.Click()
+
+ kontext "neuebibliothek"
+ if ( NeueBibliothek.exists( DIALOG_TIMEOUT ) ) then
+ printlog( "Close the dialog with 'OK'" )
+ Call DialogTest( NeueBibliothek )
+ hCloseDialog( NeueBibliothek, "ok" )
endif
- endif
- printlog( "Append a xlb-file" )
- kontext "tabbibliotheken"
- Hinzufuegen.Click()
+ printlog( "Delete 'Library1'" )
+ kontext "tabbibliotheken"
+ Loeschen.Click()
- printlog( "Select 'AppLibrary1/script.xlb' from the files list"
- kontext "oeffnendlg"
- Dateiname.SetText( ConvertPath ( XLBFILE ) )
- Oeffnen.Click()
-
- ' If the .xlb file cannot be found the test cannot continue. Warn and cleanup.
- kontext "Active"
- if ( Active.exists( 1 ) ) then
-
- try
- Active.getButtonCount()
-
- warnlog( "Script does not exist warning displayed. Aborting test" )
- printlog( Active.getText() )
- active.ok()
-
- kontext "OeffnenDlg"
- if ( OeffnenDlg.exists( 1 ) ) then
- printlog( "Closing File Open dialog" )
- OeffnenDlg.cancel()
- endif
-
- kontext "tabbibliotheken"
- if ( TabBibliotheken.exists( 1 ) ) then
- printlog( "Closing Libaries tab" )
- TabBibliotheken.close()
+ printlog( "Close the warning" )
+ kontext "active"
+ if ( Active.Exists( DIALOG_TIMEOUT ) ) then
+ printlog( "MessageBox: " & active.getText() )
+ Active.Yes()
+ else
+ warnlog( "Deletion warning is missing" )
+ endif
+
+ printlog( "Check the number of libraries in list" )
+ kontext "tabbibliotheken"
+ iLibraryItemCount = Bibliotheksliste.getItemCount()
+ if ( iLibraryItemCount <> 1 ) then
+ if ( iLibraryItemCount = 11 ) then
+ warnlog( "#i87457# Macros moved from 'OpenOffice.org Macros' to 'My Macros'" )
+ else
+ warnlog( "Incorrect item count. Should be 1, is: " & iLibraryItemCount )
endif
-
- kontext "Makro"
- if ( Makro.exists( 1 ) ) then
- printlog( "Closing Macro organizer" )
- Makro.close()
+ endif
+
+ printlog( "Append a xlb-file" )
+ kontext "tabbibliotheken"
+ Hinzufuegen.Click()
+
+ printlog( "Select 'AppLibrary1/script.xlb' from the files list"
+ kontext "oeffnendlg"
+ Dateiname.SetText( XLBFILE )
+ Oeffnen.Click()
+
+ kontext "AppendLibraries"
+ if ( AppendLibraries.exists( DIALOG_TIMEOUT ) ) then
+ printlog( "<Append libraries> dialog is open, good" )
+ else
+
+ ' If the .xlb file cannot be found the test cannot continue. Warn and cleanup.
+ kontext "Active"
+ if ( Active.exists() ) then
+
+ warnlog( "Unexpected messagebox, the script appears to be missing" )
+ printlog( Active.getText() )
+
+ kontext "Active"
+ hCloseDialog( Active, "ok" )
+
+ kontext "OeffnenDlg"
+ hCloseDialog( OeffnenDlg, "cancel,optional" )
+
+ kontext "TabBibliotheken"
+ hCloseDialog( TabBibliotheken, "close,optional" )
+
+ kontext "Makro"
+ hCloseDialog( Makro, "close,optional" )
+
+ printlog( "Exiting test" )
+ goto endsub
+
endif
-
- printlog( "Exiting test" )
- goto endsub
- catch
- printlog( "Script found and loaded. Good." )
- endcatch
-
- endif
+ endif
- printlog( "Ensure 'Insert as Reference' is unchecked" )
- kontext "appendlibraries"
- InsertAsReference.UnCheck()
-
- printlog( "Check 'Replace existing library'" )
- ReplaceExistingLibraries.Check()
-
- printlog( "Press 'OK' to append the library" )
- kontext "appendlibraries"
- try
- AppendLibraries.OK()
- catch
- warnlog( "#i85254# Appending libraries leads to crash" )
- endcatch
-
- printlog( "Check the number of libraries in list (should be two)" )
- kontext "tabbibliotheken"
- iLibraryItemCount = Bibliotheksliste.getItemCount()
- if ( iLibraryItemCount <> 2 ) then
- qaerrorlog( "#i87457# Two entries in list expected, found " & iLibraryItemCount )
- endif
+ printlog( "Ensure 'Insert as Reference' is unchecked" )
+ kontext "appendlibraries"
+ InsertAsReference.UnCheck()
+
+ printlog( "Check 'Replace existing library'" )
+ ReplaceExistingLibraries.Check()
+
+ printlog( "Press 'OK' to append the library" )
+ kontext "appendlibraries"
+
+ hCloseDialog( AppendLibraries, "ok" )
- printlog( "Select the first item" )
- Bibliotheksliste.TypeKeys( "<HOME>" )
- for iCurrentLibrary = 1 to iLibraryItemCount
- if ( Bibliotheksliste.getSelText() = "AppLibrary1" ) then
- printlog( "Found AppLibrary1" )
- exit for
+ printlog( "Check the number of libraries in list (should be two)" )
+ kontext "tabbibliotheken"
+ iLibraryItemCount = Bibliotheksliste.getItemCount()
+ if ( iLibraryItemCount <> 2 ) then
+ qaerrorlog( "#i87457# Two entries in list expected, found " & iLibraryItemCount )
endif
- printlog( "This was not AppLibrary1, trying again" )
- Bibliotheksliste.Typekeys( "<DOWN>" )
- next iCurrentLibrary
-
- printlog( "Set a password for AppLibrary1" )
- kontext "tabbibliotheken"
- if ( Passwort.IsEnabled() ) then
- Passwort.Click()
- kontext "passwddlg"
- PasswdDLG.Cancel()
- else
- warnlog( "Password is disabled for 'AppLibrary1'" )
- endif
- printlog( "Delete 'AppLibrary1'" )
- kontext "tabbibliotheken"
- Loeschen.Click()
-
- printlog( "Close the warning with YES" )
- kontext "active"
- if ( Active.Exists() ) then
- cMsg = active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- printlog( "MessageBox: " & cMsg )
- Active.Yes()
- else
- warnlog( "Expected confirmation dialog for delete" )
- endif
-
- kontext "tabbibliotheken"
- printlog( "Press 'edit' on 'Libraries'-tab" )
- Bearbeiten.Click()
+ printlog( "Select the first item" )
+ Bibliotheksliste.TypeKeys( "<HOME>" )
+ for iCurrentLibrary = 1 to iLibraryItemCount
+ if ( Bibliotheksliste.getSelText() = REFERENCE_LIBRARY ) then
+ printlog( "Found " & REFERENCE_LIBRARY )
+ exit for
+ endif
+ printlog( "This was not " & REFERENCE_LIBRARY & ", trying again" )
+ Bibliotheksliste.Typekeys( "<DOWN>" )
+ next iCurrentLibrary
+
+ printlog( "Set a password for " & REFERENCE_LIBRARY )
+ kontext "tabbibliotheken"
+ if ( hClickButton( Passwort ) <> RC_TIMEOUT ) then
+ kontext "passwddlg"
+ hCloseDialog( PasswdDLG, "cancel" )
+ else
+ warnlog( "Password is disabled for " & REFERENCE_LIBRARY )
+ endif
- kontext "BasicIDE"
- if ( BasicIDE.Exists( 5 ) ) then
-
- hInsertMacro( 3 )
-
- printlog( "Close the basic-document" )
- brc = hCloseBasicIde()
+ printlog( "Delete " & REFERENCE_LIBRARY )
+ kontext "tabbibliotheken"
+ Loeschen.Click()
+ printlog( "Close the warning with YES" )
kontext "active"
- if ( Active.Exists ( 2 ) ) then
- cMsg = active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- warnlog( "Unexpected MessageBox: " & cMsg )
- Active.NO()
+ if ( Active.Exists() ) then
+ printlog( "MessageBox: " & active.getText() )
+ Active.Yes()
+ else
+ warnlog( "Expected confirmation dialog for delete" )
endif
- else
- warnlog("#i38978# The Macro-Document is not open, aborting test")
- call hDestroyDocument()
- goto endsub
- endif
+ kontext "tabbibliotheken"
+ printlog( "Press 'edit' on 'Libraries'-tab" )
+ Bearbeiten.Click()
- printlog( "Open the BASIC Macro Organizer" )
- brc = hOpenBasicOrganizerFromDoc()
-
- printlog( "Select the last macro from the list" )
- kontext "makro"
- iPos = hSelectTheLastNode( MakroAus )
-
- try
- printlog( "Assign the macro, Tools/customize dialog should open" )
- Zuordnen.Click ()
- catch
- warnlog( "#i106853# Assign-Button is disabled or macro is missing" )
- endcatch
-
- printlog( "Activate all tapages and cancel the Tools/Customize dialog" )
-
- brc = hToolsCustomizeSelectTab( "menu" )
- brc = hToolsCustomizeSelectTab( "keyboard"
- if ( not brc ) then
- qaerrorlog( "#i61765# Keyboard tab missing when called via Tools/Macros->Assign" )
- endif
- brc = hToolsCustomizeSelectTab( "events" )
- brc = hToolsCustomizeSelectTab( "toolbars" )
+ kontext "BasicIDE"
+ if ( BasicIDE.Exists( DIALOG_TIMEOUT ) ) then
- printlog( "Cancel Tools/Customize dialog -> Macro Organizer should be open" )
- brc = hToolsCustomizeClose( 2 )
-
-
- printlog "Click to run macro"
- kontext "makro"
- try
- Ausfuehren.Click()
- catch
- warnlog( "Unable to run macro" )
+ hInsertMacro( 3 )
+
+ printlog( "Close the basic-document" )
+ hCloseBasicIde()
+
+ kontext "active"
+ if ( Active.Exists ( DIALOG_TIMEOUT ) ) then
+ warnlog( "Unexpected MessageBox: " & active.getText() )
+ Active.NO()
+ endif
+
+ else
+ warnlog("#i38978# The Macro-Document is not open, aborting test")
+ call hDestroyDocument()
+ goto endsub
+ endif
+
+ printlog( "Open the BASIC Macro Organizer" )
+ ToolsMacro_uno
+
+ printlog( "Select the last macro from the list" )
+ kontext "makro"
+ if ( Makro.exists( DIALOG_TIMEOUT ) ) then
+ hSelectTheLastNode( MakroAus )
+
+ printlog( "Assign the macro, Tools/customize dialog should open" )
+ if ( hClickButton( Zuordnen ) = RC_TIMEOUT ) then
+ warnlog( "#i106853# Assign-Button is disabled or macro is missing" )
+ endif
+
+ printlog( "Activate all tapages and cancel the Tools/Customize dialog" )
+ if ( not hToolsCustomizeSelectTab( "keyboard" ) ) then
+ qaerrorlog( "#i61765# Keyboard tab missing when called via Tools/Macros->Assign" )
+ endif
+ hToolsCustomizeSelectTab( "events" )
+ hToolsCustomizeSelectTab( "toolbars" )
+
+ printlog( "Cancel Tools/Customize dialog -> Macro Organizer should be open" )
+ kontext "TabCustomizeToolbars"
+ hCloseDialog( TabCustomizeToolbars, "cancel" )
+
+
+ printlog "Click to run macro"
+ kontext "makro"
+ if ( hClickButton( Ausfuehren ) = RC_TIMEOUT ) then
+ warnlog( "Unable to run macro, button is not enabled" )
+ kontext "Makro"
+ hCloseDialog( Makro, "close" )
+ endif
+
+ kontext "active"
+ if ( active.exists() ) then
+ if ( active.getText() = "TTMacro3" ) then
+ printlog( "The correct macro has been executed" )
+ else
+ warnlog( "Unknown Messagebox: " & active.getText() )
+ endif
+ Active.OK()
+ endif
+ else
+ warnlog( "Macro Organizer did not open" )
+ endif
+
+ printlog( "Open macro organizer from the current document" )
+ ToolsMacro_uno : WaitSlot()
+
+ printlog( "Select the last item in the treelist" )
kontext "Makro"
- Makro.close()
- endcatch
-
- kontext "active"
- if ( active.exists() ) then
- cMsg = active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- if ( cMsg = "TTMacro3" ) then
- printlog( "The correct macro has been executed" )
+ hSelectTheLastNode( MakroAus )
+
+ printlog( "Delete the new module" )
+ Loeschen.Click()
+
+ printlog( "Close the deletion warning" )
+ kontext "active"
+ if ( active.exists() ) then
+ printlog( "MessageBox: " & active.getText() )
+ Active.Yes()
else
- warnlog( "Unknown Messagebox: " & cMsg )
+ warnlog( "No confirmation dialog for delete" )
endif
- Active.OK()
- endif
-
- printlog( "Open macro organizer from the current document" )
- brc = hOpenBasicOrganizerFromDoc()
-
- printlog( "Select the last item in the treelist" )
- brc = hSelectTheLastNode( MakroAus )
- printlog( "Delete the new module" )
- Loeschen.Click()
-
- printlog( "Close the deletion warning" )
- kontext "active"
- if ( active.exists() ) then
- cMsg = active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- printlog( "MessageBox: " & cMsg )
- Active.Yes()
+ printlog( "Close the macro organizer" )
+ kontext "makro"
+ Makro.Close()
else
- warnlog( "No confirmation dialog for delete" )
+ warnlog( "Makro Organizer did not open" )
endif
- printlog( "Close the macro organizer" )
- kontext "makro"
- Makro.Close()
-
printlog( "Close the document" )
Call hDestroyDocument()
-
endcase
diff --git a/testautomation/framework/optional/includes/basic_modulehide.inc b/testautomation/framework/optional/includes/basic_modulehide.inc
index 130915ffec46..8423c67e6b67 100644..100755
--- a/testautomation/framework/optional/includes/basic_modulehide.inc
+++ b/testautomation/framework/optional/includes/basic_modulehide.inc
@@ -36,6 +36,14 @@ testcase tBasicIdeModuleHide
const CFN = "tBasicIdeModuleHide::"
+ const TESTMACRO = "TTMacro1"
+ const ERR_NO_LINES_INSERTED = 0
+
+ const RC_SUCCESS = 0
+ const RC_TIMEOUT = -1
+
+ const TAB_MODULES = 1
+
dim rc as integer
dim brc as boolean
dim cDefaultTabName as string
@@ -43,60 +51,48 @@ testcase tBasicIdeModuleHide
gApplication = "WRITER"
call hNewDocument()
- brc = hOpenBasicOrganizerFromDoc()
- brc = hCreateModuleForDoc()
+ ToolsMacro_uno
+ hCreateModuleForDoc()
- brc = hInsertMacro( 1 )
- if ( brc ) then
+ printlog( "Insert macro" )
+ if ( hInsertMacroFromFile( TESTMACRO ) > ERR_NO_LINES_INSERTED ) then
printlog( CFN & "Macro has been written successfully" )
else
warnlog( CFN & "Failed to insert macro" )
endif
- rc = hHideModule()
- if ( rc > 0 ) then
- warnlog( "Some unexpected error occurred while trying to hide the module" )
- endif
+ printlog( "Hide the module" )
+ if ( hHideModule() ) then
- try
' hTestMacro is expected to fail, so we jump to the catch statement
- rc = hTestMacro( 1 )
- if ( rc = 0 ) then
+ if ( hInsertMacroFromFile( TESTMACRO ) <> ERR_NO_LINES_INSERTED ) then
warnlog( "For some reason the original module is still visible" )
else
- warnlog( "There should not be any editingwindow visible" )
+ printlog( "The edit window is not accessible, good" )
endif
- catch
- printlog( " * unable to locate editwindow -> no module visible." )
- endcatch
-
- if ( hOpenBasicObjectOrganizer( 1 ) ) then
-
- modulliste.typekeys( "<END><RIGHT><DOWN><RIGHT><DOWN>" )
- try
- bearbeiten.click()
- catch
- warnlog( "#i35097# Crash when editing last module" )
- endcatch
-
-
- rc = hTestMacro( 1 )
- if ( rc = 1 ) then
- printlog( " * the correct macro-module is open. Good." )
+
+ if ( hOpenBasicObjectOrganizer( TAB_MODULES ) ) then
+
+ modulliste.typekeys( "<END><RIGHT><DOWN><RIGHT><DOWN>" )
+ if ( hClickButton( Bearbeiten ) = RC_TIMEOUT ) then
+ warnlog( "#i35097# Crash when editing last module" )
+ goto endsub
+ endif
+
+ if ( not hBasicIDERunMacro( TESTMACRO ) ) then
+ warnlog( "Incorrect macro executed/macro missing" )
+ endif
+
+ hCloseBasicIDE()
+ hFileCloseAll()
+
else
- warnlog( "The open macro-module is not the one that was expected" )
+ warnlog( "restarting the office to recover from errors" )
+ call exitRestartTheOffice()
endif
-
- hCloseBasicIDE()
-
- call hCloseDocument()
-
+
else
-
- warnlog( "restarting the office to recover from errors" )
- call exitRestartTheOffice()
-
+ warnlog( "Some unexpected error occurred while trying to hide the module" )
endif
-
endcase
diff --git a/testautomation/framework/optional/includes/basic_modulenames.inc b/testautomation/framework/optional/includes/basic_modulenames.inc
index 28c260642482..f874fd93976a 100644..100755
--- a/testautomation/framework/optional/includes/basic_modulenames.inc
+++ b/testautomation/framework/optional/includes/basic_modulenames.inc
@@ -33,68 +33,50 @@
testcase tBasicIdeModuleNames
+ printlog( "Modulenames in BASIC IDE" )
+
+ const CMODULE_VALID1 = "tValidName"
+ const CMODULE_VALID2 = "tValidToo"
+ const TEST_MACRO = "TTMacro1"
+
+ const RC_SUCCESS = 0
+ const RC_FAILURE = 1
+ const ERR_NO_LINES_INSERTED = 0
- dim rc as integer
- dim brc as boolean
- dim i as integer
dim iCurrentName as integer
- const CMODULE = "TModuleNames"
dim cTabName as string
gApplication = "WRITER"
hCreateDocument()
- ' ------ prerequisites ---------
-
- brc = hInitBasicIde( CMODULE )
-
-
- brc = hInsertMacro( 1 )
- if ( rc <> 0 ) then
- warnlog( "Failed to insert macro" )
- endif
+ hInitBasicIde( CMODULE_VALID1 )
+ if ( hInsertMacroFromFile( TEST_MACRO ) > ERR_NO_LINES_INSERTED ) then
- cTabName = hGetTabNameFromOrganizer()
+ cTabName = hGetTabNameFromOrganizer()
+
+ Randomize
+ iCurrentName = Int( 24 * RND ) + 1 ' Range from 1 to 24
+
+ printlog( "Trying with invalid modulename" )
+ cTabName = hCreateInvalidModuleName( iCurrentName )
+ hRenameTab( cTabName )
+ if ( hHandleInvalidNameWarning( cTabname ) ) then
+ printlog( "Warning for invalid modulename displayed" )
+ else
+ warnlog( "Warning for invalid modulename is missing" )
+ endif
- Randomize
- iCurrentName = Int( 24 * RND ) + 1 ' Range from 1 to 24
-
- cTabName = hCreateInvalidModuleName( iCurrentName )
- rc = hRenameTab( cTabName )
- if ( rc = 1 ) then
- hHandleInvalidNameWarning( cTabname )
- else
- warnlog( "Warning missing" )
- endif
-
- cTabname = CMODULE
- rc = hRenameTab( cTabname )
- if ( rc <> 0 ) then
- brc = hHandleInvalidNameWarning( cTabname )
- if ( brc ) then
- warnlog( "Failed to set valid name" )
- endif
- endif
+ printlog( "Trying with valid modulename" )
+ hRenameTab( CMODULE_VALID2 )
+ if ( hHandleInvalidNameWarning( CMODULE_VALID2 ) ) then
+ warnlog( "Failed to set valid modulename" )
+ endif
-
- cTabname = hCreateInvalidModuleName( 0 )
- rc = hRenameTab( cTabName )
- if ( rc <> 0 ) then
- brc = hHandleInvalidNameWarning( cTabname )
- if ( brc ) then
- warnlog( "Failed to set valid name" )
- endif
- endif
-
-
- rc = hTestMacro( 1 )
- if ( rc <> 1 ) then
- warnlog( "The open macro-module is not the one that was expected" )
+ else
+ warnlog( "Failed to insert macro" )
endif
- hCloseBasicIDE()
-
- hDestroyDocument()
+ hFileCloseAll()
endcase
@@ -102,204 +84,124 @@ endcase
testcase tInvalidModuleNames
+ printlog( "Modulenames in BASIC Organizer" )
+
+ const MAX_WAIT = 2
+ const OK_BUTTON_ONLY = 1
- dim brc as boolean
- dim cMsg as string
dim iCurrentName as Integer
-
dim sSeparator as String
dim cModuleName as string
- hBasicModuleCreateNew()
-
-
Randomize
iCurrentName = Int( 24 * RND ) + 1 ' Range from 1 to 24
-
cModuleName = hCreateInvalidModuleName( iCurrentName )
- printlog( "" )
printlog( "Trying module name: " & cModuleName )
- brc = hNameBasicModule( cModuleName )
-
- if ( brc ) then
+ hCreateDocument()
+ ToolsMacro_uno
+
+ ' hCreateModuleForDoc should usually end with the BASIC IDE open
+ ' but we want it to fail by providing an invalid module name
+ if ( hCreateModuleForDoc( cModuleName ) ) then
warnlog( "Basic-Ide should not open for invalid module names" )
-
- ' try to recover and continue for other names
- brc = hCloseBasicIde()
- brc = hDestroyDocument
- brc = hBasicModuleCreateNew()
-
- ' if we cannot recover, exit the test
- if ( not brc ) then
- goto endsub
+ else
+ kontext "Active"
+ if ( Active.exists( MAX_WAIT ) ) then
+ if( Active.getButtonCount() = OK_BUTTON_ONLY ) then
+
+ printlog( "Messagebox <Invalid name> displayed: " & Active.getText() )
+ hCloseDialog( Active, "ok" )
+
+ kontext "NeuesModul"
+ if ( NeuesModul.exists( MAX_WAIT ) ) then
+ hCloseDialog( NeuesModul, "cancel" )
+
+ kontext "Makro"
+ if ( Makro.exists() ) then
+ hCloseDialog( Makro, "close" )
+ else
+ warnlog( "Test should be back on macro dialog" )
+ endif
+ else
+ warnlog( "<NeuesModul> dialog should show after failed naming attempt" )
+ endif
+ else
+ warnlog( "Unexpected messagebox: " & Active.getText() )
+ hCloseDialog( Active, "close" )
+ endif
+ else
+ warnlog( "<Invalid name> Messagebox missing" )
endif
endif
+ hFileCloseAll()
- printlog( "Close the naming dialog (cancel)" )
- kontext "neuesmodul"
- if ( NeuesModul.Exists() ) then
- NeuesModul.Cancel()
- endif
-
- printlog( "Clsoe macro dialog (if it exists)" )
- kontext "makro"
- if ( Makro.Exists() ) then
- Makro.Close()
- endif
-
- printlog( "Close the document" )
- brc = hDestroyDocument()
-
endcase
'*******************************************************************************
testcase tValidModuleNames
+ printlog( "Valid modulenames in BASIC Organizer: Names that are BASIC keywords" )
- dim brc as boolean
- dim cMsg as string
dim iCurrentName as Integer
-
- dim sKeyword as String
-
- hBasicModuleCreateNew()
+ dim sModuleName as String
Randomize
iCurrentName = Int( 8 * RND ) + 1 ' Range from 1 to 8
select case iCurrentName
- case 1 : sKeyword = "option"
- case 2 : sKeyword = "sub"
- case 3 : sKeyword = "function"
- case 4 : sKeyword = "end"
- case 5 : sKeyword = "exit"
- case 6 : sKeyword = "_underscore1"
- case 7 : sKeyword = "underscore_2"
- case 8 : sKeyWord = "ThisIsQuiteALongNameForAModuleDontYouThink"
+ case 1 : sModuleName = "option"
+ case 2 : sModuleName = "sub"
+ case 3 : sModuleName = "function"
+ case 4 : sModuleName = "end"
+ case 5 : sModuleName = "exit"
+ case 6 : sModuleName = "_underscore1"
+ case 7 : sModuleName = "underscore_2"
+ case 8 : sModuleName = "ThisIsQuiteALongNameForAModuleDontYouThink"
end select
- printlog( "" )
- printlog( "Trying module name: " & sKeyword )
-
- brc = hNameBasicModule( sKeyword )
-
- if ( brc ) then
-
- ' try to recover and continue for other names
- brc = hCloseBasicIde()
- brc = hDestroyDocument
- brc = hBasicModuleCreateNew()
-
- ' if we cannot recover, exit the test
- if ( not brc ) then
- goto endsub
- endif
- endif
-
- printlog( "Close the naming dialog (cancel)" )
- kontext "neuesmodul"
- if ( NeuesModul.Exists() ) then
- NeuesModul.Cancel()
- endif
+ hCreateDocument()
+ ToolsMacro_uno
- printlog( "Clsoe macro dialog (if it exists)" )
- kontext "makro"
- if ( Makro.Exists() ) then
- Makro.Close()
+ if ( hCreateModuleForDoc( sModuleName ) ) then
+ printlog( "The module name was accepted: " & sModuleName )
+ hFileCloseAll()
+ else
+ warnlog( "The module name was not accepted: " & sModuleName )
+ goto endsub
endif
- printlog( "Close the document" )
- brc = hDestroyDocument()
-
endcase
'*******************************************************************************
-function hBasicModuleCreateNew() as boolean
+function hHandleInvalidNameWarning( cTabName as string ) as boolean
+ const CFN = "hHandleInvalidNameWarning(): "
+ const MAX_WAIT = 1
- dim brc as boolean
- brc = false
-
- dim iPos as integer
-
- const CFN = "hBasicModuleCreateNew::"
+ kontext "Active"
+ if ( Active.exists( MAX_WAIT ) ) then
- gApplication = "WRITER"
- brc = hCreateDocument()
-
- brc = hOpenBasicOrganizerFromDoc()
- if ( not brc ) then
- warnlog( CFN & "Could not open the BASIC Macro Organizer, aborting" )
- hDestroyDocument()
- endif
-
- if ( brc ) then
- iPos = hSelectTheLastNode( MakroAus )
- if ( not Neu.isEnabled() ) then
- warnlog( CFN & "New button is disabled for the current module, aborting" )
- kontext "Makro"
- Makro.cancel()
- brc = hDestroyDocument()
- endif
- endif
-
- if ( brc ) then
-
- printlog( "Click 'New'" )
- Neu.Click()
+ printlog( "Invalid name message displayed" & Active.getText() )
+ hCloseDialog( Active, "ok" )
+ hHandleInvalidNameWarning() = true
- kontext "NeuesModul"
- if ( Neuesmodul.exists() ) then
- brc = true
- printlog( CFN & "Naming dialog is open"
+ kontext "Active"
+ if ( Active.exists( MAX_WAIT ) ) then
+ printlog( "Unexpected messagebox displayed: " & Active.getText() )
+ hHandleInvalidNameWarning() = false
endif
- endif
-
- hBasicModuleCreateNew() = brc
-
-end function
-
-'*******************************************************************************
-
-function hHandleInvalidNameWarning( cTabName as string ) as boolean
+ kontext "BasicIDE"
+ tabbar.typekeys( "<ESCAPE>" , true )
- dim brc as boolean : brc = false
- dim iTry as integer
-
- const CFN = "hHandleInvalidNameWarning::"
-
- kontext "Active"
- for iTry = 1 to 5
-
- if ( active.exists( 1 ) ) then
-
- if ( brc ) then
- warnlog( CFN & "Too many invalid name warnings" )
- endif
-
- printlog( CFN & "Message: " & active.getText() )
-
- active.ok()
- brc = true
-
- else
-
- if ( not brc ) then
- warnlog( CFN & "Invalid name warning missing" )
- endif
-
- endif
-
- next iTry
-
- kontext "basicide"
- tabbar.typekeys( "<ESCAPE>" , true )
- hHandleInvalidNameWarning() = brc
+ else
+ printlog( "Invalid name warning not displayed" )
+ hHandleInvalidNameWarning() = false
+ endif
end function
diff --git a/testautomation/framework/optional/includes/basic_package_export.inc b/testautomation/framework/optional/includes/basic_package_export.inc
index a8a2ae00459d..28e214102dbb 100644..100755
--- a/testautomation/framework/optional/includes/basic_package_export.inc
+++ b/testautomation/framework/optional/includes/basic_package_export.inc
@@ -40,6 +40,10 @@ testcase tBasicPackageExport
const LIBRARY_NAME = "tBasicExport"
const DOCUMENT_POSITION = 4
const PACKAGE_SIZE = 1325
+
+ const LIBRARIES_TAB = 3
+ const LONG_WAIT = 3
+ const SHORT_WAIT = 1
dim cDocumentName as string
dim cLibraryName as string
@@ -69,7 +73,7 @@ testcase tBasicPackageExport
printlog( "Select the second document" )
kontext "Makro"
- if ( Makro.exists( 1 ) ) then
+ if ( Makro.exists( SHORT_WAIT ) ) then
iNodeCount = hGetNodeCount( MakroAus )
cDocumentName = hSelectNode( MakroAus, iNodeCount )
@@ -77,7 +81,7 @@ testcase tBasicPackageExport
Verwalten.click()
printlog( "Go to the libraries tabpage" )
- hSelectBasicObjectOrganizerTab( 3 )
+ hSelectBasicObjectOrganizerTab( LIBRARIES_TAB )
kontext "TabBibliotheken"
printlog( "Select the document at pos. " & DOCUMENT_POSITION )
@@ -93,7 +97,7 @@ testcase tBasicPackageExport
Neu.click()
kontext "NeueBibliothek"
- if ( NeueBibliothek.exists( 1 ) ) then
+ if ( NeueBibliothek.exists( SHORT_WAIT ) ) then
printlog( "Name the new library: " & LIBRARY_NAME )
BibliotheksName.setText( LIBRARY_NAME )
NeueBibliothek.ok()
@@ -128,7 +132,7 @@ testcase tBasicPackageExport
printlog( "Select the work document" )
kontext "Makro"
- if ( Makro.exists( 1 ) ) then
+ if ( Makro.exists( SHORT_WAIT ) ) then
iNodeCount = hGetNodeCount( MakroAus )
hSelectNode( MakroAus, iNodeCount )
@@ -136,10 +140,10 @@ testcase tBasicPackageExport
Verwalten.click()
printlog( "Libraries tab" )
- hSelectBasicObjectOrganizerTab( 3 )
+ hSelectBasicObjectOrganizerTab( LIBRARIES_TAB )
kontext "TabBibliotheken"
- if ( TabBibliotheken.exists( 1 ) and TabBibliotheken.isVisible() ) then
+ if ( TabBibliotheken.exists( SHORT_WAIT ) and TabBibliotheken.isVisible() ) then
Bibliothek.select( DOCUMENT_POSITION )
printlog( "Select the new library" )
@@ -156,17 +160,17 @@ testcase tBasicPackageExport
Export.click()
kontext "ExportBasicLibraryDlg"
- if ( ExportBasicLibraryDlg.exists( 3 ) ) then
+ if ( ExportBasicLibraryDlg.exists( LONG_WAIT ) ) then
printlog( "Select to export as extension" )
ExportAsPackage.check()
- ExportBasicLibraryDlg.ok()
+ hCloseDialog( ExportBasicLibraryDlg, "ok" )
kontext "SpeichernDlg"
- if ( SpeichernDlg.exists( 3 ) ) then
+ if ( SpeichernDlg.exists( LONG_WAIT ) ) then
printlog( "Save the file, suffix will be added automatically." )
DateiName.setText( hGetWorkPath() & LIBRARY_NAME )
Speichern.click()
- Speichern.notExists( 1 )
+ Speichern.notExists( SHORT_WAIT )
else
warnlog( "Dialog <File Save> did not open" )
endif
@@ -176,16 +180,14 @@ testcase tBasicPackageExport
kontext "TabBibliotheken"
printlog( "Close libraires tabpage" )
- TabBibliotheken.cancel()
- TabBibliotheken.notExists( 1 )
+ hCloseDialog( TabBibliotheken, "cancel" )
else
warnlog( "Dialog <TabBibliotheken> is not available" )
endif
kontext "Makro"
printlog( "Close BASIC organizer" )
- Makro.cancel()
- Makro.notExists( 1 )
+ hCloseDialog( Makro, "cancel" )
else
warnlog( "Dialog <Makro> did not open" )
endif
diff --git a/testautomation/framework/optional/includes/basic_package_import.inc b/testautomation/framework/optional/includes/basic_package_import.inc
index 4ef74de4f112..a16b9e4e50e2 100644..100755
--- a/testautomation/framework/optional/includes/basic_package_import.inc
+++ b/testautomation/framework/optional/includes/basic_package_import.inc
@@ -41,6 +41,9 @@ testcase tBasicPackageImport
dim package_name as string : package_name = "tBasicExport.oxt"
const LIBRARY_NAME = "tBasicExport"
+ const MY_MACROS = 1
+ const LIBRARIES_TAB = 3
+ const SHORT_WAIT = 1
dim cDocumentName as string
dim cLibraryName as string
@@ -49,9 +52,9 @@ testcase tBasicPackageImport
dim iCurrentLib as integer
dim iStatus as integer
- dim cFile as string
- cFile = hGetWorkPath() & package_name
-
+ dim cFile as string : cFile = hGetWorkPath() & package_name
+
+ printlog( "Probe for test extension created by basic_packege_export" )
if ( Not FileExists( cFile ) or ( FileLen( cFile ) = 0 ) ) then
warnlog( "#i105719# - Test extension is missing or has zero size. This is most likely" & _
" a follow-up error from the prior test case. Test stopped." )
@@ -80,14 +83,14 @@ testcase tBasicPackageImport
ToolsMacro_uno
kontext "Makro"
- MakroAus.select( 1 )
+ MakroAus.select( MY_MACROS )
Verwalten.click()
- hSelectBasicObjectOrganizerTab( 3 )
+ hSelectBasicObjectOrganizerTab( LIBRARIES_TAB )
kontext "TabBibliotheken"
- Bibliothek.select( 1 )
+ Bibliothek.select( SHORT_WAIT )
printlog( "Select the new library" )
kontext "TabBibliotheken"
@@ -98,15 +101,13 @@ testcase tBasicPackageImport
endif
next iCurrentLib
cLibraryName = BibliotheksListe.getSelText()
-
- try
- Hinzufuegen.click()
- catch
+
+ if ( not hClickButton( Hinzufuegen ) ) then
warnlog( "#i64007 - Office crashes on clicking import button" )
- endcatch
+ endif
kontext "OeffnenDlg"
- OeffnenDlg.cancel()
+ hCloseDialog( OeffnenDlg, "cancel" )
printlog( "Cleanup: Delete Library, close dialogs and remove package" )
@@ -119,19 +120,18 @@ testcase tBasicPackageImport
Loeschen.click()
kontext "active"
- if ( active.exists( 1 ) ) then
+ if ( active.exists( SHORT_WAIT ) ) then
active.yes()
else
warnlog( "No warning for library deletion" )
endif
- endif
-
+ endif
kontext "TabBibliotheken"
- TabBibliotheken.cancel()
+ hCloseDialog( TabBibliotheken, "cancel" )
kontext "Makro"
- Makro.cancel()
+ hCloseDialog( Makro, "cancel" )
hExtensionRemoveGUI( package_name )
diff --git a/testautomation/framework/optional/includes/basic_protected_libraries.inc b/testautomation/framework/optional/includes/basic_protected_libraries.inc
index 132549c16d8d..03a9aea72834 100644..100755
--- a/testautomation/framework/optional/includes/basic_protected_libraries.inc
+++ b/testautomation/framework/optional/includes/basic_protected_libraries.inc
@@ -47,7 +47,7 @@ testcase tProtectedLibraries
dim iCurrentLib as integer
dim cMsg as string
- hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
printlog( "Select My Macros" )
kontext "Makro"
@@ -97,7 +97,7 @@ testcase tProtectedLibraries
printlog( "Restart the application" )
call ExitRestartTheOffice()
- hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
printlog( "Select the protected library" )
Kontext "Makro"
diff --git a/testautomation/framework/optional/includes/basic_spectemplate.inc b/testautomation/framework/optional/includes/basic_spectemplate.inc
index 92a792cd5797..35e541a642a2 100644..100755
--- a/testautomation/framework/optional/includes/basic_spectemplate.inc
+++ b/testautomation/framework/optional/includes/basic_spectemplate.inc
@@ -33,30 +33,9 @@
testcase tBasicSpecTemplate
- qaerrorlog( "#i89554# Macro dialog not displayed / document not loaded" )
- goto endsub
-
-
const cFile = "http://specs.openoffice.org/collaterals/template/2.0/OpenOffice-org-Specification-Template.ott"
- dim brc as boolean
- dim cProxy as string
- dim cPort as string
-
- dim cWorkFile as string
-
- cWorkFile = hGetWorkPath() & "SpecTemplate" & hGetSuffix( "current" )
-
-
- hGetPrivateHttpServer( cProxy, cPort )
+ dim cWorkFile as string : cWorkFile = hGetWorkPath() & "SpecTemplate" & hGetSuffix( "current" )
- printlog( "Init: Set proxy (requires private environment to be set)" )
- hSetProxies( cProxy, cPort, "", "", "" )
- if ( WaitSlot() <> WSFinished ) then
- warnlog( "Slot not finished after 1000 msec." )
- else
- printlog( "Slot free in less than 1000 msec." )
- endif
-
printlog( "FileOpen" )
hFileOpen( cFile )
@@ -68,26 +47,26 @@ testcase tBasicSpecTemplate
kontext "OeffnenDlg"
if ( OeffnenDlg.exists( 1 ) ) then
printlog( "Recovering - closing File Open dialog" )
- OeffnenDlg.cancel()
+ hCloseDialog( OeffnenDlg, "cancel" )
endif
goto endsub
endif
printlog( "Accept to execute macros" )
- brc = hAllowMacroExecution()
- if ( not brc ) then
- warnlog( "Missing Macro execution dialog. Please check the file/security settings" )
+ if ( not hAllowMacroExecution() ) then
+ warnlog( "Missing Macro execution dialog. Aborting test" )
+ goto endsub
endif
-
+
kontext "Active"
- if ( Active.exists( 5 ) ) then
+ if ( Active.exists( 10 ) ) then
warnlog( "Fatal: Unexpected active: " & Active.getText() )
active.ok
kontext "OeffnenDlg"
if ( OeffnenDlg.exists( 2 ) ) then
- OeffnenDlg.close()
+ hCloseDialog( OeffnenDlg, "close" )
goto endsub
endif
endif
@@ -101,22 +80,23 @@ testcase tBasicSpecTemplate
hUseMenu()
hMenuSelectNr( 10 )
hMenuSelectNr( 2 )
-
-
+
+ ' This one is required as the document is rendering for a while and we cannot
+ ' tell when it is finished (WaitSlot does not work here)
+ wait( 5000 )
+
+ printlog( "Save the file, overwriting" )
hFileSaveAsKill( cWorkFile )
-
+
+ printlog( "Close the document" )
hDestroyDocument()
-
+
+ printlog( "Load the file again" )
hFileOpen( cWorkFile )
-
hAllowMacroExecution()
- printlog( "Cleanup: Close the document" )
+ printlog( "Cleanup: Close the document and delete the file" )
hDestroyDocument()
-
- printlog( "Cleanup: Delete proxy settings" )
- hSetProxies( "", "", "", "", "" )
-
hDeleteFile( cWorkFile )
endcase
diff --git a/testautomation/framework/optional/includes/basic_usertemplate.inc b/testautomation/framework/optional/includes/basic_usertemplate.inc
index de3b605ed510..03f1602a94b5 100644..100755
--- a/testautomation/framework/optional/includes/basic_usertemplate.inc
+++ b/testautomation/framework/optional/includes/basic_usertemplate.inc
@@ -43,7 +43,6 @@ testcase tMacroUsertemplate
' When creating a document based on a user-created template the macro
' will not execute, instead a com.sun.star... errormessage is displayed
- dim brc as boolean ' returncode
dim irc as integer ' returncode
dim cMacroName as string ' Temp variable to store the name of current macro
@@ -63,62 +62,74 @@ testcase tMacroUsertemplate
kontext "DocumentWriter"
DocumentWriter.typeKeys( DOC_IDENTIFIER )
- brc = hCreateDocument()
-
- brc = hOpenBasicOrganizerFromDoc()
+ printlog( "Create a new document" )
+ hCreateDocument()
+
+ printlog( "Open the macro organizer" )
+ ToolsMacro_uno
+ printlog( "Search for the module" )
+ kontext "Makro"
iCurrentNode = hSelectNodeByName( MakroAus, "Module1" )
if ( iCurrentNode = 0 ) then
warnlog( "#i73521# - The expected node could not be found. Aborting test" )
kontext "Makro"
- Makro.close()
+ hCloseDialog( Makro, "close" )
hDestroyDocument()
goto endsub
endif
- ' verify that we replace the correct macro. if not: Abort
+ printlog( "Find the macro we are going to replace" )
if ( MakroListe.getItemCount() > 0 ) then
cMacroName = MakroListe.getSelText()
if ( lcase( cMacroName ) <> "main" ) then
warnlog( "Test abort: Incorrect macro is selected: " & cMacroName )
printlog( "This should have been the <Main> Macro" )
kontext "Makro"
- Makro.cancel()
+ hCloseDialog( Makro, "cancel" )
hDestroyDocument()
goto endsub
endif
else
warnlog( "There is no macro listed for the current module, the test cannot continue" )
kontext "Makro"
- Makro.close()
+ hCloseDialog( Makro, "close" )
hDestroyDocument()
goto endsub
endif
-
+
+ printlog( "Edit" )
Bearbeiten.click()
+ printlog( "Insert test macro" )
hInsertMacro( 3 )
+ printlog( "Close BASIC IDE" )
hCloseBasicIde()
+ printlog( "Close Document" )
hDestroyDocument()
+ printlog( "Open new document" )
hCreateDocument
+ printlog( "Open Macro Organizer" )
ToolsMacrosRunMacro
-
+
+ printlog( "Find the Macro again" )
cMacroName = hExecScript_tMacroUserTemplate() ' local function, see below
if ( lcase( cMacroName ) <> "main" ) then
warnlog( "Test abort: Incorrect macro is selected: " & cMacroName )
printlog( "This should have been the <Main> Macro" )
ScriptSelector.cancel()
- brc = hDestroyDocument()
+ hDestroyDocument()
goto endsub
endif
- ' run
+ printlog( "Run the macro" )
ScriptSelector.ok()
+ printlog( "Check for macro" )
kontext "Active"
if ( active.exists( 3 ) ) then
printlog( "Messagebox: " & active.getText() )
@@ -126,29 +137,33 @@ testcase tMacroUsertemplate
else
warnlog( "The Macro has not been executed" )
endif
-
- brc = hDestroyDocument()
- brc = hCreateDocument()
+ printlog( "Close the document" )
+ hDestroyDocument()
+
+ printlog( "Open a new document" )
+ hCreateDocument()
printlog( "" )
printlog( "Save as template" )
hFileSaveAsWithFilterKill( sPathOut & FILEOUT, FILTER )
-
+
+ printlog( "Close the document" )
hDestroyDocument()
printlog( "" )
printlog( "File New from Template" )
FileNewFromTemplate
-
+
+ printlog( "Find the template" )
irc = hFindTemplate( FILEOUT )
-
hSelectDocumentObject( irc, 1 )
printlog( "" )
- printlog( "Run Macro..." )
+ printlog( "Open the <Run Macro> dialog" )
ToolsMacrosRunMacro
-
+
+ printlog( "Try to find the macro" )
cMacroName = hExecScript_tMacroUserTemplate() ' local function, see below
if ( lcase( cMacroName ) <> "main" ) then
warnlog( "Test abort: Incorrect macro is selected: " & cMacroName )
@@ -158,10 +173,10 @@ testcase tMacroUsertemplate
goto endsub
endif
- ' run
printlog( "Run" )
ScriptSelector.ok()
-
+
+ printlog( "Verify macro execution" )
kontext "Active"
if ( active.exists( 3 ) ) then
@@ -179,10 +194,11 @@ testcase tMacroUsertemplate
else
warnlog( "Macro not executed / no warning" )
endif
-
- hDestroyDocument()
- hDestroyDocument()
-
+
+ printlog( "Close all open documents" )
+ hFileCloseAll()
+
+ printlog( "Delete test template" )
hDeleteFile( sPathOut & FILEOUT & ".ott" )
diff --git a/testautomation/framework/optional/includes/basic_vba-compat_application-union.inc b/testautomation/framework/optional/includes/basic_vba-compat_application-union.inc
index 222b99215f81..d9f421278514 100755
--- a/testautomation/framework/optional/includes/basic_vba-compat_application-union.inc
+++ b/testautomation/framework/optional/includes/basic_vba-compat_application-union.inc
@@ -46,12 +46,25 @@ testcase tBasicVBACompatApplicationUnion()
const RC_FAILURE = -1
dim macro_identifier( EXPECTED_MACRO_COUNT )
+
+ ' Find out whether we can write to the program directory or not.
+ ' If we can we get different values returned from the test functions
+ ' This is required for userland installations.
+ if( hCheckForAdministratorPermissions() ) then
+ macro_identifier( 1 ) = "1: False"
+ macro_identifier( 2 ) = "2: False"
+ macro_identifier( 3 ) = "3: False"
+ macro_identifier( 4 ) = "4: True"
+ macro_identifier( 5 ) = "5: False"
+ macro_identifier( 6 ) = "6: True"
+ else
macro_identifier( 1 ) = "1: True"
macro_identifier( 2 ) = "2: True"
macro_identifier( 3 ) = "3: True"
macro_identifier( 4 ) = "4: True"
macro_identifier( 5 ) = "5: True"
macro_identifier( 6 ) = "6: True"
+ endif
dim cTestFile as string
cTestFile = gTesttoolPath & "framework/optional/input/vba-compat/" & DOCUMENT_NAME
diff --git a/testautomation/framework/optional/includes/basic_vba-compat_import_disabled.inc b/testautomation/framework/optional/includes/basic_vba-compat_import_disabled.inc
index 764ba407236a..1e361b6de0b2 100755
--- a/testautomation/framework/optional/includes/basic_vba-compat_import_disabled.inc
+++ b/testautomation/framework/optional/includes/basic_vba-compat_import_disabled.inc
@@ -80,9 +80,10 @@ testcase tBasicVBACompatImportDisabled()
hFileOpen( cTestFile )
printlog( "Open the Basic organizer" )
- hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
printlog( "Expand all nodes" )
+ kontext "Makro"
cNodeCount = hExpandAllNodes( MakroAus )
printlog( "Verify that we have the correct node count for the current mode" )
diff --git a/testautomation/framework/optional/includes/basic_vba-compat_import_enabled.inc b/testautomation/framework/optional/includes/basic_vba-compat_import_enabled.inc
index 98173ee8ba48..660561322db6 100755
--- a/testautomation/framework/optional/includes/basic_vba-compat_import_enabled.inc
+++ b/testautomation/framework/optional/includes/basic_vba-compat_import_enabled.inc
@@ -91,9 +91,10 @@ testcase tBasicVBACompatImportEnabled()
hFileOpen( cTestFile )
printlog( "Open the Basic organizer" )
- hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
printlog( "Expand all nodes" )
+ kontext "Makro"
cNodeCount = hExpandAllNodes( MakroAus )
printlog( "Verify that we have the correct node count for the current mode." )
diff --git a/testautomation/framework/optional/includes/basic_vba-compat_import_nothing.inc b/testautomation/framework/optional/includes/basic_vba-compat_import_nothing.inc
index 50c59cf88e10..66cc7a77eae5 100755
--- a/testautomation/framework/optional/includes/basic_vba-compat_import_nothing.inc
+++ b/testautomation/framework/optional/includes/basic_vba-compat_import_nothing.inc
@@ -67,9 +67,10 @@ testcase tBasicVBACompatImportNothing()
hFileOpen( cTestFile )
printlog( "Open the Basic organizer" )
- hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
printlog( "Expand all nodes" )
+ kontext "Makro"
cNodeCount = hExpandAllNodes( MakroAus )
printlog( "Verify that we have the correct node count for the current mode" )
diff --git a/testautomation/framework/optional/includes/extras_file_open.inc b/testautomation/framework/optional/includes/extras_file_open.inc
index 680afdd77197..874012f6bad1 100644..100755
--- a/testautomation/framework/optional/includes/extras_file_open.inc
+++ b/testautomation/framework/optional/includes/extras_file_open.inc
@@ -173,7 +173,8 @@ testcase tOpenObjectsWithFileDialog( cCategory as string )
else
printlog( "Close navigator, if open" )
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
sFileOut = cCategory & "_" & iCurrentTemplate
sFileOut = convertpath( sPathOut & sFileOut )
@@ -196,7 +197,8 @@ testcase tOpenObjectsWithFileDialog( cCategory as string )
hHandleActivesOnLoad( 0 , 2 )
printlog( "Close navigator, if open" )
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
printlog( "Close document" )
hDestroyDocument()
diff --git a/testautomation/framework/optional/includes/extras_labels.inc b/testautomation/framework/optional/includes/extras_labels.inc
index 11badbd0ba07..27e2ae8dced7 100644..100755
--- a/testautomation/framework/optional/includes/extras_labels.inc
+++ b/testautomation/framework/optional/includes/extras_labels.inc
@@ -33,38 +33,36 @@
testcase tLabelTypes()
+ printlog( "Verify presence of labels and brands" )
+
+ ' If you want to use this test for other languages, remove the following
+ ' if() block and create the reference files by running this test once.
+ ' Follow the instructions emitted by hManagaComparisionList() from the log.
+
if ( gIsoLang <> "en-US" ) then
printlog( "No testing for non-en_US languages" )
goto endsub
endif
+ const NO_DELTA = 0
+ const MAX_LABEL_COUNT = 1600
+ const RELATIVE_PATH = "framework\optional\input\extras_formats\"
dim iBrandCount as integer
dim iCurrentBrand as integer
dim cBrandName as string
-
- dim iTypeCount as integer
- dim iCurrentType as integer
- dim cTypeName as string
-
+ dim iCurrentType as integer
dim cBrandType as string
- dim al_UI_Labels( 1600 ) as string
- al_UI_Labels( 0 ) = "0"
+ dim al_UI_Labels( MAX_LABEL_COUNT ) as string : al_UI_Labels( 0 ) = "0"
dim irc as integer
- dim sFile as string
- sFile = "Labels_" & gISOLang & ".txt"
-
- dim sFileIn as string
- sFileIn = gTesttoolPath & "framework\optional\input\extras_formats\" & sFile
- sFileIn = convertpath( sFileIn )
-
- dim sFileOut as string
- sFileOut = hGetWorkPath() & sFile
+ dim sFile as string : sFile = "Labels_" & gISOLang & ".txt"
+ dim sFileIn as string : sFileIn = convertpath( gTesttoolPath & RELATIVE_PATH & sFile )
+ dim sFileOut as string : sFileOut = hGetWorkPath() & sFile
-
+ printlog( "Open labels dialog, retrieve all label names" )
hCreateLabels()
kontext
@@ -75,33 +73,25 @@ testcase tLabelTypes()
iBrandCount = Marke.getItemCount()
for iCurrentBrand = 1 to iBrandCount
-
+
Marke.select( iCurrentBrand )
-
cBrandName = Marke.getSelText()
-
- iTypeCount = Typ.getItemCount()
-
- for iCurrentType = 1 to iTypeCount
-
+
+ for iCurrentType = 1 to Typ.getItemCount()
+
Typ.select( iCurrentType )
-
- cTypeName = Typ.getSelText()
-
- cBrandType = cBrandName & ":" & cTypeName
+ cBrandType = cBrandName & ":" & Typ.getSelText()
ListAppend( al_UI_Labels() , cBrandType )
-
+
next iCurrentType
-
+
next iCurrentBrand
+ printlog( "Close labels dialog" )
TabEtiketten.Cancel()
+ printlog( "Compare to reference (or create new reference, if none found)" )
irc = hManageComparisionList( sFileIn, sFileOut, al_UI_Labels() )
- if ( irc <> 0 ) then
- warnlog( "The list of labels (Brand/Types) has changed, please review." )
- else
- printlog( "The lists of labels are unchanged. Good." )
- endif
+ hListResultEvaluation( irc , NO_DELTA )
endcase
diff --git a/testautomation/framework/optional/includes/extras_modify_objects.inc b/testautomation/framework/optional/includes/extras_modify_objects.inc
index b8cf23170942..1eb34f786e5f 100644..100755
--- a/testautomation/framework/optional/includes/extras_modify_objects.inc
+++ b/testautomation/framework/optional/includes/extras_modify_objects.inc
@@ -81,12 +81,12 @@ testcase tModifyObjects( iMode as integer, cCategory as string, sVer as string )
next iObject
printlog( "Verify object count (en_US only)" )
- if ( gProductName = "StarOffice" and gISOLang = "en-US" ) then
+ if ( gProductName = "Oracle Open Office" and gISOLang = "en-US" ) then
if ( iObjectSum <> iObjectCountExpected ) then
warnlog( "Number of objects has changed. OLD: " & iObjectCountExpected &_
" NEW: " & iObjectSum )
else
- printlog( "Object count is ok for en-US / StarOffice" )
+ printlog( "Object count is ok for en-US / Oracle Open Office" )
endif
else
printlog( "Template count testing skipped for non-en_US/StarOffice" )
@@ -95,7 +95,7 @@ testcase tModifyObjects( iMode as integer, cCategory as string, sVer as string )
Kontext "TemplateAndDocuments"
printlog( "Switch from preview to document info" )
docinfo.click()
- TemplateAndDocuments.cancel()
+ hCloseDialog( TemplateAndDocuments, "cancel" )
printlog( "" )
printlog( "Starting to load/save/close/reload/close all Objects" )
@@ -111,11 +111,14 @@ testcase tModifyObjects( iMode as integer, cCategory as string, sVer as string )
printlog( "Folder index = " & iObjectFolder & ", Object index = " & iObject )
hFileCloseAll()
-
- if ( iReset = 10 ) then
- call exitRestartTheOffice()
- iReset = 0
- endif
+
+ ' every now and then the office becomes a little unstable.
+ ' Enable the if()-block then, otherwise you might miss some broken
+ ' documents (because the test aborts too early)
+ 'if ( iReset = 10 ) then
+ ' call exitRestartTheOffice()
+ ' iReset = 0
+ 'endif
printlog( "Select the item we want to load" )
FileNewFromTemplate
@@ -138,17 +141,19 @@ testcase tModifyObjects( iMode as integer, cCategory as string, sVer as string )
if ( hFileWait( false ) = -6 ) then
warnlog( "Load failure: ASCII filter dialog displayed, recovering" )
kontext "FilterAuswahl"
- FilterAuswahl.cancel()
+ hCloseDialog( FilterAuswahl, "cancel" )
hDestroyDocument()
else
printlog( "Build filename; save, reload and delete" )
sFile = sPath & cCategory & iObjectFolder & "_" & iObject
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
hFileSaveAsKill( sFile )
hDestroyDocument()
hFileOpen( sFile )
hHandleActivesOnLoad( 1 , 2 )
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
hDestroyDocument()
hDeleteFile( sFile )
printlog( "Test cycle done, going for next object." )
diff --git a/testautomation/framework/optional/includes/extras_table_autoformat.inc b/testautomation/framework/optional/includes/extras_table_autoformat.inc
index 2de2c491c528..892b33ca27fb 100644..100755
--- a/testautomation/framework/optional/includes/extras_table_autoformat.inc
+++ b/testautomation/framework/optional/includes/extras_table_autoformat.inc
@@ -39,8 +39,7 @@ testcase tAutoformatTable( iApp as integer )
endif
- dim al_UI_formats( 1000 ) as string
- al_UI_formats( 0 ) = "0"
+ dim al_UI_formats( 1000 ) as string : al_UI_formats( 0 ) = "0"
dim iFormatCount as integer
dim iCurrentFormat as integer
@@ -113,11 +112,7 @@ testcase tAutoformatTable( iApp as integer )
hDestroyDocument()
irc = hManageComparisionList( sFileIn, sFileOut, al_UI_formats() )
- if ( irc <> 0 ) then
- warnlog( "The list of table autoformats has changed, please review." )
- else
- printlog( "The list of table autoformats is unchanged. Good." )
- endif
+ hListResultEvaluation( irc , 0 )
endcase
diff --git a/testautomation/framework/optional/includes/filedlg_cjk_files.inc b/testautomation/framework/optional/includes/filedlg_cjk_files.inc
index 19f508193a8d..a2bcc2230ec0 100644..100755
--- a/testautomation/framework/optional/includes/filedlg_cjk_files.inc
+++ b/testautomation/framework/optional/includes/filedlg_cjk_files.inc
@@ -71,7 +71,8 @@ testcase tSaveLoadDelFilesCJK()
hDeleteFile( hGetWorkPath() & cStrangeName )
printlog( "Close navigator, if it exists" )
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
next iCounter
diff --git a/testautomation/framework/optional/includes/filedlg_document_properties.inc b/testautomation/framework/optional/includes/filedlg_document_properties.inc
index 089a1d131338..0fd8a0a79f55 100644..100755
--- a/testautomation/framework/optional/includes/filedlg_document_properties.inc
+++ b/testautomation/framework/optional/includes/filedlg_document_properties.inc
@@ -104,3 +104,69 @@ testcase tFiledlgDocumentProperties()
endcase
+'*******************************************************************************
+
+function hDocumentInfoSelectTab( cTabPage as string ) as boolean
+
+
+ '///<h3>Switch between the tabpages in the document info dialog</h3>
+ '///<i>The declaration of the document info dialog is not complete which
+ '///+ enforces special treatment</i><br><br>
+
+ '///<u>Parameter(s):</u><br>
+ '///<ol>
+
+ '///+<li>The name of the tabpage to be activated (String)</li>
+ '///<ul>
+ '///+<li>&quot;General&quot;</li>
+ '///+<li>&quot;Description&quot;</li>
+ '///+<li>&quot;User&quot;</li>
+ '///+<li>&quot;Internet&quot;</li>
+ '///+<li>&quot;Statistics&quot;</li>
+ '///+<li>The string is case insensitive</li>
+
+ '///</ul>
+
+ '///</ol>
+
+
+ '///<u>Returns:</u><br>
+ '///<ol>
+ '///+<li>Errorcondition (Boolean)</li>
+ '///<ul>
+ '///+<li>TRUE if tabpage is known and switching worked</li>
+ '///+<li>FALSE on icorrect input parameter</li>
+ '///+<li>FALSE on any other error</li>
+ '///</ul>
+ '///</ol>
+
+ const CFN = "hDocumentInfoSelectTab::"
+ printlog( CFN & "Enter with option (tabpage): " & cTabPage )
+ dim brc as boolean 'a multi purpose boolean returnvalue
+ brc = true
+
+ '///<u>Description:</u>
+ '///<ul>
+ '///+<li>Kontext to the dialog</li>
+ Kontext
+
+ '///+<li>Select the page to switch to, context to the new page</li>
+ select case ( ucase( cTabPage ) )
+ case "GENERAL" : active.setPage TabDokument : kontext "TabDokument"
+ case "DESCRIPTION" : active.setPage TabBeschreibung : kontext "TabBeschreibung"
+ case "USER" : warnlog( "#i95523# - Cannot access controls on Custom page" )
+ brc = false
+ 'active.setPage TabBenutzer : kontext "TabBenutzer"
+ case "INTERNET" : active.setPage TabInternet : kontext "TabInternet"
+ case "STATISTICS" : active.setPage TabStatistik : kontext "TabStatistik"
+ case default : brc = false
+ end select
+
+ '///</ul>
+
+ printlog( CFN & "Exit with result: " & brc )
+ hDocumentInfoSelectTab() = brc
+
+end function
+
+
diff --git a/testautomation/framework/optional/includes/filedlg_filternames.inc b/testautomation/framework/optional/includes/filedlg_filternames.inc
index 6c41ef444b61..083fdac2793e 100644..100755
--- a/testautomation/framework/optional/includes/filedlg_filternames.inc
+++ b/testautomation/framework/optional/includes/filedlg_filternames.inc
@@ -46,12 +46,14 @@ testcase tVerifyFilterNames
dim iCurrentItem as integer
dim cFile as string
- dim iErr as integer
+ dim irc as integer
' For Windows and Solaris Sparc there exists additional commercial filters
' that are available for StarOffice only.
cFile = gProductName & "_Filternames_"
+ cFile = hStringReplaceChar( cFile, " ", "_" )
+
if ( not gOOo ) then
select case gtSysName
case "Windows" : cFile = cFile & "add_" & gIsoLang & ".txt"
@@ -71,7 +73,7 @@ testcase tVerifyFilterNames
dim cFileOut as string
cFileOut = hGetWorkPath() & cFile
-
+
printlog( "Create a new document" )
hCreateDocument()
@@ -105,7 +107,8 @@ testcase tVerifyFilterNames
OeffnenDlg.cancel()
- iErr = hManageComparisionList( cFileIn, cFileOut, asFilterNames() )
+ irc = hManageComparisionList( cFileIn, cFileOut, asFilterNames() )
+ hListResultEvaluation( irc , 0 )
else
warnlog( "File Open dialog not present." )
@@ -113,11 +116,6 @@ testcase tVerifyFilterNames
printlog( "Close the document" )
hDestroyDocument()
-
- if ( iErr <> 0 ) then
- warnlog( "Filterlist differs from reference, please review" )
- endif
-
-
+
endcase
diff --git a/testautomation/framework/optional/includes/filedlg_passwords.inc b/testautomation/framework/optional/includes/filedlg_passwords.inc
index c8dd68effe83..b921b1a831e0 100644..100755
--- a/testautomation/framework/optional/includes/filedlg_passwords.inc
+++ b/testautomation/framework/optional/includes/filedlg_passwords.inc
@@ -58,7 +58,8 @@ testcase tFiledlgPasswords()
hCreateDocument()
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
call hChangeDoc()
@@ -164,13 +165,15 @@ testcase tFiledlgPasswords()
warnlog( "File Open dislog did not come up" )
endif
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
hDestroyDocument()
hDeleteFile( workpath & workfile )
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
next iCurrentFileFormat
diff --git a/testautomation/framework/optional/includes/help_compare_applications.inc b/testautomation/framework/optional/includes/help_compare_applications.inc
index 240535bed85b..b7edb50dbc8b 100644..100755
--- a/testautomation/framework/optional/includes/help_compare_applications.inc
+++ b/testautomation/framework/optional/includes/help_compare_applications.inc
@@ -43,6 +43,7 @@ testcase tCompareHelpApps()
dim sFileOut as string
dim sFilein as string
dim sFileName as string
+ dim sProductName as string : sProductName = hStringReplaceChar( gProductName, " ", "_" )
' the array that holds the names of the applications
dim aTopicsFromUI( 10 ) as string ' max index = 7 expected
@@ -55,7 +56,8 @@ testcase tCompareHelpApps()
dim brc as boolean
' define input and output paths, presetting variables
- sFileName = gProductName & "_help_applications_" & gIsoLang & ".txt"
+
+ sFileName = sProductName & "_help_applications_" & gIsoLang & ".txt"
sFileOut = hGetWorkFile( sFilename )
sFileIn = gTesttoolPath & "framework\optional\input\help_browser\"
sFileIn = sFileIn & sFileName
@@ -90,9 +92,7 @@ testcase tCompareHelpApps()
printlog( "Beginning comparision" )
irc = hManageComparisionList( sFileIn, sFileOut, aTopicsFromUI() )
- if ( irc <> 0 ) then
- warnlog( "Something went wrong, please review the log" )
- endif
+ hListResultEvaluation( irc , 0 )
endcase
diff --git a/testautomation/framework/optional/includes/help_compare_content.inc b/testautomation/framework/optional/includes/help_compare_content.inc
index 15874b0bd758..fc9f9a7de4d9 100644..100755
--- a/testautomation/framework/optional/includes/help_compare_content.inc
+++ b/testautomation/framework/optional/includes/help_compare_content.inc
@@ -43,6 +43,7 @@ testcase tCompareHelpContent()
dim sFileOut as string
dim sFilein as string
dim sFileName as string
+ dim sProductName as string : sProductName = hStringReplaceChar( gProductName, " ", "_" )
' the array that holds the names of the applications
dim aTopicsFromUI( 1200 ) as string
@@ -55,7 +56,8 @@ testcase tCompareHelpContent()
dim brc as boolean
' define input and output paths, presetting variables
- sFileName = gProductName & "_help_content_" & gIsoLang & ".txt"
+
+ sFileName = sProductName & "_help_content_" & gIsoLang & ".txt"
sFileOut = hGetWorkFile( sFilename )
sFileIn = gTesttoolPath & "framework\optional\input\help_browser\"
sFileIn = convertpath( sFileIn & sFileName )
@@ -85,9 +87,7 @@ testcase tCompareHelpContent()
printlog( "" )
printlog( "Beginning comparision" )
irc = hManageComparisionList( sFileIn, sFileOut, aTopicsFromUI() )
- if ( irc <> 0 ) then
- warnlog( "Something went wrong, please review the log." )
- endif
+ hListResultEvaluation( irc , 0 )
endcase
diff --git a/testautomation/framework/optional/includes/help_compare_topics.inc b/testautomation/framework/optional/includes/help_compare_topics.inc
index 75dd76625b88..feef650c64e9 100644..100755
--- a/testautomation/framework/optional/includes/help_compare_topics.inc
+++ b/testautomation/framework/optional/includes/help_compare_topics.inc
@@ -46,7 +46,7 @@ testcase tCompareHelpTopics()
' handle this. If problems occur, this shuld be the first place to
' look.
- const MAX_ENTRIES = 30000
+ const MAX_ENTRIES = 25000
' variables related to filenames
dim sFileOut as string
@@ -59,23 +59,23 @@ testcase tCompareHelpTopics()
' some increment operators and temporary variables
dim iCurrentItem as integer
dim sCurrentItem as string
+ dim sProductName as string
dim iCurrentApp as integer
dim iAboutItems as integer
dim cAboutItem as string
dim irc as integer
- dim brc as boolean
dim bNextItem as boolean
' define input and output paths, presetting variables
- sFileName = gProductName & "_help_topics_" & gIsoLang & ".txt"
+ sProductName = hStringReplaceChar( gProductName, " ", "_" )
+ sFileName = sProductName & "_help_topics_" & gIsoLang & ".txt"
sFileOut = hGetWorkFile( sFilename )
sFileIn = gTesttoolPath & "framework\optional\input\help_browser\"
sFileIn = convertpath( sFileIn & sFileName )
aTopicsFromUI( 0 ) = "0"
- brc = hOpenHelp()
- if ( not brc ) then
+ if ( not hOpenHelp() ) then
warnlog( "Help not open, aborting test" )
goto endsub
endif
@@ -120,9 +120,7 @@ testcase tCompareHelpTopics()
printlog( "Beginning comparision. This will take a while ..." )
irc = hManageComparisionList( sFileIn, sFileOut, aTopicsFromUI() )
- if ( irc <> 0 ) then
- warnlog( "The list has changed, please review" )
- endif
+ hListResultEvaluation( irc , 0 )
endcase
diff --git a/testautomation/framework/optional/includes/help_search.inc b/testautomation/framework/optional/includes/help_search.inc
index 2e37fe58562e..dddf9cbda60d 100644..100755
--- a/testautomation/framework/optional/includes/help_search.inc
+++ b/testautomation/framework/optional/includes/help_search.inc
@@ -38,6 +38,8 @@ testcase tHelpSearch
goto endsub
endif
+ const RC_LISTS_IDENTICAL = 0
+
dim brc as boolean
dim irc as integer
@@ -48,16 +50,16 @@ testcase tHelpSearch
dim cBasePath as string
cBasePath = gTesttoolPath & "framework\optional\input\help_browser\"
dim cDataFile as string
-
- brc = hOpenHelp()
- if ( not brc ) then
+ dim sProductName as string : sProductName = hStringReplaceChar( gProductName, " ", "_" )
+
+ printlog( "Open Help Browser" )
+ if ( not hOpenHelp() ) then
warnlog( "Help not open, aborting test" )
goto endsub
endif
-
- brc = hSelectHelpTab( "find" )
- if ( not brc ) then
+ printlog( "Go to the Find-Tabpage" )
+ if ( not hSelectHelpTab( "find" ) ) then
warnlog( "Could not access requested TabPage, aborting test" )
call hClosehelp()
goto endsub
@@ -75,15 +77,14 @@ testcase tHelpSearch
ListAllDelete( aUIList() )
hGetListItems( Result, aUIList() )
-
- cDataFile = gProductName & "_search_without_filter_" & gIsoLang & ".txt"
+
+
+ cDataFile = sProductName & "_search_without_filter_" & gIsoLang & ".txt"
sFileOut = hGetWorkFile( cDataFile )
sFileIn = convertpath( cBasePath & cDataFile )
- irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
- if ( irc <> 0 ) then
- warnlog( "Lists are not identical, please review the log" )
- endif
+ irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
+ hListResultEvaluation( irc , RC_LISTS_IDENTICAL )
' ------------ Search whole words only -------------------------------------
printlog( "" )
@@ -98,14 +99,12 @@ testcase tHelpSearch
ListAllDelete( aUIList() )
hGetListItems( Result, aUIList() )
- cDataFile = gProductName & "_search_whole_words_only_" & gIsoLang & ".txt"
+ cDataFile = sProductName & "_search_whole_words_only_" & gIsoLang & ".txt"
sFileOut = hGetWorkFile( cDataFile )
sFileIn = convertpath( cBasePath & cDataFile )
- irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
- if ( irc <> 0 ) then
- warnlog( "Lists are not identical, please review the log" )
- endif
+ irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
+ hListResultEvaluation( irc , RC_LISTS_IDENTICAL )
' ------------ Search headings only ----------------------------------------
printlog( "" )
@@ -120,14 +119,12 @@ testcase tHelpSearch
ListAllDelete( aUIList() )
hGetListItems( Result, aUIList() )
- cDataFile = gProductName & "_search_headings_only_" & gIsoLang & ".txt"
+ cDataFile = sProductName & "_search_headings_only_" & gIsoLang & ".txt"
sFileOut = hGetWorkFile( cDataFile )
sFileIn = convertpath( cBasePath & cDataFile )
- irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
- if ( irc <> 0 ) then
- warnlog( "Lists are not identical, please review the log" )
- endif
+ irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
+ hListResultEvaluation( irc , RC_LISTS_IDENTICAL )
' ------------ Search headings and whole words -----------------------------
printlog( "" )
@@ -142,15 +139,12 @@ testcase tHelpSearch
ListAllDelete( aUIList() )
hGetListItems( Result, aUIList() )
- cDataFile = gProductName & "_search_headings_and_whole_words_" & gIsoLang & ".txt"
+ cDataFile = sProductName & "_search_headings_and_whole_words_" & gIsoLang & ".txt"
sFileOut = hGetWorkFile( cDataFile )
sFileIn = convertpath( cBasePath & cDataFile )
- irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
- if ( irc <> 0 ) then
- warnlog( "Lists are not identical, please review the log" )
- endif
-
+ irc = hManageComparisionList( sFileIn, sFileOut, aUIList() )
+ hListResultEvaluation( irc , RC_LISTS_IDENTICAL )
hCloseHelp()
diff --git a/testautomation/framework/optional/includes/ole_3.inc b/testautomation/framework/optional/includes/ole_3.inc
index 22cab57056f6..9f1d0ac28d6b 100644..100755
--- a/testautomation/framework/optional/includes/ole_3.inc
+++ b/testautomation/framework/optional/includes/ole_3.inc
@@ -81,15 +81,11 @@ endcase
'*******************************************************************************
-sub hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as string )
+function hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as string ) as beoolean
dim sFile as String
dim bOleAvailable as boolean
-
-
-
-
printlog( "" )
printlog( "Beginning testcase with options: " )
printlog( "* Remove focus...: " & bRemoveFocus )
@@ -102,12 +98,14 @@ sub hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as
' So writer/writer, calc/calc, masterdoc/writer is skipped ...
if ( gApplication = cOleType ) then
printlog( "Skipping " & cOleType & " as OLE object" )
- goto testend
+ hInsertOLEObject() = false
+ exit function
endif
if ( gApplication = "MASTERDOCUMENT" and cOleType = "WRITER" ) then
printlog( "Skipping " & cOleType & " as OLE object" )
- goto testend
+ hInsertOLEObject() = false
+ exit function
endif
hCreateDocument()
@@ -125,12 +123,12 @@ sub hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as
ObjektTyp.Select( cOLEObject )
printlog( "Click OK" )
- OLEObjektEinfuegen.OK()
- WaitSlot( 3000 )
+ hCloseDialog( OLEObjektEinfuegen, "ok" )
else
warnlog( "Insert OLE object dialog is missing, test ends" )
hDestroyDocument()
- goto testend
+ hInsertOLEObject() = false
+ exit function
endif
if ( bRemoveFocus ) then
@@ -149,14 +147,8 @@ sub hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as
sFile = ConvertPath ( gOfficePath + "user\work\ole_" & cOleType )
printlog( "Save the file; File to be written (w/o extension): " & sFile )
- if fileexists(sFile) then
- kill(sFile)
- qaerrorlog("killed file from former test run")
- endif
-
- hFileSaveAsKill( sFile )
-
- printlog( "Close the document" )
+ hDeleteFile( sFile )
+ hFileSaveAs( sFile )
hDestroyDocument()
printlog( "Reopen the file: " & sFile )
@@ -165,7 +157,8 @@ sub hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as
bOleAvailable = isOleAvailable()
if ( bOleAvailable ) then
- call DisableNavigator()
+ kontext "Navigator"
+ if ( Navigator.exists() ) then hCloseDialog( Navigator, "close,optional" )
call OLESetFocus()
@@ -174,14 +167,10 @@ sub hInsertOLEObject( bRemoveFocus as boolean, cOLEObject as string, cOleType as
qaErrorLog( "#i44725# OLE Object not saved in Master Document" )
endif
- printlog( "Cleanup: Close the document" )
+ printlog( "Cleanup: Close the document, delete workfile" )
hDestroyDocument()
-
- printlog( "Cleanup: Delete the workfile" )
hDeleteFile( sFile )
-
- ' We end up here when the test has been skipped or aborted
- testend:
+ hInsertOLEObject() = true
end sub
diff --git a/testautomation/framework/optional/includes/ole_tools.inc b/testautomation/framework/optional/includes/ole_tools.inc
index 0428f758cb3d..03b921fc95d3 100644..100755
--- a/testautomation/framework/optional/includes/ole_tools.inc
+++ b/testautomation/framework/optional/includes/ole_tools.inc
@@ -74,22 +74,38 @@ end sub
'*******************************************************************************
-sub hSetToStandardView ( DieApp$ )
- select case DieApp$
+function hSetToStandardView ( cApplication as string ) as boolean
+
+ const MAX_WAIT_FOR_DIALOG = 2
+
+ select case ( cApplication )
case "WRITER"
- gApplication = "WRITER"
+ gApplication = cApplication
Call hNewDocument
Kontext "DocumentWriter"
case "MASTERDOCUMENT"
- gApplication = "MASTERDOCUMENT"
+ gApplication = cApplication
Call hNewDocument
Kontext "DocumentMasterDoc"
+ case else
+ printlog( "Application not supported by this function: " & cApplication )
+ hSetToStandardView() = false
+ exit function
end select
- ViewZoom
+
+ hUseAsyncSlot( "ViewZoom" )
+
Kontext "Massstab"
- Optimal.Check
- Massstab.ok()
+ if ( Massstab.exists( MAX_WAIT_FOR_DIALOG ) ) then
+ Optimal.Check()
+ hCloseDialog( Massstab, "ok" )
+ else
+ warnlog( "Zoom-Dialog did not open" )
+ endif
+
Call hCloseDocument
+ hSetToStandardView() = true
+
end sub
'*******************************************************************************
@@ -140,23 +156,6 @@ end sub
'*******************************************************************************
-sub DisableNavigator()
- printlog( " - disable the navigator in globaldoc/writer" )
- select case gApplication
- case "MASTERDOCUMENT" : Kontext "NavigatorGlobalDoc"
- if NavigatorGlobalDoc.Exists() then
- ViewNavigator
- endif
- case "WRITER" : Kontext "NavigatorWriter"
- if NavigatorWriter.Exists() then
- ViewNavigator
- endif
- end select
- sleep( 1)
-end sub
-
-'*******************************************************************************
-
sub UncheckAutoFileExtension()
Kontext "SpeichernDlg"
if SpeichernDlg.exists(5) then
diff --git a/testautomation/framework/optional/includes/options_ls_2.inc b/testautomation/framework/optional/includes/options_ls_2.inc
deleted file mode 100644
index f3e9cee13250..000000000000
--- a/testautomation/framework/optional/includes/options_ls_2.inc
+++ /dev/null
@@ -1,307 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : thorsten.bosbach@sun.com
-'*
-'* short description : (functionality test for load/save group)
-'*
-'\******************************************************************************
-
-testcase func_LoadSaveGeneral_1
-
- warnlog( "#i95523# - cannot access custom tabpage on document info dialog" )
- goto endsub
-
- Dim bSave as boolean, bPromptSave as boolean
- Dim sSaveTime as String
- Dim sFilename, sFilebak as String
- Dim i as Integer
-
- gApplication = "WRITER"
-
-
- sFilename = ConvertPath ( gOfficePath + "user\work\o_save.sxw" )
- sFilebak = ConvertPath ( gOfficePath + "user\backup\o_save.bak" )
-
- if app.Dir ( sFilename ) <> "" then app.kill ( sFilename )
- if app.Dir ( sFilebak ) <> "" then app.kill ( sFilebak )
-
- printlog " - save"
- printlog " - document properties before saving"
- printlog " open a new document"
- hNewDocument
-
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "tools/options/load-save/general: save-> edit document properties before saving<Return>"
- printlog " open tools / options / load & save / general"
- ToolsOptions
- hToolsOptions ( "LoadSave", "General" )
-
- printlog " check 'document properties before saving'"
- bSave = DokumenteigenschaftenBearbeiten.IsChecked
- DokumenteigenschaftenBearbeiten.Check
-
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (2)
- printlog " save the document"
-
- FileSaveAs
- Kontext "SpeichernDlg"
- Dateiname.SetText sFilename
- Sleep (1)
- Speichern.Click
- Sleep (1)
- kontext
- 'overwrite warning on rerun
- if active.exists(3) then
- active.yes
- endif
-
- printlog " activate all tabpages on properties dialog and cancel it"
- try
- Kontext
- active.SetPage( TabDokument)
- active.SetPage TabDokumentinfo
- active.SetPage TabBenutzer
- active.SetPage TabInternet
- active.SetPage TabStatistik
- Kontext "TabStatistik"
- TabStatistik.Cancel
- catch
- Warnlog "Perhaps the document properties aren't active after saving => the dialog come not up after file save!"
- endcatch
-
- printlog " - always create backup copy"
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "tools/options/load-save/general: save-> always create backup copy<Return>"
- printlog " open tools / options / load & save / general"
- ToolsOptions
- hToolsOptions ( "LoadSave", "General" )
-
- if bSave = TRUE then DokumenteigenschaftenBearbeiten.Check else DokumenteigenschaftenBearbeiten.UnCheck
- bSave = Sicherungskopie.IsChecked
- Sicherungskopie.Check
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (3)
-
- if app.Dir ( sFilebak ) <> "" then Warnlog "Before saving the document the backup-file exists!"
- hFileSave
- if app.Dir ( sFilebak ) = "" then Warnlog "After saving the document the backup-file doesn't exists => BUG!"
-
- printlog " - autosave : after 1 min, with prompt"
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "tools/options/load-save/general: save-> autosave after 1 min with prompt<Return>"
- ToolsOptions
- hToolsOptions ( "LoadSave", "General" )
-
- if bSave = TRUE then Sicherungskopie.Check else Sicherungskopie.UnCheck
- bSave = AutomatischSpeichern.IsChecked
- AutomatischSpeichern.Check
- sSaveTime = 15 'debug
-
- Minuten.SetText "2"
-
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (130)
-
- for i=1 to 2
- Kontext "Active"
- if Active.Exists (3) then
- Active.Yes
- Kontext "SpeichernDlg"
- if SpeichernDlg.Exists then SpeichernDlg.Cancel
- Sleep (2)
- printlog "Active came up :-) " + i
- else
- printlog "Active didn't come up :-( " + i
- end if
- next i
-
- printlog " - close the document and check the saved data"
- hCloseDocument ' closes the document with 'discard'
- hFileOpen ( sFilename )
-kontext
-if active.exists(5) then
-warnlog active.gettext
-goto endsub
-endif
- ' This part compares the content of the file after reload with text entered
- ' during the entire test. It should contain three lines of text.
- printlog( " - Compare the content of the file with the text entered during the test." )
- printlog( " First line..." )
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "<Up>", 5
- DocumentWriter.TypeKeys "<Home>"
- DocumentWriter.TypeKeys "<Shift End>"
- EditCopy
- WaitSlot()
- if lcase ( GetClipboardText ) <> "tools/options/load-save/general: save-> edit document properties before saving" then Warnlog "The first sentence is wrong!"
-
- printlog( " Second line..." )
- DocumentWriter.TypeKeys "<Down>"
- DocumentWriter.TypeKeys "<Home>"
- DocumentWriter.TypeKeys "<Shift End>"
- EditCopy
- WaitSlot()
- if lcase ( GetClipboardText ) <> "tools/options/load-save/general: save-> always create backup copy" then Warnlog "The second sentence is wrong!"
-
- printlog( " Third line..." )
- DocumentWriter.TypeKeys "<Down>"
- DocumentWriter.TypeKeys "<Home>"
- DocumentWriter.TypeKeys "<Shift End>"
- EditCopy
- WaitSlot()
- if lcase ( GetClipboardText ) <> "tools/options/load-save/general: save-> autosave after 1 min with prompt" then Warnlog "The third sentence is wrong!"
-
- hCloseDocument
-
- printlog " - load the backup-file"
- hOpenFile ( sFilebak )
-
- Kontext "Filterauswahl"
- if Filterauswahl.Exists(2) then
- warnlog "Is bugId 107399 present? => Detection of our own fileformar fails when the extension is not the standard extension!"
- Filterauswahl.Close
- else
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "<Up>", 5
- DocumentWriter.TypeKeys "<Home>"
- DocumentWriter.TypeKeys "<Shift End>"
- EditCopy
-
- WaitSlot()
-
- if GetClipboardText <> "" then
- call hCloseDocument
- else
- warnlog "Perhaps the bak-file was not loaded. => Verify BugID 86607!"
- end if
- end if
-
- printlog " - reset options"
- ToolsOptions
- hToolsOptions ( "LoadSave", "General" )
- AutomatischSpeichern.Check
- Minuten.SetText sSaveTime
- if bSave = TRUE then AutomatischSpeichern.Check else AutomatischSpeichern.UnCheck
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
-
-endcase
-
-' > * > * > * > * > * > * > * > * > * > * > * > * > * > * > * > *
-' > * > * > * > * > * > * > * > * > * > * > * > * > * > * > * > *
-testcase func_LoadSaveGeneral_2
- Dim bSave as Boolean
- Dim sFilename, sFilename2, sCharSet as String
-
- const ICWAIT as integer = 1
-
-
- sFilename = ConvertPath ( gOfficePath + "user\work\o_save_1.html" )
- sFilename2 = ConvertPath ( gOfficePath + "user\work\o_save_2.html" )
-
- if app.dir ( sFilename ) <> "" then app.kill ( sFilename )
- if app.dir ( sFilename2 ) <> "" then app.kill ( sFilename2 )
-
- printlog " - save"
- printlog " - save URL relative to"
-
- if bAsianLan = TRUE then
- sCharSet = GetHTMLCharSet
- if SetHTMLCharSetToUTF8 = FALSE then
- Warnlog "The test cannot find the UTF8 Character Set for HTML-Export. The test can have many errors at saving HTML-Files!"
- else
- printlog "The Character Set for HTML-Export is now Unicode UTF8!"
- end if
- end if
-
- gApplication = "HTML"
- hNewDocument
-
- if gNetzInst = TRUE then
- hGrafikEinfuegen ( ConvertPath ( gNetzOfficePath + "share\gallery\photos\desert1.jpg" ) )
- else
- hGrafikEinfuegen ( ConvertPath ( gOfficePath + "share\gallery\photos\desert1.jpg" ) )
- end if
-
- printlog " - relative to filesystem"
- ToolsOptions
- hToolsOptions ( "LoadSave", "General" )
-
- bSave = URLimDateisystem.IsChecked
- URLimDateisystem.Check
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (2)
-
- printlog " save the HTML file"
- hFileSaveAs ( sFilename )
-
- printlog " check the relativ path in source code of HTML file"
- Call URLGraphicCheck ( TRUE, sFilename )
-
- printlog " - relative to filesystem ( unchecked )"
- ToolsOptions
- hToolsOptions ( "LoadSave", "General" )
-
- URLimDateisystem.UnCheck
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (2)
-
- printlog " save the HTML file"
- hFileSaveAs ( sFilename2 )
-
- printlog " check the hard coded path in source code of HTML file"
- Call URLGraphicCheck ( FALSE, sFilename2 )
-
- hCloseDocument
-
- printlog " - reset the options"
- ToolsOptions
- hToolsOptions ( "LoadSave", "General" )
-
- if bSave = TRUE then URLimDateisystem.Check else URLimDateisystem.UnCheck
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (2)
-
- printlog "No test for 'relative to internet'"
-
- if bAsianLan = TRUE then
- printlog Chr(13 ) + "Reset the Character Set back to default : " + sCharSet
- SetHTMLCharSet ( sCharSet )
- end if
-
- gApplication = "WRITER"
-endcase
-
-
diff --git a/testautomation/framework/optional/includes/options_ooo_general.inc b/testautomation/framework/optional/includes/options_ooo_general.inc
index 8197a4fe54d9..0b218bff8493 100644..100755
--- a/testautomation/framework/optional/includes/options_ooo_general.inc
+++ b/testautomation/framework/optional/includes/options_ooo_general.inc
@@ -1,5 +1,5 @@
'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
+'*******************************************************************************
' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
'
' Copyright 2000, 2010 Oracle and/or its affiliates.
@@ -23,41 +23,21 @@
' <http://www.openoffice.org/license.html>
' for a copy of the LGPLv3 License.
'
-'/************************************************************************
+'/******************************************************************************
'*
-'* owner : thorsten.bosbach@sun.com
+'* owner : joerg.skottke@sun.com
'*
-'* short description : Grid Layout for CJK test in Writer
+'* short description : 1. test for general group userdata
'*
-'\***********************************************************************
+'\******************************************************************************
-private const SOURCE_PATH = "framework\optional\input\CJK\"
+testcase tOOoGeneral
-testcase tTextGridDialog_1
+ dim lsSave (4) as String
+ dim lbSave (3) as Boolean
- '/// Check if tabpage 'Text Grid' disappears when "Asian Language support" is NOT checked
- if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
- Call CheckAsianLanguageSupport("Off")
- hNewDocument()
- FormatPageWriter
- try
- Kontext
- Active.SetPage TabGrid
- Kontext "TabGrid"
- TabGrid.Cancel
- warnlog "Shouldn't get Tabpage: Grid Text"
- catch
- Kontext
- Active.SetPage TabSeite
- Kontext "TabSeite"
- TabSeite.Cancel
- endcatch
- endif
+ hNewDocument
- '/// Check if tabpage 'Text Grid' appears when "Asian Language support" is checked
- Call CheckAsianLanguageSupport("On")
-
- hNewDocument
ToolsOptions
hToolsOptions ( "StarOffice", "General" )
@@ -81,503 +61,71 @@ testcase tTextGridDialog_1
StyleSheet.Select 3
Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- if ( ExtrasOptionenDlg.notExists( 3 ) ) then
- printlog( "Options closed" )
- endif
- hCloseDocument()
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tTextGridDialog_2
- '/// No grid is active, no changes to existing version
- Dim testFile , sCorrectResult as String
-
- testFile = "gridtest.sxw"
- sCorrectResult = "1"
-
- Call hNewDocument
-
- '/// open a test file , and check No Grid checkbox
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
- sMakeReadOnlyDocumentEditable
-
- FormatPageWriter
- Kontext
- if active.exists(5) then
- Active.SetPage TabGrid
- endif
- Kontext "TabGrid"
- NoGrid.Check
- Sleep 1
- TabGrid.OK
- Sleep 1
-
- '/// Active navigator dialogue , set page to '2' and wait for a while
- Kontext
- ViewNavigator
- Kontext "NavigatorWriter"
-
- Seitennummer.SetText "2"
- Sleep 5
- hCloseNavigator
-
- '/// In No Grid mode, there should be only 1 page, the focus is before the first line
- Kontext "DocumentWriter"
- Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
- Call DocumentWriter.TypeKeys "<Shift Left>"
- hUseAsyncSlot( "EditCopy" )
-
- if GetClipboardText <> sCorrectResult then Warnlog "Something wrong when choosing NoGrid option!"
-
- Call hCloseDocument
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tTextGridDialog_3
- '/// Grid (lines only): The page is set up with a defined number of lines
- Dim testFile , sCorrectResult , sLinesPerPage as String
-
- testFile = "gridtest.sxw"
- sCorrectResult = "G"
- sLinesPerPage = "10"
-
- Call hNewDocument
-
- '/// open a test file and check Grid(lines onle) checkbox ,
- '/// + set 10 line/page
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
- sMakeReadOnlyDocumentEditable
- FormatPageWriter
- Kontext
- if active.exists(5) then
- Active.SetPage TabGrid
- endif
- Kontext "TabGrid"
- LinesGrid.Check
- LinesPerPage.SetText sLinesPerPage
- Sleep 1
- TabGrid.OK
- Sleep 1
-
- '/// Active navigator dialogue , set page to '2' and wait for a while
- Kontext
- ViewNavigator
- Kontext "NavigatorWriter"
-
- Seitennummer.SetText "2"
- Sleep 5
- hCloseNavigator
-
- Kontext "DocumentWriter"
- Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
- Call DocumentWriter.TypeKeys "<Shift Left>"
- hUseAsyncSlot( "EditCopy" )
-
- if GetClipboardText <> sCorrectResult then Warnlog "Something wrong when choosing Grid(lines only) option!"
-
- Call hCloseDocument
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tTextGridDialog_4
- '/// Grid (lines and characters): The page is set up with a defined number of lines and a defined number of characters in each line
- Dim testFile , sCorrectResult as String
- Dim sLinesPerPage , sCharsPerLine as String
- testFile = "gridtest.sxw"
- sCorrectResult = "E"
- sLinesPerPage = "10"
- sCharsPerLine = "9"
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
+ hCloseDocument
- Call hNewDocument
-
- '/// open a test file and check Grid(lines and characters) checkbox
- '/// + set 10 line/page and 9 characters/line
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
- sMakeReadOnlyDocumentEditable
- FormatPageWriter
- Kontext
- if active.exists(5) then
- Active.SetPage TabGrid
- endif
- Kontext "TabGrid"
- CharsGrid.Check
- LinesPerPage.SetText sLinesPerPage
- CharsPerLine.SetText sCharsPerLine
- Sleep 1
- TabGrid.OK
- Sleep 1
-
- '/// Active navigator dialogue , set page to '2' and wait for a while
- Kontext
- ViewNavigator
- Kontext "NavigatorWriter"
-
- Seitennummer.SetText "2"
- Sleep 5
- hCloseNavigator
-
- Kontext "DocumentWriter"
- Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
- Call DocumentWriter.TypeKeys "<Shift Left>"
- hUseAsyncSlot( "EditCopy" )
-
- if GetClipboardText <> sCorrectResult then Warnlog "Something wrong when choosing Grid(lines and characters) option!"
-
- Call hCloseDocument
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tGridDisplay_1
- '/// Print grid: The grid lines will be printed. Inactive if "Display grid" is inactive.
- Call hNewDocument
-
- '/// format / page / tabpage Text grid
- '/// + check "display grid" and check "print grid"
- FormatPageWriter
- Kontext
- if active.exists(5) then
- Active.SetPage TabGrid
- endif
- Kontext "TabGrid"
- CharsGrid.Check
- Display.Check
- Sleep 1
- PrintGrid.Check
- Sleep 1
- TabGrid.OK
- Sleep 1
-
- '/// Print to printer
- FilePrint
- Kontext "Active"
- if ( Active.Exists( 5 ) ) then
- if Active.GetRT() = 304 then
- Active.Ok()
- QAErrorLog "No Default-Printer!"
- Kontext "Printing"
- if ( Printing.exists( 1 )) then
- Printing.Cancel
- endif
- endif
- else
- Kontext "Printing"
- if ( Printing.exists( 2 )) then
- Printing.OK()
- Printing.notExists( 5 )
- endif
-
- kontext "Active"
- if active.exists(5) then
- qaErrorLog active.getText()
- active.ok()
- endif
- endif
-
- '/// format / page / tabpage Text grid
- '/// + check "display grid" and uncheck "print grid"
- FormatPageWriter
- Kontext
- if active.exists(5) then
- Active.SetPage TabGrid
- endif
- Kontext "TabGrid"
- CharsGrid.Check
- Display.Check
- Sleep 1
- PrintGrid.UnCheck
- Sleep 1
- TabGrid.OK
- Sleep 1
-
- '/// Print to printer
- FilePrint
- Kontext "Active"
- if ( Active.Exists( 5 ) )then
- if Active.GetRT() = 304 then
- Active.Ok()
- QAErrorLog "No Default-Printer!"
- Kontext "Printing"
- if ( Printing.exists( 1 )) then
- Printing.Cancel()
- endif
- endif
- else
- Kontext "Printing"
- if( Printing.exists( 1 )) then
- Printing.OK
- Printing.notExists( 5 )
- endif
- kontext
- if ( active.exists( 2 ) ) then
- qaErrorLog active.getText
- active.ok
- endif
- endif
-
- Call hCloseDocument
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tUserDefineLayout_1
- '/// Decrease characters per line will cause lines per page decrease accordingly
- Dim sLinesPerPage , sCharsPerLine as String
- Dim sExpectLinesPerPage , sExpectLinesPerPage1 as String
-
- sLinesPerPage = "20"
- sCharsPerLine = "2"
- sExpectLinesPerPage = "2"
- sExpectLinesPerPage1 = "3"
-
- Call hNewDocument
-
- '/// Format/page , set lines per page to 20, and set charsets per line to 2
- '/// + wait for a moment , then check the the number of lines per page.
- FormatPageWriter
- Kontext
- if active.exists(5) then
- Active.SetPage TabGrid
- endif
- Kontext "TabGrid"
- CharsGrid.Check
-
- LinesPerPage.SetText sLinesPerPage
- Sleep 2
- CharsPerLine.SetText sCharsPerLine
- Sleep 2
-
- 'This step is no use, just let the LinesPerPage change the number
- CharsGrid.Check
-
- if LinesPerPage.GetText <> sExpectLinesPerPage AND LinesPerPage.GetText <> sExpectLinesPerPage1 then
- Warnlog "The lines per page should be" + sExpectLinesPerPage + " OR " + sExpectLinesPerPage1 +" but get " +LinesPerPage.GetText
- endif
-
- TabGrid.Cancel
-
- Call hCloseDocument
-endcase
+ printlog " - exit/restart StarOffice"
+ ExitRestartTheOffice
-'-------------------------------------------------------------------------
-
-testcase tFontSizeChanges_1
- '/// Change the font size to bigger enough will change the layout
- Dim testFile , sCorrectResult as String
- Dim sLinesPerPage , sCharsPerLine as String
- dim sTemp as string
-
- testFile = "FontSizeChanges_1.sxw"
- sCorrectResult = "1"
- sLinesPerPage = "2"
- sCharsPerLine = "9"
-
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
- sMakeReadOnlyDocumentEditable
- Kontext "DocumentWriter"
- Call DocumentWriter.TypeKeys "<Shift Right>"
-
- Kontext "FormatObjectbar"
- Schriftgroesse.Select "60"
- Schriftgroesse.TypeKeys "<Return>"
- Sleep 1
-
- Kontext "DocumentWriter"
- FormatPageWriter
- Kontext
- if active.exists(5) then
- Active.SetPage TabGrid
- endif
- Kontext "TabGrid"
- if TabGrid.exists(5) then
- sTemp = LinesPerPage.GetText
- if sTemp <> sLinesPerPage then
- Warnlog "The lines per page should be: '" + sLinesPerPage + "'; but get: '" + sTemp + "'"
- endif
- sTemp = CharsPerLine.GetText
- if sTemp <> sCharsPerLine then
- Warnlog "The chars per line should be: '" + sCharsPerLine + "'; but get: '" +sTemp + "'"
- endif
- TabGrid.Cancel
- else
- warnlog "TabGrid is not available."
- endif
-
- Kontext
- ViewNavigator
- Kontext "NavigatorWriter"
- if NavigatorWriter.exists(5) then
- Seitennummer.SetText "2"
- Sleep 5
- else
- warnlog "Navigator not available"
- endif
- hCloseNavigator
-
- Kontext "DocumentWriter"
- sleep 3
- Call DocumentWriter.TypeKeys "<Shift Right>"
-
- hUseAsyncSlot( "EditCopy" )
- sTemp = GetClipboardText
- if sTemp <> sCorrectResult then
- Warnlog "Don't get the expected result , hope to be: '" + sCorrectResult + "'; but get: '" + sTemp + "'"
- endif
-
- Call hCloseDocument
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tRubyText_1
- '/// If Ruby Text is applied and longer than its Base Text it will stretch over more grid cells than the base text itself.
- Dim testFile , sRubyText as String
-
- testFile = "rubytest.sxw"
- sRubyText = "Ruby Test Text ....................."
-
- Call hNewDocument
-
- '/// open a test file , and insert long ruby test text
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
- sMakeReadOnlyDocumentEditable
- Kontext "DocumentWriter"
- Call DocumentWriter.TypeKeys "<Shift Right>"
- Sleep 1
-
- FormatRuby
- Kontext "RubyDialog"
- Sleep 3
- RubyText1.setText sRubyText
- Sleep 2
- RubyDialog.OK
- Sleep 2
- DialogClose.Click
- Sleep 1
-
- Kontext "DocumentWriter"
- FormatAutoformatApply
- Sleep 2
- Call DocumentWriter.TypeKeys "<End>"
- Sleep 2
- Call DocumentWriter.TypeKeys "<Shift Left>"
- hUseAsyncSlot( "EditCopy" )
-
- if NOT(GetClipboardText = "5" OR GetClipboardText = "6") then
- Warnlog "Don't get the correct result after inserting ruby text! Get " + GetClipboardText
- endif
-
- Call hCloseDocument
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tIndentsTest_1
- '/// Indents should work and always indenting as close as possible to their measurements by snapping to the appropriate grid cell. Tabs therefore will be ignored.
- Dim testFile , sCorrectPage1 , sCorrectPage2 as String
-
- testFile = "IndentsTest.sxw"
- sCorrectPage1 = "1"
- sCorrectPage2 = "2"
-
- Call hNewDocument
-
- '/// open a test file , and press TAB in second line
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
- sMakeReadOnlyDocumentEditable
- Kontext "DocumentWriter"
- Call DocumentWriter.TypeKeys "<Down>"
- Sleep 1
- Call DocumentWriter.TypeKeys "<Tab>"
- Sleep 1
- Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
-
- '/// Active navigator dialogue , check if the page number is 1
- Kontext
- ViewNavigator
- Kontext "NavigatorWriter"
- if Seitennummer.GetText <> sCorrectPage1 then Warnlog "First test :Something wrong in indents test!"
- hCloseNavigator
-
- '/// press TAB in second line again
- Kontext "DocumentWriter"
- Call DocumentWriter.TypeKeys "<Home>"
- Sleep 1
- Call DocumentWriter.TypeKeys "<Tab>"
- Sleep 1
- Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
-
- '/// Active navigator dialogue , check if the page number is 2
- Kontext
- ViewNavigator
- Kontext "NavigatorWriter"
- if Seitennummer.GetText <> sCorrectPage2 then Warnlog "Second test :Something wrong in indents test!"
- hCloseNavigator
-
- Call hCloseDocument
-endcase
-
-'-------------------------------------------------------------------------
-
-testcase tObjectsTest_1
- '/// If objects are anchored to text they will "wander" with its surrounding text.
- '/// If they are anchored as character they will snap to the appropriate grid cell (since they are a character).
- Dim testFile , sCorrectPage1 , sCorrectPage2 as String
+ printlog " - check data"
+ ToolsOptions
+ hToolsOptions ( "StarOffice", "General" )
- testFile = "objectsTest.sxw"
- sCorrectPage1 = "1"
- sCorrectPage2 = "2"
+ if Zweistellig.GetText <> "1950" then Warnlog "Year ( 2 digits ) => changes not saved: '" + Zweistellig.GetText +"' #i29810"
+ if Aktivieren.IsChecked <> TRUE then Warnlog "Enable HelpAgent => changes not saved"
+ Zuruecksetzen.Click
+ if gPlatgroup = "w95" then
+ if StarOfficeDialogeBenutzen.IsChecked = lbSave (2) then Warnlog "Use StarOffice dialogs => changes not saved!"
+ end if
+ If DruckenStatus.IsChecked = lbSave ( 3 ) then Warnlog "Printing sets 'Document modified' status => changes not saved!"
- Call hNewDocument
+ printlog " - 2. change data"
+ Zweistellig.SetText "1800"
+ DruckenStatus.UnCheck
- '/// open a test file , and press TAB in second line
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
+ Kontext "ExtrasOptionenDlg"
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
- '/// If object is anchored as Character , check if it will snap to the appropriate grid cell
- fStartupNavigator( "OLEObject" , 1 )
- Sleep 1
- Auswahlliste.TypeKeys "<Return>"
- Sleep 1
- hCloseNavigator
+ printlog " - check data"
+ ToolsOptions
+ hToolsOptions ( "StarOffice", "General" )
- Kontext
- FormatAnchorAsCharacter
- WaitSlot()
+ if Zweistellig.GetText <> "1800" then Warnlog "Year ( 2 digits ) => changes not saved : '" + Zweistellig.GetText +"'"
+ If DruckenStatus.IsChecked <> FALSE then Warnlog "Printing sets 'Document modified' status => changes not saved!"
+ if StyleSheet.GetSelIndex <> 3 then Warnlog "Style sheet for StarOffice Help => changes not saved!"
+ printlog " - reset to saved data"
+ Zweistellig.SetText lsSave ( 1 )
+ Aktivieren.Check
+ Zuruecksetzen.Click
+ if lbSave (1) = TRUE then Aktivieren.Check else Aktivieren.Uncheck
+ if gPlatgroup = "w95" then
+ if lbSave (2) = TRUE then StarOfficeDialogeBenutzen.Check else StarOfficeDialogeBenutzen.UnCheck
+ end if
+ If lbSave(3)= TRUE then DruckenStatus.Check else DruckenStatus.UnCheck
+ StyleSheet.Select lsSave(3)
- ViewNavigator
- Kontext "NavigatorWriter"
- Seitennummer.SetText sCorrectPage2
- Sleep 5
- if Seitennummer.GetText <> sCorrectPage2 then Warnlog "Something wrong when object is anchored as Character!"
- hCloseNavigator
+ Kontext "ExtrasOptionenDlg"
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
- '/// If object is anchored to Character , check if it will NOT snap to the appropriate grid cell
- fStartupNavigator( "OLEObject" , 1 )
- Auswahlliste.TypeKeys "<Return>"
- hCloseNavigator
+ ToolsOptions
+ hToolsOptions ( "StarOffice", "General" )
- Kontext
- FormatAnchorToCharacter
+ printlog " - check the reset data"
+ if Zweistellig.GetText <> lsSave ( 1 ) then Warnlog "Year ( 2 digits ) => changes not saved"
+ if Aktivieren.IsChecked <> lbSave (1) then Warnlog "Enable HelpAgent => changes not saved"
+ Aktivieren.Check
+ Zuruecksetzen.Click
+ if lbSave (1) = TRUE then Aktivieren.Check else Aktivieren.Uncheck
+ if gPlatgroup = "w95" then
+ if StarOfficeDialogeBenutzen.IsChecked <> lbSave (2) then Warnlog "Use StarOffice dialogs => changes not saved!"
+ end if
+ If DruckenStatus.IsChecked <> lbSave(3) then Warnlog "Printing sets 'Document modified' status => changes not saved!"
+ if StyleSheet.GetSelText <> lsSave (3) then Warnlog "Style sheet for StarOffice Help => changes not saved!"
- ViewNavigator
- Kontext "NavigatorWriter"
- Seitennummer.SetText sCorrectPage2
- Sleep 5
- if Seitennummer.GetText <> sCorrectPage1 then Warnlog "Something wrong when object is anchored to Character!"
- hCloseNavigator
- Kontext
+ Kontext "ExtrasOptionenDlg"
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
- Call hCloseDocument
endcase
diff --git a/testautomation/framework/optional/includes/options_ooo_security.inc b/testautomation/framework/optional/includes/options_ooo_security.inc
index c3dece4de849..be542fc71689 100644..100755
--- a/testautomation/framework/optional/includes/options_ooo_security.inc
+++ b/testautomation/framework/optional/includes/options_ooo_security.inc
@@ -91,13 +91,6 @@ sub checkSecurityPage( _file as string )
warnlog( "Failed to open Security options" )
endif
- Kontext "TabSecurity"
- if ( TabSecurity.exists() ) then
- checkCheckBox( _file , "*" , RecommendToOpenDocumentReadOnly )
- checkCheckBox( _file , "*" , RecordChanges )
- else
- warnlog( "Could not return to Security Tabpage" )
- endif
else
warnlog( "Security Tabpage not available" )
endif
@@ -110,6 +103,9 @@ sub changeSecurityPage( _file as string )
printlog( " * Changing current settings according to the reference list." )
printlog( " * Using settings from file: " & _file )
+
+ kontext "TabSecurity"
+ if ( TabSecurity.exists() ) then
Options.click
Kontext "TabSecurityOptionsAndWarnings"
@@ -120,12 +116,12 @@ sub changeSecurityPage( _file as string )
setCheckBox( _file , "*" , RemovePersonalInformationOnSaving )
setCheckBox( _file , "*" , RecommendPasswordProtectionOnSaving )
TabSecurityOptionsAndWarnings.cancel
- Kontext "TabSecurity"
- setCheckBox( _file , "*" , RecommendToOpenDocumentReadOnly )
- setCheckBox( _file , "*" , RecordChanges )
Kontext "OptionenDLG"
OptionenDLG.OK
+ else
+ warnlog( "Security Tabpage not available" )
+ endif
sleep(2)
call exitRestartTheOffice()
diff --git a/testautomation/framework/optional/includes/scripting_organizers.inc b/testautomation/framework/optional/includes/scripting_organizers.inc
index b9b7dcebde7a..d5159cd383ee 100644..100755
--- a/testautomation/framework/optional/includes/scripting_organizers.inc
+++ b/testautomation/framework/optional/includes/scripting_organizers.inc
@@ -178,7 +178,7 @@ testcase tScriptingOrganizers( iDialog as integer )
endif
kontext "ScriptOrganizer"
- brc = hCloseScriptOrganizer()
+ hCloseDialog( ScriptOrganizer, "close" )
printlog( "" )
printlog( "Test 3: Script storage in documents (save/load)" )
@@ -225,7 +225,7 @@ testcase tScriptingOrganizers( iDialog as integer )
endif
kontext "ScriptOrganizer"
- brc = hCloseScriptOrganizer()
+ hCloseDialog( ScriptOrganizer, "close" )
try
hFileSave
@@ -250,7 +250,8 @@ testcase tScriptingOrganizers( iDialog as integer )
iItemCount = hGetNodeCount( ScriptTreeList )
if ( iItemCount <> IDOCPOS ) then
warnlog( "Treelist not populated, the test cannot continue" )
- brc = hCloseScriptOrganizer()
+ kontext "ScriptOrganizer"
+ hCloseDialog( ScriptOrganizer, "close" )
brc = hDestroyDocument()
goto endsub
endif
@@ -260,9 +261,11 @@ testcase tScriptingOrganizers( iDialog as integer )
warnlog( "Not all libraries/scripts have been deleted" )
endif
- brc = hCloseScriptOrganizer()
+ kontext "ScriptOrganizer"
+ hCloseDialog( ScriptOrganizer, "close" )
- brc = hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
brc = hDestroyDocument()
diff --git a/testautomation/framework/optional/includes/security_certification_dialogs.inc b/testautomation/framework/optional/includes/security_certification_dialogs.inc
index 2b645712cc02..18c47c36d5fa 100644..100755
--- a/testautomation/framework/optional/includes/security_certification_dialogs.inc
+++ b/testautomation/framework/optional/includes/security_certification_dialogs.inc
@@ -32,8 +32,6 @@
'\******************************************************************************
testcase tCertificationDialogs
-
-
dim brc as boolean
const CFN = "tCertificationDialogs::"
const SVERSION = "680"
@@ -44,16 +42,23 @@ testcase tCertificationDialogs
hDeleteFile( sFile )
- call hNewDocument()
+ hNewDocument()
- call hChangeDoc()
+ hChangeDoc()
- brc = hOpenDigitalSignaturesDialog()
+ hOpenDigitalSignaturesDialog()
kontext "active"
if ( active.exists( 1 ) ) then
printlog( "MSGBOX: " & active.getText() )
- active.yes()
+ try
+ active.yes()
+ catch
+ warnlog( CFN & "This is not the expected messagebox, aborting test" )
+ active.ok()
+ hCloseDocument()
+ goto endsub
+ endcatch
printlog( CFN & "Allow to save the document" )
else
if ( gApplication <> "MASTERDOCUMENT" ) then
@@ -91,8 +96,5 @@ testcase tCertificationDialogs
endif
call hCloseDocument()
-
-
-
endcase
diff --git a/testautomation/framework/optional/includes/security_certified_docs.inc b/testautomation/framework/optional/includes/security_certified_docs.inc
index 59f74e809c6f..b00e5460e3fb 100644..100755
--- a/testautomation/framework/optional/includes/security_certified_docs.inc
+++ b/testautomation/framework/optional/includes/security_certified_docs.inc
@@ -52,14 +52,14 @@ testcase tLoadCertifiedFile( cBuildID as string )
sFileOut = hGetWorkPath() & "certificate_data.txt"
' Variable to store boolean returncodes from functions
- dim brc as boolean
- brc = true
+ dim brc as boolean : brc = true
+ dim irc as boolean : irc = 0
' the number of certificates attached to the current document
dim iCertCount as integer
printlog( "Load the file" )
- brc = hFileOpen( cFile )
+ hFileOpen( cFile )
brc = hHandleActivesOnLoad( 0 , 2 )
' in case the file did not get loaded, handle the problem by aborting the test
@@ -122,12 +122,8 @@ testcase tLoadCertifiedFile( cBuildID as string )
kontext "TabXMLSecDetails"
hGetListItems( XMLSecDetailsListBox, sCertData() )
- brc = hManageComparisionList( sFileIn, sFileOut, sCertData() )
- if ( not brc ) then
- warnlog( "The data of the certificate appears to be incorrect" )
- else
- printlog( "Verification of the certificate succeeded" )
- endif
+ irc = hManageComparisionList( sFileIn, sFileOut, sCertData() )
+ hListResultEvaluation( irc , 0 )
SkipEditBrowseBox:
diff --git a/testautomation/framework/optional/includes/security_incorrect_password.inc b/testautomation/framework/optional/includes/security_incorrect_password.inc
index eedbc8c67896..2478a59d6294 100644..100755
--- a/testautomation/framework/optional/includes/security_incorrect_password.inc
+++ b/testautomation/framework/optional/includes/security_incorrect_password.inc
@@ -32,37 +32,31 @@
'\******************************************************************************
testcase tIncorrectPassword( filetypeID as string )
-
- const WORKFILE = "password"
- dim suffix as string
- dim workpath as string
-
- dim rc as integer
- dim brc as boolean
dim iCurrentFilter as integer
dim cCurrentFilter as string
+ dim filepath as string
const PASSWORD_VALID = "MyPasswd09#+1"
const PASSWORD_FALSE = "MyPasswd00#+1"
const DOC_ID = "f_sec_incorrect_password.bas testdocument"
-
- workpath = hGetWorkPath()
-
- suffix = hGetSuffix( filetypeID )
+
+ printlog( "Build a valid filename with full path and suffix" )
+ filepath = hGetWorkPath() & "password" & hGetSuffix( filetypeID )
+ printlog( "The workfile is: " & filepath )
printlog( "Delete the workfile - if it was left over by a former testrun" )
- hDeleteFile( workpath & WORKFILE & suffix )
+ hDeleteFile( filepath )
printlog( "Make sure we have exactly one single document open" )
hFileCloseAll()
- hCreateDocument()
+ hCreateDocument() ' Do not use hInitSingleDoc() here as it creates a Writer document
printlog( "Change the document" )
hChangeDoc()
printlog( "Click on FileSave" )
- FileSave
+ hUseAsyncSlot( "FileSave" )
Kontext "SpeichernDlg"
if ( SpeichernDlg.exists( 1 ) ) then
@@ -92,9 +86,7 @@ testcase tIncorrectPassword( filetypeID as string )
printlog( "Click on the Save-Button" )
Speichern.click()
- brc = hSecurityEnterPasswordOnSave( PASSWORD_VALID )
-
- if ( brc ) then
+ if ( hSecurityEnterPasswordOnSave( PASSWORD_VALID ) ) then
kontext "AlienWarning"
if ( AlienWarning.exists( 3 ) ) then
@@ -107,8 +99,7 @@ testcase tIncorrectPassword( filetypeID as string )
endif
printlog( "Close the document" )
- brc = hDestroyDocument()
- if ( not brc ) then
+ if ( not hDestroyDocument() ) then
warnlog( "Something went wrong while closing the document. please check" )
endif
@@ -118,8 +109,7 @@ testcase tIncorrectPassword( filetypeID as string )
printlog( "Load the file again" )
hFileOpen( workpath & WORKFILE & suffix )
- brc = hSecurityEnterPasswordOnLoad( PASSWORD_FALSE , false )
- if ( not brc ) then
+ if ( not hSecurityEnterPasswordOnLoad( PASSWORD_FALSE , false ) ) then
warnlog( "Something went wrong while using the password dialog" )
endif
diff --git a/testautomation/framework/optional/includes/security_macrosecurity.inc b/testautomation/framework/optional/includes/security_macrosecurity.inc
index b996ff4a2cf8..1c9d360da9e6 100644..100755
--- a/testautomation/framework/optional/includes/security_macrosecurity.inc
+++ b/testautomation/framework/optional/includes/security_macrosecurity.inc
@@ -59,7 +59,10 @@ testcase tMacroSecurityLevels( cFileFormat )
cWorkFile = convertToURL( cWorkFile )
dim iSecLevel as integer
- dim brc as boolean
+
+ const EXPECTED_MESSAGECOUNT = 1
+ const ALLOW_ONE_EXTRA_MESSAGEBOX = 1
+ const ALLOW_NO_EXTRA_MESSAGEBOXES = 0
' We have quite a bunch of possible combinations here. Some trigger a security warning
' others do not. Depending on the security level we either get no warning at all, the
@@ -76,7 +79,7 @@ testcase tMacroSecurityLevels( cFileFormat )
' *) Covered by test "f_sec_trusted_path.bas"
printlog( "Load a document with macro for each of the four security levels" )
- for iSecLevel = 0 to 3
+ for iSecLevel = GC_MACRO_SECURITY_LEVEL_LOW to GC_MACRO_SECURITY_LEVEL_VERYHIGH
printlog( "Set macro security level to " & iSecLevel )
hSetMacroSecurityAPI( iSecLevel )
@@ -86,46 +89,46 @@ testcase tMacroSecurityLevels( cFileFormat )
printlog( "Check security level dependent behavior" )
select case iSecLevel
- case 0 : brc = hIdentifyExecutedMacro()
- if ( not brc ) then
- if ( gApplication = "MATH" ) then
- qaerrorlog( "#i68291# Math document forgets eventbinding" )
- else
- warnlog( "#i53711# Macro was not found/executed" )
- endif
- endif
-
- case 1 : brc = hAllowMacroExecution()
- if ( not brc ) then
- warnlog( "Macro execution warning missing, chek the file/security settings" )
- endif
- brc = hIdentifyExecutedMacro()
- if ( not brc ) then
- if ( gApplication = "MATH" ) then
- qaerrorlog( "#i68291# Math document forgets eventbinding" )
- else
- warnlog( "#i53711# Macro was not found/executed" )
- endif
- endif
-
- case 2 : brc = hHandleActivesOnLoad( 1 , 1 )
- if ( not brc ) then
- qaerrorlog( "#i53710# unexpected second messagebox" )
- endif
- brc = hIdentifyExecutedMacro()
- if ( brc ) then
- warnlog( "Macro was executed" )
- endif
-
- case 3 : brc = hHandleActivesOnLoad( 1 , 0 )
- brc = hIdentifyExecutedMacro()
- if ( brc ) then
- warnlog( "Macro was executed" )
- endif
+ case GC_MACRO_SECURITY_LEVEL_LOW :
+
+ if ( not hIdentifyExecutedMacro() ) then
+ warnlog( "#i110184# - Macro was not executed" )
+ endif
+
+ case GC_MACRO_SECURITY_LEVEL_MEDIUM :
+
+ if ( not hAllowMacroExecution() ) then
+ warnlog( "#i110184# - Macro execution warning missing, check the file/security settings" )
+ endif
+
+ if ( not hIdentifyExecutedMacro() ) then
+ warnlog( "#i110184# - Macro was not executed" )
+ endif
+
+ case GC_MACRO_SECURITY_LEVEL_HIGH :
+
+ if ( not hHandleActivesOnLoad( EXPECTED_MESSAGECOUNT , ALLOW_ONE_EXTRA_MESSAGEBOX ) ) then
+ warnlog( "#i53710# unexpected second messagebox" )
+ endif
+
+ if ( hIdentifyExecutedMacro() ) then
+ warnlog( "Macro was executed" )
+ endif
+
+ case GC_MACRO_SECURITY_LEVEL_VERYHIGH :
+
+ if ( not hHandleActivesOnLoad( EXPECTED_MESSAGECOUNT , ALLOW_NO_EXTRA_MESSAGEBOXES ) ) then
+ warnlog( "#i53710# unexpected second messagebox" )
+ endif
+
+ if ( hIdentifyExecutedMacro() ) then
+ warnlog( "Macro was executed" )
+ endif
+
end select
printlog( "Close document" )
- brc = hDestroyDocument()
+ hDestroyDocument()
next iSecLevel
diff --git a/testautomation/framework/optional/includes/security_recommend_password.inc b/testautomation/framework/optional/includes/security_recommend_password.inc
index eaceab3691b9..628fdecd7ae5 100644..100755
--- a/testautomation/framework/optional/includes/security_recommend_password.inc
+++ b/testautomation/framework/optional/includes/security_recommend_password.inc
@@ -80,11 +80,8 @@ testcase tRecommendPassword( filetypeID as string )
if ( rc = 0 ) then
- if AutomatischeDateinamenserweiterung.Exists then
- AutomatischeDateinamenserweiterung.Uncheck
- endif
-
-
+ AutomatischeDateinamenserweiterung.Uncheck
+
printlog( "Name the file" )
Dateiname.settext( workpath & workfile )
@@ -117,6 +114,5 @@ testcase tRecommendPassword( filetypeID as string )
printlog( "Close the current document" )
call hCloseDocument()
-
endcase
diff --git a/testautomation/framework/optional/includes/standardbar2.inc b/testautomation/framework/optional/includes/standardbar2.inc
index a4252179b198..3d2b87f33b7b 100644..100755
--- a/testautomation/framework/optional/includes/standardbar2.inc
+++ b/testautomation/framework/optional/includes/standardbar2.inc
@@ -90,9 +90,10 @@ testcase tStandardBar_2
sleep( 1 )
hMenuselectNr ( iNewButtonItem )
- sleep( 3 )
+ hFileWait() ' was sleep( 3 )
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
select case iNewButtonItem
case 1 : Kontext "DocumentWriter"
diff --git a/testautomation/framework/optional/includes/w_grid_layout1.inc b/testautomation/framework/optional/includes/w_grid_layout1.inc
index 737cf850ad65..772ebc6d9d00 100644
--- a/testautomation/framework/optional/includes/w_grid_layout1.inc
+++ b/testautomation/framework/optional/includes/w_grid_layout1.inc
@@ -35,11 +35,17 @@ private const SOURCE_PATH = "framework\optional\input\CJK\"
testcase tTextGridDialog_1
+ dim lsSave( 3 ) as string
+ dim lbSave( 3 ) as boolean
+
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
+
'/// Check if tabpage 'Text Grid' disappears when "Asian Language support" is NOT checked
if iSystemSprache <> 81 AND iSystemSprache <> 82 AND iSystemSprache <> 86 AND iSystemSprache <> 88 then
Call CheckAsianLanguageSupport("Off")
hNewDocument()
- FormatPageWriter
+ hUseAsyncSlot( "FormatPageWriter" )
try
Kontext
Active.SetPage TabGrid
@@ -57,26 +63,33 @@ testcase tTextGridDialog_1
'/// Check if tabpage 'Text Grid' appears when "Asian Language support" is checked
Call CheckAsianLanguageSupport("On")
- sleep 5
- FormatPageWriter
- Kontext
- if Active.exists (10) then
- try
- Kontext
- Active.SetPage TabGrid
- Kontext "TabGrid"
- TabGrid.Cancel
- catch
- Kontext
- Active.SetPage TabSeite
- Kontext "TabSeite"
- TabSeite.Cancel
- warnlog "Couldn't get Tabpage: Grid Text"
- endcatch
- else
- warnlog "FormatPageWriter didn't bring up ndialog"
- endif
- hCloseDocument()
+ hNewDocument
+ ToolsOptions
+ hToolsOptions ( "StarOffice", "General" )
+
+ printlog " - save old data"
+ lsSave ( 1 ) = Zweistellig.GetText
+ lbSave ( 1 ) = Aktivieren.IsChecked
+ Aktivieren.Check
+ if gPlatgroup = "w95" then
+ lbSave (2) = StarOfficeDialogeBenutzen.IsChecked
+ end if
+ lbSave ( 3 ) = DruckenStatus.IsChecked
+ lsSave ( 3 ) = StyleSheet.GetSelText
+
+ printlog " - invert/change data"
+ Zweistellig.SetText "1950"
+ Zuruecksetzen.Click
+ if gPlatgroup = "w95" then
+ if lbSave (2) = TRUE then StarOfficeDialogeBenutzen.Uncheck else StarOfficeDialogeBenutzen.Check
+ end if
+ If lbSave ( 3 ) = TRUE then DruckenStatus.Uncheck else DruckenStatus.Check
+ StyleSheet.Select 3
+
+ Kontext "ExtrasOptionenDlg"
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
+ hFileCloseAll()
+
endcase
'-------------------------------------------------------------------------
@@ -94,30 +107,28 @@ testcase tTextGridDialog_2
Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
sMakeReadOnlyDocumentEditable
- FormatPageWriter
+ hUseAsyncSlot( "FormatPageWriter" )
Kontext
if active.exists(5) then
Active.SetPage TabGrid
endif
Kontext "TabGrid"
NoGrid.Check
- Sleep 1
- TabGrid.OK
- Sleep 1
+ hCloseDialog( TabGrid, "ok" )
+
'/// Active navigator dialogue , set page to '2' and wait for a while
Kontext
ViewNavigator
Kontext "NavigatorWriter"
-
- Seitennummer.SetText "2"
- Sleep 5
- hCloseNavigator
+ Seitennummer.SetText "2" : Wait( 2000 )
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
'/// In No Grid mode, there should be only 1 page, the focus is before the first line
Kontext "DocumentWriter"
Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
+ wait( 200 ) ' sleep 1
Call DocumentWriter.TypeKeys "<Shift Left>"
hUseAsyncSlot( "EditCopy" )
@@ -142,7 +153,7 @@ testcase tTextGridDialog_3
'/// + set 10 line/page
Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
sMakeReadOnlyDocumentEditable
- FormatPageWriter
+ hUseAsyncSlot( "FormatPageWriter" )
Kontext
if active.exists(5) then
Active.SetPage TabGrid
@@ -150,22 +161,19 @@ testcase tTextGridDialog_3
Kontext "TabGrid"
LinesGrid.Check
LinesPerPage.SetText sLinesPerPage
- Sleep 1
- TabGrid.OK
- Sleep 1
+ hCloseDialog( TabGrid, "ok" )
'/// Active navigator dialogue , set page to '2' and wait for a while
Kontext
ViewNavigator
Kontext "NavigatorWriter"
-
- Seitennummer.SetText "2"
- Sleep 5
- hCloseNavigator
+ Seitennummer.SetText "2" : Wait( 2000 )
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
Kontext "DocumentWriter"
Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
+ wait( 200 ) ' sleep 1
Call DocumentWriter.TypeKeys "<Shift Left>"
hUseAsyncSlot( "EditCopy" )
@@ -192,7 +200,7 @@ testcase tTextGridDialog_4
'/// + set 10 line/page and 9 characters/line
Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
sMakeReadOnlyDocumentEditable
- FormatPageWriter
+ hUseAsyncSlot( "FormatPageWriter" )
Kontext
if active.exists(5) then
Active.SetPage TabGrid
@@ -201,22 +209,19 @@ testcase tTextGridDialog_4
CharsGrid.Check
LinesPerPage.SetText sLinesPerPage
CharsPerLine.SetText sCharsPerLine
- Sleep 1
- TabGrid.OK
- Sleep 1
+ hCloseDialog( TabGrid, "ok" )
'/// Active navigator dialogue , set page to '2' and wait for a while
Kontext
ViewNavigator
Kontext "NavigatorWriter"
-
- Seitennummer.SetText "2"
- Sleep 5
- hCloseNavigator
+ Seitennummer.SetText "2" : Wait( 2000 )
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
Kontext "DocumentWriter"
Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
+ wait( 200 ) ' sleep 1
Call DocumentWriter.TypeKeys "<Shift Left>"
hUseAsyncSlot( "EditCopy" )
@@ -233,7 +238,7 @@ testcase tGridDisplay_1
'/// format / page / tabpage Text grid
'/// + check "display grid" and check "print grid"
- FormatPageWriter
+ hUseAsyncSlot( "FormatPageWriter" )
Kontext
if active.exists(5) then
Active.SetPage TabGrid
@@ -241,14 +246,12 @@ testcase tGridDisplay_1
Kontext "TabGrid"
CharsGrid.Check
Display.Check
- Sleep 1
PrintGrid.Check
- Sleep 1
- TabGrid.OK
- Sleep 1
+ hCloseDialog( TabGrid, "ok" )
+
'/// Print to printer
- FilePrint
+ hUseAsyncSlot( "FilePrint" )
Kontext "Active"
if ( Active.Exists( 5 ) ) then
if Active.GetRT() = 304 then
@@ -262,7 +265,7 @@ testcase tGridDisplay_1
else
Kontext "Printing"
if ( Printing.exists( 2 )) then
- printing.cancel()
+ Printing.OK()
Printing.notExists( 5 )
endif
@@ -283,11 +286,8 @@ testcase tGridDisplay_1
Kontext "TabGrid"
CharsGrid.Check
Display.Check
- Sleep 1
PrintGrid.UnCheck
- Sleep 1
- TabGrid.OK
- Sleep 1
+ hCloseDialog( TabGrid, "ok" )
'/// Print to printer
FilePrint
@@ -303,10 +303,8 @@ testcase tGridDisplay_1
endif
else
Kontext "Printing"
- if( Printing.exists( 1 )) then
- printing.cancel()
- Printing.notExists( 5 )
- endif
+ hCloseDialog( Printing, "ok" )
+
kontext
if ( active.exists( 2 ) ) then
qaErrorLog active.getText
@@ -333,7 +331,7 @@ testcase tUserDefineLayout_1
'/// Format/page , set lines per page to 20, and set charsets per line to 2
'/// + wait for a moment , then check the the number of lines per page.
- FormatPageWriter
+ hUseAsyncSlot( "FormatPageWriter" )
Kontext
if active.exists(5) then
Active.SetPage TabGrid
@@ -342,16 +340,13 @@ testcase tUserDefineLayout_1
CharsGrid.Check
LinesPerPage.SetText sLinesPerPage
- Sleep 2
CharsPerLine.SetText sCharsPerLine
- Sleep 2
'This step is no use, just let the LinesPerPage change the number
CharsGrid.Check
if LinesPerPage.GetText <> sExpectLinesPerPage AND LinesPerPage.GetText <> sExpectLinesPerPage1 then
- Warnlog( "#i106381# - LInes per page changed" )
- printlog( "The lines per page should be" + sExpectLinesPerPage & " OR " & sExpectLinesPerPage1 & " but get " &LinesPerPage.GetText )
+ Warnlog "The lines per page should be" + sExpectLinesPerPage + " OR " + sExpectLinesPerPage1 +" but get " +LinesPerPage.GetText
endif
TabGrid.Cancel
@@ -362,7 +357,6 @@ endcase
'-------------------------------------------------------------------------
testcase tFontSizeChanges_1
-
'/// Change the font size to bigger enough will change the layout
Dim testFile , sCorrectResult as String
Dim sLinesPerPage , sCharsPerLine as String
@@ -381,10 +375,9 @@ testcase tFontSizeChanges_1
Kontext "FormatObjectbar"
Schriftgroesse.Select "60"
Schriftgroesse.TypeKeys "<Return>"
- Sleep 1
Kontext "DocumentWriter"
- FormatPageWriter
+ hUseAsyncSlot( "FormatPageWriter" )
Kontext
if active.exists(5) then
Active.SetPage TabGrid
@@ -393,11 +386,11 @@ testcase tFontSizeChanges_1
if TabGrid.exists(5) then
sTemp = LinesPerPage.GetText
if sTemp <> sLinesPerPage then
- Warnlog "The lines per page should be: '" & sLinesPerPage & "'; but get: '" & sTemp & "'"
+ Warnlog "The lines per page should be: '" + sLinesPerPage + "'; but get: '" + sTemp + "'"
endif
sTemp = CharsPerLine.GetText
if sTemp <> sCharsPerLine then
- Warnlog "The chars per line should be: '" & sCharsPerLine & "'; but get: '" &sTemp & "'"
+ Warnlog "The chars per line should be: '" + sCharsPerLine + "'; but get: '" +sTemp + "'"
endif
TabGrid.Cancel
else
@@ -408,21 +401,21 @@ testcase tFontSizeChanges_1
ViewNavigator
Kontext "NavigatorWriter"
if NavigatorWriter.exists(5) then
- Seitennummer.SetText "2"
- Sleep 5
+ Seitennummer.SetText "2" : Wait( 2000 )
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
else
- warnlog "Navigator not available"
+ warnlog( "Navigator not open" )
endif
- hCloseNavigator
Kontext "DocumentWriter"
- sleep 3
+ wait( 200 ) ' sleep 3
Call DocumentWriter.TypeKeys "<Shift Right>"
hUseAsyncSlot( "EditCopy" )
sTemp = GetClipboardText
if sTemp <> sCorrectResult then
- Warnlog "Don't get the expected result , hope to be: '" & sCorrectResult & "'; but get: '" & sTemp & "'"
+ Warnlog "Don't get the expected result , hope to be: '" + sCorrectResult + "'; but get: '" + sTemp + "'"
endif
Call hCloseDocument
@@ -431,41 +424,51 @@ endcase
'-------------------------------------------------------------------------
testcase tRubyText_1
- '/// If Ruby Text is applied and longer than its Base Text it will stretch over more grid cells than the base text itself.
- Dim testFile , sRubyText as String
- testFile = "rubytest.sxw"
- sRubyText = "Ruby Test Text ....................."
+ '/// If Ruby Text is applied and longer than its Base Text it will stretch over more grid cells than the base text itself.
+ const TEST_FILE = "rubytest.sxw"
+ const RUBY_TEXT = "Ruby Test Text ....................."
+ printlog( "Create a new document" )
Call hNewDocument
- '/// open a test file , and insert long ruby test text
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
- sMakeReadOnlyDocumentEditable
+ printlog( "Open test file" )
+ Call hFileOpen ( gTesttoolPath + SOURCE_PATH + TEST_FILE )
+
+ printlog( "Remove write protection of document (if set)" )
+ Call sMakeReadOnlyDocumentEditable()
+
Kontext "DocumentWriter"
+ printlog( "Mark character to the right of current cursor position" )
Call DocumentWriter.TypeKeys "<Shift Right>"
- Sleep 1
- FormatRuby
+ printlog( "Open <Format Ruby> dialog" )
+ hUseAsyncSlot( "FormatRuby" )
+
Kontext "RubyDialog"
- Sleep 3
- RubyText1.setText sRubyText
- Sleep 2
- RubyDialog.OK
- Sleep 2
- DialogClose.Click
- Sleep 1
+ if ( RubyDialog.exists( 3 ) ) then
+ RubyText1.setText( RUBY_TEXT )
+ RubyDialog.OK
+ DialogClose.Click
+ else
+ warnlog( "Ruby dialog not open" )
+ endif
Kontext "DocumentWriter"
- FormatAutoformatApply
- Sleep 2
+ printlog( "Apply Autoformat" )
+ hUseAsyncSlot( "FormatAutoformatApply" )
+
+ printlog( "Select last character in current line" )
Call DocumentWriter.TypeKeys "<End>"
- Sleep 2
+ Wait( 200 )
Call DocumentWriter.TypeKeys "<Shift Left>"
+ Wait( 200 )
+
+ printlog( "<EditCopy>" )
hUseAsyncSlot( "EditCopy" )
if NOT(GetClipboardText = "5" OR GetClipboardText = "6") then
- Warnlog "Don't get the correct result after inserting ruby text! Get " & GetClipboardText
+ Warnlog "Don't get the correct result after inserting ruby text! Get " + GetClipboardText
endif
Call hCloseDocument
@@ -475,47 +478,54 @@ endcase
testcase tIndentsTest_1
'/// Indents should work and always indenting as close as possible to their measurements by snapping to the appropriate grid cell. Tabs therefore will be ignored.
- Dim testFile , sCorrectPage1 , sCorrectPage2 as String
- testFile = "IndentsTest.sxw"
- sCorrectPage1 = "1"
- sCorrectPage2 = "2"
+ const TEST_FILE = "IndentsTest.sxw"
+ const CORRECT_PAGE_1 = "1"
+ const CORRECT_PAGE_2 = "2"
Call hNewDocument
'/// open a test file , and press TAB in second line
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
+ Call hFileOpen ( gTesttoolPath + SOURCE_PATH + TEST_FILE )
+
sMakeReadOnlyDocumentEditable
+
Kontext "DocumentWriter"
Call DocumentWriter.TypeKeys "<Down>"
- Sleep 1
+ wait( 200 ) ' sleep 1
Call DocumentWriter.TypeKeys "<Tab>"
- Sleep 1
+ wait( 200 ) ' sleep 1
Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
+ wait( 200 ) ' sleep 1
'/// Active navigator dialogue , check if the page number is 1
Kontext
ViewNavigator
Kontext "NavigatorWriter"
- if Seitennummer.GetText <> sCorrectPage1 then Warnlog "First test :Something wrong in indents test!"
- hCloseNavigator
+ if ( Seitennummer.GetText <> CORRECT_PAGE_1 ) then
+ Warnlog "First test :Something wrong in indents test!"
+ endif
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
'/// press TAB in second line again
Kontext "DocumentWriter"
Call DocumentWriter.TypeKeys "<Home>"
- Sleep 1
+ wait( 200 ) ' sleep 1
Call DocumentWriter.TypeKeys "<Tab>"
- Sleep 1
+ wait( 200 ) ' sleep 1
Call DocumentWriter.TypeKeys "<End>"
- Sleep 1
+ wait( 200 ) ' sleep 1
'/// Active navigator dialogue , check if the page number is 2
Kontext
ViewNavigator
Kontext "NavigatorWriter"
- if Seitennummer.GetText <> sCorrectPage2 then Warnlog "Second test :Something wrong in indents test!"
- hCloseNavigator
+ if ( Seitennummer.GetText <> CORRECT_PAGE_2 ) then
+ Warnlog "Second test :Something wrong in indents test!"
+ endif
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
Call hCloseDocument
endcase
@@ -525,23 +535,23 @@ endcase
testcase tObjectsTest_1
'/// If objects are anchored to text they will "wander" with its surrounding text.
'/// If they are anchored as character they will snap to the appropriate grid cell (since they are a character).
- Dim testFile , sCorrectPage1 , sCorrectPage2 as String
- testFile = "objectsTest.sxw"
- sCorrectPage1 = "1"
- sCorrectPage2 = "2"
+ const TEST_FILE = "objectsTest.sxw"
+ const CORRECT_PAGE_1 = "1"
+ const CORRECT_PAGE_2 = "2"
Call hNewDocument
'/// open a test file , and press TAB in second line
- Call hFileOpen ( gTesttoolPath + SOURCE_PATH + testFile )
+ Call hFileOpen ( gTesttoolPath + SOURCE_PATH + TEST_FILE )
'/// If object is anchored as Character , check if it will snap to the appropriate grid cell
fStartupNavigator( "OLEObject" , 1 )
- Sleep 1
+ wait( 200 ) ' sleep 1
Auswahlliste.TypeKeys "<Return>"
- Sleep 1
- hCloseNavigator
+ wait( 200 ) ' sleep 1
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
Kontext
FormatAnchorAsCharacter
@@ -550,26 +560,32 @@ testcase tObjectsTest_1
ViewNavigator
Kontext "NavigatorWriter"
- Seitennummer.SetText sCorrectPage2
- Sleep 5
- if Seitennummer.GetText <> sCorrectPage2 then Warnlog "Something wrong when object is anchored as Character!"
- hCloseNavigator
+ Seitennummer.SetText( CORRECT_PAGE_1 )
+ WaitSlot( 5000 ) ' wait( 200 ) ' sleep 5
+ if ( Seitennummer.GetText <> CORRECT_PAGE_1 ) then
+ Warnlog "Something wrong when object is anchored as Character!"
+ endif
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
'/// If object is anchored to Character , check if it will NOT snap to the appropriate grid cell
fStartupNavigator( "OLEObject" , 1 )
Auswahlliste.TypeKeys "<Return>"
- hCloseNavigator
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
Kontext
FormatAnchorToCharacter
ViewNavigator
Kontext "NavigatorWriter"
- Seitennummer.SetText sCorrectPage2
- Sleep 5
- if Seitennummer.GetText <> sCorrectPage1 then Warnlog "Something wrong when object is anchored to Character!"
- hCloseNavigator
- Kontext
+ Seitennummer.SetText( CORRECT_PAGE_2 )
+ WaitSlot( 5000 ) ' wait( 200 ) ' sleep 5
+ if ( Seitennummer.GetText <> CORRECT_PAGE_1 ) then
+ Warnlog "Something wrong when object is anchored to Character!"
+ endif
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
Call hCloseDocument
endcase
diff --git a/testautomation/framework/optional/input/filternames/Oracle Open Office_Filternames_add_en-US.txt b/testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_add_en-US.txt
index bf0c1e00851e..bf0c1e00851e 100644
--- a/testautomation/framework/optional/input/filternames/Oracle Open Office_Filternames_add_en-US.txt
+++ b/testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_add_en-US.txt
diff --git a/testautomation/framework/optional/input/filternames/Oracle Open Office_Filternames_en-US.txt b/testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_en-US.txt
index 85d580c71554..85d580c71554 100644
--- a/testautomation/framework/optional/input/filternames/Oracle Open Office_Filternames_en-US.txt
+++ b/testautomation/framework/optional/input/filternames/Oracle_Open_Office_Filternames_en-US.txt
diff --git a/testautomation/framework/optional/input/help_browser/OpenOffice.org_help_topic_en-US.txt b/testautomation/framework/optional/input/help_browser/OpenOffice.org_help_topic_en-US.txt
deleted file mode 100755
index dc53c4a69a17..000000000000
--- a/testautomation/framework/optional/input/help_browser/OpenOffice.org_help_topic_en-US.txt
+++ /dev/null
@@ -1,22162 +0,0 @@
-OpenOffice.org Basic : "^" operator (mathematical)
-OpenOffice.org Basic : "-" operator (mathematical)
-OpenOffice.org Basic : "*" operator (mathematical)
-OpenOffice.org Basic : "/" operator (mathematical)
-OpenOffice.org Basic : "+" operator (mathematical)
-OpenOffice.org Basic : 1/2 replacement
-OpenOffice.org Basic : 3D text creation
-OpenOffice.org Basic : 3D view
-OpenOffice.org Basic : abbreviation replacement
-OpenOffice.org Basic : Abs function
-OpenOffice.org Basic : absolute hyperlinks
-OpenOffice.org Basic : absolute saving of URLs
-OpenOffice.org Basic : accents
-OpenOffice.org Basic : Access databases (base)
-OpenOffice.org Basic : access rights for database tables (Base)
-OpenOffice.org Basic : accessibility
-OpenOffice.org Basic : accessibility;general shortcuts
-OpenOffice.org Basic : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Basic : accessibility;OpenOffice.org features
-OpenOffice.org Basic : accessibility;options
-OpenOffice.org Basic : activating
-OpenOffice.org Basic : activating;context menus
-OpenOffice.org Basic : activating;Error Report Tool
-OpenOffice.org Basic : activating;extended help tips
-OpenOffice.org Basic : activating;plug-ins
-OpenOffice.org Basic : ActiveX control
-OpenOffice.org Basic : Adabas D databases (base)
-OpenOffice.org Basic : add-ons, see UNO components
-OpenOffice.org Basic : adding
-OpenOffice.org Basic : adding;automatic captions (Writer)
-OpenOffice.org Basic : adding;backgrounds
-OpenOffice.org Basic : adding;Basic libraries
-OpenOffice.org Basic : adding;buttons in toolbars
-OpenOffice.org Basic : adding;conditions for XForm items
-OpenOffice.org Basic : adding;draw objects
-OpenOffice.org Basic : adding;Fontwork objects
-OpenOffice.org Basic : adding;items in Data Navigator
-OpenOffice.org Basic : adding;namespaces in XForms
-OpenOffice.org Basic : adding;paragraph borders
-OpenOffice.org Basic : adding;pictures from Gallery
-OpenOffice.org Basic : adding;pictures in Gallery
-OpenOffice.org Basic : adding;plug-ins
-OpenOffice.org Basic : adding;push buttons
-OpenOffice.org Basic : adding;table borders
-OpenOffice.org Basic : adding;textures on chart bars
-OpenOffice.org Basic : adding libraries
-OpenOffice.org Basic : additional selection mode
-OpenOffice.org Basic : address books
-OpenOffice.org Basic : address books;LDAP server (Base)
-OpenOffice.org Basic : address books;registering
-OpenOffice.org Basic : address labels from databases
-OpenOffice.org Basic : ADO databases (Base)
-OpenOffice.org Basic : Agenda Wizard
-OpenOffice.org Basic : aging filter
-OpenOffice.org Basic : aligning
-OpenOffice.org Basic : aligning;cells
-OpenOffice.org Basic : aligning;objects
-OpenOffice.org Basic : aligning;paragraphs
-OpenOffice.org Basic : aligning;tables in text
-OpenOffice.org Basic : aligning;text objects
-OpenOffice.org Basic : alternative fonts
-OpenOffice.org Basic : ampersand symbol in StarBasic
-OpenOffice.org Basic : ampersand symbol, see also operators
-OpenOffice.org Basic : anchors
-OpenOffice.org Basic : anchors;changing
-OpenOffice.org Basic : anchors;displaying (Calc)
-OpenOffice.org Basic : anchors;types/positions for draw objects
-OpenOffice.org Basic : AND operator (logical)
-OpenOffice.org Basic : animations
-OpenOffice.org Basic : animations;accessibility options
-OpenOffice.org Basic : appearance options
-OpenOffice.org Basic : applet insertion
-OpenOffice.org Basic : applying
-OpenOffice.org Basic : applying;languages, to selected text
-OpenOffice.org Basic : Arabic
-OpenOffice.org Basic : Arabic;entering text
-OpenOffice.org Basic : Arabic;language settings
-OpenOffice.org Basic : areas
-OpenOffice.org Basic : areas;bitmap patterns
-OpenOffice.org Basic : areas;hatched/dotted
-OpenOffice.org Basic : areas;shadows
-OpenOffice.org Basic : areas;slanting
-OpenOffice.org Basic : areas;styles
-OpenOffice.org Basic : areas;transparency
-OpenOffice.org Basic : arguments in command line
-OpenOffice.org Basic : arranging
-OpenOffice.org Basic : arranging;objects
-OpenOffice.org Basic : Array function
-OpenOffice.org Basic : arrays
-OpenOffice.org Basic : arrays;declaring
-OpenOffice.org Basic : arrays;dimensioning
-OpenOffice.org Basic : arrows
-OpenOffice.org Basic : arrows;defining arrow heads
-OpenOffice.org Basic : arrows;defining arrow lines
-OpenOffice.org Basic : arrows;drawing in text
-OpenOffice.org Basic : Asc function
-OpenOffice.org Basic : ASCII
-OpenOffice.org Basic : ASCII;definition
-OpenOffice.org Basic : Asian languages
-OpenOffice.org Basic : Asian languages;enabling
-OpenOffice.org Basic : Asian Phonetic Guide
-OpenOffice.org Basic : Asian typography
-OpenOffice.org Basic : assigning macros to events
-OpenOffice.org Basic : assigning scripts
-OpenOffice.org Basic : assistive technology in OpenOffice.org
-OpenOffice.org Basic : Atn function
-OpenOffice.org Basic : attaching toolbars
-OpenOffice.org Basic : attachments in e-mails
-OpenOffice.org Basic : audio
-OpenOffice.org Basic : audio;inserting
-OpenOffice.org Basic : audio;UNIX
-OpenOffice.org Basic : auto reloading HTML documents
-OpenOffice.org Basic : AutoAbstract function for sending text to presentations
-OpenOffice.org Basic : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Basic : AutoComplete function in text and list boxes
-OpenOffice.org Basic : AutoCorrect function
-OpenOffice.org Basic : AutoCorrect function;context menu
-OpenOffice.org Basic : AutoCorrect function;options
-OpenOffice.org Basic : AutoCorrect function;pictures and frames
-OpenOffice.org Basic : AutoCorrect function;quotes
-OpenOffice.org Basic : AutoCorrect function;replacement table
-OpenOffice.org Basic : AutoCorrect function;smart tags
-OpenOffice.org Basic : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Basic : AutoCorrect function;URL recognition
-OpenOffice.org Basic : AutoFormat function
-OpenOffice.org Basic : AutoFormat function;switching on and off
-OpenOffice.org Basic : automatic captions (Writer)
-OpenOffice.org Basic : automatic control focus
-OpenOffice.org Basic : automatic hyperlink formatting
-OpenOffice.org Basic : automatic line breaks
-OpenOffice.org Basic : automatic lines/borders in text
-OpenOffice.org Basic : automatic saving
-OpenOffice.org Basic : AutoPilots, see wizards
-OpenOffice.org Basic : AutoShapes feature in Microsoft Office
-OpenOffice.org Basic : axes in charts
-OpenOffice.org Basic : backgrounds
-OpenOffice.org Basic : backgrounds;defining colors/pictures
-OpenOffice.org Basic : backgrounds;frames/sections/indexes
-OpenOffice.org Basic : backgrounds;inserting from Gallery
-OpenOffice.org Basic : backgrounds;printing
-OpenOffice.org Basic : backing window
-OpenOffice.org Basic : backups
-OpenOffice.org Basic : backups;automatic
-OpenOffice.org Basic : backups;documents
-OpenOffice.org Basic : Basic
-OpenOffice.org Basic : Basic;fonts for source display
-OpenOffice.org Basic : Basic;programming
-OpenOffice.org Basic : Basic;recording macros
-OpenOffice.org Basic : Basic;scripting
-OpenOffice.org Basic : Basic editor
-OpenOffice.org Basic : basic fonts
-OpenOffice.org Basic : Basic IDE
-OpenOffice.org Basic : Basic IDE;Integrated Development Environment
-OpenOffice.org Basic : Basic IDE;macros
-OpenOffice.org Basic : BasicLibraries (LibraryContainer)
-OpenOffice.org Basic : BeanShell scripting
-OpenOffice.org Basic : Beep statement
-OpenOffice.org Basic : Bézier curves
-OpenOffice.org Basic : Bézier curves;control points in presentations
-OpenOffice.org Basic : bi-directional writing
-OpenOffice.org Basic : binding space
-OpenOffice.org Basic : bitmaps
-OpenOffice.org Basic : bitmaps;inserting and editing
-OpenOffice.org Basic : bitmaps;off for faster printing
-OpenOffice.org Basic : bitmaps;patterns
-OpenOffice.org Basic : black and white printing
-OpenOffice.org Basic : black printing in Calc
-OpenOffice.org Basic : block selection mode
-OpenOffice.org Basic : Blue function
-OpenOffice.org Basic : bold
-OpenOffice.org Basic : bold;AutoFormat function
-OpenOffice.org Basic : bold;text
-OpenOffice.org Basic : bookmarks
-OpenOffice.org Basic : bookmarks;Help
-OpenOffice.org Basic : borders
-OpenOffice.org Basic : borders;arranging
-OpenOffice.org Basic : borders;cells on screen (Calc)
-OpenOffice.org Basic : borders;for paragraphs
-OpenOffice.org Basic : borders;for tables
-OpenOffice.org Basic : borders;shadows
-OpenOffice.org Basic : borders;table boundaries (Writer)
-OpenOffice.org Basic : borders, see also frames
-OpenOffice.org Basic : bound fields
-OpenOffice.org Basic : bound fields;controls
-OpenOffice.org Basic : boundaries of tables (Writer)
-OpenOffice.org Basic : break display (Writer)
-OpenOffice.org Basic : breakpoints
-OpenOffice.org Basic : brochures
-OpenOffice.org Basic : brochures;printing several
-OpenOffice.org Basic : build numbers of OpenOffice.org
-OpenOffice.org Basic : bullet lists
-OpenOffice.org Basic : bullet lists;formatting options
-OpenOffice.org Basic : bullets
-OpenOffice.org Basic : bullets;paragraphs
-OpenOffice.org Basic : bullets;replacing
-OpenOffice.org Basic : bullets;turning off
-OpenOffice.org Basic : business cards
-OpenOffice.org Basic : business cards;creating and synchronizing
-OpenOffice.org Basic : business cards;using templates
-OpenOffice.org Basic : button bars, see toolbars
-OpenOffice.org Basic : buttons
-OpenOffice.org Basic : buttons;adding push buttons
-OpenOffice.org Basic : buttons;big/small
-OpenOffice.org Basic : buttons;controls
-OpenOffice.org Basic : buttons;editing hyperlink buttons
-OpenOffice.org Basic : buttons;form functions
-OpenOffice.org Basic : buttons;toolbars
-OpenOffice.org Basic : cache for graphics
-OpenOffice.org Basic : calculating
-OpenOffice.org Basic : calculating;iterative references (Calc)
-OpenOffice.org Basic : Call Stack window
-OpenOffice.org Basic : Call statement
-OpenOffice.org Basic : callouts
-OpenOffice.org Basic : callouts;drawings
-OpenOffice.org Basic : capital letters
-OpenOffice.org Basic : capital letters;AutoCorrect function
-OpenOffice.org Basic : capital letters;font effects
-OpenOffice.org Basic : captions
-OpenOffice.org Basic : captions;automatic captions (Writer)
-OpenOffice.org Basic : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Basic : captions, see also labels/callouts
-OpenOffice.org Basic : cascading update (Base)
-OpenOffice.org Basic : case sensitivity
-OpenOffice.org Basic : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Basic : case sensitivity;searching
-OpenOffice.org Basic : Case statement
-OpenOffice.org Basic : CBool function
-OpenOffice.org Basic : CByte function
-OpenOffice.org Basic : CCur function
-OpenOffice.org Basic : CDate function
-OpenOffice.org Basic : CdateFromIso function
-OpenOffice.org Basic : CdateToIso function
-OpenOffice.org Basic : CDbl function
-OpenOffice.org Basic : CDec function
-OpenOffice.org Basic : cells
-OpenOffice.org Basic : cells;aligning
-OpenOffice.org Basic : cells;backgrounds
-OpenOffice.org Basic : cells;coloring (Calc)
-OpenOffice.org Basic : cells;cursor positions after input (Calc)
-OpenOffice.org Basic : cells;formatting without effect (Calc)
-OpenOffice.org Basic : cells;line breaks
-OpenOffice.org Basic : cells;linked to controls
-OpenOffice.org Basic : cells;number formats
-OpenOffice.org Basic : cells;number of
-OpenOffice.org Basic : cells;pasting
-OpenOffice.org Basic : cells;resetting formats
-OpenOffice.org Basic : cells;showing grid lines (Calc)
-OpenOffice.org Basic : centered text
-OpenOffice.org Basic : centimeters
-OpenOffice.org Basic : certificates
-OpenOffice.org Basic : Change Case feature in Microsoft Office
-OpenOffice.org Basic : changes
-OpenOffice.org Basic : changes;accepting or rejecting
-OpenOffice.org Basic : changes;comparing to original
-OpenOffice.org Basic : changes;protecting
-OpenOffice.org Basic : changes;recording
-OpenOffice.org Basic : changes;review function
-OpenOffice.org Basic : changes;showing
-OpenOffice.org Basic : changing
-OpenOffice.org Basic : changing;control properties
-OpenOffice.org Basic : changing;data binding of XForms
-OpenOffice.org Basic : changing;default templates
-OpenOffice.org Basic : changing;document titles
-OpenOffice.org Basic : changing;file associations in Setup program
-OpenOffice.org Basic : changing;hyperlink text/formats/URLs
-OpenOffice.org Basic : changing;icon sizes
-OpenOffice.org Basic : changing;keyboard
-OpenOffice.org Basic : changing;links
-OpenOffice.org Basic : changing;menus
-OpenOffice.org Basic : changing;object sizes
-OpenOffice.org Basic : changing;toolbars
-OpenOffice.org Basic : changing;work directory
-OpenOffice.org Basic : changing, see also editing and replacing
-OpenOffice.org Basic : character styles
-OpenOffice.org Basic : character styles;language selection
-OpenOffice.org Basic : characters
-OpenOffice.org Basic : characters;alternative fonts
-OpenOffice.org Basic : characters;Asian layout
-OpenOffice.org Basic : characters;bold
-OpenOffice.org Basic : characters;coloring
-OpenOffice.org Basic : characters;contours
-OpenOffice.org Basic : characters;displaying only on screen (Writer)
-OpenOffice.org Basic : characters;enabling CTL and Asian characters
-OpenOffice.org Basic : characters;font effects
-OpenOffice.org Basic : characters;fonts and formats
-OpenOffice.org Basic : characters;hyperlinks
-OpenOffice.org Basic : characters;italics
-OpenOffice.org Basic : characters;language selection
-OpenOffice.org Basic : characters;shadowed
-OpenOffice.org Basic : characters;spacing
-OpenOffice.org Basic : characters;special
-OpenOffice.org Basic : characters;underlining
-OpenOffice.org Basic : charcoal sketches filter
-OpenOffice.org Basic : charts
-OpenOffice.org Basic : charts;arranging within stacks
-OpenOffice.org Basic : charts;bars with textures
-OpenOffice.org Basic : charts;colors
-OpenOffice.org Basic : charts;copying with link to source cell range
-OpenOffice.org Basic : charts;displaying (Calc)
-OpenOffice.org Basic : charts;editing axes
-OpenOffice.org Basic : charts;editing data
-OpenOffice.org Basic : charts;editing legends
-OpenOffice.org Basic : charts;editing titles
-OpenOffice.org Basic : charts;inserting
-OpenOffice.org Basic : charts;updating automatically (Writer)
-OpenOffice.org Basic : ChDir statement
-OpenOffice.org Basic : ChDrive statement
-OpenOffice.org Basic : check box control
-OpenOffice.org Basic : check box creation
-OpenOffice.org Basic : Chinese writing systems
-OpenOffice.org Basic : Choose function
-OpenOffice.org Basic : choosing printers
-OpenOffice.org Basic : Chr function
-OpenOffice.org Basic : CInt function
-OpenOffice.org Basic : circle drawings
-OpenOffice.org Basic : Client Side ImageMap
-OpenOffice.org Basic : clipboard
-OpenOffice.org Basic : clipboard;cutting
-OpenOffice.org Basic : clipboard;pasting
-OpenOffice.org Basic : clipboard;pasting formatted/unformatted text
-OpenOffice.org Basic : clipboard;selection clipboard
-OpenOffice.org Basic : clipboard;Unix
-OpenOffice.org Basic : CLng function
-OpenOffice.org Basic : Close statement
-OpenOffice.org Basic : closing
-OpenOffice.org Basic : closing;documents
-OpenOffice.org Basic : closing;toolbars
-OpenOffice.org Basic : color bar
-OpenOffice.org Basic : colors
-OpenOffice.org Basic : colors;adding
-OpenOffice.org Basic : colors;appearance
-OpenOffice.org Basic : colors;backgrounds
-OpenOffice.org Basic : colors;charts
-OpenOffice.org Basic : colors;fill format
-OpenOffice.org Basic : colors;fonts
-OpenOffice.org Basic : colors;grid lines and cells (Calc)
-OpenOffice.org Basic : colors;models
-OpenOffice.org Basic : colors;not printing
-OpenOffice.org Basic : colors;printing in grayscale
-OpenOffice.org Basic : colors;restriction (Calc)
-OpenOffice.org Basic : colors;selection
-OpenOffice.org Basic : column headers
-OpenOffice.org Basic : column headers;displaying (Calc)
-OpenOffice.org Basic : column headers;highlighting (Calc)
-OpenOffice.org Basic : columns
-OpenOffice.org Basic : columns;setting with the mouse
-OpenOffice.org Basic : combo box control
-OpenOffice.org Basic : combo box creation
-OpenOffice.org Basic : command button creation
-OpenOffice.org Basic : command buttons, see push buttons
-OpenOffice.org Basic : command line parameters
-OpenOffice.org Basic : commands
-OpenOffice.org Basic : commands;not visible
-OpenOffice.org Basic : commands;SQL
-OpenOffice.org Basic : comments
-OpenOffice.org Basic : comments;on changes
-OpenOffice.org Basic : comments;Rem statement
-OpenOffice.org Basic : comments feature in Microsoft Office
-OpenOffice.org Basic : common terms
-OpenOffice.org Basic : common terms;Chinese dictionary
-OpenOffice.org Basic : common terms;glossaries
-OpenOffice.org Basic : common terms;Internet glossary
-OpenOffice.org Basic : Compare and Merge feature in Microsoft Office
-OpenOffice.org Basic : comparison operators
-OpenOffice.org Basic : comparison operators;OpenOffice.org Basic
-OpenOffice.org Basic : comparisons
-OpenOffice.org Basic : comparisons;document versions
-OpenOffice.org Basic : comparisons;operators in default filter dialog
-OpenOffice.org Basic : compatibility settings for MS Word import
-OpenOffice.org Basic : complete screen view
-OpenOffice.org Basic : complex text layout
-OpenOffice.org Basic : complex text layout;definition
-OpenOffice.org Basic : complex text layout;enabling
-OpenOffice.org Basic : components
-OpenOffice.org Basic : components;addressing
-OpenOffice.org Basic : compose key to insert special characters
-OpenOffice.org Basic : concatenation, see ampersand symbol
-OpenOffice.org Basic : conditional separators
-OpenOffice.org Basic : conditions
-OpenOffice.org Basic : conditions;in number formats
-OpenOffice.org Basic : conditions;items in Data Navigator
-OpenOffice.org Basic : Configuration Manager
-OpenOffice.org Basic : configuring
-OpenOffice.org Basic : configuring;fax icon
-OpenOffice.org Basic : configuring;OpenOffice.org
-OpenOffice.org Basic : configuring;toolbars
-OpenOffice.org Basic : connections to data sources (Base)
-OpenOffice.org Basic : Const statement
-OpenOffice.org Basic : constants
-OpenOffice.org Basic : contents protection
-OpenOffice.org Basic : context menus
-OpenOffice.org Basic : continuation
-OpenOffice.org Basic : continuation;long lines in editor
-OpenOffice.org Basic : contours of text
-OpenOffice.org Basic : control point display in presentations
-OpenOffice.org Basic : controls
-OpenOffice.org Basic : controls;activating in forms
-OpenOffice.org Basic : controls;adding to documents
-OpenOffice.org Basic : controls;arranging in forms
-OpenOffice.org Basic : controls;arranging within stacks
-OpenOffice.org Basic : controls;assigning data sources
-OpenOffice.org Basic : controls;bound fields/list contents/linked cells
-OpenOffice.org Basic : controls;changing properties
-OpenOffice.org Basic : controls;creating in the dialog editor
-OpenOffice.org Basic : controls;events
-OpenOffice.org Basic : controls;focus
-OpenOffice.org Basic : controls;formatted fields
-OpenOffice.org Basic : controls;grouping
-OpenOffice.org Basic : controls;hidden
-OpenOffice.org Basic : controls;in dialog editor
-OpenOffice.org Basic : controls;inserting
-OpenOffice.org Basic : controls;multi-line titles
-OpenOffice.org Basic : controls;positions and sizes
-OpenOffice.org Basic : controls;printing
-OpenOffice.org Basic : controls;properties
-OpenOffice.org Basic : controls;properties of form controls
-OpenOffice.org Basic : controls;properties of table controls
-OpenOffice.org Basic : controls;reading or editing properties (example)
-OpenOffice.org Basic : controls;reference by SQL
-OpenOffice.org Basic : controls;rich text control
-OpenOffice.org Basic : controls;select mode
-OpenOffice.org Basic : controls;showing (Writer)
-OpenOffice.org Basic : converters
-OpenOffice.org Basic : converters;Euro converter
-OpenOffice.org Basic : converters;PostScript, UNIX
-OpenOffice.org Basic : converters;XML
-OpenOffice.org Basic : ConvertFromURL function
-OpenOffice.org Basic : converting
-OpenOffice.org Basic : converting;Hangul/Hanja
-OpenOffice.org Basic : converting;metrics
-OpenOffice.org Basic : converting;Microsoft documents
-OpenOffice.org Basic : converting;OpenOffice.org documents
-OpenOffice.org Basic : converting;Pocket PC formats
-OpenOffice.org Basic : ConvertToURL function
-OpenOffice.org Basic : copies
-OpenOffice.org Basic : copies;printing
-OpenOffice.org Basic : copying
-OpenOffice.org Basic : copying;by drag and drop
-OpenOffice.org Basic : copying;data from text documents
-OpenOffice.org Basic : copying;datasource records in spreadsheets
-OpenOffice.org Basic : copying;draw objects
-OpenOffice.org Basic : copying;draw objects between documents
-OpenOffice.org Basic : copying;formatting
-OpenOffice.org Basic : copying;from data source view
-OpenOffice.org Basic : copying;from Gallery
-OpenOffice.org Basic : copying;in Unix
-OpenOffice.org Basic : copying;modules
-OpenOffice.org Basic : copying;pictures, between documents
-OpenOffice.org Basic : copying;sheet areas, to text documents
-OpenOffice.org Basic : copying;to Gallery
-OpenOffice.org Basic : copyright for OpenOffice.org
-OpenOffice.org Basic : corner roundings
-OpenOffice.org Basic : Cos function
-OpenOffice.org Basic : crash reports
-OpenOffice.org Basic : CreateObject function
-OpenOffice.org Basic : CreateUnoDialog function
-OpenOffice.org Basic : CreateUnoListener function
-OpenOffice.org Basic : CreateUnoService function
-OpenOffice.org Basic : CreateUnoStruct function
-OpenOffice.org Basic : CreateUnoValue function
-OpenOffice.org Basic : criteria of query design (Base)
-OpenOffice.org Basic : cropping pictures
-OpenOffice.org Basic : CSng function
-OpenOffice.org Basic : CStr function
-OpenOffice.org Basic : CTL
-OpenOffice.org Basic : CTL;complex text layout languages
-OpenOffice.org Basic : CTL;definition
-OpenOffice.org Basic : CTL;options
-OpenOffice.org Basic : CurDir function
-OpenOffice.org Basic : currencies
-OpenOffice.org Basic : currencies;converters
-OpenOffice.org Basic : currencies;formats and format codes
-OpenOffice.org Basic : currency field control
-OpenOffice.org Basic : currency field creation
-OpenOffice.org Basic : currency formats
-OpenOffice.org Basic : cursor
-OpenOffice.org Basic : cursor;allowing in protected areas (Writer)
-OpenOffice.org Basic : cursor;in read-only text
-OpenOffice.org Basic : cursor;quickly moving to an object
-OpenOffice.org Basic : curves
-OpenOffice.org Basic : curves;editing points
-OpenOffice.org Basic : custom dictionaries
-OpenOffice.org Basic : custom dictionaries;editing
-OpenOffice.org Basic : custom hyphens (Writer)
-OpenOffice.org Basic : custom quotes
-OpenOffice.org Basic : custom templates
-OpenOffice.org Basic : customizing
-OpenOffice.org Basic : customizing;events
-OpenOffice.org Basic : customizing;keyboard
-OpenOffice.org Basic : customizing;menus
-OpenOffice.org Basic : customizing;OpenOffice.org
-OpenOffice.org Basic : customizing;round corners
-OpenOffice.org Basic : customizing;toolbars
-OpenOffice.org Basic : cutting
-OpenOffice.org Basic : CVar function
-OpenOffice.org Basic : CVErr function
-OpenOffice.org Basic : dashes
-OpenOffice.org Basic : data
-OpenOffice.org Basic : data;filtering in forms
-OpenOffice.org Basic : data;forms and subforms
-OpenOffice.org Basic : data;read-only
-OpenOffice.org Basic : data;sorting in forms
-OpenOffice.org Basic : data;user data
-OpenOffice.org Basic : data binding change in XForms
-OpenOffice.org Basic : Data Navigator display options
-OpenOffice.org Basic : data source browser
-OpenOffice.org Basic : data source explorer
-OpenOffice.org Basic : data source view
-OpenOffice.org Basic : data source view;drag and drop
-OpenOffice.org Basic : data source view;overview
-OpenOffice.org Basic : data source view;showing
-OpenOffice.org Basic : data sources
-OpenOffice.org Basic : data sources;as tables
-OpenOffice.org Basic : data sources;connection settings (Base)
-OpenOffice.org Basic : data sources;copying records to spreadsheets
-OpenOffice.org Basic : data sources;displaying current
-OpenOffice.org Basic : data sources;LDAP server (Base)
-OpenOffice.org Basic : data sources;OpenOffice.org Base
-OpenOffice.org Basic : data sources;registering address books
-OpenOffice.org Basic : data sources;reports
-OpenOffice.org Basic : data sources;viewing
-OpenOffice.org Basic : data structure of XForms
-OpenOffice.org Basic : database contents
-OpenOffice.org Basic : database contents;inserting as tables
-OpenOffice.org Basic : database contents;inserting as text
-OpenOffice.org Basic : database reports
-OpenOffice.org Basic : Database Wizard (Base)
-OpenOffice.org Basic : databases
-OpenOffice.org Basic : databases;administration through SQL (Base)
-OpenOffice.org Basic : databases;ADO (Base)
-OpenOffice.org Basic : databases;connecting (Base)
-OpenOffice.org Basic : databases;creating
-OpenOffice.org Basic : databases;creating labels
-OpenOffice.org Basic : databases;creating queries
-OpenOffice.org Basic : databases;creating reports
-OpenOffice.org Basic : databases;creating tables
-OpenOffice.org Basic : databases;dBASE (Base)
-OpenOffice.org Basic : databases;deleting (Base)
-OpenOffice.org Basic : databases;drag and drop (Base)
-OpenOffice.org Basic : databases;editing tables
-OpenOffice.org Basic : databases;form filters
-OpenOffice.org Basic : databases;formats (Base)
-OpenOffice.org Basic : databases;importing/exporting
-OpenOffice.org Basic : databases;JDBC (Base)
-OpenOffice.org Basic : databases;main page (Base)
-OpenOffice.org Basic : databases;MySQL (Base)
-OpenOffice.org Basic : databases;ODBC (Base)
-OpenOffice.org Basic : databases;overview
-OpenOffice.org Basic : databases;registering (Base)
-OpenOffice.org Basic : databases;searching records
-OpenOffice.org Basic : databases;shortcut keys
-OpenOffice.org Basic : databases;sorting
-OpenOffice.org Basic : databases;standard filters
-OpenOffice.org Basic : databases;text formats
-OpenOffice.org Basic : databases;viewing
-OpenOffice.org Basic : date field control
-OpenOffice.org Basic : date fields
-OpenOffice.org Basic : date fields;creating
-OpenOffice.org Basic : date fields;properties
-OpenOffice.org Basic : date formats
-OpenOffice.org Basic : Date statement
-OpenOffice.org Basic : DateAdd function
-OpenOffice.org Basic : DateDiff function
-OpenOffice.org Basic : DatePart function
-OpenOffice.org Basic : dates
-OpenOffice.org Basic : dates;default (Calc)
-OpenOffice.org Basic : dates;printing in presentations
-OpenOffice.org Basic : dates;start 1900/01/01 (Calc)
-OpenOffice.org Basic : dates;start 1904/01/01 (Calc)
-OpenOffice.org Basic : DateSerial function
-OpenOffice.org Basic : DateValue function
-OpenOffice.org Basic : Day function
-OpenOffice.org Basic : dBASE
-OpenOffice.org Basic : dBASE;database settings (Base)
-OpenOffice.org Basic : DDE
-OpenOffice.org Basic : DDE;definition
-OpenOffice.org Basic : deactivating
-OpenOffice.org Basic : deactivating;plug-ins
-OpenOffice.org Basic : debugging Basic programs
-OpenOffice.org Basic : decimal places displayed (Calc)
-OpenOffice.org Basic : decimal separator key
-OpenOffice.org Basic : decimal tab stops
-OpenOffice.org Basic : Declare statement
-OpenOffice.org Basic : declaring variables
-OpenOffice.org Basic : default directories
-OpenOffice.org Basic : default file formats
-OpenOffice.org Basic : default filters
-OpenOffice.org Basic : default filters;comparison operators
-OpenOffice.org Basic : default filters;databases
-OpenOffice.org Basic : default printer
-OpenOffice.org Basic : default printer;setting up
-OpenOffice.org Basic : default printer;UNIX
-OpenOffice.org Basic : default templates
-OpenOffice.org Basic : default templates;changing
-OpenOffice.org Basic : default templates;organizing
-OpenOffice.org Basic : defaults
-OpenOffice.org Basic : defaults;documents
-OpenOffice.org Basic : defaults;file formats
-OpenOffice.org Basic : defaults;fonts
-OpenOffice.org Basic : defaults;grids (Writer/Calc)
-OpenOffice.org Basic : defaults;languages
-OpenOffice.org Basic : defaults;number formats
-OpenOffice.org Basic : defaults;of saving
-OpenOffice.org Basic : defaults;program configuration
-OpenOffice.org Basic : defaults;tab stops in text
-OpenOffice.org Basic : defaults;views
-OpenOffice.org Basic : DefBool statement
-OpenOffice.org Basic : DefCur statement
-OpenOffice.org Basic : DefDate statement
-OpenOffice.org Basic : DefDbl statement
-OpenOffice.org Basic : DefErr statement
-OpenOffice.org Basic : defining
-OpenOffice.org Basic : defining;arrowheads and other line ends
-OpenOffice.org Basic : defining;colors
-OpenOffice.org Basic : defining;constants
-OpenOffice.org Basic : defining;line styles
-OpenOffice.org Basic : defining;paragraph borders
-OpenOffice.org Basic : defining;queries (Base)
-OpenOffice.org Basic : defining;table borders
-OpenOffice.org Basic : DefInt statement
-OpenOffice.org Basic : DefLng statement
-OpenOffice.org Basic : DefObj statement
-OpenOffice.org Basic : DefSng statement
-OpenOffice.org Basic : DefStr statement
-OpenOffice.org Basic : DefVar statement
-OpenOffice.org Basic : deleting
-OpenOffice.org Basic : deleting;all direct formatting
-OpenOffice.org Basic : deleting;databases (Base)
-OpenOffice.org Basic : deleting;hyperlinks
-OpenOffice.org Basic : deleting;libraries/modules/dialogs
-OpenOffice.org Basic : deleting;lines in text
-OpenOffice.org Basic : deleting;macro assignments to events
-OpenOffice.org Basic : deleting;models/instances
-OpenOffice.org Basic : deleting;namespaces in XForms
-OpenOffice.org Basic : deleting;tab stops
-OpenOffice.org Basic : deleting;templates
-OpenOffice.org Basic : deleting;XML filters
-OpenOffice.org Basic : depth stagger
-OpenOffice.org Basic : descriptions for objects
-OpenOffice.org Basic : design mode after saving
-OpenOffice.org Basic : design view
-OpenOffice.org Basic : design view;creating forms
-OpenOffice.org Basic : design view;queries/views (Base)
-OpenOffice.org Basic : designing
-OpenOffice.org Basic : designing;database tables
-OpenOffice.org Basic : designing;fonts
-OpenOffice.org Basic : designing;queries (Base)
-OpenOffice.org Basic : detaching toolbars
-OpenOffice.org Basic : dialog editor
-OpenOffice.org Basic : dialog editor;changing control properties
-OpenOffice.org Basic : dialog editor;creating controls
-OpenOffice.org Basic : dialog editor;programming examples for controls
-OpenOffice.org Basic : DialogLibraries (LibraryContainer)
-OpenOffice.org Basic : dialogs
-OpenOffice.org Basic : dialogs;creating Basic dialogs
-OpenOffice.org Basic : dialogs;displaying (example)
-OpenOffice.org Basic : dialogs;loading (example)
-OpenOffice.org Basic : dialogs;organizing
-OpenOffice.org Basic : dialogs;properties
-OpenOffice.org Basic : dialogs;translating
-OpenOffice.org Basic : dialogs;using program code to show (example)
-OpenOffice.org Basic : dictionaries
-OpenOffice.org Basic : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Basic : dictionaries;creating
-OpenOffice.org Basic : dictionaries;editing user-defined
-OpenOffice.org Basic : dictionaries;spellcheck
-OpenOffice.org Basic : dictionaries, see also languages
-OpenOffice.org Basic : digital signatures
-OpenOffice.org Basic : Dim statement
-OpenOffice.org Basic : DimArray function
-OpenOffice.org Basic : dimensioning arrays
-OpenOffice.org Basic : Dir function
-OpenOffice.org Basic : direct formatting
-OpenOffice.org Basic : direct formatting;undoing all
-OpenOffice.org Basic : directories
-OpenOffice.org Basic : directories;creating new
-OpenOffice.org Basic : directories;directory structure
-OpenOffice.org Basic : disabled persons
-OpenOffice.org Basic : displaying
-OpenOffice.org Basic : displaying;non-printing characters (Writer)
-OpenOffice.org Basic : displaying;notes (Calc)
-OpenOffice.org Basic : displaying;notes in text documents
-OpenOffice.org Basic : displaying;pictures and objects (Writer)
-OpenOffice.org Basic : displaying;tables (Writer)
-OpenOffice.org Basic : displaying;zero values (Calc)
-OpenOffice.org Basic : distances
-OpenOffice.org Basic : distinct values in SQL queries
-OpenOffice.org Basic : distorting in drawings
-OpenOffice.org Basic : distributing XML filters
-OpenOffice.org Basic : dithering
-OpenOffice.org Basic : DLL (Dynamic Link Library)
-OpenOffice.org Basic : Do...Loop statement
-OpenOffice.org Basic : docking
-OpenOffice.org Basic : docking;definition
-OpenOffice.org Basic : docking;toolbars
-OpenOffice.org Basic : docking;windows
-OpenOffice.org Basic : Document Converter Wizard
-OpenOffice.org Basic : Document Map feature in Microsoft Office
-OpenOffice.org Basic : Document Map, see Navigator
-OpenOffice.org Basic : document types in OpenOffice.org
-OpenOffice.org Basic : documents
-OpenOffice.org Basic : documents;changing titles
-OpenOffice.org Basic : documents;closing
-OpenOffice.org Basic : documents;comparing
-OpenOffice.org Basic : documents;contents as lists
-OpenOffice.org Basic : documents;editing time
-OpenOffice.org Basic : documents;exporting
-OpenOffice.org Basic : documents;importing
-OpenOffice.org Basic : documents;languages
-OpenOffice.org Basic : documents;measurement units in
-OpenOffice.org Basic : documents;merging
-OpenOffice.org Basic : documents;number of pages/tables/sheets
-OpenOffice.org Basic : documents;opening
-OpenOffice.org Basic : documents;opening in design mode
-OpenOffice.org Basic : documents;opening with templates
-OpenOffice.org Basic : documents;organizing
-OpenOffice.org Basic : documents;printing
-OpenOffice.org Basic : documents;read-only
-OpenOffice.org Basic : documents;reloading
-OpenOffice.org Basic : documents;saving
-OpenOffice.org Basic : documents;saving automatically
-OpenOffice.org Basic : documents;saving in other formats
-OpenOffice.org Basic : documents;sending as e-mail
-OpenOffice.org Basic : documents;styles changed
-OpenOffice.org Basic : documents;version management
-OpenOffice.org Basic : documents;version numbers
-OpenOffice.org Basic : dotted areas
-OpenOffice.org Basic : double-line spacing in paragraphs
-OpenOffice.org Basic : double-line writing in Asian layout
-OpenOffice.org Basic : drag and drop
-OpenOffice.org Basic : drag and drop;copying and pasting text
-OpenOffice.org Basic : drag and drop;data source view
-OpenOffice.org Basic : drag and drop;from Gallery to draw objects
-OpenOffice.org Basic : drag and drop;overview
-OpenOffice.org Basic : drag and drop;pictures
-OpenOffice.org Basic : drag and drop;to Gallery
-OpenOffice.org Basic : draw objects
-OpenOffice.org Basic : draw objects;adding/editing/copying
-OpenOffice.org Basic : draw objects;anchoring
-OpenOffice.org Basic : draw objects;arranging within stacks
-OpenOffice.org Basic : draw objects;copying
-OpenOffice.org Basic : draw objects;copying between documents
-OpenOffice.org Basic : draw objects;displaying (Calc)
-OpenOffice.org Basic : draw objects;dropping Gallery pictures
-OpenOffice.org Basic : draw objects;flipping
-OpenOffice.org Basic : draw objects;legends
-OpenOffice.org Basic : draw objects;positioning and resizing
-OpenOffice.org Basic : draw objects;protecting
-OpenOffice.org Basic : draw objects;slanting
-OpenOffice.org Basic : draw objects;text in
-OpenOffice.org Basic : Drawing bar
-OpenOffice.org Basic : drawing lines in text
-OpenOffice.org Basic : drawings
-OpenOffice.org Basic : drawings;creating/opening
-OpenOffice.org Basic : drawings;languages
-OpenOffice.org Basic : drawings;printing
-OpenOffice.org Basic : drawings;printing defaults
-OpenOffice.org Basic : drawings;printing in text documents
-OpenOffice.org Basic : drawings;saving
-OpenOffice.org Basic : drawings;saving automatically
-OpenOffice.org Basic : drawings;saving in other formats
-OpenOffice.org Basic : drawings;sending as e-mail
-OpenOffice.org Basic : drawings;showing (Writer)
-OpenOffice.org Basic : drop-down lists in form functions
-OpenOffice.org Basic : e-mail attachments
-OpenOffice.org Basic : Edit File icon
-OpenOffice.org Basic : edit mode
-OpenOffice.org Basic : edit mode;after opening
-OpenOffice.org Basic : edit mode;through Enter key (Calc)
-OpenOffice.org Basic : Edit Points bar
-OpenOffice.org Basic : editing
-OpenOffice.org Basic : editing;chart axes
-OpenOffice.org Basic : editing;chart data
-OpenOffice.org Basic : editing;chart legends
-OpenOffice.org Basic : editing;chart titles
-OpenOffice.org Basic : editing;controls
-OpenOffice.org Basic : editing;data binding of XForms
-OpenOffice.org Basic : editing;database tables and queries
-OpenOffice.org Basic : editing;draw objects
-OpenOffice.org Basic : editing;Fontwork objects
-OpenOffice.org Basic : editing;hyperlinks
-OpenOffice.org Basic : editing;items in Data Navigator
-OpenOffice.org Basic : editing;menus
-OpenOffice.org Basic : editing;namespaces in XForms
-OpenOffice.org Basic : editing;notes
-OpenOffice.org Basic : editing;objects
-OpenOffice.org Basic : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Basic : editing;pictures
-OpenOffice.org Basic : editing;reports
-OpenOffice.org Basic : editing;shortcut keys
-OpenOffice.org Basic : editing;tab stops
-OpenOffice.org Basic : editing;templates
-OpenOffice.org Basic : editing;toolbars
-OpenOffice.org Basic : editing;undoing
-OpenOffice.org Basic : editing;XForms
-OpenOffice.org Basic : editing time of documents
-OpenOffice.org Basic : editors
-OpenOffice.org Basic : editors;formula editor
-OpenOffice.org Basic : editors;ImageMap editor
-OpenOffice.org Basic : effects
-OpenOffice.org Basic : effects;font positions
-OpenOffice.org Basic : effects;fonts
-OpenOffice.org Basic : effects;Fontwork icons
-OpenOffice.org Basic : empty documents
-OpenOffice.org Basic : empty paragraph removal
-OpenOffice.org Basic : encryption of contents
-OpenOffice.org Basic : End statement
-OpenOffice.org Basic : entering groups
-OpenOffice.org Basic : entering text from right to left
-OpenOffice.org Basic : Environ function
-OpenOffice.org Basic : Eof function
-OpenOffice.org Basic : equal sign, see also operators
-OpenOffice.org Basic : EqualUnoObjects function
-OpenOffice.org Basic : equations in formula editor
-OpenOffice.org Basic : Eqv operator (logical)
-OpenOffice.org Basic : Erase function
-OpenOffice.org Basic : Erl function
-OpenOffice.org Basic : Err function
-OpenOffice.org Basic : error codes in Basic
-OpenOffice.org Basic : Error function
-OpenOffice.org Basic : Error Report Tool
-OpenOffice.org Basic : Euro
-OpenOffice.org Basic : Euro;currency formats
-OpenOffice.org Basic : Euro;Euro Converter Wizard
-OpenOffice.org Basic : even/odd pages
-OpenOffice.org Basic : even/odd pages;printing
-OpenOffice.org Basic : events
-OpenOffice.org Basic : events;assigning macros
-OpenOffice.org Basic : events;controls
-OpenOffice.org Basic : events;customizing
-OpenOffice.org Basic : events;in forms
-OpenOffice.org Basic : events;linked to objects
-OpenOffice.org Basic : examples
-OpenOffice.org Basic : examples;programming controls
-OpenOffice.org Basic : examples;showing a dialog using program code
-OpenOffice.org Basic : Excel
-OpenOffice.org Basic : Excel;saving as
-OpenOffice.org Basic : Excel;search criteria
-OpenOffice.org Basic : exceptions
-OpenOffice.org Basic : exceptions;user-defined dictionaries
-OpenOffice.org Basic : exchanging, see also replacing
-OpenOffice.org Basic : executing
-OpenOffice.org Basic : executing;SQL commands
-OpenOffice.org Basic : Exit statement
-OpenOffice.org Basic : exiting
-OpenOffice.org Basic : exiting;groups
-OpenOffice.org Basic : exiting;OpenOffice.org
-OpenOffice.org Basic : Exp function
-OpenOffice.org Basic : expanding formatting (Calc)
-OpenOffice.org Basic : explorer of data sources
-OpenOffice.org Basic : export filters
-OpenOffice.org Basic : exporting
-OpenOffice.org Basic : exporting;bitmaps
-OpenOffice.org Basic : exporting;databases
-OpenOffice.org Basic : exporting;HTML and text documents
-OpenOffice.org Basic : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Basic : exporting;spreadsheets to text format
-OpenOffice.org Basic : exporting;templates
-OpenOffice.org Basic : exporting;to foreign formats
-OpenOffice.org Basic : exporting;to HTML
-OpenOffice.org Basic : exporting;to Microsoft Office formats
-OpenOffice.org Basic : exporting;to PDF
-OpenOffice.org Basic : exporting;to PostScript format
-OpenOffice.org Basic : exporting;to XML
-OpenOffice.org Basic : exporting;XML files
-OpenOffice.org Basic : extended tips in Help
-OpenOffice.org Basic : extension mode in text
-OpenOffice.org Basic : extensions
-OpenOffice.org Basic : extensions;Extension Manager
-OpenOffice.org Basic : extensions;file formats
-OpenOffice.org Basic : external keys (Base)
-OpenOffice.org Basic : faster printing
-OpenOffice.org Basic : faxes
-OpenOffice.org Basic : faxes;configuring OpenOffice.org
-OpenOffice.org Basic : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Basic : faxes;selecting a fax machine
-OpenOffice.org Basic : faxes;sending
-OpenOffice.org Basic : faxes;wizards
-OpenOffice.org Basic : fields
-OpenOffice.org Basic : fields;database tables
-OpenOffice.org Basic : fields;displaying field codes (Writer)
-OpenOffice.org Basic : fields;formatted fields
-OpenOffice.org Basic : fields;updating automatically (Writer)
-OpenOffice.org Basic : file associations for Microsoft Office
-OpenOffice.org Basic : file filters
-OpenOffice.org Basic : file filters;mobile devices
-OpenOffice.org Basic : file filters;XML
-OpenOffice.org Basic : file formats
-OpenOffice.org Basic : file formats;changing defaults
-OpenOffice.org Basic : file formats;OpenDocument/XML
-OpenOffice.org Basic : file formats;saving always in other formats
-OpenOffice.org Basic : file selection button
-OpenOffice.org Basic : file selection control
-OpenOffice.org Basic : file sharing options for current document
-OpenOffice.org Basic : FileAttr function
-OpenOffice.org Basic : FileCopy statement
-OpenOffice.org Basic : FileDateTime function
-OpenOffice.org Basic : FileExists function
-OpenOffice.org Basic : FileLen function
-OpenOffice.org Basic : filepicker
-OpenOffice.org Basic : filepicker;API service
-OpenOffice.org Basic : files
-OpenOffice.org Basic : files;filters and formats
-OpenOffice.org Basic : files;importing
-OpenOffice.org Basic : files;opening
-OpenOffice.org Basic : files;opening with placeholders
-OpenOffice.org Basic : files;properties
-OpenOffice.org Basic : files;saving
-OpenOffice.org Basic : files;saving automatically
-OpenOffice.org Basic : files;saving in other formats
-OpenOffice.org Basic : files;sending as e-mail
-OpenOffice.org Basic : files;version numbers
-OpenOffice.org Basic : files and folders in OpenOffice.org
-OpenOffice.org Basic : fill characters with tabulators
-OpenOffice.org Basic : fill colors for areas
-OpenOffice.org Basic : fill patterns for areas
-OpenOffice.org Basic : filter conditions
-OpenOffice.org Basic : filter conditions;connecting
-OpenOffice.org Basic : filter conditions;in queries (Base)
-OpenOffice.org Basic : filtering
-OpenOffice.org Basic : filtering;data in databases
-OpenOffice.org Basic : filtering;data in forms
-OpenOffice.org Basic : filters
-OpenOffice.org Basic : filters;comparison operators
-OpenOffice.org Basic : filters;for import and export
-OpenOffice.org Basic : filters;Navigator
-OpenOffice.org Basic : filters;pictures
-OpenOffice.org Basic : filters;XML filter settings
-OpenOffice.org Basic : Find tab in Help
-OpenOffice.org Basic : finding
-OpenOffice.org Basic : finding;in all sheets
-OpenOffice.org Basic : finding;records in form documents
-OpenOffice.org Basic : finding;selections
-OpenOffice.org Basic : finding;similarity search
-OpenOffice.org Basic : FindObject function
-OpenOffice.org Basic : FindPropertyObject function
-OpenOffice.org Basic : fitting to pages
-OpenOffice.org Basic : fitting to pages;print settings in Math
-OpenOffice.org Basic : fitting to pages;print settings in presentations
-OpenOffice.org Basic : Fix function
-OpenOffice.org Basic : fixed line control
-OpenOffice.org Basic : fixed text
-OpenOffice.org Basic : fixed text;form functions
-OpenOffice.org Basic : fixed text control
-OpenOffice.org Basic : fixing toolbars
-OpenOffice.org Basic : flipping draw objects
-OpenOffice.org Basic : floating frames in HTML documents
-OpenOffice.org Basic : floating toolbars
-OpenOffice.org Basic : focus of controls
-OpenOffice.org Basic : folder creation
-OpenOffice.org Basic : font lists
-OpenOffice.org Basic : font name box
-OpenOffice.org Basic : font sizes
-OpenOffice.org Basic : font sizes;bullets
-OpenOffice.org Basic : font sizes;relative changes
-OpenOffice.org Basic : font sizes;scaling on screen
-OpenOffice.org Basic : font sizes;text
-OpenOffice.org Basic : fonts
-OpenOffice.org Basic : fonts;adding under UNIX
-OpenOffice.org Basic : fonts;changing in templates
-OpenOffice.org Basic : fonts;colors
-OpenOffice.org Basic : fonts;default settings
-OpenOffice.org Basic : fonts;effects
-OpenOffice.org Basic : fonts;for HTML and Basic
-OpenOffice.org Basic : fonts;formats
-OpenOffice.org Basic : fonts;outlines
-OpenOffice.org Basic : fonts;positions in text
-OpenOffice.org Basic : fonts;shadows
-OpenOffice.org Basic : fonts;specifying several
-OpenOffice.org Basic : fonts;strikethrough
-OpenOffice.org Basic : fonts;styles
-OpenOffice.org Basic : fonts;text objects
-OpenOffice.org Basic : Fontwork icons
-OpenOffice.org Basic : footers
-OpenOffice.org Basic : footers;backgrounds
-OpenOffice.org Basic : For statement
-OpenOffice.org Basic : form controls
-OpenOffice.org Basic : form controls;assigning macros
-OpenOffice.org Basic : form controls;protecting
-OpenOffice.org Basic : form controls;toolbars
-OpenOffice.org Basic : form fields
-OpenOffice.org Basic : form filters
-OpenOffice.org Basic : Form Navigator
-OpenOffice.org Basic : format codes
-OpenOffice.org Basic : format codes;numbers
-OpenOffice.org Basic : format codes;user-defined number formats
-OpenOffice.org Basic : format filling printing in OpenOffice.org Math
-OpenOffice.org Basic : Format function
-OpenOffice.org Basic : Format Paintbrush
-OpenOffice.org Basic : formats
-OpenOffice.org Basic : formats;Asian layout
-OpenOffice.org Basic : formats;Asian typography
-OpenOffice.org Basic : formats;fonts
-OpenOffice.org Basic : formats;maximizing page formats
-OpenOffice.org Basic : formats;number and currency formats
-OpenOffice.org Basic : formats;of currencies/date/time
-OpenOffice.org Basic : formats;on opening and saving
-OpenOffice.org Basic : formats;pasting in special formats
-OpenOffice.org Basic : formats;positions
-OpenOffice.org Basic : formats;tabulators
-OpenOffice.org Basic : formats;undoing when writing
-OpenOffice.org Basic : formatted field control
-OpenOffice.org Basic : formatted fields
-OpenOffice.org Basic : formatted fields;form functions
-OpenOffice.org Basic : formatted fields;properties
-OpenOffice.org Basic : formatting
-OpenOffice.org Basic : formatting;axes in charts
-OpenOffice.org Basic : formatting;chart legends
-OpenOffice.org Basic : formatting;copying
-OpenOffice.org Basic : formatting;definition
-OpenOffice.org Basic : formatting;expanding (Calc)
-OpenOffice.org Basic : formatting;font effects
-OpenOffice.org Basic : formatting;hyperlinks
-OpenOffice.org Basic : formatting;pages
-OpenOffice.org Basic : formatting;printer metrics (Writer)
-OpenOffice.org Basic : formatting;undoing
-OpenOffice.org Basic : forms
-OpenOffice.org Basic : forms;browsing
-OpenOffice.org Basic : forms;Combo Box/List Box Wizard
-OpenOffice.org Basic : forms;creating
-OpenOffice.org Basic : forms;data
-OpenOffice.org Basic : forms;designing (Base)
-OpenOffice.org Basic : forms;events
-OpenOffice.org Basic : forms;filtering data
-OpenOffice.org Basic : forms;finding records
-OpenOffice.org Basic : forms;focus after opening
-OpenOffice.org Basic : forms;general information (Base)
-OpenOffice.org Basic : forms;grouping controls
-OpenOffice.org Basic : forms;HTML filters
-OpenOffice.org Basic : forms;Navigator
-OpenOffice.org Basic : forms;opening in design mode
-OpenOffice.org Basic : forms;properties
-OpenOffice.org Basic : forms;sorting data
-OpenOffice.org Basic : forms;subforms
-OpenOffice.org Basic : forms;wizards
-OpenOffice.org Basic : forms;XForms
-OpenOffice.org Basic : Formula Auditing feature in Microsoft Office
-OpenOffice.org Basic : formula texts
-OpenOffice.org Basic : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Basic : formulas
-OpenOffice.org Basic : formulas;new
-OpenOffice.org Basic : formulas;starting formula editor
-OpenOffice.org Basic : formulas in reports
-OpenOffice.org Basic : formulas in reports;editing
-OpenOffice.org Basic : forums and support
-OpenOffice.org Basic : frames
-OpenOffice.org Basic : frames;around paragraphs
-OpenOffice.org Basic : frames;around tables
-OpenOffice.org Basic : frames;AutoCorrect function
-OpenOffice.org Basic : frames;backgrounds
-OpenOffice.org Basic : frames;captions (Writer)
-OpenOffice.org Basic : frames;printing in OpenOffice.org Math
-OpenOffice.org Basic : frames;protecting
-OpenOffice.org Basic : frames;selection frames
-OpenOffice.org Basic : frames;text fitting to frames
-OpenOffice.org Basic : FreeFile function
-OpenOffice.org Basic : freeform lines
-OpenOffice.org Basic : freeform lines;draw functions
-OpenOffice.org Basic : FreeLibrary function
-OpenOffice.org Basic : FTP
-OpenOffice.org Basic : FTP;opening documents
-OpenOffice.org Basic : FTP;saving documents
-OpenOffice.org Basic : full joins (Base)
-OpenOffice.org Basic : full screen view
-OpenOffice.org Basic : full-text search in Help
-OpenOffice.org Basic : Function statement
-OpenOffice.org Basic : functions
-OpenOffice.org Basic : functions;return value type
-OpenOffice.org Basic : functions;using
-OpenOffice.org Basic : functions in reports
-OpenOffice.org Basic : functions in reports;editing
-OpenOffice.org Basic : fundamentals
-OpenOffice.org Basic : Gallery
-OpenOffice.org Basic : Gallery;adding pictures
-OpenOffice.org Basic : Gallery;dragging pictures to draw objects
-OpenOffice.org Basic : Gallery;hiding/showing
-OpenOffice.org Basic : Gallery;inserting pictures from
-OpenOffice.org Basic : German spellcheck
-OpenOffice.org Basic : get method for form transmissions
-OpenOffice.org Basic : Get statement
-OpenOffice.org Basic : GetAttr function
-OpenOffice.org Basic : GetDefaultContext function
-OpenOffice.org Basic : GetGuiType function
-OpenOffice.org Basic : GetProcessServiceManager function
-OpenOffice.org Basic : GetSolarVersion function
-OpenOffice.org Basic : GetSystemTicks function
-OpenOffice.org Basic : getting support
-OpenOffice.org Basic : GIF format
-OpenOffice.org Basic : Global statement
-OpenOffice.org Basic : GLOBAL variables
-OpenOffice.org Basic : GlobalScope function
-OpenOffice.org Basic : glossaries
-OpenOffice.org Basic : glossaries;common terms
-OpenOffice.org Basic : glossaries;Internet terms
-OpenOffice.org Basic : GoSub...Return statement
-OpenOffice.org Basic : GoTo statement
-OpenOffice.org Basic : gradients off for faster printing
-OpenOffice.org Basic : graphical text art
-OpenOffice.org Basic : graphics
-OpenOffice.org Basic : graphics;cache
-OpenOffice.org Basic : graphics;protecting
-OpenOffice.org Basic : graphics, see also pictures
-OpenOffice.org Basic : grayscale printing
-OpenOffice.org Basic : Green function
-OpenOffice.org Basic : grid controls
-OpenOffice.org Basic : grid controls;form functions
-OpenOffice.org Basic : grids
-OpenOffice.org Basic : grids;defaults (Writer/Calc)
-OpenOffice.org Basic : grids;display options (Impress/Draw)
-OpenOffice.org Basic : grids;displaying lines (Calc)
-OpenOffice.org Basic : group box control
-OpenOffice.org Basic : group box creation
-OpenOffice.org Basic : groups
-OpenOffice.org Basic : groups;entering/exiting/ungrouping
-OpenOffice.org Basic : groups;naming
-OpenOffice.org Basic : groups;of controls
-OpenOffice.org Basic : guides
-OpenOffice.org Basic : guides;display options (Impress/Draw)
-OpenOffice.org Basic : guides;displaying when moving objects (Impress)
-OpenOffice.org Basic : guides;showing (Calc)
-OpenOffice.org Basic : guides;showing when moving frames (Writer)
-OpenOffice.org Basic : gutter
-OpenOffice.org Basic : handles
-OpenOffice.org Basic : handles;displaying (Writer)
-OpenOffice.org Basic : handles;scaling
-OpenOffice.org Basic : handles;showing simple/large handles (Calc)
-OpenOffice.org Basic : Hangul/Hanja
-OpenOffice.org Basic : HasUnoInterfaces function
-OpenOffice.org Basic : hatching
-OpenOffice.org Basic : headers
-OpenOffice.org Basic : headers;backgrounds
-OpenOffice.org Basic : headings
-OpenOffice.org Basic : headings;entering as text box
-OpenOffice.org Basic : Hebrew
-OpenOffice.org Basic : Hebrew;entering text
-OpenOffice.org Basic : Hebrew;language settings
-OpenOffice.org Basic : Help
-OpenOffice.org Basic : Help;bookmarks
-OpenOffice.org Basic : Help;extended tips on/off
-OpenOffice.org Basic : Help;full-text search
-OpenOffice.org Basic : Help;Help tips
-OpenOffice.org Basic : Help;keywords
-OpenOffice.org Basic : Help;navigation pane showing/hiding
-OpenOffice.org Basic : Help;style sheets
-OpenOffice.org Basic : Help;topics
-OpenOffice.org Basic : Help Agent
-OpenOffice.org Basic : Help Agent;help
-OpenOffice.org Basic : Help Agent;options
-OpenOffice.org Basic : Help tips
-OpenOffice.org Basic : Help tips;hiding
-OpenOffice.org Basic : Hex function
-OpenOffice.org Basic : hidden controls in Form Navigator
-OpenOffice.org Basic : hidden fields display (Writer)
-OpenOffice.org Basic : hidden pages
-OpenOffice.org Basic : hidden pages;printing in presentations
-OpenOffice.org Basic : hidden text
-OpenOffice.org Basic : hidden text;showing (Writer)
-OpenOffice.org Basic : hiding
-OpenOffice.org Basic : hiding;changes
-OpenOffice.org Basic : hiding;docked windows
-OpenOffice.org Basic : hiding;navigation pane in Help window
-OpenOffice.org Basic : high contrast mode
-OpenOffice.org Basic : Hindi
-OpenOffice.org Basic : Hindi;entering text
-OpenOffice.org Basic : Hindi;language settings
-OpenOffice.org Basic : horizontal line control
-OpenOffice.org Basic : horizontal scrollbar control
-OpenOffice.org Basic : horizontal scrollbars (Writer)
-OpenOffice.org Basic : Hour function
-OpenOffice.org Basic : HTML
-OpenOffice.org Basic : HTML;definition
-OpenOffice.org Basic : HTML;export character set
-OpenOffice.org Basic : HTML;fonts for source display
-OpenOffice.org Basic : HTML;importing META tags
-OpenOffice.org Basic : HTML;live presentations
-OpenOffice.org Basic : HTML documents
-OpenOffice.org Basic : HTML documents;auto reloading
-OpenOffice.org Basic : HTML documents;importing/exporting
-OpenOffice.org Basic : HTML documents;META tags in
-OpenOffice.org Basic : HTML documents;new
-OpenOffice.org Basic : HTML documents;source text
-OpenOffice.org Basic : hyperlinks
-OpenOffice.org Basic : hyperlinks;assigning macros
-OpenOffice.org Basic : hyperlinks;character formats
-OpenOffice.org Basic : hyperlinks;definition
-OpenOffice.org Basic : hyperlinks;deleting
-OpenOffice.org Basic : hyperlinks;editing
-OpenOffice.org Basic : hyperlinks;inserting
-OpenOffice.org Basic : hyperlinks;relative and absolute
-OpenOffice.org Basic : hyperlinks;turning off automatic recognition
-OpenOffice.org Basic : hyperlinks, see also links
-OpenOffice.org Basic : hyphenation
-OpenOffice.org Basic : hyphenation;activating for a language
-OpenOffice.org Basic : hyphenation;minimal number of characters
-OpenOffice.org Basic : hyphens
-OpenOffice.org Basic : hyphens;displaying custom (Writer)
-OpenOffice.org Basic : hyphens;inserting custom
-OpenOffice.org Basic : icon bars, see toolbars
-OpenOffice.org Basic : icon control
-OpenOffice.org Basic : icon sizes
-OpenOffice.org Basic : IDE
-OpenOffice.org Basic : IDE;Integrated Development Environment
-OpenOffice.org Basic : IDE;keyboard shortcuts
-OpenOffice.org Basic : If statement
-OpenOffice.org Basic : ignore list for spellcheck
-OpenOffice.org Basic : IIf statement
-OpenOffice.org Basic : illustrations, see pictures
-OpenOffice.org Basic : image button creation
-OpenOffice.org Basic : image control
-OpenOffice.org Basic : image control creation
-OpenOffice.org Basic : ImageMap
-OpenOffice.org Basic : ImageMap;definition
-OpenOffice.org Basic : ImageMap;editor
-OpenOffice.org Basic : images
-OpenOffice.org Basic : images;ImageMap
-OpenOffice.org Basic : images;inserting and editing bitmaps
-OpenOffice.org Basic : images;placeholders in presentations
-OpenOffice.org Basic : images, see also pictures
-OpenOffice.org Basic : IME
-OpenOffice.org Basic : IME;definition
-OpenOffice.org Basic : IME;showing/hiding
-OpenOffice.org Basic : Imp operator (logical)
-OpenOffice.org Basic : import filters
-OpenOffice.org Basic : import restrictions for Microsoft Office
-OpenOffice.org Basic : importing
-OpenOffice.org Basic : importing;bitmaps
-OpenOffice.org Basic : importing;compatibility settings for text import
-OpenOffice.org Basic : importing;databases
-OpenOffice.org Basic : importing;documents in other formats
-OpenOffice.org Basic : importing;from XML
-OpenOffice.org Basic : importing;HTML and text documents
-OpenOffice.org Basic : importing;HTML with META tags
-OpenOffice.org Basic : importing;Microsoft Office documents with VBA code
-OpenOffice.org Basic : importing;tables in text format
-OpenOffice.org Basic : importing;templates
-OpenOffice.org Basic : inches
-OpenOffice.org Basic : Index tab in Help
-OpenOffice.org Basic : indexes
-OpenOffice.org Basic : indexes;backgrounds
-OpenOffice.org Basic : indexes;showing/hiding Help index tab
-OpenOffice.org Basic : indexes;unprotecting
-OpenOffice.org Basic : indicator lines in text
-OpenOffice.org Basic : inner joins (Base)
-OpenOffice.org Basic : input method window
-OpenOffice.org Basic : Input statement
-OpenOffice.org Basic : InputBox function
-OpenOffice.org Basic : insert mode for entering text
-OpenOffice.org Basic : inserting
-OpenOffice.org Basic : inserting;applets
-OpenOffice.org Basic : inserting;cell ranges from spreadsheets
-OpenOffice.org Basic : inserting;charts
-OpenOffice.org Basic : inserting;clipboard options
-OpenOffice.org Basic : inserting;data from text documents
-OpenOffice.org Basic : inserting;datasource records in spreadsheets
-OpenOffice.org Basic : inserting;drawings
-OpenOffice.org Basic : inserting;floating frames
-OpenOffice.org Basic : inserting;form fields
-OpenOffice.org Basic : inserting;hyperlinks
-OpenOffice.org Basic : inserting;line breaks in cells
-OpenOffice.org Basic : inserting;movies/sounds
-OpenOffice.org Basic : inserting;new text tables defaults
-OpenOffice.org Basic : inserting;notes
-OpenOffice.org Basic : inserting;objects from Gallery
-OpenOffice.org Basic : inserting;OLE objects
-OpenOffice.org Basic : inserting;paragraph bullets
-OpenOffice.org Basic : inserting;plug-ins
-OpenOffice.org Basic : inserting;special characters
-OpenOffice.org Basic : inserting;tab stops
-OpenOffice.org Basic : installing
-OpenOffice.org Basic : installing;ActiveX control
-OpenOffice.org Basic : installing;mobile device filters
-OpenOffice.org Basic : installing;UNO components
-OpenOffice.org Basic : InStr function
-OpenOffice.org Basic : instructions
-OpenOffice.org Basic : instructions;general
-OpenOffice.org Basic : Int function
-OpenOffice.org Basic : Internet
-OpenOffice.org Basic : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Basic : Internet;presentations
-OpenOffice.org Basic : Internet;starting searches
-OpenOffice.org Basic : Internet;turning off recognition of addresses
-OpenOffice.org Basic : Internet glossary
-OpenOffice.org Basic : invert filter
-OpenOffice.org Basic : invisible areas
-OpenOffice.org Basic : IsArray function
-OpenOffice.org Basic : IsDate function
-OpenOffice.org Basic : IsEmpty function
-OpenOffice.org Basic : IsError function
-OpenOffice.org Basic : IsMissing function
-OpenOffice.org Basic : IsNull function
-OpenOffice.org Basic : IsNumeric function
-OpenOffice.org Basic : IsObject function
-OpenOffice.org Basic : IsUnoStruct function
-OpenOffice.org Basic : italic text
-OpenOffice.org Basic : iterative references in spreadsheets
-OpenOffice.org Basic : Java
-OpenOffice.org Basic : Java;definition
-OpenOffice.org Basic : Java;scripting
-OpenOffice.org Basic : Java;setting options
-OpenOffice.org Basic : JDBC
-OpenOffice.org Basic : JDBC;databases (Base)
-OpenOffice.org Basic : JDBC;definition
-OpenOffice.org Basic : Join function
-OpenOffice.org Basic : joining
-OpenOffice.org Basic : joining;paragraphs
-OpenOffice.org Basic : joining;tables (Base)
-OpenOffice.org Basic : joins in databases (Base)
-OpenOffice.org Basic : justifying text
-OpenOffice.org Basic : kerning
-OpenOffice.org Basic : kerning;Asian texts
-OpenOffice.org Basic : kerning;definition
-OpenOffice.org Basic : kerning;in characters
-OpenOffice.org Basic : key fields for relations (Base)
-OpenOffice.org Basic : keyboard
-OpenOffice.org Basic : keyboard;assigning/editing shortcut keys
-OpenOffice.org Basic : keyboard;general commands
-OpenOffice.org Basic : keyboard;in IDE
-OpenOffice.org Basic : keyboard;removing numbering
-OpenOffice.org Basic : keys
-OpenOffice.org Basic : keys;adding push buttons
-OpenOffice.org Basic : keys;primary keys (Base)
-OpenOffice.org Basic : Kill statement
-OpenOffice.org Basic : kiosk export
-OpenOffice.org Basic : label field control
-OpenOffice.org Basic : labels
-OpenOffice.org Basic : labels;creating and synchronizing
-OpenOffice.org Basic : labels;for draw objects
-OpenOffice.org Basic : labels;form functions
-OpenOffice.org Basic : labels;from databases
-OpenOffice.org Basic : labels, see also names/callouts
-OpenOffice.org Basic : languages
-OpenOffice.org Basic : languages;activating modules
-OpenOffice.org Basic : languages;Asian support
-OpenOffice.org Basic : languages;complex text layout
-OpenOffice.org Basic : languages;locale settings
-OpenOffice.org Basic : languages;selecting
-OpenOffice.org Basic : languages;setting options
-OpenOffice.org Basic : languages;spellcheck
-OpenOffice.org Basic : languages;spellchecking and formatting
-OpenOffice.org Basic : large handles (Writer)
-OpenOffice.org Basic : large icons
-OpenOffice.org Basic : layer arrangement
-OpenOffice.org Basic : layout
-OpenOffice.org Basic : layout;importing Word documents
-OpenOffice.org Basic : layout;pages
-OpenOffice.org Basic : LBound function
-OpenOffice.org Basic : LCase function
-OpenOffice.org Basic : LDAP server
-OpenOffice.org Basic : LDAP server;address books (Base)
-OpenOffice.org Basic : LDAP server;sign on options
-OpenOffice.org Basic : leading between paragraphs
-OpenOffice.org Basic : left alignment of paragraphs
-OpenOffice.org Basic : Left function
-OpenOffice.org Basic : left joins (Base)
-OpenOffice.org Basic : legends
-OpenOffice.org Basic : legends;charts
-OpenOffice.org Basic : legends;draw objects
-OpenOffice.org Basic : legends;rounding corners
-OpenOffice.org Basic : Len function
-OpenOffice.org Basic : Let statement
-OpenOffice.org Basic : Letter Wizard
-OpenOffice.org Basic : levels
-OpenOffice.org Basic : levels;depth stagger
-OpenOffice.org Basic : libraries
-OpenOffice.org Basic : libraries;adding
-OpenOffice.org Basic : libraries;organizing
-OpenOffice.org Basic : library systems
-OpenOffice.org Basic : LibraryContainer
-OpenOffice.org Basic : limits of tables (Writer)
-OpenOffice.org Basic : line breaks
-OpenOffice.org Basic : line breaks;in cells
-OpenOffice.org Basic : line control
-OpenOffice.org Basic : Line Input statement
-OpenOffice.org Basic : line spacing
-OpenOffice.org Basic : line spacing;context menu in paragraphs
-OpenOffice.org Basic : line spacing;paragraph
-OpenOffice.org Basic : line styles
-OpenOffice.org Basic : line styles;applying
-OpenOffice.org Basic : line styles;defining
-OpenOffice.org Basic : lines
-OpenOffice.org Basic : lines;contours (Draw/Impress)
-OpenOffice.org Basic : lines;defining ends
-OpenOffice.org Basic : lines;draw functions
-OpenOffice.org Basic : lines;drawing in text
-OpenOffice.org Basic : lines;editing points
-OpenOffice.org Basic : lines;removing automatic lines
-OpenOffice.org Basic : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Basic : lines of text
-OpenOffice.org Basic : lines of text;alignment
-OpenOffice.org Basic : lines of text;in Basic editor
-OpenOffice.org Basic : links
-OpenOffice.org Basic : links;between cells and controls
-OpenOffice.org Basic : links;by drag and drop
-OpenOffice.org Basic : links;character formats
-OpenOffice.org Basic : links;definition
-OpenOffice.org Basic : links;editing hyperlinks
-OpenOffice.org Basic : links;inserting
-OpenOffice.org Basic : links;modifying
-OpenOffice.org Basic : links;opening files with
-OpenOffice.org Basic : links;relational databases (Base)
-OpenOffice.org Basic : links;turning off automatic recognition
-OpenOffice.org Basic : links;updating options (Writer)
-OpenOffice.org Basic : links;updating specific links
-OpenOffice.org Basic : list box creation
-OpenOffice.org Basic : list boxes
-OpenOffice.org Basic : list boxes;adding entries to (example)
-OpenOffice.org Basic : list boxes;controls
-OpenOffice.org Basic : list boxes;removing entries from (example)
-OpenOffice.org Basic : lists
-OpenOffice.org Basic : lists;data assigned to controls
-OpenOffice.org Basic : lists;registered databases (Base)
-OpenOffice.org Basic : lists;regular expressions
-OpenOffice.org Basic : live presentations on the Internet
-OpenOffice.org Basic : loading
-OpenOffice.org Basic : loading;Basic code
-OpenOffice.org Basic : loading;documents
-OpenOffice.org Basic : loading;documents from other formats
-OpenOffice.org Basic : loading;HTML documents, automatically
-OpenOffice.org Basic : loading;Microsoft Office documents with VBA code
-OpenOffice.org Basic : loading;reloading
-OpenOffice.org Basic : loading;XML files
-OpenOffice.org Basic : Loc function
-OpenOffice.org Basic : locale settings
-OpenOffice.org Basic : localizing dialogs
-OpenOffice.org Basic : Lof function
-OpenOffice.org Basic : Log function
-OpenOffice.org Basic : long lines
-OpenOffice.org Basic : long lines;in Basic editor
-OpenOffice.org Basic : loops
-OpenOffice.org Basic : lowercase letters
-OpenOffice.org Basic : lowercase letters;font effects
-OpenOffice.org Basic : LSet statement
-OpenOffice.org Basic : LTrim function
-OpenOffice.org Basic : macro toolbar
-OpenOffice.org Basic : macros
-OpenOffice.org Basic : macros;assigning to events
-OpenOffice.org Basic : macros;assigning to events in forms
-OpenOffice.org Basic : macros;Basic IDE
-OpenOffice.org Basic : macros;in MS Office documents
-OpenOffice.org Basic : macros;interrupting
-OpenOffice.org Basic : macros;organizing
-OpenOffice.org Basic : macros;recording
-OpenOffice.org Basic : macros;security
-OpenOffice.org Basic : macros;security warning dialog
-OpenOffice.org Basic : macros;selecting security warnings
-OpenOffice.org Basic : macros;stopping
-OpenOffice.org Basic : magnifiers
-OpenOffice.org Basic : Mail Merge feature in Microsoft Office
-OpenOffice.org Basic : margins
-OpenOffice.org Basic : margins;pages
-OpenOffice.org Basic : margins;setting with the mouse
-OpenOffice.org Basic : margins;shadows
-OpenOffice.org Basic : marking changes
-OpenOffice.org Basic : Markup feature in Microsoft Office
-OpenOffice.org Basic : masked field control
-OpenOffice.org Basic : Math formula editor
-OpenOffice.org Basic : measurement units
-OpenOffice.org Basic : measurement units;changing on rulers
-OpenOffice.org Basic : measurement units;converting
-OpenOffice.org Basic : measurement units;selecting
-OpenOffice.org Basic : Media Player window
-OpenOffice.org Basic : menus
-OpenOffice.org Basic : menus;activating context menus
-OpenOffice.org Basic : menus;customizing
-OpenOffice.org Basic : menus;inactive menu items
-OpenOffice.org Basic : merging
-OpenOffice.org Basic : merging;documents
-OpenOffice.org Basic : META tags
-OpenOffice.org Basic : metrics
-OpenOffice.org Basic : metrics;converting
-OpenOffice.org Basic : metrics;document formatting (Writer)
-OpenOffice.org Basic : metrics;in sheets
-OpenOffice.org Basic : Microsoft Office
-OpenOffice.org Basic : Microsoft Office;Access databases (base)
-OpenOffice.org Basic : Microsoft Office;as standard file format
-OpenOffice.org Basic : Microsoft Office;document import restrictions
-OpenOffice.org Basic : Microsoft Office;feature comparisons
-OpenOffice.org Basic : Microsoft Office;importing password protected files
-OpenOffice.org Basic : Microsoft Office;importing Word documents
-OpenOffice.org Basic : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Basic : Microsoft Office;new users information
-OpenOffice.org Basic : Microsoft Office;opening Microsoft documents
-OpenOffice.org Basic : Microsoft Office;reassigning document types
-OpenOffice.org Basic : Mid function
-OpenOffice.org Basic : Mid statement
-OpenOffice.org Basic : Minute function
-OpenOffice.org Basic : MkDir statement
-OpenOffice.org Basic : mobile device filters
-OpenOffice.org Basic : MOD operator (mathematical)
-OpenOffice.org Basic : models in XForms
-OpenOffice.org Basic : modifying, see changing
-OpenOffice.org Basic : module/dialog toggle
-OpenOffice.org Basic : modules
-OpenOffice.org Basic : modules;organizing
-OpenOffice.org Basic : modules;subroutines and functions
-OpenOffice.org Basic : Month function
-OpenOffice.org Basic : more controls
-OpenOffice.org Basic : mosaic filter
-OpenOffice.org Basic : mouse
-OpenOffice.org Basic : mouse;pointers when using drag and drop
-OpenOffice.org Basic : mouse;positioning
-OpenOffice.org Basic : moving
-OpenOffice.org Basic : moving;modules
-OpenOffice.org Basic : moving;tab stops on ruler
-OpenOffice.org Basic : moving;toolbars
-OpenOffice.org Basic : moving;using guide lines in presentations
-OpenOffice.org Basic : MS ADO interface (Base)
-OpenOffice.org Basic : MsgBox function
-OpenOffice.org Basic : MsgBox statement
-OpenOffice.org Basic : multi-line titles in forms
-OpenOffice.org Basic : multiple documents
-OpenOffice.org Basic : multiple documents;opening
-OpenOffice.org Basic : My Documents folder
-OpenOffice.org Basic : My Documents folder;changing work directory
-OpenOffice.org Basic : My Documents folder;opening
-OpenOffice.org Basic : MySQL databases (Base)
-OpenOffice.org Basic : Name statement
-OpenOffice.org Basic : names
-OpenOffice.org Basic : names;multi-line titles
-OpenOffice.org Basic : names;objects
-OpenOffice.org Basic : names of variables
-OpenOffice.org Basic : names, see also labels/callouts
-OpenOffice.org Basic : namespace organization in XForms
-OpenOffice.org Basic : native SQL (Base)
-OpenOffice.org Basic : navigating
-OpenOffice.org Basic : navigating;in Basic projects
-OpenOffice.org Basic : navigating;in documents
-OpenOffice.org Basic : Navigation bar
-OpenOffice.org Basic : Navigation bar;controls
-OpenOffice.org Basic : Navigation bar;forms
-OpenOffice.org Basic : Navigator
-OpenOffice.org Basic : Navigator;contents as lists
-OpenOffice.org Basic : Navigator;docking
-OpenOffice.org Basic : Navigator;working with
-OpenOffice.org Basic : network identity options
-OpenOffice.org Basic : new databases
-OpenOffice.org Basic : new documents
-OpenOffice.org Basic : new German spellcheck
-OpenOffice.org Basic : new lines in cells
-OpenOffice.org Basic : new windows
-OpenOffice.org Basic : Next statement
-OpenOffice.org Basic : non-breaking dashes
-OpenOffice.org Basic : non-breaking spaces (Writer)
-OpenOffice.org Basic : non-printing characters (Writer)
-OpenOffice.org Basic : Not operator (logical)
-OpenOffice.org Basic : notes
-OpenOffice.org Basic : notes;displaying (Calc)
-OpenOffice.org Basic : notes;inserting and editing
-OpenOffice.org Basic : notes;printing in text
-OpenOffice.org Basic : Nothing object
-OpenOffice.org Basic : Now function
-OpenOffice.org Basic : Null value
-OpenOffice.org Basic : number formats
-OpenOffice.org Basic : number formats;codes
-OpenOffice.org Basic : number formats;formats
-OpenOffice.org Basic : number formats;recognition in text tables
-OpenOffice.org Basic : number of pages
-OpenOffice.org Basic : number of sheets
-OpenOffice.org Basic : number of tables
-OpenOffice.org Basic : numbering
-OpenOffice.org Basic : numbering;options
-OpenOffice.org Basic : numbering;paragraphs
-OpenOffice.org Basic : numbering;turning off
-OpenOffice.org Basic : numbering;using automatically
-OpenOffice.org Basic : numbers
-OpenOffice.org Basic : numbers;date, time and currency formats
-OpenOffice.org Basic : numbers;decimal places (Calc)
-OpenOffice.org Basic : numbers;formatting options for selected cells
-OpenOffice.org Basic : numerical field control
-OpenOffice.org Basic : numerical fields in forms
-OpenOffice.org Basic : objects
-OpenOffice.org Basic : objects;always moveable (Impress/Draw)
-OpenOffice.org Basic : objects;arranging within stacks
-OpenOffice.org Basic : objects;contours in presentations
-OpenOffice.org Basic : objects;copying when moving in presentations
-OpenOffice.org Basic : objects;definition
-OpenOffice.org Basic : objects;displaying in spreadsheets
-OpenOffice.org Basic : objects;displaying in text documents
-OpenOffice.org Basic : objects;editing
-OpenOffice.org Basic : objects;inserting from Gallery
-OpenOffice.org Basic : objects;inserting OLE objects
-OpenOffice.org Basic : objects;moving and resizing with mouse
-OpenOffice.org Basic : objects;naming
-OpenOffice.org Basic : objects;opening
-OpenOffice.org Basic : objects;quickly moving to
-OpenOffice.org Basic : objects;titles and descriptions
-OpenOffice.org Basic : Oct function
-OpenOffice.org Basic : ODBC
-OpenOffice.org Basic : ODBC;database (Base)
-OpenOffice.org Basic : ODBC;definition
-OpenOffice.org Basic : ODF file formats
-OpenOffice.org Basic : Office
-OpenOffice.org Basic : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Basic : old German spellcheck
-OpenOffice.org Basic : OLE
-OpenOffice.org Basic : OLE;definition
-OpenOffice.org Basic : OLE objects
-OpenOffice.org Basic : OLE objects;arranging within stacks
-OpenOffice.org Basic : OLE objects;captions (Writer)
-OpenOffice.org Basic : OLE objects;inserting
-OpenOffice.org Basic : OLE objects;number of
-OpenOffice.org Basic : OLE objects;protecting
-OpenOffice.org Basic : On Error GoTo ... Resume statement
-OpenOffice.org Basic : On...GoSub statement
-OpenOffice.org Basic : On...GoTo statement
-OpenOffice.org Basic : one and a half line spacing in text
-OpenOffice.org Basic : online registration
-OpenOffice.org Basic : online update options
-OpenOffice.org Basic : online updates
-OpenOffice.org Basic : online updates;checking automatically
-OpenOffice.org Basic : online updates;checking manually
-OpenOffice.org Basic : Open statement
-OpenOffice.org Basic : Open/Save dialogs
-OpenOffice.org Basic : OpenDocument file formats
-OpenOffice.org Basic : OpenGL
-OpenOffice.org Basic : OpenGL;definition
-OpenOffice.org Basic : OpenGL;optimized output
-OpenOffice.org Basic : opening
-OpenOffice.org Basic : opening;context menus
-OpenOffice.org Basic : opening;database files
-OpenOffice.org Basic : opening;dialog settings
-OpenOffice.org Basic : opening;documents
-OpenOffice.org Basic : opening;documents from other formats
-OpenOffice.org Basic : opening;files with links
-OpenOffice.org Basic : opening;files, with placeholders
-OpenOffice.org Basic : opening;forms
-OpenOffice.org Basic : opening;Microsoft Office files
-OpenOffice.org Basic : opening;mobile device documents
-OpenOffice.org Basic : opening;objects
-OpenOffice.org Basic : opening;reports
-OpenOffice.org Basic : opening;several files
-OpenOffice.org Basic : opening;XForms
-OpenOffice.org Basic : OpenOffice.org Base data sources
-OpenOffice.org Basic : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Basic : OpenOffice.org documents
-OpenOffice.org Basic : OpenOffice.org documents;mobile device filters
-OpenOffice.org Basic : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Basic : OpenOffice.org Math start
-OpenOffice.org Basic : operators
-OpenOffice.org Basic : operators;comparisons
-OpenOffice.org Basic : operators;default filters
-OpenOffice.org Basic : Option Base statement
-OpenOffice.org Basic : option button control
-OpenOffice.org Basic : Option Explicit statement
-OpenOffice.org Basic : Optional function
-OpenOffice.org Basic : optional hyphens (Writer)
-OpenOffice.org Basic : options
-OpenOffice.org Basic : options;accessibility
-OpenOffice.org Basic : options;appearance
-OpenOffice.org Basic : options;compatibility (Writer)
-OpenOffice.org Basic : options;network identity
-OpenOffice.org Basic : options;online update
-OpenOffice.org Basic : options;tools
-OpenOffice.org Basic : Or operator (logical)
-OpenOffice.org Basic : Oracle databases (base)
-OpenOffice.org Basic : ordering
-OpenOffice.org Basic : ordering;objects
-OpenOffice.org Basic : organizing
-OpenOffice.org Basic : organizing;macros and scripts
-OpenOffice.org Basic : organizing;modules/libraries/dialogs
-OpenOffice.org Basic : organizing;namespaces in XForms
-OpenOffice.org Basic : organizing;styles
-OpenOffice.org Basic : organizing;templates
-OpenOffice.org Basic : original size
-OpenOffice.org Basic : original size;printing in OpenOffice.org Math
-OpenOffice.org Basic : original size;restoring after cropping
-OpenOffice.org Basic : outlines
-OpenOffice.org Basic : outlines;font effects
-OpenOffice.org Basic : outlines;outline symbols
-OpenOffice.org Basic : outlines;sending to presentations
-OpenOffice.org Basic : overwrite mode
-OpenOffice.org Basic : packages, see extensions
-OpenOffice.org Basic : page breaks
-OpenOffice.org Basic : page breaks;displaying (Calc)
-OpenOffice.org Basic : page formats
-OpenOffice.org Basic : page formats;maximizing
-OpenOffice.org Basic : page formats;restriction
-OpenOffice.org Basic : page styles
-OpenOffice.org Basic : page styles;editing/applying with statusbar
-OpenOffice.org Basic : pages
-OpenOffice.org Basic : pages;backgrounds in spreadsheets
-OpenOffice.org Basic : pages;formatting and numbering
-OpenOffice.org Basic : pages;printing page names in presentations
-OpenOffice.org Basic : pages;scaling
-OpenOffice.org Basic : pages;selecting one to print
-OpenOffice.org Basic : paint box
-OpenOffice.org Basic : paint can symbol
-OpenOffice.org Basic : pair kerning
-OpenOffice.org Basic : Palm file filters
-OpenOffice.org Basic : paper formats
-OpenOffice.org Basic : paper size warning
-OpenOffice.org Basic : paper trays
-OpenOffice.org Basic : paragraph marks
-OpenOffice.org Basic : paragraph marks;displaying (Writer)
-OpenOffice.org Basic : paragraph styles
-OpenOffice.org Basic : paragraph styles;languages
-OpenOffice.org Basic : paragraph styles;modifying basic fonts
-OpenOffice.org Basic : paragraphs
-OpenOffice.org Basic : paragraphs;alignment
-OpenOffice.org Basic : paragraphs;Asian typography
-OpenOffice.org Basic : paragraphs;backgrounds
-OpenOffice.org Basic : paragraphs;defining borders
-OpenOffice.org Basic : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Basic : paragraphs;increasing indents of
-OpenOffice.org Basic : paragraphs;indents, margins and columns
-OpenOffice.org Basic : paragraphs;inserting bullets
-OpenOffice.org Basic : paragraphs;joining
-OpenOffice.org Basic : paragraphs;numbering automatically
-OpenOffice.org Basic : paragraphs;removing blank ones
-OpenOffice.org Basic : paragraphs;spacing
-OpenOffice.org Basic : paragraphs;tab stops
-OpenOffice.org Basic : parameters
-OpenOffice.org Basic : parameters;command line
-OpenOffice.org Basic : parameters;for procedures and functions
-OpenOffice.org Basic : parameters;passing by reference or value
-OpenOffice.org Basic : parameters;queries (Base)
-OpenOffice.org Basic : passwords for protecting contents
-OpenOffice.org Basic : pasting
-OpenOffice.org Basic : pasting;cell ranges
-OpenOffice.org Basic : pasting;cell ranges from spreadsheets
-OpenOffice.org Basic : pasting;data from text documents
-OpenOffice.org Basic : pasting;draw objects
-OpenOffice.org Basic : pasting;draw objects from other documents
-OpenOffice.org Basic : pasting;formatted/unformatted text
-OpenOffice.org Basic : pasting;from data source view
-OpenOffice.org Basic : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Basic : pasting;pictures from other documents
-OpenOffice.org Basic : pasting;sheet areas in text documents
-OpenOffice.org Basic : pasting;to Gallery
-OpenOffice.org Basic : paths
-OpenOffice.org Basic : paths;changing work directory
-OpenOffice.org Basic : paths;defaults
-OpenOffice.org Basic : pattern editor
-OpenOffice.org Basic : pattern field control
-OpenOffice.org Basic : pattern fields
-OpenOffice.org Basic : pattern fields;form functions
-OpenOffice.org Basic : patterns for objects
-OpenOffice.org Basic : PDF
-OpenOffice.org Basic : PDF;export
-OpenOffice.org Basic : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Basic : personal data input
-OpenOffice.org Basic : phonetic guide
-OpenOffice.org Basic : picklist creation
-OpenOffice.org Basic : pictures
-OpenOffice.org Basic : pictures;adding to Gallery
-OpenOffice.org Basic : pictures;arranging within stacks
-OpenOffice.org Basic : pictures;assigning macros
-OpenOffice.org Basic : pictures;backgrounds
-OpenOffice.org Basic : pictures;captions (Writer)
-OpenOffice.org Basic : pictures;changing paths
-OpenOffice.org Basic : pictures;cropping and zooming
-OpenOffice.org Basic : pictures;displaying in Calc
-OpenOffice.org Basic : pictures;displaying in Writer (Writer)
-OpenOffice.org Basic : pictures;drag and drop between documents
-OpenOffice.org Basic : pictures;drawing
-OpenOffice.org Basic : pictures;editing
-OpenOffice.org Basic : pictures;filters
-OpenOffice.org Basic : pictures;ImageMap
-OpenOffice.org Basic : pictures;inserting automatically
-OpenOffice.org Basic : pictures;inserting from Gallery
-OpenOffice.org Basic : pictures;number of
-OpenOffice.org Basic : pictures;printing
-OpenOffice.org Basic : pictures;scaling/resizing
-OpenOffice.org Basic : Pivot tables feature in Microsoft Office
-OpenOffice.org Basic : pixel editor
-OpenOffice.org Basic : pixel graphics
-OpenOffice.org Basic : pixel graphics;inserting and editing
-OpenOffice.org Basic : pixel patterns
-OpenOffice.org Basic : placeholders
-OpenOffice.org Basic : placeholders;in SQL queries
-OpenOffice.org Basic : placeholders;on opening files
-OpenOffice.org Basic : placing toolbars
-OpenOffice.org Basic : playing movies and sound files
-OpenOffice.org Basic : plotting data as charts
-OpenOffice.org Basic : plug-ins
-OpenOffice.org Basic : plug-ins;activating and deactivating
-OpenOffice.org Basic : plug-ins;definition
-OpenOffice.org Basic : plug-ins;inserting
-OpenOffice.org Basic : pocket device appliances
-OpenOffice.org Basic : Pocket PC file filters
-OpenOffice.org Basic : points
-OpenOffice.org Basic : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Basic : polygon drawing
-OpenOffice.org Basic : pop-art filter
-OpenOffice.org Basic : portable document format
-OpenOffice.org Basic : positioning
-OpenOffice.org Basic : positioning;draw objects and controls
-OpenOffice.org Basic : positioning;fonts
-OpenOffice.org Basic : positioning;objects
-OpenOffice.org Basic : positioning;toolbars
-OpenOffice.org Basic : post method for form transmissions
-OpenOffice.org Basic : posterizing filter
-OpenOffice.org Basic : PostScript
-OpenOffice.org Basic : PostScript;creating files
-OpenOffice.org Basic : PostScript;PDF converter, UNIX
-OpenOffice.org Basic : PowerPoint export
-OpenOffice.org Basic : precision as shown (Calc)
-OpenOffice.org Basic : predefining fonts
-OpenOffice.org Basic : presentations
-OpenOffice.org Basic : presentations;creating/opening
-OpenOffice.org Basic : presentations;inserting spreadsheet cells
-OpenOffice.org Basic : presentations;live on the Internet
-OpenOffice.org Basic : presentations;print menu
-OpenOffice.org Basic : presentations;saving
-OpenOffice.org Basic : presentations;saving automatically
-OpenOffice.org Basic : presentations;saving in other formats
-OpenOffice.org Basic : presentations;sending as e-mail
-OpenOffice.org Basic : presentations;starting with wizard
-OpenOffice.org Basic : presentations;wizards
-OpenOffice.org Basic : press buttons, see push buttons
-OpenOffice.org Basic : previews
-OpenOffice.org Basic : previews;fonts lists
-OpenOffice.org Basic : primary keys
-OpenOffice.org Basic : primary keys;defining
-OpenOffice.org Basic : primary keys;inserting (Base)
-OpenOffice.org Basic : print area selection
-OpenOffice.org Basic : Print statement
-OpenOffice.org Basic : printer metrics for document formatting (Writer)
-OpenOffice.org Basic : printers
-OpenOffice.org Basic : printers;adding, UNIX
-OpenOffice.org Basic : printers;choosing
-OpenOffice.org Basic : printers;default printer
-OpenOffice.org Basic : printers;faxes under UNIX
-OpenOffice.org Basic : printers;maximum page formats
-OpenOffice.org Basic : printers;paper trays
-OpenOffice.org Basic : printers;properties
-OpenOffice.org Basic : printing
-OpenOffice.org Basic : printing;black and white
-OpenOffice.org Basic : printing;brochures
-OpenOffice.org Basic : printing;colors in grayscale
-OpenOffice.org Basic : printing;copies
-OpenOffice.org Basic : printing;creating individual jobs
-OpenOffice.org Basic : printing;dates in presentations
-OpenOffice.org Basic : printing;directly
-OpenOffice.org Basic : printing;documents
-OpenOffice.org Basic : printing;drawings defaults
-OpenOffice.org Basic : printing;elements in text documents
-OpenOffice.org Basic : printing;faster
-OpenOffice.org Basic : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Basic : printing;fitting to pages in presentations
-OpenOffice.org Basic : printing;formulas in OpenOffice.org Math
-OpenOffice.org Basic : printing;hidden pages of presentations
-OpenOffice.org Basic : printing;in original size in OpenOffice.org Math
-OpenOffice.org Basic : printing;left/right pages
-OpenOffice.org Basic : printing;queries (Base)
-OpenOffice.org Basic : printing;scaling in OpenOffice.org Math
-OpenOffice.org Basic : printing;selections
-OpenOffice.org Basic : printing;text always in black
-OpenOffice.org Basic : printing;text in reverse order
-OpenOffice.org Basic : printing;tiling pages in presentations
-OpenOffice.org Basic : printing;transparencies
-OpenOffice.org Basic : printing;warnings
-OpenOffice.org Basic : printing;without scaling in presentations
-OpenOffice.org Basic : printing speed
-OpenOffice.org Basic : PRIVATE variables
-OpenOffice.org Basic : procedures
-OpenOffice.org Basic : ProcessServiceManager
-OpenOffice.org Basic : program stops
-OpenOffice.org Basic : programming
-OpenOffice.org Basic : programming;OpenOffice.org
-OpenOffice.org Basic : programming;scripting
-OpenOffice.org Basic : programming examples for controls
-OpenOffice.org Basic : progress bar control
-OpenOffice.org Basic : properties
-OpenOffice.org Basic : properties;controls and dialogs
-OpenOffice.org Basic : properties;controls in dialog editor
-OpenOffice.org Basic : properties;fields in databases
-OpenOffice.org Basic : properties;files
-OpenOffice.org Basic : properties;form controls
-OpenOffice.org Basic : properties;forms
-OpenOffice.org Basic : properties;printers
-OpenOffice.org Basic : protected contents
-OpenOffice.org Basic : protected dashes
-OpenOffice.org Basic : protected database tables
-OpenOffice.org Basic : protected documents
-OpenOffice.org Basic : protected spaces
-OpenOffice.org Basic : protected spaces;inserting
-OpenOffice.org Basic : protected spaces;showing (Writer)
-OpenOffice.org Basic : protecting
-OpenOffice.org Basic : protecting;contents
-OpenOffice.org Basic : protecting;recorded changes
-OpenOffice.org Basic : proxy settings
-OpenOffice.org Basic : Public statement
-OpenOffice.org Basic : PUBLIC variables
-OpenOffice.org Basic : push button control in dialog editor
-OpenOffice.org Basic : push buttons
-OpenOffice.org Basic : push buttons;adding to documents
-OpenOffice.org Basic : push buttons;creating
-OpenOffice.org Basic : Put statement
-OpenOffice.org Basic : queries
-OpenOffice.org Basic : queries;copying (Base)
-OpenOffice.org Basic : queries;creating in design view (Base)
-OpenOffice.org Basic : queries;creating in SQL view
-OpenOffice.org Basic : queries;defining (Base)
-OpenOffice.org Basic : queries;deleting table links (Base)
-OpenOffice.org Basic : queries;editing in data source view
-OpenOffice.org Basic : queries;formulating filter conditions (Base)
-OpenOffice.org Basic : queries;joining tables (Base)
-OpenOffice.org Basic : queries;missing elements (Base)
-OpenOffice.org Basic : queries;overview (Base)
-OpenOffice.org Basic : queries;parameter queries (Base)
-OpenOffice.org Basic : queries;printing (Base)
-OpenOffice.org Basic : Query Wizard (Base)
-OpenOffice.org Basic : quickstarter
-OpenOffice.org Basic : quotation marks
-OpenOffice.org Basic : quotation marks;replacing
-OpenOffice.org Basic : quotes
-OpenOffice.org Basic : quotes;custom
-OpenOffice.org Basic : radio button control
-OpenOffice.org Basic : radio button creation
-OpenOffice.org Basic : Randomize statement
-OpenOffice.org Basic : read-only documents
-OpenOffice.org Basic : read-only documents;cursor
-OpenOffice.org Basic : read-only documents;database tables on/off
-OpenOffice.org Basic : read-only documents;editing
-OpenOffice.org Basic : read-only documents;opening documents as
-OpenOffice.org Basic : read-only items in Data Navigator
-OpenOffice.org Basic : recognizing URLs automatically
-OpenOffice.org Basic : recording
-OpenOffice.org Basic : recording;changes
-OpenOffice.org Basic : recording;macros
-OpenOffice.org Basic : records
-OpenOffice.org Basic : records;inserting notes
-OpenOffice.org Basic : records;protecting
-OpenOffice.org Basic : records;saving
-OpenOffice.org Basic : records;searching in databases
-OpenOffice.org Basic : rectangles with round corners
-OpenOffice.org Basic : recursions in spreadsheets
-OpenOffice.org Basic : Red function
-OpenOffice.org Basic : ReDim statement
-OpenOffice.org Basic : redo command
-OpenOffice.org Basic : reduced printing
-OpenOffice.org Basic : reference lines
-OpenOffice.org Basic : references
-OpenOffice.org Basic : references;displaying in color (Calc)
-OpenOffice.org Basic : references;expanding (Calc)
-OpenOffice.org Basic : references;iterative (Calc)
-OpenOffice.org Basic : Refresh Data feature in Microsoft Office
-OpenOffice.org Basic : register-true
-OpenOffice.org Basic : register-true;definition
-OpenOffice.org Basic : registering
-OpenOffice.org Basic : registering;address books
-OpenOffice.org Basic : registering;databases (Base)
-OpenOffice.org Basic : registering;OpenOffice.org
-OpenOffice.org Basic : regular expressions
-OpenOffice.org Basic : regular expressions;list of
-OpenOffice.org Basic : regular expressions;opening files
-OpenOffice.org Basic : relational databases (Base)
-OpenOffice.org Basic : relations
-OpenOffice.org Basic : relations;creating and deleting (Base)
-OpenOffice.org Basic : relations;joining tables (Base)
-OpenOffice.org Basic : relations;properties (Base)
-OpenOffice.org Basic : relative hyperlinks
-OpenOffice.org Basic : relative saving of URLs
-OpenOffice.org Basic : reloading
-OpenOffice.org Basic : reloading;documents
-OpenOffice.org Basic : reloading;HTML documents, automatically
-OpenOffice.org Basic : Rem statement
-OpenOffice.org Basic : remarks, see also notes
-OpenOffice.org Basic : remote configurations
-OpenOffice.org Basic : remove noise filter
-OpenOffice.org Basic : removing
-OpenOffice.org Basic : removing;bullets and numbering
-OpenOffice.org Basic : removing;form filters
-OpenOffice.org Basic : removing, see also deleting
-OpenOffice.org Basic : renaming modules and dialogs
-OpenOffice.org Basic : Replace text as you type feature in Microsoft Office
-OpenOffice.org Basic : replacement options
-OpenOffice.org Basic : replacement table
-OpenOffice.org Basic : replacing
-OpenOffice.org Basic : replacing;AutoCorrect function
-OpenOffice.org Basic : replacing;dashes
-OpenOffice.org Basic : Report Builder
-OpenOffice.org Basic : reports
-OpenOffice.org Basic : reports;creating
-OpenOffice.org Basic : reports;error reports
-OpenOffice.org Basic : reports;opening and editing
-OpenOffice.org Basic : reports;templates
-OpenOffice.org Basic : Reset statement
-OpenOffice.org Basic : resetting
-OpenOffice.org Basic : resetting;templates
-OpenOffice.org Basic : resizing
-OpenOffice.org Basic : resizing;objects, by mouse
-OpenOffice.org Basic : resizing, see also scaling/zooming
-OpenOffice.org Basic : resolution when printing bitmaps
-OpenOffice.org Basic : restoring
-OpenOffice.org Basic : restoring;default formatting
-OpenOffice.org Basic : restoring;editing
-OpenOffice.org Basic : Resume Next parameter
-OpenOffice.org Basic : return value type of functions
-OpenOffice.org Basic : reversing printing order
-OpenOffice.org Basic : review function
-OpenOffice.org Basic : review function;accepting or rejecting changes
-OpenOffice.org Basic : review function;comparing documents
-OpenOffice.org Basic : review function;recording changes example
-OpenOffice.org Basic : rich text control
-OpenOffice.org Basic : right alignment of paragraphs
-OpenOffice.org Basic : Right function
-OpenOffice.org Basic : right joins (Base)
-OpenOffice.org Basic : right-to-left text
-OpenOffice.org Basic : RmDir statement
-OpenOffice.org Basic : Rnd function
-OpenOffice.org Basic : rotating
-OpenOffice.org Basic : rotating;3D text
-OpenOffice.org Basic : round corners
-OpenOffice.org Basic : rounding precision (Calc)
-OpenOffice.org Basic : row headers
-OpenOffice.org Basic : row headers;displaying (Calc)
-OpenOffice.org Basic : row headers;highlighting (Calc)
-OpenOffice.org Basic : RSet statement
-OpenOffice.org Basic : RTrim function
-OpenOffice.org Basic : rulers
-OpenOffice.org Basic : rulers;default settings
-OpenOffice.org Basic : rulers;measurement units
-OpenOffice.org Basic : rulers;visible in presentations
-OpenOffice.org Basic : run-time errors in Basic
-OpenOffice.org Basic : samples and templates
-OpenOffice.org Basic : saving
-OpenOffice.org Basic : saving;Basic code
-OpenOffice.org Basic : saving;default file formats
-OpenOffice.org Basic : saving;dialog settings
-OpenOffice.org Basic : saving;documents
-OpenOffice.org Basic : saving;documents for mobile devices
-OpenOffice.org Basic : saving;documents in other formats
-OpenOffice.org Basic : saving;documents, automatically
-OpenOffice.org Basic : saving;in Microsoft Office file format
-OpenOffice.org Basic : saving;options
-OpenOffice.org Basic : saving;templates
-OpenOffice.org Basic : saving;to XML
-OpenOffice.org Basic : saving;VBA code in Microsoft Office documents
-OpenOffice.org Basic : saving;with password by default
-OpenOffice.org Basic : saving as command
-OpenOffice.org Basic : saving as command;precautions
-OpenOffice.org Basic : scaling
-OpenOffice.org Basic : scaling;font sizes in user interface
-OpenOffice.org Basic : scaling;objects
-OpenOffice.org Basic : scaling;pictures
-OpenOffice.org Basic : scaling;printing in OpenOffice.org Math
-OpenOffice.org Basic : scaling;when printing presentations
-OpenOffice.org Basic : scaling, see also zooming
-OpenOffice.org Basic : scope of variables
-OpenOffice.org Basic : screen
-OpenOffice.org Basic : screen;full screen views
-OpenOffice.org Basic : screen;scaling
-OpenOffice.org Basic : screen magnifiers
-OpenOffice.org Basic : screen readers
-OpenOffice.org Basic : script organization
-OpenOffice.org Basic : scripting in programming
-OpenOffice.org Basic : scroll bar control
-OpenOffice.org Basic : scrollbars
-OpenOffice.org Basic : scrollbars;controls
-OpenOffice.org Basic : scrollbars;displaying (Calc)
-OpenOffice.org Basic : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Basic : search criteria for database functions in cells
-OpenOffice.org Basic : search engines
-OpenOffice.org Basic : search engines;definition
-OpenOffice.org Basic : search engines;selecting
-OpenOffice.org Basic : searching
-OpenOffice.org Basic : searching;all sheets
-OpenOffice.org Basic : searching;databases
-OpenOffice.org Basic : searching;form filters
-OpenOffice.org Basic : searching;Internet
-OpenOffice.org Basic : searching;tables and forms
-OpenOffice.org Basic : Second function
-OpenOffice.org Basic : sections
-OpenOffice.org Basic : sections;backgrounds
-OpenOffice.org Basic : sections;protecting
-OpenOffice.org Basic : security
-OpenOffice.org Basic : security;options for documents with macros
-OpenOffice.org Basic : security;protecting contents
-OpenOffice.org Basic : security;warning dialogs with macros
-OpenOffice.org Basic : Seek function
-OpenOffice.org Basic : Seek statement
-OpenOffice.org Basic : Select...Case statement
-OpenOffice.org Basic : selecting
-OpenOffice.org Basic : selecting;controls
-OpenOffice.org Basic : selecting;group objects
-OpenOffice.org Basic : selecting;measurement units
-OpenOffice.org Basic : selecting;objects
-OpenOffice.org Basic : selecting;print areas
-OpenOffice.org Basic : selecting;several files
-OpenOffice.org Basic : selection clipboard
-OpenOffice.org Basic : selection modes in text
-OpenOffice.org Basic : selection options for controls
-OpenOffice.org Basic : sending
-OpenOffice.org Basic : sending;AutoAbstract function in presentations
-OpenOffice.org Basic : sending;documents as e-mail
-OpenOffice.org Basic : sending;documents as faxes
-OpenOffice.org Basic : separator lines
-OpenOffice.org Basic : separator lines;defining
-OpenOffice.org Basic : separators
-OpenOffice.org Basic : separators;conditional
-OpenOffice.org Basic : Server Side ImageMap
-OpenOffice.org Basic : Set statement
-OpenOffice.org Basic : SetAttr statement
-OpenOffice.org Basic : settings
-OpenOffice.org Basic : settings;printers
-OpenOffice.org Basic : settings;program configuration
-OpenOffice.org Basic : settings;proxies
-OpenOffice.org Basic : settings;tracking changes
-OpenOffice.org Basic : settings;views
-OpenOffice.org Basic : SGML
-OpenOffice.org Basic : SGML;definition
-OpenOffice.org Basic : Sgn function
-OpenOffice.org Basic : shadows
-OpenOffice.org Basic : shadows;areas
-OpenOffice.org Basic : shadows;borders
-OpenOffice.org Basic : shadows;characters
-OpenOffice.org Basic : shadows;characters, using context menu
-OpenOffice.org Basic : sharpening filter
-OpenOffice.org Basic : sheet tabs
-OpenOffice.org Basic : sheet tabs;displaying
-OpenOffice.org Basic : sheets
-OpenOffice.org Basic : sheets;searching all
-OpenOffice.org Basic : Shell function
-OpenOffice.org Basic : shortcut keys
-OpenOffice.org Basic : shortcut keys;assigning macros
-OpenOffice.org Basic : shortcut keys;Basic IDE
-OpenOffice.org Basic : shortcut keys;general
-OpenOffice.org Basic : shortcut keys;in databases
-OpenOffice.org Basic : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Basic : Show/Hide feature in Microsoft Office
-OpenOffice.org Basic : showing
-OpenOffice.org Basic : showing;changes
-OpenOffice.org Basic : showing;docked windows
-OpenOffice.org Basic : showing;drawings and controls (Writer)
-OpenOffice.org Basic : showing;live presentations on the Internet
-OpenOffice.org Basic : showing;toolbars
-OpenOffice.org Basic : signing documents with digital signatures
-OpenOffice.org Basic : similarity search
-OpenOffice.org Basic : simple handles (Writer)
-OpenOffice.org Basic : simplified Chinese
-OpenOffice.org Basic : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Basic : Sin function
-OpenOffice.org Basic : single sign on options
-OpenOffice.org Basic : single-line spacing in text
-OpenOffice.org Basic : sizes
-OpenOffice.org Basic : sizes;draw objects
-OpenOffice.org Basic : sizes;pictures
-OpenOffice.org Basic : slanting draw objects
-OpenOffice.org Basic : small capitals
-OpenOffice.org Basic : small icons
-OpenOffice.org Basic : smart tags
-OpenOffice.org Basic : smart tags;options
-OpenOffice.org Basic : smooth scrolling (Writer)
-OpenOffice.org Basic : smoothing filter
-OpenOffice.org Basic : snap grid defaults (Writer/Calc)
-OpenOffice.org Basic : snapping in presentations and drawings
-OpenOffice.org Basic : solarization filter
-OpenOffice.org Basic : sort lists
-OpenOffice.org Basic : sort lists;copying to in Calc
-OpenOffice.org Basic : sorting
-OpenOffice.org Basic : sorting;data in forms
-OpenOffice.org Basic : sorting;databases
-OpenOffice.org Basic : sounds
-OpenOffice.org Basic : sounds;inserting and playing
-OpenOffice.org Basic : sounds;UNIX
-OpenOffice.org Basic : Space function
-OpenOffice.org Basic : spaces
-OpenOffice.org Basic : spaces;displaying (Writer)
-OpenOffice.org Basic : spaces;ignoring double
-OpenOffice.org Basic : spaces;inserting protected spaces
-OpenOffice.org Basic : spaces;showing protected spaces (Writer)
-OpenOffice.org Basic : spacing
-OpenOffice.org Basic : spacing;between paragraphs in footnotes
-OpenOffice.org Basic : spacing;font effects
-OpenOffice.org Basic : spacing;lines and paragraphs
-OpenOffice.org Basic : spacing;tab stops in text documents
-OpenOffice.org Basic : spacing;tabs in presentations
-OpenOffice.org Basic : spadmin
-OpenOffice.org Basic : special characters
-OpenOffice.org Basic : speech bubbles
-OpenOffice.org Basic : speed of printing
-OpenOffice.org Basic : spellcheck
-OpenOffice.org Basic : spellcheck;activating for a language
-OpenOffice.org Basic : spellcheck;context menus
-OpenOffice.org Basic : spellcheck;default languages
-OpenOffice.org Basic : spellcheck;dialog
-OpenOffice.org Basic : spellcheck;dictionary of exceptions
-OpenOffice.org Basic : spellcheck;ignore list
-OpenOffice.org Basic : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Basic : spin button creation
-OpenOffice.org Basic : Split function
-OpenOffice.org Basic : spoolfiles with Xprinter
-OpenOffice.org Basic : spreadsheets
-OpenOffice.org Basic : spreadsheets;as databases (base)
-OpenOffice.org Basic : spreadsheets;backgrounds
-OpenOffice.org Basic : spreadsheets;copying areas to text documents
-OpenOffice.org Basic : spreadsheets;creating/opening
-OpenOffice.org Basic : spreadsheets;inserting charts
-OpenOffice.org Basic : spreadsheets;inserting database records
-OpenOffice.org Basic : spreadsheets;printing
-OpenOffice.org Basic : spreadsheets;saving
-OpenOffice.org Basic : spreadsheets;saving automatically
-OpenOffice.org Basic : spreadsheets;saving in other formats
-OpenOffice.org Basic : spreadsheets;sending as e-mail
-OpenOffice.org Basic : SQL
-OpenOffice.org Basic : SQL;definition
-OpenOffice.org Basic : SQL;DISTINCT parameter
-OpenOffice.org Basic : SQL;executing SQL commands
-OpenOffice.org Basic : SQL;executing SQL statements (Base)
-OpenOffice.org Basic : SQL;queries (Base)
-OpenOffice.org Basic : Sqr function
-OpenOffice.org Basic : square drawings
-OpenOffice.org Basic : standard bar on/off
-OpenOffice.org Basic : standard filters in databases
-OpenOffice.org Basic : standard printer under UNIX
-OpenOffice.org Basic : Start Module backing window
-OpenOffice.org Basic : start parameters
-OpenOffice.org Basic : Static statement
-OpenOffice.org Basic : status bar on/off
-OpenOffice.org Basic : Step statement
-OpenOffice.org Basic : stickers
-OpenOffice.org Basic : Stop statement
-OpenOffice.org Basic : stopping macros
-OpenOffice.org Basic : Str function
-OpenOffice.org Basic : StrComp function
-OpenOffice.org Basic : strikethrough
-OpenOffice.org Basic : strikethrough;characters
-OpenOffice.org Basic : strikethrough;font effects
-OpenOffice.org Basic : String function
-OpenOffice.org Basic : styles
-OpenOffice.org Basic : styles;'changed' message
-OpenOffice.org Basic : styles;copying between documents
-OpenOffice.org Basic : styles;keyboard shortcuts
-OpenOffice.org Basic : styles;organizing
-OpenOffice.org Basic : styles;printing styles used in a document
-OpenOffice.org Basic : styles;replacing automatically
-OpenOffice.org Basic : Styles and Formatting window
-OpenOffice.org Basic : Styles and Formatting window;docking
-OpenOffice.org Basic : Sub statement
-OpenOffice.org Basic : subforms
-OpenOffice.org Basic : subforms;creating
-OpenOffice.org Basic : subforms;description
-OpenOffice.org Basic : submitting forms
-OpenOffice.org Basic : subroutines
-OpenOffice.org Basic : suffixes in file formats
-OpenOffice.org Basic : support on the Web
-OpenOffice.org Basic : Switch function
-OpenOffice.org Basic : synchronizing
-OpenOffice.org Basic : synchronizing;labels and business cards
-OpenOffice.org Basic : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Basic : system address book registration
-OpenOffice.org Basic : tab stops
-OpenOffice.org Basic : tab stops;displaying (Writer)
-OpenOffice.org Basic : tab stops;inserting and editing
-OpenOffice.org Basic : tab stops;setting in sheets
-OpenOffice.org Basic : tab stops;settings
-OpenOffice.org Basic : tab stops;spacing in presentations
-OpenOffice.org Basic : tab stops;spacing in text documents
-OpenOffice.org Basic : table controls
-OpenOffice.org Basic : table controls;form functions
-OpenOffice.org Basic : table controls;keyboard-only edit mode
-OpenOffice.org Basic : table controls;properties
-OpenOffice.org Basic : table views of databases
-OpenOffice.org Basic : Table Wizard (Base)
-OpenOffice.org Basic : tables
-OpenOffice.org Basic : tables;backgrounds
-OpenOffice.org Basic : tables;inserting line breaks
-OpenOffice.org Basic : tables in databases
-OpenOffice.org Basic : tables in databases;access rights to (Base)
-OpenOffice.org Basic : tables in databases;adding to queries
-OpenOffice.org Basic : tables in databases;browsing and editing
-OpenOffice.org Basic : tables in databases;copying database tables (Base)
-OpenOffice.org Basic : tables in databases;creating
-OpenOffice.org Basic : tables in databases;creating in design view
-OpenOffice.org Basic : tables in databases;importing text formats (Base)
-OpenOffice.org Basic : tables in databases;joining for queries (Base)
-OpenOffice.org Basic : tables in databases;printing queries (Base)
-OpenOffice.org Basic : tables in databases;relations (Base)
-OpenOffice.org Basic : tables in databases;searching
-OpenOffice.org Basic : tables in spreadsheets
-OpenOffice.org Basic : tables in spreadsheets;copying data to other applications
-OpenOffice.org Basic : tables in spreadsheets;defining borders
-OpenOffice.org Basic : tables in spreadsheets;value highlighting
-OpenOffice.org Basic : tables in text
-OpenOffice.org Basic : tables in text;captions
-OpenOffice.org Basic : tables in text;creating automatically
-OpenOffice.org Basic : tables in text;default settings
-OpenOffice.org Basic : tables in text;defining borders
-OpenOffice.org Basic : tables in text;displaying
-OpenOffice.org Basic : tables in text;printing
-OpenOffice.org Basic : tables in text;protecting cells
-OpenOffice.org Basic : tables of contents
-OpenOffice.org Basic : tables of contents;unprotecting
-OpenOffice.org Basic : tabs
-OpenOffice.org Basic : tabs;displaying sheet tabs
-OpenOffice.org Basic : tags
-OpenOffice.org Basic : tags;definition
-OpenOffice.org Basic : tags;META tags
-OpenOffice.org Basic : Tan function
-OpenOffice.org Basic : templates
-OpenOffice.org Basic : templates;agendas
-OpenOffice.org Basic : templates;changing basic fonts
-OpenOffice.org Basic : templates;database reports
-OpenOffice.org Basic : templates;deleting
-OpenOffice.org Basic : templates;editing and saving
-OpenOffice.org Basic : templates;faxes
-OpenOffice.org Basic : templates;importing and exporting
-OpenOffice.org Basic : templates;letters
-OpenOffice.org Basic : templates;new documents from templates
-OpenOffice.org Basic : templates;opening documents with
-OpenOffice.org Basic : templates;organizing
-OpenOffice.org Basic : terminology
-OpenOffice.org Basic : terminology;general glossary
-OpenOffice.org Basic : terminology;Internet glossary
-OpenOffice.org Basic : test mode control
-OpenOffice.org Basic : testing XML filters
-OpenOffice.org Basic : text
-OpenOffice.org Basic : text;animating
-OpenOffice.org Basic : text;Asian layout
-OpenOffice.org Basic : text;backgrounds
-OpenOffice.org Basic : text;bold
-OpenOffice.org Basic : text;coloring
-OpenOffice.org Basic : text;contours
-OpenOffice.org Basic : text;copying by drag and drop
-OpenOffice.org Basic : text;CTL languages
-OpenOffice.org Basic : text;drawing pictures
-OpenOffice.org Basic : text;font effects
-OpenOffice.org Basic : text;font sizes
-OpenOffice.org Basic : text;font styles
-OpenOffice.org Basic : text;fonts and formats
-OpenOffice.org Basic : text;Fontwork icons
-OpenOffice.org Basic : text;hyperlinks
-OpenOffice.org Basic : text;inserting special characters
-OpenOffice.org Basic : text;italics
-OpenOffice.org Basic : text;kerning
-OpenOffice.org Basic : text;language selection
-OpenOffice.org Basic : text;line spacing
-OpenOffice.org Basic : text;overwriting or inserting
-OpenOffice.org Basic : text;placeholders in presentations
-OpenOffice.org Basic : text;printing in black
-OpenOffice.org Basic : text;replacing with format
-OpenOffice.org Basic : text;selection modes
-OpenOffice.org Basic : text;shadowed
-OpenOffice.org Basic : text;text/draw objects
-OpenOffice.org Basic : text attributes
-OpenOffice.org Basic : text attributes;hyperlinks
-OpenOffice.org Basic : text attributes;undoing
-OpenOffice.org Basic : text boxes
-OpenOffice.org Basic : text boxes;controls
-OpenOffice.org Basic : text boxes;form functions
-OpenOffice.org Basic : text boxes;positioning
-OpenOffice.org Basic : text breaks in cells
-OpenOffice.org Basic : text colors for better accessibility
-OpenOffice.org Basic : text databases (Base)
-OpenOffice.org Basic : text documents
-OpenOffice.org Basic : text documents;creating/opening
-OpenOffice.org Basic : text documents;importing/exporting
-OpenOffice.org Basic : text documents;inserting spreadsheet cells
-OpenOffice.org Basic : text documents;print settings
-OpenOffice.org Basic : text documents;printing
-OpenOffice.org Basic : text documents;saving
-OpenOffice.org Basic : text documents;saving automatically
-OpenOffice.org Basic : text documents;saving in other formats
-OpenOffice.org Basic : text documents;sending as e-mail
-OpenOffice.org Basic : text effects
-OpenOffice.org Basic : text flow
-OpenOffice.org Basic : text flow;in cells
-OpenOffice.org Basic : text formats
-OpenOffice.org Basic : text formats;databases
-OpenOffice.org Basic : text formats;pasting
-OpenOffice.org Basic : text input fields
-OpenOffice.org Basic : text layout for special languages
-OpenOffice.org Basic : text objects
-OpenOffice.org Basic : text objects;alignment
-OpenOffice.org Basic : text objects;draw functions
-OpenOffice.org Basic : text objects;fonts
-OpenOffice.org Basic : text objects;in presentations and drawings
-OpenOffice.org Basic : text overflow in spreadsheet cells
-OpenOffice.org Basic : text, see also text documents, paragraphs and characters
-OpenOffice.org Basic : TextArt, see Fontwork
-OpenOffice.org Basic : textures
-OpenOffice.org Basic : textures;inserting from Gallery
-OpenOffice.org Basic : textures;on chart bars
-OpenOffice.org Basic : Thai
-OpenOffice.org Basic : Thai;entering text
-OpenOffice.org Basic : Thai;language settings
-OpenOffice.org Basic : thesaurus
-OpenOffice.org Basic : thesaurus;activating for a language
-OpenOffice.org Basic : ThisComponent property
-OpenOffice.org Basic : ticker text
-OpenOffice.org Basic : time field control
-OpenOffice.org Basic : time fields
-OpenOffice.org Basic : time fields;form functions
-OpenOffice.org Basic : Time statement
-OpenOffice.org Basic : Timer function
-OpenOffice.org Basic : times
-OpenOffice.org Basic : times;inserting when printing presentations
-OpenOffice.org Basic : times, formats
-OpenOffice.org Basic : TimeSerial function
-OpenOffice.org Basic : TimeValue function
-OpenOffice.org Basic : tips
-OpenOffice.org Basic : tips;extended tips in Help
-OpenOffice.org Basic : title rows
-OpenOffice.org Basic : title rows;printing in OpenOffice.org Math
-OpenOffice.org Basic : titles
-OpenOffice.org Basic : titles;changing
-OpenOffice.org Basic : titles;editing in charts
-OpenOffice.org Basic : titles;font effects
-OpenOffice.org Basic : titles;formatting automatically
-OpenOffice.org Basic : titles;objects
-OpenOffice.org Basic : To statement
-OpenOffice.org Basic : toolbars
-OpenOffice.org Basic : toolbars;adding buttons
-OpenOffice.org Basic : toolbars;Basic IDE
-OpenOffice.org Basic : toolbars;docking/undocking
-OpenOffice.org Basic : toolbars;Form Navigation bar
-OpenOffice.org Basic : toolbars;viewing/closing
-OpenOffice.org Basic : tools bar
-OpenOffice.org Basic : tooltips
-OpenOffice.org Basic : tooltips;extended tips
-OpenOffice.org Basic : tooltips;help
-OpenOffice.org Basic : Track changes feature in Microsoft Office
-OpenOffice.org Basic : traditional Chinese
-OpenOffice.org Basic : traditional Chinese;translating to simplified chinese
-OpenOffice.org Basic : translating dialogs
-OpenOffice.org Basic : transparency
-OpenOffice.org Basic : transparency;areas
-OpenOffice.org Basic : transparency;off for faster printing
-OpenOffice.org Basic : transparency;saving
-OpenOffice.org Basic : tree view of Help
-OpenOffice.org Basic : Trim function
-OpenOffice.org Basic : twips
-OpenOffice.org Basic : twips;definition
-OpenOffice.org Basic : TwipsPerPixelX function
-OpenOffice.org Basic : TwipsPerPixelY function
-OpenOffice.org Basic : typefaces
-OpenOffice.org Basic : typefaces;adding under UNIX
-OpenOffice.org Basic : typefaces;formats
-OpenOffice.org Basic : TypeName function
-OpenOffice.org Basic : types of variables
-OpenOffice.org Basic : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Basic : typography
-OpenOffice.org Basic : typography;Asian
-OpenOffice.org Basic : UBound function
-OpenOffice.org Basic : UCase function
-OpenOffice.org Basic : underlining
-OpenOffice.org Basic : underlining;AutoFormat function
-OpenOffice.org Basic : underlining;characters
-OpenOffice.org Basic : underlining;text
-OpenOffice.org Basic : undocking windows
-OpenOffice.org Basic : undoing
-OpenOffice.org Basic : undoing;direct formatting
-OpenOffice.org Basic : undoing;editing
-OpenOffice.org Basic : undoing;number of steps
-OpenOffice.org Basic : ungrouping groups
-OpenOffice.org Basic : units
-OpenOffice.org Basic : units;converting
-OpenOffice.org Basic : units;measurement units
-OpenOffice.org Basic : UNO components
-OpenOffice.org Basic : UNO components;Extension Manager
-OpenOffice.org Basic : UNO components;integrating new
-OpenOffice.org Basic : Until
-OpenOffice.org Basic : update options
-OpenOffice.org Basic : updates
-OpenOffice.org Basic : updates;checking automatically
-OpenOffice.org Basic : updates;checking manually
-OpenOffice.org Basic : updating
-OpenOffice.org Basic : updating;fields and charts, automatically (Writer)
-OpenOffice.org Basic : updating;links in text documents
-OpenOffice.org Basic : updating;links, on opening
-OpenOffice.org Basic : updating;templates
-OpenOffice.org Basic : URL
-OpenOffice.org Basic : URL;changing hyperlink URLs
-OpenOffice.org Basic : URL;definition
-OpenOffice.org Basic : URL;saving absolute/relative paths
-OpenOffice.org Basic : URL;turning off URL recognition
-OpenOffice.org Basic : user data
-OpenOffice.org Basic : user data;input
-OpenOffice.org Basic : user data;removing when saving
-OpenOffice.org Basic : user-defined dictionaries
-OpenOffice.org Basic : user-defined dictionaries;creating
-OpenOffice.org Basic : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Basic : user-defined dictionaries;editing
-OpenOffice.org Basic : user-defined styles
-OpenOffice.org Basic : user-defined styles;automatically replacing
-OpenOffice.org Basic : UTF-8/UCS2 support
-OpenOffice.org Basic : Val function
-OpenOffice.org Basic : Validation feature in Microsoft Office
-OpenOffice.org Basic : values
-OpenOffice.org Basic : values;of variables
-OpenOffice.org Basic : values;rounded as shown (Calc)
-OpenOffice.org Basic : variables
-OpenOffice.org Basic : variables;for paths
-OpenOffice.org Basic : variables;global and local
-OpenOffice.org Basic : variables;observing values
-OpenOffice.org Basic : variables;passing to procedures and functions
-OpenOffice.org Basic : variables;scope
-OpenOffice.org Basic : variables;using
-OpenOffice.org Basic : VarType function
-OpenOffice.org Basic : VBA code
-OpenOffice.org Basic : VBA code;loading/saving documents with VBA code
-OpenOffice.org Basic : version management
-OpenOffice.org Basic : version numbers of documents
-OpenOffice.org Basic : versions
-OpenOffice.org Basic : versions;comparing documents
-OpenOffice.org Basic : versions;file saving as, restriction
-OpenOffice.org Basic : versions;merging document versions
-OpenOffice.org Basic : versions;of a document
-OpenOffice.org Basic : versions;OpenOffice.org
-OpenOffice.org Basic : vertical callouts
-OpenOffice.org Basic : vertical line control
-OpenOffice.org Basic : vertical scrollbar control
-OpenOffice.org Basic : vertical scrollbars (Writer)
-OpenOffice.org Basic : vertical text boxes
-OpenOffice.org Basic : videos
-OpenOffice.org Basic : viewing
-OpenOffice.org Basic : viewing;databases
-OpenOffice.org Basic : viewing;file properties
-OpenOffice.org Basic : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Basic : viewing;toolbars
-OpenOffice.org Basic : views
-OpenOffice.org Basic : views;creating database views (Base)
-OpenOffice.org Basic : views;defaults
-OpenOffice.org Basic : views;full screen
-OpenOffice.org Basic : views;icons
-OpenOffice.org Basic : views;in 3D
-OpenOffice.org Basic : views;scaling
-OpenOffice.org Basic : Visual Basic for Applications
-OpenOffice.org Basic : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Basic : Wait statement
-OpenOffice.org Basic : watching variables
-OpenOffice.org Basic : watermarks
-OpenOffice.org Basic : web documents
-OpenOffice.org Basic : web documents;XForms
-OpenOffice.org Basic : Web support
-OpenOffice.org Basic : WebCast export
-OpenOffice.org Basic : WeekDay function
-OpenOffice.org Basic : While
-OpenOffice.org Basic : While;Do loop
-OpenOffice.org Basic : While;While...Wend loop
-OpenOffice.org Basic : windows
-OpenOffice.org Basic : windows;docking
-OpenOffice.org Basic : windows;docking definition
-OpenOffice.org Basic : windows;hiding/showing/docking
-OpenOffice.org Basic : windows;new
-OpenOffice.org Basic : With statement
-OpenOffice.org Basic : wizards
-OpenOffice.org Basic : wizards;agendas
-OpenOffice.org Basic : wizards;database queries
-OpenOffice.org Basic : wizards;database tables (Base)
-OpenOffice.org Basic : wizards;databases (Base)
-OpenOffice.org Basic : wizards;document converter
-OpenOffice.org Basic : wizards;Euro Converter
-OpenOffice.org Basic : wizards;faxes
-OpenOffice.org Basic : wizards;forms
-OpenOffice.org Basic : wizards;letters
-OpenOffice.org Basic : wizards;overview
-OpenOffice.org Basic : wizards;presentations
-OpenOffice.org Basic : wizards;reports
-OpenOffice.org Basic : Word documents
-OpenOffice.org Basic : Word documents;compatibility
-OpenOffice.org Basic : Word documents;saving as
-OpenOffice.org Basic : WordArt, see Fontwork
-OpenOffice.org Basic : words
-OpenOffice.org Basic : words;automatically replacing
-OpenOffice.org Basic : words;wrapping in cells
-OpenOffice.org Basic : work directory change
-OpenOffice.org Basic : Workbook feature in Microsoft Office
-OpenOffice.org Basic : Worksheet feature in Microsoft Office
-OpenOffice.org Basic : wrapping text
-OpenOffice.org Basic : wrapping text;in cells
-OpenOffice.org Basic : write protection on/off
-OpenOffice.org Basic : Write statement
-OpenOffice.org Basic : writing aids options
-OpenOffice.org Basic : WYSIWYG in fonts lists
-OpenOffice.org Basic : XForms
-OpenOffice.org Basic : XML converters
-OpenOffice.org Basic : XML file formats
-OpenOffice.org Basic : XML filters
-OpenOffice.org Basic : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Basic : XML filters;settings
-OpenOffice.org Basic : XML Forms
-OpenOffice.org Basic : Xor operator (logical)
-OpenOffice.org Basic : XSLT based filters
-OpenOffice.org Basic : XSLT based filters;settings
-OpenOffice.org Basic : XSLT filters, see also XML filters
-OpenOffice.org Basic : Year function
-OpenOffice.org Basic : years
-OpenOffice.org Basic : years;2-digit options
-OpenOffice.org Basic : zero values
-OpenOffice.org Basic : zero values;displaying (Calc)
-OpenOffice.org Basic : zooming
-OpenOffice.org Basic : zooming;page views
-OpenOffice.org Basic : zooming;pictures
-OpenOffice.org Basic : zooming;status bar
-OpenOffice.org Chart : 1/2 replacement
-OpenOffice.org Chart : 3D charts
-OpenOffice.org Chart : 3D text creation
-OpenOffice.org Chart : 3D view
-OpenOffice.org Chart : abbreviation replacement
-OpenOffice.org Chart : absolute hyperlinks
-OpenOffice.org Chart : absolute saving of URLs
-OpenOffice.org Chart : accents
-OpenOffice.org Chart : Access databases (base)
-OpenOffice.org Chart : access rights for database tables (Base)
-OpenOffice.org Chart : accessibility
-OpenOffice.org Chart : accessibility;general shortcuts
-OpenOffice.org Chart : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Chart : accessibility;OpenOffice.org features
-OpenOffice.org Chart : accessibility;options
-OpenOffice.org Chart : activating
-OpenOffice.org Chart : activating;context menus
-OpenOffice.org Chart : activating;Error Report Tool
-OpenOffice.org Chart : activating;extended help tips
-OpenOffice.org Chart : activating;plug-ins
-OpenOffice.org Chart : ActiveX control
-OpenOffice.org Chart : Adabas D databases (base)
-OpenOffice.org Chart : add-ons, see UNO components
-OpenOffice.org Chart : adding
-OpenOffice.org Chart : adding;automatic captions (Writer)
-OpenOffice.org Chart : adding;backgrounds
-OpenOffice.org Chart : adding;buttons in toolbars
-OpenOffice.org Chart : adding;conditions for XForm items
-OpenOffice.org Chart : adding;draw objects
-OpenOffice.org Chart : adding;Fontwork objects
-OpenOffice.org Chart : adding;items in Data Navigator
-OpenOffice.org Chart : adding;namespaces in XForms
-OpenOffice.org Chart : adding;paragraph borders
-OpenOffice.org Chart : adding;pictures from Gallery
-OpenOffice.org Chart : adding;pictures in Gallery
-OpenOffice.org Chart : adding;plug-ins
-OpenOffice.org Chart : adding;push buttons
-OpenOffice.org Chart : adding;table borders
-OpenOffice.org Chart : adding;textures on chart bars
-OpenOffice.org Chart : additional selection mode
-OpenOffice.org Chart : address books
-OpenOffice.org Chart : address books;LDAP server (Base)
-OpenOffice.org Chart : address books;registering
-OpenOffice.org Chart : address labels from databases
-OpenOffice.org Chart : ADO databases (Base)
-OpenOffice.org Chart : Agenda Wizard
-OpenOffice.org Chart : aging filter
-OpenOffice.org Chart : aligning
-OpenOffice.org Chart : aligning;2D charts
-OpenOffice.org Chart : aligning;cells
-OpenOffice.org Chart : aligning;objects
-OpenOffice.org Chart : aligning;paragraphs
-OpenOffice.org Chart : aligning;tables in text
-OpenOffice.org Chart : aligning;text objects
-OpenOffice.org Chart : aligning;titles in charts
-OpenOffice.org Chart : alternative fonts
-OpenOffice.org Chart : ampersand symbol, see also operators
-OpenOffice.org Chart : anchors
-OpenOffice.org Chart : anchors;changing
-OpenOffice.org Chart : anchors;displaying (Calc)
-OpenOffice.org Chart : anchors;types/positions for draw objects
-OpenOffice.org Chart : animations
-OpenOffice.org Chart : animations;accessibility options
-OpenOffice.org Chart : appearance options
-OpenOffice.org Chart : applet insertion
-OpenOffice.org Chart : applying
-OpenOffice.org Chart : applying;languages, to selected text
-OpenOffice.org Chart : Arabic
-OpenOffice.org Chart : Arabic;entering text
-OpenOffice.org Chart : Arabic;language settings
-OpenOffice.org Chart : area charts
-OpenOffice.org Chart : areas
-OpenOffice.org Chart : areas;bitmap patterns
-OpenOffice.org Chart : areas;hatched/dotted
-OpenOffice.org Chart : areas;shadows
-OpenOffice.org Chart : areas;slanting
-OpenOffice.org Chart : areas;styles
-OpenOffice.org Chart : areas;transparency
-OpenOffice.org Chart : arguments in command line
-OpenOffice.org Chart : arranging
-OpenOffice.org Chart : arranging;objects
-OpenOffice.org Chart : arrows
-OpenOffice.org Chart : arrows;defining arrow heads
-OpenOffice.org Chart : arrows;defining arrow lines
-OpenOffice.org Chart : arrows;drawing in text
-OpenOffice.org Chart : ASCII
-OpenOffice.org Chart : ASCII;definition
-OpenOffice.org Chart : Asian languages
-OpenOffice.org Chart : Asian languages;enabling
-OpenOffice.org Chart : Asian Phonetic Guide
-OpenOffice.org Chart : Asian typography
-OpenOffice.org Chart : assigning scripts
-OpenOffice.org Chart : assistive technology in OpenOffice.org
-OpenOffice.org Chart : attaching toolbars
-OpenOffice.org Chart : attachments in e-mails
-OpenOffice.org Chart : audio
-OpenOffice.org Chart : audio;inserting
-OpenOffice.org Chart : audio;UNIX
-OpenOffice.org Chart : auto reloading HTML documents
-OpenOffice.org Chart : AutoAbstract function for sending text to presentations
-OpenOffice.org Chart : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Chart : AutoComplete function in text and list boxes
-OpenOffice.org Chart : AutoCorrect function
-OpenOffice.org Chart : AutoCorrect function;context menu
-OpenOffice.org Chart : AutoCorrect function;options
-OpenOffice.org Chart : AutoCorrect function;pictures and frames
-OpenOffice.org Chart : AutoCorrect function;quotes
-OpenOffice.org Chart : AutoCorrect function;replacement table
-OpenOffice.org Chart : AutoCorrect function;smart tags
-OpenOffice.org Chart : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Chart : AutoCorrect function;URL recognition
-OpenOffice.org Chart : AutoFormat function
-OpenOffice.org Chart : AutoFormat function;switching on and off
-OpenOffice.org Chart : automatic captions (Writer)
-OpenOffice.org Chart : automatic control focus
-OpenOffice.org Chart : automatic hyperlink formatting
-OpenOffice.org Chart : automatic line breaks
-OpenOffice.org Chart : automatic lines/borders in text
-OpenOffice.org Chart : automatic saving
-OpenOffice.org Chart : AutoPilots, see wizards
-OpenOffice.org Chart : AutoShapes feature in Microsoft Office
-OpenOffice.org Chart : averages in charts
-OpenOffice.org Chart : axes
-OpenOffice.org Chart : axes;better scaling
-OpenOffice.org Chart : axes;formatting
-OpenOffice.org Chart : axes;formatting grids
-OpenOffice.org Chart : axes;inserting grids
-OpenOffice.org Chart : axes;interval marks
-OpenOffice.org Chart : axes;showing axes in charts
-OpenOffice.org Chart : axes in charts
-OpenOffice.org Chart : backgrounds
-OpenOffice.org Chart : backgrounds;defining colors/pictures
-OpenOffice.org Chart : backgrounds;frames/sections/indexes
-OpenOffice.org Chart : backgrounds;inserting from Gallery
-OpenOffice.org Chart : backgrounds;printing
-OpenOffice.org Chart : backing window
-OpenOffice.org Chart : backups
-OpenOffice.org Chart : backups;automatic
-OpenOffice.org Chart : backups;documents
-OpenOffice.org Chart : bar charts
-OpenOffice.org Chart : Basic
-OpenOffice.org Chart : Basic;fonts for source display
-OpenOffice.org Chart : Basic;programming
-OpenOffice.org Chart : Basic;recording macros
-OpenOffice.org Chart : Basic;scripting
-OpenOffice.org Chart : basic fonts
-OpenOffice.org Chart : BeanShell scripting
-OpenOffice.org Chart : Bézier curves
-OpenOffice.org Chart : Bézier curves;control points in presentations
-OpenOffice.org Chart : bi-directional writing
-OpenOffice.org Chart : binding space
-OpenOffice.org Chart : bitmaps
-OpenOffice.org Chart : bitmaps;inserting and editing
-OpenOffice.org Chart : bitmaps;off for faster printing
-OpenOffice.org Chart : bitmaps;patterns
-OpenOffice.org Chart : black and white printing
-OpenOffice.org Chart : black printing in Calc
-OpenOffice.org Chart : block selection mode
-OpenOffice.org Chart : bold
-OpenOffice.org Chart : bold;AutoFormat function
-OpenOffice.org Chart : bold;text
-OpenOffice.org Chart : bookmarks
-OpenOffice.org Chart : bookmarks;Help
-OpenOffice.org Chart : borders
-OpenOffice.org Chart : borders;arranging
-OpenOffice.org Chart : borders;cells on screen (Calc)
-OpenOffice.org Chart : borders;for paragraphs
-OpenOffice.org Chart : borders;for tables
-OpenOffice.org Chart : borders;shadows
-OpenOffice.org Chart : borders;table boundaries (Writer)
-OpenOffice.org Chart : borders, see also frames
-OpenOffice.org Chart : bound fields
-OpenOffice.org Chart : bound fields;controls
-OpenOffice.org Chart : boundaries of tables (Writer)
-OpenOffice.org Chart : break display (Writer)
-OpenOffice.org Chart : brochures
-OpenOffice.org Chart : brochures;printing several
-OpenOffice.org Chart : build numbers of OpenOffice.org
-OpenOffice.org Chart : bullet lists
-OpenOffice.org Chart : bullet lists;formatting options
-OpenOffice.org Chart : bullets
-OpenOffice.org Chart : bullets;paragraphs
-OpenOffice.org Chart : bullets;replacing
-OpenOffice.org Chart : bullets;turning off
-OpenOffice.org Chart : business cards
-OpenOffice.org Chart : business cards;creating and synchronizing
-OpenOffice.org Chart : business cards;using templates
-OpenOffice.org Chart : button bars, see toolbars
-OpenOffice.org Chart : buttons
-OpenOffice.org Chart : buttons;adding push buttons
-OpenOffice.org Chart : buttons;big/small
-OpenOffice.org Chart : buttons;editing hyperlink buttons
-OpenOffice.org Chart : buttons;form functions
-OpenOffice.org Chart : buttons;toolbars
-OpenOffice.org Chart : cache for graphics
-OpenOffice.org Chart : calculating
-OpenOffice.org Chart : calculating;iterative references (Calc)
-OpenOffice.org Chart : calculating;regression curves
-OpenOffice.org Chart : callouts
-OpenOffice.org Chart : callouts;drawings
-OpenOffice.org Chart : capital letters
-OpenOffice.org Chart : capital letters;AutoCorrect function
-OpenOffice.org Chart : capital letters;font effects
-OpenOffice.org Chart : captions
-OpenOffice.org Chart : captions;automatic captions (Writer)
-OpenOffice.org Chart : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Chart : captions, see also labels/callouts
-OpenOffice.org Chart : cascading update (Base)
-OpenOffice.org Chart : case sensitivity
-OpenOffice.org Chart : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Chart : case sensitivity;searching
-OpenOffice.org Chart : cells
-OpenOffice.org Chart : cells;aligning
-OpenOffice.org Chart : cells;backgrounds
-OpenOffice.org Chart : cells;coloring (Calc)
-OpenOffice.org Chart : cells;cursor positions after input (Calc)
-OpenOffice.org Chart : cells;formatting without effect (Calc)
-OpenOffice.org Chart : cells;line breaks
-OpenOffice.org Chart : cells;linked to controls
-OpenOffice.org Chart : cells;number formats
-OpenOffice.org Chart : cells;number of
-OpenOffice.org Chart : cells;pasting
-OpenOffice.org Chart : cells;resetting formats
-OpenOffice.org Chart : cells;showing grid lines (Calc)
-OpenOffice.org Chart : centered text
-OpenOffice.org Chart : centimeters
-OpenOffice.org Chart : certificates
-OpenOffice.org Chart : Change Case feature in Microsoft Office
-OpenOffice.org Chart : changes
-OpenOffice.org Chart : changes;accepting or rejecting
-OpenOffice.org Chart : changes;comparing to original
-OpenOffice.org Chart : changes;protecting
-OpenOffice.org Chart : changes;recording
-OpenOffice.org Chart : changes;review function
-OpenOffice.org Chart : changes;showing
-OpenOffice.org Chart : changing
-OpenOffice.org Chart : changing;data binding of XForms
-OpenOffice.org Chart : changing;default templates
-OpenOffice.org Chart : changing;document titles
-OpenOffice.org Chart : changing;file associations in Setup program
-OpenOffice.org Chart : changing;hyperlink text/formats/URLs
-OpenOffice.org Chart : changing;icon sizes
-OpenOffice.org Chart : changing;keyboard
-OpenOffice.org Chart : changing;links
-OpenOffice.org Chart : changing;menus
-OpenOffice.org Chart : changing;object sizes
-OpenOffice.org Chart : changing;toolbars
-OpenOffice.org Chart : changing;work directory
-OpenOffice.org Chart : changing, see also editing and replacing
-OpenOffice.org Chart : character styles
-OpenOffice.org Chart : character styles;language selection
-OpenOffice.org Chart : characters
-OpenOffice.org Chart : characters;alternative fonts
-OpenOffice.org Chart : characters;Asian layout
-OpenOffice.org Chart : characters;bold
-OpenOffice.org Chart : characters;coloring
-OpenOffice.org Chart : characters;contours
-OpenOffice.org Chart : characters;displaying only on screen (Writer)
-OpenOffice.org Chart : characters;enabling CTL and Asian characters
-OpenOffice.org Chart : characters;font effects
-OpenOffice.org Chart : characters;fonts and formats
-OpenOffice.org Chart : characters;hyperlinks
-OpenOffice.org Chart : characters;italics
-OpenOffice.org Chart : characters;language selection
-OpenOffice.org Chart : characters;shadowed
-OpenOffice.org Chart : characters;spacing
-OpenOffice.org Chart : characters;special
-OpenOffice.org Chart : characters;underlining
-OpenOffice.org Chart : charcoal sketches filter
-OpenOffice.org Chart : chart legends
-OpenOffice.org Chart : chart legends;hiding
-OpenOffice.org Chart : chart legends;showing icons with labels
-OpenOffice.org Chart : chart types
-OpenOffice.org Chart : chart types;area
-OpenOffice.org Chart : chart types;column and bar
-OpenOffice.org Chart : chart types;column and line
-OpenOffice.org Chart : chart types;line
-OpenOffice.org Chart : chart types;net
-OpenOffice.org Chart : chart types;pie/donut
-OpenOffice.org Chart : chart types;stock
-OpenOffice.org Chart : chart types;XY (scatter)
-OpenOffice.org Chart : charts
-OpenOffice.org Chart : charts;3D views
-OpenOffice.org Chart : charts;aligning
-OpenOffice.org Chart : charts;arranging within stacks
-OpenOffice.org Chart : charts;bars with textures
-OpenOffice.org Chart : charts;choosing chart types
-OpenOffice.org Chart : charts;colors
-OpenOffice.org Chart : charts;copying with link to source cell range
-OpenOffice.org Chart : charts;data labels
-OpenOffice.org Chart : charts;displaying (Calc)
-OpenOffice.org Chart : charts;editing axes
-OpenOffice.org Chart : charts;editing data
-OpenOffice.org Chart : charts;editing legends
-OpenOffice.org Chart : charts;editing titles
-OpenOffice.org Chart : charts;formatting areas
-OpenOffice.org Chart : charts;formatting floors
-OpenOffice.org Chart : charts;formatting walls
-OpenOffice.org Chart : charts;inserting
-OpenOffice.org Chart : charts;overview
-OpenOffice.org Chart : charts;properties
-OpenOffice.org Chart : charts;reorganizing
-OpenOffice.org Chart : charts;scaling axes
-OpenOffice.org Chart : charts;scaling text
-OpenOffice.org Chart : charts;shortcuts
-OpenOffice.org Chart : charts;showing axes
-OpenOffice.org Chart : charts;updating automatically (Writer)
-OpenOffice.org Chart : check box creation
-OpenOffice.org Chart : Chinese writing systems
-OpenOffice.org Chart : choosing printers
-OpenOffice.org Chart : circle drawings
-OpenOffice.org Chart : Client Side ImageMap
-OpenOffice.org Chart : clipboard
-OpenOffice.org Chart : clipboard;cutting
-OpenOffice.org Chart : clipboard;pasting
-OpenOffice.org Chart : clipboard;pasting formatted/unformatted text
-OpenOffice.org Chart : clipboard;selection clipboard
-OpenOffice.org Chart : clipboard;Unix
-OpenOffice.org Chart : closing
-OpenOffice.org Chart : closing;documents
-OpenOffice.org Chart : closing;toolbars
-OpenOffice.org Chart : color bar
-OpenOffice.org Chart : colors
-OpenOffice.org Chart : colors;adding
-OpenOffice.org Chart : colors;appearance
-OpenOffice.org Chart : colors;backgrounds
-OpenOffice.org Chart : colors;charts
-OpenOffice.org Chart : colors;fill format
-OpenOffice.org Chart : colors;fonts
-OpenOffice.org Chart : colors;grid lines and cells (Calc)
-OpenOffice.org Chart : colors;models
-OpenOffice.org Chart : colors;not printing
-OpenOffice.org Chart : colors;printing in grayscale
-OpenOffice.org Chart : colors;restriction (Calc)
-OpenOffice.org Chart : colors;selection
-OpenOffice.org Chart : column and line charts
-OpenOffice.org Chart : column charts
-OpenOffice.org Chart : column headers
-OpenOffice.org Chart : column headers;displaying (Calc)
-OpenOffice.org Chart : column headers;highlighting (Calc)
-OpenOffice.org Chart : columns
-OpenOffice.org Chart : columns;setting with the mouse
-OpenOffice.org Chart : combination charts
-OpenOffice.org Chart : combo box creation
-OpenOffice.org Chart : command button creation
-OpenOffice.org Chart : command buttons, see push buttons
-OpenOffice.org Chart : command line parameters
-OpenOffice.org Chart : commands
-OpenOffice.org Chart : commands;not visible
-OpenOffice.org Chart : commands;SQL
-OpenOffice.org Chart : comments
-OpenOffice.org Chart : comments;on changes
-OpenOffice.org Chart : comments feature in Microsoft Office
-OpenOffice.org Chart : common terms
-OpenOffice.org Chart : common terms;Chinese dictionary
-OpenOffice.org Chart : common terms;glossaries
-OpenOffice.org Chart : common terms;Internet glossary
-OpenOffice.org Chart : Compare and Merge feature in Microsoft Office
-OpenOffice.org Chart : comparisons
-OpenOffice.org Chart : comparisons;document versions
-OpenOffice.org Chart : comparisons;operators in default filter dialog
-OpenOffice.org Chart : compatibility settings for MS Word import
-OpenOffice.org Chart : complete screen view
-OpenOffice.org Chart : complex text layout
-OpenOffice.org Chart : complex text layout;definition
-OpenOffice.org Chart : complex text layout;enabling
-OpenOffice.org Chart : compose key to insert special characters
-OpenOffice.org Chart : concatenation, see ampersand symbol
-OpenOffice.org Chart : conditional separators
-OpenOffice.org Chart : conditions
-OpenOffice.org Chart : conditions;in number formats
-OpenOffice.org Chart : conditions;items in Data Navigator
-OpenOffice.org Chart : Configuration Manager
-OpenOffice.org Chart : configuring
-OpenOffice.org Chart : configuring;fax icon
-OpenOffice.org Chart : configuring;OpenOffice.org
-OpenOffice.org Chart : configuring;toolbars
-OpenOffice.org Chart : connections to data sources (Base)
-OpenOffice.org Chart : contents protection
-OpenOffice.org Chart : context menus
-OpenOffice.org Chart : contours of text
-OpenOffice.org Chart : control point display in presentations
-OpenOffice.org Chart : controls
-OpenOffice.org Chart : controls;activating in forms
-OpenOffice.org Chart : controls;adding to documents
-OpenOffice.org Chart : controls;arranging in forms
-OpenOffice.org Chart : controls;arranging within stacks
-OpenOffice.org Chart : controls;assigning data sources
-OpenOffice.org Chart : controls;bound fields/list contents/linked cells
-OpenOffice.org Chart : controls;events
-OpenOffice.org Chart : controls;focus
-OpenOffice.org Chart : controls;formatted fields
-OpenOffice.org Chart : controls;grouping
-OpenOffice.org Chart : controls;hidden
-OpenOffice.org Chart : controls;inserting
-OpenOffice.org Chart : controls;multi-line titles
-OpenOffice.org Chart : controls;positions and sizes
-OpenOffice.org Chart : controls;printing
-OpenOffice.org Chart : controls;properties of form controls
-OpenOffice.org Chart : controls;properties of table controls
-OpenOffice.org Chart : controls;reference by SQL
-OpenOffice.org Chart : controls;rich text control
-OpenOffice.org Chart : controls;select mode
-OpenOffice.org Chart : controls;showing (Writer)
-OpenOffice.org Chart : converters
-OpenOffice.org Chart : converters;Euro converter
-OpenOffice.org Chart : converters;PostScript, UNIX
-OpenOffice.org Chart : converters;XML
-OpenOffice.org Chart : converting
-OpenOffice.org Chart : converting;Hangul/Hanja
-OpenOffice.org Chart : converting;metrics
-OpenOffice.org Chart : converting;Microsoft documents
-OpenOffice.org Chart : converting;OpenOffice.org documents
-OpenOffice.org Chart : converting;Pocket PC formats
-OpenOffice.org Chart : copies
-OpenOffice.org Chart : copies;printing
-OpenOffice.org Chart : copying
-OpenOffice.org Chart : copying;by drag and drop
-OpenOffice.org Chart : copying;data from text documents
-OpenOffice.org Chart : copying;datasource records in spreadsheets
-OpenOffice.org Chart : copying;draw objects
-OpenOffice.org Chart : copying;draw objects between documents
-OpenOffice.org Chart : copying;formatting
-OpenOffice.org Chart : copying;from data source view
-OpenOffice.org Chart : copying;from Gallery
-OpenOffice.org Chart : copying;in Unix
-OpenOffice.org Chart : copying;pictures, between documents
-OpenOffice.org Chart : copying;sheet areas, to text documents
-OpenOffice.org Chart : copying;to Gallery
-OpenOffice.org Chart : copyright for OpenOffice.org
-OpenOffice.org Chart : corner roundings
-OpenOffice.org Chart : crash reports
-OpenOffice.org Chart : criteria of query design (Base)
-OpenOffice.org Chart : cropping pictures
-OpenOffice.org Chart : CTL
-OpenOffice.org Chart : CTL;complex text layout languages
-OpenOffice.org Chart : CTL;definition
-OpenOffice.org Chart : CTL;options
-OpenOffice.org Chart : currencies
-OpenOffice.org Chart : currencies;converters
-OpenOffice.org Chart : currencies;formats and format codes
-OpenOffice.org Chart : currency field creation
-OpenOffice.org Chart : currency formats
-OpenOffice.org Chart : cursor
-OpenOffice.org Chart : cursor;allowing in protected areas (Writer)
-OpenOffice.org Chart : cursor;in read-only text
-OpenOffice.org Chart : cursor;quickly moving to an object
-OpenOffice.org Chart : curves
-OpenOffice.org Chart : curves;editing points
-OpenOffice.org Chart : curves;properties in line charts/XY charts
-OpenOffice.org Chart : custom dictionaries
-OpenOffice.org Chart : custom dictionaries;editing
-OpenOffice.org Chart : custom hyphens (Writer)
-OpenOffice.org Chart : custom quotes
-OpenOffice.org Chart : custom templates
-OpenOffice.org Chart : customizing
-OpenOffice.org Chart : customizing;events
-OpenOffice.org Chart : customizing;keyboard
-OpenOffice.org Chart : customizing;menus
-OpenOffice.org Chart : customizing;OpenOffice.org
-OpenOffice.org Chart : customizing;round corners
-OpenOffice.org Chart : customizing;toolbars
-OpenOffice.org Chart : cutting
-OpenOffice.org Chart : dashes
-OpenOffice.org Chart : data
-OpenOffice.org Chart : data;filtering in forms
-OpenOffice.org Chart : data;forms and subforms
-OpenOffice.org Chart : data;read-only
-OpenOffice.org Chart : data;sorting in forms
-OpenOffice.org Chart : data;user data
-OpenOffice.org Chart : data binding change in XForms
-OpenOffice.org Chart : data labels in charts
-OpenOffice.org Chart : Data Navigator display options
-OpenOffice.org Chart : data ranges in charts
-OpenOffice.org Chart : data series
-OpenOffice.org Chart : data source browser
-OpenOffice.org Chart : data source explorer
-OpenOffice.org Chart : data source view
-OpenOffice.org Chart : data source view;drag and drop
-OpenOffice.org Chart : data source view;overview
-OpenOffice.org Chart : data source view;showing
-OpenOffice.org Chart : data sources
-OpenOffice.org Chart : data sources;as tables
-OpenOffice.org Chart : data sources;connection settings (Base)
-OpenOffice.org Chart : data sources;copying records to spreadsheets
-OpenOffice.org Chart : data sources;displaying current
-OpenOffice.org Chart : data sources;LDAP server (Base)
-OpenOffice.org Chart : data sources;OpenOffice.org Base
-OpenOffice.org Chart : data sources;registering address books
-OpenOffice.org Chart : data sources;reports
-OpenOffice.org Chart : data sources;setting for stock charts
-OpenOffice.org Chart : data sources;viewing
-OpenOffice.org Chart : data structure of XForms
-OpenOffice.org Chart : data values in charts
-OpenOffice.org Chart : database contents
-OpenOffice.org Chart : database contents;inserting as tables
-OpenOffice.org Chart : database contents;inserting as text
-OpenOffice.org Chart : database reports
-OpenOffice.org Chart : Database Wizard (Base)
-OpenOffice.org Chart : databases
-OpenOffice.org Chart : databases;administration through SQL (Base)
-OpenOffice.org Chart : databases;ADO (Base)
-OpenOffice.org Chart : databases;connecting (Base)
-OpenOffice.org Chart : databases;creating
-OpenOffice.org Chart : databases;creating labels
-OpenOffice.org Chart : databases;creating queries
-OpenOffice.org Chart : databases;creating reports
-OpenOffice.org Chart : databases;creating tables
-OpenOffice.org Chart : databases;dBASE (Base)
-OpenOffice.org Chart : databases;deleting (Base)
-OpenOffice.org Chart : databases;drag and drop (Base)
-OpenOffice.org Chart : databases;editing tables
-OpenOffice.org Chart : databases;form filters
-OpenOffice.org Chart : databases;formats (Base)
-OpenOffice.org Chart : databases;importing/exporting
-OpenOffice.org Chart : databases;JDBC (Base)
-OpenOffice.org Chart : databases;main page (Base)
-OpenOffice.org Chart : databases;MySQL (Base)
-OpenOffice.org Chart : databases;ODBC (Base)
-OpenOffice.org Chart : databases;overview
-OpenOffice.org Chart : databases;registering (Base)
-OpenOffice.org Chart : databases;searching records
-OpenOffice.org Chart : databases;shortcut keys
-OpenOffice.org Chart : databases;sorting
-OpenOffice.org Chart : databases;standard filters
-OpenOffice.org Chart : databases;text formats
-OpenOffice.org Chart : databases;viewing
-OpenOffice.org Chart : date fields
-OpenOffice.org Chart : date fields;creating
-OpenOffice.org Chart : date fields;properties
-OpenOffice.org Chart : date formats
-OpenOffice.org Chart : dates
-OpenOffice.org Chart : dates;default (Calc)
-OpenOffice.org Chart : dates;printing in presentations
-OpenOffice.org Chart : dates;start 1900/01/01 (Calc)
-OpenOffice.org Chart : dates;start 1904/01/01 (Calc)
-OpenOffice.org Chart : dBASE
-OpenOffice.org Chart : dBASE;database settings (Base)
-OpenOffice.org Chart : DDE
-OpenOffice.org Chart : DDE;definition
-OpenOffice.org Chart : deactivating
-OpenOffice.org Chart : deactivating;plug-ins
-OpenOffice.org Chart : decimal places displayed (Calc)
-OpenOffice.org Chart : decimal separator key
-OpenOffice.org Chart : decimal tab stops
-OpenOffice.org Chart : default directories
-OpenOffice.org Chart : default file formats
-OpenOffice.org Chart : default filters
-OpenOffice.org Chart : default filters;comparison operators
-OpenOffice.org Chart : default filters;databases
-OpenOffice.org Chart : default printer
-OpenOffice.org Chart : default printer;setting up
-OpenOffice.org Chart : default printer;UNIX
-OpenOffice.org Chart : default templates
-OpenOffice.org Chart : default templates;changing
-OpenOffice.org Chart : default templates;organizing
-OpenOffice.org Chart : defaults
-OpenOffice.org Chart : defaults;documents
-OpenOffice.org Chart : defaults;file formats
-OpenOffice.org Chart : defaults;fonts
-OpenOffice.org Chart : defaults;grids (Writer/Calc)
-OpenOffice.org Chart : defaults;languages
-OpenOffice.org Chart : defaults;number formats
-OpenOffice.org Chart : defaults;of saving
-OpenOffice.org Chart : defaults;program configuration
-OpenOffice.org Chart : defaults;tab stops in text
-OpenOffice.org Chart : defaults;views
-OpenOffice.org Chart : defining
-OpenOffice.org Chart : defining;arrowheads and other line ends
-OpenOffice.org Chart : defining;colors
-OpenOffice.org Chart : defining;line styles
-OpenOffice.org Chart : defining;paragraph borders
-OpenOffice.org Chart : defining;queries (Base)
-OpenOffice.org Chart : defining;table borders
-OpenOffice.org Chart : deleting
-OpenOffice.org Chart : deleting;all direct formatting
-OpenOffice.org Chart : deleting;databases (Base)
-OpenOffice.org Chart : deleting;hyperlinks
-OpenOffice.org Chart : deleting;lines in text
-OpenOffice.org Chart : deleting;models/instances
-OpenOffice.org Chart : deleting;namespaces in XForms
-OpenOffice.org Chart : deleting;tab stops
-OpenOffice.org Chart : deleting;templates
-OpenOffice.org Chart : deleting;XML filters
-OpenOffice.org Chart : depth stagger
-OpenOffice.org Chart : descriptions for objects
-OpenOffice.org Chart : design mode after saving
-OpenOffice.org Chart : design view
-OpenOffice.org Chart : design view;creating forms
-OpenOffice.org Chart : design view;queries/views (Base)
-OpenOffice.org Chart : designing
-OpenOffice.org Chart : designing;database tables
-OpenOffice.org Chart : designing;fonts
-OpenOffice.org Chart : designing;queries (Base)
-OpenOffice.org Chart : detaching toolbars
-OpenOffice.org Chart : dictionaries
-OpenOffice.org Chart : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Chart : dictionaries;creating
-OpenOffice.org Chart : dictionaries;editing user-defined
-OpenOffice.org Chart : dictionaries;spellcheck
-OpenOffice.org Chart : dictionaries, see also languages
-OpenOffice.org Chart : digital signatures
-OpenOffice.org Chart : direct formatting
-OpenOffice.org Chart : direct formatting;undoing all
-OpenOffice.org Chart : directories
-OpenOffice.org Chart : directories;creating new
-OpenOffice.org Chart : directories;directory structure
-OpenOffice.org Chart : disabled persons
-OpenOffice.org Chart : displaying
-OpenOffice.org Chart : displaying;non-printing characters (Writer)
-OpenOffice.org Chart : displaying;notes (Calc)
-OpenOffice.org Chart : displaying;notes in text documents
-OpenOffice.org Chart : displaying;pictures and objects (Writer)
-OpenOffice.org Chart : displaying;tables (Writer)
-OpenOffice.org Chart : displaying;zero values (Calc)
-OpenOffice.org Chart : distances
-OpenOffice.org Chart : distinct values in SQL queries
-OpenOffice.org Chart : distorting in drawings
-OpenOffice.org Chart : distributing XML filters
-OpenOffice.org Chart : dithering
-OpenOffice.org Chart : docking
-OpenOffice.org Chart : docking;definition
-OpenOffice.org Chart : docking;toolbars
-OpenOffice.org Chart : docking;windows
-OpenOffice.org Chart : Document Converter Wizard
-OpenOffice.org Chart : Document Map feature in Microsoft Office
-OpenOffice.org Chart : Document Map, see Navigator
-OpenOffice.org Chart : document types in OpenOffice.org
-OpenOffice.org Chart : documents
-OpenOffice.org Chart : documents;changing titles
-OpenOffice.org Chart : documents;closing
-OpenOffice.org Chart : documents;comparing
-OpenOffice.org Chart : documents;contents as lists
-OpenOffice.org Chart : documents;editing time
-OpenOffice.org Chart : documents;exporting
-OpenOffice.org Chart : documents;importing
-OpenOffice.org Chart : documents;languages
-OpenOffice.org Chart : documents;measurement units in
-OpenOffice.org Chart : documents;merging
-OpenOffice.org Chart : documents;number of pages/tables/sheets
-OpenOffice.org Chart : documents;opening
-OpenOffice.org Chart : documents;opening in design mode
-OpenOffice.org Chart : documents;opening with templates
-OpenOffice.org Chart : documents;organizing
-OpenOffice.org Chart : documents;printing
-OpenOffice.org Chart : documents;read-only
-OpenOffice.org Chart : documents;reloading
-OpenOffice.org Chart : documents;saving
-OpenOffice.org Chart : documents;saving automatically
-OpenOffice.org Chart : documents;saving in other formats
-OpenOffice.org Chart : documents;sending as e-mail
-OpenOffice.org Chart : documents;styles changed
-OpenOffice.org Chart : documents;version management
-OpenOffice.org Chart : documents;version numbers
-OpenOffice.org Chart : donut charts
-OpenOffice.org Chart : dotted areas
-OpenOffice.org Chart : double-line spacing in paragraphs
-OpenOffice.org Chart : double-line writing in Asian layout
-OpenOffice.org Chart : drag and drop
-OpenOffice.org Chart : drag and drop;copying and pasting text
-OpenOffice.org Chart : drag and drop;data source view
-OpenOffice.org Chart : drag and drop;from Gallery to draw objects
-OpenOffice.org Chart : drag and drop;overview
-OpenOffice.org Chart : drag and drop;pictures
-OpenOffice.org Chart : drag and drop;to Gallery
-OpenOffice.org Chart : draw objects
-OpenOffice.org Chart : draw objects;adding/editing/copying
-OpenOffice.org Chart : draw objects;anchoring
-OpenOffice.org Chart : draw objects;arranging within stacks
-OpenOffice.org Chart : draw objects;copying
-OpenOffice.org Chart : draw objects;copying between documents
-OpenOffice.org Chart : draw objects;displaying (Calc)
-OpenOffice.org Chart : draw objects;dropping Gallery pictures
-OpenOffice.org Chart : draw objects;flipping
-OpenOffice.org Chart : draw objects;legends
-OpenOffice.org Chart : draw objects;positioning and resizing
-OpenOffice.org Chart : draw objects;protecting
-OpenOffice.org Chart : draw objects;slanting
-OpenOffice.org Chart : draw objects;text in
-OpenOffice.org Chart : Drawing bar
-OpenOffice.org Chart : drawing lines in text
-OpenOffice.org Chart : drawings
-OpenOffice.org Chart : drawings;creating/opening
-OpenOffice.org Chart : drawings;languages
-OpenOffice.org Chart : drawings;printing
-OpenOffice.org Chart : drawings;printing defaults
-OpenOffice.org Chart : drawings;printing in text documents
-OpenOffice.org Chart : drawings;saving
-OpenOffice.org Chart : drawings;saving automatically
-OpenOffice.org Chart : drawings;saving in other formats
-OpenOffice.org Chart : drawings;sending as e-mail
-OpenOffice.org Chart : drawings;showing (Writer)
-OpenOffice.org Chart : drop-down lists in form functions
-OpenOffice.org Chart : e-mail attachments
-OpenOffice.org Chart : Edit File icon
-OpenOffice.org Chart : edit mode
-OpenOffice.org Chart : edit mode;after opening
-OpenOffice.org Chart : edit mode;through Enter key (Calc)
-OpenOffice.org Chart : Edit Points bar
-OpenOffice.org Chart : editing
-OpenOffice.org Chart : editing;chart axes
-OpenOffice.org Chart : editing;chart data
-OpenOffice.org Chart : editing;chart legends
-OpenOffice.org Chart : editing;chart titles
-OpenOffice.org Chart : editing;data binding of XForms
-OpenOffice.org Chart : editing;database tables and queries
-OpenOffice.org Chart : editing;draw objects
-OpenOffice.org Chart : editing;Fontwork objects
-OpenOffice.org Chart : editing;hyperlinks
-OpenOffice.org Chart : editing;items in Data Navigator
-OpenOffice.org Chart : editing;menus
-OpenOffice.org Chart : editing;namespaces in XForms
-OpenOffice.org Chart : editing;notes
-OpenOffice.org Chart : editing;objects
-OpenOffice.org Chart : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Chart : editing;pictures
-OpenOffice.org Chart : editing;reports
-OpenOffice.org Chart : editing;shortcut keys
-OpenOffice.org Chart : editing;tab stops
-OpenOffice.org Chart : editing;templates
-OpenOffice.org Chart : editing;titles
-OpenOffice.org Chart : editing;toolbars
-OpenOffice.org Chart : editing;undoing
-OpenOffice.org Chart : editing;XForms
-OpenOffice.org Chart : editing time of documents
-OpenOffice.org Chart : editors
-OpenOffice.org Chart : editors;formula editor
-OpenOffice.org Chart : editors;ImageMap editor
-OpenOffice.org Chart : effects
-OpenOffice.org Chart : effects;font positions
-OpenOffice.org Chart : effects;fonts
-OpenOffice.org Chart : effects;Fontwork icons
-OpenOffice.org Chart : empty documents
-OpenOffice.org Chart : empty paragraph removal
-OpenOffice.org Chart : encryption of contents
-OpenOffice.org Chart : entering groups
-OpenOffice.org Chart : entering text from right to left
-OpenOffice.org Chart : equal sign, see also operators
-OpenOffice.org Chart : equations in formula editor
-OpenOffice.org Chart : error bars in charts
-OpenOffice.org Chart : error indicators in charts
-OpenOffice.org Chart : Error Report Tool
-OpenOffice.org Chart : Euro
-OpenOffice.org Chart : Euro;currency formats
-OpenOffice.org Chart : Euro;Euro Converter Wizard
-OpenOffice.org Chart : even/odd pages
-OpenOffice.org Chart : even/odd pages;printing
-OpenOffice.org Chart : events
-OpenOffice.org Chart : events;controls
-OpenOffice.org Chart : events;customizing
-OpenOffice.org Chart : events;in forms
-OpenOffice.org Chart : Excel
-OpenOffice.org Chart : Excel;saving as
-OpenOffice.org Chart : Excel;search criteria
-OpenOffice.org Chart : exceptions
-OpenOffice.org Chart : exceptions;user-defined dictionaries
-OpenOffice.org Chart : exchanging, see also replacing
-OpenOffice.org Chart : executing
-OpenOffice.org Chart : executing;SQL commands
-OpenOffice.org Chart : exiting
-OpenOffice.org Chart : exiting;groups
-OpenOffice.org Chart : exiting;OpenOffice.org
-OpenOffice.org Chart : expanding formatting (Calc)
-OpenOffice.org Chart : explorer of data sources
-OpenOffice.org Chart : export filters
-OpenOffice.org Chart : exporting
-OpenOffice.org Chart : exporting;bitmaps
-OpenOffice.org Chart : exporting;databases
-OpenOffice.org Chart : exporting;HTML and text documents
-OpenOffice.org Chart : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Chart : exporting;spreadsheets to text format
-OpenOffice.org Chart : exporting;templates
-OpenOffice.org Chart : exporting;to foreign formats
-OpenOffice.org Chart : exporting;to HTML
-OpenOffice.org Chart : exporting;to Microsoft Office formats
-OpenOffice.org Chart : exporting;to PDF
-OpenOffice.org Chart : exporting;to PostScript format
-OpenOffice.org Chart : exporting;to XML
-OpenOffice.org Chart : exporting;XML files
-OpenOffice.org Chart : extended tips in Help
-OpenOffice.org Chart : extension mode in text
-OpenOffice.org Chart : extensions
-OpenOffice.org Chart : extensions;Extension Manager
-OpenOffice.org Chart : extensions;file formats
-OpenOffice.org Chart : external keys (Base)
-OpenOffice.org Chart : faster printing
-OpenOffice.org Chart : faxes
-OpenOffice.org Chart : faxes;configuring OpenOffice.org
-OpenOffice.org Chart : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Chart : faxes;selecting a fax machine
-OpenOffice.org Chart : faxes;sending
-OpenOffice.org Chart : faxes;wizards
-OpenOffice.org Chart : fields
-OpenOffice.org Chart : fields;database tables
-OpenOffice.org Chart : fields;displaying field codes (Writer)
-OpenOffice.org Chart : fields;formatted fields
-OpenOffice.org Chart : fields;updating automatically (Writer)
-OpenOffice.org Chart : file associations for Microsoft Office
-OpenOffice.org Chart : file filters
-OpenOffice.org Chart : file filters;mobile devices
-OpenOffice.org Chart : file filters;XML
-OpenOffice.org Chart : file formats
-OpenOffice.org Chart : file formats;changing defaults
-OpenOffice.org Chart : file formats;OpenDocument/XML
-OpenOffice.org Chart : file formats;saving always in other formats
-OpenOffice.org Chart : file selection button
-OpenOffice.org Chart : file sharing options for current document
-OpenOffice.org Chart : files
-OpenOffice.org Chart : files;filters and formats
-OpenOffice.org Chart : files;importing
-OpenOffice.org Chart : files;opening
-OpenOffice.org Chart : files;opening with placeholders
-OpenOffice.org Chart : files;properties
-OpenOffice.org Chart : files;saving
-OpenOffice.org Chart : files;saving automatically
-OpenOffice.org Chart : files;saving in other formats
-OpenOffice.org Chart : files;sending as e-mail
-OpenOffice.org Chart : files;version numbers
-OpenOffice.org Chart : files and folders in OpenOffice.org
-OpenOffice.org Chart : fill characters with tabulators
-OpenOffice.org Chart : fill colors for areas
-OpenOffice.org Chart : fill patterns for areas
-OpenOffice.org Chart : filter conditions
-OpenOffice.org Chart : filter conditions;connecting
-OpenOffice.org Chart : filter conditions;in queries (Base)
-OpenOffice.org Chart : filtering
-OpenOffice.org Chart : filtering;data in databases
-OpenOffice.org Chart : filtering;data in forms
-OpenOffice.org Chart : filters
-OpenOffice.org Chart : filters;comparison operators
-OpenOffice.org Chart : filters;for import and export
-OpenOffice.org Chart : filters;Navigator
-OpenOffice.org Chart : filters;pictures
-OpenOffice.org Chart : filters;XML filter settings
-OpenOffice.org Chart : Find tab in Help
-OpenOffice.org Chart : finding
-OpenOffice.org Chart : finding;in all sheets
-OpenOffice.org Chart : finding;records in form documents
-OpenOffice.org Chart : finding;selections
-OpenOffice.org Chart : finding;similarity search
-OpenOffice.org Chart : fitting to pages
-OpenOffice.org Chart : fitting to pages;print settings in Math
-OpenOffice.org Chart : fitting to pages;print settings in presentations
-OpenOffice.org Chart : fixed text
-OpenOffice.org Chart : fixed text;form functions
-OpenOffice.org Chart : fixing toolbars
-OpenOffice.org Chart : flipping draw objects
-OpenOffice.org Chart : floating frames in HTML documents
-OpenOffice.org Chart : floating toolbars
-OpenOffice.org Chart : focus of controls
-OpenOffice.org Chart : folder creation
-OpenOffice.org Chart : font lists
-OpenOffice.org Chart : font name box
-OpenOffice.org Chart : font sizes
-OpenOffice.org Chart : font sizes;bullets
-OpenOffice.org Chart : font sizes;relative changes
-OpenOffice.org Chart : font sizes;scaling on screen
-OpenOffice.org Chart : font sizes;text
-OpenOffice.org Chart : fonts
-OpenOffice.org Chart : fonts;adding under UNIX
-OpenOffice.org Chart : fonts;changing in templates
-OpenOffice.org Chart : fonts;colors
-OpenOffice.org Chart : fonts;default settings
-OpenOffice.org Chart : fonts;effects
-OpenOffice.org Chart : fonts;for HTML and Basic
-OpenOffice.org Chart : fonts;formats
-OpenOffice.org Chart : fonts;outlines
-OpenOffice.org Chart : fonts;positions in text
-OpenOffice.org Chart : fonts;shadows
-OpenOffice.org Chart : fonts;specifying several
-OpenOffice.org Chart : fonts;strikethrough
-OpenOffice.org Chart : fonts;styles
-OpenOffice.org Chart : fonts;text objects
-OpenOffice.org Chart : Fontwork icons
-OpenOffice.org Chart : footers
-OpenOffice.org Chart : footers;backgrounds
-OpenOffice.org Chart : form controls
-OpenOffice.org Chart : form controls;assigning macros
-OpenOffice.org Chart : form controls;protecting
-OpenOffice.org Chart : form controls;toolbars
-OpenOffice.org Chart : form fields
-OpenOffice.org Chart : form filters
-OpenOffice.org Chart : Form Navigator
-OpenOffice.org Chart : format codes
-OpenOffice.org Chart : format codes;numbers
-OpenOffice.org Chart : format codes;user-defined number formats
-OpenOffice.org Chart : format filling printing in OpenOffice.org Math
-OpenOffice.org Chart : Format Paintbrush
-OpenOffice.org Chart : formats
-OpenOffice.org Chart : formats;Asian layout
-OpenOffice.org Chart : formats;Asian typography
-OpenOffice.org Chart : formats;fonts
-OpenOffice.org Chart : formats;maximizing page formats
-OpenOffice.org Chart : formats;number and currency formats
-OpenOffice.org Chart : formats;of currencies/date/time
-OpenOffice.org Chart : formats;on opening and saving
-OpenOffice.org Chart : formats;pasting in special formats
-OpenOffice.org Chart : formats;positions
-OpenOffice.org Chart : formats;tabulators
-OpenOffice.org Chart : formats;undoing when writing
-OpenOffice.org Chart : formatted fields
-OpenOffice.org Chart : formatted fields;form functions
-OpenOffice.org Chart : formatted fields;properties
-OpenOffice.org Chart : formatting
-OpenOffice.org Chart : formatting;axes in charts
-OpenOffice.org Chart : formatting;chart areas
-OpenOffice.org Chart : formatting;chart floors
-OpenOffice.org Chart : formatting;chart legends
-OpenOffice.org Chart : formatting;chart titles
-OpenOffice.org Chart : formatting;chart walls
-OpenOffice.org Chart : formatting;copying
-OpenOffice.org Chart : formatting;definition
-OpenOffice.org Chart : formatting;expanding (Calc)
-OpenOffice.org Chart : formatting;font effects
-OpenOffice.org Chart : formatting;hyperlinks
-OpenOffice.org Chart : formatting;pages
-OpenOffice.org Chart : formatting;printer metrics (Writer)
-OpenOffice.org Chart : formatting;undoing
-OpenOffice.org Chart : forms
-OpenOffice.org Chart : forms;browsing
-OpenOffice.org Chart : forms;Combo Box/List Box Wizard
-OpenOffice.org Chart : forms;creating
-OpenOffice.org Chart : forms;data
-OpenOffice.org Chart : forms;designing (Base)
-OpenOffice.org Chart : forms;events
-OpenOffice.org Chart : forms;filtering data
-OpenOffice.org Chart : forms;finding records
-OpenOffice.org Chart : forms;focus after opening
-OpenOffice.org Chart : forms;general information (Base)
-OpenOffice.org Chart : forms;grouping controls
-OpenOffice.org Chart : forms;HTML filters
-OpenOffice.org Chart : forms;Navigator
-OpenOffice.org Chart : forms;opening in design mode
-OpenOffice.org Chart : forms;properties
-OpenOffice.org Chart : forms;sorting data
-OpenOffice.org Chart : forms;subforms
-OpenOffice.org Chart : forms;wizards
-OpenOffice.org Chart : forms;XForms
-OpenOffice.org Chart : Formula Auditing feature in Microsoft Office
-OpenOffice.org Chart : formula texts
-OpenOffice.org Chart : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Chart : formulas
-OpenOffice.org Chart : formulas;new
-OpenOffice.org Chart : formulas;starting formula editor
-OpenOffice.org Chart : formulas in reports
-OpenOffice.org Chart : formulas in reports;editing
-OpenOffice.org Chart : forums and support
-OpenOffice.org Chart : frames
-OpenOffice.org Chart : frames;around paragraphs
-OpenOffice.org Chart : frames;around tables
-OpenOffice.org Chart : frames;AutoCorrect function
-OpenOffice.org Chart : frames;backgrounds
-OpenOffice.org Chart : frames;captions (Writer)
-OpenOffice.org Chart : frames;printing in OpenOffice.org Math
-OpenOffice.org Chart : frames;protecting
-OpenOffice.org Chart : frames;selection frames
-OpenOffice.org Chart : frames;text fitting to frames
-OpenOffice.org Chart : freeform lines
-OpenOffice.org Chart : freeform lines;draw functions
-OpenOffice.org Chart : FTP
-OpenOffice.org Chart : FTP;opening documents
-OpenOffice.org Chart : FTP;saving documents
-OpenOffice.org Chart : full joins (Base)
-OpenOffice.org Chart : full screen view
-OpenOffice.org Chart : full-text search in Help
-OpenOffice.org Chart : functions in reports
-OpenOffice.org Chart : functions in reports;editing
-OpenOffice.org Chart : Gallery
-OpenOffice.org Chart : Gallery;adding pictures
-OpenOffice.org Chart : Gallery;dragging pictures to draw objects
-OpenOffice.org Chart : Gallery;hiding/showing
-OpenOffice.org Chart : Gallery;inserting pictures from
-OpenOffice.org Chart : German spellcheck
-OpenOffice.org Chart : get method for form transmissions
-OpenOffice.org Chart : getting support
-OpenOffice.org Chart : GIF format
-OpenOffice.org Chart : glossaries
-OpenOffice.org Chart : glossaries;common terms
-OpenOffice.org Chart : glossaries;Internet terms
-OpenOffice.org Chart : gradients off for faster printing
-OpenOffice.org Chart : graphical text art
-OpenOffice.org Chart : graphics
-OpenOffice.org Chart : graphics;cache
-OpenOffice.org Chart : graphics;protecting
-OpenOffice.org Chart : graphics, see also pictures
-OpenOffice.org Chart : grayscale printing
-OpenOffice.org Chart : grid controls
-OpenOffice.org Chart : grid controls;form functions
-OpenOffice.org Chart : grids
-OpenOffice.org Chart : grids;defaults (Writer/Calc)
-OpenOffice.org Chart : grids;display options (Impress/Draw)
-OpenOffice.org Chart : grids;displaying lines (Calc)
-OpenOffice.org Chart : grids;formatting axes
-OpenOffice.org Chart : grids;inserting in charts
-OpenOffice.org Chart : group box creation
-OpenOffice.org Chart : groups
-OpenOffice.org Chart : groups;entering/exiting/ungrouping
-OpenOffice.org Chart : groups;naming
-OpenOffice.org Chart : groups;of controls
-OpenOffice.org Chart : guides
-OpenOffice.org Chart : guides;display options (Impress/Draw)
-OpenOffice.org Chart : guides;displaying when moving objects (Impress)
-OpenOffice.org Chart : guides;showing (Calc)
-OpenOffice.org Chart : guides;showing when moving frames (Writer)
-OpenOffice.org Chart : gutter
-OpenOffice.org Chart : handles
-OpenOffice.org Chart : handles;displaying (Writer)
-OpenOffice.org Chart : handles;scaling
-OpenOffice.org Chart : handles;showing simple/large handles (Calc)
-OpenOffice.org Chart : Hangul/Hanja
-OpenOffice.org Chart : hatching
-OpenOffice.org Chart : headers
-OpenOffice.org Chart : headers;backgrounds
-OpenOffice.org Chart : headings
-OpenOffice.org Chart : headings;entering as text box
-OpenOffice.org Chart : Hebrew
-OpenOffice.org Chart : Hebrew;entering text
-OpenOffice.org Chart : Hebrew;language settings
-OpenOffice.org Chart : Help
-OpenOffice.org Chart : Help;bookmarks
-OpenOffice.org Chart : Help;extended tips on/off
-OpenOffice.org Chart : Help;full-text search
-OpenOffice.org Chart : Help;Help tips
-OpenOffice.org Chart : Help;keywords
-OpenOffice.org Chart : Help;navigation pane showing/hiding
-OpenOffice.org Chart : Help;style sheets
-OpenOffice.org Chart : Help;topics
-OpenOffice.org Chart : Help Agent
-OpenOffice.org Chart : Help Agent;help
-OpenOffice.org Chart : Help Agent;options
-OpenOffice.org Chart : Help tips
-OpenOffice.org Chart : Help tips;hiding
-OpenOffice.org Chart : hidden controls in Form Navigator
-OpenOffice.org Chart : hidden fields display (Writer)
-OpenOffice.org Chart : hidden pages
-OpenOffice.org Chart : hidden pages;printing in presentations
-OpenOffice.org Chart : hidden text
-OpenOffice.org Chart : hidden text;showing (Writer)
-OpenOffice.org Chart : hiding
-OpenOffice.org Chart : hiding;changes
-OpenOffice.org Chart : hiding;chart legends
-OpenOffice.org Chart : hiding;docked windows
-OpenOffice.org Chart : hiding;navigation pane in Help window
-OpenOffice.org Chart : high contrast mode
-OpenOffice.org Chart : Hindi
-OpenOffice.org Chart : Hindi;entering text
-OpenOffice.org Chart : Hindi;language settings
-OpenOffice.org Chart : horizontal scrollbars (Writer)
-OpenOffice.org Chart : HowTos for charts
-OpenOffice.org Chart : HTML
-OpenOffice.org Chart : HTML;definition
-OpenOffice.org Chart : HTML;export character set
-OpenOffice.org Chart : HTML;fonts for source display
-OpenOffice.org Chart : HTML;importing META tags
-OpenOffice.org Chart : HTML;live presentations
-OpenOffice.org Chart : HTML documents
-OpenOffice.org Chart : HTML documents;auto reloading
-OpenOffice.org Chart : HTML documents;importing/exporting
-OpenOffice.org Chart : HTML documents;META tags in
-OpenOffice.org Chart : HTML documents;new
-OpenOffice.org Chart : HTML documents;source text
-OpenOffice.org Chart : hyperlinks
-OpenOffice.org Chart : hyperlinks;assigning macros
-OpenOffice.org Chart : hyperlinks;character formats
-OpenOffice.org Chart : hyperlinks;definition
-OpenOffice.org Chart : hyperlinks;deleting
-OpenOffice.org Chart : hyperlinks;editing
-OpenOffice.org Chart : hyperlinks;inserting
-OpenOffice.org Chart : hyperlinks;relative and absolute
-OpenOffice.org Chart : hyperlinks;turning off automatic recognition
-OpenOffice.org Chart : hyperlinks, see also links
-OpenOffice.org Chart : hyphenation
-OpenOffice.org Chart : hyphenation;activating for a language
-OpenOffice.org Chart : hyphenation;minimal number of characters
-OpenOffice.org Chart : hyphens
-OpenOffice.org Chart : hyphens;displaying custom (Writer)
-OpenOffice.org Chart : hyphens;inserting custom
-OpenOffice.org Chart : icon bars, see toolbars
-OpenOffice.org Chart : icon sizes
-OpenOffice.org Chart : ignore list for spellcheck
-OpenOffice.org Chart : illumination
-OpenOffice.org Chart : illumination;3D charts
-OpenOffice.org Chart : illustrations, see pictures
-OpenOffice.org Chart : image button creation
-OpenOffice.org Chart : image control creation
-OpenOffice.org Chart : ImageMap
-OpenOffice.org Chart : ImageMap;definition
-OpenOffice.org Chart : ImageMap;editor
-OpenOffice.org Chart : images
-OpenOffice.org Chart : images;ImageMap
-OpenOffice.org Chart : images;inserting and editing bitmaps
-OpenOffice.org Chart : images;placeholders in presentations
-OpenOffice.org Chart : images, see also pictures
-OpenOffice.org Chart : IME
-OpenOffice.org Chart : IME;definition
-OpenOffice.org Chart : IME;showing/hiding
-OpenOffice.org Chart : import filters
-OpenOffice.org Chart : import restrictions for Microsoft Office
-OpenOffice.org Chart : importing
-OpenOffice.org Chart : importing;bitmaps
-OpenOffice.org Chart : importing;compatibility settings for text import
-OpenOffice.org Chart : importing;databases
-OpenOffice.org Chart : importing;documents in other formats
-OpenOffice.org Chart : importing;from XML
-OpenOffice.org Chart : importing;HTML and text documents
-OpenOffice.org Chart : importing;HTML with META tags
-OpenOffice.org Chart : importing;Microsoft Office documents with VBA code
-OpenOffice.org Chart : importing;tables in text format
-OpenOffice.org Chart : importing;templates
-OpenOffice.org Chart : inches
-OpenOffice.org Chart : Index tab in Help
-OpenOffice.org Chart : indexes
-OpenOffice.org Chart : indexes;backgrounds
-OpenOffice.org Chart : indexes;showing/hiding Help index tab
-OpenOffice.org Chart : indexes;unprotecting
-OpenOffice.org Chart : indicator lines in text
-OpenOffice.org Chart : inner joins (Base)
-OpenOffice.org Chart : input method window
-OpenOffice.org Chart : insert mode for entering text
-OpenOffice.org Chart : inserting
-OpenOffice.org Chart : inserting;applets
-OpenOffice.org Chart : inserting;cell ranges from spreadsheets
-OpenOffice.org Chart : inserting;charts
-OpenOffice.org Chart : inserting;clipboard options
-OpenOffice.org Chart : inserting;data from text documents
-OpenOffice.org Chart : inserting;datasource records in spreadsheets
-OpenOffice.org Chart : inserting;drawings
-OpenOffice.org Chart : inserting;floating frames
-OpenOffice.org Chart : inserting;form fields
-OpenOffice.org Chart : inserting;hyperlinks
-OpenOffice.org Chart : inserting;line breaks in cells
-OpenOffice.org Chart : inserting;movies/sounds
-OpenOffice.org Chart : inserting;new text tables defaults
-OpenOffice.org Chart : inserting;notes
-OpenOffice.org Chart : inserting;objects from Gallery
-OpenOffice.org Chart : inserting;OLE objects
-OpenOffice.org Chart : inserting;paragraph bullets
-OpenOffice.org Chart : inserting;plug-ins
-OpenOffice.org Chart : inserting;special characters
-OpenOffice.org Chart : inserting;tab stops
-OpenOffice.org Chart : installing
-OpenOffice.org Chart : installing;ActiveX control
-OpenOffice.org Chart : installing;mobile device filters
-OpenOffice.org Chart : installing;UNO components
-OpenOffice.org Chart : instructions
-OpenOffice.org Chart : instructions;general
-OpenOffice.org Chart : Internet
-OpenOffice.org Chart : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Chart : Internet;presentations
-OpenOffice.org Chart : Internet;starting searches
-OpenOffice.org Chart : Internet;turning off recognition of addresses
-OpenOffice.org Chart : Internet glossary
-OpenOffice.org Chart : invert filter
-OpenOffice.org Chart : invisible areas
-OpenOffice.org Chart : italic text
-OpenOffice.org Chart : iterative references in spreadsheets
-OpenOffice.org Chart : Java
-OpenOffice.org Chart : Java;definition
-OpenOffice.org Chart : Java;scripting
-OpenOffice.org Chart : Java;setting options
-OpenOffice.org Chart : JDBC
-OpenOffice.org Chart : JDBC;databases (Base)
-OpenOffice.org Chart : JDBC;definition
-OpenOffice.org Chart : joining
-OpenOffice.org Chart : joining;paragraphs
-OpenOffice.org Chart : joining;tables (Base)
-OpenOffice.org Chart : joins in databases (Base)
-OpenOffice.org Chart : justifying text
-OpenOffice.org Chart : kerning
-OpenOffice.org Chart : kerning;Asian texts
-OpenOffice.org Chart : kerning;definition
-OpenOffice.org Chart : kerning;in characters
-OpenOffice.org Chart : key fields for relations (Base)
-OpenOffice.org Chart : keyboard
-OpenOffice.org Chart : keyboard;assigning/editing shortcut keys
-OpenOffice.org Chart : keyboard;general commands
-OpenOffice.org Chart : keyboard;removing numbering
-OpenOffice.org Chart : keys
-OpenOffice.org Chart : keys;adding push buttons
-OpenOffice.org Chart : keys;primary keys (Base)
-OpenOffice.org Chart : kiosk export
-OpenOffice.org Chart : labels
-OpenOffice.org Chart : labels;creating and synchronizing
-OpenOffice.org Chart : labels;for charts
-OpenOffice.org Chart : labels;for draw objects
-OpenOffice.org Chart : labels;form functions
-OpenOffice.org Chart : labels;from databases
-OpenOffice.org Chart : labels, see also names/callouts
-OpenOffice.org Chart : languages
-OpenOffice.org Chart : languages;activating modules
-OpenOffice.org Chart : languages;Asian support
-OpenOffice.org Chart : languages;complex text layout
-OpenOffice.org Chart : languages;locale settings
-OpenOffice.org Chart : languages;selecting
-OpenOffice.org Chart : languages;setting options
-OpenOffice.org Chart : languages;spellcheck
-OpenOffice.org Chart : languages;spellchecking and formatting
-OpenOffice.org Chart : large handles (Writer)
-OpenOffice.org Chart : large icons
-OpenOffice.org Chart : layer arrangement
-OpenOffice.org Chart : layout
-OpenOffice.org Chart : layout;importing Word documents
-OpenOffice.org Chart : layout;pages
-OpenOffice.org Chart : LDAP server
-OpenOffice.org Chart : LDAP server;address books (Base)
-OpenOffice.org Chart : LDAP server;sign on options
-OpenOffice.org Chart : leading between paragraphs
-OpenOffice.org Chart : left alignment of paragraphs
-OpenOffice.org Chart : left joins (Base)
-OpenOffice.org Chart : legends
-OpenOffice.org Chart : legends;charts
-OpenOffice.org Chart : legends;draw objects
-OpenOffice.org Chart : legends;rounding corners
-OpenOffice.org Chart : Letter Wizard
-OpenOffice.org Chart : levels
-OpenOffice.org Chart : levels;depth stagger
-OpenOffice.org Chart : limits of tables (Writer)
-OpenOffice.org Chart : line breaks
-OpenOffice.org Chart : line breaks;in cells
-OpenOffice.org Chart : line charts
-OpenOffice.org Chart : line spacing
-OpenOffice.org Chart : line spacing;context menu in paragraphs
-OpenOffice.org Chart : line spacing;paragraph
-OpenOffice.org Chart : line styles
-OpenOffice.org Chart : line styles;applying
-OpenOffice.org Chart : line styles;defining
-OpenOffice.org Chart : lines
-OpenOffice.org Chart : lines;contours (Draw/Impress)
-OpenOffice.org Chart : lines;defining ends
-OpenOffice.org Chart : lines;draw functions
-OpenOffice.org Chart : lines;drawing in text
-OpenOffice.org Chart : lines;editing points
-OpenOffice.org Chart : lines;removing automatic lines
-OpenOffice.org Chart : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Chart : lines of text
-OpenOffice.org Chart : lines of text;alignment
-OpenOffice.org Chart : links
-OpenOffice.org Chart : links;between cells and controls
-OpenOffice.org Chart : links;by drag and drop
-OpenOffice.org Chart : links;character formats
-OpenOffice.org Chart : links;definition
-OpenOffice.org Chart : links;editing hyperlinks
-OpenOffice.org Chart : links;inserting
-OpenOffice.org Chart : links;modifying
-OpenOffice.org Chart : links;opening files with
-OpenOffice.org Chart : links;relational databases (Base)
-OpenOffice.org Chart : links;turning off automatic recognition
-OpenOffice.org Chart : links;updating options (Writer)
-OpenOffice.org Chart : links;updating specific links
-OpenOffice.org Chart : list box creation
-OpenOffice.org Chart : lists
-OpenOffice.org Chart : lists;data assigned to controls
-OpenOffice.org Chart : lists;registered databases (Base)
-OpenOffice.org Chart : lists;regular expressions
-OpenOffice.org Chart : live presentations on the Internet
-OpenOffice.org Chart : loading
-OpenOffice.org Chart : loading;documents
-OpenOffice.org Chart : loading;documents from other formats
-OpenOffice.org Chart : loading;HTML documents, automatically
-OpenOffice.org Chart : loading;Microsoft Office documents with VBA code
-OpenOffice.org Chart : loading;reloading
-OpenOffice.org Chart : loading;XML files
-OpenOffice.org Chart : locale settings
-OpenOffice.org Chart : logarithmic scaling along axes
-OpenOffice.org Chart : lowercase letters
-OpenOffice.org Chart : lowercase letters;font effects
-OpenOffice.org Chart : macros
-OpenOffice.org Chart : macros;assigning to events in forms
-OpenOffice.org Chart : macros;in MS Office documents
-OpenOffice.org Chart : macros;interrupting
-OpenOffice.org Chart : macros;organizing
-OpenOffice.org Chart : macros;recording
-OpenOffice.org Chart : macros;security
-OpenOffice.org Chart : macros;security warning dialog
-OpenOffice.org Chart : macros;selecting security warnings
-OpenOffice.org Chart : magnifiers
-OpenOffice.org Chart : Mail Merge feature in Microsoft Office
-OpenOffice.org Chart : margins
-OpenOffice.org Chart : margins;pages
-OpenOffice.org Chart : margins;setting with the mouse
-OpenOffice.org Chart : margins;shadows
-OpenOffice.org Chart : marking changes
-OpenOffice.org Chart : Markup feature in Microsoft Office
-OpenOffice.org Chart : Math formula editor
-OpenOffice.org Chart : measurement units
-OpenOffice.org Chart : measurement units;changing on rulers
-OpenOffice.org Chart : measurement units;converting
-OpenOffice.org Chart : measurement units;selecting
-OpenOffice.org Chart : Media Player window
-OpenOffice.org Chart : menus
-OpenOffice.org Chart : menus;activating context menus
-OpenOffice.org Chart : menus;customizing
-OpenOffice.org Chart : menus;inactive menu items
-OpenOffice.org Chart : merging
-OpenOffice.org Chart : merging;documents
-OpenOffice.org Chart : META tags
-OpenOffice.org Chart : metrics
-OpenOffice.org Chart : metrics;converting
-OpenOffice.org Chart : metrics;document formatting (Writer)
-OpenOffice.org Chart : metrics;in sheets
-OpenOffice.org Chart : Microsoft Office
-OpenOffice.org Chart : Microsoft Office;Access databases (base)
-OpenOffice.org Chart : Microsoft Office;as standard file format
-OpenOffice.org Chart : Microsoft Office;document import restrictions
-OpenOffice.org Chart : Microsoft Office;feature comparisons
-OpenOffice.org Chart : Microsoft Office;importing password protected files
-OpenOffice.org Chart : Microsoft Office;importing Word documents
-OpenOffice.org Chart : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Chart : Microsoft Office;new users information
-OpenOffice.org Chart : Microsoft Office;opening Microsoft documents
-OpenOffice.org Chart : Microsoft Office;reassigning document types
-OpenOffice.org Chart : mobile device filters
-OpenOffice.org Chart : models in XForms
-OpenOffice.org Chart : modifying, see changing
-OpenOffice.org Chart : more controls
-OpenOffice.org Chart : mosaic filter
-OpenOffice.org Chart : mouse
-OpenOffice.org Chart : mouse;pointers when using drag and drop
-OpenOffice.org Chart : mouse;positioning
-OpenOffice.org Chart : moving
-OpenOffice.org Chart : moving;tab stops on ruler
-OpenOffice.org Chart : moving;toolbars
-OpenOffice.org Chart : moving;using guide lines in presentations
-OpenOffice.org Chart : MS ADO interface (Base)
-OpenOffice.org Chart : multi-line titles in forms
-OpenOffice.org Chart : multiple documents
-OpenOffice.org Chart : multiple documents;opening
-OpenOffice.org Chart : My Documents folder
-OpenOffice.org Chart : My Documents folder;changing work directory
-OpenOffice.org Chart : My Documents folder;opening
-OpenOffice.org Chart : MySQL databases (Base)
-OpenOffice.org Chart : names
-OpenOffice.org Chart : names;multi-line titles
-OpenOffice.org Chart : names;objects
-OpenOffice.org Chart : names, see also labels/callouts
-OpenOffice.org Chart : namespace organization in XForms
-OpenOffice.org Chart : native SQL (Base)
-OpenOffice.org Chart : navigating
-OpenOffice.org Chart : navigating;in documents
-OpenOffice.org Chart : Navigation bar
-OpenOffice.org Chart : Navigation bar;controls
-OpenOffice.org Chart : Navigation bar;forms
-OpenOffice.org Chart : Navigator
-OpenOffice.org Chart : Navigator;contents as lists
-OpenOffice.org Chart : Navigator;docking
-OpenOffice.org Chart : Navigator;working with
-OpenOffice.org Chart : net charts
-OpenOffice.org Chart : network identity options
-OpenOffice.org Chart : new databases
-OpenOffice.org Chart : new documents
-OpenOffice.org Chart : new German spellcheck
-OpenOffice.org Chart : new lines in cells
-OpenOffice.org Chart : new windows
-OpenOffice.org Chart : non-breaking dashes
-OpenOffice.org Chart : non-breaking spaces (Writer)
-OpenOffice.org Chart : non-printing characters (Writer)
-OpenOffice.org Chart : notes
-OpenOffice.org Chart : notes;displaying (Calc)
-OpenOffice.org Chart : notes;inserting and editing
-OpenOffice.org Chart : notes;printing in text
-OpenOffice.org Chart : number formats
-OpenOffice.org Chart : number formats;codes
-OpenOffice.org Chart : number formats;formats
-OpenOffice.org Chart : number formats;recognition in text tables
-OpenOffice.org Chart : number of pages
-OpenOffice.org Chart : number of sheets
-OpenOffice.org Chart : number of tables
-OpenOffice.org Chart : numbering
-OpenOffice.org Chart : numbering;options
-OpenOffice.org Chart : numbering;paragraphs
-OpenOffice.org Chart : numbering;turning off
-OpenOffice.org Chart : numbering;using automatically
-OpenOffice.org Chart : numbers
-OpenOffice.org Chart : numbers;date, time and currency formats
-OpenOffice.org Chart : numbers;decimal places (Calc)
-OpenOffice.org Chart : numbers;formatting options for selected cells
-OpenOffice.org Chart : numerical fields in forms
-OpenOffice.org Chart : objects
-OpenOffice.org Chart : objects;always moveable (Impress/Draw)
-OpenOffice.org Chart : objects;arranging within stacks
-OpenOffice.org Chart : objects;contours in presentations
-OpenOffice.org Chart : objects;copying when moving in presentations
-OpenOffice.org Chart : objects;definition
-OpenOffice.org Chart : objects;displaying in spreadsheets
-OpenOffice.org Chart : objects;displaying in text documents
-OpenOffice.org Chart : objects;editing
-OpenOffice.org Chart : objects;inserting from Gallery
-OpenOffice.org Chart : objects;inserting OLE objects
-OpenOffice.org Chart : objects;moving and resizing with mouse
-OpenOffice.org Chart : objects;naming
-OpenOffice.org Chart : objects;opening
-OpenOffice.org Chart : objects;properties of charts
-OpenOffice.org Chart : objects;quickly moving to
-OpenOffice.org Chart : objects;titles and descriptions
-OpenOffice.org Chart : ODBC
-OpenOffice.org Chart : ODBC;database (Base)
-OpenOffice.org Chart : ODBC;definition
-OpenOffice.org Chart : ODF file formats
-OpenOffice.org Chart : Office
-OpenOffice.org Chart : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Chart : old German spellcheck
-OpenOffice.org Chart : OLE
-OpenOffice.org Chart : OLE;definition
-OpenOffice.org Chart : OLE objects
-OpenOffice.org Chart : OLE objects;arranging within stacks
-OpenOffice.org Chart : OLE objects;captions (Writer)
-OpenOffice.org Chart : OLE objects;inserting
-OpenOffice.org Chart : OLE objects;number of
-OpenOffice.org Chart : OLE objects;protecting
-OpenOffice.org Chart : one and a half line spacing in text
-OpenOffice.org Chart : online registration
-OpenOffice.org Chart : online update options
-OpenOffice.org Chart : online updates
-OpenOffice.org Chart : online updates;checking automatically
-OpenOffice.org Chart : online updates;checking manually
-OpenOffice.org Chart : Open/Save dialogs
-OpenOffice.org Chart : OpenDocument file formats
-OpenOffice.org Chart : OpenGL
-OpenOffice.org Chart : OpenGL;definition
-OpenOffice.org Chart : OpenGL;optimized output
-OpenOffice.org Chart : opening
-OpenOffice.org Chart : opening;context menus
-OpenOffice.org Chart : opening;database files
-OpenOffice.org Chart : opening;dialog settings
-OpenOffice.org Chart : opening;documents
-OpenOffice.org Chart : opening;documents from other formats
-OpenOffice.org Chart : opening;files with links
-OpenOffice.org Chart : opening;files, with placeholders
-OpenOffice.org Chart : opening;forms
-OpenOffice.org Chart : opening;Microsoft Office files
-OpenOffice.org Chart : opening;mobile device documents
-OpenOffice.org Chart : opening;objects
-OpenOffice.org Chart : opening;reports
-OpenOffice.org Chart : opening;several files
-OpenOffice.org Chart : opening;XForms
-OpenOffice.org Chart : OpenOffice.org Base data sources
-OpenOffice.org Chart : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Chart : OpenOffice.org documents
-OpenOffice.org Chart : OpenOffice.org documents;mobile device filters
-OpenOffice.org Chart : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Chart : OpenOffice.org Math start
-OpenOffice.org Chart : operators
-OpenOffice.org Chart : operators;default filters
-OpenOffice.org Chart : optional hyphens (Writer)
-OpenOffice.org Chart : options
-OpenOffice.org Chart : options;accessibility
-OpenOffice.org Chart : options;appearance
-OpenOffice.org Chart : options;compatibility (Writer)
-OpenOffice.org Chart : options;network identity
-OpenOffice.org Chart : options;online update
-OpenOffice.org Chart : options;tools
-OpenOffice.org Chart : Oracle databases (base)
-OpenOffice.org Chart : order of chart data
-OpenOffice.org Chart : ordering
-OpenOffice.org Chart : ordering;objects
-OpenOffice.org Chart : organizing
-OpenOffice.org Chart : organizing;macros and scripts
-OpenOffice.org Chart : organizing;namespaces in XForms
-OpenOffice.org Chart : organizing;styles
-OpenOffice.org Chart : organizing;templates
-OpenOffice.org Chart : original size
-OpenOffice.org Chart : original size;printing in OpenOffice.org Math
-OpenOffice.org Chart : original size;restoring after cropping
-OpenOffice.org Chart : outlines
-OpenOffice.org Chart : outlines;font effects
-OpenOffice.org Chart : outlines;outline symbols
-OpenOffice.org Chart : outlines;sending to presentations
-OpenOffice.org Chart : overwrite mode
-OpenOffice.org Chart : packages, see extensions
-OpenOffice.org Chart : page breaks
-OpenOffice.org Chart : page breaks;displaying (Calc)
-OpenOffice.org Chart : page formats
-OpenOffice.org Chart : page formats;maximizing
-OpenOffice.org Chart : page formats;restriction
-OpenOffice.org Chart : page styles
-OpenOffice.org Chart : page styles;editing/applying with statusbar
-OpenOffice.org Chart : pages
-OpenOffice.org Chart : pages;backgrounds in spreadsheets
-OpenOffice.org Chart : pages;formatting and numbering
-OpenOffice.org Chart : pages;printing page names in presentations
-OpenOffice.org Chart : pages;scaling
-OpenOffice.org Chart : pages;selecting one to print
-OpenOffice.org Chart : paint box
-OpenOffice.org Chart : paint can symbol
-OpenOffice.org Chart : pair kerning
-OpenOffice.org Chart : Palm file filters
-OpenOffice.org Chart : paper formats
-OpenOffice.org Chart : paper size warning
-OpenOffice.org Chart : paper trays
-OpenOffice.org Chart : paragraph marks
-OpenOffice.org Chart : paragraph marks;displaying (Writer)
-OpenOffice.org Chart : paragraph styles
-OpenOffice.org Chart : paragraph styles;languages
-OpenOffice.org Chart : paragraph styles;modifying basic fonts
-OpenOffice.org Chart : paragraphs
-OpenOffice.org Chart : paragraphs;alignment
-OpenOffice.org Chart : paragraphs;Asian typography
-OpenOffice.org Chart : paragraphs;backgrounds
-OpenOffice.org Chart : paragraphs;defining borders
-OpenOffice.org Chart : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Chart : paragraphs;increasing indents of
-OpenOffice.org Chart : paragraphs;indents, margins and columns
-OpenOffice.org Chart : paragraphs;inserting bullets
-OpenOffice.org Chart : paragraphs;joining
-OpenOffice.org Chart : paragraphs;numbering automatically
-OpenOffice.org Chart : paragraphs;removing blank ones
-OpenOffice.org Chart : paragraphs;spacing
-OpenOffice.org Chart : paragraphs;tab stops
-OpenOffice.org Chart : parameters
-OpenOffice.org Chart : parameters;command line
-OpenOffice.org Chart : parameters;queries (Base)
-OpenOffice.org Chart : passwords for protecting contents
-OpenOffice.org Chart : pasting
-OpenOffice.org Chart : pasting;cell ranges
-OpenOffice.org Chart : pasting;cell ranges from spreadsheets
-OpenOffice.org Chart : pasting;data from text documents
-OpenOffice.org Chart : pasting;draw objects
-OpenOffice.org Chart : pasting;draw objects from other documents
-OpenOffice.org Chart : pasting;formatted/unformatted text
-OpenOffice.org Chart : pasting;from data source view
-OpenOffice.org Chart : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Chart : pasting;pictures from other documents
-OpenOffice.org Chart : pasting;sheet areas in text documents
-OpenOffice.org Chart : pasting;to Gallery
-OpenOffice.org Chart : paths
-OpenOffice.org Chart : paths;changing work directory
-OpenOffice.org Chart : paths;defaults
-OpenOffice.org Chart : pattern editor
-OpenOffice.org Chart : pattern fields
-OpenOffice.org Chart : pattern fields;form functions
-OpenOffice.org Chart : patterns for objects
-OpenOffice.org Chart : PDF
-OpenOffice.org Chart : PDF;export
-OpenOffice.org Chart : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Chart : personal data input
-OpenOffice.org Chart : phonetic guide
-OpenOffice.org Chart : picklist creation
-OpenOffice.org Chart : pictures
-OpenOffice.org Chart : pictures;adding to Gallery
-OpenOffice.org Chart : pictures;arranging within stacks
-OpenOffice.org Chart : pictures;assigning macros
-OpenOffice.org Chart : pictures;backgrounds
-OpenOffice.org Chart : pictures;captions (Writer)
-OpenOffice.org Chart : pictures;changing paths
-OpenOffice.org Chart : pictures;cropping and zooming
-OpenOffice.org Chart : pictures;displaying in Calc
-OpenOffice.org Chart : pictures;displaying in Writer (Writer)
-OpenOffice.org Chart : pictures;drag and drop between documents
-OpenOffice.org Chart : pictures;drawing
-OpenOffice.org Chart : pictures;editing
-OpenOffice.org Chart : pictures;filters
-OpenOffice.org Chart : pictures;ImageMap
-OpenOffice.org Chart : pictures;inserting automatically
-OpenOffice.org Chart : pictures;inserting from Gallery
-OpenOffice.org Chart : pictures;number of
-OpenOffice.org Chart : pictures;printing
-OpenOffice.org Chart : pictures;scaling/resizing
-OpenOffice.org Chart : pie charts
-OpenOffice.org Chart : Pivot tables feature in Microsoft Office
-OpenOffice.org Chart : pixel editor
-OpenOffice.org Chart : pixel graphics
-OpenOffice.org Chart : pixel graphics;inserting and editing
-OpenOffice.org Chart : pixel patterns
-OpenOffice.org Chart : placeholders
-OpenOffice.org Chart : placeholders;in SQL queries
-OpenOffice.org Chart : placeholders;on opening files
-OpenOffice.org Chart : placing toolbars
-OpenOffice.org Chart : playing movies and sound files
-OpenOffice.org Chart : plotting data as charts
-OpenOffice.org Chart : plug-ins
-OpenOffice.org Chart : plug-ins;activating and deactivating
-OpenOffice.org Chart : plug-ins;definition
-OpenOffice.org Chart : plug-ins;inserting
-OpenOffice.org Chart : pocket device appliances
-OpenOffice.org Chart : Pocket PC file filters
-OpenOffice.org Chart : points
-OpenOffice.org Chart : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Chart : polygon drawing
-OpenOffice.org Chart : pop-art filter
-OpenOffice.org Chart : portable document format
-OpenOffice.org Chart : positioning
-OpenOffice.org Chart : positioning;draw objects and controls
-OpenOffice.org Chart : positioning;fonts
-OpenOffice.org Chart : positioning;objects
-OpenOffice.org Chart : positioning;toolbars
-OpenOffice.org Chart : post method for form transmissions
-OpenOffice.org Chart : posterizing filter
-OpenOffice.org Chart : PostScript
-OpenOffice.org Chart : PostScript;creating files
-OpenOffice.org Chart : PostScript;PDF converter, UNIX
-OpenOffice.org Chart : PowerPoint export
-OpenOffice.org Chart : precision as shown (Calc)
-OpenOffice.org Chart : predefining fonts
-OpenOffice.org Chart : presentations
-OpenOffice.org Chart : presentations;creating/opening
-OpenOffice.org Chart : presentations;inserting spreadsheet cells
-OpenOffice.org Chart : presentations;live on the Internet
-OpenOffice.org Chart : presentations;print menu
-OpenOffice.org Chart : presentations;saving
-OpenOffice.org Chart : presentations;saving automatically
-OpenOffice.org Chart : presentations;saving in other formats
-OpenOffice.org Chart : presentations;sending as e-mail
-OpenOffice.org Chart : presentations;starting with wizard
-OpenOffice.org Chart : presentations;wizards
-OpenOffice.org Chart : press buttons, see push buttons
-OpenOffice.org Chart : previews
-OpenOffice.org Chart : previews;fonts lists
-OpenOffice.org Chart : primary keys
-OpenOffice.org Chart : primary keys;defining
-OpenOffice.org Chart : primary keys;inserting (Base)
-OpenOffice.org Chart : print area selection
-OpenOffice.org Chart : printer metrics for document formatting (Writer)
-OpenOffice.org Chart : printers
-OpenOffice.org Chart : printers;adding, UNIX
-OpenOffice.org Chart : printers;choosing
-OpenOffice.org Chart : printers;default printer
-OpenOffice.org Chart : printers;faxes under UNIX
-OpenOffice.org Chart : printers;maximum page formats
-OpenOffice.org Chart : printers;paper trays
-OpenOffice.org Chart : printers;properties
-OpenOffice.org Chart : printing
-OpenOffice.org Chart : printing;black and white
-OpenOffice.org Chart : printing;brochures
-OpenOffice.org Chart : printing;colors in grayscale
-OpenOffice.org Chart : printing;copies
-OpenOffice.org Chart : printing;creating individual jobs
-OpenOffice.org Chart : printing;dates in presentations
-OpenOffice.org Chart : printing;directly
-OpenOffice.org Chart : printing;documents
-OpenOffice.org Chart : printing;drawings defaults
-OpenOffice.org Chart : printing;elements in text documents
-OpenOffice.org Chart : printing;faster
-OpenOffice.org Chart : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Chart : printing;fitting to pages in presentations
-OpenOffice.org Chart : printing;formulas in OpenOffice.org Math
-OpenOffice.org Chart : printing;hidden pages of presentations
-OpenOffice.org Chart : printing;in original size in OpenOffice.org Math
-OpenOffice.org Chart : printing;left/right pages
-OpenOffice.org Chart : printing;queries (Base)
-OpenOffice.org Chart : printing;scaling in OpenOffice.org Math
-OpenOffice.org Chart : printing;selections
-OpenOffice.org Chart : printing;text always in black
-OpenOffice.org Chart : printing;text in reverse order
-OpenOffice.org Chart : printing;tiling pages in presentations
-OpenOffice.org Chart : printing;transparencies
-OpenOffice.org Chart : printing;warnings
-OpenOffice.org Chart : printing;without scaling in presentations
-OpenOffice.org Chart : printing speed
-OpenOffice.org Chart : programming
-OpenOffice.org Chart : programming;OpenOffice.org
-OpenOffice.org Chart : programming;scripting
-OpenOffice.org Chart : properties
-OpenOffice.org Chart : properties;charts
-OpenOffice.org Chart : properties;fields in databases
-OpenOffice.org Chart : properties;files
-OpenOffice.org Chart : properties;form controls
-OpenOffice.org Chart : properties;forms
-OpenOffice.org Chart : properties;printers
-OpenOffice.org Chart : properties;smooth lines in line charts/XY charts
-OpenOffice.org Chart : protected contents
-OpenOffice.org Chart : protected dashes
-OpenOffice.org Chart : protected database tables
-OpenOffice.org Chart : protected documents
-OpenOffice.org Chart : protected spaces
-OpenOffice.org Chart : protected spaces;inserting
-OpenOffice.org Chart : protected spaces;showing (Writer)
-OpenOffice.org Chart : protecting
-OpenOffice.org Chart : protecting;contents
-OpenOffice.org Chart : protecting;recorded changes
-OpenOffice.org Chart : proxy settings
-OpenOffice.org Chart : push buttons
-OpenOffice.org Chart : push buttons;adding to documents
-OpenOffice.org Chart : push buttons;creating
-OpenOffice.org Chart : queries
-OpenOffice.org Chart : queries;copying (Base)
-OpenOffice.org Chart : queries;creating in design view (Base)
-OpenOffice.org Chart : queries;creating in SQL view
-OpenOffice.org Chart : queries;defining (Base)
-OpenOffice.org Chart : queries;deleting table links (Base)
-OpenOffice.org Chart : queries;editing in data source view
-OpenOffice.org Chart : queries;formulating filter conditions (Base)
-OpenOffice.org Chart : queries;joining tables (Base)
-OpenOffice.org Chart : queries;missing elements (Base)
-OpenOffice.org Chart : queries;overview (Base)
-OpenOffice.org Chart : queries;parameter queries (Base)
-OpenOffice.org Chart : queries;printing (Base)
-OpenOffice.org Chart : Query Wizard (Base)
-OpenOffice.org Chart : quickstarter
-OpenOffice.org Chart : quotation marks
-OpenOffice.org Chart : quotation marks;replacing
-OpenOffice.org Chart : quotes
-OpenOffice.org Chart : quotes;custom
-OpenOffice.org Chart : radar charts, see net charts
-OpenOffice.org Chart : radio button creation
-OpenOffice.org Chart : read-only documents
-OpenOffice.org Chart : read-only documents;cursor
-OpenOffice.org Chart : read-only documents;database tables on/off
-OpenOffice.org Chart : read-only documents;editing
-OpenOffice.org Chart : read-only documents;opening documents as
-OpenOffice.org Chart : read-only items in Data Navigator
-OpenOffice.org Chart : recognizing URLs automatically
-OpenOffice.org Chart : recording
-OpenOffice.org Chart : recording;changes
-OpenOffice.org Chart : recording;macros
-OpenOffice.org Chart : records
-OpenOffice.org Chart : records;inserting notes
-OpenOffice.org Chart : records;protecting
-OpenOffice.org Chart : records;saving
-OpenOffice.org Chart : records;searching in databases
-OpenOffice.org Chart : rectangles with round corners
-OpenOffice.org Chart : recursions in spreadsheets
-OpenOffice.org Chart : redo command
-OpenOffice.org Chart : reduced printing
-OpenOffice.org Chart : reference lines
-OpenOffice.org Chart : references
-OpenOffice.org Chart : references;displaying in color (Calc)
-OpenOffice.org Chart : references;expanding (Calc)
-OpenOffice.org Chart : references;iterative (Calc)
-OpenOffice.org Chart : Refresh Data feature in Microsoft Office
-OpenOffice.org Chart : register-true
-OpenOffice.org Chart : register-true;definition
-OpenOffice.org Chart : registering
-OpenOffice.org Chart : registering;address books
-OpenOffice.org Chart : registering;databases (Base)
-OpenOffice.org Chart : registering;OpenOffice.org
-OpenOffice.org Chart : regression curves in charts
-OpenOffice.org Chart : regular expressions
-OpenOffice.org Chart : regular expressions;list of
-OpenOffice.org Chart : regular expressions;opening files
-OpenOffice.org Chart : relational databases (Base)
-OpenOffice.org Chart : relations
-OpenOffice.org Chart : relations;creating and deleting (Base)
-OpenOffice.org Chart : relations;joining tables (Base)
-OpenOffice.org Chart : relations;properties (Base)
-OpenOffice.org Chart : relative hyperlinks
-OpenOffice.org Chart : relative saving of URLs
-OpenOffice.org Chart : reloading
-OpenOffice.org Chart : reloading;documents
-OpenOffice.org Chart : reloading;HTML documents, automatically
-OpenOffice.org Chart : remarks, see also notes
-OpenOffice.org Chart : remote configurations
-OpenOffice.org Chart : remove noise filter
-OpenOffice.org Chart : removing
-OpenOffice.org Chart : removing;bullets and numbering
-OpenOffice.org Chart : removing;form filters
-OpenOffice.org Chart : removing, see also deleting
-OpenOffice.org Chart : reorganizing charts
-OpenOffice.org Chart : Replace text as you type feature in Microsoft Office
-OpenOffice.org Chart : replacement options
-OpenOffice.org Chart : replacement table
-OpenOffice.org Chart : replacing
-OpenOffice.org Chart : replacing;AutoCorrect function
-OpenOffice.org Chart : replacing;dashes
-OpenOffice.org Chart : Report Builder
-OpenOffice.org Chart : reports
-OpenOffice.org Chart : reports;creating
-OpenOffice.org Chart : reports;error reports
-OpenOffice.org Chart : reports;opening and editing
-OpenOffice.org Chart : reports;templates
-OpenOffice.org Chart : resetting
-OpenOffice.org Chart : resetting;templates
-OpenOffice.org Chart : resizing
-OpenOffice.org Chart : resizing;objects, by mouse
-OpenOffice.org Chart : resizing, see also scaling/zooming
-OpenOffice.org Chart : resolution when printing bitmaps
-OpenOffice.org Chart : restoring
-OpenOffice.org Chart : restoring;default formatting
-OpenOffice.org Chart : restoring;editing
-OpenOffice.org Chart : reversing printing order
-OpenOffice.org Chart : review function
-OpenOffice.org Chart : review function;accepting or rejecting changes
-OpenOffice.org Chart : review function;comparing documents
-OpenOffice.org Chart : review function;recording changes example
-OpenOffice.org Chart : rich text control
-OpenOffice.org Chart : right alignment of paragraphs
-OpenOffice.org Chart : right joins (Base)
-OpenOffice.org Chart : right-to-left text
-OpenOffice.org Chart : rotating
-OpenOffice.org Chart : rotating;3D text
-OpenOffice.org Chart : round corners
-OpenOffice.org Chart : rounding precision (Calc)
-OpenOffice.org Chart : row headers
-OpenOffice.org Chart : row headers;displaying (Calc)
-OpenOffice.org Chart : row headers;highlighting (Calc)
-OpenOffice.org Chart : rulers
-OpenOffice.org Chart : rulers;default settings
-OpenOffice.org Chart : rulers;measurement units
-OpenOffice.org Chart : rulers;visible in presentations
-OpenOffice.org Chart : samples and templates
-OpenOffice.org Chart : saving
-OpenOffice.org Chart : saving;default file formats
-OpenOffice.org Chart : saving;dialog settings
-OpenOffice.org Chart : saving;documents
-OpenOffice.org Chart : saving;documents for mobile devices
-OpenOffice.org Chart : saving;documents in other formats
-OpenOffice.org Chart : saving;documents, automatically
-OpenOffice.org Chart : saving;in Microsoft Office file format
-OpenOffice.org Chart : saving;options
-OpenOffice.org Chart : saving;templates
-OpenOffice.org Chart : saving;to XML
-OpenOffice.org Chart : saving;VBA code in Microsoft Office documents
-OpenOffice.org Chart : saving;with password by default
-OpenOffice.org Chart : saving as command
-OpenOffice.org Chart : saving as command;precautions
-OpenOffice.org Chart : scaling
-OpenOffice.org Chart : scaling;axes
-OpenOffice.org Chart : scaling;font sizes in user interface
-OpenOffice.org Chart : scaling;objects
-OpenOffice.org Chart : scaling;pictures
-OpenOffice.org Chart : scaling;printing in OpenOffice.org Math
-OpenOffice.org Chart : scaling;text in charts
-OpenOffice.org Chart : scaling;when printing presentations
-OpenOffice.org Chart : scaling, see also zooming
-OpenOffice.org Chart : scatter charts
-OpenOffice.org Chart : screen
-OpenOffice.org Chart : screen;full screen views
-OpenOffice.org Chart : screen;scaling
-OpenOffice.org Chart : screen magnifiers
-OpenOffice.org Chart : screen readers
-OpenOffice.org Chart : script organization
-OpenOffice.org Chart : scripting in programming
-OpenOffice.org Chart : scrollbars
-OpenOffice.org Chart : scrollbars;controls
-OpenOffice.org Chart : scrollbars;displaying (Calc)
-OpenOffice.org Chart : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Chart : search criteria for database functions in cells
-OpenOffice.org Chart : search engines
-OpenOffice.org Chart : search engines;definition
-OpenOffice.org Chart : search engines;selecting
-OpenOffice.org Chart : searching
-OpenOffice.org Chart : searching;all sheets
-OpenOffice.org Chart : searching;databases
-OpenOffice.org Chart : searching;form filters
-OpenOffice.org Chart : searching;Internet
-OpenOffice.org Chart : searching;tables and forms
-OpenOffice.org Chart : secondary axes in charts
-OpenOffice.org Chart : sections
-OpenOffice.org Chart : sections;backgrounds
-OpenOffice.org Chart : sections;protecting
-OpenOffice.org Chart : security
-OpenOffice.org Chart : security;options for documents with macros
-OpenOffice.org Chart : security;protecting contents
-OpenOffice.org Chart : security;warning dialogs with macros
-OpenOffice.org Chart : selecting
-OpenOffice.org Chart : selecting;controls
-OpenOffice.org Chart : selecting;group objects
-OpenOffice.org Chart : selecting;measurement units
-OpenOffice.org Chart : selecting;objects
-OpenOffice.org Chart : selecting;print areas
-OpenOffice.org Chart : selecting;several files
-OpenOffice.org Chart : selection clipboard
-OpenOffice.org Chart : selection modes in text
-OpenOffice.org Chart : sending
-OpenOffice.org Chart : sending;AutoAbstract function in presentations
-OpenOffice.org Chart : sending;documents as e-mail
-OpenOffice.org Chart : sending;documents as faxes
-OpenOffice.org Chart : separator lines
-OpenOffice.org Chart : separator lines;defining
-OpenOffice.org Chart : separators
-OpenOffice.org Chart : separators;conditional
-OpenOffice.org Chart : Server Side ImageMap
-OpenOffice.org Chart : settings
-OpenOffice.org Chart : settings;printers
-OpenOffice.org Chart : settings;program configuration
-OpenOffice.org Chart : settings;proxies
-OpenOffice.org Chart : settings;tracking changes
-OpenOffice.org Chart : settings;views
-OpenOffice.org Chart : SGML
-OpenOffice.org Chart : SGML;definition
-OpenOffice.org Chart : shadows
-OpenOffice.org Chart : shadows;areas
-OpenOffice.org Chart : shadows;borders
-OpenOffice.org Chart : shadows;characters
-OpenOffice.org Chart : shadows;characters, using context menu
-OpenOffice.org Chart : sharpening filter
-OpenOffice.org Chart : sheet tabs
-OpenOffice.org Chart : sheet tabs;displaying
-OpenOffice.org Chart : sheets
-OpenOffice.org Chart : sheets;searching all
-OpenOffice.org Chart : shortcut keys
-OpenOffice.org Chart : shortcut keys;assigning macros
-OpenOffice.org Chart : shortcut keys;charts
-OpenOffice.org Chart : shortcut keys;general
-OpenOffice.org Chart : shortcut keys;in databases
-OpenOffice.org Chart : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Chart : Show/Hide feature in Microsoft Office
-OpenOffice.org Chart : showing
-OpenOffice.org Chart : showing;changes
-OpenOffice.org Chart : showing;docked windows
-OpenOffice.org Chart : showing;drawings and controls (Writer)
-OpenOffice.org Chart : showing;live presentations on the Internet
-OpenOffice.org Chart : showing;toolbars
-OpenOffice.org Chart : signing documents with digital signatures
-OpenOffice.org Chart : similarity search
-OpenOffice.org Chart : simple handles (Writer)
-OpenOffice.org Chart : simplified Chinese
-OpenOffice.org Chart : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Chart : single sign on options
-OpenOffice.org Chart : single-line spacing in text
-OpenOffice.org Chart : sizes
-OpenOffice.org Chart : sizes;draw objects
-OpenOffice.org Chart : sizes;pictures
-OpenOffice.org Chart : slanting draw objects
-OpenOffice.org Chart : small capitals
-OpenOffice.org Chart : small icons
-OpenOffice.org Chart : smart tags
-OpenOffice.org Chart : smart tags;options
-OpenOffice.org Chart : smooth scrolling (Writer)
-OpenOffice.org Chart : smoothing filter
-OpenOffice.org Chart : snap grid defaults (Writer/Calc)
-OpenOffice.org Chart : snapping in presentations and drawings
-OpenOffice.org Chart : solarization filter
-OpenOffice.org Chart : sort lists
-OpenOffice.org Chart : sort lists;copying to in Calc
-OpenOffice.org Chart : sorting
-OpenOffice.org Chart : sorting;data in forms
-OpenOffice.org Chart : sorting;databases
-OpenOffice.org Chart : sounds
-OpenOffice.org Chart : sounds;inserting and playing
-OpenOffice.org Chart : sounds;UNIX
-OpenOffice.org Chart : spaces
-OpenOffice.org Chart : spaces;displaying (Writer)
-OpenOffice.org Chart : spaces;ignoring double
-OpenOffice.org Chart : spaces;inserting protected spaces
-OpenOffice.org Chart : spaces;showing protected spaces (Writer)
-OpenOffice.org Chart : spacing
-OpenOffice.org Chart : spacing;between paragraphs in footnotes
-OpenOffice.org Chart : spacing;font effects
-OpenOffice.org Chart : spacing;lines and paragraphs
-OpenOffice.org Chart : spacing;tab stops in text documents
-OpenOffice.org Chart : spacing;tabs in presentations
-OpenOffice.org Chart : spadmin
-OpenOffice.org Chart : special characters
-OpenOffice.org Chart : speech bubbles
-OpenOffice.org Chart : speed of printing
-OpenOffice.org Chart : spellcheck
-OpenOffice.org Chart : spellcheck;activating for a language
-OpenOffice.org Chart : spellcheck;context menus
-OpenOffice.org Chart : spellcheck;default languages
-OpenOffice.org Chart : spellcheck;dialog
-OpenOffice.org Chart : spellcheck;dictionary of exceptions
-OpenOffice.org Chart : spellcheck;ignore list
-OpenOffice.org Chart : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Chart : spin button creation
-OpenOffice.org Chart : spoolfiles with Xprinter
-OpenOffice.org Chart : spreadsheets
-OpenOffice.org Chart : spreadsheets;as databases (base)
-OpenOffice.org Chart : spreadsheets;backgrounds
-OpenOffice.org Chart : spreadsheets;copying areas to text documents
-OpenOffice.org Chart : spreadsheets;creating/opening
-OpenOffice.org Chart : spreadsheets;inserting charts
-OpenOffice.org Chart : spreadsheets;inserting database records
-OpenOffice.org Chart : spreadsheets;printing
-OpenOffice.org Chart : spreadsheets;saving
-OpenOffice.org Chart : spreadsheets;saving automatically
-OpenOffice.org Chart : spreadsheets;saving in other formats
-OpenOffice.org Chart : spreadsheets;sending as e-mail
-OpenOffice.org Chart : SQL
-OpenOffice.org Chart : SQL;definition
-OpenOffice.org Chart : SQL;DISTINCT parameter
-OpenOffice.org Chart : SQL;executing SQL commands
-OpenOffice.org Chart : SQL;executing SQL statements (Base)
-OpenOffice.org Chart : SQL;queries (Base)
-OpenOffice.org Chart : square drawings
-OpenOffice.org Chart : standard bar on/off
-OpenOffice.org Chart : standard deviation in charts
-OpenOffice.org Chart : standard filters in databases
-OpenOffice.org Chart : standard printer under UNIX
-OpenOffice.org Chart : Start Module backing window
-OpenOffice.org Chart : start parameters
-OpenOffice.org Chart : statistics in charts
-OpenOffice.org Chart : status bar on/off
-OpenOffice.org Chart : stickers
-OpenOffice.org Chart : stock charts
-OpenOffice.org Chart : strikethrough
-OpenOffice.org Chart : strikethrough;characters
-OpenOffice.org Chart : strikethrough;font effects
-OpenOffice.org Chart : styles
-OpenOffice.org Chart : styles;'changed' message
-OpenOffice.org Chart : styles;copying between documents
-OpenOffice.org Chart : styles;keyboard shortcuts
-OpenOffice.org Chart : styles;organizing
-OpenOffice.org Chart : styles;printing styles used in a document
-OpenOffice.org Chart : styles;replacing automatically
-OpenOffice.org Chart : Styles and Formatting window
-OpenOffice.org Chart : Styles and Formatting window;docking
-OpenOffice.org Chart : subforms
-OpenOffice.org Chart : subforms;creating
-OpenOffice.org Chart : subforms;description
-OpenOffice.org Chart : submitting forms
-OpenOffice.org Chart : suffixes in file formats
-OpenOffice.org Chart : support on the Web
-OpenOffice.org Chart : synchronizing
-OpenOffice.org Chart : synchronizing;labels and business cards
-OpenOffice.org Chart : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Chart : system address book registration
-OpenOffice.org Chart : tab stops
-OpenOffice.org Chart : tab stops;displaying (Writer)
-OpenOffice.org Chart : tab stops;inserting and editing
-OpenOffice.org Chart : tab stops;setting in sheets
-OpenOffice.org Chart : tab stops;settings
-OpenOffice.org Chart : tab stops;spacing in presentations
-OpenOffice.org Chart : tab stops;spacing in text documents
-OpenOffice.org Chart : table controls
-OpenOffice.org Chart : table controls;form functions
-OpenOffice.org Chart : table controls;keyboard-only edit mode
-OpenOffice.org Chart : table controls;properties
-OpenOffice.org Chart : table views of databases
-OpenOffice.org Chart : Table Wizard (Base)
-OpenOffice.org Chart : tables
-OpenOffice.org Chart : tables;backgrounds
-OpenOffice.org Chart : tables;inserting line breaks
-OpenOffice.org Chart : tables in databases
-OpenOffice.org Chart : tables in databases;access rights to (Base)
-OpenOffice.org Chart : tables in databases;adding to queries
-OpenOffice.org Chart : tables in databases;browsing and editing
-OpenOffice.org Chart : tables in databases;copying database tables (Base)
-OpenOffice.org Chart : tables in databases;creating
-OpenOffice.org Chart : tables in databases;creating in design view
-OpenOffice.org Chart : tables in databases;importing text formats (Base)
-OpenOffice.org Chart : tables in databases;joining for queries (Base)
-OpenOffice.org Chart : tables in databases;printing queries (Base)
-OpenOffice.org Chart : tables in databases;relations (Base)
-OpenOffice.org Chart : tables in databases;searching
-OpenOffice.org Chart : tables in spreadsheets
-OpenOffice.org Chart : tables in spreadsheets;copying data to other applications
-OpenOffice.org Chart : tables in spreadsheets;defining borders
-OpenOffice.org Chart : tables in spreadsheets;value highlighting
-OpenOffice.org Chart : tables in text
-OpenOffice.org Chart : tables in text;captions
-OpenOffice.org Chart : tables in text;creating automatically
-OpenOffice.org Chart : tables in text;default settings
-OpenOffice.org Chart : tables in text;defining borders
-OpenOffice.org Chart : tables in text;displaying
-OpenOffice.org Chart : tables in text;printing
-OpenOffice.org Chart : tables in text;protecting cells
-OpenOffice.org Chart : tables of contents
-OpenOffice.org Chart : tables of contents;unprotecting
-OpenOffice.org Chart : tabs
-OpenOffice.org Chart : tabs;displaying sheet tabs
-OpenOffice.org Chart : tags
-OpenOffice.org Chart : tags;definition
-OpenOffice.org Chart : tags;META tags
-OpenOffice.org Chart : templates
-OpenOffice.org Chart : templates;agendas
-OpenOffice.org Chart : templates;changing basic fonts
-OpenOffice.org Chart : templates;database reports
-OpenOffice.org Chart : templates;deleting
-OpenOffice.org Chart : templates;editing and saving
-OpenOffice.org Chart : templates;faxes
-OpenOffice.org Chart : templates;importing and exporting
-OpenOffice.org Chart : templates;letters
-OpenOffice.org Chart : templates;new documents from templates
-OpenOffice.org Chart : templates;opening documents with
-OpenOffice.org Chart : templates;organizing
-OpenOffice.org Chart : terminology
-OpenOffice.org Chart : terminology;general glossary
-OpenOffice.org Chart : terminology;Internet glossary
-OpenOffice.org Chart : testing XML filters
-OpenOffice.org Chart : text
-OpenOffice.org Chart : text;animating
-OpenOffice.org Chart : text;Asian layout
-OpenOffice.org Chart : text;backgrounds
-OpenOffice.org Chart : text;bold
-OpenOffice.org Chart : text;coloring
-OpenOffice.org Chart : text;contours
-OpenOffice.org Chart : text;copying by drag and drop
-OpenOffice.org Chart : text;CTL languages
-OpenOffice.org Chart : text;drawing pictures
-OpenOffice.org Chart : text;font effects
-OpenOffice.org Chart : text;font sizes
-OpenOffice.org Chart : text;font styles
-OpenOffice.org Chart : text;fonts and formats
-OpenOffice.org Chart : text;Fontwork icons
-OpenOffice.org Chart : text;hyperlinks
-OpenOffice.org Chart : text;inserting special characters
-OpenOffice.org Chart : text;italics
-OpenOffice.org Chart : text;kerning
-OpenOffice.org Chart : text;language selection
-OpenOffice.org Chart : text;line spacing
-OpenOffice.org Chart : text;overwriting or inserting
-OpenOffice.org Chart : text;placeholders in presentations
-OpenOffice.org Chart : text;printing in black
-OpenOffice.org Chart : text;replacing with format
-OpenOffice.org Chart : text;selection modes
-OpenOffice.org Chart : text;shadowed
-OpenOffice.org Chart : text;text/draw objects
-OpenOffice.org Chart : text attributes
-OpenOffice.org Chart : text attributes;hyperlinks
-OpenOffice.org Chart : text attributes;undoing
-OpenOffice.org Chart : text boxes
-OpenOffice.org Chart : text boxes;form functions
-OpenOffice.org Chart : text boxes;positioning
-OpenOffice.org Chart : text breaks in cells
-OpenOffice.org Chart : text colors for better accessibility
-OpenOffice.org Chart : text databases (Base)
-OpenOffice.org Chart : text documents
-OpenOffice.org Chart : text documents;creating/opening
-OpenOffice.org Chart : text documents;importing/exporting
-OpenOffice.org Chart : text documents;inserting spreadsheet cells
-OpenOffice.org Chart : text documents;print settings
-OpenOffice.org Chart : text documents;printing
-OpenOffice.org Chart : text documents;saving
-OpenOffice.org Chart : text documents;saving automatically
-OpenOffice.org Chart : text documents;saving in other formats
-OpenOffice.org Chart : text documents;sending as e-mail
-OpenOffice.org Chart : text effects
-OpenOffice.org Chart : text flow
-OpenOffice.org Chart : text flow;in cells
-OpenOffice.org Chart : text formats
-OpenOffice.org Chart : text formats;databases
-OpenOffice.org Chart : text formats;pasting
-OpenOffice.org Chart : text input fields
-OpenOffice.org Chart : text layout for special languages
-OpenOffice.org Chart : text objects
-OpenOffice.org Chart : text objects;alignment
-OpenOffice.org Chart : text objects;draw functions
-OpenOffice.org Chart : text objects;fonts
-OpenOffice.org Chart : text objects;in presentations and drawings
-OpenOffice.org Chart : text overflow in spreadsheet cells
-OpenOffice.org Chart : text scaling in charts
-OpenOffice.org Chart : text, see also text documents, paragraphs and characters
-OpenOffice.org Chart : TextArt, see Fontwork
-OpenOffice.org Chart : textures
-OpenOffice.org Chart : textures;inserting from Gallery
-OpenOffice.org Chart : textures;on chart bars
-OpenOffice.org Chart : Thai
-OpenOffice.org Chart : Thai;entering text
-OpenOffice.org Chart : Thai;language settings
-OpenOffice.org Chart : thesaurus
-OpenOffice.org Chart : thesaurus;activating for a language
-OpenOffice.org Chart : ticker text
-OpenOffice.org Chart : time fields
-OpenOffice.org Chart : time fields;form functions
-OpenOffice.org Chart : times
-OpenOffice.org Chart : times;inserting when printing presentations
-OpenOffice.org Chart : times, formats
-OpenOffice.org Chart : tips
-OpenOffice.org Chart : tips;extended tips in Help
-OpenOffice.org Chart : title rows
-OpenOffice.org Chart : title rows;printing in OpenOffice.org Math
-OpenOffice.org Chart : titles
-OpenOffice.org Chart : titles;alignment (charts)
-OpenOffice.org Chart : titles;changing
-OpenOffice.org Chart : titles;editing in charts
-OpenOffice.org Chart : titles;font effects
-OpenOffice.org Chart : titles;formatting automatically
-OpenOffice.org Chart : titles;formatting charts
-OpenOffice.org Chart : titles;objects
-OpenOffice.org Chart : toolbars
-OpenOffice.org Chart : toolbars;adding buttons
-OpenOffice.org Chart : toolbars;docking/undocking
-OpenOffice.org Chart : toolbars;Form Navigation bar
-OpenOffice.org Chart : toolbars;viewing/closing
-OpenOffice.org Chart : tools bar
-OpenOffice.org Chart : tooltips
-OpenOffice.org Chart : tooltips;extended tips
-OpenOffice.org Chart : tooltips;help
-OpenOffice.org Chart : Track changes feature in Microsoft Office
-OpenOffice.org Chart : traditional Chinese
-OpenOffice.org Chart : traditional Chinese;translating to simplified chinese
-OpenOffice.org Chart : transparency
-OpenOffice.org Chart : transparency;areas
-OpenOffice.org Chart : transparency;off for faster printing
-OpenOffice.org Chart : transparency;saving
-OpenOffice.org Chart : tree view of Help
-OpenOffice.org Chart : trend lines in charts
-OpenOffice.org Chart : typefaces
-OpenOffice.org Chart : typefaces;adding under UNIX
-OpenOffice.org Chart : typefaces;formats
-OpenOffice.org Chart : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Chart : typography
-OpenOffice.org Chart : typography;Asian
-OpenOffice.org Chart : underlining
-OpenOffice.org Chart : underlining;AutoFormat function
-OpenOffice.org Chart : underlining;characters
-OpenOffice.org Chart : underlining;text
-OpenOffice.org Chart : undocking windows
-OpenOffice.org Chart : undoing
-OpenOffice.org Chart : undoing;direct formatting
-OpenOffice.org Chart : undoing;editing
-OpenOffice.org Chart : undoing;number of steps
-OpenOffice.org Chart : ungrouping groups
-OpenOffice.org Chart : units
-OpenOffice.org Chart : units;converting
-OpenOffice.org Chart : units;measurement units
-OpenOffice.org Chart : UNO components
-OpenOffice.org Chart : UNO components;Extension Manager
-OpenOffice.org Chart : UNO components;integrating new
-OpenOffice.org Chart : update options
-OpenOffice.org Chart : updates
-OpenOffice.org Chart : updates;checking automatically
-OpenOffice.org Chart : updates;checking manually
-OpenOffice.org Chart : updating
-OpenOffice.org Chart : updating;fields and charts, automatically (Writer)
-OpenOffice.org Chart : updating;links in text documents
-OpenOffice.org Chart : updating;links, on opening
-OpenOffice.org Chart : updating;templates
-OpenOffice.org Chart : URL
-OpenOffice.org Chart : URL;changing hyperlink URLs
-OpenOffice.org Chart : URL;definition
-OpenOffice.org Chart : URL;saving absolute/relative paths
-OpenOffice.org Chart : URL;turning off URL recognition
-OpenOffice.org Chart : user data
-OpenOffice.org Chart : user data;input
-OpenOffice.org Chart : user data;removing when saving
-OpenOffice.org Chart : user-defined dictionaries
-OpenOffice.org Chart : user-defined dictionaries;creating
-OpenOffice.org Chart : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Chart : user-defined dictionaries;editing
-OpenOffice.org Chart : user-defined styles
-OpenOffice.org Chart : user-defined styles;automatically replacing
-OpenOffice.org Chart : UTF-8/UCS2 support
-OpenOffice.org Chart : Validation feature in Microsoft Office
-OpenOffice.org Chart : values
-OpenOffice.org Chart : values;rounded as shown (Calc)
-OpenOffice.org Chart : variables
-OpenOffice.org Chart : variables;for paths
-OpenOffice.org Chart : variances in charts
-OpenOffice.org Chart : VBA code
-OpenOffice.org Chart : VBA code;loading/saving documents with VBA code
-OpenOffice.org Chart : version management
-OpenOffice.org Chart : version numbers of documents
-OpenOffice.org Chart : versions
-OpenOffice.org Chart : versions;comparing documents
-OpenOffice.org Chart : versions;file saving as, restriction
-OpenOffice.org Chart : versions;merging document versions
-OpenOffice.org Chart : versions;of a document
-OpenOffice.org Chart : versions;OpenOffice.org
-OpenOffice.org Chart : vertical callouts
-OpenOffice.org Chart : vertical scrollbars (Writer)
-OpenOffice.org Chart : vertical text boxes
-OpenOffice.org Chart : videos
-OpenOffice.org Chart : viewing
-OpenOffice.org Chart : viewing;databases
-OpenOffice.org Chart : viewing;file properties
-OpenOffice.org Chart : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Chart : viewing;toolbars
-OpenOffice.org Chart : views
-OpenOffice.org Chart : views;creating database views (Base)
-OpenOffice.org Chart : views;defaults
-OpenOffice.org Chart : views;full screen
-OpenOffice.org Chart : views;icons
-OpenOffice.org Chart : views;in 3D
-OpenOffice.org Chart : views;scaling
-OpenOffice.org Chart : Visual Basic for Applications
-OpenOffice.org Chart : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Chart : watermarks
-OpenOffice.org Chart : web documents
-OpenOffice.org Chart : web documents;XForms
-OpenOffice.org Chart : Web support
-OpenOffice.org Chart : WebCast export
-OpenOffice.org Chart : windows
-OpenOffice.org Chart : windows;docking
-OpenOffice.org Chart : windows;docking definition
-OpenOffice.org Chart : windows;hiding/showing/docking
-OpenOffice.org Chart : windows;new
-OpenOffice.org Chart : wizards
-OpenOffice.org Chart : wizards;agendas
-OpenOffice.org Chart : wizards;database queries
-OpenOffice.org Chart : wizards;database tables (Base)
-OpenOffice.org Chart : wizards;databases (Base)
-OpenOffice.org Chart : wizards;document converter
-OpenOffice.org Chart : wizards;Euro Converter
-OpenOffice.org Chart : wizards;faxes
-OpenOffice.org Chart : wizards;forms
-OpenOffice.org Chart : wizards;letters
-OpenOffice.org Chart : wizards;overview
-OpenOffice.org Chart : wizards;presentations
-OpenOffice.org Chart : wizards;reports
-OpenOffice.org Chart : Word documents
-OpenOffice.org Chart : Word documents;compatibility
-OpenOffice.org Chart : Word documents;saving as
-OpenOffice.org Chart : WordArt, see Fontwork
-OpenOffice.org Chart : words
-OpenOffice.org Chart : words;automatically replacing
-OpenOffice.org Chart : words;wrapping in cells
-OpenOffice.org Chart : work directory change
-OpenOffice.org Chart : Workbook feature in Microsoft Office
-OpenOffice.org Chart : Worksheet feature in Microsoft Office
-OpenOffice.org Chart : wrapping text
-OpenOffice.org Chart : wrapping text;in cells
-OpenOffice.org Chart : write protection on/off
-OpenOffice.org Chart : writing aids options
-OpenOffice.org Chart : WYSIWYG in fonts lists
-OpenOffice.org Chart : X axes
-OpenOffice.org Chart : X axes;grid formatting
-OpenOffice.org Chart : X axes;scaling
-OpenOffice.org Chart : X axes;showing
-OpenOffice.org Chart : XForms
-OpenOffice.org Chart : XML converters
-OpenOffice.org Chart : XML file formats
-OpenOffice.org Chart : XML filters
-OpenOffice.org Chart : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Chart : XML filters;settings
-OpenOffice.org Chart : XML Forms
-OpenOffice.org Chart : XSLT based filters
-OpenOffice.org Chart : XSLT based filters;settings
-OpenOffice.org Chart : XSLT filters, see also XML filters
-OpenOffice.org Chart : XY charts
-OpenOffice.org Chart : Y axes
-OpenOffice.org Chart : Y axes;formatting
-OpenOffice.org Chart : Y axes;grid formatting
-OpenOffice.org Chart : Y axes;scaling
-OpenOffice.org Chart : Y axes;showing
-OpenOffice.org Chart : years
-OpenOffice.org Chart : years;2-digit options
-OpenOffice.org Chart : Z axes
-OpenOffice.org Chart : Z axes;grid formatting
-OpenOffice.org Chart : Z axes;showing
-OpenOffice.org Chart : zero values
-OpenOffice.org Chart : zero values;displaying (Calc)
-OpenOffice.org Chart : zooming
-OpenOffice.org Chart : zooming;page views
-OpenOffice.org Chart : zooming;pictures
-OpenOffice.org Chart : zooming;status bar
-OpenOffice.org Base : 1/2 replacement
-OpenOffice.org Base : 3D text creation
-OpenOffice.org Base : 3D view
-OpenOffice.org Base : abbreviation replacement
-OpenOffice.org Base : absolute hyperlinks
-OpenOffice.org Base : absolute saving of URLs
-OpenOffice.org Base : accents
-OpenOffice.org Base : Access databases (base)
-OpenOffice.org Base : access rights for database tables (Base)
-OpenOffice.org Base : accessibility
-OpenOffice.org Base : accessibility;general shortcuts
-OpenOffice.org Base : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Base : accessibility;OpenOffice.org features
-OpenOffice.org Base : accessibility;options
-OpenOffice.org Base : activating
-OpenOffice.org Base : activating;context menus
-OpenOffice.org Base : activating;Error Report Tool
-OpenOffice.org Base : activating;extended help tips
-OpenOffice.org Base : activating;plug-ins
-OpenOffice.org Base : ActiveX control
-OpenOffice.org Base : Adabas D databases (base)
-OpenOffice.org Base : add-ons, see UNO components
-OpenOffice.org Base : adding
-OpenOffice.org Base : adding;automatic captions (Writer)
-OpenOffice.org Base : adding;backgrounds
-OpenOffice.org Base : adding;buttons in toolbars
-OpenOffice.org Base : adding;conditions for XForm items
-OpenOffice.org Base : adding;draw objects
-OpenOffice.org Base : adding;Fontwork objects
-OpenOffice.org Base : adding;items in Data Navigator
-OpenOffice.org Base : adding;namespaces in XForms
-OpenOffice.org Base : adding;paragraph borders
-OpenOffice.org Base : adding;pictures from Gallery
-OpenOffice.org Base : adding;pictures in Gallery
-OpenOffice.org Base : adding;plug-ins
-OpenOffice.org Base : adding;push buttons
-OpenOffice.org Base : adding;table borders
-OpenOffice.org Base : adding;textures on chart bars
-OpenOffice.org Base : additional selection mode
-OpenOffice.org Base : address books
-OpenOffice.org Base : address books;LDAP server (Base)
-OpenOffice.org Base : address books;registering
-OpenOffice.org Base : address labels from databases
-OpenOffice.org Base : ADO databases (Base)
-OpenOffice.org Base : Agenda Wizard
-OpenOffice.org Base : aging filter
-OpenOffice.org Base : aligning
-OpenOffice.org Base : aligning;cells
-OpenOffice.org Base : aligning;objects
-OpenOffice.org Base : aligning;paragraphs
-OpenOffice.org Base : aligning;tables in text
-OpenOffice.org Base : aligning;text objects
-OpenOffice.org Base : alternative fonts
-OpenOffice.org Base : ampersand symbol, see also operators
-OpenOffice.org Base : anchors
-OpenOffice.org Base : anchors;changing
-OpenOffice.org Base : anchors;displaying (Calc)
-OpenOffice.org Base : anchors;types/positions for draw objects
-OpenOffice.org Base : animations
-OpenOffice.org Base : animations;accessibility options
-OpenOffice.org Base : appearance options
-OpenOffice.org Base : applet insertion
-OpenOffice.org Base : applying
-OpenOffice.org Base : applying;languages, to selected text
-OpenOffice.org Base : Arabic
-OpenOffice.org Base : Arabic;entering text
-OpenOffice.org Base : Arabic;language settings
-OpenOffice.org Base : areas
-OpenOffice.org Base : areas;bitmap patterns
-OpenOffice.org Base : areas;hatched/dotted
-OpenOffice.org Base : areas;shadows
-OpenOffice.org Base : areas;slanting
-OpenOffice.org Base : areas;styles
-OpenOffice.org Base : areas;transparency
-OpenOffice.org Base : arguments in command line
-OpenOffice.org Base : arranging
-OpenOffice.org Base : arranging;objects
-OpenOffice.org Base : arrows
-OpenOffice.org Base : arrows;defining arrow heads
-OpenOffice.org Base : arrows;defining arrow lines
-OpenOffice.org Base : arrows;drawing in text
-OpenOffice.org Base : ASCII
-OpenOffice.org Base : ASCII;definition
-OpenOffice.org Base : Asian languages
-OpenOffice.org Base : Asian languages;enabling
-OpenOffice.org Base : Asian Phonetic Guide
-OpenOffice.org Base : Asian typography
-OpenOffice.org Base : assigning scripts
-OpenOffice.org Base : assistive technology in OpenOffice.org
-OpenOffice.org Base : attaching toolbars
-OpenOffice.org Base : attachments in e-mails
-OpenOffice.org Base : audio
-OpenOffice.org Base : audio;inserting
-OpenOffice.org Base : audio;UNIX
-OpenOffice.org Base : auto reloading HTML documents
-OpenOffice.org Base : AutoAbstract function for sending text to presentations
-OpenOffice.org Base : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Base : AutoComplete function in text and list boxes
-OpenOffice.org Base : AutoCorrect function
-OpenOffice.org Base : AutoCorrect function;context menu
-OpenOffice.org Base : AutoCorrect function;options
-OpenOffice.org Base : AutoCorrect function;pictures and frames
-OpenOffice.org Base : AutoCorrect function;quotes
-OpenOffice.org Base : AutoCorrect function;replacement table
-OpenOffice.org Base : AutoCorrect function;smart tags
-OpenOffice.org Base : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Base : AutoCorrect function;URL recognition
-OpenOffice.org Base : AutoFormat function
-OpenOffice.org Base : AutoFormat function;switching on and off
-OpenOffice.org Base : automatic captions (Writer)
-OpenOffice.org Base : automatic control focus
-OpenOffice.org Base : automatic hyperlink formatting
-OpenOffice.org Base : automatic line breaks
-OpenOffice.org Base : automatic lines/borders in text
-OpenOffice.org Base : automatic saving
-OpenOffice.org Base : AutoPilots, see wizards
-OpenOffice.org Base : AutoShapes feature in Microsoft Office
-OpenOffice.org Base : axes in charts
-OpenOffice.org Base : backgrounds
-OpenOffice.org Base : backgrounds;defining colors/pictures
-OpenOffice.org Base : backgrounds;frames/sections/indexes
-OpenOffice.org Base : backgrounds;inserting from Gallery
-OpenOffice.org Base : backgrounds;printing
-OpenOffice.org Base : backing window
-OpenOffice.org Base : backups
-OpenOffice.org Base : backups;automatic
-OpenOffice.org Base : backups;documents
-OpenOffice.org Base : Basic
-OpenOffice.org Base : Basic;fonts for source display
-OpenOffice.org Base : Basic;programming
-OpenOffice.org Base : Basic;recording macros
-OpenOffice.org Base : Basic;scripting
-OpenOffice.org Base : basic fonts
-OpenOffice.org Base : BeanShell scripting
-OpenOffice.org Base : Bézier curves
-OpenOffice.org Base : Bézier curves;control points in presentations
-OpenOffice.org Base : bi-directional writing
-OpenOffice.org Base : binding space
-OpenOffice.org Base : bitmaps
-OpenOffice.org Base : bitmaps;inserting and editing
-OpenOffice.org Base : bitmaps;off for faster printing
-OpenOffice.org Base : bitmaps;patterns
-OpenOffice.org Base : black and white printing
-OpenOffice.org Base : black printing in Calc
-OpenOffice.org Base : block selection mode
-OpenOffice.org Base : bold
-OpenOffice.org Base : bold;AutoFormat function
-OpenOffice.org Base : bold;text
-OpenOffice.org Base : bookmarks
-OpenOffice.org Base : bookmarks;Help
-OpenOffice.org Base : borders
-OpenOffice.org Base : borders;arranging
-OpenOffice.org Base : borders;cells on screen (Calc)
-OpenOffice.org Base : borders;for paragraphs
-OpenOffice.org Base : borders;for tables
-OpenOffice.org Base : borders;shadows
-OpenOffice.org Base : borders;table boundaries (Writer)
-OpenOffice.org Base : borders, see also frames
-OpenOffice.org Base : bound fields
-OpenOffice.org Base : bound fields;controls
-OpenOffice.org Base : boundaries of tables (Writer)
-OpenOffice.org Base : break display (Writer)
-OpenOffice.org Base : brochures
-OpenOffice.org Base : brochures;printing several
-OpenOffice.org Base : build numbers of OpenOffice.org
-OpenOffice.org Base : bullet lists
-OpenOffice.org Base : bullet lists;formatting options
-OpenOffice.org Base : bullets
-OpenOffice.org Base : bullets;paragraphs
-OpenOffice.org Base : bullets;replacing
-OpenOffice.org Base : bullets;turning off
-OpenOffice.org Base : business cards
-OpenOffice.org Base : business cards;creating and synchronizing
-OpenOffice.org Base : business cards;using templates
-OpenOffice.org Base : button bars, see toolbars
-OpenOffice.org Base : buttons
-OpenOffice.org Base : buttons;adding push buttons
-OpenOffice.org Base : buttons;big/small
-OpenOffice.org Base : buttons;editing hyperlink buttons
-OpenOffice.org Base : buttons;form functions
-OpenOffice.org Base : buttons;toolbars
-OpenOffice.org Base : cache for graphics
-OpenOffice.org Base : calculating
-OpenOffice.org Base : calculating;iterative references (Calc)
-OpenOffice.org Base : callouts
-OpenOffice.org Base : callouts;drawings
-OpenOffice.org Base : capital letters
-OpenOffice.org Base : capital letters;AutoCorrect function
-OpenOffice.org Base : capital letters;font effects
-OpenOffice.org Base : captions
-OpenOffice.org Base : captions;automatic captions (Writer)
-OpenOffice.org Base : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Base : captions, see also labels/callouts
-OpenOffice.org Base : cascading update (Base)
-OpenOffice.org Base : case sensitivity
-OpenOffice.org Base : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Base : case sensitivity;searching
-OpenOffice.org Base : cells
-OpenOffice.org Base : cells;aligning
-OpenOffice.org Base : cells;backgrounds
-OpenOffice.org Base : cells;coloring (Calc)
-OpenOffice.org Base : cells;cursor positions after input (Calc)
-OpenOffice.org Base : cells;formatting without effect (Calc)
-OpenOffice.org Base : cells;line breaks
-OpenOffice.org Base : cells;linked to controls
-OpenOffice.org Base : cells;number formats
-OpenOffice.org Base : cells;number of
-OpenOffice.org Base : cells;pasting
-OpenOffice.org Base : cells;resetting formats
-OpenOffice.org Base : cells;showing grid lines (Calc)
-OpenOffice.org Base : centered text
-OpenOffice.org Base : centimeters
-OpenOffice.org Base : certificates
-OpenOffice.org Base : Change Case feature in Microsoft Office
-OpenOffice.org Base : changes
-OpenOffice.org Base : changes;accepting or rejecting
-OpenOffice.org Base : changes;comparing to original
-OpenOffice.org Base : changes;protecting
-OpenOffice.org Base : changes;recording
-OpenOffice.org Base : changes;review function
-OpenOffice.org Base : changes;showing
-OpenOffice.org Base : changing
-OpenOffice.org Base : changing;data binding of XForms
-OpenOffice.org Base : changing;default templates
-OpenOffice.org Base : changing;document titles
-OpenOffice.org Base : changing;file associations in Setup program
-OpenOffice.org Base : changing;hyperlink text/formats/URLs
-OpenOffice.org Base : changing;icon sizes
-OpenOffice.org Base : changing;keyboard
-OpenOffice.org Base : changing;links
-OpenOffice.org Base : changing;menus
-OpenOffice.org Base : changing;object sizes
-OpenOffice.org Base : changing;toolbars
-OpenOffice.org Base : changing;work directory
-OpenOffice.org Base : changing, see also editing and replacing
-OpenOffice.org Base : character styles
-OpenOffice.org Base : character styles;language selection
-OpenOffice.org Base : characters
-OpenOffice.org Base : characters;alternative fonts
-OpenOffice.org Base : characters;Asian layout
-OpenOffice.org Base : characters;bold
-OpenOffice.org Base : characters;coloring
-OpenOffice.org Base : characters;contours
-OpenOffice.org Base : characters;displaying only on screen (Writer)
-OpenOffice.org Base : characters;enabling CTL and Asian characters
-OpenOffice.org Base : characters;font effects
-OpenOffice.org Base : characters;fonts and formats
-OpenOffice.org Base : characters;hyperlinks
-OpenOffice.org Base : characters;italics
-OpenOffice.org Base : characters;language selection
-OpenOffice.org Base : characters;shadowed
-OpenOffice.org Base : characters;spacing
-OpenOffice.org Base : characters;special
-OpenOffice.org Base : characters;underlining
-OpenOffice.org Base : charcoal sketches filter
-OpenOffice.org Base : charts
-OpenOffice.org Base : charts;arranging within stacks
-OpenOffice.org Base : charts;bars with textures
-OpenOffice.org Base : charts;colors
-OpenOffice.org Base : charts;copying with link to source cell range
-OpenOffice.org Base : charts;displaying (Calc)
-OpenOffice.org Base : charts;editing axes
-OpenOffice.org Base : charts;editing data
-OpenOffice.org Base : charts;editing legends
-OpenOffice.org Base : charts;editing titles
-OpenOffice.org Base : charts;inserting
-OpenOffice.org Base : charts;updating automatically (Writer)
-OpenOffice.org Base : check box creation
-OpenOffice.org Base : Chinese writing systems
-OpenOffice.org Base : choosing printers
-OpenOffice.org Base : circle drawings
-OpenOffice.org Base : Client Side ImageMap
-OpenOffice.org Base : clipboard
-OpenOffice.org Base : clipboard;cutting
-OpenOffice.org Base : clipboard;pasting
-OpenOffice.org Base : clipboard;pasting formatted/unformatted text
-OpenOffice.org Base : clipboard;selection clipboard
-OpenOffice.org Base : clipboard;Unix
-OpenOffice.org Base : closing
-OpenOffice.org Base : closing;documents
-OpenOffice.org Base : closing;toolbars
-OpenOffice.org Base : color bar
-OpenOffice.org Base : colors
-OpenOffice.org Base : colors;adding
-OpenOffice.org Base : colors;appearance
-OpenOffice.org Base : colors;backgrounds
-OpenOffice.org Base : colors;charts
-OpenOffice.org Base : colors;fill format
-OpenOffice.org Base : colors;fonts
-OpenOffice.org Base : colors;grid lines and cells (Calc)
-OpenOffice.org Base : colors;models
-OpenOffice.org Base : colors;not printing
-OpenOffice.org Base : colors;printing in grayscale
-OpenOffice.org Base : colors;restriction (Calc)
-OpenOffice.org Base : colors;selection
-OpenOffice.org Base : column headers
-OpenOffice.org Base : column headers;displaying (Calc)
-OpenOffice.org Base : column headers;highlighting (Calc)
-OpenOffice.org Base : columns
-OpenOffice.org Base : columns;setting with the mouse
-OpenOffice.org Base : combo box creation
-OpenOffice.org Base : command button creation
-OpenOffice.org Base : command buttons, see push buttons
-OpenOffice.org Base : command line parameters
-OpenOffice.org Base : commands
-OpenOffice.org Base : commands;not visible
-OpenOffice.org Base : commands;SQL
-OpenOffice.org Base : comments
-OpenOffice.org Base : comments;on changes
-OpenOffice.org Base : comments feature in Microsoft Office
-OpenOffice.org Base : common terms
-OpenOffice.org Base : common terms;Chinese dictionary
-OpenOffice.org Base : common terms;glossaries
-OpenOffice.org Base : common terms;Internet glossary
-OpenOffice.org Base : Compare and Merge feature in Microsoft Office
-OpenOffice.org Base : comparisons
-OpenOffice.org Base : comparisons;document versions
-OpenOffice.org Base : comparisons;operators in default filter dialog
-OpenOffice.org Base : compatibility settings for MS Word import
-OpenOffice.org Base : complete screen view
-OpenOffice.org Base : complex text layout
-OpenOffice.org Base : complex text layout;definition
-OpenOffice.org Base : complex text layout;enabling
-OpenOffice.org Base : compose key to insert special characters
-OpenOffice.org Base : concatenation, see ampersand symbol
-OpenOffice.org Base : conditional separators
-OpenOffice.org Base : conditions
-OpenOffice.org Base : conditions;in number formats
-OpenOffice.org Base : conditions;items in Data Navigator
-OpenOffice.org Base : Configuration Manager
-OpenOffice.org Base : configuring
-OpenOffice.org Base : configuring;fax icon
-OpenOffice.org Base : configuring;OpenOffice.org
-OpenOffice.org Base : configuring;toolbars
-OpenOffice.org Base : connections to data sources (Base)
-OpenOffice.org Base : contents protection
-OpenOffice.org Base : context menus
-OpenOffice.org Base : contours of text
-OpenOffice.org Base : control point display in presentations
-OpenOffice.org Base : controls
-OpenOffice.org Base : controls;activating in forms
-OpenOffice.org Base : controls;adding to documents
-OpenOffice.org Base : controls;arranging in forms
-OpenOffice.org Base : controls;arranging within stacks
-OpenOffice.org Base : controls;assigning data sources
-OpenOffice.org Base : controls;bound fields/list contents/linked cells
-OpenOffice.org Base : controls;events
-OpenOffice.org Base : controls;focus
-OpenOffice.org Base : controls;formatted fields
-OpenOffice.org Base : controls;grouping
-OpenOffice.org Base : controls;hidden
-OpenOffice.org Base : controls;inserting
-OpenOffice.org Base : controls;multi-line titles
-OpenOffice.org Base : controls;positions and sizes
-OpenOffice.org Base : controls;printing
-OpenOffice.org Base : controls;properties of form controls
-OpenOffice.org Base : controls;properties of table controls
-OpenOffice.org Base : controls;reference by SQL
-OpenOffice.org Base : controls;rich text control
-OpenOffice.org Base : controls;select mode
-OpenOffice.org Base : controls;showing (Writer)
-OpenOffice.org Base : converters
-OpenOffice.org Base : converters;Euro converter
-OpenOffice.org Base : converters;PostScript, UNIX
-OpenOffice.org Base : converters;XML
-OpenOffice.org Base : converting
-OpenOffice.org Base : converting;Hangul/Hanja
-OpenOffice.org Base : converting;metrics
-OpenOffice.org Base : converting;Microsoft documents
-OpenOffice.org Base : converting;OpenOffice.org documents
-OpenOffice.org Base : converting;Pocket PC formats
-OpenOffice.org Base : copies
-OpenOffice.org Base : copies;printing
-OpenOffice.org Base : copying
-OpenOffice.org Base : copying;by drag and drop
-OpenOffice.org Base : copying;data from text documents
-OpenOffice.org Base : copying;datasource records in spreadsheets
-OpenOffice.org Base : copying;draw objects
-OpenOffice.org Base : copying;draw objects between documents
-OpenOffice.org Base : copying;formatting
-OpenOffice.org Base : copying;from data source view
-OpenOffice.org Base : copying;from Gallery
-OpenOffice.org Base : copying;in Unix
-OpenOffice.org Base : copying;pictures, between documents
-OpenOffice.org Base : copying;sheet areas, to text documents
-OpenOffice.org Base : copying;to Gallery
-OpenOffice.org Base : copyright for OpenOffice.org
-OpenOffice.org Base : corner roundings
-OpenOffice.org Base : crash reports
-OpenOffice.org Base : criteria of query design (Base)
-OpenOffice.org Base : cropping pictures
-OpenOffice.org Base : CTL
-OpenOffice.org Base : CTL;complex text layout languages
-OpenOffice.org Base : CTL;definition
-OpenOffice.org Base : CTL;options
-OpenOffice.org Base : currencies
-OpenOffice.org Base : currencies;converters
-OpenOffice.org Base : currencies;formats and format codes
-OpenOffice.org Base : currency field creation
-OpenOffice.org Base : currency formats
-OpenOffice.org Base : cursor
-OpenOffice.org Base : cursor;allowing in protected areas (Writer)
-OpenOffice.org Base : cursor;in read-only text
-OpenOffice.org Base : cursor;quickly moving to an object
-OpenOffice.org Base : curves
-OpenOffice.org Base : curves;editing points
-OpenOffice.org Base : custom dictionaries
-OpenOffice.org Base : custom dictionaries;editing
-OpenOffice.org Base : custom hyphens (Writer)
-OpenOffice.org Base : custom quotes
-OpenOffice.org Base : custom templates
-OpenOffice.org Base : customizing
-OpenOffice.org Base : customizing;events
-OpenOffice.org Base : customizing;keyboard
-OpenOffice.org Base : customizing;menus
-OpenOffice.org Base : customizing;OpenOffice.org
-OpenOffice.org Base : customizing;round corners
-OpenOffice.org Base : customizing;toolbars
-OpenOffice.org Base : cutting
-OpenOffice.org Base : dashes
-OpenOffice.org Base : data
-OpenOffice.org Base : data;filtering in forms
-OpenOffice.org Base : data;forms and subforms
-OpenOffice.org Base : data;read-only
-OpenOffice.org Base : data;sorting in forms
-OpenOffice.org Base : data;user data
-OpenOffice.org Base : data binding change in XForms
-OpenOffice.org Base : Data Navigator display options
-OpenOffice.org Base : data source browser
-OpenOffice.org Base : data source explorer
-OpenOffice.org Base : data source view
-OpenOffice.org Base : data source view;drag and drop
-OpenOffice.org Base : data source view;overview
-OpenOffice.org Base : data source view;showing
-OpenOffice.org Base : data sources
-OpenOffice.org Base : data sources;as tables
-OpenOffice.org Base : data sources;connection settings (Base)
-OpenOffice.org Base : data sources;copying records to spreadsheets
-OpenOffice.org Base : data sources;displaying current
-OpenOffice.org Base : data sources;LDAP server (Base)
-OpenOffice.org Base : data sources;OpenOffice.org Base
-OpenOffice.org Base : data sources;registering address books
-OpenOffice.org Base : data sources;reports
-OpenOffice.org Base : data sources;viewing
-OpenOffice.org Base : data structure of XForms
-OpenOffice.org Base : database contents
-OpenOffice.org Base : database contents;inserting as tables
-OpenOffice.org Base : database contents;inserting as text
-OpenOffice.org Base : database reports
-OpenOffice.org Base : Database Wizard (Base)
-OpenOffice.org Base : databases
-OpenOffice.org Base : databases;administration through SQL (Base)
-OpenOffice.org Base : databases;ADO (Base)
-OpenOffice.org Base : databases;connecting (Base)
-OpenOffice.org Base : databases;creating
-OpenOffice.org Base : databases;creating labels
-OpenOffice.org Base : databases;creating queries
-OpenOffice.org Base : databases;creating reports
-OpenOffice.org Base : databases;creating tables
-OpenOffice.org Base : databases;dBASE (Base)
-OpenOffice.org Base : databases;deleting (Base)
-OpenOffice.org Base : databases;drag and drop (Base)
-OpenOffice.org Base : databases;editing tables
-OpenOffice.org Base : databases;form filters
-OpenOffice.org Base : databases;formats (Base)
-OpenOffice.org Base : databases;importing/exporting
-OpenOffice.org Base : databases;JDBC (Base)
-OpenOffice.org Base : databases;main page (Base)
-OpenOffice.org Base : databases;MySQL (Base)
-OpenOffice.org Base : databases;ODBC (Base)
-OpenOffice.org Base : databases;overview
-OpenOffice.org Base : databases;registering (Base)
-OpenOffice.org Base : databases;searching records
-OpenOffice.org Base : databases;shortcut keys
-OpenOffice.org Base : databases;sorting
-OpenOffice.org Base : databases;standard filters
-OpenOffice.org Base : databases;text formats
-OpenOffice.org Base : databases;viewing
-OpenOffice.org Base : date fields
-OpenOffice.org Base : date fields;creating
-OpenOffice.org Base : date fields;properties
-OpenOffice.org Base : date formats
-OpenOffice.org Base : dates
-OpenOffice.org Base : dates;default (Calc)
-OpenOffice.org Base : dates;printing in presentations
-OpenOffice.org Base : dates;start 1900/01/01 (Calc)
-OpenOffice.org Base : dates;start 1904/01/01 (Calc)
-OpenOffice.org Base : dBASE
-OpenOffice.org Base : dBASE;database settings (Base)
-OpenOffice.org Base : DDE
-OpenOffice.org Base : DDE;definition
-OpenOffice.org Base : deactivating
-OpenOffice.org Base : deactivating;plug-ins
-OpenOffice.org Base : decimal places displayed (Calc)
-OpenOffice.org Base : decimal separator key
-OpenOffice.org Base : decimal tab stops
-OpenOffice.org Base : default directories
-OpenOffice.org Base : default file formats
-OpenOffice.org Base : default filters
-OpenOffice.org Base : default filters;comparison operators
-OpenOffice.org Base : default filters;databases
-OpenOffice.org Base : default printer
-OpenOffice.org Base : default printer;setting up
-OpenOffice.org Base : default printer;UNIX
-OpenOffice.org Base : default templates
-OpenOffice.org Base : default templates;changing
-OpenOffice.org Base : default templates;organizing
-OpenOffice.org Base : defaults
-OpenOffice.org Base : defaults;documents
-OpenOffice.org Base : defaults;file formats
-OpenOffice.org Base : defaults;fonts
-OpenOffice.org Base : defaults;grids (Writer/Calc)
-OpenOffice.org Base : defaults;languages
-OpenOffice.org Base : defaults;number formats
-OpenOffice.org Base : defaults;of saving
-OpenOffice.org Base : defaults;program configuration
-OpenOffice.org Base : defaults;tab stops in text
-OpenOffice.org Base : defaults;views
-OpenOffice.org Base : defining
-OpenOffice.org Base : defining;arrowheads and other line ends
-OpenOffice.org Base : defining;colors
-OpenOffice.org Base : defining;line styles
-OpenOffice.org Base : defining;paragraph borders
-OpenOffice.org Base : defining;queries (Base)
-OpenOffice.org Base : defining;table borders
-OpenOffice.org Base : deleting
-OpenOffice.org Base : deleting;all direct formatting
-OpenOffice.org Base : deleting;databases (Base)
-OpenOffice.org Base : deleting;hyperlinks
-OpenOffice.org Base : deleting;lines in text
-OpenOffice.org Base : deleting;models/instances
-OpenOffice.org Base : deleting;namespaces in XForms
-OpenOffice.org Base : deleting;tab stops
-OpenOffice.org Base : deleting;templates
-OpenOffice.org Base : deleting;XML filters
-OpenOffice.org Base : depth stagger
-OpenOffice.org Base : descriptions for objects
-OpenOffice.org Base : design mode after saving
-OpenOffice.org Base : design view
-OpenOffice.org Base : design view;creating forms
-OpenOffice.org Base : design view;queries/views (Base)
-OpenOffice.org Base : designing
-OpenOffice.org Base : designing;database tables
-OpenOffice.org Base : designing;fonts
-OpenOffice.org Base : designing;queries (Base)
-OpenOffice.org Base : detaching toolbars
-OpenOffice.org Base : dictionaries
-OpenOffice.org Base : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Base : dictionaries;creating
-OpenOffice.org Base : dictionaries;editing user-defined
-OpenOffice.org Base : dictionaries;spellcheck
-OpenOffice.org Base : dictionaries, see also languages
-OpenOffice.org Base : digital signatures
-OpenOffice.org Base : direct formatting
-OpenOffice.org Base : direct formatting;undoing all
-OpenOffice.org Base : directories
-OpenOffice.org Base : directories;creating new
-OpenOffice.org Base : directories;directory structure
-OpenOffice.org Base : disabled persons
-OpenOffice.org Base : displaying
-OpenOffice.org Base : displaying;non-printing characters (Writer)
-OpenOffice.org Base : displaying;notes (Calc)
-OpenOffice.org Base : displaying;notes in text documents
-OpenOffice.org Base : displaying;pictures and objects (Writer)
-OpenOffice.org Base : displaying;tables (Writer)
-OpenOffice.org Base : displaying;zero values (Calc)
-OpenOffice.org Base : distances
-OpenOffice.org Base : distinct values in SQL queries
-OpenOffice.org Base : distorting in drawings
-OpenOffice.org Base : distributing XML filters
-OpenOffice.org Base : dithering
-OpenOffice.org Base : docking
-OpenOffice.org Base : docking;definition
-OpenOffice.org Base : docking;toolbars
-OpenOffice.org Base : docking;windows
-OpenOffice.org Base : Document Converter Wizard
-OpenOffice.org Base : Document Map feature in Microsoft Office
-OpenOffice.org Base : Document Map, see Navigator
-OpenOffice.org Base : document types in OpenOffice.org
-OpenOffice.org Base : documents
-OpenOffice.org Base : documents;changing titles
-OpenOffice.org Base : documents;closing
-OpenOffice.org Base : documents;comparing
-OpenOffice.org Base : documents;contents as lists
-OpenOffice.org Base : documents;editing time
-OpenOffice.org Base : documents;exporting
-OpenOffice.org Base : documents;importing
-OpenOffice.org Base : documents;languages
-OpenOffice.org Base : documents;measurement units in
-OpenOffice.org Base : documents;merging
-OpenOffice.org Base : documents;number of pages/tables/sheets
-OpenOffice.org Base : documents;opening
-OpenOffice.org Base : documents;opening in design mode
-OpenOffice.org Base : documents;opening with templates
-OpenOffice.org Base : documents;organizing
-OpenOffice.org Base : documents;printing
-OpenOffice.org Base : documents;read-only
-OpenOffice.org Base : documents;reloading
-OpenOffice.org Base : documents;saving
-OpenOffice.org Base : documents;saving automatically
-OpenOffice.org Base : documents;saving in other formats
-OpenOffice.org Base : documents;sending as e-mail
-OpenOffice.org Base : documents;styles changed
-OpenOffice.org Base : documents;version management
-OpenOffice.org Base : documents;version numbers
-OpenOffice.org Base : dotted areas
-OpenOffice.org Base : double-line spacing in paragraphs
-OpenOffice.org Base : double-line writing in Asian layout
-OpenOffice.org Base : drag and drop
-OpenOffice.org Base : drag and drop;copying and pasting text
-OpenOffice.org Base : drag and drop;data source view
-OpenOffice.org Base : drag and drop;from Gallery to draw objects
-OpenOffice.org Base : drag and drop;overview
-OpenOffice.org Base : drag and drop;pictures
-OpenOffice.org Base : drag and drop;to Gallery
-OpenOffice.org Base : draw objects
-OpenOffice.org Base : draw objects;adding/editing/copying
-OpenOffice.org Base : draw objects;anchoring
-OpenOffice.org Base : draw objects;arranging within stacks
-OpenOffice.org Base : draw objects;copying
-OpenOffice.org Base : draw objects;copying between documents
-OpenOffice.org Base : draw objects;displaying (Calc)
-OpenOffice.org Base : draw objects;dropping Gallery pictures
-OpenOffice.org Base : draw objects;flipping
-OpenOffice.org Base : draw objects;legends
-OpenOffice.org Base : draw objects;positioning and resizing
-OpenOffice.org Base : draw objects;protecting
-OpenOffice.org Base : draw objects;slanting
-OpenOffice.org Base : draw objects;text in
-OpenOffice.org Base : Drawing bar
-OpenOffice.org Base : drawing lines in text
-OpenOffice.org Base : drawings
-OpenOffice.org Base : drawings;creating/opening
-OpenOffice.org Base : drawings;languages
-OpenOffice.org Base : drawings;printing
-OpenOffice.org Base : drawings;printing defaults
-OpenOffice.org Base : drawings;printing in text documents
-OpenOffice.org Base : drawings;saving
-OpenOffice.org Base : drawings;saving automatically
-OpenOffice.org Base : drawings;saving in other formats
-OpenOffice.org Base : drawings;sending as e-mail
-OpenOffice.org Base : drawings;showing (Writer)
-OpenOffice.org Base : drop-down lists in form functions
-OpenOffice.org Base : e-mail attachments
-OpenOffice.org Base : Edit File icon
-OpenOffice.org Base : edit mode
-OpenOffice.org Base : edit mode;after opening
-OpenOffice.org Base : edit mode;through Enter key (Calc)
-OpenOffice.org Base : Edit Points bar
-OpenOffice.org Base : editing
-OpenOffice.org Base : editing;chart axes
-OpenOffice.org Base : editing;chart data
-OpenOffice.org Base : editing;chart legends
-OpenOffice.org Base : editing;chart titles
-OpenOffice.org Base : editing;data binding of XForms
-OpenOffice.org Base : editing;database tables and queries
-OpenOffice.org Base : editing;draw objects
-OpenOffice.org Base : editing;Fontwork objects
-OpenOffice.org Base : editing;hyperlinks
-OpenOffice.org Base : editing;items in Data Navigator
-OpenOffice.org Base : editing;menus
-OpenOffice.org Base : editing;namespaces in XForms
-OpenOffice.org Base : editing;notes
-OpenOffice.org Base : editing;objects
-OpenOffice.org Base : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Base : editing;pictures
-OpenOffice.org Base : editing;reports
-OpenOffice.org Base : editing;shortcut keys
-OpenOffice.org Base : editing;tab stops
-OpenOffice.org Base : editing;templates
-OpenOffice.org Base : editing;toolbars
-OpenOffice.org Base : editing;undoing
-OpenOffice.org Base : editing;XForms
-OpenOffice.org Base : editing time of documents
-OpenOffice.org Base : editors
-OpenOffice.org Base : editors;formula editor
-OpenOffice.org Base : editors;ImageMap editor
-OpenOffice.org Base : effects
-OpenOffice.org Base : effects;font positions
-OpenOffice.org Base : effects;fonts
-OpenOffice.org Base : effects;Fontwork icons
-OpenOffice.org Base : empty documents
-OpenOffice.org Base : empty paragraph removal
-OpenOffice.org Base : encryption of contents
-OpenOffice.org Base : entering groups
-OpenOffice.org Base : entering text from right to left
-OpenOffice.org Base : equal sign, see also operators
-OpenOffice.org Base : equations in formula editor
-OpenOffice.org Base : Error Report Tool
-OpenOffice.org Base : Euro
-OpenOffice.org Base : Euro;currency formats
-OpenOffice.org Base : Euro;Euro Converter Wizard
-OpenOffice.org Base : even/odd pages
-OpenOffice.org Base : even/odd pages;printing
-OpenOffice.org Base : events
-OpenOffice.org Base : events;controls
-OpenOffice.org Base : events;customizing
-OpenOffice.org Base : events;in forms
-OpenOffice.org Base : Excel
-OpenOffice.org Base : Excel;saving as
-OpenOffice.org Base : Excel;search criteria
-OpenOffice.org Base : exceptions
-OpenOffice.org Base : exceptions;user-defined dictionaries
-OpenOffice.org Base : exchanging, see also replacing
-OpenOffice.org Base : executing
-OpenOffice.org Base : executing;SQL commands
-OpenOffice.org Base : exiting
-OpenOffice.org Base : exiting;groups
-OpenOffice.org Base : exiting;OpenOffice.org
-OpenOffice.org Base : expanding formatting (Calc)
-OpenOffice.org Base : explorer of data sources
-OpenOffice.org Base : export filters
-OpenOffice.org Base : exporting
-OpenOffice.org Base : exporting;bitmaps
-OpenOffice.org Base : exporting;databases
-OpenOffice.org Base : exporting;HTML and text documents
-OpenOffice.org Base : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Base : exporting;spreadsheets to text format
-OpenOffice.org Base : exporting;templates
-OpenOffice.org Base : exporting;to foreign formats
-OpenOffice.org Base : exporting;to HTML
-OpenOffice.org Base : exporting;to Microsoft Office formats
-OpenOffice.org Base : exporting;to PDF
-OpenOffice.org Base : exporting;to PostScript format
-OpenOffice.org Base : exporting;to XML
-OpenOffice.org Base : exporting;XML files
-OpenOffice.org Base : extended tips in Help
-OpenOffice.org Base : extension mode in text
-OpenOffice.org Base : extensions
-OpenOffice.org Base : extensions;Extension Manager
-OpenOffice.org Base : extensions;file formats
-OpenOffice.org Base : external keys (Base)
-OpenOffice.org Base : faster printing
-OpenOffice.org Base : faxes
-OpenOffice.org Base : faxes;configuring OpenOffice.org
-OpenOffice.org Base : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Base : faxes;selecting a fax machine
-OpenOffice.org Base : faxes;sending
-OpenOffice.org Base : faxes;wizards
-OpenOffice.org Base : fields
-OpenOffice.org Base : fields;database tables
-OpenOffice.org Base : fields;displaying field codes (Writer)
-OpenOffice.org Base : fields;formatted fields
-OpenOffice.org Base : fields;updating automatically (Writer)
-OpenOffice.org Base : file associations for Microsoft Office
-OpenOffice.org Base : file filters
-OpenOffice.org Base : file filters;mobile devices
-OpenOffice.org Base : file filters;XML
-OpenOffice.org Base : file formats
-OpenOffice.org Base : file formats;changing defaults
-OpenOffice.org Base : file formats;OpenDocument/XML
-OpenOffice.org Base : file formats;saving always in other formats
-OpenOffice.org Base : file selection button
-OpenOffice.org Base : file sharing options for current document
-OpenOffice.org Base : files
-OpenOffice.org Base : files;filters and formats
-OpenOffice.org Base : files;importing
-OpenOffice.org Base : files;opening
-OpenOffice.org Base : files;opening with placeholders
-OpenOffice.org Base : files;properties
-OpenOffice.org Base : files;saving
-OpenOffice.org Base : files;saving automatically
-OpenOffice.org Base : files;saving in other formats
-OpenOffice.org Base : files;sending as e-mail
-OpenOffice.org Base : files;version numbers
-OpenOffice.org Base : files and folders in OpenOffice.org
-OpenOffice.org Base : fill characters with tabulators
-OpenOffice.org Base : fill colors for areas
-OpenOffice.org Base : fill patterns for areas
-OpenOffice.org Base : filter conditions
-OpenOffice.org Base : filter conditions;connecting
-OpenOffice.org Base : filter conditions;in queries (Base)
-OpenOffice.org Base : filtering
-OpenOffice.org Base : filtering;data in databases
-OpenOffice.org Base : filtering;data in forms
-OpenOffice.org Base : filters
-OpenOffice.org Base : filters;comparison operators
-OpenOffice.org Base : filters;for import and export
-OpenOffice.org Base : filters;Navigator
-OpenOffice.org Base : filters;pictures
-OpenOffice.org Base : filters;XML filter settings
-OpenOffice.org Base : Find tab in Help
-OpenOffice.org Base : finding
-OpenOffice.org Base : finding;in all sheets
-OpenOffice.org Base : finding;records in form documents
-OpenOffice.org Base : finding;selections
-OpenOffice.org Base : finding;similarity search
-OpenOffice.org Base : fitting to pages
-OpenOffice.org Base : fitting to pages;print settings in Math
-OpenOffice.org Base : fitting to pages;print settings in presentations
-OpenOffice.org Base : fixed text
-OpenOffice.org Base : fixed text;form functions
-OpenOffice.org Base : fixing toolbars
-OpenOffice.org Base : flipping draw objects
-OpenOffice.org Base : floating frames in HTML documents
-OpenOffice.org Base : floating toolbars
-OpenOffice.org Base : focus of controls
-OpenOffice.org Base : folder creation
-OpenOffice.org Base : font lists
-OpenOffice.org Base : font name box
-OpenOffice.org Base : font sizes
-OpenOffice.org Base : font sizes;bullets
-OpenOffice.org Base : font sizes;relative changes
-OpenOffice.org Base : font sizes;scaling on screen
-OpenOffice.org Base : font sizes;text
-OpenOffice.org Base : fonts
-OpenOffice.org Base : fonts;adding under UNIX
-OpenOffice.org Base : fonts;changing in templates
-OpenOffice.org Base : fonts;colors
-OpenOffice.org Base : fonts;default settings
-OpenOffice.org Base : fonts;effects
-OpenOffice.org Base : fonts;for HTML and Basic
-OpenOffice.org Base : fonts;formats
-OpenOffice.org Base : fonts;outlines
-OpenOffice.org Base : fonts;positions in text
-OpenOffice.org Base : fonts;shadows
-OpenOffice.org Base : fonts;specifying several
-OpenOffice.org Base : fonts;strikethrough
-OpenOffice.org Base : fonts;styles
-OpenOffice.org Base : fonts;text objects
-OpenOffice.org Base : Fontwork icons
-OpenOffice.org Base : footers
-OpenOffice.org Base : footers;backgrounds
-OpenOffice.org Base : form controls
-OpenOffice.org Base : form controls;assigning macros
-OpenOffice.org Base : form controls;protecting
-OpenOffice.org Base : form controls;toolbars
-OpenOffice.org Base : form fields
-OpenOffice.org Base : form filters
-OpenOffice.org Base : Form Navigator
-OpenOffice.org Base : format codes
-OpenOffice.org Base : format codes;numbers
-OpenOffice.org Base : format codes;user-defined number formats
-OpenOffice.org Base : format filling printing in OpenOffice.org Math
-OpenOffice.org Base : Format Paintbrush
-OpenOffice.org Base : formats
-OpenOffice.org Base : formats;Asian layout
-OpenOffice.org Base : formats;Asian typography
-OpenOffice.org Base : formats;fonts
-OpenOffice.org Base : formats;maximizing page formats
-OpenOffice.org Base : formats;number and currency formats
-OpenOffice.org Base : formats;of currencies/date/time
-OpenOffice.org Base : formats;on opening and saving
-OpenOffice.org Base : formats;pasting in special formats
-OpenOffice.org Base : formats;positions
-OpenOffice.org Base : formats;tabulators
-OpenOffice.org Base : formats;undoing when writing
-OpenOffice.org Base : formatted fields
-OpenOffice.org Base : formatted fields;form functions
-OpenOffice.org Base : formatted fields;properties
-OpenOffice.org Base : formatting
-OpenOffice.org Base : formatting;axes in charts
-OpenOffice.org Base : formatting;chart legends
-OpenOffice.org Base : formatting;copying
-OpenOffice.org Base : formatting;definition
-OpenOffice.org Base : formatting;expanding (Calc)
-OpenOffice.org Base : formatting;font effects
-OpenOffice.org Base : formatting;hyperlinks
-OpenOffice.org Base : formatting;pages
-OpenOffice.org Base : formatting;printer metrics (Writer)
-OpenOffice.org Base : formatting;undoing
-OpenOffice.org Base : forms
-OpenOffice.org Base : forms;browsing
-OpenOffice.org Base : forms;Combo Box/List Box Wizard
-OpenOffice.org Base : forms;creating
-OpenOffice.org Base : forms;data
-OpenOffice.org Base : forms;designing (Base)
-OpenOffice.org Base : forms;events
-OpenOffice.org Base : forms;filtering data
-OpenOffice.org Base : forms;finding records
-OpenOffice.org Base : forms;focus after opening
-OpenOffice.org Base : forms;general information (Base)
-OpenOffice.org Base : forms;grouping controls
-OpenOffice.org Base : forms;HTML filters
-OpenOffice.org Base : forms;Navigator
-OpenOffice.org Base : forms;opening in design mode
-OpenOffice.org Base : forms;properties
-OpenOffice.org Base : forms;sorting data
-OpenOffice.org Base : forms;subforms
-OpenOffice.org Base : forms;wizards
-OpenOffice.org Base : forms;XForms
-OpenOffice.org Base : Formula Auditing feature in Microsoft Office
-OpenOffice.org Base : formula texts
-OpenOffice.org Base : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Base : formulas
-OpenOffice.org Base : formulas;new
-OpenOffice.org Base : formulas;starting formula editor
-OpenOffice.org Base : formulas in reports
-OpenOffice.org Base : formulas in reports;editing
-OpenOffice.org Base : forums and support
-OpenOffice.org Base : frames
-OpenOffice.org Base : frames;around paragraphs
-OpenOffice.org Base : frames;around tables
-OpenOffice.org Base : frames;AutoCorrect function
-OpenOffice.org Base : frames;backgrounds
-OpenOffice.org Base : frames;captions (Writer)
-OpenOffice.org Base : frames;printing in OpenOffice.org Math
-OpenOffice.org Base : frames;protecting
-OpenOffice.org Base : frames;selection frames
-OpenOffice.org Base : frames;text fitting to frames
-OpenOffice.org Base : freeform lines
-OpenOffice.org Base : freeform lines;draw functions
-OpenOffice.org Base : FTP
-OpenOffice.org Base : FTP;opening documents
-OpenOffice.org Base : FTP;saving documents
-OpenOffice.org Base : full joins (Base)
-OpenOffice.org Base : full screen view
-OpenOffice.org Base : full-text search in Help
-OpenOffice.org Base : functions in reports
-OpenOffice.org Base : functions in reports;editing
-OpenOffice.org Base : Gallery
-OpenOffice.org Base : Gallery;adding pictures
-OpenOffice.org Base : Gallery;dragging pictures to draw objects
-OpenOffice.org Base : Gallery;hiding/showing
-OpenOffice.org Base : Gallery;inserting pictures from
-OpenOffice.org Base : German spellcheck
-OpenOffice.org Base : get method for form transmissions
-OpenOffice.org Base : getting support
-OpenOffice.org Base : GIF format
-OpenOffice.org Base : glossaries
-OpenOffice.org Base : glossaries;common terms
-OpenOffice.org Base : glossaries;Internet terms
-OpenOffice.org Base : gradients off for faster printing
-OpenOffice.org Base : graphical text art
-OpenOffice.org Base : graphics
-OpenOffice.org Base : graphics;cache
-OpenOffice.org Base : graphics;protecting
-OpenOffice.org Base : graphics, see also pictures
-OpenOffice.org Base : grayscale printing
-OpenOffice.org Base : grid controls
-OpenOffice.org Base : grid controls;form functions
-OpenOffice.org Base : grids
-OpenOffice.org Base : grids;defaults (Writer/Calc)
-OpenOffice.org Base : grids;display options (Impress/Draw)
-OpenOffice.org Base : grids;displaying lines (Calc)
-OpenOffice.org Base : group box creation
-OpenOffice.org Base : groups
-OpenOffice.org Base : groups;entering/exiting/ungrouping
-OpenOffice.org Base : groups;naming
-OpenOffice.org Base : groups;of controls
-OpenOffice.org Base : guides
-OpenOffice.org Base : guides;display options (Impress/Draw)
-OpenOffice.org Base : guides;displaying when moving objects (Impress)
-OpenOffice.org Base : guides;showing (Calc)
-OpenOffice.org Base : guides;showing when moving frames (Writer)
-OpenOffice.org Base : gutter
-OpenOffice.org Base : handles
-OpenOffice.org Base : handles;displaying (Writer)
-OpenOffice.org Base : handles;scaling
-OpenOffice.org Base : handles;showing simple/large handles (Calc)
-OpenOffice.org Base : Hangul/Hanja
-OpenOffice.org Base : hatching
-OpenOffice.org Base : headers
-OpenOffice.org Base : headers;backgrounds
-OpenOffice.org Base : headings
-OpenOffice.org Base : headings;entering as text box
-OpenOffice.org Base : Hebrew
-OpenOffice.org Base : Hebrew;entering text
-OpenOffice.org Base : Hebrew;language settings
-OpenOffice.org Base : Help
-OpenOffice.org Base : Help;bookmarks
-OpenOffice.org Base : Help;extended tips on/off
-OpenOffice.org Base : Help;full-text search
-OpenOffice.org Base : Help;Help tips
-OpenOffice.org Base : Help;keywords
-OpenOffice.org Base : Help;navigation pane showing/hiding
-OpenOffice.org Base : Help;style sheets
-OpenOffice.org Base : Help;topics
-OpenOffice.org Base : Help Agent
-OpenOffice.org Base : Help Agent;help
-OpenOffice.org Base : Help Agent;options
-OpenOffice.org Base : Help tips
-OpenOffice.org Base : Help tips;hiding
-OpenOffice.org Base : hidden controls in Form Navigator
-OpenOffice.org Base : hidden fields display (Writer)
-OpenOffice.org Base : hidden pages
-OpenOffice.org Base : hidden pages;printing in presentations
-OpenOffice.org Base : hidden text
-OpenOffice.org Base : hidden text;showing (Writer)
-OpenOffice.org Base : hiding
-OpenOffice.org Base : hiding;changes
-OpenOffice.org Base : hiding;docked windows
-OpenOffice.org Base : hiding;navigation pane in Help window
-OpenOffice.org Base : high contrast mode
-OpenOffice.org Base : Hindi
-OpenOffice.org Base : Hindi;entering text
-OpenOffice.org Base : Hindi;language settings
-OpenOffice.org Base : horizontal scrollbars (Writer)
-OpenOffice.org Base : HTML
-OpenOffice.org Base : HTML;definition
-OpenOffice.org Base : HTML;export character set
-OpenOffice.org Base : HTML;fonts for source display
-OpenOffice.org Base : HTML;importing META tags
-OpenOffice.org Base : HTML;live presentations
-OpenOffice.org Base : HTML documents
-OpenOffice.org Base : HTML documents;auto reloading
-OpenOffice.org Base : HTML documents;importing/exporting
-OpenOffice.org Base : HTML documents;META tags in
-OpenOffice.org Base : HTML documents;new
-OpenOffice.org Base : HTML documents;source text
-OpenOffice.org Base : hyperlinks
-OpenOffice.org Base : hyperlinks;assigning macros
-OpenOffice.org Base : hyperlinks;character formats
-OpenOffice.org Base : hyperlinks;definition
-OpenOffice.org Base : hyperlinks;deleting
-OpenOffice.org Base : hyperlinks;editing
-OpenOffice.org Base : hyperlinks;inserting
-OpenOffice.org Base : hyperlinks;relative and absolute
-OpenOffice.org Base : hyperlinks;turning off automatic recognition
-OpenOffice.org Base : hyperlinks, see also links
-OpenOffice.org Base : hyphenation
-OpenOffice.org Base : hyphenation;activating for a language
-OpenOffice.org Base : hyphenation;minimal number of characters
-OpenOffice.org Base : hyphens
-OpenOffice.org Base : hyphens;displaying custom (Writer)
-OpenOffice.org Base : hyphens;inserting custom
-OpenOffice.org Base : icon bars, see toolbars
-OpenOffice.org Base : icon sizes
-OpenOffice.org Base : ignore list for spellcheck
-OpenOffice.org Base : illustrations, see pictures
-OpenOffice.org Base : image button creation
-OpenOffice.org Base : image control creation
-OpenOffice.org Base : ImageMap
-OpenOffice.org Base : ImageMap;definition
-OpenOffice.org Base : ImageMap;editor
-OpenOffice.org Base : images
-OpenOffice.org Base : images;ImageMap
-OpenOffice.org Base : images;inserting and editing bitmaps
-OpenOffice.org Base : images;placeholders in presentations
-OpenOffice.org Base : images, see also pictures
-OpenOffice.org Base : IME
-OpenOffice.org Base : IME;definition
-OpenOffice.org Base : IME;showing/hiding
-OpenOffice.org Base : import filters
-OpenOffice.org Base : import restrictions for Microsoft Office
-OpenOffice.org Base : importing
-OpenOffice.org Base : importing;bitmaps
-OpenOffice.org Base : importing;compatibility settings for text import
-OpenOffice.org Base : importing;databases
-OpenOffice.org Base : importing;documents in other formats
-OpenOffice.org Base : importing;from XML
-OpenOffice.org Base : importing;HTML and text documents
-OpenOffice.org Base : importing;HTML with META tags
-OpenOffice.org Base : importing;Microsoft Office documents with VBA code
-OpenOffice.org Base : importing;tables in text format
-OpenOffice.org Base : importing;templates
-OpenOffice.org Base : inches
-OpenOffice.org Base : Index tab in Help
-OpenOffice.org Base : indexes
-OpenOffice.org Base : indexes;backgrounds
-OpenOffice.org Base : indexes;showing/hiding Help index tab
-OpenOffice.org Base : indexes;unprotecting
-OpenOffice.org Base : indicator lines in text
-OpenOffice.org Base : inner joins (Base)
-OpenOffice.org Base : input method window
-OpenOffice.org Base : insert mode for entering text
-OpenOffice.org Base : inserting
-OpenOffice.org Base : inserting;applets
-OpenOffice.org Base : inserting;cell ranges from spreadsheets
-OpenOffice.org Base : inserting;charts
-OpenOffice.org Base : inserting;clipboard options
-OpenOffice.org Base : inserting;data from text documents
-OpenOffice.org Base : inserting;datasource records in spreadsheets
-OpenOffice.org Base : inserting;drawings
-OpenOffice.org Base : inserting;floating frames
-OpenOffice.org Base : inserting;form fields
-OpenOffice.org Base : inserting;hyperlinks
-OpenOffice.org Base : inserting;line breaks in cells
-OpenOffice.org Base : inserting;movies/sounds
-OpenOffice.org Base : inserting;new text tables defaults
-OpenOffice.org Base : inserting;notes
-OpenOffice.org Base : inserting;objects from Gallery
-OpenOffice.org Base : inserting;OLE objects
-OpenOffice.org Base : inserting;paragraph bullets
-OpenOffice.org Base : inserting;plug-ins
-OpenOffice.org Base : inserting;special characters
-OpenOffice.org Base : inserting;tab stops
-OpenOffice.org Base : installing
-OpenOffice.org Base : installing;ActiveX control
-OpenOffice.org Base : installing;mobile device filters
-OpenOffice.org Base : installing;UNO components
-OpenOffice.org Base : instructions
-OpenOffice.org Base : instructions;general
-OpenOffice.org Base : Internet
-OpenOffice.org Base : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Base : Internet;presentations
-OpenOffice.org Base : Internet;starting searches
-OpenOffice.org Base : Internet;turning off recognition of addresses
-OpenOffice.org Base : Internet glossary
-OpenOffice.org Base : invert filter
-OpenOffice.org Base : invisible areas
-OpenOffice.org Base : italic text
-OpenOffice.org Base : iterative references in spreadsheets
-OpenOffice.org Base : Java
-OpenOffice.org Base : Java;definition
-OpenOffice.org Base : Java;scripting
-OpenOffice.org Base : Java;setting options
-OpenOffice.org Base : JDBC
-OpenOffice.org Base : JDBC;databases (Base)
-OpenOffice.org Base : JDBC;definition
-OpenOffice.org Base : joining
-OpenOffice.org Base : joining;paragraphs
-OpenOffice.org Base : joining;tables (Base)
-OpenOffice.org Base : joins in databases (Base)
-OpenOffice.org Base : justifying text
-OpenOffice.org Base : kerning
-OpenOffice.org Base : kerning;Asian texts
-OpenOffice.org Base : kerning;definition
-OpenOffice.org Base : kerning;in characters
-OpenOffice.org Base : key fields for relations (Base)
-OpenOffice.org Base : keyboard
-OpenOffice.org Base : keyboard;assigning/editing shortcut keys
-OpenOffice.org Base : keyboard;general commands
-OpenOffice.org Base : keyboard;removing numbering
-OpenOffice.org Base : keys
-OpenOffice.org Base : keys;adding push buttons
-OpenOffice.org Base : keys;primary keys (Base)
-OpenOffice.org Base : kiosk export
-OpenOffice.org Base : labels
-OpenOffice.org Base : labels;creating and synchronizing
-OpenOffice.org Base : labels;for draw objects
-OpenOffice.org Base : labels;form functions
-OpenOffice.org Base : labels;from databases
-OpenOffice.org Base : labels, see also names/callouts
-OpenOffice.org Base : languages
-OpenOffice.org Base : languages;activating modules
-OpenOffice.org Base : languages;Asian support
-OpenOffice.org Base : languages;complex text layout
-OpenOffice.org Base : languages;locale settings
-OpenOffice.org Base : languages;selecting
-OpenOffice.org Base : languages;setting options
-OpenOffice.org Base : languages;spellcheck
-OpenOffice.org Base : languages;spellchecking and formatting
-OpenOffice.org Base : large handles (Writer)
-OpenOffice.org Base : large icons
-OpenOffice.org Base : layer arrangement
-OpenOffice.org Base : layout
-OpenOffice.org Base : layout;importing Word documents
-OpenOffice.org Base : layout;pages
-OpenOffice.org Base : LDAP server
-OpenOffice.org Base : LDAP server;address books (Base)
-OpenOffice.org Base : LDAP server;sign on options
-OpenOffice.org Base : leading between paragraphs
-OpenOffice.org Base : left alignment of paragraphs
-OpenOffice.org Base : left joins (Base)
-OpenOffice.org Base : legends
-OpenOffice.org Base : legends;charts
-OpenOffice.org Base : legends;draw objects
-OpenOffice.org Base : legends;rounding corners
-OpenOffice.org Base : Letter Wizard
-OpenOffice.org Base : levels
-OpenOffice.org Base : levels;depth stagger
-OpenOffice.org Base : limits of tables (Writer)
-OpenOffice.org Base : line breaks
-OpenOffice.org Base : line breaks;in cells
-OpenOffice.org Base : line spacing
-OpenOffice.org Base : line spacing;context menu in paragraphs
-OpenOffice.org Base : line spacing;paragraph
-OpenOffice.org Base : line styles
-OpenOffice.org Base : line styles;applying
-OpenOffice.org Base : line styles;defining
-OpenOffice.org Base : lines
-OpenOffice.org Base : lines;contours (Draw/Impress)
-OpenOffice.org Base : lines;defining ends
-OpenOffice.org Base : lines;draw functions
-OpenOffice.org Base : lines;drawing in text
-OpenOffice.org Base : lines;editing points
-OpenOffice.org Base : lines;removing automatic lines
-OpenOffice.org Base : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Base : lines of text
-OpenOffice.org Base : lines of text;alignment
-OpenOffice.org Base : links
-OpenOffice.org Base : links;between cells and controls
-OpenOffice.org Base : links;by drag and drop
-OpenOffice.org Base : links;character formats
-OpenOffice.org Base : links;definition
-OpenOffice.org Base : links;editing hyperlinks
-OpenOffice.org Base : links;inserting
-OpenOffice.org Base : links;modifying
-OpenOffice.org Base : links;opening files with
-OpenOffice.org Base : links;relational databases (Base)
-OpenOffice.org Base : links;turning off automatic recognition
-OpenOffice.org Base : links;updating options (Writer)
-OpenOffice.org Base : links;updating specific links
-OpenOffice.org Base : list box creation
-OpenOffice.org Base : lists
-OpenOffice.org Base : lists;data assigned to controls
-OpenOffice.org Base : lists;registered databases (Base)
-OpenOffice.org Base : lists;regular expressions
-OpenOffice.org Base : live presentations on the Internet
-OpenOffice.org Base : loading
-OpenOffice.org Base : loading;documents
-OpenOffice.org Base : loading;documents from other formats
-OpenOffice.org Base : loading;HTML documents, automatically
-OpenOffice.org Base : loading;Microsoft Office documents with VBA code
-OpenOffice.org Base : loading;reloading
-OpenOffice.org Base : loading;XML files
-OpenOffice.org Base : locale settings
-OpenOffice.org Base : lowercase letters
-OpenOffice.org Base : lowercase letters;font effects
-OpenOffice.org Base : macros
-OpenOffice.org Base : macros;assigning to events in forms
-OpenOffice.org Base : macros;in MS Office documents
-OpenOffice.org Base : macros;interrupting
-OpenOffice.org Base : macros;organizing
-OpenOffice.org Base : macros;recording
-OpenOffice.org Base : macros;security
-OpenOffice.org Base : macros;security warning dialog
-OpenOffice.org Base : macros;selecting security warnings
-OpenOffice.org Base : magnifiers
-OpenOffice.org Base : Mail Merge feature in Microsoft Office
-OpenOffice.org Base : margins
-OpenOffice.org Base : margins;pages
-OpenOffice.org Base : margins;setting with the mouse
-OpenOffice.org Base : margins;shadows
-OpenOffice.org Base : marking changes
-OpenOffice.org Base : Markup feature in Microsoft Office
-OpenOffice.org Base : Math formula editor
-OpenOffice.org Base : measurement units
-OpenOffice.org Base : measurement units;changing on rulers
-OpenOffice.org Base : measurement units;converting
-OpenOffice.org Base : measurement units;selecting
-OpenOffice.org Base : Media Player window
-OpenOffice.org Base : menus
-OpenOffice.org Base : menus;activating context menus
-OpenOffice.org Base : menus;customizing
-OpenOffice.org Base : menus;inactive menu items
-OpenOffice.org Base : merging
-OpenOffice.org Base : merging;documents
-OpenOffice.org Base : META tags
-OpenOffice.org Base : metrics
-OpenOffice.org Base : metrics;converting
-OpenOffice.org Base : metrics;document formatting (Writer)
-OpenOffice.org Base : metrics;in sheets
-OpenOffice.org Base : Microsoft Office
-OpenOffice.org Base : Microsoft Office;Access databases (base)
-OpenOffice.org Base : Microsoft Office;as standard file format
-OpenOffice.org Base : Microsoft Office;document import restrictions
-OpenOffice.org Base : Microsoft Office;feature comparisons
-OpenOffice.org Base : Microsoft Office;importing password protected files
-OpenOffice.org Base : Microsoft Office;importing Word documents
-OpenOffice.org Base : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Base : Microsoft Office;new users information
-OpenOffice.org Base : Microsoft Office;opening Microsoft documents
-OpenOffice.org Base : Microsoft Office;reassigning document types
-OpenOffice.org Base : mobile device filters
-OpenOffice.org Base : models in XForms
-OpenOffice.org Base : modifying, see changing
-OpenOffice.org Base : more controls
-OpenOffice.org Base : mosaic filter
-OpenOffice.org Base : mouse
-OpenOffice.org Base : mouse;pointers when using drag and drop
-OpenOffice.org Base : mouse;positioning
-OpenOffice.org Base : moving
-OpenOffice.org Base : moving;tab stops on ruler
-OpenOffice.org Base : moving;toolbars
-OpenOffice.org Base : moving;using guide lines in presentations
-OpenOffice.org Base : MS ADO interface (Base)
-OpenOffice.org Base : multi-line titles in forms
-OpenOffice.org Base : multiple documents
-OpenOffice.org Base : multiple documents;opening
-OpenOffice.org Base : My Documents folder
-OpenOffice.org Base : My Documents folder;changing work directory
-OpenOffice.org Base : My Documents folder;opening
-OpenOffice.org Base : MySQL databases (Base)
-OpenOffice.org Base : names
-OpenOffice.org Base : names;multi-line titles
-OpenOffice.org Base : names;objects
-OpenOffice.org Base : names, see also labels/callouts
-OpenOffice.org Base : namespace organization in XForms
-OpenOffice.org Base : native SQL (Base)
-OpenOffice.org Base : navigating
-OpenOffice.org Base : navigating;in documents
-OpenOffice.org Base : Navigation bar
-OpenOffice.org Base : Navigation bar;controls
-OpenOffice.org Base : Navigation bar;forms
-OpenOffice.org Base : Navigator
-OpenOffice.org Base : Navigator;contents as lists
-OpenOffice.org Base : Navigator;docking
-OpenOffice.org Base : Navigator;working with
-OpenOffice.org Base : network identity options
-OpenOffice.org Base : new databases
-OpenOffice.org Base : new documents
-OpenOffice.org Base : new German spellcheck
-OpenOffice.org Base : new lines in cells
-OpenOffice.org Base : new windows
-OpenOffice.org Base : non-breaking dashes
-OpenOffice.org Base : non-breaking spaces (Writer)
-OpenOffice.org Base : non-printing characters (Writer)
-OpenOffice.org Base : notes
-OpenOffice.org Base : notes;displaying (Calc)
-OpenOffice.org Base : notes;inserting and editing
-OpenOffice.org Base : notes;printing in text
-OpenOffice.org Base : number formats
-OpenOffice.org Base : number formats;codes
-OpenOffice.org Base : number formats;formats
-OpenOffice.org Base : number formats;recognition in text tables
-OpenOffice.org Base : number of pages
-OpenOffice.org Base : number of sheets
-OpenOffice.org Base : number of tables
-OpenOffice.org Base : numbering
-OpenOffice.org Base : numbering;options
-OpenOffice.org Base : numbering;paragraphs
-OpenOffice.org Base : numbering;turning off
-OpenOffice.org Base : numbering;using automatically
-OpenOffice.org Base : numbers
-OpenOffice.org Base : numbers;date, time and currency formats
-OpenOffice.org Base : numbers;decimal places (Calc)
-OpenOffice.org Base : numbers;formatting options for selected cells
-OpenOffice.org Base : numerical fields in forms
-OpenOffice.org Base : objects
-OpenOffice.org Base : objects;always moveable (Impress/Draw)
-OpenOffice.org Base : objects;arranging within stacks
-OpenOffice.org Base : objects;contours in presentations
-OpenOffice.org Base : objects;copying when moving in presentations
-OpenOffice.org Base : objects;definition
-OpenOffice.org Base : objects;displaying in spreadsheets
-OpenOffice.org Base : objects;displaying in text documents
-OpenOffice.org Base : objects;editing
-OpenOffice.org Base : objects;inserting from Gallery
-OpenOffice.org Base : objects;inserting OLE objects
-OpenOffice.org Base : objects;moving and resizing with mouse
-OpenOffice.org Base : objects;naming
-OpenOffice.org Base : objects;opening
-OpenOffice.org Base : objects;quickly moving to
-OpenOffice.org Base : objects;titles and descriptions
-OpenOffice.org Base : ODBC
-OpenOffice.org Base : ODBC;database (Base)
-OpenOffice.org Base : ODBC;definition
-OpenOffice.org Base : ODF file formats
-OpenOffice.org Base : Office
-OpenOffice.org Base : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Base : old German spellcheck
-OpenOffice.org Base : OLE
-OpenOffice.org Base : OLE;definition
-OpenOffice.org Base : OLE objects
-OpenOffice.org Base : OLE objects;arranging within stacks
-OpenOffice.org Base : OLE objects;captions (Writer)
-OpenOffice.org Base : OLE objects;inserting
-OpenOffice.org Base : OLE objects;number of
-OpenOffice.org Base : OLE objects;protecting
-OpenOffice.org Base : one and a half line spacing in text
-OpenOffice.org Base : online registration
-OpenOffice.org Base : online update options
-OpenOffice.org Base : online updates
-OpenOffice.org Base : online updates;checking automatically
-OpenOffice.org Base : online updates;checking manually
-OpenOffice.org Base : Open/Save dialogs
-OpenOffice.org Base : OpenDocument file formats
-OpenOffice.org Base : OpenGL
-OpenOffice.org Base : OpenGL;definition
-OpenOffice.org Base : OpenGL;optimized output
-OpenOffice.org Base : opening
-OpenOffice.org Base : opening;context menus
-OpenOffice.org Base : opening;database files
-OpenOffice.org Base : opening;dialog settings
-OpenOffice.org Base : opening;documents
-OpenOffice.org Base : opening;documents from other formats
-OpenOffice.org Base : opening;files with links
-OpenOffice.org Base : opening;files, with placeholders
-OpenOffice.org Base : opening;forms
-OpenOffice.org Base : opening;Microsoft Office files
-OpenOffice.org Base : opening;mobile device documents
-OpenOffice.org Base : opening;objects
-OpenOffice.org Base : opening;reports
-OpenOffice.org Base : opening;several files
-OpenOffice.org Base : opening;XForms
-OpenOffice.org Base : OpenOffice.org Base data sources
-OpenOffice.org Base : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Base : OpenOffice.org documents
-OpenOffice.org Base : OpenOffice.org documents;mobile device filters
-OpenOffice.org Base : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Base : OpenOffice.org Math start
-OpenOffice.org Base : operators
-OpenOffice.org Base : operators;default filters
-OpenOffice.org Base : optional hyphens (Writer)
-OpenOffice.org Base : options
-OpenOffice.org Base : options;accessibility
-OpenOffice.org Base : options;appearance
-OpenOffice.org Base : options;compatibility (Writer)
-OpenOffice.org Base : options;network identity
-OpenOffice.org Base : options;online update
-OpenOffice.org Base : options;tools
-OpenOffice.org Base : Oracle databases (base)
-OpenOffice.org Base : ordering
-OpenOffice.org Base : ordering;objects
-OpenOffice.org Base : organizing
-OpenOffice.org Base : organizing;macros and scripts
-OpenOffice.org Base : organizing;namespaces in XForms
-OpenOffice.org Base : organizing;styles
-OpenOffice.org Base : organizing;templates
-OpenOffice.org Base : original size
-OpenOffice.org Base : original size;printing in OpenOffice.org Math
-OpenOffice.org Base : original size;restoring after cropping
-OpenOffice.org Base : outlines
-OpenOffice.org Base : outlines;font effects
-OpenOffice.org Base : outlines;outline symbols
-OpenOffice.org Base : outlines;sending to presentations
-OpenOffice.org Base : overwrite mode
-OpenOffice.org Base : packages, see extensions
-OpenOffice.org Base : page breaks
-OpenOffice.org Base : page breaks;displaying (Calc)
-OpenOffice.org Base : page formats
-OpenOffice.org Base : page formats;maximizing
-OpenOffice.org Base : page formats;restriction
-OpenOffice.org Base : page styles
-OpenOffice.org Base : page styles;editing/applying with statusbar
-OpenOffice.org Base : pages
-OpenOffice.org Base : pages;backgrounds in spreadsheets
-OpenOffice.org Base : pages;formatting and numbering
-OpenOffice.org Base : pages;printing page names in presentations
-OpenOffice.org Base : pages;scaling
-OpenOffice.org Base : pages;selecting one to print
-OpenOffice.org Base : paint box
-OpenOffice.org Base : paint can symbol
-OpenOffice.org Base : pair kerning
-OpenOffice.org Base : Palm file filters
-OpenOffice.org Base : paper formats
-OpenOffice.org Base : paper size warning
-OpenOffice.org Base : paper trays
-OpenOffice.org Base : paragraph marks
-OpenOffice.org Base : paragraph marks;displaying (Writer)
-OpenOffice.org Base : paragraph styles
-OpenOffice.org Base : paragraph styles;languages
-OpenOffice.org Base : paragraph styles;modifying basic fonts
-OpenOffice.org Base : paragraphs
-OpenOffice.org Base : paragraphs;alignment
-OpenOffice.org Base : paragraphs;Asian typography
-OpenOffice.org Base : paragraphs;backgrounds
-OpenOffice.org Base : paragraphs;defining borders
-OpenOffice.org Base : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Base : paragraphs;increasing indents of
-OpenOffice.org Base : paragraphs;indents, margins and columns
-OpenOffice.org Base : paragraphs;inserting bullets
-OpenOffice.org Base : paragraphs;joining
-OpenOffice.org Base : paragraphs;numbering automatically
-OpenOffice.org Base : paragraphs;removing blank ones
-OpenOffice.org Base : paragraphs;spacing
-OpenOffice.org Base : paragraphs;tab stops
-OpenOffice.org Base : parameters
-OpenOffice.org Base : parameters;command line
-OpenOffice.org Base : parameters;queries (Base)
-OpenOffice.org Base : passwords for protecting contents
-OpenOffice.org Base : pasting
-OpenOffice.org Base : pasting;cell ranges
-OpenOffice.org Base : pasting;cell ranges from spreadsheets
-OpenOffice.org Base : pasting;data from text documents
-OpenOffice.org Base : pasting;draw objects
-OpenOffice.org Base : pasting;draw objects from other documents
-OpenOffice.org Base : pasting;formatted/unformatted text
-OpenOffice.org Base : pasting;from data source view
-OpenOffice.org Base : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Base : pasting;pictures from other documents
-OpenOffice.org Base : pasting;sheet areas in text documents
-OpenOffice.org Base : pasting;to Gallery
-OpenOffice.org Base : paths
-OpenOffice.org Base : paths;changing work directory
-OpenOffice.org Base : paths;defaults
-OpenOffice.org Base : pattern editor
-OpenOffice.org Base : pattern fields
-OpenOffice.org Base : pattern fields;form functions
-OpenOffice.org Base : patterns for objects
-OpenOffice.org Base : PDF
-OpenOffice.org Base : PDF;export
-OpenOffice.org Base : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Base : personal data input
-OpenOffice.org Base : phonetic guide
-OpenOffice.org Base : picklist creation
-OpenOffice.org Base : pictures
-OpenOffice.org Base : pictures;adding to Gallery
-OpenOffice.org Base : pictures;arranging within stacks
-OpenOffice.org Base : pictures;assigning macros
-OpenOffice.org Base : pictures;backgrounds
-OpenOffice.org Base : pictures;captions (Writer)
-OpenOffice.org Base : pictures;changing paths
-OpenOffice.org Base : pictures;cropping and zooming
-OpenOffice.org Base : pictures;displaying in Calc
-OpenOffice.org Base : pictures;displaying in Writer (Writer)
-OpenOffice.org Base : pictures;drag and drop between documents
-OpenOffice.org Base : pictures;drawing
-OpenOffice.org Base : pictures;editing
-OpenOffice.org Base : pictures;filters
-OpenOffice.org Base : pictures;ImageMap
-OpenOffice.org Base : pictures;inserting automatically
-OpenOffice.org Base : pictures;inserting from Gallery
-OpenOffice.org Base : pictures;number of
-OpenOffice.org Base : pictures;printing
-OpenOffice.org Base : pictures;scaling/resizing
-OpenOffice.org Base : Pivot tables feature in Microsoft Office
-OpenOffice.org Base : pixel editor
-OpenOffice.org Base : pixel graphics
-OpenOffice.org Base : pixel graphics;inserting and editing
-OpenOffice.org Base : pixel patterns
-OpenOffice.org Base : placeholders
-OpenOffice.org Base : placeholders;in SQL queries
-OpenOffice.org Base : placeholders;on opening files
-OpenOffice.org Base : placing toolbars
-OpenOffice.org Base : playing movies and sound files
-OpenOffice.org Base : plotting data as charts
-OpenOffice.org Base : plug-ins
-OpenOffice.org Base : plug-ins;activating and deactivating
-OpenOffice.org Base : plug-ins;definition
-OpenOffice.org Base : plug-ins;inserting
-OpenOffice.org Base : pocket device appliances
-OpenOffice.org Base : Pocket PC file filters
-OpenOffice.org Base : points
-OpenOffice.org Base : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Base : polygon drawing
-OpenOffice.org Base : pop-art filter
-OpenOffice.org Base : portable document format
-OpenOffice.org Base : positioning
-OpenOffice.org Base : positioning;draw objects and controls
-OpenOffice.org Base : positioning;fonts
-OpenOffice.org Base : positioning;objects
-OpenOffice.org Base : positioning;toolbars
-OpenOffice.org Base : post method for form transmissions
-OpenOffice.org Base : posterizing filter
-OpenOffice.org Base : PostScript
-OpenOffice.org Base : PostScript;creating files
-OpenOffice.org Base : PostScript;PDF converter, UNIX
-OpenOffice.org Base : PowerPoint export
-OpenOffice.org Base : precision as shown (Calc)
-OpenOffice.org Base : predefining fonts
-OpenOffice.org Base : presentations
-OpenOffice.org Base : presentations;creating/opening
-OpenOffice.org Base : presentations;inserting spreadsheet cells
-OpenOffice.org Base : presentations;live on the Internet
-OpenOffice.org Base : presentations;print menu
-OpenOffice.org Base : presentations;saving
-OpenOffice.org Base : presentations;saving automatically
-OpenOffice.org Base : presentations;saving in other formats
-OpenOffice.org Base : presentations;sending as e-mail
-OpenOffice.org Base : presentations;starting with wizard
-OpenOffice.org Base : presentations;wizards
-OpenOffice.org Base : press buttons, see push buttons
-OpenOffice.org Base : previews
-OpenOffice.org Base : previews;fonts lists
-OpenOffice.org Base : primary keys
-OpenOffice.org Base : primary keys;defining
-OpenOffice.org Base : primary keys;inserting (Base)
-OpenOffice.org Base : print area selection
-OpenOffice.org Base : printer metrics for document formatting (Writer)
-OpenOffice.org Base : printers
-OpenOffice.org Base : printers;adding, UNIX
-OpenOffice.org Base : printers;choosing
-OpenOffice.org Base : printers;default printer
-OpenOffice.org Base : printers;faxes under UNIX
-OpenOffice.org Base : printers;maximum page formats
-OpenOffice.org Base : printers;paper trays
-OpenOffice.org Base : printers;properties
-OpenOffice.org Base : printing
-OpenOffice.org Base : printing;black and white
-OpenOffice.org Base : printing;brochures
-OpenOffice.org Base : printing;colors in grayscale
-OpenOffice.org Base : printing;copies
-OpenOffice.org Base : printing;creating individual jobs
-OpenOffice.org Base : printing;dates in presentations
-OpenOffice.org Base : printing;directly
-OpenOffice.org Base : printing;documents
-OpenOffice.org Base : printing;drawings defaults
-OpenOffice.org Base : printing;elements in text documents
-OpenOffice.org Base : printing;faster
-OpenOffice.org Base : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Base : printing;fitting to pages in presentations
-OpenOffice.org Base : printing;formulas in OpenOffice.org Math
-OpenOffice.org Base : printing;hidden pages of presentations
-OpenOffice.org Base : printing;in original size in OpenOffice.org Math
-OpenOffice.org Base : printing;left/right pages
-OpenOffice.org Base : printing;queries (Base)
-OpenOffice.org Base : printing;scaling in OpenOffice.org Math
-OpenOffice.org Base : printing;selections
-OpenOffice.org Base : printing;text always in black
-OpenOffice.org Base : printing;text in reverse order
-OpenOffice.org Base : printing;tiling pages in presentations
-OpenOffice.org Base : printing;transparencies
-OpenOffice.org Base : printing;warnings
-OpenOffice.org Base : printing;without scaling in presentations
-OpenOffice.org Base : printing speed
-OpenOffice.org Base : programming
-OpenOffice.org Base : programming;OpenOffice.org
-OpenOffice.org Base : programming;scripting
-OpenOffice.org Base : properties
-OpenOffice.org Base : properties;fields in databases
-OpenOffice.org Base : properties;files
-OpenOffice.org Base : properties;form controls
-OpenOffice.org Base : properties;forms
-OpenOffice.org Base : properties;printers
-OpenOffice.org Base : protected contents
-OpenOffice.org Base : protected dashes
-OpenOffice.org Base : protected database tables
-OpenOffice.org Base : protected documents
-OpenOffice.org Base : protected spaces
-OpenOffice.org Base : protected spaces;inserting
-OpenOffice.org Base : protected spaces;showing (Writer)
-OpenOffice.org Base : protecting
-OpenOffice.org Base : protecting;contents
-OpenOffice.org Base : protecting;recorded changes
-OpenOffice.org Base : proxy settings
-OpenOffice.org Base : push buttons
-OpenOffice.org Base : push buttons;adding to documents
-OpenOffice.org Base : push buttons;creating
-OpenOffice.org Base : queries
-OpenOffice.org Base : queries;copying (Base)
-OpenOffice.org Base : queries;creating in design view (Base)
-OpenOffice.org Base : queries;creating in SQL view
-OpenOffice.org Base : queries;defining (Base)
-OpenOffice.org Base : queries;deleting table links (Base)
-OpenOffice.org Base : queries;editing in data source view
-OpenOffice.org Base : queries;formulating filter conditions (Base)
-OpenOffice.org Base : queries;joining tables (Base)
-OpenOffice.org Base : queries;missing elements (Base)
-OpenOffice.org Base : queries;overview (Base)
-OpenOffice.org Base : queries;parameter queries (Base)
-OpenOffice.org Base : queries;printing (Base)
-OpenOffice.org Base : Query Wizard (Base)
-OpenOffice.org Base : quickstarter
-OpenOffice.org Base : quotation marks
-OpenOffice.org Base : quotation marks;replacing
-OpenOffice.org Base : quotes
-OpenOffice.org Base : quotes;custom
-OpenOffice.org Base : radio button creation
-OpenOffice.org Base : read-only documents
-OpenOffice.org Base : read-only documents;cursor
-OpenOffice.org Base : read-only documents;database tables on/off
-OpenOffice.org Base : read-only documents;editing
-OpenOffice.org Base : read-only documents;opening documents as
-OpenOffice.org Base : read-only items in Data Navigator
-OpenOffice.org Base : recognizing URLs automatically
-OpenOffice.org Base : recording
-OpenOffice.org Base : recording;changes
-OpenOffice.org Base : recording;macros
-OpenOffice.org Base : records
-OpenOffice.org Base : records;inserting notes
-OpenOffice.org Base : records;protecting
-OpenOffice.org Base : records;saving
-OpenOffice.org Base : records;searching in databases
-OpenOffice.org Base : rectangles with round corners
-OpenOffice.org Base : recursions in spreadsheets
-OpenOffice.org Base : redo command
-OpenOffice.org Base : reduced printing
-OpenOffice.org Base : reference lines
-OpenOffice.org Base : references
-OpenOffice.org Base : references;displaying in color (Calc)
-OpenOffice.org Base : references;expanding (Calc)
-OpenOffice.org Base : references;iterative (Calc)
-OpenOffice.org Base : Refresh Data feature in Microsoft Office
-OpenOffice.org Base : register-true
-OpenOffice.org Base : register-true;definition
-OpenOffice.org Base : registering
-OpenOffice.org Base : registering;address books
-OpenOffice.org Base : registering;databases (Base)
-OpenOffice.org Base : registering;OpenOffice.org
-OpenOffice.org Base : regular expressions
-OpenOffice.org Base : regular expressions;list of
-OpenOffice.org Base : regular expressions;opening files
-OpenOffice.org Base : relational databases (Base)
-OpenOffice.org Base : relations
-OpenOffice.org Base : relations;creating and deleting (Base)
-OpenOffice.org Base : relations;joining tables (Base)
-OpenOffice.org Base : relations;properties (Base)
-OpenOffice.org Base : relative hyperlinks
-OpenOffice.org Base : relative saving of URLs
-OpenOffice.org Base : reloading
-OpenOffice.org Base : reloading;documents
-OpenOffice.org Base : reloading;HTML documents, automatically
-OpenOffice.org Base : remarks, see also notes
-OpenOffice.org Base : remote configurations
-OpenOffice.org Base : remove noise filter
-OpenOffice.org Base : removing
-OpenOffice.org Base : removing;bullets and numbering
-OpenOffice.org Base : removing;form filters
-OpenOffice.org Base : removing, see also deleting
-OpenOffice.org Base : Replace text as you type feature in Microsoft Office
-OpenOffice.org Base : replacement options
-OpenOffice.org Base : replacement table
-OpenOffice.org Base : replacing
-OpenOffice.org Base : replacing;AutoCorrect function
-OpenOffice.org Base : replacing;dashes
-OpenOffice.org Base : Report Builder
-OpenOffice.org Base : reports
-OpenOffice.org Base : reports;creating
-OpenOffice.org Base : reports;error reports
-OpenOffice.org Base : reports;opening and editing
-OpenOffice.org Base : reports;templates
-OpenOffice.org Base : resetting
-OpenOffice.org Base : resetting;templates
-OpenOffice.org Base : resizing
-OpenOffice.org Base : resizing;objects, by mouse
-OpenOffice.org Base : resizing, see also scaling/zooming
-OpenOffice.org Base : resolution when printing bitmaps
-OpenOffice.org Base : restoring
-OpenOffice.org Base : restoring;default formatting
-OpenOffice.org Base : restoring;editing
-OpenOffice.org Base : reversing printing order
-OpenOffice.org Base : review function
-OpenOffice.org Base : review function;accepting or rejecting changes
-OpenOffice.org Base : review function;comparing documents
-OpenOffice.org Base : review function;recording changes example
-OpenOffice.org Base : rich text control
-OpenOffice.org Base : right alignment of paragraphs
-OpenOffice.org Base : right joins (Base)
-OpenOffice.org Base : right-to-left text
-OpenOffice.org Base : rotating
-OpenOffice.org Base : rotating;3D text
-OpenOffice.org Base : round corners
-OpenOffice.org Base : rounding precision (Calc)
-OpenOffice.org Base : row headers
-OpenOffice.org Base : row headers;displaying (Calc)
-OpenOffice.org Base : row headers;highlighting (Calc)
-OpenOffice.org Base : rulers
-OpenOffice.org Base : rulers;default settings
-OpenOffice.org Base : rulers;measurement units
-OpenOffice.org Base : rulers;visible in presentations
-OpenOffice.org Base : samples and templates
-OpenOffice.org Base : saving
-OpenOffice.org Base : saving;default file formats
-OpenOffice.org Base : saving;dialog settings
-OpenOffice.org Base : saving;documents
-OpenOffice.org Base : saving;documents for mobile devices
-OpenOffice.org Base : saving;documents in other formats
-OpenOffice.org Base : saving;documents, automatically
-OpenOffice.org Base : saving;in Microsoft Office file format
-OpenOffice.org Base : saving;options
-OpenOffice.org Base : saving;templates
-OpenOffice.org Base : saving;to XML
-OpenOffice.org Base : saving;VBA code in Microsoft Office documents
-OpenOffice.org Base : saving;with password by default
-OpenOffice.org Base : saving as command
-OpenOffice.org Base : saving as command;precautions
-OpenOffice.org Base : scaling
-OpenOffice.org Base : scaling;font sizes in user interface
-OpenOffice.org Base : scaling;objects
-OpenOffice.org Base : scaling;pictures
-OpenOffice.org Base : scaling;printing in OpenOffice.org Math
-OpenOffice.org Base : scaling;when printing presentations
-OpenOffice.org Base : scaling, see also zooming
-OpenOffice.org Base : screen
-OpenOffice.org Base : screen;full screen views
-OpenOffice.org Base : screen;scaling
-OpenOffice.org Base : screen magnifiers
-OpenOffice.org Base : screen readers
-OpenOffice.org Base : script organization
-OpenOffice.org Base : scripting in programming
-OpenOffice.org Base : scrollbars
-OpenOffice.org Base : scrollbars;controls
-OpenOffice.org Base : scrollbars;displaying (Calc)
-OpenOffice.org Base : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Base : search criteria for database functions in cells
-OpenOffice.org Base : search engines
-OpenOffice.org Base : search engines;definition
-OpenOffice.org Base : search engines;selecting
-OpenOffice.org Base : searching
-OpenOffice.org Base : searching;all sheets
-OpenOffice.org Base : searching;databases
-OpenOffice.org Base : searching;form filters
-OpenOffice.org Base : searching;Internet
-OpenOffice.org Base : searching;tables and forms
-OpenOffice.org Base : sections
-OpenOffice.org Base : sections;backgrounds
-OpenOffice.org Base : sections;protecting
-OpenOffice.org Base : security
-OpenOffice.org Base : security;options for documents with macros
-OpenOffice.org Base : security;protecting contents
-OpenOffice.org Base : security;warning dialogs with macros
-OpenOffice.org Base : selecting
-OpenOffice.org Base : selecting;controls
-OpenOffice.org Base : selecting;group objects
-OpenOffice.org Base : selecting;measurement units
-OpenOffice.org Base : selecting;objects
-OpenOffice.org Base : selecting;print areas
-OpenOffice.org Base : selecting;several files
-OpenOffice.org Base : selection clipboard
-OpenOffice.org Base : selection modes in text
-OpenOffice.org Base : sending
-OpenOffice.org Base : sending;AutoAbstract function in presentations
-OpenOffice.org Base : sending;documents as e-mail
-OpenOffice.org Base : sending;documents as faxes
-OpenOffice.org Base : separator lines
-OpenOffice.org Base : separator lines;defining
-OpenOffice.org Base : separators
-OpenOffice.org Base : separators;conditional
-OpenOffice.org Base : Server Side ImageMap
-OpenOffice.org Base : settings
-OpenOffice.org Base : settings;printers
-OpenOffice.org Base : settings;program configuration
-OpenOffice.org Base : settings;proxies
-OpenOffice.org Base : settings;tracking changes
-OpenOffice.org Base : settings;views
-OpenOffice.org Base : SGML
-OpenOffice.org Base : SGML;definition
-OpenOffice.org Base : shadows
-OpenOffice.org Base : shadows;areas
-OpenOffice.org Base : shadows;borders
-OpenOffice.org Base : shadows;characters
-OpenOffice.org Base : shadows;characters, using context menu
-OpenOffice.org Base : sharpening filter
-OpenOffice.org Base : sheet tabs
-OpenOffice.org Base : sheet tabs;displaying
-OpenOffice.org Base : sheets
-OpenOffice.org Base : sheets;searching all
-OpenOffice.org Base : shortcut keys
-OpenOffice.org Base : shortcut keys;assigning macros
-OpenOffice.org Base : shortcut keys;general
-OpenOffice.org Base : shortcut keys;in databases
-OpenOffice.org Base : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Base : Show/Hide feature in Microsoft Office
-OpenOffice.org Base : showing
-OpenOffice.org Base : showing;changes
-OpenOffice.org Base : showing;docked windows
-OpenOffice.org Base : showing;drawings and controls (Writer)
-OpenOffice.org Base : showing;live presentations on the Internet
-OpenOffice.org Base : showing;toolbars
-OpenOffice.org Base : signing documents with digital signatures
-OpenOffice.org Base : similarity search
-OpenOffice.org Base : simple handles (Writer)
-OpenOffice.org Base : simplified Chinese
-OpenOffice.org Base : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Base : single sign on options
-OpenOffice.org Base : single-line spacing in text
-OpenOffice.org Base : sizes
-OpenOffice.org Base : sizes;draw objects
-OpenOffice.org Base : sizes;pictures
-OpenOffice.org Base : slanting draw objects
-OpenOffice.org Base : small capitals
-OpenOffice.org Base : small icons
-OpenOffice.org Base : smart tags
-OpenOffice.org Base : smart tags;options
-OpenOffice.org Base : smooth scrolling (Writer)
-OpenOffice.org Base : smoothing filter
-OpenOffice.org Base : snap grid defaults (Writer/Calc)
-OpenOffice.org Base : snapping in presentations and drawings
-OpenOffice.org Base : solarization filter
-OpenOffice.org Base : sort lists
-OpenOffice.org Base : sort lists;copying to in Calc
-OpenOffice.org Base : sorting
-OpenOffice.org Base : sorting;data in forms
-OpenOffice.org Base : sorting;databases
-OpenOffice.org Base : sounds
-OpenOffice.org Base : sounds;inserting and playing
-OpenOffice.org Base : sounds;UNIX
-OpenOffice.org Base : spaces
-OpenOffice.org Base : spaces;displaying (Writer)
-OpenOffice.org Base : spaces;ignoring double
-OpenOffice.org Base : spaces;inserting protected spaces
-OpenOffice.org Base : spaces;showing protected spaces (Writer)
-OpenOffice.org Base : spacing
-OpenOffice.org Base : spacing;between paragraphs in footnotes
-OpenOffice.org Base : spacing;font effects
-OpenOffice.org Base : spacing;lines and paragraphs
-OpenOffice.org Base : spacing;tab stops in text documents
-OpenOffice.org Base : spacing;tabs in presentations
-OpenOffice.org Base : spadmin
-OpenOffice.org Base : special characters
-OpenOffice.org Base : speech bubbles
-OpenOffice.org Base : speed of printing
-OpenOffice.org Base : spellcheck
-OpenOffice.org Base : spellcheck;activating for a language
-OpenOffice.org Base : spellcheck;context menus
-OpenOffice.org Base : spellcheck;default languages
-OpenOffice.org Base : spellcheck;dialog
-OpenOffice.org Base : spellcheck;dictionary of exceptions
-OpenOffice.org Base : spellcheck;ignore list
-OpenOffice.org Base : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Base : spin button creation
-OpenOffice.org Base : spoolfiles with Xprinter
-OpenOffice.org Base : spreadsheets
-OpenOffice.org Base : spreadsheets;as databases (base)
-OpenOffice.org Base : spreadsheets;backgrounds
-OpenOffice.org Base : spreadsheets;copying areas to text documents
-OpenOffice.org Base : spreadsheets;creating/opening
-OpenOffice.org Base : spreadsheets;inserting charts
-OpenOffice.org Base : spreadsheets;inserting database records
-OpenOffice.org Base : spreadsheets;printing
-OpenOffice.org Base : spreadsheets;saving
-OpenOffice.org Base : spreadsheets;saving automatically
-OpenOffice.org Base : spreadsheets;saving in other formats
-OpenOffice.org Base : spreadsheets;sending as e-mail
-OpenOffice.org Base : SQL
-OpenOffice.org Base : SQL;definition
-OpenOffice.org Base : SQL;DISTINCT parameter
-OpenOffice.org Base : SQL;executing SQL commands
-OpenOffice.org Base : SQL;executing SQL statements (Base)
-OpenOffice.org Base : SQL;queries (Base)
-OpenOffice.org Base : square drawings
-OpenOffice.org Base : standard bar on/off
-OpenOffice.org Base : standard filters in databases
-OpenOffice.org Base : standard printer under UNIX
-OpenOffice.org Base : Start Module backing window
-OpenOffice.org Base : start parameters
-OpenOffice.org Base : status bar on/off
-OpenOffice.org Base : stickers
-OpenOffice.org Base : strikethrough
-OpenOffice.org Base : strikethrough;characters
-OpenOffice.org Base : strikethrough;font effects
-OpenOffice.org Base : styles
-OpenOffice.org Base : styles;'changed' message
-OpenOffice.org Base : styles;copying between documents
-OpenOffice.org Base : styles;keyboard shortcuts
-OpenOffice.org Base : styles;organizing
-OpenOffice.org Base : styles;printing styles used in a document
-OpenOffice.org Base : styles;replacing automatically
-OpenOffice.org Base : Styles and Formatting window
-OpenOffice.org Base : Styles and Formatting window;docking
-OpenOffice.org Base : subforms
-OpenOffice.org Base : subforms;creating
-OpenOffice.org Base : subforms;description
-OpenOffice.org Base : submitting forms
-OpenOffice.org Base : suffixes in file formats
-OpenOffice.org Base : support on the Web
-OpenOffice.org Base : synchronizing
-OpenOffice.org Base : synchronizing;labels and business cards
-OpenOffice.org Base : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Base : system address book registration
-OpenOffice.org Base : tab stops
-OpenOffice.org Base : tab stops;displaying (Writer)
-OpenOffice.org Base : tab stops;inserting and editing
-OpenOffice.org Base : tab stops;setting in sheets
-OpenOffice.org Base : tab stops;settings
-OpenOffice.org Base : tab stops;spacing in presentations
-OpenOffice.org Base : tab stops;spacing in text documents
-OpenOffice.org Base : table controls
-OpenOffice.org Base : table controls;form functions
-OpenOffice.org Base : table controls;keyboard-only edit mode
-OpenOffice.org Base : table controls;properties
-OpenOffice.org Base : table views of databases
-OpenOffice.org Base : Table Wizard (Base)
-OpenOffice.org Base : tables
-OpenOffice.org Base : tables;backgrounds
-OpenOffice.org Base : tables;inserting line breaks
-OpenOffice.org Base : tables in databases
-OpenOffice.org Base : tables in databases;access rights to (Base)
-OpenOffice.org Base : tables in databases;adding to queries
-OpenOffice.org Base : tables in databases;browsing and editing
-OpenOffice.org Base : tables in databases;copying database tables (Base)
-OpenOffice.org Base : tables in databases;creating
-OpenOffice.org Base : tables in databases;creating in design view
-OpenOffice.org Base : tables in databases;importing text formats (Base)
-OpenOffice.org Base : tables in databases;joining for queries (Base)
-OpenOffice.org Base : tables in databases;printing queries (Base)
-OpenOffice.org Base : tables in databases;relations (Base)
-OpenOffice.org Base : tables in databases;searching
-OpenOffice.org Base : tables in spreadsheets
-OpenOffice.org Base : tables in spreadsheets;copying data to other applications
-OpenOffice.org Base : tables in spreadsheets;defining borders
-OpenOffice.org Base : tables in spreadsheets;value highlighting
-OpenOffice.org Base : tables in text
-OpenOffice.org Base : tables in text;captions
-OpenOffice.org Base : tables in text;creating automatically
-OpenOffice.org Base : tables in text;default settings
-OpenOffice.org Base : tables in text;defining borders
-OpenOffice.org Base : tables in text;displaying
-OpenOffice.org Base : tables in text;printing
-OpenOffice.org Base : tables in text;protecting cells
-OpenOffice.org Base : tables of contents
-OpenOffice.org Base : tables of contents;unprotecting
-OpenOffice.org Base : tabs
-OpenOffice.org Base : tabs;displaying sheet tabs
-OpenOffice.org Base : tags
-OpenOffice.org Base : tags;definition
-OpenOffice.org Base : tags;META tags
-OpenOffice.org Base : templates
-OpenOffice.org Base : templates;agendas
-OpenOffice.org Base : templates;changing basic fonts
-OpenOffice.org Base : templates;database reports
-OpenOffice.org Base : templates;deleting
-OpenOffice.org Base : templates;editing and saving
-OpenOffice.org Base : templates;faxes
-OpenOffice.org Base : templates;importing and exporting
-OpenOffice.org Base : templates;letters
-OpenOffice.org Base : templates;new documents from templates
-OpenOffice.org Base : templates;opening documents with
-OpenOffice.org Base : templates;organizing
-OpenOffice.org Base : terminology
-OpenOffice.org Base : terminology;general glossary
-OpenOffice.org Base : terminology;Internet glossary
-OpenOffice.org Base : testing XML filters
-OpenOffice.org Base : text
-OpenOffice.org Base : text;animating
-OpenOffice.org Base : text;Asian layout
-OpenOffice.org Base : text;backgrounds
-OpenOffice.org Base : text;bold
-OpenOffice.org Base : text;coloring
-OpenOffice.org Base : text;contours
-OpenOffice.org Base : text;copying by drag and drop
-OpenOffice.org Base : text;CTL languages
-OpenOffice.org Base : text;drawing pictures
-OpenOffice.org Base : text;font effects
-OpenOffice.org Base : text;font sizes
-OpenOffice.org Base : text;font styles
-OpenOffice.org Base : text;fonts and formats
-OpenOffice.org Base : text;Fontwork icons
-OpenOffice.org Base : text;hyperlinks
-OpenOffice.org Base : text;inserting special characters
-OpenOffice.org Base : text;italics
-OpenOffice.org Base : text;kerning
-OpenOffice.org Base : text;language selection
-OpenOffice.org Base : text;line spacing
-OpenOffice.org Base : text;overwriting or inserting
-OpenOffice.org Base : text;placeholders in presentations
-OpenOffice.org Base : text;printing in black
-OpenOffice.org Base : text;replacing with format
-OpenOffice.org Base : text;selection modes
-OpenOffice.org Base : text;shadowed
-OpenOffice.org Base : text;text/draw objects
-OpenOffice.org Base : text attributes
-OpenOffice.org Base : text attributes;hyperlinks
-OpenOffice.org Base : text attributes;undoing
-OpenOffice.org Base : text boxes
-OpenOffice.org Base : text boxes;form functions
-OpenOffice.org Base : text boxes;positioning
-OpenOffice.org Base : text breaks in cells
-OpenOffice.org Base : text colors for better accessibility
-OpenOffice.org Base : text databases (Base)
-OpenOffice.org Base : text documents
-OpenOffice.org Base : text documents;creating/opening
-OpenOffice.org Base : text documents;importing/exporting
-OpenOffice.org Base : text documents;inserting spreadsheet cells
-OpenOffice.org Base : text documents;print settings
-OpenOffice.org Base : text documents;printing
-OpenOffice.org Base : text documents;saving
-OpenOffice.org Base : text documents;saving automatically
-OpenOffice.org Base : text documents;saving in other formats
-OpenOffice.org Base : text documents;sending as e-mail
-OpenOffice.org Base : text effects
-OpenOffice.org Base : text flow
-OpenOffice.org Base : text flow;in cells
-OpenOffice.org Base : text formats
-OpenOffice.org Base : text formats;databases
-OpenOffice.org Base : text formats;pasting
-OpenOffice.org Base : text input fields
-OpenOffice.org Base : text layout for special languages
-OpenOffice.org Base : text objects
-OpenOffice.org Base : text objects;alignment
-OpenOffice.org Base : text objects;draw functions
-OpenOffice.org Base : text objects;fonts
-OpenOffice.org Base : text objects;in presentations and drawings
-OpenOffice.org Base : text overflow in spreadsheet cells
-OpenOffice.org Base : text, see also text documents, paragraphs and characters
-OpenOffice.org Base : TextArt, see Fontwork
-OpenOffice.org Base : textures
-OpenOffice.org Base : textures;inserting from Gallery
-OpenOffice.org Base : textures;on chart bars
-OpenOffice.org Base : Thai
-OpenOffice.org Base : Thai;entering text
-OpenOffice.org Base : Thai;language settings
-OpenOffice.org Base : thesaurus
-OpenOffice.org Base : thesaurus;activating for a language
-OpenOffice.org Base : ticker text
-OpenOffice.org Base : time fields
-OpenOffice.org Base : time fields;form functions
-OpenOffice.org Base : times
-OpenOffice.org Base : times;inserting when printing presentations
-OpenOffice.org Base : times, formats
-OpenOffice.org Base : tips
-OpenOffice.org Base : tips;extended tips in Help
-OpenOffice.org Base : title rows
-OpenOffice.org Base : title rows;printing in OpenOffice.org Math
-OpenOffice.org Base : titles
-OpenOffice.org Base : titles;changing
-OpenOffice.org Base : titles;editing in charts
-OpenOffice.org Base : titles;font effects
-OpenOffice.org Base : titles;formatting automatically
-OpenOffice.org Base : titles;objects
-OpenOffice.org Base : toolbars
-OpenOffice.org Base : toolbars;adding buttons
-OpenOffice.org Base : toolbars;docking/undocking
-OpenOffice.org Base : toolbars;Form Navigation bar
-OpenOffice.org Base : toolbars;viewing/closing
-OpenOffice.org Base : tools bar
-OpenOffice.org Base : tooltips
-OpenOffice.org Base : tooltips;extended tips
-OpenOffice.org Base : tooltips;help
-OpenOffice.org Base : Track changes feature in Microsoft Office
-OpenOffice.org Base : traditional Chinese
-OpenOffice.org Base : traditional Chinese;translating to simplified chinese
-OpenOffice.org Base : transparency
-OpenOffice.org Base : transparency;areas
-OpenOffice.org Base : transparency;off for faster printing
-OpenOffice.org Base : transparency;saving
-OpenOffice.org Base : tree view of Help
-OpenOffice.org Base : typefaces
-OpenOffice.org Base : typefaces;adding under UNIX
-OpenOffice.org Base : typefaces;formats
-OpenOffice.org Base : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Base : typography
-OpenOffice.org Base : typography;Asian
-OpenOffice.org Base : underlining
-OpenOffice.org Base : underlining;AutoFormat function
-OpenOffice.org Base : underlining;characters
-OpenOffice.org Base : underlining;text
-OpenOffice.org Base : undocking windows
-OpenOffice.org Base : undoing
-OpenOffice.org Base : undoing;direct formatting
-OpenOffice.org Base : undoing;editing
-OpenOffice.org Base : undoing;number of steps
-OpenOffice.org Base : ungrouping groups
-OpenOffice.org Base : units
-OpenOffice.org Base : units;converting
-OpenOffice.org Base : units;measurement units
-OpenOffice.org Base : UNO components
-OpenOffice.org Base : UNO components;Extension Manager
-OpenOffice.org Base : UNO components;integrating new
-OpenOffice.org Base : update options
-OpenOffice.org Base : updates
-OpenOffice.org Base : updates;checking automatically
-OpenOffice.org Base : updates;checking manually
-OpenOffice.org Base : updating
-OpenOffice.org Base : updating;fields and charts, automatically (Writer)
-OpenOffice.org Base : updating;links in text documents
-OpenOffice.org Base : updating;links, on opening
-OpenOffice.org Base : updating;templates
-OpenOffice.org Base : URL
-OpenOffice.org Base : URL;changing hyperlink URLs
-OpenOffice.org Base : URL;definition
-OpenOffice.org Base : URL;saving absolute/relative paths
-OpenOffice.org Base : URL;turning off URL recognition
-OpenOffice.org Base : user data
-OpenOffice.org Base : user data;input
-OpenOffice.org Base : user data;removing when saving
-OpenOffice.org Base : user-defined dictionaries
-OpenOffice.org Base : user-defined dictionaries;creating
-OpenOffice.org Base : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Base : user-defined dictionaries;editing
-OpenOffice.org Base : user-defined styles
-OpenOffice.org Base : user-defined styles;automatically replacing
-OpenOffice.org Base : UTF-8/UCS2 support
-OpenOffice.org Base : Validation feature in Microsoft Office
-OpenOffice.org Base : values
-OpenOffice.org Base : values;rounded as shown (Calc)
-OpenOffice.org Base : variables
-OpenOffice.org Base : variables;for paths
-OpenOffice.org Base : VBA code
-OpenOffice.org Base : VBA code;loading/saving documents with VBA code
-OpenOffice.org Base : version management
-OpenOffice.org Base : version numbers of documents
-OpenOffice.org Base : versions
-OpenOffice.org Base : versions;comparing documents
-OpenOffice.org Base : versions;file saving as, restriction
-OpenOffice.org Base : versions;merging document versions
-OpenOffice.org Base : versions;of a document
-OpenOffice.org Base : versions;OpenOffice.org
-OpenOffice.org Base : vertical callouts
-OpenOffice.org Base : vertical scrollbars (Writer)
-OpenOffice.org Base : vertical text boxes
-OpenOffice.org Base : videos
-OpenOffice.org Base : viewing
-OpenOffice.org Base : viewing;databases
-OpenOffice.org Base : viewing;file properties
-OpenOffice.org Base : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Base : viewing;toolbars
-OpenOffice.org Base : views
-OpenOffice.org Base : views;creating database views (Base)
-OpenOffice.org Base : views;defaults
-OpenOffice.org Base : views;full screen
-OpenOffice.org Base : views;icons
-OpenOffice.org Base : views;in 3D
-OpenOffice.org Base : views;scaling
-OpenOffice.org Base : Visual Basic for Applications
-OpenOffice.org Base : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Base : watermarks
-OpenOffice.org Base : web documents
-OpenOffice.org Base : web documents;XForms
-OpenOffice.org Base : Web support
-OpenOffice.org Base : WebCast export
-OpenOffice.org Base : windows
-OpenOffice.org Base : windows;docking
-OpenOffice.org Base : windows;docking definition
-OpenOffice.org Base : windows;hiding/showing/docking
-OpenOffice.org Base : windows;new
-OpenOffice.org Base : wizards
-OpenOffice.org Base : wizards;agendas
-OpenOffice.org Base : wizards;database queries
-OpenOffice.org Base : wizards;database tables (Base)
-OpenOffice.org Base : wizards;databases (Base)
-OpenOffice.org Base : wizards;document converter
-OpenOffice.org Base : wizards;Euro Converter
-OpenOffice.org Base : wizards;faxes
-OpenOffice.org Base : wizards;forms
-OpenOffice.org Base : wizards;letters
-OpenOffice.org Base : wizards;overview
-OpenOffice.org Base : wizards;presentations
-OpenOffice.org Base : wizards;reports
-OpenOffice.org Base : Word documents
-OpenOffice.org Base : Word documents;compatibility
-OpenOffice.org Base : Word documents;saving as
-OpenOffice.org Base : WordArt, see Fontwork
-OpenOffice.org Base : words
-OpenOffice.org Base : words;automatically replacing
-OpenOffice.org Base : words;wrapping in cells
-OpenOffice.org Base : work directory change
-OpenOffice.org Base : Workbook feature in Microsoft Office
-OpenOffice.org Base : Worksheet feature in Microsoft Office
-OpenOffice.org Base : wrapping text
-OpenOffice.org Base : wrapping text;in cells
-OpenOffice.org Base : write protection on/off
-OpenOffice.org Base : writing aids options
-OpenOffice.org Base : WYSIWYG in fonts lists
-OpenOffice.org Base : XForms
-OpenOffice.org Base : XML converters
-OpenOffice.org Base : XML file formats
-OpenOffice.org Base : XML filters
-OpenOffice.org Base : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Base : XML filters;settings
-OpenOffice.org Base : XML Forms
-OpenOffice.org Base : XSLT based filters
-OpenOffice.org Base : XSLT based filters;settings
-OpenOffice.org Base : XSLT filters, see also XML filters
-OpenOffice.org Base : years
-OpenOffice.org Base : years;2-digit options
-OpenOffice.org Base : zero values
-OpenOffice.org Base : zero values;displaying (Calc)
-OpenOffice.org Base : zooming
-OpenOffice.org Base : zooming;page views
-OpenOffice.org Base : zooming;pictures
-OpenOffice.org Base : zooming;status bar
-OpenOffice.org Calc : #N/A error
-OpenOffice.org Calc : #N/A error;assigning to a cell
-OpenOffice.org Calc : #N/A error;recognizing
-OpenOffice.org Calc : #NAME error message
-OpenOffice.org Calc : #REF error message
-OpenOffice.org Calc : 1/2 replacement
-OpenOffice.org Calc : 3D charts
-OpenOffice.org Calc : 3D text creation
-OpenOffice.org Calc : 3D view
-OpenOffice.org Calc : abbreviation replacement
-OpenOffice.org Calc : ABS function
-OpenOffice.org Calc : absolute addresses in spreadsheets
-OpenOffice.org Calc : absolute hyperlinks
-OpenOffice.org Calc : absolute references in spreadsheets
-OpenOffice.org Calc : absolute saving of URLs
-OpenOffice.org Calc : absolute values
-OpenOffice.org Calc : accents
-OpenOffice.org Calc : Access databases (base)
-OpenOffice.org Calc : access rights for database tables (Base)
-OpenOffice.org Calc : accessibility
-OpenOffice.org Calc : accessibility;general shortcuts
-OpenOffice.org Calc : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Calc : accessibility;OpenOffice.org Calc shortcuts
-OpenOffice.org Calc : accessibility;OpenOffice.org features
-OpenOffice.org Calc : accessibility;options
-OpenOffice.org Calc : ACCRINT function
-OpenOffice.org Calc : ACCRINTM function
-OpenOffice.org Calc : accrued interests
-OpenOffice.org Calc : accrued interests;one-off payments
-OpenOffice.org Calc : accrued interests;periodic payments
-OpenOffice.org Calc : accumulated interests
-OpenOffice.org Calc : ACOS function
-OpenOffice.org Calc : ACOSH function
-OpenOffice.org Calc : ACOT function
-OpenOffice.org Calc : ACOTH function
-OpenOffice.org Calc : actions in case of incorrect input
-OpenOffice.org Calc : activating
-OpenOffice.org Calc : activating;context menus
-OpenOffice.org Calc : activating;Error Report Tool
-OpenOffice.org Calc : activating;extended help tips
-OpenOffice.org Calc : activating;plug-ins
-OpenOffice.org Calc : ActiveX control
-OpenOffice.org Calc : Adabas D databases (base)
-OpenOffice.org Calc : add-ins
-OpenOffice.org Calc : add-ins;analysis functions
-OpenOffice.org Calc : add-ins;for programming
-OpenOffice.org Calc : add-ins;functions
-OpenOffice.org Calc : add-ons, see UNO components
-OpenOffice.org Calc : adding
-OpenOffice.org Calc : adding;automatic captions (Writer)
-OpenOffice.org Calc : adding;backgrounds
-OpenOffice.org Calc : adding;buttons in toolbars
-OpenOffice.org Calc : adding;cells in print ranges
-OpenOffice.org Calc : adding;conditions for XForm items
-OpenOffice.org Calc : adding;draw objects
-OpenOffice.org Calc : adding;Fontwork objects
-OpenOffice.org Calc : adding;items in Data Navigator
-OpenOffice.org Calc : adding;namespaces in XForms
-OpenOffice.org Calc : adding;numbers in cell ranges
-OpenOffice.org Calc : adding;paragraph borders
-OpenOffice.org Calc : adding;pictures from Gallery
-OpenOffice.org Calc : adding;pictures in Gallery
-OpenOffice.org Calc : adding;plug-ins
-OpenOffice.org Calc : adding;push buttons
-OpenOffice.org Calc : adding;specified numbers
-OpenOffice.org Calc : adding;sum icon
-OpenOffice.org Calc : adding;table borders
-OpenOffice.org Calc : adding;textures on chart bars
-OpenOffice.org Calc : additional selection mode
-OpenOffice.org Calc : address books
-OpenOffice.org Calc : address books;LDAP server (Base)
-OpenOffice.org Calc : address books;registering
-OpenOffice.org Calc : ADDRESS function
-OpenOffice.org Calc : address labels from databases
-OpenOffice.org Calc : addressing
-OpenOffice.org Calc : addressing;automatic
-OpenOffice.org Calc : addressing;by defined names
-OpenOffice.org Calc : addressing;relative and absolute
-OpenOffice.org Calc : adjusting array ranges
-OpenOffice.org Calc : ADO databases (Base)
-OpenOffice.org Calc : advanced filters
-OpenOffice.org Calc : Agenda Wizard
-OpenOffice.org Calc : aging filter
-OpenOffice.org Calc : algebraic signs
-OpenOffice.org Calc : aligning
-OpenOffice.org Calc : aligning;2D charts
-OpenOffice.org Calc : aligning;cells
-OpenOffice.org Calc : aligning;objects
-OpenOffice.org Calc : aligning;paragraphs
-OpenOffice.org Calc : aligning;tables in text
-OpenOffice.org Calc : aligning;text objects
-OpenOffice.org Calc : aligning;titles in charts
-OpenOffice.org Calc : allowances
-OpenOffice.org Calc : allowed cell names
-OpenOffice.org Calc : alternative fonts
-OpenOffice.org Calc : AMORDEGRC function
-OpenOffice.org Calc : AMORLINC function
-OpenOffice.org Calc : amortization installment
-OpenOffice.org Calc : amortizations, see also depreciations
-OpenOffice.org Calc : amount received for fixed-interest securities
-OpenOffice.org Calc : ampersand symbol, see also operators
-OpenOffice.org Calc : analysis functions
-OpenOffice.org Calc : anchors
-OpenOffice.org Calc : anchors;changing
-OpenOffice.org Calc : anchors;displaying (Calc)
-OpenOffice.org Calc : anchors;types/positions for draw objects
-OpenOffice.org Calc : AND function
-OpenOffice.org Calc : animations
-OpenOffice.org Calc : animations;accessibility options
-OpenOffice.org Calc : annual net interest rates
-OpenOffice.org Calc : annual return on treasury bills
-OpenOffice.org Calc : annuities
-OpenOffice.org Calc : appearance options
-OpenOffice.org Calc : appending sheets
-OpenOffice.org Calc : applet insertion
-OpenOffice.org Calc : applying
-OpenOffice.org Calc : applying;advanced filters
-OpenOffice.org Calc : applying;automatic formatting
-OpenOffice.org Calc : applying;cell formats
-OpenOffice.org Calc : applying;formatting themes
-OpenOffice.org Calc : applying;languages, to selected text
-OpenOffice.org Calc : applying;sort lists
-OpenOffice.org Calc : Arabic
-OpenOffice.org Calc : Arabic;entering text
-OpenOffice.org Calc : Arabic;language settings
-OpenOffice.org Calc : ARABIC function
-OpenOffice.org Calc : area charts
-OpenOffice.org Calc : areas
-OpenOffice.org Calc : areas;bitmap patterns
-OpenOffice.org Calc : areas;hatched/dotted
-OpenOffice.org Calc : areas;shadows
-OpenOffice.org Calc : areas;slanting
-OpenOffice.org Calc : areas;styles
-OpenOffice.org Calc : areas;transparency
-OpenOffice.org Calc : AREAS function
-OpenOffice.org Calc : areas, see also cell ranges
-OpenOffice.org Calc : arguments in command line
-OpenOffice.org Calc : arithmetic declining depreciations
-OpenOffice.org Calc : arithmetic lists
-OpenOffice.org Calc : arithmetic-degressive depreciations
-OpenOffice.org Calc : arithmetical operators
-OpenOffice.org Calc : arranging
-OpenOffice.org Calc : arranging;objects
-OpenOffice.org Calc : array formulas
-OpenOffice.org Calc : arrows
-OpenOffice.org Calc : arrows;defining arrow heads
-OpenOffice.org Calc : arrows;defining arrow lines
-OpenOffice.org Calc : arrows;drawing in text
-OpenOffice.org Calc : ASC function
-OpenOffice.org Calc : ASCII
-OpenOffice.org Calc : ASCII;definition
-OpenOffice.org Calc : Asian languages
-OpenOffice.org Calc : Asian languages;enabling
-OpenOffice.org Calc : Asian languages;sorting
-OpenOffice.org Calc : Asian Phonetic Guide
-OpenOffice.org Calc : Asian typography
-OpenOffice.org Calc : ASIN function
-OpenOffice.org Calc : ASINH function
-OpenOffice.org Calc : assigning scripts
-OpenOffice.org Calc : assistive technology in OpenOffice.org
-OpenOffice.org Calc : ATAN function
-OpenOffice.org Calc : ATAN2 function
-OpenOffice.org Calc : ATANH function
-OpenOffice.org Calc : attaching toolbars
-OpenOffice.org Calc : attachments in e-mails
-OpenOffice.org Calc : attributes
-OpenOffice.org Calc : attributes;cells
-OpenOffice.org Calc : audio
-OpenOffice.org Calc : audio;inserting
-OpenOffice.org Calc : audio;UNIX
-OpenOffice.org Calc : auto filling cells
-OpenOffice.org Calc : auto reloading HTML documents
-OpenOffice.org Calc : AutoAbstract function for sending text to presentations
-OpenOffice.org Calc : AutoCalculate function in sheets
-OpenOffice.org Calc : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Calc : AutoComplete function in text and list boxes
-OpenOffice.org Calc : AutoCorrect function
-OpenOffice.org Calc : AutoCorrect function;cell contents
-OpenOffice.org Calc : AutoCorrect function;context menu
-OpenOffice.org Calc : AutoCorrect function;options
-OpenOffice.org Calc : AutoCorrect function;pictures and frames
-OpenOffice.org Calc : AutoCorrect function;quotes
-OpenOffice.org Calc : AutoCorrect function;replacement table
-OpenOffice.org Calc : AutoCorrect function;smart tags
-OpenOffice.org Calc : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Calc : AutoCorrect function;URL recognition
-OpenOffice.org Calc : AutoFill function
-OpenOffice.org Calc : AutoFilter function
-OpenOffice.org Calc : AutoFilter function;applying
-OpenOffice.org Calc : AutoFilter function;subtotals
-OpenOffice.org Calc : AutoFormat function
-OpenOffice.org Calc : AutoFormat function;defining and applying formats
-OpenOffice.org Calc : AutoFormat function;switching on and off
-OpenOffice.org Calc : AutoInput function on/off
-OpenOffice.org Calc : automatic addressing in tables
-OpenOffice.org Calc : automatic captions (Writer)
-OpenOffice.org Calc : automatic control focus
-OpenOffice.org Calc : automatic date updates
-OpenOffice.org Calc : automatic formatting in spreadsheets
-OpenOffice.org Calc : automatic hyperlink formatting
-OpenOffice.org Calc : automatic hyphenation in spreadsheets
-OpenOffice.org Calc : automatic line breaks
-OpenOffice.org Calc : automatic lines/borders in text
-OpenOffice.org Calc : automatic saving
-OpenOffice.org Calc : AutoPilots, see wizards
-OpenOffice.org Calc : AutoShapes feature in Microsoft Office
-OpenOffice.org Calc : AVEDEV function
-OpenOffice.org Calc : AVERAGE function
-OpenOffice.org Calc : AVERAGEA function
-OpenOffice.org Calc : averages
-OpenOffice.org Calc : averages;in Calc databases
-OpenOffice.org Calc : averages;statistical functions
-OpenOffice.org Calc : averages in charts
-OpenOffice.org Calc : axes
-OpenOffice.org Calc : axes;better scaling
-OpenOffice.org Calc : axes;formatting
-OpenOffice.org Calc : axes;formatting grids
-OpenOffice.org Calc : axes;inserting grids
-OpenOffice.org Calc : axes;interval marks
-OpenOffice.org Calc : axes;showing axes in charts
-OpenOffice.org Calc : axes in charts
-OpenOffice.org Calc : B function
-OpenOffice.org Calc : backgrounds
-OpenOffice.org Calc : backgrounds;cells and pages
-OpenOffice.org Calc : backgrounds;defining colors/pictures
-OpenOffice.org Calc : backgrounds;frames/sections/indexes
-OpenOffice.org Calc : backgrounds;inserting from Gallery
-OpenOffice.org Calc : backgrounds;printing
-OpenOffice.org Calc : backing window
-OpenOffice.org Calc : backups
-OpenOffice.org Calc : backups;automatic
-OpenOffice.org Calc : backups;documents
-OpenOffice.org Calc : BAHTTEXT function
-OpenOffice.org Calc : bar charts
-OpenOffice.org Calc : BASE function
-OpenOffice.org Calc : base-10 logarithm
-OpenOffice.org Calc : Basic
-OpenOffice.org Calc : Basic;fonts for source display
-OpenOffice.org Calc : Basic;programming
-OpenOffice.org Calc : Basic;recording macros
-OpenOffice.org Calc : Basic;scripting
-OpenOffice.org Calc : basic fonts
-OpenOffice.org Calc : Basic IDE for user-defined functions
-OpenOffice.org Calc : BeanShell scripting
-OpenOffice.org Calc : Bessel functions
-OpenOffice.org Calc : BETADIST function
-OpenOffice.org Calc : BETAINV function
-OpenOffice.org Calc : Bézier curves
-OpenOffice.org Calc : Bézier curves;control points in presentations
-OpenOffice.org Calc : bi-directional writing
-OpenOffice.org Calc : BIN2DEC function
-OpenOffice.org Calc : BIN2HEX function
-OpenOffice.org Calc : BIN2OCT function
-OpenOffice.org Calc : binary system
-OpenOffice.org Calc : binary system;converting to
-OpenOffice.org Calc : binding space
-OpenOffice.org Calc : BINOMDIST function
-OpenOffice.org Calc : bitmaps
-OpenOffice.org Calc : bitmaps;inserting and editing
-OpenOffice.org Calc : bitmaps;off for faster printing
-OpenOffice.org Calc : bitmaps;patterns
-OpenOffice.org Calc : black and white printing
-OpenOffice.org Calc : black printing in Calc
-OpenOffice.org Calc : blank cell contents
-OpenOffice.org Calc : block selection mode
-OpenOffice.org Calc : bold
-OpenOffice.org Calc : bold;AutoFormat function
-OpenOffice.org Calc : bold;text
-OpenOffice.org Calc : bookmarks
-OpenOffice.org Calc : bookmarks;Help
-OpenOffice.org Calc : borders
-OpenOffice.org Calc : borders;arranging
-OpenOffice.org Calc : borders;cells
-OpenOffice.org Calc : borders;cells and pages
-OpenOffice.org Calc : borders;cells on screen (Calc)
-OpenOffice.org Calc : borders;for paragraphs
-OpenOffice.org Calc : borders;for tables
-OpenOffice.org Calc : borders;printing cells
-OpenOffice.org Calc : borders;shadows
-OpenOffice.org Calc : borders;table boundaries (Writer)
-OpenOffice.org Calc : borders, see also frames
-OpenOffice.org Calc : bound fields
-OpenOffice.org Calc : bound fields;controls
-OpenOffice.org Calc : boundaries of tables (Writer)
-OpenOffice.org Calc : break display (Writer)
-OpenOffice.org Calc : breaks in cells
-OpenOffice.org Calc : brochures
-OpenOffice.org Calc : brochures;printing several
-OpenOffice.org Calc : build numbers of OpenOffice.org
-OpenOffice.org Calc : bullet lists
-OpenOffice.org Calc : bullet lists;formatting options
-OpenOffice.org Calc : bullets
-OpenOffice.org Calc : bullets;paragraphs
-OpenOffice.org Calc : bullets;replacing
-OpenOffice.org Calc : bullets;turning off
-OpenOffice.org Calc : business cards
-OpenOffice.org Calc : business cards;creating and synchronizing
-OpenOffice.org Calc : business cards;using templates
-OpenOffice.org Calc : button bars, see toolbars
-OpenOffice.org Calc : buttons
-OpenOffice.org Calc : buttons;adding push buttons
-OpenOffice.org Calc : buttons;big/small
-OpenOffice.org Calc : buttons;editing hyperlink buttons
-OpenOffice.org Calc : buttons;form functions
-OpenOffice.org Calc : buttons;toolbars
-OpenOffice.org Calc : cache for graphics
-OpenOffice.org Calc : calculating
-OpenOffice.org Calc : calculating;accumulated interests
-OpenOffice.org Calc : calculating;annual net interest rates
-OpenOffice.org Calc : calculating;annuities
-OpenOffice.org Calc : calculating;arithmetic-degressive depreciations
-OpenOffice.org Calc : calculating;auto calculating sheets
-OpenOffice.org Calc : calculating;averages in Calc databases
-OpenOffice.org Calc : calculating;conditional calculations
-OpenOffice.org Calc : calculating;constant interest rates
-OpenOffice.org Calc : calculating;Data Pilot
-OpenOffice.org Calc : calculating;depreciations
-OpenOffice.org Calc : calculating;durations
-OpenOffice.org Calc : calculating;future values
-OpenOffice.org Calc : calculating;geometric-degressive depreciations
-OpenOffice.org Calc : calculating;interests for unchanged amortization installments
-OpenOffice.org Calc : calculating;internal rates of return, irregular payments
-OpenOffice.org Calc : calculating;internal rates of return, regular payments
-OpenOffice.org Calc : calculating;iterative references (Calc)
-OpenOffice.org Calc : calculating;linear depreciations
-OpenOffice.org Calc : calculating;modified internal rates of return
-OpenOffice.org Calc : calculating;net present values
-OpenOffice.org Calc : calculating;nominal interest rates
-OpenOffice.org Calc : calculating;number of payment periods
-OpenOffice.org Calc : calculating;present values
-OpenOffice.org Calc : calculating;rates of return
-OpenOffice.org Calc : calculating;regression curves
-OpenOffice.org Calc : calculating;rounded off values
-OpenOffice.org Calc : calculating;series
-OpenOffice.org Calc : calculating;spreadsheets
-OpenOffice.org Calc : calculating;sums in Calc databases
-OpenOffice.org Calc : calculating;time differences
-OpenOffice.org Calc : calculating;total amortizement rates
-OpenOffice.org Calc : calculating;variable declining depreciations
-OpenOffice.org Calc : calculating;variables in equations
-OpenOffice.org Calc : calculating;with formulas
-OpenOffice.org Calc : callouts
-OpenOffice.org Calc : callouts;drawings
-OpenOffice.org Calc : capital letters
-OpenOffice.org Calc : capital letters;AutoCorrect function
-OpenOffice.org Calc : capital letters;AutoInput function
-OpenOffice.org Calc : capital letters;AutoInput function (in cells)
-OpenOffice.org Calc : capital letters;font effects
-OpenOffice.org Calc : captions
-OpenOffice.org Calc : captions;automatic captions (Writer)
-OpenOffice.org Calc : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Calc : captions, see also labels/callouts
-OpenOffice.org Calc : cascading update (Base)
-OpenOffice.org Calc : case sensitivity
-OpenOffice.org Calc : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Calc : case sensitivity;searching
-OpenOffice.org Calc : categories of functions
-OpenOffice.org Calc : CEILING function
-OpenOffice.org Calc : cell attributes
-OpenOffice.org Calc : cell contents
-OpenOffice.org Calc : cell contents;AutoCalculate function
-OpenOffice.org Calc : cell contents;deleting
-OpenOffice.org Calc : cell contents;no text
-OpenOffice.org Calc : cell contents;numbers
-OpenOffice.org Calc : cell contents;recalculating
-OpenOffice.org Calc : cell contents;searching in Calc databases
-OpenOffice.org Calc : cell contents;testing for references
-OpenOffice.org Calc : cell contents;text
-OpenOffice.org Calc : cell formats
-OpenOffice.org Calc : cell formats;assigning by formulas
-OpenOffice.org Calc : cell formats;conditional
-OpenOffice.org Calc : cell formats;text/numbers
-OpenOffice.org Calc : CELL function
-OpenOffice.org Calc : cell heights
-OpenOffice.org Calc : cell information
-OpenOffice.org Calc : cell input
-OpenOffice.org Calc : cell input;AutoInput function
-OpenOffice.org Calc : cell links search
-OpenOffice.org Calc : cell merges
-OpenOffice.org Calc : cell names
-OpenOffice.org Calc : cell names;defining/addressing
-OpenOffice.org Calc : cell protection
-OpenOffice.org Calc : cell protection;enabling
-OpenOffice.org Calc : cell protection;unprotecting
-OpenOffice.org Calc : cell ranges
-OpenOffice.org Calc : cell ranges;combining
-OpenOffice.org Calc : cell ranges;creating names automatically
-OpenOffice.org Calc : cell ranges;defining names
-OpenOffice.org Calc : cell ranges;filtering
-OpenOffice.org Calc : cell ranges;inserting named ranges
-OpenOffice.org Calc : cell ranges;printing
-OpenOffice.org Calc : cell ranges;selecting for data entries
-OpenOffice.org Calc : cell references
-OpenOffice.org Calc : cell references;showing
-OpenOffice.org Calc : cell styles
-OpenOffice.org Calc : cell styles;assigning by formulas
-OpenOffice.org Calc : cell styles;copying
-OpenOffice.org Calc : cell styles;selecting
-OpenOffice.org Calc : cell widths
-OpenOffice.org Calc : cells
-OpenOffice.org Calc : cells;aligning
-OpenOffice.org Calc : cells;AutoInput function of text
-OpenOffice.org Calc : cells;autorefreshing traces
-OpenOffice.org Calc : cells;backgrounds
-OpenOffice.org Calc : cells;borders
-OpenOffice.org Calc : cells;changing text/number formats
-OpenOffice.org Calc : cells;coloring (Calc)
-OpenOffice.org Calc : cells;conditional formatting
-OpenOffice.org Calc : cells;copying/deleting/formatting/moving
-OpenOffice.org Calc : cells;currency formats
-OpenOffice.org Calc : cells;cursor positions after input (Calc)
-OpenOffice.org Calc : cells;date and time formats
-OpenOffice.org Calc : cells;defining input help
-OpenOffice.org Calc : cells;defining names
-OpenOffice.org Calc : cells;deleting cells
-OpenOffice.org Calc : cells;deleting contents
-OpenOffice.org Calc : cells;filling automatically
-OpenOffice.org Calc : cells;formatting dialog
-OpenOffice.org Calc : cells;formatting without effect (Calc)
-OpenOffice.org Calc : cells;heights and widths
-OpenOffice.org Calc : cells;hiding for printing
-OpenOffice.org Calc : cells;inserting
-OpenOffice.org Calc : cells;Internet references
-OpenOffice.org Calc : cells;invalid data
-OpenOffice.org Calc : cells;line breaks
-OpenOffice.org Calc : cells;linked to controls
-OpenOffice.org Calc : cells;merging/unmerging
-OpenOffice.org Calc : cells;moving by drag and drop
-OpenOffice.org Calc : cells;notes
-OpenOffice.org Calc : cells;number formats
-OpenOffice.org Calc : cells;number of
-OpenOffice.org Calc : cells;operating in another document
-OpenOffice.org Calc : cells;pasting
-OpenOffice.org Calc : cells;print ranges
-OpenOffice.org Calc : cells;printing grids
-OpenOffice.org Calc : cells;protecting
-OpenOffice.org Calc : cells;references
-OpenOffice.org Calc : cells;referencing by drag and drop
-OpenOffice.org Calc : cells;refreshing traces
-OpenOffice.org Calc : cells;removing dependents
-OpenOffice.org Calc : cells;removing precedents
-OpenOffice.org Calc : cells;removing traces
-OpenOffice.org Calc : cells;resetting formats
-OpenOffice.org Calc : cells;rotating text
-OpenOffice.org Calc : cells;selecting
-OpenOffice.org Calc : cells;showing grid lines (Calc)
-OpenOffice.org Calc : cells;text breaks
-OpenOffice.org Calc : cells;text super/sub
-OpenOffice.org Calc : cells;trace fill mode
-OpenOffice.org Calc : cells;tracing dependents
-OpenOffice.org Calc : cells;tracing errors
-OpenOffice.org Calc : cells;tracing precedents
-OpenOffice.org Calc : cells;validity
-OpenOffice.org Calc : centered text
-OpenOffice.org Calc : centimeters
-OpenOffice.org Calc : certificates
-OpenOffice.org Calc : Change Case feature in Microsoft Office
-OpenOffice.org Calc : changes
-OpenOffice.org Calc : changes;accepting or rejecting
-OpenOffice.org Calc : changes;comparing to original
-OpenOffice.org Calc : changes;protecting
-OpenOffice.org Calc : changes;recording
-OpenOffice.org Calc : changes;review function
-OpenOffice.org Calc : changes;showing
-OpenOffice.org Calc : changing
-OpenOffice.org Calc : changing;currency formats
-OpenOffice.org Calc : changing;data binding of XForms
-OpenOffice.org Calc : changing;dates, automatically
-OpenOffice.org Calc : changing;default templates
-OpenOffice.org Calc : changing;document titles
-OpenOffice.org Calc : changing;file associations in Setup program
-OpenOffice.org Calc : changing;hyperlink text/formats/URLs
-OpenOffice.org Calc : changing;icon sizes
-OpenOffice.org Calc : changing;input in cells
-OpenOffice.org Calc : changing;keyboard
-OpenOffice.org Calc : changing;links
-OpenOffice.org Calc : changing;menus
-OpenOffice.org Calc : changing;number of decimal places
-OpenOffice.org Calc : changing;object sizes
-OpenOffice.org Calc : changing;row heights/column widths
-OpenOffice.org Calc : changing;sheet names
-OpenOffice.org Calc : changing;sheet protection
-OpenOffice.org Calc : changing;table views
-OpenOffice.org Calc : changing;toolbars
-OpenOffice.org Calc : changing;work directory
-OpenOffice.org Calc : changing, see also editing and replacing
-OpenOffice.org Calc : CHAR function
-OpenOffice.org Calc : character styles
-OpenOffice.org Calc : character styles;language selection
-OpenOffice.org Calc : characters
-OpenOffice.org Calc : characters;alternative fonts
-OpenOffice.org Calc : characters;Asian layout
-OpenOffice.org Calc : characters;bold
-OpenOffice.org Calc : characters;coloring
-OpenOffice.org Calc : characters;contours
-OpenOffice.org Calc : characters;displaying only on screen (Writer)
-OpenOffice.org Calc : characters;enabling CTL and Asian characters
-OpenOffice.org Calc : characters;font effects
-OpenOffice.org Calc : characters;fonts and formats
-OpenOffice.org Calc : characters;hyperlinks
-OpenOffice.org Calc : characters;italics
-OpenOffice.org Calc : characters;language selection
-OpenOffice.org Calc : characters;shadowed
-OpenOffice.org Calc : characters;spacing
-OpenOffice.org Calc : characters;special
-OpenOffice.org Calc : characters;superscript/subscript
-OpenOffice.org Calc : characters;underlining
-OpenOffice.org Calc : charcoal sketches filter
-OpenOffice.org Calc : chart legends
-OpenOffice.org Calc : chart legends;hiding
-OpenOffice.org Calc : chart legends;showing icons with labels
-OpenOffice.org Calc : chart types
-OpenOffice.org Calc : chart types;area
-OpenOffice.org Calc : chart types;column and bar
-OpenOffice.org Calc : chart types;column and line
-OpenOffice.org Calc : chart types;line
-OpenOffice.org Calc : chart types;net
-OpenOffice.org Calc : chart types;pie/donut
-OpenOffice.org Calc : chart types;stock
-OpenOffice.org Calc : chart types;XY (scatter)
-OpenOffice.org Calc : charts
-OpenOffice.org Calc : charts;3D views
-OpenOffice.org Calc : charts;aligning
-OpenOffice.org Calc : charts;arranging within stacks
-OpenOffice.org Calc : charts;bars with textures
-OpenOffice.org Calc : charts;choosing chart types
-OpenOffice.org Calc : charts;colors
-OpenOffice.org Calc : charts;copying with link to source cell range
-OpenOffice.org Calc : charts;data labels
-OpenOffice.org Calc : charts;displaying (Calc)
-OpenOffice.org Calc : charts;editing axes
-OpenOffice.org Calc : charts;editing data
-OpenOffice.org Calc : charts;editing legends
-OpenOffice.org Calc : charts;editing titles
-OpenOffice.org Calc : charts;formatting areas
-OpenOffice.org Calc : charts;formatting floors
-OpenOffice.org Calc : charts;formatting walls
-OpenOffice.org Calc : charts;inserting
-OpenOffice.org Calc : charts;overview
-OpenOffice.org Calc : charts;printing
-OpenOffice.org Calc : charts;properties
-OpenOffice.org Calc : charts;reorganizing
-OpenOffice.org Calc : charts;scaling axes
-OpenOffice.org Calc : charts;scaling text
-OpenOffice.org Calc : charts;shortcuts
-OpenOffice.org Calc : charts;showing axes
-OpenOffice.org Calc : charts;updating automatically (Writer)
-OpenOffice.org Calc : check box creation
-OpenOffice.org Calc : CHIDIST function
-OpenOffice.org Calc : CHIINV function
-OpenOffice.org Calc : Chinese writing systems
-OpenOffice.org Calc : CHITEST function
-OpenOffice.org Calc : CHOOSE function
-OpenOffice.org Calc : choosing printers
-OpenOffice.org Calc : circle drawings
-OpenOffice.org Calc : CLEAN function
-OpenOffice.org Calc : clearing, see deleting
-OpenOffice.org Calc : Client Side ImageMap
-OpenOffice.org Calc : clipboard
-OpenOffice.org Calc : clipboard;cutting
-OpenOffice.org Calc : clipboard;pasting
-OpenOffice.org Calc : clipboard;pasting formatted/unformatted text
-OpenOffice.org Calc : clipboard;selection clipboard
-OpenOffice.org Calc : clipboard;Unix
-OpenOffice.org Calc : closing
-OpenOffice.org Calc : closing;documents
-OpenOffice.org Calc : closing;toolbars
-OpenOffice.org Calc : CODE function
-OpenOffice.org Calc : coefficient of correlation
-OpenOffice.org Calc : color bar
-OpenOffice.org Calc : colors
-OpenOffice.org Calc : colors;adding
-OpenOffice.org Calc : colors;appearance
-OpenOffice.org Calc : colors;backgrounds
-OpenOffice.org Calc : colors;charts
-OpenOffice.org Calc : colors;fill format
-OpenOffice.org Calc : colors;fonts
-OpenOffice.org Calc : colors;grid lines and cells (Calc)
-OpenOffice.org Calc : colors;models
-OpenOffice.org Calc : colors;not printing
-OpenOffice.org Calc : colors;number formats
-OpenOffice.org Calc : colors;printing in grayscale
-OpenOffice.org Calc : colors;restriction (Calc)
-OpenOffice.org Calc : colors;selection
-OpenOffice.org Calc : column and line charts
-OpenOffice.org Calc : column breaks
-OpenOffice.org Calc : column breaks;deleting
-OpenOffice.org Calc : column breaks;inserting
-OpenOffice.org Calc : column charts
-OpenOffice.org Calc : COLUMN function
-OpenOffice.org Calc : column headers
-OpenOffice.org Calc : column headers;displaying (Calc)
-OpenOffice.org Calc : column headers;hiding
-OpenOffice.org Calc : column headers;highlighting (Calc)
-OpenOffice.org Calc : column headers;using in formulas
-OpenOffice.org Calc : column widths
-OpenOffice.org Calc : columns
-OpenOffice.org Calc : columns;AutoFilter function
-OpenOffice.org Calc : columns;deleting
-OpenOffice.org Calc : columns;finding labels automatically
-OpenOffice.org Calc : columns;freezing
-OpenOffice.org Calc : columns;hiding
-OpenOffice.org Calc : columns;inserting
-OpenOffice.org Calc : columns;optimal widths
-OpenOffice.org Calc : columns;repeating when printing
-OpenOffice.org Calc : columns;setting with the mouse
-OpenOffice.org Calc : columns;swap with rows
-OpenOffice.org Calc : columns;widths
-OpenOffice.org Calc : COLUMNS function
-OpenOffice.org Calc : COMBIN function
-OpenOffice.org Calc : COMBINA function
-OpenOffice.org Calc : combination charts
-OpenOffice.org Calc : combining
-OpenOffice.org Calc : combining;cell ranges
-OpenOffice.org Calc : combo box creation
-OpenOffice.org Calc : comma separated files and values
-OpenOffice.org Calc : command button creation
-OpenOffice.org Calc : command buttons, see push buttons
-OpenOffice.org Calc : command line parameters
-OpenOffice.org Calc : commands
-OpenOffice.org Calc : commands;not visible
-OpenOffice.org Calc : commands;SQL
-OpenOffice.org Calc : comments
-OpenOffice.org Calc : comments;on cells
-OpenOffice.org Calc : comments;on changes
-OpenOffice.org Calc : comments feature in Microsoft Office
-OpenOffice.org Calc : common terms
-OpenOffice.org Calc : common terms;Chinese dictionary
-OpenOffice.org Calc : common terms;glossaries
-OpenOffice.org Calc : common terms;Internet glossary
-OpenOffice.org Calc : Compare and Merge feature in Microsoft Office
-OpenOffice.org Calc : comparisons
-OpenOffice.org Calc : comparisons;document versions
-OpenOffice.org Calc : comparisons;operators in Calc
-OpenOffice.org Calc : comparisons;operators in default filter dialog
-OpenOffice.org Calc : compatibility settings for MS Word import
-OpenOffice.org Calc : complete screen view
-OpenOffice.org Calc : COMPLEX function
-OpenOffice.org Calc : complex numbers in analysis functions
-OpenOffice.org Calc : complex text layout
-OpenOffice.org Calc : complex text layout;definition
-OpenOffice.org Calc : complex text layout;enabling
-OpenOffice.org Calc : compose key to insert special characters
-OpenOffice.org Calc : CONCATENATE function
-OpenOffice.org Calc : concatenation, see ampersand symbol
-OpenOffice.org Calc : conditional calculations with arrays
-OpenOffice.org Calc : conditional formatting
-OpenOffice.org Calc : conditional formatting;cells
-OpenOffice.org Calc : conditional formatting;conditions
-OpenOffice.org Calc : conditional separators
-OpenOffice.org Calc : conditions
-OpenOffice.org Calc : conditions;in number formats
-OpenOffice.org Calc : conditions;items in Data Navigator
-OpenOffice.org Calc : CONFIDENCE function
-OpenOffice.org Calc : Configuration Manager
-OpenOffice.org Calc : configuring
-OpenOffice.org Calc : configuring;fax icon
-OpenOffice.org Calc : configuring;OpenOffice.org
-OpenOffice.org Calc : configuring;toolbars
-OpenOffice.org Calc : connections to data sources (Base)
-OpenOffice.org Calc : consolidating data
-OpenOffice.org Calc : constant interest rates
-OpenOffice.org Calc : constants definition
-OpenOffice.org Calc : contents protection
-OpenOffice.org Calc : context menus
-OpenOffice.org Calc : contours of text
-OpenOffice.org Calc : control point display in presentations
-OpenOffice.org Calc : controls
-OpenOffice.org Calc : controls;activating in forms
-OpenOffice.org Calc : controls;adding to documents
-OpenOffice.org Calc : controls;arranging in forms
-OpenOffice.org Calc : controls;arranging within stacks
-OpenOffice.org Calc : controls;assigning data sources
-OpenOffice.org Calc : controls;bound fields/list contents/linked cells
-OpenOffice.org Calc : controls;events
-OpenOffice.org Calc : controls;focus
-OpenOffice.org Calc : controls;formatted fields
-OpenOffice.org Calc : controls;grouping
-OpenOffice.org Calc : controls;hidden
-OpenOffice.org Calc : controls;inserting
-OpenOffice.org Calc : controls;multi-line titles
-OpenOffice.org Calc : controls;positions and sizes
-OpenOffice.org Calc : controls;printing
-OpenOffice.org Calc : controls;properties of form controls
-OpenOffice.org Calc : controls;properties of table controls
-OpenOffice.org Calc : controls;reference by SQL
-OpenOffice.org Calc : controls;rich text control
-OpenOffice.org Calc : controls;select mode
-OpenOffice.org Calc : controls;showing (Writer)
-OpenOffice.org Calc : CONVERT function
-OpenOffice.org Calc : CONVERT_ADD function
-OpenOffice.org Calc : converters
-OpenOffice.org Calc : converters;Euro converter
-OpenOffice.org Calc : converters;PostScript, UNIX
-OpenOffice.org Calc : converters;XML
-OpenOffice.org Calc : converting
-OpenOffice.org Calc : converting;binary numbers, into decimal numbers
-OpenOffice.org Calc : converting;binary numbers, into hexadecimal numbers
-OpenOffice.org Calc : converting;binary numbers, into octal numbers
-OpenOffice.org Calc : converting;decimal fractions, into decimal numbers
-OpenOffice.org Calc : converting;decimal fractions, into mixed decimal fractions
-OpenOffice.org Calc : converting;decimal numbers, into binary numbers
-OpenOffice.org Calc : converting;decimal numbers, into hexadecimal numbers
-OpenOffice.org Calc : converting;decimal numbers, into octal numbers
-OpenOffice.org Calc : converting;degrees, into radians
-OpenOffice.org Calc : converting;Hangul/Hanja
-OpenOffice.org Calc : converting;hexadecimal numbers, into binary numbers
-OpenOffice.org Calc : converting;hexadecimal numbers, into decimal numbers
-OpenOffice.org Calc : converting;hexadecimal numbers, into octal numbers
-OpenOffice.org Calc : converting;metrics
-OpenOffice.org Calc : converting;Microsoft documents
-OpenOffice.org Calc : converting;octal numbers, into binary numbers
-OpenOffice.org Calc : converting;octal numbers, into decimal numbers
-OpenOffice.org Calc : converting;octal numbers, into hexadecimal numbers
-OpenOffice.org Calc : converting;OpenOffice.org documents
-OpenOffice.org Calc : converting;Pocket PC formats
-OpenOffice.org Calc : converting;radians, into degrees
-OpenOffice.org Calc : converting;random variables, into normalized values
-OpenOffice.org Calc : copies
-OpenOffice.org Calc : copies;printing
-OpenOffice.org Calc : copying
-OpenOffice.org Calc : copying;array formulas
-OpenOffice.org Calc : copying;by drag and drop
-OpenOffice.org Calc : copying;cell styles
-OpenOffice.org Calc : copying;data from text documents
-OpenOffice.org Calc : copying;datasource records in spreadsheets
-OpenOffice.org Calc : copying;draw objects
-OpenOffice.org Calc : copying;draw objects between documents
-OpenOffice.org Calc : copying;formatting
-OpenOffice.org Calc : copying;formulas
-OpenOffice.org Calc : copying;from data source view
-OpenOffice.org Calc : copying;from Gallery
-OpenOffice.org Calc : copying;in Unix
-OpenOffice.org Calc : copying;pictures, between documents
-OpenOffice.org Calc : copying;sheet areas, to text documents
-OpenOffice.org Calc : copying;spreadsheets
-OpenOffice.org Calc : copying;to Gallery
-OpenOffice.org Calc : copying;values, to multiple sheets
-OpenOffice.org Calc : copying;visible cells only
-OpenOffice.org Calc : copyright for OpenOffice.org
-OpenOffice.org Calc : corner roundings
-OpenOffice.org Calc : correcting sheets automatically
-OpenOffice.org Calc : CORREL function
-OpenOffice.org Calc : COS function
-OpenOffice.org Calc : COSH function
-OpenOffice.org Calc : COT function
-OpenOffice.org Calc : COTH function
-OpenOffice.org Calc : COUNT function
-OpenOffice.org Calc : COUNTA function
-OpenOffice.org Calc : COUNTBLANK function
-OpenOffice.org Calc : COUNTIF function
-OpenOffice.org Calc : counting
-OpenOffice.org Calc : counting;empty cells
-OpenOffice.org Calc : counting;specified cells
-OpenOffice.org Calc : counting rows
-OpenOffice.org Calc : counting rows;with numeric or alphanumeric values
-OpenOffice.org Calc : counting rows;with numeric values
-OpenOffice.org Calc : COUPDAYBS function
-OpenOffice.org Calc : COUPDAYS function
-OpenOffice.org Calc : COUPDAYSNC function
-OpenOffice.org Calc : COUPNCD function
-OpenOffice.org Calc : COUPNUM function
-OpenOffice.org Calc : COUPPCD function
-OpenOffice.org Calc : COVAR function
-OpenOffice.org Calc : crash reports
-OpenOffice.org Calc : CRITBINOM function
-OpenOffice.org Calc : criteria of query design (Base)
-OpenOffice.org Calc : cropping pictures
-OpenOffice.org Calc : cross-classified tables
-OpenOffice.org Calc : csv files
-OpenOffice.org Calc : csv files;importing and exporting
-OpenOffice.org Calc : csv files;spreadsheets
-OpenOffice.org Calc : CTL
-OpenOffice.org Calc : CTL;complex text layout languages
-OpenOffice.org Calc : CTL;definition
-OpenOffice.org Calc : CTL;options
-OpenOffice.org Calc : CTL;right-to-left sheets
-OpenOffice.org Calc : CUMIPMT function
-OpenOffice.org Calc : CUMIPMT_ADD function
-OpenOffice.org Calc : CUMPRINC function
-OpenOffice.org Calc : CUMPRINC_ADD function
-OpenOffice.org Calc : cumulative lognormal distribution
-OpenOffice.org Calc : cumulative probability density function
-OpenOffice.org Calc : cumulative probability density function;calculating
-OpenOffice.org Calc : cumulative probability density function;inverse of
-OpenOffice.org Calc : currencies
-OpenOffice.org Calc : currencies;converters
-OpenOffice.org Calc : currencies;default currencies
-OpenOffice.org Calc : currencies;formats and format codes
-OpenOffice.org Calc : currency field creation
-OpenOffice.org Calc : currency formats
-OpenOffice.org Calc : currency formats
-OpenOffice.org Calc : currency formats;spreadsheets
-OpenOffice.org Calc : current date and time values
-OpenOffice.org Calc : CURRENT function
-OpenOffice.org Calc : cursor
-OpenOffice.org Calc : cursor;allowing in protected areas (Writer)
-OpenOffice.org Calc : cursor;in read-only text
-OpenOffice.org Calc : cursor;quickly moving to an object
-OpenOffice.org Calc : curves
-OpenOffice.org Calc : curves;editing points
-OpenOffice.org Calc : curves;properties in line charts/XY charts
-OpenOffice.org Calc : custom dictionaries
-OpenOffice.org Calc : custom dictionaries;editing
-OpenOffice.org Calc : custom hyphens (Writer)
-OpenOffice.org Calc : custom quotes
-OpenOffice.org Calc : custom templates
-OpenOffice.org Calc : customized lists
-OpenOffice.org Calc : customizing
-OpenOffice.org Calc : customizing;events
-OpenOffice.org Calc : customizing;keyboard
-OpenOffice.org Calc : customizing;menus
-OpenOffice.org Calc : customizing;OpenOffice.org
-OpenOffice.org Calc : customizing;round corners
-OpenOffice.org Calc : customizing;toolbars
-OpenOffice.org Calc : cutting
-OpenOffice.org Calc : dashes
-OpenOffice.org Calc : data
-OpenOffice.org Calc : data;filtering in forms
-OpenOffice.org Calc : data;forms and subforms
-OpenOffice.org Calc : data;merging cell ranges
-OpenOffice.org Calc : data;read-only
-OpenOffice.org Calc : data;showing invalid data
-OpenOffice.org Calc : data;sorting in databases
-OpenOffice.org Calc : data;sorting in forms
-OpenOffice.org Calc : data;user data
-OpenOffice.org Calc : data;validity check
-OpenOffice.org Calc : data binding change in XForms
-OpenOffice.org Calc : data field options for Data Pilot
-OpenOffice.org Calc : data labels in charts
-OpenOffice.org Calc : Data Navigator display options
-OpenOffice.org Calc : data ranges in charts
-OpenOffice.org Calc : data series
-OpenOffice.org Calc : data series import
-OpenOffice.org Calc : data source browser
-OpenOffice.org Calc : data source explorer
-OpenOffice.org Calc : data source view
-OpenOffice.org Calc : data source view;drag and drop
-OpenOffice.org Calc : data source view;overview
-OpenOffice.org Calc : data source view;showing
-OpenOffice.org Calc : data sources
-OpenOffice.org Calc : data sources;as tables
-OpenOffice.org Calc : data sources;connection settings (Base)
-OpenOffice.org Calc : data sources;copying records to spreadsheets
-OpenOffice.org Calc : data sources;displaying current
-OpenOffice.org Calc : data sources;external data
-OpenOffice.org Calc : data sources;LDAP server (Base)
-OpenOffice.org Calc : data sources;OpenOffice.org Base
-OpenOffice.org Calc : data sources;registering address books
-OpenOffice.org Calc : data sources;reports
-OpenOffice.org Calc : data sources;setting for stock charts
-OpenOffice.org Calc : data sources;viewing
-OpenOffice.org Calc : data structure of XForms
-OpenOffice.org Calc : data tables
-OpenOffice.org Calc : data tables;multiple operations in
-OpenOffice.org Calc : data validity
-OpenOffice.org Calc : data values in charts
-OpenOffice.org Calc : database contents
-OpenOffice.org Calc : database contents;inserting as tables
-OpenOffice.org Calc : database contents;inserting as text
-OpenOffice.org Calc : database ranges
-OpenOffice.org Calc : database ranges;advanced filters
-OpenOffice.org Calc : database ranges;AutoFilter function
-OpenOffice.org Calc : database ranges;defining
-OpenOffice.org Calc : database ranges;filtering
-OpenOffice.org Calc : database ranges;filters
-OpenOffice.org Calc : database ranges;hiding AutoFilter
-OpenOffice.org Calc : database ranges;refreshing
-OpenOffice.org Calc : database ranges;removing filters
-OpenOffice.org Calc : database ranges;sorting
-OpenOffice.org Calc : database reports
-OpenOffice.org Calc : Database Wizard (Base)
-OpenOffice.org Calc : databases
-OpenOffice.org Calc : databases;administration through SQL (Base)
-OpenOffice.org Calc : databases;ADO (Base)
-OpenOffice.org Calc : databases;connecting (Base)
-OpenOffice.org Calc : databases;creating
-OpenOffice.org Calc : databases;creating labels
-OpenOffice.org Calc : databases;creating queries
-OpenOffice.org Calc : databases;creating reports
-OpenOffice.org Calc : databases;creating tables
-OpenOffice.org Calc : databases;dBASE (Base)
-OpenOffice.org Calc : databases;deleting (Base)
-OpenOffice.org Calc : databases;drag and drop (Base)
-OpenOffice.org Calc : databases;editing tables
-OpenOffice.org Calc : databases;form filters
-OpenOffice.org Calc : databases;formats (Base)
-OpenOffice.org Calc : databases;functions in OpenOffice.org Calc
-OpenOffice.org Calc : databases;importing/exporting
-OpenOffice.org Calc : databases;JDBC (Base)
-OpenOffice.org Calc : databases;main page (Base)
-OpenOffice.org Calc : databases;MySQL (Base)
-OpenOffice.org Calc : databases;ODBC (Base)
-OpenOffice.org Calc : databases;overview
-OpenOffice.org Calc : databases;registering (Base)
-OpenOffice.org Calc : databases;searching records
-OpenOffice.org Calc : databases;selecting (Calc)
-OpenOffice.org Calc : databases;shortcut keys
-OpenOffice.org Calc : databases;sorting
-OpenOffice.org Calc : databases;standard filters
-OpenOffice.org Calc : databases;text formats
-OpenOffice.org Calc : databases;viewing
-OpenOffice.org Calc : DataPilot function
-OpenOffice.org Calc : DataPilot function;calling up and applying
-OpenOffice.org Calc : DataPilot function;deleting tables
-OpenOffice.org Calc : DataPilot function;editing tables
-OpenOffice.org Calc : DataPilot function;filtering tables
-OpenOffice.org Calc : DataPilot function;grouping table entries
-OpenOffice.org Calc : DataPilot function;introduction
-OpenOffice.org Calc : DataPilot function;preventing data overwriting
-OpenOffice.org Calc : DataPilot function;refreshing tables
-OpenOffice.org Calc : DataPilot tables
-OpenOffice.org Calc : date and time functions
-OpenOffice.org Calc : date fields
-OpenOffice.org Calc : date fields;creating
-OpenOffice.org Calc : date fields;properties
-OpenOffice.org Calc : date formats
-OpenOffice.org Calc : date formats;avoiding conversion to
-OpenOffice.org Calc : date formats
-OpenOffice.org Calc : DATE function
-OpenOffice.org Calc : date series
-OpenOffice.org Calc : dates
-OpenOffice.org Calc : dates;19xx/20xx
-OpenOffice.org Calc : dates;default (Calc)
-OpenOffice.org Calc : dates;in cells
-OpenOffice.org Calc : dates;interest date prior to settlement date
-OpenOffice.org Calc : dates;printing in presentations
-OpenOffice.org Calc : dates;start 1900/01/01 (Calc)
-OpenOffice.org Calc : dates;start 1904/01/01 (Calc)
-OpenOffice.org Calc : dates;updating automatically
-OpenOffice.org Calc : DATEVALUE function
-OpenOffice.org Calc : DAVERAGE function
-OpenOffice.org Calc : DAY function
-OpenOffice.org Calc : DAYS function
-OpenOffice.org Calc : DAYS360 function
-OpenOffice.org Calc : DAYSINMONTH function
-OpenOffice.org Calc : DAYSINYEAR function
-OpenOffice.org Calc : DB function
-OpenOffice.org Calc : dBASE
-OpenOffice.org Calc : dBASE;database settings (Base)
-OpenOffice.org Calc : dBASE import/export
-OpenOffice.org Calc : DCOUNT function
-OpenOffice.org Calc : DCOUNTA function
-OpenOffice.org Calc : DDB function
-OpenOffice.org Calc : DDE
-OpenOffice.org Calc : DDE;definition
-OpenOffice.org Calc : DDE function
-OpenOffice.org Calc : deactivating
-OpenOffice.org Calc : deactivating;automatic changes
-OpenOffice.org Calc : deactivating;plug-ins
-OpenOffice.org Calc : DEC2BIN function
-OpenOffice.org Calc : DEC2HEX function
-OpenOffice.org Calc : DEC2OCT function
-OpenOffice.org Calc : DECIMAL function
-OpenOffice.org Calc : decimal places
-OpenOffice.org Calc : decimal places;adding/deleting
-OpenOffice.org Calc : decimal places;cutting off
-OpenOffice.org Calc : decimal places;formatting numbers
-OpenOffice.org Calc : decimal places;showing
-OpenOffice.org Calc : decimal places displayed (Calc)
-OpenOffice.org Calc : decimal separator key
-OpenOffice.org Calc : decimal system
-OpenOffice.org Calc : decimal system;converting to
-OpenOffice.org Calc : decimal tab stops
-OpenOffice.org Calc : default directories
-OpenOffice.org Calc : default file formats
-OpenOffice.org Calc : default filters
-OpenOffice.org Calc : default filters;comparison operators
-OpenOffice.org Calc : default filters;databases
-OpenOffice.org Calc : default printer
-OpenOffice.org Calc : default printer;setting up
-OpenOffice.org Calc : default printer;UNIX
-OpenOffice.org Calc : default templates
-OpenOffice.org Calc : default templates;changing
-OpenOffice.org Calc : default templates;organizing
-OpenOffice.org Calc : defaults
-OpenOffice.org Calc : defaults;currency formats
-OpenOffice.org Calc : defaults;documents
-OpenOffice.org Calc : defaults;file formats
-OpenOffice.org Calc : defaults;fonts
-OpenOffice.org Calc : defaults;grids (Writer/Calc)
-OpenOffice.org Calc : defaults;languages
-OpenOffice.org Calc : defaults;number formats
-OpenOffice.org Calc : defaults;number formats in spreadsheets
-OpenOffice.org Calc : defaults;of saving
-OpenOffice.org Calc : defaults;program configuration
-OpenOffice.org Calc : defaults;tab stops in text
-OpenOffice.org Calc : defaults;views
-OpenOffice.org Calc : defining
-OpenOffice.org Calc : defining;advanced filters
-OpenOffice.org Calc : defining;arrowheads and other line ends
-OpenOffice.org Calc : defining;AutoFormat function for tables
-OpenOffice.org Calc : defining;colors
-OpenOffice.org Calc : defining;database ranges
-OpenOffice.org Calc : defining;line styles
-OpenOffice.org Calc : defining;names for cell ranges
-OpenOffice.org Calc : defining;paragraph borders
-OpenOffice.org Calc : defining;printranges
-OpenOffice.org Calc : defining;queries (Base)
-OpenOffice.org Calc : defining;sort lists
-OpenOffice.org Calc : defining;table borders
-OpenOffice.org Calc : DEGREES function
-OpenOffice.org Calc : deleting
-OpenOffice.org Calc : deleting;all direct formatting
-OpenOffice.org Calc : deleting;cell contents
-OpenOffice.org Calc : deleting;cells
-OpenOffice.org Calc : deleting;column breaks
-OpenOffice.org Calc : deleting;columns
-OpenOffice.org Calc : deleting;databases (Base)
-OpenOffice.org Calc : deleting;DataPilot tables
-OpenOffice.org Calc : deleting;decimal places
-OpenOffice.org Calc : deleting;hyperlinks
-OpenOffice.org Calc : deleting;lines in text
-OpenOffice.org Calc : deleting;manual row breaks
-OpenOffice.org Calc : deleting;models/instances
-OpenOffice.org Calc : deleting;namespaces in XForms
-OpenOffice.org Calc : deleting;print ranges
-OpenOffice.org Calc : deleting;rows
-OpenOffice.org Calc : deleting;spreadsheets
-OpenOffice.org Calc : deleting;tab stops
-OpenOffice.org Calc : deleting;templates
-OpenOffice.org Calc : deleting;visible cells only
-OpenOffice.org Calc : deleting;XML filters
-OpenOffice.org Calc : delimited values and files
-OpenOffice.org Calc : DELTA function
-OpenOffice.org Calc : density function
-OpenOffice.org Calc : depreciations
-OpenOffice.org Calc : depreciations;arithmetic declining
-OpenOffice.org Calc : depreciations;arithmetic-degressive
-OpenOffice.org Calc : depreciations;degressive amortizations
-OpenOffice.org Calc : depreciations;geometric-degressive
-OpenOffice.org Calc : depreciations;linear
-OpenOffice.org Calc : depreciations;linear amortizations
-OpenOffice.org Calc : depreciations;variable declining
-OpenOffice.org Calc : depth stagger
-OpenOffice.org Calc : descriptions for objects
-OpenOffice.org Calc : design mode after saving
-OpenOffice.org Calc : design view
-OpenOffice.org Calc : design view;creating forms
-OpenOffice.org Calc : design view;queries/views (Base)
-OpenOffice.org Calc : designing
-OpenOffice.org Calc : designing;database tables
-OpenOffice.org Calc : designing;fonts
-OpenOffice.org Calc : designing;queries (Base)
-OpenOffice.org Calc : detaching toolbars
-OpenOffice.org Calc : determinants
-OpenOffice.org Calc : determination coefficients
-OpenOffice.org Calc : DEVSQ function
-OpenOffice.org Calc : DGET function
-OpenOffice.org Calc : dictionaries
-OpenOffice.org Calc : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Calc : dictionaries;creating
-OpenOffice.org Calc : dictionaries;editing user-defined
-OpenOffice.org Calc : dictionaries;spellcheck
-OpenOffice.org Calc : dictionaries, see also languages
-OpenOffice.org Calc : digital signatures
-OpenOffice.org Calc : direct formatting
-OpenOffice.org Calc : direct formatting;undoing all
-OpenOffice.org Calc : directories
-OpenOffice.org Calc : directories;creating new
-OpenOffice.org Calc : directories;directory structure
-OpenOffice.org Calc : disabled persons
-OpenOffice.org Calc : DISC function
-OpenOffice.org Calc : discounts
-OpenOffice.org Calc : display options in Data Pilot
-OpenOffice.org Calc : displaying
-OpenOffice.org Calc : displaying;formulas at any position
-OpenOffice.org Calc : displaying;formulas instead of results
-OpenOffice.org Calc : displaying;headers of columns/rows
-OpenOffice.org Calc : displaying;non-printing characters (Writer)
-OpenOffice.org Calc : displaying;notes (Calc)
-OpenOffice.org Calc : displaying;notes in text documents
-OpenOffice.org Calc : displaying;pictures and objects (Writer)
-OpenOffice.org Calc : displaying;scenario names
-OpenOffice.org Calc : displaying;sheets
-OpenOffice.org Calc : displaying;tables (Writer)
-OpenOffice.org Calc : displaying;zero values (Calc)
-OpenOffice.org Calc : distances
-OpenOffice.org Calc : distinct values in SQL queries
-OpenOffice.org Calc : distorting in drawings
-OpenOffice.org Calc : distributing XML filters
-OpenOffice.org Calc : dithering
-OpenOffice.org Calc : division sign, see also operators
-OpenOffice.org Calc : divisions
-OpenOffice.org Calc : DMAX function
-OpenOffice.org Calc : DMIN function
-OpenOffice.org Calc : docking
-OpenOffice.org Calc : docking;definition
-OpenOffice.org Calc : docking;toolbars
-OpenOffice.org Calc : docking;windows
-OpenOffice.org Calc : Document Converter Wizard
-OpenOffice.org Calc : Document Map feature in Microsoft Office
-OpenOffice.org Calc : Document Map, see Navigator
-OpenOffice.org Calc : document types in OpenOffice.org
-OpenOffice.org Calc : documents
-OpenOffice.org Calc : documents;changing titles
-OpenOffice.org Calc : documents;closing
-OpenOffice.org Calc : documents;comparing
-OpenOffice.org Calc : documents;contents as lists
-OpenOffice.org Calc : documents;editing time
-OpenOffice.org Calc : documents;exporting
-OpenOffice.org Calc : documents;importing
-OpenOffice.org Calc : documents;languages
-OpenOffice.org Calc : documents;measurement units in
-OpenOffice.org Calc : documents;merging
-OpenOffice.org Calc : documents;number of pages/tables/sheets
-OpenOffice.org Calc : documents;opening
-OpenOffice.org Calc : documents;opening in design mode
-OpenOffice.org Calc : documents;opening with templates
-OpenOffice.org Calc : documents;organizing
-OpenOffice.org Calc : documents;printing
-OpenOffice.org Calc : documents;protecting
-OpenOffice.org Calc : documents;read-only
-OpenOffice.org Calc : documents;reloading
-OpenOffice.org Calc : documents;saving
-OpenOffice.org Calc : documents;saving automatically
-OpenOffice.org Calc : documents;saving in other formats
-OpenOffice.org Calc : documents;sending as e-mail
-OpenOffice.org Calc : documents;styles changed
-OpenOffice.org Calc : documents;version management
-OpenOffice.org Calc : documents;version numbers
-OpenOffice.org Calc : DOLLAR function
-OpenOffice.org Calc : DOLLARDE function
-OpenOffice.org Calc : DOLLARFR function
-OpenOffice.org Calc : donut charts
-OpenOffice.org Calc : dot products
-OpenOffice.org Calc : dotted areas
-OpenOffice.org Calc : double-line spacing in paragraphs
-OpenOffice.org Calc : double-line writing in Asian layout
-OpenOffice.org Calc : DPRODUCT function
-OpenOffice.org Calc : drag and drop
-OpenOffice.org Calc : drag and drop;copying and pasting text
-OpenOffice.org Calc : drag and drop;data source view
-OpenOffice.org Calc : drag and drop;from Gallery to draw objects
-OpenOffice.org Calc : drag and drop;moving cells
-OpenOffice.org Calc : drag and drop;overview
-OpenOffice.org Calc : drag and drop;pictures
-OpenOffice.org Calc : drag and drop;referencing cells
-OpenOffice.org Calc : drag and drop;to Gallery
-OpenOffice.org Calc : draw objects
-OpenOffice.org Calc : draw objects;adding/editing/copying
-OpenOffice.org Calc : draw objects;anchoring
-OpenOffice.org Calc : draw objects;arranging within stacks
-OpenOffice.org Calc : draw objects;copying
-OpenOffice.org Calc : draw objects;copying between documents
-OpenOffice.org Calc : draw objects;displaying (Calc)
-OpenOffice.org Calc : draw objects;dropping Gallery pictures
-OpenOffice.org Calc : draw objects;flipping
-OpenOffice.org Calc : draw objects;legends
-OpenOffice.org Calc : draw objects;positioning and resizing
-OpenOffice.org Calc : draw objects;printing
-OpenOffice.org Calc : draw objects;protecting
-OpenOffice.org Calc : draw objects;slanting
-OpenOffice.org Calc : draw objects;text in
-OpenOffice.org Calc : Drawing bar
-OpenOffice.org Calc : drawing lines in text
-OpenOffice.org Calc : drawings
-OpenOffice.org Calc : drawings;creating/opening
-OpenOffice.org Calc : drawings;languages
-OpenOffice.org Calc : drawings;printing
-OpenOffice.org Calc : drawings;printing defaults
-OpenOffice.org Calc : drawings;printing in text documents
-OpenOffice.org Calc : drawings;saving
-OpenOffice.org Calc : drawings;saving automatically
-OpenOffice.org Calc : drawings;saving in other formats
-OpenOffice.org Calc : drawings;sending as e-mail
-OpenOffice.org Calc : drawings;showing (Writer)
-OpenOffice.org Calc : drop-down lists in form functions
-OpenOffice.org Calc : drop-down menus in sheet columns
-OpenOffice.org Calc : DSTDEV function
-OpenOffice.org Calc : DSTDEVP function
-OpenOffice.org Calc : DSUM function
-OpenOffice.org Calc : DURATION function
-OpenOffice.org Calc : DURATION_ADD function
-OpenOffice.org Calc : durations
-OpenOffice.org Calc : durations;calculating
-OpenOffice.org Calc : durations;first interest payment until settlement date
-OpenOffice.org Calc : durations;fixed interest securities
-OpenOffice.org Calc : DVAR function
-OpenOffice.org Calc : DVARP function
-OpenOffice.org Calc : e-mail attachments
-OpenOffice.org Calc : EASTERSUNDAY function
-OpenOffice.org Calc : EDATE function
-OpenOffice.org Calc : Edit File icon
-OpenOffice.org Calc : edit mode
-OpenOffice.org Calc : edit mode;after opening
-OpenOffice.org Calc : edit mode;through Enter key (Calc)
-OpenOffice.org Calc : Edit Points bar
-OpenOffice.org Calc : editing
-OpenOffice.org Calc : editing;array formulas
-OpenOffice.org Calc : editing;chart axes
-OpenOffice.org Calc : editing;chart data
-OpenOffice.org Calc : editing;chart legends
-OpenOffice.org Calc : editing;chart titles
-OpenOffice.org Calc : editing;data binding of XForms
-OpenOffice.org Calc : editing;database tables and queries
-OpenOffice.org Calc : editing;DataPilot tables
-OpenOffice.org Calc : editing;draw objects
-OpenOffice.org Calc : editing;Fontwork objects
-OpenOffice.org Calc : editing;hyperlinks
-OpenOffice.org Calc : editing;items in Data Navigator
-OpenOffice.org Calc : editing;menus
-OpenOffice.org Calc : editing;namespaces in XForms
-OpenOffice.org Calc : editing;notes
-OpenOffice.org Calc : editing;objects
-OpenOffice.org Calc : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Calc : editing;pictures
-OpenOffice.org Calc : editing;print ranges
-OpenOffice.org Calc : editing;reports
-OpenOffice.org Calc : editing;shortcut keys
-OpenOffice.org Calc : editing;tab stops
-OpenOffice.org Calc : editing;templates
-OpenOffice.org Calc : editing;titles
-OpenOffice.org Calc : editing;toolbars
-OpenOffice.org Calc : editing;undoing
-OpenOffice.org Calc : editing;XForms
-OpenOffice.org Calc : editing time of documents
-OpenOffice.org Calc : editors
-OpenOffice.org Calc : editors;formula editor
-OpenOffice.org Calc : editors;ImageMap editor
-OpenOffice.org Calc : EFFECT_ADD function
-OpenOffice.org Calc : EFFECTIVE function
-OpenOffice.org Calc : effective interest rates
-OpenOffice.org Calc : effects
-OpenOffice.org Calc : effects;font positions
-OpenOffice.org Calc : effects;fonts
-OpenOffice.org Calc : effects;Fontwork icons
-OpenOffice.org Calc : empty cells
-OpenOffice.org Calc : empty cells;counting
-OpenOffice.org Calc : empty cells;recognizing
-OpenOffice.org Calc : empty documents
-OpenOffice.org Calc : empty paragraph removal
-OpenOffice.org Calc : encrypting text
-OpenOffice.org Calc : encryption of contents
-OpenOffice.org Calc : entering entries with AutoInput function
-OpenOffice.org Calc : entering groups
-OpenOffice.org Calc : entering text from right to left
-OpenOffice.org Calc : EOMONTH function
-OpenOffice.org Calc : equal sign, see also operators
-OpenOffice.org Calc : equations in formula editor
-OpenOffice.org Calc : equations in goal seek
-OpenOffice.org Calc : ERF function
-OpenOffice.org Calc : ERFC function
-OpenOffice.org Calc : error bars in charts
-OpenOffice.org Calc : error codes
-OpenOffice.org Calc : error codes;controlling
-OpenOffice.org Calc : error codes;list of
-OpenOffice.org Calc : error indicators in charts
-OpenOffice.org Calc : error messages
-OpenOffice.org Calc : error messages;defining for incorrect input
-OpenOffice.org Calc : error messages;invalid references
-OpenOffice.org Calc : Error Report Tool
-OpenOffice.org Calc : error tracing
-OpenOffice.org Calc : ERRORTYPE function
-OpenOffice.org Calc : Euro
-OpenOffice.org Calc : Euro;converting in
-OpenOffice.org Calc : Euro;currency formats
-OpenOffice.org Calc : Euro;Euro Converter Wizard
-OpenOffice.org Calc : EVEN function
-OpenOffice.org Calc : even integers
-OpenOffice.org Calc : even/odd pages
-OpenOffice.org Calc : even/odd pages;printing
-OpenOffice.org Calc : events
-OpenOffice.org Calc : events;controls
-OpenOffice.org Calc : events;customizing
-OpenOffice.org Calc : events;in forms
-OpenOffice.org Calc : EXACT function
-OpenOffice.org Calc : exact numbers in OpenOffice.org Calc
-OpenOffice.org Calc : examples
-OpenOffice.org Calc : examples;formula calculation
-OpenOffice.org Calc : examples;goal seek
-OpenOffice.org Calc : Excel
-OpenOffice.org Calc : Excel;saving as
-OpenOffice.org Calc : Excel;search criteria
-OpenOffice.org Calc : exceptions
-OpenOffice.org Calc : exceptions;user-defined dictionaries
-OpenOffice.org Calc : exchanging, see also replacing
-OpenOffice.org Calc : executing
-OpenOffice.org Calc : executing;SQL commands
-OpenOffice.org Calc : exiting
-OpenOffice.org Calc : exiting;groups
-OpenOffice.org Calc : exiting;OpenOffice.org
-OpenOffice.org Calc : EXP function
-OpenOffice.org Calc : expanding formatting (Calc)
-OpenOffice.org Calc : explorer of data sources
-OpenOffice.org Calc : EXPONDIST function
-OpenOffice.org Calc : exponential distributions
-OpenOffice.org Calc : exponential trends in arrays
-OpenOffice.org Calc : export filters
-OpenOffice.org Calc : exporting
-OpenOffice.org Calc : exporting;bitmaps
-OpenOffice.org Calc : exporting;cells
-OpenOffice.org Calc : exporting;databases
-OpenOffice.org Calc : exporting;HTML and text documents
-OpenOffice.org Calc : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Calc : exporting;spreadsheets to dBASE
-OpenOffice.org Calc : exporting;spreadsheets to text format
-OpenOffice.org Calc : exporting;tables as text
-OpenOffice.org Calc : exporting;templates
-OpenOffice.org Calc : exporting;to foreign formats
-OpenOffice.org Calc : exporting;to HTML
-OpenOffice.org Calc : exporting;to Microsoft Office formats
-OpenOffice.org Calc : exporting;to PDF
-OpenOffice.org Calc : exporting;to PostScript format
-OpenOffice.org Calc : exporting;to XML
-OpenOffice.org Calc : exporting;XML files
-OpenOffice.org Calc : extended tips in Help
-OpenOffice.org Calc : extending printranges
-OpenOffice.org Calc : extension mode in text
-OpenOffice.org Calc : extensions
-OpenOffice.org Calc : extensions;Extension Manager
-OpenOffice.org Calc : extensions;file formats
-OpenOffice.org Calc : external data
-OpenOffice.org Calc : external data;inserting
-OpenOffice.org Calc : external data;WebQuery
-OpenOffice.org Calc : external DLL functions
-OpenOffice.org Calc : external keys (Base)
-OpenOffice.org Calc : extrapolations
-OpenOffice.org Calc : FACT function
-OpenOffice.org Calc : FACTDOUBLE function
-OpenOffice.org Calc : factorials
-OpenOffice.org Calc : factorials;numbers
-OpenOffice.org Calc : factorials;numbers with increments of two
-OpenOffice.org Calc : FALSE function
-OpenOffice.org Calc : faster printing
-OpenOffice.org Calc : faxes
-OpenOffice.org Calc : faxes;configuring OpenOffice.org
-OpenOffice.org Calc : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Calc : faxes;selecting a fax machine
-OpenOffice.org Calc : faxes;sending
-OpenOffice.org Calc : faxes;wizards
-OpenOffice.org Calc : FDIST function
-OpenOffice.org Calc : fields
-OpenOffice.org Calc : fields;database tables
-OpenOffice.org Calc : fields;displaying field codes (Writer)
-OpenOffice.org Calc : fields;formatted fields
-OpenOffice.org Calc : fields;updating automatically (Writer)
-OpenOffice.org Calc : file associations for Microsoft Office
-OpenOffice.org Calc : file filters
-OpenOffice.org Calc : file filters;mobile devices
-OpenOffice.org Calc : file filters;XML
-OpenOffice.org Calc : file formats
-OpenOffice.org Calc : file formats;changing defaults
-OpenOffice.org Calc : file formats;OpenDocument/XML
-OpenOffice.org Calc : file formats;saving always in other formats
-OpenOffice.org Calc : file names in headers/footers
-OpenOffice.org Calc : file selection button
-OpenOffice.org Calc : file sharing options for current document
-OpenOffice.org Calc : files
-OpenOffice.org Calc : files;filters and formats
-OpenOffice.org Calc : files;importing
-OpenOffice.org Calc : files;opening
-OpenOffice.org Calc : files;opening with placeholders
-OpenOffice.org Calc : files;properties
-OpenOffice.org Calc : files;saving
-OpenOffice.org Calc : files;saving automatically
-OpenOffice.org Calc : files;saving in other formats
-OpenOffice.org Calc : files;sending as e-mail
-OpenOffice.org Calc : files;version numbers
-OpenOffice.org Calc : files and folders in OpenOffice.org
-OpenOffice.org Calc : fill characters with tabulators
-OpenOffice.org Calc : fill colors for areas
-OpenOffice.org Calc : fill patterns for areas
-OpenOffice.org Calc : filling
-OpenOffice.org Calc : filling;cells, automatically
-OpenOffice.org Calc : filling;customized lists
-OpenOffice.org Calc : filling;selection lists
-OpenOffice.org Calc : filter conditions
-OpenOffice.org Calc : filter conditions;connecting
-OpenOffice.org Calc : filter conditions;in queries (Base)
-OpenOffice.org Calc : filtered data
-OpenOffice.org Calc : filtered data;sums
-OpenOffice.org Calc : filtering
-OpenOffice.org Calc : filtering;cell ranges
-OpenOffice.org Calc : filtering;data in databases
-OpenOffice.org Calc : filtering;data in forms
-OpenOffice.org Calc : filtering;database ranges
-OpenOffice.org Calc : filtering;DataPilot tables
-OpenOffice.org Calc : filters
-OpenOffice.org Calc : filters;comparison operators
-OpenOffice.org Calc : filters;copying visible cells only
-OpenOffice.org Calc : filters;defining advanced filters
-OpenOffice.org Calc : filters;for import and export
-OpenOffice.org Calc : filters;introduction
-OpenOffice.org Calc : filters;Navigator
-OpenOffice.org Calc : filters;pictures
-OpenOffice.org Calc : filters;XML filter settings
-OpenOffice.org Calc : filters, see also AutoFilter function
-OpenOffice.org Calc : financial functions
-OpenOffice.org Calc : FIND function
-OpenOffice.org Calc : Find tab in Help
-OpenOffice.org Calc : finding
-OpenOffice.org Calc : finding;formulas/values/text/objects
-OpenOffice.org Calc : finding;in all sheets
-OpenOffice.org Calc : finding;records in form documents
-OpenOffice.org Calc : finding;selections
-OpenOffice.org Calc : finding;similarity search
-OpenOffice.org Calc : FINV function
-OpenOffice.org Calc : FISHER function
-OpenOffice.org Calc : FISHERINV function
-OpenOffice.org Calc : fitting to pages
-OpenOffice.org Calc : fitting to pages;print settings in Math
-OpenOffice.org Calc : fitting to pages;print settings in presentations
-OpenOffice.org Calc : FIXED function
-OpenOffice.org Calc : fixed text
-OpenOffice.org Calc : fixed text;form functions
-OpenOffice.org Calc : fixing toolbars
-OpenOffice.org Calc : flipping draw objects
-OpenOffice.org Calc : floating frames in HTML documents
-OpenOffice.org Calc : floating toolbars
-OpenOffice.org Calc : FLOOR function
-OpenOffice.org Calc : focus of controls
-OpenOffice.org Calc : folder creation
-OpenOffice.org Calc : font lists
-OpenOffice.org Calc : font name box
-OpenOffice.org Calc : font sizes
-OpenOffice.org Calc : font sizes;bullets
-OpenOffice.org Calc : font sizes;relative changes
-OpenOffice.org Calc : font sizes;scaling on screen
-OpenOffice.org Calc : font sizes;text
-OpenOffice.org Calc : fonts
-OpenOffice.org Calc : fonts;adding under UNIX
-OpenOffice.org Calc : fonts;changing in templates
-OpenOffice.org Calc : fonts;colors
-OpenOffice.org Calc : fonts;default settings
-OpenOffice.org Calc : fonts;effects
-OpenOffice.org Calc : fonts;for HTML and Basic
-OpenOffice.org Calc : fonts;formats
-OpenOffice.org Calc : fonts;outlines
-OpenOffice.org Calc : fonts;positions in text
-OpenOffice.org Calc : fonts;shadows
-OpenOffice.org Calc : fonts;specifying several
-OpenOffice.org Calc : fonts;strikethrough
-OpenOffice.org Calc : fonts;styles
-OpenOffice.org Calc : fonts;text objects
-OpenOffice.org Calc : Fontwork icons
-OpenOffice.org Calc : footers
-OpenOffice.org Calc : footers;backgrounds
-OpenOffice.org Calc : footers;defining
-OpenOffice.org Calc : footers;printing on sheets
-OpenOffice.org Calc : forced array handling
-OpenOffice.org Calc : FORECAST function
-OpenOffice.org Calc : form controls
-OpenOffice.org Calc : form controls;assigning macros
-OpenOffice.org Calc : form controls;protecting
-OpenOffice.org Calc : form controls;toolbars
-OpenOffice.org Calc : form fields
-OpenOffice.org Calc : form filters
-OpenOffice.org Calc : Form Navigator
-OpenOffice.org Calc : format codes
-OpenOffice.org Calc : format codes;numbers
-OpenOffice.org Calc : format codes;user-defined number formats
-OpenOffice.org Calc : format filling printing in OpenOffice.org Math
-OpenOffice.org Calc : Format Paintbrush
-OpenOffice.org Calc : formats
-OpenOffice.org Calc : formats;Asian layout
-OpenOffice.org Calc : formats;Asian typography
-OpenOffice.org Calc : formats;assigning by formulas
-OpenOffice.org Calc : formats;automatically formatting spreadsheets
-OpenOffice.org Calc : formats;changing text/number
-OpenOffice.org Calc : formats;currency formats in cells
-OpenOffice.org Calc : formats;fonts
-OpenOffice.org Calc : formats;maximizing page formats
-OpenOffice.org Calc : formats;number and currency formats
-OpenOffice.org Calc : formats;numbers as text
-OpenOffice.org Calc : formats;numbers in tables
-OpenOffice.org Calc : formats;of currencies/date/time
-OpenOffice.org Calc : formats;on opening and saving
-OpenOffice.org Calc : formats;pasting in special formats
-OpenOffice.org Calc : formats;positions
-OpenOffice.org Calc : formats;Styles and Formatting window
-OpenOffice.org Calc : formats;tabulators
-OpenOffice.org Calc : formats;themes for sheets
-OpenOffice.org Calc : formats;undoing when writing
-OpenOffice.org Calc : formatted fields
-OpenOffice.org Calc : formatted fields;form functions
-OpenOffice.org Calc : formatted fields;properties
-OpenOffice.org Calc : formatting
-OpenOffice.org Calc : formatting;adding/deleting decimal places
-OpenOffice.org Calc : formatting;axes in charts
-OpenOffice.org Calc : formatting;cells
-OpenOffice.org Calc : formatting;chart areas
-OpenOffice.org Calc : formatting;chart floors
-OpenOffice.org Calc : formatting;chart legends
-OpenOffice.org Calc : formatting;chart titles
-OpenOffice.org Calc : formatting;chart walls
-OpenOffice.org Calc : formatting;conditional formatting
-OpenOffice.org Calc : formatting;copying
-OpenOffice.org Calc : formatting;definition
-OpenOffice.org Calc : formatting;expanding (Calc)
-OpenOffice.org Calc : formatting;font effects
-OpenOffice.org Calc : formatting;hyperlinks
-OpenOffice.org Calc : formatting;multiple cell texts
-OpenOffice.org Calc : formatting;notes on cells
-OpenOffice.org Calc : formatting;numbers as text
-OpenOffice.org Calc : formatting;numbers with decimals
-OpenOffice.org Calc : formatting;pages
-OpenOffice.org Calc : formatting;printer metrics (Writer)
-OpenOffice.org Calc : formatting;spreadsheets
-OpenOffice.org Calc : formatting;Styles and Formatting window
-OpenOffice.org Calc : formatting;themes for sheets
-OpenOffice.org Calc : formatting;undoing
-OpenOffice.org Calc : formatting;user-defined numbers
-OpenOffice.org Calc : formatting;visible cells only
-OpenOffice.org Calc : forms
-OpenOffice.org Calc : forms;browsing
-OpenOffice.org Calc : forms;Combo Box/List Box Wizard
-OpenOffice.org Calc : forms;creating
-OpenOffice.org Calc : forms;data
-OpenOffice.org Calc : forms;designing (Base)
-OpenOffice.org Calc : forms;events
-OpenOffice.org Calc : forms;filtering data
-OpenOffice.org Calc : forms;finding records
-OpenOffice.org Calc : forms;focus after opening
-OpenOffice.org Calc : forms;general information (Base)
-OpenOffice.org Calc : forms;grouping controls
-OpenOffice.org Calc : forms;HTML filters
-OpenOffice.org Calc : forms;Navigator
-OpenOffice.org Calc : forms;opening in design mode
-OpenOffice.org Calc : forms;properties
-OpenOffice.org Calc : forms;sorting data
-OpenOffice.org Calc : forms;subforms
-OpenOffice.org Calc : forms;wizards
-OpenOffice.org Calc : forms;XForms
-OpenOffice.org Calc : Formula Auditing feature in Microsoft Office
-OpenOffice.org Calc : formula bar
-OpenOffice.org Calc : formula bar;accepting inputs
-OpenOffice.org Calc : formula bar;canceling inputs
-OpenOffice.org Calc : formula bar;functions
-OpenOffice.org Calc : formula bar;input line
-OpenOffice.org Calc : formula bar;sheet area names
-OpenOffice.org Calc : formula bar;spreadsheets
-OpenOffice.org Calc : formula bar;sum function
-OpenOffice.org Calc : formula cells
-OpenOffice.org Calc : formula cells;displaying formulas in other cells
-OpenOffice.org Calc : formula cells;recognizing
-OpenOffice.org Calc : formula cells;removing precedents
-OpenOffice.org Calc : formula cells;tracing precedents
-OpenOffice.org Calc : FORMULA function
-OpenOffice.org Calc : formula list window
-OpenOffice.org Calc : formula texts
-OpenOffice.org Calc : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Calc : formulas
-OpenOffice.org Calc : formulas;arrays
-OpenOffice.org Calc : formulas;assigning cell formats
-OpenOffice.org Calc : formulas;AutoCalculate function
-OpenOffice.org Calc : formulas;calculating
-OpenOffice.org Calc : formulas;calculating with
-OpenOffice.org Calc : formulas;copying and pasting
-OpenOffice.org Calc : formulas;defining names
-OpenOffice.org Calc : formulas;displaying in cells
-OpenOffice.org Calc : formulas;hiding
-OpenOffice.org Calc : formulas;inputting
-OpenOffice.org Calc : formulas;matrix formulas
-OpenOffice.org Calc : formulas;new
-OpenOffice.org Calc : formulas;operators
-OpenOffice.org Calc : formulas;printing, instead of results
-OpenOffice.org Calc : formulas;recalculating manually
-OpenOffice.org Calc : formulas;saving as csv files
-OpenOffice.org Calc : formulas;starting formula editor
-OpenOffice.org Calc : formulas;status bar
-OpenOffice.org Calc : formulas;using row/column labels
-OpenOffice.org Calc : formulas in reports
-OpenOffice.org Calc : formulas in reports;editing
-OpenOffice.org Calc : forums and support
-OpenOffice.org Calc : fractions
-OpenOffice.org Calc : fractions;converting
-OpenOffice.org Calc : fractions;entering
-OpenOffice.org Calc : frames
-OpenOffice.org Calc : frames;around paragraphs
-OpenOffice.org Calc : frames;around tables
-OpenOffice.org Calc : frames;AutoCorrect function
-OpenOffice.org Calc : frames;backgrounds
-OpenOffice.org Calc : frames;captions (Writer)
-OpenOffice.org Calc : frames;printing in OpenOffice.org Math
-OpenOffice.org Calc : frames;protecting
-OpenOffice.org Calc : frames;selection frames
-OpenOffice.org Calc : frames;text fitting to frames
-OpenOffice.org Calc : freeform lines
-OpenOffice.org Calc : freeform lines;draw functions
-OpenOffice.org Calc : freezing rows or columns
-OpenOffice.org Calc : FREQUENCY function
-OpenOffice.org Calc : FTEST function
-OpenOffice.org Calc : FTP
-OpenOffice.org Calc : FTP;opening documents
-OpenOffice.org Calc : FTP;saving documents
-OpenOffice.org Calc : full joins (Base)
-OpenOffice.org Calc : full screen view
-OpenOffice.org Calc : full-text search in Help
-OpenOffice.org Calc : function list window
-OpenOffice.org Calc : Function Wizard
-OpenOffice.org Calc : Function Wizard;add-ins
-OpenOffice.org Calc : Function Wizard;arrays
-OpenOffice.org Calc : Function Wizard;databases
-OpenOffice.org Calc : Function Wizard;date & time
-OpenOffice.org Calc : Function Wizard;financial
-OpenOffice.org Calc : Function Wizard;information
-OpenOffice.org Calc : Function Wizard;logical
-OpenOffice.org Calc : Function Wizard;mathematical
-OpenOffice.org Calc : Function Wizard;spreadsheets
-OpenOffice.org Calc : Function Wizard;statistics
-OpenOffice.org Calc : Function Wizard;text
-OpenOffice.org Calc : functions
-OpenOffice.org Calc : functions;accepting input icon
-OpenOffice.org Calc : functions;add-in functions
-OpenOffice.org Calc : functions;array functions
-OpenOffice.org Calc : functions;canceling input icon
-OpenOffice.org Calc : functions;database functions
-OpenOffice.org Calc : functions;date & time
-OpenOffice.org Calc : functions;financial functions
-OpenOffice.org Calc : functions;formula bar icon
-OpenOffice.org Calc : functions;Function Wizard
-OpenOffice.org Calc : functions;information functions
-OpenOffice.org Calc : functions;listed by category
-OpenOffice.org Calc : functions;logical functions
-OpenOffice.org Calc : functions;mathematical functions
-OpenOffice.org Calc : functions;OpenOffice.org Calc add-in DLL
-OpenOffice.org Calc : functions;spreadsheets
-OpenOffice.org Calc : functions;statistics functions
-OpenOffice.org Calc : functions;sum function icon
-OpenOffice.org Calc : functions;text functions
-OpenOffice.org Calc : functions;user-defined
-OpenOffice.org Calc : functions in reports
-OpenOffice.org Calc : functions in reports;editing
-OpenOffice.org Calc : future values
-OpenOffice.org Calc : future values;constant interest rates
-OpenOffice.org Calc : future values;varying interest rates
-OpenOffice.org Calc : FV function
-OpenOffice.org Calc : FVSCHEDULE function
-OpenOffice.org Calc : Gallery
-OpenOffice.org Calc : Gallery;adding pictures
-OpenOffice.org Calc : Gallery;dragging pictures to draw objects
-OpenOffice.org Calc : Gallery;hiding/showing
-OpenOffice.org Calc : Gallery;inserting pictures from
-OpenOffice.org Calc : GAMMADIST function
-OpenOffice.org Calc : GAMMAINV function
-OpenOffice.org Calc : GAMMALN function
-OpenOffice.org Calc : GAUSS function
-OpenOffice.org Calc : Gaussian error integral
-OpenOffice.org Calc : GCD function
-OpenOffice.org Calc : GCD_ADD function
-OpenOffice.org Calc : GEOMEAN function
-OpenOffice.org Calc : geometric lists
-OpenOffice.org Calc : geometric-degressive depreciations
-OpenOffice.org Calc : German spellcheck
-OpenOffice.org Calc : GESTEP function
-OpenOffice.org Calc : get method for form transmissions
-OpenOffice.org Calc : GETPIVOTDATA function
-OpenOffice.org Calc : getting support
-OpenOffice.org Calc : GIF format
-OpenOffice.org Calc : glossaries
-OpenOffice.org Calc : glossaries;common terms
-OpenOffice.org Calc : glossaries;Internet terms
-OpenOffice.org Calc : goal seek example
-OpenOffice.org Calc : gradients off for faster printing
-OpenOffice.org Calc : graphical text art
-OpenOffice.org Calc : graphics
-OpenOffice.org Calc : graphics;cache
-OpenOffice.org Calc : graphics;protecting
-OpenOffice.org Calc : graphics, see also pictures
-OpenOffice.org Calc : grayscale printing
-OpenOffice.org Calc : greatest common divisor
-OpenOffice.org Calc : grid controls
-OpenOffice.org Calc : grid controls;form functions
-OpenOffice.org Calc : grids
-OpenOffice.org Calc : grids;defaults (Writer/Calc)
-OpenOffice.org Calc : grids;display options (Impress/Draw)
-OpenOffice.org Calc : grids;displaying lines (Calc)
-OpenOffice.org Calc : grids;formatting axes
-OpenOffice.org Calc : grids;hiding lines in sheets
-OpenOffice.org Calc : grids;inserting in charts
-OpenOffice.org Calc : grids;printing sheet grids
-OpenOffice.org Calc : group box creation
-OpenOffice.org Calc : grouping
-OpenOffice.org Calc : grouping;cells
-OpenOffice.org Calc : grouping;DataPilot tables
-OpenOffice.org Calc : groups
-OpenOffice.org Calc : groups;entering/exiting/ungrouping
-OpenOffice.org Calc : groups;naming
-OpenOffice.org Calc : groups;of controls
-OpenOffice.org Calc : GROWTH function
-OpenOffice.org Calc : growth series
-OpenOffice.org Calc : guides
-OpenOffice.org Calc : guides;display options (Impress/Draw)
-OpenOffice.org Calc : guides;displaying when moving objects (Impress)
-OpenOffice.org Calc : guides;showing (Calc)
-OpenOffice.org Calc : guides;showing when moving frames (Writer)
-OpenOffice.org Calc : gutter
-OpenOffice.org Calc : handles
-OpenOffice.org Calc : handles;displaying (Writer)
-OpenOffice.org Calc : handles;scaling
-OpenOffice.org Calc : handles;showing simple/large handles (Calc)
-OpenOffice.org Calc : Hangul/Hanja
-OpenOffice.org Calc : HARMEAN function
-OpenOffice.org Calc : hatching
-OpenOffice.org Calc : headers
-OpenOffice.org Calc : headers;backgrounds
-OpenOffice.org Calc : headers;defining
-OpenOffice.org Calc : headers;freezing during table split
-OpenOffice.org Calc : headers;printing on sheets
-OpenOffice.org Calc : headings
-OpenOffice.org Calc : headings;entering as text box
-OpenOffice.org Calc : headings;repeating rows/columns as
-OpenOffice.org Calc : Hebrew
-OpenOffice.org Calc : Hebrew;entering text
-OpenOffice.org Calc : Hebrew;language settings
-OpenOffice.org Calc : heights of cells
-OpenOffice.org Calc : Help
-OpenOffice.org Calc : Help;bookmarks
-OpenOffice.org Calc : Help;extended tips on/off
-OpenOffice.org Calc : Help;full-text search
-OpenOffice.org Calc : Help;Help tips
-OpenOffice.org Calc : Help;keywords
-OpenOffice.org Calc : Help;navigation pane showing/hiding
-OpenOffice.org Calc : Help;style sheets
-OpenOffice.org Calc : Help;topics
-OpenOffice.org Calc : Help Agent
-OpenOffice.org Calc : Help Agent;help
-OpenOffice.org Calc : Help Agent;options
-OpenOffice.org Calc : Help tips
-OpenOffice.org Calc : Help tips;defining text for cell input
-OpenOffice.org Calc : Help tips;hiding
-OpenOffice.org Calc : HEX2BIN function
-OpenOffice.org Calc : HEX2DEC function
-OpenOffice.org Calc : HEX2OCT function
-OpenOffice.org Calc : hexadecimal system
-OpenOffice.org Calc : hexadecimal system;converting to
-OpenOffice.org Calc : hidden cells
-OpenOffice.org Calc : hidden controls in Form Navigator
-OpenOffice.org Calc : hidden fields display (Writer)
-OpenOffice.org Calc : hidden pages
-OpenOffice.org Calc : hidden pages;printing in presentations
-OpenOffice.org Calc : hidden text
-OpenOffice.org Calc : hidden text;showing (Writer)
-OpenOffice.org Calc : hiding
-OpenOffice.org Calc : hiding;changes
-OpenOffice.org Calc : hiding;chart legends
-OpenOffice.org Calc : hiding;columns
-OpenOffice.org Calc : hiding;data fields, from calculations in Data Pilot
-OpenOffice.org Calc : hiding;docked windows
-OpenOffice.org Calc : hiding;formulas
-OpenOffice.org Calc : hiding;headers/grid lines
-OpenOffice.org Calc : hiding;navigation pane in Help window
-OpenOffice.org Calc : hiding;rows
-OpenOffice.org Calc : hiding;sheet details
-OpenOffice.org Calc : hiding;sheets
-OpenOffice.org Calc : high contrast mode
-OpenOffice.org Calc : highlighting
-OpenOffice.org Calc : highlighting;negative numbers
-OpenOffice.org Calc : highlighting;values in sheets
-OpenOffice.org Calc : Hindi
-OpenOffice.org Calc : Hindi;entering text
-OpenOffice.org Calc : Hindi;language settings
-OpenOffice.org Calc : HLOOKUP function
-OpenOffice.org Calc : horizontal scrollbars (Writer)
-OpenOffice.org Calc : HOUR function
-OpenOffice.org Calc : HowTos for Calc
-OpenOffice.org Calc : HowTos for charts
-OpenOffice.org Calc : HTML
-OpenOffice.org Calc : HTML;definition
-OpenOffice.org Calc : HTML;export character set
-OpenOffice.org Calc : HTML;fonts for source display
-OpenOffice.org Calc : HTML;importing META tags
-OpenOffice.org Calc : HTML;in sheet cells
-OpenOffice.org Calc : HTML;live presentations
-OpenOffice.org Calc : HTML;sheets
-OpenOffice.org Calc : HTML documents
-OpenOffice.org Calc : HTML documents;auto reloading
-OpenOffice.org Calc : HTML documents;importing/exporting
-OpenOffice.org Calc : HTML documents;META tags in
-OpenOffice.org Calc : HTML documents;new
-OpenOffice.org Calc : HTML documents;source text
-OpenOffice.org Calc : HTML WebQuery
-OpenOffice.org Calc : HYPERLINK function
-OpenOffice.org Calc : hyperlinks
-OpenOffice.org Calc : hyperlinks;assigning macros
-OpenOffice.org Calc : hyperlinks;character formats
-OpenOffice.org Calc : hyperlinks;definition
-OpenOffice.org Calc : hyperlinks;deleting
-OpenOffice.org Calc : hyperlinks;editing
-OpenOffice.org Calc : hyperlinks;inserting
-OpenOffice.org Calc : hyperlinks;relative and absolute
-OpenOffice.org Calc : hyperlinks;turning off automatic recognition
-OpenOffice.org Calc : hyperlinks, see also links
-OpenOffice.org Calc : HYPGEOMDIST function
-OpenOffice.org Calc : hyphenation
-OpenOffice.org Calc : hyphenation;activating for a language
-OpenOffice.org Calc : hyphenation;in spreadsheets
-OpenOffice.org Calc : hyphenation;minimal number of characters
-OpenOffice.org Calc : hyphens
-OpenOffice.org Calc : hyphens;displaying custom (Writer)
-OpenOffice.org Calc : hyphens;inserting custom
-OpenOffice.org Calc : icon bars, see toolbars
-OpenOffice.org Calc : icon sizes
-OpenOffice.org Calc : IDE
-OpenOffice.org Calc : IDE;Basic IDE
-OpenOffice.org Calc : IF function
-OpenOffice.org Calc : ignore list for spellcheck
-OpenOffice.org Calc : illumination
-OpenOffice.org Calc : illumination;3D charts
-OpenOffice.org Calc : illustrations, see pictures
-OpenOffice.org Calc : IMABS function
-OpenOffice.org Calc : image button creation
-OpenOffice.org Calc : image control creation
-OpenOffice.org Calc : ImageMap
-OpenOffice.org Calc : ImageMap;definition
-OpenOffice.org Calc : ImageMap;editor
-OpenOffice.org Calc : images
-OpenOffice.org Calc : images;ImageMap
-OpenOffice.org Calc : images;inserting and editing bitmaps
-OpenOffice.org Calc : images;placeholders in presentations
-OpenOffice.org Calc : images, see also pictures
-OpenOffice.org Calc : IMAGINARY function
-OpenOffice.org Calc : imaginary numbers in analysis functions
-OpenOffice.org Calc : IMARGUMENT function
-OpenOffice.org Calc : IMCONJUGATE function
-OpenOffice.org Calc : IMCOS function
-OpenOffice.org Calc : IMDIV function
-OpenOffice.org Calc : IME
-OpenOffice.org Calc : IME;definition
-OpenOffice.org Calc : IME;showing/hiding
-OpenOffice.org Calc : IMEXP function
-OpenOffice.org Calc : IMLN function
-OpenOffice.org Calc : IMLOG10 function
-OpenOffice.org Calc : IMLOG2 function
-OpenOffice.org Calc : implicit array handling
-OpenOffice.org Calc : import filters
-OpenOffice.org Calc : import restrictions for Microsoft Office
-OpenOffice.org Calc : importing
-OpenOffice.org Calc : importing;bitmaps
-OpenOffice.org Calc : importing;compatibility settings for text import
-OpenOffice.org Calc : importing;databases
-OpenOffice.org Calc : importing;dBASE files
-OpenOffice.org Calc : importing;documents in other formats
-OpenOffice.org Calc : importing;from XML
-OpenOffice.org Calc : importing;HTML and text documents
-OpenOffice.org Calc : importing;HTML with META tags
-OpenOffice.org Calc : importing;Microsoft Office documents with VBA code
-OpenOffice.org Calc : importing;tables as text
-OpenOffice.org Calc : importing;tables in text format
-OpenOffice.org Calc : importing;templates
-OpenOffice.org Calc : importing;text databases
-OpenOffice.org Calc : IMPOWER function
-OpenOffice.org Calc : IMPRODUCT function
-OpenOffice.org Calc : IMREAL function
-OpenOffice.org Calc : IMSIN function
-OpenOffice.org Calc : IMSQRT function
-OpenOffice.org Calc : IMSUB function
-OpenOffice.org Calc : IMSUM function
-OpenOffice.org Calc : inches
-OpenOffice.org Calc : increasing scales in page view
-OpenOffice.org Calc : INDEX function
-OpenOffice.org Calc : Index tab in Help
-OpenOffice.org Calc : indexes
-OpenOffice.org Calc : indexes;backgrounds
-OpenOffice.org Calc : indexes;showing/hiding Help index tab
-OpenOffice.org Calc : indexes;unprotecting
-OpenOffice.org Calc : indicator lines in text
-OpenOffice.org Calc : INDIRECT function
-OpenOffice.org Calc : INFO function
-OpenOffice.org Calc : information functions
-OpenOffice.org Calc : information on cells
-OpenOffice.org Calc : inline array constants
-OpenOffice.org Calc : inner joins (Base)
-OpenOffice.org Calc : inner products
-OpenOffice.org Calc : input line in formula bar
-OpenOffice.org Calc : input method window
-OpenOffice.org Calc : input support in spreadsheets
-OpenOffice.org Calc : insert mode for entering text
-OpenOffice.org Calc : inserting
-OpenOffice.org Calc : inserting;applets
-OpenOffice.org Calc : inserting;breaks
-OpenOffice.org Calc : inserting;cell ranges
-OpenOffice.org Calc : inserting;cell ranges from spreadsheets
-OpenOffice.org Calc : inserting;cells
-OpenOffice.org Calc : inserting;cells, by drag and drop
-OpenOffice.org Calc : inserting;cells, toolbar icon
-OpenOffice.org Calc : inserting;charts
-OpenOffice.org Calc : inserting;clipboard options
-OpenOffice.org Calc : inserting;columns
-OpenOffice.org Calc : inserting;data from text documents
-OpenOffice.org Calc : inserting;datasource records in spreadsheets
-OpenOffice.org Calc : inserting;drawings
-OpenOffice.org Calc : inserting;external data
-OpenOffice.org Calc : inserting;floating frames
-OpenOffice.org Calc : inserting;form fields
-OpenOffice.org Calc : inserting;formulas
-OpenOffice.org Calc : inserting;fractions
-OpenOffice.org Calc : inserting;hyperlinks
-OpenOffice.org Calc : inserting;line breaks in cells
-OpenOffice.org Calc : inserting;manual column breaks
-OpenOffice.org Calc : inserting;manual row breaks
-OpenOffice.org Calc : inserting;matrix formulas
-OpenOffice.org Calc : inserting;movies/sounds
-OpenOffice.org Calc : inserting;new text tables defaults
-OpenOffice.org Calc : inserting;notes
-OpenOffice.org Calc : inserting;objects from Gallery
-OpenOffice.org Calc : inserting;objects, toolbar icon
-OpenOffice.org Calc : inserting;OLE objects
-OpenOffice.org Calc : inserting;paragraph bullets
-OpenOffice.org Calc : inserting;plug-ins
-OpenOffice.org Calc : inserting;references, by drag and drop
-OpenOffice.org Calc : inserting;rows
-OpenOffice.org Calc : inserting;sheets
-OpenOffice.org Calc : inserting;special characters
-OpenOffice.org Calc : inserting;tab stops
-OpenOffice.org Calc : inserting;text files with data
-OpenOffice.org Calc : inserting;values
-OpenOffice.org Calc : inserting functions
-OpenOffice.org Calc : inserting functions;function list window
-OpenOffice.org Calc : inserting functions;Function Wizard
-OpenOffice.org Calc : installing
-OpenOffice.org Calc : installing;ActiveX control
-OpenOffice.org Calc : installing;mobile device filters
-OpenOffice.org Calc : installing;UNO components
-OpenOffice.org Calc : instructions
-OpenOffice.org Calc : instructions;general
-OpenOffice.org Calc : instructions;OpenOffice.org Calc
-OpenOffice.org Calc : INT function
-OpenOffice.org Calc : integers with leading zeros
-OpenOffice.org Calc : INTERCEPT function
-OpenOffice.org Calc : interests for unchanged amortization installments
-OpenOffice.org Calc : internal rates of return
-OpenOffice.org Calc : internal rates of return;irregular payments
-OpenOffice.org Calc : internal rates of return;modified
-OpenOffice.org Calc : internal rates of return;regular payments
-OpenOffice.org Calc : international currency formats
-OpenOffice.org Calc : Internet
-OpenOffice.org Calc : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Calc : Internet;presentations
-OpenOffice.org Calc : Internet;starting searches
-OpenOffice.org Calc : Internet;turning off recognition of addresses
-OpenOffice.org Calc : Internet glossary
-OpenOffice.org Calc : intersection operator
-OpenOffice.org Calc : intersections
-OpenOffice.org Calc : INTRATE function
-OpenOffice.org Calc : invalid data
-OpenOffice.org Calc : invalid data;marking
-OpenOffice.org Calc : invalid names
-OpenOffice.org Calc : invalid names;error messages
-OpenOffice.org Calc : invalid references
-OpenOffice.org Calc : invalid references;error messages
-OpenOffice.org Calc : inverse arrays
-OpenOffice.org Calc : inverse F probability distribution
-OpenOffice.org Calc : inverse of Fisher transformation
-OpenOffice.org Calc : inverse of lognormal distribution
-OpenOffice.org Calc : inverse of t-distribution
-OpenOffice.org Calc : invert filter
-OpenOffice.org Calc : inverting tables
-OpenOffice.org Calc : invisible areas
-OpenOffice.org Calc : invisible cells
-OpenOffice.org Calc : IPMT function
-OpenOffice.org Calc : IRR function
-OpenOffice.org Calc : ISBLANK function
-OpenOffice.org Calc : ISERR function
-OpenOffice.org Calc : ISERROR function
-OpenOffice.org Calc : ISEVEN function
-OpenOffice.org Calc : ISEVEN_ADD function
-OpenOffice.org Calc : ISFORMULA function
-OpenOffice.org Calc : ISLEAPYEAR function
-OpenOffice.org Calc : ISLOGICAL function
-OpenOffice.org Calc : ISNA function
-OpenOffice.org Calc : ISNONTEXT function
-OpenOffice.org Calc : ISNUMBER function
-OpenOffice.org Calc : ISODD function
-OpenOffice.org Calc : ISODD_ADD function
-OpenOffice.org Calc : ISPMT function
-OpenOffice.org Calc : ISREF function
-OpenOffice.org Calc : ISTEXT function
-OpenOffice.org Calc : italic text
-OpenOffice.org Calc : iterative references in spreadsheets
-OpenOffice.org Calc : Java
-OpenOffice.org Calc : Java;definition
-OpenOffice.org Calc : Java;scripting
-OpenOffice.org Calc : Java;setting options
-OpenOffice.org Calc : JDBC
-OpenOffice.org Calc : JDBC;databases (Base)
-OpenOffice.org Calc : JDBC;definition
-OpenOffice.org Calc : JIS function
-OpenOffice.org Calc : joining
-OpenOffice.org Calc : joining;paragraphs
-OpenOffice.org Calc : joining;tables (Base)
-OpenOffice.org Calc : joins in databases (Base)
-OpenOffice.org Calc : justifying text
-OpenOffice.org Calc : kerning
-OpenOffice.org Calc : kerning;Asian texts
-OpenOffice.org Calc : kerning;definition
-OpenOffice.org Calc : kerning;in characters
-OpenOffice.org Calc : key fields for relations (Base)
-OpenOffice.org Calc : keyboard
-OpenOffice.org Calc : keyboard;assigning/editing shortcut keys
-OpenOffice.org Calc : keyboard;general commands
-OpenOffice.org Calc : keyboard;removing numbering
-OpenOffice.org Calc : keys
-OpenOffice.org Calc : keys;adding push buttons
-OpenOffice.org Calc : keys;primary keys (Base)
-OpenOffice.org Calc : kiosk export
-OpenOffice.org Calc : KURT function
-OpenOffice.org Calc : label ranges in sheets
-OpenOffice.org Calc : labels
-OpenOffice.org Calc : labels;creating and synchronizing
-OpenOffice.org Calc : labels;for charts
-OpenOffice.org Calc : labels;for draw objects
-OpenOffice.org Calc : labels;form functions
-OpenOffice.org Calc : labels;from databases
-OpenOffice.org Calc : labels, see also names/callouts
-OpenOffice.org Calc : landscape printing
-OpenOffice.org Calc : languages
-OpenOffice.org Calc : languages;activating modules
-OpenOffice.org Calc : languages;Asian support
-OpenOffice.org Calc : languages;complex text layout
-OpenOffice.org Calc : languages;locale settings
-OpenOffice.org Calc : languages;selecting
-OpenOffice.org Calc : languages;setting options
-OpenOffice.org Calc : languages;spellcheck
-OpenOffice.org Calc : languages;spellchecking and formatting
-OpenOffice.org Calc : LARGE function
-OpenOffice.org Calc : large handles (Writer)
-OpenOffice.org Calc : large icons
-OpenOffice.org Calc : layer arrangement
-OpenOffice.org Calc : layout
-OpenOffice.org Calc : layout;importing Word documents
-OpenOffice.org Calc : layout;pages
-OpenOffice.org Calc : layout;spreadsheets
-OpenOffice.org Calc : LCM function
-OpenOffice.org Calc : LCM_ADD function
-OpenOffice.org Calc : LDAP server
-OpenOffice.org Calc : LDAP server;address books (Base)
-OpenOffice.org Calc : LDAP server;sign on options
-OpenOffice.org Calc : leading between paragraphs
-OpenOffice.org Calc : leading zeros
-OpenOffice.org Calc : leap year determination
-OpenOffice.org Calc : least common multiples
-OpenOffice.org Calc : left alignment of paragraphs
-OpenOffice.org Calc : LEFT function
-OpenOffice.org Calc : left joins (Base)
-OpenOffice.org Calc : legends
-OpenOffice.org Calc : legends;charts
-OpenOffice.org Calc : legends;draw objects
-OpenOffice.org Calc : legends;rounding corners
-OpenOffice.org Calc : LEN function
-OpenOffice.org Calc : Letter Wizard
-OpenOffice.org Calc : levels
-OpenOffice.org Calc : levels;depth stagger
-OpenOffice.org Calc : limits
-OpenOffice.org Calc : limits;specifying value limits on input
-OpenOffice.org Calc : limits of tables (Writer)
-OpenOffice.org Calc : line arrangement
-OpenOffice.org Calc : line arrangement;cells
-OpenOffice.org Calc : line breaks
-OpenOffice.org Calc : line breaks;in cells
-OpenOffice.org Calc : line charts
-OpenOffice.org Calc : line spacing
-OpenOffice.org Calc : line spacing;context menu in paragraphs
-OpenOffice.org Calc : line spacing;paragraph
-OpenOffice.org Calc : line styles
-OpenOffice.org Calc : line styles;applying
-OpenOffice.org Calc : line styles;defining
-OpenOffice.org Calc : linear depreciations
-OpenOffice.org Calc : linear series
-OpenOffice.org Calc : lines
-OpenOffice.org Calc : lines;contours (Draw/Impress)
-OpenOffice.org Calc : lines;defining ends
-OpenOffice.org Calc : lines;draw functions
-OpenOffice.org Calc : lines;drawing in text
-OpenOffice.org Calc : lines;editing points
-OpenOffice.org Calc : lines;removing automatic lines
-OpenOffice.org Calc : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Calc : lines of text
-OpenOffice.org Calc : lines of text;alignment
-OpenOffice.org Calc : LINEST function
-OpenOffice.org Calc : links
-OpenOffice.org Calc : links;between cells and controls
-OpenOffice.org Calc : links;by drag and drop
-OpenOffice.org Calc : links;character formats
-OpenOffice.org Calc : links;definition
-OpenOffice.org Calc : links;editing hyperlinks
-OpenOffice.org Calc : links;inserting
-OpenOffice.org Calc : links;modifying
-OpenOffice.org Calc : links;opening files with
-OpenOffice.org Calc : links;relational databases (Base)
-OpenOffice.org Calc : links;turning off automatic recognition
-OpenOffice.org Calc : links;updating options (Writer)
-OpenOffice.org Calc : links;updating specific links
-OpenOffice.org Calc : list box creation
-OpenOffice.org Calc : list of functions
-OpenOffice.org Calc : lists
-OpenOffice.org Calc : lists;data assigned to controls
-OpenOffice.org Calc : lists;registered databases (Base)
-OpenOffice.org Calc : lists;regular expressions
-OpenOffice.org Calc : lists;user-defined
-OpenOffice.org Calc : live presentations on the Internet
-OpenOffice.org Calc : LN function
-OpenOffice.org Calc : loading
-OpenOffice.org Calc : loading;documents
-OpenOffice.org Calc : loading;documents from other formats
-OpenOffice.org Calc : loading;HTML documents, automatically
-OpenOffice.org Calc : loading;Microsoft Office documents with VBA code
-OpenOffice.org Calc : loading;reloading
-OpenOffice.org Calc : loading;XML files
-OpenOffice.org Calc : locale settings
-OpenOffice.org Calc : LOG function
-OpenOffice.org Calc : LOG10 function
-OpenOffice.org Calc : logarithmic scaling along axes
-OpenOffice.org Calc : logarithms
-OpenOffice.org Calc : LOGEST function
-OpenOffice.org Calc : logical functions
-OpenOffice.org Calc : logical number formats
-OpenOffice.org Calc : LOGINV function
-OpenOffice.org Calc : LOGNORMDIST function
-OpenOffice.org Calc : LOOKUP function
-OpenOffice.org Calc : LOWER function
-OpenOffice.org Calc : lowercase letters
-OpenOffice.org Calc : lowercase letters;AutoInput function (in cells)
-OpenOffice.org Calc : lowercase letters;font effects
-OpenOffice.org Calc : lowest common multiples
-OpenOffice.org Calc : Macauley duration
-OpenOffice.org Calc : macros
-OpenOffice.org Calc : macros;assigning to events in forms
-OpenOffice.org Calc : macros;in MS Office documents
-OpenOffice.org Calc : macros;interrupting
-OpenOffice.org Calc : macros;organizing
-OpenOffice.org Calc : macros;recording
-OpenOffice.org Calc : macros;running when incorrect input
-OpenOffice.org Calc : macros;security
-OpenOffice.org Calc : macros;security warning dialog
-OpenOffice.org Calc : macros;selecting security warnings
-OpenOffice.org Calc : magnifiers
-OpenOffice.org Calc : Mail Merge feature in Microsoft Office
-OpenOffice.org Calc : manual column breaks
-OpenOffice.org Calc : manual row breaks
-OpenOffice.org Calc : margins
-OpenOffice.org Calc : margins;pages
-OpenOffice.org Calc : margins;setting with the mouse
-OpenOffice.org Calc : margins;shadows
-OpenOffice.org Calc : marking cells
-OpenOffice.org Calc : marking changes
-OpenOffice.org Calc : Markup feature in Microsoft Office
-OpenOffice.org Calc : MATCH function
-OpenOffice.org Calc : Math formula editor
-OpenOffice.org Calc : mathematical functions
-OpenOffice.org Calc : matrices
-OpenOffice.org Calc : matrices;calculations
-OpenOffice.org Calc : matrices;entering matrix formulas
-OpenOffice.org Calc : matrices;functions
-OpenOffice.org Calc : MAX function
-OpenOffice.org Calc : MAXA function
-OpenOffice.org Calc : maximum values in Calc databases
-OpenOffice.org Calc : MDETERM function
-OpenOffice.org Calc : MDURATION function
-OpenOffice.org Calc : means
-OpenOffice.org Calc : means;geometric
-OpenOffice.org Calc : means;harmonic
-OpenOffice.org Calc : means;of data set without margin data
-OpenOffice.org Calc : measurement units
-OpenOffice.org Calc : measurement units;changing on rulers
-OpenOffice.org Calc : measurement units;converting
-OpenOffice.org Calc : measurement units;selecting
-OpenOffice.org Calc : Media Player window
-OpenOffice.org Calc : MEDIAN function
-OpenOffice.org Calc : menus
-OpenOffice.org Calc : menus;activating context menus
-OpenOffice.org Calc : menus;customizing
-OpenOffice.org Calc : menus;inactive menu items
-OpenOffice.org Calc : merging
-OpenOffice.org Calc : merging;cells
-OpenOffice.org Calc : merging;data ranges
-OpenOffice.org Calc : merging;documents
-OpenOffice.org Calc : META tags
-OpenOffice.org Calc : metrics
-OpenOffice.org Calc : metrics;converting
-OpenOffice.org Calc : metrics;document formatting (Writer)
-OpenOffice.org Calc : metrics;in sheets
-OpenOffice.org Calc : Microsoft Excel functions
-OpenOffice.org Calc : Microsoft Office
-OpenOffice.org Calc : Microsoft Office;Access databases (base)
-OpenOffice.org Calc : Microsoft Office;as standard file format
-OpenOffice.org Calc : Microsoft Office;document import restrictions
-OpenOffice.org Calc : Microsoft Office;feature comparisons
-OpenOffice.org Calc : Microsoft Office;importing password protected files
-OpenOffice.org Calc : Microsoft Office;importing Word documents
-OpenOffice.org Calc : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Calc : Microsoft Office;new users information
-OpenOffice.org Calc : Microsoft Office;opening Microsoft documents
-OpenOffice.org Calc : Microsoft Office;reassigning document types
-OpenOffice.org Calc : MID function
-OpenOffice.org Calc : MIN function
-OpenOffice.org Calc : MINA function
-OpenOffice.org Calc : minimum values in Calc databases
-OpenOffice.org Calc : minus sign, see also operators
-OpenOffice.org Calc : MINUTE function
-OpenOffice.org Calc : MINVERSE function
-OpenOffice.org Calc : MIRR function
-OpenOffice.org Calc : MMULT function
-OpenOffice.org Calc : mobile device filters
-OpenOffice.org Calc : MOD function
-OpenOffice.org Calc : MODE function
-OpenOffice.org Calc : models in XForms
-OpenOffice.org Calc : modified internal rates of return
-OpenOffice.org Calc : modifying, see changing
-OpenOffice.org Calc : MONTH function
-OpenOffice.org Calc : MONTHS function
-OpenOffice.org Calc : more controls
-OpenOffice.org Calc : mosaic filter
-OpenOffice.org Calc : most common value
-OpenOffice.org Calc : mouse
-OpenOffice.org Calc : mouse;pointers when using drag and drop
-OpenOffice.org Calc : mouse;positioning
-OpenOffice.org Calc : moving
-OpenOffice.org Calc : moving;cells by drag and drop
-OpenOffice.org Calc : moving;spreadsheets
-OpenOffice.org Calc : moving;tab stops on ruler
-OpenOffice.org Calc : moving;toolbars
-OpenOffice.org Calc : moving;using guide lines in presentations
-OpenOffice.org Calc : moving;visible cells only
-OpenOffice.org Calc : MROUND function
-OpenOffice.org Calc : MS ADO interface (Base)
-OpenOffice.org Calc : multi-line text in cells
-OpenOffice.org Calc : multi-line titles in forms
-OpenOffice.org Calc : MULTINOMIAL function
-OpenOffice.org Calc : multiple cells selection
-OpenOffice.org Calc : multiple documents
-OpenOffice.org Calc : multiple documents;opening
-OpenOffice.org Calc : multiple operations
-OpenOffice.org Calc : multiple sheets
-OpenOffice.org Calc : multiplication sign, see also operators
-OpenOffice.org Calc : multiplying
-OpenOffice.org Calc : multiplying;cell contents in Calc databases
-OpenOffice.org Calc : multiplying;numbers
-OpenOffice.org Calc : MUNIT function
-OpenOffice.org Calc : My Documents folder
-OpenOffice.org Calc : My Documents folder;changing work directory
-OpenOffice.org Calc : My Documents folder;opening
-OpenOffice.org Calc : MySQL databases (Base)
-OpenOffice.org Calc : N function
-OpenOffice.org Calc : NA function
-OpenOffice.org Calc : name recognition on/off
-OpenOffice.org Calc : names
-OpenOffice.org Calc : names;defining for cells
-OpenOffice.org Calc : names;for cell ranges
-OpenOffice.org Calc : names;multi-line titles
-OpenOffice.org Calc : names;objects
-OpenOffice.org Calc : names;sheets
-OpenOffice.org Calc : names, see also labels/callouts
-OpenOffice.org Calc : namespace organization in XForms
-OpenOffice.org Calc : native SQL (Base)
-OpenOffice.org Calc : natural language addressing
-OpenOffice.org Calc : natural logarithm
-OpenOffice.org Calc : natural logarithm of Gamma function
-OpenOffice.org Calc : natural sort algorithm
-OpenOffice.org Calc : navigating
-OpenOffice.org Calc : navigating;in documents
-OpenOffice.org Calc : navigating;in spreadsheets
-OpenOffice.org Calc : Navigation bar
-OpenOffice.org Calc : Navigation bar;controls
-OpenOffice.org Calc : Navigation bar;forms
-OpenOffice.org Calc : Navigator
-OpenOffice.org Calc : Navigator;contents as lists
-OpenOffice.org Calc : Navigator;docking
-OpenOffice.org Calc : Navigator;for sheets
-OpenOffice.org Calc : Navigator;working with
-OpenOffice.org Calc : nearest multiple
-OpenOffice.org Calc : negative binomial distribution
-OpenOffice.org Calc : negative numbers
-OpenOffice.org Calc : NEGBINOMDIST function
-OpenOffice.org Calc : net annual interest rates
-OpenOffice.org Calc : net charts
-OpenOffice.org Calc : net present values
-OpenOffice.org Calc : network identity options
-OpenOffice.org Calc : NETWORKDAYS function
-OpenOffice.org Calc : new databases
-OpenOffice.org Calc : new documents
-OpenOffice.org Calc : new German spellcheck
-OpenOffice.org Calc : new lines in cells
-OpenOffice.org Calc : new windows
-OpenOffice.org Calc : NOMINAL function
-OpenOffice.org Calc : nominal interest rates
-OpenOffice.org Calc : NOMINAL_ADD function
-OpenOffice.org Calc : non-breaking dashes
-OpenOffice.org Calc : non-breaking spaces (Writer)
-OpenOffice.org Calc : non-printing characters (Writer)
-OpenOffice.org Calc : normal distribution
-OpenOffice.org Calc : normal distribution;inverse of
-OpenOffice.org Calc : normal distribution;inverse of standard
-OpenOffice.org Calc : normal distribution;standard
-OpenOffice.org Calc : normal distribution;statistics
-OpenOffice.org Calc : NORMDIST function
-OpenOffice.org Calc : NORMINV function
-OpenOffice.org Calc : NORMSDIST function
-OpenOffice.org Calc : NORMSINV function
-OpenOffice.org Calc : NOT function
-OpenOffice.org Calc : notes
-OpenOffice.org Calc : notes;displaying (Calc)
-OpenOffice.org Calc : notes;help text for cells
-OpenOffice.org Calc : notes;inserting and editing
-OpenOffice.org Calc : notes;on cells
-OpenOffice.org Calc : notes;printing
-OpenOffice.org Calc : notes;printing in text
-OpenOffice.org Calc : NOW function
-OpenOffice.org Calc : NPER function
-OpenOffice.org Calc : NPV function
-OpenOffice.org Calc : null values
-OpenOffice.org Calc : null values;printing
-OpenOffice.org Calc : number completion on/off
-OpenOffice.org Calc : number formats
-OpenOffice.org Calc : number formats;adding/deleting decimal places in cells
-OpenOffice.org Calc : number formats;codes
-OpenOffice.org Calc : number formats;colors
-OpenOffice.org Calc : number formats;formats
-OpenOffice.org Calc : number formats;logical
-OpenOffice.org Calc : number formats;millions
-OpenOffice.org Calc : number formats;recognition in text tables
-OpenOffice.org Calc : number of combinations
-OpenOffice.org Calc : number of combinations with repetitions
-OpenOffice.org Calc : number of coupons
-OpenOffice.org Calc : number of days
-OpenOffice.org Calc : number of days;in a specific month of a year
-OpenOffice.org Calc : number of days;in a specific year
-OpenOffice.org Calc : number of entries
-OpenOffice.org Calc : number of months between two dates
-OpenOffice.org Calc : number of pages
-OpenOffice.org Calc : number of payment periods
-OpenOffice.org Calc : number of permutations
-OpenOffice.org Calc : number of sheets
-OpenOffice.org Calc : number of sheets;function
-OpenOffice.org Calc : number of sheets
-OpenOffice.org Calc : number of tables
-OpenOffice.org Calc : number of weeks
-OpenOffice.org Calc : number of weeks;between two dates
-OpenOffice.org Calc : number of weeks;in a specific year
-OpenOffice.org Calc : number of years between two dates
-OpenOffice.org Calc : number series import
-OpenOffice.org Calc : numbering
-OpenOffice.org Calc : numbering;options
-OpenOffice.org Calc : numbering;paragraphs
-OpenOffice.org Calc : numbering;turning off
-OpenOffice.org Calc : numbering;using automatically
-OpenOffice.org Calc : numbers
-OpenOffice.org Calc : numbers;as text
-OpenOffice.org Calc : numbers;changing text/number formats
-OpenOffice.org Calc : numbers;counting
-OpenOffice.org Calc : numbers;date, time and currency formats
-OpenOffice.org Calc : numbers;decimal places
-OpenOffice.org Calc : numbers;decimal places (Calc)
-OpenOffice.org Calc : numbers;determining ranks
-OpenOffice.org Calc : numbers;entering fractions
-OpenOffice.org Calc : numbers;entering without number formats
-OpenOffice.org Calc : numbers;filter sheets
-OpenOffice.org Calc : numbers;formatting in tables
-OpenOffice.org Calc : numbers;formatting options for selected cells
-OpenOffice.org Calc : numbers;greater than or equal to
-OpenOffice.org Calc : numbers;highlighting negative numbers
-OpenOffice.org Calc : numbers;multiplying
-OpenOffice.org Calc : numbers;rounded off
-OpenOffice.org Calc : numbers;rounding down to next integer
-OpenOffice.org Calc : numbers;rounding up/down to even integers
-OpenOffice.org Calc : numbers;user-defined formatting in tables
-OpenOffice.org Calc : numbers;with leading zeros
-OpenOffice.org Calc : numerical fields in forms
-OpenOffice.org Calc : objects
-OpenOffice.org Calc : objects;always moveable (Impress/Draw)
-OpenOffice.org Calc : objects;arranging within stacks
-OpenOffice.org Calc : objects;contours in presentations
-OpenOffice.org Calc : objects;copying when moving in presentations
-OpenOffice.org Calc : objects;definition
-OpenOffice.org Calc : objects;displaying in spreadsheets
-OpenOffice.org Calc : objects;displaying in text documents
-OpenOffice.org Calc : objects;editing
-OpenOffice.org Calc : objects;inserting from Gallery
-OpenOffice.org Calc : objects;inserting OLE objects
-OpenOffice.org Calc : objects;moving and resizing with mouse
-OpenOffice.org Calc : objects;naming
-OpenOffice.org Calc : objects;opening
-OpenOffice.org Calc : objects;properties of charts
-OpenOffice.org Calc : objects;quickly moving to
-OpenOffice.org Calc : objects;titles and descriptions
-OpenOffice.org Calc : OCT2BIN function
-OpenOffice.org Calc : OCT2DEC function
-OpenOffice.org Calc : OCT2HEX function
-OpenOffice.org Calc : ODBC
-OpenOffice.org Calc : ODBC;database (Base)
-OpenOffice.org Calc : ODBC;definition
-OpenOffice.org Calc : ODD function
-OpenOffice.org Calc : odd integers
-OpenOffice.org Calc : ODDFPRICE function
-OpenOffice.org Calc : ODDFYIELD function
-OpenOffice.org Calc : ODDLPRICE function
-OpenOffice.org Calc : ODDLYIELD function
-OpenOffice.org Calc : ODF file formats
-OpenOffice.org Calc : Office
-OpenOffice.org Calc : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Calc : OFFSET function
-OpenOffice.org Calc : old German spellcheck
-OpenOffice.org Calc : OLE
-OpenOffice.org Calc : OLE;definition
-OpenOffice.org Calc : OLE objects
-OpenOffice.org Calc : OLE objects;arranging within stacks
-OpenOffice.org Calc : OLE objects;captions (Writer)
-OpenOffice.org Calc : OLE objects;inserting
-OpenOffice.org Calc : OLE objects;number of
-OpenOffice.org Calc : OLE objects;protecting
-OpenOffice.org Calc : one and a half line spacing in text
-OpenOffice.org Calc : online registration
-OpenOffice.org Calc : online update options
-OpenOffice.org Calc : online updates
-OpenOffice.org Calc : online updates;checking automatically
-OpenOffice.org Calc : online updates;checking manually
-OpenOffice.org Calc : Open/Save dialogs
-OpenOffice.org Calc : OpenDocument file formats
-OpenOffice.org Calc : OpenGL
-OpenOffice.org Calc : OpenGL;definition
-OpenOffice.org Calc : OpenGL;optimized output
-OpenOffice.org Calc : opening
-OpenOffice.org Calc : opening;context menus
-OpenOffice.org Calc : opening;database files
-OpenOffice.org Calc : opening;dialog settings
-OpenOffice.org Calc : opening;documents
-OpenOffice.org Calc : opening;documents from other formats
-OpenOffice.org Calc : opening;files with links
-OpenOffice.org Calc : opening;files, with placeholders
-OpenOffice.org Calc : opening;forms
-OpenOffice.org Calc : opening;Microsoft Office files
-OpenOffice.org Calc : opening;mobile device documents
-OpenOffice.org Calc : opening;objects
-OpenOffice.org Calc : opening;reports
-OpenOffice.org Calc : opening;scenarios
-OpenOffice.org Calc : opening;several files
-OpenOffice.org Calc : opening;sheets in HTML
-OpenOffice.org Calc : opening;XForms
-OpenOffice.org Calc : OpenOffice.org Base data sources
-OpenOffice.org Calc : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Calc : OpenOffice.org documents
-OpenOffice.org Calc : OpenOffice.org documents;mobile device filters
-OpenOffice.org Calc : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Calc : OpenOffice.org Math start
-OpenOffice.org Calc : operators
-OpenOffice.org Calc : operators;default filters
-OpenOffice.org Calc : operators;formula functions
-OpenOffice.org Calc : optimal column widths
-OpenOffice.org Calc : optimal row heights
-OpenOffice.org Calc : optional hyphens (Writer)
-OpenOffice.org Calc : options
-OpenOffice.org Calc : options;accessibility
-OpenOffice.org Calc : options;appearance
-OpenOffice.org Calc : options;compatibility (Writer)
-OpenOffice.org Calc : options;network identity
-OpenOffice.org Calc : options;online update
-OpenOffice.org Calc : options;tools
-OpenOffice.org Calc : OR function
-OpenOffice.org Calc : Oracle databases (base)
-OpenOffice.org Calc : order of chart data
-OpenOffice.org Calc : ordering
-OpenOffice.org Calc : ordering;objects
-OpenOffice.org Calc : organizing
-OpenOffice.org Calc : organizing;macros and scripts
-OpenOffice.org Calc : organizing;namespaces in XForms
-OpenOffice.org Calc : organizing;styles
-OpenOffice.org Calc : organizing;templates
-OpenOffice.org Calc : original size
-OpenOffice.org Calc : original size;printing in OpenOffice.org Math
-OpenOffice.org Calc : original size;restoring after cropping
-OpenOffice.org Calc : outlines
-OpenOffice.org Calc : outlines;font effects
-OpenOffice.org Calc : outlines;outline symbols
-OpenOffice.org Calc : outlines;sending to presentations
-OpenOffice.org Calc : outlines;sheets
-OpenOffice.org Calc : output ranges of DataPilot tables
-OpenOffice.org Calc : overwrite mode
-OpenOffice.org Calc : packages, see extensions
-OpenOffice.org Calc : page breaks
-OpenOffice.org Calc : page breaks;displaying (Calc)
-OpenOffice.org Calc : page breaks;inserting in spreadsheets
-OpenOffice.org Calc : page breaks;spreadsheet preview
-OpenOffice.org Calc : page formats
-OpenOffice.org Calc : page formats;maximizing
-OpenOffice.org Calc : page formats;restriction
-OpenOffice.org Calc : page styles
-OpenOffice.org Calc : page styles;editing/applying with statusbar
-OpenOffice.org Calc : page styles;footers
-OpenOffice.org Calc : page styles;headers
-OpenOffice.org Calc : page views
-OpenOffice.org Calc : page views;increasing scales
-OpenOffice.org Calc : page views;reducing scales
-OpenOffice.org Calc : pages
-OpenOffice.org Calc : pages;backgrounds in spreadsheets
-OpenOffice.org Calc : pages;formatting and numbering
-OpenOffice.org Calc : pages;order when printing
-OpenOffice.org Calc : pages;printing page names in presentations
-OpenOffice.org Calc : pages;scaling
-OpenOffice.org Calc : pages;selecting one to print
-OpenOffice.org Calc : paint box
-OpenOffice.org Calc : paint can for applying styles
-OpenOffice.org Calc : paint can symbol
-OpenOffice.org Calc : pair kerning
-OpenOffice.org Calc : Palm file filters
-OpenOffice.org Calc : paper formats
-OpenOffice.org Calc : paper size warning
-OpenOffice.org Calc : paper trays
-OpenOffice.org Calc : paragraph marks
-OpenOffice.org Calc : paragraph marks;displaying (Writer)
-OpenOffice.org Calc : paragraph styles
-OpenOffice.org Calc : paragraph styles;languages
-OpenOffice.org Calc : paragraph styles;modifying basic fonts
-OpenOffice.org Calc : paragraphs
-OpenOffice.org Calc : paragraphs;alignment
-OpenOffice.org Calc : paragraphs;Asian typography
-OpenOffice.org Calc : paragraphs;backgrounds
-OpenOffice.org Calc : paragraphs;defining borders
-OpenOffice.org Calc : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Calc : paragraphs;increasing indents of
-OpenOffice.org Calc : paragraphs;indents, margins and columns
-OpenOffice.org Calc : paragraphs;inserting bullets
-OpenOffice.org Calc : paragraphs;joining
-OpenOffice.org Calc : paragraphs;numbering automatically
-OpenOffice.org Calc : paragraphs;removing blank ones
-OpenOffice.org Calc : paragraphs;spacing
-OpenOffice.org Calc : paragraphs;tab stops
-OpenOffice.org Calc : parameters
-OpenOffice.org Calc : parameters;command line
-OpenOffice.org Calc : parameters;queries (Base)
-OpenOffice.org Calc : passwords for protecting contents
-OpenOffice.org Calc : pasting
-OpenOffice.org Calc : pasting;cell ranges
-OpenOffice.org Calc : pasting;cell ranges from spreadsheets
-OpenOffice.org Calc : pasting;data from text documents
-OpenOffice.org Calc : pasting;draw objects
-OpenOffice.org Calc : pasting;draw objects from other documents
-OpenOffice.org Calc : pasting;formatted/unformatted text
-OpenOffice.org Calc : pasting;formulas
-OpenOffice.org Calc : pasting;from data source view
-OpenOffice.org Calc : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Calc : pasting;pictures from other documents
-OpenOffice.org Calc : pasting;sheet areas in text documents
-OpenOffice.org Calc : pasting;to Gallery
-OpenOffice.org Calc : pasting;values in multiple sheets
-OpenOffice.org Calc : paths
-OpenOffice.org Calc : paths;changing work directory
-OpenOffice.org Calc : paths;defaults
-OpenOffice.org Calc : pattern editor
-OpenOffice.org Calc : pattern fields
-OpenOffice.org Calc : pattern fields;form functions
-OpenOffice.org Calc : patterns for objects
-OpenOffice.org Calc : payment periods
-OpenOffice.org Calc : payment periods;number of
-OpenOffice.org Calc : PDF
-OpenOffice.org Calc : PDF;export
-OpenOffice.org Calc : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Calc : PDF export of print ranges
-OpenOffice.org Calc : PEARSON function
-OpenOffice.org Calc : percentage calculations
-OpenOffice.org Calc : PERCENTILE function
-OpenOffice.org Calc : PERCENTRANK function
-OpenOffice.org Calc : periodic amortizement rates
-OpenOffice.org Calc : permitted cell contents
-OpenOffice.org Calc : PERMUT function
-OpenOffice.org Calc : PERMUTATIONA function
-OpenOffice.org Calc : personal data input
-OpenOffice.org Calc : PHI function
-OpenOffice.org Calc : phonebook sorting rules
-OpenOffice.org Calc : phonetic guide
-OpenOffice.org Calc : PI function
-OpenOffice.org Calc : picklist creation
-OpenOffice.org Calc : pictures
-OpenOffice.org Calc : pictures;adding to Gallery
-OpenOffice.org Calc : pictures;arranging within stacks
-OpenOffice.org Calc : pictures;assigning macros
-OpenOffice.org Calc : pictures;backgrounds
-OpenOffice.org Calc : pictures;captions (Writer)
-OpenOffice.org Calc : pictures;changing paths
-OpenOffice.org Calc : pictures;cropping and zooming
-OpenOffice.org Calc : pictures;displaying in Calc
-OpenOffice.org Calc : pictures;displaying in Writer (Writer)
-OpenOffice.org Calc : pictures;drag and drop between documents
-OpenOffice.org Calc : pictures;drawing
-OpenOffice.org Calc : pictures;editing
-OpenOffice.org Calc : pictures;filters
-OpenOffice.org Calc : pictures;ImageMap
-OpenOffice.org Calc : pictures;inserting automatically
-OpenOffice.org Calc : pictures;inserting from Gallery
-OpenOffice.org Calc : pictures;number of
-OpenOffice.org Calc : pictures;printing
-OpenOffice.org Calc : pictures;scaling/resizing
-OpenOffice.org Calc : pie charts
-OpenOffice.org Calc : Pivot table import
-OpenOffice.org Calc : Pivot table, see DataPilot function
-OpenOffice.org Calc : Pivot tables feature in Microsoft Office
-OpenOffice.org Calc : pixel editor
-OpenOffice.org Calc : pixel graphics
-OpenOffice.org Calc : pixel graphics;inserting and editing
-OpenOffice.org Calc : pixel patterns
-OpenOffice.org Calc : placeholders
-OpenOffice.org Calc : placeholders;in SQL queries
-OpenOffice.org Calc : placeholders;on opening files
-OpenOffice.org Calc : placing toolbars
-OpenOffice.org Calc : playing movies and sound files
-OpenOffice.org Calc : plotting data as charts
-OpenOffice.org Calc : plug-ins
-OpenOffice.org Calc : plug-ins;activating and deactivating
-OpenOffice.org Calc : plug-ins;definition
-OpenOffice.org Calc : plug-ins;inserting
-OpenOffice.org Calc : plus sign, see also operators
-OpenOffice.org Calc : PMT function
-OpenOffice.org Calc : pocket device appliances
-OpenOffice.org Calc : Pocket PC file filters
-OpenOffice.org Calc : points
-OpenOffice.org Calc : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Calc : points of intersection
-OpenOffice.org Calc : POISSON function
-OpenOffice.org Calc : polygon drawing
-OpenOffice.org Calc : pop-art filter
-OpenOffice.org Calc : portable document format
-OpenOffice.org Calc : positioning
-OpenOffice.org Calc : positioning;draw objects and controls
-OpenOffice.org Calc : positioning;fonts
-OpenOffice.org Calc : positioning;objects
-OpenOffice.org Calc : positioning;toolbars
-OpenOffice.org Calc : post method for form transmissions
-OpenOffice.org Calc : posterizing filter
-OpenOffice.org Calc : PostScript
-OpenOffice.org Calc : PostScript;creating files
-OpenOffice.org Calc : PostScript;PDF converter, UNIX
-OpenOffice.org Calc : POWER function
-OpenOffice.org Calc : PowerPoint export
-OpenOffice.org Calc : powers of 2 calculations
-OpenOffice.org Calc : PPMT function
-OpenOffice.org Calc : precision as shown
-OpenOffice.org Calc : precision as shown (Calc)
-OpenOffice.org Calc : predefining fonts
-OpenOffice.org Calc : present values
-OpenOffice.org Calc : presentations
-OpenOffice.org Calc : presentations;creating/opening
-OpenOffice.org Calc : presentations;inserting spreadsheet cells
-OpenOffice.org Calc : presentations;live on the Internet
-OpenOffice.org Calc : presentations;print menu
-OpenOffice.org Calc : presentations;saving
-OpenOffice.org Calc : presentations;saving automatically
-OpenOffice.org Calc : presentations;saving in other formats
-OpenOffice.org Calc : presentations;sending as e-mail
-OpenOffice.org Calc : presentations;starting with wizard
-OpenOffice.org Calc : presentations;wizards
-OpenOffice.org Calc : press buttons, see push buttons
-OpenOffice.org Calc : previews
-OpenOffice.org Calc : previews;fonts lists
-OpenOffice.org Calc : previews;page breaks for printing
-OpenOffice.org Calc : PRICE function
-OpenOffice.org Calc : PRICEDISC function
-OpenOffice.org Calc : PRICEMAT function
-OpenOffice.org Calc : prices
-OpenOffice.org Calc : prices;fixed interest securities
-OpenOffice.org Calc : prices;interest-bearing securities
-OpenOffice.org Calc : prices;non-interest-bearing securities
-OpenOffice.org Calc : prices;securities with irregular first interest rate
-OpenOffice.org Calc : prices;treasury bills
-OpenOffice.org Calc : primary keys
-OpenOffice.org Calc : primary keys;defining
-OpenOffice.org Calc : primary keys;inserting (Base)
-OpenOffice.org Calc : print area selection
-OpenOffice.org Calc : print ranges
-OpenOffice.org Calc : printer metrics for document formatting (Writer)
-OpenOffice.org Calc : printers
-OpenOffice.org Calc : printers;adding, UNIX
-OpenOffice.org Calc : printers;choosing
-OpenOffice.org Calc : printers;default printer
-OpenOffice.org Calc : printers;faxes under UNIX
-OpenOffice.org Calc : printers;maximum page formats
-OpenOffice.org Calc : printers;paper trays
-OpenOffice.org Calc : printers;properties
-OpenOffice.org Calc : printing
-OpenOffice.org Calc : printing;black and white
-OpenOffice.org Calc : printing;brochures
-OpenOffice.org Calc : printing;cells
-OpenOffice.org Calc : printing;colors in grayscale
-OpenOffice.org Calc : printing;copies
-OpenOffice.org Calc : printing;creating individual jobs
-OpenOffice.org Calc : printing;dates in presentations
-OpenOffice.org Calc : printing;directly
-OpenOffice.org Calc : printing;documents
-OpenOffice.org Calc : printing;drawings defaults
-OpenOffice.org Calc : printing;elements in text documents
-OpenOffice.org Calc : printing;faster
-OpenOffice.org Calc : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Calc : printing;fitting to pages in presentations
-OpenOffice.org Calc : printing;formulas in OpenOffice.org Math
-OpenOffice.org Calc : printing;hidden pages of presentations
-OpenOffice.org Calc : printing;in original size in OpenOffice.org Math
-OpenOffice.org Calc : printing;landscape
-OpenOffice.org Calc : printing;left/right pages
-OpenOffice.org Calc : printing;page order
-OpenOffice.org Calc : printing;queries (Base)
-OpenOffice.org Calc : printing;rows/columns as table headings
-OpenOffice.org Calc : printing;scaling in OpenOffice.org Math
-OpenOffice.org Calc : printing;selections
-OpenOffice.org Calc : printing;sheet counts
-OpenOffice.org Calc : printing;sheet details
-OpenOffice.org Calc : printing;sheet selections
-OpenOffice.org Calc : printing;sheets on multiple pages
-OpenOffice.org Calc : printing;text always in black
-OpenOffice.org Calc : printing;text in reverse order
-OpenOffice.org Calc : printing;tiling pages in presentations
-OpenOffice.org Calc : printing;transparencies
-OpenOffice.org Calc : printing;warnings
-OpenOffice.org Calc : printing;without scaling in presentations
-OpenOffice.org Calc : printing speed
-OpenOffice.org Calc : PROB function
-OpenOffice.org Calc : probabilities of samples with binomial distribution
-OpenOffice.org Calc : PRODUCT function
-OpenOffice.org Calc : programming
-OpenOffice.org Calc : programming;add-ins
-OpenOffice.org Calc : programming;functions
-OpenOffice.org Calc : programming;OpenOffice.org
-OpenOffice.org Calc : programming;scripting
-OpenOffice.org Calc : PROPER function
-OpenOffice.org Calc : properties
-OpenOffice.org Calc : properties;charts
-OpenOffice.org Calc : properties;fields in databases
-OpenOffice.org Calc : properties;files
-OpenOffice.org Calc : properties;form controls
-OpenOffice.org Calc : properties;forms
-OpenOffice.org Calc : properties;printers
-OpenOffice.org Calc : properties;smooth lines in line charts/XY charts
-OpenOffice.org Calc : protected contents
-OpenOffice.org Calc : protected dashes
-OpenOffice.org Calc : protected database tables
-OpenOffice.org Calc : protected documents
-OpenOffice.org Calc : protected spaces
-OpenOffice.org Calc : protected spaces;inserting
-OpenOffice.org Calc : protected spaces;showing (Writer)
-OpenOffice.org Calc : protecting
-OpenOffice.org Calc : protecting;cells and sheets
-OpenOffice.org Calc : protecting;contents
-OpenOffice.org Calc : protecting;recorded changes
-OpenOffice.org Calc : protecting;unprotecting cells
-OpenOffice.org Calc : proxy settings
-OpenOffice.org Calc : push buttons
-OpenOffice.org Calc : push buttons;adding to documents
-OpenOffice.org Calc : push buttons;creating
-OpenOffice.org Calc : PV function
-OpenOffice.org Calc : QUARTILE function
-OpenOffice.org Calc : queries
-OpenOffice.org Calc : queries;copying (Base)
-OpenOffice.org Calc : queries;creating in design view (Base)
-OpenOffice.org Calc : queries;creating in SQL view
-OpenOffice.org Calc : queries;defining (Base)
-OpenOffice.org Calc : queries;deleting table links (Base)
-OpenOffice.org Calc : queries;editing in data source view
-OpenOffice.org Calc : queries;formulating filter conditions (Base)
-OpenOffice.org Calc : queries;joining tables (Base)
-OpenOffice.org Calc : queries;missing elements (Base)
-OpenOffice.org Calc : queries;overview (Base)
-OpenOffice.org Calc : queries;parameter queries (Base)
-OpenOffice.org Calc : queries;printing (Base)
-OpenOffice.org Calc : Query Wizard (Base)
-OpenOffice.org Calc : quickstarter
-OpenOffice.org Calc : quotation marks
-OpenOffice.org Calc : quotation marks;replacing
-OpenOffice.org Calc : quotes
-OpenOffice.org Calc : quotes;custom
-OpenOffice.org Calc : QUOTIENT function
-OpenOffice.org Calc : radar charts, see net charts
-OpenOffice.org Calc : RADIANS function
-OpenOffice.org Calc : radio button creation
-OpenOffice.org Calc : RAND function
-OpenOffice.org Calc : RANDBETWEEN function
-OpenOffice.org Calc : random numbers
-OpenOffice.org Calc : random numbers;between 0 and 1
-OpenOffice.org Calc : random numbers;between limits
-OpenOffice.org Calc : random numbers;examples
-OpenOffice.org Calc : ranges
-OpenOffice.org Calc : ranges;defining database ranges
-OpenOffice.org Calc : ranges;inserting in tables
-OpenOffice.org Calc : ranges;print ranges
-OpenOffice.org Calc : RANK function
-OpenOffice.org Calc : RATE function
-OpenOffice.org Calc : rates of return
-OpenOffice.org Calc : rates of return;non-interest-bearing securities
-OpenOffice.org Calc : rates of return;securities
-OpenOffice.org Calc : rates of return;securities with interest paid on maturity
-OpenOffice.org Calc : rates of return of treasury bills
-OpenOffice.org Calc : read-only documents
-OpenOffice.org Calc : read-only documents;cursor
-OpenOffice.org Calc : read-only documents;database tables on/off
-OpenOffice.org Calc : read-only documents;editing
-OpenOffice.org Calc : read-only documents;opening documents as
-OpenOffice.org Calc : read-only items in Data Navigator
-OpenOffice.org Calc : recalculating
-OpenOffice.org Calc : recalculating;all formulas in sheets
-OpenOffice.org Calc : recalculating;auto calculating sheets
-OpenOffice.org Calc : recalculating;DataPilot tables
-OpenOffice.org Calc : RECEIVED function
-OpenOffice.org Calc : recognizing
-OpenOffice.org Calc : recognizing;column and row labels
-OpenOffice.org Calc : recognizing;equal numbers
-OpenOffice.org Calc : recognizing;general errors
-OpenOffice.org Calc : recognizing formula cells
-OpenOffice.org Calc : recognizing URLs automatically
-OpenOffice.org Calc : recording
-OpenOffice.org Calc : recording;changes
-OpenOffice.org Calc : recording;macros
-OpenOffice.org Calc : records
-OpenOffice.org Calc : records;counting in Calc databases
-OpenOffice.org Calc : records;inserting notes
-OpenOffice.org Calc : records;protecting
-OpenOffice.org Calc : records;saving
-OpenOffice.org Calc : records;searching in databases
-OpenOffice.org Calc : rectangles with round corners
-OpenOffice.org Calc : recursions in spreadsheets
-OpenOffice.org Calc : redo command
-OpenOffice.org Calc : reduced printing
-OpenOffice.org Calc : reference lines
-OpenOffice.org Calc : references
-OpenOffice.org Calc : references;absolute/relative
-OpenOffice.org Calc : references;by defined names
-OpenOffice.org Calc : references;displaying in color (Calc)
-OpenOffice.org Calc : references;expanding (Calc)
-OpenOffice.org Calc : references;inserting by drag and drop
-OpenOffice.org Calc : references;iterative (Calc)
-OpenOffice.org Calc : references;testing cell contents
-OpenOffice.org Calc : references;to cells
-OpenOffice.org Calc : references;to cells in another document
-OpenOffice.org Calc : references;URL in cells
-OpenOffice.org Calc : Refresh Data feature in Microsoft Office
-OpenOffice.org Calc : register-true
-OpenOffice.org Calc : register-true;definition
-OpenOffice.org Calc : registering
-OpenOffice.org Calc : registering;address books
-OpenOffice.org Calc : registering;databases (Base)
-OpenOffice.org Calc : registering;OpenOffice.org
-OpenOffice.org Calc : regression analysis
-OpenOffice.org Calc : regression curves in charts
-OpenOffice.org Calc : regression lines
-OpenOffice.org Calc : regression lines - Statistical Functions Part Five
-OpenOffice.org Calc : regular expressions
-OpenOffice.org Calc : regular expressions;list of
-OpenOffice.org Calc : regular expressions;opening files
-OpenOffice.org Calc : relational databases (Base)
-OpenOffice.org Calc : relations
-OpenOffice.org Calc : relations;creating and deleting (Base)
-OpenOffice.org Calc : relations;joining tables (Base)
-OpenOffice.org Calc : relations;properties (Base)
-OpenOffice.org Calc : relative addresses
-OpenOffice.org Calc : relative hyperlinks
-OpenOffice.org Calc : relative references
-OpenOffice.org Calc : relative saving of URLs
-OpenOffice.org Calc : reloading
-OpenOffice.org Calc : reloading;documents
-OpenOffice.org Calc : reloading;HTML documents, automatically
-OpenOffice.org Calc : remainders of divisions
-OpenOffice.org Calc : remarks on cells
-OpenOffice.org Calc : remarks, see also notes
-OpenOffice.org Calc : remote configurations
-OpenOffice.org Calc : remove noise filter
-OpenOffice.org Calc : removing
-OpenOffice.org Calc : removing;bullets and numbering
-OpenOffice.org Calc : removing;form filters
-OpenOffice.org Calc : removing;manual column breaks
-OpenOffice.org Calc : removing, see also deleting
-OpenOffice.org Calc : renaming sheets
-OpenOffice.org Calc : reorganizing charts
-OpenOffice.org Calc : repayment installment
-OpenOffice.org Calc : repeating
-OpenOffice.org Calc : repeating;columns/rows on printed pages
-OpenOffice.org Calc : REPLACE function
-OpenOffice.org Calc : Replace text as you type feature in Microsoft Office
-OpenOffice.org Calc : replacement options
-OpenOffice.org Calc : replacement table
-OpenOffice.org Calc : replacing
-OpenOffice.org Calc : replacing;AutoCorrect function
-OpenOffice.org Calc : replacing;cell contents
-OpenOffice.org Calc : replacing;dashes
-OpenOffice.org Calc : Report Builder
-OpenOffice.org Calc : reports
-OpenOffice.org Calc : reports;creating
-OpenOffice.org Calc : reports;error reports
-OpenOffice.org Calc : reports;opening and editing
-OpenOffice.org Calc : reports;templates
-OpenOffice.org Calc : REPT function
-OpenOffice.org Calc : resetting
-OpenOffice.org Calc : resetting;templates
-OpenOffice.org Calc : resizing
-OpenOffice.org Calc : resizing;objects, by mouse
-OpenOffice.org Calc : resizing, see also scaling/zooming
-OpenOffice.org Calc : resolution when printing bitmaps
-OpenOffice.org Calc : restoring
-OpenOffice.org Calc : restoring;default formatting
-OpenOffice.org Calc : restoring;editing
-OpenOffice.org Calc : results display vs. formulas display
-OpenOffice.org Calc : reversing printing order
-OpenOffice.org Calc : review function
-OpenOffice.org Calc : review function;accepting or rejecting changes
-OpenOffice.org Calc : review function;comparing documents
-OpenOffice.org Calc : review function;recording changes example
-OpenOffice.org Calc : rich text control
-OpenOffice.org Calc : right alignment of paragraphs
-OpenOffice.org Calc : RIGHT function
-OpenOffice.org Calc : right joins (Base)
-OpenOffice.org Calc : right-to-left text
-OpenOffice.org Calc : right-to-left text
-OpenOffice.org Calc : right-to-left text;spreadsheets
-OpenOffice.org Calc : ROMAN function
-OpenOffice.org Calc : ROT13 function
-OpenOffice.org Calc : rotating
-OpenOffice.org Calc : rotating;3D text
-OpenOffice.org Calc : rotating;tables
-OpenOffice.org Calc : rotating;text in cells
-OpenOffice.org Calc : round corners
-OpenOffice.org Calc : ROUND function
-OpenOffice.org Calc : ROUNDDOWN function
-OpenOffice.org Calc : rounded off numbers
-OpenOffice.org Calc : rounding
-OpenOffice.org Calc : rounding;down to nearest multiple of significance
-OpenOffice.org Calc : rounding;down to next integer
-OpenOffice.org Calc : rounding;up to multiples of significance
-OpenOffice.org Calc : rounding;up/down to even integers
-OpenOffice.org Calc : rounding;up/down to nearest odd integer
-OpenOffice.org Calc : rounding precision
-OpenOffice.org Calc : rounding precision (Calc)
-OpenOffice.org Calc : ROUNDUP function
-OpenOffice.org Calc : row breaks
-OpenOffice.org Calc : row breaks;deleting
-OpenOffice.org Calc : row breaks;inserting
-OpenOffice.org Calc : ROW function
-OpenOffice.org Calc : row headers
-OpenOffice.org Calc : row headers;displaying (Calc)
-OpenOffice.org Calc : row headers;hiding
-OpenOffice.org Calc : row headers;highlighting (Calc)
-OpenOffice.org Calc : row headers;using in formulas
-OpenOffice.org Calc : rows
-OpenOffice.org Calc : rows;deleting
-OpenOffice.org Calc : rows;deleting with filters
-OpenOffice.org Calc : rows;finding labels automatically
-OpenOffice.org Calc : rows;freezing
-OpenOffice.org Calc : rows;heights
-OpenOffice.org Calc : rows;hiding
-OpenOffice.org Calc : rows;inserting
-OpenOffice.org Calc : rows;optimal heights
-OpenOffice.org Calc : rows;repeating when printing
-OpenOffice.org Calc : rows;swapping with columns
-OpenOffice.org Calc : rows;visible and invisible
-OpenOffice.org Calc : ROWS function
-OpenOffice.org Calc : RRI function
-OpenOffice.org Calc : RSQ calculations
-OpenOffice.org Calc : RSQ function
-OpenOffice.org Calc : rulers
-OpenOffice.org Calc : rulers;default settings
-OpenOffice.org Calc : rulers;measurement units
-OpenOffice.org Calc : rulers;visible in presentations
-OpenOffice.org Calc : sales values
-OpenOffice.org Calc : sales values;fixed interest securities
-OpenOffice.org Calc : sales values;non-interest-bearing securities
-OpenOffice.org Calc : samples and templates
-OpenOffice.org Calc : sampling without replacement
-OpenOffice.org Calc : saving
-OpenOffice.org Calc : saving;default file formats
-OpenOffice.org Calc : saving;dialog settings
-OpenOffice.org Calc : saving;documents
-OpenOffice.org Calc : saving;documents for mobile devices
-OpenOffice.org Calc : saving;documents in other formats
-OpenOffice.org Calc : saving;documents, automatically
-OpenOffice.org Calc : saving;in Microsoft Office file format
-OpenOffice.org Calc : saving;options
-OpenOffice.org Calc : saving;sheets in HTML
-OpenOffice.org Calc : saving;templates
-OpenOffice.org Calc : saving;to XML
-OpenOffice.org Calc : saving;VBA code in Microsoft Office documents
-OpenOffice.org Calc : saving;with password by default
-OpenOffice.org Calc : saving as command
-OpenOffice.org Calc : saving as command;precautions
-OpenOffice.org Calc : scalar products
-OpenOffice.org Calc : scaling
-OpenOffice.org Calc : scaling;axes
-OpenOffice.org Calc : scaling;font sizes in user interface
-OpenOffice.org Calc : scaling;objects
-OpenOffice.org Calc : scaling;pictures
-OpenOffice.org Calc : scaling;printing in OpenOffice.org Math
-OpenOffice.org Calc : scaling;text in charts
-OpenOffice.org Calc : scaling;when printing presentations
-OpenOffice.org Calc : scaling, see also zooming
-OpenOffice.org Calc : scatter charts
-OpenOffice.org Calc : scenarios
-OpenOffice.org Calc : scenarios;creating
-OpenOffice.org Calc : scenarios;displaying names
-OpenOffice.org Calc : screen
-OpenOffice.org Calc : screen;full screen views
-OpenOffice.org Calc : screen;scaling
-OpenOffice.org Calc : screen magnifiers
-OpenOffice.org Calc : screen readers
-OpenOffice.org Calc : script organization
-OpenOffice.org Calc : scripting in programming
-OpenOffice.org Calc : scrollbars
-OpenOffice.org Calc : scrollbars;controls
-OpenOffice.org Calc : scrollbars;displaying (Calc)
-OpenOffice.org Calc : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Calc : scrolling prevention in tables
-OpenOffice.org Calc : search criteria for database functions in cells
-OpenOffice.org Calc : search engines
-OpenOffice.org Calc : search engines;definition
-OpenOffice.org Calc : search engines;selecting
-OpenOffice.org Calc : SEARCH function
-OpenOffice.org Calc : searching
-OpenOffice.org Calc : searching;all sheets
-OpenOffice.org Calc : searching;cell contents in Calc databases
-OpenOffice.org Calc : searching;databases
-OpenOffice.org Calc : searching;form filters
-OpenOffice.org Calc : searching;Internet
-OpenOffice.org Calc : searching;links in cells
-OpenOffice.org Calc : searching;maximum values in columns
-OpenOffice.org Calc : searching;minimum values in columns
-OpenOffice.org Calc : searching;tables and forms
-OpenOffice.org Calc : searching, see also finding
-OpenOffice.org Calc : SECOND function
-OpenOffice.org Calc : secondary axes in charts
-OpenOffice.org Calc : sections
-OpenOffice.org Calc : sections;backgrounds
-OpenOffice.org Calc : sections;protecting
-OpenOffice.org Calc : securities
-OpenOffice.org Calc : securities;first interest payment until settlement date
-OpenOffice.org Calc : security
-OpenOffice.org Calc : security;options for documents with macros
-OpenOffice.org Calc : security;protecting contents
-OpenOffice.org Calc : security;warning dialogs with macros
-OpenOffice.org Calc : selecting
-OpenOffice.org Calc : selecting;cells
-OpenOffice.org Calc : selecting;controls
-OpenOffice.org Calc : selecting;formatting themes
-OpenOffice.org Calc : selecting;group objects
-OpenOffice.org Calc : selecting;measurement units
-OpenOffice.org Calc : selecting;multiple sheets
-OpenOffice.org Calc : selecting;objects
-OpenOffice.org Calc : selecting;print areas
-OpenOffice.org Calc : selecting;scenarios in Navigator
-OpenOffice.org Calc : selecting;several files
-OpenOffice.org Calc : selection clipboard
-OpenOffice.org Calc : selection lists
-OpenOffice.org Calc : selection lists;filling cells
-OpenOffice.org Calc : selection lists;validity
-OpenOffice.org Calc : selection modes in spreadsheets
-OpenOffice.org Calc : selection modes in text
-OpenOffice.org Calc : sending
-OpenOffice.org Calc : sending;AutoAbstract function in presentations
-OpenOffice.org Calc : sending;documents as e-mail
-OpenOffice.org Calc : sending;documents as faxes
-OpenOffice.org Calc : separator lines
-OpenOffice.org Calc : separator lines;defining
-OpenOffice.org Calc : separators
-OpenOffice.org Calc : separators;conditional
-OpenOffice.org Calc : series
-OpenOffice.org Calc : series;calculating
-OpenOffice.org Calc : series;sort lists
-OpenOffice.org Calc : SERIESSUM function
-OpenOffice.org Calc : Server Side ImageMap
-OpenOffice.org Calc : settings
-OpenOffice.org Calc : settings;printers
-OpenOffice.org Calc : settings;program configuration
-OpenOffice.org Calc : settings;proxies
-OpenOffice.org Calc : settings;tracking changes
-OpenOffice.org Calc : settings;views
-OpenOffice.org Calc : SGML
-OpenOffice.org Calc : SGML;definition
-OpenOffice.org Calc : shadows
-OpenOffice.org Calc : shadows;areas
-OpenOffice.org Calc : shadows;borders
-OpenOffice.org Calc : shadows;characters
-OpenOffice.org Calc : shadows;characters, using context menu
-OpenOffice.org Calc : shared libraries
-OpenOffice.org Calc : shared libraries;programming
-OpenOffice.org Calc : sharpening filter
-OpenOffice.org Calc : sheet area names
-OpenOffice.org Calc : SHEET function
-OpenOffice.org Calc : sheet grids
-OpenOffice.org Calc : sheet grids;printing
-OpenOffice.org Calc : sheet numbers
-OpenOffice.org Calc : sheet numbers;looking up
-OpenOffice.org Calc : sheet ranges
-OpenOffice.org Calc : sheet ranges;filling
-OpenOffice.org Calc : sheet references
-OpenOffice.org Calc : sheet tabs
-OpenOffice.org Calc : sheet tabs;displaying
-OpenOffice.org Calc : sheet tabs;renaming
-OpenOffice.org Calc : sheet tabs;using
-OpenOffice.org Calc : sheets
-OpenOffice.org Calc : sheets;AutoFormat function
-OpenOffice.org Calc : sheets;creating
-OpenOffice.org Calc : sheets;defining label ranges
-OpenOffice.org Calc : sheets;deleting
-OpenOffice.org Calc : sheets;displaying
-OpenOffice.org Calc : sheets;filter values
-OpenOffice.org Calc : sheets;formatting themes
-OpenOffice.org Calc : sheets;hiding
-OpenOffice.org Calc : sheets;hiding details
-OpenOffice.org Calc : sheets;HTML
-OpenOffice.org Calc : sheets;inserting
-OpenOffice.org Calc : sheets;inserting - Applying Multiple Sheets
-OpenOffice.org Calc : sheets;inserting row breaks
-OpenOffice.org Calc : sheets;optimal row heights
-OpenOffice.org Calc : sheets;outlines
-OpenOffice.org Calc : sheets;printing details
-OpenOffice.org Calc : sheets;printing in landscape
-OpenOffice.org Calc : sheets;printing on multiple pages
-OpenOffice.org Calc : sheets;printing sheet counts
-OpenOffice.org Calc : sheets;protecting
-OpenOffice.org Calc : sheets;renaming
-OpenOffice.org Calc : sheets;right-to-left
-OpenOffice.org Calc : sheets;searching all
-OpenOffice.org Calc : sheets;selecting multiple
-OpenOffice.org Calc : sheets;showing multiple
-OpenOffice.org Calc : sheets;simultaneous multiple filling
-OpenOffice.org Calc : sheets;transferring values
-OpenOffice.org Calc : SHEETS function
-OpenOffice.org Calc : shortcut keys
-OpenOffice.org Calc : shortcut keys;assigning macros
-OpenOffice.org Calc : shortcut keys;charts
-OpenOffice.org Calc : shortcut keys;general
-OpenOffice.org Calc : shortcut keys;in databases
-OpenOffice.org Calc : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Calc : shortcut keys;OpenOffice.org Calc accessibility
-OpenOffice.org Calc : shortcut keys;spreadsheets
-OpenOffice.org Calc : Show/Hide feature in Microsoft Office
-OpenOffice.org Calc : showing
-OpenOffice.org Calc : showing;cell references
-OpenOffice.org Calc : showing;changes
-OpenOffice.org Calc : showing;columns
-OpenOffice.org Calc : showing;docked windows
-OpenOffice.org Calc : showing;drawings and controls (Writer)
-OpenOffice.org Calc : showing;live presentations on the Internet
-OpenOffice.org Calc : showing;rows
-OpenOffice.org Calc : showing;sheet details
-OpenOffice.org Calc : showing;toolbars
-OpenOffice.org Calc : SIGN function
-OpenOffice.org Calc : signing documents with digital signatures
-OpenOffice.org Calc : similarity search
-OpenOffice.org Calc : simple handles (Writer)
-OpenOffice.org Calc : simplified Chinese
-OpenOffice.org Calc : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Calc : SIN function
-OpenOffice.org Calc : single sign on options
-OpenOffice.org Calc : single-line spacing in text
-OpenOffice.org Calc : SINH function
-OpenOffice.org Calc : sizes
-OpenOffice.org Calc : sizes;draw objects
-OpenOffice.org Calc : sizes;pictures
-OpenOffice.org Calc : SKEW function
-OpenOffice.org Calc : slanting draw objects
-OpenOffice.org Calc : SLN function
-OpenOffice.org Calc : SLOPE function
-OpenOffice.org Calc : slopes, see also regression lines
-OpenOffice.org Calc : small capitals
-OpenOffice.org Calc : SMALL function
-OpenOffice.org Calc : small icons
-OpenOffice.org Calc : smart tags
-OpenOffice.org Calc : smart tags;options
-OpenOffice.org Calc : smooth scrolling (Writer)
-OpenOffice.org Calc : smoothing filter
-OpenOffice.org Calc : snap grid defaults (Writer/Calc)
-OpenOffice.org Calc : snapping in presentations and drawings
-OpenOffice.org Calc : solarization filter
-OpenOffice.org Calc : sort lists
-OpenOffice.org Calc : sort lists;applying
-OpenOffice.org Calc : sort lists;copying to in Calc
-OpenOffice.org Calc : sorting
-OpenOffice.org Calc : sorting;Asian languages
-OpenOffice.org Calc : sorting;data in forms
-OpenOffice.org Calc : sorting;database ranges
-OpenOffice.org Calc : sorting;databases
-OpenOffice.org Calc : sorting;options for database ranges
-OpenOffice.org Calc : sorting;options in Data Pilot
-OpenOffice.org Calc : sorting;sort criteria for database ranges
-OpenOffice.org Calc : sounds
-OpenOffice.org Calc : sounds;inserting and playing
-OpenOffice.org Calc : sounds;UNIX
-OpenOffice.org Calc : spaces
-OpenOffice.org Calc : spaces;displaying (Writer)
-OpenOffice.org Calc : spaces;ignoring double
-OpenOffice.org Calc : spaces;inserting protected spaces
-OpenOffice.org Calc : spaces;showing protected spaces (Writer)
-OpenOffice.org Calc : spacing
-OpenOffice.org Calc : spacing;between paragraphs in footnotes
-OpenOffice.org Calc : spacing;font effects
-OpenOffice.org Calc : spacing;lines and paragraphs
-OpenOffice.org Calc : spacing;tab stops in text documents
-OpenOffice.org Calc : spacing;tabs in presentations
-OpenOffice.org Calc : spadmin
-OpenOffice.org Calc : special characters
-OpenOffice.org Calc : speech bubbles
-OpenOffice.org Calc : speed of printing
-OpenOffice.org Calc : spellcheck
-OpenOffice.org Calc : spellcheck;activating for a language
-OpenOffice.org Calc : spellcheck;context menus
-OpenOffice.org Calc : spellcheck;default languages
-OpenOffice.org Calc : spellcheck;dialog
-OpenOffice.org Calc : spellcheck;dictionary of exceptions
-OpenOffice.org Calc : spellcheck;ignore list
-OpenOffice.org Calc : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Calc : spin button creation
-OpenOffice.org Calc : spoolfiles with Xprinter
-OpenOffice.org Calc : spreadsheets
-OpenOffice.org Calc : spreadsheets;as databases (base)
-OpenOffice.org Calc : spreadsheets;backgrounds
-OpenOffice.org Calc : spreadsheets;calculating
-OpenOffice.org Calc : spreadsheets;copying
-OpenOffice.org Calc : spreadsheets;copying areas to text documents
-OpenOffice.org Calc : spreadsheets;creating/opening
-OpenOffice.org Calc : spreadsheets;deleting
-OpenOffice.org Calc : spreadsheets;deleting cell contents
-OpenOffice.org Calc : spreadsheets;deleting cells
-OpenOffice.org Calc : spreadsheets;deleting column breaks
-OpenOffice.org Calc : spreadsheets;deleting row breaks
-OpenOffice.org Calc : spreadsheets;displaying headers of columns/rows
-OpenOffice.org Calc : spreadsheets;formatting
-OpenOffice.org Calc : spreadsheets;formula bar
-OpenOffice.org Calc : spreadsheets;functions
-OpenOffice.org Calc : spreadsheets;hiding functions
-OpenOffice.org Calc : spreadsheets;importing from/exporting to dBASE files
-OpenOffice.org Calc : spreadsheets;inserting breaks in
-OpenOffice.org Calc : spreadsheets;inserting cells
-OpenOffice.org Calc : spreadsheets;inserting charts
-OpenOffice.org Calc : spreadsheets;inserting column breaks
-OpenOffice.org Calc : spreadsheets;inserting columns
-OpenOffice.org Calc : spreadsheets;inserting database records
-OpenOffice.org Calc : spreadsheets;inserting rows
-OpenOffice.org Calc : spreadsheets;moving
-OpenOffice.org Calc : spreadsheets;optimal column widths
-OpenOffice.org Calc : spreadsheets;printing
-OpenOffice.org Calc : spreadsheets;saving
-OpenOffice.org Calc : spreadsheets;saving automatically
-OpenOffice.org Calc : spreadsheets;saving in other formats
-OpenOffice.org Calc : spreadsheets;sending as e-mail
-OpenOffice.org Calc : spreadsheets;shortcut keys in
-OpenOffice.org Calc : spreadsheets;showing columns
-OpenOffice.org Calc : spreadsheets;value highlighting
-OpenOffice.org Calc : spreadsheets;values as shown
-OpenOffice.org Calc : SQL
-OpenOffice.org Calc : SQL;definition
-OpenOffice.org Calc : SQL;DISTINCT parameter
-OpenOffice.org Calc : SQL;executing SQL commands
-OpenOffice.org Calc : SQL;executing SQL statements (Base)
-OpenOffice.org Calc : SQL;queries (Base)
-OpenOffice.org Calc : SQRT function
-OpenOffice.org Calc : SQRTPI function
-OpenOffice.org Calc : square drawings
-OpenOffice.org Calc : square number additions
-OpenOffice.org Calc : square roots
-OpenOffice.org Calc : square roots;positive numbers
-OpenOffice.org Calc : square roots;products of Pi
-OpenOffice.org Calc : standard bar on/off
-OpenOffice.org Calc : standard deviation in charts
-OpenOffice.org Calc : standard deviations in databases
-OpenOffice.org Calc : standard deviations in databases;based on a sample
-OpenOffice.org Calc : standard deviations in databases;based on populations
-OpenOffice.org Calc : standard deviations in statistics
-OpenOffice.org Calc : standard deviations in statistics;based on a population
-OpenOffice.org Calc : standard deviations in statistics;based on a sample
-OpenOffice.org Calc : standard errors
-OpenOffice.org Calc : standard errors;array functions
-OpenOffice.org Calc : standard errors;statistical functions
-OpenOffice.org Calc : standard filters in databases
-OpenOffice.org Calc : standard printer under UNIX
-OpenOffice.org Calc : STANDARDIZE function
-OpenOffice.org Calc : Start Module backing window
-OpenOffice.org Calc : start parameters
-OpenOffice.org Calc : statistics functions
-OpenOffice.org Calc : statistics in charts
-OpenOffice.org Calc : status bar on/off
-OpenOffice.org Calc : STDEV function
-OpenOffice.org Calc : STDEVA function
-OpenOffice.org Calc : STDEVP function
-OpenOffice.org Calc : STDEVPA function
-OpenOffice.org Calc : STEYX function
-OpenOffice.org Calc : stickers
-OpenOffice.org Calc : stock charts
-OpenOffice.org Calc : straight-line depreciations
-OpenOffice.org Calc : strikethrough
-OpenOffice.org Calc : strikethrough;characters
-OpenOffice.org Calc : strikethrough;font effects
-OpenOffice.org Calc : STYLE function
-OpenOffice.org Calc : STYLE function example
-OpenOffice.org Calc : styles
-OpenOffice.org Calc : styles;'changed' message
-OpenOffice.org Calc : styles;conditional styles
-OpenOffice.org Calc : styles;copying between documents
-OpenOffice.org Calc : styles;keyboard shortcuts
-OpenOffice.org Calc : styles;organizing
-OpenOffice.org Calc : styles;printing styles used in a document
-OpenOffice.org Calc : styles;replacing automatically
-OpenOffice.org Calc : Styles and Formatting window
-OpenOffice.org Calc : Styles and Formatting window;docking
-OpenOffice.org Calc : Styles and Formatting window
-OpenOffice.org Calc : Stylist, see Styles and Formatting window
-OpenOffice.org Calc : subforms
-OpenOffice.org Calc : subforms;creating
-OpenOffice.org Calc : subforms;description
-OpenOffice.org Calc : submitting forms
-OpenOffice.org Calc : subscript text in cells
-OpenOffice.org Calc : SUBSTITUTE function
-OpenOffice.org Calc : SUBTOTAL function
-OpenOffice.org Calc : subtotals
-OpenOffice.org Calc : subtotals;sorting options
-OpenOffice.org Calc : suffixes in file formats
-OpenOffice.org Calc : SUM function
-OpenOffice.org Calc : sum function in formula bar
-OpenOffice.org Calc : sum of squares of deviations
-OpenOffice.org Calc : SUMIF function
-OpenOffice.org Calc : SUMPRODUCT function
-OpenOffice.org Calc : sums
-OpenOffice.org Calc : sums;cells in Calc databases
-OpenOffice.org Calc : sums;of filtered data
-OpenOffice.org Calc : sums;of square numbers
-OpenOffice.org Calc : SUMSQ function
-OpenOffice.org Calc : SUMX2MY2 function
-OpenOffice.org Calc : SUMX2PY2 function
-OpenOffice.org Calc : SUMXMY2 function
-OpenOffice.org Calc : superscript text in cells
-OpenOffice.org Calc : support on the Web
-OpenOffice.org Calc : swapping tables
-OpenOffice.org Calc : SYD function
-OpenOffice.org Calc : syllables in spreadsheets
-OpenOffice.org Calc : synchronizing
-OpenOffice.org Calc : synchronizing;labels and business cards
-OpenOffice.org Calc : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Calc : system address book registration
-OpenOffice.org Calc : T function
-OpenOffice.org Calc : t-distribution
-OpenOffice.org Calc : tab stops
-OpenOffice.org Calc : tab stops;displaying (Writer)
-OpenOffice.org Calc : tab stops;inserting and editing
-OpenOffice.org Calc : tab stops;setting in sheets
-OpenOffice.org Calc : tab stops;settings
-OpenOffice.org Calc : tab stops;spacing in presentations
-OpenOffice.org Calc : tab stops;spacing in text documents
-OpenOffice.org Calc : table controls
-OpenOffice.org Calc : table controls;form functions
-OpenOffice.org Calc : table controls;keyboard-only edit mode
-OpenOffice.org Calc : table controls;properties
-OpenOffice.org Calc : table views of databases
-OpenOffice.org Calc : Table Wizard (Base)
-OpenOffice.org Calc : tables
-OpenOffice.org Calc : tables;AutoFormat function
-OpenOffice.org Calc : tables;backgrounds
-OpenOffice.org Calc : tables;combining
-OpenOffice.org Calc : tables;copying cell styles
-OpenOffice.org Calc : tables;database ranges
-OpenOffice.org Calc : tables;deactivating automatic changes in
-OpenOffice.org Calc : tables;displaying formulas/values
-OpenOffice.org Calc : tables;freezing
-OpenOffice.org Calc : tables;importing/exporting as text
-OpenOffice.org Calc : tables;inserting external data
-OpenOffice.org Calc : tables;inserting line breaks
-OpenOffice.org Calc : tables;merging cells
-OpenOffice.org Calc : tables;multiple operations in
-OpenOffice.org Calc : tables;number formats
-OpenOffice.org Calc : tables;renaming
-OpenOffice.org Calc : tables;rotating
-OpenOffice.org Calc : tables;selecting ranges
-OpenOffice.org Calc : tables;showing details
-OpenOffice.org Calc : tables;splitting windows
-OpenOffice.org Calc : tables;transposing
-OpenOffice.org Calc : tables;views
-OpenOffice.org Calc : tables in databases
-OpenOffice.org Calc : tables in databases;access rights to (Base)
-OpenOffice.org Calc : tables in databases;adding to queries
-OpenOffice.org Calc : tables in databases;browsing and editing
-OpenOffice.org Calc : tables in databases;copying database tables (Base)
-OpenOffice.org Calc : tables in databases;creating
-OpenOffice.org Calc : tables in databases;creating in design view
-OpenOffice.org Calc : tables in databases;importing dBASE files
-OpenOffice.org Calc : tables in databases;importing text formats (Base)
-OpenOffice.org Calc : tables in databases;joining for queries (Base)
-OpenOffice.org Calc : tables in databases;printing queries (Base)
-OpenOffice.org Calc : tables in databases;relations (Base)
-OpenOffice.org Calc : tables in databases;searching
-OpenOffice.org Calc : tables in spreadsheets
-OpenOffice.org Calc : tables in spreadsheets;copying data to other applications
-OpenOffice.org Calc : tables in spreadsheets;defining borders
-OpenOffice.org Calc : tables in spreadsheets;value highlighting
-OpenOffice.org Calc : tables in text
-OpenOffice.org Calc : tables in text;captions
-OpenOffice.org Calc : tables in text;creating automatically
-OpenOffice.org Calc : tables in text;default settings
-OpenOffice.org Calc : tables in text;defining borders
-OpenOffice.org Calc : tables in text;displaying
-OpenOffice.org Calc : tables in text;printing
-OpenOffice.org Calc : tables in text;protecting cells
-OpenOffice.org Calc : tables of contents
-OpenOffice.org Calc : tables of contents;unprotecting
-OpenOffice.org Calc : tabs
-OpenOffice.org Calc : tabs;displaying sheet tabs
-OpenOffice.org Calc : tags
-OpenOffice.org Calc : tags;definition
-OpenOffice.org Calc : tags;META tags
-OpenOffice.org Calc : TAN function
-OpenOffice.org Calc : TANH function
-OpenOffice.org Calc : TBILLEQ function
-OpenOffice.org Calc : TBILLPRICE function
-OpenOffice.org Calc : TBILLYIELD function
-OpenOffice.org Calc : TDIST function
-OpenOffice.org Calc : templates
-OpenOffice.org Calc : templates;agendas
-OpenOffice.org Calc : templates;changing basic fonts
-OpenOffice.org Calc : templates;database reports
-OpenOffice.org Calc : templates;deleting
-OpenOffice.org Calc : templates;editing and saving
-OpenOffice.org Calc : templates;faxes
-OpenOffice.org Calc : templates;importing and exporting
-OpenOffice.org Calc : templates;letters
-OpenOffice.org Calc : templates;new documents from templates
-OpenOffice.org Calc : templates;opening documents with
-OpenOffice.org Calc : templates;organizing
-OpenOffice.org Calc : terminology
-OpenOffice.org Calc : terminology;general glossary
-OpenOffice.org Calc : terminology;Internet glossary
-OpenOffice.org Calc : testing XML filters
-OpenOffice.org Calc : text
-OpenOffice.org Calc : text;animating
-OpenOffice.org Calc : text;Asian layout
-OpenOffice.org Calc : text;backgrounds
-OpenOffice.org Calc : text;bold
-OpenOffice.org Calc : text;coloring
-OpenOffice.org Calc : text;contours
-OpenOffice.org Calc : text;copying by drag and drop
-OpenOffice.org Calc : text;CTL languages
-OpenOffice.org Calc : text;drawing pictures
-OpenOffice.org Calc : text;font effects
-OpenOffice.org Calc : text;font sizes
-OpenOffice.org Calc : text;font styles
-OpenOffice.org Calc : text;fonts and formats
-OpenOffice.org Calc : text;Fontwork icons
-OpenOffice.org Calc : text;hyperlinks
-OpenOffice.org Calc : text;inserting special characters
-OpenOffice.org Calc : text;italics
-OpenOffice.org Calc : text;kerning
-OpenOffice.org Calc : text;language selection
-OpenOffice.org Calc : text;line spacing
-OpenOffice.org Calc : text;overwriting or inserting
-OpenOffice.org Calc : text;placeholders in presentations
-OpenOffice.org Calc : text;printing in black
-OpenOffice.org Calc : text;replacing with format
-OpenOffice.org Calc : text;selection modes
-OpenOffice.org Calc : text;shadowed
-OpenOffice.org Calc : text;text/draw objects
-OpenOffice.org Calc : text attributes
-OpenOffice.org Calc : text attributes;hyperlinks
-OpenOffice.org Calc : text attributes;undoing
-OpenOffice.org Calc : text boxes
-OpenOffice.org Calc : text boxes;form functions
-OpenOffice.org Calc : text boxes;positioning
-OpenOffice.org Calc : text breaks in cells
-OpenOffice.org Calc : text colors for better accessibility
-OpenOffice.org Calc : text completion on/off
-OpenOffice.org Calc : text concatenation AND
-OpenOffice.org Calc : text databases (Base)
-OpenOffice.org Calc : text documents
-OpenOffice.org Calc : text documents;creating/opening
-OpenOffice.org Calc : text documents;importing to spreadsheets
-OpenOffice.org Calc : text documents;importing/exporting
-OpenOffice.org Calc : text documents;inserting spreadsheet cells
-OpenOffice.org Calc : text documents;print settings
-OpenOffice.org Calc : text documents;printing
-OpenOffice.org Calc : text documents;saving
-OpenOffice.org Calc : text documents;saving automatically
-OpenOffice.org Calc : text documents;saving in other formats
-OpenOffice.org Calc : text documents;sending as e-mail
-OpenOffice.org Calc : text effects
-OpenOffice.org Calc : text file import and export
-OpenOffice.org Calc : text flow
-OpenOffice.org Calc : text flow;in cells
-OpenOffice.org Calc : text formats
-OpenOffice.org Calc : text formats;databases
-OpenOffice.org Calc : text formats;for numbers
-OpenOffice.org Calc : text formats;pasting
-OpenOffice.org Calc : TEXT function
-OpenOffice.org Calc : text in cells
-OpenOffice.org Calc : text in cells;as addressing
-OpenOffice.org Calc : text in cells;AutoInput function
-OpenOffice.org Calc : text in cells;changing to numbers
-OpenOffice.org Calc : text in cells;formatting
-OpenOffice.org Calc : text in cells;functions
-OpenOffice.org Calc : text in cells;multi-line
-OpenOffice.org Calc : text in cells;writing vertically
-OpenOffice.org Calc : text input fields
-OpenOffice.org Calc : text layout for special languages
-OpenOffice.org Calc : text objects
-OpenOffice.org Calc : text objects;alignment
-OpenOffice.org Calc : text objects;draw functions
-OpenOffice.org Calc : text objects;fonts
-OpenOffice.org Calc : text objects;in presentations and drawings
-OpenOffice.org Calc : text operators
-OpenOffice.org Calc : text overflow in spreadsheet cells
-OpenOffice.org Calc : text scaling in charts
-OpenOffice.org Calc : text to columns
-OpenOffice.org Calc : text, see also text documents, paragraphs and characters
-OpenOffice.org Calc : TextArt, see Fontwork
-OpenOffice.org Calc : textures
-OpenOffice.org Calc : textures;inserting from Gallery
-OpenOffice.org Calc : textures;on chart bars
-OpenOffice.org Calc : Thai
-OpenOffice.org Calc : Thai;entering text
-OpenOffice.org Calc : Thai;language settings
-OpenOffice.org Calc : theme selection for sheets
-OpenOffice.org Calc : thesaurus
-OpenOffice.org Calc : thesaurus;activating for a language
-OpenOffice.org Calc : ticker text
-OpenOffice.org Calc : time differences
-OpenOffice.org Calc : time fields
-OpenOffice.org Calc : time fields;form functions
-OpenOffice.org Calc : TIME function
-OpenOffice.org Calc : times
-OpenOffice.org Calc : times;in cells
-OpenOffice.org Calc : times;inserting when printing presentations
-OpenOffice.org Calc : times, formats
-OpenOffice.org Calc : TIMEVALUE function
-OpenOffice.org Calc : TINV function
-OpenOffice.org Calc : tips
-OpenOffice.org Calc : tips;extended tips in Help
-OpenOffice.org Calc : title rows
-OpenOffice.org Calc : title rows;freezing during table split
-OpenOffice.org Calc : title rows;printing in OpenOffice.org Math
-OpenOffice.org Calc : title rows;printing on all sheets
-OpenOffice.org Calc : titles
-OpenOffice.org Calc : titles;alignment (charts)
-OpenOffice.org Calc : titles;changing
-OpenOffice.org Calc : titles;editing in charts
-OpenOffice.org Calc : titles;font effects
-OpenOffice.org Calc : titles;formatting automatically
-OpenOffice.org Calc : titles;formatting charts
-OpenOffice.org Calc : titles;objects
-OpenOffice.org Calc : TODAY function
-OpenOffice.org Calc : toolbars
-OpenOffice.org Calc : toolbars;adding buttons
-OpenOffice.org Calc : toolbars;docking/undocking
-OpenOffice.org Calc : toolbars;Form Navigation bar
-OpenOffice.org Calc : toolbars;viewing/closing
-OpenOffice.org Calc : tools bar
-OpenOffice.org Calc : tooltips
-OpenOffice.org Calc : tooltips;extended tips
-OpenOffice.org Calc : tooltips;help
-OpenOffice.org Calc : total amortizement rates
-OpenOffice.org Calc : traces
-OpenOffice.org Calc : traces;autorefreshing
-OpenOffice.org Calc : traces;precedents and dependents
-OpenOffice.org Calc : traces;precedents for multiple cells
-OpenOffice.org Calc : traces;refreshing
-OpenOffice.org Calc : tracing errors
-OpenOffice.org Calc : Track changes feature in Microsoft Office
-OpenOffice.org Calc : traditional Chinese
-OpenOffice.org Calc : traditional Chinese;translating to simplified chinese
-OpenOffice.org Calc : transparency
-OpenOffice.org Calc : transparency;areas
-OpenOffice.org Calc : transparency;off for faster printing
-OpenOffice.org Calc : transparency;saving
-OpenOffice.org Calc : TRANSPOSE function
-OpenOffice.org Calc : transposing tables
-OpenOffice.org Calc : treasury bills
-OpenOffice.org Calc : treasury bills;annual return
-OpenOffice.org Calc : treasury bills;prices
-OpenOffice.org Calc : treasury bills;rates of return
-OpenOffice.org Calc : tree view of Help
-OpenOffice.org Calc : TREND function
-OpenOffice.org Calc : trend lines in charts
-OpenOffice.org Calc : trigonometric functions
-OpenOffice.org Calc : TRIM function
-OpenOffice.org Calc : TRIMMEAN function
-OpenOffice.org Calc : TRUE function
-OpenOffice.org Calc : TRUNC function
-OpenOffice.org Calc : TTEST function
-OpenOffice.org Calc : TYPE function
-OpenOffice.org Calc : typefaces
-OpenOffice.org Calc : typefaces;adding under UNIX
-OpenOffice.org Calc : typefaces;formats
-OpenOffice.org Calc : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Calc : typography
-OpenOffice.org Calc : typography;Asian
-OpenOffice.org Calc : underlining
-OpenOffice.org Calc : underlining;AutoFormat function
-OpenOffice.org Calc : underlining;characters
-OpenOffice.org Calc : underlining;text
-OpenOffice.org Calc : undocking windows
-OpenOffice.org Calc : undoing
-OpenOffice.org Calc : undoing;direct formatting
-OpenOffice.org Calc : undoing;editing
-OpenOffice.org Calc : undoing;number of steps
-OpenOffice.org Calc : ungrouping entries in DataPilot tables
-OpenOffice.org Calc : ungrouping groups
-OpenOffice.org Calc : units
-OpenOffice.org Calc : units;converting
-OpenOffice.org Calc : units;measurement units
-OpenOffice.org Calc : unmerging cells
-OpenOffice.org Calc : UNO components
-OpenOffice.org Calc : UNO components;Extension Manager
-OpenOffice.org Calc : UNO components;integrating new
-OpenOffice.org Calc : unprotecting cells
-OpenOffice.org Calc : update options
-OpenOffice.org Calc : updates
-OpenOffice.org Calc : updates;checking automatically
-OpenOffice.org Calc : updates;checking manually
-OpenOffice.org Calc : updating
-OpenOffice.org Calc : updating;DataPilot tables
-OpenOffice.org Calc : updating;fields and charts, automatically (Writer)
-OpenOffice.org Calc : updating;links in text documents
-OpenOffice.org Calc : updating;links, on opening
-OpenOffice.org Calc : updating;templates
-OpenOffice.org Calc : updating;traces
-OpenOffice.org Calc : UPPER function
-OpenOffice.org Calc : URL
-OpenOffice.org Calc : URL;changing hyperlink URLs
-OpenOffice.org Calc : URL;definition
-OpenOffice.org Calc : URL;in Calc
-OpenOffice.org Calc : URL;saving absolute/relative paths
-OpenOffice.org Calc : URL;turning off URL recognition
-OpenOffice.org Calc : user data
-OpenOffice.org Calc : user data;input
-OpenOffice.org Calc : user data;removing when saving
-OpenOffice.org Calc : user-defined dictionaries
-OpenOffice.org Calc : user-defined dictionaries;creating
-OpenOffice.org Calc : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Calc : user-defined dictionaries;editing
-OpenOffice.org Calc : user-defined functions
-OpenOffice.org Calc : user-defined styles
-OpenOffice.org Calc : user-defined styles;automatically replacing
-OpenOffice.org Calc : UTF-8/UCS2 support
-OpenOffice.org Calc : Validation feature in Microsoft Office
-OpenOffice.org Calc : validity
-OpenOffice.org Calc : VALUE function
-OpenOffice.org Calc : values
-OpenOffice.org Calc : values;absolute
-OpenOffice.org Calc : values;consolidating
-OpenOffice.org Calc : values;defining names
-OpenOffice.org Calc : values;displaying in tables
-OpenOffice.org Calc : values;highlighting
-OpenOffice.org Calc : values;inserting in multiple cells
-OpenOffice.org Calc : values;inserting in multiple sheets
-OpenOffice.org Calc : values;limiting on input
-OpenOffice.org Calc : values;rounded as shown (Calc)
-OpenOffice.org Calc : values;rounded in calculations
-OpenOffice.org Calc : VAR function
-OpenOffice.org Calc : VARA function
-OpenOffice.org Calc : variables
-OpenOffice.org Calc : variables;calculating equations
-OpenOffice.org Calc : variables;defining names
-OpenOffice.org Calc : variables;for paths
-OpenOffice.org Calc : variances
-OpenOffice.org Calc : variances;based on populations
-OpenOffice.org Calc : variances;based on samples
-OpenOffice.org Calc : variances
-OpenOffice.org Calc : variances in charts
-OpenOffice.org Calc : VARP function
-OpenOffice.org Calc : VARPA function
-OpenOffice.org Calc : VBA code
-OpenOffice.org Calc : VBA code;loading/saving documents with VBA code
-OpenOffice.org Calc : VDB function
-OpenOffice.org Calc : version management
-OpenOffice.org Calc : version numbers of documents
-OpenOffice.org Calc : versions
-OpenOffice.org Calc : versions;comparing documents
-OpenOffice.org Calc : versions;file saving as, restriction
-OpenOffice.org Calc : versions;merging document versions
-OpenOffice.org Calc : versions;of a document
-OpenOffice.org Calc : versions;OpenOffice.org
-OpenOffice.org Calc : vertical callouts
-OpenOffice.org Calc : vertical scrollbars (Writer)
-OpenOffice.org Calc : vertical search function
-OpenOffice.org Calc : vertical text boxes
-OpenOffice.org Calc : videos
-OpenOffice.org Calc : viewing
-OpenOffice.org Calc : viewing;databases
-OpenOffice.org Calc : viewing;file properties
-OpenOffice.org Calc : viewing;notes on cells
-OpenOffice.org Calc : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Calc : viewing;print ranges
-OpenOffice.org Calc : viewing;toolbars
-OpenOffice.org Calc : views
-OpenOffice.org Calc : views;creating database views (Base)
-OpenOffice.org Calc : views;defaults
-OpenOffice.org Calc : views;full screen
-OpenOffice.org Calc : views;icons
-OpenOffice.org Calc : views;in 3D
-OpenOffice.org Calc : views;multiple sheets
-OpenOffice.org Calc : views;scaling
-OpenOffice.org Calc : views;tables
-OpenOffice.org Calc : Visual Basic for Applications
-OpenOffice.org Calc : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Calc : VLOOKUP function
-OpenOffice.org Calc : watermarks
-OpenOffice.org Calc : web documents
-OpenOffice.org Calc : web documents;XForms
-OpenOffice.org Calc : web pages
-OpenOffice.org Calc : web pages;importing data
-OpenOffice.org Calc : Web support
-OpenOffice.org Calc : WebCast export
-OpenOffice.org Calc : WebQuery filter
-OpenOffice.org Calc : WEEKDAY function
-OpenOffice.org Calc : WEEKNUM function
-OpenOffice.org Calc : WEEKNUM_ADD function
-OpenOffice.org Calc : WEEKS function
-OpenOffice.org Calc : WEEKSINYEAR function
-OpenOffice.org Calc : WEIBULL function
-OpenOffice.org Calc : what if operations
-OpenOffice.org Calc : widths of cells
-OpenOffice.org Calc : windows
-OpenOffice.org Calc : windows;docking
-OpenOffice.org Calc : windows;docking definition
-OpenOffice.org Calc : windows;hiding/showing/docking
-OpenOffice.org Calc : windows;new
-OpenOffice.org Calc : windows;splitting
-OpenOffice.org Calc : wizards
-OpenOffice.org Calc : wizards;agendas
-OpenOffice.org Calc : wizards;database queries
-OpenOffice.org Calc : wizards;database tables (Base)
-OpenOffice.org Calc : wizards;databases (Base)
-OpenOffice.org Calc : wizards;document converter
-OpenOffice.org Calc : wizards;Euro Converter
-OpenOffice.org Calc : wizards;faxes
-OpenOffice.org Calc : wizards;forms
-OpenOffice.org Calc : wizards;functions
-OpenOffice.org Calc : wizards;letters
-OpenOffice.org Calc : wizards;overview
-OpenOffice.org Calc : wizards;presentations
-OpenOffice.org Calc : wizards;reports
-OpenOffice.org Calc : Word documents
-OpenOffice.org Calc : Word documents;compatibility
-OpenOffice.org Calc : Word documents;saving as
-OpenOffice.org Calc : WordArt, see Fontwork
-OpenOffice.org Calc : words
-OpenOffice.org Calc : words;automatically replacing
-OpenOffice.org Calc : words;wrapping in cells
-OpenOffice.org Calc : work directory change
-OpenOffice.org Calc : Workbook feature in Microsoft Office
-OpenOffice.org Calc : WORKDAY function
-OpenOffice.org Calc : Worksheet feature in Microsoft Office
-OpenOffice.org Calc : worksheet names
-OpenOffice.org Calc : wrapping text
-OpenOffice.org Calc : wrapping text;in cells
-OpenOffice.org Calc : write protection on/off
-OpenOffice.org Calc : writing aids options
-OpenOffice.org Calc : WYSIWYG in fonts lists
-OpenOffice.org Calc : X axes
-OpenOffice.org Calc : X axes;grid formatting
-OpenOffice.org Calc : X axes;scaling
-OpenOffice.org Calc : X axes;showing
-OpenOffice.org Calc : XForms
-OpenOffice.org Calc : XIRR function
-OpenOffice.org Calc : XML converters
-OpenOffice.org Calc : XML file formats
-OpenOffice.org Calc : XML filters
-OpenOffice.org Calc : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Calc : XML filters;settings
-OpenOffice.org Calc : XML Forms
-OpenOffice.org Calc : XNPV function
-OpenOffice.org Calc : XSLT based filters
-OpenOffice.org Calc : XSLT based filters;settings
-OpenOffice.org Calc : XSLT filters, see also XML filters
-OpenOffice.org Calc : XY charts
-OpenOffice.org Calc : Y axes
-OpenOffice.org Calc : Y axes;formatting
-OpenOffice.org Calc : Y axes;grid formatting
-OpenOffice.org Calc : Y axes;scaling
-OpenOffice.org Calc : Y axes;showing
-OpenOffice.org Calc : YEAR function
-OpenOffice.org Calc : YEARFRAC function
-OpenOffice.org Calc : years
-OpenOffice.org Calc : years;2-digit options
-OpenOffice.org Calc : years;2-digits
-OpenOffice.org Calc : YEARS function
-OpenOffice.org Calc : YIELD function
-OpenOffice.org Calc : YIELDDISC function
-OpenOffice.org Calc : YIELDMAT function
-OpenOffice.org Calc : yields, see also rates of return
-OpenOffice.org Calc : Z axes
-OpenOffice.org Calc : Z axes;grid formatting
-OpenOffice.org Calc : Z axes;showing
-OpenOffice.org Calc : zero values
-OpenOffice.org Calc : zero values;displaying (Calc)
-OpenOffice.org Calc : zero values;entering leading zeros
-OpenOffice.org Calc : zero values;printing
-OpenOffice.org Calc : zooming
-OpenOffice.org Calc : zooming;enlarging page views
-OpenOffice.org Calc : zooming;page views
-OpenOffice.org Calc : zooming;pictures
-OpenOffice.org Calc : zooming;reducing page views
-OpenOffice.org Calc : zooming;status bar
-OpenOffice.org Calc : ZTEST function
-OpenOffice.org Draw : 1/2 replacement
-OpenOffice.org Draw : 3D charts
-OpenOffice.org Draw : 3D objects
-OpenOffice.org Draw : 3D objects;assembling
-OpenOffice.org Draw : 3D objects;generating
-OpenOffice.org Draw : 3D objects;inserting
-OpenOffice.org Draw : 3D rotation objects
-OpenOffice.org Draw : 3D rotation objects;converting to
-OpenOffice.org Draw : 3D rotation objects;generating
-OpenOffice.org Draw : 3D text creation
-OpenOffice.org Draw : 3D view
-OpenOffice.org Draw : abbreviation replacement
-OpenOffice.org Draw : absolute hyperlinks
-OpenOffice.org Draw : absolute saving of URLs
-OpenOffice.org Draw : accents
-OpenOffice.org Draw : Access databases (base)
-OpenOffice.org Draw : access rights for database tables (Base)
-OpenOffice.org Draw : accessibility
-OpenOffice.org Draw : accessibility;general shortcuts
-OpenOffice.org Draw : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Draw : accessibility;OpenOffice.org Draw
-OpenOffice.org Draw : accessibility;OpenOffice.org features
-OpenOffice.org Draw : accessibility;OpenOffice.org Impress
-OpenOffice.org Draw : accessibility;options
-OpenOffice.org Draw : activating
-OpenOffice.org Draw : activating;context menus
-OpenOffice.org Draw : activating;Error Report Tool
-OpenOffice.org Draw : activating;extended help tips
-OpenOffice.org Draw : activating;plug-ins
-OpenOffice.org Draw : ActiveX control
-OpenOffice.org Draw : Adabas D databases (base)
-OpenOffice.org Draw : add-ons, see UNO components
-OpenOffice.org Draw : adding
-OpenOffice.org Draw : adding;animation effects
-OpenOffice.org Draw : adding;automatic captions (Writer)
-OpenOffice.org Draw : adding;backgrounds
-OpenOffice.org Draw : adding;buttons in toolbars
-OpenOffice.org Draw : adding;conditions for XForm items
-OpenOffice.org Draw : adding;draw objects
-OpenOffice.org Draw : adding;Fontwork objects
-OpenOffice.org Draw : adding;headers/footers in all slides
-OpenOffice.org Draw : adding;items in Data Navigator
-OpenOffice.org Draw : adding;namespaces in XForms
-OpenOffice.org Draw : adding;paragraph borders
-OpenOffice.org Draw : adding;pictures from Gallery
-OpenOffice.org Draw : adding;pictures in Gallery
-OpenOffice.org Draw : adding;plug-ins
-OpenOffice.org Draw : adding;points
-OpenOffice.org Draw : adding;push buttons
-OpenOffice.org Draw : adding;table borders
-OpenOffice.org Draw : adding;text frames
-OpenOffice.org Draw : adding;textures on chart bars
-OpenOffice.org Draw : additional selection mode
-OpenOffice.org Draw : address books
-OpenOffice.org Draw : address books;LDAP server (Base)
-OpenOffice.org Draw : address books;registering
-OpenOffice.org Draw : address labels from databases
-OpenOffice.org Draw : ADO databases (Base)
-OpenOffice.org Draw : Agenda Wizard
-OpenOffice.org Draw : aging filter
-OpenOffice.org Draw : aligning
-OpenOffice.org Draw : aligning;2D charts
-OpenOffice.org Draw : aligning;cells
-OpenOffice.org Draw : aligning;draw objects
-OpenOffice.org Draw : aligning;objects
-OpenOffice.org Draw : aligning;paragraphs
-OpenOffice.org Draw : aligning;tables in text
-OpenOffice.org Draw : aligning;text objects
-OpenOffice.org Draw : aligning;titles in charts
-OpenOffice.org Draw : allowing
-OpenOffice.org Draw : allowing;effects
-OpenOffice.org Draw : allowing;interaction
-OpenOffice.org Draw : alternative fonts
-OpenOffice.org Draw : ampersand symbol, see also operators
-OpenOffice.org Draw : anchors
-OpenOffice.org Draw : anchors;changing
-OpenOffice.org Draw : anchors;displaying (Calc)
-OpenOffice.org Draw : anchors;types/positions for draw objects
-OpenOffice.org Draw : animated GIFs
-OpenOffice.org Draw : animated slide transitions
-OpenOffice.org Draw : animations
-OpenOffice.org Draw : animations;accessibility options
-OpenOffice.org Draw : animations;editing
-OpenOffice.org Draw : animations;list of
-OpenOffice.org Draw : animations;saving as GIFs
-OpenOffice.org Draw : appearance options
-OpenOffice.org Draw : applet insertion
-OpenOffice.org Draw : applying
-OpenOffice.org Draw : applying;animation effects
-OpenOffice.org Draw : applying;gradients
-OpenOffice.org Draw : applying;languages, to selected text
-OpenOffice.org Draw : Arabic
-OpenOffice.org Draw : Arabic;entering text
-OpenOffice.org Draw : Arabic;language settings
-OpenOffice.org Draw : area charts
-OpenOffice.org Draw : areas
-OpenOffice.org Draw : areas;bitmap patterns
-OpenOffice.org Draw : areas;from connected lines
-OpenOffice.org Draw : areas;hatched/dotted
-OpenOffice.org Draw : areas;shadows
-OpenOffice.org Draw : areas;slanting
-OpenOffice.org Draw : areas;styles
-OpenOffice.org Draw : areas;transparency
-OpenOffice.org Draw : arguments in command line
-OpenOffice.org Draw : arranging
-OpenOffice.org Draw : arranging;objects
-OpenOffice.org Draw : arranging;objects (guide)
-OpenOffice.org Draw : arranging;slides
-OpenOffice.org Draw : arrows
-OpenOffice.org Draw : arrows;defining arrow heads
-OpenOffice.org Draw : arrows;defining arrow lines
-OpenOffice.org Draw : arrows;drawing in text
-OpenOffice.org Draw : arrows;inserting
-OpenOffice.org Draw : arrows;loading arrow styles
-OpenOffice.org Draw : ASCII
-OpenOffice.org Draw : ASCII;definition
-OpenOffice.org Draw : Asian languages
-OpenOffice.org Draw : Asian languages;enabling
-OpenOffice.org Draw : Asian Phonetic Guide
-OpenOffice.org Draw : Asian typography
-OpenOffice.org Draw : assembled objects in 3D
-OpenOffice.org Draw : assigning scripts
-OpenOffice.org Draw : assistive technology in OpenOffice.org
-OpenOffice.org Draw : attaching toolbars
-OpenOffice.org Draw : attachments in e-mails
-OpenOffice.org Draw : attributes
-OpenOffice.org Draw : attributes;objects with
-OpenOffice.org Draw : audio
-OpenOffice.org Draw : audio;inserting
-OpenOffice.org Draw : audio;UNIX
-OpenOffice.org Draw : authors
-OpenOffice.org Draw : auto reloading HTML documents
-OpenOffice.org Draw : AutoAbstract function for sending text to presentations
-OpenOffice.org Draw : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Draw : AutoComplete function in text and list boxes
-OpenOffice.org Draw : AutoCorrect function
-OpenOffice.org Draw : AutoCorrect function;context menu
-OpenOffice.org Draw : AutoCorrect function;options
-OpenOffice.org Draw : AutoCorrect function;pictures and frames
-OpenOffice.org Draw : AutoCorrect function;quotes
-OpenOffice.org Draw : AutoCorrect function;replacement table
-OpenOffice.org Draw : AutoCorrect function;smart tags
-OpenOffice.org Draw : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Draw : AutoCorrect function;URL recognition
-OpenOffice.org Draw : AutoFormat function
-OpenOffice.org Draw : AutoFormat function;switching on and off
-OpenOffice.org Draw : automatic captions (Writer)
-OpenOffice.org Draw : automatic control focus
-OpenOffice.org Draw : automatic hyperlink formatting
-OpenOffice.org Draw : automatic line breaks
-OpenOffice.org Draw : automatic lines/borders in text
-OpenOffice.org Draw : automatic saving
-OpenOffice.org Draw : automatic slide changes
-OpenOffice.org Draw : automatic slide changes;rehearse timings
-OpenOffice.org Draw : automatic slide shows
-OpenOffice.org Draw : automatic slide transition
-OpenOffice.org Draw : AutoPilots, see wizards
-OpenOffice.org Draw : AutoShapes feature in Microsoft Office
-OpenOffice.org Draw : averages in charts
-OpenOffice.org Draw : axes
-OpenOffice.org Draw : axes;better scaling
-OpenOffice.org Draw : axes;formatting
-OpenOffice.org Draw : axes;formatting grids
-OpenOffice.org Draw : axes;inserting grids
-OpenOffice.org Draw : axes;interval marks
-OpenOffice.org Draw : axes;showing axes in charts
-OpenOffice.org Draw : axes in charts
-OpenOffice.org Draw : backgrounds
-OpenOffice.org Draw : backgrounds;changing
-OpenOffice.org Draw : backgrounds;defining colors/pictures
-OpenOffice.org Draw : backgrounds;deleting unused
-OpenOffice.org Draw : backgrounds;frames/sections/indexes
-OpenOffice.org Draw : backgrounds;inserting from Gallery
-OpenOffice.org Draw : backgrounds;normal view
-OpenOffice.org Draw : backgrounds;notes
-OpenOffice.org Draw : backgrounds;printing
-OpenOffice.org Draw : backgrounds;slides
-OpenOffice.org Draw : backing window
-OpenOffice.org Draw : backups
-OpenOffice.org Draw : backups;automatic
-OpenOffice.org Draw : backups;documents
-OpenOffice.org Draw : bar charts
-OpenOffice.org Draw : Basic
-OpenOffice.org Draw : Basic;fonts for source display
-OpenOffice.org Draw : Basic;programming
-OpenOffice.org Draw : Basic;recording macros
-OpenOffice.org Draw : Basic;scripting
-OpenOffice.org Draw : basic fonts
-OpenOffice.org Draw : BeanShell scripting
-OpenOffice.org Draw : behind object command
-OpenOffice.org Draw : Bézier curves
-OpenOffice.org Draw : Bézier curves;control points in presentations
-OpenOffice.org Draw : bi-directional writing
-OpenOffice.org Draw : binding space
-OpenOffice.org Draw : bitmaps
-OpenOffice.org Draw : bitmaps;converting to
-OpenOffice.org Draw : bitmaps;converting to vector graphics
-OpenOffice.org Draw : bitmaps;inserting and editing
-OpenOffice.org Draw : bitmaps;off for faster printing
-OpenOffice.org Draw : bitmaps;patterns
-OpenOffice.org Draw : bitmaps;replacing colors
-OpenOffice.org Draw : black and white display
-OpenOffice.org Draw : black and white printing
-OpenOffice.org Draw : black and white view
-OpenOffice.org Draw : black printing in Calc
-OpenOffice.org Draw : block selection mode
-OpenOffice.org Draw : bold
-OpenOffice.org Draw : bold;AutoFormat function
-OpenOffice.org Draw : bold;text
-OpenOffice.org Draw : bookmarks
-OpenOffice.org Draw : bookmarks;Help
-OpenOffice.org Draw : borders
-OpenOffice.org Draw : borders;arranging
-OpenOffice.org Draw : borders;cells on screen (Calc)
-OpenOffice.org Draw : borders;for paragraphs
-OpenOffice.org Draw : borders;for tables
-OpenOffice.org Draw : borders;shadows
-OpenOffice.org Draw : borders;table boundaries (Writer)
-OpenOffice.org Draw : borders, see also frames
-OpenOffice.org Draw : bound fields
-OpenOffice.org Draw : bound fields;controls
-OpenOffice.org Draw : boundaries of tables (Writer)
-OpenOffice.org Draw : break display (Writer)
-OpenOffice.org Draw : breaking object connections
-OpenOffice.org Draw : brochures
-OpenOffice.org Draw : brochures;printing several
-OpenOffice.org Draw : build numbers of OpenOffice.org
-OpenOffice.org Draw : bullet lists
-OpenOffice.org Draw : bullet lists;formatting options
-OpenOffice.org Draw : bullets
-OpenOffice.org Draw : bullets;paragraphs
-OpenOffice.org Draw : bullets;replacing
-OpenOffice.org Draw : bullets;turning off
-OpenOffice.org Draw : business cards
-OpenOffice.org Draw : business cards;creating and synchronizing
-OpenOffice.org Draw : business cards;using templates
-OpenOffice.org Draw : button bars, see toolbars
-OpenOffice.org Draw : buttons
-OpenOffice.org Draw : buttons;adding push buttons
-OpenOffice.org Draw : buttons;big/small
-OpenOffice.org Draw : buttons;editing hyperlink buttons
-OpenOffice.org Draw : buttons;form functions
-OpenOffice.org Draw : buttons;toolbars
-OpenOffice.org Draw : cache for graphics
-OpenOffice.org Draw : calculating
-OpenOffice.org Draw : calculating;iterative references (Calc)
-OpenOffice.org Draw : calculating;regression curves
-OpenOffice.org Draw : callouts
-OpenOffice.org Draw : callouts;drawings
-OpenOffice.org Draw : callouts;inserting in presentations
-OpenOffice.org Draw : capital letters
-OpenOffice.org Draw : capital letters;AutoCorrect function
-OpenOffice.org Draw : capital letters;font effects
-OpenOffice.org Draw : captions
-OpenOffice.org Draw : captions;automatic captions (Writer)
-OpenOffice.org Draw : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Draw : captions, see also labels/callouts
-OpenOffice.org Draw : cascading update (Base)
-OpenOffice.org Draw : case sensitivity
-OpenOffice.org Draw : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Draw : case sensitivity;searching
-OpenOffice.org Draw : cells
-OpenOffice.org Draw : cells;aligning
-OpenOffice.org Draw : cells;backgrounds
-OpenOffice.org Draw : cells;coloring (Calc)
-OpenOffice.org Draw : cells;cursor positions after input (Calc)
-OpenOffice.org Draw : cells;formatting without effect (Calc)
-OpenOffice.org Draw : cells;line breaks
-OpenOffice.org Draw : cells;linked to controls
-OpenOffice.org Draw : cells;number formats
-OpenOffice.org Draw : cells;number of
-OpenOffice.org Draw : cells;pasting
-OpenOffice.org Draw : cells;resetting formats
-OpenOffice.org Draw : cells;showing grid lines (Calc)
-OpenOffice.org Draw : centered text
-OpenOffice.org Draw : centimeters
-OpenOffice.org Draw : certificates
-OpenOffice.org Draw : Change Case feature in Microsoft Office
-OpenOffice.org Draw : changes
-OpenOffice.org Draw : changes;accepting or rejecting
-OpenOffice.org Draw : changes;comparing to original
-OpenOffice.org Draw : changes;protecting
-OpenOffice.org Draw : changes;recording
-OpenOffice.org Draw : changes;review function
-OpenOffice.org Draw : changes;showing
-OpenOffice.org Draw : changing
-OpenOffice.org Draw : changing;data binding of XForms
-OpenOffice.org Draw : changing;default templates
-OpenOffice.org Draw : changing;document titles
-OpenOffice.org Draw : changing;file associations in Setup program
-OpenOffice.org Draw : changing;hyperlink text/formats/URLs
-OpenOffice.org Draw : changing;icon sizes
-OpenOffice.org Draw : changing;keyboard
-OpenOffice.org Draw : changing;layer properties
-OpenOffice.org Draw : changing;layout for handouts
-OpenOffice.org Draw : changing;links
-OpenOffice.org Draw : changing;menus
-OpenOffice.org Draw : changing;object sizes
-OpenOffice.org Draw : changing;order of slides
-OpenOffice.org Draw : changing;slide layouts
-OpenOffice.org Draw : changing;toolbars
-OpenOffice.org Draw : changing;work directory
-OpenOffice.org Draw : changing, see also editing and replacing
-OpenOffice.org Draw : character styles
-OpenOffice.org Draw : character styles;language selection
-OpenOffice.org Draw : characters
-OpenOffice.org Draw : characters;alternative fonts
-OpenOffice.org Draw : characters;Asian layout
-OpenOffice.org Draw : characters;bold
-OpenOffice.org Draw : characters;coloring
-OpenOffice.org Draw : characters;contours
-OpenOffice.org Draw : characters;converting to curves
-OpenOffice.org Draw : characters;displaying only on screen (Writer)
-OpenOffice.org Draw : characters;enabling CTL and Asian characters
-OpenOffice.org Draw : characters;font effects
-OpenOffice.org Draw : characters;fonts and formats
-OpenOffice.org Draw : characters;hyperlinks
-OpenOffice.org Draw : characters;italics
-OpenOffice.org Draw : characters;language selection
-OpenOffice.org Draw : characters;shadowed
-OpenOffice.org Draw : characters;spacing
-OpenOffice.org Draw : characters;special
-OpenOffice.org Draw : characters;underlining
-OpenOffice.org Draw : charcoal sketches filter
-OpenOffice.org Draw : chart legends
-OpenOffice.org Draw : chart legends;hiding
-OpenOffice.org Draw : chart legends;showing icons with labels
-OpenOffice.org Draw : chart types
-OpenOffice.org Draw : chart types;area
-OpenOffice.org Draw : chart types;column and bar
-OpenOffice.org Draw : chart types;column and line
-OpenOffice.org Draw : chart types;line
-OpenOffice.org Draw : chart types;net
-OpenOffice.org Draw : chart types;pie/donut
-OpenOffice.org Draw : chart types;stock
-OpenOffice.org Draw : chart types;XY (scatter)
-OpenOffice.org Draw : charts
-OpenOffice.org Draw : charts;3D views
-OpenOffice.org Draw : charts;aligning
-OpenOffice.org Draw : charts;arranging within stacks
-OpenOffice.org Draw : charts;bars with textures
-OpenOffice.org Draw : charts;choosing chart types
-OpenOffice.org Draw : charts;colors
-OpenOffice.org Draw : charts;copying with link to source cell range
-OpenOffice.org Draw : charts;data labels
-OpenOffice.org Draw : charts;displaying (Calc)
-OpenOffice.org Draw : charts;editing axes
-OpenOffice.org Draw : charts;editing data
-OpenOffice.org Draw : charts;editing legends
-OpenOffice.org Draw : charts;editing titles
-OpenOffice.org Draw : charts;formatting areas
-OpenOffice.org Draw : charts;formatting floors
-OpenOffice.org Draw : charts;formatting walls
-OpenOffice.org Draw : charts;inserting
-OpenOffice.org Draw : charts;overview
-OpenOffice.org Draw : charts;properties
-OpenOffice.org Draw : charts;reorganizing
-OpenOffice.org Draw : charts;scaling axes
-OpenOffice.org Draw : charts;scaling text
-OpenOffice.org Draw : charts;shortcuts
-OpenOffice.org Draw : charts;showing axes
-OpenOffice.org Draw : charts;updating automatically (Writer)
-OpenOffice.org Draw : check box creation
-OpenOffice.org Draw : Chinese writing systems
-OpenOffice.org Draw : choosing printers
-OpenOffice.org Draw : circle drawings
-OpenOffice.org Draw : circle segments
-OpenOffice.org Draw : circles
-OpenOffice.org Draw : circles;of objects
-OpenOffice.org Draw : Client Side ImageMap
-OpenOffice.org Draw : clipboard
-OpenOffice.org Draw : clipboard;cutting
-OpenOffice.org Draw : clipboard;pasting
-OpenOffice.org Draw : clipboard;pasting formatted/unformatted text
-OpenOffice.org Draw : clipboard;selection clipboard
-OpenOffice.org Draw : clipboard;Unix
-OpenOffice.org Draw : closing
-OpenOffice.org Draw : closing;documents
-OpenOffice.org Draw : closing;shapes
-OpenOffice.org Draw : closing;toolbars
-OpenOffice.org Draw : color bar
-OpenOffice.org Draw : colors
-OpenOffice.org Draw : colors;adding
-OpenOffice.org Draw : colors;appearance
-OpenOffice.org Draw : colors;backgrounds
-OpenOffice.org Draw : colors;charts
-OpenOffice.org Draw : colors;default colors
-OpenOffice.org Draw : colors;defining and saving
-OpenOffice.org Draw : colors;defining gradients interactively
-OpenOffice.org Draw : colors;displaying presentations
-OpenOffice.org Draw : colors;fill format
-OpenOffice.org Draw : colors;fonts
-OpenOffice.org Draw : colors;grid lines and cells (Calc)
-OpenOffice.org Draw : colors;loading lists
-OpenOffice.org Draw : colors;models
-OpenOffice.org Draw : colors;not printing
-OpenOffice.org Draw : colors;printing in grayscale
-OpenOffice.org Draw : colors;replacing
-OpenOffice.org Draw : colors;restriction (Calc)
-OpenOffice.org Draw : colors;selection
-OpenOffice.org Draw : column and line charts
-OpenOffice.org Draw : column charts
-OpenOffice.org Draw : column headers
-OpenOffice.org Draw : column headers;displaying (Calc)
-OpenOffice.org Draw : column headers;highlighting (Calc)
-OpenOffice.org Draw : columns
-OpenOffice.org Draw : columns;setting with the mouse
-OpenOffice.org Draw : combination charts
-OpenOffice.org Draw : combining
-OpenOffice.org Draw : combining;3D objects
-OpenOffice.org Draw : combining;draw objects
-OpenOffice.org Draw : combining;undoing
-OpenOffice.org Draw : combo box creation
-OpenOffice.org Draw : command button creation
-OpenOffice.org Draw : command buttons, see push buttons
-OpenOffice.org Draw : command line parameters
-OpenOffice.org Draw : commands
-OpenOffice.org Draw : commands;not visible
-OpenOffice.org Draw : commands;SQL
-OpenOffice.org Draw : comments
-OpenOffice.org Draw : comments;on changes
-OpenOffice.org Draw : comments feature in Microsoft Office
-OpenOffice.org Draw : common terms
-OpenOffice.org Draw : common terms;Chinese dictionary
-OpenOffice.org Draw : common terms;glossaries
-OpenOffice.org Draw : common terms;Internet glossary
-OpenOffice.org Draw : Compare and Merge feature in Microsoft Office
-OpenOffice.org Draw : comparisons
-OpenOffice.org Draw : comparisons;document versions
-OpenOffice.org Draw : comparisons;operators in default filter dialog
-OpenOffice.org Draw : compatibility settings for MS Word import
-OpenOffice.org Draw : complete screen view
-OpenOffice.org Draw : complex text layout
-OpenOffice.org Draw : complex text layout;definition
-OpenOffice.org Draw : complex text layout;enabling
-OpenOffice.org Draw : compose key to insert special characters
-OpenOffice.org Draw : concatenation, see ampersand symbol
-OpenOffice.org Draw : conditional separators
-OpenOffice.org Draw : conditions
-OpenOffice.org Draw : conditions;in number formats
-OpenOffice.org Draw : conditions;items in Data Navigator
-OpenOffice.org Draw : cones
-OpenOffice.org Draw : Configuration Manager
-OpenOffice.org Draw : configuring
-OpenOffice.org Draw : configuring;fax icon
-OpenOffice.org Draw : configuring;OpenOffice.org
-OpenOffice.org Draw : configuring;toolbars
-OpenOffice.org Draw : connecting
-OpenOffice.org Draw : connecting;draw objects
-OpenOffice.org Draw : connecting;lines
-OpenOffice.org Draw : connecting;paths and objects
-OpenOffice.org Draw : connections to data sources (Base)
-OpenOffice.org Draw : connectors
-OpenOffice.org Draw : connectors;properties of
-OpenOffice.org Draw : connectors;using
-OpenOffice.org Draw : constructing shapes
-OpenOffice.org Draw : contents protection
-OpenOffice.org Draw : context menus
-OpenOffice.org Draw : contours
-OpenOffice.org Draw : contours;converting to
-OpenOffice.org Draw : contours of text
-OpenOffice.org Draw : control point display in presentations
-OpenOffice.org Draw : control points definition
-OpenOffice.org Draw : controls
-OpenOffice.org Draw : controls;activating in forms
-OpenOffice.org Draw : controls;adding to documents
-OpenOffice.org Draw : controls;arranging in forms
-OpenOffice.org Draw : controls;arranging within stacks
-OpenOffice.org Draw : controls;assigning data sources
-OpenOffice.org Draw : controls;bound fields/list contents/linked cells
-OpenOffice.org Draw : controls;events
-OpenOffice.org Draw : controls;focus
-OpenOffice.org Draw : controls;formatted fields
-OpenOffice.org Draw : controls;grouping
-OpenOffice.org Draw : controls;hidden
-OpenOffice.org Draw : controls;inserting
-OpenOffice.org Draw : controls;multi-line titles
-OpenOffice.org Draw : controls;positions and sizes
-OpenOffice.org Draw : controls;printing
-OpenOffice.org Draw : controls;properties of form controls
-OpenOffice.org Draw : controls;properties of table controls
-OpenOffice.org Draw : controls;reference by SQL
-OpenOffice.org Draw : controls;rich text control
-OpenOffice.org Draw : controls;select mode
-OpenOffice.org Draw : controls;showing (Writer)
-OpenOffice.org Draw : converters
-OpenOffice.org Draw : converters;Euro converter
-OpenOffice.org Draw : converters;PostScript, UNIX
-OpenOffice.org Draw : converters;XML
-OpenOffice.org Draw : converting
-OpenOffice.org Draw : converting;bitmaps to polygons
-OpenOffice.org Draw : converting;Hangul/Hanja
-OpenOffice.org Draw : converting;metrics
-OpenOffice.org Draw : converting;Microsoft documents
-OpenOffice.org Draw : converting;OpenOffice.org documents
-OpenOffice.org Draw : converting;Pocket PC formats
-OpenOffice.org Draw : converting;points
-OpenOffice.org Draw : converting;text to curves
-OpenOffice.org Draw : converting;to bitmaps
-OpenOffice.org Draw : converting;to contours
-OpenOffice.org Draw : converting;to curves, polygons, 3D
-OpenOffice.org Draw : converting;to metafile format (WMF)
-OpenOffice.org Draw : copies
-OpenOffice.org Draw : copies;printing
-OpenOffice.org Draw : copying
-OpenOffice.org Draw : copying;by drag and drop
-OpenOffice.org Draw : copying;data from text documents
-OpenOffice.org Draw : copying;datasource records in spreadsheets
-OpenOffice.org Draw : copying;draw objects
-OpenOffice.org Draw : copying;draw objects between documents
-OpenOffice.org Draw : copying;formatting
-OpenOffice.org Draw : copying;from data source view
-OpenOffice.org Draw : copying;from Gallery
-OpenOffice.org Draw : copying;in Unix
-OpenOffice.org Draw : copying;pictures, between documents
-OpenOffice.org Draw : copying;sheet areas, to text documents
-OpenOffice.org Draw : copying;slides
-OpenOffice.org Draw : copying;text from other documents
-OpenOffice.org Draw : copying;to Gallery
-OpenOffice.org Draw : copyright for OpenOffice.org
-OpenOffice.org Draw : corner points
-OpenOffice.org Draw : corner roundings
-OpenOffice.org Draw : covered objects
-OpenOffice.org Draw : crash reports
-OpenOffice.org Draw : criteria of query design (Base)
-OpenOffice.org Draw : cropping pictures
-OpenOffice.org Draw : cross-fading
-OpenOffice.org Draw : cross-fading;creating cross-fades
-OpenOffice.org Draw : cross-fading;slides
-OpenOffice.org Draw : cross-fading;two draw objects
-OpenOffice.org Draw : CTL
-OpenOffice.org Draw : CTL;complex text layout languages
-OpenOffice.org Draw : CTL;definition
-OpenOffice.org Draw : CTL;options
-OpenOffice.org Draw : cubes
-OpenOffice.org Draw : currencies
-OpenOffice.org Draw : currencies;converters
-OpenOffice.org Draw : currencies;formats and format codes
-OpenOffice.org Draw : currency field creation
-OpenOffice.org Draw : currency formats
-OpenOffice.org Draw : cursor
-OpenOffice.org Draw : cursor;allowing in protected areas (Writer)
-OpenOffice.org Draw : cursor;in read-only text
-OpenOffice.org Draw : cursor;quickly moving to an object
-OpenOffice.org Draw : curves
-OpenOffice.org Draw : curves;converting text to
-OpenOffice.org Draw : curves;drawing
-OpenOffice.org Draw : curves;editing
-OpenOffice.org Draw : curves;editing points
-OpenOffice.org Draw : curves;properties in line charts/XY charts
-OpenOffice.org Draw : curves;toolbar
-OpenOffice.org Draw : custom animation
-OpenOffice.org Draw : custom colors
-OpenOffice.org Draw : custom dictionaries
-OpenOffice.org Draw : custom dictionaries;editing
-OpenOffice.org Draw : custom gradients
-OpenOffice.org Draw : custom hyphens (Writer)
-OpenOffice.org Draw : custom quotes
-OpenOffice.org Draw : custom slide shows
-OpenOffice.org Draw : custom templates
-OpenOffice.org Draw : customizing
-OpenOffice.org Draw : customizing;events
-OpenOffice.org Draw : customizing;keyboard
-OpenOffice.org Draw : customizing;menus
-OpenOffice.org Draw : customizing;OpenOffice.org
-OpenOffice.org Draw : customizing;round corners
-OpenOffice.org Draw : customizing;toolbars
-OpenOffice.org Draw : cutting
-OpenOffice.org Draw : cylinders
-OpenOffice.org Draw : dashes
-OpenOffice.org Draw : data
-OpenOffice.org Draw : data;filtering in forms
-OpenOffice.org Draw : data;forms and subforms
-OpenOffice.org Draw : data;read-only
-OpenOffice.org Draw : data;sorting in forms
-OpenOffice.org Draw : data;user data
-OpenOffice.org Draw : data binding change in XForms
-OpenOffice.org Draw : data labels in charts
-OpenOffice.org Draw : Data Navigator display options
-OpenOffice.org Draw : data ranges in charts
-OpenOffice.org Draw : data series
-OpenOffice.org Draw : data source browser
-OpenOffice.org Draw : data source explorer
-OpenOffice.org Draw : data source view
-OpenOffice.org Draw : data source view;drag and drop
-OpenOffice.org Draw : data source view;overview
-OpenOffice.org Draw : data source view;showing
-OpenOffice.org Draw : data sources
-OpenOffice.org Draw : data sources;as tables
-OpenOffice.org Draw : data sources;connection settings (Base)
-OpenOffice.org Draw : data sources;copying records to spreadsheets
-OpenOffice.org Draw : data sources;displaying current
-OpenOffice.org Draw : data sources;LDAP server (Base)
-OpenOffice.org Draw : data sources;OpenOffice.org Base
-OpenOffice.org Draw : data sources;registering address books
-OpenOffice.org Draw : data sources;reports
-OpenOffice.org Draw : data sources;setting for stock charts
-OpenOffice.org Draw : data sources;viewing
-OpenOffice.org Draw : data structure of XForms
-OpenOffice.org Draw : data values in charts
-OpenOffice.org Draw : database contents
-OpenOffice.org Draw : database contents;inserting as tables
-OpenOffice.org Draw : database contents;inserting as text
-OpenOffice.org Draw : database reports
-OpenOffice.org Draw : Database Wizard (Base)
-OpenOffice.org Draw : databases
-OpenOffice.org Draw : databases;administration through SQL (Base)
-OpenOffice.org Draw : databases;ADO (Base)
-OpenOffice.org Draw : databases;connecting (Base)
-OpenOffice.org Draw : databases;creating
-OpenOffice.org Draw : databases;creating labels
-OpenOffice.org Draw : databases;creating queries
-OpenOffice.org Draw : databases;creating reports
-OpenOffice.org Draw : databases;creating tables
-OpenOffice.org Draw : databases;dBASE (Base)
-OpenOffice.org Draw : databases;deleting (Base)
-OpenOffice.org Draw : databases;drag and drop (Base)
-OpenOffice.org Draw : databases;editing tables
-OpenOffice.org Draw : databases;form filters
-OpenOffice.org Draw : databases;formats (Base)
-OpenOffice.org Draw : databases;importing/exporting
-OpenOffice.org Draw : databases;JDBC (Base)
-OpenOffice.org Draw : databases;main page (Base)
-OpenOffice.org Draw : databases;MySQL (Base)
-OpenOffice.org Draw : databases;ODBC (Base)
-OpenOffice.org Draw : databases;overview
-OpenOffice.org Draw : databases;registering (Base)
-OpenOffice.org Draw : databases;searching records
-OpenOffice.org Draw : databases;shortcut keys
-OpenOffice.org Draw : databases;sorting
-OpenOffice.org Draw : databases;standard filters
-OpenOffice.org Draw : databases;text formats
-OpenOffice.org Draw : databases;viewing
-OpenOffice.org Draw : date fields
-OpenOffice.org Draw : date fields;creating
-OpenOffice.org Draw : date fields;properties
-OpenOffice.org Draw : date formats
-OpenOffice.org Draw : date on all slides
-OpenOffice.org Draw : dates
-OpenOffice.org Draw : dates;default (Calc)
-OpenOffice.org Draw : dates;fixed
-OpenOffice.org Draw : dates;printing in presentations
-OpenOffice.org Draw : dates;start 1900/01/01 (Calc)
-OpenOffice.org Draw : dates;start 1904/01/01 (Calc)
-OpenOffice.org Draw : dates;variable
-OpenOffice.org Draw : dBASE
-OpenOffice.org Draw : dBASE;database settings (Base)
-OpenOffice.org Draw : DDE
-OpenOffice.org Draw : DDE;definition
-OpenOffice.org Draw : deactivating
-OpenOffice.org Draw : deactivating;plug-ins
-OpenOffice.org Draw : decimal places displayed (Calc)
-OpenOffice.org Draw : decimal separator key
-OpenOffice.org Draw : decimal tab stops
-OpenOffice.org Draw : decreasing sizes of views
-OpenOffice.org Draw : default directories
-OpenOffice.org Draw : default file formats
-OpenOffice.org Draw : default filters
-OpenOffice.org Draw : default filters;comparison operators
-OpenOffice.org Draw : default filters;databases
-OpenOffice.org Draw : default printer
-OpenOffice.org Draw : default printer;setting up
-OpenOffice.org Draw : default printer;UNIX
-OpenOffice.org Draw : default templates
-OpenOffice.org Draw : default templates;changing
-OpenOffice.org Draw : default templates;organizing
-OpenOffice.org Draw : defaults
-OpenOffice.org Draw : defaults;documents
-OpenOffice.org Draw : defaults;file formats
-OpenOffice.org Draw : defaults;fonts
-OpenOffice.org Draw : defaults;grids (Writer/Calc)
-OpenOffice.org Draw : defaults;languages
-OpenOffice.org Draw : defaults;number formats
-OpenOffice.org Draw : defaults;of saving
-OpenOffice.org Draw : defaults;program configuration
-OpenOffice.org Draw : defaults;tab stops in text
-OpenOffice.org Draw : defaults;views
-OpenOffice.org Draw : defining
-OpenOffice.org Draw : defining;arrowheads and other line ends
-OpenOffice.org Draw : defining;colors
-OpenOffice.org Draw : defining;gradients
-OpenOffice.org Draw : defining;line styles
-OpenOffice.org Draw : defining;paragraph borders
-OpenOffice.org Draw : defining;queries (Base)
-OpenOffice.org Draw : defining;table borders
-OpenOffice.org Draw : deleting
-OpenOffice.org Draw : deleting;all direct formatting
-OpenOffice.org Draw : deleting;animation effects
-OpenOffice.org Draw : deleting;databases (Base)
-OpenOffice.org Draw : deleting;hyperlinks
-OpenOffice.org Draw : deleting;layers
-OpenOffice.org Draw : deleting;lines in text
-OpenOffice.org Draw : deleting;models/instances
-OpenOffice.org Draw : deleting;namespaces in XForms
-OpenOffice.org Draw : deleting;points
-OpenOffice.org Draw : deleting;slide transition effects
-OpenOffice.org Draw : deleting;slides
-OpenOffice.org Draw : deleting;tab stops
-OpenOffice.org Draw : deleting;templates
-OpenOffice.org Draw : deleting;XML filters
-OpenOffice.org Draw : depth stagger
-OpenOffice.org Draw : descriptions for objects
-OpenOffice.org Draw : design mode after saving
-OpenOffice.org Draw : design view
-OpenOffice.org Draw : design view;creating forms
-OpenOffice.org Draw : design view;queries/views (Base)
-OpenOffice.org Draw : designing
-OpenOffice.org Draw : designing;database tables
-OpenOffice.org Draw : designing;fonts
-OpenOffice.org Draw : designing;queries (Base)
-OpenOffice.org Draw : detaching toolbars
-OpenOffice.org Draw : dictionaries
-OpenOffice.org Draw : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Draw : dictionaries;creating
-OpenOffice.org Draw : dictionaries;editing user-defined
-OpenOffice.org Draw : dictionaries;spellcheck
-OpenOffice.org Draw : dictionaries, see also languages
-OpenOffice.org Draw : digital signatures
-OpenOffice.org Draw : dimension lines
-OpenOffice.org Draw : dimension lines;drawing
-OpenOffice.org Draw : dimension lines;properties of
-OpenOffice.org Draw : direct formatting
-OpenOffice.org Draw : direct formatting;undoing all
-OpenOffice.org Draw : directories
-OpenOffice.org Draw : directories;creating new
-OpenOffice.org Draw : directories;directory structure
-OpenOffice.org Draw : disabled persons
-OpenOffice.org Draw : display qualities of presentations
-OpenOffice.org Draw : displaying
-OpenOffice.org Draw : displaying;non-printing characters (Writer)
-OpenOffice.org Draw : displaying;notes (Calc)
-OpenOffice.org Draw : displaying;notes in text documents
-OpenOffice.org Draw : displaying;pictures and objects (Writer)
-OpenOffice.org Draw : displaying;tables (Writer)
-OpenOffice.org Draw : displaying;zero values (Calc)
-OpenOffice.org Draw : distances
-OpenOffice.org Draw : distinct values in SQL queries
-OpenOffice.org Draw : distorting in drawings
-OpenOffice.org Draw : distorting objects
-OpenOffice.org Draw : distributing draw objects
-OpenOffice.org Draw : distributing XML filters
-OpenOffice.org Draw : dithering
-OpenOffice.org Draw : docking
-OpenOffice.org Draw : docking;definition
-OpenOffice.org Draw : docking;toolbars
-OpenOffice.org Draw : docking;windows
-OpenOffice.org Draw : Document Converter Wizard
-OpenOffice.org Draw : Document Map feature in Microsoft Office
-OpenOffice.org Draw : Document Map, see Navigator
-OpenOffice.org Draw : document types in OpenOffice.org
-OpenOffice.org Draw : documents
-OpenOffice.org Draw : documents;changing titles
-OpenOffice.org Draw : documents;closing
-OpenOffice.org Draw : documents;comparing
-OpenOffice.org Draw : documents;contents as lists
-OpenOffice.org Draw : documents;editing time
-OpenOffice.org Draw : documents;exporting
-OpenOffice.org Draw : documents;importing
-OpenOffice.org Draw : documents;languages
-OpenOffice.org Draw : documents;measurement units in
-OpenOffice.org Draw : documents;merging
-OpenOffice.org Draw : documents;number of pages/tables/sheets
-OpenOffice.org Draw : documents;opening
-OpenOffice.org Draw : documents;opening in design mode
-OpenOffice.org Draw : documents;opening with templates
-OpenOffice.org Draw : documents;organizing
-OpenOffice.org Draw : documents;printing
-OpenOffice.org Draw : documents;read-only
-OpenOffice.org Draw : documents;reloading
-OpenOffice.org Draw : documents;saving
-OpenOffice.org Draw : documents;saving automatically
-OpenOffice.org Draw : documents;saving in other formats
-OpenOffice.org Draw : documents;sending as e-mail
-OpenOffice.org Draw : documents;styles changed
-OpenOffice.org Draw : documents;version management
-OpenOffice.org Draw : documents;version numbers
-OpenOffice.org Draw : donut charts
-OpenOffice.org Draw : dotted areas
-OpenOffice.org Draw : double-line spacing in paragraphs
-OpenOffice.org Draw : double-line writing in Asian layout
-OpenOffice.org Draw : doubling draw objects
-OpenOffice.org Draw : drag and drop
-OpenOffice.org Draw : drag and drop;copying and pasting text
-OpenOffice.org Draw : drag and drop;data source view
-OpenOffice.org Draw : drag and drop;from Gallery to draw objects
-OpenOffice.org Draw : drag and drop;overview
-OpenOffice.org Draw : drag and drop;pictures
-OpenOffice.org Draw : drag and drop;to Gallery
-OpenOffice.org Draw : Draw instructions
-OpenOffice.org Draw : draw objects
-OpenOffice.org Draw : draw objects;adding/editing/copying
-OpenOffice.org Draw : draw objects;anchoring
-OpenOffice.org Draw : draw objects;arranging within stacks
-OpenOffice.org Draw : draw objects;combining
-OpenOffice.org Draw : draw objects;connecting lines to
-OpenOffice.org Draw : draw objects;converting text to
-OpenOffice.org Draw : draw objects;copying
-OpenOffice.org Draw : draw objects;copying between documents
-OpenOffice.org Draw : draw objects;cross-fading two objects
-OpenOffice.org Draw : draw objects;displaying (Calc)
-OpenOffice.org Draw : draw objects;dropping Gallery pictures
-OpenOffice.org Draw : draw objects;duplicating
-OpenOffice.org Draw : draw objects;flipping
-OpenOffice.org Draw : draw objects;grouping
-OpenOffice.org Draw : draw objects;legends
-OpenOffice.org Draw : draw objects;positioning and resizing
-OpenOffice.org Draw : draw objects;protecting
-OpenOffice.org Draw : draw objects;rotating
-OpenOffice.org Draw : draw objects;slanting
-OpenOffice.org Draw : draw objects;text entry mode
-OpenOffice.org Draw : draw objects;text in
-OpenOffice.org Draw : drawing
-OpenOffice.org Draw : drawing;3D objects
-OpenOffice.org Draw : drawing;freeform lines
-OpenOffice.org Draw : drawing;lines
-OpenOffice.org Draw : drawing;sectors and segments
-OpenOffice.org Draw : Drawing bar
-OpenOffice.org Draw : drawing lines in text
-OpenOffice.org Draw : drawings
-OpenOffice.org Draw : drawings;creating/opening
-OpenOffice.org Draw : drawings;languages
-OpenOffice.org Draw : drawings;printing
-OpenOffice.org Draw : drawings;printing defaults
-OpenOffice.org Draw : drawings;printing in text documents
-OpenOffice.org Draw : drawings;saving
-OpenOffice.org Draw : drawings;saving automatically
-OpenOffice.org Draw : drawings;saving in other formats
-OpenOffice.org Draw : drawings;sending as e-mail
-OpenOffice.org Draw : drawings;shortcut keys
-OpenOffice.org Draw : drawings;showing (Writer)
-OpenOffice.org Draw : drawings;zoom function in
-OpenOffice.org Draw : drop-down lists in form functions
-OpenOffice.org Draw : duplicating draw objects
-OpenOffice.org Draw : e-mail attachments
-OpenOffice.org Draw : Edit File icon
-OpenOffice.org Draw : edit mode
-OpenOffice.org Draw : edit mode;after opening
-OpenOffice.org Draw : edit mode;through Enter key (Calc)
-OpenOffice.org Draw : Edit Points bar
-OpenOffice.org Draw : editing
-OpenOffice.org Draw : editing;chart axes
-OpenOffice.org Draw : editing;chart data
-OpenOffice.org Draw : editing;chart legends
-OpenOffice.org Draw : editing;chart titles
-OpenOffice.org Draw : editing;curves
-OpenOffice.org Draw : editing;data binding of XForms
-OpenOffice.org Draw : editing;database tables and queries
-OpenOffice.org Draw : editing;draw objects
-OpenOffice.org Draw : editing;fields
-OpenOffice.org Draw : editing;Fontwork objects
-OpenOffice.org Draw : editing;glue points
-OpenOffice.org Draw : editing;gradients
-OpenOffice.org Draw : editing;guides and snap points
-OpenOffice.org Draw : editing;hyperlinks
-OpenOffice.org Draw : editing;items in Data Navigator
-OpenOffice.org Draw : editing;menus
-OpenOffice.org Draw : editing;namespaces in XForms
-OpenOffice.org Draw : editing;notes
-OpenOffice.org Draw : editing;objects
-OpenOffice.org Draw : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Draw : editing;pictures
-OpenOffice.org Draw : editing;reports
-OpenOffice.org Draw : editing;shortcut keys
-OpenOffice.org Draw : editing;slide titles
-OpenOffice.org Draw : editing;tab stops
-OpenOffice.org Draw : editing;templates
-OpenOffice.org Draw : editing;titles
-OpenOffice.org Draw : editing;toolbars
-OpenOffice.org Draw : editing;undoing
-OpenOffice.org Draw : editing;XForms
-OpenOffice.org Draw : editing time of documents
-OpenOffice.org Draw : editors
-OpenOffice.org Draw : editors;formula editor
-OpenOffice.org Draw : editors;ImageMap editor
-OpenOffice.org Draw : effects
-OpenOffice.org Draw : effects;animated slide transitions
-OpenOffice.org Draw : effects;applying to/removing from objects
-OpenOffice.org Draw : effects;font positions
-OpenOffice.org Draw : effects;fonts
-OpenOffice.org Draw : effects;Fontwork icons
-OpenOffice.org Draw : effects;preview
-OpenOffice.org Draw : effects;sounds
-OpenOffice.org Draw : ellipses
-OpenOffice.org Draw : ellipses;segments
-OpenOffice.org Draw : ellipses;toolbars
-OpenOffice.org Draw : empty documents
-OpenOffice.org Draw : empty paragraph removal
-OpenOffice.org Draw : encryption of contents
-OpenOffice.org Draw : entering groups
-OpenOffice.org Draw : entering text from right to left
-OpenOffice.org Draw : equal sign, see also operators
-OpenOffice.org Draw : equations in formula editor
-OpenOffice.org Draw : error bars in charts
-OpenOffice.org Draw : error indicators in charts
-OpenOffice.org Draw : Error Report Tool
-OpenOffice.org Draw : Euro
-OpenOffice.org Draw : Euro;currency formats
-OpenOffice.org Draw : Euro;Euro Converter Wizard
-OpenOffice.org Draw : even/odd pages
-OpenOffice.org Draw : even/odd pages;printing
-OpenOffice.org Draw : events
-OpenOffice.org Draw : events;controls
-OpenOffice.org Draw : events;customizing
-OpenOffice.org Draw : events;in forms
-OpenOffice.org Draw : Excel
-OpenOffice.org Draw : Excel;saving as
-OpenOffice.org Draw : Excel;search criteria
-OpenOffice.org Draw : exceptions
-OpenOffice.org Draw : exceptions;user-defined dictionaries
-OpenOffice.org Draw : exchanging, see also replacing
-OpenOffice.org Draw : executing
-OpenOffice.org Draw : executing;SQL commands
-OpenOffice.org Draw : exiting
-OpenOffice.org Draw : exiting;by clicking objects
-OpenOffice.org Draw : exiting;groups
-OpenOffice.org Draw : exiting;OpenOffice.org
-OpenOffice.org Draw : expanding
-OpenOffice.org Draw : expanding;slides
-OpenOffice.org Draw : expanding formatting (Calc)
-OpenOffice.org Draw : explorer of data sources
-OpenOffice.org Draw : export filters
-OpenOffice.org Draw : exporting
-OpenOffice.org Draw : exporting;animations to GIF format
-OpenOffice.org Draw : exporting;bitmaps
-OpenOffice.org Draw : exporting;databases
-OpenOffice.org Draw : exporting;HTML and text documents
-OpenOffice.org Draw : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Draw : exporting;presentations to HTML
-OpenOffice.org Draw : exporting;spreadsheets to text format
-OpenOffice.org Draw : exporting;templates
-OpenOffice.org Draw : exporting;to foreign formats
-OpenOffice.org Draw : exporting;to HTML
-OpenOffice.org Draw : exporting;to Macromedia Flash format
-OpenOffice.org Draw : exporting;to Microsoft Office formats
-OpenOffice.org Draw : exporting;to PDF
-OpenOffice.org Draw : exporting;to PostScript format
-OpenOffice.org Draw : exporting;to XML
-OpenOffice.org Draw : exporting;XML files
-OpenOffice.org Draw : extended tips in Help
-OpenOffice.org Draw : extension mode in text
-OpenOffice.org Draw : extensions
-OpenOffice.org Draw : extensions;Extension Manager
-OpenOffice.org Draw : extensions;file formats
-OpenOffice.org Draw : external keys (Base)
-OpenOffice.org Draw : extrusion objects
-OpenOffice.org Draw : eyedropper tool
-OpenOffice.org Draw : faster printing
-OpenOffice.org Draw : faxes
-OpenOffice.org Draw : faxes;configuring OpenOffice.org
-OpenOffice.org Draw : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Draw : faxes;selecting a fax machine
-OpenOffice.org Draw : faxes;sending
-OpenOffice.org Draw : faxes;wizards
-OpenOffice.org Draw : fields
-OpenOffice.org Draw : fields;authors
-OpenOffice.org Draw : fields;database tables
-OpenOffice.org Draw : fields;dates (fixed)
-OpenOffice.org Draw : fields;dates (variable)
-OpenOffice.org Draw : fields;displaying field codes (Writer)
-OpenOffice.org Draw : fields;editing
-OpenOffice.org Draw : fields;file names
-OpenOffice.org Draw : fields;formatted fields
-OpenOffice.org Draw : fields;formatting
-OpenOffice.org Draw : fields;in slides
-OpenOffice.org Draw : fields;page numbers
-OpenOffice.org Draw : fields;times (fixed)
-OpenOffice.org Draw : fields;times (variable)
-OpenOffice.org Draw : fields;updating automatically (Writer)
-OpenOffice.org Draw : file associations for Microsoft Office
-OpenOffice.org Draw : file filters
-OpenOffice.org Draw : file filters;mobile devices
-OpenOffice.org Draw : file filters;XML
-OpenOffice.org Draw : file formats
-OpenOffice.org Draw : file formats;changing defaults
-OpenOffice.org Draw : file formats;OpenDocument/XML
-OpenOffice.org Draw : file formats;saving always in other formats
-OpenOffice.org Draw : file selection button
-OpenOffice.org Draw : file sharing options for current document
-OpenOffice.org Draw : files
-OpenOffice.org Draw : files;filters and formats
-OpenOffice.org Draw : files;importing
-OpenOffice.org Draw : files;inserting
-OpenOffice.org Draw : files;inserting pictures
-OpenOffice.org Draw : files;opening
-OpenOffice.org Draw : files;opening with placeholders
-OpenOffice.org Draw : files;properties
-OpenOffice.org Draw : files;saving
-OpenOffice.org Draw : files;saving automatically
-OpenOffice.org Draw : files;saving in other formats
-OpenOffice.org Draw : files;sending as e-mail
-OpenOffice.org Draw : files;version numbers
-OpenOffice.org Draw : files and folders in OpenOffice.org
-OpenOffice.org Draw : fill characters with tabulators
-OpenOffice.org Draw : fill colors for areas
-OpenOffice.org Draw : fill format mode
-OpenOffice.org Draw : fill format mode;styles
-OpenOffice.org Draw : fill patterns for areas
-OpenOffice.org Draw : filter conditions
-OpenOffice.org Draw : filter conditions;connecting
-OpenOffice.org Draw : filter conditions;in queries (Base)
-OpenOffice.org Draw : filtering
-OpenOffice.org Draw : filtering;data in databases
-OpenOffice.org Draw : filtering;data in forms
-OpenOffice.org Draw : filters
-OpenOffice.org Draw : filters;comparison operators
-OpenOffice.org Draw : filters;for import and export
-OpenOffice.org Draw : filters;Navigator
-OpenOffice.org Draw : filters;pictures
-OpenOffice.org Draw : filters;XML filter settings
-OpenOffice.org Draw : Find tab in Help
-OpenOffice.org Draw : finding
-OpenOffice.org Draw : finding;in all sheets
-OpenOffice.org Draw : finding;records in form documents
-OpenOffice.org Draw : finding;selections
-OpenOffice.org Draw : finding;similarity search
-OpenOffice.org Draw : fitting to pages
-OpenOffice.org Draw : fitting to pages;individual slides
-OpenOffice.org Draw : fitting to pages;print settings in Math
-OpenOffice.org Draw : fitting to pages;print settings in presentations
-OpenOffice.org Draw : fixed text
-OpenOffice.org Draw : fixed text;form functions
-OpenOffice.org Draw : fixing toolbars
-OpenOffice.org Draw : flipping around a flip line
-OpenOffice.org Draw : flipping draw objects
-OpenOffice.org Draw : floating frames in HTML documents
-OpenOffice.org Draw : floating text
-OpenOffice.org Draw : floating toolbars
-OpenOffice.org Draw : flowcharts
-OpenOffice.org Draw : focus of controls
-OpenOffice.org Draw : folder creation
-OpenOffice.org Draw : font lists
-OpenOffice.org Draw : font name box
-OpenOffice.org Draw : font sizes
-OpenOffice.org Draw : font sizes;bullets
-OpenOffice.org Draw : font sizes;relative changes
-OpenOffice.org Draw : font sizes;scaling on screen
-OpenOffice.org Draw : font sizes;text
-OpenOffice.org Draw : fonts
-OpenOffice.org Draw : fonts;adding under UNIX
-OpenOffice.org Draw : fonts;changing in templates
-OpenOffice.org Draw : fonts;colors
-OpenOffice.org Draw : fonts;default settings
-OpenOffice.org Draw : fonts;effects
-OpenOffice.org Draw : fonts;for HTML and Basic
-OpenOffice.org Draw : fonts;formats
-OpenOffice.org Draw : fonts;outlines
-OpenOffice.org Draw : fonts;positions in text
-OpenOffice.org Draw : fonts;shadows
-OpenOffice.org Draw : fonts;specifying several
-OpenOffice.org Draw : fonts;strikethrough
-OpenOffice.org Draw : fonts;styles
-OpenOffice.org Draw : fonts;text objects
-OpenOffice.org Draw : Fontwork icons
-OpenOffice.org Draw : footers
-OpenOffice.org Draw : footers;backgrounds
-OpenOffice.org Draw : footers;slide masters
-OpenOffice.org Draw : footers;slides
-OpenOffice.org Draw : form controls
-OpenOffice.org Draw : form controls;assigning macros
-OpenOffice.org Draw : form controls;protecting
-OpenOffice.org Draw : form controls;toolbars
-OpenOffice.org Draw : form fields
-OpenOffice.org Draw : form filters
-OpenOffice.org Draw : Form Navigator
-OpenOffice.org Draw : format codes
-OpenOffice.org Draw : format codes;numbers
-OpenOffice.org Draw : format codes;user-defined number formats
-OpenOffice.org Draw : format filling printing in OpenOffice.org Math
-OpenOffice.org Draw : Format Paintbrush
-OpenOffice.org Draw : formats
-OpenOffice.org Draw : formats;Asian layout
-OpenOffice.org Draw : formats;Asian typography
-OpenOffice.org Draw : formats;fonts
-OpenOffice.org Draw : formats;maximizing page formats
-OpenOffice.org Draw : formats;number and currency formats
-OpenOffice.org Draw : formats;of currencies/date/time
-OpenOffice.org Draw : formats;on opening and saving
-OpenOffice.org Draw : formats;pasting in special formats
-OpenOffice.org Draw : formats;positions
-OpenOffice.org Draw : formats;tabulators
-OpenOffice.org Draw : formats;undoing when writing
-OpenOffice.org Draw : formatted fields
-OpenOffice.org Draw : formatted fields;form functions
-OpenOffice.org Draw : formatted fields;properties
-OpenOffice.org Draw : formatting
-OpenOffice.org Draw : formatting;axes in charts
-OpenOffice.org Draw : formatting;chart areas
-OpenOffice.org Draw : formatting;chart floors
-OpenOffice.org Draw : formatting;chart legends
-OpenOffice.org Draw : formatting;chart titles
-OpenOffice.org Draw : formatting;chart walls
-OpenOffice.org Draw : formatting;copying
-OpenOffice.org Draw : formatting;definition
-OpenOffice.org Draw : formatting;expanding (Calc)
-OpenOffice.org Draw : formatting;fields
-OpenOffice.org Draw : formatting;font effects
-OpenOffice.org Draw : formatting;hyperlinks
-OpenOffice.org Draw : formatting;pages
-OpenOffice.org Draw : formatting;printer metrics (Writer)
-OpenOffice.org Draw : formatting;slides
-OpenOffice.org Draw : formatting;slides headings
-OpenOffice.org Draw : formatting;undoing
-OpenOffice.org Draw : forms
-OpenOffice.org Draw : forms;browsing
-OpenOffice.org Draw : forms;Combo Box/List Box Wizard
-OpenOffice.org Draw : forms;creating
-OpenOffice.org Draw : forms;data
-OpenOffice.org Draw : forms;designing (Base)
-OpenOffice.org Draw : forms;events
-OpenOffice.org Draw : forms;filtering data
-OpenOffice.org Draw : forms;finding records
-OpenOffice.org Draw : forms;focus after opening
-OpenOffice.org Draw : forms;general information (Base)
-OpenOffice.org Draw : forms;grouping controls
-OpenOffice.org Draw : forms;HTML filters
-OpenOffice.org Draw : forms;inserting
-OpenOffice.org Draw : forms;Navigator
-OpenOffice.org Draw : forms;opening in design mode
-OpenOffice.org Draw : forms;properties
-OpenOffice.org Draw : forms;sorting data
-OpenOffice.org Draw : forms;subforms
-OpenOffice.org Draw : forms;wizards
-OpenOffice.org Draw : forms;XForms
-OpenOffice.org Draw : Formula Auditing feature in Microsoft Office
-OpenOffice.org Draw : formula texts
-OpenOffice.org Draw : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Draw : formulas
-OpenOffice.org Draw : formulas;new
-OpenOffice.org Draw : formulas;starting formula editor
-OpenOffice.org Draw : formulas in reports
-OpenOffice.org Draw : formulas in reports;editing
-OpenOffice.org Draw : forums and support
-OpenOffice.org Draw : frames
-OpenOffice.org Draw : frames;around paragraphs
-OpenOffice.org Draw : frames;around tables
-OpenOffice.org Draw : frames;AutoCorrect function
-OpenOffice.org Draw : frames;backgrounds
-OpenOffice.org Draw : frames;captions (Writer)
-OpenOffice.org Draw : frames;printing in OpenOffice.org Math
-OpenOffice.org Draw : frames;protecting
-OpenOffice.org Draw : frames;selection frames
-OpenOffice.org Draw : frames;text fitting to frames
-OpenOffice.org Draw : freeform lines
-OpenOffice.org Draw : freeform lines;draw functions
-OpenOffice.org Draw : freeform lines;drawing
-OpenOffice.org Draw : FTP
-OpenOffice.org Draw : FTP;opening documents
-OpenOffice.org Draw : FTP;saving documents
-OpenOffice.org Draw : full joins (Base)
-OpenOffice.org Draw : full screen view
-OpenOffice.org Draw : full-text search in Help
-OpenOffice.org Draw : functions in reports
-OpenOffice.org Draw : functions in reports;editing
-OpenOffice.org Draw : Gallery
-OpenOffice.org Draw : Gallery;adding pictures
-OpenOffice.org Draw : Gallery;dragging pictures to draw objects
-OpenOffice.org Draw : Gallery;hiding/showing
-OpenOffice.org Draw : Gallery;inserting pictures from
-OpenOffice.org Draw : geometric forms
-OpenOffice.org Draw : German spellcheck
-OpenOffice.org Draw : get method for form transmissions
-OpenOffice.org Draw : getting support
-OpenOffice.org Draw : GIF format
-OpenOffice.org Draw : GIF images
-OpenOffice.org Draw : GIF images;animating
-OpenOffice.org Draw : GIF images;replacing colors
-OpenOffice.org Draw : glossaries
-OpenOffice.org Draw : glossaries;common terms
-OpenOffice.org Draw : glossaries;Internet terms
-OpenOffice.org Draw : glue points
-OpenOffice.org Draw : glue points;editing
-OpenOffice.org Draw : glue points;inserting
-OpenOffice.org Draw : gradients
-OpenOffice.org Draw : gradients;applying and defining
-OpenOffice.org Draw : gradients;defining colors
-OpenOffice.org Draw : gradients;loading lists
-OpenOffice.org Draw : gradients;transparent
-OpenOffice.org Draw : gradients off for faster printing
-OpenOffice.org Draw : graphical text art
-OpenOffice.org Draw : graphics
-OpenOffice.org Draw : graphics;cache
-OpenOffice.org Draw : graphics;protecting
-OpenOffice.org Draw : graphics, see also pictures
-OpenOffice.org Draw : grayscale display
-OpenOffice.org Draw : grayscale printing
-OpenOffice.org Draw : grid controls
-OpenOffice.org Draw : grid controls;form functions
-OpenOffice.org Draw : grids
-OpenOffice.org Draw : grids;defaults (Writer/Calc)
-OpenOffice.org Draw : grids;display options (Impress/Draw)
-OpenOffice.org Draw : grids;displaying lines (Calc)
-OpenOffice.org Draw : grids;formatting axes
-OpenOffice.org Draw : grids;inserting in charts
-OpenOffice.org Draw : group box creation
-OpenOffice.org Draw : grouping
-OpenOffice.org Draw : grouping;draw objects
-OpenOffice.org Draw : groups
-OpenOffice.org Draw : groups;entering/exiting/ungrouping
-OpenOffice.org Draw : groups;naming
-OpenOffice.org Draw : groups;of controls
-OpenOffice.org Draw : guides
-OpenOffice.org Draw : guides;display options (Impress/Draw)
-OpenOffice.org Draw : guides;displaying when moving objects (Impress)
-OpenOffice.org Draw : guides;editing
-OpenOffice.org Draw : guides;inserting
-OpenOffice.org Draw : guides;show snap lines icon
-OpenOffice.org Draw : guides;showing (Calc)
-OpenOffice.org Draw : guides;showing when moving frames (Writer)
-OpenOffice.org Draw : gutter
-OpenOffice.org Draw : half-spheres
-OpenOffice.org Draw : hand icon for moving slides
-OpenOffice.org Draw : handles
-OpenOffice.org Draw : handles;displaying (Writer)
-OpenOffice.org Draw : handles;large
-OpenOffice.org Draw : handles;scaling
-OpenOffice.org Draw : handles;showing simple/large handles (Calc)
-OpenOffice.org Draw : handles;simple
-OpenOffice.org Draw : handout printing
-OpenOffice.org Draw : Hangul/Hanja
-OpenOffice.org Draw : hatching
-OpenOffice.org Draw : hatching
-OpenOffice.org Draw : hatching;loading lists
-OpenOffice.org Draw : headers
-OpenOffice.org Draw : headers;backgrounds
-OpenOffice.org Draw : headers and footers
-OpenOffice.org Draw : headers and footers;master layouts
-OpenOffice.org Draw : headers and footers;slide masters
-OpenOffice.org Draw : headers and footers;slides
-OpenOffice.org Draw : headings
-OpenOffice.org Draw : headings;entering as text box
-OpenOffice.org Draw : Hebrew
-OpenOffice.org Draw : Hebrew;entering text
-OpenOffice.org Draw : Hebrew;language settings
-OpenOffice.org Draw : Help
-OpenOffice.org Draw : Help;bookmarks
-OpenOffice.org Draw : Help;extended tips on/off
-OpenOffice.org Draw : Help;full-text search
-OpenOffice.org Draw : Help;Help tips
-OpenOffice.org Draw : Help;keywords
-OpenOffice.org Draw : Help;navigation pane showing/hiding
-OpenOffice.org Draw : Help;style sheets
-OpenOffice.org Draw : Help;topics
-OpenOffice.org Draw : Help Agent
-OpenOffice.org Draw : Help Agent;help
-OpenOffice.org Draw : Help Agent;options
-OpenOffice.org Draw : Help tips
-OpenOffice.org Draw : Help tips;hiding
-OpenOffice.org Draw : hidden controls in Form Navigator
-OpenOffice.org Draw : hidden fields display (Writer)
-OpenOffice.org Draw : hidden pages
-OpenOffice.org Draw : hidden pages;printing in presentations
-OpenOffice.org Draw : hidden pages;showing
-OpenOffice.org Draw : hidden text
-OpenOffice.org Draw : hidden text;showing (Writer)
-OpenOffice.org Draw : hiding
-OpenOffice.org Draw : hiding;changes
-OpenOffice.org Draw : hiding;chart legends
-OpenOffice.org Draw : hiding;docked windows
-OpenOffice.org Draw : hiding;layers
-OpenOffice.org Draw : hiding;levels
-OpenOffice.org Draw : hiding;navigation pane in Help window
-OpenOffice.org Draw : hiding;slides
-OpenOffice.org Draw : hiding;subpoints
-OpenOffice.org Draw : high contrast mode
-OpenOffice.org Draw : Hindi
-OpenOffice.org Draw : Hindi;entering text
-OpenOffice.org Draw : Hindi;language settings
-OpenOffice.org Draw : horizontal scrollbars (Writer)
-OpenOffice.org Draw : hot spots in flowcharts
-OpenOffice.org Draw : HowTos for charts
-OpenOffice.org Draw : Howtos for Draw
-OpenOffice.org Draw : HTML
-OpenOffice.org Draw : HTML;definition
-OpenOffice.org Draw : HTML;export character set
-OpenOffice.org Draw : HTML;exporting from presentations
-OpenOffice.org Draw : HTML;fonts for source display
-OpenOffice.org Draw : HTML;importing into presentations
-OpenOffice.org Draw : HTML;importing META tags
-OpenOffice.org Draw : HTML;inserting files
-OpenOffice.org Draw : HTML;live presentations
-OpenOffice.org Draw : HTML documents
-OpenOffice.org Draw : HTML documents;auto reloading
-OpenOffice.org Draw : HTML documents;importing/exporting
-OpenOffice.org Draw : HTML documents;META tags in
-OpenOffice.org Draw : HTML documents;new
-OpenOffice.org Draw : HTML documents;source text
-OpenOffice.org Draw : hyperlinks
-OpenOffice.org Draw : hyperlinks;assigning macros
-OpenOffice.org Draw : hyperlinks;character formats
-OpenOffice.org Draw : hyperlinks;definition
-OpenOffice.org Draw : hyperlinks;deleting
-OpenOffice.org Draw : hyperlinks;editing
-OpenOffice.org Draw : hyperlinks;inserting
-OpenOffice.org Draw : hyperlinks;relative and absolute
-OpenOffice.org Draw : hyperlinks;turning off automatic recognition
-OpenOffice.org Draw : hyperlinks, see also links
-OpenOffice.org Draw : hyphenation
-OpenOffice.org Draw : hyphenation;activating for a language
-OpenOffice.org Draw : hyphenation;minimal number of characters
-OpenOffice.org Draw : hyphens
-OpenOffice.org Draw : hyphens;displaying custom (Writer)
-OpenOffice.org Draw : hyphens;inserting custom
-OpenOffice.org Draw : icon bars, see toolbars
-OpenOffice.org Draw : icon sizes
-OpenOffice.org Draw : ignore list for spellcheck
-OpenOffice.org Draw : illumination
-OpenOffice.org Draw : illumination;3D charts
-OpenOffice.org Draw : illustrations, see pictures
-OpenOffice.org Draw : image button creation
-OpenOffice.org Draw : image control creation
-OpenOffice.org Draw : ImageMap
-OpenOffice.org Draw : ImageMap;definition
-OpenOffice.org Draw : ImageMap;editor
-OpenOffice.org Draw : images
-OpenOffice.org Draw : images;ImageMap
-OpenOffice.org Draw : images;inserting
-OpenOffice.org Draw : images;inserting and editing bitmaps
-OpenOffice.org Draw : images;placeholders in presentations
-OpenOffice.org Draw : images, see also pictures
-OpenOffice.org Draw : IME
-OpenOffice.org Draw : IME;definition
-OpenOffice.org Draw : IME;showing/hiding
-OpenOffice.org Draw : import filters
-OpenOffice.org Draw : import restrictions for Microsoft Office
-OpenOffice.org Draw : importing
-OpenOffice.org Draw : importing;bitmaps
-OpenOffice.org Draw : importing;compatibility settings for text import
-OpenOffice.org Draw : importing;databases
-OpenOffice.org Draw : importing;documents in other formats
-OpenOffice.org Draw : importing;from XML
-OpenOffice.org Draw : importing;HTML and text documents
-OpenOffice.org Draw : importing;HTML with META tags
-OpenOffice.org Draw : importing;Microsoft Office documents with VBA code
-OpenOffice.org Draw : importing;presentations with HTML
-OpenOffice.org Draw : importing;tables in text format
-OpenOffice.org Draw : importing;templates
-OpenOffice.org Draw : in front of object command
-OpenOffice.org Draw : inches
-OpenOffice.org Draw : including spreadsheets
-OpenOffice.org Draw : increasing sizes of views
-OpenOffice.org Draw : Index tab in Help
-OpenOffice.org Draw : indexes
-OpenOffice.org Draw : indexes;backgrounds
-OpenOffice.org Draw : indexes;showing/hiding Help index tab
-OpenOffice.org Draw : indexes;unprotecting
-OpenOffice.org Draw : indicator lines in text
-OpenOffice.org Draw : inner joins (Base)
-OpenOffice.org Draw : input method window
-OpenOffice.org Draw : insert mode for entering text
-OpenOffice.org Draw : inserting
-OpenOffice.org Draw : inserting;3D objects
-OpenOffice.org Draw : inserting;applets
-OpenOffice.org Draw : inserting;arrows
-OpenOffice.org Draw : inserting;callouts in presentations
-OpenOffice.org Draw : inserting;cell ranges from spreadsheets
-OpenOffice.org Draw : inserting;charts
-OpenOffice.org Draw : inserting;clipboard options
-OpenOffice.org Draw : inserting;data from text documents
-OpenOffice.org Draw : inserting;datasource records in spreadsheets
-OpenOffice.org Draw : inserting;drawings
-OpenOffice.org Draw : inserting;ellipses
-OpenOffice.org Draw : inserting;files
-OpenOffice.org Draw : inserting;floating frames
-OpenOffice.org Draw : inserting;form fields
-OpenOffice.org Draw : inserting;glue points
-OpenOffice.org Draw : inserting;hyperlinks
-OpenOffice.org Draw : inserting;layers
-OpenOffice.org Draw : inserting;line breaks in cells
-OpenOffice.org Draw : inserting;lines
-OpenOffice.org Draw : inserting;movies/sounds
-OpenOffice.org Draw : inserting;new text tables defaults
-OpenOffice.org Draw : inserting;notes
-OpenOffice.org Draw : inserting;objects from files
-OpenOffice.org Draw : inserting;objects from Gallery
-OpenOffice.org Draw : inserting;OLE objects
-OpenOffice.org Draw : inserting;paragraph bullets
-OpenOffice.org Draw : inserting;pictures
-OpenOffice.org Draw : inserting;plug-ins
-OpenOffice.org Draw : inserting;polygons
-OpenOffice.org Draw : inserting;rectangles
-OpenOffice.org Draw : inserting;slides
-OpenOffice.org Draw : inserting;slides as links
-OpenOffice.org Draw : inserting;slides from files
-OpenOffice.org Draw : inserting;special characters
-OpenOffice.org Draw : inserting;tab stops
-OpenOffice.org Draw : inserting;text in presentations
-OpenOffice.org Draw : installing
-OpenOffice.org Draw : installing;ActiveX control
-OpenOffice.org Draw : installing;mobile device filters
-OpenOffice.org Draw : installing;UNO components
-OpenOffice.org Draw : instructions
-OpenOffice.org Draw : instructions;general
-OpenOffice.org Draw : instructions;OpenOffice.org Draw
-OpenOffice.org Draw : instructions;OpenOffice.org Impress
-OpenOffice.org Draw : interactions
-OpenOffice.org Draw : interactions;hot spots
-OpenOffice.org Draw : interactions;objects in interactive presentations
-OpenOffice.org Draw : interactions;preview
-OpenOffice.org Draw : Internet
-OpenOffice.org Draw : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Draw : Internet;presentations
-OpenOffice.org Draw : Internet;starting searches
-OpenOffice.org Draw : Internet;turning off recognition of addresses
-OpenOffice.org Draw : Internet glossary
-OpenOffice.org Draw : intersecting draw objects
-OpenOffice.org Draw : invert filter
-OpenOffice.org Draw : invisible areas
-OpenOffice.org Draw : italic text
-OpenOffice.org Draw : iterative references in spreadsheets
-OpenOffice.org Draw : Java
-OpenOffice.org Draw : Java;definition
-OpenOffice.org Draw : Java;scripting
-OpenOffice.org Draw : Java;setting options
-OpenOffice.org Draw : JDBC
-OpenOffice.org Draw : JDBC;databases (Base)
-OpenOffice.org Draw : JDBC;definition
-OpenOffice.org Draw : joining
-OpenOffice.org Draw : joining;3D objects
-OpenOffice.org Draw : joining;paragraphs
-OpenOffice.org Draw : joining;tables (Base)
-OpenOffice.org Draw : joins in databases (Base)
-OpenOffice.org Draw : justifying text
-OpenOffice.org Draw : kerning
-OpenOffice.org Draw : kerning;Asian texts
-OpenOffice.org Draw : kerning;definition
-OpenOffice.org Draw : kerning;in characters
-OpenOffice.org Draw : key fields for relations (Base)
-OpenOffice.org Draw : keyboard
-OpenOffice.org Draw : keyboard;assigning/editing shortcut keys
-OpenOffice.org Draw : keyboard;general commands
-OpenOffice.org Draw : keyboard;removing numbering
-OpenOffice.org Draw : keyboard;zooming
-OpenOffice.org Draw : keys
-OpenOffice.org Draw : keys;adding push buttons
-OpenOffice.org Draw : keys;primary keys (Base)
-OpenOffice.org Draw : kiosk export
-OpenOffice.org Draw : labels
-OpenOffice.org Draw : labels;creating and synchronizing
-OpenOffice.org Draw : labels;for charts
-OpenOffice.org Draw : labels;for draw objects
-OpenOffice.org Draw : labels;form functions
-OpenOffice.org Draw : labels;from databases
-OpenOffice.org Draw : labels, see also names/callouts
-OpenOffice.org Draw : languages
-OpenOffice.org Draw : languages;activating modules
-OpenOffice.org Draw : languages;Asian support
-OpenOffice.org Draw : languages;complex text layout
-OpenOffice.org Draw : languages;locale settings
-OpenOffice.org Draw : languages;selecting
-OpenOffice.org Draw : languages;setting options
-OpenOffice.org Draw : languages;spellcheck
-OpenOffice.org Draw : languages;spellchecking and formatting
-OpenOffice.org Draw : large handles (Writer)
-OpenOffice.org Draw : large icons
-OpenOffice.org Draw : layer arrangement
-OpenOffice.org Draw : layers
-OpenOffice.org Draw : layers;definition
-OpenOffice.org Draw : layers;deleting
-OpenOffice.org Draw : layers;inserting and editing
-OpenOffice.org Draw : layers;moving objects
-OpenOffice.org Draw : layers;renaming
-OpenOffice.org Draw : layers;working with
-OpenOffice.org Draw : layout
-OpenOffice.org Draw : layout;importing Word documents
-OpenOffice.org Draw : layout;pages
-OpenOffice.org Draw : layout;printing handouts
-OpenOffice.org Draw : LDAP server
-OpenOffice.org Draw : LDAP server;address books (Base)
-OpenOffice.org Draw : LDAP server;sign on options
-OpenOffice.org Draw : leading between paragraphs
-OpenOffice.org Draw : left alignment of paragraphs
-OpenOffice.org Draw : left joins (Base)
-OpenOffice.org Draw : legends
-OpenOffice.org Draw : legends;charts
-OpenOffice.org Draw : legends;draw objects
-OpenOffice.org Draw : legends;drawings
-OpenOffice.org Draw : legends;rounding corners
-OpenOffice.org Draw : Letter Wizard
-OpenOffice.org Draw : levels
-OpenOffice.org Draw : levels;depth stagger
-OpenOffice.org Draw : levels;hiding
-OpenOffice.org Draw : levels;showing
-OpenOffice.org Draw : limits of tables (Writer)
-OpenOffice.org Draw : line breaks
-OpenOffice.org Draw : line breaks;in cells
-OpenOffice.org Draw : line charts
-OpenOffice.org Draw : line spacing
-OpenOffice.org Draw : line spacing;context menu in paragraphs
-OpenOffice.org Draw : line spacing;paragraph
-OpenOffice.org Draw : line styles
-OpenOffice.org Draw : line styles;applying
-OpenOffice.org Draw : line styles;defining
-OpenOffice.org Draw : line styles;loading
-OpenOffice.org Draw : lines
-OpenOffice.org Draw : lines;about line ends
-OpenOffice.org Draw : lines;connecting objects
-OpenOffice.org Draw : lines;contours (Draw/Impress)
-OpenOffice.org Draw : lines;defining ends
-OpenOffice.org Draw : lines;draw functions
-OpenOffice.org Draw : lines;drawing
-OpenOffice.org Draw : lines;drawing in text
-OpenOffice.org Draw : lines;editing points
-OpenOffice.org Draw : lines;inserting
-OpenOffice.org Draw : lines;removing automatic lines
-OpenOffice.org Draw : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Draw : lines of text
-OpenOffice.org Draw : lines of text;alignment
-OpenOffice.org Draw : links
-OpenOffice.org Draw : links;between cells and controls
-OpenOffice.org Draw : links;by drag and drop
-OpenOffice.org Draw : links;character formats
-OpenOffice.org Draw : links;definition
-OpenOffice.org Draw : links;editing hyperlinks
-OpenOffice.org Draw : links;inserting
-OpenOffice.org Draw : links;modifying
-OpenOffice.org Draw : links;opening files with
-OpenOffice.org Draw : links;relational databases (Base)
-OpenOffice.org Draw : links;turning off automatic recognition
-OpenOffice.org Draw : links;updating options (Writer)
-OpenOffice.org Draw : links;updating specific links
-OpenOffice.org Draw : list box creation
-OpenOffice.org Draw : lists
-OpenOffice.org Draw : lists;animations
-OpenOffice.org Draw : lists;data assigned to controls
-OpenOffice.org Draw : lists;registered databases (Base)
-OpenOffice.org Draw : lists;regular expressions
-OpenOffice.org Draw : live presentations on the Internet
-OpenOffice.org Draw : loading
-OpenOffice.org Draw : loading;arrow and line styles
-OpenOffice.org Draw : loading;colors/gradients/hatchings
-OpenOffice.org Draw : loading;documents
-OpenOffice.org Draw : loading;documents from other formats
-OpenOffice.org Draw : loading;HTML documents, automatically
-OpenOffice.org Draw : loading;Microsoft Office documents with VBA code
-OpenOffice.org Draw : loading;reloading
-OpenOffice.org Draw : loading;XML files
-OpenOffice.org Draw : locale settings
-OpenOffice.org Draw : locking layers
-OpenOffice.org Draw : logarithmic scaling along axes
-OpenOffice.org Draw : lowercase letters
-OpenOffice.org Draw : lowercase letters;font effects
-OpenOffice.org Draw : Macromedia Flash export
-OpenOffice.org Draw : macros
-OpenOffice.org Draw : macros;assigning to events in forms
-OpenOffice.org Draw : macros;in MS Office documents
-OpenOffice.org Draw : macros;interrupting
-OpenOffice.org Draw : macros;organizing
-OpenOffice.org Draw : macros;recording
-OpenOffice.org Draw : macros;running in presentations
-OpenOffice.org Draw : macros;security
-OpenOffice.org Draw : macros;security warning dialog
-OpenOffice.org Draw : macros;selecting security warnings
-OpenOffice.org Draw : magnetic lines in presentations
-OpenOffice.org Draw : magnifiers
-OpenOffice.org Draw : Mail Merge feature in Microsoft Office
-OpenOffice.org Draw : margins
-OpenOffice.org Draw : margins;pages
-OpenOffice.org Draw : margins;setting with the mouse
-OpenOffice.org Draw : margins;shadows
-OpenOffice.org Draw : marking changes
-OpenOffice.org Draw : Markup feature in Microsoft Office
-OpenOffice.org Draw : master layouts with headers and footers
-OpenOffice.org Draw : master pages, see slide masters
-OpenOffice.org Draw : master views
-OpenOffice.org Draw : Math formula editor
-OpenOffice.org Draw : measurement units
-OpenOffice.org Draw : measurement units;changing on rulers
-OpenOffice.org Draw : measurement units;converting
-OpenOffice.org Draw : measurement units;selecting
-OpenOffice.org Draw : Media Player window
-OpenOffice.org Draw : menus
-OpenOffice.org Draw : menus;activating context menus
-OpenOffice.org Draw : menus;customizing
-OpenOffice.org Draw : menus;inactive menu items
-OpenOffice.org Draw : merging
-OpenOffice.org Draw : merging;documents
-OpenOffice.org Draw : merging;draw objects
-OpenOffice.org Draw : META tags
-OpenOffice.org Draw : metafiles
-OpenOffice.org Draw : metafiles;converting to
-OpenOffice.org Draw : metafiles;replacing colors
-OpenOffice.org Draw : metrics
-OpenOffice.org Draw : metrics;converting
-OpenOffice.org Draw : metrics;document formatting (Writer)
-OpenOffice.org Draw : metrics;in sheets
-OpenOffice.org Draw : Microsoft Office
-OpenOffice.org Draw : Microsoft Office;Access databases (base)
-OpenOffice.org Draw : Microsoft Office;as standard file format
-OpenOffice.org Draw : Microsoft Office;document import restrictions
-OpenOffice.org Draw : Microsoft Office;feature comparisons
-OpenOffice.org Draw : Microsoft Office;importing password protected files
-OpenOffice.org Draw : Microsoft Office;importing Word documents
-OpenOffice.org Draw : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Draw : Microsoft Office;new users information
-OpenOffice.org Draw : Microsoft Office;opening Microsoft documents
-OpenOffice.org Draw : Microsoft Office;reassigning document types
-OpenOffice.org Draw : mirroring objects
-OpenOffice.org Draw : mobile device filters
-OpenOffice.org Draw : models in XForms
-OpenOffice.org Draw : modifying, see changing
-OpenOffice.org Draw : more controls
-OpenOffice.org Draw : mosaic filter
-OpenOffice.org Draw : motion paths
-OpenOffice.org Draw : mouse
-OpenOffice.org Draw : mouse;pointers when using drag and drop
-OpenOffice.org Draw : mouse;positioning
-OpenOffice.org Draw : moving
-OpenOffice.org Draw : moving;between layers
-OpenOffice.org Draw : moving;objects in slides
-OpenOffice.org Draw : moving;tab stops on ruler
-OpenOffice.org Draw : moving;toolbars
-OpenOffice.org Draw : moving;using guide lines in presentations
-OpenOffice.org Draw : MS ADO interface (Base)
-OpenOffice.org Draw : multi-line titles in forms
-OpenOffice.org Draw : multiple documents
-OpenOffice.org Draw : multiple documents;opening
-OpenOffice.org Draw : multiple monitors
-OpenOffice.org Draw : multiplying draw objects
-OpenOffice.org Draw : My Documents folder
-OpenOffice.org Draw : My Documents folder;changing work directory
-OpenOffice.org Draw : My Documents folder;opening
-OpenOffice.org Draw : MySQL databases (Base)
-OpenOffice.org Draw : names
-OpenOffice.org Draw : names;multi-line titles
-OpenOffice.org Draw : names;objects
-OpenOffice.org Draw : names, see also labels/callouts
-OpenOffice.org Draw : namespace organization in XForms
-OpenOffice.org Draw : native SQL (Base)
-OpenOffice.org Draw : navigating
-OpenOffice.org Draw : navigating;in documents
-OpenOffice.org Draw : Navigation bar
-OpenOffice.org Draw : Navigation bar;controls
-OpenOffice.org Draw : Navigation bar;forms
-OpenOffice.org Draw : Navigator
-OpenOffice.org Draw : Navigator;contents as lists
-OpenOffice.org Draw : Navigator;docking
-OpenOffice.org Draw : Navigator;presentations
-OpenOffice.org Draw : Navigator;working with
-OpenOffice.org Draw : net charts
-OpenOffice.org Draw : network identity options
-OpenOffice.org Draw : new databases
-OpenOffice.org Draw : new documents
-OpenOffice.org Draw : new German spellcheck
-OpenOffice.org Draw : new lines in cells
-OpenOffice.org Draw : new windows
-OpenOffice.org Draw : non-breaking dashes
-OpenOffice.org Draw : non-breaking spaces (Writer)
-OpenOffice.org Draw : non-printing characters (Writer)
-OpenOffice.org Draw : normal view
-OpenOffice.org Draw : normal view;backgrounds
-OpenOffice.org Draw : normal view;presentations
-OpenOffice.org Draw : notes
-OpenOffice.org Draw : notes;adding to slides
-OpenOffice.org Draw : notes;default formatting
-OpenOffice.org Draw : notes;displaying (Calc)
-OpenOffice.org Draw : notes;inserting and editing
-OpenOffice.org Draw : notes;printing in presentations
-OpenOffice.org Draw : notes;printing in text
-OpenOffice.org Draw : number formats
-OpenOffice.org Draw : number formats;codes
-OpenOffice.org Draw : number formats;formats
-OpenOffice.org Draw : number formats;recognition in text tables
-OpenOffice.org Draw : number of pages
-OpenOffice.org Draw : number of sheets
-OpenOffice.org Draw : number of tables
-OpenOffice.org Draw : numbering
-OpenOffice.org Draw : numbering;options
-OpenOffice.org Draw : numbering;paragraphs
-OpenOffice.org Draw : numbering;turning off
-OpenOffice.org Draw : numbering;using automatically
-OpenOffice.org Draw : numbers
-OpenOffice.org Draw : numbers;date, time and currency formats
-OpenOffice.org Draw : numbers;decimal places (Calc)
-OpenOffice.org Draw : numbers;formatting options for selected cells
-OpenOffice.org Draw : numerical fields in forms
-OpenOffice.org Draw : object bars
-OpenOffice.org Draw : object bars;editing glue points
-OpenOffice.org Draw : objects
-OpenOffice.org Draw : objects;aligning
-OpenOffice.org Draw : objects;always moveable (Impress/Draw)
-OpenOffice.org Draw : objects;arranging within stacks
-OpenOffice.org Draw : objects;behind object command
-OpenOffice.org Draw : objects;breaking connections
-OpenOffice.org Draw : objects;contours in presentations
-OpenOffice.org Draw : objects;copying when moving in presentations
-OpenOffice.org Draw : objects;definition
-OpenOffice.org Draw : objects;displaying in spreadsheets
-OpenOffice.org Draw : objects;displaying in text documents
-OpenOffice.org Draw : objects;editing
-OpenOffice.org Draw : objects;effects
-OpenOffice.org Draw : objects;in front of object command
-OpenOffice.org Draw : objects;inserting from files
-OpenOffice.org Draw : objects;inserting from Gallery
-OpenOffice.org Draw : objects;inserting OLE objects
-OpenOffice.org Draw : objects;moving along paths
-OpenOffice.org Draw : objects;moving and resizing with mouse
-OpenOffice.org Draw : objects;moving in layers
-OpenOffice.org Draw : objects;moving in slides
-OpenOffice.org Draw : objects;naming
-OpenOffice.org Draw : objects;opening
-OpenOffice.org Draw : objects;properties of charts
-OpenOffice.org Draw : objects;quickly moving to
-OpenOffice.org Draw : objects;reversing
-OpenOffice.org Draw : objects;selecting
-OpenOffice.org Draw : objects;titles and descriptions
-OpenOffice.org Draw : objects;with attributes
-OpenOffice.org Draw : ODBC
-OpenOffice.org Draw : ODBC;database (Base)
-OpenOffice.org Draw : ODBC;definition
-OpenOffice.org Draw : ODF file formats
-OpenOffice.org Draw : Office
-OpenOffice.org Draw : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Draw : old German spellcheck
-OpenOffice.org Draw : OLE
-OpenOffice.org Draw : OLE;definition
-OpenOffice.org Draw : OLE objects
-OpenOffice.org Draw : OLE objects;arranging within stacks
-OpenOffice.org Draw : OLE objects;captions (Writer)
-OpenOffice.org Draw : OLE objects;inserting
-OpenOffice.org Draw : OLE objects;number of
-OpenOffice.org Draw : OLE objects;protecting
-OpenOffice.org Draw : one and a half line spacing in text
-OpenOffice.org Draw : online registration
-OpenOffice.org Draw : online update options
-OpenOffice.org Draw : online updates
-OpenOffice.org Draw : online updates;checking automatically
-OpenOffice.org Draw : online updates;checking manually
-OpenOffice.org Draw : Open/Save dialogs
-OpenOffice.org Draw : OpenDocument file formats
-OpenOffice.org Draw : OpenGL
-OpenOffice.org Draw : OpenGL;definition
-OpenOffice.org Draw : OpenGL;optimized output
-OpenOffice.org Draw : opening
-OpenOffice.org Draw : opening;context menus
-OpenOffice.org Draw : opening;database files
-OpenOffice.org Draw : opening;dialog settings
-OpenOffice.org Draw : opening;documents
-OpenOffice.org Draw : opening;documents from other formats
-OpenOffice.org Draw : opening;files with links
-OpenOffice.org Draw : opening;files, with placeholders
-OpenOffice.org Draw : opening;forms
-OpenOffice.org Draw : opening;Microsoft Office files
-OpenOffice.org Draw : opening;mobile device documents
-OpenOffice.org Draw : opening;objects
-OpenOffice.org Draw : opening;reports
-OpenOffice.org Draw : opening;several files
-OpenOffice.org Draw : opening;XForms
-OpenOffice.org Draw : OpenOffice.org Base data sources
-OpenOffice.org Draw : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Draw : OpenOffice.org documents
-OpenOffice.org Draw : OpenOffice.org documents;mobile device filters
-OpenOffice.org Draw : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Draw : OpenOffice.org Impress instructions
-OpenOffice.org Draw : OpenOffice.org Math start
-OpenOffice.org Draw : operators
-OpenOffice.org Draw : operators;default filters
-OpenOffice.org Draw : optional hyphens (Writer)
-OpenOffice.org Draw : options
-OpenOffice.org Draw : options;accessibility
-OpenOffice.org Draw : options;appearance
-OpenOffice.org Draw : options;compatibility (Writer)
-OpenOffice.org Draw : options;network identity
-OpenOffice.org Draw : options;online update
-OpenOffice.org Draw : options;tools
-OpenOffice.org Draw : Oracle databases (base)
-OpenOffice.org Draw : order of chart data
-OpenOffice.org Draw : ordering
-OpenOffice.org Draw : ordering;objects
-OpenOffice.org Draw : ordering;slides
-OpenOffice.org Draw : organization charts
-OpenOffice.org Draw : organizing
-OpenOffice.org Draw : organizing;macros and scripts
-OpenOffice.org Draw : organizing;namespaces in XForms
-OpenOffice.org Draw : organizing;styles
-OpenOffice.org Draw : organizing;templates
-OpenOffice.org Draw : origin of rulers
-OpenOffice.org Draw : original size
-OpenOffice.org Draw : original size;printing in OpenOffice.org Math
-OpenOffice.org Draw : original size;restoring after cropping
-OpenOffice.org Draw : outline view
-OpenOffice.org Draw : outlines
-OpenOffice.org Draw : outlines;font effects
-OpenOffice.org Draw : outlines;outline symbols
-OpenOffice.org Draw : outlines;printing
-OpenOffice.org Draw : outlines;sending to presentations
-OpenOffice.org Draw : overwrite mode
-OpenOffice.org Draw : packages, see extensions
-OpenOffice.org Draw : page breaks
-OpenOffice.org Draw : page breaks;displaying (Calc)
-OpenOffice.org Draw : page formats
-OpenOffice.org Draw : page formats;maximizing
-OpenOffice.org Draw : page formats;restriction
-OpenOffice.org Draw : page number field
-OpenOffice.org Draw : page numbers on all slides
-OpenOffice.org Draw : page styles
-OpenOffice.org Draw : page styles;editing/applying with statusbar
-OpenOffice.org Draw : pages
-OpenOffice.org Draw : pages;backgrounds in spreadsheets
-OpenOffice.org Draw : pages;copying
-OpenOffice.org Draw : pages;fitting to printed pages
-OpenOffice.org Draw : pages;formatting and numbering
-OpenOffice.org Draw : pages;printing page names in presentations
-OpenOffice.org Draw : pages;scaling
-OpenOffice.org Draw : pages;selecting one to print
-OpenOffice.org Draw : paint box
-OpenOffice.org Draw : paint can symbol
-OpenOffice.org Draw : pair kerning
-OpenOffice.org Draw : Palm file filters
-OpenOffice.org Draw : paper formats
-OpenOffice.org Draw : paper size warning
-OpenOffice.org Draw : paper trays
-OpenOffice.org Draw : paragraph marks
-OpenOffice.org Draw : paragraph marks;displaying (Writer)
-OpenOffice.org Draw : paragraph styles
-OpenOffice.org Draw : paragraph styles;languages
-OpenOffice.org Draw : paragraph styles;modifying basic fonts
-OpenOffice.org Draw : paragraphs
-OpenOffice.org Draw : paragraphs;alignment
-OpenOffice.org Draw : paragraphs;Asian typography
-OpenOffice.org Draw : paragraphs;backgrounds
-OpenOffice.org Draw : paragraphs;defining borders
-OpenOffice.org Draw : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Draw : paragraphs;increasing indents of
-OpenOffice.org Draw : paragraphs;indents, margins and columns
-OpenOffice.org Draw : paragraphs;inserting bullets
-OpenOffice.org Draw : paragraphs;joining
-OpenOffice.org Draw : paragraphs;numbering automatically
-OpenOffice.org Draw : paragraphs;removing blank ones
-OpenOffice.org Draw : paragraphs;spacing
-OpenOffice.org Draw : paragraphs;tab stops
-OpenOffice.org Draw : parameters
-OpenOffice.org Draw : parameters;command line
-OpenOffice.org Draw : parameters;queries (Base)
-OpenOffice.org Draw : passwords for protecting contents
-OpenOffice.org Draw : pasting
-OpenOffice.org Draw : pasting;cell ranges
-OpenOffice.org Draw : pasting;cell ranges from spreadsheets
-OpenOffice.org Draw : pasting;data from text documents
-OpenOffice.org Draw : pasting;draw objects
-OpenOffice.org Draw : pasting;draw objects from other documents
-OpenOffice.org Draw : pasting;formatted/unformatted text
-OpenOffice.org Draw : pasting;from data source view
-OpenOffice.org Draw : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Draw : pasting;pictures from other documents
-OpenOffice.org Draw : pasting;sheet areas in text documents
-OpenOffice.org Draw : pasting;slides from other presentations
-OpenOffice.org Draw : pasting;text from other documents
-OpenOffice.org Draw : pasting;to Gallery
-OpenOffice.org Draw : paths
-OpenOffice.org Draw : paths;changing work directory
-OpenOffice.org Draw : paths;defaults
-OpenOffice.org Draw : paths;moving objects along
-OpenOffice.org Draw : pattern editor
-OpenOffice.org Draw : pattern fields
-OpenOffice.org Draw : pattern fields;form functions
-OpenOffice.org Draw : patterns for objects
-OpenOffice.org Draw : PDF
-OpenOffice.org Draw : PDF;export
-OpenOffice.org Draw : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Draw : personal data input
-OpenOffice.org Draw : phonetic guide
-OpenOffice.org Draw : picklist creation
-OpenOffice.org Draw : pictures
-OpenOffice.org Draw : pictures;adding to Gallery
-OpenOffice.org Draw : pictures;arranging within stacks
-OpenOffice.org Draw : pictures;assigning macros
-OpenOffice.org Draw : pictures;backgrounds
-OpenOffice.org Draw : pictures;captions (Writer)
-OpenOffice.org Draw : pictures;changing paths
-OpenOffice.org Draw : pictures;cropping and zooming
-OpenOffice.org Draw : pictures;displaying in Calc
-OpenOffice.org Draw : pictures;displaying in Writer (Writer)
-OpenOffice.org Draw : pictures;drag and drop between documents
-OpenOffice.org Draw : pictures;drawing
-OpenOffice.org Draw : pictures;editing
-OpenOffice.org Draw : pictures;filters
-OpenOffice.org Draw : pictures;ImageMap
-OpenOffice.org Draw : pictures;inserting
-OpenOffice.org Draw : pictures;inserting automatically
-OpenOffice.org Draw : pictures;inserting from Gallery
-OpenOffice.org Draw : pictures;number of
-OpenOffice.org Draw : pictures;printing
-OpenOffice.org Draw : pictures;scaling/resizing
-OpenOffice.org Draw : pie charts
-OpenOffice.org Draw : pivot points of draw objects
-OpenOffice.org Draw : Pivot tables feature in Microsoft Office
-OpenOffice.org Draw : pixel editor
-OpenOffice.org Draw : pixel graphics
-OpenOffice.org Draw : pixel graphics;inserting and editing
-OpenOffice.org Draw : pixel patterns
-OpenOffice.org Draw : placeholders
-OpenOffice.org Draw : placeholders;in SQL queries
-OpenOffice.org Draw : placeholders;on opening files
-OpenOffice.org Draw : placing toolbars
-OpenOffice.org Draw : playing movies and sound files
-OpenOffice.org Draw : plotting data as charts
-OpenOffice.org Draw : plug-ins
-OpenOffice.org Draw : plug-ins;activating and deactivating
-OpenOffice.org Draw : plug-ins;definition
-OpenOffice.org Draw : plug-ins;inserting
-OpenOffice.org Draw : pocket device appliances
-OpenOffice.org Draw : Pocket PC file filters
-OpenOffice.org Draw : points
-OpenOffice.org Draw : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Draw : polygon drawing
-OpenOffice.org Draw : polygons
-OpenOffice.org Draw : polygons;inserting
-OpenOffice.org Draw : polygons;intersecting/subtracting/merging
-OpenOffice.org Draw : pop-art filter
-OpenOffice.org Draw : portable document format
-OpenOffice.org Draw : positioning
-OpenOffice.org Draw : positioning;draw objects and controls
-OpenOffice.org Draw : positioning;fonts
-OpenOffice.org Draw : positioning;objects
-OpenOffice.org Draw : positioning;toolbars
-OpenOffice.org Draw : post method for form transmissions
-OpenOffice.org Draw : posterizing filter
-OpenOffice.org Draw : PostScript
-OpenOffice.org Draw : PostScript;creating files
-OpenOffice.org Draw : PostScript;PDF converter, UNIX
-OpenOffice.org Draw : PowerPoint export
-OpenOffice.org Draw : precision as shown (Calc)
-OpenOffice.org Draw : predefining fonts
-OpenOffice.org Draw : presentations
-OpenOffice.org Draw : presentations;arranging slides
-OpenOffice.org Draw : presentations;creating/opening
-OpenOffice.org Draw : presentations;exiting by interaction
-OpenOffice.org Draw : presentations;exporting to HTML
-OpenOffice.org Draw : presentations;importing HTML
-OpenOffice.org Draw : presentations;inserting spreadsheet cells
-OpenOffice.org Draw : presentations;inserting spreadsheets
-OpenOffice.org Draw : presentations;live on the Internet
-OpenOffice.org Draw : presentations;navigating
-OpenOffice.org Draw : presentations;numbering slides in
-OpenOffice.org Draw : presentations;ordering of effects
-OpenOffice.org Draw : presentations;print menu
-OpenOffice.org Draw : presentations;printing
-OpenOffice.org Draw : presentations;rehearse timings
-OpenOffice.org Draw : presentations;saving
-OpenOffice.org Draw : presentations;saving automatically
-OpenOffice.org Draw : presentations;saving in other formats
-OpenOffice.org Draw : presentations;sending as e-mail
-OpenOffice.org Draw : presentations;settings for
-OpenOffice.org Draw : presentations;shortcut keys
-OpenOffice.org Draw : presentations;starting
-OpenOffice.org Draw : presentations;starting with wizard
-OpenOffice.org Draw : presentations;window / full screen
-OpenOffice.org Draw : presentations;wizards
-OpenOffice.org Draw : press buttons, see push buttons
-OpenOffice.org Draw : previews
-OpenOffice.org Draw : previews;fonts lists
-OpenOffice.org Draw : primary keys
-OpenOffice.org Draw : primary keys;defining
-OpenOffice.org Draw : primary keys;inserting (Base)
-OpenOffice.org Draw : print area selection
-OpenOffice.org Draw : printer metrics for document formatting (Writer)
-OpenOffice.org Draw : printers
-OpenOffice.org Draw : printers;adding, UNIX
-OpenOffice.org Draw : printers;choosing
-OpenOffice.org Draw : printers;default printer
-OpenOffice.org Draw : printers;faxes under UNIX
-OpenOffice.org Draw : printers;maximum page formats
-OpenOffice.org Draw : printers;paper trays
-OpenOffice.org Draw : printers;properties
-OpenOffice.org Draw : printing
-OpenOffice.org Draw : printing;black and white
-OpenOffice.org Draw : printing;brochures
-OpenOffice.org Draw : printing;colors in grayscale
-OpenOffice.org Draw : printing;copies
-OpenOffice.org Draw : printing;creating individual jobs
-OpenOffice.org Draw : printing;dates in presentations
-OpenOffice.org Draw : printing;directly
-OpenOffice.org Draw : printing;documents
-OpenOffice.org Draw : printing;drawings defaults
-OpenOffice.org Draw : printing;elements in text documents
-OpenOffice.org Draw : printing;faster
-OpenOffice.org Draw : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Draw : printing;fitting to pages in presentations
-OpenOffice.org Draw : printing;fitting to paper
-OpenOffice.org Draw : printing;formulas in OpenOffice.org Math
-OpenOffice.org Draw : printing;hidden pages of presentations
-OpenOffice.org Draw : printing;in original size in OpenOffice.org Math
-OpenOffice.org Draw : printing;left/right pages
-OpenOffice.org Draw : printing;presentations
-OpenOffice.org Draw : printing;queries (Base)
-OpenOffice.org Draw : printing;scaling in OpenOffice.org Math
-OpenOffice.org Draw : printing;selections
-OpenOffice.org Draw : printing;text always in black
-OpenOffice.org Draw : printing;text in reverse order
-OpenOffice.org Draw : printing;tiling pages in presentations
-OpenOffice.org Draw : printing;transparencies
-OpenOffice.org Draw : printing;warnings
-OpenOffice.org Draw : printing;without scaling in presentations
-OpenOffice.org Draw : printing speed
-OpenOffice.org Draw : programming
-OpenOffice.org Draw : programming;OpenOffice.org
-OpenOffice.org Draw : programming;scripting
-OpenOffice.org Draw : programs run by mouse click in presentations
-OpenOffice.org Draw : properties
-OpenOffice.org Draw : properties;charts
-OpenOffice.org Draw : properties;fields in databases
-OpenOffice.org Draw : properties;files
-OpenOffice.org Draw : properties;form controls
-OpenOffice.org Draw : properties;forms
-OpenOffice.org Draw : properties;printers
-OpenOffice.org Draw : properties;smooth lines in line charts/XY charts
-OpenOffice.org Draw : protected contents
-OpenOffice.org Draw : protected dashes
-OpenOffice.org Draw : protected database tables
-OpenOffice.org Draw : protected documents
-OpenOffice.org Draw : protected spaces
-OpenOffice.org Draw : protected spaces;inserting
-OpenOffice.org Draw : protected spaces;showing (Writer)
-OpenOffice.org Draw : protecting
-OpenOffice.org Draw : protecting;contents
-OpenOffice.org Draw : protecting;recorded changes
-OpenOffice.org Draw : proxy settings
-OpenOffice.org Draw : push buttons
-OpenOffice.org Draw : push buttons;adding to documents
-OpenOffice.org Draw : push buttons;creating
-OpenOffice.org Draw : pyramids
-OpenOffice.org Draw : queries
-OpenOffice.org Draw : queries;copying (Base)
-OpenOffice.org Draw : queries;creating in design view (Base)
-OpenOffice.org Draw : queries;creating in SQL view
-OpenOffice.org Draw : queries;defining (Base)
-OpenOffice.org Draw : queries;deleting table links (Base)
-OpenOffice.org Draw : queries;editing in data source view
-OpenOffice.org Draw : queries;formulating filter conditions (Base)
-OpenOffice.org Draw : queries;joining tables (Base)
-OpenOffice.org Draw : queries;missing elements (Base)
-OpenOffice.org Draw : queries;overview (Base)
-OpenOffice.org Draw : queries;parameter queries (Base)
-OpenOffice.org Draw : queries;printing (Base)
-OpenOffice.org Draw : Query Wizard (Base)
-OpenOffice.org Draw : quickstarter
-OpenOffice.org Draw : quotation marks
-OpenOffice.org Draw : quotation marks;replacing
-OpenOffice.org Draw : quotes
-OpenOffice.org Draw : quotes;custom
-OpenOffice.org Draw : radar charts, see net charts
-OpenOffice.org Draw : radio button creation
-OpenOffice.org Draw : read-only documents
-OpenOffice.org Draw : read-only documents;cursor
-OpenOffice.org Draw : read-only documents;database tables on/off
-OpenOffice.org Draw : read-only documents;editing
-OpenOffice.org Draw : read-only documents;opening documents as
-OpenOffice.org Draw : read-only items in Data Navigator
-OpenOffice.org Draw : recognizing URLs automatically
-OpenOffice.org Draw : recording
-OpenOffice.org Draw : recording;changes
-OpenOffice.org Draw : recording;display times for slides
-OpenOffice.org Draw : recording;macros
-OpenOffice.org Draw : records
-OpenOffice.org Draw : records;inserting notes
-OpenOffice.org Draw : records;protecting
-OpenOffice.org Draw : records;saving
-OpenOffice.org Draw : records;searching in databases
-OpenOffice.org Draw : rectangles
-OpenOffice.org Draw : rectangles with round corners
-OpenOffice.org Draw : recursions in spreadsheets
-OpenOffice.org Draw : redo command
-OpenOffice.org Draw : reduced printing
-OpenOffice.org Draw : reference lines
-OpenOffice.org Draw : references
-OpenOffice.org Draw : references;displaying in color (Calc)
-OpenOffice.org Draw : references;expanding (Calc)
-OpenOffice.org Draw : references;iterative (Calc)
-OpenOffice.org Draw : Refresh Data feature in Microsoft Office
-OpenOffice.org Draw : register-true
-OpenOffice.org Draw : register-true;definition
-OpenOffice.org Draw : registering
-OpenOffice.org Draw : registering;address books
-OpenOffice.org Draw : registering;databases (Base)
-OpenOffice.org Draw : registering;OpenOffice.org
-OpenOffice.org Draw : regression curves in charts
-OpenOffice.org Draw : regular expressions
-OpenOffice.org Draw : regular expressions;list of
-OpenOffice.org Draw : regular expressions;opening files
-OpenOffice.org Draw : rehearse timings
-OpenOffice.org Draw : relational databases (Base)
-OpenOffice.org Draw : relations
-OpenOffice.org Draw : relations;creating and deleting (Base)
-OpenOffice.org Draw : relations;joining tables (Base)
-OpenOffice.org Draw : relations;properties (Base)
-OpenOffice.org Draw : relative hyperlinks
-OpenOffice.org Draw : relative saving of URLs
-OpenOffice.org Draw : reloading
-OpenOffice.org Draw : reloading;documents
-OpenOffice.org Draw : reloading;HTML documents, automatically
-OpenOffice.org Draw : remarks, see also notes
-OpenOffice.org Draw : remote configurations
-OpenOffice.org Draw : remove noise filter
-OpenOffice.org Draw : removing
-OpenOffice.org Draw : removing;bullets and numbering
-OpenOffice.org Draw : removing;form filters
-OpenOffice.org Draw : removing, see also deleting
-OpenOffice.org Draw : renaming layers
-OpenOffice.org Draw : reorganizing charts
-OpenOffice.org Draw : Replace text as you type feature in Microsoft Office
-OpenOffice.org Draw : replacement options
-OpenOffice.org Draw : replacement table
-OpenOffice.org Draw : replacing
-OpenOffice.org Draw : replacing;AutoCorrect function
-OpenOffice.org Draw : replacing;colors in bitmaps
-OpenOffice.org Draw : replacing;dashes
-OpenOffice.org Draw : Report Builder
-OpenOffice.org Draw : reports
-OpenOffice.org Draw : reports;creating
-OpenOffice.org Draw : reports;error reports
-OpenOffice.org Draw : reports;opening and editing
-OpenOffice.org Draw : reports;templates
-OpenOffice.org Draw : resetting
-OpenOffice.org Draw : resetting;templates
-OpenOffice.org Draw : resizing
-OpenOffice.org Draw : resizing;objects, by mouse
-OpenOffice.org Draw : resizing, see also scaling/zooming
-OpenOffice.org Draw : resolution when printing bitmaps
-OpenOffice.org Draw : restoring
-OpenOffice.org Draw : restoring;default formatting
-OpenOffice.org Draw : restoring;editing
-OpenOffice.org Draw : reversing objects
-OpenOffice.org Draw : reversing printing order
-OpenOffice.org Draw : review function
-OpenOffice.org Draw : review function;accepting or rejecting changes
-OpenOffice.org Draw : review function;comparing documents
-OpenOffice.org Draw : review function;recording changes example
-OpenOffice.org Draw : rich text control
-OpenOffice.org Draw : right alignment of paragraphs
-OpenOffice.org Draw : right joins (Base)
-OpenOffice.org Draw : right-to-left text
-OpenOffice.org Draw : rotating
-OpenOffice.org Draw : rotating;3D text
-OpenOffice.org Draw : rotating;draw objects
-OpenOffice.org Draw : rotation mode
-OpenOffice.org Draw : round corners
-OpenOffice.org Draw : rounding precision (Calc)
-OpenOffice.org Draw : row headers
-OpenOffice.org Draw : row headers;displaying (Calc)
-OpenOffice.org Draw : row headers;highlighting (Calc)
-OpenOffice.org Draw : rulers
-OpenOffice.org Draw : rulers;default settings
-OpenOffice.org Draw : rulers;in presentations
-OpenOffice.org Draw : rulers;measurement units
-OpenOffice.org Draw : rulers;visible in presentations
-OpenOffice.org Draw : running macros/programs in presentations
-OpenOffice.org Draw : running slide shows
-OpenOffice.org Draw : samples and templates
-OpenOffice.org Draw : saving
-OpenOffice.org Draw : saving;as HTML
-OpenOffice.org Draw : saving;default file formats
-OpenOffice.org Draw : saving;dialog settings
-OpenOffice.org Draw : saving;documents
-OpenOffice.org Draw : saving;documents for mobile devices
-OpenOffice.org Draw : saving;documents in other formats
-OpenOffice.org Draw : saving;documents, automatically
-OpenOffice.org Draw : saving;in Microsoft Office file format
-OpenOffice.org Draw : saving;options
-OpenOffice.org Draw : saving;templates
-OpenOffice.org Draw : saving;to XML
-OpenOffice.org Draw : saving;VBA code in Microsoft Office documents
-OpenOffice.org Draw : saving;with password by default
-OpenOffice.org Draw : saving as command
-OpenOffice.org Draw : saving as command;precautions
-OpenOffice.org Draw : scaling
-OpenOffice.org Draw : scaling;axes
-OpenOffice.org Draw : scaling;font sizes in user interface
-OpenOffice.org Draw : scaling;objects
-OpenOffice.org Draw : scaling;pictures
-OpenOffice.org Draw : scaling;printing in OpenOffice.org Math
-OpenOffice.org Draw : scaling;text in charts
-OpenOffice.org Draw : scaling;when printing presentations
-OpenOffice.org Draw : scaling, see also zooming
-OpenOffice.org Draw : scatter charts
-OpenOffice.org Draw : screen
-OpenOffice.org Draw : screen;full screen views
-OpenOffice.org Draw : screen;scaling
-OpenOffice.org Draw : screen magnifiers
-OpenOffice.org Draw : screen readers
-OpenOffice.org Draw : script organization
-OpenOffice.org Draw : scripting in programming
-OpenOffice.org Draw : scrollbars
-OpenOffice.org Draw : scrollbars;controls
-OpenOffice.org Draw : scrollbars;displaying (Calc)
-OpenOffice.org Draw : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Draw : search criteria for database functions in cells
-OpenOffice.org Draw : search engines
-OpenOffice.org Draw : search engines;definition
-OpenOffice.org Draw : search engines;selecting
-OpenOffice.org Draw : searching
-OpenOffice.org Draw : searching;all sheets
-OpenOffice.org Draw : searching;databases
-OpenOffice.org Draw : searching;form filters
-OpenOffice.org Draw : searching;Internet
-OpenOffice.org Draw : searching;tables and forms
-OpenOffice.org Draw : secondary axes in charts
-OpenOffice.org Draw : sections
-OpenOffice.org Draw : sections;backgrounds
-OpenOffice.org Draw : sections;protecting
-OpenOffice.org Draw : sectors of circles/ellipses
-OpenOffice.org Draw : security
-OpenOffice.org Draw : security;options for documents with macros
-OpenOffice.org Draw : security;protecting contents
-OpenOffice.org Draw : security;warning dialogs with macros
-OpenOffice.org Draw : segments of circles/ellipses
-OpenOffice.org Draw : selecting
-OpenOffice.org Draw : selecting;controls
-OpenOffice.org Draw : selecting;group objects
-OpenOffice.org Draw : selecting;hidden objects
-OpenOffice.org Draw : selecting;layers
-OpenOffice.org Draw : selecting;measurement units
-OpenOffice.org Draw : selecting;objects
-OpenOffice.org Draw : selecting;print areas
-OpenOffice.org Draw : selecting;several files
-OpenOffice.org Draw : selection clipboard
-OpenOffice.org Draw : selection modes in text
-OpenOffice.org Draw : sending
-OpenOffice.org Draw : sending;AutoAbstract function in presentations
-OpenOffice.org Draw : sending;documents as e-mail
-OpenOffice.org Draw : sending;documents as faxes
-OpenOffice.org Draw : separator lines
-OpenOffice.org Draw : separator lines;defining
-OpenOffice.org Draw : separators
-OpenOffice.org Draw : separators;conditional
-OpenOffice.org Draw : Server Side ImageMap
-OpenOffice.org Draw : settings
-OpenOffice.org Draw : settings;printers
-OpenOffice.org Draw : settings;program configuration
-OpenOffice.org Draw : settings;proxies
-OpenOffice.org Draw : settings;tracking changes
-OpenOffice.org Draw : settings;views
-OpenOffice.org Draw : SGML
-OpenOffice.org Draw : SGML;definition
-OpenOffice.org Draw : shadows
-OpenOffice.org Draw : shadows;areas
-OpenOffice.org Draw : shadows;borders
-OpenOffice.org Draw : shadows;characters
-OpenOffice.org Draw : shadows;characters, using context menu
-OpenOffice.org Draw : sharpening filter
-OpenOffice.org Draw : shearing objects
-OpenOffice.org Draw : sheet tabs
-OpenOffice.org Draw : sheet tabs;displaying
-OpenOffice.org Draw : sheets
-OpenOffice.org Draw : sheets;searching all
-OpenOffice.org Draw : shells
-OpenOffice.org Draw : shortcut keys
-OpenOffice.org Draw : shortcut keys;assigning macros
-OpenOffice.org Draw : shortcut keys;charts
-OpenOffice.org Draw : shortcut keys;general
-OpenOffice.org Draw : shortcut keys;in databases
-OpenOffice.org Draw : shortcut keys;in drawings
-OpenOffice.org Draw : shortcut keys;in presentations
-OpenOffice.org Draw : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Draw : Show/Hide feature in Microsoft Office
-OpenOffice.org Draw : showing
-OpenOffice.org Draw : showing;changes
-OpenOffice.org Draw : showing;docked windows
-OpenOffice.org Draw : showing;drawings and controls (Writer)
-OpenOffice.org Draw : showing;guides
-OpenOffice.org Draw : showing;hidden layers
-OpenOffice.org Draw : showing;hidden slides
-OpenOffice.org Draw : showing;levels
-OpenOffice.org Draw : showing;live presentations on the Internet
-OpenOffice.org Draw : showing;slide shows
-OpenOffice.org Draw : showing;subpoints
-OpenOffice.org Draw : showing;toolbars
-OpenOffice.org Draw : sign conversion to curves
-OpenOffice.org Draw : signing documents with digital signatures
-OpenOffice.org Draw : similarity search
-OpenOffice.org Draw : simple handles (Writer)
-OpenOffice.org Draw : simplified Chinese
-OpenOffice.org Draw : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Draw : single sign on options
-OpenOffice.org Draw : single-line spacing in text
-OpenOffice.org Draw : sizes
-OpenOffice.org Draw : sizes;draw objects
-OpenOffice.org Draw : sizes;pictures
-OpenOffice.org Draw : skewing draw objects
-OpenOffice.org Draw : slanting draw objects
-OpenOffice.org Draw : slanting objects
-OpenOffice.org Draw : slide designs
-OpenOffice.org Draw : slide layouts
-OpenOffice.org Draw : slide master view
-OpenOffice.org Draw : slide masters
-OpenOffice.org Draw : slide masters;changing backgrounds
-OpenOffice.org Draw : slide masters;designing
-OpenOffice.org Draw : slide masters;headers and footers
-OpenOffice.org Draw : slide numbers
-OpenOffice.org Draw : slide numbers on all slides
-OpenOffice.org Draw : slide shows
-OpenOffice.org Draw : slide shows;custom
-OpenOffice.org Draw : slide shows;settings for
-OpenOffice.org Draw : slide shows;starting
-OpenOffice.org Draw : slide transitions
-OpenOffice.org Draw : slide transitions;applying effects
-OpenOffice.org Draw : slide transitions;automatic
-OpenOffice.org Draw : slide transitions;manual
-OpenOffice.org Draw : slide transitions;sounds
-OpenOffice.org Draw : slides
-OpenOffice.org Draw : slides;arranging
-OpenOffice.org Draw : slides;backgrounds
-OpenOffice.org Draw : slides;changing backgrounds
-OpenOffice.org Draw : slides;copying between documents
-OpenOffice.org Draw : slides;deleting
-OpenOffice.org Draw : slides;expanding
-OpenOffice.org Draw : slides;formatting
-OpenOffice.org Draw : slides;headers and footers
-OpenOffice.org Draw : slides;inserting
-OpenOffice.org Draw : slides;inserting as links
-OpenOffice.org Draw : slides;inserting notes
-OpenOffice.org Draw : slides;page numbers
-OpenOffice.org Draw : slides;printing
-OpenOffice.org Draw : small capitals
-OpenOffice.org Draw : small icons
-OpenOffice.org Draw : smart tags
-OpenOffice.org Draw : smart tags;options
-OpenOffice.org Draw : smooth scrolling (Writer)
-OpenOffice.org Draw : smoothing filter
-OpenOffice.org Draw : snap grid defaults (Writer/Calc)
-OpenOffice.org Draw : snap lines, see also guides
-OpenOffice.org Draw : snap points
-OpenOffice.org Draw : snap points;editing
-OpenOffice.org Draw : snap points;inserting
-OpenOffice.org Draw : snapping in presentations and drawings
-OpenOffice.org Draw : solarization filter
-OpenOffice.org Draw : sort lists
-OpenOffice.org Draw : sort lists;copying to in Calc
-OpenOffice.org Draw : sorting
-OpenOffice.org Draw : sorting;data in forms
-OpenOffice.org Draw : sorting;databases
-OpenOffice.org Draw : sounds
-OpenOffice.org Draw : sounds;for effects
-OpenOffice.org Draw : sounds;formats
-OpenOffice.org Draw : sounds;inserting and playing
-OpenOffice.org Draw : sounds;on slide transitions
-OpenOffice.org Draw : sounds;UNIX
-OpenOffice.org Draw : spaces
-OpenOffice.org Draw : spaces;displaying (Writer)
-OpenOffice.org Draw : spaces;ignoring double
-OpenOffice.org Draw : spaces;inserting protected spaces
-OpenOffice.org Draw : spaces;showing protected spaces (Writer)
-OpenOffice.org Draw : spacing
-OpenOffice.org Draw : spacing;between paragraphs in footnotes
-OpenOffice.org Draw : spacing;font effects
-OpenOffice.org Draw : spacing;lines and paragraphs
-OpenOffice.org Draw : spacing;tab stops in text documents
-OpenOffice.org Draw : spacing;tabs in presentations
-OpenOffice.org Draw : spadmin
-OpenOffice.org Draw : speaker notes
-OpenOffice.org Draw : speaker notes;defaults
-OpenOffice.org Draw : speaker notes;inserting
-OpenOffice.org Draw : special characters
-OpenOffice.org Draw : speech bubbles
-OpenOffice.org Draw : speed of printing
-OpenOffice.org Draw : spellcheck
-OpenOffice.org Draw : spellcheck;activating for a language
-OpenOffice.org Draw : spellcheck;context menus
-OpenOffice.org Draw : spellcheck;default languages
-OpenOffice.org Draw : spellcheck;dialog
-OpenOffice.org Draw : spellcheck;dictionary of exceptions
-OpenOffice.org Draw : spellcheck;ignore list
-OpenOffice.org Draw : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Draw : spheres
-OpenOffice.org Draw : spin button creation
-OpenOffice.org Draw : splitting
-OpenOffice.org Draw : splitting;combinations
-OpenOffice.org Draw : splitting;curves
-OpenOffice.org Draw : spoolfiles with Xprinter
-OpenOffice.org Draw : spreadsheets
-OpenOffice.org Draw : spreadsheets;as databases (base)
-OpenOffice.org Draw : spreadsheets;backgrounds
-OpenOffice.org Draw : spreadsheets;copying areas to text documents
-OpenOffice.org Draw : spreadsheets;creating/opening
-OpenOffice.org Draw : spreadsheets;in presentations
-OpenOffice.org Draw : spreadsheets;inserting charts
-OpenOffice.org Draw : spreadsheets;inserting database records
-OpenOffice.org Draw : spreadsheets;printing
-OpenOffice.org Draw : spreadsheets;saving
-OpenOffice.org Draw : spreadsheets;saving automatically
-OpenOffice.org Draw : spreadsheets;saving in other formats
-OpenOffice.org Draw : spreadsheets;sending as e-mail
-OpenOffice.org Draw : SQL
-OpenOffice.org Draw : SQL;definition
-OpenOffice.org Draw : SQL;DISTINCT parameter
-OpenOffice.org Draw : SQL;executing SQL commands
-OpenOffice.org Draw : SQL;executing SQL statements (Base)
-OpenOffice.org Draw : SQL;queries (Base)
-OpenOffice.org Draw : square drawings
-OpenOffice.org Draw : standard bar on/off
-OpenOffice.org Draw : standard deviation in charts
-OpenOffice.org Draw : standard filters in databases
-OpenOffice.org Draw : standard printer under UNIX
-OpenOffice.org Draw : Start Module backing window
-OpenOffice.org Draw : start parameters
-OpenOffice.org Draw : starting
-OpenOffice.org Draw : starting;always with the current slide
-OpenOffice.org Draw : starting;custom slide shows
-OpenOffice.org Draw : starting;slide shows
-OpenOffice.org Draw : statistics in charts
-OpenOffice.org Draw : status bar on/off
-OpenOffice.org Draw : stickers
-OpenOffice.org Draw : stock charts
-OpenOffice.org Draw : strikethrough
-OpenOffice.org Draw : strikethrough;characters
-OpenOffice.org Draw : strikethrough;font effects
-OpenOffice.org Draw : styles
-OpenOffice.org Draw : styles;'changed' message
-OpenOffice.org Draw : styles;arrow and line styles
-OpenOffice.org Draw : styles;copying between documents
-OpenOffice.org Draw : styles;keyboard shortcuts
-OpenOffice.org Draw : styles;organizing
-OpenOffice.org Draw : styles;printing styles used in a document
-OpenOffice.org Draw : styles;replacing automatically
-OpenOffice.org Draw : Styles and Formatting window
-OpenOffice.org Draw : Styles and Formatting window;docking
-OpenOffice.org Draw : Styles and Formatting window;graphics documents
-OpenOffice.org Draw : subforms
-OpenOffice.org Draw : subforms;creating
-OpenOffice.org Draw : subforms;description
-OpenOffice.org Draw : submitting forms
-OpenOffice.org Draw : subpoints
-OpenOffice.org Draw : subpoints;hiding
-OpenOffice.org Draw : subpoints;showing
-OpenOffice.org Draw : subtracting polygons
-OpenOffice.org Draw : suffixes in file formats
-OpenOffice.org Draw : summary slide
-OpenOffice.org Draw : support on the Web
-OpenOffice.org Draw : synchronizing
-OpenOffice.org Draw : synchronizing;labels and business cards
-OpenOffice.org Draw : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Draw : system address book registration
-OpenOffice.org Draw : tab stops
-OpenOffice.org Draw : tab stops;displaying (Writer)
-OpenOffice.org Draw : tab stops;inserting and editing
-OpenOffice.org Draw : tab stops;setting in sheets
-OpenOffice.org Draw : tab stops;settings
-OpenOffice.org Draw : tab stops;spacing in presentations
-OpenOffice.org Draw : tab stops;spacing in text documents
-OpenOffice.org Draw : table controls
-OpenOffice.org Draw : table controls;form functions
-OpenOffice.org Draw : table controls;keyboard-only edit mode
-OpenOffice.org Draw : table controls;properties
-OpenOffice.org Draw : table views of databases
-OpenOffice.org Draw : Table Wizard (Base)
-OpenOffice.org Draw : tables
-OpenOffice.org Draw : tables;backgrounds
-OpenOffice.org Draw : tables;inserting line breaks
-OpenOffice.org Draw : tables in databases
-OpenOffice.org Draw : tables in databases;access rights to (Base)
-OpenOffice.org Draw : tables in databases;adding to queries
-OpenOffice.org Draw : tables in databases;browsing and editing
-OpenOffice.org Draw : tables in databases;copying database tables (Base)
-OpenOffice.org Draw : tables in databases;creating
-OpenOffice.org Draw : tables in databases;creating in design view
-OpenOffice.org Draw : tables in databases;importing text formats (Base)
-OpenOffice.org Draw : tables in databases;joining for queries (Base)
-OpenOffice.org Draw : tables in databases;printing queries (Base)
-OpenOffice.org Draw : tables in databases;relations (Base)
-OpenOffice.org Draw : tables in databases;searching
-OpenOffice.org Draw : tables in spreadsheets
-OpenOffice.org Draw : tables in spreadsheets;copying data to other applications
-OpenOffice.org Draw : tables in spreadsheets;defining borders
-OpenOffice.org Draw : tables in spreadsheets;value highlighting
-OpenOffice.org Draw : tables in text
-OpenOffice.org Draw : tables in text;captions
-OpenOffice.org Draw : tables in text;creating automatically
-OpenOffice.org Draw : tables in text;default settings
-OpenOffice.org Draw : tables in text;defining borders
-OpenOffice.org Draw : tables in text;displaying
-OpenOffice.org Draw : tables in text;printing
-OpenOffice.org Draw : tables in text;protecting cells
-OpenOffice.org Draw : tables of contents
-OpenOffice.org Draw : tables of contents;unprotecting
-OpenOffice.org Draw : tabs
-OpenOffice.org Draw : tabs;displaying sheet tabs
-OpenOffice.org Draw : tags
-OpenOffice.org Draw : tags;definition
-OpenOffice.org Draw : tags;META tags
-OpenOffice.org Draw : task pane
-OpenOffice.org Draw : templates
-OpenOffice.org Draw : templates;agendas
-OpenOffice.org Draw : templates;changing basic fonts
-OpenOffice.org Draw : templates;database reports
-OpenOffice.org Draw : templates;deleting
-OpenOffice.org Draw : templates;editing and saving
-OpenOffice.org Draw : templates;faxes
-OpenOffice.org Draw : templates;importing and exporting
-OpenOffice.org Draw : templates;letters
-OpenOffice.org Draw : templates;new documents from templates
-OpenOffice.org Draw : templates;opening documents with
-OpenOffice.org Draw : templates;organizing
-OpenOffice.org Draw : terminology
-OpenOffice.org Draw : terminology;general glossary
-OpenOffice.org Draw : terminology;Internet glossary
-OpenOffice.org Draw : testing XML filters
-OpenOffice.org Draw : text
-OpenOffice.org Draw : text;animating
-OpenOffice.org Draw : text;Asian layout
-OpenOffice.org Draw : text;backgrounds
-OpenOffice.org Draw : text;bold
-OpenOffice.org Draw : text;coloring
-OpenOffice.org Draw : text;contours
-OpenOffice.org Draw : text;converting to curves
-OpenOffice.org Draw : text;copying by drag and drop
-OpenOffice.org Draw : text;CTL languages
-OpenOffice.org Draw : text;double-clicking to edit
-OpenOffice.org Draw : text;drawing pictures
-OpenOffice.org Draw : text;font effects
-OpenOffice.org Draw : text;font sizes
-OpenOffice.org Draw : text;font styles
-OpenOffice.org Draw : text;fonts and formats
-OpenOffice.org Draw : text;Fontwork icons
-OpenOffice.org Draw : text;hyperlinks
-OpenOffice.org Draw : text;inserting special characters
-OpenOffice.org Draw : text;italics
-OpenOffice.org Draw : text;kerning
-OpenOffice.org Draw : text;language selection
-OpenOffice.org Draw : text;line spacing
-OpenOffice.org Draw : text;overwriting or inserting
-OpenOffice.org Draw : text;placeholders in presentations
-OpenOffice.org Draw : text;printing in black
-OpenOffice.org Draw : text;replacing with format
-OpenOffice.org Draw : text;selection modes
-OpenOffice.org Draw : text;shadowed
-OpenOffice.org Draw : text;text/draw objects
-OpenOffice.org Draw : text;toolbar
-OpenOffice.org Draw : text attributes
-OpenOffice.org Draw : text attributes;hyperlinks
-OpenOffice.org Draw : text attributes;undoing
-OpenOffice.org Draw : text boxes
-OpenOffice.org Draw : text boxes;form functions
-OpenOffice.org Draw : text boxes;positioning
-OpenOffice.org Draw : text breaks in cells
-OpenOffice.org Draw : text colors for better accessibility
-OpenOffice.org Draw : text databases (Base)
-OpenOffice.org Draw : text documents
-OpenOffice.org Draw : text documents;creating/opening
-OpenOffice.org Draw : text documents;importing/exporting
-OpenOffice.org Draw : text documents;inserting in slides
-OpenOffice.org Draw : text documents;inserting in slides - Importing HTML Pages Into Presentations
-OpenOffice.org Draw : text documents;inserting spreadsheet cells
-OpenOffice.org Draw : text documents;print settings
-OpenOffice.org Draw : text documents;printing
-OpenOffice.org Draw : text documents;saving
-OpenOffice.org Draw : text documents;saving automatically
-OpenOffice.org Draw : text documents;saving in other formats
-OpenOffice.org Draw : text documents;sending as e-mail
-OpenOffice.org Draw : text effects
-OpenOffice.org Draw : text entry mode for draw objects
-OpenOffice.org Draw : text flow
-OpenOffice.org Draw : text flow;in cells
-OpenOffice.org Draw : text formats
-OpenOffice.org Draw : text formats;databases
-OpenOffice.org Draw : text formats;pasting
-OpenOffice.org Draw : text frames
-OpenOffice.org Draw : text input fields
-OpenOffice.org Draw : text layout for special languages
-OpenOffice.org Draw : text objects
-OpenOffice.org Draw : text objects;alignment
-OpenOffice.org Draw : text objects;draw functions
-OpenOffice.org Draw : text objects;fonts
-OpenOffice.org Draw : text objects;in presentations and drawings
-OpenOffice.org Draw : text overflow in spreadsheet cells
-OpenOffice.org Draw : text scaling in charts
-OpenOffice.org Draw : text, see also text documents, paragraphs and characters
-OpenOffice.org Draw : TextArt, see Fontwork
-OpenOffice.org Draw : textures
-OpenOffice.org Draw : textures;inserting from Gallery
-OpenOffice.org Draw : textures;on chart bars
-OpenOffice.org Draw : Thai
-OpenOffice.org Draw : Thai;entering text
-OpenOffice.org Draw : Thai;language settings
-OpenOffice.org Draw : thesaurus
-OpenOffice.org Draw : thesaurus;activating for a language
-OpenOffice.org Draw : ticker text
-OpenOffice.org Draw : tiled printing of slides
-OpenOffice.org Draw : time and date on all slides
-OpenOffice.org Draw : time fields
-OpenOffice.org Draw : time fields;form functions
-OpenOffice.org Draw : times
-OpenOffice.org Draw : times;fixed
-OpenOffice.org Draw : times;inserting when printing presentations
-OpenOffice.org Draw : times;variable
-OpenOffice.org Draw : times, formats
-OpenOffice.org Draw : timings
-OpenOffice.org Draw : timings;rehearse timings
-OpenOffice.org Draw : tips
-OpenOffice.org Draw : tips;extended tips in Help
-OpenOffice.org Draw : title rows
-OpenOffice.org Draw : title rows;printing in OpenOffice.org Math
-OpenOffice.org Draw : titles
-OpenOffice.org Draw : titles;alignment (charts)
-OpenOffice.org Draw : titles;changing
-OpenOffice.org Draw : titles;editing in charts
-OpenOffice.org Draw : titles;font effects
-OpenOffice.org Draw : titles;formatting automatically
-OpenOffice.org Draw : titles;formatting charts
-OpenOffice.org Draw : titles;objects
-OpenOffice.org Draw : toolbars
-OpenOffice.org Draw : toolbars;3D objects
-OpenOffice.org Draw : toolbars;adding buttons
-OpenOffice.org Draw : toolbars;curves
-OpenOffice.org Draw : toolbars;docking/undocking
-OpenOffice.org Draw : toolbars;ellipses
-OpenOffice.org Draw : toolbars;Form Navigation bar
-OpenOffice.org Draw : toolbars;viewing/closing
-OpenOffice.org Draw : tools bar
-OpenOffice.org Draw : tooltips
-OpenOffice.org Draw : tooltips;extended tips
-OpenOffice.org Draw : tooltips;help
-OpenOffice.org Draw : torus
-OpenOffice.org Draw : Track changes feature in Microsoft Office
-OpenOffice.org Draw : traditional Chinese
-OpenOffice.org Draw : traditional Chinese;translating to simplified chinese
-OpenOffice.org Draw : transition effects
-OpenOffice.org Draw : transparency
-OpenOffice.org Draw : transparency;adjusting
-OpenOffice.org Draw : transparency;areas
-OpenOffice.org Draw : transparency;of objects
-OpenOffice.org Draw : transparency;off for faster printing
-OpenOffice.org Draw : transparency;saving
-OpenOffice.org Draw : tree view of Help
-OpenOffice.org Draw : trend lines in charts
-OpenOffice.org Draw : typefaces
-OpenOffice.org Draw : typefaces;adding under UNIX
-OpenOffice.org Draw : typefaces;formats
-OpenOffice.org Draw : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Draw : typography
-OpenOffice.org Draw : typography;Asian
-OpenOffice.org Draw : underlining
-OpenOffice.org Draw : underlining;AutoFormat function
-OpenOffice.org Draw : underlining;characters
-OpenOffice.org Draw : underlining;text
-OpenOffice.org Draw : underlying objects
-OpenOffice.org Draw : undocking windows
-OpenOffice.org Draw : undoing
-OpenOffice.org Draw : undoing;direct formatting
-OpenOffice.org Draw : undoing;editing
-OpenOffice.org Draw : undoing;number of steps
-OpenOffice.org Draw : ungrouping groups
-OpenOffice.org Draw : units
-OpenOffice.org Draw : units;converting
-OpenOffice.org Draw : units;measurement units
-OpenOffice.org Draw : unlocking layers
-OpenOffice.org Draw : UNO components
-OpenOffice.org Draw : UNO components;Extension Manager
-OpenOffice.org Draw : UNO components;integrating new
-OpenOffice.org Draw : update options
-OpenOffice.org Draw : updates
-OpenOffice.org Draw : updates;checking automatically
-OpenOffice.org Draw : updates;checking manually
-OpenOffice.org Draw : updating
-OpenOffice.org Draw : updating;fields and charts, automatically (Writer)
-OpenOffice.org Draw : updating;links in text documents
-OpenOffice.org Draw : updating;links, on opening
-OpenOffice.org Draw : updating;templates
-OpenOffice.org Draw : URL
-OpenOffice.org Draw : URL;changing hyperlink URLs
-OpenOffice.org Draw : URL;definition
-OpenOffice.org Draw : URL;saving absolute/relative paths
-OpenOffice.org Draw : URL;turning off URL recognition
-OpenOffice.org Draw : user data
-OpenOffice.org Draw : user data;input
-OpenOffice.org Draw : user data;removing when saving
-OpenOffice.org Draw : user-defined colors
-OpenOffice.org Draw : user-defined dictionaries
-OpenOffice.org Draw : user-defined dictionaries;creating
-OpenOffice.org Draw : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Draw : user-defined dictionaries;editing
-OpenOffice.org Draw : user-defined styles
-OpenOffice.org Draw : user-defined styles;automatically replacing
-OpenOffice.org Draw : UTF-8/UCS2 support
-OpenOffice.org Draw : Validation feature in Microsoft Office
-OpenOffice.org Draw : values
-OpenOffice.org Draw : values;rounded as shown (Calc)
-OpenOffice.org Draw : variables
-OpenOffice.org Draw : variables;for paths
-OpenOffice.org Draw : variances in charts
-OpenOffice.org Draw : VBA code
-OpenOffice.org Draw : VBA code;loading/saving documents with VBA code
-OpenOffice.org Draw : vector graphics
-OpenOffice.org Draw : vector graphics;converting bitmaps
-OpenOffice.org Draw : vectorizing bitmaps
-OpenOffice.org Draw : version management
-OpenOffice.org Draw : version numbers of documents
-OpenOffice.org Draw : versions
-OpenOffice.org Draw : versions;comparing documents
-OpenOffice.org Draw : versions;file saving as, restriction
-OpenOffice.org Draw : versions;merging document versions
-OpenOffice.org Draw : versions;of a document
-OpenOffice.org Draw : versions;OpenOffice.org
-OpenOffice.org Draw : vertical callouts
-OpenOffice.org Draw : vertical scrollbars (Writer)
-OpenOffice.org Draw : vertical text boxes
-OpenOffice.org Draw : videos
-OpenOffice.org Draw : viewing
-OpenOffice.org Draw : viewing;databases
-OpenOffice.org Draw : viewing;file properties
-OpenOffice.org Draw : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Draw : viewing;toolbars
-OpenOffice.org Draw : views
-OpenOffice.org Draw : views;black and white
-OpenOffice.org Draw : views;creating database views (Base)
-OpenOffice.org Draw : views;defaults
-OpenOffice.org Draw : views;display sizes
-OpenOffice.org Draw : views;full screen
-OpenOffice.org Draw : views;icons
-OpenOffice.org Draw : views;in 3D
-OpenOffice.org Draw : views;scaling
-OpenOffice.org Draw : views;shift function
-OpenOffice.org Draw : views;slide master view
-OpenOffice.org Draw : Visual Basic for Applications
-OpenOffice.org Draw : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Draw : watermarks
-OpenOffice.org Draw : web documents
-OpenOffice.org Draw : web documents;XForms
-OpenOffice.org Draw : Web support
-OpenOffice.org Draw : WebCast export
-OpenOffice.org Draw : windows
-OpenOffice.org Draw : windows;docking
-OpenOffice.org Draw : windows;docking definition
-OpenOffice.org Draw : windows;hiding/showing/docking
-OpenOffice.org Draw : windows;new
-OpenOffice.org Draw : wizards
-OpenOffice.org Draw : wizards;agendas
-OpenOffice.org Draw : wizards;database queries
-OpenOffice.org Draw : wizards;database tables (Base)
-OpenOffice.org Draw : wizards;databases (Base)
-OpenOffice.org Draw : wizards;document converter
-OpenOffice.org Draw : wizards;Euro Converter
-OpenOffice.org Draw : wizards;faxes
-OpenOffice.org Draw : wizards;forms
-OpenOffice.org Draw : wizards;letters
-OpenOffice.org Draw : wizards;overview
-OpenOffice.org Draw : wizards;presentations
-OpenOffice.org Draw : wizards;reports
-OpenOffice.org Draw : Word documents
-OpenOffice.org Draw : Word documents;compatibility
-OpenOffice.org Draw : Word documents;saving as
-OpenOffice.org Draw : WordArt, see Fontwork
-OpenOffice.org Draw : words
-OpenOffice.org Draw : words;automatically replacing
-OpenOffice.org Draw : words;wrapping in cells
-OpenOffice.org Draw : work directory change
-OpenOffice.org Draw : Workbook feature in Microsoft Office
-OpenOffice.org Draw : Worksheet feature in Microsoft Office
-OpenOffice.org Draw : wrapping text
-OpenOffice.org Draw : wrapping text;in cells
-OpenOffice.org Draw : write protection on/off
-OpenOffice.org Draw : writing aids options
-OpenOffice.org Draw : WYSIWYG in fonts lists
-OpenOffice.org Draw : X axes
-OpenOffice.org Draw : X axes;grid formatting
-OpenOffice.org Draw : X axes;scaling
-OpenOffice.org Draw : X axes;showing
-OpenOffice.org Draw : XForms
-OpenOffice.org Draw : XML converters
-OpenOffice.org Draw : XML file formats
-OpenOffice.org Draw : XML filters
-OpenOffice.org Draw : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Draw : XML filters;settings
-OpenOffice.org Draw : XML Forms
-OpenOffice.org Draw : XSLT based filters
-OpenOffice.org Draw : XSLT based filters;settings
-OpenOffice.org Draw : XSLT filters, see also XML filters
-OpenOffice.org Draw : XY charts
-OpenOffice.org Draw : Y axes
-OpenOffice.org Draw : Y axes;formatting
-OpenOffice.org Draw : Y axes;grid formatting
-OpenOffice.org Draw : Y axes;scaling
-OpenOffice.org Draw : Y axes;showing
-OpenOffice.org Draw : years
-OpenOffice.org Draw : years;2-digit options
-OpenOffice.org Draw : Z axes
-OpenOffice.org Draw : Z axes;grid formatting
-OpenOffice.org Draw : Z axes;showing
-OpenOffice.org Draw : zero values
-OpenOffice.org Draw : zero values;displaying (Calc)
-OpenOffice.org Draw : zooming
-OpenOffice.org Draw : zooming;in presentations
-OpenOffice.org Draw : zooming;keyboard
-OpenOffice.org Draw : zooming;page views
-OpenOffice.org Draw : zooming;pictures
-OpenOffice.org Draw : zooming;shortcut keys
-OpenOffice.org Draw : zooming;status bar
-OpenOffice.org Impress : 1/2 replacement
-OpenOffice.org Impress : 3D charts
-OpenOffice.org Impress : 3D objects
-OpenOffice.org Impress : 3D objects;assembling
-OpenOffice.org Impress : 3D objects;generating
-OpenOffice.org Impress : 3D objects;inserting
-OpenOffice.org Impress : 3D rotation objects
-OpenOffice.org Impress : 3D rotation objects;converting to
-OpenOffice.org Impress : 3D rotation objects;generating
-OpenOffice.org Impress : 3D text creation
-OpenOffice.org Impress : 3D view
-OpenOffice.org Impress : abbreviation replacement
-OpenOffice.org Impress : absolute hyperlinks
-OpenOffice.org Impress : absolute saving of URLs
-OpenOffice.org Impress : accents
-OpenOffice.org Impress : Access databases (base)
-OpenOffice.org Impress : access rights for database tables (Base)
-OpenOffice.org Impress : accessibility
-OpenOffice.org Impress : accessibility;general shortcuts
-OpenOffice.org Impress : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Impress : accessibility;OpenOffice.org Draw
-OpenOffice.org Impress : accessibility;OpenOffice.org features
-OpenOffice.org Impress : accessibility;OpenOffice.org Impress
-OpenOffice.org Impress : accessibility;options
-OpenOffice.org Impress : activating
-OpenOffice.org Impress : activating;context menus
-OpenOffice.org Impress : activating;Error Report Tool
-OpenOffice.org Impress : activating;extended help tips
-OpenOffice.org Impress : activating;plug-ins
-OpenOffice.org Impress : ActiveX control
-OpenOffice.org Impress : Adabas D databases (base)
-OpenOffice.org Impress : add-ons, see UNO components
-OpenOffice.org Impress : adding
-OpenOffice.org Impress : adding;animation effects
-OpenOffice.org Impress : adding;automatic captions (Writer)
-OpenOffice.org Impress : adding;backgrounds
-OpenOffice.org Impress : adding;buttons in toolbars
-OpenOffice.org Impress : adding;conditions for XForm items
-OpenOffice.org Impress : adding;draw objects
-OpenOffice.org Impress : adding;Fontwork objects
-OpenOffice.org Impress : adding;headers/footers in all slides
-OpenOffice.org Impress : adding;items in Data Navigator
-OpenOffice.org Impress : adding;namespaces in XForms
-OpenOffice.org Impress : adding;paragraph borders
-OpenOffice.org Impress : adding;pictures from Gallery
-OpenOffice.org Impress : adding;pictures in Gallery
-OpenOffice.org Impress : adding;plug-ins
-OpenOffice.org Impress : adding;points
-OpenOffice.org Impress : adding;push buttons
-OpenOffice.org Impress : adding;table borders
-OpenOffice.org Impress : adding;text frames
-OpenOffice.org Impress : adding;textures on chart bars
-OpenOffice.org Impress : additional selection mode
-OpenOffice.org Impress : address books
-OpenOffice.org Impress : address books;LDAP server (Base)
-OpenOffice.org Impress : address books;registering
-OpenOffice.org Impress : address labels from databases
-OpenOffice.org Impress : ADO databases (Base)
-OpenOffice.org Impress : Agenda Wizard
-OpenOffice.org Impress : aging filter
-OpenOffice.org Impress : aligning
-OpenOffice.org Impress : aligning;2D charts
-OpenOffice.org Impress : aligning;cells
-OpenOffice.org Impress : aligning;draw objects
-OpenOffice.org Impress : aligning;objects
-OpenOffice.org Impress : aligning;paragraphs
-OpenOffice.org Impress : aligning;tables in text
-OpenOffice.org Impress : aligning;text objects
-OpenOffice.org Impress : aligning;titles in charts
-OpenOffice.org Impress : allowing
-OpenOffice.org Impress : allowing;effects
-OpenOffice.org Impress : allowing;interaction
-OpenOffice.org Impress : alternative fonts
-OpenOffice.org Impress : ampersand symbol, see also operators
-OpenOffice.org Impress : anchors
-OpenOffice.org Impress : anchors;changing
-OpenOffice.org Impress : anchors;displaying (Calc)
-OpenOffice.org Impress : anchors;types/positions for draw objects
-OpenOffice.org Impress : animated GIFs
-OpenOffice.org Impress : animated slide transitions
-OpenOffice.org Impress : animations
-OpenOffice.org Impress : animations;accessibility options
-OpenOffice.org Impress : animations;editing
-OpenOffice.org Impress : animations;list of
-OpenOffice.org Impress : animations;saving as GIFs
-OpenOffice.org Impress : appearance options
-OpenOffice.org Impress : applet insertion
-OpenOffice.org Impress : applying
-OpenOffice.org Impress : applying;animation effects
-OpenOffice.org Impress : applying;gradients
-OpenOffice.org Impress : applying;languages, to selected text
-OpenOffice.org Impress : Arabic
-OpenOffice.org Impress : Arabic;entering text
-OpenOffice.org Impress : Arabic;language settings
-OpenOffice.org Impress : area charts
-OpenOffice.org Impress : areas
-OpenOffice.org Impress : areas;bitmap patterns
-OpenOffice.org Impress : areas;from connected lines
-OpenOffice.org Impress : areas;hatched/dotted
-OpenOffice.org Impress : areas;shadows
-OpenOffice.org Impress : areas;slanting
-OpenOffice.org Impress : areas;styles
-OpenOffice.org Impress : areas;transparency
-OpenOffice.org Impress : arguments in command line
-OpenOffice.org Impress : arranging
-OpenOffice.org Impress : arranging;objects
-OpenOffice.org Impress : arranging;objects (guide)
-OpenOffice.org Impress : arranging;slides
-OpenOffice.org Impress : arrows
-OpenOffice.org Impress : arrows;defining arrow heads
-OpenOffice.org Impress : arrows;defining arrow lines
-OpenOffice.org Impress : arrows;drawing in text
-OpenOffice.org Impress : arrows;inserting
-OpenOffice.org Impress : arrows;loading arrow styles
-OpenOffice.org Impress : ASCII
-OpenOffice.org Impress : ASCII;definition
-OpenOffice.org Impress : Asian languages
-OpenOffice.org Impress : Asian languages;enabling
-OpenOffice.org Impress : Asian Phonetic Guide
-OpenOffice.org Impress : Asian typography
-OpenOffice.org Impress : assembled objects in 3D
-OpenOffice.org Impress : assigning scripts
-OpenOffice.org Impress : assistive technology in OpenOffice.org
-OpenOffice.org Impress : attaching toolbars
-OpenOffice.org Impress : attachments in e-mails
-OpenOffice.org Impress : attributes
-OpenOffice.org Impress : attributes;objects with
-OpenOffice.org Impress : audio
-OpenOffice.org Impress : audio;inserting
-OpenOffice.org Impress : audio;UNIX
-OpenOffice.org Impress : authors
-OpenOffice.org Impress : auto reloading HTML documents
-OpenOffice.org Impress : AutoAbstract function for sending text to presentations
-OpenOffice.org Impress : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Impress : AutoComplete function in text and list boxes
-OpenOffice.org Impress : AutoCorrect function
-OpenOffice.org Impress : AutoCorrect function;context menu
-OpenOffice.org Impress : AutoCorrect function;options
-OpenOffice.org Impress : AutoCorrect function;pictures and frames
-OpenOffice.org Impress : AutoCorrect function;quotes
-OpenOffice.org Impress : AutoCorrect function;replacement table
-OpenOffice.org Impress : AutoCorrect function;smart tags
-OpenOffice.org Impress : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Impress : AutoCorrect function;URL recognition
-OpenOffice.org Impress : AutoFormat function
-OpenOffice.org Impress : AutoFormat function;switching on and off
-OpenOffice.org Impress : automatic captions (Writer)
-OpenOffice.org Impress : automatic control focus
-OpenOffice.org Impress : automatic hyperlink formatting
-OpenOffice.org Impress : automatic line breaks
-OpenOffice.org Impress : automatic lines/borders in text
-OpenOffice.org Impress : automatic saving
-OpenOffice.org Impress : automatic slide changes
-OpenOffice.org Impress : automatic slide changes;rehearse timings
-OpenOffice.org Impress : automatic slide shows
-OpenOffice.org Impress : automatic slide transition
-OpenOffice.org Impress : AutoPilots, see wizards
-OpenOffice.org Impress : AutoShapes feature in Microsoft Office
-OpenOffice.org Impress : averages in charts
-OpenOffice.org Impress : axes
-OpenOffice.org Impress : axes;better scaling
-OpenOffice.org Impress : axes;formatting
-OpenOffice.org Impress : axes;formatting grids
-OpenOffice.org Impress : axes;inserting grids
-OpenOffice.org Impress : axes;interval marks
-OpenOffice.org Impress : axes;showing axes in charts
-OpenOffice.org Impress : axes in charts
-OpenOffice.org Impress : backgrounds
-OpenOffice.org Impress : backgrounds;changing
-OpenOffice.org Impress : backgrounds;defining colors/pictures
-OpenOffice.org Impress : backgrounds;deleting unused
-OpenOffice.org Impress : backgrounds;frames/sections/indexes
-OpenOffice.org Impress : backgrounds;inserting from Gallery
-OpenOffice.org Impress : backgrounds;normal view
-OpenOffice.org Impress : backgrounds;notes
-OpenOffice.org Impress : backgrounds;printing
-OpenOffice.org Impress : backgrounds;slides
-OpenOffice.org Impress : backing window
-OpenOffice.org Impress : backups
-OpenOffice.org Impress : backups;automatic
-OpenOffice.org Impress : backups;documents
-OpenOffice.org Impress : bar charts
-OpenOffice.org Impress : Basic
-OpenOffice.org Impress : Basic;fonts for source display
-OpenOffice.org Impress : Basic;programming
-OpenOffice.org Impress : Basic;recording macros
-OpenOffice.org Impress : Basic;scripting
-OpenOffice.org Impress : basic fonts
-OpenOffice.org Impress : BeanShell scripting
-OpenOffice.org Impress : behind object command
-OpenOffice.org Impress : Bézier curves
-OpenOffice.org Impress : Bézier curves;control points in presentations
-OpenOffice.org Impress : bi-directional writing
-OpenOffice.org Impress : binding space
-OpenOffice.org Impress : bitmaps
-OpenOffice.org Impress : bitmaps;converting to
-OpenOffice.org Impress : bitmaps;converting to vector graphics
-OpenOffice.org Impress : bitmaps;inserting and editing
-OpenOffice.org Impress : bitmaps;off for faster printing
-OpenOffice.org Impress : bitmaps;patterns
-OpenOffice.org Impress : bitmaps;replacing colors
-OpenOffice.org Impress : black and white display
-OpenOffice.org Impress : black and white printing
-OpenOffice.org Impress : black and white view
-OpenOffice.org Impress : black printing in Calc
-OpenOffice.org Impress : block selection mode
-OpenOffice.org Impress : bold
-OpenOffice.org Impress : bold;AutoFormat function
-OpenOffice.org Impress : bold;text
-OpenOffice.org Impress : bookmarks
-OpenOffice.org Impress : bookmarks;Help
-OpenOffice.org Impress : borders
-OpenOffice.org Impress : borders;arranging
-OpenOffice.org Impress : borders;cells on screen (Calc)
-OpenOffice.org Impress : borders;for paragraphs
-OpenOffice.org Impress : borders;for tables
-OpenOffice.org Impress : borders;shadows
-OpenOffice.org Impress : borders;table boundaries (Writer)
-OpenOffice.org Impress : borders, see also frames
-OpenOffice.org Impress : bound fields
-OpenOffice.org Impress : bound fields;controls
-OpenOffice.org Impress : boundaries of tables (Writer)
-OpenOffice.org Impress : break display (Writer)
-OpenOffice.org Impress : breaking object connections
-OpenOffice.org Impress : brochures
-OpenOffice.org Impress : brochures;printing several
-OpenOffice.org Impress : build numbers of OpenOffice.org
-OpenOffice.org Impress : bullet lists
-OpenOffice.org Impress : bullet lists;formatting options
-OpenOffice.org Impress : bullets
-OpenOffice.org Impress : bullets;paragraphs
-OpenOffice.org Impress : bullets;replacing
-OpenOffice.org Impress : bullets;turning off
-OpenOffice.org Impress : business cards
-OpenOffice.org Impress : business cards;creating and synchronizing
-OpenOffice.org Impress : business cards;using templates
-OpenOffice.org Impress : button bars, see toolbars
-OpenOffice.org Impress : buttons
-OpenOffice.org Impress : buttons;adding push buttons
-OpenOffice.org Impress : buttons;big/small
-OpenOffice.org Impress : buttons;editing hyperlink buttons
-OpenOffice.org Impress : buttons;form functions
-OpenOffice.org Impress : buttons;toolbars
-OpenOffice.org Impress : cache for graphics
-OpenOffice.org Impress : calculating
-OpenOffice.org Impress : calculating;iterative references (Calc)
-OpenOffice.org Impress : calculating;regression curves
-OpenOffice.org Impress : callouts
-OpenOffice.org Impress : callouts;drawings
-OpenOffice.org Impress : callouts;inserting in presentations
-OpenOffice.org Impress : capital letters
-OpenOffice.org Impress : capital letters;AutoCorrect function
-OpenOffice.org Impress : capital letters;font effects
-OpenOffice.org Impress : captions
-OpenOffice.org Impress : captions;automatic captions (Writer)
-OpenOffice.org Impress : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Impress : captions, see also labels/callouts
-OpenOffice.org Impress : cascading update (Base)
-OpenOffice.org Impress : case sensitivity
-OpenOffice.org Impress : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Impress : case sensitivity;searching
-OpenOffice.org Impress : cells
-OpenOffice.org Impress : cells;aligning
-OpenOffice.org Impress : cells;backgrounds
-OpenOffice.org Impress : cells;coloring (Calc)
-OpenOffice.org Impress : cells;cursor positions after input (Calc)
-OpenOffice.org Impress : cells;formatting without effect (Calc)
-OpenOffice.org Impress : cells;line breaks
-OpenOffice.org Impress : cells;linked to controls
-OpenOffice.org Impress : cells;number formats
-OpenOffice.org Impress : cells;number of
-OpenOffice.org Impress : cells;pasting
-OpenOffice.org Impress : cells;resetting formats
-OpenOffice.org Impress : cells;showing grid lines (Calc)
-OpenOffice.org Impress : centered text
-OpenOffice.org Impress : centimeters
-OpenOffice.org Impress : certificates
-OpenOffice.org Impress : Change Case feature in Microsoft Office
-OpenOffice.org Impress : changes
-OpenOffice.org Impress : changes;accepting or rejecting
-OpenOffice.org Impress : changes;comparing to original
-OpenOffice.org Impress : changes;protecting
-OpenOffice.org Impress : changes;recording
-OpenOffice.org Impress : changes;review function
-OpenOffice.org Impress : changes;showing
-OpenOffice.org Impress : changing
-OpenOffice.org Impress : changing;data binding of XForms
-OpenOffice.org Impress : changing;default templates
-OpenOffice.org Impress : changing;document titles
-OpenOffice.org Impress : changing;file associations in Setup program
-OpenOffice.org Impress : changing;hyperlink text/formats/URLs
-OpenOffice.org Impress : changing;icon sizes
-OpenOffice.org Impress : changing;keyboard
-OpenOffice.org Impress : changing;layer properties
-OpenOffice.org Impress : changing;layout for handouts
-OpenOffice.org Impress : changing;links
-OpenOffice.org Impress : changing;menus
-OpenOffice.org Impress : changing;object sizes
-OpenOffice.org Impress : changing;order of slides
-OpenOffice.org Impress : changing;slide layouts
-OpenOffice.org Impress : changing;toolbars
-OpenOffice.org Impress : changing;work directory
-OpenOffice.org Impress : changing, see also editing and replacing
-OpenOffice.org Impress : character styles
-OpenOffice.org Impress : character styles;language selection
-OpenOffice.org Impress : characters
-OpenOffice.org Impress : characters;alternative fonts
-OpenOffice.org Impress : characters;Asian layout
-OpenOffice.org Impress : characters;bold
-OpenOffice.org Impress : characters;coloring
-OpenOffice.org Impress : characters;contours
-OpenOffice.org Impress : characters;converting to curves
-OpenOffice.org Impress : characters;displaying only on screen (Writer)
-OpenOffice.org Impress : characters;enabling CTL and Asian characters
-OpenOffice.org Impress : characters;font effects
-OpenOffice.org Impress : characters;fonts and formats
-OpenOffice.org Impress : characters;hyperlinks
-OpenOffice.org Impress : characters;italics
-OpenOffice.org Impress : characters;language selection
-OpenOffice.org Impress : characters;shadowed
-OpenOffice.org Impress : characters;spacing
-OpenOffice.org Impress : characters;special
-OpenOffice.org Impress : characters;underlining
-OpenOffice.org Impress : charcoal sketches filter
-OpenOffice.org Impress : chart legends
-OpenOffice.org Impress : chart legends;hiding
-OpenOffice.org Impress : chart legends;showing icons with labels
-OpenOffice.org Impress : chart types
-OpenOffice.org Impress : chart types;area
-OpenOffice.org Impress : chart types;column and bar
-OpenOffice.org Impress : chart types;column and line
-OpenOffice.org Impress : chart types;line
-OpenOffice.org Impress : chart types;net
-OpenOffice.org Impress : chart types;pie/donut
-OpenOffice.org Impress : chart types;stock
-OpenOffice.org Impress : chart types;XY (scatter)
-OpenOffice.org Impress : charts
-OpenOffice.org Impress : charts;3D views
-OpenOffice.org Impress : charts;aligning
-OpenOffice.org Impress : charts;arranging within stacks
-OpenOffice.org Impress : charts;bars with textures
-OpenOffice.org Impress : charts;choosing chart types
-OpenOffice.org Impress : charts;colors
-OpenOffice.org Impress : charts;copying with link to source cell range
-OpenOffice.org Impress : charts;data labels
-OpenOffice.org Impress : charts;displaying (Calc)
-OpenOffice.org Impress : charts;editing axes
-OpenOffice.org Impress : charts;editing data
-OpenOffice.org Impress : charts;editing legends
-OpenOffice.org Impress : charts;editing titles
-OpenOffice.org Impress : charts;formatting areas
-OpenOffice.org Impress : charts;formatting floors
-OpenOffice.org Impress : charts;formatting walls
-OpenOffice.org Impress : charts;inserting
-OpenOffice.org Impress : charts;overview
-OpenOffice.org Impress : charts;properties
-OpenOffice.org Impress : charts;reorganizing
-OpenOffice.org Impress : charts;scaling axes
-OpenOffice.org Impress : charts;scaling text
-OpenOffice.org Impress : charts;shortcuts
-OpenOffice.org Impress : charts;showing axes
-OpenOffice.org Impress : charts;updating automatically (Writer)
-OpenOffice.org Impress : check box creation
-OpenOffice.org Impress : Chinese writing systems
-OpenOffice.org Impress : choosing printers
-OpenOffice.org Impress : circle drawings
-OpenOffice.org Impress : circle segments
-OpenOffice.org Impress : circles
-OpenOffice.org Impress : circles;of objects
-OpenOffice.org Impress : Client Side ImageMap
-OpenOffice.org Impress : clipboard
-OpenOffice.org Impress : clipboard;cutting
-OpenOffice.org Impress : clipboard;pasting
-OpenOffice.org Impress : clipboard;pasting formatted/unformatted text
-OpenOffice.org Impress : clipboard;selection clipboard
-OpenOffice.org Impress : clipboard;Unix
-OpenOffice.org Impress : closing
-OpenOffice.org Impress : closing;documents
-OpenOffice.org Impress : closing;shapes
-OpenOffice.org Impress : closing;toolbars
-OpenOffice.org Impress : color bar
-OpenOffice.org Impress : colors
-OpenOffice.org Impress : colors;adding
-OpenOffice.org Impress : colors;appearance
-OpenOffice.org Impress : colors;backgrounds
-OpenOffice.org Impress : colors;charts
-OpenOffice.org Impress : colors;default colors
-OpenOffice.org Impress : colors;defining and saving
-OpenOffice.org Impress : colors;defining gradients interactively
-OpenOffice.org Impress : colors;displaying presentations
-OpenOffice.org Impress : colors;fill format
-OpenOffice.org Impress : colors;fonts
-OpenOffice.org Impress : colors;grid lines and cells (Calc)
-OpenOffice.org Impress : colors;loading lists
-OpenOffice.org Impress : colors;models
-OpenOffice.org Impress : colors;not printing
-OpenOffice.org Impress : colors;printing in grayscale
-OpenOffice.org Impress : colors;replacing
-OpenOffice.org Impress : colors;restriction (Calc)
-OpenOffice.org Impress : colors;selection
-OpenOffice.org Impress : column and line charts
-OpenOffice.org Impress : column charts
-OpenOffice.org Impress : column headers
-OpenOffice.org Impress : column headers;displaying (Calc)
-OpenOffice.org Impress : column headers;highlighting (Calc)
-OpenOffice.org Impress : columns
-OpenOffice.org Impress : columns;setting with the mouse
-OpenOffice.org Impress : combination charts
-OpenOffice.org Impress : combining
-OpenOffice.org Impress : combining;3D objects
-OpenOffice.org Impress : combining;draw objects
-OpenOffice.org Impress : combining;undoing
-OpenOffice.org Impress : combo box creation
-OpenOffice.org Impress : command button creation
-OpenOffice.org Impress : command buttons, see push buttons
-OpenOffice.org Impress : command line parameters
-OpenOffice.org Impress : commands
-OpenOffice.org Impress : commands;not visible
-OpenOffice.org Impress : commands;SQL
-OpenOffice.org Impress : comments
-OpenOffice.org Impress : comments;on changes
-OpenOffice.org Impress : comments feature in Microsoft Office
-OpenOffice.org Impress : common terms
-OpenOffice.org Impress : common terms;Chinese dictionary
-OpenOffice.org Impress : common terms;glossaries
-OpenOffice.org Impress : common terms;Internet glossary
-OpenOffice.org Impress : Compare and Merge feature in Microsoft Office
-OpenOffice.org Impress : comparisons
-OpenOffice.org Impress : comparisons;document versions
-OpenOffice.org Impress : comparisons;operators in default filter dialog
-OpenOffice.org Impress : compatibility settings for MS Word import
-OpenOffice.org Impress : complete screen view
-OpenOffice.org Impress : complex text layout
-OpenOffice.org Impress : complex text layout;definition
-OpenOffice.org Impress : complex text layout;enabling
-OpenOffice.org Impress : compose key to insert special characters
-OpenOffice.org Impress : concatenation, see ampersand symbol
-OpenOffice.org Impress : conditional separators
-OpenOffice.org Impress : conditions
-OpenOffice.org Impress : conditions;in number formats
-OpenOffice.org Impress : conditions;items in Data Navigator
-OpenOffice.org Impress : cones
-OpenOffice.org Impress : Configuration Manager
-OpenOffice.org Impress : configuring
-OpenOffice.org Impress : configuring;fax icon
-OpenOffice.org Impress : configuring;OpenOffice.org
-OpenOffice.org Impress : configuring;toolbars
-OpenOffice.org Impress : connecting
-OpenOffice.org Impress : connecting;draw objects
-OpenOffice.org Impress : connecting;lines
-OpenOffice.org Impress : connecting;paths and objects
-OpenOffice.org Impress : connections to data sources (Base)
-OpenOffice.org Impress : connectors
-OpenOffice.org Impress : connectors;properties of
-OpenOffice.org Impress : connectors;using
-OpenOffice.org Impress : constructing shapes
-OpenOffice.org Impress : contents protection
-OpenOffice.org Impress : context menus
-OpenOffice.org Impress : contours
-OpenOffice.org Impress : contours;converting to
-OpenOffice.org Impress : contours of text
-OpenOffice.org Impress : control point display in presentations
-OpenOffice.org Impress : control points definition
-OpenOffice.org Impress : controls
-OpenOffice.org Impress : controls;activating in forms
-OpenOffice.org Impress : controls;adding to documents
-OpenOffice.org Impress : controls;arranging in forms
-OpenOffice.org Impress : controls;arranging within stacks
-OpenOffice.org Impress : controls;assigning data sources
-OpenOffice.org Impress : controls;bound fields/list contents/linked cells
-OpenOffice.org Impress : controls;events
-OpenOffice.org Impress : controls;focus
-OpenOffice.org Impress : controls;formatted fields
-OpenOffice.org Impress : controls;grouping
-OpenOffice.org Impress : controls;hidden
-OpenOffice.org Impress : controls;inserting
-OpenOffice.org Impress : controls;multi-line titles
-OpenOffice.org Impress : controls;positions and sizes
-OpenOffice.org Impress : controls;printing
-OpenOffice.org Impress : controls;properties of form controls
-OpenOffice.org Impress : controls;properties of table controls
-OpenOffice.org Impress : controls;reference by SQL
-OpenOffice.org Impress : controls;rich text control
-OpenOffice.org Impress : controls;select mode
-OpenOffice.org Impress : controls;showing (Writer)
-OpenOffice.org Impress : converters
-OpenOffice.org Impress : converters;Euro converter
-OpenOffice.org Impress : converters;PostScript, UNIX
-OpenOffice.org Impress : converters;XML
-OpenOffice.org Impress : converting
-OpenOffice.org Impress : converting;bitmaps to polygons
-OpenOffice.org Impress : converting;Hangul/Hanja
-OpenOffice.org Impress : converting;metrics
-OpenOffice.org Impress : converting;Microsoft documents
-OpenOffice.org Impress : converting;OpenOffice.org documents
-OpenOffice.org Impress : converting;Pocket PC formats
-OpenOffice.org Impress : converting;points
-OpenOffice.org Impress : converting;text to curves
-OpenOffice.org Impress : converting;to bitmaps
-OpenOffice.org Impress : converting;to contours
-OpenOffice.org Impress : converting;to curves, polygons, 3D
-OpenOffice.org Impress : converting;to metafile format (WMF)
-OpenOffice.org Impress : copies
-OpenOffice.org Impress : copies;printing
-OpenOffice.org Impress : copying
-OpenOffice.org Impress : copying;by drag and drop
-OpenOffice.org Impress : copying;data from text documents
-OpenOffice.org Impress : copying;datasource records in spreadsheets
-OpenOffice.org Impress : copying;draw objects
-OpenOffice.org Impress : copying;draw objects between documents
-OpenOffice.org Impress : copying;formatting
-OpenOffice.org Impress : copying;from data source view
-OpenOffice.org Impress : copying;from Gallery
-OpenOffice.org Impress : copying;in Unix
-OpenOffice.org Impress : copying;pictures, between documents
-OpenOffice.org Impress : copying;sheet areas, to text documents
-OpenOffice.org Impress : copying;slides
-OpenOffice.org Impress : copying;text from other documents
-OpenOffice.org Impress : copying;to Gallery
-OpenOffice.org Impress : copyright for OpenOffice.org
-OpenOffice.org Impress : corner points
-OpenOffice.org Impress : corner roundings
-OpenOffice.org Impress : covered objects
-OpenOffice.org Impress : crash reports
-OpenOffice.org Impress : criteria of query design (Base)
-OpenOffice.org Impress : cropping pictures
-OpenOffice.org Impress : cross-fading
-OpenOffice.org Impress : cross-fading;creating cross-fades
-OpenOffice.org Impress : cross-fading;slides
-OpenOffice.org Impress : cross-fading;two draw objects
-OpenOffice.org Impress : CTL
-OpenOffice.org Impress : CTL;complex text layout languages
-OpenOffice.org Impress : CTL;definition
-OpenOffice.org Impress : CTL;options
-OpenOffice.org Impress : cubes
-OpenOffice.org Impress : currencies
-OpenOffice.org Impress : currencies;converters
-OpenOffice.org Impress : currencies;formats and format codes
-OpenOffice.org Impress : currency field creation
-OpenOffice.org Impress : currency formats
-OpenOffice.org Impress : cursor
-OpenOffice.org Impress : cursor;allowing in protected areas (Writer)
-OpenOffice.org Impress : cursor;in read-only text
-OpenOffice.org Impress : cursor;quickly moving to an object
-OpenOffice.org Impress : curves
-OpenOffice.org Impress : curves;converting text to
-OpenOffice.org Impress : curves;drawing
-OpenOffice.org Impress : curves;editing
-OpenOffice.org Impress : curves;editing points
-OpenOffice.org Impress : curves;properties in line charts/XY charts
-OpenOffice.org Impress : curves;toolbar
-OpenOffice.org Impress : custom animation
-OpenOffice.org Impress : custom colors
-OpenOffice.org Impress : custom dictionaries
-OpenOffice.org Impress : custom dictionaries;editing
-OpenOffice.org Impress : custom gradients
-OpenOffice.org Impress : custom hyphens (Writer)
-OpenOffice.org Impress : custom quotes
-OpenOffice.org Impress : custom slide shows
-OpenOffice.org Impress : custom templates
-OpenOffice.org Impress : customizing
-OpenOffice.org Impress : customizing;events
-OpenOffice.org Impress : customizing;keyboard
-OpenOffice.org Impress : customizing;menus
-OpenOffice.org Impress : customizing;OpenOffice.org
-OpenOffice.org Impress : customizing;round corners
-OpenOffice.org Impress : customizing;toolbars
-OpenOffice.org Impress : cutting
-OpenOffice.org Impress : cylinders
-OpenOffice.org Impress : dashes
-OpenOffice.org Impress : data
-OpenOffice.org Impress : data;filtering in forms
-OpenOffice.org Impress : data;forms and subforms
-OpenOffice.org Impress : data;read-only
-OpenOffice.org Impress : data;sorting in forms
-OpenOffice.org Impress : data;user data
-OpenOffice.org Impress : data binding change in XForms
-OpenOffice.org Impress : data labels in charts
-OpenOffice.org Impress : Data Navigator display options
-OpenOffice.org Impress : data ranges in charts
-OpenOffice.org Impress : data series
-OpenOffice.org Impress : data source browser
-OpenOffice.org Impress : data source explorer
-OpenOffice.org Impress : data source view
-OpenOffice.org Impress : data source view;drag and drop
-OpenOffice.org Impress : data source view;overview
-OpenOffice.org Impress : data source view;showing
-OpenOffice.org Impress : data sources
-OpenOffice.org Impress : data sources;as tables
-OpenOffice.org Impress : data sources;connection settings (Base)
-OpenOffice.org Impress : data sources;copying records to spreadsheets
-OpenOffice.org Impress : data sources;displaying current
-OpenOffice.org Impress : data sources;LDAP server (Base)
-OpenOffice.org Impress : data sources;OpenOffice.org Base
-OpenOffice.org Impress : data sources;registering address books
-OpenOffice.org Impress : data sources;reports
-OpenOffice.org Impress : data sources;setting for stock charts
-OpenOffice.org Impress : data sources;viewing
-OpenOffice.org Impress : data structure of XForms
-OpenOffice.org Impress : data values in charts
-OpenOffice.org Impress : database contents
-OpenOffice.org Impress : database contents;inserting as tables
-OpenOffice.org Impress : database contents;inserting as text
-OpenOffice.org Impress : database reports
-OpenOffice.org Impress : Database Wizard (Base)
-OpenOffice.org Impress : databases
-OpenOffice.org Impress : databases;administration through SQL (Base)
-OpenOffice.org Impress : databases;ADO (Base)
-OpenOffice.org Impress : databases;connecting (Base)
-OpenOffice.org Impress : databases;creating
-OpenOffice.org Impress : databases;creating labels
-OpenOffice.org Impress : databases;creating queries
-OpenOffice.org Impress : databases;creating reports
-OpenOffice.org Impress : databases;creating tables
-OpenOffice.org Impress : databases;dBASE (Base)
-OpenOffice.org Impress : databases;deleting (Base)
-OpenOffice.org Impress : databases;drag and drop (Base)
-OpenOffice.org Impress : databases;editing tables
-OpenOffice.org Impress : databases;form filters
-OpenOffice.org Impress : databases;formats (Base)
-OpenOffice.org Impress : databases;importing/exporting
-OpenOffice.org Impress : databases;JDBC (Base)
-OpenOffice.org Impress : databases;main page (Base)
-OpenOffice.org Impress : databases;MySQL (Base)
-OpenOffice.org Impress : databases;ODBC (Base)
-OpenOffice.org Impress : databases;overview
-OpenOffice.org Impress : databases;registering (Base)
-OpenOffice.org Impress : databases;searching records
-OpenOffice.org Impress : databases;shortcut keys
-OpenOffice.org Impress : databases;sorting
-OpenOffice.org Impress : databases;standard filters
-OpenOffice.org Impress : databases;text formats
-OpenOffice.org Impress : databases;viewing
-OpenOffice.org Impress : date fields
-OpenOffice.org Impress : date fields;creating
-OpenOffice.org Impress : date fields;properties
-OpenOffice.org Impress : date formats
-OpenOffice.org Impress : date on all slides
-OpenOffice.org Impress : dates
-OpenOffice.org Impress : dates;default (Calc)
-OpenOffice.org Impress : dates;fixed
-OpenOffice.org Impress : dates;printing in presentations
-OpenOffice.org Impress : dates;start 1900/01/01 (Calc)
-OpenOffice.org Impress : dates;start 1904/01/01 (Calc)
-OpenOffice.org Impress : dates;variable
-OpenOffice.org Impress : dBASE
-OpenOffice.org Impress : dBASE;database settings (Base)
-OpenOffice.org Impress : DDE
-OpenOffice.org Impress : DDE;definition
-OpenOffice.org Impress : deactivating
-OpenOffice.org Impress : deactivating;plug-ins
-OpenOffice.org Impress : decimal places displayed (Calc)
-OpenOffice.org Impress : decimal separator key
-OpenOffice.org Impress : decimal tab stops
-OpenOffice.org Impress : decreasing sizes of views
-OpenOffice.org Impress : default directories
-OpenOffice.org Impress : default file formats
-OpenOffice.org Impress : default filters
-OpenOffice.org Impress : default filters;comparison operators
-OpenOffice.org Impress : default filters;databases
-OpenOffice.org Impress : default printer
-OpenOffice.org Impress : default printer;setting up
-OpenOffice.org Impress : default printer;UNIX
-OpenOffice.org Impress : default templates
-OpenOffice.org Impress : default templates;changing
-OpenOffice.org Impress : default templates;organizing
-OpenOffice.org Impress : defaults
-OpenOffice.org Impress : defaults;documents
-OpenOffice.org Impress : defaults;file formats
-OpenOffice.org Impress : defaults;fonts
-OpenOffice.org Impress : defaults;grids (Writer/Calc)
-OpenOffice.org Impress : defaults;languages
-OpenOffice.org Impress : defaults;number formats
-OpenOffice.org Impress : defaults;of saving
-OpenOffice.org Impress : defaults;program configuration
-OpenOffice.org Impress : defaults;tab stops in text
-OpenOffice.org Impress : defaults;views
-OpenOffice.org Impress : defining
-OpenOffice.org Impress : defining;arrowheads and other line ends
-OpenOffice.org Impress : defining;colors
-OpenOffice.org Impress : defining;gradients
-OpenOffice.org Impress : defining;line styles
-OpenOffice.org Impress : defining;paragraph borders
-OpenOffice.org Impress : defining;queries (Base)
-OpenOffice.org Impress : defining;table borders
-OpenOffice.org Impress : deleting
-OpenOffice.org Impress : deleting;all direct formatting
-OpenOffice.org Impress : deleting;animation effects
-OpenOffice.org Impress : deleting;databases (Base)
-OpenOffice.org Impress : deleting;hyperlinks
-OpenOffice.org Impress : deleting;layers
-OpenOffice.org Impress : deleting;lines in text
-OpenOffice.org Impress : deleting;models/instances
-OpenOffice.org Impress : deleting;namespaces in XForms
-OpenOffice.org Impress : deleting;points
-OpenOffice.org Impress : deleting;slide transition effects
-OpenOffice.org Impress : deleting;slides
-OpenOffice.org Impress : deleting;tab stops
-OpenOffice.org Impress : deleting;templates
-OpenOffice.org Impress : deleting;XML filters
-OpenOffice.org Impress : depth stagger
-OpenOffice.org Impress : descriptions for objects
-OpenOffice.org Impress : design mode after saving
-OpenOffice.org Impress : design view
-OpenOffice.org Impress : design view;creating forms
-OpenOffice.org Impress : design view;queries/views (Base)
-OpenOffice.org Impress : designing
-OpenOffice.org Impress : designing;database tables
-OpenOffice.org Impress : designing;fonts
-OpenOffice.org Impress : designing;queries (Base)
-OpenOffice.org Impress : detaching toolbars
-OpenOffice.org Impress : dictionaries
-OpenOffice.org Impress : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Impress : dictionaries;creating
-OpenOffice.org Impress : dictionaries;editing user-defined
-OpenOffice.org Impress : dictionaries;spellcheck
-OpenOffice.org Impress : dictionaries, see also languages
-OpenOffice.org Impress : digital signatures
-OpenOffice.org Impress : dimension lines
-OpenOffice.org Impress : dimension lines;drawing
-OpenOffice.org Impress : dimension lines;properties of
-OpenOffice.org Impress : direct formatting
-OpenOffice.org Impress : direct formatting;undoing all
-OpenOffice.org Impress : directories
-OpenOffice.org Impress : directories;creating new
-OpenOffice.org Impress : directories;directory structure
-OpenOffice.org Impress : disabled persons
-OpenOffice.org Impress : display qualities of presentations
-OpenOffice.org Impress : displaying
-OpenOffice.org Impress : displaying;non-printing characters (Writer)
-OpenOffice.org Impress : displaying;notes (Calc)
-OpenOffice.org Impress : displaying;notes in text documents
-OpenOffice.org Impress : displaying;pictures and objects (Writer)
-OpenOffice.org Impress : displaying;tables (Writer)
-OpenOffice.org Impress : displaying;zero values (Calc)
-OpenOffice.org Impress : distances
-OpenOffice.org Impress : distinct values in SQL queries
-OpenOffice.org Impress : distorting in drawings
-OpenOffice.org Impress : distorting objects
-OpenOffice.org Impress : distributing draw objects
-OpenOffice.org Impress : distributing XML filters
-OpenOffice.org Impress : dithering
-OpenOffice.org Impress : docking
-OpenOffice.org Impress : docking;definition
-OpenOffice.org Impress : docking;toolbars
-OpenOffice.org Impress : docking;windows
-OpenOffice.org Impress : Document Converter Wizard
-OpenOffice.org Impress : Document Map feature in Microsoft Office
-OpenOffice.org Impress : Document Map, see Navigator
-OpenOffice.org Impress : document types in OpenOffice.org
-OpenOffice.org Impress : documents
-OpenOffice.org Impress : documents;changing titles
-OpenOffice.org Impress : documents;closing
-OpenOffice.org Impress : documents;comparing
-OpenOffice.org Impress : documents;contents as lists
-OpenOffice.org Impress : documents;editing time
-OpenOffice.org Impress : documents;exporting
-OpenOffice.org Impress : documents;importing
-OpenOffice.org Impress : documents;languages
-OpenOffice.org Impress : documents;measurement units in
-OpenOffice.org Impress : documents;merging
-OpenOffice.org Impress : documents;number of pages/tables/sheets
-OpenOffice.org Impress : documents;opening
-OpenOffice.org Impress : documents;opening in design mode
-OpenOffice.org Impress : documents;opening with templates
-OpenOffice.org Impress : documents;organizing
-OpenOffice.org Impress : documents;printing
-OpenOffice.org Impress : documents;read-only
-OpenOffice.org Impress : documents;reloading
-OpenOffice.org Impress : documents;saving
-OpenOffice.org Impress : documents;saving automatically
-OpenOffice.org Impress : documents;saving in other formats
-OpenOffice.org Impress : documents;sending as e-mail
-OpenOffice.org Impress : documents;styles changed
-OpenOffice.org Impress : documents;version management
-OpenOffice.org Impress : documents;version numbers
-OpenOffice.org Impress : donut charts
-OpenOffice.org Impress : dotted areas
-OpenOffice.org Impress : double-line spacing in paragraphs
-OpenOffice.org Impress : double-line writing in Asian layout
-OpenOffice.org Impress : doubling draw objects
-OpenOffice.org Impress : drag and drop
-OpenOffice.org Impress : drag and drop;copying and pasting text
-OpenOffice.org Impress : drag and drop;data source view
-OpenOffice.org Impress : drag and drop;from Gallery to draw objects
-OpenOffice.org Impress : drag and drop;overview
-OpenOffice.org Impress : drag and drop;pictures
-OpenOffice.org Impress : drag and drop;to Gallery
-OpenOffice.org Impress : Draw instructions
-OpenOffice.org Impress : draw objects
-OpenOffice.org Impress : draw objects;adding/editing/copying
-OpenOffice.org Impress : draw objects;anchoring
-OpenOffice.org Impress : draw objects;arranging within stacks
-OpenOffice.org Impress : draw objects;combining
-OpenOffice.org Impress : draw objects;connecting lines to
-OpenOffice.org Impress : draw objects;converting text to
-OpenOffice.org Impress : draw objects;copying
-OpenOffice.org Impress : draw objects;copying between documents
-OpenOffice.org Impress : draw objects;cross-fading two objects
-OpenOffice.org Impress : draw objects;displaying (Calc)
-OpenOffice.org Impress : draw objects;dropping Gallery pictures
-OpenOffice.org Impress : draw objects;duplicating
-OpenOffice.org Impress : draw objects;flipping
-OpenOffice.org Impress : draw objects;grouping
-OpenOffice.org Impress : draw objects;legends
-OpenOffice.org Impress : draw objects;positioning and resizing
-OpenOffice.org Impress : draw objects;protecting
-OpenOffice.org Impress : draw objects;rotating
-OpenOffice.org Impress : draw objects;slanting
-OpenOffice.org Impress : draw objects;text entry mode
-OpenOffice.org Impress : draw objects;text in
-OpenOffice.org Impress : drawing
-OpenOffice.org Impress : drawing;3D objects
-OpenOffice.org Impress : drawing;freeform lines
-OpenOffice.org Impress : drawing;lines
-OpenOffice.org Impress : drawing;sectors and segments
-OpenOffice.org Impress : Drawing bar
-OpenOffice.org Impress : drawing lines in text
-OpenOffice.org Impress : drawings
-OpenOffice.org Impress : drawings;creating/opening
-OpenOffice.org Impress : drawings;languages
-OpenOffice.org Impress : drawings;printing
-OpenOffice.org Impress : drawings;printing defaults
-OpenOffice.org Impress : drawings;printing in text documents
-OpenOffice.org Impress : drawings;saving
-OpenOffice.org Impress : drawings;saving automatically
-OpenOffice.org Impress : drawings;saving in other formats
-OpenOffice.org Impress : drawings;sending as e-mail
-OpenOffice.org Impress : drawings;shortcut keys
-OpenOffice.org Impress : drawings;showing (Writer)
-OpenOffice.org Impress : drawings;zoom function in
-OpenOffice.org Impress : drop-down lists in form functions
-OpenOffice.org Impress : duplicating draw objects
-OpenOffice.org Impress : e-mail attachments
-OpenOffice.org Impress : Edit File icon
-OpenOffice.org Impress : edit mode
-OpenOffice.org Impress : edit mode;after opening
-OpenOffice.org Impress : edit mode;through Enter key (Calc)
-OpenOffice.org Impress : Edit Points bar
-OpenOffice.org Impress : editing
-OpenOffice.org Impress : editing;chart axes
-OpenOffice.org Impress : editing;chart data
-OpenOffice.org Impress : editing;chart legends
-OpenOffice.org Impress : editing;chart titles
-OpenOffice.org Impress : editing;curves
-OpenOffice.org Impress : editing;data binding of XForms
-OpenOffice.org Impress : editing;database tables and queries
-OpenOffice.org Impress : editing;draw objects
-OpenOffice.org Impress : editing;fields
-OpenOffice.org Impress : editing;Fontwork objects
-OpenOffice.org Impress : editing;glue points
-OpenOffice.org Impress : editing;gradients
-OpenOffice.org Impress : editing;guides and snap points
-OpenOffice.org Impress : editing;hyperlinks
-OpenOffice.org Impress : editing;items in Data Navigator
-OpenOffice.org Impress : editing;menus
-OpenOffice.org Impress : editing;namespaces in XForms
-OpenOffice.org Impress : editing;notes
-OpenOffice.org Impress : editing;objects
-OpenOffice.org Impress : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Impress : editing;pictures
-OpenOffice.org Impress : editing;reports
-OpenOffice.org Impress : editing;shortcut keys
-OpenOffice.org Impress : editing;slide titles
-OpenOffice.org Impress : editing;tab stops
-OpenOffice.org Impress : editing;templates
-OpenOffice.org Impress : editing;titles
-OpenOffice.org Impress : editing;toolbars
-OpenOffice.org Impress : editing;undoing
-OpenOffice.org Impress : editing;XForms
-OpenOffice.org Impress : editing time of documents
-OpenOffice.org Impress : editors
-OpenOffice.org Impress : editors;formula editor
-OpenOffice.org Impress : editors;ImageMap editor
-OpenOffice.org Impress : effects
-OpenOffice.org Impress : effects;animated slide transitions
-OpenOffice.org Impress : effects;applying to/removing from objects
-OpenOffice.org Impress : effects;font positions
-OpenOffice.org Impress : effects;fonts
-OpenOffice.org Impress : effects;Fontwork icons
-OpenOffice.org Impress : effects;preview
-OpenOffice.org Impress : effects;sounds
-OpenOffice.org Impress : ellipses
-OpenOffice.org Impress : ellipses;segments
-OpenOffice.org Impress : ellipses;toolbars
-OpenOffice.org Impress : empty documents
-OpenOffice.org Impress : empty paragraph removal
-OpenOffice.org Impress : encryption of contents
-OpenOffice.org Impress : entering groups
-OpenOffice.org Impress : entering text from right to left
-OpenOffice.org Impress : equal sign, see also operators
-OpenOffice.org Impress : equations in formula editor
-OpenOffice.org Impress : error bars in charts
-OpenOffice.org Impress : error indicators in charts
-OpenOffice.org Impress : Error Report Tool
-OpenOffice.org Impress : Euro
-OpenOffice.org Impress : Euro;currency formats
-OpenOffice.org Impress : Euro;Euro Converter Wizard
-OpenOffice.org Impress : even/odd pages
-OpenOffice.org Impress : even/odd pages;printing
-OpenOffice.org Impress : events
-OpenOffice.org Impress : events;controls
-OpenOffice.org Impress : events;customizing
-OpenOffice.org Impress : events;in forms
-OpenOffice.org Impress : Excel
-OpenOffice.org Impress : Excel;saving as
-OpenOffice.org Impress : Excel;search criteria
-OpenOffice.org Impress : exceptions
-OpenOffice.org Impress : exceptions;user-defined dictionaries
-OpenOffice.org Impress : exchanging, see also replacing
-OpenOffice.org Impress : executing
-OpenOffice.org Impress : executing;SQL commands
-OpenOffice.org Impress : exiting
-OpenOffice.org Impress : exiting;by clicking objects
-OpenOffice.org Impress : exiting;groups
-OpenOffice.org Impress : exiting;OpenOffice.org
-OpenOffice.org Impress : expanding
-OpenOffice.org Impress : expanding;slides
-OpenOffice.org Impress : expanding formatting (Calc)
-OpenOffice.org Impress : explorer of data sources
-OpenOffice.org Impress : export filters
-OpenOffice.org Impress : exporting
-OpenOffice.org Impress : exporting;animations to GIF format
-OpenOffice.org Impress : exporting;bitmaps
-OpenOffice.org Impress : exporting;databases
-OpenOffice.org Impress : exporting;HTML and text documents
-OpenOffice.org Impress : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Impress : exporting;presentations to HTML
-OpenOffice.org Impress : exporting;spreadsheets to text format
-OpenOffice.org Impress : exporting;templates
-OpenOffice.org Impress : exporting;to foreign formats
-OpenOffice.org Impress : exporting;to HTML
-OpenOffice.org Impress : exporting;to Macromedia Flash format
-OpenOffice.org Impress : exporting;to Microsoft Office formats
-OpenOffice.org Impress : exporting;to PDF
-OpenOffice.org Impress : exporting;to PostScript format
-OpenOffice.org Impress : exporting;to XML
-OpenOffice.org Impress : exporting;XML files
-OpenOffice.org Impress : extended tips in Help
-OpenOffice.org Impress : extension mode in text
-OpenOffice.org Impress : extensions
-OpenOffice.org Impress : extensions;Extension Manager
-OpenOffice.org Impress : extensions;file formats
-OpenOffice.org Impress : external keys (Base)
-OpenOffice.org Impress : extrusion objects
-OpenOffice.org Impress : eyedropper tool
-OpenOffice.org Impress : faster printing
-OpenOffice.org Impress : faxes
-OpenOffice.org Impress : faxes;configuring OpenOffice.org
-OpenOffice.org Impress : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Impress : faxes;selecting a fax machine
-OpenOffice.org Impress : faxes;sending
-OpenOffice.org Impress : faxes;wizards
-OpenOffice.org Impress : fields
-OpenOffice.org Impress : fields;authors
-OpenOffice.org Impress : fields;database tables
-OpenOffice.org Impress : fields;dates (fixed)
-OpenOffice.org Impress : fields;dates (variable)
-OpenOffice.org Impress : fields;displaying field codes (Writer)
-OpenOffice.org Impress : fields;editing
-OpenOffice.org Impress : fields;file names
-OpenOffice.org Impress : fields;formatted fields
-OpenOffice.org Impress : fields;formatting
-OpenOffice.org Impress : fields;in slides
-OpenOffice.org Impress : fields;page numbers
-OpenOffice.org Impress : fields;times (fixed)
-OpenOffice.org Impress : fields;times (variable)
-OpenOffice.org Impress : fields;updating automatically (Writer)
-OpenOffice.org Impress : file associations for Microsoft Office
-OpenOffice.org Impress : file filters
-OpenOffice.org Impress : file filters;mobile devices
-OpenOffice.org Impress : file filters;XML
-OpenOffice.org Impress : file formats
-OpenOffice.org Impress : file formats;changing defaults
-OpenOffice.org Impress : file formats;OpenDocument/XML
-OpenOffice.org Impress : file formats;saving always in other formats
-OpenOffice.org Impress : file selection button
-OpenOffice.org Impress : file sharing options for current document
-OpenOffice.org Impress : files
-OpenOffice.org Impress : files;filters and formats
-OpenOffice.org Impress : files;importing
-OpenOffice.org Impress : files;inserting
-OpenOffice.org Impress : files;inserting pictures
-OpenOffice.org Impress : files;opening
-OpenOffice.org Impress : files;opening with placeholders
-OpenOffice.org Impress : files;properties
-OpenOffice.org Impress : files;saving
-OpenOffice.org Impress : files;saving automatically
-OpenOffice.org Impress : files;saving in other formats
-OpenOffice.org Impress : files;sending as e-mail
-OpenOffice.org Impress : files;version numbers
-OpenOffice.org Impress : files and folders in OpenOffice.org
-OpenOffice.org Impress : fill characters with tabulators
-OpenOffice.org Impress : fill colors for areas
-OpenOffice.org Impress : fill format mode
-OpenOffice.org Impress : fill format mode;styles
-OpenOffice.org Impress : fill patterns for areas
-OpenOffice.org Impress : filter conditions
-OpenOffice.org Impress : filter conditions;connecting
-OpenOffice.org Impress : filter conditions;in queries (Base)
-OpenOffice.org Impress : filtering
-OpenOffice.org Impress : filtering;data in databases
-OpenOffice.org Impress : filtering;data in forms
-OpenOffice.org Impress : filters
-OpenOffice.org Impress : filters;comparison operators
-OpenOffice.org Impress : filters;for import and export
-OpenOffice.org Impress : filters;Navigator
-OpenOffice.org Impress : filters;pictures
-OpenOffice.org Impress : filters;XML filter settings
-OpenOffice.org Impress : Find tab in Help
-OpenOffice.org Impress : finding
-OpenOffice.org Impress : finding;in all sheets
-OpenOffice.org Impress : finding;records in form documents
-OpenOffice.org Impress : finding;selections
-OpenOffice.org Impress : finding;similarity search
-OpenOffice.org Impress : fitting to pages
-OpenOffice.org Impress : fitting to pages;individual slides
-OpenOffice.org Impress : fitting to pages;print settings in Math
-OpenOffice.org Impress : fitting to pages;print settings in presentations
-OpenOffice.org Impress : fixed text
-OpenOffice.org Impress : fixed text;form functions
-OpenOffice.org Impress : fixing toolbars
-OpenOffice.org Impress : flipping around a flip line
-OpenOffice.org Impress : flipping draw objects
-OpenOffice.org Impress : floating frames in HTML documents
-OpenOffice.org Impress : floating text
-OpenOffice.org Impress : floating toolbars
-OpenOffice.org Impress : flowcharts
-OpenOffice.org Impress : focus of controls
-OpenOffice.org Impress : folder creation
-OpenOffice.org Impress : font lists
-OpenOffice.org Impress : font name box
-OpenOffice.org Impress : font sizes
-OpenOffice.org Impress : font sizes;bullets
-OpenOffice.org Impress : font sizes;relative changes
-OpenOffice.org Impress : font sizes;scaling on screen
-OpenOffice.org Impress : font sizes;text
-OpenOffice.org Impress : fonts
-OpenOffice.org Impress : fonts;adding under UNIX
-OpenOffice.org Impress : fonts;changing in templates
-OpenOffice.org Impress : fonts;colors
-OpenOffice.org Impress : fonts;default settings
-OpenOffice.org Impress : fonts;effects
-OpenOffice.org Impress : fonts;for HTML and Basic
-OpenOffice.org Impress : fonts;formats
-OpenOffice.org Impress : fonts;outlines
-OpenOffice.org Impress : fonts;positions in text
-OpenOffice.org Impress : fonts;shadows
-OpenOffice.org Impress : fonts;specifying several
-OpenOffice.org Impress : fonts;strikethrough
-OpenOffice.org Impress : fonts;styles
-OpenOffice.org Impress : fonts;text objects
-OpenOffice.org Impress : Fontwork icons
-OpenOffice.org Impress : footers
-OpenOffice.org Impress : footers;backgrounds
-OpenOffice.org Impress : footers;slide masters
-OpenOffice.org Impress : footers;slides
-OpenOffice.org Impress : form controls
-OpenOffice.org Impress : form controls;assigning macros
-OpenOffice.org Impress : form controls;protecting
-OpenOffice.org Impress : form controls;toolbars
-OpenOffice.org Impress : form fields
-OpenOffice.org Impress : form filters
-OpenOffice.org Impress : Form Navigator
-OpenOffice.org Impress : format codes
-OpenOffice.org Impress : format codes;numbers
-OpenOffice.org Impress : format codes;user-defined number formats
-OpenOffice.org Impress : format filling printing in OpenOffice.org Math
-OpenOffice.org Impress : Format Paintbrush
-OpenOffice.org Impress : formats
-OpenOffice.org Impress : formats;Asian layout
-OpenOffice.org Impress : formats;Asian typography
-OpenOffice.org Impress : formats;fonts
-OpenOffice.org Impress : formats;maximizing page formats
-OpenOffice.org Impress : formats;number and currency formats
-OpenOffice.org Impress : formats;of currencies/date/time
-OpenOffice.org Impress : formats;on opening and saving
-OpenOffice.org Impress : formats;pasting in special formats
-OpenOffice.org Impress : formats;positions
-OpenOffice.org Impress : formats;tabulators
-OpenOffice.org Impress : formats;undoing when writing
-OpenOffice.org Impress : formatted fields
-OpenOffice.org Impress : formatted fields;form functions
-OpenOffice.org Impress : formatted fields;properties
-OpenOffice.org Impress : formatting
-OpenOffice.org Impress : formatting;axes in charts
-OpenOffice.org Impress : formatting;chart areas
-OpenOffice.org Impress : formatting;chart floors
-OpenOffice.org Impress : formatting;chart legends
-OpenOffice.org Impress : formatting;chart titles
-OpenOffice.org Impress : formatting;chart walls
-OpenOffice.org Impress : formatting;copying
-OpenOffice.org Impress : formatting;definition
-OpenOffice.org Impress : formatting;expanding (Calc)
-OpenOffice.org Impress : formatting;fields
-OpenOffice.org Impress : formatting;font effects
-OpenOffice.org Impress : formatting;hyperlinks
-OpenOffice.org Impress : formatting;pages
-OpenOffice.org Impress : formatting;printer metrics (Writer)
-OpenOffice.org Impress : formatting;slides
-OpenOffice.org Impress : formatting;slides headings
-OpenOffice.org Impress : formatting;undoing
-OpenOffice.org Impress : forms
-OpenOffice.org Impress : forms;browsing
-OpenOffice.org Impress : forms;Combo Box/List Box Wizard
-OpenOffice.org Impress : forms;creating
-OpenOffice.org Impress : forms;data
-OpenOffice.org Impress : forms;designing (Base)
-OpenOffice.org Impress : forms;events
-OpenOffice.org Impress : forms;filtering data
-OpenOffice.org Impress : forms;finding records
-OpenOffice.org Impress : forms;focus after opening
-OpenOffice.org Impress : forms;general information (Base)
-OpenOffice.org Impress : forms;grouping controls
-OpenOffice.org Impress : forms;HTML filters
-OpenOffice.org Impress : forms;inserting
-OpenOffice.org Impress : forms;Navigator
-OpenOffice.org Impress : forms;opening in design mode
-OpenOffice.org Impress : forms;properties
-OpenOffice.org Impress : forms;sorting data
-OpenOffice.org Impress : forms;subforms
-OpenOffice.org Impress : forms;wizards
-OpenOffice.org Impress : forms;XForms
-OpenOffice.org Impress : Formula Auditing feature in Microsoft Office
-OpenOffice.org Impress : formula texts
-OpenOffice.org Impress : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Impress : formulas
-OpenOffice.org Impress : formulas;new
-OpenOffice.org Impress : formulas;starting formula editor
-OpenOffice.org Impress : formulas in reports
-OpenOffice.org Impress : formulas in reports;editing
-OpenOffice.org Impress : forums and support
-OpenOffice.org Impress : frames
-OpenOffice.org Impress : frames;around paragraphs
-OpenOffice.org Impress : frames;around tables
-OpenOffice.org Impress : frames;AutoCorrect function
-OpenOffice.org Impress : frames;backgrounds
-OpenOffice.org Impress : frames;captions (Writer)
-OpenOffice.org Impress : frames;printing in OpenOffice.org Math
-OpenOffice.org Impress : frames;protecting
-OpenOffice.org Impress : frames;selection frames
-OpenOffice.org Impress : frames;text fitting to frames
-OpenOffice.org Impress : freeform lines
-OpenOffice.org Impress : freeform lines;draw functions
-OpenOffice.org Impress : freeform lines;drawing
-OpenOffice.org Impress : FTP
-OpenOffice.org Impress : FTP;opening documents
-OpenOffice.org Impress : FTP;saving documents
-OpenOffice.org Impress : full joins (Base)
-OpenOffice.org Impress : full screen view
-OpenOffice.org Impress : full-text search in Help
-OpenOffice.org Impress : functions in reports
-OpenOffice.org Impress : functions in reports;editing
-OpenOffice.org Impress : Gallery
-OpenOffice.org Impress : Gallery;adding pictures
-OpenOffice.org Impress : Gallery;dragging pictures to draw objects
-OpenOffice.org Impress : Gallery;hiding/showing
-OpenOffice.org Impress : Gallery;inserting pictures from
-OpenOffice.org Impress : geometric forms
-OpenOffice.org Impress : German spellcheck
-OpenOffice.org Impress : get method for form transmissions
-OpenOffice.org Impress : getting support
-OpenOffice.org Impress : GIF format
-OpenOffice.org Impress : GIF images
-OpenOffice.org Impress : GIF images;animating
-OpenOffice.org Impress : GIF images;replacing colors
-OpenOffice.org Impress : glossaries
-OpenOffice.org Impress : glossaries;common terms
-OpenOffice.org Impress : glossaries;Internet terms
-OpenOffice.org Impress : glue points
-OpenOffice.org Impress : glue points;editing
-OpenOffice.org Impress : glue points;inserting
-OpenOffice.org Impress : gradients
-OpenOffice.org Impress : gradients;applying and defining
-OpenOffice.org Impress : gradients;defining colors
-OpenOffice.org Impress : gradients;loading lists
-OpenOffice.org Impress : gradients;transparent
-OpenOffice.org Impress : gradients off for faster printing
-OpenOffice.org Impress : graphical text art
-OpenOffice.org Impress : graphics
-OpenOffice.org Impress : graphics;cache
-OpenOffice.org Impress : graphics;protecting
-OpenOffice.org Impress : graphics, see also pictures
-OpenOffice.org Impress : grayscale display
-OpenOffice.org Impress : grayscale printing
-OpenOffice.org Impress : grid controls
-OpenOffice.org Impress : grid controls;form functions
-OpenOffice.org Impress : grids
-OpenOffice.org Impress : grids;defaults (Writer/Calc)
-OpenOffice.org Impress : grids;display options (Impress/Draw)
-OpenOffice.org Impress : grids;displaying lines (Calc)
-OpenOffice.org Impress : grids;formatting axes
-OpenOffice.org Impress : grids;inserting in charts
-OpenOffice.org Impress : group box creation
-OpenOffice.org Impress : grouping
-OpenOffice.org Impress : grouping;draw objects
-OpenOffice.org Impress : groups
-OpenOffice.org Impress : groups;entering/exiting/ungrouping
-OpenOffice.org Impress : groups;naming
-OpenOffice.org Impress : groups;of controls
-OpenOffice.org Impress : guides
-OpenOffice.org Impress : guides;display options (Impress/Draw)
-OpenOffice.org Impress : guides;displaying when moving objects (Impress)
-OpenOffice.org Impress : guides;editing
-OpenOffice.org Impress : guides;inserting
-OpenOffice.org Impress : guides;show snap lines icon
-OpenOffice.org Impress : guides;showing (Calc)
-OpenOffice.org Impress : guides;showing when moving frames (Writer)
-OpenOffice.org Impress : gutter
-OpenOffice.org Impress : half-spheres
-OpenOffice.org Impress : hand icon for moving slides
-OpenOffice.org Impress : handles
-OpenOffice.org Impress : handles;displaying (Writer)
-OpenOffice.org Impress : handles;large
-OpenOffice.org Impress : handles;scaling
-OpenOffice.org Impress : handles;showing simple/large handles (Calc)
-OpenOffice.org Impress : handles;simple
-OpenOffice.org Impress : handout printing
-OpenOffice.org Impress : Hangul/Hanja
-OpenOffice.org Impress : hatching
-OpenOffice.org Impress : hatching
-OpenOffice.org Impress : hatching;loading lists
-OpenOffice.org Impress : headers
-OpenOffice.org Impress : headers;backgrounds
-OpenOffice.org Impress : headers and footers
-OpenOffice.org Impress : headers and footers;master layouts
-OpenOffice.org Impress : headers and footers;slide masters
-OpenOffice.org Impress : headers and footers;slides
-OpenOffice.org Impress : headings
-OpenOffice.org Impress : headings;entering as text box
-OpenOffice.org Impress : Hebrew
-OpenOffice.org Impress : Hebrew;entering text
-OpenOffice.org Impress : Hebrew;language settings
-OpenOffice.org Impress : Help
-OpenOffice.org Impress : Help;bookmarks
-OpenOffice.org Impress : Help;extended tips on/off
-OpenOffice.org Impress : Help;full-text search
-OpenOffice.org Impress : Help;Help tips
-OpenOffice.org Impress : Help;keywords
-OpenOffice.org Impress : Help;navigation pane showing/hiding
-OpenOffice.org Impress : Help;style sheets
-OpenOffice.org Impress : Help;topics
-OpenOffice.org Impress : Help Agent
-OpenOffice.org Impress : Help Agent;help
-OpenOffice.org Impress : Help Agent;options
-OpenOffice.org Impress : Help tips
-OpenOffice.org Impress : Help tips;hiding
-OpenOffice.org Impress : hidden controls in Form Navigator
-OpenOffice.org Impress : hidden fields display (Writer)
-OpenOffice.org Impress : hidden pages
-OpenOffice.org Impress : hidden pages;printing in presentations
-OpenOffice.org Impress : hidden pages;showing
-OpenOffice.org Impress : hidden text
-OpenOffice.org Impress : hidden text;showing (Writer)
-OpenOffice.org Impress : hiding
-OpenOffice.org Impress : hiding;changes
-OpenOffice.org Impress : hiding;chart legends
-OpenOffice.org Impress : hiding;docked windows
-OpenOffice.org Impress : hiding;layers
-OpenOffice.org Impress : hiding;levels
-OpenOffice.org Impress : hiding;navigation pane in Help window
-OpenOffice.org Impress : hiding;slides
-OpenOffice.org Impress : hiding;subpoints
-OpenOffice.org Impress : high contrast mode
-OpenOffice.org Impress : Hindi
-OpenOffice.org Impress : Hindi;entering text
-OpenOffice.org Impress : Hindi;language settings
-OpenOffice.org Impress : horizontal scrollbars (Writer)
-OpenOffice.org Impress : hot spots in flowcharts
-OpenOffice.org Impress : HowTos for charts
-OpenOffice.org Impress : Howtos for Draw
-OpenOffice.org Impress : HTML
-OpenOffice.org Impress : HTML;definition
-OpenOffice.org Impress : HTML;export character set
-OpenOffice.org Impress : HTML;exporting from presentations
-OpenOffice.org Impress : HTML;fonts for source display
-OpenOffice.org Impress : HTML;importing into presentations
-OpenOffice.org Impress : HTML;importing META tags
-OpenOffice.org Impress : HTML;inserting files
-OpenOffice.org Impress : HTML;live presentations
-OpenOffice.org Impress : HTML documents
-OpenOffice.org Impress : HTML documents;auto reloading
-OpenOffice.org Impress : HTML documents;importing/exporting
-OpenOffice.org Impress : HTML documents;META tags in
-OpenOffice.org Impress : HTML documents;new
-OpenOffice.org Impress : HTML documents;source text
-OpenOffice.org Impress : hyperlinks
-OpenOffice.org Impress : hyperlinks;assigning macros
-OpenOffice.org Impress : hyperlinks;character formats
-OpenOffice.org Impress : hyperlinks;definition
-OpenOffice.org Impress : hyperlinks;deleting
-OpenOffice.org Impress : hyperlinks;editing
-OpenOffice.org Impress : hyperlinks;inserting
-OpenOffice.org Impress : hyperlinks;relative and absolute
-OpenOffice.org Impress : hyperlinks;turning off automatic recognition
-OpenOffice.org Impress : hyperlinks, see also links
-OpenOffice.org Impress : hyphenation
-OpenOffice.org Impress : hyphenation;activating for a language
-OpenOffice.org Impress : hyphenation;minimal number of characters
-OpenOffice.org Impress : hyphens
-OpenOffice.org Impress : hyphens;displaying custom (Writer)
-OpenOffice.org Impress : hyphens;inserting custom
-OpenOffice.org Impress : icon bars, see toolbars
-OpenOffice.org Impress : icon sizes
-OpenOffice.org Impress : ignore list for spellcheck
-OpenOffice.org Impress : illumination
-OpenOffice.org Impress : illumination;3D charts
-OpenOffice.org Impress : illustrations, see pictures
-OpenOffice.org Impress : image button creation
-OpenOffice.org Impress : image control creation
-OpenOffice.org Impress : ImageMap
-OpenOffice.org Impress : ImageMap;definition
-OpenOffice.org Impress : ImageMap;editor
-OpenOffice.org Impress : images
-OpenOffice.org Impress : images;ImageMap
-OpenOffice.org Impress : images;inserting
-OpenOffice.org Impress : images;inserting and editing bitmaps
-OpenOffice.org Impress : images;placeholders in presentations
-OpenOffice.org Impress : images, see also pictures
-OpenOffice.org Impress : IME
-OpenOffice.org Impress : IME;definition
-OpenOffice.org Impress : IME;showing/hiding
-OpenOffice.org Impress : import filters
-OpenOffice.org Impress : import restrictions for Microsoft Office
-OpenOffice.org Impress : importing
-OpenOffice.org Impress : importing;bitmaps
-OpenOffice.org Impress : importing;compatibility settings for text import
-OpenOffice.org Impress : importing;databases
-OpenOffice.org Impress : importing;documents in other formats
-OpenOffice.org Impress : importing;from XML
-OpenOffice.org Impress : importing;HTML and text documents
-OpenOffice.org Impress : importing;HTML with META tags
-OpenOffice.org Impress : importing;Microsoft Office documents with VBA code
-OpenOffice.org Impress : importing;presentations with HTML
-OpenOffice.org Impress : importing;tables in text format
-OpenOffice.org Impress : importing;templates
-OpenOffice.org Impress : in front of object command
-OpenOffice.org Impress : inches
-OpenOffice.org Impress : including spreadsheets
-OpenOffice.org Impress : increasing sizes of views
-OpenOffice.org Impress : Index tab in Help
-OpenOffice.org Impress : indexes
-OpenOffice.org Impress : indexes;backgrounds
-OpenOffice.org Impress : indexes;showing/hiding Help index tab
-OpenOffice.org Impress : indexes;unprotecting
-OpenOffice.org Impress : indicator lines in text
-OpenOffice.org Impress : inner joins (Base)
-OpenOffice.org Impress : input method window
-OpenOffice.org Impress : insert mode for entering text
-OpenOffice.org Impress : inserting
-OpenOffice.org Impress : inserting;3D objects
-OpenOffice.org Impress : inserting;applets
-OpenOffice.org Impress : inserting;arrows
-OpenOffice.org Impress : inserting;callouts in presentations
-OpenOffice.org Impress : inserting;cell ranges from spreadsheets
-OpenOffice.org Impress : inserting;charts
-OpenOffice.org Impress : inserting;clipboard options
-OpenOffice.org Impress : inserting;data from text documents
-OpenOffice.org Impress : inserting;datasource records in spreadsheets
-OpenOffice.org Impress : inserting;drawings
-OpenOffice.org Impress : inserting;ellipses
-OpenOffice.org Impress : inserting;files
-OpenOffice.org Impress : inserting;floating frames
-OpenOffice.org Impress : inserting;form fields
-OpenOffice.org Impress : inserting;glue points
-OpenOffice.org Impress : inserting;hyperlinks
-OpenOffice.org Impress : inserting;layers
-OpenOffice.org Impress : inserting;line breaks in cells
-OpenOffice.org Impress : inserting;lines
-OpenOffice.org Impress : inserting;movies/sounds
-OpenOffice.org Impress : inserting;new text tables defaults
-OpenOffice.org Impress : inserting;notes
-OpenOffice.org Impress : inserting;objects from files
-OpenOffice.org Impress : inserting;objects from Gallery
-OpenOffice.org Impress : inserting;OLE objects
-OpenOffice.org Impress : inserting;paragraph bullets
-OpenOffice.org Impress : inserting;pictures
-OpenOffice.org Impress : inserting;plug-ins
-OpenOffice.org Impress : inserting;polygons
-OpenOffice.org Impress : inserting;rectangles
-OpenOffice.org Impress : inserting;slides
-OpenOffice.org Impress : inserting;slides as links
-OpenOffice.org Impress : inserting;slides from files
-OpenOffice.org Impress : inserting;special characters
-OpenOffice.org Impress : inserting;tab stops
-OpenOffice.org Impress : inserting;text in presentations
-OpenOffice.org Impress : installing
-OpenOffice.org Impress : installing;ActiveX control
-OpenOffice.org Impress : installing;mobile device filters
-OpenOffice.org Impress : installing;UNO components
-OpenOffice.org Impress : instructions
-OpenOffice.org Impress : instructions;general
-OpenOffice.org Impress : instructions;OpenOffice.org Draw
-OpenOffice.org Impress : instructions;OpenOffice.org Impress
-OpenOffice.org Impress : interactions
-OpenOffice.org Impress : interactions;hot spots
-OpenOffice.org Impress : interactions;objects in interactive presentations
-OpenOffice.org Impress : interactions;preview
-OpenOffice.org Impress : Internet
-OpenOffice.org Impress : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Impress : Internet;presentations
-OpenOffice.org Impress : Internet;starting searches
-OpenOffice.org Impress : Internet;turning off recognition of addresses
-OpenOffice.org Impress : Internet glossary
-OpenOffice.org Impress : intersecting draw objects
-OpenOffice.org Impress : invert filter
-OpenOffice.org Impress : invisible areas
-OpenOffice.org Impress : italic text
-OpenOffice.org Impress : iterative references in spreadsheets
-OpenOffice.org Impress : Java
-OpenOffice.org Impress : Java;definition
-OpenOffice.org Impress : Java;scripting
-OpenOffice.org Impress : Java;setting options
-OpenOffice.org Impress : JDBC
-OpenOffice.org Impress : JDBC;databases (Base)
-OpenOffice.org Impress : JDBC;definition
-OpenOffice.org Impress : joining
-OpenOffice.org Impress : joining;3D objects
-OpenOffice.org Impress : joining;paragraphs
-OpenOffice.org Impress : joining;tables (Base)
-OpenOffice.org Impress : joins in databases (Base)
-OpenOffice.org Impress : justifying text
-OpenOffice.org Impress : kerning
-OpenOffice.org Impress : kerning;Asian texts
-OpenOffice.org Impress : kerning;definition
-OpenOffice.org Impress : kerning;in characters
-OpenOffice.org Impress : key fields for relations (Base)
-OpenOffice.org Impress : keyboard
-OpenOffice.org Impress : keyboard;assigning/editing shortcut keys
-OpenOffice.org Impress : keyboard;general commands
-OpenOffice.org Impress : keyboard;removing numbering
-OpenOffice.org Impress : keyboard;zooming
-OpenOffice.org Impress : keys
-OpenOffice.org Impress : keys;adding push buttons
-OpenOffice.org Impress : keys;primary keys (Base)
-OpenOffice.org Impress : kiosk export
-OpenOffice.org Impress : labels
-OpenOffice.org Impress : labels;creating and synchronizing
-OpenOffice.org Impress : labels;for charts
-OpenOffice.org Impress : labels;for draw objects
-OpenOffice.org Impress : labels;form functions
-OpenOffice.org Impress : labels;from databases
-OpenOffice.org Impress : labels, see also names/callouts
-OpenOffice.org Impress : languages
-OpenOffice.org Impress : languages;activating modules
-OpenOffice.org Impress : languages;Asian support
-OpenOffice.org Impress : languages;complex text layout
-OpenOffice.org Impress : languages;locale settings
-OpenOffice.org Impress : languages;selecting
-OpenOffice.org Impress : languages;setting options
-OpenOffice.org Impress : languages;spellcheck
-OpenOffice.org Impress : languages;spellchecking and formatting
-OpenOffice.org Impress : large handles (Writer)
-OpenOffice.org Impress : large icons
-OpenOffice.org Impress : layer arrangement
-OpenOffice.org Impress : layers
-OpenOffice.org Impress : layers;definition
-OpenOffice.org Impress : layers;deleting
-OpenOffice.org Impress : layers;inserting and editing
-OpenOffice.org Impress : layers;moving objects
-OpenOffice.org Impress : layers;renaming
-OpenOffice.org Impress : layers;working with
-OpenOffice.org Impress : layout
-OpenOffice.org Impress : layout;importing Word documents
-OpenOffice.org Impress : layout;pages
-OpenOffice.org Impress : layout;printing handouts
-OpenOffice.org Impress : LDAP server
-OpenOffice.org Impress : LDAP server;address books (Base)
-OpenOffice.org Impress : LDAP server;sign on options
-OpenOffice.org Impress : leading between paragraphs
-OpenOffice.org Impress : left alignment of paragraphs
-OpenOffice.org Impress : left joins (Base)
-OpenOffice.org Impress : legends
-OpenOffice.org Impress : legends;charts
-OpenOffice.org Impress : legends;draw objects
-OpenOffice.org Impress : legends;drawings
-OpenOffice.org Impress : legends;rounding corners
-OpenOffice.org Impress : Letter Wizard
-OpenOffice.org Impress : levels
-OpenOffice.org Impress : levels;depth stagger
-OpenOffice.org Impress : levels;hiding
-OpenOffice.org Impress : levels;showing
-OpenOffice.org Impress : limits of tables (Writer)
-OpenOffice.org Impress : line breaks
-OpenOffice.org Impress : line breaks;in cells
-OpenOffice.org Impress : line charts
-OpenOffice.org Impress : line spacing
-OpenOffice.org Impress : line spacing;context menu in paragraphs
-OpenOffice.org Impress : line spacing;paragraph
-OpenOffice.org Impress : line styles
-OpenOffice.org Impress : line styles;applying
-OpenOffice.org Impress : line styles;defining
-OpenOffice.org Impress : line styles;loading
-OpenOffice.org Impress : lines
-OpenOffice.org Impress : lines;about line ends
-OpenOffice.org Impress : lines;connecting objects
-OpenOffice.org Impress : lines;contours (Draw/Impress)
-OpenOffice.org Impress : lines;defining ends
-OpenOffice.org Impress : lines;draw functions
-OpenOffice.org Impress : lines;drawing
-OpenOffice.org Impress : lines;drawing in text
-OpenOffice.org Impress : lines;editing points
-OpenOffice.org Impress : lines;inserting
-OpenOffice.org Impress : lines;removing automatic lines
-OpenOffice.org Impress : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Impress : lines of text
-OpenOffice.org Impress : lines of text;alignment
-OpenOffice.org Impress : links
-OpenOffice.org Impress : links;between cells and controls
-OpenOffice.org Impress : links;by drag and drop
-OpenOffice.org Impress : links;character formats
-OpenOffice.org Impress : links;definition
-OpenOffice.org Impress : links;editing hyperlinks
-OpenOffice.org Impress : links;inserting
-OpenOffice.org Impress : links;modifying
-OpenOffice.org Impress : links;opening files with
-OpenOffice.org Impress : links;relational databases (Base)
-OpenOffice.org Impress : links;turning off automatic recognition
-OpenOffice.org Impress : links;updating options (Writer)
-OpenOffice.org Impress : links;updating specific links
-OpenOffice.org Impress : list box creation
-OpenOffice.org Impress : lists
-OpenOffice.org Impress : lists;animations
-OpenOffice.org Impress : lists;data assigned to controls
-OpenOffice.org Impress : lists;registered databases (Base)
-OpenOffice.org Impress : lists;regular expressions
-OpenOffice.org Impress : live presentations on the Internet
-OpenOffice.org Impress : loading
-OpenOffice.org Impress : loading;arrow and line styles
-OpenOffice.org Impress : loading;colors/gradients/hatchings
-OpenOffice.org Impress : loading;documents
-OpenOffice.org Impress : loading;documents from other formats
-OpenOffice.org Impress : loading;HTML documents, automatically
-OpenOffice.org Impress : loading;Microsoft Office documents with VBA code
-OpenOffice.org Impress : loading;reloading
-OpenOffice.org Impress : loading;XML files
-OpenOffice.org Impress : locale settings
-OpenOffice.org Impress : locking layers
-OpenOffice.org Impress : logarithmic scaling along axes
-OpenOffice.org Impress : lowercase letters
-OpenOffice.org Impress : lowercase letters;font effects
-OpenOffice.org Impress : Macromedia Flash export
-OpenOffice.org Impress : macros
-OpenOffice.org Impress : macros;assigning to events in forms
-OpenOffice.org Impress : macros;in MS Office documents
-OpenOffice.org Impress : macros;interrupting
-OpenOffice.org Impress : macros;organizing
-OpenOffice.org Impress : macros;recording
-OpenOffice.org Impress : macros;running in presentations
-OpenOffice.org Impress : macros;security
-OpenOffice.org Impress : macros;security warning dialog
-OpenOffice.org Impress : macros;selecting security warnings
-OpenOffice.org Impress : magnetic lines in presentations
-OpenOffice.org Impress : magnifiers
-OpenOffice.org Impress : Mail Merge feature in Microsoft Office
-OpenOffice.org Impress : margins
-OpenOffice.org Impress : margins;pages
-OpenOffice.org Impress : margins;setting with the mouse
-OpenOffice.org Impress : margins;shadows
-OpenOffice.org Impress : marking changes
-OpenOffice.org Impress : Markup feature in Microsoft Office
-OpenOffice.org Impress : master layouts with headers and footers
-OpenOffice.org Impress : master pages, see slide masters
-OpenOffice.org Impress : master views
-OpenOffice.org Impress : Math formula editor
-OpenOffice.org Impress : measurement units
-OpenOffice.org Impress : measurement units;changing on rulers
-OpenOffice.org Impress : measurement units;converting
-OpenOffice.org Impress : measurement units;selecting
-OpenOffice.org Impress : Media Player window
-OpenOffice.org Impress : menus
-OpenOffice.org Impress : menus;activating context menus
-OpenOffice.org Impress : menus;customizing
-OpenOffice.org Impress : menus;inactive menu items
-OpenOffice.org Impress : merging
-OpenOffice.org Impress : merging;documents
-OpenOffice.org Impress : merging;draw objects
-OpenOffice.org Impress : META tags
-OpenOffice.org Impress : metafiles
-OpenOffice.org Impress : metafiles;converting to
-OpenOffice.org Impress : metafiles;replacing colors
-OpenOffice.org Impress : metrics
-OpenOffice.org Impress : metrics;converting
-OpenOffice.org Impress : metrics;document formatting (Writer)
-OpenOffice.org Impress : metrics;in sheets
-OpenOffice.org Impress : Microsoft Office
-OpenOffice.org Impress : Microsoft Office;Access databases (base)
-OpenOffice.org Impress : Microsoft Office;as standard file format
-OpenOffice.org Impress : Microsoft Office;document import restrictions
-OpenOffice.org Impress : Microsoft Office;feature comparisons
-OpenOffice.org Impress : Microsoft Office;importing password protected files
-OpenOffice.org Impress : Microsoft Office;importing Word documents
-OpenOffice.org Impress : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Impress : Microsoft Office;new users information
-OpenOffice.org Impress : Microsoft Office;opening Microsoft documents
-OpenOffice.org Impress : Microsoft Office;reassigning document types
-OpenOffice.org Impress : mirroring objects
-OpenOffice.org Impress : mobile device filters
-OpenOffice.org Impress : models in XForms
-OpenOffice.org Impress : modifying, see changing
-OpenOffice.org Impress : more controls
-OpenOffice.org Impress : mosaic filter
-OpenOffice.org Impress : motion paths
-OpenOffice.org Impress : mouse
-OpenOffice.org Impress : mouse;pointers when using drag and drop
-OpenOffice.org Impress : mouse;positioning
-OpenOffice.org Impress : moving
-OpenOffice.org Impress : moving;between layers
-OpenOffice.org Impress : moving;objects in slides
-OpenOffice.org Impress : moving;tab stops on ruler
-OpenOffice.org Impress : moving;toolbars
-OpenOffice.org Impress : moving;using guide lines in presentations
-OpenOffice.org Impress : MS ADO interface (Base)
-OpenOffice.org Impress : multi-line titles in forms
-OpenOffice.org Impress : multiple documents
-OpenOffice.org Impress : multiple documents;opening
-OpenOffice.org Impress : multiple monitors
-OpenOffice.org Impress : multiplying draw objects
-OpenOffice.org Impress : My Documents folder
-OpenOffice.org Impress : My Documents folder;changing work directory
-OpenOffice.org Impress : My Documents folder;opening
-OpenOffice.org Impress : MySQL databases (Base)
-OpenOffice.org Impress : names
-OpenOffice.org Impress : names;multi-line titles
-OpenOffice.org Impress : names;objects
-OpenOffice.org Impress : names, see also labels/callouts
-OpenOffice.org Impress : namespace organization in XForms
-OpenOffice.org Impress : native SQL (Base)
-OpenOffice.org Impress : navigating
-OpenOffice.org Impress : navigating;in documents
-OpenOffice.org Impress : Navigation bar
-OpenOffice.org Impress : Navigation bar;controls
-OpenOffice.org Impress : Navigation bar;forms
-OpenOffice.org Impress : Navigator
-OpenOffice.org Impress : Navigator;contents as lists
-OpenOffice.org Impress : Navigator;docking
-OpenOffice.org Impress : Navigator;presentations
-OpenOffice.org Impress : Navigator;working with
-OpenOffice.org Impress : net charts
-OpenOffice.org Impress : network identity options
-OpenOffice.org Impress : new databases
-OpenOffice.org Impress : new documents
-OpenOffice.org Impress : new German spellcheck
-OpenOffice.org Impress : new lines in cells
-OpenOffice.org Impress : new windows
-OpenOffice.org Impress : non-breaking dashes
-OpenOffice.org Impress : non-breaking spaces (Writer)
-OpenOffice.org Impress : non-printing characters (Writer)
-OpenOffice.org Impress : normal view
-OpenOffice.org Impress : normal view;backgrounds
-OpenOffice.org Impress : normal view;presentations
-OpenOffice.org Impress : notes
-OpenOffice.org Impress : notes;adding to slides
-OpenOffice.org Impress : notes;default formatting
-OpenOffice.org Impress : notes;displaying (Calc)
-OpenOffice.org Impress : notes;inserting and editing
-OpenOffice.org Impress : notes;printing in presentations
-OpenOffice.org Impress : notes;printing in text
-OpenOffice.org Impress : number formats
-OpenOffice.org Impress : number formats;codes
-OpenOffice.org Impress : number formats;formats
-OpenOffice.org Impress : number formats;recognition in text tables
-OpenOffice.org Impress : number of pages
-OpenOffice.org Impress : number of sheets
-OpenOffice.org Impress : number of tables
-OpenOffice.org Impress : numbering
-OpenOffice.org Impress : numbering;options
-OpenOffice.org Impress : numbering;paragraphs
-OpenOffice.org Impress : numbering;turning off
-OpenOffice.org Impress : numbering;using automatically
-OpenOffice.org Impress : numbers
-OpenOffice.org Impress : numbers;date, time and currency formats
-OpenOffice.org Impress : numbers;decimal places (Calc)
-OpenOffice.org Impress : numbers;formatting options for selected cells
-OpenOffice.org Impress : numerical fields in forms
-OpenOffice.org Impress : object bars
-OpenOffice.org Impress : object bars;editing glue points
-OpenOffice.org Impress : objects
-OpenOffice.org Impress : objects;aligning
-OpenOffice.org Impress : objects;always moveable (Impress/Draw)
-OpenOffice.org Impress : objects;arranging within stacks
-OpenOffice.org Impress : objects;behind object command
-OpenOffice.org Impress : objects;breaking connections
-OpenOffice.org Impress : objects;contours in presentations
-OpenOffice.org Impress : objects;copying when moving in presentations
-OpenOffice.org Impress : objects;definition
-OpenOffice.org Impress : objects;displaying in spreadsheets
-OpenOffice.org Impress : objects;displaying in text documents
-OpenOffice.org Impress : objects;editing
-OpenOffice.org Impress : objects;effects
-OpenOffice.org Impress : objects;in front of object command
-OpenOffice.org Impress : objects;inserting from files
-OpenOffice.org Impress : objects;inserting from Gallery
-OpenOffice.org Impress : objects;inserting OLE objects
-OpenOffice.org Impress : objects;moving along paths
-OpenOffice.org Impress : objects;moving and resizing with mouse
-OpenOffice.org Impress : objects;moving in layers
-OpenOffice.org Impress : objects;moving in slides
-OpenOffice.org Impress : objects;naming
-OpenOffice.org Impress : objects;opening
-OpenOffice.org Impress : objects;properties of charts
-OpenOffice.org Impress : objects;quickly moving to
-OpenOffice.org Impress : objects;reversing
-OpenOffice.org Impress : objects;selecting
-OpenOffice.org Impress : objects;titles and descriptions
-OpenOffice.org Impress : objects;with attributes
-OpenOffice.org Impress : ODBC
-OpenOffice.org Impress : ODBC;database (Base)
-OpenOffice.org Impress : ODBC;definition
-OpenOffice.org Impress : ODF file formats
-OpenOffice.org Impress : Office
-OpenOffice.org Impress : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Impress : old German spellcheck
-OpenOffice.org Impress : OLE
-OpenOffice.org Impress : OLE;definition
-OpenOffice.org Impress : OLE objects
-OpenOffice.org Impress : OLE objects;arranging within stacks
-OpenOffice.org Impress : OLE objects;captions (Writer)
-OpenOffice.org Impress : OLE objects;inserting
-OpenOffice.org Impress : OLE objects;number of
-OpenOffice.org Impress : OLE objects;protecting
-OpenOffice.org Impress : one and a half line spacing in text
-OpenOffice.org Impress : online registration
-OpenOffice.org Impress : online update options
-OpenOffice.org Impress : online updates
-OpenOffice.org Impress : online updates;checking automatically
-OpenOffice.org Impress : online updates;checking manually
-OpenOffice.org Impress : Open/Save dialogs
-OpenOffice.org Impress : OpenDocument file formats
-OpenOffice.org Impress : OpenGL
-OpenOffice.org Impress : OpenGL;definition
-OpenOffice.org Impress : OpenGL;optimized output
-OpenOffice.org Impress : opening
-OpenOffice.org Impress : opening;context menus
-OpenOffice.org Impress : opening;database files
-OpenOffice.org Impress : opening;dialog settings
-OpenOffice.org Impress : opening;documents
-OpenOffice.org Impress : opening;documents from other formats
-OpenOffice.org Impress : opening;files with links
-OpenOffice.org Impress : opening;files, with placeholders
-OpenOffice.org Impress : opening;forms
-OpenOffice.org Impress : opening;Microsoft Office files
-OpenOffice.org Impress : opening;mobile device documents
-OpenOffice.org Impress : opening;objects
-OpenOffice.org Impress : opening;reports
-OpenOffice.org Impress : opening;several files
-OpenOffice.org Impress : opening;XForms
-OpenOffice.org Impress : OpenOffice.org Base data sources
-OpenOffice.org Impress : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Impress : OpenOffice.org documents
-OpenOffice.org Impress : OpenOffice.org documents;mobile device filters
-OpenOffice.org Impress : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Impress : OpenOffice.org Impress instructions
-OpenOffice.org Impress : OpenOffice.org Math start
-OpenOffice.org Impress : operators
-OpenOffice.org Impress : operators;default filters
-OpenOffice.org Impress : optional hyphens (Writer)
-OpenOffice.org Impress : options
-OpenOffice.org Impress : options;accessibility
-OpenOffice.org Impress : options;appearance
-OpenOffice.org Impress : options;compatibility (Writer)
-OpenOffice.org Impress : options;network identity
-OpenOffice.org Impress : options;online update
-OpenOffice.org Impress : options;tools
-OpenOffice.org Impress : Oracle databases (base)
-OpenOffice.org Impress : order of chart data
-OpenOffice.org Impress : ordering
-OpenOffice.org Impress : ordering;objects
-OpenOffice.org Impress : ordering;slides
-OpenOffice.org Impress : organization charts
-OpenOffice.org Impress : organizing
-OpenOffice.org Impress : organizing;macros and scripts
-OpenOffice.org Impress : organizing;namespaces in XForms
-OpenOffice.org Impress : organizing;styles
-OpenOffice.org Impress : organizing;templates
-OpenOffice.org Impress : origin of rulers
-OpenOffice.org Impress : original size
-OpenOffice.org Impress : original size;printing in OpenOffice.org Math
-OpenOffice.org Impress : original size;restoring after cropping
-OpenOffice.org Impress : outline view
-OpenOffice.org Impress : outlines
-OpenOffice.org Impress : outlines;font effects
-OpenOffice.org Impress : outlines;outline symbols
-OpenOffice.org Impress : outlines;printing
-OpenOffice.org Impress : outlines;sending to presentations
-OpenOffice.org Impress : overwrite mode
-OpenOffice.org Impress : packages, see extensions
-OpenOffice.org Impress : page breaks
-OpenOffice.org Impress : page breaks;displaying (Calc)
-OpenOffice.org Impress : page formats
-OpenOffice.org Impress : page formats;maximizing
-OpenOffice.org Impress : page formats;restriction
-OpenOffice.org Impress : page number field
-OpenOffice.org Impress : page numbers on all slides
-OpenOffice.org Impress : page styles
-OpenOffice.org Impress : page styles;editing/applying with statusbar
-OpenOffice.org Impress : pages
-OpenOffice.org Impress : pages;backgrounds in spreadsheets
-OpenOffice.org Impress : pages;copying
-OpenOffice.org Impress : pages;fitting to printed pages
-OpenOffice.org Impress : pages;formatting and numbering
-OpenOffice.org Impress : pages;printing page names in presentations
-OpenOffice.org Impress : pages;scaling
-OpenOffice.org Impress : pages;selecting one to print
-OpenOffice.org Impress : paint box
-OpenOffice.org Impress : paint can symbol
-OpenOffice.org Impress : pair kerning
-OpenOffice.org Impress : Palm file filters
-OpenOffice.org Impress : paper formats
-OpenOffice.org Impress : paper size warning
-OpenOffice.org Impress : paper trays
-OpenOffice.org Impress : paragraph marks
-OpenOffice.org Impress : paragraph marks;displaying (Writer)
-OpenOffice.org Impress : paragraph styles
-OpenOffice.org Impress : paragraph styles;languages
-OpenOffice.org Impress : paragraph styles;modifying basic fonts
-OpenOffice.org Impress : paragraphs
-OpenOffice.org Impress : paragraphs;alignment
-OpenOffice.org Impress : paragraphs;Asian typography
-OpenOffice.org Impress : paragraphs;backgrounds
-OpenOffice.org Impress : paragraphs;defining borders
-OpenOffice.org Impress : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Impress : paragraphs;increasing indents of
-OpenOffice.org Impress : paragraphs;indents, margins and columns
-OpenOffice.org Impress : paragraphs;inserting bullets
-OpenOffice.org Impress : paragraphs;joining
-OpenOffice.org Impress : paragraphs;numbering automatically
-OpenOffice.org Impress : paragraphs;removing blank ones
-OpenOffice.org Impress : paragraphs;spacing
-OpenOffice.org Impress : paragraphs;tab stops
-OpenOffice.org Impress : parameters
-OpenOffice.org Impress : parameters;command line
-OpenOffice.org Impress : parameters;queries (Base)
-OpenOffice.org Impress : passwords for protecting contents
-OpenOffice.org Impress : pasting
-OpenOffice.org Impress : pasting;cell ranges
-OpenOffice.org Impress : pasting;cell ranges from spreadsheets
-OpenOffice.org Impress : pasting;data from text documents
-OpenOffice.org Impress : pasting;draw objects
-OpenOffice.org Impress : pasting;draw objects from other documents
-OpenOffice.org Impress : pasting;formatted/unformatted text
-OpenOffice.org Impress : pasting;from data source view
-OpenOffice.org Impress : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Impress : pasting;pictures from other documents
-OpenOffice.org Impress : pasting;sheet areas in text documents
-OpenOffice.org Impress : pasting;slides from other presentations
-OpenOffice.org Impress : pasting;text from other documents
-OpenOffice.org Impress : pasting;to Gallery
-OpenOffice.org Impress : paths
-OpenOffice.org Impress : paths;changing work directory
-OpenOffice.org Impress : paths;defaults
-OpenOffice.org Impress : paths;moving objects along
-OpenOffice.org Impress : pattern editor
-OpenOffice.org Impress : pattern fields
-OpenOffice.org Impress : pattern fields;form functions
-OpenOffice.org Impress : patterns for objects
-OpenOffice.org Impress : PDF
-OpenOffice.org Impress : PDF;export
-OpenOffice.org Impress : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Impress : personal data input
-OpenOffice.org Impress : phonetic guide
-OpenOffice.org Impress : picklist creation
-OpenOffice.org Impress : pictures
-OpenOffice.org Impress : pictures;adding to Gallery
-OpenOffice.org Impress : pictures;arranging within stacks
-OpenOffice.org Impress : pictures;assigning macros
-OpenOffice.org Impress : pictures;backgrounds
-OpenOffice.org Impress : pictures;captions (Writer)
-OpenOffice.org Impress : pictures;changing paths
-OpenOffice.org Impress : pictures;cropping and zooming
-OpenOffice.org Impress : pictures;displaying in Calc
-OpenOffice.org Impress : pictures;displaying in Writer (Writer)
-OpenOffice.org Impress : pictures;drag and drop between documents
-OpenOffice.org Impress : pictures;drawing
-OpenOffice.org Impress : pictures;editing
-OpenOffice.org Impress : pictures;filters
-OpenOffice.org Impress : pictures;ImageMap
-OpenOffice.org Impress : pictures;inserting
-OpenOffice.org Impress : pictures;inserting automatically
-OpenOffice.org Impress : pictures;inserting from Gallery
-OpenOffice.org Impress : pictures;number of
-OpenOffice.org Impress : pictures;printing
-OpenOffice.org Impress : pictures;scaling/resizing
-OpenOffice.org Impress : pie charts
-OpenOffice.org Impress : pivot points of draw objects
-OpenOffice.org Impress : Pivot tables feature in Microsoft Office
-OpenOffice.org Impress : pixel editor
-OpenOffice.org Impress : pixel graphics
-OpenOffice.org Impress : pixel graphics;inserting and editing
-OpenOffice.org Impress : pixel patterns
-OpenOffice.org Impress : placeholders
-OpenOffice.org Impress : placeholders;in SQL queries
-OpenOffice.org Impress : placeholders;on opening files
-OpenOffice.org Impress : placing toolbars
-OpenOffice.org Impress : playing movies and sound files
-OpenOffice.org Impress : plotting data as charts
-OpenOffice.org Impress : plug-ins
-OpenOffice.org Impress : plug-ins;activating and deactivating
-OpenOffice.org Impress : plug-ins;definition
-OpenOffice.org Impress : plug-ins;inserting
-OpenOffice.org Impress : pocket device appliances
-OpenOffice.org Impress : Pocket PC file filters
-OpenOffice.org Impress : points
-OpenOffice.org Impress : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Impress : polygon drawing
-OpenOffice.org Impress : polygons
-OpenOffice.org Impress : polygons;inserting
-OpenOffice.org Impress : polygons;intersecting/subtracting/merging
-OpenOffice.org Impress : pop-art filter
-OpenOffice.org Impress : portable document format
-OpenOffice.org Impress : positioning
-OpenOffice.org Impress : positioning;draw objects and controls
-OpenOffice.org Impress : positioning;fonts
-OpenOffice.org Impress : positioning;objects
-OpenOffice.org Impress : positioning;toolbars
-OpenOffice.org Impress : post method for form transmissions
-OpenOffice.org Impress : posterizing filter
-OpenOffice.org Impress : PostScript
-OpenOffice.org Impress : PostScript;creating files
-OpenOffice.org Impress : PostScript;PDF converter, UNIX
-OpenOffice.org Impress : PowerPoint export
-OpenOffice.org Impress : precision as shown (Calc)
-OpenOffice.org Impress : predefining fonts
-OpenOffice.org Impress : presentations
-OpenOffice.org Impress : presentations;arranging slides
-OpenOffice.org Impress : presentations;creating/opening
-OpenOffice.org Impress : presentations;exiting by interaction
-OpenOffice.org Impress : presentations;exporting to HTML
-OpenOffice.org Impress : presentations;importing HTML
-OpenOffice.org Impress : presentations;inserting spreadsheet cells
-OpenOffice.org Impress : presentations;inserting spreadsheets
-OpenOffice.org Impress : presentations;live on the Internet
-OpenOffice.org Impress : presentations;navigating
-OpenOffice.org Impress : presentations;numbering slides in
-OpenOffice.org Impress : presentations;ordering of effects
-OpenOffice.org Impress : presentations;print menu
-OpenOffice.org Impress : presentations;printing
-OpenOffice.org Impress : presentations;rehearse timings
-OpenOffice.org Impress : presentations;saving
-OpenOffice.org Impress : presentations;saving automatically
-OpenOffice.org Impress : presentations;saving in other formats
-OpenOffice.org Impress : presentations;sending as e-mail
-OpenOffice.org Impress : presentations;settings for
-OpenOffice.org Impress : presentations;shortcut keys
-OpenOffice.org Impress : presentations;starting
-OpenOffice.org Impress : presentations;starting with wizard
-OpenOffice.org Impress : presentations;window / full screen
-OpenOffice.org Impress : presentations;wizards
-OpenOffice.org Impress : press buttons, see push buttons
-OpenOffice.org Impress : previews
-OpenOffice.org Impress : previews;fonts lists
-OpenOffice.org Impress : primary keys
-OpenOffice.org Impress : primary keys;defining
-OpenOffice.org Impress : primary keys;inserting (Base)
-OpenOffice.org Impress : print area selection
-OpenOffice.org Impress : printer metrics for document formatting (Writer)
-OpenOffice.org Impress : printers
-OpenOffice.org Impress : printers;adding, UNIX
-OpenOffice.org Impress : printers;choosing
-OpenOffice.org Impress : printers;default printer
-OpenOffice.org Impress : printers;faxes under UNIX
-OpenOffice.org Impress : printers;maximum page formats
-OpenOffice.org Impress : printers;paper trays
-OpenOffice.org Impress : printers;properties
-OpenOffice.org Impress : printing
-OpenOffice.org Impress : printing;black and white
-OpenOffice.org Impress : printing;brochures
-OpenOffice.org Impress : printing;colors in grayscale
-OpenOffice.org Impress : printing;copies
-OpenOffice.org Impress : printing;creating individual jobs
-OpenOffice.org Impress : printing;dates in presentations
-OpenOffice.org Impress : printing;directly
-OpenOffice.org Impress : printing;documents
-OpenOffice.org Impress : printing;drawings defaults
-OpenOffice.org Impress : printing;elements in text documents
-OpenOffice.org Impress : printing;faster
-OpenOffice.org Impress : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Impress : printing;fitting to pages in presentations
-OpenOffice.org Impress : printing;fitting to paper
-OpenOffice.org Impress : printing;formulas in OpenOffice.org Math
-OpenOffice.org Impress : printing;hidden pages of presentations
-OpenOffice.org Impress : printing;in original size in OpenOffice.org Math
-OpenOffice.org Impress : printing;left/right pages
-OpenOffice.org Impress : printing;presentations
-OpenOffice.org Impress : printing;queries (Base)
-OpenOffice.org Impress : printing;scaling in OpenOffice.org Math
-OpenOffice.org Impress : printing;selections
-OpenOffice.org Impress : printing;text always in black
-OpenOffice.org Impress : printing;text in reverse order
-OpenOffice.org Impress : printing;tiling pages in presentations
-OpenOffice.org Impress : printing;transparencies
-OpenOffice.org Impress : printing;warnings
-OpenOffice.org Impress : printing;without scaling in presentations
-OpenOffice.org Impress : printing speed
-OpenOffice.org Impress : programming
-OpenOffice.org Impress : programming;OpenOffice.org
-OpenOffice.org Impress : programming;scripting
-OpenOffice.org Impress : programs run by mouse click in presentations
-OpenOffice.org Impress : properties
-OpenOffice.org Impress : properties;charts
-OpenOffice.org Impress : properties;fields in databases
-OpenOffice.org Impress : properties;files
-OpenOffice.org Impress : properties;form controls
-OpenOffice.org Impress : properties;forms
-OpenOffice.org Impress : properties;printers
-OpenOffice.org Impress : properties;smooth lines in line charts/XY charts
-OpenOffice.org Impress : protected contents
-OpenOffice.org Impress : protected dashes
-OpenOffice.org Impress : protected database tables
-OpenOffice.org Impress : protected documents
-OpenOffice.org Impress : protected spaces
-OpenOffice.org Impress : protected spaces;inserting
-OpenOffice.org Impress : protected spaces;showing (Writer)
-OpenOffice.org Impress : protecting
-OpenOffice.org Impress : protecting;contents
-OpenOffice.org Impress : protecting;recorded changes
-OpenOffice.org Impress : proxy settings
-OpenOffice.org Impress : push buttons
-OpenOffice.org Impress : push buttons;adding to documents
-OpenOffice.org Impress : push buttons;creating
-OpenOffice.org Impress : pyramids
-OpenOffice.org Impress : queries
-OpenOffice.org Impress : queries;copying (Base)
-OpenOffice.org Impress : queries;creating in design view (Base)
-OpenOffice.org Impress : queries;creating in SQL view
-OpenOffice.org Impress : queries;defining (Base)
-OpenOffice.org Impress : queries;deleting table links (Base)
-OpenOffice.org Impress : queries;editing in data source view
-OpenOffice.org Impress : queries;formulating filter conditions (Base)
-OpenOffice.org Impress : queries;joining tables (Base)
-OpenOffice.org Impress : queries;missing elements (Base)
-OpenOffice.org Impress : queries;overview (Base)
-OpenOffice.org Impress : queries;parameter queries (Base)
-OpenOffice.org Impress : queries;printing (Base)
-OpenOffice.org Impress : Query Wizard (Base)
-OpenOffice.org Impress : quickstarter
-OpenOffice.org Impress : quotation marks
-OpenOffice.org Impress : quotation marks;replacing
-OpenOffice.org Impress : quotes
-OpenOffice.org Impress : quotes;custom
-OpenOffice.org Impress : radar charts, see net charts
-OpenOffice.org Impress : radio button creation
-OpenOffice.org Impress : read-only documents
-OpenOffice.org Impress : read-only documents;cursor
-OpenOffice.org Impress : read-only documents;database tables on/off
-OpenOffice.org Impress : read-only documents;editing
-OpenOffice.org Impress : read-only documents;opening documents as
-OpenOffice.org Impress : read-only items in Data Navigator
-OpenOffice.org Impress : recognizing URLs automatically
-OpenOffice.org Impress : recording
-OpenOffice.org Impress : recording;changes
-OpenOffice.org Impress : recording;display times for slides
-OpenOffice.org Impress : recording;macros
-OpenOffice.org Impress : records
-OpenOffice.org Impress : records;inserting notes
-OpenOffice.org Impress : records;protecting
-OpenOffice.org Impress : records;saving
-OpenOffice.org Impress : records;searching in databases
-OpenOffice.org Impress : rectangles
-OpenOffice.org Impress : rectangles with round corners
-OpenOffice.org Impress : recursions in spreadsheets
-OpenOffice.org Impress : redo command
-OpenOffice.org Impress : reduced printing
-OpenOffice.org Impress : reference lines
-OpenOffice.org Impress : references
-OpenOffice.org Impress : references;displaying in color (Calc)
-OpenOffice.org Impress : references;expanding (Calc)
-OpenOffice.org Impress : references;iterative (Calc)
-OpenOffice.org Impress : Refresh Data feature in Microsoft Office
-OpenOffice.org Impress : register-true
-OpenOffice.org Impress : register-true;definition
-OpenOffice.org Impress : registering
-OpenOffice.org Impress : registering;address books
-OpenOffice.org Impress : registering;databases (Base)
-OpenOffice.org Impress : registering;OpenOffice.org
-OpenOffice.org Impress : regression curves in charts
-OpenOffice.org Impress : regular expressions
-OpenOffice.org Impress : regular expressions;list of
-OpenOffice.org Impress : regular expressions;opening files
-OpenOffice.org Impress : rehearse timings
-OpenOffice.org Impress : relational databases (Base)
-OpenOffice.org Impress : relations
-OpenOffice.org Impress : relations;creating and deleting (Base)
-OpenOffice.org Impress : relations;joining tables (Base)
-OpenOffice.org Impress : relations;properties (Base)
-OpenOffice.org Impress : relative hyperlinks
-OpenOffice.org Impress : relative saving of URLs
-OpenOffice.org Impress : reloading
-OpenOffice.org Impress : reloading;documents
-OpenOffice.org Impress : reloading;HTML documents, automatically
-OpenOffice.org Impress : remarks, see also notes
-OpenOffice.org Impress : remote configurations
-OpenOffice.org Impress : remove noise filter
-OpenOffice.org Impress : removing
-OpenOffice.org Impress : removing;bullets and numbering
-OpenOffice.org Impress : removing;form filters
-OpenOffice.org Impress : removing, see also deleting
-OpenOffice.org Impress : renaming layers
-OpenOffice.org Impress : reorganizing charts
-OpenOffice.org Impress : Replace text as you type feature in Microsoft Office
-OpenOffice.org Impress : replacement options
-OpenOffice.org Impress : replacement table
-OpenOffice.org Impress : replacing
-OpenOffice.org Impress : replacing;AutoCorrect function
-OpenOffice.org Impress : replacing;colors in bitmaps
-OpenOffice.org Impress : replacing;dashes
-OpenOffice.org Impress : Report Builder
-OpenOffice.org Impress : reports
-OpenOffice.org Impress : reports;creating
-OpenOffice.org Impress : reports;error reports
-OpenOffice.org Impress : reports;opening and editing
-OpenOffice.org Impress : reports;templates
-OpenOffice.org Impress : resetting
-OpenOffice.org Impress : resetting;templates
-OpenOffice.org Impress : resizing
-OpenOffice.org Impress : resizing;objects, by mouse
-OpenOffice.org Impress : resizing, see also scaling/zooming
-OpenOffice.org Impress : resolution when printing bitmaps
-OpenOffice.org Impress : restoring
-OpenOffice.org Impress : restoring;default formatting
-OpenOffice.org Impress : restoring;editing
-OpenOffice.org Impress : reversing objects
-OpenOffice.org Impress : reversing printing order
-OpenOffice.org Impress : review function
-OpenOffice.org Impress : review function;accepting or rejecting changes
-OpenOffice.org Impress : review function;comparing documents
-OpenOffice.org Impress : review function;recording changes example
-OpenOffice.org Impress : rich text control
-OpenOffice.org Impress : right alignment of paragraphs
-OpenOffice.org Impress : right joins (Base)
-OpenOffice.org Impress : right-to-left text
-OpenOffice.org Impress : rotating
-OpenOffice.org Impress : rotating;3D text
-OpenOffice.org Impress : rotating;draw objects
-OpenOffice.org Impress : rotation mode
-OpenOffice.org Impress : round corners
-OpenOffice.org Impress : rounding precision (Calc)
-OpenOffice.org Impress : row headers
-OpenOffice.org Impress : row headers;displaying (Calc)
-OpenOffice.org Impress : row headers;highlighting (Calc)
-OpenOffice.org Impress : rulers
-OpenOffice.org Impress : rulers;default settings
-OpenOffice.org Impress : rulers;in presentations
-OpenOffice.org Impress : rulers;measurement units
-OpenOffice.org Impress : rulers;visible in presentations
-OpenOffice.org Impress : running macros/programs in presentations
-OpenOffice.org Impress : running slide shows
-OpenOffice.org Impress : samples and templates
-OpenOffice.org Impress : saving
-OpenOffice.org Impress : saving;as HTML
-OpenOffice.org Impress : saving;default file formats
-OpenOffice.org Impress : saving;dialog settings
-OpenOffice.org Impress : saving;documents
-OpenOffice.org Impress : saving;documents for mobile devices
-OpenOffice.org Impress : saving;documents in other formats
-OpenOffice.org Impress : saving;documents, automatically
-OpenOffice.org Impress : saving;in Microsoft Office file format
-OpenOffice.org Impress : saving;options
-OpenOffice.org Impress : saving;templates
-OpenOffice.org Impress : saving;to XML
-OpenOffice.org Impress : saving;VBA code in Microsoft Office documents
-OpenOffice.org Impress : saving;with password by default
-OpenOffice.org Impress : saving as command
-OpenOffice.org Impress : saving as command;precautions
-OpenOffice.org Impress : scaling
-OpenOffice.org Impress : scaling;axes
-OpenOffice.org Impress : scaling;font sizes in user interface
-OpenOffice.org Impress : scaling;objects
-OpenOffice.org Impress : scaling;pictures
-OpenOffice.org Impress : scaling;printing in OpenOffice.org Math
-OpenOffice.org Impress : scaling;text in charts
-OpenOffice.org Impress : scaling;when printing presentations
-OpenOffice.org Impress : scaling, see also zooming
-OpenOffice.org Impress : scatter charts
-OpenOffice.org Impress : screen
-OpenOffice.org Impress : screen;full screen views
-OpenOffice.org Impress : screen;scaling
-OpenOffice.org Impress : screen magnifiers
-OpenOffice.org Impress : screen readers
-OpenOffice.org Impress : script organization
-OpenOffice.org Impress : scripting in programming
-OpenOffice.org Impress : scrollbars
-OpenOffice.org Impress : scrollbars;controls
-OpenOffice.org Impress : scrollbars;displaying (Calc)
-OpenOffice.org Impress : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Impress : search criteria for database functions in cells
-OpenOffice.org Impress : search engines
-OpenOffice.org Impress : search engines;definition
-OpenOffice.org Impress : search engines;selecting
-OpenOffice.org Impress : searching
-OpenOffice.org Impress : searching;all sheets
-OpenOffice.org Impress : searching;databases
-OpenOffice.org Impress : searching;form filters
-OpenOffice.org Impress : searching;Internet
-OpenOffice.org Impress : searching;tables and forms
-OpenOffice.org Impress : secondary axes in charts
-OpenOffice.org Impress : sections
-OpenOffice.org Impress : sections;backgrounds
-OpenOffice.org Impress : sections;protecting
-OpenOffice.org Impress : sectors of circles/ellipses
-OpenOffice.org Impress : security
-OpenOffice.org Impress : security;options for documents with macros
-OpenOffice.org Impress : security;protecting contents
-OpenOffice.org Impress : security;warning dialogs with macros
-OpenOffice.org Impress : segments of circles/ellipses
-OpenOffice.org Impress : selecting
-OpenOffice.org Impress : selecting;controls
-OpenOffice.org Impress : selecting;group objects
-OpenOffice.org Impress : selecting;hidden objects
-OpenOffice.org Impress : selecting;layers
-OpenOffice.org Impress : selecting;measurement units
-OpenOffice.org Impress : selecting;objects
-OpenOffice.org Impress : selecting;print areas
-OpenOffice.org Impress : selecting;several files
-OpenOffice.org Impress : selection clipboard
-OpenOffice.org Impress : selection modes in text
-OpenOffice.org Impress : sending
-OpenOffice.org Impress : sending;AutoAbstract function in presentations
-OpenOffice.org Impress : sending;documents as e-mail
-OpenOffice.org Impress : sending;documents as faxes
-OpenOffice.org Impress : separator lines
-OpenOffice.org Impress : separator lines;defining
-OpenOffice.org Impress : separators
-OpenOffice.org Impress : separators;conditional
-OpenOffice.org Impress : Server Side ImageMap
-OpenOffice.org Impress : settings
-OpenOffice.org Impress : settings;printers
-OpenOffice.org Impress : settings;program configuration
-OpenOffice.org Impress : settings;proxies
-OpenOffice.org Impress : settings;tracking changes
-OpenOffice.org Impress : settings;views
-OpenOffice.org Impress : SGML
-OpenOffice.org Impress : SGML;definition
-OpenOffice.org Impress : shadows
-OpenOffice.org Impress : shadows;areas
-OpenOffice.org Impress : shadows;borders
-OpenOffice.org Impress : shadows;characters
-OpenOffice.org Impress : shadows;characters, using context menu
-OpenOffice.org Impress : sharpening filter
-OpenOffice.org Impress : shearing objects
-OpenOffice.org Impress : sheet tabs
-OpenOffice.org Impress : sheet tabs;displaying
-OpenOffice.org Impress : sheets
-OpenOffice.org Impress : sheets;searching all
-OpenOffice.org Impress : shells
-OpenOffice.org Impress : shortcut keys
-OpenOffice.org Impress : shortcut keys;assigning macros
-OpenOffice.org Impress : shortcut keys;charts
-OpenOffice.org Impress : shortcut keys;general
-OpenOffice.org Impress : shortcut keys;in databases
-OpenOffice.org Impress : shortcut keys;in drawings
-OpenOffice.org Impress : shortcut keys;in presentations
-OpenOffice.org Impress : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Impress : Show/Hide feature in Microsoft Office
-OpenOffice.org Impress : showing
-OpenOffice.org Impress : showing;changes
-OpenOffice.org Impress : showing;docked windows
-OpenOffice.org Impress : showing;drawings and controls (Writer)
-OpenOffice.org Impress : showing;guides
-OpenOffice.org Impress : showing;hidden layers
-OpenOffice.org Impress : showing;hidden slides
-OpenOffice.org Impress : showing;levels
-OpenOffice.org Impress : showing;live presentations on the Internet
-OpenOffice.org Impress : showing;slide shows
-OpenOffice.org Impress : showing;subpoints
-OpenOffice.org Impress : showing;toolbars
-OpenOffice.org Impress : sign conversion to curves
-OpenOffice.org Impress : signing documents with digital signatures
-OpenOffice.org Impress : similarity search
-OpenOffice.org Impress : simple handles (Writer)
-OpenOffice.org Impress : simplified Chinese
-OpenOffice.org Impress : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Impress : single sign on options
-OpenOffice.org Impress : single-line spacing in text
-OpenOffice.org Impress : sizes
-OpenOffice.org Impress : sizes;draw objects
-OpenOffice.org Impress : sizes;pictures
-OpenOffice.org Impress : skewing draw objects
-OpenOffice.org Impress : slanting draw objects
-OpenOffice.org Impress : slanting objects
-OpenOffice.org Impress : slide designs
-OpenOffice.org Impress : slide layouts
-OpenOffice.org Impress : slide master view
-OpenOffice.org Impress : slide masters
-OpenOffice.org Impress : slide masters;changing backgrounds
-OpenOffice.org Impress : slide masters;designing
-OpenOffice.org Impress : slide masters;headers and footers
-OpenOffice.org Impress : slide numbers
-OpenOffice.org Impress : slide numbers on all slides
-OpenOffice.org Impress : slide shows
-OpenOffice.org Impress : slide shows;custom
-OpenOffice.org Impress : slide shows;settings for
-OpenOffice.org Impress : slide shows;starting
-OpenOffice.org Impress : slide transitions
-OpenOffice.org Impress : slide transitions;applying effects
-OpenOffice.org Impress : slide transitions;automatic
-OpenOffice.org Impress : slide transitions;manual
-OpenOffice.org Impress : slide transitions;sounds
-OpenOffice.org Impress : slides
-OpenOffice.org Impress : slides;arranging
-OpenOffice.org Impress : slides;backgrounds
-OpenOffice.org Impress : slides;changing backgrounds
-OpenOffice.org Impress : slides;copying between documents
-OpenOffice.org Impress : slides;deleting
-OpenOffice.org Impress : slides;expanding
-OpenOffice.org Impress : slides;formatting
-OpenOffice.org Impress : slides;headers and footers
-OpenOffice.org Impress : slides;inserting
-OpenOffice.org Impress : slides;inserting as links
-OpenOffice.org Impress : slides;inserting notes
-OpenOffice.org Impress : slides;page numbers
-OpenOffice.org Impress : slides;printing
-OpenOffice.org Impress : small capitals
-OpenOffice.org Impress : small icons
-OpenOffice.org Impress : smart tags
-OpenOffice.org Impress : smart tags;options
-OpenOffice.org Impress : smooth scrolling (Writer)
-OpenOffice.org Impress : smoothing filter
-OpenOffice.org Impress : snap grid defaults (Writer/Calc)
-OpenOffice.org Impress : snap lines, see also guides
-OpenOffice.org Impress : snap points
-OpenOffice.org Impress : snap points;editing
-OpenOffice.org Impress : snap points;inserting
-OpenOffice.org Impress : snapping in presentations and drawings
-OpenOffice.org Impress : solarization filter
-OpenOffice.org Impress : sort lists
-OpenOffice.org Impress : sort lists;copying to in Calc
-OpenOffice.org Impress : sorting
-OpenOffice.org Impress : sorting;data in forms
-OpenOffice.org Impress : sorting;databases
-OpenOffice.org Impress : sounds
-OpenOffice.org Impress : sounds;for effects
-OpenOffice.org Impress : sounds;formats
-OpenOffice.org Impress : sounds;inserting and playing
-OpenOffice.org Impress : sounds;on slide transitions
-OpenOffice.org Impress : sounds;UNIX
-OpenOffice.org Impress : spaces
-OpenOffice.org Impress : spaces;displaying (Writer)
-OpenOffice.org Impress : spaces;ignoring double
-OpenOffice.org Impress : spaces;inserting protected spaces
-OpenOffice.org Impress : spaces;showing protected spaces (Writer)
-OpenOffice.org Impress : spacing
-OpenOffice.org Impress : spacing;between paragraphs in footnotes
-OpenOffice.org Impress : spacing;font effects
-OpenOffice.org Impress : spacing;lines and paragraphs
-OpenOffice.org Impress : spacing;tab stops in text documents
-OpenOffice.org Impress : spacing;tabs in presentations
-OpenOffice.org Impress : spadmin
-OpenOffice.org Impress : speaker notes
-OpenOffice.org Impress : speaker notes;defaults
-OpenOffice.org Impress : speaker notes;inserting
-OpenOffice.org Impress : special characters
-OpenOffice.org Impress : speech bubbles
-OpenOffice.org Impress : speed of printing
-OpenOffice.org Impress : spellcheck
-OpenOffice.org Impress : spellcheck;activating for a language
-OpenOffice.org Impress : spellcheck;context menus
-OpenOffice.org Impress : spellcheck;default languages
-OpenOffice.org Impress : spellcheck;dialog
-OpenOffice.org Impress : spellcheck;dictionary of exceptions
-OpenOffice.org Impress : spellcheck;ignore list
-OpenOffice.org Impress : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Impress : spheres
-OpenOffice.org Impress : spin button creation
-OpenOffice.org Impress : splitting
-OpenOffice.org Impress : splitting;combinations
-OpenOffice.org Impress : splitting;curves
-OpenOffice.org Impress : spoolfiles with Xprinter
-OpenOffice.org Impress : spreadsheets
-OpenOffice.org Impress : spreadsheets;as databases (base)
-OpenOffice.org Impress : spreadsheets;backgrounds
-OpenOffice.org Impress : spreadsheets;copying areas to text documents
-OpenOffice.org Impress : spreadsheets;creating/opening
-OpenOffice.org Impress : spreadsheets;in presentations
-OpenOffice.org Impress : spreadsheets;inserting charts
-OpenOffice.org Impress : spreadsheets;inserting database records
-OpenOffice.org Impress : spreadsheets;printing
-OpenOffice.org Impress : spreadsheets;saving
-OpenOffice.org Impress : spreadsheets;saving automatically
-OpenOffice.org Impress : spreadsheets;saving in other formats
-OpenOffice.org Impress : spreadsheets;sending as e-mail
-OpenOffice.org Impress : SQL
-OpenOffice.org Impress : SQL;definition
-OpenOffice.org Impress : SQL;DISTINCT parameter
-OpenOffice.org Impress : SQL;executing SQL commands
-OpenOffice.org Impress : SQL;executing SQL statements (Base)
-OpenOffice.org Impress : SQL;queries (Base)
-OpenOffice.org Impress : square drawings
-OpenOffice.org Impress : standard bar on/off
-OpenOffice.org Impress : standard deviation in charts
-OpenOffice.org Impress : standard filters in databases
-OpenOffice.org Impress : standard printer under UNIX
-OpenOffice.org Impress : Start Module backing window
-OpenOffice.org Impress : start parameters
-OpenOffice.org Impress : starting
-OpenOffice.org Impress : starting;always with the current slide
-OpenOffice.org Impress : starting;custom slide shows
-OpenOffice.org Impress : starting;slide shows
-OpenOffice.org Impress : statistics in charts
-OpenOffice.org Impress : status bar on/off
-OpenOffice.org Impress : stickers
-OpenOffice.org Impress : stock charts
-OpenOffice.org Impress : strikethrough
-OpenOffice.org Impress : strikethrough;characters
-OpenOffice.org Impress : strikethrough;font effects
-OpenOffice.org Impress : styles
-OpenOffice.org Impress : styles;'changed' message
-OpenOffice.org Impress : styles;arrow and line styles
-OpenOffice.org Impress : styles;copying between documents
-OpenOffice.org Impress : styles;keyboard shortcuts
-OpenOffice.org Impress : styles;organizing
-OpenOffice.org Impress : styles;printing styles used in a document
-OpenOffice.org Impress : styles;replacing automatically
-OpenOffice.org Impress : Styles and Formatting window
-OpenOffice.org Impress : Styles and Formatting window;docking
-OpenOffice.org Impress : Styles and Formatting window;graphics documents
-OpenOffice.org Impress : subforms
-OpenOffice.org Impress : subforms;creating
-OpenOffice.org Impress : subforms;description
-OpenOffice.org Impress : submitting forms
-OpenOffice.org Impress : subpoints
-OpenOffice.org Impress : subpoints;hiding
-OpenOffice.org Impress : subpoints;showing
-OpenOffice.org Impress : subtracting polygons
-OpenOffice.org Impress : suffixes in file formats
-OpenOffice.org Impress : summary slide
-OpenOffice.org Impress : support on the Web
-OpenOffice.org Impress : synchronizing
-OpenOffice.org Impress : synchronizing;labels and business cards
-OpenOffice.org Impress : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Impress : system address book registration
-OpenOffice.org Impress : tab stops
-OpenOffice.org Impress : tab stops;displaying (Writer)
-OpenOffice.org Impress : tab stops;inserting and editing
-OpenOffice.org Impress : tab stops;setting in sheets
-OpenOffice.org Impress : tab stops;settings
-OpenOffice.org Impress : tab stops;spacing in presentations
-OpenOffice.org Impress : tab stops;spacing in text documents
-OpenOffice.org Impress : table controls
-OpenOffice.org Impress : table controls;form functions
-OpenOffice.org Impress : table controls;keyboard-only edit mode
-OpenOffice.org Impress : table controls;properties
-OpenOffice.org Impress : table views of databases
-OpenOffice.org Impress : Table Wizard (Base)
-OpenOffice.org Impress : tables
-OpenOffice.org Impress : tables;backgrounds
-OpenOffice.org Impress : tables;inserting line breaks
-OpenOffice.org Impress : tables in databases
-OpenOffice.org Impress : tables in databases;access rights to (Base)
-OpenOffice.org Impress : tables in databases;adding to queries
-OpenOffice.org Impress : tables in databases;browsing and editing
-OpenOffice.org Impress : tables in databases;copying database tables (Base)
-OpenOffice.org Impress : tables in databases;creating
-OpenOffice.org Impress : tables in databases;creating in design view
-OpenOffice.org Impress : tables in databases;importing text formats (Base)
-OpenOffice.org Impress : tables in databases;joining for queries (Base)
-OpenOffice.org Impress : tables in databases;printing queries (Base)
-OpenOffice.org Impress : tables in databases;relations (Base)
-OpenOffice.org Impress : tables in databases;searching
-OpenOffice.org Impress : tables in spreadsheets
-OpenOffice.org Impress : tables in spreadsheets;copying data to other applications
-OpenOffice.org Impress : tables in spreadsheets;defining borders
-OpenOffice.org Impress : tables in spreadsheets;value highlighting
-OpenOffice.org Impress : tables in text
-OpenOffice.org Impress : tables in text;captions
-OpenOffice.org Impress : tables in text;creating automatically
-OpenOffice.org Impress : tables in text;default settings
-OpenOffice.org Impress : tables in text;defining borders
-OpenOffice.org Impress : tables in text;displaying
-OpenOffice.org Impress : tables in text;printing
-OpenOffice.org Impress : tables in text;protecting cells
-OpenOffice.org Impress : tables of contents
-OpenOffice.org Impress : tables of contents;unprotecting
-OpenOffice.org Impress : tabs
-OpenOffice.org Impress : tabs;displaying sheet tabs
-OpenOffice.org Impress : tags
-OpenOffice.org Impress : tags;definition
-OpenOffice.org Impress : tags;META tags
-OpenOffice.org Impress : task pane
-OpenOffice.org Impress : templates
-OpenOffice.org Impress : templates;agendas
-OpenOffice.org Impress : templates;changing basic fonts
-OpenOffice.org Impress : templates;database reports
-OpenOffice.org Impress : templates;deleting
-OpenOffice.org Impress : templates;editing and saving
-OpenOffice.org Impress : templates;faxes
-OpenOffice.org Impress : templates;importing and exporting
-OpenOffice.org Impress : templates;letters
-OpenOffice.org Impress : templates;new documents from templates
-OpenOffice.org Impress : templates;opening documents with
-OpenOffice.org Impress : templates;organizing
-OpenOffice.org Impress : terminology
-OpenOffice.org Impress : terminology;general glossary
-OpenOffice.org Impress : terminology;Internet glossary
-OpenOffice.org Impress : testing XML filters
-OpenOffice.org Impress : text
-OpenOffice.org Impress : text;animating
-OpenOffice.org Impress : text;Asian layout
-OpenOffice.org Impress : text;backgrounds
-OpenOffice.org Impress : text;bold
-OpenOffice.org Impress : text;coloring
-OpenOffice.org Impress : text;contours
-OpenOffice.org Impress : text;converting to curves
-OpenOffice.org Impress : text;copying by drag and drop
-OpenOffice.org Impress : text;CTL languages
-OpenOffice.org Impress : text;double-clicking to edit
-OpenOffice.org Impress : text;drawing pictures
-OpenOffice.org Impress : text;font effects
-OpenOffice.org Impress : text;font sizes
-OpenOffice.org Impress : text;font styles
-OpenOffice.org Impress : text;fonts and formats
-OpenOffice.org Impress : text;Fontwork icons
-OpenOffice.org Impress : text;hyperlinks
-OpenOffice.org Impress : text;inserting special characters
-OpenOffice.org Impress : text;italics
-OpenOffice.org Impress : text;kerning
-OpenOffice.org Impress : text;language selection
-OpenOffice.org Impress : text;line spacing
-OpenOffice.org Impress : text;overwriting or inserting
-OpenOffice.org Impress : text;placeholders in presentations
-OpenOffice.org Impress : text;printing in black
-OpenOffice.org Impress : text;replacing with format
-OpenOffice.org Impress : text;selection modes
-OpenOffice.org Impress : text;shadowed
-OpenOffice.org Impress : text;text/draw objects
-OpenOffice.org Impress : text;toolbar
-OpenOffice.org Impress : text attributes
-OpenOffice.org Impress : text attributes;hyperlinks
-OpenOffice.org Impress : text attributes;undoing
-OpenOffice.org Impress : text boxes
-OpenOffice.org Impress : text boxes;form functions
-OpenOffice.org Impress : text boxes;positioning
-OpenOffice.org Impress : text breaks in cells
-OpenOffice.org Impress : text colors for better accessibility
-OpenOffice.org Impress : text databases (Base)
-OpenOffice.org Impress : text documents
-OpenOffice.org Impress : text documents;creating/opening
-OpenOffice.org Impress : text documents;importing/exporting
-OpenOffice.org Impress : text documents;inserting in slides
-OpenOffice.org Impress : text documents;inserting in slides - Importing HTML Pages Into Presentations
-OpenOffice.org Impress : text documents;inserting spreadsheet cells
-OpenOffice.org Impress : text documents;print settings
-OpenOffice.org Impress : text documents;printing
-OpenOffice.org Impress : text documents;saving
-OpenOffice.org Impress : text documents;saving automatically
-OpenOffice.org Impress : text documents;saving in other formats
-OpenOffice.org Impress : text documents;sending as e-mail
-OpenOffice.org Impress : text effects
-OpenOffice.org Impress : text entry mode for draw objects
-OpenOffice.org Impress : text flow
-OpenOffice.org Impress : text flow;in cells
-OpenOffice.org Impress : text formats
-OpenOffice.org Impress : text formats;databases
-OpenOffice.org Impress : text formats;pasting
-OpenOffice.org Impress : text frames
-OpenOffice.org Impress : text input fields
-OpenOffice.org Impress : text layout for special languages
-OpenOffice.org Impress : text objects
-OpenOffice.org Impress : text objects;alignment
-OpenOffice.org Impress : text objects;draw functions
-OpenOffice.org Impress : text objects;fonts
-OpenOffice.org Impress : text objects;in presentations and drawings
-OpenOffice.org Impress : text overflow in spreadsheet cells
-OpenOffice.org Impress : text scaling in charts
-OpenOffice.org Impress : text, see also text documents, paragraphs and characters
-OpenOffice.org Impress : TextArt, see Fontwork
-OpenOffice.org Impress : textures
-OpenOffice.org Impress : textures;inserting from Gallery
-OpenOffice.org Impress : textures;on chart bars
-OpenOffice.org Impress : Thai
-OpenOffice.org Impress : Thai;entering text
-OpenOffice.org Impress : Thai;language settings
-OpenOffice.org Impress : thesaurus
-OpenOffice.org Impress : thesaurus;activating for a language
-OpenOffice.org Impress : ticker text
-OpenOffice.org Impress : tiled printing of slides
-OpenOffice.org Impress : time and date on all slides
-OpenOffice.org Impress : time fields
-OpenOffice.org Impress : time fields;form functions
-OpenOffice.org Impress : times
-OpenOffice.org Impress : times;fixed
-OpenOffice.org Impress : times;inserting when printing presentations
-OpenOffice.org Impress : times;variable
-OpenOffice.org Impress : times, formats
-OpenOffice.org Impress : timings
-OpenOffice.org Impress : timings;rehearse timings
-OpenOffice.org Impress : tips
-OpenOffice.org Impress : tips;extended tips in Help
-OpenOffice.org Impress : title rows
-OpenOffice.org Impress : title rows;printing in OpenOffice.org Math
-OpenOffice.org Impress : titles
-OpenOffice.org Impress : titles;alignment (charts)
-OpenOffice.org Impress : titles;changing
-OpenOffice.org Impress : titles;editing in charts
-OpenOffice.org Impress : titles;font effects
-OpenOffice.org Impress : titles;formatting automatically
-OpenOffice.org Impress : titles;formatting charts
-OpenOffice.org Impress : titles;objects
-OpenOffice.org Impress : toolbars
-OpenOffice.org Impress : toolbars;3D objects
-OpenOffice.org Impress : toolbars;adding buttons
-OpenOffice.org Impress : toolbars;curves
-OpenOffice.org Impress : toolbars;docking/undocking
-OpenOffice.org Impress : toolbars;ellipses
-OpenOffice.org Impress : toolbars;Form Navigation bar
-OpenOffice.org Impress : toolbars;viewing/closing
-OpenOffice.org Impress : tools bar
-OpenOffice.org Impress : tooltips
-OpenOffice.org Impress : tooltips;extended tips
-OpenOffice.org Impress : tooltips;help
-OpenOffice.org Impress : torus
-OpenOffice.org Impress : Track changes feature in Microsoft Office
-OpenOffice.org Impress : traditional Chinese
-OpenOffice.org Impress : traditional Chinese;translating to simplified chinese
-OpenOffice.org Impress : transition effects
-OpenOffice.org Impress : transparency
-OpenOffice.org Impress : transparency;adjusting
-OpenOffice.org Impress : transparency;areas
-OpenOffice.org Impress : transparency;of objects
-OpenOffice.org Impress : transparency;off for faster printing
-OpenOffice.org Impress : transparency;saving
-OpenOffice.org Impress : tree view of Help
-OpenOffice.org Impress : trend lines in charts
-OpenOffice.org Impress : typefaces
-OpenOffice.org Impress : typefaces;adding under UNIX
-OpenOffice.org Impress : typefaces;formats
-OpenOffice.org Impress : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Impress : typography
-OpenOffice.org Impress : typography;Asian
-OpenOffice.org Impress : underlining
-OpenOffice.org Impress : underlining;AutoFormat function
-OpenOffice.org Impress : underlining;characters
-OpenOffice.org Impress : underlining;text
-OpenOffice.org Impress : underlying objects
-OpenOffice.org Impress : undocking windows
-OpenOffice.org Impress : undoing
-OpenOffice.org Impress : undoing;direct formatting
-OpenOffice.org Impress : undoing;editing
-OpenOffice.org Impress : undoing;number of steps
-OpenOffice.org Impress : ungrouping groups
-OpenOffice.org Impress : units
-OpenOffice.org Impress : units;converting
-OpenOffice.org Impress : units;measurement units
-OpenOffice.org Impress : unlocking layers
-OpenOffice.org Impress : UNO components
-OpenOffice.org Impress : UNO components;Extension Manager
-OpenOffice.org Impress : UNO components;integrating new
-OpenOffice.org Impress : update options
-OpenOffice.org Impress : updates
-OpenOffice.org Impress : updates;checking automatically
-OpenOffice.org Impress : updates;checking manually
-OpenOffice.org Impress : updating
-OpenOffice.org Impress : updating;fields and charts, automatically (Writer)
-OpenOffice.org Impress : updating;links in text documents
-OpenOffice.org Impress : updating;links, on opening
-OpenOffice.org Impress : updating;templates
-OpenOffice.org Impress : URL
-OpenOffice.org Impress : URL;changing hyperlink URLs
-OpenOffice.org Impress : URL;definition
-OpenOffice.org Impress : URL;saving absolute/relative paths
-OpenOffice.org Impress : URL;turning off URL recognition
-OpenOffice.org Impress : user data
-OpenOffice.org Impress : user data;input
-OpenOffice.org Impress : user data;removing when saving
-OpenOffice.org Impress : user-defined colors
-OpenOffice.org Impress : user-defined dictionaries
-OpenOffice.org Impress : user-defined dictionaries;creating
-OpenOffice.org Impress : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Impress : user-defined dictionaries;editing
-OpenOffice.org Impress : user-defined styles
-OpenOffice.org Impress : user-defined styles;automatically replacing
-OpenOffice.org Impress : UTF-8/UCS2 support
-OpenOffice.org Impress : Validation feature in Microsoft Office
-OpenOffice.org Impress : values
-OpenOffice.org Impress : values;rounded as shown (Calc)
-OpenOffice.org Impress : variables
-OpenOffice.org Impress : variables;for paths
-OpenOffice.org Impress : variances in charts
-OpenOffice.org Impress : VBA code
-OpenOffice.org Impress : VBA code;loading/saving documents with VBA code
-OpenOffice.org Impress : vector graphics
-OpenOffice.org Impress : vector graphics;converting bitmaps
-OpenOffice.org Impress : vectorizing bitmaps
-OpenOffice.org Impress : version management
-OpenOffice.org Impress : version numbers of documents
-OpenOffice.org Impress : versions
-OpenOffice.org Impress : versions;comparing documents
-OpenOffice.org Impress : versions;file saving as, restriction
-OpenOffice.org Impress : versions;merging document versions
-OpenOffice.org Impress : versions;of a document
-OpenOffice.org Impress : versions;OpenOffice.org
-OpenOffice.org Impress : vertical callouts
-OpenOffice.org Impress : vertical scrollbars (Writer)
-OpenOffice.org Impress : vertical text boxes
-OpenOffice.org Impress : videos
-OpenOffice.org Impress : viewing
-OpenOffice.org Impress : viewing;databases
-OpenOffice.org Impress : viewing;file properties
-OpenOffice.org Impress : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Impress : viewing;toolbars
-OpenOffice.org Impress : views
-OpenOffice.org Impress : views;black and white
-OpenOffice.org Impress : views;creating database views (Base)
-OpenOffice.org Impress : views;defaults
-OpenOffice.org Impress : views;display sizes
-OpenOffice.org Impress : views;full screen
-OpenOffice.org Impress : views;icons
-OpenOffice.org Impress : views;in 3D
-OpenOffice.org Impress : views;scaling
-OpenOffice.org Impress : views;shift function
-OpenOffice.org Impress : views;slide master view
-OpenOffice.org Impress : Visual Basic for Applications
-OpenOffice.org Impress : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Impress : watermarks
-OpenOffice.org Impress : web documents
-OpenOffice.org Impress : web documents;XForms
-OpenOffice.org Impress : Web support
-OpenOffice.org Impress : WebCast export
-OpenOffice.org Impress : windows
-OpenOffice.org Impress : windows;docking
-OpenOffice.org Impress : windows;docking definition
-OpenOffice.org Impress : windows;hiding/showing/docking
-OpenOffice.org Impress : windows;new
-OpenOffice.org Impress : wizards
-OpenOffice.org Impress : wizards;agendas
-OpenOffice.org Impress : wizards;database queries
-OpenOffice.org Impress : wizards;database tables (Base)
-OpenOffice.org Impress : wizards;databases (Base)
-OpenOffice.org Impress : wizards;document converter
-OpenOffice.org Impress : wizards;Euro Converter
-OpenOffice.org Impress : wizards;faxes
-OpenOffice.org Impress : wizards;forms
-OpenOffice.org Impress : wizards;letters
-OpenOffice.org Impress : wizards;overview
-OpenOffice.org Impress : wizards;presentations
-OpenOffice.org Impress : wizards;reports
-OpenOffice.org Impress : Word documents
-OpenOffice.org Impress : Word documents;compatibility
-OpenOffice.org Impress : Word documents;saving as
-OpenOffice.org Impress : WordArt, see Fontwork
-OpenOffice.org Impress : words
-OpenOffice.org Impress : words;automatically replacing
-OpenOffice.org Impress : words;wrapping in cells
-OpenOffice.org Impress : work directory change
-OpenOffice.org Impress : Workbook feature in Microsoft Office
-OpenOffice.org Impress : Worksheet feature in Microsoft Office
-OpenOffice.org Impress : wrapping text
-OpenOffice.org Impress : wrapping text;in cells
-OpenOffice.org Impress : write protection on/off
-OpenOffice.org Impress : writing aids options
-OpenOffice.org Impress : WYSIWYG in fonts lists
-OpenOffice.org Impress : X axes
-OpenOffice.org Impress : X axes;grid formatting
-OpenOffice.org Impress : X axes;scaling
-OpenOffice.org Impress : X axes;showing
-OpenOffice.org Impress : XForms
-OpenOffice.org Impress : XML converters
-OpenOffice.org Impress : XML file formats
-OpenOffice.org Impress : XML filters
-OpenOffice.org Impress : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Impress : XML filters;settings
-OpenOffice.org Impress : XML Forms
-OpenOffice.org Impress : XSLT based filters
-OpenOffice.org Impress : XSLT based filters;settings
-OpenOffice.org Impress : XSLT filters, see also XML filters
-OpenOffice.org Impress : XY charts
-OpenOffice.org Impress : Y axes
-OpenOffice.org Impress : Y axes;formatting
-OpenOffice.org Impress : Y axes;grid formatting
-OpenOffice.org Impress : Y axes;scaling
-OpenOffice.org Impress : Y axes;showing
-OpenOffice.org Impress : years
-OpenOffice.org Impress : years;2-digit options
-OpenOffice.org Impress : Z axes
-OpenOffice.org Impress : Z axes;grid formatting
-OpenOffice.org Impress : Z axes;showing
-OpenOffice.org Impress : zero values
-OpenOffice.org Impress : zero values;displaying (Calc)
-OpenOffice.org Impress : zooming
-OpenOffice.org Impress : zooming;in presentations
-OpenOffice.org Impress : zooming;keyboard
-OpenOffice.org Impress : zooming;page views
-OpenOffice.org Impress : zooming;pictures
-OpenOffice.org Impress : zooming;shortcut keys
-OpenOffice.org Impress : zooming;status bar
-OpenOffice.org Math : 1/2 replacement
-OpenOffice.org Math : 3D text creation
-OpenOffice.org Math : 3D view
-OpenOffice.org Math : abbreviation replacement
-OpenOffice.org Math : absolute hyperlinks
-OpenOffice.org Math : absolute saving of URLs
-OpenOffice.org Math : absolute values
-OpenOffice.org Math : accents
-OpenOffice.org Math : accents
-OpenOffice.org Math : accents;in OpenOffice.org Math
-OpenOffice.org Math : Access databases (base)
-OpenOffice.org Math : access rights for database tables (Base)
-OpenOffice.org Math : accessibility
-OpenOffice.org Math : accessibility;general shortcuts
-OpenOffice.org Math : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Math : accessibility;OpenOffice.org features
-OpenOffice.org Math : accessibility;OpenOffice.org Math shortcuts
-OpenOffice.org Math : accessibility;options
-OpenOffice.org Math : activating
-OpenOffice.org Math : activating;context menus
-OpenOffice.org Math : activating;Error Report Tool
-OpenOffice.org Math : activating;extended help tips
-OpenOffice.org Math : activating;plug-ins
-OpenOffice.org Math : ActiveX control
-OpenOffice.org Math : Adabas D databases (base)
-OpenOffice.org Math : add-ons, see UNO components
-OpenOffice.org Math : adding
-OpenOffice.org Math : adding;automatic captions (Writer)
-OpenOffice.org Math : adding;backgrounds
-OpenOffice.org Math : adding;buttons in toolbars
-OpenOffice.org Math : adding;conditions for XForm items
-OpenOffice.org Math : adding;draw objects
-OpenOffice.org Math : adding;Fontwork objects
-OpenOffice.org Math : adding;items in Data Navigator
-OpenOffice.org Math : adding;namespaces in XForms
-OpenOffice.org Math : adding;paragraph borders
-OpenOffice.org Math : adding;pictures from Gallery
-OpenOffice.org Math : adding;pictures in Gallery
-OpenOffice.org Math : adding;plug-ins
-OpenOffice.org Math : adding;push buttons
-OpenOffice.org Math : adding;table borders
-OpenOffice.org Math : adding;textures on chart bars
-OpenOffice.org Math : addition signs
-OpenOffice.org Math : additional selection mode
-OpenOffice.org Math : address books
-OpenOffice.org Math : address books;LDAP server (Base)
-OpenOffice.org Math : address books;registering
-OpenOffice.org Math : address labels from databases
-OpenOffice.org Math : ADO databases (Base)
-OpenOffice.org Math : Agenda Wizard
-OpenOffice.org Math : aging filter
-OpenOffice.org Math : aligning
-OpenOffice.org Math : aligning;cells
-OpenOffice.org Math : aligning;characters in OpenOffice.org Math
-OpenOffice.org Math : aligning;multi-line formulas
-OpenOffice.org Math : aligning;objects
-OpenOffice.org Math : aligning;paragraphs
-OpenOffice.org Math : aligning;tables in text
-OpenOffice.org Math : aligning;text objects
-OpenOffice.org Math : aligning formulas
-OpenOffice.org Math : alignment
-OpenOffice.org Math : alignment;horizontally centered (Math)
-OpenOffice.org Math : alignment;left (Math)
-OpenOffice.org Math : alignment;right (Math)
-OpenOffice.org Math : alternative fonts
-OpenOffice.org Math : ampersand symbol, see also operators
-OpenOffice.org Math : anchors
-OpenOffice.org Math : anchors;changing
-OpenOffice.org Math : anchors;displaying (Calc)
-OpenOffice.org Math : anchors;types/positions for draw objects
-OpenOffice.org Math : AND operator
-OpenOffice.org Math : animations
-OpenOffice.org Math : animations;accessibility options
-OpenOffice.org Math : appearance options
-OpenOffice.org Math : applet insertion
-OpenOffice.org Math : applying
-OpenOffice.org Math : applying;languages, to selected text
-OpenOffice.org Math : approximately equal to relation
-OpenOffice.org Math : Arabic
-OpenOffice.org Math : Arabic;entering text
-OpenOffice.org Math : Arabic;language settings
-OpenOffice.org Math : arc cosine function
-OpenOffice.org Math : arc cotangent function
-OpenOffice.org Math : arc sine function
-OpenOffice.org Math : area hyperbolic cosine function
-OpenOffice.org Math : area hyperbolic cotangent function
-OpenOffice.org Math : area hyperbolic tangent function
-OpenOffice.org Math : areas
-OpenOffice.org Math : areas;bitmap patterns
-OpenOffice.org Math : areas;hatched/dotted
-OpenOffice.org Math : areas;shadows
-OpenOffice.org Math : areas;slanting
-OpenOffice.org Math : areas;styles
-OpenOffice.org Math : areas;transparency
-OpenOffice.org Math : arguments in command line
-OpenOffice.org Math : arranging
-OpenOffice.org Math : arranging;matrices
-OpenOffice.org Math : arranging;objects
-OpenOffice.org Math : arrows
-OpenOffice.org Math : arrows;defining arrow heads
-OpenOffice.org Math : arrows;defining arrow lines
-OpenOffice.org Math : arrows;drawing in text
-OpenOffice.org Math : arrows;symbols in OpenOffice.org Math
-OpenOffice.org Math : ASCII
-OpenOffice.org Math : ASCII;definition
-OpenOffice.org Math : Asian languages
-OpenOffice.org Math : Asian languages;enabling
-OpenOffice.org Math : Asian Phonetic Guide
-OpenOffice.org Math : Asian typography
-OpenOffice.org Math : assigning scripts
-OpenOffice.org Math : assistive technology in OpenOffice.org
-OpenOffice.org Math : attaching toolbars
-OpenOffice.org Math : attachments in e-mails
-OpenOffice.org Math : attributes
-OpenOffice.org Math : attributes;accents
-OpenOffice.org Math : attributes;additional information
-OpenOffice.org Math : attributes;changing defaults
-OpenOffice.org Math : attributes;changing fonts
-OpenOffice.org Math : attributes;changing in OpenOffice.org Math
-OpenOffice.org Math : attributes;colored characters
-OpenOffice.org Math : attributes;in OpenOffice.org Math
-OpenOffice.org Math : attributes;list of
-OpenOffice.org Math : audio
-OpenOffice.org Math : audio;inserting
-OpenOffice.org Math : audio;UNIX
-OpenOffice.org Math : auto reloading HTML documents
-OpenOffice.org Math : AutoAbstract function for sending text to presentations
-OpenOffice.org Math : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Math : AutoComplete function in text and list boxes
-OpenOffice.org Math : AutoCorrect function
-OpenOffice.org Math : AutoCorrect function;context menu
-OpenOffice.org Math : AutoCorrect function;options
-OpenOffice.org Math : AutoCorrect function;pictures and frames
-OpenOffice.org Math : AutoCorrect function;quotes
-OpenOffice.org Math : AutoCorrect function;replacement table
-OpenOffice.org Math : AutoCorrect function;smart tags
-OpenOffice.org Math : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Math : AutoCorrect function;URL recognition
-OpenOffice.org Math : AutoFormat function
-OpenOffice.org Math : AutoFormat function;switching on and off
-OpenOffice.org Math : automatic captions (Writer)
-OpenOffice.org Math : automatic control focus
-OpenOffice.org Math : automatic hyperlink formatting
-OpenOffice.org Math : automatic line breaks
-OpenOffice.org Math : automatic lines/borders in text
-OpenOffice.org Math : automatic saving
-OpenOffice.org Math : AutoPilots, see wizards
-OpenOffice.org Math : AutoShapes feature in Microsoft Office
-OpenOffice.org Math : axes in charts
-OpenOffice.org Math : axis-ellipsis
-OpenOffice.org Math : back epsilon symbol
-OpenOffice.org Math : backgrounds
-OpenOffice.org Math : backgrounds;defining colors/pictures
-OpenOffice.org Math : backgrounds;frames/sections/indexes
-OpenOffice.org Math : backgrounds;inserting from Gallery
-OpenOffice.org Math : backgrounds;printing
-OpenOffice.org Math : backing window
-OpenOffice.org Math : backslash division sign
-OpenOffice.org Math : backups
-OpenOffice.org Math : backups;automatic
-OpenOffice.org Math : backups;documents
-OpenOffice.org Math : Basic
-OpenOffice.org Math : Basic;fonts for source display
-OpenOffice.org Math : Basic;programming
-OpenOffice.org Math : Basic;recording macros
-OpenOffice.org Math : Basic;scripting
-OpenOffice.org Math : basic fonts
-OpenOffice.org Math : BeanShell scripting
-OpenOffice.org Math : Bézier curves
-OpenOffice.org Math : Bézier curves;control points in presentations
-OpenOffice.org Math : bi-directional writing
-OpenOffice.org Math : binary operators
-OpenOffice.org Math : binary operators
-OpenOffice.org Math : binary operators;list of
-OpenOffice.org Math : binding space
-OpenOffice.org Math : binomials
-OpenOffice.org Math : bitmaps
-OpenOffice.org Math : bitmaps;inserting and editing
-OpenOffice.org Math : bitmaps;off for faster printing
-OpenOffice.org Math : bitmaps;patterns
-OpenOffice.org Math : black and white printing
-OpenOffice.org Math : black printing in Calc
-OpenOffice.org Math : block selection mode
-OpenOffice.org Math : bold
-OpenOffice.org Math : bold;AutoFormat function
-OpenOffice.org Math : bold;text
-OpenOffice.org Math : bold attribute
-OpenOffice.org Math : bookmarks
-OpenOffice.org Math : bookmarks;Help
-OpenOffice.org Math : Boolean operators
-OpenOffice.org Math : borders
-OpenOffice.org Math : borders;arranging
-OpenOffice.org Math : borders;cells on screen (Calc)
-OpenOffice.org Math : borders;for paragraphs
-OpenOffice.org Math : borders;for tables
-OpenOffice.org Math : borders;shadows
-OpenOffice.org Math : borders;table boundaries (Writer)
-OpenOffice.org Math : borders, see also frames
-OpenOffice.org Math : bound fields
-OpenOffice.org Math : bound fields;controls
-OpenOffice.org Math : boundaries of tables (Writer)
-OpenOffice.org Math : braces in OpenOffice.org Math
-OpenOffice.org Math : brackets
-OpenOffice.org Math : brackets;angle (Math)
-OpenOffice.org Math : brackets;angle with operator
-OpenOffice.org Math : brackets;double square (Math)
-OpenOffice.org Math : brackets;group
-OpenOffice.org Math : brackets;in OpenOffice.org Math
-OpenOffice.org Math : brackets;inserting in OpenOffice.org Math
-OpenOffice.org Math : brackets;merging formula parts
-OpenOffice.org Math : brackets;operator (Math)
-OpenOffice.org Math : brackets;reference list
-OpenOffice.org Math : brackets;round (Math)
-OpenOffice.org Math : brackets;scalable
-OpenOffice.org Math : brackets;single, without group function
-OpenOffice.org Math : brackets;square (Math)
-OpenOffice.org Math : brackets;widowed
-OpenOffice.org Math : brackets and grouping in OpenOffice.org Math
-OpenOffice.org Math : break display (Writer)
-OpenOffice.org Math : brochures
-OpenOffice.org Math : brochures;printing several
-OpenOffice.org Math : build numbers of OpenOffice.org
-OpenOffice.org Math : bullet lists
-OpenOffice.org Math : bullet lists;formatting options
-OpenOffice.org Math : bullets
-OpenOffice.org Math : bullets;paragraphs
-OpenOffice.org Math : bullets;replacing
-OpenOffice.org Math : bullets;turning off
-OpenOffice.org Math : business cards
-OpenOffice.org Math : business cards;creating and synchronizing
-OpenOffice.org Math : business cards;using templates
-OpenOffice.org Math : button bars, see toolbars
-OpenOffice.org Math : buttons
-OpenOffice.org Math : buttons;adding push buttons
-OpenOffice.org Math : buttons;big/small
-OpenOffice.org Math : buttons;editing hyperlink buttons
-OpenOffice.org Math : buttons;form functions
-OpenOffice.org Math : buttons;toolbars
-OpenOffice.org Math : cache for graphics
-OpenOffice.org Math : calculating
-OpenOffice.org Math : calculating;iterative references (Calc)
-OpenOffice.org Math : callouts
-OpenOffice.org Math : callouts;drawings
-OpenOffice.org Math : capital letters
-OpenOffice.org Math : capital letters;AutoCorrect function
-OpenOffice.org Math : capital letters;font effects
-OpenOffice.org Math : captions
-OpenOffice.org Math : captions;automatic captions (Writer)
-OpenOffice.org Math : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Math : captions, see also labels/callouts
-OpenOffice.org Math : cardinal numbers
-OpenOffice.org Math : cascading update (Base)
-OpenOffice.org Math : case sensitivity
-OpenOffice.org Math : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Math : case sensitivity;searching
-OpenOffice.org Math : catalog for mathematical symbols
-OpenOffice.org Math : ceiling brackets
-OpenOffice.org Math : ceiling brackets;lines with
-OpenOffice.org Math : ceiling brackets;scalable lines with
-OpenOffice.org Math : cells
-OpenOffice.org Math : cells;aligning
-OpenOffice.org Math : cells;backgrounds
-OpenOffice.org Math : cells;coloring (Calc)
-OpenOffice.org Math : cells;cursor positions after input (Calc)
-OpenOffice.org Math : cells;formatting without effect (Calc)
-OpenOffice.org Math : cells;line breaks
-OpenOffice.org Math : cells;linked to controls
-OpenOffice.org Math : cells;number formats
-OpenOffice.org Math : cells;number of
-OpenOffice.org Math : cells;pasting
-OpenOffice.org Math : cells;resetting formats
-OpenOffice.org Math : cells;showing grid lines (Calc)
-OpenOffice.org Math : center dots symbol
-OpenOffice.org Math : centered horizontally
-OpenOffice.org Math : centered horizontally;alignment (Math)
-OpenOffice.org Math : centered text
-OpenOffice.org Math : centimeters
-OpenOffice.org Math : certificates
-OpenOffice.org Math : Change Case feature in Microsoft Office
-OpenOffice.org Math : changes
-OpenOffice.org Math : changes;accepting automatically
-OpenOffice.org Math : changes;accepting or rejecting
-OpenOffice.org Math : changes;comparing to original
-OpenOffice.org Math : changes;protecting
-OpenOffice.org Math : changes;recording
-OpenOffice.org Math : changes;review function
-OpenOffice.org Math : changes;showing
-OpenOffice.org Math : changing
-OpenOffice.org Math : changing;data binding of XForms
-OpenOffice.org Math : changing;default formatting
-OpenOffice.org Math : changing;default templates
-OpenOffice.org Math : changing;document titles
-OpenOffice.org Math : changing;file associations in Setup program
-OpenOffice.org Math : changing;fonts
-OpenOffice.org Math : changing;hyperlink text/formats/URLs
-OpenOffice.org Math : changing;icon sizes
-OpenOffice.org Math : changing;keyboard
-OpenOffice.org Math : changing;links
-OpenOffice.org Math : changing;menus
-OpenOffice.org Math : changing;object sizes
-OpenOffice.org Math : changing;toolbars
-OpenOffice.org Math : changing;work directory
-OpenOffice.org Math : changing, see also editing and replacing
-OpenOffice.org Math : character styles
-OpenOffice.org Math : character styles;language selection
-OpenOffice.org Math : characters
-OpenOffice.org Math : characters;alternative fonts
-OpenOffice.org Math : characters;Asian layout
-OpenOffice.org Math : characters;bold
-OpenOffice.org Math : characters;coloring
-OpenOffice.org Math : characters;contours
-OpenOffice.org Math : characters;displaying only on screen (Writer)
-OpenOffice.org Math : characters;enabling CTL and Asian characters
-OpenOffice.org Math : characters;font effects
-OpenOffice.org Math : characters;fonts and formats
-OpenOffice.org Math : characters;hyperlinks
-OpenOffice.org Math : characters;italics
-OpenOffice.org Math : characters;language selection
-OpenOffice.org Math : characters;shadowed
-OpenOffice.org Math : characters;spacing
-OpenOffice.org Math : characters;special
-OpenOffice.org Math : characters;underlining
-OpenOffice.org Math : charcoal sketches filter
-OpenOffice.org Math : charts
-OpenOffice.org Math : charts;arranging within stacks
-OpenOffice.org Math : charts;bars with textures
-OpenOffice.org Math : charts;colors
-OpenOffice.org Math : charts;copying with link to source cell range
-OpenOffice.org Math : charts;displaying (Calc)
-OpenOffice.org Math : charts;editing axes
-OpenOffice.org Math : charts;editing data
-OpenOffice.org Math : charts;editing legends
-OpenOffice.org Math : charts;editing titles
-OpenOffice.org Math : charts;inserting
-OpenOffice.org Math : charts;updating automatically (Writer)
-OpenOffice.org Math : check box creation
-OpenOffice.org Math : Chinese writing systems
-OpenOffice.org Math : choosing printers
-OpenOffice.org Math : circle attribute
-OpenOffice.org Math : circle drawings
-OpenOffice.org Math : circumflex attribute
-OpenOffice.org Math : Client Side ImageMap
-OpenOffice.org Math : clipboard
-OpenOffice.org Math : clipboard;cutting
-OpenOffice.org Math : clipboard;pasting
-OpenOffice.org Math : clipboard;pasting formatted/unformatted text
-OpenOffice.org Math : clipboard;selection clipboard
-OpenOffice.org Math : clipboard;Unix
-OpenOffice.org Math : closing
-OpenOffice.org Math : closing;documents
-OpenOffice.org Math : closing;toolbars
-OpenOffice.org Math : color bar
-OpenOffice.org Math : colored characters
-OpenOffice.org Math : colors
-OpenOffice.org Math : colors;adding
-OpenOffice.org Math : colors;appearance
-OpenOffice.org Math : colors;backgrounds
-OpenOffice.org Math : colors;charts
-OpenOffice.org Math : colors;fill format
-OpenOffice.org Math : colors;fonts
-OpenOffice.org Math : colors;grid lines and cells (Calc)
-OpenOffice.org Math : colors;models
-OpenOffice.org Math : colors;not printing
-OpenOffice.org Math : colors;printing in grayscale
-OpenOffice.org Math : colors;restriction (Calc)
-OpenOffice.org Math : colors;selection
-OpenOffice.org Math : column headers
-OpenOffice.org Math : column headers;displaying (Calc)
-OpenOffice.org Math : column headers;highlighting (Calc)
-OpenOffice.org Math : columns
-OpenOffice.org Math : columns;setting with the mouse
-OpenOffice.org Math : combo box creation
-OpenOffice.org Math : command button creation
-OpenOffice.org Math : command buttons, see push buttons
-OpenOffice.org Math : command line parameters
-OpenOffice.org Math : commands
-OpenOffice.org Math : commands;not visible
-OpenOffice.org Math : commands;SQL
-OpenOffice.org Math : comments
-OpenOffice.org Math : comments;entering in OpenOffice.org Math
-OpenOffice.org Math : comments;on changes
-OpenOffice.org Math : comments feature in Microsoft Office
-OpenOffice.org Math : common terms
-OpenOffice.org Math : common terms;Chinese dictionary
-OpenOffice.org Math : common terms;glossaries
-OpenOffice.org Math : common terms;Internet glossary
-OpenOffice.org Math : Compare and Merge feature in Microsoft Office
-OpenOffice.org Math : comparisons
-OpenOffice.org Math : comparisons;document versions
-OpenOffice.org Math : comparisons;operators in default filter dialog
-OpenOffice.org Math : compatibility settings for MS Word import
-OpenOffice.org Math : complete screen view
-OpenOffice.org Math : complex numbers
-OpenOffice.org Math : complex numbers;set
-OpenOffice.org Math : complex numbers;symbols
-OpenOffice.org Math : complex text layout
-OpenOffice.org Math : complex text layout;definition
-OpenOffice.org Math : complex text layout;enabling
-OpenOffice.org Math : compose key to insert special characters
-OpenOffice.org Math : concatenating math symbols
-OpenOffice.org Math : concatenation, see ampersand symbol
-OpenOffice.org Math : conditional separators
-OpenOffice.org Math : conditions
-OpenOffice.org Math : conditions;in number formats
-OpenOffice.org Math : conditions;items in Data Navigator
-OpenOffice.org Math : Configuration Manager
-OpenOffice.org Math : configuring
-OpenOffice.org Math : configuring;fax icon
-OpenOffice.org Math : configuring;OpenOffice.org
-OpenOffice.org Math : configuring;toolbars
-OpenOffice.org Math : congruent relation
-OpenOffice.org Math : connections to data sources (Base)
-OpenOffice.org Math : considerably greater than relation
-OpenOffice.org Math : considerably less than relation
-OpenOffice.org Math : contents protection
-OpenOffice.org Math : context menus
-OpenOffice.org Math : contours of text
-OpenOffice.org Math : control point display in presentations
-OpenOffice.org Math : controls
-OpenOffice.org Math : controls;activating in forms
-OpenOffice.org Math : controls;adding to documents
-OpenOffice.org Math : controls;arranging in forms
-OpenOffice.org Math : controls;arranging within stacks
-OpenOffice.org Math : controls;assigning data sources
-OpenOffice.org Math : controls;bound fields/list contents/linked cells
-OpenOffice.org Math : controls;events
-OpenOffice.org Math : controls;focus
-OpenOffice.org Math : controls;formatted fields
-OpenOffice.org Math : controls;grouping
-OpenOffice.org Math : controls;hidden
-OpenOffice.org Math : controls;inserting
-OpenOffice.org Math : controls;multi-line titles
-OpenOffice.org Math : controls;positions and sizes
-OpenOffice.org Math : controls;printing
-OpenOffice.org Math : controls;properties of form controls
-OpenOffice.org Math : controls;properties of table controls
-OpenOffice.org Math : controls;reference by SQL
-OpenOffice.org Math : controls;rich text control
-OpenOffice.org Math : controls;select mode
-OpenOffice.org Math : controls;showing (Writer)
-OpenOffice.org Math : converters
-OpenOffice.org Math : converters;Euro converter
-OpenOffice.org Math : converters;PostScript, UNIX
-OpenOffice.org Math : converters;XML
-OpenOffice.org Math : converting
-OpenOffice.org Math : converting;Hangul/Hanja
-OpenOffice.org Math : converting;metrics
-OpenOffice.org Math : converting;Microsoft documents
-OpenOffice.org Math : converting;OpenOffice.org documents
-OpenOffice.org Math : converting;Pocket PC formats
-OpenOffice.org Math : copies
-OpenOffice.org Math : copies;printing
-OpenOffice.org Math : coproduct
-OpenOffice.org Math : copying
-OpenOffice.org Math : copying;by drag and drop
-OpenOffice.org Math : copying;data from text documents
-OpenOffice.org Math : copying;datasource records in spreadsheets
-OpenOffice.org Math : copying;draw objects
-OpenOffice.org Math : copying;draw objects between documents
-OpenOffice.org Math : copying;formatting
-OpenOffice.org Math : copying;from data source view
-OpenOffice.org Math : copying;from Gallery
-OpenOffice.org Math : copying;in Unix
-OpenOffice.org Math : copying;pictures, between documents
-OpenOffice.org Math : copying;sheet areas, to text documents
-OpenOffice.org Math : copying;to Gallery
-OpenOffice.org Math : copyright for OpenOffice.org
-OpenOffice.org Math : corner roundings
-OpenOffice.org Math : correspondence
-OpenOffice.org Math : correspondence;original by
-OpenOffice.org Math : correspondence;picture by
-OpenOffice.org Math : cosine function
-OpenOffice.org Math : cotangent function
-OpenOffice.org Math : crash reports
-OpenOffice.org Math : criteria of query design (Base)
-OpenOffice.org Math : cropping pictures
-OpenOffice.org Math : CTL
-OpenOffice.org Math : CTL;complex text layout languages
-OpenOffice.org Math : CTL;definition
-OpenOffice.org Math : CTL;options
-OpenOffice.org Math : currencies
-OpenOffice.org Math : currencies;converters
-OpenOffice.org Math : currencies;formats and format codes
-OpenOffice.org Math : currency field creation
-OpenOffice.org Math : currency formats
-OpenOffice.org Math : cursor
-OpenOffice.org Math : cursor;allowing in protected areas (Writer)
-OpenOffice.org Math : cursor;in OpenOffice.org Math
-OpenOffice.org Math : cursor;in read-only text
-OpenOffice.org Math : cursor;quickly moving to an object
-OpenOffice.org Math : curve integrals
-OpenOffice.org Math : curves
-OpenOffice.org Math : curves;editing points
-OpenOffice.org Math : custom dictionaries
-OpenOffice.org Math : custom dictionaries;editing
-OpenOffice.org Math : custom hyphens (Writer)
-OpenOffice.org Math : custom quotes
-OpenOffice.org Math : custom templates
-OpenOffice.org Math : customizing
-OpenOffice.org Math : customizing;events
-OpenOffice.org Math : customizing;keyboard
-OpenOffice.org Math : customizing;menus
-OpenOffice.org Math : customizing;OpenOffice.org
-OpenOffice.org Math : customizing;round corners
-OpenOffice.org Math : customizing;toolbars
-OpenOffice.org Math : cutting
-OpenOffice.org Math : dashes
-OpenOffice.org Math : data
-OpenOffice.org Math : data;filtering in forms
-OpenOffice.org Math : data;forms and subforms
-OpenOffice.org Math : data;read-only
-OpenOffice.org Math : data;sorting in forms
-OpenOffice.org Math : data;user data
-OpenOffice.org Math : data binding change in XForms
-OpenOffice.org Math : Data Navigator display options
-OpenOffice.org Math : data source browser
-OpenOffice.org Math : data source explorer
-OpenOffice.org Math : data source view
-OpenOffice.org Math : data source view;drag and drop
-OpenOffice.org Math : data source view;overview
-OpenOffice.org Math : data source view;showing
-OpenOffice.org Math : data sources
-OpenOffice.org Math : data sources;as tables
-OpenOffice.org Math : data sources;connection settings (Base)
-OpenOffice.org Math : data sources;copying records to spreadsheets
-OpenOffice.org Math : data sources;displaying current
-OpenOffice.org Math : data sources;LDAP server (Base)
-OpenOffice.org Math : data sources;OpenOffice.org Base
-OpenOffice.org Math : data sources;registering address books
-OpenOffice.org Math : data sources;reports
-OpenOffice.org Math : data sources;viewing
-OpenOffice.org Math : data structure of XForms
-OpenOffice.org Math : database contents
-OpenOffice.org Math : database contents;inserting as tables
-OpenOffice.org Math : database contents;inserting as text
-OpenOffice.org Math : database reports
-OpenOffice.org Math : Database Wizard (Base)
-OpenOffice.org Math : databases
-OpenOffice.org Math : databases;administration through SQL (Base)
-OpenOffice.org Math : databases;ADO (Base)
-OpenOffice.org Math : databases;connecting (Base)
-OpenOffice.org Math : databases;creating
-OpenOffice.org Math : databases;creating labels
-OpenOffice.org Math : databases;creating queries
-OpenOffice.org Math : databases;creating reports
-OpenOffice.org Math : databases;creating tables
-OpenOffice.org Math : databases;dBASE (Base)
-OpenOffice.org Math : databases;deleting (Base)
-OpenOffice.org Math : databases;drag and drop (Base)
-OpenOffice.org Math : databases;editing tables
-OpenOffice.org Math : databases;form filters
-OpenOffice.org Math : databases;formats (Base)
-OpenOffice.org Math : databases;importing/exporting
-OpenOffice.org Math : databases;JDBC (Base)
-OpenOffice.org Math : databases;main page (Base)
-OpenOffice.org Math : databases;MySQL (Base)
-OpenOffice.org Math : databases;ODBC (Base)
-OpenOffice.org Math : databases;overview
-OpenOffice.org Math : databases;registering (Base)
-OpenOffice.org Math : databases;searching records
-OpenOffice.org Math : databases;shortcut keys
-OpenOffice.org Math : databases;sorting
-OpenOffice.org Math : databases;standard filters
-OpenOffice.org Math : databases;text formats
-OpenOffice.org Math : databases;viewing
-OpenOffice.org Math : date fields
-OpenOffice.org Math : date fields;creating
-OpenOffice.org Math : date fields;properties
-OpenOffice.org Math : date formats
-OpenOffice.org Math : dates
-OpenOffice.org Math : dates;default (Calc)
-OpenOffice.org Math : dates;printing in presentations
-OpenOffice.org Math : dates;start 1900/01/01 (Calc)
-OpenOffice.org Math : dates;start 1904/01/01 (Calc)
-OpenOffice.org Math : dBASE
-OpenOffice.org Math : dBASE;database settings (Base)
-OpenOffice.org Math : DDE
-OpenOffice.org Math : DDE;definition
-OpenOffice.org Math : deactivating
-OpenOffice.org Math : deactivating;plug-ins
-OpenOffice.org Math : decimal places displayed (Calc)
-OpenOffice.org Math : decimal separator key
-OpenOffice.org Math : decimal tab stops
-OpenOffice.org Math : default directories
-OpenOffice.org Math : default file formats
-OpenOffice.org Math : default filters
-OpenOffice.org Math : default filters;comparison operators
-OpenOffice.org Math : default filters;databases
-OpenOffice.org Math : default printer
-OpenOffice.org Math : default printer;setting up
-OpenOffice.org Math : default printer;UNIX
-OpenOffice.org Math : default templates
-OpenOffice.org Math : default templates;changing
-OpenOffice.org Math : default templates;organizing
-OpenOffice.org Math : defaults
-OpenOffice.org Math : defaults;changing default formatting
-OpenOffice.org Math : defaults;documents
-OpenOffice.org Math : defaults;file formats
-OpenOffice.org Math : defaults;fonts
-OpenOffice.org Math : defaults;grids (Writer/Calc)
-OpenOffice.org Math : defaults;languages
-OpenOffice.org Math : defaults;number formats
-OpenOffice.org Math : defaults;of saving
-OpenOffice.org Math : defaults;program configuration
-OpenOffice.org Math : defaults;tab stops in text
-OpenOffice.org Math : defaults;views
-OpenOffice.org Math : defined as relation
-OpenOffice.org Math : defining
-OpenOffice.org Math : defining;arrowheads and other line ends
-OpenOffice.org Math : defining;colors
-OpenOffice.org Math : defining;formula fonts
-OpenOffice.org Math : defining;line styles
-OpenOffice.org Math : defining;paragraph borders
-OpenOffice.org Math : defining;queries (Base)
-OpenOffice.org Math : defining;table borders
-OpenOffice.org Math : deleting
-OpenOffice.org Math : deleting;all direct formatting
-OpenOffice.org Math : deleting;databases (Base)
-OpenOffice.org Math : deleting;hyperlinks
-OpenOffice.org Math : deleting;lines in text
-OpenOffice.org Math : deleting;models/instances
-OpenOffice.org Math : deleting;namespaces in XForms
-OpenOffice.org Math : deleting;tab stops
-OpenOffice.org Math : deleting;templates
-OpenOffice.org Math : deleting;XML filters
-OpenOffice.org Math : depth stagger
-OpenOffice.org Math : descriptions for objects
-OpenOffice.org Math : design mode after saving
-OpenOffice.org Math : design view
-OpenOffice.org Math : design view;creating forms
-OpenOffice.org Math : design view;queries/views (Base)
-OpenOffice.org Math : designing
-OpenOffice.org Math : designing;database tables
-OpenOffice.org Math : designing;fonts
-OpenOffice.org Math : designing;queries (Base)
-OpenOffice.org Math : detaching toolbars
-OpenOffice.org Math : diagonal downward dots
-OpenOffice.org Math : diagonal downward dots;symbol
-OpenOffice.org Math : diagonal upward dots
-OpenOffice.org Math : diagonal upward dots;symbol
-OpenOffice.org Math : dictionaries
-OpenOffice.org Math : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Math : dictionaries;creating
-OpenOffice.org Math : dictionaries;editing user-defined
-OpenOffice.org Math : dictionaries;spellcheck
-OpenOffice.org Math : dictionaries, see also languages
-OpenOffice.org Math : difference set operator
-OpenOffice.org Math : digital signatures
-OpenOffice.org Math : direct formatting
-OpenOffice.org Math : direct formatting;undoing all
-OpenOffice.org Math : direct text
-OpenOffice.org Math : direct text;entering in OpenOffice.org Math
-OpenOffice.org Math : directories
-OpenOffice.org Math : directories;creating new
-OpenOffice.org Math : directories;directory structure
-OpenOffice.org Math : disabled persons
-OpenOffice.org Math : displaying
-OpenOffice.org Math : displaying;non-printing characters (Writer)
-OpenOffice.org Math : displaying;notes (Calc)
-OpenOffice.org Math : displaying;notes in text documents
-OpenOffice.org Math : displaying;pictures and objects (Writer)
-OpenOffice.org Math : displaying;tables (Writer)
-OpenOffice.org Math : displaying;zero values (Calc)
-OpenOffice.org Math : distances
-OpenOffice.org Math : distances between brackets
-OpenOffice.org Math : distinct values in SQL queries
-OpenOffice.org Math : distorting in drawings
-OpenOffice.org Math : distributing XML filters
-OpenOffice.org Math : dithering
-OpenOffice.org Math : divides relation
-OpenOffice.org Math : division signs
-OpenOffice.org Math : docking
-OpenOffice.org Math : docking;definition
-OpenOffice.org Math : docking;toolbars
-OpenOffice.org Math : docking;windows
-OpenOffice.org Math : Document Converter Wizard
-OpenOffice.org Math : Document Map feature in Microsoft Office
-OpenOffice.org Math : Document Map, see Navigator
-OpenOffice.org Math : document types in OpenOffice.org
-OpenOffice.org Math : documents
-OpenOffice.org Math : documents;changing titles
-OpenOffice.org Math : documents;closing
-OpenOffice.org Math : documents;comparing
-OpenOffice.org Math : documents;contents as lists
-OpenOffice.org Math : documents;editing time
-OpenOffice.org Math : documents;exporting
-OpenOffice.org Math : documents;importing
-OpenOffice.org Math : documents;languages
-OpenOffice.org Math : documents;measurement units in
-OpenOffice.org Math : documents;merging
-OpenOffice.org Math : documents;number of pages/tables/sheets
-OpenOffice.org Math : documents;opening
-OpenOffice.org Math : documents;opening in design mode
-OpenOffice.org Math : documents;opening with templates
-OpenOffice.org Math : documents;organizing
-OpenOffice.org Math : documents;printing
-OpenOffice.org Math : documents;read-only
-OpenOffice.org Math : documents;reloading
-OpenOffice.org Math : documents;saving
-OpenOffice.org Math : documents;saving automatically
-OpenOffice.org Math : documents;saving in other formats
-OpenOffice.org Math : documents;sending as e-mail
-OpenOffice.org Math : documents;styles changed
-OpenOffice.org Math : documents;version management
-OpenOffice.org Math : documents;version numbers
-OpenOffice.org Math : does not divide relation
-OpenOffice.org Math : dot attribute
-OpenOffice.org Math : dotted areas
-OpenOffice.org Math : double arrow symbols
-OpenOffice.org Math : double dot attribute
-OpenOffice.org Math : double square brackets
-OpenOffice.org Math : double square brackets;scalable
-OpenOffice.org Math : double-line spacing in paragraphs
-OpenOffice.org Math : double-line writing in Asian layout
-OpenOffice.org Math : down arrow symbol
-OpenOffice.org Math : drag and drop
-OpenOffice.org Math : drag and drop;copying and pasting text
-OpenOffice.org Math : drag and drop;data source view
-OpenOffice.org Math : drag and drop;from Gallery to draw objects
-OpenOffice.org Math : drag and drop;overview
-OpenOffice.org Math : drag and drop;pictures
-OpenOffice.org Math : drag and drop;to Gallery
-OpenOffice.org Math : draw objects
-OpenOffice.org Math : draw objects;adding/editing/copying
-OpenOffice.org Math : draw objects;anchoring
-OpenOffice.org Math : draw objects;arranging within stacks
-OpenOffice.org Math : draw objects;copying
-OpenOffice.org Math : draw objects;copying between documents
-OpenOffice.org Math : draw objects;displaying (Calc)
-OpenOffice.org Math : draw objects;dropping Gallery pictures
-OpenOffice.org Math : draw objects;flipping
-OpenOffice.org Math : draw objects;legends
-OpenOffice.org Math : draw objects;positioning and resizing
-OpenOffice.org Math : draw objects;protecting
-OpenOffice.org Math : draw objects;slanting
-OpenOffice.org Math : draw objects;text in
-OpenOffice.org Math : Drawing bar
-OpenOffice.org Math : drawing lines in text
-OpenOffice.org Math : drawings
-OpenOffice.org Math : drawings;creating/opening
-OpenOffice.org Math : drawings;languages
-OpenOffice.org Math : drawings;printing
-OpenOffice.org Math : drawings;printing defaults
-OpenOffice.org Math : drawings;printing in text documents
-OpenOffice.org Math : drawings;saving
-OpenOffice.org Math : drawings;saving automatically
-OpenOffice.org Math : drawings;saving in other formats
-OpenOffice.org Math : drawings;sending as e-mail
-OpenOffice.org Math : drawings;showing (Writer)
-OpenOffice.org Math : drop-down lists in form functions
-OpenOffice.org Math : e-mail attachments
-OpenOffice.org Math : Edit File icon
-OpenOffice.org Math : edit mode
-OpenOffice.org Math : edit mode;after opening
-OpenOffice.org Math : edit mode;through Enter key (Calc)
-OpenOffice.org Math : Edit Points bar
-OpenOffice.org Math : editing
-OpenOffice.org Math : editing;chart axes
-OpenOffice.org Math : editing;chart data
-OpenOffice.org Math : editing;chart legends
-OpenOffice.org Math : editing;chart titles
-OpenOffice.org Math : editing;data binding of XForms
-OpenOffice.org Math : editing;database tables and queries
-OpenOffice.org Math : editing;draw objects
-OpenOffice.org Math : editing;Fontwork objects
-OpenOffice.org Math : editing;hyperlinks
-OpenOffice.org Math : editing;items in Data Navigator
-OpenOffice.org Math : editing;menus
-OpenOffice.org Math : editing;namespaces in XForms
-OpenOffice.org Math : editing;notes
-OpenOffice.org Math : editing;objects
-OpenOffice.org Math : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Math : editing;pictures
-OpenOffice.org Math : editing;reports
-OpenOffice.org Math : editing;shortcut keys
-OpenOffice.org Math : editing;tab stops
-OpenOffice.org Math : editing;templates
-OpenOffice.org Math : editing;toolbars
-OpenOffice.org Math : editing;undoing
-OpenOffice.org Math : editing;XForms
-OpenOffice.org Math : editing time of documents
-OpenOffice.org Math : editors
-OpenOffice.org Math : editors;formula editor
-OpenOffice.org Math : editors;ImageMap editor
-OpenOffice.org Math : effects
-OpenOffice.org Math : effects;font positions
-OpenOffice.org Math : effects;fonts
-OpenOffice.org Math : effects;Fontwork icons
-OpenOffice.org Math : ellipsis symbols
-OpenOffice.org Math : empty documents
-OpenOffice.org Math : empty paragraph removal
-OpenOffice.org Math : empty set
-OpenOffice.org Math : encryption of contents
-OpenOffice.org Math : entering groups
-OpenOffice.org Math : entering text from right to left
-OpenOffice.org Math : epsilon
-OpenOffice.org Math : epsilon;back
-OpenOffice.org Math : equal sign
-OpenOffice.org Math : equal sign, see also operators
-OpenOffice.org Math : Equation Editor, see OpenOffice.org Math
-OpenOffice.org Math : equations in formula editor
-OpenOffice.org Math : Error Report Tool
-OpenOffice.org Math : error search
-OpenOffice.org Math : error search;next error
-OpenOffice.org Math : error search;previous error
-OpenOffice.org Math : Euro
-OpenOffice.org Math : Euro;currency formats
-OpenOffice.org Math : Euro;Euro Converter Wizard
-OpenOffice.org Math : even/odd pages
-OpenOffice.org Math : even/odd pages;printing
-OpenOffice.org Math : events
-OpenOffice.org Math : events;controls
-OpenOffice.org Math : events;customizing
-OpenOffice.org Math : events;in forms
-OpenOffice.org Math : examples
-OpenOffice.org Math : examples;integral
-OpenOffice.org Math : examples;OpenOffice.org Math formulas
-OpenOffice.org Math : Excel
-OpenOffice.org Math : Excel;saving as
-OpenOffice.org Math : Excel;search criteria
-OpenOffice.org Math : exceptions
-OpenOffice.org Math : exceptions;user-defined dictionaries
-OpenOffice.org Math : exchanging, see also replacing
-OpenOffice.org Math : executing
-OpenOffice.org Math : executing;SQL commands
-OpenOffice.org Math : existence quantor symbol
-OpenOffice.org Math : exiting
-OpenOffice.org Math : exiting;groups
-OpenOffice.org Math : exiting;OpenOffice.org
-OpenOffice.org Math : expanding formatting (Calc)
-OpenOffice.org Math : explorer of data sources
-OpenOffice.org Math : exponential functions
-OpenOffice.org Math : exponents
-OpenOffice.org Math : exponents;variables with right
-OpenOffice.org Math : exponents and indexes in OpenOffice.org Math
-OpenOffice.org Math : export filters
-OpenOffice.org Math : exporting
-OpenOffice.org Math : exporting;bitmaps
-OpenOffice.org Math : exporting;databases
-OpenOffice.org Math : exporting;HTML and text documents
-OpenOffice.org Math : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Math : exporting;spreadsheets to text format
-OpenOffice.org Math : exporting;templates
-OpenOffice.org Math : exporting;to foreign formats
-OpenOffice.org Math : exporting;to HTML
-OpenOffice.org Math : exporting;to Microsoft Office formats
-OpenOffice.org Math : exporting;to PDF
-OpenOffice.org Math : exporting;to PostScript format
-OpenOffice.org Math : exporting;to XML
-OpenOffice.org Math : exporting;XML files
-OpenOffice.org Math : extended tips in Help
-OpenOffice.org Math : extension mode in text
-OpenOffice.org Math : extensions
-OpenOffice.org Math : extensions;Extension Manager
-OpenOffice.org Math : extensions;file formats
-OpenOffice.org Math : external keys (Base)
-OpenOffice.org Math : factorial
-OpenOffice.org Math : faster printing
-OpenOffice.org Math : faxes
-OpenOffice.org Math : faxes;configuring OpenOffice.org
-OpenOffice.org Math : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Math : faxes;selecting a fax machine
-OpenOffice.org Math : faxes;sending
-OpenOffice.org Math : faxes;wizards
-OpenOffice.org Math : fields
-OpenOffice.org Math : fields;database tables
-OpenOffice.org Math : fields;displaying field codes (Writer)
-OpenOffice.org Math : fields;formatted fields
-OpenOffice.org Math : fields;updating automatically (Writer)
-OpenOffice.org Math : file associations for Microsoft Office
-OpenOffice.org Math : file filters
-OpenOffice.org Math : file filters;mobile devices
-OpenOffice.org Math : file filters;XML
-OpenOffice.org Math : file formats
-OpenOffice.org Math : file formats;changing defaults
-OpenOffice.org Math : file formats;OpenDocument/XML
-OpenOffice.org Math : file formats;saving always in other formats
-OpenOffice.org Math : file selection button
-OpenOffice.org Math : file sharing options for current document
-OpenOffice.org Math : files
-OpenOffice.org Math : files;filters and formats
-OpenOffice.org Math : files;importing
-OpenOffice.org Math : files;opening
-OpenOffice.org Math : files;opening with placeholders
-OpenOffice.org Math : files;properties
-OpenOffice.org Math : files;saving
-OpenOffice.org Math : files;saving automatically
-OpenOffice.org Math : files;saving in other formats
-OpenOffice.org Math : files;sending as e-mail
-OpenOffice.org Math : files;version numbers
-OpenOffice.org Math : files and folders in OpenOffice.org
-OpenOffice.org Math : fill characters with tabulators
-OpenOffice.org Math : fill colors for areas
-OpenOffice.org Math : fill patterns for areas
-OpenOffice.org Math : filter conditions
-OpenOffice.org Math : filter conditions;connecting
-OpenOffice.org Math : filter conditions;in queries (Base)
-OpenOffice.org Math : filtering
-OpenOffice.org Math : filtering;data in databases
-OpenOffice.org Math : filtering;data in forms
-OpenOffice.org Math : filters
-OpenOffice.org Math : filters;comparison operators
-OpenOffice.org Math : filters;for import and export
-OpenOffice.org Math : filters;Navigator
-OpenOffice.org Math : filters;pictures
-OpenOffice.org Math : filters;XML filter settings
-OpenOffice.org Math : Find tab in Help
-OpenOffice.org Math : finding
-OpenOffice.org Math : finding;errors in OpenOffice.org Math
-OpenOffice.org Math : finding;in all sheets
-OpenOffice.org Math : finding;records in form documents
-OpenOffice.org Math : finding;selections
-OpenOffice.org Math : finding;similarity search
-OpenOffice.org Math : fitting to pages
-OpenOffice.org Math : fitting to pages;print settings in Math
-OpenOffice.org Math : fitting to pages;print settings in presentations
-OpenOffice.org Math : fixed text
-OpenOffice.org Math : fixed text;form functions
-OpenOffice.org Math : fixing toolbars
-OpenOffice.org Math : flipping draw objects
-OpenOffice.org Math : floating frames in HTML documents
-OpenOffice.org Math : floating toolbars
-OpenOffice.org Math : floor brackets
-OpenOffice.org Math : focus of controls
-OpenOffice.org Math : folder creation
-OpenOffice.org Math : font attributes
-OpenOffice.org Math : font attributes;changing defaults
-OpenOffice.org Math : font lists
-OpenOffice.org Math : font name box
-OpenOffice.org Math : font sizes
-OpenOffice.org Math : font sizes;bullets
-OpenOffice.org Math : font sizes;example
-OpenOffice.org Math : font sizes;in OpenOffice.org Math
-OpenOffice.org Math : font sizes;relative changes
-OpenOffice.org Math : font sizes;scaling on screen
-OpenOffice.org Math : font sizes;text
-OpenOffice.org Math : fonts
-OpenOffice.org Math : fonts;adding under UNIX
-OpenOffice.org Math : fonts;changing in templates
-OpenOffice.org Math : fonts;colors
-OpenOffice.org Math : fonts;default settings
-OpenOffice.org Math : fonts;effects
-OpenOffice.org Math : fonts;for HTML and Basic
-OpenOffice.org Math : fonts;formats
-OpenOffice.org Math : fonts;in OpenOffice.org Math
-OpenOffice.org Math : fonts;outlines
-OpenOffice.org Math : fonts;positions in text
-OpenOffice.org Math : fonts;shadows
-OpenOffice.org Math : fonts;specifying several
-OpenOffice.org Math : fonts;strikethrough
-OpenOffice.org Math : fonts;styles
-OpenOffice.org Math : fonts;text objects
-OpenOffice.org Math : Fontwork icons
-OpenOffice.org Math : footers
-OpenOffice.org Math : footers;backgrounds
-OpenOffice.org Math : for all symbol
-OpenOffice.org Math : form controls
-OpenOffice.org Math : form controls;assigning macros
-OpenOffice.org Math : form controls;protecting
-OpenOffice.org Math : form controls;toolbars
-OpenOffice.org Math : form fields
-OpenOffice.org Math : form filters
-OpenOffice.org Math : Form Navigator
-OpenOffice.org Math : format codes
-OpenOffice.org Math : format codes;numbers
-OpenOffice.org Math : format codes;user-defined number formats
-OpenOffice.org Math : format filling printing in OpenOffice.org Math
-OpenOffice.org Math : Format Paintbrush
-OpenOffice.org Math : formats
-OpenOffice.org Math : formats;Asian layout
-OpenOffice.org Math : formats;Asian typography
-OpenOffice.org Math : formats;fonts
-OpenOffice.org Math : formats;maximizing page formats
-OpenOffice.org Math : formats;number and currency formats
-OpenOffice.org Math : formats;of currencies/date/time
-OpenOffice.org Math : formats;on opening and saving
-OpenOffice.org Math : formats;pasting in special formats
-OpenOffice.org Math : formats;positions
-OpenOffice.org Math : formats;reference list of formatting (Math)
-OpenOffice.org Math : formats;tabulators
-OpenOffice.org Math : formats;undoing when writing
-OpenOffice.org Math : formatted fields
-OpenOffice.org Math : formatted fields;form functions
-OpenOffice.org Math : formatted fields;properties
-OpenOffice.org Math : formatting
-OpenOffice.org Math : formatting;axes in charts
-OpenOffice.org Math : formatting;changing default attributes
-OpenOffice.org Math : formatting;chart legends
-OpenOffice.org Math : formatting;copying
-OpenOffice.org Math : formatting;definition
-OpenOffice.org Math : formatting;expanding (Calc)
-OpenOffice.org Math : formatting;font effects
-OpenOffice.org Math : formatting;hyperlinks
-OpenOffice.org Math : formatting;in OpenOffice.org Math
-OpenOffice.org Math : formatting;pages
-OpenOffice.org Math : formatting;printer metrics (Writer)
-OpenOffice.org Math : formatting;undoing
-OpenOffice.org Math : forms
-OpenOffice.org Math : forms;browsing
-OpenOffice.org Math : forms;Combo Box/List Box Wizard
-OpenOffice.org Math : forms;creating
-OpenOffice.org Math : forms;data
-OpenOffice.org Math : forms;designing (Base)
-OpenOffice.org Math : forms;events
-OpenOffice.org Math : forms;filtering data
-OpenOffice.org Math : forms;finding records
-OpenOffice.org Math : forms;focus after opening
-OpenOffice.org Math : forms;general information (Base)
-OpenOffice.org Math : forms;grouping controls
-OpenOffice.org Math : forms;HTML filters
-OpenOffice.org Math : forms;Navigator
-OpenOffice.org Math : forms;opening in design mode
-OpenOffice.org Math : forms;properties
-OpenOffice.org Math : forms;sorting data
-OpenOffice.org Math : forms;subforms
-OpenOffice.org Math : forms;wizards
-OpenOffice.org Math : forms;XForms
-OpenOffice.org Math : Formula Auditing feature in Microsoft Office
-OpenOffice.org Math : formula cursor in OpenOffice.org Math
-OpenOffice.org Math : formula display sizes
-OpenOffice.org Math : formula fonts
-OpenOffice.org Math : formula fonts;defining
-OpenOffice.org Math : formula parts
-OpenOffice.org Math : formula parts;manually aligning
-OpenOffice.org Math : formula parts;merging
-OpenOffice.org Math : formula texts
-OpenOffice.org Math : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Math : formula view
-OpenOffice.org Math : formula view;refreshing
-OpenOffice.org Math : formulas
-OpenOffice.org Math : formulas;aligning
-OpenOffice.org Math : formulas;attributes in
-OpenOffice.org Math : formulas;element spacing
-OpenOffice.org Math : formulas;entering symbols in
-OpenOffice.org Math : formulas;examples
-OpenOffice.org Math : formulas;fit to text
-OpenOffice.org Math : formulas;in color
-OpenOffice.org Math : formulas;increasing size of display
-OpenOffice.org Math : formulas;line breaks
-OpenOffice.org Math : formulas;maximum size
-OpenOffice.org Math : formulas;new
-OpenOffice.org Math : formulas;reference tables
-OpenOffice.org Math : formulas;selections
-OpenOffice.org Math : formulas;starting formula editor
-OpenOffice.org Math : formulas;zooming out
-OpenOffice.org Math : formulas in reports
-OpenOffice.org Math : formulas in reports;editing
-OpenOffice.org Math : forums and support
-OpenOffice.org Math : fractions in formulas
-OpenOffice.org Math : frames
-OpenOffice.org Math : frames;around paragraphs
-OpenOffice.org Math : frames;around tables
-OpenOffice.org Math : frames;AutoCorrect function
-OpenOffice.org Math : frames;backgrounds
-OpenOffice.org Math : frames;captions (Writer)
-OpenOffice.org Math : frames;printing in OpenOffice.org Math
-OpenOffice.org Math : frames;protecting
-OpenOffice.org Math : frames;selection frames
-OpenOffice.org Math : frames;text fitting to frames
-OpenOffice.org Math : freeform lines
-OpenOffice.org Math : freeform lines;draw functions
-OpenOffice.org Math : FTP
-OpenOffice.org Math : FTP;opening documents
-OpenOffice.org Math : FTP;saving documents
-OpenOffice.org Math : full joins (Base)
-OpenOffice.org Math : full screen view
-OpenOffice.org Math : full-text search in Help
-OpenOffice.org Math : functions
-OpenOffice.org Math : functions;in OpenOffice.org Math
-OpenOffice.org Math : functions in reports
-OpenOffice.org Math : functions in reports;editing
-OpenOffice.org Math : functions operators
-OpenOffice.org Math : functions operators;list of
-OpenOffice.org Math : Gallery
-OpenOffice.org Math : Gallery;adding pictures
-OpenOffice.org Math : Gallery;dragging pictures to draw objects
-OpenOffice.org Math : Gallery;hiding/showing
-OpenOffice.org Math : Gallery;inserting pictures from
-OpenOffice.org Math : gaps in formulas
-OpenOffice.org Math : German spellcheck
-OpenOffice.org Math : get method for form transmissions
-OpenOffice.org Math : getting support
-OpenOffice.org Math : GIF format
-OpenOffice.org Math : glossaries
-OpenOffice.org Math : glossaries;common terms
-OpenOffice.org Math : glossaries;Internet terms
-OpenOffice.org Math : gradients off for faster printing
-OpenOffice.org Math : graphical text art
-OpenOffice.org Math : graphics
-OpenOffice.org Math : graphics;cache
-OpenOffice.org Math : graphics;protecting
-OpenOffice.org Math : graphics, see also pictures
-OpenOffice.org Math : grayscale printing
-OpenOffice.org Math : greater than or equal to signs
-OpenOffice.org Math : greater than relations
-OpenOffice.org Math : Greek symbols in formulas
-OpenOffice.org Math : grid controls
-OpenOffice.org Math : grid controls;form functions
-OpenOffice.org Math : grids
-OpenOffice.org Math : grids;defaults (Writer/Calc)
-OpenOffice.org Math : grids;display options (Impress/Draw)
-OpenOffice.org Math : grids;displaying lines (Calc)
-OpenOffice.org Math : group box creation
-OpenOffice.org Math : grouping and brackets in OpenOffice.org Math
-OpenOffice.org Math : grouping brackets
-OpenOffice.org Math : groups
-OpenOffice.org Math : groups;entering/exiting/ungrouping
-OpenOffice.org Math : groups;naming
-OpenOffice.org Math : groups;of controls
-OpenOffice.org Math : guides
-OpenOffice.org Math : guides;display options (Impress/Draw)
-OpenOffice.org Math : guides;displaying when moving objects (Impress)
-OpenOffice.org Math : guides;showing (Calc)
-OpenOffice.org Math : guides;showing when moving frames (Writer)
-OpenOffice.org Math : gutter
-OpenOffice.org Math : h-bar symbol
-OpenOffice.org Math : handles
-OpenOffice.org Math : handles;displaying (Writer)
-OpenOffice.org Math : handles;scaling
-OpenOffice.org Math : handles;showing simple/large handles (Calc)
-OpenOffice.org Math : Hangul/Hanja
-OpenOffice.org Math : hatching
-OpenOffice.org Math : headers
-OpenOffice.org Math : headers;backgrounds
-OpenOffice.org Math : headings
-OpenOffice.org Math : headings;entering as text box
-OpenOffice.org Math : Hebrew
-OpenOffice.org Math : Hebrew;entering text
-OpenOffice.org Math : Hebrew;language settings
-OpenOffice.org Math : Help
-OpenOffice.org Math : Help;bookmarks
-OpenOffice.org Math : Help;extended tips on/off
-OpenOffice.org Math : Help;full-text search
-OpenOffice.org Math : Help;Help tips
-OpenOffice.org Math : Help;keywords
-OpenOffice.org Math : Help;navigation pane showing/hiding
-OpenOffice.org Math : Help;style sheets
-OpenOffice.org Math : Help;topics
-OpenOffice.org Math : Help Agent
-OpenOffice.org Math : Help Agent;help
-OpenOffice.org Math : Help Agent;options
-OpenOffice.org Math : Help tips
-OpenOffice.org Math : Help tips;hiding
-OpenOffice.org Math : hidden controls in Form Navigator
-OpenOffice.org Math : hidden fields display (Writer)
-OpenOffice.org Math : hidden pages
-OpenOffice.org Math : hidden pages;printing in presentations
-OpenOffice.org Math : hidden text
-OpenOffice.org Math : hidden text;showing (Writer)
-OpenOffice.org Math : hiding
-OpenOffice.org Math : hiding;changes
-OpenOffice.org Math : hiding;docked windows
-OpenOffice.org Math : hiding;navigation pane in Help window
-OpenOffice.org Math : high contrast mode
-OpenOffice.org Math : Hindi
-OpenOffice.org Math : Hindi;entering text
-OpenOffice.org Math : Hindi;language settings
-OpenOffice.org Math : horizontal scrollbars (Writer)
-OpenOffice.org Math : HTML
-OpenOffice.org Math : HTML;definition
-OpenOffice.org Math : HTML;export character set
-OpenOffice.org Math : HTML;fonts for source display
-OpenOffice.org Math : HTML;importing META tags
-OpenOffice.org Math : HTML;live presentations
-OpenOffice.org Math : HTML documents
-OpenOffice.org Math : HTML documents;auto reloading
-OpenOffice.org Math : HTML documents;importing/exporting
-OpenOffice.org Math : HTML documents;META tags in
-OpenOffice.org Math : HTML documents;new
-OpenOffice.org Math : HTML documents;source text
-OpenOffice.org Math : hyperbolic cosine function
-OpenOffice.org Math : hyperbolic cotangent function
-OpenOffice.org Math : hyperbolic sine function
-OpenOffice.org Math : hyperbolic tangent function
-OpenOffice.org Math : hyperlinks
-OpenOffice.org Math : hyperlinks;assigning macros
-OpenOffice.org Math : hyperlinks;character formats
-OpenOffice.org Math : hyperlinks;definition
-OpenOffice.org Math : hyperlinks;deleting
-OpenOffice.org Math : hyperlinks;editing
-OpenOffice.org Math : hyperlinks;inserting
-OpenOffice.org Math : hyperlinks;relative and absolute
-OpenOffice.org Math : hyperlinks;turning off automatic recognition
-OpenOffice.org Math : hyperlinks, see also links
-OpenOffice.org Math : hyphenation
-OpenOffice.org Math : hyphenation;activating for a language
-OpenOffice.org Math : hyphenation;minimal number of characters
-OpenOffice.org Math : hyphens
-OpenOffice.org Math : hyphens;displaying custom (Writer)
-OpenOffice.org Math : hyphens;inserting custom
-OpenOffice.org Math : icon bars, see toolbars
-OpenOffice.org Math : icon sizes
-OpenOffice.org Math : identical to relation
-OpenOffice.org Math : ignore list for spellcheck
-OpenOffice.org Math : illustrations, see pictures
-OpenOffice.org Math : image button creation
-OpenOffice.org Math : image control creation
-OpenOffice.org Math : image of relation
-OpenOffice.org Math : ImageMap
-OpenOffice.org Math : ImageMap;definition
-OpenOffice.org Math : ImageMap;editor
-OpenOffice.org Math : images
-OpenOffice.org Math : images;ImageMap
-OpenOffice.org Math : images;inserting and editing bitmaps
-OpenOffice.org Math : images;placeholders in presentations
-OpenOffice.org Math : images, see also pictures
-OpenOffice.org Math : imaginary part of a complex number
-OpenOffice.org Math : IME
-OpenOffice.org Math : IME;definition
-OpenOffice.org Math : IME;showing/hiding
-OpenOffice.org Math : import filters
-OpenOffice.org Math : import restrictions for Microsoft Office
-OpenOffice.org Math : importing
-OpenOffice.org Math : importing;bitmaps
-OpenOffice.org Math : importing;compatibility settings for text import
-OpenOffice.org Math : importing;databases
-OpenOffice.org Math : importing;documents in other formats
-OpenOffice.org Math : importing;from XML
-OpenOffice.org Math : importing;HTML and text documents
-OpenOffice.org Math : importing;HTML with META tags
-OpenOffice.org Math : importing;Microsoft Office documents with VBA code
-OpenOffice.org Math : importing;OpenOffice.org Math formulas
-OpenOffice.org Math : importing;tables in text format
-OpenOffice.org Math : importing;templates
-OpenOffice.org Math : inches
-OpenOffice.org Math : included in set operator
-OpenOffice.org Math : includes set operator
-OpenOffice.org Math : Index tab in Help
-OpenOffice.org Math : indexes
-OpenOffice.org Math : indexes;adding to formulas
-OpenOffice.org Math : indexes;backgrounds
-OpenOffice.org Math : indexes;showing/hiding Help index tab
-OpenOffice.org Math : indexes;unprotecting
-OpenOffice.org Math : indexes and exponents in OpenOffice.org Math
-OpenOffice.org Math : indicator lines in text
-OpenOffice.org Math : inequation
-OpenOffice.org Math : infinity symbol
-OpenOffice.org Math : inner joins (Base)
-OpenOffice.org Math : input method window
-OpenOffice.org Math : insert mode for entering text
-OpenOffice.org Math : inserting
-OpenOffice.org Math : inserting;applets
-OpenOffice.org Math : inserting;brackets
-OpenOffice.org Math : inserting;cell ranges from spreadsheets
-OpenOffice.org Math : inserting;charts
-OpenOffice.org Math : inserting;clipboard options
-OpenOffice.org Math : inserting;comments in OpenOffice.org Math
-OpenOffice.org Math : inserting;data from text documents
-OpenOffice.org Math : inserting;datasource records in spreadsheets
-OpenOffice.org Math : inserting;drawings
-OpenOffice.org Math : inserting;floating frames
-OpenOffice.org Math : inserting;form fields
-OpenOffice.org Math : inserting;gaps
-OpenOffice.org Math : inserting;hyperlinks
-OpenOffice.org Math : inserting;line breaks in cells
-OpenOffice.org Math : inserting;movies/sounds
-OpenOffice.org Math : inserting;new text tables defaults
-OpenOffice.org Math : inserting;notes
-OpenOffice.org Math : inserting;objects from Gallery
-OpenOffice.org Math : inserting;OLE objects
-OpenOffice.org Math : inserting;paragraph bullets
-OpenOffice.org Math : inserting;plug-ins
-OpenOffice.org Math : inserting;special characters
-OpenOffice.org Math : inserting;tab stops
-OpenOffice.org Math : inserting;text in OpenOffice.org Math
-OpenOffice.org Math : installing
-OpenOffice.org Math : installing;ActiveX control
-OpenOffice.org Math : installing;mobile device filters
-OpenOffice.org Math : installing;UNO components
-OpenOffice.org Math : instructions
-OpenOffice.org Math : instructions;general
-OpenOffice.org Math : instructions;OpenOffice.org Math
-OpenOffice.org Math : integrals
-OpenOffice.org Math : integrals;example
-OpenOffice.org Math : integrals;signs
-OpenOffice.org Math : Internet
-OpenOffice.org Math : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Math : Internet;presentations
-OpenOffice.org Math : Internet;starting searches
-OpenOffice.org Math : Internet;turning off recognition of addresses
-OpenOffice.org Math : Internet glossary
-OpenOffice.org Math : intersection of sets
-OpenOffice.org Math : invert filter
-OpenOffice.org Math : invisible areas
-OpenOffice.org Math : italic attribute in OpenOffice.org Math
-OpenOffice.org Math : italic text
-OpenOffice.org Math : iterative references in spreadsheets
-OpenOffice.org Math : Java
-OpenOffice.org Math : Java;definition
-OpenOffice.org Math : Java;scripting
-OpenOffice.org Math : Java;setting options
-OpenOffice.org Math : JDBC
-OpenOffice.org Math : JDBC;databases (Base)
-OpenOffice.org Math : JDBC;definition
-OpenOffice.org Math : joining
-OpenOffice.org Math : joining;paragraphs
-OpenOffice.org Math : joining;tables (Base)
-OpenOffice.org Math : joins in databases (Base)
-OpenOffice.org Math : justifying text
-OpenOffice.org Math : kerning
-OpenOffice.org Math : kerning;Asian texts
-OpenOffice.org Math : kerning;definition
-OpenOffice.org Math : kerning;in characters
-OpenOffice.org Math : key fields for relations (Base)
-OpenOffice.org Math : keyboard
-OpenOffice.org Math : keyboard;assigning/editing shortcut keys
-OpenOffice.org Math : keyboard;general commands
-OpenOffice.org Math : keyboard;removing numbering
-OpenOffice.org Math : keys
-OpenOffice.org Math : keys;adding push buttons
-OpenOffice.org Math : keys;primary keys (Base)
-OpenOffice.org Math : kiosk export
-OpenOffice.org Math : labels
-OpenOffice.org Math : labels;creating and synchronizing
-OpenOffice.org Math : labels;for draw objects
-OpenOffice.org Math : labels;form functions
-OpenOffice.org Math : labels;from databases
-OpenOffice.org Math : labels, see also names/callouts
-OpenOffice.org Math : lambda-bar symbol
-OpenOffice.org Math : languages
-OpenOffice.org Math : languages;activating modules
-OpenOffice.org Math : languages;Asian support
-OpenOffice.org Math : languages;complex text layout
-OpenOffice.org Math : languages;locale settings
-OpenOffice.org Math : languages;selecting
-OpenOffice.org Math : languages;setting options
-OpenOffice.org Math : languages;spellcheck
-OpenOffice.org Math : languages;spellchecking and formatting
-OpenOffice.org Math : large handles (Writer)
-OpenOffice.org Math : large icons
-OpenOffice.org Math : layer arrangement
-OpenOffice.org Math : layout
-OpenOffice.org Math : layout;importing Word documents
-OpenOffice.org Math : layout;pages
-OpenOffice.org Math : LDAP server
-OpenOffice.org Math : LDAP server;address books (Base)
-OpenOffice.org Math : LDAP server;sign on options
-OpenOffice.org Math : leading between paragraphs
-OpenOffice.org Math : left alignment of paragraphs
-OpenOffice.org Math : left arrow symbol
-OpenOffice.org Math : left joins (Base)
-OpenOffice.org Math : left-justified alignment (Math)
-OpenOffice.org Math : legends
-OpenOffice.org Math : legends;charts
-OpenOffice.org Math : legends;draw objects
-OpenOffice.org Math : legends;rounding corners
-OpenOffice.org Math : less than or equal to signs
-OpenOffice.org Math : less than relations
-OpenOffice.org Math : Letter Wizard
-OpenOffice.org Math : levels
-OpenOffice.org Math : levels;depth stagger
-OpenOffice.org Math : limits
-OpenOffice.org Math : limits;in OpenOffice.org Math
-OpenOffice.org Math : limits of tables (Writer)
-OpenOffice.org Math : line above attribute
-OpenOffice.org Math : line breaks
-OpenOffice.org Math : line breaks;in cells
-OpenOffice.org Math : line breaks;in formulas
-OpenOffice.org Math : line spacing
-OpenOffice.org Math : line spacing;context menu in paragraphs
-OpenOffice.org Math : line spacing;paragraph
-OpenOffice.org Math : line styles
-OpenOffice.org Math : line styles;applying
-OpenOffice.org Math : line styles;defining
-OpenOffice.org Math : line through attribute
-OpenOffice.org Math : lines
-OpenOffice.org Math : lines;contours (Draw/Impress)
-OpenOffice.org Math : lines;defining ends
-OpenOffice.org Math : lines;draw functions
-OpenOffice.org Math : lines;drawing in text
-OpenOffice.org Math : lines;editing points
-OpenOffice.org Math : lines;inserting in formulas
-OpenOffice.org Math : lines;removing automatic lines
-OpenOffice.org Math : lines;scalable
-OpenOffice.org Math : lines;with edges
-OpenOffice.org Math : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Math : lines of text
-OpenOffice.org Math : lines of text;alignment
-OpenOffice.org Math : links
-OpenOffice.org Math : links;between cells and controls
-OpenOffice.org Math : links;by drag and drop
-OpenOffice.org Math : links;character formats
-OpenOffice.org Math : links;definition
-OpenOffice.org Math : links;editing hyperlinks
-OpenOffice.org Math : links;inserting
-OpenOffice.org Math : links;modifying
-OpenOffice.org Math : links;opening files with
-OpenOffice.org Math : links;relational databases (Base)
-OpenOffice.org Math : links;turning off automatic recognition
-OpenOffice.org Math : links;updating options (Writer)
-OpenOffice.org Math : links;updating specific links
-OpenOffice.org Math : list box creation
-OpenOffice.org Math : lists
-OpenOffice.org Math : lists;data assigned to controls
-OpenOffice.org Math : lists;registered databases (Base)
-OpenOffice.org Math : lists;regular expressions
-OpenOffice.org Math : live presentations on the Internet
-OpenOffice.org Math : loading
-OpenOffice.org Math : loading;documents
-OpenOffice.org Math : loading;documents from other formats
-OpenOffice.org Math : loading;HTML documents, automatically
-OpenOffice.org Math : loading;Microsoft Office documents with VBA code
-OpenOffice.org Math : loading;reloading
-OpenOffice.org Math : loading;XML files
-OpenOffice.org Math : locale settings
-OpenOffice.org Math : logarithms
-OpenOffice.org Math : logic symbols
-OpenOffice.org Math : logical operators
-OpenOffice.org Math : lower limits
-OpenOffice.org Math : lowercase letters
-OpenOffice.org Math : lowercase letters;font effects
-OpenOffice.org Math : macros
-OpenOffice.org Math : macros;assigning to events in forms
-OpenOffice.org Math : macros;in MS Office documents
-OpenOffice.org Math : macros;interrupting
-OpenOffice.org Math : macros;organizing
-OpenOffice.org Math : macros;recording
-OpenOffice.org Math : macros;security
-OpenOffice.org Math : macros;security warning dialog
-OpenOffice.org Math : macros;selecting security warnings
-OpenOffice.org Math : magnifiers
-OpenOffice.org Math : Mail Merge feature in Microsoft Office
-OpenOffice.org Math : margins
-OpenOffice.org Math : margins;pages
-OpenOffice.org Math : margins;setting with the mouse
-OpenOffice.org Math : margins;shadows
-OpenOffice.org Math : markers
-OpenOffice.org Math : markers;definition
-OpenOffice.org Math : markers;next
-OpenOffice.org Math : markers;previous
-OpenOffice.org Math : marking changes
-OpenOffice.org Math : Markup feature in Microsoft Office
-OpenOffice.org Math : Math formula editor
-OpenOffice.org Math : mathematical symbols
-OpenOffice.org Math : mathematical symbols;catalog
-OpenOffice.org Math : mathematical symbols;other
-OpenOffice.org Math : matrices
-OpenOffice.org Math : matrices;arranging
-OpenOffice.org Math : maximum formula size
-OpenOffice.org Math : measurement units
-OpenOffice.org Math : measurement units;changing on rulers
-OpenOffice.org Math : measurement units;converting
-OpenOffice.org Math : measurement units;selecting
-OpenOffice.org Math : Media Player window
-OpenOffice.org Math : menus
-OpenOffice.org Math : menus;activating context menus
-OpenOffice.org Math : menus;customizing
-OpenOffice.org Math : menus;inactive menu items
-OpenOffice.org Math : merging
-OpenOffice.org Math : merging;documents
-OpenOffice.org Math : merging;formula parts
-OpenOffice.org Math : META tags
-OpenOffice.org Math : metrics
-OpenOffice.org Math : metrics;converting
-OpenOffice.org Math : metrics;document formatting (Writer)
-OpenOffice.org Math : metrics;in sheets
-OpenOffice.org Math : Microsoft Office
-OpenOffice.org Math : Microsoft Office;Access databases (base)
-OpenOffice.org Math : Microsoft Office;as standard file format
-OpenOffice.org Math : Microsoft Office;document import restrictions
-OpenOffice.org Math : Microsoft Office;feature comparisons
-OpenOffice.org Math : Microsoft Office;importing password protected files
-OpenOffice.org Math : Microsoft Office;importing Word documents
-OpenOffice.org Math : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Math : Microsoft Office;new users information
-OpenOffice.org Math : Microsoft Office;opening Microsoft documents
-OpenOffice.org Math : Microsoft Office;reassigning document types
-OpenOffice.org Math : minus signs
-OpenOffice.org Math : minus/plus signs
-OpenOffice.org Math : mobile device filters
-OpenOffice.org Math : models in XForms
-OpenOffice.org Math : modifying, see changing
-OpenOffice.org Math : more controls
-OpenOffice.org Math : mosaic filter
-OpenOffice.org Math : mouse
-OpenOffice.org Math : mouse;pointers when using drag and drop
-OpenOffice.org Math : mouse;positioning
-OpenOffice.org Math : moving
-OpenOffice.org Math : moving;tab stops on ruler
-OpenOffice.org Math : moving;toolbars
-OpenOffice.org Math : moving;using guide lines in presentations
-OpenOffice.org Math : MS ADO interface (Base)
-OpenOffice.org Math : much greater than relation
-OpenOffice.org Math : much less than relation
-OpenOffice.org Math : multi-line formulas
-OpenOffice.org Math : multi-line formulas;aligning
-OpenOffice.org Math : multi-line titles in forms
-OpenOffice.org Math : multiple documents
-OpenOffice.org Math : multiple documents;opening
-OpenOffice.org Math : multiplication signs
-OpenOffice.org Math : My Documents folder
-OpenOffice.org Math : My Documents folder;changing work directory
-OpenOffice.org Math : My Documents folder;opening
-OpenOffice.org Math : MySQL databases (Base)
-OpenOffice.org Math : Nabla operator
-OpenOffice.org Math : names
-OpenOffice.org Math : names;multi-line titles
-OpenOffice.org Math : names;objects
-OpenOffice.org Math : names, see also labels/callouts
-OpenOffice.org Math : namespace organization in XForms
-OpenOffice.org Math : native SQL (Base)
-OpenOffice.org Math : natural exponential functions
-OpenOffice.org Math : natural logarithms
-OpenOffice.org Math : natural numbers
-OpenOffice.org Math : navigating
-OpenOffice.org Math : navigating;in documents
-OpenOffice.org Math : Navigation bar
-OpenOffice.org Math : Navigation bar;controls
-OpenOffice.org Math : Navigation bar;forms
-OpenOffice.org Math : Navigator
-OpenOffice.org Math : Navigator;contents as lists
-OpenOffice.org Math : Navigator;docking
-OpenOffice.org Math : Navigator;working with
-OpenOffice.org Math : network identity options
-OpenOffice.org Math : new databases
-OpenOffice.org Math : new documents
-OpenOffice.org Math : new German spellcheck
-OpenOffice.org Math : new lines in cells
-OpenOffice.org Math : new symbols in OpenOffice.org Math
-OpenOffice.org Math : new windows
-OpenOffice.org Math : non-breaking dashes
-OpenOffice.org Math : non-breaking spaces (Writer)
-OpenOffice.org Math : non-printing characters (Writer)
-OpenOffice.org Math : not included in set operator
-OpenOffice.org Math : NOT operator
-OpenOffice.org Math : not subset set operators
-OpenOffice.org Math : not superset set operators
-OpenOffice.org Math : notes
-OpenOffice.org Math : notes;displaying (Calc)
-OpenOffice.org Math : notes;inserting and editing
-OpenOffice.org Math : notes;printing in text
-OpenOffice.org Math : number formats
-OpenOffice.org Math : number formats;codes
-OpenOffice.org Math : number formats;formats
-OpenOffice.org Math : number formats;recognition in text tables
-OpenOffice.org Math : number of pages
-OpenOffice.org Math : number of sheets
-OpenOffice.org Math : number of tables
-OpenOffice.org Math : numbering
-OpenOffice.org Math : numbering;options
-OpenOffice.org Math : numbering;paragraphs
-OpenOffice.org Math : numbering;turning off
-OpenOffice.org Math : numbering;using automatically
-OpenOffice.org Math : numbers
-OpenOffice.org Math : numbers;date, time and currency formats
-OpenOffice.org Math : numbers;decimal places (Calc)
-OpenOffice.org Math : numbers;formatting options for selected cells
-OpenOffice.org Math : numerical fields in forms
-OpenOffice.org Math : objects
-OpenOffice.org Math : objects;always moveable (Impress/Draw)
-OpenOffice.org Math : objects;arranging within stacks
-OpenOffice.org Math : objects;contours in presentations
-OpenOffice.org Math : objects;copying when moving in presentations
-OpenOffice.org Math : objects;definition
-OpenOffice.org Math : objects;displaying in spreadsheets
-OpenOffice.org Math : objects;displaying in text documents
-OpenOffice.org Math : objects;editing
-OpenOffice.org Math : objects;inserting from Gallery
-OpenOffice.org Math : objects;inserting OLE objects
-OpenOffice.org Math : objects;moving and resizing with mouse
-OpenOffice.org Math : objects;naming
-OpenOffice.org Math : objects;opening
-OpenOffice.org Math : objects;quickly moving to
-OpenOffice.org Math : objects;titles and descriptions
-OpenOffice.org Math : ODBC
-OpenOffice.org Math : ODBC;database (Base)
-OpenOffice.org Math : ODBC;definition
-OpenOffice.org Math : ODF file formats
-OpenOffice.org Math : Office
-OpenOffice.org Math : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Math : old German spellcheck
-OpenOffice.org Math : OLE
-OpenOffice.org Math : OLE;definition
-OpenOffice.org Math : OLE objects
-OpenOffice.org Math : OLE objects;arranging within stacks
-OpenOffice.org Math : OLE objects;captions (Writer)
-OpenOffice.org Math : OLE objects;inserting
-OpenOffice.org Math : OLE objects;number of
-OpenOffice.org Math : OLE objects;protecting
-OpenOffice.org Math : one and a half line spacing in text
-OpenOffice.org Math : online registration
-OpenOffice.org Math : online update options
-OpenOffice.org Math : online updates
-OpenOffice.org Math : online updates;checking automatically
-OpenOffice.org Math : online updates;checking manually
-OpenOffice.org Math : Open/Save dialogs
-OpenOffice.org Math : OpenDocument file formats
-OpenOffice.org Math : OpenGL
-OpenOffice.org Math : OpenGL;definition
-OpenOffice.org Math : OpenGL;optimized output
-OpenOffice.org Math : opening
-OpenOffice.org Math : opening;context menus
-OpenOffice.org Math : opening;database files
-OpenOffice.org Math : opening;dialog settings
-OpenOffice.org Math : opening;documents
-OpenOffice.org Math : opening;documents from other formats
-OpenOffice.org Math : opening;files with links
-OpenOffice.org Math : opening;files, with placeholders
-OpenOffice.org Math : opening;forms
-OpenOffice.org Math : opening;Microsoft Office files
-OpenOffice.org Math : opening;mobile device documents
-OpenOffice.org Math : opening;objects
-OpenOffice.org Math : opening;reports
-OpenOffice.org Math : opening;several files
-OpenOffice.org Math : opening;XForms
-OpenOffice.org Math : OpenOffice.org Base data sources
-OpenOffice.org Math : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Math : OpenOffice.org documents
-OpenOffice.org Math : OpenOffice.org documents;mobile device filters
-OpenOffice.org Math : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Math : OpenOffice.org Math
-OpenOffice.org Math : OpenOffice.org Math;entering symbols in
-OpenOffice.org Math : OpenOffice.org Math;examples
-OpenOffice.org Math : OpenOffice.org Math;formatting
-OpenOffice.org Math : OpenOffice.org Math;general instructions
-OpenOffice.org Math : OpenOffice.org Math;reference list
-OpenOffice.org Math : OpenOffice.org Math;relations
-OpenOffice.org Math : OpenOffice.org Math start
-OpenOffice.org Math : operator brackets
-OpenOffice.org Math : operators
-OpenOffice.org Math : operators;default filters
-OpenOffice.org Math : operators;general
-OpenOffice.org Math : operators;in Math
-OpenOffice.org Math : operators;list of
-OpenOffice.org Math : operators;unary and binary
-OpenOffice.org Math : optional hyphens (Writer)
-OpenOffice.org Math : options
-OpenOffice.org Math : options;accessibility
-OpenOffice.org Math : options;appearance
-OpenOffice.org Math : options;compatibility (Writer)
-OpenOffice.org Math : options;network identity
-OpenOffice.org Math : options;online update
-OpenOffice.org Math : options;tools
-OpenOffice.org Math : OR operator
-OpenOffice.org Math : Oracle databases (base)
-OpenOffice.org Math : ordering
-OpenOffice.org Math : ordering;objects
-OpenOffice.org Math : organizing
-OpenOffice.org Math : organizing;macros and scripts
-OpenOffice.org Math : organizing;namespaces in XForms
-OpenOffice.org Math : organizing;styles
-OpenOffice.org Math : organizing;templates
-OpenOffice.org Math : original by correspondence
-OpenOffice.org Math : original size
-OpenOffice.org Math : original size;printing in OpenOffice.org Math
-OpenOffice.org Math : original size;restoring after cropping
-OpenOffice.org Math : orphaned brackets
-OpenOffice.org Math : orthogonal relations
-OpenOffice.org Math : other operators
-OpenOffice.org Math : other operators;list of
-OpenOffice.org Math : outlines
-OpenOffice.org Math : outlines;font effects
-OpenOffice.org Math : outlines;outline symbols
-OpenOffice.org Math : outlines;sending to presentations
-OpenOffice.org Math : overline attribute
-OpenOffice.org Math : overwrite mode
-OpenOffice.org Math : owns command
-OpenOffice.org Math : packages, see extensions
-OpenOffice.org Math : page breaks
-OpenOffice.org Math : page breaks;displaying (Calc)
-OpenOffice.org Math : page formats
-OpenOffice.org Math : page formats;maximizing
-OpenOffice.org Math : page formats;restriction
-OpenOffice.org Math : page styles
-OpenOffice.org Math : page styles;editing/applying with statusbar
-OpenOffice.org Math : pages
-OpenOffice.org Math : pages;backgrounds in spreadsheets
-OpenOffice.org Math : pages;formatting and numbering
-OpenOffice.org Math : pages;printing page names in presentations
-OpenOffice.org Math : pages;scaling
-OpenOffice.org Math : pages;selecting one to print
-OpenOffice.org Math : paint box
-OpenOffice.org Math : paint can symbol
-OpenOffice.org Math : pair kerning
-OpenOffice.org Math : Palm file filters
-OpenOffice.org Math : paper formats
-OpenOffice.org Math : paper size warning
-OpenOffice.org Math : paper trays
-OpenOffice.org Math : paragraph marks
-OpenOffice.org Math : paragraph marks;displaying (Writer)
-OpenOffice.org Math : paragraph styles
-OpenOffice.org Math : paragraph styles;languages
-OpenOffice.org Math : paragraph styles;modifying basic fonts
-OpenOffice.org Math : paragraphs
-OpenOffice.org Math : paragraphs;alignment
-OpenOffice.org Math : paragraphs;Asian typography
-OpenOffice.org Math : paragraphs;backgrounds
-OpenOffice.org Math : paragraphs;defining borders
-OpenOffice.org Math : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Math : paragraphs;increasing indents of
-OpenOffice.org Math : paragraphs;indents, margins and columns
-OpenOffice.org Math : paragraphs;inserting bullets
-OpenOffice.org Math : paragraphs;joining
-OpenOffice.org Math : paragraphs;numbering automatically
-OpenOffice.org Math : paragraphs;removing blank ones
-OpenOffice.org Math : paragraphs;spacing
-OpenOffice.org Math : paragraphs;tab stops
-OpenOffice.org Math : parallel relation
-OpenOffice.org Math : parameters
-OpenOffice.org Math : parameters;command line
-OpenOffice.org Math : parameters;queries (Base)
-OpenOffice.org Math : parentheses (Math)
-OpenOffice.org Math : partial differentiation symbol
-OpenOffice.org Math : passwords for protecting contents
-OpenOffice.org Math : pasting
-OpenOffice.org Math : pasting;cell ranges
-OpenOffice.org Math : pasting;cell ranges from spreadsheets
-OpenOffice.org Math : pasting;data from text documents
-OpenOffice.org Math : pasting;draw objects
-OpenOffice.org Math : pasting;draw objects from other documents
-OpenOffice.org Math : pasting;formatted/unformatted text
-OpenOffice.org Math : pasting;from data source view
-OpenOffice.org Math : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Math : pasting;pictures from other documents
-OpenOffice.org Math : pasting;sheet areas in text documents
-OpenOffice.org Math : pasting;to Gallery
-OpenOffice.org Math : paths
-OpenOffice.org Math : paths;changing work directory
-OpenOffice.org Math : paths;defaults
-OpenOffice.org Math : pattern editor
-OpenOffice.org Math : pattern fields
-OpenOffice.org Math : pattern fields;form functions
-OpenOffice.org Math : patterns for objects
-OpenOffice.org Math : PDF
-OpenOffice.org Math : PDF;export
-OpenOffice.org Math : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Math : personal data input
-OpenOffice.org Math : phonetic guide
-OpenOffice.org Math : picklist creation
-OpenOffice.org Math : picture by correspondence
-OpenOffice.org Math : pictures
-OpenOffice.org Math : pictures;adding to Gallery
-OpenOffice.org Math : pictures;arranging within stacks
-OpenOffice.org Math : pictures;assigning macros
-OpenOffice.org Math : pictures;backgrounds
-OpenOffice.org Math : pictures;captions (Writer)
-OpenOffice.org Math : pictures;changing paths
-OpenOffice.org Math : pictures;cropping and zooming
-OpenOffice.org Math : pictures;displaying in Calc
-OpenOffice.org Math : pictures;displaying in Writer (Writer)
-OpenOffice.org Math : pictures;drag and drop between documents
-OpenOffice.org Math : pictures;drawing
-OpenOffice.org Math : pictures;editing
-OpenOffice.org Math : pictures;filters
-OpenOffice.org Math : pictures;ImageMap
-OpenOffice.org Math : pictures;inserting automatically
-OpenOffice.org Math : pictures;inserting from Gallery
-OpenOffice.org Math : pictures;number of
-OpenOffice.org Math : pictures;printing
-OpenOffice.org Math : pictures;scaling/resizing
-OpenOffice.org Math : Pivot tables feature in Microsoft Office
-OpenOffice.org Math : pixel editor
-OpenOffice.org Math : pixel graphics
-OpenOffice.org Math : pixel graphics;inserting and editing
-OpenOffice.org Math : pixel patterns
-OpenOffice.org Math : placeholders
-OpenOffice.org Math : placeholders;in SQL queries
-OpenOffice.org Math : placeholders;inserting in formulas
-OpenOffice.org Math : placeholders;on opening files
-OpenOffice.org Math : placeholders;position of next
-OpenOffice.org Math : placeholders;previous marker
-OpenOffice.org Math : placing toolbars
-OpenOffice.org Math : playing movies and sound files
-OpenOffice.org Math : plotting data as charts
-OpenOffice.org Math : plug-ins
-OpenOffice.org Math : plug-ins;activating and deactivating
-OpenOffice.org Math : plug-ins;definition
-OpenOffice.org Math : plug-ins;inserting
-OpenOffice.org Math : plus signs
-OpenOffice.org Math : plus/minus signs
-OpenOffice.org Math : pocket device appliances
-OpenOffice.org Math : Pocket PC file filters
-OpenOffice.org Math : points
-OpenOffice.org Math : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Math : polygon drawing
-OpenOffice.org Math : pop-art filter
-OpenOffice.org Math : portable document format
-OpenOffice.org Math : positioning
-OpenOffice.org Math : positioning;draw objects and controls
-OpenOffice.org Math : positioning;fonts
-OpenOffice.org Math : positioning;objects
-OpenOffice.org Math : positioning;toolbars
-OpenOffice.org Math : post method for form transmissions
-OpenOffice.org Math : posterizing filter
-OpenOffice.org Math : PostScript
-OpenOffice.org Math : PostScript;creating files
-OpenOffice.org Math : PostScript;PDF converter, UNIX
-OpenOffice.org Math : PowerPoint export
-OpenOffice.org Math : powers
-OpenOffice.org Math : precision as shown (Calc)
-OpenOffice.org Math : predefining fonts
-OpenOffice.org Math : presentations
-OpenOffice.org Math : presentations;creating/opening
-OpenOffice.org Math : presentations;inserting spreadsheet cells
-OpenOffice.org Math : presentations;live on the Internet
-OpenOffice.org Math : presentations;print menu
-OpenOffice.org Math : presentations;saving
-OpenOffice.org Math : presentations;saving automatically
-OpenOffice.org Math : presentations;saving in other formats
-OpenOffice.org Math : presentations;sending as e-mail
-OpenOffice.org Math : presentations;starting with wizard
-OpenOffice.org Math : presentations;wizards
-OpenOffice.org Math : press buttons, see push buttons
-OpenOffice.org Math : previews
-OpenOffice.org Math : previews;fonts lists
-OpenOffice.org Math : primary keys
-OpenOffice.org Math : primary keys;defining
-OpenOffice.org Math : primary keys;inserting (Base)
-OpenOffice.org Math : print area selection
-OpenOffice.org Math : printer metrics for document formatting (Writer)
-OpenOffice.org Math : printers
-OpenOffice.org Math : printers;adding, UNIX
-OpenOffice.org Math : printers;choosing
-OpenOffice.org Math : printers;default printer
-OpenOffice.org Math : printers;faxes under UNIX
-OpenOffice.org Math : printers;maximum page formats
-OpenOffice.org Math : printers;paper trays
-OpenOffice.org Math : printers;properties
-OpenOffice.org Math : printing
-OpenOffice.org Math : printing;black and white
-OpenOffice.org Math : printing;brochures
-OpenOffice.org Math : printing;colors in grayscale
-OpenOffice.org Math : printing;copies
-OpenOffice.org Math : printing;creating individual jobs
-OpenOffice.org Math : printing;dates in presentations
-OpenOffice.org Math : printing;directly
-OpenOffice.org Math : printing;documents
-OpenOffice.org Math : printing;drawings defaults
-OpenOffice.org Math : printing;elements in text documents
-OpenOffice.org Math : printing;faster
-OpenOffice.org Math : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Math : printing;fitting to pages in presentations
-OpenOffice.org Math : printing;formulas in OpenOffice.org Math
-OpenOffice.org Math : printing;hidden pages of presentations
-OpenOffice.org Math : printing;in original size in OpenOffice.org Math
-OpenOffice.org Math : printing;left/right pages
-OpenOffice.org Math : printing;queries (Base)
-OpenOffice.org Math : printing;scaling in OpenOffice.org Math
-OpenOffice.org Math : printing;selections
-OpenOffice.org Math : printing;text always in black
-OpenOffice.org Math : printing;text in reverse order
-OpenOffice.org Math : printing;tiling pages in presentations
-OpenOffice.org Math : printing;transparencies
-OpenOffice.org Math : printing;warnings
-OpenOffice.org Math : printing;without scaling in presentations
-OpenOffice.org Math : printing speed
-OpenOffice.org Math : product
-OpenOffice.org Math : programming
-OpenOffice.org Math : programming;OpenOffice.org
-OpenOffice.org Math : programming;scripting
-OpenOffice.org Math : properties
-OpenOffice.org Math : properties;fields in databases
-OpenOffice.org Math : properties;files
-OpenOffice.org Math : properties;form controls
-OpenOffice.org Math : properties;forms
-OpenOffice.org Math : properties;printers
-OpenOffice.org Math : proportional to relation
-OpenOffice.org Math : protected contents
-OpenOffice.org Math : protected dashes
-OpenOffice.org Math : protected database tables
-OpenOffice.org Math : protected documents
-OpenOffice.org Math : protected spaces
-OpenOffice.org Math : protected spaces;inserting
-OpenOffice.org Math : protected spaces;showing (Writer)
-OpenOffice.org Math : protecting
-OpenOffice.org Math : protecting;contents
-OpenOffice.org Math : protecting;recorded changes
-OpenOffice.org Math : proxy settings
-OpenOffice.org Math : push buttons
-OpenOffice.org Math : push buttons;adding to documents
-OpenOffice.org Math : push buttons;creating
-OpenOffice.org Math : queries
-OpenOffice.org Math : queries;copying (Base)
-OpenOffice.org Math : queries;creating in design view (Base)
-OpenOffice.org Math : queries;creating in SQL view
-OpenOffice.org Math : queries;defining (Base)
-OpenOffice.org Math : queries;deleting table links (Base)
-OpenOffice.org Math : queries;editing in data source view
-OpenOffice.org Math : queries;formulating filter conditions (Base)
-OpenOffice.org Math : queries;joining tables (Base)
-OpenOffice.org Math : queries;missing elements (Base)
-OpenOffice.org Math : queries;overview (Base)
-OpenOffice.org Math : queries;parameter queries (Base)
-OpenOffice.org Math : queries;printing (Base)
-OpenOffice.org Math : Query Wizard (Base)
-OpenOffice.org Math : quickstarter
-OpenOffice.org Math : quotation marks
-OpenOffice.org Math : quotation marks;replacing
-OpenOffice.org Math : quotes
-OpenOffice.org Math : quotes;custom
-OpenOffice.org Math : quotient set
-OpenOffice.org Math : radio button creation
-OpenOffice.org Math : range of integral example
-OpenOffice.org Math : rational numbers
-OpenOffice.org Math : read-only documents
-OpenOffice.org Math : read-only documents;cursor
-OpenOffice.org Math : read-only documents;database tables on/off
-OpenOffice.org Math : read-only documents;editing
-OpenOffice.org Math : read-only documents;opening documents as
-OpenOffice.org Math : read-only items in Data Navigator
-OpenOffice.org Math : real numbers
-OpenOffice.org Math : real part of complex numbers
-OpenOffice.org Math : recognizing URLs automatically
-OpenOffice.org Math : recording
-OpenOffice.org Math : recording;changes
-OpenOffice.org Math : recording;macros
-OpenOffice.org Math : records
-OpenOffice.org Math : records;inserting notes
-OpenOffice.org Math : records;protecting
-OpenOffice.org Math : records;saving
-OpenOffice.org Math : records;searching in databases
-OpenOffice.org Math : rectangles with round corners
-OpenOffice.org Math : recursions in spreadsheets
-OpenOffice.org Math : redo command
-OpenOffice.org Math : reduced printing
-OpenOffice.org Math : reference lines
-OpenOffice.org Math : reference tables
-OpenOffice.org Math : reference tables;formulas
-OpenOffice.org Math : references
-OpenOffice.org Math : references;displaying in color (Calc)
-OpenOffice.org Math : references;expanding (Calc)
-OpenOffice.org Math : references;iterative (Calc)
-OpenOffice.org Math : Refresh Data feature in Microsoft Office
-OpenOffice.org Math : refreshing formula view
-OpenOffice.org Math : register-true
-OpenOffice.org Math : register-true;definition
-OpenOffice.org Math : registering
-OpenOffice.org Math : registering;address books
-OpenOffice.org Math : registering;databases (Base)
-OpenOffice.org Math : registering;OpenOffice.org
-OpenOffice.org Math : regular expressions
-OpenOffice.org Math : regular expressions;list of
-OpenOffice.org Math : regular expressions;opening files
-OpenOffice.org Math : relational databases (Base)
-OpenOffice.org Math : relations
-OpenOffice.org Math : relations;creating and deleting (Base)
-OpenOffice.org Math : relations;in OpenOffice.org Math
-OpenOffice.org Math : relations;joining tables (Base)
-OpenOffice.org Math : relations;properties (Base)
-OpenOffice.org Math : relations operators
-OpenOffice.org Math : relations operators;list of
-OpenOffice.org Math : relative hyperlinks
-OpenOffice.org Math : relative saving of URLs
-OpenOffice.org Math : reloading
-OpenOffice.org Math : reloading;documents
-OpenOffice.org Math : reloading;HTML documents, automatically
-OpenOffice.org Math : remarks, see also notes
-OpenOffice.org Math : remote configurations
-OpenOffice.org Math : remove noise filter
-OpenOffice.org Math : removing
-OpenOffice.org Math : removing;bullets and numbering
-OpenOffice.org Math : removing;form filters
-OpenOffice.org Math : removing, see also deleting
-OpenOffice.org Math : Replace text as you type feature in Microsoft Office
-OpenOffice.org Math : replacement options
-OpenOffice.org Math : replacement table
-OpenOffice.org Math : replacing
-OpenOffice.org Math : replacing;AutoCorrect function
-OpenOffice.org Math : replacing;dashes
-OpenOffice.org Math : Report Builder
-OpenOffice.org Math : reports
-OpenOffice.org Math : reports;creating
-OpenOffice.org Math : reports;error reports
-OpenOffice.org Math : reports;opening and editing
-OpenOffice.org Math : reports;templates
-OpenOffice.org Math : resetting
-OpenOffice.org Math : resetting;templates
-OpenOffice.org Math : resizing
-OpenOffice.org Math : resizing;fonts
-OpenOffice.org Math : resizing;objects, by mouse
-OpenOffice.org Math : resizing, see also scaling/zooming
-OpenOffice.org Math : resolution when printing bitmaps
-OpenOffice.org Math : restoring
-OpenOffice.org Math : restoring;default formatting
-OpenOffice.org Math : restoring;editing
-OpenOffice.org Math : reversed circumflex attribute
-OpenOffice.org Math : reversing printing order
-OpenOffice.org Math : review function
-OpenOffice.org Math : review function;accepting or rejecting changes
-OpenOffice.org Math : review function;comparing documents
-OpenOffice.org Math : review function;recording changes example
-OpenOffice.org Math : rich text control
-OpenOffice.org Math : right alignment of paragraphs
-OpenOffice.org Math : right angled relations
-OpenOffice.org Math : right arrow symbol
-OpenOffice.org Math : right joins (Base)
-OpenOffice.org Math : right-justified alignment in OpenOffice.org Math
-OpenOffice.org Math : right-to-left text
-OpenOffice.org Math : roots
-OpenOffice.org Math : rotating
-OpenOffice.org Math : rotating;3D text
-OpenOffice.org Math : round brackets
-OpenOffice.org Math : round corners
-OpenOffice.org Math : rounding precision (Calc)
-OpenOffice.org Math : row headers
-OpenOffice.org Math : row headers;displaying (Calc)
-OpenOffice.org Math : row headers;highlighting (Calc)
-OpenOffice.org Math : rulers
-OpenOffice.org Math : rulers;default settings
-OpenOffice.org Math : rulers;measurement units
-OpenOffice.org Math : rulers;visible in presentations
-OpenOffice.org Math : samples and templates
-OpenOffice.org Math : saving
-OpenOffice.org Math : saving;default file formats
-OpenOffice.org Math : saving;dialog settings
-OpenOffice.org Math : saving;documents
-OpenOffice.org Math : saving;documents for mobile devices
-OpenOffice.org Math : saving;documents in other formats
-OpenOffice.org Math : saving;documents, automatically
-OpenOffice.org Math : saving;in Microsoft Office file format
-OpenOffice.org Math : saving;options
-OpenOffice.org Math : saving;templates
-OpenOffice.org Math : saving;to XML
-OpenOffice.org Math : saving;VBA code in Microsoft Office documents
-OpenOffice.org Math : saving;with password by default
-OpenOffice.org Math : saving as command
-OpenOffice.org Math : saving as command;precautions
-OpenOffice.org Math : scalable braces
-OpenOffice.org Math : scalable lines with ceiling
-OpenOffice.org Math : scalable round brackets
-OpenOffice.org Math : scaling
-OpenOffice.org Math : scaling;font sizes in user interface
-OpenOffice.org Math : scaling;fonts
-OpenOffice.org Math : scaling;in OpenOffice.org Math
-OpenOffice.org Math : scaling;objects
-OpenOffice.org Math : scaling;pictures
-OpenOffice.org Math : scaling;printing in OpenOffice.org Math
-OpenOffice.org Math : scaling;when printing presentations
-OpenOffice.org Math : scaling, see also zooming
-OpenOffice.org Math : screen
-OpenOffice.org Math : screen;full screen views
-OpenOffice.org Math : screen;scaling
-OpenOffice.org Math : screen magnifiers
-OpenOffice.org Math : screen readers
-OpenOffice.org Math : script organization
-OpenOffice.org Math : scripting in programming
-OpenOffice.org Math : scrollbars
-OpenOffice.org Math : scrollbars;controls
-OpenOffice.org Math : scrollbars;displaying (Calc)
-OpenOffice.org Math : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Math : search criteria for database functions in cells
-OpenOffice.org Math : search engines
-OpenOffice.org Math : search engines;definition
-OpenOffice.org Math : search engines;selecting
-OpenOffice.org Math : searching
-OpenOffice.org Math : searching;all sheets
-OpenOffice.org Math : searching;databases
-OpenOffice.org Math : searching;form filters
-OpenOffice.org Math : searching;Internet
-OpenOffice.org Math : searching;tables and forms
-OpenOffice.org Math : sections
-OpenOffice.org Math : sections;backgrounds
-OpenOffice.org Math : sections;protecting
-OpenOffice.org Math : security
-OpenOffice.org Math : security;options for documents with macros
-OpenOffice.org Math : security;protecting contents
-OpenOffice.org Math : security;warning dialogs with macros
-OpenOffice.org Math : selecting
-OpenOffice.org Math : selecting;controls
-OpenOffice.org Math : selecting;group objects
-OpenOffice.org Math : selecting;measurement units
-OpenOffice.org Math : selecting;objects
-OpenOffice.org Math : selecting;print areas
-OpenOffice.org Math : selecting;several files
-OpenOffice.org Math : selection clipboard
-OpenOffice.org Math : selection modes in text
-OpenOffice.org Math : selection options in formulas
-OpenOffice.org Math : sending
-OpenOffice.org Math : sending;AutoAbstract function in presentations
-OpenOffice.org Math : sending;documents as e-mail
-OpenOffice.org Math : sending;documents as faxes
-OpenOffice.org Math : separator lines
-OpenOffice.org Math : separator lines;defining
-OpenOffice.org Math : separators
-OpenOffice.org Math : separators;conditional
-OpenOffice.org Math : Server Side ImageMap
-OpenOffice.org Math : set operations in OpenOffice.orgMath
-OpenOffice.org Math : set operators
-OpenOffice.org Math : set operators;list of
-OpenOffice.org Math : sets of numbers
-OpenOffice.org Math : settings
-OpenOffice.org Math : settings;printers
-OpenOffice.org Math : settings;program configuration
-OpenOffice.org Math : settings;proxies
-OpenOffice.org Math : settings;tracking changes
-OpenOffice.org Math : settings;views
-OpenOffice.org Math : SGML
-OpenOffice.org Math : SGML;definition
-OpenOffice.org Math : shadows
-OpenOffice.org Math : shadows;areas
-OpenOffice.org Math : shadows;borders
-OpenOffice.org Math : shadows;characters
-OpenOffice.org Math : shadows;characters, using context menu
-OpenOffice.org Math : sharpening filter
-OpenOffice.org Math : sheet tabs
-OpenOffice.org Math : sheet tabs;displaying
-OpenOffice.org Math : sheets
-OpenOffice.org Math : sheets;searching all
-OpenOffice.org Math : shortcut keys
-OpenOffice.org Math : shortcut keys;assigning macros
-OpenOffice.org Math : shortcut keys;general
-OpenOffice.org Math : shortcut keys;in databases
-OpenOffice.org Math : shortcut keys;in formulas
-OpenOffice.org Math : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Math : Show/Hide feature in Microsoft Office
-OpenOffice.org Math : showing
-OpenOffice.org Math : showing;changes
-OpenOffice.org Math : showing;docked windows
-OpenOffice.org Math : showing;drawings and controls (Writer)
-OpenOffice.org Math : showing;live presentations on the Internet
-OpenOffice.org Math : showing;toolbars
-OpenOffice.org Math : signing documents with digital signatures
-OpenOffice.org Math : similar to relations
-OpenOffice.org Math : similarity search
-OpenOffice.org Math : simple handles (Writer)
-OpenOffice.org Math : simplified Chinese
-OpenOffice.org Math : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Math : sine function
-OpenOffice.org Math : single brackets without group function
-OpenOffice.org Math : single sign on options
-OpenOffice.org Math : single-line spacing in text
-OpenOffice.org Math : sizes
-OpenOffice.org Math : sizes;draw objects
-OpenOffice.org Math : sizes;of fonts in OpenOffice.org Math
-OpenOffice.org Math : sizes;pictures
-OpenOffice.org Math : slanting draw objects
-OpenOffice.org Math : slash division sign
-OpenOffice.org Math : small capitals
-OpenOffice.org Math : small gaps
-OpenOffice.org Math : small icons
-OpenOffice.org Math : smart tags
-OpenOffice.org Math : smart tags;options
-OpenOffice.org Math : smooth scrolling (Writer)
-OpenOffice.org Math : smoothing filter
-OpenOffice.org Math : snap grid defaults (Writer/Calc)
-OpenOffice.org Math : snapping in presentations and drawings
-OpenOffice.org Math : solarization filter
-OpenOffice.org Math : sort lists
-OpenOffice.org Math : sort lists;copying to in Calc
-OpenOffice.org Math : sorting
-OpenOffice.org Math : sorting;data in forms
-OpenOffice.org Math : sorting;databases
-OpenOffice.org Math : sounds
-OpenOffice.org Math : sounds;inserting and playing
-OpenOffice.org Math : sounds;UNIX
-OpenOffice.org Math : spaces
-OpenOffice.org Math : spaces;displaying (Writer)
-OpenOffice.org Math : spaces;ignoring double
-OpenOffice.org Math : spaces;inserting protected spaces
-OpenOffice.org Math : spaces;showing protected spaces (Writer)
-OpenOffice.org Math : spaces in formulas
-OpenOffice.org Math : spacing
-OpenOffice.org Math : spacing;between paragraphs in footnotes
-OpenOffice.org Math : spacing;font effects
-OpenOffice.org Math : spacing;formula elements
-OpenOffice.org Math : spacing;lines and paragraphs
-OpenOffice.org Math : spacing;tab stops in text documents
-OpenOffice.org Math : spacing;tabs in presentations
-OpenOffice.org Math : spadmin
-OpenOffice.org Math : special characters
-OpenOffice.org Math : speech bubbles
-OpenOffice.org Math : speed of printing
-OpenOffice.org Math : spellcheck
-OpenOffice.org Math : spellcheck;activating for a language
-OpenOffice.org Math : spellcheck;context menus
-OpenOffice.org Math : spellcheck;default languages
-OpenOffice.org Math : spellcheck;dialog
-OpenOffice.org Math : spellcheck;dictionary of exceptions
-OpenOffice.org Math : spellcheck;ignore list
-OpenOffice.org Math : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Math : spin button creation
-OpenOffice.org Math : spoolfiles with Xprinter
-OpenOffice.org Math : spreadsheets
-OpenOffice.org Math : spreadsheets;as databases (base)
-OpenOffice.org Math : spreadsheets;backgrounds
-OpenOffice.org Math : spreadsheets;copying areas to text documents
-OpenOffice.org Math : spreadsheets;creating/opening
-OpenOffice.org Math : spreadsheets;inserting charts
-OpenOffice.org Math : spreadsheets;inserting database records
-OpenOffice.org Math : spreadsheets;printing
-OpenOffice.org Math : spreadsheets;saving
-OpenOffice.org Math : spreadsheets;saving automatically
-OpenOffice.org Math : spreadsheets;saving in other formats
-OpenOffice.org Math : spreadsheets;sending as e-mail
-OpenOffice.org Math : SQL
-OpenOffice.org Math : SQL;definition
-OpenOffice.org Math : SQL;DISTINCT parameter
-OpenOffice.org Math : SQL;executing SQL commands
-OpenOffice.org Math : SQL;executing SQL statements (Base)
-OpenOffice.org Math : SQL;queries (Base)
-OpenOffice.org Math : square brackets
-OpenOffice.org Math : square drawings
-OpenOffice.org Math : square roots
-OpenOffice.org Math : stacks
-OpenOffice.org Math : standard bar on/off
-OpenOffice.org Math : standard filters in databases
-OpenOffice.org Math : standard printer under UNIX
-OpenOffice.org Math : Start Module backing window
-OpenOffice.org Math : start parameters
-OpenOffice.org Math : status bar on/off
-OpenOffice.org Math : stickers
-OpenOffice.org Math : strikethrough
-OpenOffice.org Math : strikethrough;characters
-OpenOffice.org Math : strikethrough;font effects
-OpenOffice.org Math : styles
-OpenOffice.org Math : styles;'changed' message
-OpenOffice.org Math : styles;copying between documents
-OpenOffice.org Math : styles;keyboard shortcuts
-OpenOffice.org Math : styles;organizing
-OpenOffice.org Math : styles;printing styles used in a document
-OpenOffice.org Math : styles;replacing automatically
-OpenOffice.org Math : Styles and Formatting window
-OpenOffice.org Math : Styles and Formatting window;docking
-OpenOffice.org Math : subforms
-OpenOffice.org Math : subforms;creating
-OpenOffice.org Math : subforms;description
-OpenOffice.org Math : submitting forms
-OpenOffice.org Math : subscripts
-OpenOffice.org Math : subset set operators
-OpenOffice.org Math : subtraction signs
-OpenOffice.org Math : suffixes in file formats
-OpenOffice.org Math : sum range example
-OpenOffice.org Math : summation
-OpenOffice.org Math : superscripts
-OpenOffice.org Math : superset set operators
-OpenOffice.org Math : support on the Web
-OpenOffice.org Math : symbols
-OpenOffice.org Math : symbols;adding in OpenOffice.org Math
-OpenOffice.org Math : symbols;entering in OpenOffice.org Math
-OpenOffice.org Math : symbols;for complex numbers
-OpenOffice.org Math : synchronizing
-OpenOffice.org Math : synchronizing;labels and business cards
-OpenOffice.org Math : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Math : system address book registration
-OpenOffice.org Math : tab stops
-OpenOffice.org Math : tab stops;displaying (Writer)
-OpenOffice.org Math : tab stops;inserting and editing
-OpenOffice.org Math : tab stops;setting in sheets
-OpenOffice.org Math : tab stops;settings
-OpenOffice.org Math : tab stops;spacing in presentations
-OpenOffice.org Math : tab stops;spacing in text documents
-OpenOffice.org Math : table controls
-OpenOffice.org Math : table controls;form functions
-OpenOffice.org Math : table controls;keyboard-only edit mode
-OpenOffice.org Math : table controls;properties
-OpenOffice.org Math : table views of databases
-OpenOffice.org Math : Table Wizard (Base)
-OpenOffice.org Math : tables
-OpenOffice.org Math : tables;backgrounds
-OpenOffice.org Math : tables;inserting line breaks
-OpenOffice.org Math : tables in databases
-OpenOffice.org Math : tables in databases;access rights to (Base)
-OpenOffice.org Math : tables in databases;adding to queries
-OpenOffice.org Math : tables in databases;browsing and editing
-OpenOffice.org Math : tables in databases;copying database tables (Base)
-OpenOffice.org Math : tables in databases;creating
-OpenOffice.org Math : tables in databases;creating in design view
-OpenOffice.org Math : tables in databases;importing text formats (Base)
-OpenOffice.org Math : tables in databases;joining for queries (Base)
-OpenOffice.org Math : tables in databases;printing queries (Base)
-OpenOffice.org Math : tables in databases;relations (Base)
-OpenOffice.org Math : tables in databases;searching
-OpenOffice.org Math : tables in spreadsheets
-OpenOffice.org Math : tables in spreadsheets;copying data to other applications
-OpenOffice.org Math : tables in spreadsheets;defining borders
-OpenOffice.org Math : tables in spreadsheets;value highlighting
-OpenOffice.org Math : tables in text
-OpenOffice.org Math : tables in text;captions
-OpenOffice.org Math : tables in text;creating automatically
-OpenOffice.org Math : tables in text;default settings
-OpenOffice.org Math : tables in text;defining borders
-OpenOffice.org Math : tables in text;displaying
-OpenOffice.org Math : tables in text;printing
-OpenOffice.org Math : tables in text;protecting cells
-OpenOffice.org Math : tables of contents
-OpenOffice.org Math : tables of contents;unprotecting
-OpenOffice.org Math : tabs
-OpenOffice.org Math : tabs;displaying sheet tabs
-OpenOffice.org Math : tags
-OpenOffice.org Math : tags;definition
-OpenOffice.org Math : tags;META tags
-OpenOffice.org Math : tangent function
-OpenOffice.org Math : templates
-OpenOffice.org Math : templates;agendas
-OpenOffice.org Math : templates;changing basic fonts
-OpenOffice.org Math : templates;database reports
-OpenOffice.org Math : templates;deleting
-OpenOffice.org Math : templates;editing and saving
-OpenOffice.org Math : templates;faxes
-OpenOffice.org Math : templates;importing and exporting
-OpenOffice.org Math : templates;letters
-OpenOffice.org Math : templates;new documents from templates
-OpenOffice.org Math : templates;opening documents with
-OpenOffice.org Math : templates;organizing
-OpenOffice.org Math : terminology
-OpenOffice.org Math : terminology;general glossary
-OpenOffice.org Math : terminology;Internet glossary
-OpenOffice.org Math : testing XML filters
-OpenOffice.org Math : text
-OpenOffice.org Math : text;animating
-OpenOffice.org Math : text;Asian layout
-OpenOffice.org Math : text;backgrounds
-OpenOffice.org Math : text;bold
-OpenOffice.org Math : text;coloring
-OpenOffice.org Math : text;contours
-OpenOffice.org Math : text;copying by drag and drop
-OpenOffice.org Math : text;CTL languages
-OpenOffice.org Math : text;drawing pictures
-OpenOffice.org Math : text;font effects
-OpenOffice.org Math : text;font sizes
-OpenOffice.org Math : text;font styles
-OpenOffice.org Math : text;fonts and formats
-OpenOffice.org Math : text;Fontwork icons
-OpenOffice.org Math : text;hyperlinks
-OpenOffice.org Math : text;inserting special characters
-OpenOffice.org Math : text;italics
-OpenOffice.org Math : text;kerning
-OpenOffice.org Math : text;language selection
-OpenOffice.org Math : text;line spacing
-OpenOffice.org Math : text;overwriting or inserting
-OpenOffice.org Math : text;placeholders in presentations
-OpenOffice.org Math : text;printing in black
-OpenOffice.org Math : text;replacing with format
-OpenOffice.org Math : text;selection modes
-OpenOffice.org Math : text;shadowed
-OpenOffice.org Math : text;text/draw objects
-OpenOffice.org Math : text attributes
-OpenOffice.org Math : text attributes;hyperlinks
-OpenOffice.org Math : text attributes;undoing
-OpenOffice.org Math : text boxes
-OpenOffice.org Math : text boxes;form functions
-OpenOffice.org Math : text boxes;positioning
-OpenOffice.org Math : text breaks in cells
-OpenOffice.org Math : text colors for better accessibility
-OpenOffice.org Math : text databases (Base)
-OpenOffice.org Math : text documents
-OpenOffice.org Math : text documents;creating/opening
-OpenOffice.org Math : text documents;importing/exporting
-OpenOffice.org Math : text documents;inserting spreadsheet cells
-OpenOffice.org Math : text documents;print settings
-OpenOffice.org Math : text documents;printing
-OpenOffice.org Math : text documents;saving
-OpenOffice.org Math : text documents;saving automatically
-OpenOffice.org Math : text documents;saving in other formats
-OpenOffice.org Math : text documents;sending as e-mail
-OpenOffice.org Math : text effects
-OpenOffice.org Math : text flow
-OpenOffice.org Math : text flow;in cells
-OpenOffice.org Math : text formats
-OpenOffice.org Math : text formats;databases
-OpenOffice.org Math : text formats;pasting
-OpenOffice.org Math : text input fields
-OpenOffice.org Math : text layout for special languages
-OpenOffice.org Math : text mode in OpenOffice.org Math
-OpenOffice.org Math : text objects
-OpenOffice.org Math : text objects;alignment
-OpenOffice.org Math : text objects;draw functions
-OpenOffice.org Math : text objects;fonts
-OpenOffice.org Math : text objects;in presentations and drawings
-OpenOffice.org Math : text overflow in spreadsheet cells
-OpenOffice.org Math : text strings
-OpenOffice.org Math : text strings;entering in OpenOffice.org Math
-OpenOffice.org Math : text, see also text documents, paragraphs and characters
-OpenOffice.org Math : TextArt, see Fontwork
-OpenOffice.org Math : textures
-OpenOffice.org Math : textures;inserting from Gallery
-OpenOffice.org Math : textures;on chart bars
-OpenOffice.org Math : Thai
-OpenOffice.org Math : Thai;entering text
-OpenOffice.org Math : Thai;language settings
-OpenOffice.org Math : there exists symbol
-OpenOffice.org Math : thesaurus
-OpenOffice.org Math : thesaurus;activating for a language
-OpenOffice.org Math : ticker text
-OpenOffice.org Math : tilde as attribute
-OpenOffice.org Math : time fields
-OpenOffice.org Math : time fields;form functions
-OpenOffice.org Math : times
-OpenOffice.org Math : times;inserting when printing presentations
-OpenOffice.org Math : times, formats
-OpenOffice.org Math : tips
-OpenOffice.org Math : tips;extended tips in Help
-OpenOffice.org Math : title rows
-OpenOffice.org Math : title rows;printing in OpenOffice.org Math
-OpenOffice.org Math : titles
-OpenOffice.org Math : titles;changing
-OpenOffice.org Math : titles;editing in charts
-OpenOffice.org Math : titles;font effects
-OpenOffice.org Math : titles;formatting automatically
-OpenOffice.org Math : titles;objects
-OpenOffice.org Math : toolbars
-OpenOffice.org Math : toolbars;adding buttons
-OpenOffice.org Math : toolbars;docking/undocking
-OpenOffice.org Math : toolbars;Form Navigation bar
-OpenOffice.org Math : toolbars;viewing/closing
-OpenOffice.org Math : tools bar
-OpenOffice.org Math : tooltips
-OpenOffice.org Math : tooltips;extended tips
-OpenOffice.org Math : tooltips;help
-OpenOffice.org Math : toward relation
-OpenOffice.org Math : Track changes feature in Microsoft Office
-OpenOffice.org Math : traditional Chinese
-OpenOffice.org Math : traditional Chinese;translating to simplified chinese
-OpenOffice.org Math : transparency
-OpenOffice.org Math : transparency;areas
-OpenOffice.org Math : transparency;off for faster printing
-OpenOffice.org Math : transparency;saving
-OpenOffice.org Math : transparent character as attribute
-OpenOffice.org Math : tree view of Help
-OpenOffice.org Math : trigonometrical functions
-OpenOffice.org Math : triple dot attribute
-OpenOffice.org Math : typefaces
-OpenOffice.org Math : typefaces;adding under UNIX
-OpenOffice.org Math : typefaces;formats
-OpenOffice.org Math : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Math : typography
-OpenOffice.org Math : typography;Asian
-OpenOffice.org Math : unary operators
-OpenOffice.org Math : unary operators;list of
-OpenOffice.org Math : unary operators
-OpenOffice.org Math : underline attribute
-OpenOffice.org Math : underlining
-OpenOffice.org Math : underlining;AutoFormat function
-OpenOffice.org Math : underlining;characters
-OpenOffice.org Math : underlining;text
-OpenOffice.org Math : undocking windows
-OpenOffice.org Math : undoing
-OpenOffice.org Math : undoing;direct formatting
-OpenOffice.org Math : undoing;editing
-OpenOffice.org Math : undoing;number of steps
-OpenOffice.org Math : unequal sign
-OpenOffice.org Math : ungrouping groups
-OpenOffice.org Math : union of sets
-OpenOffice.org Math : units
-OpenOffice.org Math : units;converting
-OpenOffice.org Math : units;measurement units
-OpenOffice.org Math : universal quantifier symbol
-OpenOffice.org Math : UNO components
-OpenOffice.org Math : UNO components;Extension Manager
-OpenOffice.org Math : UNO components;integrating new
-OpenOffice.org Math : up arrow symbol
-OpenOffice.org Math : update options
-OpenOffice.org Math : updates
-OpenOffice.org Math : updates;checking automatically
-OpenOffice.org Math : updates;checking manually
-OpenOffice.org Math : updating
-OpenOffice.org Math : updating;fields and charts, automatically (Writer)
-OpenOffice.org Math : updating;links in text documents
-OpenOffice.org Math : updating;links, on opening
-OpenOffice.org Math : updating;templates
-OpenOffice.org Math : upper limits
-OpenOffice.org Math : URL
-OpenOffice.org Math : URL;changing hyperlink URLs
-OpenOffice.org Math : URL;definition
-OpenOffice.org Math : URL;saving absolute/relative paths
-OpenOffice.org Math : URL;turning off URL recognition
-OpenOffice.org Math : user data
-OpenOffice.org Math : user data;input
-OpenOffice.org Math : user data;removing when saving
-OpenOffice.org Math : user-defined dictionaries
-OpenOffice.org Math : user-defined dictionaries;creating
-OpenOffice.org Math : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Math : user-defined dictionaries;editing
-OpenOffice.org Math : user-defined operators
-OpenOffice.org Math : user-defined operators;general
-OpenOffice.org Math : user-defined operators;unary and binary
-OpenOffice.org Math : user-defined styles
-OpenOffice.org Math : user-defined styles;automatically replacing
-OpenOffice.org Math : UTF-8/UCS2 support
-OpenOffice.org Math : Validation feature in Microsoft Office
-OpenOffice.org Math : values
-OpenOffice.org Math : values;absolute
-OpenOffice.org Math : values;rounded as shown (Calc)
-OpenOffice.org Math : variables
-OpenOffice.org Math : variables;for paths
-OpenOffice.org Math : variables;with right exponents
-OpenOffice.org Math : VBA code
-OpenOffice.org Math : VBA code;loading/saving documents with VBA code
-OpenOffice.org Math : vector arrows as attributes
-OpenOffice.org Math : version management
-OpenOffice.org Math : version numbers of documents
-OpenOffice.org Math : versions
-OpenOffice.org Math : versions;comparing documents
-OpenOffice.org Math : versions;file saving as, restriction
-OpenOffice.org Math : versions;merging document versions
-OpenOffice.org Math : versions;of a document
-OpenOffice.org Math : versions;OpenOffice.org
-OpenOffice.org Math : vertical arrangement of elements
-OpenOffice.org Math : vertical bars
-OpenOffice.org Math : vertical callouts
-OpenOffice.org Math : vertical dots symbol
-OpenOffice.org Math : vertical elements
-OpenOffice.org Math : vertical scrollbars (Writer)
-OpenOffice.org Math : vertical text boxes
-OpenOffice.org Math : videos
-OpenOffice.org Math : viewing
-OpenOffice.org Math : viewing;databases
-OpenOffice.org Math : viewing;file properties
-OpenOffice.org Math : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Math : viewing;toolbars
-OpenOffice.org Math : views
-OpenOffice.org Math : views;creating database views (Base)
-OpenOffice.org Math : views;defaults
-OpenOffice.org Math : views;full screen
-OpenOffice.org Math : views;icons
-OpenOffice.org Math : views;in 3D
-OpenOffice.org Math : views;maximum size
-OpenOffice.org Math : views;scaling
-OpenOffice.org Math : views;zooming out OpenOffice.org Math
-OpenOffice.org Math : Visual Basic for Applications
-OpenOffice.org Math : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Math : watermarks
-OpenOffice.org Math : web documents
-OpenOffice.org Math : web documents;XForms
-OpenOffice.org Math : Web support
-OpenOffice.org Math : WebCast export
-OpenOffice.org Math : weierstrass p symbol
-OpenOffice.org Math : whole numbers
-OpenOffice.org Math : wide circumflex attribute
-OpenOffice.org Math : wide tilde attribute
-OpenOffice.org Math : wide vector arrow attribute
-OpenOffice.org Math : widowed brackets
-OpenOffice.org Math : windows
-OpenOffice.org Math : windows;docking
-OpenOffice.org Math : windows;docking definition
-OpenOffice.org Math : windows;hiding/showing/docking
-OpenOffice.org Math : windows;new
-OpenOffice.org Math : wizards
-OpenOffice.org Math : wizards;agendas
-OpenOffice.org Math : wizards;database queries
-OpenOffice.org Math : wizards;database tables (Base)
-OpenOffice.org Math : wizards;databases (Base)
-OpenOffice.org Math : wizards;document converter
-OpenOffice.org Math : wizards;Euro Converter
-OpenOffice.org Math : wizards;faxes
-OpenOffice.org Math : wizards;forms
-OpenOffice.org Math : wizards;letters
-OpenOffice.org Math : wizards;overview
-OpenOffice.org Math : wizards;presentations
-OpenOffice.org Math : wizards;reports
-OpenOffice.org Math : Word documents
-OpenOffice.org Math : Word documents;compatibility
-OpenOffice.org Math : Word documents;saving as
-OpenOffice.org Math : WordArt, see Fontwork
-OpenOffice.org Math : words
-OpenOffice.org Math : words;automatically replacing
-OpenOffice.org Math : words;wrapping in cells
-OpenOffice.org Math : work directory change
-OpenOffice.org Math : Workbook feature in Microsoft Office
-OpenOffice.org Math : Worksheet feature in Microsoft Office
-OpenOffice.org Math : wrapping text
-OpenOffice.org Math : wrapping text;in cells
-OpenOffice.org Math : wrapping text;in formulas
-OpenOffice.org Math : write protection on/off
-OpenOffice.org Math : writing aids options
-OpenOffice.org Math : WYSIWYG in fonts lists
-OpenOffice.org Math : XForms
-OpenOffice.org Math : XML converters
-OpenOffice.org Math : XML file formats
-OpenOffice.org Math : XML filters
-OpenOffice.org Math : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Math : XML filters;settings
-OpenOffice.org Math : XML Forms
-OpenOffice.org Math : XSLT based filters
-OpenOffice.org Math : XSLT based filters;settings
-OpenOffice.org Math : XSLT filters, see also XML filters
-OpenOffice.org Math : years
-OpenOffice.org Math : years;2-digit options
-OpenOffice.org Math : zero values
-OpenOffice.org Math : zero values;displaying (Calc)
-OpenOffice.org Math : zooming
-OpenOffice.org Math : zooming;page views
-OpenOffice.org Math : zooming;pictures
-OpenOffice.org Math : zooming;status bar
-OpenOffice.org Math : zooming in on formula display
-OpenOffice.org Math : zooming out on formula display
-OpenOffice.org Writer : 1/2 replacement
-OpenOffice.org Writer : 3D charts
-OpenOffice.org Writer : 3D text creation
-OpenOffice.org Writer : 3D view
-OpenOffice.org Writer : abbreviation replacement
-OpenOffice.org Writer : abbreviations
-OpenOffice.org Writer : absolute hyperlinks
-OpenOffice.org Writer : absolute saving of URLs
-OpenOffice.org Writer : accents
-OpenOffice.org Writer : Access databases (base)
-OpenOffice.org Writer : access rights for database tables (Base)
-OpenOffice.org Writer : accessibility
-OpenOffice.org Writer : accessibility;general shortcuts
-OpenOffice.org Writer : accessibility;OpenOffice.org assistive technology
-OpenOffice.org Writer : accessibility;OpenOffice.org features
-OpenOffice.org Writer : accessibility;OpenOffice.org Writer
-OpenOffice.org Writer : accessibility;options
-OpenOffice.org Writer : activating
-OpenOffice.org Writer : activating;context menus
-OpenOffice.org Writer : activating;Error Report Tool
-OpenOffice.org Writer : activating;extended help tips
-OpenOffice.org Writer : activating;plug-ins
-OpenOffice.org Writer : ActiveX control
-OpenOffice.org Writer : Adabas D databases (base)
-OpenOffice.org Writer : add-ons, see UNO components
-OpenOffice.org Writer : adding
-OpenOffice.org Writer : adding;automatic captions (Writer)
-OpenOffice.org Writer : adding;backgrounds
-OpenOffice.org Writer : adding;bullets
-OpenOffice.org Writer : adding;buttons in toolbars
-OpenOffice.org Writer : adding;captions
-OpenOffice.org Writer : adding;chapter numbers in captions
-OpenOffice.org Writer : adding;conditions for XForm items
-OpenOffice.org Writer : adding;draw objects
-OpenOffice.org Writer : adding;Fontwork objects
-OpenOffice.org Writer : adding;hyperlinks
-OpenOffice.org Writer : adding;input fields
-OpenOffice.org Writer : adding;items in Data Navigator
-OpenOffice.org Writer : adding;line numbers
-OpenOffice.org Writer : adding;namespaces in XForms
-OpenOffice.org Writer : adding;numbering
-OpenOffice.org Writer : adding;object borders
-OpenOffice.org Writer : adding;page borders
-OpenOffice.org Writer : adding;paragraph borders
-OpenOffice.org Writer : adding;pictures from Gallery
-OpenOffice.org Writer : adding;pictures in Gallery
-OpenOffice.org Writer : adding;plug-ins
-OpenOffice.org Writer : adding;push buttons
-OpenOffice.org Writer : adding;rows/columns, by keyboard
-OpenOffice.org Writer : adding;table borders
-OpenOffice.org Writer : adding;textures on chart bars
-OpenOffice.org Writer : additional selection mode
-OpenOffice.org Writer : address books
-OpenOffice.org Writer : address books;exchanging
-OpenOffice.org Writer : address books;LDAP server (Base)
-OpenOffice.org Writer : address books;registering
-OpenOffice.org Writer : address labels from databases
-OpenOffice.org Writer : adjusting page margins and cell widths
-OpenOffice.org Writer : ADO databases (Base)
-OpenOffice.org Writer : Agenda Wizard
-OpenOffice.org Writer : aging filter
-OpenOffice.org Writer : aligning
-OpenOffice.org Writer : aligning;2D charts
-OpenOffice.org Writer : aligning;cells
-OpenOffice.org Writer : aligning;objects
-OpenOffice.org Writer : aligning;paragraphs
-OpenOffice.org Writer : aligning;tables in text
-OpenOffice.org Writer : aligning;text objects
-OpenOffice.org Writer : aligning;titles in charts
-OpenOffice.org Writer : alphabetical indexes
-OpenOffice.org Writer : alternative fonts
-OpenOffice.org Writer : ampersand symbol, see also operators
-OpenOffice.org Writer : anchors
-OpenOffice.org Writer : anchors;changing
-OpenOffice.org Writer : anchors;displaying (Calc)
-OpenOffice.org Writer : anchors;options
-OpenOffice.org Writer : anchors;types/positions for draw objects
-OpenOffice.org Writer : animations
-OpenOffice.org Writer : animations;accessibility options
-OpenOffice.org Writer : animations;text
-OpenOffice.org Writer : appearance options
-OpenOffice.org Writer : applet insertion
-OpenOffice.org Writer : applying
-OpenOffice.org Writer : applying;languages, to selected text
-OpenOffice.org Writer : applying;numbering styles
-OpenOffice.org Writer : applying;numbering/bullets
-OpenOffice.org Writer : applying;page styles
-OpenOffice.org Writer : applying;styles
-OpenOffice.org Writer : Arabic
-OpenOffice.org Writer : Arabic;entering text
-OpenOffice.org Writer : Arabic;language settings
-OpenOffice.org Writer : area charts
-OpenOffice.org Writer : areas
-OpenOffice.org Writer : areas;bitmap patterns
-OpenOffice.org Writer : areas;hatched/dotted
-OpenOffice.org Writer : areas;shadows
-OpenOffice.org Writer : areas;slanting
-OpenOffice.org Writer : areas;styles
-OpenOffice.org Writer : areas;transparency
-OpenOffice.org Writer : arguments in command line
-OpenOffice.org Writer : arithmetical operators in formulas
-OpenOffice.org Writer : arranging
-OpenOffice.org Writer : arranging;headings
-OpenOffice.org Writer : arranging;objects
-OpenOffice.org Writer : arrows
-OpenOffice.org Writer : arrows;defining arrow heads
-OpenOffice.org Writer : arrows;defining arrow lines
-OpenOffice.org Writer : arrows;drawing in text
-OpenOffice.org Writer : ASCII
-OpenOffice.org Writer : ASCII;definition
-OpenOffice.org Writer : Asian languages
-OpenOffice.org Writer : Asian languages;enabling
-OpenOffice.org Writer : Asian languages;search options
-OpenOffice.org Writer : Asian languages;sorting paragraphs/table rows
-OpenOffice.org Writer : Asian Phonetic Guide
-OpenOffice.org Writer : Asian typography
-OpenOffice.org Writer : aspect ratio
-OpenOffice.org Writer : aspect ratio;resizing objects
-OpenOffice.org Writer : assigning scripts
-OpenOffice.org Writer : assistive technology in OpenOffice.org
-OpenOffice.org Writer : attaching toolbars
-OpenOffice.org Writer : attachments in e-mails
-OpenOffice.org Writer : audio
-OpenOffice.org Writer : audio;inserting
-OpenOffice.org Writer : audio;UNIX
-OpenOffice.org Writer : auto reloading HTML documents
-OpenOffice.org Writer : AutoAbstract function for sending text to presentations
-OpenOffice.org Writer : AutoCaption function in OpenOffice.org Writer
-OpenOffice.org Writer : AutoComplete function in text and list boxes
-OpenOffice.org Writer : AutoCorrect function
-OpenOffice.org Writer : AutoCorrect function;adding exceptions
-OpenOffice.org Writer : AutoCorrect function;context menu
-OpenOffice.org Writer : AutoCorrect function;options
-OpenOffice.org Writer : AutoCorrect function;pictures and frames
-OpenOffice.org Writer : AutoCorrect function;quotes
-OpenOffice.org Writer : AutoCorrect function;replacement table
-OpenOffice.org Writer : AutoCorrect function;smart tags
-OpenOffice.org Writer : AutoCorrect function;switching on and off in Calc
-OpenOffice.org Writer : AutoCorrect function;turning off
-OpenOffice.org Writer : AutoCorrect function;URL recognition
-OpenOffice.org Writer : AutoCorrect function;word completion
-OpenOffice.org Writer : AutoFormat function
-OpenOffice.org Writer : AutoFormat function;applying to text tables
-OpenOffice.org Writer : AutoFormat function;headings
-OpenOffice.org Writer : AutoFormat function;switching on and off
-OpenOffice.org Writer : AutoFormat function;text documents
-OpenOffice.org Writer : automatic bullets
-OpenOffice.org Writer : automatic captions (Writer)
-OpenOffice.org Writer : automatic changes on/off
-OpenOffice.org Writer : automatic control focus
-OpenOffice.org Writer : automatic heading formatting
-OpenOffice.org Writer : automatic hyperlink formatting
-OpenOffice.org Writer : automatic hyphenation in text
-OpenOffice.org Writer : automatic line breaks
-OpenOffice.org Writer : automatic lines/borders in text
-OpenOffice.org Writer : automatic numbering
-OpenOffice.org Writer : automatic numbering;AutoCorrect function
-OpenOffice.org Writer : automatic numbering;of objects
-OpenOffice.org Writer : automatic saving
-OpenOffice.org Writer : automatic spellcheck
-OpenOffice.org Writer : automatic word completion
-OpenOffice.org Writer : AutoPilots, see wizards
-OpenOffice.org Writer : AutoShapes feature in Microsoft Office
-OpenOffice.org Writer : AutoText
-OpenOffice.org Writer : averages in charts
-OpenOffice.org Writer : axes
-OpenOffice.org Writer : axes;better scaling
-OpenOffice.org Writer : axes;formatting
-OpenOffice.org Writer : axes;formatting grids
-OpenOffice.org Writer : axes;inserting grids
-OpenOffice.org Writer : axes;interval marks
-OpenOffice.org Writer : axes;showing axes in charts
-OpenOffice.org Writer : axes in charts
-OpenOffice.org Writer : backgrounds
-OpenOffice.org Writer : backgrounds;defining colors/pictures
-OpenOffice.org Writer : backgrounds;different pages
-OpenOffice.org Writer : backgrounds;frames/sections/indexes
-OpenOffice.org Writer : backgrounds;inserting from Gallery
-OpenOffice.org Writer : backgrounds;printing
-OpenOffice.org Writer : backing window
-OpenOffice.org Writer : backups
-OpenOffice.org Writer : backups;automatic
-OpenOffice.org Writer : backups;documents
-OpenOffice.org Writer : bar charts
-OpenOffice.org Writer : Basic
-OpenOffice.org Writer : Basic;fonts for source display
-OpenOffice.org Writer : Basic;programming
-OpenOffice.org Writer : Basic;recording macros
-OpenOffice.org Writer : Basic;scripting
-OpenOffice.org Writer : basic fonts
-OpenOffice.org Writer : BeanShell scripting
-OpenOffice.org Writer : behavior of rows/columns
-OpenOffice.org Writer : Bézier curves
-OpenOffice.org Writer : Bézier curves;control points in presentations
-OpenOffice.org Writer : bi-directional writing
-OpenOffice.org Writer : bibliographies
-OpenOffice.org Writer : binding space
-OpenOffice.org Writer : bitmaps
-OpenOffice.org Writer : bitmaps;inserting and editing
-OpenOffice.org Writer : bitmaps;off for faster printing
-OpenOffice.org Writer : bitmaps;patterns
-OpenOffice.org Writer : black and white printing
-OpenOffice.org Writer : black printing in Calc
-OpenOffice.org Writer : blank pages with alternating page styles
-OpenOffice.org Writer : block selection mode
-OpenOffice.org Writer : blocks of text
-OpenOffice.org Writer : bold
-OpenOffice.org Writer : bold;AutoFormat function
-OpenOffice.org Writer : bold;formatting while typing
-OpenOffice.org Writer : bold;text
-OpenOffice.org Writer : book previews
-OpenOffice.org Writer : book view
-OpenOffice.org Writer : booklet printing
-OpenOffice.org Writer : bookmarks
-OpenOffice.org Writer : bookmarks;Help
-OpenOffice.org Writer : bookmarks;master documents
-OpenOffice.org Writer : bookmarks;positioning cursor
-OpenOffice.org Writer : borders
-OpenOffice.org Writer : borders;arranging
-OpenOffice.org Writer : borders;automatic drawing on/off
-OpenOffice.org Writer : borders;cells on screen (Calc)
-OpenOffice.org Writer : borders;for footnotes/endnotes
-OpenOffice.org Writer : borders;for headers/footers
-OpenOffice.org Writer : borders;for objects
-OpenOffice.org Writer : borders;for pages
-OpenOffice.org Writer : borders;for paragraphs
-OpenOffice.org Writer : borders;for tables
-OpenOffice.org Writer : borders;for text tables
-OpenOffice.org Writer : borders;shadows
-OpenOffice.org Writer : borders;table boundaries (Writer)
-OpenOffice.org Writer : borders, see also frames
-OpenOffice.org Writer : bound fields
-OpenOffice.org Writer : bound fields;controls
-OpenOffice.org Writer : boundaries of tables (Writer)
-OpenOffice.org Writer : break display (Writer)
-OpenOffice.org Writer : brochures
-OpenOffice.org Writer : brochures;printing individual
-OpenOffice.org Writer : brochures;printing several
-OpenOffice.org Writer : brush for copying styles
-OpenOffice.org Writer : build numbers of OpenOffice.org
-OpenOffice.org Writer : bullet lists
-OpenOffice.org Writer : bullet lists;changing levels
-OpenOffice.org Writer : bullet lists;creating while typing
-OpenOffice.org Writer : bullet lists;formatting options
-OpenOffice.org Writer : bullet lists;interrupting
-OpenOffice.org Writer : bullet lists;turning on and off
-OpenOffice.org Writer : bullets
-OpenOffice.org Writer : bullets;adding and editing
-OpenOffice.org Writer : bullets;paragraphs
-OpenOffice.org Writer : bullets;replacing
-OpenOffice.org Writer : bullets;turning off
-OpenOffice.org Writer : bullets;using automatically
-OpenOffice.org Writer : business cards
-OpenOffice.org Writer : business cards;creating and synchronizing
-OpenOffice.org Writer : business cards;using templates
-OpenOffice.org Writer : button bars, see toolbars
-OpenOffice.org Writer : buttons
-OpenOffice.org Writer : buttons;adding push buttons
-OpenOffice.org Writer : buttons;big/small
-OpenOffice.org Writer : buttons;editing hyperlink buttons
-OpenOffice.org Writer : buttons;form functions
-OpenOffice.org Writer : buttons;toolbars
-OpenOffice.org Writer : cache for graphics
-OpenOffice.org Writer : calculating
-OpenOffice.org Writer : calculating;across multiple text tables
-OpenOffice.org Writer : calculating;complex formulas in text
-OpenOffice.org Writer : calculating;in text
-OpenOffice.org Writer : calculating;in text tables
-OpenOffice.org Writer : calculating;iterative references (Calc)
-OpenOffice.org Writer : calculating;mean values
-OpenOffice.org Writer : calculating;regression curves
-OpenOffice.org Writer : calculating;sums in text tables
-OpenOffice.org Writer : callouts
-OpenOffice.org Writer : callouts;drawings
-OpenOffice.org Writer : capital letters
-OpenOffice.org Writer : capital letters;AutoCorrect function
-OpenOffice.org Writer : capital letters;avoiding after specific abbreviations
-OpenOffice.org Writer : capital letters;changing to small letters
-OpenOffice.org Writer : capital letters;changing to small letters after periods
-OpenOffice.org Writer : capital letters;font effects
-OpenOffice.org Writer : capital letters;starting paragraphs
-OpenOffice.org Writer : captions
-OpenOffice.org Writer : captions;adding chapter numbers
-OpenOffice.org Writer : captions;automatic captions (Writer)
-OpenOffice.org Writer : captions;inserting and editing
-OpenOffice.org Writer : captions;tables/pictures/frames/OLE objects (Writer)
-OpenOffice.org Writer : captions, see also labels/callouts
-OpenOffice.org Writer : cascading update (Base)
-OpenOffice.org Writer : case sensitivity
-OpenOffice.org Writer : case sensitivity;comparing cell contents (Calc)
-OpenOffice.org Writer : case sensitivity;searching
-OpenOffice.org Writer : cell merges
-OpenOffice.org Writer : cells
-OpenOffice.org Writer : cells;adapting the width by keyboard
-OpenOffice.org Writer : cells;aligning
-OpenOffice.org Writer : cells;backgrounds
-OpenOffice.org Writer : cells;borders in text tables
-OpenOffice.org Writer : cells;calculating sums
-OpenOffice.org Writer : cells;coloring (Calc)
-OpenOffice.org Writer : cells;cursor positions after input (Calc)
-OpenOffice.org Writer : cells;enlarging and reducing in text tables
-OpenOffice.org Writer : cells;formatting without effect (Calc)
-OpenOffice.org Writer : cells;inserting from spreadsheets
-OpenOffice.org Writer : cells;line breaks
-OpenOffice.org Writer : cells;linked to controls
-OpenOffice.org Writer : cells;merging/splitting
-OpenOffice.org Writer : cells;number formats
-OpenOffice.org Writer : cells;number of
-OpenOffice.org Writer : cells;pasting
-OpenOffice.org Writer : cells;resetting formats
-OpenOffice.org Writer : cells;showing grid lines (Calc)
-OpenOffice.org Writer : centered text
-OpenOffice.org Writer : centering
-OpenOffice.org Writer : centering;images on HTML pages
-OpenOffice.org Writer : centering;text frames on pages
-OpenOffice.org Writer : centimeters
-OpenOffice.org Writer : central documents
-OpenOffice.org Writer : certificates
-OpenOffice.org Writer : Change Case feature in Microsoft Office
-OpenOffice.org Writer : changes
-OpenOffice.org Writer : changes;accepting or rejecting
-OpenOffice.org Writer : changes;automatic
-OpenOffice.org Writer : changes;comparing to original
-OpenOffice.org Writer : changes;protecting
-OpenOffice.org Writer : changes;recording
-OpenOffice.org Writer : changes;review function
-OpenOffice.org Writer : changes;showing
-OpenOffice.org Writer : changing
-OpenOffice.org Writer : changing;bulleting symbols
-OpenOffice.org Writer : changing;cases of text
-OpenOffice.org Writer : changing;data binding of XForms
-OpenOffice.org Writer : changing;default templates
-OpenOffice.org Writer : changing;document titles
-OpenOffice.org Writer : changing;field shadings
-OpenOffice.org Writer : changing;fields, into text
-OpenOffice.org Writer : changing;file associations in Setup program
-OpenOffice.org Writer : changing;hyperlink text/formats/URLs
-OpenOffice.org Writer : changing;icon sizes
-OpenOffice.org Writer : changing;indents
-OpenOffice.org Writer : changing;keyboard
-OpenOffice.org Writer : changing;links
-OpenOffice.org Writer : changing;menus
-OpenOffice.org Writer : changing;object sizes
-OpenOffice.org Writer : changing;outline levels
-OpenOffice.org Writer : changing;page backgrounds
-OpenOffice.org Writer : changing;size of text frames
-OpenOffice.org Writer : changing;starting numbers in lists
-OpenOffice.org Writer : changing;toolbars
-OpenOffice.org Writer : changing;work directory
-OpenOffice.org Writer : changing, see also editing and replacing
-OpenOffice.org Writer : chapter names in headers
-OpenOffice.org Writer : chapter numbering
-OpenOffice.org Writer : chapter numbers in captions
-OpenOffice.org Writer : character styles
-OpenOffice.org Writer : character styles;language selection
-OpenOffice.org Writer : character styles;style categories
-OpenOffice.org Writer : characters
-OpenOffice.org Writer : characters;alternative fonts
-OpenOffice.org Writer : characters;Asian layout
-OpenOffice.org Writer : characters;bold
-OpenOffice.org Writer : characters;coloring
-OpenOffice.org Writer : characters;contours
-OpenOffice.org Writer : characters;counting
-OpenOffice.org Writer : characters;displaying only on screen (Writer)
-OpenOffice.org Writer : characters;enabling CTL and Asian characters
-OpenOffice.org Writer : characters;font effects
-OpenOffice.org Writer : characters;fonts and formats
-OpenOffice.org Writer : characters;hyperlinks
-OpenOffice.org Writer : characters;italics
-OpenOffice.org Writer : characters;language selection
-OpenOffice.org Writer : characters;shadowed
-OpenOffice.org Writer : characters;spacing
-OpenOffice.org Writer : characters;special
-OpenOffice.org Writer : characters;subscript and superscript
-OpenOffice.org Writer : characters;underlining
-OpenOffice.org Writer : characters;uppercase or lowercase
-OpenOffice.org Writer : charcoal sketches filter
-OpenOffice.org Writer : chart legends
-OpenOffice.org Writer : chart legends;hiding
-OpenOffice.org Writer : chart legends;showing icons with labels
-OpenOffice.org Writer : chart types
-OpenOffice.org Writer : chart types;area
-OpenOffice.org Writer : chart types;column and bar
-OpenOffice.org Writer : chart types;column and line
-OpenOffice.org Writer : chart types;line
-OpenOffice.org Writer : chart types;net
-OpenOffice.org Writer : chart types;pie/donut
-OpenOffice.org Writer : chart types;stock
-OpenOffice.org Writer : chart types;XY (scatter)
-OpenOffice.org Writer : charts
-OpenOffice.org Writer : charts;3D views
-OpenOffice.org Writer : charts;aligning
-OpenOffice.org Writer : charts;arranging within stacks
-OpenOffice.org Writer : charts;bars with textures
-OpenOffice.org Writer : charts;borders
-OpenOffice.org Writer : charts;choosing chart types
-OpenOffice.org Writer : charts;colors
-OpenOffice.org Writer : charts;copying from Calc into Writer
-OpenOffice.org Writer : charts;copying with link to source cell range
-OpenOffice.org Writer : charts;data labels
-OpenOffice.org Writer : charts;displaying (Calc)
-OpenOffice.org Writer : charts;editing axes
-OpenOffice.org Writer : charts;editing data
-OpenOffice.org Writer : charts;editing legends
-OpenOffice.org Writer : charts;editing titles
-OpenOffice.org Writer : charts;formatting areas
-OpenOffice.org Writer : charts;formatting floors
-OpenOffice.org Writer : charts;formatting walls
-OpenOffice.org Writer : charts;inserting
-OpenOffice.org Writer : charts;labeling
-OpenOffice.org Writer : charts;overview
-OpenOffice.org Writer : charts;properties
-OpenOffice.org Writer : charts;reorganizing
-OpenOffice.org Writer : charts;scaling axes
-OpenOffice.org Writer : charts;scaling text
-OpenOffice.org Writer : charts;shortcuts
-OpenOffice.org Writer : charts;showing axes
-OpenOffice.org Writer : charts;updating automatically (Writer)
-OpenOffice.org Writer : check box creation
-OpenOffice.org Writer : checking spelling
-OpenOffice.org Writer : checking spelling;all languages
-OpenOffice.org Writer : checking spelling;manually
-OpenOffice.org Writer : checking spelling;while typing
-OpenOffice.org Writer : Chinese writing systems
-OpenOffice.org Writer : choosing printers
-OpenOffice.org Writer : circle drawings
-OpenOffice.org Writer : Client Side ImageMap
-OpenOffice.org Writer : clipboard
-OpenOffice.org Writer : clipboard;calculating in text
-OpenOffice.org Writer : clipboard;cutting
-OpenOffice.org Writer : clipboard;pasting
-OpenOffice.org Writer : clipboard;pasting formatted/unformatted text
-OpenOffice.org Writer : clipboard;selection clipboard
-OpenOffice.org Writer : clipboard;Unix
-OpenOffice.org Writer : closing
-OpenOffice.org Writer : closing;documents
-OpenOffice.org Writer : closing;toolbars
-OpenOffice.org Writer : color bar
-OpenOffice.org Writer : colors
-OpenOffice.org Writer : colors;adding
-OpenOffice.org Writer : colors;appearance
-OpenOffice.org Writer : colors;backgrounds
-OpenOffice.org Writer : colors;charts
-OpenOffice.org Writer : colors;fill format
-OpenOffice.org Writer : colors;fonts
-OpenOffice.org Writer : colors;grid lines and cells (Calc)
-OpenOffice.org Writer : colors;models
-OpenOffice.org Writer : colors;not printing
-OpenOffice.org Writer : colors;printing in grayscale
-OpenOffice.org Writer : colors;restriction (Calc)
-OpenOffice.org Writer : colors;selection
-OpenOffice.org Writer : column and line charts
-OpenOffice.org Writer : column charts
-OpenOffice.org Writer : column headers
-OpenOffice.org Writer : column headers;displaying (Calc)
-OpenOffice.org Writer : column headers;highlighting (Calc)
-OpenOffice.org Writer : columns
-OpenOffice.org Writer : columns;breaks in text tables
-OpenOffice.org Writer : columns;inserting in tables
-OpenOffice.org Writer : columns;inserting/deleting in tables by keyboard
-OpenOffice.org Writer : columns;on text pages
-OpenOffice.org Writer : columns;selecting
-OpenOffice.org Writer : columns;setting with the mouse
-OpenOffice.org Writer : combination charts
-OpenOffice.org Writer : combo box creation
-OpenOffice.org Writer : command button creation
-OpenOffice.org Writer : command buttons, see push buttons
-OpenOffice.org Writer : command line parameters
-OpenOffice.org Writer : commands
-OpenOffice.org Writer : commands;not visible
-OpenOffice.org Writer : commands;SQL
-OpenOffice.org Writer : comments
-OpenOffice.org Writer : comments;on changes
-OpenOffice.org Writer : comments feature in Microsoft Office
-OpenOffice.org Writer : common terms
-OpenOffice.org Writer : common terms;Chinese dictionary
-OpenOffice.org Writer : common terms;glossaries
-OpenOffice.org Writer : common terms;Internet glossary
-OpenOffice.org Writer : Compare and Merge feature in Microsoft Office
-OpenOffice.org Writer : comparisons
-OpenOffice.org Writer : comparisons;document versions
-OpenOffice.org Writer : comparisons;hidden text fields
-OpenOffice.org Writer : comparisons;operators in default filter dialog
-OpenOffice.org Writer : compatibility settings for MS Word import
-OpenOffice.org Writer : complete screen view
-OpenOffice.org Writer : completion of words
-OpenOffice.org Writer : complex text layout
-OpenOffice.org Writer : complex text layout;definition
-OpenOffice.org Writer : complex text layout;enabling
-OpenOffice.org Writer : compose key to insert special characters
-OpenOffice.org Writer : concatenation, see ampersand symbol
-OpenOffice.org Writer : concordance files
-OpenOffice.org Writer : concordance files;definition
-OpenOffice.org Writer : concordance files;indexes
-OpenOffice.org Writer : conditional separators
-OpenOffice.org Writer : conditional styles
-OpenOffice.org Writer : conditional text
-OpenOffice.org Writer : conditional text;page counts
-OpenOffice.org Writer : conditional text;setting up
-OpenOffice.org Writer : conditions
-OpenOffice.org Writer : conditions;in fields and sections
-OpenOffice.org Writer : conditions;in number formats
-OpenOffice.org Writer : conditions;items in Data Navigator
-OpenOffice.org Writer : conditions;user data fields
-OpenOffice.org Writer : Configuration Manager
-OpenOffice.org Writer : configuring
-OpenOffice.org Writer : configuring;fax icon
-OpenOffice.org Writer : configuring;OpenOffice.org
-OpenOffice.org Writer : configuring;toolbars
-OpenOffice.org Writer : connections to data sources (Base)
-OpenOffice.org Writer : contents protection
-OpenOffice.org Writer : context menus
-OpenOffice.org Writer : continuation pages
-OpenOffice.org Writer : contour editor
-OpenOffice.org Writer : contour wrap
-OpenOffice.org Writer : contours of text
-OpenOffice.org Writer : control point display in presentations
-OpenOffice.org Writer : controls
-OpenOffice.org Writer : controls;activating in forms
-OpenOffice.org Writer : controls;adding to documents
-OpenOffice.org Writer : controls;arranging in forms
-OpenOffice.org Writer : controls;arranging within stacks
-OpenOffice.org Writer : controls;assigning data sources
-OpenOffice.org Writer : controls;bound fields/list contents/linked cells
-OpenOffice.org Writer : controls;events
-OpenOffice.org Writer : controls;focus
-OpenOffice.org Writer : controls;formatted fields
-OpenOffice.org Writer : controls;grouping
-OpenOffice.org Writer : controls;hidden
-OpenOffice.org Writer : controls;inserting
-OpenOffice.org Writer : controls;multi-line titles
-OpenOffice.org Writer : controls;positions and sizes
-OpenOffice.org Writer : controls;printing
-OpenOffice.org Writer : controls;properties of form controls
-OpenOffice.org Writer : controls;properties of table controls
-OpenOffice.org Writer : controls;reference by SQL
-OpenOffice.org Writer : controls;rich text control
-OpenOffice.org Writer : controls;select mode
-OpenOffice.org Writer : controls;showing (Writer)
-OpenOffice.org Writer : converters
-OpenOffice.org Writer : converters;Euro converter
-OpenOffice.org Writer : converters;PostScript, UNIX
-OpenOffice.org Writer : converters;XML
-OpenOffice.org Writer : converting
-OpenOffice.org Writer : converting;fields, into text
-OpenOffice.org Writer : converting;Hangul/Hanja
-OpenOffice.org Writer : converting;metrics
-OpenOffice.org Writer : converting;Microsoft documents
-OpenOffice.org Writer : converting;OpenOffice.org documents
-OpenOffice.org Writer : converting;Pocket PC formats
-OpenOffice.org Writer : converting;sections, into normal text
-OpenOffice.org Writer : converting;text, into tables
-OpenOffice.org Writer : copies
-OpenOffice.org Writer : copies;printing
-OpenOffice.org Writer : copies;removing line breaks
-OpenOffice.org Writer : copying
-OpenOffice.org Writer : copying;by drag and drop
-OpenOffice.org Writer : copying;charts from OpenOffice.org Calc
-OpenOffice.org Writer : copying;data from text documents
-OpenOffice.org Writer : copying;datasource records in spreadsheets
-OpenOffice.org Writer : copying;draw objects
-OpenOffice.org Writer : copying;draw objects between documents
-OpenOffice.org Writer : copying;formatting
-OpenOffice.org Writer : copying;from data source view
-OpenOffice.org Writer : copying;from Gallery
-OpenOffice.org Writer : copying;in Unix
-OpenOffice.org Writer : copying;pictures, between documents
-OpenOffice.org Writer : copying;sheet areas, to text documents
-OpenOffice.org Writer : copying;styles, by fill format mode
-OpenOffice.org Writer : copying;styles, from selections
-OpenOffice.org Writer : copying;text sections
-OpenOffice.org Writer : copying;to Gallery
-OpenOffice.org Writer : copyright for OpenOffice.org
-OpenOffice.org Writer : corner roundings
-OpenOffice.org Writer : counting words
-OpenOffice.org Writer : crash reports
-OpenOffice.org Writer : criteria of query design (Base)
-OpenOffice.org Writer : cropping pictures
-OpenOffice.org Writer : cross-references
-OpenOffice.org Writer : cross-references;inserting and updating
-OpenOffice.org Writer : cross-references;inserting with Navigator
-OpenOffice.org Writer : cross-references;modifying
-OpenOffice.org Writer : CTL
-OpenOffice.org Writer : CTL;complex text layout languages
-OpenOffice.org Writer : CTL;definition
-OpenOffice.org Writer : CTL;options
-OpenOffice.org Writer : currencies
-OpenOffice.org Writer : currencies;converters
-OpenOffice.org Writer : currencies;formats and format codes
-OpenOffice.org Writer : currency field creation
-OpenOffice.org Writer : currency formats
-OpenOffice.org Writer : cursor
-OpenOffice.org Writer : cursor;allowing in protected areas (Writer)
-OpenOffice.org Writer : cursor;direct cursor
-OpenOffice.org Writer : cursor;in read-only text
-OpenOffice.org Writer : cursor;quickly moving to an object
-OpenOffice.org Writer : curves
-OpenOffice.org Writer : curves;editing points
-OpenOffice.org Writer : curves;properties in line charts/XY charts
-OpenOffice.org Writer : custom dictionaries
-OpenOffice.org Writer : custom dictionaries;editing
-OpenOffice.org Writer : custom dictionaries;removing words from
-OpenOffice.org Writer : custom hyphens (Writer)
-OpenOffice.org Writer : custom quotes
-OpenOffice.org Writer : custom templates
-OpenOffice.org Writer : customizing
-OpenOffice.org Writer : customizing;events
-OpenOffice.org Writer : customizing;keyboard
-OpenOffice.org Writer : customizing;menus
-OpenOffice.org Writer : customizing;OpenOffice.org
-OpenOffice.org Writer : customizing;round corners
-OpenOffice.org Writer : customizing;toolbars
-OpenOffice.org Writer : cutting
-OpenOffice.org Writer : dashes
-OpenOffice.org Writer : data
-OpenOffice.org Writer : data;filtering in forms
-OpenOffice.org Writer : data;forms and subforms
-OpenOffice.org Writer : data;read-only
-OpenOffice.org Writer : data;sorting in forms
-OpenOffice.org Writer : data;user data
-OpenOffice.org Writer : data binding change in XForms
-OpenOffice.org Writer : data labels in charts
-OpenOffice.org Writer : Data Navigator display options
-OpenOffice.org Writer : data ranges in charts
-OpenOffice.org Writer : data series
-OpenOffice.org Writer : data source browser
-OpenOffice.org Writer : data source explorer
-OpenOffice.org Writer : data source view
-OpenOffice.org Writer : data source view;drag and drop
-OpenOffice.org Writer : data source view;overview
-OpenOffice.org Writer : data source view;showing
-OpenOffice.org Writer : data sources
-OpenOffice.org Writer : data sources;as tables
-OpenOffice.org Writer : data sources;connection settings (Base)
-OpenOffice.org Writer : data sources;copying records to spreadsheets
-OpenOffice.org Writer : data sources;displaying current
-OpenOffice.org Writer : data sources;LDAP server (Base)
-OpenOffice.org Writer : data sources;OpenOffice.org Base
-OpenOffice.org Writer : data sources;registering address books
-OpenOffice.org Writer : data sources;reports
-OpenOffice.org Writer : data sources;setting for stock charts
-OpenOffice.org Writer : data sources;viewing
-OpenOffice.org Writer : data structure of XForms
-OpenOffice.org Writer : data values in charts
-OpenOffice.org Writer : database contents
-OpenOffice.org Writer : database contents;inserting as tables
-OpenOffice.org Writer : database contents;inserting as text
-OpenOffice.org Writer : database reports
-OpenOffice.org Writer : Database Wizard (Base)
-OpenOffice.org Writer : databases
-OpenOffice.org Writer : databases;administration through SQL (Base)
-OpenOffice.org Writer : databases;ADO (Base)
-OpenOffice.org Writer : databases;connecting (Base)
-OpenOffice.org Writer : databases;creating
-OpenOffice.org Writer : databases;creating bibliographies
-OpenOffice.org Writer : databases;creating labels
-OpenOffice.org Writer : databases;creating queries
-OpenOffice.org Writer : databases;creating reports
-OpenOffice.org Writer : databases;creating tables
-OpenOffice.org Writer : databases;dBASE (Base)
-OpenOffice.org Writer : databases;deleting (Base)
-OpenOffice.org Writer : databases;drag and drop (Base)
-OpenOffice.org Writer : databases;editing tables
-OpenOffice.org Writer : databases;exchanging
-OpenOffice.org Writer : databases;form filters
-OpenOffice.org Writer : databases;formats (Base)
-OpenOffice.org Writer : databases;importing/exporting
-OpenOffice.org Writer : databases;in conditions
-OpenOffice.org Writer : databases;JDBC (Base)
-OpenOffice.org Writer : databases;main page (Base)
-OpenOffice.org Writer : databases;MySQL (Base)
-OpenOffice.org Writer : databases;ODBC (Base)
-OpenOffice.org Writer : databases;overview
-OpenOffice.org Writer : databases;registering (Base)
-OpenOffice.org Writer : databases;searching records
-OpenOffice.org Writer : databases;shortcut keys
-OpenOffice.org Writer : databases;sorting
-OpenOffice.org Writer : databases;standard filters
-OpenOffice.org Writer : databases;text formats
-OpenOffice.org Writer : databases;viewing
-OpenOffice.org Writer : date fields
-OpenOffice.org Writer : date fields;creating
-OpenOffice.org Writer : date fields;fixed/variable
-OpenOffice.org Writer : date fields;HTML
-OpenOffice.org Writer : date fields;properties
-OpenOffice.org Writer : date formats
-OpenOffice.org Writer : dates
-OpenOffice.org Writer : dates;default (Calc)
-OpenOffice.org Writer : dates;formatting automatically in tables
-OpenOffice.org Writer : dates;inserting
-OpenOffice.org Writer : dates;printing in presentations
-OpenOffice.org Writer : dates;start 1900/01/01 (Calc)
-OpenOffice.org Writer : dates;start 1904/01/01 (Calc)
-OpenOffice.org Writer : dBASE
-OpenOffice.org Writer : dBASE;database settings (Base)
-OpenOffice.org Writer : DDE
-OpenOffice.org Writer : DDE;command for inserting sections
-OpenOffice.org Writer : DDE;definition
-OpenOffice.org Writer : DDE;inserting tables
-OpenOffice.org Writer : deactivating
-OpenOffice.org Writer : deactivating;plug-ins
-OpenOffice.org Writer : deactivating;word completion
-OpenOffice.org Writer : decimal places displayed (Calc)
-OpenOffice.org Writer : decimal separator key
-OpenOffice.org Writer : decimal tab stops
-OpenOffice.org Writer : default directories
-OpenOffice.org Writer : default file formats
-OpenOffice.org Writer : default filters
-OpenOffice.org Writer : default filters;comparison operators
-OpenOffice.org Writer : default filters;databases
-OpenOffice.org Writer : default printer
-OpenOffice.org Writer : default printer;setting up
-OpenOffice.org Writer : default printer;UNIX
-OpenOffice.org Writer : default templates
-OpenOffice.org Writer : default templates;changing
-OpenOffice.org Writer : default templates;defining
-OpenOffice.org Writer : default templates;organizing
-OpenOffice.org Writer : defaults
-OpenOffice.org Writer : defaults;documents
-OpenOffice.org Writer : defaults;file formats
-OpenOffice.org Writer : defaults;fonts
-OpenOffice.org Writer : defaults;grids (Writer/Calc)
-OpenOffice.org Writer : defaults;languages
-OpenOffice.org Writer : defaults;number formats
-OpenOffice.org Writer : defaults;of saving
-OpenOffice.org Writer : defaults;program configuration
-OpenOffice.org Writer : defaults;tab stops in text
-OpenOffice.org Writer : defaults;templates
-OpenOffice.org Writer : defaults;views
-OpenOffice.org Writer : defining
-OpenOffice.org Writer : defining;arrowheads and other line ends
-OpenOffice.org Writer : defining;colors
-OpenOffice.org Writer : defining;conditions
-OpenOffice.org Writer : defining;headers/footers
-OpenOffice.org Writer : defining;line styles
-OpenOffice.org Writer : defining;object borders
-OpenOffice.org Writer : defining;page borders
-OpenOffice.org Writer : defining;page styles
-OpenOffice.org Writer : defining;paragraph borders
-OpenOffice.org Writer : defining;queries (Base)
-OpenOffice.org Writer : defining;starting page numbers
-OpenOffice.org Writer : defining;table borders
-OpenOffice.org Writer : defining;table borders in Writer
-OpenOffice.org Writer : deleting
-OpenOffice.org Writer : deleting;all direct formatting
-OpenOffice.org Writer : deleting;databases (Base)
-OpenOffice.org Writer : deleting;entries of indexes/tables of contents
-OpenOffice.org Writer : deleting;footnotes
-OpenOffice.org Writer : deleting;heading numbers
-OpenOffice.org Writer : deleting;hyperlinks
-OpenOffice.org Writer : deleting;indexes/tables of contents
-OpenOffice.org Writer : deleting;line breaks
-OpenOffice.org Writer : deleting;lines in text
-OpenOffice.org Writer : deleting;models/instances
-OpenOffice.org Writer : deleting;namespaces in XForms
-OpenOffice.org Writer : deleting;numbers in lists
-OpenOffice.org Writer : deleting;page breaks
-OpenOffice.org Writer : deleting;rows/columns, by keyboard
-OpenOffice.org Writer : deleting;tab stops
-OpenOffice.org Writer : deleting;tables or table contents
-OpenOffice.org Writer : deleting;templates
-OpenOffice.org Writer : deleting;words in user-defined dictionaries
-OpenOffice.org Writer : deleting;XML filters
-OpenOffice.org Writer : demoting heading levels
-OpenOffice.org Writer : depth stagger
-OpenOffice.org Writer : descriptions for objects
-OpenOffice.org Writer : design mode after saving
-OpenOffice.org Writer : design view
-OpenOffice.org Writer : design view;creating forms
-OpenOffice.org Writer : design view;queries/views (Base)
-OpenOffice.org Writer : designing
-OpenOffice.org Writer : designing;database tables
-OpenOffice.org Writer : designing;fonts
-OpenOffice.org Writer : designing;queries (Base)
-OpenOffice.org Writer : detaching toolbars
-OpenOffice.org Writer : dictionaries
-OpenOffice.org Writer : dictionaries;common terms in simplified and traditional chinese
-OpenOffice.org Writer : dictionaries;creating
-OpenOffice.org Writer : dictionaries;editing user-defined
-OpenOffice.org Writer : dictionaries;spellcheck
-OpenOffice.org Writer : dictionaries;thesaurus
-OpenOffice.org Writer : dictionaries, see also languages
-OpenOffice.org Writer : digital signatures
-OpenOffice.org Writer : direct cursor
-OpenOffice.org Writer : direct cursor;restriction
-OpenOffice.org Writer : direct cursor;settings
-OpenOffice.org Writer : direct formatting
-OpenOffice.org Writer : direct formatting;exiting
-OpenOffice.org Writer : direct formatting;undoing all
-OpenOffice.org Writer : directories
-OpenOffice.org Writer : directories;creating new
-OpenOffice.org Writer : directories;directory structure
-OpenOffice.org Writer : disabled persons
-OpenOffice.org Writer : disabling
-OpenOffice.org Writer : disabling;field highlighting
-OpenOffice.org Writer : disabling;word completion
-OpenOffice.org Writer : displaying
-OpenOffice.org Writer : displaying;hidden text
-OpenOffice.org Writer : displaying;non-printing characters (Writer)
-OpenOffice.org Writer : displaying;notes (Calc)
-OpenOffice.org Writer : displaying;notes in text documents
-OpenOffice.org Writer : displaying;pictures and objects (Writer)
-OpenOffice.org Writer : displaying;tables (Writer)
-OpenOffice.org Writer : displaying;zero values (Calc)
-OpenOffice.org Writer : distances
-OpenOffice.org Writer : distinct values in SQL queries
-OpenOffice.org Writer : distorting in drawings
-OpenOffice.org Writer : distributing XML filters
-OpenOffice.org Writer : dithering
-OpenOffice.org Writer : dividing tables
-OpenOffice.org Writer : DocInformation fields
-OpenOffice.org Writer : docking
-OpenOffice.org Writer : docking;definition
-OpenOffice.org Writer : docking;Navigator window
-OpenOffice.org Writer : docking;toolbars
-OpenOffice.org Writer : docking;windows
-OpenOffice.org Writer : Document Converter Wizard
-OpenOffice.org Writer : Document Map feature in Microsoft Office
-OpenOffice.org Writer : Document Map, see Navigator
-OpenOffice.org Writer : document templates
-OpenOffice.org Writer : document types in OpenOffice.org
-OpenOffice.org Writer : documents
-OpenOffice.org Writer : documents;changing titles
-OpenOffice.org Writer : documents;closing
-OpenOffice.org Writer : documents;comparing
-OpenOffice.org Writer : documents;contents as lists
-OpenOffice.org Writer : documents;editing time
-OpenOffice.org Writer : documents;exporting
-OpenOffice.org Writer : documents;importing
-OpenOffice.org Writer : documents;languages
-OpenOffice.org Writer : documents;master documents and subdocuments
-OpenOffice.org Writer : documents;measurement units in
-OpenOffice.org Writer : documents;merging
-OpenOffice.org Writer : documents;number of pages/tables/sheets
-OpenOffice.org Writer : documents;number of words/characters
-OpenOffice.org Writer : documents;opening
-OpenOffice.org Writer : documents;opening in design mode
-OpenOffice.org Writer : documents;opening with templates
-OpenOffice.org Writer : documents;organizing
-OpenOffice.org Writer : documents;printing
-OpenOffice.org Writer : documents;read-only
-OpenOffice.org Writer : documents;reloading
-OpenOffice.org Writer : documents;saving
-OpenOffice.org Writer : documents;saving automatically
-OpenOffice.org Writer : documents;saving in other formats
-OpenOffice.org Writer : documents;sending as e-mail
-OpenOffice.org Writer : documents;styles changed
-OpenOffice.org Writer : documents;version management
-OpenOffice.org Writer : documents;version numbers
-OpenOffice.org Writer : donut charts
-OpenOffice.org Writer : dotted areas
-OpenOffice.org Writer : double-line spacing in paragraphs
-OpenOffice.org Writer : double-line writing in Asian layout
-OpenOffice.org Writer : drag and drop
-OpenOffice.org Writer : drag and drop;copying and pasting text
-OpenOffice.org Writer : drag and drop;creating new styles
-OpenOffice.org Writer : drag and drop;data source view
-OpenOffice.org Writer : drag and drop;from Gallery to draw objects
-OpenOffice.org Writer : drag and drop;overview
-OpenOffice.org Writer : drag and drop;pictures
-OpenOffice.org Writer : drag and drop;to Gallery
-OpenOffice.org Writer : draw objects
-OpenOffice.org Writer : draw objects;adding/editing/copying
-OpenOffice.org Writer : draw objects;anchoring
-OpenOffice.org Writer : draw objects;arranging within stacks
-OpenOffice.org Writer : draw objects;copying
-OpenOffice.org Writer : draw objects;copying between documents
-OpenOffice.org Writer : draw objects;cross-referencing
-OpenOffice.org Writer : draw objects;displaying (Calc)
-OpenOffice.org Writer : draw objects;dropping Gallery pictures
-OpenOffice.org Writer : draw objects;flipping
-OpenOffice.org Writer : draw objects;inserting captions
-OpenOffice.org Writer : draw objects;legends
-OpenOffice.org Writer : draw objects;positioning and resizing
-OpenOffice.org Writer : draw objects;protecting
-OpenOffice.org Writer : draw objects;slanting
-OpenOffice.org Writer : draw objects;text in
-OpenOffice.org Writer : Drawing bar
-OpenOffice.org Writer : drawing lines in text
-OpenOffice.org Writer : drawings
-OpenOffice.org Writer : drawings;creating/opening
-OpenOffice.org Writer : drawings;languages
-OpenOffice.org Writer : drawings;printing
-OpenOffice.org Writer : drawings;printing defaults
-OpenOffice.org Writer : drawings;printing in text documents
-OpenOffice.org Writer : drawings;saving
-OpenOffice.org Writer : drawings;saving automatically
-OpenOffice.org Writer : drawings;saving in other formats
-OpenOffice.org Writer : drawings;sending as e-mail
-OpenOffice.org Writer : drawings;showing (Writer)
-OpenOffice.org Writer : drop caps insertion
-OpenOffice.org Writer : drop-down lists in form functions
-OpenOffice.org Writer : e-mail attachments
-OpenOffice.org Writer : Edit File icon
-OpenOffice.org Writer : edit mode
-OpenOffice.org Writer : edit mode;after opening
-OpenOffice.org Writer : edit mode;through Enter key (Calc)
-OpenOffice.org Writer : Edit Points bar
-OpenOffice.org Writer : editing
-OpenOffice.org Writer : editing;captions
-OpenOffice.org Writer : editing;chart axes
-OpenOffice.org Writer : editing;chart data
-OpenOffice.org Writer : editing;chart legends
-OpenOffice.org Writer : editing;chart titles
-OpenOffice.org Writer : editing;concordance files
-OpenOffice.org Writer : editing;cross-references
-OpenOffice.org Writer : editing;data binding of XForms
-OpenOffice.org Writer : editing;database tables and queries
-OpenOffice.org Writer : editing;draw objects
-OpenOffice.org Writer : editing;Fontwork objects
-OpenOffice.org Writer : editing;footnotes/endnotes
-OpenOffice.org Writer : editing;hyperlinks
-OpenOffice.org Writer : editing;index format
-OpenOffice.org Writer : editing;indexes/tables of contents
-OpenOffice.org Writer : editing;items in Data Navigator
-OpenOffice.org Writer : editing;menus
-OpenOffice.org Writer : editing;namespaces in XForms
-OpenOffice.org Writer : editing;notes
-OpenOffice.org Writer : editing;objects
-OpenOffice.org Writer : editing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Writer : editing;pictures
-OpenOffice.org Writer : editing;reports
-OpenOffice.org Writer : editing;sections
-OpenOffice.org Writer : editing;shortcut keys
-OpenOffice.org Writer : editing;tab stops
-OpenOffice.org Writer : editing;table/index entries
-OpenOffice.org Writer : editing;templates
-OpenOffice.org Writer : editing;text frames
-OpenOffice.org Writer : editing;titles
-OpenOffice.org Writer : editing;toolbars
-OpenOffice.org Writer : editing;undoing
-OpenOffice.org Writer : editing;XForms
-OpenOffice.org Writer : editing time of documents
-OpenOffice.org Writer : editors
-OpenOffice.org Writer : editors;contour editor
-OpenOffice.org Writer : editors;formula editor
-OpenOffice.org Writer : editors;ImageMap editor
-OpenOffice.org Writer : effects
-OpenOffice.org Writer : effects;font positions
-OpenOffice.org Writer : effects;fonts
-OpenOffice.org Writer : effects;Fontwork icons
-OpenOffice.org Writer : effects;text animation
-OpenOffice.org Writer : emphasizing text
-OpenOffice.org Writer : empty documents
-OpenOffice.org Writer : empty page with alternating page styles
-OpenOffice.org Writer : empty paragraph removal
-OpenOffice.org Writer : encryption of contents
-OpenOffice.org Writer : endnotes
-OpenOffice.org Writer : endnotes;inserting and editing
-OpenOffice.org Writer : endnotes;spacing
-OpenOffice.org Writer : enlarging columns,cells and table rows
-OpenOffice.org Writer : entering groups
-OpenOffice.org Writer : entering text from right to left
-OpenOffice.org Writer : entering text with direct cursor
-OpenOffice.org Writer : entries
-OpenOffice.org Writer : entries;bibliographies
-OpenOffice.org Writer : entries;defining in indexes/tables of contents
-OpenOffice.org Writer : entries;in tables of contents, as hyperlinks
-OpenOffice.org Writer : envelopes
-OpenOffice.org Writer : envelopes;inserting
-OpenOffice.org Writer : equal sign, see also operators
-OpenOffice.org Writer : equations in formula editor
-OpenOffice.org Writer : error bars in charts
-OpenOffice.org Writer : error indicators in charts
-OpenOffice.org Writer : Error Report Tool
-OpenOffice.org Writer : Euro
-OpenOffice.org Writer : Euro;currency formats
-OpenOffice.org Writer : Euro;Euro Converter Wizard
-OpenOffice.org Writer : even/odd pages
-OpenOffice.org Writer : even/odd pages;formatting
-OpenOffice.org Writer : even/odd pages;printing
-OpenOffice.org Writer : events
-OpenOffice.org Writer : events;controls
-OpenOffice.org Writer : events;customizing
-OpenOffice.org Writer : events;in forms
-OpenOffice.org Writer : examples for regular expressions
-OpenOffice.org Writer : Excel
-OpenOffice.org Writer : Excel;saving as
-OpenOffice.org Writer : Excel;search criteria
-OpenOffice.org Writer : exceptions
-OpenOffice.org Writer : exceptions;AutoCorrect function
-OpenOffice.org Writer : exceptions;user-defined dictionaries
-OpenOffice.org Writer : exchanging databases
-OpenOffice.org Writer : exchanging, see also replacing
-OpenOffice.org Writer : executing
-OpenOffice.org Writer : executing;SQL commands
-OpenOffice.org Writer : exiting
-OpenOffice.org Writer : exiting;direct formatting
-OpenOffice.org Writer : exiting;groups
-OpenOffice.org Writer : exiting;OpenOffice.org
-OpenOffice.org Writer : expanding formatting (Calc)
-OpenOffice.org Writer : explorer of data sources
-OpenOffice.org Writer : export filters
-OpenOffice.org Writer : exporting
-OpenOffice.org Writer : exporting;bitmaps
-OpenOffice.org Writer : exporting;databases
-OpenOffice.org Writer : exporting;HTML and text documents
-OpenOffice.org Writer : exporting;Microsoft Office documents with VBA code
-OpenOffice.org Writer : exporting;spreadsheets to text format
-OpenOffice.org Writer : exporting;templates
-OpenOffice.org Writer : exporting;to foreign formats
-OpenOffice.org Writer : exporting;to HTML
-OpenOffice.org Writer : exporting;to Microsoft Office formats
-OpenOffice.org Writer : exporting;to PDF
-OpenOffice.org Writer : exporting;to PostScript format
-OpenOffice.org Writer : exporting;to XML
-OpenOffice.org Writer : exporting;XML files
-OpenOffice.org Writer : extended tips in Help
-OpenOffice.org Writer : extension mode in text
-OpenOffice.org Writer : extensions
-OpenOffice.org Writer : extensions;Extension Manager
-OpenOffice.org Writer : extensions;file formats
-OpenOffice.org Writer : external keys (Base)
-OpenOffice.org Writer : faster printing
-OpenOffice.org Writer : faxes
-OpenOffice.org Writer : faxes;configuring OpenOffice.org
-OpenOffice.org Writer : faxes;fax programs/fax printers under UNIX
-OpenOffice.org Writer : faxes;selecting a fax machine
-OpenOffice.org Writer : faxes;sending
-OpenOffice.org Writer : faxes;wizards
-OpenOffice.org Writer : fields
-OpenOffice.org Writer : fields;converting into text
-OpenOffice.org Writer : fields;database tables
-OpenOffice.org Writer : fields;defining conditions
-OpenOffice.org Writer : fields;displaying field codes (Writer)
-OpenOffice.org Writer : fields;formatted fields
-OpenOffice.org Writer : fields;HTML import and export
-OpenOffice.org Writer : fields;input fields in text
-OpenOffice.org Writer : fields;inserting time
-OpenOffice.org Writer : fields;subject
-OpenOffice.org Writer : fields;updating automatically (Writer)
-OpenOffice.org Writer : fields;updating/viewing
-OpenOffice.org Writer : fields;user data
-OpenOffice.org Writer : file associations for Microsoft Office
-OpenOffice.org Writer : file filters
-OpenOffice.org Writer : file filters;mobile devices
-OpenOffice.org Writer : file filters;XML
-OpenOffice.org Writer : file formats
-OpenOffice.org Writer : file formats;changing defaults
-OpenOffice.org Writer : file formats;OpenDocument/XML
-OpenOffice.org Writer : file formats;saving always in other formats
-OpenOffice.org Writer : file selection button
-OpenOffice.org Writer : file sharing options for current document
-OpenOffice.org Writer : files
-OpenOffice.org Writer : files;filters and formats
-OpenOffice.org Writer : files;importing
-OpenOffice.org Writer : files;opening
-OpenOffice.org Writer : files;opening with placeholders
-OpenOffice.org Writer : files;properties
-OpenOffice.org Writer : files;saving
-OpenOffice.org Writer : files;saving automatically
-OpenOffice.org Writer : files;saving in other formats
-OpenOffice.org Writer : files;sending as e-mail
-OpenOffice.org Writer : files;version numbers
-OpenOffice.org Writer : files and folders in OpenOffice.org
-OpenOffice.org Writer : fill characters with tabulators
-OpenOffice.org Writer : fill colors for areas
-OpenOffice.org Writer : fill format mode
-OpenOffice.org Writer : fill patterns for areas
-OpenOffice.org Writer : filter conditions
-OpenOffice.org Writer : filter conditions;connecting
-OpenOffice.org Writer : filter conditions;in queries (Base)
-OpenOffice.org Writer : filtering
-OpenOffice.org Writer : filtering;data in databases
-OpenOffice.org Writer : filtering;data in forms
-OpenOffice.org Writer : filters
-OpenOffice.org Writer : filters;comparison operators
-OpenOffice.org Writer : filters;for import and export
-OpenOffice.org Writer : filters;Navigator
-OpenOffice.org Writer : filters;pictures
-OpenOffice.org Writer : filters;XML filter settings
-OpenOffice.org Writer : Find tab in Help
-OpenOffice.org Writer : finding
-OpenOffice.org Writer : finding;in all sheets
-OpenOffice.org Writer : finding;records in form documents
-OpenOffice.org Writer : finding;selections
-OpenOffice.org Writer : finding;similarity search
-OpenOffice.org Writer : finding;text/text formats/styles/objects
-OpenOffice.org Writer : first letters as large capital letters
-OpenOffice.org Writer : First Page page style
-OpenOffice.org Writer : fitting to pages
-OpenOffice.org Writer : fitting to pages;print settings in Math
-OpenOffice.org Writer : fitting to pages;print settings in presentations
-OpenOffice.org Writer : fixed dates
-OpenOffice.org Writer : fixed text
-OpenOffice.org Writer : fixed text;form functions
-OpenOffice.org Writer : fixing toolbars
-OpenOffice.org Writer : flipping draw objects
-OpenOffice.org Writer : floating frames in HTML documents
-OpenOffice.org Writer : floating titles in headers
-OpenOffice.org Writer : floating toolbars
-OpenOffice.org Writer : focus of controls
-OpenOffice.org Writer : folder creation
-OpenOffice.org Writer : font attributes
-OpenOffice.org Writer : font attributes;resetting
-OpenOffice.org Writer : font lists
-OpenOffice.org Writer : font name box
-OpenOffice.org Writer : font sizes
-OpenOffice.org Writer : font sizes;bullets
-OpenOffice.org Writer : font sizes;relative changes
-OpenOffice.org Writer : font sizes;scaling on screen
-OpenOffice.org Writer : font sizes;text
-OpenOffice.org Writer : fonts
-OpenOffice.org Writer : fonts;adding under UNIX
-OpenOffice.org Writer : fonts;changing in templates
-OpenOffice.org Writer : fonts;colors
-OpenOffice.org Writer : fonts;default settings
-OpenOffice.org Writer : fonts;effects
-OpenOffice.org Writer : fonts;for HTML and Basic
-OpenOffice.org Writer : fonts;formats
-OpenOffice.org Writer : fonts;outlines
-OpenOffice.org Writer : fonts;positions in text
-OpenOffice.org Writer : fonts;resetting
-OpenOffice.org Writer : fonts;shadows
-OpenOffice.org Writer : fonts;specifying several
-OpenOffice.org Writer : fonts;strikethrough
-OpenOffice.org Writer : fonts;styles
-OpenOffice.org Writer : fonts;text objects
-OpenOffice.org Writer : Fontwork icons
-OpenOffice.org Writer : footers
-OpenOffice.org Writer : footers;about
-OpenOffice.org Writer : footers;backgrounds
-OpenOffice.org Writer : footers;defining for left and right pages
-OpenOffice.org Writer : footers;formatting
-OpenOffice.org Writer : footers;inserting
-OpenOffice.org Writer : footers;with page numbers
-OpenOffice.org Writer : footnotes
-OpenOffice.org Writer : footnotes;inserting and editing
-OpenOffice.org Writer : footnotes;spacing
-OpenOffice.org Writer : form controls
-OpenOffice.org Writer : form controls;assigning macros
-OpenOffice.org Writer : form controls;protecting
-OpenOffice.org Writer : form controls;toolbars
-OpenOffice.org Writer : form fields
-OpenOffice.org Writer : form filters
-OpenOffice.org Writer : form letters
-OpenOffice.org Writer : Form Navigator
-OpenOffice.org Writer : format codes
-OpenOffice.org Writer : format codes;numbers
-OpenOffice.org Writer : format codes;user-defined number formats
-OpenOffice.org Writer : format filling printing in OpenOffice.org Math
-OpenOffice.org Writer : Format Paintbrush
-OpenOffice.org Writer : formats
-OpenOffice.org Writer : formats;Asian layout
-OpenOffice.org Writer : formats;Asian typography
-OpenOffice.org Writer : formats;copying and pasting
-OpenOffice.org Writer : formats;finding and replacing
-OpenOffice.org Writer : formats;fonts
-OpenOffice.org Writer : formats;maximizing page formats
-OpenOffice.org Writer : formats;number and currency formats
-OpenOffice.org Writer : formats;of currencies/date/time
-OpenOffice.org Writer : formats;on opening and saving
-OpenOffice.org Writer : formats;pasting in special formats
-OpenOffice.org Writer : formats;positions
-OpenOffice.org Writer : formats;resetting
-OpenOffice.org Writer : formats;tabulators
-OpenOffice.org Writer : formats;undoing when writing
-OpenOffice.org Writer : formatted fields
-OpenOffice.org Writer : formatted fields;form functions
-OpenOffice.org Writer : formatted fields;properties
-OpenOffice.org Writer : formatting
-OpenOffice.org Writer : formatting;axes in charts
-OpenOffice.org Writer : formatting;bold, while typing
-OpenOffice.org Writer : formatting;bullets
-OpenOffice.org Writer : formatting;changing individual pages
-OpenOffice.org Writer : formatting;chart areas
-OpenOffice.org Writer : formatting;chart floors
-OpenOffice.org Writer : formatting;chart legends
-OpenOffice.org Writer : formatting;chart titles
-OpenOffice.org Writer : formatting;chart walls
-OpenOffice.org Writer : formatting;contour wrap
-OpenOffice.org Writer : formatting;copying
-OpenOffice.org Writer : formatting;definition
-OpenOffice.org Writer : formatting;even/odd pages
-OpenOffice.org Writer : formatting;exiting direct formatting
-OpenOffice.org Writer : formatting;expanding (Calc)
-OpenOffice.org Writer : formatting;font effects
-OpenOffice.org Writer : formatting;hyperlinks
-OpenOffice.org Writer : formatting;indenting paragraphs
-OpenOffice.org Writer : formatting;indexes and tables of contents
-OpenOffice.org Writer : formatting;numbered lists
-OpenOffice.org Writer : formatting;page numbers
-OpenOffice.org Writer : formatting;pages
-OpenOffice.org Writer : formatting;printer metrics (Writer)
-OpenOffice.org Writer : formatting;register-true text
-OpenOffice.org Writer : formatting;undoing
-OpenOffice.org Writer : formatting;with adjacent paragraph format
-OpenOffice.org Writer : formatting styles
-OpenOffice.org Writer : formatting styles;importing
-OpenOffice.org Writer : formatting styles;styles and templates
-OpenOffice.org Writer : forms
-OpenOffice.org Writer : forms;browsing
-OpenOffice.org Writer : forms;Combo Box/List Box Wizard
-OpenOffice.org Writer : forms;creating
-OpenOffice.org Writer : forms;data
-OpenOffice.org Writer : forms;designing (Base)
-OpenOffice.org Writer : forms;events
-OpenOffice.org Writer : forms;filtering data
-OpenOffice.org Writer : forms;finding records
-OpenOffice.org Writer : forms;focus after opening
-OpenOffice.org Writer : forms;general information (Base)
-OpenOffice.org Writer : forms;grouping controls
-OpenOffice.org Writer : forms;HTML filters
-OpenOffice.org Writer : forms;Navigator
-OpenOffice.org Writer : forms;opening in design mode
-OpenOffice.org Writer : forms;properties
-OpenOffice.org Writer : forms;sorting data
-OpenOffice.org Writer : forms;subforms
-OpenOffice.org Writer : forms;wizards
-OpenOffice.org Writer : forms;XForms
-OpenOffice.org Writer : Formula Auditing feature in Microsoft Office
-OpenOffice.org Writer : formula texts
-OpenOffice.org Writer : formula texts;printing in OpenOffice.org Math
-OpenOffice.org Writer : formulas
-OpenOffice.org Writer : formulas;calculating in text
-OpenOffice.org Writer : formulas;complex formulas in text
-OpenOffice.org Writer : formulas;new
-OpenOffice.org Writer : formulas;pasting results in text documents
-OpenOffice.org Writer : formulas;starting formula editor
-OpenOffice.org Writer : formulas in reports
-OpenOffice.org Writer : formulas in reports;editing
-OpenOffice.org Writer : formulating conditions
-OpenOffice.org Writer : forums and support
-OpenOffice.org Writer : frames
-OpenOffice.org Writer : frames;anchoring options
-OpenOffice.org Writer : frames;around objects
-OpenOffice.org Writer : frames;around pages
-OpenOffice.org Writer : frames;around paragraphs
-OpenOffice.org Writer : frames;around tables
-OpenOffice.org Writer : frames;around text tables
-OpenOffice.org Writer : frames;AutoCorrect function
-OpenOffice.org Writer : frames;backgrounds
-OpenOffice.org Writer : frames;captions (Writer)
-OpenOffice.org Writer : frames;defining hyperlinks
-OpenOffice.org Writer : frames;jumping to
-OpenOffice.org Writer : frames;labeling
-OpenOffice.org Writer : frames;linking
-OpenOffice.org Writer : frames;printing in OpenOffice.org Math
-OpenOffice.org Writer : frames;protecting
-OpenOffice.org Writer : frames;selection frames
-OpenOffice.org Writer : frames;styles
-OpenOffice.org Writer : frames;text fitting to frames
-OpenOffice.org Writer : frames;unlinking
-OpenOffice.org Writer : freeform lines
-OpenOffice.org Writer : freeform lines;draw functions
-OpenOffice.org Writer : FTP
-OpenOffice.org Writer : FTP;opening documents
-OpenOffice.org Writer : FTP;saving documents
-OpenOffice.org Writer : full joins (Base)
-OpenOffice.org Writer : full screen view
-OpenOffice.org Writer : full-text search in Help
-OpenOffice.org Writer : functions in reports
-OpenOffice.org Writer : functions in reports;editing
-OpenOffice.org Writer : Gallery
-OpenOffice.org Writer : Gallery;adding pictures
-OpenOffice.org Writer : Gallery;docking and resizing
-OpenOffice.org Writer : Gallery;dragging pictures to draw objects
-OpenOffice.org Writer : Gallery;hiding/showing
-OpenOffice.org Writer : Gallery;inserting pictures from
-OpenOffice.org Writer : German spellcheck
-OpenOffice.org Writer : get method for form transmissions
-OpenOffice.org Writer : getting support
-OpenOffice.org Writer : GIF format
-OpenOffice.org Writer : glossaries
-OpenOffice.org Writer : glossaries;common terms
-OpenOffice.org Writer : glossaries;Internet terms
-OpenOffice.org Writer : gradients off for faster printing
-OpenOffice.org Writer : graphical text art
-OpenOffice.org Writer : graphics
-OpenOffice.org Writer : graphics;cache
-OpenOffice.org Writer : graphics;do not show
-OpenOffice.org Writer : graphics;protecting
-OpenOffice.org Writer : graphics, see also pictures
-OpenOffice.org Writer : grayscale printing
-OpenOffice.org Writer : grid controls
-OpenOffice.org Writer : grid controls;form functions
-OpenOffice.org Writer : grids
-OpenOffice.org Writer : grids;defaults (Writer/Calc)
-OpenOffice.org Writer : grids;display options (Impress/Draw)
-OpenOffice.org Writer : grids;displaying lines (Calc)
-OpenOffice.org Writer : grids;formatting axes
-OpenOffice.org Writer : grids;inserting in charts
-OpenOffice.org Writer : group box creation
-OpenOffice.org Writer : groups
-OpenOffice.org Writer : groups;entering/exiting/ungrouping
-OpenOffice.org Writer : groups;naming
-OpenOffice.org Writer : groups;of controls
-OpenOffice.org Writer : guides
-OpenOffice.org Writer : guides;display options (Impress/Draw)
-OpenOffice.org Writer : guides;displaying when moving objects (Impress)
-OpenOffice.org Writer : guides;showing (Calc)
-OpenOffice.org Writer : guides;showing when moving frames (Writer)
-OpenOffice.org Writer : gutter
-OpenOffice.org Writer : handles
-OpenOffice.org Writer : handles;displaying (Writer)
-OpenOffice.org Writer : handles;scaling
-OpenOffice.org Writer : handles;showing simple/large handles (Calc)
-OpenOffice.org Writer : hanging indents in paragraphs
-OpenOffice.org Writer : Hangul/Hanja
-OpenOffice.org Writer : hard returns in pasted text
-OpenOffice.org Writer : hatching
-OpenOffice.org Writer : headers
-OpenOffice.org Writer : headers;about
-OpenOffice.org Writer : headers;backgrounds
-OpenOffice.org Writer : headers;chapter information
-OpenOffice.org Writer : headers;defining for left and right pages
-OpenOffice.org Writer : headers;formatting
-OpenOffice.org Writer : headers;inserting
-OpenOffice.org Writer : headings
-OpenOffice.org Writer : headings;automatic
-OpenOffice.org Writer : headings;entering as text box
-OpenOffice.org Writer : headings;jumping to
-OpenOffice.org Writer : headings;numbering
-OpenOffice.org Writer : headings;own paragraph styles
-OpenOffice.org Writer : headings;rearranging
-OpenOffice.org Writer : headings;repeating in tables
-OpenOffice.org Writer : headings;starting with tab stops
-OpenOffice.org Writer : headings;switching levels by keyboard
-OpenOffice.org Writer : Hebrew
-OpenOffice.org Writer : Hebrew;entering text
-OpenOffice.org Writer : Hebrew;language settings
-OpenOffice.org Writer : Help
-OpenOffice.org Writer : Help;bookmarks
-OpenOffice.org Writer : Help;extended tips on/off
-OpenOffice.org Writer : Help;full-text search
-OpenOffice.org Writer : Help;Help tips
-OpenOffice.org Writer : Help;keywords
-OpenOffice.org Writer : Help;navigation pane showing/hiding
-OpenOffice.org Writer : Help;style sheets
-OpenOffice.org Writer : Help;topics
-OpenOffice.org Writer : Help Agent
-OpenOffice.org Writer : Help Agent;help
-OpenOffice.org Writer : Help Agent;options
-OpenOffice.org Writer : Help tips
-OpenOffice.org Writer : Help tips;fields
-OpenOffice.org Writer : Help tips;hiding
-OpenOffice.org Writer : hidden controls in Form Navigator
-OpenOffice.org Writer : hidden fields display (Writer)
-OpenOffice.org Writer : hidden pages
-OpenOffice.org Writer : hidden pages;printing in presentations
-OpenOffice.org Writer : hidden text
-OpenOffice.org Writer : hidden text;displaying
-OpenOffice.org Writer : hidden text;showing (Writer)
-OpenOffice.org Writer : hiding
-OpenOffice.org Writer : hiding;changes
-OpenOffice.org Writer : hiding;chart legends
-OpenOffice.org Writer : hiding;database fields
-OpenOffice.org Writer : hiding;docked windows
-OpenOffice.org Writer : hiding;navigation pane in Help window
-OpenOffice.org Writer : hiding;rulers
-OpenOffice.org Writer : hiding;sections
-OpenOffice.org Writer : hiding;text, from specific users
-OpenOffice.org Writer : hiding;text, with conditions
-OpenOffice.org Writer : high contrast mode
-OpenOffice.org Writer : Hindi
-OpenOffice.org Writer : Hindi;entering text
-OpenOffice.org Writer : Hindi;language settings
-OpenOffice.org Writer : homepage creation
-OpenOffice.org Writer : horizontal lines
-OpenOffice.org Writer : horizontal rulers
-OpenOffice.org Writer : horizontal scrollbars (Writer)
-OpenOffice.org Writer : HowTos for charts
-OpenOffice.org Writer : HTML
-OpenOffice.org Writer : HTML;definition
-OpenOffice.org Writer : HTML;export character set
-OpenOffice.org Writer : HTML;fonts for source display
-OpenOffice.org Writer : HTML;importing META tags
-OpenOffice.org Writer : HTML;live presentations
-OpenOffice.org Writer : HTML;special tags for fields
-OpenOffice.org Writer : HTML documents
-OpenOffice.org Writer : HTML documents;auto reloading
-OpenOffice.org Writer : HTML documents;creating from text documents
-OpenOffice.org Writer : HTML documents;headers and footers
-OpenOffice.org Writer : HTML documents;importing/exporting
-OpenOffice.org Writer : HTML documents;inserting linked sections
-OpenOffice.org Writer : HTML documents;META tags in
-OpenOffice.org Writer : HTML documents;new
-OpenOffice.org Writer : HTML documents;source text
-OpenOffice.org Writer : hyperlinks
-OpenOffice.org Writer : hyperlinks;assigning macros
-OpenOffice.org Writer : hyperlinks;character formats
-OpenOffice.org Writer : hyperlinks;definition
-OpenOffice.org Writer : hyperlinks;deleting
-OpenOffice.org Writer : hyperlinks;editing
-OpenOffice.org Writer : hyperlinks;for objects
-OpenOffice.org Writer : hyperlinks;in tables of contents and indexes
-OpenOffice.org Writer : hyperlinks;inserting
-OpenOffice.org Writer : hyperlinks;inserting from Navigator
-OpenOffice.org Writer : hyperlinks;jumping to
-OpenOffice.org Writer : hyperlinks;relative and absolute
-OpenOffice.org Writer : hyperlinks;turning off automatic recognition
-OpenOffice.org Writer : hyperlinks, see also links
-OpenOffice.org Writer : hyphenation
-OpenOffice.org Writer : hyphenation;activating for a language
-OpenOffice.org Writer : hyphenation;manual/automatic
-OpenOffice.org Writer : hyphenation;minimal number of characters
-OpenOffice.org Writer : hyphenation;preventing for specific words
-OpenOffice.org Writer : hyphens
-OpenOffice.org Writer : hyphens;displaying custom (Writer)
-OpenOffice.org Writer : hyphens;inserting custom
-OpenOffice.org Writer : icon bars, see toolbars
-OpenOffice.org Writer : icon sizes
-OpenOffice.org Writer : if-then queries as fields
-OpenOffice.org Writer : ignore list for spellcheck
-OpenOffice.org Writer : illumination
-OpenOffice.org Writer : illumination;3D charts
-OpenOffice.org Writer : illustrations, see pictures
-OpenOffice.org Writer : image button creation
-OpenOffice.org Writer : image control creation
-OpenOffice.org Writer : ImageMap
-OpenOffice.org Writer : ImageMap;definition
-OpenOffice.org Writer : ImageMap;editor
-OpenOffice.org Writer : images
-OpenOffice.org Writer : images;do not show
-OpenOffice.org Writer : images;ImageMap
-OpenOffice.org Writer : images;inserting and editing bitmaps
-OpenOffice.org Writer : images;inserting in text
-OpenOffice.org Writer : images;placeholders in presentations
-OpenOffice.org Writer : images, see also pictures
-OpenOffice.org Writer : IME
-OpenOffice.org Writer : IME;definition
-OpenOffice.org Writer : IME;showing/hiding
-OpenOffice.org Writer : import filters
-OpenOffice.org Writer : import restrictions for Microsoft Office
-OpenOffice.org Writer : importing
-OpenOffice.org Writer : importing;bitmaps
-OpenOffice.org Writer : importing;compatibility settings for text import
-OpenOffice.org Writer : importing;databases
-OpenOffice.org Writer : importing;documents in other formats
-OpenOffice.org Writer : importing;from XML
-OpenOffice.org Writer : importing;HTML and text documents
-OpenOffice.org Writer : importing;HTML with META tags
-OpenOffice.org Writer : importing;Microsoft Office documents with VBA code
-OpenOffice.org Writer : importing;styles from other files
-OpenOffice.org Writer : importing;tables in text format
-OpenOffice.org Writer : importing;templates
-OpenOffice.org Writer : inches
-OpenOffice.org Writer : indents
-OpenOffice.org Writer : indents;in text
-OpenOffice.org Writer : indents;setting on rulers
-OpenOffice.org Writer : Index tab in Help
-OpenOffice.org Writer : indexes
-OpenOffice.org Writer : indexes;alphabetical indexes
-OpenOffice.org Writer : indexes;backgrounds
-OpenOffice.org Writer : indexes;creating bibliographies
-OpenOffice.org Writer : indexes;creating user-defined indexes
-OpenOffice.org Writer : indexes;defining entries in
-OpenOffice.org Writer : indexes;editing or deleting entries
-OpenOffice.org Writer : indexes;editing/updating/deleting
-OpenOffice.org Writer : indexes;formatting
-OpenOffice.org Writer : indexes;master documents
-OpenOffice.org Writer : indexes;multiple documents
-OpenOffice.org Writer : indexes;showing/hiding Help index tab
-OpenOffice.org Writer : indexes;unprotecting
-OpenOffice.org Writer : indicator lines in text
-OpenOffice.org Writer : initial capitals in titles
-OpenOffice.org Writer : inner joins (Base)
-OpenOffice.org Writer : input fields in text
-OpenOffice.org Writer : input method window
-OpenOffice.org Writer : insert mode for entering text
-OpenOffice.org Writer : inserting
-OpenOffice.org Writer : inserting;applets
-OpenOffice.org Writer : inserting;captions
-OpenOffice.org Writer : inserting;cell ranges from spreadsheets
-OpenOffice.org Writer : inserting;charts
-OpenOffice.org Writer : inserting;clipboard options
-OpenOffice.org Writer : inserting;cross-references
-OpenOffice.org Writer : inserting;data from text documents
-OpenOffice.org Writer : inserting;datasource records in spreadsheets
-OpenOffice.org Writer : inserting;date fields
-OpenOffice.org Writer : inserting;drawings
-OpenOffice.org Writer : inserting;envelopes
-OpenOffice.org Writer : inserting;floating frames
-OpenOffice.org Writer : inserting;footnotes/endnotes
-OpenOffice.org Writer : inserting;form fields
-OpenOffice.org Writer : inserting;from Gallery into text
-OpenOffice.org Writer : inserting;horizontal lines
-OpenOffice.org Writer : inserting;hyperlinks
-OpenOffice.org Writer : inserting;hyperlinks from Navigator
-OpenOffice.org Writer : inserting;input fields
-OpenOffice.org Writer : inserting;line breaks in cells
-OpenOffice.org Writer : inserting;lines under headers
-OpenOffice.org Writer : inserting;movies/sounds
-OpenOffice.org Writer : inserting;new text tables defaults
-OpenOffice.org Writer : inserting;notes
-OpenOffice.org Writer : inserting;objects from Gallery
-OpenOffice.org Writer : inserting;OLE objects
-OpenOffice.org Writer : inserting;page breaks
-OpenOffice.org Writer : inserting;page numbers
-OpenOffice.org Writer : inserting;paragraph bullets
-OpenOffice.org Writer : inserting;paragraphs before/after tables
-OpenOffice.org Writer : inserting;pictures
-OpenOffice.org Writer : inserting;pictures, by dialog
-OpenOffice.org Writer : inserting;plug-ins
-OpenOffice.org Writer : inserting;scanned images
-OpenOffice.org Writer : inserting;sections
-OpenOffice.org Writer : inserting;special characters
-OpenOffice.org Writer : inserting;tab stops
-OpenOffice.org Writer : inserting;tables in text
-OpenOffice.org Writer : inserting;text blocks
-OpenOffice.org Writer : inserting;text documents
-OpenOffice.org Writer : inserting;text frames
-OpenOffice.org Writer : installing
-OpenOffice.org Writer : installing;ActiveX control
-OpenOffice.org Writer : installing;mobile device filters
-OpenOffice.org Writer : installing;UNO components
-OpenOffice.org Writer : instructions
-OpenOffice.org Writer : instructions;general
-OpenOffice.org Writer : instructions;OpenOffice.org Writer
-OpenOffice.org Writer : Internet
-OpenOffice.org Writer : Internet;Internet Explorer for displaying OpenOffice.org documents
-OpenOffice.org Writer : Internet;presentations
-OpenOffice.org Writer : Internet;starting searches
-OpenOffice.org Writer : Internet;turning off recognition of addresses
-OpenOffice.org Writer : Internet glossary
-OpenOffice.org Writer : interrupting numbered lists
-OpenOffice.org Writer : invert filter
-OpenOffice.org Writer : invisible areas
-OpenOffice.org Writer : italic text
-OpenOffice.org Writer : iterative references in spreadsheets
-OpenOffice.org Writer : Java
-OpenOffice.org Writer : Java;definition
-OpenOffice.org Writer : Java;scripting
-OpenOffice.org Writer : Java;setting options
-OpenOffice.org Writer : JDBC
-OpenOffice.org Writer : JDBC;databases (Base)
-OpenOffice.org Writer : JDBC;definition
-OpenOffice.org Writer : joining
-OpenOffice.org Writer : joining;numbered lists
-OpenOffice.org Writer : joining;paragraphs
-OpenOffice.org Writer : joining;tables (Base)
-OpenOffice.org Writer : joins in databases (Base)
-OpenOffice.org Writer : jumping
-OpenOffice.org Writer : jumping;to bookmarks
-OpenOffice.org Writer : jumping;to text elements
-OpenOffice.org Writer : justifying text
-OpenOffice.org Writer : kerning
-OpenOffice.org Writer : kerning;Asian texts
-OpenOffice.org Writer : kerning;definition
-OpenOffice.org Writer : kerning;in characters
-OpenOffice.org Writer : key fields for relations (Base)
-OpenOffice.org Writer : keyboard
-OpenOffice.org Writer : keyboard;accessibility OpenOffice.org Writer
-OpenOffice.org Writer : keyboard;adding or deleting rows/columns
-OpenOffice.org Writer : keyboard;assigning/editing shortcut keys
-OpenOffice.org Writer : keyboard;bold formatting
-OpenOffice.org Writer : keyboard;general commands
-OpenOffice.org Writer : keyboard;modifying the behavior of rows/columns
-OpenOffice.org Writer : keyboard;navigating and selecting in text
-OpenOffice.org Writer : keyboard;removing numbering
-OpenOffice.org Writer : keyboard;resizing rows/columns
-OpenOffice.org Writer : keys
-OpenOffice.org Writer : keys;adding push buttons
-OpenOffice.org Writer : keys;primary keys (Base)
-OpenOffice.org Writer : kiosk export
-OpenOffice.org Writer : labels
-OpenOffice.org Writer : labels;creating and synchronizing
-OpenOffice.org Writer : labels;for charts
-OpenOffice.org Writer : labels;for draw objects
-OpenOffice.org Writer : labels;form functions
-OpenOffice.org Writer : labels;from databases
-OpenOffice.org Writer : labels, see also names/callouts
-OpenOffice.org Writer : landscape and portrait
-OpenOffice.org Writer : languages
-OpenOffice.org Writer : languages;activating modules
-OpenOffice.org Writer : languages;Asian support
-OpenOffice.org Writer : languages;complex text layout
-OpenOffice.org Writer : languages;locale settings
-OpenOffice.org Writer : languages;recognition of
-OpenOffice.org Writer : languages;selecting
-OpenOffice.org Writer : languages;setting options
-OpenOffice.org Writer : languages;spellcheck
-OpenOffice.org Writer : languages;spellchecking and formatting
-OpenOffice.org Writer : large handles (Writer)
-OpenOffice.org Writer : large icons
-OpenOffice.org Writer : layer arrangement
-OpenOffice.org Writer : layout
-OpenOffice.org Writer : layout;importing Word documents
-OpenOffice.org Writer : layout;pages
-OpenOffice.org Writer : LDAP server
-OpenOffice.org Writer : LDAP server;address books (Base)
-OpenOffice.org Writer : LDAP server;sign on options
-OpenOffice.org Writer : leading between paragraphs
-OpenOffice.org Writer : left alignment of paragraphs
-OpenOffice.org Writer : left joins (Base)
-OpenOffice.org Writer : Left Page page style
-OpenOffice.org Writer : legends
-OpenOffice.org Writer : legends;charts
-OpenOffice.org Writer : legends;draw objects
-OpenOffice.org Writer : legends;rounding corners
-OpenOffice.org Writer : legends, see also captions
-OpenOffice.org Writer : Letter Wizard
-OpenOffice.org Writer : letters
-OpenOffice.org Writer : letters;creating form letters
-OpenOffice.org Writer : letters;inserting envelopes
-OpenOffice.org Writer : levels
-OpenOffice.org Writer : levels;changing outline levels
-OpenOffice.org Writer : levels;depth stagger
-OpenOffice.org Writer : lexicon, see thesaurus
-OpenOffice.org Writer : limits of tables (Writer)
-OpenOffice.org Writer : line breaks
-OpenOffice.org Writer : line breaks;in cells
-OpenOffice.org Writer : line breaks;removing
-OpenOffice.org Writer : line charts
-OpenOffice.org Writer : line numbers
-OpenOffice.org Writer : line spacing
-OpenOffice.org Writer : line spacing;context menu in paragraphs
-OpenOffice.org Writer : line spacing;paragraph
-OpenOffice.org Writer : line styles
-OpenOffice.org Writer : line styles;applying
-OpenOffice.org Writer : line styles;defining
-OpenOffice.org Writer : lines
-OpenOffice.org Writer : lines;automatic drawing on/off
-OpenOffice.org Writer : lines;contours (Draw/Impress)
-OpenOffice.org Writer : lines;defining ends
-OpenOffice.org Writer : lines;draw functions
-OpenOffice.org Writer : lines;drawing in text
-OpenOffice.org Writer : lines;editing points
-OpenOffice.org Writer : lines;footnotes/endnotes
-OpenOffice.org Writer : lines;inserting horizontal lines
-OpenOffice.org Writer : lines;removing automatic lines
-OpenOffice.org Writer : lines;under headers/above footers
-OpenOffice.org Writer : Lines and Page Breaks feature in Microsoft Office
-OpenOffice.org Writer : lines of text
-OpenOffice.org Writer : lines of text;alignment
-OpenOffice.org Writer : lines of text;indents
-OpenOffice.org Writer : lines of text;numbering
-OpenOffice.org Writer : lines of text;register-true
-OpenOffice.org Writer : lines of text;sorting paragraphs
-OpenOffice.org Writer : links
-OpenOffice.org Writer : links;between cells and controls
-OpenOffice.org Writer : links;by drag and drop
-OpenOffice.org Writer : links;character formats
-OpenOffice.org Writer : links;definition
-OpenOffice.org Writer : links;editing hyperlinks
-OpenOffice.org Writer : links;inserting
-OpenOffice.org Writer : links;inserting sections
-OpenOffice.org Writer : links;inserting text documents as
-OpenOffice.org Writer : links;modifying
-OpenOffice.org Writer : links;opening files with
-OpenOffice.org Writer : links;relational databases (Base)
-OpenOffice.org Writer : links;text frames
-OpenOffice.org Writer : links;turning off automatic recognition
-OpenOffice.org Writer : links;updating options (Writer)
-OpenOffice.org Writer : links;updating specific links
-OpenOffice.org Writer : list box creation
-OpenOffice.org Writer : lists
-OpenOffice.org Writer : lists;automatic numbering
-OpenOffice.org Writer : lists;AutoText shortcuts
-OpenOffice.org Writer : lists;changing levels
-OpenOffice.org Writer : lists;combining numbered lists
-OpenOffice.org Writer : lists;data assigned to controls
-OpenOffice.org Writer : lists;registered databases (Base)
-OpenOffice.org Writer : lists;regular expressions
-OpenOffice.org Writer : lists;removing/interrupting numbering
-OpenOffice.org Writer : live presentations on the Internet
-OpenOffice.org Writer : loading
-OpenOffice.org Writer : loading;documents
-OpenOffice.org Writer : loading;documents from other formats
-OpenOffice.org Writer : loading;HTML documents, automatically
-OpenOffice.org Writer : loading;Microsoft Office documents with VBA code
-OpenOffice.org Writer : loading;reloading
-OpenOffice.org Writer : loading;styles from other files
-OpenOffice.org Writer : loading;XML files
-OpenOffice.org Writer : locale settings
-OpenOffice.org Writer : logarithmic scaling along axes
-OpenOffice.org Writer : logical expressions
-OpenOffice.org Writer : lowercase letters
-OpenOffice.org Writer : lowercase letters;font effects
-OpenOffice.org Writer : lowercase letters;text
-OpenOffice.org Writer : lowering outline levels
-OpenOffice.org Writer : macros
-OpenOffice.org Writer : macros;assigning to events in forms
-OpenOffice.org Writer : macros;in MS Office documents
-OpenOffice.org Writer : macros;interrupting
-OpenOffice.org Writer : macros;organizing
-OpenOffice.org Writer : macros;recording
-OpenOffice.org Writer : macros;security
-OpenOffice.org Writer : macros;security warning dialog
-OpenOffice.org Writer : macros;selecting security warnings
-OpenOffice.org Writer : magnifiers
-OpenOffice.org Writer : mail merge
-OpenOffice.org Writer : Mail Merge feature in Microsoft Office
-OpenOffice.org Writer : manual hyphenation in text
-OpenOffice.org Writer : manual numbering in text
-OpenOffice.org Writer : manual page breaks
-OpenOffice.org Writer : marginal numbers on text pages
-OpenOffice.org Writer : margins
-OpenOffice.org Writer : margins;pages
-OpenOffice.org Writer : margins;setting with the mouse
-OpenOffice.org Writer : margins;shadows
-OpenOffice.org Writer : marking changes
-OpenOffice.org Writer : Markup feature in Microsoft Office
-OpenOffice.org Writer : master documents
-OpenOffice.org Writer : matching conditional text in fields
-OpenOffice.org Writer : Math formula editor
-OpenOffice.org Writer : measurement units
-OpenOffice.org Writer : measurement units;changing on rulers
-OpenOffice.org Writer : measurement units;converting
-OpenOffice.org Writer : measurement units;selecting
-OpenOffice.org Writer : Media Player window
-OpenOffice.org Writer : menus
-OpenOffice.org Writer : menus;activating context menus
-OpenOffice.org Writer : menus;customizing
-OpenOffice.org Writer : menus;inactive menu items
-OpenOffice.org Writer : merging
-OpenOffice.org Writer : merging;cells
-OpenOffice.org Writer : merging;cells, by keyboard
-OpenOffice.org Writer : merging;documents
-OpenOffice.org Writer : merging;indexes
-OpenOffice.org Writer : merging;numbered lists
-OpenOffice.org Writer : merging;tables
-OpenOffice.org Writer : META tags
-OpenOffice.org Writer : metrics
-OpenOffice.org Writer : metrics;converting
-OpenOffice.org Writer : metrics;document formatting (Writer)
-OpenOffice.org Writer : metrics;in sheets
-OpenOffice.org Writer : Microsoft Office
-OpenOffice.org Writer : Microsoft Office;Access databases (base)
-OpenOffice.org Writer : Microsoft Office;as standard file format
-OpenOffice.org Writer : Microsoft Office;document import restrictions
-OpenOffice.org Writer : Microsoft Office;feature comparisons
-OpenOffice.org Writer : Microsoft Office;importing password protected files
-OpenOffice.org Writer : Microsoft Office;importing Word documents
-OpenOffice.org Writer : Microsoft Office;importing/exporting VBA code
-OpenOffice.org Writer : Microsoft Office;new users information
-OpenOffice.org Writer : Microsoft Office;opening Microsoft documents
-OpenOffice.org Writer : Microsoft Office;reassigning document types
-OpenOffice.org Writer : mirrored page layout
-OpenOffice.org Writer : mobile device filters
-OpenOffice.org Writer : models in XForms
-OpenOffice.org Writer : modifying, see changing
-OpenOffice.org Writer : months
-OpenOffice.org Writer : months;automatically completing
-OpenOffice.org Writer : more controls
-OpenOffice.org Writer : mosaic filter
-OpenOffice.org Writer : mouse
-OpenOffice.org Writer : mouse;moving and copying text
-OpenOffice.org Writer : mouse;pointers when using drag and drop
-OpenOffice.org Writer : mouse;positioning
-OpenOffice.org Writer : moving
-OpenOffice.org Writer : moving;headings
-OpenOffice.org Writer : moving;objects and frames
-OpenOffice.org Writer : moving;tab stops on ruler
-OpenOffice.org Writer : moving;text sections
-OpenOffice.org Writer : moving;toolbars
-OpenOffice.org Writer : moving;using guide lines in presentations
-OpenOffice.org Writer : MS ADO interface (Base)
-OpenOffice.org Writer : multi-line titles in forms
-OpenOffice.org Writer : multi-page view of documents
-OpenOffice.org Writer : multicolumn text
-OpenOffice.org Writer : multiple documents
-OpenOffice.org Writer : multiple documents;indexes
-OpenOffice.org Writer : multiple documents;opening
-OpenOffice.org Writer : My Documents folder
-OpenOffice.org Writer : My Documents folder;changing work directory
-OpenOffice.org Writer : My Documents folder;opening
-OpenOffice.org Writer : MySQL databases (Base)
-OpenOffice.org Writer : names
-OpenOffice.org Writer : names;chapter names in headers
-OpenOffice.org Writer : names;multi-line titles
-OpenOffice.org Writer : names;objects
-OpenOffice.org Writer : names, see also labels/callouts
-OpenOffice.org Writer : namespace organization in XForms
-OpenOffice.org Writer : native SQL (Base)
-OpenOffice.org Writer : navigating
-OpenOffice.org Writer : navigating;in documents
-OpenOffice.org Writer : navigating;in text, with keyboard
-OpenOffice.org Writer : Navigation bar
-OpenOffice.org Writer : Navigation bar;controls
-OpenOffice.org Writer : Navigation bar;forms
-OpenOffice.org Writer : Navigator
-OpenOffice.org Writer : Navigator;contents as lists
-OpenOffice.org Writer : Navigator;docking
-OpenOffice.org Writer : Navigator;docking and resizing
-OpenOffice.org Writer : Navigator;heading levels and chapters
-OpenOffice.org Writer : Navigator;inserting hyperlinks
-OpenOffice.org Writer : Navigator;master documents
-OpenOffice.org Writer : Navigator;overview in texts
-OpenOffice.org Writer : Navigator;working with
-OpenOffice.org Writer : net charts
-OpenOffice.org Writer : network identity options
-OpenOffice.org Writer : networks and AutoText directories
-OpenOffice.org Writer : new databases
-OpenOffice.org Writer : new documents
-OpenOffice.org Writer : new German spellcheck
-OpenOffice.org Writer : new lines in cells
-OpenOffice.org Writer : new page styles from selection
-OpenOffice.org Writer : new windows
-OpenOffice.org Writer : next page number in footers
-OpenOffice.org Writer : non-breaking dashes
-OpenOffice.org Writer : non-breaking spaces (Writer)
-OpenOffice.org Writer : non-printing characters (Writer)
-OpenOffice.org Writer : non-printing text
-OpenOffice.org Writer : notes
-OpenOffice.org Writer : notes;displaying (Calc)
-OpenOffice.org Writer : notes;inserting and editing
-OpenOffice.org Writer : notes;printing in text
-OpenOffice.org Writer : number formats
-OpenOffice.org Writer : number formats;codes
-OpenOffice.org Writer : number formats;formats
-OpenOffice.org Writer : number formats;recognition in text tables
-OpenOffice.org Writer : number of characters
-OpenOffice.org Writer : number of pages
-OpenOffice.org Writer : number of sheets
-OpenOffice.org Writer : number of tables
-OpenOffice.org Writer : number of words
-OpenOffice.org Writer : numbering
-OpenOffice.org Writer : numbering;captions
-OpenOffice.org Writer : numbering;changing the level of
-OpenOffice.org Writer : numbering;combining
-OpenOffice.org Writer : numbering;headings
-OpenOffice.org Writer : numbering;lines
-OpenOffice.org Writer : numbering;lists, while typing
-OpenOffice.org Writer : numbering;manually/by styles
-OpenOffice.org Writer : numbering;options
-OpenOffice.org Writer : numbering;pages
-OpenOffice.org Writer : numbering;paragraphs
-OpenOffice.org Writer : numbering;paragraphs, on and off
-OpenOffice.org Writer : numbering;quotations/similar items
-OpenOffice.org Writer : numbering;removing/interrupting
-OpenOffice.org Writer : numbering;style categories
-OpenOffice.org Writer : numbering;turning off
-OpenOffice.org Writer : numbering;using automatically
-OpenOffice.org Writer : numbers
-OpenOffice.org Writer : numbers;automatic recognition in text tables
-OpenOffice.org Writer : numbers;date, time and currency formats
-OpenOffice.org Writer : numbers;decimal places (Calc)
-OpenOffice.org Writer : numbers;formatting options for selected cells
-OpenOffice.org Writer : numbers;line numbering
-OpenOffice.org Writer : numbers;lists
-OpenOffice.org Writer : numerical fields in forms
-OpenOffice.org Writer : objects
-OpenOffice.org Writer : objects;always moveable (Impress/Draw)
-OpenOffice.org Writer : objects;anchoring options
-OpenOffice.org Writer : objects;arranging within stacks
-OpenOffice.org Writer : objects;captioning
-OpenOffice.org Writer : objects;captioning automatically
-OpenOffice.org Writer : objects;contour wrap
-OpenOffice.org Writer : objects;contours in presentations
-OpenOffice.org Writer : objects;copying when moving in presentations
-OpenOffice.org Writer : objects;cross-referencing
-OpenOffice.org Writer : objects;defining borders
-OpenOffice.org Writer : objects;defining hyperlinks
-OpenOffice.org Writer : objects;definition
-OpenOffice.org Writer : objects;displaying in spreadsheets
-OpenOffice.org Writer : objects;displaying in text documents
-OpenOffice.org Writer : objects;editing
-OpenOffice.org Writer : objects;finding by Navigator
-OpenOffice.org Writer : objects;inserting from Gallery
-OpenOffice.org Writer : objects;inserting OLE objects
-OpenOffice.org Writer : objects;moving and resizing with keyboard
-OpenOffice.org Writer : objects;moving and resizing with mouse
-OpenOffice.org Writer : objects;naming
-OpenOffice.org Writer : objects;opening
-OpenOffice.org Writer : objects;properties of charts
-OpenOffice.org Writer : objects;quickly moving to
-OpenOffice.org Writer : objects;quickly moving to, within text
-OpenOffice.org Writer : objects;titles and descriptions
-OpenOffice.org Writer : ODBC
-OpenOffice.org Writer : ODBC;database (Base)
-OpenOffice.org Writer : ODBC;definition
-OpenOffice.org Writer : ODF file formats
-OpenOffice.org Writer : Office
-OpenOffice.org Writer : Office;Microsoft Office and OpenOffice.org
-OpenOffice.org Writer : old German spellcheck
-OpenOffice.org Writer : OLE
-OpenOffice.org Writer : OLE;definition
-OpenOffice.org Writer : OLE objects
-OpenOffice.org Writer : OLE objects;arranging within stacks
-OpenOffice.org Writer : OLE objects;borders
-OpenOffice.org Writer : OLE objects;captions (Writer)
-OpenOffice.org Writer : OLE objects;cross-referencing
-OpenOffice.org Writer : OLE objects;inserting
-OpenOffice.org Writer : OLE objects;inserting tables in
-OpenOffice.org Writer : OLE objects;number of
-OpenOffice.org Writer : OLE objects;protecting
-OpenOffice.org Writer : one and a half line spacing in text
-OpenOffice.org Writer : online registration
-OpenOffice.org Writer : online update options
-OpenOffice.org Writer : online updates
-OpenOffice.org Writer : online updates;checking automatically
-OpenOffice.org Writer : online updates;checking manually
-OpenOffice.org Writer : Open/Save dialogs
-OpenOffice.org Writer : OpenDocument file formats
-OpenOffice.org Writer : OpenGL
-OpenOffice.org Writer : OpenGL;definition
-OpenOffice.org Writer : OpenGL;optimized output
-OpenOffice.org Writer : opening
-OpenOffice.org Writer : opening;context menus
-OpenOffice.org Writer : opening;database files
-OpenOffice.org Writer : opening;dialog settings
-OpenOffice.org Writer : opening;documents
-OpenOffice.org Writer : opening;documents from other formats
-OpenOffice.org Writer : opening;files with links
-OpenOffice.org Writer : opening;files, with placeholders
-OpenOffice.org Writer : opening;forms
-OpenOffice.org Writer : opening;Microsoft Office files
-OpenOffice.org Writer : opening;mobile device documents
-OpenOffice.org Writer : opening;objects
-OpenOffice.org Writer : opening;reports
-OpenOffice.org Writer : opening;several files
-OpenOffice.org Writer : opening;XForms
-OpenOffice.org Writer : OpenOffice.org Base data sources
-OpenOffice.org Writer : OpenOffice.org Basic scripts in HTML documents
-OpenOffice.org Writer : OpenOffice.org documents
-OpenOffice.org Writer : OpenOffice.org documents;mobile device filters
-OpenOffice.org Writer : OpenOffice.org documents;viewing and editing in Internet Explorer
-OpenOffice.org Writer : OpenOffice.org Math start
-OpenOffice.org Writer : OpenOffice.org Writer
-OpenOffice.org Writer : OpenOffice.org Writer;instructions
-OpenOffice.org Writer : OpenOffice.org Writer;special HTML tags
-OpenOffice.org Writer : operators
-OpenOffice.org Writer : operators;default filters
-OpenOffice.org Writer : operators;in formulas
-OpenOffice.org Writer : optional hyphens (Writer)
-OpenOffice.org Writer : options
-OpenOffice.org Writer : options;accessibility
-OpenOffice.org Writer : options;appearance
-OpenOffice.org Writer : options;compatibility (Writer)
-OpenOffice.org Writer : options;network identity
-OpenOffice.org Writer : options;online update
-OpenOffice.org Writer : options;tools
-OpenOffice.org Writer : Oracle databases (base)
-OpenOffice.org Writer : order of chart data
-OpenOffice.org Writer : ordering
-OpenOffice.org Writer : ordering;objects
-OpenOffice.org Writer : ordering;printing in reverse order
-OpenOffice.org Writer : organizing
-OpenOffice.org Writer : organizing;footnotes
-OpenOffice.org Writer : organizing;macros and scripts
-OpenOffice.org Writer : organizing;namespaces in XForms
-OpenOffice.org Writer : organizing;styles
-OpenOffice.org Writer : organizing;templates
-OpenOffice.org Writer : organizing;templates (guide)
-OpenOffice.org Writer : orientation of pages
-OpenOffice.org Writer : original size
-OpenOffice.org Writer : original size;printing in OpenOffice.org Math
-OpenOffice.org Writer : original size;restoring after cropping
-OpenOffice.org Writer : orphans
-OpenOffice.org Writer : outlines
-OpenOffice.org Writer : outlines;arranging chapters
-OpenOffice.org Writer : outlines;font effects
-OpenOffice.org Writer : outlines;numbering
-OpenOffice.org Writer : outlines;outline symbols
-OpenOffice.org Writer : outlines;sending to presentations
-OpenOffice.org Writer : overviews
-OpenOffice.org Writer : overviews;Navigator in text documents
-OpenOffice.org Writer : overviews;printing
-OpenOffice.org Writer : overwrite mode
-OpenOffice.org Writer : packages, see extensions
-OpenOffice.org Writer : page breaks
-OpenOffice.org Writer : page breaks;displaying (Calc)
-OpenOffice.org Writer : page breaks;inserting and deleting
-OpenOffice.org Writer : page breaks;tables
-OpenOffice.org Writer : page counts
-OpenOffice.org Writer : page formats
-OpenOffice.org Writer : page formats;changing individual pages
-OpenOffice.org Writer : page formats;maximizing
-OpenOffice.org Writer : page formats;restriction
-OpenOffice.org Writer : page margins on rulers
-OpenOffice.org Writer : page numbers
-OpenOffice.org Writer : page numbers;continuation pages
-OpenOffice.org Writer : page numbers;footers
-OpenOffice.org Writer : page numbers;inserting/defining/formatting
-OpenOffice.org Writer : page styles
-OpenOffice.org Writer : page styles;backgrounds
-OpenOffice.org Writer : page styles;changing
-OpenOffice.org Writer : page styles;changing from selection
-OpenOffice.org Writer : page styles;creating and applying
-OpenOffice.org Writer : page styles;editing/applying with statusbar
-OpenOffice.org Writer : page styles;left and right pages
-OpenOffice.org Writer : page styles;orientation
-OpenOffice.org Writer : page styles;page numbering
-OpenOffice.org Writer : page styles;style categories
-OpenOffice.org Writer : pages
-OpenOffice.org Writer : pages;backgrounds
-OpenOffice.org Writer : pages;backgrounds in spreadsheets
-OpenOffice.org Writer : pages;continuation pages
-OpenOffice.org Writer : pages;defining borders
-OpenOffice.org Writer : pages;formatting and numbering
-OpenOffice.org Writer : pages;inserting/deleting page breaks
-OpenOffice.org Writer : pages;left and right pages
-OpenOffice.org Writer : pages;number of
-OpenOffice.org Writer : pages;numbers and count of
-OpenOffice.org Writer : pages;orientation
-OpenOffice.org Writer : pages;previews
-OpenOffice.org Writer : pages;printing multiple on one sheet
-OpenOffice.org Writer : pages;printing page names in presentations
-OpenOffice.org Writer : pages;register-true
-OpenOffice.org Writer : pages;scaling
-OpenOffice.org Writer : pages;selecting one to print
-OpenOffice.org Writer : paint box
-OpenOffice.org Writer : paint can symbol
-OpenOffice.org Writer : pair kerning
-OpenOffice.org Writer : Palm file filters
-OpenOffice.org Writer : paper formats
-OpenOffice.org Writer : paper orientation
-OpenOffice.org Writer : paper size warning
-OpenOffice.org Writer : paper tray selection
-OpenOffice.org Writer : paper trays
-OpenOffice.org Writer : paragraph marks
-OpenOffice.org Writer : paragraph marks;displaying (Writer)
-OpenOffice.org Writer : paragraph marks;finding & replacing
-OpenOffice.org Writer : paragraph styles
-OpenOffice.org Writer : paragraph styles;applying to adjacent paragraphs
-OpenOffice.org Writer : paragraph styles;languages
-OpenOffice.org Writer : paragraph styles;modifying basic fonts
-OpenOffice.org Writer : paragraph styles;numbering
-OpenOffice.org Writer : paragraph styles;style categories
-OpenOffice.org Writer : paragraphs
-OpenOffice.org Writer : paragraphs;alignment
-OpenOffice.org Writer : paragraphs;Asian typography
-OpenOffice.org Writer : paragraphs;automatic numbering
-OpenOffice.org Writer : paragraphs;backgrounds
-OpenOffice.org Writer : paragraphs;bulleted
-OpenOffice.org Writer : paragraphs;defining borders
-OpenOffice.org Writer : paragraphs;hidden paragraphs (Writer)
-OpenOffice.org Writer : paragraphs;hiding
-OpenOffice.org Writer : paragraphs;increasing indents of
-OpenOffice.org Writer : paragraphs;indents
-OpenOffice.org Writer : paragraphs;indents, margins and columns
-OpenOffice.org Writer : paragraphs;inserting before/after tables
-OpenOffice.org Writer : paragraphs;inserting bullets
-OpenOffice.org Writer : paragraphs;joining
-OpenOffice.org Writer : paragraphs;keeping together at breaks
-OpenOffice.org Writer : paragraphs;moving by keyboard
-OpenOffice.org Writer : paragraphs;numbering automatically
-OpenOffice.org Writer : paragraphs;numbering non-consecutive
-OpenOffice.org Writer : paragraphs;numbering on/off
-OpenOffice.org Writer : paragraphs;register-true
-OpenOffice.org Writer : paragraphs;removing blank ones
-OpenOffice.org Writer : paragraphs;spacing
-OpenOffice.org Writer : paragraphs;tab stops
-OpenOffice.org Writer : parameters
-OpenOffice.org Writer : parameters;command line
-OpenOffice.org Writer : parameters;queries (Base)
-OpenOffice.org Writer : passwords for protecting contents
-OpenOffice.org Writer : pasting
-OpenOffice.org Writer : pasting;cell ranges
-OpenOffice.org Writer : pasting;cell ranges from spreadsheets
-OpenOffice.org Writer : pasting;cut/copied text sections
-OpenOffice.org Writer : pasting;data from text documents
-OpenOffice.org Writer : pasting;draw objects
-OpenOffice.org Writer : pasting;draw objects from other documents
-OpenOffice.org Writer : pasting;formatted/unformatted text
-OpenOffice.org Writer : pasting;from data source view
-OpenOffice.org Writer : pasting;from data sources to OpenOffice.org Calc
-OpenOffice.org Writer : pasting;pictures from other documents
-OpenOffice.org Writer : pasting;results of formulas
-OpenOffice.org Writer : pasting;sheet areas in text documents
-OpenOffice.org Writer : pasting;to Gallery
-OpenOffice.org Writer : paths
-OpenOffice.org Writer : paths;changing work directory
-OpenOffice.org Writer : paths;defaults
-OpenOffice.org Writer : pattern editor
-OpenOffice.org Writer : pattern fields
-OpenOffice.org Writer : pattern fields;form functions
-OpenOffice.org Writer : patterns for objects
-OpenOffice.org Writer : PDF
-OpenOffice.org Writer : PDF;export
-OpenOffice.org Writer : PDF;PostScript to PDF converter, UNIX
-OpenOffice.org Writer : personal data input
-OpenOffice.org Writer : phonetic guide
-OpenOffice.org Writer : picklist creation
-OpenOffice.org Writer : pictures
-OpenOffice.org Writer : pictures;adding to Gallery
-OpenOffice.org Writer : pictures;anchoring options
-OpenOffice.org Writer : pictures;arranging within stacks
-OpenOffice.org Writer : pictures;assigning macros
-OpenOffice.org Writer : pictures;backgrounds
-OpenOffice.org Writer : pictures;borders
-OpenOffice.org Writer : pictures;captions (Writer)
-OpenOffice.org Writer : pictures;changing paths
-OpenOffice.org Writer : pictures;cropping and zooming
-OpenOffice.org Writer : pictures;cross-referencing
-OpenOffice.org Writer : pictures;defining hyperlinks
-OpenOffice.org Writer : pictures;displaying in Calc
-OpenOffice.org Writer : pictures;displaying in Writer (Writer)
-OpenOffice.org Writer : pictures;do not show
-OpenOffice.org Writer : pictures;drag and drop between documents
-OpenOffice.org Writer : pictures;drawing
-OpenOffice.org Writer : pictures;editing
-OpenOffice.org Writer : pictures;filters
-OpenOffice.org Writer : pictures;ImageMap
-OpenOffice.org Writer : pictures;inserting automatically
-OpenOffice.org Writer : pictures;inserting by dialog
-OpenOffice.org Writer : pictures;inserting from Draw
-OpenOffice.org Writer : pictures;inserting from Gallery
-OpenOffice.org Writer : pictures;inserting from Gallery into text
-OpenOffice.org Writer : pictures;inserting options
-OpenOffice.org Writer : pictures;number of
-OpenOffice.org Writer : pictures;printing
-OpenOffice.org Writer : pictures;scaling/resizing
-OpenOffice.org Writer : pictures;scanning
-OpenOffice.org Writer : pie charts
-OpenOffice.org Writer : Pivot tables feature in Microsoft Office
-OpenOffice.org Writer : pixel editor
-OpenOffice.org Writer : pixel graphics
-OpenOffice.org Writer : pixel graphics;inserting and editing
-OpenOffice.org Writer : pixel patterns
-OpenOffice.org Writer : placeholders
-OpenOffice.org Writer : placeholders;in SQL queries
-OpenOffice.org Writer : placeholders;on opening files
-OpenOffice.org Writer : placing toolbars
-OpenOffice.org Writer : playing movies and sound files
-OpenOffice.org Writer : plotting data as charts
-OpenOffice.org Writer : plug-ins
-OpenOffice.org Writer : plug-ins;activating and deactivating
-OpenOffice.org Writer : plug-ins;definition
-OpenOffice.org Writer : plug-ins;inserting
-OpenOffice.org Writer : pocket device appliances
-OpenOffice.org Writer : Pocket PC file filters
-OpenOffice.org Writer : points
-OpenOffice.org Writer : points;reducing editing points when snapping (Impress/Draw)
-OpenOffice.org Writer : polygon drawing
-OpenOffice.org Writer : pop-art filter
-OpenOffice.org Writer : portable document format
-OpenOffice.org Writer : portrait and landscape
-OpenOffice.org Writer : positioning
-OpenOffice.org Writer : positioning;draw objects and controls
-OpenOffice.org Writer : positioning;fonts
-OpenOffice.org Writer : positioning;objects
-OpenOffice.org Writer : positioning;objects (guide)
-OpenOffice.org Writer : positioning;toolbars
-OpenOffice.org Writer : post method for form transmissions
-OpenOffice.org Writer : posterizing filter
-OpenOffice.org Writer : PostScript
-OpenOffice.org Writer : PostScript;creating files
-OpenOffice.org Writer : PostScript;PDF converter, UNIX
-OpenOffice.org Writer : PowerPoint export
-OpenOffice.org Writer : precision as shown (Calc)
-OpenOffice.org Writer : predefining fonts
-OpenOffice.org Writer : presentations
-OpenOffice.org Writer : presentations;creating/opening
-OpenOffice.org Writer : presentations;inserting spreadsheet cells
-OpenOffice.org Writer : presentations;live on the Internet
-OpenOffice.org Writer : presentations;print menu
-OpenOffice.org Writer : presentations;saving
-OpenOffice.org Writer : presentations;saving automatically
-OpenOffice.org Writer : presentations;saving in other formats
-OpenOffice.org Writer : presentations;sending as e-mail
-OpenOffice.org Writer : presentations;starting with wizard
-OpenOffice.org Writer : presentations;wizards
-OpenOffice.org Writer : press buttons, see push buttons
-OpenOffice.org Writer : previews
-OpenOffice.org Writer : previews;book preview
-OpenOffice.org Writer : previews;fonts lists
-OpenOffice.org Writer : previews;print layouts
-OpenOffice.org Writer : primary keys
-OpenOffice.org Writer : primary keys;defining
-OpenOffice.org Writer : primary keys;inserting (Base)
-OpenOffice.org Writer : print area selection
-OpenOffice.org Writer : print layout checks
-OpenOffice.org Writer : printer metrics for document formatting (Writer)
-OpenOffice.org Writer : printers
-OpenOffice.org Writer : printers;adding, UNIX
-OpenOffice.org Writer : printers;choosing
-OpenOffice.org Writer : printers;default printer
-OpenOffice.org Writer : printers;faxes under UNIX
-OpenOffice.org Writer : printers;maximum page formats
-OpenOffice.org Writer : printers;paper trays
-OpenOffice.org Writer : printers;properties
-OpenOffice.org Writer : printing
-OpenOffice.org Writer : printing;AutoText shortcuts
-OpenOffice.org Writer : printing;black and white
-OpenOffice.org Writer : printing;brochures
-OpenOffice.org Writer : printing;colors in grayscale
-OpenOffice.org Writer : printing;copies
-OpenOffice.org Writer : printing;creating individual jobs
-OpenOffice.org Writer : printing;dates in presentations
-OpenOffice.org Writer : printing;directly
-OpenOffice.org Writer : printing;documents
-OpenOffice.org Writer : printing;drawings defaults
-OpenOffice.org Writer : printing;elements in text documents
-OpenOffice.org Writer : printing;faster
-OpenOffice.org Writer : printing;fitting to pages in OpenOffice.org Math
-OpenOffice.org Writer : printing;fitting to pages in presentations
-OpenOffice.org Writer : printing;formulas in OpenOffice.org Math
-OpenOffice.org Writer : printing;hidden pages of presentations
-OpenOffice.org Writer : printing;hiding text from printing
-OpenOffice.org Writer : printing;in original size in OpenOffice.org Math
-OpenOffice.org Writer : printing;individual brochures
-OpenOffice.org Writer : printing;left/right pages
-OpenOffice.org Writer : printing;multiple pages per sheet
-OpenOffice.org Writer : printing;portrait/landscape format
-OpenOffice.org Writer : printing;previews
-OpenOffice.org Writer : printing;queries (Base)
-OpenOffice.org Writer : printing;reverse order
-OpenOffice.org Writer : printing;scaling in OpenOffice.org Math
-OpenOffice.org Writer : printing;selections
-OpenOffice.org Writer : printing;text always in black
-OpenOffice.org Writer : printing;text in reverse order
-OpenOffice.org Writer : printing;tiling pages in presentations
-OpenOffice.org Writer : printing;transparencies
-OpenOffice.org Writer : printing;warnings
-OpenOffice.org Writer : printing;without scaling in presentations
-OpenOffice.org Writer : printing speed
-OpenOffice.org Writer : programming
-OpenOffice.org Writer : programming;OpenOffice.org
-OpenOffice.org Writer : programming;scripting
-OpenOffice.org Writer : promoting heading levels
-OpenOffice.org Writer : properties
-OpenOffice.org Writer : properties;charts
-OpenOffice.org Writer : properties;fields
-OpenOffice.org Writer : properties;fields in databases
-OpenOffice.org Writer : properties;files
-OpenOffice.org Writer : properties;form controls
-OpenOffice.org Writer : properties;forms
-OpenOffice.org Writer : properties;printers
-OpenOffice.org Writer : properties;smooth lines in line charts/XY charts
-OpenOffice.org Writer : proportional distribution of tables
-OpenOffice.org Writer : protected contents
-OpenOffice.org Writer : protected dashes
-OpenOffice.org Writer : protected database tables
-OpenOffice.org Writer : protected documents
-OpenOffice.org Writer : protected spaces
-OpenOffice.org Writer : protected spaces;inserting
-OpenOffice.org Writer : protected spaces;showing (Writer)
-OpenOffice.org Writer : protecting
-OpenOffice.org Writer : protecting;contents
-OpenOffice.org Writer : protecting;recorded changes
-OpenOffice.org Writer : protecting;sections
-OpenOffice.org Writer : proxy settings
-OpenOffice.org Writer : push buttons
-OpenOffice.org Writer : push buttons;adding to documents
-OpenOffice.org Writer : push buttons;creating
-OpenOffice.org Writer : queries
-OpenOffice.org Writer : queries;copying (Base)
-OpenOffice.org Writer : queries;creating in design view (Base)
-OpenOffice.org Writer : queries;creating in SQL view
-OpenOffice.org Writer : queries;defining (Base)
-OpenOffice.org Writer : queries;deleting table links (Base)
-OpenOffice.org Writer : queries;editing in data source view
-OpenOffice.org Writer : queries;formulating filter conditions (Base)
-OpenOffice.org Writer : queries;joining tables (Base)
-OpenOffice.org Writer : queries;missing elements (Base)
-OpenOffice.org Writer : queries;overview (Base)
-OpenOffice.org Writer : queries;parameter queries (Base)
-OpenOffice.org Writer : queries;printing (Base)
-OpenOffice.org Writer : Query Wizard (Base)
-OpenOffice.org Writer : quickstarter
-OpenOffice.org Writer : quotation marks
-OpenOffice.org Writer : quotation marks;changing automatically
-OpenOffice.org Writer : quotation marks;replacing
-OpenOffice.org Writer : quotes
-OpenOffice.org Writer : quotes;custom
-OpenOffice.org Writer : radar charts, see net charts
-OpenOffice.org Writer : radio button creation
-OpenOffice.org Writer : read-only documents
-OpenOffice.org Writer : read-only documents;cursor
-OpenOffice.org Writer : read-only documents;database tables on/off
-OpenOffice.org Writer : read-only documents;editing
-OpenOffice.org Writer : read-only documents;opening documents as
-OpenOffice.org Writer : read-only items in Data Navigator
-OpenOffice.org Writer : read-only sections
-OpenOffice.org Writer : rearranging headings
-OpenOffice.org Writer : recognition of languages
-OpenOffice.org Writer : recognizing URLs automatically
-OpenOffice.org Writer : recording
-OpenOffice.org Writer : recording;changes
-OpenOffice.org Writer : recording;macros
-OpenOffice.org Writer : records
-OpenOffice.org Writer : records;inserting notes
-OpenOffice.org Writer : records;protecting
-OpenOffice.org Writer : records;saving
-OpenOffice.org Writer : records;searching in databases
-OpenOffice.org Writer : rectangles with round corners
-OpenOffice.org Writer : recursions in spreadsheets
-OpenOffice.org Writer : redo command
-OpenOffice.org Writer : reduced printing
-OpenOffice.org Writer : reduced printing of multiple pages
-OpenOffice.org Writer : reducing rows and columns in text tables
-OpenOffice.org Writer : reference lines
-OpenOffice.org Writer : references
-OpenOffice.org Writer : references;displaying in color (Calc)
-OpenOffice.org Writer : references;expanding (Calc)
-OpenOffice.org Writer : references;in Writer tables
-OpenOffice.org Writer : references;inserting cross-references
-OpenOffice.org Writer : references;iterative (Calc)
-OpenOffice.org Writer : references;master documents
-OpenOffice.org Writer : references;modifying cross-references
-OpenOffice.org Writer : Refresh Data feature in Microsoft Office
-OpenOffice.org Writer : refusing word completions
-OpenOffice.org Writer : register-true
-OpenOffice.org Writer : register-true;definition
-OpenOffice.org Writer : register-true;pages and paragraphs
-OpenOffice.org Writer : registering
-OpenOffice.org Writer : registering;address books
-OpenOffice.org Writer : registering;databases (Base)
-OpenOffice.org Writer : registering;OpenOffice.org
-OpenOffice.org Writer : regression curves in charts
-OpenOffice.org Writer : regular expressions
-OpenOffice.org Writer : regular expressions;list of
-OpenOffice.org Writer : regular expressions;opening files
-OpenOffice.org Writer : regular expressions;searching
-OpenOffice.org Writer : rejecting word completions
-OpenOffice.org Writer : related words in thesaurus
-OpenOffice.org Writer : relational databases (Base)
-OpenOffice.org Writer : relations
-OpenOffice.org Writer : relations;creating and deleting (Base)
-OpenOffice.org Writer : relations;joining tables (Base)
-OpenOffice.org Writer : relations;properties (Base)
-OpenOffice.org Writer : relative distribution of table cells
-OpenOffice.org Writer : relative hyperlinks
-OpenOffice.org Writer : relative saving of URLs
-OpenOffice.org Writer : reloading
-OpenOffice.org Writer : reloading;documents
-OpenOffice.org Writer : reloading;HTML documents, automatically
-OpenOffice.org Writer : remarks, see also notes
-OpenOffice.org Writer : remote configurations
-OpenOffice.org Writer : remove noise filter
-OpenOffice.org Writer : removing
-OpenOffice.org Writer : removing;bullets and numbering
-OpenOffice.org Writer : removing;bullets in text documents
-OpenOffice.org Writer : removing;cell protection in text documents
-OpenOffice.org Writer : removing;form filters
-OpenOffice.org Writer : removing, see also deleting
-OpenOffice.org Writer : reorganizing charts
-OpenOffice.org Writer : repeating
-OpenOffice.org Writer : repeating;table headings after page breaks
-OpenOffice.org Writer : Replace text as you type feature in Microsoft Office
-OpenOffice.org Writer : replacement options
-OpenOffice.org Writer : replacement table
-OpenOffice.org Writer : replacing
-OpenOffice.org Writer : replacing;AutoCorrect function
-OpenOffice.org Writer : replacing;dashes
-OpenOffice.org Writer : replacing;databases
-OpenOffice.org Writer : replacing;fields, by text
-OpenOffice.org Writer : replacing;objects from Gallery
-OpenOffice.org Writer : replacing;text and text formats
-OpenOffice.org Writer : Report Builder
-OpenOffice.org Writer : reports
-OpenOffice.org Writer : reports;creating
-OpenOffice.org Writer : reports;error reports
-OpenOffice.org Writer : reports;opening and editing
-OpenOffice.org Writer : reports;templates
-OpenOffice.org Writer : resetting
-OpenOffice.org Writer : resetting;fonts
-OpenOffice.org Writer : resetting;templates
-OpenOffice.org Writer : resizing
-OpenOffice.org Writer : resizing;aspect ratio
-OpenOffice.org Writer : resizing;objects and frames, by keyboard
-OpenOffice.org Writer : resizing;objects, by mouse
-OpenOffice.org Writer : resizing;rows and columns in text tables
-OpenOffice.org Writer : resizing;text frames, by mouse
-OpenOffice.org Writer : resizing;windows
-OpenOffice.org Writer : resizing, see also scaling/zooming
-OpenOffice.org Writer : resolution when printing bitmaps
-OpenOffice.org Writer : restoring
-OpenOffice.org Writer : restoring;default formatting
-OpenOffice.org Writer : restoring;editing
-OpenOffice.org Writer : reversing printing order
-OpenOffice.org Writer : review function
-OpenOffice.org Writer : review function;accepting or rejecting changes
-OpenOffice.org Writer : review function;comparing documents
-OpenOffice.org Writer : review function;recording changes example
-OpenOffice.org Writer : rich text control
-OpenOffice.org Writer : right alignment of paragraphs
-OpenOffice.org Writer : right indents in paragraphs
-OpenOffice.org Writer : right joins (Base)
-OpenOffice.org Writer : right pages
-OpenOffice.org Writer : right-to-left text
-OpenOffice.org Writer : rising outline levels
-OpenOffice.org Writer : rotating
-OpenOffice.org Writer : rotating;3D text
-OpenOffice.org Writer : rotating;text
-OpenOffice.org Writer : round corners
-OpenOffice.org Writer : rounding precision (Calc)
-OpenOffice.org Writer : row breaks in text tables
-OpenOffice.org Writer : row headers
-OpenOffice.org Writer : row headers;displaying (Calc)
-OpenOffice.org Writer : row headers;highlighting (Calc)
-OpenOffice.org Writer : rows
-OpenOffice.org Writer : rows;inserting in tables, using icon
-OpenOffice.org Writer : rows;inserting/deleting in tables by keyboard
-OpenOffice.org Writer : rows;register-true text
-OpenOffice.org Writer : rows;selecting
-OpenOffice.org Writer : rulers
-OpenOffice.org Writer : rulers;default settings
-OpenOffice.org Writer : rulers;horizontal lines
-OpenOffice.org Writer : rulers;measurement units
-OpenOffice.org Writer : rulers;using rulers
-OpenOffice.org Writer : rulers;visible in presentations
-OpenOffice.org Writer : running titles in headers
-OpenOffice.org Writer : samples and templates
-OpenOffice.org Writer : saving
-OpenOffice.org Writer : saving;default file formats
-OpenOffice.org Writer : saving;dialog settings
-OpenOffice.org Writer : saving;documents
-OpenOffice.org Writer : saving;documents for mobile devices
-OpenOffice.org Writer : saving;documents in other formats
-OpenOffice.org Writer : saving;documents, automatically
-OpenOffice.org Writer : saving;in HTML format
-OpenOffice.org Writer : saving;in Microsoft Office file format
-OpenOffice.org Writer : saving;options
-OpenOffice.org Writer : saving;templates
-OpenOffice.org Writer : saving;to XML
-OpenOffice.org Writer : saving;VBA code in Microsoft Office documents
-OpenOffice.org Writer : saving;with password by default
-OpenOffice.org Writer : saving as command
-OpenOffice.org Writer : saving as command;precautions
-OpenOffice.org Writer : scaling
-OpenOffice.org Writer : scaling;axes
-OpenOffice.org Writer : scaling;font sizes in user interface
-OpenOffice.org Writer : scaling;objects
-OpenOffice.org Writer : scaling;pictures
-OpenOffice.org Writer : scaling;printing in OpenOffice.org Math
-OpenOffice.org Writer : scaling;text frames, by mouse
-OpenOffice.org Writer : scaling;text in charts
-OpenOffice.org Writer : scaling;when printing presentations
-OpenOffice.org Writer : scaling, see also zooming
-OpenOffice.org Writer : scanning pictures
-OpenOffice.org Writer : scatter charts
-OpenOffice.org Writer : screen
-OpenOffice.org Writer : screen;full screen views
-OpenOffice.org Writer : screen;scaling
-OpenOffice.org Writer : screen magnifiers
-OpenOffice.org Writer : screen readers
-OpenOffice.org Writer : script organization
-OpenOffice.org Writer : scripting in programming
-OpenOffice.org Writer : scrollbars
-OpenOffice.org Writer : scrollbars;controls
-OpenOffice.org Writer : scrollbars;displaying (Calc)
-OpenOffice.org Writer : scrollbars;horizontal and vertical (Writer)
-OpenOffice.org Writer : search criteria for database functions in cells
-OpenOffice.org Writer : search engines
-OpenOffice.org Writer : search engines;definition
-OpenOffice.org Writer : search engines;selecting
-OpenOffice.org Writer : searching
-OpenOffice.org Writer : searching;all sheets
-OpenOffice.org Writer : searching;cross-references
-OpenOffice.org Writer : searching;databases
-OpenOffice.org Writer : searching;form filters
-OpenOffice.org Writer : searching;formats
-OpenOffice.org Writer : searching;Internet
-OpenOffice.org Writer : searching;repeating a search
-OpenOffice.org Writer : searching;synonyms
-OpenOffice.org Writer : searching;tables and forms
-OpenOffice.org Writer : searching;with wildcards
-OpenOffice.org Writer : searching, see also finding
-OpenOffice.org Writer : secondary axes in charts
-OpenOffice.org Writer : sections
-OpenOffice.org Writer : sections;backgrounds
-OpenOffice.org Writer : sections;columns in
-OpenOffice.org Writer : sections;defining conditions
-OpenOffice.org Writer : sections;editing
-OpenOffice.org Writer : sections;hiding
-OpenOffice.org Writer : sections;inserting
-OpenOffice.org Writer : sections;inserting external content
-OpenOffice.org Writer : sections;inserting sections by DDE
-OpenOffice.org Writer : sections;moving and copying
-OpenOffice.org Writer : sections;protecting
-OpenOffice.org Writer : sections;remarks
-OpenOffice.org Writer : security
-OpenOffice.org Writer : security;options for documents with macros
-OpenOffice.org Writer : security;protecting contents
-OpenOffice.org Writer : security;warning dialogs with macros
-OpenOffice.org Writer : selecting
-OpenOffice.org Writer : selecting;controls
-OpenOffice.org Writer : selecting;group objects
-OpenOffice.org Writer : selecting;measurement units
-OpenOffice.org Writer : selecting;objects
-OpenOffice.org Writer : selecting;paper trays
-OpenOffice.org Writer : selecting;print areas
-OpenOffice.org Writer : selecting;several files
-OpenOffice.org Writer : selecting;tables
-OpenOffice.org Writer : selecting;text, with keyboard
-OpenOffice.org Writer : selection clipboard
-OpenOffice.org Writer : selection modes in text
-OpenOffice.org Writer : sending
-OpenOffice.org Writer : sending;AutoAbstract function in presentations
-OpenOffice.org Writer : sending;documents as e-mail
-OpenOffice.org Writer : sending;documents as faxes
-OpenOffice.org Writer : separation, see hyphenation
-OpenOffice.org Writer : separator lines
-OpenOffice.org Writer : separator lines;AutoFormat function
-OpenOffice.org Writer : separator lines;defining
-OpenOffice.org Writer : separators
-OpenOffice.org Writer : separators;conditional
-OpenOffice.org Writer : Server Side ImageMap
-OpenOffice.org Writer : settings
-OpenOffice.org Writer : settings;direct cursor
-OpenOffice.org Writer : settings;printers
-OpenOffice.org Writer : settings;program configuration
-OpenOffice.org Writer : settings;proxies
-OpenOffice.org Writer : settings;tracking changes
-OpenOffice.org Writer : settings;views
-OpenOffice.org Writer : SGML
-OpenOffice.org Writer : SGML;definition
-OpenOffice.org Writer : shadows
-OpenOffice.org Writer : shadows;areas
-OpenOffice.org Writer : shadows;borders
-OpenOffice.org Writer : shadows;characters
-OpenOffice.org Writer : shadows;characters, using context menu
-OpenOffice.org Writer : shadows;headers/footers
-OpenOffice.org Writer : sharpening filter
-OpenOffice.org Writer : sheet tabs
-OpenOffice.org Writer : sheet tabs;displaying
-OpenOffice.org Writer : sheets
-OpenOffice.org Writer : sheets;searching all
-OpenOffice.org Writer : shortcut keys
-OpenOffice.org Writer : shortcut keys;assigning macros
-OpenOffice.org Writer : shortcut keys;bold formatting
-OpenOffice.org Writer : shortcut keys;charts
-OpenOffice.org Writer : shortcut keys;general
-OpenOffice.org Writer : shortcut keys;in databases
-OpenOffice.org Writer : shortcut keys;in text documents
-OpenOffice.org Writer : shortcut keys;OpenOffice.org accessibility
-OpenOffice.org Writer : Show/Hide feature in Microsoft Office
-OpenOffice.org Writer : showing
-OpenOffice.org Writer : showing;changes
-OpenOffice.org Writer : showing;docked windows
-OpenOffice.org Writer : showing;drawings and controls (Writer)
-OpenOffice.org Writer : showing;live presentations on the Internet
-OpenOffice.org Writer : showing;rulers
-OpenOffice.org Writer : showing;toolbars
-OpenOffice.org Writer : sideways orientation of pages
-OpenOffice.org Writer : signing documents with digital signatures
-OpenOffice.org Writer : similarity search
-OpenOffice.org Writer : simple handles (Writer)
-OpenOffice.org Writer : simplified Chinese
-OpenOffice.org Writer : simplified Chinese;translating to traditional Chinese
-OpenOffice.org Writer : single sign on options
-OpenOffice.org Writer : single-line spacing in text
-OpenOffice.org Writer : sizes
-OpenOffice.org Writer : sizes;draw objects
-OpenOffice.org Writer : sizes;pictures
-OpenOffice.org Writer : slanting draw objects
-OpenOffice.org Writer : small capitals
-OpenOffice.org Writer : small icons
-OpenOffice.org Writer : smart tags
-OpenOffice.org Writer : smart tags;options
-OpenOffice.org Writer : smart tags;using
-OpenOffice.org Writer : smooth scrolling (Writer)
-OpenOffice.org Writer : smoothing filter
-OpenOffice.org Writer : snap grid defaults (Writer/Calc)
-OpenOffice.org Writer : snapping in presentations and drawings
-OpenOffice.org Writer : solarization filter
-OpenOffice.org Writer : sort lists
-OpenOffice.org Writer : sort lists;copying to in Calc
-OpenOffice.org Writer : sorting
-OpenOffice.org Writer : sorting;data in forms
-OpenOffice.org Writer : sorting;databases
-OpenOffice.org Writer : sorting;paragraphs in special languages
-OpenOffice.org Writer : sorting;paragraphs/table rows
-OpenOffice.org Writer : sounds
-OpenOffice.org Writer : sounds;inserting and playing
-OpenOffice.org Writer : sounds;UNIX
-OpenOffice.org Writer : spaces
-OpenOffice.org Writer : spaces;displaying (Writer)
-OpenOffice.org Writer : spaces;ignoring double
-OpenOffice.org Writer : spaces;inserting protected spaces
-OpenOffice.org Writer : spaces;showing protected spaces (Writer)
-OpenOffice.org Writer : spacing
-OpenOffice.org Writer : spacing;between paragraphs in footnotes
-OpenOffice.org Writer : spacing;endnotes/footnotes
-OpenOffice.org Writer : spacing;font effects
-OpenOffice.org Writer : spacing;lines and paragraphs
-OpenOffice.org Writer : spacing;register-true text
-OpenOffice.org Writer : spacing;tab stops in text documents
-OpenOffice.org Writer : spacing;tabs in presentations
-OpenOffice.org Writer : spadmin
-OpenOffice.org Writer : special characters
-OpenOffice.org Writer : speech bubbles
-OpenOffice.org Writer : speed of printing
-OpenOffice.org Writer : spellcheck
-OpenOffice.org Writer : spellcheck;activating for a language
-OpenOffice.org Writer : spellcheck;activating for all languages
-OpenOffice.org Writer : spellcheck;AutoSpellcheck on/off
-OpenOffice.org Writer : spellcheck;checking text documents manually
-OpenOffice.org Writer : spellcheck;context menus
-OpenOffice.org Writer : spellcheck;default languages
-OpenOffice.org Writer : spellcheck;dialog
-OpenOffice.org Writer : spellcheck;dictionary of exceptions
-OpenOffice.org Writer : spellcheck;ignore list
-OpenOffice.org Writer : Spelling and Grammar feature in Microsoft Office
-OpenOffice.org Writer : spelling in thesaurus
-OpenOffice.org Writer : spin button creation
-OpenOffice.org Writer : splitting cells
-OpenOffice.org Writer : splitting cells;by keyboard
-OpenOffice.org Writer : splitting cells;by menu command
-OpenOffice.org Writer : splitting tables
-OpenOffice.org Writer : splitting tables;at cursor position
-OpenOffice.org Writer : splitting tables;row breaks
-OpenOffice.org Writer : spoolfiles with Xprinter
-OpenOffice.org Writer : spreadsheets
-OpenOffice.org Writer : spreadsheets;as databases (base)
-OpenOffice.org Writer : spreadsheets;backgrounds
-OpenOffice.org Writer : spreadsheets;copying areas to text documents
-OpenOffice.org Writer : spreadsheets;creating/opening
-OpenOffice.org Writer : spreadsheets;inserting charts
-OpenOffice.org Writer : spreadsheets;inserting database records
-OpenOffice.org Writer : spreadsheets;inserting tables from
-OpenOffice.org Writer : spreadsheets;printing
-OpenOffice.org Writer : spreadsheets;saving
-OpenOffice.org Writer : spreadsheets;saving automatically
-OpenOffice.org Writer : spreadsheets;saving in other formats
-OpenOffice.org Writer : spreadsheets;sending as e-mail
-OpenOffice.org Writer : SQL
-OpenOffice.org Writer : SQL;definition
-OpenOffice.org Writer : SQL;DISTINCT parameter
-OpenOffice.org Writer : SQL;executing SQL commands
-OpenOffice.org Writer : SQL;executing SQL statements (Base)
-OpenOffice.org Writer : SQL;queries (Base)
-OpenOffice.org Writer : square drawings
-OpenOffice.org Writer : standard bar on/off
-OpenOffice.org Writer : standard deviation in charts
-OpenOffice.org Writer : standard filters in databases
-OpenOffice.org Writer : standard printer under UNIX
-OpenOffice.org Writer : Start Module backing window
-OpenOffice.org Writer : start parameters
-OpenOffice.org Writer : starting page numbers
-OpenOffice.org Writer : statistical functions
-OpenOffice.org Writer : statistics in charts
-OpenOffice.org Writer : status bar on/off
-OpenOffice.org Writer : stickers
-OpenOffice.org Writer : stock charts
-OpenOffice.org Writer : storing bibliographic information
-OpenOffice.org Writer : strikethrough
-OpenOffice.org Writer : strikethrough;characters
-OpenOffice.org Writer : strikethrough;font effects
-OpenOffice.org Writer : styles
-OpenOffice.org Writer : styles;'changed' message
-OpenOffice.org Writer : styles;categories
-OpenOffice.org Writer : styles;conditional
-OpenOffice.org Writer : styles;copying between documents
-OpenOffice.org Writer : styles;creating from selections
-OpenOffice.org Writer : styles;finding
-OpenOffice.org Writer : styles;importing from other files
-OpenOffice.org Writer : styles;keyboard shortcuts
-OpenOffice.org Writer : styles;organizing
-OpenOffice.org Writer : styles;printing styles used in a document
-OpenOffice.org Writer : styles;replacing automatically
-OpenOffice.org Writer : styles;styles and templates
-OpenOffice.org Writer : styles;table styles
-OpenOffice.org Writer : styles;transferring
-OpenOffice.org Writer : styles;updating from selections
-OpenOffice.org Writer : Styles and Formatting window
-OpenOffice.org Writer : Styles and Formatting window;applying styles
-OpenOffice.org Writer : Styles and Formatting window;docking
-OpenOffice.org Writer : Styles and Formatting window;docking and resizing
-OpenOffice.org Writer : Styles and Formatting window;updating from selections
-OpenOffice.org Writer : Stylist, see Styles and Formatting window
-OpenOffice.org Writer : subdocuments
-OpenOffice.org Writer : subforms
-OpenOffice.org Writer : subforms;creating
-OpenOffice.org Writer : subforms;description
-OpenOffice.org Writer : subject fields
-OpenOffice.org Writer : submitting forms
-OpenOffice.org Writer : subscript text
-OpenOffice.org Writer : subsidiary documents
-OpenOffice.org Writer : suffixes in file formats
-OpenOffice.org Writer : sums of table cell series
-OpenOffice.org Writer : superscript text
-OpenOffice.org Writer : support on the Web
-OpenOffice.org Writer : switching off word completion
-OpenOffice.org Writer : synchronizing
-OpenOffice.org Writer : synchronizing;labels and business cards
-OpenOffice.org Writer : synchronizing;Pocket PC and OpenOffice.org formats
-OpenOffice.org Writer : synonyms in thesaurus
-OpenOffice.org Writer : system address book registration
-OpenOffice.org Writer : tab stops
-OpenOffice.org Writer : tab stops;before headings
-OpenOffice.org Writer : tab stops;displaying (Writer)
-OpenOffice.org Writer : tab stops;inserting and editing
-OpenOffice.org Writer : tab stops;inserting in lists
-OpenOffice.org Writer : tab stops;setting in sheets
-OpenOffice.org Writer : tab stops;settings
-OpenOffice.org Writer : tab stops;spacing in presentations
-OpenOffice.org Writer : tab stops;spacing in text documents
-OpenOffice.org Writer : table cells
-OpenOffice.org Writer : table cells;adjusting the width on rulers
-OpenOffice.org Writer : table cells;calculating sums
-OpenOffice.org Writer : table cells;enlarging/reducing in text
-OpenOffice.org Writer : table controls
-OpenOffice.org Writer : table controls;form functions
-OpenOffice.org Writer : table controls;keyboard-only edit mode
-OpenOffice.org Writer : table controls;properties
-OpenOffice.org Writer : table mode selection
-OpenOffice.org Writer : table views of databases
-OpenOffice.org Writer : Table Wizard (Base)
-OpenOffice.org Writer : tables
-OpenOffice.org Writer : tables;adapting the width by keyboard
-OpenOffice.org Writer : tables;allowing page breaks
-OpenOffice.org Writer : tables;AutoFormat function
-OpenOffice.org Writer : tables;backgrounds
-OpenOffice.org Writer : tables;calculating across
-OpenOffice.org Writer : tables;calculating sums
-OpenOffice.org Writer : tables;converting to text
-OpenOffice.org Writer : tables;cross-referencing
-OpenOffice.org Writer : tables;defining borders
-OpenOffice.org Writer : tables;deleting
-OpenOffice.org Writer : tables;editing by keyboard
-OpenOffice.org Writer : tables;editing with the keyboard
-OpenOffice.org Writer : tables;heading repetition after page breaks
-OpenOffice.org Writer : tables;inserting columns in
-OpenOffice.org Writer : tables;inserting line breaks
-OpenOffice.org Writer : tables;inserting rows
-OpenOffice.org Writer : tables;inserting text before
-OpenOffice.org Writer : tables;inserting text tables
-OpenOffice.org Writer : tables;jumping to
-OpenOffice.org Writer : tables;labeling
-OpenOffice.org Writer : tables;merging
-OpenOffice.org Writer : tables;merging cells
-OpenOffice.org Writer : tables;number recognition
-OpenOffice.org Writer : tables;performing calculations in
-OpenOffice.org Writer : tables;positioning
-OpenOffice.org Writer : tables;resizing
-OpenOffice.org Writer : tables;selecting
-OpenOffice.org Writer : tables;sorting rows
-OpenOffice.org Writer : tables;splitting
-OpenOffice.org Writer : tables;start/end of document
-OpenOffice.org Writer : tables;text flow around text tables
-OpenOffice.org Writer : tables in databases
-OpenOffice.org Writer : tables in databases;access rights to (Base)
-OpenOffice.org Writer : tables in databases;adding to queries
-OpenOffice.org Writer : tables in databases;browsing and editing
-OpenOffice.org Writer : tables in databases;copying database tables (Base)
-OpenOffice.org Writer : tables in databases;creating
-OpenOffice.org Writer : tables in databases;creating in design view
-OpenOffice.org Writer : tables in databases;importing text formats (Base)
-OpenOffice.org Writer : tables in databases;joining for queries (Base)
-OpenOffice.org Writer : tables in databases;printing queries (Base)
-OpenOffice.org Writer : tables in databases;relations (Base)
-OpenOffice.org Writer : tables in databases;searching
-OpenOffice.org Writer : tables in spreadsheets
-OpenOffice.org Writer : tables in spreadsheets;copying data to other applications
-OpenOffice.org Writer : tables in spreadsheets;defining borders
-OpenOffice.org Writer : tables in spreadsheets;inserting in text
-OpenOffice.org Writer : tables in spreadsheets;value highlighting
-OpenOffice.org Writer : tables in text
-OpenOffice.org Writer : tables in text;captions
-OpenOffice.org Writer : tables in text;creating automatically
-OpenOffice.org Writer : tables in text;default settings
-OpenOffice.org Writer : tables in text;defining borders
-OpenOffice.org Writer : tables in text;displaying
-OpenOffice.org Writer : tables in text;printing
-OpenOffice.org Writer : tables in text;protecting cells
-OpenOffice.org Writer : tables of contents
-OpenOffice.org Writer : tables of contents;creating and updating
-OpenOffice.org Writer : tables of contents;defining entries in
-OpenOffice.org Writer : tables of contents;editing and deleting
-OpenOffice.org Writer : tables of contents;editing or deleting entries
-OpenOffice.org Writer : tables of contents;formatting
-OpenOffice.org Writer : tables of contents;hyperlinks as entries
-OpenOffice.org Writer : tables of contents;unprotecting
-OpenOffice.org Writer : tabs
-OpenOffice.org Writer : tabs;displaying sheet tabs
-OpenOffice.org Writer : tags
-OpenOffice.org Writer : tags;definition
-OpenOffice.org Writer : tags;in OpenOffice.org Writer
-OpenOffice.org Writer : tags;META tags
-OpenOffice.org Writer : templates
-OpenOffice.org Writer : templates;agendas
-OpenOffice.org Writer : templates;changing basic fonts
-OpenOffice.org Writer : templates;creating document templates
-OpenOffice.org Writer : templates;database reports
-OpenOffice.org Writer : templates;default templates
-OpenOffice.org Writer : templates;deleting
-OpenOffice.org Writer : templates;editing and saving
-OpenOffice.org Writer : templates;faxes
-OpenOffice.org Writer : templates;importing and exporting
-OpenOffice.org Writer : templates;letters
-OpenOffice.org Writer : templates;new documents from templates
-OpenOffice.org Writer : templates;opening documents with
-OpenOffice.org Writer : templates;organizing
-OpenOffice.org Writer : templates;organizing (guide)
-OpenOffice.org Writer : templates;updating from selections
-OpenOffice.org Writer : terminology
-OpenOffice.org Writer : terminology;general glossary
-OpenOffice.org Writer : terminology;Internet glossary
-OpenOffice.org Writer : testing XML filters
-OpenOffice.org Writer : text
-OpenOffice.org Writer : text;animating
-OpenOffice.org Writer : text;Asian layout
-OpenOffice.org Writer : text;backgrounds
-OpenOffice.org Writer : text;bold
-OpenOffice.org Writer : text;coloring
-OpenOffice.org Writer : text;conditional text
-OpenOffice.org Writer : text;contours
-OpenOffice.org Writer : text;converting to tables
-OpenOffice.org Writer : text;copying by drag and drop
-OpenOffice.org Writer : text;CTL languages
-OpenOffice.org Writer : text;cursor
-OpenOffice.org Writer : text;drawing pictures
-OpenOffice.org Writer : text;emphasizing
-OpenOffice.org Writer : text;font effects
-OpenOffice.org Writer : text;font sizes
-OpenOffice.org Writer : text;font styles
-OpenOffice.org Writer : text;fonts and formats
-OpenOffice.org Writer : text;Fontwork icons
-OpenOffice.org Writer : text;formatting around objects
-OpenOffice.org Writer : text;formatting bold while typing
-OpenOffice.org Writer : text;hiding
-OpenOffice.org Writer : text;hiding from specific users, with conditions
-OpenOffice.org Writer : text;hyperlinks
-OpenOffice.org Writer : text;input fields
-OpenOffice.org Writer : text;inserting pictures from Draw
-OpenOffice.org Writer : text;inserting pictures in
-OpenOffice.org Writer : text;inserting special characters
-OpenOffice.org Writer : text;italics
-OpenOffice.org Writer : text;kerning
-OpenOffice.org Writer : text;language selection
-OpenOffice.org Writer : text;line numbers
-OpenOffice.org Writer : text;line spacing
-OpenOffice.org Writer : text;multicolumn
-OpenOffice.org Writer : text;navigating and selecting with keyboard
-OpenOffice.org Writer : text;non-printable
-OpenOffice.org Writer : text;not printing
-OpenOffice.org Writer : text;number of words/characters
-OpenOffice.org Writer : text;overwriting or inserting
-OpenOffice.org Writer : text;placeholders in presentations
-OpenOffice.org Writer : text;printing in black
-OpenOffice.org Writer : text;replacing with format
-OpenOffice.org Writer : text;rotating
-OpenOffice.org Writer : text;selection modes
-OpenOffice.org Writer : text;shadowed
-OpenOffice.org Writer : text;sorting paragraphs
-OpenOffice.org Writer : text;subscript and superscript
-OpenOffice.org Writer : text;text/draw objects
-OpenOffice.org Writer : text;turning off automatic correction
-OpenOffice.org Writer : text;uppercase or lowercase
-OpenOffice.org Writer : text animation
-OpenOffice.org Writer : text attributes
-OpenOffice.org Writer : text attributes;hyperlinks
-OpenOffice.org Writer : text attributes;undoing
-OpenOffice.org Writer : text blocks
-OpenOffice.org Writer : text boxes
-OpenOffice.org Writer : text boxes;form functions
-OpenOffice.org Writer : text boxes;positioning
-OpenOffice.org Writer : text breaks in cells
-OpenOffice.org Writer : text colors for better accessibility
-OpenOffice.org Writer : text columns
-OpenOffice.org Writer : text databases (Base)
-OpenOffice.org Writer : text documents
-OpenOffice.org Writer : text documents;creating/opening
-OpenOffice.org Writer : text documents;default templates
-OpenOffice.org Writer : text documents;importing/exporting
-OpenOffice.org Writer : text documents;inserting Calc charts
-OpenOffice.org Writer : text documents;inserting spreadsheet cells
-OpenOffice.org Writer : text documents;merging
-OpenOffice.org Writer : text documents;print settings
-OpenOffice.org Writer : text documents;printing
-OpenOffice.org Writer : text documents;publishing in HTML
-OpenOffice.org Writer : text documents;saving
-OpenOffice.org Writer : text documents;saving automatically
-OpenOffice.org Writer : text documents;saving in other formats
-OpenOffice.org Writer : text documents;sending as e-mail
-OpenOffice.org Writer : text documents;shortcut keys in
-OpenOffice.org Writer : text effects
-OpenOffice.org Writer : text flow
-OpenOffice.org Writer : text flow;around text tables
-OpenOffice.org Writer : text flow;at breaks
-OpenOffice.org Writer : text flow;from frame to frame
-OpenOffice.org Writer : text flow;in cells
-OpenOffice.org Writer : text formats
-OpenOffice.org Writer : text formats;copying and pasting
-OpenOffice.org Writer : text formats;databases
-OpenOffice.org Writer : text formats;finding
-OpenOffice.org Writer : text formats;pasting
-OpenOffice.org Writer : text frames
-OpenOffice.org Writer : text frames;centering on pages
-OpenOffice.org Writer : text frames;inserting/editing/linking
-OpenOffice.org Writer : text frames;labeling
-OpenOffice.org Writer : text grid for Asian layout
-OpenOffice.org Writer : text input fields
-OpenOffice.org Writer : text layout for special languages
-OpenOffice.org Writer : text objects
-OpenOffice.org Writer : text objects;alignment
-OpenOffice.org Writer : text objects;draw functions
-OpenOffice.org Writer : text objects;fonts
-OpenOffice.org Writer : text objects;in presentations and drawings
-OpenOffice.org Writer : text overflow in spreadsheet cells
-OpenOffice.org Writer : text scaling in charts
-OpenOffice.org Writer : text sections
-OpenOffice.org Writer : text sections;moving and copying
-OpenOffice.org Writer : text sections;using
-OpenOffice.org Writer : text wrap around objects
-OpenOffice.org Writer : text, see also text documents, paragraphs and characters
-OpenOffice.org Writer : TextArt, see Fontwork
-OpenOffice.org Writer : textures
-OpenOffice.org Writer : textures;inserting from Gallery
-OpenOffice.org Writer : textures;on chart bars
-OpenOffice.org Writer : Thai
-OpenOffice.org Writer : Thai;entering text
-OpenOffice.org Writer : Thai;language settings
-OpenOffice.org Writer : thesaurus
-OpenOffice.org Writer : thesaurus;activating for a language
-OpenOffice.org Writer : thesaurus;related words
-OpenOffice.org Writer : ticker text
-OpenOffice.org Writer : time fields
-OpenOffice.org Writer : time fields;form functions
-OpenOffice.org Writer : time fields;HTML
-OpenOffice.org Writer : time fields;inserting
-OpenOffice.org Writer : times
-OpenOffice.org Writer : times;inserting when printing presentations
-OpenOffice.org Writer : times, formats
-OpenOffice.org Writer : tips
-OpenOffice.org Writer : tips;extended tips in Help
-OpenOffice.org Writer : title pages
-OpenOffice.org Writer : title pages;centering text on
-OpenOffice.org Writer : title pages;page styles
-OpenOffice.org Writer : title rows
-OpenOffice.org Writer : title rows;printing in OpenOffice.org Math
-OpenOffice.org Writer : titles
-OpenOffice.org Writer : titles;alignment (charts)
-OpenOffice.org Writer : titles;changing
-OpenOffice.org Writer : titles;editing in charts
-OpenOffice.org Writer : titles;font effects
-OpenOffice.org Writer : titles;formatting automatically
-OpenOffice.org Writer : titles;formatting charts
-OpenOffice.org Writer : titles;objects
-OpenOffice.org Writer : toolbars
-OpenOffice.org Writer : toolbars;adding buttons
-OpenOffice.org Writer : toolbars;docking/undocking
-OpenOffice.org Writer : toolbars;Form Navigation bar
-OpenOffice.org Writer : toolbars;viewing/closing
-OpenOffice.org Writer : tools bar
-OpenOffice.org Writer : tooltips
-OpenOffice.org Writer : tooltips;extended tips
-OpenOffice.org Writer : tooltips;help
-OpenOffice.org Writer : totals in text tables
-OpenOffice.org Writer : Track changes feature in Microsoft Office
-OpenOffice.org Writer : traditional Chinese
-OpenOffice.org Writer : traditional Chinese;translating to simplified chinese
-OpenOffice.org Writer : transparency
-OpenOffice.org Writer : transparency;areas
-OpenOffice.org Writer : transparency;off for faster printing
-OpenOffice.org Writer : transparency;saving
-OpenOffice.org Writer : tree view of Help
-OpenOffice.org Writer : trend lines in charts
-OpenOffice.org Writer : trigonometric functions
-OpenOffice.org Writer : turning off automatic correction
-OpenOffice.org Writer : typefaces
-OpenOffice.org Writer : typefaces;adding under UNIX
-OpenOffice.org Writer : typefaces;formats
-OpenOffice.org Writer : typographical quotes in OpenOffice.org Writer
-OpenOffice.org Writer : typography
-OpenOffice.org Writer : typography;Asian
-OpenOffice.org Writer : underlining
-OpenOffice.org Writer : underlining;AutoFormat function
-OpenOffice.org Writer : underlining;characters
-OpenOffice.org Writer : underlining;quick
-OpenOffice.org Writer : underlining;text
-OpenOffice.org Writer : undocking windows
-OpenOffice.org Writer : undoing
-OpenOffice.org Writer : undoing;direct formatting
-OpenOffice.org Writer : undoing;editing
-OpenOffice.org Writer : undoing;number of steps
-OpenOffice.org Writer : ungrouping groups
-OpenOffice.org Writer : units
-OpenOffice.org Writer : units;converting
-OpenOffice.org Writer : units;measurement units
-OpenOffice.org Writer : unlinking frames
-OpenOffice.org Writer : UNO components
-OpenOffice.org Writer : UNO components;Extension Manager
-OpenOffice.org Writer : UNO components;integrating new
-OpenOffice.org Writer : update options
-OpenOffice.org Writer : updates
-OpenOffice.org Writer : updates;checking automatically
-OpenOffice.org Writer : updates;checking manually
-OpenOffice.org Writer : updating
-OpenOffice.org Writer : updating;cross-references
-OpenOffice.org Writer : updating;fields
-OpenOffice.org Writer : updating;fields and charts, automatically (Writer)
-OpenOffice.org Writer : updating;indexes/tables of contents
-OpenOffice.org Writer : updating;linked sections, manually
-OpenOffice.org Writer : updating;links in text documents
-OpenOffice.org Writer : updating;links, on opening
-OpenOffice.org Writer : updating;styles, from selections
-OpenOffice.org Writer : updating;tables of contents
-OpenOffice.org Writer : updating;templates
-OpenOffice.org Writer : updating;text documents
-OpenOffice.org Writer : uppercase
-OpenOffice.org Writer : uppercase;changing to lowercase
-OpenOffice.org Writer : uppercase;formatting text
-OpenOffice.org Writer : URL
-OpenOffice.org Writer : URL;changing hyperlink URLs
-OpenOffice.org Writer : URL;definition
-OpenOffice.org Writer : URL;saving absolute/relative paths
-OpenOffice.org Writer : URL;turning off URL recognition
-OpenOffice.org Writer : user data
-OpenOffice.org Writer : user data;in conditions
-OpenOffice.org Writer : user data;input
-OpenOffice.org Writer : user data;querying
-OpenOffice.org Writer : user data;removing when saving
-OpenOffice.org Writer : user variables in conditions/fields
-OpenOffice.org Writer : user-defined dictionaries
-OpenOffice.org Writer : user-defined dictionaries;creating
-OpenOffice.org Writer : user-defined dictionaries;dictionary of exceptions
-OpenOffice.org Writer : user-defined dictionaries;editing
-OpenOffice.org Writer : user-defined dictionaries;removing words from
-OpenOffice.org Writer : user-defined fields, restriction
-OpenOffice.org Writer : user-defined indexes
-OpenOffice.org Writer : user-defined styles
-OpenOffice.org Writer : user-defined styles;automatically replacing
-OpenOffice.org Writer : UTF-8/UCS2 support
-OpenOffice.org Writer : Validation feature in Microsoft Office
-OpenOffice.org Writer : values
-OpenOffice.org Writer : values;rounded as shown (Calc)
-OpenOffice.org Writer : variable dates
-OpenOffice.org Writer : variables
-OpenOffice.org Writer : variables;document properties
-OpenOffice.org Writer : variables;for paths
-OpenOffice.org Writer : variables;in conditions
-OpenOffice.org Writer : variances in charts
-OpenOffice.org Writer : VBA code
-OpenOffice.org Writer : VBA code;loading/saving documents with VBA code
-OpenOffice.org Writer : version management
-OpenOffice.org Writer : version numbers of documents
-OpenOffice.org Writer : versions
-OpenOffice.org Writer : versions;comparing documents
-OpenOffice.org Writer : versions;file saving as, restriction
-OpenOffice.org Writer : versions;merging document versions
-OpenOffice.org Writer : versions;of a document
-OpenOffice.org Writer : versions;OpenOffice.org
-OpenOffice.org Writer : vertical callouts
-OpenOffice.org Writer : vertical rulers
-OpenOffice.org Writer : vertical scrollbars (Writer)
-OpenOffice.org Writer : vertical text boxes
-OpenOffice.org Writer : videos
-OpenOffice.org Writer : viewing
-OpenOffice.org Writer : viewing;databases
-OpenOffice.org Writer : viewing;fields
-OpenOffice.org Writer : viewing;file properties
-OpenOffice.org Writer : viewing;OpenOffice.org documents in Internet Explorer
-OpenOffice.org Writer : viewing;toolbars
-OpenOffice.org Writer : views
-OpenOffice.org Writer : views;creating database views (Base)
-OpenOffice.org Writer : views;defaults
-OpenOffice.org Writer : views;full screen
-OpenOffice.org Writer : views;icons
-OpenOffice.org Writer : views;in 3D
-OpenOffice.org Writer : views;scaling
-OpenOffice.org Writer : Visual Basic for Applications
-OpenOffice.org Writer : Visual Basic for Applications;loading/saving documents with VBA code
-OpenOffice.org Writer : watermarks
-OpenOffice.org Writer : web documents
-OpenOffice.org Writer : web documents;XForms
-OpenOffice.org Writer : Web support
-OpenOffice.org Writer : WebCast export
-OpenOffice.org Writer : weekdays
-OpenOffice.org Writer : weekdays;automatically completing
-OpenOffice.org Writer : widows
-OpenOffice.org Writer : wildcards, see regular expressions
-OpenOffice.org Writer : windows
-OpenOffice.org Writer : windows;docking
-OpenOffice.org Writer : windows;docking definition
-OpenOffice.org Writer : windows;hiding/showing/docking
-OpenOffice.org Writer : windows;new
-OpenOffice.org Writer : wizards
-OpenOffice.org Writer : wizards;agendas
-OpenOffice.org Writer : wizards;database queries
-OpenOffice.org Writer : wizards;database tables (Base)
-OpenOffice.org Writer : wizards;databases (Base)
-OpenOffice.org Writer : wizards;document converter
-OpenOffice.org Writer : wizards;Euro Converter
-OpenOffice.org Writer : wizards;faxes
-OpenOffice.org Writer : wizards;form letters
-OpenOffice.org Writer : wizards;forms
-OpenOffice.org Writer : wizards;letters
-OpenOffice.org Writer : wizards;overview
-OpenOffice.org Writer : wizards;presentations
-OpenOffice.org Writer : wizards;reports
-OpenOffice.org Writer : word completion
-OpenOffice.org Writer : word counts
-OpenOffice.org Writer : Word documents
-OpenOffice.org Writer : Word documents;compatibility
-OpenOffice.org Writer : Word documents;saving as
-OpenOffice.org Writer : WordArt, see Fontwork
-OpenOffice.org Writer : words
-OpenOffice.org Writer : words;automatic replacement on/off
-OpenOffice.org Writer : words;automatically replacing
-OpenOffice.org Writer : words;counting in text
-OpenOffice.org Writer : words;disabling spellcheck
-OpenOffice.org Writer : words;wrapping in cells
-OpenOffice.org Writer : words;wrapping/not wrapping in text
-OpenOffice.org Writer : work directory change
-OpenOffice.org Writer : Workbook feature in Microsoft Office
-OpenOffice.org Writer : Worksheet feature in Microsoft Office
-OpenOffice.org Writer : wrapping text
-OpenOffice.org Writer : wrapping text;editing contours
-OpenOffice.org Writer : wrapping text;in cells
-OpenOffice.org Writer : write protection on/off
-OpenOffice.org Writer : writing aids options
-OpenOffice.org Writer : writing with direct cursor
-OpenOffice.org Writer : WYSIWYG in fonts lists
-OpenOffice.org Writer : X axes
-OpenOffice.org Writer : X axes;grid formatting
-OpenOffice.org Writer : X axes;scaling
-OpenOffice.org Writer : X axes;showing
-OpenOffice.org Writer : XForms
-OpenOffice.org Writer : XML converters
-OpenOffice.org Writer : XML file formats
-OpenOffice.org Writer : XML filters
-OpenOffice.org Writer : XML filters;creating/testing/distributing/deleting
-OpenOffice.org Writer : XML filters;settings
-OpenOffice.org Writer : XML Forms
-OpenOffice.org Writer : XSLT based filters
-OpenOffice.org Writer : XSLT based filters;settings
-OpenOffice.org Writer : XSLT filters, see also XML filters
-OpenOffice.org Writer : XY charts
-OpenOffice.org Writer : Y axes
-OpenOffice.org Writer : Y axes;formatting
-OpenOffice.org Writer : Y axes;grid formatting
-OpenOffice.org Writer : Y axes;scaling
-OpenOffice.org Writer : Y axes;showing
-OpenOffice.org Writer : years
-OpenOffice.org Writer : years;2-digit options
-OpenOffice.org Writer : Z axes
-OpenOffice.org Writer : Z axes;grid formatting
-OpenOffice.org Writer : Z axes;showing
-OpenOffice.org Writer : zero values
-OpenOffice.org Writer : zero values;displaying (Calc)
-OpenOffice.org Writer : zooming
-OpenOffice.org Writer : zooming;page views
-OpenOffice.org Writer : zooming;pictures
-OpenOffice.org Writer : zooming;status bar
diff --git a/testautomation/framework/optional/input/help_browser/Oracle Open Office_help_applications_en-US.txt b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_applications_en-US.txt
index 7a97fdb0f025..7a97fdb0f025 100644..100755
--- a/testautomation/framework/optional/input/help_browser/Oracle Open Office_help_applications_en-US.txt
+++ b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_applications_en-US.txt
diff --git a/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_content_en-US.txt b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_content_en-US.txt
new file mode 100755
index 000000000000..6f11d8fd4313
--- /dev/null
+++ b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_content_en-US.txt
@@ -0,0 +1,868 @@
+Formulas
+General Information and User Interface Usage
+Welcome to the Oracle Open Office Math Help
+Oracle Open Office Math Features
+Instructions for Using Oracle Open Office Math
+Shortcuts (Oracle Open Office Math Accessibility)
+Command and Menu Reference
+Menus
+Toolbars
+Working with Formulas
+Manually Aligning Formula Parts
+Changing Default Attributes
+Merging Formula Parts in Brackets
+Entering Comments
+Entering Line Breaks
+Inserting Brackets
+Spreadsheets
+General Information and User Interface Usage
+Welcome to the Oracle Open Office Calc Help
+Oracle Open Office Calc Features
+Shortcut Keys (Oracle Open Office Calc Accessibility)
+Shortcut Keys for Spreadsheets
+Error Codes in Oracle Open Office Calc
+Add-in for Programming in Oracle Open Office Calc
+Instructions for Using Oracle Open Office Calc
+Command and Menu Reference
+Menus
+Menus
+File
+Edit
+View
+Insert
+Format
+Tools
+Window
+Data
+Toolbars
+Toolbars
+Formatting Bar
+Drawing Object Properties Bar
+Text Formatting Bar
+Formula Bar
+Status Bar
+Page Preview Bar
+Picture Bar
+Tools Bar
+Standard Bar
+Hyperlink Bar
+Table Data Bar
+Form Navigation Bar
+Query Design Bar
+Form Design Toolbar
+Functions Types and Operators
+Function Wizard
+Functions by Category
+Database Functions
+Date + Time Functions
+Financial Functions Part One
+Financial Functions Part Two
+Financial Functions Part Three
+Information Functions
+Logical Functions
+Mathematical Functions
+Array Functions
+Statistics Functions
+Statistical Functions Part One
+Statistical Functions Part Two
+Statistical Functions Part Three
+Statistical Functions Part Four
+Statistical Functions Part Five
+Spreadsheet Functions
+Text Functions
+Add-in Functions
+Add-in Functions, List of Analysis Functions Part One
+Add-in Functions, List of Analysis Functions Part Two
+Operators in Oracle Open Office Calc
+User-Defined Functions
+Loading, Saving, Importing, and Exporting
+Inserting External Data in Table (WebQuery)
+Saving and Opening Sheets in HTML
+Importing and Exporting Text Files
+Formatting
+Rotating Text
+Writing Multi-line Text
+Formatting Numbers as Text
+Text Superscript / Subscript
+Changing Row Height or Column Width
+Applying Conditional Formatting
+Highlighting Negative Numbers
+Assigning Formats by Formula
+Entering a Number with Leading Zeros
+Formatting Spreadsheets
+Formatting Numbers With Decimals
+Naming Cells
+Rotating Tables (Transposing)
+Renaming Sheets
+19xx/20xx Years
+Using Rounded Off Numbers
+Cells in Currency Format
+Using AutoFormat for Tables
+Inserting and Editing Comments
+Selecting Themes for Sheets
+Entering Fractions
+Filtering and Sorting
+Applying Filters
+Filter: Applying Advanced Filters
+Applying AutoFilter
+Applying Sort Lists
+Printing
+Printing Rows or Columns on Every Page
+Printing Sheets in Landscape Format
+Printing Sheet Details
+Defining Number of Pages for Printing
+Data Ranges
+Defining Database Ranges
+Filtering Cell Ranges
+Sorting Data
+Data Pilot
+DataPilot
+Creating DataPilot Tables
+Deleting DataPilot Tables
+Editing DataPilot Tables
+Filtering DataPilot Tables
+Selecting DataPilot Output Ranges
+Updating DataPilot Tables
+Scenarios
+Using Scenarios
+References
+Addresses and References, Absolute and Relative
+Referencing a Cell in Another Document
+References to Other Sheets and Referencing URLs
+Referencing Cells by Drag-and-Drop
+Recognizing Names as Addressing
+Viewing, Selecting, Copying
+Changing Table Views
+Displaying Formulas or Values
+Freezing Rows or Columns as Headers
+Navigating Through Sheets Tabs
+Copying to Multiple Sheets
+Only Copy Visible Cells
+Selecting Multiple Cells
+Formulas and Calculations
+Calculating With Formulas
+Copying Formulas
+Entering Formulas
+Displaying Formulas or Values
+Calculating in Spreadsheets
+Calculating With Dates and Times
+Automatically Calculating Series
+Calculating Time Differences
+Entering Matrix Formulas
+Protection
+Protecting Cells from Changes
+Unprotecting Cells
+Miscellaneous
+Deactivating Automatic Changes
+Consolidating Data
+Applying Goal Seek
+Applying Multiple Operations
+Applying Multiple Sheets
+Validity of Cell Contents
+Installation
+Changing the Association of Microsoft Office Document Types
+Common Help Topics
+General Information
+Shortcut Keys
+General Glossary
+Glossary of Internet Terms
+Accessibility in Oracle Open Office
+Shortcuts (Oracle Open Office Accessibility)
+General Shortcut Keys in Oracle Open Office
+Versions and Build Numbers
+Oracle Open Office and Microsoft Office
+Using Microsoft Office and Oracle Open Office
+Comparing Microsoft Office and Oracle Open Office Terms
+About Converting Microsoft Office Documents
+Changing the Association of Microsoft Office Document Types
+Oracle Open Office Options
+Options
+User Data
+General
+Paths
+Writing Aids
+Colors
+General
+Fonts
+View
+Print Options
+Memory
+Appearance
+Accessibility
+Load/Save options
+Internet options
+Text Document Options
+HTML Document Options
+Spreadsheet Options
+Presentation Options
+Drawing Options
+Formula
+Chart options
+VBA Properties
+Microsoft Office
+Languages
+Language Setting Options
+Data sources options
+Wizards
+Wizard
+Letter Wizard
+Letter Wizard
+Fax Wizard
+Fax Wizard
+Agenda Wizard
+Agenda Wizard
+Presentation Wizard
+Presentation Wizard
+HTML Export Wizard
+HTML Export
+Document Converter Wizard
+Document Converter
+Euro Converter Wizard
+Configuring Oracle Open Office
+Configuring Oracle Open Office
+Extension Manager
+Changing Icon Views
+Adding Buttons to Toolbars
+Changing Your Working Directory
+Changing Default Templates
+Registering an Address Book
+Inserting and Editing Buttons
+Working with the User Interface
+Navigation to Quickly Reach Objects
+Navigator for Document Overview
+Showing, Docking and Hiding Windows
+Showing Navigation Pane of the Help
+Switching Between Insert Mode and Overwrite Mode
+Using Toolbars
+Printing, Faxing, Sending
+Printing Address Labels
+Printing in Black and White
+Sending Documents as E-mail
+Sending Faxes and Configuring Oracle Open Office for Faxing
+Drag & Drop
+Dragging and Dropping Within a Oracle Open Office Document
+Moving and Copying Text in Documents
+Copying Spreadsheet Areas to Text Documents
+Copying Graphics Between Documents
+Copying Graphics From the Gallery
+Drag-and-Drop With the Data Source View
+Copy and Paste
+Copying Drawing Objects Into Other Documents
+Copying Graphics Between Documents
+Copying Graphics From the Gallery
+Copying Spreadsheet Areas to Text Documents
+Charts and Diagrams
+Inserting Charts
+Charts in Oracle Open Office
+Load, Save, Import, Export
+Opening Documents
+Opening documents saved in other formats
+Saving Documents
+Saving Documents Automatically
+Saving Documents in Other Formats
+Importing and Exporting Data in Text Format
+Links and References
+Inserting Hyperlinks
+Relative and Absolute Links
+Editing Hyperlinks
+Document Version Tracking
+Comparing Versions of a Document
+Merging Versions
+Recording Changes
+Recording and Displaying Changes
+Accepting or Rejecting Changes
+Version Management
+Labels and Business Cards
+Creating and Printing Labels and Business Cards
+Inserting External Data
+Inserting Data From Spreadsheets
+Inserting Data From Text Documents
+Inserting, Editing, Saving Bitmaps
+Adding Graphics to the Gallery
+Automatic Functions
+Turning off Automatic URL Recognition
+Searching and Replacing
+Searching With a Form Filter
+Searching With the Hyperlink Bar
+Searching Tables and Form Documents
+List of Regular Expressions
+Guides
+Applying Line Styles
+Changing the Color of Text
+Changing the Title of a Document
+Creating Round Corners
+Defining Background Colors or Background Graphics
+Defining Line Ends
+Defining Line Styles
+Editing Graphic Objects
+Drawing Lines in Text
+First Steps
+Inserting Objects From the Gallery
+Inserting Protected Spaces, Hyphens and Conditional Separators
+Inserting Special Characters
+Inserting and Editing Tab Stops
+Protecting Content in Oracle Open Office
+Protecting Records
+Selecting the Maximum Printable Area on a Page
+Selecting Measurement Units
+Selecting the Document Language
+Table Design
+Turning off Bullets and Numbering for Individual Paragraphs
+Database Functionality
+General Information
+Oracle Open Office Database
+Database Overview
+Creating a New Database
+Working with Tables
+Working with Queries
+Working with Forms
+Creating Reports
+Registering and Deleting a Database
+Importing and Exporting Data in Base
+Executing SQL Commands
+Text Documents
+General Information and User Interface Usage
+Welcome to the Oracle Open Office Writer Help
+Oracle Open Office Writer Features
+Instructions for Using Oracle Open Office Writer
+Docking and Resizing Windows
+Shortcut Keys for Oracle Open Office Writer
+Counting Words
+Using Shortcut Keys (Oracle Open Office Writer Accessibility)
+Command and Menu Reference
+Menus
+Menus
+File
+Edit
+View
+Insert
+Format
+Tools
+Window
+Toolbars
+Toolbars
+Formatting Bar
+Picture Bar
+Table Bar
+Drawing Object Properties Bar
+Bullets and Numbering Bar
+Status Bar
+Page Preview
+Rulers
+Formula Bar
+Frame Bar
+OLE-Object Bar
+Text Object Bar
+Standard Bar
+Hyperlink Bar
+Table Data Bar
+Form Navigation Bar
+Query Design Bar
+Form Design Toolbar
+Creating Text Documents
+Navigating and Selecting With the Keyboard
+Using the Direct Cursor
+Graphics in Text Documents
+Inserting Graphics
+Inserting a Graphic From a File
+Inserting Graphics From the Gallery With Drag-and-Drop
+Inserting a Scanned Image
+Inserting a Calc Chart into a Text Document
+Inserting Graphics From Oracle Open Office Draw or Impress
+Inserting a Horizontal Line
+Tables in Text Documents
+Turning Number Recognition On or Off in Tables
+Modifying Rows and Columns by Keyboard
+Deleting Tables or the Contents of a Table
+Inserting Tables
+Repeating a Table Header on a New Page
+Resizing Rows and Columns in a Text Table
+Adding or Deleting a Row or Column to a Table Using the Keyboard
+Objects in Text Documents
+Positioning Objects
+Wrapping Text Around Objects
+Sections and Frames in Text Documents
+Using Sections
+Inserting, Editing, and Linking Text Frames
+Editing Sections
+Inserting Sections
+Tables of Contents and Indexes
+Outline Numbering
+User-Defined Indexes
+Creating a Table of Contents
+Creating Alphabetical Indexes
+Indexes Covering Several Documents
+Creating a Bibliography
+Editing or Deleting Index and Table Entries
+Updating, Editing and Deleting Indexes and Tables of Contents
+Defining Index or Table of Contents Entries
+Formatting an Index or a Table of Contents
+Fields in Text Documents
+About Fields
+Inserting a Fixed or Variable Date Field
+Converting a Field into Text
+Navigating Text Documents
+Moving and Copying Text in Documents
+Rearranging a Document by Using the Navigator
+Inserting Hyperlinks With the Navigator
+Navigator for Text Documents
+Calculating in Text Documents
+Calculating Across Tables
+Calculating in Text Documents
+Calculating and Pasting the Result of a Formula in a Text Document
+Calculating Cell Totals in Tables
+Calculating Complex Formulas in Text Documents
+Displaying the Result of a Table Calculation in a Different Table
+Formatting Text Documents
+Templates and Styles
+Templates and Styles
+Alternating Page Styles on Odd and Even Pages
+Creating a Page Style Based on the Current Page
+Using Styles From Another Document or Template
+Creating New Styles From Selections
+Updating Styles From Selections
+Creating a Document Template
+Changing the Default Template
+Changing the Case of Text
+Hiding Text
+Defining Different Headers and Footers
+Inserting a Chapter Name and Number in a Header or a Footer
+Applying Text Formatting While You Type
+Resetting Font Attributes
+Applying Styles in Fill Format Mode
+Wrapping Text Around Objects
+Using a Frame to Center Text on a Page
+Emphasizing Text
+Rotating Text
+Inserting and Deleting Page Breaks
+Creating and Applying Page Styles
+Making Text Superscript or Subscript
+Special Text Elements
+Using Captions
+Conditional Text
+Conditional Text for Page Counts
+Inserting a Fixed or Variable Date Field
+Adding Input Fields
+Inserting Page Numbers of Continuation Pages
+Inserting Page Numbers in Footers
+Hiding Text
+Defining Different Headers and Footers
+Inserting a Chapter Name and Number in a Header or a Footer
+Querying User Data in Fields or Conditions
+Inserting and Editing Footnotes or Endnotes
+Spacing Between Footnotes
+About Headers and Footers
+Formatting Headers or Footers
+Animating Text
+Creating a Form Letter
+Automatic Functions
+Adding Exceptions to the AutoCorrect List
+Using AutoText
+Creating Numbered or Bulleted Lists as You Type
+Turning Off AutoCorrect
+Automatically Check Spelling
+Turning Number Recognition On or Off in Tables
+Checking Spelling in Other Languages
+Hyphenation
+Numbering and Lists
+Adding Chapter Numbers to Captions
+Creating Numbered or Bulleted Lists as You Type
+Outline Numbering
+Changing the Outline Level of Numbered and Bulleted Lists
+Combining Numbered Lists
+Adding Line Numbers
+Modifying Numbering in a Numbered List
+Defining Number Ranges
+Adding Numbering
+Numbering and Numbering Styles
+Adding Bullets
+Spellchecking, Thesaurus, and Languages
+Automatically Check Spelling
+Removing Words From a User-Defined Dictionary
+Thesaurus
+Checking Spelling in Other Languages
+Checking Spelling and Grammar
+Troubleshooting Tips
+Inserting Text Before a Table at the Top of Page
+Going to Specific Bookmark
+Loading, Saving, Importing, and Exporting
+Saving Text Documents in HTML Format
+Inserting an Entire Text Document
+Master Documents
+Master Documents and Subdocuments
+Links and References
+Inserting Cross-References
+Inserting Hyperlinks With the Navigator
+Printing
+Selecting printer paper trays
+Previewing a Page Before Printing
+Printing Multiple Pages on One Sheet
+Creating and Applying Page Styles
+Searching and Replacing
+Using Wildcards in Text Searches
+List of Regular Expressions
+HTML Documents
+Web Pages
+HTML Filters and Forms
+Saving Text Documents in HTML Format
+Macros and Programming
+General Information and User Interface Usage
+Oracle Open Office Basic Help
+Programming with Oracle Open Office Basic
+Oracle Open Office Basic Glossary
+Basics
+Syntax
+Oracle Open Office Basic IDE
+IDE Overview
+The Basic Editor
+Watch Window
+Macro Toolbar
+Macro
+Command Reference
+Using Procedures and Functions
+Libraries, Modules and Dialogs
+Run-Time Functions, Statements, and Operators
+Screen I/O Functions
+File I/O Functions
+Date and Time Functions
+Error-Handling Functions
+Logical Operators
+Mathematical Operators
+Numeric Functions
+Controlling Program Execution
+Variables
+Comparison Operators
+Strings
+Other Commands
+Alphabetic List of Functions, Statements, and Operators
+Abs Function [Runtime]
+AND Operator [Runtime]
+Array Function [Runtime]
+Asc Function [Runtime]
+Atn Function [Runtime]
+Beep Statement [Runtime]
+Blue Function [Runtime]
+CBool Function [Runtime]
+CByte Function [Runtime]
+CDateFromIso Function [Runtime]
+CDateToIso Function [Runtime]
+CDate Function [Runtime]
+CDbl Function [Runtime]
+CInt Function [Runtime]
+CLng Function [Runtime]
+CSng Function[Runtime]
+CStr Function [Runtime]
+Call Statement [Runtime]
+ChDir Statement [Runtime]
+ChDrive Statement [Runtime]
+Choose Function [Runtime]
+Chr Function [Runtime]
+Close Statement [Runtime]
+Comparison Operators [Runtime]
+Const Statement [Runtime]
+ConvertFromURL Function [Runtime]
+ConvertToURL Function [Runtime]
+Cos Function [Runtime]
+CreateUnoDialog Function [Runtime]
+CreateUnoListener Function [Runtime]
+CreateUnoService Function [Runtime]
+CreateUnoStruct Function [Runtime]
+CurDir Function [Runtime]
+DateSerial Function [Runtime]
+DateValue Function [Runtime]
+Date Statement [Runtime]
+Day Function [Runtime]
+Declare Statement [Runtime]
+DefBool Statement [Runtime]
+DefDate Statement [Runtime]
+DefDbl Statement [Runtime]
+DefInt Statement [Runtime]
+DefLng Statement [Runtime]
+DefObj Statement [Runtime]
+DefVar Statement [Runtime]
+DimArray Function [Runtime]
+Dim Statement [Runtime]
+Dir Function [Runtime]
+Do...Loop Statement [Runtime]
+Comparison Operators [Runtime]
+End Statement [Runtime]
+Environ Function [Runtime]
+Eof Function [Runtime]
+EqualUnoObjects Function [Runtime]
+Eqv Operator [Runtime]
+Erl Function [Runtime]
+Err Function [Runtime]
+Error Function [Runtime]
+Error-Handling Functions
+Exit Statement [Runtime]
+Exp Function [Runtime]
+FileAttr-Function [Runtime]
+FileCopy Statement [Runtime]
+FileDateTime Function [Runtime]
+FileExists Function [Runtime]
+FileLen-Function [Runtime]
+FindObject Function [Runtime]
+FindPropertyObject Function [Runtime]
+Fix Function [Runtime]
+For...Next Statement [Runtime]
+Format Function [Runtime]
+FreeFile Function[Runtime]
+FreeLibrary Function [Runtime]
+Function Statement [Runtime]
+Further Statements
+Generating Random Numbers
+GetAttr Function [Runtime]
+GetProcessServiceManager Function [Runtime]
+GetSolarVersion Function [Runtime]
+GetSystemTicks Function [Runtime]
+Get Statement [Runtime]
+GlobalScope [Runtime]
+GoSub...Return Statement [Runtime]
+GoTo Statement [Runtime]
+Green Function [Runtime]
+HasUnoInterfaces Function [Runtime]
+Hex Function [Runtime]
+Hour Function [Runtime]
+IIf Statement [Runtime]
+If...Then...Else Statement [Runtime]
+Imp-Operator [Runtime]
+InStr Function [Runtime]
+InputBox Function [Runtime]
+Input# Statement [Runtime]
+Int Function [Runtime]
+IsArray Function [Runtime]
+IsDate Function [Runtime]
+IsEmpty Function [Runtime]
+IsMissing function [Runtime]
+IsNull Function [Runtime]
+IsNumeric Function [Runtime]
+IsObject Function [Runtime]
+IsUnoStruct Function [Runtime]
+Join Function [Runtime]
+Kill Statement [Runtime]
+LBound Function [Runtime]
+LCase Function [Runtime]
+LSet Statement [Runtime]
+LTrim Function [Runtime]
+Left Function [Runtime]
+Len Function [Runtime]
+Let Statement [Runtime]
+Line Input # Statement [Runtime]
+Loc Function [Runtime]
+Lof Function [Runtime]
+Log Function [Runtime]
+Mid Function, Mid Statement [Runtime]
+Minute Function [Runtime]
+MkDir Statement [Runtime]
+Mod-Operator [Runtime]
+Month Function [Runtime]
+MsgBox Function [Runtime]
+MsgBox Statement [Runtime]
+Name Statement [Runtime]
+Not-Operator [Runtime]
+Now Function [Runtime]
+Numeric Functions
+Oct Function [Runtime]
+On Error GoTo ... Resume Statement [Runtime]
+On...GoSub Statement; On...GoTo Statement [Runtime]
+Open Statement[Runtime]
+Option Base Statement [Runtime]
+Option Explicit Statement [Runtime]
+Optional (in Function Statement) [Runtime]
+Or-Operator [Runtime]
+Print Statement [Runtime]
+Public Statement [Runtime]
+Put Statement [Runtime]
+QBColor Function [Runtime]
+RGB Function [Runtime]
+RSet Statement [Runtime]
+RTrim Function [Runtime]
+Randomize Statement [Runtime]
+ReDim Statement [Runtime]
+Red Function [Runtime]
+Rem Statement [Runtime]
+Reset Statement [Runtime]
+Right Function [Runtime]
+RmDir Statement [Runtime]
+Rnd Function [Runtime]
+Second Function [Runtime]
+Seek Function [Runtime]
+Seek Statement [Runtime]
+Select...Case Statement [Runtime]
+SetAttr Statement [Runtime]
+Set Statement[Runtime]
+Sgn Function [Runtime]
+Shell Function [Runtime]
+Sin Function [Runtime]
+Space Function [Runtime]
+Split Function [Runtime]
+Sqr Function [Runtime]
+Square Root Calculation
+Static Statement [Runtime]
+Stop Statement [Runtime]
+StrComp Function [Runtime]
+Str Function [Runtime]
+String Function [Runtime]
+Sub Statement [Runtime]
+Switch Function [Runtime]
+Tan Function [Runtime]
+TimeSerial Function [Runtime]
+TimeValue Function [Runtime]
+Time Statement [Runtime]
+Timer Function [Runtime]
+Trigonometric Functions
+Trim Function [Runtime]
+TwipsPerPixelX Function [Runtime]
+TwipsPerPixelY Function [Runtime]
+TypeName Function; VarType Function[Runtime]
+UBound Function [Runtime]
+UCase Function [Runtime]
+Val Function [Runtime]
+Wait Statement [Runtime]
+WeekDay Function [Runtime]
+While...Wend Statement[Runtime]
+With Statement [Runtime]
+Write Statement [Runtime]
+Xor-Operator [Runtime]
+Year Function [Runtime]
+"-" Operator [Runtime]
+"*" Operator [Runtime]
+"+" Operator [Runtime]
+"/" Operator [Runtime]
+"^" Operator [Runtime]
+Guides
+Changing the Properties of Controls in the Dialog Editor
+Creating Controls in the Dialog Editor
+Programming Examples for Controls in the Dialog Editor
+Opening a Dialog With Program Code
+Creating a Basic Dialog
+Organizing Libraries and Modules
+Using Variables
+Using Objects
+Debugging a Basic Program
+Event-Driven Macros
+Presentations and Drawings
+General Information and User Interface Usage
+Welcome to the Oracle Open Office Impress Help
+Welcome to the Oracle Open Office Draw Help
+Oracle Open Office Impress Features
+Oracle Open Office Draw Features
+Using Shortcut Keys in Oracle Open Office Impress
+Shortcut Keys for Drawing Objects
+Shortcut Keys for Oracle Open Office Impress
+Shortcut Keys for Drawings
+Instructions for Using Oracle Open Office Impress
+Instructions for Using Oracle Open Office Draw
+Command and Menu Reference
+Presentations (Oracle Open Office Impress)
+Menus
+Menus
+File
+Edit
+View
+Insert
+Format
+Tools
+Window
+Slide Show
+Toolbars
+Toolbars
+Line and Filling Bar
+Text Formatting Bar
+Slide View Bar
+Status Bar
+Rulers
+Drawing Bar
+Outline Bar
+Slide Sorter Bar
+Options Bar
+Picture Bar
+Standard Bar
+Hyperlink Bar
+Form Navigation Bar
+Form Design Toolbar
+Edit Points Bar
+Drawings (Oracle Open Office Draw)
+Menus
+Menus
+File
+Edit
+View
+Insert
+Format
+Tools
+Modify
+Toolbars
+Toolbars
+Drawing Bar
+Options Bar
+Standard Bar
+Hyperlink Bar
+Form Navigation Bar
+Form Design Toolbar
+Edit Points Bar
+Loading, Saving, Importing, and Exporting
+Saving a Presentation in HTML Format
+Importing HTML Pages Into Presentations
+Loading Color, Gradient, and Hatching Lists
+Exporting Animations in GIF Format
+Including Spreadsheets in Slides
+Inserting Graphics
+Copying Slides From Other Presentations
+Formatting
+Loading Color, Gradient, and Hatching Lists
+Loading Line and Arrow Styles
+Defining Custom Colors
+Creating Gradient Fills
+Replacing Colors
+Arranging, Aligning and Distributing Objects
+Changing the Slide Background Fill
+Adding a Header or a Footer to All Slides
+Applying a Slide Design to a Slide Master
+Moving Objects
+Printing
+Printing Presentations
+Printing a Slide to Fit a Paper Size
+Effects
+Exporting Animations in GIF Format
+Animating Objects in Presentation Slides
+Animating Slide Transitions
+Cross-Fading Two Objects
+Creating Animated GIF Images
+Objects, Graphics, and Bitmaps
+Combining Objects and Constructing Shapes
+Drawing Sectors and Segments
+Duplicating Objects
+Rotating Objects
+Assembling 3D Objects
+Connecting Lines
+Converting Text Characters into Drawing Objects
+Converting Bitmap Images into Vector Graphics
+Converting 2D Objects to Curves, Polygons, and 3D Objects
+Loading Line and Arrow Styles
+Drawing Curves
+Editing Curves
+Inserting Graphics
+Including Spreadsheets in Slides
+Moving Objects
+Selecting Underlying Objects
+Creating a Flowchart
+Groups and Layers
+Grouping Objects
+About Layers
+Inserting Layers
+Working With Layers
+Moving Objects to a Different Layer
+Text in Presentations and Drawings
+Adding Text
+Converting Text Characters into Drawing Objects
+Viewing
+Creating a Custom Slide Show
+Changing the Slide Order
+Zooming With the Keypad
+Rehearse Timings of Slide Changes
+Charts and Diagrams
+General Information
+Charts in Oracle Open Office
+Oracle Open Office Chart Features
+Shortcuts for Charts
diff --git a/testautomation/framework/optional/input/help_browser/Oracle Open Office_help_topics_en-US.txt b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_topics_en-US.txt
index a7640272ec27..24c206de5308 100644..100755
--- a/testautomation/framework/optional/input/help_browser/Oracle Open Office_help_topics_en-US.txt
+++ b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_help_topics_en-US.txt
@@ -1,2564 +1,10713 @@
-Oracle Open Office Basic : "^" operator (mathematical)
-Oracle Open Office Basic : "-" operator (mathematical)
-Oracle Open Office Basic : "*" operator (mathematical)
-Oracle Open Office Basic : "/" operator (mathematical)
-Oracle Open Office Basic : "+" operator (mathematical)
-Oracle Open Office Basic : 1/2 replacement
-Oracle Open Office Basic : 3D text creation
-Oracle Open Office Basic : abbreviation replacement
-Oracle Open Office Basic : Abs function
-Oracle Open Office Basic : absolute hyperlinks
-Oracle Open Office Basic : absolute saving of URLs
-Oracle Open Office Basic : accents
-Oracle Open Office Basic : Access databases (base)
-Oracle Open Office Basic : access rights for database tables (Base)
-Oracle Open Office Basic : accessibility
-Oracle Open Office Basic : accessibility;general shortcuts
-Oracle Open Office Basic : accessibility;options
-Oracle Open Office Basic : accessibility;Oracle Open Office assistive technology
-Oracle Open Office Basic : accessibility;Oracle Open Office features
-Oracle Open Office Basic : activating
-Oracle Open Office Basic : activating;context menus
-Oracle Open Office Basic : activating;Error Report Tool
-Oracle Open Office Basic : activating;extended help tips
-Oracle Open Office Basic : activating;plug-ins
-Oracle Open Office Basic : ActiveX control
-Oracle Open Office Basic : Adabas D databases (base)
-Oracle Open Office Basic : add-ons, see UNO components
-Oracle Open Office Basic : adding libraries
-Oracle Open Office Basic : additional selection mode
-Oracle Open Office Basic : address books
-Oracle Open Office Basic : address books;LDAP server (Base)
-Oracle Open Office Basic : address books;registering
-Oracle Open Office Basic : address labels from databases
-Oracle Open Office Basic : ADO databases (Base)
-Oracle Open Office Basic : Agenda Wizard
-Oracle Open Office Basic : aging filter
-Oracle Open Office Basic : aligning
-Oracle Open Office Basic : aligning;cells
-Oracle Open Office Basic : aligning;objects
-Oracle Open Office Basic : aligning;paragraphs
-Oracle Open Office Basic : aligning;tables in text
-Oracle Open Office Basic : aligning;text objects
-Oracle Open Office Basic : alternative fonts
-Oracle Open Office Basic : ampersand symbol in StarBasic
-Oracle Open Office Basic : ampersand symbol, see also operators
-Oracle Open Office Basic : anchors
-Oracle Open Office Basic : anchors;changing
-Oracle Open Office Basic : anchors;displaying (Calc)
-Oracle Open Office Basic : anchors;types/positions for draw objects
-Oracle Open Office Basic : AND operator (logical)
-Oracle Open Office Basic : animations
-Oracle Open Office Basic : animations;accessibility options
-Oracle Open Office Basic : appearance options
-Oracle Open Office Basic : Arabic
-Oracle Open Office Basic : Arabic;entering text
-Oracle Open Office Basic : Arabic;language settings
-Oracle Open Office Basic : areas
-Oracle Open Office Basic : areas;bitmap patterns
-Oracle Open Office Basic : areas;hatched/dotted
-Oracle Open Office Basic : areas;shadows
-Oracle Open Office Basic : areas;slanting
-Oracle Open Office Basic : areas;styles
-Oracle Open Office Basic : areas;transparency
-Oracle Open Office Basic : arguments in command line
-Oracle Open Office Basic : arranging
-Oracle Open Office Basic : arranging;objects
-Oracle Open Office Basic : Array function
-Oracle Open Office Basic : arrays
-Oracle Open Office Basic : arrays;declaring
-Oracle Open Office Basic : arrays;dimensioning
-Oracle Open Office Basic : arrows
-Oracle Open Office Basic : arrows;defining arrow heads
-Oracle Open Office Basic : arrows;defining arrow lines
-Oracle Open Office Basic : arrows;drawing in text
-Oracle Open Office Basic : Asc function
-Oracle Open Office Basic : ASCII
-Oracle Open Office Basic : ASCII;definition
-Oracle Open Office Basic : Asian languages
-Oracle Open Office Basic : Asian languages;enabling
-Oracle Open Office Basic : Asian Phonetic Guide
-Oracle Open Office Basic : Asian typography
-Oracle Open Office Basic : assigning macros to events
-Oracle Open Office Basic : assigning scripts
-Oracle Open Office Basic : assistive technology in Oracle Open Office
-Oracle Open Office Basic : Atn function
-Oracle Open Office Basic : attaching toolbars
-Oracle Open Office Basic : attachments in e-mails
-Oracle Open Office Basic : audio
-Oracle Open Office Basic : auto reloading HTML documents
-Oracle Open Office Basic : AutoAbstract function for sending text to presentations
-Oracle Open Office Basic : AutoCaption function in Oracle Open Office Writer
-Oracle Open Office Basic : AutoComplete function in text and list boxes
-Oracle Open Office Basic : AutoCorrect function
-Oracle Open Office Basic : AutoCorrect function;context menu
-Oracle Open Office Basic : AutoCorrect function;options
-Oracle Open Office Basic : AutoCorrect function;pictures and frames
-Oracle Open Office Basic : AutoCorrect function;quotes
-Oracle Open Office Basic : AutoCorrect function;replacement table
-Oracle Open Office Basic : AutoCorrect function;switching on and off in Calc
-Oracle Open Office Basic : AutoCorrect function;URL recognition
-Oracle Open Office Basic : AutoFormat function
-Oracle Open Office Basic : AutoFormat function;switching on and off
-Oracle Open Office Basic : automatic captions (Writer)
-Oracle Open Office Basic : automatic control focus
-Oracle Open Office Basic : automatic hyperlink formatting
-Oracle Open Office Basic : automatic line breaks
-Oracle Open Office Basic : automatic lines/borders in text
-Oracle Open Office Basic : automatic saving
-Oracle Open Office Basic : AutoPilots, see wizards
-Oracle Open Office Basic : AutoValue (Base)
-Oracle Open Office Basic : axes in charts
-Oracle Open Office Basic : backgrounds
-Oracle Open Office Basic : backgrounds;defining colors/pictures
-Oracle Open Office Basic : backgrounds;frames/sections/indexes
-Oracle Open Office Basic : backgrounds;inserting from Gallery
-Oracle Open Office Basic : backgrounds;printing
-Oracle Open Office Basic : backing window
-Oracle Open Office Basic : backups
-Oracle Open Office Basic : backups;automatic
-Oracle Open Office Basic : backups;documents
-Oracle Open Office Basic : Basic
-Oracle Open Office Basic : Basic;fonts for source display
-Oracle Open Office Basic : Basic;programming
-Oracle Open Office Basic : Basic;recording macros
-Oracle Open Office Basic : Basic editor
-Oracle Open Office Basic : basic fonts
-Oracle Open Office Basic : Basic IDE
-Oracle Open Office Basic : Basic IDE;Integrated Development Environment
-Oracle Open Office Basic : Basic IDE;macros
-Oracle Open Office Basic : BasicLibraries (LibraryContainer)
-Oracle Open Office Basic : Beep statement
-Oracle Open Office Basic : Bézier curves
-Oracle Open Office Basic : Bézier curves;control points in presentations
-Oracle Open Office Basic : bi-directional writing
-Oracle Open Office Basic : binding space
-Oracle Open Office Basic : bitmaps
-Oracle Open Office Basic : bitmaps;inserting and editing
-Oracle Open Office Basic : bitmaps;off for faster printing
-Oracle Open Office Basic : bitmaps;patterns
-Oracle Open Office Basic : black and white printing
-Oracle Open Office Basic : black printing in Calc
-Oracle Open Office Basic : block selection mode
-Oracle Open Office Basic : Blue function
-Oracle Open Office Basic : bold
-Oracle Open Office Basic : bold;AutoFormat function
-Oracle Open Office Basic : bold;text
-Oracle Open Office Basic : bookmarks
-Oracle Open Office Basic : bookmarks;Help
-Oracle Open Office Basic : borders
-Oracle Open Office Basic : borders;arranging
-Oracle Open Office Basic : borders;cells on screen (Calc)
-Oracle Open Office Basic : borders;for paragraphs
-Oracle Open Office Basic : borders;for tables
-Oracle Open Office Basic : borders;shadows
-Oracle Open Office Basic : borders;table boundaries (Writer)
-Oracle Open Office Basic : borders, see also frames
-Oracle Open Office Basic : bound fields
-Oracle Open Office Basic : bound fields;controls
-Oracle Open Office Basic : boundaries of tables (Writer)
-Oracle Open Office Basic : break display (Writer)
-Oracle Open Office Basic : breakpoints
-Oracle Open Office Basic : brochures
-Oracle Open Office Basic : brochures;printing several
-Oracle Open Office Basic : build numbers of Oracle Open Office
-Oracle Open Office Basic : bullet lists
-Oracle Open Office Basic : bullet lists;formatting options
-Oracle Open Office Basic : bullets
-Oracle Open Office Basic : bullets;paragraphs
-Oracle Open Office Basic : bullets;replacing
-Oracle Open Office Basic : bullets;turning off
-Oracle Open Office Basic : business cards
-Oracle Open Office Basic : business cards;creating and synchronizing
-Oracle Open Office Basic : business cards;using templates
-Oracle Open Office Basic : button bars, see toolbars
-Oracle Open Office Basic : buttons
-Oracle Open Office Basic : buttons;adding push buttons
-Oracle Open Office Basic : buttons;big/small
-Oracle Open Office Basic : buttons;controls
-Oracle Open Office Basic : buttons;editing hyperlink buttons
-Oracle Open Office Basic : buttons;form functions
-Oracle Open Office Basic : buttons;toolbars
-Oracle Open Office Basic : cache for graphics
-Oracle Open Office Basic : calculating
-Oracle Open Office Basic : calculating;iterative references (Calc)
-Oracle Open Office Basic : Call Stack window
-Oracle Open Office Basic : Call statement
-Oracle Open Office Basic : callouts
-Oracle Open Office Basic : callouts;drawings
-Oracle Open Office Basic : capital letters
-Oracle Open Office Basic : capital letters;AutoCorrect function
-Oracle Open Office Basic : capital letters;font effects
-Oracle Open Office Basic : captions
-Oracle Open Office Basic : captions;automatic captions (Writer)
-Oracle Open Office Basic : captions;tables/pictures/frames/OLE objects (Writer)
-Oracle Open Office Basic : captions, see also labels/callouts
-Oracle Open Office Basic : cascading update (Base)
-Oracle Open Office Basic : case sensitivity
-Oracle Open Office Basic : case sensitivity;comparing cell contents (Calc)
-Oracle Open Office Basic : case sensitivity;searching
-Oracle Open Office Basic : Case statement
-Oracle Open Office Basic : CBool function
-Oracle Open Office Basic : CByte function
-Oracle Open Office Basic : CCur function
-Oracle Open Office Basic : CDate function
-Oracle Open Office Basic : CdateFromIso function
-Oracle Open Office Basic : CdateToIso function
-Oracle Open Office Basic : CDbl function
-Oracle Open Office Basic : CDec function
-Oracle Open Office Basic : cells
-Oracle Open Office Basic : cells;aligning
-Oracle Open Office Basic : cells;coloring (Calc)
-Oracle Open Office Basic : cells;cursor positions after input (Calc)
-Oracle Open Office Basic : cells;formatting without effect (Calc)
-Oracle Open Office Basic : cells;line breaks
-Oracle Open Office Basic : cells;linked to controls
-Oracle Open Office Basic : cells;number of
-Oracle Open Office Basic : cells;pasting
-Oracle Open Office Basic : cells;resetting formats
-Oracle Open Office Basic : cells;showing grid lines (Calc)
-Oracle Open Office Basic : centered text
-Oracle Open Office Basic : centimeters
-Oracle Open Office Basic : certificates
-Oracle Open Office Basic : changes
-Oracle Open Office Basic : changes;accepting or rejecting
-Oracle Open Office Basic : changes;comparing to original
-Oracle Open Office Basic : changes;protecting
-Oracle Open Office Basic : changes;recording
-Oracle Open Office Basic : changes;review function
-Oracle Open Office Basic : changes;showing
-Oracle Open Office Basic : changing
-Oracle Open Office Basic : changing;control properties
-Oracle Open Office Basic : changing;document titles
-Oracle Open Office Basic : changing;file associations in Setup program
-Oracle Open Office Basic : changing;icon sizes
-Oracle Open Office Basic : changing;links
-Oracle Open Office Basic : changing;work directory
-Oracle Open Office Basic : changing, see also editing and replacing
-Oracle Open Office Basic : character styles
-Oracle Open Office Basic : character styles;language selection
-Oracle Open Office Basic : characters
-Oracle Open Office Basic : characters;alternative fonts
-Oracle Open Office Basic : characters;Asian layout
-Oracle Open Office Basic : characters;bold
-Oracle Open Office Basic : characters;coloring
-Oracle Open Office Basic : characters;displaying only on screen (Writer)
-Oracle Open Office Basic : characters;enabling CTL and Asian characters
-Oracle Open Office Basic : characters;font effects
-Oracle Open Office Basic : characters;fonts and formats
-Oracle Open Office Basic : characters;hyperlinks
-Oracle Open Office Basic : characters;italics
-Oracle Open Office Basic : characters;language selection
-Oracle Open Office Basic : characters;shadowed
-Oracle Open Office Basic : characters;spacing
-Oracle Open Office Basic : characters;special
-Oracle Open Office Basic : characters;underlining
-Oracle Open Office Basic : charcoal sketches filter
-Oracle Open Office Basic : charts
-Oracle Open Office Basic : charts;arranging within stacks
-Oracle Open Office Basic : charts;bars with textures
-Oracle Open Office Basic : charts;colors
-Oracle Open Office Basic : charts;copying with link to source cell range
-Oracle Open Office Basic : charts;displaying (Calc)
-Oracle Open Office Basic : charts;editing axes
-Oracle Open Office Basic : charts;editing data
-Oracle Open Office Basic : charts;editing legends
-Oracle Open Office Basic : charts;editing titles
-Oracle Open Office Basic : charts;inserting
-Oracle Open Office Basic : charts;updating automatically (Writer)
-Oracle Open Office Basic : ChDir statement
-Oracle Open Office Basic : ChDrive statement
-Oracle Open Office Basic : check box control
-Oracle Open Office Basic : check box creation
-Oracle Open Office Basic : Chinese writing systems
-Oracle Open Office Basic : Choose function
-Oracle Open Office Basic : choosing printers
-Oracle Open Office Basic : Chr function
-Oracle Open Office Basic : CInt function
-Oracle Open Office Basic : circle drawings
-Oracle Open Office Basic : Client Side ImageMap
-Oracle Open Office Basic : clipboard
-Oracle Open Office Basic : clipboard;cutting
-Oracle Open Office Basic : clipboard;pasting
-Oracle Open Office Basic : clipboard;pasting formatted/unformatted text
-Oracle Open Office Basic : clipboard;selection clipboard
-Oracle Open Office Basic : clipboard;Unix
-Oracle Open Office Basic : CLng function
-Oracle Open Office Basic : Close statement
-Oracle Open Office Basic : closing
-Oracle Open Office Basic : closing;documents
-Oracle Open Office Basic : closing;toolbars
-Oracle Open Office Basic : collaboration
-Oracle Open Office Basic : color bar
-Oracle Open Office Basic : colors
-Oracle Open Office Basic : colors;adding
-Oracle Open Office Basic : colors;appearance
-Oracle Open Office Basic : colors;backgrounds
-Oracle Open Office Basic : colors;charts
-Oracle Open Office Basic : colors;fill format
-Oracle Open Office Basic : colors;fonts
-Oracle Open Office Basic : colors;grid lines and cells (Calc)
-Oracle Open Office Basic : colors;models
-Oracle Open Office Basic : colors;not printing
-Oracle Open Office Basic : colors;printing in grayscale
-Oracle Open Office Basic : colors;restriction (Calc)
-Oracle Open Office Basic : colors;selection
-Oracle Open Office Basic : column headers
-Oracle Open Office Basic : column headers;displaying (Calc)
-Oracle Open Office Basic : column headers;highlighting (Calc)
-Oracle Open Office Basic : columns
-Oracle Open Office Basic : columns;setting with the mouse
-Oracle Open Office Basic : combo box control
-Oracle Open Office Basic : combo box creation
-Oracle Open Office Basic : command button creation
-Oracle Open Office Basic : command buttons, see push buttons
-Oracle Open Office Basic : command line parameters
-Oracle Open Office Basic : commands
-Oracle Open Office Basic : commands;repeating
-Oracle Open Office Basic : commands;SQL
-Oracle Open Office Basic : comments
-Oracle Open Office Basic : comments;displaying (Calc)
-Oracle Open Office Basic : comments;inserting/editing/deleting/printing
-Oracle Open Office Basic : comments;on changes
-Oracle Open Office Basic : comments;printing in text
-Oracle Open Office Basic : comments;Rem statement
-Oracle Open Office Basic : common terms
-Oracle Open Office Basic : common terms;Chinese dictionary
-Oracle Open Office Basic : common terms;glossaries
-Oracle Open Office Basic : common terms;Internet glossary
-Oracle Open Office Basic : comparison operators
-Oracle Open Office Basic : comparison operators;Oracle Open Office Basic
-Oracle Open Office Basic : comparisons
-Oracle Open Office Basic : comparisons;document versions
-Oracle Open Office Basic : comparisons;operators in default filter dialog
-Oracle Open Office Basic : compatibility settings for MS Word import
-Oracle Open Office Basic : complete screen view
-Oracle Open Office Basic : complex text layout
-Oracle Open Office Basic : complex text layout;definition
-Oracle Open Office Basic : complex text layout;enabling
-Oracle Open Office Basic : complex text layout, see CTL
-Oracle Open Office Basic : components
-Oracle Open Office Basic : components;addressing
-Oracle Open Office Basic : compose key to insert special characters
-Oracle Open Office Basic : concatenation, see ampersand symbol
-Oracle Open Office Basic : conditional separators
-Oracle Open Office Basic : conditions
-Oracle Open Office Basic : conditions;in number formats
-Oracle Open Office Basic : conditions;items in Data Navigator
-Oracle Open Office Basic : Configuration Manager
-Oracle Open Office Basic : configuring
-Oracle Open Office Basic : configuring;fax icon
-Oracle Open Office Basic : configuring;Oracle Open Office
-Oracle Open Office Basic : configuring;toolbars
-Oracle Open Office Basic : connections to data sources (Base)
-Oracle Open Office Basic : Const statement
-Oracle Open Office Basic : constants
-Oracle Open Office Basic : contents protection
-Oracle Open Office Basic : context menus
-Oracle Open Office Basic : continuation
-Oracle Open Office Basic : continuation;long lines in editor
-Oracle Open Office Basic : control point display in presentations
-Oracle Open Office Basic : controls
-Oracle Open Office Basic : controls;activating in forms
-Oracle Open Office Basic : controls;adding to documents
-Oracle Open Office Basic : controls;arranging in forms
-Oracle Open Office Basic : controls;arranging within stacks
-Oracle Open Office Basic : controls;assigning data sources
-Oracle Open Office Basic : controls;assigning macros (Basic)
-Oracle Open Office Basic : controls;bound fields/list contents/linked cells
-Oracle Open Office Basic : controls;changing properties
-Oracle Open Office Basic : controls;creating in the dialog editor
-Oracle Open Office Basic : controls;events
-Oracle Open Office Basic : controls;focus
-Oracle Open Office Basic : controls;formatted fields
-Oracle Open Office Basic : controls;grouping
-Oracle Open Office Basic : controls;hidden
-Oracle Open Office Basic : controls;in dialog editor
-Oracle Open Office Basic : controls;inserting
-Oracle Open Office Basic : controls;multi-line titles
-Oracle Open Office Basic : controls;positions and sizes
-Oracle Open Office Basic : controls;printing
-Oracle Open Office Basic : controls;properties
-Oracle Open Office Basic : controls;properties of form controls
-Oracle Open Office Basic : controls;properties of table controls
-Oracle Open Office Basic : controls;reading or editing properties (example)
-Oracle Open Office Basic : controls;reference by SQL
-Oracle Open Office Basic : controls;rich text control
-Oracle Open Office Basic : controls;select mode
-Oracle Open Office Basic : controls;showing (Writer)
-Oracle Open Office Basic : converters
-Oracle Open Office Basic : converters;Euro converter
-Oracle Open Office Basic : converters;PostScript, UNIX
-Oracle Open Office Basic : converters;XML
-Oracle Open Office Basic : ConvertFromURL function
-Oracle Open Office Basic : converting
-Oracle Open Office Basic : converting;Hangul/Hanja
-Oracle Open Office Basic : converting;metrics
-Oracle Open Office Basic : converting;Microsoft documents
-Oracle Open Office Basic : converting;Oracle Open Office documents
-Oracle Open Office Basic : converting;Pocket PC formats
-Oracle Open Office Basic : ConvertToURL function
-Oracle Open Office Basic : copies
-Oracle Open Office Basic : copies;printing
-Oracle Open Office Basic : copying
-Oracle Open Office Basic : copying;by drag and drop
-Oracle Open Office Basic : copying;data from text documents
-Oracle Open Office Basic : copying;datasource records in spreadsheets
-Oracle Open Office Basic : copying;draw objects
-Oracle Open Office Basic : copying;draw objects between documents
-Oracle Open Office Basic : copying;formatting
-Oracle Open Office Basic : copying;from data source view
-Oracle Open Office Basic : copying;from Gallery
-Oracle Open Office Basic : copying;in Unix
-Oracle Open Office Basic : copying;modules
-Oracle Open Office Basic : copying;pictures, between documents
-Oracle Open Office Basic : copying;sheet areas, to text documents
-Oracle Open Office Basic : copying;to Gallery
-Oracle Open Office Basic : copyright for Oracle Open Office
-Oracle Open Office Basic : corner roundings
-Oracle Open Office Basic : Cos function
-Oracle Open Office Basic : crash reports
-Oracle Open Office Basic : CreateObject function
-Oracle Open Office Basic : CreateUnoDialog function
-Oracle Open Office Basic : CreateUnoListener function
-Oracle Open Office Basic : CreateUnoService function
-Oracle Open Office Basic : CreateUnoStruct function
-Oracle Open Office Basic : CreateUnoValue function
-Oracle Open Office Basic : criteria of query design (Base)
-Oracle Open Office Basic : cropping pictures
-Oracle Open Office Basic : CSng function
-Oracle Open Office Basic : CStr function
-Oracle Open Office Basic : CTL
-Oracle Open Office Basic : CTL;(not) wrapping words
-Oracle Open Office Basic : CTL;complex text layout languages
-Oracle Open Office Basic : CTL;definition
-Oracle Open Office Basic : CTL;options
-Oracle Open Office Basic : CurDir function
-Oracle Open Office Basic : currencies
-Oracle Open Office Basic : currencies;converters
-Oracle Open Office Basic : currencies;format codes
-Oracle Open Office Basic : currency field control
-Oracle Open Office Basic : currency field creation
-Oracle Open Office Basic : currency formats
-Oracle Open Office Basic : cursor
-Oracle Open Office Basic : cursor;allowing in protected areas (Writer)
-Oracle Open Office Basic : cursor;in read-only text
-Oracle Open Office Basic : cursor;quickly moving to an object
-Oracle Open Office Basic : curves
-Oracle Open Office Basic : curves;editing points
-Oracle Open Office Basic : custom dictionaries
-Oracle Open Office Basic : custom dictionaries;editing
-Oracle Open Office Basic : custom hyphens (Writer)
-Oracle Open Office Basic : custom quotes
-Oracle Open Office Basic : custom templates
-Oracle Open Office Basic : customizing
-Oracle Open Office Basic : customizing;events
-Oracle Open Office Basic : customizing;keyboard
-Oracle Open Office Basic : customizing;menus
-Oracle Open Office Basic : customizing;Oracle Open Office
-Oracle Open Office Basic : customizing;round corners
-Oracle Open Office Basic : customizing;toolbars
-Oracle Open Office Basic : cutting
-Oracle Open Office Basic : CVar function
-Oracle Open Office Basic : CVErr function
-Oracle Open Office Basic : dashes
-Oracle Open Office Basic : data
-Oracle Open Office Basic : data;filtering in forms
-Oracle Open Office Basic : data;forms and subforms
-Oracle Open Office Basic : data;read-only
-Oracle Open Office Basic : data;sorting in forms
-Oracle Open Office Basic : data;user data
-Oracle Open Office Basic : data binding change in XForms
-Oracle Open Office Basic : Data Navigator
-Oracle Open Office Basic : Data Navigator;adding/editing items
-Oracle Open Office Basic : Data Navigator;display options
-Oracle Open Office Basic : data source browser
-Oracle Open Office Basic : data source explorer
-Oracle Open Office Basic : data source view
-Oracle Open Office Basic : data source view;drag and drop
-Oracle Open Office Basic : data source view;overview
-Oracle Open Office Basic : data source view;showing
-Oracle Open Office Basic : data sources
-Oracle Open Office Basic : data sources;as tables
-Oracle Open Office Basic : data sources;connection settings (Base)
-Oracle Open Office Basic : data sources;copying records to spreadsheets
-Oracle Open Office Basic : data sources;displaying current
-Oracle Open Office Basic : data sources;LDAP server (Base)
-Oracle Open Office Basic : data sources;Oracle Open Office Base
-Oracle Open Office Basic : data sources;registering address books
-Oracle Open Office Basic : data sources;reports
-Oracle Open Office Basic : data sources;viewing
-Oracle Open Office Basic : data structure of XForms
-Oracle Open Office Basic : data, see also values
-Oracle Open Office Basic : database contents
-Oracle Open Office Basic : database contents;inserting as tables
-Oracle Open Office Basic : database contents;inserting as text
-Oracle Open Office Basic : database reports
-Oracle Open Office Basic : Database Wizard (Base)
-Oracle Open Office Basic : databases
-Oracle Open Office Basic : databases;administration through SQL (Base)
-Oracle Open Office Basic : databases;ADO (Base)
-Oracle Open Office Basic : databases;connecting (Base)
-Oracle Open Office Basic : databases;creating
-Oracle Open Office Basic : databases;creating labels
-Oracle Open Office Basic : databases;creating queries
-Oracle Open Office Basic : databases;creating reports
-Oracle Open Office Basic : databases;creating tables
-Oracle Open Office Basic : databases;deleting (Base)
-Oracle Open Office Basic : databases;drag and drop (Base)
-Oracle Open Office Basic : databases;editing tables
-Oracle Open Office Basic : databases;form filters
-Oracle Open Office Basic : databases;formats (Base)
-Oracle Open Office Basic : databases;importing/exporting
-Oracle Open Office Basic : databases;JDBC (Base)
-Oracle Open Office Basic : databases;main page (Base)
-Oracle Open Office Basic : databases;ODBC (Base)
-Oracle Open Office Basic : databases;overview
-Oracle Open Office Basic : databases;registering (Base)
-Oracle Open Office Basic : databases;searching records
-Oracle Open Office Basic : databases;shortcut keys
-Oracle Open Office Basic : databases;sorting
-Oracle Open Office Basic : databases;standard filters
-Oracle Open Office Basic : databases;text formats
-Oracle Open Office Basic : databases;viewing
-Oracle Open Office Basic : date field control
-Oracle Open Office Basic : date fields
-Oracle Open Office Basic : date fields;creating
-Oracle Open Office Basic : date fields;properties
-Oracle Open Office Basic : date formats
-Oracle Open Office Basic : Date statement
-Oracle Open Office Basic : DateAdd function
-Oracle Open Office Basic : DateDiff function
-Oracle Open Office Basic : DatePart function
-Oracle Open Office Basic : dates
-Oracle Open Office Basic : dates;default (Calc)
-Oracle Open Office Basic : dates;printing in presentations
-Oracle Open Office Basic : dates;start 1900/01/01 (Calc)
-Oracle Open Office Basic : dates;start 1904/01/01 (Calc)
-Oracle Open Office Basic : DateSerial function
-Oracle Open Office Basic : DateValue function
-Oracle Open Office Basic : Day function
-Oracle Open Office Basic : dBASE
-Oracle Open Office Basic : dBASE;database settings (Base)
-Oracle Open Office Basic : DDE
-Oracle Open Office Basic : DDE;definition
-Oracle Open Office Basic : deactivating
-Oracle Open Office Basic : deactivating;plug-ins
-Oracle Open Office Basic : debugging Basic programs
-Oracle Open Office Basic : decimal places displayed (Calc)
-Oracle Open Office Basic : decimal separator key
-Oracle Open Office Basic : decimal tab stops
-Oracle Open Office Basic : Declare statement
-Oracle Open Office Basic : declaring variables
-Oracle Open Office Basic : default directories
-Oracle Open Office Basic : default filters
-Oracle Open Office Basic : default filters;comparison operators
-Oracle Open Office Basic : default filters;databases
-Oracle Open Office Basic : default printer
-Oracle Open Office Basic : default printer;setting up
-Oracle Open Office Basic : default printer;UNIX
-Oracle Open Office Basic : default templates
-Oracle Open Office Basic : default templates;changing
-Oracle Open Office Basic : default templates;organizing
-Oracle Open Office Basic : defaults
-Oracle Open Office Basic : defaults;documents
-Oracle Open Office Basic : defaults;file formats in file dialogs
-Oracle Open Office Basic : defaults;file formats in Oracle Open Office
-Oracle Open Office Basic : defaults;fonts
-Oracle Open Office Basic : defaults;grids (Writer/Calc)
-Oracle Open Office Basic : defaults;languages
-Oracle Open Office Basic : defaults;number formats
-Oracle Open Office Basic : defaults;of saving
-Oracle Open Office Basic : defaults;program configuration
-Oracle Open Office Basic : defaults;tab stops in text
-Oracle Open Office Basic : defaults;views
-Oracle Open Office Basic : DefBool statement
-Oracle Open Office Basic : DefCur statement
-Oracle Open Office Basic : DefDate statement
-Oracle Open Office Basic : DefDbl statement
-Oracle Open Office Basic : DefErr statement
-Oracle Open Office Basic : defining
-Oracle Open Office Basic : defining;arrowheads and other line ends
-Oracle Open Office Basic : defining;colors
-Oracle Open Office Basic : defining;constants
-Oracle Open Office Basic : defining;line styles
-Oracle Open Office Basic : defining;paragraph borders
-Oracle Open Office Basic : defining;queries (Base)
-Oracle Open Office Basic : defining;table borders
-Oracle Open Office Basic : DefInt statement
-Oracle Open Office Basic : DefLng statement
-Oracle Open Office Basic : DefObj statement
-Oracle Open Office Basic : DefSng statement
-Oracle Open Office Basic : DefStr statement
-Oracle Open Office Basic : DefVar statement
-Oracle Open Office Basic : deleting
-Oracle Open Office Basic : deleting;all direct formatting
-Oracle Open Office Basic : deleting;comments
-Oracle Open Office Basic : deleting;databases (Base)
-Oracle Open Office Basic : deleting;hyperlinks
-Oracle Open Office Basic : deleting;libraries/modules/dialogs
-Oracle Open Office Basic : deleting;lines in text
-Oracle Open Office Basic : deleting;macro assignments to events
-Oracle Open Office Basic : deleting;models/instances
-Oracle Open Office Basic : deleting;namespaces in XForms
-Oracle Open Office Basic : deleting;tab stops
-Oracle Open Office Basic : deleting;templates
-Oracle Open Office Basic : deleting;XML filters
-Oracle Open Office Basic : depth stagger
-Oracle Open Office Basic : descriptions for objects
-Oracle Open Office Basic : design mode after saving
-Oracle Open Office Basic : design view
-Oracle Open Office Basic : design view;creating forms
-Oracle Open Office Basic : design view;queries/views (Base)
-Oracle Open Office Basic : designing
-Oracle Open Office Basic : designing;database tables
-Oracle Open Office Basic : designing;fonts
-Oracle Open Office Basic : designing;queries (Base)
-Oracle Open Office Basic : detaching toolbars
-Oracle Open Office Basic : dialog editor
-Oracle Open Office Basic : dialog editor;changing control properties
-Oracle Open Office Basic : dialog editor;creating controls
-Oracle Open Office Basic : dialog editor;programming examples for controls
-Oracle Open Office Basic : DialogLibraries (LibraryContainer)
-Oracle Open Office Basic : dialogs
-Oracle Open Office Basic : dialogs;creating Basic dialogs
-Oracle Open Office Basic : dialogs;displaying (example)
-Oracle Open Office Basic : dialogs;loading (example)
-Oracle Open Office Basic : dialogs;organizing
-Oracle Open Office Basic : dialogs;properties
-Oracle Open Office Basic : dialogs;translating
-Oracle Open Office Basic : dialogs;using program code to show (example)
-Oracle Open Office Basic : dictionaries
-Oracle Open Office Basic : dictionaries;common terms in simplified and traditional chinese
-Oracle Open Office Basic : dictionaries;creating
-Oracle Open Office Basic : dictionaries;editing user-defined
-Oracle Open Office Basic : dictionaries;spellcheck
-Oracle Open Office Basic : dictionaries, see also languages
-Oracle Open Office Basic : digital signatures
-Oracle Open Office Basic : digital signatures;getting/managing/applying
-Oracle Open Office Basic : digital signatures;overview
-Oracle Open Office Basic : digital signatures;WebDAV over HTTPS
-Oracle Open Office Basic : Dim statement
-Oracle Open Office Basic : DimArray function
-Oracle Open Office Basic : dimensioning arrays
-Oracle Open Office Basic : Dir function
-Oracle Open Office Basic : direct formatting
-Oracle Open Office Basic : direct formatting;undoing all
-Oracle Open Office Basic : directories
-Oracle Open Office Basic : directories;creating new
-Oracle Open Office Basic : directories;directory structure
-Oracle Open Office Basic : disabled persons
-Oracle Open Office Basic : displaying
-Oracle Open Office Basic : displaying;comments (Calc)
-Oracle Open Office Basic : displaying;comments in text documents
-Oracle Open Office Basic : displaying;non-printing characters (Writer)
-Oracle Open Office Basic : displaying;pictures and objects (Writer)
-Oracle Open Office Basic : displaying;tables (Writer)
-Oracle Open Office Basic : displaying;zero values (Calc)
-Oracle Open Office Basic : distances
-Oracle Open Office Basic : distinct values in SQL queries
-Oracle Open Office Basic : distorting in drawings
-Oracle Open Office Basic : distributing XML filters
-Oracle Open Office Basic : DLL (Dynamic Link Library)
-Oracle Open Office Basic : Do...Loop statement
-Oracle Open Office Basic : docking
-Oracle Open Office Basic : docking;definition
-Oracle Open Office Basic : docking;toolbars
-Oracle Open Office Basic : docking;windows
-Oracle Open Office Basic : Document Converter Wizard
-Oracle Open Office Basic : Document Map, see Navigator
-Oracle Open Office Basic : document types in Oracle Open Office
-Oracle Open Office Basic : documents
-Oracle Open Office Basic : documents;changing titles
-Oracle Open Office Basic : documents;closing
-Oracle Open Office Basic : documents;comparing
-Oracle Open Office Basic : documents;contents as lists
-Oracle Open Office Basic : documents;editing time
-Oracle Open Office Basic : documents;exporting
-Oracle Open Office Basic : documents;importing
-Oracle Open Office Basic : documents;languages
-Oracle Open Office Basic : documents;measurement units in
-Oracle Open Office Basic : documents;merging
-Oracle Open Office Basic : documents;number of pages/tables/sheets
-Oracle Open Office Basic : documents;opening
-Oracle Open Office Basic : documents;opening in design mode
-Oracle Open Office Basic : documents;opening with templates
-Oracle Open Office Basic : documents;organizing
-Oracle Open Office Basic : documents;printing
-Oracle Open Office Basic : documents;read-only
-Oracle Open Office Basic : documents;reloading
-Oracle Open Office Basic : documents;saving
-Oracle Open Office Basic : documents;saving automatically
-Oracle Open Office Basic : documents;saving in other formats
-Oracle Open Office Basic : documents;sending as e-mail
-Oracle Open Office Basic : documents;styles changed
-Oracle Open Office Basic : documents;version management
-Oracle Open Office Basic : documents;version numbers
-Oracle Open Office Basic : dotted areas
-Oracle Open Office Basic : double-line spacing in paragraphs
-Oracle Open Office Basic : double-line writing in Asian layout
-Oracle Open Office Basic : drag and drop
-Oracle Open Office Basic : drag and drop;copying and pasting text
-Oracle Open Office Basic : drag and drop;data source view
-Oracle Open Office Basic : drag and drop;from Gallery to draw objects
-Oracle Open Office Basic : drag and drop;overview
-Oracle Open Office Basic : drag and drop;pictures
-Oracle Open Office Basic : drag and drop;to Gallery
-Oracle Open Office Basic : draw objects
-Oracle Open Office Basic : draw objects;adding/editing/copying
-Oracle Open Office Basic : draw objects;anchoring
-Oracle Open Office Basic : draw objects;arranging within stacks
-Oracle Open Office Basic : draw objects;copying between documents
-Oracle Open Office Basic : draw objects;displaying (Calc)
-Oracle Open Office Basic : draw objects;dropping Gallery pictures
-Oracle Open Office Basic : draw objects;flipping
-Oracle Open Office Basic : draw objects;legends
-Oracle Open Office Basic : draw objects;positioning and resizing
-Oracle Open Office Basic : draw objects;protecting
-Oracle Open Office Basic : draw objects;slanting
-Oracle Open Office Basic : draw objects;text in
-Oracle Open Office Basic : Drawing bar
-Oracle Open Office Basic : drawing lines in text
-Oracle Open Office Basic : drawings
-Oracle Open Office Basic : drawings;creating/opening
-Oracle Open Office Basic : drawings;languages
-Oracle Open Office Basic : drawings;printing
-Oracle Open Office Basic : drawings;printing defaults
-Oracle Open Office Basic : drawings;printing in text documents
-Oracle Open Office Basic : drawings;saving
-Oracle Open Office Basic : drawings;saving automatically
-Oracle Open Office Basic : drawings;saving in other formats
-Oracle Open Office Basic : drawings;sending as e-mail
-Oracle Open Office Basic : drawings;showing (Writer)
-Oracle Open Office Basic : drawings, see also draw objects
-Oracle Open Office Basic : drop-down lists in form functions
-Oracle Open Office Basic : e-mail attachments
-Oracle Open Office Basic : Edit File icon
-Oracle Open Office Basic : edit mode
-Oracle Open Office Basic : edit mode;after opening
-Oracle Open Office Basic : edit mode;through Enter key (Calc)
-Oracle Open Office Basic : Edit Points bar
-Oracle Open Office Basic : editing
-Oracle Open Office Basic : editing;chart axes
-Oracle Open Office Basic : editing;chart data
-Oracle Open Office Basic : editing;chart legends
-Oracle Open Office Basic : editing;chart titles
-Oracle Open Office Basic : editing;comments
-Oracle Open Office Basic : editing;controls
-Oracle Open Office Basic : editing;data binding of XForms
-Oracle Open Office Basic : editing;database tables and queries
-Oracle Open Office Basic : editing;draw objects
-Oracle Open Office Basic : editing;Fontwork objects
-Oracle Open Office Basic : editing;hyperlinks
-Oracle Open Office Basic : editing;menus
-Oracle Open Office Basic : editing;objects
-Oracle Open Office Basic : editing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Basic : editing;pictures
-Oracle Open Office Basic : editing;reports
-Oracle Open Office Basic : editing;shortcut keys
-Oracle Open Office Basic : editing;tab stops
-Oracle Open Office Basic : editing;templates
-Oracle Open Office Basic : editing;toolbars
-Oracle Open Office Basic : editing;undoing
-Oracle Open Office Basic : editing;XForms
-Oracle Open Office Basic : editing time of documents
-Oracle Open Office Basic : editors
-Oracle Open Office Basic : editors;formula editor
-Oracle Open Office Basic : editors;ImageMap editor
-Oracle Open Office Basic : effects
-Oracle Open Office Basic : effects;font positions
-Oracle Open Office Basic : effects;fonts
-Oracle Open Office Basic : effects;Fontwork icons
-Oracle Open Office Basic : empty documents
-Oracle Open Office Basic : empty paragraph removal
-Oracle Open Office Basic : encryption of contents
-Oracle Open Office Basic : End statement
-Oracle Open Office Basic : entering groups
-Oracle Open Office Basic : entering text from right to left
-Oracle Open Office Basic : Environ function
-Oracle Open Office Basic : Eof function
-Oracle Open Office Basic : equal sign, see also operators
-Oracle Open Office Basic : EqualUnoObjects function
-Oracle Open Office Basic : equations in formula editor
-Oracle Open Office Basic : Eqv operator (logical)
-Oracle Open Office Basic : Erase function
-Oracle Open Office Basic : Erl function
-Oracle Open Office Basic : Err function
-Oracle Open Office Basic : error codes in Basic
-Oracle Open Office Basic : Error function
-Oracle Open Office Basic : Error Report Tool
-Oracle Open Office Basic : Euro
-Oracle Open Office Basic : Euro;currency formats
-Oracle Open Office Basic : Euro;Euro Converter Wizard
-Oracle Open Office Basic : even/odd pages
-Oracle Open Office Basic : even/odd pages;printing
-Oracle Open Office Basic : events
-Oracle Open Office Basic : events;assigning macros
-Oracle Open Office Basic : events;assigning scripts
-Oracle Open Office Basic : events;controls
-Oracle Open Office Basic : events;customizing
-Oracle Open Office Basic : events;in forms
-Oracle Open Office Basic : events;linked to objects
-Oracle Open Office Basic : examples
-Oracle Open Office Basic : examples;programming controls
-Oracle Open Office Basic : examples;showing a dialog using program code
-Oracle Open Office Basic : Excel
-Oracle Open Office Basic : Excel;saving as
-Oracle Open Office Basic : Excel;search criteria
-Oracle Open Office Basic : exceptions
-Oracle Open Office Basic : exceptions;user-defined dictionaries
-Oracle Open Office Basic : exchanging, see also replacing
-Oracle Open Office Basic : executing SQL commands
-Oracle Open Office Basic : Exit statement
-Oracle Open Office Basic : exiting
-Oracle Open Office Basic : exiting;groups
-Oracle Open Office Basic : exiting;Oracle Open Office
-Oracle Open Office Basic : Exp function
-Oracle Open Office Basic : expanding formatting (Calc)
-Oracle Open Office Basic : explorer of data sources
-Oracle Open Office Basic : export filters
-Oracle Open Office Basic : exporting
-Oracle Open Office Basic : exporting;bitmaps
-Oracle Open Office Basic : exporting;HTML and text documents
-Oracle Open Office Basic : exporting;Microsoft Office documents with VBA code
-Oracle Open Office Basic : exporting;spreadsheets to text format
-Oracle Open Office Basic : exporting;templates
-Oracle Open Office Basic : exporting;to foreign formats
-Oracle Open Office Basic : exporting;to HTML
-Oracle Open Office Basic : exporting;to Microsoft Office formats
-Oracle Open Office Basic : exporting;to PDF
-Oracle Open Office Basic : exporting;to PostScript format
-Oracle Open Office Basic : exporting;to XML
-Oracle Open Office Basic : exporting;XML files
-Oracle Open Office Basic : extended tips in Help
-Oracle Open Office Basic : extension mode in text
-Oracle Open Office Basic : extensions
-Oracle Open Office Basic : extensions;Extension Manager
-Oracle Open Office Basic : extensions;file formats
-Oracle Open Office Basic : external keys (Base)
-Oracle Open Office Basic : faster printing
-Oracle Open Office Basic : faxes
-Oracle Open Office Basic : faxes;configuring Oracle Open Office
-Oracle Open Office Basic : faxes;fax programs/fax printers under UNIX
-Oracle Open Office Basic : faxes;selecting a fax machine
-Oracle Open Office Basic : faxes;sending
-Oracle Open Office Basic : faxes;wizards
-Oracle Open Office Basic : feedback
-Oracle Open Office Basic : feedback;automatically
-Oracle Open Office Basic : fields
-Oracle Open Office Basic : fields;database tables
-Oracle Open Office Basic : fields;displaying field codes (Writer)
-Oracle Open Office Basic : fields;formatted fields
-Oracle Open Office Basic : fields;updating automatically (Writer)
-Oracle Open Office Basic : file associations for Microsoft Office
-Oracle Open Office Basic : file filters
-Oracle Open Office Basic : file filters;mobile devices
-Oracle Open Office Basic : file filters;XML
-Oracle Open Office Basic : file formats
-Oracle Open Office Basic : file formats;changing Oracle Open Office defaults
-Oracle Open Office Basic : file formats;OpenDocument/XML
-Oracle Open Office Basic : file formats;saving always in other formats
-Oracle Open Office Basic : file selection button
-Oracle Open Office Basic : file selection control
-Oracle Open Office Basic : file sharing options for current document
-Oracle Open Office Basic : FileAttr function
-Oracle Open Office Basic : FileCopy statement
-Oracle Open Office Basic : FileDateTime function
-Oracle Open Office Basic : FileExists function
-Oracle Open Office Basic : FileLen function
-Oracle Open Office Basic : filepicker
-Oracle Open Office Basic : filepicker;API service
-Oracle Open Office Basic : files
-Oracle Open Office Basic : files;filters and formats
-Oracle Open Office Basic : files;importing
-Oracle Open Office Basic : files;opening
-Oracle Open Office Basic : files;opening with placeholders
-Oracle Open Office Basic : files;properties
-Oracle Open Office Basic : files;saving
-Oracle Open Office Basic : files;saving automatically
-Oracle Open Office Basic : files;saving in other formats
-Oracle Open Office Basic : files;sending as e-mail
-Oracle Open Office Basic : files;version numbers
-Oracle Open Office Basic : files and folders in Oracle Open Office
-Oracle Open Office Basic : fill characters with tabulators
-Oracle Open Office Basic : fill colors for areas
-Oracle Open Office Basic : fill patterns for areas
-Oracle Open Office Basic : filter conditions
-Oracle Open Office Basic : filter conditions;connecting
-Oracle Open Office Basic : filter conditions;in queries (Base)
-Oracle Open Office Basic : filtering
-Oracle Open Office Basic : filtering;data in databases
-Oracle Open Office Basic : filtering;data in forms
-Oracle Open Office Basic : filters
-Oracle Open Office Basic : filters;comparison operators
-Oracle Open Office Basic : filters;for import and export
-Oracle Open Office Basic : filters;Navigator
-Oracle Open Office Basic : filters;pictures
-Oracle Open Office Basic : filters;XML filter settings
-Oracle Open Office Basic : Find tab in Help
-Oracle Open Office Basic : finding
-Oracle Open Office Basic : finding;in all sheets
-Oracle Open Office Basic : finding;records in form documents
-Oracle Open Office Basic : finding;selections
-Oracle Open Office Basic : finding;similarity search
-Oracle Open Office Basic : FindObject function
-Oracle Open Office Basic : FindPropertyObject function
-Oracle Open Office Basic : fitting to pages
-Oracle Open Office Basic : fitting to pages;print settings in Math
-Oracle Open Office Basic : fitting to pages;print settings in presentations
-Oracle Open Office Basic : Fix function
-Oracle Open Office Basic : fixed line control
-Oracle Open Office Basic : fixed text
-Oracle Open Office Basic : fixed text;form functions
-Oracle Open Office Basic : fixed text control
-Oracle Open Office Basic : fixing toolbars
-Oracle Open Office Basic : flipping draw objects
-Oracle Open Office Basic : floating frames in HTML documents
-Oracle Open Office Basic : floating toolbars
-Oracle Open Office Basic : focus of controls
-Oracle Open Office Basic : folder creation
-Oracle Open Office Basic : font lists
-Oracle Open Office Basic : font name box
-Oracle Open Office Basic : font sizes
-Oracle Open Office Basic : font sizes;bullets
-Oracle Open Office Basic : font sizes;relative changes
-Oracle Open Office Basic : font sizes;scaling on screen
-Oracle Open Office Basic : font sizes;text
-Oracle Open Office Basic : fonts
-Oracle Open Office Basic : fonts;adding under UNIX
-Oracle Open Office Basic : fonts;changing in templates
-Oracle Open Office Basic : fonts;colors
-Oracle Open Office Basic : fonts;default settings
-Oracle Open Office Basic : fonts;effects
-Oracle Open Office Basic : fonts;for HTML and Basic
-Oracle Open Office Basic : fonts;formats
-Oracle Open Office Basic : fonts;outlines
-Oracle Open Office Basic : fonts;positions in text
-Oracle Open Office Basic : fonts;shadows
-Oracle Open Office Basic : fonts;specifying several
-Oracle Open Office Basic : fonts;strikethrough
-Oracle Open Office Basic : fonts;styles
-Oracle Open Office Basic : fonts;text objects
-Oracle Open Office Basic : Fontwork icons
-Oracle Open Office Basic : footers
-Oracle Open Office Basic : footers;backgrounds
-Oracle Open Office Basic : For statement
-Oracle Open Office Basic : form controls
-Oracle Open Office Basic : form controls;assigning macros
-Oracle Open Office Basic : form controls;protecting
-Oracle Open Office Basic : form controls;toolbars
-Oracle Open Office Basic : form fields
-Oracle Open Office Basic : form filters
-Oracle Open Office Basic : Form Navigator
-Oracle Open Office Basic : format codes
-Oracle Open Office Basic : format codes;numbers
-Oracle Open Office Basic : format filling printing in Oracle Open Office Math
-Oracle Open Office Basic : Format function
-Oracle Open Office Basic : Format Paintbrush
-Oracle Open Office Basic : formats
-Oracle Open Office Basic : formats;Asian layout
-Oracle Open Office Basic : formats;fonts
-Oracle Open Office Basic : formats;maximizing page formats
-Oracle Open Office Basic : formats;number and currency formats
-Oracle Open Office Basic : formats;of currencies/date/time
-Oracle Open Office Basic : formats;on opening and saving
-Oracle Open Office Basic : formats;pasting in special formats
-Oracle Open Office Basic : formats;positions
-Oracle Open Office Basic : formats;tabulators
-Oracle Open Office Basic : formatted field control
-Oracle Open Office Basic : formatted fields
-Oracle Open Office Basic : formatted fields;form functions
-Oracle Open Office Basic : formatted fields;properties
-Oracle Open Office Basic : formatting
-Oracle Open Office Basic : formatting;Asian typography
-Oracle Open Office Basic : formatting;axes in charts
-Oracle Open Office Basic : formatting;chart legends
-Oracle Open Office Basic : formatting;copying
-Oracle Open Office Basic : formatting;definition
-Oracle Open Office Basic : formatting;expanding (Calc)
-Oracle Open Office Basic : formatting;font effects
-Oracle Open Office Basic : formatting;hyperlinks
-Oracle Open Office Basic : formatting;pages
-Oracle Open Office Basic : formatting;printer metrics (Writer)
-Oracle Open Office Basic : formatting;undoing
-Oracle Open Office Basic : formatting;undoing when writing
-Oracle Open Office Basic : forms
-Oracle Open Office Basic : forms;browsing
-Oracle Open Office Basic : forms;Combo Box/List Box Wizard
-Oracle Open Office Basic : forms;creating
-Oracle Open Office Basic : forms;data
-Oracle Open Office Basic : forms;designing (Base)
-Oracle Open Office Basic : forms;events
-Oracle Open Office Basic : forms;filtering data
-Oracle Open Office Basic : forms;finding records
-Oracle Open Office Basic : forms;focus after opening
-Oracle Open Office Basic : forms;general information (Base)
-Oracle Open Office Basic : forms;grouping controls
-Oracle Open Office Basic : forms;HTML filters
-Oracle Open Office Basic : forms;Navigator
-Oracle Open Office Basic : forms;opening in design mode
-Oracle Open Office Basic : forms;properties
-Oracle Open Office Basic : forms;sorting data
-Oracle Open Office Basic : forms;subforms
-Oracle Open Office Basic : forms;wizards
-Oracle Open Office Basic : forms;XForms
-Oracle Open Office Basic : formula texts
-Oracle Open Office Basic : formula texts;printing in Oracle Open Office Math
-Oracle Open Office Basic : formulas
-Oracle Open Office Basic : formulas;new
-Oracle Open Office Basic : formulas;starting formula editor
-Oracle Open Office Basic : formulas in reports
-Oracle Open Office Basic : formulas in reports;editing
-Oracle Open Office Basic : forums and support
-Oracle Open Office Basic : frames
-Oracle Open Office Basic : frames;around paragraphs
-Oracle Open Office Basic : frames;around tables
-Oracle Open Office Basic : frames;AutoCorrect function
-Oracle Open Office Basic : frames;backgrounds
-Oracle Open Office Basic : frames;captions (Writer)
-Oracle Open Office Basic : frames;printing in Oracle Open Office Math
-Oracle Open Office Basic : frames;protecting
-Oracle Open Office Basic : frames;selection frames
-Oracle Open Office Basic : frames;text fitting to frames
-Oracle Open Office Basic : FreeFile function
-Oracle Open Office Basic : freeform lines
-Oracle Open Office Basic : freeform lines;draw functions
-Oracle Open Office Basic : FreeLibrary function
-Oracle Open Office Basic : FTP
-Oracle Open Office Basic : FTP;opening documents
-Oracle Open Office Basic : FTP;saving documents
-Oracle Open Office Basic : full joins (Base)
-Oracle Open Office Basic : full screen view
-Oracle Open Office Basic : full-text search in Help
-Oracle Open Office Basic : Function statement
-Oracle Open Office Basic : functions
-Oracle Open Office Basic : functions;return value type
-Oracle Open Office Basic : functions;using
-Oracle Open Office Basic : functions in reports
-Oracle Open Office Basic : functions in reports;editing
-Oracle Open Office Basic : fundamentals
-Oracle Open Office Basic : Gallery
-Oracle Open Office Basic : Gallery;adding pictures
-Oracle Open Office Basic : Gallery;dragging pictures to draw objects
-Oracle Open Office Basic : Gallery;hiding/showing
-Oracle Open Office Basic : Gallery;inserting pictures from
-Oracle Open Office Basic : get method for form transmissions
-Oracle Open Office Basic : Get statement
-Oracle Open Office Basic : GetAttr function
-Oracle Open Office Basic : GetDefaultContext function
-Oracle Open Office Basic : GetGuiType function
-Oracle Open Office Basic : GetProcessServiceManager function
-Oracle Open Office Basic : GetSolarVersion function
-Oracle Open Office Basic : GetSystemTicks function
-Oracle Open Office Basic : getting support
-Oracle Open Office Basic : GIF format
-Oracle Open Office Basic : Global statement
-Oracle Open Office Basic : GLOBAL variables
-Oracle Open Office Basic : GlobalScope function
-Oracle Open Office Basic : glossaries
-Oracle Open Office Basic : glossaries;common terms
-Oracle Open Office Basic : glossaries;Internet terms
-Oracle Open Office Basic : GoSub...Return statement
-Oracle Open Office Basic : GoTo statement
-Oracle Open Office Basic : gradients off for faster printing
-Oracle Open Office Basic : graphic objects, see draw objects
-Oracle Open Office Basic : graphical text art
-Oracle Open Office Basic : graphics
-Oracle Open Office Basic : graphics;cache
-Oracle Open Office Basic : graphics;protecting
-Oracle Open Office Basic : graphics, see also pictures
-Oracle Open Office Basic : grayscale printing
-Oracle Open Office Basic : Green function
-Oracle Open Office Basic : grid controls
-Oracle Open Office Basic : grid controls;form functions
-Oracle Open Office Basic : grids
-Oracle Open Office Basic : grids;defaults (Writer/Calc)
-Oracle Open Office Basic : grids;display options (Impress/Draw)
-Oracle Open Office Basic : grids;displaying lines (Calc)
-Oracle Open Office Basic : group box control
-Oracle Open Office Basic : group box creation
-Oracle Open Office Basic : groups
-Oracle Open Office Basic : groups;entering/exiting/ungrouping
-Oracle Open Office Basic : groups;naming
-Oracle Open Office Basic : groups;of controls
-Oracle Open Office Basic : guides
-Oracle Open Office Basic : guides;display options (Impress/Draw)
-Oracle Open Office Basic : guides;displaying when moving objects (Impress)
-Oracle Open Office Basic : guides;showing (Calc)
-Oracle Open Office Basic : guides;showing when moving frames (Writer)
-Oracle Open Office Basic : gutter
-Oracle Open Office Basic : handles
-Oracle Open Office Basic : handles;displaying (Writer)
-Oracle Open Office Basic : handles;scaling
-Oracle Open Office Basic : handles;showing simple/large handles (Calc)
-Oracle Open Office Basic : Hangul/Hanja
-Oracle Open Office Basic : HasUnoInterfaces function
-Oracle Open Office Basic : hatching
-Oracle Open Office Basic : headers
-Oracle Open Office Basic : headers;backgrounds
-Oracle Open Office Basic : headings
-Oracle Open Office Basic : headings;entering as text box
-Oracle Open Office Basic : Hebrew
-Oracle Open Office Basic : Hebrew;entering text
-Oracle Open Office Basic : Hebrew;language settings
-Oracle Open Office Basic : Help
-Oracle Open Office Basic : Help;bookmarks
-Oracle Open Office Basic : Help;extended tips on/off
-Oracle Open Office Basic : Help;full-text search
-Oracle Open Office Basic : Help;Help tips
-Oracle Open Office Basic : Help;keywords
-Oracle Open Office Basic : Help;navigation pane showing/hiding
-Oracle Open Office Basic : Help;style sheets
-Oracle Open Office Basic : Help;topics
-Oracle Open Office Basic : Help Agent
-Oracle Open Office Basic : Help Agent;help
-Oracle Open Office Basic : Help Agent;options
-Oracle Open Office Basic : Help tips
-Oracle Open Office Basic : Help tips;hiding
-Oracle Open Office Basic : Hex function
-Oracle Open Office Basic : hidden controls in Form Navigator
-Oracle Open Office Basic : hidden fields display (Writer)
-Oracle Open Office Basic : hidden pages
-Oracle Open Office Basic : hidden pages;printing in presentations
-Oracle Open Office Basic : hidden text
-Oracle Open Office Basic : hidden text;showing (Writer)
-Oracle Open Office Basic : hiding
-Oracle Open Office Basic : hiding;changes
-Oracle Open Office Basic : hiding;docked windows
-Oracle Open Office Basic : hiding;navigation pane in Help window
-Oracle Open Office Basic : high contrast mode
-Oracle Open Office Basic : Hindi
-Oracle Open Office Basic : Hindi;entering text
-Oracle Open Office Basic : Hindi;language settings
-Oracle Open Office Basic : horizontal line control
-Oracle Open Office Basic : horizontal scrollbar control
-Oracle Open Office Basic : horizontal scrollbars (Writer)
-Oracle Open Office Basic : hotspots
-Oracle Open Office Basic : Hour function
-Oracle Open Office Basic : HTML
-Oracle Open Office Basic : HTML;definition
-Oracle Open Office Basic : HTML;export character set
-Oracle Open Office Basic : HTML;fonts for source display
-Oracle Open Office Basic : HTML;importing META tags
-Oracle Open Office Basic : HTML;live presentations
-Oracle Open Office Basic : HTML documents
-Oracle Open Office Basic : HTML documents;auto reloading
-Oracle Open Office Basic : HTML documents;importing/exporting
-Oracle Open Office Basic : HTML documents;META tags in
-Oracle Open Office Basic : HTML documents;new
-Oracle Open Office Basic : HTML documents;source text
-Oracle Open Office Basic : hyperlinks
-Oracle Open Office Basic : hyperlinks;assigning macros
-Oracle Open Office Basic : hyperlinks;character formats
-Oracle Open Office Basic : hyperlinks;definition
-Oracle Open Office Basic : hyperlinks;deleting
-Oracle Open Office Basic : hyperlinks;editing
-Oracle Open Office Basic : hyperlinks;inserting
-Oracle Open Office Basic : hyperlinks;relative and absolute
-Oracle Open Office Basic : hyperlinks;turning off automatic recognition
-Oracle Open Office Basic : hyperlinks, see also links
-Oracle Open Office Basic : hyphenation
-Oracle Open Office Basic : hyphenation;activating for a language
-Oracle Open Office Basic : hyphenation;minimal number of characters
-Oracle Open Office Basic : hyphens
-Oracle Open Office Basic : hyphens;displaying custom (Writer)
-Oracle Open Office Basic : hyphens;inserting custom
-Oracle Open Office Basic : icon bars, see toolbars
-Oracle Open Office Basic : icon control
-Oracle Open Office Basic : icon sizes
-Oracle Open Office Basic : IDE
-Oracle Open Office Basic : IDE;Integrated Development Environment
-Oracle Open Office Basic : IDE;keyboard shortcuts
-Oracle Open Office Basic : If statement
-Oracle Open Office Basic : ignore list for spellcheck
-Oracle Open Office Basic : IIf statement
-Oracle Open Office Basic : illustrations, see pictures
-Oracle Open Office Basic : image button creation
-Oracle Open Office Basic : image control
-Oracle Open Office Basic : image control creation
-Oracle Open Office Basic : ImageMap
-Oracle Open Office Basic : ImageMap;definition
-Oracle Open Office Basic : ImageMap;editor
-Oracle Open Office Basic : images
-Oracle Open Office Basic : images;ImageMap
-Oracle Open Office Basic : images;inserting and editing bitmaps
-Oracle Open Office Basic : images, see also pictures
-Oracle Open Office Basic : IME
-Oracle Open Office Basic : IME;definition
-Oracle Open Office Basic : IME;showing/hiding
-Oracle Open Office Basic : Imp operator (logical)
-Oracle Open Office Basic : import filters
-Oracle Open Office Basic : import restrictions for Microsoft Office
-Oracle Open Office Basic : importing
-Oracle Open Office Basic : importing;bitmaps
-Oracle Open Office Basic : importing;compatibility settings for text import
-Oracle Open Office Basic : importing;databases
-Oracle Open Office Basic : importing;documents in other formats
-Oracle Open Office Basic : importing;from XML
-Oracle Open Office Basic : importing;HTML and text documents
-Oracle Open Office Basic : importing;HTML with META tags
-Oracle Open Office Basic : importing;Microsoft Office documents with VBA code
-Oracle Open Office Basic : importing;tables in text format
-Oracle Open Office Basic : importing;templates
-Oracle Open Office Basic : improvement program
-Oracle Open Office Basic : inches
-Oracle Open Office Basic : Index tab in Help
-Oracle Open Office Basic : indexes
-Oracle Open Office Basic : indexes;backgrounds
-Oracle Open Office Basic : indexes;showing/hiding Help index tab
-Oracle Open Office Basic : indicator lines in text
-Oracle Open Office Basic : inner joins (Base)
-Oracle Open Office Basic : input method window
-Oracle Open Office Basic : Input statement
-Oracle Open Office Basic : InputBox function
-Oracle Open Office Basic : insert mode for entering text
-Oracle Open Office Basic : inserting
-Oracle Open Office Basic : inserting;Basic libraries
-Oracle Open Office Basic : inserting;buttons in toolbars
-Oracle Open Office Basic : inserting;cell ranges from spreadsheets
-Oracle Open Office Basic : inserting;charts
-Oracle Open Office Basic : inserting;clipboard options
-Oracle Open Office Basic : inserting;comments
-Oracle Open Office Basic : inserting;data from text documents
-Oracle Open Office Basic : inserting;datasource records in spreadsheets
-Oracle Open Office Basic : inserting;drawings
-Oracle Open Office Basic : inserting;floating frames
-Oracle Open Office Basic : inserting;Fontwork objects
-Oracle Open Office Basic : inserting;form fields
-Oracle Open Office Basic : inserting;hyperlinks
-Oracle Open Office Basic : inserting;line breaks in cells
-Oracle Open Office Basic : inserting;movies/sounds
-Oracle Open Office Basic : inserting;new text tables defaults
-Oracle Open Office Basic : inserting;objects from Gallery
-Oracle Open Office Basic : inserting;OLE objects
-Oracle Open Office Basic : inserting;paragraph borders
-Oracle Open Office Basic : inserting;paragraph bullets
-Oracle Open Office Basic : inserting;pictures in Gallery
-Oracle Open Office Basic : inserting;plug-ins
-Oracle Open Office Basic : inserting;push buttons
-Oracle Open Office Basic : inserting;special characters
-Oracle Open Office Basic : inserting;tab stops
-Oracle Open Office Basic : inserting;textures on chart bars
-Oracle Open Office Basic : installing
-Oracle Open Office Basic : installing;ActiveX control
-Oracle Open Office Basic : installing;mobile device filters
-Oracle Open Office Basic : installing;UNO components
-Oracle Open Office Basic : installing;XML filters
-Oracle Open Office Basic : InStr function
-Oracle Open Office Basic : instructions
-Oracle Open Office Basic : instructions;general
-Oracle Open Office Basic : Int function
-Oracle Open Office Basic : Internet
-Oracle Open Office Basic : Internet;checking for updates
-Oracle Open Office Basic : Internet;Internet Explorer for displaying Oracle Open Office documents
-Oracle Open Office Basic : Internet;presentations
-Oracle Open Office Basic : Internet;starting searches
-Oracle Open Office Basic : Internet glossary
-Oracle Open Office Basic : invert filter
-Oracle Open Office Basic : invisible areas
-Oracle Open Office Basic : IsArray function
-Oracle Open Office Basic : IsDate function
-Oracle Open Office Basic : IsEmpty function
-Oracle Open Office Basic : IsError function
-Oracle Open Office Basic : IsMissing function
-Oracle Open Office Basic : IsNull function
-Oracle Open Office Basic : IsNumeric function
-Oracle Open Office Basic : IsObject function
-Oracle Open Office Basic : IsUnoStruct function
-Oracle Open Office Basic : italic text
-Oracle Open Office Basic : iterative references in spreadsheets
-Oracle Open Office Basic : Java
-Oracle Open Office Basic : Java;definition
-Oracle Open Office Basic : Java;setting options
-Oracle Open Office Basic : JDBC
-Oracle Open Office Basic : JDBC;databases (Base)
-Oracle Open Office Basic : JDBC;definition
-Oracle Open Office Basic : Join function
-Oracle Open Office Basic : joining
-Oracle Open Office Basic : joining;paragraphs
-Oracle Open Office Basic : joining;tables (Base)
-Oracle Open Office Basic : joins in databases (Base)
-Oracle Open Office Basic : justifying text
-Oracle Open Office Basic : kerning
-Oracle Open Office Basic : kerning;Asian texts
-Oracle Open Office Basic : kerning;definition
-Oracle Open Office Basic : kerning;in characters
-Oracle Open Office Basic : key fields for relations (Base)
-Oracle Open Office Basic : keyboard
-Oracle Open Office Basic : keyboard;assigning/editing shortcut keys
-Oracle Open Office Basic : keyboard;general commands
-Oracle Open Office Basic : keyboard;in IDE
-Oracle Open Office Basic : keyboard;removing numbering
-Oracle Open Office Basic : keys
-Oracle Open Office Basic : keys;adding push buttons
-Oracle Open Office Basic : keys;primary keys (Base)
-Oracle Open Office Basic : Kill statement
-Oracle Open Office Basic : kiosk export
-Oracle Open Office Basic : label field control
-Oracle Open Office Basic : labels
-Oracle Open Office Basic : labels;creating and synchronizing
-Oracle Open Office Basic : labels;for draw objects
-Oracle Open Office Basic : labels;form functions
-Oracle Open Office Basic : labels;from databases
-Oracle Open Office Basic : labels, see also names/callouts
-Oracle Open Office Basic : languages
-Oracle Open Office Basic : languages;activating modules
-Oracle Open Office Basic : languages;Asian support
-Oracle Open Office Basic : languages;complex text layout
-Oracle Open Office Basic : languages;locale settings
-Oracle Open Office Basic : languages;selecting for text
-Oracle Open Office Basic : languages;setting options
-Oracle Open Office Basic : languages;spellcheck
-Oracle Open Office Basic : languages;spellchecking and formatting
-Oracle Open Office Basic : large handles (Writer)
-Oracle Open Office Basic : large icons
-Oracle Open Office Basic : layer arrangement
-Oracle Open Office Basic : layout
-Oracle Open Office Basic : layout;importing Word documents
-Oracle Open Office Basic : layout;pages
-Oracle Open Office Basic : LBound function
-Oracle Open Office Basic : LCase function
-Oracle Open Office Basic : LDAP server
-Oracle Open Office Basic : LDAP server;address books (Base)
-Oracle Open Office Basic : LDAP server;sign on options
-Oracle Open Office Basic : leading between paragraphs
-Oracle Open Office Basic : left alignment of paragraphs
-Oracle Open Office Basic : Left function
-Oracle Open Office Basic : left joins (Base)
-Oracle Open Office Basic : legends
-Oracle Open Office Basic : legends;charts
-Oracle Open Office Basic : legends;draw objects
-Oracle Open Office Basic : legends;rounding corners
-Oracle Open Office Basic : Len function
-Oracle Open Office Basic : Let statement
-Oracle Open Office Basic : Letter Wizard
-Oracle Open Office Basic : levels
-Oracle Open Office Basic : levels;depth stagger
-Oracle Open Office Basic : levels;macro security
-Oracle Open Office Basic : libraries
-Oracle Open Office Basic : libraries;adding
-Oracle Open Office Basic : libraries;organizing
-Oracle Open Office Basic : library systems
-Oracle Open Office Basic : LibraryContainer
-Oracle Open Office Basic : limits of tables (Writer)
-Oracle Open Office Basic : line breaks
-Oracle Open Office Basic : line breaks;in cells
-Oracle Open Office Basic : line control
-Oracle Open Office Basic : Line Input statement
-Oracle Open Office Basic : line spacing
-Oracle Open Office Basic : line spacing;context menu in paragraphs
-Oracle Open Office Basic : line spacing;paragraph
-Oracle Open Office Basic : line styles
-Oracle Open Office Basic : line styles;applying
-Oracle Open Office Basic : line styles;defining
-Oracle Open Office Basic : lines
-Oracle Open Office Basic : lines;defining ends
-Oracle Open Office Basic : lines;draw functions
-Oracle Open Office Basic : lines;drawing in text
-Oracle Open Office Basic : lines;editing points
-Oracle Open Office Basic : lines;removing automatic lines
-Oracle Open Office Basic : lines of text
-Oracle Open Office Basic : lines of text;alignment
-Oracle Open Office Basic : lines of text;in Basic editor
-Oracle Open Office Basic : links
-Oracle Open Office Basic : links;between cells and controls
-Oracle Open Office Basic : links;by drag and drop
-Oracle Open Office Basic : links;character formats
-Oracle Open Office Basic : links;definition
-Oracle Open Office Basic : links;editing hyperlinks
-Oracle Open Office Basic : links;inserting
-Oracle Open Office Basic : links;modifying
-Oracle Open Office Basic : links;opening files with
-Oracle Open Office Basic : links;relational databases (Base)
-Oracle Open Office Basic : links;turning off automatic recognition
-Oracle Open Office Basic : links;updating options (Writer)
-Oracle Open Office Basic : links;updating specific links
-Oracle Open Office Basic : list box creation
-Oracle Open Office Basic : list boxes
-Oracle Open Office Basic : list boxes;adding entries to (example)
-Oracle Open Office Basic : list boxes;controls
-Oracle Open Office Basic : list boxes;removing entries from (example)
-Oracle Open Office Basic : lists
-Oracle Open Office Basic : lists;data assigned to controls
-Oracle Open Office Basic : lists;registered databases (Base)
-Oracle Open Office Basic : lists;regular expressions
-Oracle Open Office Basic : live presentations on the Internet
-Oracle Open Office Basic : loading
-Oracle Open Office Basic : loading;Basic code
-Oracle Open Office Basic : loading;documents
-Oracle Open Office Basic : loading;documents from other formats
-Oracle Open Office Basic : loading;HTML documents, automatically
-Oracle Open Office Basic : loading;Microsoft Office documents with VBA code
-Oracle Open Office Basic : loading;reloading
-Oracle Open Office Basic : loading;XML files
-Oracle Open Office Basic : Loc function
-Oracle Open Office Basic : locale settings
-Oracle Open Office Basic : localizing dialogs
-Oracle Open Office Basic : Lof function
-Oracle Open Office Basic : Log function
-Oracle Open Office Basic : long lines
-Oracle Open Office Basic : long lines;in Basic editor
-Oracle Open Office Basic : loops
-Oracle Open Office Basic : lowercase letters
-Oracle Open Office Basic : lowercase letters;font effects
-Oracle Open Office Basic : LSet statement
-Oracle Open Office Basic : LTrim function
-Oracle Open Office Basic : macro toolbar
-Oracle Open Office Basic : Macro Wizard (Base)
-Oracle Open Office Basic : macros
-Oracle Open Office Basic : macros;assigning to events
-Oracle Open Office Basic : macros;assigning to events in forms
-Oracle Open Office Basic : macros;attaching new (Base)
-Oracle Open Office Basic : macros;Basic IDE
-Oracle Open Office Basic : macros;in MS Office documents
-Oracle Open Office Basic : macros;interrupting
-Oracle Open Office Basic : macros;organizing
-Oracle Open Office Basic : macros;recording
-Oracle Open Office Basic : macros;security
-Oracle Open Office Basic : macros;security levels
-Oracle Open Office Basic : macros;security warning dialog
-Oracle Open Office Basic : macros;selecting security warnings
-Oracle Open Office Basic : macros;stopping
-Oracle Open Office Basic : magnifiers
-Oracle Open Office Basic : margins
-Oracle Open Office Basic : margins;pages
-Oracle Open Office Basic : margins;setting with the mouse
-Oracle Open Office Basic : margins;shadows
-Oracle Open Office Basic : marking changes
-Oracle Open Office Basic : marking, see selecting
-Oracle Open Office Basic : masked field control
-Oracle Open Office Basic : Math formula editor
-Oracle Open Office Basic : measurement units
-Oracle Open Office Basic : measurement units;changing on rulers
-Oracle Open Office Basic : measurement units;converting
-Oracle Open Office Basic : measurement units;selecting
-Oracle Open Office Basic : Media Player window
-Oracle Open Office Basic : menus
-Oracle Open Office Basic : menus;activating context menus
-Oracle Open Office Basic : menus;assigning macros
-Oracle Open Office Basic : menus;customizing
-Oracle Open Office Basic : merging
-Oracle Open Office Basic : merging;documents
-Oracle Open Office Basic : META tags
-Oracle Open Office Basic : metrics
-Oracle Open Office Basic : metrics;converting
-Oracle Open Office Basic : metrics;document formatting (Writer)
-Oracle Open Office Basic : metrics;in sheets
-Oracle Open Office Basic : Microsoft Office
-Oracle Open Office Basic : Microsoft Office;Access databases (base)
-Oracle Open Office Basic : Microsoft Office;as default file format
-Oracle Open Office Basic : Microsoft Office;document import restrictions
-Oracle Open Office Basic : Microsoft Office;feature comparisons
-Oracle Open Office Basic : Microsoft Office;importing password protected files
-Oracle Open Office Basic : Microsoft Office;importing Word documents
-Oracle Open Office Basic : Microsoft Office;importing/exporting VBA code
-Oracle Open Office Basic : Microsoft Office;new users information
-Oracle Open Office Basic : Microsoft Office;opening Microsoft documents
-Oracle Open Office Basic : Microsoft Office;reassigning document types
-Oracle Open Office Basic : Mid function
-Oracle Open Office Basic : Mid statement
-Oracle Open Office Basic : migrating macros (Base)
-Oracle Open Office Basic : Minute function
-Oracle Open Office Basic : MkDir statement
-Oracle Open Office Basic : mobile device filters
-Oracle Open Office Basic : MOD operator (mathematical)
-Oracle Open Office Basic : models in XForms
-Oracle Open Office Basic : modifying, see changing
-Oracle Open Office Basic : module/dialog toggle
-Oracle Open Office Basic : modules
-Oracle Open Office Basic : modules;organizing
-Oracle Open Office Basic : modules;subroutines and functions
-Oracle Open Office Basic : Month function
-Oracle Open Office Basic : more controls
-Oracle Open Office Basic : mosaic filter
-Oracle Open Office Basic : mouse
-Oracle Open Office Basic : mouse;pointers when using drag and drop
-Oracle Open Office Basic : mouse;positioning
-Oracle Open Office Basic : movies
-Oracle Open Office Basic : moving
-Oracle Open Office Basic : moving;modules
-Oracle Open Office Basic : moving;tab stops on ruler
-Oracle Open Office Basic : moving;toolbars
-Oracle Open Office Basic : moving;using guide lines in presentations
-Oracle Open Office Basic : MS ADO interface (Base)
-Oracle Open Office Basic : MsgBox function
-Oracle Open Office Basic : MsgBox statement
-Oracle Open Office Basic : multi-line titles in forms
-Oracle Open Office Basic : multiple documents
-Oracle Open Office Basic : multiple documents;opening
-Oracle Open Office Basic : multiple selection
-Oracle Open Office Basic : music
-Oracle Open Office Basic : My Documents folder
-Oracle Open Office Basic : My Documents folder;changing work directory
-Oracle Open Office Basic : My Documents folder;opening
-Oracle Open Office Basic : MySQL databases (Base)
-Oracle Open Office Basic : Name statement
-Oracle Open Office Basic : names
-Oracle Open Office Basic : names;multi-line titles
-Oracle Open Office Basic : names;objects
-Oracle Open Office Basic : names of variables
-Oracle Open Office Basic : names, see also labels/callouts
-Oracle Open Office Basic : namespace organization in XForms
-Oracle Open Office Basic : native SQL (Base)
-Oracle Open Office Basic : navigating
-Oracle Open Office Basic : navigating;in Basic projects
-Oracle Open Office Basic : navigating;in documents
-Oracle Open Office Basic : Navigation bar
-Oracle Open Office Basic : Navigation bar;controls
-Oracle Open Office Basic : Navigation bar;forms
-Oracle Open Office Basic : Navigator
-Oracle Open Office Basic : Navigator;comments
-Oracle Open Office Basic : Navigator;contents as lists
-Oracle Open Office Basic : Navigator;docking
-Oracle Open Office Basic : Navigator;working with
-Oracle Open Office Basic : network identity options
-Oracle Open Office Basic : new databases
-Oracle Open Office Basic : new documents
-Oracle Open Office Basic : new lines in cells
-Oracle Open Office Basic : new windows
-Oracle Open Office Basic : Next statement
-Oracle Open Office Basic : non-breaking dashes
-Oracle Open Office Basic : non-breaking spaces (Writer)
-Oracle Open Office Basic : non-printing characters (Writer)
-Oracle Open Office Basic : Not operator (logical)
-Oracle Open Office Basic : Nothing object
-Oracle Open Office Basic : Now function
-Oracle Open Office Basic : Null value
-Oracle Open Office Basic : number formats
-Oracle Open Office Basic : number formats;codes
-Oracle Open Office Basic : number formats;formats
-Oracle Open Office Basic : number formats;recognition in text tables
-Oracle Open Office Basic : number of pages
-Oracle Open Office Basic : number of sheets
-Oracle Open Office Basic : number of tables
-Oracle Open Office Basic : numbering
-Oracle Open Office Basic : numbering;options
-Oracle Open Office Basic : numbering;turning off
-Oracle Open Office Basic : numbering;using automatically
-Oracle Open Office Basic : numbers
-Oracle Open Office Basic : numbers;date, time and currency formats
-Oracle Open Office Basic : numbers;decimal places (Calc)
-Oracle Open Office Basic : numerical field control
-Oracle Open Office Basic : numerical fields in forms
-Oracle Open Office Basic : objects
-Oracle Open Office Basic : objects;always moveable (Impress/Draw)
-Oracle Open Office Basic : objects;arranging within stacks
-Oracle Open Office Basic : objects;copying when moving in presentations
-Oracle Open Office Basic : objects;definition
-Oracle Open Office Basic : objects;displaying in spreadsheets
-Oracle Open Office Basic : objects;displaying in text documents
-Oracle Open Office Basic : objects;editing
-Oracle Open Office Basic : objects;inserting from Gallery
-Oracle Open Office Basic : objects;inserting OLE objects
-Oracle Open Office Basic : objects;moving and resizing with mouse
-Oracle Open Office Basic : objects;naming
-Oracle Open Office Basic : objects;opening
-Oracle Open Office Basic : objects;quickly moving to
-Oracle Open Office Basic : objects;titles and descriptions
-Oracle Open Office Basic : Oct function
-Oracle Open Office Basic : ODBC
-Oracle Open Office Basic : ODBC;database (Base)
-Oracle Open Office Basic : ODBC;definition
-Oracle Open Office Basic : ODF file formats
-Oracle Open Office Basic : Office
-Oracle Open Office Basic : Office;Microsoft Office and Oracle Open Office
-Oracle Open Office Basic : OLE
-Oracle Open Office Basic : OLE;definition
-Oracle Open Office Basic : OLE objects
-Oracle Open Office Basic : OLE objects;arranging within stacks
-Oracle Open Office Basic : OLE objects;captions (Writer)
-Oracle Open Office Basic : OLE objects;inserting
-Oracle Open Office Basic : OLE objects;number of
-Oracle Open Office Basic : OLE objects;protecting
-Oracle Open Office Basic : On Error GoTo ... Resume statement
-Oracle Open Office Basic : On...GoSub statement
-Oracle Open Office Basic : On...GoTo statement
-Oracle Open Office Basic : one and a half line spacing in text
-Oracle Open Office Basic : online feedback options
-Oracle Open Office Basic : online registration
-Oracle Open Office Basic : online update options
-Oracle Open Office Basic : online updates
-Oracle Open Office Basic : online updates;checking automatically
-Oracle Open Office Basic : online updates;checking manually
-Oracle Open Office Basic : Open statement
-Oracle Open Office Basic : Open/Save dialogs
-Oracle Open Office Basic : OpenDocument file formats
-Oracle Open Office Basic : OpenGL
-Oracle Open Office Basic : OpenGL;definition
-Oracle Open Office Basic : opening
-Oracle Open Office Basic : opening;context menus
-Oracle Open Office Basic : opening;database files
-Oracle Open Office Basic : opening;dialog settings
-Oracle Open Office Basic : opening;documents
-Oracle Open Office Basic : opening;documents from other formats
-Oracle Open Office Basic : opening;documents on WebDAV server
-Oracle Open Office Basic : opening;files with links
-Oracle Open Office Basic : opening;files, with placeholders
-Oracle Open Office Basic : opening;forms
-Oracle Open Office Basic : opening;Microsoft Office files
-Oracle Open Office Basic : opening;mobile device documents
-Oracle Open Office Basic : opening;objects
-Oracle Open Office Basic : opening;reports
-Oracle Open Office Basic : opening;several files
-Oracle Open Office Basic : opening;XForms
-Oracle Open Office Basic : operators
-Oracle Open Office Basic : operators;comparisons
-Oracle Open Office Basic : operators;default filters
-Oracle Open Office Basic : Option Base statement
-Oracle Open Office Basic : option button control
-Oracle Open Office Basic : Option Explicit statement
-Oracle Open Office Basic : Optional function
-Oracle Open Office Basic : optional hyphens (Writer)
-Oracle Open Office Basic : options
-Oracle Open Office Basic : options;accessibility
-Oracle Open Office Basic : options;appearance
-Oracle Open Office Basic : options;compatibility (Writer)
-Oracle Open Office Basic : options;improvement program
-Oracle Open Office Basic : options;network identity
-Oracle Open Office Basic : options;online update
-Oracle Open Office Basic : options;tools
-Oracle Open Office Basic : Or operator (logical)
-Oracle Open Office Basic : Oracle databases (base)
-Oracle Open Office Basic : Oracle Open Office Base data sources
-Oracle Open Office Basic : Oracle Open Office Basic scripts in HTML documents
-Oracle Open Office Basic : Oracle Open Office documents
-Oracle Open Office Basic : Oracle Open Office documents;mobile device filters
-Oracle Open Office Basic : Oracle Open Office documents;viewing and editing in Internet Explorer
-Oracle Open Office Basic : Oracle Open Office Math start
-Oracle Open Office Basic : ordering
-Oracle Open Office Basic : ordering;objects
-Oracle Open Office Basic : organizing
-Oracle Open Office Basic : organizing;macros and scripts
-Oracle Open Office Basic : organizing;modules/libraries/dialogs
-Oracle Open Office Basic : organizing;namespaces in XForms
-Oracle Open Office Basic : organizing;styles
-Oracle Open Office Basic : organizing;templates
-Oracle Open Office Basic : original size
-Oracle Open Office Basic : original size;printing in Oracle Open Office Math
-Oracle Open Office Basic : original size;restoring after cropping
-Oracle Open Office Basic : outlines
-Oracle Open Office Basic : outlines;font effects
-Oracle Open Office Basic : outlines;outline symbols
-Oracle Open Office Basic : outlines;sending to presentations
-Oracle Open Office Basic : overwrite mode
-Oracle Open Office Basic : packages, see extensions
-Oracle Open Office Basic : page breaks
-Oracle Open Office Basic : page breaks;displaying (Calc)
-Oracle Open Office Basic : page formats
-Oracle Open Office Basic : page formats;maximizing
-Oracle Open Office Basic : page formats;restriction
-Oracle Open Office Basic : page styles
-Oracle Open Office Basic : page styles;editing/applying with statusbar
-Oracle Open Office Basic : pages
-Oracle Open Office Basic : pages;backgrounds in all applications
-Oracle Open Office Basic : pages;formatting and numbering
-Oracle Open Office Basic : pages;printing page names in presentations
-Oracle Open Office Basic : pages;scaling
-Oracle Open Office Basic : pages;selecting one to print
-Oracle Open Office Basic : paint box
-Oracle Open Office Basic : paint can symbol
-Oracle Open Office Basic : pair kerning
-Oracle Open Office Basic : Palm file filters
-Oracle Open Office Basic : paper formats
-Oracle Open Office Basic : paper size warning
-Oracle Open Office Basic : paper trays
-Oracle Open Office Basic : paragraph marks
-Oracle Open Office Basic : paragraph marks;displaying (Writer)
-Oracle Open Office Basic : paragraph styles
-Oracle Open Office Basic : paragraph styles;languages
-Oracle Open Office Basic : paragraph styles;modifying basic fonts
-Oracle Open Office Basic : paragraphs
-Oracle Open Office Basic : paragraphs;alignment
-Oracle Open Office Basic : paragraphs;Asian typography
-Oracle Open Office Basic : paragraphs;defining borders
-Oracle Open Office Basic : paragraphs;hidden paragraphs (Writer)
-Oracle Open Office Basic : paragraphs;increasing indents of
-Oracle Open Office Basic : paragraphs;indents, margins and columns
-Oracle Open Office Basic : paragraphs;inserting bullets
-Oracle Open Office Basic : paragraphs;joining
-Oracle Open Office Basic : paragraphs;numbering automatically
-Oracle Open Office Basic : paragraphs;removing blank ones
-Oracle Open Office Basic : paragraphs;spacing
-Oracle Open Office Basic : paragraphs;tab stops
-Oracle Open Office Basic : parameters
-Oracle Open Office Basic : parameters;command line
-Oracle Open Office Basic : parameters;for procedures and functions
-Oracle Open Office Basic : parameters;passing by reference or value
-Oracle Open Office Basic : parameters;queries (Base)
-Oracle Open Office Basic : passwords for protecting contents
-Oracle Open Office Basic : pasting
-Oracle Open Office Basic : pasting;cell ranges
-Oracle Open Office Basic : pasting;cell ranges from spreadsheets
-Oracle Open Office Basic : pasting;data from text documents
-Oracle Open Office Basic : pasting;draw objects
-Oracle Open Office Basic : pasting;draw objects from other documents
-Oracle Open Office Basic : pasting;formatted/unformatted text
-Oracle Open Office Basic : pasting;from data source view
-Oracle Open Office Basic : pasting;from data sources to Oracle Open Office Calc
-Oracle Open Office Basic : pasting;pictures from other documents
-Oracle Open Office Basic : pasting;sheet areas in text documents
-Oracle Open Office Basic : pasting;to Gallery
-Oracle Open Office Basic : paths
-Oracle Open Office Basic : paths;changing work directory
-Oracle Open Office Basic : paths;defaults
-Oracle Open Office Basic : pattern editor
-Oracle Open Office Basic : pattern field control
-Oracle Open Office Basic : pattern fields
-Oracle Open Office Basic : pattern fields;form functions
-Oracle Open Office Basic : patterns for objects
-Oracle Open Office Basic : PDF
-Oracle Open Office Basic : PDF;export
-Oracle Open Office Basic : PDF;PostScript to PDF converter, UNIX
-Oracle Open Office Basic : personal data input
-Oracle Open Office Basic : phonetic guide
-Oracle Open Office Basic : picklist creation
-Oracle Open Office Basic : pictures
-Oracle Open Office Basic : pictures;adding to Gallery
-Oracle Open Office Basic : pictures;arranging within stacks
-Oracle Open Office Basic : pictures;assigning macros
-Oracle Open Office Basic : pictures;backgrounds
-Oracle Open Office Basic : pictures;captions (Writer)
-Oracle Open Office Basic : pictures;changing paths
-Oracle Open Office Basic : pictures;cropping and zooming
-Oracle Open Office Basic : pictures;displaying in Calc
-Oracle Open Office Basic : pictures;displaying in Writer (Writer)
-Oracle Open Office Basic : pictures;drag and drop between documents
-Oracle Open Office Basic : pictures;drawing
-Oracle Open Office Basic : pictures;editing
-Oracle Open Office Basic : pictures;filters
-Oracle Open Office Basic : pictures;ImageMap
-Oracle Open Office Basic : pictures;inserting automatically
-Oracle Open Office Basic : pictures;inserting from Gallery
-Oracle Open Office Basic : pictures;number of
-Oracle Open Office Basic : pictures;printing
-Oracle Open Office Basic : pictures;scaling/resizing
-Oracle Open Office Basic : pixel editor
-Oracle Open Office Basic : pixel graphics
-Oracle Open Office Basic : pixel graphics;inserting and editing
-Oracle Open Office Basic : pixel patterns
-Oracle Open Office Basic : placeholders
-Oracle Open Office Basic : placeholders;in SQL queries
-Oracle Open Office Basic : placeholders;on opening files
-Oracle Open Office Basic : placing toolbars
-Oracle Open Office Basic : playing movies and sound files
-Oracle Open Office Basic : plotting data as charts
-Oracle Open Office Basic : plug-ins
-Oracle Open Office Basic : plug-ins;activating and deactivating
-Oracle Open Office Basic : plug-ins;definition
-Oracle Open Office Basic : plug-ins;inserting
-Oracle Open Office Basic : pocket device appliances
-Oracle Open Office Basic : Pocket PC file filters
-Oracle Open Office Basic : points
-Oracle Open Office Basic : points;reducing editing points when snapping (Impress/Draw)
-Oracle Open Office Basic : polygon drawing
-Oracle Open Office Basic : pop-art filter
-Oracle Open Office Basic : portable document format
-Oracle Open Office Basic : positioning
-Oracle Open Office Basic : positioning;draw objects and controls
-Oracle Open Office Basic : positioning;fonts
-Oracle Open Office Basic : positioning;objects
-Oracle Open Office Basic : positioning;toolbars
-Oracle Open Office Basic : post method for form transmissions
-Oracle Open Office Basic : posterizing filter
-Oracle Open Office Basic : PostScript
-Oracle Open Office Basic : PostScript;creating files
-Oracle Open Office Basic : PostScript;PDF converter, UNIX
-Oracle Open Office Basic : PowerPoint export
-Oracle Open Office Basic : precision as shown (Calc)
-Oracle Open Office Basic : predefining fonts
-Oracle Open Office Basic : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
-Oracle Open Office Basic : presentations
-Oracle Open Office Basic : presentations;creating/opening
-Oracle Open Office Basic : presentations;inserting spreadsheet cells
-Oracle Open Office Basic : presentations;live on the Internet
-Oracle Open Office Basic : presentations;print menu
-Oracle Open Office Basic : presentations;saving
-Oracle Open Office Basic : presentations;saving automatically
-Oracle Open Office Basic : presentations;saving in other formats
-Oracle Open Office Basic : presentations;sending as e-mail
-Oracle Open Office Basic : presentations;starting with wizard
-Oracle Open Office Basic : presentations;wizards
-Oracle Open Office Basic : Presenter Console shortcuts
-Oracle Open Office Basic : press buttons, see push buttons
-Oracle Open Office Basic : previews
-Oracle Open Office Basic : previews;fonts lists
-Oracle Open Office Basic : primary keys
-Oracle Open Office Basic : primary keys;defining
-Oracle Open Office Basic : primary keys;design view
-Oracle Open Office Basic : primary keys;inserting (Base)
-Oracle Open Office Basic : print area selection
-Oracle Open Office Basic : Print statement
-Oracle Open Office Basic : printer metrics for document formatting (Writer)
-Oracle Open Office Basic : printers
-Oracle Open Office Basic : printers;adding, UNIX
-Oracle Open Office Basic : printers;choosing
-Oracle Open Office Basic : printers;default printer
-Oracle Open Office Basic : printers;faxes under UNIX
-Oracle Open Office Basic : printers;maximum page formats
-Oracle Open Office Basic : printers;paper trays
-Oracle Open Office Basic : printers;properties
-Oracle Open Office Basic : printing
-Oracle Open Office Basic : printing;black and white
-Oracle Open Office Basic : printing;brochures
-Oracle Open Office Basic : printing;colors in grayscale
-Oracle Open Office Basic : printing;comments
-Oracle Open Office Basic : printing;copies
-Oracle Open Office Basic : printing;creating individual jobs
-Oracle Open Office Basic : printing;dates in presentations
-Oracle Open Office Basic : printing;directly
-Oracle Open Office Basic : printing;documents
-Oracle Open Office Basic : printing;drawings defaults
-Oracle Open Office Basic : printing;elements in text documents
-Oracle Open Office Basic : printing;faster
-Oracle Open Office Basic : printing;fitting to pages in Oracle Open Office Math
-Oracle Open Office Basic : printing;fitting to pages in presentations
-Oracle Open Office Basic : printing;formulas in Oracle Open Office Math
-Oracle Open Office Basic : printing;hidden pages of presentations
-Oracle Open Office Basic : printing;in original size in Oracle Open Office Math
-Oracle Open Office Basic : printing;left/right pages
-Oracle Open Office Basic : printing;queries (Base)
-Oracle Open Office Basic : printing;scaling in Oracle Open Office Math
-Oracle Open Office Basic : printing;selections
-Oracle Open Office Basic : printing;text always in black
-Oracle Open Office Basic : printing;text in reverse order
-Oracle Open Office Basic : printing;tiling pages in presentations
-Oracle Open Office Basic : printing;transparencies
-Oracle Open Office Basic : printing;warnings
-Oracle Open Office Basic : printing;without scaling in presentations
-Oracle Open Office Basic : printing speed
-Oracle Open Office Basic : PRIVATE variables
-Oracle Open Office Basic : procedures
-Oracle Open Office Basic : ProcessServiceManager
-Oracle Open Office Basic : program stops
-Oracle Open Office Basic : programming
-Oracle Open Office Basic : programming;Oracle Open Office
-Oracle Open Office Basic : programming;scripting
-Oracle Open Office Basic : programming examples for controls
-Oracle Open Office Basic : progress bar control
-Oracle Open Office Basic : properties
-Oracle Open Office Basic : properties;controls and dialogs
-Oracle Open Office Basic : properties;controls in dialog editor
-Oracle Open Office Basic : properties;fields in databases
-Oracle Open Office Basic : properties;files
-Oracle Open Office Basic : properties;form controls
-Oracle Open Office Basic : properties;forms
-Oracle Open Office Basic : properties;printers
-Oracle Open Office Basic : protected contents
-Oracle Open Office Basic : protected dashes
-Oracle Open Office Basic : protected database tables
-Oracle Open Office Basic : protected documents
-Oracle Open Office Basic : protected spaces
-Oracle Open Office Basic : protected spaces;inserting
-Oracle Open Office Basic : protected spaces;showing (Writer)
-Oracle Open Office Basic : protecting
-Oracle Open Office Basic : protecting;contents
-Oracle Open Office Basic : protecting;recorded changes
-Oracle Open Office Basic : proxy settings
-Oracle Open Office Basic : Public statement
-Oracle Open Office Basic : PUBLIC variables
-Oracle Open Office Basic : push button control in dialog editor
-Oracle Open Office Basic : push buttons
-Oracle Open Office Basic : push buttons;adding to documents
-Oracle Open Office Basic : push buttons;creating
-Oracle Open Office Basic : Put statement
-Oracle Open Office Basic : queries
-Oracle Open Office Basic : queries;copying (Base)
-Oracle Open Office Basic : queries;creating in design view (Base)
-Oracle Open Office Basic : queries;creating in SQL view
-Oracle Open Office Basic : queries;defining (Base)
-Oracle Open Office Basic : queries;deleting table links (Base)
-Oracle Open Office Basic : queries;editing in data source view
-Oracle Open Office Basic : queries;formulating filter conditions (Base)
-Oracle Open Office Basic : queries;joining tables (Base)
-Oracle Open Office Basic : queries;missing elements (Base)
-Oracle Open Office Basic : queries;overview (Base)
-Oracle Open Office Basic : queries;parameter queries (Base)
-Oracle Open Office Basic : queries;printing (Base)
-Oracle Open Office Basic : Query Wizard (Base)
-Oracle Open Office Basic : Quickstarter
-Oracle Open Office Basic : quotation marks
-Oracle Open Office Basic : quotation marks;replacing
-Oracle Open Office Basic : quotes
-Oracle Open Office Basic : quotes;custom
-Oracle Open Office Basic : radio button control
-Oracle Open Office Basic : radio button creation
-Oracle Open Office Basic : Randomize statement
-Oracle Open Office Basic : read-only documents
-Oracle Open Office Basic : read-only documents;cursor
-Oracle Open Office Basic : read-only documents;database tables on/off
-Oracle Open Office Basic : read-only documents;editing
-Oracle Open Office Basic : read-only documents;opening documents as
-Oracle Open Office Basic : read-only items in Data Navigator
-Oracle Open Office Basic : recognizing URLs automatically
-Oracle Open Office Basic : recording
-Oracle Open Office Basic : recording;changes
-Oracle Open Office Basic : recording;macros
-Oracle Open Office Basic : records
-Oracle Open Office Basic : records;inserting comments
-Oracle Open Office Basic : records;protecting
-Oracle Open Office Basic : records;saving
-Oracle Open Office Basic : records;searching in databases
-Oracle Open Office Basic : rectangles with round corners
-Oracle Open Office Basic : recursions in spreadsheets
-Oracle Open Office Basic : Red function
-Oracle Open Office Basic : ReDim statement
-Oracle Open Office Basic : redo command
-Oracle Open Office Basic : reduced printing
-Oracle Open Office Basic : reference lines
-Oracle Open Office Basic : references
-Oracle Open Office Basic : references;displaying in color (Calc)
-Oracle Open Office Basic : references;expanding (Calc)
-Oracle Open Office Basic : references;iterative (Calc)
-Oracle Open Office Basic : register-true
-Oracle Open Office Basic : register-true;definition
-Oracle Open Office Basic : registering
-Oracle Open Office Basic : registering;address books
-Oracle Open Office Basic : registering;databases (Base)
-Oracle Open Office Basic : registering;Oracle Open Office
-Oracle Open Office Basic : regular expressions
-Oracle Open Office Basic : regular expressions;list of
-Oracle Open Office Basic : regular expressions;opening files
-Oracle Open Office Basic : relational databases (Base)
-Oracle Open Office Basic : relations
-Oracle Open Office Basic : relations;creating and deleting (Base)
-Oracle Open Office Basic : relations;joining tables (Base)
-Oracle Open Office Basic : relations;properties (Base)
-Oracle Open Office Basic : relative hyperlinks
-Oracle Open Office Basic : relative saving of URLs
-Oracle Open Office Basic : reloading
-Oracle Open Office Basic : reloading;documents
-Oracle Open Office Basic : reloading;HTML documents, automatically
-Oracle Open Office Basic : Rem statement
-Oracle Open Office Basic : remarks, see also comments
-Oracle Open Office Basic : remote configurations
-Oracle Open Office Basic : remove noise filter
-Oracle Open Office Basic : removing
-Oracle Open Office Basic : removing;bullets and numbering
-Oracle Open Office Basic : removing;form filters
-Oracle Open Office Basic : removing, see also deleting
-Oracle Open Office Basic : renaming modules and dialogs
-Oracle Open Office Basic : repeating
-Oracle Open Office Basic : repeating;commands
-Oracle Open Office Basic : replacement options
-Oracle Open Office Basic : replacement table
-Oracle Open Office Basic : replacing
-Oracle Open Office Basic : replacing;AutoCorrect function
-Oracle Open Office Basic : replacing;dashes
-Oracle Open Office Basic : replacing;tab stops (regular expressions)
-Oracle Open Office Basic : Report Builder
-Oracle Open Office Basic : reports
-Oracle Open Office Basic : reports;creating
-Oracle Open Office Basic : reports;error reports
-Oracle Open Office Basic : reports;opening and editing
-Oracle Open Office Basic : reports;templates
-Oracle Open Office Basic : Reset statement
-Oracle Open Office Basic : resetting
-Oracle Open Office Basic : resetting;templates
-Oracle Open Office Basic : resizing
-Oracle Open Office Basic : resizing;objects, by mouse
-Oracle Open Office Basic : resizing, see also scaling/zooming
-Oracle Open Office Basic : resolution when printing bitmaps
-Oracle Open Office Basic : restoring
-Oracle Open Office Basic : restoring;default formatting
-Oracle Open Office Basic : restoring;editing
-Oracle Open Office Basic : Resume Next parameter
-Oracle Open Office Basic : return value type of functions
-Oracle Open Office Basic : reversing printing order
-Oracle Open Office Basic : review function
-Oracle Open Office Basic : review function;accepting or rejecting changes
-Oracle Open Office Basic : review function;comparing documents
-Oracle Open Office Basic : review function;protecting records
-Oracle Open Office Basic : review function;recording changes example
-Oracle Open Office Basic : rich text control
-Oracle Open Office Basic : right alignment of paragraphs
-Oracle Open Office Basic : Right function
-Oracle Open Office Basic : right joins (Base)
-Oracle Open Office Basic : right-to-left text
-Oracle Open Office Basic : RmDir statement
-Oracle Open Office Basic : Rnd function
-Oracle Open Office Basic : rotating
-Oracle Open Office Basic : rotating;3D text
-Oracle Open Office Basic : round corners
-Oracle Open Office Basic : rounding precision (Calc)
-Oracle Open Office Basic : row headers
-Oracle Open Office Basic : row headers;displaying (Calc)
-Oracle Open Office Basic : row headers;highlighting (Calc)
-Oracle Open Office Basic : RSet statement
-Oracle Open Office Basic : RTrim function
-Oracle Open Office Basic : rulers
-Oracle Open Office Basic : rulers;default settings
-Oracle Open Office Basic : rulers;measurement units
-Oracle Open Office Basic : rulers;visible in presentations
-Oracle Open Office Basic : run-time errors in Basic
-Oracle Open Office Basic : samples and templates
-Oracle Open Office Basic : saving
-Oracle Open Office Basic : saving;Basic code
-Oracle Open Office Basic : saving;default file formats
-Oracle Open Office Basic : saving;dialog settings
-Oracle Open Office Basic : saving;documents
-Oracle Open Office Basic : saving;documents for mobile devices
-Oracle Open Office Basic : saving;documents in other formats
-Oracle Open Office Basic : saving;documents, automatically
-Oracle Open Office Basic : saving;in Microsoft Office file format
-Oracle Open Office Basic : saving;options
-Oracle Open Office Basic : saving;templates
-Oracle Open Office Basic : saving;to XML
-Oracle Open Office Basic : saving;VBA code in Microsoft Office documents
-Oracle Open Office Basic : saving;with password by default
-Oracle Open Office Basic : saving as command
-Oracle Open Office Basic : saving as command;precautions
-Oracle Open Office Basic : scaling
-Oracle Open Office Basic : scaling;font sizes in user interface
-Oracle Open Office Basic : scaling;objects
-Oracle Open Office Basic : scaling;pictures
-Oracle Open Office Basic : scaling;printing in Oracle Open Office Math
-Oracle Open Office Basic : scaling;when printing presentations
-Oracle Open Office Basic : scaling, see also zooming
-Oracle Open Office Basic : scope of variables
-Oracle Open Office Basic : screen
-Oracle Open Office Basic : screen;full screen views
-Oracle Open Office Basic : screen;scaling
-Oracle Open Office Basic : screen magnifiers
-Oracle Open Office Basic : screen readers
-Oracle Open Office Basic : script organization
-Oracle Open Office Basic : scroll bar control
-Oracle Open Office Basic : scrollbars
-Oracle Open Office Basic : scrollbars;controls
-Oracle Open Office Basic : scrollbars;displaying (Calc)
-Oracle Open Office Basic : scrollbars;horizontal and vertical (Writer)
-Oracle Open Office Basic : search criteria for database functions in cells
-Oracle Open Office Basic : search engines
-Oracle Open Office Basic : search engines;definition
-Oracle Open Office Basic : search engines;selecting
-Oracle Open Office Basic : searching
-Oracle Open Office Basic : searching;all sheets
-Oracle Open Office Basic : searching;databases
-Oracle Open Office Basic : searching;form filters
-Oracle Open Office Basic : searching;Internet
-Oracle Open Office Basic : searching;tables and forms
-Oracle Open Office Basic : Second function
-Oracle Open Office Basic : sections
-Oracle Open Office Basic : sections;backgrounds
-Oracle Open Office Basic : security
-Oracle Open Office Basic : security;digital signatures
-Oracle Open Office Basic : security;options for documents with macros
-Oracle Open Office Basic : security;protecting contents
-Oracle Open Office Basic : security;security levels for macros
-Oracle Open Office Basic : security;warning dialogs with macros
-Oracle Open Office Basic : Seek function
-Oracle Open Office Basic : Seek statement
-Oracle Open Office Basic : Select...Case statement
-Oracle Open Office Basic : selecting
-Oracle Open Office Basic : selecting;controls
-Oracle Open Office Basic : selecting;measurement units
-Oracle Open Office Basic : selecting;objects
-Oracle Open Office Basic : selecting;print areas
-Oracle Open Office Basic : selecting;several files
-Oracle Open Office Basic : selection clipboard
-Oracle Open Office Basic : selection frames
-Oracle Open Office Basic : selection modes in text
-Oracle Open Office Basic : selection options for controls
-Oracle Open Office Basic : sending
-Oracle Open Office Basic : sending;AutoAbstract function in presentations
-Oracle Open Office Basic : sending;documents as e-mail
-Oracle Open Office Basic : sending;documents as faxes
-Oracle Open Office Basic : separator lines
-Oracle Open Office Basic : separator lines;defining
-Oracle Open Office Basic : separators
-Oracle Open Office Basic : separators;conditional
-Oracle Open Office Basic : Server Side ImageMap
-Oracle Open Office Basic : Set statement
-Oracle Open Office Basic : SetAttr statement
-Oracle Open Office Basic : settings
-Oracle Open Office Basic : settings;printers
-Oracle Open Office Basic : settings;program configuration
-Oracle Open Office Basic : settings;proxies
-Oracle Open Office Basic : settings;tracking changes
-Oracle Open Office Basic : settings;views
-Oracle Open Office Basic : SGML
-Oracle Open Office Basic : SGML;definition
-Oracle Open Office Basic : Sgn function
-Oracle Open Office Basic : shadows
-Oracle Open Office Basic : shadows;areas
-Oracle Open Office Basic : shadows;borders
-Oracle Open Office Basic : shadows;characters
-Oracle Open Office Basic : shadows;characters, using context menu
-Oracle Open Office Basic : sharing documents
-Oracle Open Office Basic : sharpening filter
-Oracle Open Office Basic : sheet tabs
-Oracle Open Office Basic : sheet tabs;displaying
-Oracle Open Office Basic : sheets
-Oracle Open Office Basic : sheets;searching all
-Oracle Open Office Basic : Shell function
-Oracle Open Office Basic : shortcut keys
-Oracle Open Office Basic : shortcut keys;assigning macros
-Oracle Open Office Basic : shortcut keys;Basic IDE
-Oracle Open Office Basic : shortcut keys;general
-Oracle Open Office Basic : shortcut keys;in databases
-Oracle Open Office Basic : shortcut keys;Oracle Open Office accessibility
-Oracle Open Office Basic : showing
-Oracle Open Office Basic : showing;changes
-Oracle Open Office Basic : showing;docked windows
-Oracle Open Office Basic : showing;drawings and controls (Writer)
-Oracle Open Office Basic : showing;live presentations on the Internet
-Oracle Open Office Basic : showing;toolbars
-Oracle Open Office Basic : signing documents with digital signatures
-Oracle Open Office Basic : similarity search
-Oracle Open Office Basic : simple handles (Writer)
-Oracle Open Office Basic : simplified Chinese
-Oracle Open Office Basic : simplified Chinese;translating to traditional Chinese
-Oracle Open Office Basic : Sin function
-Oracle Open Office Basic : single sign on options
-Oracle Open Office Basic : single-line spacing in text
-Oracle Open Office Basic : sizes
-Oracle Open Office Basic : sizes;draw objects
-Oracle Open Office Basic : sizes;pictures
-Oracle Open Office Basic : slanting draw objects
-Oracle Open Office Basic : small capitals
-Oracle Open Office Basic : small icons
-Oracle Open Office Basic : smart tag configuration
-Oracle Open Office Basic : smooth scrolling (Writer)
-Oracle Open Office Basic : smoothing filter
-Oracle Open Office Basic : snap grid defaults (Writer/Calc)
-Oracle Open Office Basic : snapping in presentations and drawings
-Oracle Open Office Basic : solarization filter
-Oracle Open Office Basic : sort lists
-Oracle Open Office Basic : sort lists;copying to in Calc
-Oracle Open Office Basic : sorting
-Oracle Open Office Basic : sorting;data in forms
-Oracle Open Office Basic : sorting;databases
-Oracle Open Office Basic : sound files
-Oracle Open Office Basic : Space function
-Oracle Open Office Basic : spaces
-Oracle Open Office Basic : spaces;displaying (Writer)
-Oracle Open Office Basic : spaces;ignoring double
-Oracle Open Office Basic : spaces;inserting protected spaces
-Oracle Open Office Basic : spaces;showing protected spaces (Writer)
-Oracle Open Office Basic : spacing
-Oracle Open Office Basic : spacing;between paragraphs in footnotes
-Oracle Open Office Basic : spacing;font effects
-Oracle Open Office Basic : spacing;lines and paragraphs
-Oracle Open Office Basic : spacing;tab stops in text documents
-Oracle Open Office Basic : spacing;tabs in presentations
-Oracle Open Office Basic : spadmin
-Oracle Open Office Basic : special characters
-Oracle Open Office Basic : speech bubbles
-Oracle Open Office Basic : speed of printing
-Oracle Open Office Basic : spellcheck
-Oracle Open Office Basic : spellcheck;activating for a language
-Oracle Open Office Basic : spellcheck;context menus
-Oracle Open Office Basic : spellcheck;default languages
-Oracle Open Office Basic : spellcheck;dialog
-Oracle Open Office Basic : spellcheck;dictionary of exceptions
-Oracle Open Office Basic : spellcheck;ignore list
-Oracle Open Office Basic : spin button creation
-Oracle Open Office Basic : Split function
-Oracle Open Office Basic : spoolfiles with Xprinter
-Oracle Open Office Basic : spreadsheets
-Oracle Open Office Basic : spreadsheets;as databases (base)
-Oracle Open Office Basic : spreadsheets;copying areas to text documents
-Oracle Open Office Basic : spreadsheets;creating/opening
-Oracle Open Office Basic : spreadsheets;inserting charts
-Oracle Open Office Basic : spreadsheets;inserting database records
-Oracle Open Office Basic : spreadsheets;printing
-Oracle Open Office Basic : spreadsheets;saving
-Oracle Open Office Basic : spreadsheets;saving automatically
-Oracle Open Office Basic : spreadsheets;saving in other formats
-Oracle Open Office Basic : spreadsheets;sending as e-mail
-Oracle Open Office Basic : SQL
-Oracle Open Office Basic : SQL;definition
-Oracle Open Office Basic : SQL;DISTINCT parameter
-Oracle Open Office Basic : SQL;executing SQL commands
-Oracle Open Office Basic : SQL;executing SQL statements (Base)
-Oracle Open Office Basic : SQL;queries (Base)
-Oracle Open Office Basic : Sqr function
-Oracle Open Office Basic : square drawings
-Oracle Open Office Basic : standard bar on/off
-Oracle Open Office Basic : standard filters in databases
-Oracle Open Office Basic : standard printer under UNIX
-Oracle Open Office Basic : start center
-Oracle Open Office Basic : start parameters
-Oracle Open Office Basic : Static statement
-Oracle Open Office Basic : status bar on/off
-Oracle Open Office Basic : Step statement
-Oracle Open Office Basic : stickers
-Oracle Open Office Basic : Stop statement
-Oracle Open Office Basic : stopping macros
-Oracle Open Office Basic : Str function
-Oracle Open Office Basic : StrComp function
-Oracle Open Office Basic : strikethrough
-Oracle Open Office Basic : strikethrough;characters
-Oracle Open Office Basic : strikethrough;font effects
-Oracle Open Office Basic : String function
-Oracle Open Office Basic : styles
-Oracle Open Office Basic : styles;'changed' message
-Oracle Open Office Basic : styles;copying between documents
-Oracle Open Office Basic : styles;keyboard shortcuts
-Oracle Open Office Basic : styles;organizing
-Oracle Open Office Basic : styles;printing styles used in a document
-Oracle Open Office Basic : styles;replacing automatically
-Oracle Open Office Basic : Styles and Formatting window
-Oracle Open Office Basic : Styles and Formatting window;docking
-Oracle Open Office Basic : Sub statement
-Oracle Open Office Basic : subforms
-Oracle Open Office Basic : subforms;creating
-Oracle Open Office Basic : subforms;description
-Oracle Open Office Basic : submitting forms
-Oracle Open Office Basic : subroutines
-Oracle Open Office Basic : suffixes in file formats
-Oracle Open Office Basic : support on the Web
-Oracle Open Office Basic : Switch function
-Oracle Open Office Basic : synchronizing
-Oracle Open Office Basic : synchronizing;labels and business cards
-Oracle Open Office Basic : synchronizing;Pocket PC and Oracle Open Office formats
-Oracle Open Office Basic : system address book registration
-Oracle Open Office Basic : tab stops
-Oracle Open Office Basic : tab stops;displaying (Writer)
-Oracle Open Office Basic : tab stops;inserting and editing
-Oracle Open Office Basic : tab stops;regular expressions
-Oracle Open Office Basic : tab stops;setting in sheets
-Oracle Open Office Basic : tab stops;settings
-Oracle Open Office Basic : tab stops;spacing in presentations
-Oracle Open Office Basic : tab stops;spacing in text documents
-Oracle Open Office Basic : table controls
-Oracle Open Office Basic : table controls;form functions
-Oracle Open Office Basic : table controls;keyboard-only edit mode
-Oracle Open Office Basic : table controls;properties
-Oracle Open Office Basic : table views of databases
-Oracle Open Office Basic : Table Wizard (Base)
-Oracle Open Office Basic : tables
-Oracle Open Office Basic : tables;inserting line breaks
-Oracle Open Office Basic : tables in databases
-Oracle Open Office Basic : tables in databases;access rights to (Base)
-Oracle Open Office Basic : tables in databases;adding to queries
-Oracle Open Office Basic : tables in databases;browsing and editing
-Oracle Open Office Basic : tables in databases;copying database tables (Base)
-Oracle Open Office Basic : tables in databases;creating
-Oracle Open Office Basic : tables in databases;creating in design view (manually)
-Oracle Open Office Basic : tables in databases;importing text formats (Base)
-Oracle Open Office Basic : tables in databases;joining for queries (Base)
-Oracle Open Office Basic : tables in databases;printing queries (Base)
-Oracle Open Office Basic : tables in databases;relations (Base)
-Oracle Open Office Basic : tables in databases;searching
-Oracle Open Office Basic : tables in spreadsheets
-Oracle Open Office Basic : tables in spreadsheets;copying data to other applications
-Oracle Open Office Basic : tables in spreadsheets;defining borders
-Oracle Open Office Basic : tables in spreadsheets;value highlighting
-Oracle Open Office Basic : tables in text
-Oracle Open Office Basic : tables in text;captions
-Oracle Open Office Basic : tables in text;creating automatically
-Oracle Open Office Basic : tables in text;default settings
-Oracle Open Office Basic : tables in text;defining borders
-Oracle Open Office Basic : tables in text;displaying
-Oracle Open Office Basic : tables in text;printing
-Oracle Open Office Basic : tabs
-Oracle Open Office Basic : tabs;displaying sheet tabs
-Oracle Open Office Basic : tags
-Oracle Open Office Basic : tags;definition
-Oracle Open Office Basic : tags;META tags
-Oracle Open Office Basic : Tan function
-Oracle Open Office Basic : templates
-Oracle Open Office Basic : templates;agendas
-Oracle Open Office Basic : templates;changing basic fonts
-Oracle Open Office Basic : templates;database reports
-Oracle Open Office Basic : templates;deleting
-Oracle Open Office Basic : templates;editing and saving
-Oracle Open Office Basic : templates;faxes
-Oracle Open Office Basic : templates;importing and exporting
-Oracle Open Office Basic : templates;letters
-Oracle Open Office Basic : templates;new documents from templates
-Oracle Open Office Basic : templates;opening documents with
-Oracle Open Office Basic : templates;organizing
-Oracle Open Office Basic : terminology
-Oracle Open Office Basic : terminology;general glossary
-Oracle Open Office Basic : terminology;Internet glossary
-Oracle Open Office Basic : test mode control
-Oracle Open Office Basic : testing XML filters
-Oracle Open Office Basic : text
-Oracle Open Office Basic : text;animating
-Oracle Open Office Basic : text;Asian layout
-Oracle Open Office Basic : text;bold
-Oracle Open Office Basic : text;coloring
-Oracle Open Office Basic : text;copying by drag and drop
-Oracle Open Office Basic : text;CTL languages
-Oracle Open Office Basic : text;drawing pictures
-Oracle Open Office Basic : text;font effects
-Oracle Open Office Basic : text;font sizes
-Oracle Open Office Basic : text;font styles
-Oracle Open Office Basic : text;fonts and formats
-Oracle Open Office Basic : text;Fontwork icons
-Oracle Open Office Basic : text;hyperlinks
-Oracle Open Office Basic : text;inserting special characters
-Oracle Open Office Basic : text;italics
-Oracle Open Office Basic : text;kerning
-Oracle Open Office Basic : text;language selection
-Oracle Open Office Basic : text;line spacing
-Oracle Open Office Basic : text;overwriting or inserting
-Oracle Open Office Basic : text;printing in black
-Oracle Open Office Basic : text;replacing with format
-Oracle Open Office Basic : text;selection modes
-Oracle Open Office Basic : text;shadowed
-Oracle Open Office Basic : text;text/draw objects
-Oracle Open Office Basic : text attributes
-Oracle Open Office Basic : text attributes;hyperlinks
-Oracle Open Office Basic : text attributes;undoing
-Oracle Open Office Basic : text boxes
-Oracle Open Office Basic : text boxes;controls
-Oracle Open Office Basic : text boxes;form functions
-Oracle Open Office Basic : text boxes;positioning
-Oracle Open Office Basic : text breaks in cells
-Oracle Open Office Basic : text colors for better accessibility
-Oracle Open Office Basic : text databases (Base)
-Oracle Open Office Basic : text documents
-Oracle Open Office Basic : text documents;creating/opening
-Oracle Open Office Basic : text documents;importing/exporting
-Oracle Open Office Basic : text documents;inserting spreadsheet cells
-Oracle Open Office Basic : text documents;print settings
-Oracle Open Office Basic : text documents;printing
-Oracle Open Office Basic : text documents;saving
-Oracle Open Office Basic : text documents;saving automatically
-Oracle Open Office Basic : text documents;saving in other formats
-Oracle Open Office Basic : text documents;sending as e-mail
-Oracle Open Office Basic : text effects
-Oracle Open Office Basic : text flow
-Oracle Open Office Basic : text flow;in cells
-Oracle Open Office Basic : text formats
-Oracle Open Office Basic : text formats;databases
-Oracle Open Office Basic : text formats;pasting
-Oracle Open Office Basic : text input fields
-Oracle Open Office Basic : text layout for special languages
-Oracle Open Office Basic : text objects
-Oracle Open Office Basic : text objects;alignment
-Oracle Open Office Basic : text objects;draw functions
-Oracle Open Office Basic : text objects;fonts
-Oracle Open Office Basic : text objects;in presentations and drawings
-Oracle Open Office Basic : text overflow in spreadsheet cells
-Oracle Open Office Basic : text, see also text documents, paragraphs and characters
-Oracle Open Office Basic : TextArt, see Fontwork
-Oracle Open Office Basic : textures
-Oracle Open Office Basic : textures;inserting from Gallery
-Oracle Open Office Basic : textures;on chart bars
-Oracle Open Office Basic : Thai
-Oracle Open Office Basic : Thai;entering text
-Oracle Open Office Basic : Thai;language settings
-Oracle Open Office Basic : thesaurus
-Oracle Open Office Basic : thesaurus;activating for a language
-Oracle Open Office Basic : ThisComponent property
-Oracle Open Office Basic : ticker text
-Oracle Open Office Basic : time field control
-Oracle Open Office Basic : time fields
-Oracle Open Office Basic : time fields;form functions
-Oracle Open Office Basic : Time statement
-Oracle Open Office Basic : Timer function
-Oracle Open Office Basic : times
-Oracle Open Office Basic : times;inserting when printing presentations
-Oracle Open Office Basic : times, formats
-Oracle Open Office Basic : TimeSerial function
-Oracle Open Office Basic : TimeValue function
-Oracle Open Office Basic : tips
-Oracle Open Office Basic : tips;extended tips in Help
-Oracle Open Office Basic : title rows
-Oracle Open Office Basic : title rows;printing in Oracle Open Office Math
-Oracle Open Office Basic : titles
-Oracle Open Office Basic : titles;changing
-Oracle Open Office Basic : titles;editing in charts
-Oracle Open Office Basic : titles;font effects
-Oracle Open Office Basic : titles;formatting automatically
-Oracle Open Office Basic : titles;objects
-Oracle Open Office Basic : To statement
-Oracle Open Office Basic : toolbars
-Oracle Open Office Basic : toolbars;adding buttons
-Oracle Open Office Basic : toolbars;Basic IDE
-Oracle Open Office Basic : toolbars;docking/undocking
-Oracle Open Office Basic : toolbars;Form Navigation bar
-Oracle Open Office Basic : toolbars;viewing/closing
-Oracle Open Office Basic : tools bar
-Oracle Open Office Basic : tooltips
-Oracle Open Office Basic : tooltips;extended tips
-Oracle Open Office Basic : tooltips;help
-Oracle Open Office Basic : traditional Chinese
-Oracle Open Office Basic : traditional Chinese;translating to simplified chinese
-Oracle Open Office Basic : translating dialogs
-Oracle Open Office Basic : transparency
-Oracle Open Office Basic : transparency;areas
-Oracle Open Office Basic : transparency;off for faster printing
-Oracle Open Office Basic : transparency;saving
-Oracle Open Office Basic : tree view of Help
-Oracle Open Office Basic : Trim function
-Oracle Open Office Basic : twips
-Oracle Open Office Basic : twips;definition
-Oracle Open Office Basic : TwipsPerPixelX function
-Oracle Open Office Basic : TwipsPerPixelY function
-Oracle Open Office Basic : typefaces
-Oracle Open Office Basic : typefaces;adding under UNIX
-Oracle Open Office Basic : typefaces;formats
-Oracle Open Office Basic : TypeName function
-Oracle Open Office Basic : types of variables
-Oracle Open Office Basic : typographical quotes in Oracle Open Office Writer
-Oracle Open Office Basic : typography
-Oracle Open Office Basic : typography;Asian
-Oracle Open Office Basic : UBound function
-Oracle Open Office Basic : UCase function
-Oracle Open Office Basic : underlining
-Oracle Open Office Basic : underlining;AutoFormat function
-Oracle Open Office Basic : underlining;characters
-Oracle Open Office Basic : underlining;text
-Oracle Open Office Basic : undocking windows
-Oracle Open Office Basic : undoing
-Oracle Open Office Basic : undoing;direct formatting
-Oracle Open Office Basic : undoing;editing
-Oracle Open Office Basic : undoing;number of steps
-Oracle Open Office Basic : ungrouping groups
-Oracle Open Office Basic : units
-Oracle Open Office Basic : units;converting
-Oracle Open Office Basic : units;measurement units
-Oracle Open Office Basic : UNO components
-Oracle Open Office Basic : UNO components;Extension Manager
-Oracle Open Office Basic : UNO components;integrating new
-Oracle Open Office Basic : Until
-Oracle Open Office Basic : update options
-Oracle Open Office Basic : updates
-Oracle Open Office Basic : updates;checking automatically
-Oracle Open Office Basic : updates;checking manually
-Oracle Open Office Basic : updating
-Oracle Open Office Basic : updating;fields and charts, automatically (Writer)
-Oracle Open Office Basic : updating;links in text documents
-Oracle Open Office Basic : updating;links, on opening
-Oracle Open Office Basic : updating;templates
-Oracle Open Office Basic : URL
-Oracle Open Office Basic : URL;changing hyperlink URLs
-Oracle Open Office Basic : URL;definition
-Oracle Open Office Basic : URL;in pictures
-Oracle Open Office Basic : URL;saving absolute/relative paths
-Oracle Open Office Basic : URL;turning off URL recognition
-Oracle Open Office Basic : user data
-Oracle Open Office Basic : user data;input
-Oracle Open Office Basic : user data;removing when saving
-Oracle Open Office Basic : user feedback
-Oracle Open Office Basic : user feedback;automatically
-Oracle Open Office Basic : user-defined dictionaries
-Oracle Open Office Basic : user-defined dictionaries;creating
-Oracle Open Office Basic : user-defined dictionaries;dictionary of exceptions
-Oracle Open Office Basic : user-defined dictionaries;editing
-Oracle Open Office Basic : user-defined styles
-Oracle Open Office Basic : user-defined styles;automatically replacing
-Oracle Open Office Basic : UTF-8/UCS2 support
-Oracle Open Office Basic : Val function
-Oracle Open Office Basic : values
-Oracle Open Office Basic : values;of variables
-Oracle Open Office Basic : values;rounded as shown (Calc)
-Oracle Open Office Basic : variables
-Oracle Open Office Basic : variables;for paths
-Oracle Open Office Basic : variables;global and local
-Oracle Open Office Basic : variables;observing values
-Oracle Open Office Basic : variables;passing to procedures and functions
-Oracle Open Office Basic : variables;scope
-Oracle Open Office Basic : variables;using
-Oracle Open Office Basic : VarType function
-Oracle Open Office Basic : VBA code
-Oracle Open Office Basic : VBA code;loading/saving documents with VBA code
-Oracle Open Office Basic : version management
-Oracle Open Office Basic : version numbers of documents
-Oracle Open Office Basic : versions
-Oracle Open Office Basic : versions;comparing documents
-Oracle Open Office Basic : versions;file saving as, restriction
-Oracle Open Office Basic : versions;merging document versions
-Oracle Open Office Basic : versions;of a document
-Oracle Open Office Basic : versions;Oracle Open Office
-Oracle Open Office Basic : vertical callouts
-Oracle Open Office Basic : vertical line control
-Oracle Open Office Basic : vertical scrollbar control
-Oracle Open Office Basic : vertical scrollbars (Writer)
-Oracle Open Office Basic : vertical text boxes
-Oracle Open Office Basic : videos
-Oracle Open Office Basic : viewing
-Oracle Open Office Basic : viewing;databases
-Oracle Open Office Basic : viewing;file properties
-Oracle Open Office Basic : viewing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Basic : viewing;toolbars
-Oracle Open Office Basic : views
-Oracle Open Office Basic : views;creating database views (Base)
-Oracle Open Office Basic : views;defaults
-Oracle Open Office Basic : views;full screen
-Oracle Open Office Basic : views;icons
-Oracle Open Office Basic : views;scaling
-Oracle Open Office Basic : Visual Basic for Applications
-Oracle Open Office Basic : Visual Basic for Applications;loading/saving documents with VBA code
-Oracle Open Office Basic : Wait statement
-Oracle Open Office Basic : watching variables
-Oracle Open Office Basic : watermarks
-Oracle Open Office Basic : web documents
-Oracle Open Office Basic : web documents;XForms
-Oracle Open Office Basic : Web support
-Oracle Open Office Basic : WebCast export
-Oracle Open Office Basic : WebDAV over HTTPS
-Oracle Open Office Basic : WeekDay function
-Oracle Open Office Basic : While
-Oracle Open Office Basic : While;Do loop
-Oracle Open Office Basic : While;While...Wend loop
-Oracle Open Office Basic : windows
-Oracle Open Office Basic : windows;docking
-Oracle Open Office Basic : windows;docking definition
-Oracle Open Office Basic : windows;hiding/showing/docking
-Oracle Open Office Basic : windows;new
-Oracle Open Office Basic : With statement
-Oracle Open Office Basic : wizards
-Oracle Open Office Basic : wizards;agendas
-Oracle Open Office Basic : wizards;database queries
-Oracle Open Office Basic : wizards;database tables (Base)
-Oracle Open Office Basic : wizards;databases (Base)
-Oracle Open Office Basic : wizards;document converter
-Oracle Open Office Basic : wizards;Euro Converter
-Oracle Open Office Basic : wizards;faxes
-Oracle Open Office Basic : wizards;forms
-Oracle Open Office Basic : wizards;letters
-Oracle Open Office Basic : wizards;macros (Base)
-Oracle Open Office Basic : wizards;overview
-Oracle Open Office Basic : wizards;presentations
-Oracle Open Office Basic : wizards;reports
-Oracle Open Office Basic : Word documents
-Oracle Open Office Basic : Word documents;compatibility
-Oracle Open Office Basic : Word documents;saving as
-Oracle Open Office Basic : WordArt, see Fontwork
-Oracle Open Office Basic : words
-Oracle Open Office Basic : words;automatically replacing
-Oracle Open Office Basic : words;wrapping in cells
-Oracle Open Office Basic : words;wrapping in CTL
-Oracle Open Office Basic : working directory change
-Oracle Open Office Basic : wrapping text
-Oracle Open Office Basic : wrapping text;in cells
-Oracle Open Office Basic : write protection on/off
-Oracle Open Office Basic : Write statement
-Oracle Open Office Basic : writing aids options
-Oracle Open Office Basic : WYSIWYG in fonts lists
-Oracle Open Office Basic : XForms
-Oracle Open Office Basic : XForms;adding/editing/deleting/organizing namespaces
-Oracle Open Office Basic : XForms;conditions
-Oracle Open Office Basic : XForms;opening/editing
-Oracle Open Office Basic : XML converters
-Oracle Open Office Basic : XML file formats
-Oracle Open Office Basic : XML filters
-Oracle Open Office Basic : XML filters;creating/testing
-Oracle Open Office Basic : XML filters;saving as package/installing/deleting
-Oracle Open Office Basic : XML filters;settings
-Oracle Open Office Basic : XML Forms, see XForms
-Oracle Open Office Basic : Xor operator (logical)
-Oracle Open Office Basic : XSLT filters, see also XML filters
-Oracle Open Office Basic : Year function
-Oracle Open Office Basic : years
-Oracle Open Office Basic : years;2-digit options
-Oracle Open Office Basic : zero values
-Oracle Open Office Basic : zero values;displaying (Calc)
-Oracle Open Office Basic : zooming
-Oracle Open Office Basic : zooming;page views
-Oracle Open Office Basic : zooming;pictures
-Oracle Open Office Basic : zooming;status bar
+Oracle Open Office Math : 3D text creation
+Oracle Open Office Math : abbreviation replacement
+Oracle Open Office Math : absolute hyperlinks
+Oracle Open Office Math : absolute saving of URLs
+Oracle Open Office Math : absolute values
+Oracle Open Office Math : accents
+Oracle Open Office Math : accents
+Oracle Open Office Math : accents;in Oracle Open Office Math
+Oracle Open Office Math : Access databases (base)
+Oracle Open Office Math : access rights for database tables (Base)
+Oracle Open Office Math : accessibility
+Oracle Open Office Math : accessibility;general shortcuts
+Oracle Open Office Math : accessibility;options
+Oracle Open Office Math : accessibility;Oracle Open Office assistive technology
+Oracle Open Office Math : accessibility;Oracle Open Office features
+Oracle Open Office Math : accessibility;Oracle Open Office Math shortcuts
+Oracle Open Office Math : activating
+Oracle Open Office Math : activating;context menus
+Oracle Open Office Math : activating;Error Report Tool
+Oracle Open Office Math : activating;extended help tips
+Oracle Open Office Math : activating;plug-ins
+Oracle Open Office Math : ActiveX control
+Oracle Open Office Math : Adabas D databases (base)
+Oracle Open Office Math : add-ons, see UNO components
+Oracle Open Office Math : addition signs
+Oracle Open Office Math : additional selection mode
+Oracle Open Office Math : address books
+Oracle Open Office Math : address books;LDAP server (Base)
+Oracle Open Office Math : address books;registering
+Oracle Open Office Math : address labels from databases
+Oracle Open Office Math : ADO databases (Base)
+Oracle Open Office Math : Agenda Wizard
+Oracle Open Office Math : aging filter
+Oracle Open Office Math : aligning
+Oracle Open Office Math : aligning;cells
+Oracle Open Office Math : aligning;characters in Oracle Open Office Math
+Oracle Open Office Math : aligning;multi-line formulas
+Oracle Open Office Math : aligning;objects
+Oracle Open Office Math : aligning;paragraphs
+Oracle Open Office Math : aligning;tables in text
+Oracle Open Office Math : aligning;text objects
+Oracle Open Office Math : aligning formulas
+Oracle Open Office Math : alignment
+Oracle Open Office Math : alignment;horizontally centered (Math)
+Oracle Open Office Math : alignment;left (Math)
+Oracle Open Office Math : alignment;right (Math)
+Oracle Open Office Math : alternative fonts
+Oracle Open Office Math : ampersand symbol, see also operators
+Oracle Open Office Math : anchors
+Oracle Open Office Math : anchors;changing
+Oracle Open Office Math : anchors;displaying (Calc)
+Oracle Open Office Math : anchors;types/positions for draw objects
+Oracle Open Office Math : AND operator
+Oracle Open Office Math : animations
+Oracle Open Office Math : animations;accessibility options
+Oracle Open Office Math : appearance options
+Oracle Open Office Math : approximately equal to relation
+Oracle Open Office Math : Arabic
+Oracle Open Office Math : Arabic;entering text
+Oracle Open Office Math : Arabic;language settings
+Oracle Open Office Math : arc cosine function
+Oracle Open Office Math : arc cotangent function
+Oracle Open Office Math : arc sine function
+Oracle Open Office Math : area hyperbolic cosine function
+Oracle Open Office Math : area hyperbolic cotangent function
+Oracle Open Office Math : area hyperbolic tangent function
+Oracle Open Office Math : areas
+Oracle Open Office Math : areas;bitmap patterns
+Oracle Open Office Math : areas;hatched/dotted
+Oracle Open Office Math : areas;shadows
+Oracle Open Office Math : areas;slanting
+Oracle Open Office Math : areas;styles
+Oracle Open Office Math : areas;transparency
+Oracle Open Office Math : arguments in command line
+Oracle Open Office Math : arranging
+Oracle Open Office Math : arranging;matrices
+Oracle Open Office Math : arranging;objects
+Oracle Open Office Math : arrows
+Oracle Open Office Math : arrows;defining arrow heads
+Oracle Open Office Math : arrows;defining arrow lines
+Oracle Open Office Math : arrows;drawing in text
+Oracle Open Office Math : arrows;symbols in Oracle Open Office Math
+Oracle Open Office Math : ASCII
+Oracle Open Office Math : ASCII;definition
+Oracle Open Office Math : Asian languages
+Oracle Open Office Math : Asian languages;enabling
+Oracle Open Office Math : Asian Phonetic Guide
+Oracle Open Office Math : Asian typography
+Oracle Open Office Math : assigning scripts
+Oracle Open Office Math : assistive technology in Oracle Open Office
+Oracle Open Office Math : attaching toolbars
+Oracle Open Office Math : attachments in e-mails
+Oracle Open Office Math : attributes
+Oracle Open Office Math : attributes;accents
+Oracle Open Office Math : attributes;additional information
+Oracle Open Office Math : attributes;changing defaults
+Oracle Open Office Math : attributes;changing fonts
+Oracle Open Office Math : attributes;changing in Oracle Open Office Math
+Oracle Open Office Math : attributes;colored characters
+Oracle Open Office Math : attributes;in Oracle Open Office Math
+Oracle Open Office Math : attributes;list of
+Oracle Open Office Math : audio
+Oracle Open Office Math : auto reloading HTML documents
+Oracle Open Office Math : AutoAbstract function for sending text to presentations
+Oracle Open Office Math : AutoCaption function in Oracle Open Office Writer
+Oracle Open Office Math : AutoComplete function in text and list boxes
+Oracle Open Office Math : AutoCorrect function
+Oracle Open Office Math : AutoCorrect function;context menu
+Oracle Open Office Math : AutoCorrect function;options
+Oracle Open Office Math : AutoCorrect function;pictures and frames
+Oracle Open Office Math : AutoCorrect function;quotes
+Oracle Open Office Math : AutoCorrect function;replacement table
+Oracle Open Office Math : AutoCorrect function;switching on and off in Calc
+Oracle Open Office Math : AutoCorrect function;URL recognition
+Oracle Open Office Math : AutoFormat function
+Oracle Open Office Math : AutoFormat function;switching on and off
+Oracle Open Office Math : automatic captions (Writer)
+Oracle Open Office Math : automatic control focus
+Oracle Open Office Math : automatic hyperlink formatting
+Oracle Open Office Math : automatic line breaks
+Oracle Open Office Math : automatic lines/borders in text
+Oracle Open Office Math : automatic saving
+Oracle Open Office Math : AutoPilots, see wizards
+Oracle Open Office Math : AutoValue (Base)
+Oracle Open Office Math : axes in charts
+Oracle Open Office Math : axis-ellipsis
+Oracle Open Office Math : back epsilon symbol
+Oracle Open Office Math : backgrounds
+Oracle Open Office Math : backgrounds;defining colors/pictures
+Oracle Open Office Math : backgrounds;frames/sections/indexes
+Oracle Open Office Math : backgrounds;inserting from Gallery
+Oracle Open Office Math : backgrounds;printing
+Oracle Open Office Math : backing window
+Oracle Open Office Math : backslash division sign
+Oracle Open Office Math : backups
+Oracle Open Office Math : backups;automatic
+Oracle Open Office Math : backups;documents
+Oracle Open Office Math : Basic
+Oracle Open Office Math : Basic;fonts for source display
+Oracle Open Office Math : Basic;programming
+Oracle Open Office Math : Basic;recording macros
+Oracle Open Office Math : basic fonts
+Oracle Open Office Math : Bézier curves
+Oracle Open Office Math : Bézier curves;control points in presentations
+Oracle Open Office Math : bi-directional writing
+Oracle Open Office Math : binary operators
+Oracle Open Office Math : binary operators
+Oracle Open Office Math : binary operators;list of
+Oracle Open Office Math : binding space
+Oracle Open Office Math : binomials
+Oracle Open Office Math : bitmaps
+Oracle Open Office Math : bitmaps;inserting and editing
+Oracle Open Office Math : bitmaps;off for faster printing
+Oracle Open Office Math : bitmaps;patterns
+Oracle Open Office Math : black and white printing
+Oracle Open Office Math : black printing in Calc
+Oracle Open Office Math : block selection mode
+Oracle Open Office Math : bold
+Oracle Open Office Math : bold;AutoFormat function
+Oracle Open Office Math : bold;text
+Oracle Open Office Math : bold attribute
+Oracle Open Office Math : bookmarks
+Oracle Open Office Math : bookmarks;Help
+Oracle Open Office Math : Boolean operators
+Oracle Open Office Math : borders
+Oracle Open Office Math : borders;arranging
+Oracle Open Office Math : borders;cells on screen (Calc)
+Oracle Open Office Math : borders;for paragraphs
+Oracle Open Office Math : borders;for tables
+Oracle Open Office Math : borders;shadows
+Oracle Open Office Math : borders;table boundaries (Writer)
+Oracle Open Office Math : borders, see also frames
+Oracle Open Office Math : bound fields
+Oracle Open Office Math : bound fields;controls
+Oracle Open Office Math : boundaries of tables (Writer)
+Oracle Open Office Math : braces in Oracle Open Office Math
+Oracle Open Office Math : brackets
+Oracle Open Office Math : brackets;angle (Math)
+Oracle Open Office Math : brackets;angle with operator
+Oracle Open Office Math : brackets;double square (Math)
+Oracle Open Office Math : brackets;group
+Oracle Open Office Math : brackets;in Oracle Open Office Math
+Oracle Open Office Math : brackets;inserting in Oracle Open Office Math
+Oracle Open Office Math : brackets;merging formula parts
+Oracle Open Office Math : brackets;operator (Math)
+Oracle Open Office Math : brackets;reference list
+Oracle Open Office Math : brackets;round (Math)
+Oracle Open Office Math : brackets;scalable
+Oracle Open Office Math : brackets;single, without group function
+Oracle Open Office Math : brackets;square (Math)
+Oracle Open Office Math : brackets;widowed
+Oracle Open Office Math : brackets and grouping in Oracle Open Office Math
+Oracle Open Office Math : break display (Writer)
+Oracle Open Office Math : brochures
+Oracle Open Office Math : brochures;printing several
+Oracle Open Office Math : build numbers of Oracle Open Office
+Oracle Open Office Math : bullet lists
+Oracle Open Office Math : bullet lists;formatting options
+Oracle Open Office Math : bullets
+Oracle Open Office Math : bullets;paragraphs
+Oracle Open Office Math : bullets;replacing
+Oracle Open Office Math : bullets;turning off
+Oracle Open Office Math : business cards
+Oracle Open Office Math : business cards;creating and synchronizing
+Oracle Open Office Math : business cards;using templates
+Oracle Open Office Math : button bars, see toolbars
+Oracle Open Office Math : buttons
+Oracle Open Office Math : buttons;adding push buttons
+Oracle Open Office Math : buttons;big/small
+Oracle Open Office Math : buttons;editing hyperlink buttons
+Oracle Open Office Math : buttons;form functions
+Oracle Open Office Math : buttons;toolbars
+Oracle Open Office Math : cache for graphics
+Oracle Open Office Math : calculating
+Oracle Open Office Math : calculating;iterative references (Calc)
+Oracle Open Office Math : callouts
+Oracle Open Office Math : callouts;drawings
+Oracle Open Office Math : capital letters
+Oracle Open Office Math : capital letters;AutoCorrect function
+Oracle Open Office Math : capital letters;font effects
+Oracle Open Office Math : captions
+Oracle Open Office Math : captions;automatic captions (Writer)
+Oracle Open Office Math : captions;tables/pictures/frames/OLE objects (Writer)
+Oracle Open Office Math : captions, see also labels/callouts
+Oracle Open Office Math : cardinal numbers
+Oracle Open Office Math : cascading update (Base)
+Oracle Open Office Math : case sensitivity
+Oracle Open Office Math : case sensitivity;comparing cell contents (Calc)
+Oracle Open Office Math : case sensitivity;searching
+Oracle Open Office Math : catalog for mathematical symbols
+Oracle Open Office Math : ceiling brackets
+Oracle Open Office Math : ceiling brackets;lines with
+Oracle Open Office Math : ceiling brackets;scalable lines with
+Oracle Open Office Math : cells
+Oracle Open Office Math : cells;aligning
+Oracle Open Office Math : cells;coloring (Calc)
+Oracle Open Office Math : cells;cursor positions after input (Calc)
+Oracle Open Office Math : cells;formatting without effect (Calc)
+Oracle Open Office Math : cells;line breaks
+Oracle Open Office Math : cells;linked to controls
+Oracle Open Office Math : cells;number of
+Oracle Open Office Math : cells;pasting
+Oracle Open Office Math : cells;resetting formats
+Oracle Open Office Math : cells;showing grid lines (Calc)
+Oracle Open Office Math : center dots symbol
+Oracle Open Office Math : centered horizontally
+Oracle Open Office Math : centered horizontally;alignment (Math)
+Oracle Open Office Math : centered text
+Oracle Open Office Math : centimeters
+Oracle Open Office Math : certificates
+Oracle Open Office Math : changes
+Oracle Open Office Math : changes;accepting automatically
+Oracle Open Office Math : changes;accepting or rejecting
+Oracle Open Office Math : changes;comparing to original
+Oracle Open Office Math : changes;protecting
+Oracle Open Office Math : changes;recording
+Oracle Open Office Math : changes;review function
+Oracle Open Office Math : changes;showing
+Oracle Open Office Math : changing
+Oracle Open Office Math : changing;default formatting
+Oracle Open Office Math : changing;document titles
+Oracle Open Office Math : changing;file associations in Setup program
+Oracle Open Office Math : changing;fonts
+Oracle Open Office Math : changing;icon sizes
+Oracle Open Office Math : changing;links
+Oracle Open Office Math : changing;work directory
+Oracle Open Office Math : changing, see also editing and replacing
+Oracle Open Office Math : character styles
+Oracle Open Office Math : character styles;language selection
+Oracle Open Office Math : characters
+Oracle Open Office Math : characters;alternative fonts
+Oracle Open Office Math : characters;Asian layout
+Oracle Open Office Math : characters;bold
+Oracle Open Office Math : characters;coloring
+Oracle Open Office Math : characters;displaying only on screen (Writer)
+Oracle Open Office Math : characters;enabling CTL and Asian characters
+Oracle Open Office Math : characters;font effects
+Oracle Open Office Math : characters;fonts and formats
+Oracle Open Office Math : characters;hyperlinks
+Oracle Open Office Math : characters;italics
+Oracle Open Office Math : characters;language selection
+Oracle Open Office Math : characters;shadowed
+Oracle Open Office Math : characters;spacing
+Oracle Open Office Math : characters;special
+Oracle Open Office Math : characters;underlining
+Oracle Open Office Math : charcoal sketches filter
+Oracle Open Office Math : charts
+Oracle Open Office Math : charts;arranging within stacks
+Oracle Open Office Math : charts;bars with textures
+Oracle Open Office Math : charts;colors
+Oracle Open Office Math : charts;copying with link to source cell range
+Oracle Open Office Math : charts;displaying (Calc)
+Oracle Open Office Math : charts;editing axes
+Oracle Open Office Math : charts;editing data
+Oracle Open Office Math : charts;editing legends
+Oracle Open Office Math : charts;editing titles
+Oracle Open Office Math : charts;inserting
+Oracle Open Office Math : charts;updating automatically (Writer)
+Oracle Open Office Math : check box creation
+Oracle Open Office Math : Chinese writing systems
+Oracle Open Office Math : choosing printers
+Oracle Open Office Math : circle attribute
+Oracle Open Office Math : circle drawings
+Oracle Open Office Math : circumflex attribute
+Oracle Open Office Math : Client Side ImageMap
+Oracle Open Office Math : clipboard
+Oracle Open Office Math : clipboard;cutting
+Oracle Open Office Math : clipboard;pasting
+Oracle Open Office Math : clipboard;pasting formatted/unformatted text
+Oracle Open Office Math : clipboard;selection clipboard
+Oracle Open Office Math : clipboard;Unix
+Oracle Open Office Math : closing
+Oracle Open Office Math : closing;documents
+Oracle Open Office Math : closing;toolbars
+Oracle Open Office Math : collaboration
+Oracle Open Office Math : color bar
+Oracle Open Office Math : colored characters
+Oracle Open Office Math : colors
+Oracle Open Office Math : colors;adding
+Oracle Open Office Math : colors;appearance
+Oracle Open Office Math : colors;backgrounds
+Oracle Open Office Math : colors;charts
+Oracle Open Office Math : colors;fill format
+Oracle Open Office Math : colors;fonts
+Oracle Open Office Math : colors;grid lines and cells (Calc)
+Oracle Open Office Math : colors;in formulas
+Oracle Open Office Math : colors;models
+Oracle Open Office Math : colors;not printing
+Oracle Open Office Math : colors;printing in grayscale
+Oracle Open Office Math : colors;restriction (Calc)
+Oracle Open Office Math : colors;selection
+Oracle Open Office Math : column headers
+Oracle Open Office Math : column headers;displaying (Calc)
+Oracle Open Office Math : column headers;highlighting (Calc)
+Oracle Open Office Math : columns
+Oracle Open Office Math : columns;setting with the mouse
+Oracle Open Office Math : combo box creation
+Oracle Open Office Math : command button creation
+Oracle Open Office Math : command buttons, see push buttons
+Oracle Open Office Math : command line parameters
+Oracle Open Office Math : commands
+Oracle Open Office Math : commands;repeating
+Oracle Open Office Math : commands;SQL
+Oracle Open Office Math : comments
+Oracle Open Office Math : comments;displaying (Calc)
+Oracle Open Office Math : comments;entering in Oracle Open Office Math
+Oracle Open Office Math : comments;inserting/editing/deleting/printing
+Oracle Open Office Math : comments;on changes
+Oracle Open Office Math : comments;printing in text
+Oracle Open Office Math : common terms
+Oracle Open Office Math : common terms;Chinese dictionary
+Oracle Open Office Math : common terms;glossaries
+Oracle Open Office Math : common terms;Internet glossary
+Oracle Open Office Math : comparisons
+Oracle Open Office Math : comparisons;document versions
+Oracle Open Office Math : comparisons;operators in default filter dialog
+Oracle Open Office Math : compatibility settings for MS Word import
+Oracle Open Office Math : complete screen view
+Oracle Open Office Math : complex numbers
+Oracle Open Office Math : complex numbers;set
+Oracle Open Office Math : complex numbers;symbols
+Oracle Open Office Math : complex text layout
+Oracle Open Office Math : complex text layout;definition
+Oracle Open Office Math : complex text layout;enabling
+Oracle Open Office Math : complex text layout, see CTL
+Oracle Open Office Math : compose key to insert special characters
+Oracle Open Office Math : concatenating math symbols
+Oracle Open Office Math : concatenation, see ampersand symbol
+Oracle Open Office Math : conditional separators
+Oracle Open Office Math : conditions
+Oracle Open Office Math : conditions;in number formats
+Oracle Open Office Math : conditions;items in Data Navigator
+Oracle Open Office Math : Configuration Manager
+Oracle Open Office Math : configuring
+Oracle Open Office Math : configuring;fax icon
+Oracle Open Office Math : configuring;Oracle Open Office
+Oracle Open Office Math : configuring;toolbars
+Oracle Open Office Math : congruent relation
+Oracle Open Office Math : connections to data sources (Base)
+Oracle Open Office Math : considerably greater than relation
+Oracle Open Office Math : considerably less than relation
+Oracle Open Office Math : contents protection
+Oracle Open Office Math : context menus
+Oracle Open Office Math : control point display in presentations
+Oracle Open Office Math : controls
+Oracle Open Office Math : controls;activating in forms
+Oracle Open Office Math : controls;adding to documents
+Oracle Open Office Math : controls;arranging in forms
+Oracle Open Office Math : controls;arranging within stacks
+Oracle Open Office Math : controls;assigning data sources
+Oracle Open Office Math : controls;assigning macros (Basic)
+Oracle Open Office Math : controls;bound fields/list contents/linked cells
+Oracle Open Office Math : controls;events
+Oracle Open Office Math : controls;focus
+Oracle Open Office Math : controls;formatted fields
+Oracle Open Office Math : controls;grouping
+Oracle Open Office Math : controls;hidden
+Oracle Open Office Math : controls;inserting
+Oracle Open Office Math : controls;multi-line titles
+Oracle Open Office Math : controls;positions and sizes
+Oracle Open Office Math : controls;printing
+Oracle Open Office Math : controls;properties of form controls
+Oracle Open Office Math : controls;properties of table controls
+Oracle Open Office Math : controls;reference by SQL
+Oracle Open Office Math : controls;rich text control
+Oracle Open Office Math : controls;select mode
+Oracle Open Office Math : controls;showing (Writer)
+Oracle Open Office Math : converters
+Oracle Open Office Math : converters;Euro converter
+Oracle Open Office Math : converters;PostScript, UNIX
+Oracle Open Office Math : converters;XML
+Oracle Open Office Math : converting
+Oracle Open Office Math : converting;Hangul/Hanja
+Oracle Open Office Math : converting;metrics
+Oracle Open Office Math : converting;Microsoft documents
+Oracle Open Office Math : converting;Oracle Open Office documents
+Oracle Open Office Math : converting;Pocket PC formats
+Oracle Open Office Math : copies
+Oracle Open Office Math : copies;printing
+Oracle Open Office Math : coproduct
+Oracle Open Office Math : copying
+Oracle Open Office Math : copying;by drag and drop
+Oracle Open Office Math : copying;data from text documents
+Oracle Open Office Math : copying;datasource records in spreadsheets
+Oracle Open Office Math : copying;draw objects
+Oracle Open Office Math : copying;draw objects between documents
+Oracle Open Office Math : copying;formatting
+Oracle Open Office Math : copying;from data source view
+Oracle Open Office Math : copying;from Gallery
+Oracle Open Office Math : copying;in Unix
+Oracle Open Office Math : copying;pictures, between documents
+Oracle Open Office Math : copying;sheet areas, to text documents
+Oracle Open Office Math : copying;to Gallery
+Oracle Open Office Math : copyright for Oracle Open Office
+Oracle Open Office Math : corner roundings
+Oracle Open Office Math : correspondence
+Oracle Open Office Math : correspondence;original by
+Oracle Open Office Math : correspondence;picture by
+Oracle Open Office Math : cosine function
+Oracle Open Office Math : cotangent function
+Oracle Open Office Math : crash reports
+Oracle Open Office Math : criteria of query design (Base)
+Oracle Open Office Math : cropping pictures
+Oracle Open Office Math : CTL
+Oracle Open Office Math : CTL;(not) wrapping words
+Oracle Open Office Math : CTL;complex text layout languages
+Oracle Open Office Math : CTL;definition
+Oracle Open Office Math : CTL;options
+Oracle Open Office Math : currencies
+Oracle Open Office Math : currencies;converters
+Oracle Open Office Math : currencies;format codes
+Oracle Open Office Math : currency field creation
+Oracle Open Office Math : currency formats
+Oracle Open Office Math : cursor
+Oracle Open Office Math : cursor;allowing in protected areas (Writer)
+Oracle Open Office Math : cursor;in Oracle Open Office Math
+Oracle Open Office Math : cursor;in read-only text
+Oracle Open Office Math : cursor;quickly moving to an object
+Oracle Open Office Math : curve integrals
+Oracle Open Office Math : curves
+Oracle Open Office Math : curves;editing points
+Oracle Open Office Math : custom dictionaries
+Oracle Open Office Math : custom dictionaries;editing
+Oracle Open Office Math : custom hyphens (Writer)
+Oracle Open Office Math : custom quotes
+Oracle Open Office Math : custom templates
+Oracle Open Office Math : customizing
+Oracle Open Office Math : customizing;events
+Oracle Open Office Math : customizing;keyboard
+Oracle Open Office Math : customizing;menus
+Oracle Open Office Math : customizing;Oracle Open Office
+Oracle Open Office Math : customizing;round corners
+Oracle Open Office Math : customizing;toolbars
+Oracle Open Office Math : cutting
+Oracle Open Office Math : dashes
+Oracle Open Office Math : data
+Oracle Open Office Math : data;filtering in forms
+Oracle Open Office Math : data;forms and subforms
+Oracle Open Office Math : data;read-only
+Oracle Open Office Math : data;sorting in forms
+Oracle Open Office Math : data;user data
+Oracle Open Office Math : data binding change in XForms
+Oracle Open Office Math : Data Navigator
+Oracle Open Office Math : Data Navigator;adding/editing items
+Oracle Open Office Math : Data Navigator;display options
+Oracle Open Office Math : data source browser
+Oracle Open Office Math : data source explorer
+Oracle Open Office Math : data source view
+Oracle Open Office Math : data source view;drag and drop
+Oracle Open Office Math : data source view;overview
+Oracle Open Office Math : data source view;showing
+Oracle Open Office Math : data sources
+Oracle Open Office Math : data sources;as tables
+Oracle Open Office Math : data sources;connection settings (Base)
+Oracle Open Office Math : data sources;copying records to spreadsheets
+Oracle Open Office Math : data sources;displaying current
+Oracle Open Office Math : data sources;LDAP server (Base)
+Oracle Open Office Math : data sources;Oracle Open Office Base
+Oracle Open Office Math : data sources;registering address books
+Oracle Open Office Math : data sources;reports
+Oracle Open Office Math : data sources;viewing
+Oracle Open Office Math : data structure of XForms
+Oracle Open Office Math : data, see also values
+Oracle Open Office Math : database contents
+Oracle Open Office Math : database contents;inserting as tables
+Oracle Open Office Math : database contents;inserting as text
+Oracle Open Office Math : database reports
+Oracle Open Office Math : Database Wizard (Base)
+Oracle Open Office Math : databases
+Oracle Open Office Math : databases;administration through SQL (Base)
+Oracle Open Office Math : databases;ADO (Base)
+Oracle Open Office Math : databases;connecting (Base)
+Oracle Open Office Math : databases;creating
+Oracle Open Office Math : databases;creating labels
+Oracle Open Office Math : databases;creating queries
+Oracle Open Office Math : databases;creating reports
+Oracle Open Office Math : databases;creating tables
+Oracle Open Office Math : databases;deleting (Base)
+Oracle Open Office Math : databases;drag and drop (Base)
+Oracle Open Office Math : databases;editing tables
+Oracle Open Office Math : databases;form filters
+Oracle Open Office Math : databases;formats (Base)
+Oracle Open Office Math : databases;importing/exporting
+Oracle Open Office Math : databases;JDBC (Base)
+Oracle Open Office Math : databases;main page (Base)
+Oracle Open Office Math : databases;ODBC (Base)
+Oracle Open Office Math : databases;overview
+Oracle Open Office Math : databases;registering (Base)
+Oracle Open Office Math : databases;searching records
+Oracle Open Office Math : databases;shortcut keys
+Oracle Open Office Math : databases;sorting
+Oracle Open Office Math : databases;standard filters
+Oracle Open Office Math : databases;text formats
+Oracle Open Office Math : databases;viewing
+Oracle Open Office Math : date fields
+Oracle Open Office Math : date fields;creating
+Oracle Open Office Math : date fields;properties
+Oracle Open Office Math : date formats
+Oracle Open Office Math : dates
+Oracle Open Office Math : dates;default (Calc)
+Oracle Open Office Math : dates;printing in presentations
+Oracle Open Office Math : dates;start 1900/01/01 (Calc)
+Oracle Open Office Math : dates;start 1904/01/01 (Calc)
+Oracle Open Office Math : dBASE
+Oracle Open Office Math : dBASE;database settings (Base)
+Oracle Open Office Math : DDE
+Oracle Open Office Math : DDE;definition
+Oracle Open Office Math : deactivating
+Oracle Open Office Math : deactivating;plug-ins
+Oracle Open Office Math : decimal places displayed (Calc)
+Oracle Open Office Math : decimal separator key
+Oracle Open Office Math : decimal tab stops
+Oracle Open Office Math : default directories
+Oracle Open Office Math : default filters
+Oracle Open Office Math : default filters;comparison operators
+Oracle Open Office Math : default filters;databases
+Oracle Open Office Math : default printer
+Oracle Open Office Math : default printer;setting up
+Oracle Open Office Math : default printer;UNIX
+Oracle Open Office Math : default templates
+Oracle Open Office Math : default templates;changing
+Oracle Open Office Math : default templates;organizing
+Oracle Open Office Math : defaults
+Oracle Open Office Math : defaults;changing default formatting
+Oracle Open Office Math : defaults;documents
+Oracle Open Office Math : defaults;file formats in file dialogs
+Oracle Open Office Math : defaults;file formats in Oracle Open Office
+Oracle Open Office Math : defaults;fonts
+Oracle Open Office Math : defaults;grids (Writer/Calc)
+Oracle Open Office Math : defaults;languages
+Oracle Open Office Math : defaults;number formats
+Oracle Open Office Math : defaults;of saving
+Oracle Open Office Math : defaults;program configuration
+Oracle Open Office Math : defaults;tab stops in text
+Oracle Open Office Math : defaults;views
+Oracle Open Office Math : defined as relation
+Oracle Open Office Math : defining
+Oracle Open Office Math : defining;arrowheads and other line ends
+Oracle Open Office Math : defining;colors
+Oracle Open Office Math : defining;formula fonts
+Oracle Open Office Math : defining;line styles
+Oracle Open Office Math : defining;paragraph borders
+Oracle Open Office Math : defining;queries (Base)
+Oracle Open Office Math : defining;table borders
+Oracle Open Office Math : deleting
+Oracle Open Office Math : deleting;all direct formatting
+Oracle Open Office Math : deleting;comments
+Oracle Open Office Math : deleting;databases (Base)
+Oracle Open Office Math : deleting;hyperlinks
+Oracle Open Office Math : deleting;lines in text
+Oracle Open Office Math : deleting;models/instances
+Oracle Open Office Math : deleting;namespaces in XForms
+Oracle Open Office Math : deleting;tab stops
+Oracle Open Office Math : deleting;templates
+Oracle Open Office Math : deleting;XML filters
+Oracle Open Office Math : depth stagger
+Oracle Open Office Math : descriptions for objects
+Oracle Open Office Math : design mode after saving
+Oracle Open Office Math : design view
+Oracle Open Office Math : design view;creating forms
+Oracle Open Office Math : design view;queries/views (Base)
+Oracle Open Office Math : designing
+Oracle Open Office Math : designing;database tables
+Oracle Open Office Math : designing;fonts
+Oracle Open Office Math : designing;queries (Base)
+Oracle Open Office Math : detaching toolbars
+Oracle Open Office Math : diagonal downward dots
+Oracle Open Office Math : diagonal downward dots;symbol
+Oracle Open Office Math : diagonal upward dots
+Oracle Open Office Math : diagonal upward dots;symbol
+Oracle Open Office Math : dictionaries
+Oracle Open Office Math : dictionaries;common terms in simplified and traditional chinese
+Oracle Open Office Math : dictionaries;creating
+Oracle Open Office Math : dictionaries;editing user-defined
+Oracle Open Office Math : dictionaries;spellcheck
+Oracle Open Office Math : dictionaries, see also languages
+Oracle Open Office Math : difference set operator
+Oracle Open Office Math : digital signatures
+Oracle Open Office Math : digital signatures;getting/managing/applying
+Oracle Open Office Math : digital signatures;overview
+Oracle Open Office Math : digital signatures;WebDAV over HTTPS
+Oracle Open Office Math : direct formatting
+Oracle Open Office Math : direct formatting;undoing all
+Oracle Open Office Math : direct text
+Oracle Open Office Math : direct text;entering in Oracle Open Office Math
+Oracle Open Office Math : directories
+Oracle Open Office Math : directories;creating new
+Oracle Open Office Math : directories;directory structure
+Oracle Open Office Math : disabled persons
+Oracle Open Office Math : displaying
+Oracle Open Office Math : displaying;comments (Calc)
+Oracle Open Office Math : displaying;comments in text documents
+Oracle Open Office Math : displaying;non-printing characters (Writer)
+Oracle Open Office Math : displaying;pictures and objects (Writer)
+Oracle Open Office Math : displaying;tables (Writer)
+Oracle Open Office Math : displaying;zero values (Calc)
+Oracle Open Office Math : distances
+Oracle Open Office Math : distances between brackets
+Oracle Open Office Math : distinct values in SQL queries
+Oracle Open Office Math : distorting in drawings
+Oracle Open Office Math : distributing XML filters
+Oracle Open Office Math : divides relation
+Oracle Open Office Math : division signs
+Oracle Open Office Math : docking
+Oracle Open Office Math : docking;definition
+Oracle Open Office Math : docking;toolbars
+Oracle Open Office Math : docking;windows
+Oracle Open Office Math : Document Converter Wizard
+Oracle Open Office Math : Document Map, see Navigator
+Oracle Open Office Math : document types in Oracle Open Office
+Oracle Open Office Math : documents
+Oracle Open Office Math : documents;changing titles
+Oracle Open Office Math : documents;closing
+Oracle Open Office Math : documents;comparing
+Oracle Open Office Math : documents;contents as lists
+Oracle Open Office Math : documents;editing time
+Oracle Open Office Math : documents;exporting
+Oracle Open Office Math : documents;importing
+Oracle Open Office Math : documents;languages
+Oracle Open Office Math : documents;measurement units in
+Oracle Open Office Math : documents;merging
+Oracle Open Office Math : documents;number of pages/tables/sheets
+Oracle Open Office Math : documents;opening
+Oracle Open Office Math : documents;opening in design mode
+Oracle Open Office Math : documents;opening with templates
+Oracle Open Office Math : documents;organizing
+Oracle Open Office Math : documents;printing
+Oracle Open Office Math : documents;read-only
+Oracle Open Office Math : documents;reloading
+Oracle Open Office Math : documents;saving
+Oracle Open Office Math : documents;saving automatically
+Oracle Open Office Math : documents;saving in other formats
+Oracle Open Office Math : documents;sending as e-mail
+Oracle Open Office Math : documents;styles changed
+Oracle Open Office Math : documents;version management
+Oracle Open Office Math : documents;version numbers
+Oracle Open Office Math : does not divide relation
+Oracle Open Office Math : dot attribute
+Oracle Open Office Math : dotted areas
+Oracle Open Office Math : double arrow symbols
+Oracle Open Office Math : double dot attribute
+Oracle Open Office Math : double square brackets
+Oracle Open Office Math : double square brackets;scalable
+Oracle Open Office Math : double-line spacing in paragraphs
+Oracle Open Office Math : double-line writing in Asian layout
+Oracle Open Office Math : down arrow symbol
+Oracle Open Office Math : drag and drop
+Oracle Open Office Math : drag and drop;copying and pasting text
+Oracle Open Office Math : drag and drop;data source view
+Oracle Open Office Math : drag and drop;from Gallery to draw objects
+Oracle Open Office Math : drag and drop;overview
+Oracle Open Office Math : drag and drop;pictures
+Oracle Open Office Math : drag and drop;to Gallery
+Oracle Open Office Math : draw objects
+Oracle Open Office Math : draw objects;adding/editing/copying
+Oracle Open Office Math : draw objects;anchoring
+Oracle Open Office Math : draw objects;arranging within stacks
+Oracle Open Office Math : draw objects;copying between documents
+Oracle Open Office Math : draw objects;displaying (Calc)
+Oracle Open Office Math : draw objects;dropping Gallery pictures
+Oracle Open Office Math : draw objects;flipping
+Oracle Open Office Math : draw objects;legends
+Oracle Open Office Math : draw objects;positioning and resizing
+Oracle Open Office Math : draw objects;protecting
+Oracle Open Office Math : draw objects;slanting
+Oracle Open Office Math : draw objects;text in
+Oracle Open Office Math : Drawing bar
+Oracle Open Office Math : drawing lines in text
+Oracle Open Office Math : drawings
+Oracle Open Office Math : drawings;creating/opening
+Oracle Open Office Math : drawings;languages
+Oracle Open Office Math : drawings;printing
+Oracle Open Office Math : drawings;printing defaults
+Oracle Open Office Math : drawings;printing in text documents
+Oracle Open Office Math : drawings;saving
+Oracle Open Office Math : drawings;saving automatically
+Oracle Open Office Math : drawings;saving in other formats
+Oracle Open Office Math : drawings;sending as e-mail
+Oracle Open Office Math : drawings;showing (Writer)
+Oracle Open Office Math : drawings, see also draw objects
+Oracle Open Office Math : drop-down lists in form functions
+Oracle Open Office Math : e-mail attachments
+Oracle Open Office Math : Edit File icon
+Oracle Open Office Math : edit mode
+Oracle Open Office Math : edit mode;after opening
+Oracle Open Office Math : edit mode;through Enter key (Calc)
+Oracle Open Office Math : Edit Points bar
+Oracle Open Office Math : editing
+Oracle Open Office Math : editing;chart axes
+Oracle Open Office Math : editing;chart data
+Oracle Open Office Math : editing;chart legends
+Oracle Open Office Math : editing;chart titles
+Oracle Open Office Math : editing;comments
+Oracle Open Office Math : editing;data binding of XForms
+Oracle Open Office Math : editing;database tables and queries
+Oracle Open Office Math : editing;draw objects
+Oracle Open Office Math : editing;Fontwork objects
+Oracle Open Office Math : editing;hyperlinks
+Oracle Open Office Math : editing;menus
+Oracle Open Office Math : editing;objects
+Oracle Open Office Math : editing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Math : editing;pictures
+Oracle Open Office Math : editing;reports
+Oracle Open Office Math : editing;shortcut keys
+Oracle Open Office Math : editing;tab stops
+Oracle Open Office Math : editing;templates
+Oracle Open Office Math : editing;toolbars
+Oracle Open Office Math : editing;undoing
+Oracle Open Office Math : editing;XForms
+Oracle Open Office Math : editing time of documents
+Oracle Open Office Math : editors
+Oracle Open Office Math : editors;formula editor
+Oracle Open Office Math : editors;ImageMap editor
+Oracle Open Office Math : effects
+Oracle Open Office Math : effects;font positions
+Oracle Open Office Math : effects;fonts
+Oracle Open Office Math : effects;Fontwork icons
+Oracle Open Office Math : ellipsis symbols
+Oracle Open Office Math : empty documents
+Oracle Open Office Math : empty paragraph removal
+Oracle Open Office Math : empty set
+Oracle Open Office Math : encryption of contents
+Oracle Open Office Math : entering groups
+Oracle Open Office Math : entering text from right to left
+Oracle Open Office Math : epsilon
+Oracle Open Office Math : epsilon;back
+Oracle Open Office Math : equal sign
+Oracle Open Office Math : equal sign, see also operators
+Oracle Open Office Math : Equation Editor, see Oracle Open Office Math
+Oracle Open Office Math : equations in formula editor
+Oracle Open Office Math : Error Report Tool
+Oracle Open Office Math : error search
+Oracle Open Office Math : error search;next error
+Oracle Open Office Math : error search;previous error
+Oracle Open Office Math : Euro
+Oracle Open Office Math : Euro;currency formats
+Oracle Open Office Math : Euro;Euro Converter Wizard
+Oracle Open Office Math : even/odd pages
+Oracle Open Office Math : even/odd pages;printing
+Oracle Open Office Math : events
+Oracle Open Office Math : events;assigning scripts
+Oracle Open Office Math : events;controls
+Oracle Open Office Math : events;customizing
+Oracle Open Office Math : events;in forms
+Oracle Open Office Math : examples
+Oracle Open Office Math : examples;integral
+Oracle Open Office Math : examples;Oracle Open Office Math formulas
+Oracle Open Office Math : Excel
+Oracle Open Office Math : Excel;saving as
+Oracle Open Office Math : Excel;search criteria
+Oracle Open Office Math : exceptions
+Oracle Open Office Math : exceptions;user-defined dictionaries
+Oracle Open Office Math : exchanging, see also replacing
+Oracle Open Office Math : executing SQL commands
+Oracle Open Office Math : existence quantor symbol
+Oracle Open Office Math : exiting
+Oracle Open Office Math : exiting;groups
+Oracle Open Office Math : exiting;Oracle Open Office
+Oracle Open Office Math : expanding formatting (Calc)
+Oracle Open Office Math : explorer of data sources
+Oracle Open Office Math : exponential functions
+Oracle Open Office Math : exponents
+Oracle Open Office Math : exponents;variables with right
+Oracle Open Office Math : exponents and indexes in Oracle Open Office Math
+Oracle Open Office Math : export filters
+Oracle Open Office Math : exporting
+Oracle Open Office Math : exporting;bitmaps
+Oracle Open Office Math : exporting;HTML and text documents
+Oracle Open Office Math : exporting;Microsoft Office documents with VBA code
+Oracle Open Office Math : exporting;spreadsheets to text format
+Oracle Open Office Math : exporting;templates
+Oracle Open Office Math : exporting;to foreign formats
+Oracle Open Office Math : exporting;to HTML
+Oracle Open Office Math : exporting;to Microsoft Office formats
+Oracle Open Office Math : exporting;to PDF
+Oracle Open Office Math : exporting;to PostScript format
+Oracle Open Office Math : exporting;to XML
+Oracle Open Office Math : exporting;XML files
+Oracle Open Office Math : extended tips in Help
+Oracle Open Office Math : extension mode in text
+Oracle Open Office Math : extensions
+Oracle Open Office Math : extensions;Extension Manager
+Oracle Open Office Math : extensions;file formats
+Oracle Open Office Math : external keys (Base)
+Oracle Open Office Math : factorial
+Oracle Open Office Math : faster printing
+Oracle Open Office Math : faxes
+Oracle Open Office Math : faxes;configuring Oracle Open Office
+Oracle Open Office Math : faxes;fax programs/fax printers under UNIX
+Oracle Open Office Math : faxes;selecting a fax machine
+Oracle Open Office Math : faxes;sending
+Oracle Open Office Math : faxes;wizards
+Oracle Open Office Math : feedback
+Oracle Open Office Math : feedback;automatically
+Oracle Open Office Math : fields
+Oracle Open Office Math : fields;database tables
+Oracle Open Office Math : fields;displaying field codes (Writer)
+Oracle Open Office Math : fields;formatted fields
+Oracle Open Office Math : fields;updating automatically (Writer)
+Oracle Open Office Math : file associations for Microsoft Office
+Oracle Open Office Math : file filters
+Oracle Open Office Math : file filters;mobile devices
+Oracle Open Office Math : file filters;XML
+Oracle Open Office Math : file formats
+Oracle Open Office Math : file formats;changing Oracle Open Office defaults
+Oracle Open Office Math : file formats;OpenDocument/XML
+Oracle Open Office Math : file formats;saving always in other formats
+Oracle Open Office Math : file selection button
+Oracle Open Office Math : file sharing options for current document
+Oracle Open Office Math : files
+Oracle Open Office Math : files;filters and formats
+Oracle Open Office Math : files;importing
+Oracle Open Office Math : files;opening
+Oracle Open Office Math : files;properties
+Oracle Open Office Math : files;saving
+Oracle Open Office Math : files;saving automatically
+Oracle Open Office Math : files;saving in other formats
+Oracle Open Office Math : files;sending as e-mail
+Oracle Open Office Math : files;version numbers
+Oracle Open Office Math : files and folders in Oracle Open Office
+Oracle Open Office Math : fill characters with tabulators
+Oracle Open Office Math : fill colors for areas
+Oracle Open Office Math : fill patterns for areas
+Oracle Open Office Math : filter conditions
+Oracle Open Office Math : filter conditions;connecting
+Oracle Open Office Math : filter conditions;in queries (Base)
+Oracle Open Office Math : filtering
+Oracle Open Office Math : filtering;data in databases
+Oracle Open Office Math : filtering;data in forms
+Oracle Open Office Math : filters
+Oracle Open Office Math : filters;comparison operators
+Oracle Open Office Math : filters;for import and export
+Oracle Open Office Math : filters;Navigator
+Oracle Open Office Math : filters;pictures
+Oracle Open Office Math : filters;XML filter settings
+Oracle Open Office Math : Find tab in Help
+Oracle Open Office Math : finding
+Oracle Open Office Math : finding;errors in Oracle Open Office Math
+Oracle Open Office Math : finding;in all sheets
+Oracle Open Office Math : finding;records in form documents
+Oracle Open Office Math : finding;selections
+Oracle Open Office Math : finding;similarity search
+Oracle Open Office Math : fitting to pages
+Oracle Open Office Math : fitting to pages;print settings in Math
+Oracle Open Office Math : fitting to pages;print settings in presentations
+Oracle Open Office Math : fixed text
+Oracle Open Office Math : fixed text;form functions
+Oracle Open Office Math : fixing toolbars
+Oracle Open Office Math : flipping draw objects
+Oracle Open Office Math : floating frames in HTML documents
+Oracle Open Office Math : floating toolbars
+Oracle Open Office Math : floor brackets
+Oracle Open Office Math : focus of controls
+Oracle Open Office Math : folder creation
+Oracle Open Office Math : font attributes
+Oracle Open Office Math : font attributes;changing defaults
+Oracle Open Office Math : font lists
+Oracle Open Office Math : font name box
+Oracle Open Office Math : font sizes
+Oracle Open Office Math : font sizes;bullets
+Oracle Open Office Math : font sizes;example
+Oracle Open Office Math : font sizes;in Oracle Open Office Math
+Oracle Open Office Math : font sizes;relative changes
+Oracle Open Office Math : font sizes;scaling on screen
+Oracle Open Office Math : font sizes;text
+Oracle Open Office Math : fonts
+Oracle Open Office Math : fonts;adding under UNIX
+Oracle Open Office Math : fonts;changing in templates
+Oracle Open Office Math : fonts;colors
+Oracle Open Office Math : fonts;default settings
+Oracle Open Office Math : fonts;effects
+Oracle Open Office Math : fonts;for HTML and Basic
+Oracle Open Office Math : fonts;formats
+Oracle Open Office Math : fonts;in Oracle Open Office Math
+Oracle Open Office Math : fonts;outlines
+Oracle Open Office Math : fonts;positions in text
+Oracle Open Office Math : fonts;shadows
+Oracle Open Office Math : fonts;specifying several
+Oracle Open Office Math : fonts;strikethrough
+Oracle Open Office Math : fonts;styles
+Oracle Open Office Math : fonts;text objects
+Oracle Open Office Math : Fontwork icons
+Oracle Open Office Math : footers
+Oracle Open Office Math : footers;backgrounds
+Oracle Open Office Math : for all symbol
+Oracle Open Office Math : form controls
+Oracle Open Office Math : form controls;assigning macros
+Oracle Open Office Math : form controls;protecting
+Oracle Open Office Math : form controls;toolbars
+Oracle Open Office Math : form fields
+Oracle Open Office Math : form filters
+Oracle Open Office Math : Form Navigator
+Oracle Open Office Math : format codes
+Oracle Open Office Math : format codes;numbers
+Oracle Open Office Math : format filling printing in Oracle Open Office Math
+Oracle Open Office Math : Format Paintbrush
+Oracle Open Office Math : formats
+Oracle Open Office Math : formats;Asian layout
+Oracle Open Office Math : formats;fonts
+Oracle Open Office Math : formats;maximizing page formats
+Oracle Open Office Math : formats;number and currency formats
+Oracle Open Office Math : formats;of currencies/date/time
+Oracle Open Office Math : formats;on opening and saving
+Oracle Open Office Math : formats;pasting in special formats
+Oracle Open Office Math : formats;positions
+Oracle Open Office Math : formats;tabulators
+Oracle Open Office Math : formatted fields
+Oracle Open Office Math : formatted fields;form functions
+Oracle Open Office Math : formatted fields;properties
+Oracle Open Office Math : formatting
+Oracle Open Office Math : formatting;Asian typography
+Oracle Open Office Math : formatting;axes in charts
+Oracle Open Office Math : formatting;changing default attributes
+Oracle Open Office Math : formatting;chart legends
+Oracle Open Office Math : formatting;copying
+Oracle Open Office Math : formatting;definition
+Oracle Open Office Math : formatting;expanding (Calc)
+Oracle Open Office Math : formatting;font effects
+Oracle Open Office Math : formatting;hyperlinks
+Oracle Open Office Math : formatting;in Oracle Open Office Math
+Oracle Open Office Math : formatting;pages
+Oracle Open Office Math : formatting;printer metrics (Writer)
+Oracle Open Office Math : formatting;reference list (Math)
+Oracle Open Office Math : formatting;undoing
+Oracle Open Office Math : formatting;undoing when writing
+Oracle Open Office Math : forms
+Oracle Open Office Math : forms;browsing
+Oracle Open Office Math : forms;Combo Box/List Box Wizard
+Oracle Open Office Math : forms;creating
+Oracle Open Office Math : forms;data
+Oracle Open Office Math : forms;designing (Base)
+Oracle Open Office Math : forms;events
+Oracle Open Office Math : forms;filtering data
+Oracle Open Office Math : forms;finding records
+Oracle Open Office Math : forms;focus after opening
+Oracle Open Office Math : forms;general information (Base)
+Oracle Open Office Math : forms;grouping controls
+Oracle Open Office Math : forms;HTML filters
+Oracle Open Office Math : forms;Navigator
+Oracle Open Office Math : forms;opening in design mode
+Oracle Open Office Math : forms;properties
+Oracle Open Office Math : forms;sorting data
+Oracle Open Office Math : forms;subforms
+Oracle Open Office Math : forms;wizards
+Oracle Open Office Math : forms;XForms
+Oracle Open Office Math : formula cursor in Oracle Open Office Math
+Oracle Open Office Math : formula display sizes
+Oracle Open Office Math : formula fonts
+Oracle Open Office Math : formula fonts;defining
+Oracle Open Office Math : formula parts
+Oracle Open Office Math : formula parts;manually aligning
+Oracle Open Office Math : formula parts;merging
+Oracle Open Office Math : formula texts
+Oracle Open Office Math : formula texts;printing in Oracle Open Office Math
+Oracle Open Office Math : formula view
+Oracle Open Office Math : formula view;refreshing
+Oracle Open Office Math : formulas
+Oracle Open Office Math : formulas;aligning
+Oracle Open Office Math : formulas;attributes in
+Oracle Open Office Math : formulas;element spacing
+Oracle Open Office Math : formulas;entering symbols in
+Oracle Open Office Math : formulas;examples
+Oracle Open Office Math : formulas;fit to text
+Oracle Open Office Math : formulas;in color
+Oracle Open Office Math : formulas;increasing size of display
+Oracle Open Office Math : formulas;line breaks
+Oracle Open Office Math : formulas;maximum size
+Oracle Open Office Math : formulas;new
+Oracle Open Office Math : formulas;reference tables
+Oracle Open Office Math : formulas;selections
+Oracle Open Office Math : formulas;starting formula editor
+Oracle Open Office Math : formulas;zooming out
+Oracle Open Office Math : formulas in reports
+Oracle Open Office Math : formulas in reports;editing
+Oracle Open Office Math : forums and support
+Oracle Open Office Math : fractions in formulas
+Oracle Open Office Math : frames
+Oracle Open Office Math : frames;around paragraphs
+Oracle Open Office Math : frames;around tables
+Oracle Open Office Math : frames;AutoCorrect function
+Oracle Open Office Math : frames;backgrounds
+Oracle Open Office Math : frames;captions (Writer)
+Oracle Open Office Math : frames;printing in Oracle Open Office Math
+Oracle Open Office Math : frames;protecting
+Oracle Open Office Math : frames;selection frames
+Oracle Open Office Math : frames;text fitting to frames
+Oracle Open Office Math : freeform lines
+Oracle Open Office Math : freeform lines;draw functions
+Oracle Open Office Math : FTP
+Oracle Open Office Math : FTP;opening documents
+Oracle Open Office Math : FTP;saving documents
+Oracle Open Office Math : full joins (Base)
+Oracle Open Office Math : full screen view
+Oracle Open Office Math : full-text search in Help
+Oracle Open Office Math : functions
+Oracle Open Office Math : functions;in Oracle Open Office Math
+Oracle Open Office Math : functions in reports
+Oracle Open Office Math : functions in reports;editing
+Oracle Open Office Math : functions operators
+Oracle Open Office Math : functions operators;list of
+Oracle Open Office Math : Gallery
+Oracle Open Office Math : Gallery;adding pictures
+Oracle Open Office Math : Gallery;dragging pictures to draw objects
+Oracle Open Office Math : Gallery;hiding/showing
+Oracle Open Office Math : Gallery;inserting pictures from
+Oracle Open Office Math : gaps in formulas
+Oracle Open Office Math : get method for form transmissions
+Oracle Open Office Math : getting support
+Oracle Open Office Math : GIF format
+Oracle Open Office Math : glossaries
+Oracle Open Office Math : glossaries;common terms
+Oracle Open Office Math : glossaries;Internet terms
+Oracle Open Office Math : gradients off for faster printing
+Oracle Open Office Math : graphic objects, see draw objects
+Oracle Open Office Math : graphical text art
+Oracle Open Office Math : graphics
+Oracle Open Office Math : graphics;cache
+Oracle Open Office Math : graphics;protecting
+Oracle Open Office Math : graphics, see also pictures
+Oracle Open Office Math : grayscale printing
+Oracle Open Office Math : greater than or equal to signs
+Oracle Open Office Math : greater than relations
+Oracle Open Office Math : Greek symbols in formulas
+Oracle Open Office Math : grid controls
+Oracle Open Office Math : grid controls;form functions
+Oracle Open Office Math : grids
+Oracle Open Office Math : grids;defaults (Writer/Calc)
+Oracle Open Office Math : grids;display options (Impress/Draw)
+Oracle Open Office Math : grids;displaying lines (Calc)
+Oracle Open Office Math : group box creation
+Oracle Open Office Math : grouping and brackets in Oracle Open Office Math
+Oracle Open Office Math : grouping brackets
+Oracle Open Office Math : groups
+Oracle Open Office Math : groups;entering/exiting/ungrouping
+Oracle Open Office Math : groups;naming
+Oracle Open Office Math : groups;of controls
+Oracle Open Office Math : guides
+Oracle Open Office Math : guides;display options (Impress/Draw)
+Oracle Open Office Math : guides;displaying when moving objects (Impress)
+Oracle Open Office Math : guides;showing (Calc)
+Oracle Open Office Math : guides;showing when moving frames (Writer)
+Oracle Open Office Math : gutter
+Oracle Open Office Math : h-bar symbol
+Oracle Open Office Math : handles
+Oracle Open Office Math : handles;displaying (Writer)
+Oracle Open Office Math : handles;scaling
+Oracle Open Office Math : handles;showing simple/large handles (Calc)
+Oracle Open Office Math : Hangul/Hanja
+Oracle Open Office Math : hatching
+Oracle Open Office Math : headers
+Oracle Open Office Math : headers;backgrounds
+Oracle Open Office Math : headings
+Oracle Open Office Math : headings;entering as text box
+Oracle Open Office Math : Hebrew
+Oracle Open Office Math : Hebrew;entering text
+Oracle Open Office Math : Hebrew;language settings
+Oracle Open Office Math : Help
+Oracle Open Office Math : Help;bookmarks
+Oracle Open Office Math : Help;extended tips on/off
+Oracle Open Office Math : Help;full-text search
+Oracle Open Office Math : Help;Help tips
+Oracle Open Office Math : Help;keywords
+Oracle Open Office Math : Help;navigation pane showing/hiding
+Oracle Open Office Math : Help;style sheets
+Oracle Open Office Math : Help;topics
+Oracle Open Office Math : Help Agent
+Oracle Open Office Math : Help Agent;help
+Oracle Open Office Math : Help Agent;options
+Oracle Open Office Math : Help tips
+Oracle Open Office Math : Help tips;hiding
+Oracle Open Office Math : hidden controls in Form Navigator
+Oracle Open Office Math : hidden fields display (Writer)
+Oracle Open Office Math : hidden pages
+Oracle Open Office Math : hidden pages;printing in presentations
+Oracle Open Office Math : hidden text
+Oracle Open Office Math : hidden text;showing (Writer)
+Oracle Open Office Math : hiding
+Oracle Open Office Math : hiding;changes
+Oracle Open Office Math : hiding;docked windows
+Oracle Open Office Math : hiding;navigation pane in Help window
+Oracle Open Office Math : high contrast mode
+Oracle Open Office Math : Hindi
+Oracle Open Office Math : Hindi;entering text
+Oracle Open Office Math : Hindi;language settings
+Oracle Open Office Math : horizontal scrollbars (Writer)
+Oracle Open Office Math : hotspots
+Oracle Open Office Math : HTML
+Oracle Open Office Math : HTML;definition
+Oracle Open Office Math : HTML;export character set
+Oracle Open Office Math : HTML;fonts for source display
+Oracle Open Office Math : HTML;importing META tags
+Oracle Open Office Math : HTML;live presentations
+Oracle Open Office Math : HTML documents
+Oracle Open Office Math : HTML documents;auto reloading
+Oracle Open Office Math : HTML documents;importing/exporting
+Oracle Open Office Math : HTML documents;META tags in
+Oracle Open Office Math : HTML documents;new
+Oracle Open Office Math : HTML documents;source text
+Oracle Open Office Math : hyperbolic cosine function
+Oracle Open Office Math : hyperbolic cotangent function
+Oracle Open Office Math : hyperbolic sine function
+Oracle Open Office Math : hyperbolic tangent function
+Oracle Open Office Math : hyperlinks
+Oracle Open Office Math : hyperlinks;assigning macros
+Oracle Open Office Math : hyperlinks;character formats
+Oracle Open Office Math : hyperlinks;definition
+Oracle Open Office Math : hyperlinks;deleting
+Oracle Open Office Math : hyperlinks;editing
+Oracle Open Office Math : hyperlinks;inserting
+Oracle Open Office Math : hyperlinks;relative and absolute
+Oracle Open Office Math : hyperlinks;turning off automatic recognition
+Oracle Open Office Math : hyperlinks, see also links
+Oracle Open Office Math : hyphenation
+Oracle Open Office Math : hyphenation;activating for a language
+Oracle Open Office Math : hyphenation;minimal number of characters
+Oracle Open Office Math : hyphens
+Oracle Open Office Math : hyphens;displaying custom (Writer)
+Oracle Open Office Math : hyphens;inserting custom
+Oracle Open Office Math : icon bars, see toolbars
+Oracle Open Office Math : icon sizes
+Oracle Open Office Math : identical to relation
+Oracle Open Office Math : ignore list for spellcheck
+Oracle Open Office Math : illustrations, see pictures
+Oracle Open Office Math : image button creation
+Oracle Open Office Math : image control creation
+Oracle Open Office Math : image of relation
+Oracle Open Office Math : ImageMap
+Oracle Open Office Math : ImageMap;definition
+Oracle Open Office Math : ImageMap;editor
+Oracle Open Office Math : images
+Oracle Open Office Math : images;ImageMap
+Oracle Open Office Math : images;inserting and editing bitmaps
+Oracle Open Office Math : images, see also pictures
+Oracle Open Office Math : imaginary part of a complex number
+Oracle Open Office Math : IME
+Oracle Open Office Math : IME;definition
+Oracle Open Office Math : IME;showing/hiding
+Oracle Open Office Math : import filters
+Oracle Open Office Math : import restrictions for Microsoft Office
+Oracle Open Office Math : importing
+Oracle Open Office Math : importing;bitmaps
+Oracle Open Office Math : importing;compatibility settings for text import
+Oracle Open Office Math : importing;databases
+Oracle Open Office Math : importing;documents in other formats
+Oracle Open Office Math : importing;from XML
+Oracle Open Office Math : importing;HTML and text documents
+Oracle Open Office Math : importing;HTML with META tags
+Oracle Open Office Math : importing;Microsoft Office documents with VBA code
+Oracle Open Office Math : importing;Oracle Open Office Math formulas
+Oracle Open Office Math : importing;tables in text format
+Oracle Open Office Math : importing;templates
+Oracle Open Office Math : improvement program
+Oracle Open Office Math : inches
+Oracle Open Office Math : included in set operator
+Oracle Open Office Math : includes set operator
+Oracle Open Office Math : Index tab in Help
+Oracle Open Office Math : indexes
+Oracle Open Office Math : indexes;adding to formulas
+Oracle Open Office Math : indexes;backgrounds
+Oracle Open Office Math : indexes;showing/hiding Help index tab
+Oracle Open Office Math : indexes and exponents in Oracle Open Office Math
+Oracle Open Office Math : indicator lines in text
+Oracle Open Office Math : inequation
+Oracle Open Office Math : infinity symbol
+Oracle Open Office Math : inner joins (Base)
+Oracle Open Office Math : input method window
+Oracle Open Office Math : insert mode for entering text
+Oracle Open Office Math : inserting
+Oracle Open Office Math : inserting;brackets
+Oracle Open Office Math : inserting;buttons in toolbars
+Oracle Open Office Math : inserting;cell ranges from spreadsheets
+Oracle Open Office Math : inserting;charts
+Oracle Open Office Math : inserting;clipboard options
+Oracle Open Office Math : inserting;comments
+Oracle Open Office Math : inserting;comments in Oracle Open Office Math
+Oracle Open Office Math : inserting;data from text documents
+Oracle Open Office Math : inserting;datasource records in spreadsheets
+Oracle Open Office Math : inserting;drawings
+Oracle Open Office Math : inserting;floating frames
+Oracle Open Office Math : inserting;Fontwork objects
+Oracle Open Office Math : inserting;form fields
+Oracle Open Office Math : inserting;gaps
+Oracle Open Office Math : inserting;hyperlinks
+Oracle Open Office Math : inserting;line breaks in cells
+Oracle Open Office Math : inserting;movies/sounds
+Oracle Open Office Math : inserting;new text tables defaults
+Oracle Open Office Math : inserting;objects from Gallery
+Oracle Open Office Math : inserting;OLE objects
+Oracle Open Office Math : inserting;paragraph borders
+Oracle Open Office Math : inserting;paragraph bullets
+Oracle Open Office Math : inserting;pictures in Gallery
+Oracle Open Office Math : inserting;plug-ins
+Oracle Open Office Math : inserting;push buttons
+Oracle Open Office Math : inserting;special characters
+Oracle Open Office Math : inserting;tab stops
+Oracle Open Office Math : inserting;text in Oracle Open Office Math
+Oracle Open Office Math : inserting;textures on chart bars
+Oracle Open Office Math : installing
+Oracle Open Office Math : installing;ActiveX control
+Oracle Open Office Math : installing;mobile device filters
+Oracle Open Office Math : installing;UNO components
+Oracle Open Office Math : installing;XML filters
+Oracle Open Office Math : instructions
+Oracle Open Office Math : instructions;general
+Oracle Open Office Math : instructions;Oracle Open Office Math
+Oracle Open Office Math : integral limits
+Oracle Open Office Math : integrals
+Oracle Open Office Math : integrals;example
+Oracle Open Office Math : integrals;signs
+Oracle Open Office Math : Internet
+Oracle Open Office Math : Internet;checking for updates
+Oracle Open Office Math : Internet;Internet Explorer for displaying Oracle Open Office documents
+Oracle Open Office Math : Internet;presentations
+Oracle Open Office Math : Internet;starting searches
+Oracle Open Office Math : Internet glossary
+Oracle Open Office Math : intersection of sets
+Oracle Open Office Math : invert filter
+Oracle Open Office Math : invisible areas
+Oracle Open Office Math : italic attribute in Oracle Open Office Math
+Oracle Open Office Math : italic text
+Oracle Open Office Math : iterative references in spreadsheets
+Oracle Open Office Math : Java
+Oracle Open Office Math : Java;definition
+Oracle Open Office Math : Java;setting options
+Oracle Open Office Math : JDBC
+Oracle Open Office Math : JDBC;databases (Base)
+Oracle Open Office Math : JDBC;definition
+Oracle Open Office Math : joining
+Oracle Open Office Math : joining;paragraphs
+Oracle Open Office Math : joining;tables (Base)
+Oracle Open Office Math : joins in databases (Base)
+Oracle Open Office Math : justifying text
+Oracle Open Office Math : kerning
+Oracle Open Office Math : kerning;Asian texts
+Oracle Open Office Math : kerning;definition
+Oracle Open Office Math : kerning;in characters
+Oracle Open Office Math : key fields for relations (Base)
+Oracle Open Office Math : keyboard
+Oracle Open Office Math : keyboard;assigning/editing shortcut keys
+Oracle Open Office Math : keyboard;general commands
+Oracle Open Office Math : keyboard;removing numbering
+Oracle Open Office Math : keys
+Oracle Open Office Math : keys;adding push buttons
+Oracle Open Office Math : keys;primary keys (Base)
+Oracle Open Office Math : kiosk export
+Oracle Open Office Math : labels
+Oracle Open Office Math : labels;creating and synchronizing
+Oracle Open Office Math : labels;for draw objects
+Oracle Open Office Math : labels;form functions
+Oracle Open Office Math : labels;from databases
+Oracle Open Office Math : labels, see also names/callouts
+Oracle Open Office Math : lambda-bar symbol
+Oracle Open Office Math : languages
+Oracle Open Office Math : languages;activating modules
+Oracle Open Office Math : languages;Asian support
+Oracle Open Office Math : languages;complex text layout
+Oracle Open Office Math : languages;locale settings
+Oracle Open Office Math : languages;selecting for text
+Oracle Open Office Math : languages;setting options
+Oracle Open Office Math : languages;spellcheck
+Oracle Open Office Math : languages;spellchecking and formatting
+Oracle Open Office Math : large handles (Writer)
+Oracle Open Office Math : large icons
+Oracle Open Office Math : layer arrangement
+Oracle Open Office Math : layout
+Oracle Open Office Math : layout;importing Word documents
+Oracle Open Office Math : layout;pages
+Oracle Open Office Math : LDAP server
+Oracle Open Office Math : LDAP server;address books (Base)
+Oracle Open Office Math : LDAP server;sign on options
+Oracle Open Office Math : leading between paragraphs
+Oracle Open Office Math : left alignment of paragraphs
+Oracle Open Office Math : left arrow symbol
+Oracle Open Office Math : left joins (Base)
+Oracle Open Office Math : left-justified alignment (Math)
+Oracle Open Office Math : legends
+Oracle Open Office Math : legends;charts
+Oracle Open Office Math : legends;draw objects
+Oracle Open Office Math : legends;rounding corners
+Oracle Open Office Math : less than or equal to signs
+Oracle Open Office Math : less than relations
+Oracle Open Office Math : Letter Wizard
+Oracle Open Office Math : levels
+Oracle Open Office Math : levels;depth stagger
+Oracle Open Office Math : levels;macro security
+Oracle Open Office Math : limits
+Oracle Open Office Math : limits;in Oracle Open Office Math
+Oracle Open Office Math : limits;in sums/integrals
+Oracle Open Office Math : limits of tables (Writer)
+Oracle Open Office Math : line above attribute
+Oracle Open Office Math : line breaks
+Oracle Open Office Math : line breaks;in cells
+Oracle Open Office Math : line breaks;in formulas
+Oracle Open Office Math : line spacing
+Oracle Open Office Math : line spacing;context menu in paragraphs
+Oracle Open Office Math : line spacing;paragraph
+Oracle Open Office Math : line styles
+Oracle Open Office Math : line styles;applying
+Oracle Open Office Math : line styles;defining
+Oracle Open Office Math : line through attribute
+Oracle Open Office Math : lines
+Oracle Open Office Math : lines;defining ends
+Oracle Open Office Math : lines;draw functions
+Oracle Open Office Math : lines;drawing in text
+Oracle Open Office Math : lines;editing points
+Oracle Open Office Math : lines;inserting in formulas
+Oracle Open Office Math : lines;removing automatic lines
+Oracle Open Office Math : lines;scalable
+Oracle Open Office Math : lines;with edges
+Oracle Open Office Math : lines of text
+Oracle Open Office Math : lines of text;alignment
+Oracle Open Office Math : links
+Oracle Open Office Math : links;between cells and controls
+Oracle Open Office Math : links;by drag and drop
+Oracle Open Office Math : links;character formats
+Oracle Open Office Math : links;definition
+Oracle Open Office Math : links;editing hyperlinks
+Oracle Open Office Math : links;inserting
+Oracle Open Office Math : links;modifying
+Oracle Open Office Math : links;opening files with
+Oracle Open Office Math : links;relational databases (Base)
+Oracle Open Office Math : links;turning off automatic recognition
+Oracle Open Office Math : links;updating options (Writer)
+Oracle Open Office Math : links;updating specific links
+Oracle Open Office Math : list box creation
+Oracle Open Office Math : lists
+Oracle Open Office Math : lists;data assigned to controls
+Oracle Open Office Math : lists;registered databases (Base)
+Oracle Open Office Math : lists;regular expressions
+Oracle Open Office Math : live presentations on the Internet
+Oracle Open Office Math : loading
+Oracle Open Office Math : loading;documents
+Oracle Open Office Math : loading;documents from other formats
+Oracle Open Office Math : loading;HTML documents, automatically
+Oracle Open Office Math : loading;Microsoft Office documents with VBA code
+Oracle Open Office Math : loading;reloading
+Oracle Open Office Math : loading;XML files
+Oracle Open Office Math : locale settings
+Oracle Open Office Math : logarithms
+Oracle Open Office Math : logic symbols
+Oracle Open Office Math : logical operators
+Oracle Open Office Math : lower limits
+Oracle Open Office Math : lowercase letters
+Oracle Open Office Math : lowercase letters;font effects
+Oracle Open Office Math : Macro Wizard (Base)
+Oracle Open Office Math : macros
+Oracle Open Office Math : macros;assigning to events in forms
+Oracle Open Office Math : macros;attaching new (Base)
+Oracle Open Office Math : macros;in MS Office documents
+Oracle Open Office Math : macros;interrupting
+Oracle Open Office Math : macros;organizing
+Oracle Open Office Math : macros;recording
+Oracle Open Office Math : macros;security
+Oracle Open Office Math : macros;security levels
+Oracle Open Office Math : macros;security warning dialog
+Oracle Open Office Math : macros;selecting security warnings
+Oracle Open Office Math : magnifiers
+Oracle Open Office Math : margins
+Oracle Open Office Math : margins;pages
+Oracle Open Office Math : margins;setting with the mouse
+Oracle Open Office Math : margins;shadows
+Oracle Open Office Math : markers
+Oracle Open Office Math : markers;definition
+Oracle Open Office Math : markers;next
+Oracle Open Office Math : markers;previous
+Oracle Open Office Math : marking changes
+Oracle Open Office Math : marking, see selecting
+Oracle Open Office Math : Math formula editor
+Oracle Open Office Math : mathematical symbols
+Oracle Open Office Math : mathematical symbols;catalog
+Oracle Open Office Math : mathematical symbols;other
+Oracle Open Office Math : matrices
+Oracle Open Office Math : matrices;arranging
+Oracle Open Office Math : maximum formula size
+Oracle Open Office Math : measurement units
+Oracle Open Office Math : measurement units;changing on rulers
+Oracle Open Office Math : measurement units;converting
+Oracle Open Office Math : measurement units;selecting
+Oracle Open Office Math : Media Player window
+Oracle Open Office Math : menus
+Oracle Open Office Math : menus;activating context menus
+Oracle Open Office Math : menus;assigning macros
+Oracle Open Office Math : menus;customizing
+Oracle Open Office Math : merging
+Oracle Open Office Math : merging;documents
+Oracle Open Office Math : merging;formula parts
+Oracle Open Office Math : META tags
+Oracle Open Office Math : metrics
+Oracle Open Office Math : metrics;converting
+Oracle Open Office Math : metrics;document formatting (Writer)
+Oracle Open Office Math : metrics;in sheets
+Oracle Open Office Math : Microsoft Office
+Oracle Open Office Math : Microsoft Office;Access databases (base)
+Oracle Open Office Math : Microsoft Office;as default file format
+Oracle Open Office Math : Microsoft Office;document import restrictions
+Oracle Open Office Math : Microsoft Office;feature comparisons
+Oracle Open Office Math : Microsoft Office;importing password protected files
+Oracle Open Office Math : Microsoft Office;importing Word documents
+Oracle Open Office Math : Microsoft Office;importing/exporting VBA code
+Oracle Open Office Math : Microsoft Office;new users information
+Oracle Open Office Math : Microsoft Office;opening Microsoft documents
+Oracle Open Office Math : Microsoft Office;reassigning document types
+Oracle Open Office Math : migrating macros (Base)
+Oracle Open Office Math : minus signs
+Oracle Open Office Math : minus/plus signs
+Oracle Open Office Math : mobile device filters
+Oracle Open Office Math : models in XForms
+Oracle Open Office Math : modifying, see changing
+Oracle Open Office Math : more controls
+Oracle Open Office Math : mosaic filter
+Oracle Open Office Math : mouse
+Oracle Open Office Math : mouse;pointers when using drag and drop
+Oracle Open Office Math : mouse;positioning
+Oracle Open Office Math : movies
+Oracle Open Office Math : moving
+Oracle Open Office Math : moving;tab stops on ruler
+Oracle Open Office Math : moving;toolbars
+Oracle Open Office Math : moving;using guide lines in presentations
+Oracle Open Office Math : MS ADO interface (Base)
+Oracle Open Office Math : much greater than relation
+Oracle Open Office Math : much less than relation
+Oracle Open Office Math : multi-line formulas
+Oracle Open Office Math : multi-line formulas;aligning
+Oracle Open Office Math : multi-line titles in forms
+Oracle Open Office Math : multiple documents
+Oracle Open Office Math : multiple documents;opening
+Oracle Open Office Math : multiple selection
+Oracle Open Office Math : multiplication signs
+Oracle Open Office Math : music
+Oracle Open Office Math : My Documents folder
+Oracle Open Office Math : My Documents folder;changing work directory
+Oracle Open Office Math : My Documents folder;opening
+Oracle Open Office Math : MySQL databases (Base)
+Oracle Open Office Math : Nabla operator
+Oracle Open Office Math : names
+Oracle Open Office Math : names;multi-line titles
+Oracle Open Office Math : names;objects
+Oracle Open Office Math : names, see also labels/callouts
+Oracle Open Office Math : namespace organization in XForms
+Oracle Open Office Math : native SQL (Base)
+Oracle Open Office Math : natural exponential functions
+Oracle Open Office Math : natural logarithms
+Oracle Open Office Math : natural numbers
+Oracle Open Office Math : navigating
+Oracle Open Office Math : navigating;in documents
+Oracle Open Office Math : Navigation bar
+Oracle Open Office Math : Navigation bar;controls
+Oracle Open Office Math : Navigation bar;forms
+Oracle Open Office Math : Navigator
+Oracle Open Office Math : Navigator;comments
+Oracle Open Office Math : Navigator;contents as lists
+Oracle Open Office Math : Navigator;docking
+Oracle Open Office Math : Navigator;working with
+Oracle Open Office Math : network identity options
+Oracle Open Office Math : new databases
+Oracle Open Office Math : new documents
+Oracle Open Office Math : new lines in cells
+Oracle Open Office Math : new symbols in Oracle Open Office Math
+Oracle Open Office Math : new windows
+Oracle Open Office Math : non-breaking dashes
+Oracle Open Office Math : non-breaking spaces (Writer)
+Oracle Open Office Math : non-printing characters (Writer)
+Oracle Open Office Math : not included in set operator
+Oracle Open Office Math : NOT operator
+Oracle Open Office Math : not subset set operators
+Oracle Open Office Math : not superset set operators
+Oracle Open Office Math : number formats
+Oracle Open Office Math : number formats;codes
+Oracle Open Office Math : number formats;formats
+Oracle Open Office Math : number formats;recognition in text tables
+Oracle Open Office Math : number of pages
+Oracle Open Office Math : number of sheets
+Oracle Open Office Math : number of tables
+Oracle Open Office Math : numbering
+Oracle Open Office Math : numbering;options
+Oracle Open Office Math : numbering;turning off
+Oracle Open Office Math : numbering;using automatically
+Oracle Open Office Math : numbers
+Oracle Open Office Math : numbers;date, time and currency formats
+Oracle Open Office Math : numerical fields in forms
+Oracle Open Office Math : objects
+Oracle Open Office Math : objects;always moveable (Impress/Draw)
+Oracle Open Office Math : objects;arranging within stacks
+Oracle Open Office Math : objects;copying when moving in presentations
+Oracle Open Office Math : objects;definition
+Oracle Open Office Math : objects;displaying in spreadsheets
+Oracle Open Office Math : objects;displaying in text documents
+Oracle Open Office Math : objects;editing
+Oracle Open Office Math : objects;inserting from Gallery
+Oracle Open Office Math : objects;inserting OLE objects
+Oracle Open Office Math : objects;moving and resizing with mouse
+Oracle Open Office Math : objects;naming
+Oracle Open Office Math : objects;opening
+Oracle Open Office Math : objects;quickly moving to
+Oracle Open Office Math : objects;titles and descriptions
+Oracle Open Office Math : ODBC
+Oracle Open Office Math : ODBC;database (Base)
+Oracle Open Office Math : ODBC;definition
+Oracle Open Office Math : ODF file formats
+Oracle Open Office Math : Office
+Oracle Open Office Math : Office;Microsoft Office and Oracle Open Office
+Oracle Open Office Math : OLE
+Oracle Open Office Math : OLE;definition
+Oracle Open Office Math : OLE objects
+Oracle Open Office Math : OLE objects;arranging within stacks
+Oracle Open Office Math : OLE objects;captions (Writer)
+Oracle Open Office Math : OLE objects;inserting
+Oracle Open Office Math : OLE objects;number of
+Oracle Open Office Math : OLE objects;protecting
+Oracle Open Office Math : one and a half line spacing in text
+Oracle Open Office Math : online feedback options
+Oracle Open Office Math : online registration
+Oracle Open Office Math : online update options
+Oracle Open Office Math : online updates
+Oracle Open Office Math : online updates;checking automatically
+Oracle Open Office Math : online updates;checking manually
+Oracle Open Office Math : OpenDocument file formats
+Oracle Open Office Math : OpenGL
+Oracle Open Office Math : OpenGL;definition
+Oracle Open Office Math : opening
+Oracle Open Office Math : opening;context menus
+Oracle Open Office Math : opening;database files
+Oracle Open Office Math : opening;dialog settings
+Oracle Open Office Math : opening;documents
+Oracle Open Office Math : opening;documents from other formats
+Oracle Open Office Math : opening;documents on WebDAV server
+Oracle Open Office Math : opening;files with links
+Oracle Open Office Math : opening;files, with placeholders
+Oracle Open Office Math : opening;forms
+Oracle Open Office Math : opening;Microsoft Office files
+Oracle Open Office Math : opening;mobile device documents
+Oracle Open Office Math : opening;objects
+Oracle Open Office Math : opening;reports
+Oracle Open Office Math : opening;several files
+Oracle Open Office Math : opening;XForms
+Oracle Open Office Math : operator brackets
+Oracle Open Office Math : operators
+Oracle Open Office Math : operators;default filters
+Oracle Open Office Math : operators;general
+Oracle Open Office Math : operators;in Math
+Oracle Open Office Math : operators;list of
+Oracle Open Office Math : operators;unary and binary
+Oracle Open Office Math : optional hyphens (Writer)
+Oracle Open Office Math : options
+Oracle Open Office Math : options;accessibility
+Oracle Open Office Math : options;appearance
+Oracle Open Office Math : options;compatibility (Writer)
+Oracle Open Office Math : options;improvement program
+Oracle Open Office Math : options;network identity
+Oracle Open Office Math : options;online update
+Oracle Open Office Math : options;tools
+Oracle Open Office Math : OR operator
+Oracle Open Office Math : Oracle databases (base)
+Oracle Open Office Math : Oracle Open Office Base data sources
+Oracle Open Office Math : Oracle Open Office Basic scripts in HTML documents
+Oracle Open Office Math : Oracle Open Office documents
+Oracle Open Office Math : Oracle Open Office documents;mobile device filters
+Oracle Open Office Math : Oracle Open Office documents;viewing and editing in Internet Explorer
+Oracle Open Office Math : Oracle Open Office Math
+Oracle Open Office Math : Oracle Open Office Math;entering symbols in
+Oracle Open Office Math : Oracle Open Office Math;examples
+Oracle Open Office Math : Oracle Open Office Math;formatting
+Oracle Open Office Math : Oracle Open Office Math;general instructions
+Oracle Open Office Math : Oracle Open Office Math;reference list
+Oracle Open Office Math : Oracle Open Office Math;relations
+Oracle Open Office Math : Oracle Open Office Math start
+Oracle Open Office Math : ordering
+Oracle Open Office Math : ordering;objects
+Oracle Open Office Math : ordinal numbers
+Oracle Open Office Math : ordinal numbers;replacing
+Oracle Open Office Math : organizing
+Oracle Open Office Math : organizing;macros and scripts
+Oracle Open Office Math : organizing;namespaces in XForms
+Oracle Open Office Math : organizing;styles
+Oracle Open Office Math : organizing;templates
+Oracle Open Office Math : original by correspondence
+Oracle Open Office Math : original size
+Oracle Open Office Math : original size;printing in Oracle Open Office Math
+Oracle Open Office Math : original size;restoring after cropping
+Oracle Open Office Math : orphaned brackets
+Oracle Open Office Math : orthogonal relations
+Oracle Open Office Math : other operators
+Oracle Open Office Math : other operators;list of
+Oracle Open Office Math : outlines
+Oracle Open Office Math : outlines;font effects
+Oracle Open Office Math : outlines;outline symbols
+Oracle Open Office Math : outlines;sending to presentations
+Oracle Open Office Math : overline attribute
+Oracle Open Office Math : overwrite mode
+Oracle Open Office Math : owns command
+Oracle Open Office Math : packages, see extensions
+Oracle Open Office Math : page breaks
+Oracle Open Office Math : page breaks;displaying (Calc)
+Oracle Open Office Math : page formats
+Oracle Open Office Math : page formats;maximizing
+Oracle Open Office Math : page formats;restriction
+Oracle Open Office Math : page styles
+Oracle Open Office Math : page styles;editing/applying with statusbar
+Oracle Open Office Math : pages
+Oracle Open Office Math : pages;backgrounds in all applications
+Oracle Open Office Math : pages;formatting and numbering
+Oracle Open Office Math : pages;printing page names in presentations
+Oracle Open Office Math : pages;scaling
+Oracle Open Office Math : pages;selecting one to print
+Oracle Open Office Math : paint box
+Oracle Open Office Math : paint can symbol
+Oracle Open Office Math : pair kerning
+Oracle Open Office Math : Palm file filters
+Oracle Open Office Math : paper formats
+Oracle Open Office Math : paper size warning
+Oracle Open Office Math : paper trays
+Oracle Open Office Math : paragraph marks
+Oracle Open Office Math : paragraph marks;displaying (Writer)
+Oracle Open Office Math : paragraph styles
+Oracle Open Office Math : paragraph styles;languages
+Oracle Open Office Math : paragraph styles;modifying basic fonts
+Oracle Open Office Math : paragraphs
+Oracle Open Office Math : paragraphs;alignment
+Oracle Open Office Math : paragraphs;Asian typography
+Oracle Open Office Math : paragraphs;defining borders
+Oracle Open Office Math : paragraphs;hidden paragraphs (Writer)
+Oracle Open Office Math : paragraphs;increasing indents of
+Oracle Open Office Math : paragraphs;indents, margins and columns
+Oracle Open Office Math : paragraphs;inserting bullets
+Oracle Open Office Math : paragraphs;joining
+Oracle Open Office Math : paragraphs;numbering automatically
+Oracle Open Office Math : paragraphs;removing blank ones
+Oracle Open Office Math : paragraphs;spacing
+Oracle Open Office Math : paragraphs;tab stops
+Oracle Open Office Math : parallel relation
+Oracle Open Office Math : parameters
+Oracle Open Office Math : parameters;command line
+Oracle Open Office Math : parameters;queries (Base)
+Oracle Open Office Math : parentheses (Math)
+Oracle Open Office Math : partial differentiation symbol
+Oracle Open Office Math : passwords for protecting contents
+Oracle Open Office Math : pasting
+Oracle Open Office Math : pasting;cell ranges
+Oracle Open Office Math : pasting;cell ranges from spreadsheets
+Oracle Open Office Math : pasting;data from text documents
+Oracle Open Office Math : pasting;draw objects
+Oracle Open Office Math : pasting;draw objects from other documents
+Oracle Open Office Math : pasting;formatted/unformatted text
+Oracle Open Office Math : pasting;from data source view
+Oracle Open Office Math : pasting;from data sources to Oracle Open Office Calc
+Oracle Open Office Math : pasting;pictures from other documents
+Oracle Open Office Math : pasting;sheet areas in text documents
+Oracle Open Office Math : pasting;to Gallery
+Oracle Open Office Math : paths
+Oracle Open Office Math : paths;changing work directory
+Oracle Open Office Math : paths;defaults
+Oracle Open Office Math : pattern editor
+Oracle Open Office Math : pattern fields
+Oracle Open Office Math : pattern fields;form functions
+Oracle Open Office Math : patterns for objects
+Oracle Open Office Math : PDF
+Oracle Open Office Math : PDF;export
+Oracle Open Office Math : PDF;PostScript to PDF converter, UNIX
+Oracle Open Office Math : personal data input
+Oracle Open Office Math : phonetic guide
+Oracle Open Office Math : picklist creation
+Oracle Open Office Math : picture by correspondence
+Oracle Open Office Math : pictures
+Oracle Open Office Math : pictures;adding to Gallery
+Oracle Open Office Math : pictures;arranging within stacks
+Oracle Open Office Math : pictures;assigning macros
+Oracle Open Office Math : pictures;backgrounds
+Oracle Open Office Math : pictures;captions (Writer)
+Oracle Open Office Math : pictures;changing paths
+Oracle Open Office Math : pictures;cropping and zooming
+Oracle Open Office Math : pictures;displaying in Calc
+Oracle Open Office Math : pictures;displaying in Writer (Writer)
+Oracle Open Office Math : pictures;drag and drop between documents
+Oracle Open Office Math : pictures;drawing
+Oracle Open Office Math : pictures;editing
+Oracle Open Office Math : pictures;filters
+Oracle Open Office Math : pictures;ImageMap
+Oracle Open Office Math : pictures;inserting automatically
+Oracle Open Office Math : pictures;inserting from Gallery
+Oracle Open Office Math : pictures;number of
+Oracle Open Office Math : pictures;printing
+Oracle Open Office Math : pictures;scaling/resizing
+Oracle Open Office Math : pixel editor
+Oracle Open Office Math : pixel graphics
+Oracle Open Office Math : pixel graphics;inserting and editing
+Oracle Open Office Math : pixel patterns
+Oracle Open Office Math : placeholders
+Oracle Open Office Math : placeholders;in SQL queries
+Oracle Open Office Math : placeholders;inserting in formulas
+Oracle Open Office Math : placeholders;on opening files
+Oracle Open Office Math : placeholders;position of next
+Oracle Open Office Math : placeholders;previous marker
+Oracle Open Office Math : placing toolbars
+Oracle Open Office Math : playing movies and sound files
+Oracle Open Office Math : plotting data as charts
+Oracle Open Office Math : plug-ins
+Oracle Open Office Math : plug-ins;activating and deactivating
+Oracle Open Office Math : plug-ins;definition
+Oracle Open Office Math : plug-ins;inserting
+Oracle Open Office Math : plus signs
+Oracle Open Office Math : plus/minus signs
+Oracle Open Office Math : pocket device appliances
+Oracle Open Office Math : Pocket PC file filters
+Oracle Open Office Math : points
+Oracle Open Office Math : points;reducing editing points when snapping (Impress/Draw)
+Oracle Open Office Math : polygon drawing
+Oracle Open Office Math : pop-art filter
+Oracle Open Office Math : portable document format
+Oracle Open Office Math : positioning
+Oracle Open Office Math : positioning;draw objects and controls
+Oracle Open Office Math : positioning;fonts
+Oracle Open Office Math : positioning;objects
+Oracle Open Office Math : positioning;toolbars
+Oracle Open Office Math : post method for form transmissions
+Oracle Open Office Math : posterizing filter
+Oracle Open Office Math : PostScript
+Oracle Open Office Math : PostScript;creating files
+Oracle Open Office Math : PostScript;PDF converter, UNIX
+Oracle Open Office Math : PowerPoint export
+Oracle Open Office Math : powers
+Oracle Open Office Math : precision as shown (Calc)
+Oracle Open Office Math : predefining fonts
+Oracle Open Office Math : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
+Oracle Open Office Math : presentations
+Oracle Open Office Math : presentations;creating/opening
+Oracle Open Office Math : presentations;inserting spreadsheet cells
+Oracle Open Office Math : presentations;live on the Internet
+Oracle Open Office Math : presentations;print menu
+Oracle Open Office Math : presentations;saving
+Oracle Open Office Math : presentations;saving automatically
+Oracle Open Office Math : presentations;saving in other formats
+Oracle Open Office Math : presentations;sending as e-mail
+Oracle Open Office Math : presentations;starting with wizard
+Oracle Open Office Math : presentations;wizards
+Oracle Open Office Math : Presenter Console shortcuts
+Oracle Open Office Math : press buttons, see push buttons
+Oracle Open Office Math : previews
+Oracle Open Office Math : previews;fonts lists
+Oracle Open Office Math : primary keys
+Oracle Open Office Math : primary keys;defining
+Oracle Open Office Math : primary keys;design view
+Oracle Open Office Math : primary keys;inserting (Base)
+Oracle Open Office Math : print area selection
+Oracle Open Office Math : printer metrics for document formatting (Writer)
+Oracle Open Office Math : printers
+Oracle Open Office Math : printers;adding, UNIX
+Oracle Open Office Math : printers;choosing
+Oracle Open Office Math : printers;default printer
+Oracle Open Office Math : printers;faxes under UNIX
+Oracle Open Office Math : printers;maximum page formats
+Oracle Open Office Math : printers;paper trays
+Oracle Open Office Math : printers;properties
+Oracle Open Office Math : printing
+Oracle Open Office Math : printing;black and white
+Oracle Open Office Math : printing;brochures
+Oracle Open Office Math : printing;colors in grayscale
+Oracle Open Office Math : printing;comments
+Oracle Open Office Math : printing;copies
+Oracle Open Office Math : printing;creating individual jobs
+Oracle Open Office Math : printing;dates in presentations
+Oracle Open Office Math : printing;directly
+Oracle Open Office Math : printing;documents
+Oracle Open Office Math : printing;drawings defaults
+Oracle Open Office Math : printing;elements in text documents
+Oracle Open Office Math : printing;faster
+Oracle Open Office Math : printing;fitting to pages in Oracle Open Office Math
+Oracle Open Office Math : printing;fitting to pages in presentations
+Oracle Open Office Math : printing;formulas in Oracle Open Office Math
+Oracle Open Office Math : printing;hidden pages of presentations
+Oracle Open Office Math : printing;in original size in Oracle Open Office Math
+Oracle Open Office Math : printing;left/right pages
+Oracle Open Office Math : printing;queries (Base)
+Oracle Open Office Math : printing;scaling in Oracle Open Office Math
+Oracle Open Office Math : printing;selections
+Oracle Open Office Math : printing;text always in black
+Oracle Open Office Math : printing;text in reverse order
+Oracle Open Office Math : printing;tiling pages in presentations
+Oracle Open Office Math : printing;transparencies
+Oracle Open Office Math : printing;warnings
+Oracle Open Office Math : printing;without scaling in presentations
+Oracle Open Office Math : printing speed
+Oracle Open Office Math : product
+Oracle Open Office Math : programming
+Oracle Open Office Math : programming;Oracle Open Office
+Oracle Open Office Math : programming;scripting
+Oracle Open Office Math : properties
+Oracle Open Office Math : properties;fields in databases
+Oracle Open Office Math : properties;files
+Oracle Open Office Math : properties;form controls
+Oracle Open Office Math : properties;forms
+Oracle Open Office Math : properties;printers
+Oracle Open Office Math : proportional to relation
+Oracle Open Office Math : protected contents
+Oracle Open Office Math : protected dashes
+Oracle Open Office Math : protected database tables
+Oracle Open Office Math : protected documents
+Oracle Open Office Math : protected spaces
+Oracle Open Office Math : protected spaces;inserting
+Oracle Open Office Math : protected spaces;showing (Writer)
+Oracle Open Office Math : protecting
+Oracle Open Office Math : protecting;contents
+Oracle Open Office Math : protecting;recorded changes
+Oracle Open Office Math : proxy settings
+Oracle Open Office Math : push buttons
+Oracle Open Office Math : push buttons;adding to documents
+Oracle Open Office Math : push buttons;creating
+Oracle Open Office Math : queries
+Oracle Open Office Math : queries;copying (Base)
+Oracle Open Office Math : queries;creating in design view (Base)
+Oracle Open Office Math : queries;creating in SQL view
+Oracle Open Office Math : queries;defining (Base)
+Oracle Open Office Math : queries;deleting table links (Base)
+Oracle Open Office Math : queries;editing in data source view
+Oracle Open Office Math : queries;formulating filter conditions (Base)
+Oracle Open Office Math : queries;joining tables (Base)
+Oracle Open Office Math : queries;missing elements (Base)
+Oracle Open Office Math : queries;overview (Base)
+Oracle Open Office Math : queries;parameter queries (Base)
+Oracle Open Office Math : queries;printing (Base)
+Oracle Open Office Math : Query Wizard (Base)
+Oracle Open Office Math : Quickstarter
+Oracle Open Office Math : quotes
+Oracle Open Office Math : quotes;custom
+Oracle Open Office Math : quotient set
+Oracle Open Office Math : radio button creation
+Oracle Open Office Math : range of integral example
+Oracle Open Office Math : rational numbers
+Oracle Open Office Math : read-only documents
+Oracle Open Office Math : read-only documents;cursor
+Oracle Open Office Math : read-only documents;database tables on/off
+Oracle Open Office Math : read-only documents;editing
+Oracle Open Office Math : read-only documents;opening documents as
+Oracle Open Office Math : read-only items in Data Navigator
+Oracle Open Office Math : real numbers
+Oracle Open Office Math : real part of complex numbers
+Oracle Open Office Math : recognizing URLs automatically
+Oracle Open Office Math : recording
+Oracle Open Office Math : recording;changes
+Oracle Open Office Math : recording;macros
+Oracle Open Office Math : records
+Oracle Open Office Math : records;inserting comments
+Oracle Open Office Math : records;protecting
+Oracle Open Office Math : records;saving
+Oracle Open Office Math : records;searching in databases
+Oracle Open Office Math : rectangles with round corners
+Oracle Open Office Math : recursions in spreadsheets
+Oracle Open Office Math : redo command
+Oracle Open Office Math : reduced printing
+Oracle Open Office Math : reference lines
+Oracle Open Office Math : reference tables
+Oracle Open Office Math : reference tables;formulas
+Oracle Open Office Math : references
+Oracle Open Office Math : references;displaying in color (Calc)
+Oracle Open Office Math : references;expanding (Calc)
+Oracle Open Office Math : references;iterative (Calc)
+Oracle Open Office Math : refreshing formula view
+Oracle Open Office Math : register-true
+Oracle Open Office Math : register-true;definition
+Oracle Open Office Math : registering
+Oracle Open Office Math : registering;address books
+Oracle Open Office Math : registering;databases (Base)
+Oracle Open Office Math : registering;Oracle Open Office
+Oracle Open Office Math : regular expressions
+Oracle Open Office Math : regular expressions;list of
+Oracle Open Office Math : relational databases (Base)
+Oracle Open Office Math : relations
+Oracle Open Office Math : relations;creating and deleting (Base)
+Oracle Open Office Math : relations;in Oracle Open Office Math
+Oracle Open Office Math : relations;joining tables (Base)
+Oracle Open Office Math : relations;properties (Base)
+Oracle Open Office Math : relations operators
+Oracle Open Office Math : relations operators;list of
+Oracle Open Office Math : relative hyperlinks
+Oracle Open Office Math : relative saving of URLs
+Oracle Open Office Math : reloading
+Oracle Open Office Math : reloading;documents
+Oracle Open Office Math : reloading;HTML documents, automatically
+Oracle Open Office Math : remarks, see also comments
+Oracle Open Office Math : remote configurations
+Oracle Open Office Math : remove noise filter
+Oracle Open Office Math : removing
+Oracle Open Office Math : removing;bullets and numbering
+Oracle Open Office Math : removing;form filters
+Oracle Open Office Math : removing, see also deleting
+Oracle Open Office Math : repeating
+Oracle Open Office Math : repeating;commands
+Oracle Open Office Math : replacement options
+Oracle Open Office Math : replacement table
+Oracle Open Office Math : replacing
+Oracle Open Office Math : replacing;AutoCorrect function
+Oracle Open Office Math : replacing;dashes
+Oracle Open Office Math : replacing;ordinal numbers
+Oracle Open Office Math : replacing;tab stops (regular expressions)
+Oracle Open Office Math : Report Builder
+Oracle Open Office Math : reports
+Oracle Open Office Math : reports;creating
+Oracle Open Office Math : reports;error reports
+Oracle Open Office Math : reports;opening and editing
+Oracle Open Office Math : reports;templates
+Oracle Open Office Math : resetting
+Oracle Open Office Math : resetting;templates
+Oracle Open Office Math : resizing
+Oracle Open Office Math : resizing;fonts
+Oracle Open Office Math : resizing;objects, by mouse
+Oracle Open Office Math : resizing, see also scaling/zooming
+Oracle Open Office Math : resolution when printing bitmaps
+Oracle Open Office Math : restoring
+Oracle Open Office Math : restoring;default formatting
+Oracle Open Office Math : restoring;editing
+Oracle Open Office Math : reversed circumflex attribute
+Oracle Open Office Math : reversing printing order
+Oracle Open Office Math : review function
+Oracle Open Office Math : review function;accepting or rejecting changes
+Oracle Open Office Math : review function;comparing documents
+Oracle Open Office Math : review function;protecting records
+Oracle Open Office Math : review function;recording changes example
+Oracle Open Office Math : rich text control
+Oracle Open Office Math : right alignment of paragraphs
+Oracle Open Office Math : right angled relations
+Oracle Open Office Math : right arrow symbol
+Oracle Open Office Math : right joins (Base)
+Oracle Open Office Math : right-justified alignment in Oracle Open Office Math
+Oracle Open Office Math : right-to-left text
+Oracle Open Office Math : roots
+Oracle Open Office Math : rotating
+Oracle Open Office Math : rotating;3D text
+Oracle Open Office Math : round brackets
+Oracle Open Office Math : round corners
+Oracle Open Office Math : rounding precision (Calc)
+Oracle Open Office Math : row headers
+Oracle Open Office Math : row headers;displaying (Calc)
+Oracle Open Office Math : row headers;highlighting (Calc)
+Oracle Open Office Math : rulers
+Oracle Open Office Math : rulers;default settings
+Oracle Open Office Math : rulers;measurement units
+Oracle Open Office Math : rulers;visible in presentations
+Oracle Open Office Math : samples and templates
+Oracle Open Office Math : saving
+Oracle Open Office Math : saving;default file formats
+Oracle Open Office Math : saving;dialog settings
+Oracle Open Office Math : saving;documents
+Oracle Open Office Math : saving;documents for mobile devices
+Oracle Open Office Math : saving;documents in other formats
+Oracle Open Office Math : saving;documents, automatically
+Oracle Open Office Math : saving;in Microsoft Office file format
+Oracle Open Office Math : saving;options
+Oracle Open Office Math : saving;templates
+Oracle Open Office Math : saving;to XML
+Oracle Open Office Math : saving;VBA code in Microsoft Office documents
+Oracle Open Office Math : saving;with password by default
+Oracle Open Office Math : saving as command
+Oracle Open Office Math : saving as command;precautions
+Oracle Open Office Math : scalable braces
+Oracle Open Office Math : scalable lines with ceiling
+Oracle Open Office Math : scalable round brackets
+Oracle Open Office Math : scaling
+Oracle Open Office Math : scaling;font sizes in user interface
+Oracle Open Office Math : scaling;fonts
+Oracle Open Office Math : scaling;in Oracle Open Office Math
+Oracle Open Office Math : scaling;objects
+Oracle Open Office Math : scaling;pictures
+Oracle Open Office Math : scaling;printing in Oracle Open Office Math
+Oracle Open Office Math : scaling;when printing presentations
+Oracle Open Office Math : scaling, see also zooming
+Oracle Open Office Math : screen
+Oracle Open Office Math : screen;full screen views
+Oracle Open Office Math : screen;scaling
+Oracle Open Office Math : screen magnifiers
+Oracle Open Office Math : screen readers
+Oracle Open Office Math : script organization
+Oracle Open Office Math : scrollbars
+Oracle Open Office Math : scrollbars;controls
+Oracle Open Office Math : scrollbars;displaying (Calc)
+Oracle Open Office Math : scrollbars;horizontal and vertical (Writer)
+Oracle Open Office Math : search criteria for database functions in cells
+Oracle Open Office Math : search engines
+Oracle Open Office Math : search engines;definition
+Oracle Open Office Math : search engines;selecting
+Oracle Open Office Math : searching
+Oracle Open Office Math : searching;all sheets
+Oracle Open Office Math : searching;databases
+Oracle Open Office Math : searching;form filters
+Oracle Open Office Math : searching;Internet
+Oracle Open Office Math : searching;tables and forms
+Oracle Open Office Math : sections
+Oracle Open Office Math : sections;backgrounds
+Oracle Open Office Math : security
+Oracle Open Office Math : security;digital signatures
+Oracle Open Office Math : security;options for documents with macros
+Oracle Open Office Math : security;protecting contents
+Oracle Open Office Math : security;security levels for macros
+Oracle Open Office Math : security;warning dialogs with macros
+Oracle Open Office Math : selecting
+Oracle Open Office Math : selecting;controls
+Oracle Open Office Math : selecting;measurement units
+Oracle Open Office Math : selecting;objects
+Oracle Open Office Math : selecting;print areas
+Oracle Open Office Math : selecting;several files
+Oracle Open Office Math : selection clipboard
+Oracle Open Office Math : selection frames
+Oracle Open Office Math : selection modes in text
+Oracle Open Office Math : selection options in formulas
+Oracle Open Office Math : sending
+Oracle Open Office Math : sending;AutoAbstract function in presentations
+Oracle Open Office Math : sending;documents as e-mail
+Oracle Open Office Math : sending;documents as faxes
+Oracle Open Office Math : separator lines
+Oracle Open Office Math : separator lines;defining
+Oracle Open Office Math : separators
+Oracle Open Office Math : separators;conditional
+Oracle Open Office Math : Server Side ImageMap
+Oracle Open Office Math : set operations in Oracle Open OfficeMath
+Oracle Open Office Math : set operators
+Oracle Open Office Math : set operators;list of
+Oracle Open Office Math : sets of numbers
+Oracle Open Office Math : settings
+Oracle Open Office Math : settings;printers
+Oracle Open Office Math : settings;program configuration
+Oracle Open Office Math : settings;proxies
+Oracle Open Office Math : settings;tracking changes
+Oracle Open Office Math : settings;views
+Oracle Open Office Math : SGML
+Oracle Open Office Math : SGML;definition
+Oracle Open Office Math : shadows
+Oracle Open Office Math : shadows;areas
+Oracle Open Office Math : shadows;borders
+Oracle Open Office Math : shadows;characters
+Oracle Open Office Math : shadows;characters, using context menu
+Oracle Open Office Math : sharing documents
+Oracle Open Office Math : sharpening filter
+Oracle Open Office Math : sheet tabs
+Oracle Open Office Math : sheet tabs;displaying
+Oracle Open Office Math : sheets
+Oracle Open Office Math : sheets;searching all
+Oracle Open Office Math : shortcut keys
+Oracle Open Office Math : shortcut keys;assigning macros
+Oracle Open Office Math : shortcut keys;general
+Oracle Open Office Math : shortcut keys;in databases
+Oracle Open Office Math : shortcut keys;in formulas
+Oracle Open Office Math : shortcut keys;Oracle Open Office accessibility
+Oracle Open Office Math : showing
+Oracle Open Office Math : showing;changes
+Oracle Open Office Math : showing;docked windows
+Oracle Open Office Math : showing;drawings and controls (Writer)
+Oracle Open Office Math : showing;live presentations on the Internet
+Oracle Open Office Math : showing;toolbars
+Oracle Open Office Math : signing documents with digital signatures
+Oracle Open Office Math : similar to relations
+Oracle Open Office Math : similarity search
+Oracle Open Office Math : simple handles (Writer)
+Oracle Open Office Math : simplified Chinese
+Oracle Open Office Math : simplified Chinese;translating to traditional Chinese
+Oracle Open Office Math : sine function
+Oracle Open Office Math : single brackets without group function
+Oracle Open Office Math : single sign on options
+Oracle Open Office Math : single-line spacing in text
+Oracle Open Office Math : sizes
+Oracle Open Office Math : sizes;draw objects
+Oracle Open Office Math : sizes;of fonts in Oracle Open Office Math
+Oracle Open Office Math : sizes;pictures
+Oracle Open Office Math : slanting draw objects
+Oracle Open Office Math : slash division sign
+Oracle Open Office Math : small capitals
+Oracle Open Office Math : small gaps
+Oracle Open Office Math : small icons
+Oracle Open Office Math : smart tag configuration
+Oracle Open Office Math : smooth scrolling (Writer)
+Oracle Open Office Math : smoothing filter
+Oracle Open Office Math : snap grid defaults (Writer/Calc)
+Oracle Open Office Math : snapping in presentations and drawings
+Oracle Open Office Math : solarization filter
+Oracle Open Office Math : sort lists
+Oracle Open Office Math : sort lists;copying to in Calc
+Oracle Open Office Math : sorting
+Oracle Open Office Math : sorting;data in forms
+Oracle Open Office Math : sorting;databases
+Oracle Open Office Math : sound files
+Oracle Open Office Math : spaces
+Oracle Open Office Math : spaces;displaying (Writer)
+Oracle Open Office Math : spaces;ignoring double
+Oracle Open Office Math : spaces;inserting protected spaces
+Oracle Open Office Math : spaces;showing protected spaces (Writer)
+Oracle Open Office Math : spaces in formulas
+Oracle Open Office Math : spacing
+Oracle Open Office Math : spacing;between paragraphs in footnotes
+Oracle Open Office Math : spacing;font effects
+Oracle Open Office Math : spacing;formula elements
+Oracle Open Office Math : spacing;lines and paragraphs
+Oracle Open Office Math : spacing;tab stops in text documents
+Oracle Open Office Math : spacing;tabs in presentations
+Oracle Open Office Math : spadmin
+Oracle Open Office Math : special characters
+Oracle Open Office Math : speech bubbles
+Oracle Open Office Math : speed of printing
+Oracle Open Office Math : spellcheck
+Oracle Open Office Math : spellcheck;activating for a language
+Oracle Open Office Math : spellcheck;context menus
+Oracle Open Office Math : spellcheck;default languages
+Oracle Open Office Math : spellcheck;dialog
+Oracle Open Office Math : spellcheck;dictionary of exceptions
+Oracle Open Office Math : spellcheck;ignore list
+Oracle Open Office Math : spin button creation
+Oracle Open Office Math : spoolfiles with Xprinter
+Oracle Open Office Math : spreadsheets
+Oracle Open Office Math : spreadsheets;as databases (base)
+Oracle Open Office Math : spreadsheets;copying areas to text documents
+Oracle Open Office Math : spreadsheets;creating/opening
+Oracle Open Office Math : spreadsheets;inserting charts
+Oracle Open Office Math : spreadsheets;inserting database records
+Oracle Open Office Math : spreadsheets;printing
+Oracle Open Office Math : spreadsheets;saving
+Oracle Open Office Math : spreadsheets;saving automatically
+Oracle Open Office Math : spreadsheets;saving in other formats
+Oracle Open Office Math : spreadsheets;sending as e-mail
+Oracle Open Office Math : SQL
+Oracle Open Office Math : SQL;definition
+Oracle Open Office Math : SQL;DISTINCT parameter
+Oracle Open Office Math : SQL;executing SQL commands
+Oracle Open Office Math : SQL;executing SQL statements (Base)
+Oracle Open Office Math : SQL;queries (Base)
+Oracle Open Office Math : square brackets
+Oracle Open Office Math : square drawings
+Oracle Open Office Math : square roots
+Oracle Open Office Math : stacks
+Oracle Open Office Math : standard bar on/off
+Oracle Open Office Math : standard filters in databases
+Oracle Open Office Math : standard printer under UNIX
+Oracle Open Office Math : start center
+Oracle Open Office Math : start parameters
+Oracle Open Office Math : status bar on/off
+Oracle Open Office Math : stickers
+Oracle Open Office Math : strikethrough
+Oracle Open Office Math : strikethrough;characters
+Oracle Open Office Math : strikethrough;font effects
+Oracle Open Office Math : styles
+Oracle Open Office Math : styles;'changed' message
+Oracle Open Office Math : styles;copying between documents
+Oracle Open Office Math : styles;keyboard shortcuts
+Oracle Open Office Math : styles;organizing
+Oracle Open Office Math : styles;printing styles used in a document
+Oracle Open Office Math : styles;replacing automatically
+Oracle Open Office Math : Styles and Formatting window
+Oracle Open Office Math : Styles and Formatting window;docking
+Oracle Open Office Math : subforms
+Oracle Open Office Math : subforms;creating
+Oracle Open Office Math : subforms;description
+Oracle Open Office Math : submitting forms
+Oracle Open Office Math : subscripts
+Oracle Open Office Math : subset set operators
+Oracle Open Office Math : subtraction signs
+Oracle Open Office Math : suffixes in file formats
+Oracle Open Office Math : sum range example
+Oracle Open Office Math : summation
+Oracle Open Office Math : superscripts
+Oracle Open Office Math : superset set operators
+Oracle Open Office Math : support on the Web
+Oracle Open Office Math : symbols
+Oracle Open Office Math : symbols;adding in Oracle Open Office Math
+Oracle Open Office Math : symbols;entering in Oracle Open Office Math
+Oracle Open Office Math : symbols;for complex numbers
+Oracle Open Office Math : synchronizing
+Oracle Open Office Math : synchronizing;labels and business cards
+Oracle Open Office Math : synchronizing;Pocket PC and Oracle Open Office formats
+Oracle Open Office Math : system address book registration
+Oracle Open Office Math : tab stops
+Oracle Open Office Math : tab stops;displaying (Writer)
+Oracle Open Office Math : tab stops;inserting and editing
+Oracle Open Office Math : tab stops;regular expressions
+Oracle Open Office Math : tab stops;setting in sheets
+Oracle Open Office Math : tab stops;settings
+Oracle Open Office Math : tab stops;spacing in presentations
+Oracle Open Office Math : tab stops;spacing in text documents
+Oracle Open Office Math : table controls
+Oracle Open Office Math : table controls;form functions
+Oracle Open Office Math : table controls;keyboard-only edit mode
+Oracle Open Office Math : table controls;properties
+Oracle Open Office Math : table views of databases
+Oracle Open Office Math : Table Wizard (Base)
+Oracle Open Office Math : tables
+Oracle Open Office Math : tables;inserting line breaks
+Oracle Open Office Math : tables in databases
+Oracle Open Office Math : tables in databases;access rights to (Base)
+Oracle Open Office Math : tables in databases;adding to queries
+Oracle Open Office Math : tables in databases;browsing and editing
+Oracle Open Office Math : tables in databases;copying database tables (Base)
+Oracle Open Office Math : tables in databases;creating
+Oracle Open Office Math : tables in databases;creating in design view (manually)
+Oracle Open Office Math : tables in databases;importing text formats (Base)
+Oracle Open Office Math : tables in databases;joining for queries (Base)
+Oracle Open Office Math : tables in databases;printing queries (Base)
+Oracle Open Office Math : tables in databases;relations (Base)
+Oracle Open Office Math : tables in databases;searching
+Oracle Open Office Math : tables in spreadsheets
+Oracle Open Office Math : tables in spreadsheets;copying data to other applications
+Oracle Open Office Math : tables in spreadsheets;defining borders
+Oracle Open Office Math : tables in spreadsheets;value highlighting
+Oracle Open Office Math : tables in text
+Oracle Open Office Math : tables in text;captions
+Oracle Open Office Math : tables in text;creating automatically
+Oracle Open Office Math : tables in text;default settings
+Oracle Open Office Math : tables in text;defining borders
+Oracle Open Office Math : tables in text;displaying
+Oracle Open Office Math : tables in text;printing
+Oracle Open Office Math : tabs
+Oracle Open Office Math : tabs;displaying sheet tabs
+Oracle Open Office Math : tags
+Oracle Open Office Math : tags;definition
+Oracle Open Office Math : tags;META tags
+Oracle Open Office Math : tangent function
+Oracle Open Office Math : templates
+Oracle Open Office Math : templates;agendas
+Oracle Open Office Math : templates;changing basic fonts
+Oracle Open Office Math : templates;database reports
+Oracle Open Office Math : templates;deleting
+Oracle Open Office Math : templates;editing and saving
+Oracle Open Office Math : templates;faxes
+Oracle Open Office Math : templates;importing and exporting
+Oracle Open Office Math : templates;letters
+Oracle Open Office Math : templates;new documents from templates
+Oracle Open Office Math : templates;opening documents with
+Oracle Open Office Math : templates;organizing
+Oracle Open Office Math : terminology
+Oracle Open Office Math : terminology;general glossary
+Oracle Open Office Math : terminology;Internet glossary
+Oracle Open Office Math : testing XML filters
+Oracle Open Office Math : text
+Oracle Open Office Math : text;animating
+Oracle Open Office Math : text;Asian layout
+Oracle Open Office Math : text;bold
+Oracle Open Office Math : text;coloring
+Oracle Open Office Math : text;copying by drag and drop
+Oracle Open Office Math : text;CTL languages
+Oracle Open Office Math : text;drawing pictures
+Oracle Open Office Math : text;font effects
+Oracle Open Office Math : text;font sizes
+Oracle Open Office Math : text;font styles
+Oracle Open Office Math : text;fonts and formats
+Oracle Open Office Math : text;Fontwork icons
+Oracle Open Office Math : text;hyperlinks
+Oracle Open Office Math : text;inserting special characters
+Oracle Open Office Math : text;italics
+Oracle Open Office Math : text;kerning
+Oracle Open Office Math : text;language selection
+Oracle Open Office Math : text;line spacing
+Oracle Open Office Math : text;overwriting or inserting
+Oracle Open Office Math : text;printing in black
+Oracle Open Office Math : text;replacing with format
+Oracle Open Office Math : text;selection modes
+Oracle Open Office Math : text;shadowed
+Oracle Open Office Math : text;text/draw objects
+Oracle Open Office Math : text attributes
+Oracle Open Office Math : text attributes;hyperlinks
+Oracle Open Office Math : text attributes;undoing
+Oracle Open Office Math : text boxes
+Oracle Open Office Math : text boxes;form functions
+Oracle Open Office Math : text boxes;positioning
+Oracle Open Office Math : text breaks in cells
+Oracle Open Office Math : text colors for better accessibility
+Oracle Open Office Math : text databases (Base)
+Oracle Open Office Math : text documents
+Oracle Open Office Math : text documents;creating/opening
+Oracle Open Office Math : text documents;importing/exporting
+Oracle Open Office Math : text documents;inserting spreadsheet cells
+Oracle Open Office Math : text documents;print settings
+Oracle Open Office Math : text documents;printing
+Oracle Open Office Math : text documents;saving
+Oracle Open Office Math : text documents;saving automatically
+Oracle Open Office Math : text documents;saving in other formats
+Oracle Open Office Math : text documents;sending as e-mail
+Oracle Open Office Math : text effects
+Oracle Open Office Math : text flow
+Oracle Open Office Math : text flow;in cells
+Oracle Open Office Math : text formats
+Oracle Open Office Math : text formats;databases
+Oracle Open Office Math : text formats;pasting
+Oracle Open Office Math : text input fields
+Oracle Open Office Math : text layout for special languages
+Oracle Open Office Math : text mode in Oracle Open Office Math
+Oracle Open Office Math : text objects
+Oracle Open Office Math : text objects;alignment
+Oracle Open Office Math : text objects;draw functions
+Oracle Open Office Math : text objects;fonts
+Oracle Open Office Math : text objects;in presentations and drawings
+Oracle Open Office Math : text overflow in spreadsheet cells
+Oracle Open Office Math : text strings
+Oracle Open Office Math : text strings;entering in Oracle Open Office Math
+Oracle Open Office Math : text, see also text documents, paragraphs and characters
+Oracle Open Office Math : TextArt, see Fontwork
+Oracle Open Office Math : textures
+Oracle Open Office Math : textures;inserting from Gallery
+Oracle Open Office Math : textures;on chart bars
+Oracle Open Office Math : Thai
+Oracle Open Office Math : Thai;entering text
+Oracle Open Office Math : Thai;language settings
+Oracle Open Office Math : there exists symbol
+Oracle Open Office Math : thesaurus
+Oracle Open Office Math : thesaurus;activating for a language
+Oracle Open Office Math : ticker text
+Oracle Open Office Math : tilde as attribute
+Oracle Open Office Math : time fields
+Oracle Open Office Math : time fields;form functions
+Oracle Open Office Math : times
+Oracle Open Office Math : times;inserting when printing presentations
+Oracle Open Office Math : times, formats
+Oracle Open Office Math : tips
+Oracle Open Office Math : tips;extended tips in Help
+Oracle Open Office Math : title rows
+Oracle Open Office Math : title rows;printing in Oracle Open Office Math
+Oracle Open Office Math : titles
+Oracle Open Office Math : titles;changing
+Oracle Open Office Math : titles;editing in charts
+Oracle Open Office Math : titles;font effects
+Oracle Open Office Math : titles;formatting automatically
+Oracle Open Office Math : titles;objects
+Oracle Open Office Math : toolbars
+Oracle Open Office Math : toolbars;adding buttons
+Oracle Open Office Math : toolbars;docking/undocking
+Oracle Open Office Math : toolbars;Form Navigation bar
+Oracle Open Office Math : toolbars;viewing/closing
+Oracle Open Office Math : tools bar
+Oracle Open Office Math : tooltips
+Oracle Open Office Math : tooltips;extended tips
+Oracle Open Office Math : tooltips;help
+Oracle Open Office Math : toward relation
+Oracle Open Office Math : traditional Chinese
+Oracle Open Office Math : traditional Chinese;translating to simplified chinese
+Oracle Open Office Math : transparency
+Oracle Open Office Math : transparency;areas
+Oracle Open Office Math : transparency;off for faster printing
+Oracle Open Office Math : transparency;saving
+Oracle Open Office Math : transparent character as attribute
+Oracle Open Office Math : tree view of Help
+Oracle Open Office Math : trigonometrical functions
+Oracle Open Office Math : triple dot attribute
+Oracle Open Office Math : typefaces
+Oracle Open Office Math : typefaces;adding under UNIX
+Oracle Open Office Math : typefaces;formats
+Oracle Open Office Math : typography
+Oracle Open Office Math : typography;Asian
+Oracle Open Office Math : unary operators
+Oracle Open Office Math : unary operators;list of
+Oracle Open Office Math : unary operators
+Oracle Open Office Math : underline attribute
+Oracle Open Office Math : underlining
+Oracle Open Office Math : underlining;AutoFormat function
+Oracle Open Office Math : underlining;characters
+Oracle Open Office Math : underlining;text
+Oracle Open Office Math : undocking windows
+Oracle Open Office Math : undoing
+Oracle Open Office Math : undoing;direct formatting
+Oracle Open Office Math : undoing;editing
+Oracle Open Office Math : undoing;number of steps
+Oracle Open Office Math : unequal sign
+Oracle Open Office Math : ungrouping groups
+Oracle Open Office Math : union of sets
+Oracle Open Office Math : units
+Oracle Open Office Math : units;converting
+Oracle Open Office Math : units;measurement units
+Oracle Open Office Math : universal quantifier symbol
+Oracle Open Office Math : UNO components
+Oracle Open Office Math : UNO components;Extension Manager
+Oracle Open Office Math : UNO components;integrating new
+Oracle Open Office Math : up arrow symbol
+Oracle Open Office Math : update options
+Oracle Open Office Math : updates
+Oracle Open Office Math : updates;checking automatically
+Oracle Open Office Math : updates;checking manually
+Oracle Open Office Math : updating
+Oracle Open Office Math : updating;fields and charts, automatically (Writer)
+Oracle Open Office Math : updating;links in text documents
+Oracle Open Office Math : updating;links, on opening
+Oracle Open Office Math : updating;templates
+Oracle Open Office Math : upper limits
+Oracle Open Office Math : URL
+Oracle Open Office Math : URL;changing hyperlink URLs
+Oracle Open Office Math : URL;definition
+Oracle Open Office Math : URL;in pictures
+Oracle Open Office Math : URL;saving absolute/relative paths
+Oracle Open Office Math : URL;turning off URL recognition
+Oracle Open Office Math : user data
+Oracle Open Office Math : user data;input
+Oracle Open Office Math : user data;removing when saving
+Oracle Open Office Math : user feedback
+Oracle Open Office Math : user feedback;automatically
+Oracle Open Office Math : user-defined dictionaries
+Oracle Open Office Math : user-defined dictionaries;creating
+Oracle Open Office Math : user-defined dictionaries;dictionary of exceptions
+Oracle Open Office Math : user-defined dictionaries;editing
+Oracle Open Office Math : user-defined operators
+Oracle Open Office Math : user-defined operators;general
+Oracle Open Office Math : user-defined operators;unary and binary
+Oracle Open Office Math : user-defined styles
+Oracle Open Office Math : user-defined styles;automatically replacing
+Oracle Open Office Math : UTF-8/UCS2 support
+Oracle Open Office Math : values
+Oracle Open Office Math : values;absolute
+Oracle Open Office Math : values;rounded as shown (Calc)
+Oracle Open Office Math : variables
+Oracle Open Office Math : variables;for paths
+Oracle Open Office Math : variables;with right exponents
+Oracle Open Office Math : VBA code
+Oracle Open Office Math : VBA code;loading/saving documents with VBA code
+Oracle Open Office Math : vector arrows as attributes
+Oracle Open Office Math : version management
+Oracle Open Office Math : version numbers of documents
+Oracle Open Office Math : versions
+Oracle Open Office Math : versions;comparing documents
+Oracle Open Office Math : versions;file saving as, restriction
+Oracle Open Office Math : versions;merging document versions
+Oracle Open Office Math : versions;of a document
+Oracle Open Office Math : versions;Oracle Open Office
+Oracle Open Office Math : vertical arrangement of elements
+Oracle Open Office Math : vertical bars
+Oracle Open Office Math : vertical callouts
+Oracle Open Office Math : vertical dots symbol
+Oracle Open Office Math : vertical elements
+Oracle Open Office Math : vertical scrollbars (Writer)
+Oracle Open Office Math : vertical text boxes
+Oracle Open Office Math : videos
+Oracle Open Office Math : viewing
+Oracle Open Office Math : viewing;databases
+Oracle Open Office Math : viewing;file properties
+Oracle Open Office Math : viewing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Math : viewing;toolbars
+Oracle Open Office Math : views
+Oracle Open Office Math : views;creating database views (Base)
+Oracle Open Office Math : views;defaults
+Oracle Open Office Math : views;full screen
+Oracle Open Office Math : views;icons
+Oracle Open Office Math : views;maximum size
+Oracle Open Office Math : views;scaling
+Oracle Open Office Math : views;zooming out Oracle Open Office Math
+Oracle Open Office Math : Visual Basic for Applications
+Oracle Open Office Math : Visual Basic for Applications;loading/saving documents with VBA code
+Oracle Open Office Math : watermarks
+Oracle Open Office Math : web documents
+Oracle Open Office Math : web documents;XForms
+Oracle Open Office Math : Web support
+Oracle Open Office Math : WebCast export
+Oracle Open Office Math : WebDAV over HTTPS
+Oracle Open Office Math : weierstrass p symbol
+Oracle Open Office Math : whole numbers
+Oracle Open Office Math : wide circumflex attribute
+Oracle Open Office Math : wide tilde attribute
+Oracle Open Office Math : wide vector arrow attribute
+Oracle Open Office Math : widowed brackets
+Oracle Open Office Math : windows
+Oracle Open Office Math : windows;docking
+Oracle Open Office Math : windows;docking definition
+Oracle Open Office Math : windows;hiding/showing/docking
+Oracle Open Office Math : windows;new
+Oracle Open Office Math : wizards
+Oracle Open Office Math : wizards;agendas
+Oracle Open Office Math : wizards;database queries
+Oracle Open Office Math : wizards;database tables (Base)
+Oracle Open Office Math : wizards;databases (Base)
+Oracle Open Office Math : wizards;document converter
+Oracle Open Office Math : wizards;Euro Converter
+Oracle Open Office Math : wizards;faxes
+Oracle Open Office Math : wizards;forms
+Oracle Open Office Math : wizards;letters
+Oracle Open Office Math : wizards;macros (Base)
+Oracle Open Office Math : wizards;overview
+Oracle Open Office Math : wizards;presentations
+Oracle Open Office Math : wizards;reports
+Oracle Open Office Math : Word documents
+Oracle Open Office Math : Word documents;compatibility
+Oracle Open Office Math : Word documents;saving as
+Oracle Open Office Math : WordArt, see Fontwork
+Oracle Open Office Math : words
+Oracle Open Office Math : words;automatically replacing
+Oracle Open Office Math : words;wrapping in cells
+Oracle Open Office Math : words;wrapping in CTL
+Oracle Open Office Math : working directory change
+Oracle Open Office Math : wrapping text
+Oracle Open Office Math : wrapping text;in cells
+Oracle Open Office Math : wrapping text;in formulas
+Oracle Open Office Math : write protection on/off
+Oracle Open Office Math : writing aids options
+Oracle Open Office Math : WYSIWYG in fonts lists
+Oracle Open Office Math : XForms
+Oracle Open Office Math : XForms;adding/editing/deleting/organizing namespaces
+Oracle Open Office Math : XForms;conditions
+Oracle Open Office Math : XForms;opening/editing
+Oracle Open Office Math : XML converters
+Oracle Open Office Math : XML file formats
+Oracle Open Office Math : XML filters
+Oracle Open Office Math : XML filters;creating/testing
+Oracle Open Office Math : XML filters;saving as package/installing/deleting
+Oracle Open Office Math : XML filters;settings
+Oracle Open Office Math : XML Forms, see XForms
+Oracle Open Office Math : XSLT filters, see also XML filters
+Oracle Open Office Math : years
+Oracle Open Office Math : years;2-digit options
+Oracle Open Office Math : zero values
+Oracle Open Office Math : zero values;displaying (Calc)
+Oracle Open Office Math : zooming
+Oracle Open Office Math : zooming;page views
+Oracle Open Office Math : zooming;pictures
+Oracle Open Office Math : zooming;status bar
+Oracle Open Office Math : zooming in on formula display
+Oracle Open Office Math : zooming out on formula display
+Oracle Open Office Writer : 3D charts
+Oracle Open Office Writer : 3D text creation
+Oracle Open Office Writer : abbreviation replacement
+Oracle Open Office Writer : abbreviations
+Oracle Open Office Writer : absolute hyperlinks
+Oracle Open Office Writer : absolute saving of URLs
+Oracle Open Office Writer : accents
+Oracle Open Office Writer : Access databases (base)
+Oracle Open Office Writer : access rights for database tables (Base)
+Oracle Open Office Writer : accessibility
+Oracle Open Office Writer : accessibility;general shortcuts
+Oracle Open Office Writer : accessibility;options
+Oracle Open Office Writer : accessibility;Oracle Open Office assistive technology
+Oracle Open Office Writer : accessibility;Oracle Open Office features
+Oracle Open Office Writer : accessibility;Oracle Open Office Writer
+Oracle Open Office Writer : activating
+Oracle Open Office Writer : activating;context menus
+Oracle Open Office Writer : activating;Error Report Tool
+Oracle Open Office Writer : activating;extended help tips
+Oracle Open Office Writer : activating;plug-ins
+Oracle Open Office Writer : ActiveX control
+Oracle Open Office Writer : Adabas D databases (base)
+Oracle Open Office Writer : add-ons, see UNO components
+Oracle Open Office Writer : additional selection mode
+Oracle Open Office Writer : address books
+Oracle Open Office Writer : address books;exchanging
+Oracle Open Office Writer : address books;LDAP server (Base)
+Oracle Open Office Writer : address books;registering
+Oracle Open Office Writer : address labels from databases
+Oracle Open Office Writer : adjusting page margins and cell widths
+Oracle Open Office Writer : ADO databases (Base)
+Oracle Open Office Writer : Agenda Wizard
+Oracle Open Office Writer : aging filter
+Oracle Open Office Writer : aligning
+Oracle Open Office Writer : aligning;2D charts
+Oracle Open Office Writer : aligning;cells
+Oracle Open Office Writer : aligning;objects
+Oracle Open Office Writer : aligning;paragraphs
+Oracle Open Office Writer : aligning;tables in text
+Oracle Open Office Writer : aligning;text objects
+Oracle Open Office Writer : aligning;titles in charts
+Oracle Open Office Writer : alphabetical indexes
+Oracle Open Office Writer : alternative fonts
+Oracle Open Office Writer : ampersand symbol, see also operators
+Oracle Open Office Writer : anchors
+Oracle Open Office Writer : anchors;changing
+Oracle Open Office Writer : anchors;displaying (Calc)
+Oracle Open Office Writer : anchors;options
+Oracle Open Office Writer : anchors;types/positions for draw objects
+Oracle Open Office Writer : animations
+Oracle Open Office Writer : animations;accessibility options
+Oracle Open Office Writer : animations;text
+Oracle Open Office Writer : appearance options
+Oracle Open Office Writer : Arabic
+Oracle Open Office Writer : Arabic;entering text
+Oracle Open Office Writer : Arabic;language settings
+Oracle Open Office Writer : area charts
+Oracle Open Office Writer : areas
+Oracle Open Office Writer : areas;bitmap patterns
+Oracle Open Office Writer : areas;hatched/dotted
+Oracle Open Office Writer : areas;shadows
+Oracle Open Office Writer : areas;slanting
+Oracle Open Office Writer : areas;styles
+Oracle Open Office Writer : areas;transparency
+Oracle Open Office Writer : arguments in command line
+Oracle Open Office Writer : arithmetical operators in formulas
+Oracle Open Office Writer : arranging
+Oracle Open Office Writer : arranging;headings
+Oracle Open Office Writer : arranging;objects
+Oracle Open Office Writer : arrows
+Oracle Open Office Writer : arrows;defining arrow heads
+Oracle Open Office Writer : arrows;defining arrow lines
+Oracle Open Office Writer : arrows;drawing in text
+Oracle Open Office Writer : ASCII
+Oracle Open Office Writer : ASCII;definition
+Oracle Open Office Writer : Asian languages
+Oracle Open Office Writer : Asian languages;enabling
+Oracle Open Office Writer : Asian languages;search options
+Oracle Open Office Writer : Asian languages;sorting paragraphs/table rows
+Oracle Open Office Writer : Asian Phonetic Guide
+Oracle Open Office Writer : Asian typography
+Oracle Open Office Writer : aspect ratio
+Oracle Open Office Writer : aspect ratio;resizing objects
+Oracle Open Office Writer : assigning scripts
+Oracle Open Office Writer : assistive technology in Oracle Open Office
+Oracle Open Office Writer : attaching toolbars
+Oracle Open Office Writer : attachments in e-mails
+Oracle Open Office Writer : audio
+Oracle Open Office Writer : auto reloading HTML documents
+Oracle Open Office Writer : AutoAbstract function for sending text to presentations
+Oracle Open Office Writer : AutoCaption function in Oracle Open Office Writer
+Oracle Open Office Writer : AutoComplete function in text and list boxes
+Oracle Open Office Writer : AutoCorrect function
+Oracle Open Office Writer : AutoCorrect function;adding exceptions
+Oracle Open Office Writer : AutoCorrect function;context menu
+Oracle Open Office Writer : AutoCorrect function;options
+Oracle Open Office Writer : AutoCorrect function;pictures and frames
+Oracle Open Office Writer : AutoCorrect function;quotes
+Oracle Open Office Writer : AutoCorrect function;replacement table
+Oracle Open Office Writer : AutoCorrect function;smart tags
+Oracle Open Office Writer : AutoCorrect function;switching on and off in Calc
+Oracle Open Office Writer : AutoCorrect function;turning off
+Oracle Open Office Writer : AutoCorrect function;URL recognition
+Oracle Open Office Writer : AutoCorrect function;word completion
+Oracle Open Office Writer : AutoFormat function
+Oracle Open Office Writer : AutoFormat function;applying to text tables
+Oracle Open Office Writer : AutoFormat function;headings
+Oracle Open Office Writer : AutoFormat function;switching on and off
+Oracle Open Office Writer : AutoFormat function;text documents
+Oracle Open Office Writer : automatic bullets/numbers
+Oracle Open Office Writer : automatic bullets/numbers;AutoCorrect function
+Oracle Open Office Writer : automatic captions (Writer)
+Oracle Open Office Writer : automatic changes on/off
+Oracle Open Office Writer : automatic control focus
+Oracle Open Office Writer : automatic heading formatting
+Oracle Open Office Writer : automatic hyperlink formatting
+Oracle Open Office Writer : automatic hyphenation in text
+Oracle Open Office Writer : automatic line breaks
+Oracle Open Office Writer : automatic lines/borders in text
+Oracle Open Office Writer : automatic numbering
+Oracle Open Office Writer : automatic numbering;of objects
+Oracle Open Office Writer : automatic saving
+Oracle Open Office Writer : automatic spellcheck
+Oracle Open Office Writer : automatic word completion
+Oracle Open Office Writer : AutoPilots, see wizards
+Oracle Open Office Writer : AutoText
+Oracle Open Office Writer : AutoValue (Base)
+Oracle Open Office Writer : averages in charts
+Oracle Open Office Writer : axes
+Oracle Open Office Writer : axes;better scaling
+Oracle Open Office Writer : axes;formatting
+Oracle Open Office Writer : axes;formatting grids
+Oracle Open Office Writer : axes;inserting grids
+Oracle Open Office Writer : axes;interval marks
+Oracle Open Office Writer : axes;showing axes in charts
+Oracle Open Office Writer : axes in charts
+Oracle Open Office Writer : backgrounds
+Oracle Open Office Writer : backgrounds;defining colors/pictures
+Oracle Open Office Writer : backgrounds;different pages
+Oracle Open Office Writer : backgrounds;frames/sections/indexes
+Oracle Open Office Writer : backgrounds;inserting from Gallery
+Oracle Open Office Writer : backgrounds;printing
+Oracle Open Office Writer : backgrounds;text objects
+Oracle Open Office Writer : backing window
+Oracle Open Office Writer : backups
+Oracle Open Office Writer : backups;automatic
+Oracle Open Office Writer : backups;documents
+Oracle Open Office Writer : bar charts
+Oracle Open Office Writer : Basic
+Oracle Open Office Writer : Basic;fonts for source display
+Oracle Open Office Writer : Basic;programming
+Oracle Open Office Writer : Basic;recording macros
+Oracle Open Office Writer : basic fonts
+Oracle Open Office Writer : behavior of rows/columns
+Oracle Open Office Writer : Bézier curves
+Oracle Open Office Writer : Bézier curves;control points in presentations
+Oracle Open Office Writer : bi-directional writing
+Oracle Open Office Writer : bibliographies
+Oracle Open Office Writer : binding space
+Oracle Open Office Writer : bitmaps
+Oracle Open Office Writer : bitmaps;inserting and editing
+Oracle Open Office Writer : bitmaps;off for faster printing
+Oracle Open Office Writer : bitmaps;patterns
+Oracle Open Office Writer : black and white printing
+Oracle Open Office Writer : black printing in Calc
+Oracle Open Office Writer : blank pages with alternating page styles
+Oracle Open Office Writer : block protect, see also widows or orphans
+Oracle Open Office Writer : block selection mode
+Oracle Open Office Writer : blocks of text
+Oracle Open Office Writer : bold
+Oracle Open Office Writer : bold;AutoFormat function
+Oracle Open Office Writer : bold;formatting while typing
+Oracle Open Office Writer : bold;text
+Oracle Open Office Writer : book previews
+Oracle Open Office Writer : book view
+Oracle Open Office Writer : booklet printing
+Oracle Open Office Writer : bookmarks
+Oracle Open Office Writer : bookmarks;Help
+Oracle Open Office Writer : bookmarks;inserting
+Oracle Open Office Writer : bookmarks;positioning cursor
+Oracle Open Office Writer : borders
+Oracle Open Office Writer : borders;arranging
+Oracle Open Office Writer : borders;automatic drawing on/off
+Oracle Open Office Writer : borders;cells on screen (Calc)
+Oracle Open Office Writer : borders;for footnotes/endnotes
+Oracle Open Office Writer : borders;for headers/footers
+Oracle Open Office Writer : borders;for objects
+Oracle Open Office Writer : borders;for pages
+Oracle Open Office Writer : borders;for paragraphs
+Oracle Open Office Writer : borders;for tables
+Oracle Open Office Writer : borders;for text tables
+Oracle Open Office Writer : borders;shadows
+Oracle Open Office Writer : borders;table boundaries (Writer)
+Oracle Open Office Writer : borders, see also frames
+Oracle Open Office Writer : bound fields
+Oracle Open Office Writer : bound fields;controls
+Oracle Open Office Writer : boundaries of tables (Writer)
+Oracle Open Office Writer : break display (Writer)
+Oracle Open Office Writer : brochures
+Oracle Open Office Writer : brochures;printing individual
+Oracle Open Office Writer : brochures;printing several
+Oracle Open Office Writer : brush for copying styles
+Oracle Open Office Writer : bubble charts
+Oracle Open Office Writer : build numbers of Oracle Open Office
+Oracle Open Office Writer : bullet lists
+Oracle Open Office Writer : bullet lists;changing levels
+Oracle Open Office Writer : bullet lists;creating while typing
+Oracle Open Office Writer : bullet lists;formatting options
+Oracle Open Office Writer : bullet lists;interrupting
+Oracle Open Office Writer : bullet lists;turning on and off
+Oracle Open Office Writer : bullets
+Oracle Open Office Writer : bullets;adding and editing
+Oracle Open Office Writer : bullets;paragraphs
+Oracle Open Office Writer : bullets;replacing
+Oracle Open Office Writer : bullets;turning off
+Oracle Open Office Writer : bullets;using automatically
+Oracle Open Office Writer : business cards
+Oracle Open Office Writer : business cards;creating and synchronizing
+Oracle Open Office Writer : business cards;using templates
+Oracle Open Office Writer : button bars, see toolbars
+Oracle Open Office Writer : buttons
+Oracle Open Office Writer : buttons;adding push buttons
+Oracle Open Office Writer : buttons;big/small
+Oracle Open Office Writer : buttons;editing hyperlink buttons
+Oracle Open Office Writer : buttons;form functions
+Oracle Open Office Writer : buttons;toolbars
+Oracle Open Office Writer : cache for graphics
+Oracle Open Office Writer : calculating
+Oracle Open Office Writer : calculating;across multiple text tables
+Oracle Open Office Writer : calculating;formulas/mean values
+Oracle Open Office Writer : calculating;in text
+Oracle Open Office Writer : calculating;in text tables
+Oracle Open Office Writer : calculating;iterative references (Calc)
+Oracle Open Office Writer : calculating;regression curves
+Oracle Open Office Writer : calculating;sums in text tables
+Oracle Open Office Writer : callouts
+Oracle Open Office Writer : callouts;drawings
+Oracle Open Office Writer : capital letters
+Oracle Open Office Writer : capital letters;AutoCorrect function
+Oracle Open Office Writer : capital letters;avoiding after specific abbreviations
+Oracle Open Office Writer : capital letters;changing to small letters
+Oracle Open Office Writer : capital letters;changing to small letters after periods
+Oracle Open Office Writer : capital letters;font effects
+Oracle Open Office Writer : capital letters;starting paragraphs
+Oracle Open Office Writer : captions
+Oracle Open Office Writer : captions;adding chapter numbers
+Oracle Open Office Writer : captions;automatic captions (Writer)
+Oracle Open Office Writer : captions;inserting and editing
+Oracle Open Office Writer : captions;tables/pictures/frames/OLE objects (Writer)
+Oracle Open Office Writer : captions, see also labels/callouts
+Oracle Open Office Writer : cascading update (Base)
+Oracle Open Office Writer : case sensitivity
+Oracle Open Office Writer : case sensitivity;comparing cell contents (Calc)
+Oracle Open Office Writer : case sensitivity;searching
+Oracle Open Office Writer : cell merges
+Oracle Open Office Writer : cells
+Oracle Open Office Writer : cells;adapting the width by keyboard
+Oracle Open Office Writer : cells;aligning
+Oracle Open Office Writer : cells;backgrounds
+Oracle Open Office Writer : cells;borders in text tables
+Oracle Open Office Writer : cells;calculating sums
+Oracle Open Office Writer : cells;coloring (Calc)
+Oracle Open Office Writer : cells;cursor positions after input (Calc)
+Oracle Open Office Writer : cells;enlarging and reducing in text tables
+Oracle Open Office Writer : cells;formatting without effect (Calc)
+Oracle Open Office Writer : cells;inserting from spreadsheets
+Oracle Open Office Writer : cells;line breaks
+Oracle Open Office Writer : cells;linked to controls
+Oracle Open Office Writer : cells;merging/splitting
+Oracle Open Office Writer : cells;number of
+Oracle Open Office Writer : cells;pasting
+Oracle Open Office Writer : cells;protecting/unprotecting
+Oracle Open Office Writer : cells;resetting formats
+Oracle Open Office Writer : cells;showing grid lines (Calc)
+Oracle Open Office Writer : centered text
+Oracle Open Office Writer : centering
+Oracle Open Office Writer : centering;images on HTML pages
+Oracle Open Office Writer : centering;text frames on pages
+Oracle Open Office Writer : centimeters
+Oracle Open Office Writer : central documents
+Oracle Open Office Writer : certificates
+Oracle Open Office Writer : changes
+Oracle Open Office Writer : changes;accepting or rejecting
+Oracle Open Office Writer : changes;automatic
+Oracle Open Office Writer : changes;comparing to original
+Oracle Open Office Writer : changes;protecting
+Oracle Open Office Writer : changes;recording
+Oracle Open Office Writer : changes;review function
+Oracle Open Office Writer : changes;showing
+Oracle Open Office Writer : changing
+Oracle Open Office Writer : changing;bulleting symbols
+Oracle Open Office Writer : changing;cases of text
+Oracle Open Office Writer : changing;document titles
+Oracle Open Office Writer : changing;field shadings
+Oracle Open Office Writer : changing;fields, into text
+Oracle Open Office Writer : changing;file associations in Setup program
+Oracle Open Office Writer : changing;icon sizes
+Oracle Open Office Writer : changing;indents
+Oracle Open Office Writer : changing;links
+Oracle Open Office Writer : changing;outline levels
+Oracle Open Office Writer : changing;page backgrounds
+Oracle Open Office Writer : changing;starting numbers in lists
+Oracle Open Office Writer : changing;work directory
+Oracle Open Office Writer : changing, see also editing and replacing
+Oracle Open Office Writer : chapter names in headers
+Oracle Open Office Writer : chapter numbering
+Oracle Open Office Writer : chapter numbers in captions
+Oracle Open Office Writer : character styles
+Oracle Open Office Writer : character styles;language selection
+Oracle Open Office Writer : character styles;style categories
+Oracle Open Office Writer : characters
+Oracle Open Office Writer : characters;alternative fonts
+Oracle Open Office Writer : characters;Asian layout
+Oracle Open Office Writer : characters;bold
+Oracle Open Office Writer : characters;coloring
+Oracle Open Office Writer : characters;counting
+Oracle Open Office Writer : characters;displaying only on screen (Writer)
+Oracle Open Office Writer : characters;enabling CTL and Asian characters
+Oracle Open Office Writer : characters;finding all
+Oracle Open Office Writer : characters;font effects
+Oracle Open Office Writer : characters;fonts and formats
+Oracle Open Office Writer : characters;hyperlinks
+Oracle Open Office Writer : characters;italics
+Oracle Open Office Writer : characters;language selection
+Oracle Open Office Writer : characters;shadowed
+Oracle Open Office Writer : characters;spacing
+Oracle Open Office Writer : characters;special
+Oracle Open Office Writer : characters;subscript and superscript
+Oracle Open Office Writer : characters;underlining
+Oracle Open Office Writer : characters;uppercase or lowercase
+Oracle Open Office Writer : charcoal sketches filter
+Oracle Open Office Writer : chart legends
+Oracle Open Office Writer : chart legends;hiding
+Oracle Open Office Writer : chart legends;showing icons with labels
+Oracle Open Office Writer : chart types
+Oracle Open Office Writer : chart types;area
+Oracle Open Office Writer : chart types;bubble
+Oracle Open Office Writer : chart types;column and bar
+Oracle Open Office Writer : chart types;column and line
+Oracle Open Office Writer : chart types;line
+Oracle Open Office Writer : chart types;net
+Oracle Open Office Writer : chart types;pie/donut
+Oracle Open Office Writer : chart types;stock
+Oracle Open Office Writer : chart types;XY (scatter)
+Oracle Open Office Writer : charts
+Oracle Open Office Writer : charts;3D views
+Oracle Open Office Writer : charts;aligning
+Oracle Open Office Writer : charts;arranging within stacks
+Oracle Open Office Writer : charts;bars with textures
+Oracle Open Office Writer : charts;borders
+Oracle Open Office Writer : charts;choosing chart types
+Oracle Open Office Writer : charts;colors
+Oracle Open Office Writer : charts;copying from Calc into Writer
+Oracle Open Office Writer : charts;copying with link to source cell range
+Oracle Open Office Writer : charts;data labels
+Oracle Open Office Writer : charts;displaying (Calc)
+Oracle Open Office Writer : charts;editing axes
+Oracle Open Office Writer : charts;editing data
+Oracle Open Office Writer : charts;editing legends
+Oracle Open Office Writer : charts;editing titles
+Oracle Open Office Writer : charts;formatting areas
+Oracle Open Office Writer : charts;formatting floors
+Oracle Open Office Writer : charts;formatting walls
+Oracle Open Office Writer : charts;inserting
+Oracle Open Office Writer : charts;labeling
+Oracle Open Office Writer : charts;overview
+Oracle Open Office Writer : charts;positioning axes
+Oracle Open Office Writer : charts;properties
+Oracle Open Office Writer : charts;reorganizing
+Oracle Open Office Writer : charts;scaling axes
+Oracle Open Office Writer : charts;scaling text
+Oracle Open Office Writer : charts;shortcuts
+Oracle Open Office Writer : charts;showing axes
+Oracle Open Office Writer : charts;updating automatically (Writer)
+Oracle Open Office Writer : check box creation
+Oracle Open Office Writer : checking spelling
+Oracle Open Office Writer : checking spelling;all languages
+Oracle Open Office Writer : checking spelling;manually
+Oracle Open Office Writer : checking spelling;while typing
+Oracle Open Office Writer : Chinese writing systems
+Oracle Open Office Writer : choosing printers
+Oracle Open Office Writer : circle drawings
+Oracle Open Office Writer : Client Side ImageMap
+Oracle Open Office Writer : clipboard
+Oracle Open Office Writer : clipboard;calculating in text
+Oracle Open Office Writer : clipboard;cutting
+Oracle Open Office Writer : clipboard;pasting
+Oracle Open Office Writer : clipboard;pasting formatted/unformatted text
+Oracle Open Office Writer : clipboard;selection clipboard
+Oracle Open Office Writer : clipboard;Unix
+Oracle Open Office Writer : closing
+Oracle Open Office Writer : closing;documents
+Oracle Open Office Writer : closing;toolbars
+Oracle Open Office Writer : collaboration
+Oracle Open Office Writer : color bar
+Oracle Open Office Writer : colors
+Oracle Open Office Writer : colors;adding
+Oracle Open Office Writer : colors;appearance
+Oracle Open Office Writer : colors;backgrounds
+Oracle Open Office Writer : colors;charts
+Oracle Open Office Writer : colors;fill format
+Oracle Open Office Writer : colors;fonts
+Oracle Open Office Writer : colors;grid lines and cells (Calc)
+Oracle Open Office Writer : colors;models
+Oracle Open Office Writer : colors;not printing
+Oracle Open Office Writer : colors;printing in grayscale
+Oracle Open Office Writer : colors;restriction (Calc)
+Oracle Open Office Writer : colors;selection
+Oracle Open Office Writer : column and line charts
+Oracle Open Office Writer : column charts
+Oracle Open Office Writer : column headers
+Oracle Open Office Writer : column headers;displaying (Calc)
+Oracle Open Office Writer : column headers;highlighting (Calc)
+Oracle Open Office Writer : columns
+Oracle Open Office Writer : columns;breaks in text tables
+Oracle Open Office Writer : columns;inserting in tables
+Oracle Open Office Writer : columns;inserting/deleting in tables by keyboard
+Oracle Open Office Writer : columns;on text pages
+Oracle Open Office Writer : columns;selecting
+Oracle Open Office Writer : columns;setting with the mouse
+Oracle Open Office Writer : combination charts
+Oracle Open Office Writer : combo box creation
+Oracle Open Office Writer : command button creation
+Oracle Open Office Writer : command buttons, see push buttons
+Oracle Open Office Writer : command line parameters
+Oracle Open Office Writer : commands
+Oracle Open Office Writer : commands;repeating
+Oracle Open Office Writer : commands;SQL
+Oracle Open Office Writer : comments
+Oracle Open Office Writer : comments;displaying (Calc)
+Oracle Open Office Writer : comments;inserting/editing/deleting/printing
+Oracle Open Office Writer : comments;on changes
+Oracle Open Office Writer : comments;printing in text
+Oracle Open Office Writer : common terms
+Oracle Open Office Writer : common terms;Chinese dictionary
+Oracle Open Office Writer : common terms;glossaries
+Oracle Open Office Writer : common terms;Internet glossary
+Oracle Open Office Writer : comparisons
+Oracle Open Office Writer : comparisons;document versions
+Oracle Open Office Writer : comparisons;operators in default filter dialog
+Oracle Open Office Writer : compatibility settings for MS Word import
+Oracle Open Office Writer : complete screen view
+Oracle Open Office Writer : completion of words
+Oracle Open Office Writer : complex text layout
+Oracle Open Office Writer : complex text layout;definition
+Oracle Open Office Writer : complex text layout;enabling
+Oracle Open Office Writer : complex text layout, see CTL
+Oracle Open Office Writer : compose key to insert special characters
+Oracle Open Office Writer : concatenation, see ampersand symbol
+Oracle Open Office Writer : concordance files
+Oracle Open Office Writer : concordance files;definition
+Oracle Open Office Writer : concordance files;indexes
+Oracle Open Office Writer : conditional separators
+Oracle Open Office Writer : conditional styles
+Oracle Open Office Writer : conditional text
+Oracle Open Office Writer : conditional text;page counts
+Oracle Open Office Writer : conditional text;setting up
+Oracle Open Office Writer : conditions
+Oracle Open Office Writer : conditions;in fields and sections
+Oracle Open Office Writer : conditions;in number formats
+Oracle Open Office Writer : conditions;items in Data Navigator
+Oracle Open Office Writer : conditions;user data fields
+Oracle Open Office Writer : Configuration Manager
+Oracle Open Office Writer : configuring
+Oracle Open Office Writer : configuring;fax icon
+Oracle Open Office Writer : configuring;Oracle Open Office
+Oracle Open Office Writer : configuring;toolbars
+Oracle Open Office Writer : connections to data sources (Base)
+Oracle Open Office Writer : contents protection
+Oracle Open Office Writer : context menus
+Oracle Open Office Writer : continuation pages
+Oracle Open Office Writer : contour editor
+Oracle Open Office Writer : contour wrap
+Oracle Open Office Writer : control point display in presentations
+Oracle Open Office Writer : controls
+Oracle Open Office Writer : controls;activating in forms
+Oracle Open Office Writer : controls;adding to documents
+Oracle Open Office Writer : controls;arranging in forms
+Oracle Open Office Writer : controls;arranging within stacks
+Oracle Open Office Writer : controls;assigning data sources
+Oracle Open Office Writer : controls;assigning macros (Basic)
+Oracle Open Office Writer : controls;bound fields/list contents/linked cells
+Oracle Open Office Writer : controls;events
+Oracle Open Office Writer : controls;focus
+Oracle Open Office Writer : controls;formatted fields
+Oracle Open Office Writer : controls;grouping
+Oracle Open Office Writer : controls;hidden
+Oracle Open Office Writer : controls;inserting
+Oracle Open Office Writer : controls;multi-line titles
+Oracle Open Office Writer : controls;positions and sizes
+Oracle Open Office Writer : controls;printing
+Oracle Open Office Writer : controls;properties of form controls
+Oracle Open Office Writer : controls;properties of table controls
+Oracle Open Office Writer : controls;reference by SQL
+Oracle Open Office Writer : controls;rich text control
+Oracle Open Office Writer : controls;select mode
+Oracle Open Office Writer : controls;showing (Writer)
+Oracle Open Office Writer : converters
+Oracle Open Office Writer : converters;Euro converter
+Oracle Open Office Writer : converters;PostScript, UNIX
+Oracle Open Office Writer : converters;XML
+Oracle Open Office Writer : converting
+Oracle Open Office Writer : converting;fields, into text
+Oracle Open Office Writer : converting;Hangul/Hanja
+Oracle Open Office Writer : converting;metrics
+Oracle Open Office Writer : converting;Microsoft documents
+Oracle Open Office Writer : converting;Oracle Open Office documents
+Oracle Open Office Writer : converting;Pocket PC formats
+Oracle Open Office Writer : converting;sections, into normal text
+Oracle Open Office Writer : converting;text, into tables
+Oracle Open Office Writer : copies
+Oracle Open Office Writer : copies;printing
+Oracle Open Office Writer : copies;removing line breaks
+Oracle Open Office Writer : copying
+Oracle Open Office Writer : copying;by drag and drop
+Oracle Open Office Writer : copying;charts from Oracle Open Office Calc
+Oracle Open Office Writer : copying;data from text documents
+Oracle Open Office Writer : copying;datasource records in spreadsheets
+Oracle Open Office Writer : copying;draw objects
+Oracle Open Office Writer : copying;draw objects between documents
+Oracle Open Office Writer : copying;formatting
+Oracle Open Office Writer : copying;from data source view
+Oracle Open Office Writer : copying;from Gallery
+Oracle Open Office Writer : copying;in Unix
+Oracle Open Office Writer : copying;pictures, between documents
+Oracle Open Office Writer : copying;sheet areas, to text documents
+Oracle Open Office Writer : copying;styles, by fill format mode
+Oracle Open Office Writer : copying;styles, from selections
+Oracle Open Office Writer : copying;text sections
+Oracle Open Office Writer : copying;to Gallery
+Oracle Open Office Writer : copyright for Oracle Open Office
+Oracle Open Office Writer : corner roundings
+Oracle Open Office Writer : counting words
+Oracle Open Office Writer : crash reports
+Oracle Open Office Writer : criteria of query design (Base)
+Oracle Open Office Writer : cropping pictures
+Oracle Open Office Writer : cross-references
+Oracle Open Office Writer : cross-references;inserting and updating
+Oracle Open Office Writer : cross-references;inserting with Navigator
+Oracle Open Office Writer : cross-references;modifying
+Oracle Open Office Writer : CTL
+Oracle Open Office Writer : CTL;(not) wrapping words
+Oracle Open Office Writer : CTL;complex text layout languages
+Oracle Open Office Writer : CTL;definition
+Oracle Open Office Writer : CTL;options
+Oracle Open Office Writer : currencies
+Oracle Open Office Writer : currencies;converters
+Oracle Open Office Writer : currencies;format codes
+Oracle Open Office Writer : currency field creation
+Oracle Open Office Writer : currency formats
+Oracle Open Office Writer : cursor
+Oracle Open Office Writer : cursor;allowing in protected areas (Writer)
+Oracle Open Office Writer : cursor;direct cursor
+Oracle Open Office Writer : cursor;in read-only text
+Oracle Open Office Writer : cursor;quickly moving to an object
+Oracle Open Office Writer : curves
+Oracle Open Office Writer : curves;editing points
+Oracle Open Office Writer : curves;properties in line charts/XY charts
+Oracle Open Office Writer : custom dictionaries
+Oracle Open Office Writer : custom dictionaries;editing
+Oracle Open Office Writer : custom dictionaries;removing words from
+Oracle Open Office Writer : custom hyphens (Writer)
+Oracle Open Office Writer : custom quotes
+Oracle Open Office Writer : custom templates
+Oracle Open Office Writer : customizing
+Oracle Open Office Writer : customizing;events
+Oracle Open Office Writer : customizing;keyboard
+Oracle Open Office Writer : customizing;menus
+Oracle Open Office Writer : customizing;Oracle Open Office
+Oracle Open Office Writer : customizing;round corners
+Oracle Open Office Writer : customizing;toolbars
+Oracle Open Office Writer : cutting
+Oracle Open Office Writer : dashes
+Oracle Open Office Writer : data
+Oracle Open Office Writer : data;filtering in forms
+Oracle Open Office Writer : data;forms and subforms
+Oracle Open Office Writer : data;read-only
+Oracle Open Office Writer : data;sorting in forms
+Oracle Open Office Writer : data;user data
+Oracle Open Office Writer : data binding change in XForms
+Oracle Open Office Writer : data labels in charts
+Oracle Open Office Writer : Data Navigator
+Oracle Open Office Writer : Data Navigator;adding/editing items
+Oracle Open Office Writer : Data Navigator;display options
+Oracle Open Office Writer : data ranges in charts
+Oracle Open Office Writer : data series
+Oracle Open Office Writer : data source browser
+Oracle Open Office Writer : data source explorer
+Oracle Open Office Writer : data source view
+Oracle Open Office Writer : data source view;drag and drop
+Oracle Open Office Writer : data source view;overview
+Oracle Open Office Writer : data source view;showing
+Oracle Open Office Writer : data sources
+Oracle Open Office Writer : data sources;as tables
+Oracle Open Office Writer : data sources;connection settings (Base)
+Oracle Open Office Writer : data sources;copying records to spreadsheets
+Oracle Open Office Writer : data sources;displaying current
+Oracle Open Office Writer : data sources;LDAP server (Base)
+Oracle Open Office Writer : data sources;Oracle Open Office Base
+Oracle Open Office Writer : data sources;registering address books
+Oracle Open Office Writer : data sources;reports
+Oracle Open Office Writer : data sources;setting for stock charts
+Oracle Open Office Writer : data sources;viewing
+Oracle Open Office Writer : data structure of XForms
+Oracle Open Office Writer : data values in charts
+Oracle Open Office Writer : data, see also values
+Oracle Open Office Writer : database contents
+Oracle Open Office Writer : database contents;inserting as tables
+Oracle Open Office Writer : database contents;inserting as text
+Oracle Open Office Writer : database reports
+Oracle Open Office Writer : Database Wizard (Base)
+Oracle Open Office Writer : databases
+Oracle Open Office Writer : databases;administration through SQL (Base)
+Oracle Open Office Writer : databases;ADO (Base)
+Oracle Open Office Writer : databases;connecting (Base)
+Oracle Open Office Writer : databases;creating
+Oracle Open Office Writer : databases;creating bibliographies
+Oracle Open Office Writer : databases;creating labels
+Oracle Open Office Writer : databases;creating queries
+Oracle Open Office Writer : databases;creating reports
+Oracle Open Office Writer : databases;creating tables
+Oracle Open Office Writer : databases;deleting (Base)
+Oracle Open Office Writer : databases;drag and drop (Base)
+Oracle Open Office Writer : databases;editing tables
+Oracle Open Office Writer : databases;exchanging
+Oracle Open Office Writer : databases;form filters
+Oracle Open Office Writer : databases;formats (Base)
+Oracle Open Office Writer : databases;importing/exporting
+Oracle Open Office Writer : databases;in conditions
+Oracle Open Office Writer : databases;JDBC (Base)
+Oracle Open Office Writer : databases;main page (Base)
+Oracle Open Office Writer : databases;ODBC (Base)
+Oracle Open Office Writer : databases;overview
+Oracle Open Office Writer : databases;registering (Base)
+Oracle Open Office Writer : databases;searching records
+Oracle Open Office Writer : databases;shortcut keys
+Oracle Open Office Writer : databases;sorting
+Oracle Open Office Writer : databases;standard filters
+Oracle Open Office Writer : databases;text formats
+Oracle Open Office Writer : databases;viewing
+Oracle Open Office Writer : date fields
+Oracle Open Office Writer : date fields;creating
+Oracle Open Office Writer : date fields;fixed/variable
+Oracle Open Office Writer : date fields;HTML
+Oracle Open Office Writer : date fields;properties
+Oracle Open Office Writer : date formats
+Oracle Open Office Writer : dates
+Oracle Open Office Writer : dates;default (Calc)
+Oracle Open Office Writer : dates;formatting automatically in tables
+Oracle Open Office Writer : dates;inserting
+Oracle Open Office Writer : dates;printing in presentations
+Oracle Open Office Writer : dates;start 1900/01/01 (Calc)
+Oracle Open Office Writer : dates;start 1904/01/01 (Calc)
+Oracle Open Office Writer : dBASE
+Oracle Open Office Writer : dBASE;database settings (Base)
+Oracle Open Office Writer : DDE
+Oracle Open Office Writer : DDE;command for inserting sections
+Oracle Open Office Writer : DDE;definition
+Oracle Open Office Writer : DDE;inserting tables
+Oracle Open Office Writer : deactivating
+Oracle Open Office Writer : deactivating;plug-ins
+Oracle Open Office Writer : deactivating;word completion
+Oracle Open Office Writer : decimal places displayed (Calc)
+Oracle Open Office Writer : decimal separator key
+Oracle Open Office Writer : decimal tab stops
+Oracle Open Office Writer : default directories
+Oracle Open Office Writer : default filters
+Oracle Open Office Writer : default filters;comparison operators
+Oracle Open Office Writer : default filters;databases
+Oracle Open Office Writer : default printer
+Oracle Open Office Writer : default printer;setting up
+Oracle Open Office Writer : default printer;UNIX
+Oracle Open Office Writer : default templates
+Oracle Open Office Writer : default templates;changing
+Oracle Open Office Writer : default templates;defining/resetting
+Oracle Open Office Writer : default templates;organizing
+Oracle Open Office Writer : defaults
+Oracle Open Office Writer : defaults;documents
+Oracle Open Office Writer : defaults;file formats in file dialogs
+Oracle Open Office Writer : defaults;file formats in Oracle Open Office
+Oracle Open Office Writer : defaults;fonts
+Oracle Open Office Writer : defaults;grids (Writer/Calc)
+Oracle Open Office Writer : defaults;languages
+Oracle Open Office Writer : defaults;number formats
+Oracle Open Office Writer : defaults;of saving
+Oracle Open Office Writer : defaults;program configuration
+Oracle Open Office Writer : defaults;tab stops in text
+Oracle Open Office Writer : defaults;templates
+Oracle Open Office Writer : defaults;views
+Oracle Open Office Writer : defining
+Oracle Open Office Writer : defining;arrowheads and other line ends
+Oracle Open Office Writer : defining;colors
+Oracle Open Office Writer : defining;conditions
+Oracle Open Office Writer : defining;headers/footers
+Oracle Open Office Writer : defining;line styles
+Oracle Open Office Writer : defining;object borders
+Oracle Open Office Writer : defining;page borders
+Oracle Open Office Writer : defining;page styles
+Oracle Open Office Writer : defining;paragraph borders
+Oracle Open Office Writer : defining;queries (Base)
+Oracle Open Office Writer : defining;starting page numbers
+Oracle Open Office Writer : defining;table borders
+Oracle Open Office Writer : defining;table borders in Writer
+Oracle Open Office Writer : deleting
+Oracle Open Office Writer : deleting;all direct formatting
+Oracle Open Office Writer : deleting;comments
+Oracle Open Office Writer : deleting;databases (Base)
+Oracle Open Office Writer : deleting;entries of indexes/tables of contents
+Oracle Open Office Writer : deleting;footnotes
+Oracle Open Office Writer : deleting;heading numbers
+Oracle Open Office Writer : deleting;hyperlinks
+Oracle Open Office Writer : deleting;indexes/tables of contents
+Oracle Open Office Writer : deleting;line breaks
+Oracle Open Office Writer : deleting;lines in text
+Oracle Open Office Writer : deleting;models/instances
+Oracle Open Office Writer : deleting;namespaces in XForms
+Oracle Open Office Writer : deleting;numbers in lists
+Oracle Open Office Writer : deleting;page breaks
+Oracle Open Office Writer : deleting;rows/columns, by keyboard
+Oracle Open Office Writer : deleting;tab stops
+Oracle Open Office Writer : deleting;tables or table contents
+Oracle Open Office Writer : deleting;templates
+Oracle Open Office Writer : deleting;words in user-defined dictionaries
+Oracle Open Office Writer : deleting;XML filters
+Oracle Open Office Writer : demoting heading levels
+Oracle Open Office Writer : depth stagger
+Oracle Open Office Writer : descriptions for objects
+Oracle Open Office Writer : design mode after saving
+Oracle Open Office Writer : design view
+Oracle Open Office Writer : design view;creating forms
+Oracle Open Office Writer : design view;queries/views (Base)
+Oracle Open Office Writer : designing
+Oracle Open Office Writer : designing;database tables
+Oracle Open Office Writer : designing;fonts
+Oracle Open Office Writer : designing;queries (Base)
+Oracle Open Office Writer : detaching toolbars
+Oracle Open Office Writer : dictionaries
+Oracle Open Office Writer : dictionaries;common terms in simplified and traditional chinese
+Oracle Open Office Writer : dictionaries;creating
+Oracle Open Office Writer : dictionaries;editing user-defined
+Oracle Open Office Writer : dictionaries;spellcheck
+Oracle Open Office Writer : dictionaries;thesaurus
+Oracle Open Office Writer : dictionaries, see also languages
+Oracle Open Office Writer : digital signatures
+Oracle Open Office Writer : digital signatures;getting/managing/applying
+Oracle Open Office Writer : digital signatures;overview
+Oracle Open Office Writer : digital signatures;WebDAV over HTTPS
+Oracle Open Office Writer : direct cursor
+Oracle Open Office Writer : direct cursor;restriction
+Oracle Open Office Writer : direct cursor;settings
+Oracle Open Office Writer : direct formatting
+Oracle Open Office Writer : direct formatting;exiting
+Oracle Open Office Writer : direct formatting;undoing all
+Oracle Open Office Writer : directories
+Oracle Open Office Writer : directories;creating new
+Oracle Open Office Writer : directories;directory structure
+Oracle Open Office Writer : disabled persons
+Oracle Open Office Writer : disabling
+Oracle Open Office Writer : disabling;field highlighting
+Oracle Open Office Writer : disabling;smart tags
+Oracle Open Office Writer : disabling;word completion
+Oracle Open Office Writer : displaying
+Oracle Open Office Writer : displaying;comments (Calc)
+Oracle Open Office Writer : displaying;comments in text documents
+Oracle Open Office Writer : displaying;hidden text
+Oracle Open Office Writer : displaying;non-printing characters (Writer)
+Oracle Open Office Writer : displaying;pictures and objects (Writer)
+Oracle Open Office Writer : displaying;tables (Writer)
+Oracle Open Office Writer : displaying;zero values (Calc)
+Oracle Open Office Writer : distances
+Oracle Open Office Writer : distinct values in SQL queries
+Oracle Open Office Writer : distorting in drawings
+Oracle Open Office Writer : distributing XML filters
+Oracle Open Office Writer : dividing tables
+Oracle Open Office Writer : DocInformation fields
+Oracle Open Office Writer : docking
+Oracle Open Office Writer : docking;definition
+Oracle Open Office Writer : docking;Navigator window
+Oracle Open Office Writer : docking;toolbars
+Oracle Open Office Writer : docking;windows
+Oracle Open Office Writer : Document Converter Wizard
+Oracle Open Office Writer : Document Map, see Navigator
+Oracle Open Office Writer : document templates
+Oracle Open Office Writer : document types in Oracle Open Office
+Oracle Open Office Writer : documents
+Oracle Open Office Writer : documents;changing titles
+Oracle Open Office Writer : documents;closing
+Oracle Open Office Writer : documents;comparing
+Oracle Open Office Writer : documents;contents as lists
+Oracle Open Office Writer : documents;editing time
+Oracle Open Office Writer : documents;exporting
+Oracle Open Office Writer : documents;importing
+Oracle Open Office Writer : documents;languages
+Oracle Open Office Writer : documents;master documents and subdocuments
+Oracle Open Office Writer : documents;measurement units in
+Oracle Open Office Writer : documents;merging
+Oracle Open Office Writer : documents;number of pages/tables/sheets
+Oracle Open Office Writer : documents;number of words/characters
+Oracle Open Office Writer : documents;opening
+Oracle Open Office Writer : documents;opening in design mode
+Oracle Open Office Writer : documents;opening with templates
+Oracle Open Office Writer : documents;organizing
+Oracle Open Office Writer : documents;printing
+Oracle Open Office Writer : documents;read-only
+Oracle Open Office Writer : documents;reloading
+Oracle Open Office Writer : documents;saving
+Oracle Open Office Writer : documents;saving automatically
+Oracle Open Office Writer : documents;saving in other formats
+Oracle Open Office Writer : documents;sending as e-mail
+Oracle Open Office Writer : documents;styles changed
+Oracle Open Office Writer : documents;version management
+Oracle Open Office Writer : documents;version numbers
+Oracle Open Office Writer : donut charts
+Oracle Open Office Writer : dotted areas
+Oracle Open Office Writer : double-line spacing in paragraphs
+Oracle Open Office Writer : double-line writing in Asian layout
+Oracle Open Office Writer : drag and drop
+Oracle Open Office Writer : drag and drop;copying and pasting text
+Oracle Open Office Writer : drag and drop;creating new styles
+Oracle Open Office Writer : drag and drop;data source view
+Oracle Open Office Writer : drag and drop;from Gallery to draw objects
+Oracle Open Office Writer : drag and drop;overview
+Oracle Open Office Writer : drag and drop;pictures
+Oracle Open Office Writer : drag and drop;to Gallery
+Oracle Open Office Writer : draw objects
+Oracle Open Office Writer : draw objects;adding/editing/copying
+Oracle Open Office Writer : draw objects;anchoring
+Oracle Open Office Writer : draw objects;arranging within stacks
+Oracle Open Office Writer : draw objects;copying between documents
+Oracle Open Office Writer : draw objects;cross-referencing
+Oracle Open Office Writer : draw objects;displaying (Calc)
+Oracle Open Office Writer : draw objects;dropping Gallery pictures
+Oracle Open Office Writer : draw objects;flipping
+Oracle Open Office Writer : draw objects;inserting captions
+Oracle Open Office Writer : draw objects;legends
+Oracle Open Office Writer : draw objects;positioning and resizing
+Oracle Open Office Writer : draw objects;protecting
+Oracle Open Office Writer : draw objects;slanting
+Oracle Open Office Writer : draw objects;text in
+Oracle Open Office Writer : Drawing bar
+Oracle Open Office Writer : drawing lines in text
+Oracle Open Office Writer : drawings
+Oracle Open Office Writer : drawings;creating/opening
+Oracle Open Office Writer : drawings;languages
+Oracle Open Office Writer : drawings;printing
+Oracle Open Office Writer : drawings;printing defaults
+Oracle Open Office Writer : drawings;printing in text documents
+Oracle Open Office Writer : drawings;saving
+Oracle Open Office Writer : drawings;saving automatically
+Oracle Open Office Writer : drawings;saving in other formats
+Oracle Open Office Writer : drawings;sending as e-mail
+Oracle Open Office Writer : drawings;showing (Writer)
+Oracle Open Office Writer : drawings, see also draw objects
+Oracle Open Office Writer : drop caps insertion
+Oracle Open Office Writer : drop-down lists in form functions
+Oracle Open Office Writer : e-mail attachments
+Oracle Open Office Writer : Edit File icon
+Oracle Open Office Writer : edit mode
+Oracle Open Office Writer : edit mode;after opening
+Oracle Open Office Writer : edit mode;through Enter key (Calc)
+Oracle Open Office Writer : Edit Points bar
+Oracle Open Office Writer : editing
+Oracle Open Office Writer : editing;captions
+Oracle Open Office Writer : editing;chart axes
+Oracle Open Office Writer : editing;chart data
+Oracle Open Office Writer : editing;chart legends
+Oracle Open Office Writer : editing;chart titles
+Oracle Open Office Writer : editing;comments
+Oracle Open Office Writer : editing;concordance files
+Oracle Open Office Writer : editing;cross-references
+Oracle Open Office Writer : editing;data binding of XForms
+Oracle Open Office Writer : editing;database tables and queries
+Oracle Open Office Writer : editing;draw objects
+Oracle Open Office Writer : editing;Fontwork objects
+Oracle Open Office Writer : editing;footnotes/endnotes
+Oracle Open Office Writer : editing;hyperlinks
+Oracle Open Office Writer : editing;index format
+Oracle Open Office Writer : editing;indexes/tables of contents
+Oracle Open Office Writer : editing;menus
+Oracle Open Office Writer : editing;objects
+Oracle Open Office Writer : editing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Writer : editing;pictures
+Oracle Open Office Writer : editing;reports
+Oracle Open Office Writer : editing;sections
+Oracle Open Office Writer : editing;shortcut keys
+Oracle Open Office Writer : editing;tab stops
+Oracle Open Office Writer : editing;table/index entries
+Oracle Open Office Writer : editing;templates
+Oracle Open Office Writer : editing;text frames
+Oracle Open Office Writer : editing;titles
+Oracle Open Office Writer : editing;toolbars
+Oracle Open Office Writer : editing;undoing
+Oracle Open Office Writer : editing;XForms
+Oracle Open Office Writer : editing time of documents
+Oracle Open Office Writer : editors
+Oracle Open Office Writer : editors;contour editor
+Oracle Open Office Writer : editors;formula editor
+Oracle Open Office Writer : editors;ImageMap editor
+Oracle Open Office Writer : effects
+Oracle Open Office Writer : effects;font positions
+Oracle Open Office Writer : effects;fonts
+Oracle Open Office Writer : effects;Fontwork icons
+Oracle Open Office Writer : effects;text animation
+Oracle Open Office Writer : emphasizing text
+Oracle Open Office Writer : empty documents
+Oracle Open Office Writer : empty page with alternating page styles
+Oracle Open Office Writer : empty paragraph removal
+Oracle Open Office Writer : encryption of contents
+Oracle Open Office Writer : endnotes
+Oracle Open Office Writer : endnotes;inserting and editing
+Oracle Open Office Writer : endnotes;spacing
+Oracle Open Office Writer : enlarging columns,cells and table rows
+Oracle Open Office Writer : entering groups
+Oracle Open Office Writer : entering text from right to left
+Oracle Open Office Writer : entering text with direct cursor
+Oracle Open Office Writer : entries
+Oracle Open Office Writer : entries;bibliographies
+Oracle Open Office Writer : entries;defining in indexes/tables of contents
+Oracle Open Office Writer : entries;in tables of contents, as hyperlinks
+Oracle Open Office Writer : envelopes
+Oracle Open Office Writer : equal sign, see also operators
+Oracle Open Office Writer : equations in formula editor
+Oracle Open Office Writer : error bars in charts
+Oracle Open Office Writer : error indicators in charts
+Oracle Open Office Writer : Error Report Tool
+Oracle Open Office Writer : Euro
+Oracle Open Office Writer : Euro;currency formats
+Oracle Open Office Writer : Euro;Euro Converter Wizard
+Oracle Open Office Writer : even/odd pages
+Oracle Open Office Writer : even/odd pages;formatting
+Oracle Open Office Writer : even/odd pages;printing
+Oracle Open Office Writer : events
+Oracle Open Office Writer : events;assigning scripts
+Oracle Open Office Writer : events;controls
+Oracle Open Office Writer : events;customizing
+Oracle Open Office Writer : events;in forms
+Oracle Open Office Writer : examples for regular expressions
+Oracle Open Office Writer : Excel
+Oracle Open Office Writer : Excel;saving as
+Oracle Open Office Writer : Excel;search criteria
+Oracle Open Office Writer : exceptions
+Oracle Open Office Writer : exceptions;AutoCorrect function
+Oracle Open Office Writer : exceptions;user-defined dictionaries
+Oracle Open Office Writer : exchanging databases
+Oracle Open Office Writer : exchanging, see also replacing
+Oracle Open Office Writer : executing SQL commands
+Oracle Open Office Writer : exiting
+Oracle Open Office Writer : exiting;direct formatting
+Oracle Open Office Writer : exiting;groups
+Oracle Open Office Writer : exiting;Oracle Open Office
+Oracle Open Office Writer : expanding formatting (Calc)
+Oracle Open Office Writer : explorer of data sources
+Oracle Open Office Writer : export filters
+Oracle Open Office Writer : exporting
+Oracle Open Office Writer : exporting;bitmaps
+Oracle Open Office Writer : exporting;HTML and text documents
+Oracle Open Office Writer : exporting;Microsoft Office documents with VBA code
+Oracle Open Office Writer : exporting;spreadsheets to text format
+Oracle Open Office Writer : exporting;templates
+Oracle Open Office Writer : exporting;to foreign formats
+Oracle Open Office Writer : exporting;to HTML
+Oracle Open Office Writer : exporting;to Microsoft Office formats
+Oracle Open Office Writer : exporting;to PDF
+Oracle Open Office Writer : exporting;to PostScript format
+Oracle Open Office Writer : exporting;to XML
+Oracle Open Office Writer : exporting;XML files
+Oracle Open Office Writer : extended tips in Help
+Oracle Open Office Writer : extension mode in text
+Oracle Open Office Writer : extensions
+Oracle Open Office Writer : extensions;Extension Manager
+Oracle Open Office Writer : extensions;file formats
+Oracle Open Office Writer : external keys (Base)
+Oracle Open Office Writer : faster printing
+Oracle Open Office Writer : faxes
+Oracle Open Office Writer : faxes;configuring Oracle Open Office
+Oracle Open Office Writer : faxes;fax programs/fax printers under UNIX
+Oracle Open Office Writer : faxes;selecting a fax machine
+Oracle Open Office Writer : faxes;sending
+Oracle Open Office Writer : faxes;wizards
+Oracle Open Office Writer : feedback
+Oracle Open Office Writer : feedback;automatically
+Oracle Open Office Writer : fields
+Oracle Open Office Writer : fields;converting into text
+Oracle Open Office Writer : fields;database tables
+Oracle Open Office Writer : fields;defining conditions
+Oracle Open Office Writer : fields;displaying field codes (Writer)
+Oracle Open Office Writer : fields;formatted fields
+Oracle Open Office Writer : fields;HTML import and export
+Oracle Open Office Writer : fields;input fields in text
+Oracle Open Office Writer : fields;inserting time
+Oracle Open Office Writer : fields;subject
+Oracle Open Office Writer : fields;updating automatically (Writer)
+Oracle Open Office Writer : fields;updating/viewing
+Oracle Open Office Writer : fields;user data
+Oracle Open Office Writer : file associations for Microsoft Office
+Oracle Open Office Writer : file filters
+Oracle Open Office Writer : file filters;mobile devices
+Oracle Open Office Writer : file filters;XML
+Oracle Open Office Writer : file formats
+Oracle Open Office Writer : file formats;changing Oracle Open Office defaults
+Oracle Open Office Writer : file formats;OpenDocument/XML
+Oracle Open Office Writer : file formats;saving always in other formats
+Oracle Open Office Writer : file selection button
+Oracle Open Office Writer : file sharing options for current document
+Oracle Open Office Writer : files
+Oracle Open Office Writer : files;filters and formats
+Oracle Open Office Writer : files;importing
+Oracle Open Office Writer : files;opening
+Oracle Open Office Writer : files;properties
+Oracle Open Office Writer : files;saving
+Oracle Open Office Writer : files;saving automatically
+Oracle Open Office Writer : files;saving in other formats
+Oracle Open Office Writer : files;sending as e-mail
+Oracle Open Office Writer : files;version numbers
+Oracle Open Office Writer : files and folders in Oracle Open Office
+Oracle Open Office Writer : fill characters with tabulators
+Oracle Open Office Writer : fill colors for areas
+Oracle Open Office Writer : fill format mode
+Oracle Open Office Writer : fill patterns for areas
+Oracle Open Office Writer : filter conditions
+Oracle Open Office Writer : filter conditions;connecting
+Oracle Open Office Writer : filter conditions;in queries (Base)
+Oracle Open Office Writer : filtering
+Oracle Open Office Writer : filtering;data in databases
+Oracle Open Office Writer : filtering;data in forms
+Oracle Open Office Writer : filters
+Oracle Open Office Writer : filters;comparison operators
+Oracle Open Office Writer : filters;for import and export
+Oracle Open Office Writer : filters;Navigator
+Oracle Open Office Writer : filters;pictures
+Oracle Open Office Writer : filters;XML filter settings
+Oracle Open Office Writer : Find tab in Help
+Oracle Open Office Writer : finding
+Oracle Open Office Writer : finding;in all sheets
+Oracle Open Office Writer : finding;records in form documents
+Oracle Open Office Writer : finding;selections
+Oracle Open Office Writer : finding;similarity search
+Oracle Open Office Writer : finding;text/text formats/styles/objects
+Oracle Open Office Writer : first letters as large capital letters
+Oracle Open Office Writer : First Page page style
+Oracle Open Office Writer : fitting to pages
+Oracle Open Office Writer : fitting to pages;print settings in Math
+Oracle Open Office Writer : fitting to pages;print settings in presentations
+Oracle Open Office Writer : fixed dates
+Oracle Open Office Writer : fixed text
+Oracle Open Office Writer : fixed text;form functions
+Oracle Open Office Writer : fixing toolbars
+Oracle Open Office Writer : flipping draw objects
+Oracle Open Office Writer : floating frames in HTML documents
+Oracle Open Office Writer : floating titles in headers
+Oracle Open Office Writer : floating toolbars
+Oracle Open Office Writer : focus of controls
+Oracle Open Office Writer : folder creation
+Oracle Open Office Writer : font attributes
+Oracle Open Office Writer : font attributes;resetting
+Oracle Open Office Writer : font lists
+Oracle Open Office Writer : font name box
+Oracle Open Office Writer : font sizes
+Oracle Open Office Writer : font sizes;bullets
+Oracle Open Office Writer : font sizes;relative changes
+Oracle Open Office Writer : font sizes;scaling on screen
+Oracle Open Office Writer : font sizes;text
+Oracle Open Office Writer : fonts
+Oracle Open Office Writer : fonts;adding under UNIX
+Oracle Open Office Writer : fonts;changing in templates
+Oracle Open Office Writer : fonts;colors
+Oracle Open Office Writer : fonts;default settings
+Oracle Open Office Writer : fonts;effects
+Oracle Open Office Writer : fonts;for HTML and Basic
+Oracle Open Office Writer : fonts;formats
+Oracle Open Office Writer : fonts;outlines
+Oracle Open Office Writer : fonts;positions in text
+Oracle Open Office Writer : fonts;resetting
+Oracle Open Office Writer : fonts;shadows
+Oracle Open Office Writer : fonts;specifying several
+Oracle Open Office Writer : fonts;strikethrough
+Oracle Open Office Writer : fonts;styles
+Oracle Open Office Writer : fonts;text objects
+Oracle Open Office Writer : Fontwork icons
+Oracle Open Office Writer : footers
+Oracle Open Office Writer : footers;about
+Oracle Open Office Writer : footers;backgrounds
+Oracle Open Office Writer : footers;defining for left and right pages
+Oracle Open Office Writer : footers;formatting
+Oracle Open Office Writer : footers;inserting
+Oracle Open Office Writer : footers;with page numbers
+Oracle Open Office Writer : footnotes
+Oracle Open Office Writer : footnotes;inserting and editing
+Oracle Open Office Writer : footnotes;spacing
+Oracle Open Office Writer : form controls
+Oracle Open Office Writer : form controls;assigning macros
+Oracle Open Office Writer : form controls;protecting
+Oracle Open Office Writer : form controls;toolbars
+Oracle Open Office Writer : form fields
+Oracle Open Office Writer : form filters
+Oracle Open Office Writer : form letters
+Oracle Open Office Writer : Form Navigator
+Oracle Open Office Writer : format codes
+Oracle Open Office Writer : format codes;numbers
+Oracle Open Office Writer : format filling printing in Oracle Open Office Math
+Oracle Open Office Writer : Format Paintbrush
+Oracle Open Office Writer : formats
+Oracle Open Office Writer : formats;Asian layout
+Oracle Open Office Writer : formats;copying and pasting
+Oracle Open Office Writer : formats;finding and replacing
+Oracle Open Office Writer : formats;fonts
+Oracle Open Office Writer : formats;maximizing page formats
+Oracle Open Office Writer : formats;number and currency formats
+Oracle Open Office Writer : formats;of currencies/date/time
+Oracle Open Office Writer : formats;on opening and saving
+Oracle Open Office Writer : formats;pasting in special formats
+Oracle Open Office Writer : formats;positions
+Oracle Open Office Writer : formats;resetting
+Oracle Open Office Writer : formats;tabulators
+Oracle Open Office Writer : formatted fields
+Oracle Open Office Writer : formatted fields;form functions
+Oracle Open Office Writer : formatted fields;properties
+Oracle Open Office Writer : formatting
+Oracle Open Office Writer : formatting;Asian typography
+Oracle Open Office Writer : formatting;axes in charts
+Oracle Open Office Writer : formatting;bold, while typing
+Oracle Open Office Writer : formatting;bullets
+Oracle Open Office Writer : formatting;changing individual pages
+Oracle Open Office Writer : formatting;chart areas
+Oracle Open Office Writer : formatting;chart floors
+Oracle Open Office Writer : formatting;chart legends
+Oracle Open Office Writer : formatting;chart titles
+Oracle Open Office Writer : formatting;chart walls
+Oracle Open Office Writer : formatting;contour wrap
+Oracle Open Office Writer : formatting;copying
+Oracle Open Office Writer : formatting;definition
+Oracle Open Office Writer : formatting;even/odd pages
+Oracle Open Office Writer : formatting;exiting direct formatting
+Oracle Open Office Writer : formatting;expanding (Calc)
+Oracle Open Office Writer : formatting;font effects
+Oracle Open Office Writer : formatting;hyperlinks
+Oracle Open Office Writer : formatting;indenting paragraphs
+Oracle Open Office Writer : formatting;indexes and tables of contents
+Oracle Open Office Writer : formatting;numbered lists
+Oracle Open Office Writer : formatting;page numbers
+Oracle Open Office Writer : formatting;pages
+Oracle Open Office Writer : formatting;printer metrics (Writer)
+Oracle Open Office Writer : formatting;register-true text
+Oracle Open Office Writer : formatting;undoing
+Oracle Open Office Writer : formatting;undoing when writing
+Oracle Open Office Writer : formatting styles
+Oracle Open Office Writer : formatting styles;importing
+Oracle Open Office Writer : formatting styles;styles and templates
+Oracle Open Office Writer : forms
+Oracle Open Office Writer : forms;browsing
+Oracle Open Office Writer : forms;Combo Box/List Box Wizard
+Oracle Open Office Writer : forms;creating
+Oracle Open Office Writer : forms;data
+Oracle Open Office Writer : forms;designing (Base)
+Oracle Open Office Writer : forms;events
+Oracle Open Office Writer : forms;filtering data
+Oracle Open Office Writer : forms;finding records
+Oracle Open Office Writer : forms;focus after opening
+Oracle Open Office Writer : forms;general information (Base)
+Oracle Open Office Writer : forms;grouping controls
+Oracle Open Office Writer : forms;HTML filters
+Oracle Open Office Writer : forms;Navigator
+Oracle Open Office Writer : forms;opening in design mode
+Oracle Open Office Writer : forms;properties
+Oracle Open Office Writer : forms;sorting data
+Oracle Open Office Writer : forms;subforms
+Oracle Open Office Writer : forms;wizards
+Oracle Open Office Writer : forms;XForms
+Oracle Open Office Writer : formula texts
+Oracle Open Office Writer : formula texts;printing in Oracle Open Office Math
+Oracle Open Office Writer : formulas
+Oracle Open Office Writer : formulas;calculating in text
+Oracle Open Office Writer : formulas;complex formulas in text
+Oracle Open Office Writer : formulas;new
+Oracle Open Office Writer : formulas;pasting results in text documents
+Oracle Open Office Writer : formulas;starting formula editor
+Oracle Open Office Writer : formulas in reports
+Oracle Open Office Writer : formulas in reports;editing
+Oracle Open Office Writer : formulating conditions
+Oracle Open Office Writer : forums and support
+Oracle Open Office Writer : frames
+Oracle Open Office Writer : frames;anchoring options
+Oracle Open Office Writer : frames;around objects
+Oracle Open Office Writer : frames;around pages
+Oracle Open Office Writer : frames;around paragraphs
+Oracle Open Office Writer : frames;around tables
+Oracle Open Office Writer : frames;around text tables
+Oracle Open Office Writer : frames;AutoCorrect function
+Oracle Open Office Writer : frames;backgrounds
+Oracle Open Office Writer : frames;captions (Writer)
+Oracle Open Office Writer : frames;defining hyperlinks
+Oracle Open Office Writer : frames;jumping to
+Oracle Open Office Writer : frames;labeling
+Oracle Open Office Writer : frames;linking
+Oracle Open Office Writer : frames;printing in Oracle Open Office Math
+Oracle Open Office Writer : frames;protecting
+Oracle Open Office Writer : frames;selection frames
+Oracle Open Office Writer : frames;styles
+Oracle Open Office Writer : frames;text fitting to frames
+Oracle Open Office Writer : frames;unlinking
+Oracle Open Office Writer : freeform lines
+Oracle Open Office Writer : freeform lines;draw functions
+Oracle Open Office Writer : FTP
+Oracle Open Office Writer : FTP;opening documents
+Oracle Open Office Writer : FTP;saving documents
+Oracle Open Office Writer : full joins (Base)
+Oracle Open Office Writer : full screen view
+Oracle Open Office Writer : full-text search in Help
+Oracle Open Office Writer : functions in reports
+Oracle Open Office Writer : functions in reports;editing
+Oracle Open Office Writer : Gallery
+Oracle Open Office Writer : Gallery;adding pictures
+Oracle Open Office Writer : Gallery;docking and resizing
+Oracle Open Office Writer : Gallery;dragging pictures to draw objects
+Oracle Open Office Writer : Gallery;hiding/showing
+Oracle Open Office Writer : Gallery;inserting pictures from
+Oracle Open Office Writer : get method for form transmissions
+Oracle Open Office Writer : getting support
+Oracle Open Office Writer : GIF format
+Oracle Open Office Writer : glossaries
+Oracle Open Office Writer : glossaries;common terms
+Oracle Open Office Writer : glossaries;Internet terms
+Oracle Open Office Writer : gradients off for faster printing
+Oracle Open Office Writer : grammar checker
+Oracle Open Office Writer : graphic objects, see draw objects
+Oracle Open Office Writer : graphical text art
+Oracle Open Office Writer : graphics
+Oracle Open Office Writer : graphics;cache
+Oracle Open Office Writer : graphics;do not show
+Oracle Open Office Writer : graphics;protecting
+Oracle Open Office Writer : graphics, see also pictures
+Oracle Open Office Writer : grayscale printing
+Oracle Open Office Writer : grid controls
+Oracle Open Office Writer : grid controls;form functions
+Oracle Open Office Writer : grids
+Oracle Open Office Writer : grids;defaults (Writer/Calc)
+Oracle Open Office Writer : grids;display options (Impress/Draw)
+Oracle Open Office Writer : grids;displaying lines (Calc)
+Oracle Open Office Writer : grids;formatting axes
+Oracle Open Office Writer : grids;inserting in charts
+Oracle Open Office Writer : group box creation
+Oracle Open Office Writer : groups
+Oracle Open Office Writer : groups;entering/exiting/ungrouping
+Oracle Open Office Writer : groups;naming
+Oracle Open Office Writer : groups;of controls
+Oracle Open Office Writer : guides
+Oracle Open Office Writer : guides;display options (Impress/Draw)
+Oracle Open Office Writer : guides;displaying when moving objects (Impress)
+Oracle Open Office Writer : guides;showing (Calc)
+Oracle Open Office Writer : guides;showing when moving frames (Writer)
+Oracle Open Office Writer : gutter
+Oracle Open Office Writer : handles
+Oracle Open Office Writer : handles;displaying (Writer)
+Oracle Open Office Writer : handles;scaling
+Oracle Open Office Writer : handles;showing simple/large handles (Calc)
+Oracle Open Office Writer : hanging indents in paragraphs
+Oracle Open Office Writer : Hangul/Hanja
+Oracle Open Office Writer : hard returns in pasted text
+Oracle Open Office Writer : hatching
+Oracle Open Office Writer : headers
+Oracle Open Office Writer : headers;about
+Oracle Open Office Writer : headers;backgrounds
+Oracle Open Office Writer : headers;chapter information
+Oracle Open Office Writer : headers;defining for left and right pages
+Oracle Open Office Writer : headers;formatting
+Oracle Open Office Writer : headers;inserting
+Oracle Open Office Writer : headings
+Oracle Open Office Writer : headings;automatic
+Oracle Open Office Writer : headings;entering as text box
+Oracle Open Office Writer : headings;jumping to
+Oracle Open Office Writer : headings;numbering/paragraph styles
+Oracle Open Office Writer : headings;rearranging
+Oracle Open Office Writer : headings;repeating in tables
+Oracle Open Office Writer : headings;starting with tab stops
+Oracle Open Office Writer : headings;switching levels by keyboard
+Oracle Open Office Writer : Hebrew
+Oracle Open Office Writer : Hebrew;entering text
+Oracle Open Office Writer : Hebrew;language settings
+Oracle Open Office Writer : Help
+Oracle Open Office Writer : Help;bookmarks
+Oracle Open Office Writer : Help;extended tips on/off
+Oracle Open Office Writer : Help;full-text search
+Oracle Open Office Writer : Help;Help tips
+Oracle Open Office Writer : Help;keywords
+Oracle Open Office Writer : Help;navigation pane showing/hiding
+Oracle Open Office Writer : Help;style sheets
+Oracle Open Office Writer : Help;topics
+Oracle Open Office Writer : Help Agent
+Oracle Open Office Writer : Help Agent;help
+Oracle Open Office Writer : Help Agent;options
+Oracle Open Office Writer : Help tips
+Oracle Open Office Writer : Help tips;fields
+Oracle Open Office Writer : Help tips;hiding
+Oracle Open Office Writer : hidden controls in Form Navigator
+Oracle Open Office Writer : hidden fields display (Writer)
+Oracle Open Office Writer : hidden pages
+Oracle Open Office Writer : hidden pages;printing in presentations
+Oracle Open Office Writer : hidden text
+Oracle Open Office Writer : hidden text;displaying
+Oracle Open Office Writer : hidden text;showing (Writer)
+Oracle Open Office Writer : hiding
+Oracle Open Office Writer : hiding;changes
+Oracle Open Office Writer : hiding;chart legends
+Oracle Open Office Writer : hiding;database fields
+Oracle Open Office Writer : hiding;docked windows
+Oracle Open Office Writer : hiding;navigation pane in Help window
+Oracle Open Office Writer : hiding;rulers
+Oracle Open Office Writer : hiding;sections
+Oracle Open Office Writer : hiding;text, from specific users
+Oracle Open Office Writer : hiding;text, with conditions
+Oracle Open Office Writer : high contrast mode
+Oracle Open Office Writer : Hindi
+Oracle Open Office Writer : Hindi;entering text
+Oracle Open Office Writer : Hindi;language settings
+Oracle Open Office Writer : homepage creation
+Oracle Open Office Writer : horizontal lines
+Oracle Open Office Writer : horizontal rulers
+Oracle Open Office Writer : horizontal scrollbars (Writer)
+Oracle Open Office Writer : hotspots
+Oracle Open Office Writer : HowTos for charts
+Oracle Open Office Writer : HTML
+Oracle Open Office Writer : HTML;definition
+Oracle Open Office Writer : HTML;export character set
+Oracle Open Office Writer : HTML;fonts for source display
+Oracle Open Office Writer : HTML;importing META tags
+Oracle Open Office Writer : HTML;live presentations
+Oracle Open Office Writer : HTML;special tags for fields
+Oracle Open Office Writer : HTML documents
+Oracle Open Office Writer : HTML documents;auto reloading
+Oracle Open Office Writer : HTML documents;creating from text documents
+Oracle Open Office Writer : HTML documents;headers and footers
+Oracle Open Office Writer : HTML documents;importing/exporting
+Oracle Open Office Writer : HTML documents;inserting linked sections
+Oracle Open Office Writer : HTML documents;META tags in
+Oracle Open Office Writer : HTML documents;new
+Oracle Open Office Writer : HTML documents;source text
+Oracle Open Office Writer : hyperlinks
+Oracle Open Office Writer : hyperlinks;assigning macros
+Oracle Open Office Writer : hyperlinks;character formats
+Oracle Open Office Writer : hyperlinks;definition
+Oracle Open Office Writer : hyperlinks;deleting
+Oracle Open Office Writer : hyperlinks;editing
+Oracle Open Office Writer : hyperlinks;for objects
+Oracle Open Office Writer : hyperlinks;in tables of contents and indexes
+Oracle Open Office Writer : hyperlinks;inserting
+Oracle Open Office Writer : hyperlinks;inserting from Navigator
+Oracle Open Office Writer : hyperlinks;jumping to
+Oracle Open Office Writer : hyperlinks;relative and absolute
+Oracle Open Office Writer : hyperlinks;turning off automatic recognition
+Oracle Open Office Writer : hyperlinks, see also links
+Oracle Open Office Writer : hyphenation
+Oracle Open Office Writer : hyphenation;activating for a language
+Oracle Open Office Writer : hyphenation;manual/automatic
+Oracle Open Office Writer : hyphenation;minimal number of characters
+Oracle Open Office Writer : hyphenation;preventing for specific words
+Oracle Open Office Writer : hyphens
+Oracle Open Office Writer : hyphens;displaying custom (Writer)
+Oracle Open Office Writer : hyphens;inserting custom
+Oracle Open Office Writer : icon bars, see toolbars
+Oracle Open Office Writer : icon sizes
+Oracle Open Office Writer : if-then queries as fields
+Oracle Open Office Writer : ignore list for spellcheck
+Oracle Open Office Writer : illumination
+Oracle Open Office Writer : illumination;3D charts
+Oracle Open Office Writer : illustrations, see pictures
+Oracle Open Office Writer : image button creation
+Oracle Open Office Writer : image control creation
+Oracle Open Office Writer : ImageMap
+Oracle Open Office Writer : ImageMap;definition
+Oracle Open Office Writer : ImageMap;editor
+Oracle Open Office Writer : images
+Oracle Open Office Writer : images;do not show
+Oracle Open Office Writer : images;ImageMap
+Oracle Open Office Writer : images;inserting and editing bitmaps
+Oracle Open Office Writer : images;inserting in text
+Oracle Open Office Writer : images, see also pictures
+Oracle Open Office Writer : IME
+Oracle Open Office Writer : IME;definition
+Oracle Open Office Writer : IME;showing/hiding
+Oracle Open Office Writer : import filters
+Oracle Open Office Writer : import restrictions for Microsoft Office
+Oracle Open Office Writer : importing
+Oracle Open Office Writer : importing;bitmaps
+Oracle Open Office Writer : importing;compatibility settings for text import
+Oracle Open Office Writer : importing;databases
+Oracle Open Office Writer : importing;documents in other formats
+Oracle Open Office Writer : importing;from XML
+Oracle Open Office Writer : importing;HTML and text documents
+Oracle Open Office Writer : importing;HTML with META tags
+Oracle Open Office Writer : importing;Microsoft Office documents with VBA code
+Oracle Open Office Writer : importing;styles from other files
+Oracle Open Office Writer : importing;tables in text format
+Oracle Open Office Writer : importing;templates
+Oracle Open Office Writer : improvement program
+Oracle Open Office Writer : inches
+Oracle Open Office Writer : indents
+Oracle Open Office Writer : indents;in text
+Oracle Open Office Writer : indents;setting on rulers
+Oracle Open Office Writer : Index tab in Help
+Oracle Open Office Writer : indexes
+Oracle Open Office Writer : indexes;alphabetical indexes
+Oracle Open Office Writer : indexes;backgrounds
+Oracle Open Office Writer : indexes;creating bibliographies
+Oracle Open Office Writer : indexes;creating user-defined indexes
+Oracle Open Office Writer : indexes;defining entries in
+Oracle Open Office Writer : indexes;editing or deleting entries
+Oracle Open Office Writer : indexes;editing/updating/deleting
+Oracle Open Office Writer : indexes;formatting
+Oracle Open Office Writer : indexes;master documents
+Oracle Open Office Writer : indexes;multiple documents
+Oracle Open Office Writer : indexes;showing/hiding Help index tab
+Oracle Open Office Writer : indexes;unprotecting
+Oracle Open Office Writer : indicator lines in text
+Oracle Open Office Writer : initial capitals in titles
+Oracle Open Office Writer : inner joins (Base)
+Oracle Open Office Writer : input fields in text
+Oracle Open Office Writer : input method window
+Oracle Open Office Writer : insert mode for entering text
+Oracle Open Office Writer : inserting
+Oracle Open Office Writer : inserting;buttons in toolbars
+Oracle Open Office Writer : inserting;captions
+Oracle Open Office Writer : inserting;cell ranges from spreadsheets
+Oracle Open Office Writer : inserting;chapter numbers in captions
+Oracle Open Office Writer : inserting;charts
+Oracle Open Office Writer : inserting;clipboard options
+Oracle Open Office Writer : inserting;comments
+Oracle Open Office Writer : inserting;cross-references
+Oracle Open Office Writer : inserting;data from text documents
+Oracle Open Office Writer : inserting;datasource records in spreadsheets
+Oracle Open Office Writer : inserting;date fields
+Oracle Open Office Writer : inserting;drawings
+Oracle Open Office Writer : inserting;envelopes
+Oracle Open Office Writer : inserting;floating frames
+Oracle Open Office Writer : inserting;Fontwork objects
+Oracle Open Office Writer : inserting;footnotes/endnotes
+Oracle Open Office Writer : inserting;form fields
+Oracle Open Office Writer : inserting;from Gallery into text
+Oracle Open Office Writer : inserting;horizontal lines
+Oracle Open Office Writer : inserting;hyperlinks
+Oracle Open Office Writer : inserting;hyperlinks from Navigator
+Oracle Open Office Writer : inserting;input fields
+Oracle Open Office Writer : inserting;line breaks in cells
+Oracle Open Office Writer : inserting;lines under headers/above footers
+Oracle Open Office Writer : inserting;movies/sounds
+Oracle Open Office Writer : inserting;new text tables defaults
+Oracle Open Office Writer : inserting;numbering
+Oracle Open Office Writer : inserting;objects from Gallery
+Oracle Open Office Writer : inserting;OLE objects
+Oracle Open Office Writer : inserting;page breaks
+Oracle Open Office Writer : inserting;page numbers
+Oracle Open Office Writer : inserting;paragraph borders
+Oracle Open Office Writer : inserting;paragraph bullets
+Oracle Open Office Writer : inserting;paragraphs before/after tables
+Oracle Open Office Writer : inserting;pictures
+Oracle Open Office Writer : inserting;pictures in Gallery
+Oracle Open Office Writer : inserting;pictures, by dialog
+Oracle Open Office Writer : inserting;plug-ins
+Oracle Open Office Writer : inserting;push buttons
+Oracle Open Office Writer : inserting;rows/columns, by keyboard
+Oracle Open Office Writer : inserting;scanned images
+Oracle Open Office Writer : inserting;sections
+Oracle Open Office Writer : inserting;special characters
+Oracle Open Office Writer : inserting;tab stops
+Oracle Open Office Writer : inserting;tables in text
+Oracle Open Office Writer : inserting;text blocks
+Oracle Open Office Writer : inserting;text documents
+Oracle Open Office Writer : inserting;text frames
+Oracle Open Office Writer : inserting;textures on chart bars
+Oracle Open Office Writer : installing
+Oracle Open Office Writer : installing;ActiveX control
+Oracle Open Office Writer : installing;mobile device filters
+Oracle Open Office Writer : installing;smart tags
+Oracle Open Office Writer : installing;UNO components
+Oracle Open Office Writer : installing;XML filters
+Oracle Open Office Writer : instructions
+Oracle Open Office Writer : instructions;general
+Oracle Open Office Writer : instructions;Oracle Open Office Writer
+Oracle Open Office Writer : Internet
+Oracle Open Office Writer : Internet;checking for updates
+Oracle Open Office Writer : Internet;Internet Explorer for displaying Oracle Open Office documents
+Oracle Open Office Writer : Internet;presentations
+Oracle Open Office Writer : Internet;starting searches
+Oracle Open Office Writer : Internet glossary
+Oracle Open Office Writer : interrupting numbered lists
+Oracle Open Office Writer : invert filter
+Oracle Open Office Writer : invisible areas
+Oracle Open Office Writer : invisible characters
+Oracle Open Office Writer : invisible characters;finding
+Oracle Open Office Writer : italic text
+Oracle Open Office Writer : iterative references in spreadsheets
+Oracle Open Office Writer : Java
+Oracle Open Office Writer : Java;definition
+Oracle Open Office Writer : Java;setting options
+Oracle Open Office Writer : JDBC
+Oracle Open Office Writer : JDBC;databases (Base)
+Oracle Open Office Writer : JDBC;definition
+Oracle Open Office Writer : joining
+Oracle Open Office Writer : joining;numbered lists
+Oracle Open Office Writer : joining;paragraphs
+Oracle Open Office Writer : joining;tables (Base)
+Oracle Open Office Writer : joins in databases (Base)
+Oracle Open Office Writer : jumping
+Oracle Open Office Writer : jumping;to bookmarks
+Oracle Open Office Writer : jumping;to text elements
+Oracle Open Office Writer : justifying text
+Oracle Open Office Writer : juxtaposing tables
+Oracle Open Office Writer : kerning
+Oracle Open Office Writer : kerning;Asian texts
+Oracle Open Office Writer : kerning;definition
+Oracle Open Office Writer : kerning;in characters
+Oracle Open Office Writer : key fields for relations (Base)
+Oracle Open Office Writer : keyboard
+Oracle Open Office Writer : keyboard;accessibility Oracle Open Office Writer
+Oracle Open Office Writer : keyboard;adding or deleting rows/columns
+Oracle Open Office Writer : keyboard;assigning/editing shortcut keys
+Oracle Open Office Writer : keyboard;bold formatting
+Oracle Open Office Writer : keyboard;general commands
+Oracle Open Office Writer : keyboard;modifying the behavior of rows/columns
+Oracle Open Office Writer : keyboard;navigating and selecting in text
+Oracle Open Office Writer : keyboard;removing numbering
+Oracle Open Office Writer : keyboard;resizing rows/columns
+Oracle Open Office Writer : keys
+Oracle Open Office Writer : keys;adding push buttons
+Oracle Open Office Writer : keys;primary keys (Base)
+Oracle Open Office Writer : kiosk export
+Oracle Open Office Writer : labels
+Oracle Open Office Writer : labels;creating and synchronizing
+Oracle Open Office Writer : labels;for charts
+Oracle Open Office Writer : labels;for draw objects
+Oracle Open Office Writer : labels;form functions
+Oracle Open Office Writer : labels;from databases
+Oracle Open Office Writer : labels, see also names/callouts
+Oracle Open Office Writer : landscape and portrait
+Oracle Open Office Writer : languages
+Oracle Open Office Writer : languages;activating modules
+Oracle Open Office Writer : languages;Asian support
+Oracle Open Office Writer : languages;complex text layout
+Oracle Open Office Writer : languages;locale settings
+Oracle Open Office Writer : languages;recognition of
+Oracle Open Office Writer : languages;selecting for text
+Oracle Open Office Writer : languages;setting options
+Oracle Open Office Writer : languages;spellcheck
+Oracle Open Office Writer : languages;spellchecking and formatting
+Oracle Open Office Writer : large handles (Writer)
+Oracle Open Office Writer : large icons
+Oracle Open Office Writer : layer arrangement
+Oracle Open Office Writer : layout
+Oracle Open Office Writer : layout;importing Word documents
+Oracle Open Office Writer : layout;pages
+Oracle Open Office Writer : LDAP server
+Oracle Open Office Writer : LDAP server;address books (Base)
+Oracle Open Office Writer : LDAP server;sign on options
+Oracle Open Office Writer : leading between paragraphs
+Oracle Open Office Writer : left alignment of paragraphs
+Oracle Open Office Writer : left joins (Base)
+Oracle Open Office Writer : Left Page page style
+Oracle Open Office Writer : legends
+Oracle Open Office Writer : legends;charts
+Oracle Open Office Writer : legends;draw objects
+Oracle Open Office Writer : legends;rounding corners
+Oracle Open Office Writer : legends, see also captions
+Oracle Open Office Writer : Letter Wizard
+Oracle Open Office Writer : letters
+Oracle Open Office Writer : letters;creating form letters
+Oracle Open Office Writer : letters;inserting envelopes
+Oracle Open Office Writer : levels
+Oracle Open Office Writer : levels;changing outline levels
+Oracle Open Office Writer : levels;depth stagger
+Oracle Open Office Writer : levels;macro security
+Oracle Open Office Writer : lexicon, see thesaurus
+Oracle Open Office Writer : limits of tables (Writer)
+Oracle Open Office Writer : line breaks
+Oracle Open Office Writer : line breaks;in cells
+Oracle Open Office Writer : line breaks;removing
+Oracle Open Office Writer : line charts
+Oracle Open Office Writer : line numbers
+Oracle Open Office Writer : line spacing
+Oracle Open Office Writer : line spacing;context menu in paragraphs
+Oracle Open Office Writer : line spacing;paragraph
+Oracle Open Office Writer : line styles
+Oracle Open Office Writer : line styles;applying
+Oracle Open Office Writer : line styles;defining
+Oracle Open Office Writer : lines
+Oracle Open Office Writer : lines;automatic drawing on/off
+Oracle Open Office Writer : lines;defining ends
+Oracle Open Office Writer : lines;draw functions
+Oracle Open Office Writer : lines;drawing in text
+Oracle Open Office Writer : lines;editing points
+Oracle Open Office Writer : lines;footnotes/endnotes
+Oracle Open Office Writer : lines;inserting horizontal lines
+Oracle Open Office Writer : lines;removing automatic lines
+Oracle Open Office Writer : lines;under headers/above footers
+Oracle Open Office Writer : lines of text
+Oracle Open Office Writer : lines of text;alignment
+Oracle Open Office Writer : lines of text;indents
+Oracle Open Office Writer : lines of text;numbering
+Oracle Open Office Writer : lines of text;register-true
+Oracle Open Office Writer : lines of text;sorting paragraphs
+Oracle Open Office Writer : links
+Oracle Open Office Writer : links;between cells and controls
+Oracle Open Office Writer : links;by drag and drop
+Oracle Open Office Writer : links;character formats
+Oracle Open Office Writer : links;definition
+Oracle Open Office Writer : links;editing hyperlinks
+Oracle Open Office Writer : links;inserting
+Oracle Open Office Writer : links;inserting sections
+Oracle Open Office Writer : links;inserting text documents as
+Oracle Open Office Writer : links;modifying
+Oracle Open Office Writer : links;opening files with
+Oracle Open Office Writer : links;relational databases (Base)
+Oracle Open Office Writer : links;text frames
+Oracle Open Office Writer : links;turning off automatic recognition
+Oracle Open Office Writer : links;updating options (Writer)
+Oracle Open Office Writer : links;updating specific links
+Oracle Open Office Writer : list box creation
+Oracle Open Office Writer : lists
+Oracle Open Office Writer : lists;automatic numbering
+Oracle Open Office Writer : lists;AutoText shortcuts
+Oracle Open Office Writer : lists;changing levels
+Oracle Open Office Writer : lists;combining numbered lists
+Oracle Open Office Writer : lists;data assigned to controls
+Oracle Open Office Writer : lists;registered databases (Base)
+Oracle Open Office Writer : lists;regular expressions
+Oracle Open Office Writer : lists;removing/interrupting numbering
+Oracle Open Office Writer : live presentations on the Internet
+Oracle Open Office Writer : loading
+Oracle Open Office Writer : loading;documents
+Oracle Open Office Writer : loading;documents from other formats
+Oracle Open Office Writer : loading;HTML documents, automatically
+Oracle Open Office Writer : loading;Microsoft Office documents with VBA code
+Oracle Open Office Writer : loading;reloading
+Oracle Open Office Writer : loading;styles from other files
+Oracle Open Office Writer : loading;XML files
+Oracle Open Office Writer : locale settings
+Oracle Open Office Writer : logarithmic scaling along axes
+Oracle Open Office Writer : logical expressions
+Oracle Open Office Writer : lowercase letters
+Oracle Open Office Writer : lowercase letters;font effects
+Oracle Open Office Writer : lowercase letters;text
+Oracle Open Office Writer : lowering outline levels
+Oracle Open Office Writer : Macro Wizard (Base)
+Oracle Open Office Writer : macros
+Oracle Open Office Writer : macros;assigning to events in forms
+Oracle Open Office Writer : macros;attaching new (Base)
+Oracle Open Office Writer : macros;in MS Office documents
+Oracle Open Office Writer : macros;interrupting
+Oracle Open Office Writer : macros;organizing
+Oracle Open Office Writer : macros;recording
+Oracle Open Office Writer : macros;security
+Oracle Open Office Writer : macros;security levels
+Oracle Open Office Writer : macros;security warning dialog
+Oracle Open Office Writer : macros;selecting security warnings
+Oracle Open Office Writer : magnifiers
+Oracle Open Office Writer : mail merge
+Oracle Open Office Writer : manual hyphenation in text
+Oracle Open Office Writer : manual numbering in text
+Oracle Open Office Writer : manual page breaks
+Oracle Open Office Writer : marginal numbers on text pages
+Oracle Open Office Writer : margins
+Oracle Open Office Writer : margins;pages
+Oracle Open Office Writer : margins;setting with the mouse
+Oracle Open Office Writer : margins;shadows
+Oracle Open Office Writer : marking changes
+Oracle Open Office Writer : marking, see selecting
+Oracle Open Office Writer : master documents
+Oracle Open Office Writer : master documents;creating/editing/exporting
+Oracle Open Office Writer : master documents;indexes
+Oracle Open Office Writer : master documents;properties
+Oracle Open Office Writer : matching conditional text in fields
+Oracle Open Office Writer : Math formula editor
+Oracle Open Office Writer : mean value lines in charts
+Oracle Open Office Writer : measurement units
+Oracle Open Office Writer : measurement units;changing on rulers
+Oracle Open Office Writer : measurement units;converting
+Oracle Open Office Writer : measurement units;selecting
+Oracle Open Office Writer : Media Player window
+Oracle Open Office Writer : menus
+Oracle Open Office Writer : menus;activating context menus
+Oracle Open Office Writer : menus;assigning macros
+Oracle Open Office Writer : menus;customizing
+Oracle Open Office Writer : merging
+Oracle Open Office Writer : merging;cells
+Oracle Open Office Writer : merging;cells, by keyboard
+Oracle Open Office Writer : merging;documents
+Oracle Open Office Writer : merging;indexes
+Oracle Open Office Writer : merging;numbered lists
+Oracle Open Office Writer : merging;tables
+Oracle Open Office Writer : META tags
+Oracle Open Office Writer : metrics
+Oracle Open Office Writer : metrics;converting
+Oracle Open Office Writer : metrics;document formatting (Writer)
+Oracle Open Office Writer : metrics;in sheets
+Oracle Open Office Writer : Microsoft Office
+Oracle Open Office Writer : Microsoft Office;Access databases (base)
+Oracle Open Office Writer : Microsoft Office;as default file format
+Oracle Open Office Writer : Microsoft Office;document import restrictions
+Oracle Open Office Writer : Microsoft Office;feature comparisons
+Oracle Open Office Writer : Microsoft Office;importing password protected files
+Oracle Open Office Writer : Microsoft Office;importing Word documents
+Oracle Open Office Writer : Microsoft Office;importing/exporting VBA code
+Oracle Open Office Writer : Microsoft Office;new users information
+Oracle Open Office Writer : Microsoft Office;opening Microsoft documents
+Oracle Open Office Writer : Microsoft Office;reassigning document types
+Oracle Open Office Writer : migrating macros (Base)
+Oracle Open Office Writer : mirrored page layout
+Oracle Open Office Writer : mobile device filters
+Oracle Open Office Writer : models in XForms
+Oracle Open Office Writer : modifying, see changing
+Oracle Open Office Writer : months
+Oracle Open Office Writer : months;automatically completing
+Oracle Open Office Writer : more controls
+Oracle Open Office Writer : mosaic filter
+Oracle Open Office Writer : mouse
+Oracle Open Office Writer : mouse;moving and copying text
+Oracle Open Office Writer : mouse;pointers when using drag and drop
+Oracle Open Office Writer : mouse;positioning
+Oracle Open Office Writer : movies
+Oracle Open Office Writer : moving
+Oracle Open Office Writer : moving;headings
+Oracle Open Office Writer : moving;objects and frames
+Oracle Open Office Writer : moving;tab stops on ruler
+Oracle Open Office Writer : moving;text sections
+Oracle Open Office Writer : moving;toolbars
+Oracle Open Office Writer : moving;using guide lines in presentations
+Oracle Open Office Writer : MS ADO interface (Base)
+Oracle Open Office Writer : multi-column text
+Oracle Open Office Writer : multi-line titles in forms
+Oracle Open Office Writer : multi-page tables
+Oracle Open Office Writer : multi-page view of documents
+Oracle Open Office Writer : multiple documents
+Oracle Open Office Writer : multiple documents;indexes
+Oracle Open Office Writer : multiple documents;opening
+Oracle Open Office Writer : multiple selection
+Oracle Open Office Writer : music
+Oracle Open Office Writer : My Documents folder
+Oracle Open Office Writer : My Documents folder;changing work directory
+Oracle Open Office Writer : My Documents folder;opening
+Oracle Open Office Writer : MySQL databases (Base)
+Oracle Open Office Writer : names
+Oracle Open Office Writer : names;chapter names in headers
+Oracle Open Office Writer : names;multi-line titles
+Oracle Open Office Writer : names;objects
+Oracle Open Office Writer : names, see also labels/callouts
+Oracle Open Office Writer : namespace organization in XForms
+Oracle Open Office Writer : native SQL (Base)
+Oracle Open Office Writer : navigating
+Oracle Open Office Writer : navigating;in documents
+Oracle Open Office Writer : navigating;in text, with keyboard
+Oracle Open Office Writer : Navigation bar
+Oracle Open Office Writer : Navigation bar;controls
+Oracle Open Office Writer : Navigation bar;forms
+Oracle Open Office Writer : Navigator
+Oracle Open Office Writer : Navigator;comments
+Oracle Open Office Writer : Navigator;contents as lists
+Oracle Open Office Writer : Navigator;docking
+Oracle Open Office Writer : Navigator;docking and resizing
+Oracle Open Office Writer : Navigator;heading levels and chapters
+Oracle Open Office Writer : Navigator;inserting hyperlinks
+Oracle Open Office Writer : Navigator;master documents
+Oracle Open Office Writer : Navigator;overview in texts
+Oracle Open Office Writer : Navigator;working with
+Oracle Open Office Writer : net charts
+Oracle Open Office Writer : network identity options
+Oracle Open Office Writer : networks and AutoText directories
+Oracle Open Office Writer : new databases
+Oracle Open Office Writer : new documents
+Oracle Open Office Writer : new lines in cells
+Oracle Open Office Writer : new page styles from selection
+Oracle Open Office Writer : new windows
+Oracle Open Office Writer : next page number in footers
+Oracle Open Office Writer : non-breaking dashes
+Oracle Open Office Writer : non-breaking spaces (Writer)
+Oracle Open Office Writer : non-printing characters (Writer)
+Oracle Open Office Writer : non-printing text
+Oracle Open Office Writer : number formats
+Oracle Open Office Writer : number formats;codes
+Oracle Open Office Writer : number formats;formats
+Oracle Open Office Writer : number formats;recognition in text tables
+Oracle Open Office Writer : number of characters
+Oracle Open Office Writer : number of pages
+Oracle Open Office Writer : number of sheets
+Oracle Open Office Writer : number of tables
+Oracle Open Office Writer : number of words
+Oracle Open Office Writer : numbering
+Oracle Open Office Writer : numbering;captions
+Oracle Open Office Writer : numbering;changing the level of
+Oracle Open Office Writer : numbering;combining
+Oracle Open Office Writer : numbering;headings
+Oracle Open Office Writer : numbering;lines
+Oracle Open Office Writer : numbering;lists, while typing
+Oracle Open Office Writer : numbering;manually/by styles
+Oracle Open Office Writer : numbering;options
+Oracle Open Office Writer : numbering;pages
+Oracle Open Office Writer : numbering;paragraphs, on and off
+Oracle Open Office Writer : numbering;quotations/similar items
+Oracle Open Office Writer : numbering;removing/interrupting
+Oracle Open Office Writer : numbering;style categories
+Oracle Open Office Writer : numbering;turning off
+Oracle Open Office Writer : numbering;using automatically
+Oracle Open Office Writer : numbers
+Oracle Open Office Writer : numbers;automatic recognition in text tables
+Oracle Open Office Writer : numbers;date, time and currency formats
+Oracle Open Office Writer : numbers;line numbering
+Oracle Open Office Writer : numbers;lists
+Oracle Open Office Writer : numerical fields in forms
+Oracle Open Office Writer : objects
+Oracle Open Office Writer : objects;always moveable (Impress/Draw)
+Oracle Open Office Writer : objects;anchoring options
+Oracle Open Office Writer : objects;arranging within stacks
+Oracle Open Office Writer : objects;captioning
+Oracle Open Office Writer : objects;captioning automatically
+Oracle Open Office Writer : objects;contour wrap
+Oracle Open Office Writer : objects;copying when moving in presentations
+Oracle Open Office Writer : objects;cross-referencing
+Oracle Open Office Writer : objects;defining borders
+Oracle Open Office Writer : objects;defining hyperlinks
+Oracle Open Office Writer : objects;definition
+Oracle Open Office Writer : objects;displaying in spreadsheets
+Oracle Open Office Writer : objects;displaying in text documents
+Oracle Open Office Writer : objects;editing
+Oracle Open Office Writer : objects;finding by Navigator
+Oracle Open Office Writer : objects;inserting from Gallery
+Oracle Open Office Writer : objects;inserting OLE objects
+Oracle Open Office Writer : objects;moving and resizing with keyboard
+Oracle Open Office Writer : objects;moving and resizing with mouse
+Oracle Open Office Writer : objects;naming
+Oracle Open Office Writer : objects;opening
+Oracle Open Office Writer : objects;properties of charts
+Oracle Open Office Writer : objects;quickly moving to
+Oracle Open Office Writer : objects;quickly moving to, within text
+Oracle Open Office Writer : objects;titles and descriptions
+Oracle Open Office Writer : ODBC
+Oracle Open Office Writer : ODBC;database (Base)
+Oracle Open Office Writer : ODBC;definition
+Oracle Open Office Writer : ODF file formats
+Oracle Open Office Writer : Office
+Oracle Open Office Writer : Office;Microsoft Office and Oracle Open Office
+Oracle Open Office Writer : OLE
+Oracle Open Office Writer : OLE;definition
+Oracle Open Office Writer : OLE objects
+Oracle Open Office Writer : OLE objects;arranging within stacks
+Oracle Open Office Writer : OLE objects;borders
+Oracle Open Office Writer : OLE objects;captions (Writer)
+Oracle Open Office Writer : OLE objects;cross-referencing
+Oracle Open Office Writer : OLE objects;inserting
+Oracle Open Office Writer : OLE objects;inserting tables in
+Oracle Open Office Writer : OLE objects;number of
+Oracle Open Office Writer : OLE objects;protecting
+Oracle Open Office Writer : one and a half line spacing in text
+Oracle Open Office Writer : online feedback options
+Oracle Open Office Writer : online registration
+Oracle Open Office Writer : online update options
+Oracle Open Office Writer : online updates
+Oracle Open Office Writer : online updates;checking automatically
+Oracle Open Office Writer : online updates;checking manually
+Oracle Open Office Writer : OpenDocument file formats
+Oracle Open Office Writer : OpenGL
+Oracle Open Office Writer : OpenGL;definition
+Oracle Open Office Writer : opening
+Oracle Open Office Writer : opening;context menus
+Oracle Open Office Writer : opening;database files
+Oracle Open Office Writer : opening;dialog settings
+Oracle Open Office Writer : opening;documents
+Oracle Open Office Writer : opening;documents from other formats
+Oracle Open Office Writer : opening;documents on WebDAV server
+Oracle Open Office Writer : opening;files with links
+Oracle Open Office Writer : opening;files, with placeholders
+Oracle Open Office Writer : opening;forms
+Oracle Open Office Writer : opening;Microsoft Office files
+Oracle Open Office Writer : opening;mobile device documents
+Oracle Open Office Writer : opening;objects
+Oracle Open Office Writer : opening;reports
+Oracle Open Office Writer : opening;several files
+Oracle Open Office Writer : opening;XForms
+Oracle Open Office Writer : operators
+Oracle Open Office Writer : operators;default filters
+Oracle Open Office Writer : operators;in formulas
+Oracle Open Office Writer : optional hyphens (Writer)
+Oracle Open Office Writer : options
+Oracle Open Office Writer : options;accessibility
+Oracle Open Office Writer : options;appearance
+Oracle Open Office Writer : options;compatibility (Writer)
+Oracle Open Office Writer : options;improvement program
+Oracle Open Office Writer : options;network identity
+Oracle Open Office Writer : options;online update
+Oracle Open Office Writer : options;smart tags
+Oracle Open Office Writer : options;tools
+Oracle Open Office Writer : Oracle databases (base)
+Oracle Open Office Writer : Oracle Open Office Base data sources
+Oracle Open Office Writer : Oracle Open Office Basic scripts in HTML documents
+Oracle Open Office Writer : Oracle Open Office documents
+Oracle Open Office Writer : Oracle Open Office documents;mobile device filters
+Oracle Open Office Writer : Oracle Open Office documents;viewing and editing in Internet Explorer
+Oracle Open Office Writer : Oracle Open Office Math start
+Oracle Open Office Writer : Oracle Open Office Writer
+Oracle Open Office Writer : Oracle Open Office Writer;instructions
+Oracle Open Office Writer : Oracle Open Office Writer;special HTML tags
+Oracle Open Office Writer : order of chart data
+Oracle Open Office Writer : ordering
+Oracle Open Office Writer : ordering;objects
+Oracle Open Office Writer : ordering;printing in reverse order
+Oracle Open Office Writer : ordinal numbers
+Oracle Open Office Writer : ordinal numbers;replacing
+Oracle Open Office Writer : organizing
+Oracle Open Office Writer : organizing;footnotes
+Oracle Open Office Writer : organizing;macros and scripts
+Oracle Open Office Writer : organizing;namespaces in XForms
+Oracle Open Office Writer : organizing;styles
+Oracle Open Office Writer : organizing;templates
+Oracle Open Office Writer : organizing;templates (guide)
+Oracle Open Office Writer : orientation of pages
+Oracle Open Office Writer : original size
+Oracle Open Office Writer : original size;printing in Oracle Open Office Math
+Oracle Open Office Writer : original size;restoring after cropping
+Oracle Open Office Writer : orphans
+Oracle Open Office Writer : outlines
+Oracle Open Office Writer : outlines;arranging chapters
+Oracle Open Office Writer : outlines;font effects
+Oracle Open Office Writer : outlines;numbering
+Oracle Open Office Writer : outlines;outline symbols
+Oracle Open Office Writer : outlines;sending to presentations
+Oracle Open Office Writer : overviews
+Oracle Open Office Writer : overviews;Navigator in text documents
+Oracle Open Office Writer : overviews;printing multi-page view
+Oracle Open Office Writer : overwrite mode
+Oracle Open Office Writer : packages, see extensions
+Oracle Open Office Writer : page breaks
+Oracle Open Office Writer : page breaks;displaying (Calc)
+Oracle Open Office Writer : page breaks;inserting and deleting
+Oracle Open Office Writer : page breaks;tables
+Oracle Open Office Writer : page counts
+Oracle Open Office Writer : page formats
+Oracle Open Office Writer : page formats;changing individual pages
+Oracle Open Office Writer : page formats;maximizing
+Oracle Open Office Writer : page formats;restriction
+Oracle Open Office Writer : page margins on rulers
+Oracle Open Office Writer : page numbers
+Oracle Open Office Writer : page numbers;continuation pages
+Oracle Open Office Writer : page numbers;footers
+Oracle Open Office Writer : page numbers;inserting/defining/formatting
+Oracle Open Office Writer : page styles
+Oracle Open Office Writer : page styles;backgrounds
+Oracle Open Office Writer : page styles;changing
+Oracle Open Office Writer : page styles;changing from selection
+Oracle Open Office Writer : page styles;creating and applying
+Oracle Open Office Writer : page styles;editing/applying with statusbar
+Oracle Open Office Writer : page styles;left and right pages
+Oracle Open Office Writer : page styles;orientation/scope
+Oracle Open Office Writer : page styles;page numbering
+Oracle Open Office Writer : page styles;style categories
+Oracle Open Office Writer : pages
+Oracle Open Office Writer : pages;backgrounds
+Oracle Open Office Writer : pages;backgrounds in all applications
+Oracle Open Office Writer : pages;continuation pages
+Oracle Open Office Writer : pages;defining borders
+Oracle Open Office Writer : pages;formatting and numbering
+Oracle Open Office Writer : pages;inserting/deleting page breaks
+Oracle Open Office Writer : pages;jumping to
+Oracle Open Office Writer : pages;left and right pages
+Oracle Open Office Writer : pages;number of
+Oracle Open Office Writer : pages;numbers and count of
+Oracle Open Office Writer : pages;orientation
+Oracle Open Office Writer : pages;previews
+Oracle Open Office Writer : pages;printing multiple on one sheet
+Oracle Open Office Writer : pages;printing page names in presentations
+Oracle Open Office Writer : pages;register-true
+Oracle Open Office Writer : pages;scaling
+Oracle Open Office Writer : pages;selecting one to print
+Oracle Open Office Writer : paint box
+Oracle Open Office Writer : paint can symbol
+Oracle Open Office Writer : pair kerning
+Oracle Open Office Writer : Palm file filters
+Oracle Open Office Writer : paper formats
+Oracle Open Office Writer : paper orientation
+Oracle Open Office Writer : paper size warning
+Oracle Open Office Writer : paper tray selection
+Oracle Open Office Writer : paper trays
+Oracle Open Office Writer : paragraph marks
+Oracle Open Office Writer : paragraph marks;displaying (Writer)
+Oracle Open Office Writer : paragraph marks;finding & replacing
+Oracle Open Office Writer : paragraph styles
+Oracle Open Office Writer : paragraph styles;languages
+Oracle Open Office Writer : paragraph styles;modifying basic fonts
+Oracle Open Office Writer : paragraph styles;numbering
+Oracle Open Office Writer : paragraph styles;style categories
+Oracle Open Office Writer : paragraphs
+Oracle Open Office Writer : paragraphs;alignment
+Oracle Open Office Writer : paragraphs;Asian typography
+Oracle Open Office Writer : paragraphs;automatic numbering
+Oracle Open Office Writer : paragraphs;backgrounds
+Oracle Open Office Writer : paragraphs;bulleted
+Oracle Open Office Writer : paragraphs;defining borders
+Oracle Open Office Writer : paragraphs;hidden paragraphs (Writer)
+Oracle Open Office Writer : paragraphs;hiding
+Oracle Open Office Writer : paragraphs;increasing indents of
+Oracle Open Office Writer : paragraphs;indents
+Oracle Open Office Writer : paragraphs;indents, margins and columns
+Oracle Open Office Writer : paragraphs;inserting before/after tables
+Oracle Open Office Writer : paragraphs;inserting bullets
+Oracle Open Office Writer : paragraphs;joining
+Oracle Open Office Writer : paragraphs;keeping together at breaks
+Oracle Open Office Writer : paragraphs;line numbers
+Oracle Open Office Writer : paragraphs;moving by keyboard
+Oracle Open Office Writer : paragraphs;numbering automatically
+Oracle Open Office Writer : paragraphs;numbering non-consecutive
+Oracle Open Office Writer : paragraphs;numbering on/off
+Oracle Open Office Writer : paragraphs;register-true
+Oracle Open Office Writer : paragraphs;removing blank ones
+Oracle Open Office Writer : paragraphs;spacing
+Oracle Open Office Writer : paragraphs;tab stops
+Oracle Open Office Writer : parameters
+Oracle Open Office Writer : parameters;command line
+Oracle Open Office Writer : parameters;queries (Base)
+Oracle Open Office Writer : passwords for protecting contents
+Oracle Open Office Writer : pasting
+Oracle Open Office Writer : pasting;cell ranges
+Oracle Open Office Writer : pasting;cell ranges from spreadsheets
+Oracle Open Office Writer : pasting;cut/copied text sections
+Oracle Open Office Writer : pasting;data from text documents
+Oracle Open Office Writer : pasting;draw objects
+Oracle Open Office Writer : pasting;draw objects from other documents
+Oracle Open Office Writer : pasting;formatted/unformatted text
+Oracle Open Office Writer : pasting;from data source view
+Oracle Open Office Writer : pasting;from data sources to Oracle Open Office Calc
+Oracle Open Office Writer : pasting;pictures from other documents
+Oracle Open Office Writer : pasting;results of formulas
+Oracle Open Office Writer : pasting;sheet areas in text documents
+Oracle Open Office Writer : pasting;to Gallery
+Oracle Open Office Writer : paths
+Oracle Open Office Writer : paths;changing work directory
+Oracle Open Office Writer : paths;defaults
+Oracle Open Office Writer : pattern editor
+Oracle Open Office Writer : pattern fields
+Oracle Open Office Writer : pattern fields;form functions
+Oracle Open Office Writer : patterns for objects
+Oracle Open Office Writer : PDF
+Oracle Open Office Writer : PDF;export
+Oracle Open Office Writer : PDF;PostScript to PDF converter, UNIX
+Oracle Open Office Writer : personal data input
+Oracle Open Office Writer : phonetic guide
+Oracle Open Office Writer : picklist creation
+Oracle Open Office Writer : pictures
+Oracle Open Office Writer : pictures;adding to Gallery
+Oracle Open Office Writer : pictures;anchoring options
+Oracle Open Office Writer : pictures;arranging within stacks
+Oracle Open Office Writer : pictures;assigning macros
+Oracle Open Office Writer : pictures;backgrounds
+Oracle Open Office Writer : pictures;borders
+Oracle Open Office Writer : pictures;captions (Writer)
+Oracle Open Office Writer : pictures;changing paths
+Oracle Open Office Writer : pictures;cropping and zooming
+Oracle Open Office Writer : pictures;cross-referencing
+Oracle Open Office Writer : pictures;defining hyperlinks
+Oracle Open Office Writer : pictures;displaying in Calc
+Oracle Open Office Writer : pictures;displaying in Writer (Writer)
+Oracle Open Office Writer : pictures;do not show
+Oracle Open Office Writer : pictures;drag and drop between documents
+Oracle Open Office Writer : pictures;drawing
+Oracle Open Office Writer : pictures;editing
+Oracle Open Office Writer : pictures;filters
+Oracle Open Office Writer : pictures;ImageMap
+Oracle Open Office Writer : pictures;inserting automatically
+Oracle Open Office Writer : pictures;inserting by dialog
+Oracle Open Office Writer : pictures;inserting from Draw
+Oracle Open Office Writer : pictures;inserting from Gallery
+Oracle Open Office Writer : pictures;inserting from Gallery into text
+Oracle Open Office Writer : pictures;inserting options
+Oracle Open Office Writer : pictures;number of
+Oracle Open Office Writer : pictures;printing
+Oracle Open Office Writer : pictures;scaling/resizing
+Oracle Open Office Writer : pictures;scanning
+Oracle Open Office Writer : pie charts
+Oracle Open Office Writer : pie charts;options
+Oracle Open Office Writer : pie charts;types
+Oracle Open Office Writer : pixel editor
+Oracle Open Office Writer : pixel graphics
+Oracle Open Office Writer : pixel graphics;inserting and editing
+Oracle Open Office Writer : pixel patterns
+Oracle Open Office Writer : placeholders
+Oracle Open Office Writer : placeholders;in SQL queries
+Oracle Open Office Writer : placeholders;on opening files
+Oracle Open Office Writer : placing toolbars
+Oracle Open Office Writer : playing movies and sound files
+Oracle Open Office Writer : plotting data as charts
+Oracle Open Office Writer : plug-ins
+Oracle Open Office Writer : plug-ins;activating and deactivating
+Oracle Open Office Writer : plug-ins;definition
+Oracle Open Office Writer : plug-ins;inserting
+Oracle Open Office Writer : pocket device appliances
+Oracle Open Office Writer : Pocket PC file filters
+Oracle Open Office Writer : points
+Oracle Open Office Writer : points;reducing editing points when snapping (Impress/Draw)
+Oracle Open Office Writer : polygon drawing
+Oracle Open Office Writer : pop-art filter
+Oracle Open Office Writer : portable document format
+Oracle Open Office Writer : portrait and landscape
+Oracle Open Office Writer : positioning
+Oracle Open Office Writer : positioning;axes
+Oracle Open Office Writer : positioning;draw objects and controls
+Oracle Open Office Writer : positioning;fonts
+Oracle Open Office Writer : positioning;objects
+Oracle Open Office Writer : positioning;objects (guide)
+Oracle Open Office Writer : positioning;toolbars
+Oracle Open Office Writer : post method for form transmissions
+Oracle Open Office Writer : posterizing filter
+Oracle Open Office Writer : PostScript
+Oracle Open Office Writer : PostScript;creating files
+Oracle Open Office Writer : PostScript;PDF converter, UNIX
+Oracle Open Office Writer : PowerPoint export
+Oracle Open Office Writer : precision as shown (Calc)
+Oracle Open Office Writer : predefining fonts
+Oracle Open Office Writer : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
+Oracle Open Office Writer : presentations
+Oracle Open Office Writer : presentations;creating/opening
+Oracle Open Office Writer : presentations;inserting spreadsheet cells
+Oracle Open Office Writer : presentations;live on the Internet
+Oracle Open Office Writer : presentations;print menu
+Oracle Open Office Writer : presentations;saving
+Oracle Open Office Writer : presentations;saving automatically
+Oracle Open Office Writer : presentations;saving in other formats
+Oracle Open Office Writer : presentations;sending as e-mail
+Oracle Open Office Writer : presentations;starting with wizard
+Oracle Open Office Writer : presentations;wizards
+Oracle Open Office Writer : Presenter Console shortcuts
+Oracle Open Office Writer : press buttons, see push buttons
+Oracle Open Office Writer : previews
+Oracle Open Office Writer : previews;book preview
+Oracle Open Office Writer : previews;fonts lists
+Oracle Open Office Writer : previews;print layouts
+Oracle Open Office Writer : primary keys
+Oracle Open Office Writer : primary keys;defining
+Oracle Open Office Writer : primary keys;design view
+Oracle Open Office Writer : primary keys;inserting (Base)
+Oracle Open Office Writer : print area selection
+Oracle Open Office Writer : print layout checks
+Oracle Open Office Writer : printer metrics for document formatting (Writer)
+Oracle Open Office Writer : printers
+Oracle Open Office Writer : printers;adding, UNIX
+Oracle Open Office Writer : printers;choosing
+Oracle Open Office Writer : printers;default printer
+Oracle Open Office Writer : printers;faxes under UNIX
+Oracle Open Office Writer : printers;maximum page formats
+Oracle Open Office Writer : printers;paper trays
+Oracle Open Office Writer : printers;properties
+Oracle Open Office Writer : printing
+Oracle Open Office Writer : printing;AutoText shortcuts
+Oracle Open Office Writer : printing;black and white
+Oracle Open Office Writer : printing;brochures
+Oracle Open Office Writer : printing;colors in grayscale
+Oracle Open Office Writer : printing;comments
+Oracle Open Office Writer : printing;copies
+Oracle Open Office Writer : printing;creating individual jobs
+Oracle Open Office Writer : printing;dates in presentations
+Oracle Open Office Writer : printing;directly
+Oracle Open Office Writer : printing;documents
+Oracle Open Office Writer : printing;drawings defaults
+Oracle Open Office Writer : printing;elements in text documents
+Oracle Open Office Writer : printing;faster
+Oracle Open Office Writer : printing;fitting to pages in Oracle Open Office Math
+Oracle Open Office Writer : printing;fitting to pages in presentations
+Oracle Open Office Writer : printing;formulas in Oracle Open Office Math
+Oracle Open Office Writer : printing;hidden pages of presentations
+Oracle Open Office Writer : printing;hiding text frames from printing
+Oracle Open Office Writer : printing;in original size in Oracle Open Office Math
+Oracle Open Office Writer : printing;individual brochures
+Oracle Open Office Writer : printing;left/right pages
+Oracle Open Office Writer : printing;multiple pages per sheet
+Oracle Open Office Writer : printing;portrait/landscape format
+Oracle Open Office Writer : printing;previews
+Oracle Open Office Writer : printing;queries (Base)
+Oracle Open Office Writer : printing;reverse order
+Oracle Open Office Writer : printing;scaling in Oracle Open Office Math
+Oracle Open Office Writer : printing;selections
+Oracle Open Office Writer : printing;text always in black
+Oracle Open Office Writer : printing;text in reverse order
+Oracle Open Office Writer : printing;tiling pages in presentations
+Oracle Open Office Writer : printing;transparencies
+Oracle Open Office Writer : printing;warnings
+Oracle Open Office Writer : printing;without scaling in presentations
+Oracle Open Office Writer : printing speed
+Oracle Open Office Writer : programming
+Oracle Open Office Writer : programming;Oracle Open Office
+Oracle Open Office Writer : programming;scripting
+Oracle Open Office Writer : promoting heading levels
+Oracle Open Office Writer : properties
+Oracle Open Office Writer : properties;charts
+Oracle Open Office Writer : properties;fields
+Oracle Open Office Writer : properties;fields in databases
+Oracle Open Office Writer : properties;files
+Oracle Open Office Writer : properties;form controls
+Oracle Open Office Writer : properties;forms
+Oracle Open Office Writer : properties;printers
+Oracle Open Office Writer : properties;smooth lines in line charts/XY charts
+Oracle Open Office Writer : proportional distribution of tables
+Oracle Open Office Writer : protected contents
+Oracle Open Office Writer : protected dashes
+Oracle Open Office Writer : protected database tables
+Oracle Open Office Writer : protected documents
+Oracle Open Office Writer : protected spaces
+Oracle Open Office Writer : protected spaces;inserting
+Oracle Open Office Writer : protected spaces;showing (Writer)
+Oracle Open Office Writer : protecting
+Oracle Open Office Writer : protecting;contents
+Oracle Open Office Writer : protecting;recorded changes
+Oracle Open Office Writer : protecting;sections
+Oracle Open Office Writer : protecting;tables and sections
+Oracle Open Office Writer : protecting;text flow
+Oracle Open Office Writer : proxy settings
+Oracle Open Office Writer : push buttons
+Oracle Open Office Writer : push buttons;adding to documents
+Oracle Open Office Writer : push buttons;creating
+Oracle Open Office Writer : queries
+Oracle Open Office Writer : queries;copying (Base)
+Oracle Open Office Writer : queries;creating in design view (Base)
+Oracle Open Office Writer : queries;creating in SQL view
+Oracle Open Office Writer : queries;defining (Base)
+Oracle Open Office Writer : queries;deleting table links (Base)
+Oracle Open Office Writer : queries;editing in data source view
+Oracle Open Office Writer : queries;formulating filter conditions (Base)
+Oracle Open Office Writer : queries;joining tables (Base)
+Oracle Open Office Writer : queries;missing elements (Base)
+Oracle Open Office Writer : queries;overview (Base)
+Oracle Open Office Writer : queries;parameter queries (Base)
+Oracle Open Office Writer : queries;printing (Base)
+Oracle Open Office Writer : Query Wizard (Base)
+Oracle Open Office Writer : Quickstarter
+Oracle Open Office Writer : quotation marks
+Oracle Open Office Writer : quotation marks;changing automatically
+Oracle Open Office Writer : quotes
+Oracle Open Office Writer : quotes;custom
+Oracle Open Office Writer : radar charts, see net charts
+Oracle Open Office Writer : radio button creation
+Oracle Open Office Writer : read-only documents
+Oracle Open Office Writer : read-only documents;cursor
+Oracle Open Office Writer : read-only documents;database tables on/off
+Oracle Open Office Writer : read-only documents;editing
+Oracle Open Office Writer : read-only documents;opening documents as
+Oracle Open Office Writer : read-only items in Data Navigator
+Oracle Open Office Writer : read-only sections
+Oracle Open Office Writer : rearranging headings
+Oracle Open Office Writer : recognition
+Oracle Open Office Writer : recognition;languages
+Oracle Open Office Writer : recognition;numbers
+Oracle Open Office Writer : recognizing URLs automatically
+Oracle Open Office Writer : recording
+Oracle Open Office Writer : recording;changes
+Oracle Open Office Writer : recording;macros
+Oracle Open Office Writer : records
+Oracle Open Office Writer : records;inserting comments
+Oracle Open Office Writer : records;protecting
+Oracle Open Office Writer : records;saving
+Oracle Open Office Writer : records;searching in databases
+Oracle Open Office Writer : rectangles with round corners
+Oracle Open Office Writer : recursions in spreadsheets
+Oracle Open Office Writer : redo command
+Oracle Open Office Writer : reduced printing
+Oracle Open Office Writer : reduced printing of multiple pages
+Oracle Open Office Writer : reducing rows and columns in text tables
+Oracle Open Office Writer : reference lines
+Oracle Open Office Writer : references
+Oracle Open Office Writer : references;displaying in color (Calc)
+Oracle Open Office Writer : references;expanding (Calc)
+Oracle Open Office Writer : references;in Writer tables
+Oracle Open Office Writer : references;inserting cross-references
+Oracle Open Office Writer : references;iterative (Calc)
+Oracle Open Office Writer : references;modifying cross-references
+Oracle Open Office Writer : refusing word completions
+Oracle Open Office Writer : register-true
+Oracle Open Office Writer : register-true;definition
+Oracle Open Office Writer : register-true;pages and paragraphs
+Oracle Open Office Writer : registering
+Oracle Open Office Writer : registering;address books
+Oracle Open Office Writer : registering;databases (Base)
+Oracle Open Office Writer : registering;Oracle Open Office
+Oracle Open Office Writer : regression curves in charts
+Oracle Open Office Writer : regular expressions
+Oracle Open Office Writer : regular expressions;list of
+Oracle Open Office Writer : regular expressions;searching
+Oracle Open Office Writer : rejecting word completions
+Oracle Open Office Writer : related words in thesaurus
+Oracle Open Office Writer : relational databases (Base)
+Oracle Open Office Writer : relations
+Oracle Open Office Writer : relations;creating and deleting (Base)
+Oracle Open Office Writer : relations;joining tables (Base)
+Oracle Open Office Writer : relations;properties (Base)
+Oracle Open Office Writer : relative distribution of table cells
+Oracle Open Office Writer : relative hyperlinks
+Oracle Open Office Writer : relative saving of URLs
+Oracle Open Office Writer : reloading
+Oracle Open Office Writer : reloading;documents
+Oracle Open Office Writer : reloading;HTML documents, automatically
+Oracle Open Office Writer : remarks, see also comments
+Oracle Open Office Writer : remote configurations
+Oracle Open Office Writer : remove noise filter
+Oracle Open Office Writer : removing
+Oracle Open Office Writer : removing;bullets and numbering
+Oracle Open Office Writer : removing;bullets in text documents
+Oracle Open Office Writer : removing;cell protection in text documents
+Oracle Open Office Writer : removing;form filters
+Oracle Open Office Writer : removing;subdocuments
+Oracle Open Office Writer : removing, see also deleting
+Oracle Open Office Writer : reorganizing charts
+Oracle Open Office Writer : repeating
+Oracle Open Office Writer : repeating;commands
+Oracle Open Office Writer : repeating;table headings after page breaks
+Oracle Open Office Writer : replacement options
+Oracle Open Office Writer : replacement table
+Oracle Open Office Writer : replacing
+Oracle Open Office Writer : replacing;AutoCorrect function
+Oracle Open Office Writer : replacing;dashes
+Oracle Open Office Writer : replacing;databases
+Oracle Open Office Writer : replacing;fields, by text
+Oracle Open Office Writer : replacing;objects from Gallery
+Oracle Open Office Writer : replacing;ordinal numbers
+Oracle Open Office Writer : replacing;tab stops (regular expressions)
+Oracle Open Office Writer : replacing;text and text formats
+Oracle Open Office Writer : Report Builder
+Oracle Open Office Writer : reports
+Oracle Open Office Writer : reports;creating
+Oracle Open Office Writer : reports;error reports
+Oracle Open Office Writer : reports;opening and editing
+Oracle Open Office Writer : reports;templates
+Oracle Open Office Writer : resetting
+Oracle Open Office Writer : resetting;fonts
+Oracle Open Office Writer : resetting;templates
+Oracle Open Office Writer : resizing
+Oracle Open Office Writer : resizing;aspect ratio
+Oracle Open Office Writer : resizing;objects and frames, by keyboard
+Oracle Open Office Writer : resizing;objects, by mouse
+Oracle Open Office Writer : resizing;rows and columns in text tables
+Oracle Open Office Writer : resizing;text frames, by mouse
+Oracle Open Office Writer : resizing;windows
+Oracle Open Office Writer : resizing, see also scaling/zooming
+Oracle Open Office Writer : resolution when printing bitmaps
+Oracle Open Office Writer : restoring
+Oracle Open Office Writer : restoring;default formatting
+Oracle Open Office Writer : restoring;editing
+Oracle Open Office Writer : reversing printing order
+Oracle Open Office Writer : review function
+Oracle Open Office Writer : review function;accepting or rejecting changes
+Oracle Open Office Writer : review function;comparing documents
+Oracle Open Office Writer : review function;protecting records
+Oracle Open Office Writer : review function;recording changes example
+Oracle Open Office Writer : rich text control
+Oracle Open Office Writer : right alignment of paragraphs
+Oracle Open Office Writer : right indents in paragraphs
+Oracle Open Office Writer : right joins (Base)
+Oracle Open Office Writer : right pages
+Oracle Open Office Writer : right-to-left text
+Oracle Open Office Writer : rising outline levels
+Oracle Open Office Writer : rotating
+Oracle Open Office Writer : rotating;3D text
+Oracle Open Office Writer : rotating;text
+Oracle Open Office Writer : round corners
+Oracle Open Office Writer : rounding precision (Calc)
+Oracle Open Office Writer : row breaks in text tables
+Oracle Open Office Writer : row headers
+Oracle Open Office Writer : row headers;displaying (Calc)
+Oracle Open Office Writer : row headers;highlighting (Calc)
+Oracle Open Office Writer : rows
+Oracle Open Office Writer : rows;inserting in tables, using icon
+Oracle Open Office Writer : rows;inserting/deleting in tables by keyboard
+Oracle Open Office Writer : rows;register-true text
+Oracle Open Office Writer : rows;selecting
+Oracle Open Office Writer : rulers
+Oracle Open Office Writer : rulers;default settings
+Oracle Open Office Writer : rulers;measurement units
+Oracle Open Office Writer : rulers;using rulers
+Oracle Open Office Writer : rulers;visible in presentations
+Oracle Open Office Writer : rules
+Oracle Open Office Writer : running titles in headers
+Oracle Open Office Writer : samples and templates
+Oracle Open Office Writer : saving
+Oracle Open Office Writer : saving;default file formats
+Oracle Open Office Writer : saving;dialog settings
+Oracle Open Office Writer : saving;documents
+Oracle Open Office Writer : saving;documents for mobile devices
+Oracle Open Office Writer : saving;documents in other formats
+Oracle Open Office Writer : saving;documents, automatically
+Oracle Open Office Writer : saving;in HTML format
+Oracle Open Office Writer : saving;in Microsoft Office file format
+Oracle Open Office Writer : saving;options
+Oracle Open Office Writer : saving;templates
+Oracle Open Office Writer : saving;to XML
+Oracle Open Office Writer : saving;VBA code in Microsoft Office documents
+Oracle Open Office Writer : saving;with password by default
+Oracle Open Office Writer : saving as command
+Oracle Open Office Writer : saving as command;precautions
+Oracle Open Office Writer : scaling
+Oracle Open Office Writer : scaling;axes
+Oracle Open Office Writer : scaling;font sizes in user interface
+Oracle Open Office Writer : scaling;objects
+Oracle Open Office Writer : scaling;pictures
+Oracle Open Office Writer : scaling;printing in Oracle Open Office Math
+Oracle Open Office Writer : scaling;text frames, by mouse
+Oracle Open Office Writer : scaling;text in charts
+Oracle Open Office Writer : scaling;when printing presentations
+Oracle Open Office Writer : scaling, see also zooming
+Oracle Open Office Writer : scanning pictures
+Oracle Open Office Writer : scatter charts
+Oracle Open Office Writer : scope of page styles
+Oracle Open Office Writer : screen
+Oracle Open Office Writer : screen;full screen views
+Oracle Open Office Writer : screen;scaling
+Oracle Open Office Writer : screen magnifiers
+Oracle Open Office Writer : screen readers
+Oracle Open Office Writer : script organization
+Oracle Open Office Writer : scrollbars
+Oracle Open Office Writer : scrollbars;controls
+Oracle Open Office Writer : scrollbars;displaying (Calc)
+Oracle Open Office Writer : scrollbars;horizontal and vertical (Writer)
+Oracle Open Office Writer : search criteria for database functions in cells
+Oracle Open Office Writer : search engines
+Oracle Open Office Writer : search engines;definition
+Oracle Open Office Writer : search engines;selecting
+Oracle Open Office Writer : searching
+Oracle Open Office Writer : searching;all sheets
+Oracle Open Office Writer : searching;cross-references
+Oracle Open Office Writer : searching;databases
+Oracle Open Office Writer : searching;form filters
+Oracle Open Office Writer : searching;formats
+Oracle Open Office Writer : searching;Internet
+Oracle Open Office Writer : searching;repeating a search
+Oracle Open Office Writer : searching;synonyms
+Oracle Open Office Writer : searching;tables and forms
+Oracle Open Office Writer : searching;with wildcards
+Oracle Open Office Writer : searching, see also finding
+Oracle Open Office Writer : secondary axes in charts
+Oracle Open Office Writer : sections
+Oracle Open Office Writer : sections;backgrounds
+Oracle Open Office Writer : sections;columns in/use of
+Oracle Open Office Writer : sections;defining conditions
+Oracle Open Office Writer : sections;editing
+Oracle Open Office Writer : sections;hiding
+Oracle Open Office Writer : sections;inserting
+Oracle Open Office Writer : sections;inserting external content
+Oracle Open Office Writer : sections;inserting sections by DDE
+Oracle Open Office Writer : sections;moving and copying
+Oracle Open Office Writer : sections;protecting/unprotecting
+Oracle Open Office Writer : security
+Oracle Open Office Writer : security;digital signatures
+Oracle Open Office Writer : security;options for documents with macros
+Oracle Open Office Writer : security;protecting contents
+Oracle Open Office Writer : security;security levels for macros
+Oracle Open Office Writer : security;warning dialogs with macros
+Oracle Open Office Writer : selecting
+Oracle Open Office Writer : selecting;controls
+Oracle Open Office Writer : selecting;measurement units
+Oracle Open Office Writer : selecting;objects
+Oracle Open Office Writer : selecting;paper trays
+Oracle Open Office Writer : selecting;print areas
+Oracle Open Office Writer : selecting;several files
+Oracle Open Office Writer : selecting;tables
+Oracle Open Office Writer : selecting;text, with keyboard
+Oracle Open Office Writer : selection clipboard
+Oracle Open Office Writer : selection frames
+Oracle Open Office Writer : selection modes in text
+Oracle Open Office Writer : sending
+Oracle Open Office Writer : sending;AutoAbstract function in presentations
+Oracle Open Office Writer : sending;documents as e-mail
+Oracle Open Office Writer : sending;documents as faxes
+Oracle Open Office Writer : separation, see hyphenation
+Oracle Open Office Writer : separator lines
+Oracle Open Office Writer : separator lines;AutoFormat function
+Oracle Open Office Writer : separator lines;defining
+Oracle Open Office Writer : separators
+Oracle Open Office Writer : separators;conditional
+Oracle Open Office Writer : serial letters
+Oracle Open Office Writer : Server Side ImageMap
+Oracle Open Office Writer : settings
+Oracle Open Office Writer : settings;direct cursor
+Oracle Open Office Writer : settings;printers
+Oracle Open Office Writer : settings;program configuration
+Oracle Open Office Writer : settings;proxies
+Oracle Open Office Writer : settings;tracking changes
+Oracle Open Office Writer : settings;views
+Oracle Open Office Writer : settings;word completion
+Oracle Open Office Writer : SGML
+Oracle Open Office Writer : SGML;definition
+Oracle Open Office Writer : shadows
+Oracle Open Office Writer : shadows;areas
+Oracle Open Office Writer : shadows;borders
+Oracle Open Office Writer : shadows;characters
+Oracle Open Office Writer : shadows;characters, using context menu
+Oracle Open Office Writer : shadows;headers/footers
+Oracle Open Office Writer : sharing documents
+Oracle Open Office Writer : sharpening filter
+Oracle Open Office Writer : sheet tabs
+Oracle Open Office Writer : sheet tabs;displaying
+Oracle Open Office Writer : sheets
+Oracle Open Office Writer : sheets;searching all
+Oracle Open Office Writer : shortcut keys
+Oracle Open Office Writer : shortcut keys;assigning macros
+Oracle Open Office Writer : shortcut keys;bold formatting
+Oracle Open Office Writer : shortcut keys;charts
+Oracle Open Office Writer : shortcut keys;general
+Oracle Open Office Writer : shortcut keys;in databases
+Oracle Open Office Writer : shortcut keys;in text documents
+Oracle Open Office Writer : shortcut keys;Oracle Open Office accessibility
+Oracle Open Office Writer : showing
+Oracle Open Office Writer : showing;changes
+Oracle Open Office Writer : showing;docked windows
+Oracle Open Office Writer : showing;drawings and controls (Writer)
+Oracle Open Office Writer : showing;live presentations on the Internet
+Oracle Open Office Writer : showing;rulers
+Oracle Open Office Writer : showing;toolbars
+Oracle Open Office Writer : sideways orientation of pages
+Oracle Open Office Writer : signing documents with digital signatures
+Oracle Open Office Writer : similarity search
+Oracle Open Office Writer : simple handles (Writer)
+Oracle Open Office Writer : simplified Chinese
+Oracle Open Office Writer : simplified Chinese;translating to traditional Chinese
+Oracle Open Office Writer : single sign on options
+Oracle Open Office Writer : single-line spacing in text
+Oracle Open Office Writer : sizes
+Oracle Open Office Writer : sizes;draw objects
+Oracle Open Office Writer : sizes;pictures
+Oracle Open Office Writer : slanting draw objects
+Oracle Open Office Writer : small capitals
+Oracle Open Office Writer : small capitals (guide)
+Oracle Open Office Writer : small icons
+Oracle Open Office Writer : smart tag configuration
+Oracle Open Office Writer : smart tags
+Oracle Open Office Writer : smooth scrolling (Writer)
+Oracle Open Office Writer : smoothing filter
+Oracle Open Office Writer : snap grid defaults (Writer/Calc)
+Oracle Open Office Writer : snapping in presentations and drawings
+Oracle Open Office Writer : solarization filter
+Oracle Open Office Writer : sort lists
+Oracle Open Office Writer : sort lists;copying to in Calc
+Oracle Open Office Writer : sorting
+Oracle Open Office Writer : sorting;data in forms
+Oracle Open Office Writer : sorting;databases
+Oracle Open Office Writer : sorting;paragraphs in special languages
+Oracle Open Office Writer : sorting;paragraphs/table rows
+Oracle Open Office Writer : sound files
+Oracle Open Office Writer : spaces
+Oracle Open Office Writer : spaces;displaying (Writer)
+Oracle Open Office Writer : spaces;ignoring double
+Oracle Open Office Writer : spaces;inserting protected spaces
+Oracle Open Office Writer : spaces;showing protected spaces (Writer)
+Oracle Open Office Writer : spacing
+Oracle Open Office Writer : spacing;between paragraphs in footnotes
+Oracle Open Office Writer : spacing;endnotes/footnotes
+Oracle Open Office Writer : spacing;font effects
+Oracle Open Office Writer : spacing;lines and paragraphs
+Oracle Open Office Writer : spacing;register-true text
+Oracle Open Office Writer : spacing;tab stops in text documents
+Oracle Open Office Writer : spacing;tabs in presentations
+Oracle Open Office Writer : spadmin
+Oracle Open Office Writer : special characters
+Oracle Open Office Writer : speech bubbles
+Oracle Open Office Writer : speed of printing
+Oracle Open Office Writer : spellcheck
+Oracle Open Office Writer : spellcheck;activating for a language
+Oracle Open Office Writer : spellcheck;activating for all languages
+Oracle Open Office Writer : spellcheck;AutoSpellcheck on/off
+Oracle Open Office Writer : spellcheck;checking text documents manually
+Oracle Open Office Writer : spellcheck;context menus
+Oracle Open Office Writer : spellcheck;default languages
+Oracle Open Office Writer : spellcheck;dialog
+Oracle Open Office Writer : spellcheck;dictionary of exceptions
+Oracle Open Office Writer : spellcheck;ignore list
+Oracle Open Office Writer : spelling in thesaurus
+Oracle Open Office Writer : spin button creation
+Oracle Open Office Writer : splitting cells
+Oracle Open Office Writer : splitting cells;by keyboard
+Oracle Open Office Writer : splitting cells;by menu command
+Oracle Open Office Writer : splitting tables
+Oracle Open Office Writer : splitting tables;at cursor position
+Oracle Open Office Writer : splitting tables;row breaks
+Oracle Open Office Writer : spoolfiles with Xprinter
+Oracle Open Office Writer : spreadsheets
+Oracle Open Office Writer : spreadsheets;as databases (base)
+Oracle Open Office Writer : spreadsheets;copying areas to text documents
+Oracle Open Office Writer : spreadsheets;creating/opening
+Oracle Open Office Writer : spreadsheets;inserting charts
+Oracle Open Office Writer : spreadsheets;inserting database records
+Oracle Open Office Writer : spreadsheets;inserting tables from
+Oracle Open Office Writer : spreadsheets;printing
+Oracle Open Office Writer : spreadsheets;saving
+Oracle Open Office Writer : spreadsheets;saving automatically
+Oracle Open Office Writer : spreadsheets;saving in other formats
+Oracle Open Office Writer : spreadsheets;sending as e-mail
+Oracle Open Office Writer : SQL
+Oracle Open Office Writer : SQL;definition
+Oracle Open Office Writer : SQL;DISTINCT parameter
+Oracle Open Office Writer : SQL;executing SQL commands
+Oracle Open Office Writer : SQL;executing SQL statements (Base)
+Oracle Open Office Writer : SQL;queries (Base)
+Oracle Open Office Writer : square drawings
+Oracle Open Office Writer : standard bar on/off
+Oracle Open Office Writer : standard deviation in charts
+Oracle Open Office Writer : standard filters in databases
+Oracle Open Office Writer : standard printer under UNIX
+Oracle Open Office Writer : start center
+Oracle Open Office Writer : start parameters
+Oracle Open Office Writer : starting page numbers
+Oracle Open Office Writer : statistical functions
+Oracle Open Office Writer : statistics in charts
+Oracle Open Office Writer : status bar on/off
+Oracle Open Office Writer : stickers
+Oracle Open Office Writer : stock charts
+Oracle Open Office Writer : storing bibliographic information
+Oracle Open Office Writer : strikethrough
+Oracle Open Office Writer : strikethrough;characters
+Oracle Open Office Writer : strikethrough;font effects
+Oracle Open Office Writer : styles
+Oracle Open Office Writer : styles;'changed' message
+Oracle Open Office Writer : styles;categories
+Oracle Open Office Writer : styles;conditional
+Oracle Open Office Writer : styles;copying between documents
+Oracle Open Office Writer : styles;creating from selections
+Oracle Open Office Writer : styles;finding
+Oracle Open Office Writer : styles;for pages
+Oracle Open Office Writer : styles;importing from other files
+Oracle Open Office Writer : styles;keyboard shortcuts
+Oracle Open Office Writer : styles;master documents
+Oracle Open Office Writer : styles;organizing
+Oracle Open Office Writer : styles;page numbers
+Oracle Open Office Writer : styles;printing styles used in a document
+Oracle Open Office Writer : styles;replacing automatically
+Oracle Open Office Writer : styles;styles and templates
+Oracle Open Office Writer : styles;table styles
+Oracle Open Office Writer : styles;transferring
+Oracle Open Office Writer : styles;updating from selections
+Oracle Open Office Writer : Styles and Formatting window
+Oracle Open Office Writer : Styles and Formatting window;applying styles
+Oracle Open Office Writer : Styles and Formatting window;docking
+Oracle Open Office Writer : Styles and Formatting window;docking and resizing
+Oracle Open Office Writer : Styles and Formatting window;updating from selections
+Oracle Open Office Writer : Stylist, see Styles and Formatting window
+Oracle Open Office Writer : subdocuments
+Oracle Open Office Writer : subdocuments;creating/editing/removing
+Oracle Open Office Writer : subdocuments;properties
+Oracle Open Office Writer : subforms
+Oracle Open Office Writer : subforms;creating
+Oracle Open Office Writer : subforms;description
+Oracle Open Office Writer : subject fields
+Oracle Open Office Writer : submitting forms
+Oracle Open Office Writer : subscript text
+Oracle Open Office Writer : subsidiary documents
+Oracle Open Office Writer : suffixes in file formats
+Oracle Open Office Writer : sums of table cell series
+Oracle Open Office Writer : superscript text
+Oracle Open Office Writer : support on the Web
+Oracle Open Office Writer : switching off
+Oracle Open Office Writer : switching off;hyphenation for specific words
+Oracle Open Office Writer : switching off;word completion
+Oracle Open Office Writer : synchronizing
+Oracle Open Office Writer : synchronizing;labels and business cards
+Oracle Open Office Writer : synchronizing;Pocket PC and Oracle Open Office formats
+Oracle Open Office Writer : synonyms in thesaurus
+Oracle Open Office Writer : system address book registration
+Oracle Open Office Writer : tab stops
+Oracle Open Office Writer : tab stops;before headings
+Oracle Open Office Writer : tab stops;displaying (Writer)
+Oracle Open Office Writer : tab stops;inserting and editing
+Oracle Open Office Writer : tab stops;inserting in lists
+Oracle Open Office Writer : tab stops;regular expressions
+Oracle Open Office Writer : tab stops;setting in sheets
+Oracle Open Office Writer : tab stops;settings
+Oracle Open Office Writer : tab stops;spacing in presentations
+Oracle Open Office Writer : tab stops;spacing in text documents
+Oracle Open Office Writer : table cells
+Oracle Open Office Writer : table cells;adjusting the width on rulers
+Oracle Open Office Writer : table cells;calculating sums
+Oracle Open Office Writer : table cells;enlarging/reducing in text
+Oracle Open Office Writer : table controls
+Oracle Open Office Writer : table controls;form functions
+Oracle Open Office Writer : table controls;keyboard-only edit mode
+Oracle Open Office Writer : table controls;properties
+Oracle Open Office Writer : table mode selection
+Oracle Open Office Writer : table views of databases
+Oracle Open Office Writer : Table Wizard (Base)
+Oracle Open Office Writer : tables
+Oracle Open Office Writer : tables;adapting the width by keyboard
+Oracle Open Office Writer : tables;allowing page breaks
+Oracle Open Office Writer : tables;AutoFormat function
+Oracle Open Office Writer : tables;backgrounds
+Oracle Open Office Writer : tables;calculating across
+Oracle Open Office Writer : tables;calculating sums
+Oracle Open Office Writer : tables;converting to text
+Oracle Open Office Writer : tables;cross-referencing
+Oracle Open Office Writer : tables;defining borders
+Oracle Open Office Writer : tables;deleting
+Oracle Open Office Writer : tables;deleting page breaks before
+Oracle Open Office Writer : tables;editing by keyboard
+Oracle Open Office Writer : tables;editing with the keyboard
+Oracle Open Office Writer : tables;heading repetition after page breaks
+Oracle Open Office Writer : tables;inserting columns in
+Oracle Open Office Writer : tables;inserting line breaks
+Oracle Open Office Writer : tables;inserting rows
+Oracle Open Office Writer : tables;inserting text before
+Oracle Open Office Writer : tables;inserting text tables
+Oracle Open Office Writer : tables;jumping to
+Oracle Open Office Writer : tables;labeling
+Oracle Open Office Writer : tables;merging
+Oracle Open Office Writer : tables;merging cells
+Oracle Open Office Writer : tables;number recognition
+Oracle Open Office Writer : tables;performing calculations in
+Oracle Open Office Writer : tables;positioning
+Oracle Open Office Writer : tables;protecting/unprotecting cells
+Oracle Open Office Writer : tables;resizing/juxtaposing
+Oracle Open Office Writer : tables;selecting
+Oracle Open Office Writer : tables;sorting rows
+Oracle Open Office Writer : tables;splitting
+Oracle Open Office Writer : tables;start/end of document
+Oracle Open Office Writer : tables;text flow around text tables
+Oracle Open Office Writer : tables in databases
+Oracle Open Office Writer : tables in databases;access rights to (Base)
+Oracle Open Office Writer : tables in databases;adding to queries
+Oracle Open Office Writer : tables in databases;browsing and editing
+Oracle Open Office Writer : tables in databases;copying database tables (Base)
+Oracle Open Office Writer : tables in databases;creating
+Oracle Open Office Writer : tables in databases;creating in design view (manually)
+Oracle Open Office Writer : tables in databases;importing text formats (Base)
+Oracle Open Office Writer : tables in databases;joining for queries (Base)
+Oracle Open Office Writer : tables in databases;printing queries (Base)
+Oracle Open Office Writer : tables in databases;relations (Base)
+Oracle Open Office Writer : tables in databases;searching
+Oracle Open Office Writer : tables in spreadsheets
+Oracle Open Office Writer : tables in spreadsheets;copying data to other applications
+Oracle Open Office Writer : tables in spreadsheets;defining borders
+Oracle Open Office Writer : tables in spreadsheets;inserting in text
+Oracle Open Office Writer : tables in spreadsheets;value highlighting
+Oracle Open Office Writer : tables in text
+Oracle Open Office Writer : tables in text;captions
+Oracle Open Office Writer : tables in text;creating automatically
+Oracle Open Office Writer : tables in text;default settings
+Oracle Open Office Writer : tables in text;defining borders
+Oracle Open Office Writer : tables in text;displaying
+Oracle Open Office Writer : tables in text;printing
+Oracle Open Office Writer : tables of contents
+Oracle Open Office Writer : tables of contents;creating and updating
+Oracle Open Office Writer : tables of contents;defining entries in
+Oracle Open Office Writer : tables of contents;editing and deleting
+Oracle Open Office Writer : tables of contents;editing or deleting entries
+Oracle Open Office Writer : tables of contents;formatting
+Oracle Open Office Writer : tables of contents;hyperlinks as entries
+Oracle Open Office Writer : tables of contents;unprotecting
+Oracle Open Office Writer : tabs
+Oracle Open Office Writer : tabs;displaying sheet tabs
+Oracle Open Office Writer : tags
+Oracle Open Office Writer : tags;definition
+Oracle Open Office Writer : tags;in Oracle Open Office Writer
+Oracle Open Office Writer : tags;META tags
+Oracle Open Office Writer : templates
+Oracle Open Office Writer : templates;agendas
+Oracle Open Office Writer : templates;changing basic fonts
+Oracle Open Office Writer : templates;creating document templates
+Oracle Open Office Writer : templates;database reports
+Oracle Open Office Writer : templates;default templates
+Oracle Open Office Writer : templates;deleting
+Oracle Open Office Writer : templates;editing and saving
+Oracle Open Office Writer : templates;faxes
+Oracle Open Office Writer : templates;importing and exporting
+Oracle Open Office Writer : templates;letters
+Oracle Open Office Writer : templates;new documents from templates
+Oracle Open Office Writer : templates;opening documents with
+Oracle Open Office Writer : templates;organizing
+Oracle Open Office Writer : templates;organizing (guide)
+Oracle Open Office Writer : templates;updating from selections
+Oracle Open Office Writer : terminology
+Oracle Open Office Writer : terminology;general glossary
+Oracle Open Office Writer : terminology;Internet glossary
+Oracle Open Office Writer : testing XML filters
+Oracle Open Office Writer : text
+Oracle Open Office Writer : text;animating
+Oracle Open Office Writer : text;Asian layout
+Oracle Open Office Writer : text;backgrounds
+Oracle Open Office Writer : text;bold
+Oracle Open Office Writer : text;coloring
+Oracle Open Office Writer : text;conditional text
+Oracle Open Office Writer : text;converting to tables
+Oracle Open Office Writer : text;copying by drag and drop
+Oracle Open Office Writer : text;CTL languages
+Oracle Open Office Writer : text;cursor
+Oracle Open Office Writer : text;drawing pictures
+Oracle Open Office Writer : text;emphasizing
+Oracle Open Office Writer : text;font effects
+Oracle Open Office Writer : text;font sizes
+Oracle Open Office Writer : text;font styles
+Oracle Open Office Writer : text;fonts and formats
+Oracle Open Office Writer : text;Fontwork icons
+Oracle Open Office Writer : text;formatting around objects
+Oracle Open Office Writer : text;formatting bold while typing
+Oracle Open Office Writer : text;hiding
+Oracle Open Office Writer : text;hiding from specific users, with conditions
+Oracle Open Office Writer : text;hyperlinks
+Oracle Open Office Writer : text;input fields
+Oracle Open Office Writer : text;inserting pictures from Draw
+Oracle Open Office Writer : text;inserting pictures in
+Oracle Open Office Writer : text;inserting special characters
+Oracle Open Office Writer : text;italics
+Oracle Open Office Writer : text;kerning
+Oracle Open Office Writer : text;language selection
+Oracle Open Office Writer : text;line numbers
+Oracle Open Office Writer : text;line spacing
+Oracle Open Office Writer : text;multi-column
+Oracle Open Office Writer : text;navigating and selecting with keyboard
+Oracle Open Office Writer : text;non-printable
+Oracle Open Office Writer : text;number of words/characters
+Oracle Open Office Writer : text;overwriting or inserting
+Oracle Open Office Writer : text;printing in black
+Oracle Open Office Writer : text;replacing with format
+Oracle Open Office Writer : text;rotating
+Oracle Open Office Writer : text;selection modes
+Oracle Open Office Writer : text;shadowed
+Oracle Open Office Writer : text;sorting paragraphs
+Oracle Open Office Writer : text;subscript and superscript
+Oracle Open Office Writer : text;text/draw objects
+Oracle Open Office Writer : text;turning off automatic correction
+Oracle Open Office Writer : text;uppercase or lowercase
+Oracle Open Office Writer : text animation
+Oracle Open Office Writer : text attributes
+Oracle Open Office Writer : text attributes;hyperlinks
+Oracle Open Office Writer : text attributes;undoing
+Oracle Open Office Writer : text blocks
+Oracle Open Office Writer : text boxes
+Oracle Open Office Writer : text boxes;form functions
+Oracle Open Office Writer : text boxes;positioning
+Oracle Open Office Writer : text breaks in cells
+Oracle Open Office Writer : text colors for better accessibility
+Oracle Open Office Writer : text columns
+Oracle Open Office Writer : text databases (Base)
+Oracle Open Office Writer : text documents
+Oracle Open Office Writer : text documents;creating/opening
+Oracle Open Office Writer : text documents;default templates
+Oracle Open Office Writer : text documents;importing/exporting
+Oracle Open Office Writer : text documents;inserting Calc charts
+Oracle Open Office Writer : text documents;inserting spreadsheet cells
+Oracle Open Office Writer : text documents;merging
+Oracle Open Office Writer : text documents;print settings
+Oracle Open Office Writer : text documents;printing
+Oracle Open Office Writer : text documents;publishing in HTML
+Oracle Open Office Writer : text documents;saving
+Oracle Open Office Writer : text documents;saving automatically
+Oracle Open Office Writer : text documents;saving in other formats
+Oracle Open Office Writer : text documents;sending as e-mail
+Oracle Open Office Writer : text documents;shortcut keys in
+Oracle Open Office Writer : text documents;word completion settings
+Oracle Open Office Writer : text effects
+Oracle Open Office Writer : text flow
+Oracle Open Office Writer : text flow;around text tables
+Oracle Open Office Writer : text flow;at breaks
+Oracle Open Office Writer : text flow;from frame to frame
+Oracle Open Office Writer : text flow;in cells
+Oracle Open Office Writer : text formats
+Oracle Open Office Writer : text formats;copying and pasting
+Oracle Open Office Writer : text formats;databases
+Oracle Open Office Writer : text formats;finding
+Oracle Open Office Writer : text formats;pasting
+Oracle Open Office Writer : text frames
+Oracle Open Office Writer : text frames;centering on pages
+Oracle Open Office Writer : text frames;inserting/editing/linking
+Oracle Open Office Writer : text frames;labeling
+Oracle Open Office Writer : text grid for Asian layout
+Oracle Open Office Writer : text input fields
+Oracle Open Office Writer : text layout for special languages
+Oracle Open Office Writer : text objects
+Oracle Open Office Writer : text objects;alignment
+Oracle Open Office Writer : text objects;draw functions
+Oracle Open Office Writer : text objects;fonts
+Oracle Open Office Writer : text objects;in presentations and drawings
+Oracle Open Office Writer : text overflow in spreadsheet cells
+Oracle Open Office Writer : text scaling in charts
+Oracle Open Office Writer : text wrap around objects
+Oracle Open Office Writer : text, see also text documents, paragraphs and characters
+Oracle Open Office Writer : TextArt, see Fontwork
+Oracle Open Office Writer : textures
+Oracle Open Office Writer : textures;inserting from Gallery
+Oracle Open Office Writer : textures;on chart bars
+Oracle Open Office Writer : Thai
+Oracle Open Office Writer : Thai;entering text
+Oracle Open Office Writer : Thai;language settings
+Oracle Open Office Writer : thesaurus
+Oracle Open Office Writer : thesaurus;activating for a language
+Oracle Open Office Writer : thesaurus;related words
+Oracle Open Office Writer : ticker text
+Oracle Open Office Writer : time fields
+Oracle Open Office Writer : time fields;form functions
+Oracle Open Office Writer : time fields;HTML
+Oracle Open Office Writer : time fields;inserting
+Oracle Open Office Writer : times
+Oracle Open Office Writer : times;inserting when printing presentations
+Oracle Open Office Writer : times, formats
+Oracle Open Office Writer : tips
+Oracle Open Office Writer : tips;extended tips in Help
+Oracle Open Office Writer : title pages
+Oracle Open Office Writer : title pages;centering text on
+Oracle Open Office Writer : title pages;page styles
+Oracle Open Office Writer : title rows
+Oracle Open Office Writer : title rows;printing in Oracle Open Office Math
+Oracle Open Office Writer : titles
+Oracle Open Office Writer : titles;alignment (charts)
+Oracle Open Office Writer : titles;changing
+Oracle Open Office Writer : titles;editing in charts
+Oracle Open Office Writer : titles;font effects
+Oracle Open Office Writer : titles;formatting automatically
+Oracle Open Office Writer : titles;formatting charts
+Oracle Open Office Writer : titles;objects
+Oracle Open Office Writer : toolbars
+Oracle Open Office Writer : toolbars;adding buttons
+Oracle Open Office Writer : toolbars;docking/undocking
+Oracle Open Office Writer : toolbars;Form Navigation bar
+Oracle Open Office Writer : toolbars;viewing/closing
+Oracle Open Office Writer : tools bar
+Oracle Open Office Writer : tooltips
+Oracle Open Office Writer : tooltips;extended tips
+Oracle Open Office Writer : tooltips;help
+Oracle Open Office Writer : totals in text tables
+Oracle Open Office Writer : traditional Chinese
+Oracle Open Office Writer : traditional Chinese;translating to simplified chinese
+Oracle Open Office Writer : transparency
+Oracle Open Office Writer : transparency;areas
+Oracle Open Office Writer : transparency;off for faster printing
+Oracle Open Office Writer : transparency;saving
+Oracle Open Office Writer : tree view of Help
+Oracle Open Office Writer : trend lines in charts
+Oracle Open Office Writer : trigonometric functions
+Oracle Open Office Writer : turning off automatic correction
+Oracle Open Office Writer : typefaces
+Oracle Open Office Writer : typefaces;adding under UNIX
+Oracle Open Office Writer : typefaces;formats
+Oracle Open Office Writer : typography
+Oracle Open Office Writer : typography;Asian
+Oracle Open Office Writer : underlining
+Oracle Open Office Writer : underlining;AutoFormat function
+Oracle Open Office Writer : underlining;characters
+Oracle Open Office Writer : underlining;quick
+Oracle Open Office Writer : underlining;text
+Oracle Open Office Writer : undocking windows
+Oracle Open Office Writer : undoing
+Oracle Open Office Writer : undoing;direct formatting
+Oracle Open Office Writer : undoing;editing
+Oracle Open Office Writer : undoing;number of steps
+Oracle Open Office Writer : ungrouping groups
+Oracle Open Office Writer : units
+Oracle Open Office Writer : units;converting
+Oracle Open Office Writer : units;measurement units
+Oracle Open Office Writer : unlinking frames
+Oracle Open Office Writer : UNO components
+Oracle Open Office Writer : UNO components;Extension Manager
+Oracle Open Office Writer : UNO components;integrating new
+Oracle Open Office Writer : unprotecting tables of contents and indexes
+Oracle Open Office Writer : update options
+Oracle Open Office Writer : updates
+Oracle Open Office Writer : updates;checking automatically
+Oracle Open Office Writer : updates;checking manually
+Oracle Open Office Writer : updating
+Oracle Open Office Writer : updating;cross-references
+Oracle Open Office Writer : updating;fields
+Oracle Open Office Writer : updating;fields and charts, automatically (Writer)
+Oracle Open Office Writer : updating;indexes/tables of contents
+Oracle Open Office Writer : updating;linked sections, manually
+Oracle Open Office Writer : updating;links in text documents
+Oracle Open Office Writer : updating;links, on opening
+Oracle Open Office Writer : updating;styles, from selections
+Oracle Open Office Writer : updating;tables of contents
+Oracle Open Office Writer : updating;templates
+Oracle Open Office Writer : updating;text documents
+Oracle Open Office Writer : uppercase
+Oracle Open Office Writer : uppercase;changing to lowercase
+Oracle Open Office Writer : uppercase;formatting text
+Oracle Open Office Writer : URL
+Oracle Open Office Writer : URL;changing hyperlink URLs
+Oracle Open Office Writer : URL;definition
+Oracle Open Office Writer : URL;in pictures
+Oracle Open Office Writer : URL;saving absolute/relative paths
+Oracle Open Office Writer : URL;turning off URL recognition
+Oracle Open Office Writer : user data
+Oracle Open Office Writer : user data;in conditions
+Oracle Open Office Writer : user data;input
+Oracle Open Office Writer : user data;querying
+Oracle Open Office Writer : user data;removing when saving
+Oracle Open Office Writer : user feedback
+Oracle Open Office Writer : user feedback;automatically
+Oracle Open Office Writer : user variables in conditions/fields
+Oracle Open Office Writer : user-defined dictionaries
+Oracle Open Office Writer : user-defined dictionaries;creating
+Oracle Open Office Writer : user-defined dictionaries;dictionary of exceptions
+Oracle Open Office Writer : user-defined dictionaries;editing
+Oracle Open Office Writer : user-defined dictionaries;removing words from
+Oracle Open Office Writer : user-defined fields, restriction
+Oracle Open Office Writer : user-defined indexes
+Oracle Open Office Writer : user-defined styles
+Oracle Open Office Writer : user-defined styles;automatically replacing
+Oracle Open Office Writer : UTF-8/UCS2 support
+Oracle Open Office Writer : values
+Oracle Open Office Writer : values;rounded as shown (Calc)
+Oracle Open Office Writer : variable dates
+Oracle Open Office Writer : variables
+Oracle Open Office Writer : variables;document properties
+Oracle Open Office Writer : variables;for hiding text
+Oracle Open Office Writer : variables;for paths
+Oracle Open Office Writer : variables;in conditions
+Oracle Open Office Writer : variances in charts
+Oracle Open Office Writer : VBA code
+Oracle Open Office Writer : VBA code;loading/saving documents with VBA code
+Oracle Open Office Writer : version management
+Oracle Open Office Writer : version numbers of documents
+Oracle Open Office Writer : versions
+Oracle Open Office Writer : versions;comparing documents
+Oracle Open Office Writer : versions;file saving as, restriction
+Oracle Open Office Writer : versions;merging document versions
+Oracle Open Office Writer : versions;of a document
+Oracle Open Office Writer : versions;Oracle Open Office
+Oracle Open Office Writer : vertical callouts
+Oracle Open Office Writer : vertical rulers
+Oracle Open Office Writer : vertical scrollbars (Writer)
+Oracle Open Office Writer : vertical text boxes
+Oracle Open Office Writer : videos
+Oracle Open Office Writer : viewing
+Oracle Open Office Writer : viewing;databases
+Oracle Open Office Writer : viewing;fields
+Oracle Open Office Writer : viewing;file properties
+Oracle Open Office Writer : viewing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Writer : viewing;toolbars
+Oracle Open Office Writer : views
+Oracle Open Office Writer : views;creating database views (Base)
+Oracle Open Office Writer : views;defaults
+Oracle Open Office Writer : views;full screen
+Oracle Open Office Writer : views;icons
+Oracle Open Office Writer : views;scaling
+Oracle Open Office Writer : Visual Basic for Applications
+Oracle Open Office Writer : Visual Basic for Applications;loading/saving documents with VBA code
+Oracle Open Office Writer : watermarks
+Oracle Open Office Writer : web documents
+Oracle Open Office Writer : web documents;XForms
+Oracle Open Office Writer : Web support
+Oracle Open Office Writer : WebCast export
+Oracle Open Office Writer : WebDAV over HTTPS
+Oracle Open Office Writer : weekdays
+Oracle Open Office Writer : weekdays;automatically completing
+Oracle Open Office Writer : widows
+Oracle Open Office Writer : wildcards, see regular expressions
+Oracle Open Office Writer : windows
+Oracle Open Office Writer : windows;docking
+Oracle Open Office Writer : windows;docking definition
+Oracle Open Office Writer : windows;hiding/showing/docking
+Oracle Open Office Writer : windows;new
+Oracle Open Office Writer : wizards
+Oracle Open Office Writer : wizards;agendas
+Oracle Open Office Writer : wizards;database queries
+Oracle Open Office Writer : wizards;database tables (Base)
+Oracle Open Office Writer : wizards;databases (Base)
+Oracle Open Office Writer : wizards;document converter
+Oracle Open Office Writer : wizards;Euro Converter
+Oracle Open Office Writer : wizards;faxes
+Oracle Open Office Writer : wizards;form letters
+Oracle Open Office Writer : wizards;forms
+Oracle Open Office Writer : wizards;letters
+Oracle Open Office Writer : wizards;macros (Base)
+Oracle Open Office Writer : wizards;overview
+Oracle Open Office Writer : wizards;presentations
+Oracle Open Office Writer : wizards;reports
+Oracle Open Office Writer : word completion
+Oracle Open Office Writer : word completion;settings
+Oracle Open Office Writer : word completion;using/disabling
+Oracle Open Office Writer : word counts
+Oracle Open Office Writer : Word documents
+Oracle Open Office Writer : Word documents;compatibility
+Oracle Open Office Writer : Word documents;saving as
+Oracle Open Office Writer : WordArt, see Fontwork
+Oracle Open Office Writer : words
+Oracle Open Office Writer : words;automatic replacement on/off
+Oracle Open Office Writer : words;automatically replacing
+Oracle Open Office Writer : words;backgrounds
+Oracle Open Office Writer : words;counting in text
+Oracle Open Office Writer : words;disabling spellcheck
+Oracle Open Office Writer : words;wrapping in cells
+Oracle Open Office Writer : words;wrapping in CTL
+Oracle Open Office Writer : words;wrapping/not wrapping in text
+Oracle Open Office Writer : working directory change
+Oracle Open Office Writer : wrapping text
+Oracle Open Office Writer : wrapping text;editing contours
+Oracle Open Office Writer : wrapping text;in cells
+Oracle Open Office Writer : write protection on/off
+Oracle Open Office Writer : writing aids options
+Oracle Open Office Writer : writing with direct cursor
+Oracle Open Office Writer : WYSIWYG in fonts lists
+Oracle Open Office Writer : X axes
+Oracle Open Office Writer : X axes;grid formatting
+Oracle Open Office Writer : X axes;positioning
+Oracle Open Office Writer : X axes;scaling
+Oracle Open Office Writer : X axes;showing
+Oracle Open Office Writer : XForms
+Oracle Open Office Writer : XForms;adding/editing/deleting/organizing namespaces
+Oracle Open Office Writer : XForms;conditions
+Oracle Open Office Writer : XForms;opening/editing
+Oracle Open Office Writer : XML converters
+Oracle Open Office Writer : XML file formats
+Oracle Open Office Writer : XML filters
+Oracle Open Office Writer : XML filters;creating/testing
+Oracle Open Office Writer : XML filters;saving as package/installing/deleting
+Oracle Open Office Writer : XML filters;settings
+Oracle Open Office Writer : XML Forms, see XForms
+Oracle Open Office Writer : XSLT filters, see also XML filters
+Oracle Open Office Writer : XY charts
+Oracle Open Office Writer : Y axes
+Oracle Open Office Writer : Y axes;formatting
+Oracle Open Office Writer : Y axes;grid formatting
+Oracle Open Office Writer : Y axes;positioning
+Oracle Open Office Writer : Y axes;scaling
+Oracle Open Office Writer : Y axes;showing
+Oracle Open Office Writer : years
+Oracle Open Office Writer : years;2-digit options
+Oracle Open Office Writer : Z axes
+Oracle Open Office Writer : Z axes;grid formatting
+Oracle Open Office Writer : Z axes;showing
+Oracle Open Office Writer : zero values
+Oracle Open Office Writer : zero values;displaying (Calc)
+Oracle Open Office Writer : zooming
+Oracle Open Office Writer : zooming;page views
+Oracle Open Office Writer : zooming;pictures
+Oracle Open Office Writer : zooming;status bar
+Oracle Open Office Chart : 3D charts
+Oracle Open Office Chart : 3D text creation
+Oracle Open Office Chart : abbreviation replacement
+Oracle Open Office Chart : absolute hyperlinks
+Oracle Open Office Chart : absolute saving of URLs
+Oracle Open Office Chart : accents
+Oracle Open Office Chart : Access databases (base)
+Oracle Open Office Chart : access rights for database tables (Base)
+Oracle Open Office Chart : accessibility
+Oracle Open Office Chart : accessibility;general shortcuts
+Oracle Open Office Chart : accessibility;options
+Oracle Open Office Chart : accessibility;Oracle Open Office assistive technology
+Oracle Open Office Chart : accessibility;Oracle Open Office features
+Oracle Open Office Chart : activating
+Oracle Open Office Chart : activating;context menus
+Oracle Open Office Chart : activating;Error Report Tool
+Oracle Open Office Chart : activating;extended help tips
+Oracle Open Office Chart : activating;plug-ins
+Oracle Open Office Chart : ActiveX control
+Oracle Open Office Chart : Adabas D databases (base)
+Oracle Open Office Chart : add-ons, see UNO components
+Oracle Open Office Chart : additional selection mode
+Oracle Open Office Chart : address books
+Oracle Open Office Chart : address books;LDAP server (Base)
+Oracle Open Office Chart : address books;registering
+Oracle Open Office Chart : address labels from databases
+Oracle Open Office Chart : ADO databases (Base)
+Oracle Open Office Chart : Agenda Wizard
+Oracle Open Office Chart : aging filter
+Oracle Open Office Chart : aligning
+Oracle Open Office Chart : aligning;2D charts
+Oracle Open Office Chart : aligning;cells
+Oracle Open Office Chart : aligning;objects
+Oracle Open Office Chart : aligning;paragraphs
+Oracle Open Office Chart : aligning;tables in text
+Oracle Open Office Chart : aligning;text objects
+Oracle Open Office Chart : aligning;titles in charts
+Oracle Open Office Chart : alternative fonts
+Oracle Open Office Chart : ampersand symbol, see also operators
+Oracle Open Office Chart : anchors
+Oracle Open Office Chart : anchors;changing
+Oracle Open Office Chart : anchors;displaying (Calc)
+Oracle Open Office Chart : anchors;types/positions for draw objects
+Oracle Open Office Chart : animations
+Oracle Open Office Chart : animations;accessibility options
+Oracle Open Office Chart : appearance options
+Oracle Open Office Chart : Arabic
+Oracle Open Office Chart : Arabic;entering text
+Oracle Open Office Chart : Arabic;language settings
+Oracle Open Office Chart : area charts
+Oracle Open Office Chart : areas
+Oracle Open Office Chart : areas;bitmap patterns
+Oracle Open Office Chart : areas;hatched/dotted
+Oracle Open Office Chart : areas;shadows
+Oracle Open Office Chart : areas;slanting
+Oracle Open Office Chart : areas;styles
+Oracle Open Office Chart : areas;transparency
+Oracle Open Office Chart : arguments in command line
+Oracle Open Office Chart : arranging
+Oracle Open Office Chart : arranging;objects
+Oracle Open Office Chart : arrows
+Oracle Open Office Chart : arrows;defining arrow heads
+Oracle Open Office Chart : arrows;defining arrow lines
+Oracle Open Office Chart : arrows;drawing in text
+Oracle Open Office Chart : ASCII
+Oracle Open Office Chart : ASCII;definition
+Oracle Open Office Chart : Asian languages
+Oracle Open Office Chart : Asian languages;enabling
+Oracle Open Office Chart : Asian Phonetic Guide
+Oracle Open Office Chart : Asian typography
+Oracle Open Office Chart : assigning scripts
+Oracle Open Office Chart : assistive technology in Oracle Open Office
+Oracle Open Office Chart : attaching toolbars
+Oracle Open Office Chart : attachments in e-mails
+Oracle Open Office Chart : audio
+Oracle Open Office Chart : auto reloading HTML documents
+Oracle Open Office Chart : AutoAbstract function for sending text to presentations
+Oracle Open Office Chart : AutoCaption function in Oracle Open Office Writer
+Oracle Open Office Chart : AutoComplete function in text and list boxes
+Oracle Open Office Chart : AutoCorrect function
+Oracle Open Office Chart : AutoCorrect function;context menu
+Oracle Open Office Chart : AutoCorrect function;options
+Oracle Open Office Chart : AutoCorrect function;pictures and frames
+Oracle Open Office Chart : AutoCorrect function;quotes
+Oracle Open Office Chart : AutoCorrect function;replacement table
+Oracle Open Office Chart : AutoCorrect function;switching on and off in Calc
+Oracle Open Office Chart : AutoCorrect function;URL recognition
+Oracle Open Office Chart : AutoFormat function
+Oracle Open Office Chart : AutoFormat function;switching on and off
+Oracle Open Office Chart : automatic captions (Writer)
+Oracle Open Office Chart : automatic control focus
+Oracle Open Office Chart : automatic hyperlink formatting
+Oracle Open Office Chart : automatic line breaks
+Oracle Open Office Chart : automatic lines/borders in text
+Oracle Open Office Chart : automatic saving
+Oracle Open Office Chart : AutoPilots, see wizards
+Oracle Open Office Chart : AutoValue (Base)
+Oracle Open Office Chart : averages in charts
+Oracle Open Office Chart : axes
+Oracle Open Office Chart : axes;better scaling
+Oracle Open Office Chart : axes;formatting
+Oracle Open Office Chart : axes;formatting grids
+Oracle Open Office Chart : axes;inserting grids
+Oracle Open Office Chart : axes;interval marks
+Oracle Open Office Chart : axes;showing axes in charts
+Oracle Open Office Chart : axes in charts
+Oracle Open Office Chart : backgrounds
+Oracle Open Office Chart : backgrounds;defining colors/pictures
+Oracle Open Office Chart : backgrounds;frames/sections/indexes
+Oracle Open Office Chart : backgrounds;inserting from Gallery
+Oracle Open Office Chart : backgrounds;printing
+Oracle Open Office Chart : backing window
+Oracle Open Office Chart : backups
+Oracle Open Office Chart : backups;automatic
+Oracle Open Office Chart : backups;documents
+Oracle Open Office Chart : bar charts
+Oracle Open Office Chart : Basic
+Oracle Open Office Chart : Basic;fonts for source display
+Oracle Open Office Chart : Basic;programming
+Oracle Open Office Chart : Basic;recording macros
+Oracle Open Office Chart : basic fonts
+Oracle Open Office Chart : Bézier curves
+Oracle Open Office Chart : Bézier curves;control points in presentations
+Oracle Open Office Chart : bi-directional writing
+Oracle Open Office Chart : binding space
+Oracle Open Office Chart : bitmaps
+Oracle Open Office Chart : bitmaps;inserting and editing
+Oracle Open Office Chart : bitmaps;off for faster printing
+Oracle Open Office Chart : bitmaps;patterns
+Oracle Open Office Chart : black and white printing
+Oracle Open Office Chart : black printing in Calc
+Oracle Open Office Chart : block selection mode
+Oracle Open Office Chart : bold
+Oracle Open Office Chart : bold;AutoFormat function
+Oracle Open Office Chart : bold;text
+Oracle Open Office Chart : bookmarks
+Oracle Open Office Chart : bookmarks;Help
+Oracle Open Office Chart : borders
+Oracle Open Office Chart : borders;arranging
+Oracle Open Office Chart : borders;cells on screen (Calc)
+Oracle Open Office Chart : borders;for paragraphs
+Oracle Open Office Chart : borders;for tables
+Oracle Open Office Chart : borders;shadows
+Oracle Open Office Chart : borders;table boundaries (Writer)
+Oracle Open Office Chart : borders, see also frames
+Oracle Open Office Chart : bound fields
+Oracle Open Office Chart : bound fields;controls
+Oracle Open Office Chart : boundaries of tables (Writer)
+Oracle Open Office Chart : break display (Writer)
+Oracle Open Office Chart : brochures
+Oracle Open Office Chart : brochures;printing several
+Oracle Open Office Chart : bubble charts
+Oracle Open Office Chart : build numbers of Oracle Open Office
+Oracle Open Office Chart : bullet lists
+Oracle Open Office Chart : bullet lists;formatting options
+Oracle Open Office Chart : bullets
+Oracle Open Office Chart : bullets;paragraphs
+Oracle Open Office Chart : bullets;replacing
+Oracle Open Office Chart : bullets;turning off
+Oracle Open Office Chart : business cards
+Oracle Open Office Chart : business cards;creating and synchronizing
+Oracle Open Office Chart : business cards;using templates
+Oracle Open Office Chart : button bars, see toolbars
+Oracle Open Office Chart : buttons
+Oracle Open Office Chart : buttons;adding push buttons
+Oracle Open Office Chart : buttons;big/small
+Oracle Open Office Chart : buttons;editing hyperlink buttons
+Oracle Open Office Chart : buttons;form functions
+Oracle Open Office Chart : buttons;toolbars
+Oracle Open Office Chart : cache for graphics
+Oracle Open Office Chart : calculating
+Oracle Open Office Chart : calculating;iterative references (Calc)
+Oracle Open Office Chart : calculating;regression curves
+Oracle Open Office Chart : callouts
+Oracle Open Office Chart : callouts;drawings
+Oracle Open Office Chart : capital letters
+Oracle Open Office Chart : capital letters;AutoCorrect function
+Oracle Open Office Chart : capital letters;font effects
+Oracle Open Office Chart : captions
+Oracle Open Office Chart : captions;automatic captions (Writer)
+Oracle Open Office Chart : captions;tables/pictures/frames/OLE objects (Writer)
+Oracle Open Office Chart : captions, see also labels/callouts
+Oracle Open Office Chart : cascading update (Base)
+Oracle Open Office Chart : case sensitivity
+Oracle Open Office Chart : case sensitivity;comparing cell contents (Calc)
+Oracle Open Office Chart : case sensitivity;searching
+Oracle Open Office Chart : cells
+Oracle Open Office Chart : cells;aligning
+Oracle Open Office Chart : cells;coloring (Calc)
+Oracle Open Office Chart : cells;cursor positions after input (Calc)
+Oracle Open Office Chart : cells;formatting without effect (Calc)
+Oracle Open Office Chart : cells;line breaks
+Oracle Open Office Chart : cells;linked to controls
+Oracle Open Office Chart : cells;number of
+Oracle Open Office Chart : cells;pasting
+Oracle Open Office Chart : cells;resetting formats
+Oracle Open Office Chart : cells;showing grid lines (Calc)
+Oracle Open Office Chart : centered text
+Oracle Open Office Chart : centimeters
+Oracle Open Office Chart : certificates
+Oracle Open Office Chart : changes
+Oracle Open Office Chart : changes;accepting or rejecting
+Oracle Open Office Chart : changes;comparing to original
+Oracle Open Office Chart : changes;protecting
+Oracle Open Office Chart : changes;recording
+Oracle Open Office Chart : changes;review function
+Oracle Open Office Chart : changes;showing
+Oracle Open Office Chart : changing
+Oracle Open Office Chart : changing;document titles
+Oracle Open Office Chart : changing;file associations in Setup program
+Oracle Open Office Chart : changing;icon sizes
+Oracle Open Office Chart : changing;links
+Oracle Open Office Chart : changing;work directory
+Oracle Open Office Chart : changing, see also editing and replacing
+Oracle Open Office Chart : character styles
+Oracle Open Office Chart : character styles;language selection
+Oracle Open Office Chart : characters
+Oracle Open Office Chart : characters;alternative fonts
+Oracle Open Office Chart : characters;Asian layout
+Oracle Open Office Chart : characters;bold
+Oracle Open Office Chart : characters;coloring
+Oracle Open Office Chart : characters;displaying only on screen (Writer)
+Oracle Open Office Chart : characters;enabling CTL and Asian characters
+Oracle Open Office Chart : characters;font effects
+Oracle Open Office Chart : characters;fonts and formats
+Oracle Open Office Chart : characters;hyperlinks
+Oracle Open Office Chart : characters;italics
+Oracle Open Office Chart : characters;language selection
+Oracle Open Office Chart : characters;shadowed
+Oracle Open Office Chart : characters;spacing
+Oracle Open Office Chart : characters;special
+Oracle Open Office Chart : characters;underlining
+Oracle Open Office Chart : charcoal sketches filter
+Oracle Open Office Chart : chart legends
+Oracle Open Office Chart : chart legends;hiding
+Oracle Open Office Chart : chart legends;showing icons with labels
+Oracle Open Office Chart : chart types
+Oracle Open Office Chart : chart types;area
+Oracle Open Office Chart : chart types;bubble
+Oracle Open Office Chart : chart types;column and bar
+Oracle Open Office Chart : chart types;column and line
+Oracle Open Office Chart : chart types;line
+Oracle Open Office Chart : chart types;net
+Oracle Open Office Chart : chart types;pie/donut
+Oracle Open Office Chart : chart types;stock
+Oracle Open Office Chart : chart types;XY (scatter)
+Oracle Open Office Chart : charts
+Oracle Open Office Chart : charts;3D views
+Oracle Open Office Chart : charts;aligning
+Oracle Open Office Chart : charts;arranging within stacks
+Oracle Open Office Chart : charts;bars with textures
+Oracle Open Office Chart : charts;choosing chart types
+Oracle Open Office Chart : charts;colors
+Oracle Open Office Chart : charts;copying with link to source cell range
+Oracle Open Office Chart : charts;data labels
+Oracle Open Office Chart : charts;displaying (Calc)
+Oracle Open Office Chart : charts;editing axes
+Oracle Open Office Chart : charts;editing data
+Oracle Open Office Chart : charts;editing legends
+Oracle Open Office Chart : charts;editing titles
+Oracle Open Office Chart : charts;formatting areas
+Oracle Open Office Chart : charts;formatting floors
+Oracle Open Office Chart : charts;formatting walls
+Oracle Open Office Chart : charts;inserting
+Oracle Open Office Chart : charts;overview
+Oracle Open Office Chart : charts;positioning axes
+Oracle Open Office Chart : charts;properties
+Oracle Open Office Chart : charts;reorganizing
+Oracle Open Office Chart : charts;scaling axes
+Oracle Open Office Chart : charts;scaling text
+Oracle Open Office Chart : charts;shortcuts
+Oracle Open Office Chart : charts;showing axes
+Oracle Open Office Chart : charts;updating automatically (Writer)
+Oracle Open Office Chart : check box creation
+Oracle Open Office Chart : Chinese writing systems
+Oracle Open Office Chart : choosing printers
+Oracle Open Office Chart : circle drawings
+Oracle Open Office Chart : Client Side ImageMap
+Oracle Open Office Chart : clipboard
+Oracle Open Office Chart : clipboard;cutting
+Oracle Open Office Chart : clipboard;pasting
+Oracle Open Office Chart : clipboard;pasting formatted/unformatted text
+Oracle Open Office Chart : clipboard;selection clipboard
+Oracle Open Office Chart : clipboard;Unix
+Oracle Open Office Chart : closing
+Oracle Open Office Chart : closing;documents
+Oracle Open Office Chart : closing;toolbars
+Oracle Open Office Chart : collaboration
+Oracle Open Office Chart : color bar
+Oracle Open Office Chart : colors
+Oracle Open Office Chart : colors;adding
+Oracle Open Office Chart : colors;appearance
+Oracle Open Office Chart : colors;backgrounds
+Oracle Open Office Chart : colors;charts
+Oracle Open Office Chart : colors;fill format
+Oracle Open Office Chart : colors;fonts
+Oracle Open Office Chart : colors;grid lines and cells (Calc)
+Oracle Open Office Chart : colors;models
+Oracle Open Office Chart : colors;not printing
+Oracle Open Office Chart : colors;printing in grayscale
+Oracle Open Office Chart : colors;restriction (Calc)
+Oracle Open Office Chart : colors;selection
+Oracle Open Office Chart : column and line charts
+Oracle Open Office Chart : column charts
+Oracle Open Office Chart : column headers
+Oracle Open Office Chart : column headers;displaying (Calc)
+Oracle Open Office Chart : column headers;highlighting (Calc)
+Oracle Open Office Chart : columns
+Oracle Open Office Chart : columns;setting with the mouse
+Oracle Open Office Chart : combination charts
+Oracle Open Office Chart : combo box creation
+Oracle Open Office Chart : command button creation
+Oracle Open Office Chart : command buttons, see push buttons
+Oracle Open Office Chart : command line parameters
+Oracle Open Office Chart : commands
+Oracle Open Office Chart : commands;repeating
+Oracle Open Office Chart : commands;SQL
+Oracle Open Office Chart : comments
+Oracle Open Office Chart : comments;displaying (Calc)
+Oracle Open Office Chart : comments;inserting/editing/deleting/printing
+Oracle Open Office Chart : comments;on changes
+Oracle Open Office Chart : comments;printing in text
+Oracle Open Office Chart : common terms
+Oracle Open Office Chart : common terms;Chinese dictionary
+Oracle Open Office Chart : common terms;glossaries
+Oracle Open Office Chart : common terms;Internet glossary
+Oracle Open Office Chart : comparisons
+Oracle Open Office Chart : comparisons;document versions
+Oracle Open Office Chart : comparisons;operators in default filter dialog
+Oracle Open Office Chart : compatibility settings for MS Word import
+Oracle Open Office Chart : complete screen view
+Oracle Open Office Chart : complex text layout
+Oracle Open Office Chart : complex text layout;definition
+Oracle Open Office Chart : complex text layout;enabling
+Oracle Open Office Chart : complex text layout, see CTL
+Oracle Open Office Chart : compose key to insert special characters
+Oracle Open Office Chart : concatenation, see ampersand symbol
+Oracle Open Office Chart : conditional separators
+Oracle Open Office Chart : conditions
+Oracle Open Office Chart : conditions;in number formats
+Oracle Open Office Chart : conditions;items in Data Navigator
+Oracle Open Office Chart : Configuration Manager
+Oracle Open Office Chart : configuring
+Oracle Open Office Chart : configuring;fax icon
+Oracle Open Office Chart : configuring;Oracle Open Office
+Oracle Open Office Chart : configuring;toolbars
+Oracle Open Office Chart : connections to data sources (Base)
+Oracle Open Office Chart : contents protection
+Oracle Open Office Chart : context menus
+Oracle Open Office Chart : control point display in presentations
+Oracle Open Office Chart : controls
+Oracle Open Office Chart : controls;activating in forms
+Oracle Open Office Chart : controls;adding to documents
+Oracle Open Office Chart : controls;arranging in forms
+Oracle Open Office Chart : controls;arranging within stacks
+Oracle Open Office Chart : controls;assigning data sources
+Oracle Open Office Chart : controls;assigning macros (Basic)
+Oracle Open Office Chart : controls;bound fields/list contents/linked cells
+Oracle Open Office Chart : controls;events
+Oracle Open Office Chart : controls;focus
+Oracle Open Office Chart : controls;formatted fields
+Oracle Open Office Chart : controls;grouping
+Oracle Open Office Chart : controls;hidden
+Oracle Open Office Chart : controls;inserting
+Oracle Open Office Chart : controls;multi-line titles
+Oracle Open Office Chart : controls;positions and sizes
+Oracle Open Office Chart : controls;printing
+Oracle Open Office Chart : controls;properties of form controls
+Oracle Open Office Chart : controls;properties of table controls
+Oracle Open Office Chart : controls;reference by SQL
+Oracle Open Office Chart : controls;rich text control
+Oracle Open Office Chart : controls;select mode
+Oracle Open Office Chart : controls;showing (Writer)
+Oracle Open Office Chart : converters
+Oracle Open Office Chart : converters;Euro converter
+Oracle Open Office Chart : converters;PostScript, UNIX
+Oracle Open Office Chart : converters;XML
+Oracle Open Office Chart : converting
+Oracle Open Office Chart : converting;Hangul/Hanja
+Oracle Open Office Chart : converting;metrics
+Oracle Open Office Chart : converting;Microsoft documents
+Oracle Open Office Chart : converting;Oracle Open Office documents
+Oracle Open Office Chart : converting;Pocket PC formats
+Oracle Open Office Chart : copies
+Oracle Open Office Chart : copies;printing
+Oracle Open Office Chart : copying
+Oracle Open Office Chart : copying;by drag and drop
+Oracle Open Office Chart : copying;data from text documents
+Oracle Open Office Chart : copying;datasource records in spreadsheets
+Oracle Open Office Chart : copying;draw objects
+Oracle Open Office Chart : copying;draw objects between documents
+Oracle Open Office Chart : copying;formatting
+Oracle Open Office Chart : copying;from data source view
+Oracle Open Office Chart : copying;from Gallery
+Oracle Open Office Chart : copying;in Unix
+Oracle Open Office Chart : copying;pictures, between documents
+Oracle Open Office Chart : copying;sheet areas, to text documents
+Oracle Open Office Chart : copying;to Gallery
+Oracle Open Office Chart : copyright for Oracle Open Office
+Oracle Open Office Chart : corner roundings
+Oracle Open Office Chart : crash reports
+Oracle Open Office Chart : criteria of query design (Base)
+Oracle Open Office Chart : cropping pictures
+Oracle Open Office Chart : CTL
+Oracle Open Office Chart : CTL;(not) wrapping words
+Oracle Open Office Chart : CTL;complex text layout languages
+Oracle Open Office Chart : CTL;definition
+Oracle Open Office Chart : CTL;options
+Oracle Open Office Chart : currencies
+Oracle Open Office Chart : currencies;converters
+Oracle Open Office Chart : currencies;format codes
+Oracle Open Office Chart : currency field creation
+Oracle Open Office Chart : currency formats
+Oracle Open Office Chart : cursor
+Oracle Open Office Chart : cursor;allowing in protected areas (Writer)
+Oracle Open Office Chart : cursor;in read-only text
+Oracle Open Office Chart : cursor;quickly moving to an object
+Oracle Open Office Chart : curves
+Oracle Open Office Chart : curves;editing points
+Oracle Open Office Chart : curves;properties in line charts/XY charts
+Oracle Open Office Chart : custom dictionaries
+Oracle Open Office Chart : custom dictionaries;editing
+Oracle Open Office Chart : custom hyphens (Writer)
+Oracle Open Office Chart : custom quotes
+Oracle Open Office Chart : custom templates
+Oracle Open Office Chart : customizing
+Oracle Open Office Chart : customizing;events
+Oracle Open Office Chart : customizing;keyboard
+Oracle Open Office Chart : customizing;menus
+Oracle Open Office Chart : customizing;Oracle Open Office
+Oracle Open Office Chart : customizing;round corners
+Oracle Open Office Chart : customizing;toolbars
+Oracle Open Office Chart : cutting
+Oracle Open Office Chart : dashes
+Oracle Open Office Chart : data
+Oracle Open Office Chart : data;filtering in forms
+Oracle Open Office Chart : data;forms and subforms
+Oracle Open Office Chart : data;read-only
+Oracle Open Office Chart : data;sorting in forms
+Oracle Open Office Chart : data;user data
+Oracle Open Office Chart : data binding change in XForms
+Oracle Open Office Chart : data labels in charts
+Oracle Open Office Chart : Data Navigator
+Oracle Open Office Chart : Data Navigator;adding/editing items
+Oracle Open Office Chart : Data Navigator;display options
+Oracle Open Office Chart : data ranges in charts
+Oracle Open Office Chart : data series
+Oracle Open Office Chart : data source browser
+Oracle Open Office Chart : data source explorer
+Oracle Open Office Chart : data source view
+Oracle Open Office Chart : data source view;drag and drop
+Oracle Open Office Chart : data source view;overview
+Oracle Open Office Chart : data source view;showing
+Oracle Open Office Chart : data sources
+Oracle Open Office Chart : data sources;as tables
+Oracle Open Office Chart : data sources;connection settings (Base)
+Oracle Open Office Chart : data sources;copying records to spreadsheets
+Oracle Open Office Chart : data sources;displaying current
+Oracle Open Office Chart : data sources;LDAP server (Base)
+Oracle Open Office Chart : data sources;Oracle Open Office Base
+Oracle Open Office Chart : data sources;registering address books
+Oracle Open Office Chart : data sources;reports
+Oracle Open Office Chart : data sources;setting for stock charts
+Oracle Open Office Chart : data sources;viewing
+Oracle Open Office Chart : data structure of XForms
+Oracle Open Office Chart : data values in charts
+Oracle Open Office Chart : data, see also values
+Oracle Open Office Chart : database contents
+Oracle Open Office Chart : database contents;inserting as tables
+Oracle Open Office Chart : database contents;inserting as text
+Oracle Open Office Chart : database reports
+Oracle Open Office Chart : Database Wizard (Base)
+Oracle Open Office Chart : databases
+Oracle Open Office Chart : databases;administration through SQL (Base)
+Oracle Open Office Chart : databases;ADO (Base)
+Oracle Open Office Chart : databases;connecting (Base)
+Oracle Open Office Chart : databases;creating
+Oracle Open Office Chart : databases;creating labels
+Oracle Open Office Chart : databases;creating queries
+Oracle Open Office Chart : databases;creating reports
+Oracle Open Office Chart : databases;creating tables
+Oracle Open Office Chart : databases;deleting (Base)
+Oracle Open Office Chart : databases;drag and drop (Base)
+Oracle Open Office Chart : databases;editing tables
+Oracle Open Office Chart : databases;form filters
+Oracle Open Office Chart : databases;formats (Base)
+Oracle Open Office Chart : databases;importing/exporting
+Oracle Open Office Chart : databases;JDBC (Base)
+Oracle Open Office Chart : databases;main page (Base)
+Oracle Open Office Chart : databases;ODBC (Base)
+Oracle Open Office Chart : databases;overview
+Oracle Open Office Chart : databases;registering (Base)
+Oracle Open Office Chart : databases;searching records
+Oracle Open Office Chart : databases;shortcut keys
+Oracle Open Office Chart : databases;sorting
+Oracle Open Office Chart : databases;standard filters
+Oracle Open Office Chart : databases;text formats
+Oracle Open Office Chart : databases;viewing
+Oracle Open Office Chart : date fields
+Oracle Open Office Chart : date fields;creating
+Oracle Open Office Chart : date fields;properties
+Oracle Open Office Chart : date formats
+Oracle Open Office Chart : dates
+Oracle Open Office Chart : dates;default (Calc)
+Oracle Open Office Chart : dates;printing in presentations
+Oracle Open Office Chart : dates;start 1900/01/01 (Calc)
+Oracle Open Office Chart : dates;start 1904/01/01 (Calc)
+Oracle Open Office Chart : dBASE
+Oracle Open Office Chart : dBASE;database settings (Base)
+Oracle Open Office Chart : DDE
+Oracle Open Office Chart : DDE;definition
+Oracle Open Office Chart : deactivating
+Oracle Open Office Chart : deactivating;plug-ins
+Oracle Open Office Chart : decimal places displayed (Calc)
+Oracle Open Office Chart : decimal separator key
+Oracle Open Office Chart : decimal tab stops
+Oracle Open Office Chart : default directories
+Oracle Open Office Chart : default filters
+Oracle Open Office Chart : default filters;comparison operators
+Oracle Open Office Chart : default filters;databases
+Oracle Open Office Chart : default printer
+Oracle Open Office Chart : default printer;setting up
+Oracle Open Office Chart : default printer;UNIX
+Oracle Open Office Chart : default templates
+Oracle Open Office Chart : default templates;changing
+Oracle Open Office Chart : default templates;organizing
+Oracle Open Office Chart : defaults
+Oracle Open Office Chart : defaults;documents
+Oracle Open Office Chart : defaults;file formats in file dialogs
+Oracle Open Office Chart : defaults;file formats in Oracle Open Office
+Oracle Open Office Chart : defaults;fonts
+Oracle Open Office Chart : defaults;grids (Writer/Calc)
+Oracle Open Office Chart : defaults;languages
+Oracle Open Office Chart : defaults;number formats
+Oracle Open Office Chart : defaults;of saving
+Oracle Open Office Chart : defaults;program configuration
+Oracle Open Office Chart : defaults;tab stops in text
+Oracle Open Office Chart : defaults;views
+Oracle Open Office Chart : defining
+Oracle Open Office Chart : defining;arrowheads and other line ends
+Oracle Open Office Chart : defining;colors
+Oracle Open Office Chart : defining;line styles
+Oracle Open Office Chart : defining;paragraph borders
+Oracle Open Office Chart : defining;queries (Base)
+Oracle Open Office Chart : defining;table borders
+Oracle Open Office Chart : deleting
+Oracle Open Office Chart : deleting;all direct formatting
+Oracle Open Office Chart : deleting;comments
+Oracle Open Office Chart : deleting;databases (Base)
+Oracle Open Office Chart : deleting;hyperlinks
+Oracle Open Office Chart : deleting;lines in text
+Oracle Open Office Chart : deleting;models/instances
+Oracle Open Office Chart : deleting;namespaces in XForms
+Oracle Open Office Chart : deleting;tab stops
+Oracle Open Office Chart : deleting;templates
+Oracle Open Office Chart : deleting;XML filters
+Oracle Open Office Chart : depth stagger
+Oracle Open Office Chart : descriptions for objects
+Oracle Open Office Chart : design mode after saving
+Oracle Open Office Chart : design view
+Oracle Open Office Chart : design view;creating forms
+Oracle Open Office Chart : design view;queries/views (Base)
+Oracle Open Office Chart : designing
+Oracle Open Office Chart : designing;database tables
+Oracle Open Office Chart : designing;fonts
+Oracle Open Office Chart : designing;queries (Base)
+Oracle Open Office Chart : detaching toolbars
+Oracle Open Office Chart : dictionaries
+Oracle Open Office Chart : dictionaries;common terms in simplified and traditional chinese
+Oracle Open Office Chart : dictionaries;creating
+Oracle Open Office Chart : dictionaries;editing user-defined
+Oracle Open Office Chart : dictionaries;spellcheck
+Oracle Open Office Chart : dictionaries, see also languages
+Oracle Open Office Chart : digital signatures
+Oracle Open Office Chart : digital signatures;getting/managing/applying
+Oracle Open Office Chart : digital signatures;overview
+Oracle Open Office Chart : digital signatures;WebDAV over HTTPS
+Oracle Open Office Chart : direct formatting
+Oracle Open Office Chart : direct formatting;undoing all
+Oracle Open Office Chart : directories
+Oracle Open Office Chart : directories;creating new
+Oracle Open Office Chart : directories;directory structure
+Oracle Open Office Chart : disabled persons
+Oracle Open Office Chart : displaying
+Oracle Open Office Chart : displaying;comments (Calc)
+Oracle Open Office Chart : displaying;comments in text documents
+Oracle Open Office Chart : displaying;non-printing characters (Writer)
+Oracle Open Office Chart : displaying;pictures and objects (Writer)
+Oracle Open Office Chart : displaying;tables (Writer)
+Oracle Open Office Chart : displaying;zero values (Calc)
+Oracle Open Office Chart : distances
+Oracle Open Office Chart : distinct values in SQL queries
+Oracle Open Office Chart : distorting in drawings
+Oracle Open Office Chart : distributing XML filters
+Oracle Open Office Chart : docking
+Oracle Open Office Chart : docking;definition
+Oracle Open Office Chart : docking;toolbars
+Oracle Open Office Chart : docking;windows
+Oracle Open Office Chart : Document Converter Wizard
+Oracle Open Office Chart : Document Map, see Navigator
+Oracle Open Office Chart : document types in Oracle Open Office
+Oracle Open Office Chart : documents
+Oracle Open Office Chart : documents;changing titles
+Oracle Open Office Chart : documents;closing
+Oracle Open Office Chart : documents;comparing
+Oracle Open Office Chart : documents;contents as lists
+Oracle Open Office Chart : documents;editing time
+Oracle Open Office Chart : documents;exporting
+Oracle Open Office Chart : documents;importing
+Oracle Open Office Chart : documents;languages
+Oracle Open Office Chart : documents;measurement units in
+Oracle Open Office Chart : documents;merging
+Oracle Open Office Chart : documents;number of pages/tables/sheets
+Oracle Open Office Chart : documents;opening
+Oracle Open Office Chart : documents;opening in design mode
+Oracle Open Office Chart : documents;opening with templates
+Oracle Open Office Chart : documents;organizing
+Oracle Open Office Chart : documents;printing
+Oracle Open Office Chart : documents;read-only
+Oracle Open Office Chart : documents;reloading
+Oracle Open Office Chart : documents;saving
+Oracle Open Office Chart : documents;saving automatically
+Oracle Open Office Chart : documents;saving in other formats
+Oracle Open Office Chart : documents;sending as e-mail
+Oracle Open Office Chart : documents;styles changed
+Oracle Open Office Chart : documents;version management
+Oracle Open Office Chart : documents;version numbers
+Oracle Open Office Chart : donut charts
+Oracle Open Office Chart : dotted areas
+Oracle Open Office Chart : double-line spacing in paragraphs
+Oracle Open Office Chart : double-line writing in Asian layout
+Oracle Open Office Chart : drag and drop
+Oracle Open Office Chart : drag and drop;copying and pasting text
+Oracle Open Office Chart : drag and drop;data source view
+Oracle Open Office Chart : drag and drop;from Gallery to draw objects
+Oracle Open Office Chart : drag and drop;overview
+Oracle Open Office Chart : drag and drop;pictures
+Oracle Open Office Chart : drag and drop;to Gallery
+Oracle Open Office Chart : draw objects
+Oracle Open Office Chart : draw objects;adding/editing/copying
+Oracle Open Office Chart : draw objects;anchoring
+Oracle Open Office Chart : draw objects;arranging within stacks
+Oracle Open Office Chart : draw objects;copying between documents
+Oracle Open Office Chart : draw objects;displaying (Calc)
+Oracle Open Office Chart : draw objects;dropping Gallery pictures
+Oracle Open Office Chart : draw objects;flipping
+Oracle Open Office Chart : draw objects;legends
+Oracle Open Office Chart : draw objects;positioning and resizing
+Oracle Open Office Chart : draw objects;protecting
+Oracle Open Office Chart : draw objects;slanting
+Oracle Open Office Chart : draw objects;text in
+Oracle Open Office Chart : Drawing bar
+Oracle Open Office Chart : drawing lines in text
+Oracle Open Office Chart : drawings
+Oracle Open Office Chart : drawings;creating/opening
+Oracle Open Office Chart : drawings;languages
+Oracle Open Office Chart : drawings;printing
+Oracle Open Office Chart : drawings;printing defaults
+Oracle Open Office Chart : drawings;printing in text documents
+Oracle Open Office Chart : drawings;saving
+Oracle Open Office Chart : drawings;saving automatically
+Oracle Open Office Chart : drawings;saving in other formats
+Oracle Open Office Chart : drawings;sending as e-mail
+Oracle Open Office Chart : drawings;showing (Writer)
+Oracle Open Office Chart : drawings, see also draw objects
+Oracle Open Office Chart : drop-down lists in form functions
+Oracle Open Office Chart : e-mail attachments
+Oracle Open Office Chart : Edit File icon
+Oracle Open Office Chart : edit mode
+Oracle Open Office Chart : edit mode;after opening
+Oracle Open Office Chart : edit mode;through Enter key (Calc)
+Oracle Open Office Chart : Edit Points bar
+Oracle Open Office Chart : editing
+Oracle Open Office Chart : editing;chart axes
+Oracle Open Office Chart : editing;chart data
+Oracle Open Office Chart : editing;chart legends
+Oracle Open Office Chart : editing;chart titles
+Oracle Open Office Chart : editing;comments
+Oracle Open Office Chart : editing;data binding of XForms
+Oracle Open Office Chart : editing;database tables and queries
+Oracle Open Office Chart : editing;draw objects
+Oracle Open Office Chart : editing;Fontwork objects
+Oracle Open Office Chart : editing;hyperlinks
+Oracle Open Office Chart : editing;menus
+Oracle Open Office Chart : editing;objects
+Oracle Open Office Chart : editing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Chart : editing;pictures
+Oracle Open Office Chart : editing;reports
+Oracle Open Office Chart : editing;shortcut keys
+Oracle Open Office Chart : editing;tab stops
+Oracle Open Office Chart : editing;templates
+Oracle Open Office Chart : editing;titles
+Oracle Open Office Chart : editing;toolbars
+Oracle Open Office Chart : editing;undoing
+Oracle Open Office Chart : editing;XForms
+Oracle Open Office Chart : editing time of documents
+Oracle Open Office Chart : editors
+Oracle Open Office Chart : editors;formula editor
+Oracle Open Office Chart : editors;ImageMap editor
+Oracle Open Office Chart : effects
+Oracle Open Office Chart : effects;font positions
+Oracle Open Office Chart : effects;fonts
+Oracle Open Office Chart : effects;Fontwork icons
+Oracle Open Office Chart : empty documents
+Oracle Open Office Chart : empty paragraph removal
+Oracle Open Office Chart : encryption of contents
+Oracle Open Office Chart : entering groups
+Oracle Open Office Chart : entering text from right to left
+Oracle Open Office Chart : equal sign, see also operators
+Oracle Open Office Chart : equations in formula editor
+Oracle Open Office Chart : error bars in charts
+Oracle Open Office Chart : error indicators in charts
+Oracle Open Office Chart : Error Report Tool
+Oracle Open Office Chart : Euro
+Oracle Open Office Chart : Euro;currency formats
+Oracle Open Office Chart : Euro;Euro Converter Wizard
+Oracle Open Office Chart : even/odd pages
+Oracle Open Office Chart : even/odd pages;printing
+Oracle Open Office Chart : events
+Oracle Open Office Chart : events;assigning scripts
+Oracle Open Office Chart : events;controls
+Oracle Open Office Chart : events;customizing
+Oracle Open Office Chart : events;in forms
+Oracle Open Office Chart : Excel
+Oracle Open Office Chart : Excel;saving as
+Oracle Open Office Chart : Excel;search criteria
+Oracle Open Office Chart : exceptions
+Oracle Open Office Chart : exceptions;user-defined dictionaries
+Oracle Open Office Chart : exchanging, see also replacing
+Oracle Open Office Chart : executing SQL commands
+Oracle Open Office Chart : exiting
+Oracle Open Office Chart : exiting;groups
+Oracle Open Office Chart : exiting;Oracle Open Office
+Oracle Open Office Chart : expanding formatting (Calc)
+Oracle Open Office Chart : explorer of data sources
+Oracle Open Office Chart : export filters
+Oracle Open Office Chart : exporting
+Oracle Open Office Chart : exporting;bitmaps
+Oracle Open Office Chart : exporting;HTML and text documents
+Oracle Open Office Chart : exporting;Microsoft Office documents with VBA code
+Oracle Open Office Chart : exporting;spreadsheets to text format
+Oracle Open Office Chart : exporting;templates
+Oracle Open Office Chart : exporting;to foreign formats
+Oracle Open Office Chart : exporting;to HTML
+Oracle Open Office Chart : exporting;to Microsoft Office formats
+Oracle Open Office Chart : exporting;to PDF
+Oracle Open Office Chart : exporting;to PostScript format
+Oracle Open Office Chart : exporting;to XML
+Oracle Open Office Chart : exporting;XML files
+Oracle Open Office Chart : extended tips in Help
+Oracle Open Office Chart : extension mode in text
+Oracle Open Office Chart : extensions
+Oracle Open Office Chart : extensions;Extension Manager
+Oracle Open Office Chart : extensions;file formats
+Oracle Open Office Chart : external keys (Base)
+Oracle Open Office Chart : faster printing
+Oracle Open Office Chart : faxes
+Oracle Open Office Chart : faxes;configuring Oracle Open Office
+Oracle Open Office Chart : faxes;fax programs/fax printers under UNIX
+Oracle Open Office Chart : faxes;selecting a fax machine
+Oracle Open Office Chart : faxes;sending
+Oracle Open Office Chart : faxes;wizards
+Oracle Open Office Chart : feedback
+Oracle Open Office Chart : feedback;automatically
+Oracle Open Office Chart : fields
+Oracle Open Office Chart : fields;database tables
+Oracle Open Office Chart : fields;displaying field codes (Writer)
+Oracle Open Office Chart : fields;formatted fields
+Oracle Open Office Chart : fields;updating automatically (Writer)
+Oracle Open Office Chart : file associations for Microsoft Office
+Oracle Open Office Chart : file filters
+Oracle Open Office Chart : file filters;mobile devices
+Oracle Open Office Chart : file filters;XML
+Oracle Open Office Chart : file formats
+Oracle Open Office Chart : file formats;changing Oracle Open Office defaults
+Oracle Open Office Chart : file formats;OpenDocument/XML
+Oracle Open Office Chart : file formats;saving always in other formats
+Oracle Open Office Chart : file selection button
+Oracle Open Office Chart : file sharing options for current document
+Oracle Open Office Chart : files
+Oracle Open Office Chart : files;filters and formats
+Oracle Open Office Chart : files;importing
+Oracle Open Office Chart : files;opening
+Oracle Open Office Chart : files;properties
+Oracle Open Office Chart : files;saving
+Oracle Open Office Chart : files;saving automatically
+Oracle Open Office Chart : files;saving in other formats
+Oracle Open Office Chart : files;sending as e-mail
+Oracle Open Office Chart : files;version numbers
+Oracle Open Office Chart : files and folders in Oracle Open Office
+Oracle Open Office Chart : fill characters with tabulators
+Oracle Open Office Chart : fill colors for areas
+Oracle Open Office Chart : fill patterns for areas
+Oracle Open Office Chart : filter conditions
+Oracle Open Office Chart : filter conditions;connecting
+Oracle Open Office Chart : filter conditions;in queries (Base)
+Oracle Open Office Chart : filtering
+Oracle Open Office Chart : filtering;data in databases
+Oracle Open Office Chart : filtering;data in forms
+Oracle Open Office Chart : filters
+Oracle Open Office Chart : filters;comparison operators
+Oracle Open Office Chart : filters;for import and export
+Oracle Open Office Chart : filters;Navigator
+Oracle Open Office Chart : filters;pictures
+Oracle Open Office Chart : filters;XML filter settings
+Oracle Open Office Chart : Find tab in Help
+Oracle Open Office Chart : finding
+Oracle Open Office Chart : finding;in all sheets
+Oracle Open Office Chart : finding;records in form documents
+Oracle Open Office Chart : finding;selections
+Oracle Open Office Chart : finding;similarity search
+Oracle Open Office Chart : fitting to pages
+Oracle Open Office Chart : fitting to pages;print settings in Math
+Oracle Open Office Chart : fitting to pages;print settings in presentations
+Oracle Open Office Chart : fixed text
+Oracle Open Office Chart : fixed text;form functions
+Oracle Open Office Chart : fixing toolbars
+Oracle Open Office Chart : flipping draw objects
+Oracle Open Office Chart : floating frames in HTML documents
+Oracle Open Office Chart : floating toolbars
+Oracle Open Office Chart : focus of controls
+Oracle Open Office Chart : folder creation
+Oracle Open Office Chart : font lists
+Oracle Open Office Chart : font name box
+Oracle Open Office Chart : font sizes
+Oracle Open Office Chart : font sizes;bullets
+Oracle Open Office Chart : font sizes;relative changes
+Oracle Open Office Chart : font sizes;scaling on screen
+Oracle Open Office Chart : font sizes;text
+Oracle Open Office Chart : fonts
+Oracle Open Office Chart : fonts;adding under UNIX
+Oracle Open Office Chart : fonts;changing in templates
+Oracle Open Office Chart : fonts;colors
+Oracle Open Office Chart : fonts;default settings
+Oracle Open Office Chart : fonts;effects
+Oracle Open Office Chart : fonts;for HTML and Basic
+Oracle Open Office Chart : fonts;formats
+Oracle Open Office Chart : fonts;outlines
+Oracle Open Office Chart : fonts;positions in text
+Oracle Open Office Chart : fonts;shadows
+Oracle Open Office Chart : fonts;specifying several
+Oracle Open Office Chart : fonts;strikethrough
+Oracle Open Office Chart : fonts;styles
+Oracle Open Office Chart : fonts;text objects
+Oracle Open Office Chart : Fontwork icons
+Oracle Open Office Chart : footers
+Oracle Open Office Chart : footers;backgrounds
+Oracle Open Office Chart : form controls
+Oracle Open Office Chart : form controls;assigning macros
+Oracle Open Office Chart : form controls;protecting
+Oracle Open Office Chart : form controls;toolbars
+Oracle Open Office Chart : form fields
+Oracle Open Office Chart : form filters
+Oracle Open Office Chart : Form Navigator
+Oracle Open Office Chart : format codes
+Oracle Open Office Chart : format codes;numbers
+Oracle Open Office Chart : format filling printing in Oracle Open Office Math
+Oracle Open Office Chart : Format Paintbrush
+Oracle Open Office Chart : formats
+Oracle Open Office Chart : formats;Asian layout
+Oracle Open Office Chart : formats;fonts
+Oracle Open Office Chart : formats;maximizing page formats
+Oracle Open Office Chart : formats;number and currency formats
+Oracle Open Office Chart : formats;of currencies/date/time
+Oracle Open Office Chart : formats;on opening and saving
+Oracle Open Office Chart : formats;pasting in special formats
+Oracle Open Office Chart : formats;positions
+Oracle Open Office Chart : formats;tabulators
+Oracle Open Office Chart : formatted fields
+Oracle Open Office Chart : formatted fields;form functions
+Oracle Open Office Chart : formatted fields;properties
+Oracle Open Office Chart : formatting
+Oracle Open Office Chart : formatting;Asian typography
+Oracle Open Office Chart : formatting;axes in charts
+Oracle Open Office Chart : formatting;chart areas
+Oracle Open Office Chart : formatting;chart floors
+Oracle Open Office Chart : formatting;chart legends
+Oracle Open Office Chart : formatting;chart titles
+Oracle Open Office Chart : formatting;chart walls
+Oracle Open Office Chart : formatting;copying
+Oracle Open Office Chart : formatting;definition
+Oracle Open Office Chart : formatting;expanding (Calc)
+Oracle Open Office Chart : formatting;font effects
+Oracle Open Office Chart : formatting;hyperlinks
+Oracle Open Office Chart : formatting;pages
+Oracle Open Office Chart : formatting;printer metrics (Writer)
+Oracle Open Office Chart : formatting;undoing
+Oracle Open Office Chart : formatting;undoing when writing
+Oracle Open Office Chart : forms
+Oracle Open Office Chart : forms;browsing
+Oracle Open Office Chart : forms;Combo Box/List Box Wizard
+Oracle Open Office Chart : forms;creating
+Oracle Open Office Chart : forms;data
+Oracle Open Office Chart : forms;designing (Base)
+Oracle Open Office Chart : forms;events
+Oracle Open Office Chart : forms;filtering data
+Oracle Open Office Chart : forms;finding records
+Oracle Open Office Chart : forms;focus after opening
+Oracle Open Office Chart : forms;general information (Base)
+Oracle Open Office Chart : forms;grouping controls
+Oracle Open Office Chart : forms;HTML filters
+Oracle Open Office Chart : forms;Navigator
+Oracle Open Office Chart : forms;opening in design mode
+Oracle Open Office Chart : forms;properties
+Oracle Open Office Chart : forms;sorting data
+Oracle Open Office Chart : forms;subforms
+Oracle Open Office Chart : forms;wizards
+Oracle Open Office Chart : forms;XForms
+Oracle Open Office Chart : formula texts
+Oracle Open Office Chart : formula texts;printing in Oracle Open Office Math
+Oracle Open Office Chart : formulas
+Oracle Open Office Chart : formulas;new
+Oracle Open Office Chart : formulas;starting formula editor
+Oracle Open Office Chart : formulas in reports
+Oracle Open Office Chart : formulas in reports;editing
+Oracle Open Office Chart : forums and support
+Oracle Open Office Chart : frames
+Oracle Open Office Chart : frames;around paragraphs
+Oracle Open Office Chart : frames;around tables
+Oracle Open Office Chart : frames;AutoCorrect function
+Oracle Open Office Chart : frames;backgrounds
+Oracle Open Office Chart : frames;captions (Writer)
+Oracle Open Office Chart : frames;printing in Oracle Open Office Math
+Oracle Open Office Chart : frames;protecting
+Oracle Open Office Chart : frames;selection frames
+Oracle Open Office Chart : frames;text fitting to frames
+Oracle Open Office Chart : freeform lines
+Oracle Open Office Chart : freeform lines;draw functions
+Oracle Open Office Chart : FTP
+Oracle Open Office Chart : FTP;opening documents
+Oracle Open Office Chart : FTP;saving documents
+Oracle Open Office Chart : full joins (Base)
+Oracle Open Office Chart : full screen view
+Oracle Open Office Chart : full-text search in Help
+Oracle Open Office Chart : functions in reports
+Oracle Open Office Chart : functions in reports;editing
+Oracle Open Office Chart : Gallery
+Oracle Open Office Chart : Gallery;adding pictures
+Oracle Open Office Chart : Gallery;dragging pictures to draw objects
+Oracle Open Office Chart : Gallery;hiding/showing
+Oracle Open Office Chart : Gallery;inserting pictures from
+Oracle Open Office Chart : get method for form transmissions
+Oracle Open Office Chart : getting support
+Oracle Open Office Chart : GIF format
+Oracle Open Office Chart : glossaries
+Oracle Open Office Chart : glossaries;common terms
+Oracle Open Office Chart : glossaries;Internet terms
+Oracle Open Office Chart : gradients off for faster printing
+Oracle Open Office Chart : graphic objects, see draw objects
+Oracle Open Office Chart : graphical text art
+Oracle Open Office Chart : graphics
+Oracle Open Office Chart : graphics;cache
+Oracle Open Office Chart : graphics;protecting
+Oracle Open Office Chart : graphics, see also pictures
+Oracle Open Office Chart : grayscale printing
+Oracle Open Office Chart : grid controls
+Oracle Open Office Chart : grid controls;form functions
+Oracle Open Office Chart : grids
+Oracle Open Office Chart : grids;defaults (Writer/Calc)
+Oracle Open Office Chart : grids;display options (Impress/Draw)
+Oracle Open Office Chart : grids;displaying lines (Calc)
+Oracle Open Office Chart : grids;formatting axes
+Oracle Open Office Chart : grids;inserting in charts
+Oracle Open Office Chart : group box creation
+Oracle Open Office Chart : groups
+Oracle Open Office Chart : groups;entering/exiting/ungrouping
+Oracle Open Office Chart : groups;naming
+Oracle Open Office Chart : groups;of controls
+Oracle Open Office Chart : guides
+Oracle Open Office Chart : guides;display options (Impress/Draw)
+Oracle Open Office Chart : guides;displaying when moving objects (Impress)
+Oracle Open Office Chart : guides;showing (Calc)
+Oracle Open Office Chart : guides;showing when moving frames (Writer)
+Oracle Open Office Chart : gutter
+Oracle Open Office Chart : handles
+Oracle Open Office Chart : handles;displaying (Writer)
+Oracle Open Office Chart : handles;scaling
+Oracle Open Office Chart : handles;showing simple/large handles (Calc)
+Oracle Open Office Chart : Hangul/Hanja
+Oracle Open Office Chart : hatching
+Oracle Open Office Chart : headers
+Oracle Open Office Chart : headers;backgrounds
+Oracle Open Office Chart : headings
+Oracle Open Office Chart : headings;entering as text box
+Oracle Open Office Chart : Hebrew
+Oracle Open Office Chart : Hebrew;entering text
+Oracle Open Office Chart : Hebrew;language settings
+Oracle Open Office Chart : Help
+Oracle Open Office Chart : Help;bookmarks
+Oracle Open Office Chart : Help;extended tips on/off
+Oracle Open Office Chart : Help;full-text search
+Oracle Open Office Chart : Help;Help tips
+Oracle Open Office Chart : Help;keywords
+Oracle Open Office Chart : Help;navigation pane showing/hiding
+Oracle Open Office Chart : Help;style sheets
+Oracle Open Office Chart : Help;topics
+Oracle Open Office Chart : Help Agent
+Oracle Open Office Chart : Help Agent;help
+Oracle Open Office Chart : Help Agent;options
+Oracle Open Office Chart : Help tips
+Oracle Open Office Chart : Help tips;hiding
+Oracle Open Office Chart : hidden controls in Form Navigator
+Oracle Open Office Chart : hidden fields display (Writer)
+Oracle Open Office Chart : hidden pages
+Oracle Open Office Chart : hidden pages;printing in presentations
+Oracle Open Office Chart : hidden text
+Oracle Open Office Chart : hidden text;showing (Writer)
+Oracle Open Office Chart : hiding
+Oracle Open Office Chart : hiding;changes
+Oracle Open Office Chart : hiding;chart legends
+Oracle Open Office Chart : hiding;docked windows
+Oracle Open Office Chart : hiding;navigation pane in Help window
+Oracle Open Office Chart : high contrast mode
+Oracle Open Office Chart : Hindi
+Oracle Open Office Chart : Hindi;entering text
+Oracle Open Office Chart : Hindi;language settings
+Oracle Open Office Chart : horizontal scrollbars (Writer)
+Oracle Open Office Chart : hotspots
+Oracle Open Office Chart : HowTos for charts
+Oracle Open Office Chart : HTML
+Oracle Open Office Chart : HTML;definition
+Oracle Open Office Chart : HTML;export character set
+Oracle Open Office Chart : HTML;fonts for source display
+Oracle Open Office Chart : HTML;importing META tags
+Oracle Open Office Chart : HTML;live presentations
+Oracle Open Office Chart : HTML documents
+Oracle Open Office Chart : HTML documents;auto reloading
+Oracle Open Office Chart : HTML documents;importing/exporting
+Oracle Open Office Chart : HTML documents;META tags in
+Oracle Open Office Chart : HTML documents;new
+Oracle Open Office Chart : HTML documents;source text
+Oracle Open Office Chart : hyperlinks
+Oracle Open Office Chart : hyperlinks;assigning macros
+Oracle Open Office Chart : hyperlinks;character formats
+Oracle Open Office Chart : hyperlinks;definition
+Oracle Open Office Chart : hyperlinks;deleting
+Oracle Open Office Chart : hyperlinks;editing
+Oracle Open Office Chart : hyperlinks;inserting
+Oracle Open Office Chart : hyperlinks;relative and absolute
+Oracle Open Office Chart : hyperlinks;turning off automatic recognition
+Oracle Open Office Chart : hyperlinks, see also links
+Oracle Open Office Chart : hyphenation
+Oracle Open Office Chart : hyphenation;activating for a language
+Oracle Open Office Chart : hyphenation;minimal number of characters
+Oracle Open Office Chart : hyphens
+Oracle Open Office Chart : hyphens;displaying custom (Writer)
+Oracle Open Office Chart : hyphens;inserting custom
+Oracle Open Office Chart : icon bars, see toolbars
+Oracle Open Office Chart : icon sizes
+Oracle Open Office Chart : ignore list for spellcheck
+Oracle Open Office Chart : illumination
+Oracle Open Office Chart : illumination;3D charts
+Oracle Open Office Chart : illustrations, see pictures
+Oracle Open Office Chart : image button creation
+Oracle Open Office Chart : image control creation
+Oracle Open Office Chart : ImageMap
+Oracle Open Office Chart : ImageMap;definition
+Oracle Open Office Chart : ImageMap;editor
+Oracle Open Office Chart : images
+Oracle Open Office Chart : images;ImageMap
+Oracle Open Office Chart : images;inserting and editing bitmaps
+Oracle Open Office Chart : images, see also pictures
+Oracle Open Office Chart : IME
+Oracle Open Office Chart : IME;definition
+Oracle Open Office Chart : IME;showing/hiding
+Oracle Open Office Chart : import filters
+Oracle Open Office Chart : import restrictions for Microsoft Office
+Oracle Open Office Chart : importing
+Oracle Open Office Chart : importing;bitmaps
+Oracle Open Office Chart : importing;compatibility settings for text import
+Oracle Open Office Chart : importing;databases
+Oracle Open Office Chart : importing;documents in other formats
+Oracle Open Office Chart : importing;from XML
+Oracle Open Office Chart : importing;HTML and text documents
+Oracle Open Office Chart : importing;HTML with META tags
+Oracle Open Office Chart : importing;Microsoft Office documents with VBA code
+Oracle Open Office Chart : importing;tables in text format
+Oracle Open Office Chart : importing;templates
+Oracle Open Office Chart : improvement program
+Oracle Open Office Chart : inches
+Oracle Open Office Chart : Index tab in Help
+Oracle Open Office Chart : indexes
+Oracle Open Office Chart : indexes;backgrounds
+Oracle Open Office Chart : indexes;showing/hiding Help index tab
+Oracle Open Office Chart : indicator lines in text
+Oracle Open Office Chart : inner joins (Base)
+Oracle Open Office Chart : input method window
+Oracle Open Office Chart : insert mode for entering text
+Oracle Open Office Chart : inserting
+Oracle Open Office Chart : inserting;buttons in toolbars
+Oracle Open Office Chart : inserting;cell ranges from spreadsheets
+Oracle Open Office Chart : inserting;charts
+Oracle Open Office Chart : inserting;clipboard options
+Oracle Open Office Chart : inserting;comments
+Oracle Open Office Chart : inserting;data from text documents
+Oracle Open Office Chart : inserting;datasource records in spreadsheets
+Oracle Open Office Chart : inserting;drawings
+Oracle Open Office Chart : inserting;floating frames
+Oracle Open Office Chart : inserting;Fontwork objects
+Oracle Open Office Chart : inserting;form fields
+Oracle Open Office Chart : inserting;hyperlinks
+Oracle Open Office Chart : inserting;line breaks in cells
+Oracle Open Office Chart : inserting;movies/sounds
+Oracle Open Office Chart : inserting;new text tables defaults
+Oracle Open Office Chart : inserting;objects from Gallery
+Oracle Open Office Chart : inserting;OLE objects
+Oracle Open Office Chart : inserting;paragraph borders
+Oracle Open Office Chart : inserting;paragraph bullets
+Oracle Open Office Chart : inserting;pictures in Gallery
+Oracle Open Office Chart : inserting;plug-ins
+Oracle Open Office Chart : inserting;push buttons
+Oracle Open Office Chart : inserting;special characters
+Oracle Open Office Chart : inserting;tab stops
+Oracle Open Office Chart : inserting;textures on chart bars
+Oracle Open Office Chart : installing
+Oracle Open Office Chart : installing;ActiveX control
+Oracle Open Office Chart : installing;mobile device filters
+Oracle Open Office Chart : installing;UNO components
+Oracle Open Office Chart : installing;XML filters
+Oracle Open Office Chart : instructions
+Oracle Open Office Chart : instructions;general
+Oracle Open Office Chart : Internet
+Oracle Open Office Chart : Internet;checking for updates
+Oracle Open Office Chart : Internet;Internet Explorer for displaying Oracle Open Office documents
+Oracle Open Office Chart : Internet;presentations
+Oracle Open Office Chart : Internet;starting searches
+Oracle Open Office Chart : Internet glossary
+Oracle Open Office Chart : invert filter
+Oracle Open Office Chart : invisible areas
+Oracle Open Office Chart : italic text
+Oracle Open Office Chart : iterative references in spreadsheets
+Oracle Open Office Chart : Java
+Oracle Open Office Chart : Java;definition
+Oracle Open Office Chart : Java;setting options
+Oracle Open Office Chart : JDBC
+Oracle Open Office Chart : JDBC;databases (Base)
+Oracle Open Office Chart : JDBC;definition
+Oracle Open Office Chart : joining
+Oracle Open Office Chart : joining;paragraphs
+Oracle Open Office Chart : joining;tables (Base)
+Oracle Open Office Chart : joins in databases (Base)
+Oracle Open Office Chart : justifying text
+Oracle Open Office Chart : kerning
+Oracle Open Office Chart : kerning;Asian texts
+Oracle Open Office Chart : kerning;definition
+Oracle Open Office Chart : kerning;in characters
+Oracle Open Office Chart : key fields for relations (Base)
+Oracle Open Office Chart : keyboard
+Oracle Open Office Chart : keyboard;assigning/editing shortcut keys
+Oracle Open Office Chart : keyboard;general commands
+Oracle Open Office Chart : keyboard;removing numbering
+Oracle Open Office Chart : keys
+Oracle Open Office Chart : keys;adding push buttons
+Oracle Open Office Chart : keys;primary keys (Base)
+Oracle Open Office Chart : kiosk export
+Oracle Open Office Chart : labels
+Oracle Open Office Chart : labels;creating and synchronizing
+Oracle Open Office Chart : labels;for charts
+Oracle Open Office Chart : labels;for draw objects
+Oracle Open Office Chart : labels;form functions
+Oracle Open Office Chart : labels;from databases
+Oracle Open Office Chart : labels, see also names/callouts
+Oracle Open Office Chart : languages
+Oracle Open Office Chart : languages;activating modules
+Oracle Open Office Chart : languages;Asian support
+Oracle Open Office Chart : languages;complex text layout
+Oracle Open Office Chart : languages;locale settings
+Oracle Open Office Chart : languages;selecting for text
+Oracle Open Office Chart : languages;setting options
+Oracle Open Office Chart : languages;spellcheck
+Oracle Open Office Chart : languages;spellchecking and formatting
+Oracle Open Office Chart : large handles (Writer)
+Oracle Open Office Chart : large icons
+Oracle Open Office Chart : layer arrangement
+Oracle Open Office Chart : layout
+Oracle Open Office Chart : layout;importing Word documents
+Oracle Open Office Chart : layout;pages
+Oracle Open Office Chart : LDAP server
+Oracle Open Office Chart : LDAP server;address books (Base)
+Oracle Open Office Chart : LDAP server;sign on options
+Oracle Open Office Chart : leading between paragraphs
+Oracle Open Office Chart : left alignment of paragraphs
+Oracle Open Office Chart : left joins (Base)
+Oracle Open Office Chart : legends
+Oracle Open Office Chart : legends;charts
+Oracle Open Office Chart : legends;draw objects
+Oracle Open Office Chart : legends;rounding corners
+Oracle Open Office Chart : Letter Wizard
+Oracle Open Office Chart : levels
+Oracle Open Office Chart : levels;depth stagger
+Oracle Open Office Chart : levels;macro security
+Oracle Open Office Chart : limits of tables (Writer)
+Oracle Open Office Chart : line breaks
+Oracle Open Office Chart : line breaks;in cells
+Oracle Open Office Chart : line charts
+Oracle Open Office Chart : line spacing
+Oracle Open Office Chart : line spacing;context menu in paragraphs
+Oracle Open Office Chart : line spacing;paragraph
+Oracle Open Office Chart : line styles
+Oracle Open Office Chart : line styles;applying
+Oracle Open Office Chart : line styles;defining
+Oracle Open Office Chart : lines
+Oracle Open Office Chart : lines;defining ends
+Oracle Open Office Chart : lines;draw functions
+Oracle Open Office Chart : lines;drawing in text
+Oracle Open Office Chart : lines;editing points
+Oracle Open Office Chart : lines;removing automatic lines
+Oracle Open Office Chart : lines of text
+Oracle Open Office Chart : lines of text;alignment
+Oracle Open Office Chart : links
+Oracle Open Office Chart : links;between cells and controls
+Oracle Open Office Chart : links;by drag and drop
+Oracle Open Office Chart : links;character formats
+Oracle Open Office Chart : links;definition
+Oracle Open Office Chart : links;editing hyperlinks
+Oracle Open Office Chart : links;inserting
+Oracle Open Office Chart : links;modifying
+Oracle Open Office Chart : links;opening files with
+Oracle Open Office Chart : links;relational databases (Base)
+Oracle Open Office Chart : links;turning off automatic recognition
+Oracle Open Office Chart : links;updating options (Writer)
+Oracle Open Office Chart : links;updating specific links
+Oracle Open Office Chart : list box creation
+Oracle Open Office Chart : lists
+Oracle Open Office Chart : lists;data assigned to controls
+Oracle Open Office Chart : lists;registered databases (Base)
+Oracle Open Office Chart : lists;regular expressions
+Oracle Open Office Chart : live presentations on the Internet
+Oracle Open Office Chart : loading
+Oracle Open Office Chart : loading;documents
+Oracle Open Office Chart : loading;documents from other formats
+Oracle Open Office Chart : loading;HTML documents, automatically
+Oracle Open Office Chart : loading;Microsoft Office documents with VBA code
+Oracle Open Office Chart : loading;reloading
+Oracle Open Office Chart : loading;XML files
+Oracle Open Office Chart : locale settings
+Oracle Open Office Chart : logarithmic scaling along axes
+Oracle Open Office Chart : lowercase letters
+Oracle Open Office Chart : lowercase letters;font effects
+Oracle Open Office Chart : Macro Wizard (Base)
+Oracle Open Office Chart : macros
+Oracle Open Office Chart : macros;assigning to events in forms
+Oracle Open Office Chart : macros;attaching new (Base)
+Oracle Open Office Chart : macros;in MS Office documents
+Oracle Open Office Chart : macros;interrupting
+Oracle Open Office Chart : macros;organizing
+Oracle Open Office Chart : macros;recording
+Oracle Open Office Chart : macros;security
+Oracle Open Office Chart : macros;security levels
+Oracle Open Office Chart : macros;security warning dialog
+Oracle Open Office Chart : macros;selecting security warnings
+Oracle Open Office Chart : magnifiers
+Oracle Open Office Chart : margins
+Oracle Open Office Chart : margins;pages
+Oracle Open Office Chart : margins;setting with the mouse
+Oracle Open Office Chart : margins;shadows
+Oracle Open Office Chart : marking changes
+Oracle Open Office Chart : marking, see selecting
+Oracle Open Office Chart : Math formula editor
+Oracle Open Office Chart : mean value lines in charts
+Oracle Open Office Chart : measurement units
+Oracle Open Office Chart : measurement units;changing on rulers
+Oracle Open Office Chart : measurement units;converting
+Oracle Open Office Chart : measurement units;selecting
+Oracle Open Office Chart : Media Player window
+Oracle Open Office Chart : menus
+Oracle Open Office Chart : menus;activating context menus
+Oracle Open Office Chart : menus;assigning macros
+Oracle Open Office Chart : menus;customizing
+Oracle Open Office Chart : merging
+Oracle Open Office Chart : merging;documents
+Oracle Open Office Chart : META tags
+Oracle Open Office Chart : metrics
+Oracle Open Office Chart : metrics;converting
+Oracle Open Office Chart : metrics;document formatting (Writer)
+Oracle Open Office Chart : metrics;in sheets
+Oracle Open Office Chart : Microsoft Office
+Oracle Open Office Chart : Microsoft Office;Access databases (base)
+Oracle Open Office Chart : Microsoft Office;as default file format
+Oracle Open Office Chart : Microsoft Office;document import restrictions
+Oracle Open Office Chart : Microsoft Office;feature comparisons
+Oracle Open Office Chart : Microsoft Office;importing password protected files
+Oracle Open Office Chart : Microsoft Office;importing Word documents
+Oracle Open Office Chart : Microsoft Office;importing/exporting VBA code
+Oracle Open Office Chart : Microsoft Office;new users information
+Oracle Open Office Chart : Microsoft Office;opening Microsoft documents
+Oracle Open Office Chart : Microsoft Office;reassigning document types
+Oracle Open Office Chart : migrating macros (Base)
+Oracle Open Office Chart : mobile device filters
+Oracle Open Office Chart : models in XForms
+Oracle Open Office Chart : modifying, see changing
+Oracle Open Office Chart : more controls
+Oracle Open Office Chart : mosaic filter
+Oracle Open Office Chart : mouse
+Oracle Open Office Chart : mouse;pointers when using drag and drop
+Oracle Open Office Chart : mouse;positioning
+Oracle Open Office Chart : movies
+Oracle Open Office Chart : moving
+Oracle Open Office Chart : moving;tab stops on ruler
+Oracle Open Office Chart : moving;toolbars
+Oracle Open Office Chart : moving;using guide lines in presentations
+Oracle Open Office Chart : MS ADO interface (Base)
+Oracle Open Office Chart : multi-line titles in forms
+Oracle Open Office Chart : multiple documents
+Oracle Open Office Chart : multiple documents;opening
+Oracle Open Office Chart : multiple selection
+Oracle Open Office Chart : music
+Oracle Open Office Chart : My Documents folder
+Oracle Open Office Chart : My Documents folder;changing work directory
+Oracle Open Office Chart : My Documents folder;opening
+Oracle Open Office Chart : MySQL databases (Base)
+Oracle Open Office Chart : names
+Oracle Open Office Chart : names;multi-line titles
+Oracle Open Office Chart : names;objects
+Oracle Open Office Chart : names, see also labels/callouts
+Oracle Open Office Chart : namespace organization in XForms
+Oracle Open Office Chart : native SQL (Base)
+Oracle Open Office Chart : navigating
+Oracle Open Office Chart : navigating;in documents
+Oracle Open Office Chart : Navigation bar
+Oracle Open Office Chart : Navigation bar;controls
+Oracle Open Office Chart : Navigation bar;forms
+Oracle Open Office Chart : Navigator
+Oracle Open Office Chart : Navigator;comments
+Oracle Open Office Chart : Navigator;contents as lists
+Oracle Open Office Chart : Navigator;docking
+Oracle Open Office Chart : Navigator;working with
+Oracle Open Office Chart : net charts
+Oracle Open Office Chart : network identity options
+Oracle Open Office Chart : new databases
+Oracle Open Office Chart : new documents
+Oracle Open Office Chart : new lines in cells
+Oracle Open Office Chart : new windows
+Oracle Open Office Chart : non-breaking dashes
+Oracle Open Office Chart : non-breaking spaces (Writer)
+Oracle Open Office Chart : non-printing characters (Writer)
+Oracle Open Office Chart : number formats
+Oracle Open Office Chart : number formats;codes
+Oracle Open Office Chart : number formats;formats
+Oracle Open Office Chart : number formats;recognition in text tables
+Oracle Open Office Chart : number of pages
+Oracle Open Office Chart : number of sheets
+Oracle Open Office Chart : number of tables
+Oracle Open Office Chart : numbering
+Oracle Open Office Chart : numbering;options
+Oracle Open Office Chart : numbering;turning off
+Oracle Open Office Chart : numbering;using automatically
+Oracle Open Office Chart : numbers
+Oracle Open Office Chart : numbers;date, time and currency formats
+Oracle Open Office Chart : numerical fields in forms
+Oracle Open Office Chart : objects
+Oracle Open Office Chart : objects;always moveable (Impress/Draw)
+Oracle Open Office Chart : objects;arranging within stacks
+Oracle Open Office Chart : objects;copying when moving in presentations
+Oracle Open Office Chart : objects;definition
+Oracle Open Office Chart : objects;displaying in spreadsheets
+Oracle Open Office Chart : objects;displaying in text documents
+Oracle Open Office Chart : objects;editing
+Oracle Open Office Chart : objects;inserting from Gallery
+Oracle Open Office Chart : objects;inserting OLE objects
+Oracle Open Office Chart : objects;moving and resizing with mouse
+Oracle Open Office Chart : objects;naming
+Oracle Open Office Chart : objects;opening
+Oracle Open Office Chart : objects;properties of charts
+Oracle Open Office Chart : objects;quickly moving to
+Oracle Open Office Chart : objects;titles and descriptions
+Oracle Open Office Chart : ODBC
+Oracle Open Office Chart : ODBC;database (Base)
+Oracle Open Office Chart : ODBC;definition
+Oracle Open Office Chart : ODF file formats
+Oracle Open Office Chart : Office
+Oracle Open Office Chart : Office;Microsoft Office and Oracle Open Office
+Oracle Open Office Chart : OLE
+Oracle Open Office Chart : OLE;definition
+Oracle Open Office Chart : OLE objects
+Oracle Open Office Chart : OLE objects;arranging within stacks
+Oracle Open Office Chart : OLE objects;captions (Writer)
+Oracle Open Office Chart : OLE objects;inserting
+Oracle Open Office Chart : OLE objects;number of
+Oracle Open Office Chart : OLE objects;protecting
+Oracle Open Office Chart : one and a half line spacing in text
+Oracle Open Office Chart : online feedback options
+Oracle Open Office Chart : online registration
+Oracle Open Office Chart : online update options
+Oracle Open Office Chart : online updates
+Oracle Open Office Chart : online updates;checking automatically
+Oracle Open Office Chart : online updates;checking manually
+Oracle Open Office Chart : OpenDocument file formats
+Oracle Open Office Chart : OpenGL
+Oracle Open Office Chart : OpenGL;definition
+Oracle Open Office Chart : opening
+Oracle Open Office Chart : opening;context menus
+Oracle Open Office Chart : opening;database files
+Oracle Open Office Chart : opening;dialog settings
+Oracle Open Office Chart : opening;documents
+Oracle Open Office Chart : opening;documents from other formats
+Oracle Open Office Chart : opening;documents on WebDAV server
+Oracle Open Office Chart : opening;files with links
+Oracle Open Office Chart : opening;files, with placeholders
+Oracle Open Office Chart : opening;forms
+Oracle Open Office Chart : opening;Microsoft Office files
+Oracle Open Office Chart : opening;mobile device documents
+Oracle Open Office Chart : opening;objects
+Oracle Open Office Chart : opening;reports
+Oracle Open Office Chart : opening;several files
+Oracle Open Office Chart : opening;XForms
+Oracle Open Office Chart : operators
+Oracle Open Office Chart : operators;default filters
+Oracle Open Office Chart : optional hyphens (Writer)
+Oracle Open Office Chart : options
+Oracle Open Office Chart : options;accessibility
+Oracle Open Office Chart : options;appearance
+Oracle Open Office Chart : options;compatibility (Writer)
+Oracle Open Office Chart : options;improvement program
+Oracle Open Office Chart : options;network identity
+Oracle Open Office Chart : options;online update
+Oracle Open Office Chart : options;tools
+Oracle Open Office Chart : Oracle databases (base)
+Oracle Open Office Chart : Oracle Open Office Base data sources
+Oracle Open Office Chart : Oracle Open Office Basic scripts in HTML documents
+Oracle Open Office Chart : Oracle Open Office documents
+Oracle Open Office Chart : Oracle Open Office documents;mobile device filters
+Oracle Open Office Chart : Oracle Open Office documents;viewing and editing in Internet Explorer
+Oracle Open Office Chart : Oracle Open Office Math start
+Oracle Open Office Chart : order of chart data
+Oracle Open Office Chart : ordering
+Oracle Open Office Chart : ordering;objects
+Oracle Open Office Chart : ordinal numbers
+Oracle Open Office Chart : ordinal numbers;replacing
+Oracle Open Office Chart : organizing
+Oracle Open Office Chart : organizing;macros and scripts
+Oracle Open Office Chart : organizing;namespaces in XForms
+Oracle Open Office Chart : organizing;styles
+Oracle Open Office Chart : organizing;templates
+Oracle Open Office Chart : original size
+Oracle Open Office Chart : original size;printing in Oracle Open Office Math
+Oracle Open Office Chart : original size;restoring after cropping
+Oracle Open Office Chart : outlines
+Oracle Open Office Chart : outlines;font effects
+Oracle Open Office Chart : outlines;outline symbols
+Oracle Open Office Chart : outlines;sending to presentations
+Oracle Open Office Chart : overwrite mode
+Oracle Open Office Chart : packages, see extensions
+Oracle Open Office Chart : page breaks
+Oracle Open Office Chart : page breaks;displaying (Calc)
+Oracle Open Office Chart : page formats
+Oracle Open Office Chart : page formats;maximizing
+Oracle Open Office Chart : page formats;restriction
+Oracle Open Office Chart : page styles
+Oracle Open Office Chart : page styles;editing/applying with statusbar
+Oracle Open Office Chart : pages
+Oracle Open Office Chart : pages;backgrounds in all applications
+Oracle Open Office Chart : pages;formatting and numbering
+Oracle Open Office Chart : pages;printing page names in presentations
+Oracle Open Office Chart : pages;scaling
+Oracle Open Office Chart : pages;selecting one to print
+Oracle Open Office Chart : paint box
+Oracle Open Office Chart : paint can symbol
+Oracle Open Office Chart : pair kerning
+Oracle Open Office Chart : Palm file filters
+Oracle Open Office Chart : paper formats
+Oracle Open Office Chart : paper size warning
+Oracle Open Office Chart : paper trays
+Oracle Open Office Chart : paragraph marks
+Oracle Open Office Chart : paragraph marks;displaying (Writer)
+Oracle Open Office Chart : paragraph styles
+Oracle Open Office Chart : paragraph styles;languages
+Oracle Open Office Chart : paragraph styles;modifying basic fonts
+Oracle Open Office Chart : paragraphs
+Oracle Open Office Chart : paragraphs;alignment
+Oracle Open Office Chart : paragraphs;Asian typography
+Oracle Open Office Chart : paragraphs;defining borders
+Oracle Open Office Chart : paragraphs;hidden paragraphs (Writer)
+Oracle Open Office Chart : paragraphs;increasing indents of
+Oracle Open Office Chart : paragraphs;indents, margins and columns
+Oracle Open Office Chart : paragraphs;inserting bullets
+Oracle Open Office Chart : paragraphs;joining
+Oracle Open Office Chart : paragraphs;numbering automatically
+Oracle Open Office Chart : paragraphs;removing blank ones
+Oracle Open Office Chart : paragraphs;spacing
+Oracle Open Office Chart : paragraphs;tab stops
+Oracle Open Office Chart : parameters
+Oracle Open Office Chart : parameters;command line
+Oracle Open Office Chart : parameters;queries (Base)
+Oracle Open Office Chart : passwords for protecting contents
+Oracle Open Office Chart : pasting
+Oracle Open Office Chart : pasting;cell ranges
+Oracle Open Office Chart : pasting;cell ranges from spreadsheets
+Oracle Open Office Chart : pasting;data from text documents
+Oracle Open Office Chart : pasting;draw objects
+Oracle Open Office Chart : pasting;draw objects from other documents
+Oracle Open Office Chart : pasting;formatted/unformatted text
+Oracle Open Office Chart : pasting;from data source view
+Oracle Open Office Chart : pasting;from data sources to Oracle Open Office Calc
+Oracle Open Office Chart : pasting;pictures from other documents
+Oracle Open Office Chart : pasting;sheet areas in text documents
+Oracle Open Office Chart : pasting;to Gallery
+Oracle Open Office Chart : paths
+Oracle Open Office Chart : paths;changing work directory
+Oracle Open Office Chart : paths;defaults
+Oracle Open Office Chart : pattern editor
+Oracle Open Office Chart : pattern fields
+Oracle Open Office Chart : pattern fields;form functions
+Oracle Open Office Chart : patterns for objects
+Oracle Open Office Chart : PDF
+Oracle Open Office Chart : PDF;export
+Oracle Open Office Chart : PDF;PostScript to PDF converter, UNIX
+Oracle Open Office Chart : personal data input
+Oracle Open Office Chart : phonetic guide
+Oracle Open Office Chart : picklist creation
+Oracle Open Office Chart : pictures
+Oracle Open Office Chart : pictures;adding to Gallery
+Oracle Open Office Chart : pictures;arranging within stacks
+Oracle Open Office Chart : pictures;assigning macros
+Oracle Open Office Chart : pictures;backgrounds
+Oracle Open Office Chart : pictures;captions (Writer)
+Oracle Open Office Chart : pictures;changing paths
+Oracle Open Office Chart : pictures;cropping and zooming
+Oracle Open Office Chart : pictures;displaying in Calc
+Oracle Open Office Chart : pictures;displaying in Writer (Writer)
+Oracle Open Office Chart : pictures;drag and drop between documents
+Oracle Open Office Chart : pictures;drawing
+Oracle Open Office Chart : pictures;editing
+Oracle Open Office Chart : pictures;filters
+Oracle Open Office Chart : pictures;ImageMap
+Oracle Open Office Chart : pictures;inserting automatically
+Oracle Open Office Chart : pictures;inserting from Gallery
+Oracle Open Office Chart : pictures;number of
+Oracle Open Office Chart : pictures;printing
+Oracle Open Office Chart : pictures;scaling/resizing
+Oracle Open Office Chart : pie charts
+Oracle Open Office Chart : pie charts;options
+Oracle Open Office Chart : pie charts;types
+Oracle Open Office Chart : pixel editor
+Oracle Open Office Chart : pixel graphics
+Oracle Open Office Chart : pixel graphics;inserting and editing
+Oracle Open Office Chart : pixel patterns
+Oracle Open Office Chart : placeholders
+Oracle Open Office Chart : placeholders;in SQL queries
+Oracle Open Office Chart : placeholders;on opening files
+Oracle Open Office Chart : placing toolbars
+Oracle Open Office Chart : playing movies and sound files
+Oracle Open Office Chart : plotting data as charts
+Oracle Open Office Chart : plug-ins
+Oracle Open Office Chart : plug-ins;activating and deactivating
+Oracle Open Office Chart : plug-ins;definition
+Oracle Open Office Chart : plug-ins;inserting
+Oracle Open Office Chart : pocket device appliances
+Oracle Open Office Chart : Pocket PC file filters
+Oracle Open Office Chart : points
+Oracle Open Office Chart : points;reducing editing points when snapping (Impress/Draw)
+Oracle Open Office Chart : polygon drawing
+Oracle Open Office Chart : pop-art filter
+Oracle Open Office Chart : portable document format
+Oracle Open Office Chart : positioning
+Oracle Open Office Chart : positioning;axes
+Oracle Open Office Chart : positioning;draw objects and controls
+Oracle Open Office Chart : positioning;fonts
+Oracle Open Office Chart : positioning;objects
+Oracle Open Office Chart : positioning;toolbars
+Oracle Open Office Chart : post method for form transmissions
+Oracle Open Office Chart : posterizing filter
+Oracle Open Office Chart : PostScript
+Oracle Open Office Chart : PostScript;creating files
+Oracle Open Office Chart : PostScript;PDF converter, UNIX
+Oracle Open Office Chart : PowerPoint export
+Oracle Open Office Chart : precision as shown (Calc)
+Oracle Open Office Chart : predefining fonts
+Oracle Open Office Chart : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
+Oracle Open Office Chart : presentations
+Oracle Open Office Chart : presentations;creating/opening
+Oracle Open Office Chart : presentations;inserting spreadsheet cells
+Oracle Open Office Chart : presentations;live on the Internet
+Oracle Open Office Chart : presentations;print menu
+Oracle Open Office Chart : presentations;saving
+Oracle Open Office Chart : presentations;saving automatically
+Oracle Open Office Chart : presentations;saving in other formats
+Oracle Open Office Chart : presentations;sending as e-mail
+Oracle Open Office Chart : presentations;starting with wizard
+Oracle Open Office Chart : presentations;wizards
+Oracle Open Office Chart : Presenter Console shortcuts
+Oracle Open Office Chart : press buttons, see push buttons
+Oracle Open Office Chart : previews
+Oracle Open Office Chart : previews;fonts lists
+Oracle Open Office Chart : primary keys
+Oracle Open Office Chart : primary keys;defining
+Oracle Open Office Chart : primary keys;design view
+Oracle Open Office Chart : primary keys;inserting (Base)
+Oracle Open Office Chart : print area selection
+Oracle Open Office Chart : printer metrics for document formatting (Writer)
+Oracle Open Office Chart : printers
+Oracle Open Office Chart : printers;adding, UNIX
+Oracle Open Office Chart : printers;choosing
+Oracle Open Office Chart : printers;default printer
+Oracle Open Office Chart : printers;faxes under UNIX
+Oracle Open Office Chart : printers;maximum page formats
+Oracle Open Office Chart : printers;paper trays
+Oracle Open Office Chart : printers;properties
+Oracle Open Office Chart : printing
+Oracle Open Office Chart : printing;black and white
+Oracle Open Office Chart : printing;brochures
+Oracle Open Office Chart : printing;colors in grayscale
+Oracle Open Office Chart : printing;comments
+Oracle Open Office Chart : printing;copies
+Oracle Open Office Chart : printing;creating individual jobs
+Oracle Open Office Chart : printing;dates in presentations
+Oracle Open Office Chart : printing;directly
+Oracle Open Office Chart : printing;documents
+Oracle Open Office Chart : printing;drawings defaults
+Oracle Open Office Chart : printing;elements in text documents
+Oracle Open Office Chart : printing;faster
+Oracle Open Office Chart : printing;fitting to pages in Oracle Open Office Math
+Oracle Open Office Chart : printing;fitting to pages in presentations
+Oracle Open Office Chart : printing;formulas in Oracle Open Office Math
+Oracle Open Office Chart : printing;hidden pages of presentations
+Oracle Open Office Chart : printing;in original size in Oracle Open Office Math
+Oracle Open Office Chart : printing;left/right pages
+Oracle Open Office Chart : printing;queries (Base)
+Oracle Open Office Chart : printing;scaling in Oracle Open Office Math
+Oracle Open Office Chart : printing;selections
+Oracle Open Office Chart : printing;text always in black
+Oracle Open Office Chart : printing;text in reverse order
+Oracle Open Office Chart : printing;tiling pages in presentations
+Oracle Open Office Chart : printing;transparencies
+Oracle Open Office Chart : printing;warnings
+Oracle Open Office Chart : printing;without scaling in presentations
+Oracle Open Office Chart : printing speed
+Oracle Open Office Chart : programming
+Oracle Open Office Chart : programming;Oracle Open Office
+Oracle Open Office Chart : programming;scripting
+Oracle Open Office Chart : properties
+Oracle Open Office Chart : properties;charts
+Oracle Open Office Chart : properties;fields in databases
+Oracle Open Office Chart : properties;files
+Oracle Open Office Chart : properties;form controls
+Oracle Open Office Chart : properties;forms
+Oracle Open Office Chart : properties;printers
+Oracle Open Office Chart : properties;smooth lines in line charts/XY charts
+Oracle Open Office Chart : protected contents
+Oracle Open Office Chart : protected dashes
+Oracle Open Office Chart : protected database tables
+Oracle Open Office Chart : protected documents
+Oracle Open Office Chart : protected spaces
+Oracle Open Office Chart : protected spaces;inserting
+Oracle Open Office Chart : protected spaces;showing (Writer)
+Oracle Open Office Chart : protecting
+Oracle Open Office Chart : protecting;contents
+Oracle Open Office Chart : protecting;recorded changes
+Oracle Open Office Chart : proxy settings
+Oracle Open Office Chart : push buttons
+Oracle Open Office Chart : push buttons;adding to documents
+Oracle Open Office Chart : push buttons;creating
+Oracle Open Office Chart : queries
+Oracle Open Office Chart : queries;copying (Base)
+Oracle Open Office Chart : queries;creating in design view (Base)
+Oracle Open Office Chart : queries;creating in SQL view
+Oracle Open Office Chart : queries;defining (Base)
+Oracle Open Office Chart : queries;deleting table links (Base)
+Oracle Open Office Chart : queries;editing in data source view
+Oracle Open Office Chart : queries;formulating filter conditions (Base)
+Oracle Open Office Chart : queries;joining tables (Base)
+Oracle Open Office Chart : queries;missing elements (Base)
+Oracle Open Office Chart : queries;overview (Base)
+Oracle Open Office Chart : queries;parameter queries (Base)
+Oracle Open Office Chart : queries;printing (Base)
+Oracle Open Office Chart : Query Wizard (Base)
+Oracle Open Office Chart : Quickstarter
+Oracle Open Office Chart : quotes
+Oracle Open Office Chart : quotes;custom
+Oracle Open Office Chart : radar charts, see net charts
+Oracle Open Office Chart : radio button creation
+Oracle Open Office Chart : read-only documents
+Oracle Open Office Chart : read-only documents;cursor
+Oracle Open Office Chart : read-only documents;database tables on/off
+Oracle Open Office Chart : read-only documents;editing
+Oracle Open Office Chart : read-only documents;opening documents as
+Oracle Open Office Chart : read-only items in Data Navigator
+Oracle Open Office Chart : recognizing URLs automatically
+Oracle Open Office Chart : recording
+Oracle Open Office Chart : recording;changes
+Oracle Open Office Chart : recording;macros
+Oracle Open Office Chart : records
+Oracle Open Office Chart : records;inserting comments
+Oracle Open Office Chart : records;protecting
+Oracle Open Office Chart : records;saving
+Oracle Open Office Chart : records;searching in databases
+Oracle Open Office Chart : rectangles with round corners
+Oracle Open Office Chart : recursions in spreadsheets
+Oracle Open Office Chart : redo command
+Oracle Open Office Chart : reduced printing
+Oracle Open Office Chart : reference lines
+Oracle Open Office Chart : references
+Oracle Open Office Chart : references;displaying in color (Calc)
+Oracle Open Office Chart : references;expanding (Calc)
+Oracle Open Office Chart : references;iterative (Calc)
+Oracle Open Office Chart : register-true
+Oracle Open Office Chart : register-true;definition
+Oracle Open Office Chart : registering
+Oracle Open Office Chart : registering;address books
+Oracle Open Office Chart : registering;databases (Base)
+Oracle Open Office Chart : registering;Oracle Open Office
+Oracle Open Office Chart : regression curves in charts
+Oracle Open Office Chart : regular expressions
+Oracle Open Office Chart : regular expressions;list of
+Oracle Open Office Chart : relational databases (Base)
+Oracle Open Office Chart : relations
+Oracle Open Office Chart : relations;creating and deleting (Base)
+Oracle Open Office Chart : relations;joining tables (Base)
+Oracle Open Office Chart : relations;properties (Base)
+Oracle Open Office Chart : relative hyperlinks
+Oracle Open Office Chart : relative saving of URLs
+Oracle Open Office Chart : reloading
+Oracle Open Office Chart : reloading;documents
+Oracle Open Office Chart : reloading;HTML documents, automatically
+Oracle Open Office Chart : remarks, see also comments
+Oracle Open Office Chart : remote configurations
+Oracle Open Office Chart : remove noise filter
+Oracle Open Office Chart : removing
+Oracle Open Office Chart : removing;bullets and numbering
+Oracle Open Office Chart : removing;form filters
+Oracle Open Office Chart : removing, see also deleting
+Oracle Open Office Chart : reorganizing charts
+Oracle Open Office Chart : repeating
+Oracle Open Office Chart : repeating;commands
+Oracle Open Office Chart : replacement options
+Oracle Open Office Chart : replacement table
+Oracle Open Office Chart : replacing
+Oracle Open Office Chart : replacing;AutoCorrect function
+Oracle Open Office Chart : replacing;dashes
+Oracle Open Office Chart : replacing;ordinal numbers
+Oracle Open Office Chart : replacing;tab stops (regular expressions)
+Oracle Open Office Chart : Report Builder
+Oracle Open Office Chart : reports
+Oracle Open Office Chart : reports;creating
+Oracle Open Office Chart : reports;error reports
+Oracle Open Office Chart : reports;opening and editing
+Oracle Open Office Chart : reports;templates
+Oracle Open Office Chart : resetting
+Oracle Open Office Chart : resetting;templates
+Oracle Open Office Chart : resizing
+Oracle Open Office Chart : resizing;objects, by mouse
+Oracle Open Office Chart : resizing, see also scaling/zooming
+Oracle Open Office Chart : resolution when printing bitmaps
+Oracle Open Office Chart : restoring
+Oracle Open Office Chart : restoring;default formatting
+Oracle Open Office Chart : restoring;editing
+Oracle Open Office Chart : reversing printing order
+Oracle Open Office Chart : review function
+Oracle Open Office Chart : review function;accepting or rejecting changes
+Oracle Open Office Chart : review function;comparing documents
+Oracle Open Office Chart : review function;protecting records
+Oracle Open Office Chart : review function;recording changes example
+Oracle Open Office Chart : rich text control
+Oracle Open Office Chart : right alignment of paragraphs
+Oracle Open Office Chart : right joins (Base)
+Oracle Open Office Chart : right-to-left text
+Oracle Open Office Chart : rotating
+Oracle Open Office Chart : rotating;3D text
+Oracle Open Office Chart : round corners
+Oracle Open Office Chart : rounding precision (Calc)
+Oracle Open Office Chart : row headers
+Oracle Open Office Chart : row headers;displaying (Calc)
+Oracle Open Office Chart : row headers;highlighting (Calc)
+Oracle Open Office Chart : rulers
+Oracle Open Office Chart : rulers;default settings
+Oracle Open Office Chart : rulers;measurement units
+Oracle Open Office Chart : rulers;visible in presentations
+Oracle Open Office Chart : samples and templates
+Oracle Open Office Chart : saving
+Oracle Open Office Chart : saving;default file formats
+Oracle Open Office Chart : saving;dialog settings
+Oracle Open Office Chart : saving;documents
+Oracle Open Office Chart : saving;documents for mobile devices
+Oracle Open Office Chart : saving;documents in other formats
+Oracle Open Office Chart : saving;documents, automatically
+Oracle Open Office Chart : saving;in Microsoft Office file format
+Oracle Open Office Chart : saving;options
+Oracle Open Office Chart : saving;templates
+Oracle Open Office Chart : saving;to XML
+Oracle Open Office Chart : saving;VBA code in Microsoft Office documents
+Oracle Open Office Chart : saving;with password by default
+Oracle Open Office Chart : saving as command
+Oracle Open Office Chart : saving as command;precautions
+Oracle Open Office Chart : scaling
+Oracle Open Office Chart : scaling;axes
+Oracle Open Office Chart : scaling;font sizes in user interface
+Oracle Open Office Chart : scaling;objects
+Oracle Open Office Chart : scaling;pictures
+Oracle Open Office Chart : scaling;printing in Oracle Open Office Math
+Oracle Open Office Chart : scaling;text in charts
+Oracle Open Office Chart : scaling;when printing presentations
+Oracle Open Office Chart : scaling, see also zooming
+Oracle Open Office Chart : scatter charts
+Oracle Open Office Chart : screen
+Oracle Open Office Chart : screen;full screen views
+Oracle Open Office Chart : screen;scaling
+Oracle Open Office Chart : screen magnifiers
+Oracle Open Office Chart : screen readers
+Oracle Open Office Chart : script organization
+Oracle Open Office Chart : scrollbars
+Oracle Open Office Chart : scrollbars;controls
+Oracle Open Office Chart : scrollbars;displaying (Calc)
+Oracle Open Office Chart : scrollbars;horizontal and vertical (Writer)
+Oracle Open Office Chart : search criteria for database functions in cells
+Oracle Open Office Chart : search engines
+Oracle Open Office Chart : search engines;definition
+Oracle Open Office Chart : search engines;selecting
+Oracle Open Office Chart : searching
+Oracle Open Office Chart : searching;all sheets
+Oracle Open Office Chart : searching;databases
+Oracle Open Office Chart : searching;form filters
+Oracle Open Office Chart : searching;Internet
+Oracle Open Office Chart : searching;tables and forms
+Oracle Open Office Chart : secondary axes in charts
+Oracle Open Office Chart : sections
+Oracle Open Office Chart : sections;backgrounds
+Oracle Open Office Chart : security
+Oracle Open Office Chart : security;digital signatures
+Oracle Open Office Chart : security;options for documents with macros
+Oracle Open Office Chart : security;protecting contents
+Oracle Open Office Chart : security;security levels for macros
+Oracle Open Office Chart : security;warning dialogs with macros
+Oracle Open Office Chart : selecting
+Oracle Open Office Chart : selecting;controls
+Oracle Open Office Chart : selecting;measurement units
+Oracle Open Office Chart : selecting;objects
+Oracle Open Office Chart : selecting;print areas
+Oracle Open Office Chart : selecting;several files
+Oracle Open Office Chart : selection clipboard
+Oracle Open Office Chart : selection frames
+Oracle Open Office Chart : selection modes in text
+Oracle Open Office Chart : sending
+Oracle Open Office Chart : sending;AutoAbstract function in presentations
+Oracle Open Office Chart : sending;documents as e-mail
+Oracle Open Office Chart : sending;documents as faxes
+Oracle Open Office Chart : separator lines
+Oracle Open Office Chart : separator lines;defining
+Oracle Open Office Chart : separators
+Oracle Open Office Chart : separators;conditional
+Oracle Open Office Chart : Server Side ImageMap
+Oracle Open Office Chart : settings
+Oracle Open Office Chart : settings;printers
+Oracle Open Office Chart : settings;program configuration
+Oracle Open Office Chart : settings;proxies
+Oracle Open Office Chart : settings;tracking changes
+Oracle Open Office Chart : settings;views
+Oracle Open Office Chart : SGML
+Oracle Open Office Chart : SGML;definition
+Oracle Open Office Chart : shadows
+Oracle Open Office Chart : shadows;areas
+Oracle Open Office Chart : shadows;borders
+Oracle Open Office Chart : shadows;characters
+Oracle Open Office Chart : shadows;characters, using context menu
+Oracle Open Office Chart : sharing documents
+Oracle Open Office Chart : sharpening filter
+Oracle Open Office Chart : sheet tabs
+Oracle Open Office Chart : sheet tabs;displaying
+Oracle Open Office Chart : sheets
+Oracle Open Office Chart : sheets;searching all
+Oracle Open Office Chart : shortcut keys
+Oracle Open Office Chart : shortcut keys;assigning macros
+Oracle Open Office Chart : shortcut keys;charts
+Oracle Open Office Chart : shortcut keys;general
+Oracle Open Office Chart : shortcut keys;in databases
+Oracle Open Office Chart : shortcut keys;Oracle Open Office accessibility
+Oracle Open Office Chart : showing
+Oracle Open Office Chart : showing;changes
+Oracle Open Office Chart : showing;docked windows
+Oracle Open Office Chart : showing;drawings and controls (Writer)
+Oracle Open Office Chart : showing;live presentations on the Internet
+Oracle Open Office Chart : showing;toolbars
+Oracle Open Office Chart : signing documents with digital signatures
+Oracle Open Office Chart : similarity search
+Oracle Open Office Chart : simple handles (Writer)
+Oracle Open Office Chart : simplified Chinese
+Oracle Open Office Chart : simplified Chinese;translating to traditional Chinese
+Oracle Open Office Chart : single sign on options
+Oracle Open Office Chart : single-line spacing in text
+Oracle Open Office Chart : sizes
+Oracle Open Office Chart : sizes;draw objects
+Oracle Open Office Chart : sizes;pictures
+Oracle Open Office Chart : slanting draw objects
+Oracle Open Office Chart : small capitals
+Oracle Open Office Chart : small icons
+Oracle Open Office Chart : smart tag configuration
+Oracle Open Office Chart : smooth scrolling (Writer)
+Oracle Open Office Chart : smoothing filter
+Oracle Open Office Chart : snap grid defaults (Writer/Calc)
+Oracle Open Office Chart : snapping in presentations and drawings
+Oracle Open Office Chart : solarization filter
+Oracle Open Office Chart : sort lists
+Oracle Open Office Chart : sort lists;copying to in Calc
+Oracle Open Office Chart : sorting
+Oracle Open Office Chart : sorting;data in forms
+Oracle Open Office Chart : sorting;databases
+Oracle Open Office Chart : sound files
+Oracle Open Office Chart : spaces
+Oracle Open Office Chart : spaces;displaying (Writer)
+Oracle Open Office Chart : spaces;ignoring double
+Oracle Open Office Chart : spaces;inserting protected spaces
+Oracle Open Office Chart : spaces;showing protected spaces (Writer)
+Oracle Open Office Chart : spacing
+Oracle Open Office Chart : spacing;between paragraphs in footnotes
+Oracle Open Office Chart : spacing;font effects
+Oracle Open Office Chart : spacing;lines and paragraphs
+Oracle Open Office Chart : spacing;tab stops in text documents
+Oracle Open Office Chart : spacing;tabs in presentations
+Oracle Open Office Chart : spadmin
+Oracle Open Office Chart : special characters
+Oracle Open Office Chart : speech bubbles
+Oracle Open Office Chart : speed of printing
+Oracle Open Office Chart : spellcheck
+Oracle Open Office Chart : spellcheck;activating for a language
+Oracle Open Office Chart : spellcheck;context menus
+Oracle Open Office Chart : spellcheck;default languages
+Oracle Open Office Chart : spellcheck;dialog
+Oracle Open Office Chart : spellcheck;dictionary of exceptions
+Oracle Open Office Chart : spellcheck;ignore list
+Oracle Open Office Chart : spin button creation
+Oracle Open Office Chart : spoolfiles with Xprinter
+Oracle Open Office Chart : spreadsheets
+Oracle Open Office Chart : spreadsheets;as databases (base)
+Oracle Open Office Chart : spreadsheets;copying areas to text documents
+Oracle Open Office Chart : spreadsheets;creating/opening
+Oracle Open Office Chart : spreadsheets;inserting charts
+Oracle Open Office Chart : spreadsheets;inserting database records
+Oracle Open Office Chart : spreadsheets;printing
+Oracle Open Office Chart : spreadsheets;saving
+Oracle Open Office Chart : spreadsheets;saving automatically
+Oracle Open Office Chart : spreadsheets;saving in other formats
+Oracle Open Office Chart : spreadsheets;sending as e-mail
+Oracle Open Office Chart : SQL
+Oracle Open Office Chart : SQL;definition
+Oracle Open Office Chart : SQL;DISTINCT parameter
+Oracle Open Office Chart : SQL;executing SQL commands
+Oracle Open Office Chart : SQL;executing SQL statements (Base)
+Oracle Open Office Chart : SQL;queries (Base)
+Oracle Open Office Chart : square drawings
+Oracle Open Office Chart : standard bar on/off
+Oracle Open Office Chart : standard deviation in charts
+Oracle Open Office Chart : standard filters in databases
+Oracle Open Office Chart : standard printer under UNIX
+Oracle Open Office Chart : start center
+Oracle Open Office Chart : start parameters
+Oracle Open Office Chart : statistics in charts
+Oracle Open Office Chart : status bar on/off
+Oracle Open Office Chart : stickers
+Oracle Open Office Chart : stock charts
+Oracle Open Office Chart : strikethrough
+Oracle Open Office Chart : strikethrough;characters
+Oracle Open Office Chart : strikethrough;font effects
+Oracle Open Office Chart : styles
+Oracle Open Office Chart : styles;'changed' message
+Oracle Open Office Chart : styles;copying between documents
+Oracle Open Office Chart : styles;keyboard shortcuts
+Oracle Open Office Chart : styles;organizing
+Oracle Open Office Chart : styles;printing styles used in a document
+Oracle Open Office Chart : styles;replacing automatically
+Oracle Open Office Chart : Styles and Formatting window
+Oracle Open Office Chart : Styles and Formatting window;docking
+Oracle Open Office Chart : subforms
+Oracle Open Office Chart : subforms;creating
+Oracle Open Office Chart : subforms;description
+Oracle Open Office Chart : submitting forms
+Oracle Open Office Chart : suffixes in file formats
+Oracle Open Office Chart : support on the Web
+Oracle Open Office Chart : synchronizing
+Oracle Open Office Chart : synchronizing;labels and business cards
+Oracle Open Office Chart : synchronizing;Pocket PC and Oracle Open Office formats
+Oracle Open Office Chart : system address book registration
+Oracle Open Office Chart : tab stops
+Oracle Open Office Chart : tab stops;displaying (Writer)
+Oracle Open Office Chart : tab stops;inserting and editing
+Oracle Open Office Chart : tab stops;regular expressions
+Oracle Open Office Chart : tab stops;setting in sheets
+Oracle Open Office Chart : tab stops;settings
+Oracle Open Office Chart : tab stops;spacing in presentations
+Oracle Open Office Chart : tab stops;spacing in text documents
+Oracle Open Office Chart : table controls
+Oracle Open Office Chart : table controls;form functions
+Oracle Open Office Chart : table controls;keyboard-only edit mode
+Oracle Open Office Chart : table controls;properties
+Oracle Open Office Chart : table views of databases
+Oracle Open Office Chart : Table Wizard (Base)
+Oracle Open Office Chart : tables
+Oracle Open Office Chart : tables;inserting line breaks
+Oracle Open Office Chart : tables in databases
+Oracle Open Office Chart : tables in databases;access rights to (Base)
+Oracle Open Office Chart : tables in databases;adding to queries
+Oracle Open Office Chart : tables in databases;browsing and editing
+Oracle Open Office Chart : tables in databases;copying database tables (Base)
+Oracle Open Office Chart : tables in databases;creating
+Oracle Open Office Chart : tables in databases;creating in design view (manually)
+Oracle Open Office Chart : tables in databases;importing text formats (Base)
+Oracle Open Office Chart : tables in databases;joining for queries (Base)
+Oracle Open Office Chart : tables in databases;printing queries (Base)
+Oracle Open Office Chart : tables in databases;relations (Base)
+Oracle Open Office Chart : tables in databases;searching
+Oracle Open Office Chart : tables in spreadsheets
+Oracle Open Office Chart : tables in spreadsheets;copying data to other applications
+Oracle Open Office Chart : tables in spreadsheets;defining borders
+Oracle Open Office Chart : tables in spreadsheets;value highlighting
+Oracle Open Office Chart : tables in text
+Oracle Open Office Chart : tables in text;captions
+Oracle Open Office Chart : tables in text;creating automatically
+Oracle Open Office Chart : tables in text;default settings
+Oracle Open Office Chart : tables in text;defining borders
+Oracle Open Office Chart : tables in text;displaying
+Oracle Open Office Chart : tables in text;printing
+Oracle Open Office Chart : tabs
+Oracle Open Office Chart : tabs;displaying sheet tabs
+Oracle Open Office Chart : tags
+Oracle Open Office Chart : tags;definition
+Oracle Open Office Chart : tags;META tags
+Oracle Open Office Chart : templates
+Oracle Open Office Chart : templates;agendas
+Oracle Open Office Chart : templates;changing basic fonts
+Oracle Open Office Chart : templates;database reports
+Oracle Open Office Chart : templates;deleting
+Oracle Open Office Chart : templates;editing and saving
+Oracle Open Office Chart : templates;faxes
+Oracle Open Office Chart : templates;importing and exporting
+Oracle Open Office Chart : templates;letters
+Oracle Open Office Chart : templates;new documents from templates
+Oracle Open Office Chart : templates;opening documents with
+Oracle Open Office Chart : templates;organizing
+Oracle Open Office Chart : terminology
+Oracle Open Office Chart : terminology;general glossary
+Oracle Open Office Chart : terminology;Internet glossary
+Oracle Open Office Chart : testing XML filters
+Oracle Open Office Chart : text
+Oracle Open Office Chart : text;animating
+Oracle Open Office Chart : text;Asian layout
+Oracle Open Office Chart : text;bold
+Oracle Open Office Chart : text;coloring
+Oracle Open Office Chart : text;copying by drag and drop
+Oracle Open Office Chart : text;CTL languages
+Oracle Open Office Chart : text;drawing pictures
+Oracle Open Office Chart : text;font effects
+Oracle Open Office Chart : text;font sizes
+Oracle Open Office Chart : text;font styles
+Oracle Open Office Chart : text;fonts and formats
+Oracle Open Office Chart : text;Fontwork icons
+Oracle Open Office Chart : text;hyperlinks
+Oracle Open Office Chart : text;inserting special characters
+Oracle Open Office Chart : text;italics
+Oracle Open Office Chart : text;kerning
+Oracle Open Office Chart : text;language selection
+Oracle Open Office Chart : text;line spacing
+Oracle Open Office Chart : text;overwriting or inserting
+Oracle Open Office Chart : text;printing in black
+Oracle Open Office Chart : text;replacing with format
+Oracle Open Office Chart : text;selection modes
+Oracle Open Office Chart : text;shadowed
+Oracle Open Office Chart : text;text/draw objects
+Oracle Open Office Chart : text attributes
+Oracle Open Office Chart : text attributes;hyperlinks
+Oracle Open Office Chart : text attributes;undoing
+Oracle Open Office Chart : text boxes
+Oracle Open Office Chart : text boxes;form functions
+Oracle Open Office Chart : text boxes;positioning
+Oracle Open Office Chart : text breaks in cells
+Oracle Open Office Chart : text colors for better accessibility
+Oracle Open Office Chart : text databases (Base)
+Oracle Open Office Chart : text documents
+Oracle Open Office Chart : text documents;creating/opening
+Oracle Open Office Chart : text documents;importing/exporting
+Oracle Open Office Chart : text documents;inserting spreadsheet cells
+Oracle Open Office Chart : text documents;print settings
+Oracle Open Office Chart : text documents;printing
+Oracle Open Office Chart : text documents;saving
+Oracle Open Office Chart : text documents;saving automatically
+Oracle Open Office Chart : text documents;saving in other formats
+Oracle Open Office Chart : text documents;sending as e-mail
+Oracle Open Office Chart : text effects
+Oracle Open Office Chart : text flow
+Oracle Open Office Chart : text flow;in cells
+Oracle Open Office Chart : text formats
+Oracle Open Office Chart : text formats;databases
+Oracle Open Office Chart : text formats;pasting
+Oracle Open Office Chart : text input fields
+Oracle Open Office Chart : text layout for special languages
+Oracle Open Office Chart : text objects
+Oracle Open Office Chart : text objects;alignment
+Oracle Open Office Chart : text objects;draw functions
+Oracle Open Office Chart : text objects;fonts
+Oracle Open Office Chart : text objects;in presentations and drawings
+Oracle Open Office Chart : text overflow in spreadsheet cells
+Oracle Open Office Chart : text scaling in charts
+Oracle Open Office Chart : text, see also text documents, paragraphs and characters
+Oracle Open Office Chart : TextArt, see Fontwork
+Oracle Open Office Chart : textures
+Oracle Open Office Chart : textures;inserting from Gallery
+Oracle Open Office Chart : textures;on chart bars
+Oracle Open Office Chart : Thai
+Oracle Open Office Chart : Thai;entering text
+Oracle Open Office Chart : Thai;language settings
+Oracle Open Office Chart : thesaurus
+Oracle Open Office Chart : thesaurus;activating for a language
+Oracle Open Office Chart : ticker text
+Oracle Open Office Chart : time fields
+Oracle Open Office Chart : time fields;form functions
+Oracle Open Office Chart : times
+Oracle Open Office Chart : times;inserting when printing presentations
+Oracle Open Office Chart : times, formats
+Oracle Open Office Chart : tips
+Oracle Open Office Chart : tips;extended tips in Help
+Oracle Open Office Chart : title rows
+Oracle Open Office Chart : title rows;printing in Oracle Open Office Math
+Oracle Open Office Chart : titles
+Oracle Open Office Chart : titles;alignment (charts)
+Oracle Open Office Chart : titles;changing
+Oracle Open Office Chart : titles;editing in charts
+Oracle Open Office Chart : titles;font effects
+Oracle Open Office Chart : titles;formatting automatically
+Oracle Open Office Chart : titles;formatting charts
+Oracle Open Office Chart : titles;objects
+Oracle Open Office Chart : toolbars
+Oracle Open Office Chart : toolbars;adding buttons
+Oracle Open Office Chart : toolbars;docking/undocking
+Oracle Open Office Chart : toolbars;Form Navigation bar
+Oracle Open Office Chart : toolbars;viewing/closing
+Oracle Open Office Chart : tools bar
+Oracle Open Office Chart : tooltips
+Oracle Open Office Chart : tooltips;extended tips
+Oracle Open Office Chart : tooltips;help
+Oracle Open Office Chart : traditional Chinese
+Oracle Open Office Chart : traditional Chinese;translating to simplified chinese
+Oracle Open Office Chart : transparency
+Oracle Open Office Chart : transparency;areas
+Oracle Open Office Chart : transparency;off for faster printing
+Oracle Open Office Chart : transparency;saving
+Oracle Open Office Chart : tree view of Help
+Oracle Open Office Chart : trend lines in charts
+Oracle Open Office Chart : typefaces
+Oracle Open Office Chart : typefaces;adding under UNIX
+Oracle Open Office Chart : typefaces;formats
+Oracle Open Office Chart : typography
+Oracle Open Office Chart : typography;Asian
+Oracle Open Office Chart : underlining
+Oracle Open Office Chart : underlining;AutoFormat function
+Oracle Open Office Chart : underlining;characters
+Oracle Open Office Chart : underlining;text
+Oracle Open Office Chart : undocking windows
+Oracle Open Office Chart : undoing
+Oracle Open Office Chart : undoing;direct formatting
+Oracle Open Office Chart : undoing;editing
+Oracle Open Office Chart : undoing;number of steps
+Oracle Open Office Chart : ungrouping groups
+Oracle Open Office Chart : units
+Oracle Open Office Chart : units;converting
+Oracle Open Office Chart : units;measurement units
+Oracle Open Office Chart : UNO components
+Oracle Open Office Chart : UNO components;Extension Manager
+Oracle Open Office Chart : UNO components;integrating new
+Oracle Open Office Chart : update options
+Oracle Open Office Chart : updates
+Oracle Open Office Chart : updates;checking automatically
+Oracle Open Office Chart : updates;checking manually
+Oracle Open Office Chart : updating
+Oracle Open Office Chart : updating;fields and charts, automatically (Writer)
+Oracle Open Office Chart : updating;links in text documents
+Oracle Open Office Chart : updating;links, on opening
+Oracle Open Office Chart : updating;templates
+Oracle Open Office Chart : URL
+Oracle Open Office Chart : URL;changing hyperlink URLs
+Oracle Open Office Chart : URL;definition
+Oracle Open Office Chart : URL;in pictures
+Oracle Open Office Chart : URL;saving absolute/relative paths
+Oracle Open Office Chart : URL;turning off URL recognition
+Oracle Open Office Chart : user data
+Oracle Open Office Chart : user data;input
+Oracle Open Office Chart : user data;removing when saving
+Oracle Open Office Chart : user feedback
+Oracle Open Office Chart : user feedback;automatically
+Oracle Open Office Chart : user-defined dictionaries
+Oracle Open Office Chart : user-defined dictionaries;creating
+Oracle Open Office Chart : user-defined dictionaries;dictionary of exceptions
+Oracle Open Office Chart : user-defined dictionaries;editing
+Oracle Open Office Chart : user-defined styles
+Oracle Open Office Chart : user-defined styles;automatically replacing
+Oracle Open Office Chart : UTF-8/UCS2 support
+Oracle Open Office Chart : values
+Oracle Open Office Chart : values;rounded as shown (Calc)
+Oracle Open Office Chart : variables
+Oracle Open Office Chart : variables;for paths
+Oracle Open Office Chart : variances in charts
+Oracle Open Office Chart : VBA code
+Oracle Open Office Chart : VBA code;loading/saving documents with VBA code
+Oracle Open Office Chart : version management
+Oracle Open Office Chart : version numbers of documents
+Oracle Open Office Chart : versions
+Oracle Open Office Chart : versions;comparing documents
+Oracle Open Office Chart : versions;file saving as, restriction
+Oracle Open Office Chart : versions;merging document versions
+Oracle Open Office Chart : versions;of a document
+Oracle Open Office Chart : versions;Oracle Open Office
+Oracle Open Office Chart : vertical callouts
+Oracle Open Office Chart : vertical scrollbars (Writer)
+Oracle Open Office Chart : vertical text boxes
+Oracle Open Office Chart : videos
+Oracle Open Office Chart : viewing
+Oracle Open Office Chart : viewing;databases
+Oracle Open Office Chart : viewing;file properties
+Oracle Open Office Chart : viewing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Chart : viewing;toolbars
+Oracle Open Office Chart : views
+Oracle Open Office Chart : views;creating database views (Base)
+Oracle Open Office Chart : views;defaults
+Oracle Open Office Chart : views;full screen
+Oracle Open Office Chart : views;icons
+Oracle Open Office Chart : views;scaling
+Oracle Open Office Chart : Visual Basic for Applications
+Oracle Open Office Chart : Visual Basic for Applications;loading/saving documents with VBA code
+Oracle Open Office Chart : watermarks
+Oracle Open Office Chart : web documents
+Oracle Open Office Chart : web documents;XForms
+Oracle Open Office Chart : Web support
+Oracle Open Office Chart : WebCast export
+Oracle Open Office Chart : WebDAV over HTTPS
+Oracle Open Office Chart : windows
+Oracle Open Office Chart : windows;docking
+Oracle Open Office Chart : windows;docking definition
+Oracle Open Office Chart : windows;hiding/showing/docking
+Oracle Open Office Chart : windows;new
+Oracle Open Office Chart : wizards
+Oracle Open Office Chart : wizards;agendas
+Oracle Open Office Chart : wizards;database queries
+Oracle Open Office Chart : wizards;database tables (Base)
+Oracle Open Office Chart : wizards;databases (Base)
+Oracle Open Office Chart : wizards;document converter
+Oracle Open Office Chart : wizards;Euro Converter
+Oracle Open Office Chart : wizards;faxes
+Oracle Open Office Chart : wizards;forms
+Oracle Open Office Chart : wizards;letters
+Oracle Open Office Chart : wizards;macros (Base)
+Oracle Open Office Chart : wizards;overview
+Oracle Open Office Chart : wizards;presentations
+Oracle Open Office Chart : wizards;reports
+Oracle Open Office Chart : Word documents
+Oracle Open Office Chart : Word documents;compatibility
+Oracle Open Office Chart : Word documents;saving as
+Oracle Open Office Chart : WordArt, see Fontwork
+Oracle Open Office Chart : words
+Oracle Open Office Chart : words;automatically replacing
+Oracle Open Office Chart : words;wrapping in cells
+Oracle Open Office Chart : words;wrapping in CTL
+Oracle Open Office Chart : working directory change
+Oracle Open Office Chart : wrapping text
+Oracle Open Office Chart : wrapping text;in cells
+Oracle Open Office Chart : write protection on/off
+Oracle Open Office Chart : writing aids options
+Oracle Open Office Chart : WYSIWYG in fonts lists
+Oracle Open Office Chart : X axes
+Oracle Open Office Chart : X axes;grid formatting
+Oracle Open Office Chart : X axes;positioning
+Oracle Open Office Chart : X axes;scaling
+Oracle Open Office Chart : X axes;showing
+Oracle Open Office Chart : XForms
+Oracle Open Office Chart : XForms;adding/editing/deleting/organizing namespaces
+Oracle Open Office Chart : XForms;conditions
+Oracle Open Office Chart : XForms;opening/editing
+Oracle Open Office Chart : XML converters
+Oracle Open Office Chart : XML file formats
+Oracle Open Office Chart : XML filters
+Oracle Open Office Chart : XML filters;creating/testing
+Oracle Open Office Chart : XML filters;saving as package/installing/deleting
+Oracle Open Office Chart : XML filters;settings
+Oracle Open Office Chart : XML Forms, see XForms
+Oracle Open Office Chart : XSLT filters, see also XML filters
+Oracle Open Office Chart : XY charts
+Oracle Open Office Chart : Y axes
+Oracle Open Office Chart : Y axes;formatting
+Oracle Open Office Chart : Y axes;grid formatting
+Oracle Open Office Chart : Y axes;positioning
+Oracle Open Office Chart : Y axes;scaling
+Oracle Open Office Chart : Y axes;showing
+Oracle Open Office Chart : years
+Oracle Open Office Chart : years;2-digit options
+Oracle Open Office Chart : Z axes
+Oracle Open Office Chart : Z axes;grid formatting
+Oracle Open Office Chart : Z axes;showing
+Oracle Open Office Chart : zero values
+Oracle Open Office Chart : zero values;displaying (Calc)
+Oracle Open Office Chart : zooming
+Oracle Open Office Chart : zooming;page views
+Oracle Open Office Chart : zooming;pictures
+Oracle Open Office Chart : zooming;status bar
+Oracle Open Office Impress : 3D charts
+Oracle Open Office Impress : 3D objects
+Oracle Open Office Impress : 3D objects;assembling
+Oracle Open Office Impress : 3D objects;generating
+Oracle Open Office Impress : 3D objects;inserting
+Oracle Open Office Impress : 3D rotation objects
+Oracle Open Office Impress : 3D rotation objects;converting to
+Oracle Open Office Impress : 3D rotation objects;generating
+Oracle Open Office Impress : 3D text creation
+Oracle Open Office Impress : abbreviation replacement
+Oracle Open Office Impress : absolute hyperlinks
+Oracle Open Office Impress : absolute saving of URLs
+Oracle Open Office Impress : accents
+Oracle Open Office Impress : Access databases (base)
+Oracle Open Office Impress : access rights for database tables (Base)
+Oracle Open Office Impress : accessibility
+Oracle Open Office Impress : accessibility;general shortcuts
+Oracle Open Office Impress : accessibility;options
+Oracle Open Office Impress : accessibility;Oracle Open Office assistive technology
+Oracle Open Office Impress : accessibility;Oracle Open Office Draw
+Oracle Open Office Impress : accessibility;Oracle Open Office features
+Oracle Open Office Impress : accessibility;Oracle Open Office Impress
+Oracle Open Office Impress : activating
+Oracle Open Office Impress : activating;context menus
+Oracle Open Office Impress : activating;Error Report Tool
+Oracle Open Office Impress : activating;extended help tips
+Oracle Open Office Impress : activating;plug-ins
+Oracle Open Office Impress : ActiveX control
+Oracle Open Office Impress : Adabas D databases (base)
+Oracle Open Office Impress : add-ons, see UNO components
+Oracle Open Office Impress : additional selection mode
+Oracle Open Office Impress : address books
+Oracle Open Office Impress : address books;LDAP server (Base)
+Oracle Open Office Impress : address books;registering
+Oracle Open Office Impress : address labels from databases
+Oracle Open Office Impress : ADO databases (Base)
+Oracle Open Office Impress : Agenda Wizard
+Oracle Open Office Impress : aging filter
+Oracle Open Office Impress : aligning
+Oracle Open Office Impress : aligning;2D charts
+Oracle Open Office Impress : aligning;cells
+Oracle Open Office Impress : aligning;draw objects
+Oracle Open Office Impress : aligning;objects
+Oracle Open Office Impress : aligning;paragraphs
+Oracle Open Office Impress : aligning;tables in text
+Oracle Open Office Impress : aligning;text objects
+Oracle Open Office Impress : aligning;titles in charts
+Oracle Open Office Impress : allowing
+Oracle Open Office Impress : allowing;effects
+Oracle Open Office Impress : allowing;interaction
+Oracle Open Office Impress : alternative fonts
+Oracle Open Office Impress : ampersand symbol, see also operators
+Oracle Open Office Impress : anchors
+Oracle Open Office Impress : anchors;changing
+Oracle Open Office Impress : anchors;displaying (Calc)
+Oracle Open Office Impress : anchors;types/positions for draw objects
+Oracle Open Office Impress : animated GIFs
+Oracle Open Office Impress : animated slide transitions
+Oracle Open Office Impress : animation effects
+Oracle Open Office Impress : animations
+Oracle Open Office Impress : animations;accessibility options
+Oracle Open Office Impress : animations;editing
+Oracle Open Office Impress : animations;list of
+Oracle Open Office Impress : animations;saving as GIFs
+Oracle Open Office Impress : appearance options
+Oracle Open Office Impress : Arabic
+Oracle Open Office Impress : Arabic;entering text
+Oracle Open Office Impress : Arabic;language settings
+Oracle Open Office Impress : area charts
+Oracle Open Office Impress : areas
+Oracle Open Office Impress : areas;bitmap patterns
+Oracle Open Office Impress : areas;from connected lines
+Oracle Open Office Impress : areas;hatched/dotted
+Oracle Open Office Impress : areas;shadows
+Oracle Open Office Impress : areas;slanting
+Oracle Open Office Impress : areas;styles
+Oracle Open Office Impress : areas;transparency
+Oracle Open Office Impress : arguments in command line
+Oracle Open Office Impress : arranging
+Oracle Open Office Impress : arranging;objects
+Oracle Open Office Impress : arranging;objects (guide)
+Oracle Open Office Impress : arranging;slides
+Oracle Open Office Impress : arrows
+Oracle Open Office Impress : arrows;defining arrow heads
+Oracle Open Office Impress : arrows;defining arrow lines
+Oracle Open Office Impress : arrows;drawing in text
+Oracle Open Office Impress : arrows;inserting
+Oracle Open Office Impress : arrows;loading arrow styles
+Oracle Open Office Impress : ASCII
+Oracle Open Office Impress : ASCII;definition
+Oracle Open Office Impress : Asian languages
+Oracle Open Office Impress : Asian languages;enabling
+Oracle Open Office Impress : Asian Phonetic Guide
+Oracle Open Office Impress : Asian typography
+Oracle Open Office Impress : assembled objects in 3D
+Oracle Open Office Impress : assigning scripts
+Oracle Open Office Impress : assistive technology in Oracle Open Office
+Oracle Open Office Impress : attaching toolbars
+Oracle Open Office Impress : attachments in e-mails
+Oracle Open Office Impress : attributes
+Oracle Open Office Impress : attributes;objects with
+Oracle Open Office Impress : audio
+Oracle Open Office Impress : authors
+Oracle Open Office Impress : auto reloading HTML documents
+Oracle Open Office Impress : AutoAbstract function for sending text to presentations
+Oracle Open Office Impress : AutoCaption function in Oracle Open Office Writer
+Oracle Open Office Impress : AutoComplete function in text and list boxes
+Oracle Open Office Impress : AutoCorrect function
+Oracle Open Office Impress : AutoCorrect function;context menu
+Oracle Open Office Impress : AutoCorrect function;options
+Oracle Open Office Impress : AutoCorrect function;pictures and frames
+Oracle Open Office Impress : AutoCorrect function;quotes
+Oracle Open Office Impress : AutoCorrect function;replacement table
+Oracle Open Office Impress : AutoCorrect function;switching on and off in Calc
+Oracle Open Office Impress : AutoCorrect function;URL recognition
+Oracle Open Office Impress : AutoFormat function
+Oracle Open Office Impress : AutoFormat function;switching on and off
+Oracle Open Office Impress : automatic captions (Writer)
+Oracle Open Office Impress : automatic control focus
+Oracle Open Office Impress : automatic hyperlink formatting
+Oracle Open Office Impress : automatic line breaks
+Oracle Open Office Impress : automatic lines/borders in text
+Oracle Open Office Impress : automatic saving
+Oracle Open Office Impress : automatic slide changes
+Oracle Open Office Impress : automatic slide changes;rehearse timings
+Oracle Open Office Impress : automatic slide shows
+Oracle Open Office Impress : automatic slide transition
+Oracle Open Office Impress : AutoPilots, see wizards
+Oracle Open Office Impress : AutoValue (Base)
+Oracle Open Office Impress : averages in charts
+Oracle Open Office Impress : axes
+Oracle Open Office Impress : axes;better scaling
+Oracle Open Office Impress : axes;formatting
+Oracle Open Office Impress : axes;formatting grids
+Oracle Open Office Impress : axes;inserting grids
+Oracle Open Office Impress : axes;interval marks
+Oracle Open Office Impress : axes;showing axes in charts
+Oracle Open Office Impress : axes in charts
+Oracle Open Office Impress : backgrounds
+Oracle Open Office Impress : backgrounds;changing
+Oracle Open Office Impress : backgrounds;defining colors/pictures
+Oracle Open Office Impress : backgrounds;deleting unused
+Oracle Open Office Impress : backgrounds;frames/sections/indexes
+Oracle Open Office Impress : backgrounds;inserting from Gallery
+Oracle Open Office Impress : backgrounds;normal view
+Oracle Open Office Impress : backgrounds;notes
+Oracle Open Office Impress : backgrounds;printing
+Oracle Open Office Impress : backgrounds;slides
+Oracle Open Office Impress : backing window
+Oracle Open Office Impress : backups
+Oracle Open Office Impress : backups;automatic
+Oracle Open Office Impress : backups;documents
+Oracle Open Office Impress : bar charts
+Oracle Open Office Impress : Basic
+Oracle Open Office Impress : Basic;fonts for source display
+Oracle Open Office Impress : Basic;programming
+Oracle Open Office Impress : Basic;recording macros
+Oracle Open Office Impress : basic fonts
+Oracle Open Office Impress : behind object command
+Oracle Open Office Impress : Bézier curves
+Oracle Open Office Impress : Bézier curves;control points in presentations
+Oracle Open Office Impress : bi-directional writing
+Oracle Open Office Impress : binding space
+Oracle Open Office Impress : bitmaps
+Oracle Open Office Impress : bitmaps;converting to
+Oracle Open Office Impress : bitmaps;converting to vector graphics
+Oracle Open Office Impress : bitmaps;inserting and editing
+Oracle Open Office Impress : bitmaps;off for faster printing
+Oracle Open Office Impress : bitmaps;patterns
+Oracle Open Office Impress : bitmaps;replacing colors
+Oracle Open Office Impress : black and white display
+Oracle Open Office Impress : black and white printing
+Oracle Open Office Impress : black and white view
+Oracle Open Office Impress : black printing in Calc
+Oracle Open Office Impress : block selection mode
+Oracle Open Office Impress : bold
+Oracle Open Office Impress : bold;AutoFormat function
+Oracle Open Office Impress : bold;text
+Oracle Open Office Impress : bookmarks
+Oracle Open Office Impress : bookmarks;Help
+Oracle Open Office Impress : borders
+Oracle Open Office Impress : borders;arranging
+Oracle Open Office Impress : borders;cells on screen (Calc)
+Oracle Open Office Impress : borders;for paragraphs
+Oracle Open Office Impress : borders;for tables
+Oracle Open Office Impress : borders;shadows
+Oracle Open Office Impress : borders;table boundaries (Writer)
+Oracle Open Office Impress : borders, see also frames
+Oracle Open Office Impress : bound fields
+Oracle Open Office Impress : bound fields;controls
+Oracle Open Office Impress : boundaries of tables (Writer)
+Oracle Open Office Impress : break display (Writer)
+Oracle Open Office Impress : breaking object connections
+Oracle Open Office Impress : brochures
+Oracle Open Office Impress : brochures;printing several
+Oracle Open Office Impress : bubble charts
+Oracle Open Office Impress : build numbers of Oracle Open Office
+Oracle Open Office Impress : bullet lists
+Oracle Open Office Impress : bullet lists;formatting options
+Oracle Open Office Impress : bullets
+Oracle Open Office Impress : bullets;paragraphs
+Oracle Open Office Impress : bullets;replacing
+Oracle Open Office Impress : bullets;turning off
+Oracle Open Office Impress : business cards
+Oracle Open Office Impress : business cards;creating and synchronizing
+Oracle Open Office Impress : business cards;using templates
+Oracle Open Office Impress : button bars, see toolbars
+Oracle Open Office Impress : buttons
+Oracle Open Office Impress : buttons;adding push buttons
+Oracle Open Office Impress : buttons;big/small
+Oracle Open Office Impress : buttons;editing hyperlink buttons
+Oracle Open Office Impress : buttons;form functions
+Oracle Open Office Impress : buttons;toolbars
+Oracle Open Office Impress : cache for graphics
+Oracle Open Office Impress : calculating
+Oracle Open Office Impress : calculating;iterative references (Calc)
+Oracle Open Office Impress : calculating;regression curves
+Oracle Open Office Impress : callouts
+Oracle Open Office Impress : callouts;drawings
+Oracle Open Office Impress : callouts;inserting in presentations
+Oracle Open Office Impress : capital letters
+Oracle Open Office Impress : capital letters;AutoCorrect function
+Oracle Open Office Impress : capital letters;font effects
+Oracle Open Office Impress : captions
+Oracle Open Office Impress : captions;automatic captions (Writer)
+Oracle Open Office Impress : captions;tables/pictures/frames/OLE objects (Writer)
+Oracle Open Office Impress : captions, see also labels/callouts
+Oracle Open Office Impress : cascading update (Base)
+Oracle Open Office Impress : case sensitivity
+Oracle Open Office Impress : case sensitivity;comparing cell contents (Calc)
+Oracle Open Office Impress : case sensitivity;searching
+Oracle Open Office Impress : cells
+Oracle Open Office Impress : cells;aligning
+Oracle Open Office Impress : cells;coloring (Calc)
+Oracle Open Office Impress : cells;cursor positions after input (Calc)
+Oracle Open Office Impress : cells;formatting without effect (Calc)
+Oracle Open Office Impress : cells;line breaks
+Oracle Open Office Impress : cells;linked to controls
+Oracle Open Office Impress : cells;number of
+Oracle Open Office Impress : cells;pasting
+Oracle Open Office Impress : cells;resetting formats
+Oracle Open Office Impress : cells;showing grid lines (Calc)
+Oracle Open Office Impress : centered text
+Oracle Open Office Impress : centimeters
+Oracle Open Office Impress : certificates
+Oracle Open Office Impress : changes
+Oracle Open Office Impress : changes;accepting or rejecting
+Oracle Open Office Impress : changes;comparing to original
+Oracle Open Office Impress : changes;protecting
+Oracle Open Office Impress : changes;recording
+Oracle Open Office Impress : changes;review function
+Oracle Open Office Impress : changes;showing
+Oracle Open Office Impress : changing
+Oracle Open Office Impress : changing;document titles
+Oracle Open Office Impress : changing;file associations in Setup program
+Oracle Open Office Impress : changing;icon sizes
+Oracle Open Office Impress : changing;layer properties
+Oracle Open Office Impress : changing;layout for handouts
+Oracle Open Office Impress : changing;links
+Oracle Open Office Impress : changing;order of slides
+Oracle Open Office Impress : changing;slide layouts
+Oracle Open Office Impress : changing;work directory
+Oracle Open Office Impress : changing, see also editing and replacing
+Oracle Open Office Impress : character styles
+Oracle Open Office Impress : character styles;language selection
+Oracle Open Office Impress : characters
+Oracle Open Office Impress : characters;alternative fonts
+Oracle Open Office Impress : characters;Asian layout
+Oracle Open Office Impress : characters;bold
+Oracle Open Office Impress : characters;coloring
+Oracle Open Office Impress : characters;converting to curves
+Oracle Open Office Impress : characters;displaying only on screen (Writer)
+Oracle Open Office Impress : characters;enabling CTL and Asian characters
+Oracle Open Office Impress : characters;font effects
+Oracle Open Office Impress : characters;fonts and formats
+Oracle Open Office Impress : characters;hyperlinks
+Oracle Open Office Impress : characters;italics
+Oracle Open Office Impress : characters;language selection
+Oracle Open Office Impress : characters;shadowed
+Oracle Open Office Impress : characters;spacing
+Oracle Open Office Impress : characters;special
+Oracle Open Office Impress : characters;underlining
+Oracle Open Office Impress : charcoal sketches filter
+Oracle Open Office Impress : chart legends
+Oracle Open Office Impress : chart legends;hiding
+Oracle Open Office Impress : chart legends;showing icons with labels
+Oracle Open Office Impress : chart types
+Oracle Open Office Impress : chart types;area
+Oracle Open Office Impress : chart types;bubble
+Oracle Open Office Impress : chart types;column and bar
+Oracle Open Office Impress : chart types;column and line
+Oracle Open Office Impress : chart types;line
+Oracle Open Office Impress : chart types;net
+Oracle Open Office Impress : chart types;pie/donut
+Oracle Open Office Impress : chart types;stock
+Oracle Open Office Impress : chart types;XY (scatter)
+Oracle Open Office Impress : charts
+Oracle Open Office Impress : charts;3D views
+Oracle Open Office Impress : charts;aligning
+Oracle Open Office Impress : charts;arranging within stacks
+Oracle Open Office Impress : charts;bars with textures
+Oracle Open Office Impress : charts;choosing chart types
+Oracle Open Office Impress : charts;colors
+Oracle Open Office Impress : charts;copying with link to source cell range
+Oracle Open Office Impress : charts;data labels
+Oracle Open Office Impress : charts;displaying (Calc)
+Oracle Open Office Impress : charts;editing axes
+Oracle Open Office Impress : charts;editing data
+Oracle Open Office Impress : charts;editing legends
+Oracle Open Office Impress : charts;editing titles
+Oracle Open Office Impress : charts;formatting areas
+Oracle Open Office Impress : charts;formatting floors
+Oracle Open Office Impress : charts;formatting walls
+Oracle Open Office Impress : charts;inserting
+Oracle Open Office Impress : charts;overview
+Oracle Open Office Impress : charts;positioning axes
+Oracle Open Office Impress : charts;properties
+Oracle Open Office Impress : charts;reorganizing
+Oracle Open Office Impress : charts;scaling axes
+Oracle Open Office Impress : charts;scaling text
+Oracle Open Office Impress : charts;shortcuts
+Oracle Open Office Impress : charts;showing axes
+Oracle Open Office Impress : charts;updating automatically (Writer)
+Oracle Open Office Impress : check box creation
+Oracle Open Office Impress : Chinese writing systems
+Oracle Open Office Impress : choosing printers
+Oracle Open Office Impress : circle drawings
+Oracle Open Office Impress : circle segments
+Oracle Open Office Impress : circles
+Oracle Open Office Impress : circles;of objects
+Oracle Open Office Impress : Client Side ImageMap
+Oracle Open Office Impress : clipboard
+Oracle Open Office Impress : clipboard;cutting
+Oracle Open Office Impress : clipboard;pasting
+Oracle Open Office Impress : clipboard;pasting formatted/unformatted text
+Oracle Open Office Impress : clipboard;selection clipboard
+Oracle Open Office Impress : clipboard;Unix
+Oracle Open Office Impress : closing
+Oracle Open Office Impress : closing;documents
+Oracle Open Office Impress : closing;shapes
+Oracle Open Office Impress : closing;toolbars
+Oracle Open Office Impress : collaboration
+Oracle Open Office Impress : color bar
+Oracle Open Office Impress : colors
+Oracle Open Office Impress : colors;adding
+Oracle Open Office Impress : colors;appearance
+Oracle Open Office Impress : colors;backgrounds
+Oracle Open Office Impress : colors;charts
+Oracle Open Office Impress : colors;default colors
+Oracle Open Office Impress : colors;defining and saving
+Oracle Open Office Impress : colors;defining gradients interactively
+Oracle Open Office Impress : colors;displaying presentations
+Oracle Open Office Impress : colors;fill format
+Oracle Open Office Impress : colors;fonts
+Oracle Open Office Impress : colors;grid lines and cells (Calc)
+Oracle Open Office Impress : colors;loading lists
+Oracle Open Office Impress : colors;models
+Oracle Open Office Impress : colors;not printing
+Oracle Open Office Impress : colors;printing in grayscale
+Oracle Open Office Impress : colors;replacing
+Oracle Open Office Impress : colors;restriction (Calc)
+Oracle Open Office Impress : colors;selection
+Oracle Open Office Impress : column and line charts
+Oracle Open Office Impress : column charts
+Oracle Open Office Impress : column headers
+Oracle Open Office Impress : column headers;displaying (Calc)
+Oracle Open Office Impress : column headers;highlighting (Calc)
+Oracle Open Office Impress : columns
+Oracle Open Office Impress : columns;inserting
+Oracle Open Office Impress : columns;setting with the mouse
+Oracle Open Office Impress : combination charts
+Oracle Open Office Impress : combining
+Oracle Open Office Impress : combining;3D objects
+Oracle Open Office Impress : combining;draw objects
+Oracle Open Office Impress : combining;undoing
+Oracle Open Office Impress : combo box creation
+Oracle Open Office Impress : command button creation
+Oracle Open Office Impress : command buttons, see push buttons
+Oracle Open Office Impress : command line parameters
+Oracle Open Office Impress : commands
+Oracle Open Office Impress : commands;repeating
+Oracle Open Office Impress : commands;SQL
+Oracle Open Office Impress : comments
+Oracle Open Office Impress : comments;displaying (Calc)
+Oracle Open Office Impress : comments;inserting/editing/deleting/printing
+Oracle Open Office Impress : comments;on changes
+Oracle Open Office Impress : comments;printing in text
+Oracle Open Office Impress : common terms
+Oracle Open Office Impress : common terms;Chinese dictionary
+Oracle Open Office Impress : common terms;glossaries
+Oracle Open Office Impress : common terms;Internet glossary
+Oracle Open Office Impress : comparisons
+Oracle Open Office Impress : comparisons;document versions
+Oracle Open Office Impress : comparisons;operators in default filter dialog
+Oracle Open Office Impress : compatibility settings for MS Word import
+Oracle Open Office Impress : complete screen view
+Oracle Open Office Impress : complex text layout
+Oracle Open Office Impress : complex text layout;definition
+Oracle Open Office Impress : complex text layout;enabling
+Oracle Open Office Impress : complex text layout, see CTL
+Oracle Open Office Impress : compose key to insert special characters
+Oracle Open Office Impress : concatenation, see ampersand symbol
+Oracle Open Office Impress : conditional separators
+Oracle Open Office Impress : conditions
+Oracle Open Office Impress : conditions;in number formats
+Oracle Open Office Impress : conditions;items in Data Navigator
+Oracle Open Office Impress : cones
+Oracle Open Office Impress : Configuration Manager
+Oracle Open Office Impress : configuring
+Oracle Open Office Impress : configuring;fax icon
+Oracle Open Office Impress : configuring;Oracle Open Office
+Oracle Open Office Impress : configuring;toolbars
+Oracle Open Office Impress : connecting
+Oracle Open Office Impress : connecting;draw objects
+Oracle Open Office Impress : connecting;lines
+Oracle Open Office Impress : connecting;paths and objects
+Oracle Open Office Impress : connections to data sources (Base)
+Oracle Open Office Impress : connectors
+Oracle Open Office Impress : connectors;properties of
+Oracle Open Office Impress : connectors;using
+Oracle Open Office Impress : constructing shapes
+Oracle Open Office Impress : contents protection
+Oracle Open Office Impress : context menus
+Oracle Open Office Impress : contours
+Oracle Open Office Impress : contours;converting to
+Oracle Open Office Impress : control point display in presentations
+Oracle Open Office Impress : control points definition
+Oracle Open Office Impress : controls
+Oracle Open Office Impress : controls;activating in forms
+Oracle Open Office Impress : controls;adding to documents
+Oracle Open Office Impress : controls;arranging in forms
+Oracle Open Office Impress : controls;arranging within stacks
+Oracle Open Office Impress : controls;assigning data sources
+Oracle Open Office Impress : controls;assigning macros (Basic)
+Oracle Open Office Impress : controls;bound fields/list contents/linked cells
+Oracle Open Office Impress : controls;events
+Oracle Open Office Impress : controls;focus
+Oracle Open Office Impress : controls;formatted fields
+Oracle Open Office Impress : controls;grouping
+Oracle Open Office Impress : controls;hidden
+Oracle Open Office Impress : controls;inserting
+Oracle Open Office Impress : controls;multi-line titles
+Oracle Open Office Impress : controls;positions and sizes
+Oracle Open Office Impress : controls;printing
+Oracle Open Office Impress : controls;properties of form controls
+Oracle Open Office Impress : controls;properties of table controls
+Oracle Open Office Impress : controls;reference by SQL
+Oracle Open Office Impress : controls;rich text control
+Oracle Open Office Impress : controls;select mode
+Oracle Open Office Impress : controls;showing (Writer)
+Oracle Open Office Impress : converters
+Oracle Open Office Impress : converters;Euro converter
+Oracle Open Office Impress : converters;PostScript, UNIX
+Oracle Open Office Impress : converters;XML
+Oracle Open Office Impress : converting
+Oracle Open Office Impress : converting;bitmaps to polygons
+Oracle Open Office Impress : converting;Hangul/Hanja
+Oracle Open Office Impress : converting;metrics
+Oracle Open Office Impress : converting;Microsoft documents
+Oracle Open Office Impress : converting;Oracle Open Office documents
+Oracle Open Office Impress : converting;Pocket PC formats
+Oracle Open Office Impress : converting;points
+Oracle Open Office Impress : converting;text to curves
+Oracle Open Office Impress : converting;to bitmaps
+Oracle Open Office Impress : converting;to contours
+Oracle Open Office Impress : converting;to curves, polygons, 3D
+Oracle Open Office Impress : converting;to metafile format (WMF)
+Oracle Open Office Impress : copies
+Oracle Open Office Impress : copies;printing
+Oracle Open Office Impress : copying
+Oracle Open Office Impress : copying;by drag and drop
+Oracle Open Office Impress : copying;data from text documents
+Oracle Open Office Impress : copying;datasource records in spreadsheets
+Oracle Open Office Impress : copying;draw objects
+Oracle Open Office Impress : copying;draw objects between documents
+Oracle Open Office Impress : copying;formatting
+Oracle Open Office Impress : copying;from data source view
+Oracle Open Office Impress : copying;from Gallery
+Oracle Open Office Impress : copying;in Unix
+Oracle Open Office Impress : copying;pictures, between documents
+Oracle Open Office Impress : copying;sheet areas, to text documents
+Oracle Open Office Impress : copying;slides
+Oracle Open Office Impress : copying;text from other documents
+Oracle Open Office Impress : copying;to Gallery
+Oracle Open Office Impress : copyright for Oracle Open Office
+Oracle Open Office Impress : corner points
+Oracle Open Office Impress : corner roundings
+Oracle Open Office Impress : covered objects
+Oracle Open Office Impress : crash reports
+Oracle Open Office Impress : criteria of query design (Base)
+Oracle Open Office Impress : cropping pictures
+Oracle Open Office Impress : cross-fading
+Oracle Open Office Impress : cross-fading;creating cross-fades
+Oracle Open Office Impress : cross-fading;slides
+Oracle Open Office Impress : cross-fading;two draw objects
+Oracle Open Office Impress : CTL
+Oracle Open Office Impress : CTL;(not) wrapping words
+Oracle Open Office Impress : CTL;complex text layout languages
+Oracle Open Office Impress : CTL;definition
+Oracle Open Office Impress : CTL;options
+Oracle Open Office Impress : cubes
+Oracle Open Office Impress : currencies
+Oracle Open Office Impress : currencies;converters
+Oracle Open Office Impress : currencies;format codes
+Oracle Open Office Impress : currency field creation
+Oracle Open Office Impress : currency formats
+Oracle Open Office Impress : cursor
+Oracle Open Office Impress : cursor;allowing in protected areas (Writer)
+Oracle Open Office Impress : cursor;in read-only text
+Oracle Open Office Impress : cursor;quickly moving to an object
+Oracle Open Office Impress : curves
+Oracle Open Office Impress : curves;converting text to
+Oracle Open Office Impress : curves;drawing
+Oracle Open Office Impress : curves;editing
+Oracle Open Office Impress : curves;editing points
+Oracle Open Office Impress : curves;properties in line charts/XY charts
+Oracle Open Office Impress : curves;toolbar
+Oracle Open Office Impress : custom animation
+Oracle Open Office Impress : custom colors
+Oracle Open Office Impress : custom dictionaries
+Oracle Open Office Impress : custom dictionaries;editing
+Oracle Open Office Impress : custom gradients
+Oracle Open Office Impress : custom hyphens (Writer)
+Oracle Open Office Impress : custom quotes
+Oracle Open Office Impress : custom slide shows
+Oracle Open Office Impress : custom templates
+Oracle Open Office Impress : customizing
+Oracle Open Office Impress : customizing;events
+Oracle Open Office Impress : customizing;keyboard
+Oracle Open Office Impress : customizing;menus
+Oracle Open Office Impress : customizing;Oracle Open Office
+Oracle Open Office Impress : customizing;round corners
+Oracle Open Office Impress : customizing;toolbars
+Oracle Open Office Impress : cutting
+Oracle Open Office Impress : cylinders
+Oracle Open Office Impress : dashes
+Oracle Open Office Impress : data
+Oracle Open Office Impress : data;filtering in forms
+Oracle Open Office Impress : data;forms and subforms
+Oracle Open Office Impress : data;read-only
+Oracle Open Office Impress : data;sorting in forms
+Oracle Open Office Impress : data;user data
+Oracle Open Office Impress : data binding change in XForms
+Oracle Open Office Impress : data labels in charts
+Oracle Open Office Impress : Data Navigator
+Oracle Open Office Impress : Data Navigator;adding/editing items
+Oracle Open Office Impress : Data Navigator;display options
+Oracle Open Office Impress : data ranges in charts
+Oracle Open Office Impress : data series
+Oracle Open Office Impress : data source browser
+Oracle Open Office Impress : data source explorer
+Oracle Open Office Impress : data source view
+Oracle Open Office Impress : data source view;drag and drop
+Oracle Open Office Impress : data source view;overview
+Oracle Open Office Impress : data source view;showing
+Oracle Open Office Impress : data sources
+Oracle Open Office Impress : data sources;as tables
+Oracle Open Office Impress : data sources;connection settings (Base)
+Oracle Open Office Impress : data sources;copying records to spreadsheets
+Oracle Open Office Impress : data sources;displaying current
+Oracle Open Office Impress : data sources;LDAP server (Base)
+Oracle Open Office Impress : data sources;Oracle Open Office Base
+Oracle Open Office Impress : data sources;registering address books
+Oracle Open Office Impress : data sources;reports
+Oracle Open Office Impress : data sources;setting for stock charts
+Oracle Open Office Impress : data sources;viewing
+Oracle Open Office Impress : data structure of XForms
+Oracle Open Office Impress : data values in charts
+Oracle Open Office Impress : data, see also values
+Oracle Open Office Impress : database contents
+Oracle Open Office Impress : database contents;inserting as tables
+Oracle Open Office Impress : database contents;inserting as text
+Oracle Open Office Impress : database reports
+Oracle Open Office Impress : Database Wizard (Base)
+Oracle Open Office Impress : databases
+Oracle Open Office Impress : databases;administration through SQL (Base)
+Oracle Open Office Impress : databases;ADO (Base)
+Oracle Open Office Impress : databases;connecting (Base)
+Oracle Open Office Impress : databases;creating
+Oracle Open Office Impress : databases;creating labels
+Oracle Open Office Impress : databases;creating queries
+Oracle Open Office Impress : databases;creating reports
+Oracle Open Office Impress : databases;creating tables
+Oracle Open Office Impress : databases;deleting (Base)
+Oracle Open Office Impress : databases;drag and drop (Base)
+Oracle Open Office Impress : databases;editing tables
+Oracle Open Office Impress : databases;form filters
+Oracle Open Office Impress : databases;formats (Base)
+Oracle Open Office Impress : databases;importing/exporting
+Oracle Open Office Impress : databases;JDBC (Base)
+Oracle Open Office Impress : databases;main page (Base)
+Oracle Open Office Impress : databases;ODBC (Base)
+Oracle Open Office Impress : databases;overview
+Oracle Open Office Impress : databases;registering (Base)
+Oracle Open Office Impress : databases;searching records
+Oracle Open Office Impress : databases;shortcut keys
+Oracle Open Office Impress : databases;sorting
+Oracle Open Office Impress : databases;standard filters
+Oracle Open Office Impress : databases;text formats
+Oracle Open Office Impress : databases;viewing
+Oracle Open Office Impress : date fields
+Oracle Open Office Impress : date fields;creating
+Oracle Open Office Impress : date fields;properties
+Oracle Open Office Impress : date formats
+Oracle Open Office Impress : date on all slides
+Oracle Open Office Impress : dates
+Oracle Open Office Impress : dates;default (Calc)
+Oracle Open Office Impress : dates;fixed
+Oracle Open Office Impress : dates;printing in presentations
+Oracle Open Office Impress : dates;start 1900/01/01 (Calc)
+Oracle Open Office Impress : dates;start 1904/01/01 (Calc)
+Oracle Open Office Impress : dates;variable
+Oracle Open Office Impress : dBASE
+Oracle Open Office Impress : dBASE;database settings (Base)
+Oracle Open Office Impress : DDE
+Oracle Open Office Impress : DDE;definition
+Oracle Open Office Impress : deactivating
+Oracle Open Office Impress : deactivating;plug-ins
+Oracle Open Office Impress : decimal places displayed (Calc)
+Oracle Open Office Impress : decimal separator key
+Oracle Open Office Impress : decimal tab stops
+Oracle Open Office Impress : decreasing sizes of views
+Oracle Open Office Impress : default directories
+Oracle Open Office Impress : default filters
+Oracle Open Office Impress : default filters;comparison operators
+Oracle Open Office Impress : default filters;databases
+Oracle Open Office Impress : default printer
+Oracle Open Office Impress : default printer;setting up
+Oracle Open Office Impress : default printer;UNIX
+Oracle Open Office Impress : default templates
+Oracle Open Office Impress : default templates;changing
+Oracle Open Office Impress : default templates;organizing
+Oracle Open Office Impress : defaults
+Oracle Open Office Impress : defaults;documents
+Oracle Open Office Impress : defaults;file formats in file dialogs
+Oracle Open Office Impress : defaults;file formats in Oracle Open Office
+Oracle Open Office Impress : defaults;fonts
+Oracle Open Office Impress : defaults;grids (Writer/Calc)
+Oracle Open Office Impress : defaults;languages
+Oracle Open Office Impress : defaults;number formats
+Oracle Open Office Impress : defaults;of saving
+Oracle Open Office Impress : defaults;program configuration
+Oracle Open Office Impress : defaults;tab stops in text
+Oracle Open Office Impress : defaults;views
+Oracle Open Office Impress : defining
+Oracle Open Office Impress : defining;arrowheads and other line ends
+Oracle Open Office Impress : defining;colors
+Oracle Open Office Impress : defining;gradients
+Oracle Open Office Impress : defining;line styles
+Oracle Open Office Impress : defining;paragraph borders
+Oracle Open Office Impress : defining;queries (Base)
+Oracle Open Office Impress : defining;table borders
+Oracle Open Office Impress : deleting
+Oracle Open Office Impress : deleting;all direct formatting
+Oracle Open Office Impress : deleting;animation effects
+Oracle Open Office Impress : deleting;comments
+Oracle Open Office Impress : deleting;databases (Base)
+Oracle Open Office Impress : deleting;hyperlinks
+Oracle Open Office Impress : deleting;layers
+Oracle Open Office Impress : deleting;lines in text
+Oracle Open Office Impress : deleting;models/instances
+Oracle Open Office Impress : deleting;namespaces in XForms
+Oracle Open Office Impress : deleting;points
+Oracle Open Office Impress : deleting;slide transition effects
+Oracle Open Office Impress : deleting;slides
+Oracle Open Office Impress : deleting;tab stops
+Oracle Open Office Impress : deleting;templates
+Oracle Open Office Impress : deleting;XML filters
+Oracle Open Office Impress : depth stagger
+Oracle Open Office Impress : descriptions for objects
+Oracle Open Office Impress : design mode after saving
+Oracle Open Office Impress : design view
+Oracle Open Office Impress : design view;creating forms
+Oracle Open Office Impress : design view;queries/views (Base)
+Oracle Open Office Impress : designing
+Oracle Open Office Impress : designing;database tables
+Oracle Open Office Impress : designing;fonts
+Oracle Open Office Impress : designing;queries (Base)
+Oracle Open Office Impress : detaching toolbars
+Oracle Open Office Impress : dictionaries
+Oracle Open Office Impress : dictionaries;common terms in simplified and traditional chinese
+Oracle Open Office Impress : dictionaries;creating
+Oracle Open Office Impress : dictionaries;editing user-defined
+Oracle Open Office Impress : dictionaries;spellcheck
+Oracle Open Office Impress : dictionaries, see also languages
+Oracle Open Office Impress : digital signatures
+Oracle Open Office Impress : digital signatures;getting/managing/applying
+Oracle Open Office Impress : digital signatures;overview
+Oracle Open Office Impress : digital signatures;WebDAV over HTTPS
+Oracle Open Office Impress : dimension lines
+Oracle Open Office Impress : dimension lines;drawing
+Oracle Open Office Impress : dimension lines;properties of
+Oracle Open Office Impress : direct formatting
+Oracle Open Office Impress : direct formatting;undoing all
+Oracle Open Office Impress : directories
+Oracle Open Office Impress : directories;creating new
+Oracle Open Office Impress : directories;directory structure
+Oracle Open Office Impress : disabled persons
+Oracle Open Office Impress : display qualities of presentations
+Oracle Open Office Impress : displaying
+Oracle Open Office Impress : displaying;comments (Calc)
+Oracle Open Office Impress : displaying;comments in text documents
+Oracle Open Office Impress : displaying;non-printing characters (Writer)
+Oracle Open Office Impress : displaying;pictures and objects (Writer)
+Oracle Open Office Impress : displaying;tables (Writer)
+Oracle Open Office Impress : displaying;zero values (Calc)
+Oracle Open Office Impress : distances
+Oracle Open Office Impress : distinct values in SQL queries
+Oracle Open Office Impress : distorting in drawings
+Oracle Open Office Impress : distorting objects
+Oracle Open Office Impress : distributing draw objects
+Oracle Open Office Impress : distributing XML filters
+Oracle Open Office Impress : docking
+Oracle Open Office Impress : docking;definition
+Oracle Open Office Impress : docking;toolbars
+Oracle Open Office Impress : docking;windows
+Oracle Open Office Impress : Document Converter Wizard
+Oracle Open Office Impress : Document Map, see Navigator
+Oracle Open Office Impress : document types in Oracle Open Office
+Oracle Open Office Impress : documents
+Oracle Open Office Impress : documents;changing titles
+Oracle Open Office Impress : documents;closing
+Oracle Open Office Impress : documents;comparing
+Oracle Open Office Impress : documents;contents as lists
+Oracle Open Office Impress : documents;editing time
+Oracle Open Office Impress : documents;exporting
+Oracle Open Office Impress : documents;importing
+Oracle Open Office Impress : documents;languages
+Oracle Open Office Impress : documents;measurement units in
+Oracle Open Office Impress : documents;merging
+Oracle Open Office Impress : documents;number of pages/tables/sheets
+Oracle Open Office Impress : documents;opening
+Oracle Open Office Impress : documents;opening in design mode
+Oracle Open Office Impress : documents;opening with templates
+Oracle Open Office Impress : documents;organizing
+Oracle Open Office Impress : documents;printing
+Oracle Open Office Impress : documents;read-only
+Oracle Open Office Impress : documents;reloading
+Oracle Open Office Impress : documents;saving
+Oracle Open Office Impress : documents;saving automatically
+Oracle Open Office Impress : documents;saving in other formats
+Oracle Open Office Impress : documents;sending as e-mail
+Oracle Open Office Impress : documents;styles changed
+Oracle Open Office Impress : documents;version management
+Oracle Open Office Impress : documents;version numbers
+Oracle Open Office Impress : donut charts
+Oracle Open Office Impress : dotted areas
+Oracle Open Office Impress : double-line spacing in paragraphs
+Oracle Open Office Impress : double-line writing in Asian layout
+Oracle Open Office Impress : doubling draw objects
+Oracle Open Office Impress : drag and drop
+Oracle Open Office Impress : drag and drop;copying and pasting text
+Oracle Open Office Impress : drag and drop;data source view
+Oracle Open Office Impress : drag and drop;from Gallery to draw objects
+Oracle Open Office Impress : drag and drop;overview
+Oracle Open Office Impress : drag and drop;pictures
+Oracle Open Office Impress : drag and drop;to Gallery
+Oracle Open Office Impress : Draw instructions
+Oracle Open Office Impress : draw objects
+Oracle Open Office Impress : draw objects;adding/editing/copying
+Oracle Open Office Impress : draw objects;anchoring
+Oracle Open Office Impress : draw objects;arranging within stacks
+Oracle Open Office Impress : draw objects;combining
+Oracle Open Office Impress : draw objects;connecting lines to
+Oracle Open Office Impress : draw objects;converting text to
+Oracle Open Office Impress : draw objects;copying between documents
+Oracle Open Office Impress : draw objects;cross-fading two objects
+Oracle Open Office Impress : draw objects;displaying (Calc)
+Oracle Open Office Impress : draw objects;dropping Gallery pictures
+Oracle Open Office Impress : draw objects;duplicating
+Oracle Open Office Impress : draw objects;flipping
+Oracle Open Office Impress : draw objects;grouping
+Oracle Open Office Impress : draw objects;legends
+Oracle Open Office Impress : draw objects;positioning and resizing
+Oracle Open Office Impress : draw objects;protecting
+Oracle Open Office Impress : draw objects;rotating
+Oracle Open Office Impress : draw objects;slanting
+Oracle Open Office Impress : draw objects;text entry mode
+Oracle Open Office Impress : draw objects;text in
+Oracle Open Office Impress : drawing
+Oracle Open Office Impress : drawing;3D objects
+Oracle Open Office Impress : drawing;freeform lines
+Oracle Open Office Impress : drawing;lines
+Oracle Open Office Impress : drawing;sectors and segments
+Oracle Open Office Impress : Drawing bar
+Oracle Open Office Impress : drawing lines in text
+Oracle Open Office Impress : drawings
+Oracle Open Office Impress : drawings;creating/opening
+Oracle Open Office Impress : drawings;languages
+Oracle Open Office Impress : drawings;printing
+Oracle Open Office Impress : drawings;printing defaults
+Oracle Open Office Impress : drawings;printing in text documents
+Oracle Open Office Impress : drawings;saving
+Oracle Open Office Impress : drawings;saving automatically
+Oracle Open Office Impress : drawings;saving in other formats
+Oracle Open Office Impress : drawings;sending as e-mail
+Oracle Open Office Impress : drawings;shortcut keys
+Oracle Open Office Impress : drawings;showing (Writer)
+Oracle Open Office Impress : drawings;zoom function in
+Oracle Open Office Impress : drawings, see also draw objects
+Oracle Open Office Impress : drop-down lists in form functions
+Oracle Open Office Impress : duplicating draw objects
+Oracle Open Office Impress : e-mail attachments
+Oracle Open Office Impress : Edit File icon
+Oracle Open Office Impress : edit mode
+Oracle Open Office Impress : edit mode;after opening
+Oracle Open Office Impress : edit mode;through Enter key (Calc)
+Oracle Open Office Impress : Edit Points bar
+Oracle Open Office Impress : editing
+Oracle Open Office Impress : editing;chart axes
+Oracle Open Office Impress : editing;chart data
+Oracle Open Office Impress : editing;chart legends
+Oracle Open Office Impress : editing;chart titles
+Oracle Open Office Impress : editing;comments
+Oracle Open Office Impress : editing;curves
+Oracle Open Office Impress : editing;data binding of XForms
+Oracle Open Office Impress : editing;database tables and queries
+Oracle Open Office Impress : editing;draw objects
+Oracle Open Office Impress : editing;fields
+Oracle Open Office Impress : editing;Fontwork objects
+Oracle Open Office Impress : editing;gradients
+Oracle Open Office Impress : editing;guides and snap points
+Oracle Open Office Impress : editing;hyperlinks
+Oracle Open Office Impress : editing;menus
+Oracle Open Office Impress : editing;objects
+Oracle Open Office Impress : editing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Impress : editing;pictures
+Oracle Open Office Impress : editing;reports
+Oracle Open Office Impress : editing;shortcut keys
+Oracle Open Office Impress : editing;slide titles
+Oracle Open Office Impress : editing;tab stops
+Oracle Open Office Impress : editing;templates
+Oracle Open Office Impress : editing;titles
+Oracle Open Office Impress : editing;toolbars
+Oracle Open Office Impress : editing;undoing
+Oracle Open Office Impress : editing;XForms
+Oracle Open Office Impress : editing time of documents
+Oracle Open Office Impress : editors
+Oracle Open Office Impress : editors;formula editor
+Oracle Open Office Impress : editors;ImageMap editor
+Oracle Open Office Impress : effects
+Oracle Open Office Impress : effects;animated slide transitions
+Oracle Open Office Impress : effects;applying to/removing from objects
+Oracle Open Office Impress : effects;font positions
+Oracle Open Office Impress : effects;fonts
+Oracle Open Office Impress : effects;Fontwork icons
+Oracle Open Office Impress : effects;preview
+Oracle Open Office Impress : effects;sounds
+Oracle Open Office Impress : ellipses
+Oracle Open Office Impress : ellipses;segments
+Oracle Open Office Impress : ellipses;toolbars
+Oracle Open Office Impress : empty documents
+Oracle Open Office Impress : empty paragraph removal
+Oracle Open Office Impress : encryption of contents
+Oracle Open Office Impress : entering groups
+Oracle Open Office Impress : entering text from right to left
+Oracle Open Office Impress : equal sign, see also operators
+Oracle Open Office Impress : equations in formula editor
+Oracle Open Office Impress : error bars in charts
+Oracle Open Office Impress : error indicators in charts
+Oracle Open Office Impress : Error Report Tool
+Oracle Open Office Impress : Euro
+Oracle Open Office Impress : Euro;currency formats
+Oracle Open Office Impress : Euro;Euro Converter Wizard
+Oracle Open Office Impress : even/odd pages
+Oracle Open Office Impress : even/odd pages;printing
+Oracle Open Office Impress : events
+Oracle Open Office Impress : events;assigning scripts
+Oracle Open Office Impress : events;controls
+Oracle Open Office Impress : events;customizing
+Oracle Open Office Impress : events;in forms
+Oracle Open Office Impress : Excel
+Oracle Open Office Impress : Excel;saving as
+Oracle Open Office Impress : Excel;search criteria
+Oracle Open Office Impress : exceptions
+Oracle Open Office Impress : exceptions;user-defined dictionaries
+Oracle Open Office Impress : exchanging, see also replacing
+Oracle Open Office Impress : executing SQL commands
+Oracle Open Office Impress : exiting
+Oracle Open Office Impress : exiting;by clicking objects
+Oracle Open Office Impress : exiting;groups
+Oracle Open Office Impress : exiting;Oracle Open Office
+Oracle Open Office Impress : expanding
+Oracle Open Office Impress : expanding;slides
+Oracle Open Office Impress : expanding formatting (Calc)
+Oracle Open Office Impress : explorer of data sources
+Oracle Open Office Impress : export filters
+Oracle Open Office Impress : exporting
+Oracle Open Office Impress : exporting;animations to GIF format
+Oracle Open Office Impress : exporting;bitmaps
+Oracle Open Office Impress : exporting;HTML and text documents
+Oracle Open Office Impress : exporting;Microsoft Office documents with VBA code
+Oracle Open Office Impress : exporting;presentations to HTML
+Oracle Open Office Impress : exporting;spreadsheets to text format
+Oracle Open Office Impress : exporting;templates
+Oracle Open Office Impress : exporting;to foreign formats
+Oracle Open Office Impress : exporting;to HTML
+Oracle Open Office Impress : exporting;to Macromedia Flash format
+Oracle Open Office Impress : exporting;to Microsoft Office formats
+Oracle Open Office Impress : exporting;to PDF
+Oracle Open Office Impress : exporting;to PostScript format
+Oracle Open Office Impress : exporting;to XML
+Oracle Open Office Impress : exporting;XML files
+Oracle Open Office Impress : extended tips in Help
+Oracle Open Office Impress : extension mode in text
+Oracle Open Office Impress : extensions
+Oracle Open Office Impress : extensions;Extension Manager
+Oracle Open Office Impress : extensions;file formats
+Oracle Open Office Impress : external keys (Base)
+Oracle Open Office Impress : extrusion objects
+Oracle Open Office Impress : eyedropper tool
+Oracle Open Office Impress : faster printing
+Oracle Open Office Impress : faxes
+Oracle Open Office Impress : faxes;configuring Oracle Open Office
+Oracle Open Office Impress : faxes;fax programs/fax printers under UNIX
+Oracle Open Office Impress : faxes;selecting a fax machine
+Oracle Open Office Impress : faxes;sending
+Oracle Open Office Impress : faxes;wizards
+Oracle Open Office Impress : feedback
+Oracle Open Office Impress : feedback;automatically
+Oracle Open Office Impress : fields
+Oracle Open Office Impress : fields;authors
+Oracle Open Office Impress : fields;database tables
+Oracle Open Office Impress : fields;dates (fixed)
+Oracle Open Office Impress : fields;dates (variable)
+Oracle Open Office Impress : fields;displaying field codes (Writer)
+Oracle Open Office Impress : fields;editing
+Oracle Open Office Impress : fields;file names
+Oracle Open Office Impress : fields;formatted fields
+Oracle Open Office Impress : fields;formatting
+Oracle Open Office Impress : fields;in slides
+Oracle Open Office Impress : fields;page numbers
+Oracle Open Office Impress : fields;times (fixed)
+Oracle Open Office Impress : fields;times (variable)
+Oracle Open Office Impress : fields;updating automatically (Writer)
+Oracle Open Office Impress : file associations for Microsoft Office
+Oracle Open Office Impress : file filters
+Oracle Open Office Impress : file filters;mobile devices
+Oracle Open Office Impress : file filters;XML
+Oracle Open Office Impress : file formats
+Oracle Open Office Impress : file formats;changing Oracle Open Office defaults
+Oracle Open Office Impress : file formats;OpenDocument/XML
+Oracle Open Office Impress : file formats;saving always in other formats
+Oracle Open Office Impress : file selection button
+Oracle Open Office Impress : file sharing options for current document
+Oracle Open Office Impress : files
+Oracle Open Office Impress : files;filters and formats
+Oracle Open Office Impress : files;importing
+Oracle Open Office Impress : files;inserting
+Oracle Open Office Impress : files;inserting pictures
+Oracle Open Office Impress : files;opening
+Oracle Open Office Impress : files;properties
+Oracle Open Office Impress : files;saving
+Oracle Open Office Impress : files;saving automatically
+Oracle Open Office Impress : files;saving in other formats
+Oracle Open Office Impress : files;sending as e-mail
+Oracle Open Office Impress : files;version numbers
+Oracle Open Office Impress : files and folders in Oracle Open Office
+Oracle Open Office Impress : fill characters with tabulators
+Oracle Open Office Impress : fill colors for areas
+Oracle Open Office Impress : fill format mode
+Oracle Open Office Impress : fill format mode;styles
+Oracle Open Office Impress : fill patterns for areas
+Oracle Open Office Impress : filter conditions
+Oracle Open Office Impress : filter conditions;connecting
+Oracle Open Office Impress : filter conditions;in queries (Base)
+Oracle Open Office Impress : filtering
+Oracle Open Office Impress : filtering;data in databases
+Oracle Open Office Impress : filtering;data in forms
+Oracle Open Office Impress : filters
+Oracle Open Office Impress : filters;comparison operators
+Oracle Open Office Impress : filters;for import and export
+Oracle Open Office Impress : filters;Navigator
+Oracle Open Office Impress : filters;pictures
+Oracle Open Office Impress : filters;XML filter settings
+Oracle Open Office Impress : Find tab in Help
+Oracle Open Office Impress : finding
+Oracle Open Office Impress : finding;in all sheets
+Oracle Open Office Impress : finding;records in form documents
+Oracle Open Office Impress : finding;selections
+Oracle Open Office Impress : finding;similarity search
+Oracle Open Office Impress : fitting to pages
+Oracle Open Office Impress : fitting to pages;individual slides
+Oracle Open Office Impress : fitting to pages;print settings in Math
+Oracle Open Office Impress : fitting to pages;print settings in presentations
+Oracle Open Office Impress : fixed text
+Oracle Open Office Impress : fixed text;form functions
+Oracle Open Office Impress : fixing toolbars
+Oracle Open Office Impress : flipping around a flip line
+Oracle Open Office Impress : flipping draw objects
+Oracle Open Office Impress : floating frames in HTML documents
+Oracle Open Office Impress : floating text
+Oracle Open Office Impress : floating toolbars
+Oracle Open Office Impress : flowcharts
+Oracle Open Office Impress : focus of controls
+Oracle Open Office Impress : folder creation
+Oracle Open Office Impress : font lists
+Oracle Open Office Impress : font name box
+Oracle Open Office Impress : font sizes
+Oracle Open Office Impress : font sizes;bullets
+Oracle Open Office Impress : font sizes;relative changes
+Oracle Open Office Impress : font sizes;scaling on screen
+Oracle Open Office Impress : font sizes;text
+Oracle Open Office Impress : fonts
+Oracle Open Office Impress : fonts;adding under UNIX
+Oracle Open Office Impress : fonts;changing in templates
+Oracle Open Office Impress : fonts;colors
+Oracle Open Office Impress : fonts;default settings
+Oracle Open Office Impress : fonts;effects
+Oracle Open Office Impress : fonts;for HTML and Basic
+Oracle Open Office Impress : fonts;formats
+Oracle Open Office Impress : fonts;outlines
+Oracle Open Office Impress : fonts;positions in text
+Oracle Open Office Impress : fonts;shadows
+Oracle Open Office Impress : fonts;specifying several
+Oracle Open Office Impress : fonts;strikethrough
+Oracle Open Office Impress : fonts;styles
+Oracle Open Office Impress : fonts;text objects
+Oracle Open Office Impress : Fontwork icons
+Oracle Open Office Impress : footers
+Oracle Open Office Impress : footers;backgrounds
+Oracle Open Office Impress : footers;slide masters
+Oracle Open Office Impress : footers;slides
+Oracle Open Office Impress : form controls
+Oracle Open Office Impress : form controls;assigning macros
+Oracle Open Office Impress : form controls;protecting
+Oracle Open Office Impress : form controls;toolbars
+Oracle Open Office Impress : form fields
+Oracle Open Office Impress : form filters
+Oracle Open Office Impress : Form Navigator
+Oracle Open Office Impress : format codes
+Oracle Open Office Impress : format codes;numbers
+Oracle Open Office Impress : format filling printing in Oracle Open Office Math
+Oracle Open Office Impress : Format Paintbrush
+Oracle Open Office Impress : formats
+Oracle Open Office Impress : formats;Asian layout
+Oracle Open Office Impress : formats;fonts
+Oracle Open Office Impress : formats;maximizing page formats
+Oracle Open Office Impress : formats;number and currency formats
+Oracle Open Office Impress : formats;of currencies/date/time
+Oracle Open Office Impress : formats;on opening and saving
+Oracle Open Office Impress : formats;pasting in special formats
+Oracle Open Office Impress : formats;positions
+Oracle Open Office Impress : formats;tabulators
+Oracle Open Office Impress : formatted fields
+Oracle Open Office Impress : formatted fields;form functions
+Oracle Open Office Impress : formatted fields;properties
+Oracle Open Office Impress : formatting
+Oracle Open Office Impress : formatting;Asian typography
+Oracle Open Office Impress : formatting;axes in charts
+Oracle Open Office Impress : formatting;chart areas
+Oracle Open Office Impress : formatting;chart floors
+Oracle Open Office Impress : formatting;chart legends
+Oracle Open Office Impress : formatting;chart titles
+Oracle Open Office Impress : formatting;chart walls
+Oracle Open Office Impress : formatting;copying
+Oracle Open Office Impress : formatting;definition
+Oracle Open Office Impress : formatting;expanding (Calc)
+Oracle Open Office Impress : formatting;fields
+Oracle Open Office Impress : formatting;font effects
+Oracle Open Office Impress : formatting;hyperlinks
+Oracle Open Office Impress : formatting;pages
+Oracle Open Office Impress : formatting;printer metrics (Writer)
+Oracle Open Office Impress : formatting;slides
+Oracle Open Office Impress : formatting;slides headings
+Oracle Open Office Impress : formatting;undoing
+Oracle Open Office Impress : formatting;undoing when writing
+Oracle Open Office Impress : forms
+Oracle Open Office Impress : forms;browsing
+Oracle Open Office Impress : forms;Combo Box/List Box Wizard
+Oracle Open Office Impress : forms;creating
+Oracle Open Office Impress : forms;data
+Oracle Open Office Impress : forms;designing (Base)
+Oracle Open Office Impress : forms;events
+Oracle Open Office Impress : forms;filtering data
+Oracle Open Office Impress : forms;finding records
+Oracle Open Office Impress : forms;focus after opening
+Oracle Open Office Impress : forms;general information (Base)
+Oracle Open Office Impress : forms;grouping controls
+Oracle Open Office Impress : forms;HTML filters
+Oracle Open Office Impress : forms;inserting
+Oracle Open Office Impress : forms;Navigator
+Oracle Open Office Impress : forms;opening in design mode
+Oracle Open Office Impress : forms;properties
+Oracle Open Office Impress : forms;sorting data
+Oracle Open Office Impress : forms;subforms
+Oracle Open Office Impress : forms;wizards
+Oracle Open Office Impress : forms;XForms
+Oracle Open Office Impress : formula texts
+Oracle Open Office Impress : formula texts;printing in Oracle Open Office Math
+Oracle Open Office Impress : formulas
+Oracle Open Office Impress : formulas;new
+Oracle Open Office Impress : formulas;starting formula editor
+Oracle Open Office Impress : formulas in reports
+Oracle Open Office Impress : formulas in reports;editing
+Oracle Open Office Impress : forums and support
+Oracle Open Office Impress : frames
+Oracle Open Office Impress : frames;around paragraphs
+Oracle Open Office Impress : frames;around tables
+Oracle Open Office Impress : frames;AutoCorrect function
+Oracle Open Office Impress : frames;backgrounds
+Oracle Open Office Impress : frames;captions (Writer)
+Oracle Open Office Impress : frames;printing in Oracle Open Office Math
+Oracle Open Office Impress : frames;protecting
+Oracle Open Office Impress : frames;selection frames
+Oracle Open Office Impress : frames;text fitting to frames
+Oracle Open Office Impress : freeform lines
+Oracle Open Office Impress : freeform lines;draw functions
+Oracle Open Office Impress : freeform lines;drawing
+Oracle Open Office Impress : FTP
+Oracle Open Office Impress : FTP;opening documents
+Oracle Open Office Impress : FTP;saving documents
+Oracle Open Office Impress : full joins (Base)
+Oracle Open Office Impress : full screen view
+Oracle Open Office Impress : full-text search in Help
+Oracle Open Office Impress : functions in reports
+Oracle Open Office Impress : functions in reports;editing
+Oracle Open Office Impress : Gallery
+Oracle Open Office Impress : Gallery;adding pictures
+Oracle Open Office Impress : Gallery;dragging pictures to draw objects
+Oracle Open Office Impress : Gallery;hiding/showing
+Oracle Open Office Impress : Gallery;inserting pictures from
+Oracle Open Office Impress : geometric forms
+Oracle Open Office Impress : get method for form transmissions
+Oracle Open Office Impress : getting support
+Oracle Open Office Impress : GIF format
+Oracle Open Office Impress : GIF images
+Oracle Open Office Impress : GIF images;animating
+Oracle Open Office Impress : GIF images;replacing colors
+Oracle Open Office Impress : glossaries
+Oracle Open Office Impress : glossaries;common terms
+Oracle Open Office Impress : glossaries;Internet terms
+Oracle Open Office Impress : glue points
+Oracle Open Office Impress : glue points;using
+Oracle Open Office Impress : gradients
+Oracle Open Office Impress : gradients;applying and defining
+Oracle Open Office Impress : gradients;defining colors
+Oracle Open Office Impress : gradients;loading lists
+Oracle Open Office Impress : gradients;transparent
+Oracle Open Office Impress : gradients off for faster printing
+Oracle Open Office Impress : graphic objects, see draw objects
+Oracle Open Office Impress : graphical text art
+Oracle Open Office Impress : graphics
+Oracle Open Office Impress : graphics;cache
+Oracle Open Office Impress : graphics;protecting
+Oracle Open Office Impress : graphics, see also pictures
+Oracle Open Office Impress : grayscale display
+Oracle Open Office Impress : grayscale printing
+Oracle Open Office Impress : grid controls
+Oracle Open Office Impress : grid controls;form functions
+Oracle Open Office Impress : grids
+Oracle Open Office Impress : grids;defaults (Writer/Calc)
+Oracle Open Office Impress : grids;display options (Impress/Draw)
+Oracle Open Office Impress : grids;displaying lines (Calc)
+Oracle Open Office Impress : grids;formatting axes
+Oracle Open Office Impress : grids;inserting in charts
+Oracle Open Office Impress : group box creation
+Oracle Open Office Impress : grouping
+Oracle Open Office Impress : grouping;draw objects
+Oracle Open Office Impress : groups
+Oracle Open Office Impress : groups;entering/exiting/ungrouping
+Oracle Open Office Impress : groups;naming
+Oracle Open Office Impress : groups;of controls
+Oracle Open Office Impress : guides
+Oracle Open Office Impress : guides;display options (Impress/Draw)
+Oracle Open Office Impress : guides;displaying when moving objects (Impress)
+Oracle Open Office Impress : guides;editing
+Oracle Open Office Impress : guides;inserting
+Oracle Open Office Impress : guides;show snap lines icon
+Oracle Open Office Impress : guides;showing (Calc)
+Oracle Open Office Impress : guides;showing when moving frames (Writer)
+Oracle Open Office Impress : gutter
+Oracle Open Office Impress : half-spheres
+Oracle Open Office Impress : hand icon for moving slides
+Oracle Open Office Impress : handles
+Oracle Open Office Impress : handles;displaying (Writer)
+Oracle Open Office Impress : handles;large
+Oracle Open Office Impress : handles;scaling
+Oracle Open Office Impress : handles;showing simple/large handles (Calc)
+Oracle Open Office Impress : handles;simple
+Oracle Open Office Impress : handout printing
+Oracle Open Office Impress : Hangul/Hanja
+Oracle Open Office Impress : hatching
+Oracle Open Office Impress : hatching
+Oracle Open Office Impress : hatching;loading lists
+Oracle Open Office Impress : headers
+Oracle Open Office Impress : headers;backgrounds
+Oracle Open Office Impress : headers and footers
+Oracle Open Office Impress : headers and footers;master layouts
+Oracle Open Office Impress : headers and footers;slide masters
+Oracle Open Office Impress : headers and footers;slides
+Oracle Open Office Impress : headings
+Oracle Open Office Impress : headings;entering as text box
+Oracle Open Office Impress : Hebrew
+Oracle Open Office Impress : Hebrew;entering text
+Oracle Open Office Impress : Hebrew;language settings
+Oracle Open Office Impress : Help
+Oracle Open Office Impress : Help;bookmarks
+Oracle Open Office Impress : Help;extended tips on/off
+Oracle Open Office Impress : Help;full-text search
+Oracle Open Office Impress : Help;Help tips
+Oracle Open Office Impress : Help;keywords
+Oracle Open Office Impress : Help;navigation pane showing/hiding
+Oracle Open Office Impress : Help;style sheets
+Oracle Open Office Impress : Help;topics
+Oracle Open Office Impress : Help Agent
+Oracle Open Office Impress : Help Agent;help
+Oracle Open Office Impress : Help Agent;options
+Oracle Open Office Impress : Help tips
+Oracle Open Office Impress : Help tips;hiding
+Oracle Open Office Impress : hidden controls in Form Navigator
+Oracle Open Office Impress : hidden fields display (Writer)
+Oracle Open Office Impress : hidden pages
+Oracle Open Office Impress : hidden pages;printing in presentations
+Oracle Open Office Impress : hidden pages;showing
+Oracle Open Office Impress : hidden text
+Oracle Open Office Impress : hidden text;showing (Writer)
+Oracle Open Office Impress : hiding
+Oracle Open Office Impress : hiding;changes
+Oracle Open Office Impress : hiding;chart legends
+Oracle Open Office Impress : hiding;docked windows
+Oracle Open Office Impress : hiding;layers
+Oracle Open Office Impress : hiding;levels
+Oracle Open Office Impress : hiding;navigation pane in Help window
+Oracle Open Office Impress : hiding;slides
+Oracle Open Office Impress : hiding;subpoints
+Oracle Open Office Impress : high contrast mode
+Oracle Open Office Impress : Hindi
+Oracle Open Office Impress : Hindi;entering text
+Oracle Open Office Impress : Hindi;language settings
+Oracle Open Office Impress : horizontal scrollbars (Writer)
+Oracle Open Office Impress : hot spots in flowcharts
+Oracle Open Office Impress : hotspots
+Oracle Open Office Impress : HowTos for charts
+Oracle Open Office Impress : Howtos for Draw
+Oracle Open Office Impress : HTML
+Oracle Open Office Impress : HTML;definition
+Oracle Open Office Impress : HTML;export character set
+Oracle Open Office Impress : HTML;exporting from presentations
+Oracle Open Office Impress : HTML;fonts for source display
+Oracle Open Office Impress : HTML;importing into presentations
+Oracle Open Office Impress : HTML;importing META tags
+Oracle Open Office Impress : HTML;inserting files
+Oracle Open Office Impress : HTML;live presentations
+Oracle Open Office Impress : HTML documents
+Oracle Open Office Impress : HTML documents;auto reloading
+Oracle Open Office Impress : HTML documents;importing/exporting
+Oracle Open Office Impress : HTML documents;META tags in
+Oracle Open Office Impress : HTML documents;new
+Oracle Open Office Impress : HTML documents;source text
+Oracle Open Office Impress : hyperlinks
+Oracle Open Office Impress : hyperlinks;assigning macros
+Oracle Open Office Impress : hyperlinks;character formats
+Oracle Open Office Impress : hyperlinks;definition
+Oracle Open Office Impress : hyperlinks;deleting
+Oracle Open Office Impress : hyperlinks;editing
+Oracle Open Office Impress : hyperlinks;inserting
+Oracle Open Office Impress : hyperlinks;relative and absolute
+Oracle Open Office Impress : hyperlinks;turning off automatic recognition
+Oracle Open Office Impress : hyperlinks, see also links
+Oracle Open Office Impress : hyphenation
+Oracle Open Office Impress : hyphenation;activating for a language
+Oracle Open Office Impress : hyphenation;minimal number of characters
+Oracle Open Office Impress : hyphens
+Oracle Open Office Impress : hyphens;displaying custom (Writer)
+Oracle Open Office Impress : hyphens;inserting custom
+Oracle Open Office Impress : icon bars, see toolbars
+Oracle Open Office Impress : icon sizes
+Oracle Open Office Impress : ignore list for spellcheck
+Oracle Open Office Impress : illumination
+Oracle Open Office Impress : illumination;3D charts
+Oracle Open Office Impress : illustrations, see pictures
+Oracle Open Office Impress : image button creation
+Oracle Open Office Impress : image control creation
+Oracle Open Office Impress : ImageMap
+Oracle Open Office Impress : ImageMap;definition
+Oracle Open Office Impress : ImageMap;editor
+Oracle Open Office Impress : images
+Oracle Open Office Impress : images;ImageMap
+Oracle Open Office Impress : images;inserting
+Oracle Open Office Impress : images;inserting and editing bitmaps
+Oracle Open Office Impress : images, see also pictures
+Oracle Open Office Impress : IME
+Oracle Open Office Impress : IME;definition
+Oracle Open Office Impress : IME;showing/hiding
+Oracle Open Office Impress : import filters
+Oracle Open Office Impress : import restrictions for Microsoft Office
+Oracle Open Office Impress : importing
+Oracle Open Office Impress : importing;bitmaps
+Oracle Open Office Impress : importing;compatibility settings for text import
+Oracle Open Office Impress : importing;databases
+Oracle Open Office Impress : importing;documents in other formats
+Oracle Open Office Impress : importing;from XML
+Oracle Open Office Impress : importing;HTML and text documents
+Oracle Open Office Impress : importing;HTML with META tags
+Oracle Open Office Impress : importing;Microsoft Office documents with VBA code
+Oracle Open Office Impress : importing;presentations with HTML
+Oracle Open Office Impress : importing;tables in text format
+Oracle Open Office Impress : importing;templates
+Oracle Open Office Impress : improvement program
+Oracle Open Office Impress : in front of object command
+Oracle Open Office Impress : inches
+Oracle Open Office Impress : including spreadsheets
+Oracle Open Office Impress : increasing sizes of views
+Oracle Open Office Impress : Index tab in Help
+Oracle Open Office Impress : indexes
+Oracle Open Office Impress : indexes;backgrounds
+Oracle Open Office Impress : indexes;showing/hiding Help index tab
+Oracle Open Office Impress : indicator lines in text
+Oracle Open Office Impress : inner joins (Base)
+Oracle Open Office Impress : input method window
+Oracle Open Office Impress : insert mode for entering text
+Oracle Open Office Impress : inserting
+Oracle Open Office Impress : inserting;3D objects
+Oracle Open Office Impress : inserting;arrows
+Oracle Open Office Impress : inserting;buttons in toolbars
+Oracle Open Office Impress : inserting;callouts in presentations
+Oracle Open Office Impress : inserting;cell ranges from spreadsheets
+Oracle Open Office Impress : inserting;charts
+Oracle Open Office Impress : inserting;clipboard options
+Oracle Open Office Impress : inserting;columns
+Oracle Open Office Impress : inserting;comments
+Oracle Open Office Impress : inserting;data from text documents
+Oracle Open Office Impress : inserting;datasource records in spreadsheets
+Oracle Open Office Impress : inserting;drawings
+Oracle Open Office Impress : inserting;ellipses
+Oracle Open Office Impress : inserting;files
+Oracle Open Office Impress : inserting;floating frames
+Oracle Open Office Impress : inserting;Fontwork objects
+Oracle Open Office Impress : inserting;form fields
+Oracle Open Office Impress : inserting;headers/footers in all slides
+Oracle Open Office Impress : inserting;hyperlinks
+Oracle Open Office Impress : inserting;layers
+Oracle Open Office Impress : inserting;line breaks in cells
+Oracle Open Office Impress : inserting;lines
+Oracle Open Office Impress : inserting;movies/sounds
+Oracle Open Office Impress : inserting;new text tables defaults
+Oracle Open Office Impress : inserting;objects from files
+Oracle Open Office Impress : inserting;objects from Gallery
+Oracle Open Office Impress : inserting;OLE objects
+Oracle Open Office Impress : inserting;paragraph borders
+Oracle Open Office Impress : inserting;paragraph bullets
+Oracle Open Office Impress : inserting;pictures
+Oracle Open Office Impress : inserting;pictures in Gallery
+Oracle Open Office Impress : inserting;plug-ins
+Oracle Open Office Impress : inserting;polygons
+Oracle Open Office Impress : inserting;push buttons
+Oracle Open Office Impress : inserting;rectangles
+Oracle Open Office Impress : inserting;rows
+Oracle Open Office Impress : inserting;slides
+Oracle Open Office Impress : inserting;slides as links
+Oracle Open Office Impress : inserting;slides from files
+Oracle Open Office Impress : inserting;special characters
+Oracle Open Office Impress : inserting;tab stops
+Oracle Open Office Impress : inserting;text frames
+Oracle Open Office Impress : inserting;text in presentations
+Oracle Open Office Impress : inserting;textures on chart bars
+Oracle Open Office Impress : installing
+Oracle Open Office Impress : installing;ActiveX control
+Oracle Open Office Impress : installing;mobile device filters
+Oracle Open Office Impress : installing;UNO components
+Oracle Open Office Impress : installing;XML filters
+Oracle Open Office Impress : instructions
+Oracle Open Office Impress : instructions;general
+Oracle Open Office Impress : instructions;Oracle Open Office Draw
+Oracle Open Office Impress : instructions;Oracle Open Office Impress
+Oracle Open Office Impress : interactions
+Oracle Open Office Impress : interactions;hot spots
+Oracle Open Office Impress : interactions;objects in interactive presentations
+Oracle Open Office Impress : interactions;preview
+Oracle Open Office Impress : Internet
+Oracle Open Office Impress : Internet;checking for updates
+Oracle Open Office Impress : Internet;Internet Explorer for displaying Oracle Open Office documents
+Oracle Open Office Impress : Internet;presentations
+Oracle Open Office Impress : Internet;starting searches
+Oracle Open Office Impress : Internet glossary
+Oracle Open Office Impress : intersecting draw objects
+Oracle Open Office Impress : invert filter
+Oracle Open Office Impress : invisible areas
+Oracle Open Office Impress : italic text
+Oracle Open Office Impress : iterative references in spreadsheets
+Oracle Open Office Impress : Java
+Oracle Open Office Impress : Java;definition
+Oracle Open Office Impress : Java;setting options
+Oracle Open Office Impress : JDBC
+Oracle Open Office Impress : JDBC;databases (Base)
+Oracle Open Office Impress : JDBC;definition
+Oracle Open Office Impress : joining
+Oracle Open Office Impress : joining;3D objects
+Oracle Open Office Impress : joining;paragraphs
+Oracle Open Office Impress : joining;tables (Base)
+Oracle Open Office Impress : joins in databases (Base)
+Oracle Open Office Impress : justifying text
+Oracle Open Office Impress : kerning
+Oracle Open Office Impress : kerning;Asian texts
+Oracle Open Office Impress : kerning;definition
+Oracle Open Office Impress : kerning;in characters
+Oracle Open Office Impress : key fields for relations (Base)
+Oracle Open Office Impress : keyboard
+Oracle Open Office Impress : keyboard;assigning/editing shortcut keys
+Oracle Open Office Impress : keyboard;general commands
+Oracle Open Office Impress : keyboard;removing numbering
+Oracle Open Office Impress : keyboard;zooming
+Oracle Open Office Impress : keys
+Oracle Open Office Impress : keys;adding push buttons
+Oracle Open Office Impress : keys;primary keys (Base)
+Oracle Open Office Impress : kiosk export
+Oracle Open Office Impress : labels
+Oracle Open Office Impress : labels;creating and synchronizing
+Oracle Open Office Impress : labels;for charts
+Oracle Open Office Impress : labels;for draw objects
+Oracle Open Office Impress : labels;form functions
+Oracle Open Office Impress : labels;from databases
+Oracle Open Office Impress : labels, see also names/callouts
+Oracle Open Office Impress : languages
+Oracle Open Office Impress : languages;activating modules
+Oracle Open Office Impress : languages;Asian support
+Oracle Open Office Impress : languages;complex text layout
+Oracle Open Office Impress : languages;locale settings
+Oracle Open Office Impress : languages;selecting for text
+Oracle Open Office Impress : languages;setting options
+Oracle Open Office Impress : languages;spellcheck
+Oracle Open Office Impress : languages;spellchecking and formatting
+Oracle Open Office Impress : large handles (Writer)
+Oracle Open Office Impress : large icons
+Oracle Open Office Impress : layer arrangement
+Oracle Open Office Impress : layers
+Oracle Open Office Impress : layers;definition
+Oracle Open Office Impress : layers;deleting
+Oracle Open Office Impress : layers;inserting and editing
+Oracle Open Office Impress : layers;moving objects
+Oracle Open Office Impress : layers;renaming
+Oracle Open Office Impress : layers;working with
+Oracle Open Office Impress : layout
+Oracle Open Office Impress : layout;importing Word documents
+Oracle Open Office Impress : layout;pages
+Oracle Open Office Impress : layout;printing handouts
+Oracle Open Office Impress : LDAP server
+Oracle Open Office Impress : LDAP server;address books (Base)
+Oracle Open Office Impress : LDAP server;sign on options
+Oracle Open Office Impress : leading between paragraphs
+Oracle Open Office Impress : left alignment of paragraphs
+Oracle Open Office Impress : left joins (Base)
+Oracle Open Office Impress : legends
+Oracle Open Office Impress : legends;charts
+Oracle Open Office Impress : legends;draw objects
+Oracle Open Office Impress : legends;drawings
+Oracle Open Office Impress : legends;rounding corners
+Oracle Open Office Impress : Letter Wizard
+Oracle Open Office Impress : levels
+Oracle Open Office Impress : levels;depth stagger
+Oracle Open Office Impress : levels;hiding
+Oracle Open Office Impress : levels;macro security
+Oracle Open Office Impress : levels;showing
+Oracle Open Office Impress : limits of tables (Writer)
+Oracle Open Office Impress : line breaks
+Oracle Open Office Impress : line breaks;in cells
+Oracle Open Office Impress : line charts
+Oracle Open Office Impress : line spacing
+Oracle Open Office Impress : line spacing;context menu in paragraphs
+Oracle Open Office Impress : line spacing;paragraph
+Oracle Open Office Impress : line styles
+Oracle Open Office Impress : line styles;applying
+Oracle Open Office Impress : line styles;defining
+Oracle Open Office Impress : line styles;loading
+Oracle Open Office Impress : lines
+Oracle Open Office Impress : lines;about line ends
+Oracle Open Office Impress : lines;connecting objects
+Oracle Open Office Impress : lines;defining ends
+Oracle Open Office Impress : lines;draw functions
+Oracle Open Office Impress : lines;drawing
+Oracle Open Office Impress : lines;drawing in text
+Oracle Open Office Impress : lines;editing points
+Oracle Open Office Impress : lines;inserting
+Oracle Open Office Impress : lines;removing automatic lines
+Oracle Open Office Impress : lines of text
+Oracle Open Office Impress : lines of text;alignment
+Oracle Open Office Impress : links
+Oracle Open Office Impress : links;between cells and controls
+Oracle Open Office Impress : links;by drag and drop
+Oracle Open Office Impress : links;character formats
+Oracle Open Office Impress : links;definition
+Oracle Open Office Impress : links;editing hyperlinks
+Oracle Open Office Impress : links;inserting
+Oracle Open Office Impress : links;modifying
+Oracle Open Office Impress : links;opening files with
+Oracle Open Office Impress : links;relational databases (Base)
+Oracle Open Office Impress : links;turning off automatic recognition
+Oracle Open Office Impress : links;updating options (Writer)
+Oracle Open Office Impress : links;updating specific links
+Oracle Open Office Impress : list box creation
+Oracle Open Office Impress : lists
+Oracle Open Office Impress : lists;animations
+Oracle Open Office Impress : lists;data assigned to controls
+Oracle Open Office Impress : lists;registered databases (Base)
+Oracle Open Office Impress : lists;regular expressions
+Oracle Open Office Impress : live presentations on the Internet
+Oracle Open Office Impress : loading
+Oracle Open Office Impress : loading;arrow and line styles
+Oracle Open Office Impress : loading;colors/gradients/hatchings
+Oracle Open Office Impress : loading;documents
+Oracle Open Office Impress : loading;documents from other formats
+Oracle Open Office Impress : loading;HTML documents, automatically
+Oracle Open Office Impress : loading;Microsoft Office documents with VBA code
+Oracle Open Office Impress : loading;reloading
+Oracle Open Office Impress : loading;XML files
+Oracle Open Office Impress : locale settings
+Oracle Open Office Impress : locking layers
+Oracle Open Office Impress : logarithmic scaling along axes
+Oracle Open Office Impress : lowercase letters
+Oracle Open Office Impress : lowercase letters;font effects
+Oracle Open Office Impress : Macro Wizard (Base)
+Oracle Open Office Impress : Macromedia Flash export
+Oracle Open Office Impress : macros
+Oracle Open Office Impress : macros;assigning to events in forms
+Oracle Open Office Impress : macros;attaching new (Base)
+Oracle Open Office Impress : macros;in MS Office documents
+Oracle Open Office Impress : macros;interrupting
+Oracle Open Office Impress : macros;organizing
+Oracle Open Office Impress : macros;recording
+Oracle Open Office Impress : macros;running in presentations
+Oracle Open Office Impress : macros;security
+Oracle Open Office Impress : macros;security levels
+Oracle Open Office Impress : macros;security warning dialog
+Oracle Open Office Impress : macros;selecting security warnings
+Oracle Open Office Impress : magnetic lines in presentations
+Oracle Open Office Impress : magnifiers
+Oracle Open Office Impress : margins
+Oracle Open Office Impress : margins;pages
+Oracle Open Office Impress : margins;setting with the mouse
+Oracle Open Office Impress : margins;shadows
+Oracle Open Office Impress : marking changes
+Oracle Open Office Impress : marking, see selecting
+Oracle Open Office Impress : master layouts with headers and footers
+Oracle Open Office Impress : master pages, see slide masters
+Oracle Open Office Impress : master views
+Oracle Open Office Impress : Math formula editor
+Oracle Open Office Impress : mean value lines in charts
+Oracle Open Office Impress : measurement units
+Oracle Open Office Impress : measurement units;changing on rulers
+Oracle Open Office Impress : measurement units;converting
+Oracle Open Office Impress : measurement units;selecting
+Oracle Open Office Impress : Media Player window
+Oracle Open Office Impress : menus
+Oracle Open Office Impress : menus;activating context menus
+Oracle Open Office Impress : menus;assigning macros
+Oracle Open Office Impress : menus;customizing
+Oracle Open Office Impress : merging
+Oracle Open Office Impress : merging;documents
+Oracle Open Office Impress : merging;draw objects
+Oracle Open Office Impress : META tags
+Oracle Open Office Impress : metafiles
+Oracle Open Office Impress : metafiles;converting to
+Oracle Open Office Impress : metafiles;replacing colors
+Oracle Open Office Impress : metrics
+Oracle Open Office Impress : metrics;converting
+Oracle Open Office Impress : metrics;document formatting (Writer)
+Oracle Open Office Impress : metrics;in sheets
+Oracle Open Office Impress : Microsoft Office
+Oracle Open Office Impress : Microsoft Office;Access databases (base)
+Oracle Open Office Impress : Microsoft Office;as default file format
+Oracle Open Office Impress : Microsoft Office;document import restrictions
+Oracle Open Office Impress : Microsoft Office;feature comparisons
+Oracle Open Office Impress : Microsoft Office;importing password protected files
+Oracle Open Office Impress : Microsoft Office;importing Word documents
+Oracle Open Office Impress : Microsoft Office;importing/exporting VBA code
+Oracle Open Office Impress : Microsoft Office;new users information
+Oracle Open Office Impress : Microsoft Office;opening Microsoft documents
+Oracle Open Office Impress : Microsoft Office;reassigning document types
+Oracle Open Office Impress : migrating macros (Base)
+Oracle Open Office Impress : mirroring objects
+Oracle Open Office Impress : mobile device filters
+Oracle Open Office Impress : models in XForms
+Oracle Open Office Impress : modifying, see changing
+Oracle Open Office Impress : more controls
+Oracle Open Office Impress : mosaic filter
+Oracle Open Office Impress : motion paths
+Oracle Open Office Impress : mouse
+Oracle Open Office Impress : mouse;pointers when using drag and drop
+Oracle Open Office Impress : mouse;positioning
+Oracle Open Office Impress : movies
+Oracle Open Office Impress : moving
+Oracle Open Office Impress : moving;between layers
+Oracle Open Office Impress : moving;objects in slides
+Oracle Open Office Impress : moving;tab stops on ruler
+Oracle Open Office Impress : moving;toolbars
+Oracle Open Office Impress : moving;using guide lines in presentations
+Oracle Open Office Impress : MS ADO interface (Base)
+Oracle Open Office Impress : multi-line titles in forms
+Oracle Open Office Impress : multiple documents
+Oracle Open Office Impress : multiple documents;opening
+Oracle Open Office Impress : multiple monitors
+Oracle Open Office Impress : multiple selection
+Oracle Open Office Impress : multiplying draw objects
+Oracle Open Office Impress : music
+Oracle Open Office Impress : My Documents folder
+Oracle Open Office Impress : My Documents folder;changing work directory
+Oracle Open Office Impress : My Documents folder;opening
+Oracle Open Office Impress : MySQL databases (Base)
+Oracle Open Office Impress : names
+Oracle Open Office Impress : names;multi-line titles
+Oracle Open Office Impress : names;objects
+Oracle Open Office Impress : names, see also labels/callouts
+Oracle Open Office Impress : namespace organization in XForms
+Oracle Open Office Impress : native SQL (Base)
+Oracle Open Office Impress : navigating
+Oracle Open Office Impress : navigating;in documents
+Oracle Open Office Impress : Navigation bar
+Oracle Open Office Impress : Navigation bar;controls
+Oracle Open Office Impress : Navigation bar;forms
+Oracle Open Office Impress : Navigator
+Oracle Open Office Impress : Navigator;comments
+Oracle Open Office Impress : Navigator;contents as lists
+Oracle Open Office Impress : Navigator;docking
+Oracle Open Office Impress : Navigator;presentations
+Oracle Open Office Impress : Navigator;working with
+Oracle Open Office Impress : net charts
+Oracle Open Office Impress : network identity options
+Oracle Open Office Impress : new databases
+Oracle Open Office Impress : new documents
+Oracle Open Office Impress : new lines in cells
+Oracle Open Office Impress : new windows
+Oracle Open Office Impress : non-breaking dashes
+Oracle Open Office Impress : non-breaking spaces (Writer)
+Oracle Open Office Impress : non-printing characters (Writer)
+Oracle Open Office Impress : normal view
+Oracle Open Office Impress : normal view;backgrounds
+Oracle Open Office Impress : normal view;presentations
+Oracle Open Office Impress : notes
+Oracle Open Office Impress : notes;adding to slides
+Oracle Open Office Impress : notes;default formatting
+Oracle Open Office Impress : notes;printing in presentations
+Oracle Open Office Impress : number formats
+Oracle Open Office Impress : number formats;codes
+Oracle Open Office Impress : number formats;formats
+Oracle Open Office Impress : number formats;recognition in text tables
+Oracle Open Office Impress : number of pages
+Oracle Open Office Impress : number of sheets
+Oracle Open Office Impress : number of tables
+Oracle Open Office Impress : numbering
+Oracle Open Office Impress : numbering;options
+Oracle Open Office Impress : numbering;turning off
+Oracle Open Office Impress : numbering;using automatically
+Oracle Open Office Impress : numbers
+Oracle Open Office Impress : numbers;date, time and currency formats
+Oracle Open Office Impress : numerical fields in forms
+Oracle Open Office Impress : object bars
+Oracle Open Office Impress : object bars;editing glue points
+Oracle Open Office Impress : objects
+Oracle Open Office Impress : objects;aligning
+Oracle Open Office Impress : objects;always moveable (Impress/Draw)
+Oracle Open Office Impress : objects;arranging within stacks
+Oracle Open Office Impress : objects;behind object command
+Oracle Open Office Impress : objects;breaking connections
+Oracle Open Office Impress : objects;copying when moving in presentations
+Oracle Open Office Impress : objects;definition
+Oracle Open Office Impress : objects;displaying in spreadsheets
+Oracle Open Office Impress : objects;displaying in text documents
+Oracle Open Office Impress : objects;editing
+Oracle Open Office Impress : objects;effects
+Oracle Open Office Impress : objects;in front of object command
+Oracle Open Office Impress : objects;inserting from files
+Oracle Open Office Impress : objects;inserting from Gallery
+Oracle Open Office Impress : objects;inserting OLE objects
+Oracle Open Office Impress : objects;moving along paths
+Oracle Open Office Impress : objects;moving and resizing with mouse
+Oracle Open Office Impress : objects;moving in layers
+Oracle Open Office Impress : objects;moving in slides
+Oracle Open Office Impress : objects;naming
+Oracle Open Office Impress : objects;opening
+Oracle Open Office Impress : objects;properties of charts
+Oracle Open Office Impress : objects;quickly moving to
+Oracle Open Office Impress : objects;reversing
+Oracle Open Office Impress : objects;selecting
+Oracle Open Office Impress : objects;titles and descriptions
+Oracle Open Office Impress : objects;with attributes
+Oracle Open Office Impress : ODBC
+Oracle Open Office Impress : ODBC;database (Base)
+Oracle Open Office Impress : ODBC;definition
+Oracle Open Office Impress : ODF file formats
+Oracle Open Office Impress : Office
+Oracle Open Office Impress : Office;Microsoft Office and Oracle Open Office
+Oracle Open Office Impress : OLE
+Oracle Open Office Impress : OLE;definition
+Oracle Open Office Impress : OLE objects
+Oracle Open Office Impress : OLE objects;arranging within stacks
+Oracle Open Office Impress : OLE objects;captions (Writer)
+Oracle Open Office Impress : OLE objects;inserting
+Oracle Open Office Impress : OLE objects;number of
+Oracle Open Office Impress : OLE objects;protecting
+Oracle Open Office Impress : one and a half line spacing in text
+Oracle Open Office Impress : online feedback options
+Oracle Open Office Impress : online registration
+Oracle Open Office Impress : online update options
+Oracle Open Office Impress : online updates
+Oracle Open Office Impress : online updates;checking automatically
+Oracle Open Office Impress : online updates;checking manually
+Oracle Open Office Impress : OpenDocument file formats
+Oracle Open Office Impress : OpenGL
+Oracle Open Office Impress : OpenGL;definition
+Oracle Open Office Impress : opening
+Oracle Open Office Impress : opening;context menus
+Oracle Open Office Impress : opening;database files
+Oracle Open Office Impress : opening;dialog settings
+Oracle Open Office Impress : opening;documents
+Oracle Open Office Impress : opening;documents from other formats
+Oracle Open Office Impress : opening;documents on WebDAV server
+Oracle Open Office Impress : opening;files with links
+Oracle Open Office Impress : opening;files, with placeholders
+Oracle Open Office Impress : opening;forms
+Oracle Open Office Impress : opening;Microsoft Office files
+Oracle Open Office Impress : opening;mobile device documents
+Oracle Open Office Impress : opening;objects
+Oracle Open Office Impress : opening;reports
+Oracle Open Office Impress : opening;several files
+Oracle Open Office Impress : opening;XForms
+Oracle Open Office Impress : operators
+Oracle Open Office Impress : operators;default filters
+Oracle Open Office Impress : optional hyphens (Writer)
+Oracle Open Office Impress : options
+Oracle Open Office Impress : options;accessibility
+Oracle Open Office Impress : options;appearance
+Oracle Open Office Impress : options;compatibility (Writer)
+Oracle Open Office Impress : options;improvement program
+Oracle Open Office Impress : options;network identity
+Oracle Open Office Impress : options;online update
+Oracle Open Office Impress : options;tools
+Oracle Open Office Impress : Oracle databases (base)
+Oracle Open Office Impress : Oracle Open Office Base data sources
+Oracle Open Office Impress : Oracle Open Office Basic scripts in HTML documents
+Oracle Open Office Impress : Oracle Open Office documents
+Oracle Open Office Impress : Oracle Open Office documents;mobile device filters
+Oracle Open Office Impress : Oracle Open Office documents;viewing and editing in Internet Explorer
+Oracle Open Office Impress : Oracle Open Office Impress instructions
+Oracle Open Office Impress : Oracle Open Office Math start
+Oracle Open Office Impress : order of chart data
+Oracle Open Office Impress : ordering
+Oracle Open Office Impress : ordering;objects
+Oracle Open Office Impress : ordering;slides
+Oracle Open Office Impress : ordinal numbers
+Oracle Open Office Impress : ordinal numbers;replacing
+Oracle Open Office Impress : organization charts
+Oracle Open Office Impress : organizing
+Oracle Open Office Impress : organizing;macros and scripts
+Oracle Open Office Impress : organizing;namespaces in XForms
+Oracle Open Office Impress : organizing;styles
+Oracle Open Office Impress : organizing;templates
+Oracle Open Office Impress : origin of rulers
+Oracle Open Office Impress : original size
+Oracle Open Office Impress : original size;printing in Oracle Open Office Math
+Oracle Open Office Impress : original size;restoring after cropping
+Oracle Open Office Impress : outline view
+Oracle Open Office Impress : outlines
+Oracle Open Office Impress : outlines;font effects
+Oracle Open Office Impress : outlines;outline symbols
+Oracle Open Office Impress : outlines;printing
+Oracle Open Office Impress : outlines;sending to presentations
+Oracle Open Office Impress : overwrite mode
+Oracle Open Office Impress : packages, see extensions
+Oracle Open Office Impress : page breaks
+Oracle Open Office Impress : page breaks;displaying (Calc)
+Oracle Open Office Impress : page formats
+Oracle Open Office Impress : page formats;maximizing
+Oracle Open Office Impress : page formats;restriction
+Oracle Open Office Impress : page number field
+Oracle Open Office Impress : page numbers on all slides
+Oracle Open Office Impress : page styles
+Oracle Open Office Impress : page styles;editing/applying with statusbar
+Oracle Open Office Impress : pages
+Oracle Open Office Impress : pages;backgrounds in all applications
+Oracle Open Office Impress : pages;copying
+Oracle Open Office Impress : pages;fitting to printed pages
+Oracle Open Office Impress : pages;formatting and numbering
+Oracle Open Office Impress : pages;printing page names in presentations
+Oracle Open Office Impress : pages;scaling
+Oracle Open Office Impress : pages;selecting one to print
+Oracle Open Office Impress : paint box
+Oracle Open Office Impress : paint can symbol
+Oracle Open Office Impress : pair kerning
+Oracle Open Office Impress : Palm file filters
+Oracle Open Office Impress : paper formats
+Oracle Open Office Impress : paper size warning
+Oracle Open Office Impress : paper trays
+Oracle Open Office Impress : paragraph marks
+Oracle Open Office Impress : paragraph marks;displaying (Writer)
+Oracle Open Office Impress : paragraph styles
+Oracle Open Office Impress : paragraph styles;languages
+Oracle Open Office Impress : paragraph styles;modifying basic fonts
+Oracle Open Office Impress : paragraphs
+Oracle Open Office Impress : paragraphs;alignment
+Oracle Open Office Impress : paragraphs;Asian typography
+Oracle Open Office Impress : paragraphs;defining borders
+Oracle Open Office Impress : paragraphs;hidden paragraphs (Writer)
+Oracle Open Office Impress : paragraphs;increasing indents of
+Oracle Open Office Impress : paragraphs;indents, margins and columns
+Oracle Open Office Impress : paragraphs;inserting bullets
+Oracle Open Office Impress : paragraphs;joining
+Oracle Open Office Impress : paragraphs;numbering automatically
+Oracle Open Office Impress : paragraphs;removing blank ones
+Oracle Open Office Impress : paragraphs;spacing
+Oracle Open Office Impress : paragraphs;tab stops
+Oracle Open Office Impress : parameters
+Oracle Open Office Impress : parameters;command line
+Oracle Open Office Impress : parameters;queries (Base)
+Oracle Open Office Impress : passwords for protecting contents
+Oracle Open Office Impress : pasting
+Oracle Open Office Impress : pasting;cell ranges
+Oracle Open Office Impress : pasting;cell ranges from spreadsheets
+Oracle Open Office Impress : pasting;data from text documents
+Oracle Open Office Impress : pasting;draw objects
+Oracle Open Office Impress : pasting;draw objects from other documents
+Oracle Open Office Impress : pasting;formatted/unformatted text
+Oracle Open Office Impress : pasting;from data source view
+Oracle Open Office Impress : pasting;from data sources to Oracle Open Office Calc
+Oracle Open Office Impress : pasting;pictures from other documents
+Oracle Open Office Impress : pasting;sheet areas in text documents
+Oracle Open Office Impress : pasting;slides from other presentations
+Oracle Open Office Impress : pasting;text from other documents
+Oracle Open Office Impress : pasting;to Gallery
+Oracle Open Office Impress : paths
+Oracle Open Office Impress : paths;changing work directory
+Oracle Open Office Impress : paths;defaults
+Oracle Open Office Impress : paths;moving objects along
+Oracle Open Office Impress : pattern editor
+Oracle Open Office Impress : pattern fields
+Oracle Open Office Impress : pattern fields;form functions
+Oracle Open Office Impress : patterns for objects
+Oracle Open Office Impress : PDF
+Oracle Open Office Impress : PDF;export
+Oracle Open Office Impress : PDF;PostScript to PDF converter, UNIX
+Oracle Open Office Impress : personal data input
+Oracle Open Office Impress : phonetic guide
+Oracle Open Office Impress : picklist creation
+Oracle Open Office Impress : pictures
+Oracle Open Office Impress : pictures;adding to Gallery
+Oracle Open Office Impress : pictures;arranging within stacks
+Oracle Open Office Impress : pictures;assigning macros
+Oracle Open Office Impress : pictures;backgrounds
+Oracle Open Office Impress : pictures;captions (Writer)
+Oracle Open Office Impress : pictures;changing paths
+Oracle Open Office Impress : pictures;cropping and zooming
+Oracle Open Office Impress : pictures;displaying in Calc
+Oracle Open Office Impress : pictures;displaying in Writer (Writer)
+Oracle Open Office Impress : pictures;drag and drop between documents
+Oracle Open Office Impress : pictures;drawing
+Oracle Open Office Impress : pictures;editing
+Oracle Open Office Impress : pictures;filters
+Oracle Open Office Impress : pictures;ImageMap
+Oracle Open Office Impress : pictures;inserting
+Oracle Open Office Impress : pictures;inserting automatically
+Oracle Open Office Impress : pictures;inserting from Gallery
+Oracle Open Office Impress : pictures;number of
+Oracle Open Office Impress : pictures;printing
+Oracle Open Office Impress : pictures;scaling/resizing
+Oracle Open Office Impress : pie charts
+Oracle Open Office Impress : pie charts;options
+Oracle Open Office Impress : pie charts;types
+Oracle Open Office Impress : pivot points of draw objects
+Oracle Open Office Impress : pixel editor
+Oracle Open Office Impress : pixel graphics
+Oracle Open Office Impress : pixel graphics;inserting and editing
+Oracle Open Office Impress : pixel patterns
+Oracle Open Office Impress : placeholders
+Oracle Open Office Impress : placeholders;in SQL queries
+Oracle Open Office Impress : placeholders;on opening files
+Oracle Open Office Impress : placing toolbars
+Oracle Open Office Impress : playing movies and sound files
+Oracle Open Office Impress : plotting data as charts
+Oracle Open Office Impress : plug-ins
+Oracle Open Office Impress : plug-ins;activating and deactivating
+Oracle Open Office Impress : plug-ins;definition
+Oracle Open Office Impress : plug-ins;inserting
+Oracle Open Office Impress : pocket device appliances
+Oracle Open Office Impress : Pocket PC file filters
+Oracle Open Office Impress : points
+Oracle Open Office Impress : points;adding/converting/deleting
+Oracle Open Office Impress : points;reducing editing points when snapping (Impress/Draw)
+Oracle Open Office Impress : polygon drawing
+Oracle Open Office Impress : polygons
+Oracle Open Office Impress : polygons;inserting
+Oracle Open Office Impress : polygons;intersecting/subtracting/merging
+Oracle Open Office Impress : pop-art filter
+Oracle Open Office Impress : portable document format
+Oracle Open Office Impress : positioning
+Oracle Open Office Impress : positioning;axes
+Oracle Open Office Impress : positioning;draw objects and controls
+Oracle Open Office Impress : positioning;fonts
+Oracle Open Office Impress : positioning;objects
+Oracle Open Office Impress : positioning;toolbars
+Oracle Open Office Impress : post method for form transmissions
+Oracle Open Office Impress : posterizing filter
+Oracle Open Office Impress : PostScript
+Oracle Open Office Impress : PostScript;creating files
+Oracle Open Office Impress : PostScript;PDF converter, UNIX
+Oracle Open Office Impress : PowerPoint export
+Oracle Open Office Impress : precision as shown (Calc)
+Oracle Open Office Impress : predefining fonts
+Oracle Open Office Impress : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
+Oracle Open Office Impress : presentations
+Oracle Open Office Impress : presentations;arranging slides
+Oracle Open Office Impress : presentations;creating/opening
+Oracle Open Office Impress : presentations;exiting by interaction
+Oracle Open Office Impress : presentations;exporting to HTML
+Oracle Open Office Impress : presentations;importing HTML
+Oracle Open Office Impress : presentations;inserting spreadsheet cells
+Oracle Open Office Impress : presentations;inserting spreadsheets
+Oracle Open Office Impress : presentations;live on the Internet
+Oracle Open Office Impress : presentations;navigating
+Oracle Open Office Impress : presentations;numbering slides in
+Oracle Open Office Impress : presentations;ordering of effects
+Oracle Open Office Impress : presentations;print menu
+Oracle Open Office Impress : presentations;printing
+Oracle Open Office Impress : presentations;rehearse timings
+Oracle Open Office Impress : presentations;saving
+Oracle Open Office Impress : presentations;saving automatically
+Oracle Open Office Impress : presentations;saving in other formats
+Oracle Open Office Impress : presentations;sending as e-mail
+Oracle Open Office Impress : presentations;settings for
+Oracle Open Office Impress : presentations;shortcut keys
+Oracle Open Office Impress : presentations;starting
+Oracle Open Office Impress : presentations;starting with wizard
+Oracle Open Office Impress : presentations;window / full screen
+Oracle Open Office Impress : presentations;wizards
+Oracle Open Office Impress : Presenter Console shortcuts
+Oracle Open Office Impress : press buttons, see push buttons
+Oracle Open Office Impress : previews
+Oracle Open Office Impress : previews;fonts lists
+Oracle Open Office Impress : primary keys
+Oracle Open Office Impress : primary keys;defining
+Oracle Open Office Impress : primary keys;design view
+Oracle Open Office Impress : primary keys;inserting (Base)
+Oracle Open Office Impress : print area selection
+Oracle Open Office Impress : printer metrics for document formatting (Writer)
+Oracle Open Office Impress : printers
+Oracle Open Office Impress : printers;adding, UNIX
+Oracle Open Office Impress : printers;choosing
+Oracle Open Office Impress : printers;default printer
+Oracle Open Office Impress : printers;faxes under UNIX
+Oracle Open Office Impress : printers;maximum page formats
+Oracle Open Office Impress : printers;paper trays
+Oracle Open Office Impress : printers;properties
+Oracle Open Office Impress : printing
+Oracle Open Office Impress : printing;black and white
+Oracle Open Office Impress : printing;brochures
+Oracle Open Office Impress : printing;colors in grayscale
+Oracle Open Office Impress : printing;comments
+Oracle Open Office Impress : printing;copies
+Oracle Open Office Impress : printing;creating individual jobs
+Oracle Open Office Impress : printing;dates in presentations
+Oracle Open Office Impress : printing;directly
+Oracle Open Office Impress : printing;documents
+Oracle Open Office Impress : printing;drawings defaults
+Oracle Open Office Impress : printing;elements in text documents
+Oracle Open Office Impress : printing;faster
+Oracle Open Office Impress : printing;fitting to pages in Oracle Open Office Math
+Oracle Open Office Impress : printing;fitting to pages in presentations
+Oracle Open Office Impress : printing;fitting to paper
+Oracle Open Office Impress : printing;formulas in Oracle Open Office Math
+Oracle Open Office Impress : printing;hidden pages of presentations
+Oracle Open Office Impress : printing;in original size in Oracle Open Office Math
+Oracle Open Office Impress : printing;left/right pages
+Oracle Open Office Impress : printing;presentations
+Oracle Open Office Impress : printing;queries (Base)
+Oracle Open Office Impress : printing;scaling in Oracle Open Office Math
+Oracle Open Office Impress : printing;selections
+Oracle Open Office Impress : printing;text always in black
+Oracle Open Office Impress : printing;text in reverse order
+Oracle Open Office Impress : printing;tiling pages in presentations
+Oracle Open Office Impress : printing;transparencies
+Oracle Open Office Impress : printing;warnings
+Oracle Open Office Impress : printing;without scaling in presentations
+Oracle Open Office Impress : printing speed
+Oracle Open Office Impress : programming
+Oracle Open Office Impress : programming;Oracle Open Office
+Oracle Open Office Impress : programming;scripting
+Oracle Open Office Impress : programs run by mouse click in presentations
+Oracle Open Office Impress : properties
+Oracle Open Office Impress : properties;charts
+Oracle Open Office Impress : properties;fields in databases
+Oracle Open Office Impress : properties;files
+Oracle Open Office Impress : properties;form controls
+Oracle Open Office Impress : properties;forms
+Oracle Open Office Impress : properties;printers
+Oracle Open Office Impress : properties;smooth lines in line charts/XY charts
+Oracle Open Office Impress : protected contents
+Oracle Open Office Impress : protected dashes
+Oracle Open Office Impress : protected database tables
+Oracle Open Office Impress : protected documents
+Oracle Open Office Impress : protected spaces
+Oracle Open Office Impress : protected spaces;inserting
+Oracle Open Office Impress : protected spaces;showing (Writer)
+Oracle Open Office Impress : protecting
+Oracle Open Office Impress : protecting;contents
+Oracle Open Office Impress : protecting;recorded changes
+Oracle Open Office Impress : proxy settings
+Oracle Open Office Impress : push buttons
+Oracle Open Office Impress : push buttons;adding to documents
+Oracle Open Office Impress : push buttons;creating
+Oracle Open Office Impress : pyramids
+Oracle Open Office Impress : queries
+Oracle Open Office Impress : queries;copying (Base)
+Oracle Open Office Impress : queries;creating in design view (Base)
+Oracle Open Office Impress : queries;creating in SQL view
+Oracle Open Office Impress : queries;defining (Base)
+Oracle Open Office Impress : queries;deleting table links (Base)
+Oracle Open Office Impress : queries;editing in data source view
+Oracle Open Office Impress : queries;formulating filter conditions (Base)
+Oracle Open Office Impress : queries;joining tables (Base)
+Oracle Open Office Impress : queries;missing elements (Base)
+Oracle Open Office Impress : queries;overview (Base)
+Oracle Open Office Impress : queries;parameter queries (Base)
+Oracle Open Office Impress : queries;printing (Base)
+Oracle Open Office Impress : Query Wizard (Base)
+Oracle Open Office Impress : Quickstarter
+Oracle Open Office Impress : quotes
+Oracle Open Office Impress : quotes;custom
+Oracle Open Office Impress : radar charts, see net charts
+Oracle Open Office Impress : radio button creation
+Oracle Open Office Impress : read-only documents
+Oracle Open Office Impress : read-only documents;cursor
+Oracle Open Office Impress : read-only documents;database tables on/off
+Oracle Open Office Impress : read-only documents;editing
+Oracle Open Office Impress : read-only documents;opening documents as
+Oracle Open Office Impress : read-only items in Data Navigator
+Oracle Open Office Impress : recognizing URLs automatically
+Oracle Open Office Impress : recording
+Oracle Open Office Impress : recording;changes
+Oracle Open Office Impress : recording;display times for slides
+Oracle Open Office Impress : recording;macros
+Oracle Open Office Impress : records
+Oracle Open Office Impress : records;inserting comments
+Oracle Open Office Impress : records;protecting
+Oracle Open Office Impress : records;saving
+Oracle Open Office Impress : records;searching in databases
+Oracle Open Office Impress : rectangles
+Oracle Open Office Impress : rectangles with round corners
+Oracle Open Office Impress : recursions in spreadsheets
+Oracle Open Office Impress : redo command
+Oracle Open Office Impress : reduced printing
+Oracle Open Office Impress : reference lines
+Oracle Open Office Impress : references
+Oracle Open Office Impress : references;displaying in color (Calc)
+Oracle Open Office Impress : references;expanding (Calc)
+Oracle Open Office Impress : references;iterative (Calc)
+Oracle Open Office Impress : register-true
+Oracle Open Office Impress : register-true;definition
+Oracle Open Office Impress : registering
+Oracle Open Office Impress : registering;address books
+Oracle Open Office Impress : registering;databases (Base)
+Oracle Open Office Impress : registering;Oracle Open Office
+Oracle Open Office Impress : regression curves in charts
+Oracle Open Office Impress : regular expressions
+Oracle Open Office Impress : regular expressions;list of
+Oracle Open Office Impress : rehearse timings
+Oracle Open Office Impress : relational databases (Base)
+Oracle Open Office Impress : relations
+Oracle Open Office Impress : relations;creating and deleting (Base)
+Oracle Open Office Impress : relations;joining tables (Base)
+Oracle Open Office Impress : relations;properties (Base)
+Oracle Open Office Impress : relative hyperlinks
+Oracle Open Office Impress : relative saving of URLs
+Oracle Open Office Impress : reloading
+Oracle Open Office Impress : reloading;documents
+Oracle Open Office Impress : reloading;HTML documents, automatically
+Oracle Open Office Impress : remarks, see also comments
+Oracle Open Office Impress : remote configurations
+Oracle Open Office Impress : remove noise filter
+Oracle Open Office Impress : removing
+Oracle Open Office Impress : removing;bullets and numbering
+Oracle Open Office Impress : removing;form filters
+Oracle Open Office Impress : removing, see also deleting
+Oracle Open Office Impress : renaming layers
+Oracle Open Office Impress : reorganizing charts
+Oracle Open Office Impress : repeating
+Oracle Open Office Impress : repeating;commands
+Oracle Open Office Impress : replacement options
+Oracle Open Office Impress : replacement table
+Oracle Open Office Impress : replacing
+Oracle Open Office Impress : replacing;AutoCorrect function
+Oracle Open Office Impress : replacing;colors in bitmaps
+Oracle Open Office Impress : replacing;dashes
+Oracle Open Office Impress : replacing;ordinal numbers
+Oracle Open Office Impress : replacing;tab stops (regular expressions)
+Oracle Open Office Impress : Report Builder
+Oracle Open Office Impress : reports
+Oracle Open Office Impress : reports;creating
+Oracle Open Office Impress : reports;error reports
+Oracle Open Office Impress : reports;opening and editing
+Oracle Open Office Impress : reports;templates
+Oracle Open Office Impress : resetting
+Oracle Open Office Impress : resetting;templates
+Oracle Open Office Impress : resizing
+Oracle Open Office Impress : resizing;objects, by mouse
+Oracle Open Office Impress : resizing, see also scaling/zooming
+Oracle Open Office Impress : resolution when printing bitmaps
+Oracle Open Office Impress : restoring
+Oracle Open Office Impress : restoring;default formatting
+Oracle Open Office Impress : restoring;editing
+Oracle Open Office Impress : reversing objects
+Oracle Open Office Impress : reversing printing order
+Oracle Open Office Impress : review function
+Oracle Open Office Impress : review function;accepting or rejecting changes
+Oracle Open Office Impress : review function;comparing documents
+Oracle Open Office Impress : review function;protecting records
+Oracle Open Office Impress : review function;recording changes example
+Oracle Open Office Impress : rich text control
+Oracle Open Office Impress : right alignment of paragraphs
+Oracle Open Office Impress : right joins (Base)
+Oracle Open Office Impress : right-to-left text
+Oracle Open Office Impress : rotating
+Oracle Open Office Impress : rotating;3D text
+Oracle Open Office Impress : rotating;draw objects
+Oracle Open Office Impress : rotation mode
+Oracle Open Office Impress : round corners
+Oracle Open Office Impress : rounding precision (Calc)
+Oracle Open Office Impress : row headers
+Oracle Open Office Impress : row headers;displaying (Calc)
+Oracle Open Office Impress : row headers;highlighting (Calc)
+Oracle Open Office Impress : rows
+Oracle Open Office Impress : rows;inserting
+Oracle Open Office Impress : rulers
+Oracle Open Office Impress : rulers;default settings
+Oracle Open Office Impress : rulers;in presentations
+Oracle Open Office Impress : rulers;measurement units
+Oracle Open Office Impress : rulers;visible in presentations
+Oracle Open Office Impress : running macros/programs in presentations
+Oracle Open Office Impress : running slide shows
+Oracle Open Office Impress : samples and templates
+Oracle Open Office Impress : saving
+Oracle Open Office Impress : saving;as HTML
+Oracle Open Office Impress : saving;default file formats
+Oracle Open Office Impress : saving;dialog settings
+Oracle Open Office Impress : saving;documents
+Oracle Open Office Impress : saving;documents for mobile devices
+Oracle Open Office Impress : saving;documents in other formats
+Oracle Open Office Impress : saving;documents, automatically
+Oracle Open Office Impress : saving;in Microsoft Office file format
+Oracle Open Office Impress : saving;options
+Oracle Open Office Impress : saving;templates
+Oracle Open Office Impress : saving;to XML
+Oracle Open Office Impress : saving;VBA code in Microsoft Office documents
+Oracle Open Office Impress : saving;with password by default
+Oracle Open Office Impress : saving as command
+Oracle Open Office Impress : saving as command;precautions
+Oracle Open Office Impress : scaling
+Oracle Open Office Impress : scaling;axes
+Oracle Open Office Impress : scaling;font sizes in user interface
+Oracle Open Office Impress : scaling;objects
+Oracle Open Office Impress : scaling;pictures
+Oracle Open Office Impress : scaling;printing in Oracle Open Office Math
+Oracle Open Office Impress : scaling;text in charts
+Oracle Open Office Impress : scaling;when printing presentations
+Oracle Open Office Impress : scaling, see also zooming
+Oracle Open Office Impress : scatter charts
+Oracle Open Office Impress : screen
+Oracle Open Office Impress : screen;full screen views
+Oracle Open Office Impress : screen;scaling
+Oracle Open Office Impress : screen magnifiers
+Oracle Open Office Impress : screen readers
+Oracle Open Office Impress : script organization
+Oracle Open Office Impress : scrollbars
+Oracle Open Office Impress : scrollbars;controls
+Oracle Open Office Impress : scrollbars;displaying (Calc)
+Oracle Open Office Impress : scrollbars;horizontal and vertical (Writer)
+Oracle Open Office Impress : search criteria for database functions in cells
+Oracle Open Office Impress : search engines
+Oracle Open Office Impress : search engines;definition
+Oracle Open Office Impress : search engines;selecting
+Oracle Open Office Impress : searching
+Oracle Open Office Impress : searching;all sheets
+Oracle Open Office Impress : searching;databases
+Oracle Open Office Impress : searching;form filters
+Oracle Open Office Impress : searching;Internet
+Oracle Open Office Impress : searching;tables and forms
+Oracle Open Office Impress : secondary axes in charts
+Oracle Open Office Impress : sections
+Oracle Open Office Impress : sections;backgrounds
+Oracle Open Office Impress : sectors of circles/ellipses
+Oracle Open Office Impress : security
+Oracle Open Office Impress : security;digital signatures
+Oracle Open Office Impress : security;options for documents with macros
+Oracle Open Office Impress : security;protecting contents
+Oracle Open Office Impress : security;security levels for macros
+Oracle Open Office Impress : security;warning dialogs with macros
+Oracle Open Office Impress : segments of circles/ellipses
+Oracle Open Office Impress : selecting
+Oracle Open Office Impress : selecting;controls
+Oracle Open Office Impress : selecting;hidden objects
+Oracle Open Office Impress : selecting;layers
+Oracle Open Office Impress : selecting;measurement units
+Oracle Open Office Impress : selecting;objects
+Oracle Open Office Impress : selecting;print areas
+Oracle Open Office Impress : selecting;several files
+Oracle Open Office Impress : selection clipboard
+Oracle Open Office Impress : selection frames
+Oracle Open Office Impress : selection modes in text
+Oracle Open Office Impress : sending
+Oracle Open Office Impress : sending;AutoAbstract function in presentations
+Oracle Open Office Impress : sending;documents as e-mail
+Oracle Open Office Impress : sending;documents as faxes
+Oracle Open Office Impress : separator lines
+Oracle Open Office Impress : separator lines;defining
+Oracle Open Office Impress : separators
+Oracle Open Office Impress : separators;conditional
+Oracle Open Office Impress : Server Side ImageMap
+Oracle Open Office Impress : settings
+Oracle Open Office Impress : settings;printers
+Oracle Open Office Impress : settings;program configuration
+Oracle Open Office Impress : settings;proxies
+Oracle Open Office Impress : settings;tracking changes
+Oracle Open Office Impress : settings;views
+Oracle Open Office Impress : SGML
+Oracle Open Office Impress : SGML;definition
+Oracle Open Office Impress : shadows
+Oracle Open Office Impress : shadows;areas
+Oracle Open Office Impress : shadows;borders
+Oracle Open Office Impress : shadows;characters
+Oracle Open Office Impress : shadows;characters, using context menu
+Oracle Open Office Impress : sharing documents
+Oracle Open Office Impress : sharpening filter
+Oracle Open Office Impress : shearing objects
+Oracle Open Office Impress : sheet tabs
+Oracle Open Office Impress : sheet tabs;displaying
+Oracle Open Office Impress : sheets
+Oracle Open Office Impress : sheets;searching all
+Oracle Open Office Impress : shells
+Oracle Open Office Impress : shortcut keys
+Oracle Open Office Impress : shortcut keys;assigning macros
+Oracle Open Office Impress : shortcut keys;charts
+Oracle Open Office Impress : shortcut keys;general
+Oracle Open Office Impress : shortcut keys;in databases
+Oracle Open Office Impress : shortcut keys;in drawings
+Oracle Open Office Impress : shortcut keys;in presentations
+Oracle Open Office Impress : shortcut keys;Oracle Open Office accessibility
+Oracle Open Office Impress : showing
+Oracle Open Office Impress : showing;changes
+Oracle Open Office Impress : showing;docked windows
+Oracle Open Office Impress : showing;drawings and controls (Writer)
+Oracle Open Office Impress : showing;guides
+Oracle Open Office Impress : showing;hidden layers
+Oracle Open Office Impress : showing;hidden slides
+Oracle Open Office Impress : showing;levels
+Oracle Open Office Impress : showing;live presentations on the Internet
+Oracle Open Office Impress : showing;slide shows
+Oracle Open Office Impress : showing;subpoints
+Oracle Open Office Impress : showing;toolbars
+Oracle Open Office Impress : sign conversion to curves
+Oracle Open Office Impress : signing documents with digital signatures
+Oracle Open Office Impress : similarity search
+Oracle Open Office Impress : simple handles (Writer)
+Oracle Open Office Impress : simplified Chinese
+Oracle Open Office Impress : simplified Chinese;translating to traditional Chinese
+Oracle Open Office Impress : single sign on options
+Oracle Open Office Impress : single-line spacing in text
+Oracle Open Office Impress : sizes
+Oracle Open Office Impress : sizes;draw objects
+Oracle Open Office Impress : sizes;pictures
+Oracle Open Office Impress : skewing draw objects
+Oracle Open Office Impress : slanting draw objects
+Oracle Open Office Impress : slanting objects
+Oracle Open Office Impress : slide designs
+Oracle Open Office Impress : slide layouts
+Oracle Open Office Impress : slide master view
+Oracle Open Office Impress : slide masters
+Oracle Open Office Impress : slide masters;changing backgrounds
+Oracle Open Office Impress : slide masters;designing
+Oracle Open Office Impress : slide masters;headers and footers
+Oracle Open Office Impress : slide numbers
+Oracle Open Office Impress : slide numbers on all slides
+Oracle Open Office Impress : slide shows
+Oracle Open Office Impress : slide shows;custom
+Oracle Open Office Impress : slide shows;settings for
+Oracle Open Office Impress : slide shows;starting
+Oracle Open Office Impress : slide transitions
+Oracle Open Office Impress : slide transitions;applying effects
+Oracle Open Office Impress : slide transitions;automatic
+Oracle Open Office Impress : slide transitions;manual
+Oracle Open Office Impress : slide transitions;sounds
+Oracle Open Office Impress : slides
+Oracle Open Office Impress : slides;arranging
+Oracle Open Office Impress : slides;backgrounds
+Oracle Open Office Impress : slides;changing backgrounds
+Oracle Open Office Impress : slides;copying between documents
+Oracle Open Office Impress : slides;deleting
+Oracle Open Office Impress : slides;expanding
+Oracle Open Office Impress : slides;formatting
+Oracle Open Office Impress : slides;headers and footers
+Oracle Open Office Impress : slides;inserting
+Oracle Open Office Impress : slides;inserting as links
+Oracle Open Office Impress : slides;inserting speaker notes
+Oracle Open Office Impress : slides;page numbers
+Oracle Open Office Impress : slides;printing
+Oracle Open Office Impress : small capitals
+Oracle Open Office Impress : small icons
+Oracle Open Office Impress : smart tag configuration
+Oracle Open Office Impress : smooth scrolling (Writer)
+Oracle Open Office Impress : smoothing filter
+Oracle Open Office Impress : snap grid defaults (Writer/Calc)
+Oracle Open Office Impress : snap lines, see also guides
+Oracle Open Office Impress : snap points
+Oracle Open Office Impress : snap points;editing
+Oracle Open Office Impress : snap points;inserting
+Oracle Open Office Impress : snapping in presentations and drawings
+Oracle Open Office Impress : solarization filter
+Oracle Open Office Impress : sort lists
+Oracle Open Office Impress : sort lists;copying to in Calc
+Oracle Open Office Impress : sorting
+Oracle Open Office Impress : sorting;data in forms
+Oracle Open Office Impress : sorting;databases
+Oracle Open Office Impress : sound files
+Oracle Open Office Impress : sounds
+Oracle Open Office Impress : sounds;for effects
+Oracle Open Office Impress : sounds;formats
+Oracle Open Office Impress : sounds;on slide transitions
+Oracle Open Office Impress : spaces
+Oracle Open Office Impress : spaces;displaying (Writer)
+Oracle Open Office Impress : spaces;ignoring double
+Oracle Open Office Impress : spaces;inserting protected spaces
+Oracle Open Office Impress : spaces;showing protected spaces (Writer)
+Oracle Open Office Impress : spacing
+Oracle Open Office Impress : spacing;between paragraphs in footnotes
+Oracle Open Office Impress : spacing;font effects
+Oracle Open Office Impress : spacing;lines and paragraphs
+Oracle Open Office Impress : spacing;tab stops in text documents
+Oracle Open Office Impress : spacing;tabs in presentations
+Oracle Open Office Impress : spadmin
+Oracle Open Office Impress : speaker notes
+Oracle Open Office Impress : speaker notes;defaults
+Oracle Open Office Impress : speaker notes;inserting
+Oracle Open Office Impress : special characters
+Oracle Open Office Impress : speech bubbles
+Oracle Open Office Impress : speed of printing
+Oracle Open Office Impress : spellcheck
+Oracle Open Office Impress : spellcheck;activating for a language
+Oracle Open Office Impress : spellcheck;context menus
+Oracle Open Office Impress : spellcheck;default languages
+Oracle Open Office Impress : spellcheck;dialog
+Oracle Open Office Impress : spellcheck;dictionary of exceptions
+Oracle Open Office Impress : spellcheck;ignore list
+Oracle Open Office Impress : spheres
+Oracle Open Office Impress : spin button creation
+Oracle Open Office Impress : splitting
+Oracle Open Office Impress : splitting;combinations
+Oracle Open Office Impress : splitting;curves
+Oracle Open Office Impress : spoolfiles with Xprinter
+Oracle Open Office Impress : spreadsheets
+Oracle Open Office Impress : spreadsheets;as databases (base)
+Oracle Open Office Impress : spreadsheets;copying areas to text documents
+Oracle Open Office Impress : spreadsheets;creating/opening
+Oracle Open Office Impress : spreadsheets;in presentations
+Oracle Open Office Impress : spreadsheets;inserting charts
+Oracle Open Office Impress : spreadsheets;inserting database records
+Oracle Open Office Impress : spreadsheets;printing
+Oracle Open Office Impress : spreadsheets;saving
+Oracle Open Office Impress : spreadsheets;saving automatically
+Oracle Open Office Impress : spreadsheets;saving in other formats
+Oracle Open Office Impress : spreadsheets;sending as e-mail
+Oracle Open Office Impress : SQL
+Oracle Open Office Impress : SQL;definition
+Oracle Open Office Impress : SQL;DISTINCT parameter
+Oracle Open Office Impress : SQL;executing SQL commands
+Oracle Open Office Impress : SQL;executing SQL statements (Base)
+Oracle Open Office Impress : SQL;queries (Base)
+Oracle Open Office Impress : square drawings
+Oracle Open Office Impress : standard bar on/off
+Oracle Open Office Impress : standard deviation in charts
+Oracle Open Office Impress : standard filters in databases
+Oracle Open Office Impress : standard printer under UNIX
+Oracle Open Office Impress : start center
+Oracle Open Office Impress : start parameters
+Oracle Open Office Impress : starting
+Oracle Open Office Impress : starting;always with the current slide
+Oracle Open Office Impress : starting;custom slide shows
+Oracle Open Office Impress : starting;slide shows
+Oracle Open Office Impress : statistics in charts
+Oracle Open Office Impress : status bar on/off
+Oracle Open Office Impress : stickers
+Oracle Open Office Impress : stock charts
+Oracle Open Office Impress : strikethrough
+Oracle Open Office Impress : strikethrough;characters
+Oracle Open Office Impress : strikethrough;font effects
+Oracle Open Office Impress : styles
+Oracle Open Office Impress : styles;'changed' message
+Oracle Open Office Impress : styles;arrow and line styles
+Oracle Open Office Impress : styles;copying between documents
+Oracle Open Office Impress : styles;keyboard shortcuts
+Oracle Open Office Impress : styles;organizing
+Oracle Open Office Impress : styles;printing styles used in a document
+Oracle Open Office Impress : styles;replacing automatically
+Oracle Open Office Impress : Styles and Formatting window
+Oracle Open Office Impress : Styles and Formatting window;docking
+Oracle Open Office Impress : Styles and Formatting window;graphics documents
+Oracle Open Office Impress : subforms
+Oracle Open Office Impress : subforms;creating
+Oracle Open Office Impress : subforms;description
+Oracle Open Office Impress : submitting forms
+Oracle Open Office Impress : subpoints
+Oracle Open Office Impress : subpoints;hiding
+Oracle Open Office Impress : subpoints;showing
+Oracle Open Office Impress : subtracting polygons
+Oracle Open Office Impress : suffixes in file formats
+Oracle Open Office Impress : summary slide
+Oracle Open Office Impress : support on the Web
+Oracle Open Office Impress : synchronizing
+Oracle Open Office Impress : synchronizing;labels and business cards
+Oracle Open Office Impress : synchronizing;Pocket PC and Oracle Open Office formats
+Oracle Open Office Impress : system address book registration
+Oracle Open Office Impress : tab stops
+Oracle Open Office Impress : tab stops;displaying (Writer)
+Oracle Open Office Impress : tab stops;inserting and editing
+Oracle Open Office Impress : tab stops;regular expressions
+Oracle Open Office Impress : tab stops;setting in sheets
+Oracle Open Office Impress : tab stops;settings
+Oracle Open Office Impress : tab stops;spacing in presentations
+Oracle Open Office Impress : tab stops;spacing in text documents
+Oracle Open Office Impress : table controls
+Oracle Open Office Impress : table controls;form functions
+Oracle Open Office Impress : table controls;keyboard-only edit mode
+Oracle Open Office Impress : table controls;properties
+Oracle Open Office Impress : table views of databases
+Oracle Open Office Impress : Table Wizard (Base)
+Oracle Open Office Impress : tables
+Oracle Open Office Impress : tables;inserting line breaks
+Oracle Open Office Impress : tables in databases
+Oracle Open Office Impress : tables in databases;access rights to (Base)
+Oracle Open Office Impress : tables in databases;adding to queries
+Oracle Open Office Impress : tables in databases;browsing and editing
+Oracle Open Office Impress : tables in databases;copying database tables (Base)
+Oracle Open Office Impress : tables in databases;creating
+Oracle Open Office Impress : tables in databases;creating in design view (manually)
+Oracle Open Office Impress : tables in databases;importing text formats (Base)
+Oracle Open Office Impress : tables in databases;joining for queries (Base)
+Oracle Open Office Impress : tables in databases;printing queries (Base)
+Oracle Open Office Impress : tables in databases;relations (Base)
+Oracle Open Office Impress : tables in databases;searching
+Oracle Open Office Impress : tables in spreadsheets
+Oracle Open Office Impress : tables in spreadsheets;copying data to other applications
+Oracle Open Office Impress : tables in spreadsheets;defining borders
+Oracle Open Office Impress : tables in spreadsheets;value highlighting
+Oracle Open Office Impress : tables in text
+Oracle Open Office Impress : tables in text;captions
+Oracle Open Office Impress : tables in text;creating automatically
+Oracle Open Office Impress : tables in text;default settings
+Oracle Open Office Impress : tables in text;defining borders
+Oracle Open Office Impress : tables in text;displaying
+Oracle Open Office Impress : tables in text;printing
+Oracle Open Office Impress : tabs
+Oracle Open Office Impress : tabs;displaying sheet tabs
+Oracle Open Office Impress : tags
+Oracle Open Office Impress : tags;definition
+Oracle Open Office Impress : tags;META tags
+Oracle Open Office Impress : task pane
+Oracle Open Office Impress : templates
+Oracle Open Office Impress : templates;agendas
+Oracle Open Office Impress : templates;changing basic fonts
+Oracle Open Office Impress : templates;database reports
+Oracle Open Office Impress : templates;deleting
+Oracle Open Office Impress : templates;editing and saving
+Oracle Open Office Impress : templates;faxes
+Oracle Open Office Impress : templates;importing and exporting
+Oracle Open Office Impress : templates;letters
+Oracle Open Office Impress : templates;new documents from templates
+Oracle Open Office Impress : templates;opening documents with
+Oracle Open Office Impress : templates;organizing
+Oracle Open Office Impress : terminology
+Oracle Open Office Impress : terminology;general glossary
+Oracle Open Office Impress : terminology;Internet glossary
+Oracle Open Office Impress : testing XML filters
+Oracle Open Office Impress : text
+Oracle Open Office Impress : text;animating
+Oracle Open Office Impress : text;Asian layout
+Oracle Open Office Impress : text;bold
+Oracle Open Office Impress : text;coloring
+Oracle Open Office Impress : text;converting to curves
+Oracle Open Office Impress : text;copying by drag and drop
+Oracle Open Office Impress : text;CTL languages
+Oracle Open Office Impress : text;double-clicking to edit
+Oracle Open Office Impress : text;drawing pictures
+Oracle Open Office Impress : text;font effects
+Oracle Open Office Impress : text;font sizes
+Oracle Open Office Impress : text;font styles
+Oracle Open Office Impress : text;fonts and formats
+Oracle Open Office Impress : text;Fontwork icons
+Oracle Open Office Impress : text;hyperlinks
+Oracle Open Office Impress : text;inserting special characters
+Oracle Open Office Impress : text;italics
+Oracle Open Office Impress : text;kerning
+Oracle Open Office Impress : text;language selection
+Oracle Open Office Impress : text;line spacing
+Oracle Open Office Impress : text;overwriting or inserting
+Oracle Open Office Impress : text;printing in black
+Oracle Open Office Impress : text;replacing with format
+Oracle Open Office Impress : text;selection modes
+Oracle Open Office Impress : text;shadowed
+Oracle Open Office Impress : text;text/draw objects
+Oracle Open Office Impress : text;toolbar
+Oracle Open Office Impress : text attributes
+Oracle Open Office Impress : text attributes;hyperlinks
+Oracle Open Office Impress : text attributes;undoing
+Oracle Open Office Impress : text boxes
+Oracle Open Office Impress : text boxes;form functions
+Oracle Open Office Impress : text boxes;positioning
+Oracle Open Office Impress : text breaks in cells
+Oracle Open Office Impress : text colors for better accessibility
+Oracle Open Office Impress : text databases (Base)
+Oracle Open Office Impress : text documents
+Oracle Open Office Impress : text documents;creating/opening
+Oracle Open Office Impress : text documents;importing/exporting
+Oracle Open Office Impress : text documents;inserting in slides
+Oracle Open Office Impress : text documents;inserting spreadsheet cells
+Oracle Open Office Impress : text documents;print settings
+Oracle Open Office Impress : text documents;printing
+Oracle Open Office Impress : text documents;saving
+Oracle Open Office Impress : text documents;saving automatically
+Oracle Open Office Impress : text documents;saving in other formats
+Oracle Open Office Impress : text documents;sending as e-mail
+Oracle Open Office Impress : text effects
+Oracle Open Office Impress : text entry mode for draw objects
+Oracle Open Office Impress : text flow
+Oracle Open Office Impress : text flow;in cells
+Oracle Open Office Impress : text formats
+Oracle Open Office Impress : text formats;databases
+Oracle Open Office Impress : text formats;pasting
+Oracle Open Office Impress : text frames
+Oracle Open Office Impress : text input fields
+Oracle Open Office Impress : text layout for special languages
+Oracle Open Office Impress : text objects
+Oracle Open Office Impress : text objects;alignment
+Oracle Open Office Impress : text objects;draw functions
+Oracle Open Office Impress : text objects;fonts
+Oracle Open Office Impress : text objects;in presentations and drawings
+Oracle Open Office Impress : text overflow in spreadsheet cells
+Oracle Open Office Impress : text scaling in charts
+Oracle Open Office Impress : text, see also text documents, paragraphs and characters
+Oracle Open Office Impress : TextArt, see Fontwork
+Oracle Open Office Impress : textures
+Oracle Open Office Impress : textures;inserting from Gallery
+Oracle Open Office Impress : textures;on chart bars
+Oracle Open Office Impress : Thai
+Oracle Open Office Impress : Thai;entering text
+Oracle Open Office Impress : Thai;language settings
+Oracle Open Office Impress : thesaurus
+Oracle Open Office Impress : thesaurus;activating for a language
+Oracle Open Office Impress : ticker text
+Oracle Open Office Impress : tiled printing of slides
+Oracle Open Office Impress : time and date on all slides
+Oracle Open Office Impress : time fields
+Oracle Open Office Impress : time fields;form functions
+Oracle Open Office Impress : times
+Oracle Open Office Impress : times;fixed
+Oracle Open Office Impress : times;inserting when printing presentations
+Oracle Open Office Impress : times;variable
+Oracle Open Office Impress : times, formats
+Oracle Open Office Impress : timings
+Oracle Open Office Impress : timings;rehearse timings
+Oracle Open Office Impress : tips
+Oracle Open Office Impress : tips;extended tips in Help
+Oracle Open Office Impress : title rows
+Oracle Open Office Impress : title rows;printing in Oracle Open Office Math
+Oracle Open Office Impress : titles
+Oracle Open Office Impress : titles;alignment (charts)
+Oracle Open Office Impress : titles;changing
+Oracle Open Office Impress : titles;editing in charts
+Oracle Open Office Impress : titles;font effects
+Oracle Open Office Impress : titles;formatting automatically
+Oracle Open Office Impress : titles;formatting charts
+Oracle Open Office Impress : titles;objects
+Oracle Open Office Impress : toolbars
+Oracle Open Office Impress : toolbars;3D objects
+Oracle Open Office Impress : toolbars;adding buttons
+Oracle Open Office Impress : toolbars;curves
+Oracle Open Office Impress : toolbars;docking/undocking
+Oracle Open Office Impress : toolbars;ellipses
+Oracle Open Office Impress : toolbars;Form Navigation bar
+Oracle Open Office Impress : toolbars;viewing/closing
+Oracle Open Office Impress : tools bar
+Oracle Open Office Impress : tooltips
+Oracle Open Office Impress : tooltips;extended tips
+Oracle Open Office Impress : tooltips;help
+Oracle Open Office Impress : torus
+Oracle Open Office Impress : traditional Chinese
+Oracle Open Office Impress : traditional Chinese;translating to simplified chinese
+Oracle Open Office Impress : transition effects
+Oracle Open Office Impress : transparency
+Oracle Open Office Impress : transparency;adjusting
+Oracle Open Office Impress : transparency;areas
+Oracle Open Office Impress : transparency;of objects
+Oracle Open Office Impress : transparency;off for faster printing
+Oracle Open Office Impress : transparency;saving
+Oracle Open Office Impress : tree view of Help
+Oracle Open Office Impress : trend lines in charts
+Oracle Open Office Impress : typefaces
+Oracle Open Office Impress : typefaces;adding under UNIX
+Oracle Open Office Impress : typefaces;formats
+Oracle Open Office Impress : typography
+Oracle Open Office Impress : typography;Asian
+Oracle Open Office Impress : underlining
+Oracle Open Office Impress : underlining;AutoFormat function
+Oracle Open Office Impress : underlining;characters
+Oracle Open Office Impress : underlining;text
+Oracle Open Office Impress : underlying objects
+Oracle Open Office Impress : undocking windows
+Oracle Open Office Impress : undoing
+Oracle Open Office Impress : undoing;direct formatting
+Oracle Open Office Impress : undoing;editing
+Oracle Open Office Impress : undoing;number of steps
+Oracle Open Office Impress : ungrouping groups
+Oracle Open Office Impress : units
+Oracle Open Office Impress : units;converting
+Oracle Open Office Impress : units;measurement units
+Oracle Open Office Impress : unlocking layers
+Oracle Open Office Impress : UNO components
+Oracle Open Office Impress : UNO components;Extension Manager
+Oracle Open Office Impress : UNO components;integrating new
+Oracle Open Office Impress : update options
+Oracle Open Office Impress : updates
+Oracle Open Office Impress : updates;checking automatically
+Oracle Open Office Impress : updates;checking manually
+Oracle Open Office Impress : updating
+Oracle Open Office Impress : updating;fields and charts, automatically (Writer)
+Oracle Open Office Impress : updating;links in text documents
+Oracle Open Office Impress : updating;links, on opening
+Oracle Open Office Impress : updating;templates
+Oracle Open Office Impress : URL
+Oracle Open Office Impress : URL;changing hyperlink URLs
+Oracle Open Office Impress : URL;definition
+Oracle Open Office Impress : URL;in pictures
+Oracle Open Office Impress : URL;saving absolute/relative paths
+Oracle Open Office Impress : URL;turning off URL recognition
+Oracle Open Office Impress : user data
+Oracle Open Office Impress : user data;input
+Oracle Open Office Impress : user data;removing when saving
+Oracle Open Office Impress : user feedback
+Oracle Open Office Impress : user feedback;automatically
+Oracle Open Office Impress : user-defined colors
+Oracle Open Office Impress : user-defined dictionaries
+Oracle Open Office Impress : user-defined dictionaries;creating
+Oracle Open Office Impress : user-defined dictionaries;dictionary of exceptions
+Oracle Open Office Impress : user-defined dictionaries;editing
+Oracle Open Office Impress : user-defined styles
+Oracle Open Office Impress : user-defined styles;automatically replacing
+Oracle Open Office Impress : UTF-8/UCS2 support
+Oracle Open Office Impress : values
+Oracle Open Office Impress : values;rounded as shown (Calc)
+Oracle Open Office Impress : variables
+Oracle Open Office Impress : variables;for paths
+Oracle Open Office Impress : variances in charts
+Oracle Open Office Impress : VBA code
+Oracle Open Office Impress : VBA code;loading/saving documents with VBA code
+Oracle Open Office Impress : vector graphics
+Oracle Open Office Impress : vector graphics;converting bitmaps
+Oracle Open Office Impress : vectorizing bitmaps
+Oracle Open Office Impress : version management
+Oracle Open Office Impress : version numbers of documents
+Oracle Open Office Impress : versions
+Oracle Open Office Impress : versions;comparing documents
+Oracle Open Office Impress : versions;file saving as, restriction
+Oracle Open Office Impress : versions;merging document versions
+Oracle Open Office Impress : versions;of a document
+Oracle Open Office Impress : versions;Oracle Open Office
+Oracle Open Office Impress : vertical callouts
+Oracle Open Office Impress : vertical scrollbars (Writer)
+Oracle Open Office Impress : vertical text boxes
+Oracle Open Office Impress : videos
+Oracle Open Office Impress : viewing
+Oracle Open Office Impress : viewing;databases
+Oracle Open Office Impress : viewing;file properties
+Oracle Open Office Impress : viewing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Impress : viewing;toolbars
+Oracle Open Office Impress : views
+Oracle Open Office Impress : views;black and white
+Oracle Open Office Impress : views;creating database views (Base)
+Oracle Open Office Impress : views;defaults
+Oracle Open Office Impress : views;display sizes
+Oracle Open Office Impress : views;full screen
+Oracle Open Office Impress : views;icons
+Oracle Open Office Impress : views;scaling
+Oracle Open Office Impress : views;shift function
+Oracle Open Office Impress : views;slide master view
+Oracle Open Office Impress : Visual Basic for Applications
+Oracle Open Office Impress : Visual Basic for Applications;loading/saving documents with VBA code
+Oracle Open Office Impress : watermarks
+Oracle Open Office Impress : web documents
+Oracle Open Office Impress : web documents;XForms
+Oracle Open Office Impress : Web support
+Oracle Open Office Impress : WebCast export
+Oracle Open Office Impress : WebDAV over HTTPS
+Oracle Open Office Impress : windows
+Oracle Open Office Impress : windows;docking
+Oracle Open Office Impress : windows;docking definition
+Oracle Open Office Impress : windows;hiding/showing/docking
+Oracle Open Office Impress : windows;new
+Oracle Open Office Impress : wizards
+Oracle Open Office Impress : wizards;agendas
+Oracle Open Office Impress : wizards;database queries
+Oracle Open Office Impress : wizards;database tables (Base)
+Oracle Open Office Impress : wizards;databases (Base)
+Oracle Open Office Impress : wizards;document converter
+Oracle Open Office Impress : wizards;Euro Converter
+Oracle Open Office Impress : wizards;faxes
+Oracle Open Office Impress : wizards;forms
+Oracle Open Office Impress : wizards;letters
+Oracle Open Office Impress : wizards;macros (Base)
+Oracle Open Office Impress : wizards;overview
+Oracle Open Office Impress : wizards;presentations
+Oracle Open Office Impress : wizards;reports
+Oracle Open Office Impress : Word documents
+Oracle Open Office Impress : Word documents;compatibility
+Oracle Open Office Impress : Word documents;saving as
+Oracle Open Office Impress : WordArt, see Fontwork
+Oracle Open Office Impress : words
+Oracle Open Office Impress : words;automatically replacing
+Oracle Open Office Impress : words;wrapping in cells
+Oracle Open Office Impress : words;wrapping in CTL
+Oracle Open Office Impress : working directory change
+Oracle Open Office Impress : wrapping text
+Oracle Open Office Impress : wrapping text;in cells
+Oracle Open Office Impress : write protection on/off
+Oracle Open Office Impress : writing aids options
+Oracle Open Office Impress : WYSIWYG in fonts lists
+Oracle Open Office Impress : X axes
+Oracle Open Office Impress : X axes;grid formatting
+Oracle Open Office Impress : X axes;positioning
+Oracle Open Office Impress : X axes;scaling
+Oracle Open Office Impress : X axes;showing
+Oracle Open Office Impress : XForms
+Oracle Open Office Impress : XForms;adding/editing/deleting/organizing namespaces
+Oracle Open Office Impress : XForms;conditions
+Oracle Open Office Impress : XForms;opening/editing
+Oracle Open Office Impress : XML converters
+Oracle Open Office Impress : XML file formats
+Oracle Open Office Impress : XML filters
+Oracle Open Office Impress : XML filters;creating/testing
+Oracle Open Office Impress : XML filters;saving as package/installing/deleting
+Oracle Open Office Impress : XML filters;settings
+Oracle Open Office Impress : XML Forms, see XForms
+Oracle Open Office Impress : XSLT filters, see also XML filters
+Oracle Open Office Impress : XY charts
+Oracle Open Office Impress : Y axes
+Oracle Open Office Impress : Y axes;formatting
+Oracle Open Office Impress : Y axes;grid formatting
+Oracle Open Office Impress : Y axes;positioning
+Oracle Open Office Impress : Y axes;scaling
+Oracle Open Office Impress : Y axes;showing
+Oracle Open Office Impress : years
+Oracle Open Office Impress : years;2-digit options
+Oracle Open Office Impress : Z axes
+Oracle Open Office Impress : Z axes;grid formatting
+Oracle Open Office Impress : Z axes;showing
+Oracle Open Office Impress : zero values
+Oracle Open Office Impress : zero values;displaying (Calc)
+Oracle Open Office Impress : zooming
+Oracle Open Office Impress : zooming;in presentations
+Oracle Open Office Impress : zooming;keyboard
+Oracle Open Office Impress : zooming;page views
+Oracle Open Office Impress : zooming;pictures
+Oracle Open Office Impress : zooming;shortcut keys
+Oracle Open Office Impress : zooming;status bar
Oracle Open Office Calc : #N/A error
Oracle Open Office Calc : #N/A error;assigning to a cell
Oracle Open Office Calc : #N/A error;recognizing
Oracle Open Office Calc : #NAME error message
Oracle Open Office Calc : #REF error message
-Oracle Open Office Calc : 1/2 replacement
Oracle Open Office Calc : 3D charts
Oracle Open Office Calc : 3D text creation
Oracle Open Office Calc : abbreviation replacement
@@ -3247,7 +11396,8 @@ Oracle Open Office Calc : converting;Oracle Open Office documents
Oracle Open Office Calc : converting;Pocket PC formats
Oracle Open Office Calc : converting;radians, into degrees
Oracle Open Office Calc : converting;random variables, into normalized values
-Oracle Open Office Calc : converting;text to numbers
+Oracle Open Office Calc : converting;text with leading zeros, into numbers
+Oracle Open Office Calc : converting;text, into numbers
Oracle Open Office Calc : copies
Oracle Open Office Calc : copies;printing
Oracle Open Office Calc : copying
@@ -3452,6 +11602,7 @@ Oracle Open Office Calc : date fields;creating
Oracle Open Office Calc : date fields;properties
Oracle Open Office Calc : date formats
Oracle Open Office Calc : date formats;avoiding conversion to
+Oracle Open Office Calc : date formats;conversion
Oracle Open Office Calc : date formats
Oracle Open Office Calc : DATE function
Oracle Open Office Calc : date series
@@ -3888,7 +12039,6 @@ Oracle Open Office Calc : files
Oracle Open Office Calc : files;filters and formats
Oracle Open Office Calc : files;importing
Oracle Open Office Calc : files;opening
-Oracle Open Office Calc : files;opening with placeholders
Oracle Open Office Calc : files;properties
Oracle Open Office Calc : files;saving
Oracle Open Office Calc : files;saving automatically
@@ -4006,6 +12156,7 @@ Oracle Open Office Calc : formats;pasting in special formats
Oracle Open Office Calc : formats;positions
Oracle Open Office Calc : formats;Styles and Formatting window
Oracle Open Office Calc : formats;tabulators
+Oracle Open Office Calc : formats;text as numbers
Oracle Open Office Calc : formats;themes for sheets
Oracle Open Office Calc : formatted fields
Oracle Open Office Calc : formatted fields;form functions
@@ -4876,17 +13027,14 @@ Oracle Open Office Calc : numbering;options
Oracle Open Office Calc : numbering;turning off
Oracle Open Office Calc : numbering;using automatically
Oracle Open Office Calc : numbers
-Oracle Open Office Calc : numbers;as text
-Oracle Open Office Calc : numbers;changing text/number formats
Oracle Open Office Calc : numbers;counting
Oracle Open Office Calc : numbers;date, time and currency formats
Oracle Open Office Calc : numbers;decimal places
-Oracle Open Office Calc : numbers;decimal places (Calc)
Oracle Open Office Calc : numbers;determining ranks
+Oracle Open Office Calc : numbers;entering as text
Oracle Open Office Calc : numbers;entering fractions
-Oracle Open Office Calc : numbers;entering without number formats
Oracle Open Office Calc : numbers;filter sheets
-Oracle Open Office Calc : numbers;formatting in tables
+Oracle Open Office Calc : numbers;formatting decimals
Oracle Open Office Calc : numbers;formatting options for selected cells
Oracle Open Office Calc : numbers;greater than or equal to
Oracle Open Office Calc : numbers;highlighting negative numbers
@@ -4894,7 +13042,7 @@ Oracle Open Office Calc : numbers;multiplying
Oracle Open Office Calc : numbers;rounded off
Oracle Open Office Calc : numbers;rounding down to next integer
Oracle Open Office Calc : numbers;rounding up/down to even integers
-Oracle Open Office Calc : numbers;user-defined formatting in tables
+Oracle Open Office Calc : numbers;user-defined formatting
Oracle Open Office Calc : numbers;with leading zeros
Oracle Open Office Calc : numerical fields in forms
Oracle Open Office Calc : objects
@@ -4944,7 +13092,6 @@ Oracle Open Office Calc : online update options
Oracle Open Office Calc : online updates
Oracle Open Office Calc : online updates;checking automatically
Oracle Open Office Calc : online updates;checking manually
-Oracle Open Office Calc : Open/Save dialogs
Oracle Open Office Calc : OpenDocument file formats
Oracle Open Office Calc : OpenGL
Oracle Open Office Calc : OpenGL;definition
@@ -4992,6 +13139,8 @@ Oracle Open Office Calc : Oracle Open Office Math start
Oracle Open Office Calc : order of chart data
Oracle Open Office Calc : ordering
Oracle Open Office Calc : ordering;objects
+Oracle Open Office Calc : ordinal numbers
+Oracle Open Office Calc : ordinal numbers;replacing
Oracle Open Office Calc : organizing
Oracle Open Office Calc : organizing;macros and scripts
Oracle Open Office Calc : organizing;namespaces in XForms
@@ -5297,8 +13446,6 @@ Oracle Open Office Calc : queries;parameter queries (Base)
Oracle Open Office Calc : queries;printing (Base)
Oracle Open Office Calc : Query Wizard (Base)
Oracle Open Office Calc : Quickstarter
-Oracle Open Office Calc : quotation marks
-Oracle Open Office Calc : quotation marks;replacing
Oracle Open Office Calc : quotes
Oracle Open Office Calc : quotes;custom
Oracle Open Office Calc : QUOTIENT function
@@ -5379,7 +13526,6 @@ Oracle Open Office Calc : regression lines;FORECAST function
Oracle Open Office Calc : regression lines;LINEST function
Oracle Open Office Calc : regular expressions
Oracle Open Office Calc : regular expressions;list of
-Oracle Open Office Calc : regular expressions;opening files
Oracle Open Office Calc : relational databases (Base)
Oracle Open Office Calc : relations
Oracle Open Office Calc : relations;creating and deleting (Base)
@@ -5418,6 +13564,7 @@ Oracle Open Office Calc : replacing
Oracle Open Office Calc : replacing;AutoCorrect function
Oracle Open Office Calc : replacing;cell contents
Oracle Open Office Calc : replacing;dashes
+Oracle Open Office Calc : replacing;ordinal numbers
Oracle Open Office Calc : replacing;tab stops (regular expressions)
Oracle Open Office Calc : Report Builder
Oracle Open Office Calc : reports
@@ -6046,6 +14193,7 @@ Oracle Open Office Calc : ticker text
Oracle Open Office Calc : time differences
Oracle Open Office Calc : time fields
Oracle Open Office Calc : time fields;form functions
+Oracle Open Office Calc : time format conversion
Oracle Open Office Calc : TIME function
Oracle Open Office Calc : times
Oracle Open Office Calc : times;in cells
@@ -6109,7 +14257,6 @@ Oracle Open Office Calc : TYPE function
Oracle Open Office Calc : typefaces
Oracle Open Office Calc : typefaces;adding under UNIX
Oracle Open Office Calc : typefaces;formats
-Oracle Open Office Calc : typographical quotes in Oracle Open Office Writer
Oracle Open Office Calc : typography
Oracle Open Office Calc : typography;Asian
Oracle Open Office Calc : underlining
@@ -6330,2300 +14477,6 @@ Oracle Open Office Calc : zooming;pictures
Oracle Open Office Calc : zooming;reducing page views
Oracle Open Office Calc : zooming;status bar
Oracle Open Office Calc : ZTEST function
-Oracle Open Office Chart : 1/2 replacement
-Oracle Open Office Chart : 3D charts
-Oracle Open Office Chart : 3D text creation
-Oracle Open Office Chart : abbreviation replacement
-Oracle Open Office Chart : absolute hyperlinks
-Oracle Open Office Chart : absolute saving of URLs
-Oracle Open Office Chart : accents
-Oracle Open Office Chart : Access databases (base)
-Oracle Open Office Chart : access rights for database tables (Base)
-Oracle Open Office Chart : accessibility
-Oracle Open Office Chart : accessibility;general shortcuts
-Oracle Open Office Chart : accessibility;options
-Oracle Open Office Chart : accessibility;Oracle Open Office assistive technology
-Oracle Open Office Chart : accessibility;Oracle Open Office features
-Oracle Open Office Chart : activating
-Oracle Open Office Chart : activating;context menus
-Oracle Open Office Chart : activating;Error Report Tool
-Oracle Open Office Chart : activating;extended help tips
-Oracle Open Office Chart : activating;plug-ins
-Oracle Open Office Chart : ActiveX control
-Oracle Open Office Chart : Adabas D databases (base)
-Oracle Open Office Chart : add-ons, see UNO components
-Oracle Open Office Chart : additional selection mode
-Oracle Open Office Chart : address books
-Oracle Open Office Chart : address books;LDAP server (Base)
-Oracle Open Office Chart : address books;registering
-Oracle Open Office Chart : address labels from databases
-Oracle Open Office Chart : ADO databases (Base)
-Oracle Open Office Chart : Agenda Wizard
-Oracle Open Office Chart : aging filter
-Oracle Open Office Chart : aligning
-Oracle Open Office Chart : aligning;2D charts
-Oracle Open Office Chart : aligning;cells
-Oracle Open Office Chart : aligning;objects
-Oracle Open Office Chart : aligning;paragraphs
-Oracle Open Office Chart : aligning;tables in text
-Oracle Open Office Chart : aligning;text objects
-Oracle Open Office Chart : aligning;titles in charts
-Oracle Open Office Chart : alternative fonts
-Oracle Open Office Chart : ampersand symbol, see also operators
-Oracle Open Office Chart : anchors
-Oracle Open Office Chart : anchors;changing
-Oracle Open Office Chart : anchors;displaying (Calc)
-Oracle Open Office Chart : anchors;types/positions for draw objects
-Oracle Open Office Chart : animations
-Oracle Open Office Chart : animations;accessibility options
-Oracle Open Office Chart : appearance options
-Oracle Open Office Chart : Arabic
-Oracle Open Office Chart : Arabic;entering text
-Oracle Open Office Chart : Arabic;language settings
-Oracle Open Office Chart : area charts
-Oracle Open Office Chart : areas
-Oracle Open Office Chart : areas;bitmap patterns
-Oracle Open Office Chart : areas;hatched/dotted
-Oracle Open Office Chart : areas;shadows
-Oracle Open Office Chart : areas;slanting
-Oracle Open Office Chart : areas;styles
-Oracle Open Office Chart : areas;transparency
-Oracle Open Office Chart : arguments in command line
-Oracle Open Office Chart : arranging
-Oracle Open Office Chart : arranging;objects
-Oracle Open Office Chart : arrows
-Oracle Open Office Chart : arrows;defining arrow heads
-Oracle Open Office Chart : arrows;defining arrow lines
-Oracle Open Office Chart : arrows;drawing in text
-Oracle Open Office Chart : ASCII
-Oracle Open Office Chart : ASCII;definition
-Oracle Open Office Chart : Asian languages
-Oracle Open Office Chart : Asian languages;enabling
-Oracle Open Office Chart : Asian Phonetic Guide
-Oracle Open Office Chart : Asian typography
-Oracle Open Office Chart : assigning scripts
-Oracle Open Office Chart : assistive technology in Oracle Open Office
-Oracle Open Office Chart : attaching toolbars
-Oracle Open Office Chart : attachments in e-mails
-Oracle Open Office Chart : audio
-Oracle Open Office Chart : auto reloading HTML documents
-Oracle Open Office Chart : AutoAbstract function for sending text to presentations
-Oracle Open Office Chart : AutoCaption function in Oracle Open Office Writer
-Oracle Open Office Chart : AutoComplete function in text and list boxes
-Oracle Open Office Chart : AutoCorrect function
-Oracle Open Office Chart : AutoCorrect function;context menu
-Oracle Open Office Chart : AutoCorrect function;options
-Oracle Open Office Chart : AutoCorrect function;pictures and frames
-Oracle Open Office Chart : AutoCorrect function;quotes
-Oracle Open Office Chart : AutoCorrect function;replacement table
-Oracle Open Office Chart : AutoCorrect function;switching on and off in Calc
-Oracle Open Office Chart : AutoCorrect function;URL recognition
-Oracle Open Office Chart : AutoFormat function
-Oracle Open Office Chart : AutoFormat function;switching on and off
-Oracle Open Office Chart : automatic captions (Writer)
-Oracle Open Office Chart : automatic control focus
-Oracle Open Office Chart : automatic hyperlink formatting
-Oracle Open Office Chart : automatic line breaks
-Oracle Open Office Chart : automatic lines/borders in text
-Oracle Open Office Chart : automatic saving
-Oracle Open Office Chart : AutoPilots, see wizards
-Oracle Open Office Chart : AutoValue (Base)
-Oracle Open Office Chart : averages in charts
-Oracle Open Office Chart : axes
-Oracle Open Office Chart : axes;better scaling
-Oracle Open Office Chart : axes;formatting
-Oracle Open Office Chart : axes;formatting grids
-Oracle Open Office Chart : axes;inserting grids
-Oracle Open Office Chart : axes;interval marks
-Oracle Open Office Chart : axes;showing axes in charts
-Oracle Open Office Chart : axes in charts
-Oracle Open Office Chart : backgrounds
-Oracle Open Office Chart : backgrounds;defining colors/pictures
-Oracle Open Office Chart : backgrounds;frames/sections/indexes
-Oracle Open Office Chart : backgrounds;inserting from Gallery
-Oracle Open Office Chart : backgrounds;printing
-Oracle Open Office Chart : backing window
-Oracle Open Office Chart : backups
-Oracle Open Office Chart : backups;automatic
-Oracle Open Office Chart : backups;documents
-Oracle Open Office Chart : bar charts
-Oracle Open Office Chart : Basic
-Oracle Open Office Chart : Basic;fonts for source display
-Oracle Open Office Chart : Basic;programming
-Oracle Open Office Chart : Basic;recording macros
-Oracle Open Office Chart : basic fonts
-Oracle Open Office Chart : Bézier curves
-Oracle Open Office Chart : Bézier curves;control points in presentations
-Oracle Open Office Chart : bi-directional writing
-Oracle Open Office Chart : binding space
-Oracle Open Office Chart : bitmaps
-Oracle Open Office Chart : bitmaps;inserting and editing
-Oracle Open Office Chart : bitmaps;off for faster printing
-Oracle Open Office Chart : bitmaps;patterns
-Oracle Open Office Chart : black and white printing
-Oracle Open Office Chart : black printing in Calc
-Oracle Open Office Chart : block selection mode
-Oracle Open Office Chart : bold
-Oracle Open Office Chart : bold;AutoFormat function
-Oracle Open Office Chart : bold;text
-Oracle Open Office Chart : bookmarks
-Oracle Open Office Chart : bookmarks;Help
-Oracle Open Office Chart : borders
-Oracle Open Office Chart : borders;arranging
-Oracle Open Office Chart : borders;cells on screen (Calc)
-Oracle Open Office Chart : borders;for paragraphs
-Oracle Open Office Chart : borders;for tables
-Oracle Open Office Chart : borders;shadows
-Oracle Open Office Chart : borders;table boundaries (Writer)
-Oracle Open Office Chart : borders, see also frames
-Oracle Open Office Chart : bound fields
-Oracle Open Office Chart : bound fields;controls
-Oracle Open Office Chart : boundaries of tables (Writer)
-Oracle Open Office Chart : break display (Writer)
-Oracle Open Office Chart : brochures
-Oracle Open Office Chart : brochures;printing several
-Oracle Open Office Chart : bubble charts
-Oracle Open Office Chart : build numbers of Oracle Open Office
-Oracle Open Office Chart : bullet lists
-Oracle Open Office Chart : bullet lists;formatting options
-Oracle Open Office Chart : bullets
-Oracle Open Office Chart : bullets;paragraphs
-Oracle Open Office Chart : bullets;replacing
-Oracle Open Office Chart : bullets;turning off
-Oracle Open Office Chart : business cards
-Oracle Open Office Chart : business cards;creating and synchronizing
-Oracle Open Office Chart : business cards;using templates
-Oracle Open Office Chart : button bars, see toolbars
-Oracle Open Office Chart : buttons
-Oracle Open Office Chart : buttons;adding push buttons
-Oracle Open Office Chart : buttons;big/small
-Oracle Open Office Chart : buttons;editing hyperlink buttons
-Oracle Open Office Chart : buttons;form functions
-Oracle Open Office Chart : buttons;toolbars
-Oracle Open Office Chart : cache for graphics
-Oracle Open Office Chart : calculating
-Oracle Open Office Chart : calculating;iterative references (Calc)
-Oracle Open Office Chart : calculating;regression curves
-Oracle Open Office Chart : callouts
-Oracle Open Office Chart : callouts;drawings
-Oracle Open Office Chart : capital letters
-Oracle Open Office Chart : capital letters;AutoCorrect function
-Oracle Open Office Chart : capital letters;font effects
-Oracle Open Office Chart : captions
-Oracle Open Office Chart : captions;automatic captions (Writer)
-Oracle Open Office Chart : captions;tables/pictures/frames/OLE objects (Writer)
-Oracle Open Office Chart : captions, see also labels/callouts
-Oracle Open Office Chart : cascading update (Base)
-Oracle Open Office Chart : case sensitivity
-Oracle Open Office Chart : case sensitivity;comparing cell contents (Calc)
-Oracle Open Office Chart : case sensitivity;searching
-Oracle Open Office Chart : cells
-Oracle Open Office Chart : cells;aligning
-Oracle Open Office Chart : cells;coloring (Calc)
-Oracle Open Office Chart : cells;cursor positions after input (Calc)
-Oracle Open Office Chart : cells;formatting without effect (Calc)
-Oracle Open Office Chart : cells;line breaks
-Oracle Open Office Chart : cells;linked to controls
-Oracle Open Office Chart : cells;number of
-Oracle Open Office Chart : cells;pasting
-Oracle Open Office Chart : cells;resetting formats
-Oracle Open Office Chart : cells;showing grid lines (Calc)
-Oracle Open Office Chart : centered text
-Oracle Open Office Chart : centimeters
-Oracle Open Office Chart : certificates
-Oracle Open Office Chart : changes
-Oracle Open Office Chart : changes;accepting or rejecting
-Oracle Open Office Chart : changes;comparing to original
-Oracle Open Office Chart : changes;protecting
-Oracle Open Office Chart : changes;recording
-Oracle Open Office Chart : changes;review function
-Oracle Open Office Chart : changes;showing
-Oracle Open Office Chart : changing
-Oracle Open Office Chart : changing;document titles
-Oracle Open Office Chart : changing;file associations in Setup program
-Oracle Open Office Chart : changing;icon sizes
-Oracle Open Office Chart : changing;links
-Oracle Open Office Chart : changing;work directory
-Oracle Open Office Chart : changing, see also editing and replacing
-Oracle Open Office Chart : character styles
-Oracle Open Office Chart : character styles;language selection
-Oracle Open Office Chart : characters
-Oracle Open Office Chart : characters;alternative fonts
-Oracle Open Office Chart : characters;Asian layout
-Oracle Open Office Chart : characters;bold
-Oracle Open Office Chart : characters;coloring
-Oracle Open Office Chart : characters;displaying only on screen (Writer)
-Oracle Open Office Chart : characters;enabling CTL and Asian characters
-Oracle Open Office Chart : characters;font effects
-Oracle Open Office Chart : characters;fonts and formats
-Oracle Open Office Chart : characters;hyperlinks
-Oracle Open Office Chart : characters;italics
-Oracle Open Office Chart : characters;language selection
-Oracle Open Office Chart : characters;shadowed
-Oracle Open Office Chart : characters;spacing
-Oracle Open Office Chart : characters;special
-Oracle Open Office Chart : characters;underlining
-Oracle Open Office Chart : charcoal sketches filter
-Oracle Open Office Chart : chart legends
-Oracle Open Office Chart : chart legends;hiding
-Oracle Open Office Chart : chart legends;showing icons with labels
-Oracle Open Office Chart : chart types
-Oracle Open Office Chart : chart types;area
-Oracle Open Office Chart : chart types;bubble
-Oracle Open Office Chart : chart types;column and bar
-Oracle Open Office Chart : chart types;column and line
-Oracle Open Office Chart : chart types;line
-Oracle Open Office Chart : chart types;net
-Oracle Open Office Chart : chart types;pie/donut
-Oracle Open Office Chart : chart types;stock
-Oracle Open Office Chart : chart types;XY (scatter)
-Oracle Open Office Chart : charts
-Oracle Open Office Chart : charts;3D views
-Oracle Open Office Chart : charts;aligning
-Oracle Open Office Chart : charts;arranging within stacks
-Oracle Open Office Chart : charts;bars with textures
-Oracle Open Office Chart : charts;choosing chart types
-Oracle Open Office Chart : charts;colors
-Oracle Open Office Chart : charts;copying with link to source cell range
-Oracle Open Office Chart : charts;data labels
-Oracle Open Office Chart : charts;displaying (Calc)
-Oracle Open Office Chart : charts;editing axes
-Oracle Open Office Chart : charts;editing data
-Oracle Open Office Chart : charts;editing legends
-Oracle Open Office Chart : charts;editing titles
-Oracle Open Office Chart : charts;formatting areas
-Oracle Open Office Chart : charts;formatting floors
-Oracle Open Office Chart : charts;formatting walls
-Oracle Open Office Chart : charts;inserting
-Oracle Open Office Chart : charts;overview
-Oracle Open Office Chart : charts;positioning axes
-Oracle Open Office Chart : charts;properties
-Oracle Open Office Chart : charts;reorganizing
-Oracle Open Office Chart : charts;scaling axes
-Oracle Open Office Chart : charts;scaling text
-Oracle Open Office Chart : charts;shortcuts
-Oracle Open Office Chart : charts;showing axes
-Oracle Open Office Chart : charts;updating automatically (Writer)
-Oracle Open Office Chart : check box creation
-Oracle Open Office Chart : Chinese writing systems
-Oracle Open Office Chart : choosing printers
-Oracle Open Office Chart : circle drawings
-Oracle Open Office Chart : Client Side ImageMap
-Oracle Open Office Chart : clipboard
-Oracle Open Office Chart : clipboard;cutting
-Oracle Open Office Chart : clipboard;pasting
-Oracle Open Office Chart : clipboard;pasting formatted/unformatted text
-Oracle Open Office Chart : clipboard;selection clipboard
-Oracle Open Office Chart : clipboard;Unix
-Oracle Open Office Chart : closing
-Oracle Open Office Chart : closing;documents
-Oracle Open Office Chart : closing;toolbars
-Oracle Open Office Chart : collaboration
-Oracle Open Office Chart : color bar
-Oracle Open Office Chart : colors
-Oracle Open Office Chart : colors;adding
-Oracle Open Office Chart : colors;appearance
-Oracle Open Office Chart : colors;backgrounds
-Oracle Open Office Chart : colors;charts
-Oracle Open Office Chart : colors;fill format
-Oracle Open Office Chart : colors;fonts
-Oracle Open Office Chart : colors;grid lines and cells (Calc)
-Oracle Open Office Chart : colors;models
-Oracle Open Office Chart : colors;not printing
-Oracle Open Office Chart : colors;printing in grayscale
-Oracle Open Office Chart : colors;restriction (Calc)
-Oracle Open Office Chart : colors;selection
-Oracle Open Office Chart : column and line charts
-Oracle Open Office Chart : column charts
-Oracle Open Office Chart : column headers
-Oracle Open Office Chart : column headers;displaying (Calc)
-Oracle Open Office Chart : column headers;highlighting (Calc)
-Oracle Open Office Chart : columns
-Oracle Open Office Chart : columns;setting with the mouse
-Oracle Open Office Chart : combination charts
-Oracle Open Office Chart : combo box creation
-Oracle Open Office Chart : command button creation
-Oracle Open Office Chart : command buttons, see push buttons
-Oracle Open Office Chart : command line parameters
-Oracle Open Office Chart : commands
-Oracle Open Office Chart : commands;repeating
-Oracle Open Office Chart : commands;SQL
-Oracle Open Office Chart : comments
-Oracle Open Office Chart : comments;displaying (Calc)
-Oracle Open Office Chart : comments;inserting/editing/deleting/printing
-Oracle Open Office Chart : comments;on changes
-Oracle Open Office Chart : comments;printing in text
-Oracle Open Office Chart : common terms
-Oracle Open Office Chart : common terms;Chinese dictionary
-Oracle Open Office Chart : common terms;glossaries
-Oracle Open Office Chart : common terms;Internet glossary
-Oracle Open Office Chart : comparisons
-Oracle Open Office Chart : comparisons;document versions
-Oracle Open Office Chart : comparisons;operators in default filter dialog
-Oracle Open Office Chart : compatibility settings for MS Word import
-Oracle Open Office Chart : complete screen view
-Oracle Open Office Chart : complex text layout
-Oracle Open Office Chart : complex text layout;definition
-Oracle Open Office Chart : complex text layout;enabling
-Oracle Open Office Chart : complex text layout, see CTL
-Oracle Open Office Chart : compose key to insert special characters
-Oracle Open Office Chart : concatenation, see ampersand symbol
-Oracle Open Office Chart : conditional separators
-Oracle Open Office Chart : conditions
-Oracle Open Office Chart : conditions;in number formats
-Oracle Open Office Chart : conditions;items in Data Navigator
-Oracle Open Office Chart : Configuration Manager
-Oracle Open Office Chart : configuring
-Oracle Open Office Chart : configuring;fax icon
-Oracle Open Office Chart : configuring;Oracle Open Office
-Oracle Open Office Chart : configuring;toolbars
-Oracle Open Office Chart : connections to data sources (Base)
-Oracle Open Office Chart : contents protection
-Oracle Open Office Chart : context menus
-Oracle Open Office Chart : control point display in presentations
-Oracle Open Office Chart : controls
-Oracle Open Office Chart : controls;activating in forms
-Oracle Open Office Chart : controls;adding to documents
-Oracle Open Office Chart : controls;arranging in forms
-Oracle Open Office Chart : controls;arranging within stacks
-Oracle Open Office Chart : controls;assigning data sources
-Oracle Open Office Chart : controls;assigning macros (Basic)
-Oracle Open Office Chart : controls;bound fields/list contents/linked cells
-Oracle Open Office Chart : controls;events
-Oracle Open Office Chart : controls;focus
-Oracle Open Office Chart : controls;formatted fields
-Oracle Open Office Chart : controls;grouping
-Oracle Open Office Chart : controls;hidden
-Oracle Open Office Chart : controls;inserting
-Oracle Open Office Chart : controls;multi-line titles
-Oracle Open Office Chart : controls;positions and sizes
-Oracle Open Office Chart : controls;printing
-Oracle Open Office Chart : controls;properties of form controls
-Oracle Open Office Chart : controls;properties of table controls
-Oracle Open Office Chart : controls;reference by SQL
-Oracle Open Office Chart : controls;rich text control
-Oracle Open Office Chart : controls;select mode
-Oracle Open Office Chart : controls;showing (Writer)
-Oracle Open Office Chart : converters
-Oracle Open Office Chart : converters;Euro converter
-Oracle Open Office Chart : converters;PostScript, UNIX
-Oracle Open Office Chart : converters;XML
-Oracle Open Office Chart : converting
-Oracle Open Office Chart : converting;Hangul/Hanja
-Oracle Open Office Chart : converting;metrics
-Oracle Open Office Chart : converting;Microsoft documents
-Oracle Open Office Chart : converting;Oracle Open Office documents
-Oracle Open Office Chart : converting;Pocket PC formats
-Oracle Open Office Chart : copies
-Oracle Open Office Chart : copies;printing
-Oracle Open Office Chart : copying
-Oracle Open Office Chart : copying;by drag and drop
-Oracle Open Office Chart : copying;data from text documents
-Oracle Open Office Chart : copying;datasource records in spreadsheets
-Oracle Open Office Chart : copying;draw objects
-Oracle Open Office Chart : copying;draw objects between documents
-Oracle Open Office Chart : copying;formatting
-Oracle Open Office Chart : copying;from data source view
-Oracle Open Office Chart : copying;from Gallery
-Oracle Open Office Chart : copying;in Unix
-Oracle Open Office Chart : copying;pictures, between documents
-Oracle Open Office Chart : copying;sheet areas, to text documents
-Oracle Open Office Chart : copying;to Gallery
-Oracle Open Office Chart : copyright for Oracle Open Office
-Oracle Open Office Chart : corner roundings
-Oracle Open Office Chart : crash reports
-Oracle Open Office Chart : criteria of query design (Base)
-Oracle Open Office Chart : cropping pictures
-Oracle Open Office Chart : CTL
-Oracle Open Office Chart : CTL;(not) wrapping words
-Oracle Open Office Chart : CTL;complex text layout languages
-Oracle Open Office Chart : CTL;definition
-Oracle Open Office Chart : CTL;options
-Oracle Open Office Chart : currencies
-Oracle Open Office Chart : currencies;converters
-Oracle Open Office Chart : currencies;format codes
-Oracle Open Office Chart : currency field creation
-Oracle Open Office Chart : currency formats
-Oracle Open Office Chart : cursor
-Oracle Open Office Chart : cursor;allowing in protected areas (Writer)
-Oracle Open Office Chart : cursor;in read-only text
-Oracle Open Office Chart : cursor;quickly moving to an object
-Oracle Open Office Chart : curves
-Oracle Open Office Chart : curves;editing points
-Oracle Open Office Chart : curves;properties in line charts/XY charts
-Oracle Open Office Chart : custom dictionaries
-Oracle Open Office Chart : custom dictionaries;editing
-Oracle Open Office Chart : custom hyphens (Writer)
-Oracle Open Office Chart : custom quotes
-Oracle Open Office Chart : custom templates
-Oracle Open Office Chart : customizing
-Oracle Open Office Chart : customizing;events
-Oracle Open Office Chart : customizing;keyboard
-Oracle Open Office Chart : customizing;menus
-Oracle Open Office Chart : customizing;Oracle Open Office
-Oracle Open Office Chart : customizing;round corners
-Oracle Open Office Chart : customizing;toolbars
-Oracle Open Office Chart : cutting
-Oracle Open Office Chart : dashes
-Oracle Open Office Chart : data
-Oracle Open Office Chart : data;filtering in forms
-Oracle Open Office Chart : data;forms and subforms
-Oracle Open Office Chart : data;read-only
-Oracle Open Office Chart : data;sorting in forms
-Oracle Open Office Chart : data;user data
-Oracle Open Office Chart : data binding change in XForms
-Oracle Open Office Chart : data labels in charts
-Oracle Open Office Chart : Data Navigator
-Oracle Open Office Chart : Data Navigator;adding/editing items
-Oracle Open Office Chart : Data Navigator;display options
-Oracle Open Office Chart : data ranges in charts
-Oracle Open Office Chart : data series
-Oracle Open Office Chart : data source browser
-Oracle Open Office Chart : data source explorer
-Oracle Open Office Chart : data source view
-Oracle Open Office Chart : data source view;drag and drop
-Oracle Open Office Chart : data source view;overview
-Oracle Open Office Chart : data source view;showing
-Oracle Open Office Chart : data sources
-Oracle Open Office Chart : data sources;as tables
-Oracle Open Office Chart : data sources;connection settings (Base)
-Oracle Open Office Chart : data sources;copying records to spreadsheets
-Oracle Open Office Chart : data sources;displaying current
-Oracle Open Office Chart : data sources;LDAP server (Base)
-Oracle Open Office Chart : data sources;Oracle Open Office Base
-Oracle Open Office Chart : data sources;registering address books
-Oracle Open Office Chart : data sources;reports
-Oracle Open Office Chart : data sources;setting for stock charts
-Oracle Open Office Chart : data sources;viewing
-Oracle Open Office Chart : data structure of XForms
-Oracle Open Office Chart : data values in charts
-Oracle Open Office Chart : data, see also values
-Oracle Open Office Chart : database contents
-Oracle Open Office Chart : database contents;inserting as tables
-Oracle Open Office Chart : database contents;inserting as text
-Oracle Open Office Chart : database reports
-Oracle Open Office Chart : Database Wizard (Base)
-Oracle Open Office Chart : databases
-Oracle Open Office Chart : databases;administration through SQL (Base)
-Oracle Open Office Chart : databases;ADO (Base)
-Oracle Open Office Chart : databases;connecting (Base)
-Oracle Open Office Chart : databases;creating
-Oracle Open Office Chart : databases;creating labels
-Oracle Open Office Chart : databases;creating queries
-Oracle Open Office Chart : databases;creating reports
-Oracle Open Office Chart : databases;creating tables
-Oracle Open Office Chart : databases;deleting (Base)
-Oracle Open Office Chart : databases;drag and drop (Base)
-Oracle Open Office Chart : databases;editing tables
-Oracle Open Office Chart : databases;form filters
-Oracle Open Office Chart : databases;formats (Base)
-Oracle Open Office Chart : databases;importing/exporting
-Oracle Open Office Chart : databases;JDBC (Base)
-Oracle Open Office Chart : databases;main page (Base)
-Oracle Open Office Chart : databases;ODBC (Base)
-Oracle Open Office Chart : databases;overview
-Oracle Open Office Chart : databases;registering (Base)
-Oracle Open Office Chart : databases;searching records
-Oracle Open Office Chart : databases;shortcut keys
-Oracle Open Office Chart : databases;sorting
-Oracle Open Office Chart : databases;standard filters
-Oracle Open Office Chart : databases;text formats
-Oracle Open Office Chart : databases;viewing
-Oracle Open Office Chart : date fields
-Oracle Open Office Chart : date fields;creating
-Oracle Open Office Chart : date fields;properties
-Oracle Open Office Chart : date formats
-Oracle Open Office Chart : dates
-Oracle Open Office Chart : dates;default (Calc)
-Oracle Open Office Chart : dates;printing in presentations
-Oracle Open Office Chart : dates;start 1900/01/01 (Calc)
-Oracle Open Office Chart : dates;start 1904/01/01 (Calc)
-Oracle Open Office Chart : dBASE
-Oracle Open Office Chart : dBASE;database settings (Base)
-Oracle Open Office Chart : DDE
-Oracle Open Office Chart : DDE;definition
-Oracle Open Office Chart : deactivating
-Oracle Open Office Chart : deactivating;plug-ins
-Oracle Open Office Chart : decimal places displayed (Calc)
-Oracle Open Office Chart : decimal separator key
-Oracle Open Office Chart : decimal tab stops
-Oracle Open Office Chart : default directories
-Oracle Open Office Chart : default filters
-Oracle Open Office Chart : default filters;comparison operators
-Oracle Open Office Chart : default filters;databases
-Oracle Open Office Chart : default printer
-Oracle Open Office Chart : default printer;setting up
-Oracle Open Office Chart : default printer;UNIX
-Oracle Open Office Chart : default templates
-Oracle Open Office Chart : default templates;changing
-Oracle Open Office Chart : default templates;organizing
-Oracle Open Office Chart : defaults
-Oracle Open Office Chart : defaults;documents
-Oracle Open Office Chart : defaults;file formats in file dialogs
-Oracle Open Office Chart : defaults;file formats in Oracle Open Office
-Oracle Open Office Chart : defaults;fonts
-Oracle Open Office Chart : defaults;grids (Writer/Calc)
-Oracle Open Office Chart : defaults;languages
-Oracle Open Office Chart : defaults;number formats
-Oracle Open Office Chart : defaults;of saving
-Oracle Open Office Chart : defaults;program configuration
-Oracle Open Office Chart : defaults;tab stops in text
-Oracle Open Office Chart : defaults;views
-Oracle Open Office Chart : defining
-Oracle Open Office Chart : defining;arrowheads and other line ends
-Oracle Open Office Chart : defining;colors
-Oracle Open Office Chart : defining;line styles
-Oracle Open Office Chart : defining;paragraph borders
-Oracle Open Office Chart : defining;queries (Base)
-Oracle Open Office Chart : defining;table borders
-Oracle Open Office Chart : deleting
-Oracle Open Office Chart : deleting;all direct formatting
-Oracle Open Office Chart : deleting;comments
-Oracle Open Office Chart : deleting;databases (Base)
-Oracle Open Office Chart : deleting;hyperlinks
-Oracle Open Office Chart : deleting;lines in text
-Oracle Open Office Chart : deleting;models/instances
-Oracle Open Office Chart : deleting;namespaces in XForms
-Oracle Open Office Chart : deleting;tab stops
-Oracle Open Office Chart : deleting;templates
-Oracle Open Office Chart : deleting;XML filters
-Oracle Open Office Chart : depth stagger
-Oracle Open Office Chart : descriptions for objects
-Oracle Open Office Chart : design mode after saving
-Oracle Open Office Chart : design view
-Oracle Open Office Chart : design view;creating forms
-Oracle Open Office Chart : design view;queries/views (Base)
-Oracle Open Office Chart : designing
-Oracle Open Office Chart : designing;database tables
-Oracle Open Office Chart : designing;fonts
-Oracle Open Office Chart : designing;queries (Base)
-Oracle Open Office Chart : detaching toolbars
-Oracle Open Office Chart : dictionaries
-Oracle Open Office Chart : dictionaries;common terms in simplified and traditional chinese
-Oracle Open Office Chart : dictionaries;creating
-Oracle Open Office Chart : dictionaries;editing user-defined
-Oracle Open Office Chart : dictionaries;spellcheck
-Oracle Open Office Chart : dictionaries, see also languages
-Oracle Open Office Chart : digital signatures
-Oracle Open Office Chart : digital signatures;getting/managing/applying
-Oracle Open Office Chart : digital signatures;overview
-Oracle Open Office Chart : digital signatures;WebDAV over HTTPS
-Oracle Open Office Chart : direct formatting
-Oracle Open Office Chart : direct formatting;undoing all
-Oracle Open Office Chart : directories
-Oracle Open Office Chart : directories;creating new
-Oracle Open Office Chart : directories;directory structure
-Oracle Open Office Chart : disabled persons
-Oracle Open Office Chart : displaying
-Oracle Open Office Chart : displaying;comments (Calc)
-Oracle Open Office Chart : displaying;comments in text documents
-Oracle Open Office Chart : displaying;non-printing characters (Writer)
-Oracle Open Office Chart : displaying;pictures and objects (Writer)
-Oracle Open Office Chart : displaying;tables (Writer)
-Oracle Open Office Chart : displaying;zero values (Calc)
-Oracle Open Office Chart : distances
-Oracle Open Office Chart : distinct values in SQL queries
-Oracle Open Office Chart : distorting in drawings
-Oracle Open Office Chart : distributing XML filters
-Oracle Open Office Chart : docking
-Oracle Open Office Chart : docking;definition
-Oracle Open Office Chart : docking;toolbars
-Oracle Open Office Chart : docking;windows
-Oracle Open Office Chart : Document Converter Wizard
-Oracle Open Office Chart : Document Map, see Navigator
-Oracle Open Office Chart : document types in Oracle Open Office
-Oracle Open Office Chart : documents
-Oracle Open Office Chart : documents;changing titles
-Oracle Open Office Chart : documents;closing
-Oracle Open Office Chart : documents;comparing
-Oracle Open Office Chart : documents;contents as lists
-Oracle Open Office Chart : documents;editing time
-Oracle Open Office Chart : documents;exporting
-Oracle Open Office Chart : documents;importing
-Oracle Open Office Chart : documents;languages
-Oracle Open Office Chart : documents;measurement units in
-Oracle Open Office Chart : documents;merging
-Oracle Open Office Chart : documents;number of pages/tables/sheets
-Oracle Open Office Chart : documents;opening
-Oracle Open Office Chart : documents;opening in design mode
-Oracle Open Office Chart : documents;opening with templates
-Oracle Open Office Chart : documents;organizing
-Oracle Open Office Chart : documents;printing
-Oracle Open Office Chart : documents;read-only
-Oracle Open Office Chart : documents;reloading
-Oracle Open Office Chart : documents;saving
-Oracle Open Office Chart : documents;saving automatically
-Oracle Open Office Chart : documents;saving in other formats
-Oracle Open Office Chart : documents;sending as e-mail
-Oracle Open Office Chart : documents;styles changed
-Oracle Open Office Chart : documents;version management
-Oracle Open Office Chart : documents;version numbers
-Oracle Open Office Chart : donut charts
-Oracle Open Office Chart : dotted areas
-Oracle Open Office Chart : double-line spacing in paragraphs
-Oracle Open Office Chart : double-line writing in Asian layout
-Oracle Open Office Chart : drag and drop
-Oracle Open Office Chart : drag and drop;copying and pasting text
-Oracle Open Office Chart : drag and drop;data source view
-Oracle Open Office Chart : drag and drop;from Gallery to draw objects
-Oracle Open Office Chart : drag and drop;overview
-Oracle Open Office Chart : drag and drop;pictures
-Oracle Open Office Chart : drag and drop;to Gallery
-Oracle Open Office Chart : draw objects
-Oracle Open Office Chart : draw objects;adding/editing/copying
-Oracle Open Office Chart : draw objects;anchoring
-Oracle Open Office Chart : draw objects;arranging within stacks
-Oracle Open Office Chart : draw objects;copying between documents
-Oracle Open Office Chart : draw objects;displaying (Calc)
-Oracle Open Office Chart : draw objects;dropping Gallery pictures
-Oracle Open Office Chart : draw objects;flipping
-Oracle Open Office Chart : draw objects;legends
-Oracle Open Office Chart : draw objects;positioning and resizing
-Oracle Open Office Chart : draw objects;protecting
-Oracle Open Office Chart : draw objects;slanting
-Oracle Open Office Chart : draw objects;text in
-Oracle Open Office Chart : Drawing bar
-Oracle Open Office Chart : drawing lines in text
-Oracle Open Office Chart : drawings
-Oracle Open Office Chart : drawings;creating/opening
-Oracle Open Office Chart : drawings;languages
-Oracle Open Office Chart : drawings;printing
-Oracle Open Office Chart : drawings;printing defaults
-Oracle Open Office Chart : drawings;printing in text documents
-Oracle Open Office Chart : drawings;saving
-Oracle Open Office Chart : drawings;saving automatically
-Oracle Open Office Chart : drawings;saving in other formats
-Oracle Open Office Chart : drawings;sending as e-mail
-Oracle Open Office Chart : drawings;showing (Writer)
-Oracle Open Office Chart : drawings, see also draw objects
-Oracle Open Office Chart : drop-down lists in form functions
-Oracle Open Office Chart : e-mail attachments
-Oracle Open Office Chart : Edit File icon
-Oracle Open Office Chart : edit mode
-Oracle Open Office Chart : edit mode;after opening
-Oracle Open Office Chart : edit mode;through Enter key (Calc)
-Oracle Open Office Chart : Edit Points bar
-Oracle Open Office Chart : editing
-Oracle Open Office Chart : editing;chart axes
-Oracle Open Office Chart : editing;chart data
-Oracle Open Office Chart : editing;chart legends
-Oracle Open Office Chart : editing;chart titles
-Oracle Open Office Chart : editing;comments
-Oracle Open Office Chart : editing;data binding of XForms
-Oracle Open Office Chart : editing;database tables and queries
-Oracle Open Office Chart : editing;draw objects
-Oracle Open Office Chart : editing;Fontwork objects
-Oracle Open Office Chart : editing;hyperlinks
-Oracle Open Office Chart : editing;menus
-Oracle Open Office Chart : editing;objects
-Oracle Open Office Chart : editing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Chart : editing;pictures
-Oracle Open Office Chart : editing;reports
-Oracle Open Office Chart : editing;shortcut keys
-Oracle Open Office Chart : editing;tab stops
-Oracle Open Office Chart : editing;templates
-Oracle Open Office Chart : editing;titles
-Oracle Open Office Chart : editing;toolbars
-Oracle Open Office Chart : editing;undoing
-Oracle Open Office Chart : editing;XForms
-Oracle Open Office Chart : editing time of documents
-Oracle Open Office Chart : editors
-Oracle Open Office Chart : editors;formula editor
-Oracle Open Office Chart : editors;ImageMap editor
-Oracle Open Office Chart : effects
-Oracle Open Office Chart : effects;font positions
-Oracle Open Office Chart : effects;fonts
-Oracle Open Office Chart : effects;Fontwork icons
-Oracle Open Office Chart : empty documents
-Oracle Open Office Chart : empty paragraph removal
-Oracle Open Office Chart : encryption of contents
-Oracle Open Office Chart : entering groups
-Oracle Open Office Chart : entering text from right to left
-Oracle Open Office Chart : equal sign, see also operators
-Oracle Open Office Chart : equations in formula editor
-Oracle Open Office Chart : error bars in charts
-Oracle Open Office Chart : error indicators in charts
-Oracle Open Office Chart : Error Report Tool
-Oracle Open Office Chart : Euro
-Oracle Open Office Chart : Euro;currency formats
-Oracle Open Office Chart : Euro;Euro Converter Wizard
-Oracle Open Office Chart : even/odd pages
-Oracle Open Office Chart : even/odd pages;printing
-Oracle Open Office Chart : events
-Oracle Open Office Chart : events;assigning scripts
-Oracle Open Office Chart : events;controls
-Oracle Open Office Chart : events;customizing
-Oracle Open Office Chart : events;in forms
-Oracle Open Office Chart : Excel
-Oracle Open Office Chart : Excel;saving as
-Oracle Open Office Chart : Excel;search criteria
-Oracle Open Office Chart : exceptions
-Oracle Open Office Chart : exceptions;user-defined dictionaries
-Oracle Open Office Chart : exchanging, see also replacing
-Oracle Open Office Chart : executing SQL commands
-Oracle Open Office Chart : exiting
-Oracle Open Office Chart : exiting;groups
-Oracle Open Office Chart : exiting;Oracle Open Office
-Oracle Open Office Chart : expanding formatting (Calc)
-Oracle Open Office Chart : explorer of data sources
-Oracle Open Office Chart : export filters
-Oracle Open Office Chart : exporting
-Oracle Open Office Chart : exporting;bitmaps
-Oracle Open Office Chart : exporting;HTML and text documents
-Oracle Open Office Chart : exporting;Microsoft Office documents with VBA code
-Oracle Open Office Chart : exporting;spreadsheets to text format
-Oracle Open Office Chart : exporting;templates
-Oracle Open Office Chart : exporting;to foreign formats
-Oracle Open Office Chart : exporting;to HTML
-Oracle Open Office Chart : exporting;to Microsoft Office formats
-Oracle Open Office Chart : exporting;to PDF
-Oracle Open Office Chart : exporting;to PostScript format
-Oracle Open Office Chart : exporting;to XML
-Oracle Open Office Chart : exporting;XML files
-Oracle Open Office Chart : extended tips in Help
-Oracle Open Office Chart : extension mode in text
-Oracle Open Office Chart : extensions
-Oracle Open Office Chart : extensions;Extension Manager
-Oracle Open Office Chart : extensions;file formats
-Oracle Open Office Chart : external keys (Base)
-Oracle Open Office Chart : faster printing
-Oracle Open Office Chart : faxes
-Oracle Open Office Chart : faxes;configuring Oracle Open Office
-Oracle Open Office Chart : faxes;fax programs/fax printers under UNIX
-Oracle Open Office Chart : faxes;selecting a fax machine
-Oracle Open Office Chart : faxes;sending
-Oracle Open Office Chart : faxes;wizards
-Oracle Open Office Chart : feedback
-Oracle Open Office Chart : feedback;automatically
-Oracle Open Office Chart : fields
-Oracle Open Office Chart : fields;database tables
-Oracle Open Office Chart : fields;displaying field codes (Writer)
-Oracle Open Office Chart : fields;formatted fields
-Oracle Open Office Chart : fields;updating automatically (Writer)
-Oracle Open Office Chart : file associations for Microsoft Office
-Oracle Open Office Chart : file filters
-Oracle Open Office Chart : file filters;mobile devices
-Oracle Open Office Chart : file filters;XML
-Oracle Open Office Chart : file formats
-Oracle Open Office Chart : file formats;changing Oracle Open Office defaults
-Oracle Open Office Chart : file formats;OpenDocument/XML
-Oracle Open Office Chart : file formats;saving always in other formats
-Oracle Open Office Chart : file selection button
-Oracle Open Office Chart : file sharing options for current document
-Oracle Open Office Chart : files
-Oracle Open Office Chart : files;filters and formats
-Oracle Open Office Chart : files;importing
-Oracle Open Office Chart : files;opening
-Oracle Open Office Chart : files;opening with placeholders
-Oracle Open Office Chart : files;properties
-Oracle Open Office Chart : files;saving
-Oracle Open Office Chart : files;saving automatically
-Oracle Open Office Chart : files;saving in other formats
-Oracle Open Office Chart : files;sending as e-mail
-Oracle Open Office Chart : files;version numbers
-Oracle Open Office Chart : files and folders in Oracle Open Office
-Oracle Open Office Chart : fill characters with tabulators
-Oracle Open Office Chart : fill colors for areas
-Oracle Open Office Chart : fill patterns for areas
-Oracle Open Office Chart : filter conditions
-Oracle Open Office Chart : filter conditions;connecting
-Oracle Open Office Chart : filter conditions;in queries (Base)
-Oracle Open Office Chart : filtering
-Oracle Open Office Chart : filtering;data in databases
-Oracle Open Office Chart : filtering;data in forms
-Oracle Open Office Chart : filters
-Oracle Open Office Chart : filters;comparison operators
-Oracle Open Office Chart : filters;for import and export
-Oracle Open Office Chart : filters;Navigator
-Oracle Open Office Chart : filters;pictures
-Oracle Open Office Chart : filters;XML filter settings
-Oracle Open Office Chart : Find tab in Help
-Oracle Open Office Chart : finding
-Oracle Open Office Chart : finding;in all sheets
-Oracle Open Office Chart : finding;records in form documents
-Oracle Open Office Chart : finding;selections
-Oracle Open Office Chart : finding;similarity search
-Oracle Open Office Chart : fitting to pages
-Oracle Open Office Chart : fitting to pages;print settings in Math
-Oracle Open Office Chart : fitting to pages;print settings in presentations
-Oracle Open Office Chart : fixed text
-Oracle Open Office Chart : fixed text;form functions
-Oracle Open Office Chart : fixing toolbars
-Oracle Open Office Chart : flipping draw objects
-Oracle Open Office Chart : floating frames in HTML documents
-Oracle Open Office Chart : floating toolbars
-Oracle Open Office Chart : focus of controls
-Oracle Open Office Chart : folder creation
-Oracle Open Office Chart : font lists
-Oracle Open Office Chart : font name box
-Oracle Open Office Chart : font sizes
-Oracle Open Office Chart : font sizes;bullets
-Oracle Open Office Chart : font sizes;relative changes
-Oracle Open Office Chart : font sizes;scaling on screen
-Oracle Open Office Chart : font sizes;text
-Oracle Open Office Chart : fonts
-Oracle Open Office Chart : fonts;adding under UNIX
-Oracle Open Office Chart : fonts;changing in templates
-Oracle Open Office Chart : fonts;colors
-Oracle Open Office Chart : fonts;default settings
-Oracle Open Office Chart : fonts;effects
-Oracle Open Office Chart : fonts;for HTML and Basic
-Oracle Open Office Chart : fonts;formats
-Oracle Open Office Chart : fonts;outlines
-Oracle Open Office Chart : fonts;positions in text
-Oracle Open Office Chart : fonts;shadows
-Oracle Open Office Chart : fonts;specifying several
-Oracle Open Office Chart : fonts;strikethrough
-Oracle Open Office Chart : fonts;styles
-Oracle Open Office Chart : fonts;text objects
-Oracle Open Office Chart : Fontwork icons
-Oracle Open Office Chart : footers
-Oracle Open Office Chart : footers;backgrounds
-Oracle Open Office Chart : form controls
-Oracle Open Office Chart : form controls;assigning macros
-Oracle Open Office Chart : form controls;protecting
-Oracle Open Office Chart : form controls;toolbars
-Oracle Open Office Chart : form fields
-Oracle Open Office Chart : form filters
-Oracle Open Office Chart : Form Navigator
-Oracle Open Office Chart : format codes
-Oracle Open Office Chart : format codes;numbers
-Oracle Open Office Chart : format filling printing in Oracle Open Office Math
-Oracle Open Office Chart : Format Paintbrush
-Oracle Open Office Chart : formats
-Oracle Open Office Chart : formats;Asian layout
-Oracle Open Office Chart : formats;fonts
-Oracle Open Office Chart : formats;maximizing page formats
-Oracle Open Office Chart : formats;number and currency formats
-Oracle Open Office Chart : formats;of currencies/date/time
-Oracle Open Office Chart : formats;on opening and saving
-Oracle Open Office Chart : formats;pasting in special formats
-Oracle Open Office Chart : formats;positions
-Oracle Open Office Chart : formats;tabulators
-Oracle Open Office Chart : formatted fields
-Oracle Open Office Chart : formatted fields;form functions
-Oracle Open Office Chart : formatted fields;properties
-Oracle Open Office Chart : formatting
-Oracle Open Office Chart : formatting;Asian typography
-Oracle Open Office Chart : formatting;axes in charts
-Oracle Open Office Chart : formatting;chart areas
-Oracle Open Office Chart : formatting;chart floors
-Oracle Open Office Chart : formatting;chart legends
-Oracle Open Office Chart : formatting;chart titles
-Oracle Open Office Chart : formatting;chart walls
-Oracle Open Office Chart : formatting;copying
-Oracle Open Office Chart : formatting;definition
-Oracle Open Office Chart : formatting;expanding (Calc)
-Oracle Open Office Chart : formatting;font effects
-Oracle Open Office Chart : formatting;hyperlinks
-Oracle Open Office Chart : formatting;pages
-Oracle Open Office Chart : formatting;printer metrics (Writer)
-Oracle Open Office Chart : formatting;undoing
-Oracle Open Office Chart : formatting;undoing when writing
-Oracle Open Office Chart : forms
-Oracle Open Office Chart : forms;browsing
-Oracle Open Office Chart : forms;Combo Box/List Box Wizard
-Oracle Open Office Chart : forms;creating
-Oracle Open Office Chart : forms;data
-Oracle Open Office Chart : forms;designing (Base)
-Oracle Open Office Chart : forms;events
-Oracle Open Office Chart : forms;filtering data
-Oracle Open Office Chart : forms;finding records
-Oracle Open Office Chart : forms;focus after opening
-Oracle Open Office Chart : forms;general information (Base)
-Oracle Open Office Chart : forms;grouping controls
-Oracle Open Office Chart : forms;HTML filters
-Oracle Open Office Chart : forms;Navigator
-Oracle Open Office Chart : forms;opening in design mode
-Oracle Open Office Chart : forms;properties
-Oracle Open Office Chart : forms;sorting data
-Oracle Open Office Chart : forms;subforms
-Oracle Open Office Chart : forms;wizards
-Oracle Open Office Chart : forms;XForms
-Oracle Open Office Chart : formula texts
-Oracle Open Office Chart : formula texts;printing in Oracle Open Office Math
-Oracle Open Office Chart : formulas
-Oracle Open Office Chart : formulas;new
-Oracle Open Office Chart : formulas;starting formula editor
-Oracle Open Office Chart : formulas in reports
-Oracle Open Office Chart : formulas in reports;editing
-Oracle Open Office Chart : forums and support
-Oracle Open Office Chart : frames
-Oracle Open Office Chart : frames;around paragraphs
-Oracle Open Office Chart : frames;around tables
-Oracle Open Office Chart : frames;AutoCorrect function
-Oracle Open Office Chart : frames;backgrounds
-Oracle Open Office Chart : frames;captions (Writer)
-Oracle Open Office Chart : frames;printing in Oracle Open Office Math
-Oracle Open Office Chart : frames;protecting
-Oracle Open Office Chart : frames;selection frames
-Oracle Open Office Chart : frames;text fitting to frames
-Oracle Open Office Chart : freeform lines
-Oracle Open Office Chart : freeform lines;draw functions
-Oracle Open Office Chart : FTP
-Oracle Open Office Chart : FTP;opening documents
-Oracle Open Office Chart : FTP;saving documents
-Oracle Open Office Chart : full joins (Base)
-Oracle Open Office Chart : full screen view
-Oracle Open Office Chart : full-text search in Help
-Oracle Open Office Chart : functions in reports
-Oracle Open Office Chart : functions in reports;editing
-Oracle Open Office Chart : Gallery
-Oracle Open Office Chart : Gallery;adding pictures
-Oracle Open Office Chart : Gallery;dragging pictures to draw objects
-Oracle Open Office Chart : Gallery;hiding/showing
-Oracle Open Office Chart : Gallery;inserting pictures from
-Oracle Open Office Chart : get method for form transmissions
-Oracle Open Office Chart : getting support
-Oracle Open Office Chart : GIF format
-Oracle Open Office Chart : glossaries
-Oracle Open Office Chart : glossaries;common terms
-Oracle Open Office Chart : glossaries;Internet terms
-Oracle Open Office Chart : gradients off for faster printing
-Oracle Open Office Chart : graphic objects, see draw objects
-Oracle Open Office Chart : graphical text art
-Oracle Open Office Chart : graphics
-Oracle Open Office Chart : graphics;cache
-Oracle Open Office Chart : graphics;protecting
-Oracle Open Office Chart : graphics, see also pictures
-Oracle Open Office Chart : grayscale printing
-Oracle Open Office Chart : grid controls
-Oracle Open Office Chart : grid controls;form functions
-Oracle Open Office Chart : grids
-Oracle Open Office Chart : grids;defaults (Writer/Calc)
-Oracle Open Office Chart : grids;display options (Impress/Draw)
-Oracle Open Office Chart : grids;displaying lines (Calc)
-Oracle Open Office Chart : grids;formatting axes
-Oracle Open Office Chart : grids;inserting in charts
-Oracle Open Office Chart : group box creation
-Oracle Open Office Chart : groups
-Oracle Open Office Chart : groups;entering/exiting/ungrouping
-Oracle Open Office Chart : groups;naming
-Oracle Open Office Chart : groups;of controls
-Oracle Open Office Chart : guides
-Oracle Open Office Chart : guides;display options (Impress/Draw)
-Oracle Open Office Chart : guides;displaying when moving objects (Impress)
-Oracle Open Office Chart : guides;showing (Calc)
-Oracle Open Office Chart : guides;showing when moving frames (Writer)
-Oracle Open Office Chart : gutter
-Oracle Open Office Chart : handles
-Oracle Open Office Chart : handles;displaying (Writer)
-Oracle Open Office Chart : handles;scaling
-Oracle Open Office Chart : handles;showing simple/large handles (Calc)
-Oracle Open Office Chart : Hangul/Hanja
-Oracle Open Office Chart : hatching
-Oracle Open Office Chart : headers
-Oracle Open Office Chart : headers;backgrounds
-Oracle Open Office Chart : headings
-Oracle Open Office Chart : headings;entering as text box
-Oracle Open Office Chart : Hebrew
-Oracle Open Office Chart : Hebrew;entering text
-Oracle Open Office Chart : Hebrew;language settings
-Oracle Open Office Chart : Help
-Oracle Open Office Chart : Help;bookmarks
-Oracle Open Office Chart : Help;extended tips on/off
-Oracle Open Office Chart : Help;full-text search
-Oracle Open Office Chart : Help;Help tips
-Oracle Open Office Chart : Help;keywords
-Oracle Open Office Chart : Help;navigation pane showing/hiding
-Oracle Open Office Chart : Help;style sheets
-Oracle Open Office Chart : Help;topics
-Oracle Open Office Chart : Help Agent
-Oracle Open Office Chart : Help Agent;help
-Oracle Open Office Chart : Help Agent;options
-Oracle Open Office Chart : Help tips
-Oracle Open Office Chart : Help tips;hiding
-Oracle Open Office Chart : hidden controls in Form Navigator
-Oracle Open Office Chart : hidden fields display (Writer)
-Oracle Open Office Chart : hidden pages
-Oracle Open Office Chart : hidden pages;printing in presentations
-Oracle Open Office Chart : hidden text
-Oracle Open Office Chart : hidden text;showing (Writer)
-Oracle Open Office Chart : hiding
-Oracle Open Office Chart : hiding;changes
-Oracle Open Office Chart : hiding;chart legends
-Oracle Open Office Chart : hiding;docked windows
-Oracle Open Office Chart : hiding;navigation pane in Help window
-Oracle Open Office Chart : high contrast mode
-Oracle Open Office Chart : Hindi
-Oracle Open Office Chart : Hindi;entering text
-Oracle Open Office Chart : Hindi;language settings
-Oracle Open Office Chart : horizontal scrollbars (Writer)
-Oracle Open Office Chart : hotspots
-Oracle Open Office Chart : HowTos for charts
-Oracle Open Office Chart : HTML
-Oracle Open Office Chart : HTML;definition
-Oracle Open Office Chart : HTML;export character set
-Oracle Open Office Chart : HTML;fonts for source display
-Oracle Open Office Chart : HTML;importing META tags
-Oracle Open Office Chart : HTML;live presentations
-Oracle Open Office Chart : HTML documents
-Oracle Open Office Chart : HTML documents;auto reloading
-Oracle Open Office Chart : HTML documents;importing/exporting
-Oracle Open Office Chart : HTML documents;META tags in
-Oracle Open Office Chart : HTML documents;new
-Oracle Open Office Chart : HTML documents;source text
-Oracle Open Office Chart : hyperlinks
-Oracle Open Office Chart : hyperlinks;assigning macros
-Oracle Open Office Chart : hyperlinks;character formats
-Oracle Open Office Chart : hyperlinks;definition
-Oracle Open Office Chart : hyperlinks;deleting
-Oracle Open Office Chart : hyperlinks;editing
-Oracle Open Office Chart : hyperlinks;inserting
-Oracle Open Office Chart : hyperlinks;relative and absolute
-Oracle Open Office Chart : hyperlinks;turning off automatic recognition
-Oracle Open Office Chart : hyperlinks, see also links
-Oracle Open Office Chart : hyphenation
-Oracle Open Office Chart : hyphenation;activating for a language
-Oracle Open Office Chart : hyphenation;minimal number of characters
-Oracle Open Office Chart : hyphens
-Oracle Open Office Chart : hyphens;displaying custom (Writer)
-Oracle Open Office Chart : hyphens;inserting custom
-Oracle Open Office Chart : icon bars, see toolbars
-Oracle Open Office Chart : icon sizes
-Oracle Open Office Chart : ignore list for spellcheck
-Oracle Open Office Chart : illumination
-Oracle Open Office Chart : illumination;3D charts
-Oracle Open Office Chart : illustrations, see pictures
-Oracle Open Office Chart : image button creation
-Oracle Open Office Chart : image control creation
-Oracle Open Office Chart : ImageMap
-Oracle Open Office Chart : ImageMap;definition
-Oracle Open Office Chart : ImageMap;editor
-Oracle Open Office Chart : images
-Oracle Open Office Chart : images;ImageMap
-Oracle Open Office Chart : images;inserting and editing bitmaps
-Oracle Open Office Chart : images, see also pictures
-Oracle Open Office Chart : IME
-Oracle Open Office Chart : IME;definition
-Oracle Open Office Chart : IME;showing/hiding
-Oracle Open Office Chart : import filters
-Oracle Open Office Chart : import restrictions for Microsoft Office
-Oracle Open Office Chart : importing
-Oracle Open Office Chart : importing;bitmaps
-Oracle Open Office Chart : importing;compatibility settings for text import
-Oracle Open Office Chart : importing;databases
-Oracle Open Office Chart : importing;documents in other formats
-Oracle Open Office Chart : importing;from XML
-Oracle Open Office Chart : importing;HTML and text documents
-Oracle Open Office Chart : importing;HTML with META tags
-Oracle Open Office Chart : importing;Microsoft Office documents with VBA code
-Oracle Open Office Chart : importing;tables in text format
-Oracle Open Office Chart : importing;templates
-Oracle Open Office Chart : improvement program
-Oracle Open Office Chart : inches
-Oracle Open Office Chart : Index tab in Help
-Oracle Open Office Chart : indexes
-Oracle Open Office Chart : indexes;backgrounds
-Oracle Open Office Chart : indexes;showing/hiding Help index tab
-Oracle Open Office Chart : indicator lines in text
-Oracle Open Office Chart : inner joins (Base)
-Oracle Open Office Chart : input method window
-Oracle Open Office Chart : insert mode for entering text
-Oracle Open Office Chart : inserting
-Oracle Open Office Chart : inserting;buttons in toolbars
-Oracle Open Office Chart : inserting;cell ranges from spreadsheets
-Oracle Open Office Chart : inserting;charts
-Oracle Open Office Chart : inserting;clipboard options
-Oracle Open Office Chart : inserting;comments
-Oracle Open Office Chart : inserting;data from text documents
-Oracle Open Office Chart : inserting;datasource records in spreadsheets
-Oracle Open Office Chart : inserting;drawings
-Oracle Open Office Chart : inserting;floating frames
-Oracle Open Office Chart : inserting;Fontwork objects
-Oracle Open Office Chart : inserting;form fields
-Oracle Open Office Chart : inserting;hyperlinks
-Oracle Open Office Chart : inserting;line breaks in cells
-Oracle Open Office Chart : inserting;movies/sounds
-Oracle Open Office Chart : inserting;new text tables defaults
-Oracle Open Office Chart : inserting;objects from Gallery
-Oracle Open Office Chart : inserting;OLE objects
-Oracle Open Office Chart : inserting;paragraph borders
-Oracle Open Office Chart : inserting;paragraph bullets
-Oracle Open Office Chart : inserting;pictures in Gallery
-Oracle Open Office Chart : inserting;plug-ins
-Oracle Open Office Chart : inserting;push buttons
-Oracle Open Office Chart : inserting;special characters
-Oracle Open Office Chart : inserting;tab stops
-Oracle Open Office Chart : inserting;textures on chart bars
-Oracle Open Office Chart : installing
-Oracle Open Office Chart : installing;ActiveX control
-Oracle Open Office Chart : installing;mobile device filters
-Oracle Open Office Chart : installing;UNO components
-Oracle Open Office Chart : installing;XML filters
-Oracle Open Office Chart : instructions
-Oracle Open Office Chart : instructions;general
-Oracle Open Office Chart : Internet
-Oracle Open Office Chart : Internet;checking for updates
-Oracle Open Office Chart : Internet;Internet Explorer for displaying Oracle Open Office documents
-Oracle Open Office Chart : Internet;presentations
-Oracle Open Office Chart : Internet;starting searches
-Oracle Open Office Chart : Internet glossary
-Oracle Open Office Chart : invert filter
-Oracle Open Office Chart : invisible areas
-Oracle Open Office Chart : italic text
-Oracle Open Office Chart : iterative references in spreadsheets
-Oracle Open Office Chart : Java
-Oracle Open Office Chart : Java;definition
-Oracle Open Office Chart : Java;setting options
-Oracle Open Office Chart : JDBC
-Oracle Open Office Chart : JDBC;databases (Base)
-Oracle Open Office Chart : JDBC;definition
-Oracle Open Office Chart : joining
-Oracle Open Office Chart : joining;paragraphs
-Oracle Open Office Chart : joining;tables (Base)
-Oracle Open Office Chart : joins in databases (Base)
-Oracle Open Office Chart : justifying text
-Oracle Open Office Chart : kerning
-Oracle Open Office Chart : kerning;Asian texts
-Oracle Open Office Chart : kerning;definition
-Oracle Open Office Chart : kerning;in characters
-Oracle Open Office Chart : key fields for relations (Base)
-Oracle Open Office Chart : keyboard
-Oracle Open Office Chart : keyboard;assigning/editing shortcut keys
-Oracle Open Office Chart : keyboard;general commands
-Oracle Open Office Chart : keyboard;removing numbering
-Oracle Open Office Chart : keys
-Oracle Open Office Chart : keys;adding push buttons
-Oracle Open Office Chart : keys;primary keys (Base)
-Oracle Open Office Chart : kiosk export
-Oracle Open Office Chart : labels
-Oracle Open Office Chart : labels;creating and synchronizing
-Oracle Open Office Chart : labels;for charts
-Oracle Open Office Chart : labels;for draw objects
-Oracle Open Office Chart : labels;form functions
-Oracle Open Office Chart : labels;from databases
-Oracle Open Office Chart : labels, see also names/callouts
-Oracle Open Office Chart : languages
-Oracle Open Office Chart : languages;activating modules
-Oracle Open Office Chart : languages;Asian support
-Oracle Open Office Chart : languages;complex text layout
-Oracle Open Office Chart : languages;locale settings
-Oracle Open Office Chart : languages;selecting for text
-Oracle Open Office Chart : languages;setting options
-Oracle Open Office Chart : languages;spellcheck
-Oracle Open Office Chart : languages;spellchecking and formatting
-Oracle Open Office Chart : large handles (Writer)
-Oracle Open Office Chart : large icons
-Oracle Open Office Chart : layer arrangement
-Oracle Open Office Chart : layout
-Oracle Open Office Chart : layout;importing Word documents
-Oracle Open Office Chart : layout;pages
-Oracle Open Office Chart : LDAP server
-Oracle Open Office Chart : LDAP server;address books (Base)
-Oracle Open Office Chart : LDAP server;sign on options
-Oracle Open Office Chart : leading between paragraphs
-Oracle Open Office Chart : left alignment of paragraphs
-Oracle Open Office Chart : left joins (Base)
-Oracle Open Office Chart : legends
-Oracle Open Office Chart : legends;charts
-Oracle Open Office Chart : legends;draw objects
-Oracle Open Office Chart : legends;rounding corners
-Oracle Open Office Chart : Letter Wizard
-Oracle Open Office Chart : levels
-Oracle Open Office Chart : levels;depth stagger
-Oracle Open Office Chart : levels;macro security
-Oracle Open Office Chart : limits of tables (Writer)
-Oracle Open Office Chart : line breaks
-Oracle Open Office Chart : line breaks;in cells
-Oracle Open Office Chart : line charts
-Oracle Open Office Chart : line spacing
-Oracle Open Office Chart : line spacing;context menu in paragraphs
-Oracle Open Office Chart : line spacing;paragraph
-Oracle Open Office Chart : line styles
-Oracle Open Office Chart : line styles;applying
-Oracle Open Office Chart : line styles;defining
-Oracle Open Office Chart : lines
-Oracle Open Office Chart : lines;defining ends
-Oracle Open Office Chart : lines;draw functions
-Oracle Open Office Chart : lines;drawing in text
-Oracle Open Office Chart : lines;editing points
-Oracle Open Office Chart : lines;removing automatic lines
-Oracle Open Office Chart : lines of text
-Oracle Open Office Chart : lines of text;alignment
-Oracle Open Office Chart : links
-Oracle Open Office Chart : links;between cells and controls
-Oracle Open Office Chart : links;by drag and drop
-Oracle Open Office Chart : links;character formats
-Oracle Open Office Chart : links;definition
-Oracle Open Office Chart : links;editing hyperlinks
-Oracle Open Office Chart : links;inserting
-Oracle Open Office Chart : links;modifying
-Oracle Open Office Chart : links;opening files with
-Oracle Open Office Chart : links;relational databases (Base)
-Oracle Open Office Chart : links;turning off automatic recognition
-Oracle Open Office Chart : links;updating options (Writer)
-Oracle Open Office Chart : links;updating specific links
-Oracle Open Office Chart : list box creation
-Oracle Open Office Chart : lists
-Oracle Open Office Chart : lists;data assigned to controls
-Oracle Open Office Chart : lists;registered databases (Base)
-Oracle Open Office Chart : lists;regular expressions
-Oracle Open Office Chart : live presentations on the Internet
-Oracle Open Office Chart : loading
-Oracle Open Office Chart : loading;documents
-Oracle Open Office Chart : loading;documents from other formats
-Oracle Open Office Chart : loading;HTML documents, automatically
-Oracle Open Office Chart : loading;Microsoft Office documents with VBA code
-Oracle Open Office Chart : loading;reloading
-Oracle Open Office Chart : loading;XML files
-Oracle Open Office Chart : locale settings
-Oracle Open Office Chart : logarithmic scaling along axes
-Oracle Open Office Chart : lowercase letters
-Oracle Open Office Chart : lowercase letters;font effects
-Oracle Open Office Chart : Macro Wizard (Base)
-Oracle Open Office Chart : macros
-Oracle Open Office Chart : macros;assigning to events in forms
-Oracle Open Office Chart : macros;attaching new (Base)
-Oracle Open Office Chart : macros;in MS Office documents
-Oracle Open Office Chart : macros;interrupting
-Oracle Open Office Chart : macros;organizing
-Oracle Open Office Chart : macros;recording
-Oracle Open Office Chart : macros;security
-Oracle Open Office Chart : macros;security levels
-Oracle Open Office Chart : macros;security warning dialog
-Oracle Open Office Chart : macros;selecting security warnings
-Oracle Open Office Chart : magnifiers
-Oracle Open Office Chart : margins
-Oracle Open Office Chart : margins;pages
-Oracle Open Office Chart : margins;setting with the mouse
-Oracle Open Office Chart : margins;shadows
-Oracle Open Office Chart : marking changes
-Oracle Open Office Chart : marking, see selecting
-Oracle Open Office Chart : Math formula editor
-Oracle Open Office Chart : mean value lines in charts
-Oracle Open Office Chart : measurement units
-Oracle Open Office Chart : measurement units;changing on rulers
-Oracle Open Office Chart : measurement units;converting
-Oracle Open Office Chart : measurement units;selecting
-Oracle Open Office Chart : Media Player window
-Oracle Open Office Chart : menus
-Oracle Open Office Chart : menus;activating context menus
-Oracle Open Office Chart : menus;assigning macros
-Oracle Open Office Chart : menus;customizing
-Oracle Open Office Chart : merging
-Oracle Open Office Chart : merging;documents
-Oracle Open Office Chart : META tags
-Oracle Open Office Chart : metrics
-Oracle Open Office Chart : metrics;converting
-Oracle Open Office Chart : metrics;document formatting (Writer)
-Oracle Open Office Chart : metrics;in sheets
-Oracle Open Office Chart : Microsoft Office
-Oracle Open Office Chart : Microsoft Office;Access databases (base)
-Oracle Open Office Chart : Microsoft Office;as default file format
-Oracle Open Office Chart : Microsoft Office;document import restrictions
-Oracle Open Office Chart : Microsoft Office;feature comparisons
-Oracle Open Office Chart : Microsoft Office;importing password protected files
-Oracle Open Office Chart : Microsoft Office;importing Word documents
-Oracle Open Office Chart : Microsoft Office;importing/exporting VBA code
-Oracle Open Office Chart : Microsoft Office;new users information
-Oracle Open Office Chart : Microsoft Office;opening Microsoft documents
-Oracle Open Office Chart : Microsoft Office;reassigning document types
-Oracle Open Office Chart : migrating macros (Base)
-Oracle Open Office Chart : mobile device filters
-Oracle Open Office Chart : models in XForms
-Oracle Open Office Chart : modifying, see changing
-Oracle Open Office Chart : more controls
-Oracle Open Office Chart : mosaic filter
-Oracle Open Office Chart : mouse
-Oracle Open Office Chart : mouse;pointers when using drag and drop
-Oracle Open Office Chart : mouse;positioning
-Oracle Open Office Chart : movies
-Oracle Open Office Chart : moving
-Oracle Open Office Chart : moving;tab stops on ruler
-Oracle Open Office Chart : moving;toolbars
-Oracle Open Office Chart : moving;using guide lines in presentations
-Oracle Open Office Chart : MS ADO interface (Base)
-Oracle Open Office Chart : multi-line titles in forms
-Oracle Open Office Chart : multiple documents
-Oracle Open Office Chart : multiple documents;opening
-Oracle Open Office Chart : multiple selection
-Oracle Open Office Chart : music
-Oracle Open Office Chart : My Documents folder
-Oracle Open Office Chart : My Documents folder;changing work directory
-Oracle Open Office Chart : My Documents folder;opening
-Oracle Open Office Chart : MySQL databases (Base)
-Oracle Open Office Chart : names
-Oracle Open Office Chart : names;multi-line titles
-Oracle Open Office Chart : names;objects
-Oracle Open Office Chart : names, see also labels/callouts
-Oracle Open Office Chart : namespace organization in XForms
-Oracle Open Office Chart : native SQL (Base)
-Oracle Open Office Chart : navigating
-Oracle Open Office Chart : navigating;in documents
-Oracle Open Office Chart : Navigation bar
-Oracle Open Office Chart : Navigation bar;controls
-Oracle Open Office Chart : Navigation bar;forms
-Oracle Open Office Chart : Navigator
-Oracle Open Office Chart : Navigator;comments
-Oracle Open Office Chart : Navigator;contents as lists
-Oracle Open Office Chart : Navigator;docking
-Oracle Open Office Chart : Navigator;working with
-Oracle Open Office Chart : net charts
-Oracle Open Office Chart : network identity options
-Oracle Open Office Chart : new databases
-Oracle Open Office Chart : new documents
-Oracle Open Office Chart : new lines in cells
-Oracle Open Office Chart : new windows
-Oracle Open Office Chart : non-breaking dashes
-Oracle Open Office Chart : non-breaking spaces (Writer)
-Oracle Open Office Chart : non-printing characters (Writer)
-Oracle Open Office Chart : number formats
-Oracle Open Office Chart : number formats;codes
-Oracle Open Office Chart : number formats;formats
-Oracle Open Office Chart : number formats;recognition in text tables
-Oracle Open Office Chart : number of pages
-Oracle Open Office Chart : number of sheets
-Oracle Open Office Chart : number of tables
-Oracle Open Office Chart : numbering
-Oracle Open Office Chart : numbering;options
-Oracle Open Office Chart : numbering;turning off
-Oracle Open Office Chart : numbering;using automatically
-Oracle Open Office Chart : numbers
-Oracle Open Office Chart : numbers;date, time and currency formats
-Oracle Open Office Chart : numbers;decimal places (Calc)
-Oracle Open Office Chart : numerical fields in forms
-Oracle Open Office Chart : objects
-Oracle Open Office Chart : objects;always moveable (Impress/Draw)
-Oracle Open Office Chart : objects;arranging within stacks
-Oracle Open Office Chart : objects;copying when moving in presentations
-Oracle Open Office Chart : objects;definition
-Oracle Open Office Chart : objects;displaying in spreadsheets
-Oracle Open Office Chart : objects;displaying in text documents
-Oracle Open Office Chart : objects;editing
-Oracle Open Office Chart : objects;inserting from Gallery
-Oracle Open Office Chart : objects;inserting OLE objects
-Oracle Open Office Chart : objects;moving and resizing with mouse
-Oracle Open Office Chart : objects;naming
-Oracle Open Office Chart : objects;opening
-Oracle Open Office Chart : objects;properties of charts
-Oracle Open Office Chart : objects;quickly moving to
-Oracle Open Office Chart : objects;titles and descriptions
-Oracle Open Office Chart : ODBC
-Oracle Open Office Chart : ODBC;database (Base)
-Oracle Open Office Chart : ODBC;definition
-Oracle Open Office Chart : ODF file formats
-Oracle Open Office Chart : Office
-Oracle Open Office Chart : Office;Microsoft Office and Oracle Open Office
-Oracle Open Office Chart : OLE
-Oracle Open Office Chart : OLE;definition
-Oracle Open Office Chart : OLE objects
-Oracle Open Office Chart : OLE objects;arranging within stacks
-Oracle Open Office Chart : OLE objects;captions (Writer)
-Oracle Open Office Chart : OLE objects;inserting
-Oracle Open Office Chart : OLE objects;number of
-Oracle Open Office Chart : OLE objects;protecting
-Oracle Open Office Chart : one and a half line spacing in text
-Oracle Open Office Chart : online feedback options
-Oracle Open Office Chart : online registration
-Oracle Open Office Chart : online update options
-Oracle Open Office Chart : online updates
-Oracle Open Office Chart : online updates;checking automatically
-Oracle Open Office Chart : online updates;checking manually
-Oracle Open Office Chart : Open/Save dialogs
-Oracle Open Office Chart : OpenDocument file formats
-Oracle Open Office Chart : OpenGL
-Oracle Open Office Chart : OpenGL;definition
-Oracle Open Office Chart : opening
-Oracle Open Office Chart : opening;context menus
-Oracle Open Office Chart : opening;database files
-Oracle Open Office Chart : opening;dialog settings
-Oracle Open Office Chart : opening;documents
-Oracle Open Office Chart : opening;documents from other formats
-Oracle Open Office Chart : opening;documents on WebDAV server
-Oracle Open Office Chart : opening;files with links
-Oracle Open Office Chart : opening;files, with placeholders
-Oracle Open Office Chart : opening;forms
-Oracle Open Office Chart : opening;Microsoft Office files
-Oracle Open Office Chart : opening;mobile device documents
-Oracle Open Office Chart : opening;objects
-Oracle Open Office Chart : opening;reports
-Oracle Open Office Chart : opening;several files
-Oracle Open Office Chart : opening;XForms
-Oracle Open Office Chart : operators
-Oracle Open Office Chart : operators;default filters
-Oracle Open Office Chart : optional hyphens (Writer)
-Oracle Open Office Chart : options
-Oracle Open Office Chart : options;accessibility
-Oracle Open Office Chart : options;appearance
-Oracle Open Office Chart : options;compatibility (Writer)
-Oracle Open Office Chart : options;improvement program
-Oracle Open Office Chart : options;network identity
-Oracle Open Office Chart : options;online update
-Oracle Open Office Chart : options;tools
-Oracle Open Office Chart : Oracle databases (base)
-Oracle Open Office Chart : Oracle Open Office Base data sources
-Oracle Open Office Chart : Oracle Open Office Basic scripts in HTML documents
-Oracle Open Office Chart : Oracle Open Office documents
-Oracle Open Office Chart : Oracle Open Office documents;mobile device filters
-Oracle Open Office Chart : Oracle Open Office documents;viewing and editing in Internet Explorer
-Oracle Open Office Chart : Oracle Open Office Math start
-Oracle Open Office Chart : order of chart data
-Oracle Open Office Chart : ordering
-Oracle Open Office Chart : ordering;objects
-Oracle Open Office Chart : organizing
-Oracle Open Office Chart : organizing;macros and scripts
-Oracle Open Office Chart : organizing;namespaces in XForms
-Oracle Open Office Chart : organizing;styles
-Oracle Open Office Chart : organizing;templates
-Oracle Open Office Chart : original size
-Oracle Open Office Chart : original size;printing in Oracle Open Office Math
-Oracle Open Office Chart : original size;restoring after cropping
-Oracle Open Office Chart : outlines
-Oracle Open Office Chart : outlines;font effects
-Oracle Open Office Chart : outlines;outline symbols
-Oracle Open Office Chart : outlines;sending to presentations
-Oracle Open Office Chart : overwrite mode
-Oracle Open Office Chart : packages, see extensions
-Oracle Open Office Chart : page breaks
-Oracle Open Office Chart : page breaks;displaying (Calc)
-Oracle Open Office Chart : page formats
-Oracle Open Office Chart : page formats;maximizing
-Oracle Open Office Chart : page formats;restriction
-Oracle Open Office Chart : page styles
-Oracle Open Office Chart : page styles;editing/applying with statusbar
-Oracle Open Office Chart : pages
-Oracle Open Office Chart : pages;backgrounds in all applications
-Oracle Open Office Chart : pages;formatting and numbering
-Oracle Open Office Chart : pages;printing page names in presentations
-Oracle Open Office Chart : pages;scaling
-Oracle Open Office Chart : pages;selecting one to print
-Oracle Open Office Chart : paint box
-Oracle Open Office Chart : paint can symbol
-Oracle Open Office Chart : pair kerning
-Oracle Open Office Chart : Palm file filters
-Oracle Open Office Chart : paper formats
-Oracle Open Office Chart : paper size warning
-Oracle Open Office Chart : paper trays
-Oracle Open Office Chart : paragraph marks
-Oracle Open Office Chart : paragraph marks;displaying (Writer)
-Oracle Open Office Chart : paragraph styles
-Oracle Open Office Chart : paragraph styles;languages
-Oracle Open Office Chart : paragraph styles;modifying basic fonts
-Oracle Open Office Chart : paragraphs
-Oracle Open Office Chart : paragraphs;alignment
-Oracle Open Office Chart : paragraphs;Asian typography
-Oracle Open Office Chart : paragraphs;defining borders
-Oracle Open Office Chart : paragraphs;hidden paragraphs (Writer)
-Oracle Open Office Chart : paragraphs;increasing indents of
-Oracle Open Office Chart : paragraphs;indents, margins and columns
-Oracle Open Office Chart : paragraphs;inserting bullets
-Oracle Open Office Chart : paragraphs;joining
-Oracle Open Office Chart : paragraphs;numbering automatically
-Oracle Open Office Chart : paragraphs;removing blank ones
-Oracle Open Office Chart : paragraphs;spacing
-Oracle Open Office Chart : paragraphs;tab stops
-Oracle Open Office Chart : parameters
-Oracle Open Office Chart : parameters;command line
-Oracle Open Office Chart : parameters;queries (Base)
-Oracle Open Office Chart : passwords for protecting contents
-Oracle Open Office Chart : pasting
-Oracle Open Office Chart : pasting;cell ranges
-Oracle Open Office Chart : pasting;cell ranges from spreadsheets
-Oracle Open Office Chart : pasting;data from text documents
-Oracle Open Office Chart : pasting;draw objects
-Oracle Open Office Chart : pasting;draw objects from other documents
-Oracle Open Office Chart : pasting;formatted/unformatted text
-Oracle Open Office Chart : pasting;from data source view
-Oracle Open Office Chart : pasting;from data sources to Oracle Open Office Calc
-Oracle Open Office Chart : pasting;pictures from other documents
-Oracle Open Office Chart : pasting;sheet areas in text documents
-Oracle Open Office Chart : pasting;to Gallery
-Oracle Open Office Chart : paths
-Oracle Open Office Chart : paths;changing work directory
-Oracle Open Office Chart : paths;defaults
-Oracle Open Office Chart : pattern editor
-Oracle Open Office Chart : pattern fields
-Oracle Open Office Chart : pattern fields;form functions
-Oracle Open Office Chart : patterns for objects
-Oracle Open Office Chart : PDF
-Oracle Open Office Chart : PDF;export
-Oracle Open Office Chart : PDF;PostScript to PDF converter, UNIX
-Oracle Open Office Chart : personal data input
-Oracle Open Office Chart : phonetic guide
-Oracle Open Office Chart : picklist creation
-Oracle Open Office Chart : pictures
-Oracle Open Office Chart : pictures;adding to Gallery
-Oracle Open Office Chart : pictures;arranging within stacks
-Oracle Open Office Chart : pictures;assigning macros
-Oracle Open Office Chart : pictures;backgrounds
-Oracle Open Office Chart : pictures;captions (Writer)
-Oracle Open Office Chart : pictures;changing paths
-Oracle Open Office Chart : pictures;cropping and zooming
-Oracle Open Office Chart : pictures;displaying in Calc
-Oracle Open Office Chart : pictures;displaying in Writer (Writer)
-Oracle Open Office Chart : pictures;drag and drop between documents
-Oracle Open Office Chart : pictures;drawing
-Oracle Open Office Chart : pictures;editing
-Oracle Open Office Chart : pictures;filters
-Oracle Open Office Chart : pictures;ImageMap
-Oracle Open Office Chart : pictures;inserting automatically
-Oracle Open Office Chart : pictures;inserting from Gallery
-Oracle Open Office Chart : pictures;number of
-Oracle Open Office Chart : pictures;printing
-Oracle Open Office Chart : pictures;scaling/resizing
-Oracle Open Office Chart : pie charts
-Oracle Open Office Chart : pie charts;options
-Oracle Open Office Chart : pie charts;types
-Oracle Open Office Chart : pixel editor
-Oracle Open Office Chart : pixel graphics
-Oracle Open Office Chart : pixel graphics;inserting and editing
-Oracle Open Office Chart : pixel patterns
-Oracle Open Office Chart : placeholders
-Oracle Open Office Chart : placeholders;in SQL queries
-Oracle Open Office Chart : placeholders;on opening files
-Oracle Open Office Chart : placing toolbars
-Oracle Open Office Chart : playing movies and sound files
-Oracle Open Office Chart : plotting data as charts
-Oracle Open Office Chart : plug-ins
-Oracle Open Office Chart : plug-ins;activating and deactivating
-Oracle Open Office Chart : plug-ins;definition
-Oracle Open Office Chart : plug-ins;inserting
-Oracle Open Office Chart : pocket device appliances
-Oracle Open Office Chart : Pocket PC file filters
-Oracle Open Office Chart : points
-Oracle Open Office Chart : points;reducing editing points when snapping (Impress/Draw)
-Oracle Open Office Chart : polygon drawing
-Oracle Open Office Chart : pop-art filter
-Oracle Open Office Chart : portable document format
-Oracle Open Office Chart : positioning
-Oracle Open Office Chart : positioning;axes
-Oracle Open Office Chart : positioning;draw objects and controls
-Oracle Open Office Chart : positioning;fonts
-Oracle Open Office Chart : positioning;objects
-Oracle Open Office Chart : positioning;toolbars
-Oracle Open Office Chart : post method for form transmissions
-Oracle Open Office Chart : posterizing filter
-Oracle Open Office Chart : PostScript
-Oracle Open Office Chart : PostScript;creating files
-Oracle Open Office Chart : PostScript;PDF converter, UNIX
-Oracle Open Office Chart : PowerPoint export
-Oracle Open Office Chart : precision as shown (Calc)
-Oracle Open Office Chart : predefining fonts
-Oracle Open Office Chart : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
-Oracle Open Office Chart : presentations
-Oracle Open Office Chart : presentations;creating/opening
-Oracle Open Office Chart : presentations;inserting spreadsheet cells
-Oracle Open Office Chart : presentations;live on the Internet
-Oracle Open Office Chart : presentations;print menu
-Oracle Open Office Chart : presentations;saving
-Oracle Open Office Chart : presentations;saving automatically
-Oracle Open Office Chart : presentations;saving in other formats
-Oracle Open Office Chart : presentations;sending as e-mail
-Oracle Open Office Chart : presentations;starting with wizard
-Oracle Open Office Chart : presentations;wizards
-Oracle Open Office Chart : Presenter Console shortcuts
-Oracle Open Office Chart : press buttons, see push buttons
-Oracle Open Office Chart : previews
-Oracle Open Office Chart : previews;fonts lists
-Oracle Open Office Chart : primary keys
-Oracle Open Office Chart : primary keys;defining
-Oracle Open Office Chart : primary keys;design view
-Oracle Open Office Chart : primary keys;inserting (Base)
-Oracle Open Office Chart : print area selection
-Oracle Open Office Chart : printer metrics for document formatting (Writer)
-Oracle Open Office Chart : printers
-Oracle Open Office Chart : printers;adding, UNIX
-Oracle Open Office Chart : printers;choosing
-Oracle Open Office Chart : printers;default printer
-Oracle Open Office Chart : printers;faxes under UNIX
-Oracle Open Office Chart : printers;maximum page formats
-Oracle Open Office Chart : printers;paper trays
-Oracle Open Office Chart : printers;properties
-Oracle Open Office Chart : printing
-Oracle Open Office Chart : printing;black and white
-Oracle Open Office Chart : printing;brochures
-Oracle Open Office Chart : printing;colors in grayscale
-Oracle Open Office Chart : printing;comments
-Oracle Open Office Chart : printing;copies
-Oracle Open Office Chart : printing;creating individual jobs
-Oracle Open Office Chart : printing;dates in presentations
-Oracle Open Office Chart : printing;directly
-Oracle Open Office Chart : printing;documents
-Oracle Open Office Chart : printing;drawings defaults
-Oracle Open Office Chart : printing;elements in text documents
-Oracle Open Office Chart : printing;faster
-Oracle Open Office Chart : printing;fitting to pages in Oracle Open Office Math
-Oracle Open Office Chart : printing;fitting to pages in presentations
-Oracle Open Office Chart : printing;formulas in Oracle Open Office Math
-Oracle Open Office Chart : printing;hidden pages of presentations
-Oracle Open Office Chart : printing;in original size in Oracle Open Office Math
-Oracle Open Office Chart : printing;left/right pages
-Oracle Open Office Chart : printing;queries (Base)
-Oracle Open Office Chart : printing;scaling in Oracle Open Office Math
-Oracle Open Office Chart : printing;selections
-Oracle Open Office Chart : printing;text always in black
-Oracle Open Office Chart : printing;text in reverse order
-Oracle Open Office Chart : printing;tiling pages in presentations
-Oracle Open Office Chart : printing;transparencies
-Oracle Open Office Chart : printing;warnings
-Oracle Open Office Chart : printing;without scaling in presentations
-Oracle Open Office Chart : printing speed
-Oracle Open Office Chart : programming
-Oracle Open Office Chart : programming;Oracle Open Office
-Oracle Open Office Chart : programming;scripting
-Oracle Open Office Chart : properties
-Oracle Open Office Chart : properties;charts
-Oracle Open Office Chart : properties;fields in databases
-Oracle Open Office Chart : properties;files
-Oracle Open Office Chart : properties;form controls
-Oracle Open Office Chart : properties;forms
-Oracle Open Office Chart : properties;printers
-Oracle Open Office Chart : properties;smooth lines in line charts/XY charts
-Oracle Open Office Chart : protected contents
-Oracle Open Office Chart : protected dashes
-Oracle Open Office Chart : protected database tables
-Oracle Open Office Chart : protected documents
-Oracle Open Office Chart : protected spaces
-Oracle Open Office Chart : protected spaces;inserting
-Oracle Open Office Chart : protected spaces;showing (Writer)
-Oracle Open Office Chart : protecting
-Oracle Open Office Chart : protecting;contents
-Oracle Open Office Chart : protecting;recorded changes
-Oracle Open Office Chart : proxy settings
-Oracle Open Office Chart : push buttons
-Oracle Open Office Chart : push buttons;adding to documents
-Oracle Open Office Chart : push buttons;creating
-Oracle Open Office Chart : queries
-Oracle Open Office Chart : queries;copying (Base)
-Oracle Open Office Chart : queries;creating in design view (Base)
-Oracle Open Office Chart : queries;creating in SQL view
-Oracle Open Office Chart : queries;defining (Base)
-Oracle Open Office Chart : queries;deleting table links (Base)
-Oracle Open Office Chart : queries;editing in data source view
-Oracle Open Office Chart : queries;formulating filter conditions (Base)
-Oracle Open Office Chart : queries;joining tables (Base)
-Oracle Open Office Chart : queries;missing elements (Base)
-Oracle Open Office Chart : queries;overview (Base)
-Oracle Open Office Chart : queries;parameter queries (Base)
-Oracle Open Office Chart : queries;printing (Base)
-Oracle Open Office Chart : Query Wizard (Base)
-Oracle Open Office Chart : Quickstarter
-Oracle Open Office Chart : quotation marks
-Oracle Open Office Chart : quotation marks;replacing
-Oracle Open Office Chart : quotes
-Oracle Open Office Chart : quotes;custom
-Oracle Open Office Chart : radar charts, see net charts
-Oracle Open Office Chart : radio button creation
-Oracle Open Office Chart : read-only documents
-Oracle Open Office Chart : read-only documents;cursor
-Oracle Open Office Chart : read-only documents;database tables on/off
-Oracle Open Office Chart : read-only documents;editing
-Oracle Open Office Chart : read-only documents;opening documents as
-Oracle Open Office Chart : read-only items in Data Navigator
-Oracle Open Office Chart : recognizing URLs automatically
-Oracle Open Office Chart : recording
-Oracle Open Office Chart : recording;changes
-Oracle Open Office Chart : recording;macros
-Oracle Open Office Chart : records
-Oracle Open Office Chart : records;inserting comments
-Oracle Open Office Chart : records;protecting
-Oracle Open Office Chart : records;saving
-Oracle Open Office Chart : records;searching in databases
-Oracle Open Office Chart : rectangles with round corners
-Oracle Open Office Chart : recursions in spreadsheets
-Oracle Open Office Chart : redo command
-Oracle Open Office Chart : reduced printing
-Oracle Open Office Chart : reference lines
-Oracle Open Office Chart : references
-Oracle Open Office Chart : references;displaying in color (Calc)
-Oracle Open Office Chart : references;expanding (Calc)
-Oracle Open Office Chart : references;iterative (Calc)
-Oracle Open Office Chart : register-true
-Oracle Open Office Chart : register-true;definition
-Oracle Open Office Chart : registering
-Oracle Open Office Chart : registering;address books
-Oracle Open Office Chart : registering;databases (Base)
-Oracle Open Office Chart : registering;Oracle Open Office
-Oracle Open Office Chart : regression curves in charts
-Oracle Open Office Chart : regular expressions
-Oracle Open Office Chart : regular expressions;list of
-Oracle Open Office Chart : regular expressions;opening files
-Oracle Open Office Chart : relational databases (Base)
-Oracle Open Office Chart : relations
-Oracle Open Office Chart : relations;creating and deleting (Base)
-Oracle Open Office Chart : relations;joining tables (Base)
-Oracle Open Office Chart : relations;properties (Base)
-Oracle Open Office Chart : relative hyperlinks
-Oracle Open Office Chart : relative saving of URLs
-Oracle Open Office Chart : reloading
-Oracle Open Office Chart : reloading;documents
-Oracle Open Office Chart : reloading;HTML documents, automatically
-Oracle Open Office Chart : remarks, see also comments
-Oracle Open Office Chart : remote configurations
-Oracle Open Office Chart : remove noise filter
-Oracle Open Office Chart : removing
-Oracle Open Office Chart : removing;bullets and numbering
-Oracle Open Office Chart : removing;form filters
-Oracle Open Office Chart : removing, see also deleting
-Oracle Open Office Chart : reorganizing charts
-Oracle Open Office Chart : repeating
-Oracle Open Office Chart : repeating;commands
-Oracle Open Office Chart : replacement options
-Oracle Open Office Chart : replacement table
-Oracle Open Office Chart : replacing
-Oracle Open Office Chart : replacing;AutoCorrect function
-Oracle Open Office Chart : replacing;dashes
-Oracle Open Office Chart : replacing;tab stops (regular expressions)
-Oracle Open Office Chart : Report Builder
-Oracle Open Office Chart : reports
-Oracle Open Office Chart : reports;creating
-Oracle Open Office Chart : reports;error reports
-Oracle Open Office Chart : reports;opening and editing
-Oracle Open Office Chart : reports;templates
-Oracle Open Office Chart : resetting
-Oracle Open Office Chart : resetting;templates
-Oracle Open Office Chart : resizing
-Oracle Open Office Chart : resizing;objects, by mouse
-Oracle Open Office Chart : resizing, see also scaling/zooming
-Oracle Open Office Chart : resolution when printing bitmaps
-Oracle Open Office Chart : restoring
-Oracle Open Office Chart : restoring;default formatting
-Oracle Open Office Chart : restoring;editing
-Oracle Open Office Chart : reversing printing order
-Oracle Open Office Chart : review function
-Oracle Open Office Chart : review function;accepting or rejecting changes
-Oracle Open Office Chart : review function;comparing documents
-Oracle Open Office Chart : review function;protecting records
-Oracle Open Office Chart : review function;recording changes example
-Oracle Open Office Chart : rich text control
-Oracle Open Office Chart : right alignment of paragraphs
-Oracle Open Office Chart : right joins (Base)
-Oracle Open Office Chart : right-to-left text
-Oracle Open Office Chart : rotating
-Oracle Open Office Chart : rotating;3D text
-Oracle Open Office Chart : round corners
-Oracle Open Office Chart : rounding precision (Calc)
-Oracle Open Office Chart : row headers
-Oracle Open Office Chart : row headers;displaying (Calc)
-Oracle Open Office Chart : row headers;highlighting (Calc)
-Oracle Open Office Chart : rulers
-Oracle Open Office Chart : rulers;default settings
-Oracle Open Office Chart : rulers;measurement units
-Oracle Open Office Chart : rulers;visible in presentations
-Oracle Open Office Chart : samples and templates
-Oracle Open Office Chart : saving
-Oracle Open Office Chart : saving;default file formats
-Oracle Open Office Chart : saving;dialog settings
-Oracle Open Office Chart : saving;documents
-Oracle Open Office Chart : saving;documents for mobile devices
-Oracle Open Office Chart : saving;documents in other formats
-Oracle Open Office Chart : saving;documents, automatically
-Oracle Open Office Chart : saving;in Microsoft Office file format
-Oracle Open Office Chart : saving;options
-Oracle Open Office Chart : saving;templates
-Oracle Open Office Chart : saving;to XML
-Oracle Open Office Chart : saving;VBA code in Microsoft Office documents
-Oracle Open Office Chart : saving;with password by default
-Oracle Open Office Chart : saving as command
-Oracle Open Office Chart : saving as command;precautions
-Oracle Open Office Chart : scaling
-Oracle Open Office Chart : scaling;axes
-Oracle Open Office Chart : scaling;font sizes in user interface
-Oracle Open Office Chart : scaling;objects
-Oracle Open Office Chart : scaling;pictures
-Oracle Open Office Chart : scaling;printing in Oracle Open Office Math
-Oracle Open Office Chart : scaling;text in charts
-Oracle Open Office Chart : scaling;when printing presentations
-Oracle Open Office Chart : scaling, see also zooming
-Oracle Open Office Chart : scatter charts
-Oracle Open Office Chart : screen
-Oracle Open Office Chart : screen;full screen views
-Oracle Open Office Chart : screen;scaling
-Oracle Open Office Chart : screen magnifiers
-Oracle Open Office Chart : screen readers
-Oracle Open Office Chart : script organization
-Oracle Open Office Chart : scrollbars
-Oracle Open Office Chart : scrollbars;controls
-Oracle Open Office Chart : scrollbars;displaying (Calc)
-Oracle Open Office Chart : scrollbars;horizontal and vertical (Writer)
-Oracle Open Office Chart : search criteria for database functions in cells
-Oracle Open Office Chart : search engines
-Oracle Open Office Chart : search engines;definition
-Oracle Open Office Chart : search engines;selecting
-Oracle Open Office Chart : searching
-Oracle Open Office Chart : searching;all sheets
-Oracle Open Office Chart : searching;databases
-Oracle Open Office Chart : searching;form filters
-Oracle Open Office Chart : searching;Internet
-Oracle Open Office Chart : searching;tables and forms
-Oracle Open Office Chart : secondary axes in charts
-Oracle Open Office Chart : sections
-Oracle Open Office Chart : sections;backgrounds
-Oracle Open Office Chart : security
-Oracle Open Office Chart : security;digital signatures
-Oracle Open Office Chart : security;options for documents with macros
-Oracle Open Office Chart : security;protecting contents
-Oracle Open Office Chart : security;security levels for macros
-Oracle Open Office Chart : security;warning dialogs with macros
-Oracle Open Office Chart : selecting
-Oracle Open Office Chart : selecting;controls
-Oracle Open Office Chart : selecting;measurement units
-Oracle Open Office Chart : selecting;objects
-Oracle Open Office Chart : selecting;print areas
-Oracle Open Office Chart : selecting;several files
-Oracle Open Office Chart : selection clipboard
-Oracle Open Office Chart : selection frames
-Oracle Open Office Chart : selection modes in text
-Oracle Open Office Chart : sending
-Oracle Open Office Chart : sending;AutoAbstract function in presentations
-Oracle Open Office Chart : sending;documents as e-mail
-Oracle Open Office Chart : sending;documents as faxes
-Oracle Open Office Chart : separator lines
-Oracle Open Office Chart : separator lines;defining
-Oracle Open Office Chart : separators
-Oracle Open Office Chart : separators;conditional
-Oracle Open Office Chart : Server Side ImageMap
-Oracle Open Office Chart : settings
-Oracle Open Office Chart : settings;printers
-Oracle Open Office Chart : settings;program configuration
-Oracle Open Office Chart : settings;proxies
-Oracle Open Office Chart : settings;tracking changes
-Oracle Open Office Chart : settings;views
-Oracle Open Office Chart : SGML
-Oracle Open Office Chart : SGML;definition
-Oracle Open Office Chart : shadows
-Oracle Open Office Chart : shadows;areas
-Oracle Open Office Chart : shadows;borders
-Oracle Open Office Chart : shadows;characters
-Oracle Open Office Chart : shadows;characters, using context menu
-Oracle Open Office Chart : sharing documents
-Oracle Open Office Chart : sharpening filter
-Oracle Open Office Chart : sheet tabs
-Oracle Open Office Chart : sheet tabs;displaying
-Oracle Open Office Chart : sheets
-Oracle Open Office Chart : sheets;searching all
-Oracle Open Office Chart : shortcut keys
-Oracle Open Office Chart : shortcut keys;assigning macros
-Oracle Open Office Chart : shortcut keys;charts
-Oracle Open Office Chart : shortcut keys;general
-Oracle Open Office Chart : shortcut keys;in databases
-Oracle Open Office Chart : shortcut keys;Oracle Open Office accessibility
-Oracle Open Office Chart : showing
-Oracle Open Office Chart : showing;changes
-Oracle Open Office Chart : showing;docked windows
-Oracle Open Office Chart : showing;drawings and controls (Writer)
-Oracle Open Office Chart : showing;live presentations on the Internet
-Oracle Open Office Chart : showing;toolbars
-Oracle Open Office Chart : signing documents with digital signatures
-Oracle Open Office Chart : similarity search
-Oracle Open Office Chart : simple handles (Writer)
-Oracle Open Office Chart : simplified Chinese
-Oracle Open Office Chart : simplified Chinese;translating to traditional Chinese
-Oracle Open Office Chart : single sign on options
-Oracle Open Office Chart : single-line spacing in text
-Oracle Open Office Chart : sizes
-Oracle Open Office Chart : sizes;draw objects
-Oracle Open Office Chart : sizes;pictures
-Oracle Open Office Chart : slanting draw objects
-Oracle Open Office Chart : small capitals
-Oracle Open Office Chart : small icons
-Oracle Open Office Chart : smart tag configuration
-Oracle Open Office Chart : smooth scrolling (Writer)
-Oracle Open Office Chart : smoothing filter
-Oracle Open Office Chart : snap grid defaults (Writer/Calc)
-Oracle Open Office Chart : snapping in presentations and drawings
-Oracle Open Office Chart : solarization filter
-Oracle Open Office Chart : sort lists
-Oracle Open Office Chart : sort lists;copying to in Calc
-Oracle Open Office Chart : sorting
-Oracle Open Office Chart : sorting;data in forms
-Oracle Open Office Chart : sorting;databases
-Oracle Open Office Chart : sound files
-Oracle Open Office Chart : spaces
-Oracle Open Office Chart : spaces;displaying (Writer)
-Oracle Open Office Chart : spaces;ignoring double
-Oracle Open Office Chart : spaces;inserting protected spaces
-Oracle Open Office Chart : spaces;showing protected spaces (Writer)
-Oracle Open Office Chart : spacing
-Oracle Open Office Chart : spacing;between paragraphs in footnotes
-Oracle Open Office Chart : spacing;font effects
-Oracle Open Office Chart : spacing;lines and paragraphs
-Oracle Open Office Chart : spacing;tab stops in text documents
-Oracle Open Office Chart : spacing;tabs in presentations
-Oracle Open Office Chart : spadmin
-Oracle Open Office Chart : special characters
-Oracle Open Office Chart : speech bubbles
-Oracle Open Office Chart : speed of printing
-Oracle Open Office Chart : spellcheck
-Oracle Open Office Chart : spellcheck;activating for a language
-Oracle Open Office Chart : spellcheck;context menus
-Oracle Open Office Chart : spellcheck;default languages
-Oracle Open Office Chart : spellcheck;dialog
-Oracle Open Office Chart : spellcheck;dictionary of exceptions
-Oracle Open Office Chart : spellcheck;ignore list
-Oracle Open Office Chart : spin button creation
-Oracle Open Office Chart : spoolfiles with Xprinter
-Oracle Open Office Chart : spreadsheets
-Oracle Open Office Chart : spreadsheets;as databases (base)
-Oracle Open Office Chart : spreadsheets;copying areas to text documents
-Oracle Open Office Chart : spreadsheets;creating/opening
-Oracle Open Office Chart : spreadsheets;inserting charts
-Oracle Open Office Chart : spreadsheets;inserting database records
-Oracle Open Office Chart : spreadsheets;printing
-Oracle Open Office Chart : spreadsheets;saving
-Oracle Open Office Chart : spreadsheets;saving automatically
-Oracle Open Office Chart : spreadsheets;saving in other formats
-Oracle Open Office Chart : spreadsheets;sending as e-mail
-Oracle Open Office Chart : SQL
-Oracle Open Office Chart : SQL;definition
-Oracle Open Office Chart : SQL;DISTINCT parameter
-Oracle Open Office Chart : SQL;executing SQL commands
-Oracle Open Office Chart : SQL;executing SQL statements (Base)
-Oracle Open Office Chart : SQL;queries (Base)
-Oracle Open Office Chart : square drawings
-Oracle Open Office Chart : standard bar on/off
-Oracle Open Office Chart : standard deviation in charts
-Oracle Open Office Chart : standard filters in databases
-Oracle Open Office Chart : standard printer under UNIX
-Oracle Open Office Chart : start center
-Oracle Open Office Chart : start parameters
-Oracle Open Office Chart : statistics in charts
-Oracle Open Office Chart : status bar on/off
-Oracle Open Office Chart : stickers
-Oracle Open Office Chart : stock charts
-Oracle Open Office Chart : strikethrough
-Oracle Open Office Chart : strikethrough;characters
-Oracle Open Office Chart : strikethrough;font effects
-Oracle Open Office Chart : styles
-Oracle Open Office Chart : styles;'changed' message
-Oracle Open Office Chart : styles;copying between documents
-Oracle Open Office Chart : styles;keyboard shortcuts
-Oracle Open Office Chart : styles;organizing
-Oracle Open Office Chart : styles;printing styles used in a document
-Oracle Open Office Chart : styles;replacing automatically
-Oracle Open Office Chart : Styles and Formatting window
-Oracle Open Office Chart : Styles and Formatting window;docking
-Oracle Open Office Chart : subforms
-Oracle Open Office Chart : subforms;creating
-Oracle Open Office Chart : subforms;description
-Oracle Open Office Chart : submitting forms
-Oracle Open Office Chart : suffixes in file formats
-Oracle Open Office Chart : support on the Web
-Oracle Open Office Chart : synchronizing
-Oracle Open Office Chart : synchronizing;labels and business cards
-Oracle Open Office Chart : synchronizing;Pocket PC and Oracle Open Office formats
-Oracle Open Office Chart : system address book registration
-Oracle Open Office Chart : tab stops
-Oracle Open Office Chart : tab stops;displaying (Writer)
-Oracle Open Office Chart : tab stops;inserting and editing
-Oracle Open Office Chart : tab stops;regular expressions
-Oracle Open Office Chart : tab stops;setting in sheets
-Oracle Open Office Chart : tab stops;settings
-Oracle Open Office Chart : tab stops;spacing in presentations
-Oracle Open Office Chart : tab stops;spacing in text documents
-Oracle Open Office Chart : table controls
-Oracle Open Office Chart : table controls;form functions
-Oracle Open Office Chart : table controls;keyboard-only edit mode
-Oracle Open Office Chart : table controls;properties
-Oracle Open Office Chart : table views of databases
-Oracle Open Office Chart : Table Wizard (Base)
-Oracle Open Office Chart : tables
-Oracle Open Office Chart : tables;inserting line breaks
-Oracle Open Office Chart : tables in databases
-Oracle Open Office Chart : tables in databases;access rights to (Base)
-Oracle Open Office Chart : tables in databases;adding to queries
-Oracle Open Office Chart : tables in databases;browsing and editing
-Oracle Open Office Chart : tables in databases;copying database tables (Base)
-Oracle Open Office Chart : tables in databases;creating
-Oracle Open Office Chart : tables in databases;creating in design view (manually)
-Oracle Open Office Chart : tables in databases;importing text formats (Base)
-Oracle Open Office Chart : tables in databases;joining for queries (Base)
-Oracle Open Office Chart : tables in databases;printing queries (Base)
-Oracle Open Office Chart : tables in databases;relations (Base)
-Oracle Open Office Chart : tables in databases;searching
-Oracle Open Office Chart : tables in spreadsheets
-Oracle Open Office Chart : tables in spreadsheets;copying data to other applications
-Oracle Open Office Chart : tables in spreadsheets;defining borders
-Oracle Open Office Chart : tables in spreadsheets;value highlighting
-Oracle Open Office Chart : tables in text
-Oracle Open Office Chart : tables in text;captions
-Oracle Open Office Chart : tables in text;creating automatically
-Oracle Open Office Chart : tables in text;default settings
-Oracle Open Office Chart : tables in text;defining borders
-Oracle Open Office Chart : tables in text;displaying
-Oracle Open Office Chart : tables in text;printing
-Oracle Open Office Chart : tabs
-Oracle Open Office Chart : tabs;displaying sheet tabs
-Oracle Open Office Chart : tags
-Oracle Open Office Chart : tags;definition
-Oracle Open Office Chart : tags;META tags
-Oracle Open Office Chart : templates
-Oracle Open Office Chart : templates;agendas
-Oracle Open Office Chart : templates;changing basic fonts
-Oracle Open Office Chart : templates;database reports
-Oracle Open Office Chart : templates;deleting
-Oracle Open Office Chart : templates;editing and saving
-Oracle Open Office Chart : templates;faxes
-Oracle Open Office Chart : templates;importing and exporting
-Oracle Open Office Chart : templates;letters
-Oracle Open Office Chart : templates;new documents from templates
-Oracle Open Office Chart : templates;opening documents with
-Oracle Open Office Chart : templates;organizing
-Oracle Open Office Chart : terminology
-Oracle Open Office Chart : terminology;general glossary
-Oracle Open Office Chart : terminology;Internet glossary
-Oracle Open Office Chart : testing XML filters
-Oracle Open Office Chart : text
-Oracle Open Office Chart : text;animating
-Oracle Open Office Chart : text;Asian layout
-Oracle Open Office Chart : text;bold
-Oracle Open Office Chart : text;coloring
-Oracle Open Office Chart : text;copying by drag and drop
-Oracle Open Office Chart : text;CTL languages
-Oracle Open Office Chart : text;drawing pictures
-Oracle Open Office Chart : text;font effects
-Oracle Open Office Chart : text;font sizes
-Oracle Open Office Chart : text;font styles
-Oracle Open Office Chart : text;fonts and formats
-Oracle Open Office Chart : text;Fontwork icons
-Oracle Open Office Chart : text;hyperlinks
-Oracle Open Office Chart : text;inserting special characters
-Oracle Open Office Chart : text;italics
-Oracle Open Office Chart : text;kerning
-Oracle Open Office Chart : text;language selection
-Oracle Open Office Chart : text;line spacing
-Oracle Open Office Chart : text;overwriting or inserting
-Oracle Open Office Chart : text;printing in black
-Oracle Open Office Chart : text;replacing with format
-Oracle Open Office Chart : text;selection modes
-Oracle Open Office Chart : text;shadowed
-Oracle Open Office Chart : text;text/draw objects
-Oracle Open Office Chart : text attributes
-Oracle Open Office Chart : text attributes;hyperlinks
-Oracle Open Office Chart : text attributes;undoing
-Oracle Open Office Chart : text boxes
-Oracle Open Office Chart : text boxes;form functions
-Oracle Open Office Chart : text boxes;positioning
-Oracle Open Office Chart : text breaks in cells
-Oracle Open Office Chart : text colors for better accessibility
-Oracle Open Office Chart : text databases (Base)
-Oracle Open Office Chart : text documents
-Oracle Open Office Chart : text documents;creating/opening
-Oracle Open Office Chart : text documents;importing/exporting
-Oracle Open Office Chart : text documents;inserting spreadsheet cells
-Oracle Open Office Chart : text documents;print settings
-Oracle Open Office Chart : text documents;printing
-Oracle Open Office Chart : text documents;saving
-Oracle Open Office Chart : text documents;saving automatically
-Oracle Open Office Chart : text documents;saving in other formats
-Oracle Open Office Chart : text documents;sending as e-mail
-Oracle Open Office Chart : text effects
-Oracle Open Office Chart : text flow
-Oracle Open Office Chart : text flow;in cells
-Oracle Open Office Chart : text formats
-Oracle Open Office Chart : text formats;databases
-Oracle Open Office Chart : text formats;pasting
-Oracle Open Office Chart : text input fields
-Oracle Open Office Chart : text layout for special languages
-Oracle Open Office Chart : text objects
-Oracle Open Office Chart : text objects;alignment
-Oracle Open Office Chart : text objects;draw functions
-Oracle Open Office Chart : text objects;fonts
-Oracle Open Office Chart : text objects;in presentations and drawings
-Oracle Open Office Chart : text overflow in spreadsheet cells
-Oracle Open Office Chart : text scaling in charts
-Oracle Open Office Chart : text, see also text documents, paragraphs and characters
-Oracle Open Office Chart : TextArt, see Fontwork
-Oracle Open Office Chart : textures
-Oracle Open Office Chart : textures;inserting from Gallery
-Oracle Open Office Chart : textures;on chart bars
-Oracle Open Office Chart : Thai
-Oracle Open Office Chart : Thai;entering text
-Oracle Open Office Chart : Thai;language settings
-Oracle Open Office Chart : thesaurus
-Oracle Open Office Chart : thesaurus;activating for a language
-Oracle Open Office Chart : ticker text
-Oracle Open Office Chart : time fields
-Oracle Open Office Chart : time fields;form functions
-Oracle Open Office Chart : times
-Oracle Open Office Chart : times;inserting when printing presentations
-Oracle Open Office Chart : times, formats
-Oracle Open Office Chart : tips
-Oracle Open Office Chart : tips;extended tips in Help
-Oracle Open Office Chart : title rows
-Oracle Open Office Chart : title rows;printing in Oracle Open Office Math
-Oracle Open Office Chart : titles
-Oracle Open Office Chart : titles;alignment (charts)
-Oracle Open Office Chart : titles;changing
-Oracle Open Office Chart : titles;editing in charts
-Oracle Open Office Chart : titles;font effects
-Oracle Open Office Chart : titles;formatting automatically
-Oracle Open Office Chart : titles;formatting charts
-Oracle Open Office Chart : titles;objects
-Oracle Open Office Chart : toolbars
-Oracle Open Office Chart : toolbars;adding buttons
-Oracle Open Office Chart : toolbars;docking/undocking
-Oracle Open Office Chart : toolbars;Form Navigation bar
-Oracle Open Office Chart : toolbars;viewing/closing
-Oracle Open Office Chart : tools bar
-Oracle Open Office Chart : tooltips
-Oracle Open Office Chart : tooltips;extended tips
-Oracle Open Office Chart : tooltips;help
-Oracle Open Office Chart : traditional Chinese
-Oracle Open Office Chart : traditional Chinese;translating to simplified chinese
-Oracle Open Office Chart : transparency
-Oracle Open Office Chart : transparency;areas
-Oracle Open Office Chart : transparency;off for faster printing
-Oracle Open Office Chart : transparency;saving
-Oracle Open Office Chart : tree view of Help
-Oracle Open Office Chart : trend lines in charts
-Oracle Open Office Chart : typefaces
-Oracle Open Office Chart : typefaces;adding under UNIX
-Oracle Open Office Chart : typefaces;formats
-Oracle Open Office Chart : typographical quotes in Oracle Open Office Writer
-Oracle Open Office Chart : typography
-Oracle Open Office Chart : typography;Asian
-Oracle Open Office Chart : underlining
-Oracle Open Office Chart : underlining;AutoFormat function
-Oracle Open Office Chart : underlining;characters
-Oracle Open Office Chart : underlining;text
-Oracle Open Office Chart : undocking windows
-Oracle Open Office Chart : undoing
-Oracle Open Office Chart : undoing;direct formatting
-Oracle Open Office Chart : undoing;editing
-Oracle Open Office Chart : undoing;number of steps
-Oracle Open Office Chart : ungrouping groups
-Oracle Open Office Chart : units
-Oracle Open Office Chart : units;converting
-Oracle Open Office Chart : units;measurement units
-Oracle Open Office Chart : UNO components
-Oracle Open Office Chart : UNO components;Extension Manager
-Oracle Open Office Chart : UNO components;integrating new
-Oracle Open Office Chart : update options
-Oracle Open Office Chart : updates
-Oracle Open Office Chart : updates;checking automatically
-Oracle Open Office Chart : updates;checking manually
-Oracle Open Office Chart : updating
-Oracle Open Office Chart : updating;fields and charts, automatically (Writer)
-Oracle Open Office Chart : updating;links in text documents
-Oracle Open Office Chart : updating;links, on opening
-Oracle Open Office Chart : updating;templates
-Oracle Open Office Chart : URL
-Oracle Open Office Chart : URL;changing hyperlink URLs
-Oracle Open Office Chart : URL;definition
-Oracle Open Office Chart : URL;in pictures
-Oracle Open Office Chart : URL;saving absolute/relative paths
-Oracle Open Office Chart : URL;turning off URL recognition
-Oracle Open Office Chart : user data
-Oracle Open Office Chart : user data;input
-Oracle Open Office Chart : user data;removing when saving
-Oracle Open Office Chart : user feedback
-Oracle Open Office Chart : user feedback;automatically
-Oracle Open Office Chart : user-defined dictionaries
-Oracle Open Office Chart : user-defined dictionaries;creating
-Oracle Open Office Chart : user-defined dictionaries;dictionary of exceptions
-Oracle Open Office Chart : user-defined dictionaries;editing
-Oracle Open Office Chart : user-defined styles
-Oracle Open Office Chart : user-defined styles;automatically replacing
-Oracle Open Office Chart : UTF-8/UCS2 support
-Oracle Open Office Chart : values
-Oracle Open Office Chart : values;rounded as shown (Calc)
-Oracle Open Office Chart : variables
-Oracle Open Office Chart : variables;for paths
-Oracle Open Office Chart : variances in charts
-Oracle Open Office Chart : VBA code
-Oracle Open Office Chart : VBA code;loading/saving documents with VBA code
-Oracle Open Office Chart : version management
-Oracle Open Office Chart : version numbers of documents
-Oracle Open Office Chart : versions
-Oracle Open Office Chart : versions;comparing documents
-Oracle Open Office Chart : versions;file saving as, restriction
-Oracle Open Office Chart : versions;merging document versions
-Oracle Open Office Chart : versions;of a document
-Oracle Open Office Chart : versions;Oracle Open Office
-Oracle Open Office Chart : vertical callouts
-Oracle Open Office Chart : vertical scrollbars (Writer)
-Oracle Open Office Chart : vertical text boxes
-Oracle Open Office Chart : videos
-Oracle Open Office Chart : viewing
-Oracle Open Office Chart : viewing;databases
-Oracle Open Office Chart : viewing;file properties
-Oracle Open Office Chart : viewing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Chart : viewing;toolbars
-Oracle Open Office Chart : views
-Oracle Open Office Chart : views;creating database views (Base)
-Oracle Open Office Chart : views;defaults
-Oracle Open Office Chart : views;full screen
-Oracle Open Office Chart : views;icons
-Oracle Open Office Chart : views;scaling
-Oracle Open Office Chart : Visual Basic for Applications
-Oracle Open Office Chart : Visual Basic for Applications;loading/saving documents with VBA code
-Oracle Open Office Chart : watermarks
-Oracle Open Office Chart : web documents
-Oracle Open Office Chart : web documents;XForms
-Oracle Open Office Chart : Web support
-Oracle Open Office Chart : WebCast export
-Oracle Open Office Chart : WebDAV over HTTPS
-Oracle Open Office Chart : windows
-Oracle Open Office Chart : windows;docking
-Oracle Open Office Chart : windows;docking definition
-Oracle Open Office Chart : windows;hiding/showing/docking
-Oracle Open Office Chart : windows;new
-Oracle Open Office Chart : wizards
-Oracle Open Office Chart : wizards;agendas
-Oracle Open Office Chart : wizards;database queries
-Oracle Open Office Chart : wizards;database tables (Base)
-Oracle Open Office Chart : wizards;databases (Base)
-Oracle Open Office Chart : wizards;document converter
-Oracle Open Office Chart : wizards;Euro Converter
-Oracle Open Office Chart : wizards;faxes
-Oracle Open Office Chart : wizards;forms
-Oracle Open Office Chart : wizards;letters
-Oracle Open Office Chart : wizards;macros (Base)
-Oracle Open Office Chart : wizards;overview
-Oracle Open Office Chart : wizards;presentations
-Oracle Open Office Chart : wizards;reports
-Oracle Open Office Chart : Word documents
-Oracle Open Office Chart : Word documents;compatibility
-Oracle Open Office Chart : Word documents;saving as
-Oracle Open Office Chart : WordArt, see Fontwork
-Oracle Open Office Chart : words
-Oracle Open Office Chart : words;automatically replacing
-Oracle Open Office Chart : words;wrapping in cells
-Oracle Open Office Chart : words;wrapping in CTL
-Oracle Open Office Chart : working directory change
-Oracle Open Office Chart : wrapping text
-Oracle Open Office Chart : wrapping text;in cells
-Oracle Open Office Chart : write protection on/off
-Oracle Open Office Chart : writing aids options
-Oracle Open Office Chart : WYSIWYG in fonts lists
-Oracle Open Office Chart : X axes
-Oracle Open Office Chart : X axes;grid formatting
-Oracle Open Office Chart : X axes;positioning
-Oracle Open Office Chart : X axes;scaling
-Oracle Open Office Chart : X axes;showing
-Oracle Open Office Chart : XForms
-Oracle Open Office Chart : XForms;adding/editing/deleting/organizing namespaces
-Oracle Open Office Chart : XForms;conditions
-Oracle Open Office Chart : XForms;opening/editing
-Oracle Open Office Chart : XML converters
-Oracle Open Office Chart : XML file formats
-Oracle Open Office Chart : XML filters
-Oracle Open Office Chart : XML filters;creating/testing
-Oracle Open Office Chart : XML filters;saving as package/installing/deleting
-Oracle Open Office Chart : XML filters;settings
-Oracle Open Office Chart : XML Forms, see XForms
-Oracle Open Office Chart : XSLT filters, see also XML filters
-Oracle Open Office Chart : XY charts
-Oracle Open Office Chart : Y axes
-Oracle Open Office Chart : Y axes;formatting
-Oracle Open Office Chart : Y axes;grid formatting
-Oracle Open Office Chart : Y axes;positioning
-Oracle Open Office Chart : Y axes;scaling
-Oracle Open Office Chart : Y axes;showing
-Oracle Open Office Chart : years
-Oracle Open Office Chart : years;2-digit options
-Oracle Open Office Chart : Z axes
-Oracle Open Office Chart : Z axes;grid formatting
-Oracle Open Office Chart : Z axes;showing
-Oracle Open Office Chart : zero values
-Oracle Open Office Chart : zero values;displaying (Calc)
-Oracle Open Office Chart : zooming
-Oracle Open Office Chart : zooming;page views
-Oracle Open Office Chart : zooming;pictures
-Oracle Open Office Chart : zooming;status bar
-Oracle Open Office Base : 1/2 replacement
Oracle Open Office Base : 3D text creation
Oracle Open Office Base : abbreviation replacement
Oracle Open Office Base : absolute hyperlinks
@@ -9351,7 +15204,6 @@ Oracle Open Office Base : files
Oracle Open Office Base : files;filters and formats
Oracle Open Office Base : files;importing
Oracle Open Office Base : files;opening
-Oracle Open Office Base : files;opening with placeholders
Oracle Open Office Base : files;properties
Oracle Open Office Base : files;saving
Oracle Open Office Base : files;saving automatically
@@ -9903,7 +15755,6 @@ Oracle Open Office Base : numbering;turning off
Oracle Open Office Base : numbering;using automatically
Oracle Open Office Base : numbers
Oracle Open Office Base : numbers;date, time and currency formats
-Oracle Open Office Base : numbers;decimal places (Calc)
Oracle Open Office Base : numerical fields in forms
Oracle Open Office Base : objects
Oracle Open Office Base : objects;always moveable (Impress/Draw)
@@ -9941,7 +15792,6 @@ Oracle Open Office Base : online update options
Oracle Open Office Base : online updates
Oracle Open Office Base : online updates;checking automatically
Oracle Open Office Base : online updates;checking manually
-Oracle Open Office Base : Open/Save dialogs
Oracle Open Office Base : OpenDocument file formats
Oracle Open Office Base : OpenGL
Oracle Open Office Base : OpenGL;definition
@@ -9981,6 +15831,8 @@ Oracle Open Office Base : Oracle Open Office documents;viewing and editing in In
Oracle Open Office Base : Oracle Open Office Math start
Oracle Open Office Base : ordering
Oracle Open Office Base : ordering;objects
+Oracle Open Office Base : ordinal numbers
+Oracle Open Office Base : ordinal numbers;replacing
Oracle Open Office Base : organizing
Oracle Open Office Base : organizing;macros and scripts
Oracle Open Office Base : organizing;namespaces in XForms
@@ -10213,8 +16065,6 @@ Oracle Open Office Base : queries;parameter queries (Base)
Oracle Open Office Base : queries;printing (Base)
Oracle Open Office Base : Query Wizard (Base)
Oracle Open Office Base : Quickstarter
-Oracle Open Office Base : quotation marks
-Oracle Open Office Base : quotation marks;replacing
Oracle Open Office Base : quotes
Oracle Open Office Base : quotes;custom
Oracle Open Office Base : radio button creation
@@ -10250,7 +16100,6 @@ Oracle Open Office Base : registering;databases (Base)
Oracle Open Office Base : registering;Oracle Open Office
Oracle Open Office Base : regular expressions
Oracle Open Office Base : regular expressions;list of
-Oracle Open Office Base : regular expressions;opening files
Oracle Open Office Base : relational databases (Base)
Oracle Open Office Base : relations
Oracle Open Office Base : relations;creating and deleting (Base)
@@ -10275,6 +16124,7 @@ Oracle Open Office Base : replacement table
Oracle Open Office Base : replacing
Oracle Open Office Base : replacing;AutoCorrect function
Oracle Open Office Base : replacing;dashes
+Oracle Open Office Base : replacing;ordinal numbers
Oracle Open Office Base : replacing;tab stops (regular expressions)
Oracle Open Office Base : Report Builder
Oracle Open Office Base : reports
@@ -10670,7 +16520,6 @@ Oracle Open Office Base : tree view of Help
Oracle Open Office Base : typefaces
Oracle Open Office Base : typefaces;adding under UNIX
Oracle Open Office Base : typefaces;formats
-Oracle Open Office Base : typographical quotes in Oracle Open Office Writer
Oracle Open Office Base : typography
Oracle Open Office Base : typography;Asian
Oracle Open Office Base : underlining
@@ -10806,7 +16655,2556 @@ Oracle Open Office Base : zooming
Oracle Open Office Base : zooming;page views
Oracle Open Office Base : zooming;pictures
Oracle Open Office Base : zooming;status bar
-Oracle Open Office Draw : 1/2 replacement
+Oracle Open Office Basic : "^" operator (mathematical)
+Oracle Open Office Basic : "-" operator (mathematical)
+Oracle Open Office Basic : "*" operator (mathematical)
+Oracle Open Office Basic : "/" operator (mathematical)
+Oracle Open Office Basic : "+" operator (mathematical)
+Oracle Open Office Basic : 3D text creation
+Oracle Open Office Basic : abbreviation replacement
+Oracle Open Office Basic : Abs function
+Oracle Open Office Basic : absolute hyperlinks
+Oracle Open Office Basic : absolute saving of URLs
+Oracle Open Office Basic : accents
+Oracle Open Office Basic : Access databases (base)
+Oracle Open Office Basic : access rights for database tables (Base)
+Oracle Open Office Basic : accessibility
+Oracle Open Office Basic : accessibility;general shortcuts
+Oracle Open Office Basic : accessibility;options
+Oracle Open Office Basic : accessibility;Oracle Open Office assistive technology
+Oracle Open Office Basic : accessibility;Oracle Open Office features
+Oracle Open Office Basic : activating
+Oracle Open Office Basic : activating;context menus
+Oracle Open Office Basic : activating;Error Report Tool
+Oracle Open Office Basic : activating;extended help tips
+Oracle Open Office Basic : activating;plug-ins
+Oracle Open Office Basic : ActiveX control
+Oracle Open Office Basic : Adabas D databases (base)
+Oracle Open Office Basic : add-ons, see UNO components
+Oracle Open Office Basic : adding libraries
+Oracle Open Office Basic : additional selection mode
+Oracle Open Office Basic : address books
+Oracle Open Office Basic : address books;LDAP server (Base)
+Oracle Open Office Basic : address books;registering
+Oracle Open Office Basic : address labels from databases
+Oracle Open Office Basic : ADO databases (Base)
+Oracle Open Office Basic : Agenda Wizard
+Oracle Open Office Basic : aging filter
+Oracle Open Office Basic : aligning
+Oracle Open Office Basic : aligning;cells
+Oracle Open Office Basic : aligning;objects
+Oracle Open Office Basic : aligning;paragraphs
+Oracle Open Office Basic : aligning;tables in text
+Oracle Open Office Basic : aligning;text objects
+Oracle Open Office Basic : alternative fonts
+Oracle Open Office Basic : ampersand symbol in StarBasic
+Oracle Open Office Basic : ampersand symbol, see also operators
+Oracle Open Office Basic : anchors
+Oracle Open Office Basic : anchors;changing
+Oracle Open Office Basic : anchors;displaying (Calc)
+Oracle Open Office Basic : anchors;types/positions for draw objects
+Oracle Open Office Basic : AND operator (logical)
+Oracle Open Office Basic : animations
+Oracle Open Office Basic : animations;accessibility options
+Oracle Open Office Basic : appearance options
+Oracle Open Office Basic : Arabic
+Oracle Open Office Basic : Arabic;entering text
+Oracle Open Office Basic : Arabic;language settings
+Oracle Open Office Basic : areas
+Oracle Open Office Basic : areas;bitmap patterns
+Oracle Open Office Basic : areas;hatched/dotted
+Oracle Open Office Basic : areas;shadows
+Oracle Open Office Basic : areas;slanting
+Oracle Open Office Basic : areas;styles
+Oracle Open Office Basic : areas;transparency
+Oracle Open Office Basic : arguments in command line
+Oracle Open Office Basic : arranging
+Oracle Open Office Basic : arranging;objects
+Oracle Open Office Basic : Array function
+Oracle Open Office Basic : arrays
+Oracle Open Office Basic : arrays;declaring
+Oracle Open Office Basic : arrays;dimensioning
+Oracle Open Office Basic : arrows
+Oracle Open Office Basic : arrows;defining arrow heads
+Oracle Open Office Basic : arrows;defining arrow lines
+Oracle Open Office Basic : arrows;drawing in text
+Oracle Open Office Basic : Asc function
+Oracle Open Office Basic : ASCII
+Oracle Open Office Basic : ASCII;definition
+Oracle Open Office Basic : Asian languages
+Oracle Open Office Basic : Asian languages;enabling
+Oracle Open Office Basic : Asian Phonetic Guide
+Oracle Open Office Basic : Asian typography
+Oracle Open Office Basic : assigning macros to events
+Oracle Open Office Basic : assigning scripts
+Oracle Open Office Basic : assistive technology in Oracle Open Office
+Oracle Open Office Basic : Atn function
+Oracle Open Office Basic : attaching toolbars
+Oracle Open Office Basic : attachments in e-mails
+Oracle Open Office Basic : audio
+Oracle Open Office Basic : auto reloading HTML documents
+Oracle Open Office Basic : AutoAbstract function for sending text to presentations
+Oracle Open Office Basic : AutoCaption function in Oracle Open Office Writer
+Oracle Open Office Basic : AutoComplete function in text and list boxes
+Oracle Open Office Basic : AutoCorrect function
+Oracle Open Office Basic : AutoCorrect function;context menu
+Oracle Open Office Basic : AutoCorrect function;options
+Oracle Open Office Basic : AutoCorrect function;pictures and frames
+Oracle Open Office Basic : AutoCorrect function;quotes
+Oracle Open Office Basic : AutoCorrect function;replacement table
+Oracle Open Office Basic : AutoCorrect function;switching on and off in Calc
+Oracle Open Office Basic : AutoCorrect function;URL recognition
+Oracle Open Office Basic : AutoFormat function
+Oracle Open Office Basic : AutoFormat function;switching on and off
+Oracle Open Office Basic : automatic captions (Writer)
+Oracle Open Office Basic : automatic control focus
+Oracle Open Office Basic : automatic hyperlink formatting
+Oracle Open Office Basic : automatic line breaks
+Oracle Open Office Basic : automatic lines/borders in text
+Oracle Open Office Basic : automatic saving
+Oracle Open Office Basic : AutoPilots, see wizards
+Oracle Open Office Basic : AutoValue (Base)
+Oracle Open Office Basic : axes in charts
+Oracle Open Office Basic : backgrounds
+Oracle Open Office Basic : backgrounds;defining colors/pictures
+Oracle Open Office Basic : backgrounds;frames/sections/indexes
+Oracle Open Office Basic : backgrounds;inserting from Gallery
+Oracle Open Office Basic : backgrounds;printing
+Oracle Open Office Basic : backing window
+Oracle Open Office Basic : backups
+Oracle Open Office Basic : backups;automatic
+Oracle Open Office Basic : backups;documents
+Oracle Open Office Basic : Basic
+Oracle Open Office Basic : Basic;fonts for source display
+Oracle Open Office Basic : Basic;programming
+Oracle Open Office Basic : Basic;recording macros
+Oracle Open Office Basic : Basic editor
+Oracle Open Office Basic : basic fonts
+Oracle Open Office Basic : Basic IDE
+Oracle Open Office Basic : Basic IDE;Integrated Development Environment
+Oracle Open Office Basic : Basic IDE;macros
+Oracle Open Office Basic : BasicLibraries (LibraryContainer)
+Oracle Open Office Basic : Beep statement
+Oracle Open Office Basic : Bézier curves
+Oracle Open Office Basic : Bézier curves;control points in presentations
+Oracle Open Office Basic : bi-directional writing
+Oracle Open Office Basic : binding space
+Oracle Open Office Basic : bitmaps
+Oracle Open Office Basic : bitmaps;inserting and editing
+Oracle Open Office Basic : bitmaps;off for faster printing
+Oracle Open Office Basic : bitmaps;patterns
+Oracle Open Office Basic : black and white printing
+Oracle Open Office Basic : black printing in Calc
+Oracle Open Office Basic : block selection mode
+Oracle Open Office Basic : Blue function
+Oracle Open Office Basic : bold
+Oracle Open Office Basic : bold;AutoFormat function
+Oracle Open Office Basic : bold;text
+Oracle Open Office Basic : bookmarks
+Oracle Open Office Basic : bookmarks;Help
+Oracle Open Office Basic : borders
+Oracle Open Office Basic : borders;arranging
+Oracle Open Office Basic : borders;cells on screen (Calc)
+Oracle Open Office Basic : borders;for paragraphs
+Oracle Open Office Basic : borders;for tables
+Oracle Open Office Basic : borders;shadows
+Oracle Open Office Basic : borders;table boundaries (Writer)
+Oracle Open Office Basic : borders, see also frames
+Oracle Open Office Basic : bound fields
+Oracle Open Office Basic : bound fields;controls
+Oracle Open Office Basic : boundaries of tables (Writer)
+Oracle Open Office Basic : break display (Writer)
+Oracle Open Office Basic : breakpoints
+Oracle Open Office Basic : brochures
+Oracle Open Office Basic : brochures;printing several
+Oracle Open Office Basic : build numbers of Oracle Open Office
+Oracle Open Office Basic : bullet lists
+Oracle Open Office Basic : bullet lists;formatting options
+Oracle Open Office Basic : bullets
+Oracle Open Office Basic : bullets;paragraphs
+Oracle Open Office Basic : bullets;replacing
+Oracle Open Office Basic : bullets;turning off
+Oracle Open Office Basic : business cards
+Oracle Open Office Basic : business cards;creating and synchronizing
+Oracle Open Office Basic : business cards;using templates
+Oracle Open Office Basic : button bars, see toolbars
+Oracle Open Office Basic : buttons
+Oracle Open Office Basic : buttons;adding push buttons
+Oracle Open Office Basic : buttons;big/small
+Oracle Open Office Basic : buttons;controls
+Oracle Open Office Basic : buttons;editing hyperlink buttons
+Oracle Open Office Basic : buttons;form functions
+Oracle Open Office Basic : buttons;toolbars
+Oracle Open Office Basic : cache for graphics
+Oracle Open Office Basic : calculating
+Oracle Open Office Basic : calculating;iterative references (Calc)
+Oracle Open Office Basic : Call Stack window
+Oracle Open Office Basic : Call statement
+Oracle Open Office Basic : callouts
+Oracle Open Office Basic : callouts;drawings
+Oracle Open Office Basic : capital letters
+Oracle Open Office Basic : capital letters;AutoCorrect function
+Oracle Open Office Basic : capital letters;font effects
+Oracle Open Office Basic : captions
+Oracle Open Office Basic : captions;automatic captions (Writer)
+Oracle Open Office Basic : captions;tables/pictures/frames/OLE objects (Writer)
+Oracle Open Office Basic : captions, see also labels/callouts
+Oracle Open Office Basic : cascading update (Base)
+Oracle Open Office Basic : case sensitivity
+Oracle Open Office Basic : case sensitivity;comparing cell contents (Calc)
+Oracle Open Office Basic : case sensitivity;searching
+Oracle Open Office Basic : Case statement
+Oracle Open Office Basic : CBool function
+Oracle Open Office Basic : CByte function
+Oracle Open Office Basic : CCur function
+Oracle Open Office Basic : CDate function
+Oracle Open Office Basic : CdateFromIso function
+Oracle Open Office Basic : CdateToIso function
+Oracle Open Office Basic : CDbl function
+Oracle Open Office Basic : CDec function
+Oracle Open Office Basic : cells
+Oracle Open Office Basic : cells;aligning
+Oracle Open Office Basic : cells;coloring (Calc)
+Oracle Open Office Basic : cells;cursor positions after input (Calc)
+Oracle Open Office Basic : cells;formatting without effect (Calc)
+Oracle Open Office Basic : cells;line breaks
+Oracle Open Office Basic : cells;linked to controls
+Oracle Open Office Basic : cells;number of
+Oracle Open Office Basic : cells;pasting
+Oracle Open Office Basic : cells;resetting formats
+Oracle Open Office Basic : cells;showing grid lines (Calc)
+Oracle Open Office Basic : centered text
+Oracle Open Office Basic : centimeters
+Oracle Open Office Basic : certificates
+Oracle Open Office Basic : changes
+Oracle Open Office Basic : changes;accepting or rejecting
+Oracle Open Office Basic : changes;comparing to original
+Oracle Open Office Basic : changes;protecting
+Oracle Open Office Basic : changes;recording
+Oracle Open Office Basic : changes;review function
+Oracle Open Office Basic : changes;showing
+Oracle Open Office Basic : changing
+Oracle Open Office Basic : changing;control properties
+Oracle Open Office Basic : changing;document titles
+Oracle Open Office Basic : changing;file associations in Setup program
+Oracle Open Office Basic : changing;icon sizes
+Oracle Open Office Basic : changing;links
+Oracle Open Office Basic : changing;work directory
+Oracle Open Office Basic : changing, see also editing and replacing
+Oracle Open Office Basic : character styles
+Oracle Open Office Basic : character styles;language selection
+Oracle Open Office Basic : characters
+Oracle Open Office Basic : characters;alternative fonts
+Oracle Open Office Basic : characters;Asian layout
+Oracle Open Office Basic : characters;bold
+Oracle Open Office Basic : characters;coloring
+Oracle Open Office Basic : characters;displaying only on screen (Writer)
+Oracle Open Office Basic : characters;enabling CTL and Asian characters
+Oracle Open Office Basic : characters;font effects
+Oracle Open Office Basic : characters;fonts and formats
+Oracle Open Office Basic : characters;hyperlinks
+Oracle Open Office Basic : characters;italics
+Oracle Open Office Basic : characters;language selection
+Oracle Open Office Basic : characters;shadowed
+Oracle Open Office Basic : characters;spacing
+Oracle Open Office Basic : characters;special
+Oracle Open Office Basic : characters;underlining
+Oracle Open Office Basic : charcoal sketches filter
+Oracle Open Office Basic : charts
+Oracle Open Office Basic : charts;arranging within stacks
+Oracle Open Office Basic : charts;bars with textures
+Oracle Open Office Basic : charts;colors
+Oracle Open Office Basic : charts;copying with link to source cell range
+Oracle Open Office Basic : charts;displaying (Calc)
+Oracle Open Office Basic : charts;editing axes
+Oracle Open Office Basic : charts;editing data
+Oracle Open Office Basic : charts;editing legends
+Oracle Open Office Basic : charts;editing titles
+Oracle Open Office Basic : charts;inserting
+Oracle Open Office Basic : charts;updating automatically (Writer)
+Oracle Open Office Basic : ChDir statement
+Oracle Open Office Basic : ChDrive statement
+Oracle Open Office Basic : check box control
+Oracle Open Office Basic : check box creation
+Oracle Open Office Basic : Chinese writing systems
+Oracle Open Office Basic : Choose function
+Oracle Open Office Basic : choosing printers
+Oracle Open Office Basic : Chr function
+Oracle Open Office Basic : CInt function
+Oracle Open Office Basic : circle drawings
+Oracle Open Office Basic : Client Side ImageMap
+Oracle Open Office Basic : clipboard
+Oracle Open Office Basic : clipboard;cutting
+Oracle Open Office Basic : clipboard;pasting
+Oracle Open Office Basic : clipboard;pasting formatted/unformatted text
+Oracle Open Office Basic : clipboard;selection clipboard
+Oracle Open Office Basic : clipboard;Unix
+Oracle Open Office Basic : CLng function
+Oracle Open Office Basic : Close statement
+Oracle Open Office Basic : closing
+Oracle Open Office Basic : closing;documents
+Oracle Open Office Basic : closing;toolbars
+Oracle Open Office Basic : collaboration
+Oracle Open Office Basic : color bar
+Oracle Open Office Basic : colors
+Oracle Open Office Basic : colors;adding
+Oracle Open Office Basic : colors;appearance
+Oracle Open Office Basic : colors;backgrounds
+Oracle Open Office Basic : colors;charts
+Oracle Open Office Basic : colors;fill format
+Oracle Open Office Basic : colors;fonts
+Oracle Open Office Basic : colors;grid lines and cells (Calc)
+Oracle Open Office Basic : colors;models
+Oracle Open Office Basic : colors;not printing
+Oracle Open Office Basic : colors;printing in grayscale
+Oracle Open Office Basic : colors;restriction (Calc)
+Oracle Open Office Basic : colors;selection
+Oracle Open Office Basic : column headers
+Oracle Open Office Basic : column headers;displaying (Calc)
+Oracle Open Office Basic : column headers;highlighting (Calc)
+Oracle Open Office Basic : columns
+Oracle Open Office Basic : columns;setting with the mouse
+Oracle Open Office Basic : combo box control
+Oracle Open Office Basic : combo box creation
+Oracle Open Office Basic : command button creation
+Oracle Open Office Basic : command buttons, see push buttons
+Oracle Open Office Basic : command line parameters
+Oracle Open Office Basic : commands
+Oracle Open Office Basic : commands;repeating
+Oracle Open Office Basic : commands;SQL
+Oracle Open Office Basic : comments
+Oracle Open Office Basic : comments;displaying (Calc)
+Oracle Open Office Basic : comments;inserting/editing/deleting/printing
+Oracle Open Office Basic : comments;on changes
+Oracle Open Office Basic : comments;printing in text
+Oracle Open Office Basic : comments;Rem statement
+Oracle Open Office Basic : common terms
+Oracle Open Office Basic : common terms;Chinese dictionary
+Oracle Open Office Basic : common terms;glossaries
+Oracle Open Office Basic : common terms;Internet glossary
+Oracle Open Office Basic : comparison operators
+Oracle Open Office Basic : comparison operators;Oracle Open Office Basic
+Oracle Open Office Basic : comparisons
+Oracle Open Office Basic : comparisons;document versions
+Oracle Open Office Basic : comparisons;operators in default filter dialog
+Oracle Open Office Basic : compatibility settings for MS Word import
+Oracle Open Office Basic : complete screen view
+Oracle Open Office Basic : complex text layout
+Oracle Open Office Basic : complex text layout;definition
+Oracle Open Office Basic : complex text layout;enabling
+Oracle Open Office Basic : complex text layout, see CTL
+Oracle Open Office Basic : components
+Oracle Open Office Basic : components;addressing
+Oracle Open Office Basic : compose key to insert special characters
+Oracle Open Office Basic : concatenation, see ampersand symbol
+Oracle Open Office Basic : conditional separators
+Oracle Open Office Basic : conditions
+Oracle Open Office Basic : conditions;in number formats
+Oracle Open Office Basic : conditions;items in Data Navigator
+Oracle Open Office Basic : Configuration Manager
+Oracle Open Office Basic : configuring
+Oracle Open Office Basic : configuring;fax icon
+Oracle Open Office Basic : configuring;Oracle Open Office
+Oracle Open Office Basic : configuring;toolbars
+Oracle Open Office Basic : connections to data sources (Base)
+Oracle Open Office Basic : Const statement
+Oracle Open Office Basic : constants
+Oracle Open Office Basic : contents protection
+Oracle Open Office Basic : context menus
+Oracle Open Office Basic : continuation
+Oracle Open Office Basic : continuation;long lines in editor
+Oracle Open Office Basic : control point display in presentations
+Oracle Open Office Basic : controls
+Oracle Open Office Basic : controls;activating in forms
+Oracle Open Office Basic : controls;adding to documents
+Oracle Open Office Basic : controls;arranging in forms
+Oracle Open Office Basic : controls;arranging within stacks
+Oracle Open Office Basic : controls;assigning data sources
+Oracle Open Office Basic : controls;assigning macros (Basic)
+Oracle Open Office Basic : controls;bound fields/list contents/linked cells
+Oracle Open Office Basic : controls;changing properties
+Oracle Open Office Basic : controls;creating in the dialog editor
+Oracle Open Office Basic : controls;events
+Oracle Open Office Basic : controls;focus
+Oracle Open Office Basic : controls;formatted fields
+Oracle Open Office Basic : controls;grouping
+Oracle Open Office Basic : controls;hidden
+Oracle Open Office Basic : controls;in dialog editor
+Oracle Open Office Basic : controls;inserting
+Oracle Open Office Basic : controls;multi-line titles
+Oracle Open Office Basic : controls;positions and sizes
+Oracle Open Office Basic : controls;printing
+Oracle Open Office Basic : controls;properties
+Oracle Open Office Basic : controls;properties of form controls
+Oracle Open Office Basic : controls;properties of table controls
+Oracle Open Office Basic : controls;reading or editing properties (example)
+Oracle Open Office Basic : controls;reference by SQL
+Oracle Open Office Basic : controls;rich text control
+Oracle Open Office Basic : controls;select mode
+Oracle Open Office Basic : controls;showing (Writer)
+Oracle Open Office Basic : converters
+Oracle Open Office Basic : converters;Euro converter
+Oracle Open Office Basic : converters;PostScript, UNIX
+Oracle Open Office Basic : converters;XML
+Oracle Open Office Basic : ConvertFromURL function
+Oracle Open Office Basic : converting
+Oracle Open Office Basic : converting;Hangul/Hanja
+Oracle Open Office Basic : converting;metrics
+Oracle Open Office Basic : converting;Microsoft documents
+Oracle Open Office Basic : converting;Oracle Open Office documents
+Oracle Open Office Basic : converting;Pocket PC formats
+Oracle Open Office Basic : ConvertToURL function
+Oracle Open Office Basic : copies
+Oracle Open Office Basic : copies;printing
+Oracle Open Office Basic : copying
+Oracle Open Office Basic : copying;by drag and drop
+Oracle Open Office Basic : copying;data from text documents
+Oracle Open Office Basic : copying;datasource records in spreadsheets
+Oracle Open Office Basic : copying;draw objects
+Oracle Open Office Basic : copying;draw objects between documents
+Oracle Open Office Basic : copying;formatting
+Oracle Open Office Basic : copying;from data source view
+Oracle Open Office Basic : copying;from Gallery
+Oracle Open Office Basic : copying;in Unix
+Oracle Open Office Basic : copying;modules
+Oracle Open Office Basic : copying;pictures, between documents
+Oracle Open Office Basic : copying;sheet areas, to text documents
+Oracle Open Office Basic : copying;to Gallery
+Oracle Open Office Basic : copyright for Oracle Open Office
+Oracle Open Office Basic : corner roundings
+Oracle Open Office Basic : Cos function
+Oracle Open Office Basic : crash reports
+Oracle Open Office Basic : CreateObject function
+Oracle Open Office Basic : CreateUnoDialog function
+Oracle Open Office Basic : CreateUnoListener function
+Oracle Open Office Basic : CreateUnoService function
+Oracle Open Office Basic : CreateUnoStruct function
+Oracle Open Office Basic : CreateUnoValue function
+Oracle Open Office Basic : criteria of query design (Base)
+Oracle Open Office Basic : cropping pictures
+Oracle Open Office Basic : CSng function
+Oracle Open Office Basic : CStr function
+Oracle Open Office Basic : CTL
+Oracle Open Office Basic : CTL;(not) wrapping words
+Oracle Open Office Basic : CTL;complex text layout languages
+Oracle Open Office Basic : CTL;definition
+Oracle Open Office Basic : CTL;options
+Oracle Open Office Basic : CurDir function
+Oracle Open Office Basic : currencies
+Oracle Open Office Basic : currencies;converters
+Oracle Open Office Basic : currencies;format codes
+Oracle Open Office Basic : currency field control
+Oracle Open Office Basic : currency field creation
+Oracle Open Office Basic : currency formats
+Oracle Open Office Basic : cursor
+Oracle Open Office Basic : cursor;allowing in protected areas (Writer)
+Oracle Open Office Basic : cursor;in read-only text
+Oracle Open Office Basic : cursor;quickly moving to an object
+Oracle Open Office Basic : curves
+Oracle Open Office Basic : curves;editing points
+Oracle Open Office Basic : custom dictionaries
+Oracle Open Office Basic : custom dictionaries;editing
+Oracle Open Office Basic : custom hyphens (Writer)
+Oracle Open Office Basic : custom quotes
+Oracle Open Office Basic : custom templates
+Oracle Open Office Basic : customizing
+Oracle Open Office Basic : customizing;events
+Oracle Open Office Basic : customizing;keyboard
+Oracle Open Office Basic : customizing;menus
+Oracle Open Office Basic : customizing;Oracle Open Office
+Oracle Open Office Basic : customizing;round corners
+Oracle Open Office Basic : customizing;toolbars
+Oracle Open Office Basic : cutting
+Oracle Open Office Basic : CVar function
+Oracle Open Office Basic : CVErr function
+Oracle Open Office Basic : dashes
+Oracle Open Office Basic : data
+Oracle Open Office Basic : data;filtering in forms
+Oracle Open Office Basic : data;forms and subforms
+Oracle Open Office Basic : data;read-only
+Oracle Open Office Basic : data;sorting in forms
+Oracle Open Office Basic : data;user data
+Oracle Open Office Basic : data binding change in XForms
+Oracle Open Office Basic : Data Navigator
+Oracle Open Office Basic : Data Navigator;adding/editing items
+Oracle Open Office Basic : Data Navigator;display options
+Oracle Open Office Basic : data source browser
+Oracle Open Office Basic : data source explorer
+Oracle Open Office Basic : data source view
+Oracle Open Office Basic : data source view;drag and drop
+Oracle Open Office Basic : data source view;overview
+Oracle Open Office Basic : data source view;showing
+Oracle Open Office Basic : data sources
+Oracle Open Office Basic : data sources;as tables
+Oracle Open Office Basic : data sources;connection settings (Base)
+Oracle Open Office Basic : data sources;copying records to spreadsheets
+Oracle Open Office Basic : data sources;displaying current
+Oracle Open Office Basic : data sources;LDAP server (Base)
+Oracle Open Office Basic : data sources;Oracle Open Office Base
+Oracle Open Office Basic : data sources;registering address books
+Oracle Open Office Basic : data sources;reports
+Oracle Open Office Basic : data sources;viewing
+Oracle Open Office Basic : data structure of XForms
+Oracle Open Office Basic : data, see also values
+Oracle Open Office Basic : database contents
+Oracle Open Office Basic : database contents;inserting as tables
+Oracle Open Office Basic : database contents;inserting as text
+Oracle Open Office Basic : database reports
+Oracle Open Office Basic : Database Wizard (Base)
+Oracle Open Office Basic : databases
+Oracle Open Office Basic : databases;administration through SQL (Base)
+Oracle Open Office Basic : databases;ADO (Base)
+Oracle Open Office Basic : databases;connecting (Base)
+Oracle Open Office Basic : databases;creating
+Oracle Open Office Basic : databases;creating labels
+Oracle Open Office Basic : databases;creating queries
+Oracle Open Office Basic : databases;creating reports
+Oracle Open Office Basic : databases;creating tables
+Oracle Open Office Basic : databases;deleting (Base)
+Oracle Open Office Basic : databases;drag and drop (Base)
+Oracle Open Office Basic : databases;editing tables
+Oracle Open Office Basic : databases;form filters
+Oracle Open Office Basic : databases;formats (Base)
+Oracle Open Office Basic : databases;importing/exporting
+Oracle Open Office Basic : databases;JDBC (Base)
+Oracle Open Office Basic : databases;main page (Base)
+Oracle Open Office Basic : databases;ODBC (Base)
+Oracle Open Office Basic : databases;overview
+Oracle Open Office Basic : databases;registering (Base)
+Oracle Open Office Basic : databases;searching records
+Oracle Open Office Basic : databases;shortcut keys
+Oracle Open Office Basic : databases;sorting
+Oracle Open Office Basic : databases;standard filters
+Oracle Open Office Basic : databases;text formats
+Oracle Open Office Basic : databases;viewing
+Oracle Open Office Basic : date field control
+Oracle Open Office Basic : date fields
+Oracle Open Office Basic : date fields;creating
+Oracle Open Office Basic : date fields;properties
+Oracle Open Office Basic : date formats
+Oracle Open Office Basic : Date statement
+Oracle Open Office Basic : DateAdd function
+Oracle Open Office Basic : DateDiff function
+Oracle Open Office Basic : DatePart function
+Oracle Open Office Basic : dates
+Oracle Open Office Basic : dates;default (Calc)
+Oracle Open Office Basic : dates;printing in presentations
+Oracle Open Office Basic : dates;start 1900/01/01 (Calc)
+Oracle Open Office Basic : dates;start 1904/01/01 (Calc)
+Oracle Open Office Basic : DateSerial function
+Oracle Open Office Basic : DateValue function
+Oracle Open Office Basic : Day function
+Oracle Open Office Basic : dBASE
+Oracle Open Office Basic : dBASE;database settings (Base)
+Oracle Open Office Basic : DDE
+Oracle Open Office Basic : DDE;definition
+Oracle Open Office Basic : deactivating
+Oracle Open Office Basic : deactivating;plug-ins
+Oracle Open Office Basic : debugging Basic programs
+Oracle Open Office Basic : decimal places displayed (Calc)
+Oracle Open Office Basic : decimal separator key
+Oracle Open Office Basic : decimal tab stops
+Oracle Open Office Basic : Declare statement
+Oracle Open Office Basic : declaring variables
+Oracle Open Office Basic : default directories
+Oracle Open Office Basic : default filters
+Oracle Open Office Basic : default filters;comparison operators
+Oracle Open Office Basic : default filters;databases
+Oracle Open Office Basic : default printer
+Oracle Open Office Basic : default printer;setting up
+Oracle Open Office Basic : default printer;UNIX
+Oracle Open Office Basic : default templates
+Oracle Open Office Basic : default templates;changing
+Oracle Open Office Basic : default templates;organizing
+Oracle Open Office Basic : defaults
+Oracle Open Office Basic : defaults;documents
+Oracle Open Office Basic : defaults;file formats in file dialogs
+Oracle Open Office Basic : defaults;file formats in Oracle Open Office
+Oracle Open Office Basic : defaults;fonts
+Oracle Open Office Basic : defaults;grids (Writer/Calc)
+Oracle Open Office Basic : defaults;languages
+Oracle Open Office Basic : defaults;number formats
+Oracle Open Office Basic : defaults;of saving
+Oracle Open Office Basic : defaults;program configuration
+Oracle Open Office Basic : defaults;tab stops in text
+Oracle Open Office Basic : defaults;views
+Oracle Open Office Basic : DefBool statement
+Oracle Open Office Basic : DefCur statement
+Oracle Open Office Basic : DefDate statement
+Oracle Open Office Basic : DefDbl statement
+Oracle Open Office Basic : DefErr statement
+Oracle Open Office Basic : defining
+Oracle Open Office Basic : defining;arrowheads and other line ends
+Oracle Open Office Basic : defining;colors
+Oracle Open Office Basic : defining;constants
+Oracle Open Office Basic : defining;line styles
+Oracle Open Office Basic : defining;paragraph borders
+Oracle Open Office Basic : defining;queries (Base)
+Oracle Open Office Basic : defining;table borders
+Oracle Open Office Basic : DefInt statement
+Oracle Open Office Basic : DefLng statement
+Oracle Open Office Basic : DefObj statement
+Oracle Open Office Basic : DefSng statement
+Oracle Open Office Basic : DefStr statement
+Oracle Open Office Basic : DefVar statement
+Oracle Open Office Basic : deleting
+Oracle Open Office Basic : deleting;all direct formatting
+Oracle Open Office Basic : deleting;comments
+Oracle Open Office Basic : deleting;databases (Base)
+Oracle Open Office Basic : deleting;hyperlinks
+Oracle Open Office Basic : deleting;libraries/modules/dialogs
+Oracle Open Office Basic : deleting;lines in text
+Oracle Open Office Basic : deleting;macro assignments to events
+Oracle Open Office Basic : deleting;models/instances
+Oracle Open Office Basic : deleting;namespaces in XForms
+Oracle Open Office Basic : deleting;tab stops
+Oracle Open Office Basic : deleting;templates
+Oracle Open Office Basic : deleting;XML filters
+Oracle Open Office Basic : depth stagger
+Oracle Open Office Basic : descriptions for objects
+Oracle Open Office Basic : design mode after saving
+Oracle Open Office Basic : design view
+Oracle Open Office Basic : design view;creating forms
+Oracle Open Office Basic : design view;queries/views (Base)
+Oracle Open Office Basic : designing
+Oracle Open Office Basic : designing;database tables
+Oracle Open Office Basic : designing;fonts
+Oracle Open Office Basic : designing;queries (Base)
+Oracle Open Office Basic : detaching toolbars
+Oracle Open Office Basic : dialog editor
+Oracle Open Office Basic : dialog editor;changing control properties
+Oracle Open Office Basic : dialog editor;creating controls
+Oracle Open Office Basic : dialog editor;programming examples for controls
+Oracle Open Office Basic : DialogLibraries (LibraryContainer)
+Oracle Open Office Basic : dialogs
+Oracle Open Office Basic : dialogs;creating Basic dialogs
+Oracle Open Office Basic : dialogs;displaying (example)
+Oracle Open Office Basic : dialogs;loading (example)
+Oracle Open Office Basic : dialogs;organizing
+Oracle Open Office Basic : dialogs;properties
+Oracle Open Office Basic : dialogs;translating
+Oracle Open Office Basic : dialogs;using program code to show (example)
+Oracle Open Office Basic : dictionaries
+Oracle Open Office Basic : dictionaries;common terms in simplified and traditional chinese
+Oracle Open Office Basic : dictionaries;creating
+Oracle Open Office Basic : dictionaries;editing user-defined
+Oracle Open Office Basic : dictionaries;spellcheck
+Oracle Open Office Basic : dictionaries, see also languages
+Oracle Open Office Basic : digital signatures
+Oracle Open Office Basic : digital signatures;getting/managing/applying
+Oracle Open Office Basic : digital signatures;overview
+Oracle Open Office Basic : digital signatures;WebDAV over HTTPS
+Oracle Open Office Basic : Dim statement
+Oracle Open Office Basic : DimArray function
+Oracle Open Office Basic : dimensioning arrays
+Oracle Open Office Basic : Dir function
+Oracle Open Office Basic : direct formatting
+Oracle Open Office Basic : direct formatting;undoing all
+Oracle Open Office Basic : directories
+Oracle Open Office Basic : directories;creating new
+Oracle Open Office Basic : directories;directory structure
+Oracle Open Office Basic : disabled persons
+Oracle Open Office Basic : displaying
+Oracle Open Office Basic : displaying;comments (Calc)
+Oracle Open Office Basic : displaying;comments in text documents
+Oracle Open Office Basic : displaying;non-printing characters (Writer)
+Oracle Open Office Basic : displaying;pictures and objects (Writer)
+Oracle Open Office Basic : displaying;tables (Writer)
+Oracle Open Office Basic : displaying;zero values (Calc)
+Oracle Open Office Basic : distances
+Oracle Open Office Basic : distinct values in SQL queries
+Oracle Open Office Basic : distorting in drawings
+Oracle Open Office Basic : distributing XML filters
+Oracle Open Office Basic : DLL (Dynamic Link Library)
+Oracle Open Office Basic : Do...Loop statement
+Oracle Open Office Basic : docking
+Oracle Open Office Basic : docking;definition
+Oracle Open Office Basic : docking;toolbars
+Oracle Open Office Basic : docking;windows
+Oracle Open Office Basic : Document Converter Wizard
+Oracle Open Office Basic : Document Map, see Navigator
+Oracle Open Office Basic : document types in Oracle Open Office
+Oracle Open Office Basic : documents
+Oracle Open Office Basic : documents;changing titles
+Oracle Open Office Basic : documents;closing
+Oracle Open Office Basic : documents;comparing
+Oracle Open Office Basic : documents;contents as lists
+Oracle Open Office Basic : documents;editing time
+Oracle Open Office Basic : documents;exporting
+Oracle Open Office Basic : documents;importing
+Oracle Open Office Basic : documents;languages
+Oracle Open Office Basic : documents;measurement units in
+Oracle Open Office Basic : documents;merging
+Oracle Open Office Basic : documents;number of pages/tables/sheets
+Oracle Open Office Basic : documents;opening
+Oracle Open Office Basic : documents;opening in design mode
+Oracle Open Office Basic : documents;opening with templates
+Oracle Open Office Basic : documents;organizing
+Oracle Open Office Basic : documents;printing
+Oracle Open Office Basic : documents;read-only
+Oracle Open Office Basic : documents;reloading
+Oracle Open Office Basic : documents;saving
+Oracle Open Office Basic : documents;saving automatically
+Oracle Open Office Basic : documents;saving in other formats
+Oracle Open Office Basic : documents;sending as e-mail
+Oracle Open Office Basic : documents;styles changed
+Oracle Open Office Basic : documents;version management
+Oracle Open Office Basic : documents;version numbers
+Oracle Open Office Basic : dotted areas
+Oracle Open Office Basic : double-line spacing in paragraphs
+Oracle Open Office Basic : double-line writing in Asian layout
+Oracle Open Office Basic : drag and drop
+Oracle Open Office Basic : drag and drop;copying and pasting text
+Oracle Open Office Basic : drag and drop;data source view
+Oracle Open Office Basic : drag and drop;from Gallery to draw objects
+Oracle Open Office Basic : drag and drop;overview
+Oracle Open Office Basic : drag and drop;pictures
+Oracle Open Office Basic : drag and drop;to Gallery
+Oracle Open Office Basic : draw objects
+Oracle Open Office Basic : draw objects;adding/editing/copying
+Oracle Open Office Basic : draw objects;anchoring
+Oracle Open Office Basic : draw objects;arranging within stacks
+Oracle Open Office Basic : draw objects;copying between documents
+Oracle Open Office Basic : draw objects;displaying (Calc)
+Oracle Open Office Basic : draw objects;dropping Gallery pictures
+Oracle Open Office Basic : draw objects;flipping
+Oracle Open Office Basic : draw objects;legends
+Oracle Open Office Basic : draw objects;positioning and resizing
+Oracle Open Office Basic : draw objects;protecting
+Oracle Open Office Basic : draw objects;slanting
+Oracle Open Office Basic : draw objects;text in
+Oracle Open Office Basic : Drawing bar
+Oracle Open Office Basic : drawing lines in text
+Oracle Open Office Basic : drawings
+Oracle Open Office Basic : drawings;creating/opening
+Oracle Open Office Basic : drawings;languages
+Oracle Open Office Basic : drawings;printing
+Oracle Open Office Basic : drawings;printing defaults
+Oracle Open Office Basic : drawings;printing in text documents
+Oracle Open Office Basic : drawings;saving
+Oracle Open Office Basic : drawings;saving automatically
+Oracle Open Office Basic : drawings;saving in other formats
+Oracle Open Office Basic : drawings;sending as e-mail
+Oracle Open Office Basic : drawings;showing (Writer)
+Oracle Open Office Basic : drawings, see also draw objects
+Oracle Open Office Basic : drop-down lists in form functions
+Oracle Open Office Basic : e-mail attachments
+Oracle Open Office Basic : Edit File icon
+Oracle Open Office Basic : edit mode
+Oracle Open Office Basic : edit mode;after opening
+Oracle Open Office Basic : edit mode;through Enter key (Calc)
+Oracle Open Office Basic : Edit Points bar
+Oracle Open Office Basic : editing
+Oracle Open Office Basic : editing;chart axes
+Oracle Open Office Basic : editing;chart data
+Oracle Open Office Basic : editing;chart legends
+Oracle Open Office Basic : editing;chart titles
+Oracle Open Office Basic : editing;comments
+Oracle Open Office Basic : editing;controls
+Oracle Open Office Basic : editing;data binding of XForms
+Oracle Open Office Basic : editing;database tables and queries
+Oracle Open Office Basic : editing;draw objects
+Oracle Open Office Basic : editing;Fontwork objects
+Oracle Open Office Basic : editing;hyperlinks
+Oracle Open Office Basic : editing;menus
+Oracle Open Office Basic : editing;objects
+Oracle Open Office Basic : editing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Basic : editing;pictures
+Oracle Open Office Basic : editing;reports
+Oracle Open Office Basic : editing;shortcut keys
+Oracle Open Office Basic : editing;tab stops
+Oracle Open Office Basic : editing;templates
+Oracle Open Office Basic : editing;toolbars
+Oracle Open Office Basic : editing;undoing
+Oracle Open Office Basic : editing;XForms
+Oracle Open Office Basic : editing time of documents
+Oracle Open Office Basic : editors
+Oracle Open Office Basic : editors;formula editor
+Oracle Open Office Basic : editors;ImageMap editor
+Oracle Open Office Basic : effects
+Oracle Open Office Basic : effects;font positions
+Oracle Open Office Basic : effects;fonts
+Oracle Open Office Basic : effects;Fontwork icons
+Oracle Open Office Basic : empty documents
+Oracle Open Office Basic : empty paragraph removal
+Oracle Open Office Basic : encryption of contents
+Oracle Open Office Basic : End statement
+Oracle Open Office Basic : entering groups
+Oracle Open Office Basic : entering text from right to left
+Oracle Open Office Basic : Environ function
+Oracle Open Office Basic : Eof function
+Oracle Open Office Basic : equal sign, see also operators
+Oracle Open Office Basic : EqualUnoObjects function
+Oracle Open Office Basic : equations in formula editor
+Oracle Open Office Basic : Eqv operator (logical)
+Oracle Open Office Basic : Erase function
+Oracle Open Office Basic : Erl function
+Oracle Open Office Basic : Err function
+Oracle Open Office Basic : error codes in Basic
+Oracle Open Office Basic : Error function
+Oracle Open Office Basic : Error Report Tool
+Oracle Open Office Basic : Euro
+Oracle Open Office Basic : Euro;currency formats
+Oracle Open Office Basic : Euro;Euro Converter Wizard
+Oracle Open Office Basic : even/odd pages
+Oracle Open Office Basic : even/odd pages;printing
+Oracle Open Office Basic : events
+Oracle Open Office Basic : events;assigning macros
+Oracle Open Office Basic : events;assigning scripts
+Oracle Open Office Basic : events;controls
+Oracle Open Office Basic : events;customizing
+Oracle Open Office Basic : events;in forms
+Oracle Open Office Basic : events;linked to objects
+Oracle Open Office Basic : examples
+Oracle Open Office Basic : examples;programming controls
+Oracle Open Office Basic : examples;showing a dialog using program code
+Oracle Open Office Basic : Excel
+Oracle Open Office Basic : Excel;saving as
+Oracle Open Office Basic : Excel;search criteria
+Oracle Open Office Basic : exceptions
+Oracle Open Office Basic : exceptions;user-defined dictionaries
+Oracle Open Office Basic : exchanging, see also replacing
+Oracle Open Office Basic : executing SQL commands
+Oracle Open Office Basic : Exit statement
+Oracle Open Office Basic : exiting
+Oracle Open Office Basic : exiting;groups
+Oracle Open Office Basic : exiting;Oracle Open Office
+Oracle Open Office Basic : Exp function
+Oracle Open Office Basic : expanding formatting (Calc)
+Oracle Open Office Basic : explorer of data sources
+Oracle Open Office Basic : export filters
+Oracle Open Office Basic : exporting
+Oracle Open Office Basic : exporting;bitmaps
+Oracle Open Office Basic : exporting;HTML and text documents
+Oracle Open Office Basic : exporting;Microsoft Office documents with VBA code
+Oracle Open Office Basic : exporting;spreadsheets to text format
+Oracle Open Office Basic : exporting;templates
+Oracle Open Office Basic : exporting;to foreign formats
+Oracle Open Office Basic : exporting;to HTML
+Oracle Open Office Basic : exporting;to Microsoft Office formats
+Oracle Open Office Basic : exporting;to PDF
+Oracle Open Office Basic : exporting;to PostScript format
+Oracle Open Office Basic : exporting;to XML
+Oracle Open Office Basic : exporting;XML files
+Oracle Open Office Basic : extended tips in Help
+Oracle Open Office Basic : extension mode in text
+Oracle Open Office Basic : extensions
+Oracle Open Office Basic : extensions;Extension Manager
+Oracle Open Office Basic : extensions;file formats
+Oracle Open Office Basic : external keys (Base)
+Oracle Open Office Basic : faster printing
+Oracle Open Office Basic : faxes
+Oracle Open Office Basic : faxes;configuring Oracle Open Office
+Oracle Open Office Basic : faxes;fax programs/fax printers under UNIX
+Oracle Open Office Basic : faxes;selecting a fax machine
+Oracle Open Office Basic : faxes;sending
+Oracle Open Office Basic : faxes;wizards
+Oracle Open Office Basic : feedback
+Oracle Open Office Basic : feedback;automatically
+Oracle Open Office Basic : fields
+Oracle Open Office Basic : fields;database tables
+Oracle Open Office Basic : fields;displaying field codes (Writer)
+Oracle Open Office Basic : fields;formatted fields
+Oracle Open Office Basic : fields;updating automatically (Writer)
+Oracle Open Office Basic : file associations for Microsoft Office
+Oracle Open Office Basic : file filters
+Oracle Open Office Basic : file filters;mobile devices
+Oracle Open Office Basic : file filters;XML
+Oracle Open Office Basic : file formats
+Oracle Open Office Basic : file formats;changing Oracle Open Office defaults
+Oracle Open Office Basic : file formats;OpenDocument/XML
+Oracle Open Office Basic : file formats;saving always in other formats
+Oracle Open Office Basic : file selection button
+Oracle Open Office Basic : file selection control
+Oracle Open Office Basic : file sharing options for current document
+Oracle Open Office Basic : FileAttr function
+Oracle Open Office Basic : FileCopy statement
+Oracle Open Office Basic : FileDateTime function
+Oracle Open Office Basic : FileExists function
+Oracle Open Office Basic : FileLen function
+Oracle Open Office Basic : filepicker
+Oracle Open Office Basic : filepicker;API service
+Oracle Open Office Basic : files
+Oracle Open Office Basic : files;filters and formats
+Oracle Open Office Basic : files;importing
+Oracle Open Office Basic : files;opening
+Oracle Open Office Basic : files;properties
+Oracle Open Office Basic : files;saving
+Oracle Open Office Basic : files;saving automatically
+Oracle Open Office Basic : files;saving in other formats
+Oracle Open Office Basic : files;sending as e-mail
+Oracle Open Office Basic : files;version numbers
+Oracle Open Office Basic : files and folders in Oracle Open Office
+Oracle Open Office Basic : fill characters with tabulators
+Oracle Open Office Basic : fill colors for areas
+Oracle Open Office Basic : fill patterns for areas
+Oracle Open Office Basic : filter conditions
+Oracle Open Office Basic : filter conditions;connecting
+Oracle Open Office Basic : filter conditions;in queries (Base)
+Oracle Open Office Basic : filtering
+Oracle Open Office Basic : filtering;data in databases
+Oracle Open Office Basic : filtering;data in forms
+Oracle Open Office Basic : filters
+Oracle Open Office Basic : filters;comparison operators
+Oracle Open Office Basic : filters;for import and export
+Oracle Open Office Basic : filters;Navigator
+Oracle Open Office Basic : filters;pictures
+Oracle Open Office Basic : filters;XML filter settings
+Oracle Open Office Basic : Find tab in Help
+Oracle Open Office Basic : finding
+Oracle Open Office Basic : finding;in all sheets
+Oracle Open Office Basic : finding;records in form documents
+Oracle Open Office Basic : finding;selections
+Oracle Open Office Basic : finding;similarity search
+Oracle Open Office Basic : FindObject function
+Oracle Open Office Basic : FindPropertyObject function
+Oracle Open Office Basic : fitting to pages
+Oracle Open Office Basic : fitting to pages;print settings in Math
+Oracle Open Office Basic : fitting to pages;print settings in presentations
+Oracle Open Office Basic : Fix function
+Oracle Open Office Basic : fixed line control
+Oracle Open Office Basic : fixed text
+Oracle Open Office Basic : fixed text;form functions
+Oracle Open Office Basic : fixed text control
+Oracle Open Office Basic : fixing toolbars
+Oracle Open Office Basic : flipping draw objects
+Oracle Open Office Basic : floating frames in HTML documents
+Oracle Open Office Basic : floating toolbars
+Oracle Open Office Basic : focus of controls
+Oracle Open Office Basic : folder creation
+Oracle Open Office Basic : font lists
+Oracle Open Office Basic : font name box
+Oracle Open Office Basic : font sizes
+Oracle Open Office Basic : font sizes;bullets
+Oracle Open Office Basic : font sizes;relative changes
+Oracle Open Office Basic : font sizes;scaling on screen
+Oracle Open Office Basic : font sizes;text
+Oracle Open Office Basic : fonts
+Oracle Open Office Basic : fonts;adding under UNIX
+Oracle Open Office Basic : fonts;changing in templates
+Oracle Open Office Basic : fonts;colors
+Oracle Open Office Basic : fonts;default settings
+Oracle Open Office Basic : fonts;effects
+Oracle Open Office Basic : fonts;for HTML and Basic
+Oracle Open Office Basic : fonts;formats
+Oracle Open Office Basic : fonts;outlines
+Oracle Open Office Basic : fonts;positions in text
+Oracle Open Office Basic : fonts;shadows
+Oracle Open Office Basic : fonts;specifying several
+Oracle Open Office Basic : fonts;strikethrough
+Oracle Open Office Basic : fonts;styles
+Oracle Open Office Basic : fonts;text objects
+Oracle Open Office Basic : Fontwork icons
+Oracle Open Office Basic : footers
+Oracle Open Office Basic : footers;backgrounds
+Oracle Open Office Basic : For statement
+Oracle Open Office Basic : form controls
+Oracle Open Office Basic : form controls;assigning macros
+Oracle Open Office Basic : form controls;protecting
+Oracle Open Office Basic : form controls;toolbars
+Oracle Open Office Basic : form fields
+Oracle Open Office Basic : form filters
+Oracle Open Office Basic : Form Navigator
+Oracle Open Office Basic : format codes
+Oracle Open Office Basic : format codes;numbers
+Oracle Open Office Basic : format filling printing in Oracle Open Office Math
+Oracle Open Office Basic : Format function
+Oracle Open Office Basic : Format Paintbrush
+Oracle Open Office Basic : formats
+Oracle Open Office Basic : formats;Asian layout
+Oracle Open Office Basic : formats;fonts
+Oracle Open Office Basic : formats;maximizing page formats
+Oracle Open Office Basic : formats;number and currency formats
+Oracle Open Office Basic : formats;of currencies/date/time
+Oracle Open Office Basic : formats;on opening and saving
+Oracle Open Office Basic : formats;pasting in special formats
+Oracle Open Office Basic : formats;positions
+Oracle Open Office Basic : formats;tabulators
+Oracle Open Office Basic : formatted field control
+Oracle Open Office Basic : formatted fields
+Oracle Open Office Basic : formatted fields;form functions
+Oracle Open Office Basic : formatted fields;properties
+Oracle Open Office Basic : formatting
+Oracle Open Office Basic : formatting;Asian typography
+Oracle Open Office Basic : formatting;axes in charts
+Oracle Open Office Basic : formatting;chart legends
+Oracle Open Office Basic : formatting;copying
+Oracle Open Office Basic : formatting;definition
+Oracle Open Office Basic : formatting;expanding (Calc)
+Oracle Open Office Basic : formatting;font effects
+Oracle Open Office Basic : formatting;hyperlinks
+Oracle Open Office Basic : formatting;pages
+Oracle Open Office Basic : formatting;printer metrics (Writer)
+Oracle Open Office Basic : formatting;undoing
+Oracle Open Office Basic : formatting;undoing when writing
+Oracle Open Office Basic : forms
+Oracle Open Office Basic : forms;browsing
+Oracle Open Office Basic : forms;Combo Box/List Box Wizard
+Oracle Open Office Basic : forms;creating
+Oracle Open Office Basic : forms;data
+Oracle Open Office Basic : forms;designing (Base)
+Oracle Open Office Basic : forms;events
+Oracle Open Office Basic : forms;filtering data
+Oracle Open Office Basic : forms;finding records
+Oracle Open Office Basic : forms;focus after opening
+Oracle Open Office Basic : forms;general information (Base)
+Oracle Open Office Basic : forms;grouping controls
+Oracle Open Office Basic : forms;HTML filters
+Oracle Open Office Basic : forms;Navigator
+Oracle Open Office Basic : forms;opening in design mode
+Oracle Open Office Basic : forms;properties
+Oracle Open Office Basic : forms;sorting data
+Oracle Open Office Basic : forms;subforms
+Oracle Open Office Basic : forms;wizards
+Oracle Open Office Basic : forms;XForms
+Oracle Open Office Basic : formula texts
+Oracle Open Office Basic : formula texts;printing in Oracle Open Office Math
+Oracle Open Office Basic : formulas
+Oracle Open Office Basic : formulas;new
+Oracle Open Office Basic : formulas;starting formula editor
+Oracle Open Office Basic : formulas in reports
+Oracle Open Office Basic : formulas in reports;editing
+Oracle Open Office Basic : forums and support
+Oracle Open Office Basic : frames
+Oracle Open Office Basic : frames;around paragraphs
+Oracle Open Office Basic : frames;around tables
+Oracle Open Office Basic : frames;AutoCorrect function
+Oracle Open Office Basic : frames;backgrounds
+Oracle Open Office Basic : frames;captions (Writer)
+Oracle Open Office Basic : frames;printing in Oracle Open Office Math
+Oracle Open Office Basic : frames;protecting
+Oracle Open Office Basic : frames;selection frames
+Oracle Open Office Basic : frames;text fitting to frames
+Oracle Open Office Basic : FreeFile function
+Oracle Open Office Basic : freeform lines
+Oracle Open Office Basic : freeform lines;draw functions
+Oracle Open Office Basic : FreeLibrary function
+Oracle Open Office Basic : FTP
+Oracle Open Office Basic : FTP;opening documents
+Oracle Open Office Basic : FTP;saving documents
+Oracle Open Office Basic : full joins (Base)
+Oracle Open Office Basic : full screen view
+Oracle Open Office Basic : full-text search in Help
+Oracle Open Office Basic : Function statement
+Oracle Open Office Basic : functions
+Oracle Open Office Basic : functions;return value type
+Oracle Open Office Basic : functions;using
+Oracle Open Office Basic : functions in reports
+Oracle Open Office Basic : functions in reports;editing
+Oracle Open Office Basic : fundamentals
+Oracle Open Office Basic : Gallery
+Oracle Open Office Basic : Gallery;adding pictures
+Oracle Open Office Basic : Gallery;dragging pictures to draw objects
+Oracle Open Office Basic : Gallery;hiding/showing
+Oracle Open Office Basic : Gallery;inserting pictures from
+Oracle Open Office Basic : get method for form transmissions
+Oracle Open Office Basic : Get statement
+Oracle Open Office Basic : GetAttr function
+Oracle Open Office Basic : GetDefaultContext function
+Oracle Open Office Basic : GetGuiType function
+Oracle Open Office Basic : GetProcessServiceManager function
+Oracle Open Office Basic : GetSolarVersion function
+Oracle Open Office Basic : GetSystemTicks function
+Oracle Open Office Basic : getting support
+Oracle Open Office Basic : GIF format
+Oracle Open Office Basic : Global statement
+Oracle Open Office Basic : GLOBAL variables
+Oracle Open Office Basic : GlobalScope function
+Oracle Open Office Basic : glossaries
+Oracle Open Office Basic : glossaries;common terms
+Oracle Open Office Basic : glossaries;Internet terms
+Oracle Open Office Basic : GoSub...Return statement
+Oracle Open Office Basic : GoTo statement
+Oracle Open Office Basic : gradients off for faster printing
+Oracle Open Office Basic : graphic objects, see draw objects
+Oracle Open Office Basic : graphical text art
+Oracle Open Office Basic : graphics
+Oracle Open Office Basic : graphics;cache
+Oracle Open Office Basic : graphics;protecting
+Oracle Open Office Basic : graphics, see also pictures
+Oracle Open Office Basic : grayscale printing
+Oracle Open Office Basic : Green function
+Oracle Open Office Basic : grid controls
+Oracle Open Office Basic : grid controls;form functions
+Oracle Open Office Basic : grids
+Oracle Open Office Basic : grids;defaults (Writer/Calc)
+Oracle Open Office Basic : grids;display options (Impress/Draw)
+Oracle Open Office Basic : grids;displaying lines (Calc)
+Oracle Open Office Basic : group box control
+Oracle Open Office Basic : group box creation
+Oracle Open Office Basic : groups
+Oracle Open Office Basic : groups;entering/exiting/ungrouping
+Oracle Open Office Basic : groups;naming
+Oracle Open Office Basic : groups;of controls
+Oracle Open Office Basic : guides
+Oracle Open Office Basic : guides;display options (Impress/Draw)
+Oracle Open Office Basic : guides;displaying when moving objects (Impress)
+Oracle Open Office Basic : guides;showing (Calc)
+Oracle Open Office Basic : guides;showing when moving frames (Writer)
+Oracle Open Office Basic : gutter
+Oracle Open Office Basic : handles
+Oracle Open Office Basic : handles;displaying (Writer)
+Oracle Open Office Basic : handles;scaling
+Oracle Open Office Basic : handles;showing simple/large handles (Calc)
+Oracle Open Office Basic : Hangul/Hanja
+Oracle Open Office Basic : HasUnoInterfaces function
+Oracle Open Office Basic : hatching
+Oracle Open Office Basic : headers
+Oracle Open Office Basic : headers;backgrounds
+Oracle Open Office Basic : headings
+Oracle Open Office Basic : headings;entering as text box
+Oracle Open Office Basic : Hebrew
+Oracle Open Office Basic : Hebrew;entering text
+Oracle Open Office Basic : Hebrew;language settings
+Oracle Open Office Basic : Help
+Oracle Open Office Basic : Help;bookmarks
+Oracle Open Office Basic : Help;extended tips on/off
+Oracle Open Office Basic : Help;full-text search
+Oracle Open Office Basic : Help;Help tips
+Oracle Open Office Basic : Help;keywords
+Oracle Open Office Basic : Help;navigation pane showing/hiding
+Oracle Open Office Basic : Help;style sheets
+Oracle Open Office Basic : Help;topics
+Oracle Open Office Basic : Help Agent
+Oracle Open Office Basic : Help Agent;help
+Oracle Open Office Basic : Help Agent;options
+Oracle Open Office Basic : Help tips
+Oracle Open Office Basic : Help tips;hiding
+Oracle Open Office Basic : Hex function
+Oracle Open Office Basic : hidden controls in Form Navigator
+Oracle Open Office Basic : hidden fields display (Writer)
+Oracle Open Office Basic : hidden pages
+Oracle Open Office Basic : hidden pages;printing in presentations
+Oracle Open Office Basic : hidden text
+Oracle Open Office Basic : hidden text;showing (Writer)
+Oracle Open Office Basic : hiding
+Oracle Open Office Basic : hiding;changes
+Oracle Open Office Basic : hiding;docked windows
+Oracle Open Office Basic : hiding;navigation pane in Help window
+Oracle Open Office Basic : high contrast mode
+Oracle Open Office Basic : Hindi
+Oracle Open Office Basic : Hindi;entering text
+Oracle Open Office Basic : Hindi;language settings
+Oracle Open Office Basic : horizontal line control
+Oracle Open Office Basic : horizontal scrollbar control
+Oracle Open Office Basic : horizontal scrollbars (Writer)
+Oracle Open Office Basic : hotspots
+Oracle Open Office Basic : Hour function
+Oracle Open Office Basic : HTML
+Oracle Open Office Basic : HTML;definition
+Oracle Open Office Basic : HTML;export character set
+Oracle Open Office Basic : HTML;fonts for source display
+Oracle Open Office Basic : HTML;importing META tags
+Oracle Open Office Basic : HTML;live presentations
+Oracle Open Office Basic : HTML documents
+Oracle Open Office Basic : HTML documents;auto reloading
+Oracle Open Office Basic : HTML documents;importing/exporting
+Oracle Open Office Basic : HTML documents;META tags in
+Oracle Open Office Basic : HTML documents;new
+Oracle Open Office Basic : HTML documents;source text
+Oracle Open Office Basic : hyperlinks
+Oracle Open Office Basic : hyperlinks;assigning macros
+Oracle Open Office Basic : hyperlinks;character formats
+Oracle Open Office Basic : hyperlinks;definition
+Oracle Open Office Basic : hyperlinks;deleting
+Oracle Open Office Basic : hyperlinks;editing
+Oracle Open Office Basic : hyperlinks;inserting
+Oracle Open Office Basic : hyperlinks;relative and absolute
+Oracle Open Office Basic : hyperlinks;turning off automatic recognition
+Oracle Open Office Basic : hyperlinks, see also links
+Oracle Open Office Basic : hyphenation
+Oracle Open Office Basic : hyphenation;activating for a language
+Oracle Open Office Basic : hyphenation;minimal number of characters
+Oracle Open Office Basic : hyphens
+Oracle Open Office Basic : hyphens;displaying custom (Writer)
+Oracle Open Office Basic : hyphens;inserting custom
+Oracle Open Office Basic : icon bars, see toolbars
+Oracle Open Office Basic : icon control
+Oracle Open Office Basic : icon sizes
+Oracle Open Office Basic : IDE
+Oracle Open Office Basic : IDE;Integrated Development Environment
+Oracle Open Office Basic : IDE;keyboard shortcuts
+Oracle Open Office Basic : If statement
+Oracle Open Office Basic : ignore list for spellcheck
+Oracle Open Office Basic : IIf statement
+Oracle Open Office Basic : illustrations, see pictures
+Oracle Open Office Basic : image button creation
+Oracle Open Office Basic : image control
+Oracle Open Office Basic : image control creation
+Oracle Open Office Basic : ImageMap
+Oracle Open Office Basic : ImageMap;definition
+Oracle Open Office Basic : ImageMap;editor
+Oracle Open Office Basic : images
+Oracle Open Office Basic : images;ImageMap
+Oracle Open Office Basic : images;inserting and editing bitmaps
+Oracle Open Office Basic : images, see also pictures
+Oracle Open Office Basic : IME
+Oracle Open Office Basic : IME;definition
+Oracle Open Office Basic : IME;showing/hiding
+Oracle Open Office Basic : Imp operator (logical)
+Oracle Open Office Basic : import filters
+Oracle Open Office Basic : import restrictions for Microsoft Office
+Oracle Open Office Basic : importing
+Oracle Open Office Basic : importing;bitmaps
+Oracle Open Office Basic : importing;compatibility settings for text import
+Oracle Open Office Basic : importing;databases
+Oracle Open Office Basic : importing;documents in other formats
+Oracle Open Office Basic : importing;from XML
+Oracle Open Office Basic : importing;HTML and text documents
+Oracle Open Office Basic : importing;HTML with META tags
+Oracle Open Office Basic : importing;Microsoft Office documents with VBA code
+Oracle Open Office Basic : importing;tables in text format
+Oracle Open Office Basic : importing;templates
+Oracle Open Office Basic : improvement program
+Oracle Open Office Basic : inches
+Oracle Open Office Basic : Index tab in Help
+Oracle Open Office Basic : indexes
+Oracle Open Office Basic : indexes;backgrounds
+Oracle Open Office Basic : indexes;showing/hiding Help index tab
+Oracle Open Office Basic : indicator lines in text
+Oracle Open Office Basic : inner joins (Base)
+Oracle Open Office Basic : input method window
+Oracle Open Office Basic : Input statement
+Oracle Open Office Basic : InputBox function
+Oracle Open Office Basic : insert mode for entering text
+Oracle Open Office Basic : inserting
+Oracle Open Office Basic : inserting;Basic libraries
+Oracle Open Office Basic : inserting;buttons in toolbars
+Oracle Open Office Basic : inserting;cell ranges from spreadsheets
+Oracle Open Office Basic : inserting;charts
+Oracle Open Office Basic : inserting;clipboard options
+Oracle Open Office Basic : inserting;comments
+Oracle Open Office Basic : inserting;data from text documents
+Oracle Open Office Basic : inserting;datasource records in spreadsheets
+Oracle Open Office Basic : inserting;drawings
+Oracle Open Office Basic : inserting;floating frames
+Oracle Open Office Basic : inserting;Fontwork objects
+Oracle Open Office Basic : inserting;form fields
+Oracle Open Office Basic : inserting;hyperlinks
+Oracle Open Office Basic : inserting;line breaks in cells
+Oracle Open Office Basic : inserting;movies/sounds
+Oracle Open Office Basic : inserting;new text tables defaults
+Oracle Open Office Basic : inserting;objects from Gallery
+Oracle Open Office Basic : inserting;OLE objects
+Oracle Open Office Basic : inserting;paragraph borders
+Oracle Open Office Basic : inserting;paragraph bullets
+Oracle Open Office Basic : inserting;pictures in Gallery
+Oracle Open Office Basic : inserting;plug-ins
+Oracle Open Office Basic : inserting;push buttons
+Oracle Open Office Basic : inserting;special characters
+Oracle Open Office Basic : inserting;tab stops
+Oracle Open Office Basic : inserting;textures on chart bars
+Oracle Open Office Basic : installing
+Oracle Open Office Basic : installing;ActiveX control
+Oracle Open Office Basic : installing;mobile device filters
+Oracle Open Office Basic : installing;UNO components
+Oracle Open Office Basic : installing;XML filters
+Oracle Open Office Basic : InStr function
+Oracle Open Office Basic : instructions
+Oracle Open Office Basic : instructions;general
+Oracle Open Office Basic : Int function
+Oracle Open Office Basic : Internet
+Oracle Open Office Basic : Internet;checking for updates
+Oracle Open Office Basic : Internet;Internet Explorer for displaying Oracle Open Office documents
+Oracle Open Office Basic : Internet;presentations
+Oracle Open Office Basic : Internet;starting searches
+Oracle Open Office Basic : Internet glossary
+Oracle Open Office Basic : invert filter
+Oracle Open Office Basic : invisible areas
+Oracle Open Office Basic : IsArray function
+Oracle Open Office Basic : IsDate function
+Oracle Open Office Basic : IsEmpty function
+Oracle Open Office Basic : IsError function
+Oracle Open Office Basic : IsMissing function
+Oracle Open Office Basic : IsNull function
+Oracle Open Office Basic : IsNumeric function
+Oracle Open Office Basic : IsObject function
+Oracle Open Office Basic : IsUnoStruct function
+Oracle Open Office Basic : italic text
+Oracle Open Office Basic : iterative references in spreadsheets
+Oracle Open Office Basic : Java
+Oracle Open Office Basic : Java;definition
+Oracle Open Office Basic : Java;setting options
+Oracle Open Office Basic : JDBC
+Oracle Open Office Basic : JDBC;databases (Base)
+Oracle Open Office Basic : JDBC;definition
+Oracle Open Office Basic : Join function
+Oracle Open Office Basic : joining
+Oracle Open Office Basic : joining;paragraphs
+Oracle Open Office Basic : joining;tables (Base)
+Oracle Open Office Basic : joins in databases (Base)
+Oracle Open Office Basic : justifying text
+Oracle Open Office Basic : kerning
+Oracle Open Office Basic : kerning;Asian texts
+Oracle Open Office Basic : kerning;definition
+Oracle Open Office Basic : kerning;in characters
+Oracle Open Office Basic : key fields for relations (Base)
+Oracle Open Office Basic : keyboard
+Oracle Open Office Basic : keyboard;assigning/editing shortcut keys
+Oracle Open Office Basic : keyboard;general commands
+Oracle Open Office Basic : keyboard;in IDE
+Oracle Open Office Basic : keyboard;removing numbering
+Oracle Open Office Basic : keys
+Oracle Open Office Basic : keys;adding push buttons
+Oracle Open Office Basic : keys;primary keys (Base)
+Oracle Open Office Basic : Kill statement
+Oracle Open Office Basic : kiosk export
+Oracle Open Office Basic : label field control
+Oracle Open Office Basic : labels
+Oracle Open Office Basic : labels;creating and synchronizing
+Oracle Open Office Basic : labels;for draw objects
+Oracle Open Office Basic : labels;form functions
+Oracle Open Office Basic : labels;from databases
+Oracle Open Office Basic : labels, see also names/callouts
+Oracle Open Office Basic : languages
+Oracle Open Office Basic : languages;activating modules
+Oracle Open Office Basic : languages;Asian support
+Oracle Open Office Basic : languages;complex text layout
+Oracle Open Office Basic : languages;locale settings
+Oracle Open Office Basic : languages;selecting for text
+Oracle Open Office Basic : languages;setting options
+Oracle Open Office Basic : languages;spellcheck
+Oracle Open Office Basic : languages;spellchecking and formatting
+Oracle Open Office Basic : large handles (Writer)
+Oracle Open Office Basic : large icons
+Oracle Open Office Basic : layer arrangement
+Oracle Open Office Basic : layout
+Oracle Open Office Basic : layout;importing Word documents
+Oracle Open Office Basic : layout;pages
+Oracle Open Office Basic : LBound function
+Oracle Open Office Basic : LCase function
+Oracle Open Office Basic : LDAP server
+Oracle Open Office Basic : LDAP server;address books (Base)
+Oracle Open Office Basic : LDAP server;sign on options
+Oracle Open Office Basic : leading between paragraphs
+Oracle Open Office Basic : left alignment of paragraphs
+Oracle Open Office Basic : Left function
+Oracle Open Office Basic : left joins (Base)
+Oracle Open Office Basic : legends
+Oracle Open Office Basic : legends;charts
+Oracle Open Office Basic : legends;draw objects
+Oracle Open Office Basic : legends;rounding corners
+Oracle Open Office Basic : Len function
+Oracle Open Office Basic : Let statement
+Oracle Open Office Basic : Letter Wizard
+Oracle Open Office Basic : levels
+Oracle Open Office Basic : levels;depth stagger
+Oracle Open Office Basic : levels;macro security
+Oracle Open Office Basic : libraries
+Oracle Open Office Basic : libraries;adding
+Oracle Open Office Basic : libraries;organizing
+Oracle Open Office Basic : library systems
+Oracle Open Office Basic : LibraryContainer
+Oracle Open Office Basic : limits of tables (Writer)
+Oracle Open Office Basic : line breaks
+Oracle Open Office Basic : line breaks;in cells
+Oracle Open Office Basic : line control
+Oracle Open Office Basic : Line Input statement
+Oracle Open Office Basic : line spacing
+Oracle Open Office Basic : line spacing;context menu in paragraphs
+Oracle Open Office Basic : line spacing;paragraph
+Oracle Open Office Basic : line styles
+Oracle Open Office Basic : line styles;applying
+Oracle Open Office Basic : line styles;defining
+Oracle Open Office Basic : lines
+Oracle Open Office Basic : lines;defining ends
+Oracle Open Office Basic : lines;draw functions
+Oracle Open Office Basic : lines;drawing in text
+Oracle Open Office Basic : lines;editing points
+Oracle Open Office Basic : lines;removing automatic lines
+Oracle Open Office Basic : lines of text
+Oracle Open Office Basic : lines of text;alignment
+Oracle Open Office Basic : lines of text;in Basic editor
+Oracle Open Office Basic : links
+Oracle Open Office Basic : links;between cells and controls
+Oracle Open Office Basic : links;by drag and drop
+Oracle Open Office Basic : links;character formats
+Oracle Open Office Basic : links;definition
+Oracle Open Office Basic : links;editing hyperlinks
+Oracle Open Office Basic : links;inserting
+Oracle Open Office Basic : links;modifying
+Oracle Open Office Basic : links;opening files with
+Oracle Open Office Basic : links;relational databases (Base)
+Oracle Open Office Basic : links;turning off automatic recognition
+Oracle Open Office Basic : links;updating options (Writer)
+Oracle Open Office Basic : links;updating specific links
+Oracle Open Office Basic : list box creation
+Oracle Open Office Basic : list boxes
+Oracle Open Office Basic : list boxes;adding entries to (example)
+Oracle Open Office Basic : list boxes;controls
+Oracle Open Office Basic : list boxes;removing entries from (example)
+Oracle Open Office Basic : lists
+Oracle Open Office Basic : lists;data assigned to controls
+Oracle Open Office Basic : lists;registered databases (Base)
+Oracle Open Office Basic : lists;regular expressions
+Oracle Open Office Basic : live presentations on the Internet
+Oracle Open Office Basic : loading
+Oracle Open Office Basic : loading;Basic code
+Oracle Open Office Basic : loading;documents
+Oracle Open Office Basic : loading;documents from other formats
+Oracle Open Office Basic : loading;HTML documents, automatically
+Oracle Open Office Basic : loading;Microsoft Office documents with VBA code
+Oracle Open Office Basic : loading;reloading
+Oracle Open Office Basic : loading;XML files
+Oracle Open Office Basic : Loc function
+Oracle Open Office Basic : locale settings
+Oracle Open Office Basic : localizing dialogs
+Oracle Open Office Basic : Lof function
+Oracle Open Office Basic : Log function
+Oracle Open Office Basic : long lines
+Oracle Open Office Basic : long lines;in Basic editor
+Oracle Open Office Basic : loops
+Oracle Open Office Basic : lowercase letters
+Oracle Open Office Basic : lowercase letters;font effects
+Oracle Open Office Basic : LSet statement
+Oracle Open Office Basic : LTrim function
+Oracle Open Office Basic : macro toolbar
+Oracle Open Office Basic : Macro Wizard (Base)
+Oracle Open Office Basic : macros
+Oracle Open Office Basic : macros;assigning to events
+Oracle Open Office Basic : macros;assigning to events in forms
+Oracle Open Office Basic : macros;attaching new (Base)
+Oracle Open Office Basic : macros;Basic IDE
+Oracle Open Office Basic : macros;in MS Office documents
+Oracle Open Office Basic : macros;interrupting
+Oracle Open Office Basic : macros;organizing
+Oracle Open Office Basic : macros;recording
+Oracle Open Office Basic : macros;security
+Oracle Open Office Basic : macros;security levels
+Oracle Open Office Basic : macros;security warning dialog
+Oracle Open Office Basic : macros;selecting security warnings
+Oracle Open Office Basic : macros;stopping
+Oracle Open Office Basic : magnifiers
+Oracle Open Office Basic : margins
+Oracle Open Office Basic : margins;pages
+Oracle Open Office Basic : margins;setting with the mouse
+Oracle Open Office Basic : margins;shadows
+Oracle Open Office Basic : marking changes
+Oracle Open Office Basic : marking, see selecting
+Oracle Open Office Basic : masked field control
+Oracle Open Office Basic : Math formula editor
+Oracle Open Office Basic : measurement units
+Oracle Open Office Basic : measurement units;changing on rulers
+Oracle Open Office Basic : measurement units;converting
+Oracle Open Office Basic : measurement units;selecting
+Oracle Open Office Basic : Media Player window
+Oracle Open Office Basic : menus
+Oracle Open Office Basic : menus;activating context menus
+Oracle Open Office Basic : menus;assigning macros
+Oracle Open Office Basic : menus;customizing
+Oracle Open Office Basic : merging
+Oracle Open Office Basic : merging;documents
+Oracle Open Office Basic : META tags
+Oracle Open Office Basic : metrics
+Oracle Open Office Basic : metrics;converting
+Oracle Open Office Basic : metrics;document formatting (Writer)
+Oracle Open Office Basic : metrics;in sheets
+Oracle Open Office Basic : Microsoft Office
+Oracle Open Office Basic : Microsoft Office;Access databases (base)
+Oracle Open Office Basic : Microsoft Office;as default file format
+Oracle Open Office Basic : Microsoft Office;document import restrictions
+Oracle Open Office Basic : Microsoft Office;feature comparisons
+Oracle Open Office Basic : Microsoft Office;importing password protected files
+Oracle Open Office Basic : Microsoft Office;importing Word documents
+Oracle Open Office Basic : Microsoft Office;importing/exporting VBA code
+Oracle Open Office Basic : Microsoft Office;new users information
+Oracle Open Office Basic : Microsoft Office;opening Microsoft documents
+Oracle Open Office Basic : Microsoft Office;reassigning document types
+Oracle Open Office Basic : Mid function
+Oracle Open Office Basic : Mid statement
+Oracle Open Office Basic : migrating macros (Base)
+Oracle Open Office Basic : Minute function
+Oracle Open Office Basic : MkDir statement
+Oracle Open Office Basic : mobile device filters
+Oracle Open Office Basic : MOD operator (mathematical)
+Oracle Open Office Basic : models in XForms
+Oracle Open Office Basic : modifying, see changing
+Oracle Open Office Basic : module/dialog toggle
+Oracle Open Office Basic : modules
+Oracle Open Office Basic : modules;organizing
+Oracle Open Office Basic : modules;subroutines and functions
+Oracle Open Office Basic : Month function
+Oracle Open Office Basic : more controls
+Oracle Open Office Basic : mosaic filter
+Oracle Open Office Basic : mouse
+Oracle Open Office Basic : mouse;pointers when using drag and drop
+Oracle Open Office Basic : mouse;positioning
+Oracle Open Office Basic : movies
+Oracle Open Office Basic : moving
+Oracle Open Office Basic : moving;modules
+Oracle Open Office Basic : moving;tab stops on ruler
+Oracle Open Office Basic : moving;toolbars
+Oracle Open Office Basic : moving;using guide lines in presentations
+Oracle Open Office Basic : MS ADO interface (Base)
+Oracle Open Office Basic : MsgBox function
+Oracle Open Office Basic : MsgBox statement
+Oracle Open Office Basic : multi-line titles in forms
+Oracle Open Office Basic : multiple documents
+Oracle Open Office Basic : multiple documents;opening
+Oracle Open Office Basic : multiple selection
+Oracle Open Office Basic : music
+Oracle Open Office Basic : My Documents folder
+Oracle Open Office Basic : My Documents folder;changing work directory
+Oracle Open Office Basic : My Documents folder;opening
+Oracle Open Office Basic : MySQL databases (Base)
+Oracle Open Office Basic : Name statement
+Oracle Open Office Basic : names
+Oracle Open Office Basic : names;multi-line titles
+Oracle Open Office Basic : names;objects
+Oracle Open Office Basic : names of variables
+Oracle Open Office Basic : names, see also labels/callouts
+Oracle Open Office Basic : namespace organization in XForms
+Oracle Open Office Basic : native SQL (Base)
+Oracle Open Office Basic : navigating
+Oracle Open Office Basic : navigating;in Basic projects
+Oracle Open Office Basic : navigating;in documents
+Oracle Open Office Basic : Navigation bar
+Oracle Open Office Basic : Navigation bar;controls
+Oracle Open Office Basic : Navigation bar;forms
+Oracle Open Office Basic : Navigator
+Oracle Open Office Basic : Navigator;comments
+Oracle Open Office Basic : Navigator;contents as lists
+Oracle Open Office Basic : Navigator;docking
+Oracle Open Office Basic : Navigator;working with
+Oracle Open Office Basic : network identity options
+Oracle Open Office Basic : new databases
+Oracle Open Office Basic : new documents
+Oracle Open Office Basic : new lines in cells
+Oracle Open Office Basic : new windows
+Oracle Open Office Basic : Next statement
+Oracle Open Office Basic : non-breaking dashes
+Oracle Open Office Basic : non-breaking spaces (Writer)
+Oracle Open Office Basic : non-printing characters (Writer)
+Oracle Open Office Basic : Not operator (logical)
+Oracle Open Office Basic : Nothing object
+Oracle Open Office Basic : Now function
+Oracle Open Office Basic : Null value
+Oracle Open Office Basic : number formats
+Oracle Open Office Basic : number formats;codes
+Oracle Open Office Basic : number formats;formats
+Oracle Open Office Basic : number formats;recognition in text tables
+Oracle Open Office Basic : number of pages
+Oracle Open Office Basic : number of sheets
+Oracle Open Office Basic : number of tables
+Oracle Open Office Basic : numbering
+Oracle Open Office Basic : numbering;options
+Oracle Open Office Basic : numbering;turning off
+Oracle Open Office Basic : numbering;using automatically
+Oracle Open Office Basic : numbers
+Oracle Open Office Basic : numbers;date, time and currency formats
+Oracle Open Office Basic : numerical field control
+Oracle Open Office Basic : numerical fields in forms
+Oracle Open Office Basic : objects
+Oracle Open Office Basic : objects;always moveable (Impress/Draw)
+Oracle Open Office Basic : objects;arranging within stacks
+Oracle Open Office Basic : objects;copying when moving in presentations
+Oracle Open Office Basic : objects;definition
+Oracle Open Office Basic : objects;displaying in spreadsheets
+Oracle Open Office Basic : objects;displaying in text documents
+Oracle Open Office Basic : objects;editing
+Oracle Open Office Basic : objects;inserting from Gallery
+Oracle Open Office Basic : objects;inserting OLE objects
+Oracle Open Office Basic : objects;moving and resizing with mouse
+Oracle Open Office Basic : objects;naming
+Oracle Open Office Basic : objects;opening
+Oracle Open Office Basic : objects;quickly moving to
+Oracle Open Office Basic : objects;titles and descriptions
+Oracle Open Office Basic : Oct function
+Oracle Open Office Basic : ODBC
+Oracle Open Office Basic : ODBC;database (Base)
+Oracle Open Office Basic : ODBC;definition
+Oracle Open Office Basic : ODF file formats
+Oracle Open Office Basic : Office
+Oracle Open Office Basic : Office;Microsoft Office and Oracle Open Office
+Oracle Open Office Basic : OLE
+Oracle Open Office Basic : OLE;definition
+Oracle Open Office Basic : OLE objects
+Oracle Open Office Basic : OLE objects;arranging within stacks
+Oracle Open Office Basic : OLE objects;captions (Writer)
+Oracle Open Office Basic : OLE objects;inserting
+Oracle Open Office Basic : OLE objects;number of
+Oracle Open Office Basic : OLE objects;protecting
+Oracle Open Office Basic : On Error GoTo ... Resume statement
+Oracle Open Office Basic : On...GoSub statement
+Oracle Open Office Basic : On...GoTo statement
+Oracle Open Office Basic : one and a half line spacing in text
+Oracle Open Office Basic : online feedback options
+Oracle Open Office Basic : online registration
+Oracle Open Office Basic : online update options
+Oracle Open Office Basic : online updates
+Oracle Open Office Basic : online updates;checking automatically
+Oracle Open Office Basic : online updates;checking manually
+Oracle Open Office Basic : Open statement
+Oracle Open Office Basic : OpenDocument file formats
+Oracle Open Office Basic : OpenGL
+Oracle Open Office Basic : OpenGL;definition
+Oracle Open Office Basic : opening
+Oracle Open Office Basic : opening;context menus
+Oracle Open Office Basic : opening;database files
+Oracle Open Office Basic : opening;dialog settings
+Oracle Open Office Basic : opening;documents
+Oracle Open Office Basic : opening;documents from other formats
+Oracle Open Office Basic : opening;documents on WebDAV server
+Oracle Open Office Basic : opening;files with links
+Oracle Open Office Basic : opening;files, with placeholders
+Oracle Open Office Basic : opening;forms
+Oracle Open Office Basic : opening;Microsoft Office files
+Oracle Open Office Basic : opening;mobile device documents
+Oracle Open Office Basic : opening;objects
+Oracle Open Office Basic : opening;reports
+Oracle Open Office Basic : opening;several files
+Oracle Open Office Basic : opening;XForms
+Oracle Open Office Basic : operators
+Oracle Open Office Basic : operators;comparisons
+Oracle Open Office Basic : operators;default filters
+Oracle Open Office Basic : Option Base statement
+Oracle Open Office Basic : option button control
+Oracle Open Office Basic : Option Explicit statement
+Oracle Open Office Basic : Optional function
+Oracle Open Office Basic : optional hyphens (Writer)
+Oracle Open Office Basic : options
+Oracle Open Office Basic : options;accessibility
+Oracle Open Office Basic : options;appearance
+Oracle Open Office Basic : options;compatibility (Writer)
+Oracle Open Office Basic : options;improvement program
+Oracle Open Office Basic : options;network identity
+Oracle Open Office Basic : options;online update
+Oracle Open Office Basic : options;tools
+Oracle Open Office Basic : Or operator (logical)
+Oracle Open Office Basic : Oracle databases (base)
+Oracle Open Office Basic : Oracle Open Office Base data sources
+Oracle Open Office Basic : Oracle Open Office Basic scripts in HTML documents
+Oracle Open Office Basic : Oracle Open Office documents
+Oracle Open Office Basic : Oracle Open Office documents;mobile device filters
+Oracle Open Office Basic : Oracle Open Office documents;viewing and editing in Internet Explorer
+Oracle Open Office Basic : Oracle Open Office Math start
+Oracle Open Office Basic : ordering
+Oracle Open Office Basic : ordering;objects
+Oracle Open Office Basic : ordinal numbers
+Oracle Open Office Basic : ordinal numbers;replacing
+Oracle Open Office Basic : organizing
+Oracle Open Office Basic : organizing;macros and scripts
+Oracle Open Office Basic : organizing;modules/libraries/dialogs
+Oracle Open Office Basic : organizing;namespaces in XForms
+Oracle Open Office Basic : organizing;styles
+Oracle Open Office Basic : organizing;templates
+Oracle Open Office Basic : original size
+Oracle Open Office Basic : original size;printing in Oracle Open Office Math
+Oracle Open Office Basic : original size;restoring after cropping
+Oracle Open Office Basic : outlines
+Oracle Open Office Basic : outlines;font effects
+Oracle Open Office Basic : outlines;outline symbols
+Oracle Open Office Basic : outlines;sending to presentations
+Oracle Open Office Basic : overwrite mode
+Oracle Open Office Basic : packages, see extensions
+Oracle Open Office Basic : page breaks
+Oracle Open Office Basic : page breaks;displaying (Calc)
+Oracle Open Office Basic : page formats
+Oracle Open Office Basic : page formats;maximizing
+Oracle Open Office Basic : page formats;restriction
+Oracle Open Office Basic : page styles
+Oracle Open Office Basic : page styles;editing/applying with statusbar
+Oracle Open Office Basic : pages
+Oracle Open Office Basic : pages;backgrounds in all applications
+Oracle Open Office Basic : pages;formatting and numbering
+Oracle Open Office Basic : pages;printing page names in presentations
+Oracle Open Office Basic : pages;scaling
+Oracle Open Office Basic : pages;selecting one to print
+Oracle Open Office Basic : paint box
+Oracle Open Office Basic : paint can symbol
+Oracle Open Office Basic : pair kerning
+Oracle Open Office Basic : Palm file filters
+Oracle Open Office Basic : paper formats
+Oracle Open Office Basic : paper size warning
+Oracle Open Office Basic : paper trays
+Oracle Open Office Basic : paragraph marks
+Oracle Open Office Basic : paragraph marks;displaying (Writer)
+Oracle Open Office Basic : paragraph styles
+Oracle Open Office Basic : paragraph styles;languages
+Oracle Open Office Basic : paragraph styles;modifying basic fonts
+Oracle Open Office Basic : paragraphs
+Oracle Open Office Basic : paragraphs;alignment
+Oracle Open Office Basic : paragraphs;Asian typography
+Oracle Open Office Basic : paragraphs;defining borders
+Oracle Open Office Basic : paragraphs;hidden paragraphs (Writer)
+Oracle Open Office Basic : paragraphs;increasing indents of
+Oracle Open Office Basic : paragraphs;indents, margins and columns
+Oracle Open Office Basic : paragraphs;inserting bullets
+Oracle Open Office Basic : paragraphs;joining
+Oracle Open Office Basic : paragraphs;numbering automatically
+Oracle Open Office Basic : paragraphs;removing blank ones
+Oracle Open Office Basic : paragraphs;spacing
+Oracle Open Office Basic : paragraphs;tab stops
+Oracle Open Office Basic : parameters
+Oracle Open Office Basic : parameters;command line
+Oracle Open Office Basic : parameters;for procedures and functions
+Oracle Open Office Basic : parameters;passing by reference or value
+Oracle Open Office Basic : parameters;queries (Base)
+Oracle Open Office Basic : passwords for protecting contents
+Oracle Open Office Basic : pasting
+Oracle Open Office Basic : pasting;cell ranges
+Oracle Open Office Basic : pasting;cell ranges from spreadsheets
+Oracle Open Office Basic : pasting;data from text documents
+Oracle Open Office Basic : pasting;draw objects
+Oracle Open Office Basic : pasting;draw objects from other documents
+Oracle Open Office Basic : pasting;formatted/unformatted text
+Oracle Open Office Basic : pasting;from data source view
+Oracle Open Office Basic : pasting;from data sources to Oracle Open Office Calc
+Oracle Open Office Basic : pasting;pictures from other documents
+Oracle Open Office Basic : pasting;sheet areas in text documents
+Oracle Open Office Basic : pasting;to Gallery
+Oracle Open Office Basic : paths
+Oracle Open Office Basic : paths;changing work directory
+Oracle Open Office Basic : paths;defaults
+Oracle Open Office Basic : pattern editor
+Oracle Open Office Basic : pattern field control
+Oracle Open Office Basic : pattern fields
+Oracle Open Office Basic : pattern fields;form functions
+Oracle Open Office Basic : patterns for objects
+Oracle Open Office Basic : PDF
+Oracle Open Office Basic : PDF;export
+Oracle Open Office Basic : PDF;PostScript to PDF converter, UNIX
+Oracle Open Office Basic : personal data input
+Oracle Open Office Basic : phonetic guide
+Oracle Open Office Basic : picklist creation
+Oracle Open Office Basic : pictures
+Oracle Open Office Basic : pictures;adding to Gallery
+Oracle Open Office Basic : pictures;arranging within stacks
+Oracle Open Office Basic : pictures;assigning macros
+Oracle Open Office Basic : pictures;backgrounds
+Oracle Open Office Basic : pictures;captions (Writer)
+Oracle Open Office Basic : pictures;changing paths
+Oracle Open Office Basic : pictures;cropping and zooming
+Oracle Open Office Basic : pictures;displaying in Calc
+Oracle Open Office Basic : pictures;displaying in Writer (Writer)
+Oracle Open Office Basic : pictures;drag and drop between documents
+Oracle Open Office Basic : pictures;drawing
+Oracle Open Office Basic : pictures;editing
+Oracle Open Office Basic : pictures;filters
+Oracle Open Office Basic : pictures;ImageMap
+Oracle Open Office Basic : pictures;inserting automatically
+Oracle Open Office Basic : pictures;inserting from Gallery
+Oracle Open Office Basic : pictures;number of
+Oracle Open Office Basic : pictures;printing
+Oracle Open Office Basic : pictures;scaling/resizing
+Oracle Open Office Basic : pixel editor
+Oracle Open Office Basic : pixel graphics
+Oracle Open Office Basic : pixel graphics;inserting and editing
+Oracle Open Office Basic : pixel patterns
+Oracle Open Office Basic : placeholders
+Oracle Open Office Basic : placeholders;in SQL queries
+Oracle Open Office Basic : placeholders;on opening files
+Oracle Open Office Basic : placing toolbars
+Oracle Open Office Basic : playing movies and sound files
+Oracle Open Office Basic : plotting data as charts
+Oracle Open Office Basic : plug-ins
+Oracle Open Office Basic : plug-ins;activating and deactivating
+Oracle Open Office Basic : plug-ins;definition
+Oracle Open Office Basic : plug-ins;inserting
+Oracle Open Office Basic : pocket device appliances
+Oracle Open Office Basic : Pocket PC file filters
+Oracle Open Office Basic : points
+Oracle Open Office Basic : points;reducing editing points when snapping (Impress/Draw)
+Oracle Open Office Basic : polygon drawing
+Oracle Open Office Basic : pop-art filter
+Oracle Open Office Basic : portable document format
+Oracle Open Office Basic : positioning
+Oracle Open Office Basic : positioning;draw objects and controls
+Oracle Open Office Basic : positioning;fonts
+Oracle Open Office Basic : positioning;objects
+Oracle Open Office Basic : positioning;toolbars
+Oracle Open Office Basic : post method for form transmissions
+Oracle Open Office Basic : posterizing filter
+Oracle Open Office Basic : PostScript
+Oracle Open Office Basic : PostScript;creating files
+Oracle Open Office Basic : PostScript;PDF converter, UNIX
+Oracle Open Office Basic : PowerPoint export
+Oracle Open Office Basic : precision as shown (Calc)
+Oracle Open Office Basic : predefining fonts
+Oracle Open Office Basic : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
+Oracle Open Office Basic : presentations
+Oracle Open Office Basic : presentations;creating/opening
+Oracle Open Office Basic : presentations;inserting spreadsheet cells
+Oracle Open Office Basic : presentations;live on the Internet
+Oracle Open Office Basic : presentations;print menu
+Oracle Open Office Basic : presentations;saving
+Oracle Open Office Basic : presentations;saving automatically
+Oracle Open Office Basic : presentations;saving in other formats
+Oracle Open Office Basic : presentations;sending as e-mail
+Oracle Open Office Basic : presentations;starting with wizard
+Oracle Open Office Basic : presentations;wizards
+Oracle Open Office Basic : Presenter Console shortcuts
+Oracle Open Office Basic : press buttons, see push buttons
+Oracle Open Office Basic : previews
+Oracle Open Office Basic : previews;fonts lists
+Oracle Open Office Basic : primary keys
+Oracle Open Office Basic : primary keys;defining
+Oracle Open Office Basic : primary keys;design view
+Oracle Open Office Basic : primary keys;inserting (Base)
+Oracle Open Office Basic : print area selection
+Oracle Open Office Basic : Print statement
+Oracle Open Office Basic : printer metrics for document formatting (Writer)
+Oracle Open Office Basic : printers
+Oracle Open Office Basic : printers;adding, UNIX
+Oracle Open Office Basic : printers;choosing
+Oracle Open Office Basic : printers;default printer
+Oracle Open Office Basic : printers;faxes under UNIX
+Oracle Open Office Basic : printers;maximum page formats
+Oracle Open Office Basic : printers;paper trays
+Oracle Open Office Basic : printers;properties
+Oracle Open Office Basic : printing
+Oracle Open Office Basic : printing;black and white
+Oracle Open Office Basic : printing;brochures
+Oracle Open Office Basic : printing;colors in grayscale
+Oracle Open Office Basic : printing;comments
+Oracle Open Office Basic : printing;copies
+Oracle Open Office Basic : printing;creating individual jobs
+Oracle Open Office Basic : printing;dates in presentations
+Oracle Open Office Basic : printing;directly
+Oracle Open Office Basic : printing;documents
+Oracle Open Office Basic : printing;drawings defaults
+Oracle Open Office Basic : printing;elements in text documents
+Oracle Open Office Basic : printing;faster
+Oracle Open Office Basic : printing;fitting to pages in Oracle Open Office Math
+Oracle Open Office Basic : printing;fitting to pages in presentations
+Oracle Open Office Basic : printing;formulas in Oracle Open Office Math
+Oracle Open Office Basic : printing;hidden pages of presentations
+Oracle Open Office Basic : printing;in original size in Oracle Open Office Math
+Oracle Open Office Basic : printing;left/right pages
+Oracle Open Office Basic : printing;queries (Base)
+Oracle Open Office Basic : printing;scaling in Oracle Open Office Math
+Oracle Open Office Basic : printing;selections
+Oracle Open Office Basic : printing;text always in black
+Oracle Open Office Basic : printing;text in reverse order
+Oracle Open Office Basic : printing;tiling pages in presentations
+Oracle Open Office Basic : printing;transparencies
+Oracle Open Office Basic : printing;warnings
+Oracle Open Office Basic : printing;without scaling in presentations
+Oracle Open Office Basic : printing speed
+Oracle Open Office Basic : PRIVATE variables
+Oracle Open Office Basic : procedures
+Oracle Open Office Basic : ProcessServiceManager
+Oracle Open Office Basic : program stops
+Oracle Open Office Basic : programming
+Oracle Open Office Basic : programming;Oracle Open Office
+Oracle Open Office Basic : programming;scripting
+Oracle Open Office Basic : programming examples for controls
+Oracle Open Office Basic : progress bar control
+Oracle Open Office Basic : properties
+Oracle Open Office Basic : properties;controls and dialogs
+Oracle Open Office Basic : properties;controls in dialog editor
+Oracle Open Office Basic : properties;fields in databases
+Oracle Open Office Basic : properties;files
+Oracle Open Office Basic : properties;form controls
+Oracle Open Office Basic : properties;forms
+Oracle Open Office Basic : properties;printers
+Oracle Open Office Basic : protected contents
+Oracle Open Office Basic : protected dashes
+Oracle Open Office Basic : protected database tables
+Oracle Open Office Basic : protected documents
+Oracle Open Office Basic : protected spaces
+Oracle Open Office Basic : protected spaces;inserting
+Oracle Open Office Basic : protected spaces;showing (Writer)
+Oracle Open Office Basic : protecting
+Oracle Open Office Basic : protecting;contents
+Oracle Open Office Basic : protecting;recorded changes
+Oracle Open Office Basic : proxy settings
+Oracle Open Office Basic : Public statement
+Oracle Open Office Basic : PUBLIC variables
+Oracle Open Office Basic : push button control in dialog editor
+Oracle Open Office Basic : push buttons
+Oracle Open Office Basic : push buttons;adding to documents
+Oracle Open Office Basic : push buttons;creating
+Oracle Open Office Basic : Put statement
+Oracle Open Office Basic : queries
+Oracle Open Office Basic : queries;copying (Base)
+Oracle Open Office Basic : queries;creating in design view (Base)
+Oracle Open Office Basic : queries;creating in SQL view
+Oracle Open Office Basic : queries;defining (Base)
+Oracle Open Office Basic : queries;deleting table links (Base)
+Oracle Open Office Basic : queries;editing in data source view
+Oracle Open Office Basic : queries;formulating filter conditions (Base)
+Oracle Open Office Basic : queries;joining tables (Base)
+Oracle Open Office Basic : queries;missing elements (Base)
+Oracle Open Office Basic : queries;overview (Base)
+Oracle Open Office Basic : queries;parameter queries (Base)
+Oracle Open Office Basic : queries;printing (Base)
+Oracle Open Office Basic : Query Wizard (Base)
+Oracle Open Office Basic : Quickstarter
+Oracle Open Office Basic : quotes
+Oracle Open Office Basic : quotes;custom
+Oracle Open Office Basic : radio button control
+Oracle Open Office Basic : radio button creation
+Oracle Open Office Basic : Randomize statement
+Oracle Open Office Basic : read-only documents
+Oracle Open Office Basic : read-only documents;cursor
+Oracle Open Office Basic : read-only documents;database tables on/off
+Oracle Open Office Basic : read-only documents;editing
+Oracle Open Office Basic : read-only documents;opening documents as
+Oracle Open Office Basic : read-only items in Data Navigator
+Oracle Open Office Basic : recognizing URLs automatically
+Oracle Open Office Basic : recording
+Oracle Open Office Basic : recording;changes
+Oracle Open Office Basic : recording;macros
+Oracle Open Office Basic : records
+Oracle Open Office Basic : records;inserting comments
+Oracle Open Office Basic : records;protecting
+Oracle Open Office Basic : records;saving
+Oracle Open Office Basic : records;searching in databases
+Oracle Open Office Basic : rectangles with round corners
+Oracle Open Office Basic : recursions in spreadsheets
+Oracle Open Office Basic : Red function
+Oracle Open Office Basic : ReDim statement
+Oracle Open Office Basic : redo command
+Oracle Open Office Basic : reduced printing
+Oracle Open Office Basic : reference lines
+Oracle Open Office Basic : references
+Oracle Open Office Basic : references;displaying in color (Calc)
+Oracle Open Office Basic : references;expanding (Calc)
+Oracle Open Office Basic : references;iterative (Calc)
+Oracle Open Office Basic : register-true
+Oracle Open Office Basic : register-true;definition
+Oracle Open Office Basic : registering
+Oracle Open Office Basic : registering;address books
+Oracle Open Office Basic : registering;databases (Base)
+Oracle Open Office Basic : registering;Oracle Open Office
+Oracle Open Office Basic : regular expressions
+Oracle Open Office Basic : regular expressions;list of
+Oracle Open Office Basic : relational databases (Base)
+Oracle Open Office Basic : relations
+Oracle Open Office Basic : relations;creating and deleting (Base)
+Oracle Open Office Basic : relations;joining tables (Base)
+Oracle Open Office Basic : relations;properties (Base)
+Oracle Open Office Basic : relative hyperlinks
+Oracle Open Office Basic : relative saving of URLs
+Oracle Open Office Basic : reloading
+Oracle Open Office Basic : reloading;documents
+Oracle Open Office Basic : reloading;HTML documents, automatically
+Oracle Open Office Basic : Rem statement
+Oracle Open Office Basic : remarks, see also comments
+Oracle Open Office Basic : remote configurations
+Oracle Open Office Basic : remove noise filter
+Oracle Open Office Basic : removing
+Oracle Open Office Basic : removing;bullets and numbering
+Oracle Open Office Basic : removing;form filters
+Oracle Open Office Basic : removing, see also deleting
+Oracle Open Office Basic : renaming modules and dialogs
+Oracle Open Office Basic : repeating
+Oracle Open Office Basic : repeating;commands
+Oracle Open Office Basic : replacement options
+Oracle Open Office Basic : replacement table
+Oracle Open Office Basic : replacing
+Oracle Open Office Basic : replacing;AutoCorrect function
+Oracle Open Office Basic : replacing;dashes
+Oracle Open Office Basic : replacing;ordinal numbers
+Oracle Open Office Basic : replacing;tab stops (regular expressions)
+Oracle Open Office Basic : Report Builder
+Oracle Open Office Basic : reports
+Oracle Open Office Basic : reports;creating
+Oracle Open Office Basic : reports;error reports
+Oracle Open Office Basic : reports;opening and editing
+Oracle Open Office Basic : reports;templates
+Oracle Open Office Basic : Reset statement
+Oracle Open Office Basic : resetting
+Oracle Open Office Basic : resetting;templates
+Oracle Open Office Basic : resizing
+Oracle Open Office Basic : resizing;objects, by mouse
+Oracle Open Office Basic : resizing, see also scaling/zooming
+Oracle Open Office Basic : resolution when printing bitmaps
+Oracle Open Office Basic : restoring
+Oracle Open Office Basic : restoring;default formatting
+Oracle Open Office Basic : restoring;editing
+Oracle Open Office Basic : Resume Next parameter
+Oracle Open Office Basic : return value type of functions
+Oracle Open Office Basic : reversing printing order
+Oracle Open Office Basic : review function
+Oracle Open Office Basic : review function;accepting or rejecting changes
+Oracle Open Office Basic : review function;comparing documents
+Oracle Open Office Basic : review function;protecting records
+Oracle Open Office Basic : review function;recording changes example
+Oracle Open Office Basic : rich text control
+Oracle Open Office Basic : right alignment of paragraphs
+Oracle Open Office Basic : Right function
+Oracle Open Office Basic : right joins (Base)
+Oracle Open Office Basic : right-to-left text
+Oracle Open Office Basic : RmDir statement
+Oracle Open Office Basic : Rnd function
+Oracle Open Office Basic : rotating
+Oracle Open Office Basic : rotating;3D text
+Oracle Open Office Basic : round corners
+Oracle Open Office Basic : rounding precision (Calc)
+Oracle Open Office Basic : row headers
+Oracle Open Office Basic : row headers;displaying (Calc)
+Oracle Open Office Basic : row headers;highlighting (Calc)
+Oracle Open Office Basic : RSet statement
+Oracle Open Office Basic : RTrim function
+Oracle Open Office Basic : rulers
+Oracle Open Office Basic : rulers;default settings
+Oracle Open Office Basic : rulers;measurement units
+Oracle Open Office Basic : rulers;visible in presentations
+Oracle Open Office Basic : run-time errors in Basic
+Oracle Open Office Basic : samples and templates
+Oracle Open Office Basic : saving
+Oracle Open Office Basic : saving;Basic code
+Oracle Open Office Basic : saving;default file formats
+Oracle Open Office Basic : saving;dialog settings
+Oracle Open Office Basic : saving;documents
+Oracle Open Office Basic : saving;documents for mobile devices
+Oracle Open Office Basic : saving;documents in other formats
+Oracle Open Office Basic : saving;documents, automatically
+Oracle Open Office Basic : saving;in Microsoft Office file format
+Oracle Open Office Basic : saving;options
+Oracle Open Office Basic : saving;templates
+Oracle Open Office Basic : saving;to XML
+Oracle Open Office Basic : saving;VBA code in Microsoft Office documents
+Oracle Open Office Basic : saving;with password by default
+Oracle Open Office Basic : saving as command
+Oracle Open Office Basic : saving as command;precautions
+Oracle Open Office Basic : scaling
+Oracle Open Office Basic : scaling;font sizes in user interface
+Oracle Open Office Basic : scaling;objects
+Oracle Open Office Basic : scaling;pictures
+Oracle Open Office Basic : scaling;printing in Oracle Open Office Math
+Oracle Open Office Basic : scaling;when printing presentations
+Oracle Open Office Basic : scaling, see also zooming
+Oracle Open Office Basic : scope of variables
+Oracle Open Office Basic : screen
+Oracle Open Office Basic : screen;full screen views
+Oracle Open Office Basic : screen;scaling
+Oracle Open Office Basic : screen magnifiers
+Oracle Open Office Basic : screen readers
+Oracle Open Office Basic : script organization
+Oracle Open Office Basic : scroll bar control
+Oracle Open Office Basic : scrollbars
+Oracle Open Office Basic : scrollbars;controls
+Oracle Open Office Basic : scrollbars;displaying (Calc)
+Oracle Open Office Basic : scrollbars;horizontal and vertical (Writer)
+Oracle Open Office Basic : search criteria for database functions in cells
+Oracle Open Office Basic : search engines
+Oracle Open Office Basic : search engines;definition
+Oracle Open Office Basic : search engines;selecting
+Oracle Open Office Basic : searching
+Oracle Open Office Basic : searching;all sheets
+Oracle Open Office Basic : searching;databases
+Oracle Open Office Basic : searching;form filters
+Oracle Open Office Basic : searching;Internet
+Oracle Open Office Basic : searching;tables and forms
+Oracle Open Office Basic : Second function
+Oracle Open Office Basic : sections
+Oracle Open Office Basic : sections;backgrounds
+Oracle Open Office Basic : security
+Oracle Open Office Basic : security;digital signatures
+Oracle Open Office Basic : security;options for documents with macros
+Oracle Open Office Basic : security;protecting contents
+Oracle Open Office Basic : security;security levels for macros
+Oracle Open Office Basic : security;warning dialogs with macros
+Oracle Open Office Basic : Seek function
+Oracle Open Office Basic : Seek statement
+Oracle Open Office Basic : Select...Case statement
+Oracle Open Office Basic : selecting
+Oracle Open Office Basic : selecting;controls
+Oracle Open Office Basic : selecting;measurement units
+Oracle Open Office Basic : selecting;objects
+Oracle Open Office Basic : selecting;print areas
+Oracle Open Office Basic : selecting;several files
+Oracle Open Office Basic : selection clipboard
+Oracle Open Office Basic : selection frames
+Oracle Open Office Basic : selection modes in text
+Oracle Open Office Basic : selection options for controls
+Oracle Open Office Basic : sending
+Oracle Open Office Basic : sending;AutoAbstract function in presentations
+Oracle Open Office Basic : sending;documents as e-mail
+Oracle Open Office Basic : sending;documents as faxes
+Oracle Open Office Basic : separator lines
+Oracle Open Office Basic : separator lines;defining
+Oracle Open Office Basic : separators
+Oracle Open Office Basic : separators;conditional
+Oracle Open Office Basic : Server Side ImageMap
+Oracle Open Office Basic : Set statement
+Oracle Open Office Basic : SetAttr statement
+Oracle Open Office Basic : settings
+Oracle Open Office Basic : settings;printers
+Oracle Open Office Basic : settings;program configuration
+Oracle Open Office Basic : settings;proxies
+Oracle Open Office Basic : settings;tracking changes
+Oracle Open Office Basic : settings;views
+Oracle Open Office Basic : SGML
+Oracle Open Office Basic : SGML;definition
+Oracle Open Office Basic : Sgn function
+Oracle Open Office Basic : shadows
+Oracle Open Office Basic : shadows;areas
+Oracle Open Office Basic : shadows;borders
+Oracle Open Office Basic : shadows;characters
+Oracle Open Office Basic : shadows;characters, using context menu
+Oracle Open Office Basic : sharing documents
+Oracle Open Office Basic : sharpening filter
+Oracle Open Office Basic : sheet tabs
+Oracle Open Office Basic : sheet tabs;displaying
+Oracle Open Office Basic : sheets
+Oracle Open Office Basic : sheets;searching all
+Oracle Open Office Basic : Shell function
+Oracle Open Office Basic : shortcut keys
+Oracle Open Office Basic : shortcut keys;assigning macros
+Oracle Open Office Basic : shortcut keys;Basic IDE
+Oracle Open Office Basic : shortcut keys;general
+Oracle Open Office Basic : shortcut keys;in databases
+Oracle Open Office Basic : shortcut keys;Oracle Open Office accessibility
+Oracle Open Office Basic : showing
+Oracle Open Office Basic : showing;changes
+Oracle Open Office Basic : showing;docked windows
+Oracle Open Office Basic : showing;drawings and controls (Writer)
+Oracle Open Office Basic : showing;live presentations on the Internet
+Oracle Open Office Basic : showing;toolbars
+Oracle Open Office Basic : signing documents with digital signatures
+Oracle Open Office Basic : similarity search
+Oracle Open Office Basic : simple handles (Writer)
+Oracle Open Office Basic : simplified Chinese
+Oracle Open Office Basic : simplified Chinese;translating to traditional Chinese
+Oracle Open Office Basic : Sin function
+Oracle Open Office Basic : single sign on options
+Oracle Open Office Basic : single-line spacing in text
+Oracle Open Office Basic : sizes
+Oracle Open Office Basic : sizes;draw objects
+Oracle Open Office Basic : sizes;pictures
+Oracle Open Office Basic : slanting draw objects
+Oracle Open Office Basic : small capitals
+Oracle Open Office Basic : small icons
+Oracle Open Office Basic : smart tag configuration
+Oracle Open Office Basic : smooth scrolling (Writer)
+Oracle Open Office Basic : smoothing filter
+Oracle Open Office Basic : snap grid defaults (Writer/Calc)
+Oracle Open Office Basic : snapping in presentations and drawings
+Oracle Open Office Basic : solarization filter
+Oracle Open Office Basic : sort lists
+Oracle Open Office Basic : sort lists;copying to in Calc
+Oracle Open Office Basic : sorting
+Oracle Open Office Basic : sorting;data in forms
+Oracle Open Office Basic : sorting;databases
+Oracle Open Office Basic : sound files
+Oracle Open Office Basic : Space function
+Oracle Open Office Basic : spaces
+Oracle Open Office Basic : spaces;displaying (Writer)
+Oracle Open Office Basic : spaces;ignoring double
+Oracle Open Office Basic : spaces;inserting protected spaces
+Oracle Open Office Basic : spaces;showing protected spaces (Writer)
+Oracle Open Office Basic : spacing
+Oracle Open Office Basic : spacing;between paragraphs in footnotes
+Oracle Open Office Basic : spacing;font effects
+Oracle Open Office Basic : spacing;lines and paragraphs
+Oracle Open Office Basic : spacing;tab stops in text documents
+Oracle Open Office Basic : spacing;tabs in presentations
+Oracle Open Office Basic : spadmin
+Oracle Open Office Basic : special characters
+Oracle Open Office Basic : speech bubbles
+Oracle Open Office Basic : speed of printing
+Oracle Open Office Basic : spellcheck
+Oracle Open Office Basic : spellcheck;activating for a language
+Oracle Open Office Basic : spellcheck;context menus
+Oracle Open Office Basic : spellcheck;default languages
+Oracle Open Office Basic : spellcheck;dialog
+Oracle Open Office Basic : spellcheck;dictionary of exceptions
+Oracle Open Office Basic : spellcheck;ignore list
+Oracle Open Office Basic : spin button creation
+Oracle Open Office Basic : Split function
+Oracle Open Office Basic : spoolfiles with Xprinter
+Oracle Open Office Basic : spreadsheets
+Oracle Open Office Basic : spreadsheets;as databases (base)
+Oracle Open Office Basic : spreadsheets;copying areas to text documents
+Oracle Open Office Basic : spreadsheets;creating/opening
+Oracle Open Office Basic : spreadsheets;inserting charts
+Oracle Open Office Basic : spreadsheets;inserting database records
+Oracle Open Office Basic : spreadsheets;printing
+Oracle Open Office Basic : spreadsheets;saving
+Oracle Open Office Basic : spreadsheets;saving automatically
+Oracle Open Office Basic : spreadsheets;saving in other formats
+Oracle Open Office Basic : spreadsheets;sending as e-mail
+Oracle Open Office Basic : SQL
+Oracle Open Office Basic : SQL;definition
+Oracle Open Office Basic : SQL;DISTINCT parameter
+Oracle Open Office Basic : SQL;executing SQL commands
+Oracle Open Office Basic : SQL;executing SQL statements (Base)
+Oracle Open Office Basic : SQL;queries (Base)
+Oracle Open Office Basic : Sqr function
+Oracle Open Office Basic : square drawings
+Oracle Open Office Basic : standard bar on/off
+Oracle Open Office Basic : standard filters in databases
+Oracle Open Office Basic : standard printer under UNIX
+Oracle Open Office Basic : start center
+Oracle Open Office Basic : start parameters
+Oracle Open Office Basic : Static statement
+Oracle Open Office Basic : status bar on/off
+Oracle Open Office Basic : Step statement
+Oracle Open Office Basic : stickers
+Oracle Open Office Basic : Stop statement
+Oracle Open Office Basic : stopping macros
+Oracle Open Office Basic : Str function
+Oracle Open Office Basic : StrComp function
+Oracle Open Office Basic : strikethrough
+Oracle Open Office Basic : strikethrough;characters
+Oracle Open Office Basic : strikethrough;font effects
+Oracle Open Office Basic : String function
+Oracle Open Office Basic : styles
+Oracle Open Office Basic : styles;'changed' message
+Oracle Open Office Basic : styles;copying between documents
+Oracle Open Office Basic : styles;keyboard shortcuts
+Oracle Open Office Basic : styles;organizing
+Oracle Open Office Basic : styles;printing styles used in a document
+Oracle Open Office Basic : styles;replacing automatically
+Oracle Open Office Basic : Styles and Formatting window
+Oracle Open Office Basic : Styles and Formatting window;docking
+Oracle Open Office Basic : Sub statement
+Oracle Open Office Basic : subforms
+Oracle Open Office Basic : subforms;creating
+Oracle Open Office Basic : subforms;description
+Oracle Open Office Basic : submitting forms
+Oracle Open Office Basic : subroutines
+Oracle Open Office Basic : suffixes in file formats
+Oracle Open Office Basic : support on the Web
+Oracle Open Office Basic : Switch function
+Oracle Open Office Basic : synchronizing
+Oracle Open Office Basic : synchronizing;labels and business cards
+Oracle Open Office Basic : synchronizing;Pocket PC and Oracle Open Office formats
+Oracle Open Office Basic : system address book registration
+Oracle Open Office Basic : tab stops
+Oracle Open Office Basic : tab stops;displaying (Writer)
+Oracle Open Office Basic : tab stops;inserting and editing
+Oracle Open Office Basic : tab stops;regular expressions
+Oracle Open Office Basic : tab stops;setting in sheets
+Oracle Open Office Basic : tab stops;settings
+Oracle Open Office Basic : tab stops;spacing in presentations
+Oracle Open Office Basic : tab stops;spacing in text documents
+Oracle Open Office Basic : table controls
+Oracle Open Office Basic : table controls;form functions
+Oracle Open Office Basic : table controls;keyboard-only edit mode
+Oracle Open Office Basic : table controls;properties
+Oracle Open Office Basic : table views of databases
+Oracle Open Office Basic : Table Wizard (Base)
+Oracle Open Office Basic : tables
+Oracle Open Office Basic : tables;inserting line breaks
+Oracle Open Office Basic : tables in databases
+Oracle Open Office Basic : tables in databases;access rights to (Base)
+Oracle Open Office Basic : tables in databases;adding to queries
+Oracle Open Office Basic : tables in databases;browsing and editing
+Oracle Open Office Basic : tables in databases;copying database tables (Base)
+Oracle Open Office Basic : tables in databases;creating
+Oracle Open Office Basic : tables in databases;creating in design view (manually)
+Oracle Open Office Basic : tables in databases;importing text formats (Base)
+Oracle Open Office Basic : tables in databases;joining for queries (Base)
+Oracle Open Office Basic : tables in databases;printing queries (Base)
+Oracle Open Office Basic : tables in databases;relations (Base)
+Oracle Open Office Basic : tables in databases;searching
+Oracle Open Office Basic : tables in spreadsheets
+Oracle Open Office Basic : tables in spreadsheets;copying data to other applications
+Oracle Open Office Basic : tables in spreadsheets;defining borders
+Oracle Open Office Basic : tables in spreadsheets;value highlighting
+Oracle Open Office Basic : tables in text
+Oracle Open Office Basic : tables in text;captions
+Oracle Open Office Basic : tables in text;creating automatically
+Oracle Open Office Basic : tables in text;default settings
+Oracle Open Office Basic : tables in text;defining borders
+Oracle Open Office Basic : tables in text;displaying
+Oracle Open Office Basic : tables in text;printing
+Oracle Open Office Basic : tabs
+Oracle Open Office Basic : tabs;displaying sheet tabs
+Oracle Open Office Basic : tags
+Oracle Open Office Basic : tags;definition
+Oracle Open Office Basic : tags;META tags
+Oracle Open Office Basic : Tan function
+Oracle Open Office Basic : templates
+Oracle Open Office Basic : templates;agendas
+Oracle Open Office Basic : templates;changing basic fonts
+Oracle Open Office Basic : templates;database reports
+Oracle Open Office Basic : templates;deleting
+Oracle Open Office Basic : templates;editing and saving
+Oracle Open Office Basic : templates;faxes
+Oracle Open Office Basic : templates;importing and exporting
+Oracle Open Office Basic : templates;letters
+Oracle Open Office Basic : templates;new documents from templates
+Oracle Open Office Basic : templates;opening documents with
+Oracle Open Office Basic : templates;organizing
+Oracle Open Office Basic : terminology
+Oracle Open Office Basic : terminology;general glossary
+Oracle Open Office Basic : terminology;Internet glossary
+Oracle Open Office Basic : test mode control
+Oracle Open Office Basic : testing XML filters
+Oracle Open Office Basic : text
+Oracle Open Office Basic : text;animating
+Oracle Open Office Basic : text;Asian layout
+Oracle Open Office Basic : text;bold
+Oracle Open Office Basic : text;coloring
+Oracle Open Office Basic : text;copying by drag and drop
+Oracle Open Office Basic : text;CTL languages
+Oracle Open Office Basic : text;drawing pictures
+Oracle Open Office Basic : text;font effects
+Oracle Open Office Basic : text;font sizes
+Oracle Open Office Basic : text;font styles
+Oracle Open Office Basic : text;fonts and formats
+Oracle Open Office Basic : text;Fontwork icons
+Oracle Open Office Basic : text;hyperlinks
+Oracle Open Office Basic : text;inserting special characters
+Oracle Open Office Basic : text;italics
+Oracle Open Office Basic : text;kerning
+Oracle Open Office Basic : text;language selection
+Oracle Open Office Basic : text;line spacing
+Oracle Open Office Basic : text;overwriting or inserting
+Oracle Open Office Basic : text;printing in black
+Oracle Open Office Basic : text;replacing with format
+Oracle Open Office Basic : text;selection modes
+Oracle Open Office Basic : text;shadowed
+Oracle Open Office Basic : text;text/draw objects
+Oracle Open Office Basic : text attributes
+Oracle Open Office Basic : text attributes;hyperlinks
+Oracle Open Office Basic : text attributes;undoing
+Oracle Open Office Basic : text boxes
+Oracle Open Office Basic : text boxes;controls
+Oracle Open Office Basic : text boxes;form functions
+Oracle Open Office Basic : text boxes;positioning
+Oracle Open Office Basic : text breaks in cells
+Oracle Open Office Basic : text colors for better accessibility
+Oracle Open Office Basic : text databases (Base)
+Oracle Open Office Basic : text documents
+Oracle Open Office Basic : text documents;creating/opening
+Oracle Open Office Basic : text documents;importing/exporting
+Oracle Open Office Basic : text documents;inserting spreadsheet cells
+Oracle Open Office Basic : text documents;print settings
+Oracle Open Office Basic : text documents;printing
+Oracle Open Office Basic : text documents;saving
+Oracle Open Office Basic : text documents;saving automatically
+Oracle Open Office Basic : text documents;saving in other formats
+Oracle Open Office Basic : text documents;sending as e-mail
+Oracle Open Office Basic : text effects
+Oracle Open Office Basic : text flow
+Oracle Open Office Basic : text flow;in cells
+Oracle Open Office Basic : text formats
+Oracle Open Office Basic : text formats;databases
+Oracle Open Office Basic : text formats;pasting
+Oracle Open Office Basic : text input fields
+Oracle Open Office Basic : text layout for special languages
+Oracle Open Office Basic : text objects
+Oracle Open Office Basic : text objects;alignment
+Oracle Open Office Basic : text objects;draw functions
+Oracle Open Office Basic : text objects;fonts
+Oracle Open Office Basic : text objects;in presentations and drawings
+Oracle Open Office Basic : text overflow in spreadsheet cells
+Oracle Open Office Basic : text, see also text documents, paragraphs and characters
+Oracle Open Office Basic : TextArt, see Fontwork
+Oracle Open Office Basic : textures
+Oracle Open Office Basic : textures;inserting from Gallery
+Oracle Open Office Basic : textures;on chart bars
+Oracle Open Office Basic : Thai
+Oracle Open Office Basic : Thai;entering text
+Oracle Open Office Basic : Thai;language settings
+Oracle Open Office Basic : thesaurus
+Oracle Open Office Basic : thesaurus;activating for a language
+Oracle Open Office Basic : ThisComponent property
+Oracle Open Office Basic : ticker text
+Oracle Open Office Basic : time field control
+Oracle Open Office Basic : time fields
+Oracle Open Office Basic : time fields;form functions
+Oracle Open Office Basic : Time statement
+Oracle Open Office Basic : Timer function
+Oracle Open Office Basic : times
+Oracle Open Office Basic : times;inserting when printing presentations
+Oracle Open Office Basic : times, formats
+Oracle Open Office Basic : TimeSerial function
+Oracle Open Office Basic : TimeValue function
+Oracle Open Office Basic : tips
+Oracle Open Office Basic : tips;extended tips in Help
+Oracle Open Office Basic : title rows
+Oracle Open Office Basic : title rows;printing in Oracle Open Office Math
+Oracle Open Office Basic : titles
+Oracle Open Office Basic : titles;changing
+Oracle Open Office Basic : titles;editing in charts
+Oracle Open Office Basic : titles;font effects
+Oracle Open Office Basic : titles;formatting automatically
+Oracle Open Office Basic : titles;objects
+Oracle Open Office Basic : To statement
+Oracle Open Office Basic : toolbars
+Oracle Open Office Basic : toolbars;adding buttons
+Oracle Open Office Basic : toolbars;Basic IDE
+Oracle Open Office Basic : toolbars;docking/undocking
+Oracle Open Office Basic : toolbars;Form Navigation bar
+Oracle Open Office Basic : toolbars;viewing/closing
+Oracle Open Office Basic : tools bar
+Oracle Open Office Basic : tooltips
+Oracle Open Office Basic : tooltips;extended tips
+Oracle Open Office Basic : tooltips;help
+Oracle Open Office Basic : traditional Chinese
+Oracle Open Office Basic : traditional Chinese;translating to simplified chinese
+Oracle Open Office Basic : translating dialogs
+Oracle Open Office Basic : transparency
+Oracle Open Office Basic : transparency;areas
+Oracle Open Office Basic : transparency;off for faster printing
+Oracle Open Office Basic : transparency;saving
+Oracle Open Office Basic : tree view of Help
+Oracle Open Office Basic : Trim function
+Oracle Open Office Basic : twips
+Oracle Open Office Basic : twips;definition
+Oracle Open Office Basic : TwipsPerPixelX function
+Oracle Open Office Basic : TwipsPerPixelY function
+Oracle Open Office Basic : typefaces
+Oracle Open Office Basic : typefaces;adding under UNIX
+Oracle Open Office Basic : typefaces;formats
+Oracle Open Office Basic : TypeName function
+Oracle Open Office Basic : types of variables
+Oracle Open Office Basic : typography
+Oracle Open Office Basic : typography;Asian
+Oracle Open Office Basic : UBound function
+Oracle Open Office Basic : UCase function
+Oracle Open Office Basic : underlining
+Oracle Open Office Basic : underlining;AutoFormat function
+Oracle Open Office Basic : underlining;characters
+Oracle Open Office Basic : underlining;text
+Oracle Open Office Basic : undocking windows
+Oracle Open Office Basic : undoing
+Oracle Open Office Basic : undoing;direct formatting
+Oracle Open Office Basic : undoing;editing
+Oracle Open Office Basic : undoing;number of steps
+Oracle Open Office Basic : ungrouping groups
+Oracle Open Office Basic : units
+Oracle Open Office Basic : units;converting
+Oracle Open Office Basic : units;measurement units
+Oracle Open Office Basic : UNO components
+Oracle Open Office Basic : UNO components;Extension Manager
+Oracle Open Office Basic : UNO components;integrating new
+Oracle Open Office Basic : Until
+Oracle Open Office Basic : update options
+Oracle Open Office Basic : updates
+Oracle Open Office Basic : updates;checking automatically
+Oracle Open Office Basic : updates;checking manually
+Oracle Open Office Basic : updating
+Oracle Open Office Basic : updating;fields and charts, automatically (Writer)
+Oracle Open Office Basic : updating;links in text documents
+Oracle Open Office Basic : updating;links, on opening
+Oracle Open Office Basic : updating;templates
+Oracle Open Office Basic : URL
+Oracle Open Office Basic : URL;changing hyperlink URLs
+Oracle Open Office Basic : URL;definition
+Oracle Open Office Basic : URL;in pictures
+Oracle Open Office Basic : URL;saving absolute/relative paths
+Oracle Open Office Basic : URL;turning off URL recognition
+Oracle Open Office Basic : user data
+Oracle Open Office Basic : user data;input
+Oracle Open Office Basic : user data;removing when saving
+Oracle Open Office Basic : user feedback
+Oracle Open Office Basic : user feedback;automatically
+Oracle Open Office Basic : user-defined dictionaries
+Oracle Open Office Basic : user-defined dictionaries;creating
+Oracle Open Office Basic : user-defined dictionaries;dictionary of exceptions
+Oracle Open Office Basic : user-defined dictionaries;editing
+Oracle Open Office Basic : user-defined styles
+Oracle Open Office Basic : user-defined styles;automatically replacing
+Oracle Open Office Basic : UTF-8/UCS2 support
+Oracle Open Office Basic : Val function
+Oracle Open Office Basic : values
+Oracle Open Office Basic : values;of variables
+Oracle Open Office Basic : values;rounded as shown (Calc)
+Oracle Open Office Basic : variables
+Oracle Open Office Basic : variables;for paths
+Oracle Open Office Basic : variables;global and local
+Oracle Open Office Basic : variables;observing values
+Oracle Open Office Basic : variables;passing to procedures and functions
+Oracle Open Office Basic : variables;scope
+Oracle Open Office Basic : variables;using
+Oracle Open Office Basic : VarType function
+Oracle Open Office Basic : VBA code
+Oracle Open Office Basic : VBA code;loading/saving documents with VBA code
+Oracle Open Office Basic : version management
+Oracle Open Office Basic : version numbers of documents
+Oracle Open Office Basic : versions
+Oracle Open Office Basic : versions;comparing documents
+Oracle Open Office Basic : versions;file saving as, restriction
+Oracle Open Office Basic : versions;merging document versions
+Oracle Open Office Basic : versions;of a document
+Oracle Open Office Basic : versions;Oracle Open Office
+Oracle Open Office Basic : vertical callouts
+Oracle Open Office Basic : vertical line control
+Oracle Open Office Basic : vertical scrollbar control
+Oracle Open Office Basic : vertical scrollbars (Writer)
+Oracle Open Office Basic : vertical text boxes
+Oracle Open Office Basic : videos
+Oracle Open Office Basic : viewing
+Oracle Open Office Basic : viewing;databases
+Oracle Open Office Basic : viewing;file properties
+Oracle Open Office Basic : viewing;Oracle Open Office documents in Internet Explorer
+Oracle Open Office Basic : viewing;toolbars
+Oracle Open Office Basic : views
+Oracle Open Office Basic : views;creating database views (Base)
+Oracle Open Office Basic : views;defaults
+Oracle Open Office Basic : views;full screen
+Oracle Open Office Basic : views;icons
+Oracle Open Office Basic : views;scaling
+Oracle Open Office Basic : Visual Basic for Applications
+Oracle Open Office Basic : Visual Basic for Applications;loading/saving documents with VBA code
+Oracle Open Office Basic : Wait statement
+Oracle Open Office Basic : watching variables
+Oracle Open Office Basic : watermarks
+Oracle Open Office Basic : web documents
+Oracle Open Office Basic : web documents;XForms
+Oracle Open Office Basic : Web support
+Oracle Open Office Basic : WebCast export
+Oracle Open Office Basic : WebDAV over HTTPS
+Oracle Open Office Basic : WeekDay function
+Oracle Open Office Basic : While
+Oracle Open Office Basic : While;Do loop
+Oracle Open Office Basic : While;While...Wend loop
+Oracle Open Office Basic : windows
+Oracle Open Office Basic : windows;docking
+Oracle Open Office Basic : windows;docking definition
+Oracle Open Office Basic : windows;hiding/showing/docking
+Oracle Open Office Basic : windows;new
+Oracle Open Office Basic : With statement
+Oracle Open Office Basic : wizards
+Oracle Open Office Basic : wizards;agendas
+Oracle Open Office Basic : wizards;database queries
+Oracle Open Office Basic : wizards;database tables (Base)
+Oracle Open Office Basic : wizards;databases (Base)
+Oracle Open Office Basic : wizards;document converter
+Oracle Open Office Basic : wizards;Euro Converter
+Oracle Open Office Basic : wizards;faxes
+Oracle Open Office Basic : wizards;forms
+Oracle Open Office Basic : wizards;letters
+Oracle Open Office Basic : wizards;macros (Base)
+Oracle Open Office Basic : wizards;overview
+Oracle Open Office Basic : wizards;presentations
+Oracle Open Office Basic : wizards;reports
+Oracle Open Office Basic : Word documents
+Oracle Open Office Basic : Word documents;compatibility
+Oracle Open Office Basic : Word documents;saving as
+Oracle Open Office Basic : WordArt, see Fontwork
+Oracle Open Office Basic : words
+Oracle Open Office Basic : words;automatically replacing
+Oracle Open Office Basic : words;wrapping in cells
+Oracle Open Office Basic : words;wrapping in CTL
+Oracle Open Office Basic : working directory change
+Oracle Open Office Basic : wrapping text
+Oracle Open Office Basic : wrapping text;in cells
+Oracle Open Office Basic : write protection on/off
+Oracle Open Office Basic : Write statement
+Oracle Open Office Basic : writing aids options
+Oracle Open Office Basic : WYSIWYG in fonts lists
+Oracle Open Office Basic : XForms
+Oracle Open Office Basic : XForms;adding/editing/deleting/organizing namespaces
+Oracle Open Office Basic : XForms;conditions
+Oracle Open Office Basic : XForms;opening/editing
+Oracle Open Office Basic : XML converters
+Oracle Open Office Basic : XML file formats
+Oracle Open Office Basic : XML filters
+Oracle Open Office Basic : XML filters;creating/testing
+Oracle Open Office Basic : XML filters;saving as package/installing/deleting
+Oracle Open Office Basic : XML filters;settings
+Oracle Open Office Basic : XML Forms, see XForms
+Oracle Open Office Basic : Xor operator (logical)
+Oracle Open Office Basic : XSLT filters, see also XML filters
+Oracle Open Office Basic : Year function
+Oracle Open Office Basic : years
+Oracle Open Office Basic : years;2-digit options
+Oracle Open Office Basic : zero values
+Oracle Open Office Basic : zero values;displaying (Calc)
+Oracle Open Office Basic : zooming
+Oracle Open Office Basic : zooming;page views
+Oracle Open Office Basic : zooming;pictures
+Oracle Open Office Basic : zooming;status bar
Oracle Open Office Draw : 3D charts
Oracle Open Office Draw : 3D objects
Oracle Open Office Draw : 3D objects;assembling
@@ -11758,7 +20156,6 @@ Oracle Open Office Draw : files;importing
Oracle Open Office Draw : files;inserting
Oracle Open Office Draw : files;inserting pictures
Oracle Open Office Draw : files;opening
-Oracle Open Office Draw : files;opening with placeholders
Oracle Open Office Draw : files;properties
Oracle Open Office Draw : files;saving
Oracle Open Office Draw : files;saving automatically
@@ -12453,7 +20850,6 @@ Oracle Open Office Draw : numbering;turning off
Oracle Open Office Draw : numbering;using automatically
Oracle Open Office Draw : numbers
Oracle Open Office Draw : numbers;date, time and currency formats
-Oracle Open Office Draw : numbers;decimal places (Calc)
Oracle Open Office Draw : numerical fields in forms
Oracle Open Office Draw : object bars
Oracle Open Office Draw : object bars;editing glue points
@@ -12506,7 +20902,6 @@ Oracle Open Office Draw : online update options
Oracle Open Office Draw : online updates
Oracle Open Office Draw : online updates;checking automatically
Oracle Open Office Draw : online updates;checking manually
-Oracle Open Office Draw : Open/Save dialogs
Oracle Open Office Draw : OpenDocument file formats
Oracle Open Office Draw : OpenGL
Oracle Open Office Draw : OpenGL;definition
@@ -12549,6 +20944,8 @@ Oracle Open Office Draw : order of chart data
Oracle Open Office Draw : ordering
Oracle Open Office Draw : ordering;objects
Oracle Open Office Draw : ordering;slides
+Oracle Open Office Draw : ordinal numbers
+Oracle Open Office Draw : ordinal numbers;replacing
Oracle Open Office Draw : organization charts
Oracle Open Office Draw : organizing
Oracle Open Office Draw : organizing;macros and scripts
@@ -12822,8 +21219,6 @@ Oracle Open Office Draw : queries;parameter queries (Base)
Oracle Open Office Draw : queries;printing (Base)
Oracle Open Office Draw : Query Wizard (Base)
Oracle Open Office Draw : Quickstarter
-Oracle Open Office Draw : quotation marks
-Oracle Open Office Draw : quotation marks;replacing
Oracle Open Office Draw : quotes
Oracle Open Office Draw : quotes;custom
Oracle Open Office Draw : radar charts, see net charts
@@ -12863,7 +21258,6 @@ Oracle Open Office Draw : registering;Oracle Open Office
Oracle Open Office Draw : regression curves in charts
Oracle Open Office Draw : regular expressions
Oracle Open Office Draw : regular expressions;list of
-Oracle Open Office Draw : regular expressions;opening files
Oracle Open Office Draw : rehearse timings
Oracle Open Office Draw : relational databases (Base)
Oracle Open Office Draw : relations
@@ -12892,6 +21286,7 @@ Oracle Open Office Draw : replacing
Oracle Open Office Draw : replacing;AutoCorrect function
Oracle Open Office Draw : replacing;colors in bitmaps
Oracle Open Office Draw : replacing;dashes
+Oracle Open Office Draw : replacing;ordinal numbers
Oracle Open Office Draw : replacing;tab stops (regular expressions)
Oracle Open Office Draw : Report Builder
Oracle Open Office Draw : reports
@@ -13404,7 +21799,6 @@ Oracle Open Office Draw : trend lines in charts
Oracle Open Office Draw : typefaces
Oracle Open Office Draw : typefaces;adding under UNIX
Oracle Open Office Draw : typefaces;formats
-Oracle Open Office Draw : typographical quotes in Oracle Open Office Writer
Oracle Open Office Draw : typography
Oracle Open Office Draw : typography;Asian
Oracle Open Office Draw : underlining
@@ -13569,8434 +21963,3 @@ Oracle Open Office Draw : zooming;page views
Oracle Open Office Draw : zooming;pictures
Oracle Open Office Draw : zooming;shortcut keys
Oracle Open Office Draw : zooming;status bar
-Oracle Open Office Impress : 1/2 replacement
-Oracle Open Office Impress : 3D charts
-Oracle Open Office Impress : 3D objects
-Oracle Open Office Impress : 3D objects;assembling
-Oracle Open Office Impress : 3D objects;generating
-Oracle Open Office Impress : 3D objects;inserting
-Oracle Open Office Impress : 3D rotation objects
-Oracle Open Office Impress : 3D rotation objects;converting to
-Oracle Open Office Impress : 3D rotation objects;generating
-Oracle Open Office Impress : 3D text creation
-Oracle Open Office Impress : abbreviation replacement
-Oracle Open Office Impress : absolute hyperlinks
-Oracle Open Office Impress : absolute saving of URLs
-Oracle Open Office Impress : accents
-Oracle Open Office Impress : Access databases (base)
-Oracle Open Office Impress : access rights for database tables (Base)
-Oracle Open Office Impress : accessibility
-Oracle Open Office Impress : accessibility;general shortcuts
-Oracle Open Office Impress : accessibility;options
-Oracle Open Office Impress : accessibility;Oracle Open Office assistive technology
-Oracle Open Office Impress : accessibility;Oracle Open Office Draw
-Oracle Open Office Impress : accessibility;Oracle Open Office features
-Oracle Open Office Impress : accessibility;Oracle Open Office Impress
-Oracle Open Office Impress : activating
-Oracle Open Office Impress : activating;context menus
-Oracle Open Office Impress : activating;Error Report Tool
-Oracle Open Office Impress : activating;extended help tips
-Oracle Open Office Impress : activating;plug-ins
-Oracle Open Office Impress : ActiveX control
-Oracle Open Office Impress : Adabas D databases (base)
-Oracle Open Office Impress : add-ons, see UNO components
-Oracle Open Office Impress : additional selection mode
-Oracle Open Office Impress : address books
-Oracle Open Office Impress : address books;LDAP server (Base)
-Oracle Open Office Impress : address books;registering
-Oracle Open Office Impress : address labels from databases
-Oracle Open Office Impress : ADO databases (Base)
-Oracle Open Office Impress : Agenda Wizard
-Oracle Open Office Impress : aging filter
-Oracle Open Office Impress : aligning
-Oracle Open Office Impress : aligning;2D charts
-Oracle Open Office Impress : aligning;cells
-Oracle Open Office Impress : aligning;draw objects
-Oracle Open Office Impress : aligning;objects
-Oracle Open Office Impress : aligning;paragraphs
-Oracle Open Office Impress : aligning;tables in text
-Oracle Open Office Impress : aligning;text objects
-Oracle Open Office Impress : aligning;titles in charts
-Oracle Open Office Impress : allowing
-Oracle Open Office Impress : allowing;effects
-Oracle Open Office Impress : allowing;interaction
-Oracle Open Office Impress : alternative fonts
-Oracle Open Office Impress : ampersand symbol, see also operators
-Oracle Open Office Impress : anchors
-Oracle Open Office Impress : anchors;changing
-Oracle Open Office Impress : anchors;displaying (Calc)
-Oracle Open Office Impress : anchors;types/positions for draw objects
-Oracle Open Office Impress : animated GIFs
-Oracle Open Office Impress : animated slide transitions
-Oracle Open Office Impress : animation effects
-Oracle Open Office Impress : animations
-Oracle Open Office Impress : animations;accessibility options
-Oracle Open Office Impress : animations;editing
-Oracle Open Office Impress : animations;list of
-Oracle Open Office Impress : animations;saving as GIFs
-Oracle Open Office Impress : appearance options
-Oracle Open Office Impress : Arabic
-Oracle Open Office Impress : Arabic;entering text
-Oracle Open Office Impress : Arabic;language settings
-Oracle Open Office Impress : area charts
-Oracle Open Office Impress : areas
-Oracle Open Office Impress : areas;bitmap patterns
-Oracle Open Office Impress : areas;from connected lines
-Oracle Open Office Impress : areas;hatched/dotted
-Oracle Open Office Impress : areas;shadows
-Oracle Open Office Impress : areas;slanting
-Oracle Open Office Impress : areas;styles
-Oracle Open Office Impress : areas;transparency
-Oracle Open Office Impress : arguments in command line
-Oracle Open Office Impress : arranging
-Oracle Open Office Impress : arranging;objects
-Oracle Open Office Impress : arranging;objects (guide)
-Oracle Open Office Impress : arranging;slides
-Oracle Open Office Impress : arrows
-Oracle Open Office Impress : arrows;defining arrow heads
-Oracle Open Office Impress : arrows;defining arrow lines
-Oracle Open Office Impress : arrows;drawing in text
-Oracle Open Office Impress : arrows;inserting
-Oracle Open Office Impress : arrows;loading arrow styles
-Oracle Open Office Impress : ASCII
-Oracle Open Office Impress : ASCII;definition
-Oracle Open Office Impress : Asian languages
-Oracle Open Office Impress : Asian languages;enabling
-Oracle Open Office Impress : Asian Phonetic Guide
-Oracle Open Office Impress : Asian typography
-Oracle Open Office Impress : assembled objects in 3D
-Oracle Open Office Impress : assigning scripts
-Oracle Open Office Impress : assistive technology in Oracle Open Office
-Oracle Open Office Impress : attaching toolbars
-Oracle Open Office Impress : attachments in e-mails
-Oracle Open Office Impress : attributes
-Oracle Open Office Impress : attributes;objects with
-Oracle Open Office Impress : audio
-Oracle Open Office Impress : authors
-Oracle Open Office Impress : auto reloading HTML documents
-Oracle Open Office Impress : AutoAbstract function for sending text to presentations
-Oracle Open Office Impress : AutoCaption function in Oracle Open Office Writer
-Oracle Open Office Impress : AutoComplete function in text and list boxes
-Oracle Open Office Impress : AutoCorrect function
-Oracle Open Office Impress : AutoCorrect function;context menu
-Oracle Open Office Impress : AutoCorrect function;options
-Oracle Open Office Impress : AutoCorrect function;pictures and frames
-Oracle Open Office Impress : AutoCorrect function;quotes
-Oracle Open Office Impress : AutoCorrect function;replacement table
-Oracle Open Office Impress : AutoCorrect function;switching on and off in Calc
-Oracle Open Office Impress : AutoCorrect function;URL recognition
-Oracle Open Office Impress : AutoFormat function
-Oracle Open Office Impress : AutoFormat function;switching on and off
-Oracle Open Office Impress : automatic captions (Writer)
-Oracle Open Office Impress : automatic control focus
-Oracle Open Office Impress : automatic hyperlink formatting
-Oracle Open Office Impress : automatic line breaks
-Oracle Open Office Impress : automatic lines/borders in text
-Oracle Open Office Impress : automatic saving
-Oracle Open Office Impress : automatic slide changes
-Oracle Open Office Impress : automatic slide changes;rehearse timings
-Oracle Open Office Impress : automatic slide shows
-Oracle Open Office Impress : automatic slide transition
-Oracle Open Office Impress : AutoPilots, see wizards
-Oracle Open Office Impress : AutoValue (Base)
-Oracle Open Office Impress : averages in charts
-Oracle Open Office Impress : axes
-Oracle Open Office Impress : axes;better scaling
-Oracle Open Office Impress : axes;formatting
-Oracle Open Office Impress : axes;formatting grids
-Oracle Open Office Impress : axes;inserting grids
-Oracle Open Office Impress : axes;interval marks
-Oracle Open Office Impress : axes;showing axes in charts
-Oracle Open Office Impress : axes in charts
-Oracle Open Office Impress : backgrounds
-Oracle Open Office Impress : backgrounds;changing
-Oracle Open Office Impress : backgrounds;defining colors/pictures
-Oracle Open Office Impress : backgrounds;deleting unused
-Oracle Open Office Impress : backgrounds;frames/sections/indexes
-Oracle Open Office Impress : backgrounds;inserting from Gallery
-Oracle Open Office Impress : backgrounds;normal view
-Oracle Open Office Impress : backgrounds;notes
-Oracle Open Office Impress : backgrounds;printing
-Oracle Open Office Impress : backgrounds;slides
-Oracle Open Office Impress : backing window
-Oracle Open Office Impress : backups
-Oracle Open Office Impress : backups;automatic
-Oracle Open Office Impress : backups;documents
-Oracle Open Office Impress : bar charts
-Oracle Open Office Impress : Basic
-Oracle Open Office Impress : Basic;fonts for source display
-Oracle Open Office Impress : Basic;programming
-Oracle Open Office Impress : Basic;recording macros
-Oracle Open Office Impress : basic fonts
-Oracle Open Office Impress : behind object command
-Oracle Open Office Impress : Bézier curves
-Oracle Open Office Impress : Bézier curves;control points in presentations
-Oracle Open Office Impress : bi-directional writing
-Oracle Open Office Impress : binding space
-Oracle Open Office Impress : bitmaps
-Oracle Open Office Impress : bitmaps;converting to
-Oracle Open Office Impress : bitmaps;converting to vector graphics
-Oracle Open Office Impress : bitmaps;inserting and editing
-Oracle Open Office Impress : bitmaps;off for faster printing
-Oracle Open Office Impress : bitmaps;patterns
-Oracle Open Office Impress : bitmaps;replacing colors
-Oracle Open Office Impress : black and white display
-Oracle Open Office Impress : black and white printing
-Oracle Open Office Impress : black and white view
-Oracle Open Office Impress : black printing in Calc
-Oracle Open Office Impress : block selection mode
-Oracle Open Office Impress : bold
-Oracle Open Office Impress : bold;AutoFormat function
-Oracle Open Office Impress : bold;text
-Oracle Open Office Impress : bookmarks
-Oracle Open Office Impress : bookmarks;Help
-Oracle Open Office Impress : borders
-Oracle Open Office Impress : borders;arranging
-Oracle Open Office Impress : borders;cells on screen (Calc)
-Oracle Open Office Impress : borders;for paragraphs
-Oracle Open Office Impress : borders;for tables
-Oracle Open Office Impress : borders;shadows
-Oracle Open Office Impress : borders;table boundaries (Writer)
-Oracle Open Office Impress : borders, see also frames
-Oracle Open Office Impress : bound fields
-Oracle Open Office Impress : bound fields;controls
-Oracle Open Office Impress : boundaries of tables (Writer)
-Oracle Open Office Impress : break display (Writer)
-Oracle Open Office Impress : breaking object connections
-Oracle Open Office Impress : brochures
-Oracle Open Office Impress : brochures;printing several
-Oracle Open Office Impress : bubble charts
-Oracle Open Office Impress : build numbers of Oracle Open Office
-Oracle Open Office Impress : bullet lists
-Oracle Open Office Impress : bullet lists;formatting options
-Oracle Open Office Impress : bullets
-Oracle Open Office Impress : bullets;paragraphs
-Oracle Open Office Impress : bullets;replacing
-Oracle Open Office Impress : bullets;turning off
-Oracle Open Office Impress : business cards
-Oracle Open Office Impress : business cards;creating and synchronizing
-Oracle Open Office Impress : business cards;using templates
-Oracle Open Office Impress : button bars, see toolbars
-Oracle Open Office Impress : buttons
-Oracle Open Office Impress : buttons;adding push buttons
-Oracle Open Office Impress : buttons;big/small
-Oracle Open Office Impress : buttons;editing hyperlink buttons
-Oracle Open Office Impress : buttons;form functions
-Oracle Open Office Impress : buttons;toolbars
-Oracle Open Office Impress : cache for graphics
-Oracle Open Office Impress : calculating
-Oracle Open Office Impress : calculating;iterative references (Calc)
-Oracle Open Office Impress : calculating;regression curves
-Oracle Open Office Impress : callouts
-Oracle Open Office Impress : callouts;drawings
-Oracle Open Office Impress : callouts;inserting in presentations
-Oracle Open Office Impress : capital letters
-Oracle Open Office Impress : capital letters;AutoCorrect function
-Oracle Open Office Impress : capital letters;font effects
-Oracle Open Office Impress : captions
-Oracle Open Office Impress : captions;automatic captions (Writer)
-Oracle Open Office Impress : captions;tables/pictures/frames/OLE objects (Writer)
-Oracle Open Office Impress : captions, see also labels/callouts
-Oracle Open Office Impress : cascading update (Base)
-Oracle Open Office Impress : case sensitivity
-Oracle Open Office Impress : case sensitivity;comparing cell contents (Calc)
-Oracle Open Office Impress : case sensitivity;searching
-Oracle Open Office Impress : cells
-Oracle Open Office Impress : cells;aligning
-Oracle Open Office Impress : cells;coloring (Calc)
-Oracle Open Office Impress : cells;cursor positions after input (Calc)
-Oracle Open Office Impress : cells;formatting without effect (Calc)
-Oracle Open Office Impress : cells;line breaks
-Oracle Open Office Impress : cells;linked to controls
-Oracle Open Office Impress : cells;number of
-Oracle Open Office Impress : cells;pasting
-Oracle Open Office Impress : cells;resetting formats
-Oracle Open Office Impress : cells;showing grid lines (Calc)
-Oracle Open Office Impress : centered text
-Oracle Open Office Impress : centimeters
-Oracle Open Office Impress : certificates
-Oracle Open Office Impress : changes
-Oracle Open Office Impress : changes;accepting or rejecting
-Oracle Open Office Impress : changes;comparing to original
-Oracle Open Office Impress : changes;protecting
-Oracle Open Office Impress : changes;recording
-Oracle Open Office Impress : changes;review function
-Oracle Open Office Impress : changes;showing
-Oracle Open Office Impress : changing
-Oracle Open Office Impress : changing;document titles
-Oracle Open Office Impress : changing;file associations in Setup program
-Oracle Open Office Impress : changing;icon sizes
-Oracle Open Office Impress : changing;layer properties
-Oracle Open Office Impress : changing;layout for handouts
-Oracle Open Office Impress : changing;links
-Oracle Open Office Impress : changing;order of slides
-Oracle Open Office Impress : changing;slide layouts
-Oracle Open Office Impress : changing;work directory
-Oracle Open Office Impress : changing, see also editing and replacing
-Oracle Open Office Impress : character styles
-Oracle Open Office Impress : character styles;language selection
-Oracle Open Office Impress : characters
-Oracle Open Office Impress : characters;alternative fonts
-Oracle Open Office Impress : characters;Asian layout
-Oracle Open Office Impress : characters;bold
-Oracle Open Office Impress : characters;coloring
-Oracle Open Office Impress : characters;converting to curves
-Oracle Open Office Impress : characters;displaying only on screen (Writer)
-Oracle Open Office Impress : characters;enabling CTL and Asian characters
-Oracle Open Office Impress : characters;font effects
-Oracle Open Office Impress : characters;fonts and formats
-Oracle Open Office Impress : characters;hyperlinks
-Oracle Open Office Impress : characters;italics
-Oracle Open Office Impress : characters;language selection
-Oracle Open Office Impress : characters;shadowed
-Oracle Open Office Impress : characters;spacing
-Oracle Open Office Impress : characters;special
-Oracle Open Office Impress : characters;underlining
-Oracle Open Office Impress : charcoal sketches filter
-Oracle Open Office Impress : chart legends
-Oracle Open Office Impress : chart legends;hiding
-Oracle Open Office Impress : chart legends;showing icons with labels
-Oracle Open Office Impress : chart types
-Oracle Open Office Impress : chart types;area
-Oracle Open Office Impress : chart types;bubble
-Oracle Open Office Impress : chart types;column and bar
-Oracle Open Office Impress : chart types;column and line
-Oracle Open Office Impress : chart types;line
-Oracle Open Office Impress : chart types;net
-Oracle Open Office Impress : chart types;pie/donut
-Oracle Open Office Impress : chart types;stock
-Oracle Open Office Impress : chart types;XY (scatter)
-Oracle Open Office Impress : charts
-Oracle Open Office Impress : charts;3D views
-Oracle Open Office Impress : charts;aligning
-Oracle Open Office Impress : charts;arranging within stacks
-Oracle Open Office Impress : charts;bars with textures
-Oracle Open Office Impress : charts;choosing chart types
-Oracle Open Office Impress : charts;colors
-Oracle Open Office Impress : charts;copying with link to source cell range
-Oracle Open Office Impress : charts;data labels
-Oracle Open Office Impress : charts;displaying (Calc)
-Oracle Open Office Impress : charts;editing axes
-Oracle Open Office Impress : charts;editing data
-Oracle Open Office Impress : charts;editing legends
-Oracle Open Office Impress : charts;editing titles
-Oracle Open Office Impress : charts;formatting areas
-Oracle Open Office Impress : charts;formatting floors
-Oracle Open Office Impress : charts;formatting walls
-Oracle Open Office Impress : charts;inserting
-Oracle Open Office Impress : charts;overview
-Oracle Open Office Impress : charts;positioning axes
-Oracle Open Office Impress : charts;properties
-Oracle Open Office Impress : charts;reorganizing
-Oracle Open Office Impress : charts;scaling axes
-Oracle Open Office Impress : charts;scaling text
-Oracle Open Office Impress : charts;shortcuts
-Oracle Open Office Impress : charts;showing axes
-Oracle Open Office Impress : charts;updating automatically (Writer)
-Oracle Open Office Impress : check box creation
-Oracle Open Office Impress : Chinese writing systems
-Oracle Open Office Impress : choosing printers
-Oracle Open Office Impress : circle drawings
-Oracle Open Office Impress : circle segments
-Oracle Open Office Impress : circles
-Oracle Open Office Impress : circles;of objects
-Oracle Open Office Impress : Client Side ImageMap
-Oracle Open Office Impress : clipboard
-Oracle Open Office Impress : clipboard;cutting
-Oracle Open Office Impress : clipboard;pasting
-Oracle Open Office Impress : clipboard;pasting formatted/unformatted text
-Oracle Open Office Impress : clipboard;selection clipboard
-Oracle Open Office Impress : clipboard;Unix
-Oracle Open Office Impress : closing
-Oracle Open Office Impress : closing;documents
-Oracle Open Office Impress : closing;shapes
-Oracle Open Office Impress : closing;toolbars
-Oracle Open Office Impress : collaboration
-Oracle Open Office Impress : color bar
-Oracle Open Office Impress : colors
-Oracle Open Office Impress : colors;adding
-Oracle Open Office Impress : colors;appearance
-Oracle Open Office Impress : colors;backgrounds
-Oracle Open Office Impress : colors;charts
-Oracle Open Office Impress : colors;default colors
-Oracle Open Office Impress : colors;defining and saving
-Oracle Open Office Impress : colors;defining gradients interactively
-Oracle Open Office Impress : colors;displaying presentations
-Oracle Open Office Impress : colors;fill format
-Oracle Open Office Impress : colors;fonts
-Oracle Open Office Impress : colors;grid lines and cells (Calc)
-Oracle Open Office Impress : colors;loading lists
-Oracle Open Office Impress : colors;models
-Oracle Open Office Impress : colors;not printing
-Oracle Open Office Impress : colors;printing in grayscale
-Oracle Open Office Impress : colors;replacing
-Oracle Open Office Impress : colors;restriction (Calc)
-Oracle Open Office Impress : colors;selection
-Oracle Open Office Impress : column and line charts
-Oracle Open Office Impress : column charts
-Oracle Open Office Impress : column headers
-Oracle Open Office Impress : column headers;displaying (Calc)
-Oracle Open Office Impress : column headers;highlighting (Calc)
-Oracle Open Office Impress : columns
-Oracle Open Office Impress : columns;inserting
-Oracle Open Office Impress : columns;setting with the mouse
-Oracle Open Office Impress : combination charts
-Oracle Open Office Impress : combining
-Oracle Open Office Impress : combining;3D objects
-Oracle Open Office Impress : combining;draw objects
-Oracle Open Office Impress : combining;undoing
-Oracle Open Office Impress : combo box creation
-Oracle Open Office Impress : command button creation
-Oracle Open Office Impress : command buttons, see push buttons
-Oracle Open Office Impress : command line parameters
-Oracle Open Office Impress : commands
-Oracle Open Office Impress : commands;repeating
-Oracle Open Office Impress : commands;SQL
-Oracle Open Office Impress : comments
-Oracle Open Office Impress : comments;displaying (Calc)
-Oracle Open Office Impress : comments;inserting/editing/deleting/printing
-Oracle Open Office Impress : comments;on changes
-Oracle Open Office Impress : comments;printing in text
-Oracle Open Office Impress : common terms
-Oracle Open Office Impress : common terms;Chinese dictionary
-Oracle Open Office Impress : common terms;glossaries
-Oracle Open Office Impress : common terms;Internet glossary
-Oracle Open Office Impress : comparisons
-Oracle Open Office Impress : comparisons;document versions
-Oracle Open Office Impress : comparisons;operators in default filter dialog
-Oracle Open Office Impress : compatibility settings for MS Word import
-Oracle Open Office Impress : complete screen view
-Oracle Open Office Impress : complex text layout
-Oracle Open Office Impress : complex text layout;definition
-Oracle Open Office Impress : complex text layout;enabling
-Oracle Open Office Impress : complex text layout, see CTL
-Oracle Open Office Impress : compose key to insert special characters
-Oracle Open Office Impress : concatenation, see ampersand symbol
-Oracle Open Office Impress : conditional separators
-Oracle Open Office Impress : conditions
-Oracle Open Office Impress : conditions;in number formats
-Oracle Open Office Impress : conditions;items in Data Navigator
-Oracle Open Office Impress : cones
-Oracle Open Office Impress : Configuration Manager
-Oracle Open Office Impress : configuring
-Oracle Open Office Impress : configuring;fax icon
-Oracle Open Office Impress : configuring;Oracle Open Office
-Oracle Open Office Impress : configuring;toolbars
-Oracle Open Office Impress : connecting
-Oracle Open Office Impress : connecting;draw objects
-Oracle Open Office Impress : connecting;lines
-Oracle Open Office Impress : connecting;paths and objects
-Oracle Open Office Impress : connections to data sources (Base)
-Oracle Open Office Impress : connectors
-Oracle Open Office Impress : connectors;properties of
-Oracle Open Office Impress : connectors;using
-Oracle Open Office Impress : constructing shapes
-Oracle Open Office Impress : contents protection
-Oracle Open Office Impress : context menus
-Oracle Open Office Impress : contours
-Oracle Open Office Impress : contours;converting to
-Oracle Open Office Impress : control point display in presentations
-Oracle Open Office Impress : control points definition
-Oracle Open Office Impress : controls
-Oracle Open Office Impress : controls;activating in forms
-Oracle Open Office Impress : controls;adding to documents
-Oracle Open Office Impress : controls;arranging in forms
-Oracle Open Office Impress : controls;arranging within stacks
-Oracle Open Office Impress : controls;assigning data sources
-Oracle Open Office Impress : controls;assigning macros (Basic)
-Oracle Open Office Impress : controls;bound fields/list contents/linked cells
-Oracle Open Office Impress : controls;events
-Oracle Open Office Impress : controls;focus
-Oracle Open Office Impress : controls;formatted fields
-Oracle Open Office Impress : controls;grouping
-Oracle Open Office Impress : controls;hidden
-Oracle Open Office Impress : controls;inserting
-Oracle Open Office Impress : controls;multi-line titles
-Oracle Open Office Impress : controls;positions and sizes
-Oracle Open Office Impress : controls;printing
-Oracle Open Office Impress : controls;properties of form controls
-Oracle Open Office Impress : controls;properties of table controls
-Oracle Open Office Impress : controls;reference by SQL
-Oracle Open Office Impress : controls;rich text control
-Oracle Open Office Impress : controls;select mode
-Oracle Open Office Impress : controls;showing (Writer)
-Oracle Open Office Impress : converters
-Oracle Open Office Impress : converters;Euro converter
-Oracle Open Office Impress : converters;PostScript, UNIX
-Oracle Open Office Impress : converters;XML
-Oracle Open Office Impress : converting
-Oracle Open Office Impress : converting;bitmaps to polygons
-Oracle Open Office Impress : converting;Hangul/Hanja
-Oracle Open Office Impress : converting;metrics
-Oracle Open Office Impress : converting;Microsoft documents
-Oracle Open Office Impress : converting;Oracle Open Office documents
-Oracle Open Office Impress : converting;Pocket PC formats
-Oracle Open Office Impress : converting;points
-Oracle Open Office Impress : converting;text to curves
-Oracle Open Office Impress : converting;to bitmaps
-Oracle Open Office Impress : converting;to contours
-Oracle Open Office Impress : converting;to curves, polygons, 3D
-Oracle Open Office Impress : converting;to metafile format (WMF)
-Oracle Open Office Impress : copies
-Oracle Open Office Impress : copies;printing
-Oracle Open Office Impress : copying
-Oracle Open Office Impress : copying;by drag and drop
-Oracle Open Office Impress : copying;data from text documents
-Oracle Open Office Impress : copying;datasource records in spreadsheets
-Oracle Open Office Impress : copying;draw objects
-Oracle Open Office Impress : copying;draw objects between documents
-Oracle Open Office Impress : copying;formatting
-Oracle Open Office Impress : copying;from data source view
-Oracle Open Office Impress : copying;from Gallery
-Oracle Open Office Impress : copying;in Unix
-Oracle Open Office Impress : copying;pictures, between documents
-Oracle Open Office Impress : copying;sheet areas, to text documents
-Oracle Open Office Impress : copying;slides
-Oracle Open Office Impress : copying;text from other documents
-Oracle Open Office Impress : copying;to Gallery
-Oracle Open Office Impress : copyright for Oracle Open Office
-Oracle Open Office Impress : corner points
-Oracle Open Office Impress : corner roundings
-Oracle Open Office Impress : covered objects
-Oracle Open Office Impress : crash reports
-Oracle Open Office Impress : criteria of query design (Base)
-Oracle Open Office Impress : cropping pictures
-Oracle Open Office Impress : cross-fading
-Oracle Open Office Impress : cross-fading;creating cross-fades
-Oracle Open Office Impress : cross-fading;slides
-Oracle Open Office Impress : cross-fading;two draw objects
-Oracle Open Office Impress : CTL
-Oracle Open Office Impress : CTL;(not) wrapping words
-Oracle Open Office Impress : CTL;complex text layout languages
-Oracle Open Office Impress : CTL;definition
-Oracle Open Office Impress : CTL;options
-Oracle Open Office Impress : cubes
-Oracle Open Office Impress : currencies
-Oracle Open Office Impress : currencies;converters
-Oracle Open Office Impress : currencies;format codes
-Oracle Open Office Impress : currency field creation
-Oracle Open Office Impress : currency formats
-Oracle Open Office Impress : cursor
-Oracle Open Office Impress : cursor;allowing in protected areas (Writer)
-Oracle Open Office Impress : cursor;in read-only text
-Oracle Open Office Impress : cursor;quickly moving to an object
-Oracle Open Office Impress : curves
-Oracle Open Office Impress : curves;converting text to
-Oracle Open Office Impress : curves;drawing
-Oracle Open Office Impress : curves;editing
-Oracle Open Office Impress : curves;editing points
-Oracle Open Office Impress : curves;properties in line charts/XY charts
-Oracle Open Office Impress : curves;toolbar
-Oracle Open Office Impress : custom animation
-Oracle Open Office Impress : custom colors
-Oracle Open Office Impress : custom dictionaries
-Oracle Open Office Impress : custom dictionaries;editing
-Oracle Open Office Impress : custom gradients
-Oracle Open Office Impress : custom hyphens (Writer)
-Oracle Open Office Impress : custom quotes
-Oracle Open Office Impress : custom slide shows
-Oracle Open Office Impress : custom templates
-Oracle Open Office Impress : customizing
-Oracle Open Office Impress : customizing;events
-Oracle Open Office Impress : customizing;keyboard
-Oracle Open Office Impress : customizing;menus
-Oracle Open Office Impress : customizing;Oracle Open Office
-Oracle Open Office Impress : customizing;round corners
-Oracle Open Office Impress : customizing;toolbars
-Oracle Open Office Impress : cutting
-Oracle Open Office Impress : cylinders
-Oracle Open Office Impress : dashes
-Oracle Open Office Impress : data
-Oracle Open Office Impress : data;filtering in forms
-Oracle Open Office Impress : data;forms and subforms
-Oracle Open Office Impress : data;read-only
-Oracle Open Office Impress : data;sorting in forms
-Oracle Open Office Impress : data;user data
-Oracle Open Office Impress : data binding change in XForms
-Oracle Open Office Impress : data labels in charts
-Oracle Open Office Impress : Data Navigator
-Oracle Open Office Impress : Data Navigator;adding/editing items
-Oracle Open Office Impress : Data Navigator;display options
-Oracle Open Office Impress : data ranges in charts
-Oracle Open Office Impress : data series
-Oracle Open Office Impress : data source browser
-Oracle Open Office Impress : data source explorer
-Oracle Open Office Impress : data source view
-Oracle Open Office Impress : data source view;drag and drop
-Oracle Open Office Impress : data source view;overview
-Oracle Open Office Impress : data source view;showing
-Oracle Open Office Impress : data sources
-Oracle Open Office Impress : data sources;as tables
-Oracle Open Office Impress : data sources;connection settings (Base)
-Oracle Open Office Impress : data sources;copying records to spreadsheets
-Oracle Open Office Impress : data sources;displaying current
-Oracle Open Office Impress : data sources;LDAP server (Base)
-Oracle Open Office Impress : data sources;Oracle Open Office Base
-Oracle Open Office Impress : data sources;registering address books
-Oracle Open Office Impress : data sources;reports
-Oracle Open Office Impress : data sources;setting for stock charts
-Oracle Open Office Impress : data sources;viewing
-Oracle Open Office Impress : data structure of XForms
-Oracle Open Office Impress : data values in charts
-Oracle Open Office Impress : data, see also values
-Oracle Open Office Impress : database contents
-Oracle Open Office Impress : database contents;inserting as tables
-Oracle Open Office Impress : database contents;inserting as text
-Oracle Open Office Impress : database reports
-Oracle Open Office Impress : Database Wizard (Base)
-Oracle Open Office Impress : databases
-Oracle Open Office Impress : databases;administration through SQL (Base)
-Oracle Open Office Impress : databases;ADO (Base)
-Oracle Open Office Impress : databases;connecting (Base)
-Oracle Open Office Impress : databases;creating
-Oracle Open Office Impress : databases;creating labels
-Oracle Open Office Impress : databases;creating queries
-Oracle Open Office Impress : databases;creating reports
-Oracle Open Office Impress : databases;creating tables
-Oracle Open Office Impress : databases;deleting (Base)
-Oracle Open Office Impress : databases;drag and drop (Base)
-Oracle Open Office Impress : databases;editing tables
-Oracle Open Office Impress : databases;form filters
-Oracle Open Office Impress : databases;formats (Base)
-Oracle Open Office Impress : databases;importing/exporting
-Oracle Open Office Impress : databases;JDBC (Base)
-Oracle Open Office Impress : databases;main page (Base)
-Oracle Open Office Impress : databases;ODBC (Base)
-Oracle Open Office Impress : databases;overview
-Oracle Open Office Impress : databases;registering (Base)
-Oracle Open Office Impress : databases;searching records
-Oracle Open Office Impress : databases;shortcut keys
-Oracle Open Office Impress : databases;sorting
-Oracle Open Office Impress : databases;standard filters
-Oracle Open Office Impress : databases;text formats
-Oracle Open Office Impress : databases;viewing
-Oracle Open Office Impress : date fields
-Oracle Open Office Impress : date fields;creating
-Oracle Open Office Impress : date fields;properties
-Oracle Open Office Impress : date formats
-Oracle Open Office Impress : date on all slides
-Oracle Open Office Impress : dates
-Oracle Open Office Impress : dates;default (Calc)
-Oracle Open Office Impress : dates;fixed
-Oracle Open Office Impress : dates;printing in presentations
-Oracle Open Office Impress : dates;start 1900/01/01 (Calc)
-Oracle Open Office Impress : dates;start 1904/01/01 (Calc)
-Oracle Open Office Impress : dates;variable
-Oracle Open Office Impress : dBASE
-Oracle Open Office Impress : dBASE;database settings (Base)
-Oracle Open Office Impress : DDE
-Oracle Open Office Impress : DDE;definition
-Oracle Open Office Impress : deactivating
-Oracle Open Office Impress : deactivating;plug-ins
-Oracle Open Office Impress : decimal places displayed (Calc)
-Oracle Open Office Impress : decimal separator key
-Oracle Open Office Impress : decimal tab stops
-Oracle Open Office Impress : decreasing sizes of views
-Oracle Open Office Impress : default directories
-Oracle Open Office Impress : default filters
-Oracle Open Office Impress : default filters;comparison operators
-Oracle Open Office Impress : default filters;databases
-Oracle Open Office Impress : default printer
-Oracle Open Office Impress : default printer;setting up
-Oracle Open Office Impress : default printer;UNIX
-Oracle Open Office Impress : default templates
-Oracle Open Office Impress : default templates;changing
-Oracle Open Office Impress : default templates;organizing
-Oracle Open Office Impress : defaults
-Oracle Open Office Impress : defaults;documents
-Oracle Open Office Impress : defaults;file formats in file dialogs
-Oracle Open Office Impress : defaults;file formats in Oracle Open Office
-Oracle Open Office Impress : defaults;fonts
-Oracle Open Office Impress : defaults;grids (Writer/Calc)
-Oracle Open Office Impress : defaults;languages
-Oracle Open Office Impress : defaults;number formats
-Oracle Open Office Impress : defaults;of saving
-Oracle Open Office Impress : defaults;program configuration
-Oracle Open Office Impress : defaults;tab stops in text
-Oracle Open Office Impress : defaults;views
-Oracle Open Office Impress : defining
-Oracle Open Office Impress : defining;arrowheads and other line ends
-Oracle Open Office Impress : defining;colors
-Oracle Open Office Impress : defining;gradients
-Oracle Open Office Impress : defining;line styles
-Oracle Open Office Impress : defining;paragraph borders
-Oracle Open Office Impress : defining;queries (Base)
-Oracle Open Office Impress : defining;table borders
-Oracle Open Office Impress : deleting
-Oracle Open Office Impress : deleting;all direct formatting
-Oracle Open Office Impress : deleting;animation effects
-Oracle Open Office Impress : deleting;comments
-Oracle Open Office Impress : deleting;databases (Base)
-Oracle Open Office Impress : deleting;hyperlinks
-Oracle Open Office Impress : deleting;layers
-Oracle Open Office Impress : deleting;lines in text
-Oracle Open Office Impress : deleting;models/instances
-Oracle Open Office Impress : deleting;namespaces in XForms
-Oracle Open Office Impress : deleting;points
-Oracle Open Office Impress : deleting;slide transition effects
-Oracle Open Office Impress : deleting;slides
-Oracle Open Office Impress : deleting;tab stops
-Oracle Open Office Impress : deleting;templates
-Oracle Open Office Impress : deleting;XML filters
-Oracle Open Office Impress : depth stagger
-Oracle Open Office Impress : descriptions for objects
-Oracle Open Office Impress : design mode after saving
-Oracle Open Office Impress : design view
-Oracle Open Office Impress : design view;creating forms
-Oracle Open Office Impress : design view;queries/views (Base)
-Oracle Open Office Impress : designing
-Oracle Open Office Impress : designing;database tables
-Oracle Open Office Impress : designing;fonts
-Oracle Open Office Impress : designing;queries (Base)
-Oracle Open Office Impress : detaching toolbars
-Oracle Open Office Impress : dictionaries
-Oracle Open Office Impress : dictionaries;common terms in simplified and traditional chinese
-Oracle Open Office Impress : dictionaries;creating
-Oracle Open Office Impress : dictionaries;editing user-defined
-Oracle Open Office Impress : dictionaries;spellcheck
-Oracle Open Office Impress : dictionaries, see also languages
-Oracle Open Office Impress : digital signatures
-Oracle Open Office Impress : digital signatures;getting/managing/applying
-Oracle Open Office Impress : digital signatures;overview
-Oracle Open Office Impress : digital signatures;WebDAV over HTTPS
-Oracle Open Office Impress : dimension lines
-Oracle Open Office Impress : dimension lines;drawing
-Oracle Open Office Impress : dimension lines;properties of
-Oracle Open Office Impress : direct formatting
-Oracle Open Office Impress : direct formatting;undoing all
-Oracle Open Office Impress : directories
-Oracle Open Office Impress : directories;creating new
-Oracle Open Office Impress : directories;directory structure
-Oracle Open Office Impress : disabled persons
-Oracle Open Office Impress : display qualities of presentations
-Oracle Open Office Impress : displaying
-Oracle Open Office Impress : displaying;comments (Calc)
-Oracle Open Office Impress : displaying;comments in text documents
-Oracle Open Office Impress : displaying;non-printing characters (Writer)
-Oracle Open Office Impress : displaying;pictures and objects (Writer)
-Oracle Open Office Impress : displaying;tables (Writer)
-Oracle Open Office Impress : displaying;zero values (Calc)
-Oracle Open Office Impress : distances
-Oracle Open Office Impress : distinct values in SQL queries
-Oracle Open Office Impress : distorting in drawings
-Oracle Open Office Impress : distorting objects
-Oracle Open Office Impress : distributing draw objects
-Oracle Open Office Impress : distributing XML filters
-Oracle Open Office Impress : docking
-Oracle Open Office Impress : docking;definition
-Oracle Open Office Impress : docking;toolbars
-Oracle Open Office Impress : docking;windows
-Oracle Open Office Impress : Document Converter Wizard
-Oracle Open Office Impress : Document Map, see Navigator
-Oracle Open Office Impress : document types in Oracle Open Office
-Oracle Open Office Impress : documents
-Oracle Open Office Impress : documents;changing titles
-Oracle Open Office Impress : documents;closing
-Oracle Open Office Impress : documents;comparing
-Oracle Open Office Impress : documents;contents as lists
-Oracle Open Office Impress : documents;editing time
-Oracle Open Office Impress : documents;exporting
-Oracle Open Office Impress : documents;importing
-Oracle Open Office Impress : documents;languages
-Oracle Open Office Impress : documents;measurement units in
-Oracle Open Office Impress : documents;merging
-Oracle Open Office Impress : documents;number of pages/tables/sheets
-Oracle Open Office Impress : documents;opening
-Oracle Open Office Impress : documents;opening in design mode
-Oracle Open Office Impress : documents;opening with templates
-Oracle Open Office Impress : documents;organizing
-Oracle Open Office Impress : documents;printing
-Oracle Open Office Impress : documents;read-only
-Oracle Open Office Impress : documents;reloading
-Oracle Open Office Impress : documents;saving
-Oracle Open Office Impress : documents;saving automatically
-Oracle Open Office Impress : documents;saving in other formats
-Oracle Open Office Impress : documents;sending as e-mail
-Oracle Open Office Impress : documents;styles changed
-Oracle Open Office Impress : documents;version management
-Oracle Open Office Impress : documents;version numbers
-Oracle Open Office Impress : donut charts
-Oracle Open Office Impress : dotted areas
-Oracle Open Office Impress : double-line spacing in paragraphs
-Oracle Open Office Impress : double-line writing in Asian layout
-Oracle Open Office Impress : doubling draw objects
-Oracle Open Office Impress : drag and drop
-Oracle Open Office Impress : drag and drop;copying and pasting text
-Oracle Open Office Impress : drag and drop;data source view
-Oracle Open Office Impress : drag and drop;from Gallery to draw objects
-Oracle Open Office Impress : drag and drop;overview
-Oracle Open Office Impress : drag and drop;pictures
-Oracle Open Office Impress : drag and drop;to Gallery
-Oracle Open Office Impress : Draw instructions
-Oracle Open Office Impress : draw objects
-Oracle Open Office Impress : draw objects;adding/editing/copying
-Oracle Open Office Impress : draw objects;anchoring
-Oracle Open Office Impress : draw objects;arranging within stacks
-Oracle Open Office Impress : draw objects;combining
-Oracle Open Office Impress : draw objects;connecting lines to
-Oracle Open Office Impress : draw objects;converting text to
-Oracle Open Office Impress : draw objects;copying between documents
-Oracle Open Office Impress : draw objects;cross-fading two objects
-Oracle Open Office Impress : draw objects;displaying (Calc)
-Oracle Open Office Impress : draw objects;dropping Gallery pictures
-Oracle Open Office Impress : draw objects;duplicating
-Oracle Open Office Impress : draw objects;flipping
-Oracle Open Office Impress : draw objects;grouping
-Oracle Open Office Impress : draw objects;legends
-Oracle Open Office Impress : draw objects;positioning and resizing
-Oracle Open Office Impress : draw objects;protecting
-Oracle Open Office Impress : draw objects;rotating
-Oracle Open Office Impress : draw objects;slanting
-Oracle Open Office Impress : draw objects;text entry mode
-Oracle Open Office Impress : draw objects;text in
-Oracle Open Office Impress : drawing
-Oracle Open Office Impress : drawing;3D objects
-Oracle Open Office Impress : drawing;freeform lines
-Oracle Open Office Impress : drawing;lines
-Oracle Open Office Impress : drawing;sectors and segments
-Oracle Open Office Impress : Drawing bar
-Oracle Open Office Impress : drawing lines in text
-Oracle Open Office Impress : drawings
-Oracle Open Office Impress : drawings;creating/opening
-Oracle Open Office Impress : drawings;languages
-Oracle Open Office Impress : drawings;printing
-Oracle Open Office Impress : drawings;printing defaults
-Oracle Open Office Impress : drawings;printing in text documents
-Oracle Open Office Impress : drawings;saving
-Oracle Open Office Impress : drawings;saving automatically
-Oracle Open Office Impress : drawings;saving in other formats
-Oracle Open Office Impress : drawings;sending as e-mail
-Oracle Open Office Impress : drawings;shortcut keys
-Oracle Open Office Impress : drawings;showing (Writer)
-Oracle Open Office Impress : drawings;zoom function in
-Oracle Open Office Impress : drawings, see also draw objects
-Oracle Open Office Impress : drop-down lists in form functions
-Oracle Open Office Impress : duplicating draw objects
-Oracle Open Office Impress : e-mail attachments
-Oracle Open Office Impress : Edit File icon
-Oracle Open Office Impress : edit mode
-Oracle Open Office Impress : edit mode;after opening
-Oracle Open Office Impress : edit mode;through Enter key (Calc)
-Oracle Open Office Impress : Edit Points bar
-Oracle Open Office Impress : editing
-Oracle Open Office Impress : editing;chart axes
-Oracle Open Office Impress : editing;chart data
-Oracle Open Office Impress : editing;chart legends
-Oracle Open Office Impress : editing;chart titles
-Oracle Open Office Impress : editing;comments
-Oracle Open Office Impress : editing;curves
-Oracle Open Office Impress : editing;data binding of XForms
-Oracle Open Office Impress : editing;database tables and queries
-Oracle Open Office Impress : editing;draw objects
-Oracle Open Office Impress : editing;fields
-Oracle Open Office Impress : editing;Fontwork objects
-Oracle Open Office Impress : editing;gradients
-Oracle Open Office Impress : editing;guides and snap points
-Oracle Open Office Impress : editing;hyperlinks
-Oracle Open Office Impress : editing;menus
-Oracle Open Office Impress : editing;objects
-Oracle Open Office Impress : editing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Impress : editing;pictures
-Oracle Open Office Impress : editing;reports
-Oracle Open Office Impress : editing;shortcut keys
-Oracle Open Office Impress : editing;slide titles
-Oracle Open Office Impress : editing;tab stops
-Oracle Open Office Impress : editing;templates
-Oracle Open Office Impress : editing;titles
-Oracle Open Office Impress : editing;toolbars
-Oracle Open Office Impress : editing;undoing
-Oracle Open Office Impress : editing;XForms
-Oracle Open Office Impress : editing time of documents
-Oracle Open Office Impress : editors
-Oracle Open Office Impress : editors;formula editor
-Oracle Open Office Impress : editors;ImageMap editor
-Oracle Open Office Impress : effects
-Oracle Open Office Impress : effects;animated slide transitions
-Oracle Open Office Impress : effects;applying to/removing from objects
-Oracle Open Office Impress : effects;font positions
-Oracle Open Office Impress : effects;fonts
-Oracle Open Office Impress : effects;Fontwork icons
-Oracle Open Office Impress : effects;preview
-Oracle Open Office Impress : effects;sounds
-Oracle Open Office Impress : ellipses
-Oracle Open Office Impress : ellipses;segments
-Oracle Open Office Impress : ellipses;toolbars
-Oracle Open Office Impress : empty documents
-Oracle Open Office Impress : empty paragraph removal
-Oracle Open Office Impress : encryption of contents
-Oracle Open Office Impress : entering groups
-Oracle Open Office Impress : entering text from right to left
-Oracle Open Office Impress : equal sign, see also operators
-Oracle Open Office Impress : equations in formula editor
-Oracle Open Office Impress : error bars in charts
-Oracle Open Office Impress : error indicators in charts
-Oracle Open Office Impress : Error Report Tool
-Oracle Open Office Impress : Euro
-Oracle Open Office Impress : Euro;currency formats
-Oracle Open Office Impress : Euro;Euro Converter Wizard
-Oracle Open Office Impress : even/odd pages
-Oracle Open Office Impress : even/odd pages;printing
-Oracle Open Office Impress : events
-Oracle Open Office Impress : events;assigning scripts
-Oracle Open Office Impress : events;controls
-Oracle Open Office Impress : events;customizing
-Oracle Open Office Impress : events;in forms
-Oracle Open Office Impress : Excel
-Oracle Open Office Impress : Excel;saving as
-Oracle Open Office Impress : Excel;search criteria
-Oracle Open Office Impress : exceptions
-Oracle Open Office Impress : exceptions;user-defined dictionaries
-Oracle Open Office Impress : exchanging, see also replacing
-Oracle Open Office Impress : executing SQL commands
-Oracle Open Office Impress : exiting
-Oracle Open Office Impress : exiting;by clicking objects
-Oracle Open Office Impress : exiting;groups
-Oracle Open Office Impress : exiting;Oracle Open Office
-Oracle Open Office Impress : expanding
-Oracle Open Office Impress : expanding;slides
-Oracle Open Office Impress : expanding formatting (Calc)
-Oracle Open Office Impress : explorer of data sources
-Oracle Open Office Impress : export filters
-Oracle Open Office Impress : exporting
-Oracle Open Office Impress : exporting;animations to GIF format
-Oracle Open Office Impress : exporting;bitmaps
-Oracle Open Office Impress : exporting;HTML and text documents
-Oracle Open Office Impress : exporting;Microsoft Office documents with VBA code
-Oracle Open Office Impress : exporting;presentations to HTML
-Oracle Open Office Impress : exporting;spreadsheets to text format
-Oracle Open Office Impress : exporting;templates
-Oracle Open Office Impress : exporting;to foreign formats
-Oracle Open Office Impress : exporting;to HTML
-Oracle Open Office Impress : exporting;to Macromedia Flash format
-Oracle Open Office Impress : exporting;to Microsoft Office formats
-Oracle Open Office Impress : exporting;to PDF
-Oracle Open Office Impress : exporting;to PostScript format
-Oracle Open Office Impress : exporting;to XML
-Oracle Open Office Impress : exporting;XML files
-Oracle Open Office Impress : extended tips in Help
-Oracle Open Office Impress : extension mode in text
-Oracle Open Office Impress : extensions
-Oracle Open Office Impress : extensions;Extension Manager
-Oracle Open Office Impress : extensions;file formats
-Oracle Open Office Impress : external keys (Base)
-Oracle Open Office Impress : extrusion objects
-Oracle Open Office Impress : eyedropper tool
-Oracle Open Office Impress : faster printing
-Oracle Open Office Impress : faxes
-Oracle Open Office Impress : faxes;configuring Oracle Open Office
-Oracle Open Office Impress : faxes;fax programs/fax printers under UNIX
-Oracle Open Office Impress : faxes;selecting a fax machine
-Oracle Open Office Impress : faxes;sending
-Oracle Open Office Impress : faxes;wizards
-Oracle Open Office Impress : feedback
-Oracle Open Office Impress : feedback;automatically
-Oracle Open Office Impress : fields
-Oracle Open Office Impress : fields;authors
-Oracle Open Office Impress : fields;database tables
-Oracle Open Office Impress : fields;dates (fixed)
-Oracle Open Office Impress : fields;dates (variable)
-Oracle Open Office Impress : fields;displaying field codes (Writer)
-Oracle Open Office Impress : fields;editing
-Oracle Open Office Impress : fields;file names
-Oracle Open Office Impress : fields;formatted fields
-Oracle Open Office Impress : fields;formatting
-Oracle Open Office Impress : fields;in slides
-Oracle Open Office Impress : fields;page numbers
-Oracle Open Office Impress : fields;times (fixed)
-Oracle Open Office Impress : fields;times (variable)
-Oracle Open Office Impress : fields;updating automatically (Writer)
-Oracle Open Office Impress : file associations for Microsoft Office
-Oracle Open Office Impress : file filters
-Oracle Open Office Impress : file filters;mobile devices
-Oracle Open Office Impress : file filters;XML
-Oracle Open Office Impress : file formats
-Oracle Open Office Impress : file formats;changing Oracle Open Office defaults
-Oracle Open Office Impress : file formats;OpenDocument/XML
-Oracle Open Office Impress : file formats;saving always in other formats
-Oracle Open Office Impress : file selection button
-Oracle Open Office Impress : file sharing options for current document
-Oracle Open Office Impress : files
-Oracle Open Office Impress : files;filters and formats
-Oracle Open Office Impress : files;importing
-Oracle Open Office Impress : files;inserting
-Oracle Open Office Impress : files;inserting pictures
-Oracle Open Office Impress : files;opening
-Oracle Open Office Impress : files;opening with placeholders
-Oracle Open Office Impress : files;properties
-Oracle Open Office Impress : files;saving
-Oracle Open Office Impress : files;saving automatically
-Oracle Open Office Impress : files;saving in other formats
-Oracle Open Office Impress : files;sending as e-mail
-Oracle Open Office Impress : files;version numbers
-Oracle Open Office Impress : files and folders in Oracle Open Office
-Oracle Open Office Impress : fill characters with tabulators
-Oracle Open Office Impress : fill colors for areas
-Oracle Open Office Impress : fill format mode
-Oracle Open Office Impress : fill format mode;styles
-Oracle Open Office Impress : fill patterns for areas
-Oracle Open Office Impress : filter conditions
-Oracle Open Office Impress : filter conditions;connecting
-Oracle Open Office Impress : filter conditions;in queries (Base)
-Oracle Open Office Impress : filtering
-Oracle Open Office Impress : filtering;data in databases
-Oracle Open Office Impress : filtering;data in forms
-Oracle Open Office Impress : filters
-Oracle Open Office Impress : filters;comparison operators
-Oracle Open Office Impress : filters;for import and export
-Oracle Open Office Impress : filters;Navigator
-Oracle Open Office Impress : filters;pictures
-Oracle Open Office Impress : filters;XML filter settings
-Oracle Open Office Impress : Find tab in Help
-Oracle Open Office Impress : finding
-Oracle Open Office Impress : finding;in all sheets
-Oracle Open Office Impress : finding;records in form documents
-Oracle Open Office Impress : finding;selections
-Oracle Open Office Impress : finding;similarity search
-Oracle Open Office Impress : fitting to pages
-Oracle Open Office Impress : fitting to pages;individual slides
-Oracle Open Office Impress : fitting to pages;print settings in Math
-Oracle Open Office Impress : fitting to pages;print settings in presentations
-Oracle Open Office Impress : fixed text
-Oracle Open Office Impress : fixed text;form functions
-Oracle Open Office Impress : fixing toolbars
-Oracle Open Office Impress : flipping around a flip line
-Oracle Open Office Impress : flipping draw objects
-Oracle Open Office Impress : floating frames in HTML documents
-Oracle Open Office Impress : floating text
-Oracle Open Office Impress : floating toolbars
-Oracle Open Office Impress : flowcharts
-Oracle Open Office Impress : focus of controls
-Oracle Open Office Impress : folder creation
-Oracle Open Office Impress : font lists
-Oracle Open Office Impress : font name box
-Oracle Open Office Impress : font sizes
-Oracle Open Office Impress : font sizes;bullets
-Oracle Open Office Impress : font sizes;relative changes
-Oracle Open Office Impress : font sizes;scaling on screen
-Oracle Open Office Impress : font sizes;text
-Oracle Open Office Impress : fonts
-Oracle Open Office Impress : fonts;adding under UNIX
-Oracle Open Office Impress : fonts;changing in templates
-Oracle Open Office Impress : fonts;colors
-Oracle Open Office Impress : fonts;default settings
-Oracle Open Office Impress : fonts;effects
-Oracle Open Office Impress : fonts;for HTML and Basic
-Oracle Open Office Impress : fonts;formats
-Oracle Open Office Impress : fonts;outlines
-Oracle Open Office Impress : fonts;positions in text
-Oracle Open Office Impress : fonts;shadows
-Oracle Open Office Impress : fonts;specifying several
-Oracle Open Office Impress : fonts;strikethrough
-Oracle Open Office Impress : fonts;styles
-Oracle Open Office Impress : fonts;text objects
-Oracle Open Office Impress : Fontwork icons
-Oracle Open Office Impress : footers
-Oracle Open Office Impress : footers;backgrounds
-Oracle Open Office Impress : footers;slide masters
-Oracle Open Office Impress : footers;slides
-Oracle Open Office Impress : form controls
-Oracle Open Office Impress : form controls;assigning macros
-Oracle Open Office Impress : form controls;protecting
-Oracle Open Office Impress : form controls;toolbars
-Oracle Open Office Impress : form fields
-Oracle Open Office Impress : form filters
-Oracle Open Office Impress : Form Navigator
-Oracle Open Office Impress : format codes
-Oracle Open Office Impress : format codes;numbers
-Oracle Open Office Impress : format filling printing in Oracle Open Office Math
-Oracle Open Office Impress : Format Paintbrush
-Oracle Open Office Impress : formats
-Oracle Open Office Impress : formats;Asian layout
-Oracle Open Office Impress : formats;fonts
-Oracle Open Office Impress : formats;maximizing page formats
-Oracle Open Office Impress : formats;number and currency formats
-Oracle Open Office Impress : formats;of currencies/date/time
-Oracle Open Office Impress : formats;on opening and saving
-Oracle Open Office Impress : formats;pasting in special formats
-Oracle Open Office Impress : formats;positions
-Oracle Open Office Impress : formats;tabulators
-Oracle Open Office Impress : formatted fields
-Oracle Open Office Impress : formatted fields;form functions
-Oracle Open Office Impress : formatted fields;properties
-Oracle Open Office Impress : formatting
-Oracle Open Office Impress : formatting;Asian typography
-Oracle Open Office Impress : formatting;axes in charts
-Oracle Open Office Impress : formatting;chart areas
-Oracle Open Office Impress : formatting;chart floors
-Oracle Open Office Impress : formatting;chart legends
-Oracle Open Office Impress : formatting;chart titles
-Oracle Open Office Impress : formatting;chart walls
-Oracle Open Office Impress : formatting;copying
-Oracle Open Office Impress : formatting;definition
-Oracle Open Office Impress : formatting;expanding (Calc)
-Oracle Open Office Impress : formatting;fields
-Oracle Open Office Impress : formatting;font effects
-Oracle Open Office Impress : formatting;hyperlinks
-Oracle Open Office Impress : formatting;pages
-Oracle Open Office Impress : formatting;printer metrics (Writer)
-Oracle Open Office Impress : formatting;slides
-Oracle Open Office Impress : formatting;slides headings
-Oracle Open Office Impress : formatting;undoing
-Oracle Open Office Impress : formatting;undoing when writing
-Oracle Open Office Impress : forms
-Oracle Open Office Impress : forms;browsing
-Oracle Open Office Impress : forms;Combo Box/List Box Wizard
-Oracle Open Office Impress : forms;creating
-Oracle Open Office Impress : forms;data
-Oracle Open Office Impress : forms;designing (Base)
-Oracle Open Office Impress : forms;events
-Oracle Open Office Impress : forms;filtering data
-Oracle Open Office Impress : forms;finding records
-Oracle Open Office Impress : forms;focus after opening
-Oracle Open Office Impress : forms;general information (Base)
-Oracle Open Office Impress : forms;grouping controls
-Oracle Open Office Impress : forms;HTML filters
-Oracle Open Office Impress : forms;inserting
-Oracle Open Office Impress : forms;Navigator
-Oracle Open Office Impress : forms;opening in design mode
-Oracle Open Office Impress : forms;properties
-Oracle Open Office Impress : forms;sorting data
-Oracle Open Office Impress : forms;subforms
-Oracle Open Office Impress : forms;wizards
-Oracle Open Office Impress : forms;XForms
-Oracle Open Office Impress : formula texts
-Oracle Open Office Impress : formula texts;printing in Oracle Open Office Math
-Oracle Open Office Impress : formulas
-Oracle Open Office Impress : formulas;new
-Oracle Open Office Impress : formulas;starting formula editor
-Oracle Open Office Impress : formulas in reports
-Oracle Open Office Impress : formulas in reports;editing
-Oracle Open Office Impress : forums and support
-Oracle Open Office Impress : frames
-Oracle Open Office Impress : frames;around paragraphs
-Oracle Open Office Impress : frames;around tables
-Oracle Open Office Impress : frames;AutoCorrect function
-Oracle Open Office Impress : frames;backgrounds
-Oracle Open Office Impress : frames;captions (Writer)
-Oracle Open Office Impress : frames;printing in Oracle Open Office Math
-Oracle Open Office Impress : frames;protecting
-Oracle Open Office Impress : frames;selection frames
-Oracle Open Office Impress : frames;text fitting to frames
-Oracle Open Office Impress : freeform lines
-Oracle Open Office Impress : freeform lines;draw functions
-Oracle Open Office Impress : freeform lines;drawing
-Oracle Open Office Impress : FTP
-Oracle Open Office Impress : FTP;opening documents
-Oracle Open Office Impress : FTP;saving documents
-Oracle Open Office Impress : full joins (Base)
-Oracle Open Office Impress : full screen view
-Oracle Open Office Impress : full-text search in Help
-Oracle Open Office Impress : functions in reports
-Oracle Open Office Impress : functions in reports;editing
-Oracle Open Office Impress : Gallery
-Oracle Open Office Impress : Gallery;adding pictures
-Oracle Open Office Impress : Gallery;dragging pictures to draw objects
-Oracle Open Office Impress : Gallery;hiding/showing
-Oracle Open Office Impress : Gallery;inserting pictures from
-Oracle Open Office Impress : geometric forms
-Oracle Open Office Impress : get method for form transmissions
-Oracle Open Office Impress : getting support
-Oracle Open Office Impress : GIF format
-Oracle Open Office Impress : GIF images
-Oracle Open Office Impress : GIF images;animating
-Oracle Open Office Impress : GIF images;replacing colors
-Oracle Open Office Impress : glossaries
-Oracle Open Office Impress : glossaries;common terms
-Oracle Open Office Impress : glossaries;Internet terms
-Oracle Open Office Impress : glue points
-Oracle Open Office Impress : glue points;using
-Oracle Open Office Impress : gradients
-Oracle Open Office Impress : gradients;applying and defining
-Oracle Open Office Impress : gradients;defining colors
-Oracle Open Office Impress : gradients;loading lists
-Oracle Open Office Impress : gradients;transparent
-Oracle Open Office Impress : gradients off for faster printing
-Oracle Open Office Impress : graphic objects, see draw objects
-Oracle Open Office Impress : graphical text art
-Oracle Open Office Impress : graphics
-Oracle Open Office Impress : graphics;cache
-Oracle Open Office Impress : graphics;protecting
-Oracle Open Office Impress : graphics, see also pictures
-Oracle Open Office Impress : grayscale display
-Oracle Open Office Impress : grayscale printing
-Oracle Open Office Impress : grid controls
-Oracle Open Office Impress : grid controls;form functions
-Oracle Open Office Impress : grids
-Oracle Open Office Impress : grids;defaults (Writer/Calc)
-Oracle Open Office Impress : grids;display options (Impress/Draw)
-Oracle Open Office Impress : grids;displaying lines (Calc)
-Oracle Open Office Impress : grids;formatting axes
-Oracle Open Office Impress : grids;inserting in charts
-Oracle Open Office Impress : group box creation
-Oracle Open Office Impress : grouping
-Oracle Open Office Impress : grouping;draw objects
-Oracle Open Office Impress : groups
-Oracle Open Office Impress : groups;entering/exiting/ungrouping
-Oracle Open Office Impress : groups;naming
-Oracle Open Office Impress : groups;of controls
-Oracle Open Office Impress : guides
-Oracle Open Office Impress : guides;display options (Impress/Draw)
-Oracle Open Office Impress : guides;displaying when moving objects (Impress)
-Oracle Open Office Impress : guides;editing
-Oracle Open Office Impress : guides;inserting
-Oracle Open Office Impress : guides;show snap lines icon
-Oracle Open Office Impress : guides;showing (Calc)
-Oracle Open Office Impress : guides;showing when moving frames (Writer)
-Oracle Open Office Impress : gutter
-Oracle Open Office Impress : half-spheres
-Oracle Open Office Impress : hand icon for moving slides
-Oracle Open Office Impress : handles
-Oracle Open Office Impress : handles;displaying (Writer)
-Oracle Open Office Impress : handles;large
-Oracle Open Office Impress : handles;scaling
-Oracle Open Office Impress : handles;showing simple/large handles (Calc)
-Oracle Open Office Impress : handles;simple
-Oracle Open Office Impress : handout printing
-Oracle Open Office Impress : Hangul/Hanja
-Oracle Open Office Impress : hatching
-Oracle Open Office Impress : hatching
-Oracle Open Office Impress : hatching;loading lists
-Oracle Open Office Impress : headers
-Oracle Open Office Impress : headers;backgrounds
-Oracle Open Office Impress : headers and footers
-Oracle Open Office Impress : headers and footers;master layouts
-Oracle Open Office Impress : headers and footers;slide masters
-Oracle Open Office Impress : headers and footers;slides
-Oracle Open Office Impress : headings
-Oracle Open Office Impress : headings;entering as text box
-Oracle Open Office Impress : Hebrew
-Oracle Open Office Impress : Hebrew;entering text
-Oracle Open Office Impress : Hebrew;language settings
-Oracle Open Office Impress : Help
-Oracle Open Office Impress : Help;bookmarks
-Oracle Open Office Impress : Help;extended tips on/off
-Oracle Open Office Impress : Help;full-text search
-Oracle Open Office Impress : Help;Help tips
-Oracle Open Office Impress : Help;keywords
-Oracle Open Office Impress : Help;navigation pane showing/hiding
-Oracle Open Office Impress : Help;style sheets
-Oracle Open Office Impress : Help;topics
-Oracle Open Office Impress : Help Agent
-Oracle Open Office Impress : Help Agent;help
-Oracle Open Office Impress : Help Agent;options
-Oracle Open Office Impress : Help tips
-Oracle Open Office Impress : Help tips;hiding
-Oracle Open Office Impress : hidden controls in Form Navigator
-Oracle Open Office Impress : hidden fields display (Writer)
-Oracle Open Office Impress : hidden pages
-Oracle Open Office Impress : hidden pages;printing in presentations
-Oracle Open Office Impress : hidden pages;showing
-Oracle Open Office Impress : hidden text
-Oracle Open Office Impress : hidden text;showing (Writer)
-Oracle Open Office Impress : hiding
-Oracle Open Office Impress : hiding;changes
-Oracle Open Office Impress : hiding;chart legends
-Oracle Open Office Impress : hiding;docked windows
-Oracle Open Office Impress : hiding;layers
-Oracle Open Office Impress : hiding;levels
-Oracle Open Office Impress : hiding;navigation pane in Help window
-Oracle Open Office Impress : hiding;slides
-Oracle Open Office Impress : hiding;subpoints
-Oracle Open Office Impress : high contrast mode
-Oracle Open Office Impress : Hindi
-Oracle Open Office Impress : Hindi;entering text
-Oracle Open Office Impress : Hindi;language settings
-Oracle Open Office Impress : horizontal scrollbars (Writer)
-Oracle Open Office Impress : hot spots in flowcharts
-Oracle Open Office Impress : hotspots
-Oracle Open Office Impress : HowTos for charts
-Oracle Open Office Impress : Howtos for Draw
-Oracle Open Office Impress : HTML
-Oracle Open Office Impress : HTML;definition
-Oracle Open Office Impress : HTML;export character set
-Oracle Open Office Impress : HTML;exporting from presentations
-Oracle Open Office Impress : HTML;fonts for source display
-Oracle Open Office Impress : HTML;importing into presentations
-Oracle Open Office Impress : HTML;importing META tags
-Oracle Open Office Impress : HTML;inserting files
-Oracle Open Office Impress : HTML;live presentations
-Oracle Open Office Impress : HTML documents
-Oracle Open Office Impress : HTML documents;auto reloading
-Oracle Open Office Impress : HTML documents;importing/exporting
-Oracle Open Office Impress : HTML documents;META tags in
-Oracle Open Office Impress : HTML documents;new
-Oracle Open Office Impress : HTML documents;source text
-Oracle Open Office Impress : hyperlinks
-Oracle Open Office Impress : hyperlinks;assigning macros
-Oracle Open Office Impress : hyperlinks;character formats
-Oracle Open Office Impress : hyperlinks;definition
-Oracle Open Office Impress : hyperlinks;deleting
-Oracle Open Office Impress : hyperlinks;editing
-Oracle Open Office Impress : hyperlinks;inserting
-Oracle Open Office Impress : hyperlinks;relative and absolute
-Oracle Open Office Impress : hyperlinks;turning off automatic recognition
-Oracle Open Office Impress : hyperlinks, see also links
-Oracle Open Office Impress : hyphenation
-Oracle Open Office Impress : hyphenation;activating for a language
-Oracle Open Office Impress : hyphenation;minimal number of characters
-Oracle Open Office Impress : hyphens
-Oracle Open Office Impress : hyphens;displaying custom (Writer)
-Oracle Open Office Impress : hyphens;inserting custom
-Oracle Open Office Impress : icon bars, see toolbars
-Oracle Open Office Impress : icon sizes
-Oracle Open Office Impress : ignore list for spellcheck
-Oracle Open Office Impress : illumination
-Oracle Open Office Impress : illumination;3D charts
-Oracle Open Office Impress : illustrations, see pictures
-Oracle Open Office Impress : image button creation
-Oracle Open Office Impress : image control creation
-Oracle Open Office Impress : ImageMap
-Oracle Open Office Impress : ImageMap;definition
-Oracle Open Office Impress : ImageMap;editor
-Oracle Open Office Impress : images
-Oracle Open Office Impress : images;ImageMap
-Oracle Open Office Impress : images;inserting
-Oracle Open Office Impress : images;inserting and editing bitmaps
-Oracle Open Office Impress : images, see also pictures
-Oracle Open Office Impress : IME
-Oracle Open Office Impress : IME;definition
-Oracle Open Office Impress : IME;showing/hiding
-Oracle Open Office Impress : import filters
-Oracle Open Office Impress : import restrictions for Microsoft Office
-Oracle Open Office Impress : importing
-Oracle Open Office Impress : importing;bitmaps
-Oracle Open Office Impress : importing;compatibility settings for text import
-Oracle Open Office Impress : importing;databases
-Oracle Open Office Impress : importing;documents in other formats
-Oracle Open Office Impress : importing;from XML
-Oracle Open Office Impress : importing;HTML and text documents
-Oracle Open Office Impress : importing;HTML with META tags
-Oracle Open Office Impress : importing;Microsoft Office documents with VBA code
-Oracle Open Office Impress : importing;presentations with HTML
-Oracle Open Office Impress : importing;tables in text format
-Oracle Open Office Impress : importing;templates
-Oracle Open Office Impress : improvement program
-Oracle Open Office Impress : in front of object command
-Oracle Open Office Impress : inches
-Oracle Open Office Impress : including spreadsheets
-Oracle Open Office Impress : increasing sizes of views
-Oracle Open Office Impress : Index tab in Help
-Oracle Open Office Impress : indexes
-Oracle Open Office Impress : indexes;backgrounds
-Oracle Open Office Impress : indexes;showing/hiding Help index tab
-Oracle Open Office Impress : indicator lines in text
-Oracle Open Office Impress : inner joins (Base)
-Oracle Open Office Impress : input method window
-Oracle Open Office Impress : insert mode for entering text
-Oracle Open Office Impress : inserting
-Oracle Open Office Impress : inserting;3D objects
-Oracle Open Office Impress : inserting;arrows
-Oracle Open Office Impress : inserting;buttons in toolbars
-Oracle Open Office Impress : inserting;callouts in presentations
-Oracle Open Office Impress : inserting;cell ranges from spreadsheets
-Oracle Open Office Impress : inserting;charts
-Oracle Open Office Impress : inserting;clipboard options
-Oracle Open Office Impress : inserting;columns
-Oracle Open Office Impress : inserting;comments
-Oracle Open Office Impress : inserting;data from text documents
-Oracle Open Office Impress : inserting;datasource records in spreadsheets
-Oracle Open Office Impress : inserting;drawings
-Oracle Open Office Impress : inserting;ellipses
-Oracle Open Office Impress : inserting;files
-Oracle Open Office Impress : inserting;floating frames
-Oracle Open Office Impress : inserting;Fontwork objects
-Oracle Open Office Impress : inserting;form fields
-Oracle Open Office Impress : inserting;headers/footers in all slides
-Oracle Open Office Impress : inserting;hyperlinks
-Oracle Open Office Impress : inserting;layers
-Oracle Open Office Impress : inserting;line breaks in cells
-Oracle Open Office Impress : inserting;lines
-Oracle Open Office Impress : inserting;movies/sounds
-Oracle Open Office Impress : inserting;new text tables defaults
-Oracle Open Office Impress : inserting;objects from files
-Oracle Open Office Impress : inserting;objects from Gallery
-Oracle Open Office Impress : inserting;OLE objects
-Oracle Open Office Impress : inserting;paragraph borders
-Oracle Open Office Impress : inserting;paragraph bullets
-Oracle Open Office Impress : inserting;pictures
-Oracle Open Office Impress : inserting;pictures in Gallery
-Oracle Open Office Impress : inserting;plug-ins
-Oracle Open Office Impress : inserting;polygons
-Oracle Open Office Impress : inserting;push buttons
-Oracle Open Office Impress : inserting;rectangles
-Oracle Open Office Impress : inserting;rows
-Oracle Open Office Impress : inserting;slides
-Oracle Open Office Impress : inserting;slides as links
-Oracle Open Office Impress : inserting;slides from files
-Oracle Open Office Impress : inserting;special characters
-Oracle Open Office Impress : inserting;tab stops
-Oracle Open Office Impress : inserting;text frames
-Oracle Open Office Impress : inserting;text in presentations
-Oracle Open Office Impress : inserting;textures on chart bars
-Oracle Open Office Impress : installing
-Oracle Open Office Impress : installing;ActiveX control
-Oracle Open Office Impress : installing;mobile device filters
-Oracle Open Office Impress : installing;UNO components
-Oracle Open Office Impress : installing;XML filters
-Oracle Open Office Impress : instructions
-Oracle Open Office Impress : instructions;general
-Oracle Open Office Impress : instructions;Oracle Open Office Draw
-Oracle Open Office Impress : instructions;Oracle Open Office Impress
-Oracle Open Office Impress : interactions
-Oracle Open Office Impress : interactions;hot spots
-Oracle Open Office Impress : interactions;objects in interactive presentations
-Oracle Open Office Impress : interactions;preview
-Oracle Open Office Impress : Internet
-Oracle Open Office Impress : Internet;checking for updates
-Oracle Open Office Impress : Internet;Internet Explorer for displaying Oracle Open Office documents
-Oracle Open Office Impress : Internet;presentations
-Oracle Open Office Impress : Internet;starting searches
-Oracle Open Office Impress : Internet glossary
-Oracle Open Office Impress : intersecting draw objects
-Oracle Open Office Impress : invert filter
-Oracle Open Office Impress : invisible areas
-Oracle Open Office Impress : italic text
-Oracle Open Office Impress : iterative references in spreadsheets
-Oracle Open Office Impress : Java
-Oracle Open Office Impress : Java;definition
-Oracle Open Office Impress : Java;setting options
-Oracle Open Office Impress : JDBC
-Oracle Open Office Impress : JDBC;databases (Base)
-Oracle Open Office Impress : JDBC;definition
-Oracle Open Office Impress : joining
-Oracle Open Office Impress : joining;3D objects
-Oracle Open Office Impress : joining;paragraphs
-Oracle Open Office Impress : joining;tables (Base)
-Oracle Open Office Impress : joins in databases (Base)
-Oracle Open Office Impress : justifying text
-Oracle Open Office Impress : kerning
-Oracle Open Office Impress : kerning;Asian texts
-Oracle Open Office Impress : kerning;definition
-Oracle Open Office Impress : kerning;in characters
-Oracle Open Office Impress : key fields for relations (Base)
-Oracle Open Office Impress : keyboard
-Oracle Open Office Impress : keyboard;assigning/editing shortcut keys
-Oracle Open Office Impress : keyboard;general commands
-Oracle Open Office Impress : keyboard;removing numbering
-Oracle Open Office Impress : keyboard;zooming
-Oracle Open Office Impress : keys
-Oracle Open Office Impress : keys;adding push buttons
-Oracle Open Office Impress : keys;primary keys (Base)
-Oracle Open Office Impress : kiosk export
-Oracle Open Office Impress : labels
-Oracle Open Office Impress : labels;creating and synchronizing
-Oracle Open Office Impress : labels;for charts
-Oracle Open Office Impress : labels;for draw objects
-Oracle Open Office Impress : labels;form functions
-Oracle Open Office Impress : labels;from databases
-Oracle Open Office Impress : labels, see also names/callouts
-Oracle Open Office Impress : languages
-Oracle Open Office Impress : languages;activating modules
-Oracle Open Office Impress : languages;Asian support
-Oracle Open Office Impress : languages;complex text layout
-Oracle Open Office Impress : languages;locale settings
-Oracle Open Office Impress : languages;selecting for text
-Oracle Open Office Impress : languages;setting options
-Oracle Open Office Impress : languages;spellcheck
-Oracle Open Office Impress : languages;spellchecking and formatting
-Oracle Open Office Impress : large handles (Writer)
-Oracle Open Office Impress : large icons
-Oracle Open Office Impress : layer arrangement
-Oracle Open Office Impress : layers
-Oracle Open Office Impress : layers;definition
-Oracle Open Office Impress : layers;deleting
-Oracle Open Office Impress : layers;inserting and editing
-Oracle Open Office Impress : layers;moving objects
-Oracle Open Office Impress : layers;renaming
-Oracle Open Office Impress : layers;working with
-Oracle Open Office Impress : layout
-Oracle Open Office Impress : layout;importing Word documents
-Oracle Open Office Impress : layout;pages
-Oracle Open Office Impress : layout;printing handouts
-Oracle Open Office Impress : LDAP server
-Oracle Open Office Impress : LDAP server;address books (Base)
-Oracle Open Office Impress : LDAP server;sign on options
-Oracle Open Office Impress : leading between paragraphs
-Oracle Open Office Impress : left alignment of paragraphs
-Oracle Open Office Impress : left joins (Base)
-Oracle Open Office Impress : legends
-Oracle Open Office Impress : legends;charts
-Oracle Open Office Impress : legends;draw objects
-Oracle Open Office Impress : legends;drawings
-Oracle Open Office Impress : legends;rounding corners
-Oracle Open Office Impress : Letter Wizard
-Oracle Open Office Impress : levels
-Oracle Open Office Impress : levels;depth stagger
-Oracle Open Office Impress : levels;hiding
-Oracle Open Office Impress : levels;macro security
-Oracle Open Office Impress : levels;showing
-Oracle Open Office Impress : limits of tables (Writer)
-Oracle Open Office Impress : line breaks
-Oracle Open Office Impress : line breaks;in cells
-Oracle Open Office Impress : line charts
-Oracle Open Office Impress : line spacing
-Oracle Open Office Impress : line spacing;context menu in paragraphs
-Oracle Open Office Impress : line spacing;paragraph
-Oracle Open Office Impress : line styles
-Oracle Open Office Impress : line styles;applying
-Oracle Open Office Impress : line styles;defining
-Oracle Open Office Impress : line styles;loading
-Oracle Open Office Impress : lines
-Oracle Open Office Impress : lines;about line ends
-Oracle Open Office Impress : lines;connecting objects
-Oracle Open Office Impress : lines;defining ends
-Oracle Open Office Impress : lines;draw functions
-Oracle Open Office Impress : lines;drawing
-Oracle Open Office Impress : lines;drawing in text
-Oracle Open Office Impress : lines;editing points
-Oracle Open Office Impress : lines;inserting
-Oracle Open Office Impress : lines;removing automatic lines
-Oracle Open Office Impress : lines of text
-Oracle Open Office Impress : lines of text;alignment
-Oracle Open Office Impress : links
-Oracle Open Office Impress : links;between cells and controls
-Oracle Open Office Impress : links;by drag and drop
-Oracle Open Office Impress : links;character formats
-Oracle Open Office Impress : links;definition
-Oracle Open Office Impress : links;editing hyperlinks
-Oracle Open Office Impress : links;inserting
-Oracle Open Office Impress : links;modifying
-Oracle Open Office Impress : links;opening files with
-Oracle Open Office Impress : links;relational databases (Base)
-Oracle Open Office Impress : links;turning off automatic recognition
-Oracle Open Office Impress : links;updating options (Writer)
-Oracle Open Office Impress : links;updating specific links
-Oracle Open Office Impress : list box creation
-Oracle Open Office Impress : lists
-Oracle Open Office Impress : lists;animations
-Oracle Open Office Impress : lists;data assigned to controls
-Oracle Open Office Impress : lists;registered databases (Base)
-Oracle Open Office Impress : lists;regular expressions
-Oracle Open Office Impress : live presentations on the Internet
-Oracle Open Office Impress : loading
-Oracle Open Office Impress : loading;arrow and line styles
-Oracle Open Office Impress : loading;colors/gradients/hatchings
-Oracle Open Office Impress : loading;documents
-Oracle Open Office Impress : loading;documents from other formats
-Oracle Open Office Impress : loading;HTML documents, automatically
-Oracle Open Office Impress : loading;Microsoft Office documents with VBA code
-Oracle Open Office Impress : loading;reloading
-Oracle Open Office Impress : loading;XML files
-Oracle Open Office Impress : locale settings
-Oracle Open Office Impress : locking layers
-Oracle Open Office Impress : logarithmic scaling along axes
-Oracle Open Office Impress : lowercase letters
-Oracle Open Office Impress : lowercase letters;font effects
-Oracle Open Office Impress : Macro Wizard (Base)
-Oracle Open Office Impress : Macromedia Flash export
-Oracle Open Office Impress : macros
-Oracle Open Office Impress : macros;assigning to events in forms
-Oracle Open Office Impress : macros;attaching new (Base)
-Oracle Open Office Impress : macros;in MS Office documents
-Oracle Open Office Impress : macros;interrupting
-Oracle Open Office Impress : macros;organizing
-Oracle Open Office Impress : macros;recording
-Oracle Open Office Impress : macros;running in presentations
-Oracle Open Office Impress : macros;security
-Oracle Open Office Impress : macros;security levels
-Oracle Open Office Impress : macros;security warning dialog
-Oracle Open Office Impress : macros;selecting security warnings
-Oracle Open Office Impress : magnetic lines in presentations
-Oracle Open Office Impress : magnifiers
-Oracle Open Office Impress : margins
-Oracle Open Office Impress : margins;pages
-Oracle Open Office Impress : margins;setting with the mouse
-Oracle Open Office Impress : margins;shadows
-Oracle Open Office Impress : marking changes
-Oracle Open Office Impress : marking, see selecting
-Oracle Open Office Impress : master layouts with headers and footers
-Oracle Open Office Impress : master pages, see slide masters
-Oracle Open Office Impress : master views
-Oracle Open Office Impress : Math formula editor
-Oracle Open Office Impress : mean value lines in charts
-Oracle Open Office Impress : measurement units
-Oracle Open Office Impress : measurement units;changing on rulers
-Oracle Open Office Impress : measurement units;converting
-Oracle Open Office Impress : measurement units;selecting
-Oracle Open Office Impress : Media Player window
-Oracle Open Office Impress : menus
-Oracle Open Office Impress : menus;activating context menus
-Oracle Open Office Impress : menus;assigning macros
-Oracle Open Office Impress : menus;customizing
-Oracle Open Office Impress : merging
-Oracle Open Office Impress : merging;documents
-Oracle Open Office Impress : merging;draw objects
-Oracle Open Office Impress : META tags
-Oracle Open Office Impress : metafiles
-Oracle Open Office Impress : metafiles;converting to
-Oracle Open Office Impress : metafiles;replacing colors
-Oracle Open Office Impress : metrics
-Oracle Open Office Impress : metrics;converting
-Oracle Open Office Impress : metrics;document formatting (Writer)
-Oracle Open Office Impress : metrics;in sheets
-Oracle Open Office Impress : Microsoft Office
-Oracle Open Office Impress : Microsoft Office;Access databases (base)
-Oracle Open Office Impress : Microsoft Office;as default file format
-Oracle Open Office Impress : Microsoft Office;document import restrictions
-Oracle Open Office Impress : Microsoft Office;feature comparisons
-Oracle Open Office Impress : Microsoft Office;importing password protected files
-Oracle Open Office Impress : Microsoft Office;importing Word documents
-Oracle Open Office Impress : Microsoft Office;importing/exporting VBA code
-Oracle Open Office Impress : Microsoft Office;new users information
-Oracle Open Office Impress : Microsoft Office;opening Microsoft documents
-Oracle Open Office Impress : Microsoft Office;reassigning document types
-Oracle Open Office Impress : migrating macros (Base)
-Oracle Open Office Impress : mirroring objects
-Oracle Open Office Impress : mobile device filters
-Oracle Open Office Impress : models in XForms
-Oracle Open Office Impress : modifying, see changing
-Oracle Open Office Impress : more controls
-Oracle Open Office Impress : mosaic filter
-Oracle Open Office Impress : motion paths
-Oracle Open Office Impress : mouse
-Oracle Open Office Impress : mouse;pointers when using drag and drop
-Oracle Open Office Impress : mouse;positioning
-Oracle Open Office Impress : movies
-Oracle Open Office Impress : moving
-Oracle Open Office Impress : moving;between layers
-Oracle Open Office Impress : moving;objects in slides
-Oracle Open Office Impress : moving;tab stops on ruler
-Oracle Open Office Impress : moving;toolbars
-Oracle Open Office Impress : moving;using guide lines in presentations
-Oracle Open Office Impress : MS ADO interface (Base)
-Oracle Open Office Impress : multi-line titles in forms
-Oracle Open Office Impress : multiple documents
-Oracle Open Office Impress : multiple documents;opening
-Oracle Open Office Impress : multiple monitors
-Oracle Open Office Impress : multiple selection
-Oracle Open Office Impress : multiplying draw objects
-Oracle Open Office Impress : music
-Oracle Open Office Impress : My Documents folder
-Oracle Open Office Impress : My Documents folder;changing work directory
-Oracle Open Office Impress : My Documents folder;opening
-Oracle Open Office Impress : MySQL databases (Base)
-Oracle Open Office Impress : names
-Oracle Open Office Impress : names;multi-line titles
-Oracle Open Office Impress : names;objects
-Oracle Open Office Impress : names, see also labels/callouts
-Oracle Open Office Impress : namespace organization in XForms
-Oracle Open Office Impress : native SQL (Base)
-Oracle Open Office Impress : navigating
-Oracle Open Office Impress : navigating;in documents
-Oracle Open Office Impress : Navigation bar
-Oracle Open Office Impress : Navigation bar;controls
-Oracle Open Office Impress : Navigation bar;forms
-Oracle Open Office Impress : Navigator
-Oracle Open Office Impress : Navigator;comments
-Oracle Open Office Impress : Navigator;contents as lists
-Oracle Open Office Impress : Navigator;docking
-Oracle Open Office Impress : Navigator;presentations
-Oracle Open Office Impress : Navigator;working with
-Oracle Open Office Impress : net charts
-Oracle Open Office Impress : network identity options
-Oracle Open Office Impress : new databases
-Oracle Open Office Impress : new documents
-Oracle Open Office Impress : new lines in cells
-Oracle Open Office Impress : new windows
-Oracle Open Office Impress : non-breaking dashes
-Oracle Open Office Impress : non-breaking spaces (Writer)
-Oracle Open Office Impress : non-printing characters (Writer)
-Oracle Open Office Impress : normal view
-Oracle Open Office Impress : normal view;backgrounds
-Oracle Open Office Impress : normal view;presentations
-Oracle Open Office Impress : notes
-Oracle Open Office Impress : notes;adding to slides
-Oracle Open Office Impress : notes;default formatting
-Oracle Open Office Impress : notes;printing in presentations
-Oracle Open Office Impress : number formats
-Oracle Open Office Impress : number formats;codes
-Oracle Open Office Impress : number formats;formats
-Oracle Open Office Impress : number formats;recognition in text tables
-Oracle Open Office Impress : number of pages
-Oracle Open Office Impress : number of sheets
-Oracle Open Office Impress : number of tables
-Oracle Open Office Impress : numbering
-Oracle Open Office Impress : numbering;options
-Oracle Open Office Impress : numbering;turning off
-Oracle Open Office Impress : numbering;using automatically
-Oracle Open Office Impress : numbers
-Oracle Open Office Impress : numbers;date, time and currency formats
-Oracle Open Office Impress : numbers;decimal places (Calc)
-Oracle Open Office Impress : numerical fields in forms
-Oracle Open Office Impress : object bars
-Oracle Open Office Impress : object bars;editing glue points
-Oracle Open Office Impress : objects
-Oracle Open Office Impress : objects;aligning
-Oracle Open Office Impress : objects;always moveable (Impress/Draw)
-Oracle Open Office Impress : objects;arranging within stacks
-Oracle Open Office Impress : objects;behind object command
-Oracle Open Office Impress : objects;breaking connections
-Oracle Open Office Impress : objects;copying when moving in presentations
-Oracle Open Office Impress : objects;definition
-Oracle Open Office Impress : objects;displaying in spreadsheets
-Oracle Open Office Impress : objects;displaying in text documents
-Oracle Open Office Impress : objects;editing
-Oracle Open Office Impress : objects;effects
-Oracle Open Office Impress : objects;in front of object command
-Oracle Open Office Impress : objects;inserting from files
-Oracle Open Office Impress : objects;inserting from Gallery
-Oracle Open Office Impress : objects;inserting OLE objects
-Oracle Open Office Impress : objects;moving along paths
-Oracle Open Office Impress : objects;moving and resizing with mouse
-Oracle Open Office Impress : objects;moving in layers
-Oracle Open Office Impress : objects;moving in slides
-Oracle Open Office Impress : objects;naming
-Oracle Open Office Impress : objects;opening
-Oracle Open Office Impress : objects;properties of charts
-Oracle Open Office Impress : objects;quickly moving to
-Oracle Open Office Impress : objects;reversing
-Oracle Open Office Impress : objects;selecting
-Oracle Open Office Impress : objects;titles and descriptions
-Oracle Open Office Impress : objects;with attributes
-Oracle Open Office Impress : ODBC
-Oracle Open Office Impress : ODBC;database (Base)
-Oracle Open Office Impress : ODBC;definition
-Oracle Open Office Impress : ODF file formats
-Oracle Open Office Impress : Office
-Oracle Open Office Impress : Office;Microsoft Office and Oracle Open Office
-Oracle Open Office Impress : OLE
-Oracle Open Office Impress : OLE;definition
-Oracle Open Office Impress : OLE objects
-Oracle Open Office Impress : OLE objects;arranging within stacks
-Oracle Open Office Impress : OLE objects;captions (Writer)
-Oracle Open Office Impress : OLE objects;inserting
-Oracle Open Office Impress : OLE objects;number of
-Oracle Open Office Impress : OLE objects;protecting
-Oracle Open Office Impress : one and a half line spacing in text
-Oracle Open Office Impress : online feedback options
-Oracle Open Office Impress : online registration
-Oracle Open Office Impress : online update options
-Oracle Open Office Impress : online updates
-Oracle Open Office Impress : online updates;checking automatically
-Oracle Open Office Impress : online updates;checking manually
-Oracle Open Office Impress : Open/Save dialogs
-Oracle Open Office Impress : OpenDocument file formats
-Oracle Open Office Impress : OpenGL
-Oracle Open Office Impress : OpenGL;definition
-Oracle Open Office Impress : opening
-Oracle Open Office Impress : opening;context menus
-Oracle Open Office Impress : opening;database files
-Oracle Open Office Impress : opening;dialog settings
-Oracle Open Office Impress : opening;documents
-Oracle Open Office Impress : opening;documents from other formats
-Oracle Open Office Impress : opening;documents on WebDAV server
-Oracle Open Office Impress : opening;files with links
-Oracle Open Office Impress : opening;files, with placeholders
-Oracle Open Office Impress : opening;forms
-Oracle Open Office Impress : opening;Microsoft Office files
-Oracle Open Office Impress : opening;mobile device documents
-Oracle Open Office Impress : opening;objects
-Oracle Open Office Impress : opening;reports
-Oracle Open Office Impress : opening;several files
-Oracle Open Office Impress : opening;XForms
-Oracle Open Office Impress : operators
-Oracle Open Office Impress : operators;default filters
-Oracle Open Office Impress : optional hyphens (Writer)
-Oracle Open Office Impress : options
-Oracle Open Office Impress : options;accessibility
-Oracle Open Office Impress : options;appearance
-Oracle Open Office Impress : options;compatibility (Writer)
-Oracle Open Office Impress : options;improvement program
-Oracle Open Office Impress : options;network identity
-Oracle Open Office Impress : options;online update
-Oracle Open Office Impress : options;tools
-Oracle Open Office Impress : Oracle databases (base)
-Oracle Open Office Impress : Oracle Open Office Base data sources
-Oracle Open Office Impress : Oracle Open Office Basic scripts in HTML documents
-Oracle Open Office Impress : Oracle Open Office documents
-Oracle Open Office Impress : Oracle Open Office documents;mobile device filters
-Oracle Open Office Impress : Oracle Open Office documents;viewing and editing in Internet Explorer
-Oracle Open Office Impress : Oracle Open Office Impress instructions
-Oracle Open Office Impress : Oracle Open Office Math start
-Oracle Open Office Impress : order of chart data
-Oracle Open Office Impress : ordering
-Oracle Open Office Impress : ordering;objects
-Oracle Open Office Impress : ordering;slides
-Oracle Open Office Impress : organization charts
-Oracle Open Office Impress : organizing
-Oracle Open Office Impress : organizing;macros and scripts
-Oracle Open Office Impress : organizing;namespaces in XForms
-Oracle Open Office Impress : organizing;styles
-Oracle Open Office Impress : organizing;templates
-Oracle Open Office Impress : origin of rulers
-Oracle Open Office Impress : original size
-Oracle Open Office Impress : original size;printing in Oracle Open Office Math
-Oracle Open Office Impress : original size;restoring after cropping
-Oracle Open Office Impress : outline view
-Oracle Open Office Impress : outlines
-Oracle Open Office Impress : outlines;font effects
-Oracle Open Office Impress : outlines;outline symbols
-Oracle Open Office Impress : outlines;printing
-Oracle Open Office Impress : outlines;sending to presentations
-Oracle Open Office Impress : overwrite mode
-Oracle Open Office Impress : packages, see extensions
-Oracle Open Office Impress : page breaks
-Oracle Open Office Impress : page breaks;displaying (Calc)
-Oracle Open Office Impress : page formats
-Oracle Open Office Impress : page formats;maximizing
-Oracle Open Office Impress : page formats;restriction
-Oracle Open Office Impress : page number field
-Oracle Open Office Impress : page numbers on all slides
-Oracle Open Office Impress : page styles
-Oracle Open Office Impress : page styles;editing/applying with statusbar
-Oracle Open Office Impress : pages
-Oracle Open Office Impress : pages;backgrounds in all applications
-Oracle Open Office Impress : pages;copying
-Oracle Open Office Impress : pages;fitting to printed pages
-Oracle Open Office Impress : pages;formatting and numbering
-Oracle Open Office Impress : pages;printing page names in presentations
-Oracle Open Office Impress : pages;scaling
-Oracle Open Office Impress : pages;selecting one to print
-Oracle Open Office Impress : paint box
-Oracle Open Office Impress : paint can symbol
-Oracle Open Office Impress : pair kerning
-Oracle Open Office Impress : Palm file filters
-Oracle Open Office Impress : paper formats
-Oracle Open Office Impress : paper size warning
-Oracle Open Office Impress : paper trays
-Oracle Open Office Impress : paragraph marks
-Oracle Open Office Impress : paragraph marks;displaying (Writer)
-Oracle Open Office Impress : paragraph styles
-Oracle Open Office Impress : paragraph styles;languages
-Oracle Open Office Impress : paragraph styles;modifying basic fonts
-Oracle Open Office Impress : paragraphs
-Oracle Open Office Impress : paragraphs;alignment
-Oracle Open Office Impress : paragraphs;Asian typography
-Oracle Open Office Impress : paragraphs;defining borders
-Oracle Open Office Impress : paragraphs;hidden paragraphs (Writer)
-Oracle Open Office Impress : paragraphs;increasing indents of
-Oracle Open Office Impress : paragraphs;indents, margins and columns
-Oracle Open Office Impress : paragraphs;inserting bullets
-Oracle Open Office Impress : paragraphs;joining
-Oracle Open Office Impress : paragraphs;numbering automatically
-Oracle Open Office Impress : paragraphs;removing blank ones
-Oracle Open Office Impress : paragraphs;spacing
-Oracle Open Office Impress : paragraphs;tab stops
-Oracle Open Office Impress : parameters
-Oracle Open Office Impress : parameters;command line
-Oracle Open Office Impress : parameters;queries (Base)
-Oracle Open Office Impress : passwords for protecting contents
-Oracle Open Office Impress : pasting
-Oracle Open Office Impress : pasting;cell ranges
-Oracle Open Office Impress : pasting;cell ranges from spreadsheets
-Oracle Open Office Impress : pasting;data from text documents
-Oracle Open Office Impress : pasting;draw objects
-Oracle Open Office Impress : pasting;draw objects from other documents
-Oracle Open Office Impress : pasting;formatted/unformatted text
-Oracle Open Office Impress : pasting;from data source view
-Oracle Open Office Impress : pasting;from data sources to Oracle Open Office Calc
-Oracle Open Office Impress : pasting;pictures from other documents
-Oracle Open Office Impress : pasting;sheet areas in text documents
-Oracle Open Office Impress : pasting;slides from other presentations
-Oracle Open Office Impress : pasting;text from other documents
-Oracle Open Office Impress : pasting;to Gallery
-Oracle Open Office Impress : paths
-Oracle Open Office Impress : paths;changing work directory
-Oracle Open Office Impress : paths;defaults
-Oracle Open Office Impress : paths;moving objects along
-Oracle Open Office Impress : pattern editor
-Oracle Open Office Impress : pattern fields
-Oracle Open Office Impress : pattern fields;form functions
-Oracle Open Office Impress : patterns for objects
-Oracle Open Office Impress : PDF
-Oracle Open Office Impress : PDF;export
-Oracle Open Office Impress : PDF;PostScript to PDF converter, UNIX
-Oracle Open Office Impress : personal data input
-Oracle Open Office Impress : phonetic guide
-Oracle Open Office Impress : picklist creation
-Oracle Open Office Impress : pictures
-Oracle Open Office Impress : pictures;adding to Gallery
-Oracle Open Office Impress : pictures;arranging within stacks
-Oracle Open Office Impress : pictures;assigning macros
-Oracle Open Office Impress : pictures;backgrounds
-Oracle Open Office Impress : pictures;captions (Writer)
-Oracle Open Office Impress : pictures;changing paths
-Oracle Open Office Impress : pictures;cropping and zooming
-Oracle Open Office Impress : pictures;displaying in Calc
-Oracle Open Office Impress : pictures;displaying in Writer (Writer)
-Oracle Open Office Impress : pictures;drag and drop between documents
-Oracle Open Office Impress : pictures;drawing
-Oracle Open Office Impress : pictures;editing
-Oracle Open Office Impress : pictures;filters
-Oracle Open Office Impress : pictures;ImageMap
-Oracle Open Office Impress : pictures;inserting
-Oracle Open Office Impress : pictures;inserting automatically
-Oracle Open Office Impress : pictures;inserting from Gallery
-Oracle Open Office Impress : pictures;number of
-Oracle Open Office Impress : pictures;printing
-Oracle Open Office Impress : pictures;scaling/resizing
-Oracle Open Office Impress : pie charts
-Oracle Open Office Impress : pie charts;options
-Oracle Open Office Impress : pie charts;types
-Oracle Open Office Impress : pivot points of draw objects
-Oracle Open Office Impress : pixel editor
-Oracle Open Office Impress : pixel graphics
-Oracle Open Office Impress : pixel graphics;inserting and editing
-Oracle Open Office Impress : pixel patterns
-Oracle Open Office Impress : placeholders
-Oracle Open Office Impress : placeholders;in SQL queries
-Oracle Open Office Impress : placeholders;on opening files
-Oracle Open Office Impress : placing toolbars
-Oracle Open Office Impress : playing movies and sound files
-Oracle Open Office Impress : plotting data as charts
-Oracle Open Office Impress : plug-ins
-Oracle Open Office Impress : plug-ins;activating and deactivating
-Oracle Open Office Impress : plug-ins;definition
-Oracle Open Office Impress : plug-ins;inserting
-Oracle Open Office Impress : pocket device appliances
-Oracle Open Office Impress : Pocket PC file filters
-Oracle Open Office Impress : points
-Oracle Open Office Impress : points;adding/converting/deleting
-Oracle Open Office Impress : points;reducing editing points when snapping (Impress/Draw)
-Oracle Open Office Impress : polygon drawing
-Oracle Open Office Impress : polygons
-Oracle Open Office Impress : polygons;inserting
-Oracle Open Office Impress : polygons;intersecting/subtracting/merging
-Oracle Open Office Impress : pop-art filter
-Oracle Open Office Impress : portable document format
-Oracle Open Office Impress : positioning
-Oracle Open Office Impress : positioning;axes
-Oracle Open Office Impress : positioning;draw objects and controls
-Oracle Open Office Impress : positioning;fonts
-Oracle Open Office Impress : positioning;objects
-Oracle Open Office Impress : positioning;toolbars
-Oracle Open Office Impress : post method for form transmissions
-Oracle Open Office Impress : posterizing filter
-Oracle Open Office Impress : PostScript
-Oracle Open Office Impress : PostScript;creating files
-Oracle Open Office Impress : PostScript;PDF converter, UNIX
-Oracle Open Office Impress : PowerPoint export
-Oracle Open Office Impress : precision as shown (Calc)
-Oracle Open Office Impress : predefining fonts
-Oracle Open Office Impress : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
-Oracle Open Office Impress : presentations
-Oracle Open Office Impress : presentations;arranging slides
-Oracle Open Office Impress : presentations;creating/opening
-Oracle Open Office Impress : presentations;exiting by interaction
-Oracle Open Office Impress : presentations;exporting to HTML
-Oracle Open Office Impress : presentations;importing HTML
-Oracle Open Office Impress : presentations;inserting spreadsheet cells
-Oracle Open Office Impress : presentations;inserting spreadsheets
-Oracle Open Office Impress : presentations;live on the Internet
-Oracle Open Office Impress : presentations;navigating
-Oracle Open Office Impress : presentations;numbering slides in
-Oracle Open Office Impress : presentations;ordering of effects
-Oracle Open Office Impress : presentations;print menu
-Oracle Open Office Impress : presentations;printing
-Oracle Open Office Impress : presentations;rehearse timings
-Oracle Open Office Impress : presentations;saving
-Oracle Open Office Impress : presentations;saving automatically
-Oracle Open Office Impress : presentations;saving in other formats
-Oracle Open Office Impress : presentations;sending as e-mail
-Oracle Open Office Impress : presentations;settings for
-Oracle Open Office Impress : presentations;shortcut keys
-Oracle Open Office Impress : presentations;starting
-Oracle Open Office Impress : presentations;starting with wizard
-Oracle Open Office Impress : presentations;window / full screen
-Oracle Open Office Impress : presentations;wizards
-Oracle Open Office Impress : Presenter Console shortcuts
-Oracle Open Office Impress : press buttons, see push buttons
-Oracle Open Office Impress : previews
-Oracle Open Office Impress : previews;fonts lists
-Oracle Open Office Impress : primary keys
-Oracle Open Office Impress : primary keys;defining
-Oracle Open Office Impress : primary keys;design view
-Oracle Open Office Impress : primary keys;inserting (Base)
-Oracle Open Office Impress : print area selection
-Oracle Open Office Impress : printer metrics for document formatting (Writer)
-Oracle Open Office Impress : printers
-Oracle Open Office Impress : printers;adding, UNIX
-Oracle Open Office Impress : printers;choosing
-Oracle Open Office Impress : printers;default printer
-Oracle Open Office Impress : printers;faxes under UNIX
-Oracle Open Office Impress : printers;maximum page formats
-Oracle Open Office Impress : printers;paper trays
-Oracle Open Office Impress : printers;properties
-Oracle Open Office Impress : printing
-Oracle Open Office Impress : printing;black and white
-Oracle Open Office Impress : printing;brochures
-Oracle Open Office Impress : printing;colors in grayscale
-Oracle Open Office Impress : printing;comments
-Oracle Open Office Impress : printing;copies
-Oracle Open Office Impress : printing;creating individual jobs
-Oracle Open Office Impress : printing;dates in presentations
-Oracle Open Office Impress : printing;directly
-Oracle Open Office Impress : printing;documents
-Oracle Open Office Impress : printing;drawings defaults
-Oracle Open Office Impress : printing;elements in text documents
-Oracle Open Office Impress : printing;faster
-Oracle Open Office Impress : printing;fitting to pages in Oracle Open Office Math
-Oracle Open Office Impress : printing;fitting to pages in presentations
-Oracle Open Office Impress : printing;fitting to paper
-Oracle Open Office Impress : printing;formulas in Oracle Open Office Math
-Oracle Open Office Impress : printing;hidden pages of presentations
-Oracle Open Office Impress : printing;in original size in Oracle Open Office Math
-Oracle Open Office Impress : printing;left/right pages
-Oracle Open Office Impress : printing;presentations
-Oracle Open Office Impress : printing;queries (Base)
-Oracle Open Office Impress : printing;scaling in Oracle Open Office Math
-Oracle Open Office Impress : printing;selections
-Oracle Open Office Impress : printing;text always in black
-Oracle Open Office Impress : printing;text in reverse order
-Oracle Open Office Impress : printing;tiling pages in presentations
-Oracle Open Office Impress : printing;transparencies
-Oracle Open Office Impress : printing;warnings
-Oracle Open Office Impress : printing;without scaling in presentations
-Oracle Open Office Impress : printing speed
-Oracle Open Office Impress : programming
-Oracle Open Office Impress : programming;Oracle Open Office
-Oracle Open Office Impress : programming;scripting
-Oracle Open Office Impress : programs run by mouse click in presentations
-Oracle Open Office Impress : properties
-Oracle Open Office Impress : properties;charts
-Oracle Open Office Impress : properties;fields in databases
-Oracle Open Office Impress : properties;files
-Oracle Open Office Impress : properties;form controls
-Oracle Open Office Impress : properties;forms
-Oracle Open Office Impress : properties;printers
-Oracle Open Office Impress : properties;smooth lines in line charts/XY charts
-Oracle Open Office Impress : protected contents
-Oracle Open Office Impress : protected dashes
-Oracle Open Office Impress : protected database tables
-Oracle Open Office Impress : protected documents
-Oracle Open Office Impress : protected spaces
-Oracle Open Office Impress : protected spaces;inserting
-Oracle Open Office Impress : protected spaces;showing (Writer)
-Oracle Open Office Impress : protecting
-Oracle Open Office Impress : protecting;contents
-Oracle Open Office Impress : protecting;recorded changes
-Oracle Open Office Impress : proxy settings
-Oracle Open Office Impress : push buttons
-Oracle Open Office Impress : push buttons;adding to documents
-Oracle Open Office Impress : push buttons;creating
-Oracle Open Office Impress : pyramids
-Oracle Open Office Impress : queries
-Oracle Open Office Impress : queries;copying (Base)
-Oracle Open Office Impress : queries;creating in design view (Base)
-Oracle Open Office Impress : queries;creating in SQL view
-Oracle Open Office Impress : queries;defining (Base)
-Oracle Open Office Impress : queries;deleting table links (Base)
-Oracle Open Office Impress : queries;editing in data source view
-Oracle Open Office Impress : queries;formulating filter conditions (Base)
-Oracle Open Office Impress : queries;joining tables (Base)
-Oracle Open Office Impress : queries;missing elements (Base)
-Oracle Open Office Impress : queries;overview (Base)
-Oracle Open Office Impress : queries;parameter queries (Base)
-Oracle Open Office Impress : queries;printing (Base)
-Oracle Open Office Impress : Query Wizard (Base)
-Oracle Open Office Impress : Quickstarter
-Oracle Open Office Impress : quotation marks
-Oracle Open Office Impress : quotation marks;replacing
-Oracle Open Office Impress : quotes
-Oracle Open Office Impress : quotes;custom
-Oracle Open Office Impress : radar charts, see net charts
-Oracle Open Office Impress : radio button creation
-Oracle Open Office Impress : read-only documents
-Oracle Open Office Impress : read-only documents;cursor
-Oracle Open Office Impress : read-only documents;database tables on/off
-Oracle Open Office Impress : read-only documents;editing
-Oracle Open Office Impress : read-only documents;opening documents as
-Oracle Open Office Impress : read-only items in Data Navigator
-Oracle Open Office Impress : recognizing URLs automatically
-Oracle Open Office Impress : recording
-Oracle Open Office Impress : recording;changes
-Oracle Open Office Impress : recording;display times for slides
-Oracle Open Office Impress : recording;macros
-Oracle Open Office Impress : records
-Oracle Open Office Impress : records;inserting comments
-Oracle Open Office Impress : records;protecting
-Oracle Open Office Impress : records;saving
-Oracle Open Office Impress : records;searching in databases
-Oracle Open Office Impress : rectangles
-Oracle Open Office Impress : rectangles with round corners
-Oracle Open Office Impress : recursions in spreadsheets
-Oracle Open Office Impress : redo command
-Oracle Open Office Impress : reduced printing
-Oracle Open Office Impress : reference lines
-Oracle Open Office Impress : references
-Oracle Open Office Impress : references;displaying in color (Calc)
-Oracle Open Office Impress : references;expanding (Calc)
-Oracle Open Office Impress : references;iterative (Calc)
-Oracle Open Office Impress : register-true
-Oracle Open Office Impress : register-true;definition
-Oracle Open Office Impress : registering
-Oracle Open Office Impress : registering;address books
-Oracle Open Office Impress : registering;databases (Base)
-Oracle Open Office Impress : registering;Oracle Open Office
-Oracle Open Office Impress : regression curves in charts
-Oracle Open Office Impress : regular expressions
-Oracle Open Office Impress : regular expressions;list of
-Oracle Open Office Impress : regular expressions;opening files
-Oracle Open Office Impress : rehearse timings
-Oracle Open Office Impress : relational databases (Base)
-Oracle Open Office Impress : relations
-Oracle Open Office Impress : relations;creating and deleting (Base)
-Oracle Open Office Impress : relations;joining tables (Base)
-Oracle Open Office Impress : relations;properties (Base)
-Oracle Open Office Impress : relative hyperlinks
-Oracle Open Office Impress : relative saving of URLs
-Oracle Open Office Impress : reloading
-Oracle Open Office Impress : reloading;documents
-Oracle Open Office Impress : reloading;HTML documents, automatically
-Oracle Open Office Impress : remarks, see also comments
-Oracle Open Office Impress : remote configurations
-Oracle Open Office Impress : remove noise filter
-Oracle Open Office Impress : removing
-Oracle Open Office Impress : removing;bullets and numbering
-Oracle Open Office Impress : removing;form filters
-Oracle Open Office Impress : removing, see also deleting
-Oracle Open Office Impress : renaming layers
-Oracle Open Office Impress : reorganizing charts
-Oracle Open Office Impress : repeating
-Oracle Open Office Impress : repeating;commands
-Oracle Open Office Impress : replacement options
-Oracle Open Office Impress : replacement table
-Oracle Open Office Impress : replacing
-Oracle Open Office Impress : replacing;AutoCorrect function
-Oracle Open Office Impress : replacing;colors in bitmaps
-Oracle Open Office Impress : replacing;dashes
-Oracle Open Office Impress : replacing;tab stops (regular expressions)
-Oracle Open Office Impress : Report Builder
-Oracle Open Office Impress : reports
-Oracle Open Office Impress : reports;creating
-Oracle Open Office Impress : reports;error reports
-Oracle Open Office Impress : reports;opening and editing
-Oracle Open Office Impress : reports;templates
-Oracle Open Office Impress : resetting
-Oracle Open Office Impress : resetting;templates
-Oracle Open Office Impress : resizing
-Oracle Open Office Impress : resizing;objects, by mouse
-Oracle Open Office Impress : resizing, see also scaling/zooming
-Oracle Open Office Impress : resolution when printing bitmaps
-Oracle Open Office Impress : restoring
-Oracle Open Office Impress : restoring;default formatting
-Oracle Open Office Impress : restoring;editing
-Oracle Open Office Impress : reversing objects
-Oracle Open Office Impress : reversing printing order
-Oracle Open Office Impress : review function
-Oracle Open Office Impress : review function;accepting or rejecting changes
-Oracle Open Office Impress : review function;comparing documents
-Oracle Open Office Impress : review function;protecting records
-Oracle Open Office Impress : review function;recording changes example
-Oracle Open Office Impress : rich text control
-Oracle Open Office Impress : right alignment of paragraphs
-Oracle Open Office Impress : right joins (Base)
-Oracle Open Office Impress : right-to-left text
-Oracle Open Office Impress : rotating
-Oracle Open Office Impress : rotating;3D text
-Oracle Open Office Impress : rotating;draw objects
-Oracle Open Office Impress : rotation mode
-Oracle Open Office Impress : round corners
-Oracle Open Office Impress : rounding precision (Calc)
-Oracle Open Office Impress : row headers
-Oracle Open Office Impress : row headers;displaying (Calc)
-Oracle Open Office Impress : row headers;highlighting (Calc)
-Oracle Open Office Impress : rows
-Oracle Open Office Impress : rows;inserting
-Oracle Open Office Impress : rulers
-Oracle Open Office Impress : rulers;default settings
-Oracle Open Office Impress : rulers;in presentations
-Oracle Open Office Impress : rulers;measurement units
-Oracle Open Office Impress : rulers;visible in presentations
-Oracle Open Office Impress : running macros/programs in presentations
-Oracle Open Office Impress : running slide shows
-Oracle Open Office Impress : samples and templates
-Oracle Open Office Impress : saving
-Oracle Open Office Impress : saving;as HTML
-Oracle Open Office Impress : saving;default file formats
-Oracle Open Office Impress : saving;dialog settings
-Oracle Open Office Impress : saving;documents
-Oracle Open Office Impress : saving;documents for mobile devices
-Oracle Open Office Impress : saving;documents in other formats
-Oracle Open Office Impress : saving;documents, automatically
-Oracle Open Office Impress : saving;in Microsoft Office file format
-Oracle Open Office Impress : saving;options
-Oracle Open Office Impress : saving;templates
-Oracle Open Office Impress : saving;to XML
-Oracle Open Office Impress : saving;VBA code in Microsoft Office documents
-Oracle Open Office Impress : saving;with password by default
-Oracle Open Office Impress : saving as command
-Oracle Open Office Impress : saving as command;precautions
-Oracle Open Office Impress : scaling
-Oracle Open Office Impress : scaling;axes
-Oracle Open Office Impress : scaling;font sizes in user interface
-Oracle Open Office Impress : scaling;objects
-Oracle Open Office Impress : scaling;pictures
-Oracle Open Office Impress : scaling;printing in Oracle Open Office Math
-Oracle Open Office Impress : scaling;text in charts
-Oracle Open Office Impress : scaling;when printing presentations
-Oracle Open Office Impress : scaling, see also zooming
-Oracle Open Office Impress : scatter charts
-Oracle Open Office Impress : screen
-Oracle Open Office Impress : screen;full screen views
-Oracle Open Office Impress : screen;scaling
-Oracle Open Office Impress : screen magnifiers
-Oracle Open Office Impress : screen readers
-Oracle Open Office Impress : script organization
-Oracle Open Office Impress : scrollbars
-Oracle Open Office Impress : scrollbars;controls
-Oracle Open Office Impress : scrollbars;displaying (Calc)
-Oracle Open Office Impress : scrollbars;horizontal and vertical (Writer)
-Oracle Open Office Impress : search criteria for database functions in cells
-Oracle Open Office Impress : search engines
-Oracle Open Office Impress : search engines;definition
-Oracle Open Office Impress : search engines;selecting
-Oracle Open Office Impress : searching
-Oracle Open Office Impress : searching;all sheets
-Oracle Open Office Impress : searching;databases
-Oracle Open Office Impress : searching;form filters
-Oracle Open Office Impress : searching;Internet
-Oracle Open Office Impress : searching;tables and forms
-Oracle Open Office Impress : secondary axes in charts
-Oracle Open Office Impress : sections
-Oracle Open Office Impress : sections;backgrounds
-Oracle Open Office Impress : sectors of circles/ellipses
-Oracle Open Office Impress : security
-Oracle Open Office Impress : security;digital signatures
-Oracle Open Office Impress : security;options for documents with macros
-Oracle Open Office Impress : security;protecting contents
-Oracle Open Office Impress : security;security levels for macros
-Oracle Open Office Impress : security;warning dialogs with macros
-Oracle Open Office Impress : segments of circles/ellipses
-Oracle Open Office Impress : selecting
-Oracle Open Office Impress : selecting;controls
-Oracle Open Office Impress : selecting;hidden objects
-Oracle Open Office Impress : selecting;layers
-Oracle Open Office Impress : selecting;measurement units
-Oracle Open Office Impress : selecting;objects
-Oracle Open Office Impress : selecting;print areas
-Oracle Open Office Impress : selecting;several files
-Oracle Open Office Impress : selection clipboard
-Oracle Open Office Impress : selection frames
-Oracle Open Office Impress : selection modes in text
-Oracle Open Office Impress : sending
-Oracle Open Office Impress : sending;AutoAbstract function in presentations
-Oracle Open Office Impress : sending;documents as e-mail
-Oracle Open Office Impress : sending;documents as faxes
-Oracle Open Office Impress : separator lines
-Oracle Open Office Impress : separator lines;defining
-Oracle Open Office Impress : separators
-Oracle Open Office Impress : separators;conditional
-Oracle Open Office Impress : Server Side ImageMap
-Oracle Open Office Impress : settings
-Oracle Open Office Impress : settings;printers
-Oracle Open Office Impress : settings;program configuration
-Oracle Open Office Impress : settings;proxies
-Oracle Open Office Impress : settings;tracking changes
-Oracle Open Office Impress : settings;views
-Oracle Open Office Impress : SGML
-Oracle Open Office Impress : SGML;definition
-Oracle Open Office Impress : shadows
-Oracle Open Office Impress : shadows;areas
-Oracle Open Office Impress : shadows;borders
-Oracle Open Office Impress : shadows;characters
-Oracle Open Office Impress : shadows;characters, using context menu
-Oracle Open Office Impress : sharing documents
-Oracle Open Office Impress : sharpening filter
-Oracle Open Office Impress : shearing objects
-Oracle Open Office Impress : sheet tabs
-Oracle Open Office Impress : sheet tabs;displaying
-Oracle Open Office Impress : sheets
-Oracle Open Office Impress : sheets;searching all
-Oracle Open Office Impress : shells
-Oracle Open Office Impress : shortcut keys
-Oracle Open Office Impress : shortcut keys;assigning macros
-Oracle Open Office Impress : shortcut keys;charts
-Oracle Open Office Impress : shortcut keys;general
-Oracle Open Office Impress : shortcut keys;in databases
-Oracle Open Office Impress : shortcut keys;in drawings
-Oracle Open Office Impress : shortcut keys;in presentations
-Oracle Open Office Impress : shortcut keys;Oracle Open Office accessibility
-Oracle Open Office Impress : showing
-Oracle Open Office Impress : showing;changes
-Oracle Open Office Impress : showing;docked windows
-Oracle Open Office Impress : showing;drawings and controls (Writer)
-Oracle Open Office Impress : showing;guides
-Oracle Open Office Impress : showing;hidden layers
-Oracle Open Office Impress : showing;hidden slides
-Oracle Open Office Impress : showing;levels
-Oracle Open Office Impress : showing;live presentations on the Internet
-Oracle Open Office Impress : showing;slide shows
-Oracle Open Office Impress : showing;subpoints
-Oracle Open Office Impress : showing;toolbars
-Oracle Open Office Impress : sign conversion to curves
-Oracle Open Office Impress : signing documents with digital signatures
-Oracle Open Office Impress : similarity search
-Oracle Open Office Impress : simple handles (Writer)
-Oracle Open Office Impress : simplified Chinese
-Oracle Open Office Impress : simplified Chinese;translating to traditional Chinese
-Oracle Open Office Impress : single sign on options
-Oracle Open Office Impress : single-line spacing in text
-Oracle Open Office Impress : sizes
-Oracle Open Office Impress : sizes;draw objects
-Oracle Open Office Impress : sizes;pictures
-Oracle Open Office Impress : skewing draw objects
-Oracle Open Office Impress : slanting draw objects
-Oracle Open Office Impress : slanting objects
-Oracle Open Office Impress : slide designs
-Oracle Open Office Impress : slide layouts
-Oracle Open Office Impress : slide master view
-Oracle Open Office Impress : slide masters
-Oracle Open Office Impress : slide masters;changing backgrounds
-Oracle Open Office Impress : slide masters;designing
-Oracle Open Office Impress : slide masters;headers and footers
-Oracle Open Office Impress : slide numbers
-Oracle Open Office Impress : slide numbers on all slides
-Oracle Open Office Impress : slide shows
-Oracle Open Office Impress : slide shows;custom
-Oracle Open Office Impress : slide shows;settings for
-Oracle Open Office Impress : slide shows;starting
-Oracle Open Office Impress : slide transitions
-Oracle Open Office Impress : slide transitions;applying effects
-Oracle Open Office Impress : slide transitions;automatic
-Oracle Open Office Impress : slide transitions;manual
-Oracle Open Office Impress : slide transitions;sounds
-Oracle Open Office Impress : slides
-Oracle Open Office Impress : slides;arranging
-Oracle Open Office Impress : slides;backgrounds
-Oracle Open Office Impress : slides;changing backgrounds
-Oracle Open Office Impress : slides;copying between documents
-Oracle Open Office Impress : slides;deleting
-Oracle Open Office Impress : slides;expanding
-Oracle Open Office Impress : slides;formatting
-Oracle Open Office Impress : slides;headers and footers
-Oracle Open Office Impress : slides;inserting
-Oracle Open Office Impress : slides;inserting as links
-Oracle Open Office Impress : slides;inserting speaker notes
-Oracle Open Office Impress : slides;page numbers
-Oracle Open Office Impress : slides;printing
-Oracle Open Office Impress : small capitals
-Oracle Open Office Impress : small icons
-Oracle Open Office Impress : smart tag configuration
-Oracle Open Office Impress : smooth scrolling (Writer)
-Oracle Open Office Impress : smoothing filter
-Oracle Open Office Impress : snap grid defaults (Writer/Calc)
-Oracle Open Office Impress : snap lines, see also guides
-Oracle Open Office Impress : snap points
-Oracle Open Office Impress : snap points;editing
-Oracle Open Office Impress : snap points;inserting
-Oracle Open Office Impress : snapping in presentations and drawings
-Oracle Open Office Impress : solarization filter
-Oracle Open Office Impress : sort lists
-Oracle Open Office Impress : sort lists;copying to in Calc
-Oracle Open Office Impress : sorting
-Oracle Open Office Impress : sorting;data in forms
-Oracle Open Office Impress : sorting;databases
-Oracle Open Office Impress : sound files
-Oracle Open Office Impress : sounds
-Oracle Open Office Impress : sounds;for effects
-Oracle Open Office Impress : sounds;formats
-Oracle Open Office Impress : sounds;on slide transitions
-Oracle Open Office Impress : spaces
-Oracle Open Office Impress : spaces;displaying (Writer)
-Oracle Open Office Impress : spaces;ignoring double
-Oracle Open Office Impress : spaces;inserting protected spaces
-Oracle Open Office Impress : spaces;showing protected spaces (Writer)
-Oracle Open Office Impress : spacing
-Oracle Open Office Impress : spacing;between paragraphs in footnotes
-Oracle Open Office Impress : spacing;font effects
-Oracle Open Office Impress : spacing;lines and paragraphs
-Oracle Open Office Impress : spacing;tab stops in text documents
-Oracle Open Office Impress : spacing;tabs in presentations
-Oracle Open Office Impress : spadmin
-Oracle Open Office Impress : speaker notes
-Oracle Open Office Impress : speaker notes;defaults
-Oracle Open Office Impress : speaker notes;inserting
-Oracle Open Office Impress : special characters
-Oracle Open Office Impress : speech bubbles
-Oracle Open Office Impress : speed of printing
-Oracle Open Office Impress : spellcheck
-Oracle Open Office Impress : spellcheck;activating for a language
-Oracle Open Office Impress : spellcheck;context menus
-Oracle Open Office Impress : spellcheck;default languages
-Oracle Open Office Impress : spellcheck;dialog
-Oracle Open Office Impress : spellcheck;dictionary of exceptions
-Oracle Open Office Impress : spellcheck;ignore list
-Oracle Open Office Impress : spheres
-Oracle Open Office Impress : spin button creation
-Oracle Open Office Impress : splitting
-Oracle Open Office Impress : splitting;combinations
-Oracle Open Office Impress : splitting;curves
-Oracle Open Office Impress : spoolfiles with Xprinter
-Oracle Open Office Impress : spreadsheets
-Oracle Open Office Impress : spreadsheets;as databases (base)
-Oracle Open Office Impress : spreadsheets;copying areas to text documents
-Oracle Open Office Impress : spreadsheets;creating/opening
-Oracle Open Office Impress : spreadsheets;in presentations
-Oracle Open Office Impress : spreadsheets;inserting charts
-Oracle Open Office Impress : spreadsheets;inserting database records
-Oracle Open Office Impress : spreadsheets;printing
-Oracle Open Office Impress : spreadsheets;saving
-Oracle Open Office Impress : spreadsheets;saving automatically
-Oracle Open Office Impress : spreadsheets;saving in other formats
-Oracle Open Office Impress : spreadsheets;sending as e-mail
-Oracle Open Office Impress : SQL
-Oracle Open Office Impress : SQL;definition
-Oracle Open Office Impress : SQL;DISTINCT parameter
-Oracle Open Office Impress : SQL;executing SQL commands
-Oracle Open Office Impress : SQL;executing SQL statements (Base)
-Oracle Open Office Impress : SQL;queries (Base)
-Oracle Open Office Impress : square drawings
-Oracle Open Office Impress : standard bar on/off
-Oracle Open Office Impress : standard deviation in charts
-Oracle Open Office Impress : standard filters in databases
-Oracle Open Office Impress : standard printer under UNIX
-Oracle Open Office Impress : start center
-Oracle Open Office Impress : start parameters
-Oracle Open Office Impress : starting
-Oracle Open Office Impress : starting;always with the current slide
-Oracle Open Office Impress : starting;custom slide shows
-Oracle Open Office Impress : starting;slide shows
-Oracle Open Office Impress : statistics in charts
-Oracle Open Office Impress : status bar on/off
-Oracle Open Office Impress : stickers
-Oracle Open Office Impress : stock charts
-Oracle Open Office Impress : strikethrough
-Oracle Open Office Impress : strikethrough;characters
-Oracle Open Office Impress : strikethrough;font effects
-Oracle Open Office Impress : styles
-Oracle Open Office Impress : styles;'changed' message
-Oracle Open Office Impress : styles;arrow and line styles
-Oracle Open Office Impress : styles;copying between documents
-Oracle Open Office Impress : styles;keyboard shortcuts
-Oracle Open Office Impress : styles;organizing
-Oracle Open Office Impress : styles;printing styles used in a document
-Oracle Open Office Impress : styles;replacing automatically
-Oracle Open Office Impress : Styles and Formatting window
-Oracle Open Office Impress : Styles and Formatting window;docking
-Oracle Open Office Impress : Styles and Formatting window;graphics documents
-Oracle Open Office Impress : subforms
-Oracle Open Office Impress : subforms;creating
-Oracle Open Office Impress : subforms;description
-Oracle Open Office Impress : submitting forms
-Oracle Open Office Impress : subpoints
-Oracle Open Office Impress : subpoints;hiding
-Oracle Open Office Impress : subpoints;showing
-Oracle Open Office Impress : subtracting polygons
-Oracle Open Office Impress : suffixes in file formats
-Oracle Open Office Impress : summary slide
-Oracle Open Office Impress : support on the Web
-Oracle Open Office Impress : synchronizing
-Oracle Open Office Impress : synchronizing;labels and business cards
-Oracle Open Office Impress : synchronizing;Pocket PC and Oracle Open Office formats
-Oracle Open Office Impress : system address book registration
-Oracle Open Office Impress : tab stops
-Oracle Open Office Impress : tab stops;displaying (Writer)
-Oracle Open Office Impress : tab stops;inserting and editing
-Oracle Open Office Impress : tab stops;regular expressions
-Oracle Open Office Impress : tab stops;setting in sheets
-Oracle Open Office Impress : tab stops;settings
-Oracle Open Office Impress : tab stops;spacing in presentations
-Oracle Open Office Impress : tab stops;spacing in text documents
-Oracle Open Office Impress : table controls
-Oracle Open Office Impress : table controls;form functions
-Oracle Open Office Impress : table controls;keyboard-only edit mode
-Oracle Open Office Impress : table controls;properties
-Oracle Open Office Impress : table views of databases
-Oracle Open Office Impress : Table Wizard (Base)
-Oracle Open Office Impress : tables
-Oracle Open Office Impress : tables;inserting line breaks
-Oracle Open Office Impress : tables in databases
-Oracle Open Office Impress : tables in databases;access rights to (Base)
-Oracle Open Office Impress : tables in databases;adding to queries
-Oracle Open Office Impress : tables in databases;browsing and editing
-Oracle Open Office Impress : tables in databases;copying database tables (Base)
-Oracle Open Office Impress : tables in databases;creating
-Oracle Open Office Impress : tables in databases;creating in design view (manually)
-Oracle Open Office Impress : tables in databases;importing text formats (Base)
-Oracle Open Office Impress : tables in databases;joining for queries (Base)
-Oracle Open Office Impress : tables in databases;printing queries (Base)
-Oracle Open Office Impress : tables in databases;relations (Base)
-Oracle Open Office Impress : tables in databases;searching
-Oracle Open Office Impress : tables in spreadsheets
-Oracle Open Office Impress : tables in spreadsheets;copying data to other applications
-Oracle Open Office Impress : tables in spreadsheets;defining borders
-Oracle Open Office Impress : tables in spreadsheets;value highlighting
-Oracle Open Office Impress : tables in text
-Oracle Open Office Impress : tables in text;captions
-Oracle Open Office Impress : tables in text;creating automatically
-Oracle Open Office Impress : tables in text;default settings
-Oracle Open Office Impress : tables in text;defining borders
-Oracle Open Office Impress : tables in text;displaying
-Oracle Open Office Impress : tables in text;printing
-Oracle Open Office Impress : tabs
-Oracle Open Office Impress : tabs;displaying sheet tabs
-Oracle Open Office Impress : tags
-Oracle Open Office Impress : tags;definition
-Oracle Open Office Impress : tags;META tags
-Oracle Open Office Impress : task pane
-Oracle Open Office Impress : templates
-Oracle Open Office Impress : templates;agendas
-Oracle Open Office Impress : templates;changing basic fonts
-Oracle Open Office Impress : templates;database reports
-Oracle Open Office Impress : templates;deleting
-Oracle Open Office Impress : templates;editing and saving
-Oracle Open Office Impress : templates;faxes
-Oracle Open Office Impress : templates;importing and exporting
-Oracle Open Office Impress : templates;letters
-Oracle Open Office Impress : templates;new documents from templates
-Oracle Open Office Impress : templates;opening documents with
-Oracle Open Office Impress : templates;organizing
-Oracle Open Office Impress : terminology
-Oracle Open Office Impress : terminology;general glossary
-Oracle Open Office Impress : terminology;Internet glossary
-Oracle Open Office Impress : testing XML filters
-Oracle Open Office Impress : text
-Oracle Open Office Impress : text;animating
-Oracle Open Office Impress : text;Asian layout
-Oracle Open Office Impress : text;bold
-Oracle Open Office Impress : text;coloring
-Oracle Open Office Impress : text;converting to curves
-Oracle Open Office Impress : text;copying by drag and drop
-Oracle Open Office Impress : text;CTL languages
-Oracle Open Office Impress : text;double-clicking to edit
-Oracle Open Office Impress : text;drawing pictures
-Oracle Open Office Impress : text;font effects
-Oracle Open Office Impress : text;font sizes
-Oracle Open Office Impress : text;font styles
-Oracle Open Office Impress : text;fonts and formats
-Oracle Open Office Impress : text;Fontwork icons
-Oracle Open Office Impress : text;hyperlinks
-Oracle Open Office Impress : text;inserting special characters
-Oracle Open Office Impress : text;italics
-Oracle Open Office Impress : text;kerning
-Oracle Open Office Impress : text;language selection
-Oracle Open Office Impress : text;line spacing
-Oracle Open Office Impress : text;overwriting or inserting
-Oracle Open Office Impress : text;printing in black
-Oracle Open Office Impress : text;replacing with format
-Oracle Open Office Impress : text;selection modes
-Oracle Open Office Impress : text;shadowed
-Oracle Open Office Impress : text;text/draw objects
-Oracle Open Office Impress : text;toolbar
-Oracle Open Office Impress : text attributes
-Oracle Open Office Impress : text attributes;hyperlinks
-Oracle Open Office Impress : text attributes;undoing
-Oracle Open Office Impress : text boxes
-Oracle Open Office Impress : text boxes;form functions
-Oracle Open Office Impress : text boxes;positioning
-Oracle Open Office Impress : text breaks in cells
-Oracle Open Office Impress : text colors for better accessibility
-Oracle Open Office Impress : text databases (Base)
-Oracle Open Office Impress : text documents
-Oracle Open Office Impress : text documents;creating/opening
-Oracle Open Office Impress : text documents;importing/exporting
-Oracle Open Office Impress : text documents;inserting in slides
-Oracle Open Office Impress : text documents;inserting spreadsheet cells
-Oracle Open Office Impress : text documents;print settings
-Oracle Open Office Impress : text documents;printing
-Oracle Open Office Impress : text documents;saving
-Oracle Open Office Impress : text documents;saving automatically
-Oracle Open Office Impress : text documents;saving in other formats
-Oracle Open Office Impress : text documents;sending as e-mail
-Oracle Open Office Impress : text effects
-Oracle Open Office Impress : text entry mode for draw objects
-Oracle Open Office Impress : text flow
-Oracle Open Office Impress : text flow;in cells
-Oracle Open Office Impress : text formats
-Oracle Open Office Impress : text formats;databases
-Oracle Open Office Impress : text formats;pasting
-Oracle Open Office Impress : text frames
-Oracle Open Office Impress : text input fields
-Oracle Open Office Impress : text layout for special languages
-Oracle Open Office Impress : text objects
-Oracle Open Office Impress : text objects;alignment
-Oracle Open Office Impress : text objects;draw functions
-Oracle Open Office Impress : text objects;fonts
-Oracle Open Office Impress : text objects;in presentations and drawings
-Oracle Open Office Impress : text overflow in spreadsheet cells
-Oracle Open Office Impress : text scaling in charts
-Oracle Open Office Impress : text, see also text documents, paragraphs and characters
-Oracle Open Office Impress : TextArt, see Fontwork
-Oracle Open Office Impress : textures
-Oracle Open Office Impress : textures;inserting from Gallery
-Oracle Open Office Impress : textures;on chart bars
-Oracle Open Office Impress : Thai
-Oracle Open Office Impress : Thai;entering text
-Oracle Open Office Impress : Thai;language settings
-Oracle Open Office Impress : thesaurus
-Oracle Open Office Impress : thesaurus;activating for a language
-Oracle Open Office Impress : ticker text
-Oracle Open Office Impress : tiled printing of slides
-Oracle Open Office Impress : time and date on all slides
-Oracle Open Office Impress : time fields
-Oracle Open Office Impress : time fields;form functions
-Oracle Open Office Impress : times
-Oracle Open Office Impress : times;fixed
-Oracle Open Office Impress : times;inserting when printing presentations
-Oracle Open Office Impress : times;variable
-Oracle Open Office Impress : times, formats
-Oracle Open Office Impress : timings
-Oracle Open Office Impress : timings;rehearse timings
-Oracle Open Office Impress : tips
-Oracle Open Office Impress : tips;extended tips in Help
-Oracle Open Office Impress : title rows
-Oracle Open Office Impress : title rows;printing in Oracle Open Office Math
-Oracle Open Office Impress : titles
-Oracle Open Office Impress : titles;alignment (charts)
-Oracle Open Office Impress : titles;changing
-Oracle Open Office Impress : titles;editing in charts
-Oracle Open Office Impress : titles;font effects
-Oracle Open Office Impress : titles;formatting automatically
-Oracle Open Office Impress : titles;formatting charts
-Oracle Open Office Impress : titles;objects
-Oracle Open Office Impress : toolbars
-Oracle Open Office Impress : toolbars;3D objects
-Oracle Open Office Impress : toolbars;adding buttons
-Oracle Open Office Impress : toolbars;curves
-Oracle Open Office Impress : toolbars;docking/undocking
-Oracle Open Office Impress : toolbars;ellipses
-Oracle Open Office Impress : toolbars;Form Navigation bar
-Oracle Open Office Impress : toolbars;viewing/closing
-Oracle Open Office Impress : tools bar
-Oracle Open Office Impress : tooltips
-Oracle Open Office Impress : tooltips;extended tips
-Oracle Open Office Impress : tooltips;help
-Oracle Open Office Impress : torus
-Oracle Open Office Impress : traditional Chinese
-Oracle Open Office Impress : traditional Chinese;translating to simplified chinese
-Oracle Open Office Impress : transition effects
-Oracle Open Office Impress : transparency
-Oracle Open Office Impress : transparency;adjusting
-Oracle Open Office Impress : transparency;areas
-Oracle Open Office Impress : transparency;of objects
-Oracle Open Office Impress : transparency;off for faster printing
-Oracle Open Office Impress : transparency;saving
-Oracle Open Office Impress : tree view of Help
-Oracle Open Office Impress : trend lines in charts
-Oracle Open Office Impress : typefaces
-Oracle Open Office Impress : typefaces;adding under UNIX
-Oracle Open Office Impress : typefaces;formats
-Oracle Open Office Impress : typographical quotes in Oracle Open Office Writer
-Oracle Open Office Impress : typography
-Oracle Open Office Impress : typography;Asian
-Oracle Open Office Impress : underlining
-Oracle Open Office Impress : underlining;AutoFormat function
-Oracle Open Office Impress : underlining;characters
-Oracle Open Office Impress : underlining;text
-Oracle Open Office Impress : underlying objects
-Oracle Open Office Impress : undocking windows
-Oracle Open Office Impress : undoing
-Oracle Open Office Impress : undoing;direct formatting
-Oracle Open Office Impress : undoing;editing
-Oracle Open Office Impress : undoing;number of steps
-Oracle Open Office Impress : ungrouping groups
-Oracle Open Office Impress : units
-Oracle Open Office Impress : units;converting
-Oracle Open Office Impress : units;measurement units
-Oracle Open Office Impress : unlocking layers
-Oracle Open Office Impress : UNO components
-Oracle Open Office Impress : UNO components;Extension Manager
-Oracle Open Office Impress : UNO components;integrating new
-Oracle Open Office Impress : update options
-Oracle Open Office Impress : updates
-Oracle Open Office Impress : updates;checking automatically
-Oracle Open Office Impress : updates;checking manually
-Oracle Open Office Impress : updating
-Oracle Open Office Impress : updating;fields and charts, automatically (Writer)
-Oracle Open Office Impress : updating;links in text documents
-Oracle Open Office Impress : updating;links, on opening
-Oracle Open Office Impress : updating;templates
-Oracle Open Office Impress : URL
-Oracle Open Office Impress : URL;changing hyperlink URLs
-Oracle Open Office Impress : URL;definition
-Oracle Open Office Impress : URL;in pictures
-Oracle Open Office Impress : URL;saving absolute/relative paths
-Oracle Open Office Impress : URL;turning off URL recognition
-Oracle Open Office Impress : user data
-Oracle Open Office Impress : user data;input
-Oracle Open Office Impress : user data;removing when saving
-Oracle Open Office Impress : user feedback
-Oracle Open Office Impress : user feedback;automatically
-Oracle Open Office Impress : user-defined colors
-Oracle Open Office Impress : user-defined dictionaries
-Oracle Open Office Impress : user-defined dictionaries;creating
-Oracle Open Office Impress : user-defined dictionaries;dictionary of exceptions
-Oracle Open Office Impress : user-defined dictionaries;editing
-Oracle Open Office Impress : user-defined styles
-Oracle Open Office Impress : user-defined styles;automatically replacing
-Oracle Open Office Impress : UTF-8/UCS2 support
-Oracle Open Office Impress : values
-Oracle Open Office Impress : values;rounded as shown (Calc)
-Oracle Open Office Impress : variables
-Oracle Open Office Impress : variables;for paths
-Oracle Open Office Impress : variances in charts
-Oracle Open Office Impress : VBA code
-Oracle Open Office Impress : VBA code;loading/saving documents with VBA code
-Oracle Open Office Impress : vector graphics
-Oracle Open Office Impress : vector graphics;converting bitmaps
-Oracle Open Office Impress : vectorizing bitmaps
-Oracle Open Office Impress : version management
-Oracle Open Office Impress : version numbers of documents
-Oracle Open Office Impress : versions
-Oracle Open Office Impress : versions;comparing documents
-Oracle Open Office Impress : versions;file saving as, restriction
-Oracle Open Office Impress : versions;merging document versions
-Oracle Open Office Impress : versions;of a document
-Oracle Open Office Impress : versions;Oracle Open Office
-Oracle Open Office Impress : vertical callouts
-Oracle Open Office Impress : vertical scrollbars (Writer)
-Oracle Open Office Impress : vertical text boxes
-Oracle Open Office Impress : videos
-Oracle Open Office Impress : viewing
-Oracle Open Office Impress : viewing;databases
-Oracle Open Office Impress : viewing;file properties
-Oracle Open Office Impress : viewing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Impress : viewing;toolbars
-Oracle Open Office Impress : views
-Oracle Open Office Impress : views;black and white
-Oracle Open Office Impress : views;creating database views (Base)
-Oracle Open Office Impress : views;defaults
-Oracle Open Office Impress : views;display sizes
-Oracle Open Office Impress : views;full screen
-Oracle Open Office Impress : views;icons
-Oracle Open Office Impress : views;scaling
-Oracle Open Office Impress : views;shift function
-Oracle Open Office Impress : views;slide master view
-Oracle Open Office Impress : Visual Basic for Applications
-Oracle Open Office Impress : Visual Basic for Applications;loading/saving documents with VBA code
-Oracle Open Office Impress : watermarks
-Oracle Open Office Impress : web documents
-Oracle Open Office Impress : web documents;XForms
-Oracle Open Office Impress : Web support
-Oracle Open Office Impress : WebCast export
-Oracle Open Office Impress : WebDAV over HTTPS
-Oracle Open Office Impress : windows
-Oracle Open Office Impress : windows;docking
-Oracle Open Office Impress : windows;docking definition
-Oracle Open Office Impress : windows;hiding/showing/docking
-Oracle Open Office Impress : windows;new
-Oracle Open Office Impress : wizards
-Oracle Open Office Impress : wizards;agendas
-Oracle Open Office Impress : wizards;database queries
-Oracle Open Office Impress : wizards;database tables (Base)
-Oracle Open Office Impress : wizards;databases (Base)
-Oracle Open Office Impress : wizards;document converter
-Oracle Open Office Impress : wizards;Euro Converter
-Oracle Open Office Impress : wizards;faxes
-Oracle Open Office Impress : wizards;forms
-Oracle Open Office Impress : wizards;letters
-Oracle Open Office Impress : wizards;macros (Base)
-Oracle Open Office Impress : wizards;overview
-Oracle Open Office Impress : wizards;presentations
-Oracle Open Office Impress : wizards;reports
-Oracle Open Office Impress : Word documents
-Oracle Open Office Impress : Word documents;compatibility
-Oracle Open Office Impress : Word documents;saving as
-Oracle Open Office Impress : WordArt, see Fontwork
-Oracle Open Office Impress : words
-Oracle Open Office Impress : words;automatically replacing
-Oracle Open Office Impress : words;wrapping in cells
-Oracle Open Office Impress : words;wrapping in CTL
-Oracle Open Office Impress : working directory change
-Oracle Open Office Impress : wrapping text
-Oracle Open Office Impress : wrapping text;in cells
-Oracle Open Office Impress : write protection on/off
-Oracle Open Office Impress : writing aids options
-Oracle Open Office Impress : WYSIWYG in fonts lists
-Oracle Open Office Impress : X axes
-Oracle Open Office Impress : X axes;grid formatting
-Oracle Open Office Impress : X axes;positioning
-Oracle Open Office Impress : X axes;scaling
-Oracle Open Office Impress : X axes;showing
-Oracle Open Office Impress : XForms
-Oracle Open Office Impress : XForms;adding/editing/deleting/organizing namespaces
-Oracle Open Office Impress : XForms;conditions
-Oracle Open Office Impress : XForms;opening/editing
-Oracle Open Office Impress : XML converters
-Oracle Open Office Impress : XML file formats
-Oracle Open Office Impress : XML filters
-Oracle Open Office Impress : XML filters;creating/testing
-Oracle Open Office Impress : XML filters;saving as package/installing/deleting
-Oracle Open Office Impress : XML filters;settings
-Oracle Open Office Impress : XML Forms, see XForms
-Oracle Open Office Impress : XSLT filters, see also XML filters
-Oracle Open Office Impress : XY charts
-Oracle Open Office Impress : Y axes
-Oracle Open Office Impress : Y axes;formatting
-Oracle Open Office Impress : Y axes;grid formatting
-Oracle Open Office Impress : Y axes;positioning
-Oracle Open Office Impress : Y axes;scaling
-Oracle Open Office Impress : Y axes;showing
-Oracle Open Office Impress : years
-Oracle Open Office Impress : years;2-digit options
-Oracle Open Office Impress : Z axes
-Oracle Open Office Impress : Z axes;grid formatting
-Oracle Open Office Impress : Z axes;showing
-Oracle Open Office Impress : zero values
-Oracle Open Office Impress : zero values;displaying (Calc)
-Oracle Open Office Impress : zooming
-Oracle Open Office Impress : zooming;in presentations
-Oracle Open Office Impress : zooming;keyboard
-Oracle Open Office Impress : zooming;page views
-Oracle Open Office Impress : zooming;pictures
-Oracle Open Office Impress : zooming;shortcut keys
-Oracle Open Office Impress : zooming;status bar
-Oracle Open Office Math : 1/2 replacement
-Oracle Open Office Math : 3D text creation
-Oracle Open Office Math : abbreviation replacement
-Oracle Open Office Math : absolute hyperlinks
-Oracle Open Office Math : absolute saving of URLs
-Oracle Open Office Math : absolute values
-Oracle Open Office Math : accents
-Oracle Open Office Math : accents
-Oracle Open Office Math : accents;in Oracle Open Office Math
-Oracle Open Office Math : Access databases (base)
-Oracle Open Office Math : access rights for database tables (Base)
-Oracle Open Office Math : accessibility
-Oracle Open Office Math : accessibility;general shortcuts
-Oracle Open Office Math : accessibility;options
-Oracle Open Office Math : accessibility;Oracle Open Office assistive technology
-Oracle Open Office Math : accessibility;Oracle Open Office features
-Oracle Open Office Math : accessibility;Oracle Open Office Math shortcuts
-Oracle Open Office Math : activating
-Oracle Open Office Math : activating;context menus
-Oracle Open Office Math : activating;Error Report Tool
-Oracle Open Office Math : activating;extended help tips
-Oracle Open Office Math : activating;plug-ins
-Oracle Open Office Math : ActiveX control
-Oracle Open Office Math : Adabas D databases (base)
-Oracle Open Office Math : add-ons, see UNO components
-Oracle Open Office Math : addition signs
-Oracle Open Office Math : additional selection mode
-Oracle Open Office Math : address books
-Oracle Open Office Math : address books;LDAP server (Base)
-Oracle Open Office Math : address books;registering
-Oracle Open Office Math : address labels from databases
-Oracle Open Office Math : ADO databases (Base)
-Oracle Open Office Math : Agenda Wizard
-Oracle Open Office Math : aging filter
-Oracle Open Office Math : aligning
-Oracle Open Office Math : aligning;cells
-Oracle Open Office Math : aligning;characters in Oracle Open Office Math
-Oracle Open Office Math : aligning;multi-line formulas
-Oracle Open Office Math : aligning;objects
-Oracle Open Office Math : aligning;paragraphs
-Oracle Open Office Math : aligning;tables in text
-Oracle Open Office Math : aligning;text objects
-Oracle Open Office Math : aligning formulas
-Oracle Open Office Math : alignment
-Oracle Open Office Math : alignment;horizontally centered (Math)
-Oracle Open Office Math : alignment;left (Math)
-Oracle Open Office Math : alignment;right (Math)
-Oracle Open Office Math : alternative fonts
-Oracle Open Office Math : ampersand symbol, see also operators
-Oracle Open Office Math : anchors
-Oracle Open Office Math : anchors;changing
-Oracle Open Office Math : anchors;displaying (Calc)
-Oracle Open Office Math : anchors;types/positions for draw objects
-Oracle Open Office Math : AND operator
-Oracle Open Office Math : animations
-Oracle Open Office Math : animations;accessibility options
-Oracle Open Office Math : appearance options
-Oracle Open Office Math : approximately equal to relation
-Oracle Open Office Math : Arabic
-Oracle Open Office Math : Arabic;entering text
-Oracle Open Office Math : Arabic;language settings
-Oracle Open Office Math : arc cosine function
-Oracle Open Office Math : arc cotangent function
-Oracle Open Office Math : arc sine function
-Oracle Open Office Math : area hyperbolic cosine function
-Oracle Open Office Math : area hyperbolic cotangent function
-Oracle Open Office Math : area hyperbolic tangent function
-Oracle Open Office Math : areas
-Oracle Open Office Math : areas;bitmap patterns
-Oracle Open Office Math : areas;hatched/dotted
-Oracle Open Office Math : areas;shadows
-Oracle Open Office Math : areas;slanting
-Oracle Open Office Math : areas;styles
-Oracle Open Office Math : areas;transparency
-Oracle Open Office Math : arguments in command line
-Oracle Open Office Math : arranging
-Oracle Open Office Math : arranging;matrices
-Oracle Open Office Math : arranging;objects
-Oracle Open Office Math : arrows
-Oracle Open Office Math : arrows;defining arrow heads
-Oracle Open Office Math : arrows;defining arrow lines
-Oracle Open Office Math : arrows;drawing in text
-Oracle Open Office Math : arrows;symbols in Oracle Open Office Math
-Oracle Open Office Math : ASCII
-Oracle Open Office Math : ASCII;definition
-Oracle Open Office Math : Asian languages
-Oracle Open Office Math : Asian languages;enabling
-Oracle Open Office Math : Asian Phonetic Guide
-Oracle Open Office Math : Asian typography
-Oracle Open Office Math : assigning scripts
-Oracle Open Office Math : assistive technology in Oracle Open Office
-Oracle Open Office Math : attaching toolbars
-Oracle Open Office Math : attachments in e-mails
-Oracle Open Office Math : attributes
-Oracle Open Office Math : attributes;accents
-Oracle Open Office Math : attributes;additional information
-Oracle Open Office Math : attributes;changing defaults
-Oracle Open Office Math : attributes;changing fonts
-Oracle Open Office Math : attributes;changing in Oracle Open Office Math
-Oracle Open Office Math : attributes;colored characters
-Oracle Open Office Math : attributes;in Oracle Open Office Math
-Oracle Open Office Math : attributes;list of
-Oracle Open Office Math : audio
-Oracle Open Office Math : auto reloading HTML documents
-Oracle Open Office Math : AutoAbstract function for sending text to presentations
-Oracle Open Office Math : AutoCaption function in Oracle Open Office Writer
-Oracle Open Office Math : AutoComplete function in text and list boxes
-Oracle Open Office Math : AutoCorrect function
-Oracle Open Office Math : AutoCorrect function;context menu
-Oracle Open Office Math : AutoCorrect function;options
-Oracle Open Office Math : AutoCorrect function;pictures and frames
-Oracle Open Office Math : AutoCorrect function;quotes
-Oracle Open Office Math : AutoCorrect function;replacement table
-Oracle Open Office Math : AutoCorrect function;switching on and off in Calc
-Oracle Open Office Math : AutoCorrect function;URL recognition
-Oracle Open Office Math : AutoFormat function
-Oracle Open Office Math : AutoFormat function;switching on and off
-Oracle Open Office Math : automatic captions (Writer)
-Oracle Open Office Math : automatic control focus
-Oracle Open Office Math : automatic hyperlink formatting
-Oracle Open Office Math : automatic line breaks
-Oracle Open Office Math : automatic lines/borders in text
-Oracle Open Office Math : automatic saving
-Oracle Open Office Math : AutoPilots, see wizards
-Oracle Open Office Math : AutoValue (Base)
-Oracle Open Office Math : axes in charts
-Oracle Open Office Math : axis-ellipsis
-Oracle Open Office Math : back epsilon symbol
-Oracle Open Office Math : backgrounds
-Oracle Open Office Math : backgrounds;defining colors/pictures
-Oracle Open Office Math : backgrounds;frames/sections/indexes
-Oracle Open Office Math : backgrounds;inserting from Gallery
-Oracle Open Office Math : backgrounds;printing
-Oracle Open Office Math : backing window
-Oracle Open Office Math : backslash division sign
-Oracle Open Office Math : backups
-Oracle Open Office Math : backups;automatic
-Oracle Open Office Math : backups;documents
-Oracle Open Office Math : Basic
-Oracle Open Office Math : Basic;fonts for source display
-Oracle Open Office Math : Basic;programming
-Oracle Open Office Math : Basic;recording macros
-Oracle Open Office Math : basic fonts
-Oracle Open Office Math : Bézier curves
-Oracle Open Office Math : Bézier curves;control points in presentations
-Oracle Open Office Math : bi-directional writing
-Oracle Open Office Math : binary operators
-Oracle Open Office Math : binary operators
-Oracle Open Office Math : binary operators;list of
-Oracle Open Office Math : binding space
-Oracle Open Office Math : binomials
-Oracle Open Office Math : bitmaps
-Oracle Open Office Math : bitmaps;inserting and editing
-Oracle Open Office Math : bitmaps;off for faster printing
-Oracle Open Office Math : bitmaps;patterns
-Oracle Open Office Math : black and white printing
-Oracle Open Office Math : black printing in Calc
-Oracle Open Office Math : block selection mode
-Oracle Open Office Math : bold
-Oracle Open Office Math : bold;AutoFormat function
-Oracle Open Office Math : bold;text
-Oracle Open Office Math : bold attribute
-Oracle Open Office Math : bookmarks
-Oracle Open Office Math : bookmarks;Help
-Oracle Open Office Math : Boolean operators
-Oracle Open Office Math : borders
-Oracle Open Office Math : borders;arranging
-Oracle Open Office Math : borders;cells on screen (Calc)
-Oracle Open Office Math : borders;for paragraphs
-Oracle Open Office Math : borders;for tables
-Oracle Open Office Math : borders;shadows
-Oracle Open Office Math : borders;table boundaries (Writer)
-Oracle Open Office Math : borders, see also frames
-Oracle Open Office Math : bound fields
-Oracle Open Office Math : bound fields;controls
-Oracle Open Office Math : boundaries of tables (Writer)
-Oracle Open Office Math : braces in Oracle Open Office Math
-Oracle Open Office Math : brackets
-Oracle Open Office Math : brackets;angle (Math)
-Oracle Open Office Math : brackets;angle with operator
-Oracle Open Office Math : brackets;double square (Math)
-Oracle Open Office Math : brackets;group
-Oracle Open Office Math : brackets;in Oracle Open Office Math
-Oracle Open Office Math : brackets;inserting in Oracle Open Office Math
-Oracle Open Office Math : brackets;merging formula parts
-Oracle Open Office Math : brackets;operator (Math)
-Oracle Open Office Math : brackets;reference list
-Oracle Open Office Math : brackets;round (Math)
-Oracle Open Office Math : brackets;scalable
-Oracle Open Office Math : brackets;single, without group function
-Oracle Open Office Math : brackets;square (Math)
-Oracle Open Office Math : brackets;widowed
-Oracle Open Office Math : brackets and grouping in Oracle Open Office Math
-Oracle Open Office Math : break display (Writer)
-Oracle Open Office Math : brochures
-Oracle Open Office Math : brochures;printing several
-Oracle Open Office Math : build numbers of Oracle Open Office
-Oracle Open Office Math : bullet lists
-Oracle Open Office Math : bullet lists;formatting options
-Oracle Open Office Math : bullets
-Oracle Open Office Math : bullets;paragraphs
-Oracle Open Office Math : bullets;replacing
-Oracle Open Office Math : bullets;turning off
-Oracle Open Office Math : business cards
-Oracle Open Office Math : business cards;creating and synchronizing
-Oracle Open Office Math : business cards;using templates
-Oracle Open Office Math : button bars, see toolbars
-Oracle Open Office Math : buttons
-Oracle Open Office Math : buttons;adding push buttons
-Oracle Open Office Math : buttons;big/small
-Oracle Open Office Math : buttons;editing hyperlink buttons
-Oracle Open Office Math : buttons;form functions
-Oracle Open Office Math : buttons;toolbars
-Oracle Open Office Math : cache for graphics
-Oracle Open Office Math : calculating
-Oracle Open Office Math : calculating;iterative references (Calc)
-Oracle Open Office Math : callouts
-Oracle Open Office Math : callouts;drawings
-Oracle Open Office Math : capital letters
-Oracle Open Office Math : capital letters;AutoCorrect function
-Oracle Open Office Math : capital letters;font effects
-Oracle Open Office Math : captions
-Oracle Open Office Math : captions;automatic captions (Writer)
-Oracle Open Office Math : captions;tables/pictures/frames/OLE objects (Writer)
-Oracle Open Office Math : captions, see also labels/callouts
-Oracle Open Office Math : cardinal numbers
-Oracle Open Office Math : cascading update (Base)
-Oracle Open Office Math : case sensitivity
-Oracle Open Office Math : case sensitivity;comparing cell contents (Calc)
-Oracle Open Office Math : case sensitivity;searching
-Oracle Open Office Math : catalog for mathematical symbols
-Oracle Open Office Math : ceiling brackets
-Oracle Open Office Math : ceiling brackets;lines with
-Oracle Open Office Math : ceiling brackets;scalable lines with
-Oracle Open Office Math : cells
-Oracle Open Office Math : cells;aligning
-Oracle Open Office Math : cells;coloring (Calc)
-Oracle Open Office Math : cells;cursor positions after input (Calc)
-Oracle Open Office Math : cells;formatting without effect (Calc)
-Oracle Open Office Math : cells;line breaks
-Oracle Open Office Math : cells;linked to controls
-Oracle Open Office Math : cells;number of
-Oracle Open Office Math : cells;pasting
-Oracle Open Office Math : cells;resetting formats
-Oracle Open Office Math : cells;showing grid lines (Calc)
-Oracle Open Office Math : center dots symbol
-Oracle Open Office Math : centered horizontally
-Oracle Open Office Math : centered horizontally;alignment (Math)
-Oracle Open Office Math : centered text
-Oracle Open Office Math : centimeters
-Oracle Open Office Math : certificates
-Oracle Open Office Math : changes
-Oracle Open Office Math : changes;accepting automatically
-Oracle Open Office Math : changes;accepting or rejecting
-Oracle Open Office Math : changes;comparing to original
-Oracle Open Office Math : changes;protecting
-Oracle Open Office Math : changes;recording
-Oracle Open Office Math : changes;review function
-Oracle Open Office Math : changes;showing
-Oracle Open Office Math : changing
-Oracle Open Office Math : changing;default formatting
-Oracle Open Office Math : changing;document titles
-Oracle Open Office Math : changing;file associations in Setup program
-Oracle Open Office Math : changing;fonts
-Oracle Open Office Math : changing;icon sizes
-Oracle Open Office Math : changing;links
-Oracle Open Office Math : changing;work directory
-Oracle Open Office Math : changing, see also editing and replacing
-Oracle Open Office Math : character styles
-Oracle Open Office Math : character styles;language selection
-Oracle Open Office Math : characters
-Oracle Open Office Math : characters;alternative fonts
-Oracle Open Office Math : characters;Asian layout
-Oracle Open Office Math : characters;bold
-Oracle Open Office Math : characters;coloring
-Oracle Open Office Math : characters;displaying only on screen (Writer)
-Oracle Open Office Math : characters;enabling CTL and Asian characters
-Oracle Open Office Math : characters;font effects
-Oracle Open Office Math : characters;fonts and formats
-Oracle Open Office Math : characters;hyperlinks
-Oracle Open Office Math : characters;italics
-Oracle Open Office Math : characters;language selection
-Oracle Open Office Math : characters;shadowed
-Oracle Open Office Math : characters;spacing
-Oracle Open Office Math : characters;special
-Oracle Open Office Math : characters;underlining
-Oracle Open Office Math : charcoal sketches filter
-Oracle Open Office Math : charts
-Oracle Open Office Math : charts;arranging within stacks
-Oracle Open Office Math : charts;bars with textures
-Oracle Open Office Math : charts;colors
-Oracle Open Office Math : charts;copying with link to source cell range
-Oracle Open Office Math : charts;displaying (Calc)
-Oracle Open Office Math : charts;editing axes
-Oracle Open Office Math : charts;editing data
-Oracle Open Office Math : charts;editing legends
-Oracle Open Office Math : charts;editing titles
-Oracle Open Office Math : charts;inserting
-Oracle Open Office Math : charts;updating automatically (Writer)
-Oracle Open Office Math : check box creation
-Oracle Open Office Math : Chinese writing systems
-Oracle Open Office Math : choosing printers
-Oracle Open Office Math : circle attribute
-Oracle Open Office Math : circle drawings
-Oracle Open Office Math : circumflex attribute
-Oracle Open Office Math : Client Side ImageMap
-Oracle Open Office Math : clipboard
-Oracle Open Office Math : clipboard;cutting
-Oracle Open Office Math : clipboard;pasting
-Oracle Open Office Math : clipboard;pasting formatted/unformatted text
-Oracle Open Office Math : clipboard;selection clipboard
-Oracle Open Office Math : clipboard;Unix
-Oracle Open Office Math : closing
-Oracle Open Office Math : closing;documents
-Oracle Open Office Math : closing;toolbars
-Oracle Open Office Math : collaboration
-Oracle Open Office Math : color bar
-Oracle Open Office Math : colored characters
-Oracle Open Office Math : colors
-Oracle Open Office Math : colors;adding
-Oracle Open Office Math : colors;appearance
-Oracle Open Office Math : colors;backgrounds
-Oracle Open Office Math : colors;charts
-Oracle Open Office Math : colors;fill format
-Oracle Open Office Math : colors;fonts
-Oracle Open Office Math : colors;grid lines and cells (Calc)
-Oracle Open Office Math : colors;in formulas
-Oracle Open Office Math : colors;models
-Oracle Open Office Math : colors;not printing
-Oracle Open Office Math : colors;printing in grayscale
-Oracle Open Office Math : colors;restriction (Calc)
-Oracle Open Office Math : colors;selection
-Oracle Open Office Math : column headers
-Oracle Open Office Math : column headers;displaying (Calc)
-Oracle Open Office Math : column headers;highlighting (Calc)
-Oracle Open Office Math : columns
-Oracle Open Office Math : columns;setting with the mouse
-Oracle Open Office Math : combo box creation
-Oracle Open Office Math : command button creation
-Oracle Open Office Math : command buttons, see push buttons
-Oracle Open Office Math : command line parameters
-Oracle Open Office Math : commands
-Oracle Open Office Math : commands;repeating
-Oracle Open Office Math : commands;SQL
-Oracle Open Office Math : comments
-Oracle Open Office Math : comments;displaying (Calc)
-Oracle Open Office Math : comments;entering in Oracle Open Office Math
-Oracle Open Office Math : comments;inserting/editing/deleting/printing
-Oracle Open Office Math : comments;on changes
-Oracle Open Office Math : comments;printing in text
-Oracle Open Office Math : common terms
-Oracle Open Office Math : common terms;Chinese dictionary
-Oracle Open Office Math : common terms;glossaries
-Oracle Open Office Math : common terms;Internet glossary
-Oracle Open Office Math : comparisons
-Oracle Open Office Math : comparisons;document versions
-Oracle Open Office Math : comparisons;operators in default filter dialog
-Oracle Open Office Math : compatibility settings for MS Word import
-Oracle Open Office Math : complete screen view
-Oracle Open Office Math : complex numbers
-Oracle Open Office Math : complex numbers;set
-Oracle Open Office Math : complex numbers;symbols
-Oracle Open Office Math : complex text layout
-Oracle Open Office Math : complex text layout;definition
-Oracle Open Office Math : complex text layout;enabling
-Oracle Open Office Math : complex text layout, see CTL
-Oracle Open Office Math : compose key to insert special characters
-Oracle Open Office Math : concatenating math symbols
-Oracle Open Office Math : concatenation, see ampersand symbol
-Oracle Open Office Math : conditional separators
-Oracle Open Office Math : conditions
-Oracle Open Office Math : conditions;in number formats
-Oracle Open Office Math : conditions;items in Data Navigator
-Oracle Open Office Math : Configuration Manager
-Oracle Open Office Math : configuring
-Oracle Open Office Math : configuring;fax icon
-Oracle Open Office Math : configuring;Oracle Open Office
-Oracle Open Office Math : configuring;toolbars
-Oracle Open Office Math : congruent relation
-Oracle Open Office Math : connections to data sources (Base)
-Oracle Open Office Math : considerably greater than relation
-Oracle Open Office Math : considerably less than relation
-Oracle Open Office Math : contents protection
-Oracle Open Office Math : context menus
-Oracle Open Office Math : control point display in presentations
-Oracle Open Office Math : controls
-Oracle Open Office Math : controls;activating in forms
-Oracle Open Office Math : controls;adding to documents
-Oracle Open Office Math : controls;arranging in forms
-Oracle Open Office Math : controls;arranging within stacks
-Oracle Open Office Math : controls;assigning data sources
-Oracle Open Office Math : controls;assigning macros (Basic)
-Oracle Open Office Math : controls;bound fields/list contents/linked cells
-Oracle Open Office Math : controls;events
-Oracle Open Office Math : controls;focus
-Oracle Open Office Math : controls;formatted fields
-Oracle Open Office Math : controls;grouping
-Oracle Open Office Math : controls;hidden
-Oracle Open Office Math : controls;inserting
-Oracle Open Office Math : controls;multi-line titles
-Oracle Open Office Math : controls;positions and sizes
-Oracle Open Office Math : controls;printing
-Oracle Open Office Math : controls;properties of form controls
-Oracle Open Office Math : controls;properties of table controls
-Oracle Open Office Math : controls;reference by SQL
-Oracle Open Office Math : controls;rich text control
-Oracle Open Office Math : controls;select mode
-Oracle Open Office Math : controls;showing (Writer)
-Oracle Open Office Math : converters
-Oracle Open Office Math : converters;Euro converter
-Oracle Open Office Math : converters;PostScript, UNIX
-Oracle Open Office Math : converters;XML
-Oracle Open Office Math : converting
-Oracle Open Office Math : converting;Hangul/Hanja
-Oracle Open Office Math : converting;metrics
-Oracle Open Office Math : converting;Microsoft documents
-Oracle Open Office Math : converting;Oracle Open Office documents
-Oracle Open Office Math : converting;Pocket PC formats
-Oracle Open Office Math : copies
-Oracle Open Office Math : copies;printing
-Oracle Open Office Math : coproduct
-Oracle Open Office Math : copying
-Oracle Open Office Math : copying;by drag and drop
-Oracle Open Office Math : copying;data from text documents
-Oracle Open Office Math : copying;datasource records in spreadsheets
-Oracle Open Office Math : copying;draw objects
-Oracle Open Office Math : copying;draw objects between documents
-Oracle Open Office Math : copying;formatting
-Oracle Open Office Math : copying;from data source view
-Oracle Open Office Math : copying;from Gallery
-Oracle Open Office Math : copying;in Unix
-Oracle Open Office Math : copying;pictures, between documents
-Oracle Open Office Math : copying;sheet areas, to text documents
-Oracle Open Office Math : copying;to Gallery
-Oracle Open Office Math : copyright for Oracle Open Office
-Oracle Open Office Math : corner roundings
-Oracle Open Office Math : correspondence
-Oracle Open Office Math : correspondence;original by
-Oracle Open Office Math : correspondence;picture by
-Oracle Open Office Math : cosine function
-Oracle Open Office Math : cotangent function
-Oracle Open Office Math : crash reports
-Oracle Open Office Math : criteria of query design (Base)
-Oracle Open Office Math : cropping pictures
-Oracle Open Office Math : CTL
-Oracle Open Office Math : CTL;(not) wrapping words
-Oracle Open Office Math : CTL;complex text layout languages
-Oracle Open Office Math : CTL;definition
-Oracle Open Office Math : CTL;options
-Oracle Open Office Math : currencies
-Oracle Open Office Math : currencies;converters
-Oracle Open Office Math : currencies;format codes
-Oracle Open Office Math : currency field creation
-Oracle Open Office Math : currency formats
-Oracle Open Office Math : cursor
-Oracle Open Office Math : cursor;allowing in protected areas (Writer)
-Oracle Open Office Math : cursor;in Oracle Open Office Math
-Oracle Open Office Math : cursor;in read-only text
-Oracle Open Office Math : cursor;quickly moving to an object
-Oracle Open Office Math : curve integrals
-Oracle Open Office Math : curves
-Oracle Open Office Math : curves;editing points
-Oracle Open Office Math : custom dictionaries
-Oracle Open Office Math : custom dictionaries;editing
-Oracle Open Office Math : custom hyphens (Writer)
-Oracle Open Office Math : custom quotes
-Oracle Open Office Math : custom templates
-Oracle Open Office Math : customizing
-Oracle Open Office Math : customizing;events
-Oracle Open Office Math : customizing;keyboard
-Oracle Open Office Math : customizing;menus
-Oracle Open Office Math : customizing;Oracle Open Office
-Oracle Open Office Math : customizing;round corners
-Oracle Open Office Math : customizing;toolbars
-Oracle Open Office Math : cutting
-Oracle Open Office Math : dashes
-Oracle Open Office Math : data
-Oracle Open Office Math : data;filtering in forms
-Oracle Open Office Math : data;forms and subforms
-Oracle Open Office Math : data;read-only
-Oracle Open Office Math : data;sorting in forms
-Oracle Open Office Math : data;user data
-Oracle Open Office Math : data binding change in XForms
-Oracle Open Office Math : Data Navigator
-Oracle Open Office Math : Data Navigator;adding/editing items
-Oracle Open Office Math : Data Navigator;display options
-Oracle Open Office Math : data source browser
-Oracle Open Office Math : data source explorer
-Oracle Open Office Math : data source view
-Oracle Open Office Math : data source view;drag and drop
-Oracle Open Office Math : data source view;overview
-Oracle Open Office Math : data source view;showing
-Oracle Open Office Math : data sources
-Oracle Open Office Math : data sources;as tables
-Oracle Open Office Math : data sources;connection settings (Base)
-Oracle Open Office Math : data sources;copying records to spreadsheets
-Oracle Open Office Math : data sources;displaying current
-Oracle Open Office Math : data sources;LDAP server (Base)
-Oracle Open Office Math : data sources;Oracle Open Office Base
-Oracle Open Office Math : data sources;registering address books
-Oracle Open Office Math : data sources;reports
-Oracle Open Office Math : data sources;viewing
-Oracle Open Office Math : data structure of XForms
-Oracle Open Office Math : data, see also values
-Oracle Open Office Math : database contents
-Oracle Open Office Math : database contents;inserting as tables
-Oracle Open Office Math : database contents;inserting as text
-Oracle Open Office Math : database reports
-Oracle Open Office Math : Database Wizard (Base)
-Oracle Open Office Math : databases
-Oracle Open Office Math : databases;administration through SQL (Base)
-Oracle Open Office Math : databases;ADO (Base)
-Oracle Open Office Math : databases;connecting (Base)
-Oracle Open Office Math : databases;creating
-Oracle Open Office Math : databases;creating labels
-Oracle Open Office Math : databases;creating queries
-Oracle Open Office Math : databases;creating reports
-Oracle Open Office Math : databases;creating tables
-Oracle Open Office Math : databases;deleting (Base)
-Oracle Open Office Math : databases;drag and drop (Base)
-Oracle Open Office Math : databases;editing tables
-Oracle Open Office Math : databases;form filters
-Oracle Open Office Math : databases;formats (Base)
-Oracle Open Office Math : databases;importing/exporting
-Oracle Open Office Math : databases;JDBC (Base)
-Oracle Open Office Math : databases;main page (Base)
-Oracle Open Office Math : databases;ODBC (Base)
-Oracle Open Office Math : databases;overview
-Oracle Open Office Math : databases;registering (Base)
-Oracle Open Office Math : databases;searching records
-Oracle Open Office Math : databases;shortcut keys
-Oracle Open Office Math : databases;sorting
-Oracle Open Office Math : databases;standard filters
-Oracle Open Office Math : databases;text formats
-Oracle Open Office Math : databases;viewing
-Oracle Open Office Math : date fields
-Oracle Open Office Math : date fields;creating
-Oracle Open Office Math : date fields;properties
-Oracle Open Office Math : date formats
-Oracle Open Office Math : dates
-Oracle Open Office Math : dates;default (Calc)
-Oracle Open Office Math : dates;printing in presentations
-Oracle Open Office Math : dates;start 1900/01/01 (Calc)
-Oracle Open Office Math : dates;start 1904/01/01 (Calc)
-Oracle Open Office Math : dBASE
-Oracle Open Office Math : dBASE;database settings (Base)
-Oracle Open Office Math : DDE
-Oracle Open Office Math : DDE;definition
-Oracle Open Office Math : deactivating
-Oracle Open Office Math : deactivating;plug-ins
-Oracle Open Office Math : decimal places displayed (Calc)
-Oracle Open Office Math : decimal separator key
-Oracle Open Office Math : decimal tab stops
-Oracle Open Office Math : default directories
-Oracle Open Office Math : default filters
-Oracle Open Office Math : default filters;comparison operators
-Oracle Open Office Math : default filters;databases
-Oracle Open Office Math : default printer
-Oracle Open Office Math : default printer;setting up
-Oracle Open Office Math : default printer;UNIX
-Oracle Open Office Math : default templates
-Oracle Open Office Math : default templates;changing
-Oracle Open Office Math : default templates;organizing
-Oracle Open Office Math : defaults
-Oracle Open Office Math : defaults;changing default formatting
-Oracle Open Office Math : defaults;documents
-Oracle Open Office Math : defaults;file formats in file dialogs
-Oracle Open Office Math : defaults;file formats in Oracle Open Office
-Oracle Open Office Math : defaults;fonts
-Oracle Open Office Math : defaults;grids (Writer/Calc)
-Oracle Open Office Math : defaults;languages
-Oracle Open Office Math : defaults;number formats
-Oracle Open Office Math : defaults;of saving
-Oracle Open Office Math : defaults;program configuration
-Oracle Open Office Math : defaults;tab stops in text
-Oracle Open Office Math : defaults;views
-Oracle Open Office Math : defined as relation
-Oracle Open Office Math : defining
-Oracle Open Office Math : defining;arrowheads and other line ends
-Oracle Open Office Math : defining;colors
-Oracle Open Office Math : defining;formula fonts
-Oracle Open Office Math : defining;line styles
-Oracle Open Office Math : defining;paragraph borders
-Oracle Open Office Math : defining;queries (Base)
-Oracle Open Office Math : defining;table borders
-Oracle Open Office Math : deleting
-Oracle Open Office Math : deleting;all direct formatting
-Oracle Open Office Math : deleting;comments
-Oracle Open Office Math : deleting;databases (Base)
-Oracle Open Office Math : deleting;hyperlinks
-Oracle Open Office Math : deleting;lines in text
-Oracle Open Office Math : deleting;models/instances
-Oracle Open Office Math : deleting;namespaces in XForms
-Oracle Open Office Math : deleting;tab stops
-Oracle Open Office Math : deleting;templates
-Oracle Open Office Math : deleting;XML filters
-Oracle Open Office Math : depth stagger
-Oracle Open Office Math : descriptions for objects
-Oracle Open Office Math : design mode after saving
-Oracle Open Office Math : design view
-Oracle Open Office Math : design view;creating forms
-Oracle Open Office Math : design view;queries/views (Base)
-Oracle Open Office Math : designing
-Oracle Open Office Math : designing;database tables
-Oracle Open Office Math : designing;fonts
-Oracle Open Office Math : designing;queries (Base)
-Oracle Open Office Math : detaching toolbars
-Oracle Open Office Math : diagonal downward dots
-Oracle Open Office Math : diagonal downward dots;symbol
-Oracle Open Office Math : diagonal upward dots
-Oracle Open Office Math : diagonal upward dots;symbol
-Oracle Open Office Math : dictionaries
-Oracle Open Office Math : dictionaries;common terms in simplified and traditional chinese
-Oracle Open Office Math : dictionaries;creating
-Oracle Open Office Math : dictionaries;editing user-defined
-Oracle Open Office Math : dictionaries;spellcheck
-Oracle Open Office Math : dictionaries, see also languages
-Oracle Open Office Math : difference set operator
-Oracle Open Office Math : digital signatures
-Oracle Open Office Math : digital signatures;getting/managing/applying
-Oracle Open Office Math : digital signatures;overview
-Oracle Open Office Math : digital signatures;WebDAV over HTTPS
-Oracle Open Office Math : direct formatting
-Oracle Open Office Math : direct formatting;undoing all
-Oracle Open Office Math : direct text
-Oracle Open Office Math : direct text;entering in Oracle Open Office Math
-Oracle Open Office Math : directories
-Oracle Open Office Math : directories;creating new
-Oracle Open Office Math : directories;directory structure
-Oracle Open Office Math : disabled persons
-Oracle Open Office Math : displaying
-Oracle Open Office Math : displaying;comments (Calc)
-Oracle Open Office Math : displaying;comments in text documents
-Oracle Open Office Math : displaying;non-printing characters (Writer)
-Oracle Open Office Math : displaying;pictures and objects (Writer)
-Oracle Open Office Math : displaying;tables (Writer)
-Oracle Open Office Math : displaying;zero values (Calc)
-Oracle Open Office Math : distances
-Oracle Open Office Math : distances between brackets
-Oracle Open Office Math : distinct values in SQL queries
-Oracle Open Office Math : distorting in drawings
-Oracle Open Office Math : distributing XML filters
-Oracle Open Office Math : divides relation
-Oracle Open Office Math : division signs
-Oracle Open Office Math : docking
-Oracle Open Office Math : docking;definition
-Oracle Open Office Math : docking;toolbars
-Oracle Open Office Math : docking;windows
-Oracle Open Office Math : Document Converter Wizard
-Oracle Open Office Math : Document Map, see Navigator
-Oracle Open Office Math : document types in Oracle Open Office
-Oracle Open Office Math : documents
-Oracle Open Office Math : documents;changing titles
-Oracle Open Office Math : documents;closing
-Oracle Open Office Math : documents;comparing
-Oracle Open Office Math : documents;contents as lists
-Oracle Open Office Math : documents;editing time
-Oracle Open Office Math : documents;exporting
-Oracle Open Office Math : documents;importing
-Oracle Open Office Math : documents;languages
-Oracle Open Office Math : documents;measurement units in
-Oracle Open Office Math : documents;merging
-Oracle Open Office Math : documents;number of pages/tables/sheets
-Oracle Open Office Math : documents;opening
-Oracle Open Office Math : documents;opening in design mode
-Oracle Open Office Math : documents;opening with templates
-Oracle Open Office Math : documents;organizing
-Oracle Open Office Math : documents;printing
-Oracle Open Office Math : documents;read-only
-Oracle Open Office Math : documents;reloading
-Oracle Open Office Math : documents;saving
-Oracle Open Office Math : documents;saving automatically
-Oracle Open Office Math : documents;saving in other formats
-Oracle Open Office Math : documents;sending as e-mail
-Oracle Open Office Math : documents;styles changed
-Oracle Open Office Math : documents;version management
-Oracle Open Office Math : documents;version numbers
-Oracle Open Office Math : does not divide relation
-Oracle Open Office Math : dot attribute
-Oracle Open Office Math : dotted areas
-Oracle Open Office Math : double arrow symbols
-Oracle Open Office Math : double dot attribute
-Oracle Open Office Math : double square brackets
-Oracle Open Office Math : double square brackets;scalable
-Oracle Open Office Math : double-line spacing in paragraphs
-Oracle Open Office Math : double-line writing in Asian layout
-Oracle Open Office Math : down arrow symbol
-Oracle Open Office Math : drag and drop
-Oracle Open Office Math : drag and drop;copying and pasting text
-Oracle Open Office Math : drag and drop;data source view
-Oracle Open Office Math : drag and drop;from Gallery to draw objects
-Oracle Open Office Math : drag and drop;overview
-Oracle Open Office Math : drag and drop;pictures
-Oracle Open Office Math : drag and drop;to Gallery
-Oracle Open Office Math : draw objects
-Oracle Open Office Math : draw objects;adding/editing/copying
-Oracle Open Office Math : draw objects;anchoring
-Oracle Open Office Math : draw objects;arranging within stacks
-Oracle Open Office Math : draw objects;copying between documents
-Oracle Open Office Math : draw objects;displaying (Calc)
-Oracle Open Office Math : draw objects;dropping Gallery pictures
-Oracle Open Office Math : draw objects;flipping
-Oracle Open Office Math : draw objects;legends
-Oracle Open Office Math : draw objects;positioning and resizing
-Oracle Open Office Math : draw objects;protecting
-Oracle Open Office Math : draw objects;slanting
-Oracle Open Office Math : draw objects;text in
-Oracle Open Office Math : Drawing bar
-Oracle Open Office Math : drawing lines in text
-Oracle Open Office Math : drawings
-Oracle Open Office Math : drawings;creating/opening
-Oracle Open Office Math : drawings;languages
-Oracle Open Office Math : drawings;printing
-Oracle Open Office Math : drawings;printing defaults
-Oracle Open Office Math : drawings;printing in text documents
-Oracle Open Office Math : drawings;saving
-Oracle Open Office Math : drawings;saving automatically
-Oracle Open Office Math : drawings;saving in other formats
-Oracle Open Office Math : drawings;sending as e-mail
-Oracle Open Office Math : drawings;showing (Writer)
-Oracle Open Office Math : drawings, see also draw objects
-Oracle Open Office Math : drop-down lists in form functions
-Oracle Open Office Math : e-mail attachments
-Oracle Open Office Math : Edit File icon
-Oracle Open Office Math : edit mode
-Oracle Open Office Math : edit mode;after opening
-Oracle Open Office Math : edit mode;through Enter key (Calc)
-Oracle Open Office Math : Edit Points bar
-Oracle Open Office Math : editing
-Oracle Open Office Math : editing;chart axes
-Oracle Open Office Math : editing;chart data
-Oracle Open Office Math : editing;chart legends
-Oracle Open Office Math : editing;chart titles
-Oracle Open Office Math : editing;comments
-Oracle Open Office Math : editing;data binding of XForms
-Oracle Open Office Math : editing;database tables and queries
-Oracle Open Office Math : editing;draw objects
-Oracle Open Office Math : editing;Fontwork objects
-Oracle Open Office Math : editing;hyperlinks
-Oracle Open Office Math : editing;menus
-Oracle Open Office Math : editing;objects
-Oracle Open Office Math : editing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Math : editing;pictures
-Oracle Open Office Math : editing;reports
-Oracle Open Office Math : editing;shortcut keys
-Oracle Open Office Math : editing;tab stops
-Oracle Open Office Math : editing;templates
-Oracle Open Office Math : editing;toolbars
-Oracle Open Office Math : editing;undoing
-Oracle Open Office Math : editing;XForms
-Oracle Open Office Math : editing time of documents
-Oracle Open Office Math : editors
-Oracle Open Office Math : editors;formula editor
-Oracle Open Office Math : editors;ImageMap editor
-Oracle Open Office Math : effects
-Oracle Open Office Math : effects;font positions
-Oracle Open Office Math : effects;fonts
-Oracle Open Office Math : effects;Fontwork icons
-Oracle Open Office Math : ellipsis symbols
-Oracle Open Office Math : empty documents
-Oracle Open Office Math : empty paragraph removal
-Oracle Open Office Math : empty set
-Oracle Open Office Math : encryption of contents
-Oracle Open Office Math : entering groups
-Oracle Open Office Math : entering text from right to left
-Oracle Open Office Math : epsilon
-Oracle Open Office Math : epsilon;back
-Oracle Open Office Math : equal sign
-Oracle Open Office Math : equal sign, see also operators
-Oracle Open Office Math : Equation Editor, see Oracle Open Office Math
-Oracle Open Office Math : equations in formula editor
-Oracle Open Office Math : Error Report Tool
-Oracle Open Office Math : error search
-Oracle Open Office Math : error search;next error
-Oracle Open Office Math : error search;previous error
-Oracle Open Office Math : Euro
-Oracle Open Office Math : Euro;currency formats
-Oracle Open Office Math : Euro;Euro Converter Wizard
-Oracle Open Office Math : even/odd pages
-Oracle Open Office Math : even/odd pages;printing
-Oracle Open Office Math : events
-Oracle Open Office Math : events;assigning scripts
-Oracle Open Office Math : events;controls
-Oracle Open Office Math : events;customizing
-Oracle Open Office Math : events;in forms
-Oracle Open Office Math : examples
-Oracle Open Office Math : examples;integral
-Oracle Open Office Math : examples;Oracle Open Office Math formulas
-Oracle Open Office Math : Excel
-Oracle Open Office Math : Excel;saving as
-Oracle Open Office Math : Excel;search criteria
-Oracle Open Office Math : exceptions
-Oracle Open Office Math : exceptions;user-defined dictionaries
-Oracle Open Office Math : exchanging, see also replacing
-Oracle Open Office Math : executing SQL commands
-Oracle Open Office Math : existence quantor symbol
-Oracle Open Office Math : exiting
-Oracle Open Office Math : exiting;groups
-Oracle Open Office Math : exiting;Oracle Open Office
-Oracle Open Office Math : expanding formatting (Calc)
-Oracle Open Office Math : explorer of data sources
-Oracle Open Office Math : exponential functions
-Oracle Open Office Math : exponents
-Oracle Open Office Math : exponents;variables with right
-Oracle Open Office Math : exponents and indexes in Oracle Open Office Math
-Oracle Open Office Math : export filters
-Oracle Open Office Math : exporting
-Oracle Open Office Math : exporting;bitmaps
-Oracle Open Office Math : exporting;HTML and text documents
-Oracle Open Office Math : exporting;Microsoft Office documents with VBA code
-Oracle Open Office Math : exporting;spreadsheets to text format
-Oracle Open Office Math : exporting;templates
-Oracle Open Office Math : exporting;to foreign formats
-Oracle Open Office Math : exporting;to HTML
-Oracle Open Office Math : exporting;to Microsoft Office formats
-Oracle Open Office Math : exporting;to PDF
-Oracle Open Office Math : exporting;to PostScript format
-Oracle Open Office Math : exporting;to XML
-Oracle Open Office Math : exporting;XML files
-Oracle Open Office Math : extended tips in Help
-Oracle Open Office Math : extension mode in text
-Oracle Open Office Math : extensions
-Oracle Open Office Math : extensions;Extension Manager
-Oracle Open Office Math : extensions;file formats
-Oracle Open Office Math : external keys (Base)
-Oracle Open Office Math : factorial
-Oracle Open Office Math : faster printing
-Oracle Open Office Math : faxes
-Oracle Open Office Math : faxes;configuring Oracle Open Office
-Oracle Open Office Math : faxes;fax programs/fax printers under UNIX
-Oracle Open Office Math : faxes;selecting a fax machine
-Oracle Open Office Math : faxes;sending
-Oracle Open Office Math : faxes;wizards
-Oracle Open Office Math : feedback
-Oracle Open Office Math : feedback;automatically
-Oracle Open Office Math : fields
-Oracle Open Office Math : fields;database tables
-Oracle Open Office Math : fields;displaying field codes (Writer)
-Oracle Open Office Math : fields;formatted fields
-Oracle Open Office Math : fields;updating automatically (Writer)
-Oracle Open Office Math : file associations for Microsoft Office
-Oracle Open Office Math : file filters
-Oracle Open Office Math : file filters;mobile devices
-Oracle Open Office Math : file filters;XML
-Oracle Open Office Math : file formats
-Oracle Open Office Math : file formats;changing Oracle Open Office defaults
-Oracle Open Office Math : file formats;OpenDocument/XML
-Oracle Open Office Math : file formats;saving always in other formats
-Oracle Open Office Math : file selection button
-Oracle Open Office Math : file sharing options for current document
-Oracle Open Office Math : files
-Oracle Open Office Math : files;filters and formats
-Oracle Open Office Math : files;importing
-Oracle Open Office Math : files;opening
-Oracle Open Office Math : files;opening with placeholders
-Oracle Open Office Math : files;properties
-Oracle Open Office Math : files;saving
-Oracle Open Office Math : files;saving automatically
-Oracle Open Office Math : files;saving in other formats
-Oracle Open Office Math : files;sending as e-mail
-Oracle Open Office Math : files;version numbers
-Oracle Open Office Math : files and folders in Oracle Open Office
-Oracle Open Office Math : fill characters with tabulators
-Oracle Open Office Math : fill colors for areas
-Oracle Open Office Math : fill patterns for areas
-Oracle Open Office Math : filter conditions
-Oracle Open Office Math : filter conditions;connecting
-Oracle Open Office Math : filter conditions;in queries (Base)
-Oracle Open Office Math : filtering
-Oracle Open Office Math : filtering;data in databases
-Oracle Open Office Math : filtering;data in forms
-Oracle Open Office Math : filters
-Oracle Open Office Math : filters;comparison operators
-Oracle Open Office Math : filters;for import and export
-Oracle Open Office Math : filters;Navigator
-Oracle Open Office Math : filters;pictures
-Oracle Open Office Math : filters;XML filter settings
-Oracle Open Office Math : Find tab in Help
-Oracle Open Office Math : finding
-Oracle Open Office Math : finding;errors in Oracle Open Office Math
-Oracle Open Office Math : finding;in all sheets
-Oracle Open Office Math : finding;records in form documents
-Oracle Open Office Math : finding;selections
-Oracle Open Office Math : finding;similarity search
-Oracle Open Office Math : fitting to pages
-Oracle Open Office Math : fitting to pages;print settings in Math
-Oracle Open Office Math : fitting to pages;print settings in presentations
-Oracle Open Office Math : fixed text
-Oracle Open Office Math : fixed text;form functions
-Oracle Open Office Math : fixing toolbars
-Oracle Open Office Math : flipping draw objects
-Oracle Open Office Math : floating frames in HTML documents
-Oracle Open Office Math : floating toolbars
-Oracle Open Office Math : floor brackets
-Oracle Open Office Math : focus of controls
-Oracle Open Office Math : folder creation
-Oracle Open Office Math : font attributes
-Oracle Open Office Math : font attributes;changing defaults
-Oracle Open Office Math : font lists
-Oracle Open Office Math : font name box
-Oracle Open Office Math : font sizes
-Oracle Open Office Math : font sizes;bullets
-Oracle Open Office Math : font sizes;example
-Oracle Open Office Math : font sizes;in Oracle Open Office Math
-Oracle Open Office Math : font sizes;relative changes
-Oracle Open Office Math : font sizes;scaling on screen
-Oracle Open Office Math : font sizes;text
-Oracle Open Office Math : fonts
-Oracle Open Office Math : fonts;adding under UNIX
-Oracle Open Office Math : fonts;changing in templates
-Oracle Open Office Math : fonts;colors
-Oracle Open Office Math : fonts;default settings
-Oracle Open Office Math : fonts;effects
-Oracle Open Office Math : fonts;for HTML and Basic
-Oracle Open Office Math : fonts;formats
-Oracle Open Office Math : fonts;in Oracle Open Office Math
-Oracle Open Office Math : fonts;outlines
-Oracle Open Office Math : fonts;positions in text
-Oracle Open Office Math : fonts;shadows
-Oracle Open Office Math : fonts;specifying several
-Oracle Open Office Math : fonts;strikethrough
-Oracle Open Office Math : fonts;styles
-Oracle Open Office Math : fonts;text objects
-Oracle Open Office Math : Fontwork icons
-Oracle Open Office Math : footers
-Oracle Open Office Math : footers;backgrounds
-Oracle Open Office Math : for all symbol
-Oracle Open Office Math : form controls
-Oracle Open Office Math : form controls;assigning macros
-Oracle Open Office Math : form controls;protecting
-Oracle Open Office Math : form controls;toolbars
-Oracle Open Office Math : form fields
-Oracle Open Office Math : form filters
-Oracle Open Office Math : Form Navigator
-Oracle Open Office Math : format codes
-Oracle Open Office Math : format codes;numbers
-Oracle Open Office Math : format filling printing in Oracle Open Office Math
-Oracle Open Office Math : Format Paintbrush
-Oracle Open Office Math : formats
-Oracle Open Office Math : formats;Asian layout
-Oracle Open Office Math : formats;fonts
-Oracle Open Office Math : formats;maximizing page formats
-Oracle Open Office Math : formats;number and currency formats
-Oracle Open Office Math : formats;of currencies/date/time
-Oracle Open Office Math : formats;on opening and saving
-Oracle Open Office Math : formats;pasting in special formats
-Oracle Open Office Math : formats;positions
-Oracle Open Office Math : formats;tabulators
-Oracle Open Office Math : formatted fields
-Oracle Open Office Math : formatted fields;form functions
-Oracle Open Office Math : formatted fields;properties
-Oracle Open Office Math : formatting
-Oracle Open Office Math : formatting;Asian typography
-Oracle Open Office Math : formatting;axes in charts
-Oracle Open Office Math : formatting;changing default attributes
-Oracle Open Office Math : formatting;chart legends
-Oracle Open Office Math : formatting;copying
-Oracle Open Office Math : formatting;definition
-Oracle Open Office Math : formatting;expanding (Calc)
-Oracle Open Office Math : formatting;font effects
-Oracle Open Office Math : formatting;hyperlinks
-Oracle Open Office Math : formatting;in Oracle Open Office Math
-Oracle Open Office Math : formatting;pages
-Oracle Open Office Math : formatting;printer metrics (Writer)
-Oracle Open Office Math : formatting;reference list (Math)
-Oracle Open Office Math : formatting;undoing
-Oracle Open Office Math : formatting;undoing when writing
-Oracle Open Office Math : forms
-Oracle Open Office Math : forms;browsing
-Oracle Open Office Math : forms;Combo Box/List Box Wizard
-Oracle Open Office Math : forms;creating
-Oracle Open Office Math : forms;data
-Oracle Open Office Math : forms;designing (Base)
-Oracle Open Office Math : forms;events
-Oracle Open Office Math : forms;filtering data
-Oracle Open Office Math : forms;finding records
-Oracle Open Office Math : forms;focus after opening
-Oracle Open Office Math : forms;general information (Base)
-Oracle Open Office Math : forms;grouping controls
-Oracle Open Office Math : forms;HTML filters
-Oracle Open Office Math : forms;Navigator
-Oracle Open Office Math : forms;opening in design mode
-Oracle Open Office Math : forms;properties
-Oracle Open Office Math : forms;sorting data
-Oracle Open Office Math : forms;subforms
-Oracle Open Office Math : forms;wizards
-Oracle Open Office Math : forms;XForms
-Oracle Open Office Math : formula cursor in Oracle Open Office Math
-Oracle Open Office Math : formula display sizes
-Oracle Open Office Math : formula fonts
-Oracle Open Office Math : formula fonts;defining
-Oracle Open Office Math : formula parts
-Oracle Open Office Math : formula parts;manually aligning
-Oracle Open Office Math : formula parts;merging
-Oracle Open Office Math : formula texts
-Oracle Open Office Math : formula texts;printing in Oracle Open Office Math
-Oracle Open Office Math : formula view
-Oracle Open Office Math : formula view;refreshing
-Oracle Open Office Math : formulas
-Oracle Open Office Math : formulas;aligning
-Oracle Open Office Math : formulas;attributes in
-Oracle Open Office Math : formulas;element spacing
-Oracle Open Office Math : formulas;entering symbols in
-Oracle Open Office Math : formulas;examples
-Oracle Open Office Math : formulas;fit to text
-Oracle Open Office Math : formulas;in color
-Oracle Open Office Math : formulas;increasing size of display
-Oracle Open Office Math : formulas;line breaks
-Oracle Open Office Math : formulas;maximum size
-Oracle Open Office Math : formulas;new
-Oracle Open Office Math : formulas;reference tables
-Oracle Open Office Math : formulas;selections
-Oracle Open Office Math : formulas;starting formula editor
-Oracle Open Office Math : formulas;zooming out
-Oracle Open Office Math : formulas in reports
-Oracle Open Office Math : formulas in reports;editing
-Oracle Open Office Math : forums and support
-Oracle Open Office Math : fractions in formulas
-Oracle Open Office Math : frames
-Oracle Open Office Math : frames;around paragraphs
-Oracle Open Office Math : frames;around tables
-Oracle Open Office Math : frames;AutoCorrect function
-Oracle Open Office Math : frames;backgrounds
-Oracle Open Office Math : frames;captions (Writer)
-Oracle Open Office Math : frames;printing in Oracle Open Office Math
-Oracle Open Office Math : frames;protecting
-Oracle Open Office Math : frames;selection frames
-Oracle Open Office Math : frames;text fitting to frames
-Oracle Open Office Math : freeform lines
-Oracle Open Office Math : freeform lines;draw functions
-Oracle Open Office Math : FTP
-Oracle Open Office Math : FTP;opening documents
-Oracle Open Office Math : FTP;saving documents
-Oracle Open Office Math : full joins (Base)
-Oracle Open Office Math : full screen view
-Oracle Open Office Math : full-text search in Help
-Oracle Open Office Math : functions
-Oracle Open Office Math : functions;in Oracle Open Office Math
-Oracle Open Office Math : functions in reports
-Oracle Open Office Math : functions in reports;editing
-Oracle Open Office Math : functions operators
-Oracle Open Office Math : functions operators;list of
-Oracle Open Office Math : Gallery
-Oracle Open Office Math : Gallery;adding pictures
-Oracle Open Office Math : Gallery;dragging pictures to draw objects
-Oracle Open Office Math : Gallery;hiding/showing
-Oracle Open Office Math : Gallery;inserting pictures from
-Oracle Open Office Math : gaps in formulas
-Oracle Open Office Math : get method for form transmissions
-Oracle Open Office Math : getting support
-Oracle Open Office Math : GIF format
-Oracle Open Office Math : glossaries
-Oracle Open Office Math : glossaries;common terms
-Oracle Open Office Math : glossaries;Internet terms
-Oracle Open Office Math : gradients off for faster printing
-Oracle Open Office Math : graphic objects, see draw objects
-Oracle Open Office Math : graphical text art
-Oracle Open Office Math : graphics
-Oracle Open Office Math : graphics;cache
-Oracle Open Office Math : graphics;protecting
-Oracle Open Office Math : graphics, see also pictures
-Oracle Open Office Math : grayscale printing
-Oracle Open Office Math : greater than or equal to signs
-Oracle Open Office Math : greater than relations
-Oracle Open Office Math : Greek symbols in formulas
-Oracle Open Office Math : grid controls
-Oracle Open Office Math : grid controls;form functions
-Oracle Open Office Math : grids
-Oracle Open Office Math : grids;defaults (Writer/Calc)
-Oracle Open Office Math : grids;display options (Impress/Draw)
-Oracle Open Office Math : grids;displaying lines (Calc)
-Oracle Open Office Math : group box creation
-Oracle Open Office Math : grouping and brackets in Oracle Open Office Math
-Oracle Open Office Math : grouping brackets
-Oracle Open Office Math : groups
-Oracle Open Office Math : groups;entering/exiting/ungrouping
-Oracle Open Office Math : groups;naming
-Oracle Open Office Math : groups;of controls
-Oracle Open Office Math : guides
-Oracle Open Office Math : guides;display options (Impress/Draw)
-Oracle Open Office Math : guides;displaying when moving objects (Impress)
-Oracle Open Office Math : guides;showing (Calc)
-Oracle Open Office Math : guides;showing when moving frames (Writer)
-Oracle Open Office Math : gutter
-Oracle Open Office Math : h-bar symbol
-Oracle Open Office Math : handles
-Oracle Open Office Math : handles;displaying (Writer)
-Oracle Open Office Math : handles;scaling
-Oracle Open Office Math : handles;showing simple/large handles (Calc)
-Oracle Open Office Math : Hangul/Hanja
-Oracle Open Office Math : hatching
-Oracle Open Office Math : headers
-Oracle Open Office Math : headers;backgrounds
-Oracle Open Office Math : headings
-Oracle Open Office Math : headings;entering as text box
-Oracle Open Office Math : Hebrew
-Oracle Open Office Math : Hebrew;entering text
-Oracle Open Office Math : Hebrew;language settings
-Oracle Open Office Math : Help
-Oracle Open Office Math : Help;bookmarks
-Oracle Open Office Math : Help;extended tips on/off
-Oracle Open Office Math : Help;full-text search
-Oracle Open Office Math : Help;Help tips
-Oracle Open Office Math : Help;keywords
-Oracle Open Office Math : Help;navigation pane showing/hiding
-Oracle Open Office Math : Help;style sheets
-Oracle Open Office Math : Help;topics
-Oracle Open Office Math : Help Agent
-Oracle Open Office Math : Help Agent;help
-Oracle Open Office Math : Help Agent;options
-Oracle Open Office Math : Help tips
-Oracle Open Office Math : Help tips;hiding
-Oracle Open Office Math : hidden controls in Form Navigator
-Oracle Open Office Math : hidden fields display (Writer)
-Oracle Open Office Math : hidden pages
-Oracle Open Office Math : hidden pages;printing in presentations
-Oracle Open Office Math : hidden text
-Oracle Open Office Math : hidden text;showing (Writer)
-Oracle Open Office Math : hiding
-Oracle Open Office Math : hiding;changes
-Oracle Open Office Math : hiding;docked windows
-Oracle Open Office Math : hiding;navigation pane in Help window
-Oracle Open Office Math : high contrast mode
-Oracle Open Office Math : Hindi
-Oracle Open Office Math : Hindi;entering text
-Oracle Open Office Math : Hindi;language settings
-Oracle Open Office Math : horizontal scrollbars (Writer)
-Oracle Open Office Math : hotspots
-Oracle Open Office Math : HTML
-Oracle Open Office Math : HTML;definition
-Oracle Open Office Math : HTML;export character set
-Oracle Open Office Math : HTML;fonts for source display
-Oracle Open Office Math : HTML;importing META tags
-Oracle Open Office Math : HTML;live presentations
-Oracle Open Office Math : HTML documents
-Oracle Open Office Math : HTML documents;auto reloading
-Oracle Open Office Math : HTML documents;importing/exporting
-Oracle Open Office Math : HTML documents;META tags in
-Oracle Open Office Math : HTML documents;new
-Oracle Open Office Math : HTML documents;source text
-Oracle Open Office Math : hyperbolic cosine function
-Oracle Open Office Math : hyperbolic cotangent function
-Oracle Open Office Math : hyperbolic sine function
-Oracle Open Office Math : hyperbolic tangent function
-Oracle Open Office Math : hyperlinks
-Oracle Open Office Math : hyperlinks;assigning macros
-Oracle Open Office Math : hyperlinks;character formats
-Oracle Open Office Math : hyperlinks;definition
-Oracle Open Office Math : hyperlinks;deleting
-Oracle Open Office Math : hyperlinks;editing
-Oracle Open Office Math : hyperlinks;inserting
-Oracle Open Office Math : hyperlinks;relative and absolute
-Oracle Open Office Math : hyperlinks;turning off automatic recognition
-Oracle Open Office Math : hyperlinks, see also links
-Oracle Open Office Math : hyphenation
-Oracle Open Office Math : hyphenation;activating for a language
-Oracle Open Office Math : hyphenation;minimal number of characters
-Oracle Open Office Math : hyphens
-Oracle Open Office Math : hyphens;displaying custom (Writer)
-Oracle Open Office Math : hyphens;inserting custom
-Oracle Open Office Math : icon bars, see toolbars
-Oracle Open Office Math : icon sizes
-Oracle Open Office Math : identical to relation
-Oracle Open Office Math : ignore list for spellcheck
-Oracle Open Office Math : illustrations, see pictures
-Oracle Open Office Math : image button creation
-Oracle Open Office Math : image control creation
-Oracle Open Office Math : image of relation
-Oracle Open Office Math : ImageMap
-Oracle Open Office Math : ImageMap;definition
-Oracle Open Office Math : ImageMap;editor
-Oracle Open Office Math : images
-Oracle Open Office Math : images;ImageMap
-Oracle Open Office Math : images;inserting and editing bitmaps
-Oracle Open Office Math : images, see also pictures
-Oracle Open Office Math : imaginary part of a complex number
-Oracle Open Office Math : IME
-Oracle Open Office Math : IME;definition
-Oracle Open Office Math : IME;showing/hiding
-Oracle Open Office Math : import filters
-Oracle Open Office Math : import restrictions for Microsoft Office
-Oracle Open Office Math : importing
-Oracle Open Office Math : importing;bitmaps
-Oracle Open Office Math : importing;compatibility settings for text import
-Oracle Open Office Math : importing;databases
-Oracle Open Office Math : importing;documents in other formats
-Oracle Open Office Math : importing;from XML
-Oracle Open Office Math : importing;HTML and text documents
-Oracle Open Office Math : importing;HTML with META tags
-Oracle Open Office Math : importing;Microsoft Office documents with VBA code
-Oracle Open Office Math : importing;Oracle Open Office Math formulas
-Oracle Open Office Math : importing;tables in text format
-Oracle Open Office Math : importing;templates
-Oracle Open Office Math : improvement program
-Oracle Open Office Math : inches
-Oracle Open Office Math : included in set operator
-Oracle Open Office Math : includes set operator
-Oracle Open Office Math : Index tab in Help
-Oracle Open Office Math : indexes
-Oracle Open Office Math : indexes;adding to formulas
-Oracle Open Office Math : indexes;backgrounds
-Oracle Open Office Math : indexes;showing/hiding Help index tab
-Oracle Open Office Math : indexes and exponents in Oracle Open Office Math
-Oracle Open Office Math : indicator lines in text
-Oracle Open Office Math : inequation
-Oracle Open Office Math : infinity symbol
-Oracle Open Office Math : inner joins (Base)
-Oracle Open Office Math : input method window
-Oracle Open Office Math : insert mode for entering text
-Oracle Open Office Math : inserting
-Oracle Open Office Math : inserting;brackets
-Oracle Open Office Math : inserting;buttons in toolbars
-Oracle Open Office Math : inserting;cell ranges from spreadsheets
-Oracle Open Office Math : inserting;charts
-Oracle Open Office Math : inserting;clipboard options
-Oracle Open Office Math : inserting;comments
-Oracle Open Office Math : inserting;comments in Oracle Open Office Math
-Oracle Open Office Math : inserting;data from text documents
-Oracle Open Office Math : inserting;datasource records in spreadsheets
-Oracle Open Office Math : inserting;drawings
-Oracle Open Office Math : inserting;floating frames
-Oracle Open Office Math : inserting;Fontwork objects
-Oracle Open Office Math : inserting;form fields
-Oracle Open Office Math : inserting;gaps
-Oracle Open Office Math : inserting;hyperlinks
-Oracle Open Office Math : inserting;line breaks in cells
-Oracle Open Office Math : inserting;movies/sounds
-Oracle Open Office Math : inserting;new text tables defaults
-Oracle Open Office Math : inserting;objects from Gallery
-Oracle Open Office Math : inserting;OLE objects
-Oracle Open Office Math : inserting;paragraph borders
-Oracle Open Office Math : inserting;paragraph bullets
-Oracle Open Office Math : inserting;pictures in Gallery
-Oracle Open Office Math : inserting;plug-ins
-Oracle Open Office Math : inserting;push buttons
-Oracle Open Office Math : inserting;special characters
-Oracle Open Office Math : inserting;tab stops
-Oracle Open Office Math : inserting;text in Oracle Open Office Math
-Oracle Open Office Math : inserting;textures on chart bars
-Oracle Open Office Math : installing
-Oracle Open Office Math : installing;ActiveX control
-Oracle Open Office Math : installing;mobile device filters
-Oracle Open Office Math : installing;UNO components
-Oracle Open Office Math : installing;XML filters
-Oracle Open Office Math : instructions
-Oracle Open Office Math : instructions;general
-Oracle Open Office Math : instructions;Oracle Open Office Math
-Oracle Open Office Math : integral limits
-Oracle Open Office Math : integrals
-Oracle Open Office Math : integrals;example
-Oracle Open Office Math : integrals;signs
-Oracle Open Office Math : Internet
-Oracle Open Office Math : Internet;checking for updates
-Oracle Open Office Math : Internet;Internet Explorer for displaying Oracle Open Office documents
-Oracle Open Office Math : Internet;presentations
-Oracle Open Office Math : Internet;starting searches
-Oracle Open Office Math : Internet glossary
-Oracle Open Office Math : intersection of sets
-Oracle Open Office Math : invert filter
-Oracle Open Office Math : invisible areas
-Oracle Open Office Math : italic attribute in Oracle Open Office Math
-Oracle Open Office Math : italic text
-Oracle Open Office Math : iterative references in spreadsheets
-Oracle Open Office Math : Java
-Oracle Open Office Math : Java;definition
-Oracle Open Office Math : Java;setting options
-Oracle Open Office Math : JDBC
-Oracle Open Office Math : JDBC;databases (Base)
-Oracle Open Office Math : JDBC;definition
-Oracle Open Office Math : joining
-Oracle Open Office Math : joining;paragraphs
-Oracle Open Office Math : joining;tables (Base)
-Oracle Open Office Math : joins in databases (Base)
-Oracle Open Office Math : justifying text
-Oracle Open Office Math : kerning
-Oracle Open Office Math : kerning;Asian texts
-Oracle Open Office Math : kerning;definition
-Oracle Open Office Math : kerning;in characters
-Oracle Open Office Math : key fields for relations (Base)
-Oracle Open Office Math : keyboard
-Oracle Open Office Math : keyboard;assigning/editing shortcut keys
-Oracle Open Office Math : keyboard;general commands
-Oracle Open Office Math : keyboard;removing numbering
-Oracle Open Office Math : keys
-Oracle Open Office Math : keys;adding push buttons
-Oracle Open Office Math : keys;primary keys (Base)
-Oracle Open Office Math : kiosk export
-Oracle Open Office Math : labels
-Oracle Open Office Math : labels;creating and synchronizing
-Oracle Open Office Math : labels;for draw objects
-Oracle Open Office Math : labels;form functions
-Oracle Open Office Math : labels;from databases
-Oracle Open Office Math : labels, see also names/callouts
-Oracle Open Office Math : lambda-bar symbol
-Oracle Open Office Math : languages
-Oracle Open Office Math : languages;activating modules
-Oracle Open Office Math : languages;Asian support
-Oracle Open Office Math : languages;complex text layout
-Oracle Open Office Math : languages;locale settings
-Oracle Open Office Math : languages;selecting for text
-Oracle Open Office Math : languages;setting options
-Oracle Open Office Math : languages;spellcheck
-Oracle Open Office Math : languages;spellchecking and formatting
-Oracle Open Office Math : large handles (Writer)
-Oracle Open Office Math : large icons
-Oracle Open Office Math : layer arrangement
-Oracle Open Office Math : layout
-Oracle Open Office Math : layout;importing Word documents
-Oracle Open Office Math : layout;pages
-Oracle Open Office Math : LDAP server
-Oracle Open Office Math : LDAP server;address books (Base)
-Oracle Open Office Math : LDAP server;sign on options
-Oracle Open Office Math : leading between paragraphs
-Oracle Open Office Math : left alignment of paragraphs
-Oracle Open Office Math : left arrow symbol
-Oracle Open Office Math : left joins (Base)
-Oracle Open Office Math : left-justified alignment (Math)
-Oracle Open Office Math : legends
-Oracle Open Office Math : legends;charts
-Oracle Open Office Math : legends;draw objects
-Oracle Open Office Math : legends;rounding corners
-Oracle Open Office Math : less than or equal to signs
-Oracle Open Office Math : less than relations
-Oracle Open Office Math : Letter Wizard
-Oracle Open Office Math : levels
-Oracle Open Office Math : levels;depth stagger
-Oracle Open Office Math : levels;macro security
-Oracle Open Office Math : limits
-Oracle Open Office Math : limits;in Oracle Open Office Math
-Oracle Open Office Math : limits;in sums/integrals
-Oracle Open Office Math : limits of tables (Writer)
-Oracle Open Office Math : line above attribute
-Oracle Open Office Math : line breaks
-Oracle Open Office Math : line breaks;in cells
-Oracle Open Office Math : line breaks;in formulas
-Oracle Open Office Math : line spacing
-Oracle Open Office Math : line spacing;context menu in paragraphs
-Oracle Open Office Math : line spacing;paragraph
-Oracle Open Office Math : line styles
-Oracle Open Office Math : line styles;applying
-Oracle Open Office Math : line styles;defining
-Oracle Open Office Math : line through attribute
-Oracle Open Office Math : lines
-Oracle Open Office Math : lines;defining ends
-Oracle Open Office Math : lines;draw functions
-Oracle Open Office Math : lines;drawing in text
-Oracle Open Office Math : lines;editing points
-Oracle Open Office Math : lines;inserting in formulas
-Oracle Open Office Math : lines;removing automatic lines
-Oracle Open Office Math : lines;scalable
-Oracle Open Office Math : lines;with edges
-Oracle Open Office Math : lines of text
-Oracle Open Office Math : lines of text;alignment
-Oracle Open Office Math : links
-Oracle Open Office Math : links;between cells and controls
-Oracle Open Office Math : links;by drag and drop
-Oracle Open Office Math : links;character formats
-Oracle Open Office Math : links;definition
-Oracle Open Office Math : links;editing hyperlinks
-Oracle Open Office Math : links;inserting
-Oracle Open Office Math : links;modifying
-Oracle Open Office Math : links;opening files with
-Oracle Open Office Math : links;relational databases (Base)
-Oracle Open Office Math : links;turning off automatic recognition
-Oracle Open Office Math : links;updating options (Writer)
-Oracle Open Office Math : links;updating specific links
-Oracle Open Office Math : list box creation
-Oracle Open Office Math : lists
-Oracle Open Office Math : lists;data assigned to controls
-Oracle Open Office Math : lists;registered databases (Base)
-Oracle Open Office Math : lists;regular expressions
-Oracle Open Office Math : live presentations on the Internet
-Oracle Open Office Math : loading
-Oracle Open Office Math : loading;documents
-Oracle Open Office Math : loading;documents from other formats
-Oracle Open Office Math : loading;HTML documents, automatically
-Oracle Open Office Math : loading;Microsoft Office documents with VBA code
-Oracle Open Office Math : loading;reloading
-Oracle Open Office Math : loading;XML files
-Oracle Open Office Math : locale settings
-Oracle Open Office Math : logarithms
-Oracle Open Office Math : logic symbols
-Oracle Open Office Math : logical operators
-Oracle Open Office Math : lower limits
-Oracle Open Office Math : lowercase letters
-Oracle Open Office Math : lowercase letters;font effects
-Oracle Open Office Math : Macro Wizard (Base)
-Oracle Open Office Math : macros
-Oracle Open Office Math : macros;assigning to events in forms
-Oracle Open Office Math : macros;attaching new (Base)
-Oracle Open Office Math : macros;in MS Office documents
-Oracle Open Office Math : macros;interrupting
-Oracle Open Office Math : macros;organizing
-Oracle Open Office Math : macros;recording
-Oracle Open Office Math : macros;security
-Oracle Open Office Math : macros;security levels
-Oracle Open Office Math : macros;security warning dialog
-Oracle Open Office Math : macros;selecting security warnings
-Oracle Open Office Math : magnifiers
-Oracle Open Office Math : margins
-Oracle Open Office Math : margins;pages
-Oracle Open Office Math : margins;setting with the mouse
-Oracle Open Office Math : margins;shadows
-Oracle Open Office Math : markers
-Oracle Open Office Math : markers;definition
-Oracle Open Office Math : markers;next
-Oracle Open Office Math : markers;previous
-Oracle Open Office Math : marking changes
-Oracle Open Office Math : marking, see selecting
-Oracle Open Office Math : Math formula editor
-Oracle Open Office Math : mathematical symbols
-Oracle Open Office Math : mathematical symbols;catalog
-Oracle Open Office Math : mathematical symbols;other
-Oracle Open Office Math : matrices
-Oracle Open Office Math : matrices;arranging
-Oracle Open Office Math : maximum formula size
-Oracle Open Office Math : measurement units
-Oracle Open Office Math : measurement units;changing on rulers
-Oracle Open Office Math : measurement units;converting
-Oracle Open Office Math : measurement units;selecting
-Oracle Open Office Math : Media Player window
-Oracle Open Office Math : menus
-Oracle Open Office Math : menus;activating context menus
-Oracle Open Office Math : menus;assigning macros
-Oracle Open Office Math : menus;customizing
-Oracle Open Office Math : merging
-Oracle Open Office Math : merging;documents
-Oracle Open Office Math : merging;formula parts
-Oracle Open Office Math : META tags
-Oracle Open Office Math : metrics
-Oracle Open Office Math : metrics;converting
-Oracle Open Office Math : metrics;document formatting (Writer)
-Oracle Open Office Math : metrics;in sheets
-Oracle Open Office Math : Microsoft Office
-Oracle Open Office Math : Microsoft Office;Access databases (base)
-Oracle Open Office Math : Microsoft Office;as default file format
-Oracle Open Office Math : Microsoft Office;document import restrictions
-Oracle Open Office Math : Microsoft Office;feature comparisons
-Oracle Open Office Math : Microsoft Office;importing password protected files
-Oracle Open Office Math : Microsoft Office;importing Word documents
-Oracle Open Office Math : Microsoft Office;importing/exporting VBA code
-Oracle Open Office Math : Microsoft Office;new users information
-Oracle Open Office Math : Microsoft Office;opening Microsoft documents
-Oracle Open Office Math : Microsoft Office;reassigning document types
-Oracle Open Office Math : migrating macros (Base)
-Oracle Open Office Math : minus signs
-Oracle Open Office Math : minus/plus signs
-Oracle Open Office Math : mobile device filters
-Oracle Open Office Math : models in XForms
-Oracle Open Office Math : modifying, see changing
-Oracle Open Office Math : more controls
-Oracle Open Office Math : mosaic filter
-Oracle Open Office Math : mouse
-Oracle Open Office Math : mouse;pointers when using drag and drop
-Oracle Open Office Math : mouse;positioning
-Oracle Open Office Math : movies
-Oracle Open Office Math : moving
-Oracle Open Office Math : moving;tab stops on ruler
-Oracle Open Office Math : moving;toolbars
-Oracle Open Office Math : moving;using guide lines in presentations
-Oracle Open Office Math : MS ADO interface (Base)
-Oracle Open Office Math : much greater than relation
-Oracle Open Office Math : much less than relation
-Oracle Open Office Math : multi-line formulas
-Oracle Open Office Math : multi-line formulas;aligning
-Oracle Open Office Math : multi-line titles in forms
-Oracle Open Office Math : multiple documents
-Oracle Open Office Math : multiple documents;opening
-Oracle Open Office Math : multiple selection
-Oracle Open Office Math : multiplication signs
-Oracle Open Office Math : music
-Oracle Open Office Math : My Documents folder
-Oracle Open Office Math : My Documents folder;changing work directory
-Oracle Open Office Math : My Documents folder;opening
-Oracle Open Office Math : MySQL databases (Base)
-Oracle Open Office Math : Nabla operator
-Oracle Open Office Math : names
-Oracle Open Office Math : names;multi-line titles
-Oracle Open Office Math : names;objects
-Oracle Open Office Math : names, see also labels/callouts
-Oracle Open Office Math : namespace organization in XForms
-Oracle Open Office Math : native SQL (Base)
-Oracle Open Office Math : natural exponential functions
-Oracle Open Office Math : natural logarithms
-Oracle Open Office Math : natural numbers
-Oracle Open Office Math : navigating
-Oracle Open Office Math : navigating;in documents
-Oracle Open Office Math : Navigation bar
-Oracle Open Office Math : Navigation bar;controls
-Oracle Open Office Math : Navigation bar;forms
-Oracle Open Office Math : Navigator
-Oracle Open Office Math : Navigator;comments
-Oracle Open Office Math : Navigator;contents as lists
-Oracle Open Office Math : Navigator;docking
-Oracle Open Office Math : Navigator;working with
-Oracle Open Office Math : network identity options
-Oracle Open Office Math : new databases
-Oracle Open Office Math : new documents
-Oracle Open Office Math : new lines in cells
-Oracle Open Office Math : new symbols in Oracle Open Office Math
-Oracle Open Office Math : new windows
-Oracle Open Office Math : non-breaking dashes
-Oracle Open Office Math : non-breaking spaces (Writer)
-Oracle Open Office Math : non-printing characters (Writer)
-Oracle Open Office Math : not included in set operator
-Oracle Open Office Math : NOT operator
-Oracle Open Office Math : not subset set operators
-Oracle Open Office Math : not superset set operators
-Oracle Open Office Math : number formats
-Oracle Open Office Math : number formats;codes
-Oracle Open Office Math : number formats;formats
-Oracle Open Office Math : number formats;recognition in text tables
-Oracle Open Office Math : number of pages
-Oracle Open Office Math : number of sheets
-Oracle Open Office Math : number of tables
-Oracle Open Office Math : numbering
-Oracle Open Office Math : numbering;options
-Oracle Open Office Math : numbering;turning off
-Oracle Open Office Math : numbering;using automatically
-Oracle Open Office Math : numbers
-Oracle Open Office Math : numbers;date, time and currency formats
-Oracle Open Office Math : numbers;decimal places (Calc)
-Oracle Open Office Math : numerical fields in forms
-Oracle Open Office Math : objects
-Oracle Open Office Math : objects;always moveable (Impress/Draw)
-Oracle Open Office Math : objects;arranging within stacks
-Oracle Open Office Math : objects;copying when moving in presentations
-Oracle Open Office Math : objects;definition
-Oracle Open Office Math : objects;displaying in spreadsheets
-Oracle Open Office Math : objects;displaying in text documents
-Oracle Open Office Math : objects;editing
-Oracle Open Office Math : objects;inserting from Gallery
-Oracle Open Office Math : objects;inserting OLE objects
-Oracle Open Office Math : objects;moving and resizing with mouse
-Oracle Open Office Math : objects;naming
-Oracle Open Office Math : objects;opening
-Oracle Open Office Math : objects;quickly moving to
-Oracle Open Office Math : objects;titles and descriptions
-Oracle Open Office Math : ODBC
-Oracle Open Office Math : ODBC;database (Base)
-Oracle Open Office Math : ODBC;definition
-Oracle Open Office Math : ODF file formats
-Oracle Open Office Math : Office
-Oracle Open Office Math : Office;Microsoft Office and Oracle Open Office
-Oracle Open Office Math : OLE
-Oracle Open Office Math : OLE;definition
-Oracle Open Office Math : OLE objects
-Oracle Open Office Math : OLE objects;arranging within stacks
-Oracle Open Office Math : OLE objects;captions (Writer)
-Oracle Open Office Math : OLE objects;inserting
-Oracle Open Office Math : OLE objects;number of
-Oracle Open Office Math : OLE objects;protecting
-Oracle Open Office Math : one and a half line spacing in text
-Oracle Open Office Math : online feedback options
-Oracle Open Office Math : online registration
-Oracle Open Office Math : online update options
-Oracle Open Office Math : online updates
-Oracle Open Office Math : online updates;checking automatically
-Oracle Open Office Math : online updates;checking manually
-Oracle Open Office Math : Open/Save dialogs
-Oracle Open Office Math : OpenDocument file formats
-Oracle Open Office Math : OpenGL
-Oracle Open Office Math : OpenGL;definition
-Oracle Open Office Math : opening
-Oracle Open Office Math : opening;context menus
-Oracle Open Office Math : opening;database files
-Oracle Open Office Math : opening;dialog settings
-Oracle Open Office Math : opening;documents
-Oracle Open Office Math : opening;documents from other formats
-Oracle Open Office Math : opening;documents on WebDAV server
-Oracle Open Office Math : opening;files with links
-Oracle Open Office Math : opening;files, with placeholders
-Oracle Open Office Math : opening;forms
-Oracle Open Office Math : opening;Microsoft Office files
-Oracle Open Office Math : opening;mobile device documents
-Oracle Open Office Math : opening;objects
-Oracle Open Office Math : opening;reports
-Oracle Open Office Math : opening;several files
-Oracle Open Office Math : opening;XForms
-Oracle Open Office Math : operator brackets
-Oracle Open Office Math : operators
-Oracle Open Office Math : operators;default filters
-Oracle Open Office Math : operators;general
-Oracle Open Office Math : operators;in Math
-Oracle Open Office Math : operators;list of
-Oracle Open Office Math : operators;unary and binary
-Oracle Open Office Math : optional hyphens (Writer)
-Oracle Open Office Math : options
-Oracle Open Office Math : options;accessibility
-Oracle Open Office Math : options;appearance
-Oracle Open Office Math : options;compatibility (Writer)
-Oracle Open Office Math : options;improvement program
-Oracle Open Office Math : options;network identity
-Oracle Open Office Math : options;online update
-Oracle Open Office Math : options;tools
-Oracle Open Office Math : OR operator
-Oracle Open Office Math : Oracle databases (base)
-Oracle Open Office Math : Oracle Open Office Base data sources
-Oracle Open Office Math : Oracle Open Office Basic scripts in HTML documents
-Oracle Open Office Math : Oracle Open Office documents
-Oracle Open Office Math : Oracle Open Office documents;mobile device filters
-Oracle Open Office Math : Oracle Open Office documents;viewing and editing in Internet Explorer
-Oracle Open Office Math : Oracle Open Office Math
-Oracle Open Office Math : Oracle Open Office Math;entering symbols in
-Oracle Open Office Math : Oracle Open Office Math;examples
-Oracle Open Office Math : Oracle Open Office Math;formatting
-Oracle Open Office Math : Oracle Open Office Math;general instructions
-Oracle Open Office Math : Oracle Open Office Math;reference list
-Oracle Open Office Math : Oracle Open Office Math;relations
-Oracle Open Office Math : Oracle Open Office Math start
-Oracle Open Office Math : ordering
-Oracle Open Office Math : ordering;objects
-Oracle Open Office Math : organizing
-Oracle Open Office Math : organizing;macros and scripts
-Oracle Open Office Math : organizing;namespaces in XForms
-Oracle Open Office Math : organizing;styles
-Oracle Open Office Math : organizing;templates
-Oracle Open Office Math : original by correspondence
-Oracle Open Office Math : original size
-Oracle Open Office Math : original size;printing in Oracle Open Office Math
-Oracle Open Office Math : original size;restoring after cropping
-Oracle Open Office Math : orphaned brackets
-Oracle Open Office Math : orthogonal relations
-Oracle Open Office Math : other operators
-Oracle Open Office Math : other operators;list of
-Oracle Open Office Math : outlines
-Oracle Open Office Math : outlines;font effects
-Oracle Open Office Math : outlines;outline symbols
-Oracle Open Office Math : outlines;sending to presentations
-Oracle Open Office Math : overline attribute
-Oracle Open Office Math : overwrite mode
-Oracle Open Office Math : owns command
-Oracle Open Office Math : packages, see extensions
-Oracle Open Office Math : page breaks
-Oracle Open Office Math : page breaks;displaying (Calc)
-Oracle Open Office Math : page formats
-Oracle Open Office Math : page formats;maximizing
-Oracle Open Office Math : page formats;restriction
-Oracle Open Office Math : page styles
-Oracle Open Office Math : page styles;editing/applying with statusbar
-Oracle Open Office Math : pages
-Oracle Open Office Math : pages;backgrounds in all applications
-Oracle Open Office Math : pages;formatting and numbering
-Oracle Open Office Math : pages;printing page names in presentations
-Oracle Open Office Math : pages;scaling
-Oracle Open Office Math : pages;selecting one to print
-Oracle Open Office Math : paint box
-Oracle Open Office Math : paint can symbol
-Oracle Open Office Math : pair kerning
-Oracle Open Office Math : Palm file filters
-Oracle Open Office Math : paper formats
-Oracle Open Office Math : paper size warning
-Oracle Open Office Math : paper trays
-Oracle Open Office Math : paragraph marks
-Oracle Open Office Math : paragraph marks;displaying (Writer)
-Oracle Open Office Math : paragraph styles
-Oracle Open Office Math : paragraph styles;languages
-Oracle Open Office Math : paragraph styles;modifying basic fonts
-Oracle Open Office Math : paragraphs
-Oracle Open Office Math : paragraphs;alignment
-Oracle Open Office Math : paragraphs;Asian typography
-Oracle Open Office Math : paragraphs;defining borders
-Oracle Open Office Math : paragraphs;hidden paragraphs (Writer)
-Oracle Open Office Math : paragraphs;increasing indents of
-Oracle Open Office Math : paragraphs;indents, margins and columns
-Oracle Open Office Math : paragraphs;inserting bullets
-Oracle Open Office Math : paragraphs;joining
-Oracle Open Office Math : paragraphs;numbering automatically
-Oracle Open Office Math : paragraphs;removing blank ones
-Oracle Open Office Math : paragraphs;spacing
-Oracle Open Office Math : paragraphs;tab stops
-Oracle Open Office Math : parallel relation
-Oracle Open Office Math : parameters
-Oracle Open Office Math : parameters;command line
-Oracle Open Office Math : parameters;queries (Base)
-Oracle Open Office Math : parentheses (Math)
-Oracle Open Office Math : partial differentiation symbol
-Oracle Open Office Math : passwords for protecting contents
-Oracle Open Office Math : pasting
-Oracle Open Office Math : pasting;cell ranges
-Oracle Open Office Math : pasting;cell ranges from spreadsheets
-Oracle Open Office Math : pasting;data from text documents
-Oracle Open Office Math : pasting;draw objects
-Oracle Open Office Math : pasting;draw objects from other documents
-Oracle Open Office Math : pasting;formatted/unformatted text
-Oracle Open Office Math : pasting;from data source view
-Oracle Open Office Math : pasting;from data sources to Oracle Open Office Calc
-Oracle Open Office Math : pasting;pictures from other documents
-Oracle Open Office Math : pasting;sheet areas in text documents
-Oracle Open Office Math : pasting;to Gallery
-Oracle Open Office Math : paths
-Oracle Open Office Math : paths;changing work directory
-Oracle Open Office Math : paths;defaults
-Oracle Open Office Math : pattern editor
-Oracle Open Office Math : pattern fields
-Oracle Open Office Math : pattern fields;form functions
-Oracle Open Office Math : patterns for objects
-Oracle Open Office Math : PDF
-Oracle Open Office Math : PDF;export
-Oracle Open Office Math : PDF;PostScript to PDF converter, UNIX
-Oracle Open Office Math : personal data input
-Oracle Open Office Math : phonetic guide
-Oracle Open Office Math : picklist creation
-Oracle Open Office Math : picture by correspondence
-Oracle Open Office Math : pictures
-Oracle Open Office Math : pictures;adding to Gallery
-Oracle Open Office Math : pictures;arranging within stacks
-Oracle Open Office Math : pictures;assigning macros
-Oracle Open Office Math : pictures;backgrounds
-Oracle Open Office Math : pictures;captions (Writer)
-Oracle Open Office Math : pictures;changing paths
-Oracle Open Office Math : pictures;cropping and zooming
-Oracle Open Office Math : pictures;displaying in Calc
-Oracle Open Office Math : pictures;displaying in Writer (Writer)
-Oracle Open Office Math : pictures;drag and drop between documents
-Oracle Open Office Math : pictures;drawing
-Oracle Open Office Math : pictures;editing
-Oracle Open Office Math : pictures;filters
-Oracle Open Office Math : pictures;ImageMap
-Oracle Open Office Math : pictures;inserting automatically
-Oracle Open Office Math : pictures;inserting from Gallery
-Oracle Open Office Math : pictures;number of
-Oracle Open Office Math : pictures;printing
-Oracle Open Office Math : pictures;scaling/resizing
-Oracle Open Office Math : pixel editor
-Oracle Open Office Math : pixel graphics
-Oracle Open Office Math : pixel graphics;inserting and editing
-Oracle Open Office Math : pixel patterns
-Oracle Open Office Math : placeholders
-Oracle Open Office Math : placeholders;in SQL queries
-Oracle Open Office Math : placeholders;inserting in formulas
-Oracle Open Office Math : placeholders;on opening files
-Oracle Open Office Math : placeholders;position of next
-Oracle Open Office Math : placeholders;previous marker
-Oracle Open Office Math : placing toolbars
-Oracle Open Office Math : playing movies and sound files
-Oracle Open Office Math : plotting data as charts
-Oracle Open Office Math : plug-ins
-Oracle Open Office Math : plug-ins;activating and deactivating
-Oracle Open Office Math : plug-ins;definition
-Oracle Open Office Math : plug-ins;inserting
-Oracle Open Office Math : plus signs
-Oracle Open Office Math : plus/minus signs
-Oracle Open Office Math : pocket device appliances
-Oracle Open Office Math : Pocket PC file filters
-Oracle Open Office Math : points
-Oracle Open Office Math : points;reducing editing points when snapping (Impress/Draw)
-Oracle Open Office Math : polygon drawing
-Oracle Open Office Math : pop-art filter
-Oracle Open Office Math : portable document format
-Oracle Open Office Math : positioning
-Oracle Open Office Math : positioning;draw objects and controls
-Oracle Open Office Math : positioning;fonts
-Oracle Open Office Math : positioning;objects
-Oracle Open Office Math : positioning;toolbars
-Oracle Open Office Math : post method for form transmissions
-Oracle Open Office Math : posterizing filter
-Oracle Open Office Math : PostScript
-Oracle Open Office Math : PostScript;creating files
-Oracle Open Office Math : PostScript;PDF converter, UNIX
-Oracle Open Office Math : PowerPoint export
-Oracle Open Office Math : powers
-Oracle Open Office Math : precision as shown (Calc)
-Oracle Open Office Math : predefining fonts
-Oracle Open Office Math : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
-Oracle Open Office Math : presentations
-Oracle Open Office Math : presentations;creating/opening
-Oracle Open Office Math : presentations;inserting spreadsheet cells
-Oracle Open Office Math : presentations;live on the Internet
-Oracle Open Office Math : presentations;print menu
-Oracle Open Office Math : presentations;saving
-Oracle Open Office Math : presentations;saving automatically
-Oracle Open Office Math : presentations;saving in other formats
-Oracle Open Office Math : presentations;sending as e-mail
-Oracle Open Office Math : presentations;starting with wizard
-Oracle Open Office Math : presentations;wizards
-Oracle Open Office Math : Presenter Console shortcuts
-Oracle Open Office Math : press buttons, see push buttons
-Oracle Open Office Math : previews
-Oracle Open Office Math : previews;fonts lists
-Oracle Open Office Math : primary keys
-Oracle Open Office Math : primary keys;defining
-Oracle Open Office Math : primary keys;design view
-Oracle Open Office Math : primary keys;inserting (Base)
-Oracle Open Office Math : print area selection
-Oracle Open Office Math : printer metrics for document formatting (Writer)
-Oracle Open Office Math : printers
-Oracle Open Office Math : printers;adding, UNIX
-Oracle Open Office Math : printers;choosing
-Oracle Open Office Math : printers;default printer
-Oracle Open Office Math : printers;faxes under UNIX
-Oracle Open Office Math : printers;maximum page formats
-Oracle Open Office Math : printers;paper trays
-Oracle Open Office Math : printers;properties
-Oracle Open Office Math : printing
-Oracle Open Office Math : printing;black and white
-Oracle Open Office Math : printing;brochures
-Oracle Open Office Math : printing;colors in grayscale
-Oracle Open Office Math : printing;comments
-Oracle Open Office Math : printing;copies
-Oracle Open Office Math : printing;creating individual jobs
-Oracle Open Office Math : printing;dates in presentations
-Oracle Open Office Math : printing;directly
-Oracle Open Office Math : printing;documents
-Oracle Open Office Math : printing;drawings defaults
-Oracle Open Office Math : printing;elements in text documents
-Oracle Open Office Math : printing;faster
-Oracle Open Office Math : printing;fitting to pages in Oracle Open Office Math
-Oracle Open Office Math : printing;fitting to pages in presentations
-Oracle Open Office Math : printing;formulas in Oracle Open Office Math
-Oracle Open Office Math : printing;hidden pages of presentations
-Oracle Open Office Math : printing;in original size in Oracle Open Office Math
-Oracle Open Office Math : printing;left/right pages
-Oracle Open Office Math : printing;queries (Base)
-Oracle Open Office Math : printing;scaling in Oracle Open Office Math
-Oracle Open Office Math : printing;selections
-Oracle Open Office Math : printing;text always in black
-Oracle Open Office Math : printing;text in reverse order
-Oracle Open Office Math : printing;tiling pages in presentations
-Oracle Open Office Math : printing;transparencies
-Oracle Open Office Math : printing;warnings
-Oracle Open Office Math : printing;without scaling in presentations
-Oracle Open Office Math : printing speed
-Oracle Open Office Math : product
-Oracle Open Office Math : programming
-Oracle Open Office Math : programming;Oracle Open Office
-Oracle Open Office Math : programming;scripting
-Oracle Open Office Math : properties
-Oracle Open Office Math : properties;fields in databases
-Oracle Open Office Math : properties;files
-Oracle Open Office Math : properties;form controls
-Oracle Open Office Math : properties;forms
-Oracle Open Office Math : properties;printers
-Oracle Open Office Math : proportional to relation
-Oracle Open Office Math : protected contents
-Oracle Open Office Math : protected dashes
-Oracle Open Office Math : protected database tables
-Oracle Open Office Math : protected documents
-Oracle Open Office Math : protected spaces
-Oracle Open Office Math : protected spaces;inserting
-Oracle Open Office Math : protected spaces;showing (Writer)
-Oracle Open Office Math : protecting
-Oracle Open Office Math : protecting;contents
-Oracle Open Office Math : protecting;recorded changes
-Oracle Open Office Math : proxy settings
-Oracle Open Office Math : push buttons
-Oracle Open Office Math : push buttons;adding to documents
-Oracle Open Office Math : push buttons;creating
-Oracle Open Office Math : queries
-Oracle Open Office Math : queries;copying (Base)
-Oracle Open Office Math : queries;creating in design view (Base)
-Oracle Open Office Math : queries;creating in SQL view
-Oracle Open Office Math : queries;defining (Base)
-Oracle Open Office Math : queries;deleting table links (Base)
-Oracle Open Office Math : queries;editing in data source view
-Oracle Open Office Math : queries;formulating filter conditions (Base)
-Oracle Open Office Math : queries;joining tables (Base)
-Oracle Open Office Math : queries;missing elements (Base)
-Oracle Open Office Math : queries;overview (Base)
-Oracle Open Office Math : queries;parameter queries (Base)
-Oracle Open Office Math : queries;printing (Base)
-Oracle Open Office Math : Query Wizard (Base)
-Oracle Open Office Math : Quickstarter
-Oracle Open Office Math : quotation marks
-Oracle Open Office Math : quotation marks;replacing
-Oracle Open Office Math : quotes
-Oracle Open Office Math : quotes;custom
-Oracle Open Office Math : quotient set
-Oracle Open Office Math : radio button creation
-Oracle Open Office Math : range of integral example
-Oracle Open Office Math : rational numbers
-Oracle Open Office Math : read-only documents
-Oracle Open Office Math : read-only documents;cursor
-Oracle Open Office Math : read-only documents;database tables on/off
-Oracle Open Office Math : read-only documents;editing
-Oracle Open Office Math : read-only documents;opening documents as
-Oracle Open Office Math : read-only items in Data Navigator
-Oracle Open Office Math : real numbers
-Oracle Open Office Math : real part of complex numbers
-Oracle Open Office Math : recognizing URLs automatically
-Oracle Open Office Math : recording
-Oracle Open Office Math : recording;changes
-Oracle Open Office Math : recording;macros
-Oracle Open Office Math : records
-Oracle Open Office Math : records;inserting comments
-Oracle Open Office Math : records;protecting
-Oracle Open Office Math : records;saving
-Oracle Open Office Math : records;searching in databases
-Oracle Open Office Math : rectangles with round corners
-Oracle Open Office Math : recursions in spreadsheets
-Oracle Open Office Math : redo command
-Oracle Open Office Math : reduced printing
-Oracle Open Office Math : reference lines
-Oracle Open Office Math : reference tables
-Oracle Open Office Math : reference tables;formulas
-Oracle Open Office Math : references
-Oracle Open Office Math : references;displaying in color (Calc)
-Oracle Open Office Math : references;expanding (Calc)
-Oracle Open Office Math : references;iterative (Calc)
-Oracle Open Office Math : refreshing formula view
-Oracle Open Office Math : register-true
-Oracle Open Office Math : register-true;definition
-Oracle Open Office Math : registering
-Oracle Open Office Math : registering;address books
-Oracle Open Office Math : registering;databases (Base)
-Oracle Open Office Math : registering;Oracle Open Office
-Oracle Open Office Math : regular expressions
-Oracle Open Office Math : regular expressions;list of
-Oracle Open Office Math : regular expressions;opening files
-Oracle Open Office Math : relational databases (Base)
-Oracle Open Office Math : relations
-Oracle Open Office Math : relations;creating and deleting (Base)
-Oracle Open Office Math : relations;in Oracle Open Office Math
-Oracle Open Office Math : relations;joining tables (Base)
-Oracle Open Office Math : relations;properties (Base)
-Oracle Open Office Math : relations operators
-Oracle Open Office Math : relations operators;list of
-Oracle Open Office Math : relative hyperlinks
-Oracle Open Office Math : relative saving of URLs
-Oracle Open Office Math : reloading
-Oracle Open Office Math : reloading;documents
-Oracle Open Office Math : reloading;HTML documents, automatically
-Oracle Open Office Math : remarks, see also comments
-Oracle Open Office Math : remote configurations
-Oracle Open Office Math : remove noise filter
-Oracle Open Office Math : removing
-Oracle Open Office Math : removing;bullets and numbering
-Oracle Open Office Math : removing;form filters
-Oracle Open Office Math : removing, see also deleting
-Oracle Open Office Math : repeating
-Oracle Open Office Math : repeating;commands
-Oracle Open Office Math : replacement options
-Oracle Open Office Math : replacement table
-Oracle Open Office Math : replacing
-Oracle Open Office Math : replacing;AutoCorrect function
-Oracle Open Office Math : replacing;dashes
-Oracle Open Office Math : replacing;tab stops (regular expressions)
-Oracle Open Office Math : Report Builder
-Oracle Open Office Math : reports
-Oracle Open Office Math : reports;creating
-Oracle Open Office Math : reports;error reports
-Oracle Open Office Math : reports;opening and editing
-Oracle Open Office Math : reports;templates
-Oracle Open Office Math : resetting
-Oracle Open Office Math : resetting;templates
-Oracle Open Office Math : resizing
-Oracle Open Office Math : resizing;fonts
-Oracle Open Office Math : resizing;objects, by mouse
-Oracle Open Office Math : resizing, see also scaling/zooming
-Oracle Open Office Math : resolution when printing bitmaps
-Oracle Open Office Math : restoring
-Oracle Open Office Math : restoring;default formatting
-Oracle Open Office Math : restoring;editing
-Oracle Open Office Math : reversed circumflex attribute
-Oracle Open Office Math : reversing printing order
-Oracle Open Office Math : review function
-Oracle Open Office Math : review function;accepting or rejecting changes
-Oracle Open Office Math : review function;comparing documents
-Oracle Open Office Math : review function;protecting records
-Oracle Open Office Math : review function;recording changes example
-Oracle Open Office Math : rich text control
-Oracle Open Office Math : right alignment of paragraphs
-Oracle Open Office Math : right angled relations
-Oracle Open Office Math : right arrow symbol
-Oracle Open Office Math : right joins (Base)
-Oracle Open Office Math : right-justified alignment in Oracle Open Office Math
-Oracle Open Office Math : right-to-left text
-Oracle Open Office Math : roots
-Oracle Open Office Math : rotating
-Oracle Open Office Math : rotating;3D text
-Oracle Open Office Math : round brackets
-Oracle Open Office Math : round corners
-Oracle Open Office Math : rounding precision (Calc)
-Oracle Open Office Math : row headers
-Oracle Open Office Math : row headers;displaying (Calc)
-Oracle Open Office Math : row headers;highlighting (Calc)
-Oracle Open Office Math : rulers
-Oracle Open Office Math : rulers;default settings
-Oracle Open Office Math : rulers;measurement units
-Oracle Open Office Math : rulers;visible in presentations
-Oracle Open Office Math : samples and templates
-Oracle Open Office Math : saving
-Oracle Open Office Math : saving;default file formats
-Oracle Open Office Math : saving;dialog settings
-Oracle Open Office Math : saving;documents
-Oracle Open Office Math : saving;documents for mobile devices
-Oracle Open Office Math : saving;documents in other formats
-Oracle Open Office Math : saving;documents, automatically
-Oracle Open Office Math : saving;in Microsoft Office file format
-Oracle Open Office Math : saving;options
-Oracle Open Office Math : saving;templates
-Oracle Open Office Math : saving;to XML
-Oracle Open Office Math : saving;VBA code in Microsoft Office documents
-Oracle Open Office Math : saving;with password by default
-Oracle Open Office Math : saving as command
-Oracle Open Office Math : saving as command;precautions
-Oracle Open Office Math : scalable braces
-Oracle Open Office Math : scalable lines with ceiling
-Oracle Open Office Math : scalable round brackets
-Oracle Open Office Math : scaling
-Oracle Open Office Math : scaling;font sizes in user interface
-Oracle Open Office Math : scaling;fonts
-Oracle Open Office Math : scaling;in Oracle Open Office Math
-Oracle Open Office Math : scaling;objects
-Oracle Open Office Math : scaling;pictures
-Oracle Open Office Math : scaling;printing in Oracle Open Office Math
-Oracle Open Office Math : scaling;when printing presentations
-Oracle Open Office Math : scaling, see also zooming
-Oracle Open Office Math : screen
-Oracle Open Office Math : screen;full screen views
-Oracle Open Office Math : screen;scaling
-Oracle Open Office Math : screen magnifiers
-Oracle Open Office Math : screen readers
-Oracle Open Office Math : script organization
-Oracle Open Office Math : scrollbars
-Oracle Open Office Math : scrollbars;controls
-Oracle Open Office Math : scrollbars;displaying (Calc)
-Oracle Open Office Math : scrollbars;horizontal and vertical (Writer)
-Oracle Open Office Math : search criteria for database functions in cells
-Oracle Open Office Math : search engines
-Oracle Open Office Math : search engines;definition
-Oracle Open Office Math : search engines;selecting
-Oracle Open Office Math : searching
-Oracle Open Office Math : searching;all sheets
-Oracle Open Office Math : searching;databases
-Oracle Open Office Math : searching;form filters
-Oracle Open Office Math : searching;Internet
-Oracle Open Office Math : searching;tables and forms
-Oracle Open Office Math : sections
-Oracle Open Office Math : sections;backgrounds
-Oracle Open Office Math : security
-Oracle Open Office Math : security;digital signatures
-Oracle Open Office Math : security;options for documents with macros
-Oracle Open Office Math : security;protecting contents
-Oracle Open Office Math : security;security levels for macros
-Oracle Open Office Math : security;warning dialogs with macros
-Oracle Open Office Math : selecting
-Oracle Open Office Math : selecting;controls
-Oracle Open Office Math : selecting;measurement units
-Oracle Open Office Math : selecting;objects
-Oracle Open Office Math : selecting;print areas
-Oracle Open Office Math : selecting;several files
-Oracle Open Office Math : selection clipboard
-Oracle Open Office Math : selection frames
-Oracle Open Office Math : selection modes in text
-Oracle Open Office Math : selection options in formulas
-Oracle Open Office Math : sending
-Oracle Open Office Math : sending;AutoAbstract function in presentations
-Oracle Open Office Math : sending;documents as e-mail
-Oracle Open Office Math : sending;documents as faxes
-Oracle Open Office Math : separator lines
-Oracle Open Office Math : separator lines;defining
-Oracle Open Office Math : separators
-Oracle Open Office Math : separators;conditional
-Oracle Open Office Math : Server Side ImageMap
-Oracle Open Office Math : set operations in Oracle Open OfficeMath
-Oracle Open Office Math : set operators
-Oracle Open Office Math : set operators;list of
-Oracle Open Office Math : sets of numbers
-Oracle Open Office Math : settings
-Oracle Open Office Math : settings;printers
-Oracle Open Office Math : settings;program configuration
-Oracle Open Office Math : settings;proxies
-Oracle Open Office Math : settings;tracking changes
-Oracle Open Office Math : settings;views
-Oracle Open Office Math : SGML
-Oracle Open Office Math : SGML;definition
-Oracle Open Office Math : shadows
-Oracle Open Office Math : shadows;areas
-Oracle Open Office Math : shadows;borders
-Oracle Open Office Math : shadows;characters
-Oracle Open Office Math : shadows;characters, using context menu
-Oracle Open Office Math : sharing documents
-Oracle Open Office Math : sharpening filter
-Oracle Open Office Math : sheet tabs
-Oracle Open Office Math : sheet tabs;displaying
-Oracle Open Office Math : sheets
-Oracle Open Office Math : sheets;searching all
-Oracle Open Office Math : shortcut keys
-Oracle Open Office Math : shortcut keys;assigning macros
-Oracle Open Office Math : shortcut keys;general
-Oracle Open Office Math : shortcut keys;in databases
-Oracle Open Office Math : shortcut keys;in formulas
-Oracle Open Office Math : shortcut keys;Oracle Open Office accessibility
-Oracle Open Office Math : showing
-Oracle Open Office Math : showing;changes
-Oracle Open Office Math : showing;docked windows
-Oracle Open Office Math : showing;drawings and controls (Writer)
-Oracle Open Office Math : showing;live presentations on the Internet
-Oracle Open Office Math : showing;toolbars
-Oracle Open Office Math : signing documents with digital signatures
-Oracle Open Office Math : similar to relations
-Oracle Open Office Math : similarity search
-Oracle Open Office Math : simple handles (Writer)
-Oracle Open Office Math : simplified Chinese
-Oracle Open Office Math : simplified Chinese;translating to traditional Chinese
-Oracle Open Office Math : sine function
-Oracle Open Office Math : single brackets without group function
-Oracle Open Office Math : single sign on options
-Oracle Open Office Math : single-line spacing in text
-Oracle Open Office Math : sizes
-Oracle Open Office Math : sizes;draw objects
-Oracle Open Office Math : sizes;of fonts in Oracle Open Office Math
-Oracle Open Office Math : sizes;pictures
-Oracle Open Office Math : slanting draw objects
-Oracle Open Office Math : slash division sign
-Oracle Open Office Math : small capitals
-Oracle Open Office Math : small gaps
-Oracle Open Office Math : small icons
-Oracle Open Office Math : smart tag configuration
-Oracle Open Office Math : smooth scrolling (Writer)
-Oracle Open Office Math : smoothing filter
-Oracle Open Office Math : snap grid defaults (Writer/Calc)
-Oracle Open Office Math : snapping in presentations and drawings
-Oracle Open Office Math : solarization filter
-Oracle Open Office Math : sort lists
-Oracle Open Office Math : sort lists;copying to in Calc
-Oracle Open Office Math : sorting
-Oracle Open Office Math : sorting;data in forms
-Oracle Open Office Math : sorting;databases
-Oracle Open Office Math : sound files
-Oracle Open Office Math : spaces
-Oracle Open Office Math : spaces;displaying (Writer)
-Oracle Open Office Math : spaces;ignoring double
-Oracle Open Office Math : spaces;inserting protected spaces
-Oracle Open Office Math : spaces;showing protected spaces (Writer)
-Oracle Open Office Math : spaces in formulas
-Oracle Open Office Math : spacing
-Oracle Open Office Math : spacing;between paragraphs in footnotes
-Oracle Open Office Math : spacing;font effects
-Oracle Open Office Math : spacing;formula elements
-Oracle Open Office Math : spacing;lines and paragraphs
-Oracle Open Office Math : spacing;tab stops in text documents
-Oracle Open Office Math : spacing;tabs in presentations
-Oracle Open Office Math : spadmin
-Oracle Open Office Math : special characters
-Oracle Open Office Math : speech bubbles
-Oracle Open Office Math : speed of printing
-Oracle Open Office Math : spellcheck
-Oracle Open Office Math : spellcheck;activating for a language
-Oracle Open Office Math : spellcheck;context menus
-Oracle Open Office Math : spellcheck;default languages
-Oracle Open Office Math : spellcheck;dialog
-Oracle Open Office Math : spellcheck;dictionary of exceptions
-Oracle Open Office Math : spellcheck;ignore list
-Oracle Open Office Math : spin button creation
-Oracle Open Office Math : spoolfiles with Xprinter
-Oracle Open Office Math : spreadsheets
-Oracle Open Office Math : spreadsheets;as databases (base)
-Oracle Open Office Math : spreadsheets;copying areas to text documents
-Oracle Open Office Math : spreadsheets;creating/opening
-Oracle Open Office Math : spreadsheets;inserting charts
-Oracle Open Office Math : spreadsheets;inserting database records
-Oracle Open Office Math : spreadsheets;printing
-Oracle Open Office Math : spreadsheets;saving
-Oracle Open Office Math : spreadsheets;saving automatically
-Oracle Open Office Math : spreadsheets;saving in other formats
-Oracle Open Office Math : spreadsheets;sending as e-mail
-Oracle Open Office Math : SQL
-Oracle Open Office Math : SQL;definition
-Oracle Open Office Math : SQL;DISTINCT parameter
-Oracle Open Office Math : SQL;executing SQL commands
-Oracle Open Office Math : SQL;executing SQL statements (Base)
-Oracle Open Office Math : SQL;queries (Base)
-Oracle Open Office Math : square brackets
-Oracle Open Office Math : square drawings
-Oracle Open Office Math : square roots
-Oracle Open Office Math : stacks
-Oracle Open Office Math : standard bar on/off
-Oracle Open Office Math : standard filters in databases
-Oracle Open Office Math : standard printer under UNIX
-Oracle Open Office Math : start center
-Oracle Open Office Math : start parameters
-Oracle Open Office Math : status bar on/off
-Oracle Open Office Math : stickers
-Oracle Open Office Math : strikethrough
-Oracle Open Office Math : strikethrough;characters
-Oracle Open Office Math : strikethrough;font effects
-Oracle Open Office Math : styles
-Oracle Open Office Math : styles;'changed' message
-Oracle Open Office Math : styles;copying between documents
-Oracle Open Office Math : styles;keyboard shortcuts
-Oracle Open Office Math : styles;organizing
-Oracle Open Office Math : styles;printing styles used in a document
-Oracle Open Office Math : styles;replacing automatically
-Oracle Open Office Math : Styles and Formatting window
-Oracle Open Office Math : Styles and Formatting window;docking
-Oracle Open Office Math : subforms
-Oracle Open Office Math : subforms;creating
-Oracle Open Office Math : subforms;description
-Oracle Open Office Math : submitting forms
-Oracle Open Office Math : subscripts
-Oracle Open Office Math : subset set operators
-Oracle Open Office Math : subtraction signs
-Oracle Open Office Math : suffixes in file formats
-Oracle Open Office Math : sum range example
-Oracle Open Office Math : summation
-Oracle Open Office Math : superscripts
-Oracle Open Office Math : superset set operators
-Oracle Open Office Math : support on the Web
-Oracle Open Office Math : symbols
-Oracle Open Office Math : symbols;adding in Oracle Open Office Math
-Oracle Open Office Math : symbols;entering in Oracle Open Office Math
-Oracle Open Office Math : symbols;for complex numbers
-Oracle Open Office Math : synchronizing
-Oracle Open Office Math : synchronizing;labels and business cards
-Oracle Open Office Math : synchronizing;Pocket PC and Oracle Open Office formats
-Oracle Open Office Math : system address book registration
-Oracle Open Office Math : tab stops
-Oracle Open Office Math : tab stops;displaying (Writer)
-Oracle Open Office Math : tab stops;inserting and editing
-Oracle Open Office Math : tab stops;regular expressions
-Oracle Open Office Math : tab stops;setting in sheets
-Oracle Open Office Math : tab stops;settings
-Oracle Open Office Math : tab stops;spacing in presentations
-Oracle Open Office Math : tab stops;spacing in text documents
-Oracle Open Office Math : table controls
-Oracle Open Office Math : table controls;form functions
-Oracle Open Office Math : table controls;keyboard-only edit mode
-Oracle Open Office Math : table controls;properties
-Oracle Open Office Math : table views of databases
-Oracle Open Office Math : Table Wizard (Base)
-Oracle Open Office Math : tables
-Oracle Open Office Math : tables;inserting line breaks
-Oracle Open Office Math : tables in databases
-Oracle Open Office Math : tables in databases;access rights to (Base)
-Oracle Open Office Math : tables in databases;adding to queries
-Oracle Open Office Math : tables in databases;browsing and editing
-Oracle Open Office Math : tables in databases;copying database tables (Base)
-Oracle Open Office Math : tables in databases;creating
-Oracle Open Office Math : tables in databases;creating in design view (manually)
-Oracle Open Office Math : tables in databases;importing text formats (Base)
-Oracle Open Office Math : tables in databases;joining for queries (Base)
-Oracle Open Office Math : tables in databases;printing queries (Base)
-Oracle Open Office Math : tables in databases;relations (Base)
-Oracle Open Office Math : tables in databases;searching
-Oracle Open Office Math : tables in spreadsheets
-Oracle Open Office Math : tables in spreadsheets;copying data to other applications
-Oracle Open Office Math : tables in spreadsheets;defining borders
-Oracle Open Office Math : tables in spreadsheets;value highlighting
-Oracle Open Office Math : tables in text
-Oracle Open Office Math : tables in text;captions
-Oracle Open Office Math : tables in text;creating automatically
-Oracle Open Office Math : tables in text;default settings
-Oracle Open Office Math : tables in text;defining borders
-Oracle Open Office Math : tables in text;displaying
-Oracle Open Office Math : tables in text;printing
-Oracle Open Office Math : tabs
-Oracle Open Office Math : tabs;displaying sheet tabs
-Oracle Open Office Math : tags
-Oracle Open Office Math : tags;definition
-Oracle Open Office Math : tags;META tags
-Oracle Open Office Math : tangent function
-Oracle Open Office Math : templates
-Oracle Open Office Math : templates;agendas
-Oracle Open Office Math : templates;changing basic fonts
-Oracle Open Office Math : templates;database reports
-Oracle Open Office Math : templates;deleting
-Oracle Open Office Math : templates;editing and saving
-Oracle Open Office Math : templates;faxes
-Oracle Open Office Math : templates;importing and exporting
-Oracle Open Office Math : templates;letters
-Oracle Open Office Math : templates;new documents from templates
-Oracle Open Office Math : templates;opening documents with
-Oracle Open Office Math : templates;organizing
-Oracle Open Office Math : terminology
-Oracle Open Office Math : terminology;general glossary
-Oracle Open Office Math : terminology;Internet glossary
-Oracle Open Office Math : testing XML filters
-Oracle Open Office Math : text
-Oracle Open Office Math : text;animating
-Oracle Open Office Math : text;Asian layout
-Oracle Open Office Math : text;bold
-Oracle Open Office Math : text;coloring
-Oracle Open Office Math : text;copying by drag and drop
-Oracle Open Office Math : text;CTL languages
-Oracle Open Office Math : text;drawing pictures
-Oracle Open Office Math : text;font effects
-Oracle Open Office Math : text;font sizes
-Oracle Open Office Math : text;font styles
-Oracle Open Office Math : text;fonts and formats
-Oracle Open Office Math : text;Fontwork icons
-Oracle Open Office Math : text;hyperlinks
-Oracle Open Office Math : text;inserting special characters
-Oracle Open Office Math : text;italics
-Oracle Open Office Math : text;kerning
-Oracle Open Office Math : text;language selection
-Oracle Open Office Math : text;line spacing
-Oracle Open Office Math : text;overwriting or inserting
-Oracle Open Office Math : text;printing in black
-Oracle Open Office Math : text;replacing with format
-Oracle Open Office Math : text;selection modes
-Oracle Open Office Math : text;shadowed
-Oracle Open Office Math : text;text/draw objects
-Oracle Open Office Math : text attributes
-Oracle Open Office Math : text attributes;hyperlinks
-Oracle Open Office Math : text attributes;undoing
-Oracle Open Office Math : text boxes
-Oracle Open Office Math : text boxes;form functions
-Oracle Open Office Math : text boxes;positioning
-Oracle Open Office Math : text breaks in cells
-Oracle Open Office Math : text colors for better accessibility
-Oracle Open Office Math : text databases (Base)
-Oracle Open Office Math : text documents
-Oracle Open Office Math : text documents;creating/opening
-Oracle Open Office Math : text documents;importing/exporting
-Oracle Open Office Math : text documents;inserting spreadsheet cells
-Oracle Open Office Math : text documents;print settings
-Oracle Open Office Math : text documents;printing
-Oracle Open Office Math : text documents;saving
-Oracle Open Office Math : text documents;saving automatically
-Oracle Open Office Math : text documents;saving in other formats
-Oracle Open Office Math : text documents;sending as e-mail
-Oracle Open Office Math : text effects
-Oracle Open Office Math : text flow
-Oracle Open Office Math : text flow;in cells
-Oracle Open Office Math : text formats
-Oracle Open Office Math : text formats;databases
-Oracle Open Office Math : text formats;pasting
-Oracle Open Office Math : text input fields
-Oracle Open Office Math : text layout for special languages
-Oracle Open Office Math : text mode in Oracle Open Office Math
-Oracle Open Office Math : text objects
-Oracle Open Office Math : text objects;alignment
-Oracle Open Office Math : text objects;draw functions
-Oracle Open Office Math : text objects;fonts
-Oracle Open Office Math : text objects;in presentations and drawings
-Oracle Open Office Math : text overflow in spreadsheet cells
-Oracle Open Office Math : text strings
-Oracle Open Office Math : text strings;entering in Oracle Open Office Math
-Oracle Open Office Math : text, see also text documents, paragraphs and characters
-Oracle Open Office Math : TextArt, see Fontwork
-Oracle Open Office Math : textures
-Oracle Open Office Math : textures;inserting from Gallery
-Oracle Open Office Math : textures;on chart bars
-Oracle Open Office Math : Thai
-Oracle Open Office Math : Thai;entering text
-Oracle Open Office Math : Thai;language settings
-Oracle Open Office Math : there exists symbol
-Oracle Open Office Math : thesaurus
-Oracle Open Office Math : thesaurus;activating for a language
-Oracle Open Office Math : ticker text
-Oracle Open Office Math : tilde as attribute
-Oracle Open Office Math : time fields
-Oracle Open Office Math : time fields;form functions
-Oracle Open Office Math : times
-Oracle Open Office Math : times;inserting when printing presentations
-Oracle Open Office Math : times, formats
-Oracle Open Office Math : tips
-Oracle Open Office Math : tips;extended tips in Help
-Oracle Open Office Math : title rows
-Oracle Open Office Math : title rows;printing in Oracle Open Office Math
-Oracle Open Office Math : titles
-Oracle Open Office Math : titles;changing
-Oracle Open Office Math : titles;editing in charts
-Oracle Open Office Math : titles;font effects
-Oracle Open Office Math : titles;formatting automatically
-Oracle Open Office Math : titles;objects
-Oracle Open Office Math : toolbars
-Oracle Open Office Math : toolbars;adding buttons
-Oracle Open Office Math : toolbars;docking/undocking
-Oracle Open Office Math : toolbars;Form Navigation bar
-Oracle Open Office Math : toolbars;viewing/closing
-Oracle Open Office Math : tools bar
-Oracle Open Office Math : tooltips
-Oracle Open Office Math : tooltips;extended tips
-Oracle Open Office Math : tooltips;help
-Oracle Open Office Math : toward relation
-Oracle Open Office Math : traditional Chinese
-Oracle Open Office Math : traditional Chinese;translating to simplified chinese
-Oracle Open Office Math : transparency
-Oracle Open Office Math : transparency;areas
-Oracle Open Office Math : transparency;off for faster printing
-Oracle Open Office Math : transparency;saving
-Oracle Open Office Math : transparent character as attribute
-Oracle Open Office Math : tree view of Help
-Oracle Open Office Math : trigonometrical functions
-Oracle Open Office Math : triple dot attribute
-Oracle Open Office Math : typefaces
-Oracle Open Office Math : typefaces;adding under UNIX
-Oracle Open Office Math : typefaces;formats
-Oracle Open Office Math : typographical quotes in Oracle Open Office Writer
-Oracle Open Office Math : typography
-Oracle Open Office Math : typography;Asian
-Oracle Open Office Math : unary operators
-Oracle Open Office Math : unary operators;list of
-Oracle Open Office Math : unary operators
-Oracle Open Office Math : underline attribute
-Oracle Open Office Math : underlining
-Oracle Open Office Math : underlining;AutoFormat function
-Oracle Open Office Math : underlining;characters
-Oracle Open Office Math : underlining;text
-Oracle Open Office Math : undocking windows
-Oracle Open Office Math : undoing
-Oracle Open Office Math : undoing;direct formatting
-Oracle Open Office Math : undoing;editing
-Oracle Open Office Math : undoing;number of steps
-Oracle Open Office Math : unequal sign
-Oracle Open Office Math : ungrouping groups
-Oracle Open Office Math : union of sets
-Oracle Open Office Math : units
-Oracle Open Office Math : units;converting
-Oracle Open Office Math : units;measurement units
-Oracle Open Office Math : universal quantifier symbol
-Oracle Open Office Math : UNO components
-Oracle Open Office Math : UNO components;Extension Manager
-Oracle Open Office Math : UNO components;integrating new
-Oracle Open Office Math : up arrow symbol
-Oracle Open Office Math : update options
-Oracle Open Office Math : updates
-Oracle Open Office Math : updates;checking automatically
-Oracle Open Office Math : updates;checking manually
-Oracle Open Office Math : updating
-Oracle Open Office Math : updating;fields and charts, automatically (Writer)
-Oracle Open Office Math : updating;links in text documents
-Oracle Open Office Math : updating;links, on opening
-Oracle Open Office Math : updating;templates
-Oracle Open Office Math : upper limits
-Oracle Open Office Math : URL
-Oracle Open Office Math : URL;changing hyperlink URLs
-Oracle Open Office Math : URL;definition
-Oracle Open Office Math : URL;in pictures
-Oracle Open Office Math : URL;saving absolute/relative paths
-Oracle Open Office Math : URL;turning off URL recognition
-Oracle Open Office Math : user data
-Oracle Open Office Math : user data;input
-Oracle Open Office Math : user data;removing when saving
-Oracle Open Office Math : user feedback
-Oracle Open Office Math : user feedback;automatically
-Oracle Open Office Math : user-defined dictionaries
-Oracle Open Office Math : user-defined dictionaries;creating
-Oracle Open Office Math : user-defined dictionaries;dictionary of exceptions
-Oracle Open Office Math : user-defined dictionaries;editing
-Oracle Open Office Math : user-defined operators
-Oracle Open Office Math : user-defined operators;general
-Oracle Open Office Math : user-defined operators;unary and binary
-Oracle Open Office Math : user-defined styles
-Oracle Open Office Math : user-defined styles;automatically replacing
-Oracle Open Office Math : UTF-8/UCS2 support
-Oracle Open Office Math : values
-Oracle Open Office Math : values;absolute
-Oracle Open Office Math : values;rounded as shown (Calc)
-Oracle Open Office Math : variables
-Oracle Open Office Math : variables;for paths
-Oracle Open Office Math : variables;with right exponents
-Oracle Open Office Math : VBA code
-Oracle Open Office Math : VBA code;loading/saving documents with VBA code
-Oracle Open Office Math : vector arrows as attributes
-Oracle Open Office Math : version management
-Oracle Open Office Math : version numbers of documents
-Oracle Open Office Math : versions
-Oracle Open Office Math : versions;comparing documents
-Oracle Open Office Math : versions;file saving as, restriction
-Oracle Open Office Math : versions;merging document versions
-Oracle Open Office Math : versions;of a document
-Oracle Open Office Math : versions;Oracle Open Office
-Oracle Open Office Math : vertical arrangement of elements
-Oracle Open Office Math : vertical bars
-Oracle Open Office Math : vertical callouts
-Oracle Open Office Math : vertical dots symbol
-Oracle Open Office Math : vertical elements
-Oracle Open Office Math : vertical scrollbars (Writer)
-Oracle Open Office Math : vertical text boxes
-Oracle Open Office Math : videos
-Oracle Open Office Math : viewing
-Oracle Open Office Math : viewing;databases
-Oracle Open Office Math : viewing;file properties
-Oracle Open Office Math : viewing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Math : viewing;toolbars
-Oracle Open Office Math : views
-Oracle Open Office Math : views;creating database views (Base)
-Oracle Open Office Math : views;defaults
-Oracle Open Office Math : views;full screen
-Oracle Open Office Math : views;icons
-Oracle Open Office Math : views;maximum size
-Oracle Open Office Math : views;scaling
-Oracle Open Office Math : views;zooming out Oracle Open Office Math
-Oracle Open Office Math : Visual Basic for Applications
-Oracle Open Office Math : Visual Basic for Applications;loading/saving documents with VBA code
-Oracle Open Office Math : watermarks
-Oracle Open Office Math : web documents
-Oracle Open Office Math : web documents;XForms
-Oracle Open Office Math : Web support
-Oracle Open Office Math : WebCast export
-Oracle Open Office Math : WebDAV over HTTPS
-Oracle Open Office Math : weierstrass p symbol
-Oracle Open Office Math : whole numbers
-Oracle Open Office Math : wide circumflex attribute
-Oracle Open Office Math : wide tilde attribute
-Oracle Open Office Math : wide vector arrow attribute
-Oracle Open Office Math : widowed brackets
-Oracle Open Office Math : windows
-Oracle Open Office Math : windows;docking
-Oracle Open Office Math : windows;docking definition
-Oracle Open Office Math : windows;hiding/showing/docking
-Oracle Open Office Math : windows;new
-Oracle Open Office Math : wizards
-Oracle Open Office Math : wizards;agendas
-Oracle Open Office Math : wizards;database queries
-Oracle Open Office Math : wizards;database tables (Base)
-Oracle Open Office Math : wizards;databases (Base)
-Oracle Open Office Math : wizards;document converter
-Oracle Open Office Math : wizards;Euro Converter
-Oracle Open Office Math : wizards;faxes
-Oracle Open Office Math : wizards;forms
-Oracle Open Office Math : wizards;letters
-Oracle Open Office Math : wizards;macros (Base)
-Oracle Open Office Math : wizards;overview
-Oracle Open Office Math : wizards;presentations
-Oracle Open Office Math : wizards;reports
-Oracle Open Office Math : Word documents
-Oracle Open Office Math : Word documents;compatibility
-Oracle Open Office Math : Word documents;saving as
-Oracle Open Office Math : WordArt, see Fontwork
-Oracle Open Office Math : words
-Oracle Open Office Math : words;automatically replacing
-Oracle Open Office Math : words;wrapping in cells
-Oracle Open Office Math : words;wrapping in CTL
-Oracle Open Office Math : working directory change
-Oracle Open Office Math : wrapping text
-Oracle Open Office Math : wrapping text;in cells
-Oracle Open Office Math : wrapping text;in formulas
-Oracle Open Office Math : write protection on/off
-Oracle Open Office Math : writing aids options
-Oracle Open Office Math : WYSIWYG in fonts lists
-Oracle Open Office Math : XForms
-Oracle Open Office Math : XForms;adding/editing/deleting/organizing namespaces
-Oracle Open Office Math : XForms;conditions
-Oracle Open Office Math : XForms;opening/editing
-Oracle Open Office Math : XML converters
-Oracle Open Office Math : XML file formats
-Oracle Open Office Math : XML filters
-Oracle Open Office Math : XML filters;creating/testing
-Oracle Open Office Math : XML filters;saving as package/installing/deleting
-Oracle Open Office Math : XML filters;settings
-Oracle Open Office Math : XML Forms, see XForms
-Oracle Open Office Math : XSLT filters, see also XML filters
-Oracle Open Office Math : years
-Oracle Open Office Math : years;2-digit options
-Oracle Open Office Math : zero values
-Oracle Open Office Math : zero values;displaying (Calc)
-Oracle Open Office Math : zooming
-Oracle Open Office Math : zooming;page views
-Oracle Open Office Math : zooming;pictures
-Oracle Open Office Math : zooming;status bar
-Oracle Open Office Math : zooming in on formula display
-Oracle Open Office Math : zooming out on formula display
-Oracle Open Office Writer : 1/2 replacement
-Oracle Open Office Writer : 3D charts
-Oracle Open Office Writer : 3D text creation
-Oracle Open Office Writer : abbreviation replacement
-Oracle Open Office Writer : abbreviations
-Oracle Open Office Writer : absolute hyperlinks
-Oracle Open Office Writer : absolute saving of URLs
-Oracle Open Office Writer : accents
-Oracle Open Office Writer : Access databases (base)
-Oracle Open Office Writer : access rights for database tables (Base)
-Oracle Open Office Writer : accessibility
-Oracle Open Office Writer : accessibility;general shortcuts
-Oracle Open Office Writer : accessibility;options
-Oracle Open Office Writer : accessibility;Oracle Open Office assistive technology
-Oracle Open Office Writer : accessibility;Oracle Open Office features
-Oracle Open Office Writer : accessibility;Oracle Open Office Writer
-Oracle Open Office Writer : activating
-Oracle Open Office Writer : activating;context menus
-Oracle Open Office Writer : activating;Error Report Tool
-Oracle Open Office Writer : activating;extended help tips
-Oracle Open Office Writer : activating;plug-ins
-Oracle Open Office Writer : ActiveX control
-Oracle Open Office Writer : Adabas D databases (base)
-Oracle Open Office Writer : add-ons, see UNO components
-Oracle Open Office Writer : additional selection mode
-Oracle Open Office Writer : address books
-Oracle Open Office Writer : address books;exchanging
-Oracle Open Office Writer : address books;LDAP server (Base)
-Oracle Open Office Writer : address books;registering
-Oracle Open Office Writer : address labels from databases
-Oracle Open Office Writer : adjusting page margins and cell widths
-Oracle Open Office Writer : ADO databases (Base)
-Oracle Open Office Writer : Agenda Wizard
-Oracle Open Office Writer : aging filter
-Oracle Open Office Writer : aligning
-Oracle Open Office Writer : aligning;2D charts
-Oracle Open Office Writer : aligning;cells
-Oracle Open Office Writer : aligning;objects
-Oracle Open Office Writer : aligning;paragraphs
-Oracle Open Office Writer : aligning;tables in text
-Oracle Open Office Writer : aligning;text objects
-Oracle Open Office Writer : aligning;titles in charts
-Oracle Open Office Writer : alphabetical indexes
-Oracle Open Office Writer : alternative fonts
-Oracle Open Office Writer : ampersand symbol, see also operators
-Oracle Open Office Writer : anchors
-Oracle Open Office Writer : anchors;changing
-Oracle Open Office Writer : anchors;displaying (Calc)
-Oracle Open Office Writer : anchors;options
-Oracle Open Office Writer : anchors;types/positions for draw objects
-Oracle Open Office Writer : animations
-Oracle Open Office Writer : animations;accessibility options
-Oracle Open Office Writer : animations;text
-Oracle Open Office Writer : appearance options
-Oracle Open Office Writer : Arabic
-Oracle Open Office Writer : Arabic;entering text
-Oracle Open Office Writer : Arabic;language settings
-Oracle Open Office Writer : area charts
-Oracle Open Office Writer : areas
-Oracle Open Office Writer : areas;bitmap patterns
-Oracle Open Office Writer : areas;hatched/dotted
-Oracle Open Office Writer : areas;shadows
-Oracle Open Office Writer : areas;slanting
-Oracle Open Office Writer : areas;styles
-Oracle Open Office Writer : areas;transparency
-Oracle Open Office Writer : arguments in command line
-Oracle Open Office Writer : arithmetical operators in formulas
-Oracle Open Office Writer : arranging
-Oracle Open Office Writer : arranging;headings
-Oracle Open Office Writer : arranging;objects
-Oracle Open Office Writer : arrows
-Oracle Open Office Writer : arrows;defining arrow heads
-Oracle Open Office Writer : arrows;defining arrow lines
-Oracle Open Office Writer : arrows;drawing in text
-Oracle Open Office Writer : ASCII
-Oracle Open Office Writer : ASCII;definition
-Oracle Open Office Writer : Asian languages
-Oracle Open Office Writer : Asian languages;enabling
-Oracle Open Office Writer : Asian languages;search options
-Oracle Open Office Writer : Asian languages;sorting paragraphs/table rows
-Oracle Open Office Writer : Asian Phonetic Guide
-Oracle Open Office Writer : Asian typography
-Oracle Open Office Writer : aspect ratio
-Oracle Open Office Writer : aspect ratio;resizing objects
-Oracle Open Office Writer : assigning scripts
-Oracle Open Office Writer : assistive technology in Oracle Open Office
-Oracle Open Office Writer : attaching toolbars
-Oracle Open Office Writer : attachments in e-mails
-Oracle Open Office Writer : audio
-Oracle Open Office Writer : auto reloading HTML documents
-Oracle Open Office Writer : AutoAbstract function for sending text to presentations
-Oracle Open Office Writer : AutoCaption function in Oracle Open Office Writer
-Oracle Open Office Writer : AutoComplete function in text and list boxes
-Oracle Open Office Writer : AutoCorrect function
-Oracle Open Office Writer : AutoCorrect function;adding exceptions
-Oracle Open Office Writer : AutoCorrect function;context menu
-Oracle Open Office Writer : AutoCorrect function;options
-Oracle Open Office Writer : AutoCorrect function;pictures and frames
-Oracle Open Office Writer : AutoCorrect function;quotes
-Oracle Open Office Writer : AutoCorrect function;replacement table
-Oracle Open Office Writer : AutoCorrect function;smart tags
-Oracle Open Office Writer : AutoCorrect function;switching on and off in Calc
-Oracle Open Office Writer : AutoCorrect function;turning off
-Oracle Open Office Writer : AutoCorrect function;URL recognition
-Oracle Open Office Writer : AutoCorrect function;word completion
-Oracle Open Office Writer : AutoFormat function
-Oracle Open Office Writer : AutoFormat function;applying to text tables
-Oracle Open Office Writer : AutoFormat function;headings
-Oracle Open Office Writer : AutoFormat function;switching on and off
-Oracle Open Office Writer : AutoFormat function;text documents
-Oracle Open Office Writer : automatic bullets/numbers
-Oracle Open Office Writer : automatic bullets/numbers;AutoCorrect function
-Oracle Open Office Writer : automatic captions (Writer)
-Oracle Open Office Writer : automatic changes on/off
-Oracle Open Office Writer : automatic control focus
-Oracle Open Office Writer : automatic heading formatting
-Oracle Open Office Writer : automatic hyperlink formatting
-Oracle Open Office Writer : automatic hyphenation in text
-Oracle Open Office Writer : automatic line breaks
-Oracle Open Office Writer : automatic lines/borders in text
-Oracle Open Office Writer : automatic numbering
-Oracle Open Office Writer : automatic numbering;of objects
-Oracle Open Office Writer : automatic saving
-Oracle Open Office Writer : automatic spellcheck
-Oracle Open Office Writer : automatic word completion
-Oracle Open Office Writer : AutoPilots, see wizards
-Oracle Open Office Writer : AutoText
-Oracle Open Office Writer : AutoValue (Base)
-Oracle Open Office Writer : averages in charts
-Oracle Open Office Writer : axes
-Oracle Open Office Writer : axes;better scaling
-Oracle Open Office Writer : axes;formatting
-Oracle Open Office Writer : axes;formatting grids
-Oracle Open Office Writer : axes;inserting grids
-Oracle Open Office Writer : axes;interval marks
-Oracle Open Office Writer : axes;showing axes in charts
-Oracle Open Office Writer : axes in charts
-Oracle Open Office Writer : backgrounds
-Oracle Open Office Writer : backgrounds;defining colors/pictures
-Oracle Open Office Writer : backgrounds;different pages
-Oracle Open Office Writer : backgrounds;frames/sections/indexes
-Oracle Open Office Writer : backgrounds;inserting from Gallery
-Oracle Open Office Writer : backgrounds;printing
-Oracle Open Office Writer : backgrounds;text objects
-Oracle Open Office Writer : backing window
-Oracle Open Office Writer : backups
-Oracle Open Office Writer : backups;automatic
-Oracle Open Office Writer : backups;documents
-Oracle Open Office Writer : bar charts
-Oracle Open Office Writer : Basic
-Oracle Open Office Writer : Basic;fonts for source display
-Oracle Open Office Writer : Basic;programming
-Oracle Open Office Writer : Basic;recording macros
-Oracle Open Office Writer : basic fonts
-Oracle Open Office Writer : behavior of rows/columns
-Oracle Open Office Writer : Bézier curves
-Oracle Open Office Writer : Bézier curves;control points in presentations
-Oracle Open Office Writer : bi-directional writing
-Oracle Open Office Writer : bibliographies
-Oracle Open Office Writer : binding space
-Oracle Open Office Writer : bitmaps
-Oracle Open Office Writer : bitmaps;inserting and editing
-Oracle Open Office Writer : bitmaps;off for faster printing
-Oracle Open Office Writer : bitmaps;patterns
-Oracle Open Office Writer : black and white printing
-Oracle Open Office Writer : black printing in Calc
-Oracle Open Office Writer : blank pages with alternating page styles
-Oracle Open Office Writer : block protect, see also widows or orphans
-Oracle Open Office Writer : block selection mode
-Oracle Open Office Writer : blocks of text
-Oracle Open Office Writer : bold
-Oracle Open Office Writer : bold;AutoFormat function
-Oracle Open Office Writer : bold;formatting while typing
-Oracle Open Office Writer : bold;text
-Oracle Open Office Writer : book previews
-Oracle Open Office Writer : book view
-Oracle Open Office Writer : booklet printing
-Oracle Open Office Writer : bookmarks
-Oracle Open Office Writer : bookmarks;Help
-Oracle Open Office Writer : bookmarks;inserting
-Oracle Open Office Writer : bookmarks;positioning cursor
-Oracle Open Office Writer : borders
-Oracle Open Office Writer : borders;arranging
-Oracle Open Office Writer : borders;automatic drawing on/off
-Oracle Open Office Writer : borders;cells on screen (Calc)
-Oracle Open Office Writer : borders;for footnotes/endnotes
-Oracle Open Office Writer : borders;for headers/footers
-Oracle Open Office Writer : borders;for objects
-Oracle Open Office Writer : borders;for pages
-Oracle Open Office Writer : borders;for paragraphs
-Oracle Open Office Writer : borders;for tables
-Oracle Open Office Writer : borders;for text tables
-Oracle Open Office Writer : borders;shadows
-Oracle Open Office Writer : borders;table boundaries (Writer)
-Oracle Open Office Writer : borders, see also frames
-Oracle Open Office Writer : bound fields
-Oracle Open Office Writer : bound fields;controls
-Oracle Open Office Writer : boundaries of tables (Writer)
-Oracle Open Office Writer : break display (Writer)
-Oracle Open Office Writer : brochures
-Oracle Open Office Writer : brochures;printing individual
-Oracle Open Office Writer : brochures;printing several
-Oracle Open Office Writer : brush for copying styles
-Oracle Open Office Writer : bubble charts
-Oracle Open Office Writer : build numbers of Oracle Open Office
-Oracle Open Office Writer : bullet lists
-Oracle Open Office Writer : bullet lists;changing levels
-Oracle Open Office Writer : bullet lists;creating while typing
-Oracle Open Office Writer : bullet lists;formatting options
-Oracle Open Office Writer : bullet lists;interrupting
-Oracle Open Office Writer : bullet lists;turning on and off
-Oracle Open Office Writer : bullets
-Oracle Open Office Writer : bullets;adding and editing
-Oracle Open Office Writer : bullets;paragraphs
-Oracle Open Office Writer : bullets;replacing
-Oracle Open Office Writer : bullets;turning off
-Oracle Open Office Writer : bullets;using automatically
-Oracle Open Office Writer : business cards
-Oracle Open Office Writer : business cards;creating and synchronizing
-Oracle Open Office Writer : business cards;using templates
-Oracle Open Office Writer : button bars, see toolbars
-Oracle Open Office Writer : buttons
-Oracle Open Office Writer : buttons;adding push buttons
-Oracle Open Office Writer : buttons;big/small
-Oracle Open Office Writer : buttons;editing hyperlink buttons
-Oracle Open Office Writer : buttons;form functions
-Oracle Open Office Writer : buttons;toolbars
-Oracle Open Office Writer : cache for graphics
-Oracle Open Office Writer : calculating
-Oracle Open Office Writer : calculating;across multiple text tables
-Oracle Open Office Writer : calculating;formulas/mean values
-Oracle Open Office Writer : calculating;in text
-Oracle Open Office Writer : calculating;in text tables
-Oracle Open Office Writer : calculating;iterative references (Calc)
-Oracle Open Office Writer : calculating;regression curves
-Oracle Open Office Writer : calculating;sums in text tables
-Oracle Open Office Writer : callouts
-Oracle Open Office Writer : callouts;drawings
-Oracle Open Office Writer : capital letters
-Oracle Open Office Writer : capital letters;AutoCorrect function
-Oracle Open Office Writer : capital letters;avoiding after specific abbreviations
-Oracle Open Office Writer : capital letters;changing to small letters
-Oracle Open Office Writer : capital letters;changing to small letters after periods
-Oracle Open Office Writer : capital letters;font effects
-Oracle Open Office Writer : capital letters;starting paragraphs
-Oracle Open Office Writer : captions
-Oracle Open Office Writer : captions;adding chapter numbers
-Oracle Open Office Writer : captions;automatic captions (Writer)
-Oracle Open Office Writer : captions;inserting and editing
-Oracle Open Office Writer : captions;tables/pictures/frames/OLE objects (Writer)
-Oracle Open Office Writer : captions, see also labels/callouts
-Oracle Open Office Writer : cascading update (Base)
-Oracle Open Office Writer : case sensitivity
-Oracle Open Office Writer : case sensitivity;comparing cell contents (Calc)
-Oracle Open Office Writer : case sensitivity;searching
-Oracle Open Office Writer : cell merges
-Oracle Open Office Writer : cells
-Oracle Open Office Writer : cells;adapting the width by keyboard
-Oracle Open Office Writer : cells;aligning
-Oracle Open Office Writer : cells;backgrounds
-Oracle Open Office Writer : cells;borders in text tables
-Oracle Open Office Writer : cells;calculating sums
-Oracle Open Office Writer : cells;coloring (Calc)
-Oracle Open Office Writer : cells;cursor positions after input (Calc)
-Oracle Open Office Writer : cells;enlarging and reducing in text tables
-Oracle Open Office Writer : cells;formatting without effect (Calc)
-Oracle Open Office Writer : cells;inserting from spreadsheets
-Oracle Open Office Writer : cells;line breaks
-Oracle Open Office Writer : cells;linked to controls
-Oracle Open Office Writer : cells;merging/splitting
-Oracle Open Office Writer : cells;number of
-Oracle Open Office Writer : cells;pasting
-Oracle Open Office Writer : cells;protecting/unprotecting
-Oracle Open Office Writer : cells;resetting formats
-Oracle Open Office Writer : cells;showing grid lines (Calc)
-Oracle Open Office Writer : centered text
-Oracle Open Office Writer : centering
-Oracle Open Office Writer : centering;images on HTML pages
-Oracle Open Office Writer : centering;text frames on pages
-Oracle Open Office Writer : centimeters
-Oracle Open Office Writer : central documents
-Oracle Open Office Writer : certificates
-Oracle Open Office Writer : changes
-Oracle Open Office Writer : changes;accepting or rejecting
-Oracle Open Office Writer : changes;automatic
-Oracle Open Office Writer : changes;comparing to original
-Oracle Open Office Writer : changes;protecting
-Oracle Open Office Writer : changes;recording
-Oracle Open Office Writer : changes;review function
-Oracle Open Office Writer : changes;showing
-Oracle Open Office Writer : changing
-Oracle Open Office Writer : changing;bulleting symbols
-Oracle Open Office Writer : changing;cases of text
-Oracle Open Office Writer : changing;document titles
-Oracle Open Office Writer : changing;field shadings
-Oracle Open Office Writer : changing;fields, into text
-Oracle Open Office Writer : changing;file associations in Setup program
-Oracle Open Office Writer : changing;icon sizes
-Oracle Open Office Writer : changing;indents
-Oracle Open Office Writer : changing;links
-Oracle Open Office Writer : changing;outline levels
-Oracle Open Office Writer : changing;page backgrounds
-Oracle Open Office Writer : changing;starting numbers in lists
-Oracle Open Office Writer : changing;work directory
-Oracle Open Office Writer : changing, see also editing and replacing
-Oracle Open Office Writer : chapter names in headers
-Oracle Open Office Writer : chapter numbering
-Oracle Open Office Writer : chapter numbers in captions
-Oracle Open Office Writer : character styles
-Oracle Open Office Writer : character styles;language selection
-Oracle Open Office Writer : character styles;style categories
-Oracle Open Office Writer : characters
-Oracle Open Office Writer : characters;alternative fonts
-Oracle Open Office Writer : characters;Asian layout
-Oracle Open Office Writer : characters;bold
-Oracle Open Office Writer : characters;coloring
-Oracle Open Office Writer : characters;counting
-Oracle Open Office Writer : characters;displaying only on screen (Writer)
-Oracle Open Office Writer : characters;enabling CTL and Asian characters
-Oracle Open Office Writer : characters;finding all
-Oracle Open Office Writer : characters;font effects
-Oracle Open Office Writer : characters;fonts and formats
-Oracle Open Office Writer : characters;hyperlinks
-Oracle Open Office Writer : characters;italics
-Oracle Open Office Writer : characters;language selection
-Oracle Open Office Writer : characters;shadowed
-Oracle Open Office Writer : characters;spacing
-Oracle Open Office Writer : characters;special
-Oracle Open Office Writer : characters;subscript and superscript
-Oracle Open Office Writer : characters;underlining
-Oracle Open Office Writer : characters;uppercase or lowercase
-Oracle Open Office Writer : charcoal sketches filter
-Oracle Open Office Writer : chart legends
-Oracle Open Office Writer : chart legends;hiding
-Oracle Open Office Writer : chart legends;showing icons with labels
-Oracle Open Office Writer : chart types
-Oracle Open Office Writer : chart types;area
-Oracle Open Office Writer : chart types;bubble
-Oracle Open Office Writer : chart types;column and bar
-Oracle Open Office Writer : chart types;column and line
-Oracle Open Office Writer : chart types;line
-Oracle Open Office Writer : chart types;net
-Oracle Open Office Writer : chart types;pie/donut
-Oracle Open Office Writer : chart types;stock
-Oracle Open Office Writer : chart types;XY (scatter)
-Oracle Open Office Writer : charts
-Oracle Open Office Writer : charts;3D views
-Oracle Open Office Writer : charts;aligning
-Oracle Open Office Writer : charts;arranging within stacks
-Oracle Open Office Writer : charts;bars with textures
-Oracle Open Office Writer : charts;borders
-Oracle Open Office Writer : charts;choosing chart types
-Oracle Open Office Writer : charts;colors
-Oracle Open Office Writer : charts;copying from Calc into Writer
-Oracle Open Office Writer : charts;copying with link to source cell range
-Oracle Open Office Writer : charts;data labels
-Oracle Open Office Writer : charts;displaying (Calc)
-Oracle Open Office Writer : charts;editing axes
-Oracle Open Office Writer : charts;editing data
-Oracle Open Office Writer : charts;editing legends
-Oracle Open Office Writer : charts;editing titles
-Oracle Open Office Writer : charts;formatting areas
-Oracle Open Office Writer : charts;formatting floors
-Oracle Open Office Writer : charts;formatting walls
-Oracle Open Office Writer : charts;inserting
-Oracle Open Office Writer : charts;labeling
-Oracle Open Office Writer : charts;overview
-Oracle Open Office Writer : charts;positioning axes
-Oracle Open Office Writer : charts;properties
-Oracle Open Office Writer : charts;reorganizing
-Oracle Open Office Writer : charts;scaling axes
-Oracle Open Office Writer : charts;scaling text
-Oracle Open Office Writer : charts;shortcuts
-Oracle Open Office Writer : charts;showing axes
-Oracle Open Office Writer : charts;updating automatically (Writer)
-Oracle Open Office Writer : check box creation
-Oracle Open Office Writer : checking spelling
-Oracle Open Office Writer : checking spelling;all languages
-Oracle Open Office Writer : checking spelling;manually
-Oracle Open Office Writer : checking spelling;while typing
-Oracle Open Office Writer : Chinese writing systems
-Oracle Open Office Writer : choosing printers
-Oracle Open Office Writer : circle drawings
-Oracle Open Office Writer : Client Side ImageMap
-Oracle Open Office Writer : clipboard
-Oracle Open Office Writer : clipboard;calculating in text
-Oracle Open Office Writer : clipboard;cutting
-Oracle Open Office Writer : clipboard;pasting
-Oracle Open Office Writer : clipboard;pasting formatted/unformatted text
-Oracle Open Office Writer : clipboard;selection clipboard
-Oracle Open Office Writer : clipboard;Unix
-Oracle Open Office Writer : closing
-Oracle Open Office Writer : closing;documents
-Oracle Open Office Writer : closing;toolbars
-Oracle Open Office Writer : collaboration
-Oracle Open Office Writer : color bar
-Oracle Open Office Writer : colors
-Oracle Open Office Writer : colors;adding
-Oracle Open Office Writer : colors;appearance
-Oracle Open Office Writer : colors;backgrounds
-Oracle Open Office Writer : colors;charts
-Oracle Open Office Writer : colors;fill format
-Oracle Open Office Writer : colors;fonts
-Oracle Open Office Writer : colors;grid lines and cells (Calc)
-Oracle Open Office Writer : colors;models
-Oracle Open Office Writer : colors;not printing
-Oracle Open Office Writer : colors;printing in grayscale
-Oracle Open Office Writer : colors;restriction (Calc)
-Oracle Open Office Writer : colors;selection
-Oracle Open Office Writer : column and line charts
-Oracle Open Office Writer : column charts
-Oracle Open Office Writer : column headers
-Oracle Open Office Writer : column headers;displaying (Calc)
-Oracle Open Office Writer : column headers;highlighting (Calc)
-Oracle Open Office Writer : columns
-Oracle Open Office Writer : columns;breaks in text tables
-Oracle Open Office Writer : columns;inserting in tables
-Oracle Open Office Writer : columns;inserting/deleting in tables by keyboard
-Oracle Open Office Writer : columns;on text pages
-Oracle Open Office Writer : columns;selecting
-Oracle Open Office Writer : columns;setting with the mouse
-Oracle Open Office Writer : combination charts
-Oracle Open Office Writer : combo box creation
-Oracle Open Office Writer : command button creation
-Oracle Open Office Writer : command buttons, see push buttons
-Oracle Open Office Writer : command line parameters
-Oracle Open Office Writer : commands
-Oracle Open Office Writer : commands;repeating
-Oracle Open Office Writer : commands;SQL
-Oracle Open Office Writer : comments
-Oracle Open Office Writer : comments;displaying (Calc)
-Oracle Open Office Writer : comments;inserting/editing/deleting/printing
-Oracle Open Office Writer : comments;on changes
-Oracle Open Office Writer : comments;printing in text
-Oracle Open Office Writer : common terms
-Oracle Open Office Writer : common terms;Chinese dictionary
-Oracle Open Office Writer : common terms;glossaries
-Oracle Open Office Writer : common terms;Internet glossary
-Oracle Open Office Writer : comparisons
-Oracle Open Office Writer : comparisons;document versions
-Oracle Open Office Writer : comparisons;operators in default filter dialog
-Oracle Open Office Writer : compatibility settings for MS Word import
-Oracle Open Office Writer : complete screen view
-Oracle Open Office Writer : completion of words
-Oracle Open Office Writer : complex text layout
-Oracle Open Office Writer : complex text layout;definition
-Oracle Open Office Writer : complex text layout;enabling
-Oracle Open Office Writer : complex text layout, see CTL
-Oracle Open Office Writer : compose key to insert special characters
-Oracle Open Office Writer : concatenation, see ampersand symbol
-Oracle Open Office Writer : concordance files
-Oracle Open Office Writer : concordance files;definition
-Oracle Open Office Writer : concordance files;indexes
-Oracle Open Office Writer : conditional separators
-Oracle Open Office Writer : conditional styles
-Oracle Open Office Writer : conditional text
-Oracle Open Office Writer : conditional text;page counts
-Oracle Open Office Writer : conditional text;setting up
-Oracle Open Office Writer : conditions
-Oracle Open Office Writer : conditions;in fields and sections
-Oracle Open Office Writer : conditions;in number formats
-Oracle Open Office Writer : conditions;items in Data Navigator
-Oracle Open Office Writer : conditions;user data fields
-Oracle Open Office Writer : Configuration Manager
-Oracle Open Office Writer : configuring
-Oracle Open Office Writer : configuring;fax icon
-Oracle Open Office Writer : configuring;Oracle Open Office
-Oracle Open Office Writer : configuring;toolbars
-Oracle Open Office Writer : connections to data sources (Base)
-Oracle Open Office Writer : contents protection
-Oracle Open Office Writer : context menus
-Oracle Open Office Writer : continuation pages
-Oracle Open Office Writer : contour editor
-Oracle Open Office Writer : contour wrap
-Oracle Open Office Writer : control point display in presentations
-Oracle Open Office Writer : controls
-Oracle Open Office Writer : controls;activating in forms
-Oracle Open Office Writer : controls;adding to documents
-Oracle Open Office Writer : controls;arranging in forms
-Oracle Open Office Writer : controls;arranging within stacks
-Oracle Open Office Writer : controls;assigning data sources
-Oracle Open Office Writer : controls;assigning macros (Basic)
-Oracle Open Office Writer : controls;bound fields/list contents/linked cells
-Oracle Open Office Writer : controls;events
-Oracle Open Office Writer : controls;focus
-Oracle Open Office Writer : controls;formatted fields
-Oracle Open Office Writer : controls;grouping
-Oracle Open Office Writer : controls;hidden
-Oracle Open Office Writer : controls;inserting
-Oracle Open Office Writer : controls;multi-line titles
-Oracle Open Office Writer : controls;positions and sizes
-Oracle Open Office Writer : controls;printing
-Oracle Open Office Writer : controls;properties of form controls
-Oracle Open Office Writer : controls;properties of table controls
-Oracle Open Office Writer : controls;reference by SQL
-Oracle Open Office Writer : controls;rich text control
-Oracle Open Office Writer : controls;select mode
-Oracle Open Office Writer : controls;showing (Writer)
-Oracle Open Office Writer : converters
-Oracle Open Office Writer : converters;Euro converter
-Oracle Open Office Writer : converters;PostScript, UNIX
-Oracle Open Office Writer : converters;XML
-Oracle Open Office Writer : converting
-Oracle Open Office Writer : converting;fields, into text
-Oracle Open Office Writer : converting;Hangul/Hanja
-Oracle Open Office Writer : converting;metrics
-Oracle Open Office Writer : converting;Microsoft documents
-Oracle Open Office Writer : converting;Oracle Open Office documents
-Oracle Open Office Writer : converting;Pocket PC formats
-Oracle Open Office Writer : converting;sections, into normal text
-Oracle Open Office Writer : converting;text, into tables
-Oracle Open Office Writer : copies
-Oracle Open Office Writer : copies;printing
-Oracle Open Office Writer : copies;removing line breaks
-Oracle Open Office Writer : copying
-Oracle Open Office Writer : copying;by drag and drop
-Oracle Open Office Writer : copying;charts from Oracle Open Office Calc
-Oracle Open Office Writer : copying;data from text documents
-Oracle Open Office Writer : copying;datasource records in spreadsheets
-Oracle Open Office Writer : copying;draw objects
-Oracle Open Office Writer : copying;draw objects between documents
-Oracle Open Office Writer : copying;formatting
-Oracle Open Office Writer : copying;from data source view
-Oracle Open Office Writer : copying;from Gallery
-Oracle Open Office Writer : copying;in Unix
-Oracle Open Office Writer : copying;pictures, between documents
-Oracle Open Office Writer : copying;sheet areas, to text documents
-Oracle Open Office Writer : copying;styles, by fill format mode
-Oracle Open Office Writer : copying;styles, from selections
-Oracle Open Office Writer : copying;text sections
-Oracle Open Office Writer : copying;to Gallery
-Oracle Open Office Writer : copyright for Oracle Open Office
-Oracle Open Office Writer : corner roundings
-Oracle Open Office Writer : counting words
-Oracle Open Office Writer : crash reports
-Oracle Open Office Writer : criteria of query design (Base)
-Oracle Open Office Writer : cropping pictures
-Oracle Open Office Writer : cross-references
-Oracle Open Office Writer : cross-references;inserting and updating
-Oracle Open Office Writer : cross-references;inserting with Navigator
-Oracle Open Office Writer : cross-references;modifying
-Oracle Open Office Writer : CTL
-Oracle Open Office Writer : CTL;(not) wrapping words
-Oracle Open Office Writer : CTL;complex text layout languages
-Oracle Open Office Writer : CTL;definition
-Oracle Open Office Writer : CTL;options
-Oracle Open Office Writer : currencies
-Oracle Open Office Writer : currencies;converters
-Oracle Open Office Writer : currencies;format codes
-Oracle Open Office Writer : currency field creation
-Oracle Open Office Writer : currency formats
-Oracle Open Office Writer : cursor
-Oracle Open Office Writer : cursor;allowing in protected areas (Writer)
-Oracle Open Office Writer : cursor;direct cursor
-Oracle Open Office Writer : cursor;in read-only text
-Oracle Open Office Writer : cursor;quickly moving to an object
-Oracle Open Office Writer : curves
-Oracle Open Office Writer : curves;editing points
-Oracle Open Office Writer : curves;properties in line charts/XY charts
-Oracle Open Office Writer : custom dictionaries
-Oracle Open Office Writer : custom dictionaries;editing
-Oracle Open Office Writer : custom dictionaries;removing words from
-Oracle Open Office Writer : custom hyphens (Writer)
-Oracle Open Office Writer : custom quotes
-Oracle Open Office Writer : custom templates
-Oracle Open Office Writer : customizing
-Oracle Open Office Writer : customizing;events
-Oracle Open Office Writer : customizing;keyboard
-Oracle Open Office Writer : customizing;menus
-Oracle Open Office Writer : customizing;Oracle Open Office
-Oracle Open Office Writer : customizing;round corners
-Oracle Open Office Writer : customizing;toolbars
-Oracle Open Office Writer : cutting
-Oracle Open Office Writer : dashes
-Oracle Open Office Writer : data
-Oracle Open Office Writer : data;filtering in forms
-Oracle Open Office Writer : data;forms and subforms
-Oracle Open Office Writer : data;read-only
-Oracle Open Office Writer : data;sorting in forms
-Oracle Open Office Writer : data;user data
-Oracle Open Office Writer : data binding change in XForms
-Oracle Open Office Writer : data labels in charts
-Oracle Open Office Writer : Data Navigator
-Oracle Open Office Writer : Data Navigator;adding/editing items
-Oracle Open Office Writer : Data Navigator;display options
-Oracle Open Office Writer : data ranges in charts
-Oracle Open Office Writer : data series
-Oracle Open Office Writer : data source browser
-Oracle Open Office Writer : data source explorer
-Oracle Open Office Writer : data source view
-Oracle Open Office Writer : data source view;drag and drop
-Oracle Open Office Writer : data source view;overview
-Oracle Open Office Writer : data source view;showing
-Oracle Open Office Writer : data sources
-Oracle Open Office Writer : data sources;as tables
-Oracle Open Office Writer : data sources;connection settings (Base)
-Oracle Open Office Writer : data sources;copying records to spreadsheets
-Oracle Open Office Writer : data sources;displaying current
-Oracle Open Office Writer : data sources;LDAP server (Base)
-Oracle Open Office Writer : data sources;Oracle Open Office Base
-Oracle Open Office Writer : data sources;registering address books
-Oracle Open Office Writer : data sources;reports
-Oracle Open Office Writer : data sources;setting for stock charts
-Oracle Open Office Writer : data sources;viewing
-Oracle Open Office Writer : data structure of XForms
-Oracle Open Office Writer : data values in charts
-Oracle Open Office Writer : data, see also values
-Oracle Open Office Writer : database contents
-Oracle Open Office Writer : database contents;inserting as tables
-Oracle Open Office Writer : database contents;inserting as text
-Oracle Open Office Writer : database reports
-Oracle Open Office Writer : Database Wizard (Base)
-Oracle Open Office Writer : databases
-Oracle Open Office Writer : databases;administration through SQL (Base)
-Oracle Open Office Writer : databases;ADO (Base)
-Oracle Open Office Writer : databases;connecting (Base)
-Oracle Open Office Writer : databases;creating
-Oracle Open Office Writer : databases;creating bibliographies
-Oracle Open Office Writer : databases;creating labels
-Oracle Open Office Writer : databases;creating queries
-Oracle Open Office Writer : databases;creating reports
-Oracle Open Office Writer : databases;creating tables
-Oracle Open Office Writer : databases;deleting (Base)
-Oracle Open Office Writer : databases;drag and drop (Base)
-Oracle Open Office Writer : databases;editing tables
-Oracle Open Office Writer : databases;exchanging
-Oracle Open Office Writer : databases;form filters
-Oracle Open Office Writer : databases;formats (Base)
-Oracle Open Office Writer : databases;importing/exporting
-Oracle Open Office Writer : databases;in conditions
-Oracle Open Office Writer : databases;JDBC (Base)
-Oracle Open Office Writer : databases;main page (Base)
-Oracle Open Office Writer : databases;ODBC (Base)
-Oracle Open Office Writer : databases;overview
-Oracle Open Office Writer : databases;registering (Base)
-Oracle Open Office Writer : databases;searching records
-Oracle Open Office Writer : databases;shortcut keys
-Oracle Open Office Writer : databases;sorting
-Oracle Open Office Writer : databases;standard filters
-Oracle Open Office Writer : databases;text formats
-Oracle Open Office Writer : databases;viewing
-Oracle Open Office Writer : date fields
-Oracle Open Office Writer : date fields;creating
-Oracle Open Office Writer : date fields;fixed/variable
-Oracle Open Office Writer : date fields;HTML
-Oracle Open Office Writer : date fields;properties
-Oracle Open Office Writer : date formats
-Oracle Open Office Writer : dates
-Oracle Open Office Writer : dates;default (Calc)
-Oracle Open Office Writer : dates;formatting automatically in tables
-Oracle Open Office Writer : dates;inserting
-Oracle Open Office Writer : dates;printing in presentations
-Oracle Open Office Writer : dates;start 1900/01/01 (Calc)
-Oracle Open Office Writer : dates;start 1904/01/01 (Calc)
-Oracle Open Office Writer : dBASE
-Oracle Open Office Writer : dBASE;database settings (Base)
-Oracle Open Office Writer : DDE
-Oracle Open Office Writer : DDE;command for inserting sections
-Oracle Open Office Writer : DDE;definition
-Oracle Open Office Writer : DDE;inserting tables
-Oracle Open Office Writer : deactivating
-Oracle Open Office Writer : deactivating;plug-ins
-Oracle Open Office Writer : deactivating;word completion
-Oracle Open Office Writer : decimal places displayed (Calc)
-Oracle Open Office Writer : decimal separator key
-Oracle Open Office Writer : decimal tab stops
-Oracle Open Office Writer : default directories
-Oracle Open Office Writer : default filters
-Oracle Open Office Writer : default filters;comparison operators
-Oracle Open Office Writer : default filters;databases
-Oracle Open Office Writer : default printer
-Oracle Open Office Writer : default printer;setting up
-Oracle Open Office Writer : default printer;UNIX
-Oracle Open Office Writer : default templates
-Oracle Open Office Writer : default templates;changing
-Oracle Open Office Writer : default templates;defining/resetting
-Oracle Open Office Writer : default templates;organizing
-Oracle Open Office Writer : defaults
-Oracle Open Office Writer : defaults;documents
-Oracle Open Office Writer : defaults;file formats in file dialogs
-Oracle Open Office Writer : defaults;file formats in Oracle Open Office
-Oracle Open Office Writer : defaults;fonts
-Oracle Open Office Writer : defaults;grids (Writer/Calc)
-Oracle Open Office Writer : defaults;languages
-Oracle Open Office Writer : defaults;number formats
-Oracle Open Office Writer : defaults;of saving
-Oracle Open Office Writer : defaults;program configuration
-Oracle Open Office Writer : defaults;tab stops in text
-Oracle Open Office Writer : defaults;templates
-Oracle Open Office Writer : defaults;views
-Oracle Open Office Writer : defining
-Oracle Open Office Writer : defining;arrowheads and other line ends
-Oracle Open Office Writer : defining;colors
-Oracle Open Office Writer : defining;conditions
-Oracle Open Office Writer : defining;headers/footers
-Oracle Open Office Writer : defining;line styles
-Oracle Open Office Writer : defining;object borders
-Oracle Open Office Writer : defining;page borders
-Oracle Open Office Writer : defining;page styles
-Oracle Open Office Writer : defining;paragraph borders
-Oracle Open Office Writer : defining;queries (Base)
-Oracle Open Office Writer : defining;starting page numbers
-Oracle Open Office Writer : defining;table borders
-Oracle Open Office Writer : defining;table borders in Writer
-Oracle Open Office Writer : deleting
-Oracle Open Office Writer : deleting;all direct formatting
-Oracle Open Office Writer : deleting;comments
-Oracle Open Office Writer : deleting;databases (Base)
-Oracle Open Office Writer : deleting;entries of indexes/tables of contents
-Oracle Open Office Writer : deleting;footnotes
-Oracle Open Office Writer : deleting;heading numbers
-Oracle Open Office Writer : deleting;hyperlinks
-Oracle Open Office Writer : deleting;indexes/tables of contents
-Oracle Open Office Writer : deleting;line breaks
-Oracle Open Office Writer : deleting;lines in text
-Oracle Open Office Writer : deleting;models/instances
-Oracle Open Office Writer : deleting;namespaces in XForms
-Oracle Open Office Writer : deleting;numbers in lists
-Oracle Open Office Writer : deleting;page breaks
-Oracle Open Office Writer : deleting;rows/columns, by keyboard
-Oracle Open Office Writer : deleting;tab stops
-Oracle Open Office Writer : deleting;tables or table contents
-Oracle Open Office Writer : deleting;templates
-Oracle Open Office Writer : deleting;words in user-defined dictionaries
-Oracle Open Office Writer : deleting;XML filters
-Oracle Open Office Writer : demoting heading levels
-Oracle Open Office Writer : depth stagger
-Oracle Open Office Writer : descriptions for objects
-Oracle Open Office Writer : design mode after saving
-Oracle Open Office Writer : design view
-Oracle Open Office Writer : design view;creating forms
-Oracle Open Office Writer : design view;queries/views (Base)
-Oracle Open Office Writer : designing
-Oracle Open Office Writer : designing;database tables
-Oracle Open Office Writer : designing;fonts
-Oracle Open Office Writer : designing;queries (Base)
-Oracle Open Office Writer : detaching toolbars
-Oracle Open Office Writer : dictionaries
-Oracle Open Office Writer : dictionaries;common terms in simplified and traditional chinese
-Oracle Open Office Writer : dictionaries;creating
-Oracle Open Office Writer : dictionaries;editing user-defined
-Oracle Open Office Writer : dictionaries;spellcheck
-Oracle Open Office Writer : dictionaries;thesaurus
-Oracle Open Office Writer : dictionaries, see also languages
-Oracle Open Office Writer : digital signatures
-Oracle Open Office Writer : digital signatures;getting/managing/applying
-Oracle Open Office Writer : digital signatures;overview
-Oracle Open Office Writer : digital signatures;WebDAV over HTTPS
-Oracle Open Office Writer : direct cursor
-Oracle Open Office Writer : direct cursor;restriction
-Oracle Open Office Writer : direct cursor;settings
-Oracle Open Office Writer : direct formatting
-Oracle Open Office Writer : direct formatting;exiting
-Oracle Open Office Writer : direct formatting;undoing all
-Oracle Open Office Writer : directories
-Oracle Open Office Writer : directories;creating new
-Oracle Open Office Writer : directories;directory structure
-Oracle Open Office Writer : disabled persons
-Oracle Open Office Writer : disabling
-Oracle Open Office Writer : disabling;field highlighting
-Oracle Open Office Writer : disabling;smart tags
-Oracle Open Office Writer : disabling;word completion
-Oracle Open Office Writer : displaying
-Oracle Open Office Writer : displaying;comments (Calc)
-Oracle Open Office Writer : displaying;comments in text documents
-Oracle Open Office Writer : displaying;hidden text
-Oracle Open Office Writer : displaying;non-printing characters (Writer)
-Oracle Open Office Writer : displaying;pictures and objects (Writer)
-Oracle Open Office Writer : displaying;tables (Writer)
-Oracle Open Office Writer : displaying;zero values (Calc)
-Oracle Open Office Writer : distances
-Oracle Open Office Writer : distinct values in SQL queries
-Oracle Open Office Writer : distorting in drawings
-Oracle Open Office Writer : distributing XML filters
-Oracle Open Office Writer : dividing tables
-Oracle Open Office Writer : DocInformation fields
-Oracle Open Office Writer : docking
-Oracle Open Office Writer : docking;definition
-Oracle Open Office Writer : docking;Navigator window
-Oracle Open Office Writer : docking;toolbars
-Oracle Open Office Writer : docking;windows
-Oracle Open Office Writer : Document Converter Wizard
-Oracle Open Office Writer : Document Map, see Navigator
-Oracle Open Office Writer : document templates
-Oracle Open Office Writer : document types in Oracle Open Office
-Oracle Open Office Writer : documents
-Oracle Open Office Writer : documents;changing titles
-Oracle Open Office Writer : documents;closing
-Oracle Open Office Writer : documents;comparing
-Oracle Open Office Writer : documents;contents as lists
-Oracle Open Office Writer : documents;editing time
-Oracle Open Office Writer : documents;exporting
-Oracle Open Office Writer : documents;importing
-Oracle Open Office Writer : documents;languages
-Oracle Open Office Writer : documents;master documents and subdocuments
-Oracle Open Office Writer : documents;measurement units in
-Oracle Open Office Writer : documents;merging
-Oracle Open Office Writer : documents;number of pages/tables/sheets
-Oracle Open Office Writer : documents;number of words/characters
-Oracle Open Office Writer : documents;opening
-Oracle Open Office Writer : documents;opening in design mode
-Oracle Open Office Writer : documents;opening with templates
-Oracle Open Office Writer : documents;organizing
-Oracle Open Office Writer : documents;printing
-Oracle Open Office Writer : documents;read-only
-Oracle Open Office Writer : documents;reloading
-Oracle Open Office Writer : documents;saving
-Oracle Open Office Writer : documents;saving automatically
-Oracle Open Office Writer : documents;saving in other formats
-Oracle Open Office Writer : documents;sending as e-mail
-Oracle Open Office Writer : documents;styles changed
-Oracle Open Office Writer : documents;version management
-Oracle Open Office Writer : documents;version numbers
-Oracle Open Office Writer : donut charts
-Oracle Open Office Writer : dotted areas
-Oracle Open Office Writer : double-line spacing in paragraphs
-Oracle Open Office Writer : double-line writing in Asian layout
-Oracle Open Office Writer : drag and drop
-Oracle Open Office Writer : drag and drop;copying and pasting text
-Oracle Open Office Writer : drag and drop;creating new styles
-Oracle Open Office Writer : drag and drop;data source view
-Oracle Open Office Writer : drag and drop;from Gallery to draw objects
-Oracle Open Office Writer : drag and drop;overview
-Oracle Open Office Writer : drag and drop;pictures
-Oracle Open Office Writer : drag and drop;to Gallery
-Oracle Open Office Writer : draw objects
-Oracle Open Office Writer : draw objects;adding/editing/copying
-Oracle Open Office Writer : draw objects;anchoring
-Oracle Open Office Writer : draw objects;arranging within stacks
-Oracle Open Office Writer : draw objects;copying between documents
-Oracle Open Office Writer : draw objects;cross-referencing
-Oracle Open Office Writer : draw objects;displaying (Calc)
-Oracle Open Office Writer : draw objects;dropping Gallery pictures
-Oracle Open Office Writer : draw objects;flipping
-Oracle Open Office Writer : draw objects;inserting captions
-Oracle Open Office Writer : draw objects;legends
-Oracle Open Office Writer : draw objects;positioning and resizing
-Oracle Open Office Writer : draw objects;protecting
-Oracle Open Office Writer : draw objects;slanting
-Oracle Open Office Writer : draw objects;text in
-Oracle Open Office Writer : Drawing bar
-Oracle Open Office Writer : drawing lines in text
-Oracle Open Office Writer : drawings
-Oracle Open Office Writer : drawings;creating/opening
-Oracle Open Office Writer : drawings;languages
-Oracle Open Office Writer : drawings;printing
-Oracle Open Office Writer : drawings;printing defaults
-Oracle Open Office Writer : drawings;printing in text documents
-Oracle Open Office Writer : drawings;saving
-Oracle Open Office Writer : drawings;saving automatically
-Oracle Open Office Writer : drawings;saving in other formats
-Oracle Open Office Writer : drawings;sending as e-mail
-Oracle Open Office Writer : drawings;showing (Writer)
-Oracle Open Office Writer : drawings, see also draw objects
-Oracle Open Office Writer : drop caps insertion
-Oracle Open Office Writer : drop-down lists in form functions
-Oracle Open Office Writer : e-mail attachments
-Oracle Open Office Writer : Edit File icon
-Oracle Open Office Writer : edit mode
-Oracle Open Office Writer : edit mode;after opening
-Oracle Open Office Writer : edit mode;through Enter key (Calc)
-Oracle Open Office Writer : Edit Points bar
-Oracle Open Office Writer : editing
-Oracle Open Office Writer : editing;captions
-Oracle Open Office Writer : editing;chart axes
-Oracle Open Office Writer : editing;chart data
-Oracle Open Office Writer : editing;chart legends
-Oracle Open Office Writer : editing;chart titles
-Oracle Open Office Writer : editing;comments
-Oracle Open Office Writer : editing;concordance files
-Oracle Open Office Writer : editing;cross-references
-Oracle Open Office Writer : editing;data binding of XForms
-Oracle Open Office Writer : editing;database tables and queries
-Oracle Open Office Writer : editing;draw objects
-Oracle Open Office Writer : editing;Fontwork objects
-Oracle Open Office Writer : editing;footnotes/endnotes
-Oracle Open Office Writer : editing;hyperlinks
-Oracle Open Office Writer : editing;index format
-Oracle Open Office Writer : editing;indexes/tables of contents
-Oracle Open Office Writer : editing;menus
-Oracle Open Office Writer : editing;objects
-Oracle Open Office Writer : editing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Writer : editing;pictures
-Oracle Open Office Writer : editing;reports
-Oracle Open Office Writer : editing;sections
-Oracle Open Office Writer : editing;shortcut keys
-Oracle Open Office Writer : editing;tab stops
-Oracle Open Office Writer : editing;table/index entries
-Oracle Open Office Writer : editing;templates
-Oracle Open Office Writer : editing;text frames
-Oracle Open Office Writer : editing;titles
-Oracle Open Office Writer : editing;toolbars
-Oracle Open Office Writer : editing;undoing
-Oracle Open Office Writer : editing;XForms
-Oracle Open Office Writer : editing time of documents
-Oracle Open Office Writer : editors
-Oracle Open Office Writer : editors;contour editor
-Oracle Open Office Writer : editors;formula editor
-Oracle Open Office Writer : editors;ImageMap editor
-Oracle Open Office Writer : effects
-Oracle Open Office Writer : effects;font positions
-Oracle Open Office Writer : effects;fonts
-Oracle Open Office Writer : effects;Fontwork icons
-Oracle Open Office Writer : effects;text animation
-Oracle Open Office Writer : emphasizing text
-Oracle Open Office Writer : empty documents
-Oracle Open Office Writer : empty page with alternating page styles
-Oracle Open Office Writer : empty paragraph removal
-Oracle Open Office Writer : encryption of contents
-Oracle Open Office Writer : endnotes
-Oracle Open Office Writer : endnotes;inserting and editing
-Oracle Open Office Writer : endnotes;spacing
-Oracle Open Office Writer : enlarging columns,cells and table rows
-Oracle Open Office Writer : entering groups
-Oracle Open Office Writer : entering text from right to left
-Oracle Open Office Writer : entering text with direct cursor
-Oracle Open Office Writer : entries
-Oracle Open Office Writer : entries;bibliographies
-Oracle Open Office Writer : entries;defining in indexes/tables of contents
-Oracle Open Office Writer : entries;in tables of contents, as hyperlinks
-Oracle Open Office Writer : envelopes
-Oracle Open Office Writer : equal sign, see also operators
-Oracle Open Office Writer : equations in formula editor
-Oracle Open Office Writer : error bars in charts
-Oracle Open Office Writer : error indicators in charts
-Oracle Open Office Writer : Error Report Tool
-Oracle Open Office Writer : Euro
-Oracle Open Office Writer : Euro;currency formats
-Oracle Open Office Writer : Euro;Euro Converter Wizard
-Oracle Open Office Writer : even/odd pages
-Oracle Open Office Writer : even/odd pages;formatting
-Oracle Open Office Writer : even/odd pages;printing
-Oracle Open Office Writer : events
-Oracle Open Office Writer : events;assigning scripts
-Oracle Open Office Writer : events;controls
-Oracle Open Office Writer : events;customizing
-Oracle Open Office Writer : events;in forms
-Oracle Open Office Writer : examples for regular expressions
-Oracle Open Office Writer : Excel
-Oracle Open Office Writer : Excel;saving as
-Oracle Open Office Writer : Excel;search criteria
-Oracle Open Office Writer : exceptions
-Oracle Open Office Writer : exceptions;AutoCorrect function
-Oracle Open Office Writer : exceptions;user-defined dictionaries
-Oracle Open Office Writer : exchanging databases
-Oracle Open Office Writer : exchanging, see also replacing
-Oracle Open Office Writer : executing SQL commands
-Oracle Open Office Writer : exiting
-Oracle Open Office Writer : exiting;direct formatting
-Oracle Open Office Writer : exiting;groups
-Oracle Open Office Writer : exiting;Oracle Open Office
-Oracle Open Office Writer : expanding formatting (Calc)
-Oracle Open Office Writer : explorer of data sources
-Oracle Open Office Writer : export filters
-Oracle Open Office Writer : exporting
-Oracle Open Office Writer : exporting;bitmaps
-Oracle Open Office Writer : exporting;HTML and text documents
-Oracle Open Office Writer : exporting;Microsoft Office documents with VBA code
-Oracle Open Office Writer : exporting;spreadsheets to text format
-Oracle Open Office Writer : exporting;templates
-Oracle Open Office Writer : exporting;to foreign formats
-Oracle Open Office Writer : exporting;to HTML
-Oracle Open Office Writer : exporting;to Microsoft Office formats
-Oracle Open Office Writer : exporting;to PDF
-Oracle Open Office Writer : exporting;to PostScript format
-Oracle Open Office Writer : exporting;to XML
-Oracle Open Office Writer : exporting;XML files
-Oracle Open Office Writer : extended tips in Help
-Oracle Open Office Writer : extension mode in text
-Oracle Open Office Writer : extensions
-Oracle Open Office Writer : extensions;Extension Manager
-Oracle Open Office Writer : extensions;file formats
-Oracle Open Office Writer : external keys (Base)
-Oracle Open Office Writer : faster printing
-Oracle Open Office Writer : faxes
-Oracle Open Office Writer : faxes;configuring Oracle Open Office
-Oracle Open Office Writer : faxes;fax programs/fax printers under UNIX
-Oracle Open Office Writer : faxes;selecting a fax machine
-Oracle Open Office Writer : faxes;sending
-Oracle Open Office Writer : faxes;wizards
-Oracle Open Office Writer : feedback
-Oracle Open Office Writer : feedback;automatically
-Oracle Open Office Writer : fields
-Oracle Open Office Writer : fields;converting into text
-Oracle Open Office Writer : fields;database tables
-Oracle Open Office Writer : fields;defining conditions
-Oracle Open Office Writer : fields;displaying field codes (Writer)
-Oracle Open Office Writer : fields;formatted fields
-Oracle Open Office Writer : fields;HTML import and export
-Oracle Open Office Writer : fields;input fields in text
-Oracle Open Office Writer : fields;inserting time
-Oracle Open Office Writer : fields;subject
-Oracle Open Office Writer : fields;updating automatically (Writer)
-Oracle Open Office Writer : fields;updating/viewing
-Oracle Open Office Writer : fields;user data
-Oracle Open Office Writer : file associations for Microsoft Office
-Oracle Open Office Writer : file filters
-Oracle Open Office Writer : file filters;mobile devices
-Oracle Open Office Writer : file filters;XML
-Oracle Open Office Writer : file formats
-Oracle Open Office Writer : file formats;changing Oracle Open Office defaults
-Oracle Open Office Writer : file formats;OpenDocument/XML
-Oracle Open Office Writer : file formats;saving always in other formats
-Oracle Open Office Writer : file selection button
-Oracle Open Office Writer : file sharing options for current document
-Oracle Open Office Writer : files
-Oracle Open Office Writer : files;filters and formats
-Oracle Open Office Writer : files;importing
-Oracle Open Office Writer : files;opening
-Oracle Open Office Writer : files;opening with placeholders
-Oracle Open Office Writer : files;properties
-Oracle Open Office Writer : files;saving
-Oracle Open Office Writer : files;saving automatically
-Oracle Open Office Writer : files;saving in other formats
-Oracle Open Office Writer : files;sending as e-mail
-Oracle Open Office Writer : files;version numbers
-Oracle Open Office Writer : files and folders in Oracle Open Office
-Oracle Open Office Writer : fill characters with tabulators
-Oracle Open Office Writer : fill colors for areas
-Oracle Open Office Writer : fill format mode
-Oracle Open Office Writer : fill patterns for areas
-Oracle Open Office Writer : filter conditions
-Oracle Open Office Writer : filter conditions;connecting
-Oracle Open Office Writer : filter conditions;in queries (Base)
-Oracle Open Office Writer : filtering
-Oracle Open Office Writer : filtering;data in databases
-Oracle Open Office Writer : filtering;data in forms
-Oracle Open Office Writer : filters
-Oracle Open Office Writer : filters;comparison operators
-Oracle Open Office Writer : filters;for import and export
-Oracle Open Office Writer : filters;Navigator
-Oracle Open Office Writer : filters;pictures
-Oracle Open Office Writer : filters;XML filter settings
-Oracle Open Office Writer : Find tab in Help
-Oracle Open Office Writer : finding
-Oracle Open Office Writer : finding;in all sheets
-Oracle Open Office Writer : finding;records in form documents
-Oracle Open Office Writer : finding;selections
-Oracle Open Office Writer : finding;similarity search
-Oracle Open Office Writer : finding;text/text formats/styles/objects
-Oracle Open Office Writer : first letters as large capital letters
-Oracle Open Office Writer : First Page page style
-Oracle Open Office Writer : fitting to pages
-Oracle Open Office Writer : fitting to pages;print settings in Math
-Oracle Open Office Writer : fitting to pages;print settings in presentations
-Oracle Open Office Writer : fixed dates
-Oracle Open Office Writer : fixed text
-Oracle Open Office Writer : fixed text;form functions
-Oracle Open Office Writer : fixing toolbars
-Oracle Open Office Writer : flipping draw objects
-Oracle Open Office Writer : floating frames in HTML documents
-Oracle Open Office Writer : floating titles in headers
-Oracle Open Office Writer : floating toolbars
-Oracle Open Office Writer : focus of controls
-Oracle Open Office Writer : folder creation
-Oracle Open Office Writer : font attributes
-Oracle Open Office Writer : font attributes;resetting
-Oracle Open Office Writer : font lists
-Oracle Open Office Writer : font name box
-Oracle Open Office Writer : font sizes
-Oracle Open Office Writer : font sizes;bullets
-Oracle Open Office Writer : font sizes;relative changes
-Oracle Open Office Writer : font sizes;scaling on screen
-Oracle Open Office Writer : font sizes;text
-Oracle Open Office Writer : fonts
-Oracle Open Office Writer : fonts;adding under UNIX
-Oracle Open Office Writer : fonts;changing in templates
-Oracle Open Office Writer : fonts;colors
-Oracle Open Office Writer : fonts;default settings
-Oracle Open Office Writer : fonts;effects
-Oracle Open Office Writer : fonts;for HTML and Basic
-Oracle Open Office Writer : fonts;formats
-Oracle Open Office Writer : fonts;outlines
-Oracle Open Office Writer : fonts;positions in text
-Oracle Open Office Writer : fonts;resetting
-Oracle Open Office Writer : fonts;shadows
-Oracle Open Office Writer : fonts;specifying several
-Oracle Open Office Writer : fonts;strikethrough
-Oracle Open Office Writer : fonts;styles
-Oracle Open Office Writer : fonts;text objects
-Oracle Open Office Writer : Fontwork icons
-Oracle Open Office Writer : footers
-Oracle Open Office Writer : footers;about
-Oracle Open Office Writer : footers;backgrounds
-Oracle Open Office Writer : footers;defining for left and right pages
-Oracle Open Office Writer : footers;formatting
-Oracle Open Office Writer : footers;inserting
-Oracle Open Office Writer : footers;with page numbers
-Oracle Open Office Writer : footnotes
-Oracle Open Office Writer : footnotes;inserting and editing
-Oracle Open Office Writer : footnotes;spacing
-Oracle Open Office Writer : form controls
-Oracle Open Office Writer : form controls;assigning macros
-Oracle Open Office Writer : form controls;protecting
-Oracle Open Office Writer : form controls;toolbars
-Oracle Open Office Writer : form fields
-Oracle Open Office Writer : form filters
-Oracle Open Office Writer : form letters
-Oracle Open Office Writer : Form Navigator
-Oracle Open Office Writer : format codes
-Oracle Open Office Writer : format codes;numbers
-Oracle Open Office Writer : format filling printing in Oracle Open Office Math
-Oracle Open Office Writer : Format Paintbrush
-Oracle Open Office Writer : formats
-Oracle Open Office Writer : formats;Asian layout
-Oracle Open Office Writer : formats;copying and pasting
-Oracle Open Office Writer : formats;finding and replacing
-Oracle Open Office Writer : formats;fonts
-Oracle Open Office Writer : formats;maximizing page formats
-Oracle Open Office Writer : formats;number and currency formats
-Oracle Open Office Writer : formats;of currencies/date/time
-Oracle Open Office Writer : formats;on opening and saving
-Oracle Open Office Writer : formats;pasting in special formats
-Oracle Open Office Writer : formats;positions
-Oracle Open Office Writer : formats;resetting
-Oracle Open Office Writer : formats;tabulators
-Oracle Open Office Writer : formatted fields
-Oracle Open Office Writer : formatted fields;form functions
-Oracle Open Office Writer : formatted fields;properties
-Oracle Open Office Writer : formatting
-Oracle Open Office Writer : formatting;Asian typography
-Oracle Open Office Writer : formatting;axes in charts
-Oracle Open Office Writer : formatting;bold, while typing
-Oracle Open Office Writer : formatting;bullets
-Oracle Open Office Writer : formatting;changing individual pages
-Oracle Open Office Writer : formatting;chart areas
-Oracle Open Office Writer : formatting;chart floors
-Oracle Open Office Writer : formatting;chart legends
-Oracle Open Office Writer : formatting;chart titles
-Oracle Open Office Writer : formatting;chart walls
-Oracle Open Office Writer : formatting;contour wrap
-Oracle Open Office Writer : formatting;copying
-Oracle Open Office Writer : formatting;definition
-Oracle Open Office Writer : formatting;even/odd pages
-Oracle Open Office Writer : formatting;exiting direct formatting
-Oracle Open Office Writer : formatting;expanding (Calc)
-Oracle Open Office Writer : formatting;font effects
-Oracle Open Office Writer : formatting;hyperlinks
-Oracle Open Office Writer : formatting;indenting paragraphs
-Oracle Open Office Writer : formatting;indexes and tables of contents
-Oracle Open Office Writer : formatting;numbered lists
-Oracle Open Office Writer : formatting;page numbers
-Oracle Open Office Writer : formatting;pages
-Oracle Open Office Writer : formatting;printer metrics (Writer)
-Oracle Open Office Writer : formatting;register-true text
-Oracle Open Office Writer : formatting;undoing
-Oracle Open Office Writer : formatting;undoing when writing
-Oracle Open Office Writer : formatting styles
-Oracle Open Office Writer : formatting styles;importing
-Oracle Open Office Writer : formatting styles;styles and templates
-Oracle Open Office Writer : forms
-Oracle Open Office Writer : forms;browsing
-Oracle Open Office Writer : forms;Combo Box/List Box Wizard
-Oracle Open Office Writer : forms;creating
-Oracle Open Office Writer : forms;data
-Oracle Open Office Writer : forms;designing (Base)
-Oracle Open Office Writer : forms;events
-Oracle Open Office Writer : forms;filtering data
-Oracle Open Office Writer : forms;finding records
-Oracle Open Office Writer : forms;focus after opening
-Oracle Open Office Writer : forms;general information (Base)
-Oracle Open Office Writer : forms;grouping controls
-Oracle Open Office Writer : forms;HTML filters
-Oracle Open Office Writer : forms;Navigator
-Oracle Open Office Writer : forms;opening in design mode
-Oracle Open Office Writer : forms;properties
-Oracle Open Office Writer : forms;sorting data
-Oracle Open Office Writer : forms;subforms
-Oracle Open Office Writer : forms;wizards
-Oracle Open Office Writer : forms;XForms
-Oracle Open Office Writer : formula texts
-Oracle Open Office Writer : formula texts;printing in Oracle Open Office Math
-Oracle Open Office Writer : formulas
-Oracle Open Office Writer : formulas;calculating in text
-Oracle Open Office Writer : formulas;complex formulas in text
-Oracle Open Office Writer : formulas;new
-Oracle Open Office Writer : formulas;pasting results in text documents
-Oracle Open Office Writer : formulas;starting formula editor
-Oracle Open Office Writer : formulas in reports
-Oracle Open Office Writer : formulas in reports;editing
-Oracle Open Office Writer : formulating conditions
-Oracle Open Office Writer : forums and support
-Oracle Open Office Writer : frames
-Oracle Open Office Writer : frames;anchoring options
-Oracle Open Office Writer : frames;around objects
-Oracle Open Office Writer : frames;around pages
-Oracle Open Office Writer : frames;around paragraphs
-Oracle Open Office Writer : frames;around tables
-Oracle Open Office Writer : frames;around text tables
-Oracle Open Office Writer : frames;AutoCorrect function
-Oracle Open Office Writer : frames;backgrounds
-Oracle Open Office Writer : frames;captions (Writer)
-Oracle Open Office Writer : frames;defining hyperlinks
-Oracle Open Office Writer : frames;jumping to
-Oracle Open Office Writer : frames;labeling
-Oracle Open Office Writer : frames;linking
-Oracle Open Office Writer : frames;printing in Oracle Open Office Math
-Oracle Open Office Writer : frames;protecting
-Oracle Open Office Writer : frames;selection frames
-Oracle Open Office Writer : frames;styles
-Oracle Open Office Writer : frames;text fitting to frames
-Oracle Open Office Writer : frames;unlinking
-Oracle Open Office Writer : freeform lines
-Oracle Open Office Writer : freeform lines;draw functions
-Oracle Open Office Writer : FTP
-Oracle Open Office Writer : FTP;opening documents
-Oracle Open Office Writer : FTP;saving documents
-Oracle Open Office Writer : full joins (Base)
-Oracle Open Office Writer : full screen view
-Oracle Open Office Writer : full-text search in Help
-Oracle Open Office Writer : functions in reports
-Oracle Open Office Writer : functions in reports;editing
-Oracle Open Office Writer : Gallery
-Oracle Open Office Writer : Gallery;adding pictures
-Oracle Open Office Writer : Gallery;docking and resizing
-Oracle Open Office Writer : Gallery;dragging pictures to draw objects
-Oracle Open Office Writer : Gallery;hiding/showing
-Oracle Open Office Writer : Gallery;inserting pictures from
-Oracle Open Office Writer : get method for form transmissions
-Oracle Open Office Writer : getting support
-Oracle Open Office Writer : GIF format
-Oracle Open Office Writer : glossaries
-Oracle Open Office Writer : glossaries;common terms
-Oracle Open Office Writer : glossaries;Internet terms
-Oracle Open Office Writer : gradients off for faster printing
-Oracle Open Office Writer : grammar checker
-Oracle Open Office Writer : graphic objects, see draw objects
-Oracle Open Office Writer : graphical text art
-Oracle Open Office Writer : graphics
-Oracle Open Office Writer : graphics;cache
-Oracle Open Office Writer : graphics;do not show
-Oracle Open Office Writer : graphics;protecting
-Oracle Open Office Writer : graphics, see also pictures
-Oracle Open Office Writer : grayscale printing
-Oracle Open Office Writer : grid controls
-Oracle Open Office Writer : grid controls;form functions
-Oracle Open Office Writer : grids
-Oracle Open Office Writer : grids;defaults (Writer/Calc)
-Oracle Open Office Writer : grids;display options (Impress/Draw)
-Oracle Open Office Writer : grids;displaying lines (Calc)
-Oracle Open Office Writer : grids;formatting axes
-Oracle Open Office Writer : grids;inserting in charts
-Oracle Open Office Writer : group box creation
-Oracle Open Office Writer : groups
-Oracle Open Office Writer : groups;entering/exiting/ungrouping
-Oracle Open Office Writer : groups;naming
-Oracle Open Office Writer : groups;of controls
-Oracle Open Office Writer : guides
-Oracle Open Office Writer : guides;display options (Impress/Draw)
-Oracle Open Office Writer : guides;displaying when moving objects (Impress)
-Oracle Open Office Writer : guides;showing (Calc)
-Oracle Open Office Writer : guides;showing when moving frames (Writer)
-Oracle Open Office Writer : gutter
-Oracle Open Office Writer : handles
-Oracle Open Office Writer : handles;displaying (Writer)
-Oracle Open Office Writer : handles;scaling
-Oracle Open Office Writer : handles;showing simple/large handles (Calc)
-Oracle Open Office Writer : hanging indents in paragraphs
-Oracle Open Office Writer : Hangul/Hanja
-Oracle Open Office Writer : hard returns in pasted text
-Oracle Open Office Writer : hatching
-Oracle Open Office Writer : headers
-Oracle Open Office Writer : headers;about
-Oracle Open Office Writer : headers;backgrounds
-Oracle Open Office Writer : headers;chapter information
-Oracle Open Office Writer : headers;defining for left and right pages
-Oracle Open Office Writer : headers;formatting
-Oracle Open Office Writer : headers;inserting
-Oracle Open Office Writer : headings
-Oracle Open Office Writer : headings;automatic
-Oracle Open Office Writer : headings;entering as text box
-Oracle Open Office Writer : headings;jumping to
-Oracle Open Office Writer : headings;numbering/paragraph styles
-Oracle Open Office Writer : headings;rearranging
-Oracle Open Office Writer : headings;repeating in tables
-Oracle Open Office Writer : headings;starting with tab stops
-Oracle Open Office Writer : headings;switching levels by keyboard
-Oracle Open Office Writer : Hebrew
-Oracle Open Office Writer : Hebrew;entering text
-Oracle Open Office Writer : Hebrew;language settings
-Oracle Open Office Writer : Help
-Oracle Open Office Writer : Help;bookmarks
-Oracle Open Office Writer : Help;extended tips on/off
-Oracle Open Office Writer : Help;full-text search
-Oracle Open Office Writer : Help;Help tips
-Oracle Open Office Writer : Help;keywords
-Oracle Open Office Writer : Help;navigation pane showing/hiding
-Oracle Open Office Writer : Help;style sheets
-Oracle Open Office Writer : Help;topics
-Oracle Open Office Writer : Help Agent
-Oracle Open Office Writer : Help Agent;help
-Oracle Open Office Writer : Help Agent;options
-Oracle Open Office Writer : Help tips
-Oracle Open Office Writer : Help tips;fields
-Oracle Open Office Writer : Help tips;hiding
-Oracle Open Office Writer : hidden controls in Form Navigator
-Oracle Open Office Writer : hidden fields display (Writer)
-Oracle Open Office Writer : hidden pages
-Oracle Open Office Writer : hidden pages;printing in presentations
-Oracle Open Office Writer : hidden text
-Oracle Open Office Writer : hidden text;displaying
-Oracle Open Office Writer : hidden text;showing (Writer)
-Oracle Open Office Writer : hiding
-Oracle Open Office Writer : hiding;changes
-Oracle Open Office Writer : hiding;chart legends
-Oracle Open Office Writer : hiding;database fields
-Oracle Open Office Writer : hiding;docked windows
-Oracle Open Office Writer : hiding;navigation pane in Help window
-Oracle Open Office Writer : hiding;rulers
-Oracle Open Office Writer : hiding;sections
-Oracle Open Office Writer : hiding;text, from specific users
-Oracle Open Office Writer : hiding;text, with conditions
-Oracle Open Office Writer : high contrast mode
-Oracle Open Office Writer : Hindi
-Oracle Open Office Writer : Hindi;entering text
-Oracle Open Office Writer : Hindi;language settings
-Oracle Open Office Writer : homepage creation
-Oracle Open Office Writer : horizontal lines
-Oracle Open Office Writer : horizontal rulers
-Oracle Open Office Writer : horizontal scrollbars (Writer)
-Oracle Open Office Writer : hotspots
-Oracle Open Office Writer : HowTos for charts
-Oracle Open Office Writer : HTML
-Oracle Open Office Writer : HTML;definition
-Oracle Open Office Writer : HTML;export character set
-Oracle Open Office Writer : HTML;fonts for source display
-Oracle Open Office Writer : HTML;importing META tags
-Oracle Open Office Writer : HTML;live presentations
-Oracle Open Office Writer : HTML;special tags for fields
-Oracle Open Office Writer : HTML documents
-Oracle Open Office Writer : HTML documents;auto reloading
-Oracle Open Office Writer : HTML documents;creating from text documents
-Oracle Open Office Writer : HTML documents;headers and footers
-Oracle Open Office Writer : HTML documents;importing/exporting
-Oracle Open Office Writer : HTML documents;inserting linked sections
-Oracle Open Office Writer : HTML documents;META tags in
-Oracle Open Office Writer : HTML documents;new
-Oracle Open Office Writer : HTML documents;source text
-Oracle Open Office Writer : hyperlinks
-Oracle Open Office Writer : hyperlinks;assigning macros
-Oracle Open Office Writer : hyperlinks;character formats
-Oracle Open Office Writer : hyperlinks;definition
-Oracle Open Office Writer : hyperlinks;deleting
-Oracle Open Office Writer : hyperlinks;editing
-Oracle Open Office Writer : hyperlinks;for objects
-Oracle Open Office Writer : hyperlinks;in tables of contents and indexes
-Oracle Open Office Writer : hyperlinks;inserting
-Oracle Open Office Writer : hyperlinks;inserting from Navigator
-Oracle Open Office Writer : hyperlinks;jumping to
-Oracle Open Office Writer : hyperlinks;relative and absolute
-Oracle Open Office Writer : hyperlinks;turning off automatic recognition
-Oracle Open Office Writer : hyperlinks, see also links
-Oracle Open Office Writer : hyphenation
-Oracle Open Office Writer : hyphenation;activating for a language
-Oracle Open Office Writer : hyphenation;manual/automatic
-Oracle Open Office Writer : hyphenation;minimal number of characters
-Oracle Open Office Writer : hyphenation;preventing for specific words
-Oracle Open Office Writer : hyphens
-Oracle Open Office Writer : hyphens;displaying custom (Writer)
-Oracle Open Office Writer : hyphens;inserting custom
-Oracle Open Office Writer : icon bars, see toolbars
-Oracle Open Office Writer : icon sizes
-Oracle Open Office Writer : if-then queries as fields
-Oracle Open Office Writer : ignore list for spellcheck
-Oracle Open Office Writer : illumination
-Oracle Open Office Writer : illumination;3D charts
-Oracle Open Office Writer : illustrations, see pictures
-Oracle Open Office Writer : image button creation
-Oracle Open Office Writer : image control creation
-Oracle Open Office Writer : ImageMap
-Oracle Open Office Writer : ImageMap;definition
-Oracle Open Office Writer : ImageMap;editor
-Oracle Open Office Writer : images
-Oracle Open Office Writer : images;do not show
-Oracle Open Office Writer : images;ImageMap
-Oracle Open Office Writer : images;inserting and editing bitmaps
-Oracle Open Office Writer : images;inserting in text
-Oracle Open Office Writer : images, see also pictures
-Oracle Open Office Writer : IME
-Oracle Open Office Writer : IME;definition
-Oracle Open Office Writer : IME;showing/hiding
-Oracle Open Office Writer : import filters
-Oracle Open Office Writer : import restrictions for Microsoft Office
-Oracle Open Office Writer : importing
-Oracle Open Office Writer : importing;bitmaps
-Oracle Open Office Writer : importing;compatibility settings for text import
-Oracle Open Office Writer : importing;databases
-Oracle Open Office Writer : importing;documents in other formats
-Oracle Open Office Writer : importing;from XML
-Oracle Open Office Writer : importing;HTML and text documents
-Oracle Open Office Writer : importing;HTML with META tags
-Oracle Open Office Writer : importing;Microsoft Office documents with VBA code
-Oracle Open Office Writer : importing;styles from other files
-Oracle Open Office Writer : importing;tables in text format
-Oracle Open Office Writer : importing;templates
-Oracle Open Office Writer : improvement program
-Oracle Open Office Writer : inches
-Oracle Open Office Writer : indents
-Oracle Open Office Writer : indents;in text
-Oracle Open Office Writer : indents;setting on rulers
-Oracle Open Office Writer : Index tab in Help
-Oracle Open Office Writer : indexes
-Oracle Open Office Writer : indexes;alphabetical indexes
-Oracle Open Office Writer : indexes;backgrounds
-Oracle Open Office Writer : indexes;creating bibliographies
-Oracle Open Office Writer : indexes;creating user-defined indexes
-Oracle Open Office Writer : indexes;defining entries in
-Oracle Open Office Writer : indexes;editing or deleting entries
-Oracle Open Office Writer : indexes;editing/updating/deleting
-Oracle Open Office Writer : indexes;formatting
-Oracle Open Office Writer : indexes;master documents
-Oracle Open Office Writer : indexes;multiple documents
-Oracle Open Office Writer : indexes;showing/hiding Help index tab
-Oracle Open Office Writer : indexes;unprotecting
-Oracle Open Office Writer : indicator lines in text
-Oracle Open Office Writer : initial capitals in titles
-Oracle Open Office Writer : inner joins (Base)
-Oracle Open Office Writer : input fields in text
-Oracle Open Office Writer : input method window
-Oracle Open Office Writer : insert mode for entering text
-Oracle Open Office Writer : inserting
-Oracle Open Office Writer : inserting;buttons in toolbars
-Oracle Open Office Writer : inserting;captions
-Oracle Open Office Writer : inserting;cell ranges from spreadsheets
-Oracle Open Office Writer : inserting;chapter numbers in captions
-Oracle Open Office Writer : inserting;charts
-Oracle Open Office Writer : inserting;clipboard options
-Oracle Open Office Writer : inserting;comments
-Oracle Open Office Writer : inserting;cross-references
-Oracle Open Office Writer : inserting;data from text documents
-Oracle Open Office Writer : inserting;datasource records in spreadsheets
-Oracle Open Office Writer : inserting;date fields
-Oracle Open Office Writer : inserting;drawings
-Oracle Open Office Writer : inserting;envelopes
-Oracle Open Office Writer : inserting;floating frames
-Oracle Open Office Writer : inserting;Fontwork objects
-Oracle Open Office Writer : inserting;footnotes/endnotes
-Oracle Open Office Writer : inserting;form fields
-Oracle Open Office Writer : inserting;from Gallery into text
-Oracle Open Office Writer : inserting;horizontal lines
-Oracle Open Office Writer : inserting;hyperlinks
-Oracle Open Office Writer : inserting;hyperlinks from Navigator
-Oracle Open Office Writer : inserting;input fields
-Oracle Open Office Writer : inserting;line breaks in cells
-Oracle Open Office Writer : inserting;lines under headers/above footers
-Oracle Open Office Writer : inserting;movies/sounds
-Oracle Open Office Writer : inserting;new text tables defaults
-Oracle Open Office Writer : inserting;numbering
-Oracle Open Office Writer : inserting;objects from Gallery
-Oracle Open Office Writer : inserting;OLE objects
-Oracle Open Office Writer : inserting;page breaks
-Oracle Open Office Writer : inserting;page numbers
-Oracle Open Office Writer : inserting;paragraph borders
-Oracle Open Office Writer : inserting;paragraph bullets
-Oracle Open Office Writer : inserting;paragraphs before/after tables
-Oracle Open Office Writer : inserting;pictures
-Oracle Open Office Writer : inserting;pictures in Gallery
-Oracle Open Office Writer : inserting;pictures, by dialog
-Oracle Open Office Writer : inserting;plug-ins
-Oracle Open Office Writer : inserting;push buttons
-Oracle Open Office Writer : inserting;rows/columns, by keyboard
-Oracle Open Office Writer : inserting;scanned images
-Oracle Open Office Writer : inserting;sections
-Oracle Open Office Writer : inserting;special characters
-Oracle Open Office Writer : inserting;tab stops
-Oracle Open Office Writer : inserting;tables in text
-Oracle Open Office Writer : inserting;text blocks
-Oracle Open Office Writer : inserting;text documents
-Oracle Open Office Writer : inserting;text frames
-Oracle Open Office Writer : inserting;textures on chart bars
-Oracle Open Office Writer : installing
-Oracle Open Office Writer : installing;ActiveX control
-Oracle Open Office Writer : installing;mobile device filters
-Oracle Open Office Writer : installing;smart tags
-Oracle Open Office Writer : installing;UNO components
-Oracle Open Office Writer : installing;XML filters
-Oracle Open Office Writer : instructions
-Oracle Open Office Writer : instructions;general
-Oracle Open Office Writer : instructions;Oracle Open Office Writer
-Oracle Open Office Writer : Internet
-Oracle Open Office Writer : Internet;checking for updates
-Oracle Open Office Writer : Internet;Internet Explorer for displaying Oracle Open Office documents
-Oracle Open Office Writer : Internet;presentations
-Oracle Open Office Writer : Internet;starting searches
-Oracle Open Office Writer : Internet glossary
-Oracle Open Office Writer : interrupting numbered lists
-Oracle Open Office Writer : invert filter
-Oracle Open Office Writer : invisible areas
-Oracle Open Office Writer : invisible characters
-Oracle Open Office Writer : invisible characters;finding
-Oracle Open Office Writer : italic text
-Oracle Open Office Writer : iterative references in spreadsheets
-Oracle Open Office Writer : Java
-Oracle Open Office Writer : Java;definition
-Oracle Open Office Writer : Java;setting options
-Oracle Open Office Writer : JDBC
-Oracle Open Office Writer : JDBC;databases (Base)
-Oracle Open Office Writer : JDBC;definition
-Oracle Open Office Writer : joining
-Oracle Open Office Writer : joining;numbered lists
-Oracle Open Office Writer : joining;paragraphs
-Oracle Open Office Writer : joining;tables (Base)
-Oracle Open Office Writer : joins in databases (Base)
-Oracle Open Office Writer : jumping
-Oracle Open Office Writer : jumping;to bookmarks
-Oracle Open Office Writer : jumping;to text elements
-Oracle Open Office Writer : justifying text
-Oracle Open Office Writer : juxtaposing tables
-Oracle Open Office Writer : kerning
-Oracle Open Office Writer : kerning;Asian texts
-Oracle Open Office Writer : kerning;definition
-Oracle Open Office Writer : kerning;in characters
-Oracle Open Office Writer : key fields for relations (Base)
-Oracle Open Office Writer : keyboard
-Oracle Open Office Writer : keyboard;accessibility Oracle Open Office Writer
-Oracle Open Office Writer : keyboard;adding or deleting rows/columns
-Oracle Open Office Writer : keyboard;assigning/editing shortcut keys
-Oracle Open Office Writer : keyboard;bold formatting
-Oracle Open Office Writer : keyboard;general commands
-Oracle Open Office Writer : keyboard;modifying the behavior of rows/columns
-Oracle Open Office Writer : keyboard;navigating and selecting in text
-Oracle Open Office Writer : keyboard;removing numbering
-Oracle Open Office Writer : keyboard;resizing rows/columns
-Oracle Open Office Writer : keys
-Oracle Open Office Writer : keys;adding push buttons
-Oracle Open Office Writer : keys;primary keys (Base)
-Oracle Open Office Writer : kiosk export
-Oracle Open Office Writer : labels
-Oracle Open Office Writer : labels;creating and synchronizing
-Oracle Open Office Writer : labels;for charts
-Oracle Open Office Writer : labels;for draw objects
-Oracle Open Office Writer : labels;form functions
-Oracle Open Office Writer : labels;from databases
-Oracle Open Office Writer : labels, see also names/callouts
-Oracle Open Office Writer : landscape and portrait
-Oracle Open Office Writer : languages
-Oracle Open Office Writer : languages;activating modules
-Oracle Open Office Writer : languages;Asian support
-Oracle Open Office Writer : languages;complex text layout
-Oracle Open Office Writer : languages;locale settings
-Oracle Open Office Writer : languages;recognition of
-Oracle Open Office Writer : languages;selecting for text
-Oracle Open Office Writer : languages;setting options
-Oracle Open Office Writer : languages;spellcheck
-Oracle Open Office Writer : languages;spellchecking and formatting
-Oracle Open Office Writer : large handles (Writer)
-Oracle Open Office Writer : large icons
-Oracle Open Office Writer : layer arrangement
-Oracle Open Office Writer : layout
-Oracle Open Office Writer : layout;importing Word documents
-Oracle Open Office Writer : layout;pages
-Oracle Open Office Writer : LDAP server
-Oracle Open Office Writer : LDAP server;address books (Base)
-Oracle Open Office Writer : LDAP server;sign on options
-Oracle Open Office Writer : leading between paragraphs
-Oracle Open Office Writer : left alignment of paragraphs
-Oracle Open Office Writer : left joins (Base)
-Oracle Open Office Writer : Left Page page style
-Oracle Open Office Writer : legends
-Oracle Open Office Writer : legends;charts
-Oracle Open Office Writer : legends;draw objects
-Oracle Open Office Writer : legends;rounding corners
-Oracle Open Office Writer : legends, see also captions
-Oracle Open Office Writer : Letter Wizard
-Oracle Open Office Writer : letters
-Oracle Open Office Writer : letters;creating form letters
-Oracle Open Office Writer : letters;inserting envelopes
-Oracle Open Office Writer : levels
-Oracle Open Office Writer : levels;changing outline levels
-Oracle Open Office Writer : levels;depth stagger
-Oracle Open Office Writer : levels;macro security
-Oracle Open Office Writer : lexicon, see thesaurus
-Oracle Open Office Writer : limits of tables (Writer)
-Oracle Open Office Writer : line breaks
-Oracle Open Office Writer : line breaks;in cells
-Oracle Open Office Writer : line breaks;removing
-Oracle Open Office Writer : line charts
-Oracle Open Office Writer : line numbers
-Oracle Open Office Writer : line spacing
-Oracle Open Office Writer : line spacing;context menu in paragraphs
-Oracle Open Office Writer : line spacing;paragraph
-Oracle Open Office Writer : line styles
-Oracle Open Office Writer : line styles;applying
-Oracle Open Office Writer : line styles;defining
-Oracle Open Office Writer : lines
-Oracle Open Office Writer : lines;automatic drawing on/off
-Oracle Open Office Writer : lines;defining ends
-Oracle Open Office Writer : lines;draw functions
-Oracle Open Office Writer : lines;drawing in text
-Oracle Open Office Writer : lines;editing points
-Oracle Open Office Writer : lines;footnotes/endnotes
-Oracle Open Office Writer : lines;inserting horizontal lines
-Oracle Open Office Writer : lines;removing automatic lines
-Oracle Open Office Writer : lines;under headers/above footers
-Oracle Open Office Writer : lines of text
-Oracle Open Office Writer : lines of text;alignment
-Oracle Open Office Writer : lines of text;indents
-Oracle Open Office Writer : lines of text;numbering
-Oracle Open Office Writer : lines of text;register-true
-Oracle Open Office Writer : lines of text;sorting paragraphs
-Oracle Open Office Writer : links
-Oracle Open Office Writer : links;between cells and controls
-Oracle Open Office Writer : links;by drag and drop
-Oracle Open Office Writer : links;character formats
-Oracle Open Office Writer : links;definition
-Oracle Open Office Writer : links;editing hyperlinks
-Oracle Open Office Writer : links;inserting
-Oracle Open Office Writer : links;inserting sections
-Oracle Open Office Writer : links;inserting text documents as
-Oracle Open Office Writer : links;modifying
-Oracle Open Office Writer : links;opening files with
-Oracle Open Office Writer : links;relational databases (Base)
-Oracle Open Office Writer : links;text frames
-Oracle Open Office Writer : links;turning off automatic recognition
-Oracle Open Office Writer : links;updating options (Writer)
-Oracle Open Office Writer : links;updating specific links
-Oracle Open Office Writer : list box creation
-Oracle Open Office Writer : lists
-Oracle Open Office Writer : lists;automatic numbering
-Oracle Open Office Writer : lists;AutoText shortcuts
-Oracle Open Office Writer : lists;changing levels
-Oracle Open Office Writer : lists;combining numbered lists
-Oracle Open Office Writer : lists;data assigned to controls
-Oracle Open Office Writer : lists;registered databases (Base)
-Oracle Open Office Writer : lists;regular expressions
-Oracle Open Office Writer : lists;removing/interrupting numbering
-Oracle Open Office Writer : live presentations on the Internet
-Oracle Open Office Writer : loading
-Oracle Open Office Writer : loading;documents
-Oracle Open Office Writer : loading;documents from other formats
-Oracle Open Office Writer : loading;HTML documents, automatically
-Oracle Open Office Writer : loading;Microsoft Office documents with VBA code
-Oracle Open Office Writer : loading;reloading
-Oracle Open Office Writer : loading;styles from other files
-Oracle Open Office Writer : loading;XML files
-Oracle Open Office Writer : locale settings
-Oracle Open Office Writer : logarithmic scaling along axes
-Oracle Open Office Writer : logical expressions
-Oracle Open Office Writer : lowercase letters
-Oracle Open Office Writer : lowercase letters;font effects
-Oracle Open Office Writer : lowercase letters;text
-Oracle Open Office Writer : lowering outline levels
-Oracle Open Office Writer : Macro Wizard (Base)
-Oracle Open Office Writer : macros
-Oracle Open Office Writer : macros;assigning to events in forms
-Oracle Open Office Writer : macros;attaching new (Base)
-Oracle Open Office Writer : macros;in MS Office documents
-Oracle Open Office Writer : macros;interrupting
-Oracle Open Office Writer : macros;organizing
-Oracle Open Office Writer : macros;recording
-Oracle Open Office Writer : macros;security
-Oracle Open Office Writer : macros;security levels
-Oracle Open Office Writer : macros;security warning dialog
-Oracle Open Office Writer : macros;selecting security warnings
-Oracle Open Office Writer : magnifiers
-Oracle Open Office Writer : mail merge
-Oracle Open Office Writer : manual hyphenation in text
-Oracle Open Office Writer : manual numbering in text
-Oracle Open Office Writer : manual page breaks
-Oracle Open Office Writer : marginal numbers on text pages
-Oracle Open Office Writer : margins
-Oracle Open Office Writer : margins;pages
-Oracle Open Office Writer : margins;setting with the mouse
-Oracle Open Office Writer : margins;shadows
-Oracle Open Office Writer : marking changes
-Oracle Open Office Writer : marking, see selecting
-Oracle Open Office Writer : master documents
-Oracle Open Office Writer : master documents;creating/editing/exporting
-Oracle Open Office Writer : master documents;indexes
-Oracle Open Office Writer : master documents;properties
-Oracle Open Office Writer : matching conditional text in fields
-Oracle Open Office Writer : Math formula editor
-Oracle Open Office Writer : mean value lines in charts
-Oracle Open Office Writer : measurement units
-Oracle Open Office Writer : measurement units;changing on rulers
-Oracle Open Office Writer : measurement units;converting
-Oracle Open Office Writer : measurement units;selecting
-Oracle Open Office Writer : Media Player window
-Oracle Open Office Writer : menus
-Oracle Open Office Writer : menus;activating context menus
-Oracle Open Office Writer : menus;assigning macros
-Oracle Open Office Writer : menus;customizing
-Oracle Open Office Writer : merging
-Oracle Open Office Writer : merging;cells
-Oracle Open Office Writer : merging;cells, by keyboard
-Oracle Open Office Writer : merging;documents
-Oracle Open Office Writer : merging;indexes
-Oracle Open Office Writer : merging;numbered lists
-Oracle Open Office Writer : merging;tables
-Oracle Open Office Writer : META tags
-Oracle Open Office Writer : metrics
-Oracle Open Office Writer : metrics;converting
-Oracle Open Office Writer : metrics;document formatting (Writer)
-Oracle Open Office Writer : metrics;in sheets
-Oracle Open Office Writer : Microsoft Office
-Oracle Open Office Writer : Microsoft Office;Access databases (base)
-Oracle Open Office Writer : Microsoft Office;as default file format
-Oracle Open Office Writer : Microsoft Office;document import restrictions
-Oracle Open Office Writer : Microsoft Office;feature comparisons
-Oracle Open Office Writer : Microsoft Office;importing password protected files
-Oracle Open Office Writer : Microsoft Office;importing Word documents
-Oracle Open Office Writer : Microsoft Office;importing/exporting VBA code
-Oracle Open Office Writer : Microsoft Office;new users information
-Oracle Open Office Writer : Microsoft Office;opening Microsoft documents
-Oracle Open Office Writer : Microsoft Office;reassigning document types
-Oracle Open Office Writer : migrating macros (Base)
-Oracle Open Office Writer : mirrored page layout
-Oracle Open Office Writer : mobile device filters
-Oracle Open Office Writer : models in XForms
-Oracle Open Office Writer : modifying, see changing
-Oracle Open Office Writer : months
-Oracle Open Office Writer : months;automatically completing
-Oracle Open Office Writer : more controls
-Oracle Open Office Writer : mosaic filter
-Oracle Open Office Writer : mouse
-Oracle Open Office Writer : mouse;moving and copying text
-Oracle Open Office Writer : mouse;pointers when using drag and drop
-Oracle Open Office Writer : mouse;positioning
-Oracle Open Office Writer : movies
-Oracle Open Office Writer : moving
-Oracle Open Office Writer : moving;headings
-Oracle Open Office Writer : moving;objects and frames
-Oracle Open Office Writer : moving;tab stops on ruler
-Oracle Open Office Writer : moving;text sections
-Oracle Open Office Writer : moving;toolbars
-Oracle Open Office Writer : moving;using guide lines in presentations
-Oracle Open Office Writer : MS ADO interface (Base)
-Oracle Open Office Writer : multi-column text
-Oracle Open Office Writer : multi-line titles in forms
-Oracle Open Office Writer : multi-page tables
-Oracle Open Office Writer : multi-page view of documents
-Oracle Open Office Writer : multiple documents
-Oracle Open Office Writer : multiple documents;indexes
-Oracle Open Office Writer : multiple documents;opening
-Oracle Open Office Writer : multiple selection
-Oracle Open Office Writer : music
-Oracle Open Office Writer : My Documents folder
-Oracle Open Office Writer : My Documents folder;changing work directory
-Oracle Open Office Writer : My Documents folder;opening
-Oracle Open Office Writer : MySQL databases (Base)
-Oracle Open Office Writer : names
-Oracle Open Office Writer : names;chapter names in headers
-Oracle Open Office Writer : names;multi-line titles
-Oracle Open Office Writer : names;objects
-Oracle Open Office Writer : names, see also labels/callouts
-Oracle Open Office Writer : namespace organization in XForms
-Oracle Open Office Writer : native SQL (Base)
-Oracle Open Office Writer : navigating
-Oracle Open Office Writer : navigating;in documents
-Oracle Open Office Writer : navigating;in text, with keyboard
-Oracle Open Office Writer : Navigation bar
-Oracle Open Office Writer : Navigation bar;controls
-Oracle Open Office Writer : Navigation bar;forms
-Oracle Open Office Writer : Navigator
-Oracle Open Office Writer : Navigator;comments
-Oracle Open Office Writer : Navigator;contents as lists
-Oracle Open Office Writer : Navigator;docking
-Oracle Open Office Writer : Navigator;docking and resizing
-Oracle Open Office Writer : Navigator;heading levels and chapters
-Oracle Open Office Writer : Navigator;inserting hyperlinks
-Oracle Open Office Writer : Navigator;master documents
-Oracle Open Office Writer : Navigator;overview in texts
-Oracle Open Office Writer : Navigator;working with
-Oracle Open Office Writer : net charts
-Oracle Open Office Writer : network identity options
-Oracle Open Office Writer : networks and AutoText directories
-Oracle Open Office Writer : new databases
-Oracle Open Office Writer : new documents
-Oracle Open Office Writer : new lines in cells
-Oracle Open Office Writer : new page styles from selection
-Oracle Open Office Writer : new windows
-Oracle Open Office Writer : next page number in footers
-Oracle Open Office Writer : non-breaking dashes
-Oracle Open Office Writer : non-breaking spaces (Writer)
-Oracle Open Office Writer : non-printing characters (Writer)
-Oracle Open Office Writer : non-printing text
-Oracle Open Office Writer : number formats
-Oracle Open Office Writer : number formats;codes
-Oracle Open Office Writer : number formats;formats
-Oracle Open Office Writer : number formats;recognition in text tables
-Oracle Open Office Writer : number of characters
-Oracle Open Office Writer : number of pages
-Oracle Open Office Writer : number of sheets
-Oracle Open Office Writer : number of tables
-Oracle Open Office Writer : number of words
-Oracle Open Office Writer : numbering
-Oracle Open Office Writer : numbering;captions
-Oracle Open Office Writer : numbering;changing the level of
-Oracle Open Office Writer : numbering;combining
-Oracle Open Office Writer : numbering;headings
-Oracle Open Office Writer : numbering;lines
-Oracle Open Office Writer : numbering;lists, while typing
-Oracle Open Office Writer : numbering;manually/by styles
-Oracle Open Office Writer : numbering;options
-Oracle Open Office Writer : numbering;pages
-Oracle Open Office Writer : numbering;paragraphs, on and off
-Oracle Open Office Writer : numbering;quotations/similar items
-Oracle Open Office Writer : numbering;removing/interrupting
-Oracle Open Office Writer : numbering;style categories
-Oracle Open Office Writer : numbering;turning off
-Oracle Open Office Writer : numbering;using automatically
-Oracle Open Office Writer : numbers
-Oracle Open Office Writer : numbers;automatic recognition in text tables
-Oracle Open Office Writer : numbers;date, time and currency formats
-Oracle Open Office Writer : numbers;decimal places (Calc)
-Oracle Open Office Writer : numbers;line numbering
-Oracle Open Office Writer : numbers;lists
-Oracle Open Office Writer : numerical fields in forms
-Oracle Open Office Writer : objects
-Oracle Open Office Writer : objects;always moveable (Impress/Draw)
-Oracle Open Office Writer : objects;anchoring options
-Oracle Open Office Writer : objects;arranging within stacks
-Oracle Open Office Writer : objects;captioning
-Oracle Open Office Writer : objects;captioning automatically
-Oracle Open Office Writer : objects;contour wrap
-Oracle Open Office Writer : objects;copying when moving in presentations
-Oracle Open Office Writer : objects;cross-referencing
-Oracle Open Office Writer : objects;defining borders
-Oracle Open Office Writer : objects;defining hyperlinks
-Oracle Open Office Writer : objects;definition
-Oracle Open Office Writer : objects;displaying in spreadsheets
-Oracle Open Office Writer : objects;displaying in text documents
-Oracle Open Office Writer : objects;editing
-Oracle Open Office Writer : objects;finding by Navigator
-Oracle Open Office Writer : objects;inserting from Gallery
-Oracle Open Office Writer : objects;inserting OLE objects
-Oracle Open Office Writer : objects;moving and resizing with keyboard
-Oracle Open Office Writer : objects;moving and resizing with mouse
-Oracle Open Office Writer : objects;naming
-Oracle Open Office Writer : objects;opening
-Oracle Open Office Writer : objects;properties of charts
-Oracle Open Office Writer : objects;quickly moving to
-Oracle Open Office Writer : objects;quickly moving to, within text
-Oracle Open Office Writer : objects;titles and descriptions
-Oracle Open Office Writer : ODBC
-Oracle Open Office Writer : ODBC;database (Base)
-Oracle Open Office Writer : ODBC;definition
-Oracle Open Office Writer : ODF file formats
-Oracle Open Office Writer : Office
-Oracle Open Office Writer : Office;Microsoft Office and Oracle Open Office
-Oracle Open Office Writer : OLE
-Oracle Open Office Writer : OLE;definition
-Oracle Open Office Writer : OLE objects
-Oracle Open Office Writer : OLE objects;arranging within stacks
-Oracle Open Office Writer : OLE objects;borders
-Oracle Open Office Writer : OLE objects;captions (Writer)
-Oracle Open Office Writer : OLE objects;cross-referencing
-Oracle Open Office Writer : OLE objects;inserting
-Oracle Open Office Writer : OLE objects;inserting tables in
-Oracle Open Office Writer : OLE objects;number of
-Oracle Open Office Writer : OLE objects;protecting
-Oracle Open Office Writer : one and a half line spacing in text
-Oracle Open Office Writer : online feedback options
-Oracle Open Office Writer : online registration
-Oracle Open Office Writer : online update options
-Oracle Open Office Writer : online updates
-Oracle Open Office Writer : online updates;checking automatically
-Oracle Open Office Writer : online updates;checking manually
-Oracle Open Office Writer : Open/Save dialogs
-Oracle Open Office Writer : OpenDocument file formats
-Oracle Open Office Writer : OpenGL
-Oracle Open Office Writer : OpenGL;definition
-Oracle Open Office Writer : opening
-Oracle Open Office Writer : opening;context menus
-Oracle Open Office Writer : opening;database files
-Oracle Open Office Writer : opening;dialog settings
-Oracle Open Office Writer : opening;documents
-Oracle Open Office Writer : opening;documents from other formats
-Oracle Open Office Writer : opening;documents on WebDAV server
-Oracle Open Office Writer : opening;files with links
-Oracle Open Office Writer : opening;files, with placeholders
-Oracle Open Office Writer : opening;forms
-Oracle Open Office Writer : opening;Microsoft Office files
-Oracle Open Office Writer : opening;mobile device documents
-Oracle Open Office Writer : opening;objects
-Oracle Open Office Writer : opening;reports
-Oracle Open Office Writer : opening;several files
-Oracle Open Office Writer : opening;XForms
-Oracle Open Office Writer : operators
-Oracle Open Office Writer : operators;default filters
-Oracle Open Office Writer : operators;in formulas
-Oracle Open Office Writer : optional hyphens (Writer)
-Oracle Open Office Writer : options
-Oracle Open Office Writer : options;accessibility
-Oracle Open Office Writer : options;appearance
-Oracle Open Office Writer : options;compatibility (Writer)
-Oracle Open Office Writer : options;improvement program
-Oracle Open Office Writer : options;network identity
-Oracle Open Office Writer : options;online update
-Oracle Open Office Writer : options;smart tags
-Oracle Open Office Writer : options;tools
-Oracle Open Office Writer : Oracle databases (base)
-Oracle Open Office Writer : Oracle Open Office Base data sources
-Oracle Open Office Writer : Oracle Open Office Basic scripts in HTML documents
-Oracle Open Office Writer : Oracle Open Office documents
-Oracle Open Office Writer : Oracle Open Office documents;mobile device filters
-Oracle Open Office Writer : Oracle Open Office documents;viewing and editing in Internet Explorer
-Oracle Open Office Writer : Oracle Open Office Math start
-Oracle Open Office Writer : Oracle Open Office Writer
-Oracle Open Office Writer : Oracle Open Office Writer;instructions
-Oracle Open Office Writer : Oracle Open Office Writer;special HTML tags
-Oracle Open Office Writer : order of chart data
-Oracle Open Office Writer : ordering
-Oracle Open Office Writer : ordering;objects
-Oracle Open Office Writer : ordering;printing in reverse order
-Oracle Open Office Writer : organizing
-Oracle Open Office Writer : organizing;footnotes
-Oracle Open Office Writer : organizing;macros and scripts
-Oracle Open Office Writer : organizing;namespaces in XForms
-Oracle Open Office Writer : organizing;styles
-Oracle Open Office Writer : organizing;templates
-Oracle Open Office Writer : organizing;templates (guide)
-Oracle Open Office Writer : orientation of pages
-Oracle Open Office Writer : original size
-Oracle Open Office Writer : original size;printing in Oracle Open Office Math
-Oracle Open Office Writer : original size;restoring after cropping
-Oracle Open Office Writer : orphans
-Oracle Open Office Writer : outlines
-Oracle Open Office Writer : outlines;arranging chapters
-Oracle Open Office Writer : outlines;font effects
-Oracle Open Office Writer : outlines;numbering
-Oracle Open Office Writer : outlines;outline symbols
-Oracle Open Office Writer : outlines;sending to presentations
-Oracle Open Office Writer : overviews
-Oracle Open Office Writer : overviews;Navigator in text documents
-Oracle Open Office Writer : overviews;printing multi-page view
-Oracle Open Office Writer : overwrite mode
-Oracle Open Office Writer : packages, see extensions
-Oracle Open Office Writer : page breaks
-Oracle Open Office Writer : page breaks;displaying (Calc)
-Oracle Open Office Writer : page breaks;inserting and deleting
-Oracle Open Office Writer : page breaks;tables
-Oracle Open Office Writer : page counts
-Oracle Open Office Writer : page formats
-Oracle Open Office Writer : page formats;changing individual pages
-Oracle Open Office Writer : page formats;maximizing
-Oracle Open Office Writer : page formats;restriction
-Oracle Open Office Writer : page margins on rulers
-Oracle Open Office Writer : page numbers
-Oracle Open Office Writer : page numbers;continuation pages
-Oracle Open Office Writer : page numbers;footers
-Oracle Open Office Writer : page numbers;inserting/defining/formatting
-Oracle Open Office Writer : page styles
-Oracle Open Office Writer : page styles;backgrounds
-Oracle Open Office Writer : page styles;changing
-Oracle Open Office Writer : page styles;changing from selection
-Oracle Open Office Writer : page styles;creating and applying
-Oracle Open Office Writer : page styles;editing/applying with statusbar
-Oracle Open Office Writer : page styles;left and right pages
-Oracle Open Office Writer : page styles;orientation/scope
-Oracle Open Office Writer : page styles;page numbering
-Oracle Open Office Writer : page styles;style categories
-Oracle Open Office Writer : pages
-Oracle Open Office Writer : pages;backgrounds
-Oracle Open Office Writer : pages;backgrounds in all applications
-Oracle Open Office Writer : pages;continuation pages
-Oracle Open Office Writer : pages;defining borders
-Oracle Open Office Writer : pages;formatting and numbering
-Oracle Open Office Writer : pages;inserting/deleting page breaks
-Oracle Open Office Writer : pages;jumping to
-Oracle Open Office Writer : pages;left and right pages
-Oracle Open Office Writer : pages;number of
-Oracle Open Office Writer : pages;numbers and count of
-Oracle Open Office Writer : pages;orientation
-Oracle Open Office Writer : pages;previews
-Oracle Open Office Writer : pages;printing multiple on one sheet
-Oracle Open Office Writer : pages;printing page names in presentations
-Oracle Open Office Writer : pages;register-true
-Oracle Open Office Writer : pages;scaling
-Oracle Open Office Writer : pages;selecting one to print
-Oracle Open Office Writer : paint box
-Oracle Open Office Writer : paint can symbol
-Oracle Open Office Writer : pair kerning
-Oracle Open Office Writer : Palm file filters
-Oracle Open Office Writer : paper formats
-Oracle Open Office Writer : paper orientation
-Oracle Open Office Writer : paper size warning
-Oracle Open Office Writer : paper tray selection
-Oracle Open Office Writer : paper trays
-Oracle Open Office Writer : paragraph marks
-Oracle Open Office Writer : paragraph marks;displaying (Writer)
-Oracle Open Office Writer : paragraph marks;finding & replacing
-Oracle Open Office Writer : paragraph styles
-Oracle Open Office Writer : paragraph styles;languages
-Oracle Open Office Writer : paragraph styles;modifying basic fonts
-Oracle Open Office Writer : paragraph styles;numbering
-Oracle Open Office Writer : paragraph styles;style categories
-Oracle Open Office Writer : paragraphs
-Oracle Open Office Writer : paragraphs;alignment
-Oracle Open Office Writer : paragraphs;Asian typography
-Oracle Open Office Writer : paragraphs;automatic numbering
-Oracle Open Office Writer : paragraphs;backgrounds
-Oracle Open Office Writer : paragraphs;bulleted
-Oracle Open Office Writer : paragraphs;defining borders
-Oracle Open Office Writer : paragraphs;hidden paragraphs (Writer)
-Oracle Open Office Writer : paragraphs;hiding
-Oracle Open Office Writer : paragraphs;increasing indents of
-Oracle Open Office Writer : paragraphs;indents
-Oracle Open Office Writer : paragraphs;indents, margins and columns
-Oracle Open Office Writer : paragraphs;inserting before/after tables
-Oracle Open Office Writer : paragraphs;inserting bullets
-Oracle Open Office Writer : paragraphs;joining
-Oracle Open Office Writer : paragraphs;keeping together at breaks
-Oracle Open Office Writer : paragraphs;line numbers
-Oracle Open Office Writer : paragraphs;moving by keyboard
-Oracle Open Office Writer : paragraphs;numbering automatically
-Oracle Open Office Writer : paragraphs;numbering non-consecutive
-Oracle Open Office Writer : paragraphs;numbering on/off
-Oracle Open Office Writer : paragraphs;register-true
-Oracle Open Office Writer : paragraphs;removing blank ones
-Oracle Open Office Writer : paragraphs;spacing
-Oracle Open Office Writer : paragraphs;tab stops
-Oracle Open Office Writer : parameters
-Oracle Open Office Writer : parameters;command line
-Oracle Open Office Writer : parameters;queries (Base)
-Oracle Open Office Writer : passwords for protecting contents
-Oracle Open Office Writer : pasting
-Oracle Open Office Writer : pasting;cell ranges
-Oracle Open Office Writer : pasting;cell ranges from spreadsheets
-Oracle Open Office Writer : pasting;cut/copied text sections
-Oracle Open Office Writer : pasting;data from text documents
-Oracle Open Office Writer : pasting;draw objects
-Oracle Open Office Writer : pasting;draw objects from other documents
-Oracle Open Office Writer : pasting;formatted/unformatted text
-Oracle Open Office Writer : pasting;from data source view
-Oracle Open Office Writer : pasting;from data sources to Oracle Open Office Calc
-Oracle Open Office Writer : pasting;pictures from other documents
-Oracle Open Office Writer : pasting;results of formulas
-Oracle Open Office Writer : pasting;sheet areas in text documents
-Oracle Open Office Writer : pasting;to Gallery
-Oracle Open Office Writer : paths
-Oracle Open Office Writer : paths;changing work directory
-Oracle Open Office Writer : paths;defaults
-Oracle Open Office Writer : pattern editor
-Oracle Open Office Writer : pattern fields
-Oracle Open Office Writer : pattern fields;form functions
-Oracle Open Office Writer : patterns for objects
-Oracle Open Office Writer : PDF
-Oracle Open Office Writer : PDF;export
-Oracle Open Office Writer : PDF;PostScript to PDF converter, UNIX
-Oracle Open Office Writer : personal data input
-Oracle Open Office Writer : phonetic guide
-Oracle Open Office Writer : picklist creation
-Oracle Open Office Writer : pictures
-Oracle Open Office Writer : pictures;adding to Gallery
-Oracle Open Office Writer : pictures;anchoring options
-Oracle Open Office Writer : pictures;arranging within stacks
-Oracle Open Office Writer : pictures;assigning macros
-Oracle Open Office Writer : pictures;backgrounds
-Oracle Open Office Writer : pictures;borders
-Oracle Open Office Writer : pictures;captions (Writer)
-Oracle Open Office Writer : pictures;changing paths
-Oracle Open Office Writer : pictures;cropping and zooming
-Oracle Open Office Writer : pictures;cross-referencing
-Oracle Open Office Writer : pictures;defining hyperlinks
-Oracle Open Office Writer : pictures;displaying in Calc
-Oracle Open Office Writer : pictures;displaying in Writer (Writer)
-Oracle Open Office Writer : pictures;do not show
-Oracle Open Office Writer : pictures;drag and drop between documents
-Oracle Open Office Writer : pictures;drawing
-Oracle Open Office Writer : pictures;editing
-Oracle Open Office Writer : pictures;filters
-Oracle Open Office Writer : pictures;ImageMap
-Oracle Open Office Writer : pictures;inserting automatically
-Oracle Open Office Writer : pictures;inserting by dialog
-Oracle Open Office Writer : pictures;inserting from Draw
-Oracle Open Office Writer : pictures;inserting from Gallery
-Oracle Open Office Writer : pictures;inserting from Gallery into text
-Oracle Open Office Writer : pictures;inserting options
-Oracle Open Office Writer : pictures;number of
-Oracle Open Office Writer : pictures;printing
-Oracle Open Office Writer : pictures;scaling/resizing
-Oracle Open Office Writer : pictures;scanning
-Oracle Open Office Writer : pie charts
-Oracle Open Office Writer : pie charts;options
-Oracle Open Office Writer : pie charts;types
-Oracle Open Office Writer : pixel editor
-Oracle Open Office Writer : pixel graphics
-Oracle Open Office Writer : pixel graphics;inserting and editing
-Oracle Open Office Writer : pixel patterns
-Oracle Open Office Writer : placeholders
-Oracle Open Office Writer : placeholders;in SQL queries
-Oracle Open Office Writer : placeholders;on opening files
-Oracle Open Office Writer : placing toolbars
-Oracle Open Office Writer : playing movies and sound files
-Oracle Open Office Writer : plotting data as charts
-Oracle Open Office Writer : plug-ins
-Oracle Open Office Writer : plug-ins;activating and deactivating
-Oracle Open Office Writer : plug-ins;definition
-Oracle Open Office Writer : plug-ins;inserting
-Oracle Open Office Writer : pocket device appliances
-Oracle Open Office Writer : Pocket PC file filters
-Oracle Open Office Writer : points
-Oracle Open Office Writer : points;reducing editing points when snapping (Impress/Draw)
-Oracle Open Office Writer : polygon drawing
-Oracle Open Office Writer : pop-art filter
-Oracle Open Office Writer : portable document format
-Oracle Open Office Writer : portrait and landscape
-Oracle Open Office Writer : positioning
-Oracle Open Office Writer : positioning;axes
-Oracle Open Office Writer : positioning;draw objects and controls
-Oracle Open Office Writer : positioning;fonts
-Oracle Open Office Writer : positioning;objects
-Oracle Open Office Writer : positioning;objects (guide)
-Oracle Open Office Writer : positioning;toolbars
-Oracle Open Office Writer : post method for form transmissions
-Oracle Open Office Writer : posterizing filter
-Oracle Open Office Writer : PostScript
-Oracle Open Office Writer : PostScript;creating files
-Oracle Open Office Writer : PostScript;PDF converter, UNIX
-Oracle Open Office Writer : PowerPoint export
-Oracle Open Office Writer : precision as shown (Calc)
-Oracle Open Office Writer : predefining fonts
-Oracle Open Office Writer : predictive text, see also AutoCorrect function/AutoFill function/AutoInput function/word completion/text completion
-Oracle Open Office Writer : presentations
-Oracle Open Office Writer : presentations;creating/opening
-Oracle Open Office Writer : presentations;inserting spreadsheet cells
-Oracle Open Office Writer : presentations;live on the Internet
-Oracle Open Office Writer : presentations;print menu
-Oracle Open Office Writer : presentations;saving
-Oracle Open Office Writer : presentations;saving automatically
-Oracle Open Office Writer : presentations;saving in other formats
-Oracle Open Office Writer : presentations;sending as e-mail
-Oracle Open Office Writer : presentations;starting with wizard
-Oracle Open Office Writer : presentations;wizards
-Oracle Open Office Writer : Presenter Console shortcuts
-Oracle Open Office Writer : press buttons, see push buttons
-Oracle Open Office Writer : previews
-Oracle Open Office Writer : previews;book preview
-Oracle Open Office Writer : previews;fonts lists
-Oracle Open Office Writer : previews;print layouts
-Oracle Open Office Writer : primary keys
-Oracle Open Office Writer : primary keys;defining
-Oracle Open Office Writer : primary keys;design view
-Oracle Open Office Writer : primary keys;inserting (Base)
-Oracle Open Office Writer : print area selection
-Oracle Open Office Writer : print layout checks
-Oracle Open Office Writer : printer metrics for document formatting (Writer)
-Oracle Open Office Writer : printers
-Oracle Open Office Writer : printers;adding, UNIX
-Oracle Open Office Writer : printers;choosing
-Oracle Open Office Writer : printers;default printer
-Oracle Open Office Writer : printers;faxes under UNIX
-Oracle Open Office Writer : printers;maximum page formats
-Oracle Open Office Writer : printers;paper trays
-Oracle Open Office Writer : printers;properties
-Oracle Open Office Writer : printing
-Oracle Open Office Writer : printing;AutoText shortcuts
-Oracle Open Office Writer : printing;black and white
-Oracle Open Office Writer : printing;brochures
-Oracle Open Office Writer : printing;colors in grayscale
-Oracle Open Office Writer : printing;comments
-Oracle Open Office Writer : printing;copies
-Oracle Open Office Writer : printing;creating individual jobs
-Oracle Open Office Writer : printing;dates in presentations
-Oracle Open Office Writer : printing;directly
-Oracle Open Office Writer : printing;documents
-Oracle Open Office Writer : printing;drawings defaults
-Oracle Open Office Writer : printing;elements in text documents
-Oracle Open Office Writer : printing;faster
-Oracle Open Office Writer : printing;fitting to pages in Oracle Open Office Math
-Oracle Open Office Writer : printing;fitting to pages in presentations
-Oracle Open Office Writer : printing;formulas in Oracle Open Office Math
-Oracle Open Office Writer : printing;hidden pages of presentations
-Oracle Open Office Writer : printing;hiding text frames from printing
-Oracle Open Office Writer : printing;in original size in Oracle Open Office Math
-Oracle Open Office Writer : printing;individual brochures
-Oracle Open Office Writer : printing;left/right pages
-Oracle Open Office Writer : printing;multiple pages per sheet
-Oracle Open Office Writer : printing;portrait/landscape format
-Oracle Open Office Writer : printing;previews
-Oracle Open Office Writer : printing;queries (Base)
-Oracle Open Office Writer : printing;reverse order
-Oracle Open Office Writer : printing;scaling in Oracle Open Office Math
-Oracle Open Office Writer : printing;selections
-Oracle Open Office Writer : printing;text always in black
-Oracle Open Office Writer : printing;text in reverse order
-Oracle Open Office Writer : printing;tiling pages in presentations
-Oracle Open Office Writer : printing;transparencies
-Oracle Open Office Writer : printing;warnings
-Oracle Open Office Writer : printing;without scaling in presentations
-Oracle Open Office Writer : printing speed
-Oracle Open Office Writer : programming
-Oracle Open Office Writer : programming;Oracle Open Office
-Oracle Open Office Writer : programming;scripting
-Oracle Open Office Writer : promoting heading levels
-Oracle Open Office Writer : properties
-Oracle Open Office Writer : properties;charts
-Oracle Open Office Writer : properties;fields
-Oracle Open Office Writer : properties;fields in databases
-Oracle Open Office Writer : properties;files
-Oracle Open Office Writer : properties;form controls
-Oracle Open Office Writer : properties;forms
-Oracle Open Office Writer : properties;printers
-Oracle Open Office Writer : properties;smooth lines in line charts/XY charts
-Oracle Open Office Writer : proportional distribution of tables
-Oracle Open Office Writer : protected contents
-Oracle Open Office Writer : protected dashes
-Oracle Open Office Writer : protected database tables
-Oracle Open Office Writer : protected documents
-Oracle Open Office Writer : protected spaces
-Oracle Open Office Writer : protected spaces;inserting
-Oracle Open Office Writer : protected spaces;showing (Writer)
-Oracle Open Office Writer : protecting
-Oracle Open Office Writer : protecting;contents
-Oracle Open Office Writer : protecting;recorded changes
-Oracle Open Office Writer : protecting;sections
-Oracle Open Office Writer : protecting;tables and sections
-Oracle Open Office Writer : protecting;text flow
-Oracle Open Office Writer : proxy settings
-Oracle Open Office Writer : push buttons
-Oracle Open Office Writer : push buttons;adding to documents
-Oracle Open Office Writer : push buttons;creating
-Oracle Open Office Writer : queries
-Oracle Open Office Writer : queries;copying (Base)
-Oracle Open Office Writer : queries;creating in design view (Base)
-Oracle Open Office Writer : queries;creating in SQL view
-Oracle Open Office Writer : queries;defining (Base)
-Oracle Open Office Writer : queries;deleting table links (Base)
-Oracle Open Office Writer : queries;editing in data source view
-Oracle Open Office Writer : queries;formulating filter conditions (Base)
-Oracle Open Office Writer : queries;joining tables (Base)
-Oracle Open Office Writer : queries;missing elements (Base)
-Oracle Open Office Writer : queries;overview (Base)
-Oracle Open Office Writer : queries;parameter queries (Base)
-Oracle Open Office Writer : queries;printing (Base)
-Oracle Open Office Writer : Query Wizard (Base)
-Oracle Open Office Writer : Quickstarter
-Oracle Open Office Writer : quotation marks
-Oracle Open Office Writer : quotation marks;changing automatically
-Oracle Open Office Writer : quotation marks;replacing
-Oracle Open Office Writer : quotes
-Oracle Open Office Writer : quotes;custom
-Oracle Open Office Writer : radar charts, see net charts
-Oracle Open Office Writer : radio button creation
-Oracle Open Office Writer : read-only documents
-Oracle Open Office Writer : read-only documents;cursor
-Oracle Open Office Writer : read-only documents;database tables on/off
-Oracle Open Office Writer : read-only documents;editing
-Oracle Open Office Writer : read-only documents;opening documents as
-Oracle Open Office Writer : read-only items in Data Navigator
-Oracle Open Office Writer : read-only sections
-Oracle Open Office Writer : rearranging headings
-Oracle Open Office Writer : recognition
-Oracle Open Office Writer : recognition;languages
-Oracle Open Office Writer : recognition;numbers
-Oracle Open Office Writer : recognizing URLs automatically
-Oracle Open Office Writer : recording
-Oracle Open Office Writer : recording;changes
-Oracle Open Office Writer : recording;macros
-Oracle Open Office Writer : records
-Oracle Open Office Writer : records;inserting comments
-Oracle Open Office Writer : records;protecting
-Oracle Open Office Writer : records;saving
-Oracle Open Office Writer : records;searching in databases
-Oracle Open Office Writer : rectangles with round corners
-Oracle Open Office Writer : recursions in spreadsheets
-Oracle Open Office Writer : redo command
-Oracle Open Office Writer : reduced printing
-Oracle Open Office Writer : reduced printing of multiple pages
-Oracle Open Office Writer : reducing rows and columns in text tables
-Oracle Open Office Writer : reference lines
-Oracle Open Office Writer : references
-Oracle Open Office Writer : references;displaying in color (Calc)
-Oracle Open Office Writer : references;expanding (Calc)
-Oracle Open Office Writer : references;in Writer tables
-Oracle Open Office Writer : references;inserting cross-references
-Oracle Open Office Writer : references;iterative (Calc)
-Oracle Open Office Writer : references;modifying cross-references
-Oracle Open Office Writer : refusing word completions
-Oracle Open Office Writer : register-true
-Oracle Open Office Writer : register-true;definition
-Oracle Open Office Writer : register-true;pages and paragraphs
-Oracle Open Office Writer : registering
-Oracle Open Office Writer : registering;address books
-Oracle Open Office Writer : registering;databases (Base)
-Oracle Open Office Writer : registering;Oracle Open Office
-Oracle Open Office Writer : regression curves in charts
-Oracle Open Office Writer : regular expressions
-Oracle Open Office Writer : regular expressions;list of
-Oracle Open Office Writer : regular expressions;opening files
-Oracle Open Office Writer : regular expressions;searching
-Oracle Open Office Writer : rejecting word completions
-Oracle Open Office Writer : related words in thesaurus
-Oracle Open Office Writer : relational databases (Base)
-Oracle Open Office Writer : relations
-Oracle Open Office Writer : relations;creating and deleting (Base)
-Oracle Open Office Writer : relations;joining tables (Base)
-Oracle Open Office Writer : relations;properties (Base)
-Oracle Open Office Writer : relative distribution of table cells
-Oracle Open Office Writer : relative hyperlinks
-Oracle Open Office Writer : relative saving of URLs
-Oracle Open Office Writer : reloading
-Oracle Open Office Writer : reloading;documents
-Oracle Open Office Writer : reloading;HTML documents, automatically
-Oracle Open Office Writer : remarks, see also comments
-Oracle Open Office Writer : remote configurations
-Oracle Open Office Writer : remove noise filter
-Oracle Open Office Writer : removing
-Oracle Open Office Writer : removing;bullets and numbering
-Oracle Open Office Writer : removing;bullets in text documents
-Oracle Open Office Writer : removing;cell protection in text documents
-Oracle Open Office Writer : removing;form filters
-Oracle Open Office Writer : removing;subdocuments
-Oracle Open Office Writer : removing, see also deleting
-Oracle Open Office Writer : reorganizing charts
-Oracle Open Office Writer : repeating
-Oracle Open Office Writer : repeating;commands
-Oracle Open Office Writer : repeating;table headings after page breaks
-Oracle Open Office Writer : replacement options
-Oracle Open Office Writer : replacement table
-Oracle Open Office Writer : replacing
-Oracle Open Office Writer : replacing;AutoCorrect function
-Oracle Open Office Writer : replacing;dashes
-Oracle Open Office Writer : replacing;databases
-Oracle Open Office Writer : replacing;fields, by text
-Oracle Open Office Writer : replacing;objects from Gallery
-Oracle Open Office Writer : replacing;tab stops (regular expressions)
-Oracle Open Office Writer : replacing;text and text formats
-Oracle Open Office Writer : Report Builder
-Oracle Open Office Writer : reports
-Oracle Open Office Writer : reports;creating
-Oracle Open Office Writer : reports;error reports
-Oracle Open Office Writer : reports;opening and editing
-Oracle Open Office Writer : reports;templates
-Oracle Open Office Writer : resetting
-Oracle Open Office Writer : resetting;fonts
-Oracle Open Office Writer : resetting;templates
-Oracle Open Office Writer : resizing
-Oracle Open Office Writer : resizing;aspect ratio
-Oracle Open Office Writer : resizing;objects and frames, by keyboard
-Oracle Open Office Writer : resizing;objects, by mouse
-Oracle Open Office Writer : resizing;rows and columns in text tables
-Oracle Open Office Writer : resizing;text frames, by mouse
-Oracle Open Office Writer : resizing;windows
-Oracle Open Office Writer : resizing, see also scaling/zooming
-Oracle Open Office Writer : resolution when printing bitmaps
-Oracle Open Office Writer : restoring
-Oracle Open Office Writer : restoring;default formatting
-Oracle Open Office Writer : restoring;editing
-Oracle Open Office Writer : reversing printing order
-Oracle Open Office Writer : review function
-Oracle Open Office Writer : review function;accepting or rejecting changes
-Oracle Open Office Writer : review function;comparing documents
-Oracle Open Office Writer : review function;protecting records
-Oracle Open Office Writer : review function;recording changes example
-Oracle Open Office Writer : rich text control
-Oracle Open Office Writer : right alignment of paragraphs
-Oracle Open Office Writer : right indents in paragraphs
-Oracle Open Office Writer : right joins (Base)
-Oracle Open Office Writer : right pages
-Oracle Open Office Writer : right-to-left text
-Oracle Open Office Writer : rising outline levels
-Oracle Open Office Writer : rotating
-Oracle Open Office Writer : rotating;3D text
-Oracle Open Office Writer : rotating;text
-Oracle Open Office Writer : round corners
-Oracle Open Office Writer : rounding precision (Calc)
-Oracle Open Office Writer : row breaks in text tables
-Oracle Open Office Writer : row headers
-Oracle Open Office Writer : row headers;displaying (Calc)
-Oracle Open Office Writer : row headers;highlighting (Calc)
-Oracle Open Office Writer : rows
-Oracle Open Office Writer : rows;inserting in tables, using icon
-Oracle Open Office Writer : rows;inserting/deleting in tables by keyboard
-Oracle Open Office Writer : rows;register-true text
-Oracle Open Office Writer : rows;selecting
-Oracle Open Office Writer : rulers
-Oracle Open Office Writer : rulers;default settings
-Oracle Open Office Writer : rulers;measurement units
-Oracle Open Office Writer : rulers;using rulers
-Oracle Open Office Writer : rulers;visible in presentations
-Oracle Open Office Writer : rules
-Oracle Open Office Writer : running titles in headers
-Oracle Open Office Writer : samples and templates
-Oracle Open Office Writer : saving
-Oracle Open Office Writer : saving;default file formats
-Oracle Open Office Writer : saving;dialog settings
-Oracle Open Office Writer : saving;documents
-Oracle Open Office Writer : saving;documents for mobile devices
-Oracle Open Office Writer : saving;documents in other formats
-Oracle Open Office Writer : saving;documents, automatically
-Oracle Open Office Writer : saving;in HTML format
-Oracle Open Office Writer : saving;in Microsoft Office file format
-Oracle Open Office Writer : saving;options
-Oracle Open Office Writer : saving;templates
-Oracle Open Office Writer : saving;to XML
-Oracle Open Office Writer : saving;VBA code in Microsoft Office documents
-Oracle Open Office Writer : saving;with password by default
-Oracle Open Office Writer : saving as command
-Oracle Open Office Writer : saving as command;precautions
-Oracle Open Office Writer : scaling
-Oracle Open Office Writer : scaling;axes
-Oracle Open Office Writer : scaling;font sizes in user interface
-Oracle Open Office Writer : scaling;objects
-Oracle Open Office Writer : scaling;pictures
-Oracle Open Office Writer : scaling;printing in Oracle Open Office Math
-Oracle Open Office Writer : scaling;text frames, by mouse
-Oracle Open Office Writer : scaling;text in charts
-Oracle Open Office Writer : scaling;when printing presentations
-Oracle Open Office Writer : scaling, see also zooming
-Oracle Open Office Writer : scanning pictures
-Oracle Open Office Writer : scatter charts
-Oracle Open Office Writer : scope of page styles
-Oracle Open Office Writer : screen
-Oracle Open Office Writer : screen;full screen views
-Oracle Open Office Writer : screen;scaling
-Oracle Open Office Writer : screen magnifiers
-Oracle Open Office Writer : screen readers
-Oracle Open Office Writer : script organization
-Oracle Open Office Writer : scrollbars
-Oracle Open Office Writer : scrollbars;controls
-Oracle Open Office Writer : scrollbars;displaying (Calc)
-Oracle Open Office Writer : scrollbars;horizontal and vertical (Writer)
-Oracle Open Office Writer : search criteria for database functions in cells
-Oracle Open Office Writer : search engines
-Oracle Open Office Writer : search engines;definition
-Oracle Open Office Writer : search engines;selecting
-Oracle Open Office Writer : searching
-Oracle Open Office Writer : searching;all sheets
-Oracle Open Office Writer : searching;cross-references
-Oracle Open Office Writer : searching;databases
-Oracle Open Office Writer : searching;form filters
-Oracle Open Office Writer : searching;formats
-Oracle Open Office Writer : searching;Internet
-Oracle Open Office Writer : searching;repeating a search
-Oracle Open Office Writer : searching;synonyms
-Oracle Open Office Writer : searching;tables and forms
-Oracle Open Office Writer : searching;with wildcards
-Oracle Open Office Writer : searching, see also finding
-Oracle Open Office Writer : secondary axes in charts
-Oracle Open Office Writer : sections
-Oracle Open Office Writer : sections;backgrounds
-Oracle Open Office Writer : sections;columns in/use of
-Oracle Open Office Writer : sections;defining conditions
-Oracle Open Office Writer : sections;editing
-Oracle Open Office Writer : sections;hiding
-Oracle Open Office Writer : sections;inserting
-Oracle Open Office Writer : sections;inserting external content
-Oracle Open Office Writer : sections;inserting sections by DDE
-Oracle Open Office Writer : sections;moving and copying
-Oracle Open Office Writer : sections;protecting/unprotecting
-Oracle Open Office Writer : security
-Oracle Open Office Writer : security;digital signatures
-Oracle Open Office Writer : security;options for documents with macros
-Oracle Open Office Writer : security;protecting contents
-Oracle Open Office Writer : security;security levels for macros
-Oracle Open Office Writer : security;warning dialogs with macros
-Oracle Open Office Writer : selecting
-Oracle Open Office Writer : selecting;controls
-Oracle Open Office Writer : selecting;measurement units
-Oracle Open Office Writer : selecting;objects
-Oracle Open Office Writer : selecting;paper trays
-Oracle Open Office Writer : selecting;print areas
-Oracle Open Office Writer : selecting;several files
-Oracle Open Office Writer : selecting;tables
-Oracle Open Office Writer : selecting;text, with keyboard
-Oracle Open Office Writer : selection clipboard
-Oracle Open Office Writer : selection frames
-Oracle Open Office Writer : selection modes in text
-Oracle Open Office Writer : sending
-Oracle Open Office Writer : sending;AutoAbstract function in presentations
-Oracle Open Office Writer : sending;documents as e-mail
-Oracle Open Office Writer : sending;documents as faxes
-Oracle Open Office Writer : separation, see hyphenation
-Oracle Open Office Writer : separator lines
-Oracle Open Office Writer : separator lines;AutoFormat function
-Oracle Open Office Writer : separator lines;defining
-Oracle Open Office Writer : separators
-Oracle Open Office Writer : separators;conditional
-Oracle Open Office Writer : serial letters
-Oracle Open Office Writer : Server Side ImageMap
-Oracle Open Office Writer : settings
-Oracle Open Office Writer : settings;direct cursor
-Oracle Open Office Writer : settings;printers
-Oracle Open Office Writer : settings;program configuration
-Oracle Open Office Writer : settings;proxies
-Oracle Open Office Writer : settings;tracking changes
-Oracle Open Office Writer : settings;views
-Oracle Open Office Writer : settings;word completion
-Oracle Open Office Writer : SGML
-Oracle Open Office Writer : SGML;definition
-Oracle Open Office Writer : shadows
-Oracle Open Office Writer : shadows;areas
-Oracle Open Office Writer : shadows;borders
-Oracle Open Office Writer : shadows;characters
-Oracle Open Office Writer : shadows;characters, using context menu
-Oracle Open Office Writer : shadows;headers/footers
-Oracle Open Office Writer : sharing documents
-Oracle Open Office Writer : sharpening filter
-Oracle Open Office Writer : sheet tabs
-Oracle Open Office Writer : sheet tabs;displaying
-Oracle Open Office Writer : sheets
-Oracle Open Office Writer : sheets;searching all
-Oracle Open Office Writer : shortcut keys
-Oracle Open Office Writer : shortcut keys;assigning macros
-Oracle Open Office Writer : shortcut keys;bold formatting
-Oracle Open Office Writer : shortcut keys;charts
-Oracle Open Office Writer : shortcut keys;general
-Oracle Open Office Writer : shortcut keys;in databases
-Oracle Open Office Writer : shortcut keys;in text documents
-Oracle Open Office Writer : shortcut keys;Oracle Open Office accessibility
-Oracle Open Office Writer : showing
-Oracle Open Office Writer : showing;changes
-Oracle Open Office Writer : showing;docked windows
-Oracle Open Office Writer : showing;drawings and controls (Writer)
-Oracle Open Office Writer : showing;live presentations on the Internet
-Oracle Open Office Writer : showing;rulers
-Oracle Open Office Writer : showing;toolbars
-Oracle Open Office Writer : sideways orientation of pages
-Oracle Open Office Writer : signing documents with digital signatures
-Oracle Open Office Writer : similarity search
-Oracle Open Office Writer : simple handles (Writer)
-Oracle Open Office Writer : simplified Chinese
-Oracle Open Office Writer : simplified Chinese;translating to traditional Chinese
-Oracle Open Office Writer : single sign on options
-Oracle Open Office Writer : single-line spacing in text
-Oracle Open Office Writer : sizes
-Oracle Open Office Writer : sizes;draw objects
-Oracle Open Office Writer : sizes;pictures
-Oracle Open Office Writer : slanting draw objects
-Oracle Open Office Writer : small capitals
-Oracle Open Office Writer : small capitals (guide)
-Oracle Open Office Writer : small icons
-Oracle Open Office Writer : smart tag configuration
-Oracle Open Office Writer : smart tags
-Oracle Open Office Writer : smooth scrolling (Writer)
-Oracle Open Office Writer : smoothing filter
-Oracle Open Office Writer : snap grid defaults (Writer/Calc)
-Oracle Open Office Writer : snapping in presentations and drawings
-Oracle Open Office Writer : solarization filter
-Oracle Open Office Writer : sort lists
-Oracle Open Office Writer : sort lists;copying to in Calc
-Oracle Open Office Writer : sorting
-Oracle Open Office Writer : sorting;data in forms
-Oracle Open Office Writer : sorting;databases
-Oracle Open Office Writer : sorting;paragraphs in special languages
-Oracle Open Office Writer : sorting;paragraphs/table rows
-Oracle Open Office Writer : sound files
-Oracle Open Office Writer : spaces
-Oracle Open Office Writer : spaces;displaying (Writer)
-Oracle Open Office Writer : spaces;ignoring double
-Oracle Open Office Writer : spaces;inserting protected spaces
-Oracle Open Office Writer : spaces;showing protected spaces (Writer)
-Oracle Open Office Writer : spacing
-Oracle Open Office Writer : spacing;between paragraphs in footnotes
-Oracle Open Office Writer : spacing;endnotes/footnotes
-Oracle Open Office Writer : spacing;font effects
-Oracle Open Office Writer : spacing;lines and paragraphs
-Oracle Open Office Writer : spacing;register-true text
-Oracle Open Office Writer : spacing;tab stops in text documents
-Oracle Open Office Writer : spacing;tabs in presentations
-Oracle Open Office Writer : spadmin
-Oracle Open Office Writer : special characters
-Oracle Open Office Writer : speech bubbles
-Oracle Open Office Writer : speed of printing
-Oracle Open Office Writer : spellcheck
-Oracle Open Office Writer : spellcheck;activating for a language
-Oracle Open Office Writer : spellcheck;activating for all languages
-Oracle Open Office Writer : spellcheck;AutoSpellcheck on/off
-Oracle Open Office Writer : spellcheck;checking text documents manually
-Oracle Open Office Writer : spellcheck;context menus
-Oracle Open Office Writer : spellcheck;default languages
-Oracle Open Office Writer : spellcheck;dialog
-Oracle Open Office Writer : spellcheck;dictionary of exceptions
-Oracle Open Office Writer : spellcheck;ignore list
-Oracle Open Office Writer : spelling in thesaurus
-Oracle Open Office Writer : spin button creation
-Oracle Open Office Writer : splitting cells
-Oracle Open Office Writer : splitting cells;by keyboard
-Oracle Open Office Writer : splitting cells;by menu command
-Oracle Open Office Writer : splitting tables
-Oracle Open Office Writer : splitting tables;at cursor position
-Oracle Open Office Writer : splitting tables;row breaks
-Oracle Open Office Writer : spoolfiles with Xprinter
-Oracle Open Office Writer : spreadsheets
-Oracle Open Office Writer : spreadsheets;as databases (base)
-Oracle Open Office Writer : spreadsheets;copying areas to text documents
-Oracle Open Office Writer : spreadsheets;creating/opening
-Oracle Open Office Writer : spreadsheets;inserting charts
-Oracle Open Office Writer : spreadsheets;inserting database records
-Oracle Open Office Writer : spreadsheets;inserting tables from
-Oracle Open Office Writer : spreadsheets;printing
-Oracle Open Office Writer : spreadsheets;saving
-Oracle Open Office Writer : spreadsheets;saving automatically
-Oracle Open Office Writer : spreadsheets;saving in other formats
-Oracle Open Office Writer : spreadsheets;sending as e-mail
-Oracle Open Office Writer : SQL
-Oracle Open Office Writer : SQL;definition
-Oracle Open Office Writer : SQL;DISTINCT parameter
-Oracle Open Office Writer : SQL;executing SQL commands
-Oracle Open Office Writer : SQL;executing SQL statements (Base)
-Oracle Open Office Writer : SQL;queries (Base)
-Oracle Open Office Writer : square drawings
-Oracle Open Office Writer : standard bar on/off
-Oracle Open Office Writer : standard deviation in charts
-Oracle Open Office Writer : standard filters in databases
-Oracle Open Office Writer : standard printer under UNIX
-Oracle Open Office Writer : start center
-Oracle Open Office Writer : start parameters
-Oracle Open Office Writer : starting page numbers
-Oracle Open Office Writer : statistical functions
-Oracle Open Office Writer : statistics in charts
-Oracle Open Office Writer : status bar on/off
-Oracle Open Office Writer : stickers
-Oracle Open Office Writer : stock charts
-Oracle Open Office Writer : storing bibliographic information
-Oracle Open Office Writer : strikethrough
-Oracle Open Office Writer : strikethrough;characters
-Oracle Open Office Writer : strikethrough;font effects
-Oracle Open Office Writer : styles
-Oracle Open Office Writer : styles;'changed' message
-Oracle Open Office Writer : styles;categories
-Oracle Open Office Writer : styles;conditional
-Oracle Open Office Writer : styles;copying between documents
-Oracle Open Office Writer : styles;creating from selections
-Oracle Open Office Writer : styles;finding
-Oracle Open Office Writer : styles;for pages
-Oracle Open Office Writer : styles;importing from other files
-Oracle Open Office Writer : styles;keyboard shortcuts
-Oracle Open Office Writer : styles;master documents
-Oracle Open Office Writer : styles;organizing
-Oracle Open Office Writer : styles;page numbers
-Oracle Open Office Writer : styles;printing styles used in a document
-Oracle Open Office Writer : styles;replacing automatically
-Oracle Open Office Writer : styles;styles and templates
-Oracle Open Office Writer : styles;table styles
-Oracle Open Office Writer : styles;transferring
-Oracle Open Office Writer : styles;updating from selections
-Oracle Open Office Writer : Styles and Formatting window
-Oracle Open Office Writer : Styles and Formatting window;applying styles
-Oracle Open Office Writer : Styles and Formatting window;docking
-Oracle Open Office Writer : Styles and Formatting window;docking and resizing
-Oracle Open Office Writer : Styles and Formatting window;updating from selections
-Oracle Open Office Writer : Stylist, see Styles and Formatting window
-Oracle Open Office Writer : subdocuments
-Oracle Open Office Writer : subdocuments;creating/editing/removing
-Oracle Open Office Writer : subdocuments;properties
-Oracle Open Office Writer : subforms
-Oracle Open Office Writer : subforms;creating
-Oracle Open Office Writer : subforms;description
-Oracle Open Office Writer : subject fields
-Oracle Open Office Writer : submitting forms
-Oracle Open Office Writer : subscript text
-Oracle Open Office Writer : subsidiary documents
-Oracle Open Office Writer : suffixes in file formats
-Oracle Open Office Writer : sums of table cell series
-Oracle Open Office Writer : superscript text
-Oracle Open Office Writer : support on the Web
-Oracle Open Office Writer : switching off
-Oracle Open Office Writer : switching off;hyphenation for specific words
-Oracle Open Office Writer : switching off;word completion
-Oracle Open Office Writer : synchronizing
-Oracle Open Office Writer : synchronizing;labels and business cards
-Oracle Open Office Writer : synchronizing;Pocket PC and Oracle Open Office formats
-Oracle Open Office Writer : synonyms in thesaurus
-Oracle Open Office Writer : system address book registration
-Oracle Open Office Writer : tab stops
-Oracle Open Office Writer : tab stops;before headings
-Oracle Open Office Writer : tab stops;displaying (Writer)
-Oracle Open Office Writer : tab stops;inserting and editing
-Oracle Open Office Writer : tab stops;inserting in lists
-Oracle Open Office Writer : tab stops;regular expressions
-Oracle Open Office Writer : tab stops;setting in sheets
-Oracle Open Office Writer : tab stops;settings
-Oracle Open Office Writer : tab stops;spacing in presentations
-Oracle Open Office Writer : tab stops;spacing in text documents
-Oracle Open Office Writer : table cells
-Oracle Open Office Writer : table cells;adjusting the width on rulers
-Oracle Open Office Writer : table cells;calculating sums
-Oracle Open Office Writer : table cells;enlarging/reducing in text
-Oracle Open Office Writer : table controls
-Oracle Open Office Writer : table controls;form functions
-Oracle Open Office Writer : table controls;keyboard-only edit mode
-Oracle Open Office Writer : table controls;properties
-Oracle Open Office Writer : table mode selection
-Oracle Open Office Writer : table views of databases
-Oracle Open Office Writer : Table Wizard (Base)
-Oracle Open Office Writer : tables
-Oracle Open Office Writer : tables;adapting the width by keyboard
-Oracle Open Office Writer : tables;allowing page breaks
-Oracle Open Office Writer : tables;AutoFormat function
-Oracle Open Office Writer : tables;backgrounds
-Oracle Open Office Writer : tables;calculating across
-Oracle Open Office Writer : tables;calculating sums
-Oracle Open Office Writer : tables;converting to text
-Oracle Open Office Writer : tables;cross-referencing
-Oracle Open Office Writer : tables;defining borders
-Oracle Open Office Writer : tables;deleting
-Oracle Open Office Writer : tables;deleting page breaks before
-Oracle Open Office Writer : tables;editing by keyboard
-Oracle Open Office Writer : tables;editing with the keyboard
-Oracle Open Office Writer : tables;heading repetition after page breaks
-Oracle Open Office Writer : tables;inserting columns in
-Oracle Open Office Writer : tables;inserting line breaks
-Oracle Open Office Writer : tables;inserting rows
-Oracle Open Office Writer : tables;inserting text before
-Oracle Open Office Writer : tables;inserting text tables
-Oracle Open Office Writer : tables;jumping to
-Oracle Open Office Writer : tables;labeling
-Oracle Open Office Writer : tables;merging
-Oracle Open Office Writer : tables;merging cells
-Oracle Open Office Writer : tables;number recognition
-Oracle Open Office Writer : tables;performing calculations in
-Oracle Open Office Writer : tables;positioning
-Oracle Open Office Writer : tables;protecting/unprotecting cells
-Oracle Open Office Writer : tables;resizing/juxtaposing
-Oracle Open Office Writer : tables;selecting
-Oracle Open Office Writer : tables;sorting rows
-Oracle Open Office Writer : tables;splitting
-Oracle Open Office Writer : tables;start/end of document
-Oracle Open Office Writer : tables;text flow around text tables
-Oracle Open Office Writer : tables in databases
-Oracle Open Office Writer : tables in databases;access rights to (Base)
-Oracle Open Office Writer : tables in databases;adding to queries
-Oracle Open Office Writer : tables in databases;browsing and editing
-Oracle Open Office Writer : tables in databases;copying database tables (Base)
-Oracle Open Office Writer : tables in databases;creating
-Oracle Open Office Writer : tables in databases;creating in design view (manually)
-Oracle Open Office Writer : tables in databases;importing text formats (Base)
-Oracle Open Office Writer : tables in databases;joining for queries (Base)
-Oracle Open Office Writer : tables in databases;printing queries (Base)
-Oracle Open Office Writer : tables in databases;relations (Base)
-Oracle Open Office Writer : tables in databases;searching
-Oracle Open Office Writer : tables in spreadsheets
-Oracle Open Office Writer : tables in spreadsheets;copying data to other applications
-Oracle Open Office Writer : tables in spreadsheets;defining borders
-Oracle Open Office Writer : tables in spreadsheets;inserting in text
-Oracle Open Office Writer : tables in spreadsheets;value highlighting
-Oracle Open Office Writer : tables in text
-Oracle Open Office Writer : tables in text;captions
-Oracle Open Office Writer : tables in text;creating automatically
-Oracle Open Office Writer : tables in text;default settings
-Oracle Open Office Writer : tables in text;defining borders
-Oracle Open Office Writer : tables in text;displaying
-Oracle Open Office Writer : tables in text;printing
-Oracle Open Office Writer : tables of contents
-Oracle Open Office Writer : tables of contents;creating and updating
-Oracle Open Office Writer : tables of contents;defining entries in
-Oracle Open Office Writer : tables of contents;editing and deleting
-Oracle Open Office Writer : tables of contents;editing or deleting entries
-Oracle Open Office Writer : tables of contents;formatting
-Oracle Open Office Writer : tables of contents;hyperlinks as entries
-Oracle Open Office Writer : tables of contents;unprotecting
-Oracle Open Office Writer : tabs
-Oracle Open Office Writer : tabs;displaying sheet tabs
-Oracle Open Office Writer : tags
-Oracle Open Office Writer : tags;definition
-Oracle Open Office Writer : tags;in Oracle Open Office Writer
-Oracle Open Office Writer : tags;META tags
-Oracle Open Office Writer : templates
-Oracle Open Office Writer : templates;agendas
-Oracle Open Office Writer : templates;changing basic fonts
-Oracle Open Office Writer : templates;creating document templates
-Oracle Open Office Writer : templates;database reports
-Oracle Open Office Writer : templates;default templates
-Oracle Open Office Writer : templates;deleting
-Oracle Open Office Writer : templates;editing and saving
-Oracle Open Office Writer : templates;faxes
-Oracle Open Office Writer : templates;importing and exporting
-Oracle Open Office Writer : templates;letters
-Oracle Open Office Writer : templates;new documents from templates
-Oracle Open Office Writer : templates;opening documents with
-Oracle Open Office Writer : templates;organizing
-Oracle Open Office Writer : templates;organizing (guide)
-Oracle Open Office Writer : templates;updating from selections
-Oracle Open Office Writer : terminology
-Oracle Open Office Writer : terminology;general glossary
-Oracle Open Office Writer : terminology;Internet glossary
-Oracle Open Office Writer : testing XML filters
-Oracle Open Office Writer : text
-Oracle Open Office Writer : text;animating
-Oracle Open Office Writer : text;Asian layout
-Oracle Open Office Writer : text;backgrounds
-Oracle Open Office Writer : text;bold
-Oracle Open Office Writer : text;coloring
-Oracle Open Office Writer : text;conditional text
-Oracle Open Office Writer : text;converting to tables
-Oracle Open Office Writer : text;copying by drag and drop
-Oracle Open Office Writer : text;CTL languages
-Oracle Open Office Writer : text;cursor
-Oracle Open Office Writer : text;drawing pictures
-Oracle Open Office Writer : text;emphasizing
-Oracle Open Office Writer : text;font effects
-Oracle Open Office Writer : text;font sizes
-Oracle Open Office Writer : text;font styles
-Oracle Open Office Writer : text;fonts and formats
-Oracle Open Office Writer : text;Fontwork icons
-Oracle Open Office Writer : text;formatting around objects
-Oracle Open Office Writer : text;formatting bold while typing
-Oracle Open Office Writer : text;hiding
-Oracle Open Office Writer : text;hiding from specific users, with conditions
-Oracle Open Office Writer : text;hyperlinks
-Oracle Open Office Writer : text;input fields
-Oracle Open Office Writer : text;inserting pictures from Draw
-Oracle Open Office Writer : text;inserting pictures in
-Oracle Open Office Writer : text;inserting special characters
-Oracle Open Office Writer : text;italics
-Oracle Open Office Writer : text;kerning
-Oracle Open Office Writer : text;language selection
-Oracle Open Office Writer : text;line numbers
-Oracle Open Office Writer : text;line spacing
-Oracle Open Office Writer : text;multi-column
-Oracle Open Office Writer : text;navigating and selecting with keyboard
-Oracle Open Office Writer : text;non-printable
-Oracle Open Office Writer : text;number of words/characters
-Oracle Open Office Writer : text;overwriting or inserting
-Oracle Open Office Writer : text;printing in black
-Oracle Open Office Writer : text;replacing with format
-Oracle Open Office Writer : text;rotating
-Oracle Open Office Writer : text;selection modes
-Oracle Open Office Writer : text;shadowed
-Oracle Open Office Writer : text;sorting paragraphs
-Oracle Open Office Writer : text;subscript and superscript
-Oracle Open Office Writer : text;text/draw objects
-Oracle Open Office Writer : text;turning off automatic correction
-Oracle Open Office Writer : text;uppercase or lowercase
-Oracle Open Office Writer : text animation
-Oracle Open Office Writer : text attributes
-Oracle Open Office Writer : text attributes;hyperlinks
-Oracle Open Office Writer : text attributes;undoing
-Oracle Open Office Writer : text blocks
-Oracle Open Office Writer : text boxes
-Oracle Open Office Writer : text boxes;form functions
-Oracle Open Office Writer : text boxes;positioning
-Oracle Open Office Writer : text breaks in cells
-Oracle Open Office Writer : text colors for better accessibility
-Oracle Open Office Writer : text columns
-Oracle Open Office Writer : text databases (Base)
-Oracle Open Office Writer : text documents
-Oracle Open Office Writer : text documents;creating/opening
-Oracle Open Office Writer : text documents;default templates
-Oracle Open Office Writer : text documents;importing/exporting
-Oracle Open Office Writer : text documents;inserting Calc charts
-Oracle Open Office Writer : text documents;inserting spreadsheet cells
-Oracle Open Office Writer : text documents;merging
-Oracle Open Office Writer : text documents;print settings
-Oracle Open Office Writer : text documents;printing
-Oracle Open Office Writer : text documents;publishing in HTML
-Oracle Open Office Writer : text documents;saving
-Oracle Open Office Writer : text documents;saving automatically
-Oracle Open Office Writer : text documents;saving in other formats
-Oracle Open Office Writer : text documents;sending as e-mail
-Oracle Open Office Writer : text documents;shortcut keys in
-Oracle Open Office Writer : text documents;word completion settings
-Oracle Open Office Writer : text effects
-Oracle Open Office Writer : text flow
-Oracle Open Office Writer : text flow;around text tables
-Oracle Open Office Writer : text flow;at breaks
-Oracle Open Office Writer : text flow;from frame to frame
-Oracle Open Office Writer : text flow;in cells
-Oracle Open Office Writer : text formats
-Oracle Open Office Writer : text formats;copying and pasting
-Oracle Open Office Writer : text formats;databases
-Oracle Open Office Writer : text formats;finding
-Oracle Open Office Writer : text formats;pasting
-Oracle Open Office Writer : text frames
-Oracle Open Office Writer : text frames;centering on pages
-Oracle Open Office Writer : text frames;inserting/editing/linking
-Oracle Open Office Writer : text frames;labeling
-Oracle Open Office Writer : text grid for Asian layout
-Oracle Open Office Writer : text input fields
-Oracle Open Office Writer : text layout for special languages
-Oracle Open Office Writer : text objects
-Oracle Open Office Writer : text objects;alignment
-Oracle Open Office Writer : text objects;draw functions
-Oracle Open Office Writer : text objects;fonts
-Oracle Open Office Writer : text objects;in presentations and drawings
-Oracle Open Office Writer : text overflow in spreadsheet cells
-Oracle Open Office Writer : text scaling in charts
-Oracle Open Office Writer : text wrap around objects
-Oracle Open Office Writer : text, see also text documents, paragraphs and characters
-Oracle Open Office Writer : TextArt, see Fontwork
-Oracle Open Office Writer : textures
-Oracle Open Office Writer : textures;inserting from Gallery
-Oracle Open Office Writer : textures;on chart bars
-Oracle Open Office Writer : Thai
-Oracle Open Office Writer : Thai;entering text
-Oracle Open Office Writer : Thai;language settings
-Oracle Open Office Writer : thesaurus
-Oracle Open Office Writer : thesaurus;activating for a language
-Oracle Open Office Writer : thesaurus;related words
-Oracle Open Office Writer : ticker text
-Oracle Open Office Writer : time fields
-Oracle Open Office Writer : time fields;form functions
-Oracle Open Office Writer : time fields;HTML
-Oracle Open Office Writer : time fields;inserting
-Oracle Open Office Writer : times
-Oracle Open Office Writer : times;inserting when printing presentations
-Oracle Open Office Writer : times, formats
-Oracle Open Office Writer : tips
-Oracle Open Office Writer : tips;extended tips in Help
-Oracle Open Office Writer : title pages
-Oracle Open Office Writer : title pages;centering text on
-Oracle Open Office Writer : title pages;page styles
-Oracle Open Office Writer : title rows
-Oracle Open Office Writer : title rows;printing in Oracle Open Office Math
-Oracle Open Office Writer : titles
-Oracle Open Office Writer : titles;alignment (charts)
-Oracle Open Office Writer : titles;changing
-Oracle Open Office Writer : titles;editing in charts
-Oracle Open Office Writer : titles;font effects
-Oracle Open Office Writer : titles;formatting automatically
-Oracle Open Office Writer : titles;formatting charts
-Oracle Open Office Writer : titles;objects
-Oracle Open Office Writer : toolbars
-Oracle Open Office Writer : toolbars;adding buttons
-Oracle Open Office Writer : toolbars;docking/undocking
-Oracle Open Office Writer : toolbars;Form Navigation bar
-Oracle Open Office Writer : toolbars;viewing/closing
-Oracle Open Office Writer : tools bar
-Oracle Open Office Writer : tooltips
-Oracle Open Office Writer : tooltips;extended tips
-Oracle Open Office Writer : tooltips;help
-Oracle Open Office Writer : totals in text tables
-Oracle Open Office Writer : traditional Chinese
-Oracle Open Office Writer : traditional Chinese;translating to simplified chinese
-Oracle Open Office Writer : transparency
-Oracle Open Office Writer : transparency;areas
-Oracle Open Office Writer : transparency;off for faster printing
-Oracle Open Office Writer : transparency;saving
-Oracle Open Office Writer : tree view of Help
-Oracle Open Office Writer : trend lines in charts
-Oracle Open Office Writer : trigonometric functions
-Oracle Open Office Writer : turning off automatic correction
-Oracle Open Office Writer : typefaces
-Oracle Open Office Writer : typefaces;adding under UNIX
-Oracle Open Office Writer : typefaces;formats
-Oracle Open Office Writer : typographical quotes in Oracle Open Office Writer
-Oracle Open Office Writer : typography
-Oracle Open Office Writer : typography;Asian
-Oracle Open Office Writer : underlining
-Oracle Open Office Writer : underlining;AutoFormat function
-Oracle Open Office Writer : underlining;characters
-Oracle Open Office Writer : underlining;quick
-Oracle Open Office Writer : underlining;text
-Oracle Open Office Writer : undocking windows
-Oracle Open Office Writer : undoing
-Oracle Open Office Writer : undoing;direct formatting
-Oracle Open Office Writer : undoing;editing
-Oracle Open Office Writer : undoing;number of steps
-Oracle Open Office Writer : ungrouping groups
-Oracle Open Office Writer : units
-Oracle Open Office Writer : units;converting
-Oracle Open Office Writer : units;measurement units
-Oracle Open Office Writer : unlinking frames
-Oracle Open Office Writer : UNO components
-Oracle Open Office Writer : UNO components;Extension Manager
-Oracle Open Office Writer : UNO components;integrating new
-Oracle Open Office Writer : unprotecting tables of contents and indexes
-Oracle Open Office Writer : update options
-Oracle Open Office Writer : updates
-Oracle Open Office Writer : updates;checking automatically
-Oracle Open Office Writer : updates;checking manually
-Oracle Open Office Writer : updating
-Oracle Open Office Writer : updating;cross-references
-Oracle Open Office Writer : updating;fields
-Oracle Open Office Writer : updating;fields and charts, automatically (Writer)
-Oracle Open Office Writer : updating;indexes/tables of contents
-Oracle Open Office Writer : updating;linked sections, manually
-Oracle Open Office Writer : updating;links in text documents
-Oracle Open Office Writer : updating;links, on opening
-Oracle Open Office Writer : updating;styles, from selections
-Oracle Open Office Writer : updating;tables of contents
-Oracle Open Office Writer : updating;templates
-Oracle Open Office Writer : updating;text documents
-Oracle Open Office Writer : uppercase
-Oracle Open Office Writer : uppercase;changing to lowercase
-Oracle Open Office Writer : uppercase;formatting text
-Oracle Open Office Writer : URL
-Oracle Open Office Writer : URL;changing hyperlink URLs
-Oracle Open Office Writer : URL;definition
-Oracle Open Office Writer : URL;in pictures
-Oracle Open Office Writer : URL;saving absolute/relative paths
-Oracle Open Office Writer : URL;turning off URL recognition
-Oracle Open Office Writer : user data
-Oracle Open Office Writer : user data;in conditions
-Oracle Open Office Writer : user data;input
-Oracle Open Office Writer : user data;querying
-Oracle Open Office Writer : user data;removing when saving
-Oracle Open Office Writer : user feedback
-Oracle Open Office Writer : user feedback;automatically
-Oracle Open Office Writer : user variables in conditions/fields
-Oracle Open Office Writer : user-defined dictionaries
-Oracle Open Office Writer : user-defined dictionaries;creating
-Oracle Open Office Writer : user-defined dictionaries;dictionary of exceptions
-Oracle Open Office Writer : user-defined dictionaries;editing
-Oracle Open Office Writer : user-defined dictionaries;removing words from
-Oracle Open Office Writer : user-defined fields, restriction
-Oracle Open Office Writer : user-defined indexes
-Oracle Open Office Writer : user-defined styles
-Oracle Open Office Writer : user-defined styles;automatically replacing
-Oracle Open Office Writer : UTF-8/UCS2 support
-Oracle Open Office Writer : values
-Oracle Open Office Writer : values;rounded as shown (Calc)
-Oracle Open Office Writer : variable dates
-Oracle Open Office Writer : variables
-Oracle Open Office Writer : variables;document properties
-Oracle Open Office Writer : variables;for hiding text
-Oracle Open Office Writer : variables;for paths
-Oracle Open Office Writer : variables;in conditions
-Oracle Open Office Writer : variances in charts
-Oracle Open Office Writer : VBA code
-Oracle Open Office Writer : VBA code;loading/saving documents with VBA code
-Oracle Open Office Writer : version management
-Oracle Open Office Writer : version numbers of documents
-Oracle Open Office Writer : versions
-Oracle Open Office Writer : versions;comparing documents
-Oracle Open Office Writer : versions;file saving as, restriction
-Oracle Open Office Writer : versions;merging document versions
-Oracle Open Office Writer : versions;of a document
-Oracle Open Office Writer : versions;Oracle Open Office
-Oracle Open Office Writer : vertical callouts
-Oracle Open Office Writer : vertical rulers
-Oracle Open Office Writer : vertical scrollbars (Writer)
-Oracle Open Office Writer : vertical text boxes
-Oracle Open Office Writer : videos
-Oracle Open Office Writer : viewing
-Oracle Open Office Writer : viewing;databases
-Oracle Open Office Writer : viewing;fields
-Oracle Open Office Writer : viewing;file properties
-Oracle Open Office Writer : viewing;Oracle Open Office documents in Internet Explorer
-Oracle Open Office Writer : viewing;toolbars
-Oracle Open Office Writer : views
-Oracle Open Office Writer : views;creating database views (Base)
-Oracle Open Office Writer : views;defaults
-Oracle Open Office Writer : views;full screen
-Oracle Open Office Writer : views;icons
-Oracle Open Office Writer : views;scaling
-Oracle Open Office Writer : Visual Basic for Applications
-Oracle Open Office Writer : Visual Basic for Applications;loading/saving documents with VBA code
-Oracle Open Office Writer : watermarks
-Oracle Open Office Writer : web documents
-Oracle Open Office Writer : web documents;XForms
-Oracle Open Office Writer : Web support
-Oracle Open Office Writer : WebCast export
-Oracle Open Office Writer : WebDAV over HTTPS
-Oracle Open Office Writer : weekdays
-Oracle Open Office Writer : weekdays;automatically completing
-Oracle Open Office Writer : widows
-Oracle Open Office Writer : wildcards, see regular expressions
-Oracle Open Office Writer : windows
-Oracle Open Office Writer : windows;docking
-Oracle Open Office Writer : windows;docking definition
-Oracle Open Office Writer : windows;hiding/showing/docking
-Oracle Open Office Writer : windows;new
-Oracle Open Office Writer : wizards
-Oracle Open Office Writer : wizards;agendas
-Oracle Open Office Writer : wizards;database queries
-Oracle Open Office Writer : wizards;database tables (Base)
-Oracle Open Office Writer : wizards;databases (Base)
-Oracle Open Office Writer : wizards;document converter
-Oracle Open Office Writer : wizards;Euro Converter
-Oracle Open Office Writer : wizards;faxes
-Oracle Open Office Writer : wizards;form letters
-Oracle Open Office Writer : wizards;forms
-Oracle Open Office Writer : wizards;letters
-Oracle Open Office Writer : wizards;macros (Base)
-Oracle Open Office Writer : wizards;overview
-Oracle Open Office Writer : wizards;presentations
-Oracle Open Office Writer : wizards;reports
-Oracle Open Office Writer : word completion
-Oracle Open Office Writer : word completion;settings
-Oracle Open Office Writer : word completion;using/disabling
-Oracle Open Office Writer : word counts
-Oracle Open Office Writer : Word documents
-Oracle Open Office Writer : Word documents;compatibility
-Oracle Open Office Writer : Word documents;saving as
-Oracle Open Office Writer : WordArt, see Fontwork
-Oracle Open Office Writer : words
-Oracle Open Office Writer : words;automatic replacement on/off
-Oracle Open Office Writer : words;automatically replacing
-Oracle Open Office Writer : words;backgrounds
-Oracle Open Office Writer : words;counting in text
-Oracle Open Office Writer : words;disabling spellcheck
-Oracle Open Office Writer : words;wrapping in cells
-Oracle Open Office Writer : words;wrapping in CTL
-Oracle Open Office Writer : words;wrapping/not wrapping in text
-Oracle Open Office Writer : working directory change
-Oracle Open Office Writer : wrapping text
-Oracle Open Office Writer : wrapping text;editing contours
-Oracle Open Office Writer : wrapping text;in cells
-Oracle Open Office Writer : write protection on/off
-Oracle Open Office Writer : writing aids options
-Oracle Open Office Writer : writing with direct cursor
-Oracle Open Office Writer : WYSIWYG in fonts lists
-Oracle Open Office Writer : X axes
-Oracle Open Office Writer : X axes;grid formatting
-Oracle Open Office Writer : X axes;positioning
-Oracle Open Office Writer : X axes;scaling
-Oracle Open Office Writer : X axes;showing
-Oracle Open Office Writer : XForms
-Oracle Open Office Writer : XForms;adding/editing/deleting/organizing namespaces
-Oracle Open Office Writer : XForms;conditions
-Oracle Open Office Writer : XForms;opening/editing
-Oracle Open Office Writer : XML converters
-Oracle Open Office Writer : XML file formats
-Oracle Open Office Writer : XML filters
-Oracle Open Office Writer : XML filters;creating/testing
-Oracle Open Office Writer : XML filters;saving as package/installing/deleting
-Oracle Open Office Writer : XML filters;settings
-Oracle Open Office Writer : XML Forms, see XForms
-Oracle Open Office Writer : XSLT filters, see also XML filters
-Oracle Open Office Writer : XY charts
-Oracle Open Office Writer : Y axes
-Oracle Open Office Writer : Y axes;formatting
-Oracle Open Office Writer : Y axes;grid formatting
-Oracle Open Office Writer : Y axes;positioning
-Oracle Open Office Writer : Y axes;scaling
-Oracle Open Office Writer : Y axes;showing
-Oracle Open Office Writer : years
-Oracle Open Office Writer : years;2-digit options
-Oracle Open Office Writer : Z axes
-Oracle Open Office Writer : Z axes;grid formatting
-Oracle Open Office Writer : Z axes;showing
-Oracle Open Office Writer : zero values
-Oracle Open Office Writer : zero values;displaying (Calc)
-Oracle Open Office Writer : zooming
-Oracle Open Office Writer : zooming;page views
-Oracle Open Office Writer : zooming;pictures
-Oracle Open Office Writer : zooming;status bar
diff --git a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_headings_and_whole_words_en-US.txt b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_and_whole_words_en-US.txt
index 5c04d7985c0e..5c04d7985c0e 100644..100755
--- a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_headings_and_whole_words_en-US.txt
+++ b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_and_whole_words_en-US.txt
diff --git a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_headings_only_en-US.txt b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_only_en-US.txt
index 4ad00920a409..4ad00920a409 100644..100755
--- a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_headings_only_en-US.txt
+++ b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_headings_only_en-US.txt
diff --git a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_whole_words_only_en-US.txt b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_whole_words_only_en-US.txt
index 53006536b79b..53006536b79b 100644..100755
--- a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_whole_words_only_en-US.txt
+++ b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_whole_words_only_en-US.txt
diff --git a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_without_filter_en-US.txt b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_without_filter_en-US.txt
index 801677749685..801677749685 100644..100755
--- a/testautomation/framework/optional/input/help_browser/Oracle Open Office_search_without_filter_en-US.txt
+++ b/testautomation/framework/optional/input/help_browser/Oracle_Open_Office_search_without_filter_en-US.txt
diff --git a/testautomation/framework/required/f_first.bas b/testautomation/framework/required/f_first.bas
deleted file mode 100755
index a4733f612375..000000000000
--- a/testautomation/framework/required/f_first.bas
+++ /dev/null
@@ -1,70 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'*******************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : first test, to check global functionality
-'*
-'\******************************************************************************
-
-
-sub main
- ' Disable sleep() calls. If you encounter unexpected test interruptions
- ' you should try to outcomment this or set the value to FALSE.
- GLOBAL_USE_NEW_SLEEP = TRUE
-
- use "framework\required\includes\first.inc"
- use "framework\required\includes\graphics_import.inc"
- use "global\required\includes\g_option_application.inc"
-
- call hStatusIn ("framework", "f_first.bas")
- call tAllNew
-
- gApplication = "DRAW"
- call tInFilterCountCompare
- call tQuickInsertGraphNotAsLink
- call tJava
-
- gApplication = "WRITER"
- call tToolsOptionsTestFirst
- call tDatabaseCheck
- call tHelpRegistration
- call hStatusOut
-end sub
-
-sub LoadIncludeFiles
- use "global\system\includes\master.inc"
- use "global\system\includes\gvariabl.inc"
- use "global\tools\includes\optional\t_ui_filters.inc"
- use "global\tools\includes\optional\t_filetools.inc"
- use "global\tools\includes\optional\t_docfuncs.inc"
- use "global\tools\includes\optional\t_listfuncs.inc"
-
- gApplication = "WRITER"
- call GetUseFiles()
-end sub
-
diff --git a/testautomation/framework/required/f_help_browser.bas b/testautomation/framework/required/f_help_browser.bas
index 330e0a31e78a..edc70c63f9ca 100755
--- a/testautomation/framework/required/f_help_browser.bas
+++ b/testautomation/framework/required/f_help_browser.bas
@@ -38,6 +38,8 @@ sub main
call hStatusIn( "framework", "f_help_browser.bas" )
call tHelp_DialogTest()
call tHelp_ToolBar()
+ call tHelp_Registration()
+
call hStatusOut()
end sub
diff --git a/testautomation/framework/required/f_basic_dialogs.bas b/testautomation/framework/required/f_programmability_dialogs.bas
index 9820062e8139..537a4693770f 100755
--- a/testautomation/framework/required/f_basic_dialogs.bas
+++ b/testautomation/framework/required/f_programmability_dialogs.bas
@@ -38,13 +38,17 @@ sub main
use "framework\required\includes\basic_organizer.inc"
use "framework\required\includes\basic_dialog_export.inc"
use "framework\required\includes\basic_dialog_i18n_import.inc"
+ use "framework\required\includes\scripting_basics.inc"
+ use "framework\required\includes\script_organizers.inc"
- call hStatusIn( "framework" , "f_basic_dialogs.bas" )
+ call hStatusIn( "framework" , "f_programmability_dialogs.bas" )
call tUpdtMacroAssignment()
call tUpdtBasicDialogI18n()
call tUpdtBasicOrganizer()
call tUpdtDialogExport()
call tBasicDialogI18nImport()
+ call tScripting() ' script organizer nodes if no documents are open
+ call tUpdtScriptCount() ' script organizer nodes with one open document
call hStatusOut()
end sub
diff --git a/testautomation/framework/required/f_script_organizers.bas b/testautomation/framework/required/f_script_organizers.bas
deleted file mode 100755
index 5d0a1e8d3b91..000000000000
--- a/testautomation/framework/required/f_script_organizers.bas
+++ /dev/null
@@ -1,58 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'*******************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : Joerg.Skottke@Sun.Com
-'*
-'* short description : Verify names of macros and scripts
-'*
-'\******************************************************************************
-
-sub main
-
- use "framework\required\includes\script_organizers.inc"
-
- call hStatusIn( "framework" , "f_script_organizers.bas" )
- call tUpdtScriptCount()
- call hStatusOut()
-
-end sub
-
-'*******************************************************************************
-
-sub LoadIncludeFiles
-
- use "global\system\includes\master.inc"
- use "global\system\includes\gvariabl.inc"
-
- use "global\tools\includes\optional\t_docfuncs.inc"
- use "global\tools\includes\optional\t_treelist_tools.inc"
-
- gApplication = "WRITER"
- call GetUseFiles()
-
-end sub
-
diff --git a/testautomation/framework/required/f_standard_toolbar.bas b/testautomation/framework/required/f_standard_toolbar.bas
index cbecb16bd0a5..3fdcc8fde55f 100755
--- a/testautomation/framework/required/f_standard_toolbar.bas
+++ b/testautomation/framework/required/f_standard_toolbar.bas
@@ -62,8 +62,6 @@ sub LoadIncludeFiles
use "framework\tools\includes\toolbar_tools.inc"
use "framework\tools\includes\customize_tools.inc"
- use "framework\tools\includes\performance.inc"
- use "framework\tools\includes\init_tools.inc"
gApplication = "WRITER"
call GetUseFiles
diff --git a/testautomation/framework/required/f_tools_options.bas b/testautomation/framework/required/f_tools_options.bas
index d9945c5333ff..9b64e7e1cd26 100755
--- a/testautomation/framework/required/f_tools_options.bas
+++ b/testautomation/framework/required/f_tools_options.bas
@@ -34,9 +34,11 @@
sub main
use "framework\required\includes\tools_options.inc"
+ use "global\required\includes\g_option_application.inc"
call hStatusIn( "framework" , "f_tools_options.bas" )
call tUpdtOptionItems()
+ call tToolsOptionsTestFirst() ' Global test that should be called from within the application modules really.
call hStatusOut()
end sub
diff --git a/testautomation/framework/required/f_topten.bas b/testautomation/framework/required/f_topten.bas
index 49a13aeb3f1b..3b7068ece70b 100755
--- a/testautomation/framework/required/f_topten.bas
+++ b/testautomation/framework/required/f_topten.bas
@@ -35,21 +35,21 @@ sub main
use "framework\required\includes\topten.inc"
use "framework\required\includes\smoketest.inc"
-
+ use "framework\required\includes\first.inc"
+
+ hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_LOW )
+
call hStatusIn ("framework", "f_topten.bas")
-
- printlog Chr(13) + "* ------ Top-Ten-Test ------ *"
+ call tAllNew
+ call tInFilterCountCompare
+ call tJava
+ call tDatabaseCheck
call topten
-
-
- hSetMacroSecurityAPI( GC_MACRO_SECURITY_LEVEL_LOW )
call tSmokeTest
-
- ' Do not use hSetMacroSecurityAPI here as this is the ONLY place within
- ' the framework module where the setting is done via UI.
- hSetMacroSecurity( GC_MACRO_SECURITY_LEVEL_DEFAULT )
-
call hStatusOut
+
+ hSetMacroSecurity( GC_MACRO_SECURITY_LEVEL_DEFAULT )
+
end sub
'*******************************************************************************
@@ -60,6 +60,10 @@ sub LoadIncludeFiles
use "global\system\includes\gvariabl.inc"
use "global\tools\includes\optional\t_docfuncs.inc"
+ use "global\tools\includes\optional\t_ui_filters.inc"
+ use "global\tools\includes\optional\t_filetools.inc"
+ use "global\tools\includes\optional\t_docfuncs.inc"
+ use "global\tools\includes\optional\t_listfuncs.inc"
gApplication = "BACKGROUND"
Call GetUseFiles
diff --git a/testautomation/framework/required/f_window_functions.bas b/testautomation/framework/required/f_window_functions.bas
index dadfeb2eb71c..dabbd7647649 100755
--- a/testautomation/framework/required/f_window_functions.bas
+++ b/testautomation/framework/required/f_window_functions.bas
@@ -51,8 +51,9 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_docfuncs.inc"
use "global\tools\includes\optional\t_filetools.inc"
-
- use "framework\tools\includes\init_tools.inc"
+ use "global\tools\includes\optional\t_basic_ide_tools.inc"
+ use "global\tools\includes\optional\t_basic_organizer_tools.inc"
+ use "global\tools\includes\optional\t_treelist_tools.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/required/f_wizards.bas b/testautomation/framework/required/f_wizards.bas
index dd26c4885568..d1f7c3e4797b 100755
--- a/testautomation/framework/required/f_wizards.bas
+++ b/testautomation/framework/required/f_wizards.bas
@@ -75,9 +75,7 @@ sub LoadIncludeFiles
use "global\tools\includes\optional\t_accels.inc"
use "framework\tools\includes\wizards.inc"
- use "framework\tools\includes\init_tools.inc"
use "framework\tools\includes\template_tools.inc"
- use "framework\tools\includes\performance.inc"
gApplication = "WRITER"
call GetUseFiles()
diff --git a/testautomation/framework/required/includes/basic_dialog_i18n.inc b/testautomation/framework/required/includes/basic_dialog_i18n.inc
index bb1f0cf496ce..590c45a5f58a 100644..100755
--- a/testautomation/framework/required/includes/basic_dialog_i18n.inc
+++ b/testautomation/framework/required/includes/basic_dialog_i18n.inc
@@ -34,54 +34,53 @@
testcase tUpdtBasicDialogI18n
printlog( "BASIC IDE Dialog i18n." )
+ const MODULE_NAME = "tUpdtBasicDialogI18n"
+ const DIALOG_DEFAULT_TIMEOUT = 2
- dim brc as boolean
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
+ hCreateDocument()
- hCloseNavigator()
- hCreateDocument()'
-
- brc = hInitFormControls( "tDialogI18n" )
- if ( not brc ) then
+ if ( not hInitFormControls( MODULE_NAME ) ) then
warnlog( "Failed to open Basic IDE / Dialogs / ToolsCollectionBar" )
goto endsub
endif
printlog( "Click Manage Languages on ToolsCollectionBar")
kontext "ToolsCollectionBar"
- sleep(1)
- if ( ToolsCollectionBar.exists() ) then
- ManageLanguage.click()
+ if ( ToolsCollectionBar.exists( DIALOG_DEFAULT_TIMEOUT ) ) then
+ hClickButton( ManageLanguage )
else
warnlog( "<ToolsCollectionBar> is not open, is the test environment dirty?" )
endif
kontext "ManageUILanguages"
- if ( ManageUILanguages.exists( 2 ) ) then
+ if ( ManageUILanguages.exists( DIALOG_DEFAULT_TIMEOUT ) ) then
call dialogtest( ManageUILanguages )
printlog( "Add default language, choose preselection")
kontext "ManageUILanguages"
- Add.click()
+ hClickButton( Add )
kontext "SetDefaultLanguage"
- if ( SetDefaultLanguage.exists( 2 ) ) then
+ if ( SetDefaultLanguage.exists( DIALOG_DEFAULT_TIMEOUT ) ) then
call dialogtest( SetDefaultLanguage )
kontext "SetDefaultLanguage"
DefaultLanguageListbox.select( 3 )
kontext "SetDefaultLanguage"
- SetDefaultLanguage.ok()
+ hCloseDialog( SetDefaultLanguage, "ok" )
else
warnlog( "Dialog <SetDefaultLanguage> did not open" )
- endif
+ endif
printlog( "Back on Manage UI Languages Dialog we click <Add>")
kontext "ManageUILanguages"
- Add.click()
+ hClickButton( Add )
kontext "AddUserInterface"
- if ( AddUserInterface.exists( 2 ) ) then
+ if ( AddUserInterface.exists( DIALOG_DEFAULT_TIMEOUT ) ) then
call dialogtest( AddUserInterface )
printlog( "Add just another language at random")
@@ -90,7 +89,7 @@ testcase tUpdtBasicDialogI18n
AddNewControl.typeKeys( "<SPACE>" ) ' check it
kontext "AddUserInterface"
- AddUserInterface.ok()
+ hCloseDialog( AddUserInterface, "ok" )
else
warnlog( "Dialog <AddUserInterface> did not open" )
endif
@@ -100,39 +99,32 @@ testcase tUpdtBasicDialogI18n
printlog( "Back on Manage UI Languages Dialog, delete selected language")
kontext "ManageUILanguages"
- Delete.click()
- sleep(1)
+ hClickButton( Delete )
+
printlog( "Confirm delete")
kontext "active"
- if ( Active.exists( 1 ) ) then
+ if ( Active.exists( DIALOG_DEFAULT_TIMEOUT ) ) then
call dialogtest( active )
kontext "active"
- active.ok()
+ hCloseDialog( active, "ok" )
else
warnlog( "Confirm delete messagebox is missing" )
endif
printlog( "Leave Manage UI Languages Dialog")
kontext "ManageUILanguages"
- ManageUILanguages.ok()
+ hCloseDialog( ManageUILanguages, "ok" )
else
warnlog( "Manage UI languages did not open" )
endif
printlog( "Verify that the translationbar is visible")
kontext "TranslationBar"
- if ( not TranslationBar.exists() ) then
- warnlog( "The IDE Translation Toolbar is not visible" )
- endif
+ if ( not TranslationBar.exists() ) then warnlog( "The IDE Translation Toolbar is not visible" )
kontext "ToolsCollectionBar"
- if ( not ToolsCollectionBar.exists() ) then
- warnlog( "The ToolsCollectionBar is not visible" )
- endif
-
- printlog( "Cleanup" )
- ToolsCollectionBar.Close
+ hCloseDialog( ToolsCollectionBar, "close" )
hClosebasicIDE()
hDestroyDocument()
diff --git a/testautomation/framework/required/includes/basic_dialog_i18n_import.inc b/testautomation/framework/required/includes/basic_dialog_i18n_import.inc
index d4069484a0ab..db72863173b8 100644
--- a/testautomation/framework/required/includes/basic_dialog_i18n_import.inc
+++ b/testautomation/framework/required/includes/basic_dialog_i18n_import.inc
@@ -43,15 +43,19 @@ testcase tBasicDialogI18nImport
dim iTry as integer
const LANGUAGE_COUNT = 5
+ const MAX_RETRIES = 5
+ const WAIT_TIME = 100
+ const MODULE_NAME = "tDialogI18nImport"
+ const DIALOG_WAIT_TIMEOUT = 2
+ const MSG_LOCALE_CLASH_WARNING_BUTTONCOUNT = 4
+ const MSG_DIALOG_REPLACE_WARNING_BUTTONCOUNT = 3
printlog( "Open BASIC-IDE" )
hCreateDocument()
- hInitFormControls( "tDialogI18nImport" )
+ hInitFormControls( MODULE_NAME )
kontext "ToolsCollectionBar"
- if ( ToolsCollectionBar.exists() ) then
- ToolsCollectionBar.close()
- endif
+ if ( ToolsCollectionBar.exists() ) then ToolsCollectionBar.close()
Kontext "DialogBar"
if ( DialogBar.exists() ) then
@@ -60,7 +64,7 @@ testcase tBasicDialogI18nImport
Import.click()
kontext "OeffnenDlg"
- if ( OeffnenDlg.exists( 2 ) ) then
+ if ( OeffnenDlg.exists( DIALOG_WAIT_TIMEOUT ) ) then
printlog( "Enter path to test dialog" )
DateiName.setText( cDialogPath )
@@ -68,27 +72,25 @@ testcase tBasicDialogI18nImport
printlog( "Test messagebox" )
kontext "active"
- if ( Active.exists( 2 ) ) then
+ if ( Active.exists( DIALOG_WAIT_TIMEOUT ) ) then
printlog( "Messagebox: " & Active.getText() )
- if ( Active.getButtonCount() <> 4 ) then
+ if ( Active.getButtonCount() <> MSG_LOCALE_CLASH_WARNING_BUTTONCOUNT ) then
warnlog( "Incorrect messagebox, expected locale clash warning" )
endif
call DialogTest( Active )
printlog( "Accept with yes" )
- Active.Yes()
- sleep(1)
+ hCloseDialog( Active, "yes" )
+
Kontext "TranslationBar"
if ( TranslationBar.exists() ) then
- for iTry = 1 to 5
+ for iTry = 1 to MAX_RETRIES
iNumberOfLanguages = CurrentLanguage.getItemCount()
- if ( iNumberOfLanguages = LANGUAGE_COUNT ) then
- exit for
- endif
- wait( 100 )
+ if ( iNumberOfLanguages = LANGUAGE_COUNT ) then exit for
+ wait( WAIT_TIME )
next iTry
printlog( "Check number of imported languages" )
@@ -105,7 +107,7 @@ testcase tBasicDialogI18nImport
Import.click()
kontext "OeffnenDlg"
- if ( OeffnenDlg.exists( 2 ) ) then
+ if ( OeffnenDlg.exists( DIALOG_WAIT_TIMEOUT ) ) then
printlog( "Enter path to test dialog" )
DateiName.setText( cDialogPath )
@@ -113,17 +115,17 @@ testcase tBasicDialogI18nImport
printlog( "Test messagebox" )
kontext "Active"
- if ( Active.exists( 2 ) ) then
+ if ( Active.exists( DIALOG_WAIT_TIMEOUT ) ) then
printlog( "Messagebox: " & Active.getText() )
- if ( Active.getButtonCount() <> 3 ) then
+ if ( Active.getButtonCount() <> MSG_DIALOG_REPLACE_WARNING_BUTTONCOUNT ) then
warnlog( "Incorrect messagebox, expected dialog replace warning" )
endif
call DialogTest( Active )
Printlog( "Rename the new dialog" )
- Active.Yes()
+ hCloseDialog( Active, "yes" )
else
warnlog( "Overwrite warning missing" )
endif
diff --git a/testautomation/framework/required/includes/basic_macroassignment.inc b/testautomation/framework/required/includes/basic_macroassignment.inc
index 2db0c680967c..05967fcfd008 100644..100755
--- a/testautomation/framework/required/includes/basic_macroassignment.inc
+++ b/testautomation/framework/required/includes/basic_macroassignment.inc
@@ -33,109 +33,94 @@
testcase tUpdtMacroAssignment
- printlog( "Update-Test for some dialogs in Basic-IDE" )
-
- dim brc as boolean
+ printlog( "Update test all dialogs from plain document via assign macro dialog to scriptselector" )
+ const TABPAGE_EVENTS = 2
+ const BASIC_MODULE = "tUpdtMacroAssignment"
+ const DEFAULT_DIALOG_TIMEOUT = 1
+ const RC_TIMEOUT = -1
+
+ printlog( "New document" )
hCreateDocument()
printlog( "Create a new BASIC-module for this document" )
-
- brc = hOpenBasicOrganizerFromDoc()
-
- brc = hCreateModuleForDoc( "tUpdtBasicIde" )
- if ( not brc ) then
- warnlog( "Failed to create a new BASIC module for this document" )
- brc = hDestroyDocument()
- goto endsub
- endif
+ hInitBasicIDE( BASIC_MODULE )
printlog( "Create a new BASIC-dialog" )
- brc = hNewDialog()
- if ( not brc ) then
- warnlog( "Failed to create a new BASIC-dialog" )
- hCloseBasicIde()
- brc = hDestroyDocument()
- goto endsub
- endif
-
- printlog( "Select the Dialog-Pane from the DialogWindow" )
- brc = hSelectDialogPane()
- if ( not brc ) then
- warnlog( "Selecting failed: ToolsCollectionBar is in the way." )
- hCloseBasicIde()
- else
-
- printlog( "Show ToolsCollectionBar" )
- brc = hShowMacroControls()
- if ( not brc ) then
- warnlog( "ToolsCollectionBar is not open" )
- endif
-
- printlog( "Open the Property-Browser: TabGeneralControl" )
- brc = hOpenPropertyBrowser()
- if ( brc ) then
- call dialogtest( TabGeneralControl )
- else
- warnlog( "Property-Browser is not open, skipping further testing" )
- endif
-
- if ( brc ) then
- brc = hSetPBTabPage( 2 )
- endif
-
- if ( brc ) then
-
- printlog( "Current Dialog: Property-Browser / Events-Page" )
- call dialogtest( TabEventsControl )
-
- Kontext "TabEventsControl"
- printlog( "Click the button for the FocusGained-Event" )
- try
- PBFocusGained.click()
- catch
- warnlog( "#i64196# - Events missing on properties tab-page" )
- goto skipevents
- endcatch
-
- Kontext "AssignMacro"
- printlog( "Current Dialog: Assign Macro" )
- if ( AssignMacro.exists( 1 ) ) then
- call dialogtest( AssignMacro )
- printlog( "Click the Assign-Button on the Macro-Assignment-Dialog" )
- AssignButton.click()
-
- Kontext "ScriptSelector"
- printlog( "Current Dialog: ScriptSelector" )
- if ( ScriptSelector.exists( 1 ) ) then
- call dialogtest( ScriptSelector )
- printlog( "Cancel the scriptselector" )
- ScriptSelector.cancel()
+ if ( hNewDialog() ) then
+
+ printlog( "Select the Dialog-Pane from the DialogWindow" )
+ if ( hSelectDialogPane() ) then
+
+ printlog( "Show ToolsCollectionBar" )
+ if ( hShowMacroControls() ) then
+
+ printlog( "Open the Property-Browser" )
+ if ( hOpenPropertyBrowser() ) then
+
+ kontext "TabGeneralControl"
+ call dialogtest( TabGeneralControl )
+
+ printlog( "Switch to events-tab" )
+ if ( hSetPBTabPage( TABPAGE_EVENTS ) ) then
+
+ printlog( "Current Dialog: Property-Browser / Events-Page" )
+ call dialogtest( TabEventsControl )
+
+ Kontext "TabEventsControl"
+ printlog( "Click the button for the FocusGained-Event" )
+ if ( hClickButton( PBFocusGained ) <> RC_TIMEOUT ) then
+
+ Kontext "AssignMacro"
+ printlog( "Current Dialog: Assign Macro" )
+ if ( AssignMacro.exists( DEFAULT_DIALOG_TIMEOUT ) ) then
+
+ call dialogtest( AssignMacro )
+
+ printlog( "Click the Assign-Button on the Macro-Assignment-Dialog to open Script Selector" )
+ if ( hClickButton( AssignButton ) <> RC_TIMEOUT ) then
+
+ Kontext "ScriptSelector"
+ if ( ScriptSelector.exists( DEFAULT_DIALOG_TIMEOUT ) ) then
+
+ call dialogtest( ScriptSelector )
+
+ printlog( "Close Script Selector" )
+ hCloseDialog( ScriptSelector, "cancel" )
+
+ printlog( "Close all remaining dialogs and documents" )
+ Kontext "AssignMacro"
+ hCloseDialog( AssignMacro, "cancel" )
+ hClosePropertyBrowser()
+ hCloseBasicIDE()
+ hDestroyDocument()
+ else
+ warnlog( "Failed to open/access <ScriptSelector>" )
+ endif
+ else
+ warnlog( "Assign-button is not enabled" )
+ endif
+ else
+ warnlog( "Failed to open/access <AssignMacro> dialog" )
+ endif
+ else
+ warnlog( "#i64196# - Events missing on properties tab-page" )
+ endif
+ else
+ warnlog( "Failed to switch tabpage to Tab-Events" )
+ endif
else
- warnlog( "Failed to open/access <ScriptSelector>" )
+ warnlog( "Property-Browser is not open, skipping further testing" )
endif
-
- Kontext "AssignMacro"
- printlog( "Current Dialog: Assign Macro" )
- printlog( "Cancel the Script-Assignement-Dialog" )
- AssignMacro.cancel()
else
- warnlog( "Failed to open/access <AssignMacro> dialog" )
+ warnlog( "ToolsCollectionBar is not open" )
endif
-
+ else
+ warnlog( "Selecting failed: ToolsCollectionBar is in the way." )
endif
-
- skipevents:
-
- printlog( "Current Dialog: Property-Browser" )
- printlog( "Close the Property-Browser, return to the document" )
- brc = hClosePropertyBrowser()
-
- brc = hCloseBasicIde()
-
+ else
+ warnlog( "Failed to create a new BASIC-dialog" )
endif
-
- brc = hDestroyDocument()
endcase
diff --git a/testautomation/framework/required/includes/basic_organizer.inc b/testautomation/framework/required/includes/basic_organizer.inc
index eb33d3a554e3..789d870cb9a6 100644..100755
--- a/testautomation/framework/required/includes/basic_organizer.inc
+++ b/testautomation/framework/required/includes/basic_organizer.inc
@@ -35,7 +35,6 @@ testcase tUpdtBasicOrganizer
printlog( "Update test for the Basic Organizer dialog" )
- dim brc as boolean
dim cTempString as string
const TESTLIB = "zzzz"
@@ -48,7 +47,7 @@ testcase tUpdtBasicOrganizer
kontext "Makro"
if ( not makro.exists() ) then
warnlog( "Macro Organizer is not open, aborting test" )
- brc = hDestroyDocument()
+ hDestroyDocument()
goto endsub
else
printlog( "Successfully opened the MacroOrganizer" )
@@ -68,7 +67,7 @@ testcase tUpdtBasicOrganizer
printlog( "TabModule is not open, the test cannot continue" )
kontext "Makro"
Makro.cancel()
- brc = hDestroyDocument()
+ hDestroyDocument()
goto endsub
endif
@@ -125,7 +124,7 @@ testcase tUpdtBasicOrganizer
Neu.click()
kontext "NeueBibliothek"
call DialogTest( NeueBibliothek )
- Bibliotheksname.setText( "zzzz" )
+ Bibliotheksname.setText( TESTLIB )
NeueBibliothek.ok()
else
warnlog( "There is a problem accessing the New Libraries dialog" )
@@ -138,7 +137,7 @@ testcase tUpdtBasicOrganizer
Neu.click()
kontext "NeueBibliothek"
call DialogTest( NeueBibliothek )
- Bibliotheksname.setText( "zzzz" )
+ Bibliotheksname.setText( TESTLIB )
NeueBibliothek.ok()
else
warnlog( "There is a problem accessing the New Libraries dialog" )
@@ -192,7 +191,7 @@ testcase tUpdtBasicOrganizer
printlog( "Try to delete the library" )
cTempString = BibliotheksListe.getSelText()
- if ( cTempString = "zzzz" ) then
+ if ( cTempString = TESTLIB ) then
printlog( "Delete" )
Loeschen.click()
Kontext "Active"
@@ -223,8 +222,7 @@ testcase tUpdtBasicOrganizer
Makro.cancel()
printlog( "Close the document" )
- brc = hDestroyDocument()
-
+ hDestroyDocument()
endcase
diff --git a/testautomation/framework/required/includes/first.inc b/testautomation/framework/required/includes/first.inc
index 0c0b737ffe5d..700cee374104 100644..100755
--- a/testautomation/framework/required/includes/first.inc
+++ b/testautomation/framework/required/includes/first.inc
@@ -271,62 +271,129 @@ endcase
'*******************************************************************************
-function fDocumentCheck (SollFilter as String) as boolean
+function fDocumentCheck( SollFilter as String ) as boolean
' Check the name of the file type in the Save dialog and validate
' it against a given string.
Dim sFiltername as String
FileSaveAs
+
Kontext "SpeichernDlg"
- sFiltername = DateiTyp.GetItemText (1)
- if (Instr(lcase(sFiltername), lcase (SollFilter)) <> 0) then
- fDocumentCheck() = TRUE
+ if ( SpeichernDlg.exists( 1 ) ) then
+ sFiltername = DateiTyp.GetItemText (1)
+ if (Instr(lcase(sFiltername), lcase (SollFilter)) <> 0) then
+ fDocumentCheck() = TRUE
+ else
+ printlog("Filter names do not match:")
+ printlog("Found: [" & sFilterName & "]")
+ printlog("Expected: [" & SollFilter & "]")
+ SollFilter = sFiltername
+ fDocumentCheck() = FALSE
+ end if
+ SpeichernDlg.Cancel()
else
- printlog("Filter names do not match:")
- printlog("Found: [" & sFilterName & "]")
- printlog("Expected: [" & SollFilter & "]")
- SollFilter = sFiltername
+ warnlog( "Dialog <File Save As> did not open" )
fDocumentCheck() = FALSE
- end if
- SpeichernDlg.Cancel()
+ endif
end function
'*******************************************************************************
-testcase tHelpRegistration
+testcase tInFilterCountCompare()
- ' Check i69670 which was a showstopper in OOo 2.0.4
- ' Menu-entry "Help / Registration" is disabled
+ printlog( "Check filterlist (filterstring) for graphics files" )
- dim iCurrentMenuEntry as integer
- dim iMenuEntryCount as integer
-
- printlog "Check if all entries in Help Menu are enabled"
- call hNewDocument
-
- printlog "Open menu"
- hUseMenu()
- iMenuEntryCount = hMenuItemGetCount
-
- printlog "Select the last entry 'Help'"
- hMenuSelectNr( iMenuEntryCount )
- iMenuEntryCount = hMenuItemGetCount
- for iCurrentMenuEntry = 1 to iMenuEntryCount
- if ( hMenuItemIsEnabled( iCurrentMenuEntry ) ) then
- printlog "(" & iCurrentMenuEntry & "/" & iMenuEntryCount & _
- "): Menu entry is enabled: Help-> " & hMenuItemGetText( iCurrentMenuEntry )
- else
- if (lcase(gPlatform) = "osx") then
- warnlog "#i86247# Help->Registration is disabled on MacOS X"
- else
- warnlog "(" & iCurrentMenuEntry & "/" & iMenuEntryCount & _
- "): Menu entry is not enabled: Help-> " & hMenuItemGetText( iCurrentMenuEntry )
- endif
+ const FILE_NAME = "graphic_filters.txt"
+ const SUFFIX_STRING_LENGTH = 178
+
+' List of filter suffixes for verification in case of error
+' *.bmp;*.dxf;*.emf;*.eps;*.gif;*.jpg;*.jpeg;*.jfif;*.jif;*.met;*.pbm;*.pcd;
+' *.pct;*.pcx;*.pgm;*.png;*.ppm;*.psd;*.ras;*.sgf;*.sgv;*.svm;*.tga;*.tif;
+' *.tiff;*.wmf;*.xbm;*.xpm;*.pict
+
+ dim caUIFilters( 30 ) as string
+
+ dim cReferencePath as string
+ cReferencePath = gTesttoolPath & "global/input/filters/"
+ cReferencePath = convertpath ( cReferencePath & FILE_NAME )
+
+ dim cUIFiltersPath as string
+ cUIFiltersPath = hGetWorkPath() & FILE_NAME
+
+ dim iCurrentFilter as integer
+ dim iFilterCount as integer
+
+ dim cAllFormats as string
+
+ dim irc as integer
+ dim iBegin as integer
+ dim iEnd as integer
+
+ printlog( "" )
+ printlog( "Verify filternames listed on the Insert Graphics dialog" )
+
+ hCreateDocument()
+ hChangeDoc()
+
+ InsertGraphicsFromFile
+
+ kontext "GrafikEinfuegenDlg"
+ if ( GrafikEinfuegenDlg.exists( 1 ) ) then
+ iFilterCount = DateiTyp.getItemCount()
+
+ 'Make list compatible with listfunctions
+ caUIFilters( 0 ) = iFilterCount - 1
+
+ for iCurrentFilter = 2 to iFilterCount
+
+ caUIFilters( iCurrentFilter - 1 ) = DateiTyp.getItemText( iCurrentFilter )
+
+ next iCurrentFilter
+
+ irc = hManageComparisionList( cReferencePath, cUIFiltersPath, caUIFilters() )
+ hListResultEvaluation( irc , 0 )
+
+ printlog( "" )
+ printlog( "Verify <All formats>-string" )
+ cAllFormats = DateiTyp.getItemText( 1 )
+
+ iBegin = instr( cAllFormats, "<" )
+ if ( iBegin <> 1 ) then
+ warnlog( "The opening bracket < is missing in <All formats> string" )
+ endif
+
+ iEnd = instr( cAllFormats, ">" )
+ if ( iEnd = 0 ) then
+ warnlog( "The closing bracket > is missing in <All formats> string" )
+ endif
+
+ if ( ( iEnd - iBegin ) < 2 ) then
+ warnlog( "<All formats> string is shorter than expected, please check" )
+ printlog( "String is: " & cAllFormats & ", length (" & len( cAllFormats ) & ")" )
endif
- next iCurrentMenuEntry
- hMenuClose()
- call hCloseDocument
-endcase
+ iBegin = instr( cAllFormats, "(" )
+ if ( iBegin <> iEnd + 2 ) then
+ warnlog( "The opening bracket ( is missing in <All formats> string" )
+ endif
+ iEnd = instr( cAllFormats, ")" )
+ if ( iEnd < 10 ) then
+ warnlog( "The closing bracket ) is missing in <All formats> string" )
+ endif
+
+ irc = iEnd - iBegin
+ if ( irc <> SUFFIX_STRING_LENGTH ) then
+ warnlog( "The list of file suffixes has changed, please verify" )
+ printlog( "Found: " & irc & " chars, expected " & SUFFIX_STRING_LENGTH )
+ endif
+ kontext "GrafikEinfuegenDlg"
+ GrafikEinfuegenDlg.cancel()
+ else
+ warnlog( "<Insert Graphics> dialog did not open" )
+ endif
+
+ hDestroyDocument()
+
+endcase
diff --git a/testautomation/framework/required/includes/graphics_import.inc b/testautomation/framework/required/includes/graphics_import.inc
deleted file mode 100644
index a2a92f961274..000000000000
--- a/testautomation/framework/required/includes/graphics_import.inc
+++ /dev/null
@@ -1,314 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'*******************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Graphic import (2nd file for the first.bas)
-'*
-'\******************************************************************************
-
-
-testcase tQuickInsertGraphNotAsLink
-
- printlog( "Load files of all known graphics formats" )
-
- dim iCurrentFile as integer
- dim GraphicFile as String
- dim Filtername as String
-
- printlog( "Insert a sample of commonly used file formats into a writer document (not linked)" )
-
- if ( gUseSysDlg ) then
- warnlog( "This test needs the OpenOffice.org filepicker to be set as default" )
- goto endsub
- endif
-
- gApplication = "WRITER"
- Call hNewDocument
-
- for iCurrentFile = 1 to 25
-
- ' MODIFY and ENABLE this SAMPLE snippet to exclude one fileformat from testing
- ' if ( iCurrentFile = 7 ) AND (gtPlatform="x86") then
- ' qaErrorLog("#<issue-id># crash on <platform> on loading <image-file>")
- ' goto skipformat
- ' endif
- ' Note: Can be locale dependent!
- if (iCurrentFile = 4) AND (gPlatform="osx") then
- qaerrorlog("#i100253# crash on MacOS X on loading ball.eps")
- goto skipformat
- endif
-
- Kontext "GrafikEinfuegenDlg"
- if ( not GrafikEinfuegenDlg.exists() ) then
- InsertGraphicsFromFile
- Kontext "GrafikEinfuegenDlg"
- endif
-
- if ( GrafikEinfuegenDlg.Exists( 2 ) ) then
- ' the list of files expected to be found in the samples directory
- select case iCurrentFile
- case 1 : GraphicFile = "desp.bmp"
- case 2 : GraphicFile = "columbia.dxf"
- case 3 : GraphicFile = "extrud.emf"
- case 4 : GraphicFile = "ball.eps"
- case 5 : GraphicFile = "airshw.met"
- case 6 : GraphicFile = "eface.gif"
- case 7 : GraphicFile = "purzel.gif" ' Animated Gif
- case 8 : GraphicFile = "borabora.jpg"
- case 9 : GraphicFile = "grafix1.pbm"
- case 10 : GraphicFile = "circle.pcx"
- case 11 : GraphicFile = "papagei1.pcd"
- case 12 : GraphicFile = "newtonme.pct"
- case 13 : GraphicFile = "grafix2.pgm"
- case 14 : GraphicFile = "obst.png"
- case 15 : GraphicFile = "london.ppm"
- case 16 : GraphicFile = "tiger.psd"
- case 17 : GraphicFile = "grafix3.ras"
- case 18 : GraphicFile = "mickym.sgf"
- case 19 : GraphicFile = "faxpfeil.sgv"
- case 20 : GraphicFile = "picture.svm"
- case 21 : GraphicFile = "pilz.tga"
- case 22 : GraphicFile = "stabler.tif"
- case 23 : GraphicFile = "krokodil.wmf"
- case 24 : GraphicFile = "grafix4.xbm"
- case 25 : GraphicFile = "papagei2.xpm"
- end select
-
- GraphicFile = ConvertPath (gTesttoolPath & "global\input\graf_inp\" & GraphicFile)
- printlog( "Current file " + iCurrentFile + ": " & GraphicFile )
- printlog( " * Set filter to <All formats>" )
- DateiName.SetText( GraphicFile )
- DateiTyp.Select( 1 )
- WaitSlot()
-
- printlog( " * Uncheck Preview- and Link-checkbox, load the file" )
- Vorschau.unCheck
- Verknuepfen.unCheck()
- Oeffnen.click()
- WaitSlot( 2000 )
-
- Kontext "Active"
- if ( Active.Exists() ) then
- Warnlog( "Unexpected messagebox: " & Active.GetText() )
- Warnlog( "Affected file: " & GraphicFile )
- Active.OK
- else
- try
- EditCopy
- WaitSlot( 2000 )
- EditDeleteContents
- WaitSlot( 2000 )
- catch
- Warnlog( "Graphic file not selected/Copy or Delete is disabled: " & GraphicFile )
- gMouseClick (90, 90)
- endcatch
- endif
- else
- warnlog( "Insert Graphics Dialog is not open, aborting" )
- goto endsub
- endif
-
- skipformat:
- next iCurrentFile
-
- printlog( "" )
- printlog( "Test the PCD-Filters directly (3 samples)" )
-
- for iCurrentFile = 1 to 3
-
- printlog( "" )
-
- Kontext "GrafikEinfuegenDlg"
- if ( not GrafikEinfuegenDlg.exists() ) then
- InsertGraphicsFromFile
- Kontext "GrafikEinfuegenDlg"
- endif
-
- if ( GrafikEinfuegenDlg.exists( 2 ) ) then
-
- select case iCurrentFile
- case 1 : Filtername = "PCD - Kodak Photo CD (768x512) (*.pcd)"
- case 2 : Filtername = "PCD - Kodak Photo CD (384x256) (*.pcd)"
- case 3 : Filtername = "PCD - Kodak Photo CD (192x128) (*.pcd)"
- end select
-
- GraphicFile = ConvertPath( gTesttoolPath & "global\input\graf_inp\papagei1.pcd" )
-
- printlog( "Current filter: " & Filtername )
- printlog( "Current file..: " & GraphicFile )
- DateiName.SetText ( GraphicFile )
- DateiTyp.Select( Filtername )
-
- printlog( " * Uncheck Preview- and Link-checkbox, load the file" )
- Vorschau.Uncheck()
- Verknuepfen.unCheck()
- Oeffnen.click()
- WaitSlot( 2000 )
-
- Kontext "Active"
- if ( Active.Exists() )then
- Warnlog( "Unexpected messagebox: " & Active.GetText() )
- Warnlog( "Affected file..: " & GraphicFile )
- Warnlog( "Affected filter: " & Filtername )
- Active.OK()
- else
- try
- EditCopy
- WaitSlot( 2000 )
- EditDeleteContents
- WaitSlot( 2000 )
- catch
- Warnlog( "Problems with filtertype : " & Filtername )
- gMouseClick (90, 90)
- endcatch
- endif
- else
- warnlog( "Insert Graphics Dialog is not open. Aborting" )
- goto endsub
- endif
-
- next iCurrentFile
-
- Kontext "GrafikEinfuegenDlg"
- if GrafikEinfuegenDlg.Exists then
- GrafikEinfuegenDlg.Cancel
- endif
-
- Call hCloseDocument
-
-endcase
-
-'*******************************************************************************
-
-testcase tInFilterCountCompare()
-
- printlog( "Check filterlist (filterstring) for graphics files" )
-
- if ( gUseSysDlg ) then
- warnlog( "This test needs the OpenOffice.org filepicker to be set as default" )
- goto endsub
- endif
-
- const FILE_NAME = "graphic_filters.txt"
- const SUFFIX_STRING_LENGTH = 178
-
-' List of filter suffixes for verification in case of error
-' *.bmp;*.dxf;*.emf;*.eps;*.gif;*.jpg;*.jpeg;*.jfif;*.jif;*.met;*.pbm;*.pcd;
-' *.pct;*.pcx;*.pgm;*.png;*.ppm;*.psd;*.ras;*.sgf;*.sgv;*.svm;*.tga;*.tif;
-' *.tiff;*.wmf;*.xbm;*.xpm;*.pict
-
- dim caUIFilters( 30 ) as string
-
- dim cReferencePath as string
- cReferencePath = gTesttoolPath & "global/input/filters/"
- cReferencePath = convertpath ( cReferencePath & FILE_NAME )
-
- dim cUIFiltersPath as string
- cUIFiltersPath = hGetWorkPath() & FILE_NAME
-
- dim iCurrentFilter as integer
- dim iFilterCount as integer
-
- dim cAllFormats as string
-
- dim irc as integer
- dim iBegin as integer
- dim iEnd as integer
-
- printlog( "" )
- printlog( "Verify filternames listed on the Insert Graphics dialog" )
-
- hCreateDocument()
- hChangeDoc()
-
- InsertGraphicsFromFile
-
- kontext "GrafikEinfuegenDlg"
- if ( GrafikEinfuegenDlg.exists( 1 ) ) then
- iFilterCount = DateiTyp.getItemCount()
-
- 'Make list compatible with listfunctions
- caUIFilters( 0 ) = iFilterCount - 1
-
- for iCurrentFilter = 2 to iFilterCount
-
- caUIFilters( iCurrentFilter - 1 ) = DateiTyp.getItemText( iCurrentFilter )
-
- next iCurrentFilter
-
- irc = hManageComparisionList( cReferencePath, cUIFiltersPath, caUIFilters() )
- if ( irc <> 0 ) then
- warnlog( "The list of graphic format filters has changed" )
- endif
-
- printlog( "" )
- printlog( "Verify <All formats>-string" )
- cAllFormats = DateiTyp.getItemText( 1 )
-
- iBegin = instr( cAllFormats, "<" )
- if ( iBegin <> 1 ) then
- warnlog( "The opening bracket < is missing in <All formats> string" )
- endif
-
- iEnd = instr( cAllFormats, ">" )
- if ( iEnd = 0 ) then
- warnlog( "The closing bracket > is missing in <All formats> string" )
- endif
-
- if ( ( iEnd - iBegin ) < 2 ) then
- warnlog( "<All formats> string is shorter than expected, please check" )
- printlog( "String is: " & cAllFormats & ", length (" & len( cAllFormats ) & ")" )
- endif
-
- iBegin = instr( cAllFormats, "(" )
- if ( iBegin <> iEnd + 2 ) then
- warnlog( "The opening bracket ( is missing in <All formats> string" )
- endif
-
- iEnd = instr( cAllFormats, ")" )
- if ( iEnd < 10 ) then
- warnlog( "The closing bracket ) is missing in <All formats> string" )
- endif
-
- irc = iEnd - iBegin
- if ( irc <> SUFFIX_STRING_LENGTH ) then
- warnlog( "The list of file suffixes has changed, please verify" )
- printlog( "Found: " & irc & " chars, expected " & SUFFIX_STRING_LENGTH )
- endif
-
- kontext "GrafikEinfuegenDlg"
- GrafikEinfuegenDlg.cancel()
- else
- warnlog( "<Insert Graphics> dialog did not open" )
- endif
-
- hDestroyDocument()
-
-
-
-endcase
diff --git a/testautomation/framework/required/includes/help_browser.inc b/testautomation/framework/required/includes/help_browser.inc
index 0b8b80bcbdaf..62438373dc37 100644..100755
--- a/testautomation/framework/required/includes/help_browser.inc
+++ b/testautomation/framework/required/includes/help_browser.inc
@@ -154,3 +154,42 @@ testcase tHelp_ToolBar
brc = hCloseHelp()
endcase
+
+'*******************************************************************************
+
+testcase tHelp_Registration
+
+ ' Check i69670 which was a showstopper in OOo 2.0.4
+ ' Menu-entry "Help / Registration" is disabled
+
+ dim iCurrentMenuEntry as integer
+ dim iMenuEntryCount as integer
+
+ printlog "Check if all entries in Help Menu are enabled"
+ call hNewDocument
+
+ printlog "Open menu"
+ hUseMenu()
+ iMenuEntryCount = hMenuItemGetCount
+
+ printlog "Select the last entry 'Help'"
+ hMenuSelectNr( iMenuEntryCount )
+ iMenuEntryCount = hMenuItemGetCount
+ for iCurrentMenuEntry = 1 to iMenuEntryCount
+ if ( hMenuItemIsEnabled( iCurrentMenuEntry ) ) then
+ printlog "(" & iCurrentMenuEntry & "/" & iMenuEntryCount & _
+ "): Menu entry is enabled: Help-> " & hMenuItemGetText( iCurrentMenuEntry )
+ else
+ if (lcase(gPlatform) = "osx") then
+ warnlog "#i86247# Help->Registration is disabled on MacOS X"
+ else
+ warnlog "(" & iCurrentMenuEntry & "/" & iMenuEntryCount & _
+ "): Menu entry is not enabled: Help-> " & hMenuItemGetText( iCurrentMenuEntry )
+ endif
+ endif
+ next iCurrentMenuEntry
+ hMenuClose()
+ call hCloseDocument
+
+endcase
+
diff --git a/testautomation/framework/required/includes/script_organizers.inc b/testautomation/framework/required/includes/script_organizers.inc
index 6d14b7f77f6e..6082a3313ce0 100755
--- a/testautomation/framework/required/includes/script_organizers.inc
+++ b/testautomation/framework/required/includes/script_organizers.inc
@@ -37,39 +37,32 @@ testcase tUpdtScriptCount
printlog( "Resource test for macros and scripts / related dialogs" )
const SCRIPTING_DIALOGS = 5
+
dim aScriptCount( SCRIPTING_DIALOGS )
- ' JavaScript
- aScriptCount( 1 ) = 10
- ' BeanShell
- aScriptCount( 2 ) = 14
- if ( lcase( gPlatform ) = "osx" ) then
- ' Python
- aScriptCount( 3 ) = 8
- else
- ' Python
- aScriptCount( 3 ) = 10
- endif
- if ( lcase( gPlatform ) = "osx" ) then
- ' Run Macro
- aScriptCount( 5 ) = 600
- else
- ' Run Macro
- aScriptCount( 5 ) = 602
- endif
- if ( gOOo ) then
- ' Makro Organizer
- aScriptCount( 4 ) = 585
- ' Run Macro
- aScriptCount( 5 ) = aScriptCount( 5 ) - 1
- else
- ' Makro Organizer
- aScriptCount( 4 ) = 586
- endif
+
+ aScriptCount( 1 ) = 10 ' JavaScript
+ aScriptCount( 2 ) = 14 ' BeanShell
+
+ if ( lcase( gPlatform ) = "osx" ) then
+ aScriptCount( 3 ) = 8 ' Python
+ aScriptCount( 5 ) = 600 ' Run Macro
+ else
+ aScriptCount( 3 ) = 10 ' Python
+ aScriptCount( 5 ) = 602 ' Run Macro
+ endif
+
+ if ( gOOo ) then
+ aScriptCount( 4 ) = 585 ' Makro Organizer
+ aScriptCount( 5 ) = aScriptCount( 5 ) - 1 ' Run Macro
+ else
+ ' Makro Organizer
+ aScriptCount( 4 ) = 586
+ endif
dim iCurrentDialog as integer
dim iCurrentScriptCount as integer
- hInitSingleDoc()
+ hInitSingleDoc()
for iCurrentDialog = 1 to SCRIPTING_DIALOGS
@@ -104,7 +97,7 @@ testcase tUpdtScriptCount
ScriptSelector.cancel()
end select
- printlog sDialog
+ printlog( sDialog )
if ( aScriptCount( iCurrentDialog ) <> iCurrentScriptCount ) then
warnlog( "Incorrect number of scripts for this dialog: '" + sDialog + "' expected:" + aScriptCount( iCurrentDialog ) + ", but is:" & iCurrentScriptCount )
@@ -122,13 +115,13 @@ endcase
function hGetScriptCount( oTree as object, oList as object ) as integer
- dim iTreeItem as integer
- dim iScript as integer : iScript = 0
+ dim iCurrentTreeItem as integer
+ dim iScriptCount as integer : iScriptCount = 0
- for iTreeItem = 1 to oTree.getItemCount()
- oTree.select( iTreeItem )
- iScript = iScript + oList.getItemCount()
- next iTreeItem
- hGetScriptCount() = iScript
+ for iCurrentTreeItem = 1 to oTree.getItemCount()
+ oTree.select( iCurrentTreeItem )
+ iScriptCount = iScriptCount + oList.getItemCount()
+ next iCurrentTreeItem
+ hGetScriptCount() = iScriptCount
end function
diff --git a/testautomation/framework/optional/includes/scripting_basics.inc b/testautomation/framework/required/includes/scripting_basics.inc
index 36f5ce44feec..d5377c4873bd 100644..100755
--- a/testautomation/framework/optional/includes/scripting_basics.inc
+++ b/testautomation/framework/required/includes/scripting_basics.inc
@@ -33,21 +33,23 @@
testcase tScripting
+ printlog( "Verify that the nodes <My Macros> and <OOo Macros> are present" )
const ORGANIZER_ITEMS = 2
+ const MAX_DIALOG_DELAY = 5
- hInitBackingMode()
+ hFileCloseAll()
ToolsMacrosOrganizeMacrosBeanShell
Kontext "ScriptOrganizer"
- if ( ScriptOrganizer.exists( 5 ) ) then
+ if ( ScriptOrganizer.exists( MAX_DIALOG_DELAY ) ) then
printlog( "Beanshell Script Organizer is present. Good" )
if ( ScriptTreeList.getItemCount() <> ORGANIZER_ITEMS ) then
warnlog( "The Treelist does not contain the expected number " & _
- "of items. Please verify that exactly three top-nodes exist" )
+ "of items. Please verify that exactly " & ORGANIZER_ITEMS & " top-nodes exist" )
endif
- ScriptOrganizer.cancel()
+ hCloseDialog( ScriptOrganizer, "cancel" )
else
warnlog( "Script Organizer for Beanshell is missing" )
endif
@@ -55,18 +57,17 @@ testcase tScripting
ToolsMacrosOrganizeMacrosJavaScript
Kontext "ScriptOrganizer"
- if ( ScriptOrganizer.exists( 5 ) ) then
+ if ( ScriptOrganizer.exists( MAX_DIALOG_DELAY ) ) then
printlog( "JavaScript Script Organizer is present. Good" )
if ( ScriptTreeList.getItemCount() <> ORGANIZER_ITEMS ) then
warnlog( "The Treelist does not contain the expected number " & _
- "of items. Please verify that exactly three top-nodes exist" )
+ "of items. Please verify that exactly " & ORGANIZER_ITEMS & " top-nodes exist" )
endif
- ScriptOrganizer.cancel()
+ hCloseDialog( ScriptOrganizer, "cancel" )
else
warnlog( "Script Organizer for JavaScript is missing" )
endif
-
endcase
diff --git a/testautomation/framework/required/includes/standard_toolbar_4.inc b/testautomation/framework/required/includes/standard_toolbar_4.inc
index d853e98d0b03..3f393ff3291a 100644..100755
--- a/testautomation/framework/required/includes/standard_toolbar_4.inc
+++ b/testautomation/framework/required/includes/standard_toolbar_4.inc
@@ -34,24 +34,32 @@
testcase tStandardBar_4
printlog( "Invisible items on the standardbar" )
-
- dim brc as boolean
-
+
+ printlog( "Reset standardbar to defaults" )
hResetStandardBar()
-
+
+ gApplication = "WRITER"
+ printlog( "Open one single Writer document" )
hInitSingleDoc()
+
+ kontext "DocumentWriter"
DocumentWriter.maximize() ' Needed to avoid toolbar clipping on resolutions < 1024x768 or small windows.
+
+ printlog( "Check item count on toolbar" )
hStandardbarItemGetCount()
-
+
+ printlog( "Load URL" )
hStandardbarLoadUrl()
-
+
+ printlog( "<NEW> dialog" )
hStandardbarNewDialog()
-
+
+ printlog( "<Save As>" )
hStandardbarSaveAs()
-
- brc = hInitBackingMode()
-
+ printlog( "Close all open documents" )
+ hFileCloseAll()
+
endcase
diff --git a/testautomation/framework/required/includes/standard_toolbar_6.inc b/testautomation/framework/required/includes/standard_toolbar_6.inc
index a72d8df3a36f..c3ff6be6e849 100644..100755
--- a/testautomation/framework/required/includes/standard_toolbar_6.inc
+++ b/testautomation/framework/required/includes/standard_toolbar_6.inc
@@ -116,10 +116,12 @@ testcase tStandardBar_6
kontext "documentwriter"
DocumentWriter.TypeKeys( "Hallo" )
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
hDestroyDocument()
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
hDestroyDocument()
printlog " - Math"
diff --git a/testautomation/framework/required/includes/tools_customize.inc b/testautomation/framework/required/includes/tools_customize.inc
index 0db4af9fc487..6bf31e391f99 100644..100755
--- a/testautomation/framework/required/includes/tools_customize.inc
+++ b/testautomation/framework/required/includes/tools_customize.inc
@@ -34,7 +34,6 @@
testcase tUpdtCustomize( cApp as string )
printlog( "Tools/Customize dialog" )
- const CLOSE_METHOD = 1 ' 1 = Cancel button
if ( hCreateDocument() ) then
if ( hToolsCustomizeOpen() ) then
@@ -42,7 +41,7 @@ testcase tUpdtCustomize( cApp as string )
hUpdtToolsCustomizeMenu()
hUpdtToolsCustomizeToolbars()
hUpdtToolsCustomizeEvents()
- hToolsCustomizeClose( CLOSE_METHOD )
+ hCloseDialog( TabCustomizeEvents, "cancel" )
else
warnlog( "Tools/Customize dialog did not open" )
endif
@@ -57,10 +56,19 @@ endcase
function hUpdtToolsCustomizeMenu()
-
-
const CFN = "hUpdtToolsCustomizeMenu::"
+
+ const MENUITEM_MOVE = 1
+ const MENUITEM_ADDSUBMENU = 1
+ const MENUITEM_RENAME = 2
+ const MENUITEM_DELETE = 3
+ const MENUITEM_MODIFY = 2
+ const MENUITEM_MODIFY_LARGE_MENU = 4
+
+ const APPLICATION_ONLY = 1
+ const APPLICATION_AND_DOCUMENT = 2
const ITEMNAME = "tUpdtCustomize"
+
dim brc as boolean
dim iItems as integer
@@ -71,7 +79,7 @@ function hUpdtToolsCustomizeMenu()
printlog( "" )
printlog( "Menu" )
- brc = hToolsCustomizeSelectTab( "Menu" )
+ hToolsCustomizeSelectTab( "Menu" )
call DialogTest( TabCustomizeMenu )
printlog( CFN & "Click New..." )
@@ -79,48 +87,56 @@ function hUpdtToolsCustomizeMenu()
BtnNew.click()
Kontext "MenuOrganiser"
- printlog( CFN & "MenuOrganiser" )
- call DialogTest( MenuOrganiser )
-
- printlog( CFN & "Down..." )
- ButtonDown.click()
-
- printlog( CFN & "Up..." )
- ButtonUp.click()
-
- printlog( CFN & "Name the new menu" )
- MenuName.setText( "tUpdtCustomize" )
-
- 'qaerrorlog( "#i60609# Undeclared listbox in menu organiser" )
- printlog( "TODO: Access the listbox in menuorganizer" )
-
- printlog( CFN & "Close the menu with ok" )
- MenuOrganiser.ok()
+ if ( MenuOrganiser.exists( 2 ) ) then
+ printlog( CFN & "MenuOrganiser" )
+ call DialogTest( MenuOrganiser )
+
+ printlog( CFN & "Down..." )
+ ButtonDown.click()
+
+ printlog( CFN & "Up..." )
+ ButtonUp.click()
+
+ printlog( CFN & "Name the new menu" )
+ MenuName.setText( "tUpdtCustomize" )
+
+ 'qaerrorlog( "#i60609# Undeclared listbox in menu organiser" )
+ printlog( "TODO: Access the listbox in menuorganizer" )
+
+ printlog( CFN & "Close the menu with ok" )
+ hCloseDialog( MenuOrganiser, "ok" )
+ else
+ warnlog( "Dialog <MenuOrganiser> did not open" )
+ endif
printlog( CFN & "Click the menu listbutton" )
kontext "TabCustomizeMenu"
hOpenMenuButton( MenuBtn ) ' MenuBtn.OpenMenu()
printlog( CFN & "Select Move..." )
- hMenuSelectNr( 1 )
+ hMenuSelectNr( MENUITEM_MOVE )
kontext "MenuOrganiser"
- printlog( CFN & "Click UP" )
- ButtonUp.click()
-
- kontext "MenuOrganiser"
- printlog( CFN & "Click DOWN" )
- ButtonDown.click()
+ if ( MenuOrganiser.exists( 2 ) ) then
+ printlog( CFN & "Click UP" )
+ ButtonUp.click()
- printlog( CFN & "Cancel the dialog" )
- MenuOrganiser.cancel()
+ kontext "MenuOrganiser"
+ printlog( CFN & "Click DOWN" )
+ ButtonDown.click()
+
+ printlog( CFN & "Cancel the dialog" )
+ hCloseDialog( MenuOrganiser, "cancel" )
+ else
+ warnlog( "Dialog <MenuOrganizer> did not open" )
+ endif
printlog( CFN & "Click the menu listbutton" )
kontext "TabCustomizeMenu"
hOpenMenuButton( MenuBtn ) ' MenuBtn.OpenMenu()
printlog( CFN & "Select Rename..." )
- hMenuSelectNr( 2 )
+ hMenuSelectNr( MENUITEM_RENAME )
printlog( CFN & "Cancel the renaming-dialog" )
kontext "RenameMenu"
@@ -131,7 +147,7 @@ function hUpdtToolsCustomizeMenu()
hOpenMenuButton( MenuBtn ) ' MenuBtn.OpenMenu()
printlog( CFN & "Select Delete" )
- hMenuSelectNr( 3 )
+ hMenuSelectNr( MENUITEM_DELETE )
kontext "TabCustomizeMenu"
hUpdtToolsCustomizeScriptSelector( 3 )
@@ -139,12 +155,10 @@ function hUpdtToolsCustomizeMenu()
printlog( CFN & "Check itemcount in SaveIn List" )
kontext "TabCustomizeMenu"
select case gApplication
- case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( 1 )
- case else : brc = hToolsCustomizeTestSaveIn( 2 )
+ case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( APPLICATION_ONLY )
+ case else : brc = hToolsCustomizeTestSaveIn( APPLICATION_AND_DOCUMENT )
end select
- if ( not brc ) then
- warnlog( "Incorrect itemcount in listbox, see above" )
- endif
+ if ( not brc ) then warnlog( "Incorrect itemcount in listbox, see above" )
printlog( CFN & "Down..." )
BtnDown.click()
@@ -154,8 +168,8 @@ function hUpdtToolsCustomizeMenu()
printlog( CFN & "Click the Modify-Button and select item 1 (Add submenu)" )
kontext "TabCustomizeMenu"
- brc = hClickCommandButton( 1 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( MENUITEM_ADDSUBMENU ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -182,8 +196,8 @@ function hUpdtToolsCustomizeMenu()
printlog( CFN & "Click the Modify-Button and select to rename the item" )
kontext "TabCustomizeMenu"
- brc = hClickCommandButton( 3 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( 3 ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -202,16 +216,16 @@ function hUpdtToolsCustomizeMenu()
printlog( CFN & "Click the Modify-Button and delete the current item" )
kontext "TabCustomizeMenu"
- brc = hClickCommandButton( 4 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( MENUITEM_MODIFY_LARGE_MENU ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
printlog( CFN & "Click the Modify-Button and create a new group" )
kontext "TabCustomizeMenu"
- brc = hClickCommandButton( 2 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( MENUITEM_MODIFY ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -219,8 +233,8 @@ function hUpdtToolsCustomizeMenu()
' Note: The current index for the delete-function is at pos 2.
printlog( CFN & "Click the Modify-Button and delete the new group" )
kontext "TabCustomizeMenu"
- brc = hClickCommandButton( 2 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( MENUITEM_MODIFY ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -231,13 +245,18 @@ end function
function hUpdtToolsCustomizeToolbars()
+ const CFN = "hUpdtToolsCustomizeToolbars::"
+ const DOCUMENT_ONLY = 1
+ const APPLICATION_AND_DOCUMENT = 2
+ const MENUITEM_RENAME = 1
+ const MENUITEM_DELETE = 2
+ const MENUITEM_MODIFY = 4
+ const DIALOG_DELAY = 3
- const CFN = "hUpdtToolsCustomizeToolbars::"
dim brc as boolean
-
dim iCurrentItem as integer
printlog( "" )
@@ -251,23 +270,22 @@ function hUpdtToolsCustomizeToolbars()
BtnNew.click()
kontext "NewToolbar"
- if ( NewToolbar.exists( 2 ) ) then
+ if ( NewToolbar.exists( DIALOG_DELAY ) ) then
printlog( CFN & "NewToolbar" )
call DialogTest( NewToolbar )
select case gApplication
- case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( 1 )
- case else : brc = hToolsCustomizeTestSaveIn( 2 )
+ case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( DOCUMENT_ONLY )
+ case else : brc = hToolsCustomizeTestSaveIn( APPLICATION_AND_DOCUMENT )
end select
- if ( not brc ) then
- warnlog( "Incorrect itemcount in listbox, see above" )
- endif
+
+ if ( not brc ) then warnlog( "Incorrect itemcount in listbox, see above" )
printlog( CFN & "Name the new toolbar for further usage" )
ToolbarName.setText( "tUpdtCustomize" )
printlog( CFN & "Close NewToolbar dialog with OK" )
- NewToolbar.ok()
+ hCloseDialog( NewToolbar, "ok" )
else
warnlog( CFN & "Could not access New Toolbar dialog" )
endif
@@ -277,13 +295,13 @@ function hUpdtToolsCustomizeToolbars()
hOpenMenuButton( MenuBtn ) ' MenuBtn.OpenMenu()
printlog( "Select rename" )
- hMenuSelectNr( 1 )
+ hMenuSelectNr( MENUITEM_RENAME )
printlog( CFN & "Cancel the dialog" )
kontext "RenameToolbar"
- if ( RenameToolbar.exists( 2 ) ) then
+ if ( RenameToolbar.exists( DIALOG_DELAY ) ) then
call dialogtest( RenameToolbar )
- RenameToolbar.Cancel()
+ hCloseDialog( RenameToolbar, "Cancel" )
else
warnlog( CFN & "Could not access Toolbar renaming dialog" )
endif
@@ -293,19 +311,18 @@ function hUpdtToolsCustomizeToolbars()
hOpenMenuButton( MenuBtn ) ' MenuBtn.OpenMenu()
printlog( "Select delete" )
- hMenuSelectNr( 2 )
+ hMenuSelectNr( MENUITEM_DELETE )
kontext "TabCustomizeToolbars"
hUpdtToolsCustomizeScriptSelector( 2 )
kontext "TabCustomizeToolbars"
select case gApplication
- case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( 1 )
- case else : brc = hToolsCustomizeTestSaveIn( 2 )
+ case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( DOCUMENT_ONLY )
+ case else : brc = hToolsCustomizeTestSaveIn( APPLICATION_AND_DOCUMENT )
end select
- if ( not brc ) then
- warnlog( "Incorrect itemcount in listbox, see above" )
- endif
+
+ if ( not brc ) then warnlog( "Incorrect itemcount in listbox, see above" )
printlog( CFN & "Down..." )
if ( BtnDown.isEnabled() ) then
@@ -326,7 +343,7 @@ function hUpdtToolsCustomizeToolbars()
AddCommands.click()
kontext "ScriptSelector"
- if ( ScriptSelector.exists( 5 ) ) then
+ if ( ScriptSelector.exists( DIALOG_DELAY ) ) then
call dialogtest( ScriptSelector )
@@ -339,14 +356,11 @@ function hUpdtToolsCustomizeToolbars()
printlog( CFN & "Add the default item" )
try
kontext "ScriptSelector"
- ScriptSelector.ok()
+ hCloseDialog( ScriptSelector, "ok" )
catch
qaerrorlog( "#i79207# Could not access ok button on ScriptSelector" )
kontext "ScriptSelector"
- if ( ScriptSelector.exists( 2 ) ) then
- printlog( "Scriptselector is open" )
- endif
-
+ if ( ScriptSelector.exists( DIALOG_DELAY ) ) then printlog( "Scriptselector is open" )
endcatch
else
@@ -354,47 +368,41 @@ function hUpdtToolsCustomizeToolbars()
for iCurrentItem = 1 to 5
printlog( CFN & "LibraryTreeList: Moving down..." )
LibraryTreeList.typeKeys( "<DOWN>" )
- if ( ScriptSelector.isEnabled() ) then
- exit for
- endif
+ if ( ScriptSelector.isEnabled() ) then exit for
next iCurrentItem
endif
' Note: The Customize dialog in the background is updated immediately. This
' means that the cancel-button is active but blocked for a moment
- WaitSlot( 2000 )
+ 'WaitSlot( 2000 )
printlog( CFN & "Close the Script Selector, back to ToolsCustomize dialog" )
- ScriptSelector.cancel()
-
- ' make sure the dialog is really closed. At times it just refuses to do so??
- if ( ScriptSelector.exists( 1 ) ) then
- ScriptSelector.close()
- endif
+ hCloseDialog( ScriptSelector, "cancel" )
kontext "TabCustomizeToolbars"
printlog( CFN & "Click the Modify-button" )
- brc = hClickCommandButton( 1 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( 1 ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
printlog( CFN & "Rename the item" )
+ UseBindings
kontext "CustomizeToolbarsRename"
- if ( CustomizeToolbarsRename.exists( 2 ) ) then
+ if ( CustomizeToolbarsRename.exists( DIALOG_DELAY ) ) then
call dialogtest( CustomizeToolbarsRename )
EingabeFeld.setText( "Renamed item" )
printlog( CFN & "Close the dialog" )
- CustomizeToolbarsRename.ok()
+ hCloseDialog( CustomizeToolbarsRename, "ok" )
else
warnlog( CFN & "CustomizeToolbarsRename could not be accessed" )
endif
kontext "TabCustomizeToolbars"
- brc = hClickCommandButton( 2 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( 2 ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -405,8 +413,8 @@ function hUpdtToolsCustomizeToolbars()
printlog( "******************** 1 ********************" )
hDeselectSeparator()
printlog( "******************** 2 ********************" )
- brc = hClickCommandButton( 3 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( 3 ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -414,8 +422,8 @@ function hUpdtToolsCustomizeToolbars()
kontext "TabCustomizeToolbars"
waitslot
printlog( CFN & "Click the Modify-button" )
- brc = hClickCommandButton( 4 )
- if ( not brc ) then
+
+if ( not hClickCommandButton( MENUITEM_MODIFY ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -423,8 +431,8 @@ function hUpdtToolsCustomizeToolbars()
kontext "TabCustomizeToolbars"
WaitSlot
printlog( CFN & "Click the Modify-button" )
- brc = hClickCommandButton( 1 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( 1 ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -435,26 +443,26 @@ function hUpdtToolsCustomizeToolbars()
printlog( "******************** 3 ********************" )
hDeselectSeparator()
printlog( "******************** 4 ********************" )
- brc = hClickCommandButton( 5 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( 5 ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
printlog( CFN & "On the Change Icon dialog: Click to import an icon" )
kontext "ChangeIcon"
- if ( ChangeIcon.exists( 2 ) ) then
+ if ( ChangeIcon.exists( DIALOG_DELAY ) ) then
call dialogtest( ChangeIcon )
import.click()
printlog( CFN & "Cancel the FileOpen-dialog" )
kontext "OeffnenDlg"
call dialogtest( OeffnenDlg )
- OeffnenDlg.cancel()
+ hCloseDialog( OeffnenDlg, "cancel" )
- printlog( CFN & "Cancel the Change Icon dialog" )
+ printlog( CFN & "Close the Change Icon dialog with <ok>" )
kontext "ChangeIcon"
- ChangeIcon.ok()
+ hCloseDialog( ChangeIcon, "ok" )
else
warnlog( CFN & "Could not access Change Icon dialog" )
endif
@@ -462,8 +470,8 @@ function hUpdtToolsCustomizeToolbars()
kontext "TabCustomizeToolbars"
waitslot
printlog( CFN & "Click the Modify-button" )
- brc = hClickCommandButton( 3 )
- if ( not brc ) then
+
+ if ( not hClickCommandButton( 3 ) ) then
warnlog( CFN & "Something went wrong when accessing the command button" )
exit function
endif
@@ -475,59 +483,68 @@ end function
function hUpdtToolsCustomizeEvents()
-
-
-
-
const CFN = "hUpdtToolsCustomizeEvents::"
+ const APPLICATION_ONLY = 1
+ const APPLICATION_AND_DOCUMENT = 2
+ const TAB_EVENTS = 1
+
dim brc as boolean
printlog( "" )
printlog( "Events" )
- brc = hToolsCustomizeSelectTab( "events" )
- call DialogTest( TabCustomizeEvents )
-
- hUpdtToolsCustomizeScriptSelector( 1 )
-
- kontext "TabCustomizeEvents"
- select case gApplication
- case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( 1 )
- case else : brc = hToolsCustomizeTestSaveIn( 2 )
- end select
- if ( not brc ) then
- warnlog( "Incorrect itemcount in listbox, see above" )
- endif
+ hToolsCustomizeSelectTab( "events" )
+ if ( TabCustomizeEvents.exists() ) then
+ if ( TabCustomizeEvents.isVisible() ) then
+ call DialogTest( TabCustomizeEvents )
-end function
+ hUpdtToolsCustomizeScriptSelector( TAB_EVENTS )
-'*******************************************************************************
+ kontext "TabCustomizeEvents"
+ select case gApplication
+ case "BACKGROUND" : brc = hToolsCustomizeTestSaveIn( APPLICATION_ONLY )
+ case else : brc = hToolsCustomizeTestSaveIn( APPLICATION_AND_DOCUMENT )
+ end select
-function hUpdtToolsCustomizeKeyboard() as boolean
+ if ( not brc ) then warnlog( "Incorrect itemcount in listbox, see above" )
+ else
+ warnlog( "<TabCustomizeEvents> is not visible" )
+ endif
+ else
+ warnlog( "<TabCustomizeEvents> did not open" )
+ endif
+end function
+'*******************************************************************************
+function hUpdtToolsCustomizeKeyboard() as boolean
const CFN = "hUpdtToolsCustomizeKeyboard::"
- dim brc as boolean
+ const FIRST_CHANGEABLE_ITEM = 2
printlog( "" )
printlog( "Keyboard" )
-
- brc = hToolsCustomizeSelectTab( "keyboard" )
- if ( not brc and gApplication = "BACKGROUND" ) then
- qaerrorlog( "#i61765# TabTastatur is missing when called from Backing Window" )
- exit function
+
+ if ( gApplication = "BACKGROUND" ) then
+ if ( not hToolsCustomizeSelectTab( "keyboard" ) ) then
+ qaerrorlog( "#i61765# TabTastatur is missing when called from Backing Window" )
+ hUpdtToolsCustomizeKeyboard() = false
+ exit function
+ endif
endif
-
+
+ hToolsCustomizeSelectTab( "keyboard" )
+
+ kontext "TabTastatur"
call DialogTest( TabTastatur )
' no verification of functionality, this is an update test!
+ kontext "TabTastatur"
StarOffice.check()
- hSelectNode( Tastatur , 2 )
+ hSelectNode( Tastatur , FIRST_CHANGEABLE_ITEM )
hSelectTopNode( bereich )
- waitslot
' Workaround: It might still happen that the currently selected accelerator
' is "fixed" so we need to find another one that can be modified.
@@ -537,12 +554,8 @@ function hUpdtToolsCustomizeKeyboard() as boolean
loop
Aendern.click()
-
-
Zuruecksetzen.click()
-
- hSelectNode( Tastatur , 2 )
- waitslot
+ hSelectNode( Tastatur , FIRST_CHANGEABLE_ITEM )
' Workaround: It might still happen that the currently selected accelerator
' is "fixed" so we need to find another one that can be modified.
@@ -552,64 +565,65 @@ function hUpdtToolsCustomizeKeyboard() as boolean
loop
Aendern.click()
-
Loeschen.click()
-
Speichern.click()
kontext "SpeichernDlg"
- SpeichernDlg.cancel()
+ hCloseDialog( SpeichernDlg, "cancel" )
kontext "TabTastatur"
Laden.click()
kontext "OeffnenDlg"
- OeffnenDlg.cancel()
-
+ hCloseDialog( OeffnenDlg, "cancel" )
end function
'*******************************************************************************
-function hUpdtToolsCustomizeScriptSelector( iBtn as integer ) as boolean
-
-
-
-
+function hUpdtToolsCustomizeScriptSelector( iPageButton as integer ) as boolean
const CFN = "hUpdtToolsCustomizeScriptSelector::"
- dim brc as boolean
- brc = true
-
- select case iBtn
- case 1 : kontext "TabCustomizeEvents"
- printlog( CFN & "Assign Macro... (1)" )
- AssignMacro.click()
- case 2 : kontext "TabCustomizeToolbars"
- printlog( CFN & "Add... (2)" )
- AddCommands.click()
- case 3 : kontext "TabCustomizeMenu"
- printlog( CFN & "Add... (3)" )
- AddCommands.click()
+ dim brc as boolean : brc = true
+ const TAB_EVENTS = 1
+ const TAB_TOOLBARS = 2
+ const TAB_MENU = 3
+ const DIALOG_DELAY = 2
+
+ select case iPageButton
+ case TAB_EVENTS
+ kontext "TabCustomizeEvents"
+ printlog( CFN & "Assign Macro... (1)" )
+ AssignMacro.click()
+ case TAB_TOOLBARS
+ kontext "TabCustomizeToolbars"
+ printlog( CFN & "Add... (2)" )
+ AddCommands.click()
+ case TAB_MENU
+ kontext "TabCustomizeMenu"
+ printlog( CFN & "Add... (3)" )
+ AddCommands.click()
case else
- warnlog( CFN & "Invalid function parameter" )
- brc = false
+ warnlog( CFN & "Invalid function parameter" )
+ hUpdtToolsCustomizeScriptSelector() = false
+ exit function
end select
- if ( brc ) then
- kontext "ScriptSelector"
+ kontext "ScriptSelector"
+ if ( ScriptSelector.exists( DIALOG_DELAY ) ) then
call DialogTest( ScriptSelector )
-
+
kontext "ScriptSelector"
- ScriptSelector.cancel()
-
+ hCloseDialog( ScriptSelector, "cancel" )
+ else
+ warnlog( CFN & "Dialog <ScriptSelector> did not open" )
endif
- select case iBtn
- case 1 : kontext "TabCustomizeEvents"
- case 2 : kontext "TabCustomizeToolbars"
- case 3 : kontext "TabCustomizeMenu"
+ select case iPageButton
+ case TAB_EVENTS : kontext "TabCustomizeEvents"
+ case TAB_TOOLBARS : kontext "TabCustomizeToolbars"
+ case TAB_MENU : kontext "TabCustomizeMenu"
end select
hUpdtToolsCustomizeScriptSelector() = brc
@@ -619,9 +633,6 @@ end function
'*******************************************************************************
function hToolsCustomizeTestSaveIn( iItems as integer ) as boolean
-
-
-
const CFN = "hToolsCustomizeTestSaveIn::"
dim iPresentItems as integer
@@ -661,15 +672,18 @@ function hOpenMenuButton( oControl as object ) as integer
dim bUseSlowMethod as boolean : bUseSlowMethod = false
const CFN = "hOpenMenuButton: "
+ const RC_FAILURE = -1
+ const MAX_RETRIES = 3
+ const DEFAULT_DELAY = 1000
- hOpenMenuButton() = -1 ' this is the general failure returnvalue
+ hOpenMenuButton() = RC_FAILURE
- for iClick = 1 to 3
+ for iClick = 1 to MAX_RETRIES
if ( bUseSlowMethod ) then
- wait( 1000 )
+ wait( DEFAULT_DELAY )
oControl.OpenMenu()
- wait( 3000 )
+ wait( DEFAULT_DELAY * 3 )
else
oControl.click()
endif
diff --git a/testautomation/framework/required/includes/tools_options.inc b/testautomation/framework/required/includes/tools_options.inc
index 0b226db7e7b0..82d5ef6ae861 100644..100755
--- a/testautomation/framework/required/includes/tools_options.inc
+++ b/testautomation/framework/required/includes/tools_options.inc
@@ -59,24 +59,29 @@ testcase tUpdtOptionItems
ToolsOptions
kontext "ExtrasOptionenDlg"
-
- iAppItems = Optionsliste.getItemCount()
- Optionsliste.typeKeys( "<HOME>" )
- for iNodes = 1 to iAppItems
- Optionsliste.typeKeys( "-" )
- Optionsliste.typeKeys( "<DOWN>" )
- next iNodes
-
- iAppItems = Optionsliste.getItemCount()
- if ( iAppItems <> iAppCount( iDocType ) ) then
- warnlog( "#i68068# The number of top nodes in Tools/Options is incorrect." )
- printlog( "Found...: " & iAppItems )
- printlog( "Expected: " & iAppCount( iDocType ) )
+ if ( ExtrasOptionenDlg.exists( 2 ) ) then
+
+ iAppItems = Optionsliste.getItemCount()
+ Optionsliste.typeKeys( "<HOME>" )
+ for iNodes = 1 to iAppItems
+ Optionsliste.typeKeys( "-" )
+ Optionsliste.typeKeys( "<DOWN>" )
+ next iNodes
+
+ iAppItems = Optionsliste.getItemCount()
+ if ( iAppItems <> iAppCount( iDocType ) ) then
+ warnlog( "#i68068# The number of top nodes in Tools/Options is incorrect." )
+ printlog( "Found...: " & iAppItems )
+ printlog( "Expected: " & iAppCount( iDocType ) )
+ else
+ printlog( "The number of top nodes is correct." )
+ endif
+
+ hCloseDialog( ExtrasOptionenDlg, "Cancel" )
else
- printlog( "The number of top nodes is correct." )
+ warnlog( "Dialog <Tools/Options> did not open " )
endif
-
- ExtrasOptionenDlg.cancel()
+
hDestroyDocument()
next iDocType
diff --git a/testautomation/framework/required/includes/window_functions.inc b/testautomation/framework/required/includes/window_functions.inc
index 6efeb70b0b6f..779ab3c0a8aa 100755..100644
--- a/testautomation/framework/required/includes/window_functions.inc
+++ b/testautomation/framework/required/includes/window_functions.inc
@@ -40,17 +40,17 @@ testcase tWindowFunctions
goto endsub
endif
-
+
printlog( "Create initial document" )
gApplication = "WRITER"
hInitSingleDoc()
hInitWriteDocIdentifier( "F_updt_windowfuncs.bas" )
-
+
printlog( "New document" )
hNewDocument()
if ( getDocumentCount <> 2 ) then
warnlog( "Two open documents were expected, found " & getDocumentCount )
- endif
+ endif
kontext "DocumentWriter"
printlog( "Close document" )
@@ -64,7 +64,7 @@ testcase tWindowFunctions
hNewDocument()
if ( getDocumentCount <> 2) then
warnlog( "Two open documents were expected, found " & getDocumentCount )
- endif
+ endif
printlog( "Enter some text into the second writer document" )
kontext "DocumentWriter"
@@ -78,8 +78,8 @@ testcase tWindowFunctions
else
warnlog( "No warning that data will be lost on close of this document" )
endif
-
- kontext "DocumentWriter"
+
+ kontext "DocumentWriter"
if ( getDocumentCount = 2 ) then
printlog( "Two documents open. Good." )
else
@@ -89,21 +89,21 @@ testcase tWindowFunctions
kontext "DocumentWriter"
printlog( "Close the document" )
FileClose()
-
+
kontext "Active"
- if ( Active.exists() ) then
+ if ( Active.exists() ) then
printlog( "Do not save the document" )
Active.No()
else
warnlog( "Warning: No data loss warning" )
endif
-
+
kontext "DocumentWriter"
if ( getDocumentCount = 1 ) then
printlog( "One document open. Good." )
else
warnlog( "Incorrect document count. Expected one, found " & getDocumentCount )
- endif
+ endif
Kontext "DocumentWriter"
printlog( "Minimize window" )
@@ -132,7 +132,7 @@ testcase tWindowFunctions
printlog( "Maximize window" )
DocumentWriter.Maximize()
Wait( 2000 )
-
+
kontext "DocumentWriter"
if ( DocumentWriter.IsMax() ) then
printlog( "Window is maximized" )
@@ -149,177 +149,157 @@ endcase
sub sAllWindowTitle
printlog( "Window titles for the applications: " & gProductName )
-
+
printlog( "Writer" )
gApplication = "WRITER"
- call tCheckWindowTitle("swriter","Writer")
+ call tCheckWindowTitle( "swriter", "Writer" )
printlog( "Master Document" )
gApplication = "MASTERDOCUMENT"
- call tCheckWindowTitle("sglobal","Writer")
+ call tCheckWindowTitle( "sglobal", "Writer" )
printlog( "HTML" )
gApplication = "HTML"
- call tCheckWindowTitle("sweb","Writer/Web")
+ call tCheckWindowTitle( "sweb", "Writer/Web" )
printlog( "Spreadsheet" )
gApplication = "CALC"
- call tCheckWindowTitle("scalc","Calc")
+ call tCheckWindowTitle( "scalc", "Calc" )
printlog( "Presentation" )
gApplication = "IMPRESS"
- call tCheckWindowTitle("simpress","Impress")
+ call tCheckWindowTitle( "simpress", "Impress" )
printlog( "Drawing" )
gApplication = "DRAW"
- call tCheckWindowTitle("sdraw","Draw")
+ call tCheckWindowTitle( "sdraw", "Draw" )
printlog( "Formula" )
gApplication = "MATH"
- call tCheckWindowTitle("smath","Math")
+ call tCheckWindowTitle( "smath", "Math" )
- qaerrorlog( "Excluded BASE and BACKINGWINDOW" )
+ printlog( "BASIC IDE" )
+ gApplication = "WRITER"
+ call tCheckWindowTitle( "basic", "Basic" )
- 'gApplication = "DATABASE"
- 'call tCheckWindowTitle("DATABASE","Base")
+ printlog( "Database" )
+ gApplication = "DATABASE"
+ call tCheckWindowTitle( "database", "Base" )
- 'fileclose
- 'call tCheckWindowTitle("soffice","")
+ printlog( "Backing Window / StartCenter" )
+ gApplication = "BACKGROUND"
+ call tCheckWindowTitle( "soffice", "" )
end sub
'*******************************************************************************
-testcase tCheckWindowTitle(sApplication as string, sReference as string)
+testcase tCheckWindowTitle( sApplication as string, sReference as string )
printlog( "Update test for the office window titles" )
- '<u>Input</u>:
- '<ol>
- '+<li>Name of application (string), case sensitive. Valid options are:</li>
- '<ol>
- '+<li>&quot;swriter&quot;</li>
- '+<li>&quot;sglobal&quot;</li>
- '+<li>&quot;sweb&quot;</li>
- '+<li>&quot;scalc&quot;</li>
- '+<li>&quot;simpress&quot;</li>
- '+<li>&quot;sdraw&quot;</li>
- '+<li>&quot;smath&quot;</li>
- '+<li>&quot;insight&quot; * Currently disabled</li>
- '+<li>&quot;soffice&quot; * Currently disabled</li>
- '</ol>
- '+<li>Reference name (string), matches name of application</li>
- '<ol>
- '+<li>&quot;Writer&quot;</li>
- '+<li>&quot;Writer/Web&quot;</li>
- '+<li>&quot;Calc&quot;</li>
- '+<li>&quot;Impress&quot;</li>
- '+<li>&quot;Draw&quot;</li>
- '+<li>&quot;Math&quot;</li>
- '+<li>&quot;Base&quot; * Currently disabled</li>
- '+<li>&quot;&quot; * Currently disabled</li>
- '</ol>
- '</ol>
- '<u>Returns</u>:
- '<ol>
- '+<li>Nothing</li>
- '</ol>
- '<u>Description</u>:
- '<ul>
-
-
- dim sTemp as string
- dim saTemp() as string
- dim brc as boolean
- gApplication = gApplication
- printlog " - Application: " + sApplication + "; Title should be: " + sReference
-
- printlog( "Ensure that exactly one document is open" )
- hInitSingleDoc()
- printlog( "Open another document as specified by gApplication" )
+ const BASIC_MODULE = "tCheckWindowTitle"
+ const STRING_NOT_FOUND = 0
+ const STRING_LEFTMOST = 1
+
+ dim cWindowCaption as string
+
+ dim iProductnamePosition as integer
+ dim iApplicationPosition as integer
+
+ dim cProductNameString as string
+ dim cApplicationString as string
+
+ ' hGetWindowCaption modifies it's function parameter, so we pass a copy instead
+ ' This is a thing that justifies the use of a four letter word for sure.
+ dim sApplicationTemp as string : sApplicationTemp = sApplication
+
+ printlog( "Application: " & sApplication & "; Title should be: " & sReference )
+ printlog( "Open the work windows (documents)" )
+ hInitSingleDoc()
hCreateDocument()
printlog( "Verify that the correct window is open" )
select case sApplication
- case"swriter":
- case"sglobal":
- case"sweb":
- case"scalc":
- case"simpress":
- case"sdraw":
- case"smath":
- case"basic":
- ToolsMacroMacro
- kontext "makro"
- if Makro.exists(5) then
- MakroAus.typeKeys "<end>"
- if (Neu.isEnabled) then
- Neu.click
- kontext "basicide"
- if BasicIDE.exists(5) then
- printlog( "Basic IDE open. Good." )
- else
- warnlog( "Basic IDE not open. This is unexpected" )
- endif
- else
- warnlog( "New-button is unexpectedly disabled." )
- endif
- try
- kontext "neuesmodul"
- if NeuesModul.exists(5) then
- NeuesModul.OK
- else
- warnlog( "New module naming dialog is not open" )
- endif
- catch
- warnlog( "Accessing <New module> dialog failed" )
- endcatch
- else
- warnlog( "Couldn't open Tools->Macros->Organize Macros...->StarOffice Basic..." )
- endif
- case"chart":
- case"DATABASE":
- case"soffice":
- brc = hDestroyDocument()
+ case "swriter" :
+ case "sglobal" :
+ case "sweb" :
+ case "scalc" :
+ case "simpress":
+ case "sdraw" :
+ case "smath" :
+ case "basic" : hInitBasicIDE( BASIC_MODULE )
+ case "chart" :
+ case "database":
+ case "soffice" : hFileCloseAll()
end select
- printlog( "Retrieve the caption from the window" )
- sTemp = hGetWindowCaption(sApplication)
- printlog( "Caption is: " & sTemp )
-
- printlog( "Split up the string to isolate the desired part" )
- saTemp() = fSplitWindowTitle(sTemp)
- printlog "Filename/Untitled: '" & saTemp(0) & "'"
-
- printlog( "Compare the string to a reference" )
- if (ubound(saTemp()) > 0) then
- if (saTemp(1) <> sReference) then
- warnlog "Applicationname not as expected. Should be: '" & sReference & "', is: '" & saTemp(1) & "'"
+ ' Note: The Testtool connection string does not belong to the window caption
+ ' so we do not check for it here.
+ cWindowCaption = hGetWindowCaption( sApplicationTemp )
+ printlog( "Caption is: " & cWindowCaption )
+
+ ' This prevents accidential matches like "base" in a document name like "database8.odb"
+ ' And we have a - (minus) as delimiter between the document name and the product name
+ cProductnameString = " - " & gProductName & " "
+ cApplicationString = " " & sReference
+
+ ' Find out where in the caption the substrings are
+ iProductNamePosition = instr( cWindowCaption, cProductnameString )
+ iApplicationPosition = instr( cWindowCaption, cApplicationString )
+
+ ' Verify that the productname is contained within the string
+ if ( iProductNamePosition = STRING_NOT_FOUND ) then
+ warnlog( "The product name is missing" )
+ endif
+
+ ' Verify that the application name (e.g. "Writer") is contained in the string
+ ' The StartCenter should not have any application name
+ if ( sApplication = "soffice" ) then
+ if ( iApplicationPosition > STRING_NOT_FOUND ) then
+ printlog( "The StartCenter should not have an application name" )
endif
- printlog "Productname: '" + saTemp(2) + "'"
else
- warnlog "#i36173# - Applicationname not as expected. Should be: '" & sReference & "', is: '" & saTemp(1) + "'"
+ if ( iApplicationPosition = STRING_NOT_FOUND ) then
+ warnlog( "The application name is missing" )
+ endif
+ endif
+
+ if ( sApplication = "soffice" ) then
+ printlog( "Backing window should exclusively show the product name" )
+ else
+ ' If one of Productname or application is leftmost in the string, we have a
+ ' missing document identifier. This can be different things - the filename,
+ ' the module name (BASIC) etc.
+ if ( ( iApplicationPosition = STRING_LEFTMOST ) OR _
+ iProductnamePosition = STRING_LEFTMOST ) then
+ warnlog( "Current document identifier missing (like e.g. <Unknown 1>)" )
+ endif
+
+ ' Verify that the order is correct: Product name first, the application
+ if ( iProductNamePosition >= iApplicationPosition ) then
+ warnlog( "The order of the strings is incorrect" )
+ printlog( "Expected: <Product Name> <Application>" )
+ endif
endif
printlog( "Cleanup after test" )
select case sApplication
- case"swriter":
- case"sglobal":
- case"sweb":
- case"scalc":
- case"simpress":
- case"sdraw":
- case"smath":
- case"basic":
- brc = hDestroyDocument()
- case"chart":
- case"DATABASE":
- case"soffice":
- hCreateDocument()
- hCreateDocument()
+ case "swriter" :
+ case "sglobal" :
+ case "sweb" :
+ case "scalc" :
+ case "simpress":
+ case "sdraw" :
+ case "smath" :
+ case "basic" : hDestroyDocument()
+ case "chart" :
+ case "database":
+ case "soffice" : hCreateDocument()
end select
printlog( "Close all open documents" )
hFileCloseAll()
+
endcase
diff --git a/testautomation/framework/required/includes/wizard_agenda.inc b/testautomation/framework/required/includes/wizard_agenda.inc
index b1b099e07c88..d320234fd40b 100644..100755
--- a/testautomation/framework/required/includes/wizard_agenda.inc
+++ b/testautomation/framework/required/includes/wizard_agenda.inc
@@ -56,23 +56,23 @@ testcase tUpdtWizardAgenda
Kontext "AutopilotAgenda"
call DialogTest( AutopilotAgenda, 1 )
PageDesignList.select( 3 )
- hClickNextButton()
+ hClickButton( NextButton )
Kontext "AutopilotAgenda"
call DialogTest( AutopilotAgenda, 2 )
- hClickNextButton()
+ hClickButton( NextButton )
Kontext "AutopilotAgenda"
call DialogTest( AutopilotAgenda, 3 )
- hClickNextButton()
+ hClickButton( NextButton )
Kontext "AutopilotAgenda"
call DialogTest( AutopilotAgenda, 4 )
- hClickNextButton()
+ hClickButton( NextButton )
Kontext "AutopilotAgenda"
call DialogTest( AutopilotAgenda, 5 )
- hClickNextButton()
+ hClickButton( NextButton )
Kontext "AutopilotAgenda"
call DialogTest( AutopilotAgenda, 6 )
@@ -91,15 +91,9 @@ testcase tUpdtWizardAgenda
endif
brc = hDestroyDocument()
- if ( not brc ) then
- qaerrorlog( "#i59233# The wizard does not display the new template" )
- endif
-
- do while( getDocumentCount() > 0 )
- call hCloseDocument()
- loop
-
-
+ if ( not brc ) then qaerrorlog( "#i59233# The wizard does not display the new template" )
+
+ hFileCloseAll()
hDeleteFile( cTemplatePath )
else
warnlog ( "The Agenda wizard did not open/timelimit exceeded" )
diff --git a/testautomation/framework/required/includes/wizard_fax.inc b/testautomation/framework/required/includes/wizard_fax.inc
index 433a9bb7a593..b970d8754c5d 100644..100755
--- a/testautomation/framework/required/includes/wizard_fax.inc
+++ b/testautomation/framework/required/includes/wizard_fax.inc
@@ -53,19 +53,19 @@ testcase tUpdtWizardFax
kontext "AutopilotFax"
call DialogTest( AutopilotFax, 1 )
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotFax"
call DialogTest( AutopilotFax, 2 )
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotFax"
call DialogTest( AutopilotFax, 3 )
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotFax"
call DialogTest( AutopilotFax, 4 )
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotFax"
call DialogTest( AutopilotFax, 5 )
@@ -81,9 +81,7 @@ testcase tUpdtWizardFax
hWaitForObject( Speichern, 5000 )
brc = hDestroyDocument()
- if ( not brc ) then
- qaerrorlog( "#i59233# The wizard does not display the new template" )
- endif
+ if ( not brc ) then qaerrorlog( "#i59233# The wizard does not display the new template" )
printlog( "Delete the user-template: " & cTemplatePath )
hDeleteFile( cTemplatePath )
@@ -92,9 +90,7 @@ testcase tUpdtWizardFax
warnlog( "Fax wizard did not open/exceeded timeout" )
endif
- while( getDocumentCount() > 0 )
- hDestroyDocument()
- wend
+ hFileCloseAll()
endcase
diff --git a/testautomation/framework/required/includes/wizard_letter.inc b/testautomation/framework/required/includes/wizard_letter.inc
index 19afe2a96f90..267efcefd18a 100644..100755
--- a/testautomation/framework/required/includes/wizard_letter.inc
+++ b/testautomation/framework/required/includes/wizard_letter.inc
@@ -89,7 +89,7 @@ testcase tUpdtWizardLetter
kontext "AutopilotLetter"
LetterHead.Check()
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotLetter"
call DialogTest( AutopilotLetter, 2 )
@@ -123,7 +123,7 @@ testcase tUpdtWizardLetter
warnlog( "FooterHeight should not be enabled in this configuration" )
endif
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotLetter"
call DialogTest( AutopilotLetter, 3 )
@@ -136,11 +136,11 @@ testcase tUpdtWizardLetter
printlog( " * change Complimentary Close to second entry" )
ListGreetings.select( 2 )
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotLetter"
call DialogTest( AutopilotLetter, 4 )
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotLetter"
call DialogTest( AutopilotLetter, 5 )
@@ -150,7 +150,7 @@ testcase tUpdtWizardLetter
printlog( " * check Include only on second ..." )
IncludeFromPage2.check()
- hClickNextButton()
+ hClickButton( NextButton )
kontext "AutopilotLetter"
call DialogTest( AutopilotLetter, 6 )
@@ -178,9 +178,7 @@ testcase tUpdtWizardLetter
endif
brc = hDestroyDocument()
- if ( not brc ) then
- qaerrorlog( "#i59233# The wizard does not display the new template" )
- endif
+ if ( not brc ) then qaerrorlog( "#i59233# The wizard does not display the new template" )
else
warnlog( "Autopilot Letter not open/exceeded timeout" )
endif
@@ -192,9 +190,7 @@ testcase tUpdtWizardLetter
printlog( "Unexpectedly deleted user template(s), please check")
endif
- do while( getDocumentCount() > 0 )
- call hCloseDocument()
- loop
+ hFileCloseAll()
endcase
diff --git a/testautomation/framework/required/includes/wizard_mailmerge.inc b/testautomation/framework/required/includes/wizard_mailmerge.inc
index d6dbe9ae826c..45b8947eec38 100644..100755
--- a/testautomation/framework/required/includes/wizard_mailmerge.inc
+++ b/testautomation/framework/required/includes/wizard_mailmerge.inc
@@ -60,36 +60,36 @@ testcase tUpdtWizardMailMerge
endif
Kontext "MailMergeWizard"
- brc = hClickNextButton()
+ hClickButton( NextButton )
hUpdtMMWPage2()
Kontext "MailMergeWizard"
- brc = hClickNextButton()
- hUpdtMMWpage3()
+ hClickButton( NextButton )
+ hUpdtMMWpage3()
Kontext "MailMergeWizard"
- brc = hClickNextButton()
+ hClickButton( NextButton )
hUpdtMMWPage4()
Kontext "MailMergeWizard"
- brc = hClickNextButton()
+ hClickButton( NextButton )
hUpdtMMWPage5()
Kontext "MailMergeWizard"
- brc = hClickNextButton()
+ hClickButton( NextButton )
hUpdtMMWPage6()
Kontext "MailMergeWizard"
- brc = hClickNextButton()
+ hClickButton( NextButton )
hUpdtMMWPage7()
Kontext "MailMergeWizard"
- brc = hClickNextButton()
+ hClickNextButton()
hUpdtMMWPage8()
printlog( "close the wizard" )
Kontext "MailMergeWizard"
- MailMergeWizard.cancel()
+ hCloseDialog( MailMergeWizard, "cancel" )
hRemoveDatabaseConnections()
hCloseDocument()
diff --git a/testautomation/framework/required/includes/wizard_presentation.inc b/testautomation/framework/required/includes/wizard_presentation.inc
index 2c06a00e1971..59544e0fb48e 100644..100755
--- a/testautomation/framework/required/includes/wizard_presentation.inc
+++ b/testautomation/framework/required/includes/wizard_presentation.inc
@@ -47,14 +47,12 @@ testcase tUpdtWizardPresentation
printlog( "Page 1" )
call Dialogtest( AutopilotPraesentation1 )
-
- hClickNextButton()
+ hClickButton( NextButton )
printlog( "Page 2" )
kontext "AutopilotPraesentation2"
call DialogTest( AutopilotPraesentation2 )
-
- hClickNextButton()
+ hClickButton( NextButton )
printlog( "Page 3" )
kontext "AutopilotPraesentation3"
@@ -65,9 +63,7 @@ testcase tUpdtWizardPresentation
warnlog( "Presentation wizard not open/exceeded timeout" )
endif
- do while( getDocumentCount() > 0 )
- call hCloseDocument()
- loop
+ hFileCloseAll()
gApplication = "WRITER"
diff --git a/testautomation/framework/required/input/10erTest_680.sxw b/testautomation/framework/required/input/10erTest_680.sxw
index e4b0259e88ac..afae9513c6fe 100755
--- a/testautomation/framework/required/input/10erTest_680.sxw
+++ b/testautomation/framework/required/input/10erTest_680.sxw
Binary files differ
diff --git a/testautomation/framework/required/input/basic_ide/Dialog5_ar_DZ.properties b/testautomation/framework/required/input/basic_ide/Dialog5_ar_DZ.properties
index 66ee58c3205e..cddc30ef3020 100644
--- a/testautomation/framework/required/input/basic_ide/Dialog5_ar_DZ.properties
+++ b/testautomation/framework/required/input/basic_ide/Dialog5_ar_DZ.properties
@@ -1,4 +1,5 @@
# Dialog5 strings
+# x-no-translate
28.Dialog5.HelpText=
29.Dialog5.Title=
30.Dialog5.CommandButton1.HelpText=
diff --git a/testautomation/framework/required/input/basic_ide/Dialog5_ca_ES.properties b/testautomation/framework/required/input/basic_ide/Dialog5_ca_ES.properties
index 5dcdf5d842e9..5682ffa64fe6 100644
--- a/testautomation/framework/required/input/basic_ide/Dialog5_ca_ES.properties
+++ b/testautomation/framework/required/input/basic_ide/Dialog5_ca_ES.properties
@@ -1,4 +1,5 @@
# Dialog5 strings
+# x-no-translate
28.Dialog5.HelpText=
29.Dialog5.Title=
30.Dialog5.CommandButton1.HelpText=
diff --git a/testautomation/framework/required/input/basic_ide/Dialog5_de_DE.properties b/testautomation/framework/required/input/basic_ide/Dialog5_de_DE.properties
index ef060d3b270e..b11f0b217236 100644
--- a/testautomation/framework/required/input/basic_ide/Dialog5_de_DE.properties
+++ b/testautomation/framework/required/input/basic_ide/Dialog5_de_DE.properties
@@ -1,4 +1,5 @@
# Dialog5 strings
+# x-no-translate
28.Dialog5.HelpText=
29.Dialog5.Title=
30.Dialog5.CommandButton1.HelpText=
diff --git a/testautomation/framework/required/input/basic_ide/Dialog5_en_US.properties b/testautomation/framework/required/input/basic_ide/Dialog5_en_US.properties
index 63ddbb05f82c..4e1d5852ec08 100644
--- a/testautomation/framework/required/input/basic_ide/Dialog5_en_US.properties
+++ b/testautomation/framework/required/input/basic_ide/Dialog5_en_US.properties
@@ -1,4 +1,5 @@
# Dialog5 strings
+# x-no-translate
28.Dialog5.HelpText=
29.Dialog5.Title=
30.Dialog5.CommandButton1.HelpText=
diff --git a/testautomation/framework/required/input/basic_ide/Dialog5_fr_FR.properties b/testautomation/framework/required/input/basic_ide/Dialog5_fr_FR.properties
index 35ce6c96b072..aeac84adb45e 100644
--- a/testautomation/framework/required/input/basic_ide/Dialog5_fr_FR.properties
+++ b/testautomation/framework/required/input/basic_ide/Dialog5_fr_FR.properties
@@ -1,4 +1,5 @@
# Dialog5 strings
+# x-no-translate
28.Dialog5.HelpText=
29.Dialog5.Title=
30.Dialog5.CommandButton1.HelpText=
diff --git a/testautomation/framework/tools/includes/all_interfaces.txt b/testautomation/framework/tools/includes/all_interfaces.txt
deleted file mode 100755
index e81f5b7834fa..000000000000
--- a/testautomation/framework/tools/includes/all_interfaces.txt
+++ /dev/null
@@ -1,125 +0,0 @@
-function hGetFileLocationAPI() as string
-function hGetDocTypeAPI() as string
-function listdebug( lsList() as string , cComment as string ) as integer
-function initlistdebug( cComment as string ) as integer
-function listmoveitem( source() as string, target() as string, itemid as integer ) as integer
-function listconvertpath( lsList() as string ) as integer
-function listInsertSection( lsList() as string, cSection as string ) as integer
-function CheckAsianLanguageSupport( sSupport as String ) as String
-function fStartupNavigator(navigatorItem as String , subItemNum as Integer)
-function fCloseNavigator
-function fGetCountryName( CountryID as Integer ) as String
-function hToolsCustomizeOpen() as boolean
-function hToolsCustomizeSelectTab( cTab as string ) as boolean
-function hToolsCustomizeClose( iMode as integer ) as boolean
-function hToolsCustomizeAddNewMenu( cName as string, bMode as boolean ) as boolean
-function hDeselectSeparator() as integer
-function hClickCommandButton( iItemToClick as integer ) as boolean
-function hFileOpenMultiSelect( iArray() as integer ) as integer
-function hSaveLoadDelSuccess( cFile as string ) as integer
-function hLoadFileExpectSuccess( fpath as string ) as boolean
-function hLoadFileExpectFailure( fpath as string ) as boolean
-function hSaveFileExpectSuccess( fpath as string , bReplace as boolean ) as boolean
-function hSaveFileExpectFailure( fpath as string , errortype as integer ) as boolean
-function hCreateDirectoryExpectSuccess( dirname as string ) as boolean
-function hDeleteFileViaFileOpen( cFile as String ) as boolean
-function hGetFileCountViaFileOpen() as integer
-function hNameGen_append( iDecChar as long ) as string
-function hNameGen_lead( iDecChar as long ) as string
-function hGetRelPath( cStartDir, cFileName as String ) as string
-function hFindFileObjectViaFileOpen( cName as string ) as integer
-function hGetControlParams( cParam as string ) as integer
-function hGetControlName( iControl as integer ) as string
-function hInsertControl( iControl as integer ) as string
-function hDrawControlOnDialog( iControl as integer ) as string
-function hDrawControl( xPos as integer, yPos as integer, xEnd as integer, yEnd as integer ) as boolean
-function hGetControlPosXO( iControl as integer ) as integer
-function hGetControlPosYO( iControl as integer ) as integer
-function hGetControlPosXE( iControl as integer ) as integer
-function hGetControlPosYE( iControl as integer ) as integer
-function hGetControlPosXM( iControl as integer ) as integer
-function hGetControlPosYM( iControl as integer ) as integer
-function hSelectControl( iControl as integer ) as boolean
-function hOpenHelp() as boolean
-function hCloseHelp() as boolean
-function hSelectHelpTab( cTab as string ) as boolean
-function hUseBookmarksContextMenu( cAction as string ) as boolean
-function hHelpGetAboutItemCount() as integer
-function hHelpGetSearchIndexItemCount() as integer
-function hGetHelpContentHeader( iLength as integer ) as string
-function hGetI18nData( cSection as string, cLanguage as string ) as string
-function hGetTwoDigitLangCode( iLanguage as integer ) as string
-function hTestLocale() as boolean
-function hInitSingleDoc() as boolean
-function hInitBackingMode() as boolean
-function hInitWriteDocIdentifier( cString as string ) as boolean
-function hBatchLoadJavaFiles( aFileList() , cIdent as string )
-function hFindCopyRemoveJavaLogs( cSourcePath as string ) as boolean
-sub GetPathList ( ls1 () as String, ls2 () as String, ls3 () as String )
-sub CreatePathList
-function URLGraphicCheck ( bRelativ as Boolean, sFile as String )
-sub DialogTestForViewOptions
-sub DialogTextForViewOptions_move
-sub MouseTestForViewOptions
-sub Make3D
-sub hResetAutosave()
-sub DeleteColor( cColorName as String )
-sub modifyColorRGB_PGUP( iColor as Integer )
-sub createNewColor( aColor() as String )
-sub getColorRGB( aColor() as String )
-sub compareTwoColorsRGB( aColor() as String )
-sub ModifyColorRGB( aColor() as String )
-function hOpenPropertyBrowser() as boolean
-function hClosePropertyBrowser() as boolean
-function hPBSetControlName( cControl as string ) as boolean
-function hPBGetControlName( cControl as string ) as boolean
-function hCheckPropertyPresence ( cSetting as string , iPos as integer ) as boolean
-function hSetPBTabPage( iPage as integer ) as boolean
-function hSetLabelName( sLabelName as string ) as boolean
-function hWaitForObject( oControl as object, iTime as integer ) as integer
-function hGetPrivateHttpServer( _proxy as string, _port as string ) as boolean
-function hGetPrivateFtpServer( _proxy as string, _port as string ) as boolean
-function hGetPrivateSocksServer( _proxy as string, _port as string ) as boolean
-function hGetPrivateInputPath( bVerbose as boolean ) as string
-function hGetPrivateInputFile( bVerbose as boolean ) as string
-function hCreateScriptingObject( cName as string ) as boolean
-function hRenameScriptingObject( cName as string ) as boolean
-function hDeleteScript( cName as string , bSuccess as boolean ) as boolean
-function hOpenScriptOrganizer( iDialog as integer ) as boolean
-function hCloseScriptOrganizer() as boolean
-function hOpenRunMacroDialog() as boolean
-function hSelectXMLSecTab( cTab as string ) as boolean
-function hGetPrinterPosition( cName as string, bWarn as boolean ) as integer
-function hDelPrinter( cPrinterName as string ) as integer
-function hGetSpadminPath() as string
-function hShutdownOffice() as integer
-function hOpenSpadmin() as boolean
-function hWaitForSpAdmin() as boolean
-function hCreateFaxDevice( cName as string ) as boolean
-function hDocumentInfoSelectTab( cTabPage as string ) as boolean
-function hFindTemplate( sTemplateName as string ) as integer
-function hGetRefFilePath( cCategory as string, location as string) as string
-function hSelectCategory( cCategory as string ) as boolean
-function hSelectFileFolder( iFolder as integer , bVerbose as boolean ) as integer
-function hGetFileFolderName( iFolder as integer ) as string
-function hSelectDocumentObject( iTitle as integer , iMode as integer ) as string
-function hIsTemplateDialogClosed() as boolean
-function hIsObjectAFolder( iObjects as integer ) as boolean
-function hDeleteUserTemplates() as integer
-function hAccessStandardBar() as boolean
-function hResetStandardBar() as boolean
-function hStandardbarItemGetCount() as integer
-function hToggleToolbarItem( iMenuPos as integer )
-function hStandardbarLoadUrl() as boolean
-function hStandardbarNewDialog()
-function hStandardbarSaveAs()
-function hSetProxies( HTTP_Server as string, HTTP_Port as string, FTP_Server as string, FTP_Port as string, NoProxyFor as string ) as integer
-function hMaximizeDocument() as boolean
-function hOpenWizardWithMenu( cType as string ) as integer
-function hFinishWizard( iMode as integer ) as boolean
-function hGetWizardParams( cType as string, cParam as string ) as integer
-function hWaitForWizard() as integer
-function hSetTemplateSavePath( cFile as string ) as integer
-function hHandleSaveError() as integer
-function hClickNextButton() as boolean
-
diff --git a/testautomation/framework/tools/includes/apicalls.inc b/testautomation/framework/tools/includes/apicalls.inc
deleted file mode 100644
index fca300c5eda7..000000000000
--- a/testautomation/framework/tools/includes/apicalls.inc
+++ /dev/null
@@ -1,116 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Various calls to the API
-'*
-'\******************************************************************************
-
-function hGetFileLocationAPI() as string
-
- '///<h3>Get the location of the current file from API - experimental, do not use</h3>
-
- dim oUnoConnect as object
- dim oUnoService as object
- dim oDocument as object
- dim cDocument as string
-
- const CFN = "hGetFileLocationAPI::"
-
- oUnoConnect = GetUNOApp
- if ( isNull( oUnoConnect ) ) then
- warnlog( CFN & "No UNO connection established" )
- else
- oUnoService = oUnoConnect.createInstance( "com.sun.star.frame.Desktop" )
- if ( isNull( oUnoService ) ) then
- warnlog( CFN & "No UNO Service available" )
- else
- oDocument = oUnoService.getCurrentComponent()
- if ( isNull( oDocument ) ) then
- warnlog( CFN & "No current component available" )
- else
- if ( oDocument.hasLocation() ) then
- cDocument = oDocument.getLocation()
- hGetFileLocationAPI() = cDocument
- printlog( CFN & cDocument )
- else
- warnlog( "Document has no storage location" )
- hGetFileLocationAPI() = ""
- endif
- endif
- endif
- endif
-
-end function
-
-'*******************************************************************************
-
-function hGetDocTypeAPI() as string
-
- '///<h3>Get the current document via API - experimental, do not use</h3>
-
- dim oUnoConnect as object
- dim oUnoService as object
- dim oDocument as object
- dim cDocument as string
-
- const CFN = "hGetDocTypeAPI::"
-
- oUnoConnect = GetUNOApp
- if ( isNull( oUnoConnect ) ) then
- warnlog( CFN & "No UNO connection established" )
- else
- oUnoService = oUnoConnect.createInstance( "com.sun.star.frame.Desktop" )
- if ( isNull( oUnoService ) ) then
- warnlog( CFN & "No UNO Service available" )
- else
- oDocument = oUnoService.getCurrentComponent()
- if ( isNull( oDocument ) ) then
- warnlog( CFN & "No current component available" )
- else
- if ( oDocument.SupportsService( "com.sun.star.sheet.SpreadsheetDocument" ) )then
- hGetDoctypeAPI() = "CALC"
- elseif( oDocument.SupportsService( "com.sun.star.text.TextDocument" ) ) then
- hGetDocTypeAPI() = "WRITER"
- elseif( oDocument.SupportsService( "com.sun.star.drawing.DrawingDocument" ) ) then
- hGetDocTypeAPI() = "DRAW"
- elseif( oDocument.SupportsService( "com.sun.star.formula.FormulaProperties" ) ) then
- hGetDocTypeAPI() = "MATH"
- elseif( oDocument.SupportsService("com.sun.star.presentation.PresentationDocument") ) then
- hGetDocTypeAPI() = "IMPRESS"
- else
- warnlog( "Unknown document type" )
- hGetDocTypeAPI() = ""
- endif
- endif
- endif
- endif
-
-
-end function
-
diff --git a/testautomation/framework/tools/includes/arrayfuncs.inc b/testautomation/framework/tools/includes/arrayfuncs.inc
deleted file mode 100644
index df33885da4cd..000000000000
--- a/testautomation/framework/tools/includes/arrayfuncs.inc
+++ /dev/null
@@ -1,163 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : misc functions for simpler listhandling. uses t_lists.inc
-'*
-'\******************************************************************************
-
-function listdebug( lsList() as string , cComment as string ) as integer
-
- '///<h3>Write the content of a list plus a comment out to a file.</h3>
- '///<i>It is required that following global variables are defined</i>
- '///<ul>
- '///+<li>LDN = ListDebugName (char) = the basename of the debugfiles</li>
- '///+<li>LDC = ListDebugCounter (int) = a number added to the filename</li>
- '///</ul>
-
- dim cFile as string
-
- LDC = LDC + 1
- cFile = LDN & LDC & ".log"
-
- dim sList( 5 ) as string
- sList( 0 ) = "5"
- sList( 1 ) = ""
- sList( 2 ) = "---------------------------------------------------------------"
- sList( 3 ) = cComment & " - Listsize: " & listcount( lsList() )
- sList( 4 ) = "---------------------------------------------------------------"
- sList( 5 ) = ""
-
- ListWrite( sList() , cFile , "utf8" )
- ListWriteAppend( lsList() , cFile , "utf8" )
-
-end function
-
-'*******************************************************************************
-
-function initlistdebug( cComment as string ) as integer
-
- '///<h3>Print leading text to a file and an index of the current debug session</h3>
- '///<i>It is required that following global variables are defined</i>
- '///<ul>
- '///+<li>LDN = ListDebugName (char) = the basename of the debugfiles</li>
- '///+<li>LDC = ListDebugCounter (int) = a number added to the filename</li>
- '///</ul>
- dim cFile as string
- cFile = LDN & ".log"
-
- dim sList( 5 ) as string
- sList( 0 ) = "5"
- sList( 1 ) = ""
- sList( 2 ) = "==============================================================="
- sList( 3 ) = cComment & " ---- Debug-Offset is at: " & LDC
- sList( 4 ) = "==============================================================="
- sList( 5 ) = ""
-
- ListWrite( sList() , cFile , "utf8" )
-
- printlog( "" )
- printlog( " *** Debug is enabled ***" )
- printlog( "" )
-
-end function
-
-'*******************************************************************************
-
-function listmoveitem( source() as string, _
- target() as string, _
- itemid as integer ) as integer
-
- '///<h3>Move one item from one list to another by index</h3>
- '///<ul>
-
- '///+<li>copy the list-item from list A to the end of list B, update listcount</li>
- listappend( target() , source( itemid ) )
-
- '///+<li>Delete the entry from the old list, reindex and update listcount</li>
- listdelete( source() , itemid )
-
- '///+<li>Return then updated listcount of the <i>source</i> list</li>
- listmoveitem() = listcount( source() )
-
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function listconvertpath( lsList() as string ) as integer
-
- '///<h3>Execute <i>convertpath</i> on a list containing filepaths</h3>
- '///<ul>
-
- dim iCurrentPath as integer
-
- '///+<li>Convert all listitems with <i>convertpath</i></li>
- for iCurrentPath = 1 to listcount( lsList() )
- lsList( iCurrentPath ) = convertpath( lsList( iCurrentPath ) )
- next iCurrentPath
-
- '///+<li>Return the number of processed paths (listcount)</li>
- listconvertpath() = listcount( lsList() )
-
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function listInsertSection( lsList() as string, _
- cSection as string ) as integer
-
- '///<h3>Appends a section (as ordinary list element) to a list</h3>
- '///<ul>
-
- dim iPos as integer
- dim sSectionString as string
-
- '///+<li>Get the current number of entries from the list</li>
- iPos = listcount( lsList() )
-
- '///+<li>Insert a blank list-entry if we are not at the beginning of the list</li>
- if ( iPos > 2 ) then
- listappend( lsList() , "" )
- end if
-
- '///+<li>Build the section string of type [section-name]</li>
- sSectionString = "[" & cSection & "]"
-
- '///+<li>Append the new section to the list</li>
- listappend( lsList() , sSectionString )
-
- '///+<li>Return the new number of entries in the list (listcount)</li>
- listInsertSection() = listcount( lsList() )
-
- '///</ul>
-
-end function
diff --git a/testautomation/framework/tools/includes/customize_tools.inc b/testautomation/framework/tools/includes/customize_tools.inc
index 2d6d17443913..386c5423ee3a 100644..100755
--- a/testautomation/framework/tools/includes/customize_tools.inc
+++ b/testautomation/framework/tools/includes/customize_tools.inc
@@ -33,43 +33,10 @@
function hToolsCustomizeOpen() as boolean
- '///<h3>Open Tools/Customize</h3>
- '///<i>Starting point: Any plain document</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorstatus (boolean)</li>
- '///<ul>
- '///+<li>TRUE if the Keyboard-Tab is open</li>
- '///+<li>FALSE on any other case</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hToolsCustomizeOpen::"
-
- '///+<li>Open Tools/Customize using the ToolsCustomize slot</li>
+ printlog( "Open Tools/Customize dialog" )
ToolsCustomize
-
- '///+<li>Switch to the Events Tab</li>
- hToolsCustomizeSelectTab( "Events" )
+ hToolsCustomizeOpen() = hToolsCustomizeSelectTab( "Events" )
- '///+<li>Verify that the requested tabpage is open</li>
- Kontext TabCustomizeEvents
- if ( TabCustomizeEvents.exists() ) then
- hToolsCustomizeOpen() = true
- printlog( CFN & "Successfully opened ToolsCustomize" )
- else
- hToolsCustomizeOpen() = false
- printlog( CFN & "Failed to open ToolsCustomize" )
- endif
- '///+<li>Return TRUE on success</li>
- '///</ul>
-
end function
'*******************************************************************************
@@ -100,189 +67,65 @@ function hToolsCustomizeSelectTab( cTab as string ) as boolean
'///<ul>
const CFN = "hToolsCustomizeSelectTab::"
- dim brc as boolean
- brc = false
-
+ hToolsCustomizeSelectTab() = true
ctab = lcase( ctab )
'///+<li>Switch to one of the four available tabpages</li>
'///<ol>
+
+ printlog( "Open Tools/Customize: <" & ctab & ">" )
kontext
try
-
select case ctab
'///+<li>Keyboard</li>
- case "keyboard" : active.setPage TabTastatur
- kontext "TabTastatur"
- if ( Aendern.isVisible() ) then
- brc = true
- endif
+ case "keyboard" :
+ active.setPage TabTastatur
+ WaitSlot
+ kontext "TabTastatur"
+ if ( not Aendern.isVisible() ) then
+ printlog( CFN & "Keyboard tabpage is not available" )
+ hToolsCustomizeSelectTab() = false
+ endif
'///+<li>Menu</li>
- case "menu" : active.setPage TabCustomizeMenu
- kontext "TabCustomizeMenu"
- if ( Entries.isVisible() ) then
- brc = true
- endif
+ case "menu" :
+ active.setPage TabCustomizeMenu
+ WaitSlot
+ kontext "TabCustomizeMenu"
+ if ( not Entries.isVisible() ) then
+ printlog( CFN & "Menu tabpage is not available" )
+ hToolsCustomizeSelectTab() = false
+ endif
'///+<li>Toolbars</li>
- case "toolbars" : active.setPage TabCustomizeToolbars
- kontext "TabCustomizeToolbars"
- if ( ToolbarContents.isVisible() ) then
- brc = true
- endif
+ case "toolbars" :
+ active.setPage TabCustomizeToolbars
+ WaitSlot
+ kontext "TabCustomizeToolbars"
+ if ( not ToolbarContents.isVisible() ) then
+ printlog( CFN & "Toolbar tabpage is not available" )
+ hToolsCustomizeSelectTab() = false
+ endif
'///+<li>Events</li>
- case "events" : active.setPage TabCustomizeEvents
- kontext "TabCustomizeEvents"
- if ( AssignMacro.isVisible() ) then
- brc = true
- endif
+ case "events" :
+ active.setPage TabCustomizeEvents
+ WaitSlot
+ kontext "TabCustomizeEvents"
+ if ( not AssignMacro.isVisible() ) then
+ printlog( CFN & "Assign Macro tabpage is not available" )
+ hToolsCustomizeSelectTab() = false
+ endif
end select
'///</ol>
-
catch
-
printlog( CFN & "Could not access requested tabpage" )
- brc = false
-
+ hToolsCustomizeSelectTab() = false
endcatch
-
- if ( brc ) then
- printlog( CFN & "Opened Tab: " & cTab )
- else
- printlog( CFN & "Failed to open Tab: " & cTab )
- endif
-
- '///+<li>Return TRUE on success</li>
'///</ul>
- hToolsCustomizeSelectTab() = brc
end function
'*******************************************************************************
-function hToolsCustomizeClose( iMode as integer ) as boolean
-
- '///<h3>Close the ToolsCustomize-Dialog</h3>
- '///<i>Starting point: Tools/Customize dialog</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Closing mode (integer)</li>
- '///<ul>
- '///+<li>1: Use OK-button</li>
- '///+<li>2: Use Cancel-button</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorstatus (boolean)</li>
- '///<ul>
- '///+<li>TRUE if executing close action succeeded</li>
- '///+<li>FALSE on any other condition</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hToolsCustomizeClose::"
- dim brc as boolean : brc = true
-
- kontext
-
- '///+<li>Switch to the Events page by default</li>
- active.setPage( TabCustomizeEvents )
-
- '///+<li>Close dialog by OK or CANCEL</li>
- '///<ol>
- select case iMode
- '///+<li>OK</li>
- case 1 : TabCustomizeEvents.OK()
- '///+<li>Cancel</li>
- case 2 : TabCustomizeEvents.Cancel()
- case else
- brc = false
- end select
- '///</ol>
-
-
-
- '///+<li>Verify that the dialog has indeed been closed</li>
- kontext "TabCustomizeEvents"
- TabCustomizeEvents.notExists( 3 )
- if ( TabCustomizeEvents.exists() ) then
- brc = false
- endif
-
- if ( brc ) then
- printlog( CFN & "Closed Tools/Customize" )
- else
- printlog( CFN & "Failed to close Tools/Customize" )
- endif
-
- '///</ul>
- hToolsCustomizeClose() = brc
-end function
-
-'*******************************************************************************
-
-function hToolsCustomizeAddNewMenu( cName as string, bMode as boolean ) as boolean
-
- '///<h3>Add a new menu via Tools/Customize/Menu</h3>
- '///<i>Starting point: Tools/Customize with Menu-Tab open</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Name of the new menu (string)</li>
- '///+<li>Mode (boolean). Options:</li>
- '///<ul>
- '///+<li>TRUE = The entry will be created (OK)</li>
- '///+<li>FALSE = The entry will not be created (Cancel)</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorstatus (boolean)</li>
- '///<ul>
- '///+<li>TRUE on success</li>
- '///+<li>FALSE on failure</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hToolsCustomizeAddNewMenu::"
- dim brc as boolean
- brc = false
-
- '///+<li>Click the &quot;New...&quot; button</li>
- kontext "TabCustomizeMenu"
- BtnNew.click()
-
- '///+<li>Verify that the menu organizer exists</li>
- Kontext "MenuOrganiser"
- if ( not MenuName.exists() ) then
- printlog( CFN & "MenuOrganiser is not open" )
- exit function
- endif
-
- '///+<li>Name the new menu if we intend to create the new entry</li>
- if ( bMode ) then
- printlog( CFN & "Naming menu: " & cName )
- MenuName.setText( cName )
- MenuOrganiser.OK()
- brc = true
- else
- call DialogTest( MenuOrganiser )
- printlog( CFN & "Opened and closed MenuOrganiser" )
- MenuOrganiser.cancel()
- brc = true
- endif
-
- hToolsCustomizeAddNewMenu() = brc
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
function hDeselectSeparator() as integer
'///<h3>Make sure that we do not work on a separator item (Toolbars)</h3>
diff --git a/testautomation/framework/tools/includes/filedlg_tools.inc b/testautomation/framework/tools/includes/filedlg_tools.inc
deleted file mode 100644
index 68d46216ed4d..000000000000
--- a/testautomation/framework/tools/includes/filedlg_tools.inc
+++ /dev/null
@@ -1,117 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Special tasks on filedialogs
-'*
-'\******************************************************************************
-
-function hFileOpenMultiSelect( iArray() as integer ) as integer
-
-
- '///<h3>Multiselect files with the fileopen dialog</h3>
- '///<i>This function uses keyboard navigation to select a number of files
- '///+ (multiselection).</i><br>
- '///<u>Starting point</u>: FileOpen dialog has context, workdirectory is
- '///+ open<br><br>
-
- '///<u>Input value(s):</u><br>
- '///<ol>
- '///+<li>Array (integer)</li>
- '///<ul>
- '///+<li>if ( array( n ) = 1 ) select the file at pos n, starting at n = 1</li>
- '///+<li>Any other value: Do not select, preferably preset with 0!</li>
- '///+<li>The size of the array must less or equal the number of files in the filepicker<br>
- '///+ Array( 0 ) is ignored</li>
- '///</ul>
- '///</ol>
-
- '///<u>Return Value:</u><br>
- '///<ol>
- '///+<li>Number of selected files (integer)</li>
- '///<ul>
- '///+<li>= 0: any error</li>
- '///+<li>&gt; 0: Number of selected files (Sum of Array( n ) = 1)</li>
- '///</ul>
- '///</ol>
-
- const CFN = "hFileOpenMultiSelect::"
- dim brc as boolean 'a multi purpose boolean returnvalue
-
- dim iArraySize as integer
- dim iCurrentFile as integer
- dim cCurrentFile as string
- dim iSelectedFilesCount as integer
- iSelectedFilesCount = 0
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Get the size of the array</li>
- iArraySize = ubound( iArray() )
-
- '///+<li>Get the number of items from the filepicker</li>
- kontext "OeffnenDlg"
- iFileCount = Dateiauswahl.getItemCount()
-
- '///+<li>Verify that the array size is equal or less the number of files<br>
- '///+ Exit with rc = 0 on error</li>
- ' Note: This can be done because it is quite simply expected that we know the
- ' number of files within the workdirectory. Take one input-dir.
- if ( iFileCount < iArraySize ) then
- qaerrorlog( CFN & "Array too large. Array must be <= file count" )
- printlog( CFN & "Files present in dialog: " & iFileCount )
- printlog( CFN & "Arraysize..............: " & iArraySize )
- hFileOpenMultiSelect() = 0
- exit function
- endif
-
- '///+<li>Select the first object in the filelist</li>
- kontext "OeffnenDlg"
- DateiAuswahl.typeKeys( "<HOME>" )
-
- '///+<li>Run through the filelist and select all items that are marked in the array</li>
- '///<ul>
- for iCurrentFile = 1 to iArraySize
-
- '///+<li>Select a file with CTRL+SPACE</li>
- if ( iArray( iCurrentFile ) = 1 ) then
- DateiAuswahl.typeKeys( "<MOD1 SPACE>" )
- cCurrentFile = DateiAuswahl.getSelText() ' does this work?
- printlog( CFN & "Select: " & cCurrentFile & " at pos: " & iCurrentFile )
- iSelectedFilesCount = iSelectedFilesCount + 1
- endif
-
- '///+<li>Move one down with CTRL key pressed</li>
- DateiAuswahl.typekeys( "<MOD1 DOWN>" )
-
- next iCurrentFile
- '///</ul>
- '///</ul>
- hFileOpenMultiSelect() = 0
-
-end function
diff --git a/testautomation/framework/tools/includes/fileoperations.inc b/testautomation/framework/tools/includes/fileoperations.inc
index b8040eb5fbfb..dd91cc08f498 100644..100755
--- a/testautomation/framework/tools/includes/fileoperations.inc
+++ b/testautomation/framework/tools/includes/fileoperations.inc
@@ -64,7 +64,8 @@ function hSaveLoadDelSuccess( cFile as string ) as integer
printlog( CFN & "Enter with option: " & cFile & "/" & cFileExt )
'///+<li>Close the navigator if it exists</li>
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
'///+<li>Save the current file, overwriting existing</li>
brc = hSaveFileExpectSuccess( cFile , TRUE ) ' save and overwrite
@@ -203,90 +204,6 @@ end function
'*******************************************************************************
-function hLoadFileExpectFailure( fpath as string ) as boolean
-
- '///<h3>Load a file where failure is expected</h3>
- '///<i>Uses</i>: framework\tools\t_stringtools.inc<br><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Filename incl. extension (string)</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorcondition (boolean)</li>
- '///<ul>
- '///+<li>TRUE = There was an error loading the file (as expected)</li>
- '///+<li>FALSE = The file was loaded without problems/any other error</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hLoadFileExpectFailure::"
-
- dim brc as boolean : brc = true
-
- printlog( CFN & "Enter with option: " & fpath )
-
- '///+<li>Click FileOpen</li>
- hUseAsyncSlot( "FileOpen" )
- Kontext "OeffnenDLG"
-
- '///+<li>Enter filepath</li>
- DateiName.setText( convertpath( fpath ) )
-
- '///+<li>Click &quot;Open&quot;</li>
- oeffnen.click()
-
- '///+<li>Close the expected warning dialog, return to FileOpen</li>
- Kontext "Active"
- if ( Active.Exists( 1 ) ) then
- printlog( CFN & "Expected active: " & active.getText() )
- active.ok()
-
- Kontext "OeffnenDLG"
- if ( OeffnenDlg.exists( 1 ) ) then
- OeffnenDLG.cancel()
- brc = true
- else
- warnlog( CFN & "File Open dialog is not open" )
- brc = false
- endif
- endif
-
- '///+<li>Verify that we are on FileOpen dialog, set errorcondition true</li>
- if ( brc ) then
- Kontext "OeffnenDLG"
- if ( Oeffnen.exists( 1 ) ) then
- printlog( CFN & "File is not loaded, still in File/Open. Good, cancelling" )
- OeffnenDLG.cancel()
- brc = true
- else
- brc = false
- endif
- endif
-
- '///+<li>If the document is loaded, set errorcondition to false</li>
- if ( not brc ) then
- hFileWait( FALSE )
- warnlog( CFN & "The file appears to have loaded correctly. Not good" )
-
- '///+<li>Click away possible messagebox to recover</li>
- Kontext "Active"
- if ( active.exists( 1 ) ) then
- printlog( CFN & "Unexpected active: " & active.getText() )
- Active.OK()
- endif
- endif
-
- '///+<li>Return errorcondition</li>
- hLoadFileExpectFailure() = brc
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
function hSaveFileExpectSuccess( fpath as string , bReplace as boolean ) as boolean
'///<h3>Save a file with optional replace where success is expected</h3>
@@ -514,80 +431,6 @@ end function
'*******************************************************************************
-function hCreateDirectoryExpectSuccess( dirname as string ) as boolean
-
- '///<h3>Create a directory where success is expected</h3>
- '///<i>Uses</i>: framework\tools\t_stringtools.inc<br><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Name of the directory (string)</li>
- '///<ul>
- '///+<li>Relative or absolute, absolute is recommended</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorcondition (boolean)</li>
- '///<ul>
- '///+<li>TRUE = The directory wass created</li>
- '///+<li>FALSE = On any error (Unable to create or file already exists)</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- dim brc as boolean : brc = true
-
- const CFN = "hCreateDirectoryExpectSuccess::"
- printlog( CFN & "Enter with option: " & dirname )
-
- '///+<li>Click &quot;File Open&quot;</li>
- hUseAsyncSlot( "FileOpen" )
-
- '///+<li>Click on &quot;New folder&quot;</li>
- Kontext "OeffnenDlg"
- if ( OeffnenDlg.exists( 2 ) ) then
-
- NeuerOrdner.click()
-
- '///+<li>Enter a name for the folder into the dialog</li>
- Kontext "NeuerOrdner"
- if ( NeuerOrdner.exists( 1 ) ) then
- OrdnerName.setText( dirname )
-
- '///+<li>Click &quot;OK&quot;</li>
- NeuerOrdner.OK()
- else
- warnlog( CFN & "New folder dialog did not open." )
- brc = false
- endif
-
- '///+<li>Handle possible messagebox (unexpected)</li>
- Kontext "Active"
- if Active.Exists( 1 ) then
- printlog( CFN & "Unexpected active: " & active.getText() )
- brc = false
- try
- Active.YES()
- catch
- Active.OK()
- endcatch
- endif
- else
- warnlog( CFN & "File Open dialog is not open." )
- brc = false
- endif
-
- '///+<li>Return errorcondition</li>
- printlog( CFN & "Exit with result: " & brc )
- hCreateDirectoryExpectSuccess() = brc
-
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
function hDeleteFileViaFileOpen( cFile as String ) as boolean
'///<h3>Delete a file using the File Open dialog</h3>
@@ -693,38 +536,6 @@ function hDeleteFileViaFileOpen( cFile as String ) as boolean
end function
-'******************************************************************************
-
-function hGetFileCountViaFileOpen() as integer
-
- '///<h3>Get the number of items listed in the FilePicker (File Open)</h3>
- '///<i>Note</i>: This function works on the current workdirectory<br><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Number of items listed in filepicker</li>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- '///+<li>Click &quot;File open&quot;</li>
- hUseAsyncSlot( "FileOpen" )
-
- '///+<li>Retrieve the number of items in the filepicker window</li>
- Kontext "OeffnenDLG"
- if ( OeffnenDlg.exists( 2 ) ) then
- hGetFileCountViaFileOpen() = DateiAuswahl.getItemCount()
- OeffnenDLG.cancel()
- else
- hGetFileCountViaFileOpen() = -1
- endif
- '///</ul>
-
-end function
-
'*******************************************************************************
function hNameGen_append( iDecChar as long ) as string
@@ -801,39 +612,6 @@ end function
'*******************************************************************************
-function hGetRelPath( cStartDir, cFileName as String ) as string
-
- '///<h3>Remove the absolute component from a path specification</h3>
- '///<i>Usually you do not need this function, avoid using it</i><br><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Absolute part of a filespec (startdirectory) (string)</li>
- '///<ul>
- '///+<li>e.g. &quot;/home/oscar/mydir&quot;</li>
- '///</ul>
- '///+<li>Fully qualified path to the file/directory (string)</li>
- '///<ul>
- '///+<li>e.g. &quot;/home/oscar/mydir/somedir/myfile.txt&quot;</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Remaining part of the fully qualified path minus startdirectory (string)</li>
- '///<ul>
- '///+<li>e.g. &quot;/somedir/myfile.txt&quot;</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- '///+<li>Find the end of startdir within the FQ filename</li>
- hGetRelPath() = mid( cFileName , len( cStartDir + 1 ) )
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
function hFindFileObjectViaFileOpen( cName as string ) as integer
'///<h3>Get the position of a filesystem object in filelist of fileopen dialog</h3>
diff --git a/testautomation/framework/tools/includes/formcontrols.inc b/testautomation/framework/tools/includes/formcontrols.inc
index 49c8dbaff943..03ebb004ee3a 100644..100755
--- a/testautomation/framework/tools/includes/formcontrols.inc
+++ b/testautomation/framework/tools/includes/formcontrols.inc
@@ -31,7 +31,9 @@
' **
'\******************************************************************************
-public const ICONTROLCOUNT = 22
+private const ICONTROLCOUNT = 22
+
+'*******************************************************************************
function hGetControlParams( cParam as string ) as integer
@@ -72,7 +74,7 @@ function hGetControlParams( cParam as string ) as integer
'///+<li>Currently following values are defined:</li>
'///<ul>
- select case cParam
+ select case ( cParam )
'///+<li>XOREGO = 31</li>
case "XOREGO" : hGetControlParams() = 31
'///+<li>XDIST = 8</li>
@@ -123,62 +125,57 @@ function hGetControlName( iControl as integer ) as string
'///<u>Description</u>:
'///<ul>
-
- dim sControl as string
-
'///+<li>Currently following control are defined:</li>
'///<ol>
select case iControl
'///+<li>Push Button</li>
- case 1 : sControl = "Push Button"
+ case 1 : hGetControlName() = "Push Button"
'///+<li>Image Control</li>
- case 2 : sControl = "Image Control"
+ case 2 : hGetControlName() = "Image Control"
'///+<li>Check Box</li>
- case 3 : sControl = "Check Box"
+ case 3 : hGetControlName() = "Check Box"
'///+<li>Radio Button</li>
- case 4 : sControl = "Radio Button"
+ case 4 : hGetControlName() = "Radio Button"
'///+<li>Fixed Text</li>
- case 5 : sControl = "Fixed Text"
+ case 5 : hGetControlName() = "Fixed Text"
'///+<li>Edit Field</li>
- case 6 : sControl = "Edit Field"
+ case 6 : hGetControlName() = "Edit Field"
'///+<li>List Box</li>
- case 7 : sControl = "List Box"
+ case 7 : hGetControlName() = "List Box"
'///+<li>Combo Box</li>
- case 8 : sControl = "Combo Box"
+ case 8 : hGetControlName() = "Combo Box"
'///+<li>Vertical ScrollBar</li>
- case 9 : sControl = "Vertical ScrollBar"
+ case 9 : hGetControlName() = "Vertical ScrollBar"
'///+<li>Horizontal ScrollBar</li>
- case 10 : sControl = "Horizontal ScrollBar"
+ case 10 : hGetControlName() = "Horizontal ScrollBar"
'///+<li>Frame</li>
- case 11 : sControl = "Frame"
+ case 11 : hGetControlName() = "Frame"
'///+<li>Progress Bar</li>
- case 12 : sControl = "Progress Bar"
+ case 12 : hGetControlName() = "Progress Bar"
'///+<li>Vertical Fixed Line</li>
- case 13 : sControl = "Vertical Fixed Line"
+ case 13 : hGetControlName() = "Vertical Fixed Line"
'///+<li>Horizontal Fixed Line</li>
- case 14 : sControl = "Horizontal Fixed Line"
+ case 14 : hGetControlName() = "Horizontal Fixed Line"
'///+<li>Date Field</li>
- case 15 : sControl = "Date Field"
+ case 15 : hGetControlName() = "Date Field"
'///+<li>Time Field</li>
- case 16 : sControl = "Time Field"
+ case 16 : hGetControlName() = "Time Field"
'///+<li>Numeric Field</li>
- case 17 : sControl = "Numeric Field"
+ case 17 : hGetControlName() = "Numeric Field"
'///+<li>Currency Field</li>
- case 18 : sControl = "Currency Field"
+ case 18 : hGetControlName() = "Currency Field"
'///+<li>Form Field</li>
- case 19 : sControl = "Form Field"
+ case 19 : hGetControlName() = "Form Field"
'///+<li>Pattern Field</li>
- case 20 : sControl = "Pattern Field"
+ case 20 : hGetControlName() = "Pattern Field"
'///+<li>File Control</li>
- case 21 : sControl = "File Control"
+ case 21 : hGetControlName() = "File Control"
'///+<li>Tree Control</li>
- case 22 : sControl = "Tree Control"
+ case 22 : hGetControlName() = "Tree Control"
'///</ol>
'///+<li>&quot;&quot; for function parameter &lt; 1 or &gt; 22 </li>
case else : sControl = ""
end select
-
- hGetControlName() = sControl
'///</ul>
end function
@@ -305,14 +302,6 @@ function hDrawControlOnDialog( iControl as integer ) as string
const CFN = "hDrawControlOnDialog::"
- '///+<li>Verify function parameter (this is a top level function)</li>
- if ( ( iControl < 1 ) or ( iControl > ICONTROLCOUNT ) ) then
- warnlog( CFN & "Invalid control-number (iControl) passed: " & iControl )
- hDrawControlOnDialog() = false
- exit function
- endif
-
-
dim sControl as string ' The name of the current control
dim brc as boolean ' some returnvalue
@@ -330,7 +319,8 @@ function hDrawControlOnDialog( iControl as integer ) as string
'///+<li>click the desired control</li>
sControl = hInsertControl( iControl )
- printlog( CFN & " at XO=" & iXO & _
+ printlog( CFN & " Index=" & iControl & _
+ " at XO=" & iXO & _
" XE=" & iXE & _
" YO=" & iYO & _
" YE=" & iYE & _
@@ -405,19 +395,21 @@ function hDrawControl( xPos as integer, _
'///+<li>Mouse up on pos X/Y-End</li>
'///</ol>
'///</ul>
-
- DialogWindow.MouseUp( 20 , 20 )
+
+ autoexecute = false
+ DialogWindow.MouseUp( 20 , 20 ) : wait 100
try
- DialogWindow.MouseDown ( xPos, yPos )
- DialogWindow.MouseMove ( xEnd, yEnd )
- DialogWindow.MouseUp ( xEnd, yEnd )
+ DialogWindow.MouseMove ( xPos, yPos ) : wait 100
+ DialogWindow.MouseDown ( xPos, yPos ) : wait 100
+ DialogWindow.MouseMove ( xEnd, yEnd ) : wait 100
+ DialogWindow.MouseUp ( xEnd, yEnd ) : wait 100
hDrawControl() = true
catch
warnlog( "#i39852# " & CFN & "Unable to complete mouseactions on dialog" )
hDrawControl() = false
endcatch
-
+ autoexecute = true
end function
@@ -459,18 +451,15 @@ function hGetControlPosXO( iControl as integer ) as integer
'///+<li>13 ... 18 : Column three</li>
'///+<li>&gt; 18 : Column four</li>
'///</ul>
- '///</ul>
-
- if ( iControl <= 6 ) then
- hGetControlPosXO() = xOffset
- elseif( ( iControl >= 7 ) and ( iControl <= 12 ) ) then
- hGetControlPosXO() = xOffset + 1 * xDistance
- elseif( ( iControl >= 13 ) and ( iControl <= 18 ) ) then
- hGetControlPosXO() = xOffset + 2 * xDistance
- else
- hGetControlPosXO() = xOffset + 3 * xDistance
- endif
-
+ '///</ul>
+
+ select case ( iControl )
+ case 1, 2, 3, 4, 5, 6 : hGetControlPosXO() = xOffset
+ case 7, 8, 9, 10, 11, 12 : hGetControlPosXO() = xOffset + 1 * xDistance
+ case 13, 14, 15, 16, 17, 18 : hGetControlPosXO() = xOffset + 2 * xDistance
+ case 19, 20, 21, 22, 23, 24 : hGetControlPosXO() = xOffset + 3 * xDistance
+ end select
+
end function
'*******************************************************************************
@@ -514,13 +503,13 @@ function hGetControlPosYO( iControl as integer ) as integer
'///</ul>
'///</ul>
- select case iControl
- case 1 , 7 , 13 , 19 : hGetControlPosYO() = yOffset
- case 2 , 8 , 14 , 20 : hGetControlPosYO() = yOffset + 1 * yDistance
- case 3 , 9 , 15 , 21 : hGetControlPosYO() = yOffset + 2 * yDistance
- case 4 , 10 , 16 , 22 : hGetControlPosYO() = yOffset + 3 * yDistance
- case 5 , 11 , 17 : hGetControlPosYO() = yOffset + 4 * yDistance
- case 6 , 12 , 18 : hGetControlPosYO() = yOffset + 5 * yDistance
+ select case ( iControl )
+ case 1, 7, 13, 19 : hGetControlPosYO() = yOffset
+ case 2, 8, 14, 20 : hGetControlPosYO() = yOffset + 1 * yDistance
+ case 3, 9, 15, 21 : hGetControlPosYO() = yOffset + 2 * yDistance
+ case 4, 10, 16, 22 : hGetControlPosYO() = yOffset + 3 * yDistance
+ case 5, 11, 17, 23 : hGetControlPosYO() = yOffset + 4 * yDistance
+ case 6, 12, 18, 24 : hGetControlPosYO() = yOffset + 5 * yDistance
end select
end function
@@ -679,8 +668,7 @@ function hSelectControl( iControl as integer ) as boolean
'///+ dialog pane. To prevent the controls from overlapping each other
'///+ they are arranged in rows and columns. Each control is identified
'///+ by a unique number (see description for hInsertControl(...)). The
- '///+ dimensions are defined in hGetControlParams(...). The coordinates
- '///+ returned by this function can be used to draw and to select a control.</i><br>
+ '///+ dimensions are defined in hGetControlParams(...).</i><br>
'///<u>Input</u>:
'///<ol>
'///+<li>Number of the control (integer)</li>
@@ -701,16 +689,18 @@ function hSelectControl( iControl as integer ) as boolean
dim xPos as integer
dim yPos as integer
- dim iTry as integer ' we try five times to grab the control
- dim iTab as integer
+ dim iCurrentSelectionMethod as integer
- hSelectControl() = false
+ const SELECT_MIDDLE = 1 ' click into the middle of the control
+ const SELECT_UPPER_LEFT = 2 ' click the upper left corner of the control
+ const SELECT_LOWER_RIGHT = 3 ' click the lower right corner of the control
+ const SELECT_FRAME_AROUND = 4 ' select by drawing a frame around the control
- '///+<li>Check function parameter, this is a top level function</li>
- if ( ( iControl < 1 ) or ( iControl > ICONTROLCOUNT ) ) then
- warnlog( "Incorrect index passed to function" )
- exit function
- endif
+ const EXTRA_FRAME_SIZE = 1 ' one percent in-/outside the border of the control
+ const SELECTION_METHODS = 4 ' this function sports four ways of seleting a control
+ const REPEAT_COUNT = 5 ' number of times to send a keystroke to the dialog window
+
+ hSelectControl() = false
'///+<li>Verify that the ToolsCollectionBar is visible. if not: Abort</li>
kontext "ToolsCollectionBar"
@@ -737,10 +727,6 @@ function hSelectControl( iControl as integer ) as boolean
' Method 4 is dangerous because it might accidentially select the
' background window which is the reason why this is not the default.
- ' New: Method 5 is troublesome as well because #i79126 does not enable the
- ' OpenProperties-button on the Macro Controls Float. Currently it is just used
- ' to see what happens if we hack alog using keystrokes. Experimental.
-
'///+<li>Try four different ways of selecting the control before giving up</li>
'///<ol>
'///+<li>Mouse-Click in the middle</li>
@@ -749,66 +735,64 @@ function hSelectControl( iControl as integer ) as boolean
'///+<li>Rubberband around the control (Mouse movement)</li>
'///+<li>Deselct everything and use <TAB> to activate the control</li>
'///</ol>
- for iTry = 1 to 5
-
+
+ autoexecute = false
+ for iCurrentSelectionMethod = 1 to SELECTION_METHODS
+
Kontext "BasicIDE"
-
- select case iTry
- case 1
+ DialogWindow.typeKeys( "<UP><LEFT>" , REPEAT_COUNT )
+ select case ( iCurrentSelectionMethod )
+ case SELECT_MIDDLE
+
xPos = hGetControlPosXM( iControl )
yPos = hGetControlPosYM( iControl )
DialogWindow.MouseMove( xPos, yPos )
DialogWindow.MouseDown( xPos, yPos )
- DialogWindow.MouseUp ( xPos, yPos )
- case 2
- xPos = hGetControlPosXO( iControl )
- yPos = hGetControlPosYO( iControl )
+ DialogWindow.MouseUp ( xPos, yPos )
+
+ case SELECT_UPPER_LEFT
+
+ xPos = hGetControlPosXO( iControl ) + EXTRA_FRAME_SIZE
+ yPos = hGetControlPosYO( iControl ) + EXTRA_FRAME_SIZE
DialogWindow.MouseMove( xPos, yPos )
DialogWindow.MouseDown( xPos, yPos )
- DialogWindow.MouseUp ( xPos, yPos )
- case 3
- xPos = hGetControlPosXE( iControl )
- yPos = hGetControlPosYE( iControl )
+ DialogWindow.MouseUp ( xPos, yPos )
+
+ case SELECT_LOWER_RIGHT
+
+ xPos = hGetControlPosXE( iControl ) - EXTRA_FRAME_SIZE
+ yPos = hGetControlPosYE( iControl ) - EXTRA_FRAME_SIZE
DialogWindow.MouseMove( xPos, yPos )
DialogWindow.MouseDown( xPos, yPos )
- DialogWindow.MouseUp ( xPos, yPos )
- case 4
- xPos = hGetControlPosXO( iControl ) - 2
- yPos = hGetControlPosYO( iControl ) - 2
+ DialogWindow.MouseUp ( xPos, yPos )
+
+ case SELECT_FRAME_AROUND
+
+ xPos = hGetControlPosXO( iControl ) - EXTRA_FRAME_SIZE
+ yPos = hGetControlPosYO( iControl ) - EXTRA_FRAME_SIZE
DialogWindow.MouseMove( xPos, yPos )
DialogWindow.MouseDown( xPos, yPos )
- DialogWindow.MouseUp ( xPos, yPos )
- xPos = hGetControlPosXE( iControl ) + 2
- yPos = hGetControlPosYE( iControl ) + 2
+ xPos = hGetControlPosXE( iControl ) + EXTRA_FRAME_SIZE
+ yPos = hGetControlPosYE( iControl ) + EXTRA_FRAME_SIZE
DialogWindow.MouseMove( xPos, yPos )
- DialogWindow.MouseUp ( xPos, yPos )
- case 5
- qaerrorlog( "#i79126# - OpenProperties disabled when selecting control via tab" )
- 'xPos = 80
- 'yPos = 20
- 'DialogWindow.MouseDown( xPos, yPos )
- 'DialogWindow.MouseUp ( xPos, yPos )
- 'for iTab = 1 to iControl + 1
- ' DialogWindow.typeKeys( "<TAB>" )
- 'next iTab
+ DialogWindow.MouseUp ( xPos, yPos )
+
end select
-
-
-
- '///+<li>Check that the ToolsCollectionBar is open</li>
- kontext "ToolsCollectionBar"
- if ( ToolsCollectionBar.exists() ) then
- wait( 300 )
- if ( OpenProperties.isEnabled() ) then
- hSelectControl() = true
- exit for
- else
- wait( 500 )
+
+ try
+ if ( iControl = 11 ) then
+ wait( 100 )
+ printlog( "tried method: " & iCurrentSelectionMethod )
endif
- endif
+ ContextProperties
+ hSelectControl() = true
+ exit for
+ catch
+ endcatch
- next iTry
+ next iCurrentSelectionMethod
+ autoexecute = true
'///</ul>
end function
diff --git a/testautomation/framework/tools/includes/help_tools.inc b/testautomation/framework/tools/includes/help_tools.inc
index ed55c319fd40..8552954f4f34 100644..100755
--- a/testautomation/framework/tools/includes/help_tools.inc
+++ b/testautomation/framework/tools/includes/help_tools.inc
@@ -33,81 +33,35 @@
function hOpenHelp() as boolean
- '///<h3>Function to open the Help Browser</h3>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorcondition (boolean)</li>
- '///<ul>
- '///+<li>TRUE if the help is open</li>
- '///+<li>FALSE if the help did not open</li>
- '///</ul>
- '///</ol>
-
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hOpenHelp::"
+ printlog( "Open Help Browser" )
HelpContents
-
- if ( WaitSlot( 3000 ) <> WSFinished ) then
- printlog( CFN & "Failed to open help" )
- hOpenHelp() = FALSE
+
+ kontext "StarOfficeHelp"
+ if ( StarOfficeHelp.exists( 5 ) ) then
+ hOpenHelp() = TRUE
else
- kontext "StarOfficeHelp"
- if ( StarOfficeHelp.exists() ) then
- printlog( CFN & "Help was opened" )
- hOpenHelp() = TRUE
- else
- printlog( CFN & "Help was not opened" )
- hOpenHelp() = FALSE
- endif
+ warnlog( "Unable to open help browser" )
+ hOpenHelp() = FALSE
endif
-
+
+
end function
'*******************************************************************************
function hCloseHelp() as boolean
- '///<h3>Function to close the Help Browser</h3>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorcondition (boolean)</li>
- '///<ul>
- '///+<li>TRUE if the help is closed</li>
- '///+<li>FALSE if the help did not close</li>
- '///</ul>
- '///</ol>
-
- const CFN = "hCloseHelp::"
+ printlog( "Close Help Browser" )
kontext "StarOfficeHelp"
- if ( StarOfficeHelp.exists() ) then
-
- hUseAsyncSlot( "FileClose")
- StarOfficeHelp.notExists( 3 )
-
- if ( StarOfficeHelp.Exists() ) then
- printlog( CFN & "Help was not closed")
- hCloseHelp() = FALSE
- else
- printlog( CFN & "Help was closed")
- hCloseHelp() = TRUE
- endif
- else
- printlog( CFN & "Help is not open, no action taken")
+ StarOfficeHelp.typeKeys( "<MOD1 F4>" )
+
+ if ( StarOfficeHelp.notExists( 3 ) ) then
hCloseHelp() = TRUE
+ else
+ warnlog( "Help browser could not be closed" )
+ hCloseHelp() = FALSE
endif
end function
@@ -125,9 +79,9 @@ function hSelectHelpTab( cTab as string ) as boolean
'///+<li>&quot;index&quot; for the index tab</li>
'///+<li>&quot;find&quot; for the find tab</li>
'///+<li>&quot;bookmarks&quot; for the bookmarks tab</li>
- '///</ul>
+ '///</ul>
'///</ol>
-
+
'///<u>Returns</u>:
'///<ol>
'///+<li>Errorcondition (boolean)</li>
@@ -136,19 +90,16 @@ function hSelectHelpTab( cTab as string ) as boolean
'///+<li>FALSE if the requested tabpage did not open</li>
'///</ul>
'///</ol>
-
- '///<u>Description</u>:
+
+ '///<u>Description</u>:
'///<ul>
const CFN = "hSelectHelpTab::"
- dim brc as boolean
- brc = false
-
- dim cTabName as string
- cTabName = lcase( cTab )
+ dim brc as boolean : brc = false
+ dim cTabName as string : cTabName = lcase( cTab )
kontext "StarOfficeHelp"
-
+
printlog( CFN & "Enter" )
'///+<li>Select the requested Tabpage, verify that it is open</li>
@@ -173,7 +124,7 @@ function hSelectHelpTab( cTab as string ) as boolean
call DialogTest( BookmarksPage )
brc = true
endif
- case else
+ case else
printlog( CFN & "Invalid parameter passed to function: " & cTab )
printlog( CFN & "Valid are: content, index, find, bookmarks" )
brc = false
@@ -183,9 +134,9 @@ function hSelectHelpTab( cTab as string ) as boolean
if ( brc ) then
printlog( CFN & "Exit: Selected Tabpage: " & cTab )
endif
-
+
'///+<li>Return TRUE or FALSE</li>
- hSelectHelpTab() = brc
+ hSelectHelpTab() = brc
'///</ul>
end function
@@ -202,9 +153,9 @@ function hUseBookmarksContextMenu( cAction as string ) as boolean
'///+<li>&quot;show&quot;</li>
'///+<li>&quot;rename&quot;</li>
'///+<li>&quot;delete&quot;</li>
- '///</ul>
+ '///</ul>
'///</ol>
-
+
'///<u>Returns</u>:
'///<ol>
'///+<li>Errorcondition (boolean)</li>
@@ -213,13 +164,13 @@ function hUseBookmarksContextMenu( cAction as string ) as boolean
'///+<li>FALSE on any other error</li>
'///</ul>
'///</ol>
-
- '///<u>Description</u>:
+
+ '///<u>Description</u>:
'///<ul>
const CFN = "hUseBookmarksContextMenu::"
dim cSelection as string
dim iActionPos as integer
-
+
printlog( CFN & "Enter" )
'///+<li>Verify that we are on the Bookmarks Page</li>
@@ -245,7 +196,7 @@ function hUseBookmarksContextMenu( cAction as string ) as boolean
hUseBookmarksContextMenu() = false
exit function
endif
-
+
'///+<li>Open the context menu and select the requested index</li>
kontext "Bookmarks"
Bookmarks.openContextMenu()
@@ -254,178 +205,35 @@ function hUseBookmarksContextMenu( cAction as string ) as boolean
'///+<li>Return TRUE if all went well so far</li>
hUseBookmarksContextMenu() = true
-
- '///</ul>
-
-end function
-'*******************************************************************************
-
-function hHelpGetAboutItemCount() as integer
-
- '///<h3>Get the number of applications listed in the Help ListBox</h3>
-
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Number of applications listed (integer)</li>
- '///<ul>
- '///+<li>The default is 7</li>
'///</ul>
- '///</ol
-
- '///<u>Description</u>:
- '///<ul>
-
- const I_ABOUT_ITEMS = 8
- const CFN = "hHelpGetAboutItemCount::"
-
- dim iItem as integer
- dim cItemName as string
- dim iAboutItems as integer
- dim brc as boolean
-
- printlog( CFN & "Enter" )
-
- '///+<li>Open Help</li>
- brc = hOpenHelp()
- if ( not brc ) then
- qaerrorlog( CFN & "Help not open, aborting" )
- hHelpGetAboutItemCount() = 0
- exit function
- endif
-
- hSelectHelpTab( "index" )
- Kontext "IndexPage"
-
- '///+<li>get the number of applications from the drop down box</li>
- iAboutItems = HelpAbout.getItemCount()
- if ( iAboutItems <> I_ABOUT_ITEMS ) then
- warnlog( "The list of topics is incomplete:" )
- endif
-
- '///+<li>Print the list of items to the log</li>
- printlog( CFN & "Items listed in Application Listbox (HelpAbout)" )
- for iItem = 1 to iAboutItems
- cItemName = HelpAbout.getItemText( iItem )
- printlog( " " & cItemName )
- next iItem
-
- '///+<li>close help</li>
- hCloseHelp()
- '///</ul>
-
- printlog( CFN & "Exit with item count = " & iAboutItems )
- hHelpGetAboutItemCount() = iAboutItems
-
-end function
-
-'*******************************************************************************
-
-function hHelpGetSearchIndexItemCount() as integer
- '///<h3>Get the number of items in the Help Search Index</h3>
- '///<i>Starting point: Help / Index page</i><br>
- '///<i>Note: Workaround for incorrect value returned by .getItemCount()</i><br>
-
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Number of items in the list (integer)</li>
- '///</ol>
-
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hHelpGetSearchIndexItemCount:"
-
- dim iItem as integer
- printlog( CFN & "Enter" )
-
- '///+<li>Run through the list and count the items, break on error</li>
- for iItem = 1 to 10000
-
- try
- SearchIndex.select( iItem )
- catch
- iItem = iItem - 1
- exit for
- endcatch
-
- next iItem
-
- printlog( CFN & "Exit with item count = " & iItem )
- hHelpGetSearchIndexItemCount() = iItem
- '///</ul>
-
end function
'*******************************************************************************
-function hGetHelpContentHeader( iLength as integer ) as string
-
-
- '///<h3>Get the header of the content in the help browser</h3>
- '///<i>This is the first line of the content page, truncated (if desired)</i><br><br>
+function hHelpGetAboutItemCount() as integer
- '///<u>Parameter(s):</u><br>
- '///<ol>
- '///+<li>Length of the requested string (Integer)</li>
- '///<ul>
- '///+<li>The max length of the string to be returned</li>
- '///+<li>&le; 0 = do not truncate</li>
- '///</ul>
- '///</ol>
+ printlog( "Get the number of applications listed in the help listbox (should be 8)" )
+ const ABOUT_ITEMS = 8
+ dim itemcount as integer
- '///<u>Returns:</u><br>
- '///<ol>
- '///+<li>Header (String)</li>
- '///<ul>
- '///+<li>A string containing the content header</li>
- '///+<li>The header is the first line of the content page</li>
- '///</ul>
- '///</ol>
+ hOpenHelp()
+ hSelectHelpTab( "index" )
- const CFN = "hGetHelpContentHeader::"
- printlog( CFN & "Enter with option (iLength): " & iLength )
- dim cHeaderString as string
+ Kontext "IndexPage"
+ itemcount = HelpAbout.getItemCount()
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Maximize the help viewer (required to avoid cut off strings)</li>
- kontext "HelpContent"
- 'StarOfficeHelp.maximize()
-
- '///+<li>Go to the top left position in the help browser</li>
- HelpContent.typeKeys( "<MOD1 HOME>" )
-
- '///+<li>Mark the entire line - note that this ends at the linebreak</li>
- HelpContent.typeKeys( "<SHIFT END>" )
-
- '///+<li>Copy the string to the clipboard</li>
- EditCopy
-
- '///+<li>Assign the string to a variable</li>
- cHeaderString = getClipboardText
-
- '///+<li>Truncate string</li>
- if ( iLength > 0 ) then
- if ( len( cHeaderString ) > iLength ) then
- cHeaderString = left( cHeaderString, iLength )
- endif
+ if ( itemcount <> ABOUT_ITEMS ) then
+ warnlog( "Number of applications is incorrect" )
+ printlog( "Found...: " & itemcount )
+ printlog( "Expected: " & ABOUT_ITEMS
endif
- '///</ul>
- printlog( CFN & "Exit: " & cHeaderString )
- hGetHelpContentHeader() = cHeaderString
+ hCloseHelp()
+
+ hHelpGetAboutItemCount() = itemcount
end function
+
diff --git a/testautomation/framework/tools/includes/i18n_tools.inc b/testautomation/framework/tools/includes/i18n_tools.inc
index a2b65e12b736..131f162c8436 100644..100755
--- a/testautomation/framework/tools/includes/i18n_tools.inc
+++ b/testautomation/framework/tools/includes/i18n_tools.inc
@@ -31,90 +31,6 @@
'*
'\******************************************************************************
-function hGetI18nData( cSection as string, cLanguage as string ) as string
-
- '///<h3>Retrieve various information about i18n</h3>
- '///<i>Uses datafile: framework/tools/input/i18ndata.txt</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Section from which to retrieve the data (string)</li>
- '///<ul>
- '///+<li>Any name of a section existing in the datafile</li>
- '///</ul>
- '///+<li>Language code as string</li>
- '///<ul>
- '///+<li>Use hGetTwoDigitLangCode(...) to ensure proper string formatting</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Language identifier (string)</li>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- '///+<li>Create the path to the datafile</li>
- dim cPath as string
- cPath = gTesttoolPath & "framework\tools\input\i18ndata.txt"
- cPath = convertpath( cPath )
-
- '///+<li>Find out the required size of the array to hold the entire file</li>
- dim iFileSize as integer
- iFileSize = hListFileGetSize( cPath )
-
- '///+<li>Define an array to hold the datafile</li>
- dim aFileContent( iFileSize ) as string
-
- '///+<li>Retrieve the requested section from the datafile</li>
- hGetDatafileSection( cPath, aFileContent(), cSection, "", "" )
-
- '///+<li>Isolate the requested language item</li>
- hGetI18nData() = hGetValueForKeyAsString( aFileContent(), cLanguage )
-
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function hGetTwoDigitLangCode( iLanguage as integer ) as string
-
- '///<h3>Retrieve a two digit language code from integer</h3>
- '///<i>Replaces and enhances deprecated sub &quot;siSpracheSetzen&quot;</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Language Code (integer)</li>
- '///<ul>
- '///+<li>Any number between (and including) 1 and 99</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Language Code (string)</li>
- '///<ul>
- '///+<li>1 - 9 -&gt; &quot;01&quot; - &quot;09&quot;</li>
- '///+<li>10 - 99 -&gt; &quot;10&quot; - &quot;99&quot;</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
- dim cLanguage as string
-
- '///+<li>Convert single digit language code to two digit language string</li>
- if ( ( iLanguage > 0 ) and ( iLanguage < 10 ) ) then
- cLanguage = "0" & iLanguage
- else
- cLanguage = iLanguage
- endif
-
- hGetTwoDigitLangCode() = cLanguage
- '///</ul>
-
-end function
-
-
-'*******************************************************************************
-
function hTestLocale() as boolean
diff --git a/testautomation/framework/tools/includes/init_tools.inc b/testautomation/framework/tools/includes/init_tools.inc
deleted file mode 100644
index e7b90fa75523..000000000000
--- a/testautomation/framework/tools/includes/init_tools.inc
+++ /dev/null
@@ -1,205 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Tools to put the office into a defined state
-'*
-'\******************************************************************************
-
-function hInitSingleDoc() as boolean
-
- '///<h3>Make sure exactly one single writer document is open</h3>
- '///<i>The wizards cannot be triggered correctly from the backing window.
- '///+ As a workaround this function checks the amount of open documents and
- '///+ creates exactly one unchanged Writer document</i><br><br>
-
- '///<u>Parameter(s):</u><br>
- '///<ol>
- '///+<li>No input parameters</li>
- '///</ol>
-
-
- '///<u>Returns:</u><br>
- '///<ol>
- '///+<li>Errorcondition (Boolean)</li>
- '///<ul>
- '///+<li>TRUE: Exactly one Writer document is open</li>
- '///+<li>FALSE: Any error</li>
- '///</ul>
- '///</ol>
-
- const CFN = "hInitSingleDoc::"
- dim cOldApplication as string
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Close all documents until we are on the backing window</li>
- do while ( getDocumentCount > 0 )
- call hCloseDocument()
- loop
-
- '///+<li>Save the previous gApplication</li>
- cOldApplication = gApplication
-
- '///+<li>Set gApplication to WRITER</li>
- gApplication = "WRITER"
-
- '///+<li>Open one new Writer document</li>
- call hNewDocument()
-
- '///+<li>Verify that exactly one document is open</li>
- if ( getDocumentCount = 1 ) then
- printlog( CFN & "A single unchanged writer document is open" )
- hInitSingleDoc() = true
- else
- printlog( CFN & "Failed to open just one single writer document" )
- hInitSingleDoc() = false
- endif
-
- '///+<li>Restore gApplication</li>
- gApplication = cOldApplication
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function hInitBackingMode() as boolean
-
- use "global\tools\includes\optional\t_docfuncs.inc"
-
- '///<h3>Make that we are on the backing window (no open documents)</h3>
- '///<i>Close all open documents</i><br><br>
-
- '///<u>Parameter(s):</u><br>
- '///<ol>
- '///+<li>No input parameters</li>
- '///</ol>
-
-
- '///<u>Returns:</u><br>
- '///<ol>
- '///+<li>Errorcondition (Boolean)</li>
- '///<ul>
- '///+<li>TRUE: No open documents are present</li>
- '///+<li>FALSE: Any error</li>
- '///</ul>
- '///</ol>
-
- const CFN = "hInitBackingMode::"
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Close all documents until we are on the backing window</li>
- do while ( getDocumentCount > 0 )
- hCloseDocument()
- loop
-
- '///+<li>verify that we do not have any open documents left (redundant check)</li>
- if ( getDocumentCount = 0 ) then
- printlog( CFN & "Office is in backing mode." )
- hInitBackingMode() = true
- else
- printlog( CFN & "Office is in undefined state." )
- hInitBackingMode() = false
- endif
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function hInitWriteDocIdentifier( cString as string ) as boolean
-
-
- '///<h3>Write a specific string to an open writer document</h3>
- '///<i>This function verifies that exactly one document is open, that this is a
- '///+ Writer document and writes the string to the document</i><br><br>
-
- '///<u>Parameter(s):</u><br>
- '///<ol>
-
- '///+<li>A free form string (String) which serves as identifier for the document</li>
- '///<ul>
- '///+<li>The first character should be uppercase</li>
- '///</ul>
-
- '///</ol>
-
-
- '///<u>Returns:</u><br>
- '///<ol>
- '///+<li>Errorcondition (Boolean)</li>
- '///<ul>
- '///+<li>TRUE: The string was written correctly</li>
- '///+<li>FALSE: Too many open documents</li>
- '///+<li>FALSE: Not a Writer document</li>
- '///+<li>FALSE: Any other error</li>
- '///</ul>
- '///</ol>
-
- const CFN = "hInitWriteDocIdentifier::"
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Verify number of open documents</li>
- if ( getDocumentCount <> 1 ) then
- printlog( CFN & "Incorrect document count" )
- hInitWriteDocIdentifier() = false
- exit function
- endif
-
- '///+<li>Verify that it is a writer document</li>
- kontext "DocumentWriter"
- if ( not DocumentWriter.exists() ) then
- printlog( CFN & "Open document is not a text document" )
- hInitWriteDocIdentifier() = false
- exit function
- endif
-
- '///+<li>Write the string</li>
- kontext "DocumentWriter"
- DocumentWriter.typeKeys( "<MOD1 END>" )
- DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" )
- DocumentWriter.typeKeys( "<DELETE>" )
- DocumentWriter.typekeys( cString )
-
- '///+<li>Verify the string</li>
- DocumentWriter.typeKeys( "<MOD1 END>" )
- DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" )
- EditCopy
- if ( getClipboardText = cString ) then
- printlog( CFN & "Document has been successfully modified." )
- hInitWriteDocIdentifier() = true
- else
- printlog( CFN & "Could not verify document identification string" )
- hInitWriteDocIdentifier() = false
- endif
- '///</ul>
-
-end function
diff --git a/testautomation/framework/tools/includes/javatools.inc b/testautomation/framework/tools/includes/javatools.inc
deleted file mode 100644
index d5ac6fd36148..000000000000
--- a/testautomation/framework/tools/includes/javatools.inc
+++ /dev/null
@@ -1,151 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.Skottke@Sun.Com
-'*
-'* short description : Tools to ease working with files including Java
-'*
-'\******************************************************************************
-
-function hBatchLoadJavaFiles( aFileList() , cIdent as string )
-
- '///<h3>Load and close a list of files with recovery on error</h3>
- '///<u>Input</u>: A list containing files to load<br>
- '///<u>Returns</u>: No returnvalue
- '///<ul>
-
- const CFN = "hBatchLoadJavaFiles::"
-
- dim iSourceFiles as integer
- iSourceFiles = listcount( aFileList() )
-
- dim iCurrentFile as integer
- dim cCurrentFile as string
- dim brc as boolean
-
- '///+<li>Loop through the list, starting at index 2</li>
- for iCurrentFile = 2 to iSourceFiles
-
- cCurrentFile = aFileList( iCurrentFile )
-
- printlog( "" )
- printlog( "Processing file: " & cCurrentFile )
-
- '///+<li>Load a file, verify</li>
- brc = hFileOpen( aFileList( iCurrentFile ) )
- if ( not brc ) then
- warnlog( "Error while loading: " & cCurrentFile )
- endif
-
- '///+<li>close the file, verify</li>
- brc = hDestroyDocument()
- if ( not brc ) then
- warnlog( "Error while closing: " & cCurrentFile )
- endif
-
- '///+<li>There should be one document left: The first doc</li>
- if ( getDocumentCount() = 1 ) then
- brc = hIdentifyWriterDoc( cIdent , false )
- if ( not brc ) then
- warnlog( "Document <" & cIdent & "> is missing, restarting" )
- call ExitRestartTheOffice()
- endif
-
- elseif ( getDocumentCount() <> 1 ) then
- warnlog( "The number of open documents is incorrect, restarting" )
- call ExitRestartTheOffice()
-
- endif
-
- '///+<li>Check for hs_err_pidXXXX.log files (Java Exceptions)</li>
- brc = hFindCopyRemoveJavaLogs( aFileList( 1 ) )
- if ( not brc ) then
- warnlog( "Java Exceptions were created." )
- printlog( "Find the files in your local OOo-work directory." )
- endif
-
- next iCurrentFile
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function hFindCopyRemoveJavaLogs( cSourcePath as string ) as boolean
-
- '///<h3>Search/move hs_err_pidXXXX.log files within a directory recursively</h3>
- '///<u>Input</u>: Start directory<br>
- '///<u>Returns</u>: TRUE if no errors were found
- '///<ul>
-
- ' Reason 1: The files are createn in the CVS tree and must be removed
- ' Reason 2: The files have to be analyzed so the bugs can be fixed
- ' Reason 3: The files must be moved away after each error so they can be
- ' assigned to the correct documents
-
- const CFN = "hFindCopyRemoveJavaLogs::"
-
- dim aSourceFiles( 1000 ) as string
- dim iSourceFiles as integer
- dim aTargetPath as string
- aTargetPath = hGetWorkPath()
-
- dim iCurrentFile as integer
- dim brc as boolean
- brc = true
-
- dim iSPLen as integer ' length of the source-path string + "/" + next letter
- iSPLen = len( cSourcePath ) + 2
-
- '///+<li>Look for leftover hs_err_pidXXXX.log files</li>
- iSourceFiles = GetAllFileList( cSourcePath, "hs_err*.log", aSourceFiles() )
- if ( iSourceFiles > 1 ) then
-
- '///+<li>Print the list to the log</li>
- hListPrint( aSourceFiles(), "New hs_err_pidXXXX.log files exist" )
- brc = false
-
- '///+<li>Copy the hs_err...log files to the local work directory</li>
- for iCurrentFile = 2 to listcount( aSourceFiles() )
-
- ' Create the name of the file we want to copy the hs_err...log to
- aTargetPath = aTargetPath & mid( aSourceFiles( iCurrentFile ) , iSPLen )
- FileCopy( aSourceFiles( iCurrentFile ) , aTargetPath )
-
- '///+<li>Delete the original log file(s)</li>
- hDeleteFile( aSourceFiles( iCurrentFile ) )
-
- next iCurrentFile
-
- else
- Printlog( CFN & "No hs_err_pidXXXX.log file(s) found. Good."
- endif
- '///</ul>
-
- hFindCopyRemoveJavaLogs() = brc
-
-end function
diff --git a/testautomation/framework/tools/includes/options_tools.inc b/testautomation/framework/tools/includes/options_tools.inc
index baffbc968406..27969686dea6 100644..100755
--- a/testautomation/framework/tools/includes/options_tools.inc
+++ b/testautomation/framework/tools/includes/options_tools.inc
@@ -145,84 +145,6 @@ end sub
'*******************************************************************************
-function URLGraphicCheck ( bRelativ as Boolean, sFile as String )
-
- Dim sGraphicPath, sTestString, sDummy as String
- Dim lsFile ( 200 ) as String
- Dim i as Integer
- '///check if the pathname of a linked file is relative or not ( only for func_LoadSaveGeneral_2 )
- sGraphicPath = ( "/share/gallery/photos/desert1.jpg" )
- ListRead ( lsFile(), sFile )
-
- for i=1 to ListCount ( lsFile() )
-
- if Instr( lsFile(i), "IMG SRC" ) <> 0 then
- sTestString = lsFile(i)
- i=1000
- end if
-
- next i
-
- if bRelativ = TRUE then
-
- if Instr( sTestString, "../.." ) = 0 then
- Warnlog "Bug => The path is not relativ!"
- endif
-
- if Instr( sTestString, "file:///" ) <> 0 then
- Warnlog "Bug => The relativ path contains 'file:///'"
- endif
-
- else
- if Instr( sTestString, "file:///" ) = 0 then
- Warnlog "Bug => The path is relativ!"
- endif
-
- if Instr( sTestString, "../.." ) <> 0 then
- Warnlog "Bug => The nonrelativ path ( file:/// ) is not correct. It contains '../..'!"
- endif
-
- end if
-
- if Instr( sTestString, sGraphicPath ) = 0 then
- Warnlog "Wrong path to file, the graphic-part in filename is not correct!"
- endif
-
-end function
-
-'*******************************************************************************
-
-sub DialogTestForViewOptions
-
- FormatParagraph
-
- Kontext
- active.SetPage TabEinzuegeUndAbstaende
- Active.SetPage TabAusrichtungAbsatz
- active.SetPage TabTextfluss
-
- try
- active.SetPage TabAsianTypography
- catch
- endcatch
-
- active.SetPage TabNumerierungAbsatz
- active.SetPage TabTabulator
- active.SetPage TabInitialen
- active.SetPage TabUmrandung
- active.SetPage TabHintergrund
-
- kontext "TabHintergrund"
- TabHintergrund.Close
- EditSearchAndReplace
-
- Kontext "FindAndReplace"
- FindAndReplace.Close
-
-end sub
-
-'*******************************************************************************
-
sub Make3D
'///test with 3D-objects when 3D-options are changed ( view page )
diff --git a/testautomation/framework/tools/includes/pbrowser_tools.inc b/testautomation/framework/tools/includes/pbrowser_tools.inc
index fefc739e48ea..912b3f85aec2 100644..100755
--- a/testautomation/framework/tools/includes/pbrowser_tools.inc
+++ b/testautomation/framework/tools/includes/pbrowser_tools.inc
@@ -31,173 +31,109 @@
'*
'\******************************************************************************
-private const DEBUG_ENABLE = false
-
function hOpenPropertyBrowser() as boolean
-
- '///<h3>Function to open the properties of a selected control</h3>
- '///<i>The function verifies that the property browser is really open and
- '///+ ensures that we are on the General tabpage</i><br><br>
-
- '///<u>Input</u>:
- '///<ol>
-
- '///+<li>Nothing</li>
-
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
-
- '///+<li>Errorcondition (boolean)</li>
- '///<ul>
- '///+<li>TRUE on successful open of the property browser</li>
- '///+<li>FALSE on any error</li>
- '///</ul>
-
- '///</ol>
-
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hOpenPropertyBrowser::"
- dim irc as integer
-
- '///+<li>Open the property browser (call slot)</li>
- irc = hUseAsyncSlot( "ContextProperties" )
-
- ' Check that the slot did indeed get executed. If not: Warn and exit
- if ( irc = -1 ) then
- warnlog( CFN & "hUseAsyncSlot timed out for <ContextProperties>" )
- hOpenPropertyBrowser() = false
- exit function
- endif
-
- '///+<li>Verify that the property browser is open</li>
+
+ '///<h3>Open the BASIC property browser</h3>
+
+ const CFN = "framework::tools::includes::pbrowser_tools.inc::hOpenPropertyBrowser(): "
+
kontext "ControlPropertiesTabControl"
- if ( ControlPropertiesTabControl.exists( 2 ) ) then
-
- '///+<li>Activate General-tabpage</li>
- ControlPropertiesTabControl.setPage( TabGeneralControl )
-
- '///+<li>Verify that the General-tabpage is visible</li>
- kontext "TabGeneralControl"
- if ( TabGeneralControl.isVisible() ) then
- printlog( CFN & "ok" )
- hOpenPropertyBrowser() = true
+ if ( ControlPropertiesTabControl.exists() ) then
+ printlog( "Property Browser is already open, no action taken" )
+ hOpenPropertyBrowser() = true
+ else
+ if ( hUseAsyncSlot( "ContextProperties" ) <> -1 ) then
+ kontext "ControlPropertiesTabControl"
+ if ( ControlPropertiesTabControl.exists( 2 ) ) then
+ ControlPropertiesTabControl.setPage( TabGeneralControl )
+ hOpenPropertyBrowser() = true
+ else
+ warnlog( CFN & "Dialog <ControlPropertiesTabControl> is not available" )
+ hOpenPropertyBrowser() = false
+ endif
else
- printlog( CFN & "General-tab is not visible." )
+ warnlog( CFN & "Could not execute <ContextProperties> slot" )
hOpenPropertyBrowser() = false
- endif
- else
- printlog( CFN & "Could not open property browser" )
- hOpenPropertyBrowser() = false
+ endif
endif
- '///</ul>
-
+
end function
'*******************************************************************************
function hClosePropertyBrowser() as boolean
-
- '///<h3>A function that closes the Property-Browser</h3>
- '///<i>The property browser is closed by executing the slot (the slot
- '///+ toggles the dialog).</i><br><br>
-
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
-
- '///+<li>Errorcondition (boolean)</li>
- '///<ul>
- '///+<li>TRUE if the Property Browser has been closed</li>
- '///+<li>FALSE if the property browser is not open</li>
- '///+<li>FALSE if the property browser could not be closed</li>
- '///</ul>
-
- '///</ol>
-
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hClosePropertyBrowser::"
- '///+<li>Verify that the property browser is open</li>
+ const CFN = "framework::tools::includes::pbrowser_tools.inc::hClosePropertyBrowser(): "
+ printlog( "Closing Property-Browser (if open)" )
+
kontext "ControlPropertiesTabControl"
- if ( ControlPropertiesTabControl.exists( 1 ) ) then
-
- '///+<li>Execute the ContextProperties slot</li>
- ContextProperties
-
- '///+<li>Verify that the property browser is closed</li>
- if ( ControlPropertiesTabControl.exists() ) then
- printlog( CFN & "Property browser could not be closed" )
- hClosePropertyBrowser() = false
- else
- printlog( CFN & "ok" )
+ if ( ControlPropertiesTabControl.exists() ) then
+
+ hUseAsyncSlot( "ContextProperties" )
+
+ if ( ControlPropertiesTabControl.notExists( 2 ) ) then
hClosePropertyBrowser() = true
+ else
+ warnlog( CFN & "Failed to close dialog" )
+ hClosePropertyBrowser() = false
endif
else
- printlog( CFN & "Property browser is not open" )
- hClosePropertyBrowser() = false
+ printlog( "Property browser is not open, no action taken." )
+ hClosePropertyBrowser() = true
endif
- '///</ul>
-
+
end function
'*******************************************************************************
function hPBSetControlName( cControl as string ) as boolean
-
+
'///<h3>Name a control, with limited errorhandling</h3>
-
+
'///<i>This function was introduced due to a problem with the property-
'///browser not being open fast enough or just refusing to accept input</i><br><br>
-
+
'///<u>Input</u>:
'///<ol>
'///+<li>Text to be inserted in the control &quot;NameText&quot; (string)</li>
'///</ol>
-
+
'///<u>Returns</u>:
'///<ol>
-
+
'///+<li>Errorcondition</li>
'///<ul>
'///+<li>TRUE: The control name was successfully updated</li>
'///+<li>FALSE: Control is not visible within current context</li>
'///</ul>
-
+
'///</ol>
-
+
const CFN = "hPBSetControlName::"
-
+
'///<u>Description</u>:
'///<ul>
'///+<li>Test that the control &quot;NameText&quot; exists</li>
+
+ ' Note: A number of fallbacks are used here because the entryfield "NameText"
+ ' is less than reliable. My hope is that one of the methods succeeds.
kontext "TabGeneralControl"
if ( NameText.exists() ) then
'///+<li>Set the new name</li>
- WaitSlot()
-
+ hDeleteEntryFieldContent( NameText )
+
' Name the control and append some Spaces which should be truncated.
printlog( CFN & "Naming control: " & cControl )
NameText.setText( cControl )
- TabGeneralControl.typeKeys( " <RETURN>" )
+ TabGeneralControl.typeKeys( "<RETURN>" )
WaitSlot()
-
- printlog( CFN & "Verifying rename..." )
+
if ( NameText.getText() = cControl ) then
printlog( CFN & "Name is set ok: " & cControl )
hPBSetControlName() = true
exit function
endif
-
+
' If the name cannot be set this is in 99% of the cases a timing problem.
' Here is a (costly) workaround.
qaerrorlog( CFN & "Name not set correctly, retrying" )
@@ -212,55 +148,55 @@ function hPBSetControlName( cControl as string ) as boolean
hPBSetControlName() = true
exit function
endif
-
+
warnlog( CFN & "Unable to set control name: " & cControl )
hPBSetControlName() = false
-
+
else
warnlog( "Unable to name the control." )
hPBSetControlName() = false
endif
'///</ul>
-
+
end function
'*******************************************************************************
function hPBGetControlName( cControl as string ) as boolean
-
+
'///<h3>Verify that the expected control is open</h3>
'///<i>Use hPBSetControlName( string ) to set the name and when you reopen it
'///+ verify that you got the right control wit this function</i><br><br>
-
+
'///<u>Input</u>:
'///<ol>
'///+<li>Name of the control (string)</li>
'///</ol>
-
+
'///<u>Returns</u>:
'///<ol>
-
+
'///+<li>Errorcondition (boolean)</li>
'///<ul>
'///+<li>TRUE: The control has the correct name</li>
'///+<li>FALSE: Any other condition</li>
'///</ul>
-
+
'///</ol>
-
+
'///<u>Description</u>:
'///<ul>
-
+
dim cControlName as string
const CFN = "hPBGetControlName::"
-
+
'///+<li>If &quot;NameText&quot; exists, retrieve its text</li>
kontext "TabGeneralControl"
if ( TabGeneralControl.exists( 1 ) ) then
if ( TabGeneralControl.isVisible() ) then
-
+ wait( 300 )
cControlName = NameText.getText()
-
+
'///+<li>Verify that the name is correct</li>
if ( cControlName = cControl ) then
printlog( CFN & "The name of the control is correct: " & cControl )
@@ -280,100 +216,42 @@ function hPBGetControlName( cControl as string ) as boolean
hPBGetControlName() = false
endif
'///</ul>
-
-end function
-'*******************************************************************************
-
-function hCheckPropertyPresence ( cSetting as string , iPos as integer ) as boolean
-
- '///<h3>Function to determine whether a property is available for a control or not</h3>
- '///<i>This function takes a string (provided by controlcfg.dat) and looks for an 'x' at.
- '///+ a given position. If it is found it returns TRUE, FALSE if it is a '-'<br>
- '///+Note that this function is a terrible workaround for a missing feature: In the current
- '///+ version of the Testtool we cannot ask which controls are present on a dialog. So this
- '///+ has to be kept in a list of some sort. This is especially bad for a property browser
- '///+ test as we need to maintain such a list for 21 controls and a total of 76 (IIRC)
- '///+ possible properties whereof only a small number (eight, i think) are common for all
- '///+ controls. The test is barely maintainable, issues have been written but there is
- '///+ no solution so far.</i><br><br>
-
- '///<u>Input</u>:
- '///<ol>
-
- '///+<li>Configuration string (string)</li>
- '///<ul>
- '///+<li>The string must be taken from file &quot;controlcfg.dat&quot;</li>
- '///</ul>
-
- '///+<li>Position of the control (integer)</li>
- '///<ul>
- '///+<li>&gt; 0 and &lt; 74 (all possible control config items)</li>
- '///</ul>
-
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Status (boolean)</li>
- '///<ul>
- '///+<li>TRUE: The property should exist for the current control</li>
- '///+<li>FALSE: The property is not expected to exist for this control</li>
- '///</ul>
-
- '///</ol>
-
- '///<u>Description</u>:
- '///<ul>
-
- ' this function looks at a given position in the string cSetting for either
- ' a "x" or a "-".
- ' if "x" is found, the function returns true, else false.
-
-
- '///+<li>Find the requested position in the string, set TRUE if it is an &quot;x&quot;</li>
- if ( mid( cSetting , iPos , 1 ) = "x" ) then
- hCheckPropertyPresence() = true
- else
- hCheckPropertyPresence() = false
- endif
- '///</ul>
-
end function
'*******************************************************************************
function hSetPBTabPage( iPage as integer ) as boolean
-
+
'///<h3>A small helper to switch between tabpages in the property-browser</h3>
'///<u>Input</u>:
'///<ol>
-
+
'///+<li>Page-ID (integer)</li>
'///<ul>
'///+<li>1 = General page</li>
'///+<li>2 = Events page</li>
'///</ul>
-
+
'///</ol>
-
+
'///<u>Returns</u>:
'///<ol>
-
+
'///+<li>Errorcondition (boolean)</li>
'///<ul>
'///+<li>TRUE on success</li>
'///+<li>FALSE on any error</li>
'///</ul>
-
+
'///</ol>
-
+
'///<u>Description</u>:
'///<ul>
-
+
const CFN = "hSetPBTabPage::"
printlog( CFN & "Enter with option: " & iPage )
-
+
'///+<li>Switch to the requested page</li>
kontext "ControlPropertiesTabControl"
if ( not ControlPropertiesTabControl.exists( 3 ) ) then
@@ -381,18 +259,18 @@ function hSetPBTabPage( iPage as integer ) as boolean
hSetPBTabPage() = false
exit function
else
- if ( DEBUG_ENABLE ) then
+ if ( GVERBOSE ) then
printlog( CFN & "Control Properties Dialog is open" )
endif
endif
-
+
select case iPage
- case 1
-
+ case 1
+
printlog( CFN & "Switching to control properties tabpage" )
kontext "ControlPropertiesTabControl"
ControlPropertiesTabControl.setPage TabGeneralControl
-
+
kontext "TabGeneralControl"
if ( nametext.exists( 5 ) ) then
printlog( CFN & "Exit: Control properties are open (true)" )
@@ -403,13 +281,13 @@ function hSetPBTabPage( iPage as integer ) as boolean
hSetPBTabPage() = false
exit function
endif
-
+
case 2
-
+
printlog( CFN & "Switching to event assignment tabpage" )
kontext "ControlPropertiesTabControl"
ControlPropertiesTabControl.setPage TabEventsControl
-
+
kontext "TabEventsControl"
if ( PBFocusGained.exists( 5 ) ) then
printlog( CFN & "Exit: Events page is open (true)" )
@@ -420,57 +298,32 @@ function hSetPBTabPage( iPage as integer ) as boolean
hSetPBTabPage() = false
exit function
endif
-
+
case else
-
+
printlog( CFN & "Invalid parameter passed to function: " & iPage )
hSerPBTabPage() = false
exit function
-
+
end select
'///</ul>
-
+
end function
'*******************************************************************************
-function hSetLabelName( sLabelName as string ) as boolean
-
- '///<h3>Name a control, with limited errorhandling</h3>
-
- '///<i>This function was introduced due to a problem with the property-
- '///browser not being open fast enough or just refusing to accept input</i><br><br>
-
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Text to be inserted in the control &quot;NameText&quot; (string)</li>
- '///</ol>
-
- '///<u>Returns</u>:
- '///<ol>
-
- '///+<li>Errorcondition</li>
- '///<ul>
- '///+<li>TRUE: The control name was successfully updated</li>
- '///+<li>FALSE: Control is not visible within current context</li>
- '///</ul>
-
- '///</ol>
-
- '///<u>Description</u>:
- '///<ul>
- '///+<li>Test that the control &quot;NameText&quot; exists</li>
- kontext "TabGeneralControl"
- if ( Label.exists() ) then
- '///+<li>Set the new name</li>
- Label.setText( sLabelName )
- TabGeneralControl.TypeKeys ("<RETURN>" , true)
- hSetLabelName() = true
+function hDeleteEntryFieldContent( oControl as object ) as boolean
+
+ printlog( "Original name is: " & oControl.getText() )
+
+ oControl.typeKeys( "<HOME>" )
+ oControl.typeKeys( "<SHIFT END>" )
+ oControl.typeKeys( "<DELETE>" )
+
+ if ( oControl.getText() = "" ) then
+ hDeleteEntryFieldContent() = true
else
- warnlog( "Unable to name the control." )
- hSetLabelName() = false
+ hDeleteEntryFieldContent() = false
endif
- '///</ul>
-
-end function
+end function
diff --git a/testautomation/framework/tools/includes/performance.inc b/testautomation/framework/tools/includes/performance.inc
deleted file mode 100644
index 01d46d7df415..000000000000
--- a/testautomation/framework/tools/includes/performance.inc
+++ /dev/null
@@ -1,69 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Tools to speed up test case performance
-'*
-'\******************************************************************************
-
-private const VERBOSE = true
-
-function hWaitForObject( oControl as object, iTime as integer ) as integer
-
- const CFN = "hWaitForObject()::"
- dim iWait as integer
-
- if ( VERBOSE ) then printlog( CFN & "Entering function for control: " & oControl.name() )
-
- WaitSlot( 2000 )
-
- for iWait = 0 to iTime
- try
- if ( oControl.isEnabled() ) then
- printlog( CFN & "Control is enabled: " & oControl.name() )
- hWaitForObject() = 0
- exit function
- else
- if ( VERBOSE ) then printlog( "Waiting..." )
- endif
- catch
- wait( 1 )
- endcatch
- next iWait
-
- printlog( CFN & "Control not found or not enabled, timeout reached" )
- hWaitForObject() = -1
-
-end function
-
-
-
-
-
-
-
diff --git a/testautomation/framework/tools/includes/scriptorganizer_tools.inc b/testautomation/framework/tools/includes/scriptorganizer_tools.inc
index e141448b5b79..0b09ed6270ac 100644..100755
--- a/testautomation/framework/tools/includes/scriptorganizer_tools.inc
+++ b/testautomation/framework/tools/includes/scriptorganizer_tools.inc
@@ -55,28 +55,12 @@ function hCreateScriptingObject( cName as string ) as boolean
const CFN = "hNewScriptingObject::"
- dim brc as boolean
- '///+<li>Verify the function parameter</li>
- if ( cName = "" ) then
- warnlog( CFN & "Empty Name for scripting object passed to function" )
- hCreateScriptingObject() = false
- exit function
- endif
-
- '///+<li>Verify that the &quot;Create...&quot; button exists</li>
- Kontext "ScriptOrganizer"
- if ( not PBCreate.exists( 2 ) ) then
- warnlog( CFN & "Create-button does not exist" )
- hCreateScriptingObject() = false
- exit function
- endif
-
'///+<li>Verify that the &quot;Create...&quot; button is enabled</li>
if ( PBCreate.isEnabled() ) then
'///+<li>Click &quot;Create...&quot; to open the naming dialog</li>
- PBCreate.click()
+ hClickButton( PBCreate )
'///+<li>Name the new script</li>
Kontext "ScriptNameDlg"
@@ -84,23 +68,22 @@ function hCreateScriptingObject( cName as string ) as boolean
EFObjectName.setText( cName )
ScriptNameDlg.OK()
- brc = true
+ hCreateScriptingObject() = true
endif
else
printlog( CFN & "Button is disabled" )
- brc = false
+ hCreateScriptingObject() = false
endif
'///+<li>Verify that we are back on the script organizer</li>
kontext "ScriptOrganizer"
if ( not ScriptOrganizer.exists( 2 ) ) then
warnlog( CFN & "Could not return to ScriptOrganizer" )
- brc = false
+ hCreateScriptingObject() = false
endif
- hCreateScriptingObject() = brc
'///</ul>
end function
@@ -129,63 +112,35 @@ function hRenameScriptingObject( cName as string ) as boolean
'///<u>Description</u>:
'///<ul>
- use "global\tools\includes\optional\t_stringtools.inc"
-
const CFN = "hRenameScriptingObject::"
- dim cMessage as string
- dim brc as boolean
-
- brc = true
-
- '///+<li>Verify the function parameter</li>
- if ( cName = "" ) then
- warnlog( CFN & "Empty Name for scripting object passed to function" )
- hRenameScriptingObject() = false
- exit function
- endif
-
- '///+<li>Verify that the &quot;Rename...&quot; button exists</li>
- Kontext "ScriptOrganizer"
- if ( not PBRename.exists( 2 ) ) then
- warnlog( CFN & "Rename button does not exist, aborting" )
- hRenameScriptingObject() = false
- exit function
- endif
-
- '///+<li>Verify that the &quot;Rename...&quot; button is enabled</li>
- if ( PBRename.isEnabled() ) then
+ hRenameScriptingObject() = true
- '///+<li>Click &quot;Rename...&quot; to open the renaming dialog</li>
- PBRename.click()
-
- '///+<li>Name the new script</li>
- Kontext "ScriptNameDlg"
- if ( ScriptNameDlg.exists( 2 ) ) then
-
- EFObjectName.setText( cName )
- ScriptNameDlg.OK()
-
- '///+<li>Test for any messagebox, try to close it with OK</li>
- kontext "active"
- if ( active.exists( 1 ) ) then
- cMessage = hRemoveLineBreaks( active.getText )
- printlog( CFN & cMessage )
- brc = false
- active.OK()
- endif
-
+ '///+<li>Click &quot;Rename...&quot; to open the renaming dialog</li>
+ hClickButton( PBRename )
+
+ '///+<li>Name the new script</li>
+ Kontext "ScriptNameDlg"
+ if ( ScriptNameDlg.exists( 2 ) ) then
+
+ EFObjectName.setText( cName )
+ hCloseDialog( ScriptNameDlg, "ok" )
+
+ '///+<li>Test for any messagebox, try to close it with OK</li>
+ kontext "active"
+ if ( active.exists( 1 ) ) then
+ printlog( CFN & active.getText() )
+ hRenameScriptingObject() = false
+ active.OK()
endif
-
+
endif
'///+<li>Verify that we are back on the script organizer</li>
kontext "ScriptOrganizer"
if ( not ScriptOrganizer.exists( 2 ) ) then
warnlog( CFN & "Could not return to ScriptOrganizer" )
- brc = false
+ hRenameScriptingObject() = false
endif
-
- hRenameScriptingObject() = brc
'///</ul>
end function
@@ -220,11 +175,7 @@ function hDeleteScript( cName as string , bSuccess as boolean ) as boolean
'///<u>Description</u>:
'///<ul>
- use "global\tools\includes\optional\t_stringtools.inc"
-
const CFN = "hDeleteScript::"
- dim iPos as integer
- dim cMessage as string
'///+<li>Test for the possible conditions:</li>
'///<ol>
@@ -232,19 +183,17 @@ function hDeleteScript( cName as string , bSuccess as boolean ) as boolean
kontext "ScriptOrganizer"
if ( PBDelete.isEnabled() and bSuccess ) then
- PBDelete.click()
+ hClickButton( PBDelete )
kontext "active"
- cMessage = active.getText()
- cMessage = hRemoveLineBreaks( cMessage )
- printlog( CFN & cMessage )
- active.yes()
+ if ( Active.exists( 1 ) ) then
+ printlog( CFN & active.getText() )
+ active.yes()
+ endif
kontext "active"
if ( active.exists( 1 ) ) then
- cMessage = active.getText()
- cMessage = hRemoveLineBreaks( cMessage )
qaerrorlog( CFN & "Message: Failed to delete object: " & cName )
- printlog( CFN & cMessage )
+ printlog( CFN & active.getText() )
active.ok()
endif
hDeleteScript() = true
@@ -257,24 +206,20 @@ function hDeleteScript( cName as string , bSuccess as boolean ) as boolean
'///+<li>Delete is enabled but should not be (failure)</li>
elseif ( PBDelete.isEnabled() and ( not bSuccess ) ) then
-
- PBDelete.click()
+
+ hClickButton( PBDelete )
kontext "active"
if ( active.exists( 1 ) ) then
- cMessage = active.getText()
- cMessage = hRemoveLineBreaks( cMessage )
printlog( CFN & "Delete-Button enabled for non deletable object" )
- printlog( CFN & cMessage )
+ printlog( CFN & active.getText() )
active.yes()
endif
kontext "active"
if ( active.exists( 2 ) ) then
- cMessage = active.getText()
- cMessage = hRemoveLineBreaks( cMessage )
printlog( CFN & "Message: Failed to delete object" )
- printlog( CFN & cMessage )
+ printlog( CFN & active.getText() )
active.ok()
endif
hDeleteScript() = false
@@ -335,85 +280,12 @@ function hOpenScriptOrganizer( iDialog as integer ) as boolean
kontext "ScriptOrganizer"
if ( ScriptOrganizer.exists( 5 ) ) then
hOpenScriptOrganizer() = true
- printlog( CFN & "Dialog is open" )
+ printlog( "Script Organizer is open" )
else
- hopenScriptOrganizer() = false
+ hOpenScriptOrganizer() = false
warnlog( CFN & "Slot failed, dialog not open" )
endif
'///</ul>
end function
-
-'*******************************************************************************
-
-function hCloseScriptOrganizer() as boolean
-
- '///<h3>Close a Script Organizer (Cancel)</h3>
- '///<i>Starting point: Any open Script Organizer</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorcondition (boolean)</li>
- '///<ul>
- '///+<li>TRUE if the Script Organizer was closed</li>
- '///+<li>FALSE if the Script Organizer is still open</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
-
- const CFN = "hCloseScriptOrganizer::"
-
- hCloseScriptOrganizer() = false
-
- '///+<li>Try to close the script </li>
- kontext "ScriptOrganizer"
- if ( ScriptOrganizer.exists( 5 ) ) then
- ScriptOrganizer.cancel()
- hCloseScriptOrganizer() = true
- endif
-
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function hOpenRunMacroDialog() as boolean
-
- '///<h3>Open the &quot;Run Macro&quot; dialog</h3>
- '///<i>Starting point: Any document</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorcondition</li>
- '///<ul>
- '///+<li>TRUE if dialog is open</li>
- '///+<li>FALSE if the Script Selector does not exist</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
-
- '///+<li>Execute the ToolsMacrosRunMacro slot</li>
- ToolsMacrosRunMacro
-
- '///+<li>Verify that the dialog is present</li>
- kontext "ScriptSelector"
- if ( ScriptSelector.exists( 2 ) ) then
- hOpenRunMacroDialog() = true
- else
- hOpenRunMacroDialog() = false
- endif
- '///</ul>
-
-end function
diff --git a/testautomation/framework/tools/includes/signature_tools.inc b/testautomation/framework/tools/includes/signature_tools.inc
deleted file mode 100644
index de9c56389eb0..000000000000
--- a/testautomation/framework/tools/includes/signature_tools.inc
+++ /dev/null
@@ -1,90 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Tools to ease working with digital signatures
-'*
-'\******************************************************************************
-
-function hSelectXMLSecTab( cTab as string ) as boolean
-
-
- '///<h3>Switch between tabpages on the Ceritficates/XML-Security Tabpage</h3>
-
- '///<u>Input value(s):</u><br>
- '///<ol>
- '///+<li>Identifier for the requested tabpage (string). Valid options are:</li>
- '///<ul>
- '///+<li>&quot;GENERAL&quot; for the general (first page)</li>
- '///+<li>&quot;DETAILS&quot; for the details (second page)</li>
- '///+<li>&quot;PATH&quot; for the certification path (third page)</li>
- '///</ul>
- '///</ol>
-
-
- '///<u>Return Value:</u><br>
- '///<ol>
- '///+<li>Nothing</li>
- '///</ol>
-
-
- '///<u>Description:</u>
- '///<ul>
-
- dim brc as boolean
- brc = false
- const CFN = "hSelectXMLSecTab::"
-
- '///+<li>Switch page</li>
- kontext
-
- select case ( ucase( cTab ) )
- case "GENERAL" : active.setpage TabXMLSecGeneral
- if ( TabXMLSecGeneral.exists() ) then
- brc = true
- printlog( CFN & "Switched to General page" )
- endif
-
- case "DETAILS" : active.setpage TabXMLSecDetails
- if ( TabXMLSecDetails.exists() ) then
- brc = true
- printlog( CFN & "Switched to Details page" )
- endif
-
- case "PATH" : active.setpage TabXMLSecCertPath
- if ( TabXMLSecCertPath.exists() ) then
- brc = true
- printlog( CFN & "Switched to Certification Path page" )
- endif
- end select
-
- '///+<li>Set returnvalue</li>
- hSelectXMLSecTab() = brc
- '///</ul>
-
-end function
diff --git a/testautomation/framework/tools/includes/spadmin_tools.inc b/testautomation/framework/tools/includes/spadmin_tools.inc
index f444b4821a5f..b31e5dbe5a58 100644..100755
--- a/testautomation/framework/tools/includes/spadmin_tools.inc
+++ b/testautomation/framework/tools/includes/spadmin_tools.inc
@@ -109,8 +109,6 @@ function hDelPrinter( cPrinterName as string ) as integer
endif
dim iPrinterPos as integer
- dim iErr as integer
- iErr = 1
Kontext "SpAdmin"
iPrinterPos = hGetPrinterPosition( cPrinterName , true )
@@ -125,25 +123,24 @@ function hDelPrinter( cPrinterName as string ) as integer
if ( active.exists( 2 ) ) then
Active.Yes()
printlog( CFN & "Printer Queue deleted" )
- iErr = 0
+ hDelPrinter() = 0
else
warnlog( CFN & "Confirm Delete Dialog is missing" )
- iErr = 1
+ hDelPrinter() = 1
endif
catch
warnlog( CFN & "Unable to confirm printer deletion" )
- iErr = 2
+ hDelPrinter() = 2
endcatch
else
printlog( CFN & "The printer queue does not exist" )
- iErr = 3
+ hDelPrinter() = 3
endif
Kontext "SpAdmin"
- hDelPrinter() = iErr
end function
@@ -151,55 +148,17 @@ end function
function hGetSpadminPath() as string
- '///<h3>Retrieve the path to the SpAdmin script/binary</h3>
- const CFN = "hGetSpadminPath::"
- const C_REL_PATH = "program\spadmin"
-
- dim sPath as string
-
- sPath = gNetzOfficePath & C_REL_PATH
- sPath = convertpath( sPath )
-
- printlog( CFN & "Using SPAdmin from: " & sPath
-
- hGetSpadminPath() = sPath
+ hGetSpadminPath() = convertpath( gNetzOfficePath & "program\spadmin" )
end function
'*******************************************************************************
-function hShutdownOffice() as integer
+function hShutdownOffice()
- '///<h3>Shutdown the office by closing all docs and the backing window</h3>
- const CFN = "hShutdownOffice::"
-
- dim iOpenDocs as integer
- iOpenDocs = getDocumentCount()
- dim iThisDoc as integer
-
- ' close all open documents (One open document to remain)
- for iThisDoc = 1 to iOpenDocs
- call hCloseDocument()
- next iThisDoc
-
- ' see how many documents are still open - should be exactly one
- iOpenDocs = getDocumentCount()
- if ( iOpenDocs <> 0 ) then
- warnlog( CFN & "No open documents expected but found: " & iOpenDocs )
- endif
-
- ' shutdown the backing window, do not test with getDocumentCount() because
- ' this would inevitably restart the office
- ' we need some additional parameter for FileExit, this is a bug
+ hFileCloseAll()
FileExit( "SynchronMode", TRUE )
-
- ' wait long enough to ensure all office threads are removed from memory
- sleep( 5 )
-
- ' Print a somehow fuzzy message, we do not know for sure whether the office
- ' has been shutdown or not
- printlog( CFN & "The office should have been closed by now." )
- hShutdownOffice() = iOpenDocs
+ Wait( 5000 )
end function
@@ -207,27 +166,16 @@ end function
function hOpenSpadmin() as boolean
- '///<h3>Execute the SpAdmin binary/Script and verify that it is open</h3>
- ' Return TRUE if hWaitForSpadmin() completes successfully
-
- const CFN = "hOpenSpadmin::"
-
- dim cSpadminPath as string
- cSpadminPath = hGetSpadminPath()
+ dim cSpadminPath as string : cSpadminPath = hGetSpadminPath()
- dim brc as boolean
-
- ' start SPAdmin in automation mode.
try
start( cSpadminPath , "-enableautomation" )
- printlog( CFN & "SpAdmin command executed successfully" )
- brc = true
+ printlog( "Printer administration start-command was dispatched correctly" )
+ hOpenSpAdmin() = true
catch
- warnlog( CFN & "Failure: SpAdmin command did not succeed" )
- brc = false
+ warnlog( "hOpenSpAdmin(): Failed to open printer administration tool" )
+ hOpenSpAdmin() = false
endcatch
-
- hOpenSpAdmin() = brc
end function
@@ -235,23 +183,15 @@ end function
function hWaitForSpAdmin() as boolean
- '///<h3>Wait for SpAdmin to be loaded and displayed</h3>
- const CFN = "hWaitForSpAdmin::"
-
- dim bOpen as boolean
-
- ' Wait for SpAdmin to open
kontext "SpAdmin"
if ( SpAdmin.exists( 10 ) ) then
- printlog( CFN & "SpAdmin is open. Good." )
+ printlog( "Printer administration tool is open" )
+ hWaitForSpadmin() = true
sleep( 10 )
- bOpen = true
else
- warnlog( CFN & "SpAdmin is not open, the test cannot continue" )
- bOpen = false
+ warnlog( "hWaitForSpAdmin(): The dialog did not open within 10 seconds, aborting" )
+ hWaitForSpadmin() = false
endif
-
- hWaitForSpadmin() = bOpen
end function
diff --git a/testautomation/framework/tools/includes/tabpages.inc b/testautomation/framework/tools/includes/tabpages.inc
deleted file mode 100644
index f22b8bd5a206..000000000000
--- a/testautomation/framework/tools/includes/tabpages.inc
+++ /dev/null
@@ -1,95 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Tools to access special tabpages
-'*
-'\******************************************************************************
-
-function hDocumentInfoSelectTab( cTabPage as string ) as boolean
-
-
- '///<h3>Switch between the tabpages in the document info dialog</h3>
- '///<i>The declaration of the document info dialog is not complete which
- '///+ enforces special treatment</i><br><br>
-
- '///<u>Parameter(s):</u><br>
- '///<ol>
-
- '///+<li>The name of the tabpage to be activated (String)</li>
- '///<ul>
- '///+<li>&quot;General&quot;</li>
- '///+<li>&quot;Description&quot;</li>
- '///+<li>&quot;User&quot;</li>
- '///+<li>&quot;Internet&quot;</li>
- '///+<li>&quot;Statistics&quot;</li>
- '///+<li>The string is case insensitive</li>
-
- '///</ul>
-
- '///</ol>
-
-
- '///<u>Returns:</u><br>
- '///<ol>
- '///+<li>Errorcondition (Boolean)</li>
- '///<ul>
- '///+<li>TRUE if tabpage is known and switching worked</li>
- '///+<li>FALSE on icorrect input parameter</li>
- '///+<li>FALSE on any other error</li>
- '///</ul>
- '///</ol>
-
- const CFN = "hDocumentInfoSelectTab::"
- printlog( CFN & "Enter with option (tabpage): " & cTabPage )
- dim brc as boolean 'a multi purpose boolean returnvalue
- brc = true
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Kontext to the dialog</li>
- Kontext
-
- '///+<li>Select the page to switch to, context to the new page</li>
- select case ( ucase( cTabPage ) )
- case "GENERAL" : active.setPage TabDokument : kontext "TabDokument"
- case "DESCRIPTION" : active.setPage TabBeschreibung : kontext "TabBeschreibung"
- case "USER" : warnlog( "#i95523# - Cannot access controls on Custom page" )
- brc = false
- 'active.setPage TabBenutzer : kontext "TabBenutzer"
- case "INTERNET" : active.setPage TabInternet : kontext "TabInternet"
- case "STATISTICS" : active.setPage TabStatistik : kontext "TabStatistik"
- case default : brc = false
- end select
-
- '///</ul>
-
- printlog( CFN & "Exit with result: " & brc )
- hDocumentInfoSelectTab() = brc
-
-end function
diff --git a/testautomation/framework/tools/includes/template_tools.inc b/testautomation/framework/tools/includes/template_tools.inc
index 6363bae7aaf9..5a1370b77262 100644..100755
--- a/testautomation/framework/tools/includes/template_tools.inc
+++ b/testautomation/framework/tools/includes/template_tools.inc
@@ -127,86 +127,6 @@ end function
'*******************************************************************************
-function hGetRefFilePath( cCategory as string, location as string) as string
-
- '///<h3>Retrieve the location of the reference files for filename comparision</h3>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Category (string)</li>
- '///<ul>
- '///+<li>&quot;NEWDOCUMENTS&quot; for New Documents</li>
- '///+<li>&quot;TEMPLATES&quot; for Templates</li>
- '///+<li>&quot;SAMPLES&quot; for Samples</li>
- '///</ul>
- '///+<li>Location (string)</li>
- '///<ul>
- '///+<li>&quot;TESTTOOL&quot; to use files below gTesttoolPath</li>
- '///+<li>&quot;LOCAL&quot; to use files below gOfficePath/user/work</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Fully qualified path to workfile (string)</li>
- '///</ol>
-
- '///<u>Description</u>:
- '///<ul>
-
- dim cFile as string
-
- cCategory = ucase( cCategory )
-
- '///+<li>Retrieve the location</li>
- '///<ul>
- '///+<li>For TESTTOOL</li>
- '///<ul>
- if ( ucase( location ) = "TESTTOOL" ) then
-
- '///+<li>Prepend path within testtool-environment</li>
- cFile = "framework\update\input\templdoc\" & gProductName
-
- '///+<li>Build a name containing langcode and .txt suffix</li>
- if ( cCategory = "NEWDOCUMENTS" ) then
- cFile = cFile & "\new_" & iSprache & ".txt"
- elseif ( cCategory = "TEMPLATES" ) then
- cFile = cFile & "\tem_" & iSprache & ".txt"
- elseif ( cCategory = "SAMPLES" ) then
- cFile = cFile & "\sam_" & iSprache & ".txt"
- else
- warnlog( "Invalid category passed to hGetRefFilePath" )
- endif
-
- '///+<li>Set returnvalue</li>
- hGetRefFilePath() = convertpath( gTesttoolPath & cFile )
-
- '///</ul>
- '///+<li>For LOCAL</li>
- '///<ul>
- elseif ( ucase( location ) = "LOCAL" ) then
-
- '///+<li>Build a name containing langcode and .txt suffix</li>
- if ( cCategory = "NEWDOCUMENTS" ) then
- cFile = "new_" & iSprache & ".txt"
- elseif ( cCategory = "TEMPLATES" ) then
- cFile = "tem_" & iSprache & ".txt"
- elseif ( cCategory = "SAMPLES" ) then
- cFile = "sam_" & iSprache & ".txt"
- else
- warnlog( "Invalid category passed to hGetRefFilePath" )
- endif
-
- '///+<li>Set returnvalue</li>
- hGetRefFilePath() = convertpath( hGetWorkPath() & cFile )
-
- end if
- '///</ul>
- '///</ul>
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
function hSelectCategory( cCategory as string ) as boolean
'///<h3>Select a category from the left pane of the templates dialog</h3>
diff --git a/testautomation/framework/tools/includes/toolbar_tools.inc b/testautomation/framework/tools/includes/toolbar_tools.inc
index e0952bfd9a2e..8d0b198b0441 100644..100755
--- a/testautomation/framework/tools/includes/toolbar_tools.inc
+++ b/testautomation/framework/tools/includes/toolbar_tools.inc
@@ -73,7 +73,8 @@ function hAccessStandardBar() as boolean
endif
'///+<li>Close the navigator</li>
- hCloseNavigator()
+ kontext "Navigator"
+ hCloseDialog( Navigator, "close,optional" )
'///+<li>Close the document</li>
hDestroyDocument()
@@ -103,6 +104,13 @@ function hResetStandardBar() as boolean
'///<ul>
const CFN = "hResetStandardBar::"
+ const MIN_STATIC_DELAY = 1
+ const DEFAULT_DELAY = 2
+ const MENUITEM_RESTORE = 1
+ const MENUITEM_CLOSEMENU = 0
+ const TOOLBAR_MENUITEM_CUSTOMIZE = 2
+ const EXPECTED_RESOURCE_ID = 304
+
printlog( CFN & "Enter" )
@@ -115,36 +123,36 @@ function hResetStandardBar() as boolean
'///+<li>Open the context menu on Standardbar</li>
Standardbar.OpenContextmenu
- sleep( 1 )
+ sleep( MIN_STATIC_DELAY )
'///+<li>Click on 2. entry (Cutomize Toolbar)</li>
- hMenuselectNr (2)
- sleep( 1 )
+ hMenuselectNr ( TOOLBAR_MENUITEM_CUSTOMIZE )
+ sleep( MIN_STATIC_DELAY )
kontext
Active.SetPage TabCustomizeToolbars
- sleep( 1 )
+ sleep( MIN_STATIC_DELAY )
'///+<li>Toggle to 'Toolbars' tab page.</li>
kontext "TabCustomizeToolbars"
- if TabCustomizeToolbars.Exists( 2 ) then
- sleep( 1 )
+ if TabCustomizeToolbars.Exists( DEFAULT_DELAY ) then
+ sleep( MIN_STATIC_DELAY )
'///+<li>Press in first section '... Toolbars' the 'toolbar'-button</li>
MenuBtn.Click
- sleep( 1 )
+ sleep( MIN_STATIC_DELAY )
'///+<li>A drop down menu will be opened.</li>
'///+<li>Select the first enabled menu entry which should be 'Restore...'</li>
- hMenuSelectNr(1)
- sleep( 1 )
+ hMenuSelectNr( MENUITEM_RESTORE )
+ sleep( MIN_STATIC_DELAY )
kontext
- if ( active.exists( 2 ) ) then
- if Active.GetRT = 304 then
+ if ( active.exists( DEFAULT_DELAY ) ) then
+ if ( Active.GetRT = EXPECTED_RESOURCE_ID ) then
'///+<li>Press Yes button on verification dialog.</li>
- Active.Yes
+ Active.Yes()
end if
else
warnlog( "No verification comes up if the RESET button has been pressed!" )
@@ -152,11 +160,11 @@ function hResetStandardBar() as boolean
'///+<li>Close 'Toolbars' tab page and the dialog with OK.</li>
kontext "tabcustomizetoolbars"
- TabCustomizeToolbars.OK
+ hCloseDialog( TabCustomizeToolbars, "ok" )
else
warnlog( "Cutomuze Toolbar not open (from context menu)" )
'Closing the Context menu if the dialog does not come up.
- Menuselect(0)
+ Menuselect( MENUITEM_CLOSEMENU )
endif
else
@@ -192,8 +200,7 @@ function hStandardbarItemGetCount() as integer
'///<ul>
dim iToolbarItemsCurrent as integer
- dim iToolbarItemsExpected as integer
- iToolbarItemsExpected = 30
+ const EXPECTED_TOOLBAR_ITEMCOUNT = 30
const CFN = "hStandardbarItemGetCount::"
@@ -220,10 +227,10 @@ function hStandardbarItemGetCount() as integer
' items on the standardbar, OOo and its spinoffs have 30.
- if ( iToolbarItemsCurrent = iToolbarItemsExpected ) then
+ if ( iToolbarItemsCurrent = EXPECTED_TOOLBAR_ITEMCOUNT ) then
printlog( CFN & "Correct number of items on the StandardBar. Good" )
else
- warnlog( CFN & "Expected: " & iToolbarItemsExpected & _
+ warnlog( CFN & "Expected: " & EXPECTED_TOOLBAR_ITEMCOUNT & _
" entries, found: " & iToolbarItemsCurrent )
endif
@@ -252,7 +259,8 @@ function hToggleToolbarItem( iMenuPos as integer )
'///<u>Description</u>:
'///<ul>
- const CFN = "hToggleToolbarItem::"
+ const CFN = "hToggleToolbarItem::"
+ const INVISIBLE_ITEMS_MODIFIER = 3
dim iItemsInMenu as integer
printlog( CFN & "Enter with option (Menu position): " & iMenuPos )
@@ -268,7 +276,7 @@ function hToggleToolbarItem( iMenuPos as integer )
' (those that are invisible will be listed as context menu entries),
' the menuitem (invisible items) is placed at position nItems - 3
'///+<li>Take the number of items -3, select the entry</li>
- hMenuselectNr( iItemsInMenu - 3 )
+ hMenuselectNr( iItemsInMenu - INVISIBLE_ITEMS_MODIFIER )
'///+<li>Select the provided menu position</li>
hMenuselectNr( iMenuPos )
@@ -300,8 +308,7 @@ function hStandardbarLoadUrl() as boolean
' written to and disabled again (no use of reset toolbar here, this is
' done in another testcase
- dim iItemMenuPos as integer
- iItemMenuPos = 1
+ dim iItemMenuPos as integer : iItemMenuPos = 1
const ITEM_MENU_POSITION = 1
const CFN = "hStandardbarLoadUrl::"
@@ -367,6 +374,10 @@ function hStandardbarNewDialog()
const CFN = "hStandardbarNewDialog::"
const ITEM_MENU_POSITION = 3
+ const TEMPLATE_DIALOG_MAX_RETRIES = 3
+ const RC_TIMEOUT = -1
+
+ dim iTry as integer
printlog( CFN & "Enter" )
@@ -383,35 +394,36 @@ function hStandardbarNewDialog()
hToggleToolbarItem( ITEM_MENU_POSITION )
'///+<li>click the button</li>
- Kontext "Standardbar"
- sleep( 1 )
- try
- NeuDialog.click()
- catch
- endcatch
-
- '///+<li>handle possible dialogs (there should never be one)</li>
- kontext "Active"
- if ( active.exists( 1 ) ) then
- warnlog( CFN & "Unexpected active" )
- printlog( CFN & active.gettext() )
- try
- printlog( CFN & "Closing dialog" )
- active.ok()
- catch
- warnlog( CFN & "Unknown dialog blocks test, now crashing" )
- endcatch
- endif
+ for iTry = 1 to TEMPLATE_DIALOG_MAX_RETRIES
+
+ Kontext "Standardbar"
+ hClickButton( NeuDialog )
+
+ '///+<li>handle possible dialogs (there should never be one)</li>
+ kontext "Active"
+ if ( active.exists() ) then
+ warnlog( CFN & "Unexpected active" )
+ printlog( CFN & active.gettext() )
+ if ( hCloseDialog( Active, "ok" ) = RC_TIMEOUT ) then
+ warnlog( CFN & "Unknown dialog blocks test, now crashing" )
+ endif
+ endif
+
+ '///+<li>close the templates and samples dialog</li>
+ printlog( CFN & "Close templates and samples (cancel)" )
+ Kontext "TemplateAndDocuments"
+ if ( TemplateAndDocuments.Exists( 5 ) ) then
+ hCloseDialog( TemplateAndDocuments, "cancel" )
+ exit for
+ else
+ if ( iTry = TEMPLATE_DIALOG_MAX_RETRIES ) then
+ warnlog( CFN & "The 'Template and Documents'-dialog was not activated" )
+ endif
+ endif
+
+ next iTry
+
- '///+<li>close the templates and samples dialog</li>
- printlog( CFN & "Close templates and samples (cancel)" )
- Kontext "TemplateAndDocuments"
- if ( TemplateAndDocuments.Exists( 5 ) ) then
- TemplateAndDocuments.cancel()
- else
- warnlog( CFN & "The 'Template and Documents'-dialog was not activated" )
- endif
-
'///+<li>finally remove the button from the toolbar</li>
printlog( CFN & "Deactivate New from Template button" )
hToggleToolbarItem( ITEM_MENU_POSITION )
@@ -455,7 +467,7 @@ function hStandardbarSaveAs()
kontext "SpeichernDlg"
if ( SpeichernDlg.exists( 1 ) ) then
warnlog( "#i46363# (?)The 'SaveAs'-button should be invisible." )
- SpeichernDlg.cancel()
+ hCloseDialog( SpeichernDlg, "cancel" )
else
'///+<li>Add the control to the standardbar</li>
@@ -471,7 +483,7 @@ function hStandardbarSaveAs()
printlog( CFN & "Close Save As (cancel)" )
Kontext "SpeichernDlg"
if ( SpeichernDlg.Exists( 2 ) ) then
- SpeichernDlg.cancel()
+ hCloseDialog( SpeichernDlg, "cancel" )
else
qaerrorlog( "Retrying" )
Kontext "Standardbar"
@@ -479,7 +491,7 @@ function hStandardbarSaveAs()
Kontext "SpeichernDlg"
if ( SpeichernDlg.exists( 1 ) ) then
printlog( "FileSaveAs dialog is open" )
- SpeichernDlg.cancel()
+ hCloseDialog( SpeichernDlg, "cancel" )
else
warnlog( CFN & "The 'Save As'-dialog was not activated" )
endif
diff --git a/testautomation/framework/tools/includes/wizards.inc b/testautomation/framework/tools/includes/wizards.inc
index f8890f0e5a4f..a140401c1202 100644..100755
--- a/testautomation/framework/tools/includes/wizards.inc
+++ b/testautomation/framework/tools/includes/wizards.inc
@@ -182,8 +182,7 @@ function hFinishWizard( iMode as integer ) as boolean
dim cAccel as string
dim iWait as integer
- dim brc as boolean
- brc = false
+ dim brc as boolean : brc = false
'///+<li>Try to close the wizard</li>
@@ -538,25 +537,20 @@ function hHandleSaveError() as integer
'///<li>Close the dialog either with YES or OK</li>
'///</ul>
- dim iErr as integer
-
kontext "active"
if ( active.exists( 2 ) ) then
printlog( CFN & "Unexpected MsgBox: " & active.getText() )
try
active.ok()
- iErr = 2
+ hHandleSaveError() = 2
catch
active.yes()
- iErr = 1
+ hHandleSaveError() = 1
endcatch
else
- iErr = 0
+ hHandleSaveError() = 0
endif
- hHandleSaveError() = iErr
-
-
end function
'*******************************************************************************
@@ -583,35 +577,19 @@ function hClickNextButton() as boolean
const CFN = "hClickNextButton::"
- dim irc as integer
- dim brc as boolean
- brc = false
- dim iBreak as integer
- iBreak = 0
+ hClickNextButton() = true
'///+<li>Click the &quot;Next&quot;-button</li>
- irc = hWaitForObject( NextButton, 5000 )
- if ( irc >= 0 ) then
- printlog( CFN & "Next..." )
- NextButton.click()
- brc = true
+ if ( hClickButton( NextButton ) = -1 ) then
+ hClickNextButton() = false
else
- qaerrorlog( CFN & "Button not available within specified time -> bad" )
- endif
-
- '///+<li>Handle the &quot;Document Creation&quot;-dialog (Mailmerge Wizard)</li>
- kontext "active"
- do while ( active.exists( 1 ) )
- iBreak = iBreak + 1
- printlog( CFN & "Waiting for document creation to complete..." )
- if ( iBreak = 10 ) then
- warnlog( "DocumentCreation (MailMergeWizard) not complete within 10 seconds" )
- brc = false
- exit do
+ '///+<li>Handle the &quot;Document Creation&quot;-dialog (Mailmerge Wizard)</li>
+ kontext "active"
+ if ( active.exists( 1 ) ) then
+ ' The dialog must disappear within 10 seconds
+ if ( not active.notExists( 10 ) ) then hClickNextButton() = false
endif
- loop
-
- hClickNextButton() = brc
+ endif
'///</ul>
end function
diff --git a/testautomation/global/input/accelerators.txt b/testautomation/global/input/accelerators.txt
index cb518c9e3335..c46dc31f9dae 100755
--- a/testautomation/global/input/accelerators.txt
+++ b/testautomation/global/input/accelerators.txt
@@ -1,7 +1,7 @@
# This file contains a list of most commonly used accelerators.
# These accelerators are language dependent
-# Include framework/tools/inc/accels.inc and use hGetAccel( string )
-# to retrieve one specific accelerator, where string is one of the sections
+# Include global/tools/includes/optional/t_accels.inc and use hGetAccel( <string> )
+# to retrieve one specific accelerator, where <string> is one of the sections
# from this file.
# mod1 = CTRL
@@ -159,48 +159,3 @@ zh-CN=mod2 u
zh-TW=mod2 u
sl=mod2 i
cs=mod2 a
-
-
-# This is the accelerator that switches tabs in the BASIC IDE. I found it by accident
-# and i'm not at all certain that it is documented somewhere.
-[IDE_SWITCH_TAB+]
-en-US=MOD1 PAGEUP
-pt-PT=MOD1 PAGEUP
-ru-RU=MOD1 PAGEUP
-nl-NL=MOD1 PAGEUP
-fr-FR=MOD1 PAGEUP
-es=MOD1 PAGEUP
-hu-HU=MOD1 PAGEUP
-it=MOD1 PAGEUP
-da-DK=MOD1 PAGEUP
-sv=MOD1 PAGEUP
-pl-PL=MOD1 PAGEUP
-de=MOD1 PAGEUP
-pt-BR=MOD1 PAGEUP
-ja-JP=MOD1 PAGEUP
-ko-KR=MOD1 PAGEUP
-zh-CN=MOD1 PAGEUP
-zh-TW=MOD1 PAGEUP
-sl=MOD1 PAGEUP
-
-# This is the accelerator that switches tabs in the BASIC IDE. I found it by accident
-# and i'm not at all certain that it is documented somewhere.
-[IDE_SWITCH_TAB-]
-en-US=MOD1 PAGEDOWN
-pt-PT=MOD1 PAGEDOWN
-ru-RU=MOD1 PAGEDOWN
-nl-NL=MOD1 PAGEDOWN
-fr-FR=MOD1 PAGEDOWN
-es=MOD1 PAGEDOWN
-hu-HU=MOD1 PAGEDOWN
-it=MOD1 PAGEDOWN
-da-DK=MOD1 PAGEDOWN
-sv=MOD1 PAGEDOWN
-pl-PL=MOD1 PAGEDOWN
-de=MOD1 PAGEDOWN
-pt-BR=MOD1 PAGEDOWN
-ja-JP=MOD1 PAGEDOWN
-ko-KR=MOD1 PAGEDOWN
-zh-CN=MOD1 PAGEDOWN
-zh-TW=MOD1 PAGEDOWN
-sl=MOD1 PAGEDOWN
diff --git a/testautomation/global/input/macros.txt b/testautomation/global/input/macros.txt
index e0423fec3858..197b1b5ecebb 100755
--- a/testautomation/global/input/macros.txt
+++ b/testautomation/global/input/macros.txt
@@ -1,5 +1,5 @@
# This is a collection of BASIC macros that can cause Syntax errors, Exceptions,
-# Runtime Errors.
+# Runtime Errors. They are loaded in the test framework/optional/f_basic_issues.bas
# ---------------------------------------------------------------------------- #
@@ -39,7 +39,7 @@ end function
'# TTMacro1: This is a short testscript for automated testing!
sub main
- print( "Hello" )
+ print( "TTMacro1" )
end sub
@@ -163,7 +163,7 @@ End Sub
# ---------------------------------------------------------------------------- #
[i86265]
-' There should be no "Paramtheses do not match" warning
+' There should be no "Parantheses do not match" warning
OPTION EXPLICIT
Public Const cMAX = 256
diff --git a/testautomation/global/input/officeinfo.txt b/testautomation/global/input/officeinfo.txt
index 430e4141e3dd..966fba456718 100644
--- a/testautomation/global/input/officeinfo.txt
+++ b/testautomation/global/input/officeinfo.txt
@@ -1,5 +1,4 @@
[Current program versions]
+Oracle Open Office=3.3
OpenOffice.org=3.3
BrOffice.org=3.3
-Oracle Open Office=3.3
-
diff --git a/testautomation/global/required/includes/g_001.inc b/testautomation/global/required/includes/g_001.inc
index 3d22b6b8a1df..07c294f44e2f 100644..100755
--- a/testautomation/global/required/includes/g_001.inc
+++ b/testautomation/global/required/includes/g_001.inc
@@ -50,73 +50,73 @@ testcase tFileExportAsPDF
' The file dialog has to come up
Kontext "SpeichernDlg"
if SpeichernDlg.exists(5) then
- '/// the selected file type should be: 'PDF - Portable Document Format (.pdf)' ///'
- sTemp = Dateityp.GetSelText
- if (sTemp <> sPDF) then
- Warnlog "filter for PDF export is missing :-( should: '" + sPDF + "'; is: '" + sTemp + "'"
- endif
- '///+ - set Textbox 'File name' to "abc" ///'
- Dateiname.SetText "abc"
- speichern.click
- kontext
- if active.exists(5) then
- ' catch active about already existing file name
- if active.getrt = 304 then
- active.yes
- endif
- endif
+ '/// the selected file type should be: 'PDF - Portable Document Format (.pdf)' ///'
+ sTemp = Dateityp.GetSelText
+ if (sTemp <> sPDF) then
+ Warnlog "filter for PDF export is missing :-( should: '" + sPDF + "'; is: '" + sTemp + "'"
+ endif
+ '///+ - set Textbox 'File name' to "abc" ///'
+ Dateiname.SetText "abc"
+ speichern.click
+ kontext
+ if active.exists(5) then
+ ' catch active about already existing file name
+ if active.getrt = 304 then
+ active.yes
+ endif
+ endif
else
- ' changed with SRC680m210 - first options, then file dialog...
- ' kept for testcase backwards compatibility
- 'warnlog "Export dialog didn't come up."
+ ' changed with SRC680m210 - first options, then file dialog...
+ ' kept for testcase backwards compatibility
+ 'warnlog "Export dialog didn't come up."
endif
kontext
'/// dialog 'PDF Options' comes up ///'
if active.exists(5) then
- '/// select the tab page 'General' ///'
- active.setPage PDFOptions
- kontext "PDFOptions"
- if PDFOptions.exists(5) then
- dialogTest(PDFOptions)
- else
- warnlog "Tab page 'PDF Options - General' isn't available."
- endif
+ '/// select the tab page 'General' ///'
+ active.setPage PDFOptions
+ kontext "PDFOptions"
+ if PDFOptions.exists(5) then
+ dialogTest(PDFOptions)
+ else
+ warnlog "Tab page 'PDF Options - General' isn't available."
+ endif
else
- warnlog "Dialog 'PDF Options' didn't come up"
+ warnlog "Dialog 'PDF Options' didn't come up"
endif
kontext
if active.exists(5) then
- '/// select the tab page 'Initial View' ///'
- active.setPage PDFOptionsInitialView
- kontext "PDFOptionsInitialView"
- if PDFOptionsInitialView.exists(5) then
- dialogTest(PDFOptionsInitialView)
- else
- warnlog "Tab page 'PDF Options - Initial View' isn't available."
- endif
+ '/// select the tab page 'Initial View' ///'
+ active.setPage PDFOptionsInitialView
+ kontext "PDFOptionsInitialView"
+ if PDFOptionsInitialView.exists(5) then
+ dialogTest(PDFOptionsInitialView)
+ else
+ warnlog "Tab page 'PDF Options - Initial View' isn't available."
+ endif
endif
kontext
if active.exists(5) then
- '/// select the tab page 'User Interface' ///'
- active.setPage PDFOptionsUserInterface
- kontext "PDFOptionsUserInterface"
- if PDFOptionsUserInterface.exists(5) then
- dialogTest(PDFOptionsUserInterface)
- else
- warnlog "Tab page 'PDF Options - User Interface' isn't available."
- endif
+ '/// select the tab page 'User Interface' ///'
+ active.setPage PDFOptionsUserInterface
+ kontext "PDFOptionsUserInterface"
+ if PDFOptionsUserInterface.exists(5) then
+ dialogTest(PDFOptionsUserInterface)
+ else
+ warnlog "Tab page 'PDF Options - User Interface' isn't available."
+ endif
endif
kontext
if active.exists(5) then
- '/// select the tab page 'General' ///'
- active.setPage PDFOptions
- kontext "PDFOptions"
- '/// close the dialog with 'Cancel' ///'
- if PDFOptions.exists(5) then
- PDFOptions.cancel
- else
- warnlog "Tab page 'PDF Options - General' isn't available."
- endif
+ '/// select the tab page 'General' ///'
+ active.setPage PDFOptions
+ kontext "PDFOptions"
+ '/// close the dialog with 'Cancel' ///'
+ if PDFOptions.exists(5) then
+ PDFOptions.cancel
+ else
+ warnlog "Tab page 'PDF Options - General' isn't available."
+ endif
endif
'/// close application ///'
Call hCloseDocument
@@ -125,24 +125,24 @@ endcase
'-------------------------------------------------------------------------------
'
testcase tExportAsPDFButton
- Dim sTemp as string
+ Dim sTemp as string
'/// Create new document
Call hNewDocument
- '/// Click the button 'Export Directly as PDF' on the standard toolbar.
- Kontext "Standardbar"
- ExportAsPDF.click
- '/// The 'Export as PDF' dialog has to come up, with the only 'File type' 'PDF - Portable Document Format'
- Kontext "SpeichernDlg"
- if SpeichernDlg.exists(1) then
- sTemp = Dateityp.GetSelText
- if InStr(sTemp, "PDF") = 0 then
- warnlog "Filter for PDF export seems to be wrong or is missing in selection."
- endif
- '/// Leave dialog with CANCEL button
- SpeichernDlg.Cancel
- else
- warnlog "SaveAsPDF dialog did not come up."
+ '/// Click the button 'Export Directly as PDF' on the standard toolbar.
+ Kontext "Standardbar"
+ ExportAsPDF.click
+ '/// The 'Export as PDF' dialog has to come up, with the only 'File type' 'PDF - Portable Document Format'
+ Kontext "SpeichernDlg"
+ if SpeichernDlg.exists(1) then
+ sTemp = Dateityp.GetSelText
+ if InStr(sTemp, "PDF") = 0 then
+ warnlog "Filter for PDF export seems to be wrong or is missing in selection."
endif
+ '/// Leave dialog with CANCEL button
+ SpeichernDlg.Cancel
+ else
+ warnlog "SaveAsPDF dialog did not come up."
+ endif
'/// Close spreadsheet document.
Call hCloseDocument
endcase
diff --git a/testautomation/global/required/includes/g_009.inc b/testautomation/global/required/includes/g_009.inc
index 1e6372bbdb7f..17b31cf3fd08 100644..100755
--- a/testautomation/global/required/includes/g_009.inc
+++ b/testautomation/global/required/includes/g_009.inc
@@ -43,10 +43,10 @@ testcase tHelpCheckForUpdates
dim bOnceAgain as boolean
dim sProxyFile as string
dim iOldProxy as integer
-
+
bProxy = FALSE
bOnceAgain = TRUE
-
+
'/// open application ///'
Call hNewDocument
@@ -56,7 +56,7 @@ testcase tHelpCheckForUpdates
sIniFile = convertPath(gNetzOfficePath+"program\version.ini")
endif
sTemp = GetIniValue (sIniFile, "Version", "UpdateURL")
- if (sTemp <> "" AND NOT gOOO) then
+ if (sTemp <> "" AND NOT gOOO) then
'/// choose Help -> Check for Updates... ///'
while (bOnceAgain)
if bProxy AND bOnceAgain then
@@ -70,14 +70,14 @@ testcase tHelpCheckForUpdates
printlog "This could be a (patched) installation on Solaris Sparc/Intel or OOo - No Online Update Feature available."
hCloseDocument
else
- warnlog "Help->Check for Updates failed"
- hCloseDocument
+ warnlog "Help->Check for Updates failed"
+ hCloseDocument
endif
goto endsub
endcatch
' The dialog has to come up: 'Check for Updates'
Kontext "CheckForUpdates"
-' if CheckForUpdates.exists(10) then ' id not in build for dialog workaround: ' not working due to i 80859
+ ' if CheckForUpdates.exists(10) then ' id not in build for dialog workaround: ' not working due to i 80859
if Status.exists(10) then
if sTemp <> "" then
printlog "'Check for Updates' came up"
@@ -103,25 +103,25 @@ testcase tHelpCheckForUpdates
bOnceAgain = FALSE
Kontext "CheckForUpdates"
try
- CheckForUpdates.cancel
+ CheckForUpdates.cancel
catch
- 'cancel button is no more availabale
- printlog "cancel wasnt possible"
- try
- 'CheckForUpdates.close
- ' close method doesn't work
- printlog "1:"+status.gettext
- printlog "2:"+description.gettext
- closebtn.click
- catch
- printlog "close wasnt possible"
- ' last fallback
- 'printlog resetapplication
- 'hNewDocument
- printlog "1:"+status.gettext
- printlog "2:"+description.gettext
- cancel.click
- endcatch
+ 'cancel button is no more availabale
+ printlog "cancel wasnt possible"
+ try
+ 'CheckForUpdates.close
+ ' close method doesn't work
+ printlog "1:"+status.gettext
+ printlog "2:"+description.gettext
+ closebtn.click
+ catch
+ printlog "close wasnt possible"
+ ' last fallback
+ 'printlog resetapplication
+ 'hNewDocument
+ printlog "1:"+status.gettext
+ printlog "2:"+description.gettext
+ cancel.click
+ endcatch
endcatch
endif
else
@@ -167,7 +167,7 @@ testcase tHelpCheckForUpdates
bOnceAgain = FALSE
endif
endif
- bOnceAgain = FALSE
+ bOnceAgain = FALSE
wend
else
qaErrorlog "Test disabled, because it is OOo build and UpdateURL is empty and calling the slot would succeed"
diff --git a/testautomation/global/required/includes/g_numberformatter1.inc b/testautomation/global/required/includes/g_numberformatter1.inc
index 6eb8191c4367..2271bc333142 100644..100755
--- a/testautomation/global/required/includes/g_numberformatter1.inc
+++ b/testautomation/global/required/includes/g_numberformatter1.inc
@@ -29,16 +29,6 @@
'*
'* short description : update and resouce test for numberformatter
'*
-'************************************************************************
-'*
-'#1 tNumberformatterGetLanguage
-'#1 sNumberformatterPreconditions
-'#1 sNumberformatterOpenDialog
-'#1 tNumberformatterPre
-'#1 tNumberformatter
-'#1 tUserDefinedNumberformatter
-'#1 tButtonsNumberformatter
-'*
'\***********************************************************************
'///Setting Variables..
diff --git a/testautomation/global/required/includes/g_option.inc b/testautomation/global/required/includes/g_option.inc
index 4ea25785b68c..b14ceca82c9f 100755
--- a/testautomation/global/required/includes/g_option.inc
+++ b/testautomation/global/required/includes/g_option.inc
@@ -209,21 +209,6 @@ testcase tToolsOptionsStarOffice
endif
Kontext "TabSecurity"
- if Protect.isEnabled then
- Protect.click()
- Kontext "PasswordDLG"
- call DialogTest( PasswordDLG )
- PasswordDLG.cancel()
- else
- select case uCase(gApplication)
- case "WRITER","MASTERDOCUMENT"
- WarnLog "Protect-Button is disabled."
- case "MATH","IMPRESS","DRAW","HTML","CALC"
- PrintLog "Protect-Button is disabled."
- end select
- endif
-
- Kontext "TabSecurity"
if ( TabSecurity.exists( 1 ) ) then
Options.click
Kontext "TabSecurityOptionsAndWarnings"
diff --git a/testautomation/global/required/includes/g_printing.inc b/testautomation/global/required/includes/g_printing.inc
index a4ff969bcdf9..e05c1ba1d7e6 100644
--- a/testautomation/global/required/includes/g_printing.inc
+++ b/testautomation/global/required/includes/g_printing.inc
@@ -232,7 +232,7 @@ testcase tPrintGeneral()
warnlog( "<Arrange slides> should be enabled for Handouts" )
endif
- lb_test( SlidesPerPage, 6, 0, "" )
+ lb_test( SlidesPerPage, 7, 0, "" )
lb_test( ArrangeSlides, 2, 1, "" )
endif
diff --git a/testautomation/global/sid/context.sid b/testautomation/global/sid/context.sid
index 9b241eb4d65d..f5d47e635a7f 100644
--- a/testautomation/global/sid/context.sid
+++ b/testautomation/global/sid/context.sid
@@ -12,6 +12,7 @@ NotizAnzeigen FID_NOTE_VISIBLE
' Kontextmenue: Tabelle Calc
AlleTabellenAuswaehlen FID_TAB_SELECTALL
+SetTabColor FID_TAB_MENU_SET_TAB_BG_COLOR
' ** Kontextmenue im Gestalter/Stylist
Stylist_Neu HID_STYLIST_NEW
diff --git a/testautomation/global/sid/e_all.sid b/testautomation/global/sid/e_all.sid
index b9fa2d9c81e8..866251e652ac 100644
--- a/testautomation/global/sid/e_all.sid
+++ b/testautomation/global/sid/e_all.sid
@@ -545,6 +545,7 @@ FormatSheetHide FID_TABLE_HIDE
FormatSheetShow FID_TABLE_SHOW
FormatSheetRename FID_TAB_MENU_RENAME FID_TAB_RENAME
FormatSheetRightToLeft .uno:SheetRightToLeft
+FormatSheetTabColor .uno:SetTabBgColor
FormatMergeCells .uno:ToggleMergeCells
FormatPrintRangesRemove SID_DELETE_PRINTAREA
FormatPrintRangesEdit SID_OPENDLG_EDIT_PRINTAREA
diff --git a/testautomation/global/system/includes/gvariabl.inc b/testautomation/global/system/includes/gvariabl.inc
index 562cde3a216e..eff969fbee2c 100755
--- a/testautomation/global/system/includes/gvariabl.inc
+++ b/testautomation/global/system/includes/gvariabl.inc
@@ -174,6 +174,9 @@ Global gOOoImprovementIsEnabled as boolean
'///* Performance flags
Global GLOBAL_USE_NEW_SLEEP as boolean ' keep the old sleep() behavior
+'///* If set to TRUE in master.inc many functions become more talkative
+Global GVERBOSE as boolean
+
sub OnlyForDocuGVariables
'///<b>System for the installed Office</b>
'///<i>gPlatform</i>: Operatingsystem (internal shortkey)
diff --git a/testautomation/global/system/includes/iniinfo.inc b/testautomation/global/system/includes/iniinfo.inc
index 8a2807269152..552102588405 100755
--- a/testautomation/global/system/includes/iniinfo.inc
+++ b/testautomation/global/system/includes/iniinfo.inc
@@ -47,7 +47,7 @@ sub GetIniInformation
dim bOOo(3) as string
dim iSoffice(3) as integer
dim sTemp as string
-
+
gPathSigne = hGetPathSigne(gPLatform)
gTTProfileName = hfGetTTProfileName()
@@ -61,10 +61,10 @@ sub GetIniInformation
gOfficePath = GetIniValue ( gTesttoolIni, "Office IniPath", "Current" ) + gPathSigne
gRemotePath = GetIniValue ( gTesttoolIni, "RemoteBaseDir", "Current" ) + gPathSigne
else
- '/// The part of getting the location of the executable OOo is put into seperated functions.
- '/// The first OOo executeable is being used.
- '///+ <ol><li>Entry in TestTool control file (.testtoolrc on UNIX; testtool.ini on Win32)</li>
- '///+ <li>or<ul><li><b>Win32</b>: Entry in registry</li><li><b>UNIX</b>: If link <pre>/usr/bin/soffice</pre> or <pre>$HOME/soffice</pre> exists</li></ul></li></ol>
+ '/// The part of getting the location of the executable OOo is put into seperated functions.
+ '/// The first OOo executeable is being used.
+ '///+ <ol><li>Entry in TestTool control file (.testtoolrc on UNIX; testtool.ini on Win32)</li>
+ '///+ <li>or<ul><li><b>Win32</b>: Entry in registry</li><li><b>UNIX</b>: If link <pre>/usr/bin/soffice</pre> or <pre>$HOME/soffice</pre> exists</li></ul></li></ol>
sSoffice(0) = getSofficeTesttool() : bOOO(0) = gOOO
' DEBUG: If you need more detailed information about the installation environment
' enable the next line.
@@ -73,47 +73,47 @@ sub GetIniInformation
sSoffice(0) = getSofficeNative() : bOOO(0) = gOOO
if (sSoffice(0) <> "") then
gOfficePath = sSoffice(0)
- gVersionsnummer = FindBuildID()
+ gVersionsnummer = FindBuildID()
call hSetBuildVersionInformation(TRUE)
iSoffice(0) = gBuild
end if
' DEBUG: If you need more detailed information about the installation environment
- ' enable the next line.
+ ' enable the next line.
' printlog "RESULT from Native : '" + sSoffice(0) + "' - OOo? " + bOOO(0) + " - BuildID: " + iSoffice(0)
if sSoffice(0) = "" then
warnlog "No OOo version found on this computer. - Please look into documentation, how to select an OOo version to test."
end if
else
- printlog "----------------------------------------------------------------------------------------------------"
- printlog "** Using [OOoProgramDir] value : " & sSoffice(0)
+ printlog "----------------------------------------------------------------------------------------------------"
+ printlog "** Using [OOoProgramDir] value : " & sSoffice(0)
printlog "----------------------------------------------------------------------------------------------------"
end if
gOfficePath = sSoffice(0)
gOOO = bOOO(0)
end if
- if ((gSamePC = TRUE) AND (gOfficePath = "")) then
+ if ((gSamePC = TRUE) AND (gOfficePath = "")) then
MsgBox ("The test ends, because no OOo version was found on this computer. - Please look into documentation, how to select an OOo version to test.", 1, "No OOo program installed")
end
- end if
+ end if
- gtHidLstPath = GetIniValue ( gTesttoolIni, gTTProfileName, "HIDDir" ) + hGetPathSigne(gtPlatform)
- gPort = GetIniValue ( gTesttoolIni, "Communication", "TTPort" )
- '--------
- gPCName = GetIniValue ( gTesttoolIni, "Others", "PCname" )
- if (gPCName = "NOT_SET!" OR gPCName = "") then
- gPCName = environ ( "HOSTNAME" )
- if (gPCName = "") then
- gPCName = environ ( "COMPUTERNAME" )
- if (gPCName = "") then
- gPCName = environ ( "hostname" )
- ' If testtool.ini/rc is unmodified, the default value is NOT_SET!
- if gPCName = "" then
- qaErrorLog "Please insert the computername in section [Others] on the line 'PCname=' in the TestTool confguration file at: '" + gTesttoolIni + "'"
- end if
- end if
- end if
- end if
- '--------
+ gtHidLstPath = GetIniValue ( gTesttoolIni, gTTProfileName, "HIDDir" ) + hGetPathSigne(gtPlatform)
+ gPort = GetIniValue ( gTesttoolIni, "Communication", "TTPort" )
+ '--------
+ gPCName = GetIniValue ( gTesttoolIni, "Others", "PCname" )
+ if (gPCName = "NOT_SET!" OR gPCName = "") then
+ gPCName = environ ( "HOSTNAME" )
+ if (gPCName = "") then
+ gPCName = environ ( "COMPUTERNAME" )
+ if (gPCName = "") then
+ gPCName = environ ( "hostname" )
+ ' If testtool.ini/rc is unmodified, the default value is NOT_SET!
+ if gPCName = "" then
+ qaErrorLog "Please insert the computername in section [Others] on the line 'PCname=' in the TestTool confguration file at: '" + gTesttoolIni + "'"
+ end if
+ end if
+ end if
+ end if
+ '--------
call GetTheInstallationType ' gNetzInst and gNetzOfficePath will be set if StarOffice is a Network-Installation
gOfficeBasisPath = getOfficeBasisPath()
@@ -135,13 +135,13 @@ end sub
'-------------------------------------------------------------------------
sub GetOfficeInformation
-'/// Generates the path to the StarOffice executable.
-'/// <u>Output</u>: <b>sAppExe</b> variable is the StarOffice executable or the client executable (StarOffice server, StarPortal&trade;, Sun&trade; ONE Webtop, ...)
+ '/// Generates the path to the StarOffice executable.
+ '/// <u>Output</u>: <b>sAppExe</b> variable is the StarOffice executable or the client executable (StarOffice server, StarPortal&trade;, Sun&trade; ONE Webtop, ...)
Dim sProgramNeu as String
Dim iClient as Integer
Dim sPlatformProgramPath as string
- Dim sPlatformBinExt as string
-
+ Dim sPlatformBinExt as string
+
if ( lcase( gPlatform ) = "osx" ) then
sPlatformProgramPath = "MacOS"
sPlatformBinExt = ""
@@ -153,154 +153,128 @@ sub GetOfficeInformation
sPlatformBinExt = ""
end if
end if
-
- 'if it's a client on the same PC
- if gClient = TRUE AND gClientUser <> "" then
- if gtPlatform <> "w95" AND gtPlatform <> "wnt" AND gPlatform <> "w2k" AND gtPlatform <> "os2" AND gtPlatform <> "os4" then
+
+ 'if it's a client on the same PC
+ if gClient = TRUE AND gClientUser <> "" then
+ if gtPlatform <> "w95" AND gtPlatform <> "wnt" AND gPlatform <> "w2k" AND gtPlatform <> "os2" AND gtPlatform <> "os4" then
sAppExe = gsClient + "/bin/sclient"
- else
+ else
if right( lcase ( sAppExe ), 3 ) <> "exe" then sAppExe = gsClient + "\sclient.exe"
- end if
- sAppParameter = " -remote -connect=portal,service=soffice,host=" + gHost + ",port=8208,user=" + gClientUser + ",password=" + gClientUserPWD + ",type=compressed_secure"
- else
- if gNetzInst = TRUE then ' wenn es sich um eine Netzwerkinstallation handelt
- select case UCase(gApplication)
- case "WRITER" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-writer"
- case "CALC" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-calc"
- case "IMPRESS" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "private:factory/simpress"
- case "DRAW" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-draw"
- case "MASTERDOCUMENT": sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-global"
- case "MATH" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-math"
- case "HTML" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-web"
- case else : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- end select
- 'If it's a normal (FAT) office
- else
+ end if
+ sAppParameter = " -remote -connect=portal,service=soffice,host=" + gHost + ",port=8208,user=" + gClientUser + ",password=" + gClientUserPWD + ",type=compressed_secure"
+ else
+ if gNetzInst = TRUE then ' wenn es sich um eine Netzwerkinstallation handelt
+ select case UCase(gApplication)
+ case "WRITER" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-writer"
+ case "CALC" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-calc"
+ case "IMPRESS" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "private:factory/simpress"
+ case "DRAW" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-draw"
+ case "MASTERDOCUMENT": sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-global"
+ case "MATH" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-math"
+ case "HTML" : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-web"
+ case else : sAppExe = gNetzOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ end select
+ 'If it's a normal (FAT) office
+ else
'If it's a RVP-Office
if gClient = TRUE then
- if gPlatgroup <> "unx" then
- sAppExe = gOfficePath + "client\sclient.exe"
- else
- sAppExe = gOfficePath + "client/sclient"
- end if
+ if gPlatgroup <> "unx" then
+ sAppExe = gOfficePath + "client\sclient.exe"
+ else
+ sAppExe = gOfficePath + "client/sclient"
+ end if
else
- select case UCase(gApplication)
- case "WRITER" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-writer"
- case "CALC" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-calc"
- case "IMPRESS" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "private:factory/simpress"
- case "DRAW" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-draw"
- case "MASTERDOCUMENT": sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-global"
- case "MATH" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-math"
- case "HTML" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- sFactory = "-web"
- case else : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
- end select
+ select case ( gApplication )
+ case "WRITER" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-writer"
+ case "CALC" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-calc"
+ case "IMPRESS" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "private:factory/simpress"
+ case "DRAW" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-draw"
+ case "MASTERDOCUMENT": sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-global"
+ case "MATH" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-math"
+ case "HTML" : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ sFactory = "-web"
+ case else : sAppExe = gOfficePath & sPlatformProgramPath & gPathSigne & "soffice" & sPlatformBinExt
+ end select
end if
- end if
- end if
+ end if
+ end if
end sub
'-------------------------------------------------------------------------
function hGetPathSigne(sPlatform as string) as string
-'/// Seperators for the different platforms.
-'/// <u>Input</u>: string of class gPlatform
-'/// <u>Output</u>: string which can be used as seperator in directories
+ '/// Seperators for the different platforms.
+ '/// <u>Input</u>: string of class gPlatform
+ '/// <u>Output</u>: string which can be used as seperator in directories
select case sPlatform
- case "w95" : hGetPathSigne = "\"
- case "w98" : hGetPathSigne = "\"
- case "wnt" : hGetPathSigne = "\"
- case "wme" : hGetPathSigne = "\"
- case "wse" : hGetPathSigne = "\"
- case "w2k" : hGetPathSigne = "\"
- case "wxp" : hGetPathSigne = "\"
- case "ecs" : hGetPathSigne = "\"
- case "os4" : hGetPathSigne = "\"
- case "os5" : hGetPathSigne = "\"
- case "osx" : hGetPathSigne = "/"
- case "ppc" : hGetPathSigne = "/"
- case "sol" : hGetPathSigne = "/"
- case "lin" : hGetPathSigne = "/"
- case "x86" : hGetPathSigne = "/"
- case "fbsd": hGetPathSigne = "/"
- case "nbsd": hGetPathSigne = "/"
- case "lin64": hGetPathSigne= "/"
- case "linsparc": hGetPathSigne = "/"
- case else : hGetPathSigne = ""
- qaErrorLog " No pathseperator is defined for this platform : " + sPlatform
+ case "w95" : hGetPathSigne = "\"
+ case "w98" : hGetPathSigne = "\"
+ case "wnt" : hGetPathSigne = "\"
+ case "wme" : hGetPathSigne = "\"
+ case "wse" : hGetPathSigne = "\"
+ case "w2k" : hGetPathSigne = "\"
+ case "wxp" : hGetPathSigne = "\"
+ case "ecs" : hGetPathSigne = "\"
+ case "os4" : hGetPathSigne = "\"
+ case "os5" : hGetPathSigne = "\"
+ case "osx" : hGetPathSigne = "/"
+ case "ppc" : hGetPathSigne = "/"
+ case "sol" : hGetPathSigne = "/"
+ case "lin" : hGetPathSigne = "/"
+ case "x86" : hGetPathSigne = "/"
+ case "fbsd": hGetPathSigne = "/"
+ case "nbsd": hGetPathSigne = "/"
+ case "lin64": hGetPathSigne= "/"
+ case "linsparc": hGetPathSigne = "/"
+ case else : hGetPathSigne = ""
+ qaErrorLog " No pathseperator is defined for this platform : " + sPlatform
end select
end function
'-------------------------------------------------------------------------
-function ConvertPath ( sDatei$, optional sPlatform as string ) as String
-'/// Path conversion
-'/// <u>Input</u>: path as string; OPTIONAL: string of class gPlatform
-'/// <u>Output</u>: converted path respected to gPlatform; if optional paramter: to that Platform
-'/// Convert the <i>pathsigne</i> '\' to '/' when a test runs under UNIX
- Dim iW32 as Integer : Dim iUNX as Integer
- Dim i as Integer : Dim Ende as Integer
- Dim s1$ : Dim s2$ : Dim s3$
- dim sLocalPlatGroup as string
- dim sLocalPathSigne as string
-
- if (isMissing(sPlatform)) then
- sLocalPlatGroup = gPlatGroup
- sLocalPathSigne = gPathSigne
- else
- sLocalPlatGroup = hPlatformToGroup(sPlatform)
- sLocalPathSigne = hGetPathSigne(sPlatform)
- end if
+function ConvertPath( sPath as string ) as string
- s3$ = "" : iW32 = 0 : iUNX = 0
- s1$ = sDatei$
- Ende = len ( s1$ )
-
-' convert all / to \ if WIN
- if sLocalPlatGroup <> "unx" then
- do
- i = InStr( s1$, "/" )
- if i = 0 then exit do
- s2$ = Left( s1$ , i-1 )
- s1$ = Mid( s1$ , i+1 )
- s3$ = s3$ + s2$ + "\"
- loop until s1$=""
- s1$ = s3$ + s1$
- s3$ = "" : s2$ = ""
- end if
+ if ( getPathSeparator = "/" ) then
+ ConvertPath() = hStringReplaceChar( sPath, "\", "/" )
+ else
+ ConvertPath() = hStringReplaceChar( sPath, "/", "\" )
+ endif
+
+end function
+
+'-------------------------------------------------------------------------------
- ' convert all \ to gPathSigne => WIN -> XXX
- do
- i = InStr( s1$, "\" )
- if i = 0 then exit do
- s2$ = Left( s1$ , i-1 )
- s1$ = Mid( s1$ , i+1 )
- s3$ = s3$ + s2$ + sLocalPathSigne
- loop until s1$=""
+function hStringReplaceChar( byval myString as string, old_char as string, new_char as string ) as string
+
+ dim iChar as integer
+ for iChar = 1 to len( myString )
+ if ( mid( myString, iChar, 1 ) = old_char ) then mid( myString, iChar, 1, new_char )
+ next iChar
+ hStringReplaceChar() = myString
- ConvertPath = s3$ + s1$
end function
-'-------------------------------------------------------------------------
+'-------------------------------------------------------------------------------
sub GetLanguageInformation
-'/// Extracts the language information from <i>Setup.xcu</i>.
-'/// <u>note</u>: It uses the <b>fgetL10Nvalue</b>.
- Dim sLanOutIni as string
+ '/// Extracts the language information from <i>Setup.xcu</i>.
+ '/// <u>note</u>: It uses the <b>fgetL10Nvalue</b>.
+ Dim sLanOutIni as string
' function 'fgetL10Nvalue' is also in this library
sLanOutIni = fgetL10Nvalue()
@@ -310,11 +284,11 @@ sub GetLanguageInformation
warnlog "=> default is now 01 = en_US"
end if
- 'language Code ISO 639 (and ISO 3166 for en language) is now gLangCode
- 'ISO 639 http://www.oasis-open.org/cover/iso639a.html
- 'ISO 3166: http://xml.coverpages.org/country3166.html
+ 'language Code ISO 639 (and ISO 3166 for en language) is now gLangCode
+ 'ISO 639 http://www.oasis-open.org/cover/iso639a.html
+ 'ISO 3166: http://xml.coverpages.org/country3166.html
- gISOLang = sLanOutIni
+ gISOLang = sLanOutIni
select case lcase ( sLanOutIni )
case "en_us", "en-us", "en" : iSprache = 01 ' English (USA)
@@ -380,7 +354,7 @@ end sub
'-------------------------------------------------------------------------
function ConvertLanguage ( Sprache as String ) as Integer
-'/// Sets international language code for the whole language name.
+ '/// Sets international language code for the whole language name.
select case lCase ( Sprache )
case "deutsch", "german" : ConvertLanguage = 49
@@ -514,7 +488,7 @@ end function
'-------------------------------------------------------------------------
function ConvertCodeToLanguage ( sSprache as String ) as Integer
-'/// Converts the old language code to international language code
+ '/// Converts the old language code to international language code
select case lCase ( sSprache )
case "1033" : ConvertCodeToLanguage = 01 ' English (USA)
@@ -569,18 +543,18 @@ sub GetTheInstallationType
dim aTemp3
dim i,x as integer
dim sPlatformProgramPath as string
-
+
if ( lcase( gPlatform ) = "osx" ) then
- sPlatformProgramPath = "MacOS"
+ sPlatformProgramPath = "MacOS"
else
- sPlatformProgramPath = "program"
+ sPlatformProgramPath = "program"
endif
-
+
if gSamePC = TRUE then
gNetzInst = TRUE
gNetzOfficePath = gOfficePath
if (gSamePC = TRUE) then
- if gPlatgroup = "unx" then
+ if gPlatgroup = "unx" then
sTemp = GetIniValue (gOfficePath & sPlatformProgramPath & "/bootstraprc", "Bootstrap", "UserInstallation")
else
sTemp = GetIniValue (gOfficePath & sPlatformProgramPath & "\bootstrap.ini", "Bootstrap", "UserInstallation")
@@ -599,8 +573,8 @@ sub GetTheInstallationType
gOfficePath = sURL + gPathSigne
else
if inStr(sURL,"$BRAND_BASE_DIR") > 0 then
- gOfficePath = gOfficePath & right(sURL, len(sURL) - (inStr(sURL,"$BRAND_BASE_DIR")+len("$BRAND_BASE_DIR")))
- else
+ gOfficePath = gOfficePath & right(sURL, len(sURL) - (inStr(sURL,"$BRAND_BASE_DIR")+len("$BRAND_BASE_DIR")))
+ else
qaErrorLog "ininfo.inc::GetTheInstallationType:: Unexpected entry in bootstrap file.(Entry UserInstallation not starting with: $SYSUSERCONFIG or $ORIGIN or file://; Using entry as absolute path!)"
printlog "ininfo.inc::GetTheInstallationType:: original UserInstallation entry from 'bootstrap' file: '" + sTemp + "'"
printlog "ininfo.inc::GetTheInstallationType:: using now converted from URL for 'gOfficePath': '" + sURL + "'"
@@ -614,7 +588,7 @@ sub GetTheInstallationType
' to support some developer bootstraprc/ini's:
gOfficePath = fRelativeToAbsolutePath(gOfficePath)
gOfficePath = fRemoveDoubleCharacter(gOfficePath + gPathSigne, gPathSigne)
- else
+ else
gNetzInst = GetIniValue ( gTesttoolIni, "Network", "Net" )
gNetzOfficePath = GetIniValue ( gTesttoolIni, "Network", "Current" )
if Right ( gNetzOfficePath,1 ) <> gPathSigne then gNetzOfficePath = gNetzOfficePath + gPathSigne
@@ -624,8 +598,8 @@ end sub
'-------------------------------------------------------------------------
function ReplaceCharacter(stringToChange$, charToReplace$, replaceWith$) As String
-'/// Replaces a specified character in a string with another character that you specify
-'///+ INPUT: &lt;string&gt; , &lt;which characterto replace&gt; , &lt;which caracter the old one should be replaced&gt;
+ '/// Replaces a specified character in a string with another character that you specify
+ '///+ INPUT: &lt;string&gt; , &lt;which characterto replace&gt; , &lt;which caracter the old one should be replaced&gt;
Dim ln, n As Long
Dim NextLetter As String
Dim FinalString As String
@@ -660,36 +634,32 @@ function fgetL10Nvalue() as string
dim args(0) as new com.sun.star.beans.NamedValue
args(0).Name = "nodepath"
args(0).Value = "/org.openoffice.Setup/L10N"
- fgetL10Nvalue = hGetUNOService()._
- createInstance("com.sun.star.configuration.DefaultProvider")._
- createInstanceWithArguments(_
- "com.sun.star.configuration.ConfigurationAccess", args())._
- getByName("ooLocale")
+ fgetL10Nvalue = hGetUNOService().createInstance("com.sun.star.configuration.DefaultProvider").createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", args()).getByName("ooLocale")
end function
'-------------------------------------------------------------------------
function hPlatformToGroup(sPLatform as string) as string
-'/// <u>Input</u>: string of class gPlatform
-'/// <u>Output</u>: string of class gPlatGroup
+ '/// <u>Input</u>: string of class gPlatform
+ '/// <u>Output</u>: string of class gPlatGroup
select case sPLatform
- case "w95":hPlatformToGroup = "w95"
- case "w98":hPlatformToGroup = "w95"
- case "wse":hPlatformToGroup = "w95"
- case "wme":hPlatformToGroup = "w95"
- case "wnt":hPlatformToGroup = "w95"
- case "w2k":hPlatformToGroup = "w95"
- case "wxp":hPlatformToGroup = "w95"
- case "mac":hPlatformToGroup = "mac"
- case "ppc":hPlatformToGroup = "unx"
- case "sol":hPlatformToGroup = "unx"
- case "x86":hPlatformToGroup = "unx"
- case "lin":hPlatformToGroup = "unx"
- case "fbsd":hPlatformToGroup= "unx"
- case "nbsd":hPlatformToGroup= "unx"
- case "lin64":hPlatformToGroup= "unx"
- case "linsparc":hPlatformToGroup = "unx"
- case "ecs":hPlatformToGroup = "ecs"
+ case "w95":hPlatformToGroup = "w95"
+ case "w98":hPlatformToGroup = "w95"
+ case "wse":hPlatformToGroup = "w95"
+ case "wme":hPlatformToGroup = "w95"
+ case "wnt":hPlatformToGroup = "w95"
+ case "w2k":hPlatformToGroup = "w95"
+ case "wxp":hPlatformToGroup = "w95"
+ case "mac":hPlatformToGroup = "mac"
+ case "ppc":hPlatformToGroup = "unx"
+ case "sol":hPlatformToGroup = "unx"
+ case "x86":hPlatformToGroup = "unx"
+ case "lin":hPlatformToGroup = "unx"
+ case "fbsd":hPlatformToGroup= "unx"
+ case "nbsd":hPlatformToGroup= "unx"
+ case "lin64":hPlatformToGroup= "unx"
+ case "linsparc":hPlatformToGroup = "unx"
+ case "ecs":hPlatformToGroup = "ecs"
end select
end function
@@ -699,72 +669,69 @@ sub sGetCrashreporterValues as boolean
'/// This routine reads the values of the [Crashreporter] section
'///+ in the TestTool control file (testtool.ini / .testtoolrc).
'///It returns FALSE if one of the required
- '///+ information is missing in testtool.ini.
-
+ '///+ information is missing in testtool.ini.
+
sGetCrashreporterValues = FALSE
'/// <i>gUseProxy</i> should be TRUE if you need a proxy or FALSE
- '///+ if you have a direct connection to the (inter)net.
- gUseProxy = GetIniValue ( gTesttoolIni, "Crashreporter" , "UseProxy" )
+ '///+ if you have a direct connection to the (inter)net.
+ gUseProxy = GetIniValue ( gTesttoolIni, "Crashreporter" , "UseProxy" )
'If there's no value (=no entries at all...) exit the routine.
'sGetCrashreporterValues = FALSE so the routine in master.inc
'will stop testing.
- if gUseProxy = "" then
+ if gUseProxy = "" then
exit sub
else
'Making a boolean value from it.
- gUseProxy = cBool(gUseProxy)
+ gUseProxy = cBool(gUseProxy)
'/// <i>gConnectiontype</i> has the value DIRECT or MANUALPROXY in dependency
'///+ of <i>gUseProxy</i>. If <i>gUseProxy</i> = TRUE then the value of
'///+ <i>gConnectiontype</i> is MANUALPROXY otherwiese DIRECT.
- if gUseProxy = FALSE then
- gConnectionType = "DIRECT"
+ if gUseProxy = FALSE then
+ gConnectionType = "DIRECT"
sGetCrashreporterValues = TRUE
- else
+ else
gConnectionType = "MANUALPROXY"
end if
-
- if gUseProxy then
- '/// <i>gProxyServer</i> should be the proxy server which is needed to send
- '///+ the crashreporter data via the net.
- gProxyServer = GetIniValue ( gTesttoolIni, "Crashreporter" , "ProxyServer" )
- 'Verifying that a proxy server has been entered if
- 'gUseProxy has been set to TRUE.
- if gUseProxy = TRUE AND gProxyServer = "" then
- warnlog "qatesttool::global::system::inc::iniinfo.inc::sGetCrashReporterValue: " _
- & "In the [Crashreporter]-section of TestTool control file 'UseProxy=true' but 'ProxyServer=' (empty). Please correct it!"
- sGetCrashreporterValues = FALSE
- else
- sGetCrashreporterValues = TRUE
- end if
-
- '/// <i>gProxyPort</i> should be the proxy server port which is needed to send
- '///+ the crashreporter data via the net.
- gProxyPort = GetIniValue ( gTesttoolIni, "Crashreporter" , "ProxyPort" )
- 'Verifying that a proxy server port has been entered if
- 'gUseProxy has been set to TRUE.
- if gUseProxy = TRUE AND gProxyPort = "" then
- sGetCrashreporterValues = FALSE
- warnlog "qatesttool::global::system::inc::iniinfo.inc::sGetCrashReporterValue: " _
- & "In the [Crashreporter]-section of TestTool control file 'UseProxy=true' but 'ProxyPort=' (empty). Please correct it!"
- end if
- else
- ' to workaround issue i94779 set server and port to empty in case of direkt access
- gProxyServer = ""
- gProxyPort = ""
- endif
-
+
+ if gUseProxy then
+ '/// <i>gProxyServer</i> should be the proxy server which is needed to send
+ '///+ the crashreporter data via the net.
+ gProxyServer = GetIniValue ( gTesttoolIni, "Crashreporter" , "ProxyServer" )
+ 'Verifying that a proxy server has been entered if
+ 'gUseProxy has been set to TRUE.
+ if gUseProxy = TRUE AND gProxyServer = "" then
+ warnlog "qatesttool::global::system::inc::iniinfo.inc::sGetCrashReporterValue: " & "In the [Crashreporter]-section of TestTool control file 'UseProxy=true' but 'ProxyServer=' (empty). Please correct it!"
+ sGetCrashreporterValues = FALSE
+ else
+ sGetCrashreporterValues = TRUE
+ end if
+
+ '/// <i>gProxyPort</i> should be the proxy server port which is needed to send
+ '///+ the crashreporter data via the net.
+ gProxyPort = GetIniValue ( gTesttoolIni, "Crashreporter" , "ProxyPort" )
+ 'Verifying that a proxy server port has been entered if
+ 'gUseProxy has been set to TRUE.
+ if gUseProxy = TRUE AND gProxyPort = "" then
+ sGetCrashreporterValues = FALSE
+ warnlog "qatesttool::global::system::inc::iniinfo.inc::sGetCrashReporterValue: " & "In the [Crashreporter]-section of TestTool control file 'UseProxy=true' but 'ProxyPort=' (empty). Please correct it!"
+ end if
+ else
+ ' to workaround issue i94779 set server and port to empty in case of direkt access
+ gProxyServer = ""
+ gProxyPort = ""
+ endif
+
'/// <i>gAllowContact</i> should be TRUE or FALSE
gAllowContact = GetIniValue ( gTesttoolIni, "Crashreporter" , "AllowContact" )
gAllowContact = cBool(gAllowContact)
-
- '/// <i>gReturnAddress</i> should be the E-Mail address which can be used
- '///+ to contact the user who has run the test scripts for additional information .
+
+ '/// <i>gReturnAddress</i> should be the E-Mail address which can be used
+ '///+ to contact the user who has run the test scripts for additional information .
gReturnAddress = GetIniValue ( gTesttoolIni, "Crashreporter" , "ReturnAddress" )
'Verifying that a mail address has been entered if
'gAllowContact has been set to TRUE.
if gAllowContact = TRUE AND gReturnAddress = "" then
- warnlog "qatesttool::global::system::inc::iniinfo.inc::sGetCrashReporterValue: " _
- & "In the [Crashreporter]-section of TestTool control file 'AllowContact=true' but 'ReturnAddress=' (empty). Please correct it!"
+ warnlog "qatesttool::global::system::inc::iniinfo.inc::sGetCrashReporterValue: " & "In the [Crashreporter]-section of TestTool control file 'AllowContact=true' but 'ReturnAddress=' (empty). Please correct it!"
sGetCrashreporterValues = FALSE
end if
end if
@@ -800,7 +767,7 @@ function getSofficeNative() as string
dim bError as boolean
bError = false
-
+
'/// separated handling between Linux/Unix and Win32 platforms ///'
if ("unx" = gPlatGroup) then
'/// on Linux/Unix systems we need to check/resolv 2 possible links which point to the directory with the 'soffice' executable ///'
@@ -831,30 +798,30 @@ function getSofficeNative() as string
sCandidates(2) = sTemp + "/" + sCandidates(2)
end if
' DEBUG: If you need more detailed information about the installation environment
- ' enable the next line.
+ ' enable the next line.
' printlog "getSofficeNative() - : $HOME/soffice : '" + sCandidates(2) + "' destination exists?: " +fileExists(sCandidates(2))
catch
' DEBUG: If you need more detailed information about the installation environment
- ' enable the next line.
+ ' enable the next line.
' printlog "getSofficeNative() - : $HOME/soffice : NOT AVAILABLE"
sCandidates(2) = ""
endcatch
- for i = 1 to 2
- if fileExists(sCandidates(i)) then
- '/// cut off program//soffice from link destination ///'
- y = instr(sCandidates(i), "program/soffice")
- if ( lcase( gPlatform ) = "osx" AND y < 1 ) then
- ' Accept also MacOS in link to soffice binary
- y = instr(sCandidates(i), "MacOS/soffice")
- end if
- if (y > 0) then
- sCandidates(i) = left(sCandidates(i), y-1)
- else
- qaErrorLog "master.inc::getSofficeNative():: expected 'program/soffice' at end of link destination: '" + sCandidates(i) + "'"
- sCandidates(i) = ""
- end if
+ for i = 1 to 2
+ if fileExists(sCandidates(i)) then
+ '/// cut off program//soffice from link destination ///'
+ y = instr(sCandidates(i), "program/soffice")
+ if ( lcase( gPlatform ) = "osx" AND y < 1 ) then
+ ' Accept also MacOS in link to soffice binary
+ y = instr(sCandidates(i), "MacOS/soffice")
end if
- next i
+ if (y > 0) then
+ sCandidates(i) = left(sCandidates(i), y-1)
+ else
+ qaErrorLog "master.inc::getSofficeNative():: expected 'program/soffice' at end of link destination: '" + sCandidates(i) + "'"
+ sCandidates(i) = ""
+ end if
+ end if
+ next i
if (("" = sCandidates(1)) or ("" = sCandidates(2))) then
' if one candidate doesn't exist
'/// If only one candidate exist, take him. ///'
@@ -873,17 +840,17 @@ function getSofficeNative() as string
end if
next i
' DEBUG: If you need more detailed information about the installation environment
- ' enable the next line.
+ ' enable the next line.
' printlog "getSofficeNative() - : BildId (1): " + iBuildId(1) + " (2): " + iBuildId(2)
'/// - Take the candidate which exists and comes from $HOME ///'
- if (iBuildId(1) > iBuildId(2)) then
+ if (iBuildId(1) > iBuildId(2)) then
gOfficePath = sCandidates(1)
else
'/// - If BuildIds are equal, the candidate from $HOME wins ///'
gOfficePath = sCandidates(2)
end if
end if
- if (not fileExists(gOfficePath)) then
+ if (not fileExists(gOfficePath)) then
'/// - check if resulting candidate exist; No: error ///'
bError = true
end if
@@ -905,14 +872,14 @@ function getSofficeNative() as string
iVendorEntries = 1
sVendor(iVendorEntries) = "Sun Microsystems": inc (iVendorEntries)
sVendor(iVendorEntries) = "OpenOffice.org" : inc (iVendorEntries)
- sVendor(iVendorEntries) = "Oracle" : inc (iVendorEntries)
+ sVendor(iVendorEntries) = "Oracle" : inc (iVendorEntries)
iOfficeEntries = 1
sOffice(iOfficeEntries) = "Oracle Open Office" : inc (iOfficeEntries)
sOffice(iOfficeEntries) = "StarOffice" : inc (iOfficeEntries)
sOffice(iOfficeEntries) = "StarSuite" : inc (iOfficeEntries)
sOffice(iOfficeEntries) = "OpenOffice.org": inc (iOfficeEntries)
-
+
iVersionEntries = 1
sVersion(iVersionEntries) = "9" : inc (iVersionEntries)
sVersion(iVersionEntries) = "8" : inc (iVersionEntries)
@@ -921,10 +888,10 @@ function getSofficeNative() as string
sVersion(iVersionEntries) = "2.0.0" : inc (iVersionEntries)
sVersion(iVersionEntries) = "680" : inc (iVersionEntries)
sVersion(iVersionEntries) = "2.2" : inc (iVersionEntries)
-
+
' put new versions ABOVE THIS LINE! ^^^^^^^^^^^
sVersion(iVersionEntries) ="NotFound": inc (iVersionEntries) ' HAS TO Stay at LAST
-
+
' I have to walk over both sPath(z),
' over all sOffice(y)-1
' over all sVersion(x)-2
@@ -939,15 +906,15 @@ function getSofficeNative() as string
sTemp = sPath(z) + sVendor(j) + "\" + sOffice(y) + "\" + sVersion(x)
sOfficePath(z) = getRegistryValue(sTemp, sKey)
iOffice(z) = z*1000 + j*100 + y*10 + x
- if (sOfficePath(z) <> "") AND fileExists(sOfficePath(z)) then
+ if (sOfficePath(z) <> "") AND fileExists(sOfficePath(z)) then
' DEBUG: If you need more detailed information about the installation environment
- ' enable the next line.
+ ' enable the next line.
' printlog "getSofficeNative() - : A " + z + ":" + j + ":" + y + ":" + x + " " + sTemp + " +++++++++++ " + sOfficePath(z)
- else
- ' printlog "getSofficeNative() - : C " + z + ":" + j + ":" + y + ":" + x + " " + sTemp + " +++++++++++ " + sOfficePath(z)
- sOfficePath(z) = ""
- iOffice(z) = 0
- end if
+ else
+ ' printlog "getSofficeNative() - : C " + z + ":" + j + ":" + y + ":" + x + " " + sTemp + " +++++++++++ " + sOfficePath(z)
+ sOfficePath(z) = ""
+ iOffice(z) = 0
+ end if
else
' This is just for completeness. B has no effect, A counts.
sTemp = sPath(z) + sVendor(j) + "\" + sOffice(y) + "\" + sVersion(x)
@@ -955,7 +922,7 @@ function getSofficeNative() as string
sTemp2 = getRegistryValue(sTemp, sKey)
if (sTemp2 <> "") then
' DEBUG: If you need more detailed information about the installation environment
- ' enable the next line.
+ ' enable the next line.
' printlog "getSofficeNative() - : B " + z + ":" + j + ":" + y + ":" + x + " " + sTemp + " +++++++++++ "+sTemp2
end if
end if
@@ -997,14 +964,14 @@ function getSofficeNative() as string
end if
end if
' now we have gOfficePath set.
-
+
if (not bError) then
' needed input for function: fGetProductName()
'/// Look, if we got an OpenOffice.org version ///'
gNetzOfficePath = gOfficePath
- '/// Setting the global <i>gProductName</i> variable here.
+ '/// Setting the global <i>gProductName</i> variable here.
gProductName = fGetProductName
- ' A special build of OpenOffice.org is OOo-dev; #i56804#
+ ' A special build of OpenOffice.org is OOo-dev; #i56804#
if (gProductName = "OOo-dev") then
gProductName = "OpenOffice.org"
PrintLog "This is a 'OOo-dev' product build."
@@ -1024,11 +991,11 @@ end function
'-------------------------------------------------------------------------
function getSofficeTesttool() as string
- dim sTemp as string
-
+ dim sTemp as string
+
sTemp = ""
'/// <ol><li>Look into the current profile section of the TestTool control file </li>
- '/// deprecated, just kept here for compatibility
+ '/// deprecated, just kept here for compatibility
sTemp = GetIniValue ( gTesttoolIni, gTTProfileName, "OOoProgramDir" )
if (sTemp = "") then
'///+ <li>Look into the global section of the TestTool control file OOoProgramDir section</li></ol>
@@ -1036,7 +1003,7 @@ function getSofficeTesttool() as string
end if
' Throw error, if the default '.' from first startup is found
if fileExists(sTemp) AND NOT (sTemp = "." )then
- ' make sure path ends with path seperator
+ ' make sure path ends with path seperator
if (right(sTemp,1) <> gPathSigne) then
sTemp = sTemp + gPathSigne
end if
@@ -1060,9 +1027,9 @@ function getSofficeTesttool() as string
gOfficePath = sTemp
gNetzOfficePath = gOfficePath
'/// Setting the global <i>gProductName</i> variable here because GetSofficeNative()
- '///+ won't fill this global variable if [OOoProgramDir] is being used.
+ '///+ won't fill this global variable if [OOoProgramDir] is being used.
gProductName = fGetProductName
- ' A special build of OpenOffice.org is OOo-dev; #i56804#
+ ' A special build of OpenOffice.org is OOo-dev; #i56804#
if (gProductName = "OOo-dev") then
gProductName = "OpenOffice.org"
PrintLog "This is a 'OOo-dev' product build."
@@ -1072,9 +1039,9 @@ function getSofficeTesttool() as string
else
gOOO = FALSE
end if
- getSofficeTesttool = sTemp
+ getSofficeTesttool = sTemp
else
- '/// No valid path will return an empty string.
+ '/// No valid path will return an empty string.
getSofficeTesttool = ""
end if
end function
@@ -1155,7 +1122,7 @@ function getOfficeBasisPath as string
sTemp = gNetzOfficePath
sFile = gNetzOfficePath & "basis-link"
-
+
if FileExists( sFile ) then
if ( lcase( gPlatform ) = "osx" ) then
'MacOS X
@@ -1163,12 +1130,12 @@ function getOfficeBasisPath as string
else
if ( gPlatGroup = "unx" ) then
'Unixes
- sPath = getLinkDestination( sFile )
- sTemp = fRelativeToAbsolutePath( gNetzOfficePath & sPath )
- if ( NOT FileExists( sTemp ) ) then
+ sPath = getLinkDestination( sFile )
+ sTemp = fRelativeToAbsolutePath( gNetzOfficePath & sPath )
+ if ( NOT FileExists( sTemp ) ) then
sTemp = fRelativeToAbsolutePath( sPath )
- endif
-
+ endif
+
else
'all other platforms are Windows/DOS style
ListRead( lTemp, sFile )
@@ -1181,7 +1148,7 @@ function getOfficeBasisPath as string
else
warnlog( CFN & "Basis-link could not be found" )
endif
-
+
if ( NOT FileExists( sTemp ) ) then
warnlog( CFN & "Retrieved invalid path" )
endif
diff --git a/testautomation/global/system/includes/inivalue.inc b/testautomation/global/system/includes/inivalue.inc
index e73aa240fef5..cf70fa365f7e 100644..100755
--- a/testautomation/global/system/includes/inivalue.inc
+++ b/testautomation/global/system/includes/inivalue.inc
@@ -37,243 +37,200 @@
' #1 SetIniValue2 ' subroutine for SetIniValue
' #1 ChangeExt ' change the extension of an file
' #1 AnhaengenAnDatei ' add a string into a file
-' #1 DateiSperren ' set the hidden flag for file
-' #1 DateiFreigeben ' reset the hidden flag for file
'*
'\****************************************************************
function GetIniValue ( Datei$, Gruppe$, Variable$ ) as String
-'/// wrapper for GetIniValue2 ///'
-'///+ reads a value from an ini-file ///'
-'///+ INPUT : name of ini-file; name of group (the one in braces []); the item (left of '=') ///'
-'///+ OUTPUT: value (the right of the '=') ///'
- if Dir(Datei$) = "" then
- Warnlog "Error in GetIniValue(...):" + Datei$ + " not found"
- exit function
- end if
-
- GetIniValue = GetIniValue2( Datei$, Gruppe$, Variable$ ) ' Arbeiten
+ '/// wrapper for GetIniValue2 ///'
+ '///+ reads a value from an ini-file ///'
+ '///+ INPUT : name of ini-file; name of group (the one in braces []); the item (left of '=') ///'
+ '///+ OUTPUT: value (the right of the '=') ///'
+ if Dir(Datei$) = "" then
+ Warnlog "Error in GetIniValue(...):" + Datei$ + " not found"
+ exit function
+ end if
+
+ GetIniValue = GetIniValue2( Datei$, Gruppe$, Variable$ ) ' Arbeiten
end function
function SetIniValue( Datei$, Gruppe$, Variable$, Value$ ) as String
-'/// wrapper for SetIniValue2 ///'
-'///+ writes a value to an ini-file ///'
-'///+ INPUT : name of ini-file; name of group (the one in braces []); the item (left of '='); value (the right of the '=') ///'
-'///+ OUTPUT: - ///'
- Dim FileNum as Integer
-
- if Dir(Datei$) = "" then
- WarnLog "Error in SetIniValue(...):" + Datei$ + " not found. File will be created now!"
- FileNum = FreeFile
- Open Datei$ For Output As #FileNum ' make empty file
- Print #FileNum, ""
- Close #FileNum
- end if
-
- SetIniValue = SetIniValue2( Datei$, Gruppe$, Variable$, Value$ )
+ '/// wrapper for SetIniValue2 ///'
+ '///+ writes a value to an ini-file ///'
+ '///+ INPUT : name of ini-file; name of group (the one in braces []); the item (left of '='); value (the right of the '=') ///'
+ '///+ OUTPUT: - ///'
+ Dim FileNum as Integer
+
+ if Dir(Datei$) = "" then
+ WarnLog "Error in SetIniValue(...):" + Datei$ + " not found. File will be created now!"
+ FileNum = FreeFile
+ Open Datei$ For Output As #FileNum ' make empty file
+ Print #FileNum, ""
+ Close #FileNum
+ end if
+
+ SetIniValue = SetIniValue2( Datei$, Gruppe$, Variable$, Value$ )
end function
function GetIniValue2( Datei$, Gruppe$, Variable$ ) as String
-'/// see the wrapper for it : GetIniValue ///'
- Dim FileNum% : Dim GruppeOK% : Dim Pos% : Dim IniZeile$ : Dim IniZeile2$
-
- FileNum% = FreeFile
-
- GruppeOK%=FALSE
-
- GetIniValue2 = ""
-
- Open Datei$ For Input As #FileNum%
- do until EOF(#FileNum%) = True
- Line input #FileNum%, IniZeile$
-
- IniZeile$ = TRIM(IniZeile$)
- iniZeile2$ = UCASE( IniZeile$ ) ' compare case insensitive
- if GruppeOK% = FALSE then ' still no group
- if IniZeile2$= "[" + UCASE( Gruppe$ ) + "]" then 'Is it the wanted group?
- GruppeOK% = TRUE
- end if
- else
- If Left(IniZeile2$, 1) = "[" then 'sadly new group - goodby
- Exit do
- else
- Pos% = Instr( IniZeile2$, "=" ) 'is the item valid?
- if Pos%>0 then ' '=' not found
- if Left( IniZeile2$ , Pos%-1 ) = UCASE( Variable$ ) then 'compare leftvalue
- GetIniValue2 = Trim(Mid$( IniZeile$ , Pos%+ 1 )) 'return part right of '=' : with initial case
- exit do
- end if
- end if
- end if
- end if
-
- loop
-
- Close #FileNum%
- wait 1000
-end function
-
-
-sub SetIniValue2( Datei$, Gruppe$, Variable$, Value$ ) as String
-'/// see the wrapper for it : SetIniValue ///'
- Dim DateiBak$ : Dim D$ : Dim IniZeile$ : Dim IniZeile2$
- Dim FileBak% : Dim GruppeOK% : Dim Gefunden% : Dim FileNum% : Dim Pos%
+ '/// see the wrapper for it : GetIniValue ///'
+ Dim FileNum% : Dim GruppeOK% : Dim Pos% : Dim IniZeile$ : Dim IniZeile2$
-' rename
- DateiBak$ = ChangeExt( Datei$, "BAK" )
+ FileNum% = FreeFile
- GruppeOK% = FALSE
- Gefunden% = FALSE
+ GruppeOK%=FALSE
- if Dir(DateiBak$)<>"" then
- kill DateiBak$
- end if
+ GetIniValue2 = ""
- if Dir( Datei$ )<>"" then
- D$ = CurDir
- name Datei$ as DateiBak$
- else
- FileNum% = FreeFile
- Open Datei$ For Output As #FileNum%
- Print #FileNum%, "[" + Trim(Gruppe$) + "]"
- Print #FileNum%, Variable$ + "=" + Trim(Value$)
- Close #FileNum% ' finished here
- Exit sub
- endif
+ Open Datei$ For Input As #FileNum%
+ do until EOF(#FileNum%) = True
+ Line input #FileNum%, IniZeile$
- FileNum% = FreeFile
- Open Datei$ For Output As #FileNum%
-
- FileBak% = FreeFile
- Open DateiBak$ For Input As #FileBak%
-
- do until EOF(#FileBak%) = True
-
- Line input #FileBak%, IniZeile$
+ IniZeile$ = TRIM(IniZeile$)
+ iniZeile2$ = UCASE( IniZeile$ ) ' compare case insensitive
+ if GruppeOK% = FALSE then ' still no group
+ if IniZeile2$= "[" + UCASE( Gruppe$ ) + "]" then 'Is it the wanted group?
+ GruppeOK% = TRUE
+ end if
+ else
+ If Left(IniZeile2$, 1) = "[" then 'sadly new group - goodby
+ Exit do
+ else
+ Pos% = Instr( IniZeile2$, "=" ) 'is the item valid?
+ if Pos%>0 then ' '=' not found
+ if Left( IniZeile2$ , Pos%-1 ) = UCASE( Variable$ ) then 'compare leftvalue
+ GetIniValue2 = Trim(Mid$( IniZeile$ , Pos%+ 1 )) 'return part right of '=' : with initial case
+ exit do
+ end if
+ end if
+ end if
+ end if
- IniZeile$ = TRIM(IniZeile$)
+ loop
- if IniZeile$ <> "" then
+ Close #FileNum%
+ wait 1000
+end function
- IniZeile2$ = UCASE( IniZeile$ )
- if Left(IniZeile$, 1) = "[" then
- if GruppeOK% = TRUE then 'groupchange
- if Gefunden%=FALSE then
- Print #FileNum%, Variable$ + "=" + Trim(Value$)
- Gefunden% = TRUE
- end if
- GruppeOK% = FALSE
- end if
- Print #FileNum%, "" 'empty line
- Print #FileNum%, IniZeile$
- if IniZeile2$= "[" + UCASE( Gruppe$ ) + "]" then
- GruppeOK% = TRUE
- end if
- else
- if GruppeOK% = TRUE then ' found group
-
- Pos% = Instr( IniZeile$, "=" )
- if Left( IniZeile2$ , Pos%-1 ) = UCASE( Variable$ ) then
- IniZeile$ = Left( IniZeile$ , Pos% ) +Trim( Value$ )' after the '='
- Gefunden% = TRUE
- end if
+sub SetIniValue2( Datei$, Gruppe$, Variable$, Value$ ) as String
+ '/// see the wrapper for it : SetIniValue ///'
+ Dim DateiBak$ : Dim D$ : Dim IniZeile$ : Dim IniZeile2$
+ Dim FileBak% : Dim GruppeOK% : Dim Gefunden% : Dim FileNum% : Dim Pos%
+
+ ' rename
+ DateiBak$ = ChangeExt( Datei$, "BAK" )
+
+ GruppeOK% = FALSE
+ Gefunden% = FALSE
+
+ if Dir(DateiBak$)<>"" then
+ kill DateiBak$
+ end if
+
+ if Dir( Datei$ )<>"" then
+ D$ = CurDir
+ name Datei$ as DateiBak$
+ else
+ FileNum% = FreeFile
+ Open Datei$ For Output As #FileNum%
+ Print #FileNum%, "[" + Trim(Gruppe$) + "]"
+ Print #FileNum%, Variable$ + "=" + Trim(Value$)
+ Close #FileNum% ' finished here
+ Exit sub
+ endif
+
+ FileNum% = FreeFile
+ Open Datei$ For Output As #FileNum%
+
+ FileBak% = FreeFile
+ Open DateiBak$ For Input As #FileBak%
+
+ do until EOF(#FileBak%) = True
+
+ Line input #FileBak%, IniZeile$
+
+ IniZeile$ = TRIM(IniZeile$)
+
+ if IniZeile$ <> "" then
+
+ IniZeile2$ = UCASE( IniZeile$ )
+
+ if Left(IniZeile$, 1) = "[" then
+ if GruppeOK% = TRUE then 'groupchange
+ if Gefunden%=FALSE then
+ Print #FileNum%, Variable$ + "=" + Trim(Value$)
+ Gefunden% = TRUE
+ end if
+ GruppeOK% = FALSE
+ end if
+ Print #FileNum%, "" 'empty line
+ Print #FileNum%, IniZeile$
+ if IniZeile2$= "[" + UCASE( Gruppe$ ) + "]" then
+ GruppeOK% = TRUE
+ end if
+ else
+ if GruppeOK% = TRUE then ' found group
+
+ Pos% = Instr( IniZeile$, "=" )
+ if Left( IniZeile2$ , Pos%-1 ) = UCASE( Variable$ ) then
+ IniZeile$ = Left( IniZeile$ , Pos% ) +Trim( Value$ )' after the '='
+ Gefunden% = TRUE
+ end if
+ end if
+ Print #FileNum%, IniZeile$
end if
- Print #FileNum%, IniZeile$
- end if
- end if
+ end if
- loop
+ loop
- if Gefunden% = FALSE then
- ' set new group and value
- if GruppeOK%=FALSE then
- Print #FileNum%, ""
- Print #FileNum%, "[" + Trim(Gruppe$) + "]"
- end if
- Print #FileNum%, Variable$ + "=" + Value$
- end if
+ if Gefunden% = FALSE then
+ ' set new group and value
+ if GruppeOK%=FALSE then
+ Print #FileNum%, ""
+ Print #FileNum%, "[" + Trim(Gruppe$) + "]"
+ end if
+ Print #FileNum%, Variable$ + "=" + Value$
+ end if
- Close #FileNum%
- Close #FileBak%
+ Close #FileNum%
+ Close #FileBak%
- wait 1000
+ wait 1000
end sub
sub AnhaengenAnDatei ( Datei as String, Texte as String )
-'/// append a string at the end of the file ///'
-'///+ INPUT : filename; string///'
-'///+ OUTPUT: - ///'
- Dim FileNum%
+ '/// append a string at the end of the file ///'
+ '///+ INPUT : filename; string///'
+ '///+ OUTPUT: - ///'
+ Dim FileNum%
- FileNum% = FreeFile
- Open Datei for Append as #FileNum%
+ FileNum% = FreeFile
+ Open Datei for Append as #FileNum%
- Print #FileNum%, Texte
- Close #FileNum%
+ Print #FileNum%, Texte
+ Close #FileNum%
end sub
function ChangeExt( Datei$, Ext$ )as String
-'/// change the extension of a file ///'
-'///+ INPUT : filename; extension ///'
-'///+ OUTPUT: - ///'
- Dim i%
-
- i% = InStr( Right(Datei$, 4 ) , "." )
- if Ext$<>"" then
- if i%=0 then
- ChangeExt = Datei$ +"."+Ext$
- else
- ChangeExt = Left( Datei$, Len(Datei$)-4+i% ) + Ext$
- end if
-
- elseif i%<>0 then
- ChangeExt = Left( Datei$, Len(Datei$)-5+i% )
- end if
+ '/// change the extension of a file ///'
+ '///+ INPUT : filename; extension ///'
+ '///+ OUTPUT: - ///'
+ Dim i%
+
+ i% = InStr( Right(Datei$, 4 ) , "." )
+ if Ext$<>"" then
+ if i%=0 then
+ ChangeExt = Datei$ +"."+Ext$
+ else
+ ChangeExt = Left( Datei$, Len(Datei$)-4+i% ) + Ext$
+ end if
+
+ elseif i%<>0 then
+ ChangeExt = Left( Datei$, Len(Datei$)-5+i% )
+ end if
end function
-sub DateiSperren( Datei$ )
-'/// set the hidden flag of a file; lock the file ///'
-'///+ INPUT : filename ///'
-'///+ OUTPUT: - ///'
- Dim i%
-
- if hFileExists ( Datei$ ) <> TRUE then
- Warnlog "File '" + Datei$ + "' doesn't exist; exiting now!"
- exit sub
- end if
-
- i% = GetAttr( Datei$ )
- do while (i% AND 2) = 2 ' is file already locked?
- Wait( int( 400 * Rnd + 5 )
- i% = GetAttr( Datei$ )
- loop
- SetAttr( Datei$ , i% OR 2 ) ' Lock
-
- exit sub
-
-end sub
-
-sub DateiFreigeben( Datei$ )
-'/// reset the hidden flag of a file; release the file ///'
-'///+ INPUT : filename ///'
-'///+ OUTPUT: - ///'
- Dim i%
-
- if hFileExists ( Datei$ ) <> TRUE then
- Warnlog "File '" + Datei$ + "' doesn't exist; exiting now!"
- exit sub
- end if
-
- i% = GetAttr( Datei$ )
- SetAttr( Datei$ , i% AND NOT 2 ) ' release
- exit sub
-
-end Sub
-
-
-
diff --git a/testautomation/global/system/includes/master.inc b/testautomation/global/system/includes/master.inc
index 9e693eea445e..fafb5f758a85 100755
--- a/testautomation/global/system/includes/master.inc
+++ b/testautomation/global/system/includes/master.inc
@@ -70,6 +70,8 @@ sub GetUseFiles
gTestcaseStart = Now() ' get start time of test preparation phase
+ GVERBOSE = FALSE ' global switch to make some functions more talkative for profiling purposes
+
use "global\system\includes\sysinfo.inc" '///+ sysinfo.inc : routines to get all system informations
use "global\system\includes\inivalue.inc" '///+ inivalue.inc : routines to work with ini-files
use "global\system\includes\iniinfo.inc" '///+ iniinfo.inc : routines to get all informations about OpenOffice.org
@@ -281,7 +283,6 @@ end sub
sub LoadGlobalIncludeFiles
'///Load all important global files.
use "global\tools\includes\required\t_dir.inc" '///+<li><b>t_dir</b>: Routines to parse directories (methods execute on the office side)</li>
- use "global\tools\includes\required\t_dirloc.inc" '///+<li><b>t_dirloc</b>: Routines to parse directories (execute on the testtool side)</li>
use "global\tools\includes\required\t_doc1.inc" '///+<li><b>t_doc1</b>: Global routines to work on office documents (I)</li>
use "global\tools\includes\required\t_doc2.inc" '///+<li><b>t_doc2</b>: Global routines to work on office documents (II)</li>
use "global\tools\includes\required\t_files.inc" '///+<ul><li><b>t_files</b>: Routines to open/save/print files</li>
@@ -314,9 +315,7 @@ sub FirstOfficeStart
'Needs to get executed everytime after a 'ResetApplication' command
catchGPF false
' Recover to backingwindow, until resetApplication can handle this
- for i = 1 to getDocumentCount
- hCloseDocument()
- next i
+ hFileCloseAll()
end sub
'-------------------------------------------------------------------------
@@ -334,7 +333,7 @@ sub hStartTheOffice (optional sProfPath as String, optional sProfParameter as St
sErrorInformation = "global::systen::inc::master.inc:hStartTheOffice: "
- if gPlatform = lcase("osx") then
+ if lcase( gPlatform ) = "osx" then
sPlatformProgramPath = "MacOS"
else
sPlatformProgramPath = "program"
@@ -533,11 +532,11 @@ sub ExitRestartTheOffice (optional sProfPath as String, optional sProfParameter
catch
endcatch
'Disable Quickstarter internaly
- hDisableQuickstarterAPI
+ hDisableQuickstarterAPI
+
' Recover to backingwindow, until resetApplication can handle this
- for i = 1 to getDocumentCount
- hCloseDocument()
- next i
+ hFileCloseAll()
+
end sub
'-------------------------------------------------------------------------
@@ -671,15 +670,7 @@ sub PleaseRecover (sWhat as String)
Kontext
' Recover to backingwindow, until resetApplication can handle this
- a = getDocumentCount
- for i = 1 to a
- qaErrorLog "Needed to close window: (" + i + "/"+a+") on " + sWhat
- hCloseDocument()
- next i
- a = getDocumentCount
- if a > 0 then
- warnlog "Failed to close window; There are still open: " + a
- endif
+ hFileCloseAll()
end sub
'-------------------------------------------------------------------------
@@ -1144,7 +1135,7 @@ sub sStartUpOffice (optional sProfPath as String, optional sProfParameter as Str
' Set a valid URE_BOOTSTRAP path for soffice, else the invalid one from this testtool instance
' will get used i86718 - would result in a message about vcl stuff and a not starting soffice
- if gPlatform = lcase("osx") then
+ if lcase( gPlatform ) = "osx" then
sPlatformProgramPath = "MacOS"
sPlatformBinExt = "rc"
else
diff --git a/testautomation/global/tools/compressstatus.bas b/testautomation/global/tools/compressstatus.bas
index aa469847b5ba..b8ed46d3b3f5 100755
--- a/testautomation/global/tools/compressstatus.bas
+++ b/testautomation/global/tools/compressstatus.bas
@@ -142,7 +142,7 @@ function fZip(sDirectory as string, sZipFileName as string) as integer
oInfo.Attributes = 0
' get all files in a directory
- getFileNameListLocal (sDirectory+"/","*.txt",lsFile())
+ getFileNameList (sDirectory+"/","*.txt",lsFile())
printlog "Going to zip Directory: '" + sDirectory + "'"
for i = 1 to listCount(lsFile())
printlog "Going to add: " + i + ": '" + lsFile(i) + "'"
diff --git a/testautomation/global/tools/includes/optional/t_basic_ide_tools.inc b/testautomation/global/tools/includes/optional/t_basic_ide_tools.inc
index c13cb2ac1a04..fcf8d301db58 100644..100755
--- a/testautomation/global/tools/includes/optional/t_basic_ide_tools.inc
+++ b/testautomation/global/tools/includes/optional/t_basic_ide_tools.inc
@@ -36,21 +36,27 @@ function hShowMacroControls() as boolean
'///<h3>Tear off the ToolsCollectionBar from the MacroBar</h3>
'///<i>Starting point: Basic dialog editor is open and has the focus</i>
'///<ul>
- const CFN = "hShowMacroControls::"
+ const CFN = "hShowMacroControls::"
+
+ const MAX_WAIT = 5
+ const SHORT_WAIT = 1
+
+ const VERTICALLY_CENTERED = 50
+ const HORIZONTALLY_CENTERED = 50
- printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
'///+<li>Test whether the ToolsCollectionBar is already open. If yes, exit directly</li>
kontext "ToolsCollectionBar"
- if ( ToolsCollectionBar.exists( 3 ) ) then
- printlog( CFN & "Exit: ToolsCollectionBar is already open." )
+ if ( ToolsCollectionBar.exists( SHORT_WAIT ) ) then
+ printlog( CFN & "ToolsCollectionBar is already open." )
hShowMacroControls() = true
exit function
endif
'///+<li>Verify that the Dialog Bar is available</li>
Kontext "DialogBar"
- if ( DialogBar.exists( 5 ) ) then
+ if ( DialogBar.exists( MAX_WAIT ) ) then
'///+<li>Verify that the controls-button is enabled</li>
try
@@ -62,27 +68,23 @@ function hShowMacroControls() as boolean
'///+<li>Verify that the ToolsCollectionBar is visible and can be accessed</li>
kontext "ToolsCollectionBar"
- if ( ToolsCollectionBar.exists( 5 ) ) then
+ if ( ToolsCollectionBar.exists( MAX_WAIT ) ) then
'///+<li>Move it to the upper left corner at pos 50/50</li>
- ToolsCollectionBar.Move ( 50 , 50 )
- printlog( CFN & "Exit: ToolsCollectionBar is open and has been placed" )
+ ToolsCollectionBar.Move ( HORIZONTALLY_CENTERED , VERTICALLY_CENTERED )
+ printlog( CFN & "ToolsCollectionBar is open and has been placed" )
hShowMacroControls() = true
- exit function
else
- printlog( CFN & "Exit: ToolsCollectionBar is not available. Aborting." )
+ printlog( CFN & "ToolsCollectionBar is not available. Aborting." )
hShowMacroControls() = false
- exit function
endif
catch
- printlog( CFN & "Exit: The Controls-Button is not enabled. Aborting." )
+ printlog( CFN & "The Controls-Button is not enabled. Aborting." )
hShowMacroControls() = false
- exit function
endcatch
else
- printlog( CFN & "Exit: The Dialog Bar is not available. Aborting." )
+ printlog( CFN & "The Dialog Bar is not available. Aborting." )
hShowMacroControls() = false
- exit function
endif
'///</ul>
@@ -94,22 +96,10 @@ function hGetBasicWorkFile( cMajorID as string ) as string
'///<h3>Retrieve a filename, depending on gApplication and Build-ID</h3>
'///<i>Structure: work-directory/basic[.suffix]</i>
- '///<ul>
-
const CFN = "hGetBasicWorkFile::"
-
- dim sFile as string
-
- '///+<li>Build a path and a filename (path from UNO, Suffix from global-module)</li>
- sFile = hGetWorkPath() & "basic" & hGetSuffix( cMajorId )
- sFile = ConvertPath( sFile )
-
+ dim sFile as string : sFile = hGetWorkPath() & "basic" & hGetSuffix( cMajorId )
printlog( CFN & sFile & " for " & gApplication & " (" & cMajorID & ")" )
-
- '///+<li>Return the path as string</li>
- hGetBasicWorkFile() = convertpath( sFile )
-
- '///</ul>
+ hGetBasicWorkFile() = sFile
end function
@@ -119,31 +109,32 @@ function hOpenBasicIDE() as boolean
'///<h3>Open the Basic IDE for the last module listed in the Macro Organizer</h3>
'///<i>Starting point: Basic Macro Organizer has focus</i>
- '///<ul>
const CFN = "hOpenBasicIDE::"
+ const BUTTON_TIMEOUT = -1
+ const MAX_WAIT = 2
- '///+<li>Select the last module in the treelist, verify that it can be edited</li>
- hSelectTheLastModule( true )
-
- '///+<li>Click the Edit-button</li>
- Bearbeiten.click()
-
- '///+<li>Maximize the Basic IDE (required to ensure proper operation of mousemovements)</li>
- sleep( 2 )
- kontext "BasicIde"
- BasicIde.maximize()
+ if ( hSelectTheLastModule( true ) ) then
- '///+<li>Verify that the Basic IDE is open, return TRUE on success</li>
- if ( BasicIde.exists() ) then
- printlog( CFN & "Open Basic-IDE for existing module: success" )
- hOpenBasicIDE() = true
+ if ( hClickButton( Bearbeiten) <> BUTTON_TIMEOUT ) then
+
+ kontext "BASICIDE"
+ if ( BasicIDE.exists( MAX_WAIT ) ) then
+ printlog( "Basic IDE is open" )
+ BasicIDE.maximize()
+ hOpenBasicIDE() = true
+ else
+ warnlog( CFN & "Failed to open BASIC IDE" )
+ hOpenBasicIDE() = false
+ endif
+ else
+ warnlog( CFN & "Edit button is not enabled, cannot open BASIC IDE"
+ hOpenBasicIDE() = false
+ endif
else
- printlog( CFN & "Open Basic-IDE for existing module: failure" )
- hOpenBasicIDE() = false
+ warnlog( CFN & "Unable to select the last module" )
+ hOpenBasicIDE() = false
endif
-
- '///</ul>
end function
@@ -151,32 +142,10 @@ end function
function hCloseBasicIDE() as boolean
- '///<h3>Close the BASIC-IDE with best effort verification</h3>
- '///<i>Starting point: Basic IDE is open and has the focus</i>
- '///<ol>
- '///+<li>File-menu</li>
- '///+<li>Slot FileClose</li>
- '///+<li>hCloseDocument()/hDestroyDocument()</li>
- '///</ol>
- '///<ul>
-
- use "global\tools\includes\optional\t_docfuncs.inc"
-
- const CFN = "hCloseBasicIDE::"
- dim brc as boolean
-
- '///+<li>Close the macro controls float</li>
+ '///<h3>Close the BASIC-IDE</h3>
hCloseCollectionBar()
-
- '///+<li>Try to close the current document</li>
- brc = hDestroyDocument()
- if ( brc ) then
- hCloseBasicIDE() = true
- else
- hCloseBasicIDE() = false
- qaerrorlog( "#i54135# Failed to close BASIC IDE" )
- endif
- '///</ul>
+ kontext "BasicIDE"
+ hCloseBasicIDE() = hDestroyDocument()
end function
@@ -186,36 +155,31 @@ function hReOpenBasicDialog() as boolean
'///<h3>Open BASIC-IDE after loading a workfile with documentbound macro</h3>
'///<i>Starting point: Focus on document containing at least one macro</i><br>
- '///<i>IMPORTANT: Errorhandling is incomplete, test may end up in undefined state</i>
- '///<ul>
+ const CFN = "hReopenBasicDialog: "
+ const BUTTON_TIMEOUT = -1
- dim brc as boolean
-
- '///+<li>open the macro dialog, select the last module</li>
- brc = hSelectTheLastModule( true )
- if ( not brc ) then
- warnlog( "Could not open the last module for editing." )
- hReOpenBasicDialog() = false
- exit function
- endif
+ if ( hSelectTheLastModule( true ) ) then
- '///+<li>edit the module</li>
- Bearbeiten.Click()
+ if ( hClickButton( Bearbeiten ) <> BUTTON_TIMEOUT ) then
- '///+<li>find the dialog window.</li>
- kontext "BasicIDE"
- BasicIde.maximize()
+ kontext "BasicIDE"
+ BasicIde.maximize()
- brc = hFindFirstDialog()
- if ( not brc ) then
- warnlog( "Could not find any dialog" )
- hReOpenBasicDialog() = false
+ if ( hFindFirstDialog() ) then
+ printlog( "BASIC IDE is open." )
+ hReOpenBasicDialog() = true
+ else
+ warnlog( CFN & "Could not find any dialog" )
+ hReOpenBasicDialog() = false
+ endif
+ else
+ warnlog( CFN & "Unable to click Edit button, BASIC IDE not open" )
+ hReOpenBasicDialog() = false
+ endif
else
- hReOpenBasicDialog() = true
+ warnlog( CFN & "Could not open the last module for editing." )
+ hReOpenBasicDialog() = false
endif
-
- '///+<li>Return TRUE on success, FALSE on failure</li>
- '///</ul>
end function
@@ -227,39 +191,34 @@ function hFindFirstDialog() as boolean
'///<i>Starting point: Basic IDE must be open and has the focus</i>
'///<ul>
- dim iPosOverTabbar as integer
- dim brc as boolean
const CFN = "hFindFirstDialog::"
+ const REPEAT_COUNT = 5 ' number of times to send a keystroke to BASIC IDE
+ const MAX_NUMBER_OF_RETRIES = 20
+ const SELECT_TAB_RIGHT = "<MOD1 PAGEUP>"
+ const SCROLL_UP_LEFT = "<UP><LEFT>"
+
+ dim iPosOverTabbar as integer
+ hFindFirstDialog() = false
'///+<li>Set focus to Basic IDE, maximize it</li>
- kontext "BasicIde"
+ kontext "BasicIDE"
BasicIde.maximize()
-
- brc = false
'///+<li>move pointer over the tabbar and click until a dialog opens (hopefully)</li>
- for iPosOverTabbar = 1 to 20
+ for iPosOverTabbar = 1 to MAX_NUMBER_OF_RETRIES
- Tabbar.MouseDown ( 5 * iPosOverTabbar , 50 )
- Tabbar.MouseUp ( 5 * iPosOverTabbar , 50 )
+ BASICIDE.typeKeys( SELECT_TAB_RIGHT )
if ( DialogWindow.Exists() ) then
- brc = true
- DialogWindow.typeKeys( "<up>", 5 )
+ printlog( "BASIC Dialog window found" )
+ hFindFirstDialog() = true
+ DialogWindow.typeKeys( SCROLL_UP_LEFT , REPEAT_COUNT )
exit for
endif
next iPosOverTabbar
-
- '///+<li>Return TRUE on success, FALSE on failure</li>
- if ( brc ) then
- printlog( CFN & "Found dialog" )
- else
- printlog( CFN & "Could not find the first dialog via tabbar" )
- endif
- hFindFirstDialog() = brc
- '///</ul>
+ '///</ul>
end function
@@ -269,27 +228,19 @@ function hSelectDialogPane() as boolean
'///<h3>Select the dialog pane in the Basic dialog editor</h3>
'///<i>Starting point: Basic dialog editor is open and has the focus</i>
- '///<ul>
-
const CFN = "hSelectDialogPane::"
- printlog( CFN & "Enter" )
+ const UP_LEFT = 10
+ const DOWN_RIGHT = 90
+
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
- '///+<li>Select background dialog by rubberband</li>
kontext "BasicIDE"
+ DialogWindow.mouseDown( DOWN_RIGHT , DOWN_RIGHT )
+ DialogWindow.mouseMove( UP_LEFT , UP_LEFT )
+ DialogWindow.mouseUp ( UP_LEFT , UP_LEFT )
- '///+<li>Set the mousepointer down at 90/90</li>
- DialogWindow.mouseDown( 90 , 90 )
-
- '///+<li>Move it to 10/10</li>
- DialogWindow.mouseMove( 10 , 10 )
-
- '///+<li>Release the mouse pointer at 10/10</li>
- DialogWindow.mouseUp ( 10 , 10 )
-
- '///+<li>Return TRUE, currently no verification is implemented</li>
- printlog( CFN & "Exit: Selected dialog pane (not verified)" )
+ printlog( CFN & "Selected dialog pane (not verified)" )
hSelectDialogPane() = true
- '///</ul>
end function
@@ -297,33 +248,23 @@ end function
function hCloseCollectionBar() as boolean
- '///<h3>Close the ToolsCollectionBar (Macro Controls Float)</h3>
- '///<i>Starting point: Basic Dialog editor is open, ToolsCollectionBar is open</i>
- '///<ul>
-
- const CFN = "hCloseCollectionBar::"
- const RETRIES = 3
-
- dim iTry as integer
- iTry = 0
-
- '///+<li>Try to close the ToolsCollectionBar max 3 times</li>
+ const CFN = "hCloseCollectionBar(): "
+
kontext "ToolsCollectionBar"
- while ( ToolsCollectionBar.exists( 1 ) )
- iTry = iTry + 1
- printlog( CFN & "Closing ToolsCollectionBar..." )
- ToolsCollectionBar.close()
-
- if ( iTry = RETRIES ) then
- printlog( CFN & "Failed to close ToolsCollectionBar" )
+ if ( ToolsCollectionBar.exists() ) then
+
+ if ( hCloseDialog( ToolsCollectionBar, "close" ) ) then
+ printlog( "Closed Macro Controls Float" )
+ hCloseCollectionBar() = true
+ else
+ warnlog( CFN & "Failed to close Macro Controls Float" )
hCloseCollectionBar() = false
- exit function
endif
- wend
+ else
+ printlog( "Macro Controls Float not open" )
+ hCloseCollectionBar() = true
+ endif
- hCloseCollectionBar() = true
- '///</ul>
-
end function
'*******************************************************************************
@@ -331,51 +272,19 @@ end function
function hDeleteMacro() as boolean
'///<h3>Delete all text in the Basic IDE editor</h3>
- '///<i>Starting point: Basic IDE is open, has focus, code can be edited</i>
- '///<ul>
+ const CFN = "hDeleteMacro(): "
- use "global\tools\includes\optional\t_accels.inc"
-
- '///+<li>Verify all prerequisites are met (BasicIDE must be open)</li>
kontext "BasicIDE"
- if ( not BasicIde.exists() ) then
- warnlog( "hDeleteMacro::BasicIDE is not visible/active. Aborting" )
+ if ( BasicIDE.exists() ) then
+ WaitSlot() : Wait( 100 ) : EditWindow.typeKeys( "<MOD1 HOME>" )
+ WaitSlot() : Wait( 100 ) : EditWindow.typeKeys( "<MOD1 SHIFT END>" )
+ WaitSlot() : Wait( 100 ) : EditWindow.typeKeys( "<DELETE>" )
+ hDeleteMacro() = hIsEditWindowEmpty()
+ else
+ warnlog( CFN & "Basic IDE is not open" )
hDeleteMacro() = false
- exit function
- endif
-
- dim brc as boolean
-
- '///+<li>get the languagespecific accelerator for "Edit->Select All"</li>
- dim cAccelerator as string
- cAccelerator = hGetAccel( "SelectAll" )
-
- printlog( "hDeleteMacro::Using Accel: " & cAccelerator )
-
- ' Common for all actions is that we delete the existing macro before
- ' inserting the new one. This fails if the accelerator for SelectAll
- ' is incorrect, we try to recover by doing this manually then.
- '///+<li>Delete the entire content of the Basic IDE editor</li>
- EditWindow.TypeKeys( cAccelerator )
- EditWindow.TypeKeys( "<Delete>" )
-
- ' Verify that the EditWindow is empty, if not use a method that
- ' should work for all languages/locales
- '///+<li>Verify that the editor window is indeed empty</li>
- brc = hIsEditWindowEmpty()
- if ( not brc ) then
- qaerrorlog( "#i52430# hDeleteMacro::Accelerator " & cAccelerator & " failed" )
- printlog( "hDeleteMacro::Trying alternative method" )
- EditWindow.TypeKeys( "<Mod1 Home>" )
- EditWindow.TypeKeys( "<Mod1 Shift End>" )
- EditWindow.TypeKeys( "<Delete>" )
- brc = hIsEditWindowEmpty()
endif
- '///+<li>Return TRUE on success, FALSE on failure</li>
- hDeleteMacro() = brc
- '///</ul>
-
end function
'*******************************************************************************
@@ -384,112 +293,66 @@ function hIsEditWindowEmpty() as boolean
'///<h3>Test if the Basic-EditWindow is empty</h3>
'///<i>Starting point: Basic IDE editor is open and has the focus</i>
- '///<ul>
-
- '///+<li>Verify that prerequisites are met: Basic IDE must be open</li>
- kontext "BasicIDE"
- if ( not BasicIDE.exists() ) then
- warnlog( "hIsEditWindowEmpty::BasicIde is not open/visible" )
- hIsEditWindowEmpty() = false
- exit function
- endif
-
- '///+<li>Verify that the EditWindow is empty. EditCopy is disabled when empty</li>
- EditWindow.TypeKeys( "<Mod1 Home>" )
- EditWindow.TypeKeys( "<Mod1 Shift End>" )
- try
- EditCopy
- printlog( "EditCopy should be enabled for empty Basic IDE editor" )
- catch
- setClipboard( "" )
- endcatch
+ const CFN = "hIsEditWindowEmpty(): "
- if ( getClipBoardText() <> "" ) then
- hIsEditWindowEmpty() = false
- printlog( "hIsEditWindowEmpty::no - content follows:" )
- printlog( GetClipboardText )
+ kontext "BasicIDE"
+ if ( BasicIDE.exists() ) then
+ SetClipboard( "" )
+ WaitSlot() : EditWindow.typeKeys( "<MOD1 HOME>" )
+ WaitSlot() : EditWindow.typeKeys( "<MOD1 SHIFT END>" )
+ hUseAsyncSlot( "EditCopy" )
+
+ if ( GetClipBoardText() = "" ) then
+ hIsEditWindowEmpty() = true
+ else
+ warnlog( CFN & "Edit window is not empty" )
+ hIsEditWindowEmpty() = false
+ endif
else
- hIsEditWindowEmpty() = true
- printlog( "hIsEditWindowEmpty::yes" )
+ warnlog( CFN & "BasicIDE is not open" )
+ hIsEditWindowEmpty() = false
endif
- '///+<li>Return TRUE on success, FALSE on failure</li>
- '///</ul>
-
end function
'*******************************************************************************
function hRenameTab( cTabName as string ) as integer
- '///<h3>Rename the first tab in the Basic IDE Tabbar</h3>
- '///<i>Starting point: Basic IDE is open, at least one tab exists</i><br>
- '///Return values are:
- '///<ul>
- '///+<li>0 = Tab was correctly renamed</li>
- '///+<li>1 = Invalid name warning is displayed (handle outside of function)</li>
- '///+<li>2 = Unknown error / failed to rename the tab</li>
- '///+<li>3 = Unable to access context menu</li>
- '///</ul>
- '///Description
- '///<ul>
-
- const CFN = "hRenameTab::"
-
- dim cString as string
- dim iWait as integer
- dim iTry as integer
- dim brc as boolean
- brc = false
+ const CFN = "hRenameTab(): "
- cString = "<HOME><SHIFT END>" & cTabName & "<RETURN>"
- kontext "basicide"
-
- '///+<li>Open the context menu of the tabbar</li>
- for iTry = 1 to 5
- try
- kontext "basicide"
- Tabbar.OpenContextMenu
- hMenuSelectNr( 3 )
- sleep( 2 )
- brc = true
+ const MENUITEM_RENAME = 3
+ const MAX_WAIT = 1000
+ const RETVAL_SUCCESS = 0
+ const RETVAL_NO_IDE = 1
+ const RETVAL_NO_ACCESS = 2
+ const RETVAL_NO_MENU = 3
+
+ dim sFullString as string : sFullString = "<HOME><SHIFT END>" & cTabName & "<RETURN>"
+
+ kontext "BasicIDE"
+ if ( BasicIDE.exists() ) then
+ try
+ hRenameTab() = RETVAL_NO_MENU
+ Tabbar.openContextMenu()
+ hMenuSelectNr( MENUITEM_RENAME )
+ Wait( MAX_WAIT )
+
+ ' At this point the string on the tab should be selected, print the
+ ' string to the log and overwrite it with the new name
+ hRenameTab() = RETVAL_NO_ACCESS
+
+ Tabbar.typeKeys( sFullString , true )
+ hRenameTab() = RETVAL_SUCCESS
catch
- printlog( "No context menu, retrying..." )
+ warnlog( CFN & "Failed to rename the current module" )
endcatch
- next iTry
- '///+<li>Select to rename the tab</li>
- if ( not brc ) then
- warnlog( CFN & "Unable to access Context Menu" )
- hRenameTab() = 3
- exit function
+ else
+ warnlog( CFN & "BASIC IDE is not open" )
+ hRenameTab() = RETVAL_NO_IDE
endif
-
- try
- '///+<li>Overwrite the old name of the tab</li>
- kontext "basicide"
- Tabbar.TypeKeys( cString , true )
- hRenameTab() = 0
- printlog( CFN & "Tab renamed: " & cTabName )
- catch
- '///+<li>Handle possible errors</li>
- hRenameTab() = 2
- warnlog( CFN & "Failed to rename tab: " & cTabName )
- exit function
- endcatch
-
- kontext "active"
- for iWait = 1 to 3
- sleep( 1 )
- if ( active.exists() ) then
- hRenameTab() = 1
- printlog( CFN & "Invalid name for tab: Warning is displayed" )
- exit for
- endif
- next iWait
- '///+<li>Return 0, 1 or 2</li>
- '///</ul>
-
+
end function
'*******************************************************************************
@@ -532,6 +395,7 @@ function hNewDialog() as boolean
'///<ul>
const CFN = "hNewDialog::"
+ const MAX_WAIT = 2000
'///+<li>Open the context menu for the tabbar</li>
kontext "basicide"
@@ -539,20 +403,20 @@ function hNewDialog() as boolean
'///+<li>Select the first item (insert)</li>
hMenuSelectNr( 1 )
- WaitSlot( 1000 ) ' sleep( 1 )
+ WaitSlot( MAX_WAIT ) ' sleep( 1 )
'///+<li>Select the second item (new dialog)</li>
hMenuSelectNr( 2 )
- WaitSlot( 2000 ) ' sleep( 2 )
+ WaitSlot( MAX_WAIT ) ' sleep( 2 )
'///+<li>Verify that a new dialog is opened and has the focus</li>
if ( DialogWindow.Exists() ) then
printlog( CFN & "New dialog is open" )
hNewDialog() = true
- if ( DialogWindow.IsMax() = false ) then
- DialogWindow.Maximize()
- Wait( 2000 )
- end if
+ if ( DialogWindow.IsMax() = false ) then
+ DialogWindow.Maximize()
+ Wait( MAX_WAIT )
+ end if
else
warnlog( CFN & "New dialog is not open" )
hNewDialog() = false
@@ -571,6 +435,7 @@ function hNewModule() as boolean
'///<ul>
const CFN = "hNewModule::"
+ const MAX_WAIT = 2000
'///+<li>Open the context menu for the tabbar</li>
kontext "basicide"
@@ -578,11 +443,11 @@ function hNewModule() as boolean
'///+<li>Select the first item (insert)</li>
hMenuSelectNr( 1 )
- WaitSlot( 1000 ) ' sleep( 1 )
+ WaitSlot( MAX_WAIT ) ' sleep( 1 )
'///+<li>Select the first item (new module)</li>
hMenuSelectNr( 1 )
- WaitSlot( 2000 ) ' sleep( 2 )
+ WaitSlot( MAX_WAIT ) ' sleep( 2 )
'///+<li>Verify that a new module is opened and has the focus</li>
if ( EditWindow.Exists() ) then
@@ -606,6 +471,7 @@ function hHideModule() as boolean
'///<ul>
const CFN = "hHideModule::"
+ const MENUENTRY_HIDE = 4
kontext "basicide"
@@ -614,7 +480,7 @@ function hHideModule() as boolean
tabbar.openContextMenu
'///+<li>Select the fourth entry (Hide)</li>
- hMenuSelectNr( 4 )
+ hMenuSelectNr( MENUENTRY_HIDE )
sleep( 1 )
hHideModule() = true
printlog( CFN & "Success" )
@@ -643,14 +509,13 @@ function hInitFormControls( cModule as string ) as boolean
'///Description:
'///<ul>
- const CFN = "hInitFormControls::"
- dim brc as boolean
+ const CFN = "hInitFormControls::"
+ hInitFormControls() = false
'///+<li>Create and edit a new module for the current document</li>
- brc = hInitBasicIde( cModule )
- if ( not brc ) then
+
+ if ( not hInitBasicIde( cModule ) ) then
warnlog( "Could not create new module" )
hCloseBasicIde()
- hInitFormControls() = false
exit function
endif
@@ -658,20 +523,16 @@ function hInitFormControls( cModule as string ) as boolean
BasicIde.maximize()
'///+<li>Create a new dialog.</li>
- brc = hNewDialog()
- if ( not brc ) then
+ if ( not hNewDialog() ) then
warnlog( "Could not create Basic-Dialog" )
hCloseBasicIde()
- hInitFormControls() = false
exit function
endif
'///+<li>Open the macro controls float.</li>
- brc = hShowMacroControls()
- if ( not brc ) then
+ if ( not hShowMacroControls() ) then
warnlog( CFN & "Could not tear off the macro controls float" )
hCloseBasicIde()
- hInitFormControls() = false
exit function
endif
@@ -688,53 +549,33 @@ function hInitBasicIde( cModule as string ) as boolean
'///<h3>Get from a new document to the Basic IDE in one go</h3>
'///<i>Starting point: New, plain document</i>
- '///<ul>
-
- use "global\tools\includes\optional\t_basic_organizer_tools.inc"
- use "global\tools\includes\optional\t_listfuncs.inc"
const CFN = "hInitBasicIde::"
- if ( cModule = "" ) then
- warnlog( CFN & "Invalid parameter passed to function" )
- hInitBasicIde() = false
- exit function
- endif
-
- ' some multi-purpose return code
- dim brc as boolean
-
- '///+<li>Open the basic Organizer</li>
- brc = hOpenBasicOrganizerFromDoc()
- if ( not brc ) then
- warnlog( CFN & "Could not open the Basic Organizer, aborting" )
- hInitBasicIde() = false
- exit function
- endif
+ ToolsMacro_uno
- '///+<li>Create a new module for the current document</li>
- brc = hCreateModuleForDoc( cModule )
- if ( not brc ) then
- warnlog( CFN & "The Basic-IDE is not open, aborting" )
- hInitBasicIde() = false
-
- kontext "Makro"
- if ( Makro.exists() ) then
- printlog( CFN & "Closed Macro Organizer" )
- Makro.cancel()
+ kontext "Makro"
+ if ( Makro.exists( 2 ) ) then
+
+ if ( hCreateModuleForDoc( cModule ) ) then
+
+ kontext "BasicIDE"
+ if ( BasicIDE.exists( 2 ) ) then
+ BasicIDE.maximize()
+ hInitBasicIde() = true
+ else
+ warnlog( CFN & "Failed to open BASIC IDE" )
+ hInitBasicIde() = false
+ endif
+ else
+ warnlog( CFN & "Failed to create a module for the current document" )
+ hInitBasicIde() = false
endif
- exit function
+ else
+ warnlog( CFN & "Failed to open macro organizer" )
+ hInitBasicIde() = false
endif
- '///+<li>Maximize the BasicIDE</li>
- kontext "BasicIde"
- BasicIde.maximize()
-
- '///+<li>Verify that the Basic IDE is open, return TRUE on success, FASLE on failure</li>
- hInitBasicIde() = true
- '///</ul>
- '///NOTE: The function will try to to clean up after itself in case of any error
-
end function
'*******************************************************************************
@@ -746,19 +587,12 @@ function hInsertMacro( _id as integer ) as boolean
'///<ul>
const CFN = "hInsertMacro::"
- dim brc as boolean
-
- if ( ( _id < 1 ) or ( _id > 3 ) ) then
- warnlog( CFN & "Invalid parameter passed to function: " & _id )
- hInsertMacro() = false
- exit function
- endif
-
kontext "basicide"
+
+ printlog( CFN & "This function is deprecated" )
'///+<li>Delete the content of the edit window</li>
- brc = hDeleteMacro()
- if ( not brc ) then
+ if ( not hDeleteMacro() ) then
warnlog( CFN & "Content of Basic-IDE was not deleted" )
hInsertMacro() = false
exit function
@@ -803,6 +637,7 @@ function hTestMacro( _id as integer ) as integer
'///<ul>
const CFN = "hTestMacro::"
+ qaerrorlog( CFN & "This function is deprecated, remove me!" )
kontext "basicide"
@@ -843,59 +678,49 @@ end function
function hCreateBasicWorkFiles() as string
'///<H3>Create a macro, attach it to a file, save the file</H3>
- '///<i>Starting point: The first doc or any other plain document</i>
+ '///<i>Starting point: Any plain document or the backing window</i>
'///<ul>
const CFN = "hCreateBasicWorkFiles::"
const CMACRO = "TestMacro"
- ' some returncodes
- dim brc as boolean
- dim irc as integer
- dim crc as string
-
- dim sFile as string
- sFile = hGetBasicWorkFile( "CURRENT" )
+ dim sFile as string : sFile = hGetBasicWorkFile( "CURRENT" )
'///+<li>Open a new document</li>
- call hCreateDocument()
+ hCreateDocument()
'///+<li>Change the document (to save it)</li>
- crc = hChangeDoc()
- printlog( CFN & crc )
+ printlog( CFN & hChangeDoc() )
'///+<li>Open Basic-Organizer, select the document and create a module</li>
- brc = hInitBasicIde( CMACRO )
- if ( not brc ) then
+ if ( not hInitBasicIde( CMACRO ) ) then
printlog( CFN & "Unable to create a module, aborting" )
- call hDestroyDocument()
+ hDestroyDocument()
hCreateBasicWorkFiles() = ""
exit function
endif
'///+<li>Insert a macro that triggers a messagebox</li>
- brc = hInsertMacro( 3 )
- if ( not brc ) then
+ if ( not hInsertMacro( 3 ) ) then
printlog( CFN & "Unable to insert macro, aborting" )
hCloseBasicIde()
- call hDestroyDocument()
+ hDestroyDocument()
hCreateBasicWorkFiles() = ""
exit function
endif
'///+<li>Close the Basic-IDE</li>
- brc = hCloseBasicIde()
+ hCloseBasicIde()
'///+<li>Save the file without autoextension, overwrite existing</li>
- brc = hFileSaveAsKill( sFile )
- if ( not brc ) then
+ if ( not hFileSaveAsKill( sFile ) ) then
printlog( CFN & "Unknown error while saving the file. Resetting" )
- call ExitRestartTheOffice
+ ExitRestartTheOffice
hCreateBasicWorkFiles() = ""
exit function
endif
'///+<li>Close the document</li>
- call hDestroyDocument()
+ hDestroyDocument()
'///</ul>
@@ -906,9 +731,6 @@ end function
function hIDESelectTabByIndex( iIndex as integer ) as string
- use "global\tools\includes\optional\t_accels.inc"
-
-
'///<h3>Select a tab within the BASIC-IDE by index</h3>
'///<i>The BASIC-IDE has to be open and has the focus. This function
'///+ selects the tab by sending CTRL+PAGEUP or CTRL+PAGEDOWN to the IDE using
@@ -947,7 +769,6 @@ function hIDESelectTabByIndex( iIndex as integer ) as string
dim cTabName as string
dim iCurrentTab as integer
- dim cAccel as string
'///<u>Description:</u>
'///<ul>
@@ -957,15 +778,14 @@ function hIDESelectTabByIndex( iIndex as integer ) as string
'///+<li>Retrieve the accelerator to switch tabs</li>
'///+<li>Switch tabs</li>
select case iIndex
- case 0 : cAccel = ""
- case 1 : cAccel = hGetAccel( "IDE_SWITCH_TAB-" )
- for iTab = 1 to 20
- BasicIDE.typeKeys( cAccel )
- next iTab
- case else: cAccel = hGetAccel( "IDE_SWITCH_TAB+" )
- for iTab = 1 to iIndex
- BasicIDE.typeKeys( cAccel )
- next iTab
+ case 1 :
+ for iTab = 1 to 20
+ BasicIDE.typeKeys( "<MOD1 PAGEDOWN>" )
+ next iTab
+ case else:
+ for iTab = 1 to iIndex
+ BasicIDE.typeKeys( "<MOD1 PAGEUP>" )
+ next iTab
end select
'///+<li>Select the Tabbar</li>
@@ -978,7 +798,7 @@ function hIDESelectTabByIndex( iIndex as integer ) as string
hSelectMenuNr( 3 )
'///+<li>Copy the selected string to the clipboard</li>
- EditCopy
+ hUseAsyncSlot( "EditCopy" )
'///+<li>Send ESC to the tabbar to deselect the tab</li>
Kontext "Tabbar"
@@ -988,8 +808,9 @@ function hIDESelectTabByIndex( iIndex as integer ) as string
cTabName = getClipboardText
'///+<li>Print exit message, set return value</li>
- printlog( CFN & "Exit with result: " & cTabName )
+ if ( GVERBOSE ) then printlog( CFN & "Exit with result: " & cTabName )
hIDESelectTabByIndex() = cTabName
'///</ul>
end function
+
diff --git a/testautomation/global/tools/includes/optional/t_basic_organizer_tools.inc b/testautomation/global/tools/includes/optional/t_basic_organizer_tools.inc
index cb348d3c1c3f..b813ee2bf706 100644..100755
--- a/testautomation/global/tools/includes/optional/t_basic_organizer_tools.inc
+++ b/testautomation/global/tools/includes/optional/t_basic_organizer_tools.inc
@@ -70,76 +70,49 @@ end function
function hCreateModuleForDoc( optional cName as string ) as boolean
- use "global\tools\includes\optional\t_treelist_tools.inc"
- use "global\tools\includes\optional\t_stringtools.inc"
-
'///<h3>Create a new Basic module for the current document</h3>
'///<i>Starting point: Basic Macro Organizer is visible and has focus</i>
- '///<ul>
-
const CFN = "hCreateModuleForDoc::"
+ const DEFAULT_WAIT = 2
+ const RETVAL_FAILURE = 0
- dim iWait as integer ' how long we had to wait for the IDE to open
- dim iPos as integer
- dim brc as boolean ' boolean returncode, a temporary variable
- brc = false
- dim cMsg as string
+ if ( isMissing( cName ) ) then cName = "TTModule"
- ' make sure that we have a name for the module
- if ( isMissing( cName ) ) Then
- cName = "TTModule"
- endif
-
- '///+<li>Select the last module (it should belong to the current document)</li>
kontext "Makro"
- iPos = hSelectTheLastNode( MakroAus )
-
- '///+<li>Click the New-Button, name the module</li>
- if ( Neu.isEnabled() ) then
- 'printlog( CFN & "New-button is enabled" )
- else
- warnlog( CFN & "New-button is disabled" )
- hCreateModuleForDoc() = false
- exit function
- endif
-
- Neu.Click()
-
- '///+<li>If the module already exists we end up on the Deletion dialog</li>
- kontext "Active"
- if ( Active.exists() ) then
- cMsg = active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- printlog( "Module seems to exist, deleting Main: " & cMsg )
- Active.Yes()
- endif
-
- Kontext "NeuesModul"
- if ( NeuesModul.exists() ) then
- Modulname.SetText( cName )
- NeuesModul.OK()
+ if ( Makro.exists() ) then
+ if ( hSelectTheLastNode( MakroAus ) > RETVAL_FAILURE ) then
+
+ kontext "Makro"
+ if ( hClickButton( Neu ) ) then
+
+ Kontext "NeuesModul"
+ if ( NeuesModul.exists( DEFAULT_WAIT ) ) then
+ Modulname.SetText( cName )
+ hCloseDialog( NeuesModul, "ok" )
+
+ kontext "BasicIDE"
+ if ( BasicIde.exists( DEFAULT_WAIT ) ) then
+ hCreateModuleForDoc() = true
+ else
+ printlog( CFN & "BASIC IDE is not open" )
+ hCreateModuleForDoc() = false
+ endif
+ else
+ warnlog( CFN & "Dialog <NeuesModul> did not open" )
+ hCreateModuleForDoc() = false
+ endif
+ else
+ warnlog( CFN & "Failed to click <Neu> button" )
+ hCreateModuleForDoc() = false
+ endif
+ else
+ warnlog( CFN & "Failed to select the last node" )
+ hCreateModuleForDoc() = false
+ endif
else
- warnlog( CFN & "Failed create a new module, aborting" )
+ warnlog( CFN & "Macro organizer is not open" )
hCreateModuleForDoc() = false
- kontext "Makro"
- Makro.cancel()
- exit function
endif
-
- '///+<li>Wait for the BASIC_IDE to open, verify</li>
- ' BasicIDE is bad for "Kontexting", using the default toolbar instead
- kontext "MacroBar"
- if ( MacroBar.exists( 3 ) ) then
- printlog( CFN & "Exit: New module: " & cName & ". IDE is open" )
- brc = true
- else
- warnlog( CFN & "Exit: Failed to create the Module" )
- brc = false
- endif
-
- hCreateModuleForDoc() = brc
- '///+<li>Return TRUE on success, FALSE on failure</li>
- '///</ul>
end function
@@ -157,17 +130,12 @@ function hOpenBasicObjectOrganizer( iTabPage as integer ) as boolean
' BASIC-IDE
' NOTE: This is the organizer for libraries, modules and dialogs,
' not the one to run or assign macros!
-
- dim iMenuSize as integer
- dim brc as boolean
-
'///+<li>Open the context menu of the tabbar</li>
kontext "basicide"
- Tabbar.OpenContextMenu
+ Tabbar.OpenContextMenu()
'///+<li>Select the last entry of the context menu (dynamic menu!)</li>
- iMenuSize = hMenuItemgetCount()
- if ( iMenuSize = 2 ) then
+ if ( hMenuItemGetCount() = 2 ) then
printlog( " * short context menu (no edit-window)" )
hMenuSelectNr( 2 )
else
@@ -178,13 +146,12 @@ function hOpenBasicObjectOrganizer( iTabPage as integer ) as boolean
WaitSlot()
'///+<li>On the basic object organizer switch to the Modules tab</li>
- brc = hSelectBasicObjectOrganizerTab( 1 )
- if ( not brc ) then
+ if ( hSelectBasicObjectOrganizerTab( 1 ) ) then
+ printlog( CFN & "Requested page is open" )
+ hOpenBasicObjectOrganizer() = true
+ else
warnlog( CFN & "Failed to open requested Tabpage" )
hOpenBasicObjectOrganizer() = false
- else
- printlog( CFN & "Requested page is open" )
- hOpenBasicObjectOrganizer = true
endif
'///+<li>Return TRUE on success, FALSE on failure</li>
'///</ul>
@@ -194,37 +161,6 @@ end function
'*******************************************************************************
-function hOpenBasicOrganizerFromDoc() as boolean
-
- '///<h3>Open the Basic Macro Organizer from a plain document</h3>
- '///<i>Starting point: Plain document</i>
- '///<ul>
-
- const CFN = "hOpenBasicOrganizerFromDoc::"
-
- '///+<li>Use the slot ToolsMacro_uno to open the Basic Macro organizer</li>
- ToolsMacro_uno
-
- '///+<li>Verify that the dialog is open</li>
- kontext "Makro"
- if ( not Makro.exists() ) then
- warnlog( CFN & "Could not open Macro Organizer" )
- hOpenBasicOrganizerFromDoc() = false
- exit function
- endif
-
- call dialogtest( Makro )
-
- '///+<li>Return TRUE on success, FALSE on failure</li>
- printlog( CFN & "Basic Organizer is open" )
- hOpenBasicOrganizerFromDoc() = true
- kontext "Makro"
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
function hSelectBasicObjectOrganizerTab( iTabPage as integer ) as boolean
const CFN = "hSelectBasicObjectOrganizerTab::"
@@ -239,13 +175,6 @@ function hSelectBasicObjectOrganizerTab( iTabPage as integer ) as boolean
'///Description:
'///<ul>
- '///+<li>Verify function parameters</li>
- if ( ( iTabPage < 1 ) or ( iTabPage > 3 ) ) then
- warnlog( CFN & "Illegal argument passed to function: " & iTabPage )
- hSelectBasicObjectOrganizerTab() = false
- exit function
- endif
-
'///+<li>Switch between tabpages 1, 2 or 3</li>
select case iTabPage
case 1 :
@@ -295,22 +224,16 @@ function hDeleteLibrary( iLocation as integer, cLibName as string ) as boolean
const CFN = "hDeleteLibrary::"
const ITABPOS = 3
- '///+<li>Verify function parameters</li>
- if ( ( iLocation < 1 ) or ( iLocation > 3 ) ) then
- warnlog( CFN & "Invalid parameter passed to function" )
- hDeleteLibrary() = false
- endif
-
dim iObjectCount as integer
dim iCurrentObject as integer
dim cCurrentObjectName as string
'///+<li>Open Macro Organizer</li>
- hOpenBasicOrganizerFromDoc()
+ ToolsMacro_uno
'///+<li>Click Manage-button</li>
Kontext "Makro"
- Verwalten.click()
+ hClickButton( Verwalten )
'///+<li>Go to the Libraries Tab on the Macro Object Organizer</li>
hSelectBasicObjectOrganizerTab( ITABPOS )
@@ -329,7 +252,7 @@ function hDeleteLibrary( iLocation as integer, cLibName as string ) as boolean
if ( cCurrentObjectName = cLibName ) then
'///+<li>Click Delete</li>
- Loeschen.click()
+ hClickButton( Loeschen )
exit for
endif
@@ -337,7 +260,7 @@ function hDeleteLibrary( iLocation as integer, cLibName as string ) as boolean
'///+<li>Confirm to delete library</li>
Kontext "Active"
- if ( Active.exists() ) then
+ if ( Active.exists( 1 ) ) then
active.yes()
else
warnlog( CFN & "No confirmation for delete" )
@@ -354,11 +277,11 @@ function hDeleteLibrary( iLocation as integer, cLibName as string ) as boolean
endif
'///+<li>Cancel Macro Object Organizer</li>
- TabBibliotheken.cancel()
+ hCloseDialog( TabBibliotheken, "cancel" )
'///+<li>Cancel Basic Macro Organizer</li>
Kontext "Makro"
- Makro.cancel()
+ hCloseDialog( Makro, "cancel" )
'///+<li>Return TRUE on success, FALSE on failure</li>
'///</ul>
@@ -366,84 +289,6 @@ end function
'*******************************************************************************
-function hIsMacroEditButtonEnabled() as boolean
-
- '///<h3>Test whether the "Edit..." button is enabled or not</h3>
- '///<i>Starting point: Basic Macro Organizer</i>
- '///<ul>
-
- const CFN = "hIsMacroEditButtonEnabled::"
- dim brc as boolean
-
- '///+<li>Check that the macro dialog is open</li>
- Kontext "Makro"
- if ( not Makro.exists() ) then
- warnlog( "Macro organizer is not open, aborting function" )
- hIsMacroEditButtonEnabled() = false
- exit function
- endif
-
- '///+<li>Verify that the Edit...-Button exists and is enabled</li>
- if ( bearbeiten.exists() ) then
- if ( bearbeiten.isEnabled() ) then
- printlog( CFN & "Button exists and is enabled" )
- brc = true
- else
- printlog( CFN & "Button exists but is disabled" )
- brc = false
- endif
- else
- warnlog( CFN & "Button does not exist" )
- brc = false
- endif
-
- '///+<li>Return TRUE if button exists and is enabled</li>
- '///</ul>
- hIsMacroEditButtonEnabled() = brc
-
-end function
-
-'*******************************************************************************
-
-function hIsMacroNewButtonEnabled() as boolean
-
- '///<h3>Find out whether the "New..." button is enabled or not</h3>
- '///<i>Starting point: Basic Macro Organizer</i>
- '///<ul>
-
- const CFN = "hIsMacroNewButtonEnabled::"
- dim brc as boolean
-
- '///+<li>Check that the macro dialog is open</li>
- Kontext "Makro"
- if ( not Makro.exists() ) then
- warnlog( "Macro organizer is not open, aborting function" )
- hIsMacroNewButtonEnabled() = false
- exit function
- endif
-
- '///+<li>Verify that the New...-Button exists and is enabled</li>
- if ( neu.exists() ) then
- if ( neu.isEnabled() ) then
- printlog( CFN & "Button exists and is enabled" )
- brc = true
- else
- printlog( CFN & "Button exists but is disabled" )
- brc = false
- endif
- else
- warnlog( CFN & "Button does not exist" )
- brc = false
- endif
-
- '///+<li>Return TRUE if button exists and is enabled</li>
- '///</ul>
- hIsMacroNewButtonEnabled() = brc
-
-end function
-
-'*******************************************************************************
-
function hNameBasicModule( cName as string ) as boolean
'///<h3>Name a Basic Module</h3>
@@ -466,12 +311,7 @@ function hNameBasicModule( cName as string ) as boolean
'///<u>Description</u>:
'///<ul>
- use "global\tools\includes\optional\t_stringtools.inc"
-
const CFN = "hNameBasicModule::"
- dim brc as boolean
- brc = true
- dim cMsg as string
'///+<li>Verify that the naming dialog is open</li>
kontext "NeuesModul"
@@ -484,22 +324,20 @@ function hNameBasicModule( cName as string ) as boolean
Modulname.SetText( cName )
'///+<li>Accept the name with OK</li>
- NeuesModul.OK()
+ hCloseDialog( NeuesModul, "ok" )
'///+<li>If there is no warning, the name should be valid.</li>
kontext "BasicIDE"
if ( BasicIde.exists( 2 ) ) then
- brc = true
+ hNameBasicModule() = true
printlog( CFN & "Name accepted, Basic-Ide is open" )
else
- brc = false
+ hNameBasicModule() = false
'///+<li>Look for invalid name warning, close it</li>
kontext "active"
if ( active.exists() ) then
- cMsg = active.getText()
- cMsg = hRemoveLineBreaks( cMsg
- printlog( CFN & "Msgbox: " & cMsg )
- active.ok()
+ printlog( CFN & "Msgbox: " & active.exists() )
+ hCloseDialog( active, "ok" )
endif
'///+<li>If the name is invalid, get back to the naming-dialog</li>
@@ -510,8 +348,6 @@ function hNameBasicModule( cName as string ) as boolean
warnlog( CFN & "Naming failed but we are not on the naming dialog" )
endif
endif
-
- hNameBasicModule() = brc
'///</ul>
end function
diff --git a/testautomation/global/tools/includes/optional/t_ctrl_1.inc b/testautomation/global/tools/includes/optional/t_ctrl_1.inc
deleted file mode 100644
index d7fd3ac42f81..000000000000
--- a/testautomation/global/tools/includes/optional/t_ctrl_1.inc
+++ /dev/null
@@ -1,955 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : marc.neumann@sun.com
-'*
-'* short description :
-'*
-'*******************************************************************
-'*
-' #1 hChangeControlSettings
-'*
-'\******************************************************************
-
-function hChangeControlSettings ( sType as String, lsProps( ) ) as Boolean
-
- if bAsianLan = TRUE then
- printlog " ******************************************* "
- printlog " *** running on asian office version *** "
- printlog " ******************************************* "
- else
- printlog " ******************************************* "
- printlog " *** running on non-asian office version *** "
- printlog " ******************************************* "
- endif
-
- Kontext "TabGeneralControl"
- if TabGeneralControl.Exists = FALSE then
- Kontext "TB_MacroControls"
- printlog " activate properties for '" + sType + "'"
- Properties.Click
- Kontext "TabGeneralControl"
- Sleep (1)
- end if
-
- printlog "- change global settings"
- NameText.SetText "tt_" + sType + "_tt"
- ListAppend ( lsProps(), NameText.GetText )
-
- if Enabled.GetSelIndex = 1 then
- Enabled.Select 2
- else
- Enabled.Select 1
- end if
-
- ListAppend ( lsProps(), Enabled.GetSelText )
-
- if sType <> "dialog" then
- if Printable.GetSelIndex = 1 then
- Printable.Select 2
- else
- Printable.Select 1
- end if
- ListAppend ( lsProps(), Printable.GetSelText )
- else
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- end if
-
-' PageStep.More 2
-' ListAppend ( lsProps(), PageStep.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- Order.More 2
- Height.Less 3
- ListAppend ( lsProps(), Order.GetText ) ' have to be checked after another control is changed ( it depends on the number of controls )
- ListAppend ( lsProps(), Height.GetText )
- Width.More 4
- ListAppend ( lsProps(), Width.GetText )
-' PositionX.More 3
-' ListAppend ( lsProps(), PositionX.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' PositionY.Less 2
-' ListAppend ( lsProps(), PositionY.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- Information.SetText "tt info"
- ListAppend ( lsProps(), Information.GetText )
- Help.SetText "tt help"
- ListAppend ( lsProps(), Help.GetText )
- HelpURL.SetText "www.mopo.de"
- ListAppend ( lsProps(), HelpURL.GetText )
-
- printlog "- change special settings for '" + sType + "'"
-'##### CommandButton #####
- if instr ( lcase ( sType ), "commandbutton" ) then
-' SetControlType CTBrowseBox
-' Label.TypeKeys "tt_label_tt"
-' ListAppend ( lsProps(), Label.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- TabStop.Select 3
- ListAppend ( lsProps(), TabStop.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 5 )
- else
- Font.Select ( 5 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 17
- ListAppend ( lsProps(), Background.GetSelText )
-' ButtonType.Select 3
-' ListAppend ( lsProps(), ButtonType.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' if State.GetSelIndex = 1 then
-' State.Select 2
-' else
-' State.Select 1
-' end if
-' ListAppend ( lsProps(), State.GetSelText )
-
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- if DefaultButton.GetSelIndex = 1 then
- DefaultButton.Select 2
- else
- DefaultButton.Select 2
- end if
-
- ListAppend ( lsProps(), DefaultButton.GetSelText )
- GraphicsButton.Click
-
- Kontext "GrafikEinfuegenDlg"
- Dateiname.SetText ( ConvertPath ( gTesttoolPath + "global\input\graf_inp\baer.tif" ) )
- DateiTyp.Select 1 ' set the filter to 'all formats'
- Oeffnen.Click
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), Graphics.GetText )
- GraphicsAlignment.Select 4
- ListAppend ( lsProps(), GraphicsAlignment.GetSelText )
- end if
-
-'##### ImageControl #####
- if instr ( lcase ( sType ), "imagecontrol" ) then
- Background.Select 14
- ListAppend ( lsProps(), Background.GetSelText )
- GraphicsButton.Click
-
- Kontext "GrafikEinfuegenDlg"
- Dateiname.SetText ( ConvertPath ( gTesttoolPath + "global\input\graf_inp\baer.tif" ) )
- DateiTyp.Select 1 ' set the filter to 'all formats'
- Oeffnen.Click
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), Graphics.GetText )
-' if Scale.GetSelIndex = 1 then
-' Scale.Select 2
-' else
-' Scale.Select 1
-' end if
-' ListAppend ( lsProps(), Scale.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- end if
-
-'##### CheckBox #####
- if instr ( lcase ( sType ), "checkbox" ) then
-' SetControlType CTBrowseBox
-' Label.TypeKeys "tt_label_tt"
-' ListAppend ( lsProps(), Label.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- TabStop.Select 3
- ListAppend ( lsProps(), TabStop.GetSelText )
-
-' if State.GetSelIndex = 1 then
-' State.Select 2
-' else
-' State.Select 1
-' end if
-' ListAppend ( lsProps(), State.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-
-' if TriState.GetSelIndex = 1 then
-' TriState.Select 2
-' else
-' TriState.Select 1
-' end if
-' ListAppend ( lsProps(), TriState.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- end if
-
-'##### OptionButton #####
- if instr ( lcase ( sType ), "optionbutton" ) then
-' SetControlType CTBrowseBox
-' Label.TypeKeys "tt_label_tt"
-' ListAppend ( lsProps(), Label.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- TabStop.Select 3
- ListAppend ( lsProps(), TabStop.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 5 )
- else
- Font.Select ( 5 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
-
-' if State.GetSelIndex = 1 then
-' State.Select 2
-' else
-' State.Select 1
-' end if
-' ListAppend ( lsProps(), State.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- end if
-
-'##### Label #####
- if instr ( lcase ( sType ), "label" ) then
-' SetControlType CTBrowseBox
-' Label.TypeKeys "tt_label_tt"
-' ListAppend ( lsProps(), Label.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- TabStop.Select 3
- ListAppend ( lsProps(), TabStop.GetSelText )
-
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 5 )
- else
- Font.Select ( 5 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
-
- Align.Select 4
- ListAppend ( lsProps(), Align.GetSelText )
- Background.Select 20
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 3
- ListAppend ( lsProps(), Border.GetSelText )
-
- if MultiLine.GetSelIndex = 1 then
- MultiLine.Select 2
- else
- MultiLine.Select 1
- end if
-
- ListAppend ( lsProps(), MultiLine.GetSelText )
- end if
-
-'##### TextField #####
- if instr ( lcase ( sType ), "textfield" ) then
-' SetControlType CTBrowseBox
-' TextText.TypeKeys "tt_text_tt"
-' ListAppend ( lsProps(), TextText.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- MaxTextLen.More 5
- ListAppend ( lsProps(), MaxTextLen.GetText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 3
- ListAppend ( lsProps(), TabStop.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 5 )
- else
- Font.Select ( 5 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Align.Select 1
- ListAppend ( lsProps(), Align.GetSelText )
- Background.Select 20
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 3
- ListAppend ( lsProps(), Border.GetSelText )
-
- if MultiLine.GetSelIndex = 1 then
- MultiLine.Select 2
- else
- MultiLine.Select 1
- end if
-
- ListAppend ( lsProps(), MultiLine.GetSelText )
-
- if ManualLineBreak.GetSelIndex = 1 then
- ManualLineBreak.Select 2
- else
- ManualLineBreak.Select 1
- end if
-
- ListAppend ( lsProps(), ManualLineBreak.GetSelText )
-
- if HorizontalScroll.GetSelIndex = 1 then
- HorizontalScroll.Select 2
- else
- HorizontalScroll.Select 1
- end if
-
- ListAppend ( lsProps(), HorizontalScroll.GetSelText )
-
- if VerticalScroll.GetSelIndex = 1 then
- VerticalScroll.Select 2
- else
- VerticalScroll.Select 1
- end if
-
- ListAppend ( lsProps(), VerticalScroll.GetSelText )
- Password.SetText "t"
- ListAppend ( lsProps(), Password.GetText )
-
- end if
-
-'##### Listbox #####
- if instr ( lcase ( sType ), "listbox" ) then
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 3
- ListAppend ( lsProps(), TabStop.GetSelText )
-' SetControlType CTBrowseBox
-' ListEntries.TypeKeys "tt_text_tt"
-' ListAppend ( lsProps(), ListEntries.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 5 )
- else
- Font.Select ( 5 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
-
- if DropDown.GetSelIndex = 1 then
- DropDown.Select 2
- else
- DropDown.Select 1
- end if
-
- ListAppend ( lsProps(), DropDown.GetSelText )
- LineCount.Less 1
- ListAppend ( lsProps(), LineCount.GetText )
-
- if MultiSelection.GetSelIndex = 1 then
- MultiSelection.Select 2
- else
- MultiSelection.Select 1
- end if
-
- ListAppend ( lsProps(), MultiSelection.GetSelText )
- end if
-
-'##### Combobox #####
- if instr ( lcase ( sType ), "combobox" ) then
-
- TextText.SetText "tt_text_tt"
- ListAppend ( lsProps(), TextText.GetText )
- MaxTextLen.More 2
- ListAppend ( lsProps(), MaxTextLen.GetText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 3
- ListAppend ( lsProps(), TabStop.GetSelText )
-' SetControlType CTBrowseBox
-' ListEntries.TypeKeys "tt_text_tt"
-' ListAppend ( lsProps(), ListEntries.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 5 )
- else
- Font.Select ( 5 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
-
- if DropDown.GetSelIndex = 1 then
- DropDown.Select 2
- else
- DropDown.Select 1
- end if
-
- ListAppend ( lsProps(), DropDown.GetSelText )
-
- if AutoComplete.GetSelIndex = 1 then
- AutoComplete.Select 2
- else
- AutoComplete.Select 1
- end if
-
- ListAppend ( lsProps(), AutoComplete.GetSelText )
- LineCount.More 5
- ListAppend ( lsProps(), LineCount.GetText )
- Border.Select 2 ' sometimes the line count is not saved correctly, when it was changed as last property
- Border.Select 1 ' as work-around : change another property and then set it to the last entry
-
- end if
-
-'##### Scrollbar #####
- if instr ( lcase ( sType ), "scrollbar" ) then
-
-' ScrollValue.More 5
-' ListAppend ( lsProps(), ScrollValue.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' ScrollValueMax.Less 5
-' ListAppend ( lsProps(), ScrollValueMax.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' LineIncrement.More 1
-' ListAppend ( lsProps(), LineIncrement.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' BlockIncrement.Less 1
-' ListAppend ( lsProps(), BlockIncrement.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' VisibleSize.Less 2
-' ListAppend ( lsProps(), VisibleSize.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' if Orientation.GetSelIndex = 1 then
-' Orientation.Select 2
-' else
-' Orientation.Select 1
-' end if
-' ListAppend ( lsProps(), Orientation.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- Border.Select 2
- ListAppend ( lsProps(), Border.GetSelText )
- end if
-
-'##### FrameControl #####
- if instr ( lcase ( sType ), "framecontrol" ) then
-' SetControlType CTBrowseBox
-' Label.TypeKeys "tt_label_tt"
-' ListAppend ( lsProps(), Label.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
-
- end if
-
-'##### progressBar #####
- if instr ( lcase ( sType ), "progressbar" ) then
-
-' ScrollValue.More 5
-' ListAppend ( lsProps(), ScrollValue.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' ScrollValueMax.Less 5
-' ListAppend ( lsProps(), ScrollValueMax.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' LineIncrement.More 1
-' ListAppend ( lsProps(), LineIncrement.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' BlockIncrement.Less 1
-' ListAppend ( lsProps(), BlockIncrement.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' VisibleSize.Less 2
-' ListAppend ( lsProps(), VisibleSize.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' if Orientation.GetSelIndex = 1 then
-' Orientation.Select 2
-' else
-' Orientation.Select 1
-' end if
-' ListAppend ( lsProps(), Orientation.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- Background.Select 4
- ListAppend ( lsProps(), Background.GetSelText )
- end if
-
-'##### FixedLine #####
- if instr ( lcase ( sType ), "fixedline" ) then
-' SetControlType CTBrowseBox
-' Label.TypeKeys "tt_label_tt"
-' ListAppend ( lsProps(), Label.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
-' if Orientation.GetSelIndex = 1 then
-' Orientation.Select 2
-' else
-' Orientation.Select 1
-' end if
-' ListAppend ( lsProps(), Orientation.GetSelText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- end if
-
-
-'##### DateField #####
- if instr ( lcase ( sType ), "datefield" ) then
- if StrictFormat.GetSelIndex = 1 then
- StrictFormat.Select 2
- else
- StrictFormat.Select 1
- end if
- ListAppend ( lsProps(), StrictFormat.GetSelText )
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 2
- ListAppend ( lsProps(), TabStop.GetSelText )
- DateField.More 3
- ListAppend ( lsProps(), DateField.GetText )
- DateMin.More 3
- ListAppend ( lsProps(), DateMin.GetText )
- DateMax.Less 3
- ListAppend ( lsProps(), DateMax.GetText )
- DateFormat.Select 7
- ListAppend ( lsProps(), DateFormat.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
- if DropDown.GetSelIndex = 1 then
- DropDown.Select 2
- else
- DropDown.Select 1
- end if
- ListAppend ( lsProps(), DropDown.GetSelText )
- if Spin.GetSelIndex = 1 then
- Spin.Select 2
- else
- Spin.Select 1
- end if
- ListAppend ( lsProps(), Spin.GetSelText )
- end if
-
-'##### TimeField #####
- if instr ( lcase ( sType ), "timefield" ) then
-
- if StrictFormat.GetSelIndex = 1 then
- StrictFormat.Select 2
- else
- StrictFormat.Select 1
- end if
-
- ListAppend ( lsProps(), StrictFormat.GetSelText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 1
- ListAppend ( lsProps(), TabStop.GetSelText )
- TimeField.Less 3
- ListAppend ( lsProps(), TimeField.GetText )
- TimeMin.More 2
- ListAppend ( lsProps(), TimeMin.GetText )
- TimeMax.Less 3
- ListAppend ( lsProps(), TimeMax.GetText )
- TimeFormat.Select 3
- ListAppend ( lsProps(), TimeFormat.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
-
- if Spin.GetSelIndex = 1 then
- Spin.Select 2
- else
- Spin.Select 1
- end if
-
- ListAppend ( lsProps(), Spin.GetSelText )
- end if
-
-'##### NumericField #####
- if instr ( lcase ( sType ), "numericfield" ) then
-
- if StrictFormat.GetSelIndex = 1 then
- StrictFormat.Select 2
- else
- StrictFormat.Select 1
- end if
-
- ListAppend ( lsProps(), StrictFormat.GetSelText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 1
- ListAppend ( lsProps(), TabStop.GetSelText )
- Value.Less 3
- ListAppend ( lsProps(), Value.GetText )
- ValueMin.Less 2
- ListAppend ( lsProps(), ValueMin.GetText )
- ValueMax.Less 3
- ListAppend ( lsProps(), ValueMax.GetText )
- ValueStep.More 5
- ListAppend ( lsProps(), ValueStep.GetText )
- Accuray.More 3
- ListAppend ( lsProps(), Accuray.GetText )
-
- if ThousandSeperator.GetSelIndex = 1 then
- ThousandSeperator.Select 2
- else
- ThousandSeperator.Select 1
- end if
-
- ListAppend ( lsProps(), ThousandSeperator.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
- if Spin.GetSelIndex = 1 then
- Spin.Select 2
- else
- Spin.Select 1
- end if
- ListAppend ( lsProps(), Spin.GetSelText )
- end if
-
-
-'##### CurrencyField #####
- if instr ( lcase ( sType ), "currencyfield" ) then
-
- if StrictFormat.GetSelIndex = 1 then
- StrictFormat.Select 2
- else
- StrictFormat.Select 1
- end if
-
- ListAppend ( lsProps(), StrictFormat.GetSelText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 1
- ListAppend ( lsProps(), TabStop.GetSelText )
- Value.Less 3
- ListAppend ( lsProps(), Value.GetText )
- ValueMin.Less 2
- ListAppend ( lsProps(), ValueMin.GetText )
- ValueMax.Less 3
- ListAppend ( lsProps(), ValueMax.GetText )
- ValueStep.More 5
- ListAppend ( lsProps(), ValueStep.GetText )
- Accuray.More 2
- ListAppend ( lsProps(), Accuray.GetText )
-
- if ThousandSeperator.GetSelIndex = 1 then
- ThousandSeperator.Select 2
- else
- ThousandSeperator.Select 1
- end if
-
- ListAppend ( lsProps(), ThousandSeperator.GetSelText )
- CurrencySymbol.SetText "#"
- ListAppend ( lsProps(), CurrencySymbol.GetText )
-
- if CurrSymPosition.GetSelIndex = 1 then
- CurrSymPosition.Select 2
- else
- CurrSymPosition.Select 1
- end if
-
- ListAppend ( lsProps(), CurrSymPosition.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
-
- if Spin.GetSelIndex = 1 then
- Spin.Select 2
- else
- Spin.Select 1
- end if
-
- ListAppend ( lsProps(), Spin.GetSelText )
- end if
-
-'##### FormattedField #####
- if instr ( lcase ( sType ), "formattedfield" ) then
- MaxTextLen.More 4
- ListAppend ( lsProps(), MaxTextLen.GetText )
-
- if StrictFormat.GetSelIndex = 1 then
- StrictFormat.Select 2
- else
- StrictFormat.Select 1
- end if
-
- ListAppend ( lsProps(), StrictFormat.GetSelText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 1
- ListAppend ( lsProps(), TabStop.GetSelText )
-' Effective.SetText "2"
-' ListAppend ( lsProps(), Effective.GetText )
- ListAppend ( lsProps(), "not testable" ) ' dummy entry
- EffectiveMin.SetText "1"
- ListAppend ( lsProps(), EffectiveMin.GetText )
- EffectiveMax.SetText "1"
- ListAppend ( lsProps(), EffectiveMax.GetText )
- FormatkeyButton.Click
-
- Kontext "ZahlenFormat"
- Kategorie.Select 3
- Kategorieformat.Select ( Kategorieformat.GetItemCount )
- ZahlenFormat.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), FormatKey.GetText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Align.Select 1
- ListAppend ( lsProps(), Align.GetSelText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
-
- if Spin.GetSelIndex = 1 then
- Spin.Select 2
- else
- Spin.Select 1
- end if
-
- ListAppend ( lsProps(), Spin.GetSelText )
- end if
-
-'##### PatternField #####
- if instr ( lcase ( sType ), "patternfield" ) then
- TextText.SetText "tt_text_tt"
- ListAppend ( lsProps(), TextText.GetText )
- MaxTextLen.More 4
- ListAppend ( lsProps(), MaxTextLen.GetText )
- EditMask.SetText "aeiopu"
- ListAppend ( lsProps(), EditMask.GetText )
- LiteralMask.SetText "upqpsd"
- ListAppend ( lsProps(), LiteralMask.GetText )
-
- if StrictFormat.GetSelIndex = 1 then
- StrictFormat.Select 2
- else
- StrictFormat.Select 1
- end if
-
- ListAppend ( lsProps(), StrictFormat.GetSelText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 1
- ListAppend ( lsProps(), TabStop.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
- end if
-
-'##### FileControl #####
- if instr ( lcase ( sType ), "filecontrol" ) then
- TextText.SetText "tt_text_tt"
- ListAppend ( lsProps(), TextText.GetText )
-
- if Readonly.GetSelIndex = 1 then
- Readonly.Select 2
- else
- Readonly.Select 1
- end if
-
- ListAppend ( lsProps(), Readonly.GetSelText )
- TabStop.Select 1
- ListAppend ( lsProps(), TabStop.GetSelText )
- CharacterSetButton.Click
-
- Kontext "TabFont"
- if bAsianLan = TRUE then
- FontEast.Select ( 3 )
- else
- Font.Select ( 3 )
- endif
- TabFont.OK
-
- Kontext "TabGeneralControl"
- ListAppend ( lsProps(), CharacterSet.GetText )
- Background.Select 1
- ListAppend ( lsProps(), Background.GetSelText )
- Border.Select 1
- ListAppend ( lsProps(), Border.GetSelText )
- end if
-
-end function
diff --git a/testautomation/global/tools/includes/optional/t_ctrl_2.inc b/testautomation/global/tools/includes/optional/t_ctrl_2.inc
deleted file mode 100644
index 498f6f9f33ce..000000000000
--- a/testautomation/global/tools/includes/optional/t_ctrl_2.inc
+++ /dev/null
@@ -1,355 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : marc.neumann@sun.com
-'*
-'* short description :
-'*
-'*******************************************************************
-'*
-' #1 hCheckControlSettings
-'*
-'\******************************************************************
-
-function hCheckControlSettings ( sType as String, lsProps( ) ) as Boolean
-
- Kontext "TabGeneralControl"
- if TabGeneralControl.Exists = FALSE then
- Kontext "TB_MacroControls"
- printlog " activate properties for '" + sType + "'"
- Properties.Click
- Kontext "TabGeneralControl"
- Sleep (1)
- end if
-
- printlog "- check global settings"
- if NameText.GetText <> lsProps(1) then Warnlog "Name => changes not saved! should : '" + lsProps(1) + "' is : '" + NameText.GetText + "'"
- if Enabled.GetSelText <> lsProps(2) then Warnlog "Enabled => changes not saved! should : '" + lsProps(2) + "' is : '" + Enabled.GetSelText + "'"
- if sType <> "dialog" then
- if Printable.GetSelText <> lsProps(3) then Warnlog "Printable => changes not saved! should : '" + lsProps(3) + "' is : '" + Printable.GetSelText + "'"
- end if
-' if PageStep.GetText <> lsProps(4) then Warnlog "Page Step => changes not saved! should : '" + lsProps(4) + "' is : '" + PageStep.GetText + "'"
- if Order.GetText <> lsProps(5) then Warnlog "Order => changes not saved! should : '" + lsProps(5) + "' is : '" + Order.GetText + "'"
- if Height.GetText <> lsProps(6) then Warnlog "Height => changes not saved! should : '" + lsProps(6) + "' is : '" + Height.GetText + "'"
- if Width.GetText <> lsProps(7) then Warnlog "Width => changes not saved! should : '" + lsProps(7) + "' is : '" + Width.GetText + "'"
-' if PositionX.GetText <> lsProps(8) then Warnlog "Position x => changes not saved! should : '" + lsProps(8) + "' is : '" + PositionX.GetText + "'"
-' if PositionY.GetText <> lsProps(9) then Warnlog "Position y => changes not saved! should : '" + lsProps(9) + "' is : '" + PositionY.GetText + "'"
- if Information.GetText <> lsProps(10) then Warnlog "Information => changes not saved! should : '" + lsProps(10) + "' is : '" + Information.GetText + "'"
- if Help.GetText <> lsProps(11) then Warnlog "Help => changes not saved! should : '" + lsProps(11) + "' is : '" + Help.GetText + "'"
- if HelpURL.GetText <> lsProps(12) then Warnlog "Help URL => changes not saved! should : '" + lsProps(12) + "' is : '" + HelpURL.GetText + "'"
-
- printlog "- check special settings for " + sType
-
-'##### CommandButton #####
- if instr ( lcase ( sType ), "commandbutton" ) then
-' if Label.GetText <> lsProps(13) then Warnlog "Label => changes not saved! should : '" + lsProps(13) + "' is : '" + Label.GetText + "'"
- if TabStop.GetSelText <> lsProps(14) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(14) + "' is : '" + TabStop.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(15) then Warnlog "Character set => changes not saved! should : '" + lsProps(15) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(16) then Warnlog "Background => changes not saved! should : '" + lsProps(16) + "' is : '" + Background.GetSelText + "'"
-' if ButtonType.GetSelText <> lsProps(17) then Warnlog "Button type => changes not saved! should : '" + lsProps(17) + "' is : '" + ButtonType.GetSelText + "'"
-' if State.GetSelText <> lsProps(18) then Warnlog "State => changes not saved! should : '" + lsProps(18) + "' is : '" + State.GetSelText + "'"
- if DefaultButton.GetSelText <> lsProps(19) then Warnlog "Default button => changes not saved! should : '" + lsProps(19) + "' is : '" + DefaultButton.GetSelText + "'"
- if Graphics.GetText <> lsProps(20) then Warnlog "Graphics => changes not saved! should : '" + lsProps(20) + "' is : '" + Graphics.GetText + "'"
- if GraphicsAlignment.GetSelText <> lsProps(21) then Warnlog "Graphics alignment => changes not saved! should : '" + lsProps(21) + "' is : '" + GraphicsAlignment.GetSelText + "'"
- end if
-
-'##### ImageControl #####
- if instr ( lcase ( sType ), "imagecontrol" ) then
- if Background.GetSelText <> lsProps(13) then Warnlog "Background => changes not saved! should : '" + lsProps(13) + "' is : '" + Background.GetSelText + "'"
- if Graphics.GetText <> lsProps(14) then Warnlog "Graphics => changes not saved! should : '" + lsProps(14) + "' is : '" + Graphics.GetText + "'"
-' if Scale.GetSelText <> lsProps(15) then Warnlog "Scale => changes not saved! should : '" + lsProps(15) + "' is : '" + Scale.GetSelText + "'"
- end if
-
-'##### CheckBox #####
- if instr ( lcase ( sType ), "checkbox" ) then
-' if Label.GetText <> lsProps(13) then Warnlog "Label => changes not saved! should : '" + lsProps(13) + "' is : '" + Label.GetText + "'"
- if TabStop.GetSelText <> lsProps(14) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(14) + "' is : '" + TabStop.GetSelText + "'"
-' if State.GetSelText <> lsProps(15) then Warnlog "State => changes not saved! should : '" + lsProps(15) + "' is : '" + State.GetSelText + "'"
-' if TriState.GetSelText <> lsProps(16) then Warnlog "TriState => changes not saved! should : '" + lsProps(16) + "' is : '" + TriState.GetSelText + "'"
- end if
-
-'##### OptionButton #####
- if instr ( lcase ( sType ), "optionbutton" ) then
-' if Label.GetText <> lsProps(13) then Warnlog "Label => changes not saved! should : '" + lsProps(13) + "' is : '" + Label.GetText + "'"
- if TabStop.GetSelText <> lsProps(14) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(14) + "' is : '" + TabStop.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(15) then Warnlog "Character set => changes not saved! should : '" + lsProps(15) + "' is : '" + CharacterSet.GetText + "'"
-' if State.GetSelText <> lsProps(16) then Warnlog "State => changes not saved! should : '" + lsProps(16) + "' is : '" + State.GetSelText + "'"
- end if
-
-'##### Label #####
- if instr ( lcase ( sType ), "label" ) then
-' if Label.GetText <> lsProps(13) then Warnlog "Label => changes not saved! should : '" + lsProps(13) + "' is : '" + Label.GetText + "'"
- if TabStop.GetSelText <> lsProps(14) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(14) + "' is : '" + TabStop.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(15) then Warnlog "Character set => changes not saved! should : '" + lsProps(15) + "' is : '" + CharacterSet.GetText + "'"
- if Align.GetSelText <> lsProps(16) then Warnlog "Alignment => changes not saved! should : '" + lsProps(16) + "' is : '" + Align.GetSelText + "'"
- if Background.GetSelText <> lsProps(17) then Warnlog "Background => changes not saved! should : '" + lsProps(17) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(18) then Warnlog "Border => changes not saved! should : '" + lsProps(18) + "' is : '" + Border.GetSelText + "'"
- if MultiLine.GetSelText <> lsProps(19) then Warnlog "MultiLine => changes not saved! should : '" + lsProps(19) + "' is : '" + MultiLine.GetSelText + "'"
- end if
-
-'##### TextField #####
- if instr ( lcase ( sType ), "textfield" ) then
-' if TextText.GetText <> lsProps(13) then Warnlog "Text => changes not saved! should : '" + lsProps(13) + "' is : '" + TextText.GetText + "'"
- if MaxTextLen.GetText <> lsProps(14) then Warnlog "Max text lengh => changes not saved! should : '" + lsProps(14) + "' is : '" + MaxTextLen.GetText + "'"
- if Readonly.GetSelText <> lsProps(15) then Warnlog "Readonly => changes not saved! should : '" + lsProps(15) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(16) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(16) + "' is : '" + TabStop.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(17) then Warnlog "Character set => changes not saved! should : '" + lsProps(17) + "' is : '" + CharacterSet.GetText + "'"
- if Align.GetSelText <> lsProps(18) then Warnlog "Alignment => changes not saved! should : '" + lsProps(18) + "' is : '" + Align.GetSelText + "'"
- if Background.GetSelText <> lsProps(19) then Warnlog "Background => changes not saved! should : '" + lsProps(19) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(20) then Warnlog "Border => changes not saved! should : '" + lsProps(20) + "' is : '" + Border.GetSelText + "'"
- if MultiLine.GetSelText <> lsProps(21) then Warnlog "MultiLine => changes not saved! should : '" + lsProps(21) + "' is : '" + MultiLine.GetSelText + "'"
- if ManualLineBreak.GetSelText <> lsProps(22) then Warnlog "Manual line break => changes not saved! should : '" + lsProps(22) + "' is : '" + ManualLineBreak.GetSelText + "'"
- if HorizontalScroll.GetSelText <> lsProps(23) then Warnlog "Horizontal scrollbar => changes not saved! should : '" + lsProps(23) + "' is : '" + HorizontalScroll.GetSelText + "'"
- if VerticalScroll.GetSelText <> lsProps(24) then Warnlog "Vertical scrollbar => changes not saved! should : '" + lsProps(24) + "' is : '" + VerticalScroll.GetSelText + "'"
- if Password.GetText <> lsProps(25) then Warnlog "Password => changes not saved! should : '" + lsProps(25) + "' is : '" + Password.GetText + "'"
- end if
-
-'##### Listbox #####
- if instr ( lcase ( sType ), "listbox" ) then
- if Readonly.GetSelText <> lsProps(13) then Warnlog "Readonly => changes not saved! should : '" + lsProps(13) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(14) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(14) + "' is : '" + TabStop.GetSelText + "'"
-' if ListEntries.GetText <> lsProps(15) then Warnlog "List entries => changes not saved! should : '" + lsProps(15) + "' is : '" + ListEntries.GetText + "'"
- if CharacterSet.GetText <> lsProps(16) then Warnlog "Character set => changes not saved! should : '" + lsProps(16) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(17) then Warnlog "Background => changes not saved! should : '" + lsProps(17) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(18) then Warnlog "Border => changes not saved! should : '" + lsProps(18) + "' is : '" + Border.GetSelText + "'"
- if DropDown.GetSelText <> lsProps(19) then Warnlog "Drop Down => changes not saved! should : '" + lsProps(19) + "' is : '" + DropDown.GetSelText + "'"
- if LineCount.GetText <> lsProps(20) then Warnlog "Line counte => changes not saved! should : '" + lsProps(20) + "' is : '" + LineCount.GetText + "'"
- if MultiSelection.GetSelText <> lsProps(21) then Warnlog "Multi selection. => changes not saved! should : '" + lsProps(21) + "' is : '" + MultiSelection.GetSelText + "'"
- end if
-
-'##### Combobox #####
- if instr ( lcase ( sType ), "combobox" ) then
- if TextText.GetText <> lsProps(13) then Warnlog "Text => changes not saved! should : '" + lsProps(13) + "' is : '" + TextText.GetText + "'"
- if MaxTextLen.GetText <> lsProps(14) then Warnlog "Max text lenght => changes not saved! should : '" + lsProps(14) + "' is : '" + MaxTextLen.GetText + "'"
- if Readonly.GetSelText <> lsProps(15) then Warnlog "Readonly => changes not saved! should : '" + lsProps(15) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(16) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(16) + "' is : '" + TabStop.GetSelText + "'"
-' if ListEntries.GetText <> lsProps(17) then Warnlog "List entries => changes not saved! should : '" + lsProps(17) + "' is : '" + ListEntries.GetText + "'"
- if CharacterSet.GetText <> lsProps(18) then Warnlog "Character set => changes not saved! should : '" + lsProps(18) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(19) then Warnlog "Background => changes not saved! should : '" + lsProps(19) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(20) then Warnlog "Border => changes not saved! should : '" + lsProps(20) + "' is : '" + Border.GetSelText + "'"
- if DropDown.GetSelText <> lsProps(21) then Warnlog "Drop Down => changes not saved! should : '" + lsProps(21) + "' is : '" + DropDown.GetSelText + "'"
- if AutoComplete.GetSelText <> lsProps(22) then Warnlog "Auto complete => changes not saved! should : '" + lsProps(22) + "' is : '" + AutoComplete.GetSelText + "'"
- if LineCount.GetText <> lsProps(23) then Warnlog "Line count => changes not saved! should : '" + lsProps(23) + "' is : '" + LineCount.GetText + "'"
- end if
-
-'##### Scrollbar #####
- if instr ( lcase ( sType ), "scrollbar" ) then
-' if ScrollValue.GetText <> lsProps(13) then Warnlog "Scroll value => changes not saved! should : '" + lsProps(13) + "' is : '" + ScrollValue.GetText + "'"
-' if ScrollValueMax.GetText <> lsProps(14) then Warnlog "Scroll value max => changes not saved! should : '" + lsProps(14) + "' is : '" + ScrollValueMax.GetText + "'"
-' if LineIncrement.GetText <> lsProps(15) then Warnlog "Line increment => changes not saved! should : '" + lsProps(15) + "' is : '" + LineIncrement.GetText + "'"
-' if BlockIncrement.GetText <> lsProps(16) then Warnlog "Block increment => changes not saved! should : '" + lsProps(16) + "' is : '" + BlockIncrement.GetText + "'"
-' if VisibleSize.GetText <> lsProps(17) then Warnlog "Visible size => changes not saved! should : '" + lsProps(17) + "' is : '" + VisibleSize.GetText + "'"
-' if Orientation.GetSelText <> lsProps(18) then Warnlog "Orientation => changes not saved! should : '" + lsProps(18) + "' is : '" + Orientation.GetSelText + "'"
- if Border.GetSelText <> lsProps(19) then Warnlog "Border => changes not saved! should : '" + lsProps(19) + "' is : '" + Border.GetSelText + "'"
- end if
-
-'##### FrameControl #####
- if instr ( lcase ( sType ), "framecontrol" ) then
-' if Label.GetText <> lsProps(13) then Warnlog "Label => changes not saved! should : '" + lsProps(13) + "' is : '" + Label.GetText + "'"
- if CharacterSet.GetText <> lsProps(14) then Warnlog "Character set => changes not saved! should : '" + lsProps(14) + "' is : '" + CharacterSet.GetText + "'"
- end if
-
-
-'##### progressBar #####
- if instr ( lcase ( sType ), "progressbar" ) then
-' if ScrollValue.GetText <> lsProps(13) then Warnlog "Scroll value => changes not saved! should : '" + lsProps(13) + "' is : '" + ScrollValue.GetText + "'"
-' if ScrollValueMax.GetText <> lsProps(14) then Warnlog "Scroll value max. => changes not saved! should : '" + lsProps(14) + "' is : '" + ScrollValueMax.GetText + "'"'
-' if LineIncrement.GetText <> lsProps(15) then Warnlog "Line increment => changes not saved! should : '" + lsProps(15) + "' is : '" + LineIncrement.GetText + "'"'
-' if BlockIncrement.GetText <> lsProps(16) then Warnlog "Block increment => changes not saved! should : '" + lsProps(16) + "' is : '" + BlockIncrement.GetText + "'"'
-' if VisibleSize.GetText <> lsProps(17) then Warnlog "Visible size => changes not saved! should : '" + lsProps(17) + "' is : '" + VisibleSize.GetText + "'"'
-' if Orientation.GetSelText <> lsProps(18) then Warnlog "Orientation => changes not saved! should : '" + lsProps(18) + "' is : '" + Orientation.GetSelTextGetText + "'"'
- if Background.GetSelText <> lsProps(19) then Warnlog "Background => changes not saved! should : '" + lsProps(19) + "' is : '" + Background.GetSelText + "'"
- end if
-
-'##### FixedLine #####
- if instr ( lcase ( sType ), "fixedline" ) then
-' if Label.GetText <> lsProps(13) then Warnlog "Label => changes not saved! should : '" + lsProps(13) + "' is : '" + Label.GetText + "'"
-' if Orientation.GetSelText <> lsProps(14) then Warnlog "Orientation => changes not saved! should : '" + lsProps(14) + "' is : '" + Orientation.GetSelTextGetText + "'"'
- if CharacterSet.GetText <> lsProps(15) then Warnlog "Character set => changes not saved! should : '" + lsProps(15) + "' is : '" + CharacterSet.GetText + "'"
- end if
-
-'##### DateField #####
- if instr ( lcase ( sType ), "datefield" ) then
- if StrictFormat.GetSelText <> lsProps(13) then Warnlog "Strict format => changes not saved! should : '" + lsProps(13) + "' is : '" + StrictFormat.GetSelText + "'"'
- if Readonly.GetSelText <> lsProps(14) then Warnlog "Read only => changes not saved! should : '" + lsProps(14) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(15) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(15) + "' is : '" + TabStop.GetSelText + "'"
- if DateField.GetText <> lsProps(16) then Warnlog "Date => changes not saved! should : '" + lsProps(16) + "' is : '" + DateField.GetSelText + "'"
- if DateMin.GetText <> lsProps(17) then Warnlog "Date min. => changes not saved! should : '" + lsProps(17) + "' is : '" + DateMin.GetSelText + "'"
- if DateMax.GetText <> lsProps(18) then Warnlog "Date max => changes not saved! should : '" + lsProps(18) + "' is : '" + DateMax.GetSelText + "'"
- if DateFormat.GetSelText <> lsProps(19) then Warnlog "Date format => changes not saved! should : '" + lsProps(19) + "' is : '" + DateFormat.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(20) then Warnlog "Character set => changes not saved! should : '" + lsProps(20) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(21) then Warnlog "Background => changes not saved! should : '" + lsProps(21) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(22) then Warnlog "Border => changes not saved! should : '" + lsProps(22) + "' is : '" + Border.GetSelText + "'"
- if DropDown.GetSelText <> lsProps(23) then Warnlog "Drop Down => changes not saved! should : '" + lsProps(23) + "' is : '" + DropDown.GetSelText + "'"
- if Spin.GetSelText <> lsProps(24) then Warnlog "Spin button => changes not saved! should : '" + lsProps(24) + "' is : '" + Spin.GetSelText + "'"
- end if
-
-'##### TimeField #####
- if instr ( lcase ( sType ), "timefield" ) then
- if StrictFormat.GetSelText <> lsProps(13) then Warnlog "Strict format => changes not saved! should : '" + lsProps(13) + "' is : '" + StrictFormat.GetSelText + "'"'
- if Readonly.GetSelText <> lsProps(14) then Warnlog "Read only => changes not saved! should : '" + lsProps(14) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(15) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(15) + "' is : '" + TabStop.GetSelText + "'"
- if TimeField.GetText <> lsProps(16) then Warnlog "Time => changes not saved! should : '" + lsProps(16) + "' is : '" + TimeField.GetText + "'"
- if TimeMin.GetText <> lsProps(17) then Warnlog "Time min. => changes not saved! should : '" + lsProps(17) + "' is : '" + TimeMin.GetText + "'"
- if TimeMax.GetText <> lsProps(18) then Warnlog "Time max => changes not saved! should : '" + lsProps(18) + "' is : '" + TimeMax.Getext + "'"
- if TimeFormat.GetSelText <> lsProps(19) then Warnlog "Time format => changes not saved! should : '" + lsProps(19) + "' is : '" + TimeFormat.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(20) then Warnlog "Character set => changes not saved! should : '" + lsProps(20) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(21) then Warnlog "Background => changes not saved! should : '" + lsProps(21) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(22) then Warnlog "Border => changes not saved! should : '" + lsProps(22) + "' is : '" + Border.GetSelText + "'"
- if Spin.GetSelText <> lsProps(23) then Warnlog "Spin button => changes not saved! should : '" + lsProps(23) + "' is : '" + Spin.GetSelText + "'"
- end if
-
-'##### NumericField #####
- if instr ( lcase ( sType ), "numericfield" ) then
- if StrictFormat.GetSelText <> lsProps(13) then Warnlog "Strict format => changes not saved! should : '" + lsProps(13) + "' is : '" + StrictFormat.GetSelText + "'"'
- if Readonly.GetSelText <> lsProps(14) then Warnlog "Read only => changes not saved! should : '" + lsProps(14) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(15) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(15) + "' is : '" + TabStop.GetSelText + "'"
-
- if Value.GetText <> lsProps(16) then
- if Value.GetText <> lsProps(16) + "000" then
- Warnlog "Value => changes not saved! should : '" + lsProps(16) + "' is : '" + Value.GetText + "'"
- else
- Warnlog "Value => changes not saved! should : '" + lsProps(16) + "' is : '" + Value.GetText + "'"
- end if
- end if
- if ValueMin.GetText <> lsProps(17) then
- if ValueMin.GetText <> "-1,000,002.00000" then
- Warnlog "Value min. => changes not saved! should : '-1,000,002.00000' is : '" + ValueMin.GetText + "'"
- else
- Warnlog "Value min. => changes not saved! should : '" + lsProps(17) + "' is : '" + ValueMin.GetText + "'"
- end if
- end if
- if ValueMax.GetText <> lsProps(18) then
- if ValueMax.GetText <> "999,997.00000" then
- Warnlog "Value max => changes not saved! should : '999,997.00000' is : '" + ValueMax.GetText + "'"
- else
- Warnlog "Value max => changes not saved! should : '" + lsProps(18) + "' is : '" + ValueMax.GetText + "'"
- end if
- end if
- if ValueStep.GetText <> lsProps(19) then Warnlog "Incr./decrement value => changes not saved! should : '" + lsProps(19) + "' is : '" + ValueStep.GetText + "'"
- if Accuray.GetText <> lsProps(20) then Warnlog "Dec. accuracy => changes not saved! should : '" + lsProps(20) + "' is : '" + Accuray.GetText + "' Bugid #106852#"
- if ThousandSeperator.GetSelText <> lsProps(21) then Warnlog "Thousands seperator => changes not saved! should : '" + lsProps(21) + "' is : '" + ThousandSeperator.GetSelText + "' Bugid #106852#"
- if CharacterSet.GetText <> lsProps(22) then Warnlog "Character set => changes not saved! should : '" + lsProps(22) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(23) then Warnlog "Background => changes not saved! should : '" + lsProps(23) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(24) then Warnlog "Border => changes not saved! should : '" + lsProps(24) + "' is : '" + Border.GetSelText + "'"
- if Spin.GetSelText <> lsProps(25) then Warnlog "Spin button => changes not saved! should : '" + lsProps(25) + "' is : '" + Spin.GetSelText + "'"
- end if
-
-'##### CurrencyField #####
- if instr ( lcase ( sType ), "currencyfield" ) then
- if StrictFormat.GetSelText <> lsProps(13) then Warnlog "Strict format => changes not saved! should : '" + lsProps(13) + "' is : '" + StrictFormat.GetSelText + "'"'
- if Readonly.GetSelText <> lsProps(14) then Warnlog "Read only => changes not saved! should : '" + lsProps(14) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(15) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(15) + "' is : '" + TabStop.GetSelText + "'"
- if Value.GetText <> lsProps(16) then
- if Value.GetText <> lsProps(16) + "000" then
- Warnlog "Value => changes not saved! should : '" + lsProps(16) + "' is : '" + Value.GetText + "'"
- else
- Warnlog "Value => changes not saved! should : '" + lsProps(16) + "' is : '" + Value.GetText + "'"
- end if
- end if
- if ValueMin.GetText <> lsProps(17) then
- if ValueMin.GetText <> "-1,000,002.00000" then
- Warnlog "Value min. => changes not saved! should : '-1,000,002.00000' is : '" + ValueMin.GetText + "'"
- else
- Warnlog "Value min. => changes not saved! should : '" + lsProps(17) + "' is : '" + ValueMin.GetText + "'"
- end if
- end if
- if ValueMax.GetText <> lsProps(18) then
- if ValueMax.GetText <> "999,997.00000" then
- Warnlog "Value max => changes not saved! should : '999,997.00000' is : '" + ValueMax.GetText + "'"
- else
- Warnlog "Value max => changes not saved! should : '" + lsProps(18) + "' is : '" + ValueMax.GetText + "'"
- end if
- end if
- if ValueStep.GetText <> lsProps(19) then Warnlog "Incr./decrement value => changes not saved! should : '" + lsProps(19) + "' is : '" + ValueStep.GetText + "'"
- if Accuray.GetText <> lsProps(20) then Warnlog "Dec. accuracy => changes not saved! should : '" + lsProps(20) + "' is : '" + Accuray.GetText + "' Bugid #106852#"
- if ThousandSeperator.GetSelText <> lsProps(21) then Warnlog "Thousands seperator => changes not saved! should : '" + lsProps(21) + "' is : '" + ThousandSeperator.GetSelText + "' Bugid #106852#"
- if CurrencySymbol.GetText <> lsProps(22) then Warnlog "Currency symbol => changes not saved! should : '" + lsProps(22) + "' is : '" + CurrencySymbol.GetSelText + "'"
- if CurrSymPosition.GetSelText <> lsProps(23) then Warnlog "Prefix symbol => changes not saved! should : '" + lsProps(23) + "' is : '" + CurrSymPosition.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(24) then Warnlog "Character set => changes not saved! should : '" + lsProps(24) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(25) then Warnlog "Background => changes not saved! should : '" + lsProps(25) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(26) then Warnlog "Border => changes not saved! should : '" + lsProps(26) + "' is : '" + Border.GetSelText + "'"
- if Spin.GetSelText <> lsProps(27) then Warnlog "Spin button => changes not saved! should : '" + lsProps(27) + "' is : '" + Spin.GetSelText + "'"
- end if
-
-'##### FormattedField #####
- if instr ( lcase ( sType ), "formattedfield" ) then
- if MaxTextLen.GetText <> lsProps(13) then Warnlog "Max text lenght => changes not saved! should : '" + lsProps(13) + "' is : '" + MaxTextLen.GetText + "'"
- if StrictFormat.GetSelText <> lsProps(14) then Warnlog "Strict format => changes not saved! should : '" + lsProps(14) + "' is : '" + StrictFormat.GetSelText + "'"'
- if Readonly.GetSelText <> lsProps(15) then Warnlog "Read only => changes not saved! should : '" + lsProps(15) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(16) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(16) + "' is : '" + TabStop.GetSelText + "'"
-' if Effective.GetText <> lsProps(17) then Warnlog "Value => changes not saved! should : '" + lsProps(17) + "' is : '" + Effective.GetText + "'"
- if EffectiveMin.GetText <> lsProps(18) then
- printlog " Bugid #106852#:"
- if EffectiveMin.GetText <> "1.00" then
- Warnlog "Value min => changes not saved! should : '" + lsProps(18) + "' is : '" + EffectiveMin.GetText + "'"
- else
- Warnlog "Value min => changes not saved! should : '1.00' is : '" + EffectiveMin.GetText + "'"
- end if
- end if
- if EffectiveMax.GetText <> lsProps(19) then
- printlog " Bugid #106852#:"
- if EffectiveMax.GetText <> "1.00" then
- Warnlog "Value max => changes not saved! should : '1.00' is : '" + EffectiveMax.GetText + "'"
- else
- Warnlog "Value max => changes not saved! should : '" + lsProps(19) + "' is : '" + EffectiveMax.GetText + "'"
- end if
- end if
- if FormatKey.GetText <> lsProps(20) then Warnlog "Format key => changes not saved! should : '" + lsProps(20) + "' is : '" + FormatKey.GetText + "'"
- if CharacterSet.GetText <> lsProps(21) then Warnlog "Character set => changes not saved! should : '" + lsProps(21) + "' is : '" + CharacterSet.GetText + "'"
- if Align.GetSelText <> lsProps(22) then Warnlog "Alignment => changes not saved! should : '" + lsProps(22) + "' is : '" + Align.GetSelText + "' BugId #106872#"
- if Background.GetSelText <> lsProps(23) then Warnlog "Background => changes not saved! should : '" + lsProps(23) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(24) then Warnlog "Border => changes not saved! should : '" + lsProps(24) + "' is : '" + Border.GetSelText + "'"
- if Spin.GetSelText <> lsProps(25) then Warnlog "Spin button => changes not saved! should : '" + lsProps(25) + "' is : '" + Spin.GetSelText + "'"
- end if
-
-'##### PatternField #####
- if instr ( lcase ( sType ), "patternfield" ) then
- if TextText.GetText <> lsProps(13) then Warnlog "Text => changes not saved! should : '" + lsProps(13) + "' is : '" + TextText.GetText + "'"
- if MaxTextLen.GetText <> lsProps(14) then Warnlog "Max text lenght => changes not saved! should : '" + lsProps(14) + "' is : '" + MaxTextLen.GetText + "'"
- if EditMask.GetText <> lsProps(15) then Warnlog "Edit mask => changes not saved! should : '" + lsProps(15) + "' is : '" + EditMask.GetText + "'"
- if LiteralMask.GetText <> lsProps(16) then Warnlog "Literal mask => changes not saved! should : '" + lsProps(16) + "' is : '" + LiteralMask.GetText + "'"
- if StrictFormat.GetSelText <> lsProps(17) then Warnlog "Strict format => changes not saved! should : '" + lsProps(17) + "' is : '" + StrictFormat.GetSelText + "'"'
- if Readonly.GetSelText <> lsProps(18) then Warnlog "Read only => changes not saved! should : '" + lsProps(18) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(19) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(19) + "' is : '" + TabStop.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(20) then Warnlog "Character set => changes not saved! should : '" + lsProps(20) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(21) then Warnlog "Background => changes not saved! should : '" + lsProps(21) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(22) then Warnlog "Border => changes not saved! should : '" + lsProps(22) + "' is : '" + Border.GetSelText + "'"
- end if
-
-'##### FileControl #####
- if instr ( lcase ( sType ), "filecontrol" ) then
- if TextText.GetText <> lsProps(13) then Warnlog "Text => changes not saved! should : '" + lsProps(13) + "' is : '" + TextText.GetText + "'"
- if Readonly.GetSelText <> lsProps(14) then Warnlog "Read only => changes not saved! should : '" + lsProps(14) + "' is : '" + Readonly.GetSelText + "'"
- if TabStop.GetSelText <> lsProps(15) then Warnlog "Tab stop => changes not saved! should : '" + lsProps(15) + "' is : '" + TabStop.GetSelText + "'"
- if CharacterSet.GetText <> lsProps(16) then Warnlog "Character set => changes not saved! should : '" + lsProps(16) + "' is : '" + CharacterSet.GetText + "'"
- if Background.GetSelText <> lsProps(17) then Warnlog "Background => changes not saved! should : '" + lsProps(17) + "' is : '" + Background.GetSelText + "'"
- if Border.GetSelText <> lsProps(18) then Warnlog "Border => changes not saved! should : '" + lsProps(18) + "' is : '" + Border.GetSelText + "'"
- end if
-
-
-end function
diff --git a/testautomation/global/tools/includes/optional/t_docfuncs.inc b/testautomation/global/tools/includes/optional/t_docfuncs.inc
index 75aacf2e11e9..c544db3111fa 100644..100755
--- a/testautomation/global/tools/includes/optional/t_docfuncs.inc
+++ b/testautomation/global/tools/includes/optional/t_docfuncs.inc
@@ -31,8 +31,6 @@
'*
'\******************************************************************************
-private const VERBOSE = FALSE
-
function hUseImpressAutopilot( bEnable as boolean ) as boolean
'///<h3>Enable/disable the Impress Autopilot in Tools/Options</h3>
@@ -40,7 +38,7 @@ function hUseImpressAutopilot( bEnable as boolean ) as boolean
'///<ul>
const CFN = "global::tools::includes::optional::t_docfuncs.inc::hUseImpressAutopilot::"
- if ( VERBOSE ) then printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
'///+<li>Create a new IMPRESS document</li>
gApplication = "IMPRESS"
@@ -56,10 +54,10 @@ function hUseImpressAutopilot( bEnable as boolean ) as boolean
if ( bEnable ) then
mitAutopilotStarten.check()
- if ( VERBOSE ) then printlog( CFN & "Enable Impress Autopilot" )
+ if ( GVERBOSE ) then printlog( CFN & "Enable Impress Autopilot" )
else
mitAutopilotStarten.uncheck()
- if ( VERBOSE ) then printlog( CFN & "Disable Impress Autopilot" )
+ if ( GVERBOSE ) then printlog( CFN & "Disable Impress Autopilot" )
endif
'///+<li>Return Status of Checkbox (checked=TRUE)</li>
@@ -73,49 +71,19 @@ function hUseImpressAutopilot( bEnable as boolean ) as boolean
'///+<li>Close Tools/Options</li>
Kontext "OptionenDlg"
- OptionenDlg.OK()
-
+ hCloseDialog( OptionenDlg, "ok" )
+
'///+<li>Close IMPRESS document</li>
hDestroyDocument()
'///+<li>Returncode is undefined</li>
- if ( VERBOSE ) then printlog( CFN & "Exit" )
+ if ( GVERBOSE ) then printlog( CFN & "Exit" )
'///</ul>
end function
'*******************************************************************************
-function hCloseNavigator() as boolean
-
- '///<h3>Function to close the navigator</h3>
- const CFN = "global::tools::includes::optional::t_docfuncs.inc::hCloseNavigator::"
-
- if ( VERBOSE ) then printlog( CFN & "Enter" )
-
- Kontext "Navigator"
- if ( Navigator.Exists() ) then
- Navigator.Close()
- Navigator.notExists( 2 )
- if ( VERBOSE ) then printlog( CFN & "Closed Navigator" )
- else
- if ( VERBOSE ) then printlog( CFN & "Navigator not present" )
- endif
-
- Kontext "Navigator"
- if ( Navigator.exists() ) then
- hCloseNavigator() = false
- warnlog( CFN & "Failed to close Navigator, it is still open." )
- else
- hCloseNavigator() = true
- endif
-
- if ( VERBOSE ) then printlog( CFN & "Exit" )
-
-end function
-
-'*******************************************************************************
-
function hNumericDocType( doctype as integer ) as string
'///<h3>Convert a numeric expression to a gApplication</h3>
@@ -132,7 +100,7 @@ function hNumericDocType( doctype as integer ) as string
dim sList( 100 ) as string
dim iDocTypes as integer
- if ( VERBOSE ) then printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
'///+<li>Retrieve matching list from file</li>
hGetDataFileSection( sFile , sList() , "application" , "" , "" )
@@ -151,7 +119,7 @@ function hNumericDocType( doctype as integer ) as string
'///+<li>Set a plain text name as returnvalue for the function</li>
hGetDataFileSection( sFile , sList() , "application_names" , "" , "" )
hNumericDocType() = hGetValueForKeyAsString( sList() , gApplication )
- if ( VERBOSE ) then printlog( CFN & "Exit" )
+ if ( GVERBOSE ) then printlog( CFN & "Exit" )
'///</ul>
end function
@@ -184,28 +152,30 @@ function hChangeDoc() as string
case "WRITER", "HTML", "MASTERDOCUMENT"
Kontext "DocumentWriter"
DocumentWriter.TypeKeys "<Return>This doc is changed!"
- hChangeDoc() = "Changed WRITER/HTML/MASTERDOC"
+ hChangeDoc() = "Changed WRITER/HTML/MASTERDOC"
'///+<li>CALC: Write some text into the current location (usually A1)</li>
case "CALC" : Kontext "DocumentCalc"
DocumentCalc.TypeKeys "<Down>This doc is changed!<Return>"
- hChangeDoc() = "Changed CALC"
+ hChangeDoc() = "Changed CALC"
'///+<li>DRAW: Draw a rectangle</li>
case "DRAW" : Kontext "DocumentDraw"
hRechteckErstellen ( 20, 20, 25, 25 )
gMouseClick ( 1, 1 )
- hChangeDoc() = "Changed DRAW"
+ hChangeDoc() = "Changed DRAW"
'///+<li>IMPRESS: Draw a rectangle</li>
case "IMPRESS": Kontext "DocumentImpress"
hRechteckErstellen ( 20, 20, 25, 25 )
gMouseClick ( 1, 1 )
- hChangeDoc() = "Changed IMPRESS"
+ hChangeDoc() = "Changed IMPRESS"
'///+<li>MATH: Create a simple formaula</li>
case "MATH" : SchreibenInMathdok( "b over c" )
- hChangeDoc() = "Changed MATH"
+ kontext "DocumentMath"
+ hChangeDoc() = "Changed MATH"
+ gMouseClick( 50 , 50 )
end select
'///</ul>
@@ -226,7 +196,7 @@ function hIdentifyWriterDoc( cString as string, bWarn as boolean ) as boolean
dim cIdentifier as string
dim irc as integer ' some temporary returnvalue
- if ( VERBOSE ) then printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
'///+<li>Test the function parameter</li>
if ( cString = "" ) then
@@ -253,26 +223,17 @@ function hIdentifyWriterDoc( cString as string, bWarn as boolean ) as boolean
DocumentWriter.typeKeys( "<SHIFT END>" )
'///+<li>copy the string to the clipboard and store it into a variable</li>
- try
- editcopy
- cIdentifier = getClipboardText()
- catch
- warnlog( "EditCopy failed. Probably the document is empty" )
- cIdentifier = "**** invalid ****"
- endcatch
-
+ hUseAsyncSlot( "EditCopy" )
+ cIdentifier = getClipboardText()
'///+<li>compare the string to the reference (given as parameter)</li>
irc = hCompareSubstrings( cIdentifier, cString )
'///+<li>Write the result to the printlog if desired</li>
if ( irc = 0 ) then
-
- if ( bWarn ) then
- warnlog ( CFN & "The focus is not on the expected document" )
- else
- if ( VERBOSE ) then printlog( CFN & "The focus is not on the expected document" )
- endif
+
+ if ( GVERBOSE ) then printlog( CFN & "The focus is not on the expected document" )
+ if ( bWarn ) then warnlog ( CFN & "The focus is not on the expected document" )
printlog( CFN & "Expected: " & cString )
printlog( CFN & "Found...: " & cIdentifier )
@@ -283,7 +244,7 @@ function hIdentifyWriterDoc( cString as string, bWarn as boolean ) as boolean
endif
'///+<li>Return TRUE only if the current document is the expected one</li>
- if ( VERBOSE ) then printlog( CFN & "Exit" )
+ if ( GVERBOSE ) then printlog( CFN & "Exit" )
'///</ul>
end function
@@ -300,12 +261,10 @@ function hCreateDocument() as boolean
dim iDocCountAfter as integer
iDocCountBefore = getDocumentCount
- if ( VERBOSE ) then printlog( CFN & "Number of open documents before: " & iDocCountBefore )
+ if ( GVERBOSE ) then printlog( CFN & "Number of open documents before: " & iDocCountBefore )
- if ( ucase( gApplication ) = "BACKGROUND" ) then
- do while( getDocumentCount > 0 )
- hCloseDocument()
- loop
+ if ( gApplication = "BACKGROUND" ) then
+ hFileCloseAll()
hCreateDocument() = true
else
@@ -317,7 +276,7 @@ function hCreateDocument() as boolean
hCreateDocument() = false
endif
endif
- if ( VERBOSE ) then printlog( CFN & "New document created. Open: " & iDocCountAfter )
+ if ( GVERBOSE ) then printlog( CFN & "New document created. Open: " & iDocCountAfter )
'///</ul>
end function
@@ -351,10 +310,9 @@ function hDocumentTypeKeys( cString as string ) as boolean
'///<ul>
const CFN = "global::tools::includes::optional::t_docfuncs.inc::hDocumentTypeKeys::"
- dim brc as boolean
- brc = true
- if ( VERBOSE ) then printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
+ hDocumentTypeKeys() = true
'///+<li>Set focus to the current documenttype determined by gApplication</li>
'///+<li>Type the string passed as function parameter</li>
@@ -375,15 +333,12 @@ function hDocumentTypeKeys( cString as string ) as boolean
DocumentWriter.typeKeys( cString )
case else
warnlog( CFN & "Exit: Unknown gApplication: " & gApplication )
- brc = false
+ hDocumentTypeKeys() = false
+ exit function
end select
'///+<li>Print some message to the log on success</li>
- if ( brc ) then
- printlog( CFN & "Exit: Sent keystroke to " & gApplication )
- endif
-
- hDocumentTypeKeys() = brc
+ printlog( CFN & "Exit: Sent keystroke to " & gApplication )
'///</ul>
end function
@@ -396,26 +351,42 @@ function hDestroyDocument() as boolean
const CFN = "global::tools::includes::optional::t_docfuncs.inc::hDestroyDocument: "
dim iDocCount as integer : iDocCount = getDocumentCount()
hDestroyDocument() = false
+
+ dim method( 3 ) as string
+ method( 1 ) = "no,optional"
+ method( 2 ) = "202,optional"
+ method( 3 ) = "ok,optional" ' This could be a File I/O error
+
+ dim iCurrentMethod as integer
+ dim bDialogClosed as boolean
if ( iDocCount = 0 ) then exit function
- if ( VERBOSE ) then printlog( CFN & "In.: Open: " & iDocCount )
+ if ( GVERBOSE ) then printlog( CFN & "In.: Open: " & iDocCount )
hUseAsyncSlot( "FileClose" )
-
- Kontext "Active"
- if ( Active.Exists( 2 ) ) then
- printlog( "Msgbox: " & Active.getText() )
- try
- Active.No
- catch
- Active.Click ( 202 )
- endcatch
- wait( 1000 )
- end if
+
+ for iCurrentMethod = 1 to 3
+
+ bDialogClosed = false
+
+ Kontext "Active"
+ if ( Active.exists( 1 ) ) then
+ printlog( CFN & "Msgbox: " & Active.getText() )
+ if ( GVERBOSE ) then printlog( CFN & "Method: " & method( iCurrentMethod ) )
+ bDialogClosed = hCloseDialog( Active, method( iCurrentMethod ) )
+ else
+ exit for
+ endif
+
+ if ( iCurrentMethod = 3 and bDialogClosed ) then
+ warnlog( "Unexpected messagebox was handled" )
+ endif
+
+ next iCurrentMethod
if ( getDocumentCount() = iDocCount ) then hCloseDocument()
if ( getDocumentCount() = iDocCount - 1 ) then hDestroyDocument() = true
- if ( VERBOSE ) then printlog( CFN & "Out: Open: " & getDocumentCount() )
+ if ( GVERBOSE ) then printlog( CFN & "Out: Open: " & getDocumentCount() )
end function
@@ -423,100 +394,20 @@ end function
function hInitSingleDoc() as boolean
- '///<h3>Make sure exactly one single writer document is open</h3>
- '///<i>The wizards cannot be triggered correctly from the backing window.
- '///+ As a workaround this function checks the amount of open documents and
- '///+ creates exactly one unchanged Writer document</i><br><br>
-
- '///<u>Parameter(s):</u><br>
- '///<ol>
- '///+<li>No input parameters</li>
- '///</ol>
-
-
- '///<u>Returns:</u><br>
- '///<ol>
- '///+<li>Errorcondition (Boolean)</li>
- '///<ul>
- '///+<li>TRUE: Exactly one Writer document is open</li>
- '///+<li>FALSE: Any error</li>
- '///</ul>
- '///</ol>
+ hFileCloseAll()
+ hCreateDocument()
- const CFN = "global::tools::includes::optional::t_docfuncs.inc::hInitSingleDoc::"
- dim cOldApplication as string
+ if ( GVERBOSE ) then printlog( "hInitSingleDoc(): Opening document: " & gApplication )
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Close all documents until we are on the backing window</li>
- hFileCloseAll()
-
- '///+<li>Save the previous gApplication</li>
- cOldApplication = gApplication
-
- '///+<li>Set gApplication to WRITER</li>
- gApplication = "WRITER"
-
- '///+<li>Open one new Writer document</li>
- call hNewDocument()
-
- '///+<li>Verify that exactly one document is open</li>
- if ( getDocumentCount = 1 ) then
- printlog( CFN & "A single unchanged writer document is open" )
+ if ( getDocumentCount = 1 ) then
hInitSingleDoc() = true
else
- printlog( CFN & "Failed to open just one single writer document" )
hInitSingleDoc() = false
endif
-
- '///+<li>Restore gApplication</li>
- gApplication = cOldApplication
- '///</ul>
end function
-'*******************************************************************************
-
-function hInitBackingMode() as boolean
-
- '///<h3>Make that we are on the backing window (no open documents)</h3>
- '///<i>Close all open documents</i><br><br>
-
- '///<u>Parameter(s):</u><br>
- '///<ol>
- '///+<li>No input parameters</li>
- '///</ol>
-
-
- '///<u>Returns:</u><br>
- '///<ol>
- '///+<li>Errorcondition (Boolean)</li>
- '///<ul>
- '///+<li>TRUE: No open documents are present</li>
- '///+<li>FALSE: Any error</li>
- '///</ul>
- '///</ol>
-
- const CFN = "global::tools::includes::optional::t_docfuncs.inc::hInitBackingMode::"
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Close all documents until we are on the backing window</li>
- hFileCloseAll()
-
- '///+<li>verify that we do not have any open documents left (redundant check)</li>
- if ( getDocumentCount = 0 ) then
- printlog( CFN & "Office is in backing mode." )
- hInitBackingMode() = true
- else
- printlog( CFN & "Office is in undefined state." )
- hInitBackingMode() = false
- endif
- '///</ul>
-
-end function
-
-'*******************************************************************************
+'*******************************************************************************'*******************************************************************************
function hInitWriteDocIdentifier( cString as string ) as boolean
@@ -548,42 +439,37 @@ function hInitWriteDocIdentifier( cString as string ) as boolean
'///</ol>
const CFN = "global::tools::includes::optional::t_docfuncs.inc::hInitWriteDocIdentifier::"
+ const RC_TIMEOUT = -1
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Verify number of open documents</li>
- if ( getDocumentCount <> 1 ) then
- printlog( CFN & "Incorrect document count" )
- hInitWriteDocIdentifier() = false
- exit function
- endif
-
- '///+<li>Verify that it is a writer document</li>
- kontext "DocumentWriter"
- if ( not DocumentWriter.exists() ) then
- printlog( CFN & "Open document is not a text document" )
- hInitWriteDocIdentifier() = false
- exit function
- endif
-
- '///+<li>Write the string</li>
- kontext "DocumentWriter"
- DocumentWriter.typeKeys( "<MOD1 END>" )
- DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" )
- DocumentWriter.typeKeys( "<DELETE>" )
- DocumentWriter.typekeys( cString )
-
- '///+<li>Verify the string</li>
- DocumentWriter.typeKeys( "<MOD1 END>" )
- DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" )
- EditCopy
- if ( getClipboardText = cString ) then
- printlog( CFN & "Document has been successfully modified." )
- hInitWriteDocIdentifier() = true
+ if ( getDocumentCount = 1 and gApplication = "WRITER" ) then
+
+ kontext "DocumentWriter"
+ DocumentWriter.typeKeys( "<MOD1 END>" )
+ DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" )
+ DocumentWriter.typeKeys( "<DELETE>" )
+ DocumentWriter.typekeys( cString )
+
+ DocumentWriter.typeKeys( "<MOD1 END>" )
+ DocumentWriter.typeKeys( "<MOD1 SHIFT HOME>" )
+
+ if ( hUseAsyncSlot( "EditCopy" ) <> RC_TIMEOUT ) then
+
+ if ( getClipboardText = cString ) then
+ printlog( CFN & "Writer document has been successfully modified." )
+ hInitWriteDocIdentifier() = true
+ else
+ warnlog( CFN & "Could not verify document identification string" )
+ hInitWriteDocIdentifier() = false
+ endif
+ else
+ warnlog( CFN & "Unable to copy text to clipboard using <EditCopy>" )
+ hInitWriteDocIdentifier() = false
+ endif
else
- printlog( CFN & "Could not verify document identification string" )
+ warnlog ( CFN & "Only one single writer document may be open" )
+ printlog( CFN & "Number of documents: " & getDocumentCount )
+ printlog( CFN & "Application........: " & gApplication )
hInitWriteDocIdentifier() = false
- endif
- '///</ul>
+ endif
end function
diff --git a/testautomation/global/tools/includes/optional/t_extension_manager_tools.inc b/testautomation/global/tools/includes/optional/t_extension_manager_tools.inc
index ee4d7f55beba..0b530af4a274 100755
--- a/testautomation/global/tools/includes/optional/t_extension_manager_tools.inc
+++ b/testautomation/global/tools/includes/optional/t_extension_manager_tools.inc
@@ -284,7 +284,7 @@ function hExtensionAddGUI( _path as string, _flags as string ) as integer
hExtensionAddGUI() = BrowsePackages.getItemCount()
'///+<li>Close the Extension Manager</li>
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
if ( bLogs ) then
printlog( "********** Installing extension end **********" )
@@ -353,7 +353,7 @@ function hExtensionRemoveGUI( cExtensionName as string ) as integer
endcatch
kontext "PackageManager"
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
else
hExtensionRemoveGUI() = 1
endif
@@ -460,7 +460,7 @@ function hExtensionGetItemList( cItemList() as string ) as integer
hExtensionGetItemList() = iItemCount
cItemList( 0 ) = iItemCount
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
else
@@ -500,7 +500,7 @@ function hSelectExtensionID( iPos as integer ) as string
catch
hSelectExtensionID() = ""
endcatch
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
else
hSelectExtensionID() = ""
endif
@@ -545,7 +545,7 @@ function hSelectExtensionName( cName as string ) as integer
catch
hSelectExtensionName() = 0
endcatch
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
else
hSelectExtensionName() = -1
endif
@@ -695,7 +695,7 @@ function hIsExtensionAlreadyInstalled( cName as string ) as boolean
endif
next
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
end function
@@ -745,7 +745,7 @@ function hDisableUserExtensionGUI( extension_name as string ) as integer
else
hDisableUserExtensionGUI() = 2
endif
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
catch
hDisableUserExtensionGUI() = 1
endcatch
@@ -766,7 +766,7 @@ function hGetExtensionCount() as integer
if ( PackageManager.exists( 2 ) ) then
try
hGetExtensionCount() = BrowsePackages.getItemCount()
- PackageManager.close()
+ hCloseDialog( PackageManager , "close" )
catch
hGetExtensionCount() = -2
endcatch
diff --git a/testautomation/global/tools/includes/optional/t_filetools.inc b/testautomation/global/tools/includes/optional/t_filetools.inc
index 76cbb35b153c..420b14ae9676 100644..100755
--- a/testautomation/global/tools/includes/optional/t_filetools.inc
+++ b/testautomation/global/tools/includes/optional/t_filetools.inc
@@ -31,8 +31,6 @@
'*
'\******************************************************************************
-private const VERBOSE = false
-
function hHandleActivesOnLoad( iTries as integer , iAdd as integer ) as boolean
'///<h3>Handle any dialogs that might pop up when loading a file</h3>
@@ -74,7 +72,7 @@ function hHandleActivesOnLoad( iTries as integer , iAdd as integer ) as boolean
dim cMessage as string
dim bSkip as boolean
- if ( VERBOSE ) then printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
' not good but apparently required - else hDestroyDocument will handle the
' dialogs and warn about them.
@@ -169,7 +167,7 @@ function hHandleActivesOnLoad( iTries as integer , iAdd as integer ) as boolean
printlog( CFN & "Exit: The test closed more dialogs than expected" )
hHandleActivesOnLoad() = false
else
- if ( VERBOSE ) then printlog( CFN & "Exit" )
+ if ( GVERBOSE ) then printlog( CFN & "Exit" )
endif
end function
@@ -208,7 +206,7 @@ function hHandleInitialDialogs() as integer
dim incident as integer
incident = 0
- if ( VERBOSE ) then printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
try
'///+<li>Test for UseOfThisTemplate-dialog</li>
@@ -254,7 +252,7 @@ function hHandleInitialDialogs() as integer
endcatch
hHandleInitialDialogs() = incident
- if ( VERBOSE ) then printlog( CFN & "Exit" )
+ if ( GVERBOSE ) then printlog( CFN & "Exit" )
'///</ul>
@@ -325,7 +323,7 @@ function hGetWorkPath() as string
sPath = convertpath( sPath )
'///+<li>Print info to the log and return the path</li>
- if ( VERBOSE ) then
+ if ( GVERBOSE ) then
if ( bPathIsFromAPI ) then
printlog( CFN & "(From API): " & sPath )
else
diff --git a/testautomation/global/tools/includes/optional/t_listfuncs.inc b/testautomation/global/tools/includes/optional/t_listfuncs.inc
index 2e9b6e20e1a3..ea8a5d5bec68 100644..100755
--- a/testautomation/global/tools/includes/optional/t_listfuncs.inc
+++ b/testautomation/global/tools/includes/optional/t_listfuncs.inc
@@ -29,158 +29,8 @@
'*
'* short description : Replacements for routines in t_lists.inc adds some
'*
-'*******************************************************************************
-'*
-' #1 hListTestUpperBoundary ' Tests upper boundary of arrays
-' #1 hListTestLowerBoundary ' Tests lower boundary of arrays
-' #1 hListDelete ' Deletes one item from a list by index
-' #1 hListAppend ' Append an item to a list
-' #1 hManageComparisionList ' quick way to compare/create reference lists
-' #1 hListFileGetSize ' find out how big an array has to be to hold the file
-' #1 hListCompare ' compare two lists
-' #1 hListPrependString ' Insert a string infront of each item in a list
-' #1 hListAppendList ' Append one list to another
-' #1 hCountMatchesInList ' Return count of occurrences of a string within a list
-'*
'\******************************************************************************
-' Note: These functions fix some minor bugs and introduce strict boundary
-' checking for the arrays we work with. The arrays must be compatible
-' to those from the "standard" list-functions.
-' Why: Two reasons:
-'
-' 1) When working with listboxes it might happen that they are empty (bug)
-' or contain more items than expected. In this case the tests would
-' usually break. This is not desired as many testcases do not rely
-' on the content of the listboxes.
-'
-' 2) This way eases the trouble of debugging huge amounts of arrays
-' like those in the installation test or anywhere else where we work
-' with reference lists. This is a coding help.
-
-'*******************************************************************************
-
-function hListTestUpperBoundary( aList() as string ) as boolean
-
- '///<h3>Verify that ListCount does not exceed upper boundary</h3>
- '///<i>About listfunctions: All listfunctions rely on a special type of
- '///+ array. This can be string arrays and - in some cases - numeric
- '///+ arrays. What makes the arrays unique is that the first item which
- '///+ has the index 0 contains the number of items in the list to be used,
- '///+ anything that is stored beyond this number is ignored. This has three
- '///+ consequences: 1) all listfunctions that alter an array must update
- '///+ the index stored in array(0) and 2) it is possible that the index
- '///+ point beyond ubound of the array which will most likely cause a
- '///+ runtime error. 3) Means that arrays may only have an upper boundary
- '///+ declared, all loops must start with index array(1) and must end with
- '///+ index array(val( array(0))</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>List (string)</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorstatus (boolean)</li>
- '///<ul>
- '///+<li>TRUE: Array is ok</li>
- '///+<li>FALSE: Array logic has errors</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
-
- const CFN = "hListTestUpperBoundary::"
-
- dim iUpperBoundary as integer ' size according to UBOUND
- dim iListSize as integer ' size according to ListCount
-
- dim brc as boolean
- brc = true
-
- '///+<li>Determine the size of the array</li>
- iUpperBoundary = UBOUND( aList() )
-
- '///+<li>Determine the <i>claimed</i> size of the array</li>
- iListSize = ListCount( aList() )
-
- '///+<li>Verify that val(array(0)) <= array-size</li>
- if ( iListSize > iUpperBoundary ) then
- warnlog ( CFN & "List points beyound upper array boundary:" )
- printlog( CFN & "ListCount: " & iListSize )
- printlog( CFN & "UBOUND...: " & iUpperBoundary )
- brc = false
- endif
-
- hListTestUpperBoundary() = brc
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function hListTestLowerBoundary( aList() as string ) as boolean
-
- '///<h3>Verify that the lower boundaries of an array are ok</h3>
- '///<i>Prerequisite: Array compatible with those from t_lists.inc</i>
- '///<i>About listfunctions: All listfunctions rely on a special type of
- '///+ array. This can be string arrays and - in some cases - numeric
- '///+ arrays. What makes the arrays unique is that the first item which
- '///+ has the index 0 contains the number of items in the list to be used,
- '///+ anything that is stored beyond this number is ignored. This has three
- '///+ consequences: 1) all listfunctions that alter an array must update
- '///+ the index stored in array(0) and 2) it is possible that the index
- '///+ point beyond ubound of the array which will most likely cause a
- '///+ runtime error. 3) Means that arrays may only have an upper boundary
- '///+ declared, all loops must start with index array(1) and must end with
- '///+ index array(val( array(0))</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>List (string)</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Errorstatus (boolean)</li>
- '///<ul>
- '///+<li>TRUE: Array is ok</li>
- '///+<li>FALSE: Array logic has errors</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- const CFN = "hListTestLowerBoundary::"
-
- dim iLowerBoundary as integer ' size according to LBOUND
- dim iListSize as integer ' size according to ListCount
-
- dim brc as boolean
- brc = true
-
- iLowerBoundary = LBOUND( aList() )
- iListSize = ListCount( aList() )
-
- '///+<li>Verify that ubound for the array returns 0 (lower boundary)</li>
- if ( iLowerBoundary <> 0 ) then
- warnlog ( CFN & "Boundary of the array must be 0." )
- printlog( CFN & "Lower boundary is: " & iLowerBoundary )
- brc = false
- endif
-
- '///+<li>Verify that val(array(0)) &gt; 0</li>
- if ( iListSize < 0 ) then
- warnlog ( CFN & "Defined Listsize (ListCount) may never be negative" )
- printlog( CFN & "ListCount is: " & iListSize )
- brc = false
- endif
-
- hListTestLowerBoundary() = brc
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
function hListDelete( aList() as string, iItemToDelete as integer ) as boolean
'///<h3>Delete one item from a list specified by index</h3>
@@ -196,58 +46,25 @@ function hListDelete( aList() as string, iItemToDelete as integer ) as boolean
'///+ runtime error. 3) Means that arrays may only have an upper boundary
'///+ declared, all loops must start with index array(1) and must end with
'///+ index array(val( array(0))</i><br>
- '///<u>Review the code, it has many unused variables</u>
- '///<ul>
const CFN = "hListDelete::"
-
- dim iArraySize as integer ' The size of the array, must be large enough
- dim iListSizeOld as integer ' The size of the list before deletion
- dim iListSizeNew as integer ' The size of the list after deletion
+ const INDEX_CORRECTION = 1
dim iCurrentItem as integer ' Increment-Variable
- dim iOffset as integer ' First item to be "moved down" by index
- dim sItemToDelete as string ' The string that will be deleted
- dim brc as boolean ' preliminary return value
- '///+<li>test array integrity: upper boundary</li>
- brc = hListTestUpperBoundary( alist() )
- if ( not brc ) then
- hListDelete() = brc
- exit function
+ if ( GVERBOSE ) then
+ printlog( CFN & "Removing: " & aList( iItemToDelete ) & " at pos " & iItemToDelete )
endif
- '///+<li>test array integrity: lower boundary</li>
- brc = hListTestLowerBoundary( alist() )
- if ( not brc ) then
- hListDelete() = brc
- exit function
- endif
-
- '///+<li>Get some data from the arrays to work with.</li>
- iArraySize = ubound( aList() )
- iListSizeOld = ListCount( aList() )
- iListSizeNew = iListSizeOld - 1
- sItemToDelete = aList( iItemToDelete )
- iOffset = iItemToDelete + 1
-
- ' some output (may be removed as soon the function is thoroughly tested)
- 'printlog( CFN & "Removing: " & sItemToDelete & " at pos " & iItemToDelete )
-
' Move all items down by one in the list beginning with the item after
' iItemToDelete
- '///+<li>Move all items one up</li>
- for iCurrentItem = iOffset to iListSizeOld
- aList( iCurrentItem - 1 ) = aList( iCurrentItem )
+ for iCurrentItem = ( iItemToDelete + INDEX_CORRECTION ) to ListCount( aList() )
+ aList( iCurrentItem - INDEX_CORRECTION ) = aList( iCurrentItem )
next iCurrentItem
' Delete the last entry, it is no longer used and it is duplicate to the item
' at iListSizeOld-1 (iListSizeNew)
- '///+<li>Delete the last item from the list</li>
- aList( iListSizeOld ) = ""
-
- '///+<li>Set the new listsize (one smaller than the original list)</li>
- aList( 0 ) = iListSizeNew
- '///</ul>
+ aList( iCurrentItem ) = ""
+ aList( 0 ) = iCurrentItem - INDEX_CORRECTION
end function
@@ -270,6 +87,7 @@ function hListAppend( sNewString as string, aTargetList() as string ) as integer
'///+ index array(val( array(0))</i><br>
const CFN = "hListAppend::"
+ const RC_ARRAY_TOO_SMALL = -1
dim iCurrentListSize as integer
dim iNewListSize as integer
@@ -284,15 +102,13 @@ function hListAppend( sNewString as string, aTargetList() as string ) as integer
warnlog ( CFN & "Cannot append, array too small" )
printlog( CFN & "Array-Size.....: " & iArraySize )
printlog( CFN & "Requested index: " & iNewListSize )
- irc = -1
+ hListAppend() = RC_ARRAY_TOO_SMALL
else
aTargetList( iNewListSize ) = sNewString
aTargetList( 0 ) = iNewListSize
- irc = iNewListSize
+ hListAppend() = iNewListSize
endif
- hListAppend() = irc
-
end function
'*******************************************************************************
@@ -324,77 +140,44 @@ function hManageComparisionList( sFileIn as string, sFileOut as string, sListOut
'///<ul>
const CFN = "hManageComparisionList::"
-
- '///+<li>The name of the input file may not be empty</li>
- if ( sFileIn = "" ) then
- warnlog( CFN & "Invalid parameter: Input filename is empty string" )
- hManageComparisionList() = 2
- exit function
- endif
-
- '///+<li>The name of the output-file may not be empty</li>
- if ( sFileOut = "" ) then
- warnlog( CFN & "Invalid parameter: Output filename is empty string" )
- hManageComparisionList() = 3
- exit function
- endif
-
- '///+<li>the list should not claim to be empty / be empty</li>
- if ( listcount( sListOut() ) = 0 ) then
- qaerrorlog( CFN & "Invalid parameter: Array claims to be empty" )
- hManageComparisionList() = 4
- exit function
- endif
-
- ' hListFileGetSize will return -1 if the list does not exist or the number
- ' of lines in the reference file plus additional 10 lines.
- '///+<li>Verify that the reference file exists and is non-empty</li>
- dim iFileSize as integer
- iFileSize = hListFileGetSize( sFileIn )
- dim brc as boolean
- brc = false
-
- '///+<li>Read the reference list and compare</li>
- if ( iFileSize > -1 ) then
-
- dim aReferenceList( iFileSize ) as string
- printlog( CFN & "Reading: " & sFileIn )
- ' disabled hGetDataFileSection because some lists contain a #
- ' (hash) as value which is identified as comment by the function.
- ' Fixing this for hGetDataFileSection() would break compatibility
- ' to other functions both in framework and global module
- 'hgetDataFileSection( sFileIn , aReferenceList() , "" , "" , "" )
- listread( aReferenceList(), sFileIn, "utf8" )
- brc = hListCompare( sListOut() , aReferenceList() )
+ const FILESIZE = 25000
+ const COMPARE_SUCCESS = 0
+ const ENCODING_UTF8 = "UTF8"
+
+ dim irc as integer
+ dim aReferenceList( FILESIZE ) as string
+
+ if ( GVERBOSE ) then printlog( CFN & "Reading: " & sFileIn )
+ ' disabled hGetDataFileSection because some lists contain a #
+ ' (hash) as value which is identified as comment by the function.
+ ' Fixing this for hGetDataFileSection() would break compatibility
+ ' to other functions both in framework and global module
+ 'hgetDataFileSection( sFileIn , aReferenceList() , "" , "" , "" )
+ listread( aReferenceList(), sFileIn, ENCODING_UTF8 )
+ irc = hListCompare( sListOut() , aReferenceList() )
- endif
-
' A this point there are three possible states:
' a) the reference list does not exist
' b) the comparision failed
' c) the comparision succeeded
- ' only if hListCompare() returns TRUE the testrun is successful.
+ ' only if hListCompare() returns 0 the testrun is successful.
' This means that on any error, the ref-list will be written so it can be
' directly reviewed/compared to the "faulty" list without having to run this
' test again (after deleting the ref-file)
'///+<li>In case the lists are not identical, write the new one to the local work directory</li>
- if ( brc ) then
+ if ( irc = COMPARE_SUCCESS ) then
printlog( CFN & "Comparision succeeded" )
- hManageComparisionList() = 0
+ hManageComparisionList() = COMPARE_SUCCESS
else
- printlog( CFN & "Writing: " & sFileOut )
- listwrite( sListOut(), sFileOut, "UTF8" )
- qaerrorlog ( CFN & "Reference file review required:" )
- printlog( "" )
- printlog( CFN & "Two possible reasons:" )
- printlog( CFN & "1) The reference file does not exist at all" )
- printlog( CFN & "2) Reference and actual UI-Content do not match." )
- printlog( CFN & "Location: " & sFileOut )
- printlog( CFN & "Target..: " & sFileIn )
- printlog( CFn & "Verify the content and copy the file to <Target>" )
- printlog( "" )
- printlog( CFN & "Comparision failed" )
- hManageComparisionList() = 1
+ if ( GVERBOSE ) then
+ printlog( CFN & "The two compared lists differ. There are two likely reasons:" )
+ printlog( CFN & "1) The reference file does not exist at all" )
+ printlog( CFN & "2) Reference and actual UI-Content do not match." )
+ printlog( CFN & "Verify and copy the file: " & sFileOut )
+ printlog( CFN & "to this location........: " & sFileIn )
+ endif
+ listwrite( sListOut(), sFileOut, ENCODING_UTF8 )
+ hManageComparisionList() = irc
endif
'///+<li>Return 0 if the lists are identical, 1 if not and 2-4 on any other error</li>
@@ -404,69 +187,7 @@ end function
'*******************************************************************************
-function hListFileGetSize( sFileIn as string ) as integer
-
- '///<h3>Get the number of lines from a file</h3>
- '///<i>Prerequisites: Path to an existing plain text file</i>
- '///<i>About listfunctions: All listfunctions rely on a special type of
- '///+ array. This can be string arrays and - in some cases - numeric
- '///+ arrays. What makes the arrays unique is that the first item which
- '///+ has the index 0 contains the number of items in the list to be used,
- '///+ anything that is stored beyond this number is ignored. This has three
- '///+ consequences: 1) all listfunctions that alter an array must update
- '///+ the index stored in array(0) and 2) it is possible that the index
- '///+ point beyond ubound of the array which will most likely cause a
- '///+ runtime error. 3) Means that arrays may only have an upper boundary
- '///+ declared, all loops must start with index array(1) and must end with
- '///+ index array(val( array(0))</i><br>
- '///<ul>
-
- const CFN = "hListFileGetSize::"
- const I_EXTRA_SIZE = 10
-
- '///+<li>Verify that the filename is non-empty</li>
- if ( sFileIn = "" ) then
- warnlog( CFN & "Invalid parameter: Filename is empty string" )
- hListFileGetSize() = -1
- exit function
- endif
-
- '///+<li>Verify that the file exists</li>
- if ( dir( sFileIn ) = "" ) then
- warnlog( CFN & "File not found: " & sFileIn )
- hListFileGetSize() = -1
- exit function
- endif
-
- dim iFile as integer
- dim sLine as string
- dim iLineCount as integer
- iLineCount = 0
-
- '///+<li>Open the file (standard BASIC calls)</li>
- iFile = freefile
- open sFileIn for input as iFile
-
- '///+<li>Read the number of lines from the file</li>
- while( not eof( iFile ) )
-
- line input #iFile, sLine
- iLineCount = iLineCount + 1
-
- wend
-
- '///+<li>Close the file</li>
- close #iFile
-
- '///+<li>Return the number of lines read or -1 on error</li>
- hListFileGetSize() = iLineCount + I_EXTRA_SIZE
- '///</ul>
-
-end function
-
-'*******************************************************************************
-
-function hListCompare( aListOne() as String, aListTwo() as String ) as boolean
+function hListCompare( aListOne() as String, aListTwo() as String ) as integer
const CFN = "hListcompare::"
@@ -496,14 +217,12 @@ function hListCompare( aListOne() as String, aListTwo() as String ) as boolean
dim iListOneSize as integer
dim bFound as boolean
- dim brc as boolean ' returncode: true only if lists are identical
- brc = true
'///+<li>Create a copy of list two so we do not change the original list</li>
ListCopy( aListTwo() , aTwoOnlyList() )
iTwoOnlyListSize = ListCount( aTwoOnlyList() )
- iListOneSize = ListCount( aListOne() )
+ iListOneSize = ListCount( aListOne() )
'///+<li>Step through each item in list one</li>
@@ -529,9 +248,7 @@ function hListCompare( aListOne() as String, aListTwo() as String ) as boolean
next iListTwoIndex
'///+<li>If there is no match, the item exists in list one only -> copy</li>
- if ( not bFound ) then
- hListAppend( aListOne( iListOneIndex ), aOneOnlyList() )
- end if
+ if ( not bFound ) then hListAppend( aListOne( iListOneIndex ), aOneOnlyList() )
next iListOneIndex
@@ -542,17 +259,16 @@ function hListCompare( aListOne() as String, aListTwo() as String ) as boolean
if ( ListCount( aOneOnlyList() ) > 0 ) then
printlog( CFN & "Objects have been added to the list" )
hListPrint( aOneOnlyList() , "Items found in list ONE only (NEW)" )
- brc = false
+ hListCompare() = ListCount( aOneOnlyList() )
end if
'///+<li>List all items that exist in List Two only</li>
if ( ListCount( aTwoOnlyList() ) > 0 ) then
printlog( CFN & "Objects have been removed from the list" )
hListPrint( aTwoOnlyList() , "Items found in list TWO only (MISSING)" )
- brc = false
+ hListCompare() = ListCount( aOneOnlyList() ) * -1
end if
- hListCompare() = brc
'///</ul>
end function
@@ -597,9 +313,7 @@ function hListPrependString( aList() as string, cString as string ) as boolean
'///+<li>Cycle through the list and insert a text infront of each item</li>
for iCurrentItem = 1 to listcount( aList() )
-
aList( iCurrentItem ) = cString & " : " & aList( iCurrentItem )
-
next iCurrentItem
hListPrependString() = true
@@ -701,33 +415,53 @@ function hCountMatchesInList( acItemList() as string, cSearchTerm as string ) as
'///</ol>
const CFN = "hCountMatchesInList::"
- printlog( CFN & "Enter" )
-
dim iHitCount as integer
- dim iItemCount as integer
dim iCurrentItem as integer
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Retrieve the number of items in the list</li>
- iItemCount = ListCount( acItemList() )
-
- '///+<li>Walk through the list and count the hits</li>
- printlog( CFN & "Begin with term: " & cSearchTerm )
- for iCurrentItem = 1 to iItemCount
-
- printlog( acItemList( iCurrentItem ) )
-
+ if ( GVERBOSE ) then printlog( CFN & "Begin with term: " & cSearchTerm )
+
+ for iCurrentItem = 1 to ListCount( acItemList() )
+ if ( GVERBOSE ) then printlog( acItemList( iCurrentItem ) )
+
if ( instr( acItemList( iCurrentItem ), cSearchTerm ) > 0 ) then
iHitCount = iHitCount + 1
endif
-
next iCurrentItem
- printlog( CFN & "End" )
- '///</ul>
-
- printlog( CFN & "Exit with result: " & iHitCount )
+if ( GVERBOSE ) then printlog( CFN & "Exit with result: " & iHitCount )
hCountMatchesInList() = iHitCount
end function
+
+'*******************************************************************************
+
+function hListResultEvaluation( i_diffcount as integer, i_allowed_delta as integer ) as boolean
+
+ ' This function evaluates the outcome of hManageComaprisionList() or
+ ' hListCompare(). This extra step is done because in some cases the
+ ' program installations might differ slightly - in some CWS (when using the
+ ' archive) we can end up having a different set of import/export filters.
+ ' So the evaluation must allow for a specific number of mismatches which is
+ ' specified in i_allowed_delta.
+
+ hListResultEvaluation() = true
+
+ ' If lists are identical we return directly.
+ if ( i_diffcount = 0 ) then
+ printlog( "The lists are identical. Good" )
+ exit function
+ endif
+
+ ' if we have differences we need to have a closer look.
+ ' Note that the difference is optional.
+ if ( i_allowed_delta <> 0 ) then
+ if ( i_diffcount = i_allowed_delta ) then
+ printlog( "The lists have the allowed delta of " & i_allowed_delta )
+ exit function
+ endif
+ endif
+
+ warnlog( "The list check failed, please review the test." )
+ hListResultEvaluation() = false
+
+end function
diff --git a/testautomation/global/tools/includes/optional/t_macro_tools.inc b/testautomation/global/tools/includes/optional/t_macro_tools.inc
index 825a1f98bef2..18d5245e13f7 100644..100755
--- a/testautomation/global/tools/includes/optional/t_macro_tools.inc
+++ b/testautomation/global/tools/includes/optional/t_macro_tools.inc
@@ -56,53 +56,40 @@ function hInsertMacroFromFile( cMacroId as string, optional cSource as string )
'///<ul>
const CFN = "hInsertMacroFromFile::"
+ const RETVAL_FAILURE = 0
+ const MAX_LINES_IN_MACRO_FILE = 10000
'///+<li>Find the path to the source file</li>
dim cFile as string
- if ( IsMissing( cSource ) ) then
- cFile = convertpath( gTesttoolPath & "global/input/macros.txt" )
- else
- cFile = convertpath( cSource )
- endif
-
- '///+<li>Determine the required array size</li>
- dim iArraySize as integer
- iArraySize = hListFileGetSize( cFile )
-
- dim aInstructionList( iArraySize ) as string
-
+ dim aInstructionList( MAX_LINES_IN_MACRO_FILE ) as string
dim iInstructionCount as integer
dim iCurrentInstruction as integer
-
- dim brc as boolean
-
+
+ if ( IsMissing( cSource ) ) then cFile = gTesttoolPath & "global/input/macros.txt"
+
'///+<li>retrieve the macro from the file with ID as section</li>
- iInstructionCount = hGetDataFileSection( cFile, _
- aInstructionList(), _
- cMacroId, "", "" )
+ iInstructionCount = hGetDataFileSection( cFile, aInstructionList(), cMacroId, "", "" )
'///+<li>Delete all content from the BASIC IDE edit window</li>
- brc = hDeleteMacro()
-
'///+<li>Insert the code into the IDE line by line</li>
- if ( brc ) then
-
- for iCurrentInstruction = 1 to iInstructionCount
-
- EditWindow.TypeKeys( "<HOME>" )
- EditWindow.TypeKeys( aInstructionList( iCurrentInstruction ) )
- EditWindow.TypeKeys( "<RETURN>" )
-
- next iCurrentInstruction
- printlog( CFN & "Inserted macro: " & cMacroId )
- hInsertMacroFromFile() = iInstructionCount
-
+ kontext "BasicIDE"
+ if ( EditWindow.exists() ) then
+ if ( hDeleteMacro() ) then
+ for iCurrentInstruction = 1 to iInstructionCount
+ EditWindow.TypeKeys( "<HOME>" )
+ EditWindow.TypeKeys( aInstructionList( iCurrentInstruction ) )
+ EditWindow.TypeKeys( "<RETURN>" )
+ next iCurrentInstruction
+ printlog( CFN & "Inserted macro: " & cMacroId )
+ hInsertMacroFromFile() = iInstructionCount
+ else
+ printlog( CFN & "IDE is not empty, will not insert macro" )
+ hInsertMacroFromFile() = RETVAL_FAILURE
+ endif
else
-
- printlog( CFN & "IDE is not empty, will not insert macro" )
- hInsertMacroFromFile() = 0
-
- endif
+ printlog( CFN & "Editwindow is not visible" )
+ hInsertMacroFromFile() = RETVAL_FAILURE
+ endif
'///</ul>
end function
@@ -111,66 +98,78 @@ end function
function hMacroOrganizerRunMacro( cMacroName as string ) as integer
- '///<h3>Execute a macro by name</h3>
- '///<i>Starting point: Any document</i><br>
- '///+<i>The function runs silent</i><br>
- '///<u>Input</u>:
- '///<ol>
- '///+<li>Name of the macro to be run (string)</li>
- '///<ul>
- '///+<li>Any macro that can run by itself (main)</li>
- '///</ul>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>Position of the macro in the treelist (integer)</li>
- '///<ul>
- '///+<li>0 = error</li>
- '///+<li>1-n = position of macro</li>
- '///</ul>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
-
- dim irc as integer
+ ' Run a macro by name. Returnvalues as follows:
+ ' = 0: any error
+ ' > 0: position of macro in the list, success.
+
const CFN = "hMacroOrganizerRunMacro::"
+ const RETVAL_FAILURE = 0
- '///+<li>Go to Tools/Macros/Organize Macros/OpenOffice.org Basic</li>
- printlog( CFN & "Enter with option: " & cMacroName )
- ToolsMacro_uno
-
- '///+<li>Find the Macro</li>
- kontext "Makro"
- hExpandAllNodes( MakroAus )
- irc = hSelectNodeByName( MakroAus , cMacroName )
- hExpandNode( MakroAus, irc )
- hSelectNextNode( MakroAus )
+ dim iMacroPosition as integer
+
+ ToolsMacro_uno
- if ( MakroAus.getSelText() = cMacroName ) then
- printlog( CFN & "Matching object found: " & cMacroName )
- else
- irc = 0
- endif
-
-
- '///+<li>Run the macro</li>
kontext "Makro"
- if ( Ausfuehren.exists( 1 ) ) then
- if ( Ausfuehren.isEnabled( 1 ) ) then
- Ausfuehren.click()
+ if ( Makro.exists( 2 ) ) then
+ hExpandAllNodes( MakroAus )
+ iMacroPosition = hSelectNodeByName( MakroAus, cMacroName )
+ if ( iMacroPosition ) then
+ iMacroPosition = hSelectNextNode( MakroAus )
+ if ( hClickButton( Ausfuehren ) ) then
+ hMacroOrganizerRunMacro() = iMacroPosition
+ else
+ ' run macro button not enabled
+ warnlog( CFN & "Unable to click <Run macro> button" )
+ hMacroOrganizerRunMacro() = RETVAL_FAILURE
+ endif
else
- printlog( CFN & "Could not execute macro, button is disabled" )
- Makro.close()
- irc = 0
+ warnlog( CFN & "Macro was not found" )
+ hMacroOrganizerRunMacro() = RETVAL_FAILURE
endif
else
- printlog( CFN & "Control does not exist/context failed" )
- Makro.close()
- irc = 0
+ warnlog( CFN & "Failed to open Macro Organizer" )
+ hMacroOrganizerRunMacro() = RETVAL_FAILURE
endif
-
- hMacroOrganizerRunMacro() = irc
- printlog( CFN & "Exit with result: " & irc )
- '///</ul>
+
end function
+
+'*******************************************************************************
+
+function hBasicIDERunMacro( cIdentifier as string ) as boolean
+
+ const CFN = "hBasicIDERunMacro(): "
+ const MAX_WAIT = 1
+ dim cMessage as string : cMessage = ""
+
+ kontext "BasicIDE"
+ if ( BasicIDE.exists() ) then
+
+ Wait( 2000 )
+
+ kontext "MacroBar"
+ if ( MacroBar.exists() ) then
+ BasicRun.click()
+ else
+ warnlog( "MacroBar not accessible" )
+ endif
+
+ kontext "Active"
+ if ( Active.exists( MAX_WAIT ) ) then
+ cMessage = Active.getText()
+ hCloseDialog( Active, "ok" )
+ endif
+
+ if ( cMessage = cIdentifier ) then
+ printlog( "The expected macro was executed" )
+ hBasicIDERunMacro() = true
+ else
+ printlog( CFN & "Incorrect macro executed" )
+ hBasicIDERunMacro() = false
+ endif
+ else
+ warnlog( CFN & "BasicIDE is not open" )
+ hBasicIDERunMacro() = false
+ endif
+
+end function \ No newline at end of file
diff --git a/testautomation/global/tools/includes/optional/t_ole.inc b/testautomation/global/tools/includes/optional/t_ole.inc
index 28268ef5394e..63c55705add9 100644..100755
--- a/testautomation/global/tools/includes/optional/t_ole.inc
+++ b/testautomation/global/tools/includes/optional/t_ole.inc
@@ -31,36 +31,41 @@
'*
'\******************************************************************************
-private const VERBOSE = FALSE
+function hGetOfficeVersion() as string
-'*******************************************************************************
+ ' The "Insert OLE object" dialog lists the OLE Objects with application name
+ ' and version number. THe version numbers are tracked in the officeinfo.txt
+ ' file which must be adjusted each time we change to a new major version.
-function hGetOfficeVersion() as string
+ const CFN = "global::tools::includes::optional::t_ole.inc::hGetOfficeVersion(): "
+ const DATAFILE = "global/input/officeinfo.txt"
+ const MAX_LINES_IN_DATAFILE = 20
dim cPath as string
- dim aItemList( 20 ) as string
+ dim aItemList( MAX_LINES_IN_DATAFILE ) as string
- const CFN = "global::tools::includes::optional::t_ole.inc::hGetOfficeVersion(): "
-
' Path to info file
- cPath = convertpath( gTesttoolPath & "global/input/officeinfo.txt" )
- if ( VERBOSE ) then printlog( CFN & "Reading: " & cPath )
+ cPath = convertpath( gTesttoolPath & DATAFILE )
+ if ( GVERBOSE ) then printlog( CFN & "Reading: " & cPath )
- ' Read the file
+ ' Read the file, store the list of known office versions
hGetDatafileSection( cPath, aItemList(), "", "", "" )
- ' Set global variable
+ ' Search for the version number matching the product name, store value in global variable
gOfficeVersion = hGetValueForKeyAsString( aItemList(), gProductName )
- ' Set returnvalue
+ ' Return content of the global variable as well
hGetOfficeVersion() = gOfficeVersion
end function
'*******************************************************************************
-function hGetOleObjectName( ObjectType as string ) as string
+function hGetOleObjectName( cApplication as string ) as string
+
+ ' for cApplication you may pass gApplication.
+ dim Application_API_Name as string
dim oUnoOfficeConnection as object
dim oUnoConfigurationAccess as object
dim aPropertyValue(1) as new com.sun.star.beans.PropertyValue
@@ -69,28 +74,26 @@ function hGetOleObjectName( ObjectType as string ) as string
dim cString as string
const CFN = "global::tools::includes::optional::t_ole.inc::hGetOleObjectName(): "
-
- ' Test function parameters. They are <> gApplication as the API is case sensitive
- select case ObjectType
- case "Writer"
- case "Calc"
- case "Impress"
- case "Draw"
- case "Math"
- case "Chart"
+
+ ' The application names for the API are case sensitive so we cannot use gApplication
+ select case ( ucase( cApplication ) )
+ case "WRITER" : Application_API_Name = "Writer"
+ case "CALC" : Application_API_Name = "Calc"
+ case "IMPRESS": Application_API_Name = "Impress"
+ case "DRAW" : Application_API_Name = "Draw"
+ case "MATH" : Application_API_Name = "Math"
+ case "CHART" : Application_API_Name = "Chart"
case else
- warnlog( CFN & "Invalid object type passed to function: " & ObjectType )
- warnlog( CFN & "This function is case sensitive." )
- warnlog( CFN & "Supported are: Writer, Calc, Impress, Draw, Math, Chart" )
+ warnlog( CFN & "Invalid object type passed to function: " & cApplication )
hGetOleObjectName() = ""
exit function
end select
- if ( VERBOSE ) then printlog( CFN & "Retrieving OLE name for: " & ObjectType )
+ if ( GVERBOSE ) then printlog( CFN & "Retrieving OLE name for: " & cApplication )
' ...Embedding is physical path, ObjectNames the top node
aPropertyValue( 0 ).Name = "nodepath"
- aPropertyValue( 0 ).Value = "/org.openoffice.Office.Embedding/ObjectNames/" & ObjectType
+ aPropertyValue( 0 ).Value = "/org.openoffice.Office.Embedding/ObjectNames/" & Application_API_Name
' Connect to remote UNO
oUnoOfficeConnection = hGetUnoService( TRUE )
@@ -125,7 +128,7 @@ end function
function GetOleDefaultNames()
const CFN = "global::tools::includes::optional::t_ole.inc::GetOleDefaultNames(): "
- if ( VERBOSE ) then printlog( CFN & "Retrieving OLE names" )
+ if ( GVERBOSE ) then printlog( CFN & "Retrieving OLE names" )
hGetOfficeVersion()
gOLEWriter = hGetOleObjectName( "Writer" )
diff --git a/testautomation/global/tools/includes/optional/t_proxy_info.inc b/testautomation/global/tools/includes/optional/t_proxy_info.inc
deleted file mode 100644
index 90fe1cfe3e48..000000000000
--- a/testautomation/global/tools/includes/optional/t_proxy_info.inc
+++ /dev/null
@@ -1,138 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Tools to retrieve auxilary environment information
-'*
-'*******************************************************************************
-'**
-' #1 hGetProxyInfo ' Retrieve the names and ports of the proxies
-' #0 hPrintProxyInstructions ' print instructions to the log
-'**
-'\******************************************************************************
-
-function hGetProxyInfo( sSection as string, sItem as string ) as string
-
-
- '///<h3>Retrieve the names and ports of the proxies</h3>
- '///<i>This function retrieves the names and ports of the proxies used
- '///+ in your local network. The data is taken from a textfile that is
- '///+ not visible on OpenOffice.org (Sun security policy)<br>
- '///+ If the file is not found a message is printed to the log that
- '///+ gives instructions on how to create and format such a file and
- '///+ what other steps must be taken to make this work for your local
- '///+ network (don't panic, it's simple!).</i><br><br>
-
- '///<u>Input values:</u><br>
- '///<ol>
-
- '///+<li>Section (string). Valid options:</li>
- '///<ul>
- '///+<li>&quot;http_proxy&quot;</li>
- '///+<li>&quot;ftp_proxy&quot;</li>
- '///+<li>&quot;socks_proxy&quot;</li>
- '///+<li>&quot;no_proxy_for&quot;</li>
- '///</ul>
-
- '///+<li>Item (string). Valid options:</li>
- '///<ul>
- '///+<li>&quot;Name&quot;</li>
- '///+<li>&quot;Port&quot; (not for &quot;no_proxy_for&quot)</li>
- '///</ul>
-
- '///</ol>
-
-
- '///<u>Return Value:</u><br>
- '///<ol>
- '///+<li>Name or port of an item (string)</li>
- '///<ul>
- '///+<li>Empty String on error</li>
- '///</ul>
- '///</ol>
-
- const CFN = "hGetProxyInfo::"
-
- dim irc as integer ' some integer returnvalue
- dim crc as string ' some string returnvalue
-
- ' This is the workfile. Make sure it exists and contains valid data
- dim cFile as string
- cFile = gTesttoolPath & "sun_global\input\proxies.txt"
- ' cFile = gTesttoolPath & "global\input\proxies.txt"
- cFile = convertpath ( cFile )
-
- ' this is a temporary list that holds the workfile
- dim acList( 50 ) as string
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Open the file, read the section, abort on error</li>
- irc = hGetDataFileSection( cFile, acList(), sSection , "" , "" )
- if ( irc = 0 ) then
- qaerrorlog( CFN & "File or section not found" )
- hGetProxyInfo() = ""
- hPrintProxyInstructions()
- exit function
- endif
-
- '///+<li>Isolate the key</li>
- crc = hGetValueForKeyAsString( acList(), sItem )
- if ( instr( crc , "Error:" ) > 0 ) then
- qaerrorlog( CFN & "The requested item could not be found" )
- hGetProxyInfo() = ""
- hPrintProxyInstructions()
- exit function
- endif
-
- '///+<li>Return the requested item</li>
-
- '///</ul>
-
- hGetProxyInfo() = crc
-
-end function
-
-'*******************************************************************************
-
-function hPrintProxyInstructions()
-
- printlog( "" )
- printlog( "How to configure proxy settings for your local network" )
- printlog( "" )
- printlog( "1. Edit the sample configuration file" )
- printlog( " Location: global/input/proxies.txt" )
- printlog( " Replace servernames and ports with valid entries" )
- printlog( "" )
- printlog( "2. Edit the function hGetProxyInfo" )
- printlog( " Make the first line with cFile = ... a comment"
- printlog( " Make the second line with cFile = ... active"
- printlog( " Save the file" )
- printlog( "" )
-
-end function
diff --git a/testautomation/global/tools/includes/optional/t_security_tools.inc b/testautomation/global/tools/includes/optional/t_security_tools.inc
index 2306bda01e27..24a718fd7a48 100755
--- a/testautomation/global/tools/includes/optional/t_security_tools.inc
+++ b/testautomation/global/tools/includes/optional/t_security_tools.inc
@@ -68,35 +68,42 @@ function hSetPasswordRecommendation( bEnable as boolean ) as boolean
'///+<li>Click on the &quot;Options...&quot; button</li>
kontext "TabSecurity"
- Options.click()
+ if ( hClickButton( Options ) ) then
- kontext "TabSecurityOptionsAndWarnings"
- if ( TabSecurityOptionsAndWarnings.exists( 1 ) ) then
-
- '///+<li>Retrieve the current setting for passwor recommendation</li>
- if ( RecommendPasswordProtectionOnSaving.isChecked() ) then
- hSetPasswordRecommendation() = true
+ kontext "TabSecurityOptionsAndWarnings"
+ if ( TabSecurityOptionsAndWarnings.exists( 1 ) ) then
+
+ '///+<li>Retrieve the current setting for passwor recommendation</li>
+ if ( RecommendPasswordProtectionOnSaving.isChecked() ) then
+ hSetPasswordRecommendation() = true
+ else
+ hSetPasswordRecommendation() = false
+ endif
+
+ '///+<li>Set the requested state</li>
+ if ( bEnable ) then
+ printlog( CFN & "Enabled password recommendation" )
+ RecommendPasswordProtectionOnSaving.check()
+ else
+ printlog( CFN & "Disabled password recommendation" )
+ RecommendPasswordProtectionOnSaving.uncheck()
+ endif
+
+ hCloseDialog( TabSecurityOptionsAndWarnings, "ok" )
+
else
+ warnlog( "Failed to open security options page" )
hSetPasswordRecommendation() = false
endif
-
- '///+<li>Set the requested state</li>
- if ( bEnable ) then
- printlog( CFN & "Enabled password recommendation" )
- RecommendPasswordProtectionOnSaving.check()
- else
- printlog( CFN & "Disabled password recommendation" )
- RecommendPasswordProtectionOnSaving.uncheck()
- endif
- TabSecurityOptionsAndWarnings.ok()
else
- warnlog( "Failed to open security options page" )
+ warnlog( CFN & "Unable to click options button" )
+ hSetPasswordRecommendation() = false
endif
'///+<li>Close Tools/Options</li>
Kontext "ToolsOptionsDlg"
- ToolsOptionsDlg.ok()
+ hCloseDialog( ToolsOptionsDlg, "ok" )
else
warnlog( "Failed to open Tools/Options" )
@@ -127,19 +134,23 @@ function hOpenDigitalSignaturesDialog() as boolean
'///<u>Description</u>:
'///<ul>
- dim brc as boolean
const CFN = "hOpenDigitalSignaturesDialog::"
+ const FILE_MENU_POSITION = 1
+ const SIGNATURES_MENU_POSITION_OTHER = 15
+ const SIGNATURES_MENU_POSITION_MATH = 14
+
+ hOpenDigitalSignaturesDialog() = false
'///+<li>Open the file-menu</li>
call hUseMenu()
- call hMenuSelectNr( 1 )
+ call hMenuSelectNr( FILE_MENU_POSITION )
'///+<li>Select &quot;Digital signatures...&quot;</li>
try
- if ( ucase( gApplication ) = "MATH" ) then
- call hMenuSelectNr( 14 )
+ if ( gApplication = "MATH" ) then
+ call hMenuSelectNr( SIGNATURES_MENU_POSITION_MATH )
else
- call hMenuSelectNr( 15 )
+ call hMenuSelectNr( SIGNATURES_MENU_POSITION_OTHER )
endif
catch
warnlog( CFN & "Failed to execute menuitem <Digital Signature...>" )
@@ -155,13 +166,9 @@ function hOpenDigitalSignaturesDialog() as boolean
kontext "DigitalSignature"
if ( DigitalSignature.exists() ) then
printlog( CFN & "Digital signatures is open" )
- brc = true
- else
- brc = false
+ hOpenDigitalSignaturesDialog() = true
endif
-
'///</ul>
- hOpenDigitalSignaturesDialog() = brc
end function
@@ -188,18 +195,18 @@ function hAllowMacroExecution() as boolean
'///<ul>
const CFN = "hAllowMacroExecution::"
+ const MAX_WAIT_FOR_SECURITY_DIALOG = 5
'///+<li>Verify that the Macro security Warning is displayed</li>
kontext "SecurityWarning"
- if ( SecurityWarning.exists( 5 ) ) then
+ if ( SecurityWarning.exists( MAX_WAIT_FOR_SECURITY_DIALOG ) ) then
'///+<li>Click &quot;Run&quot; to allow macro execution</li>
- SecurityWarning.ok()
- hAllowMacroExecution() = true
- printlog( CFN & "Allowed macro execution" )
+ printlog( CFN & "Allowing macro execution" )
+ hAllowMacroExecution() = hCloseDialog( SecurityWarning, "ok" )
else
- hAllowMacroExecution() = false
printlog( CFN & "Macro dialog not displayed" )
+ hAllowMacroExecution() = false
endif
'///</ul>
@@ -234,12 +241,11 @@ function hDenyMacroExecution() as boolean
if ( SecurityWarning.exists() ) then
'///+<li>Click &quot;Cancel&quot; to deny execution</li>
- SecurityWarning.cancel()
- hDenyMacroExecution() = true
printlog( CFN & "Denied macro execution" )
+ hDenyMacroExecution() = hCloseDialog( SecurityWarning, "cancel" )
else
- hDenyMacroExecution() = false
printlog( CFN & "Macro dialog not displayed" )
+ hDenyMacroExecution() = false
endif
'///</ul>
@@ -301,7 +307,6 @@ function hAddTrustedPath( cPath as string ) as boolean
const CFN = "hAddTrustedPath::"
dim iPathCount as integer
- dim brc as boolean
'///<u>Description</u>:
'///<ul>
@@ -313,7 +318,7 @@ function hAddTrustedPath( cPath as string ) as boolean
hToolsOptions( "StarOffice" , "Security" )
'///+<li>Click Macro Security</li>
- MacroSecurity.click()
+ hClickButton( MacroSecurity )
'///+<li>Switch to the Trusted Paths tab</li>
hSwitchMacroSecurityTab( "trustedpaths" )
@@ -323,34 +328,31 @@ function hAddTrustedPath( cPath as string ) as boolean
iPathCount = LocationsListBox.getItemCount()
'///+<li>Click the &quot;Add&quot; button</li>
- LocationsAdd.click()
+ hClickButton( LocationsAdd )
'///+<li>Enter a path to some files containing macros</li>
kontext "OeffnenDlg"
DateiName.setText( cPath )
'///+<li>Click &quot;Select&quot;</li>
- Oeffnen.click()
+ hClickButton( Oeffnen )
'///+<li>Verify that the item has been added to the list</li>
kontext "TabTrustedSources"
if ( LocationsListBox.getItemCount() <> ( iPathCount + 1 ) ) then
warnlog( CFN & "Incorrect number of items in locations listbox" )
- brc = false
+ hAddTrustedPath() = false
else
- printlog( CFN & "Added: " & cPath )
- brc = true
+ printlog( "Added: " & cPath )
+ hAddTrustedPath() = true
endif
'///+<li>Close the dialog</li>
- TabTrustedSources.ok()
+ hCloseDialog( TabTrustedSources, "ok" )
'///+<li>Close Tools/Options</li>
Kontext "OptionenDlg"
- OptionenDlg.ok()
-
- hAddTrustedPath() = brc
-
+ hCloseDialog( OptionenDlg, "ok" )
'///</ul>
end function
@@ -379,8 +381,7 @@ function hRemoveTrustedPath( cPath as string ) as boolean
dim iPathCount as integer
dim iCurrentPathItem as integer
- dim brc as boolean
- brc = false
+ hRemoveTrustedPath() = false
'///<u>Description</u>:
'///<ul>
@@ -392,41 +393,42 @@ function hRemoveTrustedPath( cPath as string ) as boolean
hToolsOptions( "StarOffice" , "Security" )
'///+<li>Click Macro Security</li>
- MacroSecurity.click()
+ hClickButton( MacroSecurity )
'///+<li>Switch to the Trusted Paths tab</li>
hSwitchMacroSecurityTab( "trustedpaths" )
kontext "TabTrustedSources"
- '///+<li>Get the number of currently listed items from the list</li>
- iPathCount = LocationsListBox.getItemCount()
+ if ( TabTrustedSources.exists() ) then
- '///+<li>Find the entry in the list</li>
- for iCurrentPathItem = 1 to iPathCount
+ '///+<li>Get the number of currently listed items from the list</li>
+ iPathCount = LocationsListBox.getItemCount()
- '///+<li>If it is there, delete it</li>
- LocationsListBox.select( iCurrentPathItem )
- if ( LocationsListBox.getSelText() = cPath ) then
- LocationsRemove.click()
- printlog( CFN & "Removed item at pos. " & iCurrentPathItem )
- brc = true
- exit for
- endif
+ '///+<li>Find the entry in the list</li>
+ for iCurrentPathItem = 1 to iPathCount
- next iCurrentPathItem
-
- '///+<li>Close the dialog</li>
- TabTrustedSources.ok()
+ '///+<li>If it is there, delete it</li>
+ LocationsListBox.select( iCurrentPathItem )
+ if ( LocationsListBox.getSelText() = cPath ) then
+ LocationsRemove.click()
+ printlog( CFN & "Removed item at pos. " & iCurrentPathItem )
+ hRemoveTrustedPath() = true
+ exit for
+ endif
- '///+<li>Close Tools/Options</li>
- Kontext "OptionenDlg"
- OptionenDlg.ok()
+ next iCurrentPathItem
+
+ '///+<li>Close the dialog</li>
+ hCloseDialog( TabTrustedSources, "ok" )
- if ( not brc ) then
- printlog( CFN & "The trusted path was not found in the list" )
+ else
+ warnlog( CFN & "Trusted Sources Tab did not open" )
+ hRemoveTrustedPath() = false
endif
- hRemoveTrustedPath() = brc
+ '///+<li>Close Tools/Options</li>
+ Kontext "OptionenDlg"
+ hCloseDialog( OptionenDlg, "ok" )
'///</ul>
@@ -468,8 +470,7 @@ function hSecurityEnterPasswordOnSave( cPassword as string ) as boolean
'///</ol>
const CFN = "hSecurityEnterPasswordOnSave::"
- printlog( CFN & "Enter" )
- dim brc as boolean : brc = true
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
'///<u>Description:</u>
'///<ul>
@@ -486,7 +487,7 @@ function hSecurityEnterPasswordOnSave( cPassword as string ) as boolean
PasswordConfirm.setText( cPassword & "1" )
'///+<li>Click on OK</li>
- PasswordFileSave.ok()
+ hCloseDialog( PasswordFileSave, "ok" )
'///+<li>There should be a warning about a faulty password confirmation</li>
kontext "Active"
@@ -498,7 +499,7 @@ function hSecurityEnterPasswordOnSave( cPassword as string ) as boolean
Active.notExists( 2 )
else
qaerrorlog( CFN & "Warning about faulty password confirmation is missing" )
- brc = false
+ hSecurityEnterPasswordOnSave() = false
endif
'///+<li>We should now be back on the password dialog</li>
@@ -514,19 +515,20 @@ function hSecurityEnterPasswordOnSave( cPassword as string ) as boolean
PasswordConfirm.setText( cPassword )
'///+<li>Click on OK</li>
- PasswordFileSave.ok()
+ hCloseDialog( PasswordFileSave, "ok" )
+ hSecurityEnterPasswordOnSave() = true
else
qaerrorlog( CFN & "The password dialog is missing after confirmation error" )
- brc = false
+ hSecurityEnterPasswordOnSave() = false
endif
else
qaerrorlog( CFN & "The password dialog did not open" )
- brc = false
+ hSecurityEnterPasswordOnSave() = false
endif
@@ -535,12 +537,11 @@ function hSecurityEnterPasswordOnSave( cPassword as string ) as boolean
if ( SpeichernDlg.exists() ) then
qaerrorlog( CFN & "File Save dialog is open, cancelling." )
SpeichernDlg.cancel()
- brc = false
+ hSecurityEnterPasswordOnSave() = false
endif
'///</ul>
- printlog( CFN & "Exit with result: " & brc )
- hSecurityEnterPasswordOnSave() = brc
+ if ( GVERBOSE ) then printlog( CFN & "Exit" )
end function
@@ -549,8 +550,6 @@ end function
function hSecurityEnterPasswordOnLoad( cPassword as string, bValid as boolean ) as boolean
- use "global\tools\includes\optional\t_stringtools.inc"
-
'///<h3>Enter a password while loading a document</h3>
'///<i>Enters a valid or invalid password while loading a passworded file</i><br><br>
@@ -581,11 +580,12 @@ function hSecurityEnterPasswordOnLoad( cPassword as string, bValid as boolean )
'///</ol>
const CFN = "hSecurityEnterPasswordOnLoad::"
- printlog( CFN & "Enter with option (Password): " & cPassword )
- printlog( CFN & "Enter with option (Validity): " & bValid )
- dim brc as boolean 'a multi purpose boolean returnvalue
- brc = true
- dim cMsg as string
+ if ( GVERBOSE ) then
+ printlog( CFN & "Enter with option (Password): " & cPassword )
+ printlog( CFN & "Enter with option (Validity): " & bValid )
+ endif
+
+ hSecurityEnterPasswordOnLoad() = true
'///<u>Description:</u>
'///<ul>
@@ -595,7 +595,7 @@ function hSecurityEnterPasswordOnLoad( cPassword as string, bValid as boolean )
'///+<li>Enter password, click OK</li>
PasswortName.setText( cPassword )
- PasswordFileOpen.ok()
+ hCloseDialog( PasswordFileOpen, "ok" )
'///+<li>If the password was incorrect:</li>
'///<ul>
@@ -604,61 +604,74 @@ function hSecurityEnterPasswordOnLoad( cPassword as string, bValid as boolean )
'///+<li>Look for a warning message</li>
kontext "Active"
if ( Active.exists( 1 ) ) then
-
- cMsg = Active.getText()
- cMsg = hRemoveLineBreaks( cMsg )
- if ( bValid ) then
- warnlog( CFN & "Message: " & cMsg )
- else
- printlog( CFN & "Message: " & cMsg )
- endif
+ printlog( CFN & "Message: " & Active.getText() )
'///+<li>Close the messagebox</li>
- Active.ok()
+ hCloseDialog( Active, "ok" )
'///+<li>Close the Password dialog with &quot;Cancel&quot;</li>
kontext "PasswordFileOpen"
if ( PasswordFileopen.exists( 2 ) ) then
-
- PasswordFileOpen.cancel()
-
+ hCloseDialog( PasswordFileOpen, "cancel" )
else
-
qaerrorlog( CFN & "Password dialog is not present" )
- brc = false
-
+ hSecurityEnterPasswordOnLoad() = false
endif
else
-
qaerrorlog( CFN & "Warning about incorrect password is missing" )
- brc = false
-
+ hSecurityEnterPasswordOnLoad() = false
endif
else
-
kontext "Active"
if ( Active.exists( 1 ) ) then
-
- cMsg = Active.getText()
- cMsg = hRemoveLIneBreaks( cMsg )
- qaerrorlog( CFN & "Unexpected messagebox: " & cMsg )
- brc = false
-
+ warnlog( CFN & "Unexpected messagebox: " & Active.getText() )
+ hSecurityEnterPasswordOnLoad() = false
endif
-
endif
'///</ul>
else
-
- qaerrorlog( CFN & "Password dialog is missing" )
- brc = false
-
+ warnlog( CFN & "Password dialog is missing" )
+ hSecurityEnterPasswordOnLoad() = false
endif
'///</ul>
+
+end function
- printlog( CFN & "Exit with result:" & brc )
- hSecurityEnterPasswordOnLoad() = brc
+'*******************************************************************************
+
+function hSelectXMLSecTab( cTab as string ) as boolean
+
+ const CFN = "hSelectXMLSecTab::"
+ hSelectXMLSecTab() = false
+
+ kontext
+
+ select case ( ucase( cTab ) )
+ case "GENERAL" : active.setpage TabXMLSecGeneral
+ if ( TabXMLSecGeneral.exists() and TabXMLSecGeneral.isVisible() ) then
+ printlog( CFN & "Switched to General page" )
+ hSelectXMLSecTab() = true
+ exit function
+ endif
+
+ case "DETAILS" : active.setpage TabXMLSecDetails
+ if ( TabXMLSecDetails.exists() and TabXMLSecDetails.isVisible() ) then
+ printlog( CFN & "Switched to Details page" )
+ hSelectXMLSecTab() = true
+ exit function
+ endif
+
+ case "PATH" : active.setpage TabXMLSecCertPath
+ if ( TabXMLSecCertPath.exists() and TabXMLSecCertPath.isVisible() ) then
+ printlog( CFN & "Switched to Certification Path page" )
+ hSelectXMLSecTab() = true
+ exit function
+ endif
+ end select
+
+ warnlog( CFN & "Failed to switch XML Security Tabpage" )
end function
+
diff --git a/testautomation/global/tools/includes/optional/t_server_info.inc b/testautomation/global/tools/includes/optional/t_server_info.inc
deleted file mode 100644
index 75ff6ab8a8b4..000000000000
--- a/testautomation/global/tools/includes/optional/t_server_info.inc
+++ /dev/null
@@ -1,148 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/******************************************************************************
-'*
-'* owner : joerg.skottke@sun.com
-'*
-'* short description : Tools to retrieve information about available servers
-'*
-'*******************************************************************************
-'**
-' #1 hGetServerInfo ' Retrieve names and services of some servers
-' #0 hPrintServerInstructions ' print instructions to the log
-'**
-'\******************************************************************************
-
-function hGetServerInfo( sType as string, sItem as string ) as string
-
-
- '///<h3>Retrieve names and services of some servers</h3>
- '///<i>This function retrieves some information about available
- '///+ servers within the LAN. These services can be anything like
- '///+ http-server, ftp etc.<br>
- '///+ Please make sure you read the comments in the configuration
- '///+ file to fully understand what this thing does.</i><br><br>
-
- '///<u>Input values:</u><br>
- '///<ol>
-
- '///+<li>Type (string). Valid options:</li>
- '///<ul>
- '///+<li>&quot;http_internal&quot;</li>
- '///+<li>&quot;http_external&quot;</li>
- '///+<li>&quot;ftp_internal&quot;</li>
- '///+<li>&quot;ftp_external&quot;</li>
- '///</ul>
-
- '///+<li>Item (string). Valid options:</li>
- '///<ul>
- '///+<li>&quot;Name&quot; to get a name for the server</li>
- '///+<li>&quot;Port&quot; to get the server's port</li>
- '///+<li>&quot;Protocol&quot; to get the supported protocol</li>
- '///+<li>&quot;URL&quot; to get the url (e.g. www.heise.de)</li>
- '///+<li>&quot;UseProxy&quot; to find out whether proxies are needed or not</li>
- '///+<li>&quot;User&quot; to get a loginname</li>
- '///+<li>&quot;Pass&quot; to get a password</li>
- '///</ul>
-
- '///</ol>
-
-
- '///<u>Return Value:</u><br>
- '///<ol>
- '///+<li>Name, port or other info of an item (string)</li>
- '///<ul>
- '///+<li>Empty String on error</li>
- '///+<li>Unique name for a server (can be NIS name)</li>
- '///+<li>Port (optional, e.g. 80 for http, 21 for ftp ...)</li>
- '///+<li>Protocol (e.g. &quot;http://&quot; or &quot;ftp://&quot;</li>
- '///+<li>URL like www.mydomain.de</li>
- '///+<li>UseProxy (&quot;yes&quot;/&quot;no&quot;)</li>
- '///+<li>User (some username)</li>
- '///+<li>Password (some password, plain text!)
- '///</ul>
- '///</ol>
-
- const CFN = "hGetServerInfo::"
-
- dim irc as integer ' some integer returnvalue
- dim crc as string ' some string returnvalue
-
- ' This is the workfile. Make sure it exists and contains valid data
- dim cFile as string
- cFile = gTesttoolPath & "sun_global\input\servers.txt"
- ' cFile = gTesttoolPath & "global\input\servers.txt"
- cFile = convertpath ( cFile )
-
- ' this is a temporary list that holds the workfile
- dim acList( 50 ) as string
-
- '///<u>Description:</u>
- '///<ul>
- '///+<li>Open the file, read the section, abort on error</li>
- irc = hGetDataFileSection( cFile, acList(), sType , "" , "" )
- if ( irc = 0 ) then
- qaerrorlog( CFN & "File or section not found" )
- hGetServerInfo() = ""
- hPrintServerInstructions()
- exit function
- endif
-
- '///+<li>Isolate the key</li>
- crc = hGetValueForKeyAsString( acList(), sItem )
- if ( instr( crc , "Error:" ) > 0 ) then
- qaerrorlog( CFN & "The requested item could not be found" )
- hGetServerInfo() = ""
- hPrintServerInstructions()
- exit function
- endif
-
- '///+<li>Return the requested item</li>
-
- '///</ul>
-
- hGetServerInfo() = crc
-
-end function
-
-'*******************************************************************************
-
-function hPrintServerInstructions()
-
- printlog( "" )
- printlog( "How to configure server settings for your local network" )
- printlog( "" )
- printlog( "1. Edit the sample configuration file" )
- printlog( " Location: global/input/servers.txt" )
- printlog( " Replace servernames, ports etc. with valid entries" )
- printlog( "" )
- printlog( "2. Edit the function hGetServerInfo" )
- printlog( " Make the first line with cFile = ... a comment"
- printlog( " Make the second line with cFile = ... active"
- printlog( " Save the file" )
- printlog( "" )
-
-end function
diff --git a/testautomation/global/tools/includes/optional/t_stringtools.inc b/testautomation/global/tools/includes/optional/t_stringtools.inc
index 0fc34d89ecf6..914d8b7c6ab4 100644..100755
--- a/testautomation/global/tools/includes/optional/t_stringtools.inc
+++ b/testautomation/global/tools/includes/optional/t_stringtools.inc
@@ -33,46 +33,11 @@
function hRemoveLineBreaks( cString as string ) as string
- '///<h3>Remove linebreaks and tabs from a string</h3>
- '///<i>Used to &quot;beautify&quot; content of messageboxes when printed to the log</i><br><br>
- '///<u>Parameter(s):</u>
- '///<ol>
- '///+<li>Content of a messagebox as captured with .getText() (string)</li>
- '///</ol>
- '///<u>Returns</u>:
- '///<ol>
- '///+<li>A string without tabs, linebreaks and linefeed (string)</li>
- '///</ol>
- '///<u>Description</u>:
- '///<ul>
- '///+<li>Walk through the string, replace linebreaks, tabs etc. with spaces</li>
-
- ' Function (undocumented) to remove LF and CR from strings.
- ' When a messagebox appears with multiple lines of text this usually
- ' breaks the output of the printlog into multiple lines making it
- ' hard to read. So this function puts the entire text in one line.
-
- dim iCharPos as integer
- dim cCurrentChar as string
- dim cNewString as string
-
- ' walk through the string character by character and replace those
- ' characters that break the line. Tabs and linebreaks become spaces
- for iCharPos = 1 to len( cString )
-
- cCurrentChar = mid( cString , iCharPos , 1 )
-
- select case cCurrentChar
- case CHR$(13) : cNewString = cNewString & " " ' replace linebreak
- case CHR$(10) : ' Simply ignore linefeed
- case CHR$(09) : cNewString = cNewString & " " ' replace tab with space
- case else : cNewString = cNewString & cCurrentChar ' append char
- end select
-
- next iCharPos
-
- hRemoveLineBreaks() = cNewString
- '///</ul>
+ dim myString as string : myString = cString
+ myString = hStringReplaceChar( myString, CHR$(09), " " )
+ myString = hStringReplaceChar( myString, CHR$(13), " " )
+ myString = hStringReplaceChar( myString, CHR$(10), "" )
+ hRemoveLineBreaks() = myString
end function
@@ -101,35 +66,41 @@ function hCompareSubStrings( cRef as string, cSub as string ) as integer
'///<ul>
const CFN = "hCompareSubStrings::"
+ const RETVAL_INVALID_PARAMETER = -1
+ const RETVAL_MATCH_NONE = 0
+ const RETVAL_MATCH_EXACT = 1
+ const RETVAL_MATCH_SUBSTRING = 2
'///+<li>Test function parameters</li>
if ( ( cRef = "" ) or ( cSub = "" ) ) then
warnlog( CFN & "invalid parameter(s): Empty string passed." )
- hCompareSubStrings() = -1
+ hCompareSubStrings() = RETVAL_INVALID_PARAMETER
exit function
endif
dim irc as integer
'///+<li>Test if we have a substring</li>
- if ( instr( cRef, cSub ) > 0 ) then
- irc = 2
+ if ( instr( cRef, cSub ) ) then
+ irc = RETVAL_MATCH_SUBSTRING
else
- irc = 0
+ irc = RETVAL_MATCH_NONE
endif
'///+<li>Test if we have an exact match</li>
- if ( irc = 2 ) then
+ if ( irc = RETVAL_MATCH_SUBSTRING ) then
if ( ( cRef = cSub ) and ( len( cRef ) = len( cSub ) ) ) then
- irc = 1
+ irc = RETVAL_MATCH_EXACT
endif
endif
-
- select case irc
- case 0 : printlog( CFN & "No matching substring found" )
- case 1 : printlog( CFN & "Strings are identical" )
- case 2 : printlog( CFN & "String is substring" )
- end select
+
+ if ( GVERBOSE ) then
+ select case irc
+ case RETVAL_MATCH_NONE : printlog( CFN & "No matching substring found" )
+ case RETVAL_MATCH_EXACT : printlog( CFN & "Strings are identical" )
+ case RETVAL_MATCH_SUBSTRING : printlog( CFN & "String is substring" )
+ end select
+ endif
hCompareSubStrings() = irc
'///</ul>
@@ -162,8 +133,7 @@ function hGetDirTreeLevel( cFullPath as string ) as integer
dim iCurrentChar as integer
dim cCurrentChar as string
- dim iSeparatorCount as integer
- iSeparatorCount = 0
+ dim iSeparatorCount as integer : iSeparatorCount = 0
'///+<li>Walk through the string</li>
'///<ul>
@@ -173,9 +143,7 @@ function hGetDirTreeLevel( cFullPath as string ) as integer
cCurrentChar = mid( cFullPath , iCurrentChar , 1 )
'///+<li>If it is a separtator, increase the counter</li>
- if ( cCurrentChar = gPathSigne ) then
- iSeparatorCount = iSeparatorCount + 1
- endif
+ if ( cCurrentChar = gPathSigne ) then iSeparatorCount = iSeparatorCount + 1
next iCurrentChar
'///</ul>
@@ -232,7 +200,7 @@ function hGetStringFromStaticTextField( oControl as object ) as string
dim cCopy as string
dim cText as string
- printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
'///<u>Description:</u>
'///<ul>
@@ -250,14 +218,14 @@ function hGetStringFromStaticTextField( oControl as object ) as string
oControl.typeKeys( cCopy )
cText = getClipboardText()
- printlog( CFN & "Exit with result: " & cText )
+ if ( GVERBOSE ) then printlog( CFN & "Exit with result: " & cText )
else
ctext = ""
- qaerrorlog( CFN & "Exit: Control exists but is not visible" )
+ warnlog( CFN & "Exit: Control exists but is not visible" )
endif
else
cText = ""
- qaerrorlog( CFN & "Exit: Control does not exist in this context" )
+ warnlog( CFN & "Exit: Control does not exist in this context" )
endif
'///</ul>
@@ -304,17 +272,16 @@ function hConvertStringToLong( cValue as string ) as long
'///</ol>
const CFN = "hConvertStringToLong::"
- printlog( CFN & "Enter with option: " & cValue )
- dim brc as boolean 'a multi purpose boolean returnvalue
+ const ONE_CHARACTER = 1
- dim iLen as integer
- iLen = len( cValue )
+ if ( GVERBOSE ) then printlog( CFN & "Enter with option: " & cValue )
+
+ dim iLen as integer : iLen = len( cValue )
dim iChar as integer
dim cChar as string
- dim cStringValue as string
- cStringValue = ""
+ dim cStringValue as string : cStringValue = ""
'///<u>Description:</u>
'///<ul>
@@ -323,7 +290,7 @@ function hConvertStringToLong( cValue as string ) as long
for iChar = 1 to iLen
'///+<li>Get the current character</li>
- cChar = mid( cValue , iChar , 1 )
+ cChar = mid( cValue , iChar , ONE_CHARACTER )
'///+<li>Copy valid characters to temporary string, drop invalid, exit on first space or other character</li>
select case cChar
@@ -344,10 +311,45 @@ function hConvertStringToLong( cValue as string ) as long
next iChar
'///</ul>
- printlog( CFN & "Exit with value: " & cStringValue )
+ if ( GVERBOSE ) then printlog( CFN & "Exit with value: " & cStringValue )
'///+<li>Convert string to long integer and return to calling function</li>
hConvertStringToLong() = val( cStringValue )
'///</ul>
end function
+
+'*******************************************************************************
+
+function hStringReplace( cString as string, search_string as string, replace_with as string ) as string
+
+ const CFN = "hStringReplace(): "
+
+ dim search_string_position as string
+ dim search_string_found as boolean : search_string_found = true
+ dim len_search_string as integer : len_search_string = len( search_string )
+ dim len_replace_with as integer : len_replace_with = len( replace_with )
+ dim myString as string : myString = cString
+
+ if ( GVERBOSE ) then printlog( CFN & "Replace all <" & search_string & "> with <" & replace_with & "> in <" & myString & ">" )
+
+ if ( not instr( replace_with, search_string ) and len_search_string >= len_replace_with ) then
+ do while( search_string_found )
+ search_string_position = instr( myString, search_string )
+ if ( search_string_position > 0 ) then
+ mid( myString, search_string_position, len( search_string ), replace_with )
+ else
+ search_string_found = false
+ endif
+ loop
+ else
+ warnlog( CFN & "Function used incorrectly" )
+ warnlog( CFN & "Replace all <" & search_string & "> with <" & replace_with & "> in <" & myString & ">" )
+ warnlog( CFN & "The new string must be of equal length or shorter than the string to be replaced" )
+ warnlog( CFN & "The new string may not contain the string to be replaced (e.g. replace 'a' with 'ha' is not allowed)" )
+ endif
+
+ if ( GVERBOSE ) then printlog( CFN & "Return string is <" & myString & ">" )
+ hStringReplace() = myString
+
+end function
diff --git a/testautomation/global/tools/includes/optional/t_toolbar_calc.inc b/testautomation/global/tools/includes/optional/t_toolbar_calc.inc
deleted file mode 100644
index 30c2b7e7e11c..000000000000
--- a/testautomation/global/tools/includes/optional/t_toolbar_calc.inc
+++ /dev/null
@@ -1,300 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : helge.delfs@sun.com
-'*
-'* short description : Toolbar tools - Calc
-'*
-'***************************************************************************************
-'*
-' #0 fGetObjectCalc
-'*
-'\*************************************************************************************
-
-'*******************************************************
-'* This function will get the location for image button
-'* in Commands in Tools/Customize/Toolbars from Calc
-'*******************************************************
-function fGetObjectCalc(sToolbar as String , sObject as String) as Integer
-
- Select case sToolbar
- case "3D-Settings"
- Select case sObject
- case "Extrusion On/Off" : fGetObjectCalc = 1
- '----------------- 2
- case "Tilt Down" : fGetObjectCalc = 3
- case "Tilt Up" : fGetObjectCalc = 4
- case "Tilt Left" : fGetObjectCalc = 5
- case "Tilt Right" : fGetObjectCalc = 6
- '----------------- 7
- case "Depth" : fGetObjectCalc = 8
- case "Direction" : fGetObjectCalc = 9
- case "Lighting" : fGetObjectCalc = 10
- case "Surfact" : fGetObjectCalc = 11
- case "3D Color" : fGetObjectCalc = 12
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Align"
- Select case sObject
- case "Left" : fGetObjectCalc = 1
- case "Centered" : fGetObjectCalc = 2
- case "Right" : fGetObjectCalc = 3
- case "Top" : fGetObjectCalc = 4
- case "Center" : fGetObjectCalc = 5
- case "Bottom" : fGetObjectCalc = 6
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Basic Shapes"
- Select case sObject
- end select
-
- case "Block Arrows"
- Select case sObject
- end select
-
- case "Callouts"
- Select case sObject
- end select
-
- case "Color"
- Select case sObject
- end select
-
- case "Controls"
- Select case sObject
- end select
-
- case "Drawing"
- Select case sObject
- case "Select" : fGetObjectCalc = 1
- '----------------- 2
- case "Line" : fGetObjectCalc = 3
- case "Rectangle" : fGetObjectCalc = 4
- case "Ellipse" : fGetObjectCalc = 5
- case "Polygon" : fGetObjectCalc = 6
- case "Curve" : fGetObjectCalc = 7
- case "Freeform Line" : fGetObjectCalc = 8
- case "Arc" : fGetObjectCalc = 9
- case "Ellipse Pie" : fGetObjectCalc = 10
- case "Circle Segment" : fGetObjectCalc = 11
- case "Text" : fGetObjectCalc = 12
- case "Vertical Text" : fGetObjectCalc = 13
- case "Text Animation" : fGetObjectCalc = 14
- case "Callouts" : fGetObjectCalc = 15
- case "Vertical Callouts" : fGetObjectCalc = 16
- '----------------- 17
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Drawing Object Properties"
- Select case sObject
- case "Display Grid" : fGetObjectCalc = 21
- case "Snap to Grid" : fGetObjectCalc = 22
- case "Guides When Moving" : fGetObjectCalc = 23
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Flowchart"
- Select case sObject
- end select
-
- case "Fontwork"
- Select case sObject
- end select
-
- case "Fontwork Shape"
- Select case sObject
- end select
-
- case "Form Design"
- Select case sObject
- case "Bring to Front" : fGetObjectCalc = 14
- case "Send to Back" : fGetObjectCalc = 15
- case "Group" : fGetObjectCalc = 17
- case "UnGroup" : fGetObjectCalc = 18
- case "Enter Group" : fGetObjectCalc = 19
- case "Exit Group" : fGetObjectCalc = 20
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Form Filter"
- Select case sObject
- end select
-
- case "Form Navigation"
- Select case sObject
- end select
-
- case "Form Object"
- Select case sObject
- end select
-
- case "Formatting" :
- Select case sObject
- case "Styles and Formatting" : fGetObjectCalc = 1
- case "Apply Style" : fGetObjectCalc = 2
- '---------------------- 3
- case "Font Name" : fGetObjectCalc = 4
- '---------------------- 5
- case "Font Size" : fGetObjectCalc = 6
- '---------------------- 7
- case "Bold" : fGetObjectCalc = 8
- case "Italic" : fGetObjectCalc = 9
- case "Underline" : fGetObjectCalc = 10
- case "Underline:Double" : fGetObjectCalc = 11
- '---------------------- 12
- case "Align Left" : fGetObjectCalc = 13
- case "Align Center Horizontally" : fGetObjectCalc = 14
- case "Align Right" : fGetObjectCalc = 15
- case "Justified" : fGetObjectCalc = 16
- case "Merge Cells" : fGetObjectCalc = 17
- '---------------------- 18
- case "Left-To-Right" : fGetObjectCalc = 19
- case "Right-To-Left" : fGetObjectCalc = 20
- '---------------------- 21
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Full Screen"
- Select case sObject
- case "Full Screen" : fGetObjectCalc = 1
- end select
-
- case "Graphic Filter"
- Select case sObject
- end select
-
- case "Insert"
- Select case sObject
- case "Chart" : fGetObjectCalc = 18
- case "Insert Object" : fGetObjectCalc = 19
- case "Controls" : fGetObjectCalc = 20
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Insert Cell"
- Select case sObject
- end select
-
- case "Insert Object"
- Select case sObject
- end select
-
- case "Media Playback"
- Select case sObject
- end select
-
- case "More Controls"
- Select case sObject
- end select
-
- case "Picture"
- Select case sObject
- end select
-
- case "Standard"
- Select case sObject
- case "Load URL" : fGetObjectCalc = 1
- case "New" : fGetObjectCalc = 2
- case "New Document From Template" : fGetObjectCalc = 3
- case "Open" : fGetObjectCalc = 4
- case "Save" : fGetObjectCalc = 5
- case "Save As" : fGetObjectCalc = 6
- case "Document as E-mail" : fGetObjectCalc = 7
- '----------------- 8
- case "Edit File" : fGetObjectCalc = 9
- '----------------- 10
- case "Export Directly as PDF" : fGetObjectCalc = 11
- case "Print File Directly" : fGetObjectCalc = 12
- case "Page Rreview" : fGetObjectCalc = 13
- '----------------- 14
- case "Spellcheck" : fGetObjectCalc = 15
- case "AutoSpellcheck" : fGetObjectCalc = 16
- '----------------- 17
- case "Cut" : fGetObjectCalc = 18
- case "Copy" : fGetObjectCalc = 19
- case "Paste" : fGetObjectCalc = 20
- case "Format Paintbrush" : fGetObjectCalc = 21
- '----------------- 22
- case "Can't Undo" : fGetObjectCalc = 23
- case "Can't Restore" : fGetObjectCalc = 24
- '----------------- 25
- case "Hyperlink" : fGetObjectCalc = 26
- case "Sort Ascending" : fGetObjectCalc = 27
- case "Sort Descending" : fGetObjectCalc = 28
- '----------------- 29
- case "Insert Chart" : fGetObjectCalc = 30
- case "Show Draw Functions" : fGetObjectCalc = 31
- '----------------- 32
- case "Find & Replace" : fGetObjectCalc = 33
- case "Navigator" : fGetObjectCalc = 34
- case "Gallery" : fGetObjectCalc = 35
- case "Data Sources" : fGetObjectCalc = 36
- case "Zoom" : fGetObjectCalc = 37
- '----------------- 38
- case "StarOffice Help" : fGetObjectCalc = 39
- case "What's This?" : fGetObjectCalc = 40
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectCalc = 0
- end select
-
- case "Standard(Viewing Mode)"
- Select case sObject
- end select
-
- case "Stars and Banners"
- Select case sObject
- end select
-
- case "Symbol Shapes"
- Select case sObject
- end select
-
- case "Text Formatting"
- Select case sObject
- end select
-
- case "Tools"
- Select case sObject
- end select
-
- case "previewbar"
- Select case sObject
- end select
-
- end select
-
-end function
diff --git a/testautomation/global/tools/includes/optional/t_toolbar_impress.inc b/testautomation/global/tools/includes/optional/t_toolbar_impress.inc
deleted file mode 100644
index 433c83f23515..000000000000
--- a/testautomation/global/tools/includes/optional/t_toolbar_impress.inc
+++ /dev/null
@@ -1,290 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : helge.delfs@sun.com
-'*
-'* short description : Toolbar tools - Impress
-'*
-'***************************************************************************************
-'*
-' #0 fGetObjectImpress
-'*
-'\*************************************************************************************
-
-'*******************************************************
-'* This function will get the location for image button
-'* in Commands in Tools/Customize/Toolbars from Impress
-'*******************************************************
-function fGetObjectImpress(sToolbar as String , sObject as String) as Integer
-
- Select case sToolbar
- case "3D-Objects"
- Select case sObject
- end select
-
- case "3D-Settings"
- Select case sObject
- case "Extrusion On/Off" : fGetObjectImpress = 1
- '----------------- 2
- case "Tilt Down" : fGetObjectImpress = 3
- case "Tilt Up" : fGetObjectImpress = 4
- case "Tilt Left" : fGetObjectImpress = 5
- case "Tilt Right" : fGetObjectImpress = 6
- '----------------- 7
- case "Depth" : fGetObjectImpress = 8
- case "Direction" : fGetObjectImpress = 9
- case "Lighting" : fGetObjectImpress = 10
- case "Surfact" : fGetObjectImpress = 11
- case "3D Color" : fGetObjectImpress = 12
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectImpress = 0
- end select
-
- case "Align"
- Select case sObject
- case "Left" : fGetObjectImpress = 1
- case "Centered" : fGetObjectImpress = 2
- case "Right" : fGetObjectImpress = 3
- '----------------- 4
- case "Top" : fGetObjectImpress = 5
- case "Center" : fGetObjectImpress = 6
- case "Bottom" : fGetObjectImpress = 7
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectImpress = 0
- end select
-
- case "Arrows"
- Select case sObject
- end select
-
- case "Basic Shapes"
- Select case sObject
- end select
-
- case "Block Arrows"
- Select case sObject
- end select
-
- case "Bullets and Numbering"
- Select case sObject
- end select
-
- case "Callouts"
- Select case sObject
- end select
-
- case "Color"
- Select case sObject
- end select
-
- case "Connectors"
- Select case sObject
- end select
-
- case "Controls"
- Select case sObject
- end select
-
- case "Drawing"
- Select case sObject
- case "Select" : fGetObjectImpress = 1
- '----------------- 2
- case "Line" : fGetObjectImpress = 3
- case "Rectangle" : fGetObjectImpress = 4
- case "Ellipse" : fGetObjectImpress = 5
- case "Text" : fGetObjectImpress = 6
- case "Vertical Text" : fGetObjectImpress = 7
- '----------------- 8
- case "Curve" : fGetObjectImpress = 9
- case "Connector" : fGetObjectImpress = 10
- case "3D Objects" : fGetObjectImpress = 11
- case "Basic Shapes" : fGetObjectImpress = 12
- case "Symbol Shapes" : fGetObjectImpress = 13
- case "Block Arrows" : fGetObjectImpress = 14
- case "Flowcharts" : fGetObjectImpress = 15
- case "Callouts" : fGetObjectImpress = 16
- case "Stars" : fGetObjectImpress = 17
- '----------------- 18
- case "Points" : fGetObjectImpress = 19
- case "Glue Points" : fGetObjectImpress = 20
- case "To Curve" : fGetObjectImpress = 21
- case "To Polygon" : fGetObjectImpress = 22
- case "To 3D" : fGetObjectImpress = 23
- case "To 3D Rotation Objet" : fGetObjectImpress = 24
- '----------------- 25
- case "Fontwork Gallery" : fGetObjectImpress = 26
- case "From File" : fGetObjectImpress = 27
- case "Gallerty" : fGetObjectImpress = 28
- '----------------- 29
- case "Rotate" : fGetObjectImpress = 30
- case "Rotation and Size" : fGetObjectImpress = 31
- case "Flip" : fGetObjectImpress = 32
- case "Alignment" : fGetObjectImpress = 33
- case "Arrange" : fGetObjectImpress = 34
- '----------------- 35
- case "Insert" : fGetObjectImpress = 36
- case "Controls" : fGetObjectImpress = 37
- '----------------- 38
- case "Extrusion On/Off" : fGetObjectImpress = 39
- case "Custom Animation" : fGetObjectImpress = 40
- case "Interaction" : fGetObjectImpress = 41
- case "Animated Image" : fGetObjectImpress = 42
- case "3D Effects" : fGetObjectImpress = 43
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectImpress = 0
- end select
-
- case "Edit Points"
- Select case sObject
- end select
-
- case "Flowchart"
- Select case sObject
- end select
-
- case "Fontwork"
- Select case sObject
- end select
-
- case "Fontwork Shape"
- Select case sObject
- end select
-
- case "Form Design"
- Select case sObject
- end select
-
- case "Form Filter"
- Select case sObject
- end select
-
- case "Form Navigation"
- Select case sObject
- end select
-
- case "Full Screen"
- Select case sObject
- end select
-
- case "Gluepoints"
- Select case sObject
- end select
-
- case "Graphic Filter"
- Select case sObject
- end select
-
- case "Insert"
- Select case sObject
- case "Floating Frame" : fGetObjectImpress = 6
- case "Plug-in" : fGetObjectImpress = 8
- case "Applet" : fGetObjectImpress = 9
- case "File" : fGetObjectImpress = 11
- case "Sound" : fGetObjectImpress = 14
- case "Video" : fGetObjectImpress = 15
- end select
-
- case "OLE-Object"
- Select case sObject
- case "Wrap Left" : fGetObjectImpress = 11
- case "Wrap Right" : fGetObjectImpress = 12
- case "Optimal Page Wrap" : fGetObjectImpress = 16
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectImpress = 0
- end select
-
- case "Standard"
- Select case sObject
- case "Load URL" : fGetObjectImpress = 1
- case "New" : fGetObjectImpress = 2
- case "New Document From Template" : fGetObjectImpress = 3
- case "Open" : fGetObjectImpress = 4
- case "Save" : fGetObjectImpress = 5
- case "Save As" : fGetObjectImpress = 6
- case "Document as E-mail" : fGetObjectImpress = 7
- '----------------- 8
- case "Edit File" : fGetObjectImpress = 9
- '----------------- 10
- case "Export Directly as PDF" : fGetObjectImpress = 11
- case "Print File Directly" : fGetObjectImpress = 12
- '----------------- 13
- case "Spellcheck" : fGetObjectImpress = 14
- case "AutoSpellcheck" : fGetObjectImpress = 15
- '----------------- 16
- case "Cut" : fGetObjectImpress = 17
- case "Copy" : fGetObjectImpress = 18
- case "Paste" : fGetObjectImpress = 19
- case "Format Paintbrush" : fGetObjectImpress = 20
- '----------------- 21
- case "Can't Undo" : fGetObjectImpress = 22
- case "Can't Restore" : fGetObjectImpress = 23
- '----------------- 24
- case "Chart" : fGetObjectImpress = 25
- case "CALC" : fGetObjectImpress = 26
- case "Hyperlink" : fGetObjectImpress = 27
- '----------------- 28
- case "Display Grid" : fGetObjectImpress = 29
- '----------------- 30
- case "Navigator" : fGetObjectImpress = 31
- case "Zoom" : fGetObjectImpress = 32
- '----------------- 33
- case "StarOffice Help" : fGetObjectImpress = 34
- case "What's This?" : fGetObjectImpress = 35
- case else : QAErrorLog "The test does not support Object : " + sObject
- fGetObjectImpress = 0
- end select
-
- case "Table"
- Select case sObject
- case "Table" : fGetObjectImpress = 22
- case "Columns" : fGetObjectImpress = 23
- case "Rows" : fGetObjectImpress = 24
- end select
-
- case "Text Object"
- Select case sObject
- case "Line Spacing 1" : fGetObjectImpress = 16
- case "Line Spacing 1.5" : fGetObjectImpress = 17
- case "Line Spacing 2" : fGetObjectImpress = 18
- case "Font Color" : fGetObjectImpress = 20
- case "Left-To-Right" : fGetObjectImpress = 22
- case "Right-To-Left" : fGetObjectImpress = 23
- end select
-
- case "XML Form Design"
- Select case sObject
- case "Bring to Front" : fGetObjectImpress = 14
- case "Send to Back" : fGetObjectImpress = 15
- case "Group" : fGetObjectImpress = 17
- case "UnGroup" : fGetObjectImpress = 18
- case "Enter Group" : fGetObjectImpress = 19
- case "Exit Group" : fGetObjectImpress = 20
- end select
-
- end select
-
-end function
diff --git a/testautomation/global/tools/includes/optional/t_treelist_tools.inc b/testautomation/global/tools/includes/optional/t_treelist_tools.inc
index 36cfe7370901..0c1d17e62c91 100755
--- a/testautomation/global/tools/includes/optional/t_treelist_tools.inc
+++ b/testautomation/global/tools/includes/optional/t_treelist_tools.inc
@@ -31,8 +31,6 @@
'*
'\******************************************************************************
-private const DEBUG_ENABLE = false
-
function hGetNodeCount( oControl as object ) as integer
'///<h3>Retrieve the number of visible (open) nodes from a treelist</h3>
@@ -56,6 +54,7 @@ function hGetNodeCount( oControl as object ) as integer
const CFN = "hGetNodeCount::"
+ const RETVAL_FAILURE = 0
dim iCount as integer
'///+<li>Verify that the control exists</li>
@@ -64,15 +63,13 @@ function hGetNodeCount( oControl as object ) as integer
'///+<li>Verify that the control is enabled</li>
if ( oControl.isEnabled() ) then
- if ( DEBUG_ENABLE ) then
- printlog( CFN & "Regular access, control available and enabled" )
- endif
+ if ( GVERBOSE ) then printlog( CFN & "Regular access, control available and enabled" )
'///+<li>get the number of items from the control</li>
iCount = oControl.getItemCount()
else
printlog( CFN & "Failure: Control claims to be disabled." )
- iCount = 0
+ iCount = RETVAL_FAILURE
endif
else
try
@@ -80,12 +77,12 @@ function hGetNodeCount( oControl as object ) as integer
iCount = oControl.getItemCount()
catch
printlog( CFN & "Failure: Control not available." )
- iCount = 0
+ iCount = RETVAL_FAILURE
endcatch
endif
- if ( DEBUG_ENABLE ) then
- printlog( CFN & "Exit with nodecount = " & iCount )
- endif
+
+ if ( GVERBOSE ) then printlog( CFN & "Exit with nodecount = " & iCount )
+
hGetNodeCount = iCount
'///</ul>
@@ -111,9 +108,7 @@ function hSelectTopNode( oControl as object ) as boolean
hSelectTopNode() = false
endcatch
- if ( DEBUG_ENABLE ) then
- printlog( CFN & "Selected Node: " & oControl.getText() )
- endif
+ if ( GVERBOSE ) then printlog( CFN & "Selected Node: " & oControl.getText() )
end function
@@ -137,13 +132,9 @@ function hSelectNextNode( oControl as object ) as integer
iPosAfter = oControl.getSelIndex()
- if ( iPosAfter = iPosBefore ) then
- hSelectNextNode() = 0
- endif
+ if ( iPosAfter = iPosBefore ) then hSelectNextNode() = 0
- if ( iPosAfter = ( iPosBefore + 1 ) ) then
- hSelectnextNode() = iPosAfter
- endif
+ if ( iPosAfter = ( iPosBefore + 1 ) ) then hSelectNextNode() = iPosAfter
printlog( CFN & "Selected node: " & oControl.getText() )
@@ -179,19 +170,19 @@ function hExpandNode( oControl as object, iNode as integer ) as integer
'///<ul>
'///+<li>Returns new nodecount or 0 on error</li>
'///</ul>
-
+ const RC_FAILURE = 0
const CFN = "hExpandNode::"
dim iOldNodeCount as integer
- if ( DEBUG_ENABLE ) then
+ if ( GVERBOSE ) then
printlog( CFN & "Enter with option (Control): " & oControl.name() )
printlog( CFN & "Enter with option (iNode): " & iNode )
endif
iOldNodeCount = hGetNodeCount( oControl )
if ( iNode <= iOldNodeCount ) then
- if ( iNode > 0 ) then
+ if ( iNode > RC_FAILURE ) then
oControl.select( iNode )
endif
try
@@ -199,10 +190,10 @@ function hExpandNode( oControl as object, iNode as integer ) as integer
hExpandNode() = hGetNodeCount( oControl )
catch
warnlog( "#i84194# Treelist access failed (Keyboard navigation)" )
- hExpandNode() = 0
+ hExpandNode() = RC_FAILURE
endcatch
else
- hExpandNode() = 0
+ hExpandNode() = RC_FAILURE
endif
end function
@@ -229,7 +220,7 @@ function hExpandAllNodes( oControl as object ) as integer
iNodeRefCount = -1
iIteration = 0
- if ( DEBUG_ENABLE ) then
+ if ( GVERBOSE ) then
printlog( CFN & "Initial iNodeCurCount: " & iNodeCurCount )
printlog( CFN & "Initial iNodeRefCount: " & iNodeRefCount )
endif
@@ -245,7 +236,7 @@ function hExpandAllNodes( oControl as object ) as integer
iNodeCurCount = hGetNodeCount( oControl )
- if ( DEBUG_ENABLE ) then
+ if ( GVERBOSE ) then
printlog( "" )
printlog( CFN & "Exit iteration....: " & iIteration )
printlog( CFN & "Exit iNodeCurCount: " & iNodeCurCount )
@@ -254,7 +245,7 @@ function hExpandAllNodes( oControl as object ) as integer
loop
- if ( DEBUG_ENABLE ) then
+ if ( GVERBOSE ) then
printlog( CFN & "Exit with " & iNodeCurCount & _
" items after " & iIteration & " iterations" )
endif
@@ -282,7 +273,7 @@ function hGetVisibleNodeNames( oControl as object , lsList() as string ) as inte
dim iNodeCount as integer
dim iThisNode as integer
- printlog( CFN & "Enter" )
+ if ( GVERBOSE ) then printlog( CFN & "Enter" )
iNodeCount = hGetNodeCount( oControl )
@@ -298,7 +289,7 @@ function hGetVisibleNodeNames( oControl as object , lsList() as string ) as inte
endif
hGetVisibleNodeNames() = listcount( lsList() )
- printlog( CFN & "Exit" )
+ if ( GVERBOSE ) then printlog( CFN & "Exit" )
end function
@@ -327,6 +318,7 @@ function hSelectNodeByName( oControl as object , _name as string ) as integer
'///</ul>
const CFN = "hSelectNodeByName::"
+ const RETVAL_FAILURE = 0
dim iThisNode as integer
dim iCurrentNode as integer
@@ -334,9 +326,9 @@ function hSelectNodeByName( oControl as object , _name as string ) as integer
dim cNodeName as string
- printlog( CFN & "Enter with option (NodeName): " & _name )
+ if ( GVERBOSE ) then printlog( CFN & "Enter with option (NodeName): " & _name )
- iThisNode = 0
+ iThisNode = RETVAL_FAILURE
' First we try to jump to the node directly, if this fails we use the
' slower but safer method (expand all nodes and step through)
@@ -369,10 +361,10 @@ function hSelectNodeByName( oControl as object , _name as string ) as integer
next iCurrentNode
endcatch
- if ( iThisNode = 0 ) then
+ if ( iThisNode = RETVAL_FAILURE ) then
printlog( CFN & "Exit: Node not found." )
else
- printlog( CFN & "Exit: Node selected at pos: " & iThisNode )
+ if ( GVERBOSE ) then printlog( CFN & "Exit: Node selected at pos: " & iThisNode )
endif
hSelectNodeByName() = iThisNode
@@ -393,23 +385,17 @@ function hSelectTheLastNode( oControl as object ) as integer
const CFN = "hSelectTheLastNode::"
dim iCurrentNodeCount as integer
- printlog( CFN & "Enter with option (control): " & oControl.name() )
-
- iCurrentNodeCount = -1
-
- do while( iCurrentNodeCount < hGetNodeCount( oControl ) )
-
- iCurrentNodeCount = hGetNodeCount( oControl )
- hExpandNode( oControl, iCurrentNodeCount )
-
- if ( DEBUG_ENABLE ) then
+ iCurrentNodeCount = hExpandAllNodes( oControl )
+ if ( iCurrentNodeCount > 0 ) then
+ oControl.select( iCurrentNodeCount )
+ if ( GVERBOSE ) then
printlog( CFN & "Nodename.....: " & oControl.getText() )
printlog( CFN & "Node position: " & iCurrentNodeCount )
endif
-
- loop
+ else
+ iCurrentNodeCount = -1
+ endif
- printlog( CFN & "Exit with result: " & iCurrentNodeCount )
hSelectTheLastNode() = iCurrentNodeCount
end function
@@ -428,51 +414,6 @@ function hVerifyNodeName( oControl as object , cName as string ) as boolean
end function
-'*******************************************************************************
-
-function hWaitForTreelist( oTreeList as object, cContext as string, iItemCount as integer ) as boolean
-
- '///<h3>Wait for a treelist to get populated (java related delay)</h3>
- '///<b>IMPORTANT: Do not use unless absolutely necessary</b>
- '///+<p>Retrieve the number of items from the treelist until a specified
- '///+ number has been reached.</p>
-
- const CFN = "hWaitForTreelist::"
- dim iTry as integer
- dim iObjects as integer
- dim brc as boolean
-
- brc = false
- iTry = 0
-
- kontext cContext
-
- qaerrorlog( CFN & "Stupid function, do not use" )
-
- iObjects = 0
- do while ( iObjects < iItemCount )
-
- iTry = iTry + 1
- iObjects = hGetNodeCount( oTreeList )
-
- if ( iObjects >= iItemCount ) then
- brc = true
- exit do
- endif
-
- ' Failsafe mechanism
- if ( iTry = 10 ) then
- qaerrorlog( CFN & "Requested number of items never reached" )
- brc = false
- exit do
- endif
-
- loop
-
- hWaitForTreelist() = brc
-
-end function
-
'******************************************************************************
function hGetListItems( oControl as object, aList() as string ) as integer
@@ -484,8 +425,9 @@ function hGetListItems( oControl as object, aList() as string ) as integer
'///</ul>
const CFN = "hGetListItems::"
+ const RETVAL_FAILURE = 0
- printlog( CFN & "Enter with option (control): " & oControl.name() )
+ if ( GVERBOSE ) then printlog( CFN & "Enter with option (control): " & oControl.name() )
dim iItemCount as integer
dim iCurrentItem as integer
@@ -494,7 +436,7 @@ function hGetListItems( oControl as object, aList() as string ) as integer
iItemCount = oControl.getItemCount()
if ( iItemCount > ubound( aList() ) ) then
printlog( CFN & "Array too small, needed: " & iItemCount )
- hGetListItems() = 0
+ hGetListItems() = RETVAL_FAILURE
exit function
endif
@@ -506,8 +448,29 @@ function hGetListItems( oControl as object, aList() as string ) as integer
next iCurrentItem
- printlog( CFN & "Exit with number of items: " & iItemCount )
+ if ( GVERBOSE ) then printlog( CFN & "Exit with number of items: " & iItemCount )
hGetListItems() = iItemCount
end function
+'*******************************************************************************
+
+function hFindInList( oControl as object, cObject as string ) as integer
+
+ const RETVAL_FAILURE = 0
+ dim iCurrentObject as integer
+
+ for iCurrentObject = 1 to oControl.getItemCount()
+
+ oControl.select( iCurrentObject )
+
+ if ( oControl.getSelText() = cObject ) then
+ hFindInList() = iCurrentObject
+ exit function
+ endif
+
+ next iCurrentObject
+
+ hFindInList() = RETVAL_FAILURE
+
+end function \ No newline at end of file
diff --git a/testautomation/global/tools/includes/optional/t_ui_filters.inc b/testautomation/global/tools/includes/optional/t_ui_filters.inc
index 0b22b8a94141..b76765e05069 100644
--- a/testautomation/global/tools/includes/optional/t_ui_filters.inc
+++ b/testautomation/global/tools/includes/optional/t_ui_filters.inc
@@ -99,8 +99,7 @@ function hGetFilterGroup( api_filters() as string, ui_filters() as string )
dim iCurrentFilter as integer
- dim iFilterCount as integer
- iFilterCount = ubound( api_filters() )
+ dim iFilterCount as integer : iFilterCount = ubound( api_filters() )
dim iAPIfilterList as integer
@@ -115,9 +114,11 @@ function hGetFilterGroup( api_filters() as string, ui_filters() as string )
if ( oFilter( iAPIFilterList ).Name = "UIName" ) then
ui_filters( iCurrentFilter ) = oFilter( iAPIFilterList ).Value()
- 'printlog( CFN & "DEBUG: Index (iCurrentFilter): " & iCurrentFilter )
- 'printlog( CFN & "DEBUG: API Filter: " & api_filters( iCurrentFilter ) )
- 'printlog( CFN & "DEBUG: UI Filter.: " & ui_filters( iCurrentFilter ) )
+ if ( GVERBOSE ) then
+ 'printlog( CFN & "DEBUG: Index (iCurrentFilter): " & iCurrentFilter )
+ 'printlog( CFN & "DEBUG: API Filter: " & api_filters( iCurrentFilter ) )
+ 'printlog( CFN & "DEBUG: UI Filter.: " & ui_filters( iCurrentFilter ) )
+ endif
endif
next iAPIFilterList
diff --git a/testautomation/global/tools/includes/optional/t_user_info.inc b/testautomation/global/tools/includes/optional/t_user_info.inc
index eed58aa7d530..7ad00b9e539e 100644
--- a/testautomation/global/tools/includes/optional/t_user_info.inc
+++ b/testautomation/global/tools/includes/optional/t_user_info.inc
@@ -34,7 +34,8 @@
function hCheckForAdministratorPermissions() as boolean
' this function returns TRUE if the user can create files in the office
- ' program directory
+ ' program directory. This is relevant for macro security (VBA compatibility)
+ ' and extension manager behavior (access to shared installations).S
dim iFile as integer
dim cProbeFile as string
@@ -42,13 +43,14 @@ function hCheckForAdministratorPermissions() as boolean
cProbeFile = convertpath( gNetzOfficePath & "program/tt_probe_file" )
try
iFile = FreeFile
- open cProbeFile for output as iFile : close iFile
- kill cProbeFile
+ open cProbeFile for output as iFile
+ close( iFile )
+ kill( cProbeFile )
hCheckForAdministratorPermissions() = true
- printlog( "Current user has administrator rights" )
+ printlog( "Current user has administrator permissions" )
catch
hCheckForAdministratorPermissions() = false
- printlog( "Current user does not have administrator rights" )
+ printlog( "Current user does not have administrator permissions" )
endcatch
end function
diff --git a/testautomation/global/tools/includes/required/t_dir.inc b/testautomation/global/tools/includes/required/t_dir.inc
index 0c7d887825f7..04c4bd8956f9 100644..100755
--- a/testautomation/global/tools/includes/required/t_dir.inc
+++ b/testautomation/global/tools/includes/required/t_dir.inc
@@ -31,55 +31,6 @@
'*
'\************************************************************************
-function hFileExists ( Dat as String ) as Boolean
- '/// Checks if a file exists
- '/// <u>Input</u>: Filename with complete path
- '/// <u>Return</u>: TRUE or FALSE if the file exists.
- if app.Dir ( Dat ) = "" then
- hFileExists = FALSE
- else
- hFileExists = TRUE
- end if
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hDirectoryExists ( Verz as String ) as Boolean
- '/// Checks if a directory exists
- '/// <u>Input</u>: Directory with complete path
- '/// <u>Return</u>: TRUE or FALSE if the directory exists.
- ' at the end of the string has to be teh path seperator, else the dir-command doesn't work
- if right ( Verz, 1 ) <> gPathSigne then Verz = Verz + gPathsigne
- if app.Dir ( Verz, 16 ) = "" then
- hDirectoryExists = FALSE
- else
- hDirectoryExists = TRUE
- end if
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hKillFile ( Dat as String ) as Boolean
- '/// Delete a file
- '/// <u>Input</u>: File with complete path
- '/// <u>Return</u>: TRUE or FALSE success on deleting?
- if app.Dir ( Dat ) <> "" then
- try
- app.kill ( Dat )
- catch
- endcatch
- if app.Dir ( Dat ) <> "" then
- hKillFile = FALSE
- else
- hKillFile = TRUE
- end if
- else
- hKillFile = TRUE
- end if
-end function
-'
-'-------------------------------------------------------------------------------
-'
function DirNameList (ByVal sPfad$ , lsDirName() as String ) as Integer
'/// seperate a path in its parts
'/// <u>Input</u>: Path to seperate; Empty list, because it get's reset in this function!;
@@ -293,45 +244,8 @@ end function
'
'-------------------------------------------------------------------------------
'
-function PfadExtract ( sFiledat$ ) as string
- '/// Get the path from a file
- '/// <u>Input</u>: file with path
- '/// <u>Return</u>: path without the filename
- Dim s$ : Dim i% : Dim k%
- dim ls(25) as String
-
- s$ = ""
- i% = DirNameList( sFileDat$, ls() )
- k% = 2
- do until K%>=i%
- ls( 1 ) = ls( 1 ) + ls(k%)
- k% = k% +1
- loop
- PfadExtract = Left( ls(1), Len(ls( 1 ))-1)
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hPfadname (Dateipfad$) as string
- '/// Get the path from a file
- '/// <u>Input</u>: file with path
- '/// <u>Return</u>: path without the filename
- dim wh as integer
-
- for wh = len(Dateipfad$) to 1 step -1
- if mid(Dateipfad$,wh,1) = gPathSigne then
- hpfadname = left(Dateipfad$,wh)
- exit for
- else
- hpfadname = Dateipfad$
- end if
- next wh
-end function
-'
-'-------------------------------------------------------------------------------
-'
function DateiExtract ( sFileDat$ )
- '/// Get the filename from a path
+ '/// Get the filename from a path
'/// <u>Input</u>: path with file
'/// <u>Return</u>: filename without the path
Dim i%
diff --git a/testautomation/global/tools/includes/required/t_dirloc.inc b/testautomation/global/tools/includes/required/t_dirloc.inc
deleted file mode 100644
index d8bef397c74b..000000000000
--- a/testautomation/global/tools/includes/required/t_dirloc.inc
+++ /dev/null
@@ -1,288 +0,0 @@
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : thorsten.bosbach@sun.com
-'*
-'* short description : functions for directories and files; execution happens in the testtool
-'*
-'\************************************************************************
-
-function hFileExistsLocal ( Dat as String ) as Boolean
- '/// Checks if a file exists
- '/// <u>Input</u>: Filename with complete path
- '/// <u>Return</u>: TRUE or FALSE if the file exists.
- if Dir ( Dat ) = "" then
- hFileExistsLocal = FALSE
- else
- hFileExistsLocal = TRUE
- end if
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hDirectoryExistsLocal ( Verz as String ) as Boolean
- '/// Checks if a directory exists
- '/// <u>Input</u>: Directory with complete path
- '/// <u>Return</u>: TRUE or FALSE if the directory exists.
- ' at the end of the string has to be teh path seperator, else the dir-command doesn't work
- if right ( Verz, 1 ) <> gPathSigne then Verz = Verz + gPathSigne
- if Dir ( Verz, 16 ) = "" then
- hDirectoryExistsLocal = FALSE
- else
- hDirectoryExistsLocal = TRUE
- end if
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hKillFileLocal ( Dat as String ) as Boolean
- '/// Delete a file
- '/// <u>Input</u>: File with complete path
- '/// <u>Return</u>: TRUE or FALSE success on deleting?
- if Dir ( Dat ) <> "" then
- try
- kill ( Dat )
- catch
- endcatch
- if Dir ( Dat ) <> "" then
- hKillFileLocal = FALSE
- else
- hKillFileLocal = TRUE
- end if
- else
- hKillFileLocal = TRUE
- end if
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function DirNameListLocal (ByVal sPfad$ , lsDirName() as String ) as Integer
- '/// seperate a path in its parts
- '/// <u>Input</u>: Path to seperate; Empty list, because it get's reset in this function!;
- '/// <u>Return</u>: Number on entries in the list; list with entries
- Dim i%
- Dim Pos%
-
- lsDirName(0) = 0
- do
- Pos% = InStr(1, sPfad$, "\") ' got a path
- i% = Val(lsDirName(0) ) + 1
- lsDirName(0) = i%
- lsDirName( i% ) = Left( sPfad$, Pos% ) ' .. put in list
- sPfad = Mid( sPfad$, Pos% + 1 ) ' ...cut off
- loop while Pos%>0
- lsDirName( i% ) = sPfad$
- DirNameListLocal = i% ' count of
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function GetFileNameListLocal ( sPath$, sMatch$ ,lsFile() as String ) as integer
- '/// Get files from a directory that match the pattern and append them to a list (without path)
- '/// <u>Input</u>: Directory with complete path; Search Pattern, e.g *.*; List
- '/// <u>Return</u>: count of appended entries; updated list
- Dim Count%
- Dim Datname as String
-
- Count% = 0
-
- if right ( sPath$, 1 ) <> gPathSigne then sPath$ = sPath$ + gPathSigne
- ' at the end of the string has to be teh path seperator, else the dir-command doesn't work
- Datname = Dir( sPath$ + sMatch$ , 0)
-
- do until Len(Datname) = 0
- Count% = Count% + 1
- lsFile(Count%) = Datname ' append
- lsFile(0) = Count%
- Datname = Dir
- loop
-
- GetFileNameListLocal = Count% ' all files
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function GetFileListLocal ( sPath$, sMatch$ ,lsFile() as String ) as integer
- '/// Get files from a directory that match the pattern and append them to a list (<b>with</b> path)
- '/// <u>Input</u>: Directory with complete path; Search Pattern, e.g *.*; List
- '/// <u>Return</u>: count of appended entries; updated list
- Dim Count%
- Dim Datname as String
-
- Count% = 0
-
- if right ( sPath$, 1 ) <> gPathSigne then sPath$ = sPath$ + gPathSigne
- ' at the end of the string has to be teh path seperator, else the dir-command doesn't work
- Datname = Dir( sPath$ + sMatch$ , 0)
-
- do until Len(Datname) = 0
- lsFile(0) = Val(lsFile(0)) + 1
- lsFile( lsFile(0) ) =sPath$ + Datname
- Count% = Count% + 1
- Datname = Dir
- loop
- GetFileListLocal = Count%
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function GetDirListLocal ( sPath$, sMatch$ ,lsFile() as String ) as integer
- '/// Get Subdirectories from a directory and append them to a list (<b>with</b> path)
- '/// <u>Input</u>: Directory with complete path; Search Pattern, e.g *; List
- '/// <u>Return</u>: count of appended entries; updated list
- Dim Count%
- Dim Verzeichnis as String
-
- if right ( sPath$, 1 ) <> gPathSigne then sPath$ = sPath$ + gPathSigne
- ' at the end of the string has to be teh path seperator, else the dir-command doesn't work
- Verzeichnis = Dir( sPath$ + sMatch$ , 16)
- Count% = 0
-
- do until Len(Verzeichnis) = 0
- if Verzeichnis <>"." AND Verzeichnis <> ".." then
- lsFile(0) = Val(lsFile(0)) + 1
- lsFile( lsFile(0) ) = sPath$ + Verzeichnis + gPathSigne
- Count% = Count% + 1
- end if
- Verzeichnis = Dir
- loop
-
- GetDirListLocal = Count%
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function GetAllDirListLocal ( byVal sPath$, byVal sMatch$ ,lsFile() as String ) as integer
- '/// Get all directorys recursiv that match the pattern and append them to a list
- '/// <u>Input</u>: Directory with complete path; Search Pattern, e.g *; Empty list, because it get's reset in this function!;
- '/// <u>Return</u>: Count of appended entries (1. entry is the whole path); updated list
- Dim Count% : Dim DirCount%
-
- DirCount% = 1 ' dummy
- Count% = 1
- lsFile(0) = 1 'new list
- lsFile(1) = sPath$ 'first path is the calling path
-
- do until Count%>Val(lsFile(0)) ' get first generation
- DirCount% = GetDirListLocal ( lsFile(Count%) , sMatch$, lsFile() ) ' append all subdirectories
- Count% = Count% +1
- loop
-
- GetAllDirListLocal = Count% - 1 ' count of listelements
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function GetAllFileListLocal ( byVal sPath$, byVal sMatch$ ,lsFile() as String ) as integer
- '/// Get all Files recursiv (including in subdirectories) that match the pattern and append them to a list
- '/// <u>Input</u>: Directory with complete path; Search Pattern, e.g *.*; Empty list, because it get's reset in this function!;
- '/// <u>Return</u>: Count of appended entries (1. entry is the whole path); updated list
- Dim DirCount% : Dim FileCount% : Dim Count%
- Dim lsDir(1000) as String
-
- DirCount% = GetAllDirListLocal ( sPath$, "*", lsDir() ) ' just all directories
- FileCount% = 0
- lsFile(0) = 1
- lsFile(1) = sPath$
-
- For Count% = 1 to Val( lsDir(0) )
- FileCount% = FileCount% + GetFileListLocal ( lsDir( Count% ), sMatch$, lsFile() )
- next Count%
-
- GetAllFileListLocal = FileCount% ' count of files
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function KillFileListLocal ( lsList() as String ) as Boolean
- '/// Delete all files in the list
- '/// <u>Input</u>: List with files
- '/// <u>Return</u>: TRUE or FALSE if files are killed; modified list with not deleted files.
- Dim i as Integer
- Dim FehlerListe ( 1000 ) as String
-
- FehlerListe ( 0 ) = 0
- for i=1 to ListCount ( lsList() )
- try
- kill ( lsList(i) )
- catch
- ListAppend ( FehlerListe (), lsList(i) )
- endcatch
- next i
-
- lsList(0) = 0 ' delete old list
- KillFileListLocal = TRUE
- for i=1 to ListCount ( FehlerListe () )
- KillFileListLocal = FALSE
- ListAppend ( lsList(), FehlerListe (i) )
- next i
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function KillDirListLocal ( lsList() as String ) as Boolean
- '/// Delete all directories in the list
- '/// <u>Input</u>: List with directories
- '/// <u>Return</u>: TRUE or FALSE if directories are killed; modified list with not deleted directories.
- Dim i as Integer
- Dim FehlerListe ( 1000 ) as String
-
- FehlerListe ( 0 ) = 0
- for i=1 to ListCount ( lsList() )
- try
- rmDir ( lsList(i) )
- catch
- ListAppend ( FehlerListe (), lsList(i) )
- endcatch
- next i
-
- lsList(0) = 0 ' delete old list
- KillDirListLocal = TRUE
- for i=1 to ListCount ( FehlerListe () )
- KillDirListLocal = FALSE
- ListAppend ( lsList(), FehlerListe (i) )
- next i
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function GetFileSizesLocal ( lsList() as String ) as long
- '/// Computes the total Filesize of the files in the list
- '/// <u>Input</u>: List with files
- '/// <u>Return</u>: Filesize in bytes
- Dim iSum
- Dim i as Integer
-
- iSum = 0
- for i=1 to ListCount ( lsList() )
- try
- iSum = iSum + FileLen ( lsList(i) )
- catch
- endcatch
- next i
-
- GetFileSizesLocal = iSum
-end function
diff --git a/testautomation/global/tools/includes/required/t_doc1.inc b/testautomation/global/tools/includes/required/t_doc1.inc
index ed74336dfc72..61c6afadab03 100644
--- a/testautomation/global/tools/includes/required/t_doc1.inc
+++ b/testautomation/global/tools/includes/required/t_doc1.inc
@@ -34,7 +34,6 @@
sub hNewDocument ( optional bANewDoc )
'/// hNewDocument : open a new document dependent on 'gApplication' ///'
dim sTemp as string
- gApplication = gApplication
if IsMissing ( bANewDoc ) <> TRUE then
if bANewDoc = TRUE then
@@ -52,10 +51,10 @@ sub hNewDocument ( optional bANewDoc )
else
FileOpen "FileName", "private:factory/swriter", "FrameName", "_default", "SynchronMode", TRUE
end if
- if ( DocumentWriter.IsMax() = false ) then
- DocumentWriter.Maximize()
- Wait( 2000 )
- end if
+ if ( DocumentWriter.IsMax() = false ) then
+ DocumentWriter.Maximize()
+ Wait( 2000 )
+ end if
case "CALC"
Kontext "DocumentCalc"
if gNoNewDoc = TRUE then
@@ -63,10 +62,10 @@ sub hNewDocument ( optional bANewDoc )
else
FileOpen "FileName", "private:factory/scalc", "FrameName", "_default", "SynchronMode", TRUE
end if
- if ( DocumentCalc.IsMax() = false ) then
- DocumentCalc.Maximize()
- Wait( 2000 )
- end if
+ if ( DocumentCalc.IsMax() = false ) then
+ DocumentCalc.Maximize()
+ Wait( 2000 )
+ end if
case "IMPRESS"
Kontext "DocumentImpress"
if gNoNewDoc = TRUE then
@@ -84,10 +83,10 @@ sub hNewDocument ( optional bANewDoc )
end if
Kontext "DocumentImpress"
Sleep 2
- if ( DocumentImpress.IsMax() = false ) then
- DocumentImpress.Maximize()
- Wait( 2000 )
- end if
+ if ( DocumentImpress.IsMax() = false ) then
+ DocumentImpress.Maximize()
+ Wait( 2000 )
+ end if
end if
case "DRAW"
Kontext "DocumentDraw"
@@ -96,10 +95,10 @@ sub hNewDocument ( optional bANewDoc )
else
FileOpen "FileName", "private:factory/sdraw", "FrameName", "_default", "SynchronMode", TRUE
end if
- if ( DocumentDraw.IsMax() = false ) then
- DocumentDraw.Maximize()
- Wait( 2000 )
- end if
+ if ( DocumentDraw.IsMax() = false ) then
+ DocumentDraw.Maximize()
+ Wait( 2000 )
+ end if
case "MASTERDOCUMENT"
Kontext "DocumentMasterDoc"
if gNoNewDoc = TRUE then
@@ -111,10 +110,10 @@ sub hNewDocument ( optional bANewDoc )
sleep (1)
if Navigator.Exists(5) then Navigator.Close
Kontext "DocumentMasterDoc"
- if ( DocumentMasterDoc.IsMax() = false ) then
- DocumentMasterDoc.Maximize()
- Wait( 2000 )
- end if
+ if ( DocumentMasterDoc.IsMax() = false ) then
+ DocumentMasterDoc.Maximize()
+ Wait( 2000 )
+ end if
case "MATH"
Kontext "DocumentMath"
if gNoNewDoc = TRUE then
@@ -123,10 +122,10 @@ sub hNewDocument ( optional bANewDoc )
FileOpen "FileName", "private:factory/smath", "FrameName", "_default", "SynchronMode", TRUE
end if
Kontext "DocumentMath"
- if ( DocumentMath.IsMax() = false ) then
- DocumentMath.Maximize()
- Wait( 2000 )
- end if
+ if ( DocumentMath.IsMax() = false ) then
+ DocumentMath.Maximize()
+ Wait( 2000 )
+ end if
case "HTML"
Kontext "DocumentWriterWeb"
if gNoNewDoc = TRUE then
@@ -135,10 +134,10 @@ sub hNewDocument ( optional bANewDoc )
FileOpen "FileName", "private:factory/swriter/web", "FrameName", "_default", "SynchronMode", TRUE
end if
Kontext "DocumentWriterWeb"
- if ( DocumentWriterWeb.IsMax() = false ) then
- DocumentWriterWeb.Maximize()
- Wait( 2000 )
- end if
+ if ( DocumentWriterWeb.IsMax() = false ) then
+ DocumentWriterWeb.Maximize()
+ Wait( 2000 )
+ end if
case "DATABASE"
FileOpen "FileName", "private:factory/sdatabase?Interactive", "FrameName", "_default", "SynchronMode", TRUE
Kontext "DatabaseWizard"
@@ -189,37 +188,55 @@ end sub
'-------------------------------------------------------------------------------
'
function hCreateLabels() as Boolean
- '/// hCreateLabels : open the tab-dialog for making a new lable (file/new/lable) ///'
- FileOpen "FileName", "private:factory/swriter?slot=21051", "FrameName", "_default", "SynchronMode", TRUE
- Sleep (2)
+
+ hCreateLabels() = false
+
+ FileOpen( "FileName", "private:factory/swriter?slot=21051", "FrameName", "_default", "SynchronMode", TRUE )
+
Kontext
- Active.Setpage TabEtiketten
- Kontext "TabEtiketten"
- if Not TabEtiketten.Exists then
- Warnlog "Dialog for Labels is not up!"
- hCreateLabels = False
+ if ( Active.exists( 5 ) ) then
+ Active.setPage TabEtiketten
+
+ if ( TabEtiketten.exists( 1 ) ) then
+ if ( Tabetiketten.isVisible() ) then
+ hCreateLabels() = true
+ else
+ warnlog( "<TabEtiketten> is not visible" )
+ endif
+ else
+ warnlog( "<TabEtiketten> not open" )
+ endif
else
- hCreateLabels = True
+ warnlog( "Failed to open <TabEtiketten>" )
endif
- Sleep (2)
+
end function
'
'-------------------------------------------------------------------------------
'
function hCreateBusinessCards() as Boolean
- '/// hCreateBusinessCards : open the tab-dialog for making a new business card (file/new/business cards) ///'
- FileOpen "FileName", "private:factory/swriter?slot=21052", "FrameName", "_default", "SynchronMode", TRUE
- Sleep (2)
+
+ hCreateBusinessCards() = false
+
+ FileOpen( "FileName", "private:factory/swriter?slot=21052", "FrameName", "_default", "SynchronMode", TRUE )
+
Kontext
- Active.Setpage TabEtikettenMedium
- Kontext "TabEtikettenMedium"
- if Not TabEtikettenMedium.Exists then
- Warnlog "Dialog for BusinessCards is not up!"
- hCreateBusinessCards = False
+ if ( Active.exists( 5 ) ) then
+ Active.setPage TabEtikettenMedium
+
+ if ( TabEtikettenMedium.exists( 1 ) ) then
+ if ( TabetikettenMedium.isVisible() ) then
+ hCreateBusinessCards() = true
+ else
+ warnlog( "<TabEtikettenMedium> is not visible" )
+ endif
+ else
+ warnlog( "<TabEtikettenMedium> not open" )
+ endif
else
- hCreateBusinessCards = True
+ warnlog( "Failed to open <TabEtikettenMedium>" )
endif
- Sleep (2)
+
end function
'
'-------------------------------------------------------------------------------
@@ -231,301 +248,206 @@ function hCloseDocument()
'/// Accept to lose changes'
Kontext "Active"
- if Active.Exists(2) then
+ if ( Active.Exists( 2 ) ) then
try
Active.No
catch
- Active.Click ( 202 )
+ Active.Click( 202 )
endcatch
end if
-
+
'/// Wait for FileClose to complete'
WaitSlot( 2000 )
-
+
end function
'
'-------------------------------------------------------------------------------
'
-sub gMouseClick ( X%, Y%, optional mb% )
- '/// gMouseClick ( x_Position, y-Position ) : make a mouseclick on the document (dependent on 'gApplication') ///'
- '/// default left mousebutton will be used otherwise you can optionally give the mousebutton to press
- '/// 1 = left mouse button
- '/// 2 = left mouse button
- '/// 3 = left mouse button
+sub gMouseClick ( X%, Y%, optional _mousebutton )
- gApplication = gApplication
+ dim oDocument as object
+ dim mousebutton as integer
- if IsMissing(mb%) then mb% = 1
+ ' Handle infamous optional parameter
+ if ( IsMissing( _mousebutton ) ) then
+ mousebutton = 1
+ else
+ mousebutton = _mousebutton
+ endif
- select case gApplication
- case "BACKGROUND"
- Kontext "BACKGROUND"
- autoexecute = false
- Desktop.MouseDown ( X%, Y%, mb% )
- Desktop.MouseUp ( X%, Y%, mb% )
- autoexecute = true
- case "CALC"
- Kontext "DocumentCalc"
- autoexecute = false
- DocumentCalc.MouseDown ( X%, Y%, mb% )
- DocumentCalc.MouseUp ( X%, Y%, mb% )
- autoexecute = true
- case "DRAW"
- Kontext "DocumentDraw"
- autoexecute=false
- DocumentDraw.MouseDown ( X%, Y%, mb% )
- DocumentDraw.MouseUp ( X%, Y%, mb% )
- autoexecute=true
- case "WRITER"
- Kontext "DocumentWriter"
- autoexecute=false
- DocumentWriter.MouseDown ( X%, Y%, mb% )
- DocumentWriter.MouseUp ( X%, Y%, mb% )
- autoexecute=true
- case "HTML"
- Kontext "DocumentWriterWeb"
- autoexecute=false
- DocumentWriterWeb.MouseDown ( X%, Y%, mb% )
- DocumentWriterWeb.MouseUp ( X%, Y%, mb% )
- autoexecute=true
- case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- autoexecute=false
- DocumentMasterDoc.MouseDown ( X%, Y%, mb% )
- DocumentMasterDoc.MouseUp ( X%, Y%, mb% )
- autoexecute=true
- case "IMPRESS"
- Kontext "DocumentImpress"
- autoexecute=false
- DocumentImpress.MouseDown ( X%, Y%, mb% )
- DocumentImpress.MouseUp ( X%, Y%, mb% )
- autoexecute=true
- case "MATH"
- Kontext "DocumentMath"
- autoexecute=false
- DocumentMath.MouseDown ( X%, Y%, mb% )
- DocumentMath.MouseDown ( X%, Y%, mb% )
- autoexecute=true
- case "CHART"
- Kontext "DocumentChart"
- autoexecute=false
- DocumentChart.MouseDown ( X%, Y%, mb% )
- DocumentChart.MouseUp ( X%, Y%, mb% )
- autoexecute=true
- end select
- sleep (2)
+ hSetDocumentContext() ' set kontext to current document type
+ oDocument = hSetDocumentObject() ' get the current document object
+
+ autoexecute = false
+ oDocument.MouseDown ( X%, Y%, mousebutton )
+ oDocument.MouseUp ( X%, Y%, mousebutton )
+ autoexecute = true
+ wait( 1000 )
+
end sub
'
'-------------------------------------------------------------------------------
'
sub gMouseDoubleClick ( X%, Y% )
- '/// gMouseDoubleClick ( x_Position, y-Position ) : make a mouse-doubleclick on the document ( dependent on 'gApplication' ) ///'
- gApplication = gApplication
- select case gApplication
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.MouseDoubleClick ( X%, Y% )
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.MouseDoubleClick ( X%, Y% )
- case "BACKGROUND"
- Kontext "BACKGROUND"
- Desktop.MouseDoubleClick ( X%, Y% )
- case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.MouseDoubleClick ( X%, Y% )
- case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.MouseDoubleClick ( X%, Y% )
- case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.MouseDoubleClick ( X%, Y% )
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.MouseDoubleClick ( X%, Y% )
- case "MATH"
- Kontext "DocumentMath"
- DocumentMath.MouseDoubleClick ( X%, Y% )
- end select
- Sleep (2)
+ dim oDocument as object
+
+ hSetDocumentContext() ' set kontext to current document type
+ oDocument = hSetDocumentObject() ' get the current document object
+ oDocument.MouseDoubleClick ( X%, Y% )
+ wait( 1000 )
+
end sub
'
'-------------------------------------------------------------------------------
'
sub gMouseMove ( BeginX%, BeginY%, EndX%, EndY% )
- '/// gMouseMove ( BeginX, BeginY, EndX, EndY ) : make a mousemove trom Bx,By to Ex,Ey on the document ( dependent on 'gApplication' ) ///'
- gApplication = gApplication
- select case gApplication
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.MouseDown ( BeginX%, BeginY% )
- DocumentCalc.MouseMove ( EndX%, EndY%)
- DocumentCalc.MouseUp ( EndX%, EndY% )
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.MouseDown ( BeginX%, BeginY% )
- DocumentDraw.MouseMove ( EndX%, EndY% )
- DocumentDraw.MouseUp ( EndX%, EndY% )
- case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.MouseDown ( BeginX%, BeginY% )
- DocumentWriter.MouseMove ( EndX%, EndY%)
- DocumentWriter.MouseUp ( EndX%, EndY% )
- case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.MouseDown ( BeginX%, BeginY% )
- DocumentWriterWeb.MouseMove ( EndX%, EndY%)
- DocumentWriterWeb.MouseUp ( EndX%, EndY% )
- case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.MouseDown ( BeginX%, BeginY% )
- DocumentMasterDoc.MouseMove ( EndX%, EndY%)
- DocumentMasterDoc.MouseUp ( EndX%, EndY% )
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.MouseDown ( BeginX%, BeginY% )
- DocumentImpress.MouseMove ( EndX%, EndY%)
- DocumentImpress.MouseUp ( EndX%, EndY% )
- case "MATH"
- Kontext "DocumentMath"
- DocumentMath.MouseDown ( BeginX%, BeginY% )
- DocumentMath.MouseMove ( EndX%, EndY%)
- DocumentMath.MouseDown ( EndX%, EndY% )
- end select
- Sleep (2)
+ dim oDocument as object
+
+ hSetDocumentContext() ' set kontext to current document type
+ oDocument = hSetDocumentObject() ' get the current document object
+ oDocument.MouseDown ( BeginX%, BeginY% )
+ oDocument.MouseMove ( EndX%, EndY%)
+ oDocument.MouseUp ( EndX%, EndY% )
+ wait( 1000 )
+
end sub
'
'-------------------------------------------------------------------------------
'
sub gMouseDown ( BeginX%, BeginY% )
- '/// gMouseDown ( x_Position, y-Position ) : make a mousedown on the document (dependent on 'gApplication') ///'
- '///+ DON'T FORGETT to call gMouseUp ! ///'
- gApplication = gApplication
- select case gApplication
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.MouseDown ( BeginX%, BeginY% )
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.MouseDown ( BeginX%, BeginY% )
- case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.MouseDown ( BeginX%, BeginY% )
- case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.MouseDown ( BeginX%, BeginY% )
- case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.MouseDown ( BeginX%, BeginY% )
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.MouseDown ( BeginX%, BeginY% )
- case "MATH"
- Kontext "DocumentMath"
- DocumentMath.MouseDown ( BeginX%, BeginY% )
- end select
- Sleep (2)
+ dim oDocument as object
+
+ hSetDocumentContext() ' set kontext to current document type
+ oDocument = hSetDocumentObject() ' get the current document object
+ oDocument.MouseDown ( BeginX%, BeginY% )
+ wait( 300 )
+
end sub
'
'-------------------------------------------------------------------------------
'
sub gMouseMove2 ( EndX%, EndY% )
- '/// gMouseMove2 ( x_Position, y-Position ) : move the pointer to position on the document (dependent on 'gApplication') ///'
- gApplication = gApplication
- select case gApplication
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.MouseMove ( EndX%, EndY%)
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.MouseMove ( EndX%, EndY% )
- case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.MouseMove ( EndX%, EndY%)
- case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.MouseMove ( EndX%, EndY%)
- case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.MouseMove ( EndX%, EndY%)
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.MouseMove ( EndX%, EndY%)
- case "MATH"
- Kontext "DocumentMath"
- DocumentMath.MouseMove ( EndX%, EndY%)
- end select
- Sleep (2)
+ dim oDocument as object
+
+ hSetDocumentContext() ' set kontext to current document type
+ oDocument = hSetDocumentObject() ' get the current document object
+ oDocument.MouseMove ( EndX%, EndY%)
+ wait( 300 )
+
end sub
'
'-------------------------------------------------------------------------------
'
sub gMouseUp ( EndX%, EndY% )
- '/// gMouseUp ( x_Position, y-Position ) : make a release button on the document (dependent on 'gApplication') ///'
- gApplication = gApplication
- select case gApplication
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.MouseUp ( EndX%, EndY% )
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.MouseUp ( EndX%, EndY% )
- case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.MouseUp ( EndX%, EndY% )
- case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.MouseUp ( EndX%, EndY% )
- case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.MouseUp ( EndX%, EndY% )
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.MouseUp ( EndX%, EndY% )
- case "MATH"
- Kontext "DocumentMath"
- DocumentMath.MouseUp ( EndX%, EndY% )
- end select
- Sleep (2)
+ dim oDocument as object
+
+ hSetDocumentContext() ' set kontext to current document type
+ oDocument = hSetDocumentObject() ' get the current document object
+ oDocument.MouseUp ( EndX%, EndY% )
+ wait( 300 )
+
end sub
'
'-------------------------------------------------------------------------------
'
-sub hTypeKeys ( OutputText , optional iLoop as Integer )
- '/// hTypeKeys ( OutputText , optional iLoop as Integer ): type the keys in 'outputtext' 'iLoop' times ///'
- Dim i as integer
-
- If IsMissing(iLoop) = True then iLoop = 1
- For i = 1 to iLoop
- Select Case Ucase(gApplication)
- Case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys OutputText
- Case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.TypeKeys OutputText
- Case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.TypeKeys OutputText
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.TypeKeys OutputText
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.TypeKeys OutputText
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.TypeKeys OutputText
- case "MATH"
- Kontext "DocumentMath"
- DocumentMath.TypeKeys OutputText
- end select
- wait 500
- next i
+sub hTypeKeys ( OutputText , optional _iLoop as Integer )
+
+ dim iRepeat as integer
+ dim iLoop as integer
+ dim oDocument as object
+
+ ' Handle infamous optional parameter
+ If ( IsMissing( _iLoop ) ) then
+ iLoop = 1
+ else
+ iLoop = _iLoop
+ endif
+
+ hSetDocumentContext() ' set kontext to current document type
+ oDocument = hSetDocumentObject() ' Get the document object we want to write to
+
+ for iRepeat = 1 to iLoop
+ oDocument.TypeKeys( OutputText )
+ wait( 200 )
+ next iRepeat
+
end sub
+'*******************************************************************************
+
+function hSetDocumentContext() as string
+
+ ' link gApplication to its document kontext
+
+ dim cDocumentContext as string
+
+ select case( gApplication )
+ case "DRAW" : cDocumentContext = "DocumentDraw"
+ case "IMPRESS" : cDocumentContext = "DocumentImpress"
+ case "WRITER" : cDocumentContext = "DocumentWriter"
+ case "CALC" : cDocumentContext = "DocumentCalc"
+ case "MATH" : cDocumentContext = "DocumentMath"
+ case "HTML" : cDocumentContext = "DocumentWriterWeb"
+ case "MASTERDOCUMENT" : cDocumentContext = "DocumentMasterDoc"
+ case "CHART" : cDocumentContext = "DocumentChart"
+ case "BACKGROUND" : cDocumentContext = "Background"
+ case else : warnlog( "Unknown gApplication: " & gApplication )
+ end select
+
+ kontext cDocumentContext : hSetDocumentContext() = cDocumentContext
+
+end function
+
+'*******************************************************************************
+
+function hSetDocumentObject() as object
+
+ ' link gApplication to its document object
+
+ dim oDocumentObject as object
+
+ select case( gApplication )
+ Case "WRITER" : oDocumentObject = DocumentWriter
+ Case "MASTERDOCUMENT" : oDocumentObject = DocumentMasterDoc
+ Case "HTML" : oDocumentObject = DocumentWriterWeb
+ case "CALC" : oDocumentObject = DocumentCalc
+ case "DRAW" : oDocumentObject = DocumentDraw
+ case "IMPRESS" : oDocumentObject = DocumentImpress
+ case "MATH" : oDocumentObject = DocumentMath
+ case "CHART" : oDocumentObject = DocumentChart
+ case "BACKGROUND" : oDocumentObject = Desktop
+ case else : warnlog( "Unknown gApplication: " & gApplication )
+ end select
+
+ hSetDocumentObject() = oDocumentObject
+
+end function
+
+'*******************************************************************************
+
+function hSetDocumentFactory() as string
+
+ ' link gApplication to its factory as used by FileOpen slot
+
+ dim cDocumentFactory as string
+
+ select case( gApplication )
+ case "DRAW" : cDocumentFactory = "private:factory/sdraw"
+ case "IMPRESS" : cDocumentFactory = "private:factory/simpress"
+ case "WRITER" : cDocumentFactory = "private:factory/swriter"
+ case "CALC" : cDocumentFactory = "private:factory/scalc"
+ case "MATH" : cDocumentFactory = "private:factory/smath"
+ case "HTML" : cDocumentFactory = "private:factory/swriter/web"
+ case "MASTERDOCUMENT" : cDocumentFactory = "private:factory/swriter/GlobalDocument"
+ case "DATABASE" : cDocumentFactory = "private:factory/sdatabase?Interactive"
+ case else : warnlog( "Unknown gApplication: " & gApplication )
+ end select
+
+ hSetDocumentFactory() = cDocumentFactory
+
+end function \ No newline at end of file
diff --git a/testautomation/global/tools/includes/required/t_doc2.inc b/testautomation/global/tools/includes/required/t_doc2.inc
index efd2d2799a0e..4941d0fcf7ad 100755
--- a/testautomation/global/tools/includes/required/t_doc2.inc
+++ b/testautomation/global/tools/includes/required/t_doc2.inc
@@ -31,35 +31,34 @@
'*
'\***********************************************************************
-private const VERBOSE = TRUE
-
sub hTabelleEinfuegen
'/// <b>WRITER only </b>///'
'/// hTabelleEinfuegen hInsertTable ///'
'/// insert a dummy table in writer/writerweb/masterdocument ///'
TableInsertTable
- sleep(2)
+
Kontext "TabelleEinfuegenWriter"
- wait 500
- TabelleEinfuegenWriter.OK
- sleep(1)
-
- Kontext "TableObjectbar"
- sleep(1)
- if TableObjectbar.NotExists then
- Kontext "TextObjectbar"
- TextObjectbar.SetNextToolBox
- end if
+ if ( TabelleEinfuegenWriter.exists( 2 ) ) then
+
+ hCloseDialog( TabelleEinfuegenWriter, "ok" )
+
+ Kontext "TableObjectbar"
+ if ( TableObjectbar.exists( 1 ) ) then
+ ' We are happy then, do nothing
+ else
+ Kontext "TextObjectbar"
+ TextObjectbar.SetNextToolBox
+ end if
+
+ select case ( gApplication )
+ Case "WRITER" : Kontext "DocumentWriter"
+ Case "MASTERDOCUMENT" : Kontext "DocumentMasterDoc"
+ Case "HTML" : Kontext "DocumentWriterWeb"
+ end select
+ else
+ warnlog( "hTabelleEinfuegen: Failed to open <TabelleEinfuegenWriter> dialog" )
+ endif
- select case uCASE(gApplication)
- Case "WRITER"
- Kontext "DocumentWriter"
- Case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- Case "HTML"
- Kontext "DocumentWriterWeb"
- end select
- sleep(1)
end sub
'
'-------------------------------------------------------------------------------
@@ -109,14 +108,48 @@ sub SchreibenInMathdok ( Eingabe as String )
warnlog "--No Clipboard available :-(--"
printlog "---ClipTest--- should: "+Eingabe +", is: "+GetClipboard
endif
- EditPaste
- sleep(3)
+ hUseAsyncSlot( "EditPaste" )
end sub
'
'-------------------------------------------------------------------------------
'
+function hEnableDocumentEditMode() as boolean
+
+ hEnableDocumentEditMode() = false
+
+ dim iTry as integer
+
+ printlog( "Try to switch document to edit mode" )
+ for iTry = 1 to 20
+ try
+ kontext "Standardbar"
+ if ( Bearbeiten.getState( 2 ) <> 1 ) then
+ Bearbeiten.click()
+
+ kontext "Active"
+ if ( Active.exists( 1 ) ) then
+ printlog( "Handle <Use copy message>" )
+ hCloseDialog( Active, "yes" )
+ wait( 2000 )
+ printlog( "Successfully switched to edit mode" )
+ hEnableDocumentEditMode() = true
+ exit for
+ endif
+ endif
+ catch
+ wait( 200 )
+ endcatch
+ next iTry
+
+end function
+
+'*******************************************************************************
+
function sMakeReadOnlyDocumentEditable() as boolean
+ sMakeReadOnlyDocumentEditable() = hEnableDocumentEditMode()
+ exit function
+
' Function returns TRUE if document has been made editable and FALSE if
' no action was required (that is: Document was not read-only)
@@ -124,22 +157,22 @@ function sMakeReadOnlyDocumentEditable() as boolean
dim iWait as integer
dim rc as integer
const CFN = "sMakeReadOnlyDocumentEditable::"
-
- if ( VERBOSE ) then printlog( CFN & "Making document editable (create a copy) if it is readonly" )
-
+
+ if ( GVERBOSE ) then printlog( CFN & "Making document editable (create a copy) if it is readonly" )
+
' We still run into synchronization problems with the "Make document editable" feature
- ' because we do not know when this button becomes available and ready for use: The
+ ' because we do not know when this button becomes available and ready for use: The
' document has to be loaded, then we have to wait for the toolbar to get populated.
' One thing appears to work though: Try to execute the slot using hUseAsyncSlot.
' This is a little bit tricky because the state of the document is altered but if
' the slot has been executed once we know for sure that the button on the toolbar is
' available and can check its state and - if need be - chenge the document state back.
-
+
' ========== Workaround begin ==========
hUseAsyncSlot( "EditDoc" )
kontext "Active"
if ( Active.exists() ) then
- if ( VERBOSE ) then printlog( "Handling create copy message" )
+ if ( GVERBOSE ) then printlog( "Handling create copy message" )
Active.yes()
wait( 1000 )
endif
@@ -153,12 +186,12 @@ function sMakeReadOnlyDocumentEditable() as boolean
exit do
endif
catch
- if ( VERBOSE ) then printlog "Attempt " & iWait & " to make document readable failed"
+ if ( GVERBOSE ) then printlog "Attempt " & iWait & " to make document readable failed"
iWait = iWait + 1
wait ( 1000 )
endcatch
else
- if ( VERBOSE ) then printlog "Attempt " & iWait & " to make document readable failed"
+ if ( GVERBOSE ) then printlog "Attempt " & iWait & " to make document readable failed"
iWait = iWait + 1
wait ( 1000 )
end if
@@ -166,26 +199,26 @@ function sMakeReadOnlyDocumentEditable() as boolean
Loop
if ( Bearbeiten.IsEnabled() ) then
-
+
if ( Bearbeiten.getState( 2 ) = 0 ) then
-
+
rc = hUseAsyncSlot("editdoc")
if ( rc >= 0 ) then
for iTry = 1 to 2
-
-
+
+
Kontext "Active"
if ( Active.exists( 5 ) ) then
-
+
printlog( CFN & "Messagebox: " & Active.getText() )
-
+
try
- if ( VERBOSE ) then printlog( CFN & "Document was read-only. A copy will be used." )
+ if ( GVERBOSE ) then printlog( CFN & "Document was read-only. A copy will be used." )
Active.Yes()
- if ( VERBOSE ) then printlog( CFN & "Closed 'use copy' message" )
+ if ( GVERBOSE ) then printlog( CFN & "Closed 'use copy' message" )
catch
- if ( VERBOSE ) then printlog( CFN & "Probing for unexpected messagebox..." )
+ if ( GVERBOSE ) then printlog( CFN & "Probing for unexpected messagebox..." )
active.ok()
qaerrorlog( "#i100701 - Object not found message" )
endcatch
@@ -198,13 +231,13 @@ function sMakeReadOnlyDocumentEditable() as boolean
printlog( CFN & "Document appears to be editable" )
endif
else
- if ( VERBOSE ) then printlog( CFN & "Button <Bearbeiten> is pressed, document is editable" )
+ if ( GVERBOSE ) then printlog( CFN & "Button <Bearbeiten> is pressed, document is editable" )
sMakeReadOnlyDocumentEditable() = FALSE
endif
else
- if ( VERBOSE ) then printlog( CFN & "Control <Bearbeiten> is not enabled" )
+ if ( GVERBOSE ) then printlog( CFN & "Control <Bearbeiten> is not enabled" )
endif
-
+
end function
'
'-------------------------------------------------------------------------------
@@ -215,16 +248,20 @@ function fSelectFirstOLE() as integer
'+ 0 := Sucess
'- 1 := unknown application
- dim bNavigatorWasVisible as boolean
- bNavigatorWasVisible = FALSE
- dim iIndex
+ const RETVAL_SUCCESS = 0
+ const RETVAL_UNKNOWN_APPLICATION = -1
+
+ const MAX_WAIT_FOR_NAVIGATOR = 10
+
+ dim bNavigatorWasVisible as boolean : bNavigatorWasVisible = FALSE
+ dim iIndex as integer
- fSelectFirstOLE = -1
+ fSelectFirstOLE() = RETVAL_UNKNOWN_APPLICATION
- select case uCASE(gApplication)
+ select case ( gApplication )
case "CALC" : Kontext "NavigatorCalc"
'First check if Navigator is visible and remember result
- if NavigatorCalc.exists (10) then
+ if NavigatorCalc.exists ( MAX_WAIT_FOR_NAVIGATOR ) then
bNavigatorWasVisible = TRUE
else
try
@@ -240,7 +277,7 @@ function fSelectFirstOLE() as integer
endcatch
end if
Kontext "NavigatorCalc"
- if NavigatorCalc.exists (10) then
+ if NavigatorCalc.exists ( MAX_WAIT_FOR_NAVIGATOR ) then
'Select first OLE in list
Liste.TypeKeys "<HOME>"
for iIndex = 1 to 8
@@ -252,12 +289,12 @@ function fSelectFirstOLE() as integer
Liste.select(6)
Liste.TypeKeys "+"
Liste.TypeKeys "<DOWN><RETURN>"
- fSelectFirstOLE = 0
+ fSelectFirstOLE() = RETVAL_SUCCESS
else
QAErrorLog "Navigator couldn't be opened!"
end if
case "DRAW" , "IMPRESS" : Kontext "NavigatorDraw"
- if NavigatorDraw.Exists(10) then
+ if NavigatorDraw.Exists( MAX_WAIT_FOR_NAVIGATOR ) then
bNavigatorWasVisible = TRUE
else
try
@@ -272,21 +309,21 @@ function fSelectFirstOLE() as integer
ViewNavigator
endcatch
Kontext "NavigatorDraw"
- if NavigatorDraw.exists(10) then
+ if NavigatorDraw.exists( MAX_WAIT_FOR_NAVIGATOR ) then
'Select first OLE in list
Liste.TypeKeys "<HOME>"
Liste.select(1)
Liste.TypeKeys "+<DOWN><RETURN>"
- fSelectFirstOLE = 0
+ fSelectFirstOLE() = RETVAL_SUCCESS
else
- QAErrorLog "Navigator did not occoured!"
+ QAErrorLog "Navigator did not open!"
end if
end if
case "WRITER" , "HTML" , "MASTERDOCUMENT" :
- select case uCASE(gApplication)
+ select case ( gApplication )
case "MASTERDOCUMENT" : Kontext "NavigatorGlobalDoc"
- if NavigatorGlobalDoc.Exists(10) then
+ if NavigatorGlobalDoc.Exists( MAX_WAIT_FOR_NAVIGATOR ) then
bNavigatorWasVisible = TRUE
else
ViewNavigator
@@ -299,7 +336,7 @@ function fSelectFirstOLE() as integer
endif
case else : Kontext "NavigatorWriter"
'First check if Navigator is visible and remember result
- if NavigatorWriter.Exists (10) then
+ if NavigatorWriter.Exists ( MAX_WAIT_FOR_NAVIGATOR ) then
bNavigatorWasVisible = TRUE
else
try
@@ -317,7 +354,7 @@ function fSelectFirstOLE() as integer
end if
end select
Kontext "NavigatorWriter"
- if NavigatorWriter.Exists(10) then
+ if NavigatorWriter.Exists( MAX_WAIT_FOR_NAVIGATOR ) then
' Check if all content is visible
if Auswahlliste.GetItemCount < 2 then
Inhaltsansicht.Click
@@ -329,7 +366,7 @@ function fSelectFirstOLE() as integer
next iIndex
Auswahlliste.select(5)
Auswahlliste.TypeKeys "+<DOWN><RETURN>"
- fSelectFirstOLE = 0
+ fSelectFirstOLE() = RETVAL_SUCCESS
else
QAErrorLog "Navigator did not occoured!"
end if
@@ -340,7 +377,7 @@ function fSelectFirstOLE() as integer
if bNavigatorWasVisible = TRUE then
printlog "Leaving navigator open as initially found"
else
- if fSelectFirstOLE = 0 then
+ if ( fSelectFirstOLE = RETVAL_SUCCESS ) then
ViewNavigator
printlog "Closing navigator as initially found"
else
diff --git a/testautomation/global/tools/includes/required/t_files.inc b/testautomation/global/tools/includes/required/t_files.inc
index 0736de15debf..42b575c1187a 100644..100755
--- a/testautomation/global/tools/includes/required/t_files.inc
+++ b/testautomation/global/tools/includes/required/t_files.inc
@@ -31,328 +31,125 @@
'*
'\******************************************************************************
-private const VERBOSE = FALSE ' set to TRUE for debugging
+function hGrafikEinfuegen( cFile as string ) as Boolean
-function hGrafikEinfuegen ( Grafik$ ) as Boolean
- '/// hGrafikEinfuegen hGraphicInsert
- '/// A graphic will be inserted (not linked).
- '/// <u>Input</u>: Filename with complete path
- '/// <u>Return</u>: TRUE or FALSE if the graphic could be inserted or not.
+ hGrafikEinfuegen() = hInsertGraphic( cFile, "Static" )
+ exit function
+
+end function
- Dim DieDatei as String
- Dim IsActive as Boolean
+'*******************************************************************************
- DieDatei = ConvertPath ( Grafik$ )
+function hGrafikVerknuepftEinfuegen( cFile as string ) as Boolean
- InsertGraphicsFromFile
- WaitSlot()
+ hGrafikVerknuepftEinfuegen() = hInsertGraphic( cFile, "Linked" )
+ exit function
- Kontext
- If Active.Exists(1) then
- warnlog " Hinweis: " & Active.GetText
- Active.Ok
- End If
+end function
+'*******************************************************************************
- Kontext "GrafikEinfuegenDlg"
- if ( GrafikEinfuegenDlg.exists( 2 ) ) then
+function hInsertGraphic( byval cFile as string, byval cMode as string ) as boolean
- Vorschau.Uncheck
- if gApplication <> "HTML" then
- Verknuepfen.UnCheck
- end if
+ ' Insert a graphic file to the current document either linked or static
+ ' cFile: Fully qualified path to the file to be inserted
+ ' cMode: Supply "Linked" to link, empty string or anything else is static
- Dateiname.SetText DieDatei
- DateiTyp.Select 1 ' set the filter to 'all formats'
- Oeffnen.Click
+ ' In difference to the older functions (GrafikEinfuegen etc.) this function
+ ' does provide a working returnvalue and does not secretly hide warnings and
+ ' errors. It does not set the file type.
- Kontext "Active"
- if Active.Exists(2) then
- Warnlog " Hinweis: " & Active.GetText
- try
- Active.OK
- catch
- try
- Active.Yes
- catch
- Active.Cancel
- endcatch
- endcatch
- Kontext "GrafikEinfuegenDlg"
- if GrafikEinfuegenDlg.Exists then
- GrafikEinfuegenDlg.Cancel
- GarfikEinfuegenDlg.notExists( 4 )
- endif
- else
- hGrafikEinfuegen = IsImageLoaded
- end if
- else
- warnlog( "Insert graphics dialog not open" )
- endif
-
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hGrafikVerknuepftEinfuegen ( Grafik$ ) as Boolean
- '/// hGrafikEinfuegenEinfuegen hGraphicInsertLinked
- '/// A graphic will be inserted <b>LINKED</b>
- '/// <u>Input</u>: Filename with complete path
- '/// <u>Return</u>: TRUE or FALSE if the graphic could be inserted or not.
- Dim DieDatei as String
- Dim IsActive as Boolean
-
- DieDatei = ConvertPath ( Grafik$ )
-
- InsertGraphicsFromFile
- WaitSlot()
-
- Kontext
- If Active.Exists(1) then
- warnlog " Hinweis: " & Active.GetText
- Active.Ok
- End If
- Kontext "GrafikEinfuegenDlg"
- if ( GrafikEinfuegenDlg.exists( 1 ) ) then
-
- Vorschau.UnCheck
- if gApplication <> "HTML" AND gApplication <> "HTML" then
- Verknuepfen.Check
- end if
+ ' Make hFileWait() complain about any messageboxes
+ const SHOW_WARNINGS = true
- Dateiname.SetText DieDatei
- DateiTyp.Select 1 ' set the filter to 'all formats'
- Oeffnen.Click
+ ' Find out whether we link the file or not
+ dim bLinked as boolean : bLinked = false
+ if ( lcase( cMode ) = "linked" ) then bLinked = true
- Kontext "Active"
- if Active.Exists(2) then
- Warnlog " Hinweis: " + Active.GetText
- try
- Active.OK
- catch
- Active.Yes
- endcatch
- Kontext "GrafikEinfuegenDlg"
- if GrafikEinfuegenDlg.Exists then
- GrafikEinfuegenDlg.Cancel
+ hInsertGraphic() = false
+ cFile = convertpath( cFile )
+
+ if ( FileExists( cFile ) ) then
+ InsertGraphicsFromFile
+
+ kontext "GrafikEinfuegenDlg"
+ if ( GrafikEinfuegenDlg.exists( 3 ) ) then
+
+ Vorschau.unCheck()
+ if ( Verknuepfen.isEnabled() ) then
+ if ( bLinked ) then
+ Verknuepfen.check()
+ else
+ Verknuepfen.unCheck()
+ endif
endif
+
+ DateiName.setText( cFile )
+ Oeffnen.click()
+
+ if ( hFileWait( SHOW_WARNINGS ) >= 0 ) then hInsertGraphic() = true
+
else
- hGrafikVerknuepftEinfuegen = IsImageLoaded
- end if
+ warnlog( "hInsertGraphic(): Failed to open <Insert Graphics> dialog" )
+ endif
else
- 'GrafikEinfuegenDlg not open
+ warnlog( "hInsertGraphic(): File does not exist: " & cFile )
endif
+
end function
-'
-'-------------------------------------------------------------------------------
-'
-function IsItSaved as boolean
- '/// IsItSaved
- '/// Wait until document is saved.
- Dim iLoop as integer
- IsItSaved = FALSE
- sleep(3)
- for iLoop =1 to 20
- try
- 'Calling slot 'IsDocSaving'
- IsItSaved = IsDocSaving
- catch
- IsItSaved = FALSE
- endcatch
+'*******************************************************************************
- if IsItSaved = TRUE then
- exit for
- end if
- sleep(1)
- next iLoop
- sleep(2)
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function IsItLoaded as boolean
- '/// IsItLoaded
- '/// Wait until document is loaded
- Dim iLoop as integer
+function hIsNamedDocLoaded( cFileName as string ) as boolean
- IsItLoaded = FALSE
- sleep(3)
- for iLoop =1 to 20
- try
- 'Calling slot 'IsDocLoading'
- IsItLoaded = IsDocLoading
- catch
- IsItLoaded = FALSE
- endcatch
+ ' Retrieve the current filename from the document properties - which in
+ ' comparision to the old approach to retrive the name from the file save
+ ' dialog - gives us the file including its extension. So we only need
+ ' to compare the last characters from a full path to be relatively
+ ' certain that we work with the correct file. There is some small margin of
+ ' error, though.
- if IsItLoaded = TRUE then
- exit for
- end if
- sleep(1)
- next iLoop
- sleep(2)
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hIsNamedDocLoaded (ShouldFile as String, optional bSilent as boolean) as Boolean
- dim sTemp as string
- '/// hIsNamedDocLoaded ///'
- '/// !fails always if a template is loaded, because you have to set a new filename in the save-dialog -> not usable in this case ! ///'
- '/// Input: name of loaded file; Output: True/False ///'
- '///+' if a doc got loaded, the filename in a 'SaveAs' Dlg is different from "" ///
- '///+' usually the file name of the loaded document with an changed extension chosen from SO ///
-
- if (isMissing(bSilent)) then
- bSilent = False
- endif
+ const CFN = "global::tools::includes::required::hIsNamedDocumentLoaded(): "
+ const RC_FAILURE = -1
- hIsNamedDocLoaded = FALSE ' Let's start WorstCase :-(
- FileSaveAs
- Kontext "SpeichernDlg"
- If DateiOhneExt(DateiExtract(Dateiname.GetSelText)) = DateiOhneExt(DateiExtract(ShouldFile)) Then
- hIsNamedDocLoaded = True
- Else
- sTemp = left(right(ShouldFile,2),1) ' get the 2nd last character ' vor;dot;sti;pot;std;xlt
- if (((sTemp="o") or (sTemp="t") or (sTemp="l")) and ((left(right(ShouldFile,4),1)=".") or (left(right(ShouldFile,5),1)="."))) then
- hIsNamedDocLoaded = TRUE ' exception! for linux! and MS-Office Templates
- else
- if ((Dateiname.GetSeltext = "") and not bSilent) then
- Warnlog "Default filename is empty!"+left(right(ShouldFile,3),1)
+ dim cDocumentName as string
+ dim iDocumentNameLength as integer
+
+ hIsNamedDocLoaded() = false
+
+ if ( hUseAsyncSlot( "FileProperties" ) <> RC_FAILURE ) then
+
+ kontext "TabDokument"
+ if ( TabDokument.exists( 2 ) ) then
+
+ cDocumentName = DokumentName.getText()
+ iDocumentNameLength = len( cDocumentName )
+
+ if ( GVERBOSE ) then
+ printlog( CFN & "Expected file: " & cFileName )
+ printlog( CFN & "Current file.: " & cDocumentName )
+ printlog( CFN & "Comparing last " & iDocumentNameLength & " characters" )
endif
- endif
- End If
- SpeichernDlg.Cancel
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function IsImageLoaded
- '/// IsImageLoaded
- '/// Wait until images in document are loaded
- Dim i% : Dim Herbert as Boolean
- Sleep 3
- for i%=1 to 20
- try
- Herbert = IsDocImageLoading
- catch
- Herbert = FALSE
- endcatch
- if Herbert = TRUE then
- i%=100
+ if ( right( cFileName, iDocumentNameLength ) = cDocumentName ) then
+ if ( GVERBOSE ) then printlog( CFN & "This is the expected file" )
+ hIsNamedDocLoaded() = true
+ else
+ if ( GVERBOSE ) then printlog( CFN & "This is *not* the expected file" )
+ endif
+
+ hCloseDialog( TabDokument, "cancel" )
+ else
+ warnlog( CFN & "Unable to open dialog <Document Properties>" )
endif
- Sleep (1)
- next i%
- if i<100 then
- IsImageLoaded = FALSE
- else
- IsImageLoaded = TRUE
- end if
-end function
-'
-'-------------------------------------------------------------------------------
-'
-sub hIsWebPageLoaded as boolean
- 'Author: Joerg Sievers
- '/// If a document in StarOffice Writer is loaded all 9 items in the
- '///+ statusbar are visible otherwise not.
- '///+ This sub checks the state of these items.
- Dim i as integer
- Dim iGibtdenStatusraus as integer
- printlog "- global::tools::inc::tfiles.inc::hIsWebPageLoaded"
- hIsWebPageLoaded = FALSE
- for i = 1 to 20
- Kontext "DocumentWriter"
- if DocumentWriter.Exists(3) then
- 'Count the items on the status bar.
- iGibtdenStatusraus = DocumentWriter.StatusGetItemCount
- 'There are nine items on the status bar if the web page has been loaded.
- if iGibtdenStatusraus = 9 then
- hIsWebPageLoaded = TRUE
- exit for
- end If
- end if
- WaitSlot( 3000 )
- next i
-end sub
-'
-'-------------------------------------------------------------------------------
-'
-sub hSys2IntDlg
- '/// Change from system to StarOffice-internal file-dialog (only for Win32)
- if gPlatgroup <> "unx" then
- Call hhSysToInt ( TRUE )
- endif
- gUseSysDlg = FALSE
-end sub
-'
-'-------------------------------------------------------------------------------
-'
-sub hInt2SysDlg
- '/// Change from StarOffice-internal to system file-dialog (only for Win32)
- if gPlatgroup <> "unx" then
- Call hhSysToInt ( FALSE )
- endif
- gUseSysDlg = TRUE
-end sub
-'
-'-------------------------------------------------------------------------------
-'
-sub hhSysToInt ( bwhats as Boolean )
- '/// subroutine for <i>hSys2IntDlg</i> and </i>hInt2SysDlg</i>
- ToolsOptions
- hToolsOptions ( "StarOffice", "General" )
- if bwhats = TRUE then
- StarOfficeDialogeBenutzen.Check
else
- StarOfficeDialogeBenutzen.Uncheck
- end if
- Sleep 1
- Kontext "OptionenDlg"
- OptionenDlg.OK
- WaitSlot( 3000 )
-end sub
-'
-'-------------------------------------------------------------------------------
-'
-function hGetUsedFilter () as string
- '/// Get used filter for loaded file.
- try
- FileSaveAs
- Kontext "SpeichernDlg"
- hGetUsedFilter = dateityp.getseltext
- SpeichernDlg.Cancel
- catch
- hGetUsedFilter = "Not possible; try/catch fail in function"
- endcatch
-end function
-'
-'-------------------------------------------------------------------------------
-'
-function hFileExport (sName as string, sFilter as string) as boolean
- '/// Wrapper function to simplify the use of the export functions, just give a filename and export format.
- '///+ INPUT:<ul><li>sName: filename</li><li>sFilter: &quot;PDF&quot;: call export for PDF</li></ul>
- '///+ RETURN: execution success?
- select case sFilter
- case "PDF" : '/// use the function 'hExportAsPDF' with RECOMMENDED values /// '
- hFileExport = hExportAsPDFmulti (3, TRUE, sName, FALSE, TRUE, 1, 1)
- end select
- kontext
- if active.exists(5) then
- try
- printlog active.getText
- active.ok
- warnLog "i26820 - errormessage about saving"
- catch
- printlog "pdf unexpected error in hFileExport()"
- endcatch
+ warnlog( CFN & "Unable to execute slot <FileProperties>" )
endif
+
end function
-'
-'-------------------------------------------------------------------------------
-'
+
+'*******************************************************************************
+
function hExportAsPDFmulti (iTypeOfCall as integer, bExecute as boolean, sFileName as string, bAutoExtension as boolean, bOverwriteFile as boolean, iRange as integer, iConpression as integer, optional sRange as string) as boolean
'/// Export a document to PDF with various options.
'///+ INPUT
@@ -633,6 +430,12 @@ end function
'
'-------------------------------------------------------------------------------
'
+function hFileDelete( cFileOrig as string ) as boolean
+ hFileDelete() = hDeleteFile( cFileOrig )
+end function
+'
+'-------------------------------------------------------------------------------
+'
function hDeleteFile( cFileOrig as string ) as boolean
const CFN = "global::tools::includes::required::t_files.inc::hDeleteFile():"
@@ -665,7 +468,7 @@ function hDeleteFile( cFileOrig as string ) as boolean
warnlog( CFN & "File was not deleted: " & cFile )
hDeleteFile() = false
else
- if ( VERBOSE ) then printlog( CFN & "File successfully deleted: " & cFile )
+ if ( GVERBOSE ) then printlog( CFN & "File successfully deleted: " & cFile )
hDeleteFile() = true
endif
catch
@@ -698,8 +501,8 @@ function hFileOpen( cFile as string ) as boolean
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
hFileOpen() = FALSE
- const CFN = "global::tools::inc::t_files.inc::hFileOpen():"
- if ( VERBOSE ) then printlog( CFN & "Load: " & sFile )
+ const CFN = "global::tools::inc::t_files.inc::hFileOpen(): "
+ if ( GVERBOSE ) then printlog( CFN & "Load: " & sFile )
FileOpen( "URL", sFile, "FrameName", "_default" )
if ( hFileWait( FALSE ) >= 0 ) then hFileOpen() = TRUE
@@ -715,9 +518,9 @@ function hFileOpenSpecial( cFile as string, cFlag as string ) as boolean
' cFlag = <Any other string> treats string as password
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
- const CFN = "global::tools::inc::t_files.inc::hFileOpenSpecial():"
+ const CFN = "global::tools::inc::t_files.inc::hFileOpenSpecial(): "
hFileOpenSpecial() = FALSE
- if ( VERBOSE ) then printlog( "Load (Flag): " & sFile & " (" & cFlag & ")" )
+ if ( GVERBOSE ) then printlog( "Load (Flag): " & sFile & " (" & cFlag & ")" )
select case( lcase( cFlag ) )
case "readonly"
@@ -740,9 +543,9 @@ end function
function hFileOpenWithFilter( cFile as string, cFilter as string )
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
- const CFN = "global::tools::inc::t_files.inc::hFileOpenWithFilter():"
+ const CFN = "global::tools::inc::t_files.inc::hFileOpenWithFilter(): "
hFileOpenWithFilter() = FALSE
- if ( VERBOSE ) then printlog( CFN & "Load (Filter): " & sFile & " (" & cFilter & ")" )
+ if ( GVERBOSE ) then printlog( CFN & "Load (Filter): " & sFile & " (" & cFilter & ")" )
FileOpen( "URL", sFile, "FrameName", "_default", "FilterName", cFilter )
if ( hFileWait( FALSE ) >= 0 ) then hFileOpenWithFilter() = TRUE
@@ -752,9 +555,9 @@ end function
'
function hFileSave() as boolean
- const CFN = "global::tools::inc::t_files.inc::hFileSave():"
+ const CFN = "global::tools::inc::t_files.inc::hFileSave(): "
hFileSave() = FALSE
- if ( VERBOSE ) then printlog( CFN & "Save file." )
+ if ( GVERBOSE ) then printlog( CFN & "Save file." )
FileSave( "SynchronMode", TRUE )
if ( hFileWait( TRUE ) >= 0 ) then hFileSave() = TRUE
@@ -765,9 +568,9 @@ end function
function hFileSaveAs( cFile as string ) as boolean
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
- const CFN = "global::tools::inc::t_files.inc::hFileSaveAs():"
+ const CFN = "global::tools::inc::t_files.inc::hFileSaveAs(): "
hFileSaveAs() = FALSE
- if ( VERBOSE ) then printlog( CFN & "Save: " & sFile )
+ if ( GVERBOSE ) then printlog( CFN & "Save: " & sFile )
FileSaveAs( "URL", sFile, "Overwrite", FALSE )
if ( hFileWait( TRUE ) >= 0 ) then hFileSaveAs() = TRUE
@@ -778,9 +581,9 @@ end function
function hFileSaveAsKill( cFile as string ) as boolean
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
- const CFN = "global::tools::inc::t_files.inc::hFileSaveAsKill():"
+ const CFN = "global::tools::inc::t_files.inc::hFileSaveAsKill(): "
hFileSaveAsKill() = FALSE
- if ( VERBOSE ) then printlog( CFN & "Save, replacing: " & sFile )
+ if ( GVERBOSE ) then printlog( CFN & "Save, replacing: " & sFile )
FileSaveAs( "URL", sFile, "Overwrite", TRUE )
if ( hFileWait( TRUE ) >= 0 ) then hFileSaveAsKill() = TRUE
@@ -791,9 +594,9 @@ end function
function hFileSaveAsKillWithPassword( cFile as string, cPassword as string ) as boolean
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
- const CFN = "global::tools::inc::t_files.inc::hFileSaveAsKillWithPassword():"
+ const CFN = "global::tools::inc::t_files.inc::hFileSaveAsKillWithPassword(): "
hFileSaveAsKillWithPassword() = FALSE
- if ( VERBOSE ) then printlog( CFN & "Save with password, replacing: " & sFile & "::" & cPassword )
+ if ( GVERBOSE ) then printlog( CFN & "Save with password, replacing: " & sFile & "::" & cPassword )
FileSaveAs( "URL", sFile, "Overwrite", TRUE, "Password", cPassword )
if ( hFileWait( TRUE ) >= 0 ) then hFileSaveAsKillWithPassword() = TRUE
@@ -804,9 +607,9 @@ end function
function hFileSaveAsWithFilter( cFile as string, cFilter as string ) as boolean
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
- const CFN = "global::tools::inc::t_files.inc::hFileSaveAsWithFilter():"
+ const CFN = "global::tools::inc::t_files.inc::hFileSaveAsWithFilter(): "
hFileSaveAsWithFilter() = FALSE
- if ( VERBOSE ) then printlog( CFN & "Save with filter: " & sFile & "::" & cFilter )
+ if ( GVERBOSE ) then printlog( CFN & "Save with filter: " & sFile & "::" & cFilter )
FileSaveAs( "URL", sFile, "FilterName", cFilter, "Overwrite", FALSE )
if ( hFileWait( TRUE ) >= 0 ) then hFileSaveAsWithFilter() = TRUE
@@ -817,9 +620,9 @@ end function
function hFileSaveAsWithFilterKill( cFile as string, cFilter as string ) as boolean
dim sFile as string : sFile = convertToURL( convertpath( cFile ) )
- const CFN = "global::tools::inc::t_files.inc::hFileSaveAsWithFilterKill():"
+ const CFN = "global::tools::inc::t_files.inc::hFileSaveAsWithFilterKill(): "
hFileSaveAsWithFilterKill() = FALSE
- if ( VERBOSE ) then printlog( CFN & "Save with filter, replacing: " & sFile & "::" & cFilter )
+ if ( GVERBOSE ) then printlog( CFN & "Save with filter, replacing: " & sFile & "::" & cFilter )
FileSaveAs( "URL", sFile, "FilterName", cFilter, "Overwrite", TRUE )
if ( hFileWait( TRUE ) >= 0 ) then hFileSaveAsWithFilterKill() = TRUE
@@ -833,7 +636,7 @@ function hFileWait( optional bWarn as boolean ) as integer
' Returns the time it took the slot to finish
' Negative returnvalues are given on timeout or any blocking dialog
- const CFN = "global::tools::inc::t_files.inc::hFileWait():"
+ const CFN = "global::tools::inc::t_files.inc::hFileWait(): "
const MAX_WAIT = 10
dim iWait as integer : iWait = 0
dim bWarnlog as boolean
@@ -924,7 +727,7 @@ function hFileWait( optional bWarn as boolean ) as integer
loop
- if ( VERBOSE ) then
+ if ( GVERBOSE ) then
select case iWait
case -1 : printlog( CFN & "Timeout reached, rc = " & iWait )
case -2 : printlog( CFN & "Macro security warning displayed, rc = " & iWait )
diff --git a/testautomation/global/tools/includes/required/t_filters.inc b/testautomation/global/tools/includes/required/t_filters.inc
index 21ba12af5363..f6a2beca6eb0 100644..100755
--- a/testautomation/global/tools/includes/required/t_filters.inc
+++ b/testautomation/global/tools/includes/required/t_filters.inc
@@ -516,4 +516,19 @@ function hGetSection( lsList() as string , iSectionBegin as integer , iSectionEn
end function
+'*******************************************************************************
+
+function hGetUsedFilter () as string
+
+ ' used in math and graphics modules
+ '/// Get used filter for loaded file.
+ try
+ FileSaveAs
+ Kontext "SpeichernDlg"
+ hGetUsedFilter = dateityp.getseltext
+ SpeichernDlg.Cancel
+ catch
+ hGetUsedFilter = "Not possible; try/catch fail in function"
+ endcatch
+end function
diff --git a/testautomation/global/tools/includes/required/t_lists.inc b/testautomation/global/tools/includes/required/t_lists.inc
index 3819a21097b0..f32db2f29277 100644..100755
--- a/testautomation/global/tools/includes/required/t_lists.inc
+++ b/testautomation/global/tools/includes/required/t_lists.inc
@@ -595,31 +595,5 @@ function hListClearBlank( lsList() as string ) as integer
end function
-'*******************************************************************************
-
-function hListIntegrityTest( sList() as string ) as boolean
-
- const CFN = "global::tools::inc::t_list.inc::hListIntegrityTest:"
-
- '///<h3>Verify that listcount( array ) < ubound( array )</h3>
- ' NOTE: some listfunctions fail if ubound = listcount
-
- dim iListCount as integer
- dim iUbound as integer
-
- iListCount = listcount( sList() )
- iUbound = ubound( sList() )
-
- if ( iListCount >= iUbound ) then
- warnlog( CFN & "ListCount points beyond array boundary" )
- warnlog( CFN & "ListCount: " & iListCount )
- warnlog( CFN & "UBOUND...: " & iUbound )
- hListIntegrityTest() = false
- exit function
- end if
-
- hListIntegrityTest() = true
-
-end function
diff --git a/testautomation/global/tools/includes/required/t_menu.inc b/testautomation/global/tools/includes/required/t_menu.inc
index d8b1288c3e04..a7c64b37865d 100755
--- a/testautomation/global/tools/includes/required/t_menu.inc
+++ b/testautomation/global/tools/includes/required/t_menu.inc
@@ -585,37 +585,57 @@ function hUseMenu ()
'///<b> function hUseMenu () </b>///'
'///+ very global function: depends on 'gApplication' just activates the menu-bar ///'
- Select Case Ucase(gApplication)
- Case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.UseMenu
- Case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.UseMenu
- Case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.UseMenu
- case "CALC" ' there are 2 entries over :-( usually only one, html 0 :-((((
- Kontext "DocumentCalc"
- DocumentCalc.UseMenu
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.UseMenu
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.UseMenu
- case "MATH" :
- Kontext "DocumentMath"
- DocumentMath.UseMenu
- case "DATABASE" :
- Kontext "DATABASE"
- Database.UseMenu
- case "BASIC" :
- Kontext "BasicIde"
- BasicIde.UseMenu
- case "NONE" :
- Kontext "DocumentBackground"
- DocumentBackground.UseMenu
+ Select Case ( gApplication )
+ Case "WRITER"
+
+ Kontext "DocumentWriter"
+ DocumentWriter.UseMenu
+
+ Case "MASTERDOCUMENT"
+
+ Kontext "DocumentMasterDoc"
+ DocumentMasterDoc.UseMenu
+
+ Case "HTML"
+
+ Kontext "DocumentWriterWeb"
+ DocumentWriterWeb.UseMenu
+
+ case "CALC" ' there are 2 entries over :-( usually only one, html 0 :-((((
+
+ Kontext "DocumentCalc"
+ DocumentCalc.UseMenu
+
+ case "DRAW"
+
+ Kontext "DocumentDraw"
+ DocumentDraw.UseMenu
+
+ case "IMPRESS"
+
+ Kontext "DocumentImpress"
+ DocumentImpress.UseMenu
+
+ case "MATH" :
+
+ Kontext "DocumentMath"
+ DocumentMath.UseMenu
+
+ case "DATABASE" :
+
+ Kontext "DATABASE"
+ Database.UseMenu
+
+ case "BASIC" :
+
+ Kontext "BasicIde"
+ BasicIde.UseMenu
+
+ case "NONE" :
+
+ Kontext "DocumentBackground"
+ DocumentBackground.UseMenu
+
end select
end function
@@ -625,47 +645,64 @@ end function
function hOpenContextMenu()
'/// very global function: depends on 'gApplication' just opens the Context Menu ///'
- Select Case Ucase(gApplication)
- Case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.openContextMenu
- Case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.openContextMenu
- Case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.openContextMenu
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.openContextMenu
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.openContextMenu
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.openContextMenu
- case "MATH" :
- Kontext "DocumentMath"
- DocumentMath.openContextMenu
+ Select Case ( gApplication )
+ Case "WRITER"
+
+ Kontext "DocumentWriter"
+ DocumentWriter.openContextMenu
+
+ Case "MASTERDOCUMENT"
+
+ Kontext "DocumentMasterDoc"
+ DocumentMasterDoc.openContextMenu
+
+ Case "HTML"
+
+ Kontext "DocumentWriterWeb"
+ DocumentWriterWeb.openContextMenu
+
+ case "CALC"
+
+ Kontext "DocumentCalc"
+ DocumentCalc.openContextMenu
+
+ case "DRAW"
+
+ Kontext "DocumentDraw"
+ DocumentDraw.openContextMenu
+
+ case "IMPRESS"
+
+ Kontext "DocumentImpress"
+ DocumentImpress.openContextMenu
+
+ case "MATH" :
+
+ Kontext "DocumentMath"
+ DocumentMath.openContextMenu
+
end select
end function
'*******************************************************************************
-function hGetWindowCaption(sApplication as string, optional bAll as boolean)
+function hGetWindowCaption( sApplication as string, optional bAll as boolean )
'///<b> function hGetWindowCaption () </b>///'
'///+ just returns the string from the application main window ///'
'///+ If optional parameter = true, thenn go throught all applications and get caption; return array ///'
+ ' BEWARE: THIS FUNCTION MODIFIES ITS FUNCTION PARAMETER UNDER CERTAIN
+ ' CONDITIONS!
+
dim sTemp as string
dim aApplication() as string
dim aTemp(10) as string
dim iTimes as integer
dim i as integer
- aApplication = array("SWRITER","SGLOBAL","SWEB","SCALC","SDRAW","SIMPRESS","SMATH","BASIC","BACK")
+ aApplication = array("SWRITER","SGLOBAL","SWEB","SCALC","SDRAW","SIMPRESS","SMATH","BASIC","DATABASE","SOFFICE")
if (isMissing(bAll) OR (NOT bAll)) then
iTimes = 0
else
@@ -722,7 +759,13 @@ function hGetWindowCaption(sApplication as string, optional bAll as boolean)
sTemp = BasicIDE.caption
catch
endcatch
- Case "BACK"
+ Case "DATABASE"
+ Kontext "DATABASE"
+ try
+ sTemp = DataBase.caption
+ catch
+ endcatch
+ Case "SOFFICE"
Kontext "DocumentBackground"
try
sTemp = DocumentBackground.caption
@@ -748,7 +791,7 @@ end function
'*******************************************************************************
-function fSplitWindowTitle(sInString as string)
+function fSplitWindowTitle( sInString as string )
dim a, b, x, i, iProductname as integer
dim sTemp() as string
@@ -811,35 +854,33 @@ function fSplitWindowTitle(sInString as string)
' sanity checks, to warn if assumptions are not met!
select case x
- case 1:
- if ((bTestToolCommunication) OR (bDebugVersion)) then
- qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 1"
- bError = TRUE
- endif
- case 2:
- if ((bTestToolCommunication) OR (NOT bDebugVersion)) then
- qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 2"
- bError = TRUE
- endif
- case 3:
- if ((NOT bTestToolCommunication) OR (bDebugVersion)) then
- qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 3"
- bError = TRUE
- endif
- case 4:
- if ((NOT bTestToolCommunication) OR (NOT bDebugVersion)) then
- qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 4"
- bError = TRUE
- endif
- case else:
- qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 0"
+ case 1:
+ if ((bTestToolCommunication) OR (bDebugVersion)) then
+ qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 1"
+ bError = TRUE
+ endif
+ case 2:
+ if ((bTestToolCommunication) OR (NOT bDebugVersion)) then
+ qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 2"
+ bError = TRUE
+ endif
+ case 3:
+ if ((NOT bTestToolCommunication) OR (bDebugVersion)) then
+ qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 3"
bError = TRUE
+ endif
+ case 4:
+ if ((NOT bTestToolCommunication) OR (NOT bDebugVersion)) then
+ qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 4"
+ bError = TRUE
+ endif
+ case else:
+ qaErrorLog "t_menu.inc::fSplitWindowTitle: Unknown count of Window Title Strings! 0"
+ bError = TRUE
end select
- if bError then
- printlog sInString
- endif
-
+ if bError then printlog sInString
+
if (x > 1) then ' there is more to evaluate
' save the current computed values
for i=0 to 2
@@ -849,7 +890,6 @@ function fSplitWindowTitle(sInString as string)
redim sTempReturn(4) as string
' copy data back
for i=0 to 2
- '***** Warning: Indention error *****
sTempReturn(i) = sTempReturn2(i)
next i
' set remaining values, if exist
diff --git a/testautomation/global/tools/includes/required/t_option2.inc b/testautomation/global/tools/includes/required/t_option2.inc
index 174048985c59..2b10f50ce00a 100644
--- a/testautomation/global/tools/includes/required/t_option2.inc
+++ b/testautomation/global/tools/includes/required/t_option2.inc
@@ -196,6 +196,9 @@ function hSetMacroSecurity( iLevel as integer ) as integer
'///Switch between macro security levels in Tools/Options
'///<ul>
const CFN = "hSetMacroSecurity::"
+ const RETVAL_FAILURE = -1
+ const DEFAULT_WAIT_TIME = 2
+
dim iOldSecurityLevel as integer
dim caLevel( 3 ) as string
@@ -206,7 +209,7 @@ function hSetMacroSecurity( iLevel as integer ) as integer
if ( ( iLevel < GC_MACRO_SECURITY_LEVEL_LOW ) or ( iLevel > GC_MACRO_SECURITY_LEVEL_VERYHIGH ) ) then
warnlog( CFN & "Invalid index (0...3) passed to function: " & ilevel )
- hSetMacroSecurity() = -1
+ hSetMacroSecurity() = RETVAL_FAILURE
exit function
end if
@@ -216,12 +219,12 @@ function hSetMacroSecurity( iLevel as integer ) as integer
'///+<li>Click on the macro security button</li>
Kontext "TabSecurity"
- if ( MacroSecurity.exists( 2 ) ) then
+ if ( MacroSecurity.exists( DEFAULT_WAIT_TIME ) ) then
MacroSecurity.click()
'///+<li>Ensure we are on the Security Level page</li>
kontext "Active"
- if ( Active.exists( 2 ) ) then
+ if ( Active.exists( DEFAULT_WAIT_TIME ) ) then
Kontext
active.setpage TabSecurityLevel
@@ -241,12 +244,12 @@ function hSetMacroSecurity( iLevel as integer ) as integer
else
printlog( CFN & "Security Tabpage not available. Aborting." )
kontext "OptionenDlg"
- if ( OptionenDlg.exists( 2 ) ) then
+ if ( OptionenDlg.exists( DEFAULT_WAIT_TIME ) ) then
OptionenDlg.cancel()
else
warnlog( CFN & "Unrecoverable error, status unknown." )
endif
- hSetMacroSecurity() = -1
+ hSetMacroSecurity() = RETVAL_FAILURE
exit function
endif
@@ -263,12 +266,12 @@ function hSetMacroSecurity( iLevel as integer ) as integer
else
printlog( CFN & "Macro Security Dialog did not open. Aborting." )
kontext "OptionenDlg"
- if ( OptionenDlg.exists( 2 ) ) then
+ if ( OptionenDlg.exists( DEFAULT_WAIT_TIME ) ) then
OptionenDlg.cancel()
else
warnlog( CFN & "Unrecoverable error, status unknown." )
endif
- hSetMacroSecurity() = -1
+ hSetMacroSecurity() = RETVAL_FAILURE
exit function
endif
@@ -276,7 +279,7 @@ function hSetMacroSecurity( iLevel as integer ) as integer
TabSecurityLevel.ok()
else
warnlog( CFN & "The Macro Security Button is not available" )
- iOldSecurityLevel = -1
+ iOldSecurityLevel = RETVAL_FAILURE
end if
Kontext "OptionenDLG"
OptionenDLG.OK()
@@ -312,6 +315,7 @@ function hGetMacroSecurityAPI() as integer
'///</ol>
const CFN = "hGetMacroSecurityAPI::"
+ const RETVAL_FAILURE = -1
dim oUnoOfficeConnection as object
dim oUnoConfigurationAccess as object
@@ -336,7 +340,7 @@ function hGetMacroSecurityAPI() as integer
catch
warnlog( CFN & "Failed to retrieve macro security Level via API" )
- iLevel = -1
+ iLevel = RETVAL_FAILURE
endcatch
diff --git a/testautomation/global/tools/includes/required/t_tools1.inc b/testautomation/global/tools/includes/required/t_tools1.inc
index a908af39e5af..7242d1c3653d 100644..100755
--- a/testautomation/global/tools/includes/required/t_tools1.inc
+++ b/testautomation/global/tools/includes/required/t_tools1.inc
@@ -35,8 +35,6 @@ private SLEEP_TIME_REQUESTED as integer
private SLEEP_CALLS_SUM as integer
private SLEEP_TIME_USED as integer
-private const VERBOSE = FALSE
-
function GetClipboardText as string
'/// Returns the correct clipboard text (also if there is a 'RETURN' at it's end.
@@ -318,7 +316,7 @@ function Sleep( optional _iSeconds as integer ) as integer
printlog( CFN & "Zero time. Please consider removing Sleep() statement" )
endif
- if ( VERBOSE ) then
+ if ( GVERBOSE ) then
SLEEP_CALLS_SUM = SLEEP_CALLS_SUM + 1
SLEEP_TIME_USED = SLEEP_TIME_USED + iTimeDiff / 1000 ' good enough
SLEEP_TIME_REQUESTED = SLEEP_TIME_REQUESTED + iSeconds
@@ -412,10 +410,10 @@ sub DialogTest( Window, optional iNumber as integer)
'save with respect to application and language
sCapturePath = ConvertPath (gOfficePath + "user\work\screenshots"+iSprache+"\")
sPicName = sCapturePath + lCase(gApplication)
+
'create directory if it doesn't exist
- if hDirectoryExists(sPicName) <> TRUE then
- mkdir (sPicName)
- end if
+ if ( not FileExists(sPicName) ) then mkdir sPicName
+
sPicName = sPicName + sName
try
sleep 1
@@ -697,28 +695,6 @@ end function
'*******************************************************************************
-sub ErgebnisSchreiben ( Window, Name$ )
-
- '/// ErgebnisSchreiben
- '///+ Used in context with making screenshots.
-
- Dim FileNum% : Dim i%
- Dim Datei$
- Dim Text$ : Dim Text2$
-
- Datei$ = sCapturePath + "Ergebis.txt"
- Text2$ = Window.Name
- Text$ = Text2$ + " => " + Name$
-
- FileNum% = FreeFile
- Open Datei$ for Append as #FileNum%
- Print #FileNum%, Text$
- Close #FileNum%
-
-end sub
-
-'*******************************************************************************
-
sub TextInDatei ( TextText$, Datei$ )
'/// TextInDatei
@@ -860,16 +836,14 @@ function ActiveDeactivateAsianSupport ( WhatState as Boolean ) as Boolean
gAsianSup = WhatState ' Set the global variable
Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (3)
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
else
ActiveDeactivateAsianSupport = TRUE
If WhatState = FALSE then
warnlog "Deactivating of asian language support is not possible, because it is disabled in cjk versions"
end if
Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (3)
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
end if
end function
@@ -899,16 +873,14 @@ function ActiveDeactivateCTLSupport ( WhatState as Boolean ) as Boolean
gCTLSup = WhatState ' Set the global variable
Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (3)
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
else
ActiveDeactivateCTLSupport = TRUE
If WhatState = FALSE then
warnlog "Deactivating of CTL language support is not possible, because it is disabled in ctl versions"
end if
Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- Sleep (3)
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
end if
end function
@@ -1147,183 +1119,30 @@ end sub
sub raiseApplication
' Try to solve focus problem on MacOS X; After calling this function, OOo should be most front;
- Dim i as integer
- Dim a as integer
- Dim b as integer
- Dim tBundle as string
- Dim aPath
+ dim iCurrentDir as integer
+ dim iNumberOfHits as integer : iNumberOfHits = 0
+ dim iDirPosition as integer
+ dim tBundle as string
+ dim aPath ' string array with dynamic itemcount, intended.
' Calling just the .app with open on MacOS X via shell command
if ( lcase( gPlatform ) = "osx" ) then
-
+
+ ' Split the path into its components
aPath = split(gNetzOfficePath, gPathSigne)
- a=0
+
' make sure 'Contents' is just one time in path
- for i=0 to uBound(aPath)
-
- if "Contents" = aPath(i) then
- a=a+1
- endif
-
- next i
+ for iCurrentDir = 0 to uBound(aPath)
+ if "Contents" = aPath( iCurrentDir ) then iNumberOfHits = iNumberOfHits + 1
+ next iCurrentDir
' exit if not
- if a<>1 then
- exit sub
- end if
+ if ( iNumberOfHits <> 1 ) then exit sub
- i=inStr(gNetzOfficePath, "Contents")
- tBundle=left(gNetzOfficePath, i-2)
- shell("open",1 ,tBundle, true)
+ iDirPosition = inStr( gNetzOfficePath, "Contents" )
+ tBundle = left( gNetzOfficePath, iDirPosition - 2 )
+
+ shell( "open", 1, tBundle, true )
end if
end sub
-
-'*******************************************************************************
-
-function hUseAsyncSlot( cSlot as string ) as integer
-
- dim iWait as integer
- dim iTime as integer : iTime = 0
- const MAX_WAIT = 100
- const DELAY = 100
- const CFN = "global::tools::includes::required::hUseAsyncSlot():"
-
- if ( VERBOSE ) then printlog( CFN & "Using slot: " & cSlot )
- WaitSlot()
- for iWait = 1 to MAX_WAIT
- try
- select case ( lcase( cSlot ) )
- case "fileclose" : FileClose
- case "filesaveas" : FileSaveAs( "SynchronMode", TRUE )
- case "filesaveall" : FileSaveAll( "SynchronMode", TRUE )
- case "fileexport" : FileExport
- case "filereload" : FileReload( "SynchronMode", TRUE )
- case "fileopen" : FileOpen
-
- case "editdoc" : EditDoc
- case "editcopy" : EditCopy
- case "editchangesrecord" : EditChangesRecord
- case "editchangesshow" : EditChangesShow
- case "editchangesprotecttrace" : EditChangesProtectTrace
- case "editchangescomment" : EditChangesComment
-
- case "editpaste" : EditPaste
- case "editcopy" : EditCopy
- case "editcut" : EditCut
- case "editselectall" : EditSelectAll
- case "editselectallmath" : EditSelectAllMath
- case "editselectionmodeblock" : EditSelectionModeBlock
- case "editselectionmodestandard" : EditSelectionModeStandard
- case "editdeletecontents" : EditDeleteContents
- case "editundo" : EditUndo
- case "editredo" : EditRedo
- case "editrepeat" : EditRepeat
- case "editpastespecial" : EditPasteSpecial
- case "editpastespecialwriter" : EditPasteSpecialWriter
- case "editsearchandreplace" : EditSearchAndReplace
- case "editduplicate" : EditDuplicate
- case "editgluepoints" : EditGluePoints
- case "editdeleteslide" : EditDeleteSlide
- case "editobjectproperties" : EditObjectProperties
- case "editobjectedit" : EditObjectEdit
- case "editobjectsavecopyas" : EditObjectSaveCopyAs
-
- case "formatcharttype" : FormatChartType
- case "formatcontrol" : FormatControl
- case "formateditpoints" : FormatEditPoints
- case "formatsections" : FormatSections
- case "formatchangecaseupper" : FormatChangeCaseUpper
- case "formatchangecaselower" : FormatChangeCaseLower
- case "formatarea" : FormatArea
- case "formatarrangebringtofrontcalc" : FormatArrangeBringToFrontCalc
- case "formatflipvertically" : FormatFlipVertically
- case "formatfliphorizontally" : FormatFlipHorizontally
- case "formatline" : FormatLine
- case "formatpositionandsize" : FormatPositionAndSize
- case "formatfontwork" : FormatFontwork
- case "formatparagraph" : FormatParagraph
- case "formatstylebold" : FormatStyleBold
- case "formatungroupdraw" : FormatUngroupDraw
- case "formatexitgroupdraw" : FormatExitGroupDraw
- case "formatgroupgroup" : FormatGroupGroup
- case "formatgroupeditgroupcalc" : FormatGroupEditGroupCalc
- case "formatalignmentlefttext" : FormatAlignmentLeftText
- case "formatgraphics" : FormatGraphics
- case "formatanchortopage" : FormatAnchorToPage
- case "formatwrapcontour" : FormatWrapContour
- case "formatwrapeditcontour" : FormatWrapEditContour
- case "formatpagewriter" : FormatPageWriter
-
- case "insertindexesbibliographyentry" : InsertIndexesBibliographyEntry
- case "insertobjectchart" : InsertObjectChart
- case "inserttablewriter" : InsertTableWriter
- case "insertobjectformulawriter" : InsertObjectFormulaWriter
- case "insertfloatingframe" : InsertFloatingFrame
-
- case "contextpositionandsize" : ContextPositionAndSize
-
- case "toolslanguagehyphenate" : ToolsLanguageHyphenate
- case "toolsupdateallindexes" : ToolsUpdateAllIndexes
- case "toolsupdatefields" : ToolsUpdateFields
- case "toolsupdatelinks" : ToolsUpdateLinks
- case "toolslanguagehangulhanjaconversion" : ToolsLanguageHangulHanjaConversion
-
- ' This is the property browser in the BASIC IDE
- case "contextproperties" : ContextProperties
-
- case else : warnlog( "Unknown slot called: " & cSlot )
- end select
-
- exit for
- catch
- wait( DELAY )
- iTime = iWait * DELAY
- endcatch
- next iWait
-
- ' Timeout is -1
- if ( iTime = MAX_WAIT * DELAY ) then
- iTime = -1
- endif
- if ( VERBOSE ) then printlog( CFN & "Exit with rc=" & iTime )
- hUseAsyncSlot() = iTime
-
-
-end function
-
-'*******************************************************************************
-
-function hClickButton( oButton as object ) as integer
-
- dim iWait as integer
- dim iTime as integer : iTime = 0
- const MAX_WAIT = 50
- const CFN = "global::tools::includes::required::hClickButton():"
-
- if ( VERBOSE ) then printlog( CFN & "Click button: " & oButton.name() )
- WaitSlot()
- for iWait = 1 to MAX_WAIT
- try
- if ( oButton.exists() ) then
- if ( VERBOSE ) then printlog( CFN & "Button exists" )
- if ( oButton.isEnabled() ) then
- if ( VERBOSE ) then printlog( "Button is enabled" )
- oButton.click()
- endif
- endif
- exit for
- catch
- wait( 100 )
- iTime = iWait * 100
- endcatch
- next iWait
- if ( iTime = 5000 ) then
- iTime = -1
- endif
- if ( VERBOSE ) then printlog( CFN & "Exit with rc=" & iTime )
- hClickButton() = iTime
-
-end function
-
-
diff --git a/testautomation/global/tools/includes/required/t_tools2.inc b/testautomation/global/tools/includes/required/t_tools2.inc
index 2301c2e5648f..449977d9329d 100644..100755
--- a/testautomation/global/tools/includes/required/t_tools2.inc
+++ b/testautomation/global/tools/includes/required/t_tools2.inc
@@ -96,69 +96,6 @@ function hSetLocaleStrings (fLocale as String, TBOstringLocale() as String ) as
hSetLocaleStrings = bFoundLanguage
end function
-'-------------------------------------------------------------------------
-
-sub GetHTMLCharSet as String
-'///function to get the Character Set for HTML export
-'///+(tools/options/load&save/HTML compatibility -> Character Set)
- ToolsOptions
- hToolsOptions ( "LoadSave", "HTMLCompatibility" )
- GetHTMLCharSet = Zeichensatz.GetSelText
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
-end sub
-
-'-------------------------------------------------------------------------
-
-sub SetHTMLCharSet ( CharSet as String )
-'///routine to set the Character Set for HTML export
-'///+( tools/options/load&save/HTML compatibility -> Character Set )
- ToolsOptions
- hToolsOptions ( "LoadSave", "HTMLCompatibility" )
- Zeichensatz.Select CharSet
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
-end sub
-
-'-------------------------------------------------------------------------
-
-sub SetHTMLCharSetToUTF8 as Boolean
-'///function to set the Character Set for HTML export to 'Unicode UTF8'
-'///+( tools/options/load&save/HTML compatibility -> Character Set )
- Dim i as Integer
- Dim sDum as String
-
- ToolsOptions
- hToolsOptions ( "LoadSave", "HTMLCompatibility" )
-
- for i=1 to Zeichensatz.GetItemCount
- sDum = Zeichensatz.GetItemText (i)
- if Instr ( lcase (sDum), "utf-8" ) <> 0 then
- Zeichensatz.Select (i)
- i=1000
- else
- if Instr ( lcase (sDum), "utf8" ) <> 0 then
- Zeichensatz.Select (i)
- i=1000
- else
- if Instr ( lcase (sDum), "utf 8" ) <> 0 then
- Zeichensatz.Select (i)
- i=1000
- end if
- end if
- end if
- next i
- if i<1000 then
- SetHTMLCharSetToUTF8 = FALSE
- else
- SetHTMLCharSetToUTF8 = TRUE
- end if
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
-end sub
-
-'-------------------------------------------------------------------------
-
function dec(Ref as integer)
'/// decrement variable, call it like 'dec variable' ///'
' reference or value .-) an excursion :-))
@@ -177,235 +114,11 @@ end function
'-------------------------------------------------------------------------
-function ActivateAutoPilot ( sWhichOne as String ) as Boolean
-'Author: TZ
-'///Routine to activate (WebPage Autopilot, Form Autopilot, Documentconverter and Euroconveter)
-'///Open via menu items (not via SlotID or Macro URL)
-'///<u>input</u>: Which Autopilot (<i>webpage</i>, <i>form</i>, <i>documentconverter</i>, <i>euroconverter</i>,<i>addressdatasource</i>)
-'///<u>output</u>:<ul><li>TRUE: Autopilot is open</li><li>FALSE: Autopilot can not be opened</li></ul>
- Dim bIsLoaded as boolean, LoadTime as integer, PrintTime as Integer
-
- bIsLoaded = FALSE
- LoadTime = 0
-
- select case gApplication
- case "WRITER"
- Kontext "DocumentWriter"
- DocumentWriter.UseMenu
- case "HTML"
- Kontext "DocumentWriterWeb"
- DocumentWriterWeb.UseMenu
- case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
- DocumentMasterDoc.UseMenu
- case "CALC"
- Kontext "DocumentCalc"
- DocumentCalc.UseMenu
- case "IMPRESS"
- Kontext "DocumentImpress"
- DocumentImpress.UseMenu
- case "DRAW"
- Kontext "DocumentDraw"
- DocumentDraw.UseMenu
- case "MATH"
- Kontext "DocumentMath"
- DocumentMath.UseMenu
- case else
- Kontext "DocumentWriter"
- DocumentWriter.UseMenu
- end select
- sleep(2)
- hMenuSelectNr(1)
- sleep(2)
- hMenuSelectNr(4)
- sleep(2)
-
- select case lcase (sWhichOne)
- case "webpage" : hMenuSelectNr(5)
- case "documentconverter" : hMenuSelectNr(6)
- case "euroconverter" : hMenuSelectNr(7)
- case "addressdatasource" : hMenuSelectNr(8)
- end select
- sleep(5)
-
- while bIsLoaded = False
- while LoadTime < 20
- PrintTime = LoadTime * 3
- select case lcase ( sWhichOne )
- case "webpage" : Kontext "AutopilotWebPage"
- if AutopilotWebPage.Exists(1) then
- bIsLoaded = true
- printlog "Autopilot is loaded in " + PrintTime + " seconds!"
- LoadTime = 20
- ActivateAutoPilot = TRUE
- end if
- case "report" : Kontext "AutoPilotReport"
- if AutoPilotReport.Exists(1) then
- bIsLoaded = true
- printlog "Autopilot is loaded in " + PrintTime + " seconds!"
- LoadTime = 20
- ActivateAutoPilot = TRUE
- end if
- case "form" : Kontext "ChooseDatabase"
- if ChooseDatabase.Exists(1) then
- bIsLoaded = true
- printlog "Autopilot is loaded in " + PrintTime + " seconds!"
- LoadTime = 20
- ActivateAutoPilot = TRUE
- end if
- case "documentconverter" : Kontext "DocumentConverter"
- if DocumentConverter.Exists(1) then
- bIsLoaded = true
- printlog "Autopilot is loaded in " + PrintTime + " seconds!"
- LoadTime = 20
- ActivateAutoPilot = TRUE
- end if
- case "euroconverter" : Kontext "AutoPilotEuroKonverter"
- if AutoPilotEuroKonverter.Exists(1) then
- bIsLoaded = true
- printlog "Autopilot is loaded in " + PrintTime + " seconds!"
- LoadTime = 20
- ActivateAutoPilot = TRUE
- end if
- case "addressdatasource" : Kontext "AddressSourceAutopilot"
- if AddressSourceAutopilot.Exists(1) then
- bIsLoaded = true
- printlog "Autopilot is loaded in " + PrintTime + " seconds!"
- LoadTime = 20
- ActivateAutoPilot = TRUE
- end if
-
- end select
- 'NOTE: Maybe a messagebox occurs.
- Kontext "Active"
- if Active.Exists (1) then
- warnlog Active.GetText
- try
- Active.OK
- catch
- Active.Cancel
- endcatch
- ActivateAutoPilot = FALSE
- end if
- sleep(1)
- LoadTime = LoadTime + 1
- if LoadTime = 20 and bIsLoaded = False then
- warnlog "Autopilot has not been loaded!"
- ActivateAutoPilot = FALSE
- bIsLoaded = TRUE
- end if
- wend
- wend
-end function
-
-'-------------------------------------------------------------------------
-
-function SetURL ( sURL as String )
-'Author: TZ
-'/// Routine to open a special URL with <i>file open</i>-dialog
-'/// <u>input</u>: The URL as string
- FileOpen
- Kontext "OeffnenDlg"
- Dateiname.SetText sURL
- Oeffnen.Click
- wait 500
-end function
-
-'-------------------------------------------------------------------------
-
-function fGetFileText (sFilename as string, iCount as long) as string
-'/// This function is for getting the first or last n characters of a file
-'///+<u>Input</u>:<ul><li>filename</li><li>number</li></ul>If the number greater 0 then get n characters from start.
-'///+A number smaller 0 get from end of file.
-'///+<u>Output</u>:<ul><li>string with <b><i>n</i></b> characters</li></ul>
-
- dim iFile as integer ' filehandle
- dim iTem as integer ' get 2 bytes of the file
- dim iTemByte(2) as integer ' move 1 byte from iTem in each item
- dim sTemp as string ' string of file
- dim iSize as long ' size in bytes of file
- dim i as long ' runner :-)
-
- iFile = FreeFile
-' Printlog "FreeFile: " + iFile
- if (dir (sFilename) <> "") then
-' Printlog "FileLen: " + FileLen(sFile)
- Open sFilename For binary access read shared As #iFile
-' Printlog "Loc: " + Loc(#iFile) ' LONG! where am i in the file?
-
- iSize = Lof(#iFile) ' get size in bytes of file
- if (iSize > 65530) then '65536 = 64kB
- 'Warnlog "fGetFileText: file '" + sFilename + "' might get problems on reading it? size is > 65530 Byte: '" + iSize + "'"
- else
-' printlog "iSize: " + iSize
- endif
-
- sTemp = ""
- if (iCount >= 0) then ' get bytes from file start
- get iFile,1,sTemp ' get max 64kByte; but not the 1st 2 bytes :-(
- get iFile,1,iTem ' get the first 2 bytes of the file
- iTemByte(2) = (iTem AND &H0000FF00) \ &H100 ' and seperate the bytes
- iTemByte(1) = (iTem AND &H000000FF)
- sTemp = chr(iTemByte(1)) + chr(iTemByte(2)) + sTemp ' put them together
- else ' get bytes from file end
- if ((iSize+iCount) > 0) then
- select case (iSize+iCount)
- case 1: get iFile,1,sTemp ' take bytes from the end of the file
- get iFile,1,iTem ' get the first 2 bytes of the file
- sTemp = chr(iTemByte(2)) + sTemp ' put them together
- case else: get iFile,(iSize+iCount)-1,sTemp ' take bytes from the end of the file
- end select
- else
- get iFile,1,sTemp ' take bytes from the end of the file
- get iFile,1,iTem ' get the first 2 bytes of the file
- iTemByte(2) = (iTem AND &H0000FF00) \ &H100 ' and seperate the bytes
- iTemByte(1) = (iTem AND &H000000FF)
- sTemp = chr(iTemByte(1)) + chr(iTemByte(2)) + sTemp ' put them together
- endif
- endif
-' printlog "'"+left(sTemp,iSize)+"'" ' gotcha!
-
- if (iSize-(Abs(iCount)) >= 0) then
- fGetFileText = left(sTemp,Abs(iCount))
- else
- 'Warnlog "fGetFileText: file '" + sFilename + "' isn't as big as expected; will only return '" + iSize+ "' bytes fom: " + iCount
- fGetFileText = left(sTemp,iSize)
- endif
-
- ' debugging routine --------------------------------------
- ' iSize = Lof(#iFile)
- ' printlog "iSize: " + iSize
- ' sTemp = ""
- ' if iSize > 0 then
- ' printlog "iSize \ 2: " + (iSize \ 2)
- ' for i = 0 to ((iSize \ 2)-1)
- ' get iFile,(i*2)+1,iTem
- ' Printlog "i: " + i + ": 0x" + hex(iTem)
- ' iTemByte(2) = (iTem AND &H0000FF00) \ &H100
- ' iTemByte(1) = (iTem AND &H000000FF)
- ' sTemp = sTemp + chr(iTemByte(1)) + chr(iTemByte(2))
- ' next i
- ' if (iSize MOD 2) = 1 then
- ' get iFile,iSize,iTem
- ' Printlog "i: " + iSize + ": 0x" + hex(iTem)
- ' iTemByte(1) = (iTem AND &H000000FF)
- ' sTemp = sTemp + chr(iTemByte(1))
- ' endif
- ' endif
- ' printlog "'"+sTemp+"'"
- ' debugging routine --------------------------------------
- Close #iFile
- else ' does file exist
- Warnlog "fGetFileText: file '" + sFilename + "' doesn't exist"
- fGetFileText = ""
- endif
-end function
-'
-'-------------------------------------------------------------------------
-'
function fSetMeasurementToCM() as string
'/// Sets the measurement unit to centimeter (cm) and returns the unit.
Dim i as integer
+
+ const LANGUAGE_CODE_JAPANESE = 81
Call hNewDocument
ToolsOptions
@@ -413,7 +126,7 @@ function fSetMeasurementToCM() as string
case "WRITER"
Call hToolsOptions("WRITER","GENERAL")
Masseinheit.Select(2)
- if iSprache = 81 then
+ if iSprache = LANGUAGE_CODE_JAPANESE then
fSetMeasurementToCM = Right$( Tabulatorenabstand.Gettext, 3 )
else
fSetMeasurementToCM = Right$( Tabulatorenabstand.Gettext, 2 )
@@ -421,7 +134,7 @@ function fSetMeasurementToCM() as string
case "CALC"
Call hToolsOptions("CALC","GENERAL")
Masseinheit.Select(2)
- if iSprache = 81 then
+ if iSprache = LANGUAGE_CODE_JAPANESE then
fSetMeasurementToCM = Right$( Tabulator.Gettext , 3 )
else
fSetMeasurementToCM = Right$( Tabulator.Gettext , 2 )
@@ -429,7 +142,7 @@ function fSetMeasurementToCM() as string
case "IMPRESS"
Call hToolsOptions("IMPRESS","GENERAL")
Masseinheit.Select(2)
- if iSprache = 81 then
+ if iSprache = LANGUAGE_CODE_JAPANESE then
fSetMeasurementToCM = Right$( Tabulatorabstand.Gettext, 3 )
else
fSetMeasurementToCM = Right$( Tabulatorabstand.Gettext, 2 )
@@ -437,7 +150,7 @@ function fSetMeasurementToCM() as string
case "DRAW"
Call hToolsOptions("DRAW","GENERAL")
Masseinheit.Select(2)
- if iSprache = 81 then
+ if iSprache = LANGUAGE_CODE_JAPANESE then
fSetMeasurementToCM = Right$( Tabulatorabstand.Gettext, 3 )
else
fSetMeasurementToCM = Right$( Tabulatorabstand.Gettext, 2 )
@@ -445,7 +158,7 @@ function fSetMeasurementToCM() as string
case "MASTERDOCUMENT"
Call hToolsOptions("WRITER","GENERAL")
Masseinheit.Select(2)
- if iSprache = 81 then
+ if iSprache = LANGUAGE_CODE_JAPANESE then
fSetMeasurementToCM = Right$( Tabulatorenabstand.Gettext, 3 )
else
fSetMeasurementToCM = Right$( Tabulatorenabstand.Gettext, 2 )
@@ -457,7 +170,7 @@ function fSetMeasurementToCM() as string
'because .sdw, .sxw etc. export to HTML depends on it.
Call hToolsOptions("WRITER","GENERAL")
Masseinheit.Select(2)
- if iSprache = 81 then
+ if iSprache = LANGUAGE_CODE_JAPANESE then
fSetMeasurementToCM = Right$( Tabulatorenabstand.Gettext, 3 )
else
fSetMeasurementToCM = Right$( Tabulatorenabstand.Gettext, 2 )
@@ -498,12 +211,6 @@ End Function
'-------------------------------------------------------------------------
-function fRemoveDoubleSpace(stringToChange as string) As String
- fRemoveDoubleSpace = fRemoveDoubleCharacter(stringToChange, " ")
-End Function
-
-'-------------------------------------------------------------------------
-
function writeCrashRepFile()
'/// Creates a file <i>(gOfficePath)</i>/user/work/crashrep.txt with two lines:
'///+ <ol><li>name of .bas file</li>
@@ -559,7 +266,7 @@ function hGetUNOService(optional bSilent as boolean, optional byRef sUnoPortExte
' To not to change the old behaviour, set variable if parameter is not given
if (isMissing(bSilent)) then
- bSilent = FALSE
+ bSilent = TRUE
end if
' master.inc::sStartUpOffice needs just the Port Numberr from UNO, to pass it to first start up
diff --git a/testautomation/global/tools/includes/required/t_tools3.inc b/testautomation/global/tools/includes/required/t_tools3.inc
index b55546edd8d6..27ac128437ee 100644..100755
--- a/testautomation/global/tools/includes/required/t_tools3.inc
+++ b/testautomation/global/tools/includes/required/t_tools3.inc
@@ -29,8 +29,7 @@
'*
'* short description : Global Tools III
'*
-'\*************************************************************************************
-
+'\******************************************************************************
sub hToolbarSelect( sType as string, sOpen as boolean, optional SetToDefault as boolean )
Dim sDefault as integer, sKontext as string, sPosition as integer
@@ -916,6 +915,7 @@ sub hCloseAllToolbars
endif
end sub
+'*******************************************************************************
function hIsAccessbridgeInstalled() as boolean
'/// created by HDE
@@ -942,7 +942,7 @@ function hIsAccessbridgeInstalled() as boolean
sAccessBridgeFolder = "Java Access Bridge"
sCompareString = sProgramFiles & "\" & sAccessBridgeFolder & "\AccessBridgeTester.class"
sAccessibilityCompare = "with accessibility support"
- if hFileExists(sCompareString) = True then
+ if ( FileExists( sCompareString ) ) then
AccessbridgeIsInstalled = True
else
ToolsOptions
@@ -965,7 +965,7 @@ function hIsAccessbridgeInstalled() as boolean
endif
endif
Kontext "OptionenDlg"
- OptionenDlg.Cancel
+ hCloseDialog( OptionenDlg, "Cancel" )
endif
end select
endif
@@ -973,3 +973,284 @@ function hIsAccessbridgeInstalled() as boolean
hIsAccessbridgeInstalled = AccessbridgeIsInstalled
end function
+
+'*******************************************************************************
+
+function hUseAsyncSlot( cSlot as string ) as integer
+
+ ' These are a selection of slots that take time to get enabled after
+ ' actions have been performed on a document. Although they might appear
+ ' to be ready in the UI we still need to probe them.
+
+ dim iRetries as integer : iRetries = 0
+ dim iTime as integer : iTime = 0
+
+ dim slot as string : slot = lcase( cSlot )
+
+ const MAX_RETRIES = 100 ' Number of time we try to call the slot
+ const DELAY = 100 ' 100ms delay to wait between retries
+ const RC_TIMEOUT = -1 ' Returnvalue if slot is not available
+ const CFN = "global::tools::includes::required::hUseAsyncSlot(): "
+
+ if ( GVERBOSE ) then printlog( CFN & "Execute <" & cSlot & ">" )
+ WaitSlot()
+
+ for iRetries = 1 to MAX_RETRIES
+ try
+ select case ( slot )
+ case "fileclose" : FileClose
+ case "filesave" : FileSave
+ case "filesaveas" : FileSaveAs( "SynchronMode", TRUE )
+ case "filesaveall" : FileSaveAll( "SynchronMode", TRUE )
+ case "fileexport" : FileExport
+ case "filereload" : FileReload( "SynchronMode", TRUE )
+ case "fileopen" : FileOpen
+ case "fileprint" : FilePrint
+ case "fileprintersettings" : FilePrintersettings
+ case "fileproperties" : FileProperties
+
+ case "editdoc" : EditDoc
+ case "editcopy" : EditCopy
+ case "editchangesrecord" : EditChangesRecord
+ case "editchangesshow" : EditChangesShow
+ case "editchangesprotecttrace" : EditChangesProtectTrace
+ case "editchangescomment" : EditChangesComment
+
+ case "editpaste" : EditPaste
+ case "editcut" : EditCut
+ case "editselectall" : EditSelectAll
+ case "editselectallmath" : EditSelectAllMath
+ case "editselectionmodeblock" : EditSelectionModeBlock
+ case "editselectionmodestandard" : EditSelectionModeStandard
+ case "editdeletecontents" : EditDeleteContents
+ case "editundo" : EditUndo
+ case "editredo" : EditRedo
+ case "editrepeat" : EditRepeat
+ case "editpastespecial" : EditPasteSpecial
+ case "editpastespecialwriter" : EditPasteSpecialWriter
+ case "editsearchandreplace" : EditSearchAndReplace
+ case "editduplicate" : EditDuplicate
+ case "editgluepoints" : EditGluePoints
+ case "editdeleteslide" : EditDeleteSlide
+ case "editobjectproperties" : EditObjectProperties
+ case "editobjectedit" : EditObjectEdit
+ case "editobjectsavecopyas" : EditObjectSaveCopyAs
+ case "edithyperlink" : EditHyperlink
+ case "editlinkswriter" : EditLinksWriter
+ case "editfields" : EditFields
+
+ case "formatframe" : FormatFrame
+ case "formatcharttype" : FormatChartType
+ case "formatcontrol" : FormatControl
+ case "formateditpoints" : FormatEditPoints
+ case "formatsections" : FormatSections
+ case "formatchangecaseupper" : FormatChangeCaseUpper
+ case "formatchangecaselower" : FormatChangeCaseLower
+ case "formatarea" : FormatArea
+ case "formatarrangebringtofrontcalc" : FormatArrangeBringToFrontCalc
+ case "formatflipvertically" : FormatFlipVertically
+ case "formatfliphorizontally" : FormatFlipHorizontally
+ case "formatline" : FormatLine
+ case "formatpositionandsize" : FormatPositionAndSize
+ case "formatfontwork" : FormatFontwork
+ case "formatpagewriter" : FormatPageWriter
+ case "formatparagraph" : FormatParagraph
+ case "formatruby" : FormatRuby
+ case "formatstylebold" : FormatStyleBold
+ case "formatungroupdraw" : FormatUngroupDraw
+ case "formatexitgroupdraw" : FormatExitGroupDraw
+ case "formatgroupgroup" : FormatGroupGroup
+ case "formatgroupeditgroupcalc" : FormatGroupEditGroupCalc
+ case "formatalignmentlefttext" : FormatAlignmentLeftText
+ case "formatgraphics" : FormatGraphics
+ case "formatanchortopage" : FormatAnchorToPage
+ case "formatwrapcontour" : FormatWrapContour
+ case "formatwrapeditcontour" : FormatWrapEditContour
+ case "formatpagewriter" : FormatPageWriter
+ case "formatautoformatapply" : FormatAutoformatApply
+
+ case "insertslide" : InsertSlide
+ case "insertfieldsother" : InsertFieldsOther
+ case "insertgraphicsfromfile" : InsertGraphicsFromFile
+ case "insertindexesbibliographyentry" : InsertIndexesBibliographyEntry
+
+ case "contextpositionandsize" : ContextPositionAndSize
+ case "contextproperties" : ContextProperties
+
+ case "toolslanguagehyphenate" : ToolsLanguageHyphenate
+ case "toolsupdateallindexes" : ToolsUpdateAllIndexes
+ case "toolsupdatefields" : ToolsUpdateFields
+ case "toolsupdatelinks" : ToolsUpdateLinks
+ case "toolslanguagehangulhanjaconversion" : ToolsLanguageHangulHanjaConversion
+
+ case "viewslide" : ViewSlide
+ case "viewdrawing" : ViewDrawing
+ case "viewnotes" : ViewNotes
+ case "viewhandout" : ViewHandout
+ case "viewzoom" : ViewZoom
+ case "viewnormal" : ViewNormal
+ case "viewworkspacedrawingview" : ViewWorkspaceDrawingView
+ case "viewworkspaceoutlineview" : ViewWorkspaceOutlineView
+ case "viewworkspaceslideview" : ViewWorkspaceSlidesView
+ case "viewworkspacenotesview" : ViewWorkspaceNotesView
+ case "viewworkspacehandoutview" : ViewWorkspaceHandoutView
+
+ case else : warnlog( "Unknown slot called: " & cSlot )
+ end select
+
+ exit for ' This is only executed if the slot was called successfully
+ catch
+ wait( DELAY )
+ endcatch
+ next iRetries
+
+ ' Total time used
+ iTime = iRetries * DELAY
+
+ ' Timeout is -1
+ if ( iRetries = MAX_RETRIES ) then iTime = RC_TIMEOUT
+
+ if ( GVERBOSE ) then printlog( CFN & "Exit with rc=" & iTime )
+ hUseAsyncSlot() = iTime
+
+end function
+
+'*******************************************************************************
+
+function hClickButton( oButton as object ) as integer
+
+ dim iRetries as integer : iRetries = 0
+ dim iTime as integer : iTime = 0
+
+ const MAX_RETRIES = 50 ' Try to click the button max 50 times
+ const DELAY = 100 ' 100ms wait between retries
+ const RC_TIMEOUT = -1 ' Return -1 if the button is not available
+ const CFN = "global::tools::includes::required::hClickButton(): "
+
+ if ( GVERBOSE ) then printlog( "Click <" & oButton.name() & ">" )
+ WaitSlot()
+
+ for iRetries = 1 to MAX_RETRIES
+ try
+ oButton.click()
+ exit for
+ catch
+ wait( DELAY )
+ endcatch
+ next iRetries
+
+ ' Total time used
+ iTime = iRetries * DELAY
+
+ if ( iRetries = MAX_RETRIES ) then iTime = RC_TIMEOUT
+
+ if ( GVERBOSE ) then printlog( CFN & "Exit with rc=" & iTime )
+ hClickButton() = iTime
+
+end function
+
+'*******************************************************************************
+
+function hCloseDialog( oDialog as object, sUserFlags as string ) as boolean
+
+ ' this function closes a dialog providing three different methods while
+ ' removing the need for static sleep statements
+
+ const CFN = "global::tools::includes::required::t_tools3.inc::hCloseDialog(): "
+ const METHOD_CLOSE = 1
+ const METHOD_CANCEL = 2
+ const METHOD_OK = 3
+ const METHOD_202 = 4
+ const METHOD_YES = 5
+ const METHOD_NO = 6
+ const TIMEOUT = 2 ' Maximum time to wait for a dialog to close
+
+ dim sFlags as string : sFlags = lcase( sUserFlags )
+ dim iClosingMethod as integer
+ dim bDialogMustExist as boolean : bDialogMustExist = TRUE
+
+ hCloseDialog() = FALSE ' Set default returnvalue, assume failure
+
+ ' Find out which closing method was provided, "close" ist the default
+ if ( instr( sFlags, "cancel" ) ) then
+ iClosingMethod = METHOD_CANCEL
+ elseif ( instr( sFlags, "202" ) ) then
+ iClosingMethod = METHOD_202
+ elseif ( instr( sFlags, "yes" ) ) then
+ iClosingMethod = METHOD_YES
+ elseif ( instr( sFlags, "ok" ) ) then
+ iClosingMethod = METHOD_OK
+ elseif ( instr( sFlags, "no" ) ) then
+ iClosingMethod = METHOD_NO
+ else
+ iClosingMethod = METHOD_CLOSE
+ endif
+
+ ' Find out whether the dialog must exist (default) or is just closed as a precaution ("optional")
+ if ( instr( sFlags, "optional") ) then bDialogMustExist = FALSE
+
+ if ( GVERBOSE ) then
+ printlog( "Closing dialog <" & oDialog.name() & "> using the flags <" & sFlags & ">.")
+ endif
+
+ if ( oDialog.exists() ) then
+ try
+ select case( iClosingMethod )
+ case METHOD_CLOSE : oDialog.close()
+ case METHOD_CANCEL : oDialog.cancel()
+ case METHOD_202 : oDialog.click( 202 )
+ case METHOD_YES : oDialog.yes()
+ case METHOD_NO : oDialog.no()
+ case METHOD_OK : oDialog.ok()
+ case else :
+ warnlog( CFN & " Script error: Allowed closing methods are cancel, close, ok, yes, no and 202" )
+ end select
+ catch
+ warnlog( CFN & "This dialog does not provide the requested closing method" )
+ hCloseDialog() = FALSE
+ exit function
+ endcatch
+ else
+ if ( bDialogMustExist ) then
+ warnlog( CFN & "The requested dialog is not available, no action taken" )
+ hCloseDialog() = FALSE
+ exit function
+ endif
+ endif
+
+ ' Any other outcome until now returned FALSE. If we get here, we have a success.
+ if ( oDialog.notExists( TIMEOUT ) ) then hCloseDialog() = TRUE
+
+end function
+
+'*******************************************************************************
+
+function hWaitForObject( oControl as object, iTime as integer ) as integer
+
+ const CFN = "global::tools::includes::required::t_tools3.inc::hWaitForObject(): "
+ const RC_TIMEOUT = -1
+
+ dim iWait as integer
+
+ if ( GVERBOSE ) then printlog( CFN & "Entering function for control: " & oControl.name() )
+
+ WaitSlot( 2000 )
+
+ for iWait = 0 to iTime
+ try
+ if ( oControl.isEnabled() ) then
+ printlog( CFN & "Control is enabled: " & oControl.name() )
+ hWaitForObject() = iWait
+ exit function
+ else
+ if ( GVERBOSE ) then printlog( "Waiting..." )
+ endif
+ catch
+ wait( 1 )
+ endcatch
+ next iWait
+
+ printlog( CFN & "Control not found or not enabled, timeout reached" )
+ hWaitForObject() = RC_TIMEOUT
+
+end function
diff --git a/testautomation/global/tools/record_macro.bas b/testautomation/global/tools/record_macro.bas
deleted file mode 100755
index d4d7095e9efc..000000000000
--- a/testautomation/global/tools/record_macro.bas
+++ /dev/null
@@ -1,54 +0,0 @@
-'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
-'/************************************************************************
-'*
-'* owner : thorsten.bosbach@sun.com
-'*
-'* short description : Records your actions in the Office at the cursorposition in the TestTool window
-'*
-'\*************************************************************************************
-
-sub main
-' start with <F5>; wait until it got runned,
-' open a new window in testtool,
-' perform some actions in the office,
-' take a look into the testtool window
-
- RecordMacro true
-
-' if you're done, comment the above line and uncomment the following line,
-' run it <F5> and the macromodus is left
-
-' RecordMacro false
-
-end sub
-
-sub LoadIncludeFiles
- use "global\system\includes\declare.inc"
- use "global\system\includes\gvariabl.inc"
- Call GetUseFiles()
-end sub
-
diff --git a/testautomation/global/win/bars.win b/testautomation/global/win/bars.win
index 525be7d897ca..f2c40134d964 100755
--- a/testautomation/global/win/bars.win
+++ b/testautomation/global/win/bars.win
@@ -804,7 +804,7 @@ ManageBreakpoints .uno:ManageBreakPoints
Modules SID_BASICIDE_MODULEDLG
ObjectCatalog SID_BASICIDE_OBJCAT
ProcedureStep .uno:BasicStepOver
-SaveSourceTest .uno:SaveBasicAs
+SaveSourceText .uno:SaveBasicAs
SingleStep .uno:BasicStepInto
StepBack .uno:BasicStepOut
'-------------------------------------------------------------------------
diff --git a/testautomation/global/win/dial_p_s.win b/testautomation/global/win/dial_p_s.win
index accef3714a3b..84d1978a30d9 100755
--- a/testautomation/global/win/dial_p_s.win
+++ b/testautomation/global/win/dial_p_s.win
@@ -6,9 +6,13 @@ PasswortBestaetigen sfx2:Edit:DLG_PASSWD:ED_PASSWD_CONFIRM
*PasswordFileOpen HID_DLG_PASSWORD_UUI
PasswortName uui:Edit:DLG_UUI_PASSWORD:ED_PASSWORD
-*PasswordFileSave HID_DLG_PASSWORD_CRT
-Password uui:Edit:DLG_UUI_PASSWORD_CRT:ED_PASSWORD_CRT
-PasswordConfirm uui:Edit:DLG_UUI_PASSWORD_CRT:ED_PASSWORD_REPEAT
+*PasswordFileSave HID_DLG_PASSWORD_TO_OPEN_MODIFY
+Password HID_DLG_PASSWORD_TO_OPEN_MODIFY_PASSWORD_TO_OPEN
+PasswordConfirm HID_DLG_PASSWORD_TO_OPEN_MODIFY_CONFIRM_PASSWORD_TO_OPEN
+PasswordMoreOptions HID_DLG_PASSWORD_TO_OPEN_MODIFY_MORE
+PasswordFileReadonly HID_DLG_PASSWORD_TO_OPEN_MODIFY_FILE_READONLY
+PasswordToModify HID_DLG_PASSWORD_TO_OPEN_MODIFY_PASSWORD_TO_MODIFY
+PasswordToModifyConfirm HID_DLG_PASSWORD_TO_OPEN_MODIFY_CONFIRM_PASSWORD_TO_MODIFY
*PasswortEingeben SID_CHG_PROTECT
SchutzAufheben HID_CHG_PROTECT
diff --git a/testautomation/global/win/edia_d_h.win b/testautomation/global/win/edia_d_h.win
index 2829054eba2d..35869e0c2b72 100755
--- a/testautomation/global/win/edia_d_h.win
+++ b/testautomation/global/win/edia_d_h.win
@@ -420,9 +420,13 @@ ChooseARemoteDirectoryB HID_FTP_BTN_PATH
CancelB HID_FTP_CANCEL
*LoginDialog HID_DLG_LOGIN
-LoginName uui:Edit:DLG_UUI_LOGIN:ED_LOGIN_USERNAME
-LoginPassword uui:Edit:DLG_UUI_LOGIN:ED_LOGIN_PASSWORD
-LoginSavePassword uui:CheckBox:DLG_UUI_LOGIN:CB_LOGIN_SAVEPASSWORD
+LoginName HID_LOGIN_DLG_USER_NAME
+LoginPassword HID_LOGIN_DLG_PASSWORD
+LoginSavePassword HID_LOGIN_DLG_REMEMBER_PASSWORD
+Path HID_LOGIN_DLG_PATH
+Browse HID_LOGIN_DLG_BROWSE
+Account HID_LOGIN_DLG_ACCOUNT
+UseSystemCredentials HID_LOGIN_DLG_USE_SYSTEM_CREDENTIALS
*Gallery SID_GALLERY
NewTheme HID_GALLERY_NEWTHEME
@@ -498,3 +502,4 @@ Custom sc:RadioButton:RID_SCDLG_TEXT_IMPORT_OPTIONS:RB_CUSTOM
CustomLanguage sc:ListBox:RID_SCDLG_TEXT_IMPORT_OPTIONS:LB_CUSTOM_LANG
DetectSpecialNumbers sc:CheckBox:RID_SCDLG_TEXT_IMPORT_OPTIONS:BTN_CONVERT_DATE
+*HyperlinkDialog HID_HYPERLINK_DIALOG
diff --git a/testautomation/global/win/edia_t_z.win b/testautomation/global/win/edia_t_z.win
index 670a872ac657..4104b70f0f2a 100755
--- a/testautomation/global/win/edia_t_z.win
+++ b/testautomation/global/win/edia_t_z.win
@@ -1,3 +1,5 @@
+*TabColor FID_TAB_SET_TAB_BG_COLOR
+
*TableDesignTable HID_TABDESIGN_BACKGROUND
TableWindow HID_CTL_TABLEEDIT
Fieldname HID_TABDESIGN_NAMECELL
diff --git a/testautomation/global/win/etab_p_s.win b/testautomation/global/win/etab_p_s.win
index 46f4a46b2f63..806645915f07 100755
--- a/testautomation/global/win/etab_p_s.win
+++ b/testautomation/global/win/etab_p_s.win
@@ -83,14 +83,20 @@ IndentAfter sw:MetricField:TP_SECTION_INDENTS:MF_AFTER
*TabSecurity cui:TabPage:RID_SVXPAGE_INET_SECURITY
MacroSecurity cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_MACROSEC
-RecommendToOpenDocumentReadOnly cui:CheckBox:RID_SVXPAGE_INET_SECURITY:CB_SEC_RECOMMREADONLY
-RecordChanges cui:CheckBox:RID_SVXPAGE_INET_SECURITY:CB_SEC_RECORDCHANGES
-Protect cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_PROTRECORDS
PersistentlySavePasswords cui:CheckBox:RID_SVXPAGE_INET_SECURITY:CB_SEC_SAVEPASSWORDS
Options cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_SECURITYOPTIONS
MasterPassword cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_MASTERPASSWORD
ShowPasswords cui:PushButton:RID_SVXPAGE_INET_SECURITY:PB_SEC_CONNECTIONS
+*TabSecurityProperties HID_DOCINFOSECURITY
+EnterPasswordToOpen HID_SECURITYTAB_PASSWORD_TO_OPEN
+ReEnterPasswordToOpen HID_SECURITYTAB_CONFIRM_PASSWORD_TO_OPEN
+EnterPasswordToModify HID_SECURITYTAB_PASSWORD_TO_MODIFY
+ReEnterPasswordToModify HID_SECURITYTAB_CONFIRM_PASSWORD_TO_MODIFY
+RecommendToOpenDocumentReadOnly HID_SECURITYTAB_OPEN_FILE_READONLY
+RecordChanges HID_SECURITYTAB_RECORD_CHANGES
+Protect HID_SECURITYTAB_PROTECTION
+
*TabSecurityOptionsAndWarnings HID_DLG_SECURITY_OPTIONS
SavingOrSendingDocuments cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_SAVESENDDOCS
SigningDocuments cui:CheckBox:RID_SVXDLG_SECURITY_OPTIONS:CB_SIGNDOCS
diff --git a/testautomation/graphics/optional/includes/global/export_graphic.inc b/testautomation/graphics/optional/includes/global/export_graphic.inc
index 7c16129e41ae..e1d1479f5ee1 100644
--- a/testautomation/graphics/optional/includes/global/export_graphic.inc
+++ b/testautomation/graphics/optional/includes/global/export_graphic.inc
@@ -27,106 +27,81 @@
'*
'* Owner : wolfram.garten@sun.com
'*
-'* short description : Graphics Export A-tests. (More durable ones)
-'*
-'*******************************************************************************
-'*
-' #1 tEPS
-' #1 tGIF
-' #1 tJPEG
-' #1 tPBM
-' #1 tPCT
-' #1 tPGM
-' #1 tPPM
-' #1 tRAS
-' #1 tTIFF
-' #1 tXPM
+'* short description : Graphics Export A-tests
'*
'\******************************************************************************
+
testcase tEPS
dim x as integer
dim i as integer
- dim sFilter as string
- dim sExt as string
- sFilter = "EPS - Encapsulated PostScript (.eps)"
- sExt = ".eps"
+ const sFilter = "EPS - Encapsulated PostScript (.eps)"
+ const sExt = ".eps"
printlog "open the document"
- hFileOpen ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString)
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
+ if ( hCallExport ( OutputGrafikTBO , sFilter ) ) then
Kontext "EPSOptionen"
- if EPSOptionen.Exists (2) then
+ if ( EPSOptionen.Exists( 2 ) ) then
printlog "check if all properties have the right count, and depend on each other"
' they do not affect annything, i can check (TBO)
' VorschauTIF.Check
' InterchangeEPSI.Check
Level1.Check
if Farbe.IsEnabled then warnlog " :-("
- if Graustufen.IsEnabled then warnlog " :-("
- if LZWKodierung.IsEnabled then warnlog " :-("
- if Keine.IsEnabled then warnlog " :-("
- ' if (TextEinstellungen.IsEnabled <> TRUE) then warnlog " :-("
- Level2.Check
- if (Farbe.IsEnabled <> TRUE) then warnlog " :-("
- if (Graustufen.IsEnabled <> TRUE) then warnlog " :-("
- if (LZWKodierung.IsEnabled <> TRUE) then warnlog " :-("
- if (Keine.IsEnabled <> TRUE) then warnlog " :-("
- ' if (TextEinstellungen.IsEnabled <> TRUE) then warnlog " :-("
- printlog "'Color Resolution' listbox contains eight items"
- ' x = TextEinstellungen.GetItemCount
- ' if x <> 2 then warnlog "'TextEinstellungen' Count is wrong; should:2, is:" + x
- ' for i = 1 to x
- ' TextEinstellungen.Select i
- ' sleep 1
- ' Printlog " - " + i + ": '" +TextEinstellungen.GetSelText + "'"
- ' next i
- printlog "leave dialog with cancel -> there has to be no file created!"
- EPSOptionen.Cancel
- sleep 5
- if ( dir(OutputGrafikTBO+sExt) = "") then ' inspired by bug #99932 Graphic is exported though cancel is pressed
- Printlog "Ok :-)"
- else
- warnlog "Dialog was canceled, but file got saved, too :-( - i35177"
- endif
- else
- Warnlog "No '" + sFilter + "'-Option-Dialog!"
- i=5
- end if
- sleep 2
- Kontext "Active"
- if Active.Exists(2) then
- Warnlog "'" + sFilter + "' has a problem"
- Active.OK
- end if
- end if
- printlog " now save it realy and load the file afterwards"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
- Kontext "EPSOptionen"
- if EPSOptionen.Exists (2) then
- printlog "TextEinstellungen.select 2"
- EPSOptionen.OK
- sleep 5
- endif
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
- else
- warnlog "File didn't get saved :-("
- endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- if ( lcase( gPlatform ) <> "osx" ) then
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
- else
- qaErrorLog "#i100253# crash on MacOS X 10.4"
+ if Graustufen.IsEnabled then warnlog " :-("
+ if LZWKodierung.IsEnabled then warnlog " :-("
+ if Keine.IsEnabled then warnlog " :-("
+ ' if (TextEinstellungen.IsEnabled <> TRUE) then warnlog " :-("
+ Level2.Check
+ if (Farbe.IsEnabled <> TRUE) then warnlog " :-("
+ if (Graustufen.IsEnabled <> TRUE) then warnlog " :-("
+ if (LZWKodierung.IsEnabled <> TRUE) then warnlog " :-("
+ if (Keine.IsEnabled <> TRUE) then warnlog " :-("
+ ' if (TextEinstellungen.IsEnabled <> TRUE) then warnlog " :-("
+ printlog "'Color Resolution' listbox contains eight items"
+ ' x = TextEinstellungen.GetItemCount
+ ' if x <> 2 then warnlog "'TextEinstellungen' Count is wrong; should:2, is:" + x
+ ' for i = 1 to x
+ ' TextEinstellungen.Select i
+ ' sleep 1
+ ' Printlog " - " + i + ": '" +TextEinstellungen.GetSelText + "'"
+ ' next i
+ printlog "leave dialog with cancel -> there has to be no file created!"
+ hCloseDialog( EPSOptionen, "cancel" )
+
+ if ( FileExists( OutputGrafikTBO+sExt ) ) then ' inspired by bug #99932 Graphic is exported though cancel is pressed
+ warnlog "Dialog was canceled, but file got saved, too :-( - i35177"
+ endif
+ else
+ warnlog( "No export options dialog was displayed" )
+ end if
+
+ Kontext "Active"
+ if Active.Exists(2) then
+ Warnlog "'" + sFilter + "' has a problem"
+ Active.OK
+ end if
+ end if
+
+ printlog( "Save the file" )
+ if ( hCallExport( OutputGrafikTBO, sFilter ) ) then
+
+ Kontext "EPSOptionen"
+ if ( EPSOptionen.Exists( 2 ) ) then
+ printlog "TextEinstellungen.select 2"
+ hCloseDialog( EPSOptionen, "ok" )
+ else
+ warnlog( "No export options dialog was displayed" )
+ endif
+
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
endif
- endif
- call hCloseDocument
+ call hCloseDocument
endcase 'tEPS
'-------------------------------------------------------------------------
@@ -135,8 +110,6 @@ testcase tPCT
dim x as integer
dim i as integer
dim iWaitIndex as integer
- dim sFilter as string
- dim sExt as string
dim bTemp as boolean
dim sX as string
dim sY as string
@@ -144,224 +117,205 @@ testcase tPCT
dim sX2 as string
dim sY2 as string
dim sDocument as string
+ dim sOutputFile as string
+
+ const FILE_WRITE_TIMEOUT = 200 ' seconds
- sFilter = "PCT - Mac Pict (.pct;.pict)"
- sExt = ".pct"
+ const sFilter = "PCT - Mac Pict (.pct;.pict)"
+ const sExt = ".pct"
printlog "open the document"
- sDocument = ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString)
- hFileOpen sDocument
+ sDocument = convertpath( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
+ hFileOpen( sDocument )
+
+ if ( hCallExport( OutputGrafikTBO , sFilter ) ) then
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
Kontext "PICTOptionen"
- if PICTOptionen.Exists (2) then
+ printlog( "Export options dialog" )
+ if ( PICTOptionen.Exists( 2 ) ) then
+
printlog "check if all properties have the right count, and depend on each other"
Original.Check
if Breite.IsEnabled then warnlog " :-("
- if Hoehe.IsEnabled then warnlog " :-("
- Groesse.Check
- Breite.More
- Hoehe.Less
- printlog "leave dialog with cancel -> there has to be no file created!"
- PICTOptionen.Cancel
- sleep 5
- if ( dir(OutputGrafikTBO+sExt) = "") then
- Printlog "Ok :-)"
- else
- warnlog "Dialog was canceled, but file got saved, too :-( - i35177"
- endif
- else
- Warnlog "No '" + sFilter + "' -Dialog!"
- i=5
- end if
- sleep 2
- Kontext "Active"
- if Active.Exists(2) then
- Warnlog " '" + sFilter + "' has a problem"
- Active.OK
- end if
- end if
- printlog " now save it realy and load the file afterwards"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
- Kontext "PICTOptionen"
- if PICTOptionen.Exists (2) then
- Groesse.Check
- Breite.Less
- Hoehe.More
- PICTOptionen.OK
- iWaitIndex = 0
- do while PICTOptionen.Exists AND iWaitIndex < 30
- sleep (1)
- iWaitIndex = iWaitIndex + 1
- loop
- endif
- i=0
- while ((NOT fileExists(OutputGrafikTBO+sExt)) AND (i<36))
- inc(i)
- sleep(5)
- wend
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
- else
- warnlog "File didn't get saved :-("
- endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
- endif
- hCloseDocument ()
- printlog " now save a SELECTION in ORIGINAL SIZE and load the file afterwards"
- hFileOpen (sDocument)
- sleep (10)
-
- printlog "check if the document is writable"
- if fIsDocumentWritable = false then
- printlog "make the document writable and check if it's succesfull"
- if fMakeDocumentWritable = false then
- warnlog "The document can't be make writeable. Test stopped."
- goto endsub
- endif
+ if Hoehe.IsEnabled then warnlog " :-("
+ Groesse.Check
+ Breite.More
+ Hoehe.Less
+
+ printlog "leave dialog with cancel -> there has to be no file created!"
+ hCloseDialog( PICTOptionen, "cancel" )
+
+ if ( FileExists( OutputGrafikTBO + sExt ) ) then
+ warnlog( "#i35177# - dialog <PictOptions> canceled, still the file was saved" )
endif
+ else
+ warnlog( "No export options dialog was displayed" )
+ end if
+
+ Kontext "Active"
+ if Active.Exists(2) then
+ Warnlog " '" + sFilter + "' has a problem"
+ Active.OK
+ end if
- hTypeKeys ("<escape><tab>")
- fGetSizeXY sx1, sY, TRUE
- if hCallExport (OutputGrafikTBO + "1" , sFilter, TRUE ) = TRUE then
- Kontext "PICTOptionen"
- if PICTOptionen.Exists (2) then
- Original.Check
- PICTOptionen.OK
- iWaitIndex = 0
- do while PICTOptionen.Exists AND iWaitIndex < 30
- sleep (1)
- iWaitIndex = iWaitIndex + 1
- loop
- endif
- i=0
- while ((NOT fileExists(OutputGrafikTBO+ "1"+sExt)) AND (i<36))
- inc(i)
- sleep(5)
- wend
- if ( dir(OutputGrafikTBO + "1"+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO + "1"+sExt + "'"
+ end if
+
+ printlog " now save it realy and load the file afterwards"
+ if ( hCallExport( OutputGrafikTBO, sFilter ) ) then
+
+ Kontext "PICTOptionen"
+ printlog( "Export options dialog" )
+ if ( PICTOptionen.Exists( 2 ) ) then
+ Groesse.Check
+ Breite.Less
+ Hoehe.More
+ hCloseDialog( PICTOptionen, "ok" )
+ else
+ warnlog( "No export options dialog was displayed" )
+ endif
+
+ sOutputFile = OutputGrafikTBO+sExt
+
+ if ( hWaitForOutputFile( sOutputFile ) ) then
+
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( sOutputFile ) ' local helper function, see bottom of this file
+ else
+ warnlog( "File was not saved: " & sOutputFile )
+ endif
+
+ endif
+
+ hFileReOpen( sDocument )
+
+ printlog "check if the document is writable"
+ if ( not fIsDocumentWritable ) then
+ printlog( "Document is write protected, changing state" )
+ if ( not fMakeDocumentWritable ) then
+ warnlog "The document can't be make writeable. Test stopped."
+ goto endsub
+ endif
+ endif
+
+ hTypeKeys ("<escape><tab>")
+ fGetSizeXY sx1, sY, TRUE
+
+ if ( hCallExport( OutputGrafikTBO + "1", sFilter, TRUE ) ) then
+
+ Kontext "PICTOptionen"
+ printlog( "Export options dialog" )
+ if ( PICTOptionen.Exists( 2 ) ) then
+ Original.Check
+ hCloseDialog( PICTOptionen, "ok" )
+ else
+ warnlog( "No export options dialog was displayed" )
+ endif
+
+ sOutputFile = OutputGrafikTBO + "1" + sExt
+ if ( hWaitForOutputFile( sOutputFile ) ) then
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( sOutputFile ) ' local helper function, see bottom of this file
+ else
+ warnlog( "File was not saved: " & sOutputFile )
+ endif
+
+ bTemp = fGetSizeXY( sx1, sY, bTemp )
+ if (bTemp = FALSE) then
+ warnlog "Selected original size NOT OK :-("
+ endif
+ endif
+
+ hFileReOpen( "" )
+ hRechteckErstellen ( 10, 10, 30, 40 )
+
+ if ( hCallExport( OutputGrafikTBO + "2" , sFilter, TRUE ) ) then
+
+ Kontext "PICTOptionen"
+ printlog( "Export options dialog" )
+ if ( PICTOptionen.Exists( 2 ) ) then
+ Groesse.Check
+ Breite.SetText "9"
+ Hoehe.SetText "9"
+ Groesse.Check
+
+ printlog "Check 'Size' one more time to make the change go through"
+ sx1 = Breite.GetText
+ sY = Hoehe.GetText
+ hCloseDialog( PICTOptionen, "ok" )
+ else
+ warnlog( "No export options dialog was displayed" )
+ endif
+
+ sOutputFile = OutputGrafikTBO + "2" + sExt
+
+ if ( not hWaitForOutputFile( sOutputFile ) ) then
+ warnlog( "File was not saved: " & sOutputFile )
+ endif
+
+ printlog( "Reload file if it exists. Warn if not" )
+ hFileReOpen( sOutputFile )
+
+ kontext "DocumentDraw"
+ DocumentDraw.TypeKeys ("<escape><tab>")
+ ContextOriginalSize
+ bTemp = fGetSizeXY( sx1, sY, bTemp )
+ if ( not bTemp ) then warnlog "Selected original size NOT OK :-("
+ endif
+
+ if ( hCallExport( OutputGrafikTBO + "3", sFilter, TRUE ) ) then
+
+ Kontext "PICTOptionen"
+ printlog( "Export options dialog" )
+ if ( PICTOptionen.Exists( 2 ) ) then
+ Groesse.Check
+ sX2 = Breite.GetText
+ if (LiberalMeasurement(sx1, sX2)) <> TRUE then
+ if (val(str(StrToDouble(sx1)+5)) >= StrToDouble(sX2) ) AND (val(str(StrToDouble ( sx1 )-5)) <= StrToDouble ( sX2 )) then
+ Printlog "Width was ok. Expected: " + sx1 + "' was: '" + sX2 + "'"
else
- warnlog "File didn't get saved :-("
- endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO + "1"+sExt )
- bTemp = FALSE
- fGetSizeXY sx1, sY, bTemp
- if (bTemp = FALSE) then
- warnlog "Selected original size NOT OK :-("
+ warnLog "Width is different expected: '" + sx1 + "' is: '" + sX2 + "'"
endif
endif
- hCloseDocument ()
- printlog " now CREATE a rectangle, select it, save it in SIZE and load the file afterwards"
- hNewDocument()
- hRechteckErstellen ( 10, 10, 30, 40 )
- if hCallExport (OutputGrafikTBO + "2" , sFilter, TRUE ) = TRUE then
- Kontext "PICTOptionen"
- if PICTOptionen.Exists (2) then
- Groesse.Check
- Breite.SetText "9"
- Hoehe.SetText "9"
- Groesse.Check
- printlog "Check 'Size' one more time to make the change go through"
- sx1 = Breite.GetText
- sY = Hoehe.GetText
- PICTOptionen.OK
- iWaitIndex = 0
- do while PICTOptionen.Exists AND iWaitIndex < 30
- sleep (1)
- iWaitIndex = iWaitIndex + 1
- loop
- endif
- i=0
- while ((NOT fileExists(OutputGrafikTBO+ "2"+sExt)) AND (i<36))
- inc(i)
- sleep(5)
- wend
- if ( dir(OutputGrafikTBO + "2"+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO + "2"+sExt + "'"
+ sY2 = Hoehe.GetText
+ if (LiberalMeasurement(sY, sY2)) <> TRUE then
+ if ( val(str(StrToDouble(sY)+5)) >= StrToDouble(sY2) ) AND (val(str(StrToDouble ( sY )-5)) <= StrToDouble ( sY2 )) then
+ Printlog "Height was ok. Expected: " + sY + "' was: '" + sY2 + "'"
else
- warnlog "File didn't get saved :-("
- endif
- hCloseDocument ()
- sleep 5
- hFileOpen (OutputGrafikTBO + "2"+sExt)
- kontext "DocumentDraw"
- DocumentDraw.TypeKeys ("<escape><tab>")
- ContextOriginalSize
- bTemp = FALSE
- fGetSizeXY sx1, sY, bTemp
- if (bTemp = FALSE) then
- warnlog "Selected original size NOT OK :-("
- endif
- endif
- if hCallExport (OutputGrafikTBO + "3" , sFilter, TRUE ) = TRUE then
- Kontext "PICTOptionen"
- if PICTOptionen.Exists (2) then
- Groesse.Check
- sX2 = Breite.GetText
- if (LiberalMeasurement(sx1, sX2)) <> TRUE then
- if (val(str(StrToDouble(sx1)+5)) >= StrToDouble(sX2) ) AND (val(str(StrToDouble ( sx1 )-5)) <= StrToDouble ( sX2 )) then
- Printlog "Width was ok. Expected: " + sx1 + "' was: '" + sX2 + "'"
- else
- warnLog "Width is different expected: '" + sx1 + "' is: '" + sX2 + "'"
- endif
- endif
- sY2 = Hoehe.GetText
- if (LiberalMeasurement(sY, sY2)) <> TRUE then
- if ( val(str(StrToDouble(sY)+5)) >= StrToDouble(sY2) ) AND (val(str(StrToDouble ( sY )-5)) <= StrToDouble ( sY2 )) then
- Printlog "Height was ok. Expected: " + sY + "' was: '" + sY2 + "'"
- else
- warnLog "Height is different expected: '" + sY + "' is: '" + sY2 + "'"
- endif
- endif
- PICTOptionen.Cancel
- sleep 5
+ warnLog "Height is different expected: '" + sY + "' is: '" + sY2 + "'"
endif
endif
+ hCloseDialog( PICTOptionen, "cancel" )
+ else
+ warnlog( "No export options dialog was displayed" )
+ endif
+ endif
- call hCloseDocument
+ call hCloseDocument
endcase 'tPCT
'-------------------------------------------------------------------------------
testcase tPBM
- dim x as integer
- dim i as integer
- dim sFilter as string
- dim sExt as string
-
- sFilter = "PBM - Portable Bitmap (.pbm)"
- sExt = ".pbm"
+ const sFilter = "PBM - Portable Bitmap (.pbm)"
+ const sExt = ".pbm"
printlog "Open the document"
- hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString ))
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString )
printlog "Save it"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
+ if ( hCallExport (OutputGrafikTBO , sFilter ) ) then
+
Kontext "PBMOptionen"
- if PBMOptionen.Exists (2) then
+ if ( PBMOptionen.Exists( 2 ) ) then
Ascii.Check
- PBMOptionen.OK
- sleep 5
- endif
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
+ hCloseDialog( PBMOptionen, "ok" )
else
- warnlog "File didn't get saved :-("
+ warnlog( "No export options dialog was displayed" )
endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
+
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+
endif
call hCloseDocument
@@ -370,35 +324,26 @@ endcase 'tPBM
'-------------------------------------------------------------------------------
testcase tPGM
- dim x as integer
- dim i as integer
- dim sFilter as string
- dim sExt as string
-
- sFilter = "PGM - Portable Graymap (.pgm)"
- sExt = ".pgm"
+ const sFilter = "PGM - Portable Graymap (.pgm)"
+ const sExt = ".pgm"
printlog "Open the document"
- hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString ))
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
printlog "Save it"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
+ if ( hCallExport (OutputGrafikTBO , sFilter ) ) then
+
Kontext "PGMOptionen"
- if PGMOptionen.Exists (2) then
+ if ( PGMOptionen.Exists( 2 ) ) then
Ascii.Check
- PGMOptionen.OK
- sleep 5
- endif
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
+ hCloseDialog( PGMOptionen, "ok" )
else
- warnlog "File didn't get saved :-("
+ warnlog( "No export options dialog was displayed" )
endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
+
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+
endif
call hCloseDocument
@@ -407,35 +352,26 @@ endcase 'tPGM
'-------------------------------------------------------------------------------
testcase tPPM
- dim x as integer
- dim i as integer
- dim sFilter as string
- dim sExt as string
-
- sFilter = "PPM - Portable Pixelmap (.ppm)"
- sExt = ".ppm"
+ const sFilter = "PPM - Portable Pixelmap (.ppm)"
+ const sExt = ".ppm"
printlog "Open the document"
- hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString ))
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
printlog "Save it"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
+ if ( hCallExport (OutputGrafikTBO , sFilter ) ) then
+
Kontext "PPMOptionen"
- if PPMOptionen.Exists (2) then
+ if ( PPMOptionen.Exists( 2 ) ) then
Ascii.Check
- PPMOptionen.OK
- sleep 5
- endif
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
+ hCloseDialog( PPMOptionen, "ok" )
else
- warnlog "File didn't get saved :-("
+ warnlog( "No export options dialog was displayed" )
endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
+
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+
endif
call hCloseDocument
@@ -444,29 +380,18 @@ endcase 'tPPM
'------------------------------------------------------------------------------
testcase tRAS
- dim x as integer
- dim i as integer
- dim sFilter as string
- dim sExt as string
-
- sFilter = "RAS - Sun Raster Image (.ras)"
- sExt = ".ras"
+ const sFilter = "RAS - Sun Raster Image (.ras)"
+ const sExt = ".ras"
printlog "Open the document"
- hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString ))
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
printlog "Save it"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
- else
- warnlog "File didn't get saved :-("
- endif
+ if ( hCallExport( OutputGrafikTBO, sFilter ) ) then
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+ else
+ warnlog( "No export options dialog was displayed" )
endif
call hCloseDocument
@@ -477,27 +402,19 @@ testcase tTIFF
dim x as integer
dim i as integer
- dim sFilter as string
- dim sExt as string
- sFilter = "TIFF - Tagged Image File Format (.tif;.tiff)"
- sExt = ".tif"
+ const sFilter = "TIFF - Tagged Image File Format (.tif;.tiff)"
+ const sExt = ".tif"
printlog "Open the document"
hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString ))
printlog "Save it"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
- else
- warnlog "File didn't get saved :-("
- endif
+ if ( hCallExport (OutputGrafikTBO , sFilter ) ) then
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+ else
+ warnlog( "No export options dialog was displayed" )
endif
call hCloseDocument
@@ -506,29 +423,18 @@ endcase 'tTIFF
'------------------------------------------------------------------------------
testcase tXPM
- dim x as integer
- dim i as integer
- dim sFilter as string
- dim sExt as string
-
- sFilter = "XPM - X PixMap (.xpm)"
- sExt = ".xpm"
+ const sFilter = "XPM - X PixMap (.xpm)"
+ const sExt = ".xpm"
printlog "Open the document"
- hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString ))
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
printlog "save it"
if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
- else
- warnlog "File didn't get saved :-("
- endif
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+ else
+ warnlog( "No export options dialog was displayed" )
endif
call hCloseDocument
@@ -537,36 +443,27 @@ endcase 'tXPM
'-------------------------------------------------------------------------------
testcase tGIF
- dim x as integer
- dim i as integer
- dim sFilter as string
- dim sExt as string
-
- sFilter = "GIF - Graphics Interchange Format (.gif)"
- sExt = ".gif"
+ const sFilter = "GIF - Graphics Interchange Format (.gif)"
+ const sExt = ".gif"
printlog "open the document"
- hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString)
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
printlog "save it"
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
+ if ( hCallExport( OutputGrafikTBO, sFilter ) ) then
+
Kontext "GIFOptionen"
if GIFOptionen.Exists (2) then
Interlace.Uncheck
TransparentSpeichern.UnCheck
- GIFOptionen.OK
- sleep 5
- endif
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
+ hCloseDialog( GIFOptionen, "ok" )
else
- warnlog "File didn't get saved :-("
+ warnlog( "No export options dialog was displayed" )
endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
+
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+
endif
call hCloseDocument
@@ -575,39 +472,92 @@ endcase 'tGIF
'-------------------------------------------------------------------------------
testcase tJPEG
- dim x as integer
- dim i as integer
- dim sFilter as string
- dim sExt as string
-
- sFilter = "JPEG - Joint Photographic Experts Group (.jpg;.jpeg;.jfif;.jif;.jpe)"
- sExt = ".jpg"
+ const sFilter = "JPEG - Joint Photographic Experts Group (.jpg;.jpeg;.jfif;.jif;.jpe)"
+ const sExt = ".jpg"
printlog "Open the document"
- hFileOpen (ConvertPath ( gTesttoolPath + "graphics\required\input\graphicexport."+ExtensionString)
+ hFileOpen( gTesttoolPath + "graphics\required\input\graphicexport." + ExtensionString )
printlog " save it "
- if hCallExport (OutputGrafikTBO , sFilter ) = TRUE then
+ if ( hCallExport( OutputGrafikTBO , sFilter ) ) then
+
Kontext "JpegOptionen"
- if JpegOptionen.Exists (2) then
+ if ( JpegOptionen.Exists( 2 ) ) then
Echtfarben.Check
Qualitaet.ToMin
- JpegOptionen.OK
- sleep 5
- endif
- if ( dir(OutputGrafikTBO+sExt) <> "") then
- Printlog "Ok :-) Saved as: '" + OutputGrafikTBO+sExt + "'"
+ hCloseDialog( JpegOptionen, "ok" )
else
- warnlog "File didn't get saved :-("
+ warnlog( "No export options dialog was displayed" )
endif
- hCloseDocument ()
- sleep 5
- hNewDocument()
- sleep 5
- Call hGrafikEinfuegen ( OutputGrafikTBO+sExt )
+
+ printlog( "Close file and re-insert graphics into new document" )
+ hInsertGraphicsToNewFile( OutputGrafikTBO + sExt ) ' local helper function, see bottom of this file
+
endif
call hCloseDocument
endcase 'tJPEG
-'-------------------------------------------------------------------------
+
+'*******************************************************************************
+
+function hInsertGraphicsToNewFile( sOutputFile as string )
+
+ if ( FileExists( sOutputFile ) ) then
+ hFileReOpen( "" )
+ Call hGrafikEinfuegen( sOutputFile )
+ else
+ warnlog( "File not saved: " & sOutputFile )
+ endif
+
+end function
+
+'*******************************************************************************
+
+function hFileReOpen( cFile as string ) as boolean
+
+ dim iDocumentCount as integer : iDocumentCount = getDocumentCount
+ hFileReopen() = false
+
+ hCloseDocument()
+
+ if ( cFile = "" ) then
+ hNewDocument()
+ else
+ if ( FileExists( cFile ) ) then
+ hFileOpen( cFile )
+ else
+ warnlog( "hFileReOpen(): File does not exist: " & cFile )
+ endif
+ endif
+
+ if ( getDocumentCount = iDocumentCount ) then hFileReOpen() = true
+
+end function
+
+'*******************************************************************************
+
+function hWaitForOutputFile( sOutputFile as string ) as boolean
+
+ const FILE_WRITE_TIMEOUT = 30
+ dim iWait as integer : iWait = 0
+
+ for iWait = 1 to FILE_WRITE_TIMEOUT
+
+ ' File found
+ if ( FileExists( sOutputFile ) ) then
+ hWaitForOutputFile() = true
+ exit function
+ endif
+
+ ' Timeout
+ if ( iWait = FILE_WRITE_TIMEOUT ) then
+ hWaitForOutputFile() = false
+ exit function
+ endif
+
+ wait( 1000 )
+
+ next iWait
+
+end function
diff --git a/testautomation/graphics/optional/includes/global/export_graphic_2.inc b/testautomation/graphics/optional/includes/global/export_graphic_2.inc
index 67c456201b45..2a2cbac2020a 100644
--- a/testautomation/graphics/optional/includes/global/export_graphic_2.inc
+++ b/testautomation/graphics/optional/includes/global/export_graphic_2.inc
@@ -1430,3 +1430,91 @@ testcase tWMF
endcase 'tWMF
'-------------------------------------------------------------------------
+
+function fGetFileText (sFilename as string, iCount as long) as string
+'/// This function is for getting the first or last n characters of a file
+'///+<u>Input</u>:<ul><li>filename</li><li>number</li></ul>If the number greater 0 then get n characters from start.
+'///+A number smaller 0 get from end of file.
+'///+<u>Output</u>:<ul><li>string with <b><i>n</i></b> characters</li></ul>
+
+ dim iFile as integer ' filehandle
+ dim iTem as integer ' get 2 bytes of the file
+ dim iTemByte(2) as integer ' move 1 byte from iTem in each item
+ dim sTemp as string ' string of file
+ dim iSize as long ' size in bytes of file
+ dim i as long ' runner :-)
+
+ iFile = FreeFile
+' Printlog "FreeFile: " + iFile
+ if (dir (sFilename) <> "") then
+' Printlog "FileLen: " + FileLen(sFile)
+ Open sFilename For binary access read shared As #iFile
+' Printlog "Loc: " + Loc(#iFile) ' LONG! where am i in the file?
+
+ iSize = Lof(#iFile) ' get size in bytes of file
+ if (iSize > 65530) then '65536 = 64kB
+ 'Warnlog "fGetFileText: file '" + sFilename + "' might get problems on reading it? size is > 65530 Byte: '" + iSize + "'"
+ else
+' printlog "iSize: " + iSize
+ endif
+
+ sTemp = ""
+ if (iCount >= 0) then ' get bytes from file start
+ get iFile,1,sTemp ' get max 64kByte; but not the 1st 2 bytes :-(
+ get iFile,1,iTem ' get the first 2 bytes of the file
+ iTemByte(2) = (iTem AND &H0000FF00) \ &H100 ' and seperate the bytes
+ iTemByte(1) = (iTem AND &H000000FF)
+ sTemp = chr(iTemByte(1)) + chr(iTemByte(2)) + sTemp ' put them together
+ else ' get bytes from file end
+ if ((iSize+iCount) > 0) then
+ select case (iSize+iCount)
+ case 1: get iFile,1,sTemp ' take bytes from the end of the file
+ get iFile,1,iTem ' get the first 2 bytes of the file
+ sTemp = chr(iTemByte(2)) + sTemp ' put them together
+ case else: get iFile,(iSize+iCount)-1,sTemp ' take bytes from the end of the file
+ end select
+ else
+ get iFile,1,sTemp ' take bytes from the end of the file
+ get iFile,1,iTem ' get the first 2 bytes of the file
+ iTemByte(2) = (iTem AND &H0000FF00) \ &H100 ' and seperate the bytes
+ iTemByte(1) = (iTem AND &H000000FF)
+ sTemp = chr(iTemByte(1)) + chr(iTemByte(2)) + sTemp ' put them together
+ endif
+ endif
+' printlog "'"+left(sTemp,iSize)+"'" ' gotcha!
+
+ if (iSize-(Abs(iCount)) >= 0) then
+ fGetFileText = left(sTemp,Abs(iCount))
+ else
+ 'Warnlog "fGetFileText: file '" + sFilename + "' isn't as big as expected; will only return '" + iSize+ "' bytes fom: " + iCount
+ fGetFileText = left(sTemp,iSize)
+ endif
+
+ ' debugging routine --------------------------------------
+ ' iSize = Lof(#iFile)
+ ' printlog "iSize: " + iSize
+ ' sTemp = ""
+ ' if iSize > 0 then
+ ' printlog "iSize \ 2: " + (iSize \ 2)
+ ' for i = 0 to ((iSize \ 2)-1)
+ ' get iFile,(i*2)+1,iTem
+ ' Printlog "i: " + i + ": 0x" + hex(iTem)
+ ' iTemByte(2) = (iTem AND &H0000FF00) \ &H100
+ ' iTemByte(1) = (iTem AND &H000000FF)
+ ' sTemp = sTemp + chr(iTemByte(1)) + chr(iTemByte(2))
+ ' next i
+ ' if (iSize MOD 2) = 1 then
+ ' get iFile,iSize,iTem
+ ' Printlog "i: " + iSize + ": 0x" + hex(iTem)
+ ' iTemByte(1) = (iTem AND &H000000FF)
+ ' sTemp = sTemp + chr(iTemByte(1))
+ ' endif
+ ' endif
+ ' printlog "'"+sTemp+"'"
+ ' debugging routine --------------------------------------
+ Close #iFile
+ else ' does file exist
+ Warnlog "fGetFileText: file '" + sFilename + "' doesn't exist"
+ fGetFileText = ""
+ endif
+end function
diff --git a/testautomation/graphics/optional/includes/global/g_arrangealign.inc b/testautomation/graphics/optional/includes/global/g_arrangealign.inc
index f9fab5625905..16f0ca213d26 100644
--- a/testautomation/graphics/optional/includes/global/g_arrangealign.inc
+++ b/testautomation/graphics/optional/includes/global/g_arrangealign.inc
@@ -29,16 +29,7 @@
'*
'* short description :
'*
-'**************************************************************************************
-' #1 tiDatei_Fuer_Anordnen_Erstellen
-' #1 tdContextSendBackward
-' #1 tdContextBringForward
-' #1 tdContextSendToBack
-' #1 tdContextBringToFront
-' #1 tdContextReverse
-' #1 tdContextInFrontOfObject
-' #1 tdContextBehindObject
-'\*************************************************************************************
+'\******************************************************************************
testcase tiDatei_Fuer_Anordnen_Erstellen
dim sTemp as string
diff --git a/testautomation/graphics/optional/includes/global/g_autocorrection.inc b/testautomation/graphics/optional/includes/global/g_autocorrection.inc
index 7653d391243f..447808b4bc8e 100644
--- a/testautomation/graphics/optional/includes/global/g_autocorrection.inc
+++ b/testautomation/graphics/optional/includes/global/g_autocorrection.inc
@@ -147,7 +147,7 @@ testcase tToolsAutocorrectCustomQuotes(bSimple as boolean)
sFileName = (ConvertPath ( gTesttoolPath + "graphics\required\input\rightfont." + ExtensionString))
endif
- if hFileExists ( sFileName ) = FALSE then
+ if FileExists ( sFileName ) = FALSE then
warnlog "The language-file was not found or accessible! The test ends."
goto endsub
endif
diff --git a/testautomation/graphics/optional/includes/global/g_ole.inc b/testautomation/graphics/optional/includes/global/g_ole.inc
index 3d30cf52ca85..84ff10294e6d 100644
--- a/testautomation/graphics/optional/includes/global/g_ole.inc
+++ b/testautomation/graphics/optional/includes/global/g_ole.inc
@@ -29,10 +29,6 @@
'*
'* short description: includefile for Ole-testing
'*
-'**************************************************************************************
-' #1 tOLE_Copy
-' #1 tOLE_SaveLoad
-' #1 tiOpenOLECrash
'\*************************************************************************************
testcase tOLE_Copy
@@ -274,16 +270,18 @@ testcase tOLE_SaveLoad
MenuSelect (0)
printlog "Save the File."
FileSaveAs
- sleep 1
Kontext "SpeichernDlg"
- Dateiname.Settext (filename)
- printlog "Saving as: " & filename
- Speichern.Click
+ if ( SpeichernDlg.exists( 1 ) ) then
+ Dateiname.Settext (filename)
+ printlog "Saving as: " & filename
+ Speichern.Click
+ else
+ warnlog( "<FileSaveAs> dialog did not open" )
+ endif
printlog "If the file already exists - press yes to overwrite it."
- Sleep 3
kontext "Messagebox"
- if Messagebox.exists then
+ if ( Messagebox.exists( 3 ) ) then
Messagebox.Yes
endif
Sleep 3
@@ -364,20 +362,31 @@ testcase tiOpenOLECrash
FileSaveAs
Kontext "SpeichernDlg"
- sFileodp = (ConvertPath(gOfficePath + "user\work\generic_de"))
- Dateiname.SetText (sFileodp)
- Dateityp.Select (1)
- Speichern.Click
- Kontext "Messagebox"
- if Messagebox.Exists(2) then
- Messagebox.Yes
- Kontext "AlienWarning"
- if AlienWarning.Exists(2) then
- Warnlog "Should not be any alienwarning when saving in our own format!"
- AlienWarning.OK
- end if
- printlog "Saved as: " + sFileodp
- end if
+ if ( SpeichernDlg.exists( 2 ) ) then
+ sFileodp = (ConvertPath(gOfficePath + "user\work\generic_de"))
+ Dateiname.SetText (sFileodp)
+ Dateityp.Select (1)
+ Speichern.Click
+ Kontext "Messagebox"
+ if Messagebox.Exists(2) then
+ try
+ Messagebox.Yes
+ catch
+ warnlog( "#i110938 - Failure to save certain impress documents" )
+ Messagebox.ok()
+ goto endsub
+ endcatch
+ Kontext "AlienWarning"
+ if AlienWarning.Exists(2) then
+ Warnlog "Should not be any alienwarning when saving in our own format!"
+ AlienWarning.OK
+ end if
+ printlog "Saved as: " + sFileodp
+ end if
+ else
+ warnlog( "<FileSaveAs> dislog did not open" )
+ goto endsub
+ endif
Sleep 3
kontext "DocumentImpress"
printlog "3. Close Impress."
diff --git a/testautomation/graphics/optional/includes/global/g_stylist.inc b/testautomation/graphics/optional/includes/global/g_stylist.inc
index dc8663425e87..fe9a1e28dabb 100755..100644
--- a/testautomation/graphics/optional/includes/global/g_stylist.inc
+++ b/testautomation/graphics/optional/includes/global/g_stylist.inc
@@ -29,18 +29,6 @@
'*
'* short description :
'*
-'*******************************************************************
-'*
-' #1 tFormatStylistFlyer
-' #1 tFormatStylistDocuments
-' #1 tFormatStylistTemplatesUse
-' #1 tFormatStylistTemplateCreate
-' #1 tFormatStylistTemplateSelect
-' #1 tFormatStylistTemplateNew
-' #1 tiFormatStylist
-' #1 tFormatStylist
-' #1 hWalkTheStyles
-'*
'\*******************************************************************
testcase tFormatStylistFlyer
@@ -147,7 +135,7 @@ testcase tFormatStylistFlyer
'/// close stylist ///'
Gestalter.Close
Call hCloseDocument
-
+
endcase 'tFormatStylistFlyer
'--------------------------------------------------------
testcase tFormatStylistDocuments
@@ -169,11 +157,9 @@ testcase tFormatStylistDocuments
endif
printlog " - Close all documents, reopen 1"
- FileClose
- Sleep 2
- FileClose
- Sleep 2
- hNewDocument
+ hFileCloseAll()
+ hNewDocument()
+
Kontext "Gestalter"
if (Gestalter.NotExists) then
warnlog " There is no stylist in the new document"
@@ -190,12 +176,9 @@ testcase tFormatStylistDocuments
endif
printlog " - Close all documents, reopen one and check the docked stylist"
- FileClose
- Sleep 2
- FileClose
- Sleep 2
- Kontext "Gestalter"
- hNewDocument
+ hFileCloseAll()
+ hNewDocument()
+
Kontext "Gestalter"
if NOT Gestalter.IsDocked then
warnlog " In the new document is the stylist not docked"
@@ -215,7 +198,7 @@ testcase tFormatStylistDocuments
Gestalter.Close
end if
Call hCloseDocument
-
+
endcase 'tFormatStylistDocuments
'--------------------------------------------------------
testcase tFormatStylistTemplatesUse
@@ -234,7 +217,7 @@ testcase tFormatStylistTemplatesUse
FormatStylist
endif
printlog " - Presentation-templates"
- if (Lcase (gApplication) = "IMPRESS") then
+ if ( gApplication = "IMPRESS") then
TBGestalter.Click Praesentationsvorlagen
endif
save = Gruppenliste.GetSelIndex
@@ -253,11 +236,11 @@ testcase tFormatStylistTemplatesUse
sleep 1
Gruppenliste.Select save
- Gestalter.Close
+ kontext "Gestalter"
+ hCloseDialog( Gestalter, "Close" )
+
+ hFileCloseAll()
- sleep 3
- Call hCloseDocument
-
endcase 'tFormatStylistTemplatesUse
'--------------------------------------------------------
testcase tFormatStylistTemplateCreate
@@ -299,10 +282,10 @@ testcase tFormatStylistTemplateCreate
zaehler=Ansicht.getItemCount
i=0
do
- inc i
+ inc i
loop while ((Ansicht.getItemText(i) <> "ATesttool") AND (i <= zaehler))
if i>zaehler then
- warnlog " error"
+ warnlog " error"
endif
Ansicht.Select i
sleep 1
@@ -317,10 +300,8 @@ testcase tFormatStylistTemplateCreate
sleep 1
Kontext "DocumentDraw"
gMouseClick 90,90
- sleep 1
- Call hCloseDocument
- sleep 1
-
+ hFileCloseAll()
+
endcase 'tFormatStylistTemplateCreate
'--------------------------------------------------------
testcase tFormatStylistTemplateSelect
@@ -400,7 +381,7 @@ testcase tFormatStylistTemplateSelect
TabArea.OK
sleep 2
hCloseDocument
-
+
endcase 'tFormatStylistTemplateSelect
'---------------------------------------------------------
testcase tFormatStylistTemplateNew
@@ -484,14 +465,14 @@ testcase tFormatStylistTemplateNew
Vorlagenliste.TypeKeys "<End>"
i = 0
do
- inc i
- sTemp = Vorlagenliste.GetText
- Vorlagenliste.TypeKeys "<Up>"
+ inc i
+ sTemp = Vorlagenliste.GetText
+ Vorlagenliste.TypeKeys "<Up>"
loop while (("Testtool" <> sTemp) AND (i<20))
Vorlagenliste.TypeKeys "<Return>"
Kontext "Gestalter"
Gestalter.Close
-
+
Printlog " - check template"
FormatCharacter
Kontext
@@ -677,8 +658,8 @@ testcase tiFormatStylist
sleep 1
Kontext "Gestalter"
if Gestalter.Exists Then Warnlog "- Stylist could not be closed pressing F11"
- Call hCloseDocument
-
+ Call hCloseDocument
+
endcase 'tiFormatStylist
'---------------------------------------------------------
sub hWalkTheStyles (optional a as integer,optional b as integer)
@@ -686,115 +667,115 @@ sub hWalkTheStyles (optional a as integer,optional b as integer)
dim i as integer
if isMissing (a) then a=1
- if isMissing (b) then b=2
- i=1
- if a <= i AND i <= b then
- Kontext
- Messagebox.SetPage TabLinie
- kontext "TabLinie"
- Call DialogTest ( TabLinie )
- Kontext
- Messagebox.SetPage TabArea
- kontext "TabArea"
- Call DialogTest ( TabArea, 1 )
- FillOptions.Select 1 ' NoFill.Check
- Call DialogTest ( TabArea, 1 )
- FillOptions.Select 2
- Call DialogTest ( TabArea, 2 )
- FillOptions.Select 3
- Call DialogTest ( TabArea, 3 )
- FillOptions.Select 4
- Call DialogTest ( TabArea, 4 )
- FillOptions.Select 5
- Call DialogTest ( TabArea, 5 )
- Kontext
- Messagebox.SetPage TabSchatten
- kontext "TabSchatten"
- Anzeigen.check
- Call DialogTest ( TabSchatten )
- Kontext
- Messagebox.SetPage TabTransparenz
- kontext "TabTransparenz"
- KeineTransparenz.Check
- LineareTransparenz.Check
- Transparenzverlauf.Check
- Kontext
- Messagebox.SetPage TabFont
- kontext "TabFont"
- Call DialogTest ( TabFont )
- Kontext
- Messagebox.SetPage TabFontEffects
- kontext "TabFontEffects"
- Kontext
- Messagebox.SetPage TabEinzuegeUndAbstaende
- kontext "TabEinzuegeUndAbstaende"
- Call DialogTest ( TabEinzuegeUndAbstaende )
- endif
- i=2
- if a <= i AND i <= b then
- Kontext
- Messagebox.SetPage TabVerwalten
- kontext "TabVerwalten"
- Call DialogTest ( TabVerwalten )
- Kontext
- Messagebox.SetPage TabText
- Kontext "TabText"
- Call DialogTest ( TabText )
- Kontext
- Messagebox.SetPage TabLauftext
- Kontext "TabLauftext"
- Call DialogTest ( TabLauftext )
- Kontext
- Messagebox.SetPage TabBemassung
- Kontext "TabBemassung"
- Call DialogTest ( TabBemassung )
- Kontext
- Messagebox.setpage TabVerbinder
- Kontext "TabVerbinder"
- Call Dialogtest ( TabVerbinder )
- Kontext
- Messagebox.setpage TabAusrichtungAbsatz
- Kontext "TabAusrichtungAbsatz"
- Links.Check
- Rechts.Check
- Zentriert.Check
- Blocksatz.Check
- Kontext
- Messagebox.setpage TabTabulator
- Kontext "TabTabulator"
- Neu.click
- AlleLoeschen.click
- Neu.click
- Loeschen.click
- endif
- i=3
- if a <= i AND i <= b then
- Kontext
- Messagebox.SetPage TabBullet
- Kontext "TabBullet"
- sleep 1
- Call DialogTest (TabBullet)
- sleep 1
- Kontext
- Messagebox.SetPage TabNumerierungsart
- Kontext "TabNumerierungsart"
- sleep 1
- Call DialogTest (TabNumerierungsart)
- sleep 1
- Kontext
- Messagebox.SetPage TabGrafiken
- Kontext "TabGrafiken"
- sleep 1
- Call DialogTest (TabGrafiken)
- sleep 1
- Kontext
- Messagebox.SetPage TabOptionenNumerierung
- Kontext "TabOptionenNumerierung"
- sleep 1
- Call DialogTest (TabOptionenNumerierung)
- sleep 1
- endif
-
+ if isMissing (b) then b=2
+ i=1
+ if a <= i AND i <= b then
+ Kontext
+ Messagebox.SetPage TabLinie
+ kontext "TabLinie"
+ Call DialogTest ( TabLinie )
+ Kontext
+ Messagebox.SetPage TabArea
+ kontext "TabArea"
+ Call DialogTest ( TabArea, 1 )
+ FillOptions.Select 1 ' NoFill.Check
+ Call DialogTest ( TabArea, 1 )
+ FillOptions.Select 2
+ Call DialogTest ( TabArea, 2 )
+ FillOptions.Select 3
+ Call DialogTest ( TabArea, 3 )
+ FillOptions.Select 4
+ Call DialogTest ( TabArea, 4 )
+ FillOptions.Select 5
+ Call DialogTest ( TabArea, 5 )
+ Kontext
+ Messagebox.SetPage TabSchatten
+ kontext "TabSchatten"
+ Anzeigen.check
+ Call DialogTest ( TabSchatten )
+ Kontext
+ Messagebox.SetPage TabTransparenz
+ kontext "TabTransparenz"
+ KeineTransparenz.Check
+ LineareTransparenz.Check
+ Transparenzverlauf.Check
+ Kontext
+ Messagebox.SetPage TabFont
+ kontext "TabFont"
+ Call DialogTest ( TabFont )
+ Kontext
+ Messagebox.SetPage TabFontEffects
+ kontext "TabFontEffects"
+ Kontext
+ Messagebox.SetPage TabEinzuegeUndAbstaende
+ kontext "TabEinzuegeUndAbstaende"
+ Call DialogTest ( TabEinzuegeUndAbstaende )
+ endif
+ i=2
+ if a <= i AND i <= b then
+ Kontext
+ Messagebox.SetPage TabVerwalten
+ kontext "TabVerwalten"
+ Call DialogTest ( TabVerwalten )
+ Kontext
+ Messagebox.SetPage TabText
+ Kontext "TabText"
+ Call DialogTest ( TabText )
+ Kontext
+ Messagebox.SetPage TabLauftext
+ Kontext "TabLauftext"
+ Call DialogTest ( TabLauftext )
+ Kontext
+ Messagebox.SetPage TabBemassung
+ Kontext "TabBemassung"
+ Call DialogTest ( TabBemassung )
+ Kontext
+ Messagebox.setpage TabVerbinder
+ Kontext "TabVerbinder"
+ Call Dialogtest ( TabVerbinder )
+ Kontext
+ Messagebox.setpage TabAusrichtungAbsatz
+ Kontext "TabAusrichtungAbsatz"
+ Links.Check
+ Rechts.Check
+ Zentriert.Check
+ Blocksatz.Check
+ Kontext
+ Messagebox.setpage TabTabulator
+ Kontext "TabTabulator"
+ Neu.click
+ AlleLoeschen.click
+ Neu.click
+ Loeschen.click
+ endif
+ i=3
+ if a <= i AND i <= b then
+ Kontext
+ Messagebox.SetPage TabBullet
+ Kontext "TabBullet"
+ sleep 1
+ Call DialogTest (TabBullet)
+ sleep 1
+ Kontext
+ Messagebox.SetPage TabNumerierungsart
+ Kontext "TabNumerierungsart"
+ sleep 1
+ Call DialogTest (TabNumerierungsart)
+ sleep 1
+ Kontext
+ Messagebox.SetPage TabGrafiken
+ Kontext "TabGrafiken"
+ sleep 1
+ Call DialogTest (TabGrafiken)
+ sleep 1
+ Kontext
+ Messagebox.SetPage TabOptionenNumerierung
+ Kontext "TabOptionenNumerierung"
+ sleep 1
+ Call DialogTest (TabOptionenNumerierung)
+ sleep 1
+ endif
+
end sub 'hWalkTheStyles
'---------------------------------------------------------
testcase tFormatStylist
@@ -889,7 +870,7 @@ testcase tFormatStylist
endif
endif
Call hCloseDocument
-
+
endcase 'tFormatStylist
'--------------------------------------------------------
function hSelectInList (window, sEntry as String) as Boolean
@@ -901,16 +882,16 @@ function hSelectInList (window, sEntry as String) as Boolean
window.TypeKeys "<End>"
sTemp = ""
do
- sLastTemp = sTemp
- sTemp = window.GetText
- window.TypeKeys "<Up>"
-loop while ((sEntry <> sTemp) AND (sLastTemp <> sTemp))
-if (sEntry = sTemp) then
- window.TypeKeys "<Return>"
- hSelectInList = TRUE
-else
- hSelectInList = FALSE
-endif
+ sLastTemp = sTemp
+ sTemp = window.GetText
+ window.TypeKeys "<Up>"
+ loop while ((sEntry <> sTemp) AND (sLastTemp <> sTemp))
+ if (sEntry = sTemp) then
+ window.TypeKeys "<Return>"
+ hSelectInList = TRUE
+ else
+ hSelectInList = FALSE
+ endif
end function 'hSelectInList
'---------------------------------------------------------
diff --git a/testautomation/graphics/optional/includes/global/g_tables.inc b/testautomation/graphics/optional/includes/global/g_tables.inc
index 1414a857b598..ca5fc625c4ab 100644
--- a/testautomation/graphics/optional/includes/global/g_tables.inc
+++ b/testautomation/graphics/optional/includes/global/g_tables.inc
@@ -29,13 +29,6 @@
'*
'* short description : Testing of impress tables
'*
-'*******************************************************************
-'*
-' #1 tiInsertTableUsingMenu
-' #1 tiInsertTableUsingButton
-' #1 tiTableObjectBar
-' #1 tiInsertTableUsingToolbarbuttonView
-'*
'\******************************************************************
'Variables:
@@ -50,7 +43,7 @@ testcase tiInsertTableUsingMenu
printlog "Inserting table into doc using the menu."
Call hNewDocument
printlog "Switching between Draw/Impress"
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" ) then
DocumentImpress.UseMenu
hMenuSelectNr(4)
hMenuSelectNr(14)
@@ -213,7 +206,7 @@ testcase tiTableObjectBar
printlog "Inserting table into doc using the menu."
Call hNewDocument
printlog "Switching between Draw/Impress"
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" ) then
DocumentImpress.UseMenu
hMenuSelectNr(4)
hMenuSelectNr(14)
@@ -229,7 +222,7 @@ testcase tiTableObjectBar
printlog "Selecting table for geeting the TableObjectBar."
printlog "Switching between Draw/Impress"
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" )then
Kontext "DocumentImpress"
DocumentImpress.TypeKeys "<TAB>",3
else
@@ -258,7 +251,7 @@ testcase tiTableObjectBar
Kontext "TableObjectBar"
TableObjectBar.Close
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" ) then
Kontext "DocumentImpress"
else
Kontext "DocumentDraw"
@@ -278,7 +271,7 @@ testcase tiTableObjectBar
endif
Kontext "TableObjectBar"
TableObjectBar.Close
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" ) then
Kontext "DocumentImpress"
else
Kontext "DocumentDraw"
@@ -295,7 +288,7 @@ testcase tiTableObjectBar
else
warnlog "BordersTB is not up!"
endif
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" ) then
Kontext "DocumentImpress"
else
Kontext "DocumentDraw"
@@ -303,7 +296,7 @@ testcase tiTableObjectBar
printlog "Checking merge cells."
printlog "Inserting something into cell and select."
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" ) then
DocumentImpress.TypeKeys ("a")
DocumentImpress.TypeKeys "<SHIFT RIGHT>"
else
@@ -312,29 +305,46 @@ testcase tiTableObjectBar
endif
Kontext "TableObjectBar"
if TableObjectBar.NotExists(2) then ViewToolbarsTable
+
+ printlog( "Merge cells" )
+ Wait( 1000 )
ZellenVerbinden.Click
- printlog "Cells merged."
- printlog "Checking split cells."
+ printlog( "Split cells" )
+ Wait( 1000 )
ZelleTeilen.Click
- printlog "Cells split."
+
Kontext "ZellenTeilen"
- WaitSlot(1000)
- printlog "SplitCells dialog open."
- Anzahl.ToMax
- printlog "Maximum SplitCellCount is " & Anzahl.GetText & "."
- Anzahl.ToMin
- printlog "Minimum SplitCellCount is " & Anzahl.GetText & "."
- if Horizontal.IsChecked = TRUE then
- printlog "Horizontally is clicked."
+ if ( ZellenTeilen.exists( 2 ) ) then
+
+ printlog "SplitCells dialog open."
+
+ printlog( "Set number to maximum" )
+ Anzahl.ToMax
+ printlog "Maximum SplitCellCount is " & Anzahl.GetText & "."
+
+ printlog( "Set number to minimum" )
+ Anzahl.ToMin
+ printlog "Minimum SplitCellCount is " & Anzahl.GetText & "."
+
+ printlog( "<Horizontal> should be checked" )
+ if ( Horizontal.IsChecked ) then
+ printlog "Horizontally is clicked."
+ else
+ warnlog "Horizontally should be clicked by default!"
+ endif
+
+ printlog( "Distribute/Split equally" )
+ GleichmaessigTeilen.Check
+
+ printlog( "Check <Vertically>" )
+ Vertikal.Check
+
+ printlog( "Close dialog <Split Cells>" )
+ hCloseDialog( ZellenTeilen, "close" )
else
- warnlog "Horizontally should be clicked by default!"
+ warnlog( "Dialog <Split Cells> did not open" )
endif
- GleichmaessigTeilen.Check
- printlog "Split Equal checked."
- Vertikal.Check
- printlog "Cells vertically checked."
- ZellenTeilen.OK
printlog " Checking optimize button 'ToDo: button not working"
'Kontext "TableObjectBar"
'Optimieren.TearOff
@@ -364,7 +374,7 @@ testcase tiTableObjectBar
tabledesign.Click
printlog "Checking for Table Design in Impress TaskBar or for Dialog in Draw."
- if (UCase(gApplication)) = "IMPRESS" then
+ if ( gApplication = "IMPRESS" ) then
kontext "Tasks"
if (NOT Tasks.exists) then
warnlog "Tasks Panel not visible. Opening now."
@@ -395,6 +405,20 @@ testcase tiTableObjectBar
kontext "TabFont"
printlog "Checking Fonts Box."
+
+ if ( Font.exists() ) then
+ printlog( "Western dialog layout -> good" )
+ else
+ if ( FontWest.exists() ) then
+ warnlog( "<FontWest> exists, asian support is enabled which this test cannot handle" )
+ else
+ warnlog( "Unknown error while trying to access <Font> listbox" )
+ endif
+ hCloseDialog( TabFont, "close" )
+ hFileCloseAll()
+ goto endsub
+ endif
+
iItemCount = Font.GetItemCount
printlog "Fontbox has " & iItemCount & " entries."
for iItemIndex = 1 to iItemCount
diff --git a/testautomation/graphics/optional/includes/global/id_001.inc b/testautomation/graphics/optional/includes/global/id_001.inc
index 1525074e027f..2bbca902b249 100644
--- a/testautomation/graphics/optional/includes/global/id_001.inc
+++ b/testautomation/graphics/optional/includes/global/id_001.inc
@@ -29,20 +29,6 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiFileSaveAs
-' #1 tiFileReload (sFileIn as string)
-' #1 tiFileVersion (sFileIn as string)
-' #1 tiFilePassword
-' #1 tiFileTemplates
-' #1 tmFileNewFromTemplate
-' #1 tmFileOpen
-' #1 tmFileClose
-' #1 tmFileSave
-' #1 tmFileSaveAs
-' #1 tmFileSaveAll
-' #1 tmFileProperties
-' #1 tmFilePrinterSetting
'\**********************************************************************************
@@ -141,7 +127,7 @@ testcase tiFileSaveAs
printlog "("+i+"/"+x+"): "+sFilter(i)
hFileOpen ( sFilter(i) )
WaitSlot (3000)
- If hIsNamedDocLoaded (sFilter(i), true) Then
+ If hIsNamedDocLoaded (sFilter(i)) Then
printlog " used filter: " + hGetUsedFilter()
else
sTemp = left(right(sFilter(i),2),1)
diff --git a/testautomation/graphics/optional/includes/global/id_002.inc b/testautomation/graphics/optional/includes/global/id_002.inc
index aed9631b4cd6..feca54dac85e 100644
--- a/testautomation/graphics/optional/includes/global/id_002.inc
+++ b/testautomation/graphics/optional/includes/global/id_002.inc
@@ -29,22 +29,6 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiEditUndoRedo
-' #1 tiEditRepeat
-' #1 tiEditCutPasteCopySelectall
-' #1 tiEditPasteSpecial
-' #1 tiEditSearchAndReplace
-' #1 tiEditDuplicate
-' #1 tiEditFields
-' #1 tdEditDeleteSlide
-' #1 tiEditLinks
-' #1 tiEditImageMap
-' #1 tiEditObjectProperties
-' #1 tiEditObjectEdit
-' #1 tiEditPlugIn
-' #1 tiEditHyperlink
-' #1 tEditPoints
'\**********************************************************************************
testcase tiEditUndoRedo
@@ -247,9 +231,9 @@ testcase tiEditLinks
Link.Check
Dateiname.SetText ConvertPath (gTesttoolPath + "global\input\graf_inp\desp.bmp")
Oeffnen.Click
- sleep 2
+
kontext "Messagebox"
- if Messagebox.Exists then
+ if Messagebox.Exists( 2 ) then
Warnlog Messagebox.GetText
Messagebox.OK
sleep 1
@@ -277,9 +261,9 @@ testcase tiEditImageMap
Call hNewDocument
EditImageMap
+
Kontext "ImageMapEditor"
- sleep (1)
- if ImageMapEditor.Exists (2) then
+ if ImageMapEditor.Exists( 5 ) then
printlog "- ImageMap exists"
DialogTest ( ImageMapEditor )
try
@@ -319,7 +303,6 @@ testcase tiEditObjectProperties
WaitSlot (1000)
Kontext "TabEigenschaften"
DialogTest ( TabEigenschaften )
- sleep(1)
Oeffnen.Click
Kontext "OeffnenDlg"
Call DialogTest ( OeffnenDlg )
@@ -410,40 +393,48 @@ endcase
testcase tiEditHyperlink
hNewDocument
InsertHyperlink
- WaitSlot (5000)
- Kontext "Hyperlink"
- Auswahl.MouseDown 50, 5
- Auswahl.MouseUp 50, 5
- Auswahl.typekeys "<PAGEDOWN><PAGEUP>"
- Auswahl.typekeys "<TAB>"
- sleep 3
- Kontext "TabHyperlinkInternet"
-
- 'Workaround to get rid of a Focusing-problem...
- NameText.Typekeys "alal <RETURN>"
- NameText.Typekeys "<MOD1 A><DELETE>"
- TabHyperlinkInternet.Typekeys "<TAB>", 6
- TabHyperlinkInternet.Typekeys "<LEFT>", 3
- 'End of workaround...
-
- Internet.Check 'Just to make sure the radio-button is addressable.
- ZielUrl.Settext "http://www.liegerad-fahrer.de"
- Kontext "Hyperlink"
- Uebernehmen.Click
- Hyperlink.Close
- hTypeKeys "<TAB><F2>"
- EditSelectAll
- try
- EditHyperlinkDraw
+
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
Kontext "Hyperlink"
- if Hyperlink.Exists then
- Hyperlink.Close
- else
- Warnlog "- Hyperlinkdialog not up"
- end if
- catch
- Warnlog "- Not able to edit Hyperlink!"
- endcatch
+ Auswahl.MouseDown 50, 5
+ Auswahl.MouseUp 50, 5
+ Auswahl.typekeys "<PAGEDOWN><PAGEUP>"
+ Auswahl.typekeys "<TAB>"
+ sleep( 1 )
+ Kontext "TabHyperlinkInternet"
+
+ 'Workaround to get rid of a Focusing-problem...
+ NameText.Typekeys "alal <RETURN>"
+ NameText.Typekeys "<MOD1 A><DELETE>"
+ TabHyperlinkInternet.Typekeys "<TAB>", 6
+ TabHyperlinkInternet.Typekeys "<LEFT>", 3
+ 'End of workaround...
+
+ Internet.Check 'Just to make sure the radio-button is addressable.
+ ZielUrl.Settext "http://www.liegerad-fahrer.de"
+
+ Uebernehmen.Click()
+
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close()
+
+ hTypeKeys "<TAB><F2>"
+ EditSelectAll
+ try
+ EditHyperlinkDraw
+ Kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.Exists( 1 ) ) then
+ HyperlinkDialog.Close()
+ else
+ Warnlog "- Hyperlinkdialog not up"
+ end if
+ catch
+ Warnlog "- Not able to edit Hyperlink!"
+ endcatch
+ else
+ warnlog( "Failed to open <HyperlinkDialog>" )
+ endif
Call hCloseDocument
endcase
diff --git a/testautomation/graphics/optional/includes/global/id_003.inc b/testautomation/graphics/optional/includes/global/id_003.inc
index 27004c582828..371b0699fc8f 100644
--- a/testautomation/graphics/optional/includes/global/id_003.inc
+++ b/testautomation/graphics/optional/includes/global/id_003.inc
@@ -29,14 +29,6 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiViewNavigator
-' #1 tiViewZoom
-' #1 tiViewToolbar
-' #1 tiViewDisplayQuality
-' #1 tiViewLayer
-' #1 tViewSnapLines
-' #1 tViewGrid
'\**********************************************************************************
testcase tiViewNavigator
diff --git a/testautomation/graphics/optional/includes/global/id_004.inc b/testautomation/graphics/optional/includes/global/id_004.inc
index b1034c331ded..ff1317ce5d01 100644
--- a/testautomation/graphics/optional/includes/global/id_004.inc
+++ b/testautomation/graphics/optional/includes/global/id_004.inc
@@ -29,25 +29,6 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiInsertSlide
-' #1 tiInsertDuplicateSlide
-' #1 tiInsertField
-' #1 tiInsertSpecialCharacter
-' #1 tiInsertHyperlink
-' #1 tiInsertGraphic
-' #1 tiInsertObjectSound
-' #1 tiInsertObjectVideo
-' #1 tiInsertChart
-' #1 tiInsertObjectOLEObjects
-' #1 tiInsertSpreadsheet
-' #1 tiInsertFormula
-' #1 tiInsertFloatingFrame
-' #1 tiInsertFile
-' #1 tiInsertPlugin
-' #1 tiInsertScan
-' #1 tiInsertSnappointLine
-' #1 tdInsertLayer
'\**********************************************************************************
@@ -129,26 +110,30 @@ testcase tiInsertSpecialCharacter
hTextrahmenErstellen ("This is a testtext",30,40,60,50)
sleep 2
InsertSpecialCharacterDraw
- WaitSlot (2000)
+
Kontext "Sonderzeichen"
- Call DialogTest (Sonderzeichen)
- Sonderzeichen.Cancel
- sleep 2
+ if ( Sonderzeichen.exists( 2 ) ) then
+ Call DialogTest (Sonderzeichen)
+ hCloseDialog( Sonderzeichen, "Cancel" )
+ else
+ warnlog( "<Special Characters> dialog not open" )
+ endif
Call hCloseDocument
endcase
testcase tiInsertHyperlink
+
Call hNewDocument
InsertHyperlink
- WaitSlot (5000)
- Kontext "Hyperlink"
- if Hyperlink.exists (5) then
+
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
+
+ Kontext "TabHyperlinkInternet"
Auswahl.MouseDown 50, 5
Auswahl.MouseUp 50, 5
Auswahl.typekeys "<PAGEDOWN><PAGEUP>"
Auswahl.typekeys "<TAB>"
- sleep 3
- Kontext "TabHyperlinkInternet"
'Workaround to get rid of a Focusing-problem...
NameText.Typekeys "alal <RETURN>"
@@ -158,12 +143,14 @@ testcase tiInsertHyperlink
'End of workaround...
Internet.Check
- ZielUrl.Settext "http://mahler"
- Kontext "Hyperlink"
- Uebernehmen.Click
- Hyperlink.Close
+ ZielUrl.SetText( "http://www.nowhere.com" )
+ Uebernehmen.Click()
+
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close()
+
else
- warnlog "Failed to open hyperlink ??!!"
+ warnlog "Failed to open <HyperlinkDialog>"
end if
Call hCloseDocument
endcase
@@ -231,12 +218,11 @@ endcase
testcase tiInsertChart
Call hNewDocument
InsertChart
- WaitSlot (2000)
+
Kontext "Messagebox"
- if Messagebox.Exists then
+ if ( Messagebox.Exists( 2 ) ) then
Warnlog Messagebox.GetText
- Messagebox.OK
- sleep 1
+ hCloseDialog( Messagebox, "OK" )
end if
gMouseClick 1,1
sleep 2
@@ -274,9 +260,8 @@ testcase tiInsertSpreadsheet
Kontext "Messagebox"
if Messagebox.Exists (5) then
Warnlog Messagebox.GetText
- Messagebox.OK
+ hCloseDialog( Messagebox, "ok" )
end if
- sleep 2
gMouseClick 1,1
sleep 1
hTypekeys "<Tab><Delete>"
@@ -287,12 +272,11 @@ endcase
testcase tiInsertFormula
Call hNewDocument
InsertObjectFormulaDraw
- WaitSlot (2000)
+
Kontext "Messagebox"
- if Messagebox.Exists then
+ if ( Messagebox.Exists( 2 ) ) then
Warnlog Messagebox.GetText
- Messagebox.OK
- sleep 1
+ hCloseDialog( Messagebox, "ok" )
end if
gMouseClick 1,1
sleep 1
@@ -308,8 +292,7 @@ testcase tiInsertFloatingFrame
Dialogtest (TabEigenschaften)
Oeffnen.Click
Kontext "OeffnenDlg"
- sleep 1
- OeffnenDlg.Cancel
+ hCloseDialog( OeffnenDlg, "Cancel" )
Kontext "TabEigenschaften"
TabEigenschaften.Cancel
Call hCloseDocument
@@ -343,7 +326,6 @@ testcase tiInsertPlugin
end if
Kontext "OeffnenDlG"
if OeffnenDlG.exists (5) then
- sleep 1
OeffnenDLG.Cancel
end if
Kontext "PluginEinfuegen"
diff --git a/testautomation/graphics/optional/includes/global/id_006.inc b/testautomation/graphics/optional/includes/global/id_006.inc
index d959d1cf828f..d41b0c08e688 100644
--- a/testautomation/graphics/optional/includes/global/id_006.inc
+++ b/testautomation/graphics/optional/includes/global/id_006.inc
@@ -104,7 +104,7 @@ testcase tiToolsThesaurus
else
sFileName = (ConvertPath (gTesttoolPath + "graphics\required\input\engtext.odg"))
end if
- if hFileExists ( sFileName ) = FALSE then
+ if FileExists ( sFileName ) = FALSE then
warnlog "The language-file was not found or accessible! The test ends."
goto endsub
end if
diff --git a/testautomation/graphics/optional/includes/impress/i_slidecopy.inc b/testautomation/graphics/optional/includes/impress/i_slidecopy.inc
index 73971c2e889f..1a9590b9856f 100644
--- a/testautomation/graphics/optional/includes/impress/i_slidecopy.inc
+++ b/testautomation/graphics/optional/includes/impress/i_slidecopy.inc
@@ -29,20 +29,19 @@
'*
'* short description: includefile for Slidecopy-testing
'*
-'*******************************************************************************
-' #1 tiSlideCopyNewPresentation
-' #1 tiSlideCopyDuplicate
-' #1 tiSlideCopyPasteSpecial
-' #1 tiSlideCopyInSlideSorter
'\******************************************************************************
testcase tiSlideCopyNewPresentation
+
+ const MENUITEM_RENAME = 27027
+
Dim value1 as string
Dim value2 as string
Dim value12 as string
Dim value13 as string
- printlog "This test copies one slide from one presentation to another."
- printlog "Make new presentation"
+
+ printlog "This test copies one slide from one presentation to another."
+ printlog "Make new presentation"
Call hNewDocument
Call sSelectEmptyLayout
printlog "Insert three objects: Connector, Door-plate, and Smiley."
@@ -52,209 +51,228 @@ testcase tiSlideCopyNewPresentation
sleep 1
try
Verbinder.TearOff
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "Connectorsbar"
- sleep 2
- Verbinder.click
- sleep 5
- gMouseDown (10,10)
- gMouseMove (10,10,30,30)
- gMouseUp (30,30)
- kontext "Connectorsbar"
- Connectorsbar.Close
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 1
- printlog "We rename the object via the contextmenu."
- sleep (1)
- DocumentImpress.TypeKeys "<SHIFT F10>"
- sleep (2)
- printlog "then Choose rename."
- if hMenuFindSelect(27027, true, 14) = false then
+ endcatch
+ kontext "Connectorsbar"
+ sleep 2
+ Verbinder.click
+ sleep 5
+ gMouseDown (10,10)
+ gMouseMove (10,10,30,30)
+ gMouseUp (30,30)
+ kontext "Connectorsbar"
+ Connectorsbar.Close
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 1
+ printlog "We rename the object via the contextmenu."
+ sleep (1)
+ DocumentImpress.TypeKeys "<SHIFT F10>"
+ sleep (2)
+ printlog "then Choose rename."
+ if hMenuFindSelect( MENUITEM_RENAME, true, 14) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- sleep 2
- kontext "NameDlgObject"
- NameField.SetText "First"
- NameDlgObject.OK
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
-'----------------------------------------------------------------------------1
- printlog "Then we insert the second object: a Door-plate."
- kontext "Toolbar"
- sleep 2
- try
+ endif
+
+ kontext "NameDlgObject"
+ if ( NameDlgObject.exists( 2 ) ) then
+ NameField.SetText "First"
+ NameDlgObject.OK
+ else
+ warnlog( "<NameDlgObject> failed to open" )
+ endif
+
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+ '----------------------------------------------------------------------------1
+ printlog "Then we insert the second object: a Door-plate."
+
+ kontext "Toolbar"
+ sleep 2
+ try
StarShapes.TearOff
- catch
- warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- sleep 2
- kontext "StarShapes"
- StarShapesDoorplate.click
- sleep (3)
- gMouseDown (40,40)
- gMouseMove (40,40,60,60)
- gMouseUp (60,60)
+ catch
+ warnlog( "<StarShapes.TearOff> failed" )
+ goto endsub
+ endcatch
+
kontext "StarShapes"
- StarShapes.Close
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 2
- printlog "And then we rename the object."
- sleep (1)
- DocumentImpress.TypeKeys "<SHIFT F10>"
- sleep 2
- if hMenuFindSelect(27027, true, 15) = false then
+ if ( StarShapes.exists( 2 ) ) then
+ StarShapesDoorplate.click
+ else
+ warnlog( "<StarShapesDoorplate> could not be clicked" )
+ endif
+
+ sleep (3)
+ gMouseDown (40,40)
+ gMouseMove (40,40,60,60)
+ gMouseUp (60,60)
+
+ kontext "StarShapes"
+ hCloseDialog( StarShapes, "close" )
+
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 2
+ printlog "And then we rename the object."
+ sleep (1)
+ DocumentImpress.TypeKeys "<SHIFT F10>"
+ sleep 2
+ if hMenuFindSelect( MENUITEM_RENAME, true, 15) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgObject"
- NameField.SetText "Second"
- NameDlgObject.OK
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
-'----------------------------------------------------------------------------2
- printlog "Then we insert the thrid object: a Smiley."
- kontext "Toolbar"
- sleep 1
- try
+ endif
+ kontext "NameDlgObject"
+ if ( NameDlgObject.exists( 2 ) ) then
+ NameField.SetText "Second"
+ NameDlgObject.OK
+ else
+ warnlog( "<NameDlgObject> could not be accessed" )
+ endif
+
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+ '----------------------------------------------------------------------------2
+ printlog "Then we insert the thrid object: a Smiley."
+ kontext "Toolbar"
+ sleep 1
+ try
SymbolShapes.TearOff
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "SymbolShapes"
- sleep 1
- SymbolShapesSmiley.Click
- sleep 2
- gMouseDown (70,70)
- gMouseMove (70,70,89,89)
- gMouseUp (89,89)
- kontext "SymbolShapes"
- SymbolShapes.Close
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 3
- printlog "We rename the object via the Context-menu."
- DocumentImpress.TypeKeys "<SHIFT F10>"
- sleep (2)
- 'Choose rename.
- if hMenuFindSelect(27027, true, 15) = false then
+ endcatch
+ kontext "SymbolShapes"
+ sleep 1
+ SymbolShapesSmiley.Click
+ sleep 2
+ gMouseDown (70,70)
+ gMouseMove (70,70,89,89)
+ gMouseUp (89,89)
+ kontext "SymbolShapes"
+ SymbolShapes.Close
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 3
+ printlog "We rename the object via the Context-menu."
+ DocumentImpress.TypeKeys "<SHIFT F10>"
+ sleep (2)
+ 'Choose rename.
+ if hMenuFindSelect( MENUITEM_RENAME, true, 15) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgObject"
- NameField.SetText "Third"
- NameDlgObject.OK
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
-'---------------------------------------------------------------------------3
- '/// Copy the slide to the clipboard ///'
- kontext "Slides"
- SlidesControl.TypeKeys "<PAGEUP>"
- sleep (1)
- SlidesControl.TypeKeys "<SHIFT F10>"
- sleep 2
- printlog "We copy the object via the Context-menu."
-
- if hMenuFindSelect(5711, true, 10) = false then
+ endif
+ kontext "NameDlgObject"
+ NameField.SetText "Third"
+ NameDlgObject.OK
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+ '---------------------------------------------------------------------------3
+ '/// Copy the slide to the clipboard ///'
+ kontext "Slides"
+ SlidesControl.TypeKeys "<PAGEUP>"
+ sleep (1)
+ SlidesControl.TypeKeys "<SHIFT F10>"
+ sleep 2
+ printlog "We copy the object via the Context-menu."
+
+ if hMenuFindSelect(5711, true, 10) = false then
Warnlog "Context-Menu-entry `Copy` was not found. Therefore the test ends."
Call hCloseDocument
- Goto Endsub
- endif
- '/// Close the presentation-window ///'
- Call hCloseDocument
- '/// Open a new presentation ///'
- Call hNewDocument
- '/// Paste the slide from the clipboard ///'
- kontext "Slides"
- EditPaste
- '/// Delete the first slide ///'
- EditDeleteSlide
- '/// Check if all three objects exists, and has the right values ///'
- kontext "DocumentImpress"
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 1 'Select the first object.
- 'Bring up the kontext-menu for the object
- sleep (1)
- DocumentImpress.TypeKeys "<SHIFT F10>"
- sleep 2
- printlog "We rename the object via the Context-menu."
- if hMenuFindSelect(27027, true, 14) = false then
+ Goto Endsub
+ endif
+ '/// Close the presentation-window ///'
+ Call hCloseDocument
+ '/// Open a new presentation ///'
+ Call hNewDocument
+ '/// Paste the slide from the clipboard ///'
+ kontext "Slides"
+ hUseAsyncSlot( "EditPaste" )
+ '/// Delete the first slide ///'
+ hUseAsyncSlot( "EditDeleteSlide" )
+ '/// Check if all three objects exists, and has the right values ///'
+ kontext "DocumentImpress"
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 1 'Select the first object.
+ 'Bring up the kontext-menu for the object
+ sleep (1)
+ DocumentImpress.TypeKeys "<SHIFT F10>"
+ sleep 2
+ printlog "We rename the object via the Context-menu."
+ if hMenuFindSelect( MENUITEM_RENAME, true, 14) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- printlog "Read out what the name is, and checks if it's correct."
- kontext "NameDlgObject"
- value1 = NameField.GetText
- NameDlgObject.OK
- if value1 = "First" then
+ endif
+ printlog "Read out what the name is, and checks if it's correct."
+ kontext "NameDlgObject"
+ value1 = NameField.GetText
+ NameDlgObject.OK
+ if value1 = "First" then
printlog "First object was found correctly"
- else
+ else
Warnlog "Wrong object or object-name! The name found was: " + value1
- endif
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
- DocumentImpress.TypeKeys "<TAB TAB>" 'Select the second object.
- 'Bring up the kontext-menu for the object
- sleep (1)
- DocumentImpress.TypeKeys "<SHIFT F10>"
- sleep 2
- printlog "We rename the object via the Context-menu."
- if hMenuFindSelect(27027, true, 15) = false then
+ endif
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+ DocumentImpress.TypeKeys "<TAB TAB>" 'Select the second object.
+ 'Bring up the kontext-menu for the object
+ sleep (1)
+ DocumentImpress.TypeKeys "<SHIFT F10>"
+ sleep 2
+ printlog "We rename the object via the Context-menu."
+ if hMenuFindSelect( MENUITEM_RENAME, true, 15) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- printlog "Read out what the name is, and check if it's correct."
- sleep 1
- kontext "NameDlgObject"
- value12 = NameField.GetText
- NameDlgObject.OK
-
- if value12 = "Second" then
+ endif
+ printlog "Read out what the name is, and check if it's correct."
+ sleep 1
+ kontext "NameDlgObject"
+ value12 = NameField.GetText
+ NameDlgObject.OK
+
+ if value12 = "Second" then
printlog "Second object was found correctly"
- else
+ else
Warnlog "Wrong object or object-name! The name found was: " + value12
- endif
-
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
- DocumentImpress.TypeKeys "<TAB TAB TAB>" 'Select the third object.
- 'Bring up the kontext-menu for the object
- sleep (2)
- DocumentImpress.TypeKeys "<SHIFT F10>"
- sleep 2
- printlog "We rename the object via the Context-menu."
- if hMenuFindSelect(27027, true, 15) = false then
+ endif
+
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+ DocumentImpress.TypeKeys "<TAB TAB TAB>" 'Select the third object.
+ 'Bring up the kontext-menu for the object
+ sleep (2)
+ DocumentImpress.TypeKeys "<SHIFT F10>"
+ sleep 2
+ printlog "We rename the object via the Context-menu."
+ if hMenuFindSelect( MENUITEM_RENAME, true, 15) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- printlog "Read out what the name is, and check if it's correct."
- kontext "NameDlgObject"
- value13 = NameField.GetText
- NameDlgObject.OK
+ endif
+ printlog "Read out what the name is, and check if it's correct."
+ kontext "NameDlgObject"
+ value13 = NameField.GetText
+ NameDlgObject.OK
- if value13 = "Third" then
+ if value13 = "Third" then
printlog "Third object was found correctly"
- else
+ else
Warnlog "Wrong object or object-name! The name found was: " + value13
- endif
+ endif
- '/// Close the bars we opened before. ///'
- kontext "Connectorsbar"
- if Connectorsbar.Exists then Connectorsbar.Close
- kontext "SymbolShapes"
- if SymbolShapes.Exists then SymbolShapes.Close
- kontext "StarShapes"
- if StarShapes.Exists then StarShapes.Close
+ '/// Close the bars we opened before. ///'
+ kontext "Connectorsbar"
+ if Connectorsbar.Exists then Connectorsbar.Close
+ kontext "SymbolShapes"
+ if SymbolShapes.Exists then SymbolShapes.Close
+ kontext "StarShapes"
+ if StarShapes.Exists then StarShapes.Close
- '/// Close Presentation. End testcase ///'
- Call hCloseDocument
+ '/// Close Presentation. End testcase ///'
+ Call hCloseDocument
endcase 'tiSlideCopyNewPresentation
'-------------------------------------------------------------------------
@@ -273,17 +291,17 @@ testcase tiSlideCopyDuplicate
sleep 1
try
Verbinder.TearOff ' insert connector
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "Connectorsbar"
- sleep 1
- Verbinder.click
- sleep 1
- kontext "DocumentImpress"
- gMouseDown (10,10)
- gMouseMove (10,10,30,30)
- gMouseUp (30,30)
+ endcatch
+ kontext "Connectorsbar"
+ sleep 1
+ Verbinder.click
+ sleep 1
+ kontext "DocumentImpress"
+ gMouseDown (10,10)
+ gMouseMove (10,10,30,30)
+ gMouseUp (30,30)
hTypeKeys "<ESCAPE>"
hTypeKeys "<TAB>", 1
@@ -298,14 +316,14 @@ testcase tiSlideCopyDuplicate
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgObject"
- NameField.SetText "First"
- NameDlgObject.OK
- sleep 1
+ endif
+ kontext "NameDlgObject"
+ NameField.SetText "First"
+ NameDlgObject.OK
+ sleep 1
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
printlog "2 Insert Door-plate"
kontext "Toolbar"
@@ -314,19 +332,19 @@ testcase tiSlideCopyDuplicate
StarShapes.TearOff
catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "StarShapes"
- sleep 1
- StarShapesDoorplate.click
- sleep 1
- kontext "DocumentImpress"
- gMouseDown (40,40)
- gMouseMove (40,40,60,60)
- gMouseUp (60,60)
-
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 2
- sleep (1)
+ endcatch
+ kontext "StarShapes"
+ sleep 1
+ StarShapesDoorplate.click
+ sleep 1
+ kontext "DocumentImpress"
+ gMouseDown (40,40)
+ gMouseMove (40,40,60,60)
+ gMouseUp (60,60)
+
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 2
+ sleep (1)
printlog "Rename object"
kontext "DocumentImpress"
@@ -337,14 +355,14 @@ testcase tiSlideCopyDuplicate
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgObject"
- NameField.SetText "Second"
- NameDlgObject.OK
- sleep 1
+ endif
+ kontext "NameDlgObject"
+ NameField.SetText "Second"
+ NameDlgObject.OK
+ sleep 1
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
printlog "Insert Smiley."
kontext "Toolbar"
@@ -353,18 +371,18 @@ testcase tiSlideCopyDuplicate
SymbolShapes.TearOff
catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "SymbolShapes"
- sleep 1
- SymbolShapesSmiley.Click
- sleep 1
- gMouseDown (70,70)
- gMouseMove (70,70,89,89)
- gMouseUp (89,89)
-
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 3
- sleep (1)
+ endcatch
+ kontext "SymbolShapes"
+ sleep 1
+ SymbolShapesSmiley.Click
+ sleep 1
+ gMouseDown (70,70)
+ gMouseMove (70,70,89,89)
+ gMouseUp (89,89)
+
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 3
+ sleep (1)
printlog "rename object"
DocumentImpress.TypeKeys "<SHIFT F10>"
@@ -374,14 +392,14 @@ testcase tiSlideCopyDuplicate
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgObject"
- NameField.SetText "Third"
- NameDlgObject.OK
- sleep 1
+ endif
+ kontext "NameDlgObject"
+ NameField.SetText "Third"
+ NameDlgObject.OK
+ sleep 1
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
printlog "Close the bars we opened before."
kontext "Connectorsbar"
@@ -402,24 +420,24 @@ testcase tiSlideCopyDuplicate
Warnlog "Context-Menu-entry `Copy` was not found.Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
+ endif
printlog "Paste the content from the Clipboard"
kontext "Slides"
printlog "open context-menu choose 'paste'"
- EditPaste
+ EditPaste
- kontext "InsertPaste"
- if InsertPaste.Exists(1) then
+ kontext "InsertPaste"
+ if InsertPaste.Exists(1) then
After.Check
InsertPaste.OK
endif
sleep (2)
printlog "Check if we have two slides, and that the objects exists, and has the right values "
- kontext "Slides"
- SlidesControl.TypeKeys "<PAGEUP>"
+ kontext "Slides"
+ SlidesControl.TypeKeys "<PAGEUP>"
for i = 1 to 2
Printlog "Checking objects the " + i + " + time."
@@ -443,21 +461,21 @@ testcase tiSlideCopyDuplicate
NameDlgObject.OK
if value1 = "First" then
- printlog "First object was found correctly"
+ printlog "First object was found correctly"
else
- Warnlog "Wrong object or object-name! The name found was: " + value1
+ Warnlog "Wrong object or object-name! The name found was: " + value1
endif
hTypeKeys "<ESCAPE>"
DocumentImpress.TypeKeys "<TAB>", 2
- sleep (1)
+ sleep (1)
DocumentImpress.TypeKeys "<SHIFT F10>"
printlog "Choose rename"
if hMenuFindSelect(27027, true, 15) = false then
- Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
- Call hCloseDocument
- Goto Endsub
+ Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
+ Call hCloseDocument
+ Goto Endsub
endif
printlog "Read out what the name is, and check if its correct."
@@ -466,9 +484,9 @@ testcase tiSlideCopyDuplicate
NameDlgObject.OK
if value12 = "Second" then
- printlog "Second object was found correctly"
+ printlog "Second object was found correctly"
else
- Warnlog "Wrong object or object-name! The name found was: " + value12
+ Warnlog "Wrong object or object-name! The name found was: " + value12
endif
hTypeKeys "<ESCAPE>"
@@ -481,9 +499,9 @@ testcase tiSlideCopyDuplicate
sleep 1
printlog "Choose rename"
if hMenuFindSelect(27027, true, 15) = false then
- Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
- Call hCloseDocument
- Goto Endsub
+ Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
+ Call hCloseDocument
+ Goto Endsub
endif
printlog "Read out what the name is, and check if its correct."
@@ -492,13 +510,13 @@ testcase tiSlideCopyDuplicate
NameDlgObject.OK
if value13 = "Third" then
- printlog "Third object was found correctly"
+ printlog "Third object was found correctly"
else
- Warnlog "Wrong object or object-name! The name found was: " + value13
+ Warnlog "Wrong object or object-name! The name found was: " + value13
endif
kontext "Slides"
SlidesControl.TypeKeys "<DOWN>"
- next i
+ next i
printlog " Close Presentation. End testcase "
Call hCloseDocument
@@ -507,453 +525,453 @@ endcase 'tiSlidecopyDuplicate
'-----------------------------------------------------------------------
testcase tiSlideCopyPasteSpecial
-qaerrorlog "#i93377#: Paste special dialog does not come up with kontext on slide pane"
-goto endsub
-
+ qaerrorlog "#i93377#: Paste special dialog does not come up with kontext on slide pane"
+ goto endsub
+
Dim value1 as string
Dim value2 as string
Dim value3 as string
- '/// Copies slide, and pastes it with "Paste Special", ///'
- '/// just to see if the office can handle it ///'
- '/// Make new presentation ///'
- Call hNewDocument
- '/// Insert three objects: Connector, Door-plate, and Smiley ///'
+ '/// Copies slide, and pastes it with "Paste Special", ///'
+ '/// just to see if the office can handle it ///'
+ '/// Make new presentation ///'
+ Call hNewDocument
+ '/// Insert three objects: Connector, Door-plate, and Smiley ///'
- '1 Insert Connector.
- kontext "Toolbar"
- sleep 1
- try
+ '1 Insert Connector.
+ kontext "Toolbar"
+ sleep 1
+ try
Verbinder.TearOff ' insert connector
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "Connectorsbar"
- sleep 1
- Verbinder.click
- sleep 1
- gMouseDown (10,10)
- gMouseMove (10,10,30,30)
- gMouseUp (30,30)
-
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
-
- '2 Insert Door-plate.
- kontext "Toolbar"
- sleep 1
- try
+ endcatch
+ kontext "Connectorsbar"
+ sleep 1
+ Verbinder.click
+ sleep 1
+ gMouseDown (10,10)
+ gMouseMove (10,10,30,30)
+ gMouseUp (30,30)
+
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+
+ '2 Insert Door-plate.
+ kontext "Toolbar"
+ sleep 1
+ try
StarShapes.TearOff ' insert connector
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "StarShapes"
- sleep 1
- StarShapesDoorplate.click
- sleep 1
- gMouseDown (40,40)
- gMouseMove (40,40,60,60)
- gMouseUp (60,60)
-
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
-
- '3 Insert Smiley.
- kontext "Toolbar"
- sleep 1
- try
+ endcatch
+ kontext "StarShapes"
+ sleep 1
+ StarShapesDoorplate.click
+ sleep 1
+ gMouseDown (40,40)
+ gMouseMove (40,40,60,60)
+ gMouseUp (60,60)
+
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+
+ '3 Insert Smiley.
+ kontext "Toolbar"
+ sleep 1
+ try
SymbolShapes.TearOff ' insert connector
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "SymbolShapes"
- sleep 1
- SymbolShapesSmiley.Click
- sleep 1
- gMouseDown (70,70)
- gMouseMove (70,70,89,89)
- gMouseUp (89,89)
-
- '/// Copy the slide to the clipboard ///'
- kontext "Slides"
- SlidesControl.TypeKeys "<PAGEUP>"
- SlidesControl.TypeKeys "<SHIFT F10>"
- sleep 1
- 'Choose `Copy`
- if hMenuFindSelect(5711, true, 10) = false then
+ endcatch
+ kontext "SymbolShapes"
+ sleep 1
+ SymbolShapesSmiley.Click
+ sleep 1
+ gMouseDown (70,70)
+ gMouseMove (70,70,89,89)
+ gMouseUp (89,89)
+
+ '/// Copy the slide to the clipboard ///'
+ kontext "Slides"
+ SlidesControl.TypeKeys "<PAGEUP>"
+ SlidesControl.TypeKeys "<SHIFT F10>"
+ sleep 1
+ 'Choose `Copy`
+ if hMenuFindSelect(5711, true, 10) = false then
Warnlog "Context-Menu-entry `Copy` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
-
- '/// Try to paste special. And check that the office still stays alive ///'
- EditPasteSpecial
- kontext "InhaltEinfuegen"
- InhaltEinfuegen.OK
-
- '/// Close the bars we opened before. ///'
- kontext "Connectorsbar"
- if Connectorsbar.Exists then Connectorsbar.Close
- kontext "SymbolShapes"
- if SymbolShapes.Exists then SymbolShapes.Close
- kontext "StarShapes"
- if StarShapes.Exists then StarShapes.Close
+ endif
+
+ '/// Try to paste special. And check that the office still stays alive ///'
+ EditPasteSpecial
+ kontext "InhaltEinfuegen"
+ InhaltEinfuegen.OK
+
+ '/// Close the bars we opened before. ///'
+ kontext "Connectorsbar"
+ if Connectorsbar.Exists then Connectorsbar.Close
+ kontext "SymbolShapes"
+ if SymbolShapes.Exists then SymbolShapes.Close
+ kontext "StarShapes"
+ if StarShapes.Exists then StarShapes.Close
- sleep 1
- kontext "DocumentImpress"
- '/// Close Presentation. End testcase ///'
+ sleep 1
+ kontext "DocumentImpress"
+ '/// Close Presentation. End testcase ///'
- Call hCloseDocument
+ Call hCloseDocument
endcase 'tiSlideCopyPasteSpecial
'-----------------------------------------------------------------------
testcase tiSlideCopyInSlideSorter
-qaerrorlog "#i58418#: Pasting in slide sorter sets slide to wrong position"
-goto endsub
-
+ qaerrorlog "#i58418#: Pasting in slide sorter sets slide to wrong position"
+ goto endsub
+
Dim value1 as string
Dim value2 as string
Dim value3 as string
- '/// Copies slides within the slidesorter, and makes sure they are pasted on the correct position ///'
- '/// Make new presentation ///'
- Call hNewDocument
- '/// Insert an object: Connector, on the first slide ///'
- kontext "Toolbar"
- sleep 1
- try
+ '/// Copies slides within the slidesorter, and makes sure they are pasted on the correct position ///'
+ '/// Make new presentation ///'
+ Call hNewDocument
+ '/// Insert an object: Connector, on the first slide ///'
+ kontext "Toolbar"
+ sleep 1
+ try
Verbinder.TearOff
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "Connectorsbar"
- sleep 1
- Verbinder.click
- Verbinder.click
- Verbinder.click
- sleep 1
- kontext "DocumentImpress"
- gMouseDown (10,10)
- gMouseMove (10,10,30,30)
- gMouseUp (30,30)
- Printlog " Inserted a Connector-object."
- 'Rename object
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 1
- DocumentImpress.TypeKeys "<SHIFT F10>"
-
- 'Rename
- if hMenuFindSelect(27027, true, 14) = false then
+ endcatch
+ kontext "Connectorsbar"
+ sleep 1
+ Verbinder.click
+ Verbinder.click
+ Verbinder.click
+ sleep 1
+ kontext "DocumentImpress"
+ gMouseDown (10,10)
+ gMouseMove (10,10,30,30)
+ gMouseUp (30,30)
+ Printlog " Inserted a Connector-object."
+ 'Rename object
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 1
+ DocumentImpress.TypeKeys "<SHIFT F10>"
+
+ 'Rename
+ if hMenuFindSelect(27027, true, 14) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgObject"
- NameField.SetText "First"
- NameDlgObject.OK
- sleep 1
- Printlog " Renamed a the object to 'First'"
-
- sleep 3
- '/// Rename slide to "1" ///'
- kontext "Slides"
- SlidesControl.TypeKeys "<PAGEUP>"
- SlidesControl.TypeKeys "<SHIFT F10>"
- sleep 3
- 'Rename
- if hMenuFindSelect(27268, true, 2) = false then
+ endif
+ kontext "NameDlgObject"
+ NameField.SetText "First"
+ NameDlgObject.OK
+ sleep 1
+ Printlog " Renamed a the object to 'First'"
+
+ sleep 3
+ '/// Rename slide to "1" ///'
+ kontext "Slides"
+ SlidesControl.TypeKeys "<PAGEUP>"
+ SlidesControl.TypeKeys "<SHIFT F10>"
+ sleep 3
+ 'Rename
+ if hMenuFindSelect(27268, true, 2) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
-
- kontext "NameDlgPage"
- NameField.SetText "1"
- NameDlgPage.OK
- sleep 1
- Printlog " Renamed the Slide to '1'"
-
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
- sleep 3
-
- '/// Insert a new slide ///'
- kontext "Slides"
- SlidesControl.TypeKeys "<TAB><PAGEDOWN>"
- SlidesControl.OpenContextMenu
- sleep 3
- 'Insert slide
- if hMenuFindSelect(27014, true, 1) = false then
+ endif
+
+ kontext "NameDlgPage"
+ NameField.SetText "1"
+ NameDlgPage.OK
+ sleep 1
+ Printlog " Renamed the Slide to '1'"
+
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+ sleep 3
+
+ '/// Insert a new slide ///'
+ kontext "Slides"
+ SlidesControl.TypeKeys "<TAB><PAGEDOWN>"
+ SlidesControl.OpenContextMenu
+ sleep 3
+ 'Insert slide
+ if hMenuFindSelect(27014, true, 1) = false then
Warnlog "Context-Menu-entry `Insert slide` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- Printlog " Inserted a new slide."
- '/// Insert an object: Door-plate, on the second slide ///'
- kontext "Toolbar"
- sleep 1
- try
+ endif
+ Printlog " Inserted a new slide."
+ '/// Insert an object: Door-plate, on the second slide ///'
+ kontext "Toolbar"
+ sleep 1
+ try
StarShapes.TearOff
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "StarShapes"
- sleep 1
- StarShapesDoorplate.click
- sleep 1
- kontext "DocumentImpress"
- gMouseDown (40,40)
- gMouseMove (40,40,60,60)
- gMouseUp (60,60)
- Printlog " Inserted a Door-Plate-object."
-
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 2
- hTypeKeys "<SHIFT F10>"
-
- ' Rename
- if hMenuFindSelect(27027, true, 15) = false then
+ endcatch
+ kontext "StarShapes"
+ sleep 1
+ StarShapesDoorplate.click
+ sleep 1
+ kontext "DocumentImpress"
+ gMouseDown (40,40)
+ gMouseMove (40,40,60,60)
+ gMouseUp (60,60)
+ Printlog " Inserted a Door-Plate-object."
+
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 2
+ hTypeKeys "<SHIFT F10>"
+
+ ' Rename
+ if hMenuFindSelect(27027, true, 15) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
-
- kontext "NameDlgObject"
- NameField.SetText "Second"
- NameDlgObject.OK
- sleep 1
- Printlog " Renamed a the object to 'Second'"
-
- kontext "DocumentImpress"
- hMouseClick DocumentImpress, 90, 90
- sleep 2
- '/// Rename slide to "2" ///'
- kontext "Slides"
- SlidesControl.OpenContextMenu
- sleep 3
- ' Rename
- if hMenuFindSelect(27268, true, 3) = false then
+ endif
+
+ kontext "NameDlgObject"
+ NameField.SetText "Second"
+ NameDlgObject.OK
+ sleep 1
+ Printlog " Renamed a the object to 'Second'"
+
+ kontext "DocumentImpress"
+ hMouseClick DocumentImpress, 90, 90
+ sleep 2
+ '/// Rename slide to "2" ///'
+ kontext "Slides"
+ SlidesControl.OpenContextMenu
+ sleep 3
+ ' Rename
+ if hMenuFindSelect(27268, true, 3) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgPage"
- NameField.SetText "2"
- NameDlgPage.OK
- sleep 1
- Printlog " Renamed the slide '2'"
-
- '/// Insert a new slide ///'
- kontext "Slides"
- Slidescontrol.TypeKeys "<PAGEDOWN>", 2
- Slidescontrol.TypeKeys "<SHIFT F10>"
- sleep 3
- 'Insert slide
- if hMenuFindSelect(27014, true, 1) = false then
+ endif
+ kontext "NameDlgPage"
+ NameField.SetText "2"
+ NameDlgPage.OK
+ sleep 1
+ Printlog " Renamed the slide '2'"
+
+ '/// Insert a new slide ///'
+ kontext "Slides"
+ Slidescontrol.TypeKeys "<PAGEDOWN>", 2
+ Slidescontrol.TypeKeys "<SHIFT F10>"
+ sleep 3
+ 'Insert slide
+ if hMenuFindSelect(27014, true, 1) = false then
Warnlog "Context-Menu-entry `Insert slide` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- Printlog " Inserted a new slide."
+ endif
+ Printlog " Inserted a new slide."
- '/// Insert an object: Smiley, on the second slide ///'
- kontext "Toolbar"
- sleep 1
- try
+ '/// Insert an object: Smiley, on the second slide ///'
+ kontext "Toolbar"
+ sleep 1
+ try
SymbolShapes.TearOff
- catch
+ catch
warnlog "bug for GH from FHA; .tearoff doesnt tell success"
- endcatch
- kontext "SymbolShapes"
- sleep 1
- SymbolShapesSmiley.Click
- sleep 1
- gMouseDown (70,70)
- gMouseMove (70,70,89,89)
- gMouseUp (89,89)
- Printlog " Inserted a Smiley-object."
-
- 'Rename object
- hTypeKeys "<ESCAPE>"
- hTypeKeys "<TAB>", 2
- hTypeKeys "<SHIFT F10>"
-
- 'Choose rename.
- if hMenuFindSelect(27027, true, 15) = false then
+ endcatch
+ kontext "SymbolShapes"
+ sleep 1
+ SymbolShapesSmiley.Click
+ sleep 1
+ gMouseDown (70,70)
+ gMouseMove (70,70,89,89)
+ gMouseUp (89,89)
+ Printlog " Inserted a Smiley-object."
+
+ 'Rename object
+ hTypeKeys "<ESCAPE>"
+ hTypeKeys "<TAB>", 2
+ hTypeKeys "<SHIFT F10>"
+
+ 'Choose rename.
+ if hMenuFindSelect(27027, true, 15) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- kontext "NameDlgObject"
- NameField.SetText "Third"
- NameDlgObject.OK
- Printlog " Renamed a the object to 'Third'"
-
- '/// Rename slide to "3" ///'
- kontext "Slides"
- Slidescontrol.TypeKeys "<PAGEDOWN>", 2
- SlidesControl.OpenContextMenu
- sleep 3
- ' Rename
- if hMenuFindSelect(27268, true, 3) = false then
+ endif
+ kontext "NameDlgObject"
+ NameField.SetText "Third"
+ NameDlgObject.OK
+ Printlog " Renamed a the object to 'Third'"
+
+ '/// Rename slide to "3" ///'
+ kontext "Slides"
+ Slidescontrol.TypeKeys "<PAGEDOWN>", 2
+ SlidesControl.OpenContextMenu
+ sleep 3
+ ' Rename
+ if hMenuFindSelect(27268, true, 3) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
+ endif
+
+ kontext "NameDlgPage"
+ NameField.SetText "3"
+ NameDlgPage.OK
+ sleep 1
+ Printlog " Renamed the slide '3'"
+
+ '/// Close the bars we opened before. ///'
+ kontext "Connectorsbar"
+ if Connectorsbar.Exists then Connectorsbar.Close
+ kontext "SymbolShapes"
+ if SymbolShapes.Exists then SymbolShapes.Close
+ kontext "StarShapes"
+ if StarShapes.Exists then StarShapes.Close
- kontext "NameDlgPage"
- NameField.SetText "3"
- NameDlgPage.OK
- sleep 1
- Printlog " Renamed the slide '3'"
+ '/// Change to Slidesorter ///'
+ kontext "DocumentImpress"
+ ViewSlideSorter
- '/// Close the bars we opened before. ///'
- kontext "Connectorsbar"
- if Connectorsbar.Exists then Connectorsbar.Close
- kontext "SymbolShapes"
- if SymbolShapes.Exists then SymbolShapes.Close
- kontext "StarShapes"
- if StarShapes.Exists then StarShapes.Close
+ '/// Now we have changed view to the slidesorter ///'
- '/// Change to Slidesorter ///'
- kontext "DocumentImpress"
- ViewSlideSorter
+ kontext "Slides"
+ Printlog " Changed view to 'SlideSorter'"
+ '/// Make sure the last slide is selcted ///'
+ SlidesControl.TypeKeys "<TAB>"
+ SlidesControl.TypeKeys "<PAGEDOWN>", 3
- '/// Now we have changed view to the slidesorter ///'
-
- kontext "Slides"
- Printlog " Changed view to 'SlideSorter'"
- '/// Make sure the last slide is selcted ///'
- SlidesControl.TypeKeys "<TAB>"
- SlidesControl.TypeKeys "<PAGEDOWN>", 3
-
- '/// Cut the last slide ///'
- SlidesControl.TypeKeys "<MOD1 X>"
+ '/// Cut the last slide ///'
+ SlidesControl.TypeKeys "<MOD1 X>"
- '/// Make sure the first slide is selected ///'
- SlidesControl.TypeKeys "<TAB>"
- SlidesControl.TypeKeys "<PAGEUP>", 2
- sleep 1
+ '/// Make sure the first slide is selected ///'
+ SlidesControl.TypeKeys "<TAB>"
+ SlidesControl.TypeKeys "<PAGEUP>", 2
+ sleep 1
- '/// Paste the Slide ///'
- kontext "Slides"
- SlidesControl.TypeKeys "<MOD1 V>"
+ '/// Paste the Slide ///'
+ kontext "Slides"
+ SlidesControl.TypeKeys "<MOD1 V>"
- '/// choose "Before" as specification for where
- Kontext "InsertPaste"
- if InsertPaste.Exists(3) then
+ '/// choose "Before" as specification for where
+ Kontext "InsertPaste"
+ if InsertPaste.Exists(3) then
Before.Check
InsertPaste.OK
Printlog " Pasted slide 'Before'"
- else
+ else
warnlog " Problem when copying/pasting slide."
- endif
-
- '/// Check where the slide ended up ///'
- kontext "Slides"
- SlidesControl.TypeKeys "<TAB>"
- SlidesControl.TypeKeys "<PAGEUP>", 3 'to get to the first slide
- SlidesControl.TypeKeys "<SHIFT F10>"
- sleep 3
- ' Rename
- if hMenuFindSelect(27268, true, 3) = false then
+ endif
+
+ '/// Check where the slide ended up ///'
+ kontext "Slides"
+ SlidesControl.TypeKeys "<TAB>"
+ SlidesControl.TypeKeys "<PAGEUP>", 3 'to get to the first slide
+ SlidesControl.TypeKeys "<SHIFT F10>"
+ sleep 3
+ ' Rename
+ if hMenuFindSelect(27268, true, 3) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
+ endif
- kontext "NameDlgPage"
- if NameField.GetText <> "3" then
+ kontext "NameDlgPage"
+ if NameField.GetText <> "3" then
Warnlog "Wrong slide found! Expected nr 3, but found " + NameField.GetText + "."
- else
+ else
Printlog " Slide nr 3 was found correctly."
- endif
- NameDlgPage.OK
- sleep 1
-
- kontext "Slides"
- '/// Choose the slide in the middle (named "1") ///'
- SlidesControl.TypeKeys "<TAB>"
- SlidesControl.TypeKeys "<PAGEDOWN>", 3 'to get to the last slide
- SlidesControl.TypeKeys "<PAGEUP>" 'to go back one step
- SlidesControl.OpenContextMenu (true)
- ' Check the name of that slide (via Rename)
- if hMenuFindSelect(27268, true, 3) = false then
+ endif
+ NameDlgPage.OK
+ sleep 1
+
+ kontext "Slides"
+ '/// Choose the slide in the middle (named "1") ///'
+ SlidesControl.TypeKeys "<TAB>"
+ SlidesControl.TypeKeys "<PAGEDOWN>", 3 'to get to the last slide
+ SlidesControl.TypeKeys "<PAGEUP>" 'to go back one step
+ SlidesControl.OpenContextMenu (true)
+ ' Check the name of that slide (via Rename)
+ if hMenuFindSelect(27268, true, 3) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
+ endif
- kontext "NameDlgPage"
- if NameField.GetText <> "1" then
+ kontext "NameDlgPage"
+ if NameField.GetText <> "1" then
Warnlog "Wrong slide found! Expected nr 1, but found " + NameField.GetText + "."
- else
+ else
Printlog " Slide nr 1 was found correctly in the middle position."
- endif
- NameDlgPage.OK
- sleep 1
- kontext "Slides"
-
- '/// Cut the slide ///'
- SlidesControl.TypeKeys "<SHIFT F10>"
- sleep 3
- if hMenuFindSelect(5710, true, 10) = false then
+ endif
+ NameDlgPage.OK
+ sleep 1
+ kontext "Slides"
+
+ '/// Cut the slide ///'
+ SlidesControl.TypeKeys "<SHIFT F10>"
+ sleep 3
+ if hMenuFindSelect(5710, true, 10) = false then
Warnlog "Context-Menu-entry `Cut` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
+ endif
- '/// Make sure we have selected the last slide ///'
- SlidesControl.TypeKeys "<TAB>"
- SlidesControl.TypeKeys "<PAGEDOWN>", 2
+ '/// Make sure we have selected the last slide ///'
+ SlidesControl.TypeKeys "<TAB>"
+ SlidesControl.TypeKeys "<PAGEDOWN>", 2
- '/// Place the mousepointer to the left of the first slide ///'
- sleep 1
- kontext "Slides"
- SlidesControl.MouseMove 2, 3
- SlidesControl.OpenContextMenu true
- sleep 3
+ '/// Place the mousepointer to the left of the first slide ///'
+ sleep 1
+ kontext "Slides"
+ SlidesControl.MouseMove 2, 3
+ SlidesControl.OpenContextMenu true
+ sleep 3
- '/// Paste the Slide ///'
- if hMenuFindSelect(5712, true, 12) = false then
+ '/// Paste the Slide ///'
+ if hMenuFindSelect(5712, true, 12) = false then
Warnlog "Context-Menu-entry `Paste` were not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
- sleep 1
+ endif
+ sleep 1
- '/// Choose "After" as specification for where ///'
- Kontext "InsertPaste"
- if InsertPaste.Exists(3) then
+ '/// Choose "After" as specification for where ///'
+ Kontext "InsertPaste"
+ if InsertPaste.Exists(3) then
After.Check
InsertPaste.OK
Printlog " Pasted slide 'After'"
- else
+ else
warnlog " Problem when copying/pasting slide."
- endif
-
- '/// Check where the slide ended up. Should have showed up at the last position ///'
- kontext "Slides"
- SlidesControl.TypeKeys "<TAB>"
- SlidesControl.TypeKeys "<PAGEDOWN>", 3 'to get to the last slide
- SlidesControl.TypeKeys "<SHIFT F10>" '= open context menu
- sleep 3
- ' Rename
- if hMenuFindSelect(27268, true, 3) = false then
+ endif
+
+ '/// Check where the slide ended up. Should have showed up at the last position ///'
+ kontext "Slides"
+ SlidesControl.TypeKeys "<TAB>"
+ SlidesControl.TypeKeys "<PAGEDOWN>", 3 'to get to the last slide
+ SlidesControl.TypeKeys "<SHIFT F10>" '= open context menu
+ sleep 3
+ ' Rename
+ if hMenuFindSelect(27268, true, 3) = false then
Warnlog "Context-Menu-entry `Rename` was not found. Therefore the test ends."
Call hCloseDocument
Goto Endsub
- endif
+ endif
- kontext "NameDlgPage"
- if NameField.GetText <> "1" then
+ kontext "NameDlgPage"
+ if NameField.GetText <> "1" then
Warnlog "Wrong slide found! Expected nr 1, but found " + NameField.GetText + "."
- else
+ else
Printlog " Slide nr 1 was found correctly."
- endif
- NameDlgPage.OK
- sleep 1
+ endif
+ NameDlgPage.OK
+ sleep 1
- '/// Close Presentation. End testcase ///'
- Call hCloseDocument
+ '/// Close Presentation. End testcase ///'
+ Call hCloseDocument
endcase 'tiSlideCopyInSlideSorter
'------------------------------------------------------------------------
diff --git a/testautomation/graphics/optional/includes/impress/i_us2_present.inc b/testautomation/graphics/optional/includes/impress/i_us2_present.inc
index 6c8fede6a530..6b2b64881987 100644
--- a/testautomation/graphics/optional/includes/impress/i_us2_present.inc
+++ b/testautomation/graphics/optional/includes/impress/i_us2_present.inc
@@ -29,9 +29,6 @@
'*
'* short description : Impress User-Scenario: Beginner makes presentation.
'*
-'***************************************************************************
-' #1 i_us2_pres1
-' #1 i_us2_pres2
'\**************************************************************************
testcase i_us2_pres1
@@ -43,218 +40,217 @@ testcase i_us2_pres1
kontext "DocumentImpress"
printlog "New - Wizard - Presentation."
FileAutopilotPresentation
- printlog "Called File-Autopilot-Presentation."
- printlog "Create from Template"
- kontext "AutoPilotPraesentation1"
- FromTemplate.Check
- 'This part is for language-indepencancy
- if gOOO = TRUE then
- TemplateRegion.Select (1)
- printlog "Choose a Presentation"
- TemplateList.Select (2)
- else
- TemplateRegion.Select (1)
- if TemplateList.GetItemCount < 40 then
+ printlog "Called File-Autopilot-Presentation."
+ printlog "Create from Template"
+ kontext "AutoPilotPraesentation1"
+ FromTemplate.Check
+ 'This part is for language-indepencancy
+ if gOOO = TRUE then
+ TemplateRegion.Select (1)
+ printlog "Choose a Presentation"
+ TemplateList.Select (2)
+ else
+ TemplateRegion.Select (1)
+ if TemplateList.GetItemCount < 40 then
TemplateRegion.Select (2)
if TemplateList.GetItemCount < 40 then
- TemplateRegion.Select (3)
- if TemplateList.GetItemCount < 40 then
- Warnlog " No Templates selectable in the wizard. Please check."
- goto endsub
- endif
+ TemplateRegion.Select (3)
+ if TemplateList.GetItemCount < 40 then
+ Warnlog " No Templates selectable in the wizard. Please check."
+ goto endsub
+ endif
endif
- endif
- printlog "Choose a Presentation"
- TemplateList.Select (4)
- endif
- printlog "Next"
- Nextbutton.Click
- sleep (1)
- Backbutton.Click
- sleep (1)
- Nextbutton.Click
+ endif
+ printlog "Choose a Presentation"
+ TemplateList.Select (4)
+ endif
+ printlog "Next"
+ Nextbutton.Click
+ sleep (1)
+ Backbutton.Click
+ sleep (1)
+ Nextbutton.Click
- printlog " Switched to the second Wizard-page."
- sleep (1)
- printlog "Presentations"
- kontext "AutoPilotPraesentation2"
- printlog "Output: Screen"
- if gOOO = TRUE then 'OpenOffice.org
- Background.Select (2)
- if Backgroundchoice.GetItemCount < 2 then
+ printlog " Switched to the second Wizard-page."
+ sleep (1)
+ printlog "Presentations"
+ kontext "AutoPilotPraesentation2"
+ printlog "Output: Screen"
+ if gOOO = TRUE then 'OpenOffice.org
+ Background.Select (2)
+ if Backgroundchoice.GetItemCount < 2 then
Background.Select (1)
if Backgroundchoice.GetItemCount = 0 then
- Warnlog " No Backgrounds selectable in the wizard. Please check."
- goto endsub
+ Warnlog " No Backgrounds selectable in the wizard. Please check."
+ goto endsub
endif
- endif
- Backgroundchoice.Select (2)
- else 'StarOffice
- Background.Select (3)
- if Backgroundchoice.GetItemCount < 10 then
+ endif
+ Backgroundchoice.Select (2)
+ else 'StarOffice
+ Background.Select (3)
+ if Backgroundchoice.GetItemCount < 10 then
Background.Select (2)
if Backgroundchoice.GetItemCount < 10 then
- Background.Select (3)
- if Backgroundchoice.GetItemCount < 10 then
- Warnlog " No Backgrounds selectable in the wizard. Please check."
- goto endsub
- endif
+ Background.Select (3)
+ if Backgroundchoice.GetItemCount < 10 then
+ Warnlog " No Backgrounds selectable in the wizard. Please check."
+ goto endsub
+ endif
endif
- endif
- Backgroundchoice.Select (5)
- endif
- Screen.Check
- printlog "Next"
- Nextbutton.Click
+ endif
+ Backgroundchoice.Select (5)
+ endif
+ Screen.Check
+ printlog "Next"
+ Nextbutton.Click
- printlog " Switched to the third Wizard-page."
- sleep (1)
- kontext "AutoPilotPraesentation3"
- printlog "Random Effect. Random Speed. Click through every choice."
- Effect.Select (15)
- Speed.Select (3)
- WaitSlot (5000)
- Automatic.Check
- Timebutton.SetText "00:00:15"
- Break.SetText "00:00:20"
- Logo.Check
- printlog "Next"
- Nextbutton.Click
+ printlog " Switched to the third Wizard-page."
+ sleep (1)
+ kontext "AutoPilotPraesentation3"
+ printlog "Random Effect. Random Speed. Click through every choice."
+ Effect.Select (15)
+ Speed.Select (3)
+ WaitSlot (5000)
+ Automatic.Check
+ Timebutton.SetText "00:00:15"
+ Break.SetText "00:00:20"
+ Logo.Check
+ printlog "Next"
+ Nextbutton.Click
- printlog " Switched to the fourth Wizard-page."
- sleep (1)
- kontext "AutoPilotPraesentation4"
- printlog "Fill in some company-name-subject-text"
- AddName.SetText "Lala1"
- AddTopic.SetText "Lala2"
- Askinformation.SetText "Lala3"
- printlog "Next"
- Nextbutton.Click
- printlog " Switched to the fifth Wizard-page."
- sleep (1)
- kontext "AutoPilotPraesentation5"
- Summary.Check
- printlog "Create"
- WaitSlot (2000)
- AutoPilotPraesentation5.OK
+ printlog " Switched to the fourth Wizard-page."
+ sleep (1)
+ kontext "AutoPilotPraesentation4"
+ printlog "Fill in some company-name-subject-text"
+ AddName.SetText "Lala1"
+ AddTopic.SetText "Lala2"
+ Askinformation.SetText "Lala3"
+ printlog "Next"
+ Nextbutton.Click
+ printlog " Switched to the fifth Wizard-page."
+ sleep (1)
+ kontext "AutoPilotPraesentation5"
+ Summary.Check
+ printlog "Create"
+ WaitSlot (2000)
+ AutoPilotPraesentation5.OK
- sleep (1)
- printlog " Pressed 'Create'."
- printlog "Add a Slide via Insert - Slide."
- Kontext "DocumentImpress"
- hTypeKeys "What we will talk about"
- gMouseClick 1,1
- Kontext "DocumentImpress"
- DocumentImpress.UseMenu
- hMenuSelectNr (4)
- hMenuSelectNr (1)
- sleep (1)
+ sleep (1)
+ printlog " Pressed 'Create'."
+ printlog "Add a Slide via Insert - Slide."
+ Kontext "DocumentImpress"
+ hTypeKeys "What we will talk about"
+ gMouseClick 1,1
+ Kontext "DocumentImpress"
+ DocumentImpress.UseMenu
+ hMenuSelectNr (4)
+ hMenuSelectNr (1)
+ sleep (1)
- kontext "Slides"
- SlidesControl.TypeKeys "<HOME><RETURN>"
- kontext "DocumentImpress"
- DocumentImpress.TypeKeys "<TAB>Text we just wrote..."
- printlog "Switch to the second slide."
- kontext "Slides"
- SlidesControl.TypeKeys "<DOWN><RETURN>"
- SlidesControl.TypeKeys "<RETURN>"
- kontext "DocumentImpress"
- printlog "Insert three lines with text, all with different formatting."
- call hTextrahmenErstellen ("First line with text",20,50,70,50)
- call hTextrahmenErstellen ("Second line with text",20,60,70,60)
- call hTextrahmenErstellen ("Third line with text",20,70,70,70)
- printlog "Go down to the eleventh slide."
- kontext "Slides"
- SlidesControl.TypeKeys "<HOME>"
- SlidesControl.TypeKeys "<PAGEDOWN>", 10
- SlidesControl.TypeKeys "<RETURN>"
-call sSelectEmptyLayout
- printlog "Insert Smiley, + two circles around the eyes, + two new pupils,"
- printlog "placed at some interesteing place inside the circles."
- Kontext "Toolbar"
- SymbolShapes.TearOff
- sleep (1)
- kontext "SymbolShapes"
- SymbolShapesSmiley.Click
- sleep (1)
- kontext "DrawingObjectbar"
- AreaFilling.TypeKeys "<HOME>"
- AreaFilling.TypeKeys "<DOWN>", 10
- printlog "Select (11) 'Lime-Green"
- AreaFilling.TypeKeys "<RETURN>"
- sleep (1)
- gMouseMove (53,50,90,80)
- Kontext "Toolbar"
- Ellipsen.Click
- kontext "SymbolShapes"
- SymbolShapes.Close
- Kontext "DocumentImpress"
- gMouseMove (60,43,70,65)
- hTypeKeys "<Escape>"
- Kontext "Toolbar"
- Ellipsen.Click
- gMouseMove (65,57,69,63)
- hTypeKeys "<Escape>"
- Kontext "Toolbar"
- Ellipsen.Click
- gMouseMove (70,50,82,65)
- hTypeKeys "<Escape>"
- Kontext "Toolbar"
- Ellipsen.Click
- gMouseMove (77,57,80,63)
- hTypeKeys "<Escape>"
- sleep (1)
+ kontext "Slides"
+ SlidesControl.TypeKeys "<HOME><RETURN>"
+ kontext "DocumentImpress"
+ DocumentImpress.TypeKeys "<TAB>Text we just wrote..."
+ printlog "Switch to the second slide."
+ kontext "Slides"
+ SlidesControl.TypeKeys "<DOWN><RETURN>"
+ SlidesControl.TypeKeys "<RETURN>"
+ kontext "DocumentImpress"
+ printlog "Insert three lines with text, all with different formatting."
+ call hTextrahmenErstellen ("First line with text",20,50,70,50)
+ call hTextrahmenErstellen ("Second line with text",20,60,70,60)
+ call hTextrahmenErstellen ("Third line with text",20,70,70,70)
+ printlog "Go down to the eleventh slide."
+ kontext "Slides"
+ SlidesControl.TypeKeys "<HOME>"
+ SlidesControl.TypeKeys "<PAGEDOWN>", 10
+ SlidesControl.TypeKeys "<RETURN>"
+ printlog "Insert Smiley, + two circles around the eyes, + two new pupils,"
+ printlog "placed at some interesteing place inside the circles."
+ Kontext "Toolbar"
+ SymbolShapes.TearOff
+ sleep (1)
+ kontext "SymbolShapes"
+ SymbolShapesSmiley.Click
+ sleep (1)
+ kontext "DrawingObjectbar"
+ AreaFilling.TypeKeys "<HOME>"
+ AreaFilling.TypeKeys "<DOWN>", 10
+ printlog "Select (11) 'Lime-Green"
+ AreaFilling.TypeKeys "<RETURN>"
+ sleep (1)
+ gMouseMove (53,50,90,80)
+ Kontext "Toolbar"
+ Ellipsen.Click
+ kontext "SymbolShapes"
+ SymbolShapes.Close
+ Kontext "DocumentImpress"
+ gMouseMove (60,43,70,65)
+ hTypeKeys "<Escape>"
+ Kontext "Toolbar"
+ Ellipsen.Click
+ gMouseMove (65,57,69,63)
+ hTypeKeys "<Escape>"
+ Kontext "Toolbar"
+ Ellipsen.Click
+ gMouseMove (70,50,82,65)
+ hTypeKeys "<Escape>"
+ Kontext "Toolbar"
+ Ellipsen.Click
+ gMouseMove (77,57,80,63)
+ hTypeKeys "<Escape>"
+ sleep (1)
- printlog "Insert new slide."
- kontext "Slides"
- printlog "get to the last slide."
- SlidesControl.TypeKeys "<PAGEDOWN>", 15
- SlidesControl.TypeKeys "<RETURN>"
- printlog "Delete the two fields the stylist has."
- kontext "DocumentImpress"
- gMouseClick 1,1
- EditSelectAll
- DocumentImpress.TypeKeys "<DELETE>"
- printlog "Insert-Picture-From File. (some crazy picture which fits the theme)"
- InsertGraphicsFromFile
- Kontext "GrafikEinfuegenDlg"
- printlog "Open graphic"
- Dateiname.SetText ConvertPath (gTesttoolPath + "global\input\graf_inp\ball.eps")
- Oeffnen.Click
- gMouseClick 1,1
- printlog "Add a text above the picture. 'There is movement..."
- call hTextrahmenErstellen ("There is movement...",20,20,70,30)
+ printlog "Insert new slide."
+ kontext "Slides"
+ printlog "get to the last slide."
+ SlidesControl.TypeKeys "<PAGEDOWN>", 15
+ SlidesControl.TypeKeys "<RETURN>"
+ printlog "Delete the two fields the stylist has."
+ kontext "DocumentImpress"
+ gMouseClick 1,1
+ EditSelectAll
+ DocumentImpress.TypeKeys "<DELETE>"
+ printlog "Insert-Picture-From File. (some crazy picture which fits the theme)"
+ InsertGraphicsFromFile
+ Kontext "GrafikEinfuegenDlg"
+ printlog "Open graphic"
+ Dateiname.SetText ConvertPath (gTesttoolPath + "global\input\graf_inp\ball.eps")
+ Oeffnen.Click
+ gMouseClick 1,1
+ printlog "Add a text above the picture. 'There is movement..."
+ call hTextrahmenErstellen ("There is movement...",20,20,70,30)
- printlog "Add a new slide."
- InsertSlide
- printlog " Inserted new slide."
- kontext "DocumentImpress"
- printlog "Bla bla about everything..."
- call hTextrahmenErstellen ("Bla bla about everything...",20,20,70,30)
+ printlog "Add a new slide."
+ InsertSlide
+ printlog " Inserted new slide."
+ kontext "DocumentImpress"
+ printlog "Bla bla about everything..."
+ call hTextrahmenErstellen ("Bla bla about everything...",20,20,70,30)
- printlog "Add a new slide."
- InsertSlide
- printlog " Inserted new slide."
- kontext "DocumentImpress"
- printlog "Write text: Q & A"
- call hTextrahmenErstellen ("Q & A",20,20,70,30)
- DocumentImpress.TypeKeys "<SHIFT HOME>"
- sleep (1)
+ printlog "Add a new slide."
+ InsertSlide
+ printlog " Inserted new slide."
+ kontext "DocumentImpress"
+ printlog "Write text: Q & A"
+ call hTextrahmenErstellen ("Q & A",20,20,70,30)
+ DocumentImpress.TypeKeys "<SHIFT HOME>"
+ sleep (1)
- printlog "Add a new slide."
- InsertSlide
- kontext "DocumentImpress"
+ printlog "Add a new slide."
+ InsertSlide
+ kontext "DocumentImpress"
- printlog "Thanks for listening, time for coffee... (ending)"
- call hTextrahmenErstellen ("Class dismissed...",20,20,70,30)
+ printlog "Thanks for listening, time for coffee... (ending)"
+ call hTextrahmenErstellen ("Class dismissed...",20,20,70,30)
- printlog "Save Document"
- call hFileSaveAsKill (PresentationFile1)
- printlog "OK saved at ", PresentationFile1
- sleep (1)
+ printlog "Save Document"
+ call hFileSaveAsKill (PresentationFile1)
+ printlog "OK saved at ", PresentationFile1
+ sleep (1)
- printlog "Close Document"
- Call hCloseDocument
+ printlog "Close Document"
+ Call hCloseDocument
endcase 'i_us2_pres1
'------------------------------------------------------------------------------
@@ -262,74 +258,74 @@ endcase 'i_us2_pres1
testcase i_us2_pres2
qaerrorlog "not yet ready."
goto endsub
- dim Result1, Result2 as integer
- dim iPictures as integer
- dim PresentationFile1, PresentationFile2, PresentationFileToBeLoaded as string
- PresentationFile1 = (ConvertPath (gTesttoolPath + "graphics\required\input\rightfont.odp"))
- PresentationFile2 = (ConvertPath (gOfficePath + "user\work\xxxxxx9.odp"))
- kontext "DocumentImpress"
- printlog "New - Wizard - Presentation"
- FileAutopilotPresentation
- printlog " Called File-Autopilot-Presentation."
- printlog "Create from Template"
- kontext "AutoPilotPraesentation1"
- EmptyPresentation.Check
- AutoPilotPraesentation1.TypeKeys "<DOWN>"
- sleep (3)
- AutoPilotPraesentation1.TypeKeys "<DOWN>"
- if Existingpresentation.IsChecked(5) then
- printlog " Pressing down worked fine"
- else
- warnlog " Pressing down didnt work as expected."
- endif
- printlog "Click the Open-button"
- ExistingOpen.Click
- printlog "Check if the Open-dialogue is there"
- kontext "GeneralFileDialog"
- if GeneralFileDialog.Exists(10) = FALSE then
- warnlog " Open-file-dialogue didnt show up."
- else
- GeneralFileDialog.Cancel
- endif
- sleep (3)
- kontext "AutoPilotPraesentation1"
- AutoPilotPraesentation1.TypeKeys "<SHIFT TAB>"
- AutoPilotPraesentation1.TypeKeys "<UP>"
- AutoPilotPraesentation1.TypeKeys "<DOWN>"
- AutoPilotPraesentation1.TypeKeys "<TAB><TAB>"
- sleep (1)
- Existinglist.TypeKeys "<HOME>"
- sleep (1)
- Existinglist.TypeKeys "<DOWN>"
- sleep (3)
- if Existinglist.GetSelText = "" then
- Warnlog " No entries in the recently-opened-files-list. Check if it's correct."
- else
- PresentationFileToBeLoaded = Existinglist.GetSelText
- AutoPilotPraesentation1.OK
- endif
+ dim Result1, Result2 as integer
+ dim iPictures as integer
+ dim PresentationFile1, PresentationFile2, PresentationFileToBeLoaded as string
+ PresentationFile1 = (ConvertPath (gTesttoolPath + "graphics\required\input\rightfont.odp"))
+ PresentationFile2 = (ConvertPath (gOfficePath + "user\work\xxxxxx9.odp"))
+ kontext "DocumentImpress"
+ printlog "New - Wizard - Presentation"
+ FileAutopilotPresentation
+ printlog " Called File-Autopilot-Presentation."
+ printlog "Create from Template"
+ kontext "AutoPilotPraesentation1"
+ EmptyPresentation.Check
+ AutoPilotPraesentation1.TypeKeys "<DOWN>"
+ sleep (3)
+ AutoPilotPraesentation1.TypeKeys "<DOWN>"
+ if Existingpresentation.IsChecked(5) then
+ printlog " Pressing down worked fine"
+ else
+ warnlog " Pressing down didnt work as expected."
+ endif
+ printlog "Click the Open-button"
+ ExistingOpen.Click
+ printlog "Check if the Open-dialogue is there"
+ kontext "GeneralFileDialog"
+ if GeneralFileDialog.Exists(10) = FALSE then
+ warnlog " Open-file-dialogue didnt show up."
+ else
+ GeneralFileDialog.Cancel
+ endif
+ sleep (3)
+ kontext "AutoPilotPraesentation1"
+ AutoPilotPraesentation1.TypeKeys "<SHIFT TAB>"
+ AutoPilotPraesentation1.TypeKeys "<UP>"
+ AutoPilotPraesentation1.TypeKeys "<DOWN>"
+ AutoPilotPraesentation1.TypeKeys "<TAB><TAB>"
+ sleep (1)
+ Existinglist.TypeKeys "<HOME>"
+ sleep (1)
+ Existinglist.TypeKeys "<DOWN>"
+ sleep (3)
+ if Existinglist.GetSelText = "" then
+ Warnlog " No entries in the recently-opened-files-list. Check if it's correct."
+ else
+ PresentationFileToBeLoaded = Existinglist.GetSelText
+ AutoPilotPraesentation1.OK
+ endif
- kontext "DocumentImpress"
- if DocumentImpress.Exists(10) = FALSE then
- if DocumentImpress.StatusIsProgress = FALSE then
- sleep (10)
- if DocumentImpress.StatusIsProgress then
- warnlog " Took over 20 seconds to load the document Document: " + PresentationFileToBeLoaded + ". Stalled?"
- endif
- goto endsub
- endif
- else
- printlog " Document " + PresentationFileToBeLoaded + " seemed to have been loaded correctly."
- endif
- sleep (3)
- if DocumentImpress.StatusIsProgress then
- sleep (5)
- endif
- printlog "Save Document"
- call hFileSaveAsKill (PresentationFile2)
- printlog "OK saved at ", PresentationFile2
- sleep (1)
+ kontext "DocumentImpress"
+ if DocumentImpress.Exists(10) = FALSE then
+ if DocumentImpress.StatusIsProgress = FALSE then
+ sleep (10)
+ if DocumentImpress.StatusIsProgress then
+ warnlog " Took over 20 seconds to load the document Document: " + PresentationFileToBeLoaded + ". Stalled?"
+ endif
+ goto endsub
+ endif
+ else
+ printlog " Document " + PresentationFileToBeLoaded + " seemed to have been loaded correctly."
+ endif
+ sleep (3)
+ if DocumentImpress.StatusIsProgress then
+ sleep (5)
+ endif
+ printlog "Save Document"
+ call hFileSaveAsKill (PresentationFile2)
+ printlog "OK saved at ", PresentationFile2
+ sleep (1)
- printlog "Close Document"
- Call hCloseDocument
+ printlog "Close Document"
+ Call hCloseDocument
endcase 'i_us2_pres2
diff --git a/testautomation/graphics/optional/includes/impress/i_us_present.inc b/testautomation/graphics/optional/includes/impress/i_us_present.inc
index 26a17b3a80be..da63e3cf0966 100644
--- a/testautomation/graphics/optional/includes/impress/i_us_present.inc
+++ b/testautomation/graphics/optional/includes/impress/i_us_present.inc
@@ -29,25 +29,21 @@
'*
'* short description : Include-file for impress User-Scenario: Presentation.
'*
-'***************************************************************************
-' #1 i_us_presentation1
-' #1 i_us_presentation2
-' #1 i_us_presentation3
-' #1 i_us_presentation4
-' #1 i_us_presentation5
-' #1 i_us_presentation6
-' #1 i_us_presentation7
'\********************************************************************
testcase i_us_presentation1
- dim iPictures as integer
+
+ dim iPictures as integer
dim PresentationFile1 as string
- PresentationFile1 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes1.odp")))
+
+ PresentationFile1 = ConvertPath( gOfficePath + "user\work\PowerPes1.odp" )
+
printlog "New impress document"
Call hNewDocument
Call sSelectEmptyLayout
WaitSlot (2000)
kontext "DocumentImpress"
+
printlog "Add second Master-Page "
ViewMasterPage
kontext "Slides"
@@ -64,6 +60,7 @@ testcase i_us_presentation1
sleep (1)
printlog " Inserted second Master-Slide"
+
printlog "set background to picture(Gallery)"
Kontext "Gallery"
if Gallery.Exists(2) then
@@ -76,32 +73,32 @@ testcase i_us_presentation1
if gOOO = TRUE then 'OpenOffice.org
select case iSprache
- case 01 : iPictures = 1 'English
- case else : iPictures = 1 'Unknown
- warnlog "Please insert the entrienumbers for 'Backgrounds'. Language: " + iSprache
+ case 01 : iPictures = 1 'English
+ case else : iPictures = 1 'Unknown
+ warnlog "Please insert the entrienumbers for 'Backgrounds'. Language: " + iSprache
end select
else ' StarOffice...
select case iSprache
- case 01 : iPictures = 21 'English
- case 07 : iPictures = 28 'Russian
- case 31 : iPictures = 04 'Netherlands
- case 33 : iPictures = 22 'French
- case 34 : iPictures = 12 'Spanish
- case 36 : iPictures = 17 'Hungaria
- case 39 : iPictures = 23 'Italian
- case 46 : iPictures = 09 'Swedish
- case 48 : iPictures = 20 'Polish
- case 49 : iPictures = 11 'German
- case 55 : iPictures = 16 'Portuguese
- case 81 : iPictures = 22 'Japanese
- case 82 : iPictures = 04 'Korean
- case 86 : iPictures = 06 'Simplified
- case 88 : iPictures = 17 'Traditional
- case else : iPictures = 21 'Unknown
- warnlog "Please insert the entrienumbers for 'Backgrounds'. Language: " + iSprache
+ case 01 : iPictures = 21 'English
+ case 07 : iPictures = 28 'Russian
+ case 31 : iPictures = 04 'Netherlands
+ case 33 : iPictures = 22 'French
+ case 34 : iPictures = 12 'Spanish
+ case 36 : iPictures = 17 'Hungaria
+ case 39 : iPictures = 23 'Italian
+ case 46 : iPictures = 09 'Swedish
+ case 48 : iPictures = 20 'Polish
+ case 49 : iPictures = 11 'German
+ case 55 : iPictures = 16 'Portuguese
+ case 81 : iPictures = 22 'Japanese
+ case 82 : iPictures = 04 'Korean
+ case 86 : iPictures = 06 'Simplified
+ case 88 : iPictures = 17 'Traditional
+ case else : iPictures = 21 'Unknown
+ warnlog "Please insert the entrienumbers for 'Backgrounds'. Language: " + iSprache
end select
- end if
+ end if
kontext "Gallery"
Gallerys.Select (iPictures)
@@ -123,6 +120,33 @@ testcase i_us_presentation1
if ExportierenDlg.IsVisible(5) then
printlog " Gallery-object correctly copied into Slide."
ExportierenDlg.Close
+ ToolsGallery
+ WaitSlot (2000)
+ end if
+ kontext "GraphicObjectbar"
+ if GraphicObjectbar.Exists(5) = FALSE then
+ kontext "DocumentImpress"
+ ViewToolbarsPicture
+ end if
+ Kontext "Gallery"
+ View.TypeKeys "<HOME><RIGHT><RIGHT>"
+ printlog "'OpenContextMenu"
+ View.TypeKeys "<SHIFT F10>"
+ sleep (2)
+ MenuSelect(MenuGetItemID(1)) 'Insert
+ sleep (2)
+ MenuSelect(MenuGetItemID(1)) 'Copy
+ sleep (2)
+ printlog "Check that we really got a copy of the object "
+ kontext "DocumentImpress"
+ DocumentImpress.OpenContextMenu(true)
+ sleep (2)
+ MenuSelect 27353
+ sleep (2)
+ Kontext "ExportierenDlg"
+ if ExportierenDlg.IsVisible(5) then
+ printlog " Gallery-object correctly copied into Slide."
+ ExportierenDlg.Close
else
warnlog " Doesn't seem like we copied anything from the Gallery... ?"
end if
@@ -131,41 +155,13 @@ testcase i_us_presentation1
kontext "DocumentImpress"
ViewToolbarsPicture
end if
-
- Kontext "Gallery"
- View.TypeKeys "<HOME><RIGHT><RIGHT>"
- printlog "'OpenContextMenu"
- View.TypeKeys "<SHIFT F10>"
- sleep (2)
- MenuSelect(MenuGetItemID(1)) 'Insert
- sleep (2)
- MenuSelect(MenuGetItemID(1)) 'Copy
- sleep (2)
- printlog "Check that we really got a copy of the object "
- kontext "DocumentImpress"
- DocumentImpress.OpenContextMenu(true)
- sleep (2)
- MenuSelect 27353
- sleep (2)
- Kontext "ExportierenDlg"
- if ExportierenDlg.IsVisible(5) then
- printlog " Gallery-object correctly copied into Slide."
- ExportierenDlg.Close
- else
- warnlog " Doesn't seem like we copied anything from the Gallery... ?"
- end if
- kontext "GraphicObjectbar"
- if GraphicObjectbar.Exists(5) = FALSE then
- kontext "DocumentImpress"
- ViewToolbarsPicture
- end if
-
+ kontext "Gallery"
+ Gallerys.Select (iPictures)
printlog " 50% Transparency"
WaitSlot (2000)
kontext "GraphicObjectbar"
Transparenz.SetText "50"
sleep (1)
-
printlog "Mosaic 16px x 16px"
Filter.TearOff
sleep (1)
@@ -176,66 +172,86 @@ testcase i_us_presentation1
Width.SetText "16"
Height.SetText "16"
Mosaic.OK
-
kontext "GraphicFilterBar"
GraphicFilterBar.Close
-
ToolsGallery
WaitSlot (1000)
kontext "DocumentImpress"
hTypeKeys "<TAB>"
+ sleep (1)
+
+ kontext "GraphicFilterBar"
+ Mosaic.Click
+
+ kontext "Mosaic"
+ if ( Mosaic.exists( 2 ) ) then
+ Width.SetText "16"
+ Height.SetText "16"
+ Mosaic.OK
+ else
+ warnlog( "Dialog <Mosaic> did not open" )
+ endif
+
+ kontext "GraphicFilterBar"
+ GraphicFilterBar.Close
+
+ ToolsGallery
+ WaitSlot (1000)
+ kontext "DocumentImpress"
+ gMouseClick 50,50
sleep (1)
+
FormatPositionAndSize
- WaitSlot (1000)
+
kontext
- active.setPage(TabPositionAndSize)
- kontext "TabPositionAndSize"
- Width.SetText "800"
- Height.SetText "600"
- SizePosition.TypeKeys "<RIGHT><DOWN>"
- TabPositionAndSize.OK
+ if ( Active.exists( 2 ) ) then
+ active.setPage(TabPositionAndSize)
+ kontext "TabPositionAndSize"
+ Width.SetText "800"
+ Height.SetText "600"
+ SizePosition.TypeKeys "<RIGHT><DOWN>"
+ TabPositionAndSize.OK
+ else
+ warnlog( "Page <TabPositionAndSize> did not open" )
+ endif
printlog "Close Master"
- ViewNormal
- WaitSlot (1000)
+ hUseAsyncSlot( "ViewNormal" )
printlog "Save Document"
call hFileSaveAsKill (PresentationFile1)
- printlog "OK saved at ", PresentationFile1
- WaitSlot (1000)
ActiveDeactivateCTLSupport (FALSE)
- WaitSlot (2000)
+
printlog "Close Document"
- Call hCloseDocument
+ hFileCloseAll()
+
endcase 'i_us_presentation1
'-------------------------------------------------------------------------------
+
testcase i_us_presentation2
+
dim PresentationFile1 as string
dim PresentationFile2 as string
- PresentationFile1 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes1.odp")))
- PresentationFile2 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes2.odp")))
- if Dir(PresentationFile1) <> "" then 'if file exists...
- hFileOpen (PresentationFile1)
- WaitSlot (10000)
+ PresentationFile1 = ConvertPath( gOfficePath + "user\work\PowerPes1.odp" )
+ PresentationFile2 = ConvertPath( gOfficePath + "user\work\PowerPes2.odp" )
+
+ if ( FileExists( PresentationFile1 ) ) then 'if file exists...
+ hFileOpen (PresentationFile1)
else
warnlog " This test is supposed to run after the previous testcase has been run. Notify the Automatic-tester."
- printlog "New impress document"
- Call hNewDocument
- WaitSlot (2000)
+ goto endsub
end if
printlog "New Slide"
kontext "slides"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
-
+ SlidesControl.TypeKeys( "<PAGEDOWN>", 3 )
SlidesControl.TypeKeys "<SHIFT F10>" 'OpenContextMenu(true)
sleep (1)
+
MenuSelect(MenuGetItemID(1)) 'New Slide 'No 2
printlog " Inserted second normal Slide"
@@ -244,11 +260,10 @@ testcase i_us_presentation2
printlog "to get to the very first position"
LayoutsPreview.TypeKeys "<HOME>"
printlog "'to get to the right position"
- LayoutsPreview.TypeKeys "<RIGHT>", 9
+ LayoutsPreview.TypeKeys "<RIGHT>", 9
LayoutsPreview.TypeKeys "<RETURN>"
- Sleep (1)
- ViewNormal
+ hUseAsyncSlot( "ViewNormal" )
printlog "3. Hide Slidepane (Oops! The user were too fast: accidently hide the pane)"
kontext "Slides"
@@ -259,7 +274,7 @@ testcase i_us_presentation2
SlidesControl.FadeIn
printlog " Did the 'mistake' to FadeIn/Out the Slidepane"
-
+
printlog "activating the input picture area"
kontext "DocumentImpress"
DocumentImpress.TypeKeys "<TAB>",2
@@ -268,68 +283,67 @@ testcase i_us_presentation2
printlog "Graphics-Import-dialogue. Select i_us_large.jpg"
Kontext "GrafikEinfuegenDlg"
- sleep (2)
- Dateiname.SetText ConvertPath (gTesttoolPath + "graphics\required\input\i_us_large.jpg")
- sleep (2)
- Oeffnen.Click
- WaitSlot (1000)
- Kontext "DocumentImpress"
+ if ( GrafikEinfuegenDlg.exists( 2 ) ) then
- printlog "Deselect graphic"
- DocumentImpress.MouseDoubleClick 90,90
- printlog " Inserted Graphic into the second Slide"
+ Dateiname.SetText ConvertPath (gTesttoolPath + "graphics\required\input\i_us_large.jpg")
+ Oeffnen.Click
- printlog "Change text on the two text-boxes"
- DocumentImpress.TypeKeys "<TAB>" 'First text.
- DocumentImpress.TypeKeys "<RETURN>" 'To get into edit-mode.
- DocumentImpress.TypeKeys "The World has just become a bit easier"
- DocumentImpress.TypeKeys "<ESCAPE><ESCAPE>"
- DocumentImpress.TypeKeys "<TAB><TAB><TAB>"
- DocumentImpress.TypeKeys "<RETURN>"
- DocumentImpress.TypeKeys "100% Recyclable"
- DocumentImpress.TypeKeys "<RETURN>"
- DocumentImpress.TypeKeys "Very durable"
- DocumentImpress.TypeKeys "<RETURN>"
- DocumentImpress.TypeKeys "Priced lower than its predecessor!"
- DocumentImpress.TypeKeys "<RETURN>"
- DocumentImpress.TypeKeys "Sexy"
- DocumentImpress.TypeKeys "<RETURN>"
- DocumentImpress.TypeKeys "Energy-efficient"
- DocumentImpress.TypeKeys "<ESCAPE><ESCAPE>"
+ Kontext "DocumentImpress"
+ printlog "Deselect graphic"
+ DocumentImpress.MouseDoubleClick 90,90
+ printlog " Inserted Graphic into the second Slide"
+
+ printlog "Change text on the two text-boxes"
+ DocumentImpress.TypeKeys "<TAB>" 'First text.
+ DocumentImpress.TypeKeys "<RETURN>" 'To get into edit-mode.
+ DocumentImpress.TypeKeys "The World has just become a bit easier"
+ DocumentImpress.TypeKeys "<ESCAPE><ESCAPE>"
+ DocumentImpress.TypeKeys "<TAB><TAB><TAB>"
+ DocumentImpress.TypeKeys "<RETURN>"
+ DocumentImpress.TypeKeys "100% Recyclable"
+ DocumentImpress.TypeKeys "<RETURN>"
+ DocumentImpress.TypeKeys "Very durable"
+ DocumentImpress.TypeKeys "<RETURN>"
+ DocumentImpress.TypeKeys "Priced lower than its predecessor!"
+ DocumentImpress.TypeKeys "<RETURN>"
+ DocumentImpress.TypeKeys "Sexy"
+ DocumentImpress.TypeKeys "<RETURN>"
+ DocumentImpress.TypeKeys "Energy-efficient"
+ DocumentImpress.TypeKeys "<ESCAPE><ESCAPE>"
+ else
+ warnlog( "Failed to open <Insert Graphics> dialog" )
+ endif
printlog "Save Document"
call hFileSaveAsKill (PresentationFile2)
- printlog "OK saved at ", PresentationFile1
- sleep (1)
ActiveDeactivateCTLSupport (FALSE)
- sleep (2)
+
printlog "Close Document"
- Call hCloseDocument
+ hFileCloseAll()
+
endcase 'i_us_presentation2
'-------------------------------------------------------------------------------
+
testcase i_us_presentation3
+
dim PresentationFile2 as string
dim PresentationFile3 as string
- PresentationFile2 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes2.odp")))
- PresentationFile3 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes3.odp")))
- if Dir(PresentationFile2) <> "" then 'if file exists...
- hFileOpen (PresentationFile2)
- WaitSlot (10000)
+ PresentationFile2 = ConvertPath( gOfficePath + "user\work\PowerPes2.odp" )
+ PresentationFile3 = ConvertPath( gOfficePath + "user\work\PowerPes3.odp" )
+
+ if ( FileExists( PresentationFile2 ) ) then 'if file exists...
+ hFileOpen( PresentationFile2 )
else
warnlog " This test is supposed to run after the previous testcase has been run. Notify the Automatic-tester."
- printlog "New impress document"
- Call hNewDocument
- WaitSlot (2000)
+ goto endsub
end if
printlog "Insert New Slide"
kontext "slides"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
+ SlidesControl.TypeKeys( "<PAGEDOWN>", 3 )
kontext "DocumentImpress"
InsertSlide 'No 3
@@ -340,8 +354,7 @@ testcase i_us_presentation3
LayoutsPreview.TypeKeys "<RIGHT>", 4 'to get to the right position
LayoutsPreview.TypeKeys "<RETURN>"
- sleep (1)
- ViewNormal
+ hUseAsyncSlot( "ViewNormal" )
kontext "DocumentImpress"
Call gMouseClick 50,50
@@ -353,10 +366,10 @@ testcase i_us_presentation3
InsertGraphicsFromFile
WaitSlot (1000)
Kontext "GrafikEinfuegenDlg"
- Dateiname.SetText ConvertPath (gTesttoolPath + "graphics\required\input\i_us_large.jpg")
- sleep (2)
- Oeffnen.Click
- WaitSlot (2000)
+ Dateiname.SetText ConvertPath (gTesttoolPath + "graphics\required\input\i_us_large.jpg")
+ sleep (2)
+ Oeffnen.Click
+ WaitSlot (2000)
Kontext "DocumentImpress"
printlog "The user corrects the picture"
@@ -371,101 +384,97 @@ testcase i_us_presentation3
printlog "Save Document"
call hFileSaveAsKill (PresentationFile3)
- printlog "OK saved at ", PresentationFile3
- sleep (1)
ActiveDeactivateCTLSupport (FALSE)
- sleep (2)
+
printlog "Close Document"
- Call hCloseDocument
+ hFileCloseAll()
+
endcase 'i_us_presentation3
'-------------------------------------------------------------------------------
+
testcase i_us_presentation4
+
dim PresentationFile3 as string
dim PresentationFile4 as string
dim iAnimations as Integer
- PresentationFile3 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes3.odp")))
- PresentationFile4 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes4.odp")))
+ dim iSize as integer
+
+ PresentationFile3 = ConvertPath( gOfficePath + "user\work\PowerPes3.odp" )
+ PresentationFile4 = ConvertPath( gOfficePath + "user\work\PowerPes4.odp" )
- if Dir(PresentationFile3) <> "" then 'if file exists...
- hFileOpen (PresentationFile3)
- WaitSlot (10000)
+ select case iSprache
+ case 01 : iAnimations = 01 'English
+ case 07 : iAnimations = 01 'Russian
+ case 31 : iAnimations = 03 'Netherlands
+ case 33 : iAnimations = 01 'French
+ case 34 : iAnimations = 01 'Spanish
+ case 36 : iAnimations = 01 'Hungaria
+ case 39 : iAnimations = 01 'Italian
+ case 46 : iAnimations = 01 'Swedish
+ case 48 : iAnimations = 01 'Polish
+ case 49 : iAnimations = 01 'German
+ case 55 : iAnimations = 01 'Portuguese
+ case 81 : iAnimations = 02 'Japanese
+ case 82 : iAnimations = 17 'Korean
+ case 86 : iAnimations = 07 'Simplified
+ case 88 : iAnimations = 15 'Traditional
+ case else : iAnimations = 01 'Unknown
+ warnlog "Please insert the entrienumbers for 'Backgrounds'. Language: " + iSprache
+ end select
+
+ if ( FileExists( PresentationFile3 ) ) then 'if file exists...
+ hFileOpen( PresentationFile3 )
else
warnlog " This test is supposed to run after the previous testcase has been run. Notify the Automatic-tester."
- printlog "New impress document"
- Call hNewDocument
- WaitSlot (2000)
+ goto endsub
end if
kontext "slides"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- kontext "DocumentImpress"
+ SlidesControl.TypeKeys( "<PAGEDOWN>", 5 )
-printlog "insert slide no 4"
-InsertSlide
+ kontext "DocumentImpress"
+ printlog "insert slide no 4"
+ hUseAsyncSlot( "InsertSlide" )
printlog "Background: picture (Gallery)"
Kontext "Gallery"
- if Gallery.Exists(2) then
- warnlog " The Gallery was already visible. Check earlier ran tests for inconsistency."
- sleep (2)
- else
+ if ( Not Gallery.Exists() ) then
ToolsGallery
- WaitSlot (2000)
end if
- select case iSprache
- case 01 : iAnimations = 01 'English
- case 07 : iAnimations = 01 'Russian
- case 31 : iAnimations = 03 'Netherlands
- case 33 : iAnimations = 01 'French
- case 34 : iAnimations = 01 'Spanish
- case 36 : iAnimations = 01 'Hungaria
- case 39 : iAnimations = 01 'Italian
- case 46 : iAnimations = 01 'Swedish
- case 48 : iAnimations = 01 'Polish
- case 49 : iAnimations = 01 'German
- case 55 : iAnimations = 01 'Portuguese
- case 81 : iAnimations = 02 'Japanese
- case 82 : iAnimations = 17 'Korean
- case 86 : iAnimations = 07 'Simplified
- case 88 : iAnimations = 15 'Traditional
- case else : iAnimations = 01 'Unknown
- warnlog "Please insert the entrienumbers for 'Backgrounds'. Language: " + iSprache
- end select
-
kontext "Gallery"
- Gallerys.Select (iAnimations)
+ if ( Gallery.exists( 2 ) ) then
+ Gallerys.Select (iAnimations)
- kontext "Gallery"
+ kontext "Gallery"
View.TypeKeys "<HOME><RIGHT><RIGHT>"
- sleep (1)
+ wait( 200 )
View.TypeKeys "<SHIFT F10>" 'OpenContextMenu
- sleep (1)
+ wait( 200 )
MenuSelect(MenuGetItemID(1)) 'Insert
- sleep (1)
+ wait( 200 )
MenuSelect(MenuGetItemID(1)) 'Copy
+ else
+ warnlog( "Could not access Gallery" )
+ endif
- printlog "Check that we really got a copy of the object"
- kontext "DocumentImpress"
- DocumentImpress.OpenContextMenu(true)
- WaitSlot (1000)
- MenuSelect 27353
+ printlog "Check that we really got a copy of the object"
+ kontext "DocumentImpress"
+ DocumentImpress.OpenContextMenu(true)
+ WaitSlot (1000)
+ MenuSelect 27353
Kontext "ExportierenDlg"
- if ExportierenDlg.IsVisible(5) then
+ if ( ExportierenDlg.exists( 5 ) ) then
printlog " Gallery-object correctly copied into Slide."
ExportierenDlg.Close
else
warnlog " Doesn't seem like we copied anything from the Gallery... ?"
end if
- kontext "DocumentImpress"
+ kontext "DocumentImpress"
DocumentImpress.TypeKeys "<UP>", 82
DocumentImpress.TypeKeys "<LEFT>", 130
@@ -484,84 +493,53 @@ InsertSlide
ActiveDeactivateCTLSupport (TRUE)
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<LEFT>", 100
- gMouseClick 90,90
-
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<LEFT>", 75
- gMouseClick 90,90
-
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<LEFT>", 50
- gMouseClick 90,90
-
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<LEFT>", 25
- gMouseClick 90,90
-
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<RIGHT>", 25
- gMouseClick 90,90
-
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<RIGHT>", 50
- gMouseClick 90,90
-
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<RIGHT>", 75
- gMouseClick 90,90
-
- CreateTextSetEffectAndAngle
- DocumentImpress.TypeKeys "<DOWN>", 80
- DocumentImpress.TypeKeys "<RIGHT>", 100
- gMouseClick 90,90
+ printlog( "Decrease..." )
+ for iSize = 100 to 25 step -25
+ CreateTextSetEffectAndAngle
+ DocumentImpress.TypeKeys "<DOWN>", 80
+ DocumentImpress.TypeKeys "<LEFT>", iSize
+ gMouseClick 90,90
+ next iSize
+
+ printlog( "Increase..." )
+ for iSize = 25 to 100 step 25
+ CreateTextSetEffectAndAngle
+ DocumentImpress.TypeKeys "<DOWN>", 80
+ DocumentImpress.TypeKeys "<LEFT>", iSize
+ gMouseClick 90,90
+ next iSize
printlog " Inserted fourth slide with Gallery-object."
printlog "Save Document"
call hFileSaveAsKill (PresentationFile4)
- printlog "OK saved at ", PresentationFile4
- sleep (1)
ActiveDeactivateCTLSupport (FALSE)
- sleep (2)
+
printlog "Close Document"
- Call hCloseDocument
+ hFileCloseAll()
+
endcase 'i_us_presentation4
'-------------------------------------------------------------------------------
+
testcase i_us_presentation5
+
dim PresentationFile4 as string
dim PresentationFile5 as string
- PresentationFile4 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes4.odp")))
- PresentationFile5 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes5.odp")))
- if Dir(PresentationFile4) <> "" then 'if file exists...
- hFileOpen (PresentationFile4)
- WaitSlot (10000)
+ PresentationFile4 = ConvertPath( gOfficePath + "user\work\PowerPes4.odp" )
+ PresentationFile5 = ConvertPath( gOfficePath + "user\work\PowerPes5.odp" )
+
+ if ( FileExists( PresentationFile4 ) ) then 'if file exists...
+ hFileOpen( PresentationFile4 )
else
warnlog " This test is supposed to run after the previous testcase has been run. Notify the Automatic-tester."
- printlog "New impress document"
- Call hNewDocument
- WaitSlot (2000)
+ goto endsub
end if
kontext "slides"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
+ SlidesControl.TypeKeys( "<PAGEDOWN>", 7 )
kontext "DocumentImpress"
printlog "8. New Slide. (Insert Menu) (Duplicate slide)"
@@ -570,119 +548,109 @@ testcase i_us_presentation5
gMouseClick 90,90
DocumentImpress.TypeKeys "<TAB>"
DocumentImpress.TypeKeys "<RETURN>"
- EditSelectAll
+ hUseAsyncSlot( "EditSelectAll" )
DocumentImpress.TypeKeys "And does it with strength..."
printlog " Inserted fifth slide with audience-joke."
printlog "Save Document"
call hFileSaveAsKill (PresentationFile5)
- printlog "OK saved at ", PresentationFile5
- sleep (1)
ActiveDeactivateCTLSupport (FALSE)
- sleep (2)
+
printlog "Close Document"
- Call hCloseDocument
+ hFileCloseAll()
+
endcase 'i_us_presentation5
'-------------------------------------------------------------------------------
+
testcase i_us_presentation6
+
dim PresentationFile5 as string
dim PresentationFile6 as string
- PresentationFile5 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes5.odp")))
- PresentationFile6 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes6.odp")))
- if Dir(PresentationFile5) <> "" then 'if file exists...
- hFileOpen (PresentationFile5)
- WaitSlot (10000)
+ PresentationFile5 = ConvertPath( gOfficePath + "user\work\PowerPes5.odp" )
+ PresentationFile6 = ConvertPath( gOfficePath + "user\work\PowerPes6.odp" )
+
+ if ( FileExists( PresentationFile5 ) ) then 'if file exists...
+ hFileOpen( PresentationFile5 )
else
warnlog " This test is supposed to run after the previous testcase has been run. Notify the Automatic-tester."
- printlog "New impress document"
- Call hNewDocument
- WaitSlot (2000)
+ goto endsub
end if
kontext "slides"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
+ SlidesControl.TypeKeys( "<PAGEDOWN>", 6 )
kontext "DocumentImpress"
printlog "9. Q&A Slide"
- InsertSlide
+ InsertSlide
WaitSlot (1000)
kontext "DocumentImpress"
DocumentImpress.TypeKeys "<TAB>"
DocumentImpress.TypeKeys "<RETURN>"
DocumentImpress.TypeKeys "Q&A"
- WaitSlot (1000)
- kontext "DocumentImpress"
DocumentImpress.TypeKeys "<SHIFT HOME>"
+ wait( 500 )
+
Kontext "TextObjectbar"
- if TextObjectbar.Exists = FALSE then
- ViewToolbarsTextFormatting
- end if
- WaitSlot (2000)
- Printlog "- Change size of font"
- Schriftgroesse.Select "26"
- Schriftgroesse.TypeKeys "<RETURN>"
- Fett.Click
+ if ( not TextObjectbar.Exists() ) then
+ ViewToolbarsTextFormatting
+ end if
+
+ Kontext "TextObjectbar"
+ wait( 500 )
+ Printlog "- Change size of font"
+ Schriftgroesse.Select "26"
+ Schriftgroesse.TypeKeys "<RETURN>"
+ Fett.Click
kontext "DocumentImpress"
DocumentImpress.TypeKeys "<ESCAPE><ESCAPE>"
kontext "Toolbar"
- Auswahl.Click
+ Auswahl.Click
gMouseClick 60,60
- EditSelectAll
- WaitSlot (1000)
+ hUseAsyncSlot( "EditSelectAll" )
+
DocumentImpress.TypeKeys "<DOWN>", 50
kontext "DocumentImpress"
printlog " Inserted sixth slide with Q&A."
printlog "Save Document"
call hFileSaveAsKill (PresentationFile6)
- printlog "OK saved at ", PresentationFile6
- sleep (1)
ActiveDeactivateCTLSupport (FALSE)
- WaitSlot (2000)
+
printlog "Close Document"
- Call hCloseDocument
+ hFileCloseAll()
+
endcase 'i_us_presentation6
'-------------------------------------------------------------------------------
+
testcase i_us_presentation7
+ const KEY_STROKE_REPEAT = 8
+
dim sFilter as string
dim sFileName as string
dim PresentationFile6 as string
dim PresentationFile7 as string
- PresentationFile6 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes6.odp")))
- PresentationFile7 = ConvertPath ((ConvertPath (gOfficePath + "user\work\PowerPes7.odp")))
- sFileName = (ConvertPath (gOfficePath + "user\work\export-test.ppt"))
+ dim iKeyStroke as integer
+
+ PresentationFile6 = ConvertPath( gOfficePath + "user\work\PowerPes6.odp" )
+ PresentationFile7 = ConvertPath( gOfficePath + "user\work\PowerPes7.odp" )
+ sFileName = ConvertPath( gOfficePath + "user\work\export-test.ppt" )
- if Dir(PresentationFile6) <> "" then 'if file exists...
- hFileOpen (PresentationFile6)
- WaitSlot (10000)
+ if ( FileExists( PresentationFile6 ) ) then 'if file exists...
+ hFileOpen( PresentationFile6 )
else
warnlog " This test is supposed to run after the previous testcase has been run. Notify the Automatic-tester."
- printlog "New impress document"
- Call hNewDocument
- WaitSlot (2000)
+ goto endsub
end if
kontext "slides"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
- SlidesControl.TypeKeys "<PAGEDOWN>"
+ SlidesControl.TypeKeys( "<PAGEDOWN>", KEY_STROKE_REPEAT )
kontext "DocumentImpress"
printlog " inserting Ending Slide"
@@ -705,62 +673,64 @@ testcase i_us_presentation7
SlidesControl.TypeKeys "<RETURN>" 'At the first slide
hTypeKeys "<F5>"
+
+ kontext "DocumentPresentation"
+ for iKeyStroke = 1 to KEY_STROKE_REPEAT
+ wait( 3000 )
+ DocumentPresentation.TypeKeys "<PAGEDOWN>"
+ wait( 2000 )
+ next iKeyStroke
+
kontext "DocumentPresentation"
- sleep (5)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
- sleep (5)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
- sleep (5)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
- sleep (10)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
- sleep (10)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
- sleep (5)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
- sleep (5)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
- sleep (5)
- DocumentPresentation.TypeKeys "<PAGEDOWN>"
-
- if DocumentPresentation.Exists(5) then
- hTypeKeys "<ESC>"
- warnlog " Presentation should have ended. Please inform Automatic Tester."
+ if ( DocumentPresentation.notExists( 5 ) ) then
+ printlog( "Presentation closed. Good." )
+ else
+ warnlog " Presentation not finished, fullscreen view still open."
+ DocumentPresentation.typeKeys "<ESC>"
+
+ kontext "DocumentPresentation"
+ if ( DocumentPresentation.notExists( 3 ) ) then
+ printlog( "Recovery attempt successful" )
+ else
+ goto endsub
+ endif
end if
- kontext "DocumentImpress"
+ kontext "DocumentImpress"
printlog "Save Document"
call hFileSaveAsKill (PresentationFile7)
- printlog "OK saved at ", PresentationFile7
- sleep (1)
- printlog "Save as Powerpoint-file"
+ printlog( "Save as Powerpoint-file (Using filter at pos. 5 in the filter list)" )
FileSaveAs
- Kontext "SpeichernDlg"
+
+ Kontext "SpeichernDlg"
+ if ( SpeichernDlg.exists( 2 ) ) then
+
Dateiname.SetText sFileName
- Dateityp.Select 5 ' Powerpoint
+ Dateityp.Select 5 ' Powerpoint (possibly)
printlog "Trying to save with filter: " + Dateityp.GetSelText + sFilter(5)
Speichern.Click
+
Kontext "Messagebox"
- if Messagebox.Exists(2) then Messagebox.Yes
+ hCloseDialog( Messagebox, "Yes, optional" )
+
Kontext "AlienWarning"
- if AlienWarning.Exists(2) then AlienWarning.OK
- printlog "Saved as: " + sFileName
- sleep (3)
-
- printlog "Close the office and reload the file"
- FileClose
- Kontext "Messagebox"
- if Messagebox.Exists(2) then Messagebox.Yes
- sleep (3)
- printlog "Open the saved file"
+ hCloseDialog( AlienWarning, "ok, optional" )
+ else
+ warnlog( "<FileSaveAs> dialog did not open" )
+ endif
+
+ printlog "Close all open documents"
+ hFileCloseAll()
+
+ printlog( "Reload file: " & sFileName )
hFileOpen sFileName
- printlog "File opened: " + sFileName
- sleep (3)
+ sleep( 3 )
printlog "Close the office-session"
ActiveDeactivateCTLSupport (FALSE)
- sleep (2)
- printlog "Close Document"
- Call hCloseDocument
+
+ printlog "Close Documents"
+ hFileCloseAll()
+
endcase 'i_us_presentation7
diff --git a/testautomation/graphics/optional/includes/impress/im_007_.inc b/testautomation/graphics/optional/includes/impress/im_007_.inc
index fcd80a8d8f5a..15c9e8609b5d 100644
--- a/testautomation/graphics/optional/includes/impress/im_007_.inc
+++ b/testautomation/graphics/optional/includes/impress/im_007_.inc
@@ -33,52 +33,52 @@
' this menue is only in impress availble
testcase tSlideShowSlideShow
-'/// open application ///'
- Call hNewDocument
-'/// Slide Show->Slide Show Settings ///'
+ '/// open application ///'
+ Call hNewDocument
+ '/// Slide Show->Slide Show Settings ///'
SlideShowPresentationSettings
- Kontext "Bildschirmpraesentation"
- '/// check if 'type' 'default' is checked, it has to be the default !///'
- if standard.IsChecked then
- if LogoAnzeigen.isEnabled then
- Warnlog "'Show Logo' is Enabled :-("
- endif
- else
- Warnlog "type 'default' is not checked as default :-("
- endif
- '/// check checkbox 'Window' ///'
- Fenster.Check
- Printlog "- Presentation in window mode is checked"
- '/// close dialog with OK 'Slide Show' ///'
+ Kontext "Bildschirmpraesentation"
+ '/// check if 'type' 'default' is checked, it has to be the default !///'
+ if standard.IsChecked then
+ if LogoAnzeigen.isEnabled then
+ Warnlog "'Show Logo' is Enabled :-("
+ endif
+ else
+ Warnlog "type 'default' is not checked as default :-("
+ endif
+ '/// check checkbox 'Window' ///'
+ Fenster.Check
+ Printlog "- Presentation in window mode is checked"
+ '/// close dialog with OK 'Slide Show' ///'
Bildschirmpraesentation.Ok
sleep 3
-'/// Slide Show->Slide Show ///'
+ '/// Slide Show->Slide Show ///'
SlideShowSlideshow
Sleep 5
try
- Kontext "DocumentPresentation"
- sleep 3
-'/// Press <Esc> to leave presentation mode ///'
- DocumentPresentation.Typekeys ("<Escape>")
- Sleep 3
- Kontext "DocumentImpress"
- DocumentImpress.MouseDoubleClick ( 50, 50 )
- Sleep 3
+ Kontext "DocumentPresentation"
+ sleep 3
+ '/// Press <Esc> to leave presentation mode ///'
+ DocumentPresentation.Typekeys ("<Escape>")
+ Sleep 3
+ Kontext "DocumentImpress"
+ DocumentImpress.MouseDoubleClick ( 50, 50 )
+ Sleep 3
catch
-' FileClose
- warnlog "had to catch <the ball> :-( "
-' Kontext "Messagebox"
-' if Messagebox.Exists (5) Then Messagebox.No
-' Kontext
-' sleep (12)
-' start sAppExe$
-' sleep (6)
-' Kontext
-' if Office.Exists(2) then Resetapplication
-' Warnlog "Slide didn't end, application wasn't in document edit mode"
+ ' FileClose
+ warnlog "had to catch <the ball> :-( "
+ ' Kontext "Messagebox"
+ ' if Messagebox.Exists (5) Then Messagebox.No
+ ' Kontext
+ ' sleep (12)
+ ' start sAppExe$
+ ' sleep (6)
+ ' Kontext
+ ' if Office.Exists(2) then Resetapplication
+ ' Warnlog "Slide didn't end, application wasn't in document edit mode"
endcatch
-'/// close application ///'
- Call hCloseDocument
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tSlideShowRehearseTimings
@@ -97,157 +97,157 @@ testcase tSlideShowRehearseTimings
sleep 2
Kontext "DocumentPresentation"
'/// Press <Esc> to leave presentation mode ///'
- if DocumentPresentation.Exists (5) then
- DocumentPresentation.Typekeys ("<Escape>")
- else
- Warnlog "SlideShowRehearseTimings mode not accessible"
- endif
- Sleep 3
- if DocumentPresentation.Exists then ' the kontext hasnt to be available, else ERROR
- DocumentPresentation.TypeKeys "<ESCAPE>" ' => I mustn't be here ever !
- Warnlog "- Slide show mode should have ended"
- else
- printlog "SlideShowRehearseTimings mode not accessible :-) "
- end if
- sleep 3
- try
- Kontext "DocumentImpress"
- DocumentImpress.MouseDoubleClick ( 50, 50 )
+ if DocumentPresentation.Exists (5) then
+ DocumentPresentation.Typekeys ("<Escape>")
+ else
+ Warnlog "SlideShowRehearseTimings mode not accessible"
+ endif
+ Sleep 3
+ if DocumentPresentation.Exists then ' the kontext hasnt to be available, else ERROR
+ DocumentPresentation.TypeKeys "<ESCAPE>" ' => I mustn't be here ever !
+ Warnlog "- Slide show mode should have ended"
+ else
+ printlog "SlideShowRehearseTimings mode not accessible :-) "
+ end if
+ sleep 3
+ try
+ Kontext "DocumentImpress"
+ DocumentImpress.MouseDoubleClick ( 50, 50 )
- sleep 3
- catch
- warnlog "Had to catch <the ball> :-( "
- endcatch
+ sleep 3
+ catch
+ warnlog "Had to catch <the ball> :-( "
+ endcatch
sleep 3
-'/// close application ///'
- Call hCloseDocument
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tSlideShowSlideShowSettings
-'/// open application ///'
- Call hNewDocument
- sleep 2
-'/// Slide Show->Slide Show Settings ///'
- SlideShowPresentationSettings
- Kontext "Bildschirmpraesentation"
- call Dialogtest (Bildschirmpraesentation)
- '/// check checkbox in section 'Range' - 'From: ///'
- AbDia.Check
- '/// select the 3rd item from the top from listbox 'From:' ///'
- AbDiaName.GetSelText
- '/// check checkbox 'All Slides' ///'
- AlleDias.Check
-'///' RangeCustomSlideShow ' gets tested in tSlideShowCustomSlideShow ///'
-' IndividuellePraesentationName
- '///<b> check checkbox 'window' </b>///'
- Fenster.Check
- '/// check checkbox 'default' ///'
- Standard.Check
- '///<b> check check box 'Auto' -> implies looping of slideshow in fullscreen mode </b>///'
- Auto.Check
- '/// set duration of pause to '00:00:05' ///'
- Zeit.GetText
- '/// check check box 'Show logo' ///'
- LogoAnzeigen.Check
- '///<b> check checkbox 'Change slides maually' </b>///'
- DiawechselManuel.Check
- '///<b> check checkbox 'Mouse pointer as pen' </b>///'
- MauszeigerAlsStift.Check
- '///<b> UNcheck checkbox 'Mouse pointer visible' </b>///'
- MauszeigerSichtbar.UnCheck
- '///<b> check checkbox 'Navigator visible' </b>///'
- NavigatorSichtbar.Check
- '///<b> UNcheck checkbox 'animations allowed' </b>///'
- AnimationenZulassen.UnCheck
- '///<b> UNcheck checkbox 'Change slides by clicking on background' </b>///'
- DiaWechselAufHintergrund.UnCheck
- '///<b> check checkbox 'Presentation always on top' </b>///'
- PraesentationImmerImVordergrund.Check
- '/// cancel dialog 'Slide Show' ///'
- Bildschirmpraesentation.Cancel
-'/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ Call hNewDocument
+ sleep 2
+ '/// Slide Show->Slide Show Settings ///'
+ SlideShowPresentationSettings
+ Kontext "Bildschirmpraesentation"
+ call Dialogtest (Bildschirmpraesentation)
+ '/// check checkbox in section 'Range' - 'From: ///'
+ AbDia.Check
+ '/// select the 3rd item from the top from listbox 'From:' ///'
+ AbDiaName.GetSelText
+ '/// check checkbox 'All Slides' ///'
+ AlleDias.Check
+ '///' RangeCustomSlideShow ' gets tested in tSlideShowCustomSlideShow ///'
+ ' IndividuellePraesentationName
+ '///<b> check checkbox 'window' </b>///'
+ Fenster.Check
+ '/// check checkbox 'default' ///'
+ Standard.Check
+ '///<b> check check box 'Auto' -> implies looping of slideshow in fullscreen mode </b>///'
+ Auto.Check
+ '/// set duration of pause to '00:00:05' ///'
+ Zeit.GetText
+ '/// check check box 'Show logo' ///'
+ LogoAnzeigen.Check
+ '///<b> check checkbox 'Change slides maually' </b>///'
+ DiawechselManuel.Check
+ '///<b> check checkbox 'Mouse pointer as pen' </b>///'
+ MauszeigerAlsStift.Check
+ '///<b> UNcheck checkbox 'Mouse pointer visible' </b>///'
+ MauszeigerSichtbar.UnCheck
+ '///<b> check checkbox 'Navigator visible' </b>///'
+ NavigatorSichtbar.Check
+ '///<b> UNcheck checkbox 'animations allowed' </b>///'
+ AnimationenZulassen.UnCheck
+ '///<b> UNcheck checkbox 'Change slides by clicking on background' </b>///'
+ DiaWechselAufHintergrund.UnCheck
+ '///<b> check checkbox 'Presentation always on top' </b>///'
+ PraesentationImmerImVordergrund.Check
+ '/// cancel dialog 'Slide Show' ///'
+ Bildschirmpraesentation.Cancel
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tSlideShowCustomSlideShow
- '/// open application ///'
- Call hNewDocument
- sleep 2
- '/// Slide Show->Custom Slide Show ///'
- SlideShowCustomSlideshow
- Kontext "IndividuellePraesentation"
- call Dialogtest (IndividuellePraesentation)
- '/// click button 'New' ///'
- Neu.Click
- Kontext "IndividuellePraesentationDefinieren"
- Call DialogTest (IndividuellePraesentationDefinieren)
- '/// select the first entry in the list 'Existing Slides' ///'
- SeitenPraesentation.Select 1
- '/// click button '>>' ///'
- Hinzufuegen.Click
- '/// close dialog 'Define Custom Slide Show' with OK ///'
- IndividuellePraesentationDefinieren.OK
- Kontext "IndividuellePraesentation"
- '/// click button 'Copy' ///'
- Kopieren.Click
- '/// click button 'Delete' ///'
- Loeschen.Click
- '/// click button 'Edit' ///'
- Bearbeiten.Click
- Kontext "IndividuellePraesentationDefinieren"
- '/// select 1st entry in the list 'Selected Slides' ///'
- SelectedSlides.Select 1
- '/// click button '<<' ///'
- Entfernen.Click
- '/// close dialog 'Define Custom Slide Show' with Cancel ///'
- IndividuellePraesentationDefinieren.Cancel
- Kontext "IndividuellePraesentation"
- '/// check checkbox 'Use Custom Slide Show' ///'
- IndividuellePraesentationBenutzen.Check
- sleep 1
- '///+ UNcheck checkbox 'Use Custom Slide Show' ///'
- IndividuellePraesentationBenutzen.UnCheck
- '/// click button 'Start...' ///'
- Starten.Click
- sleep 5
- '/// press key [space] 2 times ///'
- kontext "DocumentPresentation"
- DocumentPresentation.TypeKeys "<space>"
- sleep 1
- DocumentPresentation.TypeKeys "<space>"
- sleep 1
- '/// close dialog 'Custom Slide Shows' ///'
-' IndividuellePraesentation.Close ' slide show ends dialog !
- '/// Slide Show->Slide Show Settings ///'
- try
- SlideShowPresentationSettings
- catch
- warnlog "Presentation did not end :-("
- DocumentPresentation.TypeKeys "<escape>"
- endcatch
- Kontext "Bildschirmpraesentation"
- if Bildschirmpraesentation.exists (5) then
- '/// check checkbox 'Custom Slide Show' ///'
- RangeCustomSlideShow.Check
- printlog "check: '" + IndividuellePraesentationName.GetSelText + "'"
- '/// cancel dialog 'Slide Show' ///'
- Bildschirmpraesentation.Cancel
- else
- warnlog "Dialog not open? SlideShowPresentationSettings"
- endif
- '/// Slide Show->Custom Slide Show ///'
- SlideShowCustomSlideshow
- Kontext "IndividuellePraesentation"
- if (IndividuellePraesentation.exists (5)) then
- '/// click button 'Delete' ///'
- Loeschen.Click
- '/// close dialog 'Custom Slide Shows' ///'
- IndividuellePraesentation.Close
- else
- warnlog "Dialog not open? SlideShowCustomSlideshow"
- endif
- '/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ Call hNewDocument
+ sleep 2
+ '/// Slide Show->Custom Slide Show ///'
+ SlideShowCustomSlideshow
+ Kontext "IndividuellePraesentation"
+ call Dialogtest (IndividuellePraesentation)
+ '/// click button 'New' ///'
+ Neu.Click
+ Kontext "IndividuellePraesentationDefinieren"
+ Call DialogTest (IndividuellePraesentationDefinieren)
+ '/// select the first entry in the list 'Existing Slides' ///'
+ SeitenPraesentation.Select 1
+ '/// click button '>>' ///'
+ Hinzufuegen.Click
+ '/// close dialog 'Define Custom Slide Show' with OK ///'
+ IndividuellePraesentationDefinieren.OK
+ Kontext "IndividuellePraesentation"
+ '/// click button 'Copy' ///'
+ Kopieren.Click
+ '/// click button 'Delete' ///'
+ Loeschen.Click
+ '/// click button 'Edit' ///'
+ Bearbeiten.Click
+ Kontext "IndividuellePraesentationDefinieren"
+ '/// select 1st entry in the list 'Selected Slides' ///'
+ SelectedSlides.Select 1
+ '/// click button '<<' ///'
+ Entfernen.Click
+ '/// close dialog 'Define Custom Slide Show' with Cancel ///'
+ IndividuellePraesentationDefinieren.Cancel
+ Kontext "IndividuellePraesentation"
+ '/// check checkbox 'Use Custom Slide Show' ///'
+ IndividuellePraesentationBenutzen.Check
+ sleep 1
+ '///+ UNcheck checkbox 'Use Custom Slide Show' ///'
+ IndividuellePraesentationBenutzen.UnCheck
+ '/// click button 'Start...' ///'
+ Starten.Click
+ sleep 5
+ '/// press key [space] 2 times ///'
+ kontext "DocumentPresentation"
+ DocumentPresentation.TypeKeys "<space>"
+ sleep 1
+ DocumentPresentation.TypeKeys "<space>"
+ sleep 1
+ '/// close dialog 'Custom Slide Shows' ///'
+ ' IndividuellePraesentation.Close ' slide show ends dialog !
+ '/// Slide Show->Slide Show Settings ///'
+ try
+ SlideShowPresentationSettings
+ catch
+ warnlog "Presentation did not end :-("
+ DocumentPresentation.TypeKeys "<escape>"
+ endcatch
+ Kontext "Bildschirmpraesentation"
+ if Bildschirmpraesentation.exists (5) then
+ '/// check checkbox 'Custom Slide Show' ///'
+ RangeCustomSlideShow.Check
+ printlog "check: '" + IndividuellePraesentationName.GetSelText + "'"
+ '/// cancel dialog 'Slide Show' ///'
+ Bildschirmpraesentation.Cancel
+ else
+ warnlog "Dialog not open? SlideShowPresentationSettings"
+ endif
+ '/// Slide Show->Custom Slide Show ///'
+ SlideShowCustomSlideshow
+ Kontext "IndividuellePraesentation"
+ if (IndividuellePraesentation.exists (5)) then
+ '/// click button 'Delete' ///'
+ Loeschen.Click
+ '/// close dialog 'Custom Slide Shows' ///'
+ IndividuellePraesentation.Close
+ else
+ warnlog "Dialog not open? SlideShowCustomSlideshow"
+ endif
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tSlideShowSlideTransition
@@ -266,191 +266,191 @@ testcase tSlideShowSlideTransition
sleep 2
'/// The 'Slide Transition' in the right 'Tasks' Pane has to come up ///'
Kontext "Tasks"
- '/// Select the second entry from teh Listbox 'Applay to selected slides' ///'
- TransitionApplyToSelectedSlide.select (2)
- sleep 5 ' takes some time, until it is run
- Printlog "Count of effects : "+TransitionApplyToSelectedSlide.GetItemCount
- Printlog "Count of Speeds : "+TransitionSpeed.GetItemCount
- iCount = TransitionSound.GetItemCount
- Printlog "Count of Sounds : " + iCount
+ '/// Select the second entry from teh Listbox 'Applay to selected slides' ///'
+ TransitionApplyToSelectedSlide.select (2)
+ sleep 5 ' takes some time, until it is run
+ Printlog "Count of effects : "+TransitionApplyToSelectedSlide.GetItemCount
+ Printlog "Count of Speeds : "+TransitionSpeed.GetItemCount
+ iCount = TransitionSound.GetItemCount
+ Printlog "Count of Sounds : " + iCount
- '/// One Entry of the Listbox 'Sound' is 'Other sound...', select it ///'
- TransitionSound.typeKeys "<home>"
- i = 0
- for a = 1 to iCount
- TransitionSound.select (a)
- kontext "OeffnenDlg"
- if (OeffnenDlg.exists (5)) then
- if (0=i) then
- ' remember when dialog came up
- i = a
- OeffnenDlg.cancel
- else
- warnlog "File Open Dialog comes up a second time!"
- OeffnenDlg.cancel
- endif
- endif
- kontext "Tasks"
- ' the Checkbox is disabled on teh first three entries: <No Sound>, <Stop previous sound>...
- if (TransitionLoopUntilNextSound.isEnabled AND (a<4)) then
- qaErrorLog "May be Language specific -> Evaluation of TBO; " + a
- endif
- next a
- TransitionSound.select (i)
- '/// The dialog 'Open' comes up///'
- sleep 1
+ '/// One Entry of the Listbox 'Sound' is 'Other sound...', select it ///'
+ TransitionSound.typeKeys "<home>"
+ i = 0
+ for a = 1 to iCount
+ TransitionSound.select (a)
kontext "OeffnenDlg"
if (OeffnenDlg.exists (5)) then
- '/// Read all entries in Listbox 'File type' ///'
- for i = 1 to Dateityp.getItemCount
- printlog "" + i + ":" + Dateityp.getItemText(i)
- next i
- '/// cancel dialog 'Open' ///'
- OeffnenDlg.cancel
- else
- warnlog "Impress:Tasks Pane:Slide Transition:Sound:Other sound... disdn't bring up teh File Open Dialog!"
+ if (0=i) then
+ ' remember when dialog came up
+ i = a
+ OeffnenDlg.cancel
+ else
+ warnlog "File Open Dialog comes up a second time!"
+ OeffnenDlg.cancel
+ endif
endif
kontext "Tasks"
- sleep (2)
- '/// check checkbox 'Automatically after' ///'
- TransitionAutomaticallyAfter.check
- sleep (2)
- '/// press key 'Page Up' in box ///'
- TransitionAutomaticallyAfterTime.typeKeys "<PageUp>"
- sleep 9
- '/// check the standard checkbox 'On mouse click' ///'
- TransitionOnMouseClick.check
- sleep (2)
- '/// press button 'Apply to All Slides' ///'
- TransitionApplyToAllSlides.click
- sleep (2)
- '/// press button 'Play' ///'
- TransitionPlay.click
- sleep 10
- '/// press button 'Slide Show' ///'
- TransitionSlideShow.click
- sleep 2
- kontext "DocumentPresentation"
- if DocumentPresentation.exists (10) then
- printlog "Presentation started :-)"
- DocumentPresentation.typeKeys "<escape>"
- else
- warnlog "Impress:Tasks Pane:Slide Transition:Slide Show button doesn't start slideshow!"
+ ' the Checkbox is disabled on teh first three entries: <No Sound>, <Stop previous sound>...
+ if (TransitionLoopUntilNextSound.isEnabled AND (a<4)) then
+ qaErrorLog "May be Language specific -> Evaluation of TBO; " + a
endif
- kontext "Tasks"
+ next a
+ TransitionSound.select (i)
+ '/// The dialog 'Open' comes up///'
+ sleep 1
+ kontext "OeffnenDlg"
+ if (OeffnenDlg.exists (5)) then
+ '/// Read all entries in Listbox 'File type' ///'
+ for i = 1 to Dateityp.getItemCount
+ printlog "" + i + ":" + Dateityp.getItemText(i)
+ next i
+ '/// cancel dialog 'Open' ///'
+ OeffnenDlg.cancel
+ else
+ warnlog "Impress:Tasks Pane:Slide Transition:Sound:Other sound... disdn't bring up teh File Open Dialog!"
+ endif
+ kontext "Tasks"
+ sleep (2)
+ '/// check checkbox 'Automatically after' ///'
+ TransitionAutomaticallyAfter.check
+ sleep (2)
+ '/// press key 'Page Up' in box ///'
+ TransitionAutomaticallyAfterTime.typeKeys "<PageUp>"
+ sleep 9
+ '/// check the standard checkbox 'On mouse click' ///'
+ TransitionOnMouseClick.check
+ sleep (2)
+ '/// press button 'Apply to All Slides' ///'
+ TransitionApplyToAllSlides.click
+ sleep (2)
+ '/// press button 'Play' ///'
+ TransitionPlay.click
+ sleep 10
+ '/// press button 'Slide Show' ///'
+ TransitionSlideShow.click
+ sleep 2
+ kontext "DocumentPresentation"
+ if DocumentPresentation.exists (10) then
+ printlog "Presentation started :-)"
+ DocumentPresentation.typeKeys "<escape>"
+ else
+ warnlog "Impress:Tasks Pane:Slide Transition:Slide Show button doesn't start slideshow!"
+ endif
+ kontext "Tasks"
- '/// uncheck and check Checkbox 'Automatic Preview' ///'
- '/// default is checked ///'
- if (NOT TransitionAutomaticPreview.isChecked) then
- warnlog "Impress:Tasks Pane:Slide Transition: Automatic preview has to be checked by default, wasn't!"
- endif
- sleep (2)
- TransitionAutomaticPreview.unCheck
- sleep (2)
- TransitionAutomaticPreview.Check
+ '/// uncheck and check Checkbox 'Automatic Preview' ///'
+ '/// default is checked ///'
+ if (NOT TransitionAutomaticPreview.isChecked) then
+ warnlog "Impress:Tasks Pane:Slide Transition: Automatic preview has to be checked by default, wasn't!"
+ endif
+ sleep (2)
+ TransitionAutomaticPreview.unCheck
+ sleep (2)
+ TransitionAutomaticPreview.Check
'/// close application ///'
Call hCloseDocument
endcase
testcase tSlideShowShowHideSlide
-'/// open application ///'
- Call hNewDocument
-'/// create rectangle ///'
- Call hRechteckErstellen ( 10, 10, 20, 40 )
-'/// View->Master View->Slides View ///'
- ViewWorkspaceSlidesView
- sleep 1
-'/// Slide Show->Hide Slide ///'
- SlideShowHideSlide
- sleep 1
-'/// Slide Show->Show Slide ///'
- SlideShowShowSlide
-'/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ Call hNewDocument
+ '/// create rectangle ///'
+ Call hRechteckErstellen ( 10, 10, 20, 40 )
+ '/// View->Master View->Slides View ///'
+ ViewWorkspaceSlidesView
+ sleep 1
+ '/// Slide Show->Hide Slide ///'
+ SlideShowHideSlide
+ sleep 1
+ '/// Slide Show->Show Slide ///'
+ SlideShowShowSlide
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tSlideShowAnimation
-'/// open application ///'
- Call hNewDocument
- sleep 1
-'/// create rectangle ///'
- Call hRechteckErstellen ( 10, 10, 20, 40 )
- sleep 1
-'/// Insert ->Animated image ///'
- Opl_SD_EffekteZulassen
- Kontext "Animation"
- sleep 1
-'/// click button 'Apply Object' ///'
- BildAufnehmen.Click 'BildAufnehmen
-'/// click button 'Create' ///'
- Erstellen.Click
- sleep 1
-'/// Select 1st entry from top in 'Alignment' ///'
- Anpassung.Select 1
- sleep 1
-'/// click button 'Create' ///'
- Erstellen.Click
- sleep 1
-'/// click button 'Apply Objects Individually' ///'
- AlleAufnehmen.Click
- sleep 1
-'/// click button 'First Image' ///'
- ErstesBild.Click
- sleep 1
-'/// click button 'Last Image' ///'
- LetztesBild.Click
- sleep 1
-'/// click button 'BAckwards' ///'
- Rueckwaerts.Click
- sleep 1
-'/// click button 'Play' ///'
- Abspielen.Click
- sleep 1
-'/// click in Number field 'Image Number' Less - More ///'
- AnzahlBilder.Less
- sleep 1
- AnzahlBilder.More
- sleep 1
-'/// check 'Bitmap Object' ///'
- AnimationsgruppeBitmapobjekt.Check
- sleep 1
-'/// Type '10' into the field 'Duration' ///'
- AnzeigedauerProBild.SetText "10"
-'/// click button 'Play' ///'
- Abspielen.Click
-'/// wait 5 seconds ///'
- sleep 5
-'/// click button 'Stop' ///'
- try
+ '/// open application ///'
+ Call hNewDocument
+ sleep 1
+ '/// create rectangle ///'
+ Call hRechteckErstellen ( 10, 10, 20, 40 )
+ sleep 1
+ '/// Insert ->Animated image ///'
+ Opl_SD_EffekteZulassen
+ Kontext "Animation"
+ sleep 1
+ '/// click button 'Apply Object' ///'
+ BildAufnehmen.Click 'BildAufnehmen
+ '/// click button 'Create' ///'
+ Erstellen.Click
+ sleep 1
+ '/// Select 1st entry from top in 'Alignment' ///'
+ Anpassung.Select 1
+ sleep 1
+ '/// click button 'Create' ///'
+ Erstellen.Click
+ sleep 1
+ '/// click button 'Apply Objects Individually' ///'
+ AlleAufnehmen.Click
+ sleep 1
+ '/// click button 'First Image' ///'
+ ErstesBild.Click
+ sleep 1
+ '/// click button 'Last Image' ///'
+ LetztesBild.Click
+ sleep 1
+ '/// click button 'BAckwards' ///'
+ Rueckwaerts.Click
+ sleep 1
+ '/// click button 'Play' ///'
+ Abspielen.Click
+ sleep 1
+ '/// click in Number field 'Image Number' Less - More ///'
+ AnzahlBilder.Less
+ sleep 1
+ AnzahlBilder.More
+ sleep 1
+ '/// check 'Bitmap Object' ///'
+ AnimationsgruppeBitmapobjekt.Check
+ sleep 1
+ '/// Type '10' into the field 'Duration' ///'
+ AnzeigedauerProBild.SetText "10"
+ '/// click button 'Play' ///'
+ Abspielen.Click
+ '/// wait 5 seconds ///'
+ sleep 5
+ '/// click button 'Stop' ///'
+ try
Stopp.Click
- catch
+ catch
warnlog "Stopbutton doesn't work"
- endcatch
- sleep 1
-'/// Select 1st entry from top in 'Loop Count' ///'
- AnzahlDurchlaeufe.Select 1
- sleep 1
-'/// click button 'Delete Current Image' ///'
- BildLoeschen.Click
- sleep 1
-'/// check 'Group Object' ///'
- AnimationsgruppeGruppenobjekt.Check
- sleep 1
-'/// click button 'Delete All Images' ///'
- AlleLoeschen.Click
- kontext "Messagebox"
-'/// there has to be a messagebox 'Really delete?' say YES!; else ERROR ///'
- if Messagebox.exists (5) then
- Messagebox.YES
- else
- warnlog "No one cares about my data :-( No one asked if all shall be deleted :-( "
- endif
- sleep 1
- kontext "Animation"
-'/// close dialog 'Animation' ///'
- Animation.Close
-'/// close application ///'
- Call hCloseDocument
+ endcatch
+ sleep 1
+ '/// Select 1st entry from top in 'Loop Count' ///'
+ AnzahlDurchlaeufe.Select 1
+ sleep 1
+ '/// click button 'Delete Current Image' ///'
+ BildLoeschen.Click
+ sleep 1
+ '/// check 'Group Object' ///'
+ AnimationsgruppeGruppenobjekt.Check
+ sleep 1
+ '/// click button 'Delete All Images' ///'
+ AlleLoeschen.Click
+ kontext "Messagebox"
+ '/// there has to be a messagebox 'Really delete?' say YES!; else ERROR ///'
+ if Messagebox.exists (5) then
+ Messagebox.YES
+ else
+ warnlog "No one cares about my data :-( No one asked if all shall be deleted :-( "
+ endif
+ sleep 1
+ kontext "Animation"
+ '/// close dialog 'Animation' ///'
+ Animation.Close
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tSlideShowCustomAnimation
@@ -462,229 +462,229 @@ testcase tSlideShowCustomAnimation
Call hTextrahmenErstellen ("Test text to test text effects", 10, 10, 20, 40 )
'/// Slide Show->Custom Animation... ///'
SlideShowCustomAnimation
- Kontext "Tasks"
- '/// click button 'Add...' ///'
- EffectAdd.click
+ Kontext "Tasks"
+ '/// click button 'Add...' ///'
+ EffectAdd.click
+ '/// Dialog 'Custom Animation' comes up ///'
+ kontext
+ '/// Switch to TabPage: Entrance ///'
+ active.setPage(TabEntrance)
+ kontext "TabEntrance"
+ if TabEntrance.exists(5) then
+ DialogTest(TabEntrance)
+ '/// select in the listbox 'Effects' the second entry///'
+ Effects.select(2)
+ Speed.getItemCount
+ AutomaticPreview.unCheck
+ sleep 1
+ AutomaticPreview.Check
+ kontext
+ '/// Switch to TabPage: Emphasis ///'
+ active.setPage(TabEmphasis)
+ kontext "TabEmphasis"
+ if TabEmphasis.exists(5) then
+ DialogTest(TabEmphasis)
+ else
+ bError = true
+ warnlog "Impress:Tasks Pane:Custom Animation:TabEmphasis tabPage doesn't work."
+ endif
+ kontext
+ '/// Switch to TabPage: Exit ///'
+ active.setPage(TabExit)
+ kontext "TabExit"
+ if TabExit.exists(5) then
+ DialogTest(TabExit)
+ else
+ bError = true
+ warnlog "Impress:Tasks Pane:Custom Animation:TabExit tabPage doesn't work."
+ endif
+ kontext
+ '/// Switch to TabPage: Motion Paths ///'
+ active.setPage(TabMotionPaths)
+ kontext "TabMotionPaths"
+ if TabMotionPaths.exists(5) then
+ DialogTest(TabMotionPaths)
+ Effects.select(7)
+ else
+ bError = true
+ warnlog "Impress:Tasks Pane:Custom Animation:TabMotionPaths tabPage doesn't work."
+ endif
+ '/// Close dialog 'Custom Animation' with 'OK' ///'
+ TabMotionPaths.OK
+ bError = false
+ else
+ bError = true
+ warnlog "Impress:Tasks Pane:Custom Animation:Add... button didn't work."
+ endif
+ Kontext "Tasks"
+ if (NOT bError) then
+ '/// click button 'Change...' ///'
+ EffectChange.click
'/// Dialog 'Custom Animation' comes up ///'
kontext
'/// Switch to TabPage: Entrance ///'
active.setPage(TabEntrance)
kontext "TabEntrance"
- if TabEntrance.exists(5) then
- DialogTest(TabEntrance)
- '/// select in the listbox 'Effects' the second entry///'
- Effects.select(2)
- Speed.getItemCount
- AutomaticPreview.unCheck
- sleep 1
- AutomaticPreview.Check
- kontext
- '/// Switch to TabPage: Emphasis ///'
- active.setPage(TabEmphasis)
- kontext "TabEmphasis"
- if TabEmphasis.exists(5) then
- DialogTest(TabEmphasis)
- else
- bError = true
- warnlog "Impress:Tasks Pane:Custom Animation:TabEmphasis tabPage doesn't work."
- endif
- kontext
- '/// Switch to TabPage: Exit ///'
- active.setPage(TabExit)
- kontext "TabExit"
- if TabExit.exists(5) then
- DialogTest(TabExit)
+ if (NOT TabEntrance.exists(5)) then
+ warnlog "Impress:Tasks Pane:Custom Animation:Change... button didn't work."
+ endif
+ TabEntrance.cancel
+ Kontext "Tasks"
+ EffectStart.getItemCount
+ if EffectProperty.isEnabled then
+ EffectProperty.getItemCount
+ endif
+ '/// CLick on button '...' (Options) ///'
+ EffectOptions.click
+ kontext "TabEffect"
+ if TabEffect.exists(5) then
+ dialogTest(TabEffect)
+ Sound.getItemCount
+ AfterAnimation.getItemCount
+ '/// switch to TabPage 'Timing' ///'
+ Kontext
+ active.setPage TabTiming
+ kontext "TabTiming"
+ if TabTiming.exists(5) then
+ dialogTest(TabTiming)
+ TimingStart.getItemCount
+ Delay.getText
+ Speed.getItemCount
+ Repeat.getItemCount
+ Rewind.ischecked
+ TriggerAnimate.isChecked
+ TriggerStart.isChecked
+ Shape.getItemCount
else
- bError = true
- warnlog "Impress:Tasks Pane:Custom Animation:TabExit tabPage doesn't work."
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
endif
- kontext
- '/// Switch to TabPage: Motion Paths ///'
- active.setPage(TabMotionPaths)
- kontext "TabMotionPaths"
- if TabMotionPaths.exists(5) then
- DialogTest(TabMotionPaths)
- Effects.select(7)
+ '/// switch to TabPage 'Timing' ///'
+ Kontext
+ active.setPage TabTextAnimation
+ kontext "TabTextAnimation"
+ if TabTextAnimation.exists(5) then
+ dialogTest(TabTextAnimation)
+ GroupText.getItemCount
+ AnimateAttachedShape.isChecked
+ TabTextAnimation.cancel
else
- bError = true
- warnlog "Impress:Tasks Pane:Custom Animation:TabMotionPaths tabPage doesn't work."
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
endif
- '/// Close dialog 'Custom Animation' with 'OK' ///'
- TabMotionPaths.OK
- bError = false
else
- bError = true
- warnlog "Impress:Tasks Pane:Custom Animation:Add... button didn't work."
+ warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
endif
Kontext "Tasks"
- if (NOT bError) then
- '/// click button 'Change...' ///'
- EffectChange.click
- '/// Dialog 'Custom Animation' comes up ///'
- kontext
- '/// Switch to TabPage: Entrance ///'
- active.setPage(TabEntrance)
- kontext "TabEntrance"
- if (NOT TabEntrance.exists(5)) then
- warnlog "Impress:Tasks Pane:Custom Animation:Change... button didn't work."
- endif
- TabEntrance.cancel
- Kontext "Tasks"
- EffectStart.getItemCount
- if EffectProperty.isEnabled then
- EffectProperty.getItemCount
- endif
- '/// CLick on button '...' (Options) ///'
- EffectOptions.click
- kontext "TabEffect"
- if TabEffect.exists(5) then
- dialogTest(TabEffect)
- Sound.getItemCount
- AfterAnimation.getItemCount
- '/// switch to TabPage 'Timing' ///'
- Kontext
- active.setPage TabTiming
- kontext "TabTiming"
- if TabTiming.exists(5) then
- dialogTest(TabTiming)
- TimingStart.getItemCount
- Delay.getText
- Speed.getItemCount
- Repeat.getItemCount
- Rewind.ischecked
- TriggerAnimate.isChecked
- TriggerStart.isChecked
- Shape.getItemCount
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
- endif
- '/// switch to TabPage 'Timing' ///'
- Kontext
- active.setPage TabTextAnimation
- kontext "TabTextAnimation"
- if TabTextAnimation.exists(5) then
- dialogTest(TabTextAnimation)
- GroupText.getItemCount
- AnimateAttachedShape.isChecked
- TabTextAnimation.cancel
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
- endif
- else
- warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
- endif
- Kontext "Tasks"
- EffectSpeed.getItemCount
- EffectList.getItemCount
- EffectPlay.click
- '/// Wait five seconds so the Playfunction has ended ///'
- sleep 5
- EffectSlideShow.click
- sleep 1
- kontext "DocumentPresentation"
- if DocumentPresentation.exists (5) then
- printlog "Presentation started :-)"
- DocumentPresentation.typeKeys "<escape>"
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Slide Show button doesn't start slideshow!"
- endif
- kontext "Tasks"
- EffectAutomaticPreview.isChecked
- '/// click button 'Remove' ///'
- EffectRemove.click
+ EffectSpeed.getItemCount
+ EffectList.getItemCount
+ EffectPlay.click
+ '/// Wait five seconds so the Playfunction has ended ///'
+ sleep 5
+ EffectSlideShow.click
+ sleep 1
+ kontext "DocumentPresentation"
+ if DocumentPresentation.exists (5) then
+ printlog "Presentation started :-)"
+ DocumentPresentation.typeKeys "<escape>"
+ else
+ warnlog "Impress:Tasks Pane:Custom Animation:Slide Show button doesn't start slideshow!"
endif
+ kontext "Tasks"
+ EffectAutomaticPreview.isChecked
+ '/// click button 'Remove' ///'
+ EffectRemove.click
+ endif
'/// close application ///'
Call hCloseDocument
endcase
testcase tSlideShowInteraction
-'/// open application ///'
- Call hNewDocument
- sleep 2
-'/// create rectangle ///'
- Call hRechteckErstellen (10, 10, 20, 20)
- sleep 3
-'/// Slide Show->Interaction ///'
- SlideShowInteraction
- Kontext "TabInteraktion"
- Call DialogTest (TabInteraktion, 1)
- '///+ Select 6th entry from top in 'Action at mouse click' : 'Go to page or object' ///'
- AktionBeiMausklick.select 6
- Printlog AktionBeiMausklick.GetSelText + " chosen"
- Call DialogTest (TabInteraktion, 2)
- '///+ click button 'Find' ///'
- sleep 1
- suchen.click
- Kontext "TabInteraktion"
-'/// Select 7th entry from top in 'Action at mouse click' : 'Go to document' ///'
- sleep 1
- AktionBeiMausklick.select 7
- sleep 1
- Printlog AktionBeiMausklick.GetSelText + " chosen"
- Kontext "TabInteraktion"
- Call DialogTest (TabInteraktion, 3)
- '///+ click button 'Browse...' ///'
- Durchsuchen.click
- sleep 1
- kontext "OeffnenDlg"
- call Dialogtest (OeffnenDlg)
- '///+ cancel dialog 'open' ///'
- OeffnenDlg.cancel
- Kontext "TabInteraktion"
- sleep 1
-'/// Select 9th entry from top in 'Action at mouse click' : 'Play Sound' ///'
- AktionBeiMausklick.select 8
- Printlog AktionBeiMausklick.GetSelText + " chosen"
- Call DialogTest (TabInteraktion, 4)
- '///+ click button 'Browse...' ///'
- Durchsuchen.click
- sleep 1
- Kontext "OeffnenDlg"
- Call dialogTest (OeffnenDlg)
- '///+ cancel dialog 'open' ///'
- OeffnenDlg.Cancel
- sleep 1
- Kontext "TabInteraktion"
-'/// Select 8th entry from top in 'Action at mouse click' : 'Run Program' ///'
- AktionBeiMausklick.select 9
- Printlog AktionBeiMausklick.GetSelText + " chosen"
- Call DialogTest (TabInteraktion, 7)
- Kontext "TabInteraktion"
- '///+ click button 'Browse...' ///'
- Durchsuchen.Click
- sleep 1
- Kontext "OeffnenDlg"
- Call dialogTest (OeffnenDlg)
- '///+ cancel dialog 'open' ///'
- OeffnenDlg.Cancel
- sleep 1
-'/// Select 9th entry from top in 'Action at mouse click' : 'Run Macro' ///'
- Kontext "TabInteraktion"
- AktionBeiMausklick.select 10
- Printlog AktionBeiMausklick.GetSelText + " chosen"
- sleep 3
- Call DialogTest (TabInteraktion, 6)
- '///+ click button 'Browse...' ///'
- Durchsuchen.Click
- sleep 1
- Kontext "ScriptSelector"
- sleep 1
- Call DialogTest ( ScriptSelector, 1)
- sleep 1
- '///+ cancel dialog 'ScriptSelector' ///'
- ScriptSelector.Cancel
- sleep 1
-'/// Select 10th entry from top in 'Action at mouse click' : 'Exit Presentation' ///'
- Kontext "TabInteraktion"
- AktionBeiMausklick.select 11
- Printlog AktionBeiMausklick.GetSelText + " chosen"
- Call DialogTest (TabInteraktion, 7)
- Kontext "TabInteraktion"
-'/// close dialog 'Interaction' ///'
- TabInteraktion.Close
- sleep 2
-'/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ Call hNewDocument
+ sleep 2
+ '/// create rectangle ///'
+ Call hRechteckErstellen (10, 10, 20, 20)
+ sleep 3
+ '/// Slide Show->Interaction ///'
+ SlideShowInteraction
+ Kontext "TabInteraktion"
+ Call DialogTest (TabInteraktion, 1)
+ '///+ Select 6th entry from top in 'Action at mouse click' : 'Go to page or object' ///'
+ AktionBeiMausklick.select 6
+ Printlog AktionBeiMausklick.GetSelText + " chosen"
+ Call DialogTest (TabInteraktion, 2)
+ '///+ click button 'Find' ///'
+ sleep 1
+ suchen.click
+ Kontext "TabInteraktion"
+ '/// Select 7th entry from top in 'Action at mouse click' : 'Go to document' ///'
+ sleep 1
+ AktionBeiMausklick.select 7
+ sleep 1
+ Printlog AktionBeiMausklick.GetSelText + " chosen"
+ Kontext "TabInteraktion"
+ Call DialogTest (TabInteraktion, 3)
+ '///+ click button 'Browse...' ///'
+ Durchsuchen.click
+ sleep 1
+ kontext "OeffnenDlg"
+ call Dialogtest (OeffnenDlg)
+ '///+ cancel dialog 'open' ///'
+ OeffnenDlg.cancel
+ Kontext "TabInteraktion"
+ sleep 1
+ '/// Select 9th entry from top in 'Action at mouse click' : 'Play Sound' ///'
+ AktionBeiMausklick.select 8
+ Printlog AktionBeiMausklick.GetSelText + " chosen"
+ Call DialogTest (TabInteraktion, 4)
+ '///+ click button 'Browse...' ///'
+ Durchsuchen.click
+ sleep 1
+ Kontext "OeffnenDlg"
+ Call dialogTest (OeffnenDlg)
+ '///+ cancel dialog 'open' ///'
+ OeffnenDlg.Cancel
+ sleep 1
+ Kontext "TabInteraktion"
+ '/// Select 8th entry from top in 'Action at mouse click' : 'Run Program' ///'
+ AktionBeiMausklick.select 9
+ Printlog AktionBeiMausklick.GetSelText + " chosen"
+ Call DialogTest (TabInteraktion, 7)
+ Kontext "TabInteraktion"
+ '///+ click button 'Browse...' ///'
+ Durchsuchen.Click
+ sleep 1
+ Kontext "OeffnenDlg"
+ Call dialogTest (OeffnenDlg)
+ '///+ cancel dialog 'open' ///'
+ OeffnenDlg.Cancel
+ sleep 1
+ '/// Select 9th entry from top in 'Action at mouse click' : 'Run Macro' ///'
+ Kontext "TabInteraktion"
+ AktionBeiMausklick.select 10
+ Printlog AktionBeiMausklick.GetSelText + " chosen"
+ sleep 3
+ Call DialogTest (TabInteraktion, 6)
+ '///+ click button 'Browse...' ///'
+ Durchsuchen.Click
+ sleep 1
+ Kontext "ScriptSelector"
+ sleep 1
+ Call DialogTest ( ScriptSelector, 1)
+ sleep 1
+ '///+ cancel dialog 'ScriptSelector' ///'
+ ScriptSelector.Cancel
+ sleep 1
+ '/// Select 10th entry from top in 'Action at mouse click' : 'Exit Presentation' ///'
+ Kontext "TabInteraktion"
+ AktionBeiMausklick.select 11
+ Printlog AktionBeiMausklick.GetSelText + " chosen"
+ Call DialogTest (TabInteraktion, 7)
+ Kontext "TabInteraktion"
+ '/// close dialog 'Interaction' ///'
+ TabInteraktion.Close
+ sleep 2
+ '/// close application ///'
+ Call hCloseDocument
endcase
diff --git a/testautomation/graphics/required/d_updt.bas b/testautomation/graphics/required/d_updt.bas
index d191f2adea1c..6c5fdbe74472 100644
--- a/testautomation/graphics/required/d_updt.bas
+++ b/testautomation/graphics/required/d_updt.bas
@@ -55,13 +55,13 @@ sub main
use "graphics\required\includes\draw\d_005_.inc"
use "graphics\required\includes\draw\d_007.inc"
- Call D_003_
+ Call d_003
call id_002
call id_011
- Call D_002_
+ Call d_002
call id_003
call id_004
- Call D_005_
+ Call d_005
call id_005
call id_Tools
call d_007
diff --git a/testautomation/graphics/required/includes/draw/d_002_.inc b/testautomation/graphics/required/includes/draw/d_002_.inc
index d3d0ee81a9c3..cf37b87ffee4 100644
--- a/testautomation/graphics/required/includes/draw/d_002_.inc
+++ b/testautomation/graphics/required/includes/draw/d_002_.inc
@@ -31,6 +31,14 @@
'*
'\*****************************************************************
+sub d_002
+
+ call tdEditCrossFading()
+ call tdEditLayer()
+
+end sub
+
+'*******************************************************************************
testcase tdEditCrossFading
diff --git a/testautomation/graphics/required/includes/draw/d_003_.inc b/testautomation/graphics/required/includes/draw/d_003_.inc
index 3a7c7da12c38..246e0db05fc9 100644
--- a/testautomation/graphics/required/includes/draw/d_003_.inc
+++ b/testautomation/graphics/required/includes/draw/d_003_.inc
@@ -31,6 +31,15 @@
'*
'\*****************************************************************
+sub d_003
+
+ call tdViewPagePane()
+ call tdViewSlide()
+
+end sub
+
+'*******************************************************************************
+
testcase tdViewPagePane
printlog " open application "
diff --git a/testautomation/graphics/required/includes/draw/d_005_.inc b/testautomation/graphics/required/includes/draw/d_005_.inc
index 046e0bd76a30..998a42cdc093 100644
--- a/testautomation/graphics/required/includes/draw/d_005_.inc
+++ b/testautomation/graphics/required/includes/draw/d_005_.inc
@@ -31,6 +31,14 @@
'*
'\*****************************************************************
+sub d_005
+
+ call tiFormatLayer()
+
+end sub
+
+'*******************************************************************************
+
testcase tiFormatLayer
printlog " open application "
diff --git a/testautomation/graphics/required/includes/draw/d_007.inc b/testautomation/graphics/required/includes/draw/d_007.inc
index 6582ff2c34c1..ce36abf03b59 100644
--- a/testautomation/graphics/required/includes/draw/d_007.inc
+++ b/testautomation/graphics/required/includes/draw/d_007.inc
@@ -31,6 +31,14 @@
'*
'\*****************************************************************
+sub d_007
+
+ call tdModifyRotate()
+
+end sub
+
+'*******************************************************************************
+
testcase tdModifyRotate
printlog " open application "
diff --git a/testautomation/graphics/required/includes/global/gallery.inc b/testautomation/graphics/required/includes/global/gallery.inc
index 5019884973ac..c6f3e2daae7d 100644
--- a/testautomation/graphics/required/includes/global/gallery.inc
+++ b/testautomation/graphics/required/includes/global/gallery.inc
@@ -29,20 +29,7 @@
'*
'* short description : Global Required/resource test: Checking the gallery
'*
-'*******************************************************************
-'*
-' #1 tGallery_DialogTest ' Open gallery, pin - unpin, dock - undock, close gallery
-' #1 tGallery_ActivateAndUpdateAllThemes ' Activate all gallery-themes and update this theme
-' #1 tGallery_CheckNames ' Check the names for all themes depends on language
-' #1 tGallery_CheckContextMenuForGalleryThemes ' Test the context menu on themes window
-' #1 tGallery_CreateAndWorkWithANewGalleryThemes ' Create a new theme, add graphics and work with it
-' #1 tGallery_GalleryView_Preview ' Preview-feature in Gallery Beamer-window
-' #1 tGallery_GalleryView_Insert ' Insert gallery objects in all applications
-' #1 tGallery_GalleryView_Delete ' Delete gallery objects out of Beamer window
-' #0 hOpenGallery ' Open the gallery
-' #1 tGallery_Quick_check
-'*
-'\******************************************************************
+'\******************************************************************************
testcase tGallery_DialogTest
'///Open a new Writer document
'///Tools / Gallery
diff --git a/testautomation/graphics/required/includes/global/gallery2.inc b/testautomation/graphics/required/includes/global/gallery2.inc
index a38e797502cc..1028503a0830 100644
--- a/testautomation/graphics/required/includes/global/gallery2.inc
+++ b/testautomation/graphics/required/includes/global/gallery2.inc
@@ -40,7 +40,7 @@
' #1 tSettingsToCM 'Measurement unit for textdocuments to cm
' #1 tResetSettings 'Resetting the measurement unit for textdocuments.
'*
-'\****************************************************************
+'\******************************************************************************
testcase tSettingsToCM
diff --git a/testautomation/graphics/required/includes/global/id_001.inc b/testautomation/graphics/required/includes/global/id_001.inc
index af835e16fec1..96d2b276eeaf 100644
--- a/testautomation/graphics/required/includes/global/id_001.inc
+++ b/testautomation/graphics/required/includes/global/id_001.inc
@@ -29,21 +29,7 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiFileSaveAs
-' #1 tiFileReload (sFileIn as string)
-' #1 tiFileVersion (sFileIn as string)
-' #1 tiFilePassword
-' #1 tiFileTemplates
-' #1 tmFileNewFromTemplate
-' #1 tmFileOpen
-' #1 tmFileClose
-' #1 tmFileSave
-' #1 tmFileSaveAs
-' #1 tmFileSaveAll
-' #1 tmFileProperties
-' #1 tmFilePrinterSetting
-'\**********************************************************************************
+'\******************************************************************************
testcase tiFileSaveAs
diff --git a/testautomation/graphics/required/includes/global/id_002.inc b/testautomation/graphics/required/includes/global/id_002.inc
index 8c729871cbb3..5880fc968806 100644
--- a/testautomation/graphics/required/includes/global/id_002.inc
+++ b/testautomation/graphics/required/includes/global/id_002.inc
@@ -29,23 +29,7 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiEditUndoRedo
-' #1 tiEditRepeat
-' #1 tiEditCutPasteCopySelectall
-' #1 tiEditPasteSpecial
-' #1 tiEditSearchAndReplace
-' #1 tiEditDuplicate
-' #1 tiEditFields
-' #1 tdEditDeleteSlide
-' #1 tiEditLinks
-' #1 tiEditImageMap
-' #1 tiEditObjectProperties
-' #1 tiEditObjectEdit
-' #1 tiEditPlugIn
-' #1 tiEditHyperlink
-' #1 tEditPoints
-'\**********************************************************************************
+'\******************************************************************************
testcase tiEditUndoRedo
printlog " open application"
@@ -101,22 +85,15 @@ testcase tiEditCutPasteCopySelectall
call hTBOtypeInDoc
- EditCut
- sleep (1)
- EditPaste
- sleep (1)
- EditCopy
- sleep (1)
- EditPaste
- sleep (1)
- EditSelectAll
- sleep (1)
- EditCut
- sleep (1)
- EditPaste
- sleep (1)
- EditDeleteContents
- sleep (1)
+ hUseAsyncSlot( "EditCut" )
+ hUseAsyncSlot( "EditPaste" )
+ hUseAsyncSlot( "EditCopy" )
+ hUseAsyncSlot( "EditPaste" )
+ hUseAsyncSlot( "EditSelectAll" )
+ hUseAsyncSlot( "EditCut" )
+ hUseAsyncSlot( "EditPaste" )
+ hUseAsyncSlot( "EditDeleteContents" )
+
printlog " close application"
Call hCloseDocument
@@ -131,14 +108,18 @@ testcase tiEditPasteSpecial
SetClipboard "This is a Text in the Clipboard"
printlog " Edit->PasteSpecial"
- EditPasteSpecial
- WaitSlot (1000)
+ hUseAsyncSlot( "EditPasteSpecial" )
+
Kontext "InhaltEinfuegen"
+ if ( InhaltEinfuegen.exists( 2 ) ) then
DialogTest ( InhaltEinfuegen )
printlog " close the dialog without inserting something"
- InhaltEinfuegen.Cancel
- WaitSlot (1000)
+ hCloseDialog( InhaltEinfuegen, "Cancel" )
+ else
+ warnlog( "Dialog <InhalteEinfuegen> did not open" )
+ endif
+
printlog " close application"
Call hCloseDocument
@@ -534,27 +515,35 @@ testcase tiEditHyperlink
Call sSelectEmptyLayout
printlog " Insert->Hyperlink"
InsertHyperlink
- WaitSlot (5000)
- Kontext "Hyperlink"
+
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
+
+ Kontext "Hyperlink"
Auswahl.MouseDown 50, 5
Auswahl.MouseUp 50, 5
Auswahl.typekeys "<PAGEDOWN><PAGEUP>"
Auswahl.typekeys "<TAB>"
- sleep 3
+ sleep 1
+
Kontext "TabHyperlinkInternet"
+ printlog "Workaround to get rid of a Focusing-problem..."
+ NameText.Typekeys "alal <RETURN>"
+ NameText.Typekeys "<MOD1 A><DELETE>"
+ TabHyperlinkInternet.Typekeys "<TAB>", 6
+ TabHyperlinkInternet.Typekeys "<LEFT>", 3
+ printlog "End of workaround"
+
+ Internet.Check
+ ZielUrl.SetText( "http://www.liegerad-fahrer.de" )
+
+ Uebernehmen.Click()
- printlog "Workaround to get rid of a Focusing-problem..."
- NameText.Typekeys "alal <RETURN>"
- NameText.Typekeys "<MOD1 A><DELETE>"
- TabHyperlinkInternet.Typekeys "<TAB>", 6
- TabHyperlinkInternet.Typekeys "<LEFT>", 3
- printlog "End of workaround"
-
- Internet.Check 'Just to make sure the radio-button is addressable.
- ZielUrl.Settext "http://www.liegerad-fahrer.de"
- Kontext "Hyperlink"
- Uebernehmen.Click
- Hyperlink.Close
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close()
+ else
+ warnlog( "Failed to open <HyperlinkDialog>" )
+ endif
printlog " presupposition to enable edit->hyperlink: <TAB><F2><STRG+a>"
hTypeKeys "<TAB>"
hTypeKeys "<F2>"
@@ -563,13 +552,14 @@ testcase tiEditHyperlink
try
printlog " Edit->Hyperlink "
EditHyperlinkDraw
- Kontext "Hyperlink"
- if Hyperlink.Exists then
- printlog " close dialog 'Hyperlink'"
- Hyperlink.Close
- else
- Warnlog "- Hyperlinkdialog not up"
- end if
+
+ Kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.Exists( 2 ) ) then
+ printlog " close dialog 'Hyperlink'"
+ HyperlinkDialog.Close()
+ else
+ Warnlog "- Hyperlinkdialog not up"
+ end if
catch
Warnlog "- Not able to edit Hyperlink!"
endcatch
diff --git a/testautomation/graphics/required/includes/global/id_003.inc b/testautomation/graphics/required/includes/global/id_003.inc
index 5720d4cab791..16aa9f27bcd6 100644
--- a/testautomation/graphics/required/includes/global/id_003.inc
+++ b/testautomation/graphics/required/includes/global/id_003.inc
@@ -29,15 +29,7 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiViewNavigator
-' #1 tiViewZoom
-' #1 tiViewToolbar
-' #1 tiViewDisplayQuality
-' #1 tiViewLayer
-' #1 tViewSnapLines
-' #1 tViewGrid
-'\**********************************************************************************
+'\******************************************************************************
testcase tiViewNavigator
printlog " open application "
diff --git a/testautomation/graphics/required/includes/global/id_004.inc b/testautomation/graphics/required/includes/global/id_004.inc
index 2fb21db18373..e6f154f169c8 100644
--- a/testautomation/graphics/required/includes/global/id_004.inc
+++ b/testautomation/graphics/required/includes/global/id_004.inc
@@ -29,26 +29,7 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiInsertSlide
-' #1 tiInsertDuplicateSlide
-' #1 tiInsertField
-' #1 tiInsertSpecialCharacter
-' #1 tiInsertHyperlink
-' #1 tiInsertGraphic
-' #1 tiInsertObjectSound
-' #1 tiInsertObjectVideo
-' #1 tiInsertChart
-' #1 tiInsertObjectOLEObjects
-' #1 tiInsertSpreadsheet
-' #1 tiInsertFormula
-' #1 tiInsertFloatingFrame
-' #1 tiInsertFile
-' #1 tiInsertPlugin
-' #1 tiInsertScan
-' #1 tiInsertSnappointLine
-' #1 tdInsertLayer
-'\**********************************************************************************
+'\******************************************************************************
testcase tiInsertSlide
printlog "Dateiname.settext Convertpath (gTesttoolPath + global\input\graf_inp\stabler.tif) "
@@ -177,15 +158,16 @@ testcase tiInsertHyperlink
Call hNewDocument
printlog "Insert->Hyperlink "
InsertHyperlink
- WaitSlot (5000)
- Kontext "Hyperlink"
- if Hyperlink.exists (5) then
+
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
+
+ Kontext "TabHyperlinkInternet"
+
Auswahl.MouseDown 50, 5
Auswahl.MouseUp 50, 5
Auswahl.typekeys "<PAGEDOWN><PAGEUP>"
Auswahl.typekeys "<TAB>"
- sleep 3
- Kontext "TabHyperlinkInternet"
printlog "Workaround to get rid of a Focusing-problem..."
NameText.Typekeys "alal <RETURN>"
@@ -195,10 +177,13 @@ testcase tiInsertHyperlink
printlog "End of workaround..."
Internet.Check
- ZielUrl.Settext "http://mahler"
- Kontext "Hyperlink"
- Uebernehmen.Click
- Hyperlink.Close
+ ZielUrl.Settext "http://www.nowhere.com"
+
+ Uebernehmen.Click()
+
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close()
+
else
warnlog "Failed to open hyperlink ??!!"
end if
diff --git a/testautomation/graphics/required/includes/global/id_005.inc b/testautomation/graphics/required/includes/global/id_005.inc
index 94898e620e46..97fea2b33dae 100644
--- a/testautomation/graphics/required/includes/global/id_005.inc
+++ b/testautomation/graphics/required/includes/global/id_005.inc
@@ -29,27 +29,7 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiFormatDefault
-' #1 tiFormatLine
-' #1 tdFormatArea
-' #1 tiFormatText
-' #1 tiFormatPositionAndSize
-' #1 tiFormatCharacter
-' #1 tiFormatControlForm
-' #1 tiFormatDimensions
-' #1 tiFormatConnector
-' #1 tiFormat3D_Effects
-' #1 tiFormatNumberingBullets
-' #1 tiFormatCaseCharacter
-' #1 tiFormatParagraph
-' #1 tiFormatPage
-' #1 tiFormatStylesAndFormatting
-' #1 tiFormatStylesSlideDesign
-' #1 tiFormatFontwork
-' #1 tiFormatGroup
-' #1 hWalkTheStyles
-'\**********************************************************************************
+'\******************************************************************************
testcase tiFormatDefault
printlog "open application"
diff --git a/testautomation/graphics/required/includes/global/id_006.inc b/testautomation/graphics/required/includes/global/id_006.inc
index 8e16f5ef5593..c7de07588367 100644
--- a/testautomation/graphics/required/includes/global/id_006.inc
+++ b/testautomation/graphics/required/includes/global/id_006.inc
@@ -29,17 +29,6 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiToolsSpellchecking
-' #1 tiToolsSpellcheckingAutomatic
-' #1 tiToolsThesaurus
-' #1 tiToolsHyphenation
-' #1 tiToolsAutoCorrect
-' #1 tChineseTranslation
-' #1 tiToolsMacro
-' #1 tiToolsGallery
-' #1 tiToolsEyedropper
-' #1 tiToolsOptions
'\**********************************************************************************
'------------------------------------------------------------------------------
@@ -206,7 +195,52 @@ testcase tiToolsThesaurus
if Thesaurus.Exists(3) then
Thesaurus.Cancel
else
- warnlog "the thesaurus does not appear"
+ sFileName = (ConvertPath (gTesttoolPath + "graphics\required\input\engtext.odg"))
+ end if
+ if FileExists ( sFileName ) = FALSE then
+ warnlog "The language-file was not found or accessible! The test ends."
+ goto endsub
+ end if
+ Call hFileOpen (sFileName)
+
+ sleep (2)
+
+ hTypeKeys "<TAB><RETURN>"
+ hTypeKeys "<END><SHIFT HOME>"
+
+ ' Call hTextrahmenErstellen ("SimpleTest" + "<Mod1 Shift left>", 10, 10, 30, 40)
+ try
+ '/// Tools->Thesaurus ///'
+ ExtrasThesaurusDraw
+ Kontext "Thesaurus"
+ Call DialogTest ( Thesaurus )
+ '/// click button 'language' ///'
+ Sprache.Click
+ Kontext "SpracheAuswaehlen"
+ Call DialogTest ( SpracheAuswaehlen )
+ '/// cancel dialog 'select language' ///'
+ SpracheAuswaehlen.cancel
+ Kontext "Thesaurus"
+ '/// click button 'search' ///'
+ Nachschlagen.Click
+ kontext
+ '/// if messagebox exist, say OK; (word not found) ///'
+ if Messagebox.exists (5) then
+ printlog "Messagebox: word not in thesaurus: '"+Messagebox.gettext+"'"
+ Messagebox.ok
+ end if
+ sleep 1
+ Kontext "Thesaurus"
+ '/// cancel dialog 'Thesaurus' ///'
+ Thesaurus.Cancel
+ catch
+ warnlog "Thesaurus didn't work :-("
+ endcatch
+ sleep 1
+ '/// close application ///'
+ Call hCloseDocument
+ else
+ goto endsub
endif
Call hCloseDocument
diff --git a/testautomation/graphics/required/includes/global/id_007.inc b/testautomation/graphics/required/includes/global/id_007.inc
index 242a87f1fce4..7fd278bc702c 100644
--- a/testautomation/graphics/required/includes/global/id_007.inc
+++ b/testautomation/graphics/required/includes/global/id_007.inc
@@ -29,25 +29,6 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tdModifyFlipVertikal
-' #1 tdModifyFlipHorizontal
-' #1 tdContextConvertIntoCurve
-' #1 tdContextConvertIntoPolygon
-' #1 tdContextConvertIntoContour
-' #1 tdContextConvertInto3D
-' #1 tdContextConvertIntoRotationObject
-' #1 tdContextConvertIntoBitmap
-' #1 tdContextConvertIntoMetaFile
-' #1 tdModifyArrange
-' #1 tdModifyArrangeObjects
-' #1 tdModifyAlignment
-' #1 tdContextDistribution
-' #1 tdContextDescriptionObject
-' #1 tdContextNameObject
-' #1 tdModifyConnectBreak
-' #1 tdModifyShapes
-' #1 tdModifyCombineSplit
'\**********************************************************************************
testcase tdModifyFlipVertikal
diff --git a/testautomation/graphics/required/includes/global/id_008.inc b/testautomation/graphics/required/includes/global/id_008.inc
index 887f99dc7a05..0697e82260b7 100644
--- a/testautomation/graphics/required/includes/global/id_008.inc
+++ b/testautomation/graphics/required/includes/global/id_008.inc
@@ -29,9 +29,6 @@
'*
'* short description :
'*
-'******************************************************************
-' #1 tiWindowNewWindow
-' #1 tidWindow123 'wrn:2
'\*****************************************************************
testcase tiWindowNewWindow
diff --git a/testautomation/graphics/required/includes/global/id_009.inc b/testautomation/graphics/required/includes/global/id_009.inc
index 6aa35a1dc23d..bbd9481430ab 100644
--- a/testautomation/graphics/required/includes/global/id_009.inc
+++ b/testautomation/graphics/required/includes/global/id_009.inc
@@ -29,14 +29,7 @@
'*
'* short description : Testcases to test the Help-Menu.
'*
-'***********************************************************************************
-' #1 tmHelpHelpAgent
-' #1 tmHelpTips
-' #1 tmHelpExtendedTips
-' #1 tmHelpAboutStarOffice
-' #1 tmHelpContents
-' #1 tCheckIfTheHelpExists
-'\**********************************************************************************
+'\******************************************************************************
'
testcase tmHelpHelpAgent
diff --git a/testautomation/graphics/required/includes/global/id_011.inc b/testautomation/graphics/required/includes/global/id_011.inc
index 98d574c0f78c..a0e3e680709d 100644
--- a/testautomation/graphics/required/includes/global/id_011.inc
+++ b/testautomation/graphics/required/includes/global/id_011.inc
@@ -29,13 +29,7 @@
'*
'* short description :
'*
-'***********************************************************************************
-' #1 tiTextToolbar
-' #1 tiDrawObjectBar
-' #1 tiGraphicsObjectBar
-' #1 tiGluepointToolbar
-' #1 tdBezierToolbar
-'\**********************************************************************************
+'\******************************************************************************
testcase tiTextToolbar
@@ -1137,12 +1131,15 @@ testcase tdBezierToolbar
'/// Click button 'Delete points' on 'Object Toolbar' ///'
Kontext "Bezierobjectbar"
Printlog "- Break curve"
- try
- Loeschen.Click
- sleep 2
- catch
- warnlog "Delete didn't work... why?"
- endcatch
+ if ( hClickButton( Loeschen ) = -1 ) then
+ warnlog( "Unable to click button <Loeschen>" )
+ endif
+ 'try
+ ' Loeschen.Click
+ ' sleep 2
+ 'catch
+ ' warnlog "Delete didn't work... why?"
+ 'endcatch
'/// Uncheck on the symbol 'Curve' on the toolbar 'Main Toolbar' ///'
Kontext "Toolbar"
diff --git a/testautomation/graphics/required/includes/global/id_opt_1.inc b/testautomation/graphics/required/includes/global/id_opt_1.inc
index 0f0b4bdb9069..6df5ccdfdddf 100644
--- a/testautomation/graphics/required/includes/global/id_opt_1.inc
+++ b/testautomation/graphics/required/includes/global/id_opt_1.inc
@@ -29,12 +29,7 @@
'*
'* short description :
'*
-'**************************************************************************************
-' #1 tToolsOptionsDrawGeneral 'wrn:1
-' #1 tToolsOptionsDrawView
-' #1 tToolsOptionsDrawGrid
-' #1 tToolsOptionsDrawPrint
-'\*************************************************************************************
+'\******************************************************************************
testcase tToolsOptionsDrawGeneral (sApplication as string)
dim irgendwas(9) as boolean
diff --git a/testautomation/graphics/required/includes/global/id_opt_2.inc b/testautomation/graphics/required/includes/global/id_opt_2.inc
index dd01a3522847..6fa722e09dd9 100644
--- a/testautomation/graphics/required/includes/global/id_opt_2.inc
+++ b/testautomation/graphics/required/includes/global/id_opt_2.inc
@@ -29,9 +29,7 @@
'*
'* short description :
'*
-'************************************************************************************
-' #1 tToolsOptionsMeasurementUnit
-'\***********************************************************************************
+'\******************************************************************************
testcase tToolsOptionsMeasurementUnit (sApplication as string)
dim i as integer
diff --git a/testautomation/graphics/required/includes/impress/i_opt_1_.inc b/testautomation/graphics/required/includes/impress/i_opt_1_.inc
index f648ee8b5cd5..ad62c64acf50 100644
--- a/testautomation/graphics/required/includes/impress/i_opt_1_.inc
+++ b/testautomation/graphics/required/includes/impress/i_opt_1_.inc
@@ -29,9 +29,15 @@
'*
'* short description :
'*
-'*******************************************************************
-' #1 tiAlwaysWithCurrentPage
-'\******************************************************************
+'\******************************************************************************
+
+sub i_opt_1_.inc
+
+ call tiAlwaysWithCurrentPage()
+
+end sub
+
+'*******************************************************************************
testcase tiAlwaysWithCurrentPage()
dim i as integer
@@ -40,7 +46,7 @@ testcase tiAlwaysWithCurrentPage()
printlog "Open file 'impdraw\required\input\diashow.od?"
hFileOpen ConvertPath (gTesttoolPath + "graphics\required\input\diashow.odp")
WaitSlot(10000) 'sleep 10
-
+
printlog "Check if the document is writable"
if fIsDocumentWritable = false then
printlog "Make the document writable and check if it's succesfull"
@@ -49,8 +55,8 @@ testcase tiAlwaysWithCurrentPage()
goto endsub
endif
endif
-
- printlog "Test with default option."
+
+ printlog "Test with default option."
printlog "Checking: 'Always with current page' - default"
printlog "Setting Options to start with current page."
@@ -69,7 +75,7 @@ testcase tiAlwaysWithCurrentPage()
if (i<>1) then
warnlog "Presupposition not met. After loading the file not the first slide is up. It is number: " + i
endif
-
+
printlog "Press Key [Page Down] two times to get to slide number three. We are on slide one."
hTypeKeys ("<home><PageDown><PageDown>")
printlog "Start the slideshow with 'Slide Show->Slide Show."
@@ -82,7 +88,7 @@ testcase tiAlwaysWithCurrentPage()
ViewNavigator
endif
printlog "The slideshow has to start on slide 3."
- printlog "running routine for slide 3 and 4."
+ printlog "running routine for slide 3 and 4."
for i = 3 to 4
Kontext "NavigatorDraw"
printlog "Checking for navigator.."
@@ -97,7 +103,7 @@ testcase tiAlwaysWithCurrentPage()
DocumentPresentation.TypeKeys "<pagedown>"
WaitSlot (5000) 'sleep (5)
next i
-
+
printlog "Trying to end presentation with mouseclick on black endscreen."
try
DocumentPresentation.mousedown (50,50,1)
@@ -105,7 +111,7 @@ testcase tiAlwaysWithCurrentPage()
catch
warnlog "TimeOut on pressing mouse button."
endcatch
-
+
printlog "Trying to recognize if slideshow did not end.."
try
gMouseClick 50,50 ' this one works to recognice the not ending !
@@ -174,7 +180,7 @@ testcase tiAlwaysWithCurrentPage()
printlog "Ending running presentation with ESC."
DocumentPresentation.TypeKeys "<ESCAPE>"
endcatch
-
+
Kontext "NavigatorDraw"
printlog "Checking if navigator is open."
if (not NavigatorDraw.exists(5)) then
@@ -183,7 +189,7 @@ testcase tiAlwaysWithCurrentPage()
printlog "Checking if we are on slide 3."
i = fGetSlideNumber()
if (i<>3) then
- warnlog "We are on the wrong slide! Should be 3 but it is: " & i
+ warnlog "We are on the wrong slide! Should be 3 but it is: " & i
endif
printlog "Close the navigator View->Navigator."
diff --git a/testautomation/graphics/required/includes/impress/im_002_.inc b/testautomation/graphics/required/includes/impress/im_002_.inc
index f4741210ce12..bd101e4413f4 100644
--- a/testautomation/graphics/required/includes/impress/im_002_.inc
+++ b/testautomation/graphics/required/includes/impress/im_002_.inc
@@ -31,22 +31,27 @@
'*
'\*****************************************************************
+sub im_002_
+
+ call tiEditDeleteSlide()
+
+end sub
+
+'*******************************************************************************
+
testcase tiEditDeleteSlide
-printlog "open application"
- Call hNewDocument
-printlog "Insert->Slide; press 'OK' "
- InsertSlide
- sleep 2
- hTypekeys "<Pagedown>"
- sleep 2
-printlog "Edit->Delete Slide "
- try
- EditDeleteSlide
- catch
- warnlog "Error when deleting slide"
- endcatch
- Call hCloseDocument
-printlog "close application "
+
+ printlog "open application"
+ Call hNewDocument
+ printlog "Insert->Slide; press 'OK' "
+ InsertSlide
+ WaitSlot( 2000 )
+ hTypekeys "<Pagedown>"
+ printlog "Edit->Delete Slide "
+ hUseAsyncSlot( "EditDeleteSlide" )
+ Call hCloseDocument
+ printlog "close application "
+
endcase
diff --git a/testautomation/graphics/required/includes/impress/im_003_.inc b/testautomation/graphics/required/includes/impress/im_003_.inc
index da2f09187694..87052558b8f9 100644
--- a/testautomation/graphics/required/includes/impress/im_003_.inc
+++ b/testautomation/graphics/required/includes/impress/im_003_.inc
@@ -29,22 +29,30 @@
'*
'* short description : Impress Resource Test: View Menu
'*
-'***********************************************************************************
-' #1 tiViewPanes
-' #1 tiViewMasterView
-' #1 tiViewSlideMaster
-' #1 tiViewToolbar_1
-'\**********************************************************************************
+'\******************************************************************************
+
+sub im_003_
+
+ call tiViewPanes()
+ call tiViewMasterView()
+ call tiViewSlideMaster()
+ call tiViewToolbar_1()
+
+end sub
+
+'*******************************************************************************
+
testcase tiViewPanes
+ qaerrorlog( "This test is disabled, it needs rewriting" )
goto endsub 'TODO WG, tiViewPanes outcommented due to reconstruction of test
dim bState as boolean
printlog "open application "
Call hCloseDocument
Call hNewDocument
- sleep 1
+
kontext "Tasks"
- if (NOT Tasks.exists) then
+ if ( not Tasks.exists( 2 ) ) then
warnlog "Tasks Panel not visible on opening application. Opening now."
ViewTaskPane
endif
@@ -110,7 +118,7 @@ testcase tiViewPanes
endif
catch
warnlog "View->Slide Pane couldn't get executed"
- endcatch
+ endcatch
printlog "Reactivate all pages in the Task-panel "
kontext "Tasks"
@@ -120,131 +128,141 @@ testcase tiViewPanes
hMenuSelectNr (3)
View.OpenMenu
hMenuSelectNr (4)
-
+
endcase 'tiViewPanes
'---------------------------------------------------------
testcase tiViewMasterView
printlog "open application"
Call hNewDocument
+
printlog "View->Master View->Drawing View"
- sleep 1
- ViewWorkspaceDrawingView
- sleep 5
+ hUseAsyncSlot( "ViewWorkspaceDrawingView" )
+
printlog "View->Master View->Outline View "
- ViewWorkspaceOutlineView
- sleep 1
+ hUseAsyncSlot( "ViewWorkspaceOutlineView" )
+
printlog "View->Master View->Slides View "
- ViewWorkspaceSlidesView
- sleep 1
+ hUseAsyncSlot( "ViewWorkspaceSlidesView" )
+
printlog "View->Master View->Notes View "
- ViewWorkspaceNotesView
- sleep 1
+ hUseAsyncSlot( "ViewWorkspaceNotesView" )
+
printlog "View->Master View->Handout View "
- ViewWorkspaceHandoutView
- sleep 1
+ hUseAsyncSlot( "ViewWorkspaceHandoutView" )
+
printlog "View->Master View->Drawing View "
- ViewWorkspaceDrawingView
+ hUseAsyncSlot( "ViewWorkspaceDrawingView" )
+
printlog "close application "
- sleep 1
Call hCloseDocument
-
+
endcase 'tiViewMasterView
'---------------------------------------------------------
testcase tiViewSlideMaster
-
+
printlog "open application with : File->Autopilot->Presentation; OK; OK "
FileAutopilotPresentation ' to get a title :-)
- sleep 2
Kontext "AutopilotPraesentation1"
- AutopilotPraesentation1.Ok
- sleep 1
+ if ( AutopilotPraesentation1.exists( 2 ) ) then
+ hCloseDialog( AutopilotPraesentation1, "ok" )
+ else
+ warnlog( "Dialog <AutopilotPraesentation1> did not open" )
+ endif
Kontext "Seitenlayout" ' aka: Modify Slide
- if Seitenlayout.exists(5) then
+
+ if ( Seitenlayout.exists( 5 ) ) then
warnlog "Slidelayout has to vanish; moved to sidebar"
- Seitenlayout.OK
+ hCloseDialog( Seitenlayout, "ok" )
endif
+
kontext "DocumentImpress"
- sleep 1
printlog "View->Slide "
- ViewSlide
- Sleep 1
+ hUseAsyncSlot( "ViewSlide" )
+
printlog "View->Master->Drawing "
- ViewDrawing
- Sleep 1
+ hUseAsyncSlot( "ViewDrawing" )
+
printlog "View->Slide "
- ViewSlide
- Sleep 1
+ hUseAsyncSlot( "ViewSlide" )
+
printlog "View->Master->Title "
try
- ViewTitle
- Errorlog "View - Master - Title Slide Master should NOT be accessable"
+ ViewTitle
+ Errorlog "View - Master - Title Slide Master should NOT be accessable"
catch
- printlog "View - Master - Title Slide Master not accessable - good"
+ printlog "View - Master - Title Slide Master not accessable - good"
endcatch
- Sleep 1
+
printlog "View->Slide "
- ViewSlide
- Sleep 1
+ hUseAsyncSlot( "ViewSlide" )
+
printlog "View->Master->Handout "
- ViewHandout
- Sleep 1
- ' ViewSlide
- Sleep 1
+ hUseAsyncSlot( "ViewHandout" )
+
printlog "View->Master->Notes "
- ViewNotes
+ hUseAsyncSlot( "ViewNotes" )
kontext "DocumentImpress"
- Sleep 1
+
printlog "View->Slide "
- ViewSlide
- Sleep 1
+ hUseAsyncSlot( "ViewSlide" )
+
printlog "close application "
Call hCloseDocument
-
+
endcase 'tiViewSlideMaster
'--------------------------------------------------------
testcase tiViewToolbar_1
-
- Dim Zaehler as integer
- Dim i as integer
-
+
+ const DEFAULT_DELAY = 3
+
+ Dim NumberOfGraphicModes as integer
+ Dim iCurrentGraphicsMode as integer
+
+ dim TestFile as string
+ TestFile = ConvertPath (gTesttoolPath + "global\input\graf_inp\desp.bmp")
+
printlog "open application "
Call hNewDocument
- sleep 2
+
printlog "Insert->Graphic... : global\input\graf_inp\desp.bmp "
- InsertGraphicsFromFile
- sleep 2
+ hUseAsyncSlot( "InsertGraphicsFromFile" )
+
Kontext "GrafikEinfuegenDlg"
- sleep 1
- Dateiname.SetText ConvertPath (gTesttoolPath + "global\input\graf_inp\desp.bmp")
- sleep 1
- Oeffnen.Click
- sleep 3
- Kontext "Messagebox"
- if Messagebox.Exists then
- Warnlog Messagebox.GetText
- Messagebox.OK
- end if
- Kontext "DocumentImpress"
- printlog "select graphic "
- hTypeKeys "<TAB>", 3
- sleep 2
- Kontext "GraphicObjectbar"
- sleep 1
- printlog "The Graphics Toolbar has to be visible now; If not -> ERROR "
- if GraphicObjectbar.Exists Then
- Printlog "- graphic object toolbar exists"
- Zaehler=Grafikmodus.GetItemCount
- for i = 1 to Zaehler
- Printlog "- access all controls in the toolbar (" +i+"/"+Zaehler+")"
- Grafikmodus.Select i
- sleep 3
- next i
- sleep 3
+ if ( GrafikEinfuegenDlg.exists( DEFAULT_DELAY ) ) then
+ Dateiname.SetText( TestFile )
+ Oeffnen.Click
+
+ Kontext "Messagebox"
+ if ( Messagebox.Exists( DEFAULT_DELAY ) ) then
+ Warnlog Messagebox.GetText
+ hCloseDialog( Messagebox, "ok" )
+ end if
+
+ Kontext "DocumentImpress"
+ printlog "select graphic "
+ hUseAsyncSlot( "EditSelectAll" )
+
+ Kontext "GraphicObjectbar"
+ printlog "The Graphics Toolbar has to be visible now; If not -> ERROR "
+ if ( GraphicObjectbar.Exists( DEFAULT_DELAY ) ) Then
+
+ Printlog "- graphic object toolbar exists"
+ NumberOfGraphicModes=Grafikmodus.GetItemCount
+
+ for iCurrentGraphicsMode = 1 to NumberOfGraphicModes
+ Printlog( "- access all controls in the toolbar (" & iCurrentGraphicsMode & "/" & NumberOfGraphicModes & ")" )
+ Grafikmodus.Select( iCurrentGraphicsMode )
+ sleep ( DEFAULT_DELAY )
+ next iCurrentGraphicsMode
+ else
+ Warnlog "- No graphic function toolbar visible"
+ end if
else
- Warnlog "- No graphic function toolbar visible"
- end if
+ warnlog( "Insert Graphics dialog did not open" )
+ endif
+
printlog "close application "
Call hCloseDocument
-
+
endcase 'tiViewToolbar_1
diff --git a/testautomation/graphics/required/includes/impress/im_004_.inc b/testautomation/graphics/required/includes/impress/im_004_.inc
index f33a75f12a19..28f11a778864 100644
--- a/testautomation/graphics/required/includes/impress/im_004_.inc
+++ b/testautomation/graphics/required/includes/impress/im_004_.inc
@@ -31,26 +31,34 @@
'*
'\*****************************************************************
+sub im_004_
+
+ call tiInsertSlideExpandSummary()
+
+end sub
+
+'*******************************************************************************
+
testcase tiInsertSlideExpandSummary
-printlog "open application "
- Call hNewDocument
-printlog "View->Master View->Outline View "
- ViewWorkspaceOutlineView
- Sleep 1
- Kontext "DocumentImpressOutlineView"
-printlog "Type 2 rows "
- DocumentImpressOutlineView.TypeKeys "Herbert<Return>Rudi"
-printlog "View->Master View->Drawing View "
- ViewWorkspaceDrawingView
- Sleep 1
-printlog "Insert->Summery Slide "
- InsertSummerySlide
- Sleep 1
-printlog "Insert->Expand Slide "
- InsertExpandSlide
- Sleep 2
-printlog "close application "
- Call hCloseDocument
+ printlog "open application "
+ Call hNewDocument
+ printlog "View->Master View->Outline View "
+ ViewWorkspaceOutlineView
+ WaitSlot()
+ Kontext "DocumentImpressOutlineView"
+ printlog "Type 2 rows "
+ DocumentImpressOutlineView.TypeKeys "Herbert<Return>Rudi"
+ printlog "View->Master View->Drawing View "
+ ViewWorkspaceDrawingView
+ WaitSlot()
+ printlog "Insert->Summery Slide "
+ InsertSummerySlide
+ WaitSlot()
+ printlog "Insert->Expand Slide "
+ InsertExpandSlide
+ WaitSlot( 3000 )
+ printlog "close application "
+ Call hCloseDocument
endcase
diff --git a/testautomation/graphics/required/includes/impress/im_005_.inc b/testautomation/graphics/required/includes/impress/im_005_.inc
index b651dcea9cae..5a8b9fb9a518 100644
--- a/testautomation/graphics/required/includes/impress/im_005_.inc
+++ b/testautomation/graphics/required/includes/impress/im_005_.inc
@@ -31,19 +31,33 @@
'*
'\*****************************************************************
+sub im_005_
+
+ call tiFormatModifyLayout()
+
+end sub
+
+'*******************************************************************************
+
testcase tiFormatModifyLayout
printlog "open application "
Call hNewDocument
- printlog "Impress: Format->Modify Layout "
- printlog "Draw : kontext menu: Slide-> Modify Slide (always disabled :-( ?"
- FormatPage
+
+ printlog( "Format/Page" )
+ FormatPage
+
Kontext "SeitenLayout"
- DialogTest ( SeitenLayout )
- sleep 1
- printlog "cancel dialog 'Page Setup' "
- SeitenLayout.Cancel
- printlog "close application "
+ if ( SeitenLayout.exists( 2 ) ) then
+ DialogTest ( SeitenLayout )
+
+ printlog "cancel dialog 'Page Setup' "
+ hCloseDialog( SeitenLayout, "Cancel" )
+ else
+ warnlog( "Dialog <SeitenLayout> did not open" )
+ endif
+
+ printlog "close application"
Call hCloseDocument
-
+
endcase 'tiFormatModifyLayout
diff --git a/testautomation/graphics/required/includes/impress/im_007_.inc b/testautomation/graphics/required/includes/impress/im_007_.inc
index 7248b0a2eca5..9d4860a0ba56 100644
--- a/testautomation/graphics/required/includes/impress/im_007_.inc
+++ b/testautomation/graphics/required/includes/impress/im_007_.inc
@@ -31,6 +31,21 @@
'*
'\*****************************************************************
+sub im_007_
+
+ call tSlideShowSlideShow()
+ call tSlideShowRehearseTimings()
+ call tSlideShowSlideShowSettings()
+ call tSlideShowCustomSlideShow()
+ call tSlideShowSlideTransition()
+ call tSlideShowShowHideSlide()
+ call tSlideShowCustomAnimation()
+ call tSlideShowInteraction()
+
+end sub
+
+'*******************************************************************************
+
testcase tSlideShowSlideShow
printlog "open application "
@@ -65,22 +80,22 @@ testcase tSlideShowSlideShow
DocumentImpress.MouseDoubleClick ( 50, 50 )
Sleep 3
catch
-' FileClose
+ ' FileClose
warnlog "had to catch <the ball> :-( "
-' Kontext "Messagebox"
-' if Messagebox.Exists (5) Then Messagebox.No
-' Kontext
-' sleep (12)
-' start sAppExe$
-' sleep (6)
-' Kontext
-' if Office.Exists(2) then Resetapplication
-' Warnlog "Slide didn't end, application wasn't in document edit mode"
+ ' Kontext "Messagebox"
+ ' if Messagebox.Exists (5) Then Messagebox.No
+ ' Kontext
+ ' sleep (12)
+ ' start sAppExe$
+ ' sleep (6)
+ ' Kontext
+ ' if Office.Exists(2) then Resetapplication
+ ' Warnlog "Slide didn't end, application wasn't in document edit mode"
endcatch
printlog "close application "
Call hCloseDocument
- endcase 'tSlideShowSlideShow
+endcase 'tSlideShowSlideShow
'-------------------------------------------------------------------------------
testcase tSlideShowRehearseTimings
@@ -99,32 +114,32 @@ testcase tSlideShowRehearseTimings
sleep 2
Kontext "DocumentPresentation"
printlog "Press <Esc> to leave presentation mode "
- if DocumentPresentation.Exists (5) then
- DocumentPresentation.Typekeys ("<Escape>")
- else
- Warnlog "SlideShowRehearseTimings mode not accessible"
- endif
- Sleep 3
- if DocumentPresentation.Exists then ' the kontext hasnt to be available, else ERROR
- DocumentPresentation.TypeKeys "<ESCAPE>" ' => I mustn't be here ever !
- Warnlog "- Slide show mode should have ended"
- else
- printlog "SlideShowRehearseTimings mode not accessible :-) "
- end if
- sleep 3
- try
- Kontext "DocumentImpress"
- DocumentImpress.MouseDoubleClick ( 50, 50 )
+ if DocumentPresentation.Exists (5) then
+ DocumentPresentation.Typekeys ("<Escape>")
+ else
+ Warnlog "SlideShowRehearseTimings mode not accessible"
+ endif
+ Sleep 3
+ if DocumentPresentation.Exists then ' the kontext hasnt to be available, else ERROR
+ DocumentPresentation.TypeKeys "<ESCAPE>" ' => I mustn't be here ever !
+ Warnlog "- Slide show mode should have ended"
+ else
+ printlog "SlideShowRehearseTimings mode not accessible :-) "
+ end if
+ sleep 3
+ try
+ Kontext "DocumentImpress"
+ DocumentImpress.MouseDoubleClick ( 50, 50 )
- sleep 3
- catch
- warnlog "Had to catch <the ball> :-( "
- endcatch
+ sleep 3
+ catch
+ warnlog "Had to catch <the ball> :-( "
+ endcatch
sleep 3
printlog "close application "
Call hCloseDocument
- endcase 'tSlideShowRehearseTimings
+endcase 'tSlideShowRehearseTimings
'-------------------------------------------------------------------------------
testcase tSlideShowSlideShowSettings
@@ -171,11 +186,11 @@ testcase tSlideShowSlideShowSettings
Bildschirmpraesentation.Cancel
printlog "close application "
Call hCloseDocument
-
+
endcase 'tSlideShowSlideShowSettings
'-------------------------------------------------------------------------------
testcase tSlideShowCustomSlideShow
-
+
printlog "open application "
Call hNewDocument
sleep 2
@@ -225,36 +240,36 @@ testcase tSlideShowCustomSlideShow
printlog "close dialog 'Custom Slide Shows' "
' IndividuellePraesentation.Close ' slide show ends dialog !
printlog "Slide Show->Slide Show Settings "
- try
- SlideShowPresentationSettings
- catch
- warnlog "Presentation did not end :-("
- DocumentPresentation.TypeKeys "<escape>"
- endcatch
- Kontext "Bildschirmpraesentation"
- if Bildschirmpraesentation.exists (5) then
- printlog "check checkbox 'Custom Slide Show' "
- RangeCustomSlideShow.Check
- printlog "check: '" + IndividuellePraesentationName.GetSelText + "'"
- printlog "cancel dialog 'Slide Show' "
- Bildschirmpraesentation.Cancel
- else
- warnlog "Dialog not open? SlideShowPresentationSettings"
- endif
- printlog "Slide Show->Custom Slide Show "
- SlideShowCustomSlideshow
- Kontext "IndividuellePraesentation"
- if (IndividuellePraesentation.exists (5)) then
- printlog "click button 'Delete' "
- Loeschen.Click
- printlog "close dialog 'Custom Slide Shows' "
- IndividuellePraesentation.Close
- else
- warnlog "Dialog not open? SlideShowCustomSlideshow"
- endif
- printlog "close application "
- Call hCloseDocument
-
+ try
+ SlideShowPresentationSettings
+ catch
+ warnlog "Presentation did not end :-("
+ DocumentPresentation.TypeKeys "<escape>"
+ endcatch
+ Kontext "Bildschirmpraesentation"
+ if Bildschirmpraesentation.exists (5) then
+ printlog "check checkbox 'Custom Slide Show' "
+ RangeCustomSlideShow.Check
+ printlog "check: '" + IndividuellePraesentationName.GetSelText + "'"
+ printlog "cancel dialog 'Slide Show' "
+ Bildschirmpraesentation.Cancel
+ else
+ warnlog "Dialog not open? SlideShowPresentationSettings"
+ endif
+ printlog "Slide Show->Custom Slide Show "
+ SlideShowCustomSlideshow
+ Kontext "IndividuellePraesentation"
+ if (IndividuellePraesentation.exists (5)) then
+ printlog "click button 'Delete' "
+ Loeschen.Click
+ printlog "close dialog 'Custom Slide Shows' "
+ IndividuellePraesentation.Close
+ else
+ warnlog "Dialog not open? SlideShowCustomSlideshow"
+ endif
+ printlog "close application "
+ Call hCloseDocument
+
endcase 'tSlideShowCustomSlideShow
'------------------------------------------------------------------------------
testcase tSlideShowSlideTransition
@@ -273,95 +288,95 @@ testcase tSlideShowSlideTransition
sleep 2
printlog "The 'Slide Transition' in the right 'Tasks' Pane has to come up "
Kontext "Tasks"
- printlog "Select the second entry from teh Listbox 'Applay to selected slides' "
- TransitionApplyToSelectedSlide.select (2)
- sleep 5 ' takes some time, until it is run
- Printlog "Count of effects : "+TransitionApplyToSelectedSlide.GetItemCount
- Printlog "Count of Speeds : "+TransitionSpeed.GetItemCount
- iCount = TransitionSound.GetItemCount
- Printlog "Count of Sounds : " + iCount
+ printlog "Select the second entry from teh Listbox 'Applay to selected slides' "
+ TransitionApplyToSelectedSlide.select (2)
+ sleep 5 ' takes some time, until it is run
+ Printlog "Count of effects : "+TransitionApplyToSelectedSlide.GetItemCount
+ Printlog "Count of Speeds : "+TransitionSpeed.GetItemCount
+ iCount = TransitionSound.GetItemCount
+ Printlog "Count of Sounds : " + iCount
- printlog "One Entry of the Listbox 'Sound' is 'Other sound...', select it "
- TransitionSound.typeKeys "<home>"
- i = 0
- for a = 1 to iCount
- TransitionSound.select (a)
- kontext "OeffnenDlg"
- if (OeffnenDlg.exists (5)) then
- if (0=i) then
- ' remember when dialog came up
- i = a
- OeffnenDlg.cancel
- else
- warnlog "File Open Dialog comes up a second time!"
- OeffnenDlg.cancel
- endif
- endif
- kontext "Tasks"
- ' the Checkbox is disabled on teh first three entries: <No Sound>, <Stop previous sound>...
- if (TransitionLoopUntilNextSound.isEnabled AND (a<4)) then
- qaErrorLog "May be Language specific -> Evaluation of TBO; " + a
- endif
- next a
- TransitionSound.select (i)
- printlog "The dialog 'Open' comes up"
- sleep 1
+ printlog "One Entry of the Listbox 'Sound' is 'Other sound...', select it "
+ TransitionSound.typeKeys "<home>"
+ i = 0
+ for a = 1 to iCount
+ TransitionSound.select (a)
kontext "OeffnenDlg"
if (OeffnenDlg.exists (5)) then
- printlog "Read all entries in Listbox 'File type' "
- for i = 1 to Dateityp.getItemCount
- printlog "" + i + ":" + Dateityp.getItemText(i)
- next i
- printlog "cancel dialog 'Open' "
- OeffnenDlg.cancel
- else
- warnlog "Impress:Tasks Pane:Slide Transition:Sound:Other sound... disdn't bring up teh File Open Dialog!"
+ if (0=i) then
+ ' remember when dialog came up
+ i = a
+ OeffnenDlg.cancel
+ else
+ warnlog "File Open Dialog comes up a second time!"
+ OeffnenDlg.cancel
+ endif
endif
kontext "Tasks"
- sleep (2)
- printlog "check checkbox 'Automatically after' "
- TransitionAutomaticallyAfter.check
- sleep (2)
- printlog "press key 'Page Up' in box "
- TransitionAutomaticallyAfterTime.typeKeys "<PageUp>"
- sleep 9
- printlog "check the standard checkbox 'On mouse click' "
- TransitionOnMouseClick.check
- sleep (2)
- printlog "press button 'Apply to All Slides' "
- TransitionApplyToAllSlides.click
- sleep (2)
- printlog "press button 'Play' "
- TransitionPlay.click
- sleep 10
- printlog "press button 'Slide Show' "
- TransitionSlideShow.click
- sleep 2
- kontext "DocumentPresentation"
- if DocumentPresentation.exists (10) then
- printlog "Presentation started :-)"
- DocumentPresentation.typeKeys "<escape>"
- else
- warnlog "Impress:Tasks Pane:Slide Transition:Slide Show button doesn't start slideshow!"
+ ' the Checkbox is disabled on teh first three entries: <No Sound>, <Stop previous sound>...
+ if (TransitionLoopUntilNextSound.isEnabled AND (a<4)) then
+ qaErrorLog "May be Language specific -> Evaluation of TBO; " + a
endif
- kontext "Tasks"
+ next a
+ TransitionSound.select (i)
+ printlog "The dialog 'Open' comes up"
+ sleep 1
+ kontext "OeffnenDlg"
+ if (OeffnenDlg.exists (5)) then
+ printlog "Read all entries in Listbox 'File type' "
+ for i = 1 to Dateityp.getItemCount
+ printlog "" + i + ":" + Dateityp.getItemText(i)
+ next i
+ printlog "cancel dialog 'Open' "
+ OeffnenDlg.cancel
+ else
+ warnlog "Impress:Tasks Pane:Slide Transition:Sound:Other sound... disdn't bring up teh File Open Dialog!"
+ endif
+ kontext "Tasks"
+ sleep (2)
+ printlog "check checkbox 'Automatically after' "
+ TransitionAutomaticallyAfter.check
+ sleep (2)
+ printlog "press key 'Page Up' in box "
+ TransitionAutomaticallyAfterTime.typeKeys "<PageUp>"
+ sleep 9
+ printlog "check the standard checkbox 'On mouse click' "
+ TransitionOnMouseClick.check
+ sleep (2)
+ printlog "press button 'Apply to All Slides' "
+ TransitionApplyToAllSlides.click
+ sleep (2)
+ printlog "press button 'Play' "
+ TransitionPlay.click
+ sleep 10
+ printlog "press button 'Slide Show' "
+ TransitionSlideShow.click
+ sleep 2
+ kontext "DocumentPresentation"
+ if DocumentPresentation.exists (10) then
+ printlog "Presentation started :-)"
+ DocumentPresentation.typeKeys "<escape>"
+ else
+ warnlog "Impress:Tasks Pane:Slide Transition:Slide Show button doesn't start slideshow!"
+ endif
+ kontext "Tasks"
- printlog "uncheck and check Checkbox 'Automatic Preview' "
- printlog "default is checked "
- if (NOT TransitionAutomaticPreview.isChecked) then
- warnlog "Impress:Tasks Pane:Slide Transition: Automatic preview has to be checked by default, wasn't!"
- endif
- sleep (2)
- TransitionAutomaticPreview.unCheck
- sleep (2)
- TransitionAutomaticPreview.Check
+ printlog "uncheck and check Checkbox 'Automatic Preview' "
+ printlog "default is checked "
+ if (NOT TransitionAutomaticPreview.isChecked) then
+ warnlog "Impress:Tasks Pane:Slide Transition: Automatic preview has to be checked by default, wasn't!"
+ endif
+ sleep (2)
+ TransitionAutomaticPreview.unCheck
+ sleep (2)
+ TransitionAutomaticPreview.Check
printlog "close application "
Call hCloseDocument
-
+
endcase 'tSlideShowSlideTransition
'-------------------------------------------------------------------------------
testcase tSlideShowShowHideSlide
-
+
printlog "open application "
Call hNewDocument
printlog "create rectangle "
@@ -376,9 +391,9 @@ testcase tSlideShowShowHideSlide
SlideShowShowSlide
printlog "close application "
Call hCloseDocument
- endcase
-
- testcase tSlideShowAnimation
+endcase
+
+testcase tSlideShowAnimation
printlog "open application "
Call hNewDocument
sleep 1
@@ -431,9 +446,9 @@ testcase tSlideShowShowHideSlide
sleep 5
printlog "click button 'Stop' "
try
- Stopp.Click
+ Stopp.Click
catch
- warnlog "Stopbutton doesn't work"
+ warnlog "Stopbutton doesn't work"
endcatch
sleep 1
printlog "Select 1st entry from top in 'Loop Count' "
@@ -450,9 +465,9 @@ testcase tSlideShowShowHideSlide
kontext "Messagebox"
printlog "there has to be a messagebox 'Really delete?' say YES!; else ERROR "
if Messagebox.exists (5) then
- Messagebox.YES
+ Messagebox.YES
else
- warnlog "No one cares about my data :-( No one asked if all shall be deleted :-( "
+ warnlog "No one cares about my data :-( No one asked if all shall be deleted :-( "
endif
sleep 1
kontext "Animation"
@@ -460,7 +475,7 @@ testcase tSlideShowShowHideSlide
Animation.Close
printlog "close application "
Call hCloseDocument
-
+
endcase 'tSlideShowShowHideSlide
'-------------------------------------------------------------------------------
testcase tSlideShowCustomAnimation
@@ -490,7 +505,7 @@ testcase tSlideShowCustomAnimation
sleep 1
AutomaticPreview.Check
kontext
-
+
printlog "Switch to TabPage: Emphasis"
active.setPage(TabEmphasis)
kontext "TabEmphasis"
@@ -501,129 +516,129 @@ testcase tSlideShowCustomAnimation
warnlog "Impress:Tasks Pane:Custom Animation:TabEmphasis tabPage doesn't work."
endif
kontext
-
- printlog "Switch to TabPage: Exit"
- active.setPage(TabExit)
- kontext "TabExit"
- if TabExit.exists(5) then
- DialogTest(TabExit)
- else
- bError = true
- warnlog "Impress:Tasks Pane:Custom Animation:TabExit tabPage doesn't work."
- endif
- kontext
-
- printlog "Switch to TabPage: Motion Paths"
- active.setPage(TabMotionPaths)
- kontext "TabMotionPaths"
- if TabMotionPaths.exists(5) then
- DialogTest(TabMotionPaths)
- Effects.select(7)
- else
- bError = true
- warnlog "Impress:Tasks Pane:Custom Animation:TabMotionPaths tabPage doesn't work."
- endif
- kontext
- '-----------------------------------------------------------------------
- 'printlog "Switch to tabpage: Misc Effects"
- 'active.setPage(TabMiscEffects)
- 'kontext "TabMiscEffects"
- 'if TabMiscEffects.exists(5) then
- ' DialogTest(TabMiscEffects)
- 'else
- ' bError = true
- ' warnlog "Impress:TaskPane:CustomAnimation:TabMiscEffects tabPage does not work."
- 'endif
- 'kontext
- '-----------------------------------------------------------------------
- printlog "Close dialog 'Custom Animation' with 'OK'"
- TabMotionPaths.OK
- bError = false
+
+ printlog "Switch to TabPage: Exit"
+ active.setPage(TabExit)
+ kontext "TabExit"
+ if TabExit.exists(5) then
+ DialogTest(TabExit)
+ else
+ bError = true
+ warnlog "Impress:Tasks Pane:Custom Animation:TabExit tabPage doesn't work."
+ endif
+ kontext
+
+ printlog "Switch to TabPage: Motion Paths"
+ active.setPage(TabMotionPaths)
+ kontext "TabMotionPaths"
+ if TabMotionPaths.exists(5) then
+ DialogTest(TabMotionPaths)
+ Effects.select(7)
else
bError = true
- warnlog "Impress:Tasks Pane:Custom Animation:Add... button didn't work."
+ warnlog "Impress:Tasks Pane:Custom Animation:TabMotionPaths tabPage doesn't work."
endif
+ kontext
+ '-----------------------------------------------------------------------
+ 'printlog "Switch to tabpage: Misc Effects"
+ 'active.setPage(TabMiscEffects)
+ 'kontext "TabMiscEffects"
+ 'if TabMiscEffects.exists(5) then
+ ' DialogTest(TabMiscEffects)
+ 'else
+ ' bError = true
+ ' warnlog "Impress:TaskPane:CustomAnimation:TabMiscEffects tabPage does not work."
+ 'endif
+ 'kontext
+ '-----------------------------------------------------------------------
+ printlog "Close dialog 'Custom Animation' with 'OK'"
+ TabMotionPaths.OK
+ bError = false
+ else
+ bError = true
+ warnlog "Impress:Tasks Pane:Custom Animation:Add... button didn't work."
+ endif
+ Kontext "Tasks"
+ if (NOT bError) then
+ printlog "click button 'Change...'"
+ EffectChange.click
+ printlog "Dialog 'Custom Animation' comes up"
+ kontext
+ printlog "Switch to TabPage: Entrance"
+ active.setPage(TabEntrance)
+ kontext "TabEntrance"
+ if (NOT TabEntrance.exists(5)) then
+ warnlog "Impress:Tasks Pane:Custom Animation:Change... button didn't work."
+ endif
+ TabEntrance.cancel
Kontext "Tasks"
- if (NOT bError) then
- printlog "click button 'Change...'"
- EffectChange.click
- printlog "Dialog 'Custom Animation' comes up"
- kontext
- printlog "Switch to TabPage: Entrance"
- active.setPage(TabEntrance)
- kontext "TabEntrance"
- if (NOT TabEntrance.exists(5)) then
- warnlog "Impress:Tasks Pane:Custom Animation:Change... button didn't work."
- endif
- TabEntrance.cancel
- Kontext "Tasks"
- EffectStart.getItemCount
- if EffectProperty.isEnabled then
- EffectProperty.getItemCount
- endif
- printlog "Click on button '...' (Options)"
- EffectOptions.click
- kontext "TabEffect"
- if TabEffect.exists(5) then
- dialogTest(TabEffect)
- Sound.getItemCount
- AfterAnimation.getItemCount
- printlog "switch to TabPage 'Timing'"
- Kontext
- active.setPage TabTiming
- kontext "TabTiming"
- if TabTiming.exists(5) then
- dialogTest(TabTiming)
- TimingStart.getItemCount
- Delay.getText
- Speed.getItemCount
- Repeat.getItemCount
- Rewind.ischecked
- TriggerAnimate.isChecked
- TriggerStart.isChecked
- Shape.getItemCount
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
- endif
- printlog "switch to TabPage 'Timing'"
- Kontext
- active.setPage TabTextAnimation
- kontext "TabTextAnimation"
- if TabTextAnimation.exists(5) then
- dialogTest(TabTextAnimation)
- GroupText.getItemCount
- AnimateAttachedShape.isChecked
- TabTextAnimation.cancel
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
- endif
+ EffectStart.getItemCount
+ if EffectProperty.isEnabled then
+ EffectProperty.getItemCount
+ endif
+ printlog "Click on button '...' (Options)"
+ EffectOptions.click
+ kontext "TabEffect"
+ if TabEffect.exists(5) then
+ dialogTest(TabEffect)
+ Sound.getItemCount
+ AfterAnimation.getItemCount
+ printlog "switch to TabPage 'Timing'"
+ Kontext
+ active.setPage TabTiming
+ kontext "TabTiming"
+ if TabTiming.exists(5) then
+ dialogTest(TabTiming)
+ TimingStart.getItemCount
+ Delay.getText
+ Speed.getItemCount
+ Repeat.getItemCount
+ Rewind.ischecked
+ TriggerAnimate.isChecked
+ TriggerStart.isChecked
+ Shape.getItemCount
else
- warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
endif
- Kontext "Tasks"
- EffectSpeed.getItemCount
- EffectList.getItemCount
- EffectPlay.click
- printlog "Wait five seconds so the Playfunction has ended "
- sleep 5
- EffectSlideShow.click
- sleep 1
- kontext "DocumentPresentation"
- if DocumentPresentation.exists (5) then
- printlog "Presentation started :-)"
- DocumentPresentation.typeKeys "<escape>"
+ printlog "switch to TabPage 'Timing'"
+ Kontext
+ active.setPage TabTextAnimation
+ kontext "TabTextAnimation"
+ if TabTextAnimation.exists(5) then
+ dialogTest(TabTextAnimation)
+ GroupText.getItemCount
+ AnimateAttachedShape.isChecked
+ TabTextAnimation.cancel
else
- warnlog "Impress:Tasks Pane:Custom Animation:Slide Show button doesn't start slideshow!"
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
endif
- kontext "Tasks"
- EffectAutomaticPreview.isChecked
- printlog "click button 'Remove'"
- EffectRemove.click
+ else
+ warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
endif
+ Kontext "Tasks"
+ EffectSpeed.getItemCount
+ EffectList.getItemCount
+ EffectPlay.click
+ printlog "Wait five seconds so the Playfunction has ended "
+ sleep 5
+ EffectSlideShow.click
+ sleep 1
+ kontext "DocumentPresentation"
+ if DocumentPresentation.exists (5) then
+ printlog "Presentation started :-)"
+ DocumentPresentation.typeKeys "<escape>"
+ else
+ warnlog "Impress:Tasks Pane:Custom Animation:Slide Show button doesn't start slideshow!"
+ endif
+ kontext "Tasks"
+ EffectAutomaticPreview.isChecked
+ printlog "click button 'Remove'"
+ EffectRemove.click
+ endif
printlog "close application"
Call hCloseDocument
-
+
endcase 'tSlideShowCustomAnimation
'-------------------------------------------------------------------------------
testcase tSlideShowInteraction
@@ -715,5 +730,5 @@ testcase tSlideShowInteraction
sleep 2
printlog "close application "
Call hCloseDocument
-
+
endcase 'tSlideShowInteraction
diff --git a/testautomation/graphics/required/includes/impress/im_011_.inc b/testautomation/graphics/required/includes/impress/im_011_.inc
index 876ca7aa9a56..084be5223b10 100644
--- a/testautomation/graphics/required/includes/impress/im_011_.inc
+++ b/testautomation/graphics/required/includes/impress/im_011_.inc
@@ -31,12 +31,20 @@
'*
'\*****************************************************************
+sub m_011_
+
+ call tiDiaLeiste()
+
+end sub
+
+'*******************************************************************************
+
testcase tiDiaLeiste
-
+
' only in IMPRESS
dim sTemp as string
Dim i,x as integer
-
+
printlog " open application "
Call hNewDocument
sleep 1
@@ -46,7 +54,7 @@ testcase tiDiaLeiste
MitAktuellerSeite.Uncheck
Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.OK
-
+
printlog " insert a graphic: global\input\graf_inp\desp.bmp) "
Printlog "- Insert graphic from file so there is something for the slide mode"
hGrafikEinfuegen ConvertPath (gTesttoolPath + "global\input\graf_inp\desp.bmp")
@@ -66,19 +74,19 @@ testcase tiDiaLeiste
Printlog "- Test blend effect"
Kontext "SlideViewObjectbar" ' CORRECT
sleep 5
-
+
if Ueberblendeffekt.GetItemCount <> 57 then warnlog "these are not 57: " + Ueberblendeffekt.GetItemCount
printlog " select last entry 'Automatic (random)' in listbox 'Slide Effects' on object toolbar "
Ueberblendeffekt.Select (Ueberblendeffekt.GetItemCount)
Printlog " select last effect (random effect): " + Ueberblendeffekt.GetSelText
-
+
' Printlog Geschwindigkeit.GetRT ' 341 listbox
' Printlog Diawechsel.GetRT ' 341 listbox
' Printlog Zeit.GetRT ' 353 spinfield
' Printlog DiasProReihe.GetRT ' 353 spinfield
' Printlog PraesentationMitZeitnahme.GetRT doesn't work, but behave as button
' Printlog DiaAnzeigen.GetRT doesn't work, but behave as button
-
+
'-------------------------------- Geschwindigkeit -----------------------------------------
Printlog "- Check different speed settings"
Kontext "SlideViewObjectbar"
@@ -116,21 +124,21 @@ testcase tiDiaLeiste
sleep 2
Kontext "DocumentPresentation"
if DocumentPresentation.exists (5) then
- sleep 5
- printlog " wait some seconds and click with mouse "
- DocumentPresentation.MouseDown 50,50
- DocumentPresentation.MouseUp 50,50
- sleep 2
- printlog " wait some seconds and click with mouse "
- DocumentPresentation.MouseDown 50,50
- DocumentPresentation.MouseUp 50,50
- sleep 3
+ sleep 5
+ printlog " wait some seconds and click with mouse "
+ DocumentPresentation.MouseDown 50,50
+ DocumentPresentation.MouseUp 50,50
+ sleep 2
+ printlog " wait some seconds and click with mouse "
+ DocumentPresentation.MouseDown 50,50
+ DocumentPresentation.MouseUp 50,50
+ sleep 3
else
- warnlog "Didn't switch into presentation mode :-("
+ warnlog "Didn't switch into presentation mode :-("
endif
Kontext "DocumentPresentation"
if DocumentPresentation.exists (5) then
- warnlog "We are still in presentation mode :-( WHY!!!!???"
+ warnlog "We are still in presentation mode :-( WHY!!!!???"
endif
'------------------------------- Dia anzeigen ja/nein --------------------------------------
Printlog "- Show slide yes/no"
@@ -168,5 +176,5 @@ testcase tiDiaLeiste
printlog " close application "
Call hCloseDocument
sleep 2
-
+
endcase 'tiDiaLeiste
diff --git a/testautomation/graphics/tools/id_tools.inc b/testautomation/graphics/tools/id_tools.inc
index e71c9f7653f0..2940c0f35e3e 100644
--- a/testautomation/graphics/tools/id_tools.inc
+++ b/testautomation/graphics/tools/id_tools.inc
@@ -31,45 +31,6 @@
'*
'\******************************************************************************
-'Functions:
-' #1 hFindSpellHypLanguage
-' #1 GetDecimalSeperator
-' #1 LiberalMeasurement
-' #1 GetMeasUnit
-' #1 StrToDouble
-' #1 fGetPositionX
-' #1 setStartCurrentPage
-' #1 fIsDocumentWritable
-' #1 fIsDocumentWritable
-' #1 fGetSizeXY
-' #1 hCallExport
-' #1 checkexppdfwaitmax10sec
-' #1 fCompareTwoValues
-' #1 fConvertBackslashToSlash
-' #1 hScreenFontAntialiasing
-' #1 fSaveLoadAllFormats
-' #1 setCharacterLanguage
-' #1 toggleGermanSpellchecking
-' #1 sAnalyseContextMenu
-' #1 sLongToBinary
-' #1 sBinaryToLong
-' #1 fGetIntoDictionary
-' #1 hSelectInList
-' #1 hWalkTheStyles2
-' #1 fGetSlideNumber
-' #1 fGetSlideCount
-' #1 fGetSlideName
-' #1 fGetSetPageBackground
-' #1 CreateTextSetEffectAndAngle
-' #1 fGetPresentationStyle
-' #1 hPrepareSearchBUG
-' #1 makeNumOutOfText
-' #1 wIgnorierenlisteLoeschen
-' #1 optionstest
-' #1 optionstest2
-
-
-'\*****************************************************************
function hFindSpellHypLanguage (optional sBooks()) as string
printlog "print all available languages that have a language module"
dim iListLength as integer
@@ -98,8 +59,7 @@ function hFindSpellHypLanguage (optional sBooks()) as string
ModuleBearbeiten.Close
Kontext "ExtrasOptionenDlg"
printlog "close dialog 'Options - '"
- ExtrasOptionenDlg.OK
- sleep 1
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
endif
end function
@@ -109,7 +69,7 @@ function GetDecimalSeperator ( sDummy$ ) as String
printlog "Input : number with fractionmark from 'NumericField' as String "
printlog "+ Output: '.' or ',' as String "
dim i1, i2 as integer
-
+
printlog "get position of fraction mark / get IT"
i1 = instr (sDummy$, ",")
i2 = instr (sDummy$, ".")
@@ -128,10 +88,10 @@ function LiberalMeasurement ( sShould$, sActual$) as Boolean
printlog "+ there are also some rounding errors because of the internal representatio of floating point numbers in computers "
printlog "+ now lets try to get rid of them and have a nicer output in tests... "
printlog " measurement units are defined in http://gsl.openoffice.org/source/browse/gsl/vcl/source/src/units.src "
-
+
dim iTolerance as Double
- LiberalMeasurement = False
+ LiberalMeasurement = False
if (sShould$ = sActual$) then
LiberalMeasurement = True
@@ -143,12 +103,12 @@ function LiberalMeasurement ( sShould$, sActual$) as Boolean
printlog "set factor for liberality"
printlog "took units from http://gsl.openoffice.org/source/browse/gsl/vcl/source/src/units.src"
select case GetMeasUnit(sShould$)
- case "mm", "ミリ", "公厘" : iTolerance = 2.0 '01, 81, 88
- case "cm","センチ","厘米","公分" : iTolerance = 0.5 '01, 81, 86, 88
- case chr$(34) : iTolerance = 2.5
- case "pi","ピクセル" : iTolerance = 2.5 '01, 81
- case "pt", "ポイント" : iTolerance = 2.5 '01, 81
- case "" : iTolerance = 1.5 ' cm is presubposition in old functions
+ case "mm", "ミリ", "公厘" : iTolerance = 2.0 '01, 81, 88
+ case "cm","センチ","厘米","公分" : iTolerance = 0.5 '01, 81, 86, 88
+ case chr$(34) : iTolerance = 2.5
+ case "pi","ピクセル" : iTolerance = 2.5 '01, 81
+ case "pt", "ポイント" : iTolerance = 2.5 '01, 81
+ case "" : iTolerance = 1.5 ' cm is presubposition in old functions
case else
iTolerance = 2.5
qaErrorLog "This Unit is not available in this function. '" + GetMeasUnit(sShould$) + "'"
@@ -156,7 +116,7 @@ function LiberalMeasurement ( sShould$, sActual$) as Boolean
printlog "have to get the measurem unit, cause the offset is different for each"
printlog "!!! val(str()) is important because of double calculating actions !!! #110996#"
if ( val(str(StrToDouble(sShould$)+iTolerance)) >= StrToDouble(sActual$) ) AND (val(str(StrToDouble ( sShould$ )-iTolerance)) <= StrToDouble ( sActual$ )) then
- LiberalMeasurement = True
+ LiberalMeasurement = True
else
LiberalMeasurement = False
end if
@@ -202,52 +162,54 @@ function StrToDouble ( sWert$ ) as Double
printlog "get rid of measure unit, the only single character is '' all others are two chars"
printlog "there was a problem, if there is NO meas.unit!!"
- if (isNumeric (sWert$) = FALSE) then
- if ( StrComp (right (sWert$, 1), chr$(34) ) = 0 ) then
- sDummy$ = Left ( sWert$, Len(sWert$)-1 )
- else
- sDummy$ = Left ( sWert$, Len(sWert$)-2 )
- endif
+ if (isNumeric (sWert$) = FALSE) then
+ if ( StrComp (right (sWert$, 1), chr$(34) ) = 0 ) then
+ sDummy$ = Left ( sWert$, Len(sWert$)-1 )
else
- sDummy$ = sWert$
+ sDummy$ = Left ( sWert$, Len(sWert$)-2 )
endif
+ else
+ sDummy$ = sWert$
+ endif
printlog "get position of fraction mark"
i1 = instr (sDummy$, ",") ' wrong output
i2 = instr (sDummy$, ".")
if i1 > i2 then i = i1 else i = i2
- printlog " in front of decimal seperator:"
- try
- a = val (left (sDummy$,i-1))
- catch
+ printlog " in front of decimal seperator:"
+ try
+ a = val (left (sDummy$,i-1))
+ catch
'printlog sWert$ + ":" + sDummy$ + ":" + i + ":" + i1+ ":" + i2
- endcatch
- printlog "after the decimal seperator"
- n = (len (sDummy$)-i)
- b = val (right (sDummy$, n) )
- c = b * 10 ^ -n
- 'printlog "-------------- :"+sWert$ +" :'"+a+"' :"+n+" :"+b+" :'"+c+"':"
- ' !!! val(str()) is important because of double calculating actions !!! #110996#
- StrToDouble = val(str(a + c))
+ endcatch
+ printlog "after the decimal seperator"
+ n = (len (sDummy$)-i)
+ b = val (right (sDummy$, n) )
+ c = b * 10 ^ -n
+ 'printlog "-------------- :"+sWert$ +" :'"+a+"' :"+n+" :"+b+" :'"+c+"':"
+ ' !!! val(str()) is important because of double calculating actions !!! #110996#
+ StrToDouble = val(str(a + c))
end function
'-------------------------------------------------------------------------------
function fGetPositionX () as string
- fGetPositionX = ""
- try
- ContextPositionAndSize
- catch
- warnlog "couldn't call 'ContextPositionAndSize' no object selected ?"
- endcatch
- kontext
- active.SetPage TabPositionAndSize
- kontext "TabPositionAndSize"
- if TabPositionAndSize.exists (5) then
- fGetPositionX = PositionX.GetText
- TabPositionAndSize.OK
- else
- warnlog "Couldn't switch tab page :-( "
- endif
+ fGetPositionX = ""
+ try
+ ContextPositionAndSize
+
+ kontext
+ active.SetPage TabPositionAndSize
+ kontext "TabPositionAndSize"
+ if ( TabPositionAndSize.exists( 5 ) ) then
+ fGetPositionX = PositionX.GetText()
+ TabPositionAndSize.OK()
+ else
+ warnlog( "Couldn't switch to <TabPositionAndSize>" )
+ endif
+ catch
+ warnlog "couldn't call 'ContextPositionAndSize' no object selected ?"
+ endcatch
+
end function
'-------------------------------------------------------------------------------
@@ -257,173 +219,181 @@ function setStartCurrentPage(optional bState as boolean) as boolean
ToolsOptions
printlog "+ select in section 'Presentation' tabpage 'general' "
hToolsOptions ("IMPRESS","General")
- printlog "+ check the checkbox 'Always with current page' "
- setStartCurrentPage = MitAktuellerSeite.isChecked
- if bState then
- MitAktuellerSeite.Check
- else
- MitAktuellerSeite.UnCheck
- endif
+ printlog "+ check the checkbox 'Always with current page' "
+ setStartCurrentPage = MitAktuellerSeite.isChecked
+ if bState then
+ MitAktuellerSeite.Check
+ else
+ MitAktuellerSeite.UnCheck
+ endif
Kontext "ExtrasOptionenDlg"
printlog "+ close dialog 'Options - Presenation - General' with OK "
- ExtrasOptionenDlg.OK
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
end function
'-------------------------------------------------------------------------------
function fIsDocumentWritable() as boolean
- printlog " check if a document is writeable"
- printlog " <u>parameter:</u>"
- printlog " <u>return:</u>"
- printlog " true if the document is writeable otherwise false"
-
Kontext "Standardbar"
- if Bearbeiten.GetState(2) <> 1 then
- fIsDocumentWritable = false
- else
- fIsDocumentWritable = true
- endif
+ if Bearbeiten.GetState( 2 ) <> 1 then
+ fIsDocumentWritable = false
+ else
+ fIsDocumentWritable = true
+ endif
end function
'-------------------------------------------------------------------------------
function fMakeDocumentWritable() as boolean
- 'make a document is writeable
- 'parameter:</u>
- '<u>return:</u>
- 'true if the document can make writeable otherwise false
+ printlog( "Remove write protection from current file" )
Kontext "Standardbar"
- sleep (1)
- if Bearbeiten.GetState(2) <> 1 then
- Bearbeiten.Click
- Kontext
- if Active.Exists(1) then
- Active.Yes
- fMakeDocumentWritable = true
- else
- warnlog "No messagebox after making document editable?"
- fMakeDocumentWritable = false
- endif
- else
- printlog "Document is allready writable."
+ sleep ( 1 )
+ if Bearbeiten.GetState(2) <> 1 then
+ Bearbeiten.Click
+ Kontext
+ if Active.Exists(1) then
+ Active.Yes
fMakeDocumentWritable = true
+ else
+ warnlog "No messagebox after making document editable?"
+ fMakeDocumentWritable = false
endif
- sleep (1)
+ else
+ printlog "Document is already writable."
+ fMakeDocumentWritable = true
+ endif
+
end function
'-------------------------------------------------------------------------------
-function fGetSizeXY (sX as string, sY as string, bGet as boolean) as Boolean
- dim sTx as string
- dim sTy as string
- dim bReturn as boolean
-
- bReturn = True
- try
- ContextPositionAndSize
- catch
- warnlog "couldn't call 'ContextPositionAndSize' no object selected ?"
- endcatch
- kontext
- active.SetPage TabPositionAndSize
- kontext "TabPositionAndSize"
- if TabPositionAndSize.exists (5) then
- sTx = Width.GetText
- sTy = Height.GetText
- TabPositionAndSize.OK
- else
- warnlog "Couldn't switch tab page :-( "
- endif
- if bGet then ' Get the Values only
- sY = sTy
- sX = sTx
- else ' Get the Values and COMPARE them
- if (LiberalMeasurement (sX,sTx) <> TRUE) then
- warnlog "width is different :-( should: '"+sX+"' is: '"+sTx+"'" + "eventually a result of i35519"
- bReturn = False
- endif
- if (LiberalMeasurement (sY,sTy) <> TRUE) then
- warnlog "hight is different :-( should: '"+sY+"' is: '"+sTy+"'" + "eventually a result of i35519"
- bReturn = False
- endif
- bGet = bReturn
- endif
+function fGetSizeXY (sX as string, sY as string, bRetrieveOnly as boolean) as Boolean
+
+ const RC_FAILURE = -1
+
+ dim sTx as string
+ dim sTy as string
+
+ fGetSizeXY() = True
+
+ if ( hUseAsyncSlot( "ContextPositionAndSize" ) <> RC_FAILURE ) then
+
+ kontext
+ active.SetPage TabPositionAndSize
+
+ kontext "TabPositionAndSize"
+ if ( TabPositionAndSize.exists( 2 ) ) then
+ sTx = Width.GetText()
+ sTy = Height.GetText()
+ hCloseDialog( TabPositionAndSize, "ok" )
+ else
+ warnlog "Couldn't switch tab page :-( "
+ endif
+
+ if ( bRetrieveOnly ) then ' Get the Values only
+ sY = sTy
+ sX = sTx
+ else ' Get the Values and compare them
+ if ( not LiberalMeasurement (sX,sTx) ) then
+ warnlog "width is different :-( should: '"+sX+"' is: '"+sTx+"'" + "eventually a result of i35519"
+ fGetSizeXY() = False
+ endif
+ if (not LiberalMeasurement (sY,sTy) ) then
+ warnlog "hight is different :-( should: '"+sY+"' is: '"+sTy+"'" + "eventually a result of i35519"
+ fGetSizeXY() = False
+ endif
+ endif
+ else
+ warnlog( "Failed to open <Position And Size> dialog" )
+ endif
+
end function
'-------------------------------------------------------------------------
-function hCallExport ( HyWhatsYourName as String , sFilter as String, optional bSelection as boolean ) as Boolean
- hCallExport = TRUE
- Printlog "Will try to select export filter: '" + sFilter + "'" + ""
- try
- FileExport
- catch
- Sleep 10
- Warnlog "It takes to much time to export the graphic (>10 sec.). Please check the problem, maybe it's a bug!"
- FileExport
- endcatch
-
- Sleep (3)
- Kontext "ExportierenDlg"
- try
- Dateityp.Select sFilter
- catch
- Warnlog "'" + sFilter + "' is missing!"
- dim iAll, counter as integer
- iAll = Dateityp.GetItemCount
- printlog " List of entries in the menu:"
- for counter = 1 to iAll
- printlog " " + counter + "/" + iAll + ": " + Dateityp.GetItemText(counter)
- next counter
- hCallExport = FALSE
- ExportierenDlg.Cancel
- exit function
- endcatch
- if ((IsMissing(bSelection) = FALSE) AND (bSelection = TRUE)) then
- sleep 2
- Selektion.Check
- else
- if (Selektion.isEnabled) then
- Selektion.UnCheck
- endif
- endif
-
- if AutomatischeDateinamenserweiterung.Exists then
- QAErrorLog "OBSOLETE: Automatic file extension check-box in file dialog will be removed soon!"
- AutomatischeDateinamenserweiterung.check
- endif
-
- Dateiname.SetText ( HyWhatsYourName )
- sleep 2
- Speichern.Click
- sleep 2
- kontext "AlienWarning"
- if AlienWarning.exists(5) then
- warnlog "#i41983# Alien Warning on export not allowed"
- AlienWarning.OK
- endif
- Kontext "Active"
- if Active.Exists then Active.Yes
- Sleep 3
+function hCallExport ( cFileName as String , sFilter as String, optional bSelection as boolean ) as Boolean
+
+ const RC_FAILURE = -1
+ dim bExportSelectionOnly as boolean
+
+ hCallExport() = false
+
+ printlog( "Exporting file with provided filter" )
+
+ ' Handle infamous optional parameter
+ if ( IsMissing( bSelection ) ) then
+ bExportSelectionOnly = false
+ else
+ bExportSelectionOnly = bSelection
+ endif
+
+ if ( hUseAsyncSlot( "FileExport" ) <> RC_FAILURE ) then
+
+ Kontext "ExportierenDlg"
+ if ( ExportierenDlg.exists( 3 ) ) then
+ try
+ Dateityp.Select sFilter
+
+ if ( selektion.exists() ) then
+ if ( selektion.isEnabled() ) then
+ if ( bExportSelectionOnly ) then
+ selektion.check()
+ else
+ selektion.unCheck()
+ endif
+ else
+ printlog( "Cannot set <seletion>, it is disabled" )
+ endif
+ else
+ if ( bExportSelectionOnly ) then
+ warnlog( "It was requested to export only the current selection but the option is disabled" )
+ endif
+ endif
+
+ AutomatischeDateinamenserweiterung.check()
+ Dateiname.SetText( cFileName )
+ Speichern.Click()
+
+ kontext "AlienWarning"
+ if AlienWarning.exists(5) then
+ warnlog "#i41983# Alien Warning on export not allowed"
+ hCloseDialog( AlienWarning, "ok" )
+ endif
+
+ Kontext "Active"
+ hCloseDialog( Active, "yes,optional" )
+
+ hCallExport = true
+ catch
+ warnlog( "Filter could not be selectd, it might be missing: " & sFilter )
+ hCloseDialog( ExportierenDlg, "cancel" )
+ endcatch
+ else
+ warnlog( "<ExportierenDlg> not open" )
+ endif
+ else
+ warnlog( "Slot <FileExport> is blocked" )
+ endif
+
end function
'-------------------------------------------------------------------------
function checkexppdfwaitmax10sec
- dim i as integer
+ dim i as integer
kontext "Standardbar"
- i = 0
- do
- i = i + 1
- sleep 1
- if (ExportAsPDF.isEnabled = TRUE) then i = 15
- loop while ((i < 15))
- if (ExportAsPDF.isEnabled = FALSE) then
- Warnlog "ExportAsPDF was NOT ok. Waited " + i + " seconds."
- endif
- sleep (3)
+ i = 0
+ do
+ i = i + 1
+ sleep 1
+ if (ExportAsPDF.isEnabled = TRUE) then i = 15
+ loop while ((i < 15))
+ if (ExportAsPDF.isEnabled = FALSE) then
+ Warnlog "ExportAsPDF was NOT ok. Waited " + i + " seconds."
+ endif
+ sleep (3)
end function
'-------------------------------------------------------------------------------
@@ -439,21 +409,21 @@ end function
'-------------------------------------------------------------------------------
function fConvertBackslashToSlash (sInput as string) as string
- dim i as integer
- dim sTemp as string
- dim sI as string
- dim x as integer
-
- sTemp = ""
- x = len (sInput)
- for i = 1 to x
- sI = mid(sInput, i, 1)
- if (sI = "\") then
- sI = "/"
- endif
- sTemp = sTemp + sI
- next i
- fConvertBackslashToSlash = sTemp
+ dim i as integer
+ dim sTemp as string
+ dim sI as string
+ dim x as integer
+
+ sTemp = ""
+ x = len (sInput)
+ for i = 1 to x
+ sI = mid(sInput, i, 1)
+ if (sI = "\") then
+ sI = "/"
+ endif
+ sTemp = sTemp + sI
+ next i
+ fConvertBackslashToSlash = sTemp
end function
'-------------------------------------------------------------------------------
@@ -477,13 +447,13 @@ function fSaveLoadAllFormats (NewFileDir as String)
Dim iFileTypeCounter as Integer
Dim SavedFile(30) as String
Dim iCounter as Integer
-
+
printlog "Save the document in different formats..."
FileSaveAs
kontext "ExportierenDlg"
For iFileTypeCounter = 1 to Dateityp.GetItemCount
sleep (1)
- if iFileTypeCounter > 1 then
+ if iFileTypeCounter > 1 then
WaitSlot (2000)
FileSaveAs
kontext "ExportierenDlg"
@@ -524,38 +494,38 @@ function setCharacterLanguage(sLanguage as string) as boolean
Kontext
Messagebox.SetPage TabFont
kontext "TabFont"
- sleep 1
- printlog "sLanguage = " + sLanguage
- if (bAsianLan) then 'Eastern languages 'OR
- try
- printlog "LanguageWest.GetSelText = " + LanguageWest.GetSelText
- LanguageWest.select (sLanguage) 'East
- catch
- printlog "Language.GetSelText = " + Language.GetSelText
- Language.select (sLanguage) 'East
- endcatch
+ sleep 1
+ printlog "sLanguage = " + sLanguage
+ if (bAsianLan) then 'Eastern languages 'OR
+ try
+ printlog "LanguageWest.GetSelText = " + LanguageWest.GetSelText
+ LanguageWest.select (sLanguage) 'East
+ catch
+ printlog "Language.GetSelText = " + Language.GetSelText
+ Language.select (sLanguage) 'East
+ endcatch
- setCharacterLanguage = TRUE
- elseif (iSprache = 07) then
+ setCharacterLanguage = TRUE
+ elseif (iSprache = 07) then
+ printlog "LanguageWest.GetSelText = " + LanguageWest.GetSelText
+ LanguageWest.select (sLanguage)
+ else
+ try
printlog "LanguageWest.GetSelText = " + LanguageWest.GetSelText
LanguageWest.select (sLanguage)
- else
- try
- printlog "LanguageWest.GetSelText = " + LanguageWest.GetSelText
- LanguageWest.select (sLanguage)
- catch
- printlog "Language.GetSelText = " + Language.GetSelText
- Language.select (sLanguage)
- endcatch
- setCharacterLanguage = TRUE
- end if
+ catch
+ printlog "Language.GetSelText = " + Language.GetSelText
+ Language.select (sLanguage)
+ endcatch
+ setCharacterLanguage = TRUE
+ end if
TabFont.Ok
sleep 1
end function
'-------------------------------------------------------------------------------
function toggleGermanSpellchecking as string
-
+
printlog " activate old german spellchecking "
printlog "+ Tools->Options "
ToolsOptions
@@ -615,23 +585,23 @@ function sAnalyseContextMenu(iItems as integer, optional iError as long) as inte
printlog " If the string vnd.sun.search:SubMenu (the SunSearch-menu) is found in the menu, we'll skip that word. "
- 'Get first entry.
+ 'Get first entry.
f = MenuGetItemCommand (MenuGetItemID (1))
printlog "f = '" + f + "'."
'If it's "vnd.sun.search:SubMenu" , then skip the word. Printlog "Word not underlined, Search-Toolbar active."
- if f <> "vnd.sun.search:SubMenu" then
+ if f <> "vnd.sun.search:SubMenu" then
try ' WorkAround ##
editcopy
sCandidates(2) = getClipboardText()
- ' printlog "******************* " + getclipboardtext()
+ ' printlog "******************* " + getclipboardtext()
catch
sCandidates(2) = ""
- ' printlog "###################################################"
+ ' printlog "###################################################"
endcatch
' if (1) is different from nonempty (2) then the wrong word is selected
if (sCandidates(1) <> sCandidates(2)) then
if ("" <> sCandidates(2)) then
- ' printlog "############ " + sCandidates(1) + " ################## " + sCandidates(2) + " #####################"
+ ' printlog "############ " + sCandidates(1) + " ################## " + sCandidates(2) + " #####################"
bDifferent = TRUE
iError1 = iError1 + (2^i)
else
@@ -639,7 +609,7 @@ function sAnalyseContextMenu(iItems as integer, optional iError as long) as inte
' no word is selected... a) not underlined b) no context menu open
end if
else
- ' printlog "******************* " + sCandidates(1)
+ ' printlog "******************* " + sCandidates(1)
bDifferent = FALSE
end if
' check if context menu opened
@@ -652,11 +622,11 @@ function sAnalyseContextMenu(iItems as integer, optional iError as long) as inte
bNoContextMenu = true
iError2 = iError2 + (2^i)
' in writer it would work... :-( #i23568#
- ' warnlog ""+i+" C: " + x + ";------ " + getClipboardText + " -------- "
+ ' warnlog ""+i+" C: " + x + ";------ " + getClipboardText + " -------- "
endcatch
' if context menu open do....
if (not bNoContextMenu) then
- ' printlog ""+i+" C: " + x + ";------ " + getClipboardText + " -------- " + hMenuItemGetText(1)
+ ' printlog ""+i+" C: " + x + ";------ " + getClipboardText + " -------- " + hMenuItemGetText(1)
printlog " analyze context menu entries "
for y = 1 to x
z = hMenuGetItemId(y)
@@ -668,12 +638,12 @@ function sAnalyseContextMenu(iItems as integer, optional iError as long) as inte
printlog " close Context Menu "
if (iSlot <> 10456) then
if (not bDifferent) then ' WorkAround ##
- ' qaerrorlog "" + iSlot + " UNDERLINED"
+ ' qaerrorlog "" + iSlot + " UNDERLINED"
iTemp = iTemp + (2^i)
end if
call hMenuClose()
else
- ' printlog "" + iSlot + " not underlined"
+ ' printlog "" + iSlot + " not underlined"
'InsertSpecialCharacterDraw
hMenuSelectNr(iSpecialCharacterEntry) ' because of bug #112919#
kontext "Sonderzeichen"
@@ -756,20 +726,20 @@ function fGetIntoDictionary as boolean
dim bFound as boolean
dim iBooks as integer
dim i as integer
-
+
iBooks = Benutzerwoerterbuch.GetItemCount
i=0
bFound=TRUE
while (bFound AND (i < iBooks))
- inc i
- Benutzerwoerterbuch.select i
- printlog Benutzerwoerterbuch.getSelText + i
- try
- Bearbeiten.Click
- bFound = FALSE
- catch
- printLog "wIgLi" + i
- endcatch
+ inc i
+ Benutzerwoerterbuch.select i
+ printlog Benutzerwoerterbuch.getSelText + i
+ try
+ Bearbeiten.Click
+ bFound = FALSE
+ catch
+ printLog "wIgLi" + i
+ endcatch
wend
fGetIntoDictionary = bFound
end function
@@ -777,10 +747,10 @@ end function
'-------------------------------------------------------------------------------
function hSelectInList (window, sEntry as String) as Boolean
-printlog " alternativ method to 'hDoubleClickInList' (without mouse) "
-printlog "+ window: name of list "
-printlog "+ sEntry: string to find in list "
-printlog "+ ReturnValue: if found: TRUE; else FALSE "
+ printlog " alternativ method to 'hDoubleClickInList' (without mouse) "
+ printlog "+ window: name of list "
+ printlog "+ sEntry: string to find in list "
+ printlog "+ ReturnValue: if found: TRUE; else FALSE "
Dim i as Integer
Dim sTemp as String
Dim sLastTemp as String
@@ -811,7 +781,7 @@ function hWalkTheStyles2 (atemp)
dim itemp
dim bSet
dim aSettings(5,5)
-' dim atemp
+ ' dim atemp
printlog " Organizer "
i=1
@@ -833,7 +803,7 @@ function hWalkTheStyles2 (atemp)
atemp.check
else
-' aSettings(i,1).Uncheck
+ ' aSettings(i,1).Uncheck
endif
i=2
Kontext
@@ -914,33 +884,33 @@ function hWalkTheStyles2 (atemp)
Messagebox.setpage TabTabulator
Kontext "TabTabulator"
-' printlog " switch to tabpage 'Bullets' "
-' Messagebox.SetPage TabBullet
-' Kontext "TabBullet"
-' sleep 1
-' Call DialogTest (TabBullet)
-' sleep 1
-' Kontext
-' printlog " switch to tabpage 'Numbering Type' "
-' Messagebox.SetPage TabNumerierungsart
-' Kontext "TabNumerierungsart"
-' sleep 1
-' Call DialogTest (TabNumerierungsart)
-' sleep 1
-' Kontext
-' printlog " switch to tabpage 'Graphics' "
-' Messagebox.SetPage TabGrafiken
-' Kontext "TabGrafiken"
-' sleep 1
-' Call DialogTest (TabGrafiken)
-' sleep 1
-' Kontext
-' printlog " switch to tabpage 'Customize' "
-' Messagebox.SetPage TabOptionenNumerierung
-' Kontext "TabOptionenNumerierung"
-' sleep 1
-' Call DialogTest (TabOptionenNumerierung)
-' sleep 1
+ ' printlog " switch to tabpage 'Bullets' "
+ ' Messagebox.SetPage TabBullet
+ ' Kontext "TabBullet"
+ ' sleep 1
+ ' Call DialogTest (TabBullet)
+ ' sleep 1
+ ' Kontext
+ ' printlog " switch to tabpage 'Numbering Type' "
+ ' Messagebox.SetPage TabNumerierungsart
+ ' Kontext "TabNumerierungsart"
+ ' sleep 1
+ ' Call DialogTest (TabNumerierungsart)
+ ' sleep 1
+ ' Kontext
+ ' printlog " switch to tabpage 'Graphics' "
+ ' Messagebox.SetPage TabGrafiken
+ ' Kontext "TabGrafiken"
+ ' sleep 1
+ ' Call DialogTest (TabGrafiken)
+ ' sleep 1
+ ' Kontext
+ ' printlog " switch to tabpage 'Customize' "
+ ' Messagebox.SetPage TabOptionenNumerierung
+ ' Kontext "TabOptionenNumerierung"
+ ' sleep 1
+ ' Call DialogTest (TabOptionenNumerierung)
+ ' sleep 1
end function
'-------------------------------------------------------------------------------
@@ -960,7 +930,7 @@ function fGetSlideNumber (optional sCompare as integer) as integer
ViewNavigator
sleep 3
printlog " check in list, if the page changed "
-
+
else
printlog "If Navigator is not open, opening it now."
ViewNavigator
@@ -987,28 +957,28 @@ function fGetSlideCount (optional iCount as integer) as integer
printlog "+ output : number of slides in presentation "
dim i as integer
- printlog " open navigator "
- Kontext "Navigator"
- if Navigator.exists then
- Printlog "Navigator: open :-)"
- else
- Printlog "Navigator: NOT available :-( will be opened now!"
- ViewNavigator
- endif
- Sleep 1
- printlog " count rows in list of navigator: usually number of slides "
- Kontext "NavigatorDraw"
- i = Liste.GetItemCount
- if (isMissing(iCount) = FALSE) then
- if (i <> iCount) then
- Warnlog "Error! Expected slides: '" + iCount + "'; but are '" + i +"'"
- else
- Printlog "ok"
- endif
- endif
- printlog " close navigator "
- ViewNavigator
- fGetSlideCount = i
+ printlog " open navigator "
+ Kontext "Navigator"
+ if Navigator.exists then
+ Printlog "Navigator: open :-)"
+ else
+ Printlog "Navigator: NOT available :-( will be opened now!"
+ ViewNavigator
+ endif
+ Sleep 1
+ printlog " count rows in list of navigator: usually number of slides "
+ Kontext "NavigatorDraw"
+ i = Liste.GetItemCount
+ if (isMissing(iCount) = FALSE) then
+ if (i <> iCount) then
+ Warnlog "Error! Expected slides: '" + iCount + "'; but are '" + i +"'"
+ else
+ Printlog "ok"
+ endif
+ endif
+ printlog " close navigator "
+ ViewNavigator
+ fGetSlideCount = i
end function
'-------------------------------------------------------------------------------
@@ -1021,115 +991,115 @@ function fGetSlideName (optional sCompare as string) as string
printlog "+ EXIT: kontext on DocumentPresentation "
Kontext "NavigatorDraw"
- if NavigatorDraw.exists (5) then
- sleep 3
- printlog "check in list, if the page changed"
- fGetSlideName = Liste.GetSelText
- else
- warnlog "Navigator not open! in function fGetSlideName TBO"
- Kontext "NavigatorDraw"
- fGetSlideName = ""
- endif
- if (isMissing (sCompare) = False) then ' if optional parameter exists
- printlog "fGetSlideName is: " & fGetSlideName
- printlog "sCompare is: " & sCompare
- if fGetSlideName <> sCompare then
- warnlog " Slide Name is '" + fGetSlideName + "'; should be: '" + sCompare + "'"
- endif
- endif
- Kontext "DocumentPresentation"
+ if NavigatorDraw.exists (5) then
+ sleep 3
+ printlog "check in list, if the page changed"
+ fGetSlideName = Liste.GetSelText
+ else
+ warnlog "Navigator not open! in function fGetSlideName TBO"
+ Kontext "NavigatorDraw"
+ fGetSlideName = ""
+ endif
+ if (isMissing (sCompare) = False) then ' if optional parameter exists
+ printlog "fGetSlideName is: " & fGetSlideName
+ printlog "sCompare is: " & sCompare
+ if fGetSlideName <> sCompare then
+ warnlog " Slide Name is '" + fGetSlideName + "'; should be: '" + sCompare + "'"
+ endif
+ endif
+ Kontext "DocumentPresentation"
end function
'------------------------------------------------------------------------------
function fGetSetPageBackground (iSelect as integer, iWhere as integer) as integer
-
+
printlog " Get or Set the Page Background via stylist (iWhere = 0) or format menue (...= 1) "
printlog "+ if iSelect > 0 then set, else get "
printlog "+ return selected color number or -1 on error "
if (iWhere = 0) then
- printlog " Stylist -> Background -> Kontext menu -> modify -> Area -> Color "
- fGetSetPageBackground = -1 ' worst case
- Kontext "Stylist"
- if Stylist.NotExists (5) then
- FormatStylist
+ printlog " Stylist -> Background -> Kontext menu -> modify -> Area -> Color "
+ fGetSetPageBackground = -1 ' worst case
Kontext "Stylist"
- if Stylist.NotExists (5) then warnlog "Could not open stylist :-("
- end if
- Praesentationsvorlagen.Click
- sleep 1
- Vorlagenliste.TypeKeys "<PAGEDOWN>"
- hDoubleClickInList (vorlagenliste, glLocale(5), TRUE)
- sleep 1
- vorlagenliste.OpenContextMenu
- sleep 1
- hMenuSelectNr (1)
- else
- printlog " Format -> Page -> Background -> Color "'FormatPage
- sleep 1
- try ' this was just paranoia to find a not mentioned messagebox
- FormatSlideDraw
+ if Stylist.NotExists (5) then
+ FormatStylist
+ Kontext "Stylist"
+ if Stylist.NotExists (5) then warnlog "Could not open stylist :-("
+ end if
+ Praesentationsvorlagen.Click
+ sleep 1
+ Vorlagenliste.TypeKeys "<PAGEDOWN>"
+ hDoubleClickInList (vorlagenliste, glLocale(5), TRUE)
+ sleep 1
+ vorlagenliste.OpenContextMenu
+ sleep 1
+ hMenuSelectNr (1)
+ else
+ printlog " Format -> Page -> Background -> Color "'FormatPage
+ sleep 1
+ try ' this was just paranoia to find a not mentioned messagebox
+ FormatSlideDraw
catch
- warnlog "slooooow slot TBO :-("
- exit function
- endcatch
- sleep 1
- Kontext
- if (active.getrt = 373) then
- Active.SetPage TabArea
- else
- warnlog active.getrt
- if (active.getrt = 304) then
- warnlog active.gettext
- endif
- endif ' paranoia end ----------------------------------------------
- endif
-
- kontext "TabArea"
- if TabArea.exists then
- FillOptions.Select 2 ' Select "Colour"
- if (iSelect > 1) then ' Select the entry
-' Color.Check
- if (iSelect < ColourList.GetItemCount) then
- ColourList.Select iSelect
- else
- warnlog "Select entry is larger than list :-("
- endif
- fGetSetPageBackground = ColourList.GetSelIndex
- if fGetSetPageBackground = 0 then
- warnlog "There were no color selected in the list."
- endif
- TabArea.OK
- sleep 2
- kontext
- if (active.exists (2)) then
- warnlog "active about <changing the background for all pages ?>: '" + active.gettext + "'"
- active.yes
- else
- printlog "No message about 'changing the background for all pages ?' :-("
- endif
- else ' yust read the selected entry
- if FillOptions.GetSelIndex = 2 then
+ warnlog "slooooow slot TBO :-("
+ exit function
+ endcatch
+ sleep 1
+ Kontext
+ if (active.getrt = 373) then
+ Active.SetPage TabArea
+ else
+ warnlog active.getrt
+ if (active.getrt = 304) then
+ warnlog active.gettext
+ endif
+ endif ' paranoia end ----------------------------------------------
+ endif
+
+ kontext "TabArea"
+ if TabArea.exists then
+ FillOptions.Select 2 ' Select "Colour"
+ if (iSelect > 1) then ' Select the entry
+ ' Color.Check
+ if (iSelect < ColourList.GetItemCount) then
+ ColourList.Select iSelect
+ else
+ warnlog "Select entry is larger than list :-("
+ endif
fGetSetPageBackground = ColourList.GetSelIndex
- TabArea.Cancel
- else
- warnlog "Can't get value, because something different than color is selected :-("
- endif
- endif
- else
- kontext "TabFont"
- if TabFont.exists then
- Warnlog "Something wrong with the word " + glLocale(5) + ". It was either not found or wrong."
- else
- warnlog "Error: Can't get context menu ?"
- endif
- endif
-
- if (iWhere = 0) then
+ if fGetSetPageBackground = 0 then
+ warnlog "There were no color selected in the list."
+ endif
+ TabArea.OK
+ sleep 2
+ kontext
+ if (active.exists (2)) then
+ warnlog "active about <changing the background for all pages ?>: '" + active.gettext + "'"
+ active.yes
+ else
+ printlog "No message about 'changing the background for all pages ?' :-("
+ endif
+ else ' yust read the selected entry
+ if FillOptions.GetSelIndex = 2 then
+ fGetSetPageBackground = ColourList.GetSelIndex
+ TabArea.Cancel
+ else
+ warnlog "Can't get value, because something different than color is selected :-("
+ endif
+ endif
+ else
+ kontext "TabFont"
+ if TabFont.exists then
+ Warnlog "Something wrong with the word " + glLocale(5) + ". It was either not found or wrong."
+ else
+ warnlog "Error: Can't get context menu ?"
+ endif
+ endif
+
+ if (iWhere = 0) then
sleep 1 ' ABSOLUT NECESSARY !!! (TBO) else crash on UNIX on following command!!!!
FormatStylist ' closing
- endif
- sleep 4
+ endif
+ sleep 4
end function
'------------------------------------------------------------------------------
@@ -1139,31 +1109,31 @@ function CreateTextSetEffectAndAngle
SetClipBoard "Revenue"
DocumentImpress.TypeKeys "<MOD1 V>"
SlideShowCustomAnimation
- Kontext "Tasks"
- WaitSlot (1000)
- EffectAdd.Click
- kontext
- printlog " Switch to TabPage: Entrance "
- active.setPage(TabEntrance)
- kontext "TabEntrance"
- if TabEntrance.exists(5) then
- printlog " select in the listbox 'Effects' the second entry"
- Effects.select (24)
- printlog " select speed 'Fast' -> fourth item in list "
- Speed.Select 2
- TabEntrance.OK
- end if
- kontext "tasks"
- EffectStart.TypeKeys "<HOME><DOWN>" 'Select the second entry.
+ Kontext "Tasks"
+ WaitSlot (1000)
+ EffectAdd.Click
+ kontext
+ printlog " Switch to TabPage: Entrance "
+ active.setPage(TabEntrance)
+ kontext "TabEntrance"
+ if TabEntrance.exists(5) then
+ printlog " select in the listbox 'Effects' the second entry"
+ Effects.select (24)
+ printlog " select speed 'Fast' -> fourth item in list "
+ Speed.Select 2
+ TabEntrance.OK
+ end if
+ kontext "tasks"
+ EffectStart.TypeKeys "<HOME><DOWN>" 'Select the second entry.
- kontext "DocumentImpress"
- FormatPositionAndSize
- WaitSlot (1000)
- kontext
- active.setPage(TabDrehung)
- kontext "TabDrehung"
+ kontext "DocumentImpress"
+ FormatPositionAndSize
+ WaitSlot (1000)
+ kontext
+ active.setPage(TabDrehung)
+ kontext "TabDrehung"
- Winkel.TypeKeys "45"
+ Winkel.TypeKeys "45"
TabDrehung.OK
WaitSlot (1000)
kontext "DocumentImpress"
@@ -1177,29 +1147,29 @@ function fGetPresentationStyle (optional sCompare as integer) as integer
printlog "+ RETURN: LAST CHARACTER of the actual selected style in the stylist "
dim sTemp as integer
dim sTemp0 as string
-
+
sTemp = (-1)
printlog " open stylist if not already open: Format->Stylist "
kontext "Stylist"
if (Stylist.exists = FALSE) then
- try
- FormatStylist
- catch
- sleep 1
- endcatch
+ try
+ FormatStylist
+ catch
+ sleep 1
+ endcatch
endif
kontext "Stylist"
if Stylist.exists(5) then
- sTemp0 = Vorlagenliste.GetSeltext
- sTemp = val(right (sTemp0, 1))
- if (isMissing (sCompare) = False) then ' if optional parameter exists
- if sTemp <> sCompare then
- Warnlog "Style Name's last character is '" + sTemp + "'; should be: '" + sCompare + "'"
- endif
- endif
- FormatStylist
+ sTemp0 = Vorlagenliste.GetSeltext
+ sTemp = val(right (sTemp0, 1))
+ if (isMissing (sCompare) = False) then ' if optional parameter exists
+ if sTemp <> sCompare then
+ Warnlog "Style Name's last character is '" + sTemp + "'; should be: '" + sCompare + "'"
+ endif
+ endif
+ FormatStylist
else
- Warnlog "The Stylist could not be opened for unknown reasons :-("
+ Warnlog "The Stylist could not be opened for unknown reasons :-("
endif
fGetPresentationStyle = sTemp
end function
@@ -1243,23 +1213,23 @@ function wIgnorierenlisteLoeschen as boolean
exit function
end if
Kontext "BenutzerwoerterbuchBearbeiten"
- sleep 1
- iBooks = Buch.GetItemCount
- for i = 1 to iBooks
- Buch.Select i
- if Left$(Buch.GetSelText,13)="IgnoreAllList" then
- sleep 2
- while (Loeschen.IsEnabled)
- Loeschen.Click
- sleep 1
- wend
- end if
- next i
+ sleep 1
+ iBooks = Buch.GetItemCount
+ for i = 1 to iBooks
+ Buch.Select i
+ if Left$(Buch.GetSelText,13)="IgnoreAllList" then
+ sleep 2
+ while (Loeschen.IsEnabled)
+ Loeschen.Click
+ sleep 1
+ wend
+ end if
+ next i
Kontext "BenutzerwoerterbuchBearbeiten"
- BenutzerwoerterbuchBearbeiten.Cancel
+ BenutzerwoerterbuchBearbeiten.Cancel
Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
- wIgnorierenlisteLoeschen = TRUE
+ ExtrasOptionenDlg.OK
+ wIgnorierenlisteLoeschen = TRUE
end function
'-------------------------------------------------------------------------------
@@ -1278,121 +1248,121 @@ function optionstest
dim etshap as integer
dim etgt as integer
- Kontext "Tasks"
- EffectOptions.Click
- kontext "TabEffect"
- if TabEffect.Exists(5) then
- optsound = Sound.GetItemCount
- for os = 1 to optsound
- Sound.Select os
- kontext "OeffnenDlg"
- if OeffnenDlg.Exists (5) then
- filedialogue = TRUE
- OeffnenDlg.Close
- kontext "TabEffect"
- else
- kontext "TabEffect"
- endif
- next os
- if AfterAnimation.isEnabled AND AfterAnimation.isVisible then
- for oa = 1 to AfterAnimation.GetItemCount
- AfterAnimation.Select oa
- if DimColor.isEnabled then
- for odc = 1 to DimColor.GetItemCount
- DimColor.Select odc
- next odc
- endif
- if DelayBetweenCharacters.isEnabled then
- for odc = 1 to DelayBetweenCharacters.GetItemCount
- DelayBetweenCharacters.Select odc
- next odc
- endif
- next oa
- else
- if DelayBetweenCharacters.isEnabled then
- for odc = 1 to DelayBetweenCharacters.GetItemCount
- DelayBetweenCharacters.Select odc
- next odc
- endif
- endif
- for ota = 1 to TextAnimation.GetItemCount
- TextAnimation.Select ota
- next ota
- printlog " switch to TabPage 'Timing' "
- Kontext
- Active.SetPage TabTiming
- kontext "TabTiming"
- if TabTiming.Exists(5) then
- for ets = 1 to TimingStart.GetItemCount
- TimingStart.Select ets
- next ets
- if Delay.isVisible AND Delay.isEnabled then
- Delay.GetText
- else
- Warnlog "Delay in Effect Options were not to be found."
- endif
- if Speed.isVisible AND Speed.isEnabled then
- for etspeed = 1 to Speed.GetItemCount
- Speed.Select etspeed
- next etspeed
- else
- printlog " No Speed-entry for this effect."
- endif
- if Repeat.isVisible AND Repeat.isEnabled then
- for etrep = 1 to Speed.GetItemCount
- Repeat.Select etrep
- next etrep
- else
- Printlog "Repeat in Effect Options were not to be found."
- endif
- Rewind.Check
- Rewind.UnCheck
- TriggerAnimate.IsChecked
- TriggerStart.IsChecked
- if Shape.isVisible AND Shape.isEnabled then
- for etshap = 1 to Shape.GetItemCount
- Shape.Select etshap
- next etshap
- else
- Warnlog "Shape in Effect Options were not to be found."
- endif
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
- endif
- printlog " switch to TabPage 'Timing' "
- Kontext
- active.setPage TabTextAnimation
- kontext "TabTextAnimation"
- if TabTextAnimation.Exists(5) then
- lala = GroupText.GetItemCount
- for etgt = 1 to lala
- GroupText.Select etgt
- if AutomaticallyAfter.IsEnabled then
- AutomaticallyAfter.Check
- AutomaticallyAfter.TypeKeys "<UP>"
- endif
- if AnimateAttachedShape.IsEnabled then
- AnimateAttachedShape.Check
- if AnimateAttachedShape.IsChecked = FALSE then
+ Kontext "Tasks"
+ EffectOptions.Click
+ kontext "TabEffect"
+ if TabEffect.Exists(5) then
+ optsound = Sound.GetItemCount
+ for os = 1 to optsound
+ Sound.Select os
+ kontext "OeffnenDlg"
+ if OeffnenDlg.Exists (5) then
+ filedialogue = TRUE
+ OeffnenDlg.Close
+ kontext "TabEffect"
+ else
+ kontext "TabEffect"
+ endif
+ next os
+ if AfterAnimation.isEnabled AND AfterAnimation.isVisible then
+ for oa = 1 to AfterAnimation.GetItemCount
+ AfterAnimation.Select oa
+ if DimColor.isEnabled then
+ for odc = 1 to DimColor.GetItemCount
+ DimColor.Select odc
+ next odc
+ endif
+ if DelayBetweenCharacters.isEnabled then
+ for odc = 1 to DelayBetweenCharacters.GetItemCount
+ DelayBetweenCharacters.Select odc
+ next odc
+ endif
+ next oa
+ else
+ if DelayBetweenCharacters.isEnabled then
+ for odc = 1 to DelayBetweenCharacters.GetItemCount
+ DelayBetweenCharacters.Select odc
+ next odc
+ endif
+ endif
+ for ota = 1 to TextAnimation.GetItemCount
+ TextAnimation.Select ota
+ next ota
+ printlog " switch to TabPage 'Timing' "
+ Kontext
+ Active.SetPage TabTiming
+ kontext "TabTiming"
+ if TabTiming.Exists(5) then
+ for ets = 1 to TimingStart.GetItemCount
+ TimingStart.Select ets
+ next ets
+ if Delay.isVisible AND Delay.isEnabled then
+ Delay.GetText
+ else
+ Warnlog "Delay in Effect Options were not to be found."
+ endif
+ if Speed.isVisible AND Speed.isEnabled then
+ for etspeed = 1 to Speed.GetItemCount
+ Speed.Select etspeed
+ next etspeed
+ else
+ printlog " No Speed-entry for this effect."
+ endif
+ if Repeat.isVisible AND Repeat.isEnabled then
+ for etrep = 1 to Speed.GetItemCount
+ Repeat.Select etrep
+ next etrep
+ else
+ Printlog "Repeat in Effect Options were not to be found."
+ endif
+ Rewind.Check
+ Rewind.UnCheck
+ TriggerAnimate.IsChecked
+ TriggerStart.IsChecked
+ if Shape.isVisible AND Shape.isEnabled then
+ for etshap = 1 to Shape.GetItemCount
+ Shape.Select etshap
+ next etshap
+ else
+ Warnlog "Shape in Effect Options were not to be found."
+ endif
+ else
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
+ endif
+ printlog " switch to TabPage 'Timing' "
+ Kontext
+ active.setPage TabTextAnimation
+ kontext "TabTextAnimation"
+ if TabTextAnimation.Exists(5) then
+ lala = GroupText.GetItemCount
+ for etgt = 1 to lala
+ GroupText.Select etgt
+ if AutomaticallyAfter.IsEnabled then
+ AutomaticallyAfter.Check
+ AutomaticallyAfter.TypeKeys "<UP>"
+ endif
+ if AnimateAttachedShape.IsEnabled then
+ AnimateAttachedShape.Check
+ if AnimateAttachedShape.IsChecked = FALSE then
Warnlog "AnimateAttachedShape should have been checked"
- endif
- endif
- if InreverseOrder.IsEnabled then
- InreverseOrder.Check
- if InreverseOrder.IsChecked = FALSE then
+ endif
+ endif
+ if InreverseOrder.IsEnabled then
+ InreverseOrder.Check
+ if InreverseOrder.IsChecked = FALSE then
Warnlog "InreverseOrder should have been checked"
- endif
- endif
- next etgt
- TabTextAnimation.Cancel
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
- endif
+ endif
+ endif
+ next etgt
+ TabTextAnimation.Cancel
else
- warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
endif
- Kontext "Tasks"
-
+ else
+ warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
+ endif
+ Kontext "Tasks"
+
end function
'-------------------------------------------------------------------------------
@@ -1411,124 +1381,124 @@ function optionstest2
dim etshap as integer
dim etgt as integer
- Kontext "Tasks"
- EffectOptions.Click
- kontext "TabEffect"
- if TabEffect.Exists(5) then
- Sound.Select 5
- sleep 4
- if Play.IsEnabled then
- Play.Click
- else
- warnlog "Play should have been enabled after selecting a sound."
- endif
- AfterAnimation.Select 2
- if DimColor.isEnabled then
- DimColor.Select 5
- else
- Warnlog "DimColor should have been enabled"
- endif
- TextAnimation.Select 3
- if DelayBetweenCharacters.isEnabled then
- DelayBetweenCharacters.More 5
- else
- Warnlog "DelayBetweenCharacters should have been enabled"
- endif
- printlog " switch to TabPage 'Timing' "
- Kontext
- Active.SetPage TabTiming
- kontext "TabTiming"
- if TabTiming.Exists(5) then
- TimingStart.Select 2
- if Delay.isVisible AND Delay.isEnabled then
- Delay.More 5
- else
- Warnlog "Delay in Effect Options were not to be found."
- endif
- if Speed.isVisible AND Speed.isEnabled then
- Speed.Select 3
- else
- Printlog "Speed in Effect Options were not to be found."
- endif
- if Repeat.isVisible then
- if Repeat.isEnabled then
+ Kontext "Tasks"
+ EffectOptions.Click
+ kontext "TabEffect"
+ if TabEffect.Exists(5) then
+ Sound.Select 5
+ sleep 4
+ if Play.IsEnabled then
+ Play.Click
+ else
+ warnlog "Play should have been enabled after selecting a sound."
+ endif
+ AfterAnimation.Select 2
+ if DimColor.isEnabled then
+ DimColor.Select 5
+ else
+ Warnlog "DimColor should have been enabled"
+ endif
+ TextAnimation.Select 3
+ if DelayBetweenCharacters.isEnabled then
+ DelayBetweenCharacters.More 5
+ else
+ Warnlog "DelayBetweenCharacters should have been enabled"
+ endif
+ printlog " switch to TabPage 'Timing' "
+ Kontext
+ Active.SetPage TabTiming
+ kontext "TabTiming"
+ if TabTiming.Exists(5) then
+ TimingStart.Select 2
+ if Delay.isVisible AND Delay.isEnabled then
+ Delay.More 5
+ else
+ Warnlog "Delay in Effect Options were not to be found."
+ endif
+ if Speed.isVisible AND Speed.isEnabled then
+ Speed.Select 3
+ else
+ Printlog "Speed in Effect Options were not to be found."
+ endif
+ if Repeat.isVisible then
+ if Repeat.isEnabled then
for etrep = 1 to Speed.GetItemCount
Repeat.Select etrep
next etrep
- else
+ else
Warnlog "Repeat in Effect Options were not enabled."
- endif
- else
- Warnlog "Repeat in Effect Options were not visible."
- endif
- if Rewind.isVisible then
- if Rewind.isEnabled then
+ endif
+ else
+ Warnlog "Repeat in Effect Options were not visible."
+ endif
+ if Rewind.isVisible then
+ if Rewind.isEnabled then
Rewind.Check
- else
+ else
Printlog "Rewind in Effect Options were not to be found."
- endif
- else
- Printlog "Rewind in Effect Options were not to be found."
- endif
- if Rewind.isVisible then
- if Rewind.isEnabled then
+ endif
+ else
+ Printlog "Rewind in Effect Options were not to be found."
+ endif
+ if Rewind.isVisible then
+ if Rewind.isEnabled then
Rewind.Check
Rewind.UnCheck
- else
+ else
Warnlog "Rewind in Effect Options were not enabled."
- endif
- else
- Warnlog "Rewind in Effect Options were not visible."
- endif
- TriggerAnimate.IsChecked
- TriggerStart.IsChecked
- if Shape.isVisible then
- if Shape.isEnabled then
+ endif
+ else
+ Warnlog "Rewind in Effect Options were not visible."
+ endif
+ TriggerAnimate.IsChecked
+ TriggerStart.IsChecked
+ if Shape.isVisible then
+ if Shape.isEnabled then
for etshap = 1 to Shape.GetItemCount
Shape.Select etshap
next etshap
- else
+ else
Warnlog "Shape in Effect Options were not to be found."
- endif
- else
- Warnlog "Shape in Effect Options were not to be found."
- endif
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
- endif
- printlog " switch to TabPage 'Timing' "
- Kontext
- active.setPage TabTextAnimation
- kontext "TabTextAnimation"
- if TabTextAnimation.Exists(5) then
- lala = GroupText.GetItemCount
- for etgt = 1 to lala
- GroupText.Select etgt
- if AutomaticallyAfter.IsEnabled then
- AutomaticallyAfter.Check
- AutomaticallyAfter.TypeKeys "<UP>"
- endif
- if AnimateAttachedShape.IsEnabled then
- AnimateAttachedShape.Check
- if AnimateAttachedShape.IsChecked = FALSE then
+ endif
+ else
+ Warnlog "Shape in Effect Options were not to be found."
+ endif
+ else
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: Timing TabPage didn't work."
+ endif
+ printlog " switch to TabPage 'Timing' "
+ Kontext
+ active.setPage TabTextAnimation
+ kontext "TabTextAnimation"
+ if TabTextAnimation.Exists(5) then
+ lala = GroupText.GetItemCount
+ for etgt = 1 to lala
+ GroupText.Select etgt
+ if AutomaticallyAfter.IsEnabled then
+ AutomaticallyAfter.Check
+ AutomaticallyAfter.TypeKeys "<UP>"
+ endif
+ if AnimateAttachedShape.IsEnabled then
+ AnimateAttachedShape.Check
+ if AnimateAttachedShape.IsChecked = FALSE then
Warnlog "AnimateAttachedShape should have been checked"
- endif
- endif
- if InreverseOrder.IsEnabled then
- InreverseOrder.Check
- if InreverseOrder.IsChecked = FALSE then
+ endif
+ endif
+ if InreverseOrder.IsEnabled then
+ InreverseOrder.Check
+ if InreverseOrder.IsChecked = FALSE then
Warnlog "InreverseOrder should have been checked"
- endif
- endif
- next etgt
- TabTextAnimation.Cancel
- else
- warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
- endif
+ endif
+ endif
+ next etgt
+ TabTextAnimation.Cancel
else
- warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
+ warnlog "Impress:Tasks Pane:Custom Animation:Effect Options: TextAnimation TabPage didn't work."
endif
- Kontext "Tasks"
-
+ else
+ warnlog "Impress:Tasks Pane:Custom Animation:... button didn't work."
+ endif
+ Kontext "Tasks"
+
end function
'-------------------------------------------------------------------------------
diff --git a/testautomation/graphics/tools/id_tools_2.inc b/testautomation/graphics/tools/id_tools_2.inc
index 681a5ec7161a..e2d1a1497e9a 100644
--- a/testautomation/graphics/tools/id_tools_2.inc
+++ b/testautomation/graphics/tools/id_tools_2.inc
@@ -31,58 +31,6 @@
'*
'\******************************************************************************
-'Subs:
-' #1 sFileExport
-' #1 callAutocorrectOptions
-' #1 sCheckCheck
-' #1 sCheckUnderlined
-' #1 sCheckSupperscript
-' #1 sCheckDash
-' #1 sPrintCheckOrder
-' #1 writertest
-' #1 calctest
-' #1 tClipboardFromDrawTest
-' #1 Select_Copy
-' #1 SaveMeasurementSetFirst
-' #1 MeasurementSetFirst
-' #1 ResetMeasurement
-' #1 SetKontextApplication
-' #1 hSetSpellHypLanguage
-' #1 hTBOtypeInDoc
-' #1 Position_Vergleichen
-' #1 g_demoguide
-' #1 sFormatTextDrawAnimation
-' #1 mouseclickinpresentation
-' #1 im_002_
-' #1 im_003_
-' #1 im_004_
-' #1 im_005_
-' #1 im_007_
-' #1 im_011_
-' #1 D_002_
-' #1 D_003_
-' #1 D_005_
-' #1 d_007
-' #1 hOpenGallery
-' #1 LoadGraphic
-' #1 CheckGraphic
-' #1 GetOnlyGraphics
-' #1 tSettingsToCM
-' #1 tResetSettings
-' #1 id_001
-' #1 id_002
-' #1 id_003
-' #1 id_004
-' #1 id_005
-' #1 id_006
-' #1 id_007
-' #1 id_008
-' #1 id_009
-' #1 id_011
-' #1 hWalkTheStyles
-
-'\*****************************************************************
-
sub sFileExport
printlog " just exporting is done in qatesttool/framework/first test: 'tGraphicExport' but there is no loading, "
@@ -90,11 +38,11 @@ sub sFileExport
Dim ExZaehler as Integer
Dim ExPath as String
Dim Liste( 50 ) as String
-
- if (gApplication = "IMPRESS") then
- ExtensionString = "odp"
+
+ if (gApplication = "IMPRESS") then
+ ExtensionString = "odp"
else
- ExtensionString = "odg"
+ ExtensionString = "odg"
end if
printlog "- all files are saved in [StarOfficePath]/user/work/[application]/export "
@@ -102,19 +50,19 @@ sub sFileExport
OutputGrafikTBO = ExPath & "expo"
Printlog "Create the export-dir for the graphics ( + ExPath + )"
try
- app.mkDir ( ExPath )
- ExZaehler = GetFileList ( ExPath , "*.*" , Liste() )
- if ExZaehler <> 0 then
- Printlog "The export-dir exists. The test want to delete all Files ( " + ExZaehler + " )!"
- if KillFileList ( Liste() ) = FALSE then
- Warnlog "Not all files can be deleted. " + ListCount ( Liste() ) + " files exists!"
- end if
- end if
+ app.mkDir ( ExPath )
+ ExZaehler = GetFileList ( ExPath , "*.*" , Liste() )
+ if ExZaehler <> 0 then
+ Printlog "The export-dir exists. The test want to delete all Files ( " + ExZaehler + " )!"
+ if KillFileList ( Liste() ) = FALSE then
+ Warnlog "Not all files can be deleted. " + ListCount ( Liste() ) + " files exists!"
+ end if
+ end if
catch
- Warnlog "An error at creating the export-dir, the test ends!"
- exit sub
+ Warnlog "An error at creating the export-dir, the test ends!"
+ exit sub
endcatch
-
+
printlog "+ open the test document qatesttool/graphics/required/input/graphicexport.od ? ] "
end sub
@@ -134,22 +82,22 @@ sub sCheckCheck (i, Pruefung$, bEnabled)
hTextrahmenErstellen (Pruefung$,20,20,60,40)
select case i
-' Disabled sCheckUnderlined due to start of external program (web-browser) - FHA
- case 5: bEnabled 'sCheckUnderlined (bEnabled)
- case 6: sCheckDash (bEnabled)
- case 8: sCheckSupperscript (bEnabled)
- case else:
- hTypeKeys "<Home><Shift End>"
- EditCopy
- if (GetClipboardText = Pruefung$) then ' not replaced
- if bEnabled then ' not as expected
- warnlog "- replacement failed"
- endif
- else ' replaced
- if not bEnabled then ' not as expected
- warnlog "- replacement failed : '" + Pruefung$ + "' - '" + GetClipboardText + "'"
- endif
+ ' Disabled sCheckUnderlined due to start of external program (web-browser) - FHA
+ case 5: bEnabled 'sCheckUnderlined (bEnabled)
+ case 6: sCheckDash (bEnabled)
+ case 8: sCheckSupperscript (bEnabled)
+ case else:
+ hTypeKeys "<Home><Shift End>"
+ EditCopy
+ if (GetClipboardText = Pruefung$) then ' not replaced
+ if bEnabled then ' not as expected
+ warnlog "- replacement failed"
endif
+ else ' replaced
+ if not bEnabled then ' not as expected
+ warnlog "- replacement failed : '" + Pruefung$ + "' - '" + GetClipboardText + "'"
+ endif
+ endif
end select
hTypeKeys "<Home><Shift End><Delete>"
@@ -207,65 +155,65 @@ end sub
'-------------------------------------------------------------------------------
sub sPrintCheckOrder (optional bcheck as boolean)
- dim sTemp as string
- dim sTemp2 as string
- dim i as integer
- printlog " deselect all "
- Printlog "-----------------------------------"
- printlog " select in default order and take Position X in mind ;-) "
- hTypeKeys ("<escape><escape>")
- for i = 1 to 3
- hTypeKeys ("<TAB>")
- sTemp = fGetPositionX()
- Printlog " - " + i +": " + sTemp
- if ((isMissing(bcheck) <> FALSE) AND (bcheck = TRUE)) then
- Select Case i
+ dim sTemp as string
+ dim sTemp2 as string
+ dim i as integer
+ printlog " deselect all "
+ Printlog "-----------------------------------"
+ printlog " select in default order and take Position X in mind ;-) "
+ hTypeKeys ("<escape><escape>")
+ for i = 1 to 3
+ hTypeKeys ("<TAB>")
+ sTemp = fGetPositionX()
+ Printlog " - " + i +": " + sTemp
+ if ((isMissing(bcheck) <> FALSE) AND (bcheck = TRUE)) then
+ Select Case i
Case 1: sTemp2 = Ueber_Text_1
Case 2: sTemp2 = Ueber_Text_2
Case 3: sTemp2 = Ueber_Text_3
- End Select
- if sTemp <> sTemp2 then
- warnlog " + " + i + " Arrangement is wrong; is: "+sTemp+"; should: "+sTemp2+";"
- end if
- endif
- next i
- hTypeKeys ("<escape><escape>")
- Printlog "-----------------------------------"
+ End Select
+ if sTemp <> sTemp2 then
+ warnlog " + " + i + " Arrangement is wrong; is: "+sTemp+"; should: "+sTemp2+";"
+ end if
+ endif
+ next i
+ hTypeKeys ("<escape><escape>")
+ Printlog "-----------------------------------"
end sub
'--------------------------- Tests for Writer ----------------------------------
sub writertest
- try
- call Make_And_Check_Formatted_Text_Line_From_Application
- catch
- warnlog "Something went wrong with testing writertest"
- endcatch
-
- try
- call Make_Rectangle_From_Application
- call Full_test_Draw
- call Full_test_Impress
- call Full_test_Writer
- call Full_test_Calc
- catch
- warnlog "something wrong with testing writertest"
- endcatch
+ try
+ call Make_And_Check_Formatted_Text_Line_From_Application
+ catch
+ warnlog "Something went wrong with testing writertest"
+ endcatch
+
+ try
+ call Make_Rectangle_From_Application
+ call Full_test_Draw
+ call Full_test_Impress
+ call Full_test_Writer
+ call Full_test_Calc
+ catch
+ warnlog "something wrong with testing writertest"
+ endcatch
end sub ' big one
'---------------------------- Tests for Calc -----------------------------------
sub calctest
-try
- call Make_Rectangle_From_Application
- call Full_test_Draw
- call Full_test_Impress
- call Full_test_Writer
- call Full_test_Calc
-catch
- warnlog "something wrong with calctest"
-endcatch
- printlog "currently no specific tests from Calc"
+ try
+ call Make_Rectangle_From_Application
+ call Full_test_Draw
+ call Full_test_Impress
+ call Full_test_Writer
+ call Full_test_Calc
+ catch
+ warnlog "something wrong with calctest"
+ endcatch
+ printlog "currently no specific tests from Calc"
end sub
'-------------------------------------------------------------------------------
@@ -274,146 +222,116 @@ sub tClipboardFromDrawTest
EnableQAErrors = false
FromApp2 = gApplication
printlog "gApplication = " + gApplication
+
+ select case( gApplication )
+ case "WRITER" : call writertest()
+ case "CALC" : call calctest()
+ case else : warnlog( "Unsupported gApplication provided: " & gApplication )
+ end select
- if gApplication = "WRITER" then
- call writertest
- exit sub
- end if
-
- if gApplication = "CALC" then
- call calctest
- exit sub
- end if
end sub
'-------------------------------------------------------------------------------
sub Select_Copy
- printlog " Select and copy "
- Sleep 10
- if gApplication = "DRAW" then
- EditSelectAll
- printlog " We just ran EditSelectAll - Application is Draw"
- end if
- if gApplication = "IMPRESS" then
- EditSelectAll
- printlog " We just ran EditSelectAll - Application is Impress"
- end if
- Sleep 2
- EditCopy
- Sleep 2
- printlog " Copied object"
+ hUseAsyncSlot( "EditSelectAll" )
+ hUseAsyncSlot( "EditCopy" )
+
end Sub
'-------------------------------------------------------------------------------
sub SaveMeasurementSetFirst
- if (gApplication = "DRAW") then
- sApplication = "DRAWING"
- elseIf (gApplication = "IMPRESS") then
- sApplication = "IMPRESS"
- elseIf (gApplication = "WRITER") then
- sApplication = "WRITER"
- elseIf (gApplication = "CALC") then
- sApplication = "CALC"
- endif
+ select case( gApplication )
+ case "DRAW" : sApplication = "DRAWING"
+ case "IMPRESS" : sApplication = "IMPRESS"
+ case "WRITER" : sApplication = "WRITER"
+ case "CALC" : sApplication = "CALC"
+ case else : printlog( "Provided gApplication is not supported: " & gApplication )
+ end select
+
printlog " - save states "
ToolsOptions
- hToolsOptions (sApplication,"General")
- ReferenceOld = Masseinheit.GetSelText
- Masseinheit.TypeKeys= "<HOME>" '(first entry)
- ReferenceNew = Masseinheit.GetSelText
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
+ hToolsOptions (sApplication,"General")
+ ReferenceOld = Masseinheit.GetSelText
+ Masseinheit.TypeKeys= "<HOME>" '(first entry)
+ ReferenceNew = Masseinheit.GetSelText
+ Kontext "ExtrasOptionenDlg"
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
+
end Sub
'-------------------------------------------------------------------------------
sub MeasurementSetFirst
dim f as integer
- if (gApplication = "DRAW") then
- sApplication = "DRAWING"
- elseIf (gApplication = "IMPRESS") then
- sApplication = "IMPRESS"
- elseIf (gApplication = "WRITER") then
- sApplication = "WRITER"
- elseIf (gApplication = "CALC") then
- sApplication = "CALC"
- endif
+
+ select case( gApplication )
+ case "DRAW" : sApplication = "DRAWING"
+ case "IMPRESS" : sApplication = "IMPRESS"
+ case "WRITER" : sApplication = "WRITER"
+ case "CALC" : sApplication = "CALC"
+ case else : printlog( "Provided gApplication is not supported: " & gApplication )
+ end select
+
ToolsOptions
- hToolsOptions (sApplication,"General")
- if Masseinheit.GetSelText <> ReferenceNew then 'find the right one.
+ hToolsOptions (sApplication,"General")
+ if Masseinheit.GetSelText <> ReferenceNew then 'find the right one.
Masseinheit.TypeKeys "<HOME>"
for f = 1 to Masseinheit.GetItemCount
if Masseinheit.GetSelText = ReferenceNew then
- i = Masseinheit.GetItemCount 'find the right one.
+ i = Masseinheit.GetItemCount 'find the right one.
else
- Masseinheit.TypeKeys "<DOWN>"
+ Masseinheit.TypeKeys "<DOWN>"
endif
next f
- endif
- Kontext "ExtrasOptionenDlg"
- ExtrasOptionenDlg.OK
+ endif
+ Kontext "ExtrasOptionenDlg"
+ hCloseDialog( ExtrasOptionenDlg, "ok" )
+
end Sub
'-------------------------------------------------------------------------------
sub ResetMeasurement
dim f as integer
- if (gApplication = "DRAW") then
- sApplication = "DRAWING"
- elseIf (gApplication = "IMPRESS") then
- sApplication = "IMPRESS"
- elseIf (gApplication = "WRITER") then
- sApplication = "WRITER"
- elseIf (gApplication = "CALC") then
- sApplication = "CALC"
- endif
+
+ select case( gApplication )
+ case "DRAW" : sApplication = "DRAWING"
+ case "IMPRESS" : sApplication = "IMPRESS"
+ case "WRITER" : sApplication = "WRITER"
+ case "CALC" : sApplication = "CALC"
+ case else : printlog( "Provided gApplication is not supported: " & gApplication )
+ end select
+
printlog " - Reset states back to what they were before "
ToolsOptions
- hToolsOptions (sApplication,"General")
- if Masseinheit.GetSelText <> ReferenceOld then 'find the right one.
+ hToolsOptions (sApplication,"General")
+ if Masseinheit.GetSelText <> ReferenceOld then 'find the right one.
Masseinheit.TypeKeys "<HOME>"
for f = 1 to Masseinheit.GetItemCount
if Masseinheit.GetSelText = ReferenceOld then
- i = Masseinheit.GetItemCount 'find the right one.
+ i = Masseinheit.GetItemCount 'find the right one.
else
- Masseinheit.TypeKeys "<DOWN>"
+ Masseinheit.TypeKeys "<DOWN>"
endif
next f
- endif
- Kontext "ExtrasOptionenDlg"
+ endif
+ Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.OK
end Sub
'-------------------------------------------------------------------------------
sub SetKontextApplication
- sleep 1
- Select Case gApplication
- Case "DRAW"
- Kontext "DocumentDraw"
- 'Printlog "gApplication / Kontext is now: DocumentDraw"
- sleep 1
- Case "IMPRESS"
- Kontext "DocumentImpress"
- 'Printlog "gApplication / Kontext is now is now: DocumentImpress"
- sleep 1
- Case "WRITER"
- Kontext "DocumentWriter"
- 'Printlog "gApplication / Kontext is now is now: DocumentWriter"
- sleep 1
- Case "CALC"
- Kontext "DocumentCalc"
- 'Printlog "gApplication / Kontext is now is now: DocumentCalc"
- sleep 1
- end select
- sleep 1
+
+ hSetDocumentContext() ' Global routine exists
+
end sub
'-------------------------------------------------------------------------------
sub hSetSpellHypLanguage
-printlog " select a language with a dictionary, used for spellcheck, thesaurus and hyphenation "
+ printlog " select a language with a dictionary, used for spellcheck, thesaurus and hyphenation "
dim sTrieit as string
' only for asian languages i need to set the default language for the current document to 'English(USA)'
@@ -450,7 +368,7 @@ printlog " select a language with a dictionary, used for spellcheck, thesaurus a
qaErrorLog "Sorry no spellbook found: id_tools.inc::hSetSpellHypLanguage"
endif
else
- printlog " if a Language is already defined in the textfile "
+ printlog " if a Language is already defined in the textfile "
printlog glLocale (4)
try
printlog " select it in section 'Default languages for document' listbox 'Western' "
@@ -466,11 +384,11 @@ printlog " select a language with a dictionary, used for spellcheck, thesaurus a
qaw = glLocale (4)
endcatch
endif
- try
- printlog "selected: '" + Westlich.GetSelText + "'"
- catch
- printlog "selected: '" + Asiatisch.GetSelText + "'"
- endcatch
+ try
+ printlog "selected: '" + Westlich.GetSelText + "'"
+ catch
+ printlog "selected: '" + Asiatisch.GetSelText + "'"
+ endcatch
Kontext "ExtrasOptionenDlg"
printlog "+ close dialog 'Options - ' with OK "
ExtrasOptionenDlg.OK
@@ -480,7 +398,7 @@ end sub
'-------------------------------------------------------------------------------
sub hTBOtypeInDoc
- hRechteckErstellen ( 10, 10, 30, 40 )
+ hRechteckErstellen ( 10, 10, 30, 40 )
end sub
'-------------------------------------------------------------------------------
@@ -501,9 +419,9 @@ sub Position_Vergleichen (Ueber_Text_1 as string,Ueber_Text_2 as string,Ueber_Te
if TabPositionAndSize.exists (5) then printlog "Yo!"
printlog "What?"
if Dummy_Text = Ueber_Text_1 then
- Printlog Ueber_Text_2
+ Printlog Ueber_Text_2
else
- warnlog Ueber_Text_3,": is: ", Dummy_Text,"; should be: ", Ueber_Text_1
+ warnlog Ueber_Text_3,": is: ", Dummy_Text,"; should be: ", Ueber_Text_1
end if
end sub
@@ -511,7 +429,7 @@ end sub
sub g_demoguide
printlog "------------------- g_demoguide.inc ------------------------"
-
+
call t_Introduction
call t_Interoperability
call t_DrawingEngine
@@ -538,107 +456,98 @@ end sub
'-------------------------------------------------------------------------------
sub mouseclickinpresentation
- Kontext "DocumentPresentation"
- autoexecute=false
- DocumentPresentation.MouseDown ( 50, 50 )
- printlog " switch slides using mouse clicks "
- DocumentPresentation.MouseUp ( 50, 50 )
- autoexecute=true
+ Kontext "DocumentPresentation"
+ autoexecute=false
+ DocumentPresentation.MouseDown ( 50, 50 )
+ printlog " switch slides using mouse clicks "
+ DocumentPresentation.MouseUp ( 50, 50 )
+ autoexecute=true
end sub
'-------------------------------------------------------------------------------
-sub im_002_
+sub im_002
+ printLog Chr(13) + "--------- im_002_ ---------- $Date: 2008-06-16 10:43:16 $ $Revision: 1.1 $ "
- printLog Chr(13) + "--------- im_002_ ---------- $Date: 2008-06-16 10:43:16 $ $Revision: 1.1 $ "
-
- Call tiEditDeleteSlide
+ Call tiEditDeleteSlide
end sub
'-------------------------------------------------------------------------------
-sub im_003_
-
- printLog Chr(13) + "--------- im_003_ ----------"
+sub im_003
+ printLog Chr(13) + "--------- im_003_ ----------"
Call tiViewMasterView
Call tiViewSlideMaster
Call tiViewPanes
-'TODO: TBO not necessary here, move to optional
+ 'TODO: TBO not necessary here, move to optional
Call tiViewToolbar_1
end sub
'-------------------------------------------------------------------------------
-sub im_004_
-
- printLog Chr(13) + "--------- im_004_ ----------"
+sub im_004
+ printLog Chr(13) + "--------- im_004_ ----------"
- Call tiInsertSlideExpandSummary
+ Call tiInsertSlideExpandSummary
end sub
'-------------------------------------------------------------------------------
-sub im_005_
+sub im_005
+ printLog Chr(13) + "--------- im_005_ ---------- "
- printLog Chr(13) + "--------- im_005_ ---------- "
-
- Call tiFormatModifyLayout ' impress only
+ Call tiFormatModifyLayout ' impress only
end sub
'-------------------------------------------------------------------------------
-sub im_007_
-
- printLog Chr(13) + "--------- im_007_ ---------- "
+sub im_007
+ printLog Chr(13) + "--------- im_007_ ---------- "
- Call tSlideShowSlideShow
- Call tSlideShowRehearseTimings
- Call tSlideShowSlideShowSettings
- Call tSlideShowCustomSlideShow
- Call tSlideShowSlideTransition
+ Call tSlideShowSlideShow
+ Call tSlideShowRehearseTimings
+ Call tSlideShowSlideShowSettings
+ Call tSlideShowCustomSlideShow
+ Call tSlideShowSlideTransition
-Call tSlideShowShowHideSlide
- Call tSlideShowAnimation
- Call tSlideShowCustomAnimation
- Call tSlideShowInteraction
+ Call tSlideShowShowHideSlide
+ Call tSlideShowAnimation
+ Call tSlideShowCustomAnimation
+ Call tSlideShowInteraction
end sub
'-------------------------------------------------------------------------------
-sub im_011_
-
- printLog Chr(13) + "--------- im_011_ ---------- "
+sub im_011
+ printLog Chr(13) + "--------- im_011_ ---------- "
- Call tiDiaLeiste ' only IMPRESS
+ Call tiDiaLeiste ' only IMPRESS
end sub
'-------------------------------------------------------------------------------
-sub D_002_
+sub D_002
+ printLog Chr(13) + "--------- D_002_ ---------- "
- printLog Chr(13) + "--------- D_002_ ---------- "
-
- Call tdEditCrossFading
- Call tdEditLayer
+ Call tdEditCrossFading
+ Call tdEditLayer
end sub
'-------------------------------------------------------------------------------
-sub D_003_
-
- printLog Chr(13) + "--------- D_003_ ---------- "
+sub D_003
+ printLog Chr(13) + "--------- D_003_ ---------- "
- call tdViewSlide
- call tdViewPagePane
+ call tdViewSlide
+ call tdViewPagePane
end sub
'-------------------------------------------------------------------------------
-sub D_005_
-
- printLog Chr(13) + "--------- D_005_ ---------- "
+sub D_005
+ printLog Chr(13) + "--------- D_005_ ---------- "
- call tiFormatLayer ' only in draw !!!!!
+ call tiFormatLayer ' only in draw !!!!!
end sub
'-------------------------------------------------------------------------------
sub d_007
- printLog Chr(13) + "--------- d_007 ---------- "
+ printLog Chr(13) + "--------- d_007 ---------- "
- call tdModifyRotate
+ call tdModifyRotate
end sub
'-------------------------------------------------------------------------------
@@ -648,10 +557,10 @@ sub hOpenGallery
ToolsGallery
WaitSlot (2000)
Kontext "Gallery"
- if Gallery.NotExists(2) then
- ToolsGallery
- WaitSlot (2000)
- end if
+ if Gallery.NotExists(2) then
+ ToolsGallery
+ WaitSlot (2000)
+ end if
end sub
'-------------------------------------------------------------------------
@@ -667,27 +576,27 @@ sub LoadGraphic ( sFile as String, bOK as Boolean ) as boolean
Kontext
Active.SetPage TabType
Kontext "TabType"
- OriginalSize.Click
- iW = Val ( makeNumOutOfText ( Width.GetText ) )
- iH = Val ( makeNumOutOfText ( Height.GetText )
- if instr ( sFile, "photo" ) <> 0 then
- iWMax = 22
- iHMax = 25
- else
- iWMax = 17
- iHMax = 25
- end if
- if iW > iWMax OR iH > iHMax then
- printlog sFile + " :"
- warnlog "Size is too big ( max should be '" + iWMax + "' cm* '" + iHMax + "'cm DinA4 with default borders ), but it is '" + iW + "' * '" + iH + "'"
- LoadGraphic = false
- end if
- TabType.OK
- sleep (1)
+ OriginalSize.Click
+ iW = Val ( makeNumOutOfText ( Width.GetText ) )
+ iH = Val ( makeNumOutOfText ( Height.GetText )
+ if instr ( sFile, "photo" ) <> 0 then
+ iWMax = 22
+ iHMax = 25
+ else
+ iWMax = 17
+ iHMax = 25
+ end if
+ if iW > iWMax OR iH > iHMax then
+ printlog sFile + " :"
+ warnlog "Size is too big ( max should be '" + iWMax + "' cm* '" + iHMax + "'cm DinA4 with default borders ), but it is '" + iW + "' * '" + iH + "'"
+ LoadGraphic = false
+ end if
+ TabType.OK
+ sleep (1)
Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "<Delete>"
- sleep (1)
- bOK = TRUE
+ DocumentWriter.TypeKeys "<Delete>"
+ sleep (1)
+ bOK = TRUE
end sub
'-------------------------------------------------------------------------
@@ -715,30 +624,30 @@ end sub
'-------------------------------------------------------------------------
sub id_001
- printLog Chr(13) + "--------- id_001 ----------"
-
- qaerrorlog "#74988# tiFilePassword outcommented due to bug. -FHA"
- call tiFilePassword
- call tiFileSaveAs
- call tiFileReload
- call tiFileVersion
- printlog " File->Send not possible to test, because extrnal prg get's called!"
- call tiFileTemplates
-' Call tiFileNew instead i call:
- call tmFileNewFromTemplate
- call tmFileOpen
- call tmFileClose
- call tmFileSave
- call tmFileSaveAs
- call tmFileExit
-
- call tmFileSaveAll
- call tmFileProperties
- call tdFileExport
- call tmFilePrinterSetting
- ' special cases
- ' Call AutoPilot 'inc\desktop\autopilo.inc
- call tmFileExit ' don't test because unpredictable behaviour
+ printLog Chr(13) + "--------- id_001 ----------"
+
+ qaerrorlog "#74988# tiFilePassword outcommented due to bug. -FHA"
+ call tiFilePassword
+ call tiFileSaveAs
+ call tiFileReload
+ call tiFileVersion
+ printlog " File->Send not possible to test, because extrnal prg get's called!"
+ call tiFileTemplates
+ ' Call tiFileNew instead i call:
+ call tmFileNewFromTemplate
+ call tmFileOpen
+ call tmFileClose
+ call tmFileSave
+ call tmFileSaveAs
+ call tmFileExit
+
+ call tmFileSaveAll
+ call tmFileProperties
+ call tdFileExport
+ call tmFilePrinterSetting
+ ' special cases
+ ' Call AutoPilot 'inc\desktop\autopilo.inc
+ call tmFileExit ' don't test because unpredictable behaviour
end sub
'------------------------------------------------------------------------------
@@ -766,73 +675,91 @@ end sub
'-------------------------------------------------------------------------
sub id_003
- printLog Chr(13) + "--------- id_003 ----------"
+ printLog Chr(13) + "--------- id_003 ----------"
- call tiViewNavigator
- call tiViewZoom
- call tiViewToolbar
- Call tToolsCustomize 'global\required\include
- call tiViewDisplayQuality
- call tiViewLayer
- call tViewSnapLines
- call tViewGrid
+ call tiViewNavigator
+ call tiViewZoom
+ call tiViewToolbar
+ Call tToolsCustomize 'global\required\include
+ call tiViewDisplayQuality
+ call tiViewLayer
+ call tViewSnapLines
+ call tViewGrid
end sub
'-------------------------------------------------------------------------
sub id_004
- printLog Chr(13) + "--------- id_004 ----------"
+ printLog Chr(13) + "--------- id_004 ----------"
- call tiInsertSlide
- call tiInsertDuplicateSlide
+ call tiInsertSlide
+ call tiInsertDuplicateSlide
' v expand slide
' v summary slide
- call tiInsertField
- call tiInsertSpecialCharacter
- call tiInsertHyperlink
- call tiInsertScan
- call tiInsertGraphic
- call tiInsertObjectSound
- call tiInsertObjectVideo
- call tiInsertObjectSound
- call tiInsertObjectVideo
- call tiInsertChart
- call tiInsertObjectOLEObjects
- call tiInsertSpreadsheet
- call tiInsertFormula
- call tiInsertFloatingFrame
- call tiInsertFile
- call tiInsertPlugin
- call tiInsertSnappointLine
- call tdInsertLayer ' IMPRESS: Edit->Layer->Insert
+ call tiInsertField
+ call tiInsertSpecialCharacter
+ call tiInsertHyperlink
+ call tiInsertScan
+ call tiInsertGraphic
+ call tiInsertObjectSound
+ call tiInsertObjectVideo
+ call tiInsertObjectSound
+ call tiInsertObjectVideo
+ call tiInsertChart
+ call tiInsertObjectOLEObjects
+ call tiInsertSpreadsheet
+ call tiInsertFormula
+ call tiInsertFloatingFrame
+ call tiInsertFile
+ call tiInsertPlugin
+ call tiInsertSnappointLine
+ call tdInsertLayer ' IMPRESS: Edit->Layer->Insert
end sub
'------------------------------------------------------------------------------
sub id_005
- printLog Chr(13) + "--------- id_005 ----------"
-
- call tiFormatDefault
- call tiFormatLine
- call tdFormatArea
- call tiFormatText
- call tiFormatPositionAndSize
- call tiFormatCharacter
- call tiFormatControlForm
-' ^ Form
- call tiFormatDimensions
- call tiFormatConnector
- call tiFormat3D_Effects
- call tiFormatNumberingBullets
- call tiFormatCaseCharacter
- call tiFormatParagraph
- call tiFormatPage
- call tiFormatStylesAndFormatting
- call tiFormatStylesSlideDesign
- call tiFormatFontwork
- call tiFormatGroup
- printlog " format->group is also modify->group "
-' tiFormatLayer ' not in impress
+ printLog Chr(13) + "--------- id_005 ----------"
+
+ call tiFormatDefault
+ call tiFormatLine
+ call tdFormatArea
+ call tiFormatText
+ call tiFormatPositionAndSize
+ call tiFormatCharacter
+ call tiFormatControlForm
+ ' ^ Form
+ call tiFormatDimensions
+ call tiFormatConnector
+ call tiFormat3D_Effects
+ call tiFormatNumberingBullets
+ call tiFormatCaseCharacter
+ call tiFormatParagraph
+ call tiFormatPage
+ call tiFormatStylesAndFormatting
+ call tiFormatStylesSlideDesign
+ call tiFormatFontwork
+ call tiFormatGroup
+ printlog " format->group is also modify->group "
+ ' tiFormatLayer ' not in impress
+end sub
+
+'------------------------------------------------------------------------------
+sub id_006
+
+ printLog Chr(13) + "--------- id_006 ----------"
+
+ call tiToolsSpellchecking
+ call tiToolsSpellcheckingAutomatic
+ call tiToolsThesaurus
+ call tiToolsHyphenation
+ call tiToolsAutoCorrect
+ call tChineseTranslation
+ call tiToolsMacro
+ call tiToolsGallery
+ call tiToolsEyedropper
+ call tiToolsOptions ' get just called one time here...
+ Call tToolsOptionsTest ' global one
end sub
'-------------------------------------------------------------------------------
@@ -864,16 +791,16 @@ end sub
'-------------------------------------------------------------------------------
sub id_008
- printLog Chr(13) + "--------- id_008 ----------"
+ printLog Chr(13) + "--------- id_008 ----------"
- Call tiWindowNewWindow
- call tidWindow123
+ Call tiWindowNewWindow
+ call tidWindow123
end sub
'------------------------------------------------------------------------------
sub id_009
- printLog Chr(13) + "--------- id_009 ----------"
+ printLog Chr(13) + "--------- id_009 ----------"
call tCheckIfTheHelpExists
Call tmHelpContents
@@ -889,165 +816,169 @@ sub id_011
printLog Chr(13) + "--------- id_011 ----------"
- call tdBezierToolbar
+ call tdBezierToolbar
call tiDrawObjectBar
call tiTextToolbar
call tiGraphicsObjectBar
call tiGluepointToolbar
- end sub
+end sub
'-------------------------------------------------------------------------------'
sub hWalkTheStyles (optional a as integer,optional b as integer)
dim i as integer
-
+
if isMissing (a) then a=1
if isMissing (b) then b=2
i=1
if a <= i AND i <= b then
- Kontext
- printlog " switch to tabpage 'Line' "
- Messagebox.SetPage TabLinie
- kontext "TabLinie"
- Call DialogTest ( TabLinie )
- Kontext
- printlog " switch to tabpage 'Area' "
- Messagebox.SetPage TabArea
- kontext "TabArea"
- Call DialogTest ( TabArea )
- printlog " select radio button 'none' "
- NoFill.Check
- Call DialogTest ( TabArea, 1 )
- printlog " select radio button 'color' "
- Color.Check
- Call DialogTest ( TabArea, 2 )
- printlog " select radio button 'gradient' "
- Gradient.Check
- Call DialogTest ( TabArea, 3 )
- printlog " select radio button 'hatching' "
- Hatching.Check
- Call DialogTest ( TabArea, 4 )
- printlog " select radio button 'bitmap' "
- Bitmap.Check
- Call DialogTest ( TabArea, 5 )
- Kontext
- printlog " switch to tabpage 'shadowing' "
- Messagebox.SetPage TabSchatten
- kontext "TabSchatten"
- printlog " check 'use shadow' "
- Anzeigen.check
- Call DialogTest ( TabSchatten )
- Kontext
- printlog " switch to tabpage 'Transparency' "
- Messagebox.SetPage TabTransparenz
- kontext "TabTransparenz"
- printlog " check 'No transparency' "
- KeineTransparenz.Check
- printlog " check 'Transparency' "
- LineareTransparenz.Check
- printlog " check 'Gradient' "
- Transparenzverlauf.Check
- Kontext
- printlog " switch to tabpage 'Font' "
- Messagebox.SetPage TabFont
- kontext "TabFont"
- Call DialogTest ( TabFont )
- Kontext
- printlog " switch to tabpage 'Font Effect' "
- Messagebox.SetPage TabFontEffects
- kontext "TabFontEffects"
- Kontext
- printlog " switch to tabpage 'indents & spacing' "
- Messagebox.SetPage TabEinzuegeUndAbstaende
- kontext "TabEinzuegeUndAbstaende"
- Call DialogTest ( TabEinzuegeUndAbstaende )
+ Kontext
+ printlog " switch to tabpage 'Line' "
+ Messagebox.SetPage TabLinie
+ kontext "TabLinie"
+ Call DialogTest ( TabLinie )
+ Kontext
+ printlog " switch to tabpage 'Area' "
+ Messagebox.SetPage TabArea
+ kontext "TabArea"
+ Call DialogTest ( TabArea )
+ printlog " select radio button 'none' "
+ NoFill.Check
+ Call DialogTest ( TabArea, 1 )
+ printlog " select radio button 'color' "
+ Color.Check
+ Call DialogTest ( TabArea, 2 )
+ printlog " select radio button 'gradient' "
+ Gradient.Check
+ Call DialogTest ( TabArea, 3 )
+ printlog " select radio button 'hatching' "
+ Hatching.Check
+ Call DialogTest ( TabArea, 4 )
+ printlog " select radio button 'bitmap' "
+ Bitmap.Check
+ Call DialogTest ( TabArea, 5 )
+ Kontext
+ printlog " switch to tabpage 'shadowing' "
+ Messagebox.SetPage TabSchatten
+ kontext "TabSchatten"
+ printlog " check 'use shadow' "
+ Anzeigen.check
+ Call DialogTest ( TabSchatten )
+ Kontext
+ printlog " switch to tabpage 'Transparency' "
+ Messagebox.SetPage TabTransparenz
+ kontext "TabTransparenz"
+ printlog " check 'No transparency' "
+ KeineTransparenz.Check
+ printlog " check 'Transparency' "
+ LineareTransparenz.Check
+ printlog " check 'Gradient' "
+ Transparenzverlauf.Check
+ Kontext
+ printlog " switch to tabpage 'Font' "
+ Messagebox.SetPage TabFont
+ kontext "TabFont"
+ Call DialogTest ( TabFont )
+ Kontext
+ printlog " switch to tabpage 'Font Effect' "
+ Messagebox.SetPage TabFontEffects
+ kontext "TabFontEffects"
+ Kontext
+ printlog " switch to tabpage 'indents & spacing' "
+ Messagebox.SetPage TabEinzuegeUndAbstaende
+ kontext "TabEinzuegeUndAbstaende"
+ Call DialogTest ( TabEinzuegeUndAbstaende )
endif
i=2
if a <= i AND i <= b then
- Kontext
- printlog " switch to tabpage 'Organize' "
- Messagebox.SetPage TabVerwalten
- kontext "TabVerwalten"
- Call DialogTest ( TabVerwalten )
- Kontext
- printlog " switch to tabpage 'text' "
- Messagebox.SetPage TabText
- Kontext "TabText"
- Call DialogTest ( TabText )
- Kontext
- printlog " switch to tabpage 'text animation' "
- Messagebox.SetPage TabLauftext
- Kontext "TabLauftext"
- Call DialogTest ( TabLauftext )
- Kontext
- printlog " switch to tabpage 'dimension' "
- Messagebox.SetPage TabBemassung
- Kontext "TabBemassung"
- Call DialogTest ( TabBemassung )
- Kontext
- printlog " switch to tabpage 'connector' "
- Messagebox.setpage TabVerbinder
- Kontext "TabVerbinder"
- Call Dialogtest ( TabVerbinder )
- Kontext
- printlog " switch to tabpage 'alignment' "
- Messagebox.setpage TabAusrichtungAbsatz
- Kontext "TabAusrichtungAbsatz"
- Links.Check
- Rechts.Check
- Zentriert.Check
- Blocksatz.Check
- Kontext
- printlog " switch to tabpage 'Tabs' "
- Messagebox.setpage TabTabulator
- Kontext "TabTabulator"
- printlog " click 'new' "
- Neu.click
- printlog " ' MAYBE CHECK COUNT OF THIS ?? Position svx:MetricBox:RID_SVXPAGE_TABULATOR:ED_TABPOS "
- printlog " click 'delete all' "
- AlleLoeschen.click
- printlog " click 'new' "
- Neu.click
- printlog " click 'delete' "
- Loeschen.click
+ Kontext
+ printlog " switch to tabpage 'Organize' "
+ Messagebox.SetPage TabVerwalten
+ kontext "TabVerwalten"
+ Call DialogTest ( TabVerwalten )
+ Kontext
+ printlog " switch to tabpage 'text' "
+ Messagebox.SetPage TabText
+ Kontext "TabText"
+ Call DialogTest ( TabText )
+ Kontext
+ printlog " switch to tabpage 'text animation' "
+ Messagebox.SetPage TabLauftext
+ Kontext "TabLauftext"
+ Call DialogTest ( TabLauftext )
+ Kontext
+ printlog " switch to tabpage 'dimension' "
+ Messagebox.SetPage TabBemassung
+ Kontext "TabBemassung"
+ Call DialogTest ( TabBemassung )
+ Kontext
+ printlog " switch to tabpage 'connector' "
+ Messagebox.setpage TabVerbinder
+ Kontext "TabVerbinder"
+ Call Dialogtest ( TabVerbinder )
+ Kontext
+ printlog " switch to tabpage 'alignment' "
+ Messagebox.setpage TabAusrichtungAbsatz
+ Kontext "TabAusrichtungAbsatz"
+ Links.Check
+ Rechts.Check
+ Zentriert.Check
+ Blocksatz.Check
+ Kontext
+ printlog " switch to tabpage 'Tabs' "
+ Messagebox.setpage TabTabulator
+ Kontext "TabTabulator"
+ printlog " click 'new' "
+ Neu.click
+ printlog " ' MAYBE CHECK COUNT OF THIS ?? Position svx:MetricBox:RID_SVXPAGE_TABULATOR:ED_TABPOS "
+ printlog " click 'delete all' "
+ AlleLoeschen.click
+ printlog " click 'new' "
+ Neu.click
+ printlog " click 'delete' "
+ Loeschen.click
endif
i=3
if a <= i AND i <= b then
- Kontext
- printlog " switch to tabpage 'Bullets' "
- Messagebox.SetPage TabBullet
- Kontext "TabBullet"
- sleep 1
- Call DialogTest (TabBullet)
- sleep 1
- Kontext
- printlog " switch to tabpage 'Numbering Type' "
- Messagebox.SetPage TabNumerierungsart
- Kontext "TabNumerierungsart"
- sleep 1
- Call DialogTest (TabNumerierungsart)
- sleep 1
- Kontext
- printlog " switch to tabpage 'Graphics' "
- Messagebox.SetPage TabGrafiken
- Kontext "TabGrafiken"
- sleep 1
- Call DialogTest (TabGrafiken)
- sleep 1
- Kontext
- printlog " switch to tabpage 'Customize' "
- Messagebox.SetPage TabOptionenNumerierung
- Kontext "TabOptionenNumerierung"
- sleep 1
- Call DialogTest (TabOptionenNumerierung)
- sleep 1
+ Kontext
+ printlog " switch to tabpage 'Bullets' "
+ Messagebox.SetPage TabBullet
+ Kontext "TabBullet"
+ sleep 1
+ Call DialogTest (TabBullet)
+ sleep 1
+ Kontext
+ printlog " switch to tabpage 'Numbering Type' "
+ Messagebox.SetPage TabNumerierungsart
+ Kontext "TabNumerierungsart"
+ sleep 1
+ Call DialogTest (TabNumerierungsart)
+ sleep 1
+ Kontext
+ printlog " switch to tabpage 'Graphics' "
+ Messagebox.SetPage TabGrafiken
+ Kontext "TabGrafiken"
+ sleep 1
+ Call DialogTest (TabGrafiken)
+ sleep 1
+ Kontext
+ printlog " switch to tabpage 'Customize' "
+ Messagebox.SetPage TabOptionenNumerierung
+ Kontext "TabOptionenNumerierung"
+ sleep 1
+ Call DialogTest (TabOptionenNumerierung)
+ sleep 1
endif
end sub
'---------------------------------------------------------------------------------------
sub sSelectEmptyLayout
if gApplication = "IMPRESS" then
+ Kontext "DocumentImpress"
+ DocumentImpress.UseMenu
+ hMenuSelectNr (5)
+ hMenuSelectNr (13)
printlog "Changing focus to TaskPane."
kontext "Tasks"
sleep (1)
diff --git a/testautomation/math/optional/includes/m_101_.inc b/testautomation/math/optional/includes/m_101_.inc
index e529119e0bfc..2fc34b5c1f01 100644..100755
--- a/testautomation/math/optional/includes/m_101_.inc
+++ b/testautomation/math/optional/includes/m_101_.inc
@@ -429,7 +429,7 @@ testcase tFilePrint
DokumentWriter.MouseUp 99,99
sFileName = convertpath( gOfficePath + "user/work/math/level1/ftc_a.odt")
- if (hFileExists(sFileName)) then
+ if (FileExists(sFileName)) then
'/// goto end of page; insert page break ///'
kontext "DokumentWriter"
DokumentWriter.typeKeys "<mod1 end>"
@@ -660,20 +660,12 @@ function hSpeichernUnterMitFilterKillTBO (sFileName as String, sFilterName, opti
Dim bAlienNotAllowed as boolean
sDerName = ConvertPath (sFileName)
-
- if hFileExists (sDerName) = TRUE then
- try
- app.kill (sDerName)
- catch
- Exceptlog
- endcatch
- end if
-
- if FileExists(sDerName) then
- warnlog "file '" & sDerName & "' couldn't be deleted. Exiting function now..."
+ if ( not hDeleteFile( sDerName ) ) then
+ warnlog( "Aborting function because the file could not be deleted: " & sDerName )
+ hSpeichernUnterMitFilterKillTBO() = FALSE
exit function
- end if
-
+ endif
+
sleep (1)
FileSaveAs
Kontext "SpeichernDlg"
diff --git a/testautomation/math/required/includes/m_001_.inc b/testautomation/math/required/includes/m_001_.inc
index 371f7f090d52..7696cb852d29 100644
--- a/testautomation/math/required/includes/m_001_.inc
+++ b/testautomation/math/required/includes/m_001_.inc
@@ -31,8 +31,8 @@
'*
'\*****************************************************************
- global cActFilter as string ' used filter for save
- Const cActFilterExt = ".odf" ' used filter for save (extension)
+global cActFilter as string ' used filter for save
+Const cActFilterExt = ".odf" ' used filter for save (extension)
' "StarMath 5.0" ".smf"
' Datei$ = convertpath( gOfficePath + "user\work\killme" + cActFilterExt)
@@ -40,338 +40,352 @@
' Datei = convertpath(gofficepath + "user\work\test"+cActFilterExt)
sub M_001_
- Printlog Chr(13) + "-- File Menu m_001_ --"
-
- cActFilter = gMathFilter
-
- Call tmFileNew
- Call tmFileOpen
-' Call Autopilot 'in Inc\desktop\autopilo.inc
- Call tmFileClose
- Call tmFileSave
- Call tmFileSaveAs
- Call tmFileSaveAll
- Call tmFileReload
- Call tmFileVersions
- Call tmExportAsPDF
- Call tExportAsPDFButton
- Call tmFileProperties
- Call tmFilePrinterSetting
- Call tmFilePassword
+ Printlog Chr(13) + "-- File Menu m_001_ --"
+
+ cActFilter = gMathFilter
+
+ Call tmFileNew
+ Call tmFileOpen
+ ' Call Autopilot 'in Inc\desktop\autopilo.inc
+ Call tmFileClose
+ Call tmFileSave
+ Call tmFileSaveAs
+ Call tmFileSaveAll
+ Call tmFileReload
+ Call tmFileVersions
+ Call tmExportAsPDF
+ Call tExportAsPDFButton
+ Call tmFileProperties
+ Call tmFilePrinterSetting
+ Call tmFilePassword
end sub
testcase tmFileNew
-'/// open application ///'
- Call hNewDocument
- '/// File->New->Templates and Documents ///'
- FileNewFromTemplate
- sleep 3
- Kontext "TemplateAndDocuments"
- if TemplateAndDocuments.exists (5) then
- try
- '/// klick button 'Organize' ///'
- Organize.click
- kontext "DVVerwalten"
- if DVVerwalten.exists (5) then
- Call DialogTest (DVVerwalten)
- sleep 1
- '/// close dialog 'Template Management' ///'
- DVVerwalten.close
- else
- warnlog "DVVerwalten didn't exist :-("
- endif
- catch
- warnlog "error ;-) - 1"
- endcatch
- else
- warnlog "templates and dokuments didn't exist :-("
- endif
- try
- sleep 1
- kontext "TemplateAndDocuments"
- sleep 1
- Call DialogTest ( TemplateAndDocuments )
- catch
- warnlog "no dialogtest possibele :-("
- endcatch
-
-' TBO i don't get in deep here, because it is not math specific
-' and IMHO it doesn't make that sense here!
-' should be enoug in writer...
- '/// close dialog 'Templates and Documents' ///'
- TemplateAndDocuments.Cancel
-'/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ Call hNewDocument
+ '/// File->New->Templates and Documents ///'
+ FileNewFromTemplate
+ sleep 3
+ Kontext "TemplateAndDocuments"
+ if TemplateAndDocuments.exists (5) then
+ try
+ '/// klick button 'Organize' ///'
+ Organize.click
+ kontext "DVVerwalten"
+ if DVVerwalten.exists (5) then
+ Call DialogTest (DVVerwalten)
+ sleep 1
+ '/// close dialog 'Template Management' ///'
+ DVVerwalten.close
+ else
+ warnlog "DVVerwalten didn't exist :-("
+ endif
+ catch
+ warnlog "error ;-) - 1"
+ endcatch
+ else
+ warnlog "templates and dokuments didn't exist :-("
+ endif
+ try
+ sleep 1
+ kontext "TemplateAndDocuments"
+ sleep 1
+ Call DialogTest ( TemplateAndDocuments )
+ catch
+ warnlog "no dialogtest possibele :-("
+ endcatch
+
+ ' TBO i don't get in deep here, because it is not math specific
+ ' and IMHO it doesn't make that sense here!
+ ' should be enoug in writer...
+ '/// close dialog 'Templates and Documents' ///'
+ TemplateAndDocuments.Cancel
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tmFilePassword
- Dim DokumentPfad$
- Dim Datei$
-'/// open application ///'
-while (getDocumentCount > 0)
-hCloseDocument
-wend
- hNewDocument
- '/// type a formula ///'
- SchreibenInMathdok "a over b"
-
- printlog "'/// - save doc as "+cActFilter+" with passwd - ///'"
- FileSaveAs
- Kontext "SpeichernDlg"
- Datei$ = convertpath( gOfficePath + "user\work\killme" + cActFilterExt)
- if Dir (Datei$) <> "" then kill Datei$
- printlog " Testfile: "+Datei$
- 'Dateityp.Select (cActFilter)
- Passwort.Check
- Dateiname.SetText Datei$
- Speichern.Click
- Kontext "Active"
- if Active.Exists (5) then
- ' TBO: ??? what will be ??!
- Printlog "(1/5) " + Active.GetText
- Active.Yes
- end if
-
- printlog "'/// Try wrong passwd confirmation ///'"
- Sleep 2
- Kontext "PasswordFileSave"
- sleep (2)
- try
- Password.SetText "12345"
- PasswordConfirm.Settext "54321"
- PasswordFileSave.OK
- Sleep 2
- catch
- warnlog "had to ask for passwd!!!!"
- endcatch
- Kontext
- if (Active.Exists (5) = FALSE ) then
- Warnlog "Wrong passwordinput not detected"
- else
- Printlog "(2/5) " + Active.GetText
- Active.OK
- end if
-
- printlog "'/// Now do it right ///'"
- Kontext "PasswordFileSave"
- try
- Password.SetText "12345"
- PasswordConfirm.Settext "12345"
- PasswordFileSave.OK
- catch
- warnlog "had to ask for passwd!!!!"
- endcatch
-
- Sleep 2
- printlog "'/// Gotcha & Close file/window ///'"
- FileClose
- sleep 1
-
- printlog "'/// load again with wrong passwd ///'"
- Call hFileOpen Datei$
- sleep 1
- Kontext "PasswordFileOpen"
- try
- Passwortname.SetText "34567"
- PasswordFileOpen.OK
- catch
- warnlog "had to ask for passwd!!!!"
- endcatch
- Kontext "Active"
- if Active.Exists(5) then
- Printlog "(3/5) " + Active.GetText
- Active.Ok
- else
- Warnlog "Wrong passwordinput not detected by loading the document"
- end if
-
- printlog "'///load now with right passwd ///'"
- Sleep 3
- 'Call hDateiOeffnen Datei$
- Kontext "PasswordFileOpen"
- try
- Passwortname.SetText "12345"
- PasswordFileOpen.OK
- catch
- warnlog "had to ask for passwd!!!!"
- endcatch
- Sleep 2
-
- printlog "'/// - save doc with new name under 6.... (has to be automagical selected by loading this doc!) w/o passwd - ///'"
- Datei$ = convertpath( gOfficePath + "user\work\Erwin2"+cActFilterExt)
- if Dir (Datei$) <> "" then kill Datei$
- FileSaveAs
- Kontext "SpeichernDlg"
- Dateiname.SetText Datei$
- if (Passwort.IsChecked <> TRUE) then
- Warnlog "#i36015# Password has to be checked! :-("
- Passwort.Check
- printlog "will be forced checked no!"
- endif
- Speichern.Click
- Kontext "Messagebox"
- '/// (if messagebox comes up, say YES) ///'
- if Messagebox.Exists(2) then
- Messagebox.Yes
- endif
- '/// password dialog has to show up! ///'
- Kontext "PasswordFileSave"
- if (PasswordFileSave.Exists(5) = FALSE)then
- Warnlog "- Password dialog Didn't popped up after pressing save"
- else
- Kontext "PasswordFileSave"
- '/// type password "a12345", confirm password: "a12345" -> RIGHT ///'
- Password.SetText "a12345"
- PasswordConfirm.SetText "a12345"
- PasswordFileSave.OK
- sleep 2
- '/// close document ///'
- FileClose
- sleep 1
- endif
- '/// open document ///'
- FileOpen
- sleep 1
- Kontext "OeffnenDlg"
- Dateiname.SetText Datei$
- Oeffnen.Click
- Kontext "PasswordFileOpen"
- sleep 1
- '/// type password: "a12345" -> RIGHT ///'
- PasswortName.SetText "a12345"
- PasswordFileOpen.OK
- sleep 5
- '/// File->SaveAs ///'
- FileSaveAs
- Kontext "SpeichernDlg"
- Dateiname.SetText Datei$
- if (Passwort.IsChecked <> TRUE) then
- Warnlog "#i36015# Password has to be checked! :-("
- Passwort.Check
- printlog "will be forced checked no!"
- endif
- Passwort.UnCheck
- '/// press 'save', without changing any checkbox! -> file has to be saved WITH password protection ///'
- Speichern.Click
- Kontext "Messagebox"
- '/// (if messagebox comes up, say YES) ///'
- if Messagebox.Exists(2) then Messagebox.Yes
- '/// password dialog needn't to show up! ///'
- Kontext "PasswordFileSave"
- if (PasswordFileSave.Exists(5))then
- Warnlog "- Password dialog neeedn't popped up after pressing save"
- Kontext "PasswordFileSave"
- passwordFileSave.cancel
- '/// close document ///'
- FileClose
- else
- '/// close document ///'
- hCloseDocument
- end if
+
+ Dim DokumentPfad$
+ Dim Datei$
+ '/// open application ///'
+ hFileCloseAll()
+ hNewDocument
+ '/// type a formula ///'
+ SchreibenInMathdok "a over b" : WaitSlot()
+
+ printlog "'/// - save doc as "+cActFilter+" with passwd - ///'"
+ hUseAsyncSlot( "FileSaveAs" )
+
+ Kontext "SpeichernDlg"
+ if ( SpeichernDlg.exists( 2 ) ) then
+ Datei$ = convertpath( gOfficePath + "user\work\killme" + cActFilterExt)
+ hDeleteFile( Datei$ )
+
+ printlog " Testfile: "+Datei$
+ Passwort.Check
+ Dateiname.SetText Datei$
+ Speichern.Click
+ Kontext "Active"
+ if Active.Exists (5) then
+ ' TBO: ??? what will be ??!
+ Printlog "(1/5) " + Active.GetText
+ hCloseDialog( Active, "yes" )
+ end if
+ else
+ warnlog( "File Save As dialog did not open" )
+ endif
+
+ printlog "'/// Try wrong passwd confirmation ///'"
+ Kontext "PasswordFileSave"
+ if ( PasswordFileSave.exists( 2 ) ) then
+ Password.SetText "12345"
+ PasswordConfirm.Settext "54321"
+ hCloseDialog( PasswordFileSave, "ok" )
+ else
+ warnlog( "Password dialog on File Save is missing" )
+ endif
+
+ Kontext
+ if ( Active.Exists ( 5 ) ) then
+ Printlog "(2/5) " + Active.GetText
+ hCloseDialog( Active, "ok" )
+ else
+ Warnlog "Wrong passwordinput not detected"
+ end if
+
+ printlog "'/// Now do it right ///'"
+ Kontext "PasswordFileSave"
+ if ( PasswordFileSave.exists( 3 ) ) then
+ Password.SetText "12345"
+ PasswordConfirm.Settext "12345"
+ hCloseDialog( PasswordFileSave, "ok" )
+ else
+ warnlog( "Password dialog on File Save is missing" )
+ endif
+
+ printlog "'/// Gotcha & Close file/window ///'"
+ hUseAsyncSlot( "FileClose" )
+
+ printlog "'/// load again with wrong passwd ///'"
+ Call hFileOpen( Datei$ )
+
+ Kontext "PasswordFileOpen"
+ if ( PasswordFileOpen.exists( 3 ) ) then
+ Passwortname.SetText "34567"
+ hCloseDialog( PasswordFileOpen, "ok" )
+ else
+ warnlog( "Password dialog on File Open is missing" )
+ endif
+
+ Kontext "Active"
+ if Active.Exists(5) then
+ Printlog "(3/5) " + Active.GetText
+ Active.Ok
+ else
+ Warnlog "Wrong passwordinput not detected by loading the document"
+ end if
+
+ printlog "'///load now with right passwd ///'"
+ Kontext "PasswordFileOpen"
+ if ( PasswordFileOpen.exists( 3 ) ) then
+ Passwortname.SetText "12345"
+ hCloseDialog( PasswordFileOpen, "ok" )
+ else
+ warnlog( "Password dialog on File Open is missing" )
+ endif
+
+ printlog "'/// - save doc with new name under 6.... (has to be automagical selected by loading this doc!) w/o passwd - ///'"
+ Datei$ = convertpath( gOfficePath + "user\work\Erwin2"+cActFilterExt)
+ hDeleteFile( Datei$ )
+
+ hUseAsyncSlot( "FileSaveAs" )
+
+ Kontext "SpeichernDlg"
+ if ( SpeichernDlg.exists( 2 ) ) then
+ Dateiname.SetText Datei$
+ if (Passwort.IsChecked <> TRUE) then
+ Warnlog "#i36015# Password has to be checked! :-("
+ Passwort.Check
+ printlog "will be forced checked no!"
+ endif
+ Speichern.Click
+ else
+ warnlog( "File Save dialog is missing" )
+ endif
+
+ Kontext "Messagebox"
+ '/// (if messagebox comes up, say YES) ///'
+ if Messagebox.Exists(2) then
+ Messagebox.Yes
+ endif
+ '/// password dialog has to show up! ///'
+ Kontext "PasswordFileSave"
+ if ( PasswordFileSave.exists( 2 ) ) then
+ '/// type password "a12345", confirm password: "a12345" -> RIGHT ///'
+ Password.SetText "a12345"
+ PasswordConfirm.SetText "a12345"
+ hCloseDialog( PasswordFileSave, "ok" )
+ else
+ warnlog( "Password dialog on FileSave is missing" )
+ endif
+ '/// close document ///'
+ hUseAsyncSlot( "FileClose" )
+ '/// open document ///'
+ hUseAsyncSlot( "FileOpen" )
+
+ Kontext "OeffnenDlg"
+ if ( OeffnenDlg.exists( 2 ) ) then
+ Dateiname.SetText Datei$
+ Oeffnen.Click
+ Kontext "PasswordFileOpen"
+ if ( PasswordFileOpen.exists( 2 ) ) then
+ '/// type password: "a12345" -> RIGHT ///'
+ PasswortName.SetText "a12345"
+ hCloseDialog( PasswordFileOpen, "ok" )
+ else
+ warnlog( "Password dialog on FileOpen is missing" )
+ endif
+ else
+ warnlog( "Failed to open File Open dialog" )
+ endif
+
+'/// File->SaveAs ///'
+ hUseAsyncSlot( "FileSaveAs" )
+ Kontext "SpeichernDlg"
+ Dateiname.SetText Datei$
+ if (Passwort.IsChecked <> TRUE) then
+ Warnlog "#i36015# Password has to be checked! :-("
+ Passwort.Check
+ printlog "will be forced checked no!"
+ endif
+ Passwort.UnCheck
+ '/// press 'save', without changing any checkbox! -> file has to be saved WITH password protection ///'
+ Speichern.Click
+ Kontext "Messagebox"
+ '/// (if messagebox comes up, say YES) ///'
+ if Messagebox.Exists(2) then Messagebox.Yes
+ '/// password dialog needn't to show up! ///'
+ Kontext "PasswordFileSave"
+ if (PasswordFileSave.Exists(5))then
+ Warnlog "- Password dialog neeedn't popped up after pressing save"
+ Kontext "PasswordFileSave"
+ hCloseDialog( passwordFileSave, "cancel" )
+ '/// close document ///'
+ hUseAsyncSlot( "FileClose" )
+ else
+ '/// close document ///'
+ hCloseDocument
+ end if
endcase
testcase tmFileReload
- Dim Datei as String
- dim sFilterName as string
- dim sFilter as string
- dim sFilterExt() as string
-
- Datei = convertpath(gofficepath + "user\work\test"+cActFilterExt)
- if Dir (Datei) <> "" then kill (Datei)
-
- ' make sure saving in latest math filter works, checking global filtername and if necessary change it
- sFilter = hGetUIFiltername("math8")
-
- '/// open application ///'
- hNewDocument
- '/// type a formula ///'
- call hTBOtypeInDoc
- '/// File->Save As ///'
- FileSaveAs
- Kontext "SpeichernDlg"
- '/// select the actual default file format ///'
- Dateityp.Select (hFindFilterPosition( sFilter ))
- '/// type a file name ///'
- Dateiname.SetText Datei
- '/// click button 'save' ///'
- Speichern.Click
- Kontext "Active"
- if Active.Exists(2) then Active.Yes
- sleep 3
- '/// File->Close ///'
- FileClose
- Kontext
- if MessageBox.Exists (1) then
- WarnLog "After Saving and Closing the following MessageBox appears: " + MessageBox.GetText
- MessageBox.Yes
- end if
-
- '/// open just saved file ///'
- Call hFileOpen Datei
- '/// type a formula ///'
- call hTBOtypeInDoc
- sleep (3)
- '/// File->Reload ///'
- FileReload
- sleep (3)
- Kontext
- if Active.Exists (1) then
- PrintLog "Say no to: " + Active.GetText
- '/// say NO to active ///'
- active.No
- else
- WarnLog "Missing smth to say no to! "
- end if
-
- Sleep 3
- '/// File->Reload ///'
- FileReload
- Kontext
- if Active.Exists (1) then
- PrintLog "Said yes to: " + Active.GetText
- '/// say YES to active ///'
- active.Yes
- end if
- '/// close application ///'
- Call hCloseDocument
+ Dim Datei as String
+ dim sFilterName as string
+ dim sFilter as string
+ dim sFilterExt() as string
+
+ Datei = convertpath(gofficepath + "user\work\test"+cActFilterExt)
+ hDeleteFile( Datei )
+
+ ' make sure saving in latest math filter works, checking global filtername and if necessary change it
+ sFilter = hGetUIFiltername("math8")
+
+ '/// open application ///'
+ hNewDocument
+ '/// type a formula ///'
+ call SchreibenInMathdok "a over b"
+ '/// File->Save As ///'
+ hUseAsyncSlot( "FileSaveAs" )
+ Kontext "SpeichernDlg"
+ if ( SpeichernDlg.exists( 2 ) ) then
+ '/// select the actual default file format ///'
+ Dateityp.Select (hFindFilterPosition( sFilter ))
+ '/// type a file name ///'
+ Dateiname.SetText Datei
+ '/// click button 'save' ///'
+ Speichern.Click
+ Kontext "Active"
+
+ if Active.Exists(2) then hCloseDialog( Active, "yes" )
+ else
+ warnlog( "File Save dialog did not open" )
+ endif
+
+ '/// File->Close ///'
+ hUseAsyncSlot( "FileClose" )
+ Kontext
+ if MessageBox.Exists (1) then
+ WarnLog "After Saving and Closing the following MessageBox appears: " + MessageBox.GetText
+ MessageBox.Yes
+ end if
+
+ '/// open just saved file ///'
+ Call hFileOpen( Datei )
+ '/// type a formula ///'
+ sleep( 2 )
+ call SchreibenInMathdok "a over b"
+ sleep( 2 )
+'/// File->Reload ///'
+ hUseAsyncSlot( "FileReload" )
+ Kontext
+ if Active.Exists ( 3 ) then
+ PrintLog "Say no to: " + Active.GetText
+ '/// say NO to active ///'
+ active.No
+ else
+ WarnLog "Missing smth to say no to! "
+ end if
+
+
+ '/// File->Reload ///'
+ hUseAsyncSlot( "FileReload" )
+ Kontext
+ if Active.Exists (1) then
+ PrintLog "Said yes to: " + Active.GetText
+ '/// say YES to active ///'
+ active.Yes
+ end if
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tmFileVersions
- Dim Datei as String
-
- Datei = ConvertPath (gOfficePath & "user/work/test"+cActFilterExt)
- if app.Dir (Datei) <> "" then app.kill (Datei)
-
- '/// open application ///'
- Call hNewDocument
- sleep 2
- '/// type a formula ///'
- SchreibenInMathdok "a over b"
- '/// save file ///'
- Call hFileSaveAs(Datei)
- Sleep 3
- try
- '/// File->Versions ///'
- FileVersions
- catch
- Warnlog "- File / Versions not accessible!"
- goto endsub
- endcatch
-
- Kontext "Versionen"
- Call DialogTest ( Versionen )
- '/// click button 'Save New Version' ///'
- Speichern.Click
- Kontext "VersionskommentarEingeben"
- Call DialogTest ( VersionskommentarEingeben )
- '/// cancel dialog 'Insert Version Comment' ///'
- VersionskommentarEingeben.Cancel
- Kontext "Versionen"
- '/// close dialog 'Version of ...' ///'
- Versionen.Close
- '/// close application ///'
- Call hCloseDocument
- if app.Dir (Datei) <> "" then app.kill Datei
+ Dim Datei as String
+
+ Datei = ConvertPath (gOfficePath & "user/work/test"+cActFilterExt)
+ if app.Dir (Datei) <> "" then app.kill (Datei)
+
+ '/// open application ///'
+ Call hNewDocument
+ sleep 2
+ '/// type a formula ///'
+ SchreibenInMathdok "a over b"
+ '/// save file ///'
+ Call hFileSaveAs(Datei)
+ Sleep 3
+ try
+ '/// File->Versions ///'
+ FileVersions
+ catch
+ Warnlog "- File / Versions not accessible!"
+ goto endsub
+ endcatch
+
+ Kontext "Versionen"
+ Call DialogTest ( Versionen )
+ '/// click button 'Save New Version' ///'
+ Speichern.Click
+ Kontext "VersionskommentarEingeben"
+ Call DialogTest ( VersionskommentarEingeben )
+ '/// cancel dialog 'Insert Version Comment' ///'
+ VersionskommentarEingeben.Cancel
+ Kontext "Versionen"
+ '/// close dialog 'Version of ...' ///'
+ Versionen.Close
+ '/// close application ///'
+ Call hCloseDocument
+ if app.Dir (Datei) <> "" then app.kill Datei
endcase
'-----------------------------------------------------------
@@ -379,284 +393,295 @@ endcase
'-----------------------------------------------------------
testcase tmFileOpen
-'/// open application ///'
- call hNewDocument
- '/// File->Open ///'
- FileOpen
- Kontext "OeffnenDlg"
- '/// klick button 'Up one level' ///'
- UebergeordneterOrdner.Click
- '/// klick button 'Default Directory' ///'
- Standard.Click
- '/// check checkbox 'Read Only' ///'
- NurLesen.check
- Call DialogTest ( OeffnenDlg )
- '/// cancel dialog 'Open' ///'
- OeffnenDlg.Cancel
- Sleep 2
- '/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ call hNewDocument
+ '/// File->Open ///'
+ FileOpen
+ Kontext "OeffnenDlg"
+ if ( OeffnenDlg.exists( 2 ) ) then
+ '/// klick button 'Up one level' ///'
+ UebergeordneterOrdner.Click
+ '/// klick button 'Default Directory' ///'
+ Standard.Click
+ '/// check checkbox 'Read Only' ///'
+ NurLesen.check
+ Call DialogTest ( OeffnenDlg )
+ '/// cancel dialog 'Open' ///'
+ hCloseDialog( OeffnenDlg, "cancel" )
+ endif
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tmFileClose
-'/// open application ///'
- hNewDocument ' just for the records: i open ONE document
- '/// type a formula ///'
- call hTBOtypeInDoc
- sleep (2)
- '/// File->Close ///'
- FileClose
- Kontext ' expecting 'modified, do you want to close?'
- if active.exists (5) then
- printlog " ok, active came up: " + active.gettext
- '/// say NO to active about 'modified stuff :-)' ///'
- Active.Cancel ' no, not this time
- else
- warnlog "active missing (1)"
- endif
- sleep (2)
- '/// File->Close ///'
- FileClose
- Kontext
- '/// say YES to active about 'modified stuff :-)' ///'
- Active.Yes ' but now - records: this document is closed
- sleep (2)
- Kontext "SpeichernDlg"
- Call DialogTest ( SpeichernDlg )
- '/// cancel dialog 'Save As' ///'
- SpeichernDlg.Cancel
- sleep (2)
-
- '/// File->Close ///'
- FileClose ' now the office gets closed! (if there were no modifications!)
- Kontext
- if active.exists (5) then Active.No
- sleep (2)
+ '/// open application ///'
+ hNewDocument ' just for the records: i open ONE document
+ '/// type a formula ///'
+ sleep( 2 )
+ call SchreibenInMathdok "a over b"
+ sleep( 2 )
+'/// File->Close ///'
+ hUseAsyncSlot( "FileClose" )
+ Kontext ' expecting 'modified, do you want to close?'
+ if active.exists (5) then
+ printlog " ok, active came up: " + active.gettext
+ '/// say NO to active about 'modified stuff :-)' ///'
+ Active.Cancel ' no, not this time
+ else
+ warnlog "active missing (1)"
+ endif
+
+ '/// File->Close ///'
+ hUseAsyncSlot( "FileClose" )
+ Kontext
+ '/// say YES to active about 'modified stuff :-)' ///'
+ hCloseDialog( Active, "yes" )
+
+ Kontext "SpeichernDlg"
+ if ( SpeichernDlg.exists( 2 ) ) then
+ Call DialogTest ( SpeichernDlg )
+ '/// cancel dialog 'Save As' ///'
+ hCloseDialog( SpeichernDlg, "cancel" )
+ else
+ warnlog( "File Save dialog did not open" )
+ endif
+
+ '/// File->Close ///'
+ hUseAsyncSlot( "FileClose" ) ' now the office gets closed! (if there were no modifications!)
+ Kontext
+ if active.exists (5) then hCloseDialog( Active, "No" )
+
endcase
testcase tmFileSave
-'/// open application ///'
- hNewDocument
- '/// type a formula ///'
- call hTBOtypeInDoc
- '/// File->Save ///'
- FileSave
- sleep 2
- Kontext "SpeichernDlg"
- UebergeordneterOrdner.click
- Standard.Click
-' NeuerOrdner.Click
-' DateiAuswahl.TypeKeys "Hallo<Return>"
-' DateiLoeschen
-' Kontext "Messagebox"
-' MessageBox.Yes
- Call DialogTest (SpeichernDlg)
- '/// cancel dialog 'Save' ///'
- SpeichernDlg.Cancel
- sleep 2
- '/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ hNewDocument
+ '/// type a formula ///'
+ call SchreibenInMathdok "a over b"
+ '/// File->Save ///'
+ hUseAsyncSlot( "FileSave" )
+
+ Kontext "SpeichernDlg"
+ if ( SpeichernDlg.exists( 2 ) ) then
+ UebergeordneterOrdner.click
+ Standard.Click
+ ' NeuerOrdner.Click
+ ' DateiAuswahl.TypeKeys "Hallo<Return>"
+ ' DateiLoeschen
+ ' Kontext "Messagebox"
+ ' MessageBox.Yes
+ Call DialogTest (SpeichernDlg)
+ '/// cancel dialog 'Save' ///'
+ hCloseDialog( SpeichernDlg, "cancel" )
+ else
+ warnlog( "File Save dialog did not open" )
+ endif
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tmFileSaveAs
-'/// open application ///'
- hNewDocument
- sleep (2)
- '/// type a formula ///'
- call hTBOtypeInDoc
- '/// File->Save As ///'
- FileSaveAs
- sleep 1
- Kontext "SpeichernDlg"
- if (SpeichernDlg.exists (5) = FALSE) then
- warnlog "error :-("
- endif
- sleep 2
- '/// check ceckbox 'save with Password' ///'
- Passwort.check
- '/// UNcheck ceckbox 'save with Password' ///'
- Passwort.uncheck
- '/// click button 'up one level' ///'
- UebergeordneterOrdner.click
- '/// click button 'default directory' ///'
- Standard.Click
- '/// click button 'create new directory' ///'
- NeuerOrdner.click
- kontext "NeuerOrdner"
- '/// cancel dialog 'create new folder' ///'
- NeuerOrdner.cancel
- Kontext "SpeichernDlg"
- Call DialogTest (SpeichernDlg)
- '/// cancel dialog 'Save As' ///'
- SpeichernDlg.Cancel
- sleep (2)
- '/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ hNewDocument
+ sleep (2)
+ '/// type a formula ///'
+ call SchreibenInMathdok "a over b"
+ '/// File->Save As ///'
+ hUseAsyncSlot( "FileSaveAs" )
+
+ Kontext "SpeichernDlg"
+ if (SpeichernDlg.exists ( 5 ) ) then
+
+ '/// check ceckbox 'save with Password' ///'
+ Passwort.check
+ '/// UNcheck ceckbox 'save with Password' ///'
+ Passwort.uncheck
+ '/// click button 'up one level' ///'
+ UebergeordneterOrdner.click
+ '/// click button 'default directory' ///'
+ Standard.Click
+ '/// click button 'create new directory' ///'
+ NeuerOrdner.click
+ kontext "NeuerOrdner"
+ '/// cancel dialog 'create new folder' ///'
+ NeuerOrdner.cancel
+ Kontext "SpeichernDlg"
+ Call DialogTest (SpeichernDlg)
+ '/// cancel dialog 'Save As' ///'
+ hCloseDialog( SpeichernDlg, "cancel" )
+ else
+ warnlog( "File Save dialog did not open" )
+ endif
+
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tmFileSaveAll
-'/// open application ///'
- hNewDocument
- '/// type a formula ///'
- call hTBOtypeInDoc
- Printlog " '/// open 2. window ///"
- hNewDocument
- '/// type a formula ///'
- call hTBOtypeInDoc
-
- Printlog " call save all"
- '/// File->Save All ///'
- FileSaveAll
- Printlog " cancel 1. save"
- Kontext "SpeichernDlg"
- if SpeichernDlg.exists(5) then
- '/// cancel dialog 'save as' ///'
- SpeichernDlg.Cancel
- else
- qaErrorlog "First File save dialog did not show up."
- endif
- Printlog " cancel 2. save"
- Kontext "SpeichernDlg"
- if SpeichernDlg.exists(5) then
- '/// cancel dialog 'save as' ///'
- SpeichernDlg.Cancel
- else
- qaErrorlog "Second File save dialog did not show up."
- endif
-
- try
- Kontext "SpeichernDlg"
- SpeichernDlg.Cancel
- printlog "smth had been typed in the starting window (just a hint ;-) )"
- catch
- printlog "--------- no other window want's to get saved. :-)"
- endcatch
-
- Sleep 2
- Printlog " hCloseDocument both"
- '/// close document ///'
- Call hCloseDocument
- sleep 2
- Printlog " first closed"
- '/// close application ///'
- try
- Call hCloseDocument
- catch
- printlog "any catching?"
- endcatch
- sleep 1
- Printlog " second closed"
- sleep (5)
+ '/// open application ///'
+ hNewDocument
+ '/// type a formula ///'
+ call SchreibenInMathdok "a over b"
+ Printlog " '/// open 2. window ///"
+ hNewDocument
+ '/// type a formula ///'
+ call SchreibenInMathdok "a over b"
+
+ Printlog " call save all"
+ '/// File->Save All ///'
+ FileSaveAll
+ Printlog " cancel 1. save"
+ Kontext "SpeichernDlg"
+ if SpeichernDlg.exists(5) then
+ '/// cancel dialog 'save as' ///'
+ SpeichernDlg.Cancel
+ else
+ qaErrorlog "First File save dialog did not show up."
+ endif
+ Printlog " cancel 2. save"
+ Kontext "SpeichernDlg"
+ if SpeichernDlg.exists(5) then
+ '/// cancel dialog 'save as' ///'
+ SpeichernDlg.Cancel
+ else
+ qaErrorlog "Second File save dialog did not show up."
+ endif
+
+ try
+ Kontext "SpeichernDlg"
+ SpeichernDlg.Cancel
+ printlog "smth had been typed in the starting window (just a hint ;-) )"
+ catch
+ printlog "--------- no other window want's to get saved. :-)"
+ endcatch
+
+ Sleep 2
+ Printlog " hCloseDocument both"
+ '/// close document ///'
+ Call hCloseDocument
+ sleep 2
+ Printlog " first closed"
+ '/// close application ///'
+ try
+ Call hCloseDocument
+ catch
+ printlog "any catching?"
+ endcatch
+ sleep 1
+ Printlog " second closed"
+ sleep (5)
endcase
testcase tmExportAsPDF
- dim sPDF as string
- dim sTemp as string
-
- sPDF = "PDF - Portable Document Format (.pdf)"
-
- '/// open application ///'
- Call hNewDocument
-
- '/// click the button 'Export Directly as PDF' on the Functionbar ///'
- kontext "Standardbar"
- Sleep 5
- ExportAsPDF.click
- ' the 'Export as PDF' dialog has to come up, with the only 'File type' 'PDF - Portable Document Format (.pdf)'
- kontext "ExportierenDlg"
- sTemp = Dateityp.GetSelText
- if (sTemp <> sPDF) then
- Warnlog "filter for PDF export is missing :-( should: '" + sPDF + "'; is: '" + + "'"
- endif
- '///+ - set Textbox 'File name' to "abc" ///'
- Dateiname.SetText "abc"
- '///+ - use the cursor keys in the filebrowser ///'
- DateiAuswahl.TypeKeys "<home><down>"
- '///+ - click on the button 'Up one level' ///'
- UebergeordneterOrdner.Click
- '///+ - click on the button 'Create New Directory' ///'
- NeuerOrdner.Click
- kontext "NeuerOrdner"
- '///+ - - in the dialog $Foldername set textfield 'New' to 'abc' ///'
- OrdnerName.SetText "abc"
- '///+ - - cancel dialog $Foldername ///'
- NeuerOrdner.cancel
- kontext "ExportierenDlg"
- '///+ - click on the button 'Default Directory' ///'
- Standard.Click
- '///+ - cancel dialog ///'
- Kontext "ExportierenDlg"
- ExportierenDlg.Cancel
-
- '/// close application ///'
- Call hCloseDocument
+ dim sPDF as string
+ dim sTemp as string
+
+ sPDF = "PDF - Portable Document Format (.pdf)"
+
+ '/// open application ///'
+ Call hNewDocument
+
+ '/// click the button 'Export Directly as PDF' on the Functionbar ///'
+ kontext "Standardbar"
+ Sleep 5
+ ExportAsPDF.click
+ ' the 'Export as PDF' dialog has to come up, with the only 'File type' 'PDF - Portable Document Format (.pdf)'
+ kontext "ExportierenDlg"
+ sTemp = Dateityp.GetSelText
+ if (sTemp <> sPDF) then
+ Warnlog "filter for PDF export is missing :-( should: '" + sPDF + "'; is: '" + + "'"
+ endif
+ '///+ - set Textbox 'File name' to "abc" ///'
+ Dateiname.SetText "abc"
+ '///+ - use the cursor keys in the filebrowser ///'
+ DateiAuswahl.TypeKeys "<home><down>"
+ '///+ - click on the button 'Up one level' ///'
+ UebergeordneterOrdner.Click
+ '///+ - click on the button 'Create New Directory' ///'
+ NeuerOrdner.Click
+ kontext "NeuerOrdner"
+ '///+ - - in the dialog $Foldername set textfield 'New' to 'abc' ///'
+ OrdnerName.SetText "abc"
+ '///+ - - cancel dialog $Foldername ///'
+ NeuerOrdner.cancel
+ kontext "ExportierenDlg"
+ '///+ - click on the button 'Default Directory' ///'
+ Standard.Click
+ '///+ - cancel dialog ///'
+ Kontext "ExportierenDlg"
+ hCloseDialog( ExportierenDlg, "cancel" )
+
+ '/// close application ///'
+ Call hCloseDocument
endcase
testcase tmFileProperties
-'/// open application ///'
- Call hNewDocument
- '/// File->Properties... ///'
- FileProperties
-
- Kontext
- '/// select tabpage 'General' ///'
- active.SetPage TabDokument
- Kontext "TabDokument"
- Call DialogTest ( TabDokument )
-
- Kontext
- '/// select tabpage 'Description' ///'
- active.SetPage TabDokumentInfo
- Kontext "TabDokumentInfo"
- Call DialogTest ( TabDokumentInfo )
-
- Kontext
- '/// select tabpage 'Internet' ///'
- active.SetPage TabInternet
- Kontext "TabInternet"
- Call DialogTest (TabInternet)
- TabInternet.Cancel
- '/// close application ///'
- Call hCloseDocument
-
- qaerrorlog "#i95523# Custom Properties is not controlable by VCL TestTool Application"
- goto endsub
-
- Kontext
- '/// select tabpage 'User defined' ///'
- active.SetPage TabBenutzer
- Kontext "TabBenutzer"
- Call DialogTest ( TabBenutzer )
- '/// click button 'info fields' ///'
- Infofelder.Click
- Kontext "InfonamenBearbeiten"
- Call DialogTest (InfonamenBearbeiten)
- '/// close dialog 'edit field names' ///'
- InfoNamenBearbeiten.Cancel
+ '/// open application ///'
+ Call hNewDocument
+ '/// File->Properties... ///'
+ hUseAsyncSlot( "FileProperties" )
+
+ Kontext
+ '/// select tabpage 'General' ///'
+ active.SetPage TabDokument
+ Kontext "TabDokument"
+ Call DialogTest ( TabDokument )
+
+ Kontext
+ '/// select tabpage 'Description' ///'
+ active.SetPage TabDokumentInfo
+ Kontext "TabDokumentInfo"
+ Call DialogTest ( TabDokumentInfo )
+
+ Kontext
+ '/// select tabpage 'Internet' ///'
+ active.SetPage TabInternet
+ Kontext "TabInternet"
+ Call DialogTest (TabInternet)
+ hCloseDialog( TabInternet, "cancel" )
+ '/// close application ///'
+ Call hCloseDocument
+
+ qaerrorlog "#i95523# Custom Properties is not controlable by VCL TestTool Application"
+ goto endsub
+
+ Kontext
+ '/// select tabpage 'User defined' ///'
+ active.SetPage TabBenutzer
+ Kontext "TabBenutzer"
+ Call DialogTest ( TabBenutzer )
+ '/// click button 'info fields' ///'
+ Infofelder.Click
+ Kontext "InfonamenBearbeiten"
+ Call DialogTest (InfonamenBearbeiten)
+ '/// close dialog 'edit field names' ///'
+ hCloseDialog( InfoNamenBearbeiten, "cancel" )
endcase
testcase tmFilePrinterSetting
-'/// open application ///'
- Call hNewDocument
- sleep 3
- '/// File->Printer Settings ///'
- FilePrintersettings
- kontext
- if active.exists(2) then
- active.ok
- qaerrorlog "There is no printer available - please install one on your system!"
- endif
- Kontext "DruckerEinrichten"
- Call DialogTest (DruckerEinrichten)
- sleep 2
- '/// cancel dialog 'printer setup' ///'
- DruckerEinrichten.Cancel
- sleep 2
- '/// close application ///'
- Call hCloseDocument
+ '/// open application ///'
+ Call hNewDocument
+
+'/// File->Printer Settings ///'
+ hUseAsyncSlot( "FilePrintersettings" )
+ kontext
+ if active.exists(2) then
+ active.ok
+ qaerrorlog "There is no printer available - please install one on your system!"
+ endif
+
+ Kontext "DruckerEinrichten"
+ if ( DruckerEinrichten.exists( 2 ) ) then
+ Call DialogTest (DruckerEinrichten)
+
+ '/// cancel dialog 'printer setup' ///'
+ hCloseDialog( DruckerEinrichten, "cancel" )
+ else
+ warnlog( "Printer Configuration dialog did not open" )
+ endif
+
+ '/// close application ///'
+ Call hCloseDocument
endcase
-sub hTBOtypeInDoc
- SchreibenInMathdok "a over b"
-end sub
diff --git a/testautomation/math/required/includes/m_002_.inc b/testautomation/math/required/includes/m_002_.inc
index 860ba8ae0135..d65d49cb188b 100644..100755
--- a/testautomation/math/required/includes/m_002_.inc
+++ b/testautomation/math/required/includes/m_002_.inc
@@ -46,7 +46,7 @@ testcase tmEditUndoRedo
hNewDocument
kontext "DocumentMath"
'/// type something into the document ///'
- call hTBOtypeInDoc
+ call SchreibenInMathdok "a over b"
try
'/// Edit->Undo ///'
EditUndo
@@ -70,7 +70,7 @@ testcase tmEditAllClipboard
' Commands.TypeKeys Eingabe
'/// type something into the document ///'
- call hTBOtypeInDoc
+ call SchreibenInMathdok "a over b"
'/// Edit->Select All ///'
EditSelectAllMath
Sleep 2
diff --git a/testautomation/math/required/includes/m_007_.inc b/testautomation/math/required/includes/m_007_.inc
index 9fe712a516a8..99cc9e729412 100644..100755
--- a/testautomation/math/required/includes/m_007_.inc
+++ b/testautomation/math/required/includes/m_007_.inc
@@ -49,7 +49,7 @@ testcase tmHelpHelpAgent
'/// open application ///'
Call hNewDocument
- hTBOtypeInDoc
+ SchreibenInMathdok "a over b"
HelpHelpAgent ' it's just a switch
sleep 2
@@ -62,7 +62,7 @@ endcase
testcase tmHelpTips
'/// open application ///'
Call hNewDocument
- hTBOtypeInDoc
+ SchreibenInMathdok "a over b"
HelpTips
Sleep 2
@@ -75,7 +75,7 @@ endcase
testcase tmHelpExtendedTips
'/// open application ///'
Call hNewDocument
- hTBOtypeInDoc
+ SchreibenInMathdok "a over b"
HelpEntendedHelp
Sleep (2)
@@ -88,7 +88,7 @@ endcase
testcase tmHelpAboutStarOffice
'/// open application ///'
Call hNewDocument
- hTBOtypeInDoc
+ SchreibenInMathdok "a over b"
HelpAboutStarOffice
Kontext "UeberStarMath"
diff --git a/testautomation/math/required/includes/m_020_.inc b/testautomation/math/required/includes/m_020_.inc
index b2edf7170ede..b1e423d62f2e 100644..100755
--- a/testautomation/math/required/includes/m_020_.inc
+++ b/testautomation/math/required/includes/m_020_.inc
@@ -40,33 +40,33 @@ testcase tMainToolbar
'/// open application ///'
Call hNewDocument
'/// type something into document ///'
- hTBOtypeInDoc
+ SchreibenInMathdok( "a over b" )
kontext "Toolbar"
'/// click buttons on Main Toolbar ///'
'/// click 'Zoom in' ///'
- Vergroessern.Click
+ hClickButton( Vergroessern )
'/// click 'Zoom out' ///'
- Verkleinern.Click
+ hClickButton( Verkleinern )
'/// click 'Zoom 100%' ///'
- ZoomHundertProzent.Click
+ hClickButton( ZoomHundertProzent )
'/// click 'Zoom inEntire Formula' ///'
- GanzeFormel.Click
+ hClickButton( GanzeFormel )
'/// click 'Refresh' ///'
- FormelAktualisieren.Click
+ hClickButton( FormelAktualisieren )
'/// click 'Formula Cursor' ///'
- FormulaCursor.Click
+ hClickButton( FormulaCursor )
'/// click 'Symbols' ///'
- FormelSymbole.Click
+ hClickButton( FormelSymbole )
kontext "SymboleMath"
- if (SymboleMath.exists <> TRUE) then
- warnlog "Symbols Dialog didn't came up :-("
- else
+ if ( SymboleMath.exists( 1 ) ) then
'/// close dialog 'Symbols' ///'
- SymboleMath.close
+ hCloseDialog( SymboleMath, "close" )
+ else
+ warnlog( "Dialog <SymboleMath> did not open" )
endif
kontext "Toolbar"
'/// click 'Formula Cursor' ///'
- FormulaCursor.Click
+ hClickButton( FormulaCursor )
'/// close application ///'
Call hCloseDocument
endcase
diff --git a/testautomation/spreadsheet/optional/includes/import_general/c_import_general.inc b/testautomation/spreadsheet/optional/includes/import_general/c_import_general.inc
index c8cc9ddb308f..87c6d899b7bb 100644..100755
--- a/testautomation/spreadsheet/optional/includes/import_general/c_import_general.inc
+++ b/testautomation/spreadsheet/optional/includes/import_general/c_import_general.inc
@@ -55,6 +55,31 @@ end sub
'
'-------------------------------------------------------------------------------
'
+function IsItLoaded as boolean
+ '/// IsItLoaded
+ '/// Wait until document is loaded
+ Dim iLoop as integer
+
+ IsItLoaded = FALSE
+ sleep(3)
+ for iLoop =1 to 20
+ try
+ 'Calling slot 'IsDocLoading'
+ IsItLoaded = IsDocLoading
+ catch
+ IsItLoaded = FALSE
+ endcatch
+
+ if IsItLoaded = TRUE then
+ exit for
+ end if
+ sleep(1)
+ next iLoop
+ sleep(2)
+end function
+'
+'-------------------------------------------------------------------------------
+'
testcase tLoadSpreadsheetDocument (SourceFile)
Dim sOnlyFileName as string
Dim sOnlyFileExtension as string
@@ -115,7 +140,7 @@ function fCalcFileOpen (sDocName as string, optional bLinked as boolean) as bool
sSourceFile = ConvertPath ( sDocName )
fCalcFileOpen = TRUE
- if hFileExists (sSourceFile) = FALSE then
+ if FileExists (sSourceFile) = FALSE then
warnlog "fCalcFileOpen: '" + sSourceFile + "' does not exists!"
fCalcFileOpen = FALSE
else
diff --git a/testautomation/spreadsheet/required/includes/c_upd_editmenu.inc b/testautomation/spreadsheet/required/includes/c_upd_editmenu.inc
index 07c769cf3bbf..9af880af0e18 100644..100755
--- a/testautomation/spreadsheet/required/includes/c_upd_editmenu.inc
+++ b/testautomation/spreadsheet/required/includes/c_upd_editmenu.inc
@@ -304,18 +304,13 @@ testcase tEditSelectAll
'/// Select whole sheet via Edit - Select All
printlog " Select whole sheet via Edit - Select All"
EditSelectAll
- '/// Check in areafield if the whole sheet is selected (A1:AMJ65536)
- printlog " Check in areafield if the whole sheet is selected (A1:AMJ65536)"
+ '/// Check in areafield if the whole sheet is selected (A1:AMJ1048576)
+ printlog " Check in areafield if the whole sheet is selected (A1:AMJ1048576)"
kontext "RechenleisteCalc"
- if Bereich.getSelText = "A1:AMJ65536" then
+ if Bereich.getSelText = "A1:AMJ1048576" then
printlog " - SelectAll is working"
else
- if Bereich.getSelText = "A1:IV65536" then
- printlog " - SelectAll is working"
- QaErrorLog "This should be a spreadsheet before the column limit (256 -> 1024) was enhanced"
- else
- warnlog "SelectAll is not working as expected. The area is " & Bereich.getSelText & " instead of A1:IV65536"
- end if
+ warnlog "SelectAll is not working as expected. The area is " & Bereich.getSelText & " instead of A1:AMJ1048576"
end if
'/// Close document
printlog " Close document"
diff --git a/testautomation/spreadsheet/required/includes/c_upd_insertmenu.inc b/testautomation/spreadsheet/required/includes/c_upd_insertmenu.inc
index 7c779b341a08..be27490e3b18 100644..100755
--- a/testautomation/spreadsheet/required/includes/c_upd_insertmenu.inc
+++ b/testautomation/spreadsheet/required/includes/c_upd_insertmenu.inc
@@ -395,139 +395,145 @@ testcase tInsertHyperlink
'/// Open 'Hyperlink' – dialog via 'Insert – Hyperlink'
printlog " Open 'Hyperlink' – dialog via 'Insert – Hyperlink'"
InsertHyperlink
- WaitSlot( 5000 )
+
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
- Kontext "Hyperlink"
- '/// Switch to category 'Internet' (first one)
- printlog " Switch to category 'Internet'"
- Auswahl.TypeKeys "<HOME>"
- '/// Choose 'Web'
- printlog " Choose 'Web'"
- Kontext "TabHyperlinkInternet"
- internet.check
- Call DialogTest ( TabHyperlinkInternet,1 )
- '/// Click on 'Target in Document' – button (the target dialog appears)
- printlog " Click on 'Target in Document' – button (the target dialog appears)"
- Target.Click
- Kontext "ZielImDokument"
- Call DialogTest ( ZielImDokument )
- '/// Close 'Target' – dialog with 'Close'
- printlog " Close 'Target' – dialog with 'Close'"
- ZielImDokument.Close
- Kontext "TabHyperlinkInternet"
- '/// Choose 'FTP'
- printlog " Choose 'FTP'"
- FTP.check
- Call DialogTest ( TabHyperlinkInternet,2 )
- '/// Check that the 'Target' – button is disabled
- printlog " Check that the 'Target' – button is disabled"
- if Target.IsEnabled then
- warnlog "The target button is enabled, but should be disabled"
- end if
- '/// Check option 'Anonymous User'
- printlog " Check option 'Anonymous User'"
- AnonymerBenutzer.Check
- '/// Check that 'Login Name' is disabled
- printlog " Check that 'Login Name' is disabled"
- if Loginname.IsEnabled then
- warnlog "The Loginname is enabled, but should be disabled"
- end if
- '/// Chose 'Telnet'
- printlog " Chose 'Telnet'"
- Telnet.check
- Call DialogTest ( TabHyperlinkInternet,3 )
- '/// Check that the 'Target' – button is disabled
- printlog " Check that the 'Target' – button is disabled"
- if Target.IsEnabled then
- warnlog "The target button is enabled, but should be disabled"
- end if
- '/// Switch to category 'Mail & News'
- Kontext "Hyperlink"
- Auswahl.TypeKeys "<DOWN>"
- Kontext "TabHyperlinkMailUndNews"
- Call DialogTest ( TabHyperlinkMailUndNews )
- '/// Click twice on 'Data Source' – button to turn on / off the databasebeamer
- printlog " Click twice on 'Data Source' – button to turn on / off the databasebeamer"
- Adressbuch.click
- Adressbuch.click
- '/// Check option 'Mail'
- printlog " Check option 'Mail'"
- EMail.check
- '/// Check that the editfield for 'Receiver' is enabled
- printlog " Check that the editfield for 'Receiver' is enabled"
- if not Receiver.IsEnabled then
- warnlog "Receiver is disabled but should be enabled"
- end if
- '/// Check that the editfield for 'Subject' is enabled
- printlog " Check that the editfield for 'Subject' is enabled"
- if not Betreff.IsEnabled then
- warnlog "Subject is disabled but should be enabled"
- end if
- '/// Check option 'News'
- printlog " Check option 'News'"
- News.check
- '/// Check that the editfield for 'Subject' is disabled
- printlog " Check that the editfield for 'Subject' is disabled"
- if Betreff.IsEnabled then
- warnlog "Subject is enabled but should be disabled"
- end if
- '/// Switch to category Document
- printlog " Switch to category Document"
- Kontext "Hyperlink"
- Auswahl.TypeKeys "<DOWN>"
- Kontext "TabHyperlinkDokument"
- Call DialogTest ( TabHyperlinkDokument )
- '/// Enter 'Test' in 'Path'
- printlog " Enter 'Test' in 'Path'"
- Path.TypeKeys "Test"
- '/// Click on 'Open' – button
- printlog " Click on 'Open' – button"
- DateiOeffnen.click
- Kontext "OeffnenDlg"
- '/// Close 'Open' – dialog with 'Cancel'
- printlog " Close 'Open' – dialog with 'Cancel'"
- OeffnenDlg.Cancel
- Kontext "TabHyperlinkDokument"
- '/// Click on 'Target in Document' – button (the target dialog appears)
- printlog " Click on 'Target in Document' – button (the target dialog appears)"
- Target.click
- Kontext "ZielImDokument"
- '/// Close 'Target' – dialog with 'Close'
- printlog " Close 'Target' – dialog with 'Close'"
- ZielImDokument.close
- Kontext "Hyperlink"
- '/// Switch to category 'New Document'
- printlog " Switch to category 'New Document'"
- Auswahl.TypeKeys "<DOWN>"
- Kontext "TabHyperlinkNeuesDokument"
- Call DialogTest ( TabHyperlinkNeuesDokument )
- '/// Check 'Edit Now'
- printlog " Click 'Edit Now'"
- SofortBearbeiten.check
- '/// Check 'Edit Later'
- printlog " Click 'Edit Later'"
- SpaeterBearbeiten.check
- '/// Click on 'Select Path' – button
- printlog " Click on 'Select Path' – button"
- Pfad.click
- Kontext "OeffnenDlg"
- '/// Close 'Select Path' – dialog with 'Cancel'
- printlog " Close 'Select Path' – dialog with 'Cancel'"
- OeffnenDlg.Cancel
- Kontext "TabHyperlinkNeuesDokument"
- '/// Check that the 'Frame' listbox has items
- printlog " Check that the 'Frame' listbox has items"
- if Frame.GetItemCount < 1 then
- warnlog "The Frame combobox is empty"
- end if
- '/// Check that the 'Form' listbox has 2 entries
- printlog " Check that the 'Form' listbox has 2 entries"
- if Form.GetItemCount <> 2 then
- warnlog "The Form combobox has not 2 items"
- end if
- '/// Close 'Hyperlink' – dialog with 'Close'
- printlog " Close 'Hyperlink' – dialog with 'Close'"
- TabHyperlinkNeuesDokument.Cancel
+ Kontext "Hyperlink"
+ '/// Switch to category 'Internet' (first one)
+ printlog " Switch to category 'Internet'"
+ Auswahl.TypeKeys "<HOME>"
+ '/// Choose 'Web'
+ printlog " Choose 'Web'"
+ Kontext "TabHyperlinkInternet"
+ internet.check
+ Call DialogTest ( TabHyperlinkInternet,1 )
+ '/// Click on 'Target in Document' – button (the target dialog appears)
+ printlog " Click on 'Target in Document' – button (the target dialog appears)"
+ Target.Click
+ Kontext "ZielImDokument"
+ Call DialogTest ( ZielImDokument )
+ '/// Close 'Target' – dialog with 'Close'
+ printlog " Close 'Target' – dialog with 'Close'"
+ ZielImDokument.Close
+ Kontext "TabHyperlinkInternet"
+ '/// Choose 'FTP'
+ printlog " Choose 'FTP'"
+ FTP.check
+ Call DialogTest ( TabHyperlinkInternet,2 )
+ '/// Check that the 'Target' – button is disabled
+ printlog " Check that the 'Target' – button is disabled"
+ if Target.IsEnabled then
+ warnlog "The target button is enabled, but should be disabled"
+ end if
+ '/// Check option 'Anonymous User'
+ printlog " Check option 'Anonymous User'"
+ AnonymerBenutzer.Check
+ '/// Check that 'Login Name' is disabled
+ printlog " Check that 'Login Name' is disabled"
+ if Loginname.IsEnabled then
+ warnlog "The Loginname is enabled, but should be disabled"
+ end if
+ '/// Chose 'Telnet'
+ printlog " Chose 'Telnet'"
+ Telnet.check
+ Call DialogTest ( TabHyperlinkInternet,3 )
+ '/// Check that the 'Target' – button is disabled
+ printlog " Check that the 'Target' – button is disabled"
+ if Target.IsEnabled then
+ warnlog "The target button is enabled, but should be disabled"
+ end if
+ '/// Switch to category 'Mail & News'
+ Kontext "Hyperlink"
+ Auswahl.TypeKeys "<DOWN>"
+ Kontext "TabHyperlinkMailUndNews"
+ Call DialogTest ( TabHyperlinkMailUndNews )
+ '/// Click twice on 'Data Source' – button to turn on / off the databasebeamer
+ printlog " Click twice on 'Data Source' – button to turn on / off the databasebeamer"
+ Adressbuch.click
+ Adressbuch.click
+ '/// Check option 'Mail'
+ printlog " Check option 'Mail'"
+ EMail.check
+ '/// Check that the editfield for 'Receiver' is enabled
+ printlog " Check that the editfield for 'Receiver' is enabled"
+ if not Receiver.IsEnabled then
+ warnlog "Receiver is disabled but should be enabled"
+ end if
+ '/// Check that the editfield for 'Subject' is enabled
+ printlog " Check that the editfield for 'Subject' is enabled"
+ if not Betreff.IsEnabled then
+ warnlog "Subject is disabled but should be enabled"
+ end if
+ '/// Check option 'News'
+ printlog " Check option 'News'"
+ News.check
+ '/// Check that the editfield for 'Subject' is disabled
+ printlog " Check that the editfield for 'Subject' is disabled"
+ if Betreff.IsEnabled then
+ warnlog "Subject is enabled but should be disabled"
+ end if
+ '/// Switch to category Document
+ printlog " Switch to category Document"
+ Kontext "Hyperlink"
+ Auswahl.TypeKeys "<DOWN>"
+ Kontext "TabHyperlinkDokument"
+ Call DialogTest ( TabHyperlinkDokument )
+ '/// Enter 'Test' in 'Path'
+ printlog " Enter 'Test' in 'Path'"
+ Path.TypeKeys "Test"
+ '/// Click on 'Open' – button
+ printlog " Click on 'Open' – button"
+ DateiOeffnen.click
+ Kontext "OeffnenDlg"
+ '/// Close 'Open' – dialog with 'Cancel'
+ printlog " Close 'Open' – dialog with 'Cancel'"
+ OeffnenDlg.Cancel
+ Kontext "TabHyperlinkDokument"
+ '/// Click on 'Target in Document' – button (the target dialog appears)
+ printlog " Click on 'Target in Document' – button (the target dialog appears)"
+ Target.click
+ Kontext "ZielImDokument"
+ '/// Close 'Target' – dialog with 'Close'
+ printlog " Close 'Target' – dialog with 'Close'"
+ ZielImDokument.close
+ Kontext "Hyperlink"
+ '/// Switch to category 'New Document'
+ printlog " Switch to category 'New Document'"
+ Auswahl.TypeKeys "<DOWN>"
+ Kontext "TabHyperlinkNeuesDokument"
+ Call DialogTest ( TabHyperlinkNeuesDokument )
+ '/// Check 'Edit Now'
+ printlog " Click 'Edit Now'"
+ SofortBearbeiten.check
+ '/// Check 'Edit Later'
+ printlog " Click 'Edit Later'"
+ SpaeterBearbeiten.check
+ '/// Click on 'Select Path' – button
+ printlog " Click on 'Select Path' – button"
+ Pfad.click
+ Kontext "OeffnenDlg"
+ '/// Close 'Select Path' – dialog with 'Cancel'
+ printlog " Close 'Select Path' – dialog with 'Cancel'"
+ OeffnenDlg.Cancel
+ Kontext "TabHyperlinkNeuesDokument"
+ '/// Check that the 'Frame' listbox has items
+ printlog " Check that the 'Frame' listbox has items"
+ if Frame.GetItemCount < 1 then
+ warnlog "The Frame combobox is empty"
+ end if
+ '/// Check that the 'Form' listbox has 2 entries
+ printlog " Check that the 'Form' listbox has 2 entries"
+ if Form.GetItemCount <> 2 then
+ warnlog "The Form combobox has not 2 items"
+ end if
+ '/// Close 'Hyperlink' – dialog with 'Close'
+ printlog " Close 'Hyperlink' – dialog with 'Close'"
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close()
+ else
+ warnlog( "Failed to open <HyperlinkDialog>" )
+ endif
'/// Close document
printlog " Close starting document"
call hCloseDocument
diff --git a/testautomation/spreadsheet/required/includes/c_upd_toolsmenu2.inc b/testautomation/spreadsheet/required/includes/c_upd_toolsmenu2.inc
index 0023dac1c4b3..91a806fd33ae 100644..100755
--- a/testautomation/spreadsheet/required/includes/c_upd_toolsmenu2.inc
+++ b/testautomation/spreadsheet/required/includes/c_upd_toolsmenu2.inc
@@ -166,9 +166,10 @@ testcase tToolsMacro
printlog " Close Select Certificate' dialog with 'Cancel'"
SelectCertificate.Cancel
Kontext "DigitalSignature"
+ add.click
'/// Close 'Digital Signatures' dialog with 'Cancel'
printlog " Close 'Digital Signatures' dialog with 'Cancel'"
- DigitalSignature.Cancel
+ DigitalSignature.ok
'/// Open 'Macro Organizer' by 'Tools – Macro – Organize Dialogs'
printlog " Open 'Macro Organizer' by 'Tools – Macro – Organize Dialogs'"
ToolsMacrosOrganizeDialogs
diff --git a/testautomation/tools/run_tests/run_tests.vbs b/testautomation/tools/run_tests/run_tests.vbs
index 963e60c3c584..f32ab73c55aa 100755
--- a/testautomation/tools/run_tests/run_tests.vbs
+++ b/testautomation/tools/run_tests/run_tests.vbs
@@ -1,27 +1,27 @@
'**************************************************************************
-' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-'
-' Copyright 2000, 2010 Oracle and/or its affiliates.
-'
-' OpenOffice.org - a multi-platform office productivity suite
-'
-' 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.
-'
+' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+'
+' Copyright 2000, 2010 Oracle and/or its affiliates.
+'
+' OpenOffice.org - a multi-platform office productivity suite
+'
+' 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.
+'
'*
'########################################################################
'
diff --git a/testautomation/writer/optional/includes/autotext/w_autotext.inc b/testautomation/writer/optional/includes/autotext/w_autotext.inc
index 11cc9d0955b6..2921a66e5d7b 100644..100755
--- a/testautomation/writer/optional/includes/autotext/w_autotext.inc
+++ b/testautomation/writer/optional/includes/autotext/w_autotext.inc
@@ -199,7 +199,7 @@ testcase tEditAutotext_1
Warnlog "New autotext has not been found!"
Autotext.Close
else
- Call wDocSetContext
+ hSetDocumentContext()
Call wTypeKeys("<Shift Home>")
EditCopy
if GetClipboardtext <> "This becomes an autotext!" then
@@ -263,7 +263,7 @@ testcase tEditAutotext_2
wait 500
Kontext "Autotext"
Autotext.Close
- Call wDocSetContext
+ hSetDocumentContext()
printlog " Insert some text and format text"
Call wTypeKeys("This becomes an autotext!")
' Format word 'This'
@@ -392,7 +392,7 @@ testcase tEditAutotext_2
Warnlog "New autotext has not been found!"
Autotext.Close
else
- Call wDocSetContext
+ hSetDocumentContext()
Call wTypeKeys("<Home><Up>" , 4)
Call wTypeKeys("<Shift End>")
EditCopy
diff --git a/testautomation/writer/optional/includes/clipboard/clipbrd_func.inc b/testautomation/writer/optional/includes/clipboard/clipbrd_func.inc
index bad0c5f41dae..278ecd229eda 100755
--- a/testautomation/writer/optional/includes/clipboard/clipbrd_func.inc
+++ b/testautomation/writer/optional/includes/clipboard/clipbrd_func.inc
@@ -78,7 +78,7 @@ function wPasteAvailableClipboardFormats(TheNumber as integer, CheckWhat as Stri
QAErrorlog " - " + Active.Gettext + "->Bug#110181"
Active.Ok
end if
- Call wDocSetContext
+ hSetDocumentContext()
Call wTypeKeys "<Escape>",2
Select Case gApplication
Case "WRITER","MASTERDOCUMENT","HTML"
diff --git a/testautomation/writer/optional/includes/drawing/w_drawing_tools1.inc b/testautomation/writer/optional/includes/drawing/w_drawing_tools1.inc
index 8ffdb8afe37e..1b2579ee0aaf 100644..100755
--- a/testautomation/writer/optional/includes/drawing/w_drawing_tools1.inc
+++ b/testautomation/writer/optional/includes/drawing/w_drawing_tools1.inc
@@ -925,7 +925,7 @@ testcase tLine_6
soeFile = ConvertPath(gOfficePath + "user\work\standard_reserver.soe")
soeDefaultFile = ConvertPath(gOfficePath + "user\config\standard.soe")
- if hFileExists ( soeFile ) then app.kill ( soeFile )
+ if FileExists ( soeFile ) then app.kill ( soeFile )
PrintLog "- check the attributes in format/line/arrow styles"
@@ -1007,7 +1007,7 @@ testcase tLine_6
Kontext
Kontext "TabLinienenden"
- if hFileExists ( soeDefaultFile ) then app.kill ( soeDefaultFile )
+ if FileExists ( soeDefaultFile ) then app.kill ( soeDefaultFile )
Speichern.Click
Kontext
diff --git a/testautomation/writer/optional/includes/drawing/w_drawing_tools2.inc b/testautomation/writer/optional/includes/drawing/w_drawing_tools2.inc
index f0f6e458b8b4..0207a177c706 100644..100755
--- a/testautomation/writer/optional/includes/drawing/w_drawing_tools2.inc
+++ b/testautomation/writer/optional/includes/drawing/w_drawing_tools2.inc
@@ -610,7 +610,7 @@ testcase tGroup_12
PrintLog "- Edit object group via Menu Format/Group/Edit Group"
sDocument = ConvertPath ( gOfficePath +"user\work\tGroup_12.odt")
- if hFileExists ( sDocument ) then app.kill ( sDocument )
+ if FileExists ( sDocument ) then app.kill ( sDocument )
Call hNewDocument
diff --git a/testautomation/writer/optional/includes/fields/w_fields2.inc b/testautomation/writer/optional/includes/fields/w_fields2.inc
index 0514ba5b020e..4023480ff7dd 100755
--- a/testautomation/writer/optional/includes/fields/w_fields2.inc
+++ b/testautomation/writer/optional/includes/fields/w_fields2.inc
@@ -401,7 +401,7 @@ testcase tDocumentFilename
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
diff --git a/testautomation/writer/optional/includes/fields/w_fields4.inc b/testautomation/writer/optional/includes/fields/w_fields4.inc
index 20069da398c1..f498051225db 100755
--- a/testautomation/writer/optional/includes/fields/w_fields4.inc
+++ b/testautomation/writer/optional/includes/fields/w_fields4.inc
@@ -276,7 +276,7 @@ testcase tDocInformationUserDefined
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
@@ -360,7 +360,7 @@ testcase tDocInformationCreated
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
@@ -474,7 +474,7 @@ testcase tDocInformationModified
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
@@ -490,7 +490,7 @@ testcase tDocInformationModified
printlog "Doc Information - Modified"
'/// <b> Doc Information - Modified </b>
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
Call hNewDocument
@@ -584,7 +584,7 @@ testcase tDocInformationModified
endcatch
end if
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
endcase
@@ -611,7 +611,7 @@ testcase tDocInformationModifiedSavefile
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
@@ -624,7 +624,7 @@ testcase tDocInformationModifiedSavefile
sFixResult(1) = "08/18/2000"
sFixResult(2) = "11:40:11"
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
printlog "Doc Information - Modified (save file)"
'/// <b> Doc Information - Modified (save file)</b>
@@ -706,7 +706,7 @@ testcase tDocInformationModifiedSavefile
endcatch
end if
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
endcase
@@ -730,7 +730,7 @@ testcase tDocInformationPrinted
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
@@ -859,13 +859,13 @@ testcase tDocInformationRevisionnumber
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
sSaveasFile = ConvertPath (gOfficePath + "user\work\tDocInformationRevisionnumber.sxw" )
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
printlog "Doc Information - Revision number"
'/// <b> Doc Information - Revision number</b>
@@ -938,7 +938,7 @@ testcase tDocInformationRevisionnumber
endcatch
end if
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
endcase
@@ -958,13 +958,13 @@ testcase tDocInformationTotaleditingtime
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
sSaveasFile = ConvertPath (gOfficePath + "user\work\tDocInformationRevisionnumber.sxw" )
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
printlog "Doc Information - Tatal editing time"
'/// <b> Doc Information - Tatal editing time </b>
@@ -1026,7 +1026,7 @@ testcase tDocInformationTotaleditingtime
endcatch
end if
- if hFileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
+ if FileExists ( sSaveAsFile ) then app.kill ( sSaveAsFile )
endcase
diff --git a/testautomation/writer/optional/includes/fields/w_fields5.inc b/testautomation/writer/optional/includes/fields/w_fields5.inc
index 6c8b5e7ca12a..d0ef15f71fb3 100755
--- a/testautomation/writer/optional/includes/fields/w_fields5.inc
+++ b/testautomation/writer/optional/includes/fields/w_fields5.inc
@@ -685,7 +685,7 @@ testcase tVariablesDDEFieldManual
printlog "DDE field - manual"
'/// <b> DDE field - manual </b>
- if hFileExists ( sDDEFile ) then app.kill ( sDDEFile )
+ if FileExists ( sDDEFile ) then app.kill ( sDDEFile )
Call hNewDocument
@@ -752,7 +752,7 @@ testcase tVariablesDDEFieldManual
Call hCloseDocument
- if hFileExists ( sDDEFile ) then app.kill ( sDDEFile )
+ if FileExists( sDDEFile ) then app.kill ( sDDEFile )
endcase
@@ -780,7 +780,7 @@ testcase tVariablesDDEFieldAutomatic
printlog "DDE field - automatic"
'/// <b> DDE field - automatic </b>
- if hFileExists ( sDDEFile ) then app.kill ( sDDEFile )
+ if FileExists ( sDDEFile ) then app.kill ( sDDEFile )
Call hNewDocument
@@ -834,7 +834,7 @@ testcase tVariablesDDEFieldAutomatic
Call hCloseDocument
- if hFileExists ( sDDEFile ) then app.kill ( sDDEFile )
+ if FileExists ( sDDEFile ) then app.kill ( sDDEFile )
endcase
diff --git a/testautomation/writer/optional/includes/fields/w_fields7.inc b/testautomation/writer/optional/includes/fields/w_fields7.inc
index fdec55afb9ce..70dfedc62085 100644..100755
--- a/testautomation/writer/optional/includes/fields/w_fields7.inc
+++ b/testautomation/writer/optional/includes/fields/w_fields7.inc
@@ -220,7 +220,7 @@ testcase tL10NtestDate
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
@@ -343,7 +343,7 @@ testcase tL10NtestTime
' document has to be copied to local file system to avoid opening a read-only file
' because all field data gets lost if documents write-protection is removed via 'sMakeReadOnlyDocumentEditable'
FileCopy (sOriginalFile, sTestFile)
- if hFileExists ( sTestFile ) = false then
+ if FileExists ( sTestFile ) = false then
Warnlog "Test document couldn't be copied to local file system. Test aborted!"
goto endsub
end if
diff --git a/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion1.inc b/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion1.inc
index e58a4a2a94da..33b20cf3c910 100755
--- a/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion1.inc
+++ b/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion1.inc
@@ -47,6 +47,9 @@
testcase tHHNoSelction_1
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -65,13 +68,14 @@ testcase tHHNoSelction_1
'/// Open a test file , which includes some Korean characters
'/// + and some Chinese characters
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Set focus before the 3rd character
Call wTypeKeys "<MOD1 Home>"
Call wTypeKeys "<Down>"
'/// Tools / HangulHanjaConversion
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
'/// Press Peplace button
@@ -112,6 +116,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHNoSelction_2
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -131,12 +138,13 @@ testcase tHHNoSelction_2
'/// + Germany , French , Korean and Chinese characters
'/// + (Korean is before Chinese)
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Set focus to the beginning
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
'/// Press Peplace button
@@ -166,6 +174,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHNoSelction_3
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -185,12 +196,13 @@ testcase tHHNoSelction_3
'/// + Germany , French , Korean and Chinese characters
'/// + (Chinese is before Korean)
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Set focus to the beginning
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
'/// Press Peplace button
@@ -221,6 +233,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHNoSelction_4
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
@@ -236,13 +251,14 @@ testcase tHHNoSelction_4
'/// + Germany , French characters .
'/// + There are no Chinese and Korean
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Set focus to the beginning
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion ,
'/// + nothing should happen
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
if HangulHanjaConversion.Exists then
@@ -257,6 +273,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHNoSelction_5
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -273,12 +292,13 @@ testcase tHHNoSelction_5
'/// Open a test file , which includes some Chinese and Korean
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Set focus to the end of the file
Call wTypeKeys "<MOD1 End>"
'/// Tools / HangulHanjaConversion ,
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
Sleep 1
if Word.GetText <> sResult then
@@ -293,6 +313,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHNoSelction_6
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -311,6 +334,7 @@ testcase tHHNoSelction_6
'/// Open a test file , which includes some Chinese and Korean,
'/// + the 3rd character in 1st line isn't convertible
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Set focus to the 3rd character (korean)
Call wTypeKeys "<MOD1 Home>"
@@ -319,7 +343,7 @@ testcase tHHNoSelction_6
'/// Tools / HangulHanjaConversion , Replace and Always Replace
'/// + should be disabled , "suggestion" should be empty .
'/// + Press Ignore button will jump to the next convertible Hangul/Hanja character
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
if Suggestions.GetItemCount <> 0 then
Warnlog "Suggestion should be empty !"
@@ -354,6 +378,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHNoSelction_7
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -372,6 +399,7 @@ testcase tHHNoSelction_7
'/// Open a test file , which includes some Chinese and Korean,
'/// + the 3rd character in 2nd line isn't convertible
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Set focus to the 3rd chinese character
Call wTypeKeys "<MOD1 Home><Down><Home>"
@@ -382,7 +410,7 @@ testcase tHHNoSelction_7
'/// Tools / HangulHanjaConversion , Replace and Always Replace
'/// + should be disabled , "suggestion" should be empty .
'/// + Press Ignore button will jump to the next convertible Hangul/Hanja character
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
if Suggestions.GetItemCount <> 0 then
Warnlog "Suggestion should be empty !"
@@ -417,6 +445,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHSingleSelction_1
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -436,6 +467,7 @@ testcase tHHSingleSelction_1
'/// Open a test file , which includes some Chinese and Korean
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Select from 4th to 7th character
Call wTypeKeys "<MOD1 Home>"
@@ -444,7 +476,7 @@ testcase tHHSingleSelction_1
'/// Tools / HangulHanjaConversion ,
'/// + Press Peplace button
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
if ReplaceBtn.IsEnabled then
ReplaceBtn.Click
@@ -475,6 +507,9 @@ endcase
'----------------------------------------------------------------
testcase tHHMultiSelction_1
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -493,13 +528,14 @@ testcase tHHMultiSelction_1
'/// Open a test file , which includes some Korean chacters
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Do a multi Selectiong to the charcters -- 입력
Call fFindWord(sMultiWord)
'/// Tools / HangulHanjaConversion ,
'/// + Press Peplace button
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
ReplaceBtn.Click
Sleep 1
@@ -522,6 +558,9 @@ endcase
'----------------------------------------------------------------
testcase tHHTextBox_1
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
@@ -535,6 +574,7 @@ testcase tHHTextBox_1
'/// Open a test file , which includes a text box and
'/// + some Korean chacters in the text box
Call hFileOpen(sTestFile)
+ sMakeReadOnlyDocumentEditable()
'/// Tools / HangulHanjaConversion , the below 4 checkboxes ralated
'/// + ruby should be disabled .
@@ -543,7 +583,7 @@ testcase tHHTextBox_1
'/// -> 'Hangul As Ruby Above Hanja'
'/// -> 'Hangul As Ruby Below Hanja'
try
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
if NOT HangulHanjaConversion.Exists then
Warnlog "Hangul/Hanja Conversion dialogue isn't poped up !"
@@ -590,6 +630,9 @@ endcase
'----------------------------------------------------------------
testcase tHHDrawBox_1
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
@@ -603,7 +646,7 @@ testcase tHHDrawBox_1
'/// Open a test file , which includes a draw box and
'/// + some Korean chacters in the text box
Call hFileOpen(sTestFile)
-
+ sMakeReadOnlyDocumentEditable()
'/// Tools / HangulHanjaConversion , the below 4 checkboxes ralated
'/// + ruby should be disabled .
'/// -> 'Hanja As Ruby Above Hangul'
@@ -611,7 +654,7 @@ testcase tHHDrawBox_1
'/// -> 'Hangul As Ruby Above Hanja'
'/// -> 'Hangul As Ruby Below Hanja'
try
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
if NOT HangulHanjaConversion.Exists then
Warnlog "Hangul/Hanja Conversion dialogue isn't poped up !"
diff --git a/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion2.inc b/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion2.inc
index 2d57bfc19d7e..5b9fc83f58de 100755
--- a/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion2.inc
+++ b/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion2.inc
@@ -61,6 +61,9 @@
'\***********************************************************************
testcase tHHConversion_1
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -77,12 +80,12 @@ testcase tHHConversion_1
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion ,
'/// + Press Peplace button
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
For i = 1 to 15
if NOT HangulHanjaConversion.Exists then
@@ -108,6 +111,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_2
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -123,7 +129,7 @@ testcase tHHConversion_2
'/// Open a test file , which includes some
'/// + Chinese character and Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , check hanja only .
@@ -155,6 +161,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_3
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -171,7 +180,7 @@ testcase tHHConversion_3
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , check Hanja(Hangul)
@@ -204,6 +213,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_4
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -220,7 +232,7 @@ testcase tHHConversion_4
'/// Open a test file , which includes some
'/// + Chinese character and Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , check Hanja(Hangul).
@@ -253,6 +265,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_5
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -269,7 +284,7 @@ testcase tHHConversion_5
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , check Hangul(Hanja) ,
@@ -302,6 +317,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_6
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -319,7 +337,7 @@ testcase tHHConversion_6
'/// Open a test file , which includes some
'/// + Chinese character and Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , check Hangul(Hanja),
@@ -352,6 +370,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_7
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -369,7 +390,7 @@ testcase tHHConversion_7
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hanja As Ruby Above Hangul' ,
@@ -409,6 +430,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_8
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -426,7 +450,7 @@ testcase tHHConversion_8
Call hNewDocument
'/// Open a test file , which includes some Chinese chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hanja As Ruby Above Hangul' ,
@@ -466,6 +490,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_9
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -483,7 +510,7 @@ testcase tHHConversion_9
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hanja As Ruby Below Hangul' ,
@@ -523,6 +550,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_10
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -540,7 +570,7 @@ testcase tHHConversion_10
Call hNewDocument
'/// Open a test file , which includes some Chinese chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hanja As Ruby Below Hangul' ,
@@ -580,6 +610,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_11
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -597,7 +630,7 @@ testcase tHHConversion_11
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hangul As Ruby Above Hanja' ,
@@ -637,6 +670,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_12
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -654,7 +690,7 @@ testcase tHHConversion_12
Call hNewDocument
'/// Open a test file , which includes some Chinese chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hangul As Ruby Above Hanja' ,
@@ -694,6 +730,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_13
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -711,7 +750,7 @@ testcase tHHConversion_13
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hangul As Ruby Below Hanja' ,
@@ -751,6 +790,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_14
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sHangulText , sHanjaText as String
@@ -768,7 +810,7 @@ testcase tHHConversion_14
Call hNewDocument
'/// Open a test file , which includes some Chinese chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , check 'Hangul As Ruby Below Hanja' ,
@@ -808,6 +850,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_15
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
@@ -820,7 +865,7 @@ testcase tHHConversion_15
'/// Open a test file , which includes some Korean chacters .
'/// + Set focus before Korean character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion ,
@@ -853,6 +898,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_16
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
@@ -865,7 +913,7 @@ testcase tHHConversion_16
'/// Open a test file , which includes some Chinese chacters .
'/// + Set focus before Chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion ,
@@ -898,6 +946,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_17
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult , sWord as String
@@ -913,7 +964,7 @@ testcase tHHConversion_17
Call hNewDocument
'/// Open a test file , which includes some Korean chacters .
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , press Ignore ,
@@ -943,6 +994,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_18
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -961,7 +1015,7 @@ testcase tHHConversion_18
'/// Open a test file , which includes some Chinese chacters =>.
'/// + 山下 上山下乡 山下
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , press Always Ignore ,
@@ -992,7 +1046,7 @@ testcase tHHConversion_18
'/// So far , there is still a StarOffice session exists .
'/// Reopen the test file
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion ,
@@ -1026,6 +1080,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_19
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sWord as String
@@ -1040,7 +1097,7 @@ testcase tHHConversion_19
'/// Open a test file , which includes some Chinese chacters =>.
'/// + 山下 上山下乡 山下
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , press Always Ignore ,
@@ -1063,7 +1120,7 @@ testcase tHHConversion_19
Call hNewDocument
'/// Reopen the test file
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , 山下 should be selcted
@@ -1081,6 +1138,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_20
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sWord as String
@@ -1099,7 +1159,7 @@ testcase tHHConversion_20
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , select a word in selection
@@ -1140,6 +1200,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_21
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sWord1 as String
@@ -1162,7 +1225,7 @@ testcase tHHConversion_21
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , select a word in selection,
@@ -1204,7 +1267,7 @@ testcase tHHConversion_21
Call hNewDocument
'/// Reopen this test file
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion
@@ -1241,6 +1304,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_22
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim i as Integer
@@ -1255,7 +1321,7 @@ testcase tHHConversion_22
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , select a word in selection,
@@ -1284,7 +1350,7 @@ testcase tHHConversion_22
Call hStartTheOffice
Call hNewDocument
'/// Reopen this test file
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion
@@ -1303,6 +1369,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_23
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sWord as String
@@ -1320,7 +1389,7 @@ testcase tHHConversion_23
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , select a word in selection,
@@ -1367,6 +1436,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_24
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -1382,7 +1454,7 @@ testcase tHHConversion_24
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , the default for 'Replace by character'
@@ -1417,6 +1489,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_25
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sResult as String
@@ -1434,7 +1509,7 @@ testcase tHHConversion_25
'/// Open a test file , which includes some Chinese chacters =>.
'/// + 山下 上山下乡 山下
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , Check 'Replace by character' ,
@@ -1477,6 +1552,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHConversion_26
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sWord as String
@@ -1495,7 +1573,7 @@ testcase tHHConversion_26
Call hNewDocument
'/// Open a test file , which includes some Korean chacters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<Home>"
'/// Tools / HangulHanjaConversion , Check 'Replace by character' ,
diff --git a/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion3.inc b/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion3.inc
index 947cb2e5e2c3..3ade639fd26d 100644..100755
--- a/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion3.inc
+++ b/testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion3.inc
@@ -47,6 +47,9 @@
'\***********************************************************************
testcase tHHOptions_1
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
@@ -59,12 +62,13 @@ testcase tHHOptions_1
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
+
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
'/// + there should be no entries in User defined dictionaries
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion : WaitSlot
Kontext "HangulHanjaConversion"
Options.Click
@@ -84,6 +88,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_2
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName1 as String
@@ -100,14 +107,14 @@ testcase tHHOptions_2
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
'/// + then press new button , enter 1 new dictionar name ,
'/// + close the new dictionary dialog , and add another new
'/// + dictionary name
- ToolsLanguageHangulHanjaConversion
+ ToolsLanguageHangulHanjaConversion: WaitSlot
Kontext "HangulHanjaConversion"
Options.Click
@@ -165,6 +172,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_3
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -179,7 +189,7 @@ testcase tHHOptions_3
'/// Open a test file , which includes some
'/// + Korean chacters and chinese characters
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -226,6 +236,10 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_4
+warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -240,7 +254,7 @@ testcase tHHOptions_4
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -288,6 +302,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_5
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName1 as String
@@ -304,7 +321,7 @@ testcase tHHOptions_5
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -355,6 +372,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_6
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -376,7 +396,7 @@ testcase tHHOptions_6
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -463,6 +483,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_7
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -484,7 +507,7 @@ testcase tHHOptions_7
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -570,6 +593,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_8
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -589,7 +615,7 @@ testcase tHHOptions_8
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -659,6 +685,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_9
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -676,7 +705,7 @@ testcase tHHOptions_9
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -742,6 +771,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_10
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -759,7 +791,7 @@ testcase tHHOptions_10
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -827,6 +859,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_11
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -844,7 +879,7 @@ testcase tHHOptions_11
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
@@ -907,6 +942,9 @@ endcase
'-----------------------------------------------------------------
testcase tHHOptions_12
+ warnlog( "#i111911# - Test is broken beyond repait, please rewrite" )
+ goto endsub
+
Dim sTestFile as String
Dim sDictionaryName as String
@@ -924,7 +962,7 @@ testcase tHHOptions_12
'/// Open a test file , which includes some
'/// + Korean chacters and chinese character
- Call hFileOpen(sTestFile)
+ Call hFileOpen(sTestFile) : sMakeReadOnlyDocumentEditable()
Call wTypeKeys "<MOD1 Home>"
'/// Tools / HangulHanjaConversion , Press Options button ,
diff --git a/testautomation/writer/optional/includes/loadsave/w_loadsave.inc b/testautomation/writer/optional/includes/loadsave/w_loadsave.inc
index 62c997927ab6..57d1be96d871 100644
--- a/testautomation/writer/optional/includes/loadsave/w_loadsave.inc
+++ b/testautomation/writer/optional/includes/loadsave/w_loadsave.inc
@@ -448,7 +448,7 @@ testcase tExportTop5FormatsIntoTop5
Call hCloseDocument
Loop
printlog " - check if file exists"
- if hFileExists (sCurrentSaveFile) then
+ if FileExists (sCurrentSaveFile) then
printlog " - success"
printlog " - reload previously saved file"
if hFileOpenWithFilter(sCurrentSaveFile, sCurrentSaveFilter) = true then
diff --git a/testautomation/writer/optional/includes/navigator/w_navigator.inc b/testautomation/writer/optional/includes/navigator/w_navigator.inc
index 9f7a8e3f2fe8..ede650feb713 100644..100755
--- a/testautomation/writer/optional/includes/navigator/w_navigator.inc
+++ b/testautomation/writer/optional/includes/navigator/w_navigator.inc
@@ -168,13 +168,11 @@ testcase tViewNavigator2
'/// Close all documents reopen a new and check if Navigator is docked ///
printlog " - Close all documents reopen a new and check if Navigator is docked"
- Call hCloseDocument
- Sleep 2
- Call hCloseDocument
- Sleep 2
+ hFileCloseAll()
+
'/// New document ///
Call hNewDocument
- Call wDocSetContext
+ hSetDocumentContext()
try
DocumentWriter.FadeOut
catch
diff --git a/testautomation/writer/optional/includes/option/wr_o_4.inc b/testautomation/writer/optional/includes/option/wr_o_4.inc
index de44cdfea13a..d5a692fc5a24 100644..100755
--- a/testautomation/writer/optional/includes/option/wr_o_4.inc
+++ b/testautomation/writer/optional/includes/option/wr_o_4.inc
@@ -293,9 +293,8 @@ testcase tToolsOptionsWriterOther
Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.OK
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
+ hFileCloseAll()
+
endcase
'------------------------------------------------------------------------------
@@ -740,9 +739,8 @@ testcase tToolsOptionsWriterAutoCaption
Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.OK
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
+ hFileCloseAll()
+
endcase
'------------------------------------------------------------------------------
@@ -852,15 +850,17 @@ testcase tToolsOptionsWriterGeneral
Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.OK
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
+ hFileCloseAll()
+
endcase
'------------------------------------------------------------------------------
testcase tToolsOptionsWriterMailMerge
+ warnlog( "#i111914# - Test excluded, needs review" )
+ goto endsub
+
Call hNewDocument
printlog ("- Tools/Options/Writer: Mail Merge ")
Kontext "Navigator"
@@ -985,8 +985,7 @@ testcase tToolsOptionsWriterMailMerge
Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.Ok
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
+ hFileCloseAll()
+
endcase
'------------------------------------------------------------------------------
diff --git a/testautomation/writer/optional/includes/regexp/search.inc b/testautomation/writer/optional/includes/regexp/search.inc
index c53ff6250461..e3b2969632e3 100755
--- a/testautomation/writer/optional/includes/regexp/search.inc
+++ b/testautomation/writer/optional/includes/regexp/search.inc
@@ -64,6 +64,9 @@ end sub
'---------------------------------------------------------
testcase tCheckDialog
+ warnlog( "#i111908# - Control <Replace> cannot be accessed" )
+ goto endsub
+
Dim Checkboxtitel
Call hNewDocument
EditSearchAndReplace
diff --git a/testautomation/writer/optional/includes/section/w_section_4.inc b/testautomation/writer/optional/includes/section/w_section_4.inc
index 3d8acb4a9cd5..03a59b567f18 100644..100755
--- a/testautomation/writer/optional/includes/section/w_section_4.inc
+++ b/testautomation/writer/optional/includes/section/w_section_4.inc
@@ -1190,11 +1190,11 @@ testcase tScenarioSection_1
j = UBound(SectionName)
- if hFileExists ( MasterDoc ) then app.kill ( MasterDoc )
+ if FileExists ( MasterDoc ) then app.kill ( MasterDoc )
For i = 0 to j
tempFile = Convertpath( gOfficePath + "user\work\" + SectionName(i) )
- if hFileExists ( tempFile ) then app.kill ( tempFile )
+ if FileExists ( tempFile ) then app.kill ( tempFile )
next i
'/// open testdocument (tScenarioSection_1.sxw) ///
@@ -1310,11 +1310,11 @@ testcase tScenarioSection_2
j = UBound(SectionName)
- if hFileExists ( MasterDoc ) then app.kill ( MasterDoc )
+ if FileExists ( MasterDoc ) then app.kill ( MasterDoc )
For i = 0 to j
tempFile = Convertpath( gOfficePath + "user\work\" + SectionName(i) )
- if hFileExists ( tempFile ) then app.kill ( tempFile )
+ if FileExists ( tempFile ) then app.kill ( tempFile )
next i
'/// open testdocument (tScenarioSection_2.sxw) ///
diff --git a/testautomation/writer/optional/includes/spellcheck/w_spellcheck.inc b/testautomation/writer/optional/includes/spellcheck/w_spellcheck.inc
index 3dfd505d129c..07c0dc4628d0 100755
--- a/testautomation/writer/optional/includes/spellcheck/w_spellcheck.inc
+++ b/testautomation/writer/optional/includes/spellcheck/w_spellcheck.inc
@@ -52,7 +52,7 @@ testcase tToolsSpellcheckWithShortcut
'/// Check if Spellcheck dialog comes up with shortcut 'F7'
printlog " Open document where the formatting is set to the language we wish to test."
TheFile = Convertpath (gTesttoolpath + "writer\optional\input\spellcheck\spellcheck_" + iSprache + ".odt")
- if hFileExists ( TheFile ) <> TRUE then
+ if FileExists ( TheFile ) <> TRUE then
Warnlog "Found no Document for the language you're testing in, Please inform the Test-Developer."
exit sub
end if
@@ -120,7 +120,7 @@ testcase tToolsSpellcheckCorrect
Dim FFText as String
TheFile = Convertpath (gTesttoolpath + "writer\optional\input\spellcheck\spellcheck_" + iSprache + ".odt")
- if hFileExists ( TheFile ) <> TRUE then
+ if FileExists ( TheFile ) <> TRUE then
Warnlog "Found no Document for the language you're testing in, Please inform the Test-Developer."
exit sub
end if
@@ -219,7 +219,7 @@ testcase tToolsSpellcheck1Mistake
Dim TheFile as String
TheFile = Convertpath (gTesttoolpath + "writer\optional\input\spellcheck\spellcheck_" + iSprache + ".odt")
- if hFileExists ( TheFile ) <> TRUE then
+ if FileExists ( TheFile ) <> TRUE then
Warnlog "Found no Document for the language you're testing in, Please inform the Test-Developer."
exit sub
end if
@@ -726,7 +726,7 @@ testcase tToolsSpellcheckAutomatic
Dim TheFile as String
TheFile = Convertpath (gTesttoolpath + "writer\optional\input\spellcheck\spellcheck_" + iSprache + ".odt")
- if hFileExists ( TheFile ) <> TRUE then
+ if FileExists ( TheFile ) <> TRUE then
Warnlog "Found no Document for the language you're testing in, Please inform the Test-Developer."
exit sub
end if
@@ -1236,7 +1236,7 @@ testcase tToolsThesaurus
printlog " Open document where the formatting is set to the language we wish to test."
TheFile = Convertpath (gTesttoolpath + "writer\optional\input\spellcheck\spellcheck_" + iSprache + ".odt")
- if hFileExists ( TheFile ) <> TRUE then
+ if FileExists ( TheFile ) <> TRUE then
Warnlog "Found no Document for the language you're testing in, Please inform the Test-Developer."
exit sub
end if
diff --git a/testautomation/writer/optional/includes/textframes/w_textframes1.inc b/testautomation/writer/optional/includes/textframes/w_textframes1.inc
index f6e977e15091..d61d2560d010 100644..100755
--- a/testautomation/writer/optional/includes/textframes/w_textframes1.inc
+++ b/testautomation/writer/optional/includes/textframes/w_textframes1.inc
@@ -85,7 +85,7 @@ testcase tTextframes_1
'/// 2. Insert a frame over Toolbox / Insert / Frame
Call hNewDocument
- Call wDocSetContext
+ hSetDocumentContext()
Call gMouseClick (30, 50)
Call hToolbarSelect("INSERT", true )
diff --git a/testautomation/writer/optional/includes/tools/tools1.inc b/testautomation/writer/optional/includes/tools/tools1.inc
index 987548a064d1..c187d34b39ac 100644
--- a/testautomation/writer/optional/includes/tools/tools1.inc
+++ b/testautomation/writer/optional/includes/tools/tools1.inc
@@ -29,21 +29,6 @@
'*
'* short description : Tools for writer/Optional - 1
'*
-'************************************************************************
-'*
-' #0 fFileProperties
-' #0 fFormatGraphic
-' #0 fFormatFrame
-' #0 fFormatPageWriter
-' #0 fFormatParagraph
-' #0 fFormatCharacter
-' #0 fFormatTable
-' #0 fFormatStylesCatalog
-' #0 fPositionAndSize
-' #0 fInsertFieldsOther
-' #0 fInsertSection
-' #0 fToolsAutocorrect
-'*
'\***********************************************************************
@@ -51,18 +36,25 @@
'*****************************************************************
function fFileProperties(Options as string)
- FileProperties
- sleep(1)
- Kontext
- Select case Options
- case "TabDokument" : active.SetPage TabDokument
- case "TabBeschreibung" : active.SetPage TabBeschreibung
- case "TabBenutzer" : active.SetPage TabBenutzer
- case "TabInternet" : active.SetPage TabInternet
- case "TabStatistik" : active.SetPage TabStatistik
- end Select
-
- Kontext Options
+ if ( hUseAsyncSlot( "FileProperties" ) <> -1 ) then
+
+ Kontext
+ if ( Active.exists( 2 ) ) then
+ Select case Options
+ case "TabDokument" : active.SetPage TabDokument
+ case "TabBeschreibung" : active.SetPage TabBeschreibung
+ case "TabBenutzer" : active.SetPage TabBenutzer
+ case "TabInternet" : active.SetPage TabInternet
+ case "TabStatistik" : active.SetPage TabStatistik
+ end Select
+ else
+ warnlog( "<FileProperties> dialog not open" )
+ endif
+ else
+ warnlog( "Failed to execute <FileProperties>" )
+ endif
+
+ Kontext Options
end function
@@ -74,16 +66,11 @@ end function
function fFormatGraphic(Options as string) as boolean
Dim j as integer, sSlotOK as boolean
- try
- FormatGraphics
- sSlotOK = true
- catch
- warnlog "Unable to execute Format / Graphics"
- endcatch
- sleep(1)
- Kontext
- if sSlotOK = true then
- Select case Options
+ if ( hUseAsyncSlot( "FormatGraphics" ) <> -1 ) then
+
+ Kontext
+ if ( Active.exists( 2 ) ) then
+ Select case Options
case "TabType" : active.SetPage TabType
case "TabZusaetze" : active.SetPage TabZusaetze
case "TabUmlauf" : active.SetPage TabUmlauf
@@ -104,16 +91,21 @@ function fFormatGraphic(Options as string) as boolean
Active.Ok
else
exit do
- end if
+ end if
else
exit do
end if
- Loop
- end select
-
- Kontext Options
- end if
- fFormatGraphic = sSlotOK
+ Loop
+ end select
+ else
+ warnlog( "Failed to access <Format Graphics> Tabpage" )
+ endif
+ else
+ warnlog( "Failed to execute <FormatGraphics>" )
+ endif
+
+ Kontext Options
+
end function
@@ -123,22 +115,28 @@ end function
'****************************************************************
function fFormatFrame(Options as string)
- Sleep 1
- FormatFrame
- Kontext
+ if ( hUseAsyncSlot( "FormatFrame" ) <> -1 ) then
- Select case Options
- case "TabType" : active.SetPage TabType
- case "TabZusaetze" : active.SetPage TabZusaetze
- case "TabUmlauf" : active.SetPage TabUmlauf
- case "TabHyperlinkRahmen" : active.SetPage TabHyperlinkRahmen
- case "TabUmrandung" : active.SetPage TabUmrandung
- case "TabHintergrund" : active.SetPage TabHintergrund
- case "TabSpalten" : active.SetPage TabSpalten
- case "TabMakro" : active.SetPage TabMakro
- end Select
-
- Kontext Options
+ Kontext
+ if ( Active.exists( 2 ) ) then
+ Select case Options
+ case "TabType" : active.SetPage TabType
+ case "TabZusaetze" : active.SetPage TabZusaetze
+ case "TabUmlauf" : active.SetPage TabUmlauf
+ case "TabHyperlinkRahmen" : active.SetPage TabHyperlinkRahmen
+ case "TabUmrandung" : active.SetPage TabUmrandung
+ case "TabHintergrund" : active.SetPage TabHintergrund
+ case "TabSpalten" : active.SetPage TabSpalten
+ case "TabMakro" : active.SetPage TabMakro
+ end Select
+ else
+ warnlog( "<Format Frame> dialog did not open" )
+ endif
+ else
+ warnlog( "Failed to execute <FormatFrame>" )
+ endif
+
+ Kontext Options
end function
@@ -148,10 +146,10 @@ end function
'*************************************************************************
function fFormatPageWriter(Options as string)
- FormatPageWriter
- Kontext
+ FormatPageWriter
+ Kontext
- Select case Options
+ Select case Options
case "TabVerwalten" : active.SetPage TabVerwalten
case "TabSeite" : active.SetPage TabSeite
case "TabHintergrund" : active.SetPage TabHintergrund
@@ -161,9 +159,9 @@ function fFormatPageWriter(Options as string)
case "TabSpalten" : active.SetPage TabSpalten
case "TabFussnote" : active.SetPage TabFussnote
case "TabGrid" : active.SetPage TabGrid
- end Select
+ end Select
- Kontext Options
+ Kontext Options
end function
@@ -173,10 +171,10 @@ end function
'*************************************************************************
function fFormatParagraph(Options as string)
- FormatParagraph
- Kontext
+ FormatParagraph
+ Kontext
- Select case Options
+ Select case Options
case "TabEinzuegeUndAbstaende" : active.SetPage TabEinzuegeUndAbstaende
case "TabAusrichtungAbsatz" : active.SetPage TabAusrichtungAbsatz
case "TabTextfluss" : active.SetPage TabTextfluss
@@ -186,9 +184,9 @@ function fFormatParagraph(Options as string)
case "TabInitialen" : active.SetPage TabInitialen
case "TabUmrandung" : active.SetPage TabUmrandung
case "TabHintergrund" : active.SetPage TabHintergrund
- end Select
+ end Select
- Kontext Options
+ Kontext Options
end function
@@ -198,19 +196,19 @@ end function
'*************************************************************************
function fFormatCharacter(Options as string)
- FormatCharacter
- Kontext
+ FormatCharacter
+ Kontext
- Select case Options
+ Select case Options
case "TabFont" : active.SetPage TabFont
case "TabFontEffects" : active.SetPage TabFontEffects
case "TabFontPosition" : active.SetPage TabFontPosition
case "TabAsianLayout" : active.SetPage TabAsianLayout
case "TabHyperlinkZeichen" : active.SetPage TabHyperlinkZeichen
case "TabHintergrund" : active.SetPage TabHintergrund
- end Select
+ end Select
- Kontext Options
+ Kontext Options
end function
@@ -221,18 +219,18 @@ end function
'*************************************************************************
function fFormatTable(Options as string)
- FormatTable
- Kontext
+ FormatTable
+ Kontext
- Select case Options
+ Select case Options
case "TabTabelle" : active.SetPage TabTabelle
case "TabTextflussTabelle" : active.SetPage TabTextflussTabelle
case "TabSpaltenTabelle" : active.SetPage TabSpaltenTabelle
case "TabUmrandung" : active.SetPage TabUmrandung
case "TabHintergrund" : active.SetPage TabHintergrund
- end Select
+ end Select
- Kontext Options
+ Kontext Options
end function
@@ -242,16 +240,18 @@ end function
'*************************************************************************
function fFormatStylesCatalog(Options as string)
- FormatStylesCatalog
- Kontext "VorlagenKatalog"
+ FormatStylesCatalog
+ Kontext "VorlagenKatalog"
- Select case Options
+ Select case Options
case "Paragraph" : Vorlagen.Select 1
case "Character" : Vorlagen.Select 2
case "Frame" : Vorlagen.Select 3
case "Page" : Vorlagen.Select 4
case "Numbering" : Vorlagen.Select 5
- end Select
+ end Select
+
+ Kontext Options
end function
@@ -261,19 +261,19 @@ end function
'*******************************************************************************
function fInsertFieldsOther(Options as string)
- InsertFieldsOther
- Kontext
+ InsertFieldsOther
+ Kontext
- Select case Options
+ Select case Options
case "TabDokumentFeldbefehle" : active.SetPage TabDokumentFeldbefehle
case "TabReferenzen" : active.SetPage TabReferenzen
case "TabFunktionen" : active.SetPage TabFunktionen
case "TabDokumentinfoFeldbefehle" : active.SetPage TabDokumentinfoFeldbefehle
case "TabVariablen" : active.SetPage TabVariablen
case "TabDatenbank" : active.SetPage TabDatenbank
- end Select
+ end Select
- Kontext Options
+ Kontext Options
end function
@@ -283,20 +283,23 @@ end function
'******************************************************
function fInsertSection(Options as string)
- InsertSection
- wait 500
- Kontext
+ InsertSection
- Select case Options
- case "TabBereiche" : active.SetPage TabBereiche
- case "TabSpalten" : active.SetPage TabSpalten
- case "TabSectionIndent" : active.SetPage TabSectionIndent
- case "TabHintergrund" : active.SetPage TabHintergrund
- case "TabFussEndnoten" : active.SetPage TabFussEndnoten
- end Select
-
- Kontext Options
- Sleep 1
+ Kontext
+ if ( Active.exists( 2 ) ) then
+ Select case Options
+ case "TabBereiche" : active.SetPage TabBereiche
+ case "TabSpalten" : active.SetPage TabSpalten
+ case "TabSectionIndent" : active.SetPage TabSectionIndent
+ case "TabHintergrund" : active.SetPage TabHintergrund
+ case "TabFussEndnoten" : active.SetPage TabFussEndnoten
+ end Select
+ waitslot()
+ else
+ warnlog( "Failed to open <Insert Section> dialog" )
+ endif
+
+ Kontext Options
end function
@@ -306,18 +309,18 @@ end function
'*************************************************************************
function fToolsAutocorrect(Options as string)
- Kontext
- ToolsAutoCorrect
+ Kontext
+ ToolsAutoCorrect
- Select case Options
+ Select case Options
case "TabErsetzung" : active.SetPage TabErsetzung
case "TabAusnahmen" : active.SetPage TabAusnahmen
case "TabOptionenAutokorrektur" : active.SetPage TabOptionenAutokorrektur
case "TabLocalizedOptions" : active.SetPage TabLocalizedOptions
case "TabWortergaenzung" : active.SetPage TabWortergaenzung
- end Select
+ end Select
- Kontext Options
+ Kontext Options
end function
@@ -327,16 +330,16 @@ end function
'******************************************************
function fPositionAndSize(Options as string)
- Kontext
- FormatPositionAndSize
+ Kontext
+ FormatPositionAndSize
- Select case Options
+ Select case Options
case "TabPositionAndSizeWriter" : active.SetPage TabPositionAndSizeWriter
case "TabDrehung" : active.SetPage TabDrehung
case "TabSchraegstellen" : active.SetPage TabSchraegstellen
- end Select
+ end Select
- Kontext Options
+ Kontext Options
end function
diff --git a/testautomation/writer/optional/includes/tools/tools2.inc b/testautomation/writer/optional/includes/tools/tools2.inc
index 8f61d4dc0d1a..8ee87a5b037a 100644
--- a/testautomation/writer/optional/includes/tools/tools2.inc
+++ b/testautomation/writer/optional/includes/tools/tools2.inc
@@ -29,157 +29,143 @@
'*
'* short description : Tools for writer/Optional - 2
'*
-'************************************************************************
-'*
-' #1 fStartupNavigator
-' #1 fCloseNavigator
-' #1 StrToDouble
-' #1 fCalculateTolerance
-' #1 fFindWord
-' #1 fGetLanguageName
-'*
'\***********************************************************************
function fStartupNavigator(navigatorItem as String , subItemNum as Integer)
-'/// Start up Navigator , and set focus to the correct position
+ '/// Start up Navigator , and set focus to the correct position
Dim j as Integer
- Kontext "Navigator"
- if NOT Navigator.Exists then
- ViewNavigator
- end if
- Sleep 2
- Kontext "NavigatorWriter"
- if Auswahlliste.GetItemCount < 11 then
- Inhaltsansicht.Click
- Sleep 1
- end if
- Auswahlliste.TypeKeys "<Home>" '<- Set focus to first entry
- if Auswahlliste.GetItemCount > 11 then '<- If nodes are open
- For j= 1 to 12 '<- close all nodes
- Auswahlliste.Select j
- Sleep 1
- Auswahlliste.TypeKeys "-"
- Sleep 1
- next j
- end if
- Auswahlliste.TypeKeys "<Home>" ' point focus to first entry
- sleep 3
-
- Select case navigatorItem
- case "Headings" : goto GoON
- case "Tables" : Auswahlliste.TypeKeys "<down>"
- case "TextFrame" : Auswahlliste.TypeKeys "<down>" , 2
- case "Graphics" : Auswahlliste.TypeKeys "<down>" , 3
- case "OLEObject" : Auswahlliste.TypeKeys "<down>" , 4
- case "Bookmarks" : Auswahlliste.TypeKeys "<down>" , 5
- case "Section" : Auswahlliste.TypeKeys "<down>" , 6
- case "Hyperlinks" : Auswahlliste.TypeKeys "<down>" , 7
- case "References" : Auswahlliste.TypeKeys "<down>" , 8
- case "Indexes" : Auswahlliste.TypeKeys "<down>" , 9
- case "Notes" : Auswahlliste.TypeKeys "<down>" , 10
- case "DrawObjects" : Auswahlliste.TypeKeys "<down>" , 11
- end Select
- sleep 2
-GoON:
- Auswahlliste.TypeKeys "<return>"
- sleep 2
- Inhaltsansicht.Click
- sleep 2
- Auswahlliste.TypeKeys "<Up>",subItemNum
- sleep 2
+ Kontext "Navigator"
+ if NOT Navigator.Exists then
+ ViewNavigator
+ end if
+ Sleep 2
+ Kontext "NavigatorWriter"
+ if Auswahlliste.GetItemCount < 11 then
+ Inhaltsansicht.Click
+ Sleep 1
+ end if
+ Auswahlliste.TypeKeys "<Home>" '<- Set focus to first entry
+ if Auswahlliste.GetItemCount > 11 then '<- If nodes are open
+ For j= 1 to 12 '<- close all nodes
+ Auswahlliste.Select j
+ Sleep 1
+ Auswahlliste.TypeKeys "-"
+ Sleep 1
+ next j
+ end if
+ Auswahlliste.TypeKeys "<Home>" ' point focus to first entry
+ sleep 3
+
+ Select case navigatorItem
+ case "Headings" : goto GoON
+ case "Tables" : Auswahlliste.TypeKeys "<down>"
+ case "TextFrame" : Auswahlliste.TypeKeys "<down>" , 2
+ case "Graphics" : Auswahlliste.TypeKeys "<down>" , 3
+ case "OLEObject" : Auswahlliste.TypeKeys "<down>" , 4
+ case "Bookmarks" : Auswahlliste.TypeKeys "<down>" , 5
+ case "Section" : Auswahlliste.TypeKeys "<down>" , 6
+ case "Hyperlinks" : Auswahlliste.TypeKeys "<down>" , 7
+ case "References" : Auswahlliste.TypeKeys "<down>" , 8
+ case "Indexes" : Auswahlliste.TypeKeys "<down>" , 9
+ case "Notes" : Auswahlliste.TypeKeys "<down>" , 10
+ case "DrawObjects" : Auswahlliste.TypeKeys "<down>" , 11
+ end Select
+ sleep 2
+ GoON:
+ Auswahlliste.TypeKeys "<return>"
+ sleep 2
+ Inhaltsansicht.Click
+ sleep 2
+ Auswahlliste.TypeKeys "<Up>",subItemNum
+ sleep 2
end function
'-------------------------------------------------------------------------
function fCloseNavigator
-'/// Close Navigator
- Kontext "Navigator"
- Sleep 3
- if Navigator.Exists(2) then
- Navigator.Close
- end if
- Sleep 3
+ Kontext "Navigator"
+ hCloseDialog( Navigator, "close" )
end function
'-------------------------------------------------------------------------
function StrToDouble ( sWert$ ) as Double
-'/// Transfer String to Double , including
-'/// 2.00cm --> 2.00
-'/// 2,00cm --> 2.00
-'/// 20% --> 20
+ '/// Transfer String to Double , including
+ '/// 2.00cm --> 2.00
+ '/// 2,00cm --> 2.00
+ '/// 20% --> 20
- dim sDummy$
- dim i, i1, i2 as integer
- dim a as integer
- dim b as integer
- dim c as double
- dim n as integer
+ dim sDummy$
+ dim i, i1, i2 as integer
+ dim a as integer
+ dim b as integer
+ dim c as double
+ dim n as integer
-'/// Input : {'a[. ,]b[mm cm " pi pt]' with a, b as integer} as String
-'///+ Output: a[. , ]b as double
+ '/// Input : {'a[. ,]b[mm cm " pi pt]' with a, b as integer} as String
+ '///+ Output: a[. , ]b as double
-' get rid of measure unit, the only single character is '"' all others are two chars
+ ' get rid of measure unit, the only single character is '"' all others are two chars
- if (isNumeric (sWert$) = FALSE) then
- if ( (StrComp (right (sWert$, 1), chr$(34) ) = 0) OR (StrComp (right (sWert$, 1), "%") = 0 )) then
+ if (isNumeric (sWert$) = FALSE) then
+ if ( (StrComp (right (sWert$, 1), chr$(34) ) = 0) OR (StrComp (right (sWert$, 1), "%") = 0 )) then
sDummy$ = Left ( sWert$, Len(sWert$)-1 )
- else
+ else
sDummy$ = Left ( sWert$, Len(sWert$)-Len(gMeasurementUnit) )
- end if
- else
- sDummy$ = sWert$
- end if
- ' get position of fraction mark
- i1 = instr (sDummy$, ",") ' wrong output
- i2 = instr (sDummy$, ".")
- if i1 > i2 then i = i1 else i = i2
- ' vorkommateil
- try
- a = val (left (sDummy$,i-1))
- catch
- a = val ( sDummy$ )
- c = 0
- GoTo OK
- endcatch
-
- n = (len (sDummy$)-i)
- b = val (right (sDummy$, n) )
- c = b * 10 ^ -n
-OK:
- StrToDouble = a + c
+ end if
+ else
+ sDummy$ = sWert$
+ end if
+ ' get position of fraction mark
+ i1 = instr (sDummy$, ",") ' wrong output
+ i2 = instr (sDummy$, ".")
+ if i1 > i2 then i = i1 else i = i2
+ ' vorkommateil
+ try
+ a = val (left (sDummy$,i-1))
+ catch
+ a = val ( sDummy$ )
+ c = 0
+ GoTo OK
+ endcatch
+
+ n = (len (sDummy$)-i)
+ b = val (right (sDummy$, n) )
+ c = b * 10 ^ -n
+ OK:
+ StrToDouble = a + c
end function
'-------------------------------------------------------------------------
-
+
function fCalculateTolerance (sNumber1 , sNumber2) as Single
-'/// Change 2 parameters to number , then Compare them and return the result.
- Dim ss as Single
- Dim dNumber1 , dNumber2 as Single
- Dim iCommaLocation1 , iCommaLocation2 as Integer
-
- 'the code below 4 lines is set "2,00cm" to "2.00"cm if needed
- iCommaLocation1 = InStr(sNumber1 , ",")
- if iCommaLocation1 > 0 then
- sNumber1 = Left(sNumber1 , iCommaLocation1-1) + "." + Right(sNumber1,Len(sNumber1) - iCommaLocation1)
- end if
-
- iCommaLocation2 = InStr(sNumber2 , ",")
- if iCommaLocation2 > 0 then
- sNumber2 = Left(sNumber2 , iCommaLocation2-1) + "." + Right(sNumber2,Len(sNumber2) - iCommaLocation2)
- end if
-
- dNumber1 = Val( Left(sNumber1, Len(sNumber1)-Len(gMeasurementUnit) ))
- dNumber2 = Val( Left(sNumber2, Len(sNumber2)-Len(gMeasurementUnit) ))
-
- fCalculateTolerance = Abs( dNumber1 - dNumber2 )
+ '/// Change 2 parameters to number , then Compare them and return the result.
+ Dim ss as Single
+ Dim dNumber1 , dNumber2 as Single
+ Dim iCommaLocation1 , iCommaLocation2 as Integer
+
+ 'the code below 4 lines is set "2,00cm" to "2.00"cm if needed
+ iCommaLocation1 = InStr(sNumber1 , ",")
+ if iCommaLocation1 > 0 then
+ sNumber1 = Left(sNumber1 , iCommaLocation1-1) + "." + Right(sNumber1,Len(sNumber1) - iCommaLocation1)
+ end if
+
+ iCommaLocation2 = InStr(sNumber2 , ",")
+ if iCommaLocation2 > 0 then
+ sNumber2 = Left(sNumber2 , iCommaLocation2-1) + "." + Right(sNumber2,Len(sNumber2) - iCommaLocation2)
+ end if
+
+ dNumber1 = Val( Left(sNumber1, Len(sNumber1)-Len(gMeasurementUnit) ))
+ dNumber2 = Val( Left(sNumber2, Len(sNumber2)-Len(gMeasurementUnit) ))
+
+ fCalculateTolerance = Abs( dNumber1 - dNumber2 )
end function
'-------------------------------------------------------------------------
function fFindWord (sTest) as String
-'/// Set the focus to the word which you want
+ '/// Set the focus to the word which you want
Kontext
EditSearchAndReplace
Kontext "FindAndReplace"
@@ -193,234 +179,234 @@ end function
'-------------------------------------------------------------------------
function fGetLanguageName( CountryID as Integer ) as String
-'/// This routine will return the Language name based on CountryID
+ '/// This routine will return the Language name based on CountryID
select case iSprache
- case 01 : ' English (USA)
- select case CountryID
- case 1: fGetLanguageName = "English (USA)"
- case 31: fGetLanguageName = "Dutch (Netherlands)"
- case 33: fGetLanguageName = "French (France)"
- case 34: fGetLanguageName = "Spanish (Spain)"
- case 39: fGetLanguageName = "Italian (Italy)"
- case 46: fGetLanguageName = "Swedish (Sweden)"
- case 49: fGetLanguageName = "German (Germany)"
- case 55: fGetLanguageName = "Portuguese (Brazil)"
- case 81: fGetLanguageName = "Japanese"
- case 82: fGetLanguageName = "Korean (RoK)"
- case 86: fGetLanguageName = "Chinese (simplified)"
- case 88: fGetLanguageName = "Chinese (traditional)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 31 : ' Dutch
- select case CountryID
- case 1: fGetLanguageName = "Engels (VS)"
- case 31: fGetLanguageName = "Netherlands (NL)"
- case 33: fGetLanguageName = "Frans (Frankrijk)"
- case 34: fGetLanguageName = "Spaans (Spanje)"
- case 39: fGetLanguageName = "Italiaans (Itali�)"
- case 46: fGetLanguageName = "Zweeds (Zweden)"
- case 49: fGetLanguageName = "Duits (Duitsland)"
- case 55: fGetLanguageName = "Portugees (Brazili�)"
- case 81: fGetLanguageName = "Japans"
- case 82: fGetLanguageName = "Korean (RoK)"
- case 86: fGetLanguageName = "Chinese (vereenvoudigd)"
- case 88: fGetLanguageName = "Chinese (traditioneel)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 33 : ' France
- select case CountryID
- case 1: fGetLanguageName = "Anglais (U.S.A.)"
- case 31: fGetLanguageName = "N�erlandais (Pays-Bas)"
- case 33: fGetLanguageName = "Français (France)"
- case 34: fGetLanguageName = "Espagnol (Espagne)"
- case 39: fGetLanguageName = "Italien (Italie)"
- case 46: fGetLanguageName = "Suédois (Suède)"
- case 49: fGetLanguageName = "Allemand (Allemagne)"
- case 55: fGetLanguageName = "Portugais (Brésil)"
- case 81: fGetLanguageName = "Japonais"
- case 82: fGetLanguageName = "Coréen"
- case 86: fGetLanguageName = "Chinois (simple)"
- case 88: fGetLanguageName = "Chinois (traditionnel)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 34 : ' Spanish
- select case CountryID
- case 1: fGetLanguageName = "Inglés (EE.UU.)"
- case 31: fGetLanguageName = "Holand�s (Pa�ses Bajos)"
- case 33: fGetLanguageName = "Francés (Francia)"
- case 34: fGetLanguageName = "Español (España)"
- case 39: fGetLanguageName = "Italiano (Italia)"
- case 46: fGetLanguageName = "Sueco (Suecia)"
- case 49: fGetLanguageName = "Alemán (Alemania)"
- case 55: fGetLanguageName = "Portugués (Brasil)"
- case 81: fGetLanguageName = "Japonés"
- case 82: fGetLanguageName = "Coreano"
- case 86: fGetLanguageName = "Chino (simple)"
- case 88: fGetLanguageName = "Chino (tradicional)"
- case else :
+ case 01 : ' English (USA)
+ select case CountryID
+ case 1: fGetLanguageName = "English (USA)"
+ case 31: fGetLanguageName = "Dutch (Netherlands)"
+ case 33: fGetLanguageName = "French (France)"
+ case 34: fGetLanguageName = "Spanish (Spain)"
+ case 39: fGetLanguageName = "Italian (Italy)"
+ case 46: fGetLanguageName = "Swedish (Sweden)"
+ case 49: fGetLanguageName = "German (Germany)"
+ case 55: fGetLanguageName = "Portuguese (Brazil)"
+ case 81: fGetLanguageName = "Japanese"
+ case 82: fGetLanguageName = "Korean (RoK)"
+ case 86: fGetLanguageName = "Chinese (simplified)"
+ case 88: fGetLanguageName = "Chinese (traditional)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case 31 : ' Dutch
+ select case CountryID
+ case 1: fGetLanguageName = "Engels (VS)"
+ case 31: fGetLanguageName = "Netherlands (NL)"
+ case 33: fGetLanguageName = "Frans (Frankrijk)"
+ case 34: fGetLanguageName = "Spaans (Spanje)"
+ case 39: fGetLanguageName = "Italiaans (Itali�)"
+ case 46: fGetLanguageName = "Zweeds (Zweden)"
+ case 49: fGetLanguageName = "Duits (Duitsland)"
+ case 55: fGetLanguageName = "Portugees (Brazili�)"
+ case 81: fGetLanguageName = "Japans"
+ case 82: fGetLanguageName = "Korean (RoK)"
+ case 86: fGetLanguageName = "Chinese (vereenvoudigd)"
+ case 88: fGetLanguageName = "Chinese (traditioneel)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case 33 : ' France
+ select case CountryID
+ case 1: fGetLanguageName = "Anglais (U.S.A.)"
+ case 31: fGetLanguageName = "N�erlandais (Pays-Bas)"
+ case 33: fGetLanguageName = "Français (France)"
+ case 34: fGetLanguageName = "Espagnol (Espagne)"
+ case 39: fGetLanguageName = "Italien (Italie)"
+ case 46: fGetLanguageName = "Suédois (Suède)"
+ case 49: fGetLanguageName = "Allemand (Allemagne)"
+ case 55: fGetLanguageName = "Portugais (Brésil)"
+ case 81: fGetLanguageName = "Japonais"
+ case 82: fGetLanguageName = "Coréen"
+ case 86: fGetLanguageName = "Chinois (simple)"
+ case 88: fGetLanguageName = "Chinois (traditionnel)"
+ case else :
QAErrorLog "Now, the test does not support for the language " +iSprache
fGetLanguageName = ""
end select
- case 39 : ' Italy
- select case CountryID
- case 1: fGetLanguageName = "Inglese (US)"
- case 31: fGetLanguageName = "Olandese (Paesi Bassi)"
- case 33: fGetLanguageName = "Francese (Francia)"
- case 34: fGetLanguageName = "Spagnolo (Spagna)"
- case 39: fGetLanguageName = "Italiano (Italia)"
- case 46: fGetLanguageName = "Svedese (Svezia)"
- case 49: fGetLanguageName = "Tedesco (Germania)"
- case 55: fGetLanguageName = "Portoghese (Brasile)"
- case 81: fGetLanguageName = "Giapponese"
- case 82: fGetLanguageName = "Coreano"
- case 86: fGetLanguageName = "Cinese (semplificato)"
- case 88: fGetLanguageName = "Cinese (tradizionale)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 46 : ' Swedish
- select case CountryID
- case 1: fGetLanguageName = "engelska"
- case 31: fGetLanguageName = "Holl�ndska (Nederl�nderna)"
- case 33: fGetLanguageName = "franska (Frankrike)"
- case 34: fGetLanguageName = "spanska (Spanien)"
- case 39: fGetLanguageName = "italienska (Italien)"
- case 46: fGetLanguageName = "svenska (Sverige)"
- case 49: fGetLanguageName = "tyska (Tyskland)"
- case 55: fGetLanguageName = "portugisiska (Brasilien)"
- case 81: fGetLanguageName = "japanska"
- case 82: fGetLanguageName = "koreanska"
- case 86: fGetLanguageName = "kinesiska (enkel)"
- case 88: fGetLanguageName = "kinesiska (trad.)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 49 : ' German
- select case CountryID
- case 1: fGetLanguageName = "Englisch (USA)"
- case 31: fGetLanguageName = "Niederl�ndisch (Niederlande)"
- case 33: fGetLanguageName = "Französisch (Frankreich)"
- case 34: fGetLanguageName = "Spanisch (Spanien)"
- case 39: fGetLanguageName = "Italienisch (Italien)"
- case 46: fGetLanguageName = "Schwedisch (Schweden)"
- case 49: fGetLanguageName = "Deutsch (Deutschland)"
- case 55: fGetLanguageName = "Portugiesisch (Brasilien)"
- case 81: fGetLanguageName = "Japanisch"
- case 82: fGetLanguageName = "Koreanisch"
- case 86: fGetLanguageName = "Chinesisch (einfach)"
- case 88: fGetLanguageName = "Chinesisch (Trad.)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 55 : ' Portuguese
- select case CountryID
- case 1: fGetLanguageName = "Inglês (EUA)"
- case 31: fGetLanguageName = "Holand�s (Holanda)"
- case 33: fGetLanguageName = "Francês (França)"
- case 34: fGetLanguageName = "Espanhol (Espanha)"
- case 39: fGetLanguageName = "Italiano (Itália)"
- case 46: fGetLanguageName = "Sueco (Suécia)"
- case 49: fGetLanguageName = "Alemão (Alemanha)"
- case 55: fGetLanguageName = "Português (Brasil)"
- case 81: fGetLanguageName = "Japonês"
- case 82: fGetLanguageName = "Coreano"
- case 86: fGetLanguageName = "Chinês (simplificado)"
- case 88: fGetLanguageName = "Chinês (Tradicional)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
+ case 34 : ' Spanish
+ select case CountryID
+ case 1: fGetLanguageName = "Inglés (EE.UU.)"
+ case 31: fGetLanguageName = "Holand�s (Pa�ses Bajos)"
+ case 33: fGetLanguageName = "Francés (Francia)"
+ case 34: fGetLanguageName = "Español (España)"
+ case 39: fGetLanguageName = "Italiano (Italia)"
+ case 46: fGetLanguageName = "Sueco (Suecia)"
+ case 49: fGetLanguageName = "Alemán (Alemania)"
+ case 55: fGetLanguageName = "Portugués (Brasil)"
+ case 81: fGetLanguageName = "Japonés"
+ case 82: fGetLanguageName = "Coreano"
+ case 86: fGetLanguageName = "Chino (simple)"
+ case 88: fGetLanguageName = "Chino (tradicional)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
end select
- case 81 : ' Japanese
- select case CountryID
- case 1: fGetLanguageName = "英語(米国)"
- case 33: fGetLanguageName = "フランス語(フランス)"
- case 34: fGetLanguageName = "スペイン語(スペイン)"
- case 39: fGetLanguageName = "イタリア語(イタリア)"
- case 46: fGetLanguageName = "スウェーデン語(スウェーデン)"
- case 49: fGetLanguageName = "ドイツ語(ドイツ)"
- case 55: fGetLanguageName = "�?ルトガル語(ブラジル)"
- case 81: fGetLanguageName = "日本語"
- case 82: fGetLanguageName = "韓国語"
- case 86: fGetLanguageName = "中国語(簡体字)"
- case 88: fGetLanguageName = "中国語(�?体字)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
+ case 39 : ' Italy
+ select case CountryID
+ case 1: fGetLanguageName = "Inglese (US)"
+ case 31: fGetLanguageName = "Olandese (Paesi Bassi)"
+ case 33: fGetLanguageName = "Francese (Francia)"
+ case 34: fGetLanguageName = "Spagnolo (Spagna)"
+ case 39: fGetLanguageName = "Italiano (Italia)"
+ case 46: fGetLanguageName = "Svedese (Svezia)"
+ case 49: fGetLanguageName = "Tedesco (Germania)"
+ case 55: fGetLanguageName = "Portoghese (Brasile)"
+ case 81: fGetLanguageName = "Giapponese"
+ case 82: fGetLanguageName = "Coreano"
+ case 86: fGetLanguageName = "Cinese (semplificato)"
+ case 88: fGetLanguageName = "Cinese (tradizionale)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
end select
- case 82 : ' Korean
- select case CountryID
- case 1: fGetLanguageName = "�?어(미국)"
- case 33: fGetLanguageName = "스페�?�어(스페�?�)"
- case 34: fGetLanguageName = "프랑스어(프랑스)"
- case 39: fGetLanguageName = "�?�탈리아어 (�?�태리)"
- case 46: fGetLanguageName = "스웨�?�어(스웨�?�)"
- case 49: fGetLanguageName = "�?��?�어(�?��?�)"
- case 55: fGetLanguageName = "�?�르투갈어(브�?�질)"
- case 81: fGetLanguageName = "�?�본어"
- case 82: fGetLanguageName = "한국어"
- case 86: fGetLanguageName = "중국어(간체)"
- case 88: fGetLanguageName = "중국어(번체)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 86 : ' Chinese (simplified)
- select case CountryID
- case 1: fGetLanguageName = "英语(美国)"
- case 33: fGetLanguageName = "法语(法国)"
- case 34: fGetLanguageName = "西�?�牙语(西�?�牙)"
- case 39: fGetLanguageName = "�?大利语(�?大利)"
- case 46: fGetLanguageName = "瑞典语(瑞典)"
- case 49: fGetLanguageName = "德语(德国)"
- case 55: fGetLanguageName = "葡�?�牙语(巴西)"
- case 81: fGetLanguageName = "日语"
- case 82: fGetLanguageName = "�?鲜语"
- case 86: fGetLanguageName = "中文(简体字)"
- case 88: fGetLanguageName = "中文(�?体字)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case 88 : ' Chinese (traditional)
- select case CountryID
- case 1: fGetLanguageName = "英語(美國)"
- case 33: fGetLanguageName = "法語(法國)"
- case 34: fGetLanguageName = "西�?�牙語(西�?�牙)"
- case 39: fGetLanguageName = "�?大利語(�?大利)"
- case 46: fGetLanguageName = "瑞典語(瑞典)"
- case 49: fGetLanguageName = "德語(德國)"
- case 55: fGetLanguageName = "葡�?�牙語(巴西)"
- case 81: fGetLanguageName = "日語"
- case 82: fGetLanguageName = "韓語"
- case 86: fGetLanguageName = "中文(簡體字)"
- case 88: fGetLanguageName = "中文(�?體)"
- case else :
- QAErrorLog "Now, the test does not support for the language " +iSprache
- fGetLanguageName = ""
- end select
-
- case else : ' Fallback
+ case 46 : ' Swedish
+ select case CountryID
+ case 1: fGetLanguageName = "engelska"
+ case 31: fGetLanguageName = "Holl�ndska (Nederl�nderna)"
+ case 33: fGetLanguageName = "franska (Frankrike)"
+ case 34: fGetLanguageName = "spanska (Spanien)"
+ case 39: fGetLanguageName = "italienska (Italien)"
+ case 46: fGetLanguageName = "svenska (Sverige)"
+ case 49: fGetLanguageName = "tyska (Tyskland)"
+ case 55: fGetLanguageName = "portugisiska (Brasilien)"
+ case 81: fGetLanguageName = "japanska"
+ case 82: fGetLanguageName = "koreanska"
+ case 86: fGetLanguageName = "kinesiska (enkel)"
+ case 88: fGetLanguageName = "kinesiska (trad.)"
+ case else :
QAErrorLog "Now, the test does not support for the language " +iSprache
fGetLanguageName = ""
- end select
+ end select
+
+ case 49 : ' German
+ select case CountryID
+ case 1: fGetLanguageName = "Englisch (USA)"
+ case 31: fGetLanguageName = "Niederl�ndisch (Niederlande)"
+ case 33: fGetLanguageName = "Französisch (Frankreich)"
+ case 34: fGetLanguageName = "Spanisch (Spanien)"
+ case 39: fGetLanguageName = "Italienisch (Italien)"
+ case 46: fGetLanguageName = "Schwedisch (Schweden)"
+ case 49: fGetLanguageName = "Deutsch (Deutschland)"
+ case 55: fGetLanguageName = "Portugiesisch (Brasilien)"
+ case 81: fGetLanguageName = "Japanisch"
+ case 82: fGetLanguageName = "Koreanisch"
+ case 86: fGetLanguageName = "Chinesisch (einfach)"
+ case 88: fGetLanguageName = "Chinesisch (Trad.)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case 55 : ' Portuguese
+ select case CountryID
+ case 1: fGetLanguageName = "Inglês (EUA)"
+ case 31: fGetLanguageName = "Holand�s (Holanda)"
+ case 33: fGetLanguageName = "Francês (França)"
+ case 34: fGetLanguageName = "Espanhol (Espanha)"
+ case 39: fGetLanguageName = "Italiano (Itália)"
+ case 46: fGetLanguageName = "Sueco (Suécia)"
+ case 49: fGetLanguageName = "Alemão (Alemanha)"
+ case 55: fGetLanguageName = "Português (Brasil)"
+ case 81: fGetLanguageName = "Japonês"
+ case 82: fGetLanguageName = "Coreano"
+ case 86: fGetLanguageName = "Chinês (simplificado)"
+ case 88: fGetLanguageName = "Chinês (Tradicional)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case 81 : ' Japanese
+ select case CountryID
+ case 1: fGetLanguageName = "英語(米国)"
+ case 33: fGetLanguageName = "フランス語(フランス)"
+ case 34: fGetLanguageName = "スペイン語(スペイン)"
+ case 39: fGetLanguageName = "イタリア語(イタリア)"
+ case 46: fGetLanguageName = "スウェーデン語(スウェーデン)"
+ case 49: fGetLanguageName = "ドイツ語(ドイツ)"
+ case 55: fGetLanguageName = "�?ルトガル語(ブラジル)"
+ case 81: fGetLanguageName = "日本語"
+ case 82: fGetLanguageName = "韓国語"
+ case 86: fGetLanguageName = "中国語(簡体字)"
+ case 88: fGetLanguageName = "中国語(�?体字)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case 82 : ' Korean
+ select case CountryID
+ case 1: fGetLanguageName = "�?어(미국)"
+ case 33: fGetLanguageName = "스페�?�어(스페�?�)"
+ case 34: fGetLanguageName = "프랑스어(프랑스)"
+ case 39: fGetLanguageName = "�?�탈리아어 (�?�태리)"
+ case 46: fGetLanguageName = "스웨�?�어(스웨�?�)"
+ case 49: fGetLanguageName = "�?��?�어(�?��?�)"
+ case 55: fGetLanguageName = "�?�르투갈어(브�?�질)"
+ case 81: fGetLanguageName = "�?�본어"
+ case 82: fGetLanguageName = "한국어"
+ case 86: fGetLanguageName = "중국어(간체)"
+ case 88: fGetLanguageName = "중국어(번체)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case 86 : ' Chinese (simplified)
+ select case CountryID
+ case 1: fGetLanguageName = "英语(美国)"
+ case 33: fGetLanguageName = "法语(法国)"
+ case 34: fGetLanguageName = "西�?�牙语(西�?�牙)"
+ case 39: fGetLanguageName = "�?大利语(�?大利)"
+ case 46: fGetLanguageName = "瑞典语(瑞典)"
+ case 49: fGetLanguageName = "德语(德国)"
+ case 55: fGetLanguageName = "葡�?�牙语(巴西)"
+ case 81: fGetLanguageName = "日语"
+ case 82: fGetLanguageName = "�?鲜语"
+ case 86: fGetLanguageName = "中文(简体字)"
+ case 88: fGetLanguageName = "中文(�?体字)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case 88 : ' Chinese (traditional)
+ select case CountryID
+ case 1: fGetLanguageName = "英語(美國)"
+ case 33: fGetLanguageName = "法語(法國)"
+ case 34: fGetLanguageName = "西�?�牙語(西�?�牙)"
+ case 39: fGetLanguageName = "�?大利語(�?大利)"
+ case 46: fGetLanguageName = "瑞典語(瑞典)"
+ case 49: fGetLanguageName = "德語(德國)"
+ case 55: fGetLanguageName = "葡�?�牙語(巴西)"
+ case 81: fGetLanguageName = "日語"
+ case 82: fGetLanguageName = "韓語"
+ case 86: fGetLanguageName = "中文(簡體字)"
+ case 88: fGetLanguageName = "中文(�?體)"
+ case else :
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
+
+ case else : ' Fallback
+ QAErrorLog "Now, the test does not support for the language " +iSprache
+ fGetLanguageName = ""
+ end select
end function
diff --git a/testautomation/writer/optional/includes/undo/w_undo1.inc b/testautomation/writer/optional/includes/undo/w_undo1.inc
index c4c602dc6373..9fe34e5880a7 100644
--- a/testautomation/writer/optional/includes/undo/w_undo1.inc
+++ b/testautomation/writer/optional/includes/undo/w_undo1.inc
@@ -28,11 +28,6 @@
'*
'* short description : Writer Undo/Redo - Test
'*
-'************************************************************************
-'*
-' #1 tEditUndoRedo
-' #1 tEditUndoTOX ' undo with table of contents
-'*
'\***********************************************************************
testcase tEditUndoRedo
@@ -142,216 +137,216 @@ endcase
testcase tEditUndoTOX
QaErrorLog "tEditUndoTOX outcommented due to makeover."
goto endsub
-
- Dim CompareThis as string, Compare1 as string, Compare2 as string, Compare3 as string
- Dim CompareWith1 as string, CompareWith2 as string, MenuEntryEnabled as boolean
- ' Strings depends on the language so this testcase has to be adapted for all languages
- Select Case iSprache
- Case 1: Compare1 = "Undo: "
- Compare2 = "Insert index/table"
- Compare3 = "Remove index/table"
- Case 49:Compare1 = "R�ckg�ngig"
- Compare2 = "Einf�gen Verzeichnis"
- Compare3 = "Verzeichnis aufheben"
- Case else:
- QAErrorlog "Please adapt this testcase for this language!"
- Compare1 = "Undo: "
- Compare2 = "Insert index/table"
- Compare3 = "Remove index/table"
- end select
- CompareWith1 = Compare1 & Compare2
- CompareWith2 = Compare1 & Compare3
-
- '/// Open a new writerdocument
- Call hNewDocument
- '/// Insert an index in document
- printlog "Insert Index"
- InsertIndexes
+ Dim CompareThis as string, Compare1 as string, Compare2 as string, Compare3 as string
+ Dim CompareWith1 as string, CompareWith2 as string, MenuEntryEnabled as boolean
+ ' Strings depends on the language so this testcase has to be adapted for all languages
+ Select Case iSprache
+ Case 1: Compare1 = "Undo: "
+ Compare2 = "Insert index/table"
+ Compare3 = "Remove index/table"
+ Case 49:Compare1 = "R�ckg�ngig"
+ Compare2 = "Einf�gen Verzeichnis"
+ Compare3 = "Verzeichnis aufheben"
+ Case else:
+ QAErrorlog "Please adapt this testcase for this language!"
+ Compare1 = "Undo: "
+ Compare2 = "Insert index/table"
+ Compare3 = "Remove index/table"
+ end select
+ CompareWith1 = Compare1 & Compare2
+ CompareWith2 = Compare1 & Compare3
+
+ '/// Open a new writerdocument
+ Call hNewDocument
+
+ '/// Insert an index in document
+ printlog "Insert Index"
+ InsertIndexes
- Kontext
+ Kontext
Active.Setpage TabVerzeichnisseVerzeichnis
Kontext "TabVerzeichnisseVerzeichnis"
- Verzeichnistitel.Settext "MyUndoRedoIndex"
- TabVerzeichnisseVerzeichnis.Ok
-
- '/// Check if Edit/Undo menu shows 'Undo: Insert Index'
- Call hUseMenu()
- try
- MenuSelect(Menugetitemid(2)) ' Opens the Edit - Menu
- MenuEntryEnabled = True
- catch
- MenuEntryEnabled = False
- endcatch
- if MenuEntryEnabled = True then
- CompareThis = hhEntferneTilde(MenuGetItemText(Menugetitemid(1)))
- Call MenuSelect(0)
- if CompareWith1 > "" then
- if CompareThis <> CompareWith1 then
- Warnlog "Edit / Undo entry is wrong: " & CompareThis
- else
- printlog " - Menu Edit / Undo is ok"
- end if
- else
- QAErrorLog "Use this string in this testcase: " & CompareThis
- Call hCloseDocument
- goto endsub
- end if
- else
- Warnlog "Edit / Undo in menu is disabled !"
- end if
-
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "<Up><Home>"
- Wait 500
- '/// Check if Undo dropdown-Icon shows: 'Insert index'
- Select Case CheckUndoEntry ( 1, Compare2 )
- Case 0: Warnlog " - Undo-dropdown is disabled!"
- Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
- Case 2: printlog " - Entry in Undo-dropdown is ok!"
- end select
-
- '/// Update index with context menu entry: Update index"
- Kontext "DocumentWriter"
- DocumentWriter.OpenContextMenu
- ' Update Index/table in context menu
- printlog "Update Index"
- Call MenuSelect(Menugetitemid(7))
+ Verzeichnistitel.Settext "MyUndoRedoIndex"
+ TabVerzeichnisseVerzeichnis.Ok
+
+ '/// Check if Edit/Undo menu shows 'Undo: Insert Index'
+ Call hUseMenu()
+ try
+ MenuSelect(Menugetitemid(2)) ' Opens the Edit - Menu
+ MenuEntryEnabled = True
+ catch
+ MenuEntryEnabled = False
+ endcatch
+ if MenuEntryEnabled = True then
+ CompareThis = hhEntferneTilde(MenuGetItemText(Menugetitemid(1)))
+ Call MenuSelect(0)
+ if CompareWith1 > "" then
+ if CompareThis <> CompareWith1 then
+ Warnlog "Edit / Undo entry is wrong: " & CompareThis
+ else
+ printlog " - Menu Edit / Undo is ok"
+ end if
+ else
+ QAErrorLog "Use this string in this testcase: " & CompareThis
+ Call hCloseDocument
+ goto endsub
+ end if
+ else
+ Warnlog "Edit / Undo in menu is disabled !"
+ end if
+
+ Kontext "DocumentWriter"
+ DocumentWriter.TypeKeys "<Up><Home>"
+ Wait 500
+ '/// Check if Undo dropdown-Icon shows: 'Insert index'
+ Select Case CheckUndoEntry ( 1, Compare2 )
+ Case 0: Warnlog " - Undo-dropdown is disabled!"
+ Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
+ Case 2: printlog " - Entry in Undo-dropdown is ok!"
+ end select
+
+ '/// Update index with context menu entry: Update index"
+ Kontext "DocumentWriter"
+ DocumentWriter.OpenContextMenu
+ ' Update Index/table in context menu
+ printlog "Update Index"
+ Call MenuSelect(Menugetitemid(7))
+
+ '/// Check if Edit/Undo menu shows 'Undo: Insert Index' after index update
+ Call hUseMenu()
+ try
+ MenuSelect(Menugetitemid(2)) ' Opens the Edit - Menu
+ MenuEntryEnabled = True
+ catch
+ MenuEntryEnabled = False
+ endcatch
+ if MenuEntryEnabled = True then
+ CompareThis = hhEntferneTilde(MenuGetItemText(Menugetitemid(1)))
+ Call MenuSelect(0)
+ if CompareWith1 > "" then
+ if CompareThis <> CompareWith1 then
+ Warnlog "Edit / Undo entry is wrong: " & CompareThis
+ else
+ printlog " - Menu Edit / Undo is ok"
+ end if
+ else
+ QAErrorLog "Use this string in this testcase: " & CompareThis
+ Call hCloseDocument
+ goto endsub
+ end if
+ else
+ Warnlog "Edit / Undo in menu is disabled !"
+ end if
- '/// Check if Edit/Undo menu shows 'Undo: Insert Index' after index update
- Call hUseMenu()
- try
- MenuSelect(Menugetitemid(2)) ' Opens the Edit - Menu
- MenuEntryEnabled = True
- catch
- MenuEntryEnabled = False
- endcatch
- if MenuEntryEnabled = True then
- CompareThis = hhEntferneTilde(MenuGetItemText(Menugetitemid(1)))
- Call MenuSelect(0)
- if CompareWith1 > "" then
- if CompareThis <> CompareWith1 then
- Warnlog "Edit / Undo entry is wrong: " & CompareThis
- else
- printlog " - Menu Edit / Undo is ok"
- end if
- else
- QAErrorLog "Use this string in this testcase: " & CompareThis
- Call hCloseDocument
- goto endsub
- end if
- else
- Warnlog "Edit / Undo in menu is disabled !"
- end if
-
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "<Up><Home>"
- Wait 500
- '/// Check if Undo dropdown-Icon shows: 'Insert index' after index update
- Select Case CheckUndoEntry ( 1, Compare2 )
- Case 0: Warnlog " - Undo-dropdown is disabled!"
- Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
- Case 2: printlog " - Entry in Undo-dropdown is ok!"
- end select
-
- '/// Delete index with context menu entry: Delete index"
- Kontext "DocumentWriter"
- DocumentWriter.OpenContextMenu
- ' Delete Index/table in context menu
- printlog "Remove Index"
- Call MenuSelect(Menugetitemid(9))
+ Kontext "DocumentWriter"
+ DocumentWriter.TypeKeys "<Up><Home>"
+ Wait 500
+ '/// Check if Undo dropdown-Icon shows: 'Insert index' after index update
+ Select Case CheckUndoEntry ( 1, Compare2 )
+ Case 0: Warnlog " - Undo-dropdown is disabled!"
+ Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
+ Case 2: printlog " - Entry in Undo-dropdown is ok!"
+ end select
- '/// Check if Edit/Undo menu shows 'Undo: Remove index' after deleting index
- Call hUseMenu()
- try
- MenuSelect(Menugetitemid(2)) ' Opens the Edit - Menu
- MenuEntryEnabled = True
- catch
- MenuEntryEnabled = False
- endcatch
- if MenuEntryEnabled = True then
- CompareThis = hhEntferneTilde(MenuGetItemText(Menugetitemid(1)))
- Call MenuSelect(0)
- if CompareWith2 > "" then
- if CompareThis <> CompareWith2 then
- Warnlog "Edit / Undo entry is wrong: " & CompareThis
- else
- printlog " - Menu Edit / Undo is ok"
- end if
- else
- QAErrorLog "Use this string in this testcase: " & CompareThis
- Call hCloseDocument
- goto endsub
- end if
- else
- Warnlog "Edit / Undo in menu is disabled !"
- end if
-
- Kontext "DocumentWriter"
- DocumentWriter.TypeKeys "<Up><Home>"
- Wait 500
- '/// Check if Undo dropdown-Icon shows: 'Remove index' after deleting index
- Select Case CheckUndoEntry ( 1, Compare3 )
- Case 0: Warnlog " - Undo-dropdown is disabled!"
- Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
- Case 2: printlog " - Entry in Undo-dropdown is ok!"
- end select
-
- printlog "Working undo"
- '/// Edit / Undo 1 time -> Index should be restored
- EditUndo
- Sleep 1
- Call wNavigatorAuswahl ( 10, 1 )
- wait 500
- InsertIndexes
+ '/// Delete index with context menu entry: Delete index"
+ Kontext "DocumentWriter"
+ DocumentWriter.OpenContextMenu
+ ' Delete Index/table in context menu
+ printlog "Remove Index"
+ Call MenuSelect(Menugetitemid(9))
- wait 500
- Kontext
+ '/// Check if Edit/Undo menu shows 'Undo: Remove index' after deleting index
+ Call hUseMenu()
try
- Active.Setpage TabVerzeichnisseVerzeichnis
- catch
- Warnlog "Index dialog has not been opened!"
- Call hCloseDocument
- goto endsub
- endcatch
+ MenuSelect(Menugetitemid(2)) ' Opens the Edit - Menu
+ MenuEntryEnabled = True
+ catch
+ MenuEntryEnabled = False
+ endcatch
+ if MenuEntryEnabled = True then
+ CompareThis = hhEntferneTilde(MenuGetItemText(Menugetitemid(1)))
+ Call MenuSelect(0)
+ if CompareWith2 > "" then
+ if CompareThis <> CompareWith2 then
+ Warnlog "Edit / Undo entry is wrong: " & CompareThis
+ else
+ printlog " - Menu Edit / Undo is ok"
+ end if
+ else
+ QAErrorLog "Use this string in this testcase: " & CompareThis
+ Call hCloseDocument
+ goto endsub
+ end if
+ else
+ Warnlog "Edit / Undo in menu is disabled !"
+ end if
- Kontext "TabVerzeichnisseVerzeichnis"
- if Verzeichnistitel.Gettext = "MyUndoRedoIndex" then
- printlog " - Index has been restored"
- TabVerzeichnisseVerzeichnis.Cancel
- '/// Check if Undo dropdown-Icon shows: 'Insert index'
- Select Case CheckUndoEntry ( 1, Compare2 )
- Case 0: Warnlog " - Undo-dropdown is disabled!"
- Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
- Case 2: printlog " - Entry in Undo-dropdown is ok!"
- end select
+ Kontext "DocumentWriter"
+ DocumentWriter.TypeKeys "<Up><Home>"
+ Wait 500
+ '/// Check if Undo dropdown-Icon shows: 'Remove index' after deleting index
+ Select Case CheckUndoEntry ( 1, Compare3 )
+ Case 0: Warnlog " - Undo-dropdown is disabled!"
+ Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
+ Case 2: printlog " - Entry in Undo-dropdown is ok!"
+ end select
- '/// Check if Redo dropdown-Icon shows: 'Remove index' after deleting index
- Select Case CheckRedoEntry ( 1, Compare3 )
- Case 0: Warnlog " - Redo-dropdown is disabled!"
- Case 1: Warnlog " - Entry in Redo-dropdown is wrong!"
- Case 2: printlog " - Entry in Redo-dropdown is ok!"
- end select
+ printlog "Working undo"
+ '/// Edit / Undo 1 time -> Index should be restored
+ EditUndo
+ Sleep 1
+ Call wNavigatorAuswahl ( 10, 1 )
+ wait 500
+ InsertIndexes
- '/// Edit / Undo one more time
- '/// Check if Undo dropdown-Icon is disabled
- Select Case CheckUndoEntry ( 1, Compare2 )
- Case 0: printlog " - Undo-dropdown is disabled!"
- Case 1: Warnlog " - Entry in Undo-dropdown is enabled!"
- Case 2: Warnlog " - Entry in Undo-dropdown is enabled!"
- end select
+ wait 500
+ Kontext
+ try
+ Active.Setpage TabVerzeichnisseVerzeichnis
+ catch
+ Warnlog "Index dialog has not been opened!"
+ Call hCloseDocument
+ goto endsub
+ endcatch
+
+ Kontext "TabVerzeichnisseVerzeichnis"
+ if Verzeichnistitel.Gettext = "MyUndoRedoIndex" then
+ printlog " - Index has been restored"
+ TabVerzeichnisseVerzeichnis.Cancel
+ '/// Check if Undo dropdown-Icon shows: 'Insert index'
+ Select Case CheckUndoEntry ( 1, Compare2 )
+ Case 0: Warnlog " - Undo-dropdown is disabled!"
+ Case 1: Warnlog " - Entry in Undo-dropdown is wrong!"
+ Case 2: printlog " - Entry in Undo-dropdown is ok!"
+ end select
+
+ '/// Check if Redo dropdown-Icon shows: 'Remove index' after deleting index
+ Select Case CheckRedoEntry ( 1, Compare3 )
+ Case 0: Warnlog " - Redo-dropdown is disabled!"
+ Case 1: Warnlog " - Entry in Redo-dropdown is wrong!"
+ Case 2: printlog " - Entry in Redo-dropdown is ok!"
+ end select
- '/// Check if Redo dropdown-Icon shows: 'Insert index' after Undo 2 times
- Select Case CheckRedoEntry ( 1, Compare2 )
- Case 0: Warnlog " - Redo-dropdown is disabled!"
- Case 1: Warnlog " - Entry in Redo-dropdown is wrong!"
- Case 2: printlog " - Entry in Redo-dropdown is ok!"
- end select
+ '/// Edit / Undo one more time
+ '/// Check if Undo dropdown-Icon is disabled
+ Select Case CheckUndoEntry ( 1, Compare2 )
+ Case 0: printlog " - Undo-dropdown is disabled!"
+ Case 1: Warnlog " - Entry in Undo-dropdown is enabled!"
+ Case 2: Warnlog " - Entry in Undo-dropdown is enabled!"
+ end select
- else
- Warnlog "Index has not been removed!"
- TabVerzeichnisseVerzeichnis.Cancel
- end if
+ '/// Check if Redo dropdown-Icon shows: 'Insert index' after Undo 2 times
+ Select Case CheckRedoEntry ( 1, Compare2 )
+ Case 0: Warnlog " - Redo-dropdown is disabled!"
+ Case 1: Warnlog " - Entry in Redo-dropdown is wrong!"
+ Case 2: printlog " - Entry in Redo-dropdown is ok!"
+ end select
- Call hCloseDocument
+ else
+ Warnlog "Index has not been removed!"
+ TabVerzeichnisseVerzeichnis.Cancel
+ end if
+
+ Call hCloseDocument
endcase
diff --git a/testautomation/writer/optional/includes/undo/w_undo_history_1.inc b/testautomation/writer/optional/includes/undo/w_undo_history_1.inc
index 43356c09017c..72fe352b2319 100755..100644
--- a/testautomation/writer/optional/includes/undo/w_undo_history_1.inc
+++ b/testautomation/writer/optional/includes/undo/w_undo_history_1.inc
@@ -33,172 +33,172 @@
sub w_undo_history_1
- ' a < 20 characters long string
- Call tUndoOverwrite ' Typing & Overwrite
- Call tUndoFindAndReplace ' Replace
- Call tUndoReplaceAll ' Replace all & Delete
- Call tUndoSort ' Sort
- Call tUndoTableConvert ' Text convert to table
+ ' a < 20 characters long string
+ Call tUndoOverwrite ' Typing & Overwrite
+ Call tUndoFindAndReplace ' Replace
+ Call tUndoReplaceAll ' Replace all & Delete
+ Call tUndoSort ' Sort
+ Call tUndoTableConvert ' Text convert to table
end sub
testcase tUndoOverwrite
- '/// new document
- Call hNewDocument
- '/// <U><B>CHECK: Typing</B></U>
- printlog "- TYPING"
- '/// write a < 20 characters long string: If20CharactersThere
- Call wTypeKeys "If20CharactersThere"
- '/// string in Undo list has to be: Typing: If20CharactersThere
- Call CheckUndoStringInUndoList ( 1, "'If20Char...rsThere'" )
-
- '/// <U><B>CHECK: Overwrite</B></U>
- printlog "- OVERWRITE"
- '/// press 'Home' key
- Call wTypeKeys "<Home>"
- '/// press 'Ins' key
- Call wTypeKeys "<Insert>"
- '/// write a < 20 characters long string: IsThatDifferent4You
- Call wTypeKeys "IsThatDifferent4You"
- '/// string in Undo list has to be: Overwrite: IsThatDifferent4You
- Call CheckUndoStringInUndoList ( 2, "'IsThatDifferent4You'" )
-
- '/// CloseDocument
- Call hCloseDocument
+ '/// new document
+ Call hNewDocument
+ '/// <U><B>CHECK: Typing</B></U>
+ printlog "- TYPING"
+ '/// write a < 20 characters long string: If20CharactersThere
+ Call wTypeKeys "If20CharactersThere"
+ '/// string in Undo list has to be: Typing: If20CharactersThere
+ Call CheckUndoStringInUndoList ( 1, "'If20Char...rsThere'" )
+
+ '/// <U><B>CHECK: Overwrite</B></U>
+ printlog "- OVERWRITE"
+ '/// press 'Home' key
+ Call wTypeKeys "<Home>"
+ '/// press 'Ins' key
+ Call wTypeKeys "<Insert>"
+ '/// write a < 20 characters long string: IsThatDifferent4You
+ Call wTypeKeys "IsThatDifferent4You"
+ '/// string in Undo list has to be: Overwrite: IsThatDifferent4You
+ Call CheckUndoStringInUndoList ( 2, "'IsThatDifferent4You'" )
+
+ '/// CloseDocument
+ Call hCloseDocument
endcase
testcase tUndoFindAndReplace
- '/// new Document
- '/// <U><B>CHECK: Replace</B></U>
- printlog "- REPLACE"
- Call hNewDocument
- '/// write a < 20 characters long string: If20CharactersThere
- Call wTypeKeys "If20CharactersThere"
- '/// Select text
- Call wTypeKeys "<Shift Home>"
- '/// Edit / Find and Replace
- EditSearchAndReplace
- Kontext "FindAndReplace"
- '/// Type 'ThisReplacementText' in 'Replace with' field
- ReplaceWith.Settext "ThisReplacementText"
- '/// Choose Button 'Replace' and close dialog
- ReplaceBtn.Click
- wait 500
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- try
- Active.Yes
- catch
- Active.Ok
- endcatch
- end if
- end if
- Kontext "FindAndReplace"
- FindAndReplace.Close
- Kontext "DocumentWriter"
- '/// string in Undo list has to be: Replace: 'IsThatDifferent4You' -> 'ThisReplacementText'
- Call CheckUndoStringInUndoList ( 3, "'If20CharactersThere' -> 'ThisReplacementText'" )
-
- '/// Close document
- Call hCloseDocument
+ '/// new Document
+ '/// <U><B>CHECK: Replace</B></U>
+ printlog "- REPLACE"
+ Call hNewDocument
+ '/// write a < 20 characters long string: If20CharactersThere
+ Call wTypeKeys "If20CharactersThere"
+ '/// Select text
+ Call wTypeKeys "<Shift Home>"
+ '/// Edit / Find and Replace
+ EditSearchAndReplace
+ Kontext "FindAndReplace"
+ '/// Type 'ThisReplacementText' in 'Replace with' field
+ ReplaceWith.Settext "ThisReplacementText"
+ '/// Choose Button 'Replace' and close dialog
+ ReplaceBtn.Click
+ wait 500
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ try
+ Active.Yes
+ catch
+ Active.Ok
+ endcatch
+ end if
+ end if
+ Kontext "FindAndReplace"
+ FindAndReplace.Close
+ Kontext "DocumentWriter"
+ '/// string in Undo list has to be: Replace: 'IsThatDifferent4You' -> 'ThisReplacementText'
+ Call CheckUndoStringInUndoList ( 3, "'If20CharactersThere' -> 'ThisReplacementText'" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoReplaceAll
- Dim CheckString as string
-
- '/// new document
- '/// <U><B>CHECK: Replace all</B></U>
- printlog "- REPLACE ALL"
- Call hNewDocument
- '/// Insert the dummy text and point cursor at the top of the document
- Call wBlindtextEinfuegen
- Call wTypeKeys "<Mod1 Home>"
- '/// Edit / Find and Replace
- EditSearchAndReplace
- Kontext "FindAndReplace"
- '/// Type 'and' in 'Search for' field
- SearchFor.Settext "and"
- '/// Type 'ThisReplacementText' in 'Replace with' field
- ReplaceWith.Settext "###"
- '/// Choose Button 'Replace' and close dialog
- ReplaceAll.Click
- wait 500
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then Active.Ok
- end if
- Kontext "FindAndReplace"
- FindAndReplace.Close
-
- Kontext "DocumentWriter"
- '/// string in Undo list has to be: Replace: '14 occurences of and'
- Call CheckUndoStringInUndoList ( 5, "14 occurences of 'and'" )
-
- '/// <U><B>CHECK: Delete</B></U>
- '/// Backspace 4 times to delete characters
- Call wTypeKeys "<Backspace>", 4
- '/// string in Undo list has to be: Delete: '###'
- printlog "- DELETE"
- Call CheckUndoStringInUndoList ( 11, "' ###'" )
-
- '/// Close document
- Call hCloseDocument
+ Dim CheckString as string
+
+ '/// new document
+ '/// <U><B>CHECK: Replace all</B></U>
+ printlog "- REPLACE ALL"
+ Call hNewDocument
+ '/// Insert the dummy text and point cursor at the top of the document
+ Call wBlindtextEinfuegen
+ Call wTypeKeys "<Mod1 Home>"
+ '/// Edit / Find and Replace
+ EditSearchAndReplace
+ Kontext "FindAndReplace"
+ '/// Type 'and' in 'Search for' field
+ SearchFor.Settext "and"
+ '/// Type 'ThisReplacementText' in 'Replace with' field
+ ReplaceWith.Settext "###"
+ '/// Choose Button 'Replace' and close dialog
+ ReplaceAll.Click
+ wait 500
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then Active.Ok
+ end if
+ Kontext "FindAndReplace"
+ FindAndReplace.Close
+
+ Kontext "DocumentWriter"
+ '/// string in Undo list has to be: Replace: '14 occurences of and'
+ Call CheckUndoStringInUndoList ( 5, "14 occurences of 'and'" )
+
+ '/// <U><B>CHECK: Delete</B></U>
+ '/// Backspace 4 times to delete characters
+ Call wTypeKeys "<Backspace>", 4
+ '/// string in Undo list has to be: Delete: '###'
+ printlog "- DELETE"
+ Call CheckUndoStringInUndoList ( 11, "' ###'" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoSort
- '/// new document
- Call hNewDocument
- '/// CHECK: Text sort
- printlog "- TEXT SORT"
- '/// Enter some text like "This<Return>is a<Return>test<Return>"
- Call wTypeKeys "This"
- Call wTypeKeys "<Return>"
- Call wTypeKeys "is a"
- Call wTypeKeys "<Return>"
- Call wTypeKeys "test"
- Call wTypeKeys "<Return>"
- '/// Select all and Tools -> Sort
- Call wTypeKeys "<Mod1 A>"
- ToolsSort
+ '/// new document
+ Call hNewDocument
+ '/// CHECK: Text sort
+ printlog "- TEXT SORT"
+ '/// Enter some text like "This<Return>is a<Return>test<Return>"
+ Call wTypeKeys "This"
+ Call wTypeKeys "<Return>"
+ Call wTypeKeys "is a"
+ Call wTypeKeys "<Return>"
+ Call wTypeKeys "test"
+ Call wTypeKeys "<Return>"
+ '/// Select all and Tools -> Sort
+ Call wTypeKeys "<Mod1 A>"
+ ToolsSort
Kontext "Sortieren"
Sortieren.Ok
-
- '/// string in Undo list has to be: "Sort text"
- Call CheckUndoStringInUndoList ( 6, "Sort text" )
-
- '/// Close document
- Call hCloseDocument
+
+ '/// string in Undo list has to be: "Sort text"
+ Call CheckUndoStringInUndoList ( 6, "Sort text" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoTableConvert
- '/// new document
- Call hNewDocument
- '/// CHECK: Text convert to table
- printlog "TEXT CONVERT TO TABLE"
- '/// Enter some text like "This<Return>is a<Return>test<Return>"
- Call wTypeKeys "This"
- Call wTypeKeys "<Return>"
- Call wTypeKeys "is a"
- Call wTypeKeys "<Return>"
- Call wTypeKeys "test"
- Call wTypeKeys "<Return>"
- '/// Select all and Tools - Text <> Table
- Call wTypeKeys "<Mod1 A>"
- ToolsTextInTable
- Kontext "TextInTabelleUmwandeln"
- Absatz.Check
- TextInTabelleUmwandeln.Ok
- '/// string in Undo list has to be: "Convert text -> table"
- Call CheckUndoStringInUndoList ( 7, "Convert text -> table" )
-
- '/// Close document
- Call hCloseDocument
+ '/// new document
+ Call hNewDocument
+ '/// CHECK: Text convert to table
+ printlog "TEXT CONVERT TO TABLE"
+ '/// Enter some text like "This<Return>is a<Return>test<Return>"
+ Call wTypeKeys "This"
+ Call wTypeKeys "<Return>"
+ Call wTypeKeys "is a"
+ Call wTypeKeys "<Return>"
+ Call wTypeKeys "test"
+ Call wTypeKeys "<Return>"
+ '/// Select all and Tools - Text <> Table
+ Call wTypeKeys "<Mod1 A>"
+ ToolsTextInTable
+ Kontext "TextInTabelleUmwandeln"
+ Absatz.Check
+ TextInTabelleUmwandeln.Ok
+ '/// string in Undo list has to be: "Convert text -> table"
+ Call CheckUndoStringInUndoList ( 7, "Convert text -> table" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
diff --git a/testautomation/writer/optional/includes/undo/w_undo_history_2.inc b/testautomation/writer/optional/includes/undo/w_undo_history_2.inc
index a2f305a45f8c..5104b29af85b 100755..100644
--- a/testautomation/writer/optional/includes/undo/w_undo_history_2.inc
+++ b/testautomation/writer/optional/includes/undo/w_undo_history_2.inc
@@ -33,496 +33,496 @@
sub w_undo_history_2
- ' a > 20 characters long string
- Call tUndoOverwriteLong ' Typing & Overwrite
- Call tUndoFindAndReplaceLong ' Replace
- Call tUndoDeleteMultiSelection ' Delete a multi-selection
- Call tUndoParagraph ' Paragraphs
- Call tUndoClipboard ' Copy/Paste
- Call tUndoChanges ' Changes accept an reject
- Call tUndoLineBreak ' Manual breaks - line break
- Call tUndoColumnBreak ' Manual breaks - column break
- Call tUndoPageBreak ' Manual breaks - page break
- Call tUndoFields ' Fields (Insert/Modify / Delete)
- Call tUndoSpecialCharacter ' Special Character (Insert/ Delete)
- Call tUndoStyles ' Styles (Apply/Modify/Find&Replace/Promote/Demote)
+ ' a > 20 characters long string
+ Call tUndoOverwriteLong ' Typing & Overwrite
+ Call tUndoFindAndReplaceLong ' Replace
+ Call tUndoDeleteMultiSelection ' Delete a multi-selection
+ Call tUndoParagraph ' Paragraphs
+ Call tUndoClipboard ' Copy/Paste
+ Call tUndoChanges ' Changes accept an reject
+ Call tUndoLineBreak ' Manual breaks - line break
+ Call tUndoColumnBreak ' Manual breaks - column break
+ Call tUndoPageBreak ' Manual breaks - page break
+ Call tUndoFields ' Fields (Insert/Modify / Delete)
+ Call tUndoSpecialCharacter ' Special Character (Insert/ Delete)
+ Call tUndoStyles ' Styles (Apply/Modify/Find&Replace/Promote/Demote)
end sub
testcase tUndoOverwriteLong
- '/// <B>Typing & overwrite a > 20 characters long string</B>
- '/// new document
- Call hNewDocument
- '/// <U><B>CHECK: Typing</B></U>
- printlog "- TYPING"
- '/// write a > 20 characters long string: ThisSentenceHasMoreThan20Characters
- Call wTypeKeys ( "ThisSentenceHasMoreThan20Characters" )
- '/// string in Undo list has to be: Typing: ThisSente...aracters
- Call CheckUndoStringInUndoList ( 1, "'ThisSent...racters'" )
-
- '/// <U><B>CHECK: Overwrite</B></U>
- printlog "- OVERWRITE"
- '/// press 'Home' key
- Call wTypeKeys "<Home>"
- '/// press 'Ins' key
- Call wTypeKeys "<Insert>"
- '/// write a > 20 characters long string: ThePreviousSentenceHasBeenOverwritten
- Call wTypeKeys ( "ThePreviousSentenceHasBeenOverwritten" )
- '/// string in Undo list has to be: Overwrite: ThePrevio...rwritten
- Call CheckUndoStringInUndoList ( 2, "'ThePrevio...rwritten'" )
-
- '/// CloseDocument
- Call hCloseDocument
+ '/// <B>Typing & overwrite a > 20 characters long string</B>
+ '/// new document
+ Call hNewDocument
+ '/// <U><B>CHECK: Typing</B></U>
+ printlog "- TYPING"
+ '/// write a > 20 characters long string: ThisSentenceHasMoreThan20Characters
+ Call wTypeKeys ( "ThisSentenceHasMoreThan20Characters" )
+ '/// string in Undo list has to be: Typing: ThisSente...aracters
+ Call CheckUndoStringInUndoList ( 1, "'ThisSent...racters'" )
+
+ '/// <U><B>CHECK: Overwrite</B></U>
+ printlog "- OVERWRITE"
+ '/// press 'Home' key
+ Call wTypeKeys "<Home>"
+ '/// press 'Ins' key
+ Call wTypeKeys "<Insert>"
+ '/// write a > 20 characters long string: ThePreviousSentenceHasBeenOverwritten
+ Call wTypeKeys ( "ThePreviousSentenceHasBeenOverwritten" )
+ '/// string in Undo list has to be: Overwrite: ThePrevio...rwritten
+ Call CheckUndoStringInUndoList ( 2, "'ThePrevio...rwritten'" )
+
+ '/// CloseDocument
+ Call hCloseDocument
endcase
testcase tUndoFindAndReplaceLong
- '/// <B>Replace a > 20 characters long string</B>
- '/// new Document
- '/// <U><B>CHECK: Replace</B></U>
- printlog "- REPLACE"
- Call hNewDocument
- '/// write a > 20 characters long string: ThePreviousSentenceHasBeenOverwritten
- Call wTypeKeys ( "ThePreviousSentenceHasBeenOverwritten" )
- '/// Select text
- Call wTypeKeys ( "<Shift Home>" )
- '/// Edit / Find and Replace
- EditSearchAndReplace
- Kontext "FindAndReplace"
- '/// Type 'ThisIsAboutALongTextThatHadToBeReplaced' in 'Replace with' field
- ReplaceWith.Settext "ThisIsAboutALongTextThatHadToBeReplaced"
- '/// Choose Button 'Replace' and close dialog
- ReplaceBtn.Click
- wait 500
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- try
- Active.Yes
- catch
- Active.Ok
- endcatch
- end if
- end if
- Kontext "FindAndReplace"
- FindAndReplace.Close
- Kontext "DocumentWriter"
- '/// string in Undo list has to be: Replace: 'ThePrevio...rwritten' -> 'ThisIsAbo...Replaced'
- Call CheckUndoStringInUndoList ( 3, "'ThePrevio...rwritten' -> 'ThisIsAbo...Replaced'" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Replace a > 20 characters long string</B>
+ '/// new Document
+ '/// <U><B>CHECK: Replace</B></U>
+ printlog "- REPLACE"
+ Call hNewDocument
+ '/// write a > 20 characters long string: ThePreviousSentenceHasBeenOverwritten
+ Call wTypeKeys ( "ThePreviousSentenceHasBeenOverwritten" )
+ '/// Select text
+ Call wTypeKeys ( "<Shift Home>" )
+ '/// Edit / Find and Replace
+ EditSearchAndReplace
+ Kontext "FindAndReplace"
+ '/// Type 'ThisIsAboutALongTextThatHadToBeReplaced' in 'Replace with' field
+ ReplaceWith.Settext "ThisIsAboutALongTextThatHadToBeReplaced"
+ '/// Choose Button 'Replace' and close dialog
+ ReplaceBtn.Click
+ wait 500
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ try
+ Active.Yes
+ catch
+ Active.Ok
+ endcatch
+ end if
+ end if
+ Kontext "FindAndReplace"
+ FindAndReplace.Close
+ Kontext "DocumentWriter"
+ '/// string in Undo list has to be: Replace: 'ThePrevio...rwritten' -> 'ThisIsAbo...Replaced'
+ Call CheckUndoStringInUndoList ( 3, "'ThePrevio...rwritten' -> 'ThisIsAbo...Replaced'" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoDeleteMultiSelection
- '/// <B>Delete a multi-selection</B>
- printlog "- Delete a multi-selection"
- '/// new Document
- Call hNewDocument
- '/// write down: the deletion of a multi-selection
- Call wTypeKeys ( "the deletion of a multi-selection" )
- '/// with Shift + F8 enter multi-selection mode
- Call wTypeKeys ( "<SHIFT F8>" )
- '/// multi-select "the ", " a" and "multi-"
- Call wTypeKeys ( "<MOD1 Left>" )
- Call wTypeKeys ( "<MOD1 SHIFT Left>", 2)
- Call wTypeKeys ( "<Left>" )
- Call wTypeKeys ( "<SHIFT Left>", 2)
- Call wTypeKeys ( "<Left>" )
- Call wTypeKeys ( "<MOD1 Left>", 2)
- Call wTypeKeys ( "<Left>" )
- Call wTypeKeys ( "<MOD1 SHIFT Left>")
- '/// Delete the multi-selection
- Call wTypeKeys ( "<DELETE>" )
- '/// string in Undo-list has to be: 'Delete: multi-selection'"
- Call CheckUndoStringInUndoList ( 4, "Delete multiple selection" )
- '/// Close document
- Call hCloseDocument
+ '/// <B>Delete a multi-selection</B>
+ printlog "- Delete a multi-selection"
+ '/// new Document
+ Call hNewDocument
+ '/// write down: the deletion of a multi-selection
+ Call wTypeKeys ( "the deletion of a multi-selection" )
+ '/// with Shift + F8 enter multi-selection mode
+ Call wTypeKeys ( "<SHIFT F8>" )
+ '/// multi-select "the ", " a" and "multi-"
+ Call wTypeKeys ( "<MOD1 Left>" )
+ Call wTypeKeys ( "<MOD1 SHIFT Left>", 2)
+ Call wTypeKeys ( "<Left>" )
+ Call wTypeKeys ( "<SHIFT Left>", 2)
+ Call wTypeKeys ( "<Left>" )
+ Call wTypeKeys ( "<MOD1 Left>", 2)
+ Call wTypeKeys ( "<Left>" )
+ Call wTypeKeys ( "<MOD1 SHIFT Left>")
+ '/// Delete the multi-selection
+ Call wTypeKeys ( "<DELETE>" )
+ '/// string in Undo-list has to be: 'Delete: multi-selection'"
+ Call CheckUndoStringInUndoList ( 4, "Delete multiple selection" )
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoParagraph
- '/// <B>Insert and delete a paragraph</B>
- printlog "- Insert Paragraph"
- '/// new document
- Call hNewDocument
- '/// press return to insert a new paragraph
- Call wTypeKeys ( "<Return>" )
- '/// string in Undo-list has to be: "New paragraph"
- Call CheckUndoStringInUndoList ( 8, "New Paragraph" )
- printlog "- Delete Paragraph"
- '/// press Backspace to delete paragraph
- Call wTypeKeys ( "<Backspace>" )
- '/// string in Undo-list has to be: "Delete paragraph"
- Call CheckUndoStringInUndoList ( 8, "Delete Paragraph" )
-
- '/// close document
- Call hCloseDocument
+ '/// <B>Insert and delete a paragraph</B>
+ printlog "- Insert Paragraph"
+ '/// new document
+ Call hNewDocument
+ '/// press return to insert a new paragraph
+ Call wTypeKeys ( "<Return>" )
+ '/// string in Undo-list has to be: "New paragraph"
+ Call CheckUndoStringInUndoList ( 8, "New Paragraph" )
+ printlog "- Delete Paragraph"
+ '/// press Backspace to delete paragraph
+ Call wTypeKeys ( "<Backspace>" )
+ '/// string in Undo-list has to be: "Delete paragraph"
+ Call CheckUndoStringInUndoList ( 8, "Delete Paragraph" )
+
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoClipboard
- Dim i as integer
-
- '/// <B>Copy / Paste</B>
- printlog "- Copy/Paste"
- '/// new document
- Call hNewDocument
- '/// Insert some text in document and copy it
- Call wTypeKeys ( "CopyAndPasteInUndoList" )
- Call wTypeKeys ( "<Shift Home>" )
- EditCopy
- Call wTypeKeys ( "<End><Return>" )
- '/// Paste the text in all available formats
- For i = 1 to 4
- Sleep 2
- try
- EditPasteSpecialWriter
- catch
- i=5
- endcatch
- Kontext "InhaltEinfuegen"
- try
- Auswahl.Select i
- printlog " - Paste as: " + Auswahl.GetSeltext
- wait 500
- catch
- Warnlog "Not 4 but " & Auswahl.GetItemCount & " Clipboard-formats"
- endcatch
- InhaltEinfuegen.Ok
- '/// string in Undo-list has to be: "Paste clipboard"
- Call CheckUndoStringInUndoList ( 9 )
- Call wTypeKeys ( "<Return>" )
- next i
- '/// close document
- Call hCloseDocument
+ Dim i as integer
+
+ '/// <B>Copy / Paste</B>
+ printlog "- Copy/Paste"
+ '/// new document
+ Call hNewDocument
+ '/// Insert some text in document and copy it
+ Call wTypeKeys ( "CopyAndPasteInUndoList" )
+ Call wTypeKeys ( "<Shift Home>" )
+ EditCopy
+ Call wTypeKeys ( "<End><Return>" )
+ '/// Paste the text in all available formats
+ For i = 1 to 4
+ Sleep 2
+ try
+ EditPasteSpecialWriter
+ catch
+ i=5
+ endcatch
+ Kontext "InhaltEinfuegen"
+ try
+ Auswahl.Select i
+ printlog " - Paste as: " + Auswahl.GetSeltext
+ wait 500
+ catch
+ Warnlog "Not 4 but " & Auswahl.GetItemCount & " Clipboard-formats"
+ endcatch
+ InhaltEinfuegen.Ok
+ '/// string in Undo-list has to be: "Paste clipboard"
+ Call CheckUndoStringInUndoList ( 9 )
+ Call wTypeKeys ( "<Return>" )
+ next i
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoChanges
-
- '/// <B>Changes accept and reject</B>
- printlog "- Changes accept and reject"
- '/// new document
- Call hNewDocument
+
+ '/// <B>Changes accept and reject</B>
+ printlog "- Changes accept and reject"
+ '/// new document
+ Call hNewDocument
UseBindings
'/// Select Edit / Changes / Record
EditChangesRecord
- '/// Insert a string in document
- Call wTypeKeys ( "This is a test" )
- '/// Select Edit / Changes / Accept or Reject
+ '/// Insert a string in document
+ Call wTypeKeys ( "This is a test" )
+ '/// Select Edit / Changes / Accept or Reject
EditChangesAcceptOrReject
'/// Dialog 'Accept or reject changes' has to come up ///
Kontext "Redlining"
if Redlining.Exists then
- '/// + Select tabpage 'List'
- TabControl.SetPage TabListe
- '/// + Select 'Accept All'
- Akzeptieren.Click
- Sleep 2
- '/// + Close Redlining dialog
- Redlining.Close
- else
- Warnlog "Redlining dialog not up!"
- Call hCloseDocument
- goto endsub
- end if
- '/// string in Undo-list has to be: "Accept change: Insert 'this is a test'")
- Call CheckUndoStringInUndoList ( 10, "Accept" )
-
- '/// Insert a line break in document
- Call wTypeKeys ( "<Return>" )
- '/// Insert a string in document
- Call wTypeKeys ( "This is a test" )
- '/// Select Edit / Changes / Accept or Reject
+ '/// + Select tabpage 'List'
+ TabControl.SetPage TabListe
+ '/// + Select 'Accept All'
+ Akzeptieren.Click
+ Sleep 2
+ '/// + Close Redlining dialog
+ Redlining.Close
+ else
+ Warnlog "Redlining dialog not up!"
+ Call hCloseDocument
+ goto endsub
+ end if
+ '/// string in Undo-list has to be: "Accept change: Insert 'this is a test'")
+ Call CheckUndoStringInUndoList ( 10, "Accept" )
+
+ '/// Insert a line break in document
+ Call wTypeKeys ( "<Return>" )
+ '/// Insert a string in document
+ Call wTypeKeys ( "This is a test" )
+ '/// Select Edit / Changes / Accept or Reject
EditChangesAcceptOrReject
'/// Dialog 'Accept or reject changes' has to come up ///
Kontext "Redlining"
if Redlining.Exists then
- '/// + Select tabpage 'List'
- TabControl.SetPage TabListe
- '/// + Select 'Accept All'
- wait 500
- ListItem.TypeKeys "<Up>"
- wait 500
- Ablehnen.Click
- Sleep 2
- '/// + Close Redlining dialog
- Redlining.Close
- else
- Warnlog "Redlining dialog not up!"
- Call hCloseDocument
- goto endsub
- end if
-
- '/// string in Undo-list has to be: "Reject change: Insert 'this is a test'")
- Call CheckUndoStringInUndoList ( 10, "Reject" )
-
- Call hCloseDocument
+ '/// + Select tabpage 'List'
+ TabControl.SetPage TabListe
+ '/// + Select 'Accept All'
+ wait 500
+ ListItem.TypeKeys "<Up>"
+ wait 500
+ Ablehnen.Click
+ Sleep 2
+ '/// + Close Redlining dialog
+ Redlining.Close
+ else
+ Warnlog "Redlining dialog not up!"
+ Call hCloseDocument
+ goto endsub
+ end if
+
+ '/// string in Undo-list has to be: "Reject change: Insert 'this is a test'")
+ Call CheckUndoStringInUndoList ( 10, "Reject" )
+
+ Call hCloseDocument
endcase
testcase tUndoLineBreak
- '/// <B>Manual breaks (line breaks)</B>
- printlog "Manual breaks (line breaks)"
- printlog "- Insert line break"
- '/// new document
- Call hNewDocument
- '/// Insert a line break (Shift return)
- Call wTypeKeys ( "<SHIFT RETURN>" )
- '/// string in Undo-list has to be: "Insert line break")
- Call CheckUndoStringInUndoList ( 10, "InsertLineBreak" )
-
- '/// Delete line break
- printlog "- Delete line break"
- Call wTypeKeys ( "<SHIFT RETURN><Backspace>" )
- '/// string in Undo-list has to be: "Delete line break")
- Call CheckUndoStringInUndoList ( 10, "DeleteLineBreak" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Manual breaks (line breaks)</B>
+ printlog "Manual breaks (line breaks)"
+ printlog "- Insert line break"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a line break (Shift return)
+ Call wTypeKeys ( "<SHIFT RETURN>" )
+ '/// string in Undo-list has to be: "Insert line break")
+ Call CheckUndoStringInUndoList ( 10, "InsertLineBreak" )
+
+ '/// Delete line break
+ printlog "- Delete line break"
+ Call wTypeKeys ( "<SHIFT RETURN><Backspace>" )
+ '/// string in Undo-list has to be: "Delete line break")
+ Call CheckUndoStringInUndoList ( 10, "DeleteLineBreak" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoColumnBreak
- '/// <B>Column breaks</B>
- printlog "- Column breaks"
- '/// new document
- Call hNewDocument
- '/// Format / Columns
- FormatColumns
- Kontext "FormatColumn"
- '/// set number of columns to 2
- Columns.Settext 2
- FormatColumn.Ok
- '/// Insert a column break (Strg+Shift+Return)
- Call wTypeKeys ( "<Mod1 Shift Return>" )
- printlog "Insert a column break"
- '/// string in Undo-list has to be: "Insert column break")
- Call CheckUndoStringInUndoList ( 10, "InsertColumnBreak" )
-
- '/// Delete a column break (Strg+Shift+Return+Backspace)
- printlog "Delete a column break"
- Call wTypeKeys ( "<Mod1 Shift Return><Backspace>" )
- '/// string in Undo-list has to be: "Delete column break")
- Call CheckUndoStringInUndoList ( 10, "DeleteColumnBreak" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Column breaks</B>
+ printlog "- Column breaks"
+ '/// new document
+ Call hNewDocument
+ '/// Format / Columns
+ FormatColumns
+ Kontext "FormatColumn"
+ '/// set number of columns to 2
+ Columns.Settext 2
+ FormatColumn.Ok
+ '/// Insert a column break (Strg+Shift+Return)
+ Call wTypeKeys ( "<Mod1 Shift Return>" )
+ printlog "Insert a column break"
+ '/// string in Undo-list has to be: "Insert column break")
+ Call CheckUndoStringInUndoList ( 10, "InsertColumnBreak" )
+
+ '/// Delete a column break (Strg+Shift+Return+Backspace)
+ printlog "Delete a column break"
+ Call wTypeKeys ( "<Mod1 Shift Return><Backspace>" )
+ '/// string in Undo-list has to be: "Delete column break")
+ Call CheckUndoStringInUndoList ( 10, "DeleteColumnBreak" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoPageBreak
- '/// <B>Page breaks</B>
- printlog "- Page breaks"
- '/// new document
- Call hNewDocument
- '/// Format / Columns
- InsertManualBreak
- Kontext "UmbruchEinfuegen"
- printlog "Insert a page break"
- Seitenumbruch.Check
- UmbruchEinfuegen.Ok
- '/// string in Undo-list has to be: "Insert page break")
- Call CheckUndoStringInUndoList ( 10, "InsertPageBreak" )
-
- printlog "Delete a page break"
- InsertManualBreak
- Kontext "UmbruchEinfuegen"
- '/// Insert a page break
- Seitenumbruch.Check
- UmbruchEinfuegen.Ok
- Call wTypeKeys ( "<Backspace>" )
- '/// string in Undo-list has to be: "Delete page break")
- Call CheckUndoStringInUndoList ( 10, "DeletePageBreak" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Page breaks</B>
+ printlog "- Page breaks"
+ '/// new document
+ Call hNewDocument
+ '/// Format / Columns
+ InsertManualBreak
+ Kontext "UmbruchEinfuegen"
+ printlog "Insert a page break"
+ Seitenumbruch.Check
+ UmbruchEinfuegen.Ok
+ '/// string in Undo-list has to be: "Insert page break")
+ Call CheckUndoStringInUndoList ( 10, "InsertPageBreak" )
+
+ printlog "Delete a page break"
+ InsertManualBreak
+ Kontext "UmbruchEinfuegen"
+ '/// Insert a page break
+ Seitenumbruch.Check
+ UmbruchEinfuegen.Ok
+ Call wTypeKeys ( "<Backspace>" )
+ '/// string in Undo-list has to be: "Delete page break")
+ Call CheckUndoStringInUndoList ( 10, "DeletePageBreak" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoFields
- '/// <B>Fields (Insert/Modify / Delete)</B>
- printlog "- Fields (Insert)"
- '/// new document
- Call hNewDocument
- '/// Insert Field 'Date'
- InsertFieldsDate
- '/// string in Undo-list has to be: "Insert field")
- Call CheckUndoStringInUndoList ( 10, "InsertField" )
-
- printlog "- Fields (Modify)"
- '/// Press Home-key
- Call wTypeKeys ( "<Home>" )
- '/// Edit fields and select 4th entry in Format-list
- EditFields
- Kontext "FeldbefehlBearbeitenDokument"
- Zahlenformat.Select 4
- FeldbefehlBearbeitenDokument.Ok
- '/// string in Undo-list has to be: "Changed field")
- Call CheckUndoStringInUndoList ( 10, "ChangedField" )
-
- printlog "- Fields (Delete)"
- '/// Press delete-key
- Call wTypeKeys ( "<Delete>" )
- '/// string in Undo-list has to be: "Delete field")
- Call CheckUndoStringInUndoList ( 10, "DeleteField" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Fields (Insert/Modify / Delete)</B>
+ printlog "- Fields (Insert)"
+ '/// new document
+ Call hNewDocument
+ '/// Insert Field 'Date'
+ InsertFieldsDate
+ '/// string in Undo-list has to be: "Insert field")
+ Call CheckUndoStringInUndoList ( 10, "InsertField" )
+
+ printlog "- Fields (Modify)"
+ '/// Press Home-key
+ Call wTypeKeys ( "<Home>" )
+ '/// Edit fields and select 4th entry in Format-list
+ EditFields
+ Kontext "FeldbefehlBearbeitenDokument"
+ Zahlenformat.Select 4
+ FeldbefehlBearbeitenDokument.Ok
+ '/// string in Undo-list has to be: "Changed field")
+ Call CheckUndoStringInUndoList ( 10, "ChangedField" )
+
+ printlog "- Fields (Delete)"
+ '/// Press delete-key
+ Call wTypeKeys ( "<Delete>" )
+ '/// string in Undo-list has to be: "Delete field")
+ Call CheckUndoStringInUndoList ( 10, "DeleteField" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoSpecialCharacter
- '/// <B>Special Character (Insert / Delete )</B>
- printlog "- Special Character (Insert)"
- '/// new document
- Call hNewDocument
- '/// Insert a special Character
+ '/// <B>Special Character (Insert / Delete )</B>
+ printlog "- Special Character (Insert)"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a special Character
InsertSpecialCharacterWriter
Kontext "Sonderzeichen"
- SchriftListe.TypeKeys "<Home>"
- SchriftListe.TypeKeys "<Right>", 3
- Sonderzeichen.Ok
- '/// string in Undo-list has to be: "Insert special character")
- Call CheckUndoStringInUndoList ( 10, "InsertSpecialCharacter" )
-
- printlog "- Special Character (Delete)"
- '/// Delete special character with <Backspace>
- Call wTypeKeys ("<Backspace>" )
- Call CheckUndoStringInUndoList ( 10, "DeleteSpecialCharacter" )
-
- '/// Close document
- Call hCloseDocument
+ SchriftListe.TypeKeys "<Home>"
+ SchriftListe.TypeKeys "<Right>", 3
+ Sonderzeichen.Ok
+ '/// string in Undo-list has to be: "Insert special character")
+ Call CheckUndoStringInUndoList ( 10, "InsertSpecialCharacter" )
+
+ printlog "- Special Character (Delete)"
+ '/// Delete special character with <Backspace>
+ Call wTypeKeys ("<Backspace>" )
+ Call CheckUndoStringInUndoList ( 10, "DeleteSpecialCharacter" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoStyles
- Dim i as integer, StyleText as string, UndoText as string
- Dim NewStyle as string
-
- '/// <B>Styles (Apply/Modify/Find&Replace/Promote/Demote)</B>
- printlog "- Styles (Apply)"
- '/// new document
- Call hNewDocument
- '/// type some text
- Call wTypeKeys ( "I have the new style" )
- '/// Select text
- Call wTypeKeys ( "<Shift Home>" )
- '/// Apply Style to a newly created style
- Call wStyleCreate ( "AUndoHistory", "Paragraph" )
- '/// string in Undo-list has to be: "Apply styles: AUndoHistory")
- Call CheckUndoStringInUndoList ( 10, "ApplyStyles" )
-
- '/// Modify Style through Stylist
- if wStyleSelect ( "AUndoHistory" ) = false then
- Warnlog "Defined style has not been found in Stylist->Test aborted"
- Call hCloseDocument
- goto endsub
- end if
-
- Vorlagenliste.OpenContextMenu
- Call hMenuSelectNr(2)
- Kontext
- Active.Setpage TabFontEffects
- Kontext "TabFontEffects"
- FontColor.Select FontColor.GetItemCount
- TabFontEffects.Ok
- Sleep 1
- '/// string in Undo-list has to be: "Change styles: AUndoHistory")
- Call CheckUndoStringInUndoList ( 10, "ChangeStyles" )
-
- printlog "Styles (Replace)"
- '/// Edit / Search and Replace
- EditSearchAndReplace
- kontext "FindAndReplace"
- if SearchForStyles.IsVisible = False then More.Click
- SearchForStyles.Check
- Sleep 1
- ReplaceWithStyle.Select 4
- wait 500
- ReplaceBtn.Click
- NewStyle = ReplaceWithStyle.GetSelText
- Select Case iSprache
- Case 01: StyleText = "Replace style: AUndoHistory -> " & NewStyle
- Case 34: StyleText = "Reemplazar estilo: AUndoHistory -> " & NewStyle
- Case 86: StyleText = "替换样式: AUndoHistory -> " & NewStyle
- Case else: QAErrorlog "Please adapt test for this language"
- end select
- wait 500
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- try
- Active.Yes
- catch
- Active.Ok
- endcatch
- end if
- end if
- kontext "FindAndReplace"
- SearchForStyles.UnCheck
- FindAndReplace.Close
-
- '/// string in Undo-list has to be: "Replace Styles: 'AUndoHistory -> ...")
- Kontext "StandardBar"
- try
- Undo.OpenMenu
- Kontext "UndoRedoBox"
- UndoText = UndoRedoList.GetItemText(1)
- if UndoText <> StyleText then
- Warnlog "Wrong text in Undo-List: " & UndoText
- end if
- Kontext "StandardBar"
- Undo.Click
- catch
- Warnlog "Something wrong checking Undo-List!"
- endcatch
-
- printlog "Styles (Promote)"
- '/// point cursor to beginning of document
- Call wTypeKeys ( "<Mod1 Home>" )
- ' To promote style it has to be in the heading group
- ToolsOutlineNumbering
- Kontext
- Active.SetPage TabKapitelnumerierung
- Kontext "TabKapitelnumerierung"
- Absatzvorlage.Select NewStyle
- TabKapitelnumerierung.Ok
-
- Call wNavigatorAuswahl ( 1, 1, true )
- Kontext "NavigatorWriter"
- '/// Select Promote in Navigator
- try
- Senken.Click
- '/// string in Undo-list has to be: "Demote Outline")
- Call CheckUndoStringInUndoList ( 10, "DemoteOutline" )
- catch
- Warnlog "Unable to demote outline"
- endcatch
-
- '/// Select Demote in Navigator
- printlog "Styles (Demote)"
- Kontext "NavigatorWriter"
- try
- Senken.Click
- '/// string in Undo-list has to be: "Promote Outline")
- Call CheckUndoStringInUndoList ( 10, "PromoteOutline" )
- catch
- Warnlog "Unable to promote outline"
- endcatch
-
- '/// CloseDocument
- Call hCloseDocument
+ Dim i as integer, StyleText as string, UndoText as string
+ Dim NewStyle as string
+
+ '/// <B>Styles (Apply/Modify/Find&Replace/Promote/Demote)</B>
+ printlog "- Styles (Apply)"
+ '/// new document
+ Call hNewDocument
+ '/// type some text
+ Call wTypeKeys ( "I have the new style" )
+ '/// Select text
+ Call wTypeKeys ( "<Shift Home>" )
+ '/// Apply Style to a newly created style
+ Call wStyleCreate ( "AUndoHistory", "Paragraph" )
+ '/// string in Undo-list has to be: "Apply styles: AUndoHistory")
+ Call CheckUndoStringInUndoList ( 10, "ApplyStyles" )
+
+ '/// Modify Style through Stylist
+ if wStyleSelect ( "AUndoHistory" ) = false then
+ Warnlog "Defined style has not been found in Stylist->Test aborted"
+ Call hCloseDocument
+ goto endsub
+ end if
+
+ Vorlagenliste.OpenContextMenu
+ Call hMenuSelectNr(2)
+ Kontext
+ Active.Setpage TabFontEffects
+ Kontext "TabFontEffects"
+ FontColor.Select FontColor.GetItemCount
+ TabFontEffects.Ok
+ Sleep 1
+ '/// string in Undo-list has to be: "Change styles: AUndoHistory")
+ Call CheckUndoStringInUndoList ( 10, "ChangeStyles" )
+
+ printlog "Styles (Replace)"
+ '/// Edit / Search and Replace
+ EditSearchAndReplace
+ kontext "FindAndReplace"
+ if SearchForStyles.IsVisible = False then More.Click
+ SearchForStyles.Check
+ Sleep 1
+ ReplaceWithStyle.Select 4
+ wait 500
+ ReplaceBtn.Click
+ NewStyle = ReplaceWithStyle.GetSelText
+ Select Case iSprache
+ Case 01: StyleText = "Replace style: AUndoHistory -> " & NewStyle
+ Case 34: StyleText = "Reemplazar estilo: AUndoHistory -> " & NewStyle
+ Case 86: StyleText = "替换样式: AUndoHistory -> " & NewStyle
+ Case else: QAErrorlog "Please adapt test for this language"
+ end select
+ wait 500
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ try
+ Active.Yes
+ catch
+ Active.Ok
+ endcatch
+ end if
+ end if
+ kontext "FindAndReplace"
+ SearchForStyles.UnCheck
+ FindAndReplace.Close
+
+ '/// string in Undo-list has to be: "Replace Styles: 'AUndoHistory -> ...")
+ Kontext "StandardBar"
+ try
+ Undo.OpenMenu
+ Kontext "UndoRedoBox"
+ UndoText = UndoRedoList.GetItemText(1)
+ if UndoText <> StyleText then
+ Warnlog "Wrong text in Undo-List: " & UndoText
+ end if
+ Kontext "StandardBar"
+ Undo.Click
+ catch
+ Warnlog "Something wrong checking Undo-List!"
+ endcatch
+
+ printlog "Styles (Promote)"
+ '/// point cursor to beginning of document
+ Call wTypeKeys ( "<Mod1 Home>" )
+ ' To promote style it has to be in the heading group
+ ToolsOutlineNumbering
+ Kontext
+ Active.SetPage TabKapitelnumerierung
+ Kontext "TabKapitelnumerierung"
+ Absatzvorlage.Select NewStyle
+ TabKapitelnumerierung.Ok
+
+ Call wNavigatorAuswahl ( 1, 1, true )
+ Kontext "NavigatorWriter"
+ '/// Select Promote in Navigator
+ try
+ Senken.Click
+ '/// string in Undo-list has to be: "Demote Outline")
+ Call CheckUndoStringInUndoList ( 10, "DemoteOutline" )
+ catch
+ Warnlog "Unable to demote outline"
+ endcatch
+
+ '/// Select Demote in Navigator
+ printlog "Styles (Demote)"
+ Kontext "NavigatorWriter"
+ try
+ Senken.Click
+ '/// string in Undo-list has to be: "Promote Outline")
+ Call CheckUndoStringInUndoList ( 10, "PromoteOutline" )
+ catch
+ Warnlog "Unable to promote outline"
+ endcatch
+
+ '/// CloseDocument
+ Call hCloseDocument
endcase
diff --git a/testautomation/writer/optional/includes/undo/w_undo_history_3.inc b/testautomation/writer/optional/includes/undo/w_undo_history_3.inc
index 1d30a87dd406..64b69a512a42 100644
--- a/testautomation/writer/optional/includes/undo/w_undo_history_3.inc
+++ b/testautomation/writer/optional/includes/undo/w_undo_history_3.inc
@@ -33,268 +33,281 @@
sub w_undo_history_3
- Call tUndoSection ' Section (Insert/Modify/Delete)
- Call tUndoHyperlink ' Hyperlink (Insert as Text/as URL button)
- Call tUndoFootnote ' Footnote (Insert/Modify/Delete)
- Call tUndoCaption ' Insert Caption
- Call tUndoAutoText ' Insert Autotext
- Call tUndoBookmark ' Bookmark (Insert/Rename/Delete)
- Call tUndoComment ' Comment (Insert/Delete)
- Call tUndoScript ' Script (Insert/Delete)
- Call tUndoIndexes ' Index/Bibliography entrys (Insert/Delete)
- Call tUndoFrames ' Frames (Insert/Rename/Delete)
- Call tUndoTableGeneral ' Tables Part 1
- Call tUndoTableOptionsMerge ' Tables Part 2
- Call tUndoTableConvertSort ' Tables Part 3
- Call tUndoTableSplitDelete ' Tables Part 4
- Call tUndoHorizontalRuler ' Horizontal ruler
- Call tUndoGraphics ' Graphics (Insert/Replace/Delete)
-
+ Call tUndoSection ' Section (Insert/Modify/Delete)
+ Call tUndoHyperlink ' Hyperlink (Insert as Text/as URL button)
+ Call tUndoFootnote ' Footnote (Insert/Modify/Delete)
+ Call tUndoCaption ' Insert Caption
+ Call tUndoAutoText ' Insert Autotext
+ Call tUndoBookmark ' Bookmark (Insert/Rename/Delete)
+ Call tUndoComment ' Comment (Insert/Delete)
+ Call tUndoScript ' Script (Insert/Delete)
+ Call tUndoIndexes ' Index/Bibliography entrys (Insert/Delete)
+ Call tUndoFrames ' Frames (Insert/Rename/Delete)
+ Call tUndoTableGeneral ' Tables Part 1
+ Call tUndoTableOptionsMerge ' Tables Part 2
+ Call tUndoTableConvertSort ' Tables Part 3
+ Call tUndoTableSplitDelete ' Tables Part 4
+ Call tUndoHorizontalRuler ' Horizontal ruler
+ Call tUndoGraphics ' Graphics (Insert/Replace/Delete)
+
end sub
testcase tUndoSection
- '/// <B>Section (Insert/Modify/Delete)</B>
- printlog "Section (Insert)"
- '/// new document
- Call hNewDocument
- '/// Insert a section
- InsertSection
- Kontext
- Active.Setpage TabBereiche
- Kontext "TabBereiche"
- TabBereiche.Ok
- '/// string in Undo-list has to be: "Insert section")
- Call CheckUndoStringInUndoList ( 10, "InsertSection" )
-
- printlog "Section (Modify)"
- '/// Open navigator and select section
- Call wNavigatorAuswahl ( 7, 1, true )
- Kontext "NavigatorWriter"
- '/// Open contextmenu and choose 'Edit'
- Auswahlliste.OpenContextMenu
- wait 500
- Call hMenuSelectNr(4)
-
- '/// Change Background-Color
- Kontext "BereicheBearbeiten"
- Optionen.Click
- Kontext
- Active.Setpage TabHintergrund
- Kontext "TabHintergrund"
- Hintergrundfarbe.TypeKeys "<Down>", 5
- TabHintergrund.Ok
-
- Kontext "BereicheBearbeiten"
- BereicheBearbeiten.Ok
- '/// string in Undo-list has to be: "Modify section")
- Call CheckUndoStringInUndoList ( 10, "ModifySection" )
-
- printlog "Section (Delete)"
- '/// Open navigator and select section
- Call wNavigatorAuswahl ( 7, 1, true )
- Kontext "NavigatorWriter"
- '/// Open contextmenu and choose 'Edit'
- Auswahlliste.OpenContextMenu
- wait 500
- Call hMenuSelectNr(4)
- '/// In 'Edit sections' dialog choose 'remove'
- Kontext "BereicheBearbeiten"
- Aufheben.Click
- BereicheBearbeiten.Ok
- '/// string in Undo-list has to be: "Delete section")
- Call CheckUndoStringInUndoList ( 10, "DeleteSection" )
-
- '/// Close Document
- Call hCloseDocument
+ '/// <B>Section (Insert/Modify/Delete)</B>
+ printlog "Section (Insert)"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a section
+ InsertSection
+ Kontext
+ Active.Setpage TabBereiche
+ Kontext "TabBereiche"
+ TabBereiche.Ok
+ '/// string in Undo-list has to be: "Insert section")
+ Call CheckUndoStringInUndoList ( 10, "InsertSection" )
+
+ printlog "Section (Modify)"
+ '/// Open navigator and select section
+ Call wNavigatorAuswahl ( 7, 1, true )
+ Kontext "NavigatorWriter"
+ '/// Open contextmenu and choose 'Edit'
+ Auswahlliste.OpenContextMenu
+ wait 500
+ Call hMenuSelectNr(4)
+
+ '/// Change Background-Color
+ Kontext "BereicheBearbeiten"
+ Optionen.Click
+ Kontext
+ Active.Setpage TabHintergrund
+ Kontext "TabHintergrund"
+ Hintergrundfarbe.TypeKeys "<Down>", 5
+ TabHintergrund.Ok
+
+ Kontext "BereicheBearbeiten"
+ BereicheBearbeiten.Ok
+ '/// string in Undo-list has to be: "Modify section")
+ Call CheckUndoStringInUndoList ( 10, "ModifySection" )
+
+ printlog "Section (Delete)"
+ '/// Open navigator and select section
+ Call wNavigatorAuswahl ( 7, 1, true )
+ Kontext "NavigatorWriter"
+ '/// Open contextmenu and choose 'Edit'
+ Auswahlliste.OpenContextMenu
+ wait 500
+ Call hMenuSelectNr(4)
+ '/// In 'Edit sections' dialog choose 'remove'
+ Kontext "BereicheBearbeiten"
+ Aufheben.Click
+ BereicheBearbeiten.Ok
+ '/// string in Undo-list has to be: "Delete section")
+ Call CheckUndoStringInUndoList ( 10, "DeleteSection" )
+
+ '/// Close Document
+ Call hCloseDocument
endcase
testcase tUndoHyperlink
- '///<B>Hyperlink (Insert as Text/as URL button)</B>
- printlog "- Insert hyperlink as text"
- '/// new document
- Call hNewDocument
- '/// Insert / Hyperlink as Text
- InsertHyperlink
- Call wEinfuegenHyperlink(1)
- ZielURL.Settext "www.sun.com"
- Form.Select 1
- Kontext "Hyperlink"
- Uebernehmen.Click
- Hyperlink.Close
- '/// string in Undo-list has to be: "Insert Hyperlink")
- Call CheckUndoStringInUndoList ( 10, "InsertHyperlink" )
-
- Call wTypeKeys "<Return>"
-
- '/// Insert / Hyperlink as Button
- printlog "- Insert hyperlink as Button"
- InsertHyperlink
- Call wEinfuegenHyperlink(1)
- ZielURL.Settext "www.sun.com"
- Form.Select 2
- Kontext "Hyperlink"
- Uebernehmen.Click
- Hyperlink.Close
-
- '/// string in Undo-list has to be: "insert URL Button")
- Call CheckUndoStringInUndoList ( 10, "InsertHyperlinkButton" )
-
- '/// Close Document
- Call hCloseDocument
-
-endcase
+ '///<B>Hyperlink (Insert as Text/as URL button)</B>
+ printlog "- Insert hyperlink as text"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / Hyperlink as Text
+ InsertHyperlink
+ '/// string in Undo-list has to be: "Insert Hyperlink")
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
+ Call wEinfuegenHyperlink(1)
+ ZielURL.SetText "www.sun.com"
+ Form.Select 1
+ Uebernehmen.Click()
+
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close()
+ else
+ warnlog( "Unable to open <HyperlinkDialog>" )
+ endif
+ Call CheckUndoStringInUndoList ( 10, "InsertHyperlink" )
+
+ Call wTypeKeys "<Return>"
+
+ '/// Insert / Hyperlink as Button
+ printlog "- Insert hyperlink as Button"
+ InsertHyperlink
+
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
+ Call wEinfuegenHyperlink(1)
+ ZielURL.Settext "www.sun.com"
+ Form.Select 2
+ Kontext "Hyperlink"
+ Uebernehmen.Click
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close
+ else
+ warnlog( "Unable to open <HyperlinkDialog>" )
+ endif
+
+ '/// string in Undo-list has to be: "insert URL Button")
+ Call CheckUndoStringInUndoList ( 10, "InsertHyperlinkButton" )
+
+ '/// Close Document
+ Call hCloseDocument
+
+endcase
testcase tUndoFootnote
- '/// <B>Footnote (Insert/Modify/Delete)</B>
- printlog "- Footnote (Insert)"
- '/// new document
- Call hNewDocument
- '/// Insert / Footnote
- InsertFootnote
- Kontext "FussnoteEinfuegen"
- FussnoteEinfuegen.Ok
- '/// string in Undo-list has to be: "Insert footnote")
- Call CheckUndoStringInUndoList ( 10, "InsertFootnote" )
-
- printlog "- Footnote (Modify)"
- '/// Tools/Footnote
- ToolsFootnote
- Kontext
- Active.Setpage TabFussnoten
- Kontext "TabFussnoten"
-
- '/// Change any option in footnote dialog
- if Seitenende.IsChecked then
- Dokumentende.Check
- else
- Seitenende.Check
- end if
- '/// Close dialog
- TabFussnoten.Ok
- '/// string in Undo-list has to be: "Modify footnote options")
- Call CheckUndoStringInUndoList ( 10, "ModifyFootnote" )
-
- printlog "- Footnote (Delete)"
- '/// Point cursor directly to the footnote anchor
- Call wTypeKeys "<Mod1 Home>"
- '/// press 'delete' to remove footnote
- Call wTypeKeys "<Delete>"
- '/// string in Undo-list has to be: "Delete footnote options")
- Call CheckUndoStringInUndoList ( 10, "DeleteFootnote" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Footnote (Insert/Modify/Delete)</B>
+ printlog "- Footnote (Insert)"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / Footnote
+ InsertFootnote
+ Kontext "FussnoteEinfuegen"
+ FussnoteEinfuegen.Ok
+ '/// string in Undo-list has to be: "Insert footnote")
+ Call CheckUndoStringInUndoList ( 10, "InsertFootnote" )
+
+ printlog "- Footnote (Modify)"
+ '/// Tools/Footnote
+ ToolsFootnote
+ Kontext
+ Active.Setpage TabFussnoten
+ Kontext "TabFussnoten"
+
+ '/// Change any option in footnote dialog
+ if Seitenende.IsChecked then
+ Dokumentende.Check
+ else
+ Seitenende.Check
+ end if
+ '/// Close dialog
+ TabFussnoten.Ok
+ '/// string in Undo-list has to be: "Modify footnote options")
+ Call CheckUndoStringInUndoList ( 10, "ModifyFootnote" )
+
+ printlog "- Footnote (Delete)"
+ '/// Point cursor directly to the footnote anchor
+ Call wTypeKeys "<Mod1 Home>"
+ '/// press 'delete' to remove footnote
+ Call wTypeKeys "<Delete>"
+ '/// string in Undo-list has to be: "Delete footnote options")
+ Call CheckUndoStringInUndoList ( 10, "DeleteFootnote" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoCaption
- '/// <B>Insert a caption</B>
- printlog "- Insert Caption"
- '/// new document
- Call hNewDocument
- '/// Insert a graphic
- Call hGrafikEinfuegen ( gTesttoolPath & "writer\optional\input\graphics\jolink.jpg" )
- '/// Insert / Caption
- InsertCaption
- Kontext "Beschriftung"
- '/// Insert a caption more than 20 characters long
- Beschriftungstext.Settext "This caption has more than 20 characters"
- Beschriftung.Ok
-
- '/// string in Undo-list has to be: "Insert Caption: This capt...aracters")
- Call CheckUndoStringInUndoList ( 10, "InsertCaption" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Insert a caption</B>
+ printlog "- Insert Caption"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a graphic
+ Call hGrafikEinfuegen ( gTesttoolPath & "writer\optional\input\graphics\jolink.jpg" )
+ '/// Insert / Caption
+ InsertCaption
+ Kontext "Beschriftung"
+ '/// Insert a caption more than 20 characters long
+ Beschriftungstext.Settext "This caption has more than 20 characters"
+ Beschriftung.Ok
+
+ '/// string in Undo-list has to be: "Insert Caption: This capt...aracters")
+ Call CheckUndoStringInUndoList ( 10, "InsertCaption" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoAutoText
- '/// <B>Insert autotext</B>
- printlog "- Insert autotext"
- '/// new document
- Call hNewDocument
- '/// Insert dummy text
- Call wBlindtextEinfuegen
-
- '/// string in Undo-list has to be: "Insert Auto Text")
- Call CheckUndoStringInUndoList ( 10, "InsertAutotext" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Insert autotext</B>
+ printlog "- Insert autotext"
+ '/// new document
+ Call hNewDocument
+ '/// Insert dummy text
+ Call wBlindtextEinfuegen
+
+ '/// string in Undo-list has to be: "Insert Auto Text")
+ Call CheckUndoStringInUndoList ( 10, "InsertAutotext" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoBookmark
-Warnlog "#i102310# - tUndoBookmark outcommented due to bug."
-goto endsub
-
-
- '/// <B>Bookmark (Insert/Rename/Delete)</B>
- printlog "- Insert Bookmark"
- '/// new document
- Call hNewDocument
- '/// Insert / Bookmark
- InsertBookmark
- Kontext "TextmarkeEinfuegen"
- Textmarken.Settext "I'm a bookmark"
- TextmarkeEinfuegen.Ok
- '/// string in Undo-list has to be: "Insert Bookmark: I'm a bookmark")
- Call CheckUndoStringInUndoList ( 10, "InsertBookmark" )
-
- printlog "- Rename Bookmark"
- '/// Open navigator and select bookmark
- Call wNavigatorAuswahl ( 6, 1, true )
- Kontext "NavigatorWriter"
- '/// Open contextmenu and choose 'Edit'
- Auswahlliste.OpenContextMenu
- wait 500
- Call hMenuSelectNr(4)
- wait 500
- Call hMenuSelectNr(3)
- wait 500
- Kontext "ObjekteUmbenennen"
- Objektname.Settext "a book"
- ObjekteUmbenennen.Ok
- '/// string in Undo-list has to be: "Rename Bookmark: a book")
- Call CheckUndoStringInUndoList ( 10, "RenameBookmark" )
-
- printlog "- Delete Bookmark"
- '/// Open navigator and select bookmark
- Call wNavigatorAuswahl ( 6, 1, true )
- Kontext "NavigatorWriter"
- '/// Open contextmenu and choose 'Edit'
- Auswahlliste.OpenContextMenu
- wait 500
- Call hMenuSelectNr(4)
- wait 500
- Call hMenuSelectNr(2)
- wait 500
- '/// string in Undo-list has to be: "Rename Bookmark: a book")
- Call CheckUndoStringInUndoList ( 10, "DeleteBookmark" )
-
- '/// Close document
- Call hCloseDocument
+ Warnlog "#i102310# - tUndoBookmark outcommented due to bug."
+ goto endsub
+
+
+ '/// <B>Bookmark (Insert/Rename/Delete)</B>
+ printlog "- Insert Bookmark"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / Bookmark
+ InsertBookmark
+ Kontext "TextmarkeEinfuegen"
+ Textmarken.Settext "I'm a bookmark"
+ TextmarkeEinfuegen.Ok
+ '/// string in Undo-list has to be: "Insert Bookmark: I'm a bookmark")
+ Call CheckUndoStringInUndoList ( 10, "InsertBookmark" )
+
+ printlog "- Rename Bookmark"
+ '/// Open navigator and select bookmark
+ Call wNavigatorAuswahl ( 6, 1, true )
+ Kontext "NavigatorWriter"
+ '/// Open contextmenu and choose 'Edit'
+ Auswahlliste.OpenContextMenu
+ wait 500
+ Call hMenuSelectNr(4)
+ wait 500
+ Call hMenuSelectNr(3)
+ wait 500
+ Kontext "ObjekteUmbenennen"
+ Objektname.Settext "a book"
+ ObjekteUmbenennen.Ok
+ '/// string in Undo-list has to be: "Rename Bookmark: a book")
+ Call CheckUndoStringInUndoList ( 10, "RenameBookmark" )
+
+ printlog "- Delete Bookmark"
+ '/// Open navigator and select bookmark
+ Call wNavigatorAuswahl ( 6, 1, true )
+ Kontext "NavigatorWriter"
+ '/// Open contextmenu and choose 'Edit'
+ Auswahlliste.OpenContextMenu
+ wait 500
+ Call hMenuSelectNr(4)
+ wait 500
+ Call hMenuSelectNr(2)
+ wait 500
+ '/// string in Undo-list has to be: "Rename Bookmark: a book")
+ Call CheckUndoStringInUndoList ( 10, "DeleteBookmark" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoComment
- printlog "New document"
- Call hNewDocument
- printlog "Insert / Comment"
- InsertNoteWriter
- printlog "String in Undo-list has to be: 'Insert Comment'"
- Call CheckUndoStringInUndoList ( 10, "InsertComment" )
+ printlog "New document"
+ Call hNewDocument
+ printlog "Insert / Comment"
+ InsertNoteWriter
+ printlog "String in Undo-list has to be: 'Insert Comment'"
+ Call CheckUndoStringInUndoList ( 10, "InsertComment" )
printlog "- Delete Comment"
printlog "Bring up the Navigator, find the entry 'Comments', expand it, and select the expanded section."
Call wNavigatorAuswahl( 11, 1 )
@@ -302,370 +315,373 @@ testcase tUndoComment
Navigator.TypeKeys "<DELETE>"
'/// Close the Navigator
ViewNavigator
- '/// string in Undo-list has to be: "Delete comment")
- Call CheckUndoStringInUndoList ( 10, "DeleteComment" )
+ '/// string in Undo-list has to be: "Delete comment")
+ Call CheckUndoStringInUndoList ( 10, "DeleteComment" )
- '/// Close document
- Call hCloseDocument
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoScript
-
- '/// <B>Script (Insert/Delete)</B>
- printlog "- Insert Script"
- '/// new document
- Call hNewDocument
- '/// Insert / Script
- InsertScript
- Kontext "ScriptEinfuegen"
- ScriptEinfuegen.Ok
- '/// string in Undo-list has to be: "Insert script")
- Call CheckUndoStringInUndoList ( 10, "InsertScript" )
-
- '/// Point cursor directly to the script
- Call wTypeKeys "<Mod1 Home>"
- '/// press 'delete' to remove script
- Call wTypeKeys "<Delete>"
- '/// string in Undo-list has to be: "Delete script")
- Call CheckUndoStringInUndoList ( 10, "DeleteScript" )
-
- '/// Close document
- Call hCloseDocument
+
+ '/// <B>Script (Insert/Delete)</B>
+ printlog "- Insert Script"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / Script
+ InsertScript
+ Kontext "ScriptEinfuegen"
+ ScriptEinfuegen.Ok
+ '/// string in Undo-list has to be: "Insert script")
+ Call CheckUndoStringInUndoList ( 10, "InsertScript" )
+
+ '/// Point cursor directly to the script
+ Call wTypeKeys "<Mod1 Home>"
+ '/// press 'delete' to remove script
+ Call wTypeKeys "<Delete>"
+ '/// string in Undo-list has to be: "Delete script")
+ Call CheckUndoStringInUndoList ( 10, "DeleteScript" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoIndexes
- '/// <B>Indexes (Insert/Delete)</B>
- printlog "- Insert Index entry"
- '/// new document
- Call hNewDocument
- '/// Type a word
- Call wTypeKeys "IndexEntry"
- Call wTypeKeys "<Shift Home>"
- '/// Insert / Indexes and Tables / Entry
- InsertIndexesEntry
- Kontext "VerzeichnisEintragEinfuegen"
- EintragOk.Click
- VerzeichnisEintragEinfuegen.Close
- '/// string in Undo-list has to be: "Insert index entry")
- Call CheckUndoStringInUndoList ( 10, "InsertIndexEntry" )
-
- printlog "delete index entry with 'Backspace'"
- Call wTypeKeys ( "<Backspace>"
- '/// string in Undo-list has to be: "Delete index entry")
- Call CheckUndoStringInUndoList ( 10, "DeleteIndexEntry" )
-
- '/// Type a word
- Call wTypeKeys "BibliographyEntry"
- Call wTypeKeys "<Shift Home>"
- printlog "- Insert Bibliography entry"
- printlog "Insert / Index / Bibliography entry"
- InsertIndexesBibliographyEntry
- Kontext "LiteratureintragEinfuegen"
- EintragEinfuegen.Click
- LiteratureintragEinfuegen.Close
- '/// string in Undo-list has to be: "Insert bibliography entry")
- Call CheckUndoStringInUndoList ( 10, "InsertBibliographyEntry" )
-
- Printlog "delete bibliography entry with 'Backspace'"
- Call wTypeKeys ( "<Backspace>"
- '/// string in Undo-list has to be: "Delete bibliography entry")
- Call CheckUndoStringInUndoList ( 10, "DeleteBibliographyEntry" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Indexes (Insert/Delete)</B>
+ printlog "- Insert Index entry"
+ '/// new document
+ Call hNewDocument
+ '/// Type a word
+ Call wTypeKeys "IndexEntry"
+ Call wTypeKeys "<Shift Home>"
+ '/// Insert / Indexes and Tables / Entry
+ InsertIndexesEntry
+ Kontext "VerzeichnisEintragEinfuegen"
+ EintragOk.Click
+ VerzeichnisEintragEinfuegen.Close
+ '/// string in Undo-list has to be: "Insert index entry")
+ Call CheckUndoStringInUndoList ( 10, "InsertIndexEntry" )
+
+ printlog "delete index entry with 'Backspace'"
+ Call wTypeKeys ( "<Backspace>"
+ '/// string in Undo-list has to be: "Delete index entry")
+ Call CheckUndoStringInUndoList ( 10, "DeleteIndexEntry" )
+
+ '/// Type a word
+ Call wTypeKeys "BibliographyEntry"
+ Call wTypeKeys "<Shift Home>"
+ printlog "- Insert Bibliography entry"
+ printlog "Insert / Index / Bibliography entry"
+ InsertIndexesBibliographyEntry
+ Kontext "LiteratureintragEinfuegen"
+ EintragEinfuegen.Click
+ LiteratureintragEinfuegen.Close
+ '/// string in Undo-list has to be: "Insert bibliography entry")
+ Call CheckUndoStringInUndoList ( 10, "InsertBibliographyEntry" )
+
+ Printlog "delete bibliography entry with 'Backspace'"
+ Call wTypeKeys ( "<Backspace>"
+ '/// string in Undo-list has to be: "Delete bibliography entry")
+ Call CheckUndoStringInUndoList ( 10, "DeleteBibliographyEntry" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoFrames
- '/// <B>Frames (Insert/Rename/Delete)</B>
- printlog "- Insert Frame"
- '/// new document
- Call hNewDocument
- '/// Insert / Frame
- InsertFrame
- Kontext
- Active.Setpage TabZusaetze
- Kontext "TabZusaetze"
- ObjektName.Settext "MyFrame"
- TabZusaetze.Ok
- '/// string in Undo-list has to be: "Insert frame: MyFrame")
- Call CheckUndoStringInUndoList ( 10, "InsertFrame" )
-
- printlog "- Rename Frame"
- '/// Open navigator and select frame
- Call wNavigatorAuswahl ( 3, 1, true )
- Kontext "NavigatorWriter"
- '/// Open contextmenu and choose 'Edit'
- Auswahlliste.OpenContextMenu
- Call hMenuSelectNr(4)
- Call hMenuSelectNr(3)
- Kontext "ObjekteUmbenennen"
- Objektname.Settext "MyRenamedFrame"
- ObjekteUmbenennen.Ok
- '/// string in Undo-list has to be: "Rename frame: 'MyFrame' -> 'MyRenamedFrame'")
- Call CheckUndoStringInUndoList ( 10, "RenameFrame" )
- printlog "- Delete Frame"
- '/// Type 'Del' to delete the frame
- Call wTypeKeys "<Delete>"
- '/// string in Undo-list has to be: "Delete frame: 'MyRenamedFrame'")
- Call CheckUndoStringInUndoList ( 10, "DeleteFrame" )
-
- '/// Close document
- Call hCloseDocument
+ warnlog( "#111909# - Cannot access <rename> item in context menu" )
+ goto endsub
+
+ '/// <B>Frames (Insert/Rename/Delete)</B>
+ printlog "- Insert Frame"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / Frame
+ InsertFrame
+ Kontext
+ Active.Setpage TabZusaetze
+ Kontext "TabZusaetze"
+ ObjektName.Settext "MyFrame"
+ TabZusaetze.Ok
+ '/// string in Undo-list has to be: "Insert frame: MyFrame")
+ Call CheckUndoStringInUndoList ( 10, "InsertFrame" )
+
+ printlog "- Rename Frame"
+ '/// Open navigator and select frame
+ Call wNavigatorAuswahl ( 3, 1, true )
+ Kontext "NavigatorWriter"
+ '/// Open contextmenu and choose 'Edit'
+ Auswahlliste.OpenContextMenu
+ Call hMenuSelectNr(4)
+ Call hMenuSelectNr(3)
+ Kontext "ObjekteUmbenennen"
+ Objektname.Settext "MyRenamedFrame"
+ ObjekteUmbenennen.Ok
+ '/// string in Undo-list has to be: "Rename frame: 'MyFrame' -> 'MyRenamedFrame'")
+ Call CheckUndoStringInUndoList ( 10, "RenameFrame" )
+ printlog "- Delete Frame"
+ '/// Type 'Del' to delete the frame
+ Call wTypeKeys "<Delete>"
+ '/// string in Undo-list has to be: "Delete frame: 'MyRenamedFrame'")
+ Call CheckUndoStringInUndoList ( 10, "DeleteFrame" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoTableGeneral
- Dim sTableName as string
-
- '/// <B>Tables Part 1</B>
- printlog "- insert table"
- '/// new document
- Call hNewDocument
- '/// Insert a table
- InsertTableWriter
- Kontext "TabelleEinfuegenWriter"
- sTableName = "MyTable"
- Tabellenname.Settext sTableName
- TabelleEinfuegenWriter.Ok
- '/// string in Undo-list has to be: "Insert table")
- Call CheckUndoStringInUndoList ( 10, "InsertTable" )
- printlog "- Insert a row"
- '/// <B>Insert a row</B>
- Call hToolbarSelect("Table", true)
- ZeileEinfuegen.Click
- '/// string in Undo-list has to be: "Insert row")
- Call CheckUndoStringInUndoList ( 10, "InsertRow" )
- printlog "- Insert a column"
- '/// <B>Insert a column</B>
- Call hToolbarSelect("Table", true)
- SpalteEinfuegen.Click
- '/// string in Undo-list has to be: "Insert column")
- Call CheckUndoStringInUndoList ( 10, "InsertColumn" )
- printlog "- Delete a row"
- '/// <B>Delete a row</B>
- Call hToolbarSelect("Table", true)
- ZeileLoeschen.Click
- '/// string in Undo-list has to be: "Delete row")
- Call CheckUndoStringInUndoList ( 10, "DeleteRow" )
- printlog "- Delete a column"
- '/// <B>Delete a column</B>
- Call hToolbarSelect("Table", true)
- SpalteLoeschen.Click
- '/// string in Undo-list has to be: "Delete column")
- Call CheckUndoStringInUndoList ( 10, "DeleteColumn" )
- printlog "- format a cell"
- '/// <B>Format cell (enable number recognition form that)</B>
+ Dim sTableName as string
+
+ '/// <B>Tables Part 1</B>
+ printlog "- insert table"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a table
+ InsertTableWriter
+ Kontext "TabelleEinfuegenWriter"
+ sTableName = "MyTable"
+ Tabellenname.Settext sTableName
+ TabelleEinfuegenWriter.Ok
+ '/// string in Undo-list has to be: "Insert table")
+ Call CheckUndoStringInUndoList ( 10, "InsertTable" )
+ printlog "- Insert a row"
+ '/// <B>Insert a row</B>
+ Call hToolbarSelect("Table", true)
+ ZeileEinfuegen.Click
+ '/// string in Undo-list has to be: "Insert row")
+ Call CheckUndoStringInUndoList ( 10, "InsertRow" )
+ printlog "- Insert a column"
+ '/// <B>Insert a column</B>
+ Call hToolbarSelect("Table", true)
+ SpalteEinfuegen.Click
+ '/// string in Undo-list has to be: "Insert column")
+ Call CheckUndoStringInUndoList ( 10, "InsertColumn" )
+ printlog "- Delete a row"
+ '/// <B>Delete a row</B>
+ Call hToolbarSelect("Table", true)
+ ZeileLoeschen.Click
+ '/// string in Undo-list has to be: "Delete row")
+ Call CheckUndoStringInUndoList ( 10, "DeleteRow" )
+ printlog "- Delete a column"
+ '/// <B>Delete a column</B>
+ Call hToolbarSelect("Table", true)
+ SpalteLoeschen.Click
+ '/// string in Undo-list has to be: "Delete column")
+ Call CheckUndoStringInUndoList ( 10, "DeleteColumn" )
+ printlog "- format a cell"
+ '/// <B>Format cell (enable number recognition form that)</B>
ToolsOptions
Call hToolsOptions ("WRITER","Table")
if Not AutomatischeZahlenerkennung.IsChecked then AutomatischeZahlenerkennung.Check
Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.Cancel
- '/// type '1' in a cell
- Call wTypeKeys ( "1" )
- Call wTypeKeys ( "<Right>" )
- '/// string in Undo-list has to be: "Format cell")
- Call CheckUndoStringInUndoList ( 10, "FormatCell" )
-
+ '/// type '1' in a cell
+ Call wTypeKeys ( "1" )
+ Call wTypeKeys ( "<Right>" )
+ '/// string in Undo-list has to be: "Format cell")
+ Call CheckUndoStringInUndoList ( 10, "FormatCell" )
+
ToolsOptions
Call hToolsOptions ("WRITER","Table")
if AutomatischeZahlenerkennung.IsChecked then AutomatischeZahlenerkennung.UnCheck
Kontext "ExtrasOptionenDlg"
ExtrasOptionenDlg.Cancel
- '/// CloseDocument
- Call hCloseDocument
+ '/// CloseDocument
+ Call hCloseDocument
endcase
testcase tUndoTableOptionsMerge
- '/// <B>Tables Part 2</B>
- printlog "- apply table attributes"
- '/// new document
- Call hNewDocument
- '/// Insert a table
- InsertTableWriter
- Kontext "TabelleEinfuegenWriter"
- TabelleEinfuegenWriter.Ok
-
- printlog "- apply attributes"
- '/// Format / Table
- FormatTable
- '/// change some table options
- Kontext
- Active.Setpage TabTextflussTabelle
- Kontext "TabTextflussTabelle"
- if Umbruch.IsChecked then
- Umbruch.Uncheck
- else
- Umbruch.Check
- end if
- TabTextflussTabelle.Ok
- '/// string in Undo-list has to be: "Apply table attributes")
- Call CheckUndoStringInUndoList ( 10, "ApplyTableAttributes" )
-
- printlog "- merge tables"
- '/// <B>Merge tables</B>
- Call wTypeKeys ( "<Down>" ,2 )
- '/// Insert a second table
- InsertTableWriter
- Kontext "TabelleEinfuegenWriter"
- TabelleEinfuegenWriter.Ok
- '/// Format / Merge / Tables
- FormatMergeTables
- '/// string in Undo-list has to be: "Merge table")
- Call CheckUndoStringInUndoList ( 10, "MergeTable" )
-
- '/// close Document
- Call hCloseDocument
+ '/// <B>Tables Part 2</B>
+ printlog "- apply table attributes"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a table
+ InsertTableWriter
+ Kontext "TabelleEinfuegenWriter"
+ TabelleEinfuegenWriter.Ok
+
+ printlog "- apply attributes"
+ '/// Format / Table
+ FormatTable
+ '/// change some table options
+ Kontext
+ Active.Setpage TabTextflussTabelle
+ Kontext "TabTextflussTabelle"
+ if Umbruch.IsChecked then
+ Umbruch.Uncheck
+ else
+ Umbruch.Check
+ end if
+ TabTextflussTabelle.Ok
+ '/// string in Undo-list has to be: "Apply table attributes")
+ Call CheckUndoStringInUndoList ( 10, "ApplyTableAttributes" )
+
+ printlog "- merge tables"
+ '/// <B>Merge tables</B>
+ Call wTypeKeys ( "<Down>" ,2 )
+ '/// Insert a second table
+ InsertTableWriter
+ Kontext "TabelleEinfuegenWriter"
+ TabelleEinfuegenWriter.Ok
+ '/// Format / Merge / Tables
+ FormatMergeTables
+ '/// string in Undo-list has to be: "Merge table")
+ Call CheckUndoStringInUndoList ( 10, "MergeTable" )
+
+ '/// close Document
+ Call hCloseDocument
endcase
testcase tUndoTableConvertSort
- '/// <B>Tables Part 3</B>
- printlog "- Convert to text"
- '/// new document
- Call hNewDocument
- '/// Insert text "This<Return>is a<Return>table to text<Return>text"
- Call wTypeKeys ("This<Return>is a<Return>table to text<Return>text")
- '/// select all
- Call wTypeKeys ( "<Mod1 A>" )
- '/// Format / Text <-> Table
- ToolsTextInTable
+ '/// <B>Tables Part 3</B>
+ printlog "- Convert to text"
+ '/// new document
+ Call hNewDocument
+ '/// Insert text "This<Return>is a<Return>table to text<Return>text"
+ Call wTypeKeys ("This<Return>is a<Return>table to text<Return>text")
+ '/// select all
+ Call wTypeKeys ( "<Mod1 A>" )
+ '/// Format / Text <-> Table
+ ToolsTextInTable
Kontext "TextInTabelleUmwandeln"
TextInTabelleUmwandeln.OK
- '/// string in Undo-list has to be: "Convert table -> text")
- Call CheckUndoStringInUndoList ( 10, "ConvertTable" )
-
- printlog "- Sort table"
- '/// <B>Sort table</B>
- Call wTypeKeys ( "<Mod1 A>", 2 )
- '/// Select all -> Tools / Sort
- ToolsSort
- Kontext "Sortieren"
- Sortieren.Ok
- '/// string in Undo-list has to be: "Sort table")
- Call CheckUndoStringInUndoList ( 10, "SortTable" )
-
- '/// Close Document
- Call hCloseDocument
+ '/// string in Undo-list has to be: "Convert table -> text")
+ Call CheckUndoStringInUndoList ( 10, "ConvertTable" )
+
+ printlog "- Sort table"
+ '/// <B>Sort table</B>
+ Call wTypeKeys ( "<Mod1 A>", 2 )
+ '/// Select all -> Tools / Sort
+ ToolsSort
+ Kontext "Sortieren"
+ Sortieren.Ok
+ '/// string in Undo-list has to be: "Sort table")
+ Call CheckUndoStringInUndoList ( 10, "SortTable" )
+
+ '/// Close Document
+ Call hCloseDocument
endcase
testcase tUndoTableSplitDelete
- '/// <B>Tables Part 4</B>
- printlog "- Split tables"
- '/// new document
- Call hNewDocument
- '/// Insert 2 tables
- InsertTableWriter
- Kontext "TabelleEinfuegenWriter"
- TabelleEinfuegenWriter.Ok
- Call wTypeKeys ( "<Down>", 3 )
- InsertTableWriter
- Kontext "TabelleEinfuegenWriter"
- TabellenName.Settext "AnotherTable"
- TabelleEinfuegenWriter.Ok
- '/// MergeTables
- FormatMergeTables
- wait 500
- '/// Split tables
- FormatSplitTable
- Kontext "TabelleAuftrennen"
- TabelleAuftrennen.Ok
- '/// string in Undo-list has to be: "Split table")
- Call CheckUndoStringInUndoList ( 10, "SplitTable" )
-
- '/// <B>Delete table</B>
- printlog "- Delete table"
- '/// Open navigator and select table
- Call wNavigatorAuswahl ( 2, 1, true )
- Kontext "NavigatorWriter"
- '/// Open contextmenu and choose 'Delete'
- Auswahlliste.OpenContextMenu
- Call hMenuSelectNr(4)
- Call hMenuSelectNr(2)
- '/// string in Undo-list has to be: "Delete table: 'AnotherTable'")
- Call CheckUndoStringInUndoList ( 10, "DeleteTable" )
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Tables Part 4</B>
+ printlog "- Split tables"
+ '/// new document
+ Call hNewDocument
+ '/// Insert 2 tables
+ InsertTableWriter
+ Kontext "TabelleEinfuegenWriter"
+ TabelleEinfuegenWriter.Ok
+ Call wTypeKeys ( "<Down>", 3 )
+ InsertTableWriter
+ Kontext "TabelleEinfuegenWriter"
+ TabellenName.Settext "AnotherTable"
+ TabelleEinfuegenWriter.Ok
+ '/// MergeTables
+ FormatMergeTables
+ wait 500
+ '/// Split tables
+ FormatSplitTable
+ Kontext "TabelleAuftrennen"
+ TabelleAuftrennen.Ok
+ '/// string in Undo-list has to be: "Split table")
+ Call CheckUndoStringInUndoList ( 10, "SplitTable" )
+
+ '/// <B>Delete table</B>
+ printlog "- Delete table"
+ '/// Open navigator and select table
+ Call wNavigatorAuswahl ( 2, 1, true )
+ Kontext "NavigatorWriter"
+ '/// Open contextmenu and choose 'Delete'
+ Auswahlliste.OpenContextMenu
+ Call hMenuSelectNr(4)
+ Call hMenuSelectNr(2)
+ '/// string in Undo-list has to be: "Delete table: 'AnotherTable'")
+ Call CheckUndoStringInUndoList ( 10, "DeleteTable" )
+
+ '/// Close document
+ Call hCloseDocument
endcase
testcase tUndoHorizontalRuler
- '/// <B>HorizontalRuler</B>
- printlog "- Horizontal ruler"
- '/// new document
- Call hNewDocument
- '/// Insert / Horizontal Line
- InsertHorizontalLine
+ '/// <B>HorizontalRuler</B>
+ printlog "- Horizontal ruler"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / Horizontal Line
+ InsertHorizontalLine
'/// Select one line
- Kontext "HorizontaleLinieEinfuegen"
- Auswahl.TypeKeys "<Down>", 4
- HorizontaleLinieEinfuegen.Ok
- '/// string in Undo-list has to be: "Insert horizontal ruler")
- Call CheckUndoStringInUndoList ( 10, "InsertRuler" )
-
- '/// close document
- Call hCloseDocument
+ Kontext "HorizontaleLinieEinfuegen"
+ Auswahl.TypeKeys "<Down>", 4
+ HorizontaleLinieEinfuegen.Ok
+ '/// string in Undo-list has to be: "Insert horizontal ruler")
+ Call CheckUndoStringInUndoList ( 10, "InsertRuler" )
+
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoGraphics
- '/// <B>Graphics (Insert/Delete/Replace)</B>
- printlog "- Insert graphics from file"
- '/// new document
- Call hNewDocument
- '/// Insert a graphic from file
- Call hGrafikEinfuegen ( gTesttoolPath & "writer\optional\input\graphics\jolink.jpg" )
- '/// string in Undo-list has to be: "Insert graphics")
- Call CheckUndoStringInUndoList ( 10, "InsertGraphic" )
+ '/// <B>Graphics (Insert/Delete/Replace)</B>
+ printlog "- Insert graphics from file"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a graphic from file
+ Call hGrafikEinfuegen ( gTesttoolPath & "writer\optional\input\graphics\jolink.jpg" )
+ '/// string in Undo-list has to be: "Insert graphics")
+ Call CheckUndoStringInUndoList ( 10, "InsertGraphic" )
'/// <B>Delete graphic</B>
- printlog "- delete graphic"
- '/// press 'delete' to remove graphic
- Call wTypeKeys "<Delete>"
- '/// string in Undo-list has to be: "Delete graphics")
- Call CheckUndoStringInUndoList ( 10, "DeleteGraphic" )
-
- '/// <B>Insert graphic from gallery</B>
- printlog "- insert graphic from gallery"
- Kontext "Gallery"
+ printlog "- delete graphic"
+ '/// press 'delete' to remove graphic
+ Call wTypeKeys "<Delete>"
+ '/// string in Undo-list has to be: "Delete graphics")
+ Call CheckUndoStringInUndoList ( 10, "DeleteGraphic" )
+
+ '/// <B>Insert graphic from gallery</B>
+ printlog "- insert graphic from gallery"
+ Kontext "Gallery"
if Gallery.NotExists(2) then ToolsGallery
Sleep (2)
- View.OpenContextMenu
- Call hMenuSelectNr(1)
- Call hMenuSelectNr(1)
- '/// string in Undo-list has to be: "Insert graphics")
- Call CheckUndoStringInUndoList ( 10, "InsertGraphic" )
+ View.OpenContextMenu
+ Call hMenuSelectNr(1)
+ Call hMenuSelectNr(1)
+ '/// string in Undo-list has to be: "Insert graphics")
+ Call CheckUndoStringInUndoList ( 10, "InsertGraphic" )
Sleep (1)
- '/// <B>Replace graphic</B>
- printlog "- replace graphic"
- '/// Insert another graphics from gallery
- Kontext "Gallery"
- View.OpenContextMenu
- Call hMenuSelectNr(1)
- Call hMenuSelectNr(1)
- '/// string in Undo-list has to be: "Replace graphics")
- Call CheckUndoStringInUndoList ( 10, "ReplaceGraphic" )
-
- '/// Close gallery
- Kontext "Gallery"
- if Gallery.Exists then ToolsGallery
-
- '/// Close document
- Call hCloseDocument
+ '/// <B>Replace graphic</B>
+ printlog "- replace graphic"
+ '/// Insert another graphics from gallery
+ Kontext "Gallery"
+ View.OpenContextMenu
+ Call hMenuSelectNr(1)
+ Call hMenuSelectNr(1)
+ '/// string in Undo-list has to be: "Replace graphics")
+ Call CheckUndoStringInUndoList ( 10, "ReplaceGraphic" )
+
+ '/// Close gallery
+ Kontext "Gallery"
+ if Gallery.Exists then ToolsGallery
+
+ '/// Close document
+ Call hCloseDocument
endcase
diff --git a/testautomation/writer/optional/includes/undo/w_undo_history_4.inc b/testautomation/writer/optional/includes/undo/w_undo_history_4.inc
index 3f0940fc7537..4b80936ffbaa 100644
--- a/testautomation/writer/optional/includes/undo/w_undo_history_4.inc
+++ b/testautomation/writer/optional/includes/undo/w_undo_history_4.inc
@@ -33,178 +33,178 @@
sub w_undo_history_4
- Call tUndoOLEObject ' Objects (Insert/Delete)
- Call tUndoFloatingFrame ' Floating Frame (Insert/Delete)
- Call tUndoInsertFile ' Insert file
- Call tUndoAsianPhoneticGuides ' Asian Phonetic Guides
- Call tUndoAutocorrect ' Autocorrect / Autoformat
- Call tUndoDrawObject ' Draw Object (Insert)
- Call tUndoDrawObjectGroup ' Draw Object (Group/ungroup/Name/Delete)
- Call tUndoSpellcheck ' Spellcheck (Autocheck/Spellcheck)
- Call tUndoFormControl ' Form Control (Insert/resize/move/replace/change property/delete)
- Call tUndoHeaderFooter ' Header/Footer insert and delete
-
+ Call tUndoOLEObject ' Objects (Insert/Delete)
+ Call tUndoFloatingFrame ' Floating Frame (Insert/Delete)
+ Call tUndoInsertFile ' Insert file
+ Call tUndoAsianPhoneticGuides ' Asian Phonetic Guides
+ Call tUndoAutocorrect ' Autocorrect / Autoformat
+ Call tUndoDrawObject ' Draw Object (Insert)
+ Call tUndoDrawObjectGroup ' Draw Object (Group/ungroup/Name/Delete)
+ Call tUndoSpellcheck ' Spellcheck (Autocheck/Spellcheck)
+ Call tUndoFormControl ' Form Control (Insert/resize/move/replace/change property/delete)
+ Call tUndoHeaderFooter ' Header/Footer insert and delete
+
end sub
testcase tUndoOLEObject
-
- '/// <B>OLE-Objects (Insert/Delete)</B>
- printlog "- Insert OLE-Object"
- '/// new Document
- Call hNewDocument
+
+ '/// <B>OLE-Objects (Insert/Delete)</B>
+ printlog "- Insert OLE-Object"
+ '/// new Document
+ Call hNewDocument
'/// Insert / Object / OLE-Object ///
- InsertObjectOLEObject
+ InsertObjectOLEObject
Kontext "OLEObjektEinfuegen"
- Objekttyp.Select 1
- OLEObjektEinfuegen.Ok
+ Objekttyp.Select 1
+ OLEObjektEinfuegen.Ok
wait 500
- Call wTypeKeys "<Esc>"
+ Call wTypeKeys "<Esc>"
wait 500
Call gMouseClick(15,5)
wait 500
- '/// string in Undo-list has to be: "Insert object")
- Call CheckUndoStringInUndoList ( 10, "InsertObject" )
+ '/// string in Undo-list has to be: "Insert object")
+ Call CheckUndoStringInUndoList ( 10, "InsertObject" )
- printlog "- delete object"
- '/// Select object with <Shift F4>
+ printlog "- delete object"
+ '/// Select object with <Shift F4>
Call wTypeKeys "<Shift F4>"
wait 500
'/// <B>Delete object</B>
- Call wTypeKeys "<Delete>"
+ Call wTypeKeys "<Delete>"
wait 500
- '/// press 'delete' to remove object
- '/// string in Undo-list has to be: "Delete object")
- Call CheckUndoStringInUndoList ( 10, "DeleteObject" )
-
- '/// close Document
- Call hCloseDocument
+ '/// press 'delete' to remove object
+ '/// string in Undo-list has to be: "Delete object")
+ Call CheckUndoStringInUndoList ( 10, "DeleteObject" )
+
+ '/// close Document
+ Call hCloseDocument
endcase
testcase tUndoFloatingFrame
- '/// <B>Floating frames</B>
- printlog "- Insert floating frame"
- '/// new document
- Call hNewDocument
- '/// Insert / Floating frame
- InsertFloatingFrame
- Kontext "TabEigenschaften"
- '/// Choose a file as floating frame
- Inhalt.Settext Convertpath (gTesttoolPath & "writer\optional\input\graphics\jolink.jpg" )
- TabEigenschaften.Ok
- Sleep 2
- '/// string in Undo-list has to be: "Insert floating frame")
- Call CheckUndoStringInUndoList ( 10, "InsertFloatingFrame" )
-
- '/// Delete floating frame
- printlog "- delete floating frame"
- Call wTypeKeys "<Delete>"
- '/// string in Undo-list has to be: "Delete floating frame")
- Call CheckUndoStringInUndoList ( 10, "DeleteFloatingFrame" )
-
- '/// close document
- Call hCloseDocument
+ '/// <B>Floating frames</B>
+ printlog "- Insert floating frame"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / Floating frame
+ InsertFloatingFrame
+ Kontext "TabEigenschaften"
+ '/// Choose a file as floating frame
+ Inhalt.Settext Convertpath (gTesttoolPath & "writer\optional\input\graphics\jolink.jpg" )
+ TabEigenschaften.Ok
+ Sleep 2
+ '/// string in Undo-list has to be: "Insert floating frame")
+ Call CheckUndoStringInUndoList ( 10, "InsertFloatingFrame" )
+
+ '/// Delete floating frame
+ printlog "- delete floating frame"
+ Call wTypeKeys "<Delete>"
+ '/// string in Undo-list has to be: "Delete floating frame")
+ Call CheckUndoStringInUndoList ( 10, "DeleteFloatingFrame" )
+
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoInsertFile
- '/// <B>Insert File</B>
- printlog "- Insert file"
- '/// new document
- Call hNewDocument
- '/// Insert / File
- InsertFileWriter
+ '/// <B>Insert File</B>
+ printlog "- Insert file"
+ '/// new document
+ Call hNewDocument
+ '/// Insert / File
+ InsertFileWriter
Sleep 3
Kontext "OeffnenDlg"
Sleep 2
'/// Choose "..\\writer\\input\\htmltest.sxw"
- if OeffnenDlg.Exists then
- Dateiname.Settext Convertpath (gTesttoolPath & "writer\optional\input\undo\htmltest.sxw" )
- Oeffnen.Click
- else
- Warnlog "File open dialog missing"
- Call hCloseDocument
- goto endsub
- end if
-
- '/// string in Undo-list has to be: "Insert document")
- Call CheckUndoStringInUndoList ( 10, "InsertDocument" )
-
- '/// close document
- Call hCloseDocument
+ if OeffnenDlg.Exists then
+ Dateiname.Settext Convertpath (gTesttoolPath & "writer\optional\input\undo\htmltest.sxw" )
+ Oeffnen.Click
+ else
+ Warnlog "File open dialog missing"
+ Call hCloseDocument
+ goto endsub
+ end if
+
+ '/// string in Undo-list has to be: "Insert document")
+ Call CheckUndoStringInUndoList ( 10, "InsertDocument" )
+
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoAsianPhoneticGuides
- '/// <B>Asian Phonetic Guides</B>
- printlog "- Asian Phonetic Guides"
- '/// new document
- Call hNewDocument
- '/// type some text and select it
- Call wTypeKeys ( "JuppHeidiUndJuppHeida" )
- Call wTypeKeys ( "<Home>" )
- '/// Check if Asian support is enabled, if not enable it
- if gAsianSup = true then
- FormatRuby
- Kontext "RubyDialog"
- RubyText1.Settext "SeppHeidiUndSeppHeida"
- RubyDialog.Ok
- RubyDialog.Close
- else
- Call ActiveDeactivateAsianSupport(True)
- FormatRuby
- Kontext "RubyDialog"
- RubyText1.Settext "SeppHeidiUndSeppHeida"
- RubyDialog.Ok
- RubyDialog.Close
- Call ActiveDeactivateAsianSupport(False)
- end if
-
- '/// string in Undo-list has to be: "Asian Phonectic Guides Setting")
- Call CheckUndoStringInUndoList ( 10, "APGS" )
-
- '/// close document
- Call hCloseDocument
+ '/// <B>Asian Phonetic Guides</B>
+ printlog "- Asian Phonetic Guides"
+ '/// new document
+ Call hNewDocument
+ '/// type some text and select it
+ Call wTypeKeys ( "JuppHeidiUndJuppHeida" )
+ Call wTypeKeys ( "<Home>" )
+ '/// Check if Asian support is enabled, if not enable it
+ if gAsianSup = true then
+ FormatRuby
+ Kontext "RubyDialog"
+ RubyText1.Settext "SeppHeidiUndSeppHeida"
+ RubyDialog.Ok
+ RubyDialog.Close
+ else
+ Call ActiveDeactivateAsianSupport(True)
+ FormatRuby
+ Kontext "RubyDialog"
+ RubyText1.Settext "SeppHeidiUndSeppHeida"
+ RubyDialog.Ok
+ RubyDialog.Close
+ Call ActiveDeactivateAsianSupport(False)
+ end if
+
+ '/// string in Undo-list has to be: "Asian Phonectic Guides Setting")
+ Call CheckUndoStringInUndoList ( 10, "APGS" )
+
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoAutocorrect
- '/// <B>Autocorrect / Autoformat</B>
- printlog "- Autocorrect / Autoformat"
- '/// new document
- Call hNewDocument
- '/// <B>Autocorrect</B>
- printlog "- Autocorrect"
- '/// type with quote and blank at the end 'www.sun.com '
- Call wTypeKeys ( "www.sun.com " )
- '/// string in Undo-list has to be: "AutoCorrect")
- Call CheckUndoStringInUndoList ( 10, "AutoCorrect" )
+ '/// <B>Autocorrect / Autoformat</B>
+ printlog "- Autocorrect / Autoformat"
+ '/// new document
+ Call hNewDocument
+ '/// <B>Autocorrect</B>
+ printlog "- Autocorrect"
+ '/// type with quote and blank at the end 'www.sun.com '
+ Call wTypeKeys ( "www.sun.com " )
+ '/// string in Undo-list has to be: "AutoCorrect")
+ Call CheckUndoStringInUndoList ( 10, "AutoCorrect" )
'/// insert a line break
- Call wTypeKeys ( "<Return>" )
- '/// <B>Autoformat</B>
- printlog "- Autoformat"
- '/// type - AutoFormat test<Return>
- Call wTypeKeys ( "- AutoFormat test<Return>" )
- '/// string in Undo-list has to be: "AutoCorrect")
- Call CheckUndoStringInUndoList ( 10, "AutoFormat" )
-
- '/// close document
- Call hCloseDocument
+ Call wTypeKeys ( "<Return>" )
+ '/// <B>Autoformat</B>
+ printlog "- Autoformat"
+ '/// type - AutoFormat test<Return>
+ Call wTypeKeys ( "- AutoFormat test<Return>" )
+ '/// string in Undo-list has to be: "AutoCorrect")
+ Call CheckUndoStringInUndoList ( 10, "AutoFormat" )
+
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoDrawObject
- '/// <B>Draw object</B>
- printlog "- Draw object"
- '/// new document
- Call hNewDocument
- '/// Insert a freeform line object
-
+ '/// <B>Draw object</B>
+ printlog "- Draw object"
+ '/// new document
+ Call hNewDocument
+ '/// Insert a freeform line object
+
ViewZoom
Kontext "Massstab"
Optimal.Check
@@ -220,18 +220,18 @@ testcase tUndoDrawObject
Call gMouseClick( 55, 70 )
Call wTypeKeys ("<Escape>")
- '/// string in Undo-list has to be: "Insert draw object: freeform line")
- Call CheckUndoStringInUndoList ( 10, "FreeForm" )
+ '/// string in Undo-list has to be: "Insert draw object: freeform line")
+ Call CheckUndoStringInUndoList ( 10, "FreeForm" )
- '/// close document
- Call hCloseDocument
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoDrawObjectGroup
- '/// <B>Group of Drawing objects</B>
- printlog "- Group of Drawing objects"
+ '/// <B>Group of Drawing objects</B>
+ printlog "- Group of Drawing objects"
'/// new document ///
Call hNewDocument
ViewZoom
@@ -249,172 +249,172 @@ testcase tUndoDrawObjectGroup
'/// Select Format / Group / Group ///
try
printlog "- group objects"
- FormatGroupGroup
+ FormatGroupGroup
Sleep 1
- '/// string in Undo-list has to be: "Group draw objects")
- Call CheckUndoStringInUndoList ( 10, "DrawGroup" )
-
- '/// Format / Name object
- printlog "- name objects"
- FormatNameObject
- Kontext "NameDlgObject"
- NameField.Settext "MyGroup"
- NameDlgObject.OK
- '/// string in Undo-list has to be: "Rename 2 Rectangles")
- Call CheckUndoStringInUndoList ( 10, "RenameGroup" )
-
- '/// Select Format / Group / Ungroup ///
- printlog "- ungroup objects"
- FormatUngroupDraw
- '/// string in Undo-list has to be: "Ungroup group object")
- Call CheckUndoStringInUndoList ( 10, "DrawUnGroup" )
-
- '/// Select 1 object and delete it
- Call gMouseClick ( 40, 52 )
- printlog "- delete object"
- Call wTypeKeys "<Delete>"
- '/// string in Undo-list has to be: "Delete 2 Rectangles")
- Call CheckUndoStringInUndoList ( 10, "DeleteGroup" )
- catch
+ '/// string in Undo-list has to be: "Group draw objects")
+ Call CheckUndoStringInUndoList ( 10, "DrawGroup" )
+
+ '/// Format / Name object
+ printlog "- name objects"
+ FormatNameObject
+ Kontext "NameDlgObject"
+ NameField.Settext "MyGroup"
+ NameDlgObject.OK
+ '/// string in Undo-list has to be: "Rename 2 Rectangles")
+ Call CheckUndoStringInUndoList ( 10, "RenameGroup" )
+
+ '/// Select Format / Group / Ungroup ///
+ printlog "- ungroup objects"
+ FormatUngroupDraw
+ '/// string in Undo-list has to be: "Ungroup group object")
+ Call CheckUndoStringInUndoList ( 10, "DrawUnGroup" )
+
+ '/// Select 1 object and delete it
+ Call gMouseClick ( 40, 52 )
+ printlog "- delete object"
+ Call wTypeKeys "<Delete>"
+ '/// string in Undo-list has to be: "Delete 2 Rectangles")
+ Call CheckUndoStringInUndoList ( 10, "DeleteGroup" )
+ catch
Warnlog "Unable to execute 'Format / Group / Group' -> disabled!"
endcatch
- '/// close document
- Call hCloseDocument
+ '/// close document
+ Call hCloseDocument
endcase
testcase tUndoSpellcheck
- Dim sReplace as string
+ Dim sReplace as string
- '/// <B>Spellcheck(Autocheck/Spellcheck)</B>
- printlog "- Spellcheck: Autocheck"
+ '/// <B>Spellcheck(Autocheck/Spellcheck)</B>
+ printlog "- Spellcheck: Autocheck"
'/// new document ///
hfileOpen (gTesttoolpath + "writer\optional\input\undo\spellcheck_undo.odt")
Call sMakeReadOnlyDocumentEditable
- '/// Type "This is a testp<End>"
- Call wTypeKeys ( "<End>" ) 'This is a testp
- '/// Select word' testp'
- Call wTypeKeys ( "<Mod1 Shift Left>" )
- '/// Tools / Spellcheck
- ToolsSpellcheckWriter
- Kontext "Spellcheck"
- Suggestions.Select 1
- sReplace = Suggestions.GetSelText
- '///Replace with 1st word in suggestion list
- printlog "-> Replace with word: " & sReplace
- Change.Click
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- Active.Ok
- end if
- end if
- Kontext "Spellcheck"
- if Spellcheck.Exists then Spellcheck.Close
- '/// string in Undo-list has to be: "Replace: 'Testp' -> 'Test'")
- Call CheckUndoStringInUndoList ( 10, "Autocheck/Spellcheck" )
+ '/// Type "This is a testp<End>"
+ Call wTypeKeys ( "<End>" ) 'This is a testp
+ '/// Select word' testp'
+ Call wTypeKeys ( "<Mod1 Shift Left>" )
+ '/// Tools / Spellcheck
+ ToolsSpellcheckWriter
+ Kontext "Spellcheck"
+ Suggestions.Select 1
+ sReplace = Suggestions.GetSelText
+ '///Replace with 1st word in suggestion list
+ printlog "-> Replace with word: " & sReplace
+ Change.Click
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ Active.Ok
+ end if
+ end if
+ Kontext "Spellcheck"
+ if Spellcheck.Exists then Spellcheck.Close
+ '/// string in Undo-list has to be: "Replace: 'Testp' -> 'Test'")
+ Call CheckUndoStringInUndoList ( 10, "Autocheck/Spellcheck" )
'/// Uncheck 'Autospellcheck' in Toolbar ///
ToolsSpellcheckAutoSpellcheck
- printlog "- Spellcheck"
- Call wTypeKeys ( "<End><Return>", 2 )
- '/// retype 'testp'
- Call wTypeKeys ( "testp<Shift Home>" )
- ToolsSpellcheckWriter
- Kontext "Spellcheck"
- ' Workaround: For some reasons sometimes dialog is disabled here
- ' Only reproducable by testtool
- try
- Suggestions.Select 1
- catch
- Spellcheck.Close
- ToolsSpellcheckWriter
- Kontext "Spellcheck"
- Suggestions.Select 1
- endcatch
- Change.Click
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- try
- Active.No
- catch
- Active.Ok
- endcatch
- end if
- end if
- Kontext "Spellcheck"
- if Spellcheck.Exists then Spellcheck.Close
-
- '/// string in Undo-list has to be: "Replace: 'Testp' -> 'Test'")
- Call CheckUndoStringInUndoList ( 10, "Autocheck/Spellcheck" )
-
- '/// close document
+ printlog "- Spellcheck"
+ Call wTypeKeys ( "<End><Return>", 2 )
+ '/// retype 'testp'
+ Call wTypeKeys ( "testp<Shift Home>" )
+ ToolsSpellcheckWriter
+ Kontext "Spellcheck"
+ ' Workaround: For some reasons sometimes dialog is disabled here
+ ' Only reproducable by testtool
+ try
+ Suggestions.Select 1
+ catch
+ Spellcheck.Close
+ ToolsSpellcheckWriter
+ Kontext "Spellcheck"
+ Suggestions.Select 1
+ endcatch
+ Change.Click
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ try
+ Active.No
+ catch
+ Active.Ok
+ endcatch
+ end if
+ end if
+ Kontext "Spellcheck"
+ if Spellcheck.Exists then Spellcheck.Close
+
+ '/// string in Undo-list has to be: "Replace: 'Testp' -> 'Test'")
+ Call CheckUndoStringInUndoList ( 10, "Autocheck/Spellcheck" )
+
+ '/// close document
Call hCloseDocument
endcase
testcase tUndoFormControl
- '/// <B>Form Control (Insert/resize/move/replace/change property/delete)</B>
- printlog "- Form control (insert)"
- '/// new document
- Call hNewDocument
- '/// Open 'Form' Toolbox ///
- Call hToolbarSelect ("FormControls", true)
- 'Formsbar.Move 20, 30
- '/// Insert a pushbutton from toolbox ///
- Pushbutton.Click
+ '/// <B>Form Control (Insert/resize/move/replace/change property/delete)</B>
+ printlog "- Form control (insert)"
+ '/// new document
+ Call hNewDocument
+ '/// Open 'Form' Toolbox ///
+ Call hToolbarSelect ("FormControls", true)
+ 'Formsbar.Move 20, 30
+ '/// Insert a pushbutton from toolbox ///
+ Pushbutton.Click
Kontext "DocumentWriter"
DocumentWriter.MouseDown ( 40, 50 )
DocumentWriter.MouseMove ( 50, 55 )
DocumentWriter.MouseUp ( 50, 55 )
Sleep 1
- '/// string in Undo-list has to be: "Insert control")
- Call CheckUndoStringInUndoList ( 10, "ControlInsert" )
-
- printlog "- Form control (move)"
- '/// Press '<Up>' to move control
- Call wTypeKeys ( "<Up>" )
- '/// string in Undo-list has to be: "Move control")
- Call CheckUndoStringInUndoList ( 10, "ControlMove" )
-
- printlog "- Form control (resize)"
- '/// Press '<Ctrl+Tab>' to enter handle selection mode
- Call wTypeKeys ( "<Mod1 Tab>" )
- '/// Press '<Up>' to resize control
- Call wTypeKeys ( "<Up>" )
- '/// string in Undo-list has to be: "Resize control")
- Call CheckUndoStringInUndoList ( 10, "ControlResize" )
-
- printlog "- Form control (replace)"
- '/// Select 'Format->Replace with-> Text box'
- FormatReplaceWithTextBox
- wait 500
- '/// string in Undo-list has to be: "Replace control")
- Call CheckUndoStringInUndoList ( 10, "ControlReplace" )
-
- printlog "- Form control (change property)"
- '/// Select 'Format->Control' and change name of control
- FormatControl
- Kontext "ControlPropertiesTabControl"
+ '/// string in Undo-list has to be: "Insert control")
+ Call CheckUndoStringInUndoList ( 10, "ControlInsert" )
+
+ printlog "- Form control (move)"
+ '/// Press '<Up>' to move control
+ Call wTypeKeys ( "<Up>" )
+ '/// string in Undo-list has to be: "Move control")
+ Call CheckUndoStringInUndoList ( 10, "ControlMove" )
+
+ printlog "- Form control (resize)"
+ '/// Press '<Ctrl+Tab>' to enter handle selection mode
+ Call wTypeKeys ( "<Mod1 Tab>" )
+ '/// Press '<Up>' to resize control
+ Call wTypeKeys ( "<Up>" )
+ '/// string in Undo-list has to be: "Resize control")
+ Call CheckUndoStringInUndoList ( 10, "ControlResize" )
+
+ printlog "- Form control (replace)"
+ '/// Select 'Format->Replace with-> Text box'
+ FormatReplaceWithTextBox
+ wait 500
+ '/// string in Undo-list has to be: "Replace control")
+ Call CheckUndoStringInUndoList ( 10, "ControlReplace" )
+
+ printlog "- Form control (change property)"
+ '/// Select 'Format->Control' and change name of control
+ FormatControl
+ Kontext "ControlPropertiesTabControl"
ControlPropertiesTabControl.setPage TabGeneralControl
- Kontext "TabGeneralControl"
- NameText.Settext "MyControl"
+ Kontext "TabGeneralControl"
+ NameText.Settext "MyControl"
FormatControl
- '/// string in Undo-list has to be: "Set property 'Name'")
- Call CheckUndoStringInUndoList ( 10, "ControlChange" )
-
- printlog "- Form control (delete)"
- '/// Press '<Delete>' to delete control
- Call wTypeKeys ( "<Delete>" )
- '/// string in Undo-list has to be: "Delete control")
- Call CheckUndoStringInUndoList ( 10, "ControlDelete" )
-
- '/// close document
+ '/// string in Undo-list has to be: "Set property 'Name'")
+ Call CheckUndoStringInUndoList ( 10, "ControlChange" )
+
+ printlog "- Form control (delete)"
+ '/// Press '<Delete>' to delete control
+ Call wTypeKeys ( "<Delete>" )
+ '/// string in Undo-list has to be: "Delete control")
+ Call CheckUndoStringInUndoList ( 10, "ControlDelete" )
+
+ '/// close document
Call hCloseDocument
endcase
@@ -423,73 +423,73 @@ testcase tUndoHeaderFooter
QAErrorlog "#i56552#footer deletion cannot be undone"
goto endsub
- '/// Insert header
- printlog "- Insert header"
- '/// new Document
- Call hNewDocument
- '/// Insert / Header / Default
- DocumentWriter.UseMenu
- MenuSelect(Menugetitemid(4))
- Sleep 2
- MenuSelect(Menugetitemid(9))
- Sleep 2
- MenuSelect(Menugetitemid(1))
- Sleep 2
- '/// string in Undo-list has to be: "Header/footer changed")
- Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
-
- '/// Delete header
- printlog "- Delete header"
+ '/// Insert header
+ printlog "- Insert header"
+ '/// new Document
+ Call hNewDocument
+ '/// Insert / Header / Default
+ DocumentWriter.UseMenu
+ MenuSelect(Menugetitemid(4))
+ Sleep 2
+ MenuSelect(Menugetitemid(9))
+ Sleep 2
+ MenuSelect(Menugetitemid(1))
+ Sleep 2
+ '/// string in Undo-list has to be: "Header/footer changed")
+ Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
+
+ '/// Delete header
+ printlog "- Delete header"
Kontext "DocumentWriter"
- DocumentWriter.UseMenu
+ DocumentWriter.UseMenu
MenuSelect(Menugetitemid(4))
Sleep 2
MenuSelect(Menugetitemid(9))
Sleep 2
MenuSelect(Menugetitemid(1))
Sleep 2
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- Active.Yes
- end if
- end if
- '/// string in Undo-list has to be: "Header/footer changed")
- Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
-
- '/// Insert footer
- printlog "- Insert footer"
- '/// Insert / Header / Default
- Kontext "DocumentWriter"
- DocumentWriter.UseMenu
- MenuSelect(Menugetitemid(4))
- Sleep 2
- MenuSelect(Menugetitemid(10))
- Sleep 2
- MenuSelect(Menugetitemid(1))
- Sleep 2
- '/// string in Undo-list has to be: "Header/footer changed")
- Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
-
- '/// Delete footer
- printlog "- Delete footer"
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ Active.Yes
+ end if
+ end if
+ '/// string in Undo-list has to be: "Header/footer changed")
+ Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
+
+ '/// Insert footer
+ printlog "- Insert footer"
+ '/// Insert / Header / Default
Kontext "DocumentWriter"
- DocumentWriter.UseMenu
+ DocumentWriter.UseMenu
MenuSelect(Menugetitemid(4))
Sleep 2
MenuSelect(Menugetitemid(10))
Sleep 2
MenuSelect(Menugetitemid(1))
Sleep 2
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- Active.Yes
- end if
- end if
- '/// string in Undo-list has to be: "Header/footer changed")
- Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
-
- '/// close document
- Call hCloseDocument
+ '/// string in Undo-list has to be: "Header/footer changed")
+ Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
+
+ '/// Delete footer
+ printlog "- Delete footer"
+ Kontext "DocumentWriter"
+ DocumentWriter.UseMenu
+ MenuSelect(Menugetitemid(4))
+ Sleep 2
+ MenuSelect(Menugetitemid(10))
+ Sleep 2
+ MenuSelect(Menugetitemid(1))
+ Sleep 2
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ Active.Yes
+ end if
+ end if
+ '/// string in Undo-list has to be: "Header/footer changed")
+ Call CheckUndoStringInUndoList ( 10, "Header/Footer" )
+
+ '/// close document
+ Call hCloseDocument
endcase
diff --git a/testautomation/writer/required/includes/w_001_.inc b/testautomation/writer/required/includes/w_001_.inc
index 24292afc4a2a..902aae05377d 100644..100755
--- a/testautomation/writer/required/includes/w_001_.inc
+++ b/testautomation/writer/required/includes/w_001_.inc
@@ -55,9 +55,6 @@ end sub
testcase tFileNewLabels
-QAErrorLog "#i102218# - tFileNewLabels outcommented due to bug."
-goto endsub
-
Dim iSheetFormat as integer
Dim iBrandIndex as integer
Dim iType as integer
@@ -78,7 +75,7 @@ goto endsub
cBrandList( 10 ) = "Sigel"
PrintLog "Open Labels-dialog with File / New / Labels"
- if ( hCreateLabels ) then
+ if ( hCreateLabels() ) then
Call DialogTest( TabEtiketten )
@@ -86,7 +83,8 @@ goto endsub
PrintLog "Check number of brands and types (see #i44801# for details)"
For iSheetFormat = 1 to 2
-
+
+ kontext "TabEtiketten"
Select Case( iSheetFormat )
Case 1
Endlos.Check
@@ -247,9 +245,6 @@ endcase
testcase tFileNewBusinessCards
-QAErrorLog "#i102218# - tFileNewBusinessCards outcommented due to bug."
-goto endsub
-
Dim iFormat as integer
Dim iBrand as integer
Dim iType as integer
@@ -359,7 +354,7 @@ goto endsub
Kontext "Active"
if ( Active.GetRT = 304 ) then
- Warnlog( "UNexpected messagebox: " & Active.GetText() )
+ Warnlog( "Unexpected messagebox: " & Active.GetText() )
Active.Ok
end if
diff --git a/testautomation/writer/required/includes/w_001a_.inc b/testautomation/writer/required/includes/w_001a_.inc
index ad4951e89a44..2bdbede570ed 100644
--- a/testautomation/writer/required/includes/w_001a_.inc
+++ b/testautomation/writer/required/includes/w_001a_.inc
@@ -224,23 +224,15 @@ testcase tFileTemplatesAddressbookSource
UseBindings
FileTemplatesAddressbookSource
- WaitSlot(2000)
PrintLog " In 'Address Book Assignement' dialog click pushbutton 'Administrate'"
Kontext "AddressbookSource"
- if AddressbookSource.Exists then
+ if AddressbookSource.Exists( 2 ) then
Call DialogTest (AddressbookSource)
Administrate.Click
- Sleep 2
+
PrintLog " Close 'Data Source Administration' with 'Cancel'"
Kontext "DatabaseProperties"
- if Not DatabaseProperties.Exists then
- Kontext "AddressSourceAutopilot"
- if AddressSourceAutopilot.Exists then
- AddressSourceAutopilot.Cancel
- end if
- Kontext "AddressbookSource"
- AddressbookSource.Cancel
- else
+ if ( DatabaseProperties.Exists( 2 ) ) then
PrintLog " DatabaseProperties.SetPage TabConnection"
Kontext "TabConnection"
Call DialogTest ( TabConnection )
@@ -249,6 +241,13 @@ testcase tFileTemplatesAddressbookSource
Kontext "AddressbookSource"
PrintLog " Close dialog"
AddressbookSource.Cancel
+ else
+ Kontext "AddressSourceAutopilot"
+ if AddressSourceAutopilot.Exists( 1 ) then
+ AddressSourceAutopilot.Cancel
+ end if
+ Kontext "AddressbookSource"
+ AddressbookSource.Cancel
end if
end if
@@ -315,13 +314,8 @@ testcase tFilePagePreview
gehtnicht = FALSE
printlog " Open new document"
Select Case gApplication
- Case "WRITER"
- Call hNewDocument
-
- Case "MASTERDOCUMENT"
- Call hNewDocument
-
- Case "HTML"
+ Case "WRITER", "MASTERDOCUMENT" : hNewDocument()
+ Case else
printlog "Not in Writer/Web!"
goto endsub
end select
@@ -358,9 +352,9 @@ testcase tFilePagePreview
if Active.Exists then
QAErrorlog "No default printer!"
Active.ok
- Sleep 1
+
Kontext "Printing"
- if Printing.Exists then Printing.Cancel
+ if Printing.Exists( 2 ) then Printing.Cancel
else
printlog " Close 'Print' dialog with cancel"
Kontext "Printing"
@@ -392,9 +386,9 @@ testcase tFilePrinterSetup
if Active.GetRT = 304 then
QAErrorLog "No Default Printer!"
Active.Ok
- Sleep 2
+
Kontext "DruckerEinrichten"
- if DruckerEinrichten.Exists then
+ if DruckerEinrichten.Exists( 2 ) then
Call DialogTest ( DruckerEinrichten )
DruckerEinrichten.Cancel
end if
diff --git a/testautomation/writer/required/includes/w_001b_.inc b/testautomation/writer/required/includes/w_001b_.inc
index 979ae00504b8..b0a6d96b1900 100644
--- a/testautomation/writer/required/includes/w_001b_.inc
+++ b/testautomation/writer/required/includes/w_001b_.inc
@@ -90,11 +90,8 @@ testcase tFileSendCreateHTMLDocument
PrintLog "- File / Send / Create HTML-Dokument"
PrintLog "Open new document"
Select Case gApplication
- Case "WRITER"
- Call hNewDocument
- Case "MASTERDOCUMENT"
- Call hNewDocument
- Case "HTML"
+ Case "WRITER", "MASTERDOCUMENT" : hNewDocument()
+ Case else
printlog "Not in WriterWeb!"
goto endsub
end select
@@ -159,11 +156,8 @@ testcase tFileSendOutlineToPresentation
endif
Kontext "Navigator"
- if Navigator.Exists then Navigator.Close
- PrintLog "Close documents"
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
+ hCloseDialog( Navigator, "Close,optional" )
+ hFileCloseAll()
endcase
'-----------------------------------------------------------
@@ -259,13 +253,9 @@ testcase tFileSendCreateAutoabstract
endcatch
Kontext "Navigator"
- if Navigator.Exists then Navigator.Close
- Sleep 1
+ hCloseDialog( Navigator, "Close,optional" )
+ hFileCloseAll()
- PrintLog "Close active documents"
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
endcase
'-----------------------------------------------------------
@@ -321,12 +311,11 @@ testcase tFileSendAutoabstractToPresentation
Warnlog "- Outline in Impress not created!"
endif
Kontext "Navigator"
- if Navigator.Exists then Navigator.Close
- Sleep 1
+ hCloseDialog( Navigator, "Close,optional" )
Call hCloseDocument
PrintLog "Close active document"
- Call wDocSetContext
+ hSetDocumentContext()
FileClose
endcase
'--------------------------------------------------------------------------------------------------------------------------------------------
@@ -694,10 +683,7 @@ testcase tMasterDocFileSendOutlineToPresentation
endif
Kontext "Navigator"
- if Navigator.Exists then
- Navigator.Close
- WaitSlot()
- endif
+ hCloseDialog( Navigator, "Close,optional" )
PrintLog "Close documents"
hFileCloseAll()
@@ -755,10 +741,7 @@ testcase tMasterDocFileSendCreateAutoabstract
Call hFileOpen ( gTesttoolPath + "writer\required\input\" + sFile )
Kontext "Navigator"
- if ( Navigator.Exists ) then
- Navigator.Close
- WaitSlot()
- endif
+ hCloseDialog( Navigator, "Close,optional" )
Kontext "DocumentWriter"
PrintLog "File / Send / Create Autoabstract"
@@ -788,10 +771,7 @@ testcase tMasterDocFileSendCreateAutoabstract
endif
Kontext "Navigator"
- if ( Navigator.Exists ) then
- Navigator.Close()
- WaitSlot()
- endif
+ hCloseDialog( Navigator, "Close,optional" )
PrintLog "Close documents"
hFileCloseAll()
@@ -811,10 +791,7 @@ testcase tMasterDocFileSendAutoabstractToPresentation
Call hFileOpen ( gTesttoolPath + "writer\required\input\" + sFile )
Kontext "Navigator"
- if Navigator.Exists then
- Navigator.Close
- Waitslot()
- endif
+ hCloseDialog( Navigator, "Close,optional" )
Kontext "DocumentWriter"
PrintLog "File / Send / Create Autoabstract To Presentation"
@@ -854,15 +831,12 @@ testcase tMasterDocFileSendAutoabstractToPresentation
endif
Kontext "Navigator"
- if Navigator.Exists then
- Navigator.Close
- WaitSlot()
- endif
+ hCloseDialog( Navigator, "Close,optional" )
Call hCloseDocument
PrintLog "Close active document"
- Call wDocSetContext
+ hSetDocumentContext()
FileClose
gApplication = "WRITER"
diff --git a/testautomation/writer/required/includes/w_002_.inc b/testautomation/writer/required/includes/w_002_.inc
index 73de7ba6edeb..d19c563526ce 100755
--- a/testautomation/writer/required/includes/w_002_.inc
+++ b/testautomation/writer/required/includes/w_002_.inc
@@ -1,5 +1,5 @@
'encoding UTF-8 Do not remove or change this line!
-'**************************************************************************
+'*******************************************************************************
' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
'
' Copyright 2000, 2010 Oracle and/or its affiliates.
@@ -23,13 +23,13 @@
' <http://www.openoffice.org/license.html>
' for a copy of the LGPLv3 License.
'
-'/************************************************************************
-'* **
-'* owner : helge.delfs@sun.com **
-'* **
-'* short description : **
-'* **
-'\******************************************************************
+'/******************************************************************************
+'* **
+'* owner : helge.delfs@sun.com **
+'* **
+'* short description : **
+'* **
+'\******************************************************************************
sub w_002_
@@ -60,14 +60,13 @@ sub w_002_
Call tEditImageMap
Call tEditObjectEdit
- 'Writer Web
- gApplication = "HTML"
- Call tHtmlDocEditFields
- gApplication = "WRITER"
-
'Writer Master Document
gApplication = "MASTERDOCUMENT"
Call tMasterDocEditNavigator
+
+ gApplication "HTML"
+ Call tEditFields
+
gApplication = "WRITER"
end sub
@@ -82,6 +81,7 @@ testcase tEditUndoRedo
PrintLog "Insert table"
Call hTabelleEinfuegen
+
PrintLog "Edit / Undo"
hUseAsyncSlot( "EditUndo" )
@@ -93,13 +93,14 @@ testcase tEditUndoRedo
PrintLog "File / Close"
hUseAsyncSlot( "FileClose" )
- Kontext
- if ( Active.Exists ) then
- if Active.GetRT = 304 then
- WarnLog ( "Messagebox: '" & Active.Gettext & "' should not appear" )
- Active.No
- end if
+
+ Kontext "Active"
+ if ( Active.Exists( 1 ) ) then
+ warnlog( "No messagebox was expected upon file close" )
+ printlog( Active.getText )
+ Active.no()
end if
+
endcase
'----------------------------------------------------
@@ -172,64 +173,62 @@ testcase tEditPasteSpecial
PrintLog "Open new document"
Call hNewDocument
- if gSamePC = TRUE then
- PrintLog " - External Clipboard"
- PrintLog "Enter some text in external clipboard"
- SetClipboard "Text from external clipboard!"
+ PrintLog " - External Clipboard"
+ PrintLog "Enter some text in external clipboard"
+ SetClipboard "Text from external clipboard!"
- PrintLog "Paste from external clipboard with Edit / Paste in Office"
- hUseAsyncSlot( "EditPaste" )
+ PrintLog "Paste from external clipboard with Edit / Paste in Office"
+ hUseAsyncSlot( "EditPaste" )
- Call wTypeKeys("<Mod1 A>")
- Wait(200)
- hUseAsyncSlot( "EditCopy" )
+ Call wTypeKeys("<Mod1 A>")
+ Wait(200)
+ hUseAsyncSlot( "EditCopy" )
- if GetClipboardText <> "Text from external clipboard!" then
- Warnlog "External Clipboard not available!"
- Warnlog "Is: " & GetClipboardText
- end if
- Call wTypeKeys("<End><Return>")
- SetClipboard ""
- SetClipboard "2nd Text from external clipboard!"
- try
- PrintLog "Edit / Paste / Special"
- hUseAsyncSlot( "EditPasteSpecialWriter" )
-
- Kontext "InhaltEinfuegen"
- if ( InhaltEinfuegen.Exists( 2 ) ) then
- try
- Auswahl.Select 1
- catch
- Warnlog "Unable to select entry in format list !"
- InhaltEinfuegen.Close
- Call hCloseDocument
- goto endsub
- endcatch
- InhaltEinfuegen.OK
- Wait(200)
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- Warnlog "Maybe Bug#109331"
- Warnlog Active.Gettext
- try
- Active.Ok
- catch
- Active.No
- endcatch
- end if
- else
- Call wTypeKeys("<Home><Shift End>")
- hUseAsyncSlot( "EditCopy" )
- if GetClipboardText <> "2nd Text from external clipboard!" then Warnlog "Wrong Text inserted! Is: " & GetClipboardText
+ if GetClipboardText <> "Text from external clipboard!" then
+ Warnlog "External Clipboard not available!"
+ Warnlog "Is: " & GetClipboardText
+ end if
+ Call wTypeKeys("<End><Return>")
+ SetClipboard ""
+ SetClipboard "2nd Text from external clipboard!"
+ try
+ PrintLog "Edit / Paste / Special"
+ hUseAsyncSlot( "EditPasteSpecialWriter" )
+
+ Kontext "InhaltEinfuegen"
+ if ( InhaltEinfuegen.Exists( 2 ) ) then
+ try
+ Auswahl.Select 1
+ catch
+ Warnlog "Unable to select entry in format list !"
+ InhaltEinfuegen.Close
+ Call hCloseDocument
+ goto endsub
+ endcatch
+ InhaltEinfuegen.OK
+ Wait(200)
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ Warnlog "Maybe Bug#109331"
+ Warnlog Active.Gettext
+ try
+ Active.Ok
+ catch
+ Active.No
+ endcatch
end if
else
- Warnlog "Dialog 'Paste Special' is not up!"
+ Call wTypeKeys("<Home><Shift End>")
+ hUseAsyncSlot( "EditCopy" )
+ if GetClipboardText <> "2nd Text from external clipboard!" then Warnlog "Wrong Text inserted! Is: " & GetClipboardText
end if
- catch
- Exceptlog
- endcatch
- end if
+ else
+ Warnlog "Dialog 'Paste Special' is not up!"
+ end if
+ catch
+ Exceptlog
+ endcatch
PrintLog " - Internal Clipboard with StarOffice Writer-Text"
PrintLog "Enter some text in writer and copy it"
@@ -316,11 +315,7 @@ testcase tEditChanges
PrintLog "Passwort-dialog has to come up, cancel it"
Kontext "Passwort"
- if ( Passwort.Exists( 1 ) ) then
- Passwort.Close
- else
- Warnlog "Password-dialog is not up!"
- end if
+ hCloseDialog( Passwort, "close" )
PrintLog "Edit / Changes / Accept or Reject"
EditChangesAcceptOrReject
@@ -368,52 +363,67 @@ endcase
'----------------------------------------------------
testcase tEditCompareDocument
+
PrintLog "- Edit/Compare Document"
- Select Case gApplication
- Case "WRITER"
- Call hNewDocument
- PrintLog "Open new document"
- EditCompareDocumentCalc
- PrintLog "Edit / Compare document"
- Case "MASTERDOCUMENT"
- printlog "Comparing documents not in Masterdocument!"
- goto endsub
- Case "HTML"
- printlog "Comparing documents not in WriterWeb!"
+
+ dim sFile as string
+ sFile = gTesttoolPath & "writer\required\input\bt.sxw"
+
+ if ( gApplication <> "WRITER" ) then
+ printlog( "Test only designed for WRITER, skipping" )
goto endsub
- end select
+ endif
- if gUseSysDlg = False then
- Kontext "OeffnenDlg"
- Dateiname.SetText ConvertPath ( gTesttoolPath & "writer\required\input\bt.sxw" )
- PrintLog "in File-Open-dialog load ..\writer\required\input\bt.sxw"
- Oeffnen.Click
- end if
- Kontext "FilterAuswahl"
- if Filterauswahl.Exists then Filterauswahl.OK
- Sleep 1
- Kontext "Active"
- if Active.Exists then
- Warnlog Active.Gettext
- Active.Ok
- end if
+ call hNewDocument()
+
+ printlog( "Open test document")
+ EditCompareDocumentCalc
+
+ Kontext "OeffnenDlg"
+ printlog( "File Open dialog" )
+ if ( OeffnenDlg.exists( 2 ) ) then
+
+ printlog( "Load file: " & sFile )
+ Dateiname.SetText ConvertPath ( sFile )
+ Oeffnen.Click()
+
+ Kontext "FilterAuswahl"
+ printlog( "Check for filterselection dialog (comes up e.g. if file is broken)" )
+ if Filterauswahl.Exists( 2 ) then
+ warnlog( "Dialog <Filterauswahl> was not expected at this point" )
+ Filterauswahl.OK()
+ else
+ printlog( "No dialog <Filterauswahl>, good" )
+ endif
+
+ Kontext "Active"
+ if Active.Exists( 1 ) then
+ warnlog( "Unexpected messagebox displayed:" )
+ printlog( Active.getText() )
+ Active.Ok()
+ else
+ printlog( "No unexpected messageboxes, good." )
+ endif
- Kontext "Redlining"
- PrintLog "Dialog 'Accept and Reject changes' has to come up"
- if Redlining.Exists then
- TabControl.SetPage TabListe
- wait 200
- Kontext "Redlining"
- TabControl.SetPage TabFilter
Kontext "Redlining"
- Redlining.Close
- PrintLog "Close dialog"
+ PrintLog "Dialog 'Accept and Reject changes' has to come up"
+ if Redlining.Exists( 1 ) then
+ TabControl.SetPage TabListe
+ wait 200
+ Kontext "Redlining"
+ TabControl.SetPage TabFilter
+ Kontext "Redlining"
+ hCloseDialog( Redlining, "close" )
+ else
+ Warnlog "- Dialog 'Redlining' does not exist!"
+ endif
else
- Warnlog "- Dialog 'Redlining' does not exist!"
- end if
+ warnlog( "Dialog <FileOpen> did not open")
+ endif
- Call hCloseDocument
PrintLog "Close active document"
+ Call hCloseDocument
+
endcase
'----------------------------------------------------
@@ -529,24 +539,15 @@ testcase tViewNavigator
Kontext "NavigatorWriter"
Umschalten.Click
- Kontext "NavigatorGlobalDoc"
- Sleep (1)
- printlog " - Bearbeiten"
- try
- Bearbeiten.Click
- catch
- Sleep (2)
- try
- Bearbeiten.Click
- catch
- Warnlog " Either taking more than three seconds to switch Navigator-modes, or something has gone wrong."
- endcatch
- endcatch
- wait (300)
+ Kontext "NavigatorGlobalDoc"
+ printlog( "Click <Edit>" )
+ if ( hClickButton( Bearbeiten ) = -1 ) then
+ warnlog( "Unable to click <Edit> button, cannot switch Navigator-Mode" )
+ endif
Kontext "Navigator"
- Navigator.Close
+ hCloseDialog( Navigator, "close" )
Call hCloseDocument
PrintLog "Close active document"
goto endsub
@@ -680,9 +681,9 @@ testcase tEditAutotext
PrintLog "Click Categories"
Kontext "Autotext"
Bereiche.Click
- Sleep 1
+
Kontext "BereicheBearbeitenAutoText"
- if BereicheBearbeitenAutoText.Exists then
+ if BereicheBearbeitenAutoText.Exists( 2 ) then
DialogTest ( BereicheBearbeitenAutoText )
PrintLog "Create a new categorie"
Bereich.SetText "Hallo"
@@ -695,12 +696,11 @@ testcase tEditAutotext
if Neu.IsEnabled then
Neu.Click
Wait (200)
- if Loeschen.IsEnabled then
- PrintLog "Delete created categorie"
- Loeschen.Click
- else
- Warnlog "- Not able to delete new category. Button disabled!"
- end if
+
+ printlog( "Click <Delete>" )
+ if ( hClickButton( Loeschen ) = -1 ) then
+ warnlog( "Unable to delete category, the button is disabled" )
+ endif
else
if gNetzInst = False then
Warnlog "- Category cannot be created!"
@@ -720,20 +720,19 @@ testcase tEditAutotext
Kontext "PfadeAuswaehlen"
PrintLog "On 'Select Paths' dialog click 'add'"
Hinzufuegen.Click
- wait 200
+
Kontext "OeffnenDlg"
- if OeffnenDlg.Exists then
+ if OeffnenDlg.Exists( 2 ) then
PrintLog "Cancel File-Open dialog"
- OeffnenDlg.Cancel
+ hCloseDialog( OeffnenDlg, "cancel" )
else
Warnlog "Dialog ' Select Paths' not up!"
end if
- wait 200
+
Kontext "PfadeAuswaehlen"
PrintLog "Cancel dialog 'Select Paths'"
- PfadeAuswaehlen.Cancel
+ hCloseDialog( PfadeAuswaehlen, "cancel" )
- Wait (300)
Kontext "AutoText"
PrintLog "We have to create an autotext first"
PrintLog "to assure the 'Autotext'-Button enabled"
@@ -788,6 +787,7 @@ testcase tEditAutotext
Call hCloseDocument
goto endsub
end if
+
printlog "Select created autotext"
EditAutotext
WaitSlot (2000)
@@ -856,14 +856,16 @@ testcase tEditAutotext
exit do
end if
Loop
+
' Dialog needs some time to be opened
Kontext "MakroZuweisen"
- if NOT MakroZuweisen.Exists(5) then
- warnlog "AutoText-Macro - Assign Macro took longer than 5 seconds to load. Check why."
+ printlog( "Close <MakroZuweisen> dialog" )
+ if ( MakroZuweisen.exists( 5 ) ) then
+ call Dialogtest( MakroZuweisen )
+ hCloseDialog( MakroZuweisen, "close" )
else
- PrintLog "Cancel 'Macro' dialog"
- MakroZuweisen.Cancel
- end if
+ warnlog "AutoText-Macro - Assign Macro took longer than 5 seconds to load. Check why."
+ endif
catch
Warnlog "Menu Autotext->'Macro' disabled !"
Call hMenuClose
@@ -922,200 +924,142 @@ endcase
testcase tEditHyperlink
Printlog "- Edit / Hyperlink"
- Call hNewDocument
+
PrintLog "Open new document"
- InsertHyperlink
+ Call hNewDocument
+
PrintLog "Insert / Hyperlink"
- WaitSlot(5000)
- Kontext "Hyperlink"
-
- Call wEinfuegenHyperlink(1)
- Kontext "TabHyperlinkInternet"
- Internet.Check
- ZielUrl.Settext "http://www.sonor.de"
- PrintLog "Enter URL "
- Kontext "Hyperlink"
- PrintLog "Click 'Apply'"
- Uebernehmen.Click
- PrintLog "Close Hyperlink dialog"
- Hyperlink.Close
-
- Call wDocSetContext
- try
- PrintLog "Check if correct URL has been set to document"
- hUseAsyncSlot( "EditCopy" )
+ InsertHyperlink
+
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
+
+ PrintLog "Insert / Hyperlink"
+ Call wEinfuegenHyperlink(1)
+
+ Kontext "TabHyperlinkInternet"
+ printlog( "Check <Internet>" )
+ Internet.Check()
+
+ PrintLog "Enter URL "
+ ZielUrl.Settext "http://www.sonor.de"
+
+ Kontext "Hyperlink"
+ PrintLog "Click 'Apply'"
+ Uebernehmen.Click
+
+ PrintLog "Close Hyperlink dialog"
+ hCloseDialog( Hyperlink, "close" )
+ else
+ warnlog( "Dialog <Hyperlink> did not open" )
+ hCloseDocument()
+ goto endsub
+ endif
+
+ hSetDocumentContext()
+
+ PrintLog "Check if correct URL has been set to document"
+ if ( hUseAsyncSlot( "EditCopy" ) > -1 ) then
if GetClipBoardtext = "" then
Warnlog "No Hyperlink or wrong hyperlink in document!" & GetClipBoardtext
end if
- catch
- Warnlog "No Hyperlink in document!"
- goto endsub
- endcatch
+ else
+ warnlog( "Slot <EditCopy> could not be executed. Most likely the hyperlink was not selected" )
+ endif
PrintLog "Set cursor into link"
Call wTypeKeys("<Left>")
- try
- PrintLog "Edit / Hyperlink has to be enabled"
- EditHyperlink
+
+ PrintLog "Edit / Hyperlink has to be enabled"
+ if ( hUseAsyncSlot( "EditHyperlink" ) > -1 ) then
Kontext "Hyperlink"
- if Hyperlink.Exists then
- Hyperlink.Close
- else
- Warnlog "- Hyperlinkdialog not up"
- end if
- catch
- Warnlog "- Not able to edit Hyperlink!"
- endcatch
+ hCloseDialog( Hyperlink, "close" )
+ else
+ warnlog( "Slot <EditHyperlink> could not be called" )
+ endif
PrintLog "Close active document"
Call hCloseDocument
endcase
-'----------------------------------------------------------------
+' ----------------------------------------------------------------
testcase tEditFields
- PrintLog "- Edit/Fields"
- PrintLog "Open new document"
- Call hNewDocument
+ PrintLog( "Edit/Fields: Edit Fields dialog: " & gApplication )
+ dim iCurrentType as integer
- PrintLog "Select Insert / Fields Other"
- InsertFieldsOther
- Kontext
- Active.Setpage TabDokumentFeldbefehle
- Kontext "TabDokumentFeldbefehle"
- Sleep 1
- PrintLog "Insert Field 'Sender -> Company'"
- Select Case gApplication
- Case "HTML"
- Select case iSprache
- case 01 : Feldtyp.Select 5 'Sender
- Auswahl.Select 1 'Company
- case 03 : Feldtyp.Select 8
- Auswahl.Select 1
- case 07 : Feldtyp.Select 5
- Auswahl.Select 1
- case 31 : Feldtyp.Select 1
- Auswahl.Select 1
- case 33 : Feldtyp.Select 2
- Auswahl.Select 1
- case 34 : Feldtyp.Select 6
- Auswahl.Select 1
- case 36 : Feldtyp.Select 3
- Auswahl.Select 1
- case 39 : Feldtyp.Select 3
- Auswahl.Select 1
- case 45 : Feldtyp.Select 1
- Auswahl.Select 1
- case 46 : Feldtyp.Select 2
- Auswahl.Select 1
- case 48 : Feldtyp.Select 3
- Auswahl.Select 1
- case 49 : Feldtyp.Select 1
- Auswahl.Select 1
- case 51 : Feldtyp.Select 5
- Auswahl.Select 1
- case 52 : Feldtyp.Select 5
- Auswahl.Select 1
- case 55 : Feldtyp.Select 7
- Auswahl.Select 1
- case 81 : Feldtyp.Select 4
- Auswahl.Select 1
- case 82 : Feldtyp.Select 2
- Auswahl.Select 1
- case 84 : Feldtyp.Select 3
- Auswahl.Select 1
- case 86 : Feldtyp.Select 1
- Auswahl.Select 1
- case 88 : Feldtyp.Select 2
- Auswahl.Select 1
-
- case else : Warnlog "Missing language support!"
- TabDokumentFeldbefehle.Cancel
- PrintLog "Close active document"
- Call hCloseDocument
- goto endsub
- end select
- Case else
- Select case iSprache
- case 01 : Feldtyp.Select 6 'Sender
- Auswahl.Select 1 'Company
- case 03 : Feldtyp.Select 9
- Auswahl.Select 1
- case 07 : Feldtyp.Select 6
- Auswahl.Select 1
- case 31 : Feldtyp.Select 1
- Auswahl.Select 1
- case 33 : Feldtyp.Select 3
- Auswahl.Select 1
- case 34 : Feldtyp.Select 8
- Auswahl.Select 1
- case 36 : Feldtyp.Select 4
- Auswahl.Select 1
- case 39 : Feldtyp.Select 4
- Auswahl.Select 1
- case 45 : Feldtyp.Select 1
- Auswahl.Select 1
- case 46 : Feldtyp.Select 2
- Auswahl.Select 1
- case 48 : Feldtyp.Select 3
- Auswahl.Select 1
- case 49 : Feldtyp.Select 1
- Auswahl.Select 1
- case 51 : Feldtyp.Select 6
- Auswahl.Select 1
- case 52 : Feldtyp.Select 6
- Auswahl.Select 1
- case 55 : Feldtyp.Select 9
- Auswahl.Select 1
- case 81 : Feldtyp.Select 5
- Auswahl.Select 1
- case 82 : Feldtyp.Select 2
- Auswahl.Select 2
- case 84 : Feldtyp.Select 5
- Auswahl.Select 1
- case 86 : Feldtyp.Select 1
- Auswahl.Select 1
- case 88 : Feldtyp.Select 2
- Auswahl.Select 1
-
- case else : Warnlog "Missing language support!"
- TabDokumentFeldbefehle.Cancel
- PrintLog "Close active document"
- Call hCloseDocument
- goto endsub
- end select
- end select
-
- Einfuegen.Click
- Wait (400)
- PrintLog "Close Fields dialog"
- Schliessen.Click
-
- PrintLog "Put cursor in front of field"
- Call wTypeKeys("<Home>")
-
- PrintLog "Edit / Fields"
- EditFields
- WaitSlot (2000)
+ PrintLog( "Open new document" )
+ Call hNewDocument()
- Kontext "FeldbefehlBearbeitenDokument"
- Call DialogTest ( FeldbefehlBearbeitenDokument )
+ printlog( "Insert->Field->Other" )
+ hUseAsyncSlot( "InsertFieldsOther" )
- PrintLog "In 'Edit Fields' dialog select 'Edit'"
- if Bearbeiten.IsVisible and Bearbeiten.IsEnabled then
- Bearbeiten.Click
- Kontext "TabBenutzerdaten"
- TabBenutzerdaten.Cancel
- Kontext "FeldbefehlBearbeitenDokument"
+ ' Note that the tabdialog does not have a unique ID yet, so we treat it as "Active"
+ kontext
+ if ( Active.exists( 2 ) ) then
+
+ printlog( "Switch to <Document> tab" )
+ Active.setPage( TabDokumentFeldbefehle )
+
+ kontext "TabDokumentFeldbefehle"
+ printlog( "Select sender item from the user data, insert the field, close the dialog" )
+ if ( TabDokumentFeldbefehle.isVisible() ) then
+
+ ' Search for the sender item in the "Type" listbox by counting the
+ ' number of items in the "Select" box. Only the sender item has
+ ' more than 12 (usually 15) selectable options.
+ ' This is done to make sure that we have an enabled "Edit..." button
+ ' in the "Edit Fields" dialog called later in this test
+ printlog( "Search for suitable field type" )
+ for iCurrentType = 1 to FeldTyp.getItemCount()
+ FeldTyp.select( iCurrentType )
+ if ( Auswahl.isEnabled() and Auswahl.getItemCount() > 12 ) then
+ exit for
+ endif
+ next iCurrentType
+
+ hClickButton( Einfuegen )
+ hCloseDialog( TabDokumentFeldbefehle , "close" )
+
+ PrintLog( "Move cursor infront of field (start of document)" )
+ Call wTypeKeys("<Home>")
+
+ PrintLog( "Edit / Fields" )
+ hUseAsyncSlot( "EditFields" )
+
+ Kontext "FeldbefehlBearbeitenDokument"
+ if ( FeldbefehlBearbeitenDokument.exists( 2 ) ) then
+ Call DialogTest ( FeldbefehlBearbeitenDokument )
+
+ PrintLog( "In 'Edit Fields' dialog select 'Edit'" )
+ hClickButton( Bearbeiten )
+
+ Kontext "TabBenutzerdaten"
+ if ( TabBenutzerdaten.exists( 2 ) ) then
+ printlog( "<TabBenutzerdaten> is open. Good." )
+ call DialogTest( TabBenutzerdaten )
+ hCloseDialog( TabBenutzerdaten, "cancel" )
+ else
+ warnlog( "<TabBenutzerdaten> did not open" )
+ endif
+ else
+ warnlog( "<TabDokumentFeldbefehle> is not visible" )
+ endif
+
+ PrintLog( "Close dialog" )
+ Kontext "FeldbefehlBearbeitenDokument"
+ hCloseDialog( FeldbefehlBearbeitenDokument, "cancel" )
+ else
+ warnlog( "<FeldbefehlBearbeitenDokument> did not open" )
+ endif
else
- Warnlog "Button 'Edit' in Dialog disabled!"
- end if
+ warnlog( "Unable to open <InsertFieldsOther>")
+ endif
+
+ PrintLog( "Close active document" )
+ Call hCloseDocument()
- PrintLog "Close dialog"
- FeldbefehlBearbeitenDokument.Cancel
- PrintLog "Close active document"
- Call hCloseDocument
endcase
'----------------------------------------------------------------
@@ -1203,9 +1147,7 @@ endcase
'----------------------------------------------------------------
testcase tEditIndexEntry
- qaErrorLog "#158646# - Insert Indexes Entry causes crash."
- goto endsub
-
+
PrintLog "- Edit/Index Entry"
if gApplication = "HTML" then
printlog "Not in WriterWeb!"
@@ -1249,53 +1191,66 @@ endcase
testcase tEditLinks
PrintLog "- Edit/Links"
- if gApplication = "HTML" then
+
+ dim sFile as string
+ sFile = gTesttoolPath & "writer\required\input\graphics\jolink.jpg"
+
+ if ( gApplication = "HTML" ) then
printlog "Not in WriterWeb!"
goto endsub
end if
+ printlog( "Open a new document" )
Call hNewDocument
- Call hGrafikVerknuepftEinfuegen ( gTesttoolPath & "writer\required\input\graphics\jolink.jpg" )
- Wait 200
- try
- EditLinksWriter
- catch
+
+ printlog( "Insert graphic file (linked): " & sFile )
+ Call hGrafikVerknuepftEinfuegen ( sFile )
+
+ printlog( "Edit->Links" )
+ if ( hUseAsyncSlot( "EditLinksWriter" ) = -1 ) then
Warnlog "Error on calling Edit / Links ! (disabled)"
Call hCloseDocument
goto endsub
- endcatch
+ endif
Kontext "VerknuepfungenBearbeiten"
- if VerknuepfungenBearbeiten.Exists then
+ if ( VerknuepfungenBearbeiten.Exists( 1 ) ) then
Call DialogTest ( VerknuepfungenBearbeiten )
- Wait 200
- try
- Aendern.Click
+
+ Kontext "VerknuepfungenBearbeiten"
+ printlog( "Click <Change>" )
+ if ( hClickButton( Aendern ) > -1 ) then
Kontext "GrafikEinfuegenDlg"
- GrafikEinfuegenDlg.Cancel
- catch
+ call DialogTest( GrafikEinfuegenDlg )
+ hCloseDialog( GrafikEinfuegenDlg, "cancel" )
+ else
Warnlog "Error modifying the link!"
- endcatch
+ endif
Kontext "VerknuepfungenBearbeiten"
- Wait 200
- try
- Aktualisieren.Click
- catch
+ printlog( "Click <Update>" )
+ if ( hClickButton( Aktualisieren ) = -1 ) then
Warnlog "Error on updating the link!"
- endcatch
- Wait 200
+ endif
- try
- Loesen.Click
+ Kontext "VerknuepfungenBearbeiten"
+ printlog( "Click <Release>" )
+ if ( hClickButton( Loesen ) > -1 ) then
Kontext "Active"
- if Active.Exists then Active.No
- catch
- Warnlog "- Error on breaking the link!"
- endcatch
+ printlog( "Check for confirmation message" )
+ if ( Active.Exists( 1 ) ) then
+ printlog( "Message displayed, good. Closing with <No>" )
+ printlog( Active.getText() )
+ Active.No
+ else
+ Warnlog( "The <Are you sure you want to remove the selected link?> message is missing" )
+ endif
+ else
+ Warnlog( "Unable to break the link to the file" )
+ endif
Kontext "VerknuepfungenBearbeiten"
- VerknuepfungenBearbeiten.Close
+ hCloseDialog( VerknuepfungenBearbeiten, "close" )
else
Warnlog "Dialog Edit / Links not opened!"
end if
@@ -1321,23 +1276,41 @@ endcase
'------------------------------------------------------
testcase tEditImageMap
- PrintLog "- Edit / ImageMap"
+ PrintLog "- Edit / ImageMap"
+
+ dim sFile as string
+ sFile = gTesttoolPath & "writer\required\input\graphics\jolink.jpg"
+
PrintLog "Open new document"
Call hNewDocument
- if hGrafikEinfuegen ( gTesttoolPath & "writer\required\input\graphics\jolink.jpg" )=true then
+ printlog( "Insert graphics file: " & sFile )
+ if ( hGrafikEinfuegen( sFile ) ) then
+
+ printlog( "Edit->Imagemap" )
+ EditImageMap
+
Kontext "ImageMapEditor"
- if ImageMapEditor.Exists then ImageMapEditor.Close
- try
- EditImageMap
- Kontext "ImageMapEditor"
+ if ( ImageMapEditor.exists( 1 ) ) then
Call DialogTest (ImageMapEditor)
- Sleep 1
- ImageMapEditor.Close
- catch
- Warnlog "Edit/ImageMap disabled!"
- endcatch
+ hCloseDialog( ImageMapEditor, "close" )
+
+ printlog( "Check for <Imagemap changed> messagebox (should not appear)" )
+ kontext "Active"
+ if ( Active.exists( 1 ) ) then
+ qaerrorlog( "#i109605# - <imagemap changed> message displayed." )
+ printlog( Active.getText )
+ Active.no()
+ else
+ printlog( "No messagebox on close, good." )
+ endif
+
+ else
+ warnlog( "Dialog <ImageMapEditor> did not open" )
+ endif
+ else
+ warnlog( "Insert graphics failed" )
end if
PrintLog "Close active document"
@@ -1370,103 +1343,6 @@ endcase
'----------------------------------------------------------------
-testcase tHtmlDocEditFields
- PrintLog "- Edit/Fields"
-
- gApplication = "HTML"
- PrintLog "Open new document"
- Call hNewDocument
-
- PrintLog "Select Insert / Fields Other"
- InsertFieldsOther
- Kontext
- Active.Setpage TabDokumentFeldbefehle
- Kontext "TabDokumentFeldbefehle"
- Sleep 1
- PrintLog "Insert Field 'Sender -> Company'"
- Select case iSprache
- case 01 : Feldtyp.Select 5 'Sender
- Auswahl.Select 1 'Company
- case 03 : Feldtyp.Select 8
- Auswahl.Select 1
- case 07 : Feldtyp.Select 5
- Auswahl.Select 1
- case 31 : Feldtyp.Select 1
- Auswahl.Select 1
- case 33 : Feldtyp.Select 2
- Auswahl.Select 1
- case 34 : Feldtyp.Select 6
- Auswahl.Select 1
- case 36 : Feldtyp.Select 3
- Auswahl.Select 1
- case 39 : Feldtyp.Select 3
- Auswahl.Select 1
- case 45 : Feldtyp.Select 1
- Auswahl.Select 1
- case 46 : Feldtyp.Select 2
- Auswahl.Select 1
- case 48 : Feldtyp.Select 3
- Auswahl.Select 1
- case 49 : Feldtyp.Select 1
- Auswahl.Select 1
- case 51 : Feldtyp.Select 5
- Auswahl.Select 1
- case 52 : Feldtyp.Select 5
- Auswahl.Select 1
- case 55 : Feldtyp.Select 7
- Auswahl.Select 1
- case 81 : Feldtyp.Select 4
- Auswahl.Select 1
- case 82 : Feldtyp.Select 2
- Auswahl.Select 1
- case 84 : Feldtyp.Select 3
- Auswahl.Select 1
- case 86 : Feldtyp.Select 1
- Auswahl.Select 1
- case 88 : Feldtyp.Select 2
- Auswahl.Select 1
-
- case else : Warnlog "Missing language support!"
- TabDokumentFeldbefehle.Cancel
- PrintLog "Close active document"
- Call hCloseDocument
- goto endsub
- end select
-
- Einfuegen.Click
- Wait (400)
- PrintLog "Close Fields dialog"
- Schliessen.Click
-
- PrintLog "Put cursor in front of field"
- Call wTypeKeys("<Home>")
-
- PrintLog "Edit / Fields"
- EditFields
- WaitSlot (2000)
-
- Kontext "FeldbefehlBearbeitenDokument"
- Call DialogTest ( FeldbefehlBearbeitenDokument )
-
- PrintLog "In 'Edit Fields' dialog select 'Edit'"
- if Bearbeiten.IsVisible and Bearbeiten.IsEnabled then
- Bearbeiten.Click
- Kontext "TabBenutzerdaten"
- TabBenutzerdaten.Cancel
- Kontext "FeldbefehlBearbeitenDokument"
- else
- Warnlog "Button 'Edit' in Dialog disabled!"
- end if
-
- PrintLog "Close dialog"
- FeldbefehlBearbeitenDokument.Cancel
- PrintLog "Close active document"
- Call hCloseDocument
- gApplication = "WRITER"
-endcase
-
-'----------------------------------------------------------------
-
testcase tMasterDocEditNavigator
printlog "- View/Navigator"
Dim ToolboxOk as boolean
diff --git a/testautomation/writer/required/includes/w_004_.inc b/testautomation/writer/required/includes/w_004_.inc
index 3a4234bfb18a..89e64f23f875 100644..100755
--- a/testautomation/writer/required/includes/w_004_.inc
+++ b/testautomation/writer/required/includes/w_004_.inc
@@ -36,49 +36,24 @@ sub w_004_
printLog Chr(13) + "--------- Insert Menu ( w_004_ ) ----------"
gApplication = "WRITER"
- Call tInsertManualBreak
- Call tInsertFields
-
- Call tInsertFieldsOther
- Call tInsertSpecialCharacter
-
- Call tInsertSection
- Call tInsertHyperlink
-
- Call tInsertFootnote
- Call tInsertCaption
- Call tInsertBookmark
- Call tInsertCrossReference
- Call tInsertComment
- Call tInsertScript
- Call tInsertIndexesEntry
- Call tInsertIndexesIndex
- Call tInsertIndexesBibliographyEntry
-
- Call tInsertEnvelope
-
- Call tInsertFrame
- Call tInsertTable
- Call tInsertHorizontalLine
- Call tInsertGraphicsFromFile
- Call tInsertAllGraphicsFromFile
-
- Call tInsertObjectOLEObject
- Call tInsertObjectPlugIn
- Call tInsertObjectSound
- Call tInsertObjectVideo
- Call tInsertObjectFormula
- Call tInsertObjectChart
- Call tInsertFile
-
- 'Writer Web
- gApplication = "HTML"
- Call tHtmlDocInsertFields
- Call tHtmlDocInsertFieldsOther
- Call tHtmlDocInsertSection
- Call tHtmlDocInsertFrame
- Call tHtmlDocInsertGraphicsFromFile
- gApplication = "WRITER"
+ call tInsertManualBreak
+ call tInsertFields
+ call tInsertFieldsOther
+ call tInsertSpecialCharacter
+ call tInsertSection
+ call tInsertHyperlink
+ call tInsertFootnote
+ call tInsertCaption
+ call tInsertBookmark
+ call tInsertComment
+ call tInsertCrossReference
+ call tInsertScript
+ call tInsertIndexesEntry
+ call tInsertIndexesIndex
+ call tInsertIndexesBibliographyEntry
+ call tInsertEnvelope
+ call tInsertFrame
+ call tInsertTable
end sub
@@ -345,46 +320,53 @@ testcase tInsertHyperlink
printlog "- Internet"
printlog " Insert / Hyperlink"
InsertHyperlink
- printlog " In 'Hyperlink' dialog step through all pages"
- Call wEinfuegenHyperlink(1)
- Call DialogTest ( TabHyperlinkInternet )
- Kontext "Hyperlink"
- printlog "- Mail & News"
- Call wEinfuegenHyperlink(2)
- wait 500
- Call DialogTest ( TabHyperlinkMailUndNews )
+ kontext "HyperlinkDialog"
+ if ( HyperlinkDialog.exists( 2 ) ) then
- Kontext "Hyperlink"
- printlog "- Document"
- Call wEinfuegenHyperlink(3)
- wait 500
- Call DialogTest ( TabHyperlinkDokument )
-
- DateiOeffnen.Click
+ printlog " In 'Hyperlink' dialog step through all pages"
+ Call wEinfuegenHyperlink(1)
+ Call DialogTest ( TabHyperlinkInternet )
+
+ Kontext "Hyperlink"
+ printlog "- Mail & News"
+ Call wEinfuegenHyperlink(2)
+ wait 500
+ Call DialogTest ( TabHyperlinkMailUndNews )
+
+ Kontext "Hyperlink"
+ printlog "- Document"
+ Call wEinfuegenHyperlink(3)
+ wait 500
+ Call DialogTest ( TabHyperlinkDokument )
+
+ DateiOeffnen.Click
- Kontext "OeffnenDlg"
- if ( OeffnenDlg.exists( 1 ) ) then
+ Kontext "OeffnenDlg"
+ if ( OeffnenDlg.exists( 1 ) ) then
+ OeffnenDlg.Cancel
+ else
+ warnlog( "Dialog <OeffnenDlg> is not available" )
+ endif
+
+ Kontext "Hyperlink"
+ printlog "- New Document"
+ Call wEinfuegenHyperlink(4)
+ wait 500
+ Call DialogTest ( TabHyperlinkNeuesDokument )
+
+ Pfad.Click
+ Sleep 1
+ Kontext "OeffnenDlg"
OeffnenDlg.Cancel
+
+ printlog " Close 'Hyperlink' dialog"
+ kontext "HyperlinkDialog"
+ HyperlinkDialog.Close
else
- warnlog( "Dialog <OeffnenDlg> is not available" )
+ warnlog( "Unable to open <HyperlinkDialog>" )
endif
- Kontext "Hyperlink"
- printlog "- New Document"
- Call wEinfuegenHyperlink(4)
- wait 500
- Call DialogTest ( TabHyperlinkNeuesDokument )
-
- Pfad.Click
- Sleep 1
- Kontext "OeffnenDlg"
- OeffnenDlg.Cancel
-
- Kontext "TabHyperlinkNeuesDokument"
- TabHyperlinkNeuesDokument.Cancel
- printlog " Close 'Hyperlink' dialog"
-
printlog " Close active document"
Call hCloseDocument
endcase
@@ -1028,777 +1010,3 @@ testcase tInsertTable
Call hCloseDocument
endcase
-'-----------------------------------------------------------
-
-testcase tInsertHorizontalLine
- PrintLog "- Insert / Horizontal Line"
-
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Horizontal Line"
- InsertHorizontalLine
- Kontext "HorizontaleLinieEinfuegen"
- Call DialogTest (HorizontaleLinieEinfuegen)
- printlog " Close dialog 'Insert Horizontal Ruler'"
- HorizontaleLinieEinfuegen.Cancel
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertGraphicsFromFile
- PrintLog "- Insert / Graphics / From File"
- Dim j as integer
-
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Graphics from file"
- InsertGraphicsFromFile
-
- Kontext "GrafikEinfuegenDlg"
- printlog " Select as graphic to insert: '...\writer\required\input\graphics\jolink.jpg"
- Dateiname.Settext ConvertPath ( gTesttoolPath + "writer\required\input\graphics\jolink.jpg" )
- Oeffnen.Click
-
- Kontext "Active"
- if Active.Exists( 1 ) then
- Warnlog Active.Gettext
- Active.Ok
- Kontext "GrafikEinfuegenDlg"
- GrafikEinfuegenDlg.Cancel
- Call hCloseDocument
- goto endsub
- else
- printlog " select again 'Insert / Grahics from file'"
- InsertGraphicsFromFile
- WaitSlot (2000)
- printlog " Step through all tabpages"
- Kontext
- active.SetPage TabType
- wait 500
- Kontext "TabType"
- Call DialogTest ( TabType )
-
- Kontext
- active.SetPage TabZusaetze
- wait 500
- Kontext "TabZusaetze"
- Call DialogTest ( TabZusaetze )
-
- Kontext
- active.SetPage TabUmlauf
- wait 500
- Kontext "TabUmlauf"
- Call DialogTest ( TabUmlauf )
-
- Kontext
- active.SetPage TabHyperlinkRahmen
- wait 500
- Kontext "TabHyperlinkRahmen"
- Call DialogTest ( TabHyperlinkRahmen )
-
- Kontext
- active.SetPage TabGrafik
- wait 500
- Kontext "TabGrafik"
- Call DialogTest ( TabGrafik )
-
- Kontext
- active.SetPage TabUmrandung
- wait 500
- Kontext "TabUmrandung"
- Call DialogTest ( TabUmrandung )
-
- Kontext
- active.SetPage TabMakro
- ' if no JRE is installed a messagebox appears
- j = 0
- Do
- j = j + 1
- Kontext "Active"
- if Active.Exists() then
- if Active.GetRT = 304 then
- if j = 1 then Warnlog Active.Gettext
- Active.Ok
- else
- exit do
- end if
- else
- exit do
- end if
- Loop
- wait 500
- Kontext "TabMakro"
- Call DialogTest ( TabMakro )
-
- if gApplication <> "HTML" then
- Kontext
- active.SetPage TabZuschneiden
- wait 500
- Kontext "TabZuschneiden"
- Call DialogTest ( TabZuschneiden )
-
- Kontext
- active.SetPage TabHintergrund
- wait 500
- Kontext "TabHintergrund"
- Call DialogTest ( TabHintergrund )
- printlog " Close dialog"
- TabHintergrund.Cancel
- else
- printlog " Close dialog"
- TabMakro.Cancel
- end if
- end if
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertAllGraphicsFromFile
- Dim i as integer
- Dim quellpfad as string
- Dim DieDatei as string
- Dim Ziel( 5000 ) as String
- printlog "Insert / Graphics / From File (all Formats)"
-
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert all graphic formats from directory: global\input\graf_inp\"
- quellpfad = ConvertPath(gtesttoolpath + "global\input\graf_inp\")
-
- GetFileList(quellpfad, "*.*" , Ziel())
- for i=1 to ListCount(Ziel())
- if (gPlatform = "osx") AND (right(ziel(i),3) = "eps") then
- qaerrorlog "#i100253# skipping eps"
- i=i+1
- endif
- printlog "- Graphic: " + Right(Ziel(i),3) + "-Format"
- Call hGrafikEinfuegen ( Ziel(i) )
- Sleep 5
- Call wTypeKeys("<Delete>")
- Call gMouseDoubleClick (10,10)
- Sleep 5
- next i
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertObjectOLEObject
- PrintLog "- Insert / Object / OLE-Objekt"
-
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Object / OLE-Object"
- InsertObjectOLEObject
-
- Kontext "OLEObjektEinfuegen"
- printlog " Check both radiobuttons 'Create now' and 'Create from file'"
- NeuErstellen.Check
- Call DialogTest (OLEObjektEinfuegen, 1)
- AusDateiErstellen.Check
- Call DialogTest (OLEObjektEinfuegen, 2)
- OLEObjektEinfuegen.Cancel
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertObjectPlugIn
- PrintLog "- Insert / Object / Plug-In"
-
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Close 'Plug in' dialog"
- InsertObjectPlugIn
-
- Kontext "PlugInEinfuegen"
- if PlugInEinfuegen.Exists then
- Call DialogTest (PlugInEinfuegen)
- PlugInEinfuegen.Cancel
- else
- Warnlog "Dialog 'Plugin' is not up!"
- end if
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertObjectSound
- Printlog "- Insert / Object / Sound"
- printlog " Open new document"
- Call hNewDocument
-
- try
- if gUseSysDlg = False then
- InsertObjectSound
- printlog " Insert / Object / Sound"
- Kontext "OeffnenDlg"
- if OeffnenDlg.Exists then
- OeffnenDlg.Cancel
- else
- Warnlog "Dialog to insert Sound isn't up!"
- end if
- end if
- catch
- 'Warnlog "- Menu disabled or no Sound-PlugIn installed !?"
- endcatch
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertObjectVideo
- Printlog "- Insert / Object / Video"
-
- printlog " Open new document"
- Call hNewDocument
-
- try
- if gUseSysDlg = False then
- InsertObjectVideo
- printlog " Insert / Object / Video"
- Kontext "OeffnenDlg"
- if OeffnenDlg.Exists then
- OeffnenDlg.Cancel
- else
- Warnlog "Dialog to insert Video isn't up!"
- end if
- end if
- catch
- 'Warnlog "- Menu disabled or no Video-PlugIn installed !?"
- endcatch
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertObjectFormula
- PrintLog "- Insert / Object / Formula"
-
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Object / Formular"
- InsertObjectFormula
- WaitSlot (2000)
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- Warnlog Active.Gettext
- Active.Ok
- end if
- end if
- Sleep 1
-
- printlog " Click in 'Math' document"
- Call gMouseClick(1,1)
- sleep 1
- printlog " 'Delete math-object in document"
- Call wTypeKeys("<Delete>")
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertObjectChart
- PrintLog "- Insert / Object / Chart"
-
- printlog " Open new document"
- Call hNewDocument
- ' Chart-Wizard will be invoked if data ranges exist
- ' Therefor a table will be inserted
- printlog " Insert / Table"
- InsertTableWriter
- Kontext "TabelleEinfuegenWriter"
- TabelleEinfuegenWriter.Ok
-
- printlog " Insert / Object / Chart"
- InsertObjectChart
-
- Kontext "ChartWizard"
- if ChartWizard.Exists then
- printlog "- Chart-Wizard is up=>OK"
- Call DialogTest ( ChartWizard )
- printlog " Cancel Chart-Wizard"
- ChartWizard.Cancel
- else
- warnlog "Chart-Wizard is not up though a table has been inserted"
- end if
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tInsertFile
- PrintLog "- Insert / File"
-
- printlog " Open new document"
- Call hNewDocument
- InsertFileWriter
- WaitSlot( 2000 )
-
- printlog " Insert / File"
- Kontext "OeffnenDlg"
-
- printlog " Check 'File dialog'"
- if OeffnenDlg.Exists( 2 ) then
- Call DialogTest ( OeffnenDlg )
- try
- Standard.Click
- catch
- Exceptlog
- endcatch
-
- Kontext "Active"
- if Active.Exists then
- Warnlog Active.Gettext
- Active.Ok
- else
- Kontext "OeffnenDlg"
- OeffnenDlg.Cancel
- end if
- end if
-
- printlog " Close active document"
- Call hCloseDocument
-endcase
-
-'-----------------------------------------------------------
-
-testcase tHtmlDocInsertFields
- PrintLog "- Insert / Fields"
-
- gApplication = "HTML"
- printlog " Open new document"
- Call hNewDocument
-
- try
- printlog "Insert / Fields / Date"
- InsertFieldsDate
- catch
- Warnlog "Unable to execute: Insert / Fields / Date "
- endcatch
- printlog " Insert / Fields / Date"
- Call wTypeKeys (" <Return>")
- try
- printlog "Insert / Fields / Time"
- InsertFieldsTime
- catch
- Warnlog "Unable to execute: Insert / Fields / Time"
- endcatch
- printlog " Insert / Fields / Time"
- Call wTypeKeys (" <Return>")
- try
- printlog "Insert / Fields / Page Number"
- InsertFieldsPageNumbers
- catch
- Warnlog "Unable to execute: Insert / Fields / Page numbers"
- endcatch
- printlog " Insert / Fields / Page numbers"
- Call wTypeKeys (" <Return>")
- try
- printlog "Insert / Fields / Page Count"
- InsertFieldsPageCount
- catch
- Warnlog "Unable to execute: Insert / Fields / Page Count"
- endcatch
- printlog " Insert / Fields / Page count"
- Call wTypeKeys (" <Return>")
- try
- printlog "Insert / Fields / Title"
- InsertFieldsTitle
- catch
- Warnlog "Unable to execute: Insert / Fields / Title"
- endcatch
- printlog " Insert / Fields / Title"
- Call wTypeKeys (" <Return>")
- try
- printlog "Insert / Fields / Author"
- InsertFieldsAuthor
- catch
- Warnlog "Unable to execute: Insert / Fields / Author"
- endcatch
- printlog " Insert / Fields / Author"
- if gApplication <> "HTML" then
- try
- printlog "Insert / Fields / Subject"
- InsertFieldsSubject
- catch
- Warnlog "Unable to execute: Insert / Fields / Subject"
- endcatch
- printlog " If document not HTML then 'Insert / Fields / Subject"
- Call wTypeKeys (" <Return>")
- printlog " Press key 'enter'"
- end if
-
- printlog " Close active document"
- Call hCloseDocument
- gApplication = "WRITER"
-endcase
-
-'-----------------------------------------------------------
-
-testcase tHtmlDocInsertFieldsOther
- Dim i as integer
- Dim j as integer
- printlog "- Insert / Fields / Other"
-
- gApplication = "HTML"
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Fields / Other"
- InsertFieldsOther
-
- Kontext
- printlog " In dialog step through all tabpages"
- Active.SetPage TabDokumentFeldbefehle
- Kontext "TabDokumentFeldbefehle"
- Call Dialogtest ( TabDokumentFeldbefehle )
-
- Kontext
- Active.SetPage TabDokumentinfoFeldbefehle
- Kontext "TabDokumentinfoFeldbefehle"
- Call Dialogtest ( TabDokumentinfoFeldbefehle )
-
- Kontext
- Active.SetPage TabVariablen
- Kontext "TabVariablen"
- Call Dialogtest ( TabVariablen )
-
- if gApplication <> "HTML" then
- Kontext
- Active.SetPage TabReferenzen
- Kontext "TabReferenzen"
- Call Dialogtest ( TabReferenzen )
-
- Kontext
- Active.SetPage TabFunktionen
- Kontext "TabFunktionen"
- Call Dialogtest ( TabFunktionen )
- for i=1 to Feldtyp.GetItemCount
- Feldtyp.Select i
- if MakroButton.IsEnabled then
- MakroButton.Click
- ' if no JRE is installed a messagebox appears
- Do
- j = j + 1
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- if j = 1 then Warnlog Active.Gettext
- Active.Ok
- else
- exit do
- end if
- else
- exit do
- end if
- Loop
-
- Kontext "ScriptSelector"
- if ( ScriptSelector.exists( 3 ) ) then
- ScriptSelector.Close
- else
- warnlog( "Dialog <ScriptSelector> is not available" )
- endif
- Kontext "TabFunktionen"
- i=100
- end if
- next i
-
- Kontext
- Active.SetPage TabDatenbank
- Kontext "TabDatenbank"
- Call Dialogtest ( TabDatenbank )
-
- printlog " Close dialog"
- TabDatenbank.Close
- else
- printlog " Close dialog"
- TabVariablen.Close
- end if
- printlog " Close active document"
- Call hCloseDocument
- gApplication = "WRITER"
-endcase
-
-'-----------------------------------------------------------
-
-testcase tHtmlDocInsertSection
- PrintLog "- Insert / Section"
-
- gApplication = "HTML"
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Section"
- InsertSection
- Kontext
-
- printlog " In dialog step through all tabpages"
- printlog "- Tabpage Section"
- Active.Setpage TabBereiche
- Kontext "TabBereiche"
- Call DialogTest (TabBereiche)
- Verknuepfung.Check
-
- Auswaehlen.Click
- Kontext "OeffnenDlg"
- if ( OeffnenDlg.exists( 1 ) ) then
- OeffnenDlg.Cancel
- else
- warnlog( "Dialog <OeffnenDlg> is not available" )
- endif
-
- Wait 500
- Kontext
- printlog "- Tabpage Columns"
- Active.Setpage TabSpalten
- Kontext "TabSpalten"
- Call DialogTest (TabSpalten)
-
- Kontext
- printlog "- Tabpage Background"
- Active.Setpage TabHintergrund
- Kontext "TabHintergrund"
- Call DialogTest (TabHintergrund)
-
- if gApplication <> "HTML" then
- printlog "Tabpage Indents"
- Kontext
- Active.Setpage TabSectionIndent
- Kontext "TabSectionIndent"
- Call DialogTest (TabSectionIndent)
-
- printlog "- Tabpage Footnotes/Endnotes"
- Kontext
- Active.Setpage TabFussEndnoten
- Kontext "TabFussEndnoten"
- Call DialogTest (TabFussEndnoten)
- TabFussEndnoten.Cancel
- else
- TabHintergrund.Cancel
- end if
- printlog " Close active document"
- Call hCloseDocument
- gApplication = "WRITER"
-endcase
-
-'-----------------------------------------------------------
-
-testcase tHtmlDocInsertFrame
- PrintLog "- Insert / Frame"
-
- gApplication = "HTML"
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Frame"
- InsertFrame
- WaitSlot (2000)
-
- printlog " Step through all tabpages"
- Kontext
- active.SetPage TabType
- Kontext "TabType"
- Call DialogTest (TabType)
- Sleep 1
-
- Kontext
- active.SetPage TabZusaetze
- Kontext "TabZusaetze"
- Call DialogTest (TabZusaetze)
- Sleep 1
-
- Kontext
- active.SetPage TabUmlauf
- Kontext "TabUmlauf"
- Call DialogTest (TabUmlauf)
- Sleep 1
-
- Kontext
- active.SetPage TabUmrandung
- Kontext "TabUmrandung"
- Call DialogTest (TabUmrandung)
- Sleep 1
-
- Kontext
- active.SetPage TabHintergrund
- Kontext "TabHintergrund"
- Call DialogTest (TabHintergrund, 1)
- Sleep 1
- try
- Als.Select (2)
- Call DialogTest (TabHintergrund, 2)
- Sleep 1
- catch
- Warnlog "Maybe missing combobox! (#i29517)"
- endcatch
-
- if gApplication <> "HTML" then
- Kontext
- active.SetPage TabHyperlinkRahmen
- Kontext "TabHyperlinkRahmen"
- Call DialogTest (TabHyperlinkRahmen)
- Durchsuchen.Click
-
- if gUSeSysDlg = False then
- Kontext "OeffnenDlg"
- OeffnenDlg.Cancel
- end if
-
- Kontext
- active.SetPage TabSpalten
- Kontext "TabSpalten"
- Call DialogTest (TabSpalten)
- printlog " Close dialog"
- TabSpalten.Cancel
- else
- printlog " Close dialog"
- TabHintergrund.Cancel
- end if
-
- printlog " Close active document"
- Call hCloseDocument
- gApplication = "WRITER"
-endcase
-
-'-----------------------------------------------------------
-
-testcase tHtmlDocInsertGraphicsFromFile
- PrintLog "- Insert / Graphics / From File"
- Dim j as integer
-
- gApplication = "HTML"
- printlog " Open new document"
- Call hNewDocument
-
- printlog " Insert / Graphics from file"
- InsertGraphicsFromFile
-
- Kontext "GrafikEinfuegenDlg"
- printlog " Select as graphic to insert: '...\writer\required\input\graphics\jolink.jpg"
- Dateiname.Settext ConvertPath ( gTesttoolPath + "writer\required\input\graphics\jolink.jpg" )
- Oeffnen.Click
-
- Kontext "Active"
- if Active.Exists( 1 ) then
- Warnlog Active.Gettext
- Active.Ok
- Kontext "GrafikEinfuegenDlg"
- GrafikEinfuegenDlg.Cancel
- Call hCloseDocument
- goto endsub
- else
- printlog " select again 'Insert / Grahics from file'"
- InsertGraphicsFromFile
- WaitSlot (2000)
- printlog " Step through all tabpages"
- Kontext
- active.SetPage TabType
- wait 500
- Kontext "TabType"
- Call DialogTest ( TabType )
-
- Kontext
- active.SetPage TabZusaetze
- wait 500
- Kontext "TabZusaetze"
- Call DialogTest ( TabZusaetze )
-
- Kontext
- active.SetPage TabUmlauf
- wait 500
- Kontext "TabUmlauf"
- Call DialogTest ( TabUmlauf )
-
- Kontext
- active.SetPage TabHyperlinkRahmen
- wait 500
- Kontext "TabHyperlinkRahmen"
- Call DialogTest ( TabHyperlinkRahmen )
-
- Kontext
- active.SetPage TabGrafik
- wait 500
- Kontext "TabGrafik"
- Call DialogTest ( TabGrafik )
-
- Kontext
- active.SetPage TabUmrandung
- wait 500
- Kontext "TabUmrandung"
- Call DialogTest ( TabUmrandung )
-
- Kontext
- active.SetPage TabMakro
- ' if no JRE is installed a messagebox appears
- j = 0
- Do
- j = j + 1
- Kontext "Active"
- if Active.Exists then
- if Active.GetRT = 304 then
- if j = 1 then Warnlog Active.Gettext
- Active.Ok
- else
- exit do
- end if
- else
- exit do
- end if
- Loop
- wait 500
- Kontext "TabMakro"
- Call DialogTest ( TabMakro )
-
- if gApplication <> "HTML" then
- Kontext
- active.SetPage TabZuschneiden
- wait 500
- Kontext "TabZuschneiden"
- Call DialogTest ( TabZuschneiden )
-
- Kontext
- active.SetPage TabHintergrund
- wait 500
- Kontext "TabHintergrund"
- Call DialogTest ( TabHintergrund )
- printlog " Close dialog"
- TabHintergrund.Cancel
- else
- printlog " Close dialog"
- TabMakro.Cancel
- end if
- end if
-
- printlog " Close active document"
- Call hCloseDocument
- gApplication = "WRITER"
-endcase
-
-'-----------------------------------------------------------
diff --git a/testautomation/writer/required/includes/w_004b_.inc b/testautomation/writer/required/includes/w_004b_.inc
new file mode 100644
index 000000000000..3769ee9ee1ae
--- /dev/null
+++ b/testautomation/writer/required/includes/w_004b_.inc
@@ -0,0 +1,965 @@
+'encoding UTF-8 Do not remove or change this line!
+'**************************************************************************
+' DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+'
+' Copyright 2000, 2010 Oracle and/or its affiliates.
+'
+' OpenOffice.org - a multi-platform office productivity suite
+'
+' 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.
+'
+'/************************************************************************
+'*
+'* owner : Helge.Delfs@Sun.Com
+'*
+'* short description : Testcases with connection to the Insert-menu part II.
+'*
+'\***********************************************************************
+
+sub w_004b_
+
+ printLog Chr(13) + "--------- Insert Menu ( w_004_ ) ----------"
+
+ gApplication = "WRITER"
+ call tInsertHorizontalLine
+ call tInsertGraphicsFromFile
+ call tInsertAllGraphicsFromFile
+ call tInsertObjectOLEObject
+ call tInsertObjectPlugIn
+ call tInsertObjectSound
+ call tInsertObjectVideo
+ call tInsertObjectFormula
+ call tInsertObjectChart
+ call tInsertFile
+
+ gApplication = "HTML"
+ call tHtmlDocInsertFields
+ call tHtmlDocInsertFieldsOther
+ call tHtmlDocInsertSection
+ call tHtmlDocInsertFrame
+ call tHtmlDocInsertGraphicsFromFile
+ gApplication = "WRITER"
+
+end sub
+
+testcase tInsertHorizontalLine
+ PrintLog "- Insert / Horizontal Line"
+
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Horizontal Line"
+ InsertHorizontalLine
+ Kontext "HorizontaleLinieEinfuegen"
+ Call DialogTest (HorizontaleLinieEinfuegen)
+ printlog " Close dialog 'Insert Horizontal Ruler'"
+ HorizontaleLinieEinfuegen.Cancel
+
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertGraphicsFromFile
+ PrintLog "- Insert / Graphics / From File"
+ Dim j as integer
+
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Graphics from file"
+ InsertGraphicsFromFile
+
+ Kontext "GrafikEinfuegenDlg"
+ printlog " Select as graphic to insert: '...\writer\required\input\graphics\jolink.jpg"
+ Dateiname.Settext ConvertPath ( gTesttoolPath + "writer\required\input\graphics\jolink.jpg" )
+ Oeffnen.Click
+
+ Kontext "Active"
+ if Active.Exists( 1 ) then
+ Warnlog Active.Gettext
+ Active.Ok
+ Kontext "GrafikEinfuegenDlg"
+ GrafikEinfuegenDlg.Cancel
+ Call hCloseDocument
+ goto endsub
+ else
+ printlog " select again 'Insert / Grahics from file'"
+ InsertGraphicsFromFile
+ WaitSlot (2000)
+ printlog " Step through all tabpages"
+ Kontext
+ active.SetPage TabType
+ wait 500
+ Kontext "TabType"
+ Call DialogTest ( TabType )
+
+ Kontext
+ active.SetPage TabZusaetze
+ wait 500
+ Kontext "TabZusaetze"
+ Call DialogTest ( TabZusaetze )
+
+ Kontext
+ active.SetPage TabUmlauf
+ wait 500
+ Kontext "TabUmlauf"
+ Call DialogTest ( TabUmlauf )
+
+ Kontext
+ active.SetPage TabHyperlinkRahmen
+ wait 500
+ Kontext "TabHyperlinkRahmen"
+ Call DialogTest ( TabHyperlinkRahmen )
+
+ Kontext
+ active.SetPage TabGrafik
+ wait 500
+ Kontext "TabGrafik"
+ Call DialogTest ( TabGrafik )
+
+ Kontext
+ active.SetPage TabUmrandung
+ wait 500
+ Kontext "TabUmrandung"
+ Call DialogTest ( TabUmrandung )
+
+ Kontext
+ active.SetPage TabMakro
+ ' if no JRE is installed a messagebox appears
+ j = 0
+ Do
+ j = j + 1
+ Kontext "Active"
+ if Active.Exists() then
+ if Active.GetRT = 304 then
+ if j = 1 then Warnlog Active.Gettext
+ Active.Ok
+ else
+ exit do
+ end if
+ else
+ exit do
+ end if
+ Loop
+ wait 500
+ Kontext "TabMakro"
+ Call DialogTest ( TabMakro )
+
+ if gApplication <> "HTML" then
+ Kontext
+ active.SetPage TabZuschneiden
+ wait 500
+ Kontext "TabZuschneiden"
+ Call DialogTest ( TabZuschneiden )
+
+ Kontext
+ active.SetPage TabHintergrund
+ wait 500
+ Kontext "TabHintergrund"
+ Call DialogTest ( TabHintergrund )
+ printlog " Close dialog"
+ TabHintergrund.Cancel
+ else
+ printlog " Close dialog"
+ TabMakro.Cancel
+ end if
+ end if
+
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertAllGraphicsFromFile
+
+ printlog( "Load files of all known graphics formats" )
+
+ dim iCurrentFile as integer
+ dim GraphicFile as String
+ dim Filtername as String
+
+ printlog( "Insert a sample of commonly used file formats into a writer document (not linked)" )
+
+ gApplication = "WRITER"
+ Call hNewDocument
+
+ for iCurrentFile = 1 to 25
+
+ ' MODIFY and ENABLE this SAMPLE snippet to exclude one fileformat from testing
+ ' if ( iCurrentFile = 7 ) AND (gtPlatform="x86") then
+ ' qaErrorLog("#<issue-id># crash on <platform> on loading <image-file>")
+ ' goto skipformat
+ ' endif
+ ' Note: Can be locale dependent!
+ if (iCurrentFile = 4) AND (gPlatform="osx") then
+ qaerrorlog("#i100253# crash on MacOS X on loading ball.eps")
+ goto skipformat
+ endif
+
+ Kontext "GrafikEinfuegenDlg"
+ if ( not GrafikEinfuegenDlg.exists() ) then
+ InsertGraphicsFromFile
+ Kontext "GrafikEinfuegenDlg"
+ endif
+
+ if ( GrafikEinfuegenDlg.Exists( 2 ) ) then
+ ' the list of files expected to be found in the samples directory
+ select case iCurrentFile
+ case 1 : GraphicFile = "desp.bmp"
+ case 2 : GraphicFile = "columbia.dxf"
+ case 3 : GraphicFile = "extrud.emf"
+ case 4 : GraphicFile = "ball.eps"
+ case 5 : GraphicFile = "airshw.met"
+ case 6 : GraphicFile = "eface.gif"
+ case 7 : GraphicFile = "purzel.gif" ' Animated Gif
+ case 8 : GraphicFile = "borabora.jpg"
+ case 9 : GraphicFile = "grafix1.pbm"
+ case 10 : GraphicFile = "circle.pcx"
+ case 11 : GraphicFile = "papagei1.pcd"
+ case 12 : GraphicFile = "newtonme.pct"
+ case 13 : GraphicFile = "grafix2.pgm"
+ case 14 : GraphicFile = "obst.png"
+ case 15 : GraphicFile = "london.ppm"
+ case 16 : GraphicFile = "tiger.psd"
+ case 17 : GraphicFile = "grafix3.ras"
+ case 18 : GraphicFile = "mickym.sgf"
+ case 19 : GraphicFile = "faxpfeil.sgv"
+ case 20 : GraphicFile = "picture.svm"
+ case 21 : GraphicFile = "pilz.tga"
+ case 22 : GraphicFile = "stabler.tif"
+ case 23 : GraphicFile = "krokodil.wmf"
+ case 24 : GraphicFile = "grafix4.xbm"
+ case 25 : GraphicFile = "papagei2.xpm"
+ end select
+
+ GraphicFile = ConvertPath (gTesttoolPath & "global\input\graf_inp\" & GraphicFile)
+ printlog( "Current file " + iCurrentFile + ": " & GraphicFile )
+ printlog( " * Set filter to <All formats>" )
+ DateiName.SetText( GraphicFile )
+ DateiTyp.Select( 1 )
+ WaitSlot()
+
+ printlog( " * Uncheck Preview- and Link-checkbox, load the file" )
+ Vorschau.unCheck
+ Verknuepfen.unCheck()
+ Oeffnen.click()
+ WaitSlot( 2000 )
+
+ Kontext "Active"
+ if ( Active.Exists() ) then
+ Warnlog( "Unexpected messagebox: " & Active.GetText() )
+ Warnlog( "Affected file: " & GraphicFile )
+ Active.OK
+ else
+ try
+ EditCopy
+ WaitSlot( 2000 )
+ EditDeleteContents
+ WaitSlot( 2000 )
+ catch
+ Warnlog( "Graphic file not selected/Copy or Delete is disabled: " & GraphicFile )
+ gMouseClick (90, 90)
+ endcatch
+ endif
+ else
+ warnlog( "Insert Graphics Dialog is not open, aborting" )
+ goto endsub
+ endif
+
+ skipformat:
+ next iCurrentFile
+
+ printlog( "" )
+ printlog( "Test the PCD-Filters directly (3 samples)" )
+
+ for iCurrentFile = 1 to 3
+
+ printlog( "" )
+
+ Kontext "GrafikEinfuegenDlg"
+ if ( not GrafikEinfuegenDlg.exists() ) then
+ InsertGraphicsFromFile
+ Kontext "GrafikEinfuegenDlg"
+ endif
+
+ if ( GrafikEinfuegenDlg.exists( 2 ) ) then
+
+ select case iCurrentFile
+ case 1 : Filtername = "PCD - Kodak Photo CD (768x512) (*.pcd)"
+ case 2 : Filtername = "PCD - Kodak Photo CD (384x256) (*.pcd)"
+ case 3 : Filtername = "PCD - Kodak Photo CD (192x128) (*.pcd)"
+ end select
+
+ GraphicFile = ConvertPath( gTesttoolPath & "global\input\graf_inp\papagei1.pcd" )
+
+ printlog( "Current filter: " & Filtername )
+ printlog( "Current file..: " & GraphicFile )
+ DateiName.SetText ( GraphicFile )
+ DateiTyp.Select( Filtername )
+
+ printlog( " * Uncheck Preview- and Link-checkbox, load the file" )
+ Vorschau.Uncheck()
+ Verknuepfen.unCheck()
+ Oeffnen.click()
+ WaitSlot( 2000 )
+
+ Kontext "Active"
+ if ( Active.Exists() )then
+ Warnlog( "Unexpected messagebox: " & Active.GetText() )
+ Warnlog( "Affected file..: " & GraphicFile )
+ Warnlog( "Affected filter: " & Filtername )
+ Active.OK()
+ else
+ try
+ EditCopy
+ WaitSlot( 2000 )
+ EditDeleteContents
+ WaitSlot( 2000 )
+ catch
+ Warnlog( "Problems with filtertype : " & Filtername )
+ gMouseClick (90, 90)
+ endcatch
+ endif
+ else
+ warnlog( "Insert Graphics Dialog is not open. Aborting" )
+ goto endsub
+ endif
+
+ next iCurrentFile
+
+ Kontext "GrafikEinfuegenDlg"
+ if GrafikEinfuegenDlg.Exists then
+ GrafikEinfuegenDlg.Cancel
+ endif
+
+ Call hCloseDocument
+
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertObjectOLEObject
+ PrintLog "- Insert / Object / OLE-Objekt"
+
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Object / OLE-Object"
+ InsertObjectOLEObject
+
+ Kontext "OLEObjektEinfuegen"
+ printlog " Check both radiobuttons 'Create now' and 'Create from file'"
+ NeuErstellen.Check
+ Call DialogTest (OLEObjektEinfuegen, 1)
+ AusDateiErstellen.Check
+ Call DialogTest (OLEObjektEinfuegen, 2)
+ OLEObjektEinfuegen.Cancel
+
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertObjectPlugIn
+ PrintLog "- Insert / Object / Plug-In"
+
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Close 'Plug in' dialog"
+ InsertObjectPlugIn
+
+ Kontext "PlugInEinfuegen"
+ if PlugInEinfuegen.Exists then
+ Call DialogTest (PlugInEinfuegen)
+ PlugInEinfuegen.Cancel
+ else
+ Warnlog "Dialog 'Plugin' is not up!"
+ end if
+
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertObjectSound
+ Printlog "- Insert / Object / Sound"
+ printlog " Open new document"
+ Call hNewDocument
+
+ try
+ if gUseSysDlg = False then
+ InsertObjectSound
+ printlog " Insert / Object / Sound"
+ Kontext "OeffnenDlg"
+ if OeffnenDlg.Exists then
+ OeffnenDlg.Cancel
+ else
+ Warnlog "Dialog to insert Sound isn't up!"
+ end if
+ end if
+ catch
+ 'Warnlog "- Menu disabled or no Sound-PlugIn installed !?"
+ endcatch
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertObjectVideo
+ Printlog "- Insert / Object / Video"
+
+ printlog " Open new document"
+ Call hNewDocument
+
+ try
+ if gUseSysDlg = False then
+ InsertObjectVideo
+ printlog " Insert / Object / Video"
+ Kontext "OeffnenDlg"
+ if OeffnenDlg.Exists then
+ OeffnenDlg.Cancel
+ else
+ Warnlog "Dialog to insert Video isn't up!"
+ end if
+ end if
+ catch
+ 'Warnlog "- Menu disabled or no Video-PlugIn installed !?"
+ endcatch
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertObjectFormula
+ PrintLog "- Insert / Object / Formula"
+
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Object / Formular"
+ InsertObjectFormula
+ WaitSlot (2000)
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ Warnlog Active.Gettext
+ Active.Ok
+ end if
+ end if
+ Sleep 1
+
+ printlog " Click in 'Math' document"
+ Call gMouseClick(1,1)
+ sleep 1
+ printlog " 'Delete math-object in document"
+ Call wTypeKeys("<Delete>")
+
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertObjectChart
+ PrintLog "- Insert / Object / Chart"
+
+ printlog " Open new document"
+ Call hNewDocument
+ ' Chart-Wizard will be invoked if data ranges exist
+ ' Therefor a table will be inserted
+ printlog " Insert / Table"
+ InsertTableWriter
+ Kontext "TabelleEinfuegenWriter"
+ TabelleEinfuegenWriter.Ok
+
+ printlog " Insert / Object / Chart"
+ InsertObjectChart
+
+ Kontext "ChartWizard"
+ if ChartWizard.Exists then
+ printlog "- Chart-Wizard is up=>OK"
+ Call DialogTest ( ChartWizard )
+ printlog " Cancel Chart-Wizard"
+ ChartWizard.Cancel
+ else
+ warnlog "Chart-Wizard is not up though a table has been inserted"
+ end if
+
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tInsertFile
+ PrintLog "- Insert / File"
+
+ printlog " Open new document"
+ Call hNewDocument
+ InsertFileWriter
+ WaitSlot( 2000 )
+
+ printlog " Insert / File"
+ Kontext "OeffnenDlg"
+
+ printlog " Check 'File dialog'"
+ if OeffnenDlg.Exists( 2 ) then
+ Call DialogTest ( OeffnenDlg )
+ try
+ Standard.Click
+ catch
+ Exceptlog
+ endcatch
+
+ Kontext "Active"
+ if Active.Exists then
+ Warnlog Active.Gettext
+ Active.Ok
+ else
+ Kontext "OeffnenDlg"
+ OeffnenDlg.Cancel
+ end if
+ end if
+
+ printlog " Close active document"
+ Call hCloseDocument
+endcase
+
+'-----------------------------------------------------------
+
+testcase tHtmlDocInsertFields
+ PrintLog "- Insert / Fields"
+
+ gApplication = "HTML"
+ printlog " Open new document"
+ Call hNewDocument
+
+ try
+ printlog "Insert / Fields / Date"
+ InsertFieldsDate
+ catch
+ Warnlog "Unable to execute: Insert / Fields / Date "
+ endcatch
+ printlog " Insert / Fields / Date"
+ Call wTypeKeys (" <Return>")
+ try
+ printlog "Insert / Fields / Time"
+ InsertFieldsTime
+ catch
+ Warnlog "Unable to execute: Insert / Fields / Time"
+ endcatch
+ printlog " Insert / Fields / Time"
+ Call wTypeKeys (" <Return>")
+ try
+ printlog "Insert / Fields / Page Number"
+ InsertFieldsPageNumbers
+ catch
+ Warnlog "Unable to execute: Insert / Fields / Page numbers"
+ endcatch
+ printlog " Insert / Fields / Page numbers"
+ Call wTypeKeys (" <Return>")
+ try
+ printlog "Insert / Fields / Page Count"
+ InsertFieldsPageCount
+ catch
+ Warnlog "Unable to execute: Insert / Fields / Page Count"
+ endcatch
+ printlog " Insert / Fields / Page count"
+ Call wTypeKeys (" <Return>")
+ try
+ printlog "Insert / Fields / Title"
+ InsertFieldsTitle
+ catch
+ Warnlog "Unable to execute: Insert / Fields / Title"
+ endcatch
+ printlog " Insert / Fields / Title"
+ Call wTypeKeys (" <Return>")
+ try
+ printlog "Insert / Fields / Author"
+ InsertFieldsAuthor
+ catch
+ Warnlog "Unable to execute: Insert / Fields / Author"
+ endcatch
+ printlog " Insert / Fields / Author"
+ if gApplication <> "HTML" then
+ try
+ printlog "Insert / Fields / Subject"
+ InsertFieldsSubject
+ catch
+ Warnlog "Unable to execute: Insert / Fields / Subject"
+ endcatch
+ printlog " If document not HTML then 'Insert / Fields / Subject"
+ Call wTypeKeys (" <Return>")
+ printlog " Press key 'enter'"
+ end if
+
+ printlog " Close active document"
+ Call hCloseDocument
+ gApplication = "WRITER"
+endcase
+
+'-----------------------------------------------------------
+
+testcase tHtmlDocInsertFieldsOther
+ Dim i as integer
+ Dim j as integer
+ printlog "- Insert / Fields / Other"
+
+ gApplication = "HTML"
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Fields / Other"
+ InsertFieldsOther
+
+ Kontext
+ printlog " In dialog step through all tabpages"
+ Active.SetPage TabDokumentFeldbefehle
+ Kontext "TabDokumentFeldbefehle"
+ Call Dialogtest ( TabDokumentFeldbefehle )
+
+ Kontext
+ Active.SetPage TabDokumentinfoFeldbefehle
+ Kontext "TabDokumentinfoFeldbefehle"
+ Call Dialogtest ( TabDokumentinfoFeldbefehle )
+
+ Kontext
+ Active.SetPage TabVariablen
+ Kontext "TabVariablen"
+ Call Dialogtest ( TabVariablen )
+
+ if gApplication <> "HTML" then
+ Kontext
+ Active.SetPage TabReferenzen
+ Kontext "TabReferenzen"
+ Call Dialogtest ( TabReferenzen )
+
+ Kontext
+ Active.SetPage TabFunktionen
+ Kontext "TabFunktionen"
+ Call Dialogtest ( TabFunktionen )
+ for i=1 to Feldtyp.GetItemCount
+ Feldtyp.Select i
+ if MakroButton.IsEnabled then
+ MakroButton.Click
+ ' if no JRE is installed a messagebox appears
+ Do
+ j = j + 1
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ if j = 1 then Warnlog Active.Gettext
+ Active.Ok
+ else
+ exit do
+ end if
+ else
+ exit do
+ end if
+ Loop
+
+ Kontext "ScriptSelector"
+ if ( ScriptSelector.exists( 3 ) ) then
+ ScriptSelector.Close
+ else
+ warnlog( "Dialog <ScriptSelector> is not available" )
+ endif
+ Kontext "TabFunktionen"
+ i=100
+ end if
+ next i
+
+ Kontext
+ Active.SetPage TabDatenbank
+ Kontext "TabDatenbank"
+ Call Dialogtest ( TabDatenbank )
+
+ printlog " Close dialog"
+ TabDatenbank.Close
+ else
+ printlog " Close dialog"
+ TabVariablen.Close
+ end if
+ printlog " Close active document"
+ Call hCloseDocument
+ gApplication = "WRITER"
+endcase
+
+'-----------------------------------------------------------
+
+testcase tHtmlDocInsertSection
+ PrintLog "- Insert / Section"
+
+ gApplication = "HTML"
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Section"
+ InsertSection
+ Kontext
+
+ printlog " In dialog step through all tabpages"
+ printlog "- Tabpage Section"
+ Active.Setpage TabBereiche
+ Kontext "TabBereiche"
+ Call DialogTest (TabBereiche)
+ Verknuepfung.Check
+
+ Auswaehlen.Click
+ Kontext "OeffnenDlg"
+ if ( OeffnenDlg.exists( 1 ) ) then
+ OeffnenDlg.Cancel
+ else
+ warnlog( "Dialog <OeffnenDlg> is not available" )
+ endif
+
+ Wait 500
+ Kontext
+ printlog "- Tabpage Columns"
+ Active.Setpage TabSpalten
+ Kontext "TabSpalten"
+ Call DialogTest (TabSpalten)
+
+ Kontext
+ printlog "- Tabpage Background"
+ Active.Setpage TabHintergrund
+ Kontext "TabHintergrund"
+ Call DialogTest (TabHintergrund)
+
+ if gApplication <> "HTML" then
+ printlog "Tabpage Indents"
+ Kontext
+ Active.Setpage TabSectionIndent
+ Kontext "TabSectionIndent"
+ Call DialogTest (TabSectionIndent)
+
+ printlog "- Tabpage Footnotes/Endnotes"
+ Kontext
+ Active.Setpage TabFussEndnoten
+ Kontext "TabFussEndnoten"
+ Call DialogTest (TabFussEndnoten)
+ TabFussEndnoten.Cancel
+ else
+ TabHintergrund.Cancel
+ end if
+ printlog " Close active document"
+ Call hCloseDocument
+ gApplication = "WRITER"
+endcase
+
+'-----------------------------------------------------------
+
+testcase tHtmlDocInsertFrame
+ PrintLog "- Insert / Frame"
+
+ gApplication = "HTML"
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Frame"
+ InsertFrame
+ WaitSlot (2000)
+
+ printlog " Step through all tabpages"
+ Kontext
+ active.SetPage TabType
+ Kontext "TabType"
+ Call DialogTest (TabType)
+ Sleep 1
+
+ Kontext
+ active.SetPage TabZusaetze
+ Kontext "TabZusaetze"
+ Call DialogTest (TabZusaetze)
+ Sleep 1
+
+ Kontext
+ active.SetPage TabUmlauf
+ Kontext "TabUmlauf"
+ Call DialogTest (TabUmlauf)
+ Sleep 1
+
+ Kontext
+ active.SetPage TabUmrandung
+ Kontext "TabUmrandung"
+ Call DialogTest (TabUmrandung)
+ Sleep 1
+
+ Kontext
+ active.SetPage TabHintergrund
+ Kontext "TabHintergrund"
+ Call DialogTest (TabHintergrund, 1)
+ Sleep 1
+ try
+ Als.Select (2)
+ Call DialogTest (TabHintergrund, 2)
+ Sleep 1
+ catch
+ Warnlog "Maybe missing combobox! (#i29517)"
+ endcatch
+
+ if gApplication <> "HTML" then
+ Kontext
+ active.SetPage TabHyperlinkRahmen
+ Kontext "TabHyperlinkRahmen"
+ Call DialogTest (TabHyperlinkRahmen)
+ Durchsuchen.Click
+
+ if gUSeSysDlg = False then
+ Kontext "OeffnenDlg"
+ OeffnenDlg.Cancel
+ end if
+
+ Kontext
+ active.SetPage TabSpalten
+ Kontext "TabSpalten"
+ Call DialogTest (TabSpalten)
+ printlog " Close dialog"
+ TabSpalten.Cancel
+ else
+ printlog " Close dialog"
+ TabHintergrund.Cancel
+ end if
+
+ printlog " Close active document"
+ Call hCloseDocument
+ gApplication = "WRITER"
+endcase
+
+'-----------------------------------------------------------
+
+testcase tHtmlDocInsertGraphicsFromFile
+ PrintLog "- Insert / Graphics / From File"
+ Dim j as integer
+
+ gApplication = "HTML"
+ printlog " Open new document"
+ Call hNewDocument
+
+ printlog " Insert / Graphics from file"
+ InsertGraphicsFromFile
+
+ Kontext "GrafikEinfuegenDlg"
+ printlog " Select as graphic to insert: '...\writer\required\input\graphics\jolink.jpg"
+ Dateiname.Settext ConvertPath ( gTesttoolPath + "writer\required\input\graphics\jolink.jpg" )
+ Oeffnen.Click
+
+ Kontext "Active"
+ if Active.Exists( 1 ) then
+ Warnlog Active.Gettext
+ Active.Ok
+ Kontext "GrafikEinfuegenDlg"
+ GrafikEinfuegenDlg.Cancel
+ Call hCloseDocument
+ goto endsub
+ else
+ printlog " select again 'Insert / Grahics from file'"
+ InsertGraphicsFromFile
+ WaitSlot (2000)
+ printlog " Step through all tabpages"
+ Kontext
+ active.SetPage TabType
+ wait 500
+ Kontext "TabType"
+ Call DialogTest ( TabType )
+
+ Kontext
+ active.SetPage TabZusaetze
+ wait 500
+ Kontext "TabZusaetze"
+ Call DialogTest ( TabZusaetze )
+
+ Kontext
+ active.SetPage TabUmlauf
+ wait 500
+ Kontext "TabUmlauf"
+ Call DialogTest ( TabUmlauf )
+
+ Kontext
+ active.SetPage TabHyperlinkRahmen
+ wait 500
+ Kontext "TabHyperlinkRahmen"
+ Call DialogTest ( TabHyperlinkRahmen )
+
+ Kontext
+ active.SetPage TabGrafik
+ wait 500
+ Kontext "TabGrafik"
+ Call DialogTest ( TabGrafik )
+
+ Kontext
+ active.SetPage TabUmrandung
+ wait 500
+ Kontext "TabUmrandung"
+ Call DialogTest ( TabUmrandung )
+
+ Kontext
+ active.SetPage TabMakro
+ ' if no JRE is installed a messagebox appears
+ j = 0
+ Do
+ j = j + 1
+ Kontext "Active"
+ if Active.Exists then
+ if Active.GetRT = 304 then
+ if j = 1 then Warnlog Active.Gettext
+ Active.Ok
+ else
+ exit do
+ end if
+ else
+ exit do
+ end if
+ Loop
+ wait 500
+ Kontext "TabMakro"
+ Call DialogTest ( TabMakro )
+
+ if gApplication <> "HTML" then
+ Kontext
+ active.SetPage TabZuschneiden
+ wait 500
+ Kontext "TabZuschneiden"
+ Call DialogTest ( TabZuschneiden )
+
+ Kontext
+ active.SetPage TabHintergrund
+ wait 500
+ Kontext "TabHintergrund"
+ Call DialogTest ( TabHintergrund )
+ printlog " Close dialog"
+ TabHintergrund.Cancel
+ else
+ printlog " Close dialog"
+ TabMakro.Cancel
+ end if
+ end if
+
+ printlog " Close active document"
+ Call hCloseDocument
+ gApplication = "WRITER"
+endcase
+
diff --git a/testautomation/writer/required/includes/w_005_.inc b/testautomation/writer/required/includes/w_005_.inc
index 93fe9ac0237b..1f82170102ac 100755
--- a/testautomation/writer/required/includes/w_005_.inc
+++ b/testautomation/writer/required/includes/w_005_.inc
@@ -757,7 +757,7 @@ testcase tFormatColumn
printlog " Close dialog"
SpaltenBreite.OK
Wait 500
- Call wDocSetContext
+ hSetDocumentContext()
printlog " Enter some text in document"
Call wTypeKeys ("Dies ist ein langer Text, HALLO HALLO")
Wait 500
@@ -776,7 +776,7 @@ testcase tFormatColumn
printlog " Format / Cloumn / Delete"
TableDeleteColumns
WaitSlot (500)
- Call wDocSetContext
+ hSetDocumentContext()
printlog " Press 'up' twice to point cursor in the table"
Call wTypeKeys ("<Up>",2)
wait 500
diff --git a/testautomation/writer/required/includes/w_007_.inc b/testautomation/writer/required/includes/w_007_.inc
index 9b9a19ca8676..4551ee1c2390 100755
--- a/testautomation/writer/required/includes/w_007_.inc
+++ b/testautomation/writer/required/includes/w_007_.inc
@@ -80,7 +80,7 @@ testcase tToolsSpellcheck
printlog " Open document where the formatting is set to the language we wish to test."
TheFile = Convertpath (gTesttoolpath + "writer\optional\input\spellcheck\spellcheck_" + iSprache + ".odt")
- if ( not hFileExists ( TheFile ) ) then
+ if ( not FileExists ( TheFile ) ) then
Warnlog "Found no Document for the language you're testing in, Please inform the Test-Developer."
goto endsub
end if
@@ -125,7 +125,7 @@ testcase tToolsSpellcheck
if Active.exists then
if Active.GetRT = 304 then Active.Ok
Warnlog "Dialog 'Spellcheck' not up!"
- Call hCloseDocument
+ hFileCloseAll()
goto endsub
end if
catch
@@ -204,9 +204,8 @@ testcase tToolsSpellcheck
Spellcheck.Close
wait 500
PrintLog "Close active documents"
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
+ hFileCloseAll()
+
endcase
' -------------------------------------------
@@ -243,7 +242,7 @@ testcase tToolsThesaurus
printlog " Open document where the formatting is set to the language we wish to test."
TheFile = Convertpath (gTesttoolpath + "writer\optional\input\spellcheck\spellcheck_" + iSprache + ".odt")
- if ( not hFileExists ( TheFile ) ) then
+ if ( not FileExists ( TheFile ) ) then
Warnlog "Found no Document for the language you're testing in, Please inform the Test-Developer."
goto endsub
end if
@@ -292,9 +291,8 @@ testcase tToolsThesaurus
printlog " Close 'Thesaurus' dialog"
Thesaurus.Cancel
PrintLog "Close active documents"
- Do Until GetDocumentCount = 0
- Call hCloseDocument
- Loop
+ hFileCloseAll()
+
endcase
' -------------------------------------------
@@ -332,7 +330,7 @@ testcase tToolsHyphenation
LingFile = str$(iSprache) + "-hyph.dat"
end select
- if ( not hFileExists( DieDatei ) ) then
+ if ( not FileExists( DieDatei ) ) then
Warnlog "No defined Errortext for language: " + isprache + "! Exit!"
goto endsub
end if
@@ -1116,6 +1114,10 @@ endcase
' -------------------------------------------
testcase tHtmlDocToolsHangulHanjaConversion
+
+ warnlog( "#i112523# - Hangul Hanya Conversion dialog causes crash." )
+ goto endsub
+
Dim bAsianLanguage as Boolean
Dim sTestFile as String
@@ -1225,7 +1227,7 @@ testcase tMasterDocToolsHyphenation
end select
sTestFile = convertpath( sTestFile )
- if ( not hFileExists( sTestFile ) )then
+ if ( not FileExists( sTestFile ) )then
Warnlog "No defined Errortext for language: " + isprache + "! Exit!"
goto endsub
end if
diff --git a/testautomation/writer/required/includes/w_009_.inc b/testautomation/writer/required/includes/w_009_.inc
index 90c4cb5aad19..e018917ebe4b 100644..100755
--- a/testautomation/writer/required/includes/w_009_.inc
+++ b/testautomation/writer/required/includes/w_009_.inc
@@ -86,9 +86,8 @@ testcase tHelpAboutStarOffice
DialogTest ( UeberStarWriter )
printlog " In About dialog enter key <Strg+Alt+Del>"
UeberStarWriter.TypeKeys "<Mod1 S><Mod1 D><Mod1 T>"
- Sleep 3
printlog " Close About dialog"
- UeberStarWriter.OK
+ hCloseDialog( UeberStarWriter, "ok" )
printlog " Close active document"
Call hCloseDocument
endcase
diff --git a/testautomation/writer/required/includes/w_010_.inc b/testautomation/writer/required/includes/w_010_.inc
index 29c802022bed..f2d0a4ba0945 100644..100755
--- a/testautomation/writer/required/includes/w_010_.inc
+++ b/testautomation/writer/required/includes/w_010_.inc
@@ -74,6 +74,9 @@ end sub
'-----------------------------------------------------------
testcase tFormatting
+
+ GLOBAL_USE_NEW_SLEEP = TRUE
+
printlog "- Objectbar ( normal ) : Formatting"
Call hNewDocument
printlog " Open new document"
@@ -147,6 +150,9 @@ testcase tFormatting
Sleep 1
Call hCloseDocument
printlog " Close active document"
+
+ GLOBAL_USE_NEW_SLEEP = FALSE
+
endcase
'-----------------------------------------------------------
@@ -1078,6 +1084,10 @@ testcase tHtmlDocFormatting
printlog " Open new document"
Call hNewDocument
+
+ Kontext "NavigatorWriter"
+ if NavigatorWriter.Exists then ViewNavigator
+
Call wTypeKeys ("Formatting <Shift Home>")
Kontext "TextObjectbar"
if Not TextObjectbar.Exists then Call hToolbarSelect ( "FORMATTING", true )
@@ -1153,6 +1163,11 @@ testcase tMasterDocFormatting
printlog " Open new document"
Call hNewDocument
+
+ Kontext "NavigatorGlobalDoc"
+ if NavigatorGlobalDoc.Exists then ViewNavigator
+
+
Call wTypeKeys ("Formatting <Shift Home>")
Kontext "TextObjectbar"
if Not TextObjectbar.Exists then Call hToolbarSelect ( "FORMATTING", true )
diff --git a/testautomation/writer/required/includes/w_020_.inc b/testautomation/writer/required/includes/w_020_.inc
index f927d24952f7..9e8fef8ea010 100644..100755
--- a/testautomation/writer/required/includes/w_020_.inc
+++ b/testautomation/writer/required/includes/w_020_.inc
@@ -59,8 +59,10 @@ end sub
'-----------------------------------------------------------
testcase t_TB_Insert
- qaErrorLog "#158646# - Inserting Indexes causes crash."
- goto endsub
+
+ ' JSK: This issue is solved since OOO300m9, enabling test again
+ 'qaErrorLog "#158646# - Inserting Indexes causes crash."
+ 'goto endsub
printlog "- Toolbox ( normal ) : All within Insert"
@@ -122,7 +124,8 @@ testcase t_TB_Insert
else
Call hToolbarSelect("Insert", true)
endif
-
+
+ sleep( 2 ) ' Too fast for some machines. Using dirty fix.
if Tabelle.IsEnabled then
Tabelle.Click
Kontext "TabelleEinfuegenWriter"
@@ -235,7 +238,7 @@ testcase t_TB_InsertFields
printlog "- Toolbox ( normal ) : Fields"
if gPlatgroup = "unx" then
- QAErrorlog "Doesn't run on unix"
+ printlog( "Test not suitable for Unix(like) OS" )
goto endsub
end if
printlog " Open new document"
@@ -658,8 +661,10 @@ endcase
'-----------------------------------------------------------
testcase tHtmlDoc_TB_Insert
- qaErrorLog "#158646# - Inserting Indexes causes crash."
- goto endsub
+
+ ' JSK: This issue is solved since OOO300m9, enabling test again
+ 'qaErrorLog "#158646# - Inserting Indexes causes crash."
+ 'goto endsub
printlog "- Toolbox ( normal ) : All within Insert"
gApplication = "HTML"
@@ -780,7 +785,7 @@ testcase tHtmlDoc_TB_InsertFields
gApplication = "HTML"
if gPlatgroup = "unx" then
- QAErrorlog "Doesn't run on unix"
+ printlog( "Test not suitable for Unix(like) OS" )
goto endsub
end if
diff --git a/testautomation/writer/required/w_updt.bas b/testautomation/writer/required/w_updt.bas
index 498826f83e8d..62c77beea473 100755
--- a/testautomation/writer/required/w_updt.bas
+++ b/testautomation/writer/required/w_updt.bas
@@ -42,6 +42,7 @@ sub main
use "writer\required\includes\w_002_.inc"
use "writer\required\includes\w_003_.inc"
use "writer\required\includes\w_004_.inc"
+ use "writer\required\includes\w_004b_.inc"
use "writer\required\includes\w_005_.inc"
use "writer\required\includes\w_005b_.inc"
use "writer\required\includes\w_006_.inc"
@@ -64,6 +65,7 @@ sub main
Call w_002_ ' Menu Edit
Call w_003_ ' Menu View
Call w_004_ ' Menu Insert
+ Call w_004b_ ' Menu Insert
Call w_005_ ' Menu Format
Call w_005b_ ' Menu Format (2)
Call w_006_ ' Menu Table
diff --git a/testautomation/writer/tools/includes/w_tool1.inc b/testautomation/writer/tools/includes/w_tool1.inc
index 34b83bc5e97b..6150cb8e1fbc 100755
--- a/testautomation/writer/tools/includes/w_tool1.inc
+++ b/testautomation/writer/tools/includes/w_tool1.inc
@@ -154,32 +154,48 @@ end sub
sub hEinfuegenFloatingFrame
InsertFloatingFrame
+
Kontext "TabEigenschaften"
- FrameName.SetText "Hallo"
- Inhalt.SetText ConvertPath ( gTesttoolpath + "input\desktop\frameset.htm" )
- TabEigenschaften.OK
- Sleep 10
+ if ( Tabeigenschaften.exists( 2 ) ) then
+ FrameName.SetText "Hallo"
+ Inhalt.SetText ConvertPath ( gTesttoolpath + "input\desktop\frameset.htm" )
+ hCloseDialog( TabEigenschaften, "ok" )
+ else
+ warnlog( "Failed to open <TabEigenschaften>" )
+ endif
end sub
' -----------------------------------------------------------------------
sub hEinfuegenRahmen
+
InsertFrame
+
Kontext
- Active.SetPage TabType
- Kontext "TabType"
- TabType.OK
- Sleep 3
+ if ( Active.exists( 2 ) ) then
+ Active.SetPage TabType
+ Kontext "TabType"
+ hCloseDialog( TabType, "ok" )
+ else
+ warnlog( "Failed to open <TabType>" )
+ endif
+
end sub
' -----------------------------------------------------------------------
sub hEinfuegenChart
+
InsertObjectChart
+
Kontext "AutoformatDiagramm1"
- Fertigstellen.Click
- WaitSlot() ' NOOP
+ if ( AutoformatDiagramm1.exists( 2 ) ) then
+ hClickButton( Fertigstellen )
+ else
+ warnlog( "Failed to open <AutoformatDiagramm1>" )
+ endif
+
end sub
' -----------------------------------------------------------------------
@@ -315,6 +331,8 @@ end sub
'----------------------------------------------------------------
sub sMenufunktionen(Fuer_Was as string)
+
+ const RC_FAILURE = -1
Dim i as integer
Kontext "FormControls"
@@ -336,33 +354,20 @@ sub sMenufunktionen(Fuer_Was as string)
next i
Kontext
- try
- FormatControl
- WaitSlot()
+ if ( hUseAsyncSlot( "FormatControl" ) <> RC_FAILURE ) then
Kontext "ControlPropertiesDialog"
if ControlPropertiesDialog.Exists( 2 ) then
- ControlPropertiesDialog.Close
- ControlPropertiesDialog.notExists( 2 )
- else
- FormatControl
- Wait 500
- Kontext "ControlPropertiesDialog"
- if ControlPropertiesDialog.Exists( 2 ) then
- ControlPropertiesDialog.Close
- ControlPropertiesDialog.notExists( 2 )
- else
- Warnlog " - Controlfieldproperties "+ Fuer_Was +" from Menu not available!"
- end if
- end if
+ hCloseDialog( ControlPropertiesDialog, "close" )
+ endif
printlog Fuer_Was
- catch
+ else
if gPlatform = "osx" then
Warnlog "#i82427#-Mac OS X (Aqua): Drawing function does not draw anything"
else
Warnlog " - Controlfieldproperties "+ Fuer_Was +" from Menu not available!"
end if
- endcatch
+ endif
Call wTypeKeys "<Escape>"
Kontext "FormControls"
diff --git a/testautomation/writer/tools/includes/w_tool2.inc b/testautomation/writer/tools/includes/w_tool2.inc
index 44e78fd589b4..0aa4238520a1 100644
--- a/testautomation/writer/tools/includes/w_tool2.inc
+++ b/testautomation/writer/tools/includes/w_tool2.inc
@@ -28,13 +28,6 @@
'* **
'* short description : Description of file **
'* **
-'*******************************************************************
-'* **
-' #1 OptionenAufrufen
-' #1 CheckUberpruefen
-' #1 UnCheckUeberpruefen
-' #1 WortErgaenzen
-'* **
'\******************************************************************
sub OptionenAufrufen(Seite as string)
@@ -346,7 +339,7 @@ function wDeleteAutotext(vAutotextName as string) as boolean
Dim bDeleted as boolean
Dim sAllGroups as integer
Dim sAllInGroups as integer
-
+
Kontext "Autotext"
if Not Autotext.Exists then EditAutotext
@@ -370,36 +363,36 @@ function wDeleteAutotext(vAutotextName as string) as boolean
' count all groups
sAllGroups = Liste.GetItemCount
' travel through all groups
- For ik = 1 to sAllGroups
- Liste.Select ik
- Liste.TypeKeys "+"
-
- sAllInGroups = Liste.GetItemCount - sAllGroups
- For j = 1 to sAllInGroups
- Liste.TypeKeys "<Down>"
- if Liste.Gettext = vAutotextName then
- try
- Menue.Click
- wait 500
- Call hMenuSelectNr ( 3 )
- Kontext "Active"
- if Active.Exists and Active.GetRT = 304 then
- Active.yes
- wDeleteAutotext = true
- else
- Warnlog "No messages to confirm deleting the Autotext!"
- end if
- bDeleted = true
- exit for
- catch
- Warnlog "Menu Autotext->'Delete' disabled ! Test failed !"
- endcatch
- end if
- next j
- if bDeleted = true then exit for
- ' close group
+ For ik = 1 to sAllGroups
+ Liste.Select ik
+ Liste.TypeKeys "+"
+
+ sAllInGroups = Liste.GetItemCount - sAllGroups
+ For j = 1 to sAllInGroups
+ Liste.TypeKeys "<Down>"
+ if Liste.Gettext = vAutotextName then
+ try
+ Menue.Click
+ wait 500
+ Call hMenuSelectNr ( 3 )
+ Kontext "Active"
+ if Active.Exists and Active.GetRT = 304 then
+ Active.yes
+ wDeleteAutotext = true
+ else
+ Warnlog "No messages to confirm deleting the Autotext!"
+ end if
+ bDeleted = true
+ exit for
+ catch
+ Warnlog "Menu Autotext->'Delete' disabled ! Test failed !"
+ endcatch
+ end if
+ next j
+ if bDeleted = true then exit for
+ ' close group
Liste.Select ik
- Liste.TypeKeys "-"
+ Liste.TypeKeys "-"
next ik
end function
@@ -420,4 +413,4 @@ sub wChangeDefaultView()
Massstab.Ok
Call hCloseDocument
-end sub \ No newline at end of file
+end sub
diff --git a/testautomation/writer/tools/includes/w_tool3.inc b/testautomation/writer/tools/includes/w_tool3.inc
index 8be27ca7bc3c..235d66c86f07 100644..100755
--- a/testautomation/writer/tools/includes/w_tool3.inc
+++ b/testautomation/writer/tools/includes/w_tool3.inc
@@ -33,7 +33,7 @@
sub InTabelleKontrollieren
Call wTypeKeys ("<Home>")
Call wTypeKeys ("<Tab><Shift End>")
- EditCopy
+ hUseAsyncSlot( "EditCopy" )
if GetClipBoardText <> "Text" then
Warnlog "Text has not been inserted in a table"
else
@@ -45,7 +45,7 @@ end sub
' ****
sub InTabelleKontrollierenExtra
Call wTypeKeys ("<Home><Shift Tab><Shift End>")
- EditCopy
+ hUseAsyncSlot( "EditCopy" )
if GetClipBoardText <> "Der" then
Warnlog "Text has not been inserted in a table"
else
@@ -57,7 +57,7 @@ end sub
'***
sub InTextKontrollieren
Call wTypeKeys ("<Home><Shift Mod1 Right>")
- EditCopy
+ hUseAsyncSlot( "EditCopy" )
if Left$(GetClipBoardText,3) <> "Der" AND Left$(GetClipboardText,4) <> "Der " then
Warnlog "Table has not been changed to text"
else
diff --git a/testautomation/writer/tools/includes/w_tool4.inc b/testautomation/writer/tools/includes/w_tool4.inc
index 78cee6ca3042..8b8c52e12627 100644..100755
--- a/testautomation/writer/tools/includes/w_tool4.inc
+++ b/testautomation/writer/tools/includes/w_tool4.inc
@@ -143,7 +143,7 @@ function wGetSpellcheckDocumentName(xCategory as integer) as string
end select
if sReturn <> "None" then
- if hFileExists(sTemp) then
+ if FileExists(sTemp) then
sReturn = sTemp
else
sReturn = "Empty"
diff --git a/testautomation/writer/tools/includes/w_tool6.inc b/testautomation/writer/tools/includes/w_tool6.inc
index caba673ae6be..0da02a8373a7 100644..100755
--- a/testautomation/writer/tools/includes/w_tool6.inc
+++ b/testautomation/writer/tools/includes/w_tool6.inc
@@ -575,54 +575,6 @@ end function
'--------------------------------------------------------------
-function hIsNamedDocLoaded (ShouldFile as String) as Boolean
- '/// Input: name of loaded file; Output: True/False///'
- '///+ Several checks may be combined: ///'
- '///+ disabled: Plan A: requires clippboard: check, if not untitled 1 window... ///'
- '///+ Plan B: SaveAs Dialog ///'
- '///+ not used now: Plan C: check if hNavigatorOpenWindows() > 0 ///'
-
- '///' Plan A :-( ///
- ''///+ to be able to check, that document was loaded, print something before opening new doc ///'
- ''///+ during test, check if it is readable ... ///'
- ' Kontext "DocumentWriter"
- ' DocumentWriter.TypeKeys "<Mod1 home>"
- ' DocumentWriter.TypeKeys "TBOlastWindow"
- ' DocumentWriter.TypeKeys "<Return>"
-
- ' Kontext "DocumentWriter"
- ' DocumentWriter.TypeKeys "<Mod1 Home>"
- ' DocumentWriter.TypeKeys "<Shift End>"
- ' EditCopy
- ' DocumentWriter.TypeKeys "<Home>"
- ' if GetClipboardText <> "TBOlastWindow" Then ///'
-
- '/// ' Plan B :-) ///
- '///+' if a doc got loaded, the filename in a 'SaveAs' Dlg is different from "" ///
- '///+' usually the file name of the loaded document with an changed extension chosen from SO ///
-
- hIsNamedDocLoaded = False ' Let's start WorstCase :-(
- FileSaveAs ' (Plan B)
- Kontext "SpeichernDlg"
- If DateiOhneExt(DateiExtract(Dateiname.GetSelText)) = DateiOhneExt(DateiExtract(ShouldFile)) Then
- hIsNamedDocLoaded = True
- ' Printlog "Filename: " + Dateiname.GetSelText+"; "+ShouldFile
- ' Printlog "--------------------------------------------------Loaded as: " + Dateityp.GetSelText
- Else
- 'exception! for templates
- if lcase(right(ShouldFile,3)) = "vor" or lcase(right(ShouldFile,3)) = "dot" then hIsNamedDocLoaded = True
- End If
- SpeichernDlg.Cancel
-
- '/ remove text of last window test text ///'
- ' Kontext "DocumentWriter"
- ' DocumentWriter.TypeKeys "<Mod1 home>"
- ' DocumentWriter.TypeKeys "TBOlastWindow"
- ' DocumentWriter.TypeKeys "<delete>"
-end function
-
-'--------------------------------------------------------------
-
sub hSetSpellHypLanguage
dim sTrieit
if bAsianLan then
@@ -753,7 +705,7 @@ end sub
function fInsertFrame (x1 as Integer , y1 as Integer , x2 as Integer , y2 as Integer)
'This function will insert a frame with the coordinate
- Call wDocSetContext
+ hSetDocumentContext()
Call hToolbarSelect("INSERT", true )
Sleep 1
diff --git a/testautomation/writer/tools/includes/w_tools.inc b/testautomation/writer/tools/includes/w_tools.inc
index 122a44f7da53..e2edcc69f640 100755..100644
--- a/testautomation/writer/tools/includes/w_tools.inc
+++ b/testautomation/writer/tools/includes/w_tools.inc
@@ -64,6 +64,7 @@ end sub
' -----------------------------------------------------------------------
sub wTypeKeys ( OutputText , optional iLoop as Integer )
+
Dim i as integer
If lcase(OutputText) = "<mod1 a>" then
If iSprache = 34 then OutputText = "<Mod1 E>"
@@ -90,35 +91,7 @@ sub wTypeKeys ( OutputText , optional iLoop as Integer )
end select
wait 500
next i
-end sub
-
-' -----------------------------------------------------------------------
-
-sub wDocSetContext
- Select Case Ucase(gApplication)
- Case "WRITER"
- Kontext "DocumentWriter"
-
- Case "MASTERDOCUMENT"
- Kontext "DocumentMasterDoc"
-
- Case "HTML"
- Kontext "DocumentWriterWeb"
-
- Case "IMPRESS"
- Kontext "DocumentImpress"
- Case "DRAW"
- Kontext "DocumentDraw"
-
- Case "MATH"
- Kontext "DocumentMath"
-
- Case "CALC"
- Kontext "DocumentCalc"
-
- end select
- wait 500
end sub
' -----------------------------------------------------------------------
@@ -176,28 +149,28 @@ sub wZeichenobjektEinfuegen ( Objekt$, xStart%, yStart%, xEnde%, yEnde%, optiona
Objekt = UCase( Objekt )
select case Objekt
- case "RECHTECK" : Rechteck.Click
- case "LINIE" : Linie.Click
- case "ELLIPSE" : Ellipse.Click
- case "TEXT" : Textobjekt.Click
- case "VTEXT" :
- try
- VerticalText.Click
- catch
- if gAsianSup = True then
- Warnlog "Unable to insert Vertical Text! Asian Support in Options activated ?"
- end if
- endcatch
- case "LAUFTEXT" : Lauftext.Click
- case "LEGENDE" : Legende.Click
- case "VLEGENDE" :
- try
- VerticalCallout.Click
- catch
- Warnlog "Unable to insert Vertical Callout! Asian Support in Options activated ?"
- endcatch
+ case "RECHTECK" : Rechteck.Click
+ case "LINIE" : Linie.Click
+ case "ELLIPSE" : Ellipse.Click
+ case "TEXT" : Textobjekt.Click
+ case "VTEXT" :
+ try
+ VerticalText.Click
+ catch
+ if gAsianSup = True then
+ Warnlog "Unable to insert Vertical Text! Asian Support in Options activated ?"
+ end if
+ endcatch
+ case "LAUFTEXT" : Lauftext.Click
+ case "LEGENDE" : Legende.Click
+ case "VLEGENDE" :
+ try
+ VerticalCallout.Click
+ catch
+ Warnlog "Unable to insert Vertical Callout! Asian Support in Options activated ?"
+ endcatch
end select
- Sleep (2)
+ Sleep (2)
Select Case gApplication
Case "WRITER"
@@ -236,7 +209,7 @@ sub wZeichenobjektEinfuegen ( Objekt$, xStart%, yStart%, xEnde%, yEnde%, optiona
wait 100
end if
end select
- sleep (1)
+ sleep (1)
end sub
' -----------------------------------------------------------------------
@@ -534,7 +507,7 @@ sub wNavigatorAuswahl(Gruppe as integer, Eintrag as integer,optional LeaveFocus
Sleep 2
- Select Case Ucase(gApplication)
+ Select Case gApplication
Case "CALC"
if (Liste.GetItemCount < MinEntrys) then Umschalten.Click
if Liste.GetItemCount >MinEntrys then
@@ -552,7 +525,7 @@ sub wNavigatorAuswahl(Gruppe as integer, Eintrag as integer,optional LeaveFocus
Liste.TypeKeys "<Return>"
end if
- Case "WRITER","HTML", "HTML"
+ Case "WRITER","HTML"
if (Auswahlliste.GetItemCount < MinEntrys) then
try
Inhaltsansicht.Click
diff --git a/testautomation/xml/optional/includes/docbook_001.inc b/testautomation/xml/optional/includes/docbook_001.inc
index f79f4fd36c4a..d26a60025de6 100644
--- a/testautomation/xml/optional/includes/docbook_001.inc
+++ b/testautomation/xml/optional/includes/docbook_001.inc
@@ -43,7 +43,7 @@ sub tDocBookXMLtestdocs
exit sub
end if
'Calculating how many documents are in that directory (max. 500)
- if hDirectoryExists(sSourcePath) then
+ if FileExists(sSourcePath) then
'Get the file list and put it in a list (max. 500 per directory!)
call GetAllFileList(sSourcePath, "*.xml" , sSourceDocuments())
iNumberOfDocuments = ListCount(sSourceDocuments())
diff --git a/testautomation/xml/tools/includes/xmltool1.inc b/testautomation/xml/tools/includes/xmltool1.inc
index e0356be2076c..67a52c48714e 100644
--- a/testautomation/xml/tools/includes/xmltool1.inc
+++ b/testautomation/xml/tools/includes/xmltool1.inc
@@ -29,56 +29,75 @@
'*
'* short description : XML Tools
'*
-'***************************************************************************************
-'*
-' #1 CreateWorkXMLExportDir
-' #1 hEnablePrettyPrinting
-'*
'\***********************************************************************************
+
sub CreateWorkXMLExportDir ( DirName as string )
-'/*** <i>CreateWorkXMLExportDir</i> creates in the StarOffice/work-
-'/*** +directory a directory. If the same name exists the content (files only)
-'/*** +will be deleted.
- Dim OutputPath as string
- Dim Isliste(200) as string
- Dim i, BornToKill
- printlog "Checking work-dir & creating '" & gOfficePath & ConvertPath(DirName) & "'."
- if hDirectoryExists ( gOfficePath & ConvertPath(DirName) ) = TRUE then
- OutputPath = gOfficePath & ConvertPath(DirName)
- IsListe(0) = 0
- GetFileList ( OutputPath , "*", IsListe() )
- BornToKill = KillFileList ( IsListe() )
- for i = 1 to BornToKill
- warnlog IsListe(i) & " could not be deleted!"
- next i
- else
- app.mkDir( gOfficePath & ConvertPath(DirName))
- end if
+
+ '/*** <i>CreateWorkXMLExportDir</i> creates in the StarOffice/work-
+ '/*** +directory a directory. If the same name exists the content (files only)
+ '/*** +will be deleted.
+
+ Dim OutputPath as string
+ Dim Isliste(200) as string
+ Dim iCurrentFile as integer
+ dim iFileCount as integer
+
+ printlog "Checking work-dir & creating '" & gOfficePath & ConvertPath(DirName) & "'."
+ if ( FileExists( gOfficePath & ConvertPath( DirName ) ) ) then
+
+ OutputPath = gOfficePath & ConvertPath( DirName )
+ IsListe(0) = 0
+ GetFileList ( OutputPath , "*", IsListe() )
+ iFileCount = KillFileList ( IsListe() )
+
+ for iCurrentFile = 1 to iFileCount
+ warnlog IsListe( iCurrentFile ) & " could not be deleted!"
+ next iCurrentFile
+
+ else
+
+ app.mkDir( gOfficePath & ConvertPath(DirName))
+
+ endif
+
end sub
-'-------------------------------------------------------------------------
-sub hEnablePrettyPrinting (OPTIONAL A)
-'/// <i>hEnablePrettyPrinting</i> enables the pretty printing (=better
-'/// +formated view) in XML file export. It takes >10 percent more time
-'/// +to save files!!! OPTIONAL parameter is used to DISABLE it.
- ToolsOptions
- Kontext "ExtrasOptionenDLG"
- call hToolsOptions("loadsave","general")
- Kontext "TabSpeichern"
- if IsMissing(A) then
- if NoPrettyPrinting.IsChecked = TRUE then
- NoPrettyPrinting.Uncheck
- sleep(1)
- printlog "- XML pretty printing enabled ( xmltool1.inc )"
- end if
- else
- if NoPrettyPrinting.IsChecked = FALSE then
- NoPrettyPrinting.Check
- sleep(1)
- printlog "- XML pretty printing disabled ( xmltool1.inc )"
- end if
- end if
- Kontext "ExtrasOptionenDLG"
- ExtrasOptionenDLG.OK
+
+'-------------------------------------------------------------------------------
+
+sub hEnablePrettyPrinting ( optional bDisablePrettyPrinting )
+
+ '/// <i>hEnablePrettyPrinting</i> enables the pretty printing (=better
+ '/// +formated view) in XML file export. It takes >10 percent more time
+ '/// +to save files!!! OPTIONAL parameter is used to DISABLE it.
+
+ ToolsOptions
+ Kontext "ExtrasOptionenDLG"
+ if ( ExtrasOptionenDlg.exists( 1 ) ) then
+
+ call hToolsOptions("loadsave","general")
+
+ Kontext "TabSpeichern"
+ if IsMissing( bDisablePrettyPrinting ) then
+
+ if ( NoPrettyPrinting.IsChecked() ) then
+ NoPrettyPrinting.Uncheck()
+ printlog "- XML pretty printing enabled ( xmltool1.inc )"
+ endif
+
+ else
+
+ if ( Not NoPrettyPrinting.IsChecked() ) then
+ NoPrettyPrinting.Check()
+ printlog "- XML pretty printing disabled ( xmltool1.inc )"
+ endif
+
+ endif
+ Kontext "ExtrasOptionenDLG"
+ hCloseDialog( ExtrasOptionenDLG, "ok" )
+ else
+ warnlog( "hEnablePrettyPrinting(): Tools/Options dialog not open" )
+ endif
+
end sub
-'-------------------------------------------------------------------------
+
diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties
index 1b4512b96265..9f120781c97e 100644
--- a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties
+++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/genfiles.properties
@@ -1,3 +1,4 @@
+# x-no-translate
build.xml.data.CRC32=d17eccb2
build.xml.script.CRC32=a183e208
build.xml.stylesheet.CRC32=958a1d3e@1.32.1.45
diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties
index 18af3f70309a..23e517d892d7 100644
--- a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties
+++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/private/private.properties
@@ -1,3 +1,4 @@
+# x-no-translate
application.args=D:\\sources\\gfxcmp02\\DEV300\\ooo\\testgraphical\\wntmsci12.pro\\misc\\CurrentTime.ods.ps.ini
compile.on.save=true
do.depend=false
diff --git a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties
index 3ec3fae330ae..3a6731d3bcf6 100644
--- a/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties
+++ b/testgraphical/ui/java/ConvwatchGUIProject/nbproject/project.properties
@@ -1,3 +1,4 @@
+# x-no-translate
application.desc=This Program shows three pictures in one line.
application.title=ConvwatchGUIProject
application.vendor=Oracle and/or its affiliates
diff --git a/toolkit/inc/toolkit/awt/vclxsystemdependentwindow.hxx b/toolkit/inc/toolkit/awt/vclxsystemdependentwindow.hxx
index 5448bfaff320..73bd100c2bb7 100644
--- a/toolkit/inc/toolkit/awt/vclxsystemdependentwindow.hxx
+++ b/toolkit/inc/toolkit/awt/vclxsystemdependentwindow.hxx
@@ -40,8 +40,8 @@
// class VCLXSystemDependendtWindow
// ----------------------------------------------------
-class VCLXSystemDependentWindow : public ::com::sun::star::awt::XSystemDependentWindowPeer,
- public VCLXWindow
+class TOOLKIT_DLLPUBLIC VCLXSystemDependentWindow : public ::com::sun::star::awt::XSystemDependentWindowPeer,
+ public VCLXWindow
{
public:
VCLXSystemDependentWindow();
diff --git a/toolkit/inc/toolkit/controls/unocontrolmodel.hxx b/toolkit/inc/toolkit/controls/unocontrolmodel.hxx
index a443cb4d2d6b..71decdfcb2c9 100644
--- a/toolkit/inc/toolkit/controls/unocontrolmodel.hxx
+++ b/toolkit/inc/toolkit/controls/unocontrolmodel.hxx
@@ -53,17 +53,17 @@ class ImplPropertyTable;
// class UnoControlModel
// ----------------------------------------------------
-class UnoControlModel : public ::com::sun::star::awt::XControlModel,
- public ::com::sun::star::beans::XPropertyState,
- public ::com::sun::star::io::XPersistObject,
- public ::com::sun::star::lang::XComponent,
- public ::com::sun::star::lang::XServiceInfo,
- public ::com::sun::star::lang::XTypeProvider,
- public ::com::sun::star::lang::XUnoTunnel,
- public ::com::sun::star::util::XCloneable,
- public MutexAndBroadcastHelper,
- public ::cppu::OPropertySetHelper,
- public ::cppu::OWeakAggObject
+class TOOLKIT_DLLPUBLIC UnoControlModel : public ::com::sun::star::awt::XControlModel,
+ public ::com::sun::star::beans::XPropertyState,
+ public ::com::sun::star::io::XPersistObject,
+ public ::com::sun::star::lang::XComponent,
+ public ::com::sun::star::lang::XServiceInfo,
+ public ::com::sun::star::lang::XTypeProvider,
+ public ::com::sun::star::lang::XUnoTunnel,
+ public ::com::sun::star::util::XCloneable,
+ public MutexAndBroadcastHelper,
+ public ::cppu::OPropertySetHelper,
+ public ::cppu::OWeakAggObject
{
private:
ImplPropertyTable* mpData;
diff --git a/toolkit/inc/toolkit/helper/unopropertyarrayhelper.hxx b/toolkit/inc/toolkit/helper/unopropertyarrayhelper.hxx
index 2a42d05b72fd..5b5cb3021fc9 100644
--- a/toolkit/inc/toolkit/helper/unopropertyarrayhelper.hxx
+++ b/toolkit/inc/toolkit/helper/unopropertyarrayhelper.hxx
@@ -28,6 +28,7 @@
#ifndef _TOOLKIT_HELPER_UNOPROPERTYARRAYHELPER_HXX_
#define _TOOLKIT_HELPER_UNOPROPERTYARRAYHELPER_HXX_
+#include <toolkit/dllapi.h>
#include <cppuhelper/propshlp.hxx>
#include <tools/table.hxx>
@@ -37,7 +38,7 @@
// ----------------------------------------------------
// class UnoPropertyArrayHelper
// ----------------------------------------------------
-class UnoPropertyArrayHelper : public ::cppu::IPropertyArrayHelper
+class TOOLKIT_DLLPUBLIC UnoPropertyArrayHelper : public ::cppu::IPropertyArrayHelper
{
private:
Table maIDs;
diff --git a/toolkit/prj/d.lst b/toolkit/prj/d.lst
index 0c62a083b330..375485c96e4d 100644
--- a/toolkit/prj/d.lst
+++ b/toolkit/prj/d.lst
@@ -24,6 +24,7 @@ mkdir: %_DEST%\inc%_EXT%\toolkit\controls
..\inc\toolkit\awt\vclxtopwindow.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxtopwindow.hxx
..\inc\toolkit\awt\vclxtoolkit.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxtoolkit.hxx
..\inc\toolkit\awt\vclxwindow.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxwindow.hxx
+..\inc\toolkit\awt\vclxsystemdependentwindow.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxsystemdependentwindow.hxx
..\source\awt\vclxdialog.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxdialog.hxx
..\inc\toolkit\awt\vclxwindows.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxwindows.hxx
..\inc\toolkit\awt\vclxmenu.hxx %_DEST%\inc%_EXT%\toolkit\awt\vclxmenu.hxx
@@ -47,6 +48,7 @@ mkdir: %_DEST%\inc%_EXT%\toolkit\controls
..\inc\toolkit\helper\formpdfexport.hxx %_DEST%\inc%_EXT%\toolkit\helper/formpdfexport.hxx
..\inc\toolkit\helper\accessiblefactory.hxx %_DEST%\inc%_EXT%\toolkit\helper\accessiblefactory.hxx
..\inc\toolkit\helper\fixedhyperbase.hxx %_DEST%\inc%_EXT%\toolkit\helper\fixedhyperbase.hxx
+..\inc\toolkit\helper\unopropertyarrayhelper.hxx %_DEST%\inc%_EXT%\toolkit\helper\unopropertyarrayhelper.hxx
..\inc\toolkit\helper\vclunohelper.hxx %_DEST%\inc%_EXT%\toolkit\unohlp.hxx
..\inc\toolkit\dllapi.h %_DEST%\inc%_EXT%\toolkit\dllapi.h
diff --git a/toolkit/source/helper/property.cxx b/toolkit/source/helper/property.cxx
index 9a3dc7b9bfb3..3a83465a3218 100644
--- a/toolkit/source/helper/property.cxx
+++ b/toolkit/source/helper/property.cxx
@@ -284,9 +284,9 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount )
DECL_PROP_3 ( "SelectionModel", GRID_SELECTIONMODE, ::com::sun::star::view::SelectionType, BOUND, MAYBEDEFAULT, MAYBEVOID ),
DECL_PROP_2 ( "EnableVisible", ENABLEVISIBLE, sal_Bool, BOUND, MAYBEDEFAULT ),
DECL_PROP_3 ( "ReferenceDevice", REFERENCE_DEVICE, Reference< XDevice >,BOUND, MAYBEDEFAULT, TRANSIENT ),
- DECL_PROP_3 ( "EvenRowBackgroundColor", GRID_EVEN_ROW_BACKGROUND, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
- DECL_PROP_3 ( "HeaderBackgroundColor", GRID_HEADER_BACKGROUND, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
- DECL_PROP_3 ( "LineColor", GRID_LINE_COLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_3 ( "EvenRowBackgroundColor", GRID_EVEN_ROW_BACKGROUND, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_3 ( "HeaderBackgroundColor", GRID_HEADER_BACKGROUND, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
+ DECL_PROP_3 ( "GridLineColor", GRID_LINE_COLOR, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID ),
DECL_PROP_3 ( "RowBackgroundColor", GRID_ROW_BACKGROUND, sal_Int32, BOUND, MAYBEDEFAULT, MAYBEVOID )
};
pPropertyInfos = aImplPropertyInfos;
diff --git a/tools/bootstrp/makefile.mk b/tools/bootstrp/makefile.mk
index b592cb900630..41188d2117d0 100644
--- a/tools/bootstrp/makefile.mk
+++ b/tools/bootstrp/makefile.mk
@@ -38,6 +38,10 @@ LIBTARGET=NO
CDEFS+=-D_TOOLS_STRINGLIST
+.IF "$(HAVE_GETOPT)" == "YES"
+CDEFS += -DHAVE_GETOPT
+.ENDIF
+
# --- Files --------------------------------------------------------
OBJFILES= \
@@ -83,6 +87,11 @@ APP2TARGET= rscdep
APP2OBJS= $(OBJ)$/rscdep.obj
APP2LIBS= $(LB)$/$(TARGET).lib $(LB)$/$(TARGET1).lib
APP2STDLIBS= $(SALLIB) $(VOSLIB) $(TOOLSLIB) $(BASEGFXLIB) $(UCBHELPERLIB) $(CPPULIB) $(COMPHELPERLIB) $(I18NISOLANGLIB) $(CPPUHELPERLIB) $(SALHELPERLIB)
+.IF "$(HAVE_GETOPT)" != "YES"
+.IF "$(OS)"=="WNT"
+APP2STDLIBS+=gnu_getopt.lib
+.ENDIF
+.ENDIF
APP2RPATH= NONE
APP2RPATH= NONE
APP2RPATH= NONE
diff --git a/tools/bootstrp/rscdep.cxx b/tools/bootstrp/rscdep.cxx
index 5c18793c9833..37edfc6a8c18 100644
--- a/tools/bootstrp/rscdep.cxx
+++ b/tools/bootstrp/rscdep.cxx
@@ -45,6 +45,16 @@
#include "cppdep.hxx"
+#if defined WNT
+#if !defined HAVE_GETOPT
+#define __STDC__ 1
+#define __GNU_LIBRARY__
+#include <external/glibc/getopt.h>
+#else
+#include <getopt.h>
+#endif
+#endif
+
class RscHrcDep : public CppDep
{
public:
@@ -70,15 +80,6 @@ void RscHrcDep::Execute()
//static String aDelim;
-/* poor man's getopt() */
-int simple_getopt(char *argv[], const char *optstring);
-#if defined(WNT) || defined(OS2)
-static char *optarg = NULL;
-static int optind = 1;
-static int optopt = 0;
-static int opterr = 0;
-#endif
-
SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv )
{
int c;
@@ -179,7 +180,7 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv )
while( 1 )
{
- c = simple_getopt( argv,
+ c = getopt( argc, argv,
"_abcdefghi:jklmnopqrstuvwxyzABCDEFGHI:JKLMNOPQRSTUVWXYZ1234567890/-+=.\\()\"");
if ( c == -1 )
break;
@@ -296,41 +297,3 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv )
return 0;
}
-/* my very simple minded implementation of getopt()
- * it's too sad that getopt() is not available everywhere
- * note: this is not a full POSIX conforming getopt()
- */
-int simple_getopt(char *argv[], const char *optstring)
-{
- char *arg = argv[optind];
-
- /* skip all response file arguments */
- if ( arg ) {
- while ( *arg == '@' )
- arg = argv[++optind];
-
- if ( arg[0] == '-' && arg[1] != '\0' ) {
- const char *popt;
- int c = arg[1];
- if ( (popt = strchr(optstring, c)) == NULL ) {
- optopt = c;
- if ( opterr )
- fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
- return '?';
- }
- if ( *(++popt) == ':') {
- if ( arg[2] != '\0' ) {
- optarg = ++arg;
- } else {
- optarg = argv[++optind];
- }
- } else {
- optarg = NULL;
- }
- ++optind;
- return c;
- }
- }
- return -1;
-}
-
diff --git a/tools/inc/tools/color.hxx b/tools/inc/tools/color.hxx
index 56d596453740..a99ad1dd11c4 100644
--- a/tools/inc/tools/color.hxx
+++ b/tools/inc/tools/color.hxx
@@ -78,7 +78,7 @@ typedef UINT32 ColorData;
#define COL_YELLOW RGB_COLORDATA( 0xFF, 0xFF, 0x00 )
#define COL_WHITE RGB_COLORDATA( 0xFF, 0xFF, 0xFF )
#define COL_TRANSPARENT TRGB_COLORDATA( 0xFF, 0xFF, 0xFF, 0xFF )
-#define COL_AUTO (UINT32)0xFFFFFFFF
+#define COL_AUTO (ColorData)0xFFFFFFFF
#define COL_AUTHOR1_DARK RGB_COLORDATA(198, 146, 0)
#define COL_AUTHOR1_NORMAL RGB_COLORDATA(255, 255, 158)
#define COL_AUTHOR1_LIGHT RGB_COLORDATA(255, 255, 195)
diff --git a/sd/source/ui/inc/printdlg.hrc b/tools/inc/tools/svlibrary.hxx
index 196724143b22..fa8ff7c8068b 100644
--- a/sd/source/ui/inc/printdlg.hrc
+++ b/tools/inc/tools/svlibrary.hxx
@@ -24,13 +24,19 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#define DLG_PRINT_WARNINGS 828
-#define FI_INFO 1
-#define RBT_SCALE 1
-#define RBT_POSTER 2
-#define RBT_CUT 3
-#define GRP_OPTIONS 1
-#define BTN_OK 1
-#define BTN_CANCEL 1
-#define BTN_HELP 1
+#ifndef _SVLIBRARY_HXX
+#define _SVLIBRARY_HXX
+
+#include "tools/toolsdllapi.h"
+
+#include <osl/module.hxx>
+#include <rtl/ustring.hxx>
+
+class TOOLS_DLLPUBLIC SvLibrary
+{
+public:
+ static bool LoadModule( osl::Module&, const rtl::OUString& rLibName, ::oslGenericFunction baseModule, ::sal_Int32 mode = SAL_LOADMODULE_DEFAULT );
+};
+
+#endif
diff --git a/tools/inc/tools/wintypes.hxx b/tools/inc/tools/wintypes.hxx
index 8f13af8fd842..7d6296b76e8c 100644
--- a/tools/inc/tools/wintypes.hxx
+++ b/tools/inc/tools/wintypes.hxx
@@ -215,6 +215,7 @@ typedef sal_Int64 WinBits;
// Window-Bits for CheckBox
#define WB_CBLINESTYLE ((WinBits)SAL_CONST_INT64(0x2000000000))
+#define WB_EARLYTOGGLE ((WinBits)SAL_CONST_INT64(0x4000000000))
// Window-Bits for Edit
#define WB_PASSWORD ((WinBits)0x01000000)
diff --git a/tools/prj/d.lst b/tools/prj/d.lst
index 6b4a99a3a676..e0291c2f8ad0 100644
--- a/tools/prj/d.lst
+++ b/tools/prj/d.lst
@@ -37,6 +37,7 @@ mkdir: %_DEST%\inc%_EXT%\bootstrp
..\inc\tools\postextstl.h %_DEST%\inc%_EXT%\tools\postextstl.h
..\inc\tools\preextstl.h %_DEST%\inc%_EXT%\tools\preextstl.h
+..\inc\tools\svlibrary.hxx %_DEST%\inc%_EXT%\tools\svlibrary.hxx
..\inc\tools\solarmutex.hxx %_DEST%\inc%_EXT%\tools\solarmutex.hxx
..\inc\tools\wintypes.hxx %_DEST%\inc%_EXT%\tools\wintypes.hxx
..\inc\tools\mapunit.hxx %_DEST%\inc%_EXT%\tools\mapunit.hxx
diff --git a/tools/source/generic/makefile.mk b/tools/source/generic/makefile.mk
index 5cdaa02065ae..07bab82f32b0 100644
--- a/tools/source/generic/makefile.mk
+++ b/tools/source/generic/makefile.mk
@@ -37,9 +37,10 @@ TARGET=gen
# --- Files --------------------------------------------------------
-EXCEPTIONSFILES = $(SLO)$/poly.obj $(OBJ)$/poly.obj
+EXCEPTIONSFILES = $(SLO)$/poly.obj $(OBJ)$/poly.obj $(SLO)$/svlibrary.obj
SLOFILES= $(SLO)$/toolsin.obj \
+ $(SLO)$/svlibrary.obj \
$(SLO)$/b3dtrans.obj \
$(SLO)$/link.obj \
$(SLO)$/bigint.obj \
diff --git a/tools/source/generic/svlibrary.cxx b/tools/source/generic/svlibrary.cxx
new file mode 100644
index 000000000000..6ebfd0086b5c
--- /dev/null
+++ b/tools/source/generic/svlibrary.cxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_tools.hxx"
+
+#include <tools/svlibrary.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/util/XMacroExpander.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/processfactory.hxx>
+#include <tools/string.hxx>
+#include <rtl/uri.hxx>
+
+using namespace com::sun::star;
+
+static uno::Sequence< rtl::OUString > GetMultiPaths_Impl()
+{
+ uno::Sequence< rtl::OUString > aRes;
+ uno::Sequence< rtl::OUString > aInternalPaths;
+ uno::Sequence< rtl::OUString > aUserPaths;
+
+ bool bSuccess = true;
+ uno::Reference< lang::XMultiServiceFactory > xMgr( comphelper::getProcessServiceFactory() );
+ if (xMgr.is())
+ {
+ try
+ {
+ String aInternal;
+ aInternal.AppendAscii("Libraries");
+ String aUser;
+ aUser.AppendAscii("Libraries");
+ aInternal .AppendAscii( "_internal" );
+ aUser .AppendAscii( "_user" );
+
+ uno::Reference< beans::XPropertySet > xPathSettings( xMgr->createInstance(
+ rtl::OUString::createFromAscii( "com.sun.star.util.PathSettings" ) ), uno::UNO_QUERY_THROW );
+ xPathSettings->getPropertyValue( aInternal ) >>= aInternalPaths;
+ xPathSettings->getPropertyValue( aUser ) >>= aUserPaths;
+ }
+ catch (uno::Exception &)
+ {
+ bSuccess = false;
+ }
+ }
+ if (bSuccess)
+ {
+ sal_Int32 nMaxEntries = aInternalPaths.getLength() + aUserPaths.getLength();
+ aRes.realloc( nMaxEntries );
+ rtl::OUString *pRes = aRes.getArray();
+ sal_Int32 nCount = 0; // number of actually added entries
+ for (int i = 0; i < 2; ++i)
+ {
+ const uno::Sequence< rtl::OUString > &rPathSeq = i == 0 ? aUserPaths : aInternalPaths;
+ const rtl::OUString *pPathSeq = rPathSeq.getConstArray();
+ for (sal_Int32 k = 0; k < rPathSeq.getLength(); ++k)
+ {
+ const bool bAddUser = (&rPathSeq == &aUserPaths);
+ const bool bAddInternal = (&rPathSeq == &aInternalPaths);
+ if ((bAddUser || bAddInternal) && pPathSeq[k].getLength() > 0)
+ pRes[ nCount++ ] = pPathSeq[k];
+ }
+ }
+ aRes.realloc( nCount );
+ }
+
+ return aRes;
+}
+
+bool SvLibrary::LoadModule( osl::Module& rModule, const rtl::OUString& rLibName, ::oslGenericFunction baseModule, ::sal_Int32 mode )
+{
+ static uno::Sequence < rtl::OUString > aPaths = GetMultiPaths_Impl();
+ bool bLoaded = false;
+
+ for (sal_Int32 n=0; n<aPaths.getLength(); n++)
+ {
+ rtl::OUString aMod = aPaths[n];
+ if ( aPaths[n].indexOfAsciiL("vnd.sun.star.expand",19) == 0)
+ {
+ uno::Reference< uno::XComponentContext > xComponentContext = comphelper::getProcessComponentContext();
+ uno::Reference< util::XMacroExpander > xMacroExpander;
+ xComponentContext->getValueByName(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.util.theMacroExpander") ) )
+ >>= xMacroExpander;
+
+ aMod = aMod.copy( sizeof("vnd.sun.star.expand:") -1 );
+ aMod = ::rtl::Uri::decode( aMod, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8 );
+ aMod = xMacroExpander->expandMacros( aMod );
+ }
+
+ aMod += ::rtl::OUString( sal_Unicode('/') );
+ aMod += rLibName;
+ bLoaded = rModule.load( aMod, mode );
+ if ( bLoaded )
+ break;
+ }
+
+ if (!bLoaded )
+ bLoaded = rModule.loadRelative( baseModule, rLibName, mode );
+
+ return bLoaded;
+}
diff --git a/ucb/source/ucp/file/shell.cxx b/ucb/source/ucp/file/shell.cxx
index 769e58c08819..f324c93b878f 100644
--- a/ucb/source/ucp/file/shell.cxx
+++ b/ucb/source/ucp/file/shell.cxx
@@ -33,6 +33,7 @@
#endif
#include "osl/diagnose.h"
+#include <rtl/uri.hxx>
#include <rtl/ustrbuf.hxx>
#include <osl/time.h>
#include <osl/file.hxx>
@@ -2054,9 +2055,14 @@ shell::copy_recursive( const rtl::OUString& srcUnqPath,
rtl::OUString newDstUnqPath = dstUnqPath;
rtl::OUString tit;
if( aFileStatus.isValid( FileStatusMask_FileName ) )
- tit = aFileStatus.getFileName();
+ tit = rtl::Uri::encode( aFileStatus.getFileName(),
+ rtl_UriCharClassPchar,
+ rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8 );
+
if( newDstUnqPath.lastIndexOf( sal_Unicode('/') ) != newDstUnqPath.getLength()-1 )
newDstUnqPath += rtl::OUString::createFromAscii( "/" );
+
newDstUnqPath += tit;
if ( newSrcUnqPath != dstUnqPath )
diff --git a/ucbhelper/source/provider/simpleauthenticationrequest.cxx b/ucbhelper/source/provider/simpleauthenticationrequest.cxx
index 8fc0cd4aec4f..8fc94cf88438 100644
--- a/ucbhelper/source/provider/simpleauthenticationrequest.cxx
+++ b/ucbhelper/source/provider/simpleauthenticationrequest.cxx
@@ -200,13 +200,13 @@ SimpleAuthenticationRequest::SimpleAuthenticationRequest(
//=========================================================================
void SimpleAuthenticationRequest::initialize(
- const ucb::URLAuthenticationRequest & rRequest,
- sal_Bool bCanSetRealm,
- sal_Bool bCanSetUserName,
- sal_Bool bCanSetPassword,
- sal_Bool bCanSetAccount,
- sal_Bool bAllowPersistentStoring,
- sal_Bool bAllowUseSystemCredentials )
+ const ucb::URLAuthenticationRequest & rRequest,
+ sal_Bool bCanSetRealm,
+ sal_Bool bCanSetUserName,
+ sal_Bool bCanSetPassword,
+ sal_Bool bCanSetAccount,
+ sal_Bool bAllowPersistentStoring,
+ sal_Bool bAllowUseSystemCredentials )
{
setRequest( uno::makeAny( rRequest ) );
diff --git a/unotools/source/misc/fontcvt.cxx b/unotools/source/misc/fontcvt.cxx
index 1a31272a483c..2bb682e4915b 100644
--- a/unotools/source/misc/fontcvt.cxx
+++ b/unotools/source/misc/fontcvt.cxx
@@ -295,18 +295,18 @@ static const sal_Unicode aWingDings2Tab[224] =
// F050
0xe52f, 0xe530, 0xe531, 0xe532,
0xe533, 0xe534, 0xe535, 0xe536,
- 0xe537, 0xe538, 0xe539, 0xe53a,
+ 0xe537, 0x203D, 0x203D, 0x203D,
0xe53b, 0xe53c, 0xe53d, 0xe53e,
// F060
0xe53f, 0xe540, 0xe541, 0xe542,
0xe543, 0xe544, 0xe545, 0xe546,
- 0xe547, 0xe548, 0xe549, 0xe54a,
- 0xe54b, 0xe54c, 0xe54d, 0xe54e,
+ 0xe547, 0x24EA, 0x2460, 0x2461,
+ 0x2462, 0x2463, 0x2464, 0x2465,
// F070
- 0xe54e, 0xe54f, 0xe550, 0xe551,
- 0xe552, 0xe553, 0xe554, 0xe555,
- 0xe556, 0xe557, 0xe558, 0xe559,
- 0xe55a, 0xe55b, 0xe55c, 0,
+ 0x2466, 0x2467, 0x2468, 0x2469,
+ 0xE453, 0x278A, 0x278B, 0x278C,
+ 0x278D, 0x278E, 0x278F, 0x2790,
+ 0x2791, 0x2792, 0x2793, 0,
// F080
0x2609, 0x25cb, 0x263d, 0x263e,
0xe55d, 0xe55e, 0xe55f, 0xe560,
@@ -343,7 +343,7 @@ static const sal_Unicode aWingDings2Tab[224] =
0xe5c1, 0xe5c2, 0xe5c3, 0xe5c4,
0xe5c5, 0xe5c6, 0xe5c7, 0xe5c8,
// F0f0
- 0xe5c9, 0xe5ca, 0xe5cb, 0xe5cc,
+ 0xe5c9, 0x2022, 0xe5cb, 0xe5cc,
0xe5cd, 0xe5ce, 0xe5cf, 0xe5d0,
0x203b, 0x2042, 0, 0,
0, 0, 0, 0
diff --git a/unotools/source/misc/fontdefs.cxx b/unotools/source/misc/fontdefs.cxx
index 4a3532b44659..c1c222755599 100644
--- a/unotools/source/misc/fontdefs.cxx
+++ b/unotools/source/misc/fontdefs.cxx
@@ -37,6 +37,7 @@ struct ImplLocalizedFontName
const sal_Unicode* mpLocalizedNames;
};
+// TODO: where did the 0,0 delimiters come from? A single 0 should suffice...
static sal_Unicode const aBatang[] = { 0xBC14, 0xD0D5, 0, 0 };
static sal_Unicode const aBatangChe[] = { 0xBC14, 0xD0D5, 0xCCB4, 0, 0 };
static sal_Unicode const aGungsuh[] = { 0xAD81, 0xC11C, 0, 0 };
@@ -72,6 +73,8 @@ static sal_Unicode const aMSGothic[] = { 'm','s', 0x30B4, 0x30B7, 0x30C3,
static sal_Unicode const aMSPGothic[] = { 'm','s','p', 0x30B4, 0x30B7, 0x30C3, 0x30AF, 0, 0 };
static sal_Unicode const aMSMincho[] = { 'm', 's', 0x660E, 0x671D, 0 };
static sal_Unicode const aMSPMincho[] = { 'm','s','p', 0x660E, 0x671D, 0 };
+static sal_Unicode const aMSYaHei[] = { 0x5FAE, 0x8F6F, 0x96C5, 0x9ED1, 0 };
+static sal_Unicode const aMSJhengHei[] = { 0x5FAE, 0x8EDF, 0x6B63, 0x9ED1, 0x9AD4, 0 };
static sal_Unicode const aMeiryo[] = { 0x30e1, 0x30a4, 0x30ea, 0x30aa, 0 };
static sal_Unicode const aHGMinchoL[] = { 'h','g', 0x660E, 0x671D, 'l', 0, 0 };
static sal_Unicode const aHGGothicB[] = { 'h','g', 0x30B4, 0x30B7, 0x30C3, 0x30AF, 'b', 0 };
@@ -180,7 +183,6 @@ static sal_Unicode const aHiraginoKakuGothicProN[] = { 0x30D2, 0x30E9, 0x30AE,
static sal_Unicode const aHiraginoMaruGothicPro[] = { 0x30D2, 0x30E9, 0x30AE, 0x30CE, 0x4E38, 0x30B4, 'p','r','o',0};
static sal_Unicode const aHiraginoMaruGothicProN[] = { 0x30D2, 0x30E9, 0x30AE, 0x30CE, 0x4E38, 0x30B4, 'p','r','o','n',0};
-
static ImplLocalizedFontName aImplLocalizedNamesList[] =
{
{ "batang", aBatang },
@@ -216,6 +218,8 @@ static ImplLocalizedFontName aImplLocalizedNamesList[] =
{ "mspgothic", aMSPGothic },
{ "msmincho", aMSMincho },
{ "mspmincho", aMSPMincho },
+{ "microsoftjhenghei", aMSJhengHei },
+{ "microsoftyahei", aMSYaHei },
{ "meiryo", aMeiryo },
{ "hgminchol", aHGMinchoL },
{ "hggothicb", aHGGothicB },
@@ -513,8 +517,6 @@ void AddTokenFontName( String& rName, const String& rNewToken )
ImplAppendFontToken( rName, rNewToken );
}
-
-
// =======================================================================
String GetSubsFontName( const String& rName, ULONG nFlags )
diff --git a/uui/prj/build.lst b/uui/prj/build.lst
index 0ebacfcb814f..dbe31cb1b57e 100644
--- a/uui/prj/build.lst
+++ b/uui/prj/build.lst
@@ -1,4 +1,4 @@
-uu uui : l10n svtools NULL
+uu uui : l10n vcl svtools NULL
uu uui usr1 - all uu_mkout NULL
uu uui\source nmake - all uu_source NULL
uu uui\util nmake - all uu_util uu_source NULL
diff --git a/uui/source/iahndl-authentication.cxx b/uui/source/iahndl-authentication.cxx
index 2b0182fd2a83..73fa61f31ff4 100644..100755
--- a/uui/source/iahndl-authentication.cxx
+++ b/uui/source/iahndl-authentication.cxx
@@ -26,18 +26,23 @@
************************************************************************/
#include "com/sun/star/task/DocumentPasswordRequest.hpp"
+#include "com/sun/star/task/DocumentPasswordRequest2.hpp"
#include "com/sun/star/task/DocumentMSPasswordRequest.hpp"
+#include "com/sun/star/task/DocumentMSPasswordRequest2.hpp"
#include "com/sun/star/task/MasterPasswordRequest.hpp"
#include "com/sun/star/task/XInteractionAbort.hpp"
#include "com/sun/star/task/XInteractionPassword.hpp"
+#include "com/sun/star/task/XInteractionPassword2.hpp"
#include "com/sun/star/task/XInteractionRetry.hpp"
#include "com/sun/star/ucb/XInteractionSupplyAuthentication2.hpp"
#include "com/sun/star/ucb/URLAuthenticationRequest.hpp"
+#include "osl/diagnose.h"
#include "rtl/digest.h"
#include "vos/mutex.hxx"
#include "tools/errcode.hxx"
#include "vcl/msgbox.hxx"
+#include "vcl/abstdlg.hxx"
#include "vcl/svapp.hxx"
#include "ids.hrc"
@@ -67,8 +72,7 @@ executeLoginDialog(
{
vos::OGuard aGuard(Application::GetSolarMutex());
- bool bAccount
- = (rInfo.GetFlags() & LOGINERROR_FLAG_MODIFY_ACCOUNT) != 0;
+ bool bAccount = (rInfo.GetFlags() & LOGINERROR_FLAG_MODIFY_ACCOUNT) != 0;
bool bSavePassword = rInfo.GetCanRememberPassword();
bool bCanUseSysCreds = rInfo.GetCanUseSystemCredentials();
@@ -88,15 +92,10 @@ executeLoginDialog(
if (!bCanUseSysCreds)
nFlags |= LF_NO_USESYSCREDS;
- std::auto_ptr< ResMgr > xManager(
- ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
+ std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
UniString aRealm(rRealm);
std::auto_ptr< LoginDialog > xDialog(
- new LoginDialog(pParent,
- nFlags,
- rInfo.GetServer(),
- &aRealm,
- xManager.get()));
+ new LoginDialog( pParent, nFlags, rInfo.GetServer(), &aRealm, xManager.get()));
if (rInfo.GetErrorText().Len() != 0)
xDialog->SetErrorText(rInfo.GetErrorText());
xDialog->SetName(rInfo.GetUserName());
@@ -118,8 +117,7 @@ executeLoginDialog(
}
if ( bCanUseSysCreds )
- xDialog->SetUseSystemCredentials(
- rInfo.GetIsUseSystemCredentials() );
+ xDialog->SetUseSystemCredentials( rInfo.GetIsUseSystemCredentials() );
rInfo.SetResult(xDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK :
ERRCODE_BUTTON_CANCEL);
@@ -521,7 +519,8 @@ executePasswordDialog(
LoginErrorInfo & rInfo,
task::PasswordRequestMode nMode,
::rtl::OUString aDocName,
- bool bMSCryptoMode)
+ bool bMSCryptoMode,
+ bool bIsPasswordToModify )
SAL_THROW((uno::RuntimeException))
{
try
@@ -532,23 +531,25 @@ executePasswordDialog(
ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
if( nMode == task::PasswordRequestMode_PASSWORD_CREATE )
{
- std::auto_ptr< PasswordCreateDialog > xDialog(
- new PasswordCreateDialog(pParent,
- xManager.get(),
- bMSCryptoMode));
+ const sal_uInt16 nMaxPasswdLen = bMSCryptoMode ? 15 : 0; // 0 -> allow any length
- rInfo.SetResult(xDialog->Execute()
- == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL);
- rInfo.SetPassword( xDialog->GetPassword() );
+ VclAbstractDialogFactory * pFact = VclAbstractDialogFactory::Create();
+ AbstractPasswordToOpenModifyDialog *pTmp = pFact->CreatePasswordToOpenModifyDialog( pParent, 0, nMaxPasswdLen, bIsPasswordToModify );
+ std::auto_ptr< AbstractPasswordToOpenModifyDialog > pDialog( pTmp );
+
+ rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
+ rInfo.SetPassword( pDialog->GetPasswordToOpen() );
+ rInfo.SetPasswordToModify( pDialog->GetPasswordToModify() );
+ rInfo.SetRecommendToOpenReadonly( pDialog->IsRecommendToOpenReadonly() );
}
else
{
- std::auto_ptr< PasswordDialog > xDialog(
- new PasswordDialog(pParent, nMode, xManager.get(), aDocName));
+ std::auto_ptr< PasswordDialog > pDialog(
+ new PasswordDialog( pParent, nMode, xManager.get(), aDocName, bIsPasswordToModify ) );
- rInfo.SetResult(xDialog->Execute()
- == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL);
- rInfo.SetPassword( xDialog->GetPassword() );
+ rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
+ rInfo.SetPassword( bIsPasswordToModify ? String() : pDialog->GetPassword() );
+ rInfo.SetPasswordToModify( bIsPasswordToModify ? pDialog->GetPassword() : String() );
}
}
catch (std::bad_alloc const &)
@@ -566,26 +567,36 @@ handlePasswordRequest_(
uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
rContinuations,
::rtl::OUString aDocumentName,
- bool bMSCryptoMode )
+ bool bMSCryptoMode,
+ bool bIsPasswordToModify )
SAL_THROW((uno::RuntimeException))
{
uno::Reference< task::XInteractionRetry > xRetry;
uno::Reference< task::XInteractionAbort > xAbort;
uno::Reference< task::XInteractionPassword > xPassword;
- getContinuations(rContinuations, &xRetry, &xAbort, &xPassword);
+ uno::Reference< task::XInteractionPassword2 > xPassword2;
+ getContinuations(rContinuations, &xRetry, &xAbort, &xPassword2, &xPassword);
+
+ if ( xPassword2.is() && !xPassword.is() )
+ xPassword.set( xPassword2, uno::UNO_QUERY_THROW );
+
LoginErrorInfo aInfo;
- executePasswordDialog(pParent,
- aInfo,
- nMode,
- aDocumentName,
- bMSCryptoMode);
+ executePasswordDialog( pParent, aInfo, nMode,
+ aDocumentName, bMSCryptoMode, bIsPasswordToModify );
switch (aInfo.GetResult())
{
case ERRCODE_BUTTON_OK:
+ OSL_ENSURE( !bIsPasswordToModify || xPassword2.is(), "PasswordToModify is requested, but there is no Interaction!" );
if (xPassword.is())
{
+ if (xPassword2.is())
+ {
+ xPassword2->setPasswordToModify( aInfo.GetPasswordToModify() );
+ xPassword2->setRecommendReadOnly( aInfo.IsRecommendToOpenReadonly() );
+ }
+
xPassword->setPassword(aInfo.GetPassword());
xPassword->select();
}
@@ -661,27 +672,66 @@ UUIInteractionHelper::handlePasswordRequest(
uno::Reference< task::XInteractionRequest > const & rRequest)
SAL_THROW((uno::RuntimeException))
{
+ // parameters to be filled for the call to handlePasswordRequest_
+ Window * pParent = getParentProperty();
+ task::PasswordRequestMode nMode = task::PasswordRequestMode_PASSWORD_ENTER;
+ uno::Sequence< uno::Reference< task::XInteractionContinuation > > const & rContinuations = rRequest->getContinuations();
+ ::rtl::OUString aDocumentName;
+ bool bMSCryptoMode = false;
+ bool bIsPasswordToModify = false;
+
+ bool bDoHandleRequest = false;
+
uno::Any aAnyRequest(rRequest->getRequest());
+ task::DocumentPasswordRequest2 aDocumentPasswordRequest2;
+ if (!bDoHandleRequest && (aAnyRequest >>= aDocumentPasswordRequest2))
+ {
+ nMode = aDocumentPasswordRequest2.Mode;
+ aDocumentName = aDocumentPasswordRequest2.Name;
+ OSL_ENSURE( bMSCryptoMode == false, "bMSCryptoMode should be false" );
+ bIsPasswordToModify = aDocumentPasswordRequest2.IsRequestPasswordToModify;
+
+ bDoHandleRequest = true;
+ }
+
task::DocumentPasswordRequest aDocumentPasswordRequest;
- if (aAnyRequest >>= aDocumentPasswordRequest)
+ if (!bDoHandleRequest && (aAnyRequest >>= aDocumentPasswordRequest))
{
- handlePasswordRequest_(getParentProperty(),
- aDocumentPasswordRequest.Mode,
- rRequest->getContinuations(),
- aDocumentPasswordRequest.Name,
- false /* bool bMSCryptoMode */);
- return true;
+ nMode = aDocumentPasswordRequest.Mode;
+ aDocumentName = aDocumentPasswordRequest.Name;
+ OSL_ENSURE( bMSCryptoMode == false, "bMSCryptoMode should be false" );
+ OSL_ENSURE( bIsPasswordToModify == false, "bIsPasswordToModify should be false" );
+
+ bDoHandleRequest = true;
+ }
+
+ task::DocumentMSPasswordRequest2 aDocumentMSPasswordRequest2;
+ if (!bDoHandleRequest && (aAnyRequest >>= aDocumentMSPasswordRequest2))
+ {
+ nMode = aDocumentMSPasswordRequest2.Mode;
+ aDocumentName = aDocumentMSPasswordRequest2.Name;
+ bMSCryptoMode = true;
+ bIsPasswordToModify = aDocumentMSPasswordRequest2.IsRequestPasswordToModify;
+
+ bDoHandleRequest = true;
}
task::DocumentMSPasswordRequest aDocumentMSPasswordRequest;
- if (aAnyRequest >>= aDocumentMSPasswordRequest)
+ if (!bDoHandleRequest && (aAnyRequest >>= aDocumentMSPasswordRequest))
{
- handlePasswordRequest_(getParentProperty(),
- aDocumentMSPasswordRequest.Mode,
- rRequest->getContinuations(),
- aDocumentMSPasswordRequest.Name,
- true /* bool bMSCryptoMode */);
+ nMode = aDocumentMSPasswordRequest.Mode;
+ aDocumentName = aDocumentMSPasswordRequest.Name;
+ bMSCryptoMode = true;
+ OSL_ENSURE( bIsPasswordToModify == false, "bIsPasswordToModify should be false" );
+
+ bDoHandleRequest = true;
+ }
+
+ if (bDoHandleRequest)
+ {
+ handlePasswordRequest_( pParent, nMode, rContinuations,
+ aDocumentName, bMSCryptoMode, bIsPasswordToModify );
return true;
}
@@ -692,9 +742,11 @@ UUIInteractionHelper::handlePasswordRequest(
aPasswordRequest.Mode,
rRequest->getContinuations(),
rtl::OUString(),
- false /* bool bMSCryptoMode */);
+ false /* bool bMSCryptoMode */,
+ false /* bool bIsPasswordToModify */);
return true;
}
return false;
}
+
diff --git a/uui/source/ids.hrc b/uui/source/ids.hrc
index 9bf5856bc270..796186fd5140 100644..100755
--- a/uui/source/ids.hrc
+++ b/uui/source/ids.hrc
@@ -35,126 +35,129 @@
#include "tools/errcode.hxx"
#endif
-#define RID_KEEP_PASSWORD (RID_UUI_START + 0)
-#define RID_SAVE_PASSWORD (RID_UUI_START + 1)
-#define DLG_UUI_LOGIN (RID_UUI_START + 2)
-#define DLG_COOKIES (RID_UUI_START + 3)
-#define STR_COOKIES_RECV_START (RID_UUI_START + 4)
-#define STR_COOKIES_RECV_COOKIES (RID_UUI_START + 5)
-#define STR_COOKIES_RECV_TITLE (RID_UUI_START + 6)
-#define STR_COOKIES_SEND_START (RID_UUI_START + 7)
-#define STR_COOKIES_SEND_COOKIES (RID_UUI_START + 8)
-#define STR_COOKIES_SEND_TITLE (RID_UUI_START + 9)
-#define DLG_FILTER_SELECT (RID_UUI_START + 10)
+#define RID_KEEP_PASSWORD (RID_UUI_START + 0)
+#define RID_SAVE_PASSWORD (RID_UUI_START + 1)
+#define DLG_UUI_LOGIN (RID_UUI_START + 2)
+#define DLG_COOKIES (RID_UUI_START + 3)
+#define STR_COOKIES_RECV_START (RID_UUI_START + 4)
+#define STR_COOKIES_RECV_COOKIES (RID_UUI_START + 5)
+#define STR_COOKIES_RECV_TITLE (RID_UUI_START + 6)
+#define STR_COOKIES_SEND_START (RID_UUI_START + 7)
+#define STR_COOKIES_SEND_COOKIES (RID_UUI_START + 8)
+#define STR_COOKIES_SEND_TITLE (RID_UUI_START + 9)
+#define DLG_FILTER_SELECT (RID_UUI_START + 10)
// RID_UUI_START + 11 moved to ERRCODE_UUI_WRONGMEDIUM
-#define DLG_UUI_MASTERPASSWORD (RID_UUI_START + 12)
-#define STR_ERROR_PASSWORDS_NOT_IDENTICAL (RID_UUI_START + 13)
-#define STR_ERROR_MASTERPASSWORD_WRONG (RID_UUI_START + 14)
+#define DLG_UUI_MASTERPASSWORD (RID_UUI_START + 12)
+#define STR_ERROR_PASSWORDS_NOT_IDENTICAL (RID_UUI_START + 13)
+#define STR_ERROR_MASTERPASSWORD_WRONG (RID_UUI_START + 14)
// RID_UUI_START + 15, 16, 17 are misused by syncaccess/source/ui/resids.hrc
-#define RID_UUI_ERRHDL (RID_UUI_START + 20)
-#define DLG_UUI_MASTERPASSWORD_CRT (RID_UUI_START + 21)
-#define DLG_UUI_PASSWORD (RID_UUI_START + 22)
-#define DLG_UUI_PASSWORD_CRT (RID_UUI_START + 23)
-#define STR_ERROR_PASSWORD_WRONG (RID_UUI_START + 24)
-#define STR_WARNING_BROKENSIGNATURE_TITLE (RID_UUI_START + 25)
-#define DLG_UUI_UNKNOWNAUTH (RID_UUI_START + 26)
-#define DLG_UUI_UNKNOWNAUTH_CRT (RID_UUI_START + 27)
-#define DLG_UUI_SSLWARN (RID_UUI_START + 28)
-#define DLG_UUI_SSLWARN_CRT (RID_UUI_START + 29)
-#define RID_XMLSECDLG_MACROWARN (RID_UUI_START + 30)
-#define STR_UNKNOWNUSER (RID_UUI_START + 31)
-#define STR_OPENLOCKED_TITLE (RID_UUI_START + 32)
-#define STR_OPENLOCKED_MSG (RID_UUI_START + 33)
-#define STR_OPENLOCKED_OPENREADONLY_BTN (RID_UUI_START + 34)
-#define STR_OPENLOCKED_OPENCOPY_BTN (RID_UUI_START + 35)
-#define STR_FILECHANGED_TITLE (RID_UUI_START + 36)
-#define STR_FILECHANGED_MSG (RID_UUI_START + 37)
-#define STR_FILECHANGED_SAVEANYWAY_BTN (RID_UUI_START + 38)
-#define STR_ALREADYOPEN_TITLE (RID_UUI_START + 39)
-#define STR_ALREADYOPEN_MSG (RID_UUI_START + 40)
-#define STR_ALREADYOPEN_READONLY_BTN (RID_UUI_START + 41)
-#define STR_ALREADYOPEN_OPEN_BTN (RID_UUI_START + 42)
-#define STR_LOCKFAILED_TITLE (RID_UUI_START + 43)
-#define STR_LOCKFAILED_MSG (RID_UUI_START + 44)
-#define STR_LOCKFAILED_DONTSHOWAGAIN (RID_UUI_START + 45)
-#define STR_TRYLATER_TITLE (RID_UUI_START + 46)
-#define STR_TRYLATER_MSG (RID_UUI_START + 47)
-#define STR_TRYLATER_RETRYSAVING_BTN (RID_UUI_START + 48)
-#define STR_TRYLATER_SAVEAS_BTN (RID_UUI_START + 49)
-#define STR_ALREADYOPEN_SAVE_MSG (RID_UUI_START + 50)
-#define STR_ALREADYOPEN_RETRY_SAVE_BTN (RID_UUI_START + 51)
-#define STR_ALREADYOPEN_SAVE_BTN (RID_UUI_START + 52)
-#define RID_DLG_NEWER_VERSION_WARNING (RID_UUI_START + 53)
-#define STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE (RID_UUI_START + 54)
+#define RID_UUI_ERRHDL (RID_UUI_START + 20)
+#define DLG_UUI_MASTERPASSWORD_CRT (RID_UUI_START + 21)
+#define DLG_UUI_PASSWORD (RID_UUI_START + 22)
+#define DLG_UUI_PASSWORD_CRT (RID_UUI_START + 23)
+#define STR_ERROR_PASSWORD_TO_OPEN_WRONG (RID_UUI_START + 24)
+#define STR_ERROR_PASSWORD_TO_MODIFY_WRONG (RID_UUI_START + 25)
+#define DLG_UUI_UNKNOWNAUTH (RID_UUI_START + 26)
+#define DLG_UUI_UNKNOWNAUTH_CRT (RID_UUI_START + 27)
+#define DLG_UUI_SSLWARN (RID_UUI_START + 28)
+#define DLG_UUI_SSLWARN_CRT (RID_UUI_START + 29)
+#define RID_XMLSECDLG_MACROWARN (RID_UUI_START + 30)
+#define STR_UNKNOWNUSER (RID_UUI_START + 31)
+#define STR_OPENLOCKED_TITLE (RID_UUI_START + 32)
+#define STR_OPENLOCKED_MSG (RID_UUI_START + 33)
+#define STR_OPENLOCKED_OPENREADONLY_BTN (RID_UUI_START + 34)
+#define STR_OPENLOCKED_OPENCOPY_BTN (RID_UUI_START + 35)
+#define STR_FILECHANGED_TITLE (RID_UUI_START + 36)
+#define STR_FILECHANGED_MSG (RID_UUI_START + 37)
+#define STR_FILECHANGED_SAVEANYWAY_BTN (RID_UUI_START + 38)
+#define STR_ALREADYOPEN_TITLE (RID_UUI_START + 39)
+#define STR_ALREADYOPEN_MSG (RID_UUI_START + 40)
+#define STR_ALREADYOPEN_READONLY_BTN (RID_UUI_START + 41)
+#define STR_ALREADYOPEN_OPEN_BTN (RID_UUI_START + 42)
+#define STR_LOCKFAILED_TITLE (RID_UUI_START + 43)
+#define STR_LOCKFAILED_MSG (RID_UUI_START + 44)
+#define STR_LOCKFAILED_DONTSHOWAGAIN (RID_UUI_START + 45)
+#define STR_TRYLATER_TITLE (RID_UUI_START + 46)
+#define STR_TRYLATER_MSG (RID_UUI_START + 47)
+#define STR_TRYLATER_RETRYSAVING_BTN (RID_UUI_START + 48)
+#define STR_TRYLATER_SAVEAS_BTN (RID_UUI_START + 49)
+#define STR_ALREADYOPEN_SAVE_MSG (RID_UUI_START + 50)
+#define STR_ALREADYOPEN_RETRY_SAVE_BTN (RID_UUI_START + 51)
+#define STR_ALREADYOPEN_SAVE_BTN (RID_UUI_START + 52)
+#define RID_DLG_NEWER_VERSION_WARNING (RID_UUI_START + 53)
+#define STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE (RID_UUI_START + 54)
+#define STR_WARNING_BROKENSIGNATURE_TITLE (RID_UUI_START + 55)
+#define STR_ENTER_PASSWORD_TO_OPEN (RID_UUI_START + 56)
+#define STR_ENTER_PASSWORD_TO_MODIFY (RID_UUI_START + 57)
-#define ERRCODE_UUI_IO_ABORT (ERRCODE_AREA_UUI + 0)
-#define ERRCODE_UUI_IO_ACCESSDENIED (ERRCODE_AREA_UUI + 1)
-#define ERRCODE_UUI_IO_ALREADYEXISTS (ERRCODE_AREA_UUI + 2)
-#define ERRCODE_UUI_IO_BADCRC (ERRCODE_AREA_UUI + 3)
-#define ERRCODE_UUI_IO_CANTCREATE (ERRCODE_AREA_UUI + 4)
-#define ERRCODE_UUI_IO_CANTREAD (ERRCODE_AREA_UUI + 5)
-#define ERRCODE_UUI_IO_CANTSEEK (ERRCODE_AREA_UUI + 6)
-#define ERRCODE_UUI_IO_CANTTELL (ERRCODE_AREA_UUI + 7)
-#define ERRCODE_UUI_IO_CANTWRITE (ERRCODE_AREA_UUI + 8)
-#define ERRCODE_UUI_IO_CURRENTDIR (ERRCODE_AREA_UUI + 9)
-#define ERRCODE_UUI_IO_NOTREADY (ERRCODE_AREA_UUI + 10)
-#define ERRCODE_UUI_IO_NOTSAMEDEVICE (ERRCODE_AREA_UUI + 11)
-#define ERRCODE_UUI_IO_GENERAL (ERRCODE_AREA_UUI + 12)
-#define ERRCODE_UUI_IO_INVALIDACCESS (ERRCODE_AREA_UUI + 13)
-#define ERRCODE_UUI_IO_INVALIDCHAR (ERRCODE_AREA_UUI + 14)
-#define ERRCODE_UUI_IO_INVALIDDEVICE (ERRCODE_AREA_UUI + 15)
-#define ERRCODE_UUI_IO_INVALIDLENGTH (ERRCODE_AREA_UUI + 16)
-#define ERRCODE_UUI_IO_INVALIDPARAMETER (ERRCODE_AREA_UUI + 17)
-#define ERRCODE_UUI_IO_ISWILDCARD (ERRCODE_AREA_UUI + 18)
-#define ERRCODE_UUI_IO_LOCKVIOLATION (ERRCODE_AREA_UUI + 19)
-#define ERRCODE_UUI_IO_MISPLACEDCHAR (ERRCODE_AREA_UUI + 20)
-#define ERRCODE_UUI_IO_NAMETOOLONG (ERRCODE_AREA_UUI + 21)
-#define ERRCODE_UUI_IO_NOTEXISTS (ERRCODE_AREA_UUI + 22)
-#define ERRCODE_UUI_IO_NOTEXISTSPATH (ERRCODE_AREA_UUI + 23)
-#define ERRCODE_UUI_IO_NOTSUPPORTED (ERRCODE_AREA_UUI + 24)
-#define ERRCODE_UUI_IO_NOTADIRECTORY (ERRCODE_AREA_UUI + 25)
-#define ERRCODE_UUI_IO_NOTAFILE (ERRCODE_AREA_UUI + 26)
-#define ERRCODE_UUI_IO_OUTOFSPACE (ERRCODE_AREA_UUI + 27)
-#define ERRCODE_UUI_IO_TOOMANYOPENFILES (ERRCODE_AREA_UUI + 28)
-#define ERRCODE_UUI_IO_OUTOFMEMORY (ERRCODE_AREA_UUI + 29)
-#define ERRCODE_UUI_IO_PENDING (ERRCODE_AREA_UUI + 30)
-#define ERRCODE_UUI_IO_RECURSIVE (ERRCODE_AREA_UUI + 31)
-#define ERRCODE_UUI_IO_UNKNOWN (ERRCODE_AREA_UUI + 32)
-#define ERRCODE_UUI_IO_WRITEPROTECTED (ERRCODE_AREA_UUI + 33)
-#define ERRCODE_UUI_IO_WRONGFORMAT (ERRCODE_AREA_UUI + 34)
-#define ERRCODE_UUI_IO_WRONGVERSION (ERRCODE_AREA_UUI + 35)
-#define ERRCODE_UUI_IO_NOTEXISTS_VOLUME (ERRCODE_AREA_UUI + 36)
-#define ERRCODE_UUI_IO_NOTEXISTS_FOLDER (ERRCODE_AREA_UUI + 37)
-#define ERRCODE_UUI_WRONGJAVA (ERRCODE_AREA_UUI + 38)
-#define ERRCODE_UUI_WRONGJAVA_VERSION (ERRCODE_AREA_UUI + 39)
-#define ERRCODE_UUI_WRONGJAVA_MIN (ERRCODE_AREA_UUI + 40)
-#define ERRCODE_UUI_WRONGJAVA_VERSION_MIN (ERRCODE_AREA_UUI + 41)
-#define ERRCODE_UUI_BADPARTNERSHIP (ERRCODE_AREA_UUI + 42)
-#define ERRCODE_UUI_BADPARTNERSHIP_NAME (ERRCODE_AREA_UUI + 43)
-#define ERRCODE_UUI_IO_NOTREADY_VOLUME (ERRCODE_AREA_UUI + 44)
-#define ERRCODE_UUI_IO_NOTREADY_REMOVABLE (ERRCODE_AREA_UUI + 45)
-#define ERRCODE_UUI_IO_NOTREADY_VOLUME_REMOVABLE (ERRCODE_AREA_UUI + 46)
-#define ERRCODE_UUI_WRONGMEDIUM (ERRCODE_AREA_UUI + 47)
-#define ERRCODE_UUI_IO_CANTCREATE_NONAME (ERRCODE_AREA_UUI + 48)
-#define ERRCODE_UUI_IO_TARGETALREADYEXISTS (ERRCODE_AREA_UUI + 49)
-#define ERRCODE_UUI_IO_UNSUPPORTEDOVERWRITE (ERRCODE_AREA_UUI + 50)
-#define ERRCODE_UUI_IO_BROKENPACKAGE (ERRCODE_AREA_UUI + 51)
-#define ERRCODE_UUI_IO_BROKENPACKAGE_CANTREPAIR (ERRCODE_AREA_UUI + 52)
-#define ERRCODE_UUI_CONFIGURATION_BROKENDATA_NOREMOVE (ERRCODE_AREA_UUI + 53)
-#define ERRCODE_UUI_CONFIGURATION_BROKENDATA_WITHREMOVE (ERRCODE_AREA_UUI + 54)
-#define ERRCODE_UUI_CONFIGURATION_BACKENDMISSING (ERRCODE_AREA_UUI + 55)
-#define ERRCODE_UUI_CONFIGURATION_BACKENDMISSING_WITHRECOVER (ERRCODE_AREA_UUI + 56)
-#define ERRCODE_UUI_INVALID_XFORMS_SUBMISSION_DATA (ERRCODE_AREA_UUI + 57)
-#define ERRCODE_UUI_IO_MODULESIZEEXCEEDED (ERRCODE_AREA_UUI + 58)
-#define ERRCODE_UUI_LOCKING_LOCKED (ERRCODE_AREA_UUI + 59)
-#define ERRCODE_UUI_LOCKING_LOCKED_SELF (ERRCODE_AREA_UUI + 60)
-#define ERRCODE_UUI_LOCKING_NOT_LOCKED (ERRCODE_AREA_UUI + 61)
-#define ERRCODE_UUI_LOCKING_LOCK_EXPIRED (ERRCODE_AREA_UUI + 62)
+#define ERRCODE_UUI_IO_ABORT (ERRCODE_AREA_UUI + 0)
+#define ERRCODE_UUI_IO_ACCESSDENIED (ERRCODE_AREA_UUI + 1)
+#define ERRCODE_UUI_IO_ALREADYEXISTS (ERRCODE_AREA_UUI + 2)
+#define ERRCODE_UUI_IO_BADCRC (ERRCODE_AREA_UUI + 3)
+#define ERRCODE_UUI_IO_CANTCREATE (ERRCODE_AREA_UUI + 4)
+#define ERRCODE_UUI_IO_CANTREAD (ERRCODE_AREA_UUI + 5)
+#define ERRCODE_UUI_IO_CANTSEEK (ERRCODE_AREA_UUI + 6)
+#define ERRCODE_UUI_IO_CANTTELL (ERRCODE_AREA_UUI + 7)
+#define ERRCODE_UUI_IO_CANTWRITE (ERRCODE_AREA_UUI + 8)
+#define ERRCODE_UUI_IO_CURRENTDIR (ERRCODE_AREA_UUI + 9)
+#define ERRCODE_UUI_IO_NOTREADY (ERRCODE_AREA_UUI + 10)
+#define ERRCODE_UUI_IO_NOTSAMEDEVICE (ERRCODE_AREA_UUI + 11)
+#define ERRCODE_UUI_IO_GENERAL (ERRCODE_AREA_UUI + 12)
+#define ERRCODE_UUI_IO_INVALIDACCESS (ERRCODE_AREA_UUI + 13)
+#define ERRCODE_UUI_IO_INVALIDCHAR (ERRCODE_AREA_UUI + 14)
+#define ERRCODE_UUI_IO_INVALIDDEVICE (ERRCODE_AREA_UUI + 15)
+#define ERRCODE_UUI_IO_INVALIDLENGTH (ERRCODE_AREA_UUI + 16)
+#define ERRCODE_UUI_IO_INVALIDPARAMETER (ERRCODE_AREA_UUI + 17)
+#define ERRCODE_UUI_IO_ISWILDCARD (ERRCODE_AREA_UUI + 18)
+#define ERRCODE_UUI_IO_LOCKVIOLATION (ERRCODE_AREA_UUI + 19)
+#define ERRCODE_UUI_IO_MISPLACEDCHAR (ERRCODE_AREA_UUI + 20)
+#define ERRCODE_UUI_IO_NAMETOOLONG (ERRCODE_AREA_UUI + 21)
+#define ERRCODE_UUI_IO_NOTEXISTS (ERRCODE_AREA_UUI + 22)
+#define ERRCODE_UUI_IO_NOTEXISTSPATH (ERRCODE_AREA_UUI + 23)
+#define ERRCODE_UUI_IO_NOTSUPPORTED (ERRCODE_AREA_UUI + 24)
+#define ERRCODE_UUI_IO_NOTADIRECTORY (ERRCODE_AREA_UUI + 25)
+#define ERRCODE_UUI_IO_NOTAFILE (ERRCODE_AREA_UUI + 26)
+#define ERRCODE_UUI_IO_OUTOFSPACE (ERRCODE_AREA_UUI + 27)
+#define ERRCODE_UUI_IO_TOOMANYOPENFILES (ERRCODE_AREA_UUI + 28)
+#define ERRCODE_UUI_IO_OUTOFMEMORY (ERRCODE_AREA_UUI + 29)
+#define ERRCODE_UUI_IO_PENDING (ERRCODE_AREA_UUI + 30)
+#define ERRCODE_UUI_IO_RECURSIVE (ERRCODE_AREA_UUI + 31)
+#define ERRCODE_UUI_IO_UNKNOWN (ERRCODE_AREA_UUI + 32)
+#define ERRCODE_UUI_IO_WRITEPROTECTED (ERRCODE_AREA_UUI + 33)
+#define ERRCODE_UUI_IO_WRONGFORMAT (ERRCODE_AREA_UUI + 34)
+#define ERRCODE_UUI_IO_WRONGVERSION (ERRCODE_AREA_UUI + 35)
+#define ERRCODE_UUI_IO_NOTEXISTS_VOLUME (ERRCODE_AREA_UUI + 36)
+#define ERRCODE_UUI_IO_NOTEXISTS_FOLDER (ERRCODE_AREA_UUI + 37)
+#define ERRCODE_UUI_WRONGJAVA (ERRCODE_AREA_UUI + 38)
+#define ERRCODE_UUI_WRONGJAVA_VERSION (ERRCODE_AREA_UUI + 39)
+#define ERRCODE_UUI_WRONGJAVA_MIN (ERRCODE_AREA_UUI + 40)
+#define ERRCODE_UUI_WRONGJAVA_VERSION_MIN (ERRCODE_AREA_UUI + 41)
+#define ERRCODE_UUI_BADPARTNERSHIP (ERRCODE_AREA_UUI + 42)
+#define ERRCODE_UUI_BADPARTNERSHIP_NAME (ERRCODE_AREA_UUI + 43)
+#define ERRCODE_UUI_IO_NOTREADY_VOLUME (ERRCODE_AREA_UUI + 44)
+#define ERRCODE_UUI_IO_NOTREADY_REMOVABLE (ERRCODE_AREA_UUI + 45)
+#define ERRCODE_UUI_IO_NOTREADY_VOLUME_REMOVABLE (ERRCODE_AREA_UUI + 46)
+#define ERRCODE_UUI_WRONGMEDIUM (ERRCODE_AREA_UUI + 47)
+#define ERRCODE_UUI_IO_CANTCREATE_NONAME (ERRCODE_AREA_UUI + 48)
+#define ERRCODE_UUI_IO_TARGETALREADYEXISTS (ERRCODE_AREA_UUI + 49)
+#define ERRCODE_UUI_IO_UNSUPPORTEDOVERWRITE (ERRCODE_AREA_UUI + 50)
+#define ERRCODE_UUI_IO_BROKENPACKAGE (ERRCODE_AREA_UUI + 51)
+#define ERRCODE_UUI_IO_BROKENPACKAGE_CANTREPAIR (ERRCODE_AREA_UUI + 52)
+#define ERRCODE_UUI_CONFIGURATION_BROKENDATA_NOREMOVE (ERRCODE_AREA_UUI + 53)
+#define ERRCODE_UUI_CONFIGURATION_BROKENDATA_WITHREMOVE (ERRCODE_AREA_UUI + 54)
+#define ERRCODE_UUI_CONFIGURATION_BACKENDMISSING (ERRCODE_AREA_UUI + 55)
+#define ERRCODE_UUI_CONFIGURATION_BACKENDMISSING_WITHRECOVER (ERRCODE_AREA_UUI + 56)
+#define ERRCODE_UUI_INVALID_XFORMS_SUBMISSION_DATA (ERRCODE_AREA_UUI + 57)
+#define ERRCODE_UUI_IO_MODULESIZEEXCEEDED (ERRCODE_AREA_UUI + 58)
+#define ERRCODE_UUI_LOCKING_LOCKED (ERRCODE_AREA_UUI + 59)
+#define ERRCODE_UUI_LOCKING_LOCKED_SELF (ERRCODE_AREA_UUI + 60)
+#define ERRCODE_UUI_LOCKING_NOT_LOCKED (ERRCODE_AREA_UUI + 61)
+#define ERRCODE_UUI_LOCKING_LOCK_EXPIRED (ERRCODE_AREA_UUI + 62)
-#define ERRCODE_AREA_UUI_UNKNOWNAUTH 25000
-#define SSLWARN_TYPE_DOMAINMISMATCH 10
-#define SSLWARN_TYPE_EXPIRED 20
-#define SSLWARN_TYPE_INVALID 30
+#define ERRCODE_AREA_UUI_UNKNOWNAUTH 25000
+#define SSLWARN_TYPE_DOMAINMISMATCH 10
+#define SSLWARN_TYPE_EXPIRED 20
+#define SSLWARN_TYPE_INVALID 30
#define ERRCODE_UUI_UNKNOWNAUTH_UNTRUSTED (ERRCODE_AREA_UUI_UNKNOWNAUTH + 1)
@@ -167,17 +170,25 @@
#define ERRCODE_UUI_SSLWARN_INVALID_1 (ERRCODE_AREA_UUI_UNKNOWNAUTH + SSLWARN_TYPE_INVALID + 1)
#define TITLE_UUI_SSLWARN_INVALID (ERRCODE_AREA_UUI_UNKNOWNAUTH + SSLWARN_TYPE_INVALID + 3)
-#define HID_DLG_LOGIN (HID_UUI_START + 0)
-#define HID_DLG_COOKIES (HID_UUI_START + 1)
-#define HID_DLG_MASTERPASSWORD_UUI (HID_UUI_START+2)
-#define HID_DLG_MASTERPASSWORD_CRT (HID_UUI_START+3)
-#define HID_DLG_FILTER_SELECT (HID_UUI_START+4)
-#define HID_DLG_PASSWORD_UUI (HID_UUI_START+5)
-#define HID_DLG_PASSWORD_CRT (HID_UUI_START+6)
-#define HID_DLG_UNKNOWNAUTH_UUI (HID_UUI_START+7)
-#define HID_DLG_SSLWARN_UUI (HID_UUI_START+8)
-#define HID_XMLSECDLG_MACROWARN (HID_UUI_START+9)
-#define HID_DLG_NEWERVERSIONWARNING (HID_UUI_START+10)
+#define HID_DLG_LOGIN (HID_UUI_START + 0)
+#define HID_DLG_COOKIES (HID_UUI_START + 1)
+#define HID_DLG_MASTERPASSWORD_UUI (HID_UUI_START + 2)
+#define HID_DLG_MASTERPASSWORD_CRT (HID_UUI_START + 3)
+#define HID_DLG_FILTER_SELECT (HID_UUI_START + 4)
+#define HID_DLG_PASSWORD_UUI (HID_UUI_START + 5)
+#define HID_DLG_PASSWORD_CRT (HID_UUI_START + 6)
+#define HID_DLG_UNKNOWNAUTH_UUI (HID_UUI_START + 7)
+#define HID_DLG_SSLWARN_UUI (HID_UUI_START + 8)
+#define HID_XMLSECDLG_MACROWARN (HID_UUI_START + 9)
+#define HID_DLG_NEWERVERSIONWARNING (HID_UUI_START +10)
+
+#define HID_LOGIN_DLG_PATH (HID_UUI_START +11)
+#define HID_LOGIN_DLG_BROWSE (HID_UUI_START +12)
+#define HID_LOGIN_DLG_USER_NAME (HID_UUI_START +13)
+#define HID_LOGIN_DLG_PASSWORD (HID_UUI_START +14)
+#define HID_LOGIN_DLG_ACCOUNT (HID_UUI_START +15)
+#define HID_LOGIN_DLG_REMEMBER_PASSWORD (HID_UUI_START +16)
+#define HID_LOGIN_DLG_USE_SYSTEM_CREDENTIALS (HID_UUI_START +17)
// HID_UUI_END (aka HID_CHAOS_NEW_DATABASE) is reserved in
// sfx2/util/hidother.src
diff --git a/uui/source/logindlg.cxx b/uui/source/logindlg.cxx
index 53ea243c9577..d7ded58b5dde 100644..100755
--- a/uui/source/logindlg.cxx
+++ b/uui/source/logindlg.cxx
@@ -47,12 +47,20 @@
//............................................................................
//............................................................................
+static void lcl_Move( Window &rWin, long nOffset )
+{
+ Point aTmp( rWin.GetPosPixel() );
+ aTmp.Y() -= nOffset;
+ rWin.SetPosPixel( aTmp );
+}
+
+
void LoginDialog::HideControls_Impl( USHORT nFlags )
{
- FASTBOOL bPathHide = FALSE;
- FASTBOOL bErrorHide = FALSE;
- FASTBOOL bAccountHide = FALSE;
- FASTBOOL bUseSysCredsHide = FALSE;
+ bool bPathHide = FALSE;
+ bool bErrorHide = FALSE;
+ bool bAccountHide = FALSE;
+ bool bUseSysCredsHide = FALSE;
if ( ( nFlags & LF_NO_PATH ) == LF_NO_PATH )
{
@@ -63,9 +71,8 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
}
else if ( ( nFlags & LF_PATH_READONLY ) == LF_PATH_READONLY )
{
- aPathED.Hide();
- aPathInfo.Show();
- aPathBtn.Hide();
+ aPathED.Enable( FALSE );
+ aPathBtn.Enable( FALSE );
}
if ( ( nFlags & LF_NO_USERNAME ) == LF_NO_USERNAME )
@@ -75,8 +82,7 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
}
else if ( ( nFlags & LF_USERNAME_READONLY ) == LF_USERNAME_READONLY )
{
- aNameED.Hide();
- aNameInfo.Show();
+ aNameED.Enable( FALSE );
}
if ( ( nFlags & LF_NO_PASSWORD ) == LF_NO_PASSWORD )
@@ -91,7 +97,8 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
if ( ( nFlags & LF_NO_ERRORTEXT ) == LF_NO_ERRORTEXT )
{
aErrorInfo.Hide();
- aErrorGB.Hide();
+ aErrorFT.Hide();
+ aLogin1FL.Hide();
bErrorHide = TRUE;
}
@@ -110,53 +117,26 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
if ( bErrorHide )
{
- long nOffset = aLoginGB.GetPosPixel().Y() -
- aErrorGB.GetPosPixel().Y();
- Point aNewPnt = aRequestInfo.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aRequestInfo.SetPosPixel( aNewPnt );
- aNewPnt = aPathFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathFT.SetPosPixel( aNewPnt );
- aNewPnt = aPathED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathED.SetPosPixel( aNewPnt );
- aNewPnt = aPathInfo.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathInfo.SetPosPixel( aNewPnt );
- aNewPnt = aPathBtn.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPathBtn.SetPosPixel( aNewPnt );
- aNewPnt = aNameFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aNameFT.SetPosPixel( aNewPnt );
- aNewPnt = aNameED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aNameED.SetPosPixel( aNewPnt );
- aNewPnt = aNameInfo.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aNameInfo.SetPosPixel( aNewPnt );
- aNewPnt = aPasswordFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPasswordFT.SetPosPixel( aNewPnt );
- aNewPnt = aPasswordED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aPasswordED.SetPosPixel( aNewPnt );
- aNewPnt = aAccountFT.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aAccountFT.SetPosPixel( aNewPnt );
- aNewPnt = aAccountED.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aAccountED.SetPosPixel( aNewPnt );
- aNewPnt = aSavePasswdBtn.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aSavePasswdBtn.SetPosPixel( aNewPnt );
- aNewPnt = aUseSysCredsCB.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aUseSysCredsCB.SetPosPixel( aNewPnt );
- aNewPnt = aLoginGB.GetPosPixel();
- aNewPnt.Y() -= nOffset;
- aLoginGB.SetPosPixel( aNewPnt );
+ long nOffset = aRequestInfo.GetPosPixel().Y() -
+ aErrorFT.GetPosPixel().Y();
+ lcl_Move( aRequestInfo, nOffset );
+ lcl_Move( aLogin2FL, nOffset );
+ lcl_Move( aPathFT, nOffset );
+ lcl_Move( aPathED, nOffset );
+ lcl_Move( aPathBtn, nOffset );
+ lcl_Move( aNameFT, nOffset );
+ lcl_Move( aNameED, nOffset );
+ lcl_Move( aPasswordFT, nOffset );
+ lcl_Move( aPasswordED, nOffset );
+ lcl_Move( aAccountFT, nOffset );
+ lcl_Move( aAccountED, nOffset );
+ lcl_Move( aSavePasswdBtn, nOffset );
+ lcl_Move( aUseSysCredsCB, nOffset );
+ lcl_Move( aButtonsFL, nOffset );
+ lcl_Move( aOKBtn, nOffset );
+ lcl_Move( aCancelBtn, nOffset );
+ lcl_Move( aHelpBtn, nOffset );
+
Size aNewSiz = GetSizePixel();
aNewSiz.Height() -= nOffset;
SetSizePixel( aNewSiz );
@@ -166,24 +146,19 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
{
long nOffset = aNameED.GetPosPixel().Y() -
aPathED.GetPosPixel().Y();
+ lcl_Move( aNameFT, nOffset );
+ lcl_Move( aNameED, nOffset );
+ lcl_Move( aPasswordFT, nOffset );
+ lcl_Move( aPasswordED, nOffset );
+ lcl_Move( aAccountFT, nOffset );
+ lcl_Move( aAccountED, nOffset );
+ lcl_Move( aSavePasswdBtn, nOffset );
+ lcl_Move( aUseSysCredsCB, nOffset );
+ lcl_Move( aButtonsFL, nOffset );
+ lcl_Move( aOKBtn, nOffset );
+ lcl_Move( aCancelBtn, nOffset );
+ lcl_Move( aHelpBtn, nOffset );
- Point aTmpPnt1 = aNameFT.GetPosPixel();
- Point aTmpPnt2 = aPasswordFT.GetPosPixel();
- aNameFT.SetPosPixel( aPathFT.GetPosPixel() );
- aPasswordFT.SetPosPixel( aTmpPnt1 );
- aAccountFT.SetPosPixel( aTmpPnt2 );
- aTmpPnt1 = aNameED.GetPosPixel();
- aTmpPnt2 = aPasswordED.GetPosPixel();
- aNameED.SetPosPixel( aPathED.GetPosPixel() );
- aPasswordED.SetPosPixel( aTmpPnt1 );
- aAccountED.SetPosPixel( aTmpPnt2 );
- aNameInfo.SetPosPixel( aPathInfo.GetPosPixel() );
- aTmpPnt1 = aSavePasswdBtn.GetPosPixel();
- aTmpPnt1.Y() -= nOffset;
- aSavePasswdBtn.SetPosPixel( aTmpPnt1 );
- aTmpPnt1 = aUseSysCredsCB.GetPosPixel();
- aTmpPnt1.Y() -= nOffset;
- aUseSysCredsCB.SetPosPixel( aTmpPnt1 );
Size aNewSz = GetSizePixel();
aNewSz.Height() -= nOffset;
SetSizePixel( aNewSz );
@@ -191,14 +166,15 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
if ( bAccountHide )
{
- long nOffset = aAccountED.GetPosPixel().Y() - aPasswordED.GetPosPixel().Y();
-
- Point aTmpPnt = aSavePasswdBtn.GetPosPixel();
- aTmpPnt.Y() -= nOffset;
- aSavePasswdBtn.SetPosPixel( aTmpPnt );
- aTmpPnt = aUseSysCredsCB.GetPosPixel();
- aTmpPnt.Y() -= nOffset;
- aUseSysCredsCB.SetPosPixel( aTmpPnt );
+ long nOffset = aAccountED.GetPosPixel().Y() -
+ aPasswordED.GetPosPixel().Y();
+ lcl_Move( aSavePasswdBtn, nOffset );
+ lcl_Move( aUseSysCredsCB, nOffset );
+ lcl_Move( aButtonsFL, nOffset );
+ lcl_Move( aOKBtn, nOffset );
+ lcl_Move( aCancelBtn, nOffset );
+ lcl_Move( aHelpBtn, nOffset );
+
Size aNewSz = GetSizePixel();
aNewSz.Height() -= nOffset;
SetSizePixel( aNewSz );
@@ -208,6 +184,10 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
{
long nOffset = aUseSysCredsCB.GetPosPixel().Y() -
aSavePasswdBtn.GetPosPixel().Y();
+ lcl_Move( aButtonsFL, nOffset );
+ lcl_Move( aOKBtn, nOffset );
+ lcl_Move( aCancelBtn, nOffset );
+ lcl_Move( aHelpBtn, nOffset );
Size aNewSz = GetSizePixel();
aNewSz.Height() -= nOffset;
@@ -219,15 +199,13 @@ void LoginDialog::HideControls_Impl( USHORT nFlags )
void LoginDialog::EnableUseSysCredsControls_Impl( BOOL bUseSysCredsEnabled )
{
aErrorInfo.Enable( !bUseSysCredsEnabled );
- aErrorGB.Enable( !bUseSysCredsEnabled );
+ aErrorFT.Enable( !bUseSysCredsEnabled );
aRequestInfo.Enable( !bUseSysCredsEnabled );
aPathFT.Enable( !bUseSysCredsEnabled );
aPathED.Enable( !bUseSysCredsEnabled );
- aPathInfo.Enable( !bUseSysCredsEnabled );
aPathBtn.Enable( !bUseSysCredsEnabled );
aNameFT.Enable( !bUseSysCredsEnabled );
aNameED.Enable( !bUseSysCredsEnabled );
- aNameInfo.Enable( !bUseSysCredsEnabled );
aPasswordFT.Enable( !bUseSysCredsEnabled );
aPasswordED.Enable( !bUseSysCredsEnabled );
aAccountFT.Enable( !bUseSysCredsEnabled );
@@ -282,23 +260,23 @@ LoginDialog::LoginDialog
ModalDialog( pParent, ResId( DLG_UUI_LOGIN, *pResMgr ) ),
- aErrorInfo ( this, ResId( INFO_LOGIN_ERROR, *pResMgr ) ),
- aErrorGB ( this, ResId( GB_LOGIN_ERROR, *pResMgr ) ),
- aRequestInfo ( this, ResId( INFO_LOGIN_REQUEST, *pResMgr ) ),
+ aErrorFT ( this, ResId( FT_LOGIN_ERROR, *pResMgr ) ),
+ aErrorInfo ( this, ResId( FT_INFO_LOGIN_ERROR, *pResMgr ) ),
+ aLogin1FL ( this, ResId( FL_LOGIN_1, *pResMgr ) ),
+ aRequestInfo ( this, ResId( FT_INFO_LOGIN_REQUEST, *pResMgr ) ),
+ aLogin2FL ( this, ResId( FL_LOGIN_2, *pResMgr ) ),
aPathFT ( this, ResId( FT_LOGIN_PATH, *pResMgr ) ),
aPathED ( this, ResId( ED_LOGIN_PATH, *pResMgr ) ),
- aPathInfo ( this, ResId( INFO_LOGIN_PATH, *pResMgr ) ),
aPathBtn ( this, ResId( BTN_LOGIN_PATH, *pResMgr ) ),
aNameFT ( this, ResId( FT_LOGIN_USERNAME, *pResMgr ) ),
aNameED ( this, ResId( ED_LOGIN_USERNAME, *pResMgr ) ),
- aNameInfo ( this, ResId( INFO_LOGIN_USERNAME, *pResMgr ) ),
aPasswordFT ( this, ResId( FT_LOGIN_PASSWORD, *pResMgr ) ),
aPasswordED ( this, ResId( ED_LOGIN_PASSWORD, *pResMgr ) ),
aAccountFT ( this, ResId( FT_LOGIN_ACCOUNT, *pResMgr ) ),
aAccountED ( this, ResId( ED_LOGIN_ACCOUNT, *pResMgr ) ),
aSavePasswdBtn ( this, ResId( CB_LOGIN_SAVEPASSWORD, *pResMgr ) ),
aUseSysCredsCB ( this, ResId( CB_LOGIN_USESYSCREDS, *pResMgr ) ),
- aLoginGB ( this, ResId( GB_LOGIN_LOGIN, *pResMgr ) ),
+ aButtonsFL ( this, ResId( FL_BUTTONS, *pResMgr ) ),
aOKBtn ( this, ResId( BTN_LOGIN_OK, *pResMgr ) ),
aCancelBtn ( this, ResId( BTN_LOGIN_CANCEL, *pResMgr ) ),
aHelpBtn ( this, ResId( BTN_LOGIN_HELP, *pResMgr ) )
@@ -333,10 +311,8 @@ LoginDialog::LoginDialog
// -----------------------------------------------------------------------
-void LoginDialog::SetName( const String& rNewName )
+LoginDialog::~LoginDialog()
{
- aNameED.SetText( rNewName );
- aNameInfo.SetText( rNewName );
}
// -----------------------------------------------------------------------
diff --git a/uui/source/logindlg.hrc b/uui/source/logindlg.hrc
index 68162fb620cd..b541740bd768 100644..100755
--- a/uui/source/logindlg.hrc
+++ b/uui/source/logindlg.hrc
@@ -30,24 +30,24 @@
//============================================================================
-#define INFO_LOGIN_ERROR 10
-#define GB_LOGIN_ERROR 11
+#define FT_INFO_LOGIN_ERROR 10
+#define FT_LOGIN_ERROR 11
-#define INFO_LOGIN_REQUEST 20
+#define FT_INFO_LOGIN_REQUEST 20
#define FT_LOGIN_PATH 21
#define ED_LOGIN_PATH 22
-#define INFO_LOGIN_PATH 23
-#define BTN_LOGIN_PATH 24
-#define FT_LOGIN_USERNAME 25
-#define ED_LOGIN_USERNAME 26
-#define INFO_LOGIN_USERNAME 27
-#define FT_LOGIN_PASSWORD 28
-#define ED_LOGIN_PASSWORD 29
-#define FT_LOGIN_ACCOUNT 30
-#define ED_LOGIN_ACCOUNT 31
-#define CB_LOGIN_SAVEPASSWORD 32
-#define GB_LOGIN_LOGIN 33
-#define CB_LOGIN_USESYSCREDS 34
+#define BTN_LOGIN_PATH 23
+#define FT_LOGIN_USERNAME 24
+#define ED_LOGIN_USERNAME 25
+#define FT_LOGIN_PASSWORD 26
+#define ED_LOGIN_PASSWORD 27
+#define FT_LOGIN_ACCOUNT 28
+#define ED_LOGIN_ACCOUNT 29
+#define CB_LOGIN_SAVEPASSWORD 30
+#define CB_LOGIN_USESYSCREDS 31
+#define FL_LOGIN_1 32
+#define FL_LOGIN_2 33
+#define FL_BUTTONS 34
#define BTN_LOGIN_OK 50
#define BTN_LOGIN_CANCEL 51
diff --git a/uui/source/logindlg.hxx b/uui/source/logindlg.hxx
index 0a4637d89251..05ba8e8d55d4 100644..100755
--- a/uui/source/logindlg.hxx
+++ b/uui/source/logindlg.hxx
@@ -53,23 +53,23 @@
//============================================================================
class LoginDialog : public ModalDialog
{
+ FixedText aErrorFT;
FixedInfo aErrorInfo;
- FixedLine aErrorGB;
+ FixedLine aLogin1FL;
FixedInfo aRequestInfo;
+ FixedLine aLogin2FL;
FixedText aPathFT;
Edit aPathED;
- FixedInfo aPathInfo;
PushButton aPathBtn;
FixedText aNameFT;
Edit aNameED;
- FixedInfo aNameInfo;
FixedText aPasswordFT;
Edit aPasswordED;
FixedText aAccountFT;
Edit aAccountED;
CheckBox aSavePasswdBtn;
CheckBox aUseSysCredsCB;
- FixedLine aLoginGB;
+ FixedLine aButtonsFL;
OKButton aOKBtn;
CancelButton aCancelBtn;
HelpButton aHelpBtn;
@@ -85,36 +85,30 @@ public:
LoginDialog( Window* pParent, USHORT nFlags,
const String& rServer, const String* pRealm,
ResMgr * pResMgr );
+ virtual ~LoginDialog();
- String GetPath() const { return aPathED.GetText(); }
- void SetPath( const String& rNewPath )
- { aPathED.SetText( rNewPath );
- aPathInfo.SetText( rNewPath );}
- String GetName() const { return aNameED.GetText(); }
- void SetName( const String& rNewName );
- String GetPassword() const { return aPasswordED.GetText(); }
- void SetPassword( const String& rNew )
- { aPasswordED.SetText( rNew ); }
- String GetAccount() const { return aAccountED.GetText(); }
- void SetAccount( const String& rNew )
- { aAccountED.SetText( rNew ); }
- BOOL IsSavePassword() const
- { return aSavePasswdBtn.IsChecked(); }
- void SetSavePassword( BOOL bSave )
- { aSavePasswdBtn.Check( bSave ); }
- void SetSavePasswordText( const String& rTxt )
- { aSavePasswdBtn.SetText( rTxt ); }
- BOOL IsUseSystemCredentials() const
- { return aUseSysCredsCB.IsChecked(); }
+ String GetPath() const { return aPathED.GetText(); }
+ void SetPath( const String& rNewPath ) { aPathED.SetText( rNewPath ); }
+ String GetName() const { return aNameED.GetText(); }
+ void SetName( const String& rNewName ) { aNameED.SetText( rNewName ); }
+ String GetPassword() const { return aPasswordED.GetText(); }
+ void SetPassword( const String& rNew ) { aPasswordED.SetText( rNew ); }
+ String GetAccount() const { return aAccountED.GetText(); }
+ void SetAccount( const String& rNew ) { aAccountED.SetText( rNew ); }
+ BOOL IsSavePassword() const { return aSavePasswdBtn.IsChecked(); }
+ void SetSavePassword( BOOL bSave ) { aSavePasswdBtn.Check( bSave ); }
+ void SetSavePasswordText( const String& rTxt ) { aSavePasswdBtn.SetText( rTxt ); }
+ BOOL IsUseSystemCredentials() const { return aUseSysCredsCB.IsChecked(); }
void SetUseSystemCredentials( BOOL bUse );
- void SetErrorText( const String& rTxt )
- { aErrorInfo.SetText( rTxt ); }
- void SetLoginRequestText( const String& rTxt )
- { aRequestInfo.SetText( rTxt ); }
+ void SetErrorText( const String& rTxt ) { aErrorInfo.SetText( rTxt ); }
+ void SetLoginRequestText( const String& rTxt ) { aRequestInfo.SetText( rTxt ); }
void ClearPassword();
void ClearAccount();
};
+// -----------------------------------------------------------------------
+
+
//............................................................................
//............................................................................
diff --git a/uui/source/logindlg.src b/uui/source/logindlg.src
index ce998f4945be..bf6a97c3b0ff 100644..100755
--- a/uui/source/logindlg.src
+++ b/uui/source/logindlg.src
@@ -16,7 +16,7 @@
* 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).
+ *(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
@@ -42,166 +42,156 @@ ModalDialog DLG_UUI_LOGIN
Moveable = TRUE ;
OutputSize = TRUE ;
SVLook = TRUE ;
- Size = MAP_APPFONT ( 265 , 170 ) ;
- FixedText INFO_LOGIN_ERROR
+ Size = MAP_APPFONT( 177 , 247 ) ;
+ Text [ en-US ] = "Authentication Required" ;
+
+ FixedText FT_LOGIN_ERROR
{
- Pos = MAP_APPFONT ( 12 , 14 ) ;
- Size = MAP_APPFONT ( 185 , 18 ) ;
+ Pos = MAP_APPFONT( 6 , 6 ) ;
+ Size = MAP_APPFONT( 165 , 8 ) ;
+ Text [ en-US ] = "Message from server:" ;
+ };
+
+ FixedText FT_INFO_LOGIN_ERROR
+ {
+ Pos = MAP_APPFONT( 6 , 14 ) ;
+ Size = MAP_APPFONT( 165 , 3*8 ) ;
WordBreak = TRUE ;
};
- FixedLine GB_LOGIN_ERROR
+
+ FixedLine FL_LOGIN_1
{
- Pos = MAP_APPFONT ( 6 , 3 ) ;
- Size = MAP_APPFONT ( 197 , 8 ) ;
- Text [ en-US ] = "Message from server" ;
+ Pos = MAP_APPFONT( 6 , 41 ) ;
+ Size = MAP_APPFONT( 165 , 8 ) ;
};
- FixedText INFO_LOGIN_REQUEST
+
+ FixedText FT_INFO_LOGIN_REQUEST
{
- Pos = MAP_APPFONT ( 12 , 55 ) ;
- Size = MAP_APPFONT ( 185 , 18 ) ;
+ Pos = MAP_APPFONT( 6 , 52 ) ;
+ Size = MAP_APPFONT( 165 , 2*8 ) ;
WordBreak = TRUE ;
- Text [ en-US ] = "Enter the user name and password for %1 here." ;
+ Text [ en-US ] = "Enter user name and password for: \n%1" ;
};
+
+ String STR_LOGIN_REALM
+ {
+ Text [ en-US ] = "Enter user name and password for: \n\"%2\" on %1" ;
+ };
+
+ FixedLine FL_LOGIN_2
+ {
+ Pos = MAP_APPFONT( 6 , 71 ) ;
+ Size = MAP_APPFONT( 165 , 8 ) ;
+ };
+
FixedText FT_LOGIN_PATH
{
- Pos = MAP_APPFONT ( 12 , 77 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
+ Pos = MAP_APPFONT( 6 , 84 ) ;
+ Size = MAP_APPFONT( 112 , 8 ) ;
Text [ en-US ] = "~Path" ;
};
+
Edit ED_LOGIN_PATH
{
+ HelpId = HID_LOGIN_DLG_PATH;
Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 76 ) ;
- Size = MAP_APPFONT ( 108 , 12 ) ;
- };
- FixedText INFO_LOGIN_PATH
- {
- Hide = TRUE ;
- Pos = MAP_APPFONT ( 72 , 77 ) ;
- Size = MAP_APPFONT ( 125 , 10 ) ;
+ Pos = MAP_APPFONT( 6 , 95 ) ;
+ Size = MAP_APPFONT( 112 , 12 ) ;
};
PushButton BTN_LOGIN_PATH
{
- Pos = MAP_APPFONT ( 183 , 75 ) ;
- Size = MAP_APPFONT ( 14 , 14 ) ;
- Text = "~..." ;
+ HelpId = HID_LOGIN_DLG_BROWSE;
+ Pos = MAP_APPFONT( 121 , 94 ) ;
+ Size = MAP_APPFONT( 50 , 14 ) ;
+ Text = "~Browse..." ;
};
+
FixedText FT_LOGIN_USERNAME
{
- Pos = MAP_APPFONT ( 12 , 92 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
+ Pos = MAP_APPFONT( 6 , 110 ) ;
+ Size = MAP_APPFONT( 165 , 8 ) ;
Text [ en-US ] = "~User name" ;
};
+
Edit ED_LOGIN_USERNAME
{
+ HelpId = HID_LOGIN_DLG_USER_NAME;
Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 91 ) ;
- Size = MAP_APPFONT ( 125 , 12 ) ;
- };
- FixedText INFO_LOGIN_USERNAME
- {
- Hide = TRUE ;
- Pos = MAP_APPFONT ( 72 , 92 ) ;
- Size = MAP_APPFONT ( 125 , 10 ) ;
+ Pos = MAP_APPFONT( 6 , 121 ) ;
+ Size = MAP_APPFONT( 165 , 12 ) ;
};
+
FixedText FT_LOGIN_PASSWORD
{
- Pos = MAP_APPFONT ( 12 , 107 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
+ Pos = MAP_APPFONT( 6 , 136 ) ;
+ Size = MAP_APPFONT( 165 , 8 ) ;
Text [ en-US ] = "Pass~word" ;
};
+
Edit ED_LOGIN_PASSWORD
{
+ HelpId = HID_LOGIN_DLG_PASSWORD;
Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 106 ) ;
- Size = MAP_APPFONT ( 125 , 12 ) ;
+ Pos = MAP_APPFONT( 6 , 147 ) ;
+ Size = MAP_APPFONT( 165 , 12 ) ;
PassWord = TRUE ;
};
+
FixedText FT_LOGIN_ACCOUNT
{
- Pos = MAP_APPFONT ( 12 , 122 ) ;
- Size = MAP_APPFONT ( 57 , 10 ) ;
+ Pos = MAP_APPFONT( 6 , 162 ) ;
+ Size = MAP_APPFONT( 165 , 8 ) ;
Text [ en-US ] = "A~ccount";
};
+
Edit ED_LOGIN_ACCOUNT
{
+ HelpId = HID_LOGIN_DLG_ACCOUNT;
Border = TRUE ;
- Pos = MAP_APPFONT ( 72 , 121 ) ;
- Size = MAP_APPFONT ( 125 , 12 ) ;
+ Pos = MAP_APPFONT( 6 , 173 ) ;
+ Size = MAP_APPFONT( 165 , 12 ) ;
PassWord = TRUE ;
};
+
CheckBox CB_LOGIN_SAVEPASSWORD
{
- Pos = MAP_APPFONT ( 12 , 136 ) ;
- Size = MAP_APPFONT ( 185 , 10 ) ;
- Text [ en-US ] = "~Save password" ;
+ HelpId = HID_LOGIN_DLG_REMEMBER_PASSWORD;
+ Pos = MAP_APPFONT( 6 , 190 ) ;
+ Size = MAP_APPFONT( 165 , 10 ) ;
+ Text [ en-US ] = "~Remember password" ;
};
+
CheckBox CB_LOGIN_USESYSCREDS
{
- Pos = MAP_APPFONT ( 12 , 148 ) ;
- Size = MAP_APPFONT ( 185 , 10 ) ;
- Text [ en-US ] = "~Use System Credentials" ;
+ HelpId = HID_LOGIN_DLG_USE_SYSTEM_CREDENTIALS;
+ Pos = MAP_APPFONT( 6 , 203 ) ;
+ Size = MAP_APPFONT( 165 , 10 ) ;
+ Text [ en-US ] = "~Use system credentials" ;
};
- FixedLine GB_LOGIN_LOGIN
+
+ FixedLine FL_BUTTONS
{
- Pos = MAP_APPFONT ( 7 , 44 ) ;
- Size = MAP_APPFONT ( 197 , 8 ) ;
- Text [ en-US ] = "Log in" ;
+ Pos = MAP_APPFONT( 0 , 216 ) ;
+ Size = MAP_APPFONT( 177 , 8 ) ;
};
+
OKButton BTN_LOGIN_OK
{
- Pos = MAP_APPFONT ( 209 , 6 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
+ Pos = MAP_APPFONT( 6 , 227 ) ;
+ Size = MAP_APPFONT( 50 , 14 ) ;
DefButton = TRUE ;
};
+
CancelButton BTN_LOGIN_CANCEL
{
- Pos = MAP_APPFONT ( 209 , 23 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
+ Pos = MAP_APPFONT( 66 , 227 ) ;
+ Size = MAP_APPFONT( 50 , 14 ) ;
};
+
HelpButton BTN_LOGIN_HELP
{
- Pos = MAP_APPFONT ( 209 , 43 ) ;
- Size = MAP_APPFONT ( 50 , 14 ) ;
- };
- String STR_LOGIN_REALM
- {
- Text [ en-US ] = "Please enter user name and password for \"%2\" on %1 here." ;
+ Pos = MAP_APPFONT( 121 , 227 ) ;
+ Size = MAP_APPFONT( 50 , 14 ) ;
};
- Text [ en-US ] = "User Name and Password Required" ;
};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/uui/source/loginerr.hxx b/uui/source/loginerr.hxx
index 39e5b81caf85..ec1317dbd805 100644..100755
--- a/uui/source/loginerr.hxx
+++ b/uui/source/loginerr.hxx
@@ -25,8 +25,8 @@
*
************************************************************************/
-#ifndef _LOGINERR_HXX
-#define _LOGINERR_HXX
+#ifndef m_LOGINERR_HXX
+#define m_LOGINERR_HXX
#include <tools/string.hxx>
@@ -43,61 +43,66 @@
class LoginErrorInfo
{
private:
- String _aTitle;
- String _aServer;
- String _aAccount;
- String _aUserName;
- String _aPassword;
- String _aPath;
- String _aErrorText;
- BYTE _nFlags;
- USHORT _nRet;
+ String m_aTitle;
+ String m_aServer;
+ String m_aAccount;
+ String m_aUserName;
+ String m_aPassword;
+ String m_aPasswordToModify;
+ String m_aPath;
+ String m_aErrorText;
+ BYTE m_nFlags;
+ USHORT m_nRet;
+ bool m_bRecommendToOpenReadonly;
public:
LoginErrorInfo()
- : _nFlags( LOGINERROR_FLAG_MODIFY_USER_NAME ),
- _nRet( ERRCODE_BUTTON_CANCEL )
- {}
-
- const String& GetTitle() const { return _aTitle; }
- const String& GetServer() const { return _aServer; }
- const String& GetAccount() const { return _aAccount; }
- const String& GetUserName() const { return _aUserName; }
- const String& GetPassword() const { return _aPassword; }
- const String& GetPath() const { return _aPath; }
- const String& GetErrorText() const { return _aErrorText; }
-
- BOOL GetCanRememberPassword() const
- { return ( _nFlags & LOGINERROR_FLAG_CAN_REMEMBER_PASSWORD ); }
- BOOL GetIsRememberPersistent() const
- { return ( _nFlags & LOGINERROR_FLAG_REMEMBER_PERSISTENT ); }
- BOOL GetIsRememberPassword() const
- { return ( _nFlags & LOGINERROR_FLAG_IS_REMEMBER_PASSWORD ); }
+ : m_nFlags( LOGINERROR_FLAG_MODIFY_USER_NAME ),
+ m_nRet( ERRCODE_BUTTON_CANCEL )
+ {
+ }
+
+ const String& GetTitle() const { return m_aTitle; }
+ const String& GetServer() const { return m_aServer; }
+ const String& GetAccount() const { return m_aAccount; }
+ const String& GetUserName() const { return m_aUserName; }
+ const String& GetPassword() const { return m_aPassword; }
+ const String& GetPasswordToModify() const { return m_aPasswordToModify; }
+ const bool IsRecommendToOpenReadonly() const { return m_bRecommendToOpenReadonly; }
+ const String& GetPath() const { return m_aPath; }
+ const String& GetErrorText() const { return m_aErrorText; }
+ BOOL GetCanRememberPassword() const { return ( m_nFlags & LOGINERROR_FLAG_CAN_REMEMBER_PASSWORD ); }
+ BOOL GetIsRememberPersistent() const { return ( m_nFlags & LOGINERROR_FLAG_REMEMBER_PERSISTENT ); }
+ BOOL GetIsRememberPassword() const { return ( m_nFlags & LOGINERROR_FLAG_IS_REMEMBER_PASSWORD ); }
BOOL GetCanUseSystemCredentials() const
- { return ( _nFlags & LOGINERROR_FLAG_CAN_USE_SYSCREDS ); }
+ { return ( m_nFlags & LOGINERROR_FLAG_CAN_USE_SYSCREDS ); }
BOOL GetIsUseSystemCredentials() const
- { return ( _nFlags & LOGINERROR_FLAG_IS_USE_SYSCREDS ) ==
+ { return ( m_nFlags & LOGINERROR_FLAG_IS_USE_SYSCREDS ) ==
LOGINERROR_FLAG_IS_USE_SYSCREDS; }
- BYTE GetFlags() const { return _nFlags; }
- USHORT GetResult() const { return _nRet; }
+ BYTE GetFlags() const { return m_nFlags; }
+ USHORT GetResult() const { return m_nRet; }
void SetTitle( const String& aTitle )
- { _aTitle = aTitle; }
+ { m_aTitle = aTitle; }
void SetServer( const String& aServer )
- { _aServer = aServer; }
+ { m_aServer = aServer; }
void SetAccount( const String& aAccount )
- { _aAccount = aAccount; }
+ { m_aAccount = aAccount; }
void SetUserName( const String& aUserName )
- { _aUserName = aUserName; }
+ { m_aUserName = aUserName; }
void SetPassword( const String& aPassword )
- { _aPassword = aPassword; }
+ { m_aPassword = aPassword; }
+ void SetPasswordToModify( const String& aPassword )
+ { m_aPasswordToModify = aPassword; }
+ void SetRecommendToOpenReadonly( bool bVal )
+ { m_bRecommendToOpenReadonly = bVal; }
void SetPath( const String& aPath )
- { _aPath = aPath; }
+ { m_aPath = aPath; }
void SetErrorText( const String& aErrorText )
- { _aErrorText = aErrorText; }
+ { m_aErrorText = aErrorText; }
void SetFlags( BYTE nFlags )
- { _nFlags = nFlags; }
+ { m_nFlags = nFlags; }
inline void SetCanRememberPassword( BOOL bSet );
inline void SetIsRememberPassword( BOOL bSet );
@@ -107,64 +112,67 @@ public:
inline void SetIsUseSystemCredentials( BOOL bSet );
inline void SetModifyAccount( BOOL bSet );
inline void SetModifyUserName( BOOL bSet );
+
void SetResult( USHORT nRet )
- { _nRet = nRet; }
+ { m_nRet = nRet; }
};
inline void LoginErrorInfo::SetCanRememberPassword( BOOL bSet )
{
if ( bSet )
- _nFlags |= LOGINERROR_FLAG_CAN_REMEMBER_PASSWORD;
+ m_nFlags |= LOGINERROR_FLAG_CAN_REMEMBER_PASSWORD;
else
- _nFlags &= ~LOGINERROR_FLAG_CAN_REMEMBER_PASSWORD;
+ m_nFlags &= ~LOGINERROR_FLAG_CAN_REMEMBER_PASSWORD;
}
inline void LoginErrorInfo::SetIsRememberPassword( BOOL bSet )
{
if ( bSet )
- _nFlags |= LOGINERROR_FLAG_IS_REMEMBER_PASSWORD;
+ m_nFlags |= LOGINERROR_FLAG_IS_REMEMBER_PASSWORD;
else
- _nFlags &= ~LOGINERROR_FLAG_IS_REMEMBER_PASSWORD;
+ m_nFlags &= ~LOGINERROR_FLAG_IS_REMEMBER_PASSWORD;
}
inline void LoginErrorInfo::SetIsRememberPersistent( BOOL bSet )
{
if ( bSet )
- _nFlags |= LOGINERROR_FLAG_REMEMBER_PERSISTENT;
+ m_nFlags |= LOGINERROR_FLAG_REMEMBER_PERSISTENT;
else
- _nFlags &= ~LOGINERROR_FLAG_REMEMBER_PERSISTENT;
+ m_nFlags &= ~LOGINERROR_FLAG_REMEMBER_PERSISTENT;
}
inline void LoginErrorInfo::SetCanUseSystemCredentials( BOOL bSet )
{
if ( bSet )
- _nFlags |= LOGINERROR_FLAG_CAN_USE_SYSCREDS;
+ m_nFlags |= LOGINERROR_FLAG_CAN_USE_SYSCREDS;
else
- _nFlags &= ~LOGINERROR_FLAG_CAN_USE_SYSCREDS;
+ m_nFlags &= ~LOGINERROR_FLAG_CAN_USE_SYSCREDS;
}
inline void LoginErrorInfo::SetIsUseSystemCredentials( BOOL bSet )
{
if ( bSet )
- _nFlags |= LOGINERROR_FLAG_IS_USE_SYSCREDS;
+ m_nFlags |= LOGINERROR_FLAG_IS_USE_SYSCREDS;
else
- _nFlags &= ~LOGINERROR_FLAG_IS_USE_SYSCREDS;
+ m_nFlags &= ~LOGINERROR_FLAG_IS_USE_SYSCREDS;
}
inline void LoginErrorInfo::SetModifyAccount( BOOL bSet )
{
if ( bSet )
- _nFlags |= LOGINERROR_FLAG_MODIFY_ACCOUNT;
+ m_nFlags |= LOGINERROR_FLAG_MODIFY_ACCOUNT;
else
- _nFlags &= ~LOGINERROR_FLAG_MODIFY_ACCOUNT;
+ m_nFlags &= ~LOGINERROR_FLAG_MODIFY_ACCOUNT;
}
inline void LoginErrorInfo::SetModifyUserName( BOOL bSet )
{
if ( bSet )
- _nFlags |= LOGINERROR_FLAG_MODIFY_USER_NAME;
+ m_nFlags |= LOGINERROR_FLAG_MODIFY_USER_NAME;
else
- _nFlags &= ~LOGINERROR_FLAG_MODIFY_USER_NAME;
+ m_nFlags &= ~LOGINERROR_FLAG_MODIFY_USER_NAME;
}
#endif
+
+
diff --git a/uui/source/passworddlg.cxx b/uui/source/passworddlg.cxx
index 4962563601c3..c89184f54bc1 100644..100755
--- a/uui/source/passworddlg.cxx
+++ b/uui/source/passworddlg.cxx
@@ -48,30 +48,34 @@ IMPL_LINK( PasswordDialog, OKHdl_Impl, OKButton *, EMPTYARG )
// -----------------------------------------------------------------------
-PasswordDialog::PasswordDialog
-(
+PasswordDialog::PasswordDialog(
Window* _pParent,
::com::sun::star::task::PasswordRequestMode nDlgMode,
ResMgr * pResMgr,
- rtl::OUString& aDocURL
- )
+ rtl::OUString& aDocURL,
+ bool bOpenToModify )
+
:ModalDialog( _pParent, ResId( DLG_UUI_PASSWORD, *pResMgr ) )
- ,aFTPassword ( this, ResId( FT_PASSWORD, *pResMgr ) )
- ,aEDPassword ( this, ResId( ED_PASSWORD, *pResMgr ) )
- ,aOKBtn ( this, ResId( BTN_PASSWORD_OK, *pResMgr ) )
- ,aCancelBtn ( this, ResId( BTN_PASSWORD_CANCEL, *pResMgr ) )
- ,aHelpBtn ( this, ResId( BTN_PASSWORD_HELP, *pResMgr ) )
- ,aFixedLine1 ( this, ResId( FL_FIXED_LINE_1, *pResMgr ) )
- ,nDialogMode ( nDlgMode )
- ,pResourceMgr ( pResMgr )
+ ,aFTPassword( this, ResId( FT_PASSWORD, *pResMgr ))
+ ,aEDPassword( this, ResId( ED_PASSWORD, *pResMgr ))
+ ,aOKBtn ( this, ResId( BTN_PASSWORD_OK, *pResMgr ))
+ ,aCancelBtn ( this, ResId( BTN_PASSWORD_CANCEL, *pResMgr ))
+ ,aHelpBtn ( this, ResId( BTN_PASSWORD_HELP, *pResMgr ))
+ ,aFixedLine1( this, ResId( FL_FIXED_LINE_1, *pResMgr ))
+ ,nDialogMode( nDlgMode )
+ ,pResourceMgr ( pResMgr )
{
if( nDialogMode == ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER )
{
- String aErrorMsg( ResId( STR_ERROR_PASSWORD_WRONG, *pResourceMgr ));
+ USHORT nErrStrId = bOpenToModify ? STR_ERROR_PASSWORD_TO_MODIFY_WRONG : STR_ERROR_PASSWORD_TO_OPEN_WRONG;
+ String aErrorMsg( ResId( nErrStrId, *pResourceMgr ));
ErrorBox aErrorBox( _pParent, WB_OK, aErrorMsg );
aErrorBox.Execute();
}
+ USHORT nStrId = bOpenToModify ? STR_ENTER_PASSWORD_TO_MODIFY : STR_ENTER_PASSWORD_TO_OPEN;
+ aFTPassword.SetText( String( ResId( nStrId, *pResourceMgr ) ) );
+
FreeResource();
aFTPassword.SetText( aFTPassword.GetText() + aDocURL );
diff --git a/uui/source/passworddlg.hxx b/uui/source/passworddlg.hxx
index d07399012616..fe5fe7f2ef84 100644..100755
--- a/uui/source/passworddlg.hxx
+++ b/uui/source/passworddlg.hxx
@@ -50,7 +50,7 @@ class PasswordDialog : public ModalDialog
DECL_LINK( OKHdl_Impl, OKButton * );
public:
- PasswordDialog( Window* pParent, ::com::sun::star::task::PasswordRequestMode nDlgMode, ResMgr * pResMgr, ::rtl::OUString& aDocURL );
+ PasswordDialog( Window* pParent, ::com::sun::star::task::PasswordRequestMode nDlgMode, ResMgr * pResMgr, ::rtl::OUString& aDocURL, bool bOpenToModify = false );
String GetPassword() const { return aEDPassword.GetText(); }
diff --git a/uui/source/passworddlg.src b/uui/source/passworddlg.src
index 96863ad9ca32..33767057e1bd 100644..100755
--- a/uui/source/passworddlg.src
+++ b/uui/source/passworddlg.src
@@ -41,27 +41,33 @@ ModalDialog DLG_UUI_PASSWORD
Moveable = TRUE ;
OutputSize = TRUE ;
SVLook = TRUE ;
- Size = MAP_APPFONT( 145, 75 );
+ Size = MAP_APPFONT( 145, 91 );
Text [ en-US ] = "Enter password";
+
FixedText FT_PASSWORD
{
Pos = MAP_APPFONT( 3, 4 );
Size = MAP_APPFONT( 139, 28 );
- Text [ en-US ] = "Enter password to open file: \n";
WordBreak = TRUE;
};
Edit ED_PASSWORD
{
- Pos = MAP_APPFONT( 3, 35 );
+ Pos = MAP_APPFONT( 3, 51 );
Size = MAP_APPFONT( 139, 13 );
Border = TRUE ;
PassWord = TRUE ;
};
+ FixedLine FL_FIXED_LINE_1
+ {
+ Pos = MAP_APPFONT( 0, 66 );
+ Size = MAP_APPFONT( 145, 6 );
+ };
+
OKButton BTN_PASSWORD_OK
{
- Pos = MAP_APPFONT( 27, 56 );
+ Pos = MAP_APPFONT( 27, 72 );
Size = MAP_APPFONT( 37, 15 );
DefButton = TRUE ;
DefButton = TRUE;
@@ -69,20 +75,24 @@ ModalDialog DLG_UUI_PASSWORD
CancelButton BTN_PASSWORD_CANCEL
{
- Pos = MAP_APPFONT( 66, 56 );
+ Pos = MAP_APPFONT( 66, 72 );
Size = MAP_APPFONT( 37, 15 );
};
HelpButton BTN_PASSWORD_HELP
{
- Pos = MAP_APPFONT( 105, 56 );
+ Pos = MAP_APPFONT( 105, 72 );
Size = MAP_APPFONT( 37, 15 );
};
- FixedLine FL_FIXED_LINE_1
+ String STR_ENTER_PASSWORD_TO_OPEN
{
- Pos = MAP_APPFONT( 0, 50 );
- Size = MAP_APPFONT( 145, 6 );
+ Text [ en-US ] = "Enter password to open file: \n";
+ };
+
+ String STR_ENTER_PASSWORD_TO_MODIFY
+ {
+ Text [ en-US ] = "Enter password to modify file: \n";
};
};
diff --git a/uui/source/passworderrs.src b/uui/source/passworderrs.src
index fe631257c9d2..91b244ae543e 100644..100755
--- a/uui/source/passworderrs.src
+++ b/uui/source/passworderrs.src
@@ -31,9 +31,14 @@
#include <ids.hrc>
#endif
-String STR_ERROR_PASSWORD_WRONG
+String STR_ERROR_PASSWORD_TO_OPEN_WRONG
{
- Text [ en-US ] = "The password is incorrect. The document cannot be opened.";
+ Text [ en-US ] = "The password is incorrect. The file cannot be opened.";
+};
+
+String STR_ERROR_PASSWORD_TO_MODIFY_WRONG
+{
+ Text [ en-US ] = "The password is incorrect. The file cannot be modified.";
};
String STR_ERROR_MASTERPASSWORD_WRONG
diff --git a/vbahelper/inc/vbahelper/vbaapplicationbase.hxx b/vbahelper/inc/vbahelper/vbaapplicationbase.hxx
index e72015413192..e2a5a3bff5da 100644
--- a/vbahelper/inc/vbahelper/vbaapplicationbase.hxx
+++ b/vbahelper/inc/vbahelper/vbaapplicationbase.hxx
@@ -34,8 +34,12 @@
typedef InheritedHelperInterfaceImpl1< ov::XApplicationBase > ApplicationBase_BASE;
+struct VbaApplicationBase_Impl;
+
class VBAHELPER_DLLPUBLIC VbaApplicationBase : public ApplicationBase_BASE
{
+ VbaApplicationBase_Impl* m_pImpl;
+
protected:
VbaApplicationBase( const css::uno::Reference< css::uno::XComponentContext >& xContext );
virtual ~VbaApplicationBase();
@@ -49,11 +53,18 @@ public:
virtual void SAL_CALL setScreenUpdating(sal_Bool bUpdate) throw (css::uno::RuntimeException);
virtual sal_Bool SAL_CALL getDisplayStatusBar() throw (css::uno::RuntimeException);
virtual void SAL_CALL setDisplayStatusBar(sal_Bool bDisplayStatusBar) throw (css::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL getInteractive() throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL setInteractive( ::sal_Bool bInteractive ) throw (::com::sun::star::uno::RuntimeException);
virtual css::uno::Any SAL_CALL CommandBars( const css::uno::Any& aIndex ) throw (css::uno::RuntimeException);
virtual ::rtl::OUString SAL_CALL getVersion() throw (css::uno::RuntimeException);
virtual void SAL_CALL Run( const ::rtl::OUString& MacroName, const css::uno::Any& varg1, const css::uno::Any& varg2, const css::uno::Any& varg3, const css::uno::Any& varg4, const css::uno::Any& varg5, const css::uno::Any& varg6, const css::uno::Any& varg7, const css::uno::Any& varg8, const css::uno::Any& varg9, const css::uno::Any& varg10, const css::uno::Any& varg11, const css::uno::Any& varg12, const css::uno::Any& varg13, const css::uno::Any& varg14, const css::uno::Any& varg15, const css::uno::Any& varg16, const css::uno::Any& varg17, const css::uno::Any& varg18, const css::uno::Any& varg19, const css::uno::Any& varg20, const css::uno::Any& varg21, const css::uno::Any& varg22, const css::uno::Any& varg23, const css::uno::Any& varg24, const css::uno::Any& varg25, const css::uno::Any& varg26, const css::uno::Any& varg27, const css::uno::Any& varg28, const css::uno::Any& varg29, const css::uno::Any& varg30 ) throw (css::uno::RuntimeException);
+ virtual void SAL_CALL OnTime( const ::com::sun::star::uno::Any& aEarliestTime, const ::rtl::OUString& aFunction, const ::com::sun::star::uno::Any& aLatestTime, const ::com::sun::star::uno::Any& aSchedule ) throw (::com::sun::star::uno::RuntimeException);
virtual float SAL_CALL CentimetersToPoints( float _Centimeters ) throw (css::uno::RuntimeException);
+ virtual void SAL_CALL Undo( ) throw (::com::sun::star::uno::RuntimeException);
virtual void SAL_CALL Quit( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getVBE() throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL SAL_CALL getVBProjects() throw (css::uno::RuntimeException);
+
// XHelperInterface
virtual rtl::OUString& getServiceImplName();
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
diff --git a/vbahelper/inc/vbahelper/vbacollectionimpl.hxx b/vbahelper/inc/vbahelper/vbacollectionimpl.hxx
index 6d596c31ba53..36102116c7b3 100644
--- a/vbahelper/inc/vbahelper/vbacollectionimpl.hxx
+++ b/vbahelper/inc/vbahelper/vbacollectionimpl.hxx
@@ -24,6 +24,7 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
+
#ifndef OOVBAAPI_VBA_COLLECTION_IMPL_HXX
#define OOVBAAPI_VBA_COLLECTION_IMPL_HXX
@@ -44,8 +45,91 @@
#include <vector>
+// ============================================================================
+
typedef ::cppu::WeakImplHelper1< css::container::XEnumeration > EnumerationHelper_BASE;
+// ============================================================================
+
+/** A wrapper that holds a com.sun.star.container.XIndexAccess and provides a
+ com.sun.star.container.XEnumeration.
+
+ Can be used to provide an enumeration from an index container that contains
+ completely constructed/initialized VBA implementation objects. CANNOT be
+ used to provide an enumeration from an index container with other objects
+ (e.g. UNO objects) where construction of the VBA objects is needed first.
+ */
+class VBAHELPER_DLLPUBLIC SimpleIndexAccessToEnumeration : public EnumerationHelper_BASE
+{
+public:
+ explicit SimpleIndexAccessToEnumeration(
+ const css::uno::Reference< css::container::XIndexAccess >& rxIndexAccess ) throw (css::uno::RuntimeException) :
+ mxIndexAccess( rxIndexAccess ), mnIndex( 0 ) {}
+
+ virtual sal_Bool SAL_CALL hasMoreElements() throw (css::uno::RuntimeException)
+ {
+ return mnIndex < mxIndexAccess->getCount();
+ }
+
+ virtual css::uno::Any SAL_CALL nextElement() throw (css::container::NoSuchElementException, css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {
+ if( !hasMoreElements() )
+ throw css::container::NoSuchElementException();
+ return mxIndexAccess->getByIndex( mnIndex++ );
+ }
+
+private:
+ css::uno::Reference< css::container::XIndexAccess > mxIndexAccess;
+ sal_Int32 mnIndex;
+};
+
+// ============================================================================
+
+/** A wrapper that holds a com.sun.star.container.XEnumeration or a
+ com.sun.star.container.XIndexAccess and provides an enumeration of VBA objects.
+
+ The method nextElement() needs to be implemented by the derived class. This
+ class can be used to convert an enumeration or an index container
+ containing UNO objects to an enumeration providing the related VBA objects.
+ */
+class VBAHELPER_DLLPUBLIC SimpleEnumerationBase : public EnumerationHelper_BASE
+{
+public:
+ explicit SimpleEnumerationBase(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::container::XEnumeration >& rxEnumeration ) throw (css::uno::RuntimeException) :
+ mxParent( rxParent ), mxContext( rxContext ), mxEnumeration( rxEnumeration ) {}
+
+ explicit SimpleEnumerationBase(
+ const css::uno::Reference< ov::XHelperInterface >& rxParent,
+ const css::uno::Reference< css::uno::XComponentContext >& rxContext,
+ const css::uno::Reference< css::container::XIndexAccess >& rxIndexAccess ) throw (css::uno::RuntimeException) :
+ mxParent( rxParent ), mxContext( rxContext ), mxEnumeration( new SimpleIndexAccessToEnumeration( rxIndexAccess ) ) {}
+
+ virtual sal_Bool SAL_CALL hasMoreElements() throw (css::uno::RuntimeException)
+ {
+ return mxEnumeration->hasMoreElements();
+ }
+
+ virtual css::uno::Any SAL_CALL nextElement() throw (css::container::NoSuchElementException, css::lang::WrappedTargetException, css::uno::RuntimeException)
+ {
+ return createCollectionObject( mxEnumeration->nextElement() );
+ }
+
+ /** Derived classes implement creation of a VBA implementation object from
+ the passed container element. */
+ virtual css::uno::Any createCollectionObject( const css::uno::Any& rSource ) = 0;
+
+protected:
+ css::uno::Reference< ov::XHelperInterface > mxParent;
+ css::uno::Reference< css::uno::XComponentContext > mxContext;
+ css::uno::Reference< css::container::XEnumeration > mxEnumeration;
+};
+
+// ============================================================================
+
+// deprecated, use SimpleEnumerationBase instead!
class VBAHELPER_DLLPUBLIC EnumerationHelperImpl : public EnumerationHelper_BASE
{
protected:
@@ -181,6 +265,14 @@ protected:
// need to adjust for vba index ( for which first element is 1 )
return createCollectionObject( m_xIndexAccess->getByIndex( nIndex - 1 ) );
}
+
+ virtual void UpdateCollectionIndex( const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess )
+ {
+ css::uno::Reference< css::container::XNameAccess > xNameAccess( xIndexAccess, css::uno::UNO_QUERY_THROW );
+ m_xIndexAccess = xIndexAccess;
+ m_xNameAccess = xNameAccess;
+ }
+
public:
ScVbaCollectionBase( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess ) : BaseColBase( xParent, xContext ), m_xIndexAccess( xIndexAccess ){ m_xNameAccess.set(m_xIndexAccess, css::uno::UNO_QUERY); }
//XCollection
diff --git a/vbahelper/inc/vbahelper/vbadocumentbase.hxx b/vbahelper/inc/vbahelper/vbadocumentbase.hxx
index 36648ff6849b..7131e1963b26 100644
--- a/vbahelper/inc/vbahelper/vbadocumentbase.hxx
+++ b/vbahelper/inc/vbahelper/vbadocumentbase.hxx
@@ -53,6 +53,9 @@ public:
virtual sal_Bool SAL_CALL getSaved() throw (css::uno::RuntimeException);
virtual void SAL_CALL setSaved( sal_Bool bSave ) throw (css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL getVBProject() throw (css::uno::RuntimeException); // Michhael E. Bohn
+
+
// Methods
virtual void SAL_CALL Close( const css::uno::Any &bSaveChanges,
const css::uno::Any &aFileName,
diff --git a/vbahelper/inc/vbahelper/vbafontbase.hxx b/vbahelper/inc/vbahelper/vbafontbase.hxx
index b820804f1fe2..d1272c9dcf48 100644
--- a/vbahelper/inc/vbahelper/vbafontbase.hxx
+++ b/vbahelper/inc/vbahelper/vbafontbase.hxx
@@ -63,8 +63,15 @@ class VBAHELPER_DLLPUBLIC VbaFontBase : public VbaFontBase_BASE
protected:
css::uno::Reference< css::beans::XPropertySet > mxFont;
css::uno::Reference< css::container::XIndexAccess > mxPalette;
+ bool mbFormControl;
+
public:
- VbaFontBase( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::container::XIndexAccess >& xPalette, css::uno::Reference< css::beans::XPropertySet > xPropertySet ) throw ( css::uno::RuntimeException );
+ VbaFontBase(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const css::uno::Reference< css::uno::XComponentContext >& xContext,
+ const css::uno::Reference< css::container::XIndexAccess >& xPalette,
+ const css::uno::Reference< css::beans::XPropertySet >& xPropertySet,
+ bool bFormControl = false ) throw ( css::uno::RuntimeException );
virtual ~VbaFontBase();// {}
// Attributes
diff --git a/vbahelper/inc/vbahelper/vbahelper.hxx b/vbahelper/inc/vbahelper/vbahelper.hxx
index 166ad76475d8..33613bb76091 100644
--- a/vbahelper/inc/vbahelper/vbahelper.hxx
+++ b/vbahelper/inc/vbahelper/vbahelper.hxx
@@ -35,6 +35,7 @@
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <com/sun/star/awt/XControl.hpp>
#include <com/sun/star/awt/XDevice.hpp>
+#include <com/sun/star/awt/XUnitConversion.hpp>
#include <basic/basmgr.hxx>
#include <basic/sberrors.hxx>
#include <cppuhelper/implbase1.hxx>
@@ -74,8 +75,8 @@ namespace ooo
VBAHELPER_DLLPUBLIC css::uno::Reference< css::beans::XIntrospectionAccess > getIntrospectionAccess( const css::uno::Any& aObject ) throw (css::uno::RuntimeException);
VBAHELPER_DLLPUBLIC css::uno::Reference< css::script::XTypeConverter > getTypeConverter( const css::uno::Reference< css::uno::XComponentContext >& xContext ) throw (css::uno::RuntimeException);
- VBAHELPER_DLLPUBLIC void dispatchRequests (css::uno::Reference< css::frame::XModel>& xModel,rtl::OUString & aUrl) ;
- VBAHELPER_DLLPUBLIC void dispatchRequests (css::uno::Reference< css::frame::XModel>& xModel,rtl::OUString & aUrl, css::uno::Sequence< css::beans::PropertyValue >& sProps ) ;
+ VBAHELPER_DLLPUBLIC void dispatchRequests( const css::uno::Reference< css::frame::XModel>& xModel, const rtl::OUString& aUrl );
+ VBAHELPER_DLLPUBLIC void dispatchRequests( const css::uno::Reference< css::frame::XModel>& xModel, const rtl::OUString& aUrl, const css::uno::Sequence< css::beans::PropertyValue >& sProps );
VBAHELPER_DLLPUBLIC void dispatchExecute(SfxViewShell* pView, USHORT nSlot, SfxCallMode nCall = SFX_CALLMODE_SYNCHRON );
VBAHELPER_DLLPUBLIC sal_Int32 OORGBToXLRGB( sal_Int32 );
VBAHELPER_DLLPUBLIC sal_Int32 XLRGBToOORGB( sal_Int32 );
@@ -92,7 +93,9 @@ namespace ooo
VBAHELPER_DLLPUBLIC rtl::OUString VBAToRegexp(const rtl::OUString &rIn, bool bForLike = false); // needs to be in an uno service ( already this code is duplicated in basic )
VBAHELPER_DLLPUBLIC double getPixelTo100thMillimeterConversionFactor( css::uno::Reference< css::awt::XDevice >& xDevice, sal_Bool bVertical);
VBAHELPER_DLLPUBLIC double PointsToPixels( css::uno::Reference< css::awt::XDevice >& xDevice, double fPoints, sal_Bool bVertical);
- VBAHELPER_DLLPUBLIC double PixelsToPoints( css::uno::Reference< css::awt::XDevice >& xDevice, double fPoints, sal_Bool bVertical);
+ VBAHELPER_DLLPUBLIC double PixelsToPoints( css::uno::Reference< css::awt::XDevice >& xDevice, double fPixels, sal_Bool bVertical);
+ VBAHELPER_DLLPUBLIC sal_Int32 PointsToHmm( double fPoints );
+ VBAHELPER_DLLPUBLIC double HmmToPoints( sal_Int32 nHmm );
VBAHELPER_DLLPUBLIC sal_Int32 getPointerStyle( const css::uno::Reference< css::frame::XModel >& );
VBAHELPER_DLLPUBLIC void setCursorHelper( const css::uno::Reference< css::frame::XModel >& xModel, const Pointer& rPointer, sal_Bool bOverWrite );
VBAHELPER_DLLPUBLIC void setDefaultPropByIntrospection( const css::uno::Any& aObj, const css::uno::Any& aValue ) throw ( css::uno::RuntimeException );
@@ -103,8 +106,6 @@ class VBAHELPER_DLLPUBLIC Millimeter
{
//Factor to translate between points and hundredths of millimeters:
private:
- static const double factor;
-
double m_nMillimeter;
public:
@@ -178,12 +179,19 @@ public:
virtual double getWidth();
virtual void setWidth( double nWidth);
};
+
#define VBA_LEFT "PositionX"
#define VBA_TOP "PositionY"
+#define VBA_HEIGHT "Height"
+#define VBA_WIDTH "Width"
class VBAHELPER_DLLPUBLIC UserFormGeometryHelper : public AbstractGeometryAttributes
{
-
+ css::uno::Reference< css::awt::XUnitConversion > mxControlUnits;
css::uno::Reference< css::beans::XPropertySet > mxModel;
+
+ sal_Int32 ConvertLogicToPixel( sal_Int32 nValue, sal_Bool bIsPoint, sal_Bool bIsX, sal_Int16 nSourceUnit );
+ sal_Int32 ConvertPixelToLogic( sal_Int32 nValue, sal_Bool bIsPoint, sal_Bool bIsX, sal_Int16 nTargetUnit );
+
public:
UserFormGeometryHelper( const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::awt::XControl >& xControl );
virtual double getLeft();
diff --git a/vbahelper/inc/vbahelper/vbahelperinterface.hxx b/vbahelper/inc/vbahelper/vbahelperinterface.hxx
index 5695ab36b4fa..21339631e1ed 100644
--- a/vbahelper/inc/vbahelper/vbahelperinterface.hxx
+++ b/vbahelper/inc/vbahelper/vbahelperinterface.hxx
@@ -115,4 +115,57 @@ public:
InheritedHelperInterfaceImpl1< Ifc1 > ( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext ) : Base( xParent, xContext ) {}
};
+
+// ============================================================================
+
+/** Helper macro to implement the method 'getServiceImplName()' of the
+ 'ooo.vba.XHelperInterface' interface. Will return the class name as service
+ implementation name.
+ */
+#define VBAHELPER_IMPL_GETSERVICEIMPLNAME( classname ) \
+::rtl::OUString& classname::getServiceImplName() \
+{ \
+ static ::rtl::OUString saImplName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( #classname ) ); \
+ return saImplName; \
+}
+
+// ----------------------------------------------------------------------------
+
+/** Helper macro to implement the method 'getServiceNames()' for a single
+ service name.
+ */
+#define VBAHELPER_IMPL_GETSERVICENAMES( classname, servicename ) \
+css::uno::Sequence< ::rtl::OUString > classname::getServiceNames() \
+{ \
+ static css::uno::Sequence< ::rtl::OUString > saServiceNames; \
+ if( saServiceNames.getLength() == 0 ) \
+ { \
+ saServiceNames.realloc( 1 ); \
+ saServiceNames[ 0 ] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( servicename ) ); \
+ } \
+ return saServiceNames; \
+}
+
+// ----------------------------------------------------------------------------
+
+/** Helper macro to declare the methods 'getServiceImplName()' and
+ 'getServiceNames()' of the 'ooo.vba.XHelperInterface' interface in a class
+ declaration.
+ */
+#define VBAHELPER_DECL_XHELPERINTERFACE \
+ virtual ::rtl::OUString& getServiceImplName(); \
+ virtual css::uno::Sequence< ::rtl::OUString > getServiceNames();
+
+// ----------------------------------------------------------------------------
+
+/** Helper macro to implement the methods 'getServiceImplName()' and
+ 'getServiceNames()' of the 'ooo.vba.XHelperInterface' interface. Will
+ return the class name as service implementation name.
+ */
+#define VBAHELPER_IMPL_XHELPERINTERFACE( classname, servicename ) \
+VBAHELPER_IMPL_GETSERVICEIMPLNAME( classname ) \
+VBAHELPER_IMPL_GETSERVICENAMES( classname, servicename )
+
+// ============================================================================
+
#endif
diff --git a/vbahelper/source/msforms/makefile.mk b/vbahelper/source/msforms/makefile.mk
index 7c61e4302b7f..5fce64649dcb 100644
--- a/vbahelper/source/msforms/makefile.mk
+++ b/vbahelper/source/msforms/makefile.mk
@@ -58,6 +58,7 @@ SLOFILES=\
$(SLO)$/vbamultipage.obj \
$(SLO)$/vbalistcontrolhelper.obj \
$(SLO)$/vbaspinbutton.obj \
+ $(SLO)$/vbasystemaxcontrol.obj \
$(SLO)$/vbaimage.obj \
$(SLO)$/vbapages.obj \
$(SLO)$/vbauserform.obj \
diff --git a/vbahelper/source/msforms/vbacontrol.cxx b/vbahelper/source/msforms/vbacontrol.cxx
index 2ff12b145824..82b68bbd5be7 100644
--- a/vbahelper/source/msforms/vbacontrol.cxx
+++ b/vbahelper/source/msforms/vbacontrol.cxx
@@ -57,6 +57,7 @@
#include "vbaprogressbar.hxx"
#include "vbamultipage.hxx"
#include "vbaspinbutton.hxx"
+#include "vbasystemaxcontrol.hxx"
#include "vbaimage.hxx"
#include <vbahelper/helperdecl.hxx>
@@ -254,6 +255,22 @@ void SAL_CALL ScVbaControl::SetFocus() throw (uno::RuntimeException)
xWin->setFocus();
}
+void SAL_CALL ScVbaControl::Move( double Left, double Top, const uno::Any& Width, const uno::Any& Height )
+ throw ( uno::RuntimeException )
+{
+ double nWidth = 0.0;
+ double nHeight = 0.0;
+
+ setLeft( Left );
+ setTop( Top );
+
+ if ( Width >>= nWidth )
+ setWidth( nWidth );
+
+ if ( Height >>= nHeight )
+ setHeight( nHeight );
+}
+
rtl::OUString SAL_CALL
ScVbaControl::getControlSource() throw (uno::RuntimeException)
{
@@ -368,6 +385,20 @@ ScVbaControl::setControlTipText( const rtl::OUString& rsToolTip ) throw (css::un
m_xProps->setPropertyValue
(rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "HelpText" ) ), uno::makeAny( rsToolTip ) );
}
+
+::rtl::OUString SAL_CALL ScVbaControl::getTag()
+ throw (css::uno::RuntimeException)
+{
+ return m_aControlTag;
+}
+
+void SAL_CALL ScVbaControl::setTag( const ::rtl::OUString& aTag )
+ throw (css::uno::RuntimeException)
+{
+ m_aControlTag = aTag;
+}
+
+
//ScVbaControlFactory
ScVbaControlFactory::ScVbaControlFactory( const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< uno::XInterface >& xControl, const uno::Reference< frame::XModel >& xModel ): m_xContext( xContext ), m_xControl( xControl ), m_xModel( xModel )
@@ -383,7 +414,6 @@ ScVbaControl* ScVbaControlFactory::createControl( const uno::Reference< uno::XIn
if ( !xControl.is() )
throw uno::RuntimeException(); // really we should be more informative
return createControl( xControl, xParent );
-
}
ScVbaControl* ScVbaControlFactory::createControl(const uno::Reference< drawing::XControlShape >& xControlShape, const uno::Reference< uno::XInterface >& /*xParent*/ ) throw (uno::RuntimeException)
@@ -456,6 +486,8 @@ ScVbaControl* ScVbaControlFactory::createControl( const uno::Reference< awt::XCo
pControl = new ScVbaMultiPage( xVbaParent, m_xContext, xControl, m_xModel, new UserFormGeometryHelper( m_xContext, xControl ), xParent );
else if ( xServiceInfo->supportsService( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.awt.UnoControlSpinButtonModel") ) ) )
pControl = new ScVbaSpinButton( xVbaParent, m_xContext, xControl, m_xModel, new UserFormGeometryHelper( m_xContext, xControl ) );
+ else if ( xServiceInfo->supportsService( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.custom.awt.UnoControlSystemAXContainerModel") ) ) )
+ pControl = new VbaSystemAXControl( xVbaParent, m_xContext, xControl, m_xModel, new UserFormGeometryHelper( m_xContext, xControl ) );
else
throw uno::RuntimeException( rtl::OUString::createFromAscii("Unsupported control " ), uno::Reference< uno::XInterface >() );
return pControl;
diff --git a/vbahelper/source/msforms/vbacontrol.hxx b/vbahelper/source/msforms/vbacontrol.hxx
index 1a8ed063548b..992fbd94a8c5 100644
--- a/vbahelper/source/msforms/vbacontrol.hxx
+++ b/vbahelper/source/msforms/vbacontrol.hxx
@@ -48,6 +48,10 @@ class ScVbaControl : public ControlImpl_BASE
private:
com::sun::star::uno::Reference< com::sun::star::lang::XEventListener > m_xEventListener;
protected:
+ // awt control has nothing similar to Tag property of Mso controls,
+ // whether it is necessary is another question
+ ::rtl::OUString m_aControlTag;
+
std::auto_ptr< ov::AbstractGeometryAttributes > mpGeometryHelper;
css::uno::Reference< css::beans::XPropertySet > m_xProps;
css::uno::Reference< css::uno::XInterface > m_xControl;
@@ -75,6 +79,7 @@ public:
virtual double SAL_CALL getTop() throw (css::uno::RuntimeException);
virtual void SAL_CALL setTop( double _top ) throw (css::uno::RuntimeException);
virtual void SAL_CALL SetFocus( ) throw (css::uno::RuntimeException);
+ virtual void SAL_CALL Move( double Left, double Top, const ::com::sun::star::uno::Any& Width, const ::com::sun::star::uno::Any& Height ) throw (::com::sun::star::uno::RuntimeException);
virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getObject() throw (css::uno::RuntimeException);
virtual rtl::OUString SAL_CALL getControlSource() throw (css::uno::RuntimeException);
@@ -85,6 +90,8 @@ public:
virtual void SAL_CALL setName( const rtl::OUString& _name ) throw (css::uno::RuntimeException);
virtual rtl::OUString SAL_CALL getControlTipText() throw (css::uno::RuntimeException);
virtual void SAL_CALL setControlTipText( const rtl::OUString& ) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getTag() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setTag( const ::rtl::OUString& aTag ) throw (css::uno::RuntimeException);
//remove resouce because ooo.vba.excel.XControl is a wrapper of com.sun.star.drawing.XControlShape
virtual void removeResouce() throw( css::uno::RuntimeException );
//XHelperInterface
diff --git a/vbahelper/source/msforms/vbacontrols.cxx b/vbahelper/source/msforms/vbacontrols.cxx
index 48ef83d60aa6..1284b36be463 100644
--- a/vbahelper/source/msforms/vbacontrols.cxx
+++ b/vbahelper/source/msforms/vbacontrols.cxx
@@ -25,9 +25,14 @@
*
************************************************************************/
+#include <com/sun/star/awt/XControl.hpp>
+#include <com/sun/star/awt/XControlContainer.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/script/XInvocation.hpp>
+#include <com/sun/star/lang/WrappedTargetException.hpp>
+
#include "vbacontrols.hxx"
#include <cppuhelper/implbase2.hxx>
-#include <com/sun/star/awt/XControlContainer.hpp>
#include <ooo/vba//XControlProvider.hpp>
#include <hash_map>
@@ -48,16 +53,25 @@ class ControlArrayWrapper : public ArrayWrapImpl
ControlVec mControls;
ControlIndexMap mIndices;
- rtl::OUString getControlName( const uno::Reference< awt::XControl >& xCtrl )
+private:
+ void SetArrayElementTo( const uno::Reference< awt::XControl >& xCtrl, sal_Int32 nIndex = -1 )
{
- uno::Reference< beans::XPropertySet > xProp( xCtrl->getModel(), uno::UNO_QUERY );
- rtl::OUString sName;
- xProp->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ) ) >>= sName;
- return sName;
+ // initialize the element with specified index to the control
+ if ( xCtrl.is() )
+ {
+ if ( nIndex == -1 )
+ nIndex = msNames.getLength();
+
+ if ( nIndex >= msNames.getLength() )
+ msNames.realloc( nIndex );
+
+ msNames[ nIndex ] = getControlName( xCtrl );
+ mControls.push_back( xCtrl );
+ mIndices[ msNames[ nIndex ] ] = nIndex;
+ }
}
public:
-
ControlArrayWrapper( const uno::Reference< awt::XControl >& xDialog )
{
mxDialog.set( xDialog, uno::UNO_QUERY_THROW );
@@ -65,14 +79,21 @@ public:
msNames.realloc( sXControls.getLength() );
for ( sal_Int32 i = 0; i < sXControls.getLength(); ++i )
- {
- uno::Reference< awt::XControl > xCtrl = sXControls[ i ];
- msNames[ i ] = getControlName( xCtrl );
- mControls.push_back( xCtrl );
- mIndices[ msNames[ i ] ] = i;
- }
+ SetArrayElementTo( sXControls[ i ], i );
+ }
+
+ static rtl::OUString getControlName( const uno::Reference< awt::XControl >& xCtrl )
+ {
+ if ( !xCtrl.is() )
+ throw uno::RuntimeException();
+
+ uno::Reference< beans::XPropertySet > xProp( xCtrl->getModel(), uno::UNO_QUERY_THROW );
+ rtl::OUString sName;
+ xProp->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Name" ) ) ) >>= sName;
+ return sName;
}
+
// XElementAccess
virtual uno::Type SAL_CALL getElementType( ) throw (uno::RuntimeException)
{
@@ -204,6 +225,141 @@ ScVbaControls::Move( double cx, double cy ) throw (uno::RuntimeException)
}
}
+uno::Any SAL_CALL ScVbaControls::Add( const uno::Any& Object, const uno::Any& StringKey, const uno::Any& /*Before*/, const uno::Any& /*After*/ )
+ throw (uno::RuntimeException)
+{
+ uno::Any aResult;
+ ::rtl::OUString aComServiceName;
+
+ try
+ {
+ if ( !mxDialog.is() )
+ throw uno::RuntimeException();
+
+ uno::Reference< awt::XControl > xNewControl;
+ uno::Reference< lang::XMultiServiceFactory > xModelFactory( mxDialog->getModel(), uno::UNO_QUERY_THROW );
+
+ uno::Reference< container::XNameContainer > xDialogContainer( xModelFactory, uno::UNO_QUERY_THROW );
+
+ Object >>= aComServiceName;
+
+ // TODO: Support Before and After?
+ ::rtl::OUString aNewName;
+ StringKey >>= aNewName;
+ if ( !aNewName.getLength() )
+ {
+ aNewName = aComServiceName;
+ if ( !aNewName.getLength() )
+ aNewName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Control" ) );
+
+ sal_Int32 nInd = 0;
+ while( xDialogContainer->hasByName( aNewName ) && nInd < SAL_MAX_INT32 )
+ {
+ aNewName = aComServiceName;
+ aNewName += ::rtl::OUString::valueOf( nInd );
+ }
+ }
+
+ if ( aComServiceName.getLength() )
+ {
+ uno::Reference< awt::XControlModel > xNewModel( xModelFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.custom.awt.UnoControlSystemAXContainerModel" ) ) ), uno::UNO_QUERY_THROW );
+
+
+ xDialogContainer->insertByName( aNewName, uno::makeAny( xNewModel ) );
+ uno::Reference< awt::XControlContainer > xControlContainer( mxDialog, uno::UNO_QUERY_THROW );
+ xNewControl = xControlContainer->getControl( aNewName );
+
+ try
+ {
+ uno::Reference< script::XInvocation > xControlInvoke( xNewControl, uno::UNO_QUERY_THROW );
+
+ uno::Sequence< uno::Any > aArgs( 1 );
+ aArgs[0] <<= aComServiceName;
+ uno::Sequence< sal_Int16 > aOutIDDummy;
+ uno::Sequence< uno::Any > aOutDummy;
+ xControlInvoke->invoke( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SOAddAXControl" ) ), aArgs, aOutIDDummy, aOutDummy );
+ }
+ catch( uno::Exception& )
+ {
+ xDialogContainer->removeByName( aNewName );
+ throw;
+ }
+ }
+
+ if ( xNewControl.is() )
+ {
+ UpdateCollectionIndex( lcl_controlsWrapper( mxDialog ) );
+ aResult <<= xNewControl;
+ aResult = createCollectionObject( aResult );
+ }
+ else
+ throw uno::RuntimeException();
+ }
+ catch( uno::RuntimeException& )
+ {
+ throw;
+ }
+ catch( uno::Exception& e )
+ {
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not create AXControl!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
+ }
+
+ return aResult;
+}
+
+void SAL_CALL ScVbaControls::Remove( const uno::Any& StringKeyOrIndex )
+ throw (uno::RuntimeException)
+{
+ ::rtl::OUString aControlName;
+ sal_Int32 nIndex = -1;
+
+ try
+ {
+ if ( !mxDialog.is() )
+ throw uno::RuntimeException();
+
+ uno::Reference< lang::XMultiServiceFactory > xModelFactory( mxDialog->getModel(), uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameContainer > xDialogContainer( xModelFactory, uno::UNO_QUERY_THROW );
+
+ if ( !( ( StringKeyOrIndex >>= aControlName ) && aControlName.getLength() )
+ && !( ( StringKeyOrIndex >>= nIndex ) && nIndex >= 0 && nIndex < m_xIndexAccess->getCount() ) )
+ throw uno::RuntimeException();
+
+ uno::Reference< awt::XControl > xControl;
+ if ( aControlName.getLength() )
+ {
+ uno::Reference< awt::XControlContainer > xControlContainer( mxDialog, uno::UNO_QUERY_THROW );
+ xControl = xControlContainer->getControl( aControlName );
+ }
+ else
+ {
+ m_xIndexAccess->getByIndex( nIndex ) >>= xControl;
+ }
+
+ if ( !xControl.is() )
+ throw uno::RuntimeException();
+
+ if ( !aControlName.getLength() )
+ aControlName = ControlArrayWrapper::getControlName( xControl );
+
+ xDialogContainer->removeByName( aControlName );
+ xControl->dispose();
+ }
+ catch( uno::RuntimeException& )
+ {
+ throw;
+ }
+ catch( uno::Exception& e )
+ {
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not create AXControl!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
+ }
+}
+
+
uno::Type
ScVbaControls::getElementType() throw (uno::RuntimeException)
{
diff --git a/vbahelper/source/msforms/vbacontrols.hxx b/vbahelper/source/msforms/vbacontrols.hxx
index 804133dbddfa..a72506609531 100644
--- a/vbahelper/source/msforms/vbacontrols.hxx
+++ b/vbahelper/source/msforms/vbacontrols.hxx
@@ -39,14 +39,19 @@ typedef CollTestImplHelper< ov::msforms::XControls > ControlsImpl_BASE;
class ScVbaControls : public ControlsImpl_BASE
{
css::uno::Reference< css::awt::XControl > mxDialog;
+
protected:
virtual rtl::OUString& getServiceImplName();
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
+
public:
ScVbaControls( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext,
const css::uno::Reference< css::awt::XControl >& xDialog );
// XControls
- virtual void SAL_CALL Move( double cx, double cy ) throw (css::uno::RuntimeException);
+ virtual void SAL_CALL Move( double cx, double cy ) throw (css::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Any SAL_CALL Add( const ::com::sun::star::uno::Any& Object, const ::com::sun::star::uno::Any& StringKey, const ::com::sun::star::uno::Any& Before, const ::com::sun::star::uno::Any& After ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL Remove( const ::com::sun::star::uno::Any& StringKeyOrIndex ) throw (::com::sun::star::uno::RuntimeException);
+
// XEnumerationAccess
virtual css::uno::Type SAL_CALL getElementType() throw (css::uno::RuntimeException);
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() throw (css::uno::RuntimeException);
diff --git a/vbahelper/source/msforms/vbasystemaxcontrol.cxx b/vbahelper/source/msforms/vbasystemaxcontrol.cxx
new file mode 100755
index 000000000000..ed2fc70164ac
--- /dev/null
+++ b/vbahelper/source/msforms/vbasystemaxcontrol.cxx
@@ -0,0 +1,101 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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.
+ *
+ ************************************************************************/
+#include "vbasystemaxcontrol.hxx"
+
+using namespace com::sun::star;
+using namespace ooo::vba;
+
+//----------------------------------------------------------
+VbaSystemAXControl::VbaSystemAXControl( const uno::Reference< ov::XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< uno::XInterface >& xControl, const uno::Reference< frame::XModel >& xModel, AbstractGeometryAttributes* pGeomHelper )
+: SystemAXControlImpl_BASE( xParent, xContext, xControl, xModel, pGeomHelper )
+, m_xControlInvocation( xControl, uno::UNO_QUERY_THROW )
+{
+}
+
+//----------------------------------------------------------
+uno::Reference< beans::XIntrospectionAccess > SAL_CALL VbaSystemAXControl::getIntrospection()
+ throw ( uno::RuntimeException )
+{
+ return m_xControlInvocation->getIntrospection();
+}
+
+//----------------------------------------------------------
+uno::Any SAL_CALL VbaSystemAXControl::invoke( const ::rtl::OUString& aFunctionName, const uno::Sequence< uno::Any >& aParams, uno::Sequence< ::sal_Int16 >& aOutParamIndex, uno::Sequence< uno::Any >& aOutParam )
+ throw ( lang::IllegalArgumentException, script::CannotConvertException, reflection::InvocationTargetException, uno::RuntimeException )
+{
+ return m_xControlInvocation->invoke( aFunctionName, aParams, aOutParamIndex, aOutParam );
+}
+
+//----------------------------------------------------------
+void SAL_CALL VbaSystemAXControl::setValue( const ::rtl::OUString& aPropertyName, const uno::Any& aValue )
+ throw ( beans::UnknownPropertyException, script::CannotConvertException, reflection::InvocationTargetException, uno::RuntimeException )
+{
+ m_xControlInvocation->setValue( aPropertyName, aValue );
+}
+
+//----------------------------------------------------------
+uno::Any SAL_CALL VbaSystemAXControl::getValue( const ::rtl::OUString& aPropertyName )
+ throw ( beans::UnknownPropertyException, uno::RuntimeException )
+{
+ return m_xControlInvocation->getValue( aPropertyName );
+}
+
+//----------------------------------------------------------
+::sal_Bool SAL_CALL VbaSystemAXControl::hasMethod( const ::rtl::OUString& aName )
+ throw ( uno::RuntimeException )
+{
+ return m_xControlInvocation->hasMethod( aName );
+}
+
+//----------------------------------------------------------
+::sal_Bool SAL_CALL VbaSystemAXControl::hasProperty( const ::rtl::OUString& aName )
+ throw ( uno::RuntimeException )
+{
+ return m_xControlInvocation->hasProperty( aName );
+}
+
+//----------------------------------------------------------
+rtl::OUString&
+VbaSystemAXControl::getServiceImplName()
+{
+ static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM( "VbaSystemAXControl" ) );
+ return sImplName;
+}
+
+//----------------------------------------------------------
+uno::Sequence< rtl::OUString >
+VbaSystemAXControl::getServiceNames()
+{
+ static uno::Sequence< rtl::OUString > aServiceNames;
+ if ( aServiceNames.getLength() == 0 )
+ {
+ aServiceNames.realloc( 1 );
+ aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.msforms.Frame" ) );
+ }
+ return aServiceNames;
+}
+
diff --git a/vbahelper/source/msforms/vbasystemaxcontrol.hxx b/vbahelper/source/msforms/vbasystemaxcontrol.hxx
new file mode 100755
index 000000000000..bffe5b99c4f1
--- /dev/null
+++ b/vbahelper/source/msforms/vbasystemaxcontrol.hxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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 VBA_SYSTEMAXCONTROL_HXX
+#define VBA_SYSTEMAXCONTROL_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/script/XInvocation.hpp>
+
+#include "vbacontrol.hxx"
+#include <vbahelper/vbahelper.hxx>
+
+typedef cppu::ImplInheritanceHelper1< ScVbaControl, css::script::XInvocation > SystemAXControlImpl_BASE;
+
+class VbaSystemAXControl : public SystemAXControlImpl_BASE
+{
+ css::uno::Reference< css::script::XInvocation > m_xControlInvocation;
+
+public:
+ VbaSystemAXControl( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::uno::XInterface >& xControl, const css::uno::Reference< css::frame::XModel >& xModel, ov::AbstractGeometryAttributes* pGeomHelper );
+
+ // XInvocation
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XIntrospectionAccess > SAL_CALL getIntrospection( ) throw ( ::com::sun::star::uno::RuntimeException );
+ virtual ::com::sun::star::uno::Any SAL_CALL invoke( const ::rtl::OUString& aFunctionName, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aParams, ::com::sun::star::uno::Sequence< ::sal_Int16 >& aOutParamIndex, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aOutParam ) throw ( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::script::CannotConvertException, ::com::sun::star::reflection::InvocationTargetException, ::com::sun::star::uno::RuntimeException );
+ virtual void SAL_CALL setValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::script::CannotConvertException, ::com::sun::star::reflection::InvocationTargetException, ::com::sun::star::uno::RuntimeException );
+ virtual ::com::sun::star::uno::Any SAL_CALL getValue( const ::rtl::OUString& aPropertyName ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException );
+ virtual ::sal_Bool SAL_CALL hasMethod( const ::rtl::OUString& aName ) throw ( ::com::sun::star::uno::RuntimeException );
+ virtual ::sal_Bool SAL_CALL hasProperty( const ::rtl::OUString& aName ) throw ( ::com::sun::star::uno::RuntimeException );
+
+ //XHelperInterface
+ virtual rtl::OUString& getServiceImplName();
+ virtual css::uno::Sequence<rtl::OUString> getServiceNames();
+};
+
+#endif
diff --git a/vbahelper/source/vbahelper/makefile.mk b/vbahelper/source/vbahelper/makefile.mk
index b11b4ffa0a4f..47ad44b3d0ed 100644
--- a/vbahelper/source/vbahelper/makefile.mk
+++ b/vbahelper/source/vbahelper/makefile.mk
@@ -65,7 +65,6 @@ SLOFILES=\
$(SLO)$/vbashaperange.obj \
$(SLO)$/vbatextframe.obj \
$(SLO)$/vbapagesetupbase.obj \
-
# --- Targets -------------------------------------------------------
.INCLUDE : target.mk
diff --git a/vbahelper/source/vbahelper/vbaapplicationbase.cxx b/vbahelper/source/vbahelper/vbaapplicationbase.cxx
index 54b635d2f08d..6d2c51066ca2 100644
--- a/vbahelper/source/vbahelper/vbaapplicationbase.cxx
+++ b/vbahelper/source/vbahelper/vbaapplicationbase.cxx
@@ -26,15 +26,24 @@
************************************************************************/
#include "vbahelper/vbaapplicationbase.hxx"
#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp> //Michael E. Bohn
+#include <com/sun/star/lang/XMultiComponentFactory.hpp> //Michael E. Bohn
+#include <com/sun/star/lang/XComponent.hpp> //Michael E. Bohn
+#include <com/sun/star/container/XEnumeration.hpp> //Michael E. Bohn
#include <com/sun/star/frame/XLayoutManager.hpp>
#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <com/sun/star/document/XDocumentInfoSupplier.hpp>
#include <com/sun/star/document/XDocumentProperties.hpp>
#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/document/XEmbeddedScripts.hpp> //Michael E. Bohn
+#include <ooo/vba/XVBAAppService.hpp> //Michael E. Bohn
+#include <com/sun/star/awt/XWindow2.hpp>
+
#include "vbacommandbars.hxx"
#include <filter/msfilter/msvbahelper.hxx>
+#include <tools/datetime.hxx>
// start basic includes
#include <basic/sbx.hxx>
@@ -43,18 +52,141 @@
#include <basic/sbmeth.hxx>
#include <basic/sbmod.hxx>
// end basic includes
+
+#include <hash_map>
+
using namespace com::sun::star;
using namespace ooo::vba;
#define OFFICEVERSION "11.0"
+// ====VbaTimerInfo==================================
+typedef ::std::pair< ::rtl::OUString, ::std::pair< double, double > > VbaTimerInfo;
+
+// ====VbaTimer==================================
+class VbaTimer
+{
+ Timer m_aTimer;
+ VbaTimerInfo m_aTimerInfo;
+ ::rtl::Reference< VbaApplicationBase > m_xBase;
+
+ // the following declarations are here to prevent the usage of them
+ VbaTimer( const VbaTimer& );
+ VbaTimer& operator=( const VbaTimer& );
+
+public:
+ VbaTimer()
+ {}
+
+ virtual ~VbaTimer()
+ {
+ m_aTimer.Stop();
+ }
+
+ static double GetNow()
+ {
+ Date aDateNow;
+ Time aTimeNow;
+ Date aRefDate( 1,1,1900 );
+ long nDiffDays = (long)(aDateNow - aRefDate);
+ nDiffDays += 2; // Anpassung VisualBasic: 1.Jan.1900 == 2
+
+ long nDiffSeconds = aTimeNow.GetHour() * 3600 + aTimeNow.GetMin() * 60 + aTimeNow.GetSec();
+ return (double)nDiffDays + ((double)nDiffSeconds)/(double)(24*3600);
+ }
+
+ static sal_Int32 GetTimerMiliseconds( double nFrom, double nTo )
+ {
+ double nResult = nTo - nFrom;
+ if ( nResult > 0 )
+ nResult *= 24*3600*1000;
+ else
+ nResult = 50;
+
+ return (sal_Int32) nResult;
+ }
+
+ void Start( const ::rtl::Reference< VbaApplicationBase > xBase, const ::rtl::OUString& aFunction, double nFrom, double nTo )
+ {
+ if ( !xBase.is() || !aFunction.getLength() )
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected arguments!" ) ), uno::Reference< uno::XInterface >() );
+
+ m_xBase = xBase;
+ m_aTimerInfo = VbaTimerInfo( aFunction, ::std::pair< double, double >( nFrom, nTo ) );
+ m_aTimer.SetTimeoutHdl( LINK( this, VbaTimer, MacroCallHdl ) );
+ m_aTimer.SetTimeout( GetTimerMiliseconds( GetNow(), nFrom ) );
+ m_aTimer.Start();
+ }
+
+ DECL_LINK( MacroCallHdl, void* );
+};
+
+IMPL_LINK( VbaTimer, MacroCallHdl, void*, EMPTYARG )
+{
+ if ( m_aTimerInfo.second.second == 0 || GetNow() < m_aTimerInfo.second.second )
+ {
+ uno::Any aDummyArg;
+ try
+ {
+ m_xBase->Run( m_aTimerInfo.first, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg, aDummyArg );
+ }
+ catch( uno::Exception& )
+ {}
+ }
+
+ // mast be the last call in the method since it deletes the timer
+ try
+ {
+ m_xBase->OnTime( uno::makeAny( m_aTimerInfo.second.first ), m_aTimerInfo.first, uno::makeAny( m_aTimerInfo.second.second ), uno::makeAny( sal_False ) );
+ } catch( uno::Exception& )
+ {}
+
+ return 0;
+}
+
+// ====VbaTimerInfoHash==================================
+struct VbaTimerInfoHash
+{
+ size_t operator()( const VbaTimerInfo& rTimerInfo ) const
+ {
+ return (size_t)rTimerInfo.first.hashCode()
+ + (size_t)rtl_str_hashCode_WithLength( (char*)&rTimerInfo.second.first, sizeof( double ) )
+ + (size_t)rtl_str_hashCode_WithLength( (char*)&rTimerInfo.second.second, sizeof( double ) );
+ }
+};
+
+// ====VbaTimerHashMap==================================
+typedef ::std::hash_map< VbaTimerInfo, VbaTimer*, VbaTimerInfoHash, ::std::equal_to< VbaTimerInfo > > VbaTimerHashMap;
+
+// ====VbaApplicationBase_Impl==================================
+struct VbaApplicationBase_Impl
+{
+ VbaTimerHashMap m_aTimerHash;
+
+ virtual ~VbaApplicationBase_Impl()
+ {
+ // remove the remaining timers
+ for ( VbaTimerHashMap::iterator aIter = m_aTimerHash.begin();
+ aIter != m_aTimerHash.end();
+ aIter++ )
+ {
+ delete aIter->second;
+ aIter->second = NULL;
+ }
+ }
+};
+
+// ====VbaApplicationBase==================================
VbaApplicationBase::VbaApplicationBase( const uno::Reference< uno::XComponentContext >& xContext )
: ApplicationBase_BASE( uno::Reference< XHelperInterface >(), xContext )
+ , m_pImpl( new VbaApplicationBase_Impl )
{
}
VbaApplicationBase::~VbaApplicationBase()
{
+ m_pImpl = 0;
+ delete m_pImpl;
}
sal_Bool SAL_CALL
@@ -116,6 +248,26 @@ VbaApplicationBase::setDisplayStatusBar(sal_Bool bDisplayStatusBar) throw (uno::
return;
}
+::sal_Bool SAL_CALL VbaApplicationBase::getInteractive()
+ throw (uno::RuntimeException)
+{
+ uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW );
+ uno::Reference< frame::XFrame > xFrame( xModel->getCurrentController()->getFrame(), uno::UNO_QUERY_THROW );
+ uno::Reference< awt::XWindow2 > xWindow( xFrame->getContainerWindow(), uno::UNO_QUERY_THROW );
+
+ return xWindow->isEnabled();
+}
+
+void SAL_CALL VbaApplicationBase::setInteractive( ::sal_Bool bInteractive )
+ throw (uno::RuntimeException)
+{
+ uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW );
+ uno::Reference< frame::XFrame > xFrame( xModel->getCurrentController()->getFrame(), uno::UNO_QUERY_THROW );
+ uno::Reference< awt::XWindow > xWindow( xFrame->getContainerWindow(), uno::UNO_SET_THROW );
+
+ xWindow->setEnable( bInteractive );
+}
+
uno::Any SAL_CALL
VbaApplicationBase::CommandBars( const uno::Any& aIndex ) throw (uno::RuntimeException)
{
@@ -133,7 +285,54 @@ VbaApplicationBase::getVersion() throw (uno::RuntimeException)
void SAL_CALL VbaApplicationBase::Run( const ::rtl::OUString& MacroName, const uno::Any& varg1, const uno::Any& varg2, const uno::Any& varg3, const uno::Any& varg4, const uno::Any& varg5, const uno::Any& varg6, const uno::Any& varg7, const uno::Any& varg8, const uno::Any& varg9, const uno::Any& varg10, const uno::Any& varg11, const uno::Any& varg12, const uno::Any& varg13, const uno::Any& varg14, const uno::Any& varg15, const uno::Any& varg16, const uno::Any& varg17, const uno::Any& varg18, const uno::Any& varg19, const uno::Any& varg20, const uno::Any& varg21, const uno::Any& varg22, const uno::Any& varg23, const uno::Any& varg24, const uno::Any& varg25, const uno::Any& varg26, const uno::Any& varg27, const uno::Any& varg28, const uno::Any& varg29, const uno::Any& varg30 ) throw (uno::RuntimeException)
{
- VBAMacroResolvedInfo aMacroInfo = resolveVBAMacro( getSfxObjShell( getCurrentDocument() ), MacroName );
+ ::rtl::OUString sSeparator = ::rtl::OUString::createFromAscii("/");
+ ::rtl::OUString sMacroSeparator = ::rtl::OUString::createFromAscii("!");
+ ::rtl::OUString sMacro_only_Name;
+ sal_Int32 Position_MacroSeparator = MacroName.indexOf(sMacroSeparator);
+
+ uno::Reference< frame::XModel > aMacroDocumentModel;
+ if (-1 != Position_MacroSeparator)
+ {
+ uno::Reference< container::XEnumerationAccess > xComponentEnumAccess;
+ uno::Reference< lang::XMultiComponentFactory > xServiceManager = mxContext->getServiceManager();
+ try
+ {
+ uno::Reference< frame::XDesktop > xDesktop (xServiceManager->createInstanceWithContext( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.Desktop" )),mxContext ), uno::UNO_QUERY_THROW );
+ xComponentEnumAccess = xDesktop->getComponents();
+ }
+ catch(uno::Exception&)
+ {
+ }
+
+ //rem look for the name of the document in the cmpoonents collection
+ uno::Reference < container::XEnumeration > xEnum = xComponentEnumAccess->createEnumeration();
+
+ // iterate through the collection by name
+ while (xEnum->hasMoreElements())
+ {
+ // get the next element as a UNO Any
+ uno::Any aComponentHelper = xEnum->nextElement();
+ uno::Reference <frame::XModel> xDocModel( aComponentHelper, uno::UNO_QUERY_THROW );
+
+ // get the name of the sheet from its XNamed interface
+ ::rtl::OUString aName = xDocModel->getURL();
+
+
+ if (aName.match(MacroName.copy(0,Position_MacroSeparator-1),aName.lastIndexOf(sSeparator)+1))
+ {
+ aMacroDocumentModel = xDocModel;
+ sMacro_only_Name = MacroName.copy(Position_MacroSeparator+1);
+ }
+ }
+ }
+ else
+ {
+ aMacroDocumentModel = getCurrentDocument();
+ sMacro_only_Name = MacroName.copy(0);
+ }
+
+
+ VBAMacroResolvedInfo aMacroInfo = resolveVBAMacro( getSfxObjShell( aMacroDocumentModel ), sMacro_only_Name );
if( aMacroInfo.IsResolved() )
{
// handle the arguments
@@ -168,6 +367,39 @@ void SAL_CALL VbaApplicationBase::Run( const ::rtl::OUString& MacroName, const u
}
}
+void SAL_CALL VbaApplicationBase::OnTime( const uno::Any& aEarliestTime, const ::rtl::OUString& aFunction, const uno::Any& aLatestTime, const uno::Any& aSchedule )
+ throw ( uno::RuntimeException )
+{
+ if ( !aFunction.getLength() )
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unexpected function name!" ) ), uno::Reference< uno::XInterface >() );
+
+ double nEarliestTime = 0;
+ double nLatestTime = 0;
+ if ( !( aEarliestTime >>= nEarliestTime )
+ || ( aLatestTime.hasValue() && !( aLatestTime >>= nLatestTime ) ) )
+ throw uno::RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Only double is supported as time for now!" ) ), uno::Reference< uno::XInterface >() );
+
+ sal_Bool bSetTimer = sal_True;
+ aSchedule >>= bSetTimer;
+
+ VbaTimerInfo aTimerIndex( aFunction, ::std::pair< double, double >( nEarliestTime, nLatestTime ) );
+
+ VbaTimerHashMap::iterator aIter = m_pImpl->m_aTimerHash.find( aTimerIndex );
+ if ( aIter != m_pImpl->m_aTimerHash.end() )
+ {
+ delete aIter->second;
+ aIter->second = NULL;
+ m_pImpl->m_aTimerHash.erase( aIter );
+ }
+
+ if ( bSetTimer )
+ {
+ VbaTimer* pTimer = new VbaTimer;
+ m_pImpl->m_aTimerHash[ aTimerIndex ] = pTimer;
+ pTimer->Start( this, aFunction, nEarliestTime, nLatestTime );
+ }
+}
+
float SAL_CALL VbaApplicationBase::CentimetersToPoints( float _Centimeters ) throw (uno::RuntimeException)
{
// i cm = 28.35 points
@@ -175,6 +407,57 @@ float SAL_CALL VbaApplicationBase::CentimetersToPoints( float _Centimeters ) thr
return ( _Centimeters * rate );
}
+// inserted by Michael E. Bohn
+uno::Any SAL_CALL VbaApplicationBase::getVBE() throw (uno::RuntimeException)
+{
+ uno::Any aAny;
+ uno::Reference< ::lang::XMultiComponentFactory > xServiceManager = mxContext->getServiceManager();
+ try
+ {
+ uno::Reference < ::uno::XInterface > xInterface = xServiceManager->createInstanceWithContext( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAAppService" )),mxContext);
+ uno::Reference < ::ooo::vba::XVBAAppService > xVBAAppService (xInterface, ::uno::UNO_QUERY_THROW );
+ if (xVBAAppService.is()){
+ uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW );
+ return xVBAAppService->getVBE( this, mxContext, xModel);
+ }
+
+ }catch(uno::Exception* e)
+ {
+ }
+ return aAny;
+}
+
+uno::Any SAL_CALL
+VbaApplicationBase::getVBProjects() throw (uno::RuntimeException)
+{
+ uno::Any aAny;
+ uno::Reference< ::lang::XMultiComponentFactory > xServiceManager = mxContext->getServiceManager();
+ try
+ {
+ uno::Reference < ::uno::XInterface > xInterface = xServiceManager->createInstanceWithContext( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAAppService" )),mxContext);
+ uno::Reference < ::ooo::vba::XVBAAppService > xVBAAppService (xInterface, ::uno::UNO_QUERY_THROW );
+ if (xVBAAppService.is()){
+ uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW );
+ uno::Reference< document::XEmbeddedScripts > xEnbeddedScripts ( xModel, uno::UNO_QUERY_THROW );
+ uno::Reference< script::XStorageBasedLibraryContainer > xMacroStorageBasedLibraryContainer = xEnbeddedScripts->getBasicLibraries();
+ uno::Reference< script::XStorageBasedLibraryContainer > xDialogStorageBasedLibraryContainer = xEnbeddedScripts->getDialogLibraries();
+ uno::Reference< script::XLibraryContainer > xMacroLibraryContainer ( xMacroStorageBasedLibraryContainer, uno::UNO_QUERY_THROW );
+ uno::Reference< script::XLibraryContainer > xDialogLibraryContainer( xDialogStorageBasedLibraryContainer, uno::UNO_QUERY_THROW );
+ return xVBAAppService->getVBProjects(this, mxContext, xModel, xMacroLibraryContainer, xDialogLibraryContainer);
+ }
+
+ }catch(uno::Exception* e)
+ {
+ }
+ return aAny;
+
+
+
+}
+
+
+
+
rtl::OUString&
VbaApplicationBase::getServiceImplName()
{
@@ -193,6 +476,13 @@ VbaApplicationBase::getServiceNames()
return aServiceNames;
}
+void SAL_CALL VbaApplicationBase::Undo()
+ throw (uno::RuntimeException)
+{
+ uno::Reference< frame::XModel > xModel( getCurrentDocument(), uno::UNO_QUERY_THROW );
+ dispatchRequests( xModel, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Undo" ) ) );
+}
+
void VbaApplicationBase::Quit() throw (uno::RuntimeException)
{
// need to stop basic
@@ -208,3 +498,4 @@ void VbaApplicationBase::Quit() throw (uno::RuntimeException)
}
}
}
+
diff --git a/vbahelper/source/vbahelper/vbacommandbar.cxx b/vbahelper/source/vbahelper/vbacommandbar.cxx
index 1e2911ad4f52..1e8d21d53583 100644
--- a/vbahelper/source/vbahelper/vbacommandbar.cxx
+++ b/vbahelper/source/vbahelper/vbacommandbar.cxx
@@ -202,3 +202,85 @@ ScVbaCommandBar::getServiceNames()
}
return aServiceNames;
}
+
+
+VbaDummyCommandBar::VbaDummyCommandBar(
+ const uno::Reference< ov::XHelperInterface > xParent,
+ const uno::Reference< uno::XComponentContext > xContext,
+ const ::rtl::OUString& rName, sal_Int32 nType ) throw( uno::RuntimeException ) :
+ CommandBar_BASE( xParent, xContext ),
+ maName( rName ),
+ mnType( nType )
+{
+}
+
+::rtl::OUString SAL_CALL VbaDummyCommandBar::getName() throw ( uno::RuntimeException )
+{
+ return maName;
+}
+
+void SAL_CALL VbaDummyCommandBar::setName( const ::rtl::OUString& _name ) throw (uno::RuntimeException)
+{
+ maName = _name;
+}
+
+::sal_Bool SAL_CALL VbaDummyCommandBar::getVisible() throw (uno::RuntimeException)
+{
+ return sal_True;
+}
+
+void SAL_CALL VbaDummyCommandBar::setVisible( ::sal_Bool /*_visible*/ ) throw (uno::RuntimeException)
+{
+}
+
+::sal_Bool SAL_CALL VbaDummyCommandBar::getEnabled() throw (uno::RuntimeException)
+{
+ // emulated with Visible
+ return getVisible();
+}
+
+void SAL_CALL VbaDummyCommandBar::setEnabled( sal_Bool _enabled ) throw (uno::RuntimeException)
+{
+ // emulated with Visible
+ setVisible( _enabled );
+}
+
+void SAL_CALL VbaDummyCommandBar::Delete( ) throw (script::BasicErrorException, uno::RuntimeException)
+{
+ // no-op
+}
+
+uno::Any SAL_CALL VbaDummyCommandBar::Controls( const uno::Any& aIndex ) throw (script::BasicErrorException, uno::RuntimeException)
+{
+ uno::Reference< XCommandBarControls > xCommandBarControls( new VbaDummyCommandBarControls( this, mxContext ) );
+ if( aIndex.hasValue() )
+ return xCommandBarControls->Item( aIndex, uno::Any() );
+ return uno::Any( xCommandBarControls );
+}
+
+sal_Int32 SAL_CALL VbaDummyCommandBar::Type() throw (script::BasicErrorException, uno::RuntimeException)
+{
+ return mnType;
+}
+
+uno::Any SAL_CALL VbaDummyCommandBar::FindControl( const uno::Any& /*aType*/, const uno::Any& /*aId*/, const uno::Any& /*aTag*/, const uno::Any& /*aVisible*/, const uno::Any& /*aRecursive*/ ) throw (script::BasicErrorException, uno::RuntimeException)
+{
+ return uno::Any( uno::Reference< XCommandBarControl >() );
+}
+
+rtl::OUString& VbaDummyCommandBar::getServiceImplName()
+{
+ static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("VbaDummyCommandBar") );
+ return sImplName;
+}
+
+uno::Sequence< rtl::OUString > VbaDummyCommandBar::getServiceNames()
+{
+ static uno::Sequence< rtl::OUString > aServiceNames;
+ if ( aServiceNames.getLength() == 0 )
+ {
+ aServiceNames.realloc( 1 );
+ aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.CommandBar" ) );
+ }
+ return aServiceNames;
+}
diff --git a/vbahelper/source/vbahelper/vbacommandbar.hxx b/vbahelper/source/vbahelper/vbacommandbar.hxx
index 4f488fab6cd2..bcb5a11e9691 100644
--- a/vbahelper/source/vbahelper/vbacommandbar.hxx
+++ b/vbahelper/source/vbahelper/vbacommandbar.hxx
@@ -72,4 +72,38 @@ public:
virtual rtl::OUString& getServiceImplName();
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
};
+
+/** Dummy command bar implementation. Does nothing but provide its name. */
+class VbaDummyCommandBar : public CommandBar_BASE
+{
+public:
+ VbaDummyCommandBar(
+ const css::uno::Reference< ov::XHelperInterface > xParent,
+ const css::uno::Reference< css::uno::XComponentContext > xContext,
+ const ::rtl::OUString& rName,
+ sal_Int32 nType ) throw( css::uno::RuntimeException );
+
+ // Attributes
+ virtual ::rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setName( const ::rtl::OUString& _name ) throw (css::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL getVisible() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setVisible( ::sal_Bool _visible ) throw (css::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL getEnabled() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setEnabled( ::sal_Bool _enabled ) throw (css::uno::RuntimeException);
+
+ // Methods
+ virtual void SAL_CALL Delete( ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL Controls( const css::uno::Any& aIndex ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual sal_Int32 SAL_CALL Type( ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ virtual css::uno::Any SAL_CALL FindControl( const css::uno::Any& aType, const css::uno::Any& aId, const css::uno::Any& aTag, const css::uno::Any& aVisible, const css::uno::Any& aRecursive ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+
+ // XHelperInterface
+ virtual rtl::OUString& getServiceImplName();
+ virtual css::uno::Sequence<rtl::OUString> getServiceNames();
+
+private:
+ ::rtl::OUString maName;
+ sal_Int32 mnType;
+};
+
#endif//SC_VBA_COMMANDBAR_HXX
diff --git a/vbahelper/source/vbahelper/vbacommandbarcontrol.cxx b/vbahelper/source/vbahelper/vbacommandbarcontrol.cxx
index a4bb3adc7dbf..3f9c7ddeae89 100644
--- a/vbahelper/source/vbahelper/vbacommandbarcontrol.cxx
+++ b/vbahelper/source/vbahelper/vbacommandbarcontrol.cxx
@@ -141,6 +141,22 @@ ScVbaCommandBarControl::setEnabled( sal_Bool _enabled ) throw (uno::RuntimeExcep
}
}
+::sal_Bool SAL_CALL
+ScVbaCommandBarControl::getBeginGroup() throw (css::uno::RuntimeException)
+{
+ // TODO: need to check if the item before this item is of type 'separator'
+ return sal_False;
+}
+
+void SAL_CALL
+ScVbaCommandBarControl::setBeginGroup( ::sal_Bool _begin ) throw (css::uno::RuntimeException)
+{
+ if( getBeginGroup() != _begin )
+ {
+ // TODO: need to insert or remove an item of type 'separator' before this item
+ }
+}
+
void SAL_CALL
ScVbaCommandBarControl::Delete( ) throw (script::BasicErrorException, uno::RuntimeException)
{
diff --git a/vbahelper/source/vbahelper/vbacommandbarcontrol.hxx b/vbahelper/source/vbahelper/vbacommandbarcontrol.hxx
index 6411430bacb1..a165f8e1cccd 100644
--- a/vbahelper/source/vbahelper/vbacommandbarcontrol.hxx
+++ b/vbahelper/source/vbahelper/vbacommandbarcontrol.hxx
@@ -67,6 +67,8 @@ public:
virtual void SAL_CALL setVisible( ::sal_Bool _visible ) throw (css::uno::RuntimeException);
virtual ::sal_Bool SAL_CALL getEnabled() throw (css::uno::RuntimeException);
virtual void SAL_CALL setEnabled( ::sal_Bool _enabled ) throw (css::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL getBeginGroup() throw (css::uno::RuntimeException);
+ virtual void SAL_CALL setBeginGroup( ::sal_Bool _begin ) throw (css::uno::RuntimeException);
virtual sal_Int32 SAL_CALL getType() throw (css::uno::RuntimeException)
{
return ov::office::MsoControlType::msoControlButton;
diff --git a/vbahelper/source/vbahelper/vbacommandbarcontrols.cxx b/vbahelper/source/vbahelper/vbacommandbarcontrols.cxx
index 21e2dfb4b368..634b4a0e9395 100644
--- a/vbahelper/source/vbahelper/vbacommandbarcontrols.cxx
+++ b/vbahelper/source/vbahelper/vbacommandbarcontrols.cxx
@@ -34,10 +34,10 @@ typedef ::cppu::WeakImplHelper1< container::XEnumeration > CommandBarControlEnum
class CommandBarControlEnumeration : public CommandBarControlEnumeration_BASE
{
//uno::Reference< uno::XComponentContext > m_xContext;
- ScVbaCommandBarControls* m_pCommandBarControls;
+ CommandBarControls_BASE* m_pCommandBarControls;
sal_Int32 m_nCurrentPosition;
public:
- CommandBarControlEnumeration( ScVbaCommandBarControls* pCommandBarControls ) : m_pCommandBarControls( pCommandBarControls ), m_nCurrentPosition( 0 ) {}
+ CommandBarControlEnumeration( CommandBarControls_BASE* pCommandBarControls ) : m_pCommandBarControls( pCommandBarControls ), m_nCurrentPosition( 0 ) {}
virtual sal_Bool SAL_CALL hasMoreElements() throw ( uno::RuntimeException )
{
if( m_nCurrentPosition < m_pCommandBarControls->getCount() )
@@ -140,7 +140,7 @@ ScVbaCommandBarControls::Item( const uno::Any& aIndex, const uno::Any& /*aIndex*
{
rtl::OUString sName;
aIndex >>= sName;
- nPosition = VbaCommandBarHelper::findControlByName( m_xIndexAccess, sName );
+ nPosition = VbaCommandBarHelper::findControlByName( m_xIndexAccess, sName, m_bIsMenu );
}
else
{
@@ -246,3 +246,75 @@ ScVbaCommandBarControls::getServiceNames()
return aServiceNames;
}
+// ============================================================================
+
+class VbaDummyIndexAccess : public ::cppu::WeakImplHelper1< container::XIndexAccess >
+{
+public:
+ inline VbaDummyIndexAccess() {}
+ // XIndexAccess
+ virtual ::sal_Int32 SAL_CALL getCount( ) throw (uno::RuntimeException)
+ { return 0; }
+ virtual uno::Any SAL_CALL getByIndex( ::sal_Int32 /*Index*/ ) throw (lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException)
+ { throw lang::IndexOutOfBoundsException(); }
+ // XElementAccess
+ virtual uno::Type SAL_CALL getElementType( ) throw (uno::RuntimeException)
+ { return XCommandBarControl::static_type( 0 ); }
+ virtual ::sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException)
+ { return false; }
+};
+
+// ----------------------------------------------------------------------------
+
+VbaDummyCommandBarControls::VbaDummyCommandBarControls(
+ const uno::Reference< XHelperInterface >& xParent,
+ const uno::Reference< uno::XComponentContext >& xContext ) throw (uno::RuntimeException) :
+ CommandBarControls_BASE( xParent, xContext, new VbaDummyIndexAccess )
+{
+}
+
+// XEnumerationAccess
+uno::Type SAL_CALL VbaDummyCommandBarControls::getElementType() throw ( uno::RuntimeException )
+{
+ return XCommandBarControl::static_type( 0 );
+}
+
+uno::Reference< container::XEnumeration > VbaDummyCommandBarControls::createEnumeration() throw ( uno::RuntimeException )
+{
+ return uno::Reference< container::XEnumeration >( new CommandBarControlEnumeration( this ) );
+}
+
+uno::Any VbaDummyCommandBarControls::createCollectionObject( const uno::Any& /*aSource*/ )
+{
+ return uno::Any( uno::Reference< XCommandBarControl >() );
+}
+
+// Methods
+uno::Any SAL_CALL VbaDummyCommandBarControls::Item( const uno::Any& /*aIndex*/, const uno::Any& /*aIndex*/ ) throw (uno::RuntimeException)
+{
+ return uno::Any( uno::Reference< XCommandBarControl >() );
+}
+
+uno::Reference< XCommandBarControl > SAL_CALL VbaDummyCommandBarControls::Add(
+ const uno::Any& /*Type*/, const uno::Any& /*Id*/, const uno::Any& /*Parameter*/, const uno::Any& /*Before*/, const uno::Any& /*Temporary*/ ) throw (script::BasicErrorException, uno::RuntimeException)
+{
+ return uno::Reference< XCommandBarControl >();
+}
+
+// XHelperInterface
+rtl::OUString& VbaDummyCommandBarControls::getServiceImplName()
+{
+ static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("VbaDummyCommandBarControls") );
+ return sImplName;
+}
+
+uno::Sequence<rtl::OUString> VbaDummyCommandBarControls::getServiceNames()
+{
+ static uno::Sequence< rtl::OUString > aServiceNames;
+ if ( aServiceNames.getLength() == 0 )
+ {
+ aServiceNames.realloc( 1 );
+ aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.CommandBarControls" ) );
+ }
+ return aServiceNames;
+}
diff --git a/vbahelper/source/vbahelper/vbacommandbarcontrols.hxx b/vbahelper/source/vbahelper/vbacommandbarcontrols.hxx
index 534ba5a10966..0b35773660d1 100644
--- a/vbahelper/source/vbahelper/vbacommandbarcontrols.hxx
+++ b/vbahelper/source/vbahelper/vbacommandbarcontrols.hxx
@@ -64,4 +64,24 @@ public:
virtual css::uno::Sequence<rtl::OUString> getServiceNames();
};
+class VbaDummyCommandBarControls : public CommandBarControls_BASE
+{
+public:
+ VbaDummyCommandBarControls(
+ const css::uno::Reference< ov::XHelperInterface >& xParent,
+ const css::uno::Reference< css::uno::XComponentContext >& xContext ) throw( css::uno::RuntimeException );
+
+ // XEnumerationAccess
+ virtual css::uno::Type SAL_CALL getElementType() throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() throw (css::uno::RuntimeException);
+ virtual css::uno::Any createCollectionObject( const css::uno::Any& aSource );
+
+ // Methods
+ virtual css::uno::Any SAL_CALL Item( const css::uno::Any& Index, const css::uno::Any& /*Index2*/ ) throw (css::uno::RuntimeException);
+ virtual css::uno::Reference< ov::XCommandBarControl > SAL_CALL Add( const css::uno::Any& Type, const css::uno::Any& Id, const css::uno::Any& Parameter, const css::uno::Any& Before, const css::uno::Any& Temporary ) throw (css::script::BasicErrorException, css::uno::RuntimeException);
+ // XHelperInterface
+ virtual rtl::OUString& getServiceImplName();
+ virtual css::uno::Sequence<rtl::OUString> getServiceNames();
+};
+
#endif//SC_VBA_COMMANDBARCONTROLS_HXX
diff --git a/vbahelper/source/vbahelper/vbacommandbarhelper.cxx b/vbahelper/source/vbahelper/vbacommandbarhelper.cxx
index 06b997186169..385b220d201c 100644
--- a/vbahelper/source/vbahelper/vbacommandbarhelper.cxx
+++ b/vbahelper/source/vbahelper/vbacommandbarhelper.cxx
@@ -30,11 +30,10 @@
#include <com/sun/star/ui/XModuleUIConfigurationManager.hpp>
#include <com/sun/star/ui/XUIConfigurationPersistence.hpp>
#include <com/sun/star/ui/XUIElement.hpp>
-#ifndef _COM_SUN_STAR_UI_UIElementType_HPP_
#include <com/sun/star/ui/UIElementType.hpp>
-#endif
#include <comphelper/processfactory.hxx>
#include <vbahelper/vbahelper.hxx>
+#include <rtl/ustrbuf.hxx>
#include <time.h>
#include <map>
@@ -233,7 +232,7 @@ rtl::OUString VbaCommandBarHelper::findToolbarByName( const css::uno::Reference<
}
// if found, return the position of the control. if not found, return -1
-sal_Int32 VbaCommandBarHelper::findControlByName( const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess, const rtl::OUString& sName ) throw (css::uno::RuntimeException)
+sal_Int32 VbaCommandBarHelper::findControlByName( const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess, const rtl::OUString& sName, bool bMenu ) throw (css::uno::RuntimeException)
{
sal_Int32 nCount = xIndexAccess->getCount();
css::uno::Sequence< css::beans::PropertyValue > aProps;
@@ -242,17 +241,21 @@ sal_Int32 VbaCommandBarHelper::findControlByName( const css::uno::Reference< css
rtl::OUString sLabel;
xIndexAccess->getByIndex( i ) >>= aProps;
getPropertyValue( aProps, rtl::OUString::createFromAscii(ITEM_DESCRIPTOR_LABEL) ) >>= sLabel;
- // handle the hotkey character '~'
- rtl::OUString sNewLabel;
+ // handle the hotkey marker '~' (remove in toolbars (?), replace by '&' in menus)
+ ::rtl::OUStringBuffer aBuffer;
sal_Int32 index = sLabel.indexOf( sal_Unicode('~') );
if( index < 0 )
- sNewLabel = sLabel;
- else if( index == 0 )
- sNewLabel = sLabel.copy( index + 1);
- else if( index == sNewLabel.getLength() - 1 )
- sNewLabel = sLabel.copy(0, index );
+ {
+ aBuffer = sLabel;
+ }
else
- sNewLabel = sLabel.copy( 0, index ) + sLabel.copy( index + 1 );
+ {
+ aBuffer.append( sLabel.copy( 0, index ) );
+ if( bMenu )
+ aBuffer.append( sal_Unicode( '&' ) );
+ aBuffer.append( sLabel.copy( index + 1 ) );
+ }
+ rtl::OUString sNewLabel = aBuffer.makeStringAndClear();
OSL_TRACE("VbaCommandBarHelper::findControlByName, control name: %s", rtl::OUStringToOString( sNewLabel, RTL_TEXTENCODING_UTF8 ).getStr() );
if( sName.equalsIgnoreAsciiCase( sNewLabel ) )
return i;
diff --git a/vbahelper/source/vbahelper/vbacommandbarhelper.hxx b/vbahelper/source/vbahelper/vbacommandbarhelper.hxx
index 1c18af07b3df..1fa41d7141b3 100644
--- a/vbahelper/source/vbahelper/vbacommandbarhelper.hxx
+++ b/vbahelper/source/vbahelper/vbacommandbarhelper.hxx
@@ -95,8 +95,8 @@ public:
const rtl::OUString getModuleId(){ return maModuleId; }
rtl::OUString findToolbarByName( const css::uno::Reference< css::container::XNameAccess >& xNameAccess, const rtl::OUString& sName ) throw (css::uno::RuntimeException);
- static sal_Int32 findControlByName( const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess, const rtl::OUString& sName ) throw (css::uno::RuntimeException);
+ static sal_Int32 findControlByName( const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess, const rtl::OUString& sName, bool bMenu = false ) throw (css::uno::RuntimeException);
static rtl::OUString generateCustomURL();
};
-#endif//VBA_COMMANDBARHELPER_HXX
+#endif //VBA_COMMANDBARHELPER_HXX
diff --git a/vbahelper/source/vbahelper/vbacommandbars.cxx b/vbahelper/source/vbahelper/vbacommandbars.cxx
index 3e7bdc6d53e8..9d6cd9e2eea7 100644
--- a/vbahelper/source/vbahelper/vbacommandbars.cxx
+++ b/vbahelper/source/vbahelper/vbacommandbars.cxx
@@ -31,6 +31,7 @@
#include <com/sun/star/ui/XUIConfigurationStorage.hpp>
#include <com/sun/star/ui/XModuleUIConfigurationManager.hpp>
#include <com/sun/star/ui/XUIConfigurationPersistence.hpp>
+#include <ooo/vba/office/MsoBarType.hpp>
#include "vbacommandbars.hxx"
#include "vbacommandbar.hxx"
@@ -45,13 +46,13 @@ class CommandBarEnumeration : public CommandBarEnumeration_BASE
{
uno::Reference< XHelperInterface > m_xParent;
uno::Reference< uno::XComponentContext > m_xContext;
- VbaCommandBarHelperRef pCBarHelper;
+ VbaCommandBarHelperRef m_pCBarHelper;
uno::Sequence< rtl::OUString > m_sNames;
sal_Int32 m_nCurrentPosition;
public:
- CommandBarEnumeration( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, VbaCommandBarHelperRef pHelper) throw ( uno::RuntimeException ) : m_xParent( xParent ), m_xContext( xContext ), pCBarHelper( pHelper ) , m_nCurrentPosition( 0 )
+ CommandBarEnumeration( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, VbaCommandBarHelperRef pHelper) throw ( uno::RuntimeException ) : m_xParent( xParent ), m_xContext( xContext ), m_pCBarHelper( pHelper ) , m_nCurrentPosition( 0 )
{
- uno::Reference< container::XNameAccess > xNameAccess = pCBarHelper->getPersistentWindowState();
+ uno::Reference< container::XNameAccess > xNameAccess = m_pCBarHelper->getPersistentWindowState();
m_sNames = xNameAccess->getElementNames();
}
virtual sal_Bool SAL_CALL hasMoreElements() throw ( uno::RuntimeException )
@@ -68,8 +69,8 @@ public:
rtl::OUString sResourceUrl( m_sNames[ m_nCurrentPosition++ ] );
if( sResourceUrl.indexOf( rtl::OUString::createFromAscii("private:resource/toolbar/") ) != -1 )
{
- uno::Reference< container::XIndexAccess > xCBarSetting = pCBarHelper->getSettings( sResourceUrl );
- uno::Reference< XCommandBar > xCommandBar( new ScVbaCommandBar( m_xParent, m_xContext, pCBarHelper, xCBarSetting, sResourceUrl, sal_False, sal_False ) );
+ uno::Reference< container::XIndexAccess > xCBarSetting = m_pCBarHelper->getSettings( sResourceUrl );
+ uno::Reference< XCommandBar > xCommandBar( new ScVbaCommandBar( m_xParent, m_xContext, m_pCBarHelper, xCBarSetting, sResourceUrl, sal_False, sal_False ) );
}
else
return nextElement();
@@ -82,8 +83,8 @@ public:
ScVbaCommandBars::ScVbaCommandBars( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< container::XIndexAccess >& xIndexAccess, const uno::Reference< frame::XModel >& xModel ) throw ( uno::RuntimeException ) : CommandBars_BASE( xParent, xContext, xIndexAccess )
{
- pCBarHelper.reset( new VbaCommandBarHelper( mxContext, xModel ) );
- m_xNameAccess = pCBarHelper->getPersistentWindowState();
+ m_pCBarHelper.reset( new VbaCommandBarHelper( mxContext, xModel ) );
+ m_xNameAccess = m_pCBarHelper->getPersistentWindowState();
}
ScVbaCommandBars::~ScVbaCommandBars()
@@ -100,7 +101,7 @@ ScVbaCommandBars::getElementType() throw ( uno::RuntimeException )
uno::Reference< container::XEnumeration >
ScVbaCommandBars::createEnumeration() throw ( uno::RuntimeException )
{
- return uno::Reference< container::XEnumeration >( new CommandBarEnumeration( this, mxContext, pCBarHelper ) );
+ return uno::Reference< container::XEnumeration >( new CommandBarEnumeration( this, mxContext, m_pCBarHelper ) );
}
uno::Any
@@ -111,28 +112,53 @@ ScVbaCommandBars::createCollectionObject( const uno::Any& aSource )
uno::Reference< container::XIndexAccess > xBarSettings;
rtl::OUString sBarName;
sal_Bool bMenu = sal_False;
+ uno::Any aRet;
+
if( aSource >>= sBarName )
{
- if( sBarName.equalsIgnoreAsciiCase( rtl::OUString::createFromAscii("Worksheet Menu Bar") )
- || sBarName.equalsIgnoreAsciiCase( rtl::OUString::createFromAscii("Menu Bar") ) )
+ // some built-in command bars
+ if( m_pCBarHelper->getModuleId().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.sheet.SpreadsheetDocument") ) )
{
- // menu bar
- sResourceUrl = rtl::OUString::createFromAscii( ITEM_MENUBAR_URL );
- bMenu = sal_True;
+ if( sBarName.equalsIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM("Worksheet Menu Bar") ) )
+ {
+ // spreadsheet menu bar
+ sResourceUrl = rtl::OUString::createFromAscii( ITEM_MENUBAR_URL );
+ bMenu = sal_True;
+ }
+ else if( sBarName.equalsIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM("Cell") ) )
+ {
+ // EVIL HACK (tm): spreadsheet cell context menu as dummy object without functionality
+ aRet <<= uno::Reference< XCommandBar >( new VbaDummyCommandBar( this, mxContext, sBarName, office::MsoBarType::msoBarTypePopup ) );
+ }
}
- else
+ else if( m_pCBarHelper->getModuleId().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.text.TextDocument") ) )
+ {
+ if( sBarName.equalsIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM("Menu Bar") ) )
+ {
+ // text processor menu bar
+ sResourceUrl = rtl::OUString::createFromAscii( ITEM_MENUBAR_URL );
+ bMenu = sal_True;
+ }
+ }
+
+ // nothing found - try to resolve from name
+ if( !aRet.hasValue() && (sResourceUrl.getLength() == 0) )
{
- sResourceUrl = pCBarHelper->findToolbarByName( m_xNameAccess, sBarName );
+ sResourceUrl = m_pCBarHelper->findToolbarByName( m_xNameAccess, sBarName );
bMenu = sal_False;
}
}
if( sResourceUrl.getLength() )
- xBarSettings = pCBarHelper->getSettings( sResourceUrl );
- else
+ {
+ xBarSettings = m_pCBarHelper->getSettings( sResourceUrl );
+ aRet <<= uno::Reference< XCommandBar >( new ScVbaCommandBar( this, mxContext, m_pCBarHelper, xBarSettings, sResourceUrl, bMenu, sal_False ) );
+ }
+
+ if( !aRet.hasValue() )
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Toolbar do not exist") ), uno::Reference< uno::XInterface >() );
- return uno::Any( uno::Reference< XCommandBar >( new ScVbaCommandBar( this, mxContext, pCBarHelper, xBarSettings, sResourceUrl, bMenu, sal_False ) ) );
+ return aRet;
}
// XCommandBars
@@ -149,7 +175,7 @@ ScVbaCommandBars::Add( const css::uno::Any& Name, const css::uno::Any& /*Positio
rtl::OUString sResourceUrl;
if( sName.getLength() )
{
- sResourceUrl = pCBarHelper->findToolbarByName( m_xNameAccess, sName );
+ sResourceUrl = m_pCBarHelper->findToolbarByName( m_xNameAccess, sName );
if( sResourceUrl.getLength() )
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Toolbar exists") ), uno::Reference< uno::XInterface >() );
}
@@ -163,8 +189,8 @@ ScVbaCommandBars::Add( const css::uno::Any& Name, const css::uno::Any& /*Positio
Temporary >>= bTemporary;
sResourceUrl = VbaCommandBarHelper::generateCustomURL();
- uno::Reference< container::XIndexAccess > xBarSettings( pCBarHelper->getSettings( sResourceUrl ), uno::UNO_QUERY_THROW );
- uno::Reference< XCommandBar > xCBar( new ScVbaCommandBar( this, mxContext, pCBarHelper, xBarSettings, sResourceUrl, sal_False, bTemporary ) );
+ uno::Reference< container::XIndexAccess > xBarSettings( m_pCBarHelper->getSettings( sResourceUrl ), uno::UNO_QUERY_THROW );
+ uno::Reference< XCommandBar > xCBar( new ScVbaCommandBar( this, mxContext, m_pCBarHelper, xBarSettings, sResourceUrl, sal_False, bTemporary ) );
xCBar->setName( sName );
return xCBar;
}
@@ -199,9 +225,9 @@ ScVbaCommandBars::Item( const uno::Any& aIndex, const uno::Any& /*aIndex2*/ ) th
if( nIndex == 1 )
{
uno::Any aSource;
- if( pCBarHelper->getModuleId().equalsAscii( "com.sun.star.sheet.SpreadsheetDocument" ) )
+ if( m_pCBarHelper->getModuleId().equalsAscii( "com.sun.star.sheet.SpreadsheetDocument" ) )
aSource <<= rtl::OUString::createFromAscii( "Worksheet Menu Bar" );
- else if( pCBarHelper->getModuleId().equalsAscii("com.sun.star.text.TextDocument") )
+ else if( m_pCBarHelper->getModuleId().equalsAscii("com.sun.star.text.TextDocument") )
aSource <<= rtl::OUString::createFromAscii( "Menu Bar" );
if( aSource.hasValue() )
return createCollectionObject( aSource );
diff --git a/vbahelper/source/vbahelper/vbacommandbars.hxx b/vbahelper/source/vbahelper/vbacommandbars.hxx
index 698d718f7cdf..92ed1438d269 100644
--- a/vbahelper/source/vbahelper/vbacommandbars.hxx
+++ b/vbahelper/source/vbahelper/vbacommandbars.hxx
@@ -40,7 +40,7 @@ typedef CollTestImplHelper< ov::XCommandBars > CommandBars_BASE;
class ScVbaCommandBars : public CommandBars_BASE
{
private:
- VbaCommandBarHelperRef pCBarHelper;
+ VbaCommandBarHelperRef m_pCBarHelper;
public:
ScVbaCommandBars( const css::uno::Reference< ov::XHelperInterface >& xParent, const css::uno::Reference< css::uno::XComponentContext >& xContext, const css::uno::Reference< css::container::XIndexAccess >& xIndexAccess, const css::uno::Reference< css::frame::XModel >& xModel ) throw (css::uno::RuntimeException);
diff --git a/vbahelper/source/vbahelper/vbadocumentbase.cxx b/vbahelper/source/vbahelper/vbadocumentbase.cxx
index fb2af0687d11..f27f2de53c8a 100644
--- a/vbahelper/source/vbahelper/vbadocumentbase.cxx
+++ b/vbahelper/source/vbahelper/vbadocumentbase.cxx
@@ -33,7 +33,9 @@
#include <com/sun/star/util/XCloseable.hpp>
#include <com/sun/star/frame/XStorable.hpp>
#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/document/XEmbeddedScripts.hpp> //Michael E. Bohn
#include <com/sun/star/beans/XPropertySet.hpp>
+#include <ooo/vba/XVBADocService.hpp>
#include <tools/urlobj.hxx>
#include <osl/file.hxx>
@@ -179,14 +181,14 @@ void
VbaDocumentBase::setSaved( sal_Bool bSave ) throw (uno::RuntimeException)
{
uno::Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY_THROW );
- xModifiable->setModified( bSave );
+ xModifiable->setModified( !bSave );
}
sal_Bool
VbaDocumentBase::getSaved() throw (uno::RuntimeException)
{
uno::Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY_THROW );
- return xModifiable->isModified();
+ return !xModifiable->isModified();
}
void
@@ -204,6 +206,40 @@ VbaDocumentBase::Activate() throw (uno::RuntimeException)
xFrame->activate();
}
+// ---- Michael E.Bohn Start-----
+
+uno::Any SAL_CALL
+VbaDocumentBase::getVBProject() throw (uno::RuntimeException)
+
+{
+ uno::Any aAny;
+ uno::Reference< ::lang::XMultiComponentFactory > xServiceManager = mxContext->getServiceManager();
+ try
+ {
+ uno::Reference < ::uno::XInterface > xInterface = xServiceManager->createInstanceWithContext( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBADocService" )),mxContext);
+ uno::Reference < ::ooo::vba::XVBADocService > xVBADocService (xInterface, ::uno::UNO_QUERY_THROW );
+ if (xVBADocService.is()){
+ uno::Reference< frame::XModel > xModel( getModel(), uno::UNO_QUERY_THROW );
+ uno::Reference< document::XEmbeddedScripts > xEnbeddedScripts ( xModel, uno::UNO_QUERY_THROW );
+ uno::Reference< script::XStorageBasedLibraryContainer > xMacroStorageBasedLibraryContainer = xEnbeddedScripts->getBasicLibraries();
+ uno::Reference< script::XStorageBasedLibraryContainer > xDialogStorageBasedLibraryContainer = xEnbeddedScripts->getDialogLibraries();
+ uno::Reference< script::XLibraryContainer > xMacroLibraryContainer ( xMacroStorageBasedLibraryContainer, uno::UNO_QUERY_THROW );
+ uno::Reference< script::XLibraryContainer > xDialogLibraryContainer( xDialogStorageBasedLibraryContainer, uno::UNO_QUERY_THROW );
+
+ return xVBADocService->getVBProject( this, mxContext, xModel, xMacroLibraryContainer, xDialogLibraryContainer );
+ }
+
+ }catch(uno::Exception* e)
+ {
+ }
+ return aAny;
+
+}
+
+
+// ---- Michael E.Bohn End -----
+
+
rtl::OUString&
VbaDocumentBase::getServiceImplName()
{
diff --git a/vbahelper/source/vbahelper/vbafontbase.cxx b/vbahelper/source/vbahelper/vbafontbase.cxx
index 76e5de7761e1..065414343bd1 100644
--- a/vbahelper/source/vbahelper/vbafontbase.cxx
+++ b/vbahelper/source/vbahelper/vbafontbase.cxx
@@ -35,7 +35,20 @@
using namespace ::ooo::vba;
using namespace ::com::sun::star;
-VbaFontBase::VbaFontBase( const uno::Reference< XHelperInterface >& xParent, const uno::Reference< uno::XComponentContext >& xContext, const uno::Reference< css::container::XIndexAccess >& xPalette, uno::Reference< beans::XPropertySet > xPropertySet ) throw ( uno::RuntimeException ) : VbaFontBase_BASE( xParent, xContext ), mxFont( xPropertySet, css::uno::UNO_QUERY_THROW ), mxPalette( xPalette )
+// form controls use other property name as the remaining OOo API
+#define VBAFONTBASE_PROPNAME( ascii_normal, ascii_control ) \
+ mbFormControl ? rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ascii_control ) ) : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( ascii_normal ) )
+
+VbaFontBase::VbaFontBase(
+ const uno::Reference< XHelperInterface >& xParent,
+ const uno::Reference< uno::XComponentContext >& xContext,
+ const uno::Reference< css::container::XIndexAccess >& xPalette,
+ const uno::Reference< beans::XPropertySet >& xPropertySet,
+ bool bFormControl ) throw ( uno::RuntimeException ) :
+ VbaFontBase_BASE( xParent, xContext ),
+ mxFont( xPropertySet, uno::UNO_SET_THROW ),
+ mxPalette( xPalette, uno::UNO_SET_THROW ),
+ mbFormControl( bFormControl )
{
}
@@ -43,19 +56,22 @@ VbaFontBase::~VbaFontBase()
{
}
-
void SAL_CALL
VbaFontBase::setSuperscript( const uno::Any& aValue ) throw ( uno::RuntimeException )
{
+ // not supported in form controls
+ if( mbFormControl )
+ return;
+
sal_Bool bValue = sal_False;
aValue >>= bValue;
sal_Int16 nValue = NORMAL;
sal_Int8 nValue2 = NORMALHEIGHT;
- if( bValue )
+ if( bValue )
{
nValue = SUPERSCRIPT;
- nValue2 = SUPERSCRIPTHEIGHT;
+ nValue2 = SUPERSCRIPTHEIGHT;
}
mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ), ( uno::Any )nValue );
mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapementHeight" ) ), ( uno::Any )nValue2 );
@@ -64,23 +80,29 @@ VbaFontBase::setSuperscript( const uno::Any& aValue ) throw ( uno::RuntimeExcept
uno::Any SAL_CALL
VbaFontBase::getSuperscript() throw ( uno::RuntimeException )
{
- short nValue = 0;
- mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ) ) >>= nValue;
+ short nValue = NORMAL;
+ // not supported in form controls
+ if( !mbFormControl )
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ) ) >>= nValue;
return uno::makeAny( ( nValue == SUPERSCRIPT ) );
}
void SAL_CALL
VbaFontBase::setSubscript( const uno::Any& aValue ) throw ( uno::RuntimeException )
{
+ // not supported in form controls
+ if( mbFormControl )
+ return;
+
sal_Bool bValue = sal_False;
aValue >>= bValue;
sal_Int16 nValue = NORMAL;
sal_Int8 nValue2 = NORMALHEIGHT;
- if( bValue )
+ if( bValue )
{
nValue= SUBSCRIPT;
- nValue2 = SUBSCRIPTHEIGHT;
+ nValue2 = SUBSCRIPTHEIGHT;
}
mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapementHeight" ) ), ( uno::Any )nValue2 );
@@ -92,20 +114,30 @@ uno::Any SAL_CALL
VbaFontBase::getSubscript() throw ( uno::RuntimeException )
{
short nValue = NORMAL;
- mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ) ) >>= nValue;
+ // not supported in form controls
+ if( !mbFormControl )
+ mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharEscapement" ) ) ) >>= nValue;
return uno::makeAny( ( nValue == SUBSCRIPT ) );
}
void SAL_CALL
VbaFontBase::setSize( const uno::Any& aValue ) throw( uno::RuntimeException )
{
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharHeight" ) ), aValue );
+ // form controls need a sal_Int16 containing points, other APIs need a float
+ uno::Any aVal( aValue );
+ if( mbFormControl )
+ {
+ float fVal = 0.0;
+ aVal >>= fVal;
+ aVal <<= static_cast< sal_Int16 >( fVal );
+ }
+ mxFont->setPropertyValue( VBAFONTBASE_PROPNAME( "CharHeight", "FontHeight" ), aVal );
}
uno::Any SAL_CALL
VbaFontBase::getSize() throw ( uno::RuntimeException )
{
- return mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharHeight" ) ) );
+ return mxFont->getPropertyValue( VBAFONTBASE_PROPNAME( "CharHeight", "FontHeight" ) );
}
void SAL_CALL
@@ -152,7 +184,7 @@ VbaFontBase::setBold( const uno::Any& aValue ) throw( uno::RuntimeException )
double fBoldValue = awt::FontWeight::NORMAL;
if( bValue )
fBoldValue = awt::FontWeight::BOLD;
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharWeight" ) ), ( uno::Any )fBoldValue );
+ mxFont->setPropertyValue( VBAFONTBASE_PROPNAME( "CharWeight", "FontWeight" ), uno::Any( fBoldValue ) );
}
@@ -160,7 +192,7 @@ uno::Any SAL_CALL
VbaFontBase::getBold() throw ( uno::RuntimeException )
{
double fValue = 0.0;
- mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharWeight" ) ) ) >>= fValue;
+ mxFont->getPropertyValue( VBAFONTBASE_PROPNAME( "CharWeight", "FontWeight" ) ) >>= fValue;
return uno::makeAny( fValue == awt::FontWeight::BOLD );
}
@@ -172,27 +204,28 @@ VbaFontBase::setStrikethrough( const uno::Any& aValue ) throw ( uno::RuntimeExce
short nValue = awt::FontStrikeout::NONE;
if( bValue )
nValue = awt::FontStrikeout::SINGLE;
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharStrikeout" ) ), ( uno::Any )nValue );
+ mxFont->setPropertyValue( VBAFONTBASE_PROPNAME( "CharStrikeout", "FontStrikeout" ), uno::Any( nValue ) );
}
uno::Any SAL_CALL
VbaFontBase::getStrikethrough() throw ( uno::RuntimeException )
{
short nValue = 0;
- mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharStrikeout" ) ) ) >>= nValue;
+ mxFont->getPropertyValue( VBAFONTBASE_PROPNAME( "CharStrikeout", "FontStrikeout" ) ) >>= nValue;
return uno::Any( nValue == awt::FontStrikeout::SINGLE );
}
void SAL_CALL
VbaFontBase::setShadow( const uno::Any& aValue ) throw ( uno::RuntimeException )
{
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharShadowed" ) ), aValue );
+ if( !mbFormControl )
+ mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharShadowed" ) ), aValue );
}
uno::Any SAL_CALL
VbaFontBase::getShadow() throw (uno::RuntimeException)
{
- return mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharShadowed" ) ) );
+ return mbFormControl ? uno::Any( false ) : mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharShadowed" ) ) );
}
void SAL_CALL
@@ -203,15 +236,14 @@ VbaFontBase::setItalic( const uno::Any& aValue ) throw ( uno::RuntimeException )
short nValue = awt::FontSlant_NONE;
if( bValue )
nValue = awt::FontSlant_ITALIC;
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharPosture" ) ), ( uno::Any )nValue );
+ mxFont->setPropertyValue( VBAFONTBASE_PROPNAME( "CharPosture", "FontSlant" ), uno::Any( nValue ) );
}
uno::Any SAL_CALL
VbaFontBase::getItalic() throw ( uno::RuntimeException )
{
-
awt::FontSlant aFS;
- mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharPosture" ) ) ) >>= aFS;
+ mxFont->getPropertyValue( VBAFONTBASE_PROPNAME( "CharPosture", "FontSlant" ) ) >>= aFS;
return uno::makeAny( aFS == awt::FontSlant_ITALIC );
}
@@ -220,26 +252,27 @@ VbaFontBase::setName( const uno::Any& aValue ) throw ( uno::RuntimeException )
{
rtl::OUString sString;
aValue >>= sString;
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharFontName" ) ), aValue);
+ mxFont->setPropertyValue( VBAFONTBASE_PROPNAME( "CharFontName", "FontName" ), aValue );
}
uno::Any SAL_CALL
VbaFontBase::getName() throw ( uno::RuntimeException )
{
- return mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharFontName" ) ) );
+ return mxFont->getPropertyValue( VBAFONTBASE_PROPNAME( "CharFontName", "FontName" ) );
}
+
uno::Any
VbaFontBase::getColor() throw (uno::RuntimeException)
{
uno::Any aAny;
- aAny = OORGBToXLRGB( mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharColor" ) ) ) );
+ aAny = OORGBToXLRGB( mxFont->getPropertyValue( VBAFONTBASE_PROPNAME( "CharColor", "TextColor" ) ) );
return aAny;
}
void
VbaFontBase::setColor( const uno::Any& _color ) throw (uno::RuntimeException)
{
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharColor" ) ) , XLRGBToOORGB(_color));
+ mxFont->setPropertyValue( VBAFONTBASE_PROPNAME( "CharColor", "TextColor" ), XLRGBToOORGB(_color) );
}
void SAL_CALL
@@ -273,7 +306,7 @@ VbaFontBase::setUnderline( const uno::Any& /*aValue*/ ) throw ( uno::RuntimeExce
throw uno::RuntimeException( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Unknown value for Underline")), uno::Reference< uno::XInterface >() );
}
- mxFont->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharUnderline" ) ), ( uno::Any )nValue );
+ mxFont->setPropertyValue( VBAFONTBASE_PROPNAME( "CharUnderline", "FontUnderline" ), uno::Any( nValue ) );
*/
}
@@ -282,7 +315,7 @@ uno::Any SAL_CALL
VbaFontBase::getUnderline() throw ( uno::RuntimeException )
{
sal_Int32 nValue = awt::FontUnderline::NONE;
- mxFont->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharUnderline" ) ) ) >>= nValue;
+ mxFont->getPropertyValue( VBAFONTBASE_PROPNAME( "CharUnderline", "FontUnderline" ) ) >>= nValue;
/*
switch ( nValue )
{
diff --git a/vbahelper/source/vbahelper/vbahelper.cxx b/vbahelper/source/vbahelper/vbahelper.cxx
index a9e72318536d..1953d0772f3c 100644
--- a/vbahelper/source/vbahelper/vbahelper.cxx
+++ b/vbahelper/source/vbahelper/vbahelper.cxx
@@ -31,11 +31,15 @@
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/frame/XDesktop.hpp>
#include <com/sun/star/frame/XController.hpp>
+#include <com/sun/star/frame/XModel2.hpp>
#include <com/sun/star/script/XDefaultProperty.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/beans/XIntrospection.hpp>
+#include <com/sun/star/util/MeasureUnit.hpp>
+
#include <ooo/vba/msforms/XShape.hpp>
#include <comphelper/processfactory.hxx>
@@ -63,8 +67,6 @@
#include <osl/file.hxx>
#include <toolkit/awt/vclxwindow.hxx>
#include <toolkit/helper/vclunohelper.hxx>
-#include <com/sun/star/frame/XModel2.hpp>
-#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <vcl/window.hxx>
#include <vcl/syswin.hxx>
#include <tools/diagnose_ex.h>
@@ -82,12 +84,6 @@
using namespace ::com::sun::star;
using namespace ::ooo::vba;
-#define NAME_HEIGHT "Height"
-#define NAME_WIDTH "Width"
-
-#define POINTTO100THMILLIMETERFACTOR 35.27778
-
-
void unoToSbxValue( SbxVariable* pVar, const uno::Any& aValue );
uno::Any sbxToUnoValue( SbxVariable* pVar );
@@ -98,6 +94,8 @@ namespace ooo
namespace vba
{
+namespace { const double factor = 2540.0 / 72.0; }
+
css::uno::Reference< css::uno::XInterface > createVBAUnoAPIService( SfxObjectShell* pShell, const sal_Char* _pAsciiName ) throw (css::uno::RuntimeException)
{
OSL_PRECOND( pShell, "createVBAUnoAPIService: no shell!" );
@@ -271,7 +269,6 @@ getCurrentViewFrame()
};
#endif
-const double Millimeter::factor = 35.27778;
uno::Reference< beans::XIntrospectionAccess >
getIntrospectionAccess( const uno::Any& aObject ) throw (uno::RuntimeException)
@@ -314,10 +311,9 @@ void dispatchExecute(SfxViewShell* pViewShell, USHORT nSlot, SfxCallMode nCall)
}
void
-dispatchRequests (uno::Reference< frame::XModel>& xModel,rtl::OUString & aUrl, uno::Sequence< beans::PropertyValue >& sProps )
+dispatchRequests( const uno::Reference< frame::XModel>& xModel, const rtl::OUString& aUrl, const uno::Sequence< beans::PropertyValue >& sProps )
{
-
- util::URL url ;
+ util::URL url;
url.Complete = aUrl;
rtl::OUString emptyString = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "" ));
uno::Reference<frame::XController> xController = xModel->getCurrentController();
@@ -328,25 +324,22 @@ dispatchRequests (uno::Reference< frame::XModel>& xModel,rtl::OUString & aUrl, u
uno::Reference< beans::XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), uno::UNO_QUERY_THROW );
uno::Reference<uno::XComponentContext > xContext( xProps->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DefaultContext" ))), uno::UNO_QUERY_THROW );
if ( !xContext.is() )
- {
- return ;
- }
+ return;
- uno::Reference<lang::XMultiComponentFactory > xServiceManager(
- xContext->getServiceManager() );
+ uno::Reference<lang::XMultiComponentFactory > xServiceManager = xContext->getServiceManager();
if ( !xServiceManager.is() )
- {
- return ;
- }
- uno::Reference<util::XURLTransformer> xParser( xServiceManager->createInstanceWithContext( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ) )
- ,xContext), uno::UNO_QUERY_THROW );
+ return;
+
+ uno::Reference<util::XURLTransformer> xParser( xServiceManager->createInstanceWithContext(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.URLTransformer" ) ), xContext),
+ uno::UNO_QUERY_THROW );
if (!xParser.is())
return;
xParser->parseStrict (url);
}
catch ( uno::Exception & /*e*/ )
{
- return ;
+ return;
}
uno::Reference<frame::XDispatch> xDispatcher = xDispatchProvider->queryDispatch(url,emptyString,0);
@@ -360,7 +353,7 @@ dispatchRequests (uno::Reference< frame::XModel>& xModel,rtl::OUString & aUrl, u
dispatchProps.realloc( nProps + 1 );
// need to reaccquire pDest after realloc
pDest = dispatchProps.getArray();
- beans::PropertyValue* pSrc = sProps.getArray();
+ const beans::PropertyValue* pSrc = sProps.getConstArray();
for ( sal_Int32 index=0; index<nProps; ++index, ++pSrc, ++pDest )
*pDest = *pSrc;
}
@@ -373,16 +366,13 @@ dispatchRequests (uno::Reference< frame::XModel>& xModel,rtl::OUString & aUrl, u
}
void
-dispatchRequests (uno::Reference< frame::XModel>& xModel,rtl::OUString & aUrl)
+dispatchRequests( const uno::Reference< frame::XModel>& xModel, const rtl::OUString& aUrl )
{
uno::Sequence<beans::PropertyValue> dispatchProps;
dispatchRequests( xModel, aUrl, dispatchProps );
}
-
-
-
- uno::Reference< frame::XModel >
+uno::Reference< frame::XModel >
getCurrentDoc( const rtl::OUString& sKey ) throw (uno::RuntimeException)
{
uno::Reference< frame::XModel > xModel;
@@ -840,12 +830,22 @@ double getPixelTo100thMillimeterConversionFactor( css::uno::Reference< css::awt:
double PointsToPixels( css::uno::Reference< css::awt::XDevice >& xDevice, double fPoints, sal_Bool bVertical)
{
double fConvertFactor = getPixelTo100thMillimeterConversionFactor( xDevice, bVertical );
- return fPoints * POINTTO100THMILLIMETERFACTOR * fConvertFactor;
+ return PointsToHmm( fPoints ) * fConvertFactor;
}
double PixelsToPoints( css::uno::Reference< css::awt::XDevice >& xDevice, double fPixels, sal_Bool bVertical)
{
double fConvertFactor = getPixelTo100thMillimeterConversionFactor( xDevice, bVertical );
- return (fPixels/fConvertFactor)/POINTTO100THMILLIMETERFACTOR;
+ return HmmToPoints( fPixels/fConvertFactor );
+}
+
+sal_Int32 PointsToHmm( double fPoints )
+{
+ return static_cast<sal_Int32>( fPoints * factor + 0.5 );
+}
+
+double HmmToPoints( sal_Int32 nHmm )
+{
+ return nHmm / factor;
}
ConcreteXShapeGeometryAttributes::ConcreteXShapeGeometryAttributes( const css::uno::Reference< css::uno::XComponentContext >& /*xContext*/, const css::uno::Reference< css::drawing::XShape >& xShape )
@@ -962,53 +962,284 @@ sal_Bool setPropertyValue( uno::Sequence< beans::PropertyValue >& aProp, const r
return sal_False;
}
-#define VBA_LEFT "PositionX"
-#define VBA_TOP "PositionY"
+// ====UserFormGeomentryHelper====
+//---------------------------------------------
UserFormGeometryHelper::UserFormGeometryHelper( const uno::Reference< uno::XComponentContext >& /*xContext*/, const uno::Reference< awt::XControl >& xControl )
{
+ if ( !xControl.is() )
+ throw uno::RuntimeException();
+
+ mxControlUnits.set( xControl->getPeer(), uno::UNO_QUERY_THROW );
mxModel.set( xControl->getModel(), uno::UNO_QUERY_THROW );
}
- double UserFormGeometryHelper::getLeft()
+
+//---------------------------------------------
+sal_Int32 UserFormGeometryHelper::ConvertPixelToLogic( sal_Int32 nValue, sal_Bool bIsPoint, sal_Bool bIsX, sal_Int16 nTargetUnit )
+{
+ sal_Int32 nResult = 0;
+ if ( bIsPoint )
+ {
+ // conversion for a point
+ awt::Point aPixelPoint( 0, 0 );
+ ( bIsX ? aPixelPoint.X : aPixelPoint.Y ) = nValue;
+ awt::Point aTargetPoint( 0, 0 );
+ aTargetPoint = mxControlUnits->convertPointToLogic( aPixelPoint, nTargetUnit );
+
+ nResult = bIsX ? aTargetPoint.X : aTargetPoint.Y;
+ }
+ else
+ {
+ // conversion for a size
+ awt::Size aPixelSize( 0, 0 );
+ ( bIsX ? aPixelSize.Width : aPixelSize.Height ) = nValue;
+ awt::Size aTargetSize( 0, 0 );
+ aTargetSize = mxControlUnits->convertSizeToLogic( aPixelSize, nTargetUnit );
+
+ nResult = bIsX ? aTargetSize.Width : aTargetSize.Height;
+ }
+
+ return nResult;
+}
+
+//---------------------------------------------
+sal_Int32 UserFormGeometryHelper::ConvertLogicToPixel( sal_Int32 nValue, sal_Bool bIsPoint, sal_Bool bIsX, sal_Int16 nSourceUnit )
+{
+ sal_Int32 nResult = 0;
+ if ( bIsPoint )
+ {
+ // conversion for a point
+ awt::Point aSourcePoint( 0, 0 );
+ ( bIsX ? aSourcePoint.X : aSourcePoint.Y ) = nValue;
+
+ awt::Point aPixelPoint( 0, 0 );
+ aPixelPoint = mxControlUnits->convertPointToPixel( aSourcePoint, nSourceUnit );
+
+ nResult = bIsX ? aPixelPoint.X : aPixelPoint.Y;
+ }
+ else
+ {
+ // conversion for a size
+ awt::Size aSourceSize( 0, 0 );
+ ( bIsX ? aSourceSize.Width : aSourceSize.Height ) = nValue;
+
+ awt::Size aPixelSize( 0, 0 );
+ aPixelSize = mxControlUnits->convertSizeToPixel( aSourceSize, nSourceUnit );
+
+ nResult = bIsX ? aPixelSize.Width : aPixelSize.Height;
+ }
+
+ return nResult;
+}
+//---------------------------------------------
+double UserFormGeometryHelper::getLeft()
+{
+ double nResult = 0;
+
+ try
+ {
+ sal_Int32 nLeft = 0;
+ mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_LEFT ) ) ) >>= nLeft;
+ nResult = ConvertLogicToPixel( nLeft,
+ sal_True, // Point
+ sal_True, // X
+ util::MeasureUnit::APPFONT );
+ }
+ catch ( uno::RuntimeException& )
+ {
+ throw;
+ }
+ catch ( uno::Exception& e )
+ {
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not get position X!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
+ }
+
+ return nResult;
+}
+
+//---------------------------------------------
+void UserFormGeometryHelper::setLeft( double nLeft )
+{
+ try
+ {
+ mxModel->setPropertyValue(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_LEFT ) ),
+ uno::makeAny( ConvertPixelToLogic( nLeft,
+ sal_True, // Point
+ sal_True, // X
+ util::MeasureUnit::APPFONT ) ) );
+ }
+ catch ( uno::RuntimeException& )
+ {
+ throw;
+ }
+ catch ( uno::Exception& e )
+ {
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not set position X!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
+ }
+}
+
+//---------------------------------------------
+double UserFormGeometryHelper::getTop()
+{
+ double nResult = 0;
+
+ try
{
- sal_Int32 nLeft = 0;
- mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_LEFT ) ) ) >>= nLeft;
- return Millimeter::getInPoints( nLeft );
+ sal_Int32 nTop = 0;
+ mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_TOP ) ) ) >>= nTop;
+ nResult = ConvertLogicToPixel( nTop,
+ sal_True, // Point
+ sal_False, // Y
+ util::MeasureUnit::APPFONT );
}
- void UserFormGeometryHelper::setLeft( double nLeft )
+ catch ( uno::RuntimeException& )
{
- mxModel->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_LEFT ) ), uno::makeAny( Millimeter::getInHundredthsOfOneMillimeter( nLeft ) ) );
+ throw;
}
- double UserFormGeometryHelper::getTop()
+ catch ( uno::Exception& e )
{
- sal_Int32 nTop = 0;
- mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_TOP ) ) ) >>= nTop;
- return Millimeter::getInPoints( nTop );
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not get position Y!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
}
- void UserFormGeometryHelper::setTop( double nTop )
+
+ return nResult;
+}
+
+//---------------------------------------------
+void UserFormGeometryHelper::setTop( double nTop )
+{
+ try
+ {
+ mxModel->setPropertyValue(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_TOP ) ),
+ uno::makeAny( ConvertPixelToLogic( nTop,
+ sal_True, // Point
+ sal_False, // Y
+ util::MeasureUnit::APPFONT ) ) );
+ }
+ catch ( uno::RuntimeException& )
{
- mxModel->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_TOP ) ), uno::makeAny( Millimeter::getInHundredthsOfOneMillimeter( nTop ) ) );
+ throw;
}
- double UserFormGeometryHelper::getHeight()
+ catch ( uno::Exception& e )
{
- sal_Int32 nHeight = 0;
- mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( NAME_HEIGHT ) ) ) >>= nHeight;
- return Millimeter::getInPoints( nHeight );
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not set position X!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
}
- void UserFormGeometryHelper::setHeight( double nHeight )
+}
+
+//---------------------------------------------
+double UserFormGeometryHelper::getWidth()
+{
+ double nResult = 0;
+
+ try
{
- mxModel->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( NAME_HEIGHT ) ), uno::makeAny( Millimeter::getInHundredthsOfOneMillimeter( nHeight ) ) );
+ sal_Int32 nWidth = 0;
+ mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_WIDTH ) ) ) >>= nWidth;
+ nResult = ConvertLogicToPixel( nWidth,
+ sal_False, // Size
+ sal_True, // X
+ util::MeasureUnit::APPFONT );
}
- double UserFormGeometryHelper::getWidth()
+ catch ( uno::RuntimeException& )
{
- sal_Int32 nWidth = 0;
- mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( NAME_WIDTH ) ) ) >>= nWidth;
- return Millimeter::getInPoints( nWidth );
+ throw;
}
- void UserFormGeometryHelper::setWidth( double nWidth)
+ catch ( uno::Exception& e )
{
- mxModel->setPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( NAME_WIDTH ) ), uno::makeAny( Millimeter::getInHundredthsOfOneMillimeter( nWidth ) ) );
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not get width!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
}
+ return nResult;
+}
+
+//---------------------------------------------
+void UserFormGeometryHelper::setWidth( double nWidth)
+{
+ try
+ {
+ mxModel->setPropertyValue(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_WIDTH ) ),
+ uno::makeAny( ConvertPixelToLogic( nWidth,
+ sal_False, // Size
+ sal_True, // X
+ util::MeasureUnit::APPFONT ) ) );
+ }
+ catch ( uno::RuntimeException& )
+ {
+ throw;
+ }
+ catch ( uno::Exception& e )
+ {
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not set width!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
+ }
+}
+
+//---------------------------------------------
+double UserFormGeometryHelper::getHeight()
+{
+ double nResult = 0;
+
+ try
+ {
+ sal_Int32 nHeight = 0;
+ mxModel->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_HEIGHT ) ) ) >>= nHeight;
+ nResult = ConvertLogicToPixel( nHeight,
+ sal_False, // Size
+ sal_False, // Y
+ util::MeasureUnit::APPFONT );
+ }
+ catch ( uno::RuntimeException& )
+ {
+ throw;
+ }
+ catch ( uno::Exception& e )
+ {
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not get height!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
+ }
+
+ return nResult;
+}
+
+//---------------------------------------------
+void UserFormGeometryHelper::setHeight( double nHeight )
+{
+ try
+ {
+ mxModel->setPropertyValue(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( VBA_HEIGHT ) ),
+ uno::makeAny( ConvertPixelToLogic( nHeight,
+ sal_False, // Size
+ sal_False, // Y
+ util::MeasureUnit::APPFONT ) ) );
+ }
+ catch ( uno::RuntimeException& )
+ {
+ throw;
+ }
+ catch ( uno::Exception& e )
+ {
+ throw lang::WrappedTargetException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Can not set height!" ) ),
+ uno::Reference< uno::XInterface >(),
+ uno::makeAny( e ) );
+ }
+}
+
+// ============
+
double ConcreteXShapeGeometryAttributes::getLeft()
{
return m_pShapeHelper->getLeft();
@@ -1140,8 +1371,7 @@ UserFormGeometryHelper::UserFormGeometryHelper( const uno::Reference< uno::XComp
void Millimeter::set(double mm) { m_nMillimeter = mm; }
void Millimeter::setInPoints(double points)
{
- m_nMillimeter = points * 0.352777778;
- // 25.4mm / 72
+ m_nMillimeter = points * factor / 100.0;
}
void Millimeter::setInHundredthsOfOneMillimeter(double hmm)
@@ -1159,7 +1389,7 @@ UserFormGeometryHelper::UserFormGeometryHelper( const uno::Reference< uno::XComp
}
double Millimeter::getInPoints()
{
- return m_nMillimeter * 2.834645669; // 72 / 25.4mm
+ return m_nMillimeter / factor * 100.0;
}
sal_Int32 Millimeter::getInHundredthsOfOneMillimeter(double points)
diff --git a/vcl/aqua/inc/salframeview.h b/vcl/aqua/inc/salframeview.h
index 498c9679e97c..0174c1a68832 100755
--- a/vcl/aqua/inc/salframeview.h
+++ b/vcl/aqua/inc/salframeview.h
@@ -108,6 +108,7 @@
-(MacOSBOOL)sendKeyToFrameDirect: (USHORT)nKeyCode character: (sal_Unicode)aChar modifiers: (unsigned int)nMod;
-(MacOSBOOL)sendSingleCharacter:(NSEvent*)pEvent;
-(MacOSBOOL)handleKeyDownException:(NSEvent*)pEvent;
+-(void)clearLastEvent;
/*
text action methods
*/
diff --git a/vcl/aqua/inc/salgdi.h b/vcl/aqua/inc/salgdi.h
index 247de1b95dec..1948018806e1 100644
--- a/vcl/aqua/inc/salgdi.h
+++ b/vcl/aqua/inc/salgdi.h
@@ -191,7 +191,7 @@ public:
virtual sal_Bool drawPolyLineBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry );
virtual sal_Bool drawPolygonBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry );
virtual sal_Bool drawPolyPolygonBezier( ULONG nPoly, const ULONG* pPoints, const SalPoint* const* pPtAry, const BYTE* const* pFlgAry );
- virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin);
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin );
// CopyArea --> No RasterOp, but ClipRegion
virtual void copyArea( long nDestX, long nDestY, long nSrcX, long nSrcY, long nSrcWidth,
diff --git a/vcl/aqua/source/gdi/salgdi.cxx b/vcl/aqua/source/gdi/salgdi.cxx
index 5b1e24befc9b..8a4744d1efcd 100644
--- a/vcl/aqua/source/gdi/salgdi.cxx
+++ b/vcl/aqua/source/gdi/salgdi.cxx
@@ -988,6 +988,7 @@ bool AquaSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPol
// -----------------------------------------------------------------------
bool AquaSalGraphics::drawPolyLine( const ::basegfx::B2DPolygon& rPolyLine,
+ double fTransparency,
const ::basegfx::B2DVector& rLineWidths,
basegfx::B2DLineJoin eLineJoin )
{
@@ -1032,6 +1033,7 @@ bool AquaSalGraphics::drawPolyLine( const ::basegfx::B2DPolygon& rPolyLine,
CGContextAddPath( mrContext, xPath );
// draw path with antialiased line
CGContextSetShouldAntialias( mrContext, true );
+ CGContextSetAlpha( mrContext, 1.0 - fTransparency );
CGContextSetLineJoin( mrContext, aCGLineJoin );
CGContextSetLineWidth( mrContext, rLineWidths.getX() );
CGContextDrawPath( mrContext, kCGPathStroke );
diff --git a/vcl/aqua/source/window/salframeview.mm b/vcl/aqua/source/window/salframeview.mm
index 0dfa0fa356aa..25dadf0e592b 100755
--- a/vcl/aqua/source/window/salframeview.mm
+++ b/vcl/aqua/source/window/salframeview.mm
@@ -1510,6 +1510,11 @@ private:
mbKeyHandled = true;
}
+-(void)clearLastEvent
+{
+ mpLastEvent = nil;
+}
+
- (NSRect)firstRectForCharacterRange:(NSRange)theRange
{
SalExtTextInputPosEvent aPosEvent;
diff --git a/vcl/aqua/source/window/salmenu.cxx b/vcl/aqua/source/window/salmenu.cxx
index f39d7c675bc4..ed3086d8506f 100644
--- a/vcl/aqua/source/window/salmenu.cxx
+++ b/vcl/aqua/source/window/salmenu.cxx
@@ -370,6 +370,10 @@ bool AquaSalMenu::ShowNativePopupMenu(FloatingWindow * pWin, const Rectangle& rR
displayPopupFrame.origin.y = pWin->ImplGetFrame()->maGeometry.nY - pParentAquaSalFrame->maGeometry.nY + offset;
pParentAquaSalFrame->VCLToCocoa(displayPopupFrame, false);
+ // #i111992# if this menu was opened due to a key event, prevent dispatching that yet again
+ if( [pParentNSView respondsToSelector: @selector(clearLastEvent)] )
+ [pParentNSView performSelector:@selector(clearLastEvent)];
+
// open popup menu
NSPopUpButtonCell * pPopUpButtonCell = [[NSPopUpButtonCell alloc] initTextCell:@"" pullsDown:NO];
[pPopUpButtonCell setMenu: pCopyMenu];
diff --git a/vcl/inc/vcl/abstdlg.hxx b/vcl/inc/vcl/abstdlg.hxx
index 1d4e08991bda..2fa134af5078 100644..100755
--- a/vcl/inc/vcl/abstdlg.hxx
+++ b/vcl/inc/vcl/abstdlg.hxx
@@ -66,6 +66,16 @@ public:
virtual void Sync() = 0;
};
+class VCL_DLLPUBLIC AbstractPasswordToOpenModifyDialog : public VclAbstractDialog
+{
+public:
+ virtual String GetPasswordToOpen() const = 0;
+ virtual String GetPasswordToModify() const = 0;
+ virtual bool IsRecommendToOpenReadonly() const = 0;
+};
+
+//-------------------------------------------------------------
+
class VCL_DLLPUBLIC VclAbstractDialogFactory
{
public:
@@ -74,6 +84,9 @@ public:
// nDialogId was previously a ResId without ResMgr; the ResourceId is now
// an implementation detail of the factory
virtual VclAbstractDialog* CreateVclDialog( Window* pParent, sal_uInt32 nResId ) = 0;
+
+ // creates instance of PasswordToOpenModifyDialog from cui
+ virtual AbstractPasswordToOpenModifyDialog * CreatePasswordToOpenModifyDialog( Window * pParent, sal_uInt16 nMinPasswdLen, sal_uInt16 nMaxPasswdLen, bool bIsPasswordToModify ) = 0;
};
#endif
diff --git a/vcl/inc/vcl/menu.hxx b/vcl/inc/vcl/menu.hxx
index c0cc3b5b51d6..908f3e30319c 100644
--- a/vcl/inc/vcl/menu.hxx
+++ b/vcl/inc/vcl/menu.hxx
@@ -41,6 +41,7 @@ struct MenuItemData;
class Point;
class Size;
class Rectangle;
+class Menu;
class MenuItemList;
class HelpEvent;
class Image;
@@ -102,6 +103,17 @@ typedef USHORT MenuItemBits;
// forces images & toggle visibility for toolbar config popup
#define MENU_FLAG_SHOWCHECKIMAGES 0x0008
+struct ImplMenuDelData
+{
+ ImplMenuDelData* mpNext;
+ const Menu* mpMenu;
+
+ ImplMenuDelData( const Menu* pMenu );
+ ~ImplMenuDelData();
+
+ bool isDeleted() const { return mpMenu == 0; }
+};
+
// --------
// - Menu -
// --------
@@ -120,9 +132,9 @@ class VCL_DLLPUBLIC Menu : public Resource
friend class MenuFloatingWindow;
friend class PopupMenu;
friend class SystemWindow;
-
+ friend struct ImplMenuDelData;
private:
- void* pMenuData_NotUsedYet;
+ ImplMenuDelData* mpFirstDel;
MenuItemList* pItemList; // Liste mit den MenuItems
MenuLogo* pLogo;
Menu* pStartedFrom;
@@ -186,6 +198,8 @@ protected:
// return value is Max( rCheckHeight, rRadioHeight )
SAL_DLLPRIVATE long ImplGetNativeCheckAndRadioSize( Window*, long& rCheckHeight, long& rRadioHeight, long &rMaxWidth ) const;
+ SAL_DLLPRIVATE void ImplAddDel( ImplMenuDelData &rDel );
+ SAL_DLLPRIVATE void ImplRemoveDel( ImplMenuDelData &rDel );
public:
SAL_DLLPRIVATE void ImplKillLayoutData() const;
SAL_DLLPRIVATE Menu* ImplGetStartedFrom() const;
diff --git a/vcl/inc/vcl/salgdi.hxx b/vcl/inc/vcl/salgdi.hxx
index 510e797678b0..08c489f7d466 100644
--- a/vcl/inc/vcl/salgdi.hxx
+++ b/vcl/inc/vcl/salgdi.hxx
@@ -125,7 +125,7 @@ protected:
virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry ) = 0;
virtual void drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry ) = 0;
virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency ) = 0;
- virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin ) = 0;
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin ) = 0;
virtual sal_Bool drawPolyLineBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry ) = 0;
virtual sal_Bool drawPolygonBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry ) = 0;
virtual sal_Bool drawPolyPolygonBezier( sal_uInt32 nPoly, const sal_uInt32* pPoints, const SalPoint* const* pPtAry, const BYTE* const* pFlgAry ) = 0;
@@ -373,7 +373,7 @@ public:
PCONSTSALPOINT* pPtAry,
const OutputDevice *pOutDev );
bool DrawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency, const OutputDevice* );
- bool DrawPolyLine( const basegfx::B2DPolygon&, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin, const OutputDevice* );
+ bool DrawPolyLine( const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin, const OutputDevice* );
sal_Bool DrawPolyLineBezier( ULONG nPoints,
const SalPoint* pPtAry,
const BYTE* pFlgAry,
diff --git a/vcl/os2/inc/salgdi.h b/vcl/os2/inc/salgdi.h
index b8dc4eba0199..cf05ff15d7e2 100644
--- a/vcl/os2/inc/salgdi.h
+++ b/vcl/os2/inc/salgdi.h
@@ -162,7 +162,7 @@ protected:
virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry );
virtual void drawPolyPolygon( ULONG nPoly, const ULONG* pPoints, PCONSTSALPOINT* pPtAry );
virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
- virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin);
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin );
virtual sal_Bool drawPolyLineBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry );
virtual sal_Bool drawPolygonBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry );
virtual sal_Bool drawPolyPolygonBezier( ULONG nPoly, const ULONG* pPoints, const SalPoint* const* pPtAry, const BYTE* const* pFlgAry );
diff --git a/vcl/os2/source/gdi/salgdi.cxx b/vcl/os2/source/gdi/salgdi.cxx
index 5be40355f731..dff1557170fb 100644
--- a/vcl/os2/source/gdi/salgdi.cxx
+++ b/vcl/os2/source/gdi/salgdi.cxx
@@ -670,6 +670,7 @@ bool Os2SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double /
bool Os2SalGraphics::drawPolyLine(
const basegfx::B2DPolygon& /*rPolygon*/,
+ double /*fTransparency*/,
const basegfx::B2DVector& /*rLineWidths*/,
basegfx::B2DLineJoin /*eLineJoin*/)
{
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 08759f37d7a6..d66389eee62d 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -1187,7 +1187,7 @@ void PushButton::ImplDrawPushButtonContent( OutputDevice* pDev, ULONG nDrawFlags
aSize.Width() -= ( 5 + nSymbolSize );
ImplDrawAlignedImage( pDev, aPos, aSize, bLayout,
- 1, nDrawFlags, nTextStyle );
+ 1, nDrawFlags, nTextStyle, NULL, (GetStyle() & WB_FLATBUTTON) != 0 );
}
else
ImplCalcSymbolRect( aInRect );
@@ -3688,11 +3688,14 @@ void CheckBox::ImplCheck()
else
eNewState = STATE_NOCHECK;
meState = eNewState;
- ImplInvalidateOrDrawCheckBoxState();
ImplDelData aDelData;
ImplAddDel( &aDelData );
- Toggle();
+ if( (GetStyle() & WB_EARLYTOGGLE) )
+ Toggle();
+ ImplInvalidateOrDrawCheckBoxState();
+ if( ! (GetStyle() & WB_EARLYTOGGLE) )
+ Toggle();
if ( aDelData.IsDelete() )
return;
ImplRemoveDel( &aDelData );
diff --git a/vcl/source/gdi/outdev.cxx b/vcl/source/gdi/outdev.cxx
index bb5e4e3ba36d..a011e4ee4a92 100644
--- a/vcl/source/gdi/outdev.cxx
+++ b/vcl/source/gdi/outdev.cxx
@@ -2311,7 +2311,7 @@ void OutputDevice::DrawLine( const Point& rStartPt, const Point& rEndPt )
aB2DPolyLine = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyLine);
}
- if(mpGraphics->DrawPolyLine(aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this))
+ if( mpGraphics->DrawPolyLine( aB2DPolyLine, 0.0, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this))
{
return;
}
@@ -2416,7 +2416,7 @@ void OutputDevice::impPaintLineGeometryWithEvtlExpand(
if(bTryAA)
{
- bDone = mpGraphics->DrawPolyLine(aCandidate, basegfx::B2DVector(1.0, 1.0), basegfx::B2DLINEJOIN_NONE, this);
+ bDone = mpGraphics->DrawPolyLine( aCandidate, 0.0, basegfx::B2DVector(1.0,1.0), basegfx::B2DLINEJOIN_NONE, this);
}
if(!bDone)
@@ -2605,7 +2605,7 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly )
aB2DPolyLine = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolyLine);
}
- if(mpGraphics->DrawPolyLine(aB2DPolyLine, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this))
+ if(mpGraphics->DrawPolyLine( aB2DPolyLine, 0.0, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this))
{
return;
}
@@ -2653,7 +2653,7 @@ void OutputDevice::DrawPolyLine( const Polygon& rPoly, const LineInfo& rLineInfo
if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
&& LINE_SOLID == rLineInfo.GetStyle())
{
- DrawPolyLine(rPoly.getB2DPolygon(), (double)rLineInfo.GetWidth(), rLineInfo.GetLineJoin());
+ DrawPolyLine( rPoly.getB2DPolygon(), (double)rLineInfo.GetWidth(), rLineInfo.GetLineJoin());
return;
}
@@ -2785,7 +2785,7 @@ void OutputDevice::DrawPolygon( const Polygon& rPoly )
aB2DPolygon = basegfx::tools::snapPointsOfHorizontalOrVerticalEdges(aB2DPolygon);
}
- bSuccess = mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
+ bSuccess = mpGraphics->DrawPolyLine( aB2DPolygon, 0.0, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
}
if(bSuccess)
@@ -2877,7 +2877,7 @@ void OutputDevice::DrawPolyPolygon( const PolyPolygon& rPolyPoly )
for(sal_uInt32 a(0); bSuccess && a < aB2DPolyPolygon.count(); a++)
{
- bSuccess = mpGraphics->DrawPolyLine(aB2DPolyPolygon.getB2DPolygon(a), aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
+ bSuccess = mpGraphics->DrawPolyLine( aB2DPolyPolygon.getB2DPolygon(a), 0.0, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
}
}
@@ -3000,7 +3000,7 @@ void OutputDevice::ImpDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPo
for(sal_uInt32 a(0);bSuccess && a < aB2DPolyPolygon.count(); a++)
{
- bSuccess = mpGraphics->DrawPolyLine(aB2DPolyPolygon.getB2DPolygon(a), aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
+ bSuccess = mpGraphics->DrawPolyLine( aB2DPolyPolygon.getB2DPolygon(a), 0.0, aB2DLineWidth, basegfx::B2DLINEJOIN_NONE, this);
}
}
@@ -3047,7 +3047,7 @@ bool OutputDevice::ImpTryDrawPolyLineDirect(
}
// draw the polyline
- return mpGraphics->DrawPolyLine(aB2DPolygon, aB2DLineWidth, eLineJoin, this);
+ return mpGraphics->DrawPolyLine( aB2DPolygon, 0.0, aB2DLineWidth, eLineJoin, this);
}
void OutputDevice::DrawPolyLine(
diff --git a/vcl/source/gdi/outdev6.cxx b/vcl/source/gdi/outdev6.cxx
index bef37284adbd..47b150ddc4c5 100644
--- a/vcl/source/gdi/outdev6.cxx
+++ b/vcl/source/gdi/outdev6.cxx
@@ -184,18 +184,31 @@ void OutputDevice::DrawTransparent( const basegfx::B2DPolyPolygon& rB2DPolyPoly,
if((mnAntialiasing & ANTIALIASING_ENABLE_B2DDRAW)
&& mpGraphics->supportsOperation(OutDevSupport_B2DDraw)
- && ROP_OVERPAINT == GetRasterOp()
- && IsFillColor())
+ && ROP_OVERPAINT == GetRasterOp() )
{
// b2dpolygon support not implemented yet on non-UNX platforms
const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
basegfx::B2DPolyPolygon aB2DPolyPolygon(rB2DPolyPoly);
- // transform the polygon and ensure closed
- aB2DPolyPolygon.transform(aTransform);
- aB2DPolyPolygon.setClosed(true);
+ // transform the polygon into device space and ensure it is closed
+ aB2DPolyPolygon.transform( aTransform );
+ aB2DPolyPolygon.setClosed( true );
- if(mpGraphics->DrawPolyPolygon(aB2DPolyPolygon, fTransparency, this))
+ bool bDrawnOk = true;
+ if( IsFillColor() )
+ bDrawnOk = mpGraphics->DrawPolyPolygon( aB2DPolyPolygon, fTransparency, this );
+ if( bDrawnOk && IsLineColor() )
+ {
+ const basegfx::B2DVector aHairlineWidth(1,1);
+ const int nPolyCount = aB2DPolyPolygon.count();
+ for( int nPolyIdx = 0; nPolyIdx < nPolyCount; ++nPolyIdx )
+ {
+ const ::basegfx::B2DPolygon aOnePoly = aB2DPolyPolygon.getB2DPolygon( nPolyIdx );
+ mpGraphics->DrawPolyLine( aOnePoly, fTransparency, aHairlineWidth, ::basegfx::B2DLINEJOIN_NONE, this );
+ }
+ }
+
+ if( bDrawnOk )
{
#if 0
// MetaB2DPolyPolygonAction is not implemented yet:
@@ -287,14 +300,17 @@ void OutputDevice::DrawTransparent( const PolyPolygon& rPolyPoly,
// get the polygon in device coordinates
basegfx::B2DPolyPolygon aB2DPolyPolygon( rPolyPoly.getB2DPolyPolygon() );
- aB2DPolyPolygon.setClosed( true );
const ::basegfx::B2DHomMatrix aTransform = ImplGetDeviceTransformation();
aB2DPolyPolygon.transform( aTransform );
- // draw the transparent polygon
- bDrawn = mpGraphics->DrawPolyPolygon( aB2DPolyPolygon, nTransparencePercent*0.01, this );
+ const double fTransparency = 0.01 * nTransparencePercent;
+ if( mbFillColor )
+ {
+ // draw the transparent polygon
+ // NOTE: filled polygons are assumed to be drawn as if they were always closed
+ bDrawn = mpGraphics->DrawPolyPolygon( aB2DPolyPolygon, fTransparency, this );
+ }
- // DrawTransparent() assumes that the border is NOT to be drawn transparently???
if( mbLineColor )
{
// disable the fill color for now
@@ -305,7 +321,7 @@ void OutputDevice::DrawTransparent( const PolyPolygon& rPolyPoly,
for( int nPolyIdx = 0; nPolyIdx < nPolyCount; ++nPolyIdx )
{
const ::basegfx::B2DPolygon& rPolygon = aB2DPolyPolygon.getB2DPolygon( nPolyIdx );
- mpGraphics->DrawPolyLine( rPolygon, aLineWidths, ::basegfx::B2DLINEJOIN_NONE, this );
+ bDrawn = mpGraphics->DrawPolyLine( rPolygon, fTransparency, aLineWidths, ::basegfx::B2DLINEJOIN_NONE, this );
}
// prepare to restore the fill color
mbInitFillColor = mbFillColor;
diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx
index 77f7f74fc10e..6cb0a7d07697 100644
--- a/vcl/source/gdi/pdfwriter_impl.cxx
+++ b/vcl/source/gdi/pdfwriter_impl.cxx
@@ -4081,15 +4081,15 @@ bool PDFWriterImpl::emitFonts()
}
else if( (aSubsetInfo.m_nFontType & FontSubsetInfo::TYPE1_PFB) != 0 ) // TODO: also support PFA?
{
- unsigned char* pBuffer = new unsigned char[ (int)nLength1 ];
+ boost::shared_array<unsigned char> pBuffer( new unsigned char[ nLength1 ] );
sal_uInt64 nBytesRead = 0;
- CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, pBuffer, nLength1, &nBytesRead ) ) );
+ CHECK_RETURN( (osl_File_E_None == osl_readFile( aFontFile, pBuffer.get(), nLength1, &nBytesRead ) ) );
DBG_ASSERT( nBytesRead==nLength1, "PDF-FontSubset read incomplete!" );
CHECK_RETURN( (osl_File_E_None == osl_setFilePos( aFontFile, osl_Pos_Absolut, 0 ) ) );
// get the PFB-segment lengths
ThreeInts aSegmentLengths = {0,0,0};
- getPfbSegmentLengths( pBuffer, (int)nBytesRead, aSegmentLengths );
+ getPfbSegmentLengths( pBuffer.get(), (int)nBytesRead, aSegmentLengths );
// the lengths below are mandatory for PDF-exported Type1 fonts
// because the PFB segment headers get stripped! WhyOhWhy.
aLine.append( (sal_Int32)aSegmentLengths[0] );
@@ -4106,11 +4106,9 @@ bool PDFWriterImpl::emitFonts()
// emit PFB-sections without section headers
beginCompression();
checkAndEnableStreamEncryption( nFontStream );
- CHECK_RETURN( writeBuffer( pBuffer+ 6, aSegmentLengths[0] ) );
- CHECK_RETURN( writeBuffer( pBuffer+12 + aSegmentLengths[0], aSegmentLengths[1] ) );
- CHECK_RETURN( writeBuffer( pBuffer+18 + aSegmentLengths[0] + aSegmentLengths[1], aSegmentLengths[2] ) );
-
- delete[] pBuffer;
+ CHECK_RETURN( writeBuffer( &pBuffer[6], aSegmentLengths[0] ) );
+ CHECK_RETURN( writeBuffer( &pBuffer[12] + aSegmentLengths[0], aSegmentLengths[1] ) );
+ CHECK_RETURN( writeBuffer( &pBuffer[18] + aSegmentLengths[0] + aSegmentLengths[1], aSegmentLengths[2] ) );
}
else
{
diff --git a/vcl/source/gdi/salgdilayout.cxx b/vcl/source/gdi/salgdilayout.cxx
index 84e45979d679..7a6808a0e392 100644
--- a/vcl/source/gdi/salgdilayout.cxx
+++ b/vcl/source/gdi/salgdilayout.cxx
@@ -405,6 +405,7 @@ void SalGraphics::DrawRect( long nX, long nY, long nWidth, long nHeight, cons
}
bool SalGraphics::drawPolyLine(
const basegfx::B2DPolygon& /*rPolyPolygon*/,
+ double /*fTransparency*/,
const basegfx::B2DVector& /*rLineWidths*/,
basegfx::B2DLineJoin /*eLineJoin*/)
{
@@ -536,7 +537,7 @@ sal_Bool SalGraphics::DrawPolyPolygonBezier( sal_uInt32 i_nPoly, const sal_uInt3
return bRet;
}
-bool SalGraphics::DrawPolyLine( const ::basegfx::B2DPolygon& i_rPolygon,
+bool SalGraphics::DrawPolyLine( const ::basegfx::B2DPolygon& i_rPolygon, double fTransparency,
const ::basegfx::B2DVector& i_rLineWidth, basegfx::B2DLineJoin i_eLineJoin,
const OutputDevice* i_pOutDev )
{
@@ -544,10 +545,10 @@ bool SalGraphics::DrawPolyLine( const ::basegfx::B2DPolygon& i_rPolygon,
if( (m_nLayout & SAL_LAYOUT_BIDI_RTL) )
{
basegfx::B2DPolygon aMirror( mirror( i_rPolygon, i_pOutDev ) );
- bRet = drawPolyLine( aMirror, i_rLineWidth, i_eLineJoin );
+ bRet = drawPolyLine( aMirror, fTransparency, i_rLineWidth, i_eLineJoin );
}
else
- bRet = drawPolyLine( i_rPolygon, i_rLineWidth, i_eLineJoin );
+ bRet = drawPolyLine( i_rPolygon, fTransparency, i_rLineWidth, i_eLineJoin );
return bRet;
}
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index cebe1d1f596c..1723d26ce399 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -938,6 +938,14 @@ Menu::~Menu()
if ( nEventId )
Application::RemoveUserEvent( nEventId );
+ // Notify deletion of this menu
+ ImplMenuDelData* pDelData = mpFirstDel;
+ while ( pDelData )
+ {
+ pDelData->mpMenu = NULL;
+ pDelData = pDelData->mpNext;
+ }
+
bKilled = TRUE;
delete pItemList;
@@ -970,7 +978,7 @@ void Menu::ImplInit()
bInCallback = FALSE;
bKilled = FALSE;
mpLayoutData = NULL;
-
+ mpFirstDel = NULL; // Dtor notification list
// Native-support: returns NULL if not supported
mpSalMenu = ImplGetSVData()->mpDefInst->CreateMenu( bIsMenuBar );
}
@@ -1034,19 +1042,29 @@ void Menu::CreateAutoMnemonics()
void Menu::Activate()
{
bInCallback = TRUE;
+
+ ImplMenuDelData aDelData( this );
+
ImplCallEventListeners( VCLEVENT_MENU_ACTIVATE, ITEMPOS_INVALID );
- if ( !aActivateHdl.Call( this ) )
+
+ if( !aDelData.isDeleted() )
{
- Menu* pStartMenu = ImplGetStartMenu();
- if ( pStartMenu && ( pStartMenu != this ) )
+ if ( !aActivateHdl.Call( this ) )
{
- pStartMenu->bInCallback = TRUE;
- // MT 11/01: Call EventListener here? I don't know...
- pStartMenu->aActivateHdl.Call( this );
- pStartMenu->bInCallback = FALSE;
+ if( !aDelData.isDeleted() )
+ {
+ Menu* pStartMenu = ImplGetStartMenu();
+ if ( pStartMenu && ( pStartMenu != this ) )
+ {
+ pStartMenu->bInCallback = TRUE;
+ // MT 11/01: Call EventListener here? I don't know...
+ pStartMenu->aActivateHdl.Call( this );
+ pStartMenu->bInCallback = FALSE;
+ }
+ }
}
+ bInCallback = FALSE;
}
- bInCallback = FALSE;
}
void Menu::Deactivate()
@@ -1059,33 +1077,49 @@ void Menu::Deactivate()
}
bInCallback = TRUE;
+
+ ImplMenuDelData aDelData( this );
+
Menu* pStartMenu = ImplGetStartMenu();
ImplCallEventListeners( VCLEVENT_MENU_DEACTIVATE, ITEMPOS_INVALID );
- if ( !aDeactivateHdl.Call( this ) )
+
+ if( !aDelData.isDeleted() )
{
- if ( pStartMenu && ( pStartMenu != this ) )
+ if ( !aDeactivateHdl.Call( this ) )
{
- pStartMenu->bInCallback = TRUE;
- pStartMenu->aDeactivateHdl.Call( this );
- pStartMenu->bInCallback = FALSE;
+ if( !aDelData.isDeleted() )
+ {
+ if ( pStartMenu && ( pStartMenu != this ) )
+ {
+ pStartMenu->bInCallback = TRUE;
+ pStartMenu->aDeactivateHdl.Call( this );
+ pStartMenu->bInCallback = FALSE;
+ }
+ }
}
}
- bInCallback = FALSE;
- if ( this == pStartMenu )
- GetpApp()->HideHelpStatusText();
+ if( !aDelData.isDeleted() )
+ {
+ bInCallback = FALSE;
+
+ if ( this == pStartMenu )
+ GetpApp()->HideHelpStatusText();
+ }
}
void Menu::Highlight()
{
+ ImplMenuDelData aDelData( this );
+
Menu* pStartMenu = ImplGetStartMenu();
- if ( !aHighlightHdl.Call( this ) )
+ if ( !aHighlightHdl.Call( this ) && !aDelData.isDeleted() )
{
if ( pStartMenu && ( pStartMenu != this ) )
pStartMenu->aHighlightHdl.Call( this );
}
- if ( GetCurItemId() )
+ if ( !aDelData.isDeleted() && GetCurItemId() )
GetpApp()->ShowHelpStatusText( GetHelpText( GetCurItemId() ) );
}
@@ -1112,14 +1146,19 @@ void Menu::ImplSelect()
void Menu::Select()
{
+ ImplMenuDelData aDelData( this );
+
ImplCallEventListeners( VCLEVENT_MENU_SELECT, GetItemPos( GetCurItemId() ) );
- if ( !aSelectHdl.Call( this ) )
+ if ( !aDelData.isDeleted() && !aSelectHdl.Call( this ) )
{
- Menu* pStartMenu = ImplGetStartMenu();
- if ( pStartMenu && ( pStartMenu != this ) )
+ if( !aDelData.isDeleted() )
{
- pStartMenu->nSelectedId = nSelectedId;
- pStartMenu->aSelectHdl.Call( this );
+ Menu* pStartMenu = ImplGetStartMenu();
+ if ( pStartMenu && ( pStartMenu != this ) )
+ {
+ pStartMenu->nSelectedId = nSelectedId;
+ pStartMenu->aSelectHdl.Call( this );
+ }
}
}
}
@@ -1141,6 +1180,8 @@ void Menu::RequestHelp( const HelpEvent& )
void Menu::ImplCallEventListeners( ULONG nEvent, USHORT nPos )
{
+ ImplMenuDelData aDelData( this );
+
VclMenuEvent aEvent( this, nEvent, nPos );
// This is needed by atk accessibility bridge
@@ -1149,16 +1190,22 @@ void Menu::ImplCallEventListeners( ULONG nEvent, USHORT nPos )
ImplGetSVData()->mpApp->ImplCallEventListeners( &aEvent );
}
- if ( !maEventListeners.empty() )
+ if ( !aDelData.isDeleted() && !maEventListeners.empty() )
maEventListeners.Call( &aEvent );
- Menu* pMenu = this;
- while ( pMenu )
+ if( !aDelData.isDeleted() )
{
- if ( !maChildEventListeners.empty() )
- maChildEventListeners.Call( &aEvent );
+ Menu* pMenu = this;
+ while ( pMenu )
+ {
+ if ( !maChildEventListeners.empty() )
+ maChildEventListeners.Call( &aEvent );
+
+ if( aDelData.isDeleted() )
+ break;
- pMenu = ( pMenu->pStartedFrom != pMenu ) ? pMenu->pStartedFrom : NULL;
+ pMenu = ( pMenu->pStartedFrom != pMenu ) ? pMenu->pStartedFrom : NULL;
+ }
}
}
@@ -2261,6 +2308,42 @@ long Menu::ImplGetNativeCheckAndRadioSize( Window* pWin, long& rCheckHeight, lon
return (rCheckHeight > rRadioHeight) ? rCheckHeight : rRadioHeight;
}
+// -----------------------------------------------------------------------
+
+void Menu::ImplAddDel( ImplMenuDelData& rDel )
+{
+ DBG_ASSERT( !rDel.mpMenu, "Menu::ImplAddDel(): cannot add ImplMenuDelData twice !" );
+ if( !rDel.mpMenu )
+ {
+ rDel.mpMenu = this;
+ rDel.mpNext = mpFirstDel;
+ mpFirstDel = &rDel;
+ }
+}
+
+// -----------------------------------------------------------------------
+
+void Menu::ImplRemoveDel( ImplMenuDelData& rDel )
+{
+ rDel.mpMenu = NULL;
+ if ( mpFirstDel == &rDel )
+ {
+ mpFirstDel = rDel.mpNext;
+ }
+ else
+ {
+ ImplMenuDelData* pData = mpFirstDel;
+ while ( pData && (pData->mpNext != &rDel) )
+ pData = pData->mpNext;
+
+ DBG_ASSERT( pData, "Menu::ImplRemoveDel(): ImplMenuDelData not registered !" );
+ if( pData )
+ pData->mpNext = rDel.mpNext;
+ }
+}
+
+// -----------------------------------------------------------------------
+
Size Menu::ImplCalcSize( Window* pWin )
{
// | Checked| Image| Text| Accel/Popup|
@@ -2790,13 +2873,19 @@ Menu* Menu::ImplGetStartMenu()
void Menu::ImplCallHighlight( USHORT nHighlightedItem )
{
+ ImplMenuDelData aDelData( this );
+
nSelectedId = 0;
MenuItemData* pData = pItemList->GetDataFromPos( nHighlightedItem );
if ( pData )
nSelectedId = pData->nId;
ImplCallEventListeners( VCLEVENT_MENU_HIGHLIGHT, GetItemPos( GetCurItemId() ) );
- Highlight();
- nSelectedId = 0;
+
+ if( !aDelData.isDeleted() )
+ {
+ Highlight();
+ nSelectedId = 0;
+ }
}
IMPL_LINK( Menu, ImplCallSelect, Menu*, EMPTYARG )
@@ -3292,10 +3381,14 @@ BOOL MenuBar::HandleMenuActivateEvent( Menu *pMenu ) const
{
if( pMenu )
{
+ ImplMenuDelData aDelData( this );
+
pMenu->pStartedFrom = (Menu*)this;
pMenu->bInCallback = TRUE;
pMenu->Activate();
- pMenu->bInCallback = FALSE;
+
+ if( !aDelData.isDeleted() )
+ pMenu->bInCallback = FALSE;
}
return TRUE;
}
@@ -3304,10 +3397,13 @@ BOOL MenuBar::HandleMenuDeActivateEvent( Menu *pMenu ) const
{
if( pMenu )
{
+ ImplMenuDelData aDelData( this );
+
pMenu->pStartedFrom = (Menu*)this;
pMenu->bInCallback = TRUE;
pMenu->Deactivate();
- pMenu->bInCallback = FALSE;
+ if( !aDelData.isDeleted() )
+ pMenu->bInCallback = FALSE;
}
return TRUE;
}
@@ -3318,13 +3414,18 @@ BOOL MenuBar::HandleMenuHighlightEvent( Menu *pMenu, USHORT nHighlightEventId )
pMenu = ((Menu*) this)->ImplFindMenu( nHighlightEventId );
if( pMenu )
{
+ ImplMenuDelData aDelData( pMenu );
+
if( mnHighlightedItemPos != ITEMPOS_INVALID )
pMenu->ImplCallEventListeners( VCLEVENT_MENU_DEHIGHLIGHT, mnHighlightedItemPos );
- pMenu->mnHighlightedItemPos = pMenu->GetItemPos( nHighlightEventId );
- pMenu->nSelectedId = nHighlightEventId;
- pMenu->pStartedFrom = (Menu*)this;
- pMenu->ImplCallHighlight( pMenu->mnHighlightedItemPos );
+ if( !aDelData.isDeleted() )
+ {
+ pMenu->mnHighlightedItemPos = pMenu->GetItemPos( nHighlightEventId );
+ pMenu->nSelectedId = nHighlightEventId;
+ pMenu->pStartedFrom = (Menu*)this;
+ pMenu->ImplCallHighlight( pMenu->mnHighlightedItemPos );
+ }
return TRUE;
}
else
@@ -5989,3 +6090,17 @@ bool MenuBarWindow::HandleMenuButtonEvent( USHORT i_nButtonId )
}
return FALSE;
}
+
+ImplMenuDelData::ImplMenuDelData( const Menu* pMenu )
+: mpNext( 0 )
+, mpMenu( 0 )
+{
+ if( pMenu )
+ const_cast< Menu* >( pMenu )->ImplAddDel( *this );
+}
+
+ImplMenuDelData::~ImplMenuDelData()
+{
+ if( mpMenu )
+ const_cast< Menu* >( mpMenu )->ImplRemoveDel( *this );
+}
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index ca92d9ed6c5b..ebeb5c94d68a 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -8650,7 +8650,10 @@ Reference< XClipboard > Window::GetClipboard()
if( xFactory.is() )
{
- mpWindowImpl->mpFrameData->mxClipboard = Reference< XClipboard >( xFactory->createInstance( OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.SystemClipboard" ) ), UNO_QUERY );
+ mpWindowImpl->mpFrameData->mxClipboard = Reference< XClipboard >( xFactory->createInstance( OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.SystemClipboardExt" ) ), UNO_QUERY );
+
+ if( !mpWindowImpl->mpFrameData->mxClipboard.is() )
+ mpWindowImpl->mpFrameData->mxClipboard = Reference< XClipboard >( xFactory->createInstance( OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.SystemClipboard" ) ), UNO_QUERY );
#if defined(UNX) && !defined(QUARTZ) // unix clipboard needs to be initialized
if( mpWindowImpl->mpFrameData->mxClipboard.is() )
@@ -8713,6 +8716,9 @@ Reference< XClipboard > Window::GetPrimarySelection()
static Reference< XClipboard > s_xSelection;
if ( !s_xSelection.is() )
+ s_xSelection = Reference< XClipboard >( xFactory->createInstance( OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.GenericClipboardExt" ) ), UNO_QUERY );
+
+ if ( !s_xSelection.is() )
s_xSelection = Reference< XClipboard >( xFactory->createInstance( OUString::createFromAscii( "com.sun.star.datatransfer.clipboard.GenericClipboard" ) ), UNO_QUERY );
mpWindowImpl->mpFrameData->mxSelection = s_xSelection;
diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
index 11d567c85098..c6ff16f8395b 100644
--- a/vcl/unx/gtk/window/gtkframe.cxx
+++ b/vcl/unx/gtk/window/gtkframe.cxx
@@ -3757,8 +3757,21 @@ gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint
if (xText.is())
{
sal_uInt32 nPosition = xText->getCaretPosition();
- xText->deleteText(nPosition + offset, nPosition + offset + nchars);
- return TRUE;
+ // --> OD 2010-06-04 #i111768# - apply patch from kstribley:
+ // range checking
+// xText->deleteText(nPosition + offset, nPosition + offset + nchars);
+ sal_Int32 nDeletePos = nPosition + offset;
+ sal_Int32 nDeleteEnd = nDeletePos + nchars;
+ if (nDeletePos < 0)
+ nDeletePos = 0;
+ if (nDeleteEnd < 0)
+ nDeleteEnd = 0;
+ if (nDeleteEnd > xText->getCharacterCount())
+ nDeleteEnd = xText->getCharacterCount();
+
+ xText->deleteText(nDeletePos, nDeleteEnd);
+ // <--
+ return TRUE;
}
return FALSE;
diff --git a/vcl/unx/headless/svpgdi.cxx b/vcl/unx/headless/svpgdi.cxx
index e65c9faf1432..68d8be7cb4eb 100644
--- a/vcl/unx/headless/svpgdi.cxx
+++ b/vcl/unx/headless/svpgdi.cxx
@@ -382,7 +382,7 @@ void SvpSalGraphics::drawPolyPolygon( sal_uInt32 nPoly,
dbgOut( m_aDevice );
}
-bool SvpSalGraphics::drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& /*rLineWidths*/, basegfx::B2DLineJoin /*eJoin*/ )
+bool SvpSalGraphics::drawPolyLine( const ::basegfx::B2DPolygon&, double /*fTransparency*/, const ::basegfx::B2DVector& /*rLineWidths*/, basegfx::B2DLineJoin /*eJoin*/ )
{
// TODO: implement and advertise OutDevSupport_B2DDraw support
return false;
diff --git a/vcl/unx/headless/svpgdi.hxx b/vcl/unx/headless/svpgdi.hxx
index 132dafaa9adf..ca1af87f8862 100644
--- a/vcl/unx/headless/svpgdi.hxx
+++ b/vcl/unx/headless/svpgdi.hxx
@@ -121,7 +121,7 @@ public:
virtual void drawLine( long nX1, long nY1, long nX2, long nY2 );
virtual void drawRect( long nX, long nY, long nWidth, long nHeight );
virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
- virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin );
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin );
virtual void drawPolyLine( ULONG nPoints, const SalPoint* pPtAry );
virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry );
virtual void drawPolyPolygon( sal_uInt32 nPoly,
diff --git a/vcl/unx/headless/svppspgraphics.cxx b/vcl/unx/headless/svppspgraphics.cxx
index 7f551051c1a7..6da09b38023c 100644
--- a/vcl/unx/headless/svppspgraphics.cxx
+++ b/vcl/unx/headless/svppspgraphics.cxx
@@ -323,7 +323,7 @@ void PspGraphics::drawPolyPolygon( sal_uInt32 nPoly,
m_pPrinterGfx->DrawPolyPolygon (nPoly, pPoints, (const Point**)pPtAry);
}
-bool PspGraphics::drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& /*rLineWidths*/, basegfx::B2DLineJoin /*eJoin*/ )
+bool PspGraphics::drawPolyLine( const ::basegfx::B2DPolygon&, double /*fTransparency*/, const ::basegfx::B2DVector& /*rLineWidths*/, basegfx::B2DLineJoin /*eJoin*/ )
{
// TODO: implement and advertise OutDevSupport_B2DDraw support
return false;
diff --git a/vcl/unx/headless/svppspgraphics.hxx b/vcl/unx/headless/svppspgraphics.hxx
index 82ba613615cb..063dff34c3c2 100644
--- a/vcl/unx/headless/svppspgraphics.hxx
+++ b/vcl/unx/headless/svppspgraphics.hxx
@@ -142,7 +142,7 @@ public:
virtual void drawPolyLine( ULONG nPoints, const SalPoint* pPtAry );
virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry );
virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
- virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin );
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin );
virtual void drawPolyPolygon( sal_uInt32 nPoly,
const sal_uInt32* pPoints,
PCONSTSALPOINT* pPtAry );
diff --git a/vcl/unx/inc/pspgraphics.h b/vcl/unx/inc/pspgraphics.h
index 2eae73cdaa86..4b1ac12116a3 100644
--- a/vcl/unx/inc/pspgraphics.h
+++ b/vcl/unx/inc/pspgraphics.h
@@ -142,7 +142,7 @@ public:
const sal_uInt32* pPoints,
PCONSTSALPOINT* pPtAry );
virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
- virtual bool drawPolyLine( const basegfx::B2DPolygon&, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin);
+ virtual bool drawPolyLine( const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin);
virtual sal_Bool drawPolyLineBezier( ULONG nPoints,
const SalPoint* pPtAry,
const BYTE* pFlgAry );
diff --git a/vcl/unx/inc/salgdi.h b/vcl/unx/inc/salgdi.h
index 6ccea2c4a00c..42d9c5592317 100644
--- a/vcl/unx/inc/salgdi.h
+++ b/vcl/unx/inc/salgdi.h
@@ -294,7 +294,7 @@ public:
const sal_uInt32* pPoints,
PCONSTSALPOINT* pPtAry );
virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
- virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin );
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin );
virtual bool drawFilledTrapezoids( const ::basegfx::B2DTrapezoid*, int nTrapCount, double fTransparency );
#if 1 // TODO: remove these obselete methods
diff --git a/vcl/unx/source/app/keysymnames.cxx b/vcl/unx/source/app/keysymnames.cxx
index cf7f7e082e69..c9515f016433 100644
--- a/vcl/unx/source/app/keysymnames.cxx
+++ b/vcl/unx/source/app/keysymnames.cxx
@@ -637,6 +637,7 @@ const char* SalDisplay::GetKeyboardName( BOOL bRefresh )
}
}
}
+ close(kbd);
}
}
#else
diff --git a/vcl/unx/source/app/sm.cxx b/vcl/unx/source/app/sm.cxx
index dbaa278a780b..959d6af5912d 100644
--- a/vcl/unx/source/app/sm.cxx
+++ b/vcl/unx/source/app/sm.cxx
@@ -159,6 +159,10 @@ class ICEConnectionObserver
static int nWakeupFiles[2];
static oslMutex ICEMutex;
static oslThread ICEThread;
+#ifdef USE_SM_EXTENSION
+ static IceIOErrorHandler origIOErrorHandler;
+ static IceErrorHandler origErrorHandler;
+#endif
public:
static void activate();
@@ -179,6 +183,19 @@ oslMutex ICEConnectionObserver::ICEMutex = NULL;
oslThread ICEConnectionObserver::ICEThread = NULL;
int ICEConnectionObserver::nWakeupFiles[2] = { 0, 0 };
+#ifdef USE_SM_EXTENSION
+IceIOErrorHandler ICEConnectionObserver::origIOErrorHandler = NULL;
+IceErrorHandler ICEConnectionObserver::origErrorHandler = NULL;
+
+static void IgnoreIceErrors(IceConn, Bool, int, unsigned long, int, int, IcePointer)
+{
+}
+
+static void IgnoreIceIOErrors(IceConn)
+{
+}
+#endif
+
// HACK
bool SessionManagerClient::bDocSaveDone = false;
@@ -591,6 +608,12 @@ void ICEConnectionObserver::activate()
ICEMutex = osl_createMutex();
bIsWatching = TRUE;
#ifdef USE_SM_EXTENSION
+ /*
+ * Default handlers call exit, we don't care that strongly if something
+ * happens to fail
+ */
+ origIOErrorHandler = IceSetIOErrorHandler( IgnoreIceIOErrors );
+ origErrorHandler = IceSetErrorHandler( IgnoreIceErrors );
IceAddConnectionWatch( ICEWatchProc, NULL );
#endif
}
@@ -604,6 +627,8 @@ void ICEConnectionObserver::deactivate()
bIsWatching = FALSE;
#ifdef USE_SM_EXTENSION
IceRemoveConnectionWatch( ICEWatchProc, NULL );
+ IceSetErrorHandler( origErrorHandler );
+ IceSetIOErrorHandler( origIOErrorHandler );
#endif
nConnections = 0;
if( ICEThread )
diff --git a/vcl/unx/source/app/wmadaptor.cxx b/vcl/unx/source/app/wmadaptor.cxx
index fb2317e19573..1a116fcbe8d6 100644
--- a/vcl/unx/source/app/wmadaptor.cxx
+++ b/vcl/unx/source/app/wmadaptor.cxx
@@ -1407,56 +1407,59 @@ void WMAdaptor::setFrameTypeAndDecoration( X11SalFrame* pFrame, WMWindowType eTy
pFrame->meWindowType = eType;
pFrame->mnDecorationFlags = nDecorationFlags;
- // set mwm hints
- struct _mwmhints {
- unsigned long flags, func, deco;
- long input_mode;
- unsigned long status;
- } aHint;
-
- aHint.flags = 15; /* flags for functions, decoration, input mode and status */
- aHint.deco = 0;
- aHint.func = 1L << 2;
- aHint.status = 0;
- aHint.input_mode = 0;
-
- // evaluate decoration flags
- if( nDecorationFlags & decoration_All )
- aHint.deco = 1, aHint.func = 1;
- else
- {
- if( nDecorationFlags & decoration_Title )
- aHint.deco |= 1L << 3;
- if( nDecorationFlags & decoration_Border )
- aHint.deco |= 1L << 1;
- if( nDecorationFlags & decoration_Resize )
- aHint.deco |= 1L << 2, aHint.func |= 1L << 1;
- if( nDecorationFlags & decoration_MinimizeBtn )
- aHint.deco |= 1L << 5, aHint.func |= 1L << 3;
- if( nDecorationFlags & decoration_MaximizeBtn )
- aHint.deco |= 1L << 6, aHint.func |= 1L << 4;
- if( nDecorationFlags & decoration_CloseBtn )
- aHint.deco |= 1L << 4, aHint.func |= 1L << 5;
- }
- // evaluate window type
- switch( eType )
+ if( ! pFrame->mbFullScreen )
{
- case windowType_ModalDialogue:
- aHint.input_mode = 1;
- break;
- default:
- break;
- }
+ // set mwm hints
+ struct _mwmhints {
+ unsigned long flags, func, deco;
+ long input_mode;
+ unsigned long status;
+ } aHint;
+
+ aHint.flags = 15; /* flags for functions, decoration, input mode and status */
+ aHint.deco = 0;
+ aHint.func = 1L << 2;
+ aHint.status = 0;
+ aHint.input_mode = 0;
+
+ // evaluate decoration flags
+ if( nDecorationFlags & decoration_All )
+ aHint.deco = 1, aHint.func = 1;
+ else
+ {
+ if( nDecorationFlags & decoration_Title )
+ aHint.deco |= 1L << 3;
+ if( nDecorationFlags & decoration_Border )
+ aHint.deco |= 1L << 1;
+ if( nDecorationFlags & decoration_Resize )
+ aHint.deco |= 1L << 2, aHint.func |= 1L << 1;
+ if( nDecorationFlags & decoration_MinimizeBtn )
+ aHint.deco |= 1L << 5, aHint.func |= 1L << 3;
+ if( nDecorationFlags & decoration_MaximizeBtn )
+ aHint.deco |= 1L << 6, aHint.func |= 1L << 4;
+ if( nDecorationFlags & decoration_CloseBtn )
+ aHint.deco |= 1L << 4, aHint.func |= 1L << 5;
+ }
+ // evaluate window type
+ switch( eType )
+ {
+ case windowType_ModalDialogue:
+ aHint.input_mode = 1;
+ break;
+ default:
+ break;
+ }
- // set the hint
- XChangeProperty( m_pDisplay,
- pFrame->GetShellWindow(),
- m_aWMAtoms[ MOTIF_WM_HINTS ],
- m_aWMAtoms[ MOTIF_WM_HINTS ],
- 32,
- PropModeReplace,
- (unsigned char*)&aHint,
- 5 );
+ // set the hint
+ XChangeProperty( m_pDisplay,
+ pFrame->GetShellWindow(),
+ m_aWMAtoms[ MOTIF_WM_HINTS ],
+ m_aWMAtoms[ MOTIF_WM_HINTS ],
+ 32,
+ PropModeReplace,
+ (unsigned char*)&aHint,
+ 5 );
+ }
// set transientFor hint
/* #91030# dtwm will not map a dialogue if the transient
diff --git a/vcl/unx/source/fontmanager/fontconfig.cxx b/vcl/unx/source/fontmanager/fontconfig.cxx
index 816c8fb0b4c4..3e24cd7c8e45 100644
--- a/vcl/unx/source/fontmanager/fontconfig.cxx
+++ b/vcl/unx/source/fontmanager/fontconfig.cxx
@@ -851,7 +851,7 @@ bool PrintFontManager::addFontconfigDir( const rtl::OString& rDirName )
bool bDirOk = (rWrapper.FcConfigAppFontAddDir( rWrapper.FcConfigGetCurrent(), (FcChar8*)pDirName ) == FcTrue);
#if OSL_DEBUG_LEVEL > 1
- fprintf( stderr, "FcConfigAppFontAddDir( \"%s\") => %d\n", pDirName, bRet );
+ fprintf( stderr, "FcConfigAppFontAddDir( \"%s\") => %d\n", pDirName, bDirOk );
#endif
if( bDirOk )
diff --git a/vcl/unx/source/gdi/pspgraphics.cxx b/vcl/unx/source/gdi/pspgraphics.cxx
index d599e09e71f2..d3eb103b9dd6 100644
--- a/vcl/unx/source/gdi/pspgraphics.cxx
+++ b/vcl/unx/source/gdi/pspgraphics.cxx
@@ -403,7 +403,7 @@ bool PspGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double /*fT
return false;
}
-bool PspGraphics::drawPolyLine( const basegfx::B2DPolygon&, const basegfx::B2DVector& /*rLineWidths*/, basegfx::B2DLineJoin /*eJoin*/)
+bool PspGraphics::drawPolyLine( const basegfx::B2DPolygon&, double /*fTranspareny*/, const basegfx::B2DVector& /*rLineWidths*/, basegfx::B2DLineJoin /*eJoin*/)
{
// TODO: a PS printer can draw B2DPolyLines almost directly
return false;
diff --git a/vcl/unx/source/gdi/salgdi.cxx b/vcl/unx/source/gdi/salgdi.cxx
index 15e391256344..ae21c3aa9f7b 100644
--- a/vcl/unx/source/gdi/salgdi.cxx
+++ b/vcl/unx/source/gdi/salgdi.cxx
@@ -1089,7 +1089,7 @@ SystemGraphicsData X11SalGraphics::GetGraphicsData() const
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// draw a poly-polygon
-bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rOrigPolyPoly, double fTransparency)
+bool X11SalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rOrigPolyPoly, double fTransparency )
{
// nothing to do for empty polypolygons
const int nOrigPolyCount = rOrigPolyPoly.count();
@@ -1203,7 +1203,7 @@ bool X11SalGraphics::drawFilledTrapezoids( const ::basegfx::B2DTrapezoid* pB2DTr
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin eLineJoin)
+bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, double fTransparency, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin eLineJoin)
{
const bool bIsHairline = (rLineWidth.getX() == rLineWidth.getY()) && (rLineWidth.getX() <= 1.2);
@@ -1239,7 +1239,7 @@ bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const :
// draw tesselation result
const int nTrapCount = aB2DTrapVector.size();
- const bool bDrawOk = drawFilledTrapezoids( &aB2DTrapVector[0], nTrapCount, 0.0 );
+ const bool bDrawOk = drawFilledTrapezoids( &aB2DTrapVector[0], nTrapCount, fTransparency );
// restore the original brush GC
nBrushColor_ = aKeepBrushColor;
@@ -1271,7 +1271,7 @@ bool X11SalGraphics::drawPolyLine(const ::basegfx::B2DPolygon& rPolygon, const :
for( int nPolyIdx = 0; nPolyIdx < nPolyCount; ++nPolyIdx )
{
const ::basegfx::B2DPolyPolygon aOnePoly( aAreaPolyPoly.getB2DPolygon( nPolyIdx ) );
- bDrawOk = drawPolyPolygon( aOnePoly, 0.0 );
+ bDrawOk = drawPolyPolygon( aOnePoly, fTransparency );
if( !bDrawOk )
break;
}
diff --git a/vcl/unx/source/gdi/salprnpsp.cxx b/vcl/unx/source/gdi/salprnpsp.cxx
index 3491622f783c..90c6a196143e 100644
--- a/vcl/unx/source/gdi/salprnpsp.cxx
+++ b/vcl/unx/source/gdi/salprnpsp.cxx
@@ -694,6 +694,18 @@ BOOL PspSalInfoPrinter::SetData(
pKey = aData.m_pParser->getKey( String( RTL_CONSTASCII_USTRINGPARAM( "PageSize" ) ) );
pValue = pKey ? pKey->getValueCaseInsensitive( aPaper ) : NULL;
+
+ // some PPD files do not specify the standard paper names (e.g. C5 instead of EnvC5)
+ // try to find the correct paper anyway using the size
+ if( pKey && ! pValue && pJobSetup->mePaperFormat != PAPER_USER )
+ {
+ PaperInfo aInfo( pJobSetup->mePaperFormat );
+ aPaper = aData.m_pParser->matchPaper(
+ TenMuToPt( aInfo.getWidth() ),
+ TenMuToPt( aInfo.getHeight() ) );
+ pValue = pKey->getValueCaseInsensitive( aPaper );
+ }
+
if( ! ( pKey && pValue && aData.m_aContext.setValue( pKey, pValue, false ) == pValue ) )
return FALSE;
}
diff --git a/vcl/unx/source/printergfx/printerjob.cxx b/vcl/unx/source/printergfx/printerjob.cxx
index 3e885d8af5b4..5e18849b8dfe 100644
--- a/vcl/unx/source/printergfx/printerjob.cxx
+++ b/vcl/unx/source/printergfx/printerjob.cxx
@@ -284,7 +284,8 @@ removeSpoolDir (const rtl::OUString& rSpoolDir)
nChar = psp::appendStr ("rm -rf ", pSystem);
nChar += psp::appendStr (aSysPathByte.getStr(), pSystem + nChar);
- system (pSystem);
+ if (system (pSystem) == -1)
+ OSL_ENSURE( 0, "psprint: couldn't remove spool directory" );
}
/* creates a spool directory with a "pidgin random" value based on
diff --git a/vcl/win/inc/salgdi.h b/vcl/win/inc/salgdi.h
index 4b97eeb98c0b..b1bfcbee96f4 100644
--- a/vcl/win/inc/salgdi.h
+++ b/vcl/win/inc/salgdi.h
@@ -194,7 +194,7 @@ protected:
virtual void drawPolygon( ULONG nPoints, const SalPoint* pPtAry );
virtual void drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry );
virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
- virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin);
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency, const ::basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin );
virtual sal_Bool drawPolyLineBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry );
virtual sal_Bool drawPolygonBezier( ULONG nPoints, const SalPoint* pPtAry, const BYTE* pFlgAry );
virtual sal_Bool drawPolyPolygonBezier( sal_uInt32 nPoly, const sal_uInt32* pPoints, const SalPoint* const* pPtAry, const BYTE* const* pFlgAry );
diff --git a/vcl/win/source/app/salinfo.cxx b/vcl/win/source/app/salinfo.cxx
index b7ea81d313ae..14cb5d63437a 100644
--- a/vcl/win/source/app/salinfo.cxx
+++ b/vcl/win/source/app/salinfo.cxx
@@ -160,7 +160,8 @@ bool WinSalSystem::initMonitors()
std::hash_map< rtl::OUString, int, rtl::OUStringHash > aDeviceStringCount;
while( EnumDisplayDevicesW( NULL, nDevice++, &aDev, 0 ) )
{
- if( (aDev.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) == 0 ) // sort out non monitors
+ if( (aDev.StateFlags & DISPLAY_DEVICE_ACTIVE)
+ && !(aDev.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) ) // sort out non/disabled monitors
{
aDev.DeviceName[31] = 0;
aDev.DeviceString[127] = 0;
diff --git a/vcl/win/source/gdi/salgdi_gdiplus.cxx b/vcl/win/source/gdi/salgdi_gdiplus.cxx
index c621d81dce40..88efbb29d30a 100644
--- a/vcl/win/source/gdi/salgdi_gdiplus.cxx
+++ b/vcl/win/source/gdi/salgdi_gdiplus.cxx
@@ -189,14 +189,15 @@ bool WinSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly
return true;
}
-bool WinSalGraphics::drawPolyLine(const basegfx::B2DPolygon& rPolygon, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin eLineJoin)
+bool WinSalGraphics::drawPolyLine( const basegfx::B2DPolygon& rPolygon, double fTransparency, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin eLineJoin )
{
const sal_uInt32 nCount(rPolygon.count());
if(mbPen && nCount)
{
Gdiplus::Graphics aGraphics(mhDC);
- Gdiplus::Color aTestColor(255, SALCOLOR_RED(maLineColor), SALCOLOR_GREEN(maLineColor), SALCOLOR_BLUE(maLineColor));
+ const sal_uInt8 aTrans = (sal_uInt8)basegfx::fround( 255 * (1.0 - fTransparency) );
+ Gdiplus::Color aTestColor(aTrans, SALCOLOR_RED(maLineColor), SALCOLOR_GREEN(maLineColor), SALCOLOR_BLUE(maLineColor));
Gdiplus::Pen aTestPen(aTestColor, Gdiplus::REAL(rLineWidths.getX()));
Gdiplus::GraphicsPath aPath;
bool bNoLineJoin(false);
diff --git a/writerfilter/inc/dmapper/DomainMapper.hxx b/writerfilter/inc/dmapper/DomainMapper.hxx
index 76d1fb046354..d119e0e84312 100644
--- a/writerfilter/inc/dmapper/DomainMapper.hxx
+++ b/writerfilter/inc/dmapper/DomainMapper.hxx
@@ -62,6 +62,8 @@ namespace dmapper
class PropertyMap;
class DomainMapper_Impl;
+class ListsManager;
+class StyleSheetTable;
// different context types require different sprm handling (e.g. names)
enum SprmType
@@ -103,6 +105,7 @@ public:
virtual void endSectionGroup();
virtual void startParagraphGroup();
virtual void endParagraphGroup();
+ virtual void markLastParagraphInSection();
virtual void startCharacterGroup();
virtual void endCharacterGroup();
virtual void startShape( ::com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xShape );
@@ -131,6 +134,8 @@ public:
::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetCurrentTextRange();
::rtl::OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties );
+ boost::shared_ptr< ListsManager > GetListTable( );
+ boost::shared_ptr< StyleSheetTable > GetStyleSheetTable( );
private:
void handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext);
diff --git a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx
index 4dabea550a9d..1e6d46554c0c 100644
--- a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx
+++ b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx
@@ -208,6 +208,8 @@ public:
*/
virtual void endParagraphGroup() = 0;
+ virtual void markLastParagraphInSection( ) { };
+
/**
Receives start mark for group with the same character properties.
*/
diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx
index e067505b3b40..b8988110c59e 100644
--- a/writerfilter/source/dmapper/ConversionHelper.cxx
+++ b/writerfilter/source/dmapper/ConversionHelper.cxx
@@ -553,26 +553,104 @@ sal_Int16 ConvertNumberingType(sal_Int32 nNFC)
switch(nNFC)
{
case NS_ooxml::LN_Value_ST_NumberFormat_decimal:
- case 0: nRet = style::NumberingType::ARABIC; break;
+ case 0:
+ nRet = style::NumberingType::ARABIC;
+ break;
case NS_ooxml::LN_Value_ST_NumberFormat_upperRoman:
- case 1: nRet = style::NumberingType::ROMAN_UPPER; break;
+ case 1:
+ nRet = style::NumberingType::ROMAN_UPPER;
+ break;
case NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman:
- case 2: nRet = style::NumberingType::ROMAN_LOWER; break;
- case 3: nRet = style::NumberingType::CHARS_UPPER_LETTER_N; break;
- case 4: nRet = style::NumberingType::CHARS_LOWER_LETTER_N; break;
- case 5: nRet = style::NumberingType::ARABIC; break;//ORDINAL
+ case 2:
+ nRet = style::NumberingType::ROMAN_LOWER;
+ break;
+ case 3:
+ nRet = style::NumberingType::CHARS_UPPER_LETTER_N;
+ break;
+ case 4:
+ nRet = style::NumberingType::CHARS_LOWER_LETTER_N;
+ break;
+ case 5:
+ nRet = style::NumberingType::ARABIC;
+ break;//ORDINAL
case NS_ooxml::LN_Value_ST_NumberFormat_bullet:
case 23:
case 25:
nRet = style::NumberingType::CHAR_SPECIAL;
break;
- case 255: nRet = style::NumberingType::NUMBER_NONE; break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_none:
+ case 255:
+ nRet = style::NumberingType::NUMBER_NONE;
+ break;
case NS_ooxml::LN_Value_ST_NumberFormat_upperLetter:
nRet = style::NumberingType::CHARS_UPPER_LETTER;
- break;
+ break;
case NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter:
nRet = style::NumberingType::CHARS_LOWER_LETTER;
- break;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_iroha:
+ nRet = style::NumberingType::IROHA_HALFWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_irohaFullWidth:
+ nRet = style::NumberingType::IROHA_FULLWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_aiueo:
+ nRet = style::NumberingType::AIU_HALFWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_aiueoFullWidth:
+ nRet = style::NumberingType::AIU_FULLWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_hebrew2:
+ nRet = style::NumberingType::CHARS_HEBREW;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_thaiLetters:
+ nRet = style::NumberingType::CHARS_THAI;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_russianLower:
+ nRet = style::NumberingType::CHARS_CYRILLIC_LOWER_LETTER_RU;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_russianUpper:
+ nRet = style::NumberingType::CHARS_CYRILLIC_UPPER_LETTER_RU;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese:
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographEnclosedCircle:
+ nRet = style::NumberingType::CIRCLE_NUMBER;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographTraditional:
+ nRet = style::NumberingType::TIAN_GAN_ZH;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiac:
+ nRet = style::NumberingType::DI_ZI_ZH;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ganada:
+ nRet = style::NumberingType::HANGUL_SYLLABLE_KO;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_chosung:
+ nRet = style::NumberingType::HANGUL_JAMO_KO;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital:
+ case NS_ooxml::LN_Value_ST_NumberFormat_koreanCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital2:
+ nRet = style::NumberingType::NUMBER_HANGUL_KO;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographLegalTraditional:
+ nRet = style::NumberingType::NUMBER_UPPER_ZH_TW;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_arabicAlpha:
+ nRet = style::NumberingType::CHARS_ARABIC;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_hindiVowels:
+ nRet = style::NumberingType::CHARS_NEPALI;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_japaneseLegal:
+ nRet = style::NumberingType::NUMBER_TRADITIONAL_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_chineseCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_japaneseCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographDigital:
+ nRet = style::NumberingType::NUMBER_LOWER_ZH;
+ break;
default: nRet = style::NumberingType::ARABIC;
}
/* TODO: Lots of additional values are available - some are supported in the I18 framework
@@ -581,53 +659,27 @@ sal_Int16 ConvertNumberingType(sal_Int32 nNFC)
NS_ooxml::LN_Value_ST_NumberFormat_ordinalText = 91684;
NS_ooxml::LN_Value_ST_NumberFormat_hex = 91685;
NS_ooxml::LN_Value_ST_NumberFormat_chicago = 91686;
- NS_ooxml::LN_Value_ST_NumberFormat_ideographDigital = 91687;
- NS_ooxml::LN_Value_ST_NumberFormat_japaneseCounting = 91688;
- NS_ooxml::LN_Value_ST_NumberFormat_aiueo = 91689;
- NS_ooxml::LN_Value_ST_NumberFormat_iroha = 91690;
NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth = 91691;
NS_ooxml::LN_Value_ST_NumberFormat_decimalHalfWidth = 91692;
- NS_ooxml::LN_Value_ST_NumberFormat_japaneseLegal = 91693;
NS_ooxml::LN_Value_ST_NumberFormat_japaneseDigitalTenThousand = 91694;
NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircle = 91695;
NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth2 = 91696;
- NS_ooxml::LN_Value_ST_NumberFormat_aiueoFullWidth = 91697;
- NS_ooxml::LN_Value_ST_NumberFormat_irohaFullWidth = 91698;
NS_ooxml::LN_Value_ST_NumberFormat_decimalZero = 91699;
- NS_ooxml::LN_Value_ST_NumberFormat_ganada = 91701;
- NS_ooxml::LN_Value_ST_NumberFormat_chosung = 91702;
NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedFullstop = 91703;
NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedParen = 91704;
- NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese = 91705;
- NS_ooxml::LN_Value_ST_NumberFormat_ideographEnclosedCircle = 91706;
- NS_ooxml::LN_Value_ST_NumberFormat_ideographTraditional = 91707;
- NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiac = 91708;
NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiacTraditional = 91709;
- NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCounting = 91710;
- NS_ooxml::LN_Value_ST_NumberFormat_ideographLegalTraditional = 91711;
NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCountingThousand = 91712;
NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseDigital = 91713;
- NS_ooxml::LN_Value_ST_NumberFormat_chineseCounting = 91714;
NS_ooxml::LN_Value_ST_NumberFormat_chineseLegalSimplified = 91715;
NS_ooxml::LN_Value_ST_NumberFormat_chineseCountingThousand = 91716;
- NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital = 91717;
- NS_ooxml::LN_Value_ST_NumberFormat_koreanCounting = 91718;
NS_ooxml::LN_Value_ST_NumberFormat_koreanLegal = 91719;
- NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital2 = 91720;
NS_ooxml::LN_Value_ST_NumberFormat_vietnameseCounting = 91721;
- NS_ooxml::LN_Value_ST_NumberFormat_russianLower = 91722;
- NS_ooxml::LN_Value_ST_NumberFormat_russianUpper = 91723;
- NS_ooxml::LN_Value_ST_NumberFormat_none = 91724;
NS_ooxml::LN_Value_ST_NumberFormat_numberInDash = 91725;
+ NS_ooxml::LN_Value_ST_NumberFormat_arabicAbjad:
NS_ooxml::LN_Value_ST_NumberFormat_hebrew1 = 91726;
- NS_ooxml::LN_Value_ST_NumberFormat_hebrew2 = 91727;
- NS_ooxml::LN_Value_ST_NumberFormat_arabicAlpha = 91728;
- NS_ooxml::LN_Value_ST_NumberFormat_arabicAbjad = 91729;
- NS_ooxml::LN_Value_ST_NumberFormat_hindiVowels = 91730;
NS_ooxml::LN_Value_ST_NumberFormat_hindiConsonants = 91731;
NS_ooxml::LN_Value_ST_NumberFormat_hindiNumbers = 91732;
NS_ooxml::LN_Value_ST_NumberFormat_hindiCounting = 91733;
- NS_ooxml::LN_Value_ST_NumberFormat_thaiLetters = 91734;
NS_ooxml::LN_Value_ST_NumberFormat_thaiNumbers = 91735;
NS_ooxml::LN_Value_ST_NumberFormat_thaiCounting = 91736;*/
return nRet;
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 81a02461971a..64af3a953eef 100755..100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -29,6 +29,7 @@
#include <dmapper/DomainMapper.hxx>
#include <DomainMapper_Impl.hxx>
#include <ConversionHelper.hxx>
+#include <NumberingManager.hxx>
#include <ThemeTable.hxx>
#include <ModelEventListener.hxx>
#include <MeasureHandler.hxx>
@@ -1627,7 +1628,9 @@ void DomainMapper::attribute(Id nName, Value & val)
case NS_ooxml::LN_CT_TabStop_val:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
if (sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_TabJc_clear)
+ {
m_pImpl->m_aCurrentTabStop.bDeleted = true;
+ }
else
{
m_pImpl->m_aCurrentTabStop.bDeleted = false;
@@ -1754,8 +1757,11 @@ void DomainMapper::attribute(Id nName, Value & val)
case NS_ooxml::LN_CT_Ind_hanging:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
if (m_pImpl->GetTopContext())
+ {
+ sal_Int32 nValue = ConversionHelper::convertTwipToMM100( nIntValue );
m_pImpl->GetTopContext()->Insert(
- PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( - ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( - nValue ));
+ }
break;
case NS_ooxml::LN_CT_Ind_firstLine:
/* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
@@ -2250,20 +2256,26 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
/* WRITERFILTERSTATUS: comment: */
{
//convert the ListTable entry to a NumberingRules propery and apply it
- sal_Int32 nListId = m_pImpl->GetLFOTable()->GetListID( nIntValue );
- if(nListId >= 0)
+ ListsManager::Pointer pListTable = m_pImpl->GetListTable();
+ ListDef::Pointer pList = pListTable->GetList( nIntValue );
+ if( pList.get( ) )
{
- ListTablePtr pListTable = m_pImpl->GetListTable();
if( m_pImpl->IsStyleSheetImport() )
{
//style sheets cannot have a numbering rule attached
StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
- pStyleSheetPropertyMap->SetListId( nListId );
+ pStyleSheetPropertyMap->SetListId( nIntValue );
}
else
- rContext->Insert( PROP_NUMBERING_RULES, true,
- uno::makeAny(pListTable->GetNumberingRules(nListId)));
- //TODO: Merge overwrittern numbering levels from LFO table
+ {
+ uno::Any aRules = uno::makeAny( pList->GetNumberingRules( ) );
+ rContext->Insert( PROP_NUMBERING_RULES, true, aRules );
+ }
+ }
+ else if ( !m_pImpl->IsStyleSheetImport( ) )
+ {
+ rtl::OUString sNone;
+ rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny( sNone ) );
}
}
break;
@@ -3926,7 +3938,7 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny(
- m_pImpl->GetListTable( )->GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
+ ListDef::GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
if( pStyleSheetProperties && pStyleSheetProperties->GetListLevel() >= 0 )
rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
@@ -4111,9 +4123,6 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
/* WRITERFILTERSTATUS: done: 0, planned: 4, spent: 0 */
case NS_ooxml::LN_object:
{
-#if DEBUG
- clog << "DomainMapper: LN_object" << endl;
-#endif
writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
if( pProperties.get( ) )
{
@@ -4153,10 +4162,6 @@ void DomainMapper::sprm( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmTyp
case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
/* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
break;
- case NS_ooxml::LN_CT_Lvl_pStyle:
- /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
- //TODO: numbering style should apply current numbering level - not yet supported
- break;
default:
{
#ifdef DEBUG_DOMAINMAPPER
@@ -4247,38 +4252,6 @@ void DomainMapper::startParagraphGroup()
-----------------------------------------------------------------------*/
void DomainMapper::endParagraphGroup()
{
- //handle unprocessed deferred breaks
- PropertyMapPtr pParaProperties = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
- if( pParaProperties->hasEmptyPropertyValues() )
- {
- PropertyMap::const_iterator aIter = pParaProperties->find(PropertyDefinition( PROP_BREAK_TYPE , false ) );
- if( aIter != pParaProperties->end() )
- {
- style::BreakType eType;
- aIter->second >>= eType;
- bool bPage = false;
- bool bColumn = false;
- if( eType == style::BreakType_PAGE_BEFORE )
- bPage = true;
- else if( eType == style::BreakType_COLUMN_BEFORE )
- bColumn = true;
-
- if( bPage || bColumn )
- {
- try
- {
- uno::Reference< beans::XPropertySet > xRangeProperties( m_pImpl->GetTopTextAppend()->getEnd(), uno::UNO_QUERY_THROW );
- xRangeProperties->setPropertyValue(
- PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_BREAK_TYPE),
- uno::makeAny( bPage ? style::BreakType_PAGE_BEFORE : style::BreakType_COLUMN_BEFORE));
- }
- catch( const uno::Exception& )
- {
- }
- }
- }
- }
-
m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
m_pImpl->getTableManager().endParagraphGroup();
//frame conversion has to be executed after table conversion
@@ -4288,6 +4261,14 @@ void DomainMapper::endParagraphGroup()
#endif
}
+void DomainMapper::markLastParagraphInSection( )
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element( "markLastParagraphInSection" );
+#endif
+ m_pImpl->SetIsLastParagraphInSection( true );
+}
+
void DomainMapper::startShape( uno::Reference< drawing::XShape > xShape )
{
#ifdef DEBUG_DOMAINMAPPER
@@ -4590,9 +4571,12 @@ void DomainMapper::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
}
break;
case NS_rtf::LN_LFOTABLE:
- /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
-
- ref->resolve( *m_pImpl->GetLFOTable() );
+ {
+ m_pImpl->GetListTable( )->SetLFOImport( true );
+ ref->resolve( *m_pImpl->GetListTable() );
+ m_pImpl->GetListTable( )->CreateNumberingRules( );
+ m_pImpl->GetListTable( )->SetLFOImport( false );
+ }
break;
case NS_ooxml::LN_THEMETABLE:
ref->resolve ( *m_pImpl->GetThemeTable() );
@@ -4619,6 +4603,7 @@ void DomainMapper::substream(Id rName, ::writerfilter::Reference<Stream>::Pointe
dmapper_logger->startElement("substream");
#endif
+ m_pImpl->appendTableManager( );
m_pImpl->getTableManager().startLevel();
//->debug
@@ -4688,6 +4673,7 @@ void DomainMapper::substream(Id rName, ::writerfilter::Reference<Stream>::Pointe
}
m_pImpl->getTableManager().endLevel();
+ m_pImpl->popTableManager( );
#ifdef DEBUG_DOMAINMAPPER
dmapper_logger->endElement("substream");
@@ -4854,6 +4840,7 @@ com::sun::star::style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int
{
case 0:
case 4: // bar not supported
+ case 5: // num not supported
return com::sun::star::style::TabAlign_LEFT;
case 1:
return com::sun::star::style::TabAlign_CENTER;
@@ -4861,8 +4848,6 @@ com::sun::star::style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int
return com::sun::star::style::TabAlign_RIGHT;
case 3:
return com::sun::star::style::TabAlign_DECIMAL;
- default:
- return com::sun::star::style::TabAlign_DEFAULT;
}
return com::sun::star::style::TabAlign_LEFT;
}
@@ -4902,10 +4887,6 @@ uno::Reference < lang::XMultiServiceFactory > DomainMapper::GetTextFactory() con
/*-- 12.11.2007 10:41:01---------------------------------------------------
-----------------------------------------------------------------------*/
-void DomainMapper::AddListIDToLFOTable( sal_Int32 nAbstractNumId )
-{
- m_pImpl->GetLFOTable()->AddListID( nAbstractNumId );
-}
/*-- 31.01.2008 18:19:44---------------------------------------------------
-----------------------------------------------------------------------*/
@@ -4923,5 +4904,15 @@ uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange()
return pStyleSheets->getOrCreateCharStyle( rCharProperties );
}
+ListsManager::Pointer DomainMapper::GetListTable( )
+{
+ return m_pImpl->GetListTable( );
+}
+
+StyleSheetTablePtr DomainMapper::GetStyleSheetTable( )
+{
+ return m_pImpl->GetStyleSheetTable( );
+}
+
} //namespace dmapper
} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 4d9a9bd83c35..c6d347a37281 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -80,6 +80,7 @@
#if DEBUG
#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/style/TabStop.hpp>
#endif
#include <map>
@@ -401,7 +402,7 @@ DomainMapper_Impl::DomainMapper_Impl(
m_bIsPageBreakDeferred( false ),
m_bIsInShape( false ),
m_bShapeContextAdded( false ),
- m_TableManager( eDocumentType == DOCUMENT_OOXML ),
+ m_pLastSectionContext( ),
m_nCurrentTabStopIndex( 0 ),
m_sCurrentParaStyleId(),
m_bInStyleSheetImport( false ),
@@ -409,8 +410,11 @@ DomainMapper_Impl::DomainMapper_Impl(
m_bLineNumberingSet( false ),
m_bIsInFootnoteProperties( true ),
m_bIsCustomFtnMark( false ),
- m_bIsParaChange( false )
+ m_bIsParaChange( false ),
+ m_bParaChanged( false ),
+ m_bIsLastParaInSection( false )
{
+ appendTableManager( );
GetBodyText();
uno::Reference< text::XTextAppend > xBodyTextAppend = uno::Reference< text::XTextAppend >( m_xBodyText, uno::UNO_QUERY );
m_aTextAppendStack.push(xBodyTextAppend);
@@ -419,13 +423,18 @@ DomainMapper_Impl::DomainMapper_Impl(
uno::Reference< text::XTextAppendAndConvert > xBodyTextAppendAndConvert( m_xBodyText, uno::UNO_QUERY );
TableDataHandler_t::Pointer_t pTableHandler
(new DomainMapperTableHandler(xBodyTextAppendAndConvert, *this));
- m_TableManager.setHandler(pTableHandler);
+ getTableManager( ).setHandler(pTableHandler);
+
+ getTableManager( ).startLevel();
}
/*-- 01.09.2006 10:22:28---------------------------------------------------
-----------------------------------------------------------------------*/
DomainMapper_Impl::~DomainMapper_Impl()
{
+ RemoveLastParagraph( );
+ getTableManager( ).endLevel();
+ popTableManager( );
}
/*-------------------------------------------------------------------------
@@ -479,6 +488,28 @@ void DomainMapper_Impl::SetDocumentSettingsProperty( const ::rtl::OUString& rPro
}
}
}
+
+void DomainMapper_Impl::RemoveLastParagraph( )
+{
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ try
+ {
+ uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursor();
+ xCursor->gotoEnd(false);
+ xCursor->goLeft( 1, true );
+ xCursor->setString(::rtl::OUString());
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ }
+}
+
+void DomainMapper_Impl::SetIsLastParagraphInSection( bool bIsLast )
+{
+ m_bIsLastParaInSection = bIsLast;
+}
+
/*-------------------------------------------------------------------------
-----------------------------------------------------------------------*/
@@ -529,6 +560,12 @@ void DomainMapper_Impl::PushListProperties(PropertyMapPtr pListProperties)
void DomainMapper_Impl::PopProperties(ContextType eId)
{
OSL_ENSURE(!m_aPropertyStacks[eId].empty(), "section stack already empty");
+
+ if ( eId == CONTEXT_SECTION )
+ {
+ m_pLastSectionContext = m_aPropertyStacks[eId].top( );
+ }
+
m_aPropertyStacks[eId].pop();
m_aContextStack.pop();
if(!m_aContextStack.empty() && !m_aPropertyStacks[m_aContextStack.top()].empty())
@@ -663,7 +700,7 @@ void DomainMapper_Impl::IncorporateTabStop( const DeletableTabStop & rTabStop )
-----------------------------------------------------------------------*/
uno::Sequence< style::TabStop > DomainMapper_Impl::GetCurrentTabStopAndClear()
{
- uno::Sequence< style::TabStop > aRet( m_aCurrentTabStops.size() );
+ uno::Sequence< style::TabStop > aRet( sal_Int32( m_aCurrentTabStops.size() ) );
style::TabStop* pArray = aRet.getArray();
::std::vector<DeletableTabStop>::const_iterator aIt = m_aCurrentTabStops.begin();
::std::vector<DeletableTabStop>::const_iterator aEndIt = m_aCurrentTabStops.end();
@@ -716,11 +753,11 @@ uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId)
/*-------------------------------------------------------------------------
-----------------------------------------------------------------------*/
-ListTablePtr DomainMapper_Impl::GetListTable()
+ListsManager::Pointer DomainMapper_Impl::GetListTable()
{
if(!m_pListTable)
m_pListTable.reset(
- new ListTable( m_rDMapper, m_xTextFactory ));
+ new ListsManager( m_rDMapper, m_xTextFactory ));
return m_pListTable;
}
@@ -855,7 +892,7 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
dmapper_logger->attribute("isIgnor", m_TableManager.isIgnore());
#endif
- if(xTextAppend.is() && ! m_TableManager.isIgnore())
+ if(xTextAppend.is() && ! getTableManager( ).isIgnore())
{
try
{
@@ -1059,7 +1096,7 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
}
uno::Reference< text::XTextRange > xTextRange =
xTextAppend->finishParagraph( aProperties );
- m_TableManager.handle(xTextRange);
+ getTableManager( ).handle(xTextRange);
// Set the anchor of the objects to the created paragraph
while ( m_aAnchoredStack.size( ) > 0 && !m_bIsInShape )
@@ -1085,6 +1122,15 @@ void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
xCur->goLeft( 1 , true );
uno::Reference< text::XTextRange > xParaEnd( xCur, uno::UNO_QUERY );
CheckParaRedline( xParaEnd );
+
+ // Remove the last empty section paragraph if needed
+ if ( m_bIsLastParaInSection && !m_bParaChanged )
+ {
+ RemoveLastParagraph( );
+ m_bIsLastParaInSection = false;
+ }
+
+ m_bParaChanged = false;
}
if( !bKeepLastParagraphProperties )
rAppendContext.pLastParagraphProperties = pToBeSavedProperties;
@@ -1131,7 +1177,7 @@ util::DateTime lcl_DateStringToDateTime( const ::rtl::OUString& rDateTime )
void DomainMapper_Impl::appendTextPortion( const ::rtl::OUString& rString, PropertyMapPtr pPropertyMap )
{
uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if(xTextAppend.is() && ! m_TableManager.isIgnore())
+ if(xTextAppend.is() && ! getTableManager( ).isIgnore())
{
try
{
@@ -1139,8 +1185,9 @@ void DomainMapper_Impl::appendTextPortion( const ::rtl::OUString& rString, Prope
xTextAppend->appendTextPortion
(rString, pPropertyMap->GetPropertyValues());
CheckRedline( xTextRange );
+ m_bParaChanged = true;
- //m_TableManager.handle(xTextRange);
+ //getTableManager( ).handle(xTextRange);
}
catch(const lang::IllegalArgumentException& rEx)
{
@@ -1164,7 +1211,7 @@ void DomainMapper_Impl::appendTextContent(
{
uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( m_aTextAppendStack.top().xTextAppend, uno::UNO_QUERY );
OSL_ENSURE( xTextAppendAndConvert.is(), "trying to append a text content without XTextAppendAndConvert" );
- if(xTextAppendAndConvert.is() && ! m_TableManager.isIgnore())
+ if(xTextAppendAndConvert.is() && ! getTableManager( ).isIgnore())
{
try
{
@@ -1331,18 +1378,7 @@ void DomainMapper_Impl::PopPageHeaderFooter()
{
//header and footer always have an empty paragraph at the end
//this has to be removed
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- try
- {
- uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursor();
- xCursor->gotoEnd(false);
- xCursor->goLeft( 1, true );
- xCursor->setString(::rtl::OUString());
- }
- catch( const uno::Exception& rEx)
- {
- (void)rEx;
- }
+ RemoveLastParagraph( );
m_aTextAppendStack.pop();
}
/*-- 24.05.2007 14:22:28---------------------------------------------------
@@ -1396,9 +1432,6 @@ void DomainMapper_Impl::CreateRedline( uno::Reference< text::XTextRange > xRange
{
if ( pRedline.get( ) )
{
-#if DEBUG
- clog << "REDLINE: Writing redline: " << pRedline->m_nId << endl;
-#endif
try
{
::rtl::OUString sType;
@@ -1427,9 +1460,6 @@ void DomainMapper_Impl::CreateRedline( uno::Reference< text::XTextRange > xRange
}
catch( const uno::Exception & rEx )
{
-#if DEBUG
- clog << "REDLINE: error - " << rtl::OUStringToOString( rEx.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
-#endif
( void ) rEx;
OSL_ENSURE( false, "Exception in makeRedline" );
}
@@ -1514,9 +1544,6 @@ void DomainMapper_Impl::PopAnnotation()
void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape > xShape )
{
-#if DEBUG
- clog << "PushShapeContext" << endl;
-#endif
m_bIsInShape = true;
try
{
@@ -1553,10 +1580,6 @@ void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape
-----------------------------------------------------------------------*/
void DomainMapper_Impl::PopShapeContext()
{
-#if DEBUG
- clog << "PopShapeContext" << endl;
-#endif
-
if ( m_bShapeContextAdded )
{
m_aTextAppendStack.pop();
@@ -3640,16 +3663,10 @@ void DomainMapper_Impl::AddNewRedline( )
pNew->m_nToken = ooxml::OOXML_mod;
if ( !m_bIsParaChange )
{
-#if DEBUG
- clog << "REDLINE: Adding a new redline to stack" << endl;
-#endif
m_aRedlines.push_back( pNew );
}
else
{
-#if DEBUG
- clog << "REDLINE: Setting a new paragraph redline" << endl;
-#endif
m_pParaRedline.swap( pNew );
}
}
@@ -3708,9 +3725,6 @@ void DomainMapper_Impl::RemoveCurrentRedline( )
{
if ( m_aRedlines.size( ) > 0 )
{
-#if DEBUG
- clog << "REDLINE: Removing back redline" << endl;
-#endif
m_aRedlines.pop_back( );
}
}
@@ -3719,9 +3733,6 @@ void DomainMapper_Impl::ResetParaRedline( )
{
if ( m_pParaRedline.get( ) )
{
-#if DEBUG
- clog << "REDLINE: Cleaning the para redline" << endl;
-#endif
RedlineParamsPtr pEmpty;
m_pParaRedline.swap( pEmpty );
}
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index d5493440ea48..00881d45968f 100755..100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -45,8 +45,7 @@
#include <DomainMapperTableManager.hxx>
#include <PropertyMap.hxx>
#include <FontTable.hxx>
-#include <ListTable.hxx>
-#include <LFOTable.hxx>
+#include <NumberingManager.hxx>
#include <StyleSheetTable.hxx>
#include <SettingsTable.hxx>
#include <ThemeTable.hxx>
@@ -296,15 +295,15 @@ private:
_PageMar m_aPageMargins;
- DomainMapperTableManager m_TableManager;
+ // TableManagers are stacked: one for each stream to avoid any confusion
+ std::stack< boost::shared_ptr< DomainMapperTableManager > > m_aTableManagers;
//each context needs a stack of currently used attributes
FIB m_aFIB;
PropertyStack m_aPropertyStacks[NUMBER_OF_CONTEXTS];
ContextStack m_aContextStack;
FontTablePtr m_pFontTable;
- ListTablePtr m_pListTable;
- LFOTablePtr m_pLFOTable;
+ ListsManager::Pointer m_pListTable;
StyleSheetTablePtr m_pStyleSheetTable;
ThemeTablePtr m_pThemeTable;
SettingsTablePtr m_pSettingsTable;
@@ -312,6 +311,7 @@ private:
PropertyMapPtr m_pTopContext;
+ PropertyMapPtr m_pLastSectionContext;
::std::vector<DeletableTabStop> m_aCurrentTabStops;
sal_uInt32 m_nCurrentTabStopIndex;
@@ -333,6 +333,8 @@ private:
RedlineParamsPtr m_pParaRedline;
bool m_bIsParaChange;
+ bool m_bParaChanged;
+ bool m_bIsLastParaInSection;
//annotation import
uno::Reference< beans::XPropertySet > m_xAnnotationField;
@@ -355,6 +357,11 @@ public:
DomainMapper_Impl();
virtual ~DomainMapper_Impl();
+ SectionPropertyMap* GetLastSectionContext( )
+ {
+ return dynamic_cast< SectionPropertyMap* >( m_pLastSectionContext.get( ) );
+ }
+
::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > GetPageStyles();
::com::sun::star::uno::Reference< ::com::sun::star::text::XText > GetBodyText();
::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory > GetTextFactory() const
@@ -380,6 +387,9 @@ public:
void StartParaChange( );
void EndParaChange( );
+ void RemoveLastParagraph( );
+ void SetIsLastParagraphInSection( bool bIsLast );
+
void deferBreak( BreakType deferredBreakType );
bool isBreakDeferred( BreakType deferredBreakType );
void clearDeferredBreaks();
@@ -421,13 +431,7 @@ public:
m_pStyleSheetTable.reset(new StyleSheetTable( m_rDMapper, m_xTextDocument ));
return m_pStyleSheetTable;
}
- ListTablePtr GetListTable();
- LFOTablePtr GetLFOTable()
- {
- if(!m_pLFOTable)
- m_pLFOTable.reset( new LFOTable );
- return m_pLFOTable;
- }
+ ListsManager::Pointer GetListTable();
ThemeTablePtr GetThemeTable()
{
if(!m_pThemeTable)
@@ -494,7 +498,24 @@ public:
void AddBookmark( const ::rtl::OUString& rBookmarkName, const ::rtl::OUString& rId );
- DomainMapperTableManager& getTableManager() { return m_TableManager; }
+ DomainMapperTableManager& getTableManager()
+ {
+ boost::shared_ptr< DomainMapperTableManager > pMngr = m_aTableManagers.top();
+ return *pMngr.get( );
+ }
+
+ void appendTableManager( )
+ {
+ boost::shared_ptr< DomainMapperTableManager > pMngr(
+ new DomainMapperTableManager( m_eDocumentType == DOCUMENT_OOXML ) );
+ m_aTableManagers.push( pMngr );
+ }
+
+ void popTableManager( )
+ {
+ if ( m_aTableManagers.size( ) > 0 )
+ m_aTableManagers.pop( );
+ }
void SetLineNumbering( sal_Int32 nLnnMod, sal_Int32 nLnc, sal_Int32 ndxaLnn );
bool IsLineNumberingSet() const {return m_bLineNumberingSet;}
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index c8d94f8302c2..14a54c640626 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -1553,7 +1553,7 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b
}
// setting properties for all types
- xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ALTERNATIVE_TEXT ),
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_TITLE ),
uno::makeAny( m_pImpl->sAlternativeText ));
if( m_pImpl->bPositionProtected )
xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_POSITION_PROTECTED ),
diff --git a/writerfilter/source/dmapper/LFOTable.cxx b/writerfilter/source/dmapper/LFOTable.cxx
deleted file mode 100644
index 51ecafd2662e..000000000000
--- a/writerfilter/source/dmapper/LFOTable.cxx
+++ /dev/null
@@ -1,199 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-#include <LFOTable.hxx>
-#include <doctok/resourceids.hxx>
-#include <vector>
-
-namespace writerfilter {
-namespace dmapper
-{
-using namespace std;
-using namespace writerfilter;
-
-struct LFOLevel
-{
- sal_Int32 nIStartAt;
- sal_Int32 nFStartAt;
- sal_Int32 nFFormatting;
- ::rtl::OUString sILevel;
-
- LFOLevel() :
- nIStartAt(-1)
- ,nFStartAt(-1)
- ,nFFormatting(-1)
- {}
-};
-typedef ::boost::shared_ptr< LFOLevel > LFOLevelPtr;
-struct LFOEntry
-{
- sal_Int32 nListId;
- sal_Int32 nCLFOLevel;
- vector< LFOLevelPtr > aLFOLevels; //usually empty
-
- LFOEntry() :
- nListId(-1)
- ,nCLFOLevel(-1)
- {}
-};
-typedef ::boost::shared_ptr<LFOEntry> LFOEntryPtr;
-
-struct LFOTable_Impl
-{
- ::std::vector< LFOEntryPtr > m_aLFOEntries; //properties of each level
- LFOEntryPtr m_pCurrentEntry;
-
-};
-/*-- 27.06.2006 15:13:03---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-LFOTable::LFOTable() :
- m_pImpl( new LFOTable_Impl )
-{
-}
-/*-- 27.06.2006 15:13:03---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-LFOTable::~LFOTable()
-{
-}
-/*-- 27.06.2006 15:13:04---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void LFOTable::attribute(Id Name, Value & val)
-{
- OSL_ENSURE(m_pImpl->m_pCurrentEntry, "no current entry to write to");
- if(!m_pImpl->m_pCurrentEntry)
- return;
-
- int nIntValue = val.getInt();
- /* WRITERFILTERSTATUS: table: LFOTable_attributedata */
- switch( Name )
- {
-// case NS_rtf::LN_ISTD: break;//index of applied style
- case NS_rtf::LN_ISTARTAT:
- case NS_rtf::LN_ILVL:
- case NS_rtf::LN_FSTARTAT:
- case NS_rtf::LN_FFORMATTING:
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- if(m_pImpl->m_pCurrentEntry->aLFOLevels.size())
- {
- vector< LFOLevelPtr >::reverse_iterator aEndIter = m_pImpl->m_pCurrentEntry->aLFOLevels.rbegin();
- switch( Name )
- {
- case NS_rtf::LN_ISTARTAT:
- /* WRITERFILTERSTATUS:*/
- (*aEndIter)->nIStartAt = nIntValue;
- break;
- case NS_rtf::LN_ILVL:
- /* WRITERFILTERSTATUS:*/
- (*aEndIter)->sILevel = val.getString();
- break;
- case NS_rtf::LN_FSTARTAT:
- /* WRITERFILTERSTATUS:*/
- (*aEndIter)->nFStartAt = nIntValue;
- break;
- case NS_rtf::LN_FFORMATTING:
- /* WRITERFILTERSTATUS:*/
- (*aEndIter)->nFFormatting = nIntValue;
- break;
- default:;
- }
- }
- break;
- case NS_rtf::LN_LSID:
- /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nListId = nIntValue;
- break;
- case NS_rtf::LN_clfolvl:
- /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nCLFOLevel = nIntValue;
- break;
-#if 0
- case NS_rtf::LN_LFOLevel:
- /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties;
- if(m_pImpl->m_pCurrentEntry && (pProperties = val.getProperties()).get())
- {
- LFOLevelPtr pLevel( new LFOLevel );
- m_pImpl->m_pCurrentEntry->aLFOLevels.push_back(pLevel);
- }
- }
- break;
-#endif
- default:
- {
- OSL_ENSURE( false, "LFOTable::attribute: default statement");
- //---->debug
- int nVal = val.getInt();
- ++nVal;
- //<----debug
- }
- }
-}
-/*-- 27.06.2006 15:13:04---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void LFOTable::sprm(Sprm& )
-{
- OSL_ENSURE( false, "Which sprm should be handled here?");
-}
-/*-- 27.06.2006 15:13:04---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void LFOTable::entry(int, writerfilter::Reference<Properties>::Pointer_t ref)
-{
- //create a new LFO entry
- OSL_ENSURE( !m_pImpl->m_pCurrentEntry.get(), "current entry has to be NULL here");
- m_pImpl->m_pCurrentEntry.reset( new LFOEntry );
- ref->resolve(*this);
- //append it to the table
- m_pImpl->m_aLFOEntries.push_back( m_pImpl->m_pCurrentEntry );
- m_pImpl->m_pCurrentEntry = LFOEntryPtr();
-}
-/*-- 27.06.2006 15:13:05---------------------------------------------------
- 1 based access to the LFO table
- -----------------------------------------------------------------------*/
-sal_Int32 LFOTable::GetListID(sal_uInt32 nLFO)
-{
- sal_Int32 nRet = -1;
- if( nLFO > 0 && nLFO <= m_pImpl->m_aLFOEntries.size())
- nRet = m_pImpl->m_aLFOEntries[nLFO - 1]->nListId;
- return nRet;
-}
-/*-- 12.11.2007 10:31:23---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void LFOTable::AddListID( sal_Int32 nAbstractNumId )
-{
- LFOEntryPtr pNew( new LFOEntry );
- pNew->nListId = nAbstractNumId;
- m_pImpl->m_aLFOEntries.push_back( pNew );
-}
-
-}//namespace dmapper
-}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/ListTable.cxx b/writerfilter/source/dmapper/ListTable.cxx
deleted file mode 100644
index 36cb4d8bdb47..000000000000
--- a/writerfilter/source/dmapper/ListTable.cxx
+++ /dev/null
@@ -1,903 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-#include <ListTable.hxx>
-#include <dmapper/DomainMapper.hxx>
-#include <PropertyIds.hxx>
-#include <doctok/resourceids.hxx>
-#include <doctok/sprmids.hxx>
-#include <ooxml/resourceids.hxx>
-#include <ConversionHelper.hxx>
-#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
-#include <resourcemodel/WW8ResourceModel.hxx>
-#endif
-#include <com/sun/star/container/XIndexReplace.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/style/NumberingType.hpp>
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/PositionAndSpaceMode.hpp>
-#include <vector>
-
-#define NUMBERING_MAX_LEVELS 10
-namespace writerfilter {
-namespace dmapper
-{
-using namespace com::sun::star;
-/*-- 12.11.2007 11:38:57---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-class WRITERFILTER_DLLPRIVATE Numbering_numHdl : public Properties
-{
- ListTable& m_rListTable;
- sal_Int32 m_nAbstractNumId;
- ::rtl::OUString m_sNumId;
-public:
- Numbering_numHdl( ListTable& rListTable ) :
- m_rListTable( rListTable ),
- m_nAbstractNumId( -1 )
- {}
- virtual ~Numbering_numHdl();
-
- // Properties
- virtual void attribute(Id Name, Value & val);
- virtual void sprm(Sprm & sprm);
-
- sal_Int32 GetAbstractNumId() const { return m_nAbstractNumId;}
- sal_Int32 GetNumId() const { return m_sNumId.toInt32(); }
-
-};
-typedef boost::shared_ptr< Numbering_numHdl > Numbering_numHdlPtr;
-/*-- 12.11.2007 11:42:04---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-Numbering_numHdl::~Numbering_numHdl()
-{
-}
-/*-- 12.11.2007 11:42:22---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void Numbering_numHdl::attribute(Id nName, Value & rVal)
-{
- switch( nName )
- {
- case NS_ooxml::LN_CT_Num_numId:
- m_sNumId = rVal.getString();
- break;
- case NS_ooxml::LN_CT_NumLvl_ilvl :
- m_rListTable.setOverwriteLevel(m_nAbstractNumId, rVal.getInt());
- break;
- default:;
- }
-}
-/*-- 12.11.2007 11:42:22---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void Numbering_numHdl::sprm(Sprm & rSprm)
-{
- sal_uInt32 nSprmId = rSprm.getId();
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_Num_abstractNumId:
- {
- m_nAbstractNumId = rSprm.getValue()->getInt();
- }
- break;
- case NS_ooxml::LN_CT_Num_lvlOverride:
- {
- //contains a list override
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- pProperties->resolve(*this);
- m_rListTable.resetOverwrite();
- }
- case NS_ooxml::LN_CT_NumLvl_lvl:
- m_rListTable.sprm( rSprm );
- break;
- default:;
- }
-}
-/*-- 26.06.2006 13:14:29---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-class ListPropertyMap : public PropertyMap
-{
- friend class ListTable;
-
- sal_Int32 nIStartAt; //LN_ISTARTAT
- sal_Int32 nNFC; //LN_NFC
- sal_Int32 nJC; //LN_JC
- sal_Int32 nFLegal; //LN_FLEGAL
- sal_Int32 nFNoRestart; //LN_FNORESTART
- sal_Int32 nFPrev; //LN_FPREV
- sal_Int32 nFPrevSpace; //LN_FPREVSPACE
- sal_Int32 nFWord6; //LN_FWORD6
- ::rtl::OUString sRGBXchNums; //LN_RGBXCHNUMS
- sal_Int32 nXChFollow; //LN_IXCHFOLLOW
- ::rtl::OUString sBulletChar;
- sal_Int32 nTabstop;
-public:
- ListPropertyMap() :
- nIStartAt(-1)
- ,nNFC(-1)
- ,nJC(-1)
- ,nFLegal(-1)
- ,nFNoRestart(-1)
- ,nFPrev(-1)
- ,nFPrevSpace(-1)
- ,nFWord6(-1)
- ,nXChFollow(-1)
- ,nTabstop( 0 )
- {}
- ~ListPropertyMap(){}
-
- uno::Sequence< beans::PropertyValue > GetPropertyValuesList( PropertyValueVector_t& rCharStyleProperties );
-};
-/*-- 26.06.2006 13:44:57---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-#define MAKE_PROPVAL(NameId, Value) \
- beans::PropertyValue(aPropNameSupplier.GetName(NameId), 0, uno::makeAny(Value), beans::PropertyState_DIRECT_VALUE )
-
-uno::Sequence< beans::PropertyValue > ListPropertyMap::GetPropertyValuesList( PropertyValueVector_t& rCharStyleProperties )
-{
- const sal_Int16 aWWToUnoAdjust[] =
- {
- text::HoriOrientation::LEFT,
- text::HoriOrientation::CENTER,
- text::HoriOrientation::RIGHT,
- };
-
- PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
- PropertyValueVector_t aNumberingProperties;
-
- if( nIStartAt >= 0)
- aNumberingProperties.push_back( MAKE_PROPVAL(PROP_START_WITH, (sal_Int16)nIStartAt) );
-
- sal_Int16 nNumberFormat = ConversionHelper::ConvertNumberingType(nNFC);
- if( nNFC >= 0)
- aNumberingProperties.push_back( MAKE_PROPVAL(PROP_NUMBERING_TYPE, nNumberFormat ));
-
- if( nJC >= 0 && nJC <= sal::static_int_cast<sal_Int32>(sizeof(aWWToUnoAdjust) / sizeof(sal_Int16)) )
- aNumberingProperties.push_back( MAKE_PROPVAL(PROP_ADJUST, aWWToUnoAdjust[nJC]));
-
- // todo: this is not the bullet char
- if( nNumberFormat == style::NumberingType::CHAR_SPECIAL && sBulletChar.getLength() )
- aNumberingProperties.push_back( MAKE_PROPVAL(PROP_BULLET_CHAR, sBulletChar.copy(0,1)));
-
- aNumberingProperties.push_back( MAKE_PROPVAL( PROP_LISTTAB_STOP_POSITION, nTabstop ) );
-
- //TODO: handling of nFLegal?
- //TODO: nFNoRestart lower levels do not restart when higher levels are incremented, like:
- //1.
- //1.1
- //2.2
- //2.3
- //3.4
- //
-
- if( nFWord6 > 0) //Word 6 compatibility
- {
- if( nFPrev == 1)
- aNumberingProperties.push_back( MAKE_PROPVAL( PROP_PARENT_NUMBERING, (sal_Int16) NUMBERING_MAX_LEVELS ));
- //TODO: prefixing space nFPrevSpace; - has not been used in WW8 filter
- }
-
-// TODO: sRGBXchNums; array of inherited numbers
-
-// TODO: nXChFollow; following character 0 - tab, 1 - space, 2 - nothing
-// if(pProperties)
-// {
-
- _PropertyMap::const_iterator aMapIter = /*pProperties->*/begin();
- _PropertyMap::const_iterator aEndIter = /*pProperties->*/end();
- for( ; aMapIter != aEndIter; ++aMapIter )
- {
- switch( aMapIter->first.eId )
- {
- case PROP_ADJUST:
- case PROP_INDENT_AT:
- case PROP_FIRST_LINE_INDENT:
- case PROP_FIRST_LINE_OFFSET:
- case PROP_LEFT_MARGIN:
- aNumberingProperties.push_back(
- beans::PropertyValue( aPropNameSupplier.GetName( aMapIter->first.eId ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
- break;
- case PROP_CHAR_FONT_NAME:
- aNumberingProperties.push_back(
- beans::PropertyValue( aPropNameSupplier.GetName( PROP_BULLET_FONT_NAME ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
- break;
- default:
- {
- rCharStyleProperties.push_back(beans::PropertyValue( aPropNameSupplier.GetName( aMapIter->first.eId ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
- }
-
- }
- }
-// }
- uno::Sequence< beans::PropertyValue > aRet(aNumberingProperties.size());
- beans::PropertyValue* pValues = aRet.getArray();
- PropertyValueVector_t::const_iterator aIt = aNumberingProperties.begin();
- PropertyValueVector_t::const_iterator aEndIt = aNumberingProperties.end();
- for(sal_uInt32 nIndex = 0; aIt != aEndIt; ++aIt,++nIndex)
- {
- pValues[nIndex] = *aIt;
- }
- return aRet;
-}
-typedef boost::shared_ptr<ListPropertyMap> ListPropertyMapPtr;
-
-struct ListEntry
-{
- sal_Int32 nListId; //LN_LSID
- sal_Int32 nTPLC; //LN_TPLC
- ::rtl::OUString sRGISTD; //LN_RGISTD
- sal_Int32 nSimpleList; //LN_FSIMPLELIST
- sal_Int32 nRestart; //LN_FRESTARTHDN
- sal_Int32 nUnsigned; //LN_UNSIGNED26_2
- sal_Int32 nAbstractNumId;
-
- ::std::vector< ListPropertyMapPtr > aLevelProperties; //properties of each level
-
- ListPropertyMapPtr pCurrentProperties;
- uno::Reference< container::XIndexReplace > m_xNumRules;
-
- ListEntry();
-
-};
-typedef boost::shared_ptr<ListEntry> ListEntryPtr;
-/*-- 23.06.2006 13:58:51---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-ListEntry::ListEntry() :
- nListId(-1)
- ,nTPLC(-1)
- ,nSimpleList(-1)
- ,nRestart(-1)
- ,nUnsigned(-1)
- ,nAbstractNumId(-1)
-{
-}
-/*-- 23.06.2006 13:58:51---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-struct ListTable_Impl
-{
- DomainMapper& m_rDMapper;
- uno::Reference< lang::XMultiServiceFactory > m_xFactory;
-
- std::vector< ListEntryPtr > m_aListEntries;
- ListEntryPtr m_pCurrentEntry;
-
-
- ListTable_Impl(DomainMapper& rDMapper, uno::Reference< lang::XMultiServiceFactory > xFactory) :
- m_rDMapper( rDMapper )
- ,m_xFactory( xFactory )
- {}
-
- void AddLevel();
-};
-/*-- 26.06.2006 14:23:19---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void ListTable_Impl::AddLevel()
-{
- ListPropertyMapPtr pLevel( new ListPropertyMap );
- m_pCurrentEntry->pCurrentProperties = pLevel;
- m_pCurrentEntry->aLevelProperties.push_back(pLevel);
-}
-/*-- 23.06.2006 12:04:32---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-ListTable::ListTable(
- DomainMapper& rDMapper,
- const uno::Reference< lang::XMultiServiceFactory > xFactory) :
- m_pImpl( new ListTable_Impl(rDMapper, xFactory) ),
- m_nOverwriteListId( -1 ),
- m_nOverwriteLevel( -1 )
-{
-}
-/*-- 23.06.2006 12:04:33---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-ListTable::~ListTable()
-{
- delete m_pImpl;
-}
-/*-- 23.06.2006 12:04:33---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void ListTable::attribute(Id nName, Value & rVal)
-{
- OSL_ENSURE( m_pImpl->m_pCurrentEntry.get(), "current entry has to be set here");
- if(!m_pImpl->m_pCurrentEntry.get())
- return ;
- int nIntValue = rVal.getInt();
- /* WRITERFILTERSTATUS: table: ListTable_attributedata */
- switch(nName)
- {
- case NS_rtf::LN_RGBXCHNUMS:
- /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
- if(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
- m_pImpl->m_pCurrentEntry->pCurrentProperties->sRGBXchNums += rVal.getString();
- break;
- case NS_ooxml::LN_CT_LevelText_val:
- /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
- {
- //this strings contains the definition of the level
- //the level number is marked as %n
- //these numbers can be mixed randomly toghether with seperators pre- and suffixes
- //the Writer supports only a number of upper levels to show, separators is always a dot
- //and each level can have a prefix and a suffix
- if(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
- {
- m_pImpl->m_pCurrentEntry->pCurrentProperties->sBulletChar = rVal.getString();
- }
- }
- break;
-// case NS_rtf::LN_ISTD: break;
- case NS_rtf::LN_ISTARTAT:
- case NS_rtf::LN_NFC:
- case NS_rtf::LN_JC:
- case NS_rtf::LN_FLEGAL:
- case NS_rtf::LN_FNORESTART:
- case NS_rtf::LN_FIDENTSAV:
- case NS_rtf::LN_FCONVERTED:
- case NS_rtf::LN_FTENTATIVE:
- case NS_rtf::LN_IXCHFOLLOW:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- ApplyLevelValues( nName, nIntValue);
- break;
- case NS_rtf::LN_LSID:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nListId = nIntValue;
- break;
- case NS_rtf::LN_TPLC:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nTPLC = nIntValue;
- break;
- case NS_rtf::LN_RGISTD:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->sRGISTD += rVal.getString();
- break;
- case NS_rtf::LN_FSIMPLELIST:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nSimpleList = nIntValue;
- break;
- case NS_rtf::LN_fAutoNum:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nRestart = nIntValue;
- break;
- case NS_rtf::LN_fHybrid:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nUnsigned = nIntValue;
- break;
-
- case NS_rtf::LN_LISTLEVEL:
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- {
- //add a new level to the level vector and make it the current one
- m_pImpl->AddLevel();
-
- writerfilter::Reference<Properties>::Pointer_t pProperties;
- if((pProperties = rVal.getProperties()).get())
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_AbstractNum_abstractNumId:
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- {
- sal_Int32 nVal = rVal.getString().toInt32();
- m_pImpl->m_pCurrentEntry->nAbstractNumId = nVal;
- m_pImpl->m_pCurrentEntry->nListId = nVal;
- }
- break;
- case NS_ooxml::LN_CT_Ind_left:
- /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
- PROP_INDENT_AT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
- break;
- case NS_ooxml::LN_CT_Ind_hanging:
- /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
- PROP_FIRST_LINE_INDENT, true, uno::makeAny( - ConversionHelper::convertTwipToMM100( nIntValue ) ));
- break;
- case NS_ooxml::LN_CT_Ind_firstLine:
- /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
- PROP_FIRST_LINE_INDENT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
- break;
- case NS_ooxml::LN_CT_Lvl_ilvl: //overrides previous level - unsupported
- case NS_ooxml::LN_CT_Lvl_tplc: //template code - unsupported
- case NS_ooxml::LN_CT_Lvl_tentative: //marks level as unused in the document - unsupported
- break;
- case NS_ooxml::LN_CT_TabStop_pos:
- {
- //no paragraph attributes in ListTable char style sheets
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nTabstop = ConversionHelper::convertTwipToMM100( nIntValue );
- }
- break;
- default:
- {
-#if OSL_DEBUG_LEVEL > 0
- ::rtl::OString sMessage( "ListTable::attribute() - Id: ");
- sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
- sMessage += ::rtl::OString(" / 0x");
- sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
- sMessage += ::rtl::OString(" value: ");
- sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
- sMessage += ::rtl::OString(" / 0x");
- sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
- OSL_ENSURE( false, sMessage.getStr()); //
-#endif
- }
- }
-}
-/*-- 23.06.2006 12:04:33---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void ListTable::sprm(Sprm & rSprm)
-{
- //fill the attributes of the style sheet
- sal_uInt32 nSprmId = rSprm.getId();
- if( m_pImpl->m_pCurrentEntry.get() ||
- nSprmId == NS_ooxml::LN_CT_Numbering_abstractNum ||
- nSprmId == NS_ooxml::LN_CT_Numbering_num )
- {
- sal_Int32 nIntValue = rSprm.getValue()->getInt();
- /* WRITERFILTERSTATUS: table: ListTable_sprm */
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_Numbering_abstractNum:
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- {
- //create a new list entry
- OSL_ENSURE( !m_pImpl->m_pCurrentEntry.get(), "current entry has to be NULL here");
- m_pImpl->m_pCurrentEntry.reset( new ListEntry );
- pProperties->resolve( *this );
- //append it to the table
- m_pImpl->m_aListEntries.push_back( m_pImpl->m_pCurrentEntry );
- m_pImpl->m_pCurrentEntry = ListEntryPtr();
- }
- }
- break;
- case NS_ooxml::LN_CT_Numbering_num:
- /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- {
- Numbering_numHdlPtr pNumHdl( new Numbering_numHdl( *this ) );
- pProperties->resolve(*pNumHdl);
- //todo: is the order of numberings guaranteed?
- //sal_Int32 pNumhdl->GetNumId();
- m_pImpl->m_rDMapper.AddListIDToLFOTable( pNumHdl->GetAbstractNumId() );
- }
- }
- break;
- case NS_ooxml::LN_CT_AbstractNum_multiLevelType:
- /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
- break;
- case NS_rtf::LN_TPLC:
- /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
- m_pImpl->m_pCurrentEntry->nTPLC = nIntValue;
- break;
- case NS_ooxml::LN_CT_AbstractNum_lvl:
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- {
- m_pImpl->AddLevel();
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- pProperties->resolve(*this);
- }
- break;
-// not a useful number in ooxml
-// case NS_rtf::LN_LSID:
-// m_pImpl->m_pCurrentEntry->nListId = nIntValue;
-// break;
- case NS_rtf::LN_RGBXCHNUMS:
- /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
- break;
- case NS_rtf::LN_ISTARTAT:
- case NS_rtf::LN_NFC:
- case NS_rtf::LN_JC:
- case NS_rtf::LN_FLEGAL:
- case NS_rtf::LN_FNORESTART:
- case NS_rtf::LN_FIDENTSAV:
- case NS_rtf::LN_FCONVERTED:
- case NS_rtf::LN_FTENTATIVE:
- case NS_rtf::LN_IXCHFOLLOW:
- /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
- ApplyLevelValues( nSprmId, nIntValue );
- break;
- case NS_ooxml::LN_CT_Lvl_lvlText:
- case NS_ooxml::LN_CT_Lvl_rPr : //contains LN_EG_RPrBase_rFonts
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_NumLvl_lvl:
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- {
- // overwrite level
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_Lvl_lvlJc:
- {
- static sal_Int16 aWWAlignments[ ] =
- {
- text::HoriOrientation::LEFT,
- text::HoriOrientation::CENTER,
- text::HoriOrientation::RIGHT
- };
- m_pImpl->m_pCurrentEntry->pCurrentProperties->Insert(
- PROP_ADJUST, true, uno::makeAny( aWWAlignments[ nIntValue ] ) );
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- }
- break;
- case NS_ooxml::LN_CT_Lvl_pPr:
- case NS_ooxml::LN_CT_PPrBase_ind:
- /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
- {
- //todo: how to handle paragraph properties within numbering levels (except LeftIndent and FirstLineIndent)?
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_tabs:
- case NS_ooxml::LN_CT_Tabs_tab:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties.get())
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_Lvl_suff:
- /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
- //todo: currently unsupported suffix
- //can be: "none", "space", "tab"
- break;
- case NS_ooxml::LN_EG_RPrBase_rFonts: //contains font properties
- case NS_ooxml::LN_EG_RPrBase_color:
- case NS_ooxml::LN_EG_RPrBase_u:
- case NS_sprm::LN_CHps: // sprmCHps
- case NS_ooxml::LN_EG_RPrBase_lang:
- case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
- /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
- //no break!
- default:
- if(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
- {
- m_pImpl->m_rDMapper.PushListProperties( m_pImpl->m_pCurrentEntry->pCurrentProperties );
- m_pImpl->m_rDMapper.sprm( rSprm );
- m_pImpl->m_rDMapper.PopListProperties();
- }
- }
- }
-}
-/*-- 12.11.2007 09:36:09---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void ListTable::ApplyLevelValues( sal_Int32 nId, sal_Int32 nIntValue)
-{
- if(m_pImpl->m_pCurrentEntry->pCurrentProperties.get())
- switch(nId)
- {
- case NS_rtf::LN_ISTARTAT:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nIStartAt = nIntValue;
- break;
- case NS_rtf::LN_NFC:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nNFC = nIntValue;
- break;
- case NS_rtf::LN_JC:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nJC = nIntValue;
- break;
- case NS_rtf::LN_FLEGAL:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nFLegal = nIntValue;
- break;
- case NS_rtf::LN_FNORESTART:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nFNoRestart = nIntValue;
- break;
- case NS_rtf::LN_FIDENTSAV:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nFPrev = nIntValue;
- break;
- case NS_rtf::LN_FCONVERTED:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nFPrevSpace = nIntValue;
- break;
-#if 0
- case NS_rtf::LN_FWORD6:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nFWord6 = nIntValue;
- break;
-#endif
- case NS_rtf::LN_IXCHFOLLOW:
- /* WRITERFILTERSTATUS: */
- m_pImpl->m_pCurrentEntry->pCurrentProperties->nXChFollow = nIntValue;
- break;
- default:
- OSL_ENSURE( false, "this line should never be reached");
- }
-}
-/*-- 23.06.2006 12:04:33---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void ListTable::entry(int, writerfilter::Reference<Properties>::Pointer_t ref)
-{
-
- if( m_pImpl->m_rDMapper.IsOOXMLImport() )
- {
- ref->resolve(*this);
- }
- else
- {
- //create a new list entry
- OSL_ENSURE( !m_pImpl->m_pCurrentEntry.get(), "current entry has to be NULL here");
- m_pImpl->m_pCurrentEntry.reset( new ListEntry );
- ref->resolve(*this);
- //append it to the table
- m_pImpl->m_aListEntries.push_back( m_pImpl->m_pCurrentEntry );
- m_pImpl->m_pCurrentEntry = ListEntryPtr();
- }
-}
-/*-- 26.06.2006 10:27:55---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-sal_uInt32 ListTable::size() const
-{
- return m_pImpl->m_aListEntries.size();
-}
-
-rtl::OUString ListTable::GetStyleName( sal_Int32 nListId )
-{
- rtl::OUString sStyleName( rtl::OUString::createFromAscii( "WWNum" ) );
- sStyleName += rtl::OUString::valueOf( nListId + 1 );
-
- return sStyleName;
-}
-
-void ListTable::CreateNumberingRules( )
-{
- uno::Reference< container::XIndexReplace > xRet;
- std::vector< ListEntryPtr >::const_iterator aIt = m_pImpl->m_aListEntries.begin();
- std::vector< ListEntryPtr >::const_iterator aEndIt = m_pImpl->m_aListEntries.end();
-
- uno::Reference< container::XNameContainer > xStyles;
-
- try
- {
- uno::Reference< style::XStyleFamiliesSupplier > xFamilies( m_pImpl->m_xFactory, uno::UNO_QUERY_THROW );
- uno::Any oFamily = xFamilies->getStyleFamilies( )->getByName( rtl::OUString::createFromAscii( "NumberingStyles" ) );
-
- oFamily >>= xStyles;
- }
- catch ( const uno::Exception )
- {
- }
-
- for(; aIt != aEndIt; ++aIt)
- {
- if( !(*aIt)->m_xNumRules.is() && m_pImpl->m_xFactory.is() && xStyles.is( ) )
- {
- try
- {
- // Create the numbering style
- uno::Reference< beans::XPropertySet > xStyle (
- m_pImpl->m_xFactory->createInstance(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.NumberingStyle"))),
- uno::UNO_QUERY_THROW );
-
- rtl::OUString sStyleName = GetStyleName( ( *aIt )->nListId );
-#if DEBUG
- clog << "Creating numbering style: ";
- clog << rtl::OUStringToOString( sStyleName, RTL_TEXTENCODING_UTF8 ).getStr( );
- clog << endl;
-#endif
-
- xStyles->insertByName( sStyleName, makeAny( xStyle ) );
-
- uno::Any oStyle = xStyles->getByName( sStyleName );
- xStyle.set( oStyle, uno::UNO_QUERY_THROW );
-
- PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
- uno::Any aRules = xStyle->getPropertyValue( aPropNameSupplier.GetName( PROP_NUMBERING_RULES ) );
- aRules >>= ( *aIt )->m_xNumRules;
-
- //now fill the numbering levels appropriately
- ::std::vector< ListPropertyMapPtr >::const_iterator aIter = (*aIt)->aLevelProperties.begin();
- ::std::vector< ListPropertyMapPtr >::const_iterator aEnd = (*aIt)->aLevelProperties.end();
- sal_Int32 nLevel = 0;
- while(aIter != aEnd)
- {
- PropertyValueVector_t aCharStyleProperties;
- uno::Sequence< beans::PropertyValue> aValues = (*aIter)->GetPropertyValuesList(aCharStyleProperties);
- if( aCharStyleProperties.size() )
- {
- //create (or find) a character style containing the character attributes of the symbol
- //and apply it to the numbering level
- ::rtl::OUString sStyle = m_pImpl->m_rDMapper.getOrCreateCharStyle( aCharStyleProperties );
- aValues.realloc( aValues.getLength() + 1);
- aValues[aValues.getLength() - 1].Name = aPropNameSupplier.GetName( PROP_CHAR_STYLE_NAME );
- aValues[aValues.getLength() - 1].Value <<= sStyle;
- }
- //now parse the text to find %n from %1 to %nLevel+1
- //everything before the first % and the last %x is prefix and suffix
- ::rtl::OUString sLevelText( (*aIter)->sBulletChar );
- sal_Int32 nCurrentIndex = 0;
- sal_Int32 nFound = sLevelText.indexOf( '%', nCurrentIndex );
- if( nFound > 0 )
- {
- ::rtl::OUString sPrefix = sLevelText.copy( 0, nFound );
- aValues.realloc( aValues.getLength() + 1 );
- aValues[ aValues.getLength() - 1 ] = MAKE_PROPVAL(PROP_PREFIX, sPrefix);
- sLevelText = sLevelText.copy( nFound );
- }
- sal_Int32 nMinLevel = nLevel;
- //now the text should either be empty or start with %
- nFound = 0;
- while( nFound >= 0 )
- {
- if( sLevelText.getLength() > 1 )
- {
- sal_Unicode cLevel = sLevelText.getStr()[1];
- if( cLevel >= '1' && cLevel <= '9' )
- {
- if( cLevel - '1' < nMinLevel )
- nMinLevel = cLevel - '1';
- //remove first char - next char is removed later
- sLevelText = sLevelText.copy( 1 );
- }
- }
- //remove old '%' or number
- sLevelText = sLevelText.copy( 1 );
- nCurrentIndex = 0;
- nFound = sLevelText.indexOf( '%', nCurrentIndex );
- //remove the text before the next %
- if(nFound > 0)
- sLevelText = sLevelText.copy( nFound -1 );
- }
- if( nMinLevel < nLevel )
- {
- aValues.realloc( aValues.getLength() + 1);
- aValues[ aValues.getLength() - 1 ] =
- MAKE_PROPVAL(PROP_PARENT_NUMBERING, sal_Int16( nLevel - nMinLevel + 1));
- }
- aValues.realloc( aValues.getLength() + 1);
- aValues[ aValues.getLength() - 1 ] = MAKE_PROPVAL(PROP_SUFFIX, sLevelText);
-
- aValues.realloc( aValues.getLength() + 1);
- aValues[ aValues.getLength() - 1 ] = MAKE_PROPVAL( PROP_POSITION_AND_SPACE_MODE,
- sal_Int16( text::PositionAndSpaceMode::LABEL_ALIGNMENT ) );
-
-#if DEBUG
- clog << endl << "Numbering rule properties - " << nLevel << endl;
- for ( sal_Int32 i = 0, len = aValues.getLength( ); i < len; i++ )
- {
- beans::PropertyValue aVal = aValues[i];
- clog << " " << rtl::OUStringToOString( aVal.Name, RTL_TEXTENCODING_UTF8 ).getStr( );
- clog << ": ";
- rtl::OUString sVal;
- sal_Int32 nVal;
- if ( aVal.Value >>= sVal )
- {
- clog << rtl::OUStringToOString( sVal, RTL_TEXTENCODING_UTF8 ).getStr( );
- }
- else if ( aVal.Value >>= nVal )
- {
- clog << nVal;
- }
- clog << endl;
- }
-#endif
-
- (*aIt)->m_xNumRules->replaceByIndex(nLevel, uno::makeAny(aValues));
- ++aIter;
- ++nLevel;
- }
-
- // Create the numbering style for these rules
- rtl::OUString sNumRulesName = aPropNameSupplier.GetName( PROP_NUMBERING_RULES );
- xStyle->setPropertyValue(
- sNumRulesName,
- uno::makeAny( ( *aIt )->m_xNumRules ) );
- }
- catch( const uno::Exception& rEx)
- {
- (void)rEx;
- OSL_ENSURE( false, "ListTable::CreateNumberingRules");
- }
- }
- }
-}
-
-/*-- 26.06.2006 10:33:56---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-uno::Reference< container::XIndexReplace > ListTable::GetNumberingRules(sal_Int32 nListId)
-{
- uno::Reference< container::XIndexReplace > xRet;
- std::vector< ListEntryPtr >::const_iterator aIt = m_pImpl->m_aListEntries.begin();
- std::vector< ListEntryPtr >::const_iterator aEndIt = m_pImpl->m_aListEntries.end();
- for(; aIt != aEndIt; ++aIt)
- {
- if((*aIt)->nListId == nListId)
- {
- xRet = (*aIt)->m_xNumRules;
- break;
- }
- }
- return xRet;
-}
-/*-- 19.11.2007 13:25:32---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void ListTable::setOverwriteLevel(sal_Int32 nAbstractNumId, sal_Int32 nLevel)
-{
- m_nOverwriteListId = nAbstractNumId;
- m_nOverwriteLevel = nLevel;
- OSL_ENSURE(!m_pImpl->m_pCurrentEntry.get(), "where to put the overwrite level");
- std::vector< ListEntryPtr >::const_iterator aIt = m_pImpl->m_aListEntries.begin();
- std::vector< ListEntryPtr >::const_iterator aEndIt = m_pImpl->m_aListEntries.end();
- for(; aIt != aEndIt; ++aIt)
- {
- if( (*aIt)->nListId == nAbstractNumId )
- {
- m_pImpl->m_pCurrentEntry = *aIt;
- break;
- }
- }
- OSL_ENSURE( m_pImpl->m_pCurrentEntry.get(), "list not found");
-}
-/*-- 19.11.2007 13:25:32---------------------------------------------------
-
- -----------------------------------------------------------------------*/
-void ListTable::resetOverwrite()
-{
- m_nOverwriteListId = -1;
- m_nOverwriteLevel = -1;
- m_pImpl->m_pCurrentEntry.reset();
-}
-
-}//namespace dmapper
-}//namespace writerfilter
-
diff --git a/writerfilter/source/dmapper/ListTable.hxx b/writerfilter/source/dmapper/ListTable.hxx
deleted file mode 100644
index b7db225fb9f4..000000000000
--- a/writerfilter/source/dmapper/ListTable.hxx
+++ /dev/null
@@ -1,89 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 INCLUDED_LISTTABLE_HXX
-#define INCLUDED_LISTTABLE_HXX
-
-#include <WriterFilterDllApi.hxx>
-#include <PropertyMap.hxx>
-#include <resourcemodel/WW8ResourceModel.hxx>
-
-namespace com{ namespace sun { namespace star {
- namespace text{
- class XTextDocument;
- }
- namespace container{
- class XIndexReplace;
- }
- namespace lang{
- class XMultiServiceFactory;
- }
-}}}
-
-namespace writerfilter {
-namespace dmapper
-{
-class DomainMapper;
-struct ListTable_Impl;
-class WRITERFILTER_DLLPRIVATE ListTable :
- public Properties,
- public Table
-{
- ListTable_Impl *m_pImpl;
- sal_Int32 m_nOverwriteListId;
- sal_Int32 m_nOverwriteLevel;
-
- void ApplyLevelValues( sal_Int32 nId, sal_Int32 nIntValue);
-public:
- ListTable(
- DomainMapper& rDMapper,
- const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory);
- virtual ~ListTable();
-
- // Properties
- virtual void attribute(Id Name, Value & val);
- virtual void sprm(Sprm & sprm);
-
- // Table
- virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
-
- // BinaryObj
-// virtual void data(const sal_Int8* buf, size_t len,
-// writerfilter::Reference<Properties>::Pointer_t ref);
-
- sal_uInt32 size() const;
- rtl::OUString GetStyleName( sal_Int32 nListId );
- void CreateNumberingRules( );
- ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace >
- GetNumberingRules(sal_Int32 nListId);
-
- void setOverwriteLevel(sal_Int32 nAbstractNumId, sal_Int32 nLevel);
- void resetOverwrite();
-};
-typedef boost::shared_ptr< ListTable > ListTablePtr;
-}}
-
-#endif //
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
new file mode 100644
index 000000000000..8cc031ea1d09
--- /dev/null
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -0,0 +1,1017 @@
+#include "ConversionHelper.hxx"
+#include "NumberingManager.hxx"
+#include "StyleSheetTable.hxx"
+#include "PropertyIds.hxx"
+
+#include <doctok/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+#include <ooxml/resourceids.hxx>
+
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/PositionAndSpaceMode.hpp>
+#include <com/sun/star/text/XChapterNumberingSupplier.hpp>
+
+#if DEBUG
+#include <stdio.h>
+#endif
+
+using namespace rtl;
+using namespace com::sun::star;
+
+#define MAKE_PROPVAL(NameId, Value) \
+ beans::PropertyValue(aPropNameSupplier.GetName(NameId), 0, uno::makeAny(Value), beans::PropertyState_DIRECT_VALUE )
+
+#define OUSTR_TO_C( x ) OUStringToOString( x, RTL_TEXTENCODING_UTF8 ).getStr( )
+
+#define NUMBERING_MAX_LEVELS 10
+
+
+namespace writerfilter {
+namespace dmapper {
+
+//--------------------------------------------------- Utility functions
+
+void lcl_printProperties( uno::Sequence< beans::PropertyValue > aProps )
+{
+ sal_Int32 nLen = aProps.getLength( );
+ for ( sal_Int32 i = 0; i < nLen; i++ )
+ {
+ uno::Any aValue = aProps[i].Value;
+ sal_Int32 nValue = 0;
+ OUString sValue;
+
+ if ( !( aValue >>= sValue ) && ( aValue >>= nValue ) )
+ sValue = OUString::valueOf( nValue );
+
+#if DEBUG
+ fprintf( stderr, "Property %s: %s\n",
+ OUSTR_TO_C( aProps[i].Name ),
+ OUSTR_TO_C( sValue ) );
+#endif
+ }
+}
+
+sal_Int32 lcl_findProperty( uno::Sequence< beans::PropertyValue > aProps, OUString sName )
+{
+ sal_Int32 i = 0;
+ sal_Int32 nLen = aProps.getLength( );
+ sal_Int32 nPos = -1;
+
+ while ( nPos == -1 && i < nLen )
+ {
+ if ( aProps[i].Name.equals( sName ) )
+ nPos = i;
+ else
+ i++;
+ }
+
+ return nPos;
+}
+
+void lcl_mergeProperties( uno::Sequence< beans::PropertyValue >& aSrc,
+ uno::Sequence< beans::PropertyValue >& aDst )
+{
+ for ( sal_Int32 i = 0, nSrcLen = aSrc.getLength( ); i < nSrcLen; i++ )
+ {
+ // Look for the same property in aDst
+ sal_Int32 nPos = lcl_findProperty( aDst, aSrc[i].Name );
+ if ( nPos >= 0 )
+ {
+ // Replace the property value by the one in aSrc
+ aDst[nPos] = aSrc[i];
+ }
+ else
+ {
+ // Simply add the new value
+ aDst.realloc( aDst.getLength( ) + 1 );
+ aDst[ aDst.getLength( ) - 1 ] = aSrc[i];
+ }
+ }
+}
+
+//-------------------------------------------- ListLevel implementation
+void ListLevel::SetValue( Id nId, sal_Int32 nValue )
+{
+ switch( nId )
+ {
+ case NS_rtf::LN_ISTARTAT:
+ m_nIStartAt = nValue;
+ break;
+ case NS_rtf::LN_NFC:
+ m_nNFC = nValue;
+ break;
+ case NS_rtf::LN_JC:
+ m_nJC = nValue;
+ break;
+ case NS_rtf::LN_FLEGAL:
+ m_nFLegal = nValue;
+ break;
+ case NS_rtf::LN_FNORESTART:
+ m_nFNoRestart = nValue;
+ break;
+ case NS_rtf::LN_FIDENTSAV:
+ m_nFPrev = nValue;
+ break;
+ case NS_rtf::LN_FCONVERTED:
+ m_nFPrevSpace = nValue;
+ break;
+#if 0
+ case NS_rtf::LN_FWORD6:
+ m_nFWord6 = nValue;
+ break;
+#endif
+ case NS_rtf::LN_IXCHFOLLOW:
+ m_nXChFollow = nValue;
+ break;
+ case NS_ooxml::LN_CT_TabStop_pos:
+ m_nTabstop = nValue;
+ break;
+ default:
+ OSL_ENSURE( false, "this line should never be reached");
+ }
+}
+
+sal_Int16 ListLevel::GetParentNumbering( OUString sText, sal_Int16 nLevel,
+ OUString& rPrefix, OUString& rSuffix )
+{
+ sal_Int16 nParentNumbering = nLevel;
+
+ //now parse the text to find %n from %1 to %nLevel+1
+ //everything before the first % and the last %x is prefix and suffix
+ OUString sLevelText( sText );
+ sal_Int32 nCurrentIndex = 0;
+ sal_Int32 nFound = sLevelText.indexOf( '%', nCurrentIndex );
+ if( nFound > 0 )
+ {
+ rPrefix = sLevelText.copy( 0, nFound );
+ sLevelText = sLevelText.copy( nFound );
+ }
+ sal_Int32 nMinLevel = nLevel;
+ //now the text should either be empty or start with %
+ nFound = sLevelText.getLength( ) > 1 ? 0 : -1;
+ while( nFound >= 0 )
+ {
+ if( sLevelText.getLength() > 1 )
+ {
+ sal_Unicode cLevel = sLevelText.getStr()[1];
+ if( cLevel >= '1' && cLevel <= '9' )
+ {
+ if( cLevel - '1' < nMinLevel )
+ nMinLevel = cLevel - '1';
+ //remove first char - next char is removed later
+ sLevelText = sLevelText.copy( 1 );
+ }
+ }
+ //remove old '%' or number
+ sLevelText = sLevelText.copy( 1 );
+ nCurrentIndex = 0;
+ nFound = sLevelText.indexOf( '%', nCurrentIndex );
+ //remove the text before the next %
+ if(nFound > 0)
+ sLevelText = sLevelText.copy( nFound -1 );
+ }
+ if( nMinLevel < nLevel )
+ {
+ nParentNumbering = sal_Int16( nLevel - nMinLevel + 1);
+ }
+
+ rSuffix = sLevelText;
+
+ return nParentNumbering;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetProperties( )
+{
+ uno::Sequence< beans::PropertyValue > aLevelProps = GetLevelProperties( );
+ if ( m_pParaStyle.get( ) )
+ {
+ // Merge with the paragraph properties
+ uno::Sequence< beans::PropertyValue > aParaProps = GetParaProperties( );
+ lcl_mergeProperties( aParaProps, aLevelProps );
+ }
+ return aLevelProps;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetCharStyleProperties( )
+{
+ PropertyValueVector_t rProperties;
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ _PropertyMap::const_iterator aMapIter = begin();
+ _PropertyMap::const_iterator aEndIter = end();
+ for( ; aMapIter != aEndIter; ++aMapIter )
+ {
+ switch( aMapIter->first.eId )
+ {
+ case PROP_ADJUST:
+ case PROP_INDENT_AT:
+ case PROP_FIRST_LINE_INDENT:
+ case PROP_FIRST_LINE_OFFSET:
+ case PROP_LEFT_MARGIN:
+ case PROP_CHAR_FONT_NAME:
+ // Do nothing: handled in the GetPropertyValues method
+ break;
+ default:
+ {
+ rProperties.push_back(
+ beans::PropertyValue(
+ aPropNameSupplier.GetName( aMapIter->first.eId ), 0,
+ aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ }
+ }
+ }
+
+ uno::Sequence< beans::PropertyValue > aRet( rProperties.size() );
+ beans::PropertyValue* pValues = aRet.getArray();
+ PropertyValueVector_t::const_iterator aIt = rProperties.begin();
+ PropertyValueVector_t::const_iterator aEndIt = rProperties.end();
+ for(sal_uInt32 nIndex = 0; aIt != aEndIt; ++aIt,++nIndex)
+ {
+ pValues[nIndex] = *aIt;
+ }
+ return aRet;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetLevelProperties( )
+{
+ const sal_Int16 aWWToUnoAdjust[] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT,
+ };
+
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyValueVector_t aNumberingProperties;
+
+ if( m_nIStartAt >= 0)
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_START_WITH, (sal_Int16)m_nIStartAt) );
+
+ sal_Int16 nNumberFormat = ConversionHelper::ConvertNumberingType(m_nNFC);
+ if( m_nNFC >= 0)
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_NUMBERING_TYPE, nNumberFormat ));
+
+ if( m_nJC >= 0 && m_nJC <= sal::static_int_cast<sal_Int32>(sizeof(aWWToUnoAdjust) / sizeof(sal_Int16)) )
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_ADJUST, aWWToUnoAdjust[m_nJC]));
+
+ // todo: this is not the bullet char
+ if( nNumberFormat == style::NumberingType::CHAR_SPECIAL && m_sBulletChar.getLength() )
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_BULLET_CHAR, m_sBulletChar.copy(0,1)));
+
+ aNumberingProperties.push_back( MAKE_PROPVAL( PROP_LISTTAB_STOP_POSITION, m_nTabstop ) );
+
+ //TODO: handling of nFLegal?
+ //TODO: nFNoRestart lower levels do not restart when higher levels are incremented, like:
+ //1.
+ //1.1
+ //2.2
+ //2.3
+ //3.4
+ //
+
+ if( m_nFWord6 > 0) //Word 6 compatibility
+ {
+ if( m_nFPrev == 1)
+ aNumberingProperties.push_back( MAKE_PROPVAL( PROP_PARENT_NUMBERING, (sal_Int16) NUMBERING_MAX_LEVELS ));
+ //TODO: prefixing space nFPrevSpace; - has not been used in WW8 filter
+ }
+
+// TODO: sRGBXchNums; array of inherited numbers
+
+// TODO: nXChFollow; following character 0 - tab, 1 - space, 2 - nothing
+
+ _PropertyMap::const_iterator aMapIter = begin();
+ _PropertyMap::const_iterator aEndIter = end();
+ for( ; aMapIter != aEndIter; ++aMapIter )
+ {
+ switch( aMapIter->first.eId )
+ {
+ case PROP_ADJUST:
+ case PROP_INDENT_AT:
+ case PROP_FIRST_LINE_INDENT:
+ case PROP_FIRST_LINE_OFFSET:
+ case PROP_LEFT_MARGIN:
+ aNumberingProperties.push_back(
+ beans::PropertyValue( aPropNameSupplier.GetName( aMapIter->first.eId ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ break;
+ case PROP_CHAR_FONT_NAME:
+ aNumberingProperties.push_back(
+ beans::PropertyValue( aPropNameSupplier.GetName( PROP_BULLET_FONT_NAME ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ break;
+ default:
+ {
+ // Handled in GetCharStyleProperties method
+ }
+
+ }
+ }
+
+ uno::Sequence< beans::PropertyValue > aRet(aNumberingProperties.size());
+ beans::PropertyValue* pValues = aRet.getArray();
+ PropertyValueVector_t::const_iterator aIt = aNumberingProperties.begin();
+ PropertyValueVector_t::const_iterator aEndIt = aNumberingProperties.end();
+ for(sal_uInt32 nIndex = 0; aIt != aEndIt; ++aIt,++nIndex)
+ {
+ pValues[nIndex] = *aIt;
+ }
+ return aRet;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetParaProperties( )
+{
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ uno::Sequence< beans::PropertyValue > aParaProps = m_pParaStyle->pProperties->GetPropertyValues( );
+ uno::Sequence< beans::PropertyValue > aProps;
+
+ // ParaFirstLineIndent -> FirstLineIndent
+ // ParaLeftMargin -> IndentAt
+
+ OUString sParaIndent = aPropNameSupplier.GetName(
+ PROP_PARA_FIRST_LINE_INDENT );
+ OUString sFirstLineIndent = aPropNameSupplier.GetName(
+ PROP_FIRST_LINE_INDENT );
+ OUString sParaLeftMargin = aPropNameSupplier.GetName(
+ PROP_PARA_LEFT_MARGIN );
+ OUString sIndentAt = aPropNameSupplier.GetName(
+ PROP_INDENT_AT );
+
+ sal_Int32 nLen = aParaProps.getLength( );
+ for ( sal_Int32 i = 0; i < nLen; i++ )
+ {
+ if ( aParaProps[i].Name.equals( sParaIndent ) )
+ {
+ aProps.realloc( aProps.getLength() + 1 );
+ aProps[aProps.getLength( ) - 1] = aParaProps[i];
+ aProps[aProps.getLength( ) - 1].Name = sFirstLineIndent;
+ }
+ else if ( aParaProps[i].Name.equals( sParaLeftMargin ) )
+ {
+ aProps.realloc( aProps.getLength() + 1 );
+ aProps[aProps.getLength( ) - 1] = aParaProps[i];
+ aProps[aProps.getLength( ) - 1].Name = sIndentAt;
+ }
+
+ }
+
+ return aProps;
+}
+
+//--------------------------------------- AbstractListDef implementation
+
+AbstractListDef::AbstractListDef( ) :
+ m_nTPLC( -1 )
+ ,m_nSimpleList( -1 )
+ ,m_nRestart( -1 )
+ ,m_nUnsigned( -1 )
+ ,m_nId( -1 )
+{
+}
+
+AbstractListDef::~AbstractListDef( )
+{
+}
+
+void AbstractListDef::SetValue( sal_uInt32 nSprmId, sal_Int32 nValue )
+{
+ switch( nSprmId )
+ {
+ case NS_rtf::LN_TPLC:
+ m_nTPLC = nValue;
+ break;
+ case NS_rtf::LN_FSIMPLELIST:
+ m_nSimpleList = nValue;
+ break;
+ case NS_rtf::LN_fAutoNum:
+ m_nRestart = nValue;
+ break;
+ case NS_rtf::LN_fHybrid:
+ m_nUnsigned = nValue;
+ break;
+ default:
+ OSL_ENSURE( false, "this line should never be reached");
+ }
+}
+
+ListLevel::Pointer AbstractListDef::GetLevel( sal_uInt16 nLvl )
+{
+ ListLevel::Pointer pLevel;
+ if ( m_aLevels.size( ) > nLvl )
+ pLevel = m_aLevels[ nLvl ];
+ return pLevel;
+}
+
+void AbstractListDef::AddLevel( )
+{
+ ListLevel::Pointer pLevel( new ListLevel );
+ m_pCurrentLevel = pLevel;
+ m_aLevels.push_back( pLevel );
+}
+
+uno::Sequence< uno::Sequence< beans::PropertyValue > > AbstractListDef::GetPropertyValues( )
+{
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > result( sal_Int32( m_aLevels.size( ) ) );
+ uno::Sequence< beans::PropertyValue >* aResult = result.getArray( );
+
+ int nLevels = m_aLevels.size( );
+ for ( int i = 0; i < nLevels; i++ )
+ {
+ aResult[i] = m_aLevels[i]->GetProperties( );
+ }
+
+ return result;
+}
+
+//---------------------------------------------- ListDef implementation
+
+ListDef::ListDef( ) : AbstractListDef( )
+{
+}
+
+ListDef::~ListDef( )
+{
+}
+
+OUString ListDef::GetStyleName( sal_Int32 nId )
+{
+ OUString sStyleName( OUString::createFromAscii( "WWNum" ) );
+ sStyleName += OUString::valueOf( nId );
+
+ return sStyleName;
+}
+
+uno::Sequence< uno::Sequence< beans::PropertyValue > > ListDef::GetPropertyValues( )
+{
+ // [1] Call the same method on the abstract list
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > aAbstract = m_pAbstractDef->GetPropertyValues( );
+
+ // [2] Call the upper class method
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > aThis = AbstractListDef::GetPropertyValues( );
+
+ // Merge the results of [2] in [1]
+ sal_Int32 nThisCount = aThis.getLength( );
+ for ( sal_Int32 i = 0; i < nThisCount; i++ )
+ {
+ uno::Sequence< beans::PropertyValue > level = aThis[i];
+ if ( level.getLength( ) == 0 )
+ {
+ // If the the element contains something, merge it
+ lcl_mergeProperties( level, aAbstract[i] );
+ }
+ }
+
+ return aAbstract;
+}
+
+uno::Reference< container::XNameContainer > lcl_getUnoNumberingStyles(
+ uno::Reference< lang::XMultiServiceFactory > xFactory )
+{
+ uno::Reference< container::XNameContainer > xStyles;
+
+ try
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xFamilies( xFactory, uno::UNO_QUERY_THROW );
+ uno::Any oFamily = xFamilies->getStyleFamilies( )->getByName( OUString::createFromAscii( "NumberingStyles" ) );
+
+ oFamily >>= xStyles;
+ }
+ catch ( const uno::Exception )
+ {
+ }
+
+ return xStyles;
+}
+
+void ListDef::CreateNumberingRules( DomainMapper& rDMapper,
+ uno::Reference< lang::XMultiServiceFactory> xFactory )
+{
+ // Get the UNO Numbering styles
+ uno::Reference< container::XNameContainer > xStyles = lcl_getUnoNumberingStyles( xFactory );
+
+ // Do the whole thing
+ if( !m_xNumRules.is() && xFactory.is() && xStyles.is( ) )
+ {
+ try
+ {
+ // Create the numbering style
+ uno::Reference< beans::XPropertySet > xStyle (
+ xFactory->createInstance(
+ OUString::createFromAscii("com.sun.star.style.NumberingStyle")),
+ uno::UNO_QUERY_THROW );
+
+ rtl::OUString sStyleName = GetStyleName( GetId( ) );
+
+ xStyles->insertByName( sStyleName, makeAny( xStyle ) );
+
+ uno::Any oStyle = xStyles->getByName( sStyleName );
+ xStyle.set( oStyle, uno::UNO_QUERY_THROW );
+
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ // Get the default OOo Numbering style rules
+ uno::Any aRules = xStyle->getPropertyValue( aPropNameSupplier.GetName( PROP_NUMBERING_RULES ) );
+ aRules >>= m_xNumRules;
+
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > aProps = GetPropertyValues( );
+
+ sal_Int32 nAbstLevels = m_pAbstractDef->Size( );
+ sal_Int16 nLevel = 0;
+ while ( nLevel < nAbstLevels )
+ {
+ ListLevel::Pointer pAbsLevel = m_pAbstractDef->GetLevel( nLevel );
+ ListLevel::Pointer pLevel = GetLevel( nLevel );
+
+ // Get the merged level properties
+ uno::Sequence< beans::PropertyValue > aLvlProps = aProps[sal_Int32( nLevel )];
+
+ lcl_printProperties( aLvlProps );
+
+ // Get the char style
+ uno::Sequence< beans::PropertyValue > aAbsCharStyleProps = pAbsLevel->GetCharStyleProperties( );
+ uno::Sequence< beans::PropertyValue >& rAbsCharStyleProps = aAbsCharStyleProps;
+ if ( pLevel.get( ) )
+ {
+ uno::Sequence< beans::PropertyValue > aCharStyleProps =
+ pLevel->GetCharStyleProperties( );
+ uno::Sequence< beans::PropertyValue >& rCharStyleProps = aCharStyleProps;
+ lcl_mergeProperties( rAbsCharStyleProps, rCharStyleProps );
+ }
+
+ if( aAbsCharStyleProps.getLength() )
+ {
+ // Change the sequence into a vector
+ PropertyValueVector_t aStyleProps;
+ for ( sal_Int32 i = 0, nLen = aAbsCharStyleProps.getLength() ; i < nLen; i++ )
+ {
+ aStyleProps.push_back( aAbsCharStyleProps[i] );
+ }
+
+ //create (or find) a character style containing the character
+ // attributes of the symbol and apply it to the numbering level
+ OUString sStyle = rDMapper.getOrCreateCharStyle( aStyleProps );
+ aLvlProps.realloc( aLvlProps.getLength() + 1);
+ aLvlProps[aLvlProps.getLength() - 1].Name = aPropNameSupplier.GetName( PROP_CHAR_STYLE_NAME );
+ aLvlProps[aLvlProps.getLength() - 1].Value <<= sStyle;
+ }
+
+ // Get the prefix / suffix / Parent numbering
+ // and add them to the level properties
+ OUString sText = pAbsLevel->GetBulletChar( );
+ if ( pLevel.get( ) )
+ sText = pLevel->GetBulletChar( );
+
+ OUString sPrefix;
+ OUString sSuffix;
+ OUString& rPrefix = sPrefix;
+ OUString& rSuffix = sSuffix;
+ sal_Int16 nParentNum = ListLevel::GetParentNumbering(
+ sText, nLevel, rPrefix, rSuffix );
+
+ aLvlProps.realloc( aLvlProps.getLength( ) + 4 );
+ aLvlProps[ aLvlProps.getLength( ) - 4 ] = MAKE_PROPVAL( PROP_PREFIX, rPrefix );
+ aLvlProps[ aLvlProps.getLength( ) - 3 ] = MAKE_PROPVAL( PROP_SUFFIX, rSuffix );
+ aLvlProps[ aLvlProps.getLength( ) - 2 ] = MAKE_PROPVAL( PROP_PARENT_NUMBERING, nParentNum );
+
+ aLvlProps[ aLvlProps.getLength( ) - 1 ] = MAKE_PROPVAL( PROP_POSITION_AND_SPACE_MODE,
+ sal_Int16( text::PositionAndSpaceMode::LABEL_ALIGNMENT ) );
+ // Replace the numbering rules for the level
+ m_xNumRules->replaceByIndex( nLevel, uno::makeAny( aLvlProps ) );
+
+ // Handle the outline level here
+ StyleSheetEntryPtr pParaStyle = pAbsLevel->GetParaStyle( );
+ if ( pParaStyle.get( ) )
+ {
+ uno::Reference< text::XChapterNumberingSupplier > xOutlines (
+ xFactory, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XIndexReplace > xOutlineRules =
+ xOutlines->getChapterNumberingRules( );
+
+ aLvlProps.realloc( aLvlProps.getLength() + 1 );
+ aLvlProps[aLvlProps.getLength( ) - 1] = MAKE_PROPVAL( PROP_HEADING_STYLE_NAME, pParaStyle->sConvertedStyleName );
+
+ xOutlineRules->replaceByIndex( nLevel, uno::makeAny( aLvlProps ) );
+ }
+
+ nLevel++;
+ }
+
+ // Create the numbering style for these rules
+ OUString sNumRulesName = aPropNameSupplier.GetName( PROP_NUMBERING_RULES );
+ xStyle->setPropertyValue( sNumRulesName, uno::makeAny( m_xNumRules ) );
+ }
+ catch( const uno::Exception& rEx)
+ {
+ OSL_ENSURE( false, "ListTable::CreateNumberingRules");
+ }
+ }
+
+}
+
+//------------------------------------- NumberingManager implementation
+
+
+ListsManager::ListsManager( DomainMapper& rDMapper,
+ const uno::Reference< lang::XMultiServiceFactory > xFactory ) :
+ m_rDMapper( rDMapper ),
+ m_xFactory( xFactory )
+{
+}
+
+ListsManager::~ListsManager( )
+{
+}
+
+void ListsManager::attribute( Id nName, Value& rVal )
+{
+ OSL_ENSURE( m_pCurrentDefinition.get(), "current entry has to be set here");
+ if(!m_pCurrentDefinition.get())
+ return ;
+ int nIntValue = rVal.getInt();
+
+ ListLevel::Pointer pCurrentLvl = m_pCurrentDefinition->GetCurrentLevel( );
+
+
+ /* WRITERFILTERSTATUS: table: ListTable_attributedata */
+ switch(nName)
+ {
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGBXCHNUMS:
+ if(pCurrentLvl.get())
+ pCurrentLvl->AddRGBXchNums( rVal.getString( ) );
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_LevelText_val:
+ {
+ //this strings contains the definition of the level
+ //the level number is marked as %n
+ //these numbers can be mixed randomly toghether with seperators pre- and suffixes
+ //the Writer supports only a number of upper levels to show, separators is always a dot
+ //and each level can have a prefix and a suffix
+ if(pCurrentLvl.get())
+ pCurrentLvl->SetBulletChar( rVal.getString() );
+ }
+ break;
+// case NS_rtf::LN_ISTD: break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FIDENTSAV:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FCONVERTED:
+#if 0
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FWORD6:
+#endif
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHFOLLOW:
+ if ( pCurrentLvl.get( ) )
+ pCurrentLvl->SetValue( nName, sal_Int32( nIntValue ) );
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGISTD:
+ m_pCurrentDefinition->AddRGISTD( rVal.getString() );
+ break;
+ case NS_ooxml::LN_CT_Num_numId:
+ m_pCurrentDefinition->SetId( rVal.getString().toInt32( ) );
+ break;
+ case NS_rtf::LN_LSID:
+ m_pCurrentDefinition->SetId( nIntValue );
+ break;
+ case NS_rtf::LN_TPLC:
+ case NS_rtf::LN_FSIMPLELIST:
+ case NS_rtf::LN_fAutoNum:
+ case NS_rtf::LN_fHybrid:
+ m_pCurrentDefinition->SetValue( nName, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_NumLvl_ilvl:
+ case NS_rtf::LN_LISTLEVEL:
+ {
+ //add a new level to the level vector and make it the current one
+ m_pCurrentDefinition->AddLevel();
+
+ writerfilter::Reference<Properties>::Pointer_t pProperties;
+ if((pProperties = rVal.getProperties()).get())
+ pProperties->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_abstractNumId:
+ {
+ // This one corresponds to the AbstractNum Id definition
+ // The reference to the abstract num is in the sprm method
+ sal_Int32 nVal = rVal.getString().toInt32();
+ m_pCurrentDefinition->SetId( nVal );
+ }
+ break;
+ case NS_ooxml::LN_CT_Ind_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pCurrentLvl->Insert(
+ PROP_INDENT_AT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_hanging:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pCurrentLvl->Insert(
+ PROP_FIRST_LINE_INDENT, true, uno::makeAny( - ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_firstLine:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pCurrentLvl->Insert(
+ PROP_FIRST_LINE_INDENT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Lvl_ilvl: //overrides previous level - unsupported
+ case NS_ooxml::LN_CT_Lvl_tplc: //template code - unsupported
+ case NS_ooxml::LN_CT_Lvl_tentative: //marks level as unused in the document - unsupported
+ break;
+ case NS_ooxml::LN_CT_TabStop_pos:
+ {
+ //no paragraph attributes in ListTable char style sheets
+ if ( pCurrentLvl.get( ) )
+ pCurrentLvl->SetValue( nName,
+ ConversionHelper::convertTwipToMM100( nIntValue ) );
+ }
+ break;
+ case NS_ooxml::LN_CT_TabStop_val:
+ {
+ // TODO Do something of that
+ }
+ break;
+ default:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "ListTable::attribute() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
+ sMessage += ::rtl::OString(" value: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
+ OSL_ENSURE( false, sMessage.getStr()); //
+#endif
+ }
+ }
+}
+
+void ListsManager::sprm( Sprm& rSprm )
+{
+ //fill the attributes of the style sheet
+ sal_uInt32 nSprmId = rSprm.getId();
+ if( m_pCurrentDefinition.get() ||
+ nSprmId == NS_ooxml::LN_CT_Numbering_abstractNum ||
+ nSprmId == NS_ooxml::LN_CT_Numbering_num )
+ {
+ sal_Int32 nIntValue = rSprm.getValue()->getInt();
+ /* WRITERFILTERSTATUS: table: ListTable_sprm */
+ switch( nSprmId )
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Numbering_abstractNum:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ {
+ //create a new Abstract list entry
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ m_pCurrentDefinition.reset( new AbstractListDef );
+ pProperties->resolve( *this );
+ //append it to the table
+ m_aAbstractLists.push_back( m_pCurrentDefinition );
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Numbering_num:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ {
+ // Create a new list entry
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ ListDef::Pointer listDef( new ListDef );
+ m_pCurrentDefinition = listDef;
+ pProperties->resolve( *this );
+ //append it to the table
+ m_aLists.push_back( listDef );
+
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_Num_abstractNumId:
+ {
+ sal_Int32 nAbstractNumId = rSprm.getValue()->getInt();
+ ListDef* pListDef = dynamic_cast< ListDef* >( m_pCurrentDefinition.get( ) );
+ if ( pListDef != NULL )
+ {
+ // The current def should be a ListDef
+ pListDef->SetAbstractDefinition(
+ GetAbstractList( nAbstractNumId ) );
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_multiLevelType:
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_TPLC:
+ m_pCurrentDefinition->SetValue( nSprmId, nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_lvl:
+ {
+ m_pCurrentDefinition->AddLevel();
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGBXCHNUMS: break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FIDENTSAV:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FCONVERTED:
+#if 0
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FWORD6:
+#endif
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHFOLLOW:
+ m_pCurrentDefinition->GetCurrentLevel( )->SetValue( nSprmId, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Lvl_lvlText:
+ case NS_ooxml::LN_CT_Lvl_rPr : //contains LN_EG_RPrBase_rFonts
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_NumLvl_lvl:
+ {
+ // overwrite level
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_lvlJc:
+ {
+ static sal_Int16 aWWAlignments[ ] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT
+ };
+ m_pCurrentDefinition->GetCurrentLevel( )->Insert(
+ PROP_ADJUST, true, uno::makeAny( aWWAlignments[ nIntValue ] ) );
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_pPr:
+ case NS_ooxml::LN_CT_PPrBase_ind:
+ {
+ //todo: how to handle paragraph properties within numbering levels (except LeftIndent and FirstLineIndent)?
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_PPrBase_tabs:
+ case NS_ooxml::LN_CT_Tabs_tab:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_suff:
+ //todo: currently unsupported suffix
+ //can be: "none", "space", "tab"
+ break;
+ case NS_ooxml::LN_CT_Lvl_pStyle:
+ {
+ OUString sStyleName = rSprm.getValue( )->getString( );
+ ListLevel::Pointer pLevel = m_pCurrentDefinition->GetCurrentLevel( );
+ StyleSheetTablePtr pStylesTable = m_rDMapper.GetStyleSheetTable( );
+ const StyleSheetEntryPtr pStyle = pStylesTable->FindStyleSheetByISTD( sStyleName );
+ pLevel->SetParaStyle( pStyle );
+ }
+ break;
+ case NS_ooxml::LN_EG_RPrBase_rFonts: //contains font properties
+ case NS_ooxml::LN_EG_RPrBase_color:
+ case NS_ooxml::LN_EG_RPrBase_u:
+ case NS_sprm::LN_CHps: // sprmCHps
+ case NS_ooxml::LN_EG_RPrBase_lang:
+ case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
+ //no break!
+ default:
+ if( m_pCurrentDefinition->GetCurrentLevel( ).get())
+ {
+ m_rDMapper.PushListProperties( m_pCurrentDefinition->GetCurrentLevel( ) );
+ m_rDMapper.sprm( rSprm );
+ m_rDMapper.PopListProperties();
+ }
+ }
+ }
+}
+
+void ListsManager::entry( int /* pos */,
+ writerfilter::Reference<Properties>::Pointer_t ref )
+{
+ if( m_rDMapper.IsOOXMLImport() )
+ {
+ ref->resolve(*this);
+ }
+ else
+ {
+ if ( m_bIsLFOImport )
+ {
+ // Create ListDef's
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ ListDef::Pointer pList( new ListDef() );
+ m_pCurrentDefinition = pList;
+ ref->resolve(*this);
+ //append it to the table
+ m_aLists.push_back( pList );
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ else
+ {
+ // Create AbstractListDef's
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ m_pCurrentDefinition.reset( new AbstractListDef( ) );
+ ref->resolve(*this);
+ //append it to the table
+ m_aAbstractLists.push_back( m_pCurrentDefinition );
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ }
+}
+
+AbstractListDef::Pointer ListsManager::GetAbstractList( sal_Int32 nId )
+{
+ AbstractListDef::Pointer pAbstractList;
+
+ int nLen = m_aAbstractLists.size( );
+ int i = 0;
+ while ( !pAbstractList.get( ) && i < nLen )
+ {
+ if ( m_aAbstractLists[i]->GetId( ) == nId )
+ pAbstractList = m_aAbstractLists[i];
+ i++;
+ }
+
+ return pAbstractList;
+}
+
+ListDef::Pointer ListsManager::GetList( sal_Int32 nId )
+{
+ ListDef::Pointer pList;
+
+ int nLen = m_aLists.size( );
+ int i = 0;
+ while ( !pList.get( ) && i < nLen )
+ {
+ if ( m_aLists[i]->GetId( ) == nId )
+ pList = m_aLists[i];
+ i++;
+ }
+
+ return pList;
+}
+
+void ListsManager::CreateNumberingRules( )
+{
+ // Loop over the definitions
+ std::vector< ListDef::Pointer >::iterator listIt = m_aLists.begin( );
+ for ( ; listIt != m_aLists.end( ); listIt++ )
+ {
+ (*listIt)->CreateNumberingRules( m_rDMapper, m_xFactory );
+ }
+}
+
+} }
diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx
new file mode 100644
index 000000000000..a7970fca531c
--- /dev/null
+++ b/writerfilter/source/dmapper/NumberingManager.hxx
@@ -0,0 +1,226 @@
+#ifndef INCLUDED_NUMBERINGMANAGER_HXX
+#define INCLUDED_NUMBERINGMANAGER_HXX
+
+#include "PropertyMap.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <com/sun/star/container/XIndexReplace.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+class DomainMapper;
+class StyleSheetEntry;
+
+
+/** Class representing the numbering level properties.
+ */
+class ListLevel : public PropertyMap
+{
+ sal_Int32 m_nIStartAt; //LN_ISTARTAT
+ sal_Int32 m_nNFC; //LN_NFC
+ sal_Int32 m_nJC; //LN_JC
+ sal_Int32 m_nFLegal; //LN_FLEGAL
+ sal_Int32 m_nFNoRestart; //LN_FNORESTART
+ sal_Int32 m_nFPrev; //LN_FPREV
+ sal_Int32 m_nFPrevSpace; //LN_FPREVSPACE
+ sal_Int32 m_nFWord6; //LN_FWORD6
+ ::rtl::OUString m_sRGBXchNums; //LN_RGBXCHNUMS
+ sal_Int32 m_nXChFollow; //LN_IXCHFOLLOW
+ ::rtl::OUString m_sBulletChar;
+ sal_Int32 m_nTabstop;
+ boost::shared_ptr< StyleSheetEntry > m_pParaStyle;
+
+public:
+
+ typedef boost::shared_ptr< ListLevel > Pointer;
+
+ ListLevel() :
+ m_nIStartAt(-1)
+ ,m_nNFC(-1)
+ ,m_nJC(-1)
+ ,m_nFLegal(-1)
+ ,m_nFNoRestart(-1)
+ ,m_nFPrev(-1)
+ ,m_nFPrevSpace(-1)
+ ,m_nFWord6(-1)
+ ,m_nXChFollow(-1)
+ ,m_nTabstop( 0 )
+ {}
+
+ ~ListLevel( ){ }
+
+ // Setters for the import
+ void SetValue( Id nId, sal_Int32 nValue );
+ void SetBulletChar( rtl::OUString sValue ) { m_sBulletChar = sValue; };
+ void SetParaStyle( boost::shared_ptr< StyleSheetEntry > pStyle )
+ {
+ m_pParaStyle = pStyle;
+ };
+ void AddRGBXchNums( rtl::OUString sValue ) { m_sRGBXchNums += sValue; };
+
+ // Getters
+ rtl::OUString GetBulletChar( ) { return m_sBulletChar; };
+ boost::shared_ptr< StyleSheetEntry > GetParaStyle( ) { return m_pParaStyle; };
+
+ // UNO mapping functions
+
+ // rPrefix and rSuffix are out parameters
+ static sal_Int16 GetParentNumbering( rtl::OUString sText, sal_Int16 nLevel,
+ rtl::OUString& rPrefix, rtl::OUString& rSuffix );
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >
+ GetProperties( );
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue>
+ GetCharStyleProperties( );
+private:
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >
+ GetLevelProperties( );
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >
+ GetParaProperties( );
+};
+
+class AbstractListDef
+{
+private:
+ sal_Int32 m_nTPLC; //LN_TPLC
+ ::rtl::OUString m_sRGISTD; //LN_RGISTD
+ sal_Int32 m_nSimpleList; //LN_FSIMPLELIST
+ sal_Int32 m_nRestart; //LN_FRESTARTHDN
+ sal_Int32 m_nUnsigned; //LN_UNSIGNED26_2
+
+ // The ID member reflects either the abstractNumId or the numId
+ // depending on the use of the class
+ sal_Int32 m_nId;
+
+ // Properties of each level. This can also reflect the overridden
+ // levels of a numbering.
+ ::std::vector< ListLevel::Pointer > m_aLevels;
+
+ // Only used during the numberings import
+ ListLevel::Pointer m_pCurrentLevel;
+
+public:
+ typedef boost::shared_ptr< AbstractListDef > Pointer;
+
+ AbstractListDef( );
+ ~AbstractListDef( );
+
+ // Setters using during the import
+ void SetId( sal_Int32 nId ) { m_nId = nId; };
+ void SetValue( sal_uInt32 nSprmId, sal_Int32 nValue );
+ void AddRGISTD( rtl::OUString sValue ) { m_sRGISTD += sValue; };
+
+ // Accessors
+ sal_Int32 GetId( ) { return m_nId; };
+
+ sal_Int16 Size( ) { return sal_Int16( m_aLevels.size( ) ); };
+ ListLevel::Pointer GetLevel( sal_uInt16 nLvl );
+ void AddLevel( );
+
+ ListLevel::Pointer GetCurrentLevel( ) { return m_pCurrentLevel; };
+
+ virtual com::sun::star::uno::Sequence<
+ com::sun::star::uno::Sequence<
+ com::sun::star::beans::PropertyValue > > GetPropertyValues( );
+};
+
+class ListDef : public AbstractListDef
+{
+private:
+ // Pointer to the abstract numbering
+ AbstractListDef::Pointer m_pAbstractDef;
+
+ // Cache for the UNO numbering rules
+ uno::Reference< container::XIndexReplace > m_xNumRules;
+
+public:
+ typedef boost::shared_ptr< ListDef > Pointer;
+
+ ListDef( );
+ ~ListDef( );
+
+ // Accessors
+ void SetAbstractDefinition( AbstractListDef::Pointer pAbstract ) { m_pAbstractDef = pAbstract; };
+ AbstractListDef::Pointer GetAbstractDefinition( ) { return m_pAbstractDef; };
+
+ // Mapping functions
+ static rtl::OUString GetStyleName( sal_Int32 nId );
+
+ com::sun::star::uno::Sequence<
+ com::sun::star::uno::Sequence<
+ com::sun::star::beans::PropertyValue > > GetPropertyValues( );
+
+ void CreateNumberingRules(
+ DomainMapper& rDMapper,
+ com::sun::star::uno::Reference<
+ com::sun::star::lang::XMultiServiceFactory> xFactory );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace >
+ GetNumberingRules( ) { return m_xNumRules; };
+
+};
+
+/** This class provides access to the defined numbering styles.
+ */
+class ListsManager :
+ public Properties,
+ public Table
+{
+private:
+
+ DomainMapper& m_rDMapper;
+ com::sun::star::uno::Reference<
+ com::sun::star::lang::XMultiServiceFactory > m_xFactory;
+
+ // The numbering entries
+ std::vector< AbstractListDef::Pointer > m_aAbstractLists;
+ std::vector< ListDef::Pointer > m_aLists;
+
+
+ // These members are used for import only
+ AbstractListDef::Pointer m_pCurrentDefinition;
+ bool m_bIsLFOImport;
+
+ AbstractListDef::Pointer GetAbstractList( sal_Int32 nId );
+
+public:
+
+ ListsManager(
+ DomainMapper& rDMapper,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory);
+ virtual ~ListsManager();
+
+ typedef boost::shared_ptr< ListsManager > Pointer;
+
+ // Properties
+ virtual void attribute( Id nName, Value & rVal );
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // Config methods
+ void SetLFOImport( bool bLFOImport ) { m_bIsLFOImport = bLFOImport; };
+
+ // Numberings accessors
+ AbstractListDef::Pointer GetCurrentDef( ) { return m_pCurrentDefinition; };
+
+ sal_uInt32 Size() const
+ { return sal_uInt32( m_aLists.size( ) ); };
+ ListDef::Pointer GetList( sal_Int32 nId );
+
+ // Mapping methods
+ void CreateNumberingRules( );
+};
+
+} }
+
+#endif
+
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
index 04dcf594339c..fb99f254ef86 100644
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -317,9 +317,10 @@ const rtl::OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
case PROP_INDENT_AT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IndentAt")); break;
case PROP_FIRST_LINE_INDENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FirstLineIndent")); break;
case PROP_NUMBERING_STYLE_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingStyleName")); break;
+ case PROP_OUTLINE_LEVEL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("OutlineLevel")); break;
case PROP_LISTTAB_STOP_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ListtabStopPosition")); break;
case PROP_POSITION_AND_SPACE_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PositionAndSpaceMode")); break;
-// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+ case PROP_HEADING_STYLE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeadingStyleName")); break;
// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
index f9c4c333e8ea..1d5992cc212c 100644
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -280,8 +280,10 @@ enum PropertyIds
/*244*/ ,PROP_INDENT_AT
/*245*/ ,PROP_FIRST_LINE_INDENT
/*246*/ ,PROP_NUMBERING_STYLE_NAME
-/*247*/ ,PROP_LISTTAB_STOP_POSITION
-/*248*/ ,PROP_POSITION_AND_SPACE_MODE
+/*247*/ ,PROP_OUTLINE_LEVEL
+/*248*/ ,PROP_LISTTAB_STOP_POSITION
+/*249*/ ,PROP_POSITION_AND_SPACE_MODE
+/*250*/ ,PROP_HEADING_STYLE_NAME
};
struct PropertyNameSupplier_Impl;
class PropertyNameSupplier
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 8d9c1fa84a7f..aa8a29c5e6a2 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -32,12 +32,15 @@
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/container/XEnumeration.hpp>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/style/BreakType.hpp>
#include <com/sun/star/text/RelOrientation.hpp>
#include <com/sun/star/text/WritingMode.hpp>
#include <com/sun/star/text/XTextColumns.hpp>
#include <com/sun/star/text/XText.hpp>
+#include <com/sun/star/text/XTextCopy.hpp>
#include "dmapperLoggers.hxx"
#include "PropertyMapHelper.hxx"
@@ -425,14 +428,18 @@ void SectionPropertyMap::ApplyBorderToPageStyles(
switch( nValue & 0x07)
{
case 0: /*all styles*/
- xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
- xSecond = GetPageStyle( xPageStyles, xTextFactory, true );
+ if ( m_sFollowPageStyleName.getLength( ) > 0 )
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
+ if ( m_sFirstPageStyleName.getLength( ) > 0 )
+ xSecond = GetPageStyle( xPageStyles, xTextFactory, true );
break;
case 1: /*first page*/
- xFirst = GetPageStyle( xPageStyles, xTextFactory, true );
+ if ( m_sFirstPageStyleName.getLength( ) > 0 )
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, true );
break;
case 2: /*left and right*/
- xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
+ if ( m_sFollowPageStyleName.getLength( ) > 0 )
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
break;
case 3: //whole document?
//todo: how to apply a border to the whole document - find all sections or access all page styles?
@@ -609,6 +616,92 @@ bool SectionPropertyMap::HasFooter(bool bFirstPage) const
-----------------------------------------------------------------------*/
#define MIN_HEAD_FOOT_HEIGHT 100 //minimum header/footer height
+void SectionPropertyMap::CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl )
+{
+#if DEBUG
+ clog << "START>>> SectionPropertyMap::CopyLastHeaderFooter()" << endl;
+#endif
+ SectionPropertyMap* pLastContext = rDM_Impl.GetLastSectionContext( );
+ if ( pLastContext )
+ {
+ uno::Reference< beans::XPropertySet > xPrevStyle = pLastContext->GetPageStyle(
+ rDM_Impl.GetPageStyles(),
+ rDM_Impl.GetTextFactory(),
+ bFirstPage );
+ uno::Reference< beans::XPropertySet > xStyle = GetPageStyle(
+ rDM_Impl.GetPageStyles(),
+ rDM_Impl.GetTextFactory(),
+ bFirstPage );
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ try {
+ // Loop over the Header and Footer properties to copy them
+ static PropertyIds aProperties[] =
+ {
+ PROP_HEADER_TEXT,
+ PROP_FOOTER_TEXT,
+ };
+
+ bool bHasPrevHeader = false;
+ bool bHasHeader = false;
+
+ rtl::OUString sHeaderIsOn = rPropNameSupplier.GetName( PROP_HEADER_IS_ON );
+ xPrevStyle->getPropertyValue( sHeaderIsOn ) >>= bHasPrevHeader;
+ xStyle->getPropertyValue( sHeaderIsOn ) >>= bHasHeader;
+ bool bCopyHeader = bHasPrevHeader && !bHasHeader;
+
+ if ( bCopyHeader )
+ xStyle->setPropertyValue( sHeaderIsOn, uno::makeAny( sal_True ) );
+
+ bool bHasPrevFooter = false;
+ bool bHasFooter = false;
+
+ rtl::OUString sFooterIsOn = rPropNameSupplier.GetName( PROP_FOOTER_IS_ON );
+ xPrevStyle->getPropertyValue( sFooterIsOn ) >>= bHasPrevFooter;
+ xStyle->getPropertyValue( sFooterIsOn ) >>= bHasFooter;
+ bool bCopyFooter = bHasPrevFooter && !bHasFooter;
+
+ if ( bCopyFooter )
+ xStyle->setPropertyValue( sFooterIsOn, uno::makeAny( sal_True ) );
+
+ // Copying the text properties
+ for ( int i = 0, nNbProps = 2; i < nNbProps; i++ )
+ {
+ bool bIsHeader = ( i < nNbProps / 2 );
+ PropertyIds aPropId = aProperties[i];
+ rtl::OUString sName = rPropNameSupplier.GetName( aPropId );
+
+ if ( ( bIsHeader && bCopyHeader ) || ( !bIsHeader && bCopyFooter ) )
+ {
+#if DEBUG
+ clog << "Copying ";
+ clog << rtl::OUStringToOString( sName, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ // TODO has to be copied
+ uno::Reference< text::XTextCopy > xTxt(
+ xStyle->getPropertyValue( sName ), uno::UNO_QUERY_THROW );
+
+ uno::Reference< text::XTextCopy > xPrevTxt(
+ xPrevStyle->getPropertyValue( sName ), uno::UNO_QUERY_THROW );
+
+ xTxt->copyText( xPrevTxt );
+ }
+ }
+ }
+ catch ( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "An exception occured in SectionPropertyMap::CopyLastHeaderFooter( ) - ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ }
+ }
+#if DEBUG
+ clog << "END>>> SectionPropertyMap::CopyLastHeaderFooter()" << endl;
+#endif
+}
+
void SectionPropertyMap::PrepareHeaderFooterProperties( bool bFirstPage )
{
sal_Int32 nTopMargin = m_nTopMargin;
@@ -747,6 +840,7 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
/*** if headers/footers are available then the top/bottom margins of the
header/footer are copied to the top/bottom margin of the page
*/
+ CopyLastHeaderFooter( false, rDM_Impl );
PrepareHeaderFooterProperties( false );
const ::rtl::OUString sTrayIndex = rPropNameSupplier.GetName( PROP_PRINTER_PAPER_TRAY_INDEX );
@@ -819,6 +913,7 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
//todo: creating a "First Page" style depends on HasTitlePage und _fFacingPage_
if( m_bTitlePage )
{
+ CopyLastHeaderFooter( true, rDM_Impl );
PrepareHeaderFooterProperties( true );
uno::Reference< beans::XPropertySet > xFirstPageStyle = GetPageStyle(
rDM_Impl.GetPageStyles(), rDM_Impl.GetTextFactory(), true );
@@ -841,28 +936,24 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
//now apply this break at the first paragraph of this section
uno::Reference< beans::XPropertySet > xRangeProperties;
if( m_bIsFirstSection )
- xRangeProperties = uno::Reference< beans::XPropertySet >( rDM_Impl.GetBodyText()->getStart(), uno::UNO_QUERY_THROW );
+ {
+ uno::Reference< container::XEnumerationAccess > xEnumAccess( rDM_Impl.GetBodyText( ), uno::UNO_QUERY_THROW );
+ uno::Reference< container::XEnumeration > xEnum = xEnumAccess->createEnumeration( );
+ xRangeProperties = uno::Reference< beans::XPropertySet >( xEnum->nextElement( ), uno::UNO_QUERY_THROW );
+ }
else
xRangeProperties = uno::Reference< beans::XPropertySet >( m_xStartingRange, uno::UNO_QUERY_THROW );
/* break type
0 - No break 1 - New Colunn 2 - New page 3 - Even page 4 - odd page */
- if( m_nBreakType == 2 || m_nBreakType == 3)
- {
- xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BREAK_TYPE),
- uno::makeAny( m_nBreakType == 2 ? style::BreakType_COLUMN_AFTER : style::BreakType_PAGE_AFTER ) );
- }
- else
- {
- xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_DESC_NAME ),
- uno::makeAny( m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName ));
+ xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_DESC_NAME ),
+ uno::makeAny( m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName ));
// todo: page breaks with odd/even page numbering are not available - find out current page number to check how to change the number
// or add even/odd page break types
- if(m_bPageNoRestart || m_nPageNumber >= 0)
- {
- sal_Int16 nPageNumber = m_nPageNumber >= 0 ? static_cast< sal_Int16 >(m_nPageNumber) : 1;
- xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_NUMBER_OFFSET ),
- uno::makeAny( nPageNumber ));
- }
+ if(m_bPageNoRestart || m_nPageNumber >= 0)
+ {
+ sal_Int16 nPageNumber = m_nPageNumber >= 0 ? static_cast< sal_Int16 >(m_nPageNumber) : 1;
+ xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_NUMBER_OFFSET ),
+ uno::makeAny( nPageNumber ));
}
}
}
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx
index 0f934b37d7d8..0efe7e3ba433 100644
--- a/writerfilter/source/dmapper/PropertyMap.hxx
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -205,6 +205,7 @@ class SectionPropertyMap : public PropertyMap
void _ApplyProperties( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle );
::com::sun::star::uno::Reference< com::sun::star::text::XTextColumns > ApplyColumnProperties(
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xFollowPageStyle );
+ void CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl );
void PrepareHeaderFooterProperties( bool bFirstPage );
bool HasHeader( bool bFirstPage ) const;
bool HasFooter( bool bFirstPage ) const;
@@ -281,6 +282,7 @@ public:
void CloseSectionGroup( DomainMapper_Impl& rDM_Impl );
};
+typedef boost::shared_ptr<SectionPropertyMap> SectionPropertyMapPtr;
/*-- 28.12.2007 08:17:34---------------------------------------------------
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
index 10fc83e22dea..deb65c7c8cba 100755..100644
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -28,11 +28,12 @@
*
************************************************************************/
+#include <com/sun/star/beans/XPropertySet.hpp>
+
#include <SettingsTable.hxx>
#include <doctok/resourceids.hxx>
#include <ooxml/resourceids.hxx>
#include <stdio.h>
-#include <ListTable.hxx>
#include <ConversionHelper.hxx>
#include <rtl/ustring.hxx>
@@ -45,8 +46,6 @@ struct SettingsTable_Impl
DomainMapper& m_rDMapper;
const uno::Reference< lang::XMultiServiceFactory > m_xTextFactory;
- ListTablePtr m_pListTable;
-
::rtl::OUString m_sCharacterSpacing;
::rtl::OUString m_sDecimalSymbol;
::rtl::OUString m_sListSeparatorForFields; //2.15.1.56 listSeparator (List Separator for Field Code Evaluation)
@@ -67,14 +66,6 @@ struct SettingsTable_Impl
, m_doNotIncludeSubdocsInStats(false)
, m_bRecordChanges(false)
{}
-
- ListTablePtr GetListTable()
- {
- if(!m_pListTable)
- m_pListTable.reset(
- new ListTable( m_rDMapper, m_xTextFactory ));
- return m_pListTable;
- }
};
SettingsTable::SettingsTable(DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory) :
@@ -151,14 +142,6 @@ void SettingsTable::sprm(Sprm& rSprm)
}
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
- case NS_ooxml::LN_CT_Numbering_num: // 92613;
- /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
- case NS_ooxml::LN_CT_Numbering_abstractNum: // 92612;
- {
- m_pImpl->GetListTable()->sprm( rSprm );
- }
- break;
- /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
case NS_ooxml::LN_CT_Settings_stylePaneFormatFilter: // 92493;
break;
/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index cbf6240c15ce..8b2dbc4d9756 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -26,6 +26,7 @@
************************************************************************/
#include <StyleSheetTable.hxx>
#include <dmapper/DomainMapper.hxx>
+#include <NumberingManager.hxx>
#include <ConversionHelper.hxx>
#include <TblStylePrHandler.hxx>
#include <BorderHandler.hxx>
@@ -897,30 +898,23 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
{
// Set the outline levels
const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
- if ( pStyleSheetProperties && pStyleSheetProperties->GetOutlineLevel( ) >= 0 )
+ if ( pStyleSheetProperties )
{
- sal_Int16 nLvl = pStyleSheetProperties->GetOutlineLevel( );
- uno::Reference< text::XChapterNumberingSupplier > xOutlines ( m_pImpl->m_xTextDocument,
- uno::UNO_QUERY_THROW );
- uno::Reference< container::XIndexReplace > xRules = xOutlines->getChapterNumberingRules( );
- uno::Any aLevel = xRules->getByIndex( nLvl );
- uno::Sequence< beans::PropertyValue > aLevelProps;
- aLevel >>= aLevelProps;
-
- sal_Int32 nLen = aLevelProps.getLength( );
- sal_Int32 i = 0;
- bool bPropFound = false;
- rtl::OUString sPropName( rtl::OUString::createFromAscii( "HeadingStyleName" ) );
- while ( i < nLen && !bPropFound )
+ aPropValues.realloc( aPropValues.getLength( ) + 1 );
+
+ beans::PropertyValue aLvlVal( rPropNameSupplier.GetName( PROP_OUTLINE_LEVEL ), 0,
+ uno::makeAny( sal_Int16( pStyleSheetProperties->GetOutlineLevel( ) + 1 ) ),
+ beans::PropertyState_DIRECT_VALUE );
+ aPropValues[ aPropValues.getLength( ) - 1 ] = aLvlVal;
+
+ if ( pStyleSheetProperties->GetOutlineLevel( ) == 0 )
{
- if ( aLevelProps[i].Name.equals( sPropName ) )
- {
- aLevelProps[i].Value = uno::makeAny( ConvertStyleName( pEntry->sStyleName ) );
- bPropFound = true;
- }
- i++;
+ aPropValues.realloc( aPropValues.getLength( ) + 1 );
+ beans::PropertyValue aStyleVal( rPropNameSupplier.GetName( PROP_NUMBERING_STYLE_NAME ), 0,
+ uno::makeAny( rtl::OUString::createFromAscii( "" ) ),
+ beans::PropertyState_DIRECT_VALUE );
+ aPropValues[ aPropValues.getLength( ) - 1 ] = aStyleVal;
}
- xRules->replaceByIndex( nLvl, uno::makeAny( aLevelProps ) );
}
uno::Reference< beans::XPropertyState >xState( xStyle, uno::UNO_QUERY_THROW );
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
index 6eef483289ec..e4441bcb05fe 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.hxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.hxx
@@ -87,7 +87,7 @@ public:
typedef boost::shared_ptr<StyleSheetEntry> StyleSheetEntryPtr;
class DomainMapper;
-class WRITERFILTER_DLLPRIVATE StyleSheetTable :
+class StyleSheetTable :
public Properties,
public Table
{
diff --git a/writerfilter/source/dmapper/makefile.mk b/writerfilter/source/dmapper/makefile.mk
index dd94415aa966..4b9636855562 100755..100644
--- a/writerfilter/source/dmapper/makefile.mk
+++ b/writerfilter/source/dmapper/makefile.mk
@@ -50,8 +50,7 @@ SLOFILES= \
$(SLO)$/FontTable.obj \
$(SLO)$/GraphicHelpers.obj \
$(SLO)$/GraphicImport.obj \
- $(SLO)$/LFOTable.obj \
- $(SLO)$/ListTable.obj \
+ $(SLO)$/NumberingManager.obj \
$(SLO)$/MeasureHandler.obj \
$(SLO)$/ModelEventListener.obj \
$(SLO)$/OLEHandler.obj \
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.cxx b/writerfilter/source/doctok/WW8DocumentImpl.cxx
index cda79dad1cdf..27dfd68e4eb8 100644
--- a/writerfilter/source/doctok/WW8DocumentImpl.cxx
+++ b/writerfilter/source/doctok/WW8DocumentImpl.cxx
@@ -1726,16 +1726,6 @@ void WW8DocumentImpl::resolve(Stream & rStream)
if (pSttbRgtplc.get() != NULL)
rStream.table(NS_rtf::LN_SttbRgtplc, pSttbRgtplc);
- writerfilter::Reference<Table>::Pointer_t pListTable = getListTable();
-
- if (pListTable.get() != NULL)
- rStream.table(NS_rtf::LN_LISTTABLE, pListTable);
-
- writerfilter::Reference<Table>::Pointer_t pLFOTable = getLFOTable();
-
- if (pLFOTable.get() != NULL)
- rStream.table(NS_rtf::LN_LFOTABLE, pLFOTable);
-
writerfilter::Reference<Table>::Pointer_t pFontTable = getFontTable();
if (pFontTable.get() != NULL)
@@ -1752,6 +1742,16 @@ void WW8DocumentImpl::resolve(Stream & rStream)
{
clog << e.getText() << endl;
}
+
+ writerfilter::Reference<Table>::Pointer_t pListTable = getListTable();
+
+ if (pListTable.get() != NULL)
+ rStream.table(NS_rtf::LN_LISTTABLE, pListTable);
+
+ writerfilter::Reference<Table>::Pointer_t pLFOTable = getLFOTable();
+
+ if (pLFOTable.get() != NULL)
+ rStream.table(NS_rtf::LN_LFOTABLE, pLFOTable);
}
WW8DocumentIterator::Pointer_t pIt = begin();
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
index 90c878e3b8e2..2700a28959cc 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -47,7 +47,7 @@ using namespace ::std;
OOXMLDocumentImpl::OOXMLDocumentImpl
(OOXMLStream::Pointer_t pStream)
-: mpStream(pStream), mXNoteType(0)
+: mpStream(pStream), mXNoteType(0), mbIsSubstream( false )
{
}
@@ -137,6 +137,7 @@ OOXMLDocumentImpl::getSubStream(const rtl::OUString & rId)
writerfilter::Reference<Stream>::Pointer_t pRet( pTemp = new OOXMLDocumentImpl(pStream) );
pTemp->setModel(mxModel);
pTemp->setDrawPage(mxDrawPage);
+ pTemp->setIsSubstream( true );
return pRet;
}
@@ -320,6 +321,7 @@ void OOXMLDocumentImpl::resolve(Stream & rStream)
pDocHandler->setStream(&rStream);
pDocHandler->setDocument(this);
pDocHandler->setXNoteId(msXNoteId);
+ pDocHandler->setIsSubstream( mbIsSubstream );
uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler
(pDocHandler);
uno::Reference < xml::sax::XFastTokenHandler > xTokenHandler
@@ -327,9 +329,9 @@ void OOXMLDocumentImpl::resolve(Stream & rStream)
resolveFastSubStream(rStream, OOXMLStream::SETTINGS);
resolveFastSubStream(rStream, OOXMLStream::THEME);
- resolveFastSubStream(rStream, OOXMLStream::NUMBERING);
resolveFastSubStream(rStream, OOXMLStream::FONTTABLE);
resolveFastSubStream(rStream, OOXMLStream::STYLES);
+ resolveFastSubStream(rStream, OOXMLStream::NUMBERING);
xParser->setFastDocumentHandler( xDocumentHandler );
xParser->setTokenHandler( xTokenHandler );
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
index 7fdeb69b8bb8..5da9678c792b 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
@@ -50,6 +50,8 @@ class OOXMLDocumentImpl : public OOXMLDocument
uno::Reference<frame::XModel> mxModel;
uno::Reference<drawing::XDrawPage> mxDrawPage;
+ bool mbIsSubstream;
+
protected:
virtual void resolveFastSubStream(Stream & rStream,
OOXMLStream::StreamType_t nType);
@@ -66,6 +68,8 @@ protected:
const Id & rType,
const rtl::OUString & rNoteId);
+ void setIsSubstream( bool bSubstream ) { mbIsSubstream = bSubstream; };
+
public:
OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream);
virtual ~OOXMLDocumentImpl();
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
index d64e95b0a61a..fe95dc66a3bd 100644
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -255,10 +255,6 @@ void SAL_CALL OOXMLFastContextHandler::startFastElement
snprintf(buffer, sizeof(buffer), "%ld: startFastElement", mnInstanceNumber);
logger("MEMORY", buffer);
#endif
-
-#if DEBUG
- clog << "Token: " << fastTokenToId(Element) << endl;
-#endif
attributes(Attribs);
lcl_startFastElement(Element, Attribs);
}
@@ -770,6 +766,7 @@ void OOXMLFastContextHandler::setLastParagraphInSection()
#endif
mpParserState->setLastParagraphInSection(true);
+ mpStream->markLastParagraphInSection( );
}
void OOXMLFastContextHandler::newProperty
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
index f4feddf341ac..7007a2b6c436 100644
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
@@ -232,4 +232,9 @@ void OOXMLFastDocumentHandler::setXNoteId(const ::rtl::OUString & rXNoteId)
msXNoteId = rXNoteId;
}
+void OOXMLFastDocumentHandler::setIsSubstream( bool bSubstream )
+{
+ getContextHandler( )->getParserState( )->setInSectionGroup( bSubstream );
+}
+
}}
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
index 86f835c5c0a4..9a7fc611e3a9 100644
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
@@ -97,6 +97,8 @@ public:
OOXMLParserState::Pointer_t getParserState() const;
+ void setIsSubstream( bool bSubstream );
+
private:
OOXMLFastDocumentHandler(OOXMLFastDocumentHandler &); // not defined
void operator =(OOXMLFastDocumentHandler &); // not defined
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index f571a50a9407..15bb57e18087 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -22223,18 +22223,13 @@
<resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_HdrFtrRef" resource="Properties">
<attribute name="type" tokenid="ooxml:CT_HdrFtrRef_type"/>
<attribute name="r:id" tokenid="ooxml:CT_HdrFtrRef_id"/>
- <action name="end" action="endCharacterGroup"/>
- <action name="end" action="endParagraphGroup"/>
<action name="end" action="handleHdrFtr"/>
</resource>
<resource name="EG_HdrFtrReferences" resource="Properties">
<element name="headerReference" tokenid="ooxml:EG_HdrFtrReferences_headerReference"/>
<element name="footerReference" tokenid="ooxml:EG_HdrFtrReferences_footerReference"/>
</resource>
- <resource name="CT_HdrFtr" resource="Stream">
- <action name="start" action="startSectionGroup"/>
- <action name="end" action="endSectionGroup"/>
- </resource>
+ <resource name="CT_HdrFtr" resource="Stream"/>
<resource name="EG_SectPrContents" resource="Properties">
<element name="bidi" tokenid="ooxml:EG_SectPrContents_bidi"/>
<element name="cols" tokenid="ooxml:EG_SectPrContents_cols"/>
diff --git a/xmerge/JAVA_TREE_IS_DEPRECATED b/xmerge/JAVA_TREE_IS_DEPRECATED
deleted file mode 100755
index a736ca8d1885..000000000000
--- a/xmerge/JAVA_TREE_IS_DEPRECATED
+++ /dev/null
@@ -1 +0,0 @@
-read the readme file!
diff --git a/xmerge/README.TXT b/xmerge/README.TXT
deleted file mode 100755
index 59cd9763afb3..000000000000
--- a/xmerge/README.TXT
+++ /dev/null
@@ -1,9 +0,0 @@
-IMPORTANT!
-
-In order to make this project buildable as well as maintainable, I have moved
-the java source which made up the individual jar files from this projects into
-individual sub-folders in xmerge/source. The old sources are kept in the
-xmerge/java tree for reference only. Any changes/fixes should be made on the
-new source-trees.
-
-(Lars Opperann 2005-06-08) \ No newline at end of file
diff --git a/xmerge/java/build.xml b/xmerge/java/build.xml
deleted file mode 100644
index 4810de5fc57f..000000000000
--- a/xmerge/java/build.xml
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<project name="xmrg_java" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_java"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value=".."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package" value="."/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/xalan.jar"/>
- <pathelement location="${solar.jar}/xml-apis.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- <pathelement location="${solar.jar}/jurt.jar"/>
- <pathelement location="${solar.jar}/unoil.jar"/>
- <pathelement location="${solar.jar}/ridl.jar"/>
- <pathelement location="${solar.jar}/juh.jar"/>
- <pathelement location="${solar.jar}/jmc.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,javadoc,zipdoc"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.dir}/doc/javadoc"/>
- </target>
-
- <!-- compile java sources in ${package} and sub packages -->
- <target name="javadoc" depends="prepare" if="build.dir">
- <javadoc packagenames="org.openoffice.xmerge.*"
- destdir="${build.dir}/doc/javadoc"
- verbose="false"
- author="false"
- nodeprecated="true"
- nodeprecatedlist="true"
- use="true"
- Doctitle="OpenOffice XMerge API"
- windowtitle="OpenOffice XMerge API"
- sourcepath="${prj}/java"
- excludepackagenames="org.openoffice.xmerge.test,org.openoffice.xmerge.converter.xml.sxc.minicalc"
- classpathref="classpath">
- <link offline="true" href="http://java.sun.com/j2se/1.3/docs/api" packagelistLoc="${solar.doc}/jdk13"/>
- <bottom><![CDATA[<i>Copyright &#169 2002 OpenOffice.org</i>]]></bottom>
- <header><![CDATA[<b>OpenOffice.org<br>XMerge API</b>]]></header>
- </javadoc>
- </target>
-
- <!-- zip together all the javadocs -->
- <target name="zipdoc" depends="javadoc" if="build.dir">
- <zip zipfile="${build.dir}/doc/xmerge_javadoc.zip"
- basedir="${build.dir}/doc/javadoc"
- update="true"/>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.dir}/doc">
- <patternset>
- <include name="**"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/makefile.mk b/xmerge/java/makefile.mk
deleted file mode 100644
index 818782e307ef..000000000000
--- a/xmerge/java/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_java
-PRJ=..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/Convert.java b/xmerge/java/org/openoffice/xmerge/Convert.java
deleted file mode 100644
index 88c91c7f869c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/Convert.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-
-/**
- * The <code>Convert</code> class manages a conversion from one
- * mime-type to another. The <code>ConvertFactory</code> is
- * responsible for returning the appropriate <code>Convert</code>
- * class for a specified conversion. This class is responsible
- * for all interactions with the <code>PluginFactory</code>
- * implementation.
- *
- * @see ConverterFactory
- * @see PluginFactory
- * @see org.openoffice.xmerge.util.registry.ConverterInfo
- *
- * @author Martin Maher
- */
-public class Convert implements Cloneable {
-
- /**
- * ConvertInfo that corresponds to the from-mime/to-mime
- * conversion.
- */
- private ConverterInfo ci;
-
- /**
- * true if converting to the Office format, false if converting
- * to the device format.
- */
- private boolean toOffice;
-
- /**
- * Holds the convert input data.
- */
- private ConvertData inputCD = new ConvertData();
-
-
- /**
- * Construct a Convert class with specified <code>ConvertInfo</code>
- * registry information.
- *
- * @param ci A <code>ConvertInfo</code> object containing
- * registry information corresponding to a
- * specific plug-in.
- * @param toOffice true if converting to the Office format,
- * false if converting to the device format.
- */
- public Convert(ConverterInfo ci, boolean toOffice) {
- this.ci = ci;
- this.toOffice = toOffice;
- }
-
-
- /**
- * Adds an <code>InputStream</code> to be used as input by the
- * <code>Convert</code> class. It is possible that many files
- * need to be converted into a single output <code>Documetn</code>,
- * so this function may be called more than one time. It is the
- * plug-in's responsibility to know how to handle the input.
- *
- * @param name The name corresponding to the <code>InputStream</code>.
- * @param is <code>InputStream</code> to be used as input.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void addInputStream(String name, InputStream is)
- throws IOException {
-
- Document inputDoc;
-
- if (toOffice == true) {
- inputDoc = ci.getPluginFactory().createDeviceDocument(name, is);
- } else {
- inputDoc = ci.getPluginFactory().createOfficeDocument(name, is);
- }
- inputCD.addDocument(inputDoc);
- }
-
- /**
- * Adds an <code>InputStream</code> to be used as input by the
- * <code>Convert</code> class. It is possible that many files
- * need to be converted into a single output <code>Documetn</code>,
- * so this function may be called more than one time. It is the
- * plug-in's responsibility to know how to handle the input.
- *
- * @param name The name corresponding to the <code>InputStream</code>.
- * @param is <code>InputStream</code> to be used as input.
- * @param isZip <code>boolean</code> to identify that incoming stream is * zipped
- *
- * @throws IOException If any I/O error occurs.
- */
- public void addInputStream(String name, InputStream is,boolean isZip)
- throws IOException {
-
- Document inputDoc;
-
- if (toOffice == true) {
- inputDoc = ci.getPluginFactory().createDeviceDocument(name, is);
- } else {
- inputDoc = ci.getPluginFactory().createOfficeDocument(name, is, isZip);
- }
- inputCD.addDocument(inputDoc);
- }
-
-
- /**
- * Adds the original Document to the Convert Class. This
- * is to be used for merges. If this Document is added then
- * it is assumed that a convert with merge is the desired
- * operation.
- *
- * @param name The <code>Document</code> name.
- * @param is <code>InputStream</code> object corresponding
- * to the <code>Document</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public DocumentMerger getDocumentMerger(Document origDoc)
- throws IOException {
-
- DocumentMergerFactory myDocMergerFactory = ci.getDocMergerFactory();
- DocumentMerger merger = myDocMergerFactory.createDocumentMerger(origDoc);
- return merger;
- }
-
- /**
- * Resets the input queue, so that the user can use this class to
- * perform another conversion. This causes the
- * <code>addInputStream</code> method to accept input for the next
- * conversion.
- */
- public void reset() {
- inputCD.reset();
- }
-
-
- /**
- * Clones a Convert object so another Convert object can
- * do the same conversion. <code>InputStream<code> objects passed
- * in via calls to the <code>addInputStream</code> method are not
- * copied.
- *
- * @return The cloned <code>Convert</code> object.
- */
- public Object clone() {
-
- Convert aClone = null;
-
- try {
- aClone = (Convert) super.clone();
- aClone.reset();
- }
- catch (CloneNotSupportedException e) {
- System.out.println("Convert clone could not be created");
- }
- return aClone;
- }
-
-
- /**
- * Convert the input specified in calls to the <code>addInputStream</code>
- * method to the output format specified by this <code>Convert</code>
- * class.
- *
- * @return The output data.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData convert() throws ConvertException, IOException {
-
- ConvertData dataOut = new ConvertData();
-
- if (toOffice) {
-
- // From device format to Office format
- //
- DocumentDeserializerFactory myDocDeserializerFactory =
- ci.getDocDeserializerFactory();
- DocumentDeserializer deser =
- myDocDeserializerFactory.createDocumentDeserializer(inputCD);
- Document deviceDoc = deser.deserialize();
-
-
- dataOut.addDocument(deviceDoc);
- return dataOut;
-
- } else {
-
- // From Office format to device format
- //
- DocumentSerializerFactory myDocSerializerFactory =
- ci.getDocSerializerFactory();
-
- Enumeration e = inputCD.getDocumentEnumeration();
-
- Document doc = (Document) e.nextElement();
- DocumentSerializer ser = myDocSerializerFactory.createDocumentSerializer(doc);
- dataOut = ser.serialize();
-
- return dataOut;
- }
- }
-
- /**
- * NEW (HJ):
- * Convert the input specified in calls to the <code>addInputStream</code>
- * method to the output format specified by this <code>Convert</code>
- * class.
- * The (de)serializer may use the URLs to resolve links and choose name(s)
- * for destination document(s).
- *
- * @return The output data.
- *
- * @param sFromURL URL of the source document (may be null if unknown)
- * @param sToURL URL of the destination document (may be null if unknown)
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData convert(String sFromURL, String sToURL) throws
- ConvertException, IOException {
-
- ConvertData dataOut = new ConvertData();
-
- if (toOffice) {
-
- // From device format to Office format
- //
- DocumentDeserializerFactory myDocDeserializerFactory =
- ci.getDocDeserializerFactory();
- DocumentDeserializer deser =
- myDocDeserializerFactory.createDocumentDeserializer(inputCD);
- Document officeDoc = deser instanceof DocumentSerializer2 ?
- ((DocumentDeserializer2) deser).deserialize(sFromURL,sToURL) :
- deser.deserialize();
-
-
- dataOut.addDocument(officeDoc);
- return dataOut;
-
- } else {
-
- // From Office format to device format
- //
- DocumentSerializerFactory myDocSerializerFactory =
- ci.getDocSerializerFactory();
-
- Enumeration e = inputCD.getDocumentEnumeration();
-
- Document doc = (Document) e.nextElement();
- DocumentSerializer ser = myDocSerializerFactory.createDocumentSerializer(doc);
- dataOut = ser instanceof DocumentSerializer2 ?
- ((DocumentSerializer2) ser).serialize(sFromURL,sToURL) :
- ser.serialize();
-
- return dataOut;
- }
- }
-
- /**
- * Returns the appropriate &quot;Office&quot; <code>Document</code>
- * object for this plug-in.
- *
- * @param name The name of the <code>Document</code> to create.
- * @param is The <code>InputStream</code> corresponding to the
- * <code>Document</code> to create.
- *
- * @return The appropriate &quot;Office&quot; <code>Document</code>
- * object for this plug-in.
- *
- * @throws IOException If any I/O error occurs.
- */
- public Document getOfficeDocument(String name, InputStream is)
- throws IOException {
- return(ci.getPluginFactory().createOfficeDocument(name, is));
- }
-
-
- /**
- * Returns the appropriate &quot;Device&quot; <code>Document</code>
- * object for this plug-in.
- *
- * @param name The name of the <code>Document</code> to create.
- * @param is The <code>InputStream</code> corresponding to the
- * <code>Document</code> to create.
- *
- * @return The appropriate &quot;Device&quot; <code>Document</code>
- * object for this plug-in.
- *
- * @throws IOException If any I/O error occurs.
- */
- public Document getDeviceDocument(String name, InputStream is)
- throws IOException {
- return(ci.getPluginFactory().createDeviceDocument(name, is));
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/ConvertData.java b/xmerge/java/org/openoffice/xmerge/ConvertData.java
deleted file mode 100644
index ed9d2146a9e7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/ConvertData.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import java.util.Vector;
-import java.util.Enumeration;
-
-/**
- * <p><code>ConvertData</code> is used as a container for passing
- * <code>Document</code> objects in and out of the <code>Convert</code>
- * class. The <code>ConvertData</code> contains a <code>String</code>
- * name and a <code>Vector</code> of <code>Document</code> objects.</p>
- *
- * @author Martin Maher
- */
-public class ConvertData {
-
- /**
- * Vector of <code>Document</code> objects.
- */
- private Vector v = new Vector();
-
- /**
- * Name of the <code>ConvertData</code> object.
- */
- private String name;
-
-
- /**
- * Resets ConvertData. This empties all <code>Document</code>
- * objects from this class. This allows reuse of a
- * <code>ConvertData</code>.
- */
- public void reset() {
- name = null;
- v.removeAllElements();
- }
-
- /**
- * Returns the <code>Document</code> name.
- *
- * @return The <code>Document</code> name.
- */
- public String getName() {
- return name;
- }
-
-
- /**
- * Sets the <code>Document</code> name.
- *
- * @param docName The name of the <code>Document</code>.
- */
- public void setName(String docName) {
- name = docName;
- }
-
-
- /**
- * Adds a <code>Document</code> to the vector.
- *
- * @param doc The <code>Document</code> to add.
- */
- public void addDocument(Document doc) {
- v.add(doc);
- }
-
-
- /**
- * Gets an <code>Enumeration</code> to access the <code>Vector</code>
- * of <code>Document</code> objects.
- *
- * @return The <code>Enumeration</code> to access the
- * <code>Vector</code> of <code>Document</code> objects.
- */
- public Enumeration getDocumentEnumeration() {
- Enumeration enumer = v.elements();
- return (enumer);
- }
-
-
- /**
- * Gets the number of <code>Document</code> objects currently stored
- *
- * @return The number of <code>Document</code> objects currently
- * stored.
- */
- public int getNumDocuments() {
- return (v.size());
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/ConvertException.java b/xmerge/java/org/openoffice/xmerge/ConvertException.java
deleted file mode 100644
index e92d5dabddf1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/ConvertException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * This <code>Exception</code> is thrown by convert algorithms.
- */
-public class ConvertException extends Exception {
-
- /**
- * Exception thrown by convert algorithms.
- *
- * @param message Message to be included in the
- * <code>Exception</code>.
- */
- public ConvertException(String message) {
- super(message);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/ConverterCapabilities.java b/xmerge/java/org/openoffice/xmerge/ConverterCapabilities.java
deleted file mode 100644
index f02384c880ef..000000000000
--- a/xmerge/java/org/openoffice/xmerge/ConverterCapabilities.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * <p>A <code>ConverterCapabilities</code> object is used by
- * <code>DocumentMerger</code> implementations. The
- * <code>ConverterCapabilities</code> indicates which
- * &quot;Office&quot; XML tags are supported by the
- * &quot;Device&quot; format.</p>
- *
- * @see org.openoffice.xmerge.PluginFactory
- * @see org.openoffice.xmerge.DocumentMerger
- */
-public interface ConverterCapabilities {
-
-
- /**
- * Test to see if the device document format supports the
- * tag in question.
- *
- * @param tag The tag to check.
- *
- * @return true if the device format supports the
- * tag, false otherwise.
- */
- boolean canConvertTag(String tag);
-
-
- /**
- * Test to see if the device document format supports the
- * tag attribute in question.
- *
- * @param tag The tag to check.
- * @param attribute The tag attribute to check.
- *
- * @return true if the device format supports the
- * attribute, false otherwise.
- */
- boolean canConvertAttribute(String tag, String attribute);
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/ConverterFactory.java b/xmerge/java/org/openoffice/xmerge/ConverterFactory.java
deleted file mode 100644
index 806591db335d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/ConverterFactory.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import org.openoffice.xmerge.util.registry.ConverterInfoMgr;
-
-/**
- * Factory that provides access to <code>Convert</code> objects, which
- * are used to do a conversion. The <code>ConvertFactory</code> does
- * this via the <code>ConvertInfoMgr</code> which maintains a list of
- * which <code>Convert</code> objects are available and their
- * capabilities.
- *
- * @see Convert
- * @see org.openoffice.xmerge.util.registry.ConverterInfoMgr
- *
- * @author Martin Maher
- */
-public class ConverterFactory {
-
- /**
- * Confirms whether or not a particular conversion can be done
- * based on the Mime types of the files to be converted to and
- * from.
- *
- * @param mimeTypeIn The mime input type.
- * @param mimeTypeOut The mime output type.
- *
- * @return true if the conversion is possible, false otherwise.
- */
- public boolean canConvert(String mimeTypeIn, String mimeTypeOut) {
-
- ConverterInfo foundInfo = null;
-
- // findConverterInfo expects the second paramenter to be the
- // destination MimeType
- if (foundInfo.isValidOfficeType(mimeTypeOut))
- foundInfo = ConverterInfoMgr.findConverterInfo(mimeTypeIn, mimeTypeOut);
- else
- foundInfo = ConverterInfoMgr.findConverterInfo(mimeTypeOut, mimeTypeIn);
-
- if (foundInfo != null)
- return true;
- else
- return false;
- }
-
-
- /**
- * Returns the <code>Convert</code> object that converts
- * the specified device/office mime type conversion. If there
- * are multiple <code>Converter</code> objects registered
- * that support this conversion, only the first is returned.
- *
- * @param mimeTypeIn The mime input type.
- * @param mimeTypeOut The mime output type.
- *
- * @return The first <code>Convert</code> object that supports
- * the specified conversion.
- */
- public Convert getConverter(String mimeTypeIn, String mimeTypeOut) {
-
- ConverterInfo foundInfo = null;
- boolean toOffice;
-
- toOffice = foundInfo.isValidOfficeType(mimeTypeOut);
-
- // findConverterInfo expects the second paramenter to be the
- // destination MimeType
- if (toOffice)
- foundInfo = ConverterInfoMgr.findConverterInfo(mimeTypeIn, mimeTypeOut);
- else
- foundInfo = ConverterInfoMgr.findConverterInfo(mimeTypeOut, mimeTypeIn);
-
- if (foundInfo != null)
- return getConverter(foundInfo, toOffice);
- else
- return null;
- }
-
-
- /**
- * Returns the <code>Convert</code> object that is described
- * by the <code>ConverterInfo</code> parameter.
- *
- * @param ci The <code>ConverterInfo</code> describing the converter.
- *
- * @param toOffice true to convert to office, false to convert to device.
- *
- * @return The <code>Convert</code> object
- */
- public Convert getConverter(ConverterInfo ci, boolean toOffice) {
-
- Convert myConvert = new Convert(ci, toOffice);
- return myConvert;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/Document.java b/xmerge/java/org/openoffice/xmerge/Document.java
deleted file mode 100644
index 94fac6dd136d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/Document.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * <p>A <code>Document</code> represents any <code>Document</code>
- * to be converted and the resulting <code>Document</code> from any
- * conversion.</p>
- *
- * <p>It is created by the <code>PluginFactory</code> object's {@link
- * org.openoffice.xmerge.PluginFactory#createOfficeDocument
- * createOfficeDocument} method or the {@link
- * org.openoffice.xmerge.PluginFactory#createDeviceDocument
- * createDeviceDocument} method.</p>
- *
- * @author Herbie Ong
- * @see org.openoffice.xmerge.PluginFactory
- */
-public interface Document {
-
- /**
- * <p>Writes out the <code>Document</code> content to the specified
- * <code>OutputStream</code>.</p>
- *
- * <p>This method may not be thread-safe.
- * Implementations may or may not synchronize this
- * method. User code (i.e. caller) must make sure that
- * calls to this method are thread-safe.</p>
- *
- * @param os <code>OutputStream</code> to write out the
- * <code>Document</code> content.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream os) throws IOException;
-
-
- /**
- * <p>Reads the content from the <code>InputStream</code> into
- * the <code>Document</code>.</p>
- *
- * <p>This method may not be thread-safe.
- * Implementations may or may not synchronize this
- * method. User code (i.e. caller) must make sure that
- * calls to this method are thread-safe.</p>
- *
- * @param is <code>InputStream</code> to read in the
- * <code>Document</code> content.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void read(InputStream is) throws IOException;
-
-
- /**
- * Returns the <code>Document</code> name with no file extension.
- *
- * @return The <code>Document</code> name with no file extension.
- */
- public String getName();
-
-
- /**
- * Returns the <code>Document</code> name with file extension.
- *
- * @return The <code>Document</code> name with file extension.
- */
- public String getFileName();
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentDeserializer.java b/xmerge/java/org/openoffice/xmerge/DocumentDeserializer.java
deleted file mode 100644
index 3065dff194d0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentDeserializer.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import java.io.IOException;
-
-/**
- * <p>A <code>DocumentDeserializer</code> represents a converter that
- * converts &quot;Device&quot; <code>Document</code> objects into the
- * &quot;Office&quot; <code>Document</code> format.</p>
- *
- * <p>The <code>DocumentDeserializer</code> object is created by
- * the </code>PluginFactory</code> {@link
- * org.openoffice.xmerge.DocumentDeserializerFactory#createDocumentDeserializer
- * createDocumentDeserializer} method. When it is constructed, a
- * <code>ConvertData</code> object is passed in to be used as input.</p>
- *
- * @author Herbie Ong
- * @see org.openoffice.xmerge.PluginFactory
- * @see org.openoffice.xmerge.DocumentDeserializerFactory
- */
-public interface DocumentDeserializer {
-
- /**
- * <p>Convert the data passed into the <code>DocumentDeserializer</code>
- * constructor into the &quot;Office&quot; <code>Document</code>
- * format.</p>
- *
- * <p>This method may or may not be thread-safe. It is expected
- * that the user code does not call this method in more than one
- * thread. And for most cases, this method is only done once.</p>
- *
- * @return The resulting <code>Document</code> object from conversion.
- *
- * @throws ConvertException If any Convert error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public Document deserialize() throws ConvertException, IOException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentDeserializer2.java b/xmerge/java/org/openoffice/xmerge/DocumentDeserializer2.java
deleted file mode 100644
index 3c81daf20b03..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentDeserializer2.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import java.io.IOException;
-
-/**
- * <p>A <code>DocumentDeserializer</code> represents a converter that
- * converts &quot;Device&quot; <code>Document</code> objects into the
- * &quot;Office&quot; <code>Document</code> format.</p>
- *
- * <p>The <code>PluginFactory</code> {@link
- * org.openoffice.xmerge.DocumentDeserializerFactory#createDocumentDeserializer
- * createDocumentDeserializer} method creates a <code>DocumentDeserializer</code>,
- * which may or may not implement <code>DocumentDeserializer2</code>.
- * When it is constructed, a
- * <code>ConvertData</code> object is passed in to be used as input.</p>
- *
- * @author Henrik Just
- * @see org.openoffice.xmerge.PluginFactory
- * @see org.openoffice.xmerge.DocumentDeserializerFactory
- */
-public interface DocumentDeserializer2 extends DocumentSerializer {
-
- /**
- * <p>Convert the data passed into the <code>DocumentDeserializer2</code>
- * constructor into the &quot;Office&quot; <code>Document</code>
- * format. The URL's passed may be used to resolve links and to choose the
- * name of the output office document.</p>
- *
- * <p>This method may or may not be thread-safe. It is expected
- * that the user code does not call this method in more than one
- * thread. And for most cases, this method is only done once.</p>
- *
- * @return The resulting <code>Document</code> object from conversion.
- *
- * @param deviceURL URL of the device document (may be null if unknown)
- * @param officeURL URL of the office document (may be null if unknown)
- *
- * @throws ConvertException If any Convert error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public Document deserialize(String deviceURL, String officeURL) throws
- ConvertException, IOException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentDeserializerFactory.java b/xmerge/java/org/openoffice/xmerge/DocumentDeserializerFactory.java
deleted file mode 100644
index 4b4e6ba04a2b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentDeserializerFactory.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * <p>A <code>DocumentDeserializer</code> object is used to convert
- * from the &quot;Device&quot; <code>Documetn</code> format to the
- * &quot;Office&quot; <code>Document</code> format.</p>
- *
- * <p>All plug-in implementations of the <code>PluginFactory</code>
- * interface that also support deserialization must also
- * implement this interface.</p>
- *
- * @see PluginFactory
- * @see DocumentDeserializer
- */
-public interface DocumentDeserializerFactory {
-
- /**
- * The <code>DocumentDeserializer</code> is used to convert
- * from the &quot;Device&quot; <code>Document</code> format to
- * the &quot;Office&quot; <code>Document</code> format.</p>
- *
- * The <code>ConvertData</code> object is passed along to the
- * created <code>DocumentDeserializer</code> via its constructor.
- * The <code>ConvertData</code> is read and converted when the
- * the <code>DocumentDeserializer</code> object's
- * <code>deserialize</code> method is called.
- * </p>
- *
- * @param cd <code>ConvertData</code> object that the created
- * <code>DocumentDeserializer</code> object uses as
- * input.
- *
- * @return A <code>DocumentDeserializer</code> object.
- */
-
- public DocumentDeserializer createDocumentDeserializer(ConvertData cd);
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentMerger.java b/xmerge/java/org/openoffice/xmerge/DocumentMerger.java
deleted file mode 100644
index 0f3f75d2089e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentMerger.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * <p>A <code>DocumentMerger</code> can merge changes from a modified
- * &quot;Device&quot; <code>Document</code> to the assigned original
- * &quot;Office&quot; <code>Document</code>.</p>
- *
- * <p>Merge is useful when an <code>OfficeDocument</code>
- * is converted to a &quot;Device&quot; <code>Document</code> format,
- * and the &quot;Device&quot; <code>Document</code> version is modified.
- * Those changes can be merged back into the original
- * <code>OfficeDocument</code> with the merger. The merger is capable
- * of doing this even if the &quot;Device&quot; format is lossy in
- * comparison to the <code>OfficeDocument</code> format.</p>
- *
- * <p>The <code>ConverterCapabilities</code> object is what the
- * DocumentMerger utilizes to know how the &quot;Office&quot;
- * <code>Document</code> tags are supported in the &quot;Device&quot;
- * format.</p>
- *
- * <p>The <code>DocumentMerger</code> object is created by a
- * the <code>DocumentMergerFactory</code> {@link
- * org.openoffice.xmerge.DocumentMergerFactory#createDocumentMerger
- * createDocumenMerger} method. When it is constructed, the
- * &quot;Original Office&quot; <code>Document</code> object is
- * passed in to be used as input.</p>
- *
- * @author Herbie Ong
- * @see org.openoffice.xmerge.PluginFactory
- * @see org.openoffice.xmerge.DocumentMergerFactory
- * @see org.openoffice.xmerge.ConverterCapabilities
- */
-public interface DocumentMerger {
-
- /**
- * <p>This method will find the changes that had happened
- * in the <code>modifiedDoc</code> <code>Document</code>
- * object given the designated original <code>Document</code>.</p>
- *
- * <p>Note that this process may need the knowledge of the
- * conversion process since some conversion process are lossy.
- * Items/Data that are lost during the conversion process are not
- * classified as changes. The main target of this method
- * is to apply the changes done in <code>modifiedDoc</code>
- * into the assigned original <code>Document</code> object, thus
- * it also will try to preserve items that were originally in
- * the original <code>Document</code>, but never got transferred
- * during the
- * {@link org.openoffice.xmerge.DocumentSerializer#serialize
- * serialize} process/method call. After this method call, the
- * original <code>Document</code> object will contain the changes
- * applied.</p>
- *
- * <p>This method may or may not be thread-safe.
- * Also, it is expected that the user uses only one instance
- * of a <code>DocumentMerger</code> object per merge process.
- * Create another <code>DocumentMerger</code> object for another
- * merge process.</p>
- *
- * @param modifiedDoc device <code>Document</code> object.
- *
- * @throws MergeException If any merge error occurs.
- */
- public void merge(Document modifiedDoc) throws MergeException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentMergerFactory.java b/xmerge/java/org/openoffice/xmerge/DocumentMergerFactory.java
deleted file mode 100644
index 7a30a56b6137..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentMergerFactory.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * <p>All plug-in implementations of the <code>PluginFactory</code>
- * interface that also support merging must also implement
- * this interface.</p>
- *
- * <p>Merge is useful when an <code>OfficeDocument</code>
- * is converted to a &quot;Device&quot; <code>Document</code> format,
- * and the &quot;Device&quot; <code>Document</code> version is modified.
- * Those changes can be merged back into the original
- * <code>OfficeDocument</code> with the merger. The merger is capable
- * of doing this even if the &quot;Device&quot; format is lossy in
- * comparison to the <code>OfficeDocument</code> format.</p>
- *
- * @see PluginFactory
- * @see DocumentMerger
- * @see ConverterCapabilities
- *
- */
-public interface DocumentMergerFactory {
-
- /**
- * <p>Create a <code>DocumentMerger</code> object given a
- * <code>Document</code> object.</p>
- *
- * @param doc <code>Document</code> object that the created
- * <code>DocumentMerger</code> object uses as a base
- * <code>Document</code> for merging changes into.
- *
- * @return A <code>DocumentMerger</code> object or null if none
- * exists.
- */
- public DocumentMerger createDocumentMerger(Document doc);
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentSerializer.java b/xmerge/java/org/openoffice/xmerge/DocumentSerializer.java
deleted file mode 100644
index 4e7beba2f575..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentSerializer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import java.io.IOException;
-
-/**
- * <p>A <code>DocumentSerializer</code> represents a converter that
- * converts a &quot;Office&quot; <code>Document</code> to a
- * &quot;Device&quot; <code>Document</code> format.</p>
- *
- * <p>The <code>DocumentSerializer</code> object is created by a
- * the <code>PluginFactory</code> {@link
- * org.openoffice.xmerge.DocumentSerializerFactory#createDocumentSerializer
- * createDocumentSerializer} method. When it is constructed, a
- * &quot;Office&quot; <code>Document</code> object is passed in to
- * be used as input.</p>
- *
- * @author Herbie Ong
- * @see org.openoffice.xmerge.PluginFactory
- * @see org.openoffice.xmerge.DocumentSerializerFactory
- */
-public interface DocumentSerializer {
-
- /**
- * <p>Convert the data passed into the <code>DocumentSerializer</code>
- * constructor into the &quot;Device&quot; <code>Document</code>
- * format.</p>
- *
- * <p>This method may or may not be thread-safe. It is expected
- * that the user code does not call this method in more than one
- * thread. And for most cases, this method is only done once.</p>
- *
- * @return <code>ConvertData</code> object to pass back the
- * converted data.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData serialize() throws ConvertException, IOException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentSerializer2.java b/xmerge/java/org/openoffice/xmerge/DocumentSerializer2.java
deleted file mode 100644
index 41e7bebe3812..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentSerializer2.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import java.io.IOException;
-
-/**
- * <p>A <code>DocumentSerializer2</code> represents a converter that
- * converts a &quot;Office&quot; <code>Document</code> to a
- * &quot;Device&quot; <code>Document</code> format.</p>
- *
- * <p>The <code>PluginFactory</code> {@link
- * org.openoffice.xmerge.DocumentSerializerFactory#createDocumentSerializer
- * createDocumentSerializer} method creates a <code>DocumentSerializer</code>,
- * which may or may not implement <code>DocumentSerializer2</code>.
- * When it is constructed, a
- * &quot;Office&quot; <code>Document</code> object is passed in to
- * be used as input.</p>
- *
- * @author Henrik Just
- * @see org.openoffice.xmerge.PluginFactory
- * @see org.openoffice.xmerge.DocumentSerializerFactory
- */
-public interface DocumentSerializer2 extends DocumentSerializer {
-
- /**
- * <p>Convert the data passed into the <code>DocumentSerializer2</code>
- * constructor into the &quot;Device&quot; <code>Document</code>
- * format. The URL's passed may be used to resolve links and to name
- * the output device document(s).</p>
- *
- * <p>This method may or may not be thread-safe. It is expected
- * that the user code does not call this method in more than one
- * thread. And for most cases, this method is only done once.</p>
- *
- * @return <code>ConvertData</code> object to pass back the
- * converted data.
- *
- * @param officeURL URL of the office document (may be null if unknown)
- * @param deviceURL URL of the device document (may be null if unknown)
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData serialize(String officeURL, String deviceURL) throws
- ConvertException, IOException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/DocumentSerializerFactory.java b/xmerge/java/org/openoffice/xmerge/DocumentSerializerFactory.java
deleted file mode 100644
index 3837156a791d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/DocumentSerializerFactory.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * <p>A <code>DocumentSerializer</code> object is used to convert
- * from the &quot;Office&quot; <code>Document</code> format to the
- * &quot;Device&quot; <code>Document</code> format.</p>
- *
- * <p>All plug-in implementations of the <code>PluginFactory</code>
- * interface that also support serialization must also
- * implement this interface.</p>
- *
- * @see PluginFactory
- * @see DocumentSerializer
- */
-public interface DocumentSerializerFactory {
-
- /**
- * <p>The <code>DocumentSerializer</code> is used to convert
- * from the &quot;Office&quot; <code>Document</code> format
- * to the &quot;Device&quot; <code>Document</code> format.</p>
- *
- * The <code>ConvertData</code> object is passed along to the
- * created <code>DocumentSerializer</code> via its constructor.
- * The <code>ConvertData</code> is read and converted when the
- * the <code>DocumentSerializer</code> object's
- * <code>serialize</code> method is called.
- *
- * @param doc <code>Document</code> object that the created
- * <code>DocumentSerializer</code> object uses
- * as input.
- *
- * @return A <code>DocumentSerializer</code> object.
- */
- public DocumentSerializer createDocumentSerializer(Document doc);
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/MergeException.java b/xmerge/java/org/openoffice/xmerge/MergeException.java
deleted file mode 100644
index 6ea95c53873b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/MergeException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * This <code>Exception</code> is thrown by merge algorithms.
- */
-public class MergeException extends Exception {
-
- /**
- * Exception thrown by merge algorithms.
- *
- * @param message Message to be included in the
- * <code>Exception</code>.
- */
- public MergeException(String message) {
- super(message);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/PluginFactory.java b/xmerge/java/org/openoffice/xmerge/PluginFactory.java
deleted file mode 100644
index 77cc5ea34faa..000000000000
--- a/xmerge/java/org/openoffice/xmerge/PluginFactory.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * <p>A <code>PluginFactory</code> encapsulates the
- * conversions from one <code>Document</code> format to another.
- * It provides conversions in both directions. Refer to the
- * <a href="package-summary.html#package_description">
- * package description</a> for its usage.</p>
- *
- * <p>Conversion from the &quot;Office&quot; <code>Document</code>
- * format to a &quot;Device&quot; <code>Document</code> format may
- * be lossy, i.e. some information may be lost. If a plug-in
- * implements the <code>DocumentMergerFactory</code> interface,
- * then there is the possibility for merging the changes done on the
- * &quot;Device&quot; <code>Document</code> back to the original
- * &quot;Office&quot; <code>Document</code> via the
- * <code>DocumentMerger</code> interface.</p>
- *
- * <p>Plug-ins that convert from the &quot;Device&quot;
- * <code>Document</code> format to the &quot;Office&quot;
- * <code>Document</code> format must implement the
- * <code>DocumentDeserializerFactory</code> interface. Plug-ins
- * that convert from the &quot;Office&quot; <code>Document</code>
- * format to the &quot;Device&quot; format must implement the
- * <code>DocumentSerializerFactory</code> interface.
- *
- * <p>All plug-ins should have an associated Plugin Configuration XML
- * File which describes the capabilities of the plug-in. If the
- * plug-in is bundled in a jarfile, then this XML file is also bundled
- * with the jarfile. The data in the XML file is managed by the
- * <code>ConverterInfo</code> object. The <code>ConverterInfoMgr</code>
- * manages a registry of all <code>ConverterInfo</code> objects. For
- * more information about this XML file, refer to
- * <a href="converter/xml/sxc/package-summary.html">
- * org.openoffice.xmerge.util.registry</a>.</p>
- *
- * @author Herbie Ong
- * @see Document
- * @see DocumentSerializer
- * @see DocumentSerializerFactory
- * @see DocumentDeserializer
- * @see DocumentDeserializerFactory
- * @see DocumentMerger
- * @see DocumentMergerFactory
- * @see ConverterInfo
- * @see org.openoffice.xmerge.util.registry.ConverterInfoMgr
- */
-
-public abstract class PluginFactory {
-
- /**
- * Cached <code>ConvertInfo</code> object.
- */
- private ConverterInfo ciCache;
-
-
- /**
- * Constructor that caches the <code>ConvertInfo</code> that
- * corresponds to the registry information for this plug-in.
- *
- * @param ci <code>ConvertInfo</code> object.
- */
- public PluginFactory(ConverterInfo ci) {
- ciCache=ci;
- }
-
-
- /**
- * Returns the <code>ConvertInfo</code> that corresponds to this
- * plug-in.
- *
- * @return The <code>ConvertInfo</code> that corresponds to this
- * plug-in.
- */
- public ConverterInfo getConverterInfo () {
- return ciCache;
- }
-
-
- /**
- * <p>Create a <code>Document</code> object that corresponds to
- * the Office data passed in via the <code>InputStream</code>
- * object. This abstract method must be implemented for each
- * plug-in.</p>
- *
- * <p>This method will read from the given <code>InputStream</code>
- * object. The returned <code>Document</code> object will contain
- * the necessary data for the other objects created by the
- * <code>PluginFactory</code> to process, like a
- * <code>DocumentSerializer</code> object and a
- * <code>DocumentMerger</code> object.</p>
- *
- * @param name The <code>Document</code> name.
- * @param is <code>InputStream</code> object corresponding
- * to the <code>Document</code>.
- *
- * @return A <code>Document</code> object representing the
- * particular <code>Document</code> format for the
- * <code>PluginFactory</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract Document createOfficeDocument(String name, InputStream is)
- throws IOException;
-
-
- /**
- * <p>Create a <code>Document</code> object that corresponds to
- * the Office data passed in via the <code>InputStream</code>
- * object. This abstract method must be implemented for each
- * plug-in.</p>
- *
- * <p>This method will read from the given <code>InputStream</code>
- * object. The returned <code>Document</code> object will contain
- * the necessary data for the other objects created by the
- * <code>PluginFactory</code> to process, like a
- * <code>DocumentSerializer</code> object and a
- * <code>DocumentMerger</code> object.</p>
- *
- * @param name The <code>Document</code> name.
- * @param is <code>InputStream</code> object corresponding
- * to the <code>Document</code>.
- * @param isZip <code>boolean</code> to show that the created office
- * document is to be zipped.
- *
- * @return A <code>Document</code> object representing the
- * particular <code>Document</code> format for the
- * <code>PluginFactory</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract Document createOfficeDocument(String name, InputStream is,boolean isZip)
- throws IOException;
-
-
- /**
- * <p>Create a <code>Document</code> object that corresponds to
- * the device data passed in via the <code>InputStream</code>
- * object. This abstract method must be implemented for each
- * plug-in.</p>
- *
- * <p>This method will read from the given <code>InputStream</code>
- * object. The returned <code>Document</code> object will contain
- * the necessary data for the other objects created by the
- * <code>PluginFactory</code> to process, like a
- * <code>DocumentSerializer</code> object and a
- * <code>DocumentMerger</code> object.</p>
- *
- * @param name The <code>Document</code> name.
- * @param is <code>InputStream</code> object corresponding
- * to the <code>Document</code>.
- *
- * @return A <code>Document</code> object representing the
- * particular <code>Document</code> format for the
- * <code>PluginFactory</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract Document createDeviceDocument(String name, InputStream is)
- throws IOException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/Version.java b/xmerge/java/org/openoffice/xmerge/Version.java
deleted file mode 100644
index 8810068d4c72..000000000000
--- a/xmerge/java/org/openoffice/xmerge/Version.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge;
-
-/**
- * This class provides a quick utility to check the version of the
- * jar file. It has a main method that prints out the version
- * info. It also provides two static methods for runtime classes
- * to query.
- *
- * @author Herbie Ong
- */
-public final class Version {
-
- private static Package pkg;
-
- private static Version version;
-
- static {
-
- version = new Version();
- pkg = version.getClass().getPackage();
- }
-
- /**
- * Private constructor to provide a singleton instance.
- */
- private Version() {
- }
-
- /**
- * Returns specification version.
- *
- * @return The specification version.
- */
- public static String getSpecificationVersion() {
- return pkg.getSpecificationVersion();
- }
-
- /**
- * Returns implementation version.
- *
- * @return The implementation version.
- */
-
- public static String getImplementationVersion() {
- return pkg.getImplementationVersion();
- }
-
- /**
- * Main method for printing out version info.
- *
- * @param args Array of arguments, not used.
- */
- public static void main(String args[]) {
-
- System.out.println("Specification-Title: " + pkg.getSpecificationTitle());
- System.out.println("Specification-Vendor: " + pkg.getSpecificationVendor());
- System.out.println("Specification-Version: " + pkg.getSpecificationVersion());
- System.out.println("Implementation-Version: " + pkg.getImplementationVersion());
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/build.xml b/xmerge/java/org/openoffice/xmerge/build.xml
deleted file mode 100644
index 3692b85dd9bb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/build.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_joo_xmerge" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_joo_xmerge"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package" value="org/openoffice/xmerge"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set whether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/Convert.java"/>
- <include name="${package}/ConverterCapabilities.java"/>
- <include name="${package}/ConverterFactory.java"/>
- <include name="${package}/ConvertData.java"/>
- <include name="${package}/PluginFactory.java"/>
- <include name="${package}/Document.java"/>
- <include name="${package}/DocumentDeserializer.java"/>
- <include name="${package}/DocumentDeserializer2.java"/>
- <include name="${package}/DocumentDeserializerFactory.java"/>
- <include name="${package}/DocumentMerger.java"/>
- <include name="${package}/DocumentMergerFactory.java"/>
- <include name="${package}/DocumentSerializer.java"/>
- <include name="${package}/DocumentSerializer2.java"/>
- <include name="${package}/DocumentSerializerFactory.java"/>
- <include name="${package}/Version.java"/>
- <include name="${package}/ConvertException.java"/>
- <include name="${package}/MergeException.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/dom/DOMDocument.java b/xmerge/java/org/openoffice/xmerge/converter/dom/DOMDocument.java
deleted file mode 100644
index 551667f21d8b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/dom/DOMDocument.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.dom;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import org.openoffice.xmerge.util.Resources;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * An implementation of <code>Document</code> for
- * StarOffice documents.
- */
-public class DOMDocument
- implements org.openoffice.xmerge.Document {
-
- /** Factory for <code>DocumentBuilder</code> objects. */
- private static DocumentBuilderFactory factory =
- DocumentBuilderFactory.newInstance();
-
- /** DOM <code>Document</code> of content.xml. */
- private Document contentDoc = null;
-
- /** DOM <code>Document</code> of content.xml. */
- private Document styleDoc = null;
-
- private String documentName = null;
- private String fileName = null;
- private String fileExt = null;
-
- /** Resources object. */
- private Resources res = null;
-
-
- /**
- * Default constructor.
- *
- * @param name <code>Document</code> name.
- * @param ext <code>Document</code> extension.
- */
- public DOMDocument(String name,String ext)
- {
- this(name,ext,true, false);
- }
-
- /**
- * Returns the file extension of the <code>Document</code>
- * represented.
- *
- * @return file extension of the <code>Document</code>.
- */
- protected String getFileExtension() {
- return fileExt;
- }
-
-
- /**
- * Constructor with arguments to set <code>namespaceAware</code>
- * and <code>validating</code> flags.
- *
- * @param name <code>Document</code> name (may or may not
- * contain extension).
- * @param ext <code>Document</code> extension.
- * @param namespaceAware Value for <code>namespaceAware</code> flag.
- * @param validating Value for <code>validating</code> flag.
- */
- public DOMDocument(String name, String ext,boolean namespaceAware, boolean validating) {
-
- res = Resources.getInstance();
- factory.setValidating(validating);
- factory.setNamespaceAware(namespaceAware);
- this.fileExt = ext;
- this.documentName = trimDocumentName(name);
- this.fileName = documentName + getFileExtension();
- }
-
-
- /**
- * Removes the file extension from the <code>Document</code>
- * name.
- *
- * @param name Full <code>Document</code> name with extension.
- *
- * @return Name of <code>Document</code> without the extension.
- */
- private String trimDocumentName(String name) {
- String temp = name.toLowerCase();
- String ext = getFileExtension();
-
- if (temp.endsWith(ext)) {
- // strip the extension
- int nlen = name.length();
- int endIndex = nlen - ext.length();
- name = name.substring(0,endIndex);
- }
-
- return name;
- }
-
-
- /**
- * Return a DOM <code>Document</code> object of the document content
- * file. Note that a content DOM is not created when the constructor
- * is called. So, either the <code>read</code> method or the
- * <code>initContentDOM</code> method will need to be called ahead
- * on this object before calling this method.
- *
- * @return DOM <code>Document</code> object.
- */
- public Document getContentDOM() {
-
- return contentDoc;
- }
-
- /**
- * Sets the Content of the <code>Document</code> to the contents of the
- * supplied <code>Node</code> list.
- *
- * @return DOM <code>Document</code> object.
- */
- public void setContentDOM( Node newDom) {
- contentDoc=(Document)newDom;
- }
-
-
- /**
- * Return the name of the <code>Document</code>.
- *
- * @return The name of <code>Document</code>.
- */
- public String getName() {
-
- return documentName;
- }
-
-
- /**
- * Return the file name of the <code>Document</code>, possibly
- * with the standard extension.
- *
- * @return The file name of <code>Document</code>.
- */
- public String getFileName() {
-
- return fileName;
- }
-
-
- /**
- * Read the Office <code>Document</code> from the specified
- * <code>InputStream</code>.
- *
- * @param is Office document <code>InputStream</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void read(InputStream is) throws IOException {
- Debug.log(Debug.INFO, "reading file");
- DocumentBuilder builder = null;
- try {
- builder = factory.newDocumentBuilder();
- } catch (ParserConfigurationException ex) {
- System.out.println("Error:"+ ex);
- //throw new OfficeDocumentException(ex);
- }
- try {
-
- contentDoc= builder.parse(is);
-
-
- } catch (SAXException ex) {
- System.out.println("Error:"+ ex);
- //throw new OfficeDocumentException(ex);
- }
- }
-
-
- /**
- * Write out content to the supplied <code>OutputStream</code>.
- *
- * @param os XML <code>OutputStream</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream os) throws IOException {
-
- // set bytes for writing to output stream
- byte contentBytes[] = docToBytes(contentDoc);
-
- os.write(contentBytes);
- }
-
-
- /**
- * <p>Write out a <code>org.w3c.dom.Document</code> object into a
- * <code>byte</code> array.</p>
- *
- * <p>TODO: remove dependency on com.sun.xml.tree.XmlDocument
- * package!</p>
- *
- * @param Document DOM <code>Document</code> object.
- *
- * @return <code>byte</code> array of DOM <code>Document</code>
- * object.
- *
- * @throws IOException If any I/O error occurs.
- */
- private byte[] docToBytes(Document doc)
- throws IOException {
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- java.lang.reflect.Constructor con;
- java.lang.reflect.Method meth;
-
- String domImpl = doc.getClass().getName();
-
- /*
- * We may have multiple XML parsers in the Classpath.
- * Depending on which one is first, the actual type of
- * doc may vary. Need a way to find out which API is being
- * used and use an appropriate serialization method.
- */
- try {
- // First of all try for JAXP 1.0
- if (domImpl.equals("com.sun.xml.tree.XmlDocument")) {
- System.out.println("Using JAXP");
- Class jaxpDoc = Class.forName("com.sun.xml.tree.XmlDocument");
-
- // The method is in the XMLDocument class itself, not a helper
- meth = jaxpDoc.getMethod("write",
- new Class[] { Class.forName("java.io.OutputStream") } );
-
- meth.invoke(doc, new Object [] { baos } );
- }
- else if (domImpl.equals("org.apache.crimson.tree.XmlDocument"))
- {
- System.out.println("Using Crimson");
- Class crimsonDoc = Class.forName("org.apache.crimson.tree.XmlDocument");
- // The method is in the XMLDocument class itself, not a helper
- meth = crimsonDoc.getMethod("write",
- new Class[] { Class.forName("java.io.OutputStream") } );
-
- meth.invoke(doc, new Object [] { baos } );
- }
- else if (domImpl.equals("org.apache.xerces.dom.DocumentImpl")
- || domImpl.equals("org.apache.xerces.dom.DeferredDocumentImpl")) {
- System.out.println("Using Xerces");
- // Try for Xerces
- Class xercesSer =
- Class.forName("org.apache.xml.serialize.XMLSerializer");
-
- // Get the OutputStream constructor
- // May want to use the OutputFormat parameter at some stage too
- con = xercesSer.getConstructor(new Class []
- { Class.forName("java.io.OutputStream"),
- Class.forName("org.apache.xml.serialize.OutputFormat") } );
-
-
- // Get the serialize method
- meth = xercesSer.getMethod("serialize",
- new Class [] { Class.forName("org.w3c.dom.Document") } );
-
-
- // Get an instance
- Object serializer = con.newInstance(new Object [] { baos, null } );
-
-
- // Now call serialize to write the document
- meth.invoke(serializer, new Object [] { doc } );
- }
- else {
- // We dont have another parser
- throw new IOException("No appropriate API (JAXP/Xerces) to serialize XML document: " + domImpl);
- }
- }
- catch (ClassNotFoundException cnfe) {
- throw new IOException(cnfe.toString());
- }
- catch (Exception e) {
- // We may get some other errors, but the bottom line is that
- // the steps being executed no longer work
- throw new IOException(e.toString());
- }
-
- byte bytes[] = baos.toByteArray();
-
- return bytes;
- }
-
-
- /**
- * Initializes a new DOM <code>Document</code> with the content
- * containing minimum XML tags.
- *
- * @throws IOException If any I/O error occurs.
- */
- public final void initContentDOM() throws IOException {
- contentDoc = createDOM("");
-
- }
-
- /**
- * <p>Creates a new DOM <code>Document</code> containing minimum
- * OpenOffice XML tags.</p>
- *
- * <p>This method uses the subclass
- * <code>getOfficeClassAttribute</code> method to get the
- * attribute for <i>office:class</i>.</p>
- *
- * @param rootName root name of <code>Document</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private final Document createDOM(String rootName) throws IOException {
-
- Document doc = null;
-
- try {
-
- DocumentBuilder builder = factory.newDocumentBuilder();
- doc = builder.newDocument();
-
- } catch (ParserConfigurationException ex) {
- System.out.println("Error:"+ ex);
-
-
- }
-
- Element root = (Element) doc.createElement(rootName);
- doc.appendChild(root);
-
-
- return doc;
- }
-
-}
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/dom/build.xml b/xmerge/java/org/openoffice/xmerge/converter/dom/build.xml
deleted file mode 100644
index 725caf554ddf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/dom/build.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxc_dom" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxc_dom"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/dom"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set whether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/DOMDocument.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/dom/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/dom/makefile.mk
deleted file mode 100644
index e4cc4af6df3d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/dom/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxc_dom
-PRJ=../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/dom/package.html b/xmerge/java/org/openoffice/xmerge/converter/dom/package.html
deleted file mode 100644
index 5ed5997b40af..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/dom/package.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
- <title>org.openoffice.xmerge.converter.palm package</title>
-
-</head>
- <body bgcolor="white">
-<p>Provides classes for converting basic document types to/from a <code>
-DOMDocument</code> object, which can be used by the framework. </p>
-<p>This package provides classes that handle the writing of data to an <code>
- OutputStream</code> object for the {@link org.openoffice.xmerge.DocumentSerializer
-DocumentSerializer} interface for; as well as the reading of data from an
-<code>InputStream</code> object for the framework's {@link org.openoffice.xmerge.DocumentDeserializer
-DocumentDeserializer} interface. Both these framework interfaces are simply
-converters from server-side documents to device specific documents and vice-versa.
- </p>
-<a name="streamformat">
-<h2></h2>
-</a>
-<p></p>
-<h2>Important Note</h2>
-<p>Methods in these classes are not thread safe for performance reasons.
-Users of these classes will have to make sure that the usage of these classes
-are done in a proper manner. Possibly more on this later.</p>
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDB.java b/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDB.java
deleted file mode 100644
index 36397691b011..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDB.java
+++ /dev/null
@@ -1,469 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.palm;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.DataOutputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-/**
- * <p>This class contains data for a single Palm database for use during
- * a conversion process.</p>
- *
- * <p>It contains zero or more <code>Record</code> objects stored in an
- * array. The index of the <code>Record</code> object in the array is
- * the <code>Record</code> id or number for that specific <code>Record</code> object.
- * Note that this class does not check for maximum number of Records
- * allowable in an actual PDB.</p>
- *
- * <p>This class also contains the PDB name associated with the Palm
- * database it represents. A PDB name consists of 32 bytes of a
- * certain encoding (extended ASCII in this case).</p>
- *
- * <p>The non default constructors take in a name parameter which may not
- * be the exact PDB name to be used. The name parameter in
- * <code>String</code> or <code>byte</code> array are converted to an exact
- * <code>NAME_LENGTH</code> byte array. If the length of the name is less
- * than <code>NAME_LENGTH</code>, it is padded with '\0' characters. If it
- * is more, it gets truncated. The last character in the resulting byte
- * array is always a '\0' character. The resulting byte array is stored in
- * <code>bName</code>, and a corresponding String object <code>sName</code>
- * that contains characters without the '\0' characters.</p>
- *
- * <p>The {@link #write write} method is called within the
- * {@link org.openoffice.xmerge.converter.palm.PalmDocument#write
- * PalmDocument.write} method for writing out its data to the <code>OutputStream</code>
- * object.</p>
- *
- * <p>The {@link #read read} method is called within the
- * {@link org.openoffice.xmerge.converter.palm.PalmDocument#read
- * PalmDocument.read} method for reading in its data from the <code>InputStream</code>
- * object.</p>
- *
- * @author Akhil Arora, Herbie Ong
- * @see PalmDocument
- * @see Record
- */
-
-public final class PalmDB {
-
- /* Backup attribute for a PDB. This corresponds to dmHdrAttrBackup. */
- public final static short PDB_HEADER_ATTR_BACKUP = 0x0008;
-
- /** Number of bytes for the name field in the PDB. */
- public final static int NAME_LENGTH = 32;
-
- /** List of <code>Record</code> objects. */
- private Record[] records;
-
- /** PDB name in bytes. */
- private byte[] bName = null;
-
- /** PDB name in String. */
- private String sName = null;
-
- /** Creator ID. */
- private int creatorID = 0;
-
- /** Type ID */
- private int typeID = 0;
-
- /**
- * PDB version. Palm UInt16.
- * It is treated as a number here, since there is no unsigned 16 bit
- * in Java, int is used instead, but only 2 bytes are written out or
- * read in.
- */
- private int version = 0;
-
- /**
- * PDB attribute - flags for the database.
- * Palm UInt16. Unsignedness should be irrelevant.
- */
- private short attribute = 0;
-
-
- /**
- * Default constructor.
- *
- * @param creatorID The PDB Creator ID.
- * @param typeID The PDB Type ID.
- * @param version The PDB header version.
- * @param attribute The PDB header attribute.
- */
- public PalmDB(int creatorID, int typeID, int version, short attribute) {
-
- records = new Record[0];
- setAttributes(creatorID, typeID, version, attribute);
- }
-
-
- /**
- * Constructor to create <code>PalmDB</code> object with
- * <code>Record</code> objects. <code>recs.length</code>
- * can be zero for an empty PDB.
- *
- * @param name Suggested PDB name in a <code>String</code>.
- * @param creatorID The PDB Creator ID.
- * @param typeID The PDB Type ID.
- * @param version The PDB header version.
- * @param attribute The PDB header attribute.
- * @param recs Array of <code>Record</code> objects.
- *
- * @throws UnsupportedEncodingException If <code>name</code> is
- * not properly encoded.
- * @throws NullPointerException If <code>recs</code> is null.
- */
- public PalmDB(String name, int creatorID, int typeID, int version,
- short attribute, Record[] recs)
- throws UnsupportedEncodingException {
-
- this(name.getBytes(PdbUtil.ENCODING), creatorID, typeID, version,
- attribute, recs);
- }
-
-
- /**
- * Constructor to create object with <code>Record</code>
- * objects. <code>recs.length</code> can be zero for an
- * empty PDB.
- *
- * @param name Suggested PDB name in a <code>byte</code>
- * array.
- * @param creatorID The PDB Creator ID.
- * @param typeID The PDB Type ID.
- * @param version The PDB header version.
- * @param attribute The PDB header attribute.
- * @param recs Array of <code>Record</code> objects.
- *
- * @throws UnsupportedEncodingException If <code>name</code> is
- * not properly encoded.
- * @throws NullPointerException If recs is null.
- */
- public PalmDB(byte[] name, int creatorID, int typeID, int version,
- short attribute, Record[] recs) throws UnsupportedEncodingException {
-
- store(name);
-
- records = new Record[recs.length];
- System.arraycopy(recs, 0, records, 0, recs.length);
- setAttributes(creatorID, typeID, version, attribute);
- }
-
-
- /**
- * Set the attributes for the <code>PalmDB</code> object.
- *
- * @param creatorID The PDB Creator ID.
- * @param typeID The PDB Type ID.
- * @param version The PDB header version.
- * @param attribute The PDB header attribute.
- */
- public void setAttributes (int creatorID, int typeID, int version, short attribute) {
- this.creatorID = creatorID;
- this.typeID = typeID;
- this.version = version;
- this.attribute = attribute;
- }
-
-
- /**
- * This private method is mainly used by the constructors above.
- * to store bytes into name and also create a <code>String</code>
- * representation. and also by the <code>read</code> method.
- *
- * TODO: Note that this method assumes that the <code>byte</code>
- * array parameter contains one character per <code>byte</code>,
- * else it would truncate improperly.
- *
- * @param bytes PDB name in <code>byte</code> array.
- *
- * @throws UnsupportedEncodingException If ENCODING is
- * not supported.
- */
- private void store(byte[] bytes) throws UnsupportedEncodingException {
-
- // note that this will initialize all bytes in name to 0.
- bName = new byte[NAME_LENGTH];
-
- // determine minimum length to copy over from bytes to bName.
- // Note that the last byte in bName has to be '\0'.
-
- int lastIndex = NAME_LENGTH - 1;
-
- int len = (bytes.length < lastIndex)? bytes.length: lastIndex;
-
- int i;
-
- for (i = 0; i < len; i++) {
-
- if (bytes[i] == 0) {
- break;
- }
-
- bName[i] = bytes[i];
- }
-
- // set sName, no need to include the '\0' character.
- sName = new String(bName, 0, i, PdbUtil.ENCODING);
- }
-
-
- /**
- * Returns creator ID.
- *
- * @return The creator ID.
- */
- public int getCreatorID() {
-
- return creatorID;
- }
-
-
- /**
- * Returns type ID.
- *
- * @return The type ID.
- */
- public int getTypeID() {
-
- return typeID;
- }
-
-
- /**
- * Returns attribute flag.
- *
- * @return The attribute flag.
- */
- public short getAttribute() {
-
- return attribute;
- }
-
-
- /**
- * Returns version.
- *
- * @return The version.
- */
- public int getVersion() {
-
- return version;
- }
-
-
- /**
- * Return the number of Records contained in this
- * PDB <code>PalmDB</code> object.
- *
- * @return Number of <code>Record</code> objects.
- */
- public int getRecordCount() {
-
- return records.length;
- }
-
-
- /**
- * Return the specific <code>Record</code> object associated
- * with the <code>Record</code> number.
- *
- * @param index <code>Record</code> index number.
- *
- * @return The <code>Record</code> object in the specified index
- *
- * @throws ArrayIndexOutOfBoundsException If index is out of bounds.
- */
- public Record getRecord(int index) {
-
- return records[index];
- }
-
-
- /**
- * Return the list of <code>Record</code> objects.
- *
- * @return The array of <code>Record</code> objects.
- */
- public Record[] getRecords() {
-
- return records;
- }
-
- /**
- * Return the PDB name associated with this object.
- *
- * @return The PDB name.
- */
- public String getPDBNameString() {
-
- return sName;
- }
-
-
- /**
- * Return the PDB name associated with this object in
- * <code>byte</code> array of exact length of 32 bytes.
- *
- * @return The PDB name in <code>byte</code> array of
- * length 32.
- */
- public byte[] getPDBNameBytes() {
-
- return bName;
- }
-
-
- /**
- * Write out the number of Records followed by what
- * will be written out by each <code>Record</code> object.
- *
- * @param os The <code>OutputStream</code> to write the
- * object.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream os) throws IOException {
-
- DataOutputStream out = new DataOutputStream(os);
-
- // write out PDB name
- out.write(bName);
-
- // write out 2 bytes for number of records
- out.writeShort(records.length);
-
- // let each Record object write out its own info.
- for (int i = 0; i < records.length; i++)
- records[i].write(out);
- }
-
- /**
- * Read the necessary data to create a PDB from
- * the <code>InputStream</code>.
- *
- * @param is The <code>InputStream</code> to read data
- * in order to restore the object.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void read(InputStream is) throws IOException {
-
- DataInputStream in = new DataInputStream(is);
-
- // read in the PDB name.
- byte[] bytes = new byte[NAME_LENGTH];
- in.readFully(bytes);
- store(bytes);
-
- // read in number of records
- int nrec = in.readUnsignedShort();
- records = new Record[nrec];
-
- // read in the Record infos
- for (int i = 0; i < nrec; i++) {
-
- records[i] = new Record();
- records[i].read(in);
- }
- }
-
- /**
- * Override equals method of <code>Object</code>.
- *
- * Two <code>PalmDB</code> objects are equal if they contain
- * the same information, i.e. PDB name and Records.
- *
- * This is used primarily for testing purposes only for now.
- *
- * @param obj A <code>PalmDB</code> <code>Object</code> to
- * compare.
- *
- * @return true if <code>obj</code> is equal to this, otherwise
- * false.
- */
- public boolean equals(Object obj) {
-
- boolean bool = false;
-
- if (obj instanceof PalmDB) {
-
- PalmDB pdb = (PalmDB) obj;
-
- checkLabel: {
-
- // compare sName
-
- if (!sName.equals(pdb.sName)) {
-
- break checkLabel;
- }
-
- // compare bName
-
- if (bName.length != pdb.bName.length) {
-
- break checkLabel;
- }
-
- for (int i = 0; i < bName.length; i++) {
-
- if (bName[i] != pdb.bName[i]) {
-
- break checkLabel;
- }
- }
-
- // compare each Record
-
- if (records.length != pdb.records.length) {
-
- break checkLabel;
- }
-
- for (int i = 0; i < records.length; i++) {
-
- if (!records[i].equals(pdb.records[i])) {
-
- break checkLabel;
- }
- }
-
- // all checks done
- bool = true;
- }
- }
-
- return bool;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDocument.java b/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDocument.java
deleted file mode 100644
index fdf2c69a37aa..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/PalmDocument.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.palm;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ByteArrayOutputStream;
-
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
-
-import org.openoffice.xmerge.Document;
-
-/**
- * <p> A <code>PalmDocument</code> is palm implementaion of the
- * <code>Docuemnt</code> interface.</p>
- *
- * <p>This implementation allows the Palm device format to be
- * read via an <code>InputStream</code> and written via an
- * <code>OutputStream</code>.</p>
- *
- * @author Martin Maher
- */
-
-public class PalmDocument
- implements Document {
-
- /**
- * The internal representation of a pdb.
- */
- private PalmDB pdb;
-
- /**
- * The file name.
- */
- private String fileName;
-
- /**
- * Constructor to create a <code>PalmDocument</code>
- * from an <code>InputStream</code>.
- *
- * @param is <code>InputStream</code> containing a PDB.
- *
- * @throws IOException If any I/O error occurs.
- */
- public PalmDocument(InputStream is) throws IOException {
- read(is);
- }
-
-
- /**
- * Constructor to create a <code>PalmDocument</code> with
- * <code>Record</code> objects. <code>recs.length</code>
- * can be zero for an empty PDB.
- *
- * @param name Suggested PDB name in <code>String</code>.
- * @param creatorID The PDB Creator ID.
- * @param typeID The PDB Type ID.
- * @param version The PDB header version.
- * @param attribute The PDB header attribute.
- * @param recs Array of <code>Record</code> objects.
- *
- * @throws NullPointerException If <code>recs</code> is null.
- */
- public PalmDocument(String name, int creatorID, int typeID, int version,
- short attribute, Record[] recs)
- throws UnsupportedEncodingException {
- pdb = new PalmDB(name, creatorID, typeID, version, attribute, recs);
- fileName = pdb.getPDBNameString();
- }
-
-
- /**
- * Reads in a file from the <code>InputStream</code>.
- *
- * @param is <code>InputStream</code> to read in its content.
- *
- * @throws IOException If any I/O error occurs.
- */
-
- public void read(InputStream is) throws IOException {
- PdbDecoder decoder = new PdbDecoder();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- int b;
- while (is.available()>0)
- {
- baos.write(is.read());
- }
- byte[] bytearr = baos.toByteArray();
- pdb = decoder.parse(bytearr);
- fileName = pdb.getPDBNameString();
- }
-
-
- /**
- * Writes the <code>PalmDocument</code> to an <code>OutputStream</code>.
- *
- * @param is The <code>OutputStream</code> to write the content.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream os) throws IOException {
- PdbEncoder encoder = new PdbEncoder(pdb);
- encoder.write(os);
- }
-
-
- /**
- * Returns the <code>PalmDB</code> contained in this object.
- *
- * @return The <code>PalmDB</code>.
- */
- public PalmDB getPdb() {
- return pdb;
- }
-
-
- /**
- * Sets the <code>PalmDocument</code> to a new <code>PalmDB</code>
- * value.
- *
- * @param pdb The new <code>PalmDB</code> value.
- */
- public void setPdb(PalmDB pdb) {
- this.pdb = pdb;
-
- String name = pdb.getPDBNameString();
- fileName = name;
- }
-
-
- /**
- * Returns the name of the file.
- *
- * @return The name of the file represented in the
- * <code>PalmDocument</code>.
- */
- public String getFileName() {
- return fileName + ".pdb";
- }
-
-
- /**
- * Returns the <code>Document</code> name.
- *
- * @return The <code>Document</code> name.
- */
- public String getName() {
- return fileName;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/palm/PdbDecoder.java
deleted file mode 100755
index b67ff036761b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbDecoder.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.palm;
-
-import java.io.RandomAccessFile;
-import java.io.IOException;
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-
-import org.openoffice.xmerge.converter.palm.*;
-
-/**
- * <p>Provides functionality to decode a PDB formatted file into
- * a <code>PalmDB</code> object given an <code>InputStream</code>.
- * This class is only used by the <code>PalmDB</code> object.</p>
- *
- * <p>Sample usage:</p>
- *
- * <blockquote><pre><code>
- * PdbDecoder decoder = new PdbDecoder("sample.pdb");
- * PalmDB palmDB = decoder.parse();
- * </code></pre></blockquote>
- *
- * <p>This decoder has the following assumptions on the PDB file:</p>
- *
- * <p><ol>
- * <li>There is only one RecordList section in the PDB.</li>
- * <li>The <code>Record</code> indices in the RecordList are sorted in
- * order, i.e. the first <code>Record</code> index refers to
- * <code>Record</code> 0, and so forth.</li>
- * <li>The raw <code>Record</code> in the <code>Record</code> section
- * are sorted as well in order, i.e. first <code>Record</code>
- * comes ahead of second <code>Record</code>, etc.</li>
- * </ol></p>
- *
- * <p>Other decoders assume these as well.</p>
- *
- * @author Herbie Ong
- * @see PalmDB
- * @see Record
- */
-public final class PdbDecoder {
-
-
- /**
- * <p>This method decodes a PDB file into a <code>PalmDB</code>
- * object.</p>
- *
- * <p>First, the header data is read using the <code>PdbHeader</code>
- * <code>read</code> method. Next, the RecordList section is
- * read and the <code>Record</code> offsets are stored for use when
- * parsing the Records. Based on these offsets, the bytes
- * corresponding to each <code>Record</code> are read and each is
- * stored in a <code>Record</code> object. Lastly, the data is
- * used to create a <code>PalmDB</code> object.</p>
- *
- * @param fileName PDB file name.
- *
- * @throws IOException If I/O error occurs.
- */
- public PalmDB parse(String fileName) throws IOException {
-
- RandomAccessFile file = new RandomAccessFile(fileName, "r");
-
- // read the PDB header
- PdbHeader header = new PdbHeader();
- header.read(file);
-
- Record recArray[] = new Record[header.numRecords];
- if (header.numRecords != 0) {
-
- // read in the record indices + offsets
-
- int recOffset[] = new int[header.numRecords];
- byte recAttrs[] = new byte[header.numRecords];
-
- for (int i = 0; i < header.numRecords; i++) {
-
- recOffset[i] = file.readInt();
-
- // read in attributes (1 byte) + unique id (3 bytes)
- // take away the unique id, store the attributes
-
- int attr = file.readInt();
- recAttrs[i] = (byte) (attr >>> 24);
- }
-
-
- // read the records
-
- int len = 0;
- byte[] bytes = null;
-
- int lastIndex = header.numRecords - 1;
-
- for (int i = 0; i < lastIndex; i++) {
-
- file.seek(recOffset[i]);
- len = recOffset[i+1] - recOffset[i];
- bytes = new byte[len];
- file.readFully(bytes);
- recArray[i] = new Record(bytes, recAttrs[i]);
- }
-
- // last record
- file.seek(recOffset[lastIndex]);
- len = (int) file.length() - recOffset[lastIndex];
- bytes = new byte[len];
- file.readFully(bytes);
- recArray[lastIndex] = new Record(bytes, recAttrs[lastIndex]);
-
- }
-
- file.close();
-
- // create PalmDB and return it
- PalmDB pdb = new PalmDB(header.pdbName, header.creatorID,
- header.typeID, header.version, header.attribute, recArray);
-
- return pdb;
- }
-
- /**
- * <p>This method decodes a PDB file into a <code>PalmDB</code>
- * object.</p>
- *
- * <p>First, the header data is read using the <code>PdbHeader</code>
- * <code>read</code> method. Next, the RecordList section is
- * read and the <code>Record</code> offsets are stored for use when
- * parsing the Records. Based on these offsets, the bytes
- * corresponding to each <code>Record</code> are read and each is
- * stored in a <code>Record</code> object. Lastly, the data is
- * used to create a <code>PalmDB</code> object.</p>
- *
- * @param b <code>byte[]</code> containing PDB.
- *
- * @throws IOException If I/O error occurs.
- */
-
- public PalmDB parse(byte[] b) throws IOException {
-
- ByteArrayInputStream bais = new ByteArrayInputStream(b);
- DataInputStream dis = new DataInputStream(bais);
-
- // read the PDB header
-
- PdbHeader header = new PdbHeader();
- header.read(dis);
-
- Record recArray[] = new Record[header.numRecords];
- if (header.numRecords != 0) {
-
- // read in the record indices + offsets
-
- int recOffset[] = new int[header.numRecords];
- byte recAttrs[] = new byte[header.numRecords];
-
- for (int i = 0; i < header.numRecords; i++) {
-
- recOffset[i] = dis.readInt();
-
- // read in attributes (1 byte) + unique id (3 bytes)
- // take away the unique id, store the attributes
-
- int attr = dis.readInt();
- recAttrs[i] = (byte) (attr >>> 24);
- }
-
- // read the records
-
- int len = 0;
- byte[] bytes = null;
-
- int lastIndex = header.numRecords - 1;
-
- for (int i = 0; i < lastIndex; i++) {
-
- //dis.seek(recOffset[i]);
- dis.reset();
- dis.skip(recOffset[i]);
- len = recOffset[i+1] - recOffset[i];
- bytes = new byte[len];
- dis.readFully(bytes);
- recArray[i] = new Record(bytes, recAttrs[i]);
- }
-
- // last record
-
- dis.reset();
- len = (int) dis.available() - recOffset[lastIndex];
- dis.skip(recOffset[lastIndex]);
- bytes = new byte[len];
- dis.readFully(bytes);
- recArray[lastIndex] = new Record(bytes, recAttrs[lastIndex]);
- }
-
-
-
- // create PalmDB and return it
-
- PalmDB pdb = new PalmDB(header.pdbName, header.creatorID,
- header.typeID, header.version, header.attribute, recArray);
-
- return pdb;
- }
-
-
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/palm/PdbEncoder.java
deleted file mode 100755
index 2cd084786878..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbEncoder.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.palm;
-
-import java.io.OutputStream;
-import java.io.BufferedOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Date;
-
-/**
- * <p>Provides functionality to encode a <code>PalmDB</code> object
- * into a PDB formatted file given a file <code>OutputStream</code>.
- * This class is only used by the <code>PalmDB</code> object.</p>
- *
- * <p>One needs to create one <code>PdbEncoder</code> object per
- * <code>PalmDB</code> object to be encoded. This class keeps
- * the PDB header data and functionality in the <code>PdbHeader</code>
- * class.</p>
- *
- * <p>Sample usage:</p>
- *
- * <blockquote><pre><code>
- * PdbEncoder encoder = new PdbEncoder(palmDB, "STRW", "data");
- * encoder.write(new FileOutputStream("sample.pdb"));
- * </code></pre></blockquote>
- *
- * @author Herbie Ong
- * @see PalmDB
- * @see Record
- */
-public final class PdbEncoder {
-
- /** PDB header. */
- private PdbHeader header = null;
-
- /** the PalmDB object. */
- private PalmDB db = null;
-
- /**
- * The pattern for unique_id=0x00BABE(start).
- */
- private final static int START_UNIQUE_ID = 0x00BABE;
-
-
- /**
- * Constructor.
- *
- * @param db The <code>PalmDB</code> to be encoded.
- */
- public PdbEncoder(PalmDB db) {
-
- header = new PdbHeader();
- header.version = db.getVersion();
-
- header.attribute = db.getAttribute();
-
- this.db = db;
-
- header.pdbName = db.getPDBNameBytes();
- header.creatorID = db.getCreatorID();
- header.typeID = db.getTypeID();
-
- // set the following dates to current date
- Date date = new Date();
- header.creationDate = (date.getTime() / 1000) + PdbUtil.TIME_DIFF;
- header.modificationDate = header.creationDate;
-
- header.numRecords = db.getRecordCount();
- }
-
-
- /**
- * <p>Write out a PDB into the given <code>OutputStream</code>.</p>
- *
- * <p>First, write out the header data by using the
- * <code>PdbHeader</code> <code>write</code> method. Next,
- * calculate the RecordList section and write it out.
- * Lastly, write out the bytes corresponding to each
- * <code>Record</code>.</p>
- *
- * <p>The RecordList section contains a list of
- * <code>Record</code> index info, where each <code>Record</code>
- * index info contains:</p>
- *
- * <p><ul>
- * <li>4 bytes local offset of the <code>Record</code> from the
- * top of the PDB.</li>
- * <li>1 byte of <code>Record</code> attribute.</li>
- * <li>3 bytes unique <code>Record</code> ID.</li>
- * </ul></p>
- *
- * <p>There should be a total of <code>header.numRecords</code>
- * of <code>Record</code> index info</p>.
- *
- * @param os <code>OutputStream</code> to write out PDB.
- *
- * @throws IOException If I/O error occurs.
- */
- public void write(OutputStream os) throws IOException {
-
- BufferedOutputStream bos = new BufferedOutputStream(os);
- DataOutputStream dos = new DataOutputStream(bos);
-
- // write out the PDB header
- header.write(dos);
-
- if (header.numRecords > 0) {
-
- // compute for recOffset[]
-
- int recOffset[] = new int[header.numRecords];
- byte recAttr[] = new byte[header.numRecords];
-
- // first recOffset will be at PdbUtil.HEADER_SIZE + all the
- // record indices (@ 8 bytes each)
- recOffset[0] = PdbUtil.HEADER_SIZE + (header.numRecords * 8);
-
- int lastIndex = header.numRecords - 1;
-
- for (int i = 0; i < lastIndex; i++) {
-
- Record rec = db.getRecord(i);
- int size = rec.getSize();
- recAttr[i] = rec.getAttributes();
-
- recOffset[i+1] = recOffset[i] + size;
- }
-
- // grab the last record's attribute.
-
- Record lastRec = db.getRecord(lastIndex);
- recAttr[lastIndex] = lastRec.getAttributes();
-
-
- int uid = START_UNIQUE_ID;
-
- for (int i = 0; i < header.numRecords; i++) {
-
- // write out each record offset
- dos.writeInt(recOffset[i]);
-
- // write out record attribute (recAttr) and
- // unique ID (uid) in 4 bytes (int) chunk.
- // unique ID's have to be unique, thus
- // increment each time.
- int attr = (((int) recAttr[i]) << 24 );
- attr |= uid;
- dos.writeInt(attr);
- uid++;
- }
-
- // write out the raw records
-
- for (int i = 0; i < header.numRecords; i++) {
-
- Record rec = db.getRecord(i);
- byte bytes[] = rec.getBytes();
- dos.write(bytes);
- }
-
- } else {
-
- // placeholder bytes if there are no records in the list.
- dos.writeShort(0);
- }
-
- dos.flush();
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbHeader.java b/xmerge/java/org/openoffice/xmerge/converter/palm/PdbHeader.java
deleted file mode 100755
index 7311ce956aba..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbHeader.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.palm;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-/**
- * <p>Class used only internally by <code>PdbEncoder</code> and
- * <code>PdbDecoder</code> to store, read and write a PDB header.</p>
- *
- * <p>Note that fields are intended to be accessible only at the
- * package level.</p>
- *
- * <p>Some of the fields are internally represented using a
- * larger type since Java does not have unsigned types.
- * Some are not since they are not relevant for now.
- * The <code>read</code> and <code>write</code> methods should
- * handle them properly.</p>
- *
- * @author Herbie Ong
- * @see PalmDB
- * @see Record
- */
-final class PdbHeader {
-
-
- /** Name of the database. 32 bytes. */
- byte[] pdbName = null;
-
- /**
- * Flags for the database. Palm UInt16. Unsignedness should be
- * irrelevant.
- */
- short attribute = 0;
-
- /** Application-specific version for the database. Palm UInt16. */
- int version = 0;
-
- /** Date created. Palm UInt32. */
- long creationDate = 0;
-
- /** Date last modified. Palm UInt32. */
- long modificationDate = 0;
-
- /** Date last backup. Palm UInt32. */
- long lastBackupDate = 0;
-
- /**
- * Incremented every time a <code>Record</code> is
- * added, deleted or modified. Palm UInt32.
- */
- long modificationNumber = 0;
-
- /** Optional field. Palm UInt32. Unsignedness should be irrelevant. */
- int appInfoID = 0;
-
- /** Optional field. Palm UInt32. Unsignedness should be irrelevant. */
- int sortInfoID = 0;
-
- /** Database type ID. Palm UInt32. Unsignedness should be irrelevant. */
- int typeID = 0;
-
- /** Database creator ID. Palm UInt32. Unsignedness should be irrelevant. */
- int creatorID = 0;
-
- /** ??? */
- int uniqueIDSeed = 0;
-
- /** See numRecords. 4 bytes. */
- int nextRecordListID = 0;
-
- /**
- * Number of Records stored in the database header.
- * If all the <code>Record</code> entries cannot fit in the header,
- * then <code>nextRecordList</code> has the local ID of a
- * RecordList that contains the next set of <code>Record</code>.
- * Palm UInt16.
- */
- int numRecords = 0;
-
-
- /**
- * Read in the data for the PDB header. Need to
- * preserve the unsigned value for some of the fields.
- *
- * @param di A <code>DataInput</code> object.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void read(DataInput in) throws IOException {
-
- pdbName = new byte[PalmDB.NAME_LENGTH];
- in.readFully(pdbName);
- attribute = in.readShort();
- version = in.readUnsignedShort();
- creationDate = ((long) in.readInt()) & 0xffffffffL;
- modificationDate = ((long) in.readInt()) & 0xffffffffL;
- lastBackupDate = ((long) in.readInt()) & 0xffffffffL;
- modificationNumber = ((long) in.readInt()) & 0xffffffffL;
- appInfoID = in.readInt();
- sortInfoID = in.readInt();
- creatorID = in.readInt();
- typeID = in.readInt();
- uniqueIDSeed = in.readInt();
- nextRecordListID = in.readInt();
- numRecords = in.readUnsignedShort();
- }
-
-
- /**
- * Write out PDB header data.
- *
- * @param out A <code>DataOutput</code> object.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(DataOutput out) throws IOException {
-
- out.write(pdbName);
- out.writeShort(attribute);
- out.writeShort(version);
- out.writeInt((int) creationDate);
- out.writeInt((int) modificationDate);
- out.writeInt((int) lastBackupDate);
- out.writeInt((int) modificationNumber);
- out.writeInt(appInfoID);
- out.writeInt(sortInfoID);
- out.writeInt(typeID);
- out.writeInt(creatorID);
- out.writeInt(uniqueIDSeed);
- out.writeInt(nextRecordListID);
- out.writeShort(numRecords);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbUtil.java b/xmerge/java/org/openoffice/xmerge/converter/palm/PdbUtil.java
deleted file mode 100755
index f911b583589a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/PdbUtil.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.palm;
-
-/**
- * Contains common static methods and constants for use within the package.
- *
- * @author Herbie Ong
- */
-public final class PdbUtil {
-
- /** Difference in seconds from Jan 01, 1904 to Jan 01, 1970. */
- final static long TIME_DIFF = 2082844800;
-
- /** Encoding scheme used. */
- final static String ENCODING = "8859_1";
-
- /** Size of a PDB header in bytes. */
- final static int HEADER_SIZE = 78;
-
-
- /**
- * <p>This method converts a 4 letter string into the Palm ID
- * integer.</p>
- *
- * <p>It is normally used to convert the Palm creator ID string into
- * the integer version of it. Also use for data types, etc.</p>
- *
- * @param s Four character <code>String</code>.
- *
- * @return Palm ID representing the <code>String</code>.
- *
- * @throws ArrayIndexOutOfBoundsException If <code>String</code>
- * parameter contains less than four characters.
- */
- public static int intID(String s) {
-
- int id = -1;
- int temp = 0;
-
- // grab the first char and put it in the high bits
- // note that we only want 8 lower bits of it.
- temp = (int) s.charAt(0);
- id = temp << 24;
-
- // grab the second char and add it in.
- temp = ((int) s.charAt(1)) & 0x00ff;
- id += temp << 16;
-
- // grab the second char and add it in.
- temp = ((int) s.charAt(2)) & 0x00ff;
- id += temp << 8;
-
- // grab the last char and add it in
- id += ((int) s.charAt(3)) & 0x00ff;
-
- return id;
- }
-
-
- /**
- * This method converts an integer into a <code>String</code>
- * given the Palm ID format.
- *
- * @param i Palm ID.
- *
- * @return <code>String</code> representation.
- */
- public static String stringID(int i) {
-
- char ch[] = new char[4];
- ch[0] = (char) (i >>> 24);
- ch[1] = (char) ((i >> 16) & 0x00ff);
- ch[2] = (char) ((i >> 8) & 0x00ff);
- ch[3] = (char) (i & 0x00ff);
-
- return new String(ch);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/Record.java b/xmerge/java/org/openoffice/xmerge/converter/palm/Record.java
deleted file mode 100644
index aa2101d6159e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/Record.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.palm;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.DataOutputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * <p>Contains the raw bytes for a <code>Record</code> in a PDB.</p>
- *
- * <p>Note that it is not associated with a <code>Record</code> number
- * or ID.</p>
- *
- * @author Akhil Arora, Herbie Ong
- * @see PalmDocument
- * @see PalmDB
- */
-public final class Record {
-
- /** <code>Record</code> <code>byte</code> array. */
- private byte[] data;
-
- /** <code>Record</code> attributes. */
- private byte attributes = 0;
-
-
- /**
- * Default constructor.
- */
- public Record() {
-
- data = new byte[0];
- }
-
-
- /**
- * <p>Constructor to create a <code>Record</code> filled with
- * bytes.</p>
- *
- * <p>Note that this does not check for 64k <code>Record</code>
- * sizes. User of this class must check for that.</p>
- *
- * @param d <code>byte</code> array contents for this object.
- */
- public Record(byte[] d) {
-
- this(d, (byte) 0);
- }
-
-
- /**
- * <p>Constructor to create a <code>Record</code> filled with
- * bytes and assign <code>Record</code> attributes.</p>
- *
- * <p>Note that this does not check for 64k <code>Record</code>
- * sizes. User of this class must check for that.</p>
- *
- * @param d <code>byte</code> array contents for this object.
- * @param attrs <code>Record</code> attributes.
- */
- public Record(byte[] d, byte attrs) {
-
- data = new byte[d.length];
- attributes = attrs;
- System.arraycopy(d, 0, data, 0, d.length);
- }
-
-
- /**
- * This method returns the number of bytes in this object.
- *
- * @return Number of bytes in this object.
- */
- public int getSize() {
-
- return data.length;
- }
-
-
- /**
- * This method returns the contents of this <code>Object</code>.
- *
- * @return Contents in <code>byte</code> array
- */
- public byte[] getBytes() {
-
- return data;
- }
-
-
- /**
- * <p>This method returns the <code>Record</code> attributes.</p>
- *
- * <blockquote><pre>
- * <code>Record</code> attributes consists of (from high to low bit)
- *
- * delete (1) - dirty (1) - busy (1) - secret (1) - category (4)
- * </pre></blockquote>
- *
- * @return <code>Record</code> attribute.
- */
- public byte getAttributes() {
-
- return attributes;
- }
-
-
- /**
- * Write out the <code>Record</code> attributes and
- * <code>Record</code> length followed by the data in this
- * <code>Record</code> object.
- *
- * @param out The <code>OutputStream</code> to write the object.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream outs) throws IOException {
-
- DataOutputStream out = new DataOutputStream(outs);
- out.writeByte(attributes);
- out.writeShort(data.length);
- out.write(data);
- }
-
-
- /**
- * Read the necessary data to create a PDB from
- * the <code>InputStream</code>.
- *
- * @param in The <code>InputStream</code> to read data from
- * in order to restore the <code>object</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void read(InputStream ins) throws IOException {
-
- DataInputStream in = new DataInputStream(ins);
- attributes = in.readByte();
- int len = in.readUnsignedShort();
- data = new byte[len];
- in.readFully(data);
- }
-
-
- /**
- * <p>Override equals method of <code>Object</code>.</p>
- *
- * <p>Two <code>Record</code> objects are equal if they contain
- * the same bytes in the array and the same attributes.</p>
- *
- * <p>This is used primarily for testing purposes only for now.</p>
- *
- * @param obj A <code>Record</code> object to compare with
- *
- * @return true if obj is equal, otherwise false.
- */
- public boolean equals(Object obj) {
-
- boolean bool = false;
-
- if (obj instanceof Record) {
-
- Record rec = (Record) obj;
-
- checkLabel: {
-
- if (rec.getAttributes() != attributes) {
-
- break checkLabel;
- }
-
- if (rec.getSize() == data.length) {
-
- for (int i = 0; i < data.length; i++) {
-
- if (data[i] != rec.data[i]) {
- break checkLabel;
- }
- }
-
- bool = true;
- }
- }
- }
- return bool;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/build.xml b/xmerge/java/org/openoffice/xmerge/converter/palm/build.xml
deleted file mode 100644
index b2f9a9946a9a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/build.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxc_palm" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxc_palm"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/palm"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- </path>
-
- <!-- set whether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/PalmDB.java"/>
- <include name="${package}/PdbDecoder.java"/>
- <include name="${package}/PdbEncoder.java"/>
- <include name="${package}/PdbHeader.java"/>
- <include name="${package}/PdbUtil.java"/>
- <include name="${package}/Record.java"/>
- <include name="${package}/PalmDocument.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/palm/makefile.mk
deleted file mode 100644
index 4f7eb3026a72..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxc_palm
-PRJ=../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/package.html b/xmerge/java/org/openoffice/xmerge/converter/palm/package.html
deleted file mode 100644
index 5f8325d36301..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/package.html
+++ /dev/null
@@ -1,140 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.converter.palm package</title>
-</head>
-
-<body bgcolor="white">
-
-<p>Provides classes for converting Palm database data to/from a
-<code>PalmDocument</code> object, which can be used by the framework.
-
-<p>This package provides classes that handle the writing of data to
-an <code>OutputStream</code> object for the
-{@link org.openoffice.xmerge.DocumentSerializer DocumentSerializer}
-interface for; as well as the reading of data from an <code>InputStream</code>
-object for the framework's
-{@link org.openoffice.xmerge.DocumentDeserializer DocumentDeserializer}
-interface. Both these framework interfaces are simply converters from
-server-side documents to device specific documents and vice-versa.
-Since all Palm databases have a general record oriented format, a Palm
-database converter specific I/O stream format is specified for the Palm
-sync client application to handle the byte stream in a generic way.
-This also means that Palm database converters should read and/or write
-using this I/O stream format as specified in the next section.</p>
-
-<a name="streamformat">
-<h2>Palm database converter specific I/O stream format</h2>
-</a>
-
-<p>Note that the format of the byte stream is not exactly that of a PDB
-file encoding. It does not need to contain the PDB header information
-nor record indices section. Instead, it contains the following ...</p>
-
-<pre>
- set header
- 4 bytes - creator id
- 4 bytes - type id
- 2 bytes - PDB header version
- 2 bytes - PDB header attribute
- unsigned 2 bytes - number of PDB data to follow
-
- for each PDB,
- 32 bytes - name of PDB i
- unsigned 2 bytes - number of records in PDB i
-
- for each record contained in PDB i,
- 1 byte - record attributes
- unsigned 2 bytes - size of record j in PDB i
- x bytes - data
-</pre>
-
-<p>Note that each PDB section is appended by another if there is more
-than one.</p>
-
-<p>Since the <code>PalmDocument</code> class takes care of the writing
-and reading of this format through its <code>write</code> and
-<code>read</code> methods, respectively, this format shall also be
-referred to as the <b>PalmDocument stream format</b>.</p>
-
-<h2>Usage of the classes for the specified I/O stream</h2>
-
-<p>When converting from a server document to device document(s), the
-framework requires writing the device document(s) to an
-<code>OutputStream</code> object via the <code>DocumentSerializer</code>
-interface. Note that a single server document may be converted
-into multiple PDB's on the Palm device. Each worksheet in the document
-is converted into a <code>PalmDocument</code> . Thus, if there is more
-than one worksheet in the document, more than one <code>PalmDocument</code>
-will be produced by the <code>DocumentSerializer</code>.</p>
-
-<p>A <code>DocumentSerializer</code> creates a <code>ConvertData</code> object,
-which contains all of the <code>PalmDocuments</code>. The
-{@link org.openoffice.xmerge.converter.palm.PalmDocument#write write}
-method to write to the given <code>OutputStream</code>. The <code>PalmDocument</code>
-object will take care of writing the data in the
-<a href=#streamformat>specified format</a>.</p>
-
-<p>A <code>DocumentDeserializer</code> can use the <code>PalmDocument</code> object's
-{@link org.openoffice.xmerge.converter.palm.PalmDocument#read read}
-method to fill in all the <code>PalmDocument</code> object's data.</p>
-
-<h2>PDB file encoding/decoding</h2>
-
-<p>The <code>PalmDocument</code> object's read and write functions are provided
-by the <code>PdbDecoder</code> and <code>PdbEncoder</code> objects. The
-<code>PdbEncoder</code> class provides the functionality of encoding a
-<code>PalmDB</code> object into an <code>InputStream</code>, while the
-<code>PdbDecoder</code> class provides the functionality of decoding a
-PDB file into an <code>OutputStream</code>.</p>
-
-<p>Refer to the class description of each for usage.</p>
-
-<h2>Important Note</h2>
-
-<p>Methods in these classes are not thread safe for performance reasons.
-Users of these classes will have to make sure that the usage of these classes
-are done in a proper manner. Possibly more on this later.</p>
-
-<h2>TODO list</h2>
-
-<p><ol>
-<li>Merge the PalmDB, PdbDecoder and PdbEncoder classes into the
- PalmDocument class.</li>
-<li>After reading more on the palm file format spec, I realized
- that there are certain optional fields that may need to be addressed
- still, like the appInfo block and sortInfo block.</li>
-<li>The current PdbDecoder only returns a PalmDB object. There are other
- information that we may want to expose from the PDB decoding process.</li>
-<li>Investigate on different language encoding on the Palm and how that
- affects the PDB name.</li>
-</ol></p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/README b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/README
deleted file mode 100644
index 924f32fe0824..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/README
+++ /dev/null
@@ -1,50 +0,0 @@
-The following is an outline of the usage of this test suite.
-
-Requirements
-^^^^^^^^^^^^
-The following are required for these qa scripts to run correctly.
- 1. POSE: the Palm OS Emulator. This is available from the PalmOS website.
- 2. A Palm pilot rom. Also available from Palm.
- 3. Compiled xmerge jar files (xmerge.jar, aportisdoc.jar etc.)
- 4. Xerces.jar: required by the xmerge framework. This is available from org.apache.com.
-
-
-
-Test directory Contents
-^^^^^^^^^^^^^^^^^^^^^^^
-This test environment consists on 3 directories.
- 1. bin : This contains some helper scripts that are used by the test environment but can be used in a standalone fashion.
- 2. qa : This directory contains the files necessary to run the POSE emulator and to compare this results of tests with a set of verified (golden-data) files.
- 3. qa-wrapper: This directory contains some wrapper scripts and environment files, that allow a user to change the environment settings, without have to change the POSE control code itself.
-
-Setting up the environment
-^^^^^^^^^^^^^^^^^^^^^^^^^^
- The environment can be changes to reflect a particular users environment, by editing or creating an environment file. This files are usually kept in the qa-wrapper/env directory. These environment settings can then be used when running the scripts.
-
-Running the Scripts
-^^^^^^^^^^^^^^^^^^^
- Once the environment file has been created, the test scripts can be run by executing the "run-convtest" script in the qa-wrapper/bin directory. This file takes the following arguments
-
- run-convtest -env <ENVFILE> [-name RUNNAME]
-
-<ENVFILE> is the environment file to use
-optional <RUNNAME> This can be the name of the user running the scripts. This is used to name a directory for the test results to be kept in.
-
- e.g. run-convtest -env ../env/master.env
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/README b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/README
deleted file mode 100644
index 36fbcc6e1298..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/README
+++ /dev/null
@@ -1,6 +0,0 @@
-To run the spose script, you must set the following environmental variables:
-
- POSE2_EXE = Directory and name of the POSE executable file.
- POSE3_EXE = Directory and name of the POSE executable file.
- POSE_PRC = Directory containing the PRC files to be loaded
- into the emulator
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/rd b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/rd
deleted file mode 100755
index db2dc56aee6b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/rd
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/ksh
-#
-# Directories commonly used by this script...
-#
-
-#export LBHOME=$ZPHOME/lib
-#export CVHOME=$ZPHOME/converters
-#export CVHOME=/export/home/test/qadir/qa-new/classes
-
-# Set up classpath to include needed ZenSync jars. Honor the users
-# CLASSPATH by leaving it first. This allows users to specify their
-# own versions of the jar files in their CLASSPATH if they wish to
-# override these defaults.
-#
-
-export CLASSPATH=$CLASSES_DIR/xerces.jar:$CLASSES_DIR/jmc.jar:$CLASSES_DIR/xmerge.jar:$CLASSES_DIR/minicalc.jar:$CLASSES_DIR/aportisdoc.jar:$CLASSES_DIR/wordsmith.jar
-
-echo "The classpath is $CLASSPATH"
-
-# Run the test driver, passing along args.
-#
-# java com.sun.star.comp.documentconversion.test.Driver $*
-java -cp $CLASSPATH org.openoffice.xmerge.test.Driver $*
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/spose b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/spose
deleted file mode 100755
index 29f6a9fe5218..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/spose
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/bin/perl
-#
-# spose - start pose
-#
-
-use Getopt::Std;
-
-# Location of needed files
-#
-$pose2_exe = $ENV{'POSE2_EXE'};
-$pose3_exe = $ENV{'POSE3_EXE'};
-$pose_prc = $ENV{'POSE_PRC'};
-
-
-if (getopts('23qmwo:r:d:v') != 1)
-{
- &usage();
-}
-
-$apps_load = "";
-
-if ($opt_q)
-{
- &add_app("$pose_prc/Quickword.PRC");
-}
-if ($opt_m)
-{
- &add_app("$pose_prc/MiniCalc.prc");
-}
-if ($opt_w)
-{
- &add_app("$pose_prc/WordSmith.PRC");
-}
-if ($opt_o)
-{
- &add_app("$opt_o");
-}
-if ($opt_r)
-{
- $run_prog .= "-run_app $opt_r";
-}
-if ($opt_d)
-{
- $directory = $opt_d;
- @files = `/bin/ls -1 $directory/*.pdb`;
-
- for ($i=0; $i <= $#files; $i++)
- {
- $add_file = "$files[$i]";
- chomp $add_file;
- &add_app("$add_file");
- }
-}
-
-if ($opt_3)
-{
- $pose_exe = $pose3_exe;
-}
-else
-{
- $pose_exe = $pose2_exe;
-}
-if ($pose_exe eq "")
-{
- print "\nPose not found: Please set \n POSE2_EXE\n or POSE3_EXE\n";
- exit 0;
-}
-if ($opt_v)
-{
- print ("\n$pose_exe $apps_load $run_prog &\n\n");
-}
-else
-{
- system ("$pose_exe $apps_load $run_prog &");
-}
-
-exit 0;
-
-sub usage
-{
- print "\nUsage: getopt [ -m ] [ -q ] [ -w ] [ -o <PrcFile> ] [ -r <RunProg> ]\n";
- print " -2 Runs pose version 3.2 [ current default ]\n";
- print " -3 Runs pose version 3.3\n";
- print " -d Load all PDB files in specified directory\n";
- print " -m Load MiniCalc PRC file\n";
- print " -q Load QuickWord PRC file\n";
- print " -w Load WordSmith PRC file\n";
- print " -o <PrcFile> Other PRC files to load\n";
- print " -r <RunProg> Program to run on startup\n";
- print " -v Display the command instead of running\n\n";
- exit(-1);
-}
-
-sub add_app
-{
- my $new_app = $_[0];
-
- if ($apps_load ne "")
- {
- $apps_load .= ",";
- }
- else
- {
- $apps_load = "-load_apps ";
- }
-
- $apps_load .= "$new_app";
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/verify_sane.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/verify_sane.pl
deleted file mode 100755
index 6b1f598d6444..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/bin/verify_sane.pl
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-####################################################################
-# File Name: template.pl
-# Version : 1.0
-# Project : XMerge
-# Author : Brian Cameron
-# Date : 5th Sept. 2001
-#
-#
-# Takes x and y from the command line and taps the screen there.
-# Assumes pose is already running.
-#
-##########################################################################
-
-use POSIX "sys_wait_h"; # Need this for waitpid with WNOHANG
-use EmRPC; # EmRPC::OpenConnection, CloseConnection
-use EmFunctions;
-use EmUtils;
-
-if ($#ARGV != 0)
-{
- print "\nUsage: $0 timeout\n\n";
- exit -1;
-}
-
-$timeout = $ARGV[0];
-
-if (!defined($up_pid = fork()))
-{
- print "ERROR, problem forking.\n"
-}
-elsif ($up_pid)
-{
- print "\nChecking to see if pose is started properly.\n";
-
- # Parent process
- #
- sleep($timeout);
-
- waitpid($up_pid, WNOHANG);
-
- if (kill(0, $up_pid))
- {
- print "Pose did not start successfully...\n";
- kill(9, $up_pid);
- exit(-1);
- }
- else
- {
- # The child process exited okay, so we know it will not
- # hang...but the open_connection will just die if pose
- # isn't started...so try it in the parent.
- #
- open_connection();
- close_connection();
-
- print "Verified pose started successfully...\n";
- exit(0);
- }
-}
-else
-{
- # Child process - Try to open/close the connection. This
- # can hang if pose did not start properly...
- #
- open_connection();
- close_connection();
-}
-
-sub open_connection
-{
- print "opening connection\n";
- EmRPC::OpenConnection(6415, "localhost");
-}
-
-sub close_connection
-{
- print "closing connection\n";
- EmRPC::CloseConnection();
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_comparator.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_comparator.pl
deleted file mode 100755
index 5e9838c103d1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_comparator.pl
+++ /dev/null
@@ -1,255 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-$compare_home = $ENV{'QA_COMPARATOR_HOME'};
-
-if ($ENV{'CLASSPATH'})
-{
- $classpath_val = "$compare_home:$ENV{'CLASSPATH'}";
-}
-else
-{
- $classpath_val = "$compare_home";
-}
-
-print "classpath is $classpath_val\n";
-
-$list_file="";
-$orig_dir="";
-$new_dir="";
-$diff_type="";
-
-####### BEGIN MAIN ##############
-$cmdline_len = @ARGV;
-if ($cmdline_len <= 0)
-{
- print_usage();
- exit (0);
-}
-
-process_cmdline(@ARGV);
-print_env();
-open (LOGFILE, ">$logfile") || die "Cannot open log file $logfile";
-if ($test_list ne "")
-{
- open (TESTLIST, $test_list) || die "Couldn't open diff list file $test_list";
-
- while (<TESTLIST>)
- {
- chomp $_;
- process_diff(get_file_title($_));
- }
-}
-close TESTLIST;
-close LOGFILE;
-
-####### END MAIN ##############
-
-sub process_diff
-{
-# $_[0] =~ tr/A-Z/a-z/;
-
- # chdir to the output directory so the temporary files created by
- # the java programs are put in the right place.
- #
- chdir ($xml_new);
-
- if ($diff_type eq "xml")
- {
- # Ugly hack, probably a way to tell xerces directly that the dtd's
- # are in $compare_home/dtd.
- #
- `cp $compare_home/dtd/* $xml_new`;
-
-# $cmd = "java -classpath $classpath_val XmlWrapper $xml_orig/$_[0].sxw $xml_new/$_[0].sxw";
- $cmd = "java -classpath $classpath_val XmlWrapper $xml_orig/$_[0] $xml_new/$_[0]";
- print "Executing: $cmd\n";
- $val = system($cmd)/256;
- if ($val == 2)
- {
-# print LOGFILE "$_[0]|TRUE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
- print LOGFILE "$_[0]|TRUE|$xml_orig/$_[0]|$xml_new/$_[0]\n";
- }
- elsif($val == 3)
- {
-# print LOGFILE "$_[0]|FALSE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
- print LOGFILE "$_[0]|FALSE|$xml_orig/$_[0]|$xml_new/$_[0]\n";
- }
- else
- {
-# print LOGFILE "$_[0]|ERROR|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
- print LOGFILE "$_[0]|ERROR|$xml_orig/$_[0]|$xml_new/$_[0]\n";
- }
- }
- elsif ($diff_type eq "pdb")
- {
-# $cmd = "java -classpath $classpath_val SimplePdbCompare $pdb_orig/$_[0].pdb $pdb_new/$_[0].pdb\n";
- $cmd = "java -classpath $classpath_val SimplePdbCompare $pdb_orig/$_[0] $pdb_new/$_[0]\n";
- print "Executing: $cmd\n";
- $val = system($cmd)/256;
- if ($val == 2)
- {
-# print LOGFILE "$_[0]|TRUE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
- print LOGFILE "$_[0]|TRUE|$pdb_orig/$_[0]|$pdb_new/$_[0]\n";
- }
- elsif($val == 3)
- {
-# print LOGFILE "$_[0]|FALSE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
- print LOGFILE "$_[0]|FALSE|$pdb_orig/$_[0]|$pdb_new/$_[0]\n";
- }
- else
- {
-# print LOGFILE "$_[0]|ERROR|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
- print LOGFILE "$_[0]|ERROR|$pdb_orig/$_[0]|$pdb_new/$_[0]\n";
- }
- }
- else
- {
- die "Don't understand test type of $diff_type.";
- }
-}
-
-sub process_cmdline
-{
- foreach $i (@_)
- {
- @arg= split('=', $i);
- @arg[0] =~ tr/A-Z/a-z/;
-
- if (@arg[0] eq "-pdb-orig")
- {
- $pdb_orig=$arg[1];
- }
- elsif (@arg[0] eq "-pdb-new")
- {
- $pdb_new=$arg[1];
- }
- elsif (@arg[0] eq "-xml-orig")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "-xml-new")
- {
- $xml_new=$arg[1];
- }
- elsif (@arg[0] eq "-env")
- {
- set_env_from_props($arg[1]);
- }
- elsif (@arg[0] eq "-list")
- {
- $test_list = $arg[1];
- }
- elsif (@arg[0] eq "-one")
- {
- $infile = $arg[1];
- }
- elsif (@arg[0] eq "-type")
- {
- $diff_type = $arg[1];
- chomp $diff_type;
- }
- elsif (@arg[0] eq "-log")
- {
- $logfile = $arg[1];
- }
- else
- {
- print_usage();
- die "Incorrect command line. Don't understand $i";
- }
- }
-}
-
-sub set_env_from_props
-{
- open(PROPSFILE, $_[0]) || die "Could not open properties file";
-
- while (<PROPSFILE>)
- {
- chomp $_;
- @arg = split('=', $_);
- @arg[0] =~ tr/a-z/A-Z/;
- $len = @arg;
- if ($len != 2)
- {
- die "Malformed property in $ARGV[0]";
- }
-
- if (@arg[0] eq "PDB_ORIG")
- {
- $pdb_orig=$arg[1];
- }
- elsif (@arg[0] eq "PDB_NEW")
- {
- $pdb_new=$arg[1];
- }
- elsif (@arg[0] eq "XML_ORIG")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "XML_NEW")
- {
- $xml_new=$arg[1];
- }
-
- }
- close PROPSFILE;
-}
-
-sub print_usage
-{
- print "Usage : compartor.pl - compare Office or pdb files\n";
- print "\t-one=<file> :\t\t individual test case file to run\n";
- print "\t-list=<file> :\t\t list of test case files\n";
- print "\t-env=<file> :\t\t Properites like file defining env\n";
- print "\t-pdb-orig=<path> :\t directory to hold original pdb files\n";
- print "\t-pdb-new=<path> :\t directory to hold new pdb files\n";
- print "\t-xml-orig=<path> :\t directory to hold original office documents\n";
- print "\t-xml-new=<path> :\t directory to hold new office documents\n";
- print "\t-type=<xml|pdb> :\t Invokes the merge option when converting\n";
- print "\t-log=<logfile> :\t Save results to logfile.\n";
-}
-
-sub print_env
-{
- print "Using the following environment:\n";
- print "\tPDB_ORIG = $pdb_orig\n";
- print "\tPDB_NEW = $pdb_new\n";
- print "\tXML_ORIG = $xml_orig\n";
- print "\tXML_NEW = $xml_new\n\n";
-}
-
-sub get_file_title
-{
- @paths = split('\/', $_[0]);
- $len = @paths;
- return @paths[$len-1];
-# @names = split('\.', @paths[$len-1]);
-# return $names[0];
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_test_driver.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_test_driver.pl
deleted file mode 100755
index d8eea81b5388..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/qa_test_driver.pl
+++ /dev/null
@@ -1,844 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-####################################################################
-# File Name: test_driver.pl
-# Version : 1.0
-# Project : Xmerge
-# Author : Brian Cameron
-# Date : 5th Sept. 2001
-#
-#
-# This script does the following:
-#
-# Processes the input file, and runs the tests specified in that
-# file. This will do the following for each test:
-#
-# 1. Convert a file from XML to PDB format
-# 2. Starts up the Palm OS emulator with the appropriate program
-# running and the converted file loaded the program.
-# 3. Makes automated changes as specified in the inputfile to
-# this script..
-# 4. Returns to the main applications window.
-#
-# Parameter
-# Filename to convert and change
-#
-##########################################################################
-
-# Turn on auto-flushing
-#
-$|=1;
-
-use EmRPC;
-
-# Directory where converterlib is located...
-#
-#use lib "/export/home/test/qadir/qa/lib";
-use lib $ENV{'QA_LIB_HOME'};
-use converterlib;
-
-#-------------------- Start of main script ------------------------------------
-
-# Environmental Settings
-
-$pose_exe = "";
-$pose_prc = "";
-$test_list = "";
-$infile = "";
-$merge_opt = 0;
-# if testcase hasn't completed in 10 mins, then kill it off
-$testcase_timeout=600;
-
-# You may need to change this from the default if your pose emulator
-# starts faster or slower than mine.
-#
-if ($ENV{'POSE_TIMEOUT'})
-{
- $pose_timeout = "$ENV{'POSE_TIMEOUT'}";
-}
-else
-{
- $pose_timeout = 15;
-}
-
-$cmdline_len = @ARGV;
-if ($cmdline_len <= 0)
-{
- print_usage();
- exit (0);
-}
-
-&process_cmdline(@ARGV);
-&print_env();
-&verify_env_options();
-
-# Make the output directories with timestamps included in the
-# directory names.
-#
-mkdir $pdb_orig, 0777 || die "can not create directory <$pdb_orig>.";
-`chmod 777 $pdb_orig`;
-mkdir $pdb_new, 0777 || die "can not create directory <$pdb_new>.";
-`chmod 777 $pdb_new`;
-mkdir $xml_new, 0777 || die "can not create directory <$xml_new>.";
-`chmod 777 $xml_new`;
-
-&verify_prcs_exist("DBExporter.prc");
-
-if ($test_list ne "")
-{
- open (TESTLIST, $test_list) || die "Couldn't open testcase list file $test_list";
-
- while (<TESTLIST>)
- {
- &process_testcase($_);
- }
-}
-elsif ($infile ne "")
-{
- if (!defined($child_pid = fork()))
- {
- # there was an error forking a process
- print "ERROR: Unable to fork process\n";
- die "ERROR: Unable to fork process\n";
- }
- elsif ($child_pid)
- {
- # this is the parent process
- # run the actual test here
-print "********\tPARENT (pid = $$): process_testcase...\n";
- &process_testcase($infile);
-print "********\tPARENT (pid = $$): ...process_testcase finished normally\n";
-
- # test finished normally, so kill the monitor
- # that is running in the child process
-print "********\tPARENT (pid = $$): kill child process ($child_pid)\n";
-print "********\tPARENT Before:\n";
-system( "/usr/bin/ptree" );
- kill( $child_pid );
- kill( 9, $child_pid );
-print "********\tPARENT After:\n";
-system( "/usr/bin/ptree" );
- }
- else
- {
-print "********\tCHILD (pid = $$): sleep for $testcase_timeout seconds\n";
- # this is the child process
- # wait on the test running in the parent, and
- # kill it if it hasn't finished on time
- sleep( $testcase_timeout );
-
- # if the parent hasn't killed this process before it
- # gets here, then it's probably hung, so we need to
- # kill it.
- print "********\tCHILD (pid = $$): TEST HUNG? still "
- ."running after [$testcase_timeout] seconds - "
- ."need to kill test process\n";
- $parent = getppid;
-
- if ( $parent != 1 ) {
- print "********\nCHILD (pid = $$): Killing process ($parent)\n";
- kill( $parent );
- kill( 9, $parent );
- } else {
- # If we cannot get the ppid, then the parent might
- # have died abnormally, before it got a chance to
- # kill this (child) process.
- print "********\nCHILD (pid = $$): cannot determine ppid - "
- ."terminating\n";
-system( "/usr/bin/ptree" );
- exit(2);
- }
-
- exit(1);
- }
-}
-else
-{
- die ("You didn't supply any test cases to process");
-}
-
-print "Finished.\n";
-exit(0);
-
-#-------------------- End of main script ----------------------------------------
-
-#--------------------------------------------------------------------------------
-# Various sub routines
-#--------------------------------------------------------------------------------
-
-# process_testcase
-# infile - test case file name
-#
-# This is the main driver function
-# Opens the infile, reads it in parses it, runs the appropriate conversion
-# starts pose and load the file into the emulator. It launches the
-# appropriate editor and then runs the commands specified in the test case.
-# It then exports the file and saves it locally. Finally it is converted
-# back to the original office format.
-#
-sub process_testcase
-{
- my $infile = $_[0];
- my $convert_file = "";
- my $rc;
-
- # Process the inputfile
- #
- open (INFILE, $infile) || die "Failed to open test case <$infile>";
-
- $running_testtype = "";
-
- # Process the input file.
- #
- while ($c_inline = <INFILE>)
- {
- chomp $c_inline;
- @entry = split('\|', $c_inline);
-
- # Process TEST
- #
- if ($c_inline =~ /^ *#/ || $c_inline =~ /^[ \t]*$/)
- {
- # skip comments and blank lines.
- #
- next;
- }
- elsif ("$entry[0]" eq "TEST")
- {
- # Close the test if one is running.
- #
- &close_program($convert_file);
- $running_testtype = "";
-
- $valid_test = 0;
-
- if ($#entry != 3)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- # Start the test.
- #
- print "\nStarting test: $entry[1]\n";
- $convert_file = $entry[3];
-
- if ("$entry[2]" =~ /[Qq][Uu][Ii][Cc][Kk][Ww][Oo][Rr][Dd]/)
- {
- $xml_extension = "sxw";
- $convert_to = "application/x-aportisdoc";
-
- # Convert XML file to pdb format.
- #
- $rc = &convert_to_pdb("$xml_orig", $convert_file, $xml_extension ,
- $convert_to,"$pdb_orig");
- if ($rc != 0)
- {
- print "\nERROR, problem converting file $convert_file\n\n";
- }
- else
- {
- # Start pose
- #
- $rc = &start_pose("$pose_exe",
- "$pose_prc/Quickword.PRC,$pose_prc/DBExporter.prc,$pdb_orig/$convert_file.pdb",
- "Quickword", $pose_timeout);
-
- if ($rc == 0)
- {
- &start_quickword();
- $valid_test = 1;
- $running_testtype = "QUICKWORD";
- print "\npose launched, begin automated test sequence for QuickWord\n";
- }
- else
- {
- &kill_pose();
- $running_testtype = "";
- }
- }
- }
- elsif ("$entry[2]" =~ /[Mm][Ii][Nn][Ii][Cc][Aa][Ll][Cc]/)
- {
- $xml_extension = "sxc";
- $convert_to = "application/x-minicalc";
-
- # Convert XML file to pdb format.
- #
- $rc = &convert_to_pdb("$xml_orig", $convert_file,
- $xml_extension, $convert_to,"$pdb_orig");
- if ($rc != 0)
- {
- print "\nERROR, problem converting file $convert_file\n\n";
- }
- else
- {
- # Get minicalc PDB file names, since an SXC file can
- # be converted to more than one.
- #
- $pdb_files="";
- $i = 1;
- while (-f "$pdb_orig/$convert_file-Sheet$i.pdb")
- {
- if ($i > 1)
- {
- $pdb_files .= ",";
- }
- $pdb_files .= "$pdb_orig/$convert_file-Sheet$i.pdb";
- $i++;
- }
- $number = $i-1;
-
- # Start pose
- #
- $rc = &start_pose("$pose_exe",
- "$pose_prc/MiniCalc.prc,$pose_prc/DBExporter.prc,$pdb_files",
- "MiniCalc", $pose_timeout);
-
- if ($rc == 0)
- {
- &start_minicalc();
- $valid_test = 1;
- $running_testtype = "MINICALC";
- print "pose launched, begin automated test sequence for MiniCalc\n";
- }
- else
- {
- &kill_pose();
- $running_testtype = "";
- }
- }
- }
- else
- {
- print "\nERROR, invalid extension <$entry[2]>\n\n";
- }
- }
- }
-
- # Process DB_EXPORT
- #
- elsif ("$entry[0]" eq "DB_EXPORT")
- {
- if ($#entry != 1)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- &db_export($entry[1]);
- }
- }
-
- # Process TAP_APPLICATIONS
- #
- elsif ("$entry[0]" eq "TAP_APPLICATIONS")
- {
- if ($#entry != 0)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- &tap_applications(0);
- }
- }
-
- # Process ENTER_STRING_AT_LOCATION
- #
- elsif ("$entry[0]" eq "ENTER_STRING_AT_LOCATION")
- {
- if ($#entry != 3)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &enter_string_at_location($entry[1], $entry[2],
- $entry[3], $running_testtype);
- }
- }
-
- # Process TAP_PEN
- #
- elsif ("$entry[0]" eq "TAP_PEN")
- {
- if ($#entry != 2)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &pose_tap_pen($entry[1], $entry[2], 0);
- }
- }
-
- # Process TAP_BUTTON
- #
- elsif ("$entry[0]" eq "TAP_BUTTON")
- {
- if ($#entry != 1)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &pose_tap_button($entry[1], 0);
- }
- }
-
- # Process TAP_PEN_HARD
- #
- elsif ("$entry[0]" eq "TAP_PEN_HARD")
- {
- if ($#entry != 2)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &pose_tap_pen_hard($entry[1],$entry[2], 0);
- }
- }
-
-
- # Process SLEEP
- #
- elsif ("$entry[0]" eq "SLEEP")
- {
- if ($#entry != 1)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- &pose_sleep($entry[1]);
- }
- }
-
- # Process MINICALC_ENTER_CELL
- #
- elsif ("$entry[0]" eq "MINICALC_ENTER_CELL")
- {
- if ($#entry != 3)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &minicalc_enter_cell($entry[1], $entry[2], $entry[3]);
- }
- }
-
- # Process QUICKWORD_FIND_REPLACE
- #
- elsif ("$entry[0]" eq "QUICKWORD_FIND_REPLACE")
- {
- if ($#entry != 2)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &quickword_find_replace($entry[1], $entry[2]);
- }
- }
- else
- {
- print "\nERROR, invalid line <$c_inline>\n";
- }
- }
-
- &close_program($convert_file);
-}
-
-# close_program
-# convert_file - file to export
-#
-# closes the program running in pose and kills pose
-#
-sub close_program
-{
- my $convert_file = $_[0];
-
- if ($running_testtype eq "QUICKWORD")
- {
- print "QuickWord test completed.\n";
- &close_program_quickword($convert_file);
- }
- elsif ($running_testtype eq "MINICALC")
- {
- print "MiniCalc test completed.\n";
- &close_program_minicalc($convert_file, $number);
- }
-}
-
-# close_program_quickword
-# convert_file - file to export
-#
-# Closes quickword and kills pose
-#
-sub close_program_quickword
-{
- my $convert_file = $_[0];
- my $error_file = "./error.txt";
- my $rc;
-
- &close_quickword();
-
- &db_export($convert_file);
- print "Moving /tmp/$convert_file.pdb to $pdb_new\n";
- `mv /tmp/$convert_file.pdb $pdb_new`;
- `chmod 666 $pdb_new/$convert_file.pdb`;
-
- &close_connection(1);
- &kill_pose();
- print "\nFinishing test...\n";
-
- # The path of where to put the error file should be specified
- # in the properties file. Not sure if it is really necessary
- # to put this out to a separate file. STDOUT should be fine.
- #
- $rc = &convert_to_xml($xml_new, $xml_orig,
- "$pdb_new/$convert_file.pdb", "application/x-aportisdoc" ,
- "sxw", $convert_file, $merge_opt);
- if ($rc != 0)
- {
- print "\nERROR, problem converting file $pdb_new/$convert_file.pdb\n\n";
- }
-}
-
-# close_program_minicalc
-# convert_file - file to export
-#
-# Closes minicalc and kills pose
-#
-sub close_program_minicalc
-{
- my $convert_file = $_[0];
- my $num_files = $_[1];
- my $list="";
- my $rc;
-
- &close_minicalc();
-
- for ($a=1; $a <= $num_files; $a++)
- {
- &db_export("$convert_file-Sheet$a");
- print "Moving /tmp/$convert_file-Sheet$a.pdb to $pdb_new/\n";
- `mv /tmp/$convert_file-Sheet$a.pdb $pdb_new/`;
- `chmod 666 $pdb_new/$convert_file-Sheet$a.pdb`;
- }
-
- &close_connection(1);
- &kill_pose();
- print "\nFinishing test...\n";
-
- for ($a=1; $a <= $num_files; $a++)
- {
- $list .="$pdb_new/$convert_file-Sheet$a.pdb "
- }
-
- $rc = &convert_to_xml($xml_new, $xml_orig, "$list",
- "application/x-minicalc", "sxc", $convert_file, $merge_opt);
- if ($rc != 0)
- {
- print "\nERROR, problem converting file(s) $list\n\n";
- }
-
- &pose_sleep(5);
-}
-
-# print_usage
-#
-# prints the usage for this program.
-#
-sub print_usage
-{
- print "Usage : test_driver.pl\n";
- print "\t-test=<file> \t\t: individual test case file to run\n";
- print "\t-list=<file> \t\t: list of test case files\n";
- print "\t-env=<file> \t\t: Properites like file defining env\n";
- print "\t-pose-exe=<fullpath> \t: path to pose executable\n";
- print "\t-pose-prc=<path> \t: path to directory holding prc files\n";
- print "\t-pdb-orig=<path> \t: directory to hold original pdb files\n";
- print "\t-pdb-new=<path> \t: directory to hold new pdb files\n";
- print "\t-xml-orig=<path> \t: directory to hold original office documents\n";
- print "\t-xml-new=<path> \t: directory to hold new office documents\n";
- print "\t-merge \t: Invokes the merge option when converting\n";
- print "\t \t from PDB back to XML.\n";
-}
-
-# print_env
-#
-# Prints the current environment.
-#
-sub print_env
-{
- print "\nUsing the following environment:\n";
- print "\tPOSE_EXE = $pose_exe\n";
- print "\tPOSE_PRC = $pose_prc\n";
- print "\tPDB_ORIG = $pdb_orig\n";
- print "\tPDB_NEW = $pdb_new\n";
- print "\tXML_ORIG = $xml_orig\n";
- print "\tXML_NEW = $xml_new\n";
-}
-
-# process_cmdline
-#
-# command line options come in as key/value pairs.
-# read them and set the appropriate global variable
-#
-# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
-# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
-#
-sub process_cmdline
-{
- foreach $i (@_)
- {
- my @arg= split('=', $i);
- @arg[0] =~ tr/A-Z/a-z/;
-
- if (@arg[0] eq "-pose-exe")
- {
- $pose_exe=$arg[1];
- }
- elsif (@arg[0] eq "-pose-prc")
- {
- $pose_prc=$arg[1];
- }
- elsif (@arg[0] eq "-pdb-orig")
- {
- $pdb_orig_dir=$arg[1];
- $pdb_orig=$arg[1];
- }
- elsif (@arg[0] eq "-pdb-new")
- {
- $pdb_new_dir=$arg[1];
- $pdb_new=$arg[1];
- }
- elsif (@arg[0] eq "-xml-orig")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "-xml-new")
- {
- $xml_new_dir=$arg[1];
- $xml_new=$arg[1];
- }
- elsif (@arg[0] eq "-env")
- {
- &set_env_from_props($arg[1]);
- }
- elsif (@arg[0] eq "-list")
- {
- $test_list = $arg[1];
- }
- elsif (@arg[0] eq "-test")
- {
- $infile = $arg[1];
- }
- elsif (@arg[0] eq "-merge")
- {
- $merge_opt = 1;
- }
- else
- {
- print_usage();
- die "Incorrect command line";
- }
- }
-}
-
-# set_env_from_props
-# infile - property file
-#
-# Read the properties file, of the form key=value
-# Valid key values are :
-# POSE_EXE
-# POSE_PRC
-# PDB_ORIG
-# PDB_NEW
-# XML_ORIG
-# XML_NEW
-# If a value is found the appropriate global variable is set.
-#
-# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
-# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
-#
-sub set_env_from_props
-{
- my $infile = $_[0];
-
- open(PROPSFILE, $infile) || die "Could not open properties file <$infile>";
-
- while (<PROPSFILE>)
- {
- chomp $_;
- my @arg = split('=', $_);
- @arg[0] =~ tr/a-z/A-Z/;
- my $len = @arg;
- if ($len != 2)
- {
- die "Malformed property in $arg[0]";
- }
- if (@arg[0] eq "POSE_EXE")
- {
- $pose_exe=$arg[1];
- }
- elsif (@arg[0] eq "POSE_PRC")
- {
- $pose_prc=$arg[1];
- }
- elsif (@arg[0] eq "PDB_ORIG")
- {
- $pdb_orig_dir=$arg[1];
- $pdb_orig=$arg[1];
- }
- elsif (@arg[0] eq "PDB_NEW")
- {
- $pdb_new_dir=$arg[1];
- $pdb_new=$arg[1];
- }
- elsif (@arg[0] eq "XML_ORIG")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "XML_NEW")
- {
- $xml_new_dir=$arg[1];
- $xml_new=$arg[1];
- }
-
- }
- close PROPSFILE;
-}
-
-# verify_env_options
-#
-# Verify that input options are correctly set.
-# Assumes pose_exe, pose_prc, xml_orig, xml_new_dir,
-# pdb_orig_dir, and pdb_new_dir are already set.
-#
-sub verify_env_options
-{
- if (!-e "$pose_exe")
- {
- die "The pose executable cannot be found at $pose_exe.";
- }
- if (!-x $pose_exe)
- {
- die "$pose_exe exists but is not executable.";
- }
-
- if (!-e "$pose_prc")
- {
- die "The PRC directory specified as $pose_prc does not exist.";
- }
- if (!-d "$pose_prc")
- {
- die "The PRC location specified as $pose_prc exists, but is not a directory.";
- }
-
- if (!-e "$pdb_orig_dir")
- {
- die "The original PDB directory specified as $pdb_orig_dir does not exist.";
- }
- if (!-d "$pdb_orig_dir")
- {
- die "The original PDB directory specified as $pdb_orig_dir exists but is not a directory.";
- }
-
- if (!-e "$pdb_new_dir")
- {
- die "The new PDB directory specified as $pdb_new_dir does not exist.";
- }
- if (!-d "$pdb_new_dir")
- {
- die "The new PDB directory specified as $pdb_new_dir exists but is not a directory.";
- }
-
- if (!-e "$xml_orig")
- {
- die "The original Office document directory specified as $xml_orig does not exist.";
- }
- if (!-d "$xml_orig")
- {
- die "The original Office document location specified as $xml_orig exists but is not a directory.";
- }
-
- if (!-e "$xml_new_dir")
- {
- die "The new Office document directory specified as $xml_new_dir does not exist.";
- }
- if (!-d "$xml_new_dir")
- {
- die "The new Office document location specified as $xml_new_dir exists but is not a directory.";
- }
-}
-
-# verify_prcs_exist
-# prcfile - the PRC file to check
-#
-# Verifies that the specified PRC file exists.
-#
-sub verify_prcs_exist
-{
- my $prcfile = $_[0];
-
- if (!-e "$pose_prc/$prcfile")
- {
- die "The pose PRC directory ($pose_prc) is correct, but I can't find $prcfile there.";
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/run-convtest b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/run-convtest
deleted file mode 100755
index 0931ca77539d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/bin/run-convtest
+++ /dev/null
@@ -1,536 +0,0 @@
-#!/bin/ksh
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-#set -x
-umask 0
-
-integer TOTAL_PASS=0
-integer TOTAL_FAIL=0
-integer TOTAL_RUN=0
-integer MAX_RETRIES=5
-typeset RUNNAME=`date +%Y%m%d%H%M%S`
-typeset PRINTDATE=`date`
-typeset PDB_INFILE_DIR
-typeset PDB_OUTFILE_DIR
-typeset XML_OUTFILE_DIR
-typeset REPORT
-typeset RESDIR
-typeset LOGFILE
-typeset COMPLOG
-typeset TEST_COMMENTS
-typeset BGCOLOR
-typeset ODD_BGCOLOR='#BBBBBB'
-typeset EVEN_BGCOLOR='#DCDCDC'
-typeset PASS_COLOR='#00ff00'
-typeset FAIL_COLOR='#ff4040'
-
-typeset ENVFILE=""
-# The following variables should be set in the env file
-typeset MASTERLIST=""
-typeset TESTCASEDIR=""
-typeset RESULTSBASE=""
-typeset XMERGE_JAR=""
-typeset APORTIS_JAR=""
-typeset WORDSMITH_JAR=""
-typeset MINICALC_JAR=""
-typeset PERL5LIB=""
-typeset POSE_EXE=""
-typeset POSE_PRC=""
-typeset TEST_DRIVER_PL=""
-typeset COMPARATOR_PL=""
-typeset COMPLIST=""
-typeset XML_INFILE_DIR=""
-typeset PDB_BASELINE_DIR=""
-typeset XML_BASELINE_DIR=""
-typeset EM_SCRIPT_HOME=""
-typeset QAWRAPPER_SCRIPT_HOME=""
-typeset EM_ROM_FILE=""
-typeset EM_SESSION_FILE=""
-typeset QA_LIB_HOME=""
-typeset QA_COMPARATOR_HOME=""
-typeset CLASSES_DIR=""
-
-
-
-################################################################################
-Usage() {
- echo "Usage: run-convtest -env <ENVFILE> [-name RUNNAME]"
- exit 1
-}
-
-
-################################################################################
-StartReportFile() {
- typeset line=`date`
-
- ReportLine "<HTML>"
- ReportLine "<HEAD>"
- ReportLine "<TITLE>XMerge Converters Test Results - ${RUNNAME}</TITLE>"
- ReportLine "</HEAD>"
- ReportLine "<BODY BGCOLOR=#ffffff>"
- ReportLine "<H1 align=center>XMerge Converters Test Results - ${RUNNAME}</H1>"
- ReportLine "<P>"
- ReportLine "Test run on: ${PRINTDATE}"
- ReportLine "<P>"
- ReportLine "<CENTER>"
- ReportLine "<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=2>"
- ReportLine "<TR BGCOLOR='#9999CC'>"
- ReportLine "<TH>Test Name</TH>"
- ReportLine "<TH>Test File</TH>"
- ReportLine "<TH>.ext</TH>"
- ReportLine "<TH>Result</TH>"
- ReportLine "<TH>Comments</TH>"
- ReportLine "</TR>"
-}
-
-
-################################################################################
-EndReportFile() {
- # remove full path from LOGFILE (link will be to current dir)
- typeset loglink=${LOGFILE##*/}
-
- ReportLine "<P>"
- ReportLine "<CENTER>"
- ReportLine "<TABLE BORDER=1 CELLSPACING=0 CELLPADDING=2>"
- ReportLine "<TR>"
- ReportLine "<TH>Total Tests PASSED</TH>"
- ReportLine "<TH>${TOTAL_PASS}</TH>"
- ReportLine "</TR>"
- ReportLine "<TR>"
- ReportLine "<TH>Total Tests FAILED</TH>"
- ReportLine "<TH>${TOTAL_FAIL}</TH>"
- ReportLine "</TR>"
- ReportLine "<TR>"
- ReportLine "<TH>Total Tests Run</TH>"
- ReportLine "<TH>${TOTAL_RUN}</TH>"
- ReportLine "</TR>"
- ReportLine "</TABLE>"
- ReportLine "</CENTER>"
- ReportLine "<P>"
- ReportLine "<A HREF=${loglink}>Full logfile for test run</A>"
- ReportLine "<P>"
- ReportLine "<CENTER>"
- ReportLine "</BODY>"
- ReportLine "</HTML>"
-}
-
-################################################################################
-ReportLine() {
- echo $1 >> $REPORT
-}
-
-################################################################################
-LogLine() {
- echo $1 >> $LOGFILE
-}
-
-################################################################################
-ReportTestComments() {
- if [[ $TEST_COMMENTS == "" ]] ; then
- TEST_COMMENTS="&nbsp;"
- fi
-
- ReportLine "<TD>${TEST_COMMENTS}</TD>"
-}
-
-################################################################################
-GetParams() {
- integer argc=$#
- integer i=0
-
- if [[ $argc -lt 1 ]] ; then
- Usage
- fi
-
- while (($i < $argc)) ; do
- arg=$1
- shift
- i=i+1
-
- if [[ $arg == '-name' ]] ; then
- if (( $i < $argc )) ; then
- RUNNAME=$1
- echo "RUNNAME=[$RUNNAME]"
- shift
- i=i+1
- else
- Usage
- fi
- elif [[ $arg == '-env' ]] ; then
- if (( $i < $argc )) ; then
- ENVFILE=$1
- shift
- i=i+1
- else
- Usage
- fi
- else
- Usage
- fi
- done
-
- if [[ $ENVFILE == "" ]] ; then
- Usage
- fi
-}
-
-
-################################################################################
-ReadEnvFile() {
- . $ENVFILE
-
-
- echo ""
- echo "The following values have been set from $ENVFILE:"
- echo "MASTERLIST=$MASTERLIST"
- echo "TESTCASEDIR=$TESTCASEDIR"
- echo "XMERGE_JAR=$XMERGE_JAR"
- echo "APORTIS_JAR=$APORTIS_JAR"
- echo "WORDSMITH_JAR=$WORDSMITH_JAR"
- echo "MINICALC_JAR=$MINICALC_JAR"
- echo "RESULTSBASE=$RESULTSBASE"
- echo "PERL5LIB=$PERL5LIB"
- echo "POSE_EXE=$POSE_EXE"
- echo "POSE_PRC=$POSE_PRC"
- echo "TEST_DRIVER_PL=$TEST_DRIVER_PL"
- echo "COMPARATOR_PL=$COMPARATOR_PL"
- echo "XML_INFILE_DIR=$XML_INFILE_DIR"
- echo "PDB_BASELINE_DIR=$PDB_BASELINE_DIR"
- echo "XML_BASELINE_DIR=$XML_BASELINE_DIR"
- echo "EM_SCRIPT_HOME=$EM_SCRIPT_HOME"
- echo "QAWRAPPER_SCRIPT_HOME=$QAWRAPPER_SCRIPT_HOME"
- echo "EM_ROM_FILE=$EM_ROM_FILE"
- echo "EM_SESSION_FILE=$EM_SESSION_FILE"
- echo "QA_LIB_HOME=$QA_LIB_HOME"
- echo "QA_COMPARATOR_HOME=$QA_COMPARATOR_HOME"
- echo "CLASSES_DIR=$CLASSES_DIR"
- echo "COMPLIST=$COMPLIST"
-}
-
-################################################################################
-POSESetup() {
- export PERL5LIB
- export EM_SCRIPT_HOME
- export QAWRAPPER_SCRIPT_HOME
- export EM_ROM_FILE
- export EM_SESSION_FILE
- export QA_LIB_HOME
- export QA_COMPARATOR_HOME
- export CLASSES_DIR
-
-}
-
-################################################################################
-TestSetup() {
-
-
- POSESetup
-
- export ZENDEBUG=1
-
- COMPLIST="${COMPLIST}/tempcomp.${RUNNAME}.list"
- # create the directories for the results of this test run
- RESDIR="${RESULTSBASE}/${RUNNAME}"
- \rm -Rf $RESDIR
- mkdir $RESDIR
-
- # Define the directories for the test input files,
- # test output files, working directories and baseline files
- PDB_INFILE_DIR="${RESDIR}/pdb-orig"
- mkdir "${PDB_INFILE_DIR}"
- PDB_OUTFILE_DIR="${RESDIR}/pdb-new"
- mkdir "${PDB_OUTFILE_DIR}"
- XML_OUTFILE_DIR="${RESDIR}/xml-new"
- mkdir "${XML_OUTFILE_DIR}"
-
- LOGFILE="${RESDIR}/logfile"
- COMPLOG="${RESDIR}/complog"
- REPORT="${RESDIR}/report.html"
- StartReportFile
-
- echo "Results in: $RESDIR"
- echo "Report file: $REPORT"
-}
-
-################################################################################
-TestCleanup() {
- EndReportFile
-}
-
-################################################################################
-TestCaseSetup() {
- # where to pick up converter classes
- export CLASSPATH=""
- export CLASSPATH=$CLASSPATH:$XMERGE_JAR
- export CLASSPATH=$CLASSPATH:$APORTIS_JAR
- export CLASSPATH=$CLASSPATH:$WORDSMITH_JAR
- export CLASSPATH=$CLASSPATH:$MINICALC_JAR
-}
-
-################################################################################
-TestCaseCleanup() {
- # empty function
- a=42
-}
-
-################################################################################
-RunTestCase() {
- testcase=$1
-
- LogLine ""
- LogLine "test_driver output:"
-
- # run test_driver in foreground
- $TEST_DRIVER_PL\
- -pose-prc=${POSE_PRC}\
- -pose-exe=${POSE_EXE}\
- -xml-orig=${XML_INFILE_DIR}\
- -pdb-orig=${PDB_INFILE_DIR}\
- -pdb-new=${PDB_OUTFILE_DIR}\
- -xml-new=${XML_OUTFILE_DIR}\
- -test=$testcase -merge >> $LOGFILE 2>&1
-
- # cleanup in case zombie POSE processes are hanging around
- pkill pose
- pkill -9 pose
-}
-
-
-################################################################################
-ComparisonSetup() {
- typeset file=$1
-
-
- export CLASSPATH="$CLASSES_DIR/xerces.jar"
-
- # create temporary comparator list file for this test case
- echo $file > $COMPLIST
-}
-
-################################################################################
-ComparisonCleanup() {
- # remove temporary comparator list file used for this test case
- \rm -f $COMPLIST
-}
-
-################################################################################
-RunComparison() {
- typeset type=$1
-
- LogLine ""
- LogLine "Comparator output:"
- $COMPARATOR_PL\
- -xml-orig=${XML_BASELINE_DIR}\
- -pdb-orig=${PDB_BASELINE_DIR}\
- -pdb-new=${PDB_INFILE_DIR}\
- -xml-new=${XML_OUTFILE_DIR}\
- -list=$COMPLIST -log=$COMPLOG -type=$type >> $LOGFILE 2>&1
-# -list=$COMPLIST -log=$COMPLOG -type=$type | tee -a $LOGFILE 2>&1
-
- pass=`grep TRUE $COMPLOG | wc -l`
-
- LogLine ""
- LogLine "COMPLIST file:"
- cat $COMPLIST >> $LOGFILE
- LogLine ""
- LogLine "Comparator logfile:"
- cat $COMPLOG >> $LOGFILE
-
- if [ $pass -eq 0 ]
- then
- TEST_COMMENTS="${TEST_COMMENTS}$type comparison ERROR<BR>"
- echo "$type comparison ERROR"
- return 0
- fi
-
- echo "$type comparison OK"
- return 1
-}
-
-################################################################################
-CheckOutput() {
- typeset xmlfile="${XML_OUTFILE_DIR}/$1"
- typeset pdbfile="${PDB_INFILE_DIR}/$2"
-
- if [ ! -f $pdbfile ] ; then
- TEST_COMMENTS="${TEST_COMMENTS}[$pdbfile] does not exist<BR>"
- LogLine "ERROR: $pdbfile does not exist"
- echo "ERROR: $pdbfile does not exist"
- return 0
- fi
-
- if [ ! -f $xmlfile ] ; then
- TEST_COMMENTS="${TEST_COMMENTS}[$xmlfile] does not exist<BR>"
- LogLine "ERROR: $xmlfile does not exist"
- echo "ERROR: $xmlfile does not exist"
- return 0
- fi
-
- return 1
-}
-
-################################################################################
-RunTest() {
- typeset testcasename
- typeset testcase
- typeset testfile
- typeset pdbfile
- typeset xmlfile
- typeset ext
- integer try
- integer finished_with_test
- integer test_pass
-
- TestSetup
-
- BGCOLOR=$ODD_BGCOLOR
-
- while read line ; do
- # get chars up to 1st space
- testcasename=${line%% *}
- testcase="${TESTCASEDIR}/$testcasename"
-
- # get 2nd word
- testfile=${line#* }
- testfile=${testfile%% *}
-
- # get last word
- ext=${line##* }
-
- LogLine "############################################"
- LogLine "Starting the following testcase"
- LogLine "testcase = $testcase"
- LogLine "testfile = $testfile"
- LogLine "ext = $ext"
-
- ReportLine "<TR BGCOLOR='${BGCOLOR}'>"
- ReportLine "<TD valign=top>$testcasename</TD>"
- ReportLine "<TD valign=top>$testfile</TD>"
- ReportLine "<TD valign=top>$ext</TD>"
-
- echo ""
- echo "testcase = $testcase"
- echo "testfile = $testfile"
- echo "ext = $ext"
-
- try=1
- finished_with_test=0
- TEST_COMMENTS=""
-
- while (($finished_with_test == 0)) ; do
-
- TestCaseSetup
- RunTestCase $testcase
- TestCaseCleanup
-
- xmlfile="${testfile}.${ext}"
-
- if [[ $ext == "sxc" ]] ; then
- pdbfile="${testfile}-Sheet1.pdb"
- else
- pdbfile="${testfile}.pdb"
- fi
-
- CheckOutput $xmlfile $pdbfile
- res=$?
-
- if [[ $res -eq 1 ]] ; then
- ComparisonSetup $pdbfile
- RunComparison pdb
- res=$?
-# ignore result until pdb comparator is fixed...
-res=1
- ComparisonCleanup
- fi
-
- if [[ $res -eq 1 ]] ; then
- ComparisonSetup $xmlfile
- RunComparison xml
- res=$?
- ComparisonCleanup
- fi
-
- if [[ $res -eq 1 ]] ; then
- TOTAL_PASS=TOTAL_PASS+1
- ReportLine "<TD valign=top BGCOLOR='${PASS_COLOR}'>PASS</TD>"
- ReportTestComments
- ReportLine "</TR>"
- LogLine "Test PASSED (on try $try)"
- echo "Test PASSED (on try $try)"
- finished_with_test=1
- else
- TEST_COMMENTS="${TEST_COMMENTS}error on try ${try}<BR>"
- LogLine "TEST FAILED (on try $try)"
- echo "TEST FAILED (on try $try)"
-
- if [[ $try -eq $MAX_RETRIES ]] ; then
- TOTAL_FAIL=TOTAL_FAIL+1
- ReportLine "<TD valign=top BGCOLOR='${FAIL_COLOR}'>FAIL</TD>"
- ReportTestComments
- ReportLine "</TR>"
- finished_with_test=1
- fi
- fi
-
- try=try+1
- done
-
- TOTAL_RUN=TOTAL_RUN+1
-
- # toggle BGCOLOR for next report line
- if [[ $BGCOLOR == $ODD_BGCOLOR ]] ; then
- BGCOLOR=$EVEN_BGCOLOR
- else
- BGCOLOR=$ODD_BGCOLOR
- fi
-
- done < $MASTERLIST
-
- ReportLine "</TABLE>"
- ReportLine "</CENTER>"
-
- TestCleanup
-
- echo "Total Tests PASSED: "${TOTAL_PASS}
- echo "Total Tests FAILED: "${TOTAL_FAIL}
- echo "Total Tests RUN: "${TOTAL_RUN}
- echo "Results in: $RESDIR"
- echo "Report file: $REPORT"
-}
-
-################################################################################
-################################################################################
-# main
-################################################################################
-################################################################################
-
-GetParams $@
-ReadEnvFile
-RunTest
-
-exit 0
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/env/master.env b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/env/master.env
deleted file mode 100755
index 1571781bf475..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/env/master.env
+++ /dev/null
@@ -1,85 +0,0 @@
-#The Qa-Test environment is defined in this file. All of the fields are
-#necessary in order for the scripts to run effectlively
-
-###########################################################
-# MASTERLIST file defines which test to run. These list are usually located in
-# the qa-wrapper/lists dir
-
-MASTERLIST=<listdir/list file>
-
-###########################################################
-#The TESTCASE dir is where the testcases to be run are located
-
-TESTCASEDIR=<testcase dir>
-
-###########################################################
-# Results are stored in a new directory at ${RESULTSBASE}/results-${RUNNAME}
-
-RESULTSBASE=/export/home/test/qadir/qa-wrapper/results
-
-###########################################################
-# Where to find the Xmerge JAR files
-
-APORTIS_JAR=/export/home/test/qadir/qa-wrapper/classes/aportisdoc.jar
-WORDSMITH_JAR=/export/home/test/qadir/qa-wrapper/classes/wordsmith.jar
-MINICALC_JAR=/export/home/test/qadir/qa-wrapper/classes/minicalc.jar
-CLASSES_DIR=<qa-wrapperdir>/classes
-
-###########################################################
-# setup which version of POSE to use
-
-PERL5LIB=<Pose directory>/Scripting/Perl
-POSE_EXE=<Pose directory>/posedist/pose
-POSE_PRC=<location of prc files to use for testing>
-
-###########################################################
-
-# Location of files required to run Pose
-
-EM_ROM_FILE=<location and name of palm rom file>
-EM_SESSION_FILE=<location of palm session file>
-
-
-###########################################################
-
-
-# where to get the executables for the test_driver and the comparator
-
-TEST_DRIVER_PL=<qa-wrapperdir>/bin/qa_test_driver.pl
-COMPARATOR_PL=<qa-wrapperdir>/bin/qa_comparator.pl
-COMPLIST=<qa-wrapperdir>/lists
-
-###########################################################
-# where to get the original XML test files
-
-XML_INFILE_DIR=<qa-wrapperdir>/testcases/xml-orig
-
-###########################################################
-# where to find the baseline PDB files
-
-PDB_BASELINE_DIR=<qa-wrapperdir>/results/baseline/pdb-base
-
-###########################################################
-# where to find the baseline XML files
-
-XML_BASELINE_DIR=<qa-wrapperdir>/results/baseline/xml-base
-
-###########################################################
-#Location of script that runs the conversions
-EM_SCRIPT_HOME=<location of rd script>
-
-###########################################################
-#Location of run-convtest.pl
-QAWRAPPER_SCRIPT_HOME=<qa-wrapperdir>/bin
-
-###########################################################
-#Location of converterlib.pm
-QA_LIB_HOME=<qa dir>/lib
-
-###########################################################
-#Location of comparator.pl
-QA_COMPARATOR_HOME=<qa dir>/comparator/
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/lists/master.list b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/lists/master.list
deleted file mode 100755
index d6be4fb063bd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/lists/master.list
+++ /dev/null
@@ -1,55 +0,0 @@
-c_addition01-mod.infile c_addition sxc
-c_alignment.infile c_alignment sxc
-c_backwardrange-mod.infile c_backwardrange sxc
-c_basic-mod.infile c_basic sxc
-c_boolean-mod.infile c_boolean sxc
-c_cellpercentvalue-mod.infile c_cellpercentvalue sxc
-c_cellstringvalue-mod.infile c_cellstringvalue sxc
-c_columnswidth-mod.infile c_columnswidth sxc
-c_cyclic-mod.infile c_cyclic sxc
-c_dividefloating-mod.infile c_dividefloating sxc
-c_forwardrange-mod.infile c_forwardrange sxc
-c_insertimage.infile c_insertimage sxc
-c_invalidcellref-mod.infile c_invalidcellref sxc
-c_largerange-mod.infile c_largerange sxc
-c_listrange-mod.infile c_listrange sxc
-c_mathematical-mod.infile c_mathematical sxc
-c_protection-mod01.infile c_protection sxc
-c_sheetreference-mod.infile c_sheetreference sxc
-c_simple01-mod.infile c_simple01 sxc
-c_simple02-mod.infile c_simple04 sxc
-c_simple03-mod.infile c_simple02 sxc
-c_simple04-mod.infile c_simple03 sxc
-c_smallrange-mod.infile c_smallrange sxc
-c_styles.infile c_styles sxc
-c_textimage.infile c_textimage sxc
-a_table.infile a_table sxw
-a_animatedgif.infile a_animatedgif sxw
-a_linebreaks.infile a_linebreaks sxw
-a_bulletorderedlist.infile a_bulletorderedlist sxw
-a_superscript.infile a_superscript sxw
-a_subscript.infile a_subscript sxw
-a_emptydoc.infile a_emptydoc sxw
-a_fontsize.infile a_fontsize sxw
-a_heading.infile a_heading sxw
-a_heading1.infile a_heading1 sxw
-a_heading2.infile a_heading2 sxw
-a_hyperlink.infile a_hyperlink sxw
-a_justified.infile a_justified sxw
-a_linespacing.infile a_linespacing sxw
-a_numberorderedlist.infile a_numberorderedlist sxw
-a_pagebreak.infile a_pagebreak sxw
-a_paragraph.infile a_paragraph sxw
-a_standard.infile a_standard sxw
-a_symbols.infile a_symbols sxw
-a_wordwrap.infile a_wordwrap sxw
-a_unorderedlist.infile a_unorderedlist sxw
-a_textspan.infile a_textspan sxw
-a_bolddoc.infile a_bolddoc sxw
-a_tab.infile a_tab sxw
-a_firstlineindent.infile a_firstlineindent sxw
-a_bookmarks.infile a_bookmarks sxw
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_animatedgif.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_animatedgif.pdb
deleted file mode 100755
index 88dbf557cc4e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_animatedgif.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bolddoc.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bolddoc.pdb
deleted file mode 100755
index 0bfadf294bdf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bolddoc.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bookmarks.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bookmarks.pdb
deleted file mode 100755
index 8c134002c9de..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bookmarks.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bulletorderedlist.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bulletorderedlist.pdb
deleted file mode 100755
index 8f3d588dfb67..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_bulletorderedlist.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_emptydoc.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_emptydoc.pdb
deleted file mode 100755
index 99c045e6113c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_emptydoc.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_firstlineindent.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_firstlineindent.pdb
deleted file mode 100755
index 279d2287b65d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_firstlineindent.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_fontsize.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_fontsize.pdb
deleted file mode 100755
index 8b3cef8cdedb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_fontsize.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading.pdb
deleted file mode 100755
index deb8f613fdf3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading1.pdb
deleted file mode 100755
index f3c89a917c21..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading2.pdb
deleted file mode 100755
index e954224020b7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_heading2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_hyperlink.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_hyperlink.pdb
deleted file mode 100755
index 88a3927fbd24..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_hyperlink.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_justified.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_justified.pdb
deleted file mode 100755
index c93da36ec630..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_justified.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linebreaks.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linebreaks.pdb
deleted file mode 100755
index 8152cf5156d2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linebreaks.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linespacing.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linespacing.pdb
deleted file mode 100755
index 8cbe09e5ff1e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_linespacing.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_numberorderedlist.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_numberorderedlist.pdb
deleted file mode 100755
index f7c1835b8d0b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_numberorderedlist.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_pagebreak.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_pagebreak.pdb
deleted file mode 100755
index 7ad393f3fd84..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_pagebreak.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_paragraph.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_paragraph.pdb
deleted file mode 100755
index 5c2bfa52c77b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_paragraph.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple01.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple01.pdb
deleted file mode 100755
index b1ea0024c1f1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple01.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple02.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple02.pdb
deleted file mode 100755
index 5eaf2292c34f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple02.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple03.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple03.pdb
deleted file mode 100755
index 8c9d2bb568df..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple03.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple04.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple04.pdb
deleted file mode 100755
index 7e88c9fe866a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple04.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple05.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple05.pdb
deleted file mode 100755
index d0959c91bd2d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_simple05.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_standard.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_standard.pdb
deleted file mode 100755
index 694e33361df2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_standard.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_subscript.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_subscript.pdb
deleted file mode 100755
index d6a9081a0150..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_subscript.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_superscript.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_superscript.pdb
deleted file mode 100755
index e4349e79842f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_superscript.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_symbols.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_symbols.pdb
deleted file mode 100755
index 7ef7f9daacc7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_symbols.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_tab.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_tab.pdb
deleted file mode 100755
index 0befa7c85eb2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_tab.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_table.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_table.pdb
deleted file mode 100755
index 72a2f98f7485..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_table.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_textspan.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_textspan.pdb
deleted file mode 100755
index bbb4487c986f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_textspan.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_unorderedlist.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_unorderedlist.pdb
deleted file mode 100755
index 214100ce6117..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_unorderedlist.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_wordwrap.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_wordwrap.pdb
deleted file mode 100755
index 4c2179aada8e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/a_wordwrap.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet1.pdb
deleted file mode 100755
index c5a559ead4e7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet2.pdb
deleted file mode 100755
index c633734b8f17..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet3.pdb
deleted file mode 100755
index c7571e003964..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_addition-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet1.pdb
deleted file mode 100755
index 200026701dc6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet2.pdb
deleted file mode 100755
index 1531205547ce..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet3.pdb
deleted file mode 100755
index 089b36be0cdd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_alignment-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet1.pdb
deleted file mode 100755
index a99167080c7e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet2.pdb
deleted file mode 100755
index 6df6cb9cd183..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet3.pdb
deleted file mode 100755
index 3f08a196172a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_backwardrange-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet1.pdb
deleted file mode 100755
index 287a25bd0b87..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet2.pdb
deleted file mode 100755
index 8efbe6d58e34..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet3.pdb
deleted file mode 100755
index b7cbfb7f8f5c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_basic-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet1.pdb
deleted file mode 100755
index 458fcf18bfc5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet2.pdb
deleted file mode 100755
index 188dd9d5be96..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet3.pdb
deleted file mode 100755
index 6568390100da..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_boolean-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet1.pdb
deleted file mode 100755
index 984b1f14001c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet2.pdb
deleted file mode 100755
index 9b0e50b204c1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet3.pdb
deleted file mode 100755
index c39410c5c656..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellcurrencyalue-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet1.pdb
deleted file mode 100755
index 84b0c2aabaaa..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet2.pdb
deleted file mode 100755
index f8300622d553..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet3.pdb
deleted file mode 100755
index 5c841af6f953..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellpercentvalue-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet1.pdb
deleted file mode 100755
index aeea92b92b38..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet2.pdb
deleted file mode 100755
index 3230b1574a69..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet3.pdb
deleted file mode 100755
index 8fcfd9940ead..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cellstringvalue-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet1.pdb
deleted file mode 100755
index db4ee52a9c1b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet2.pdb
deleted file mode 100755
index 110ef180f613..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet3.pdb
deleted file mode 100755
index 33c6c9f0061f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_columnswidth-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet1.pdb
deleted file mode 100755
index ee52655a0056..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet2.pdb
deleted file mode 100755
index c6caaf40132d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet3.pdb
deleted file mode 100755
index 8b6a735edeb9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_cyclic-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet1.pdb
deleted file mode 100755
index 53d2acbac676..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet2.pdb
deleted file mode 100755
index 5a4a0460d258..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet3.pdb
deleted file mode 100755
index eaa43bc683b1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_dividefloating-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet1.pdb
deleted file mode 100755
index 026634583a5b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet2.pdb
deleted file mode 100755
index b11956ab7c4a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet3.pdb
deleted file mode 100755
index 56fef34f9c4e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_forwardrange-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet1.pdb
deleted file mode 100755
index f7c2e2188bfc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet2.pdb
deleted file mode 100755
index cc2cc083533a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet3.pdb
deleted file mode 100755
index 51328fd9c1ef..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_insertimage-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet1.pdb
deleted file mode 100755
index 390fc9710723..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet2.pdb
deleted file mode 100755
index 9efa6bbc78a9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet3.pdb
deleted file mode 100755
index 62dc5629c67a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_invalidcellref-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet1.pdb
deleted file mode 100755
index cf485e74d8c9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet2.pdb
deleted file mode 100755
index ac000de5b8a0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet3.pdb
deleted file mode 100755
index 45d1faf2a293..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_largerange-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet1.pdb
deleted file mode 100755
index 1b617ff67e32..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet2.pdb
deleted file mode 100755
index b2e34e5ec759..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet3.pdb
deleted file mode 100755
index 0bb0d1a6b3d6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_listrange-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet1.pdb
deleted file mode 100755
index 3f9fe58a186c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet2.pdb
deleted file mode 100755
index dddc94e07f02..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet3.pdb
deleted file mode 100755
index 1f40204c7971..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_mathematical-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet1.pdb
deleted file mode 100755
index 06fc72d829fe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet2.pdb
deleted file mode 100755
index 03107c5d325d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet3.pdb
deleted file mode 100755
index de40bfd56ec6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_protection-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet1.pdb
deleted file mode 100755
index a9df85405e1a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet2.pdb
deleted file mode 100755
index e8412d07e081..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet3.pdb
deleted file mode 100755
index b6a2c0ef38d5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_sheetreference-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet1.pdb
deleted file mode 100755
index 72aa8c82ba4a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet2.pdb
deleted file mode 100755
index cb04d4125fc9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet3.pdb
deleted file mode 100755
index 7a85aff6ba62..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple01-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet1.pdb
deleted file mode 100755
index 383fb4cccfb5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet2.pdb
deleted file mode 100755
index a5e9b8beea3b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet3.pdb
deleted file mode 100755
index 6bce59077201..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple02-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet1.pdb
deleted file mode 100755
index 09d9020bc61f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet2.pdb
deleted file mode 100755
index 14e2723688c4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet3.pdb
deleted file mode 100755
index 705134770677..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple03-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet1.pdb
deleted file mode 100755
index efba83c29b8d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet2.pdb
deleted file mode 100755
index 2811910ecd04..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet3.pdb
deleted file mode 100755
index 08028abc6fd1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_simple04-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet1.pdb
deleted file mode 100755
index c7978fac0a6b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet2.pdb
deleted file mode 100755
index c8234832053d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet3.pdb
deleted file mode 100755
index 78e2a4ea6b21..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_smallrange-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet1.pdb
deleted file mode 100755
index f622cd7d1243..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet2.pdb
deleted file mode 100755
index 8c29018d9e8a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet3.pdb
deleted file mode 100755
index 4eebe759c1db..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_styles-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet1.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet1.pdb
deleted file mode 100755
index 169a2cc173b9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet1.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet2.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet2.pdb
deleted file mode 100755
index 4dee2cab0d2b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet2.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet3.pdb b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet3.pdb
deleted file mode 100755
index 999d53f16a0c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/pdb-base/c_textimage-Sheet3.pdb
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/Blocklist.dtd b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/Blocklist.dtd
deleted file mode 100755
index f7bb8eb321bb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/Blocklist.dtd
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<!ELEMENT block-list:block-list (block-list:block*) >
-<!ATTLIST block-list:block-list
- block-list:list-name CDATA #REQUIRED>
-<!ELEMENT block-list:block EMPTY>
-<!ATTLIST block-list:block
- block-list:abbreviated-name CDATA #REQUIRED
- block-list:package-name CDATA #REQUIRED
- block-list:name CDATA #REQUIRED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_animatedgif.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_animatedgif.sxw
deleted file mode 100755
index a8f7d91ef03f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_animatedgif.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bolddoc.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bolddoc.sxw
deleted file mode 100755
index 9f0cb66d69ba..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bolddoc.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bookmarks.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bookmarks.sxw
deleted file mode 100755
index d3ea3431875d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bookmarks.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bulletorderedlist.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bulletorderedlist.sxw
deleted file mode 100755
index bd640d575fb2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_bulletorderedlist.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_emptydoc.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_emptydoc.sxw
deleted file mode 100755
index d4a0621ad46d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_emptydoc.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_firstlineindent.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_firstlineindent.sxw
deleted file mode 100755
index 75a18d84a53f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_firstlineindent.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_fontsize.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_fontsize.sxw
deleted file mode 100755
index b87aa37523d0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_fontsize.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading.sxw
deleted file mode 100755
index a6d25bd5cf8e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading1.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading1.sxw
deleted file mode 100755
index ed91418ab374..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading1.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading2.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading2.sxw
deleted file mode 100755
index 2f767e6f1675..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_heading2.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_hyperlink.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_hyperlink.sxw
deleted file mode 100755
index 6a04edd6a073..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_hyperlink.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_justified.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_justified.sxw
deleted file mode 100755
index ae33ab576588..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_justified.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linebreaks.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linebreaks.sxw
deleted file mode 100755
index 27b1e73e0b50..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linebreaks.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linespacing.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linespacing.sxw
deleted file mode 100755
index 74436d8076c7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_linespacing.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_numberorderedlist.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_numberorderedlist.sxw
deleted file mode 100755
index 3d8e19970fd8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_numberorderedlist.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_pagebreak.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_pagebreak.sxw
deleted file mode 100755
index d929cfe5c13f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_pagebreak.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_paragraph.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_paragraph.sxw
deleted file mode 100755
index 5c74827d5663..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_paragraph.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple01.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple01.sxw
deleted file mode 100755
index 2d3384d5f9f0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple01.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple02.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple02.sxw
deleted file mode 100755
index 404cfd5ffd92..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple02.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple03.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple03.sxw
deleted file mode 100755
index 9b90d54cfc54..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple03.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple04.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple04.sxw
deleted file mode 100755
index dddb02f91248..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple04.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple05.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple05.sxw
deleted file mode 100755
index c811aabcf28d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_simple05.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_standard.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_standard.sxw
deleted file mode 100755
index b9ac1e688e71..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_standard.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_subscript.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_subscript.sxw
deleted file mode 100755
index 78ed939f1f83..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_subscript.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_superscript.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_superscript.sxw
deleted file mode 100755
index 7d44042aaf5f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_superscript.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_symbols.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_symbols.sxw
deleted file mode 100755
index a48137a8ded5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_symbols.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_tab.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_tab.sxw
deleted file mode 100755
index 5602764f3c9d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_tab.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_table.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_table.sxw
deleted file mode 100755
index a101ba833aa9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_table.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_textspan.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_textspan.sxw
deleted file mode 100755
index beae7b8c8a7a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_textspan.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_unorderedlist.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_unorderedlist.sxw
deleted file mode 100755
index ca5ee406ccc5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_unorderedlist.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_wordwrap.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_wordwrap.sxw
deleted file mode 100755
index ece3fefae183..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/a_wordwrap.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_addition.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_addition.sxc
deleted file mode 100755
index 6c4341f62ac2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_addition.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_alignment.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_alignment.sxc
deleted file mode 100755
index b9df5dd3b00e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_alignment.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_backwardrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_backwardrange.sxc
deleted file mode 100755
index c61f460e9fd8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_backwardrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_basic.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_basic.sxc
deleted file mode 100755
index 8a1ba23b78fc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_basic.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_boolean.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_boolean.sxc
deleted file mode 100755
index c34e7608c129..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_boolean.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellcurrencyalue.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellcurrencyalue.sxc
deleted file mode 100755
index 808d781162e6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellcurrencyalue.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellpercentvalue.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellpercentvalue.sxc
deleted file mode 100755
index 9b4b9f024a6a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellpercentvalue.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellstringvalue.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellstringvalue.sxc
deleted file mode 100755
index b44496fdb57b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cellstringvalue.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_columnswidth.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_columnswidth.sxc
deleted file mode 100755
index 9aeec30fb699..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_columnswidth.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cyclic.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cyclic.sxc
deleted file mode 100755
index 196bd78962a9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_cyclic.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_dividefloating.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_dividefloating.sxc
deleted file mode 100755
index 1e2c55b448c8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_dividefloating.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_forwardrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_forwardrange.sxc
deleted file mode 100755
index 0e41c624511b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_forwardrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_insertimage.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_insertimage.sxc
deleted file mode 100755
index bae72239f17e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_insertimage.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_invalidcellref.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_invalidcellref.sxc
deleted file mode 100755
index 881b4ffdb966..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_invalidcellref.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_largerange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_largerange.sxc
deleted file mode 100755
index 379b1cef6d62..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_largerange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_listrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_listrange.sxc
deleted file mode 100755
index e0e05b128917..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_listrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_mathematical.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_mathematical.sxc
deleted file mode 100755
index c9cf3e8bbc5e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_mathematical.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_protection.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_protection.sxc
deleted file mode 100755
index 64f89cc61ce7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_protection.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_sheetreference.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_sheetreference.sxc
deleted file mode 100755
index 4239ab2fa908..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_sheetreference.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple01.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple01.sxc
deleted file mode 100755
index e508b749bb0d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple01.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple02.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple02.sxc
deleted file mode 100755
index d490ed66fe3c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple02.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple03.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple03.sxc
deleted file mode 100755
index 1dee18c7ddd7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple03.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple04.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple04.sxc
deleted file mode 100755
index 5164313a79cf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_simple04.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_smallrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_smallrange.sxc
deleted file mode 100755
index 8283b04c54e3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_smallrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_styles.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_styles.sxc
deleted file mode 100755
index 21e0f1ab5ac0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_styles.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_textimage.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_textimage.sxc
deleted file mode 100755
index 9f42285d2881..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/c_textimage.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/chart.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/chart.mod
deleted file mode 100755
index 70cbe483ca9c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/chart.mod
+++ /dev/null
@@ -1,228 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-
-<!ENTITY % chart-class "(line|area|circle|ring|scatter|radar|bar|stock|add-in)">
-<!ENTITY % chart-solid-type "(cuboid|cylinder|cone|pyramid)">
-
-<!-- Chart element -->
-<!ELEMENT chart:chart ( chart:title?, chart:subtitle?, chart:legend?,
- chart:plot-area,
- table:table? )>
-<!ATTLIST chart:chart
- chart:class %chart-class; #REQUIRED
- chart:add-in-name %string; #IMPLIED
- chart:table-number-list %string; #IMPLIED
- draw:name %string; #IMPLIED
- %draw-position;
- %draw-size;
- %draw-style-name;
- chart:style-name %styleName; #IMPLIED>
-
-<!ATTLIST chart:chart %presentation-class; >
-<!ATTLIST chart:chart %zindex;>
-<!ATTLIST chart:chart %draw-end-position; >
-<!ATTLIST chart:chart draw:id %draw-shape-id; >
-<!ATTLIST chart:chart draw:layer %layerName; #IMPLIED>
-
-<!ATTLIST style:properties
- chart:scale-text %boolean; "true"
- chart:stock-updown-bars %boolean; "false"
- chart:stock-with-volume %boolean; "false"
- chart:three-dimensional %boolean; "false"
- chart:deep %boolean; "false"
- chart:lines %boolean; "false"
- chart:percentage %boolean; "false"
- chart:solid-type %chart-solid-type; "cuboid"
- chart:splines %nonNegativeInteger; "0"
- chart:stacked %boolean; "false"
- chart:symbol %integer; "-1"
- chart:vertical %boolean; "false"
- chart:lines-used %nonNegativeInteger; "0"
- chart:connect-bars %boolean; "false">
-
-<!-- Main/Sub Title -->
-<!-- the cell-address attribute is currently not supported for titles -->
-<!ELEMENT chart:title (text:p)?>
-<!ATTLIST chart:title
- table:cell-range %cell-address; #IMPLIED
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ELEMENT chart:subtitle (text:p)?>
-<!ATTLIST chart:subtitle
- table:cell-range %cell-address; #IMPLIED
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- you must specify either a legend-position or both, x and y coordinates -->
-<!ELEMENT chart:legend EMPTY>
-<!ATTLIST chart:legend
- chart:legend-position (top|left|bottom|right) "right"
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- Plot-Area specification -->
-
-<!ELEMENT chart:plot-area (dr3d:light*,
- chart:axis*,
- chart:categories?,
- chart:series*,
- chart:wall?,
- chart:floor?) >
-
-<!ATTLIST chart:plot-area
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- svg:width %length; #IMPLIED
- svg:height %length; #IMPLIED
- chart:style-name %styleName; #IMPLIED
- table:cell-range-address %cell-range-address; #IMPLIED
- chart:table-number-list %string; #IMPLIED
- chart:data-source-has-labels (none|row|column|both) "none" >
-
-<!-- 3d scene attributes on plot-area -->
-<!ATTLIST chart:plot-area
- dr3d:vrp %vector3D; #IMPLIED
- dr3d:vpn %vector3D; #IMPLIED
- dr3d:vup %vector3D; #IMPLIED
- dr3d:projection (parallel|perspective) #IMPLIED
- dr3d:transform CDATA #IMPLIED
- dr3d:distance %length; #IMPLIED
- dr3d:focal-length %length; #IMPLIED
- dr3d:shadow-slant %nonNegativeInteger; #IMPLIED
- dr3d:shade-mode (flat|phong|gouraud|draft) #IMPLIED
- dr3d:ambient-color %color; #IMPLIED
- dr3d:lighting-mode %boolean; #IMPLIED >
-
-<!ATTLIST style:properties
- chart:series-source (columns|rows) "columns" >
-
-<!ELEMENT chart:wall EMPTY>
-<!ATTLIST chart:wall
- svg:width %length; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ELEMENT chart:floor EMPTY>
-<!ATTLIST chart:floor
- svg:width %length; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- Axis -->
-
-<!ELEMENT chart:axis (chart:title?, chart:grid*)>
-<!ATTLIST chart:axis
- chart:class (category|value|series|domain) #REQUIRED
- chart:name %string; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ATTLIST style:properties
- chart:tick-marks-major-inner %boolean; "false"
- chart:tick-marks-major-outer %boolean; "true"
- chart:tick-marks-minor-inner %boolean; "false"
- chart:tick-marks-minor-outer %boolean; "false"
- chart:logarithmic %boolean; "false"
- chart:maximum %float; #IMPLIED
- chart:minimum %float; #IMPLIED
- chart:origin %float; #IMPLIED
- chart:interval-major %float; #IMPLIED
- chart:interval-minor %float; #IMPLIED
- chart:gap-width %integer; #IMPLIED
- chart:overlap %integer; #IMPLIED
- text:line-break %boolean; "true"
- chart:display-label %boolean; "true"
- chart:label-arrangement (side-by-side|stagger-even|stagger-odd) "side-by-side"
- chart:visible %boolean; "true"
- chart:link-data-style-to-source %boolean; "true" >
-
-<!ELEMENT chart:grid EMPTY>
-<!ATTLIST chart:grid
- chart:class (major|minor) "major"
- chart:style-name %styleName; #IMPLIED >
-
-
-<!ELEMENT chart:categories EMPTY>
-<!ATTLIST chart:categories
- table:cell-range-address %cell-range-address; #REQUIRED >
-
-<!--
- each series element must have an cell-range-address element that points
- to the underlying table data.
- Impl. Note: Internally all href elements are merged to one table range
- that represents the data for the whole chart
--->
-<!ELEMENT chart:series ( chart:domain*,
- chart:data-point* )>
-<!ATTLIST chart:series
- chart:values-cell-range-address %cell-range-address; #IMPLIED
- chart:label-cell-address %cell-address; #IMPLIED
- chart:class %chart-class; #IMPLIED
- chart:attached-axis %string; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ELEMENT chart:domain EMPTY>
-<!ATTLIST chart:domain
- table:cell-range-address %cell-range-address; #IMPLIED >
-
-<!ELEMENT chart:data-point EMPTY>
-<!ATTLIST chart:data-point
- chart:repeated %nonNegativeInteger; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- statistical properties -->
-
-<!ATTLIST style:properties
- chart:mean-value %boolean; #IMPLIED
- chart:error-category (none|variance|standard-deviation|percentage|error-margin|constant) "none"
- chart:error-percentage %float; #IMPLIED
- chart:error-margin %float; #IMPLIED
- chart:error-lower-limit %float; #IMPLIED
- chart:error-upper-limit %float; #IMPLIED
- chart:error-upper-indicator %boolean; #IMPLIED
- chart:error-lower-indicator %boolean; #IMPLIED
- chart:regression-type (none|linear|logarithmic|exponential|power) "none" >
-
-<!-- data label properties -->
-
-<!ATTLIST style:properties
- chart:data-label-number (none|value|percentage) "none"
- chart:data-label-text %boolean; "false"
- chart:data-label-symbol %boolean; "false" >
-
-<!-- general text properties -->
-
-<!ATTLIST style:properties text:rotation-angle %integer; "0" >
-
-<!-- symbol properties -->
-
-<!ATTLIST style:properties
- chart:symbol-width %nonNegativeLength; #IMPLIED
- chart:symbol-height %nonNegativeLength; #IMPLIED
- chart:symbol-image-name %string; #IMPLIED >
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/datastyl.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/datastyl.mod
deleted file mode 100755
index 11bc8a8e40b7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/datastyl.mod
+++ /dev/null
@@ -1,168 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!-- data styles -->
-<!ENTITY % any-number "( number:number | number:scientific-number | number:fraction )">
-<!ENTITY % number-style-content "( (number:text,(%any-number;,number:text?)?) | (%any-number;,number:text?) )">
-<!ELEMENT number:number-style ( style:properties?, %number-style-content;, style:map* )>
-<!ELEMENT number:number EMPTY>
-<!ELEMENT number:scientific-number EMPTY>
-<!ELEMENT number:fraction EMPTY>
-
-<!ENTITY % currency-symbol-and-text "number:currency-symbol,number:text?">
-<!ENTITY % number-and-text "number:number,number:text?">
-<!ENTITY % currency-symbol-and-number "((%number-and-text;),(%currency-symbol-and-text;)?) | ((%currency-symbol-and-text;),(%number-and-text;)?)">
-<!ENTITY % currency-style-content "number:text?, (%currency-symbol-and-number;)?">
-
-<!ELEMENT number:currency-style ( style:properties?, (%currency-style-content;), style:map* )>
-<!ELEMENT number:currency-symbol (#PCDATA)>
-<!ATTLIST number:currency-symbol number:language CDATA #IMPLIED>
-<!ATTLIST number:currency-symbol number:country CDATA #IMPLIED>
-
-<!ENTITY % percentage-style-content "( (number:text,(%number-and-text;)?) | (%number-and-text;) )">
-<!ELEMENT number:percentage-style ( style:properties?, %percentage-style-content;, style:map* )>
-
-<!ENTITY % any-date "( number:day | number:month | number:year | number:era | number:day-of-week | number:week-of-year | number:quarter| number:hours | number:am-pm | number:minutes | number:seconds )">
-<!ENTITY % date-style-content "( (number:text,(%any-date;,number:text?)+) | (%any-date;,number:text?)+ )">
-<!ELEMENT number:date-style ( style:properties?, %date-style-content;, style:map* )>
-<!ELEMENT number:day EMPTY>
-<!ATTLIST number:day number:style (short|long) "short">
-<!ATTLIST number:day number:calendar CDATA #IMPLIED>
-<!ELEMENT number:month EMPTY>
-<!ATTLIST number:month number:textual %boolean; "false">
-<!ATTLIST number:month number:style (short|long) "short">
-<!ATTLIST number:month number:calendar CDATA #IMPLIED>
-<!ELEMENT number:year EMPTY>
-<!ATTLIST number:year number:style (short|long) "short">
-<!ATTLIST number:year number:calendar CDATA #IMPLIED>
-<!ELEMENT number:era EMPTY>
-<!ATTLIST number:era number:style (short|long) "short">
-<!ATTLIST number:era number:calendar CDATA #IMPLIED>
-<!ELEMENT number:day-of-week EMPTY>
-<!ATTLIST number:day-of-week number:style (short|long) "short">
-<!ATTLIST number:day-of-week number:calendar CDATA #IMPLIED>
-<!ELEMENT number:week-of-year EMPTY>
-<!ATTLIST number:week-of-year number:calendar CDATA #IMPLIED>
-<!ELEMENT number:quarter EMPTY>
-<!ATTLIST number:quarter number:style (short|long) "short">
-<!ATTLIST number:quarter number:calendar CDATA #IMPLIED>
-
-<!ENTITY % any-time "( number:hours | number:am-pm | number:minutes | number:seconds )">
-<!ENTITY % time-style-content "( (number:text,(%any-time;,number:text?)+) | (%any-time;,number:text?)+)">
-<!ELEMENT number:time-style ( style:properties?, %time-style-content;, style:map* )>
-<!ELEMENT number:hours EMPTY>
-<!ATTLIST number:hours number:style (short|long) "short">
-<!ELEMENT number:minutes EMPTY>
-<!ATTLIST number:minutes number:style (short|long) "short">
-<!ELEMENT number:seconds EMPTY>
-<!ATTLIST number:seconds number:style (short|long) "short">
-<!ATTLIST number:seconds number:decimal-places %integer; "0">
-<!ELEMENT number:am-pm EMPTY>
-
-<!ENTITY % boolean-style-content "( (number:text,(number:boolean,number:text?)?) | (number:boolean,number:text?) )">
-<!ELEMENT number:boolean-style ( style:properties?,%boolean-style-content;, style:map* )>
-<!ELEMENT number:boolean EMPTY>
-
-<!ENTITY % text-style-content "( (number:text,(number:text-content,number:text?)?) | (number:text-content,number:text?) )">
-<!ELEMENT number:text-style ( style:properties?,%text-style-content;, style:map* )>
-<!ELEMENT number:text (#PCDATA)>
-<!ELEMENT number:text-content EMPTY>
-
-<!ATTLIST number:number-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:currency-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:percentage-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:date-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:time-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:boolean-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:text-style style:name %styleName; #REQUIRED>
-
-<!ATTLIST number:number-style style:family CDATA #REQUIRED>
-<!ATTLIST number:currency-style style:family CDATA #REQUIRED>
-<!ATTLIST number:percentage-style style:family CDATA #REQUIRED>
-<!ATTLIST number:date-style style:family CDATA #REQUIRED>
-<!ATTLIST number:time-style style:family CDATA #REQUIRED>
-<!ATTLIST number:boolean-style style:family CDATA #REQUIRED>
-<!ATTLIST number:text-style style:family CDATA #REQUIRED>
-
-<!ATTLIST number:number-style number:language CDATA #IMPLIED>
-<!ATTLIST number:currency-style number:language CDATA #IMPLIED>
-<!ATTLIST number:percentage-style number:language CDATA #IMPLIED>
-<!ATTLIST number:date-style number:language CDATA #IMPLIED>
-<!ATTLIST number:time-style number:language CDATA #IMPLIED>
-<!ATTLIST number:boolean-style number:language CDATA #IMPLIED>
-<!ATTLIST number:text-style number:language CDATA #IMPLIED>
-
-<!ATTLIST number:number-style number:country CDATA #IMPLIED>
-<!ATTLIST number:currency-style number:country CDATA #IMPLIED>
-<!ATTLIST number:percentage-style number:country CDATA #IMPLIED>
-<!ATTLIST number:date-style number:country CDATA #IMPLIED>
-<!ATTLIST number:time-style number:country CDATA #IMPLIED>
-<!ATTLIST number:boolean-style number:country CDATA #IMPLIED>
-<!ATTLIST number:text-style number:country CDATA #IMPLIED>
-
-<!ATTLIST number:number-style number:title CDATA #IMPLIED>
-<!ATTLIST number:currency-style number:title CDATA #IMPLIED>
-<!ATTLIST number:percentage-style number:title CDATA #IMPLIED>
-<!ATTLIST number:date-style number:title CDATA #IMPLIED>
-<!ATTLIST number:time-style number:title CDATA #IMPLIED>
-<!ATTLIST number:boolean-style number:title CDATA #IMPLIED>
-<!ATTLIST number:text-style number:title CDATA #IMPLIED>
-
-<!ATTLIST number:number-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:currency-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:percentage-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:date-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:time-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:boolean-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:text-style style:volatile %boolean; #IMPLIED>
-
-<!ATTLIST number:currency-style number:automatic-order %boolean; "false">
-<!ATTLIST number:date-style number:automatic-order %boolean; "false">
-
-<!ATTLIST number:date-style number:format-source (fixed|language) "fixed">
-<!ATTLIST number:time-style number:format-source (fixed|language) "fixed">
-
-<!ATTLIST number:time-style number:truncate-on-overflow %boolean; "true">
-
-<!ATTLIST number:number number:decimal-places %integer; #IMPLIED>
-<!ATTLIST number:scientific-number number:decimal-places %integer; #IMPLIED>
-
-<!ATTLIST number:number number:min-integer-digits %integer; #IMPLIED>
-<!ATTLIST number:scientific-number number:min-integer-digits %integer; #IMPLIED>
-<!ATTLIST number:fraction number:min-integer-digits %integer; #IMPLIED>
-
-<!ATTLIST number:number number:grouping %boolean; "false">
-<!ATTLIST number:scientific-number number:grouping %boolean; "false">
-<!ATTLIST number:fraction number:grouping %boolean; "false">
-
-<!ATTLIST number:number number:decimal-replacement CDATA #IMPLIED>
-
-<!ATTLIST number:scientific-number number:min-exponent-digits %integer; #IMPLIED>
-
-<!ATTLIST number:fraction number:min-numerator-digits %integer; #IMPLIED>
-
-<!ATTLIST number:fraction number:min-denominator-digits %integer; #IMPLIED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/drawing.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/drawing.mod
deleted file mode 100755
index aa0a25822a45..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/drawing.mod
+++ /dev/null
@@ -1,837 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % points "CDATA" >
-<!ENTITY % pathData "CDATA" >
-<!ENTITY % gradient-style "(linear|axial|radial|ellipsoid|square|rectangular)" >
-<!ENTITY % draw-position "svg:x %coordinate; #IMPLIED svg:y %coordinate; #IMPLIED">
-<!ENTITY % draw-end-position "table:end-cell-address %cell-address; #IMPLIED table:end-x %coordinate; #IMPLIED table:end-y %coordinate; #IMPLIED">
-<!ENTITY % draw-size "svg:width %coordinate; #IMPLIED svg:height %coordinate; #IMPLIED">
-<!ENTITY % draw-transform "draw:transform CDATA #IMPLIED">
-<!ENTITY % draw-viewbox "svg:viewBox CDATA #REQUIRED">
-<!ENTITY % draw-style-name "draw:style-name %styleName; #IMPLIED presentation:style-name %styleName; #IMPLIED draw:text-style-name %styleName; #IMPLIED">
-<!ENTITY % draw-shape-id "CDATA #IMPLIED" >
-<!ENTITY % draw-text "(text:p|text:unordered-list|text:ordered-list)*">
-<!ENTITY % zindex "draw:z-index %nonNegativeInteger; #IMPLIED">
-<!ENTITY % distance "CDATA">
-<!ENTITY % rectanglePoint "(top-left|top|top-right|left|center|right|bottom-left|bottom|bottom-right)">
-<!ENTITY % vector3D "CDATA">
-<!ENTITY % text-anchor "text:anchor-type %anchorType; #IMPLIED text:anchor-page-number %positiveInteger; #IMPLIED">
-<!ENTITY % layerName "CDATA">
-<!ENTITY % table-background "table:table-background (true | false) #IMPLIED">
-
-<!-- commont presentation shape attributes -->
-<!ENTITY % presentation-style-name "presentation:style-name %styleName; #IMPLIED">
-<!ENTITY % presentation-classes "(title|outline|subtitle|text|graphic|object|chart|table|orgchart|page|notes)" >
-<!-- ENTITY % presentation-class "presentation:class %presentation-classes; #IMPLIED" -->
-<!ENTITY % presentation-class "presentation:class %presentation-classes; #IMPLIED presentation:placeholder (true|false) #IMPLIED presentation:user-transformed (true|false) #IMPLIED">
-<!ENTITY % presentationEffects "(none|fade|move|stripes|open|close|dissolve|wavyline|random|lines|laser|appear|hide|move-short|checkerboard|rotate|stretch)" >
-<!ENTITY % presentationEffectDirections "(none|from-left|from-top|from-right|from-bottom|from-center|from-upper-left|from-upper-right|from-lower-left|from-lower-right|to-left|to-top|to-right|to-bottom|to-upper-left|to-upper-right|to-lower-right|to-lower-left|path|spiral-inward-left|spiral-inward-right|spiral-outward-left|spiral-outward-right|vertical|horizontal|to-center|clockwise|counter-clockwise)" >
-<!ENTITY % presentationSpeeds "(slow|medium|fast)" >
-
-<!-- Drawing shapes -->
-<!ELEMENT draw:rect ( office:events?, %draw-text; )>
-<!ATTLIST draw:rect %draw-position; >
-<!ATTLIST draw:rect %draw-end-position; >
-<!ATTLIST draw:rect %table-background; >
-<!ATTLIST draw:rect %draw-size; >
-<!ATTLIST draw:rect %draw-style-name; >
-<!ATTLIST draw:rect %draw-transform; >
-<!ATTLIST draw:rect draw:corner-radius %nonNegativeLength; #IMPLIED>
-<!ATTLIST draw:rect %zindex;>
-<!ATTLIST draw:rect draw:id %draw-shape-id;>
-<!ATTLIST draw:rect %text-anchor;>
-<!ATTLIST draw:rect draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:line ( office:events?, %draw-text; )>
-<!ATTLIST draw:line svg:x1 %length; #REQUIRED>
-<!ATTLIST draw:line svg:y1 %length; #REQUIRED>
-<!ATTLIST draw:line svg:x2 %length; #REQUIRED>
-<!ATTLIST draw:line svg:y2 %length; #REQUIRED>
-<!ATTLIST draw:line %draw-style-name; >
-<!ATTLIST draw:line %draw-transform; >
-<!ATTLIST draw:line %zindex;>
-<!ATTLIST draw:line %draw-end-position; >
-<!ATTLIST draw:line %table-background; >
-<!ATTLIST draw:line draw:id %draw-shape-id;>
-<!ATTLIST draw:line %text-anchor;>
-<!ATTLIST draw:line draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:polyline ( office:events?, %draw-text; )>
-<!ATTLIST draw:polyline %draw-position; >
-<!ATTLIST draw:polyline %draw-size; >
-<!ATTLIST draw:polyline %draw-viewbox; >
-<!ATTLIST draw:polyline draw:points %points; #REQUIRED>
-<!ATTLIST draw:polyline %draw-style-name; >
-<!ATTLIST draw:polyline %draw-transform; >
-<!ATTLIST draw:polyline %zindex;>
-<!ATTLIST draw:polyline %draw-end-position; >
-<!ATTLIST draw:polyline %table-background; >
-<!ATTLIST draw:polyline draw:id %draw-shape-id;>
-<!ATTLIST draw:polyline %text-anchor;>
-<!ATTLIST draw:polyline draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:polygon ( office:events?, %draw-text; )>
-<!ATTLIST draw:polygon %draw-position; >
-<!ATTLIST draw:polygon %draw-end-position; >
-<!ATTLIST draw:polygon %table-background; >
-<!ATTLIST draw:polygon %draw-size; >
-<!ATTLIST draw:polygon %draw-viewbox; >
-<!ATTLIST draw:polygon draw:points %points; #REQUIRED >
-<!ATTLIST draw:polygon %draw-style-name; >
-<!ATTLIST draw:polygon %draw-transform; >
-<!ATTLIST draw:polygon %zindex;>
-<!ATTLIST draw:polygon draw:id %draw-shape-id;>
-<!ATTLIST draw:polygon %text-anchor;>
-<!ATTLIST draw:polygon draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:path ( office:events?, %draw-text; )>
-<!ATTLIST draw:path %draw-position;>
-<!ATTLIST draw:path %draw-end-position; >
-<!ATTLIST draw:path %table-background; >
-<!ATTLIST draw:path %draw-size; >
-<!ATTLIST draw:path %draw-viewbox; >
-<!ATTLIST draw:path svg:d %pathData; #REQUIRED >
-<!ATTLIST draw:path %draw-style-name; >
-<!ATTLIST draw:path %draw-transform; >
-<!ATTLIST draw:path %zindex;>
-<!ATTLIST draw:path draw:id %draw-shape-id;>
-<!ATTLIST draw:path %text-anchor;>
-<!ATTLIST draw:path draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:circle ( office:events?, %draw-text; )>
-<!ATTLIST draw:circle %draw-position; >
-<!ATTLIST draw:circle %draw-size; >
-<!ATTLIST draw:circle %draw-style-name; >
-<!ATTLIST draw:circle %draw-transform; >
-<!ATTLIST draw:circle %zindex;>
-<!ATTLIST draw:circle %draw-end-position; >
-<!ATTLIST draw:circle %table-background; >
-<!ATTLIST draw:circle draw:id %draw-shape-id;>
-<!ATTLIST draw:circle draw:kind (full|section|cut|arc) "full">
-<!ATTLIST draw:circle draw:start-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:circle draw:end-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:circle %text-anchor;>
-<!ATTLIST draw:circle draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:ellipse ( office:events?, %draw-text; )>
-<!ATTLIST draw:ellipse %draw-position; >
-<!ATTLIST draw:ellipse %draw-size; >
-<!ATTLIST draw:ellipse %draw-style-name; >
-<!ATTLIST draw:ellipse %draw-transform; >
-<!ATTLIST draw:ellipse %zindex;>
-<!ATTLIST draw:ellipse %draw-end-position; >
-<!ATTLIST draw:ellipse %table-background; >
-<!ATTLIST draw:ellipse draw:id %draw-shape-id;>
-<!ATTLIST draw:ellipse draw:kind (full|section|cut|arc) "full">
-<!ATTLIST draw:ellipse draw:start-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:ellipse draw:end-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:ellipse %text-anchor;>
-<!ATTLIST draw:ellipse draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:connector ( office:events?, %draw-text;)>
-<!ATTLIST draw:connector draw:type (standard|lines|line|curve) "standard">
-<!ATTLIST draw:connector draw:line-skew CDATA #IMPLIED>
-<!ATTLIST draw:connector %draw-style-name;>
-<!ATTLIST draw:connector svg:x1 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector svg:y1 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector svg:x2 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector svg:y2 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector draw:start-shape %draw-shape-id;>
-<!ATTLIST draw:connector draw:start-glue-point %integer; #IMPLIED>
-<!ATTLIST draw:connector draw:end-shape %draw-shape-id;>
-<!ATTLIST draw:connector draw:end-glue-point %integer; #IMPLIED>
-<!ATTLIST draw:connector %zindex;>
-<!ATTLIST draw:connector %draw-end-position; >
-<!ATTLIST draw:connector %table-background; >
-<!ATTLIST draw:connector draw:id %draw-shape-id;>
-<!ATTLIST draw:connector %text-anchor;>
-<!ATTLIST draw:connector draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:control EMPTY>
-<!ATTLIST draw:control %draw-style-name;>
-<!ATTLIST draw:control %draw-position; >
-<!ATTLIST draw:control %draw-size; >
-<!ATTLIST draw:control %control-id; >
-<!ATTLIST draw:control %zindex;>
-<!ATTLIST draw:control %draw-end-position; >
-<!ATTLIST draw:control %table-background; >
-<!ATTLIST draw:control draw:id %draw-shape-id;>
-<!ATTLIST draw:control %text-anchor;>
-<!ATTLIST draw:control draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:g ( office:events?, (%shapes;)* ) >
-<!ATTLIST draw:g %draw-transform; >
-<!ATTLIST draw:g %draw-style-name; >
-<!ATTLIST draw:g %zindex;>
-<!ATTLIST draw:g %draw-end-position; >
-<!ATTLIST draw:g %table-background; >
-<!ATTLIST draw:g draw:id %draw-shape-id;>
-<!ATTLIST draw:g %text-anchor;>
-<!ATTLIST draw:g draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:page-thumbnail EMPTY>
-<!ATTLIST draw:page-thumbnail draw:page-number %positiveInteger; #IMPLIED>
-<!ATTLIST draw:page-thumbnail %draw-position; >
-<!ATTLIST draw:page-thumbnail %draw-size; >
-<!ATTLIST draw:page-thumbnail %draw-style-name; >
-<!ATTLIST draw:page-thumbnail %presentation-class; >
-<!ATTLIST draw:page-thumbnail %zindex;>
-<!ATTLIST draw:page-thumbnail %draw-end-position; >
-<!ATTLIST draw:page-thumbnail %table-background; >
-<!ATTLIST draw:page-thumbnail draw:id %draw-shape-id;>
-<!ATTLIST draw:page-thumbnail %text-anchor;>
-<!ATTLIST draw:page-thumbnail draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:caption ( office:events?, %draw-text;)>
-<!ATTLIST draw:caption %draw-position; >
-<!ATTLIST draw:caption %draw-end-position; >
-<!ATTLIST draw:caption %table-background; >
-<!ATTLIST draw:caption %draw-size; >
-<!ATTLIST draw:caption %draw-style-name; >
-<!ATTLIST draw:caption %draw-transform; >
-<!ATTLIST draw:caption draw:caption-point-x %coordinate; #IMPLIED>
-<!ATTLIST draw:caption draw:caption-point-y %coordinate; #IMPLIED>
-<!ATTLIST draw:caption %zindex;>
-<!ATTLIST draw:caption draw:id %draw-shape-id;>
-<!ATTLIST draw:caption %text-anchor;>
-<!ATTLIST draw:caption draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:caption draw:corner-radius %nonNegativeLength; #IMPLIED>
-
-<!ELEMENT draw:measure ( office:events?, %draw-text;)>
-<!ATTLIST draw:measure svg:x1 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure svg:y1 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure svg:x2 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure svg:y2 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure %draw-end-position; >
-<!ATTLIST draw:measure %table-background; >
-<!ATTLIST draw:measure %draw-style-name; >
-<!ATTLIST draw:measure %draw-transform; >
-<!ATTLIST draw:measure %zindex;>
-<!ATTLIST draw:measure draw:id %draw-shape-id;>
-<!ATTLIST draw:measure %text-anchor;>
-<!ATTLIST draw:measure draw:layer %layerName; #IMPLIED>
-
-<!-- graphic style elements -->
-<!ELEMENT draw:gradient EMPTY >
-<!ATTLIST draw:gradient draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:gradient draw:style %gradient-style; #REQUIRED>
-<!ATTLIST draw:gradient draw:cx %coordinate; #IMPLIED>
-<!ATTLIST draw:gradient draw:cy %coordinate; #IMPLIED>
-<!ATTLIST draw:gradient draw:start-color %color; #IMPLIED>
-<!ATTLIST draw:gradient draw:end-color %color; #IMPLIED>
-<!ATTLIST draw:gradient draw:start-intensity %percentage; #IMPLIED>
-<!ATTLIST draw:gradient draw:end-intensity %percentage; #IMPLIED>
-<!ATTLIST draw:gradient draw:angle %integer; #IMPLIED>
-<!ATTLIST draw:gradient draw:border %percentage; #IMPLIED>
-
-<!ELEMENT draw:hatch EMPTY >
-<!ATTLIST draw:hatch draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:hatch draw:style (single|double|triple) #REQUIRED >
-<!ATTLIST draw:hatch draw:color %color; #IMPLIED>
-<!ATTLIST draw:hatch draw:distance %length; #IMPLIED>
-<!ATTLIST draw:hatch draw:rotation %integer; #IMPLIED>
-
-
-<!ELEMENT draw:fill-image EMPTY >
-<!ATTLIST draw:fill-image draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:fill-image xlink:href %uriReference; #REQUIRED>
-<!ATTLIST draw:fill-image xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:fill-image xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:fill-image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:fill-image svg:width %length; #IMPLIED>
-<!ATTLIST draw:fill-image svg:height %length; #IMPLIED>
-
-<!ELEMENT draw:transparency EMPTY>
-<!ATTLIST draw:transparency draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:transparency draw:style %gradient-style; #REQUIRED>
-<!ATTLIST draw:transparency draw:cx %coordinate; #IMPLIED>
-<!ATTLIST draw:transparency draw:cy %coordinate; #IMPLIED>
-<!ATTLIST draw:transparency draw:start %percentage; #IMPLIED>
-<!ATTLIST draw:transparency draw:end %percentage; #IMPLIED>
-<!ATTLIST draw:transparency draw:angle %integer; #IMPLIED>
-<!ATTLIST draw:transparency draw:border %percentage; #IMPLIED>
-
-<!ELEMENT draw:marker EMPTY>
-<!ATTLIST draw:marker draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:marker %draw-viewbox; >
-<!ATTLIST draw:marker svg:d %pathData; #REQUIRED>
-
-<!ELEMENT draw:stroke-dash EMPTY>
-<!ATTLIST draw:stroke-dash draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:stroke-dash draw:style (rect|round) #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots1 %integer; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots1-length %length; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots2 %integer; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots2-length %length; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:distance %length; #IMPLIED>
-
-<!-- stroke attributes -->
-<!ATTLIST style:properties draw:stroke (none|dash|solid) #IMPLIED>
-<!ATTLIST style:properties draw:stroke-dash CDATA #IMPLIED>
-<!ATTLIST style:properties svg:stroke-width %length; #IMPLIED>
-<!ATTLIST style:properties svg:stroke-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:marker-start %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:marker-end %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:marker-start-width %length; #IMPLIED>
-<!ATTLIST style:properties draw:marker-end-width %length; #IMPLIED>
-<!ATTLIST style:properties draw:marker-start-center %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:marker-end-center %boolean; #IMPLIED>
-<!ATTLIST style:properties svg:stroke-opacity %floatOrPercentage; #IMPLIED>
-<!ATTLIST style:properties svg:stroke-linejoin (miter|round|bevel|middle|none|inherit) #IMPLIED>
-
-<!-- text attributes -->
-<!ATTLIST style:properties draw:auto-grow-width %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:auto-grow-height %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fit-to-size %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fit-to-contour %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:textarea-horizontal-align ( left | center | right | justify ) #IMPLIED>
-<!ATTLIST style:properties draw:textarea-vertical-align ( top | middle | bottom ) #IMPLIED>
-
-<!-- fill attributes -->
-<!ATTLIST style:properties draw:fill (none|solid|bitmap|gradient|hatch) #IMPLIED>
-<!ATTLIST style:properties draw:fill-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:fill-gradient-name %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:gradient-step-count CDATA #IMPLIED>
-<!ATTLIST style:properties draw:fill-hatch-name %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:fill-hatch-solid %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-name %styleName; #IMPLIED>
-<!ATTLIST style:properties style:repeat (no-repeat|repeat|stretch) #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-ref-point-x %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-ref-point-y %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-ref-point %rectanglePoint; #IMPLIED>
-<!ATTLIST style:properties draw:tile-repeat-offset CDATA #IMPLIED>
-<!ATTLIST style:properties draw:transparency %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:transparency-name %styleName; #IMPLIED>
-
-<!-- graphic attributes -->
-<!ATTLIST style:properties draw:color-mode (greyscale|mono|watermark|standard) #IMPLIED>
-<!ATTLIST style:properties draw:luminance %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:contrast %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:gamma %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:red %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:green %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:blue %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:color-inversion %boolean; #IMPLIED>
-
-<!-- shadow attributes -->
-<!ATTLIST style:properties draw:shadow (visible|hidden) #IMPLIED>
-<!ATTLIST style:properties draw:shadow-offset-x %length; #IMPLIED>
-<!ATTLIST style:properties draw:shadow-offset-y %length; #IMPLIED>
-<!ATTLIST style:properties draw:shadow-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:shadow-transparency CDATA #IMPLIED>
-
-<!-- connector attributes -->
-<!ATTLIST style:properties draw:start-line-spacing-horizontal %distance; #IMPLIED>
-<!ATTLIST style:properties draw:start-line-spacing-vertical %distance; #IMPLIED>
-<!ATTLIST style:properties draw:end-line-spacing-horizontal %distance; #IMPLIED>
-<!ATTLIST style:properties draw:end-line-spacing-vertical %distance; #IMPLIED>
-
-<!-- measure attributes -->
-<!ATTLIST style:properties draw:line-distance %distance; #IMPLIED>
-<!ATTLIST style:properties draw:guide-overhang %distance; #IMPLIED>
-<!ATTLIST style:properties draw:guide-distance %distance; #IMPLIED>
-<!ATTLIST style:properties draw:start-guide %distance; #IMPLIED>
-<!ATTLIST style:properties draw:end-guide %distance; #IMPLIED>
-<!ATTLIST style:properties draw:measure-align (automatic|left-outside|inside|right-outside) #IMPLIED>
-<!ATTLIST style:properties draw:measure-vertical-align (automatic|above|below|center) #IMPLIED>
-<!ATTLIST style:properties draw:unit (automatic|mm|cm|m|km|pt|pc|inch|ft|mi) #IMPLIED>
-<!ATTLIST style:properties draw:show-unit %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:placing (below|above) #IMPLIED>
-<!ATTLIST style:properties draw:parallel %boolean; #IMPLIED>
-
-<!-- frame attributes -->
-<!ATTLIST style:properties draw:frame-display-scrollbar %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:frame-display-border %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:frame-margin-horizontal %nonNegativePixelLength; #IMPLIED>
-<!ATTLIST style:properties draw:frame-margin-vertical %nonNegativePixelLength; #IMPLIED>
-<!ATTLIST style:properties draw:size-protect %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:move-protect %boolean; #IMPLIED>
-
-<!-- ole object attributes -->
-<!ATTLIST style:properties draw:visible-area-left %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties draw:visible-area-top %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties draw:visible-area-width %positiveLength; #IMPLIED>
-<!ATTLIST style:properties draw:visible-area-height %positiveLength; #IMPLIED>
-
-<!-- fontwork attributes -->
-<!ATTLIST style:properties draw:fontwork-style (rotate|upright|slant-x|slant-y|none) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-adjust (left|right|autosize|center) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-distance %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-start %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-mirror %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-outline %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow (normal|slant|none) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-offset-x %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-offset-y %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-form (none|top-circle|bottom-circle|left-circle|right-circle|top-arc|bottom-arc|left-arc|right-arc|button1|button2|button3|button4) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-hide-form %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-transparence %percentage; #IMPLIED>
-
-<!-- caption attributes -->
-<!ATTLIST style:properties draw:caption-type (straight-line|angled-line|angled-connector-line) #IMPLIED>
-<!ATTLIST style:properties draw:caption-angle-type (fixed|free) #IMPLIED>
-<!ATTLIST style:properties draw:caption-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties draw:caption-gap %distance; #IMPLIED>
-<!ATTLIST style:properties draw:caption-escape-direction (horizontal|vertical|auto) #IMPLIED>
-<!ATTLIST style:properties draw:caption-escape %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties draw:caption-line-length %distance; #IMPLIED>
-<!ATTLIST style:properties draw:caption-fit-line-length %boolean; #IMPLIED>
-
-<!-- Animations -->
-<!ELEMENT presentation:sound EMPTY>
-<!ATTLIST presentation:sound xlink:href %uriReference; #REQUIRED>
-<!ATTLIST presentation:sound xlink:type (simple) #FIXED "simple">
-<!ATTLIST presentation:sound xlink:show (new|replace) #IMPLIED>
-<!ATTLIST presentation:sound xlink:actuate (onRequest) "onRequest">
-<!ATTLIST presentation:sound presentation:play-full %boolean; #IMPLIED>
-
-<!ELEMENT presentation:show-shape (presentation:sound)?>
-<!ATTLIST presentation:show-shape draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:show-shape presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:show-shape presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:show-shape presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:show-shape presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:show-shape presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:show-text (presentation:sound)?>
-<!ATTLIST presentation:show-text draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:show-text presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:show-text presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:show-text presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:show-text presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:show-text presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:hide-shape (presentation:sound)?>
-<!ATTLIST presentation:hide-shape draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:hide-shape presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:hide-shape presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:hide-shape presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:hide-shape presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:hide-shape presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:hide-text (presentation:sound)?>
-<!ATTLIST presentation:hide-text draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:hide-text presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:hide-text presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:hide-text presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:hide-text presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:hide-text presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:dim (presentation:sound)?>
-<!ATTLIST presentation:dim draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:dim draw:color %color; #REQUIRED>
-
-<!ELEMENT presentation:play EMPTY>
-<!ATTLIST presentation:play draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:play presentation:speed %presentationSpeeds; "medium">
-
-<!ELEMENT presentation:animations (presentation:show-shape|presentation:show-text|presentation:hide-shape|presentation:hide-text|presentation:dim|presentation:play)*>
-
-<!ELEMENT presentation:show EMPTY>
-<!ATTLIST presentation:show presentation:name %styleName; #REQUIRED>
-<!ATTLIST presentation:show presentation:pages CDATA #REQUIRED>
-
-<!ELEMENT presentation:settings (presentation:show)*>
-<!ATTLIST presentation:settings presentation:start-page %styleName; #IMPLIED>
-<!ATTLIST presentation:settings presentation:show %styleName; #IMPLIED>
-<!ATTLIST presentation:settings presentation:full-screen %boolean; "true">
-<!ATTLIST presentation:settings presentation:endless %boolean; "false">
-<!ATTLIST presentation:settings presentation:pause %timeDuration; #IMPLIED>
-<!ATTLIST presentation:settings presentation:show-logo %boolean; "false">
-<!ATTLIST presentation:settings presentation:force-manual %boolean; "false">
-<!ATTLIST presentation:settings presentation:mouse-visible %boolean; "true">
-<!ATTLIST presentation:settings presentation:mouse-as-pen %boolean; "false">
-<!ATTLIST presentation:settings presentation:start-with-navigator %boolean; "false">
-<!ATTLIST presentation:settings presentation:animations (enabled|disabled) "enabled">
-<!ATTLIST presentation:settings presentation:stay-on-top %boolean; "false">
-<!ATTLIST presentation:settings presentation:transition-on-click (enabled|disabled) "enabled">
-
-<!-- Drawing page -->
-<!ELEMENT draw:page (office:forms?,(%shapes;)*,presentation:animations?,presentation:notes?)>
-<!ATTLIST draw:page draw:name %string; #IMPLIED>
-<!ATTLIST draw:page draw:style-name %styleName; #IMPLIED>
-<!ATTLIST draw:page draw:master-page-name %styleName; #REQUIRED>
-<!ATTLIST draw:page presentation:presentation-page-layout-name %styleName; #IMPLIED>
-<!ATTLIST draw:page draw:id %nonNegativeInteger; #IMPLIED>
-
-<!-- Presentation notes -->
-<!ELEMENT presentation:notes (%shapes;)*>
-
-
-<!-- presentation page layouts -->
-<!ELEMENT style:presentation-page-layout (presentation:placeholder)* >
-<!ATTLIST style:presentation-page-layout style:name %styleName; #REQUIRED>
-<!ELEMENT presentation:placeholder EMPTY >
-<!ATTLIST presentation:placeholder presentation:object (title|outline|subtitle|text|graphic|object|chart|orgchart|page|notes|handout) #REQUIRED>
-<!ATTLIST presentation:placeholder svg:x %coordinateOrPercentage; #REQUIRED>
-<!ATTLIST presentation:placeholder svg:y %coordinateOrPercentage; #REQUIRED>
-<!ATTLIST presentation:placeholder svg:width %lengthOrPercentage; #REQUIRED>
-<!ATTLIST presentation:placeholder svg:height %lengthOrPercentage; #REQUIRED>
-
-<!-- presentation page attributes -->
-<!ATTLIST style:properties presentation:transition-type (manual|automatic|semi-automatic) #IMPLIED >
-<!ATTLIST style:properties presentation:transition-style (none|fade-from-left|fade-from-top|fade-from-right|fade-from-bottom|fade-to-center|fade-from-center|move-from-left|move-from-top|move-from-right|move-from-bottom|roll-from-top|roll-from-left|roll-from-right|roll-from-bottom|vertical-stripes|horizontal-stripes|clockwise|counterclockwise|fade-from-upperleft|fade-from-upperright|fade-from-lowerleft|fade-from-lowerright|close-vertical|close-horizontal|open-vertical|open-horizontal|spiralin-left|spiralin-right|spiralout-left|spiralout-right|dissolve|wavyline-from-left|wavyline-from-top|wavyline-from-right|wavyline-from-bottom|random|stretch-from-left|stretch-from-top|stretch-from-right|stretch-from-bottom|vertical-lines|horizontal-lines) #IMPLIED >
-<!ATTLIST style:properties presentation:transition-speed %presentationSpeeds; #IMPLIED >
-<!ATTLIST style:properties presentation:duration %timeDuration; #IMPLIED>
-<!ATTLIST style:properties presentation:visibility (visible|hidden) #IMPLIED>
-<!ATTLIST style:properties draw:background-size (full|border) #IMPLIED>
-<!ATTLIST style:properties presentation:background-objects-visible %boolean; #IMPLIED>
-<!ATTLIST style:properties presentation:background-visible %boolean; #IMPLIED>
-
-
-<!-- text boxes -->
-<!ELEMENT draw:text-box (office:events?,draw:image-map?,
- (text:h|text:p|text:ordered-list|
- text:unordered-list|table:table|chart:chart|
- draw:a|draw:text-box|draw:image)*)>
-<!ATTLIST draw:text-box %draw-style-name;>
-<!ATTLIST draw:text-box %draw-transform; >
-<!ATTLIST draw:text-box draw:name %string; #IMPLIED>
-<!ATTLIST draw:text-box draw:chain-next-name %string; #IMPLIED>
-
-<!ATTLIST draw:text-box %text-anchor;>
-<!ATTLIST draw:text-box %draw-position;>
-<!ATTLIST draw:text-box %draw-end-position; >
-<!ATTLIST draw:text-box %table-background; >
-<!ATTLIST draw:text-box svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:text-box svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:text-box fo:min-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:text-box %zindex;>
-<!ATTLIST draw:text-box %presentation-class; >
-<!ATTLIST draw:text-box %draw-transform; >
-<!ATTLIST draw:text-box draw:id %draw-shape-id;>
-<!ATTLIST draw:text-box draw:layer %layerName; #IMPLIED>
-
-<!-- image -->
-<!ELEMENT draw:image (office:binary-data?,office:events?,draw:image-map?,svg:desc?,(draw:contour-polygon|draw:contour-path)?)>
-<!ATTLIST draw:image %draw-style-name;>
-<!ATTLIST draw:image draw:name %string; #IMPLIED>
-<!ATTLIST draw:image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:image xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:image xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:image draw:filter-name %string; #IMPLIED>
-<!ATTLIST draw:image %text-anchor;>
-<!ATTLIST draw:image %draw-position;>
-<!ATTLIST draw:image %draw-end-position; >
-<!ATTLIST draw:image %table-background; >
-<!ATTLIST draw:image svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:image svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:image %presentation-class; >
-<!ATTLIST draw:image %zindex;>
-<!ATTLIST draw:image draw:id %draw-shape-id;>
-<!ATTLIST draw:image draw:layer %layerName; #IMPLIED>
-
-<!-- objects -->
-<!ELEMENT draw:thumbnail EMPTY>
-<!ATTLIST draw:thumbnail xlink:href %uriReference; #REQUIRED>
-<!ATTLIST draw:thumbnail xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:thumbnail xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:thumbnail xlink:actuate (onLoad) #IMPLIED>
-
-<!ELEMENT math:math ANY> <!-- dummy (we have no MathML DTD currently)-->
-<!ELEMENT draw:object (draw:thumbnail?,(office:document|math:math)?,office:events?, draw:image-map?, svg:desc?,(draw:contour-polygon|draw:contour-path)?)>
-<!ATTLIST draw:object %draw-style-name;>
-<!ATTLIST draw:object draw:name %string; #IMPLIED>
-<!ATTLIST draw:object xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:object xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:object xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:object xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:object %text-anchor;>
-<!ATTLIST draw:object %draw-position;>
-<!ATTLIST draw:object %draw-end-position; >
-<!ATTLIST draw:object %table-background; >
-<!ATTLIST draw:object svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object %presentation-class; >
-<!ATTLIST draw:object %zindex;>
-<!ATTLIST draw:object draw:id %draw-shape-id;>
-<!ATTLIST draw:object draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:object draw:notify-on-update-of-ranges %string; #IMPLIED>
-
-<!ELEMENT draw:object-ole (office:binary-data?|office:events?|draw:image-map?|svg:desc?|draw:contour-polygon?|draw:contour-path?|draw:thumbnail?)>
-<!ATTLIST draw:object-ole draw:class-id CDATA #IMPLIED>
-<!ATTLIST draw:object-ole %draw-style-name;>
-<!ATTLIST draw:object-ole draw:name %string; #IMPLIED>
-<!ATTLIST draw:object-ole xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:object-ole xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:object-ole xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:object-ole xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:object-ole %text-anchor;>
-<!ATTLIST draw:object-ole %draw-position;>
-<!ATTLIST draw:object-ole %draw-end-position; >
-<!ATTLIST draw:object-ole %table-background; >
-<!ATTLIST draw:object-ole svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object-ole svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object-ole %presentation-class; >
-<!ATTLIST draw:object-ole %zindex;>
-<!ATTLIST draw:object-ole draw:id %draw-shape-id;>
-<!ATTLIST draw:object-ole draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT svg:desc (#PCDATA)>
-
-<!ELEMENT draw:contour-polygon EMPTY>
-<!ATTLIST draw:contour-polygon svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-polygon svg:height %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-polygon %draw-viewbox;>
-<!ATTLIST draw:contour-polygon svg:points %points; #REQUIRED>
-
-<!ELEMENT draw:contour-path EMPTY>
-<!ATTLIST draw:contour-path svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-path svg:height %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-path %draw-viewbox;>
-<!ATTLIST draw:contour-path svg:d %pathData; #REQUIRED>
-
-<!-- hyperlink -->
-<!ELEMENT draw:a (draw:image|draw:text-box)>
-<!ATTLIST draw:a xlink:href %uriReference; #REQUIRED>
-<!ATTLIST draw:a xlink:type (simple) #FIXED "simple">
-<!ATTLIST draw:a xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:a xlink:actuate (onRequest) "onRequest">
-<!ATTLIST draw:a office:name %string; #IMPLIED>
-<!ATTLIST draw:a office:target-frame-name %string; #IMPLIED>
-<!ATTLIST draw:a office:server-map %boolean; "false">
-
-<!-- 3d properties -->
-<!ATTLIST style:properties dr3d:horizontal-segments %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties dr3d:vertical-segments %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties dr3d:edge-rounding %percentage; #IMPLIED>
-<!ATTLIST style:properties dr3d:edge-rounding-mode (correct|attractive) #IMPLIED>
-<!ATTLIST style:properties dr3d:back-scale %percentage; #IMPLIED>
-<!ATTLIST style:properties dr3d:end-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties dr3d:depth %length; #IMPLIED>
-<!ATTLIST style:properties dr3d:backface-culling (enabled|disabled) #IMPLIED>
-<!ATTLIST style:properties dr3d:lighting-mode (standard|double-sided) #IMPLIED>
-<!ATTLIST style:properties dr3d:normals-kind (object|flat|sphere) #IMPLIED>
-<!ATTLIST style:properties dr3d:normals-direction (normal|inverse) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-generation-mode-x (object|parallel|sphere) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-generation-mode-y (object|parallel|sphere) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-kind (luminance|intesity|color) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-filter (enabled|disabled) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-mode (replace|modulate|blend) #IMPLIED>
-<!ATTLIST style:properties dr3d:ambient-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:emissive-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:specular-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:diffuse-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:shininess %percentage; #IMPLIED>
-<!ATTLIST style:properties dr3d:shadow (visible|hidden) #IMPLIED>
-
-<!ELEMENT dr3d:light EMPTY>
-<!ATTLIST dr3d:light dr3d:diffuse-color %color; #IMPLIED>
-<!ATTLIST dr3d:light dr3d:direction %vector3D; #REQUIRED>
-<!ATTLIST dr3d:light dr3d:enabled %boolean; #IMPLIED>
-<!ATTLIST dr3d:light dr3d:specular %boolean; #IMPLIED>
-
-<!ENTITY % shapes3d "(dr3d:scene|dr3d:extrude|dr3d:sphere|dr3d:rotate|dr3d:cube)">
-
-<!ELEMENT dr3d:cube EMPTY>
-<!ATTLIST dr3d:cube dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:cube dr3d:min-edge %vector3D; #IMPLIED>
-<!ATTLIST dr3d:cube dr3d:max-edge %vector3D; #IMPLIED>
-<!ATTLIST dr3d:cube %zindex;>
-<!ATTLIST dr3d:cube draw:id %draw-shape-id;>
-<!ATTLIST dr3d:cube %draw-end-position; >
-<!ATTLIST dr3d:cube %table-background; >
-<!ATTLIST dr3d:cube %draw-style-name; >
-<!ATTLIST dr3d:cube draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:sphere EMPTY>
-<!ATTLIST dr3d:sphere dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:sphere dr3d:center %vector3D; #IMPLIED>
-<!ATTLIST dr3d:sphere dr3d:size %vector3D; #IMPLIED>
-<!ATTLIST dr3d:sphere %zindex;>
-<!ATTLIST dr3d:sphere draw:id %draw-shape-id;>
-<!ATTLIST dr3d:sphere %draw-end-position; >
-<!ATTLIST dr3d:sphere %table-background; >
-<!ATTLIST dr3d:sphere %draw-style-name; >
-<!ATTLIST dr3d:sphere draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:extrude EMPTY>
-<!ATTLIST dr3d:extrude dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:extrude %draw-viewbox;>
-<!ATTLIST dr3d:extrude svg:d %pathData; #REQUIRED >
-<!ATTLIST dr3d:extrude %zindex;>
-<!ATTLIST dr3d:extrude draw:id %draw-shape-id;>
-<!ATTLIST dr3d:extrude %draw-end-position; >
-<!ATTLIST dr3d:extrude %table-background; >
-<!ATTLIST dr3d:extrude %draw-style-name; >
-<!ATTLIST dr3d:extrude draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:rotate EMPTY>
-<!ATTLIST dr3d:rotate dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:rotate %draw-viewbox;>
-<!ATTLIST dr3d:rotate svg:d %pathData; #REQUIRED >
-<!ATTLIST dr3d:rotate %zindex;>
-<!ATTLIST dr3d:rotate draw:id %draw-shape-id;>
-<!ATTLIST dr3d:rotate %draw-end-position; >
-<!ATTLIST dr3d:rotate %table-background; >
-<!ATTLIST dr3d:rotate %draw-style-name; >
-<!ATTLIST dr3d:rotate draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:scene (dr3d:light*,(%shapes3d;)*)>
-<!ATTLIST dr3d:scene %draw-style-name; >
-<!ATTLIST dr3d:scene svg:x %coordinate; #IMPLIED>
-<!ATTLIST dr3d:scene svg:y %coordinate; #IMPLIED>
-<!ATTLIST dr3d:scene svg:width %length; #IMPLIED>
-<!ATTLIST dr3d:scene svg:height %length; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:vrp %vector3D; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:vpn %vector3D; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:vup %vector3D; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:projection (parallel|perspective) #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:distance %length; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:focal-length %length; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:shadow-slant %nonNegativeInteger; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:shade-mode (flat|phong|gouraud|draft) #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:ambient-color %color; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:lighting-mode %boolean; #IMPLIED>
-<!ATTLIST dr3d:scene %zindex;>
-<!ATTLIST dr3d:scene draw:id %draw-shape-id;>
-<!ATTLIST dr3d:scene %draw-end-position; >
-<!ATTLIST dr3d:scene %table-background; >
-
-<!-- layer -->
-
-<!ELEMENT draw:layer-set (draw:layer*)>
-
-<!ELEMENT draw:layer EMPTY>
-<!ATTLIST draw:layer draw:name %layerName; #REQUIRED>
-
-<!-- events -->
-<!ELEMENT presentation:event (presentation:sound)?>
-<!ATTLIST presentation:event %event-name;>
-<!ATTLIST presentation:event presentation:action (none|previous-page|next-page|first-page|last-page|hide|stop|execute|show|verb|fade-out|sound) #REQUIRED>
-<!ATTLIST presentation:event presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:event presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:event presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:event presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:event xlink:href %uriReference; #IMPLIED>
-<!ATTLIST presentation:event xlink:type (simple) #IMPLIED>
-<!ATTLIST presentation:event xlink:show (embed) #IMPLIED>
-<!ATTLIST presentation:event xlink:actuate (onRequest) #IMPLIED>
-<!ATTLIST presentation:event presentation:verb %nonNegativeInteger; #IMPLIED>
-
-<!-- applets -->
-<!ELEMENT draw:applet (draw:thumbnail?, draw:param*, svg:desc?)>
-<!ATTLIST draw:applet xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:applet xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:applet xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:applet xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:applet draw:code CDATA #REQUIRED>
-<!ATTLIST draw:applet draw:object CDATA #IMPLIED>
-<!ATTLIST draw:applet draw:archive CDATA #IMPLIED>
-<!ATTLIST draw:applet draw:may-script %boolean; "false">
-<!ATTLIST draw:applet draw:name CDATA #IMPLIED>
-<!ATTLIST draw:applet %draw-style-name;>
-<!ATTLIST draw:applet svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:applet svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:applet %zindex;>
-<!ATTLIST draw:applet draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:applet %draw-position;>
-<!ATTLIST draw:applet %draw-end-position; >
-
-<!-- plugins -->
-<!ELEMENT draw:plugin (draw:thumbnail?, draw:param*, svg:desc?)>
-<!ATTLIST draw:plugin xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:plugin xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:plugin xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:plugin xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:plugin draw:mime-type CDATA #IMPLIED>
-<!ATTLIST draw:plugin draw:name CDATA #IMPLIED>
-<!ATTLIST draw:plugin %draw-style-name;>
-<!ATTLIST draw:plugin svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:plugin svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:plugin %zindex;>
-<!ATTLIST draw:plugin draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:plugin %draw-position;>
-<!ATTLIST draw:plugin %draw-end-position; >
-
-<!-- Paramaters -->
-<!ELEMENT draw:param EMPTY>
-<!ATTLIST draw:param draw:name CDATA #IMPLIED>
-<!ATTLIST draw:param draw:value CDATA #IMPLIED>
-
-<!-- Floating Frames -->
-<!ELEMENT draw:floating-frame (draw:thumbnail?, svg:desc?)>
-<!ATTLIST draw:floating-frame xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:floating-frame xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:floating-frame xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:floating-frame xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:floating-frame draw:name CDATA #IMPLIED>
-<!ATTLIST draw:floating-frame draw:frame-name CDATA #IMPLIED>
-<!ATTLIST draw:floating-frame %draw-style-name;>
-<!ATTLIST draw:floating-frame svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:floating-frame svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:floating-frame %zindex;>
-<!ATTLIST draw:floating-frame draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:floating-frame %draw-position;>
-<!ATTLIST draw:floating-frame %draw-end-position; >
-
-<!-- Image Maps -->
-<!ELEMENT draw:image-map
- (draw:area-rectangle|draw:area-circle|draw:area-polygon)*>
-
-<!ELEMENT draw:area-rectangle (svg:desc?,office:events?)>
-<!ATTLIST draw:area-rectangle xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:area-rectangle xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:area-rectangle office:target-frame-name CDATA #IMPLIED>
-<!ATTLIST draw:area-rectangle xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:area-rectangle office:name CDATA #IMPLIED>
-<!ATTLIST draw:area-rectangle draw:nohref (nohref) #IMPLIED>
-<!ATTLIST draw:area-rectangle svg:x %coordinate; #REQUIRED>
-<!ATTLIST draw:area-rectangle svg:y %coordinate; #REQUIRED>
-<!ATTLIST draw:area-rectangle svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:area-rectangle svg:height %coordinate; #REQUIRED>
-
-<!ELEMENT draw:area-circle (svg:desc?,office:events?)>
-<!ATTLIST draw:area-circle xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:area-circle xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:area-circle office:target-frame-name CDATA #IMPLIED>
-<!ATTLIST draw:area-circle xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:area-circle office:name CDATA #IMPLIED>
-<!ATTLIST draw:area-circle draw:nohref (nohref) #IMPLIED>
-<!ATTLIST draw:area-circle svg:cx %coordinate; #REQUIRED>
-<!ATTLIST draw:area-circle svg:cy %coordinate; #REQUIRED>
-<!ATTLIST draw:area-circle svg:r %coordinate; #REQUIRED>
-
-<!ELEMENT draw:area-polygon (svg:desc?,office:events?)>
-<!ATTLIST draw:area-polygon xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:area-polygon xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:area-polygon office:target-frame-name CDATA #IMPLIED>
-<!ATTLIST draw:area-polygon xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:area-polygon office:name CDATA #IMPLIED>
-<!ATTLIST draw:area-polygon draw:nohref (nohref) #IMPLIED>
-<!ATTLIST draw:area-polygon svg:x %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:y %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:height %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:points %points; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:viewBox CDATA #REQUIRED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/dtypes.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/dtypes.mod
deleted file mode 100755
index e4d640d012c8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/dtypes.mod
+++ /dev/null
@@ -1,143 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!-- datatypes corresponding to XML Schema Part 2 W3C Working draft of -->
-<!-- 07 April 2000 -->
-
-<!-- string -->
-<!ENTITY % string "CDATA">
-<!ENTITY % cString "#PCDATA">
-
-<!-- boolean (values are "true" and "false" -->
-<!ENTITY % boolean "CDATA">
-
-<!-- integer ( ..., -2, -1, 0, 1, 2, ...) -->
-<!ENTITY % integer "CDATA">
-
-<!-- non negative integer ( 0, 1, 2, ...) -->
-<!ENTITY % nonNegativeInteger "CDATA">
-
-<!-- positive integer ( 1, 2, ...) -->
-<!ENTITY % positiveInteger "CDATA">
-<!ENTITY % cPositiveInteger "#PCDATA">
-
-<!ENTITY % positiveNumberOrDefault "CDATA">
-
-<!-- time duration as specified by ISO8601, section 5.5.3.2 -->
-<!ENTITY % timeDuration "CDATA">
-<!ENTITY % cTimeDuration "#PCDATA">
-
-<!-- time instance as specified by ISO8601, section 5.4 -->
-<!ENTITY % timeInstance "CDATA">
-<!ENTITY % cTimeInstance "#PCDATA">
-
-<!-- date instance as specified by ISO8601, section 5.2.1.1, extended format-->
-<!ENTITY % date "CDATA">
-<!ENTITY % cDate "#PCDATA">
-
-<!-- date duration, like timDuration but truncated to full dates -->
-<!ENTITY % dateDuration "CDATA">
-<!ENTITY % cDateDuration "#PCDATA">
-
-<!-- URI reference -->
-<!ENTITY % uriReference "CDATA">
-
-<!-- language code as specified by RFC1766 -->
-<!ENTITY % language "CDATA">
-<!ENTITY % cLanguage "#PCDATA">
-
-<!-- float -->
-<!ENTITY % float "CDATA">
-
-<!-- Some other common used data types -->
-
-<!-- a single UNICODE character -->
-<!ENTITY % character "CDATA">
-
-<!-- a style name -->
-<!ENTITY % styleName "CDATA">
-
-<!-- a target frame mame -->
-<!ENTITY % targetFrameName "CDATA">
-
-<!-- a language without a country as specified by ISO639 -->
-<!ENTITY % languageOnly "CDATA">
-
-<!-- a country as specified by ISO3166 -->
-<!ENTITY % country "CDATA">
-
-<!-- a color value having the format #rrggbb -->
-<!ENTITY % color "CDATA">
-<!-- a color value having the format #rrggbb or "transparent" -->
-<!ENTITY % transparentOrColor "CDATA">
-
-<!-- a percentage -->
-<!ENTITY % percentage "CDATA">
-
-<!-- a length (i.e. 1cm or .6inch) -->
-<!ENTITY % length "CDATA">
-<!ENTITY % positiveLength "CDATA">
-<!ENTITY % nonNegativeLength "CDATA">
-<!ENTITY % lengthOrNoLimit "CDATA">
-
-<!-- a length or a percentage -->
-<!ENTITY % lengthOrPercentage "CDATA">
-<!ENTITY % positiveLengthOrPercentage "CDATA">
-
-<!-- a pixel length (i.e. 2px) -->
-<!ENTITY % nonNegativePixelLength "CDATA">
-
-<!-- a float or a percentage -->
-<!ENTITY % floatOrPercentage "CDATA">
-
-<!-- a text encoding -->
-<!ENTITY % textEncoding "CDATA">
-
-<!-- cell address and cell range address -->
-<!ENTITY % cell-address "CDATA">
-<!ENTITY % cell-range-address "CDATA">
-<!ENTITY % cell-range-address-list "CDATA">
-
-<!-- value types -->
-<!ENTITY % valueType "(float|time|date|percentage|currency|boolean|string)">
-
-<!-- an svg coordinate in different distance formats -->
-<!ENTITY % coordinate "CDATA">
-
-<!ENTITY % coordinateOrPercentage "CDATA">
-
-<!ENTITY % shape "draw:rect|draw:line|draw:polyline|draw:polygon|draw:path|
- draw:circle|draw:ellipse|draw:g|draw:page-thumbnail|
- draw:text-box|draw:image|draw:object|draw:object-ole|
- draw:applet|draw:floating-frame|draw:plugin|
- draw:measure|draw:caption|draw:connector|chart:chart|
- dr3d:scene|draw:control" >
-<!ENTITY % shapes "(%shape;)" >
-
-<!ENTITY % anchorType "(page|frame|paragraph|char|as-char)">
-
-<!ENTITY % control-id "form:id CDATA #REQUIRED">
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/form.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/form.mod
deleted file mode 100755
index 77a91206c451..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/form.mod
+++ /dev/null
@@ -1,308 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % controls "form:text|form:textarea|form:fixed-text|form:file|
- form:password|form:formatted-text|form:button|form:image|
- form:checkbox|form:radio|form:listbox|form:combobox|form:frame|
- form:hidden|form:image-frame|form:grid|form:generic-control">
-
-<!ENTITY % name "form:name CDATA #IMPLIED">
-<!ENTITY % service-name "form:service-name CDATA #IMPLIED">
-
-<!ENTITY % navigation "(none|current|parent)">
-<!ENTITY % cycles "(records|current|page)">
-<!ENTITY % url "CDATA">
-
-
-<!ENTITY % types "(submit|reset|push|url)">
-<!ENTITY % button-type "form:button-type %types; 'push'">
-<!ENTITY % current-selected "form:current-selected %boolean; 'false'">
-<!ENTITY % current-value "form:current-value CDATA #IMPLIED">
-<!ENTITY % value "form:value CDATA #IMPLIED">
-<!ENTITY % disabled "form:disabled %boolean; 'false'">
-<!ENTITY % dropdown "form:dropdown %boolean; 'false'">
-<!ENTITY % for "form:for CDATA #IMPLIED">
-<!ENTITY % image-data "form:image-data %url; #IMPLIED">
-<!ENTITY % label "form:label CDATA #IMPLIED">
-<!ENTITY % max-length "form:max-length CDATA #IMPLIED">
-<!ENTITY % printable "form:printable %boolean; 'true'">
-<!ENTITY % readonly "form:readonly %boolean; 'false'">
-<!ENTITY % size "form:size CDATA #IMPLIED">
-<!ENTITY % selected "form:selected %boolean; 'false'">
-<!ENTITY % size "form:size CDATA #IMPLIED">
-<!ENTITY % tab-index "form:tab-index CDATA #IMPLIED">
-<!ENTITY % target-frame "office:target-frame CDATA '_blank'">
-<!ENTITY % target-location "xlink:href %url; #IMPLIED">
-<!ENTITY % tab-stop "form:tab-stop %boolean; 'true'">
-<!ENTITY % title "form:title CDATA #IMPLIED">
-<!ENTITY % default-value "form:default-value CDATA #IMPLIED">
-<!ENTITY % bound-column "form:bound-column CDATA #IMPLIED">
-<!ENTITY % convert-empty "form:convert-empty-to-null %boolean; 'false'">
-<!ENTITY % data-field "form:data-field CDATA #IMPLIED">
-<!ENTITY % list-source "form:list-source CDATA #IMPLIED">
-<!ENTITY % list-source-types "(table|query|sql|sql-pass-through|value-list|table-fields)">
-<!ENTITY % list-source-type "form:list-source-type %list-source-types; #IMPLIED">
-
-<!ELEMENT form:control (%controls;)+>
-<!ATTLIST form:control %name;
- %service-name;
- %control-id;>
-
-<!ELEMENT form:form (form:properties?, office:events?, (form:control|form:form)*)>
-<!ATTLIST form:form %name; %service-name;>
-<!ATTLIST form:form xlink:href %url; #IMPLIED>
-<!ATTLIST form:form form:enctype CDATA "application/x-www-form-urlencoded">
-<!ATTLIST form:form form:method CDATA "get">
-<!ATTLIST form:form office:target-frame CDATA "_blank">
-<!ATTLIST form:form form:allow-deletes %boolean; "true">
-<!ATTLIST form:form form:allow-inserts %boolean; "true">
-<!ATTLIST form:form form:allow-updates %boolean; "true">
-<!ATTLIST form:form form:apply-filter %boolean; "false">
-<!ATTLIST form:form form:command CDATA #IMPLIED>
-<!ATTLIST form:form form:command-type (table|query|command) "command">
-<!ATTLIST form:form form:datasource CDATA #IMPLIED>
-<!ATTLIST form:form form:detail-fields CDATA #IMPLIED>
-<!ATTLIST form:form form:escape-processing %boolean; "true">
-<!ATTLIST form:form form:filter CDATA #IMPLIED>
-<!ATTLIST form:form form:ignore-result %boolean; "false">
-<!ATTLIST form:form form:master-fields CDATA #IMPLIED>
-<!ATTLIST form:form form:navigation-mode %navigation; #IMPLIED>
-<!ATTLIST form:form form:order CDATA #IMPLIED>
-<!ATTLIST form:form form:tab-cycle %cycles; #IMPLIED>
-
-<!ELEMENT office:forms (form:form*)>
-<!ATTLIST office:forms form:automatic-focus %boolean; "false">
-<!ATTLIST office:forms form:apply-design-mode %boolean; "true">
-
-<!ELEMENT form:text (form:properties?, office:events?)>
-<!ATTLIST form:text %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;>
-
-<!ELEMENT form:textarea (form:properties?, office:events?)>
-<!ATTLIST form:textarea %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;>
-
-<!ELEMENT form:password (form:properties?, office:events?)>
-<!ATTLIST form:password %disabled;
- %max-length;
- %printable;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;>
-
-<!ATTLIST form:password form:echo-char CDATA "*">
-
-<!ELEMENT form:file (form:properties?, office:events?)>
-<!ATTLIST form:file %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;>
-
-<!ELEMENT form:formatted-text (form:properties?, office:events?)>
-<!ATTLIST form:formatted-text %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;>
-<!ATTLIST form:formatted-text form:max-value CDATA #IMPLIED>
-<!ATTLIST form:formatted-text form:min-value CDATA #IMPLIED>
-<!ATTLIST form:formatted-text form:validation %boolean; "false">
-
-<!ELEMENT form:fixed-text (form:properties?, office:events?)>
-<!ATTLIST form:fixed-text %for;
- %disabled;
- %label;
- %printable;
- %title;>
-<!ATTLIST form:fixed-text form:multi-line %boolean; "false">
-
-<!ELEMENT form:combobox (form:properties?, office:events?, form:item*)>
-<!ATTLIST form:combobox %current-value;
- %disabled;
- %dropdown;
- %max-length;
- %printable;
- %readonly;
- %size;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;
- %list-source;
- %list-source-type;>
-<!ATTLIST form:combobox form:auto-complete %boolean; #IMPLIED>
-
-<!ELEMENT form:item (#PCDATA)>
-<!ATTLIST form:item %label;>
-
-<!ELEMENT form:listbox (form:properties?, office:events?, form:option*)>
-<!ATTLIST form:listbox %disabled;
- %dropdown;
- %printable;
- %size;
- %tab-index;
- %tab-stop;
- %title;
- %bound-column;
- %data-field;
- %list-source;
- %list-source-type;>
-<!ATTLIST form:listbox form:multiple %boolean; "false">
-
-<!ELEMENT form:option (#PCDATA)>
-<!ATTLIST form:option %current-selected;
- %selected;
- %label;
- %value;>
-
-<!ELEMENT form:button (form:properties?, office:events?)>
-<!ATTLIST form:button %button-type;
- %disabled;
- %label;
- %image-data;
- %printable;
- %tab-index;
- %tab-stop;
- %target-frame;
- %target-location;
- %title;
- %value;>
-<!ATTLIST form:button form:default-button %boolean; "false">
-
-<!ELEMENT form:image (form:properties?, office:events?)>
-<!ATTLIST form:image %button-type;
- %disabled;
- %image-data;
- %printable;
- %tab-index;
- %tab-stop;
- %target-frame;
- %target-location;
- %title;
- %value;>
-
-<!ELEMENT form:checkbox (form:properties?, office:events?)>
-<!ATTLIST form:checkbox %disabled;
- %label;
- %printable;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %data-field;>
-<!ENTITY % states "(unchecked|checked|unknown)">
-<!ATTLIST form:checkbox form:current-state %states; #IMPLIED>
-<!ATTLIST form:checkbox form:is-tristate %boolean; "false">
-<!ATTLIST form:checkbox form:state %states; "unchecked">
-
-<!ELEMENT form:radio (form:properties?, office:events?)>
-<!ATTLIST form:radio %current-selected;
- %disabled;
- %label;
- %printable;
- %selected;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %data-field;>
-
-<!ELEMENT form:frame (form:properties?, office:events?)>
-<!ATTLIST form:frame %disabled;
- %for;
- %label;
- %printable;
- %title;>
-
-<!ELEMENT form:image-frame (form:properties?, office:events?)>
-<!ATTLIST form:image-frame %disabled;
- %image-data;
- %printable;
- %readonly;
- %title;
- %data-field;>
-
-<!ELEMENT form:hidden (form:properties?, office:events?)>
-<!ATTLIST form:hidden %name;
- %service-name;
- %value;>
-
-<!ELEMENT form:grid (form:properties?, office:events?, form:column*)>
-<!ATTLIST form:grid %disabled;
- %printable;
- %tab-index;
- %tab-stop;
- %title;>
-<!ENTITY % column-type "form:text| form:textarea| form:formatted-text|form:checkbox| form:listbox| form:combobox">
-<!ELEMENT form:column (%column-type;)+>
-<!ATTLIST form:column %name;
- %service-name;
- %label;>
-
-<!ELEMENT form:generic-control (form:properties?, office:events?)>
-
-
-<!ELEMENT form:properties (form:property+)>
-<!ELEMENT form:property (form:property-value*)>
-<!ATTLIST form:property form:property-is-list %boolean; #IMPLIED>
-<!ATTLIST form:property form:property-name CDATA #REQUIRED>
-<!ATTLIST form:property form:property-type (boolean|short|int|long|double|string) #REQUIRED>
-<!ELEMENT form:property-value (#PCDATA)>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/meta.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/meta.mod
deleted file mode 100755
index 1ea845bcb02d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/meta.mod
+++ /dev/null
@@ -1,90 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-
-<!ELEMENT meta:generator (%cString;)>
-
-<!ELEMENT dc:title (%cString;)>
-
-<!ELEMENT dc:description (%cString;)>
-
-<!ELEMENT dc:subject (%cString;)>
-
-<!ELEMENT meta:keywords (meta:keyword)*>
-<!ELEMENT meta:keyword (%cString;)>
-
-<!ELEMENT meta:initial-creator (%cString;)>
-
-<!ELEMENT dc:creator (%cString;)>
-
-<!ELEMENT meta:printed-by (%cString;)>
-
-<!ELEMENT meta:creation-date (%cTimeInstance;)>
-
-<!ELEMENT dc:date (%cTimeInstance;)>
-
-<!ELEMENT meta:print-date (%cTimeInstance;)>
-
-<!ELEMENT meta:template EMPTY>
-<!ATTLIST meta:template xlink:type (simple) #FIXED "simple">
-<!ATTLIST meta:template xlink:actuate (onRequest) "onRequest">
-<!ATTLIST meta:template xlink:href %uriReference; #REQUIRED>
-<!ATTLIST meta:template xlink:title %string; #IMPLIED>
-<!ATTLIST meta:template meta:date %timeInstance; #IMPLIED>
-
-<!ELEMENT meta:auto-reload EMPTY>
-<!ATTLIST meta:auto-reload xlink:type (simple) #IMPLIED>
-<!ATTLIST meta:auto-reload xlink:show (replace) #IMPLIED>
-<!ATTLIST meta:auto-reload xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST meta:auto-reload xlink:href %uriReference; #IMPLIED>
-<!ATTLIST meta:auto-reload meta:delay %timeDuration; "P0S">
-
-<!ELEMENT meta:hyperlink-behaviour EMPTY>
-<!ATTLIST meta:hyperlink-behaviour office:target-frame-name %targetFrameName; #IMPLIED>
-<!ATTLIST meta:hyperlink-behaviour xlink:show (new|replace) #IMPLIED>
-
-<!ELEMENT dc:language (%cLanguage;)>
-
-<!ELEMENT meta:editing-cycles (%cPositiveInteger;)>
-
-<!ELEMENT meta:editing-duration (%cTimeDuration;)>
-
-<!ELEMENT meta:user-defined (%cString;)>
-<!ATTLIST meta:user-defined meta:name %string; #REQUIRED>
-
-<!ELEMENT meta:document-statistic EMPTY>
-<!ATTLIST meta:document-statistic meta:page-count %positiveInteger; #IMPLIED
- meta:table-count %nonNegativeInteger; #IMPLIED
- meta:draw-count %nonNegativeInteger; #IMPLIED
- meta:image-count %nonNegativeInteger; #IMPLIED
- meta:ole-object-count %nonNegativeInteger; #IMPLIED
- meta:paragraph-count %nonNegativeInteger; #IMPLIED
- meta:word-count %nonNegativeInteger; #IMPLIED
- meta:character-count %nonNegativeInteger; #IMPLIED
- meta:row-count %nonNegativeInteger; #IMPLIED
- meta:cell-count %nonNegativeInteger; #IMPLIED
- meta:object-count %positiveInteger; #IMPLIED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/nmspace.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/nmspace.mod
deleted file mode 100755
index b7f6b64140a6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/nmspace.mod
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY nFO "http://www.w3.org/1999/XSL/Format">
-<!ENTITY nXLink "http://www.w3.org/1999/xlink">
-<!ENTITY nSVG "http://www.w3.org/2000/svg">
-
-<!-- StarOffice namespace names and prefixes -->
-
-<!ENTITY nOpenOffice "http://openoffice.org/2000">
-<!ENTITY nOpenOffice2001 "http://openoffice.org/2001">
-
-<!ENTITY nOffice "&nOpenOffice;/office">
-<!ENTITY nStyle "&nOpenOffice;/style">
-<!ENTITY nText "&nOpenOffice;/text">
-<!ENTITY nTable "&nOpenOffice;/table">
-<!ENTITY nMeta "&nOpenOffice;/meta">
-<!ENTITY nScript "&nOpenOffice;/script">
-<!ENTITY nDraw "&nOpenOffice;/drawing">
-<!ENTITY nChart "&nOpenOffice;/chart">
-<!ENTITY nNumber "&nOpenOffice;/datastyle">
-<!ENTITY nConfig "&nOpenOffice2001;/config">
-
-
-<!-- dublin core namespace name and prefic -->
-<!ENTITY nDC "http://purl.org/dc/elements/1.1/">
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.dtd b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.dtd
deleted file mode 100755
index 9bcd37edf325..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.dtd
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % dtypes-mod SYSTEM "dtypes.mod">
-%dtypes-mod;
-<!ENTITY % nmspace-mod SYSTEM "nmspace.mod">
-%nmspace-mod;
-<!ENTITY % style-mod SYSTEM "style.mod">
-%style-mod;
-<!ENTITY % office-mod SYSTEM "office.mod">
-%office-mod;
-<!ENTITY % meta-mod SYSTEM "meta.mod">
-%meta-mod;
-<!ENTITY % script-mod SYSTEM "script.mod">
-%script-mod;
-<!ENTITY % drawing-mod SYSTEM "drawing.mod">
-%drawing-mod;
-<!ENTITY % text-mod SYSTEM "text.mod">
-%text-mod;
-<!ENTITY % table-mod SYSTEM "table.mod">
-%table-mod;
-<!ENTITY % chart-mod SYSTEM "chart.mod">
-%chart-mod;
-<!ENTITY % datastyl-mod SYSTEM "datastyl.mod">
-%datastyl-mod;
-<!ENTITY % form-mod SYSTEM "form.mod">
-%form-mod;
-<!ENTITY % settings-mod SYSTEM "settings.mod">
-%settings-mod;
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.mod
deleted file mode 100755
index f8e3775fa6da..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/office.mod
+++ /dev/null
@@ -1,234 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT office:document ( office:meta?,
- office:settings?,
- office:script?,
- office:font-decls?,
- office:styles?,
- office:automatic-styles?,
- office:master-styles?,
- office:body ) >
-
-<!ATTLIST office:document xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document office:class
- (text|text-global|
- drawing|presentation|
- spreadsheet|chart) #REQUIRED>
-
-<!ATTLIST office:document office:version %string; #IMPLIED>
-
-<!-- document-styles -->
-<!ELEMENT office:document-styles (
- office:font-decls?,
- office:styles?,
- office:automatic-styles?,
- office:master-styles? ) >
-
-<!ATTLIST office:document-styles xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-styles xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document-styles xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document-styles xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document-styles xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document-styles xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document-styles xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document-styles xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document-styles xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document-styles xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document-styles xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-styles xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document-styles xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document-styles office:version %string; #IMPLIED>
-
-<!-- document-content -->
-
-<!ELEMENT office:document-content (
- office:script?,
- office:font-decls?,
- office:automatic-styles?,
- office:body ) >
-
-<!ATTLIST office:document-content xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-content xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document-content xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document-content xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document-content xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document-content xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document-content xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document-content xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document-content xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document-content xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document-content xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-content xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document-content xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document-content office:class
- (text|text-global|
- drawing|presentation|
- spreadsheet|chart) #REQUIRED>
-
-<!ATTLIST office:document-content office:version %string; #IMPLIED>
-
-<!-- document-content -->
-
-<!ELEMENT office:document-meta ( office:meta? ) >
-
-<!ATTLIST office:document-meta xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-meta xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document-meta xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document-meta xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document-meta xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document-meta xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document-meta xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document-meta xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document-meta xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document-meta xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document-meta xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-meta xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document-meta xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document-meta office:version %string; #IMPLIED>
-
-<!ELEMENT office:document-settings (office:settings) >
-<!ATTLIST office:document-settings xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-settings xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-settings xmlns:config CDATA #FIXED "&nConfig;">
-
-<!ATTLIST office:document-settings office:version %string; #IMPLIED>
-
-<!ENTITY % meta "(meta:generator?,
- dc:title?,
- dc:description?,
- dc:subject?,
- meta:initial-creator?,
- meta:creation-date?,
- dc:creator?,
- dc:date?,
- meta:printed-by?,
- meta:print-date?,
- meta:keywords?,
- dc:language?,
- meta:editing-cycles?,
- meta:editing-duration?,
- meta:hyperlink-behaviour?,
- meta:auto-reload?,
- meta:template?,
- meta:user-defined*,
- meta:document-statistic?)">
-<!ELEMENT office:meta %meta;>
-
-<!ENTITY % script "(script:library-embedded |
- script:library-linked)*">
-<!ELEMENT office:script %script;>
-
-<!ELEMENT office:font-decls (style:font-decl)*>
-
-<!ENTITY % styles "(style:default-style|style:style|text:list-style|
- number:number-style|number:currency-style|number:percentage-style|
- number:date-style|number:time-style|number:boolean-style|
- number:text-style|
- draw:gradient|draw:hatch|draw:fill-image|draw:marker|draw:stroke-dash|
- style:presentation-page-layout|draw:transparency)">
-
-<!-- Validity constraint: The elements
- text:outline-style,
- text:footnotes-configuration,
- text:endnotes-configuration,
- text:bibliography-configuration and
- text:linenumbering-configuration
- may appear only once!
- Unfortunatetly, this constraint cannot be easily specified in the DTD.
--->
-<!ELEMENT office:styles (%styles;|text:outline-style|
- text:footnotes-configuration|text:endnotes-configuration|
- text:bibliography-configuration|text:linenumbering-configuration)*>
-
-<!ELEMENT office:automatic-styles (%styles;|style:page-master)*>
-
-<!ELEMENT office:master-styles (draw:layer-set?,style:handout-master?,style:master-page*) >
-
-<!ENTITY % text-decls "text:variable-decls?, text:sequence-decls?,
- text:user-field-decls?, text:dde-connection-decls?,
- text:alphabetical-index-auto-mark-file?" >
-
-<!ENTITY % change-marks "text:change | text:change-start | text:change-end">
-
-<!ENTITY % body "(office:forms?,(text:tracked-changes|table:tracked-changes)?,%text-decls;,table:calculation-settings?,table:content-validations?,table:label-ranges?,
- (text:h|text:p|text:ordered-list|
- text:unordered-list|table:table|draw:page|
- draw:a|%shape;|text:section|text:table-of-content|
- text:illustration-index|text:table-index|text:object-index|
- text:user-index|text:alphabetical-index|text:bibliography|
- %change-marks;)*,
- table:named-expressions?,
- table:database-ranges?,table:data-pilot-tables?,
- table:consolidation?,
- table:dde-links?,
- presentation:settings?)">
-<!ELEMENT office:body %body;>
-<!ATTLIST office:body table:structure-protected %boolean; "false"
- table:protection-key CDATA #IMPLIED>
-
-<!ELEMENT office:events (script:event|presentation:event)*>
-
-<!-- DDE source: for text sections and tables -->
-<!ELEMENT office:dde-source EMPTY>
-<!ATTLIST office:dde-source office:dde-application CDATA #IMPLIED>
-<!ATTLIST office:dde-source office:dde-topic CDATA #IMPLIED>
-<!ATTLIST office:dde-source office:dde-item CDATA #IMPLIED>
-<!ATTLIST office:dde-source office:automatic-update %boolean; "false">
-<!ATTLIST office:dde-source office:name CDATA #IMPLIED>
-<!ATTLIST office:dde-source table:conversion-mode (into-default-style-data-style|into-english-number|let-text) "into-default-style-data-style" >
-
-<!-- annotations -->
-<!-- limitation: in the current implementation, only plain text inside of
- paragraphs is supported -->
-<!ELEMENT office:annotation (text:p)*>
-<!ATTLIST office:annotation office:author %string; #IMPLIED>
-<!ATTLIST office:annotation office:create-date %date; #IMPLIED>
-<!ATTLIST office:annotation office:create-date-string %string; #IMPLIED>
-<!ATTLIST office:annotation office:display %boolean; "false">
-
-<!ELEMENT office:change-info (text:p)*>
-<!ATTLIST office:change-info office:chg-author %string; #REQUIRED>
-<!ATTLIST office:change-info office:chg-date-time %timeInstance; #REQUIRED>
-
-<!ELEMENT office:binary-data (#PCDATA)>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/script.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/script.mod
deleted file mode 100755
index 4d13ff74aebc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/script.mod
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT script:library-embedded (script:module*)>
-<!ATTLIST script:library-embedded script:name %string; #REQUIRED>
-<!ATTLIST script:library-embedded script:password %string; #IMPLIED>
-
-<!ELEMENT script:library-linked EMPTY>
-<!ATTLIST script:library-linked script:name %string; #REQUIRED>
-<!ATTLIST script:library-linked xlink:href %string; #REQUIRED>
-<!ATTLIST script:library-linked xlink:type (simple) #FIXED "simple">
-
-<!ELEMENT script:module (#PCDATA)>
-<!ATTLIST script:module script:name %string; #REQUIRED>
-<!ATTLIST script:module script:language %string; #IMPLIED>
-
-
-<!ENTITY % script-language "script:language %string; #REQUIRED">
-<!ENTITY % event-name "script:event-name %string; #REQUIRED">
-<!ENTITY % location "script:location (document|application) #REQUIRED">
-<!ENTITY % macro-name "script:macro-name %string; #REQUIRED">
-
-<!ELEMENT script:event (#PCDATA)>
-<!ATTLIST script:event %script-language;
- %event-name;
- %location;
- %macro-name;>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/settings.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/settings.mod
deleted file mode 100755
index bb9224237fa8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/settings.mod
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT office:settings (config:config-item-set+)>
-
-<!ENTITY % items "(config:config-item |
- config:config-item-set |
- config:config-item-map-named |
- config:config-item-map-indexed)+">
-
-<!ELEMENT config:config-item-set %items;>
-<!ATTLIST config:config-item-set config:name CDATA #REQUIRED>
-
-<!ELEMENT config:config-item (#PCDATA)>
-<!ATTLIST config:config-item config:name CDATA #REQUIRED
- config:type (boolean | short | int | long | double | string | datetime | base64Binary) #REQUIRED>
-
-<!ELEMENT config:config-item-map-named (config:config-item-map-entry)+>
-<!ATTLIST config:config-item-map-named config:name CDATA #REQUIRED>
-
-<!ELEMENT config:config-item-map-indexed (config:config-item-map-entry)+>
-<!ATTLIST config:config-item-map-indexed config:name CDATA #REQUIRED>
-
-<!ELEMENT config:config-item-map-entry %items;>
-<!ATTLIST config:config-item-map-entry config:name CDATA #IMPLIED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/style.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/style.mod
deleted file mode 100755
index 21a3d9d17dd1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/style.mod
+++ /dev/null
@@ -1,391 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT style:font-decl EMPTY>
-<!ATTLIST style:font-decl style:name %string; #REQUIRED>
-<!ATTLIST style:font-decl fo:font-family %string; #REQUIRED>
-<!ATTLIST style:font-decl style:font-style-name %string; #IMPLIED>
-<!ENTITY % fontFamilyGeneric "(roman|swiss|modern|decorative|script|system)">
-<!ATTLIST style:font-decl style:font-family-generic %fontFamilyGeneric;
- #IMPLIED>
-<!ENTITY % fontPitch "(fixed|variable)">
-<!ATTLIST style:font-decl style:font-pitch %fontPitch; #IMPLIED>
-<!ATTLIST style:font-decl style:font-charset %textEncoding; #IMPLIED>
-
-<!ELEMENT style:style ( style:properties?,office:events?,style:map*)>
-
-<!ATTLIST style:style style:name %styleName; #REQUIRED>
-
-<!ENTITY % styleFamily "(paragraph|text|section|
- table|table-column|table-row|table-cell|table-page|chart|graphics|default|drawing-page|presentation|control)">
-<!ATTLIST style:style style:family %styleFamily; #REQUIRED>
-
-<!ATTLIST style:style style:parent-style-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:master-page-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:next-style-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:list-style-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:data-style-name %styleName; #IMPLIED>
-
-<!ATTLIST style:style style:auto-update %boolean; "false">
-
-<!ATTLIST style:style style:class %string; #IMPLIED>
-
-<!ELEMENT style:default-style (style:properties?)>
-<!ATTLIST style:default-style style:family %styleFamily; #REQUIRED>
-
-<!ELEMENT style:map EMPTY>
-
-<!ATTLIST style:map style:condition %string; #REQUIRED>
-<!ATTLIST style:map style:apply-style-name %styleName; #REQUIRED>
-<!ATTLIST style:map style:base-cell-address %cell-address; #IMPLIED>
-
-<!ELEMENT style:properties ANY>
-
-<!-- number format properties -->
-<!ATTLIST style:properties style:num-prefix %string; #IMPLIED>
-<!ATTLIST style:properties style:num-suffix %string; #IMPLIED>
-<!ATTLIST style:properties style:num-format %string; #IMPLIED>
-<!ATTLIST style:properties style:num-letter-sync %boolean; #IMPLIED>
-
-<!-- frame properties -->
-<!ATTLIST style:properties fo:width %positiveLength; #IMPLIED>
-<!ATTLIST style:properties fo:height %positiveLength; #IMPLIED>
-<!ATTLIST style:properties style:vertical-pos (top|middle|bottom|from-top) #IMPLIED>
-<!ATTLIST style:properties style:vertical-rel (page|page-content|
- frame|frame-content|
- paragraph|paragraph-content|char|
- line|baseline|text) #IMPLIED>
-<!ATTLIST style:properties style:horizontal-pos (left|center|right|from-left|inside|outside|from-inside) #IMPLIED>
-<!ATTLIST style:properties style:horizontal-rel (page|page-content|
- frame|frame-content|
- paragraph|paragraph-content|
- char) #IMPLIED>
-<!ATTLIST style:properties svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:min-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:min-width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:max-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:max-width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties text:anchor-type %anchorType; #IMPLIED>
-<!ATTLIST style:properties text:anchor-page-number %positiveInteger; #IMPLIED>
-<!ATTLIST style:properties svg:x %coordinate; #IMPLIED>
-<!ATTLIST style:properties svg:y %coordinate; #IMPLIED>
-<!ATTLIST style:properties style:print-content %boolean; #IMPLIED>
-<!ATTLIST style:properties style:protect %boolean; #IMPLIED>
-<!ATTLIST style:properties style:wrap (none|left|right|parallel|dynamic|run-through) #IMPLIED>
-<!ENTITY % noLimitOrPositiveInteger "CDATA">
-<!ATTLIST style:properties style:number-wrapped-paragraphs %noLimitOrPositiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:wrap-contour %boolean; #IMPLIED>
-<!ATTLIST style:properties style:wrap-contour-mode (full|outside) #IMPLIED>
-<!ATTLIST style:properties style:run-through (foreground|background) #IMPLIED>
-<!ATTLIST style:properties style:editable %boolean; #IMPLIED>
-<!ATTLIST style:properties style:mirror CDATA #IMPLIED>
-<!ATTLIST style:properties fo:clip CDATA #IMPLIED>
-<!ATTLIST style:properties text:animation (none|scroll|alternate|slide) #IMPLIED>
-<!ATTLIST style:properties text:animation-direction (left|right|up|down) #IMPLIED>
-<!ATTLIST style:properties text:animation-start-inside %boolean; #IMPLIED>
-<!ATTLIST style:properties text:animation-stop-inside %boolean; #IMPLIED>
-<!ATTLIST style:properties text:animation-repeat %integer; #IMPLIED>
-<!ATTLIST style:properties text:animation-delay %timeDuration; #IMPLIED>
-<!ATTLIST style:properties text:animation-steps %length; #IMPLIED>
-
-<!-- text properties -->
-<!ATTLIST style:properties fo:font-variant (normal|small-caps) #IMPLIED>
-<!ATTLIST style:properties fo:text-transform (none|lowercase|
- uppercase|capitalize) #IMPLIED>
-<!ATTLIST style:properties fo:color %color; #IMPLIED>
-<!ATTLIST style:properties style:use-window-font-color %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-outline %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-crossing-out
- (none|single-line|double-line|thick-line|slash|X)
- #IMPLIED>
-<!ATTLIST style:properties style:text-position CDATA #IMPLIED>
-<!ATTLIST style:properties style:text-align (left|right|start|center|end|justify|justified) #IMPLIED>
-
-<!ATTLIST style:properties style:font-name %string; #IMPLIED>
-<!ATTLIST style:properties fo:font-family %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-generic %fontFamilyGeneric;
- #IMPLIED>
-<!ATTLIST style:properties style:font-style-name %string; #IMPLIED>
-<!ATTLIST style:properties style:font-pitch %fontPitch; #IMPLIED>
-<!ATTLIST style:properties style:font-charset %textEncoding; #IMPLIED>
-<!ATTLIST style:properties style:font-name-asian %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-asian %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-generic-asian %fontFamilyGeneric;
- #IMPLIED>
-<!ATTLIST style:properties style:font-style-name-asian %string; #IMPLIED>
-<!ATTLIST style:properties style:font-pitch-asian %fontPitch; #IMPLIED>
-<!ATTLIST style:properties style:font-charset-asian %textEncoding; #IMPLIED>
-<!ATTLIST style:properties style:font-name-complex %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-complex %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-generic-complex %fontFamilyGeneric;
- #IMPLIED>
-<!ATTLIST style:properties style:font-style-name-complex %string; #IMPLIED>
-<!ATTLIST style:properties style:font-pitch-complex %fontPitch; #IMPLIED>
-<!ATTLIST style:properties style:font-charset-complex %textEncoding; #IMPLIED>
-
-<!ATTLIST style:properties fo:font-size %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:font-size-rel %length; #IMPLIED>
-<!ATTLIST style:properties style:font-size-asian %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:font-size-rel-asian %length; #IMPLIED>
-<!ATTLIST style:properties style:font-size-complex %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:font-size-rel-complex %length; #IMPLIED>
-<!ENTITY % normalOrLength "CDATA">
-<!ATTLIST style:properties fo:letter-spacing %normalOrLength; #IMPLIED>
-<!ATTLIST style:properties fo:language %languageOnly; #IMPLIED>
-<!ATTLIST style:properties style:language-asian %languageOnly; #IMPLIED>
-<!ATTLIST style:properties style:language-complex %languageOnly; #IMPLIED>
-<!ATTLIST style:properties fo:country %country; #IMPLIED>
-<!ATTLIST style:properties style:country-asian %country; #IMPLIED>
-<!ATTLIST style:properties style:country-complex %country; #IMPLIED>
-<!ENTITY % fontStyle "(normal|italic|oblique)">
-<!ATTLIST style:properties fo:font-style %fontStyle; #IMPLIED>
-<!ATTLIST style:properties style:font-style-asian %fontStyle; #IMPLIED>
-<!ATTLIST style:properties style:font-style-complex %fontStyle; #IMPLIED>
-<!ENTITY % fontRelief "(none|embossed|engraved)">
-<!ATTLIST style:properties style:font-relief %fontRelief; #IMPLIED>
-<!ATTLIST style:properties fo:text-shadow CDATA #IMPLIED>
-<!ATTLIST style:properties style:text-underline
- (none|single|double|dotted|dash|long-dash|dot-dash|
- dot-dot-dash|wave|bold|bold-dotted|bold-dash|
- bold-long-dash|bold-dot-dash|bold-dot-dot-dash|
- bold-wave|double-wave|small-wave) #IMPLIED>
-<!ATTLIST style:properties style:text-autospace (none | ideograph-alpha) #IMPLIED>
-<!ATTLIST style:properties style:punctuation-wrap (simple | hanging) #IMPLIED>
-<!ATTLIST style:properties style:line-break (normal | strict) #IMPLIED>
-<!ENTITY % fontColorOrColor "CDATA">
-<!ATTLIST style:properties style:text-underline-color %fontColorOrColor;
- #IMPLIED>
-<!ATTLIST style:properties fo:font-weight CDATA #IMPLIED>
-<!ATTLIST style:properties style:font-weight-asian CDATA #IMPLIED>
-<!ATTLIST style:properties style:font-weight-complex CDATA #IMPLIED>
-<!ATTLIST style:properties fo:score-spaces %boolean; #IMPLIED>
-<!ATTLIST style:properties style:letter-kerning %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-blinking %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-background-color %transparentOrColor;
- #IMPLIED>
-
-<!ATTLIST style:properties style:text-combine (none|letters|lines) #IMPLIED>
-<!ATTLIST style:properties style:text-combine-start-char %character; #IMPLIED>
-<!ATTLIST style:properties style:text-combine-end-char %character; #IMPLIED>
-<!ATTLIST style:properties style:text-emphasize CDATA #IMPLIED>
-<!ATTLIST style:properties style:text-scale %percentage; #IMPLIED>
-<!ATTLIST style:properties style:text-rotation-angle %integer; #IMPLIED>
-<!ATTLIST style:properties style:text-rotation-scale (fixed|line-height) #IMPLIED>
-
-<!-- paragraph properties -->
-<!ENTITY % nonNegativeLengthOrPercentageOrNormal "CDATA">
-<!ATTLIST style:properties fo:line-height
- %nonNegativeLengthOrPercentageOrNormal; #IMPLIED>
-<!ATTLIST style:properties style:line-height-at-least %nonNegativeLength;
- #IMPLIED>
-<!ATTLIST style:properties style:line-spacing %length; #IMPLIED>
-<!ATTLIST style:properties fo:text-align (start|end|center|justify) #IMPLIED>
-<!ATTLIST style:properties fo:text-align-last (start|center|justify) #IMPLIED>
-<!ATTLIST style:properties style:text-align-source (fix|value-type) #IMPLIED>
-<!ATTLIST style:properties style:justify-single-word %boolean; #IMPLIED>
-<!ATTLIST style:properties style:break-inside (auto|avoid) #IMPLIED>
-<!ATTLIST style:properties fo:widows %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties fo:orphans %nonNegativeInteger; #IMPLIED>
-
-<!ATTLIST style:properties fo:hyphenate %boolean; #IMPLIED>
-<!ATTLIST style:properties fo:hyphenate-keep (none|page) #IMPLIED>
-<!ATTLIST style:properties fo:hyphenation-remain-char-count %positiveInteger;
- #IMPLIED>
-<!ATTLIST style:properties fo:hyphenation-push-char-count %positiveInteger;
- #IMPLIED>
-<!ATTLIST style:properties fo:hyphenation-ladder-count
- %noLimitOrPositiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:page-number %positiveInteger; #IMPLIED>
-
-<!ELEMENT style:tab-stops (style:tab-stop)*>
-<!ELEMENT style:tab-stop EMPTY>
-<!ATTLIST style:tab-stop style:position %nonNegativeLength; #REQUIRED>
-<!ATTLIST style:tab-stop style:type (left|center|right|char|default) "left">
-<!ATTLIST style:tab-stop style:char %character; #IMPLIED>
-<!ATTLIST style:tab-stop style:leader-char %character; " ">
-
-<!ELEMENT style:drop-cap EMPTY>
-<!ENTITY % wordOrPositiveInteger "CDATA">
-<!ATTLIST style:drop-cap style:length %wordOrPositiveInteger; "1">
-<!ATTLIST style:drop-cap style:lines %positiveInteger; "1">
-<!ATTLIST style:drop-cap style:distance %length; "0cm">
-<!ATTLIST style:drop-cap style:style-name %styleName; #IMPLIED>
-
-<!ATTLIST style:properties style:register-true %boolean; #IMPLIED>
-<!ATTLIST style:properties style:register-truth-ref-style-name %styleName; #IMPLIED>
-<!ATTLIST style:properties fo:margin-left %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:margin-right %positiveLengthOrPercentage;
- #IMPLIED>
-<!ATTLIST style:properties fo:text-indent %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:auto-text-indent %boolean; #IMPLIED>
-<!ATTLIST style:properties fo:margin-top %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:margin-bottom %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:break-before (auto|column|page) #IMPLIED>
-<!ATTLIST style:properties fo:break-after (auto|column|page) #IMPLIED>
-<!ATTLIST style:properties fo:background-color %transparentOrColor; #IMPLIED>
-
-<!ELEMENT style:background-image (office:binary-data?)>
-<!ATTLIST style:background-image xlink:type (simple) #IMPLIED>
-<!ATTLIST style:background-image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST style:background-image xlink:show (embed) #IMPLIED>
-<!ATTLIST style:background-image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST style:background-image style:repeat (no-repeat|repeat|stretch)
- "repeat">
-<!ATTLIST style:background-image style:position CDATA "center">
-<!ATTLIST style:background-image style:filter-name %string; #IMPLIED>
-
-<!ELEMENT style:symbol-image (office:binary-data?)>
-<!ATTLIST style:symbol-image xlink:type (simple) #IMPLIED>
-<!ATTLIST style:symbol-image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST style:symbol-image xlink:show (embed) #IMPLIED>
-<!ATTLIST style:symbol-image xlink:actuate (onLoad) #IMPLIED>
-
-<!ATTLIST style:properties fo:border CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-top CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-bottom CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-left CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-right CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-top CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-bottom CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-left CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-right CDATA #IMPLIED>
-<!ATTLIST style:properties fo:padding %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-top %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-bottom %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-left %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-right %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties style:shadow CDATA #IMPLIED>
-<!ATTLIST style:properties fo:keep-with-next %boolean; #IMPLIED>
-
-<!ATTLIST style:properties text:number-lines %boolean; "false">
-<!ATTLIST style:properties text:line-number %nonNegativeInteger; #IMPLIED>
-
-<!ATTLIST style:properties style:decimal-places %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties style:tab-stop-distance %nonNegativeLength; #IMPLIED>
-
-<!-- table properties -->
-<!ATTLIST style:properties style:width %positiveLength; #IMPLIED>
-<!ATTLIST style:properties style:rel-width %percentage; #IMPLIED>
-<!ATTLIST style:properties style:may-break-between-rows %boolean; #IMPLIED>
-<!ATTLIST style:properties table:page-style-name %styleName; #IMPLIED>
-<!ATTLIST style:properties table:display %boolean; #IMPLIED>
-
-<!-- table column properties -->
-<!ATTLIST style:properties style:column-width %positiveLength; #IMPLIED>
-<!ENTITY % relWidth "CDATA">
-<!ATTLIST style:properties style:rel-column-width %relWidth; #IMPLIED>
-<!ATTLIST style:properties style:use-optimal-column-width %boolean; #IMPLIED>
-
-<!-- table row properties -->
-<!ATTLIST style:properties style:row-height %positiveLength; #IMPLIED>
-<!ATTLIST style:properties style:min-row-height %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties style:use-optimal-row-height %boolean; #IMPLIED>
-
-<!-- table cell properties -->
-<!ATTLIST style:properties
- table:align (left | center | right | margins) #IMPLIED
- table:border-model (collapsing | separating) #IMPLIED
- fo:vertical-align (top | middle | bottom | automatic) #IMPLIED
- fo:direction (ltr | ttb) #IMPLIED
- style:rotation-angle %nonNegativeInteger; #IMPLIED
- style:rotation-align (none | bottom | top | center) #IMPLIED
- style:cell-protect CDATA #IMPLIED
- fo:wrap-option (no-wrap | wrap) #IMPLIED
->
-<!ELEMENT style:columns (style:column-sep?,style:column*)>
-<!ATTLIST style:columns fo:column-count %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:columns fo:column-gap %positiveLength; #IMPLIED>
-
-<!ELEMENT style:column EMPTY>
-<!ATTLIST style:column style:rel-width CDATA #IMPLIED>
-<!ATTLIST style:column fo:margin-left %positiveLength; #IMPLIED>
-<!ATTLIST style:column fo:margin-right %positiveLength; #IMPLIED>
-
-<!ELEMENT style:column-sep EMPTY>
-<!ATTLIST style:column-sep style:style (none|solid|dotted|dashed|dot-dashed)
- "solid">
-<!ATTLIST style:column-sep style:width %length; #REQUIRED>
-<!ATTLIST style:column-sep style:height %percentage; "100%">
-<!ATTLIST style:column-sep style:vertical-align (top|middle|bottom) "top">
-<!ATTLIST style:column-sep style:color %color; "#000000">
-
-<!-- page master properties -->
-<!ELEMENT style:page-master (style:properties?, style:header-style?, style:footer-style?)>
-<!ATTLIST style:page-master style:name %styleName; #REQUIRED>
-<!ATTLIST style:page-master style:page-usage (all|left|right|mirrored) "all">
-
-<!ELEMENT style:header-style (style:properties?)>
-<!ELEMENT style:footer-style (style:properties?)>
-
-<!ATTLIST style:properties fo:page-width %length; #IMPLIED>
-<!ATTLIST style:properties fo:page-height %length; #IMPLIED>
-<!ATTLIST style:properties style:paper-tray-number %positiveNumberOrDefault; #IMPLIED>
-<!ATTLIST style:properties style:print-orientation (portrait|landscape) #IMPLIED>
-<!ATTLIST style:properties style:print CDATA #IMPLIED>
-<!ATTLIST style:properties style:print-page-order (ttb|ltr) #IMPLIED>
-<!ATTLIST style:properties style:first-page-number %positiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:scale-to %percentage; #IMPLIED>
-<!ATTLIST style:properties style:scale-to-pages %positiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:table-centering (horizontal | vertical | both | none) #IMPLIED>
-
-<!ATTLIST style:properties style:footnote-max-height %lengthOrNoLimit; #IMPLIED>
-<!ATTLIST style:properties style:vertical-align (top|bottom|middle|basline|auto) #IMPLIED>
-
-<!ELEMENT style:footnote-sep EMPTY>
-<!ATTLIST style:footnote-sep style:width %length; #IMPLIED>
-<!ATTLIST style:footnote-sep style:rel-width %percentage; #IMPLIED>
-<!ATTLIST style:footnote-sep style:color %color; #IMPLIED>
-<!ATTLIST style:footnote-sep style:adjustment (left|center|right) "left">
-<!ATTLIST style:footnote-sep style:distance-before-sep %length; #IMPLIED>
-<!ATTLIST style:footnote-sep style:distance-after-sep %length; #IMPLIED>
-
-<!-- master page -->
-<!ELEMENT style:master-page ( (style:header, style:header-left?)?, (style:footer, style:footer-left?)?,
- office:forms?,style:style*, (%shapes;)*, presentation:notes? )>
-<!ATTLIST style:master-page style:name %styleName; #REQUIRED>
-<!ATTLIST style:master-page style:page-master-name %styleName; #REQUIRED>
-<!ATTLIST style:master-page style:next-style-name %styleName; #IMPLIED>
-<!ATTLIST style:master-page draw:style-name %styleName; #IMPLIED>
-
-<!-- handout master -->
-<!ELEMENT style:handout-master (%shapes;)*>
-<!ATTLIST style:handout-master presentation:presentation-page-layout-name %styleName; #IMPLIED>
-
-<!ENTITY % hd-ft-content "( text:p | (style:region-left?, style:region-center?, style:region-right?) )">
-<!ELEMENT style:header %hd-ft-content;>
-<!ELEMENT style:footer %hd-ft-content;>
-<!ELEMENT style:header-left %hd-ft-content;>
-<!ATTLIST style:header-left style:display %boolean; "true">
-<!ELEMENT style:footer-left %hd-ft-content;>
-<!ATTLIST style:footer-left style:display %boolean; "true">
-
-<!ENTITY % region-content "(text:p*)">
-<!ELEMENT style:region-left %region-content;>
-<!ELEMENT style:region-center %region-content;>
-<!ELEMENT style:region-right %region-content;>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/table.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/table.mod
deleted file mode 100755
index 6d9f3cdb2a8f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/table.mod
+++ /dev/null
@@ -1,493 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT table:calculation-settings (table:null-date?, table:iteration?)>
-<!ATTLIST table:calculation-settings
- table:case-sensitive %boolean; "true"
- table:precision-as-shown %boolean; "false"
- table:search-criteria-must-apply-to-whole-cell %boolean; "true"
- table:automatic-find-labels %boolean; "true"
- table:use-regular-expressions %boolean; "true"
- table:null-year %positiveInteger; "1930"
->
-<!ELEMENT table:null-date EMPTY>
-<!ATTLIST table:null-date
- table:value-type %valueType; #FIXED "date"
- table:date-value %date; "1899-12-30"
->
-<!ELEMENT table:iteration EMPTY>
-<!ATTLIST table:iteration
- table:status (enable | disable) "disable"
- table:steps %positiveInteger; "100"
- table:maximum-difference %float; "0.001"
->
-
-<!ELEMENT table:tracked-changes (table:cell-content-change | table:insertion | table:deletion | table:movement | table:rejection)*>
-<!ATTLIST table:tracked-changes table:track-changes %boolean; "true"
- table:protected %boolean; "false"
- table:protection-key CDATA #IMPLIED
->
-
-<!ELEMENT table:dependences (table:dependence)+>
-<!ELEMENT table:dependence EMPTY>
-<!ATTLIST table:dependence
- table:id CDATA #REQUIRED
->
-<!ELEMENT table:deletions (table:cell-content-deletion | table:change-deletion)+>
-<!ELEMENT table:cell-content-deletion (table:cell-address?, table:change-track-table-cell?)>
-<!ATTLIST table:cell-content-deletion
- table:id CDATA #IMPLIED
->
-<!ELEMENT table:change-deletion EMPTY>
-<!ATTLIST table:change-deletion
- table:id CDATA #IMPLIED
->
-<!ELEMENT table:insertion (office:change-info, table:dependences?, table:deletions?)>
-<!ATTLIST table:insertion
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
- table:type (row | column | table) #REQUIRED
- table:position %integer; #REQUIRED
- table:count %positiveInteger; "1"
- table:table %integer; #IMPLIED
->
-<!ELEMENT table:deletion (office:change-info, table:dependences?, table:deletions?, table:cut-offs?)>
-<!ATTLIST table:deletion
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
- table:type (row | column | table) #REQUIRED
- table:position %integer; #REQUIRED
- table:count %positiveInteger; "1"
- table:table %integer; #IMPLIED
- table:multi-deletion-spanned %integer; #IMPLIED
->
-<!ELEMENT table:cut-offs (table:movement-cut-off+ | (table:insertion-cut-off, table:movement-cut-off*))>
-<!ELEMENT table:insertion-cut-off EMPTY>
-<!ATTLIST table:insertion-cut-off
- table:id CDATA #REQUIRED
- table:position %integer; #REQUIRED
->
-<!ELEMENT table:movement-cut-off EMPTY>
-<!ATTLIST table:movement-cut-off
- table:id CDATA #REQUIRED
- table:start-position %integer; #IMPLIED
- table:end-position %integer; #IMPLIED
- table:position %integer; #IMPLIED
->
-<!ELEMENT table:movement (table:source-range-address, table:target-range-address, office:change-info, table:dependences?, table:deletions?)>
-<!ATTLIST table:movement
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
->
-<!ELEMENT table:target-range-address EMPTY>
-<!ATTLIST table:target-range-address
- table:column %integer; #IMPLIED
- table:row %integer; #IMPLIED
- table:table %integer; #IMPLIED
- table:start-column %integer; #IMPLIED
- table:start-row %integer; #IMPLIED
- table:start-table %integer; #IMPLIED
- table:end-column %integer; #IMPLIED
- table:end-row %integer; #IMPLIED
- table:end-table %integer; #IMPLIED
->
-<!ELEMENT table:source-range-address EMPTY>
-<!ATTLIST table:source-range-address
- table:column %integer; #IMPLIED
- table:row %integer; #IMPLIED
- table:table %integer; #IMPLIED
- table:start-column %integer; #IMPLIED
- table:start-row %integer; #IMPLIED
- table:start-table %integer; #IMPLIED
- table:end-column %integer; #IMPLIED
- table:end-row %integer; #IMPLIED
- table:end-table %integer; #IMPLIED
->
-<!ELEMENT table:change-track-table-cell (text:p*)>
-<!ATTLIST table:change-track-table-cell
- table:cell-address %cell-address; #IMPLIED
- table:matrix-covered (true | false) "false"
- table:formula %string; #IMPLIED
- table:number-matrix-rows-spanned %positiveInteger; #IMPLIED
- table:number-matrix-columns-spanned %positiveInteger; #IMPLIED
- table:value-type %valueType; "string"
- table:value %float; #IMPLIED
- table:date-value %date; #IMPLIED
- table:time-value %timeInstance; #IMPLIED
- table:string-value %string; #IMPLIED
->
-<!ELEMENT table:cell-content-change (table:cell-address, office:change-info, table:dependences?, table:deletions?, table:previous)>
-<!ATTLIST table:cell-content-change
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
->
-<!ELEMENT table:cell-address EMPTY>
-<!ATTLIST table:cell-address
- table:column %integer; #IMPLIED
- table:row %integer; #IMPLIED
- table:table %integer; #IMPLIED
->
-<!ELEMENT table:previous (table:change-track-table-cell)>
-<!ATTLIST table:previous
- table:id CDATA #IMPLIED
->
-<!ELEMENT table:rejection (office:change-info, table:dependences?, table:deletions?)>
-<!ATTLIST table:rejection
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
->
-
-<!ENTITY % table-columns "table:table-columns | ( table:table-column | table:table-column-group )+">
-<!ENTITY % table-header-columns "table:table-header-columns">
-<!ENTITY % table-rows "table:table-rows | ( table:table-row | table:table-row-group )+">
-<!ENTITY % table-header-rows "table:table-header-rows">
-<!ENTITY % table-column-groups "((%table-columns;),(%table-header-columns;,(%table-columns;)?)?) | (%table-header-columns;,(%table-columns;)?)">
-<!ENTITY % table-row-groups "((%table-rows;),(%table-header-rows;,(%table-rows;)?)?) | (%table-header-rows;,(%table-rows;)?)">
-<!ELEMENT table:table (table:table-source?, table:scenario?, office:forms?, table:shapes?, (%table-column-groups;), (%table-row-groups;))>
-<!ATTLIST table:table
- table:name %string; #IMPLIED
- table:style-name %styleName; #IMPLIED
- table:protected %boolean; "false"
- table:protection-key CDATA #IMPLIED
- table:print-ranges %cell-range-address-list; #IMPLIED
->
-<!ELEMENT table:table-source EMPTY>
-<!ATTLIST table:table-source
- table:mode (copy-all | copy-results-only) "copy-all"
- xlink:type (simple) #FIXED "simple"
- xlink:actuate (onRequest) "onRequest"
- xlink:href %uriReference; #REQUIRED
- table:filter-name CDATA #IMPLIED
- table:table-name CDATA #IMPLIED
- table:filter-options CDATA #IMPLIED
- table:refresh-delay %timeDuration; #IMPLIED
->
-<!ELEMENT table:scenario EMPTY>
-<!ATTLIST table:scenario
- table:display-border %boolean; "true"
- table:border-color %color; #IMPLIED
- table:copy-back %boolean; "true"
- table:copy-styles %boolean; "true"
- table:copy-formulas %boolean; "true"
- table:is-active %boolean; #REQUIRED
- table:scenario-ranges %cell-range-address-list; #REQUIRED
- table:comment CDATA #IMPLIED
->
-<!ELEMENT table:shapes %shapes;>
-<!ELEMENT table:table-column-group (table:table-header-columns | table:table-column | table:table-column-group)+>
-<!ATTLIST table:table-column-group
- table:display %boolean; "true"
->
-<!ELEMENT table:table-header-columns (table:table-column | table:table-column-group)+>
-<!ELEMENT table:table-columns (table:table-column | table:table-column-group)+>
-<!ELEMENT table:table-column EMPTY>
-<!ATTLIST table:table-column
- table:number-columns-repeated %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:visibility (visible | collapse | filter) "visible"
- table:default-cell-style-name %styleName; #IMPLIED
->
-<!ELEMENT table:table-row-group (table:table-header-rows | table:table-row | table:table-row-group)+>
-<!ATTLIST table:table-row-group
- table:display %boolean; "true"
->
-<!ELEMENT table:table-header-rows (table:table-row | table:table-row-group)+>
-<!ELEMENT table:table-rows (table:table-row | table:table-row-group)+>
-<!ENTITY % table-cells "(table:table-cell|table:covered-table-cell)+">
-<!ELEMENT table:table-row %table-cells;>
-<!ATTLIST table:table-row
- table:number-rows-repeated %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:visibility (visible | collapse | filter) "visible"
- table:default-cell-style-name %styleName; #IMPLIED
->
-
-<!ENTITY % text-wo-table "(text:h|text:p|text:ordered-list|text:unordered-list|%shapes;)*">
-<!ENTITY % cell-content "(table:cell-range-source?,office:annotation?,table:detective?,(table:sub-table|%text-wo-table;))">
-<!ELEMENT table:table-cell %cell-content;>
-<!ELEMENT table:covered-table-cell %cell-content;>
-<!ATTLIST table:table-cell
- table:number-columns-repeated %positiveInteger; "1"
- table:number-rows-spanned %positiveInteger; "1"
- table:number-columns-spanned %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:validation-name CDATA #IMPLIED
- table:formula %string; #IMPLIED
- table:number-matrix-rows-spanned %positiveInteger; #IMPLIED
- table:number-matrix-columns-spanned %positiveInteger; #IMPLIED
- table:value-type %valueType; "string"
- table:value %float; #IMPLIED
- table:date-value %date; #IMPLIED
- table:time-value %timeInstance; #IMPLIED
- table:boolean-value %boolean; #IMPLIED
- table:string-value %string; #IMPLIED
- table:currency %string; #IMPLIED
->
-<!ATTLIST table:covered-table-cell
- table:number-columns-repeated %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:validation-name CDATA #IMPLIED
- table:formula %string; #IMPLIED
- table:number-matrix-rows-spanned %positiveInteger; #IMPLIED
- table:number-matrix-columns-spanned %positiveInteger; #IMPLIED
- table:value-type %valueType; "string"
- table:value %float; #IMPLIED
- table:date-value %date; #IMPLIED
- table:time-value %timeInstance; #IMPLIED
- table:boolean-value %boolean; #IMPLIED
- table:string-value %string; #IMPLIED
- table:currency %string; #IMPLIED
->
-<!-- cell protection in writer: cell attribute; calc uses format -->
-<!ATTLIST table:table-cell table:protected %boolean; "false">
-
-<!ELEMENT table:cell-range-source EMPTY>
-<!ATTLIST table:cell-range-source
- table:name %string; #REQUIRED
- xlink:type (simple) #FIXED "simple"
- xlink:actuate (onRequest) #FIXED "onRequest"
- xlink:href %uriReference; #REQUIRED
- table:filter-name %string; #REQUIRED
- table:filter-options %string; #IMPLIED
- table:last-column-spanned %positiveInteger; #REQUIRED
- table:last-row-spanned %positiveInteger; #REQUIRED
- table:refresh-delay %timeDuration; #IMPLIED
->
-
-<!ELEMENT table:detective (table:highlighted-range*, table:operation*)>
-<!ELEMENT table:highlighted-range EMPTY>
-<!ATTLIST table:highlighted-range
- table:cell-range-address %cell-range-address; #IMPLIED
- table:direction (from-another-table | to-another-table | from-same-table | to-same-table) #REQUIRED
- table:contains-error %boolean; "false"
->
-<!ELEMENT table:operation EMPTY>
-<!ATTLIST table:operation
- table:name (trace-dependents | remove-dependents | trace-precedents | remove-precedents | trace-errors) #REQUIRED
- table:index %nonNegativeInteger; #REQUIRED
->
-
-<!ELEMENT table:content-validations (table:content-validation)+>
-<!ELEMENT table:content-validation (table:help-message?, (table:error-message | (table:error-macro, office:events?))?)>
-<!ATTLIST table:content-validation
- table:name CDATA #REQUIRED
- table:condition CDATA #IMPLIED
- table:base-cell-address %cell-address; #IMPLIED
- table:allow-empty-cell %boolean; #IMPLIED
->
-<!ELEMENT table:help-message (text:p*)>
-<!ATTLIST table:help-message
- table:title CDATA #IMPLIED
- table:display %boolean; #IMPLIED
->
-<!ELEMENT table:error-message (text:p*)>
-<!ATTLIST table:error-message
- table:title CDATA #IMPLIED
- table:message-type (stop | warning | information) #IMPLIED
- table:display %boolean; #IMPLIED
->
-<!ELEMENT table:error-macro EMPTY>
-<!ATTLIST table:error-macro
- table:name CDATA #IMPLIED
- table:execute %boolean; #IMPLIED
->
-
-<!ELEMENT table:sub-table ((%table-column-groups;) , (%table-row-groups;))>
-
-<!ELEMENT table:label-ranges (table:label-range)*>
-<!ELEMENT table:label-range EMPTY>
-<!ATTLIST table:label-range
- table:label-cell-range-address %cell-range-address; #REQUIRED
- table:data-cell-range-address %cell-range-address; #REQUIRED
- table:orientation (column | row) #REQUIRED
->
-
-<!ELEMENT table:named-expressions (table:named-range | table:named-expression)*>
-<!ELEMENT table:named-range EMPTY>
-<!ATTLIST table:named-range
- table:name CDATA #REQUIRED
- table:cell-range-address %cell-range-address; #REQUIRED
- table:base-cell-address %cell-address; #IMPLIED
- table:range-usable-as CDATA "none"
->
-<!ELEMENT table:named-expression EMPTY>
-<!ATTLIST table:named-expression
- table:name CDATA #REQUIRED
- table:expression CDATA #REQUIRED
- table:base-cell-address %cell-address; #IMPLIED
->
-
-<!ELEMENT table:filter (table:filter-condition | table:filter-and | table:filter-or)>
-<!ATTLIST table:filter
- table:target-range-address %cell-range-address; #IMPLIED
- table:condition-source-range-address %cell-range-address; #IMPLIED
- table:condition-source (self | cell-range) "self"
- table:display-duplicates %boolean; "true"
->
-<!ELEMENT table:filter-and (table:filter-or | table:filter-condition)+>
-<!ELEMENT table:filter-or (table:filter-and | table:filter-condition)+>
-<!ELEMENT table:filter-condition EMPTY>
-<!ATTLIST table:filter-condition
- table:field-number %nonNegativeInteger; #REQUIRED
- table:case-sensitive %boolean; "false"
- table:data-type (text | number) "text"
- table:value CDATA #REQUIRED
- table:operator CDATA #REQUIRED
->
-
-<!ELEMENT table:database-ranges (table:database-range)*>
-<!ELEMENT table:database-range ((table:database-source-sql | table:database-source-table | table:database-source-query)?, table:filter?, table:sort?, table:subtotal-rules?)>
-<!ATTLIST table:database-range
- table:name CDATA #IMPLIED
- table:is-selection %boolean; "false"
- table:on-update-keep-styles %boolean; "false"
- table:on-update-keep-size %boolean; "true"
- table:has-persistant-data %boolean; "true"
- table:orientation (row | column) "row"
- table:contains-header %boolean; "true"
- table:display-filter-buttons %boolean; "false"
- table:target-range-address %cell-range-address; #REQUIRED
- table:refresh-delay %timeDuration; #IMPLIED
->
-<!ELEMENT table:database-source-sql EMPTY>
-<!ATTLIST table:database-source-sql
- table:database-name CDATA #REQUIRED
- table:sql-statement CDATA #REQUIRED
- table:parse-sql-statements %boolean; "false"
->
-<!ELEMENT table:database-source-table EMPTY>
-<!ATTLIST table:database-source-table
- table:database-name CDATA #REQUIRED
- table:table-name CDATA #REQUIRED
->
-<!ELEMENT table:database-source-query EMPTY>
-<!ATTLIST table:database-source-query
- table:database-name CDATA #REQUIRED
- table:query-name CDATA #REQUIRED
->
-
-<!ELEMENT table:sort (table:sort-by)+>
-<!ATTLIST table:sort
- table:bind-styles-to-content %boolean; "true"
- table:target-range-address %cell-range-address; #IMPLIED
- table:case-sensitive %boolean; "false"
- table:language CDATA #IMPLIED
- table:country CDATA #IMPLIED
- table:algorithm CDATA #IMPLIED
->
-<!ELEMENT table:sort-by EMPTY>
-<!ATTLIST table:sort-by
- table:field-number %nonNegativeInteger; #REQUIRED
- table:data-type (text | number | automatic | qname-but-not-ncname) "automatic"
- table:order (ascending | descending) "ascending"
->
-
-<!ELEMENT table:subtotal-rules (table:sort-groups? | table:subtotal-rule*)?>
-<!ATTLIST table:subtotal-rules
- table:bind-styles-to-content %boolean; "true"
- table:case-sensitive %boolean; "false"
- table:page-breaks-on-group-change %boolean; "false"
->
-<!ELEMENT table:sort-groups EMPTY>
-<!ATTLIST table:sort-groups
- table:data-type (text | number | automatic | qname-but-not-ncname) "automatic"
- table:order (ascending | descending) "ascending"
->
-<!ELEMENT table:subtotal-rule (table:subtotal-field)*>
-<!ATTLIST table:subtotal-rule
- table:group-by-field-number %nonNegativeInteger; #REQUIRED
->
-<!ELEMENT table:subtotal-field EMPTY>
-<!ATTLIST table:subtotal-field
- table:field-number %nonNegativeInteger; #REQUIRED
- table:function CDATA #REQUIRED
->
-
-<!ELEMENT table:data-pilot-tables (table:data-pilot-table)*>
-<!ELEMENT table:data-pilot-table ((table:database-source-sql | table:database-source-table | table:database-source-query | table:source-service | table:source-cell-range)?, table:data-pilot-field+)>
-<!ATTLIST table:data-pilot-table
- table:name CDATA #REQUIRED
- table:application-data CDATA #IMPLIED
- table:grand-total (none | row | column | both) "both"
- table:ignore-empty-rows %boolean; "false"
- table:identify-categories %boolean; "false"
- table:target-range-address %cell-range-address; #REQUIRED
- table:buttons %cell-range-address-list; #REQUIRED
->
-<!ELEMENT table:source-service EMPTY>
-<!ATTLIST table:source-service
- table:name CDATA #REQUIRED
- table:source-name CDATA #REQUIRED
- table:object-name CDATA #REQUIRED
- table:username CDATA #IMPLIED
- table:password CDATA #IMPLIED
->
-<!ELEMENT table:source-cell-range (table:filter)?>
-<!ATTLIST table:source-cell-range
- table:cell-range-address %cell-range-address; #REQUIRED
->
-<!ELEMENT table:data-pilot-field (table:data-pilot-level)?>
-<!ATTLIST table:data-pilot-field
- table:source-field-name CDATA #REQUIRED
- table:is-data-layout-field %boolean; "false"
- table:function CDATA #REQUIRED
- table:orientation (row | column | data | page | hidden) #REQUIRED
- table:used-hierarchy %positiveInteger; "1"
->
-<!ELEMENT table:data-pilot-level (table:data-pilot-subtotals?, table:data-pilot-members?)>
-<!ATTLIST table:data-pilot-level
- table:display-empty %boolean; #IMPLIED
->
-<!ELEMENT table:data-pilot-subtotals (table:data-pilot-subtotal)*>
-<!ELEMENT table:data-pilot-subtotal EMPTY>
-<!ATTLIST table:data-pilot-subtotal
- table:function CDATA #REQUIRED
->
-<!ELEMENT table:data-pilot-members (table:data-pilot-member)*>
-<!ELEMENT table:data-pilot-member EMPTY>
-<!ATTLIST table:data-pilot-member
- table:name CDATA #REQUIRED
- table:display %boolean; #IMPLIED
- table:display-details %boolean; #IMPLIED
->
-
-<!ELEMENT table:consolidation EMPTY>
-<!ATTLIST table:consolidation
- table:function CDATA #REQUIRED
- table:source-cell-range-addresses %cell-range-address-list; #REQUIRED
- table:target-cell-address %cell-address; #REQUIRED
- table:use-label (none | column | row | both) "none"
- table:link-to-source-data %boolean; "false"
->
-
-<!ELEMENT table:dde-links (table:dde-link)+>
-<!ELEMENT table:dde-link (office:dde-source, table:table)>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/text.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/text.mod
deleted file mode 100755
index 792b0fdde55e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/results/baseline/xml-base/text.mod
+++ /dev/null
@@ -1,1099 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % fields "text:date |
- text:time |
- text:page-number |
- text:page-continuation |
- text:sender-firstname |
- text:sender-lastname |
- text:sender-initials |
- text:sender-title |
- text:sender-position |
- text:sender-email |
- text:sender-phone-private |
- text:sender-fax |
- text:sender-company |
- text:sender-phone-work |
- text:sender-street |
- text:sender-city |
- text:sender-postal-code |
- text:sender-country |
- text:sender-state-or-province |
- text:author-name |
- text:author-initials |
- text:placeholder |
- text:variable-set |
- text:variable-get |
- text:variable-input |
- text:user-field-get |
- text:user-field-input |
- text:sequence |
- text:expression |
- text:text-input |
- text:database-display |
- text:database-next |
- text:database-row-select |
- text:database-row-number |
- text:database-name |
- text:initial-creator |
- text:creation-date |
- text:creation-time |
- text:description |
- text:user-defined |
- text:print-time |
- text:print-date |
- text:printed-by |
- text:title |
- text:subject |
- text:keywords |
- text:editing-cycles |
- text:editing-duration |
- text:modification-time |
- text:modification-date |
- text:creator |
- text:conditional-text |
- text:hidden-text |
- text:hidden-paragraph |
- text:chapter |
- text:file-name |
- text:template-name |
- text:set-page-variable |
- text:get-page-variable |
- text:execute-macro |
- text:dde-connection |
- text:reference-ref |
- text:sequence-ref |
- text:bookmark-ref |
- text:footnote-ref |
- text:endnote-ref |
- text:sheet-name |
- text:bibliography-mark |
- text:page-count |
- text:paragraph-count |
- text:word-count |
- text:character-count |
- text:table-count |
- text:image-count |
- text:object-count |
- office:annotation |
- text:script |
- text:measure" >
-
-<!ENTITY % inline-text "(#PCDATA|
- text:span|text:tab-stop|text:s|text:line-break|
- text:footnote|text:endnote|text:a|
- text:bookmark|text:bookmark-start|text:bookmark-end|
- text:reference-mark|text:reference-mark-start|
- text:reference-mark-end|%fields;|%shape;|
- text:toc-mark-start | text:toc-mark-end |
- text:toc-mark | text:user-index-mark-start |
- text:user-index-mark-end | text:user-index-mark |
- text:alphabetical-index-mark-start |
- text:alphabetical-index-mark-end |
- text:alphabetical-index-mark |
- %change-marks; | draw:a | text:ruby)*">
-
-<!ELEMENT text:p %inline-text;>
-<!ELEMENT text:h %inline-text;>
-
-<!ATTLIST text:p text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:p text:cond-style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:h text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:h text:cond-style-name %styleName; #IMPLIED>
-<!ATTLIST text:h text:level %positiveInteger; "1">
-
-<!ELEMENT text:span %inline-text;>
-<!ATTLIST text:span text:style-name %styleName; #REQUIRED>
-
-<!ELEMENT text:a %inline-text;>
-<!ATTLIST text:a xlink:href %uriReference; #REQUIRED>
-<!ATTLIST text:a xlink:type (simple) #FIXED "simple">
-<!ATTLIST text:a xlink:actuate (onRequest) "onRequest">
-<!ATTLIST text:a xlink:show (new|replace) "replace">
-<!ATTLIST text:a office:name %string; #IMPLIED>
-<!ATTLIST text:a office:target-frame-name %string; #IMPLIED>
-<!ATTLIST text:a text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:a text:visited-style-name %styleName; #IMPLIED>
-
-
-<!ELEMENT text:s EMPTY>
-<!ATTLIST text:s text:c %positiveInteger; "1">
-
-<!ELEMENT text:tab-stop EMPTY>
-
-<!ELEMENT text:line-break EMPTY>
-
-
-<!ENTITY % list-items "((text:list-header,text:list-item*)|text:list-item+)">
-<!ELEMENT text:ordered-list %list-items;>
-<!ELEMENT text:unordered-list %list-items;>
-
-
-<!ATTLIST text:ordered-list text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:unordered-list text:style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:ordered-list text:continue-numbering %boolean; "false">
-
-<!ELEMENT text:list-header (text:p)+>
-<!ELEMENT text:list-item (text:p|text:ordered-list|text:unordered-list)+>
-
-<!ATTLIST text:list-item text:restart-numbering %boolean; "false">
-<!ATTLIST text:list-item text:start-value %positiveInteger; #IMPLIED>
-
-<!ELEMENT text:list-style (text:list-level-style-number|
- text:list-level-style-bullet|
- text:list-level-style-image)+>
-
-<!ATTLIST text:list-style style:name %styleName; #IMPLIED>
-
-<!ATTLIST text:list-style text:consecutive-numbering %boolean; "false">
-
-
-<!ELEMENT text:list-level-style-number (style:properties?)>
-
-<!ATTLIST text:list-level-style-number text:level %positiveInteger;
- #REQUIRED>
-<!ATTLIST text:list-level-style-number text:style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:list-level-style-number style:num-format %string; #REQUIRED>
-<!ATTLIST text:list-level-style-number style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:list-level-style-number style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:list-level-style-number style:num-letter-sync %boolean;
- "false">
-<!ATTLIST text:list-level-style-number text:display-levels %positiveInteger;
- "1">
-<!ATTLIST text:list-level-style-number text:start-value %positiveInteger;
- "1">
-<!ELEMENT text:list-level-style-bullet (style:properties?)>
-
-<!ATTLIST text:list-level-style-bullet text:level %positiveInteger; #REQUIRED>
-<!ATTLIST text:list-level-style-bullet text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:list-level-style-bullet text:bullet-char %character; #REQUIRED>
-<!ATTLIST text:list-level-style-bullet style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:list-level-style-bullet style:num-suffix %string; #IMPLIED>
-
-<!ELEMENT text:list-level-style-image (style:properties?,office:binary-data?)>
-
-<!ATTLIST text:list-level-style-image text:level %positiveInteger; #REQUIRED>
-<!ATTLIST text:list-level-style-image xlink:type (simple) #IMPLIED>
-<!ATTLIST text:list-level-style-image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST text:list-level-style-image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST text:list-level-style-image xlink:show (embed) #IMPLIED>
-
-
-<!-- list properties -->
-<!ATTLIST style:properties text:space-before %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties text:min-label-width %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties text:min-label-distance %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties text:enable-numbering %boolean; #IMPLIED>
-<!ATTLIST style:properties style:list-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:outline-style (text:outline-level-style)+>
-
-<!ELEMENT text:outline-level-style (style:properties?)>
-
-<!ATTLIST text:outline-level-style text:level %positiveInteger;
- #REQUIRED>
-<!ATTLIST text:outline-level-style text:style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:outline-level-style style:num-format %string; #REQUIRED>
-<!ATTLIST text:outline-level-style style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:outline-level-style style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:outline-level-style style:num-letter-sync %boolean;
- "false">
-<!ATTLIST text:outline-level-style text:display-levels %positiveInteger;
- "1">
-<!ATTLIST text:outline-level-style text:start-value %positiveInteger;
- "1">
-
-<!ENTITY % field-declarations "text:variable-decls?,
- text:user-field-decls?,
- text:sequence-decls?">
-
-<!ENTITY % variableName "CDATA">
-
-<!ENTITY % formula "CDATA">
-
-<!ENTITY % valueAttr "text:value-type %valueType; #REQUIRED">
-
-<!ENTITY % valueAndTypeAttr "%valueAttr;
- text:value %float; #IMPLIED
- text:date-value %date; #IMPLIED
- text:time-value %timeInstance; #IMPLIED
- text:boolean-value %boolean; #IMPLIED
- text:string-value %string; #IMPLIED
- text:currency CDATA #IMPLIED" >
-
-<!ENTITY % numFormat 'style:num-format CDATA #IMPLIED
- style:num-letter-sync %boolean; "false"'>
-
-
-<!ELEMENT text:date (#PCDATA)>
-<!ATTLIST text:date text:date-value %date; #IMPLIED>
-<!ATTLIST text:date text:date-adjust %dateDuration; #IMPLIED>
-<!ATTLIST text:date text:fixed %boolean; "false">
-<!ATTLIST text:date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:time (#PCDATA)>
-<!ATTLIST text:time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:time text:time-adjust %timeDuration; #IMPLIED>
-<!ATTLIST text:time text:fixed %boolean; "false">
-<!ATTLIST text:time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:page-number (#PCDATA)>
-<!ATTLIST text:page-number text:page-adjust %positiveInteger; #IMPLIED>
-<!ATTLIST text:page-number text:select-page (previous|current|next) "current">
-<!ATTLIST text:page-number %numFormat;>
-
-<!ELEMENT text:page-continuation (#PCDATA)>
-<!ATTLIST text:page-continuation text:select-page (previous|next) #REQUIRED>
-<!ATTLIST text:page-continuation text:string-value %string; #IMPLIED>
-
-<!ELEMENT text:sender-firstname (#PCDATA)>
-<!ATTLIST text:sender-firstname text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-lastname (#PCDATA)>
-<!ATTLIST text:sender-lastname text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-initials (#PCDATA)>
-<!ATTLIST text:sender-initials text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-title (#PCDATA)>
-<!ATTLIST text:sender-title text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-position (#PCDATA)>
-<!ATTLIST text:sender-position text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-email (#PCDATA)>
-<!ATTLIST text:sender-email text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-phone-private (#PCDATA)>
-<!ATTLIST text:sender-phone-private text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-fax (#PCDATA)>
-<!ATTLIST text:sender-fax text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-company (#PCDATA)>
-<!ATTLIST text:sender-company text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-phone-work (#PCDATA)>
-<!ATTLIST text:sender-phone-work text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-street (#PCDATA)>
-<!ATTLIST text:sender-street text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-city (#PCDATA)>
-<!ATTLIST text:sender-city text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-postal-code (#PCDATA)>
-<!ATTLIST text:sender-postal-code text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-country (#PCDATA)>
-<!ATTLIST text:sender-country text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-state-or-province (#PCDATA)>
-<!ATTLIST text:sender-state-or-province text:fixed %boolean; "true">
-
-<!ELEMENT text:author-name (#PCDATA)>
-<!ATTLIST text:author-name text:fixed %boolean; "true">
-
-<!ELEMENT text:author-initials (#PCDATA)>
-<!ATTLIST text:author-initials text:fixed %boolean; "true">
-
-<!ELEMENT text:placeholder (#PCDATA)>
-<!ATTLIST text:placeholder text:placeholder-type (text|table|text-box|image|object) #REQUIRED>
-<!ATTLIST text:placeholder text:description %string; #IMPLIED>
-
-<!ELEMENT text:variable-decls (text:variable-decl)*>
-
-<!ELEMENT text:variable-decl EMPTY>
-<!ATTLIST text:variable-decl text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-decl %valueAndTypeAttr;>
-
-<!ELEMENT text:variable-set (#PCDATA)>
-<!ATTLIST text:variable-set text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-set text:formula %formula; #IMPLIED>
-<!ATTLIST text:variable-set %valueAndTypeAttr;>
-<!ATTLIST text:variable-set text:display (value|none) "value">
-<!ATTLIST text:variable-set style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:variable-get (#PCDATA)>
-<!ATTLIST text:variable-get text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-get text:display (value|formula) "value">
-<!ATTLIST text:variable-get style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:variable-input (#PCDATA)>
-<!ATTLIST text:variable-input text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-input text:description %string; #IMPLIED>
-<!ATTLIST text:variable-input %valueAndTypeAttr;>
-<!ATTLIST text:variable-input text:display (value|none) "value">
-<!ATTLIST text:variable-input style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:user-field-decls (text:user-field-decl)*>
-
-<!ELEMENT text:user-field-decl EMPTY>
-<!ATTLIST text:user-field-decl text:name %variableName; #REQUIRED>
-<!ATTLIST text:user-field-decl text:formula %formula; #IMPLIED>
-<!ATTLIST text:user-field-decl %valueAndTypeAttr;>
-
-<!ELEMENT text:user-field-get (#PCDATA)>
-<!ATTLIST text:user-field-get text:name %variableName; #REQUIRED>
-<!ATTLIST text:user-field-get text:display (value|formula|none) "value">
-<!ATTLIST text:user-field-get style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:user-field-input (#PCDATA)>
-<!ATTLIST text:user-field-input text:name %variableName; #REQUIRED>
-<!ATTLIST text:user-field-input text:description %string; #IMPLIED>
-<!ATTLIST text:user-field-input style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:sequence-decls (text:sequence-decl)*>
-
-<!ELEMENT text:sequence-decl EMPTY>
-<!ATTLIST text:sequence-decl text:name %variableName; #REQUIRED>
-<!ATTLIST text:sequence-decl text:display-outline-level %positiveInteger; "0">
-<!ATTLIST text:sequence-decl text:separation-character %character; ".">
-
-<!ELEMENT text:sequence (#PCDATA)>
-<!ATTLIST text:sequence text:name %variableName; #REQUIRED>
-<!ATTLIST text:sequence text:formula %formula; #IMPLIED>
-<!ATTLIST text:sequence %numFormat;>
-<!ATTLIST text:sequence text:ref-name ID #IMPLIED>
-
-<!ELEMENT text:expression (#PCDATA)>
-<!ATTLIST text:expression text:formula %formula; #IMPLIED>
-<!ATTLIST text:expression text:display (value|formula ) "value">
-<!ATTLIST text:expression %valueAndTypeAttr;>
-<!ATTLIST text:expression style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:text-input (#PCDATA)>
-<!ATTLIST text:text-input text:description %string; #IMPLIED>
-
-<!ENTITY % database-table "text:database-name CDATA #REQUIRED
- text:table-name CDATA #REQUIRED">
-
-<!ELEMENT text:database-display (#PCDATA)>
-<!ATTLIST text:database-display %database-table;>
-<!ATTLIST text:database-display text:column-name %string; #REQUIRED>
-<!ATTLIST text:database-display style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:database-next (#PCDATA)>
-<!ATTLIST text:database-next %database-table;>
-<!ATTLIST text:database-next text:condition %formula; #IMPLIED>
-
-<!ELEMENT text:database-row-select (#PCDATA)>
-<!ATTLIST text:database-row-select %database-table;>
-<!ATTLIST text:database-row-select text:condition %formula; #IMPLIED>
-<!ATTLIST text:database-row-select text:row-number %integer; #REQUIRED>
-
-<!ELEMENT text:database-row-number (#PCDATA)>
-<!ATTLIST text:database-row-number %database-table;>
-<!ATTLIST text:database-row-number %numFormat;>
-<!ATTLIST text:database-row-number text:value %integer; #IMPLIED>
-
-<!ELEMENT text:database-name (#PCDATA)>
-<!ATTLIST text:database-name %database-table;>
-
-<!ELEMENT text:initial-creator (#PCDATA)>
-<!ATTLIST text:initial-creator text:fixed %boolean; "false">
-
-<!ELEMENT text:creation-date (#PCDATA)>
-<!ATTLIST text:creation-date text:fixed %boolean; "false">
-<!ATTLIST text:creation-date text:date-value %date; #IMPLIED>
-<!ATTLIST text:creation-date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:creation-time (#PCDATA)>
-<!ATTLIST text:creation-time text:fixed %boolean; "false">
-<!ATTLIST text:creation-time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:creation-time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:description (#PCDATA)>
-<!ATTLIST text:description text:fixed %boolean; "false">
-
-<!ELEMENT text:user-defined (#PCDATA)>
-<!ATTLIST text:user-defined text:fixed %boolean; "false">
-<!ATTLIST text:user-defined text:name %string; #REQUIRED>
-
-<!ELEMENT text:print-time (#PCDATA)>
-<!ATTLIST text:print-time text:fixed %boolean; "false">
-<!ATTLIST text:print-time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:print-time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:print-date (#PCDATA)>
-<!ATTLIST text:print-date text:fixed %boolean; "false">
-<!ATTLIST text:print-date text:date-value %date; #IMPLIED>
-<!ATTLIST text:print-date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:printed-by (#PCDATA)>
-<!ATTLIST text:printed-by text:fixed %boolean; "false">
-
-<!ELEMENT text:title (#PCDATA)>
-<!ATTLIST text:title text:fixed %boolean; "false">
-
-<!ELEMENT text:subject (#PCDATA)>
-<!ATTLIST text:subject text:fixed %boolean; "false">
-
-<!ELEMENT text:keywords (#PCDATA)>
-<!ATTLIST text:keywords text:fixed %boolean; "false">
-
-<!ELEMENT text:editing-cycles (#PCDATA)>
-<!ATTLIST text:editing-cycles text:fixed %boolean; "false">
-
-<!ELEMENT text:editing-duration (#PCDATA)>
-<!ATTLIST text:editing-duration text:fixed %boolean; "false">
-<!ATTLIST text:editing-duration text:duration %timeDuration; #IMPLIED>
-<!ATTLIST text:editing-duration style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:modification-time (#PCDATA)>
-<!ATTLIST text:modification-time text:fixed %boolean; "false">
-<!ATTLIST text:modification-time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:modification-time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:modification-date (#PCDATA)>
-<!ATTLIST text:modification-date text:fixed %boolean; "false">
-<!ATTLIST text:modification-date text:date-value %date; #IMPLIED>
-<!ATTLIST text:modification-date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:creator (#PCDATA)>
-<!ATTLIST text:creator text:fixed %boolean; "false">
-
-<!ELEMENT text:conditional-text (#PCDATA)>
-<!ATTLIST text:conditional-text text:condition %formula; #REQUIRED>
-<!ATTLIST text:conditional-text text:string-value-if-false %string; #REQUIRED>
-<!ATTLIST text:conditional-text text:string-value-if-true %string; #REQUIRED>
-<!ATTLIST text:conditional-text text:current-value %boolean; "false">
-
-<!ELEMENT text:hidden-text (#PCDATA)>
-<!ATTLIST text:hidden-text text:condition %formula; #REQUIRED>
-<!ATTLIST text:hidden-text text:string-value %string; #REQUIRED>
-<!ATTLIST text:hidden-text text:is-hidden %boolean; "false">
-
-<!ELEMENT text:hidden-paragraph EMPTY>
-<!ATTLIST text:hidden-paragraph text:condition %formula; #REQUIRED>
-<!ATTLIST text:hidden-paragraph text:is-hidden %boolean; "false">
-
-<!ELEMENT text:chapter (#PCDATA)>
-<!ATTLIST text:chapter text:display (name|number|number-and-name|
- plain-number-and-name|plain-number)
- "number-and-name">
-<!ATTLIST text:chapter text:outline-level %integer; "1">
-
-<!ELEMENT text:file-name (#PCDATA)>
-<!ATTLIST text:file-name text:display (full|path|name|name-and-extension)
- "full">
-<!ATTLIST text:file-name text:fixed %boolean; "false">
-
-<!ELEMENT text:template-name (#PCDATA)>
-<!ATTLIST text:template-name text:display (full|path|name|name-and-extension|
- area|title) "full">
-
-<!ELEMENT text:set-page-variable EMPTY>
-<!ATTLIST text:set-page-variable text:active %boolean; "true">
-<!ATTLIST text:set-page-variable text:page-adjust %integer; "0">
-
-<!ELEMENT text:get-page-variable (#PCDATA)>
-<!ATTLIST text:get-page-variable %numFormat;>
-
-<!ELEMENT text:execute-macro (#PCDATA|office:events)* >
-<!ATTLIST text:execute-macro text:description %string; #IMPLIED>
-
-
-<!ELEMENT text:dde-connection-decls (text:dde-connection-decl)*>
-
-<!ELEMENT text:dde-connection-decl EMPTY>
-<!ATTLIST text:dde-connection-decl text:name %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:dde-application %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:dde-topic %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:dde-item %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:automatic-update %boolean; "false">
-
-<!ELEMENT text:dde-connection (#PCDATA)>
-<!ATTLIST text:dde-connection text:connection-name %string; #REQUIRED>
-
-<!ELEMENT text:reference-ref (#PCDATA)>
-<!ATTLIST text:reference-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:reference-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:sequence-ref (#PCDATA)>
-<!ATTLIST text:sequence-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:sequence-ref text:reference-format (page|chapter|text|direction|category-and-value|caption|value) #IMPLIED>
-
-<!ELEMENT text:bookmark-ref (#PCDATA)>
-<!ATTLIST text:bookmark-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:bookmark-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:footnote-ref (#PCDATA)>
-<!ATTLIST text:footnote-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:footnote-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:endnote-ref (#PCDATA)>
-<!ATTLIST text:endnote-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:endnote-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:sheet-name (#PCDATA)>
-
-<!ELEMENT text:page-count (#PCDATA)>
-<!ATTLIST text:page-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:page-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:paragraph-count (#PCDATA)>
-<!ATTLIST text:paragraph-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:paragraph-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:word-count (#PCDATA)>
-<!ATTLIST text:word-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:word-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:character-count (#PCDATA)>
-<!ATTLIST text:character-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:character-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:table-count (#PCDATA)>
-<!ATTLIST text:table-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:table-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:image-count (#PCDATA)>
-<!ATTLIST text:image-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:image-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:object-count (#PCDATA)>
-<!ATTLIST text:object-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:object-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:bibliography-mark (#PCDATA)>
-<!ATTLIST text:bibliography-mark text:bibiliographic-type
- ( article | book | booklet | conference | custom1 | custom2 | custom3 |
- custom4 | custom5 | email | inbook | incollection | inproceedings |
- journal | manual | mastersthesis | misc | phdthesis | proceedings |
- techreport | unpublished | www ) #REQUIRED >
-<!ATTLIST text:bibliography-mark text:identifier CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:address CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:annote CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:author CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:booktitle CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:chapter CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:edition CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:editor CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:howpublished CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:institution CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:journal CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:month CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:note CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:number CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:organizations CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:pages CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:publisher CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:school CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:series CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:title CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:report-type CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:volume CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:year CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:url CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom1 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom2 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom3 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom4 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom5 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:isbn CDATA #IMPLIED>
-
-
-<!ELEMENT text:bookmark EMPTY>
-<!ATTLIST text:bookmark text:name CDATA #REQUIRED>
-
-<!ELEMENT text:bookmark-start EMPTY>
-<!ATTLIST text:bookmark-start text:name CDATA #REQUIRED>
-
-<!ELEMENT text:bookmark-end EMPTY>
-<!ATTLIST text:bookmark-end text:name CDATA #REQUIRED>
-
-<!ELEMENT text:reference-mark EMPTY>
-<!ATTLIST text:reference-mark text:name CDATA #REQUIRED>
-
-<!ELEMENT text:reference-mark-start EMPTY>
-<!ATTLIST text:reference-mark-start text:name CDATA #REQUIRED>
-
-<!ELEMENT text:reference-mark-end EMPTY>
-<!ATTLIST text:reference-mark-end text:name CDATA #REQUIRED>
-
-<!ELEMENT text:footnotes-configuration (text:footnote-continuation-notice-forward?,text:footnote-continuation-notice-backward?)>
-<!ATTLIST text:footnotes-configuration style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration style:num-format %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration style:num-letter-sync %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:citation-body-style-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:citation-style-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:default-style-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:master-page-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:start-value %integer; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:footnotes-position (document|page) "page">
-<!ATTLIST text:footnotes-configuration text:start-numbering-at (document|chapter|page) "document">
-
-<!ELEMENT text:footnote-continuation-notice-forward (#PCDATA)>
-<!ELEMENT text:footnote-continuation-notice-backward (#PCDATA)>
-
-<!ELEMENT text:endnotes-configuration EMPTY>
-<!ATTLIST text:endnotes-configuration style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration style:num-format %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration style:num-letter-sync %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:start-value %integer; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:citation-style-name %styleName; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:citation-body-style-name %styleName; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:default-style-name %styleName; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:master-page-name %styleName; #IMPLIED>
-
-<!-- Validity constraint: text:footnote and text:endnote elements may not
- contain other text:footnote or text:endnote elements, even though the DTD
- allows this (via the %text; in the foot-/endnote-body).
- Unfortunatetly, this constraint cannot be easily specified in the DTD.
--->
-<!ELEMENT text:footnote (text:footnote-citation, text:footnote-body)>
-<!ATTLIST text:footnote text:id ID #IMPLIED>
-
-<!ELEMENT text:footnote-citation (#PCDATA)>
-<!ATTLIST text:footnote-citation text:label %string; #IMPLIED>
-
-<!ELEMENT text:footnote-body (text:h|text:p|
- text:ordered-list|text:unordered-list)*>
-
-<!ELEMENT text:endnote (text:endnote-citation, text:endnote-body)>
-<!ATTLIST text:endnote text:id ID #IMPLIED>
-
-<!ELEMENT text:endnote-citation (#PCDATA)>
-<!ATTLIST text:endnote-citation text:label %string; #IMPLIED>
-
-<!ELEMENT text:endnote-body (text:h|text:p|
- text:ordered-list|text:unordered-list)*>
-
-<!ENTITY % sectionText "(text:h|text:p|text:ordered-list|
- text:unordered-list|table:table|chart:chart|draw:page|
- draw:a|draw:text-box|draw:image|text:section|
- text:table-of-content|text:illustration-index|
- text:table-index|text:object-index|text:user-index|
- text:alphabetical-index|text:bibliography|
- text:index-title|%change-marks;)*">
-
-<!ELEMENT text:section ((text:section-source|office:dde-source)?,
- %sectionText;) >
-
-<!ATTLIST text:section text:name CDATA #REQUIRED>
-<!ATTLIST text:section text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:section text:display (true|none|condition) "true">
-<!ATTLIST text:section text:condition %formula; #IMPLIED>
-<!ATTLIST text:section text:protected %boolean; "false">
-<!ATTLIST text:section text:protection-key CDATA #IMPLIED>
-
-<!ELEMENT text:section-source EMPTY>
-<!ATTLIST text:section-source xlink:href %string; #IMPLIED>
-<!ATTLIST text:section-source xlink:type (simple) #FIXED "simple">
-<!ATTLIST text:section-source xlink:show (embed) #FIXED "embed">
-<!ATTLIST text:section-source text:section-name %string; #IMPLIED>
-<!ATTLIST text:section-source text:filter-name %string; #IMPLIED>
-
-<!ELEMENT text:table-of-content (text:table-of-content-source,
- text:index-body) >
-<!ATTLIST text:table-of-content text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:table-of-content text:protected %boolean; "false">
-
-<!ELEMENT text:table-of-content-source (text:index-title-template? ,
- text:table-of-content-entry-template*,
- text:index-source-styles* ) >
-<!ATTLIST text:table-of-content-source text:outline-level %integer; #IMPLIED>
-<!ATTLIST text:table-of-content-source text:use-index-marks %boolean; "true">
-<!ATTLIST text:table-of-content-source text:use-index-source-styles
- %boolean; "false">
-<!ATTLIST text:table-of-content-source text:index-scope (document|chapter)
- "document">
-<!ATTLIST text:table-of-content-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:table-of-content-source fo:language %string; #IMPLIED>
-<!ATTLIST text:table-of-content-source fo:country %string; #IMPLIED>
-<!ATTLIST text:table-of-content-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:table-of-content-entry-template (text:index-entry-chapter-number |
- text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop |
- text:index-entry-link-start |
- text:index-entry-link-end)* >
-<!ATTLIST text:table-of-content-entry-template text:outline-level
- %integer; #REQUIRED>
-<!ATTLIST text:table-of-content-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:illustration-index
- (text:illustration-index-source, text:index-body)>
-<!ATTLIST text:illustration-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:illustration-index text:protected %boolean; "false">
-
-<!ELEMENT text:illustration-index-source (text:index-title-template?,
- text:illustration-index-entry-template?) >
-<!ATTLIST text:illustration-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:illustration-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:illustration-index-source text:use-caption %boolean; "true">
-<!ATTLIST text:illustration-index-source text:caption-sequence-name
- %string; #IMPLIED>
-<!ATTLIST text:illustration-index-source text:caption-sequence-format
- (text|category-and-value|caption) "text">
-<!ATTLIST text:illustration-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:illustration-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:illustration-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:illustration-index-entry-template
- ( text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:illustration-index-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:table-index (text:table-index-source, text:index-body)>
-<!ATTLIST text:table-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:table-index text:protected %boolean; "false">
-
-<!ELEMENT text:table-index-source (text:index-title-template?,
- text:table-index-entry-template?) >
-<!ATTLIST text:table-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:table-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:table-index-source text:use-caption %boolean; "true">
-<!ATTLIST text:table-index-source text:caption-sequence-name
- %string; #IMPLIED>
-<!ATTLIST text:table-index-source text:caption-sequence-format
- (text|category-and-value|caption) "text">
-<!ATTLIST text:table-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:table-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:table-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:table-index-entry-template ( text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:table-index-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:object-index ( text:object-index-source, text:index-body ) >
-<!ATTLIST text:object-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:object-index text:protected %boolean; "false">
-
-<!ELEMENT text:object-index-source ( text:index-title-template?,
- text:object-index-entry-template? ) >
-<!ATTLIST text:object-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:object-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:object-index-source text:use-spreadsheet-objects
- %boolean; "false">
-<!ATTLIST text:object-index-source text:use-draw-objects %boolean; "false">
-<!ATTLIST text:object-index-source text:use-chart-objects %boolean; "false">
-<!ATTLIST text:object-index-source text:use-other-objects %boolean; "false">
-<!ATTLIST text:object-index-source text:use-math-objects %boolean; "false">
-<!ATTLIST text:object-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:object-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:object-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:object-index-entry-template ( text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:object-index-entry-template text:style-name
- %styleName; #REQUIRED >
-
-<!ELEMENT text:user-index (text:user-index-source, text:index-body) >
-<!ATTLIST text:user-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:user-index text:protected %boolean; "false">
-
-<!ELEMENT text:user-index-source ( text:index-title-template?,
- text:user-index-entry-template*,
- text:index-source-styles* ) >
-<!ATTLIST text:user-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:user-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:user-index-source text:use-index-marks %boolean; "false">
-<!ATTLIST text:user-index-source text:use-graphics %boolean; "false">
-<!ATTLIST text:user-index-source text:use-tables %boolean; "false">
-<!ATTLIST text:user-index-source text:use-floating-frames %boolean; "false">
-<!ATTLIST text:user-index-source text:use-objects %boolean; "false">
-<!ATTLIST text:user-index-source text:use-index-source-styles
- %boolean; "false">
-<!ATTLIST text:user-index-source text:copy-outline-level %boolean; "false">
-<!ATTLIST text:user-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:user-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:user-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:user-index-entry-template ( text:index-entry-chapter |
- text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:user-index-entry-template text:outline-level %integer; #REQUIRED>
-<!ATTLIST text:user-index-entry-template text:style-name %styleName; #REQUIRED>
-
-<!ELEMENT text:alphabetical-index (text:alphabetical-index-source,
- text:index-body)>
-<!ATTLIST text:alphabetical-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:alphabetical-index text:protected %boolean; "false">
-
-<!ELEMENT text:alphabetical-index-source ( text:index-title-template?,
- text:alphabetical-index-entry-template* ) >
-<!ATTLIST text:alphabetical-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:alphabetical-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:alphabetical-index-source text:ignore-case %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:main-entry-style-name
- %styleName; #IMPLIED>
-<!ATTLIST text:alphabetical-index-source text:alphabetical-separators
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:combine-entries
- %boolean; "true">
-<!ATTLIST text:alphabetical-index-source text:combine-entries-with-dash
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:combine-entries-with-pp
- %boolean; "true">
-<!ATTLIST text:alphabetical-index-source text:use-keys-as-entries
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:capitalize-entries
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:comma-separated
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:alphabetical-index-entry-template ( text:index-entry-chapter |
- text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:alphabetical-index-entry-template text:outline-level
- (1|2|3|separator) #REQUIRED>
-<!ATTLIST text:alphabetical-index-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:alphabetical-index-auto-mark-file EMPTY>
-<!ATTLIST text:alphabetical-index-auto-mark-file xlink:href CDATA #IMPLIED>
-<!ATTLIST text:alphabetical-index-auto-mark-file xlink:type (simple) #FIXED "simple">
-
-<!ELEMENT text:bibliography (text:bibliography-source, text:index-body) >
-<!ATTLIST text:bibliography text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:bibliography text:protected %boolean; "false">
-
-<!ELEMENT text:bibliography-source ( text:index-title-template?,
- text:bibliography-entry-template* ) >
-
-<!ELEMENT text:bibliography-entry-template ( text:index-entry-span |
- text:index-entry-tab-stop |
- text:index-entry-bibliography )* >
-<!ATTLIST text:bibliography-entry-template text:bibliography-type
- ( article | book | booklet | conference | custom1 | custom2 |
- custom3 | custom4 | custom5 | email | inbook | incollection |
- inproceedings | journal | manual | mastersthesis | misc |
- phdthesis | proceedings | techreport | unpublished | www )
- #REQUIRED >
-<!ATTLIST text:bibliography-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:index-body %sectionText; >
-
-<!--
-Validity constraint: text:index-title elements may appear only in
-indices, and there may be only one text:index-title element.
--->
-<!ELEMENT text:index-title %sectionText; >
-<!ATTLIST text:index-title text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-title text:name %string; #IMPLIED>
-
-<!ELEMENT text:index-title-template (#PCDATA)>
-<!ATTLIST text:index-title-template text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-chapter-number EMPTY>
-<!ATTLIST text:index-entry-chapter-number text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-chapter EMPTY>
-<!ATTLIST text:index-entry-chapter text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-entry-chapter text:display (name|number|number-and-name)
- "number-and-name" >
-
-<!ELEMENT text:index-entry-text EMPTY>
-<!ATTLIST text:index-entry-text text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-page-number EMPTY>
-<!ATTLIST text:index-entry-page-number text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-span (#PCDATA)>
-<!ATTLIST text:index-entry-span text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-bibliography EMPTY>
-<!ATTLIST text:index-entry-bibliography text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-entry-bibliography text:bibliography-data-field
- ( address | annote | author | bibiliographic_type |
- booktitle | chapter | custom1 | custom2 |
- custom3 | custom4 | custom5 | edition | editor |
- howpublished | identifier | institution | isbn |
- journal | month | note | number | organizations |
- pages | publisher | report_type | school |
- series | title | url | volume | year ) #REQUIRED>
-
-
-<!ELEMENT text:index-entry-tab-stop EMPTY>
-<!ATTLIST text:index-entry-tab-stop text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-entry-tab-stop style:leader-char %character; " ">
-<!ATTLIST text:index-entry-tab-stop style:type (left|right) "left">
-<!ATTLIST text:index-entry-tab-stop style:position %length; #IMPLIED>
-
-<!ELEMENT text:index-entry-link-start EMPTY>
-<!ATTLIST text:index-entry-link-start text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-link-end EMPTY>
-<!ATTLIST text:index-entry-link-end text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-source-styles (text:index-source-style)*>
-<!ATTLIST text:index-source-styles text:outline-level %integer; #REQUIRED>
-
-<!ELEMENT text:index-source-style EMPTY>
-<!ATTLIST text:index-source-style text:style-name %styleName; #REQUIRED>
-
-<!ELEMENT text:toc-mark-start EMPTY>
-<!ATTLIST text:toc-mark-start text:id %string; #REQUIRED>
-<!ATTLIST text:toc-mark-start text:outline-level %integer; #IMPLIED>
-
-<!ELEMENT text:toc-mark-end EMPTY>
-<!ATTLIST text:toc-mark-end text:id %string; #REQUIRED>
-
-<!ELEMENT text:toc-mark EMPTY>
-<!ATTLIST text:toc-mark text:string-value %string; #REQUIRED>
-<!ATTLIST text:toc-mark text:outline-level %integer; #IMPLIED>
-
-<!ELEMENT text:user-index-mark-start EMPTY>
-<!ATTLIST text:user-index-mark-start text:id %string; #REQUIRED>
-<!ATTLIST text:user-index-mark-start text:outline-level %integer; #IMPLIED>
-<!ATTLIST text:user-index-mark-start text:index-name %string; #IMPLIED>
-
-<!ELEMENT text:user-index-mark-end EMPTY>
-<!ATTLIST text:user-index-mark-end text:id %string; #REQUIRED>
-
-<!ELEMENT text:user-index-mark EMPTY>
-<!ATTLIST text:user-index-mark text:string-value %string; #REQUIRED>
-<!ATTLIST text:user-index-mark text:outline-level %integer; #IMPLIED>
-<!ATTLIST text:user-index-mark text:index-name %string; #IMPLIED>
-
-<!ELEMENT text:alphabetical-index-mark-start EMPTY>
-<!ATTLIST text:alphabetical-index-mark-start text:id %string; #REQUIRED>
-<!ATTLIST text:alphabetical-index-mark-start text:key1 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark-start text:key2 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark-start text:main-etry %boolean; "false">
-
-<!ELEMENT text:alphabetical-index-mark-end EMPTY>
-<!ATTLIST text:alphabetical-index-mark-end text:id %string; #REQUIRED>
-
-<!ELEMENT text:alphabetical-index-mark EMPTY>
-<!ATTLIST text:alphabetical-index-mark text:string-value %string; #REQUIRED>
-<!ATTLIST text:alphabetical-index-mark text:key1 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark text:key2 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark text:main-etry %boolean; "false">
-
-<!ELEMENT text:bibliography-configuration (text:sort-key)*>
-<!ATTLIST text:bibliography-configuration text:prefix %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration text:suffix %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration text:sort-by-position %boolean; "true">
-<!ATTLIST text:bibliography-configuration text:numbered-entries %boolean; "false">
-<!ATTLIST text:bibliography-configuration fo:language %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration fo:country %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:sort-key EMPTY>
-<!ATTLIST text:sort-key text:key ( address | annote | author |
- bibiliographic_type | booktitle | chapter | custom1 | custom2 |
- custom3 | custom4 | custom5 | edition | editor | howpublished |
- identifier | institution | isbn | journal | month | note | number |
- organizations | pages | publisher | report_type | school | series |
- title | url | volume | year ) #REQUIRED>
-<!ATTLIST text:sort-key text:sort-ascending %boolean; "true">
-
-<!ELEMENT text:linenumbering-configuration (text:linenumbering-separator?)>
-<!ATTLIST text:linenumbering-configuration text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:linenumbering-configuration text:number-lines %boolean; "true">
-<!ATTLIST text:linenumbering-configuration text:count-empty-lines %boolean; "true">
-<!ATTLIST text:linenumbering-configuration text:count-in-floating-frames %boolean; "false">
-<!ATTLIST text:linenumbering-configuration text:restart-numbering %boolean; "false">
-<!ATTLIST text:linenumbering-configuration text:offset %nonNegativeLength; #IMPLIED>
-<!ATTLIST text:linenumbering-configuration style:num-format (1|a|A|i|I) "1">
-<!ATTLIST text:linenumbering-configuration style:num-letter-sync %boolean; "false">
-<!ATTLIST text:linenumbering-configuration text:number-position (left|rigth|inner|outer) "left">
-<!ATTLIST text:linenumbering-configuration text:increment %nonNegativeInteger; #IMPLIED>
-
-<!ELEMENT text:linenumbering-separator (#PCDATA)>
-<!ATTLIST text:linenumbering-separator text:increment %nonNegativeInteger; #IMPLIED>
-
-<!ELEMENT text:script (#PCDATA)>
-<!ATTLIST text:script script:language CDATA #REQUIRED>
-<!ATTLIST text:script xlink:href CDATA #IMPLIED>
-<!ATTLIST text:script xlink:type (simple) #FIXED "simple">
-
-<!ELEMENT text:measure (#PCDATA)>
-<!ATTLIST text:measure text:kind (value|unit|gap) #REQUIRED>
-
-<!ELEMENT text:ruby (text:ruby-base, text:ruby-text)>
-<!ATTLIST text:ruby text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:ruby-base %inline-text;>
-
-<!ELEMENT text:ruby-text (#PCDATA)>
-<!ATTLIST text:ruby-text text:style-name %styleName; #IMPLIED>
-
-<!-- elements for change tracking -->
-
-<!ELEMENT text:change EMPTY>
-<!ATTLIST text:change text:change-id CDATA #REQUIRED>
-
-<!ELEMENT text:change-start EMPTY>
-<!ATTLIST text:change-start text:change-id CDATA #REQUIRED>
-
-<!ELEMENT text:change-end EMPTY>
-<!ATTLIST text:change-end text:change-id CDATA #REQUIRED>
-
-<!ELEMENT text:tracked-changes (text:changed-region)*>
-<!ATTLIST text:tracked-changes text:track-changes %boolean; "true">
-<!ATTLIST text:tracked-changes text:protection-key CDATA #IMPLIED>
-
-<!ELEMENT text:changed-region (text:insertion |
- (text:deletion, text:insertion?) |
- text:format-change) >
-<!ATTLIST text:changed-region text:id ID #REQUIRED>
-
-<!ELEMENT text:insertion (office:change-info, %sectionText;)>
-<!ELEMENT text:deletion (office:change-info, %sectionText;)>
-<!ELEMENT text:format-change (office:change-info)>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_animatedgif.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_animatedgif.infile
deleted file mode 100644
index e1e8de3632d0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_animatedgif.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing animated gif conversion
-#
-TEST||QUICKWORD|a_animatedgif
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bolddoc.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bolddoc.infile
deleted file mode 100644
index c545805e37e2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bolddoc.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing bold type conversion
-#
-TEST||QUICKWORD|a_bolddoc
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bookmarks.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bookmarks.infile
deleted file mode 100644
index f350b6acdc18..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bookmarks.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing bookmark conversion
-#
-TEST||QUICKWORD|a_bookmarks
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bulletorderedlist.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bulletorderedlist.infile
deleted file mode 100644
index bd9617d3892a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_bulletorderedlist.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing bullet ordered list conversion
-#
-TEST||QUICKWORD|a_bulletorderedlist
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc-mod.infile
deleted file mode 100644
index 846bb80b44d3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc-mod.infile
+++ /dev/null
@@ -1,9 +0,0 @@
-#testing modification to an empty document conversion
-#
-TEST||QUICKWORD|a_emptydoc-mod
-ENTER_STRING_AT_LOCATION|108|20|New line of text added\n
-ENTER_STRING_AT_LOCATION|108|40|This is 108, 40\n
-ENTER_STRING_AT_LOCATION|150|208|This is 150, 208\n
-ENTER_STRING_AT_LOCATION|150|308|This is 150, 308\n
-
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc.infile
deleted file mode 100644
index ba5eef77ff2e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_emptydoc.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing empty document conversion
-#
-TEST||QUICKWORD|a_emptydoc
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_firstlineindent.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_firstlineindent.infile
deleted file mode 100644
index 31fb962eeb29..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_firstlineindent.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing indent conversion
-#
-TEST||QUICKWORD|a_firstlineindent
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_fontsize.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_fontsize.infile
deleted file mode 100644
index f9a12659ac67..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_fontsize.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing fontsize conversion
-#
-TEST||QUICKWORD|a_fontsize
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading.infile
deleted file mode 100644
index ca580f445cec..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing basic heading conversion
-#
-TEST||QUICKWORD|a_heading
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading1.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading1.infile
deleted file mode 100644
index 4a73d5ead0e2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading1.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing heading1 type conversion
-#
-TEST||QUICKWORD|a_heading1
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading2.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading2.infile
deleted file mode 100644
index 265e2fd1e629..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_heading2.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing heading2 type conversion
-#
-TEST||QUICKWORD|a_heading2
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_hyperlink.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_hyperlink.infile
deleted file mode 100644
index 19fb1fd93f74..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_hyperlink.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing hyperlink conversion
-#
-TEST||QUICKWORD|a_hyperlink
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_justified.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_justified.infile
deleted file mode 100644
index a9f1eee7016b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_justified.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing justified conversion
-#
-TEST||QUICKWORD|a_justified
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linebreaks.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linebreaks.infile
deleted file mode 100644
index ebabb26a691a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linebreaks.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing line break conversion
-#
-TEST||QUICKWORD|a_linebreaks
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linespacing.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linespacing.infile
deleted file mode 100644
index ccb76ed0675f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_linespacing.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing line spacing conversion
-#
-TEST||QUICKWORD|a_linespacing
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_numberorderedlist.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_numberorderedlist.infile
deleted file mode 100644
index 4075e16b0516..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_numberorderedlist.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing number ordered list conversion
-#
-TEST||QUICKWORD|a_numberorderedlist
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_pagebreak.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_pagebreak.infile
deleted file mode 100644
index 10d2f2ceba0a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_pagebreak.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing page break conversion
-#
-TEST||QUICKWORD|a_pagebreak
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_paragraph.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_paragraph.infile
deleted file mode 100644
index c74558b60c7e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_paragraph.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing paragraph conversion
-#
-TEST||QUICKWORD|a_paragraph
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple01.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple01.infile
deleted file mode 100644
index f08c1fa14af1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple01.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# simple01
-TEST|Simple 1|QUICKWORD|a_simple01
-ENTER_STRING_AT_LOCATION|LEFT|TOP|New text added to simple file.\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple02.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple02.infile
deleted file mode 100644
index f56a6b0fe2c3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple02.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# simple02
-TEST|Simple 2|QUICKWORD|a_simple02
-ENTER_STRING_AT_LOCATION|64|20|, including this inserted phrase,
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple03.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple03.infile
deleted file mode 100644
index 3a957ab5e2ea..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple03.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# simple03
-TEST|Simple 3|QUICKWORD|a_simple03
-ENTER_STRING_AT_LOCATION|LEFT|42|This is also in standard style\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple04.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple04.infile
deleted file mode 100644
index 1631885a6d77..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple04.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# simple04
-TEST|Simple 4|QUICKWORD|a_simple04
-ENTER_STRING_AT_LOCATION|66|20|
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple05.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple05.infile
deleted file mode 100644
index 242285797c3b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_simple05.infile
+++ /dev/null
@@ -1,5 +0,0 @@
-# simple05
-TEST|Simple 5|QUICKWORD|a_simple05
-ENTER_STRING_AT_LOCATION|108|20|
-ENTER_STRING_AT_LOCATION|19|20|document uses
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_standard.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_standard.infile
deleted file mode 100644
index c7a6ebf1fcfb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_standard.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing standard conversion
-#
-TEST||QUICKWORD|a_standard
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_subscript.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_subscript.infile
deleted file mode 100644
index d4751de288c1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_subscript.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing subscript conversion
-#
-TEST||QUICKWORD|a_subscript
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_superscript.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_superscript.infile
deleted file mode 100644
index 1233754e9f37..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_superscript.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing superscript conversion
-#
-TEST||QUICKWORD|a_superscript
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_symbols.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_symbols.infile
deleted file mode 100644
index 5a89e15ca22f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_symbols.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing symbol conversion
-#
-TEST||QUICKWORD|a_symbols
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_tab.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_tab.infile
deleted file mode 100644
index 7b5d319fa2a1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_tab.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing tab conversion
-#
-TEST||QUICKWORD|a_tab
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_table.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_table.infile
deleted file mode 100644
index b7d991e7033d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_table.infile
+++ /dev/null
@@ -1,5 +0,0 @@
-#testing table contents conversion
-#
-TEST||QUICKWORD|a_table
-#ENTER_STRING_AT_LOCATION|LEFT|42|This is also in standard style\n
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_textspan.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_textspan.infile
deleted file mode 100644
index 493032299b1e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_textspan.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing textspan conversion
-#
-TEST||QUICKWORD|a_textspan
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_unorderedlist.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_unorderedlist.infile
deleted file mode 100644
index 6990e3ed58e6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_unorderedlist.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing unorderedlist conversion
-#
-TEST||QUICKWORD|a_unorderedlist
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_wordwrap.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_wordwrap.infile
deleted file mode 100644
index 22e5573f29d6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/a_wordwrap.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#testing wordwrapping conversion
-#
-TEST||QUICKWORD|a_wordwrap
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_addition01-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_addition01-mod.infile
deleted file mode 100755
index 17c2293ed6be..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_addition01-mod.infile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-#
-TEST||MINICALC|c_addition
-MINICALC_ENTER_CELL|0|0| 3\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_alignment.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_alignment.infile
deleted file mode 100755
index ae607f2a9ca6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_alignment.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-#
-TEST||MINICALC|c_alignment
-SLEEP|10
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_backwardrange-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_backwardrange-mod.infile
deleted file mode 100755
index 5e869f491f5a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_backwardrange-mod.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Test for backwardrange of spreadsheet - change a value in a set range
-#
-TEST||MINICALC|c_backwardrange
-MINICALC_ENTER_CELL|1|1|=AVERAGE(2;5;5)\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_basic-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_basic-mod.infile
deleted file mode 100755
index a2f1d3c342f8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_basic-mod.infile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# basic spreadsheet round trip conversion no modification
-#
-TEST||MINICALC|c_basic
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_bob-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_bob-mod.infile
deleted file mode 100755
index f868004d1d5e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_bob-mod.infile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-#
-TEST||MINICALC|c_bob
-MINICALC_ENTER_CELL|0|0| 3\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_boolean-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_boolean-mod.infile
deleted file mode 100755
index 2d69bb8cedf0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_boolean-mod.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Spreadsheet - test Boolean entry change.
-#
-TEST||MINICALC|c_boolean
-MINICALC_ENTER_CELL|1|0|TRUE\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellcurrencyvalue.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellcurrencyvalue.infile
deleted file mode 100644
index f58003dedd23..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellcurrencyvalue.infile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# basic spreadsheet with currency format round trip conversion no modification
-#
-TEST||MINICALC|c_cellcurrencyalue
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellpercentvalue-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellpercentvalue-mod.infile
deleted file mode 100755
index 440c82d2fbc2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellpercentvalue-mod.infile
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# Spreadsheet percentage value precision
-#
-TEST||MINICALC|c_cellpercentvalue
-MINICALC_ENTER_CELL|0|0|120%\n
-SLEEP|3
-MINICALC_ENTER_CELL|0|1|10%\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellstringvalue-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellstringvalue-mod.infile
deleted file mode 100755
index 5e67ea28c49f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cellstringvalue-mod.infile
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Spreadsheet string value changes.
-#
-TEST||MINICALC|c_cellstringvalue
-MINICALC_ENTER_CELL|1|2|Testing\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|3|\n
-SLEEP|3
-MINICALC_ENTER_CELL|2|1|;\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_columnswidth-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_columnswidth-mod.infile
deleted file mode 100755
index 5fe9942beabc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_columnswidth-mod.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-#
-#
-TEST||MINICALC|c_columnswidth
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cyclic-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cyclic-mod.infile
deleted file mode 100755
index ab9ac1b29d4a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_cyclic-mod.infile
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# Spreadsheet error messages.
-#
-TEST||MINICALC|c_cyclic
-MINICALC_ENTER_CELL|3|0|0\n
-SLEEP|3
-MINICALC_ENTER_CELL|4|0|0\n
-SLEEP|3
-MINICALC_ENTER_CELL|3|1|=(A1/A4)\n
-SLEEP|3
-MINICALC_ENTER_CELL|4|1|=(A4/A5)\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_dividefloating-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_dividefloating-mod.infile
deleted file mode 100755
index ce216e167f5e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_dividefloating-mod.infile
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# Spreadsheet - dividing floating points.
-#
-TEST||MINICALC|c_dividefloating
-MINICALC_ENTER_CELL|3|0|=-(12.2)/(5-1)\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|1|=(12.2)/(5-1)\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_forwardrange-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_forwardrange-mod.infile
deleted file mode 100755
index 0c29937a0198..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_forwardrange-mod.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Spreadsheet forwardrange & logical function test
-#
-TEST||MINICALC|c_forwardrange
-MINICALC_ENTER_CELL|3|1|=IF(0;45.45;54.54)\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertimage.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertimage.infile
deleted file mode 100755
index 6801a23fa455..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertimage.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-# Spreadsheet with image insert conversion test.
-#
-TEST||MINICALC|c_insertimage
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertrow-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertrow-mod.infile
deleted file mode 100755
index a56fcf0b2a13..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_insertrow-mod.infile
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# simple spreadsheet - insert a new row
-#
-TEST||MINICALC|c_insertrow
-TAP_PEN_HARD|10|40|
-SLEEP|3
-TAP_PEN_HARD|110|140
-SLEEP|3
-TAP_PEN_HARD|110|130
-SLEEP|3
-MINICALC_ENTER_CELL|3|0|1\n
-SLEEP|5
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_invalidcellref-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_invalidcellref-mod.infile
deleted file mode 100755
index dc2675c2d13a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_invalidcellref-mod.infile
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Spreadsheet invalid references test.
-#
-TEST||MINICALC|c_invalidcellref
-MINICALC_ENTER_CELL|2|0|=MAX(1;2;3)\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|2| \n
-SLEEP|3
-MINICALC_ENTER_CELL|2|2|=a0 \n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_largerange-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_largerange-mod.infile
deleted file mode 100755
index 7bc7b53e8423..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_largerange-mod.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Spreadsheet large range test
-#
-TEST||MINICALC|c_largerange
-MINICALC_ENTER_CELL|2|1|=SUM(E7:G10)\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_listrange-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_listrange-mod.infile
deleted file mode 100755
index 252dbe45d34c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_listrange-mod.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Spreadsheet listrange test.
-#
-TEST||MINICALC|c_listrange
-MINICALC_ENTER_CELL|2|3|24\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_mathematical-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_mathematical-mod.infile
deleted file mode 100755
index f45b347b1760..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_mathematical-mod.infile
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Spreadsheet standard math functs
-#
-TEST||MINICALC|c_mathematical
-MINICALC_ENTER_CELL|0|1|=SIN(3.14/2)\n
-SLEEP8|
-MINICALC_ENTER_CELL|1|1|=COS(0)\n
-SLEEP|8
-MINICALC_ENTER_CELL|2|2|=TAN(1.57/2)\n
-SLEEP|8
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_multi_boolean.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_multi_boolean.infile
deleted file mode 100644
index ef77f2a143b2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_multi_boolean.infile
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Spreadsheet - test multi Boolean entry no change.
-#
-TEST||MINICALC|c_multi_boolean
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_protection-mod01.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_protection-mod01.infile
deleted file mode 100755
index d1557eab26da..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_protection-mod01.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Spreadsheet change protection test.
-#
-TEST||MINICALC|c_protection
-MINICALC_ENTER_CELL|0|0| 1\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_sheetreference-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_sheetreference-mod.infile
deleted file mode 100755
index 3b9d76bb02bf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_sheetreference-mod.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Spreadsheet sheet reference test.
-#
-TEST||MINICALC|c_sheetreference
-MINICALC_ENTER_CELL|2|0|=Sheet3.B1\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple01-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple01-mod.infile
deleted file mode 100755
index 2ae81831384c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple01-mod.infile
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# simple spreadsheet - insert text & numbers
-#
-TEST||MINICALC|c_simple01
-MINICALC_ENTER_CELL|0|0|Col1\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|0|1\n
-SLEEP|3
-MINICALC_ENTER_CELL|2|0|1\n
-SLEEP|3
-MINICALC_ENTER_CELL|3|0|1\n
-SLEEP|5
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple02-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple02-mod.infile
deleted file mode 100755
index a6414e9a5168..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple02-mod.infile
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# simple spreadsheet - append a new column to end
-#
-TEST||MINICALC|c_simple02
-MINICALC_ENTER_CELL|0|1|Col3\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|1|3\n
-SLEEP|3
-MINICALC_ENTER_CELL|2|1|3\n
-SLEEP|3
-MINICALC_ENTER_CELL|3|1|3\n
-SLEEP|5
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple03-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple03-mod.infile
deleted file mode 100755
index 00ad02334b45..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple03-mod.infile
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# simple spreadsheet - insert a new column in middle
-#
-TEST||MINICALC|c_simple03
-MINICALC_ENTER_CELL|0|1|Col2\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|1|2\n
-SLEEP|3
-MINICALC_ENTER_CELL|2|1|2\n
-SLEEP|3
-MINICALC_ENTER_CELL|3|1|2\n
-SLEEP|5
-MINICALC_ENTER_CELL|0|2|Col3\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|2|3\n
-SLEEP|3
-MINICALC_ENTER_CELL|2|2|3\n
-SLEEP|3
-MINICALC_ENTER_CELL|3|2|3\n
-SLEEP|5
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple04-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple04-mod.infile
deleted file mode 100755
index 4c5b8828038c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_simple04-mod.infile
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# simple spreadsheet - delete text & numbers
-#
-TEST||MINICALC|c_simple04
-MINICALC_ENTER_CELL|0|2|\n
-SLEEP|3
-MINICALC_ENTER_CELL|1|2|\n
-SLEEP|3
-MINICALC_ENTER_CELL|2|2|\n
-SLEEP|3
-MINICALC_ENTER_CELL|3|2|\n
-SLEEP|5
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_smallrange-mod.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_smallrange-mod.infile
deleted file mode 100755
index 81c8ab33bdf8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_smallrange-mod.infile
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Spreadsheet smallrange test.
-#
-TEST||MINICALC|c_smallrange
-MINICALC_ENTER_CELL|2|1|=AVERAGE(A1:B2)\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_styles.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_styles.infile
deleted file mode 100755
index 26c3446dffd5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_styles.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-#
-#
-TEST||MINICALC|c_styles
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_textimage.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_textimage.infile
deleted file mode 100755
index 71416244e9d4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/c_textimage.infile
+++ /dev/null
@@ -1,12 +0,0 @@
-#
-# Spreadsheet image text insert.
-#
-TEST||MINICALC|c_textimage
-MINICALC_ENTER_CELL|0|0|This is a green car.\n
-SLEEP|3
-MINICALC_ENTER_CELL|14|1|This line is below the green car.\n
-SLEEP|3
-MINICALC_ENTER_CELL|15|2|This is a bird.\n
-SLEEP|3
-MINICALC_ENTER_CELL|32|2|This line is below the bird.\n
-SLEEP|5
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/empty01.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/empty01.infile
deleted file mode 100755
index 4100bb47178e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/empty01.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-# empty01
-TEST|Empty 1|QUICKWORD|empty01
-ENTER_STRING_AT_LOCATION|LEFT|TOP|New text added to empty file.\n
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/hyperlink01.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/hyperlink01.infile
deleted file mode 100755
index 75f4acb1123b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/hyperlink01.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# hyperlink01
-TEST|Hyperlink 1|QUICKWORD|hyperlink01
-ENTER_STRING_AT_LOCATION|114|64|
-ENTER_STRING_AT_LOCATION|33|64|SunWeb Central
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/image01.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/image01.infile
deleted file mode 100755
index 88da6efab59d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/image01.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# image01
-TEST|Image 1|QUICKWORD|image01
-ENTER_STRING_AT_LOCATION|86|53|\nReal start of animated gif
-ENTER_STRING_AT_LOCATION|LEFT|97|Real end of animated gif\n
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple01.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple01.infile
deleted file mode 100755
index 9b8d2c3f26eb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple01.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-# simple01
-TEST|Simple 1|QUICKWORD|simple01
-ENTER_STRING_AT_LOCATION|LEFT|TOP|New text added to simple file.\n
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple02.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple02.infile
deleted file mode 100755
index ec139bdacafe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple02.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-# simple02
-TEST|Simple 2|QUICKWORD|simple02
-ENTER_STRING_AT_LOCATION|64|20|, including this inserted phrase,
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple03.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple03.infile
deleted file mode 100755
index 0755a23b55db..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple03.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-# simple03
-TEST|Simple 3|QUICKWORD|simple03
-ENTER_STRING_AT_LOCATION|LEFT|42|This is also in standard style\n
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple04.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple04.infile
deleted file mode 100755
index 7c6419dd91a4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple04.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-# simple04
-TEST|Simple 4|QUICKWORD|simple04
-ENTER_STRING_AT_LOCATION|66|20|
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple05.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple05.infile
deleted file mode 100755
index 5296d4d953d9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/simple05.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# simple05
-TEST|Simple 5|QUICKWORD|simple05
-ENTER_STRING_AT_LOCATION|108|20|
-ENTER_STRING_AT_LOCATION|19|20|document uses
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table01.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table01.infile
deleted file mode 100755
index fe197e63ad82..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table01.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-# table01
-TEST|Table 1|QUICKWORD|table01
-ENTER_STRING_AT_LOCATION|77|31|, immediately after this sentence
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table02.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table02.infile
deleted file mode 100755
index c5570610e083..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table02.infile
+++ /dev/null
@@ -1,3 +0,0 @@
-# table02
-TEST|Table 2|QUICKWORD|table02
-ENTER_STRING_AT_LOCATION|LEFT|64|This sentence comes after the table.
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table03.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table03.infile
deleted file mode 100755
index 22a22cbaa492..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table03.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# table03
-TEST|Table 3|QUICKWORD|table03
-ENTER_STRING_AT_LOCATION|77|31|, immediately after this sentence
-ENTER_STRING_AT_LOCATION|LEFT|75|This sentence comes after the table.
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table04.infile b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table04.infile
deleted file mode 100755
index beeb6baf6e06..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/table04.infile
+++ /dev/null
@@ -1,4 +0,0 @@
-# table04
-TEST|Table 4|QUICKWORD|table04
-ENTER_STRING_AT_LOCATION|77|31|
-ENTER_STRING_AT_LOCATION|62|20|a une table avec 3 lignes et 3 colonnes
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_animatedgif.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_animatedgif.sxw
deleted file mode 100644
index 690e5611a4b6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_animatedgif.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bolddoc.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bolddoc.sxw
deleted file mode 100644
index 314a4adc0eb9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bolddoc.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bookmarks.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bookmarks.sxw
deleted file mode 100644
index c0f7c7ba632c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bookmarks.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bulletorderedlist.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bulletorderedlist.sxw
deleted file mode 100644
index bd640d575fb2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_bulletorderedlist.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc-mod.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc-mod.sxw
deleted file mode 100644
index d4d4eff4df96..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc-mod.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc.sxw
deleted file mode 100644
index d4d4eff4df96..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_emptydoc.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_firstlineindent.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_firstlineindent.sxw
deleted file mode 100644
index 0729f3d25cdf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_firstlineindent.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_fontsize.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_fontsize.sxw
deleted file mode 100644
index 0b5717728617..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_fontsize.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading.sxw
deleted file mode 100644
index 915dce52c846..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading1.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading1.sxw
deleted file mode 100644
index ebf0b2a44a3d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading1.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading2.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading2.sxw
deleted file mode 100644
index 42645eb2a0e6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_heading2.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_hyperlink.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_hyperlink.sxw
deleted file mode 100644
index 68632c7799cb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_hyperlink.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_justified.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_justified.sxw
deleted file mode 100644
index 37fa79a5db3b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_justified.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linebreaks.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linebreaks.sxw
deleted file mode 100644
index 519d12ef6acd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linebreaks.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linespacing.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linespacing.sxw
deleted file mode 100644
index f640bf826395..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_linespacing.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_numberorderedlist.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_numberorderedlist.sxw
deleted file mode 100644
index 9ea9bcdb2195..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_numberorderedlist.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_pagebreak.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_pagebreak.sxw
deleted file mode 100644
index 389520790d52..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_pagebreak.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_paragraph.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_paragraph.sxw
deleted file mode 100644
index b19b4439b2e0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_paragraph.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple01.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple01.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple01.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple02.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple02.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple02.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple03.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple03.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple03.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple04.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple04.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple04.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple05.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple05.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_simple05.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_standard.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_standard.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_standard.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_subscript.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_subscript.sxw
deleted file mode 100644
index 486a8fb92d8d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_subscript.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_superscript.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_superscript.sxw
deleted file mode 100644
index cc65c10281df..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_superscript.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_symbols.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_symbols.sxw
deleted file mode 100644
index 7d8961b142bd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_symbols.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_tab.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_tab.sxw
deleted file mode 100644
index 878707db6816..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_tab.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_table.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_table.sxw
deleted file mode 100644
index 34634a4ec542..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_table.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_textspan.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_textspan.sxw
deleted file mode 100644
index c42751fa6ee4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_textspan.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_unorderedlist.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_unorderedlist.sxw
deleted file mode 100644
index ca5ee406ccc5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_unorderedlist.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_wordwrap.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_wordwrap.sxw
deleted file mode 100644
index 168ebc72dfd1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/a_wordwrap.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_addition.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_addition.sxc
deleted file mode 100644
index 9bd5c1a7ee73..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_addition.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_alignment.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_alignment.sxc
deleted file mode 100644
index b1fdbd58b7a8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_alignment.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_backwardrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_backwardrange.sxc
deleted file mode 100644
index f319ed9feb8d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_backwardrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_basic.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_basic.sxc
deleted file mode 100644
index 9bd5c1a7ee73..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_basic.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_boolean.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_boolean.sxc
deleted file mode 100644
index b6e876605be5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_boolean.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellcurrencyalue.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellcurrencyalue.sxc
deleted file mode 100644
index 808d781162e6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellcurrencyalue.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellpercentvalue.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellpercentvalue.sxc
deleted file mode 100644
index e0499ce95c17..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellpercentvalue.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellstringvalue.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellstringvalue.sxc
deleted file mode 100644
index f6fb4dc5de1a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cellstringvalue.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_columnswidth.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_columnswidth.sxc
deleted file mode 100644
index 24aa28e71fbd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_columnswidth.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cyclic.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cyclic.sxc
deleted file mode 100644
index 196bd78962a9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_cyclic.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_dividefloating.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_dividefloating.sxc
deleted file mode 100644
index 1e2c55b448c8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_dividefloating.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_forwardrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_forwardrange.sxc
deleted file mode 100644
index f37c97d7e2a8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_forwardrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertimage.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertimage.sxc
deleted file mode 100644
index 9f42285d2881..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertimage.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertrow.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertrow.sxc
deleted file mode 100644
index e20c0fff4414..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_insertrow.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_invalidcellref.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_invalidcellref.sxc
deleted file mode 100644
index 28fa241d7112..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_invalidcellref.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_largerange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_largerange.sxc
deleted file mode 100644
index 618e9ee73478..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_largerange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_listrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_listrange.sxc
deleted file mode 100644
index b29b34d589ad..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_listrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_mathematical.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_mathematical.sxc
deleted file mode 100644
index deab6092dc97..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_mathematical.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_multi_boolean.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_multi_boolean.sxc
deleted file mode 100644
index 38bc90cf0e52..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_multi_boolean.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_protection.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_protection.sxc
deleted file mode 100644
index 64f89cc61ce7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_protection.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_sheetreference.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_sheetreference.sxc
deleted file mode 100644
index 0ebb013db25d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_sheetreference.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple01.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple01.sxc
deleted file mode 100755
index b4417b983444..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple01.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple02.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple02.sxc
deleted file mode 100755
index 7a4d69640f0a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple02.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple03.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple03.sxc
deleted file mode 100755
index bb29f91d6b29..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple03.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple04.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple04.sxc
deleted file mode 100755
index 318129c421c4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_simple04.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_smallrange.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_smallrange.sxc
deleted file mode 100644
index ea7dacc2464d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_smallrange.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_styles.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_styles.sxc
deleted file mode 100644
index 21e0f1ab5ac0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_styles.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_textimage.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_textimage.sxc
deleted file mode 100644
index 9f42285d2881..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/c_textimage.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/empty01.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/empty01.sxw
deleted file mode 100644
index d4d4eff4df96..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/empty01.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/hyperlink01.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/hyperlink01.sxw
deleted file mode 100644
index d000f2974b23..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/hyperlink01.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/image01.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/image01.sxw
deleted file mode 100644
index 690e5611a4b6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/image01.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple01.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple01.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple01.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple02.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple02.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple02.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple03.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple03.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple03.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple04.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple04.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple04.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple05.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple05.sxw
deleted file mode 100644
index be65343e2ffe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/simple05.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table01.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table01.sxw
deleted file mode 100644
index 956bedcc24e2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table01.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table02.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table02.sxw
deleted file mode 100644
index 956bedcc24e2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table02.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table03.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table03.sxw
deleted file mode 100644
index 956bedcc24e2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table03.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table04.sxw b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table04.sxw
deleted file mode 100644
index 956bedcc24e2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa-wrapper/testcases/xml-orig/table04.sxw
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/mysplit.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/mysplit.pl
deleted file mode 100755
index 664138283359..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/mysplit.pl
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/local/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-open(TESTFILE, $ARGV[0]);
-
-while (<TESTFILE>)
-{
- if ($_[1] eq "-q")
- {
- chomp $_;
- @args = split('\|', $_);
- @filestuff = split('\.', @args[0]);
- $filename = @filestuff[0] . ".infile";
- open (TESTCASE, ">$filename") || die "Error opening $filename";
- print TESTCASE "# @args[1]\n# @args[2]\n";
- print TESTCASE "TEST|@args[1]|QUICKWORD|@filestuff[0]\n" ;
- close TESTCASE;
- }
- if ($_[1] eq "-m")
- {
- chomp $_;
- @args = split('\|', $_);
- @filestuff = split('\.', @args[0]);
- $filename = @filestuff[0] . ".infile";
- open (TESTCASE, ">$filename") || die "Error opening $filename";
- print TESTCASE "# @args[1]\n# @args[2]\n";
- print TESTCASE "TEST|@args[1]|MINICALC|@filestuff[0]\n" ;
- close TESTCASE;
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/tappen.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/tappen.pl
deleted file mode 100755
index 319767fdf477..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/tappen.pl
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-####################################################################
-# File Name: template.pl
-# Version : 1.0
-# Project : XMerge
-# Author : Brian Cameron
-# Date : 5th Sept. 2001
-#
-# Takes x and y from the command line and taps the screen there.
-# Assumes pose is already running.
-#
-##########################################################################
-
-if ($#ARGV != 1)
-{
- print "\nUsage: $0 x y\n\n";
- exit -1;
-}
-
-use lib "$ENV{qa-dir}/lib";
-use converterlib;
-
-# Put commands to run between the open_connection() and
-# close_connection() calls...
-#
-open_connection();
-
-TapPen($ARGV[0], $ARGV[1]);
-
-close_connection();
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/template.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/template.pl
deleted file mode 100755
index 1f48ee15196d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/template.pl
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-####################################################################
-# File Name: template.pl
-# Version : 1.0
-# Project : XMERGE
-# Author : Brian Cameron
-# Date : 5th Sept. 2001
-#
-# This is just a useful script to use as a template to run
-# commands. Assumes that pose is already running.
-#
-##########################################################################
-
-use lib "$ENV{qa-dir}/lib";
-use converterlib;
-
-# Put commands to run between the open_connection() and
-# close_connection() calls...
-#
-open_connection();
-
-# command(s) go here.
-
-close_connection();
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl
deleted file mode 100755
index cbd4492e72b4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/bin/test_driver.pl
+++ /dev/null
@@ -1,783 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-####################################################################
-# File Name: test_driver.pl
-# Version : 1.0
-# Project : Xmerge
-# Author : Brian Cameron
-# Date : 5th Sept. 2001
-#
-# This script does the following:
-#
-# Processes the input file, and runs the tests specified in that
-# file. This will do the following for each test:
-#
-# 1. Convert a file from XML to PDB format
-# 2. Starts up the Palm OS emulator with the appropriate program
-# running and the converted file loaded the program.
-# 3. Makes automated changes as specified in the inputfile to
-# this script..
-# 4. Returns to the main applications window.
-#
-# Parameter
-# Filename to convert and change
-#
-##########################################################################
-
-# Turn on auto-flushing
-#
-$|=1;
-
-use EmRPC;
-
-# Directory where converterlib is located...
-#
-use lib "$ENV{qa-dir}/lib";
-use converterlib;
-
-#-------------------- Start of main script ------------------------------------
-
-# Environmental Settings
-
-$pose_exe = "$ENV{pose-dir}/pose/posedist/pose";
-$pose_prc = "$ENV{thirdpartyapps-dir}";
-$test_list = "";
-$infile = "";
-$merge_opt = 0;
-
-# You may need to change this from the default if your pose emulator
-# starts faster or slower than mine.
-#
-if ($ENV{'POSE_TIMEOUT'})
-{
- $pose_timeout = "$ENV{'POSE_TIMEOUT'}";
-}
-else
-{
- $pose_timeout = 15;
-}
-
-$cmdline_len = @ARGV;
-if ($cmdline_len <= 0)
-{
- print_usage();
- exit (0);
-}
-
-&process_cmdline(@ARGV);
-&print_env();
-&verify_env_options();
-
-# Make the output directories with timestamps included in the
-# directory names.
-#
-mkdir $pdb_orig, 0777 || die "can not create directory <$pdb_new>.";
-`chmod 777 $pdb_orig`;
-mkdir $pdb_new, 0777 || die "can not create directory <$pdb_new>.";
-`chmod 777 $pdb_new`;
-mkdir $xml_new, 0777 || die "can not create directory <$pdb_new>.";
-`chmod 777 $xml_new`;
-
-&verify_prcs_exist("DBExporter.prc");
-
-if ($test_list ne "")
-{
- open (TESTLIST, $test_list) || die "Couldn't open testcase list file $test_list";
-
- while (<TESTLIST>)
- {
- &process_testcase($_);
- }
-}
-elsif ($infile ne "")
-{
- &process_testcase($infile);
-}
-else
-{
- die ("You didn't supply any test cases to process");
-}
-
-print "Finished.\n";
-exit(0);
-
-#-------------------- End of main script ----------------------------------------
-
-#--------------------------------------------------------------------------------
-# Various sub routines
-#--------------------------------------------------------------------------------
-
-# process_testcase
-# infile - test case file name
-#
-# This is the main driver function
-# Opens the infile, reads it in parses it, runs the appropriate conversion
-# starts pose and load the file into the emulator. It launches the
-# appropriate editor and then runs the commands specified in the test case.
-# It then exports the file and saves it locally. Finally it is converted
-# back to the original office format.
-#
-sub process_testcase
-{
- my $infile = $_[0];
- my $convert_file = "";
- my $rc;
-
- # Process the inputfile
- #
- open (INFILE, $infile) || die "Failed to open test case <$infile>";
-
- $running_testtype = "";
-
- # Process the input file.
- #
- while ($c_inline = <INFILE>)
- {
- chomp $c_inline;
- @entry = split('\|', $c_inline);
-
- # Process TEST
- #
- if ($c_inline =~ /^ *#/ || $c_inline =~ /^[ \t]*$/)
- {
- # skip comments and blank lines.
- #
- next;
- }
- elsif ("$entry[0]" eq "TEST")
- {
- # Close the test if one is running.
- #
- &close_program($convert_file);
- $running_testtype = "";
-
- $valid_test = 0;
-
- if ($#entry != 3)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- # Start the test.
- #
- print "\nStarting test: $entry[1]\n";
- $convert_file = $entry[3];
-
- if ("$entry[2]" =~ /[Qq][Uu][Ii][Cc][Kk][Ww][Oo][Rr][Dd]/)
- {
- $xml_extension = "sxw";
- $convert_to = "doc";
-
- # Convert XML file to pdb format.
- #
- $rc = &convert_to_pdb("$xml_orig", $convert_file, $xml_extension ,
- $convert_to,"$pdb_orig");
- if ($rc != 0)
- {
- print "\nERROR, problem converting file $convert_file\n\n";
- }
- else
- {
- # Start pose
- #
- $rc = &start_pose("$pose_exe",
- "$pose_prc/Quickword.PRC,$pose_prc/DBExporter.prc,$pdb_orig/$convert_file.pdb",
- "Quickword", $pose_timeout);
-
- if ($rc == 0)
- {
- &start_quickword();
- $valid_test = 1;
- $running_testtype = "QUICKWORD";
- print "\npose launched, begin automated test sequence for QuickWord\n";
- }
- else
- {
- &kill_pose();
- $running_testtype = "";
- }
- }
- }
- elsif ("$entry[2]" =~ /[Mm][Ii][Nn][Ii][Cc][Aa][Ll][Cc]/)
- {
- $xml_extension = "sxc";
- $convert_to = "minicalc";
-
- # Convert XML file to pdb format.
- #
- $rc = &convert_to_pdb("$xml_orig", $convert_file,
- $xml_extension, $convert_to,"$pdb_orig");
- if ($rc != 0)
- {
- print "\nERROR, problem converting file $convert_file\n\n";
- }
- else
- {
- # Get minicalc PDB file names, since an SXC file can
- # be converted to more than one.
- #
- $pdb_files="";
- $i = 1;
- while (-f "$pdb_orig/$convert_file-Sheet$i.pdb")
- {
- if ($i > 1)
- {
- $pdb_files .= ",";
- }
- $pdb_files .= "$pdb_orig/$convert_file-Sheet$i.pdb";
- $i++;
- }
- $number = $i-1;
-
- # Start pose
- #
- $rc = &start_pose("$pose_exe",
- "$pose_prc/MiniCalc.prc,$pose_prc/DBExporter.prc,$pdb_files",
- "MiniCalc", $pose_timeout);
-
- if ($rc == 0)
- {
- &start_minicalc();
- $valid_test = 1;
- $running_testtype = "MINICALC";
- print "pose launched, begin automated test sequence for MiniCalc\n";
- }
- else
- {
- &kill_pose();
- $running_testtype = "";
- }
- }
- }
- else
- {
- print "\nERROR, invalid extension <$entry[2]>\n\n";
- }
- }
- }
-
- # Process DB_EXPORT
- #
- elsif ("$entry[0]" eq "DB_EXPORT")
- {
- if ($#entry != 1)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- &db_export($entry[1]);
- }
- }
-
- # Process TAP_APPLICATIONS
- #
- elsif ("$entry[0]" eq "TAP_APPLICATIONS")
- {
- if ($#entry != 0)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- &tap_applications(0);
- }
- }
-
- # Process ENTER_STRING_AT_LOCATION
- #
- elsif ("$entry[0]" eq "ENTER_STRING_AT_LOCATION")
- {
- if ($#entry != 3)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &enter_string_at_location($entry[1], $entry[2],
- $entry[3], $running_testtype);
- }
- }
-
- # Process TAP_PEN
- #
- elsif ("$entry[0]" eq "TAP_PEN")
- {
- if ($#entry != 2)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &pose_tap_pen($entry[1], $entry[2], 0);
- }
- }
-
- # Process TAP_BUTTON
- #
- elsif ("$entry[0]" eq "TAP_BUTTON")
- {
- if ($#entry != 1)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &pose_tap_button($entry[1], 0);
- }
- }
-
- # Process SLEEP
- #
- elsif ("$entry[0]" eq "SLEEP")
- {
- if ($#entry != 1)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- else
- {
- &pose_sleep($entry[1]);
- }
- }
-
- # Process MINICALC_ENTER_CELL
- #
- elsif ("$entry[0]" eq "MINICALC_ENTER_CELL")
- {
- if ($#entry != 3)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &minicalc_enter_cell($entry[1], $entry[2], $entry[3]);
- }
- }
-
- # Process QUICKWORD_FIND_REPLACE
- #
- elsif ("$entry[0]" eq "QUICKWORD_FIND_REPLACE")
- {
- if ($#entry != 2)
- {
- print "\nERROR, $entry[0] invalid number of arguments\n\n";
- }
- elsif ($valid_test == 0)
- {
- print "\nERROR, can not process $entry[0] for invalid test\n\n";
- }
- else
- {
- &quickword_find_replace($entry[1], $entry[2]);
- }
- }
- else
- {
- print "\nERROR, invalid line <$c_inline>\n";
- }
- }
-
- &close_program($convert_file);
-}
-
-# close_program
-# convert_file - file to export
-#
-# closes the program running in pose and kills pose
-#
-sub close_program
-{
- my $convert_file = $_[0];
-
- if ($running_testtype eq "QUICKWORD")
- {
- print "QuickWord test completed.\n";
- &close_program_quickword($convert_file);
- }
- elsif ($running_testtype eq "MINICALC")
- {
- print "MiniCalc test completed.\n";
- &close_program_minicalc($convert_file, $number);
- }
-}
-
-# close_program_quickword
-# convert_file - file to export
-#
-# Closes quickword and kills pose
-#
-sub close_program_quickword
-{
- my $convert_file = $_[0];
- my $error_file = "./error.txt";
- my $rc;
-
- &close_quickword();
-
- &db_export($convert_file);
- print "Moving /tmp/$convert_file.pdb to $pdb_new\n";
- `mv /tmp/$convert_file.pdb $pdb_new`;
- `chmod 666 $pdb_new/$convert_file.pdb`;
-
- &close_connection(1);
- &kill_pose();
- print "\nFinishing test...\n";
-
- # The path of where to put the error file should be specified
- # in the properties file. Not sure if it is really necessary
- # to put this out to a separate file. STDOUT should be fine.
- #
- $rc = &convert_to_xml($xml_new, $xml_orig,
- "$pdb_new/$convert_file.pdb", "doc" ,
- "sxw", $convert_file, $merge_opt);
- if ($rc != 0)
- {
- print "\nERROR, problem converting file $pdb_new/$convert_file.pdb\n\n";
- }
-}
-
-# close_program_minicalc
-# convert_file - file to export
-#
-# Closes minicalc and kills pose
-#
-sub close_program_minicalc
-{
- my $convert_file = $_[0];
- my $num_files = $_[1];
- my $list="";
- my $rc;
-
- &close_minicalc();
-
- for ($a=1; $a <= $num_files; $a++)
- {
- &db_export("$convert_file-Sheet$a");
- print "Moving /tmp/$convert_file-Sheet$a.pdb to $pdb_new/\n";
- `mv /tmp/$convert_file-Sheet$a.pdb $pdb_new/`;
- `chmod 666 $pdb_new/$convert_file-Sheet$a.pdb`;
- }
-
- &close_connection(1);
- &kill_pose();
- print "\nFinishing test...\n";
-
- for ($a=1; $a <= $num_files; $a++)
- {
- $list .="$pdb_new/$convert_file-Sheet$a.pdb "
- }
-
- $rc = &convert_to_xml($xml_new, $xml_orig, "$list",
- "minicalc", "sxc", $convert_file, $merge_opt);
- if ($rc != 0)
- {
- print "\nERROR, problem converting file(s) $list\n\n";
- }
-
- &pose_sleep(5);
-}
-
-# print_usage
-#
-# prints the usage for this program.
-#
-sub print_usage
-{
- print "Usage : test_driver.pl\n";
- print "\t-test=<file> \t\t: individual test case file to run\n";
- print "\t-list=<file> \t\t: list of test case files\n";
- print "\t-env=<file> \t\t: Properites like file defining env\n";
- print "\t-pose-exe=<fullpath> \t: path to pose executable\n";
- print "\t-pose-prc=<path> \t: path to directory holding prc files\n";
- print "\t-pdb-orig=<path> \t: directory to hold original pdb files\n";
- print "\t-pdb-new=<path> \t: directory to hold new pdb files\n";
- print "\t-xml-orig=<path> \t: directory to hold original office documents\n";
- print "\t-xml-new=<path> \t: directory to hold new office documents\n";
- print "\t-merge \t: Invokes the merge option when converting\n";
- print "\t \t from PDB back to XML.\n";
-}
-
-# print_env
-#
-# Prints the current environment.
-#
-sub print_env
-{
- print "\nUsing the following environment:\n";
- print "\tPOSE_EXE = $pose_exe\n";
- print "\tPOSE_PRC = $pose_prc\n";
- print "\tPDB_ORIG = $pdb_orig\n";
- print "\tPDB_NEW = $pdb_new\n";
- print "\tXML_ORIG = $xml_orig\n";
- print "\tXML_NEW = $xml_new\n";
-}
-
-# process_cmdline
-#
-# command line options come in as key/value pairs.
-# read them and set the appropriate global variable
-#
-# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
-# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
-#
-sub process_cmdline
-{
- my $lu_str = &get_date_string();
-
- foreach $i (@_)
- {
- my @arg= split('=', $i);
- @arg[0] =~ tr/A-Z/a-z/;
-
- if (@arg[0] eq "-pose-exe")
- {
- $pose_exe=$arg[1];
- }
- elsif (@arg[0] eq "-pose-prc")
- {
- $pose_prc=$arg[1];
- }
- elsif (@arg[0] eq "-pdb-orig")
- {
- $pdb_orig_dir=$arg[1];
- $pdb_orig=$arg[1];
- $pdb_orig .= "/";
- $pdb_orig .= "$lu_str";
- }
- elsif (@arg[0] eq "-pdb-new")
- {
- $pdb_new_dir=$arg[1];
- $pdb_new=$arg[1];
- $pdb_new .= "/";
- $pdb_new .= "$lu_str";
- }
- elsif (@arg[0] eq "-xml-orig")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "-xml-new")
- {
- $xml_new_dir=$arg[1];
- $xml_new=$arg[1];
- $xml_new .= "/";
- $xml_new .= "$lu_str";
- }
- elsif (@arg[0] eq "-env")
- {
- &set_env_from_props($arg[1]);
- }
- elsif (@arg[0] eq "-list")
- {
- $test_list = $arg[1];
- }
- elsif (@arg[0] eq "-test")
- {
- $infile = $arg[1];
- }
- elsif (@arg[0] eq "-merge")
- {
- $merge_opt = 1;
- }
- else
- {
- print_usage();
- die "Incorrect command line";
- }
- }
-}
-
-# set_env_from_props
-# infile - property file
-#
-# Read the properties file, of the form key=value
-# Valid key values are :
-# POSE_EXE
-# POSE_PRC
-# POSE_PERL
-# TEST_HOME
-# PDB_ORIG
-# PDB_NEW
-# XML_ORIG
-# XML_NEW
-# If a value is found the appropriate global variable is set.
-#
-# Sets these globals: pose_exe, pose_prc, xml_orig, xml_new_dir,
-# xml_new, pdb_orig_dir, pdb_orig, pdb_new_dir, pdb_new.
-#
-sub set_env_from_props
-{
- my $infile = $_[0];
- my $lu_str = &get_date_string();
-
- open(PROPSFILE, $infile) || die "Could not open properties file <$infile>";
-
- while (<PROPSFILE>)
- {
- chomp $_;
- my @arg = split('=', $_);
- @arg[0] =~ tr/a-z/A-Z/;
- my $len = @arg;
- if ($len != 2)
- {
- die "Malformed property in $arg[0]";
- }
- if (@arg[0] eq "POSE_EXE")
- {
- $pose_exe=$arg[1];
- }
- elsif (@arg[0] eq "POSE_PRC")
- {
- $pose_prc=$arg[1];
- }
- elsif (@arg[0] eq "PDB_ORIG")
- {
- $pdb_orig_dir=$arg[1];
- $pdb_orig=$arg[1];
- $pdb_orig .= "/";
- $pdb_orig .= "$lu_str";
- }
- elsif (@arg[0] eq "PDB_NEW")
- {
- $pdb_new_dir=$arg[1];
- $pdb_new=$arg[1];
- $pdb_new .= "/";
- $pdb_new .= "$lu_str";
- }
- elsif (@arg[0] eq "XML_ORIG")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "XML_NEW")
- {
- $xml_new_dir=$arg[1];
- $xml_new=$arg[1];
- $xml_new .= "/";
- $xml_new .= "$lu_str";
- }
-
- }
- close PROPSFILE;
-}
-
-# verify_env_options
-#
-# Verify that input options are correctly set.
-# Assumes pose_exe, pose_prc, xml_orig, xml_new_dir,
-# pdb_orig_dir, and pdb_new_dir are already set.
-#
-sub verify_env_options
-{
- if (!-e "$pose_exe")
- {
- die "The pose executable cannot be found at $pose_exe.";
- }
- if (!-x $pose_exe)
- {
- die "$pose_exe exists but is not executable.";
- }
-
- if (!-e "$pose_prc")
- {
- die "The PRC directory specified as $pose_prc does not exist.";
- }
- if (!-d "$pose_prc")
- {
- die "The PRC location specified as $pose_prc exists, but is not a directory.";
- }
-
- if (!-e "$pdb_orig_dir")
- {
- die "The original PDB directory specified as $pdb_orig_dir does not exist.";
- }
- if (!-d "$pdb_orig_dir")
- {
- die "The original PDB directory specified as $pdb_orig_dir exists but is not a directory.";
- }
-
- if (!-e "$pdb_new_dir")
- {
- die "The new PDB directory specified as $pdb_new_dir does not exist.";
- }
- if (!-d "$pdb_new_dir")
- {
- die "The new PDB directory specified as $pdb_new_dir exists but is not a directory.";
- }
-
- if (!-e "$xml_orig")
- {
- die "The original Office document directory specified as $xml_orig does not exist.";
- }
- if (!-d "$xml_orig")
- {
- die "The original Office document location specified as $xml_orig exists but is not a directory.";
- }
-
- if (!-e "$xml_new_dir")
- {
- die "The new Office document directory specified as $xml_new_dir does not exist.";
- }
- if (!-d "$xml_new_dir")
- {
- die "The new Office document location specified as $xml_new_dir exists but is not a directory.";
- }
-}
-
-# verify_prcs_exist
-# prcfile - the PRC file to check
-#
-# Verifies that the specified PRC file exists.
-#
-sub verify_prcs_exist
-{
- my $prcfile = $_[0];
-
- if (!-e "$pose_prc/$prcfile")
- {
- die "The pose PRC directory ($pose_prc) is correct, but I can't find $prcfile there.";
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/OfficeZip.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/OfficeZip.java
deleted file mode 100644
index a3a5a0bdab0f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/OfficeZip.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-import java.util.List;
-import java.util.ListIterator;
-import java.util.LinkedList;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.CRC32;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * Class used by OfficeDocument to handle zip reading and writing,
- * as well as storing zip entries.
- *
- * @author Herbie Ong
- */
-
-class OfficeZip {
-
- /** file name of the xml file in a zipped document. */
- private final static String XMLFILE = "content.xml";
-
- private final static int BUFFERSIZE = 1024;
-
- private List entryList = null;
-
- private int contentIndex = -1;
-
- private String filename = null;
-
- private class Entry {
-
- ZipEntry zipEntry = null;
- byte bytes[] = null;
- }
-
- /**
- * Constructor
- *
- * @param filename Full Path to Zip file to process
- *
- */
- public OfficeZip(String filename) {
- this.filename = filename;
- }
-
-
- /**
- * Read each zip entry in the given InputStream object
- * and store in entryList both the ZipEntry object as well
- * as the bits of each entry. Return the bytes for the
- * entry of XMLFILE.
- *
- * @param is InputStream object to read from
- * @return byte[] byte array of XML file
- * @throws IOException if any I/O error occurs
- */
-
- byte[] read(InputStream is) throws IOException {
-
- ZipInputStream zis = new ZipInputStream(is);
- ZipEntry ze = null;
- int i = -1;
-
- entryList = new LinkedList();
-
- while ((ze = zis.getNextEntry()) != null) {
-
- String name = ze.getName();
-
- Entry entry = new Entry();
- entry.zipEntry = ze;
-
- Debug.log(Debug.TRACE, "reading entry: " + name);
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- int len = 0;
- byte bytes[] = new byte[BUFFERSIZE];
-
- while ((len = zis.read(bytes)) > 0) {
- baos.write(bytes, 0, len);
- }
-
- entry.bytes = baos.toByteArray();
-
- entryList.add(entry);
-
- i++;
-
- if (isContentXML(name)) {
- contentIndex = i;
- }
- }
-
- if (contentIndex == -1) {
- throw new IOException(XMLFILE + " not found.");
- }
-
- Entry contentEntry = (Entry) entryList.get(contentIndex);
-
- return contentEntry.bytes;
- }
-
- /**
- * Write out the XMLFILE as a zip into the OutputStream object.
- *
- * If a zip inputstream was previously read, then use
- * those zip contents to recreate the zip, except for XMLFILE,
- * update it using the new content from xmlBytes.
- *
- * If there was no zip inputstream previously read, write
- * XMLFILE out into the zip outputstream.
- *
- * @param os OutputStream object to write zip
- * @param xmlBytes bytes of XMLFILE
- * @throws IOException if any I/O errors occur.
- */
-
- void write(OutputStream os, byte xmlBytes[]) throws IOException {
-
- ZipOutputStream zos = new ZipOutputStream(os);
-
- // if read was not invoked previously, store the bytes directly.
- if (contentIndex == -1) {
-
- Debug.log(Debug.TRACE, "Writing out " + XMLFILE + " into zip.");
-
- ZipEntry ze = new ZipEntry(XMLFILE);
- ze.setSize(xmlBytes.length);
-
- CRC32 crc = new CRC32();
- crc.reset();
- crc.update(xmlBytes);
- ze.setCrc(crc.getValue());
-
- ze.setTime(System.currentTimeMillis());
- ze.setMethod(ZipEntry.DEFLATED);
-
- zos.putNextEntry(ze);
- zos.write(xmlBytes);
-
- } else {
-
- saveEntries(zos, xmlBytes);
- }
-
- zos.close();
- }
-
- /**
- * Used by write method if there was a zip inputstream
- * previously read. It would write out each ZipEntry of
- * the previously read zip, except for XMLFILE, it would
- * update it with new values and with the content from
- * xmlBytes.
- *
- * @param os OutputStream object to write zip
- * @param xmlBytes bytes of XMLFILE
- * @throws ZipException if any zip I/O errors occur.
- */
-
- private void saveEntries(ZipOutputStream zos, byte xmlBytes[])
- throws IOException {
-
- Debug.log(Debug.TRACE, "Writing out the following entries into zip.");
-
- ListIterator iterator = entryList.listIterator();
-
- while (iterator.hasNext()) {
-
- Entry entry = (Entry) iterator.next();
- ZipEntry ze = entry.zipEntry;
-
- String name = ze.getName();
-
- Debug.log(Debug.TRACE, "... " + name);
-
- if (isContentXML(name)) {
-
- // set new values for this ZipEntry
-
- ZipEntry zipEntry = new ZipEntry(name);
-
- zipEntry.setMethod(ze.getMethod());
- zipEntry.setSize(xmlBytes.length);
-
- CRC32 crc = new CRC32();
- crc.reset();
- crc.update(xmlBytes);
- zipEntry.setCrc(crc.getValue());
-
- zipEntry.setTime(System.currentTimeMillis());
-
- zos.putNextEntry(zipEntry);
- zos.write(xmlBytes);
-
- } else {
-
- zos.putNextEntry(ze);
- zos.write(entry.bytes);
- }
- }
- }
-
- private boolean isContentXML(String name) {
-
- String lname = name.toLowerCase();
- return lname.equals(XMLFILE);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBDecoder.java
deleted file mode 100644
index f70b4d0ac4e1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBDecoder.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-import java.io.RandomAccessFile;
-import java.io.IOException;
-
-
-/**
- * <p>Provides functionality to decode a pdb formatted file into
- * a <code>PalmDB</code> object given a file input stream</p>
- *
- * <p>Sample usage:</p>
- *
- * <p><blockquote><pre>
- * PDBDecoder decoder = new PDBDecoder("sample.pdb");
- * PalmDB palmDB = decoder.parse();
- * </pre></blockquote></p>
- *
- * <p>Refer to the
- * <a href="http://starlite.eng/zensync/eng/converters/palmfileformats.pdf">
- * Palm file format specification</a> for details on the pdb format.</p>
- *
- * <p>This decoder has the following assumptions on the pdb file ...</p>
- * <ol>
- * <li><p>There is only one RecordList section in the pdb.</p></li>
- * <li><p>The record indices in the RecordList are sorted in order, i.e. the
- * first record index refers to record 0, and so forth.</p></li>
- * <li><p>The raw records in the record section are sorted as well in order,
- * i.e. first record comes ahead of second record, etc.</p></li>
- * </ol>
- *
- * Other decoders assume these as well.
- *
- * @author Herbie Ong
- * @see PalmDB
- * @see PDBHeader
- *
- * @author Herbie Ong
- */
-
-public final class PDBDecoder {
-
- /**
- * <p>This method decodes a pdb file into a PalmDB object.</p>
- *
- * <p>First, read in the header data using <code>PDBHeader</code>'s
- * <code>read</code> method</p>. Next, read in the record list
- * section. Store the record offsets for use when parsing the records.
- * Based on these offsets, read in each record's bytes and store
- * each in a <code>Record</code> object. Lastly, create a
- * <code>PalmDB</code> object with the read in <code>Record</code>s.
- *
- * @param fileName pdb file name
- * @throws IOException if I/O error occurs
- */
-
- public PalmDB parse(String fileName) throws IOException {
-
- RandomAccessFile file = new RandomAccessFile(fileName, "r");
-
- // read the pdb header
- PDBHeader header = new PDBHeader();
- header.read(file);
-
- Record recArray[] = new Record[header.numRecords];
-
- if (header.numRecords != 0) {
-
- // read in the record indices + offsets
-
- int recOffset[] = new int[header.numRecords];
-
- for (int i = 0; i < header.numRecords; i++) {
-
- recOffset[i] = file.readInt();
- int attr = file.readInt(); // read in attribute.
- }
-
- // read the records
-
- int len = 0;
- byte[] bytes = null;
-
- int lastIndex = header.numRecords - 1;
-
- for (int i = 0; i < lastIndex; i++) {
-
- file.seek(recOffset[i]);
- len = recOffset[i+1] - recOffset[i];
- bytes = new byte[len];
- file.readFully(bytes);
- recArray[i] = new Record(bytes);
- }
-
- // last record
- file.seek(recOffset[lastIndex]);
- len = (int) file.length() - recOffset[lastIndex];
- bytes = new byte[len];
- file.readFully(bytes);
- recArray[lastIndex] = new Record(bytes);
- }
-
- file.close();
-
- // create PalmDB and return it
- PalmDB pdb = new PalmDB(header.pdbName, recArray);
- return pdb;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBHeader.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBHeader.java
deleted file mode 100644
index 84d5be0e2959..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBHeader.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-/**
- * <p>Class used only internally by <code>PDBEncoder</code> and
- * <code>PDBDecoder</code> to store, read and write a pdb header.</p>
- *
- * <p>Note that fields are intended to be accessible only at the
- * package level.</p>
- *
- * <p>Some of the fields are internally represented using a
- * larger type since Java does not have unsigned types.
- * Some are not since they are not relevant for now.
- * The <code>read</code> and <code>write</code> methods should
- * handle them properly.</p>
- *
- * @author Herbie Ong
- */
-
-final class PDBHeader {
-
- /** name of the database. 32 bytes. */
- byte[] pdbName = null;
-
- /** flags for the database. Palm UInt16. Unsignedness should be irrelevant. */
- short attribute = 0;
-
- /** application-specific version for the database. Palm UInt16 */
- int version = 0;
-
- /** date created. Palm UInt32 */
- long creationDate = 0;
-
- /** date last modified. Palm UInt32 */
- long modificationDate = 0;
-
- /** date last backup. Palm UInt32 */
- long lastBackupDate = 0;
-
- /**
- * incremented every time a record is
- * added, deleted or modified. Palm UInt32.
- */
- long modificationNumber = 0;
-
- /** optional field. Palm UInt32. Unsignedness should be irrelevant. */
- int appInfoID = 0;
-
- /** optional field. Palm UInt32. Unsignedness should be irrelevant. */
- int sortInfoID = 0;
-
- /** database type id. Palm UInt32. Unsignedness should be irrelevant. */
- int typeID = 0;
-
- /** database creator id. Palm UInt32. Unsignedness should be irrelevant. */
- int creatorID = 0;
-
- /** ??? */
- int uniqueIDSeed = 0;
-
- /** see numRecords. 4 bytes. */
- int nextRecordListID = 0;
-
- /**
- * number of records stored in the database header.
- * If all the record entries cannot fit in the header,
- * then nextRecordList has the local ID of a
- * recordList that contains the next set of records.
- * Palm UInt16.
- */
- int numRecords = 0;
-
- /**
- * Read in the data for the pdb header. Need to
- * preserve the unsigned value for some of the fields.
- *
- * @param di a DataInput object
- * @throws IOException if I/O error occurs
- */
-
- public void read(DataInput in) throws IOException {
-
- pdbName = new byte[PalmDB.NAME_LENGTH];
- in.readFully(pdbName);
- attribute = in.readShort();
- version = in.readUnsignedShort();
- creationDate = ((long) in.readInt()) & 0xffffffffL;
- modificationDate = ((long) in.readInt()) & 0xffffffffL;
- lastBackupDate = ((long) in.readInt()) & 0xffffffffL;
- modificationNumber = ((long) in.readInt()) & 0xffffffffL;
- appInfoID = in.readInt();
- sortInfoID = in.readInt();
- creatorID = in.readInt();
- typeID = in.readInt();
- uniqueIDSeed = in.readInt();
- nextRecordListID = in.readInt();
- numRecords = in.readUnsignedShort();
- }
-
- /**
- * Write out pdb header data.
- *
- * @param out a DataOut object
- * @throws IOException if I/O error occurs
- */
-
- public void write(DataOutput out) throws IOException {
-
- out.write(pdbName);
- out.writeShort(attribute);
- out.writeShort(version);
- out.writeInt((int) creationDate);
- out.writeInt((int) modificationDate);
- out.writeInt((int) lastBackupDate);
- out.writeInt((int) modificationNumber);
- out.writeInt(appInfoID);
- out.writeInt(sortInfoID);
- out.writeInt(typeID);
- out.writeInt(creatorID);
- out.writeInt(uniqueIDSeed);
- out.writeInt(nextRecordListID);
- out.writeShort(numRecords);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBUtil.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBUtil.java
deleted file mode 100644
index 593215b84626..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PDBUtil.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-/**
- * Contains common static methods and contants for use within the package.
- *
- * @author Herbie Ong
- */
-
-public final class PDBUtil {
-
- /** difference in seconds from Jan 01, 1904 to Jan 01, 1970 */
- final static long TIME_DIFF = 2082844800;
-
- /** encoding scheme used */
- final static String ENCODING = "8859_1";
-
- /** size of a pdb header in bytes */
- final static int HEADER_SIZE = 78;
-
- /**
- * This method converts a 4 letter string into the Palm ID integer.
- *
- * It is normally used to convert the Palm creator ID string into
- * the integer version of it. Also use for data types, etc.
- *
- * @param s 4 character string.
- * @return int Palm ID representing the string.
- * @throws ArrayIndexOutOfBoundsException if string parameter
- * contains less than 4 characters.
- */
-
- public static int intID(String s) {
-
- int id = -1;
- int temp = 0;
-
- // grab the first char and put it in the high bits
- // note that we only want 8 lower bits of it.
- temp = (int) s.charAt(0);
- id = temp << 24;
-
- // grab the second char and add it in.
- temp = ((int) s.charAt(1)) & 0x00ff;
- id += temp << 16;
-
- // grab the second char and add it in.
- temp = ((int) s.charAt(2)) & 0x00ff;
- id += temp << 8;
-
- // grab the last char and add it in
- id += ((int) s.charAt(3)) & 0x00ff;
-
- return id;
- }
-
- /**
- * This method converts an integer into a String given
- * the Palm ID format.
- *
- * @param i Palm id.
- * @return String string representation.
- */
-
- public static String stringID(int i) {
-
- char ch[] = new char[4];
- ch[0] = (char) (i >>> 24);
- ch[1] = (char) ((i >> 16) & 0x00ff);
- ch[2] = (char) ((i >> 8) & 0x00ff);
- ch[3] = (char) (i & 0x00ff);
-
- return new String(ch);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PalmDB.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PalmDB.java
deleted file mode 100644
index 7a897627ff9d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/PalmDB.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.DataOutputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-/**
- * <p>This class contains data for a single Palm database for use during
- * a conversion process.</p>
- *
- * <p>It contains zero or more <code>Record</code> objects stored in an
- * array. The index of the <code>Record</code> object in the array is
- * the record id or number for that specific <code>Record</code> object.
- * Note that this class does not check for maximum number of records
- * allowable in an actual pdb.</p>
- *
- * <p>This class also contains the pdb name associated with the Palm database
- * it represents. A pdb name consists of 32 bytes of a certain encoding
- * (extended ASCII in this case).</p>
- *
- * <p>The non default constructors take in a name parameter which may not
- * be the exact pdb name to be used. The name parameter in
- * <code>String</code> or <code>byte[]</code> are converted to an exact
- * <code>NAME_LENGTH</code> byte array. If the length of the name is less
- * than <code>NAME_LENGTH</code>, it is padded with '\0' characters. If it
- * is more, it gets truncated. The last character in the resulting byte
- * array is always a '\0' character. The resulting byte array is stored in
- * <code>bName</code>, and a corresponding String object <code>sName</code>
- * that contains characters without the '\0' characters.</p>
- *
- * <p>The {@link #write write} method is called within the
- * {@link zensync.util.palm.PalmDBSet#write PalmDBSet.write} method
- * for writing out its data to the <code>OutputStream</code> object.</p>
- *
- * <p>The {@link #read read} method is called within the
- * {@link zensync.util.palm.PalmDBSet#read PalmDBSet.read} method
- * for reading in its data from the <code>InputStream</code> object.</p>
- *
- * @author Akhil Arora, Herbie Ong
- * @see PalmDBSet
- * @see Record
- */
-
-public final class PalmDB {
-
- /** number of bytes for the name field in the pdb */
- public final static int NAME_LENGTH = 32;
-
- /** list of Record objects */
- private Record[] records;
-
- /** pdb name in bytes */
- private byte[] bName = null;
-
- /** pdb name in String */
- private String sName = null;
-
-
- /**
- * Default constructor for use after a read().
- */
-
- public PalmDB() {
-
- records = new Record[0];
- }
-
- /**
- * Constructor to create object with Record objects.
- * recs.length can be zero for an empty pdb.
- *
- * @param name suggested pdb name in String
- * @param recs array of Record objects
- * @throws NullPointerException if recs is null
- */
-
- public PalmDB(String name, Record[] recs)
- throws UnsupportedEncodingException {
-
- this(name.getBytes(PDBUtil.ENCODING), recs);
- }
-
- /**
- * Constructor to create object with Record objects.
- * recs.length can be zero for an empty pdb.
- *
- * @param name suggested pdb name in byte array
- * @param recs array of Record objects
- * @throws NullPointerException if recs is null
- */
-
- public PalmDB(byte[] name, Record[] recs)
- throws UnsupportedEncodingException {
-
- store(name);
-
- records = new Record[recs.length];
- System.arraycopy(recs, 0, records, 0, recs.length);
- }
-
- /**
- * This private method is mainly used by the constructors above.
- * to store bytes into name and also create a String representation.
- * and also by the read method.
- *
- * TODO: Note that this method assumes that the byte array parameter
- * contains one character per byte, else it would truncate
- * improperly.
- *
- * @param bytes pdb name in byte array
- * @throws UnsupportedEncodingException if ENCODING is not supported
- */
-
- private void store(byte[] bytes) throws UnsupportedEncodingException {
-
- // note that this will initialize all bytes in name to 0.
- bName = new byte[NAME_LENGTH];
-
- // determine minimum length to copy over from bytes to bName.
- // Note that the last byte in bName has to be '\0'.
-
- int lastIndex = NAME_LENGTH - 1;
-
- int len = (bytes.length < lastIndex)? bytes.length: lastIndex;
-
- int i;
-
- for (i = 0; i < len; i++) {
-
- if (bytes[i] == 0) {
- break;
- }
-
- bName[i] = bytes[i];
- }
-
- // set sName, no need to include the '\0' character.
- sName = new String(bName, 0, i, PDBUtil.ENCODING);
- }
-
- /**
- * Return the number of records contained in this
- * pdb PalmDB object.
- *
- * @return int number of Record objects
- */
-
- public int getRecordCount() {
-
- return records.length;
- }
-
- /**
- * Return the specific Record object associated
- * with the record number.
- *
- * @param index record index number
- * @return Record the Record object in the specified index
- * @throws ArrayIndexOutOfBoundsException if index is out of bounds
- */
-
- public Record getRecord(int index) {
-
- return records[index];
- }
-
- /**
- * Return the list of Record objects
- *
- * @return Record[] the list of Record objects
- */
-
- public Record[] getRecords() {
-
- return records;
- }
-
- /**
- * Return the PDBName associated with this object in String
- *
- * @return String pdb name in String
- */
-
- public String getPDBNameString() {
-
- return sName;
- }
-
- /**
- * Return the PDBName associated with this object
- * in byte array of exact length of 32 bytes.
- *
- * @return byte[] pdb name in byte[] of length 32.
- */
-
- public byte[] getPDBNameBytes() {
-
- return bName;
- }
-
- /**
- * Write out the number of records followed by what
- * will be written out by each Record object.
- *
- * @param os the stream to write the object to
- * @throws IOException if any I/O error occurs
- */
-
- public void write(OutputStream os) throws IOException {
-
- DataOutputStream out = new DataOutputStream(os);
-
- // write out pdb name
- out.write(bName);
-
- // write out 2 bytes for number of records
- out.writeShort(records.length);
-
- // let each Record object write out its own info.
- for (int i = 0; i < records.length; i++)
- records[i].write(out);
- }
-
- /**
- * Read the necessary data to create a pdb from
- * the input stream.
- *
- * @param is the stream to read data from in order
- * to restore the object
- * @throws IOException if any I/O error occurs
- */
-
- public void read(InputStream is) throws IOException {
-
- DataInputStream in = new DataInputStream(is);
-
- // read in the pdb name.
- byte[] bytes = new byte[NAME_LENGTH];
- in.readFully(bytes);
- store(bytes);
-
- // read in number of records
- int nrec = in.readUnsignedShort();
- records = new Record[nrec];
-
- // read in the Record infos
- for (int i = 0; i < nrec; i++) {
-
- records[i] = new Record();
- records[i].read(in);
- }
- }
-
- /**
- * Override equals method of Object.
- *
- * 2 PalmDB objects are equal if they contain the same information,
- * i.e. pdb name and records.
- *
- * This is used primarily for testing purposes only for now.
- *
- * @param obj a PalmDB object to compare with
- * @return boolean true if obj is equal to this, else false.
- */
-
- public boolean equals(Object obj) {
-
- boolean bool = false;
-
- if (obj instanceof PalmDB) {
-
- PalmDB pdb = (PalmDB) obj;
-
- checkLabel: {
-
- // compare sName
-
- if (!sName.equals(pdb.sName)) {
-
- break checkLabel;
- }
-
- // compare bName
-
- if (bName.length != pdb.bName.length) {
-
- break checkLabel;
- }
-
- for (int i = 0; i < bName.length; i++) {
-
- if (bName[i] != pdb.bName[i]) {
-
- break checkLabel;
- }
- }
-
- // compare each Record
-
- if (records.length != pdb.records.length) {
-
- break checkLabel;
- }
-
- for (int i = 0; i < records.length; i++) {
-
- if (!records[i].equals(pdb.records[i])) {
-
- break checkLabel;
- }
- }
-
- // all checks done
- bool = true;
- }
- }
-
- return bool;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/README b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/README
deleted file mode 100644
index ad08e7592d0d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/README
+++ /dev/null
@@ -1,10 +0,0 @@
-Building the Comparator code
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-To build the comparator code, the following is required in your classpath.
-
- xerces.jar
- xmerge.jar
-
-To Build type
-
- javac *.java
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/Record.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/Record.java
deleted file mode 100644
index 21478ac13ca4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/Record.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.DataOutputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-
-/**
- * <p>Contains the raw bytes for a record in a pdb.</p>
- *
- * <p>Note that it is not associated with a record number or id.</p>
- *
- * @author Akhil Arora, Herbie Ong
- * @see PalmDB
- */
-
-
-public final class Record {
-
- /** record bytes */
- private byte[] data;
-
- /**
- * Default constructor.
- */
-
- public Record() {
-
- data = new byte[0];
- }
-
- /**
- * Constructor to create a Record filled with bytes.
- * Note that this does not check for 64k record sizes.
- * User of this class has to check for that.
- *
- * @param d byte array contents for this object.
- */
-
- public Record(byte[] d) {
-
- data = new byte[d.length];
- System.arraycopy(d, 0, data, 0, d.length);
- }
-
- /**
- * This method returns the number of bytes in this object.
- *
- * @return int number of bytes in this object.
- */
-
- public int getSize() {
-
- return data.length;
- }
-
- /**
- * This method returns the contents of this object.
- *
- * @return byte[] contents in byte array
- */
-
- public byte[] getBytes() {
-
- return data;
- }
-
- /**
- * Write out the record length followed by the data
- * in this Record object.
- *
- * @param out the stream to write the object to
- * @throws IOException if any I/O error occurs
- */
-
-
- public void write(OutputStream outs) throws IOException {
-
- DataOutputStream out = new DataOutputStream(outs);
- out.writeShort(data.length);
- out.write(data);
- }
-
- /**
- * Read the necessary data to create a pdb from
- * the input stream.
- *
- * @param in the stream to read data from in order to
- * restore the object
- * @throws IOException if any I/O error occurs
- */
-
- public void read(InputStream ins) throws IOException {
-
- DataInputStream in = new DataInputStream(ins);
- int len = in.readUnsignedShort();
- data = new byte[len];
- in.readFully(data);
- }
-
- /**
- * Override equals method of Object.
- *
- * 2 Record objects are equal if they contain the same bytes
- * in the array.
- *
- * This is used primarily for testing purposes only for now.
- *
- * @param obj a Record object to compare with
- * @return boolean true if obj is equal to this, else false.
- */
-
- public boolean equals(Object obj) {
-
- boolean bool = false;
-
- if (obj instanceof Record) {
-
- Record rec = (Record) obj;
-
- checkLabel: {
-
- if (rec.getSize() == data.length) {
-
- for (int i = 0; i < data.length; i++) {
-
- if (data[i] != rec.data[i]) {
- break checkLabel;
- }
- }
-
- bool = true;
- }
- }
- }
-
- return bool;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/SimplePdbCompare.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/SimplePdbCompare.java
deleted file mode 100644
index 3ec50e424dad..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/SimplePdbCompare.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-/*
- * SimplePdbCompare.java
- *
- * Created on September 21, 2001, 10:23 AM
- */
-
-/**
- *
- * @author mh101528
- * @version
- */
-public final class SimplePdbCompare {
-
- /** Creates new SimplePdbCompare */
- public SimplePdbCompare() {
- }
-
- /**
- * @param args the command line arguments
- */
- public static void main (String args[])
- {
- SimplePdbCompare comparator = new SimplePdbCompare();
- if (comparator.comparePDB(args[0], args[1]))
- System.exit(2);
- else
- System.exit(3);
- }
-
- public boolean comparePDB(String pdbname1, String pdbname2)
- {
- PalmDB pdb1=null, pdb2=null;
- PDBDecoder decoder = new PDBDecoder();
- try
- {
- pdb1 = decoder.parse(pdbname1);
- }
- catch (Exception e)
- {
- System.out.println("Could not parse PDB " + pdbname1);
- return false;
- }
-
- try
- {
- pdb2 = decoder.parse(pdbname2);
- }
- catch (Exception e)
- {
- System.out.println("Could not parse PDB " + pdbname2);
- return false;
- }
-
- if (pdb1.equals(pdb2))
- {
- //writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are equal");
- System.out.println("PDB " + pdbname1 + " and PDB " + pdbname2 + " are equal");
- return true;
- }
- else
- {
- //writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are not equal");
- System.out.println("PDB " + pdbname1 + " and PDB " + pdbname2 + " are not equal");
- return false;
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.java
deleted file mode 100644
index 65a24b5c82a2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.BufferedInputStream;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.FileNotFoundException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.io.PrintWriter;
-import java.util.Vector;
-import java.util.Properties;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-/**
- * This class will diff 2 Xml files.
- *
- * @author Stephen Mak
- */
-
-public final class XmlDiff {
-
- private static final String PROPSFILE = "XmlDiff.properties";
- private static final String FILE1 = "XmlDiff.file1";
- private static final String FILE2 = "XmlDiff.file2";
- private static final String OUTPUT= "XmlDiff.output";
- private static final String IGNORE_TAGS= "XmlDiff.tags";
-
- private Properties props_ = null;
- private static PrintWriter writer_ = null;
- private String[] tags_ = null;
- private String file1_ = null;
- private String file2_ = null;
-
- /**
- * Constructor. Load the properties file.
- */
-
- public XmlDiff() throws IOException {
-
- Class c = this.getClass();
- InputStream is = c.getResourceAsStream(PROPSFILE);
- BufferedInputStream bis = new BufferedInputStream(is);
- props_ = new Properties();
- props_.load(bis);
- bis.close();
-
- String file1 = props_.getProperty(FILE1, "");
- String file2 = props_.getProperty(FILE2, "");
- String tagsString = props_.getProperty(IGNORE_TAGS, "");
- String output = props_.getProperty("debug.output", "System.out");
- setOutput(output);
- tags_ = parseTags(tagsString);
- }
-
- /**
- * diff 2 xml, but overwrite the property file's file1/2 setting with
- * the input argument
- */
- public boolean diff(String file1, String file2) throws IOException {
- file1_ = file1;
- file2_ = file2;
- return diff();
- }
-
- public boolean diff() throws IOException {
-
- boolean result = false;
-
- writer_.println("parsing "+ file1_ + "...");
- // parse the Xml file
- Document doc1 = parseXml(file1_);
-
- writer_.println("parsing "+ file1_ + "...");
- Document doc2 = parseXml(file2_);
-
- if (doc1 != null && doc2 != null) {
- writer_.println("diffing "+ file1_ + " & " + file2_ + "...");
- result = compareNode(doc1, doc2);
- }
- return result;
- }
-
- private void diffLog(String errMsg, Node node1, Node node2) {
-
- String node1Str = "";
- String node2Str = "";
-
- if (node1 != null) {
- node1Str = "[Type]:" + nodeInfo(node1) +
- " [Name]:" + node1.getNodeName();
- if (node1.getNodeValue() != null)
- node1Str += " [Value]:" + node1.getNodeValue();
- }
-
- if (node2 != null) {
- node2Str = "[Type]:" + nodeInfo(node2) +
- " [Name]:" + node2.getNodeName();
- if (node2.getNodeValue() != null)
- node2Str += " [Value]:" + node2.getNodeValue();
- }
-
- writer_.println(errMsg);
- writer_.println(" Node1 - " + node1Str);
- writer_.println(" Node2 - " + node2Str);
- }
-
- private String nodeInfo(Node node) {
-
- String str = null;
- switch (node.getNodeType()) {
-
- case Node.ELEMENT_NODE:
- str = "ELEMENT";
- break;
- case Node.ATTRIBUTE_NODE:
- str = "ATTRIBUTE";
- break;
- case Node.TEXT_NODE:
- str = "TEXT";
- break;
- case Node.CDATA_SECTION_NODE:
- str = "CDATA_SECTION";
- break;
- case Node.ENTITY_REFERENCE_NODE:
- str = "ENTITY_REFERENCE";
- break;
- case Node.ENTITY_NODE:
- str = "ENTITY";
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- str = "PROCESSING_INSTRUCTION";
- break;
- case Node.COMMENT_NODE:
- str = "COMMENT";
- break;
- case Node.DOCUMENT_NODE:
- str = "DOCUMENT";
- break;
- case Node.DOCUMENT_TYPE_NODE:
- str = "DOCUMENT_TYPE";
- break;
- case Node.DOCUMENT_FRAGMENT_NODE:
- str = "DOCUMENT_FRAGMENT";
- break;
- case Node.NOTATION_NODE:
- str = "NOTATION";
- break;
- }
- return str;
- }
-
- private boolean ignoreTag(String nodeName) {
-
-
- if (tags_ != null) {
- for (int i = 0; i < tags_.length; i++) {
- if (tags_[i].equals(nodeName))
- return true;
- }
- }
- return false;
- }
-
- // for future use if we want to compare attributes
- private boolean attributesEqual(Node node1, Node node2) {
- return true;
- }
-
- private boolean compareNode(Node node1, Node node2) {
- boolean equal = false;
-
- while (true) {
-
- if (node1 == null && node2 == null) {
- equal = true;
- break;
- } else if (node1 == null || node2 == null) {
- diffLog("DIFF: one of the node is null", node1, node2);
- break;
- }
-
- if (node1.getNodeType() != node2.getNodeType()) {
- diffLog("DIFF: nodetype is different", node1, node2);
- break;
- }
-
- if (node1.getNodeName() == null && node2.getNodeName() == null) {
- // empty
- } else if (node1.getNodeName() == null ||
- node2.getNodeName() == null) {
- diffLog("DIFF: one of the nodeName is null", node1, node2);
- break;
- } else if (!node1.getNodeName().equals(node2.getNodeName())) {
- diffLog("DIFF: nodeName is different", node1, node2);
- break;
- }
-
- if (ignoreTag(node1.getNodeName())) {
- diffLog("DIFF: Some tag(s) is ignored", node1, node2);
- equal = true;
- break;
- }
-
- if (node1.getNodeValue() == null && node2.getNodeValue() == null) {
- // empty
- } else if (node1.getNodeValue() == null ||
- node2.getNodeValue() == null) {
- diffLog("DIFF: one of the nodevalue is null", node1, node2);
- break;
- } else if (!node1.getNodeValue().equals(node2.getNodeValue())) {
- diffLog("DIFF: nodeValue is different", node1, node2);
- break;
- }
-
- // try to compare attributes if necessary
- if (!attributesEqual(node1, node2))
- break;
-
- NodeList node1Children = node1.getChildNodes();
- NodeList node2Children = node2.getChildNodes();
-
- // number of children have to be the same
- if (node1Children == null && node2Children == null) {
- equal = true;
- break;
- }
-
- if (node1Children == null || node2Children == null) {
- diffLog("DIFF: one node's children is null", node1, node2);
- break;
- }
-
- if (node1Children.getLength() != node2Children.getLength()) {
- diffLog("DIFF: num of children is different", node1, node2);
- break;
- }
-
- // compare all the childrens
- equal = true;
-
- for (int i = 0; i < node1Children.getLength(); i++) {
- if (!compareNode(node1Children.item(i),
- node2Children.item(i))) {
- equal = false;
- break;
- }
- }
- break;
- }
-
- return equal;
- }
-
- private Document parseXml (String filename) throws IOException {
-
- Document w3cDocument = null;
-
- FileInputStream fis;
-
- try {
- fis = new FileInputStream(filename);
- } catch (FileNotFoundException ex) {
- ex.printStackTrace(writer_);
- writer_.println(ex.getMessage());
- return w3cDocument;
- }
-
- /** factory for DocumentBuilder objects */
- DocumentBuilderFactory factory = null;
- factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- factory.setValidating(false);
-
- /** DocumentBuilder object */
- DocumentBuilder builder = null;
-
- try {
- builder = factory.newDocumentBuilder();
- } catch (ParserConfigurationException ex) {
- ex.printStackTrace(writer_);
- writer_.println(ex.getMessage());
- return null;
- }
-
-
- builder.setErrorHandler(
- new org.xml.sax.ErrorHandler() {
- // ignore fatal errors (an exception is guaranteed)
- public void fatalError(SAXParseException e)
- throws SAXException {
- throw e;
- }
-
- public void error(SAXParseException e)
- throws SAXParseException {
- // make sure validation error is thrown.
- throw e;
- }
-
- public void warning(SAXParseException e)
- throws SAXParseException {
- }
- }
- );
-
- try {
- w3cDocument = builder.parse(fis);
- w3cDocument.getDocumentElement().normalize();
- } catch (SAXException ex) {
- ex.printStackTrace(writer_);
- writer_.println(ex.getMessage());
- return w3cDocument;
- }
-
- return w3cDocument;
- }
-
- private String [] parseTags(String tagsString) {
- Vector tagsVector = new Vector();
- if (tagsString.length() == 0)
- return null;
-
- int start = 0;
- int end = 0;
- // break the tag string into a vector of strings by words
- for (end = tagsString.indexOf(" ", start);
- end != -1 ;
- start = end + 1, end = tagsString.indexOf(" ", start)) {
- tagsVector.add(tagsString.substring(start,end));
- }
-
- tagsVector.add(tagsString.substring(start,tagsString.length()));
-
- // convert the vector to array
- String[] tags= new String[tagsVector.size()];
- tagsVector.copyInto(tags);
-
- return tags;
- }
-
-
- /**
- * Set the output to the specified argument.
- * This method is only used internally to prevent
- * invalid string parameter.
- *
- * @param str output specifier
- */
- private static void setOutput(String str) {
-
- if (writer_ == null) {
-
- if (str.equals("System.out")) {
-
- setOutput(System.out);
-
- } else if (str.equals("System.err")) {
-
- setOutput(System.err);
-
- } else {
-
- try {
-
- setOutput(new FileWriter(str));
-
- } catch (IOException e) {
-
- e.printStackTrace(System.err);
- }
- }
- }
- }
-
- /**
- * Set the output to an OutputStream object.
- *
- * @param stream OutputStream object
- */
-
- private static void setOutput(OutputStream stream) {
-
- setOutput(new OutputStreamWriter(stream));
- }
-
- /**
- * Set the Writer object to manage the output.
- *
- * @param w Writer object to write out
- */
-
- private static void setOutput(Writer w) {
-
- if (writer_ != null) {
-
- writer_.close();
- }
-
- writer_ = new PrintWriter(new BufferedWriter(w), true);
- }
-
- public static void main(String args[]) throws IOException {
-
- if (args.length != 0 && args.length != 2) {
- System.out.println("Usage: XmlDiff [<file1> <file2>].");
- return;
- }
-
- XmlDiff xmldiff = new XmlDiff();
-
- boolean same = false;
- if (args.length == 2) {
- same = xmldiff.diff(args[0], args[1]);
- } else {
- same = xmldiff.diff();
- }
-
- System.out.println("Diff result: " + same);
- if (same)
- {
- System.out.println("XMLDIFFRESULT:PASSED");
- } else {
- System.out.println("XMLDIFFRESULT:FAILED");
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.properties b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.properties
deleted file mode 100644
index 513add086214..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlDiff.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# $Id: XmlDiff.properties,v 1.1 2002-04-16 13:53:20 aidan Exp $
-#
-# This properties file provides info for XmlDiff program
-# XmlDiff.file1 is the first input XML file
-# XmlDiff.file2 is the second input XML file
-# XmlDiff.output is where the output (err/message) go
-# XmlDiff.tags are what tagname should ignore (and the subtree under it)
-#
-XmlDiff.file1=test1.xml
-XmlDiff.file2=test2.xml
-XmlDiff.output=System.err
-XmlDiff.tags=
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlWrapper.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlWrapper.java
deleted file mode 100644
index 325e97262be0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlWrapper.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-import java.io.IOException;
-import java.io.File;
-import java.util.zip.*;
-
-public class XmlWrapper
-{
- public static void main(String args[]) throws IOException
- {
- System.out.println("args.length is " + args.length);
- if (args.length < 2) {
- System.out.println("Usage: java XmlWrapper [<zipfile1> <zipfile2>].");
- //return;
- System.exit(-1);
-
- }
-
- XmlWrapper w = new XmlWrapper();
- File currdirfp = null;
- try {
- currdirfp = new File(".");
- } catch (Exception fx) {
- System.out.println("Could not get File instance for current directory \n");
- //return;
- System.exit(-1);
- }
-
- File f1 = null;
- File f2 = null;
- String fname1,fname2;
- try {
- f1 = File.createTempFile("xmlcomp", ".tmp", currdirfp);
- f2 = File.createTempFile("xmlcomp", ".tmp", currdirfp);
- } catch (Exception tx) {
- System.out.println("Could not create TempFile ");
- System.out.println("Exception: " + tx.toString());
- //return;
- System.exit(-1);
- }
-
- fname1 = f1.getAbsolutePath();
- fname2 = f2.getAbsolutePath();
-
- // get content.xml file from zip file and copy it to temporary
- // filename
- XmlZipExtract xw1 = new XmlZipExtract(args[0]);
- try {
- xw1.getContentXml(fname1);
- } catch (ZipException e) {
- System.out.println("Exception: file is not a ZIP file: " + args[0]);
- f1.delete();
- f2.delete();
- //return;
- System.exit(-1);
- } catch (Exception e) {
- System.out.println("Exception: Could not extract XML from " + args[0]);
- System.out.println("Exception: " + e.toString());
- f1.delete();
- f2.delete();
- //return;
- System.exit(-1);
- }
-
- // get content.xml file from zip file and copy it to temporary
- // filename
- XmlZipExtract xw2 = new XmlZipExtract(args[1]);
- try {
- xw2.getContentXml(fname2);
- } catch (ZipException e) {
- System.out.println("Exception: file is not a ZIP file: " + args[0]);
- f1.delete();
- f2.delete();
- //return;
- System.exit(-1);
- } catch (Exception ex) {
- System.out.println(ex.getMessage());
- System.out.println("Exception: Could not extract XML from " + args[1]);
- System.out.println("Exception: " + ex.toString());
- f1.delete();
- f2.delete();
- //return;
- System.exit(-1);
- }
-
- boolean same = false;
-
- try
- {
- XmlDiff xmldiff = new XmlDiff();
-
- if (args.length == 2) {
- same = xmldiff.diff(fname1, fname2);
- } else {
- same = xmldiff.diff();
- }
- }
- catch (Exception ex)
- {
- System.out.println("XmlDiff failed");
- System.out.println("Exception: " + ex.toString());
- f1.delete();
- f2.delete();
- //return;
- System.exit(-1);
- }
-
- System.out.println("Diff result: " + same);
- if (same)
- {
- System.out.println("XMLDIFFRESULT:PASSED");
- } else {
- System.out.println("XMLDIFFRESULT:FAILED");
- }
-
- f1.delete();
- f2.delete();
-
- if (same)
- {
- System.exit(2);
- }
- else
- {
- System.exit(3);
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlZipExtract.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlZipExtract.java
deleted file mode 100644
index 0676b6d01fbd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/XmlZipExtract.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.RandomAccessFile;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.Enumeration;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipEntry;
-
-public class XmlZipExtract
-{
-
- public static final String CONTENT = "Content.xml";
- public static final String OLDCONTENT = "content.xml";
- private static final int BUFFER_SIZE = 2048;
-
-
- /**
- * Full path of the Zip file to process.
- */
- private String filename = null;
-
-
- /**
- * Constructor
- *
- * @param filename Full Path to Zip file to process
- *
- */
- public XmlZipExtract(String filename) {
- this.filename = filename;
- }
-
- /**
- * Copies Content.xml from zip file onto the filename passed as
- * an argument
- *
- * @param fname Full Path to file to which contents have to be copied
- *
- */
- public void getContentXml(String fname) throws IOException
- {
- try
- {
- getContentXmlInt(fname, XmlZipExtract.CONTENT);
- }
- catch (NullPointerException e1)
- {
- // If the new name of the content file failed, try
- // the older name.
- //
- System.out.println(filename + " Content.xml does not exist, trying content.xml...");
- try
- {
- getContentXmlInt(fname, XmlZipExtract.OLDCONTENT);
- }
- catch (NullPointerException e2)
- {
- System.out.println(filename + " content.xml does not exist, trying content.xml...");
- throw e2;
- }
- }
- }
-
- public void getContentXmlInt(String fname, String cname) throws IOException
- {
- byte b[] = getEntry(cname);
-
- RandomAccessFile raf=null;
- raf = new RandomAccessFile(fname, "rw");
- raf.write(b);
- raf.close();
- }
-
- /**
- * Get the specified entry in the zip file as a stream.
- *
- * @param entryName The name of the entry in the zipfile to get.
- * This should be one of the constants defined above.
- *
- * @return byte[] bits for entryName
- *
- * @throws IOException if something goes wrong
- */
- public byte[] getEntry(String entryName) throws IOException
- {
- ZipFile zf = new ZipFile(filename);
- ZipEntry ze = zf.getEntry(entryName);
- byte[] bits = readStream(zf.getInputStream(ze));
- zf.close();
- return bits;
- }
-
-
- /**
- * Read an InputStream into an array of bytes.
- *
- * @param is InputStream of data from Zip file
- *
- * @return an array of Bytes
- */
- private byte[] readStream(InputStream is) throws IOException
- {
- BufferedInputStream bis = new BufferedInputStream(is);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] buffer = new byte[BUFFER_SIZE];
- int eof = 0;
- while ((eof = bis.read(buffer, 0, buffer.length)) > 0) {
- baos.write(buffer, 0, eof);
- }
-
- return baos.toByteArray();
- }
-}
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/comparator.pl b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/comparator.pl
deleted file mode 100755
index 2711455ff8a5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/comparator.pl
+++ /dev/null
@@ -1,245 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-$compare_home = "$ENV{QA_COMPARATOR_HOME}";
-
-if ($ENV{'CLASSPATH'})
-{
- $classpath_val = "$compare_home:$ENV{'CLASSPATH'}";
-}
-else
-{
- $classpath_val = "$compare_home";
-}
-
-print "classpath is $classpath_val\n";
-
-$list_file="";
-$orig_dir="";
-$new_dir="";
-$diff_type="";
-
-####### BEGIN MAIN ##############
-$cmdline_len = @ARGV;
-if ($cmdline_len <= 0)
-{
- print_usage();
- exit (0);
-}
-
-process_cmdline(@ARGV);
-print_env();
-open (LOGFILE, ">$logfile") || die "Cannot open log file $logfile";
-if ($test_list ne "")
-{
- open (TESTLIST, $test_list) || die "Couldn't open diff list file $test_list";
-
- while (<TESTLIST>)
- {
- chomp $_;
- process_diff(get_file_title($_));
- }
-}
-close TESTLIST;
-close LOGFILE;
-
-####### END MAIN ##############
-
-sub process_diff
-{
- $_[0] =~ tr/A-Z/a-z/;
-
- # chdir to the output directory so the temporary files created by
- # the java programs are put in the right place.
- #
- chdir ($xml_new);
-
- if ($diff_type eq "xml")
- {
- # Ugly hack, probably a way to tell xerces directly that the dtd's
- # are in $compare_home/dtd.
- #
- `cp $compare_home/dtd/* $xml_new`;
-
- $cmd = "java -classpath $classpath_val XmlWrapper $xml_orig/$_[0].sxw $xml_new/$_[0].sxw";
- $val = system($cmd)/256;
- if ($val == 2)
- {
- print LOGFILE "$_[0]|TRUE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
- }
- elsif($val == 3)
- {
- print LOGFILE "$_[0]|FALSE|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
- }
- else
- {
- print LOGFILE "$_[0]|ERROR|$xml_orig/$_[0].sxw|$xml_new/$_[0].sxw\n";
- }
- }
- elsif ($diff_type eq "pdb")
- {
- $cmd = "java -classpath $classpath_val SimplePdbCompare $pdb_orig/$_[0].pdb $pdb_new/$_[0].pdb\n";
- print "Executing: $cmd\n";
- $val = system($cmd)/256;
- if ($val == 2)
- {
- print LOGFILE "$_[0]|TRUE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
- }
- elsif($val == 3)
- {
- print LOGFILE "$_[0]|FALSE|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
- }
- else
- {
- print LOGFILE "$_[0]|ERROR|$pdb_orig/$_[0].pdb|$pdb_new/$_[0].pdb\n";
- }
- }
- else
- {
- die "Don't understand test type of $diff_type.";
- }
-}
-
-sub process_cmdline
-{
- foreach $i (@_)
- {
- @arg= split('=', $i);
- @arg[0] =~ tr/A-Z/a-z/;
-
- if (@arg[0] eq "-pdb-orig")
- {
- $pdb_orig=$arg[1];
- }
- elsif (@arg[0] eq "-pdb-new")
- {
- $pdb_new=$arg[1];
- }
- elsif (@arg[0] eq "-xml-orig")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "-xml-new")
- {
- $xml_new=$arg[1];
- }
- elsif (@arg[0] eq "-env")
- {
- set_env_from_props($arg[1]);
- }
- elsif (@arg[0] eq "-list")
- {
- $test_list = $arg[1];
- }
- elsif (@arg[0] eq "-one")
- {
- $infile = $arg[1];
- }
- elsif (@arg[0] eq "-type")
- {
- $diff_type = $arg[1];
- chomp $diff_type;
- }
- elsif (@arg[0] eq "-log")
- {
- $logfile = $arg[1];
- }
- else
- {
- print_usage();
- die "Incorrect command line. Don't understand $i";
- }
- }
-}
-
-sub set_env_from_props
-{
- open(PROPSFILE, $_[0]) || die "Could not open properties file";
-
- while (<PROPSFILE>)
- {
- chomp $_;
- @arg = split('=', $_);
- @arg[0] =~ tr/a-z/A-Z/;
- $len = @arg;
- if ($len != 2)
- {
- die "Malformed property in $ARGV[0]";
- }
-
- if (@arg[0] eq "PDB_ORIG")
- {
- $pdb_orig=$arg[1];
- }
- elsif (@arg[0] eq "PDB_NEW")
- {
- $pdb_new=$arg[1];
- }
- elsif (@arg[0] eq "XML_ORIG")
- {
- $xml_orig=$arg[1];
- }
- elsif (@arg[0] eq "XML_NEW")
- {
- $xml_new=$arg[1];
- }
-
- }
- close PROPSFILE;
-}
-
-sub print_usage
-{
- print "Usage : compartor.pl - compare Office or pdb files\n";
- print "\t-one=<file> :\t\t individual test case file to run\n";
- print "\t-list=<file> :\t\t list of test case files\n";
- print "\t-env=<file> :\t\t Properites like file defining env\n";
- print "\t-pdb-orig=<path> :\t directory to hold original pdb files\n";
- print "\t-pdb-new=<path> :\t directory to hold new pdb files\n";
- print "\t-xml-orig=<path> :\t directory to hold original office documents\n";
- print "\t-xml-new=<path> :\t directory to hold new office documents\n";
- print "\t-type=<xml|pdb> :\t Invokes the merge option when converting\n";
- print "\t-log=<logfile> :\t Save results to logfile.\n";
-}
-
-sub print_env
-{
- print "Using the following environment:\n";
- print "\tPDB_ORIG = $pdb_orig\n";
- print "\tPDB_NEW = $pdb_new\n";
- print "\tXML_ORIG = $xml_orig\n";
- print "\tXML_NEW = $xml_new\n\n";
-}
-
-sub get_file_title
-{
- @paths = split('\/', $_[0]);
- $len = @paths;
- @names = split('\.', @paths[$len-1]);
- return $names[0];
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/Blocklist.dtd b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/Blocklist.dtd
deleted file mode 100644
index f7bb8eb321bb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/Blocklist.dtd
+++ /dev/null
@@ -1,34 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<!ELEMENT block-list:block-list (block-list:block*) >
-<!ATTLIST block-list:block-list
- block-list:list-name CDATA #REQUIRED>
-<!ELEMENT block-list:block EMPTY>
-<!ATTLIST block-list:block
- block-list:abbreviated-name CDATA #REQUIRED
- block-list:package-name CDATA #REQUIRED
- block-list:name CDATA #REQUIRED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/chart.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/chart.mod
deleted file mode 100644
index 70cbe483ca9c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/chart.mod
+++ /dev/null
@@ -1,228 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-
-<!ENTITY % chart-class "(line|area|circle|ring|scatter|radar|bar|stock|add-in)">
-<!ENTITY % chart-solid-type "(cuboid|cylinder|cone|pyramid)">
-
-<!-- Chart element -->
-<!ELEMENT chart:chart ( chart:title?, chart:subtitle?, chart:legend?,
- chart:plot-area,
- table:table? )>
-<!ATTLIST chart:chart
- chart:class %chart-class; #REQUIRED
- chart:add-in-name %string; #IMPLIED
- chart:table-number-list %string; #IMPLIED
- draw:name %string; #IMPLIED
- %draw-position;
- %draw-size;
- %draw-style-name;
- chart:style-name %styleName; #IMPLIED>
-
-<!ATTLIST chart:chart %presentation-class; >
-<!ATTLIST chart:chart %zindex;>
-<!ATTLIST chart:chart %draw-end-position; >
-<!ATTLIST chart:chart draw:id %draw-shape-id; >
-<!ATTLIST chart:chart draw:layer %layerName; #IMPLIED>
-
-<!ATTLIST style:properties
- chart:scale-text %boolean; "true"
- chart:stock-updown-bars %boolean; "false"
- chart:stock-with-volume %boolean; "false"
- chart:three-dimensional %boolean; "false"
- chart:deep %boolean; "false"
- chart:lines %boolean; "false"
- chart:percentage %boolean; "false"
- chart:solid-type %chart-solid-type; "cuboid"
- chart:splines %nonNegativeInteger; "0"
- chart:stacked %boolean; "false"
- chart:symbol %integer; "-1"
- chart:vertical %boolean; "false"
- chart:lines-used %nonNegativeInteger; "0"
- chart:connect-bars %boolean; "false">
-
-<!-- Main/Sub Title -->
-<!-- the cell-address attribute is currently not supported for titles -->
-<!ELEMENT chart:title (text:p)?>
-<!ATTLIST chart:title
- table:cell-range %cell-address; #IMPLIED
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ELEMENT chart:subtitle (text:p)?>
-<!ATTLIST chart:subtitle
- table:cell-range %cell-address; #IMPLIED
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- you must specify either a legend-position or both, x and y coordinates -->
-<!ELEMENT chart:legend EMPTY>
-<!ATTLIST chart:legend
- chart:legend-position (top|left|bottom|right) "right"
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- Plot-Area specification -->
-
-<!ELEMENT chart:plot-area (dr3d:light*,
- chart:axis*,
- chart:categories?,
- chart:series*,
- chart:wall?,
- chart:floor?) >
-
-<!ATTLIST chart:plot-area
- svg:x %coordinate; #IMPLIED
- svg:y %coordinate; #IMPLIED
- svg:width %length; #IMPLIED
- svg:height %length; #IMPLIED
- chart:style-name %styleName; #IMPLIED
- table:cell-range-address %cell-range-address; #IMPLIED
- chart:table-number-list %string; #IMPLIED
- chart:data-source-has-labels (none|row|column|both) "none" >
-
-<!-- 3d scene attributes on plot-area -->
-<!ATTLIST chart:plot-area
- dr3d:vrp %vector3D; #IMPLIED
- dr3d:vpn %vector3D; #IMPLIED
- dr3d:vup %vector3D; #IMPLIED
- dr3d:projection (parallel|perspective) #IMPLIED
- dr3d:transform CDATA #IMPLIED
- dr3d:distance %length; #IMPLIED
- dr3d:focal-length %length; #IMPLIED
- dr3d:shadow-slant %nonNegativeInteger; #IMPLIED
- dr3d:shade-mode (flat|phong|gouraud|draft) #IMPLIED
- dr3d:ambient-color %color; #IMPLIED
- dr3d:lighting-mode %boolean; #IMPLIED >
-
-<!ATTLIST style:properties
- chart:series-source (columns|rows) "columns" >
-
-<!ELEMENT chart:wall EMPTY>
-<!ATTLIST chart:wall
- svg:width %length; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ELEMENT chart:floor EMPTY>
-<!ATTLIST chart:floor
- svg:width %length; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- Axis -->
-
-<!ELEMENT chart:axis (chart:title?, chart:grid*)>
-<!ATTLIST chart:axis
- chart:class (category|value|series|domain) #REQUIRED
- chart:name %string; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ATTLIST style:properties
- chart:tick-marks-major-inner %boolean; "false"
- chart:tick-marks-major-outer %boolean; "true"
- chart:tick-marks-minor-inner %boolean; "false"
- chart:tick-marks-minor-outer %boolean; "false"
- chart:logarithmic %boolean; "false"
- chart:maximum %float; #IMPLIED
- chart:minimum %float; #IMPLIED
- chart:origin %float; #IMPLIED
- chart:interval-major %float; #IMPLIED
- chart:interval-minor %float; #IMPLIED
- chart:gap-width %integer; #IMPLIED
- chart:overlap %integer; #IMPLIED
- text:line-break %boolean; "true"
- chart:display-label %boolean; "true"
- chart:label-arrangement (side-by-side|stagger-even|stagger-odd) "side-by-side"
- chart:visible %boolean; "true"
- chart:link-data-style-to-source %boolean; "true" >
-
-<!ELEMENT chart:grid EMPTY>
-<!ATTLIST chart:grid
- chart:class (major|minor) "major"
- chart:style-name %styleName; #IMPLIED >
-
-
-<!ELEMENT chart:categories EMPTY>
-<!ATTLIST chart:categories
- table:cell-range-address %cell-range-address; #REQUIRED >
-
-<!--
- each series element must have an cell-range-address element that points
- to the underlying table data.
- Impl. Note: Internally all href elements are merged to one table range
- that represents the data for the whole chart
--->
-<!ELEMENT chart:series ( chart:domain*,
- chart:data-point* )>
-<!ATTLIST chart:series
- chart:values-cell-range-address %cell-range-address; #IMPLIED
- chart:label-cell-address %cell-address; #IMPLIED
- chart:class %chart-class; #IMPLIED
- chart:attached-axis %string; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!ELEMENT chart:domain EMPTY>
-<!ATTLIST chart:domain
- table:cell-range-address %cell-range-address; #IMPLIED >
-
-<!ELEMENT chart:data-point EMPTY>
-<!ATTLIST chart:data-point
- chart:repeated %nonNegativeInteger; #IMPLIED
- chart:style-name %styleName; #IMPLIED >
-
-<!-- statistical properties -->
-
-<!ATTLIST style:properties
- chart:mean-value %boolean; #IMPLIED
- chart:error-category (none|variance|standard-deviation|percentage|error-margin|constant) "none"
- chart:error-percentage %float; #IMPLIED
- chart:error-margin %float; #IMPLIED
- chart:error-lower-limit %float; #IMPLIED
- chart:error-upper-limit %float; #IMPLIED
- chart:error-upper-indicator %boolean; #IMPLIED
- chart:error-lower-indicator %boolean; #IMPLIED
- chart:regression-type (none|linear|logarithmic|exponential|power) "none" >
-
-<!-- data label properties -->
-
-<!ATTLIST style:properties
- chart:data-label-number (none|value|percentage) "none"
- chart:data-label-text %boolean; "false"
- chart:data-label-symbol %boolean; "false" >
-
-<!-- general text properties -->
-
-<!ATTLIST style:properties text:rotation-angle %integer; "0" >
-
-<!-- symbol properties -->
-
-<!ATTLIST style:properties
- chart:symbol-width %nonNegativeLength; #IMPLIED
- chart:symbol-height %nonNegativeLength; #IMPLIED
- chart:symbol-image-name %string; #IMPLIED >
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/datastyl.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/datastyl.mod
deleted file mode 100644
index 11bc8a8e40b7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/datastyl.mod
+++ /dev/null
@@ -1,168 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!-- data styles -->
-<!ENTITY % any-number "( number:number | number:scientific-number | number:fraction )">
-<!ENTITY % number-style-content "( (number:text,(%any-number;,number:text?)?) | (%any-number;,number:text?) )">
-<!ELEMENT number:number-style ( style:properties?, %number-style-content;, style:map* )>
-<!ELEMENT number:number EMPTY>
-<!ELEMENT number:scientific-number EMPTY>
-<!ELEMENT number:fraction EMPTY>
-
-<!ENTITY % currency-symbol-and-text "number:currency-symbol,number:text?">
-<!ENTITY % number-and-text "number:number,number:text?">
-<!ENTITY % currency-symbol-and-number "((%number-and-text;),(%currency-symbol-and-text;)?) | ((%currency-symbol-and-text;),(%number-and-text;)?)">
-<!ENTITY % currency-style-content "number:text?, (%currency-symbol-and-number;)?">
-
-<!ELEMENT number:currency-style ( style:properties?, (%currency-style-content;), style:map* )>
-<!ELEMENT number:currency-symbol (#PCDATA)>
-<!ATTLIST number:currency-symbol number:language CDATA #IMPLIED>
-<!ATTLIST number:currency-symbol number:country CDATA #IMPLIED>
-
-<!ENTITY % percentage-style-content "( (number:text,(%number-and-text;)?) | (%number-and-text;) )">
-<!ELEMENT number:percentage-style ( style:properties?, %percentage-style-content;, style:map* )>
-
-<!ENTITY % any-date "( number:day | number:month | number:year | number:era | number:day-of-week | number:week-of-year | number:quarter| number:hours | number:am-pm | number:minutes | number:seconds )">
-<!ENTITY % date-style-content "( (number:text,(%any-date;,number:text?)+) | (%any-date;,number:text?)+ )">
-<!ELEMENT number:date-style ( style:properties?, %date-style-content;, style:map* )>
-<!ELEMENT number:day EMPTY>
-<!ATTLIST number:day number:style (short|long) "short">
-<!ATTLIST number:day number:calendar CDATA #IMPLIED>
-<!ELEMENT number:month EMPTY>
-<!ATTLIST number:month number:textual %boolean; "false">
-<!ATTLIST number:month number:style (short|long) "short">
-<!ATTLIST number:month number:calendar CDATA #IMPLIED>
-<!ELEMENT number:year EMPTY>
-<!ATTLIST number:year number:style (short|long) "short">
-<!ATTLIST number:year number:calendar CDATA #IMPLIED>
-<!ELEMENT number:era EMPTY>
-<!ATTLIST number:era number:style (short|long) "short">
-<!ATTLIST number:era number:calendar CDATA #IMPLIED>
-<!ELEMENT number:day-of-week EMPTY>
-<!ATTLIST number:day-of-week number:style (short|long) "short">
-<!ATTLIST number:day-of-week number:calendar CDATA #IMPLIED>
-<!ELEMENT number:week-of-year EMPTY>
-<!ATTLIST number:week-of-year number:calendar CDATA #IMPLIED>
-<!ELEMENT number:quarter EMPTY>
-<!ATTLIST number:quarter number:style (short|long) "short">
-<!ATTLIST number:quarter number:calendar CDATA #IMPLIED>
-
-<!ENTITY % any-time "( number:hours | number:am-pm | number:minutes | number:seconds )">
-<!ENTITY % time-style-content "( (number:text,(%any-time;,number:text?)+) | (%any-time;,number:text?)+)">
-<!ELEMENT number:time-style ( style:properties?, %time-style-content;, style:map* )>
-<!ELEMENT number:hours EMPTY>
-<!ATTLIST number:hours number:style (short|long) "short">
-<!ELEMENT number:minutes EMPTY>
-<!ATTLIST number:minutes number:style (short|long) "short">
-<!ELEMENT number:seconds EMPTY>
-<!ATTLIST number:seconds number:style (short|long) "short">
-<!ATTLIST number:seconds number:decimal-places %integer; "0">
-<!ELEMENT number:am-pm EMPTY>
-
-<!ENTITY % boolean-style-content "( (number:text,(number:boolean,number:text?)?) | (number:boolean,number:text?) )">
-<!ELEMENT number:boolean-style ( style:properties?,%boolean-style-content;, style:map* )>
-<!ELEMENT number:boolean EMPTY>
-
-<!ENTITY % text-style-content "( (number:text,(number:text-content,number:text?)?) | (number:text-content,number:text?) )">
-<!ELEMENT number:text-style ( style:properties?,%text-style-content;, style:map* )>
-<!ELEMENT number:text (#PCDATA)>
-<!ELEMENT number:text-content EMPTY>
-
-<!ATTLIST number:number-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:currency-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:percentage-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:date-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:time-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:boolean-style style:name %styleName; #REQUIRED>
-<!ATTLIST number:text-style style:name %styleName; #REQUIRED>
-
-<!ATTLIST number:number-style style:family CDATA #REQUIRED>
-<!ATTLIST number:currency-style style:family CDATA #REQUIRED>
-<!ATTLIST number:percentage-style style:family CDATA #REQUIRED>
-<!ATTLIST number:date-style style:family CDATA #REQUIRED>
-<!ATTLIST number:time-style style:family CDATA #REQUIRED>
-<!ATTLIST number:boolean-style style:family CDATA #REQUIRED>
-<!ATTLIST number:text-style style:family CDATA #REQUIRED>
-
-<!ATTLIST number:number-style number:language CDATA #IMPLIED>
-<!ATTLIST number:currency-style number:language CDATA #IMPLIED>
-<!ATTLIST number:percentage-style number:language CDATA #IMPLIED>
-<!ATTLIST number:date-style number:language CDATA #IMPLIED>
-<!ATTLIST number:time-style number:language CDATA #IMPLIED>
-<!ATTLIST number:boolean-style number:language CDATA #IMPLIED>
-<!ATTLIST number:text-style number:language CDATA #IMPLIED>
-
-<!ATTLIST number:number-style number:country CDATA #IMPLIED>
-<!ATTLIST number:currency-style number:country CDATA #IMPLIED>
-<!ATTLIST number:percentage-style number:country CDATA #IMPLIED>
-<!ATTLIST number:date-style number:country CDATA #IMPLIED>
-<!ATTLIST number:time-style number:country CDATA #IMPLIED>
-<!ATTLIST number:boolean-style number:country CDATA #IMPLIED>
-<!ATTLIST number:text-style number:country CDATA #IMPLIED>
-
-<!ATTLIST number:number-style number:title CDATA #IMPLIED>
-<!ATTLIST number:currency-style number:title CDATA #IMPLIED>
-<!ATTLIST number:percentage-style number:title CDATA #IMPLIED>
-<!ATTLIST number:date-style number:title CDATA #IMPLIED>
-<!ATTLIST number:time-style number:title CDATA #IMPLIED>
-<!ATTLIST number:boolean-style number:title CDATA #IMPLIED>
-<!ATTLIST number:text-style number:title CDATA #IMPLIED>
-
-<!ATTLIST number:number-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:currency-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:percentage-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:date-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:time-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:boolean-style style:volatile %boolean; #IMPLIED>
-<!ATTLIST number:text-style style:volatile %boolean; #IMPLIED>
-
-<!ATTLIST number:currency-style number:automatic-order %boolean; "false">
-<!ATTLIST number:date-style number:automatic-order %boolean; "false">
-
-<!ATTLIST number:date-style number:format-source (fixed|language) "fixed">
-<!ATTLIST number:time-style number:format-source (fixed|language) "fixed">
-
-<!ATTLIST number:time-style number:truncate-on-overflow %boolean; "true">
-
-<!ATTLIST number:number number:decimal-places %integer; #IMPLIED>
-<!ATTLIST number:scientific-number number:decimal-places %integer; #IMPLIED>
-
-<!ATTLIST number:number number:min-integer-digits %integer; #IMPLIED>
-<!ATTLIST number:scientific-number number:min-integer-digits %integer; #IMPLIED>
-<!ATTLIST number:fraction number:min-integer-digits %integer; #IMPLIED>
-
-<!ATTLIST number:number number:grouping %boolean; "false">
-<!ATTLIST number:scientific-number number:grouping %boolean; "false">
-<!ATTLIST number:fraction number:grouping %boolean; "false">
-
-<!ATTLIST number:number number:decimal-replacement CDATA #IMPLIED>
-
-<!ATTLIST number:scientific-number number:min-exponent-digits %integer; #IMPLIED>
-
-<!ATTLIST number:fraction number:min-numerator-digits %integer; #IMPLIED>
-
-<!ATTLIST number:fraction number:min-denominator-digits %integer; #IMPLIED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/drawing.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/drawing.mod
deleted file mode 100644
index aa0a25822a45..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/drawing.mod
+++ /dev/null
@@ -1,837 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % points "CDATA" >
-<!ENTITY % pathData "CDATA" >
-<!ENTITY % gradient-style "(linear|axial|radial|ellipsoid|square|rectangular)" >
-<!ENTITY % draw-position "svg:x %coordinate; #IMPLIED svg:y %coordinate; #IMPLIED">
-<!ENTITY % draw-end-position "table:end-cell-address %cell-address; #IMPLIED table:end-x %coordinate; #IMPLIED table:end-y %coordinate; #IMPLIED">
-<!ENTITY % draw-size "svg:width %coordinate; #IMPLIED svg:height %coordinate; #IMPLIED">
-<!ENTITY % draw-transform "draw:transform CDATA #IMPLIED">
-<!ENTITY % draw-viewbox "svg:viewBox CDATA #REQUIRED">
-<!ENTITY % draw-style-name "draw:style-name %styleName; #IMPLIED presentation:style-name %styleName; #IMPLIED draw:text-style-name %styleName; #IMPLIED">
-<!ENTITY % draw-shape-id "CDATA #IMPLIED" >
-<!ENTITY % draw-text "(text:p|text:unordered-list|text:ordered-list)*">
-<!ENTITY % zindex "draw:z-index %nonNegativeInteger; #IMPLIED">
-<!ENTITY % distance "CDATA">
-<!ENTITY % rectanglePoint "(top-left|top|top-right|left|center|right|bottom-left|bottom|bottom-right)">
-<!ENTITY % vector3D "CDATA">
-<!ENTITY % text-anchor "text:anchor-type %anchorType; #IMPLIED text:anchor-page-number %positiveInteger; #IMPLIED">
-<!ENTITY % layerName "CDATA">
-<!ENTITY % table-background "table:table-background (true | false) #IMPLIED">
-
-<!-- commont presentation shape attributes -->
-<!ENTITY % presentation-style-name "presentation:style-name %styleName; #IMPLIED">
-<!ENTITY % presentation-classes "(title|outline|subtitle|text|graphic|object|chart|table|orgchart|page|notes)" >
-<!-- ENTITY % presentation-class "presentation:class %presentation-classes; #IMPLIED" -->
-<!ENTITY % presentation-class "presentation:class %presentation-classes; #IMPLIED presentation:placeholder (true|false) #IMPLIED presentation:user-transformed (true|false) #IMPLIED">
-<!ENTITY % presentationEffects "(none|fade|move|stripes|open|close|dissolve|wavyline|random|lines|laser|appear|hide|move-short|checkerboard|rotate|stretch)" >
-<!ENTITY % presentationEffectDirections "(none|from-left|from-top|from-right|from-bottom|from-center|from-upper-left|from-upper-right|from-lower-left|from-lower-right|to-left|to-top|to-right|to-bottom|to-upper-left|to-upper-right|to-lower-right|to-lower-left|path|spiral-inward-left|spiral-inward-right|spiral-outward-left|spiral-outward-right|vertical|horizontal|to-center|clockwise|counter-clockwise)" >
-<!ENTITY % presentationSpeeds "(slow|medium|fast)" >
-
-<!-- Drawing shapes -->
-<!ELEMENT draw:rect ( office:events?, %draw-text; )>
-<!ATTLIST draw:rect %draw-position; >
-<!ATTLIST draw:rect %draw-end-position; >
-<!ATTLIST draw:rect %table-background; >
-<!ATTLIST draw:rect %draw-size; >
-<!ATTLIST draw:rect %draw-style-name; >
-<!ATTLIST draw:rect %draw-transform; >
-<!ATTLIST draw:rect draw:corner-radius %nonNegativeLength; #IMPLIED>
-<!ATTLIST draw:rect %zindex;>
-<!ATTLIST draw:rect draw:id %draw-shape-id;>
-<!ATTLIST draw:rect %text-anchor;>
-<!ATTLIST draw:rect draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:line ( office:events?, %draw-text; )>
-<!ATTLIST draw:line svg:x1 %length; #REQUIRED>
-<!ATTLIST draw:line svg:y1 %length; #REQUIRED>
-<!ATTLIST draw:line svg:x2 %length; #REQUIRED>
-<!ATTLIST draw:line svg:y2 %length; #REQUIRED>
-<!ATTLIST draw:line %draw-style-name; >
-<!ATTLIST draw:line %draw-transform; >
-<!ATTLIST draw:line %zindex;>
-<!ATTLIST draw:line %draw-end-position; >
-<!ATTLIST draw:line %table-background; >
-<!ATTLIST draw:line draw:id %draw-shape-id;>
-<!ATTLIST draw:line %text-anchor;>
-<!ATTLIST draw:line draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:polyline ( office:events?, %draw-text; )>
-<!ATTLIST draw:polyline %draw-position; >
-<!ATTLIST draw:polyline %draw-size; >
-<!ATTLIST draw:polyline %draw-viewbox; >
-<!ATTLIST draw:polyline draw:points %points; #REQUIRED>
-<!ATTLIST draw:polyline %draw-style-name; >
-<!ATTLIST draw:polyline %draw-transform; >
-<!ATTLIST draw:polyline %zindex;>
-<!ATTLIST draw:polyline %draw-end-position; >
-<!ATTLIST draw:polyline %table-background; >
-<!ATTLIST draw:polyline draw:id %draw-shape-id;>
-<!ATTLIST draw:polyline %text-anchor;>
-<!ATTLIST draw:polyline draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:polygon ( office:events?, %draw-text; )>
-<!ATTLIST draw:polygon %draw-position; >
-<!ATTLIST draw:polygon %draw-end-position; >
-<!ATTLIST draw:polygon %table-background; >
-<!ATTLIST draw:polygon %draw-size; >
-<!ATTLIST draw:polygon %draw-viewbox; >
-<!ATTLIST draw:polygon draw:points %points; #REQUIRED >
-<!ATTLIST draw:polygon %draw-style-name; >
-<!ATTLIST draw:polygon %draw-transform; >
-<!ATTLIST draw:polygon %zindex;>
-<!ATTLIST draw:polygon draw:id %draw-shape-id;>
-<!ATTLIST draw:polygon %text-anchor;>
-<!ATTLIST draw:polygon draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:path ( office:events?, %draw-text; )>
-<!ATTLIST draw:path %draw-position;>
-<!ATTLIST draw:path %draw-end-position; >
-<!ATTLIST draw:path %table-background; >
-<!ATTLIST draw:path %draw-size; >
-<!ATTLIST draw:path %draw-viewbox; >
-<!ATTLIST draw:path svg:d %pathData; #REQUIRED >
-<!ATTLIST draw:path %draw-style-name; >
-<!ATTLIST draw:path %draw-transform; >
-<!ATTLIST draw:path %zindex;>
-<!ATTLIST draw:path draw:id %draw-shape-id;>
-<!ATTLIST draw:path %text-anchor;>
-<!ATTLIST draw:path draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:circle ( office:events?, %draw-text; )>
-<!ATTLIST draw:circle %draw-position; >
-<!ATTLIST draw:circle %draw-size; >
-<!ATTLIST draw:circle %draw-style-name; >
-<!ATTLIST draw:circle %draw-transform; >
-<!ATTLIST draw:circle %zindex;>
-<!ATTLIST draw:circle %draw-end-position; >
-<!ATTLIST draw:circle %table-background; >
-<!ATTLIST draw:circle draw:id %draw-shape-id;>
-<!ATTLIST draw:circle draw:kind (full|section|cut|arc) "full">
-<!ATTLIST draw:circle draw:start-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:circle draw:end-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:circle %text-anchor;>
-<!ATTLIST draw:circle draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:ellipse ( office:events?, %draw-text; )>
-<!ATTLIST draw:ellipse %draw-position; >
-<!ATTLIST draw:ellipse %draw-size; >
-<!ATTLIST draw:ellipse %draw-style-name; >
-<!ATTLIST draw:ellipse %draw-transform; >
-<!ATTLIST draw:ellipse %zindex;>
-<!ATTLIST draw:ellipse %draw-end-position; >
-<!ATTLIST draw:ellipse %table-background; >
-<!ATTLIST draw:ellipse draw:id %draw-shape-id;>
-<!ATTLIST draw:ellipse draw:kind (full|section|cut|arc) "full">
-<!ATTLIST draw:ellipse draw:start-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:ellipse draw:end-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST draw:ellipse %text-anchor;>
-<!ATTLIST draw:ellipse draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:connector ( office:events?, %draw-text;)>
-<!ATTLIST draw:connector draw:type (standard|lines|line|curve) "standard">
-<!ATTLIST draw:connector draw:line-skew CDATA #IMPLIED>
-<!ATTLIST draw:connector %draw-style-name;>
-<!ATTLIST draw:connector svg:x1 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector svg:y1 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector svg:x2 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector svg:y2 %coordinate; #REQUIRED>
-<!ATTLIST draw:connector draw:start-shape %draw-shape-id;>
-<!ATTLIST draw:connector draw:start-glue-point %integer; #IMPLIED>
-<!ATTLIST draw:connector draw:end-shape %draw-shape-id;>
-<!ATTLIST draw:connector draw:end-glue-point %integer; #IMPLIED>
-<!ATTLIST draw:connector %zindex;>
-<!ATTLIST draw:connector %draw-end-position; >
-<!ATTLIST draw:connector %table-background; >
-<!ATTLIST draw:connector draw:id %draw-shape-id;>
-<!ATTLIST draw:connector %text-anchor;>
-<!ATTLIST draw:connector draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:control EMPTY>
-<!ATTLIST draw:control %draw-style-name;>
-<!ATTLIST draw:control %draw-position; >
-<!ATTLIST draw:control %draw-size; >
-<!ATTLIST draw:control %control-id; >
-<!ATTLIST draw:control %zindex;>
-<!ATTLIST draw:control %draw-end-position; >
-<!ATTLIST draw:control %table-background; >
-<!ATTLIST draw:control draw:id %draw-shape-id;>
-<!ATTLIST draw:control %text-anchor;>
-<!ATTLIST draw:control draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:g ( office:events?, (%shapes;)* ) >
-<!ATTLIST draw:g %draw-transform; >
-<!ATTLIST draw:g %draw-style-name; >
-<!ATTLIST draw:g %zindex;>
-<!ATTLIST draw:g %draw-end-position; >
-<!ATTLIST draw:g %table-background; >
-<!ATTLIST draw:g draw:id %draw-shape-id;>
-<!ATTLIST draw:g %text-anchor;>
-<!ATTLIST draw:g draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:page-thumbnail EMPTY>
-<!ATTLIST draw:page-thumbnail draw:page-number %positiveInteger; #IMPLIED>
-<!ATTLIST draw:page-thumbnail %draw-position; >
-<!ATTLIST draw:page-thumbnail %draw-size; >
-<!ATTLIST draw:page-thumbnail %draw-style-name; >
-<!ATTLIST draw:page-thumbnail %presentation-class; >
-<!ATTLIST draw:page-thumbnail %zindex;>
-<!ATTLIST draw:page-thumbnail %draw-end-position; >
-<!ATTLIST draw:page-thumbnail %table-background; >
-<!ATTLIST draw:page-thumbnail draw:id %draw-shape-id;>
-<!ATTLIST draw:page-thumbnail %text-anchor;>
-<!ATTLIST draw:page-thumbnail draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT draw:caption ( office:events?, %draw-text;)>
-<!ATTLIST draw:caption %draw-position; >
-<!ATTLIST draw:caption %draw-end-position; >
-<!ATTLIST draw:caption %table-background; >
-<!ATTLIST draw:caption %draw-size; >
-<!ATTLIST draw:caption %draw-style-name; >
-<!ATTLIST draw:caption %draw-transform; >
-<!ATTLIST draw:caption draw:caption-point-x %coordinate; #IMPLIED>
-<!ATTLIST draw:caption draw:caption-point-y %coordinate; #IMPLIED>
-<!ATTLIST draw:caption %zindex;>
-<!ATTLIST draw:caption draw:id %draw-shape-id;>
-<!ATTLIST draw:caption %text-anchor;>
-<!ATTLIST draw:caption draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:caption draw:corner-radius %nonNegativeLength; #IMPLIED>
-
-<!ELEMENT draw:measure ( office:events?, %draw-text;)>
-<!ATTLIST draw:measure svg:x1 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure svg:y1 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure svg:x2 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure svg:y2 %coordinate; #REQUIRED>
-<!ATTLIST draw:measure %draw-end-position; >
-<!ATTLIST draw:measure %table-background; >
-<!ATTLIST draw:measure %draw-style-name; >
-<!ATTLIST draw:measure %draw-transform; >
-<!ATTLIST draw:measure %zindex;>
-<!ATTLIST draw:measure draw:id %draw-shape-id;>
-<!ATTLIST draw:measure %text-anchor;>
-<!ATTLIST draw:measure draw:layer %layerName; #IMPLIED>
-
-<!-- graphic style elements -->
-<!ELEMENT draw:gradient EMPTY >
-<!ATTLIST draw:gradient draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:gradient draw:style %gradient-style; #REQUIRED>
-<!ATTLIST draw:gradient draw:cx %coordinate; #IMPLIED>
-<!ATTLIST draw:gradient draw:cy %coordinate; #IMPLIED>
-<!ATTLIST draw:gradient draw:start-color %color; #IMPLIED>
-<!ATTLIST draw:gradient draw:end-color %color; #IMPLIED>
-<!ATTLIST draw:gradient draw:start-intensity %percentage; #IMPLIED>
-<!ATTLIST draw:gradient draw:end-intensity %percentage; #IMPLIED>
-<!ATTLIST draw:gradient draw:angle %integer; #IMPLIED>
-<!ATTLIST draw:gradient draw:border %percentage; #IMPLIED>
-
-<!ELEMENT draw:hatch EMPTY >
-<!ATTLIST draw:hatch draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:hatch draw:style (single|double|triple) #REQUIRED >
-<!ATTLIST draw:hatch draw:color %color; #IMPLIED>
-<!ATTLIST draw:hatch draw:distance %length; #IMPLIED>
-<!ATTLIST draw:hatch draw:rotation %integer; #IMPLIED>
-
-
-<!ELEMENT draw:fill-image EMPTY >
-<!ATTLIST draw:fill-image draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:fill-image xlink:href %uriReference; #REQUIRED>
-<!ATTLIST draw:fill-image xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:fill-image xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:fill-image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:fill-image svg:width %length; #IMPLIED>
-<!ATTLIST draw:fill-image svg:height %length; #IMPLIED>
-
-<!ELEMENT draw:transparency EMPTY>
-<!ATTLIST draw:transparency draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:transparency draw:style %gradient-style; #REQUIRED>
-<!ATTLIST draw:transparency draw:cx %coordinate; #IMPLIED>
-<!ATTLIST draw:transparency draw:cy %coordinate; #IMPLIED>
-<!ATTLIST draw:transparency draw:start %percentage; #IMPLIED>
-<!ATTLIST draw:transparency draw:end %percentage; #IMPLIED>
-<!ATTLIST draw:transparency draw:angle %integer; #IMPLIED>
-<!ATTLIST draw:transparency draw:border %percentage; #IMPLIED>
-
-<!ELEMENT draw:marker EMPTY>
-<!ATTLIST draw:marker draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:marker %draw-viewbox; >
-<!ATTLIST draw:marker svg:d %pathData; #REQUIRED>
-
-<!ELEMENT draw:stroke-dash EMPTY>
-<!ATTLIST draw:stroke-dash draw:name %styleName; #REQUIRED>
-<!ATTLIST draw:stroke-dash draw:style (rect|round) #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots1 %integer; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots1-length %length; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots2 %integer; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:dots2-length %length; #IMPLIED>
-<!ATTLIST draw:stroke-dash draw:distance %length; #IMPLIED>
-
-<!-- stroke attributes -->
-<!ATTLIST style:properties draw:stroke (none|dash|solid) #IMPLIED>
-<!ATTLIST style:properties draw:stroke-dash CDATA #IMPLIED>
-<!ATTLIST style:properties svg:stroke-width %length; #IMPLIED>
-<!ATTLIST style:properties svg:stroke-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:marker-start %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:marker-end %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:marker-start-width %length; #IMPLIED>
-<!ATTLIST style:properties draw:marker-end-width %length; #IMPLIED>
-<!ATTLIST style:properties draw:marker-start-center %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:marker-end-center %boolean; #IMPLIED>
-<!ATTLIST style:properties svg:stroke-opacity %floatOrPercentage; #IMPLIED>
-<!ATTLIST style:properties svg:stroke-linejoin (miter|round|bevel|middle|none|inherit) #IMPLIED>
-
-<!-- text attributes -->
-<!ATTLIST style:properties draw:auto-grow-width %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:auto-grow-height %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fit-to-size %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fit-to-contour %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:textarea-horizontal-align ( left | center | right | justify ) #IMPLIED>
-<!ATTLIST style:properties draw:textarea-vertical-align ( top | middle | bottom ) #IMPLIED>
-
-<!-- fill attributes -->
-<!ATTLIST style:properties draw:fill (none|solid|bitmap|gradient|hatch) #IMPLIED>
-<!ATTLIST style:properties draw:fill-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:fill-gradient-name %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:gradient-step-count CDATA #IMPLIED>
-<!ATTLIST style:properties draw:fill-hatch-name %styleName; #IMPLIED>
-<!ATTLIST style:properties draw:fill-hatch-solid %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-name %styleName; #IMPLIED>
-<!ATTLIST style:properties style:repeat (no-repeat|repeat|stretch) #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-ref-point-x %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-ref-point-y %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:fill-image-ref-point %rectanglePoint; #IMPLIED>
-<!ATTLIST style:properties draw:tile-repeat-offset CDATA #IMPLIED>
-<!ATTLIST style:properties draw:transparency %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:transparency-name %styleName; #IMPLIED>
-
-<!-- graphic attributes -->
-<!ATTLIST style:properties draw:color-mode (greyscale|mono|watermark|standard) #IMPLIED>
-<!ATTLIST style:properties draw:luminance %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:contrast %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:gamma %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:red %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:green %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:blue %percentage; #IMPLIED>
-<!ATTLIST style:properties draw:color-inversion %boolean; #IMPLIED>
-
-<!-- shadow attributes -->
-<!ATTLIST style:properties draw:shadow (visible|hidden) #IMPLIED>
-<!ATTLIST style:properties draw:shadow-offset-x %length; #IMPLIED>
-<!ATTLIST style:properties draw:shadow-offset-y %length; #IMPLIED>
-<!ATTLIST style:properties draw:shadow-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:shadow-transparency CDATA #IMPLIED>
-
-<!-- connector attributes -->
-<!ATTLIST style:properties draw:start-line-spacing-horizontal %distance; #IMPLIED>
-<!ATTLIST style:properties draw:start-line-spacing-vertical %distance; #IMPLIED>
-<!ATTLIST style:properties draw:end-line-spacing-horizontal %distance; #IMPLIED>
-<!ATTLIST style:properties draw:end-line-spacing-vertical %distance; #IMPLIED>
-
-<!-- measure attributes -->
-<!ATTLIST style:properties draw:line-distance %distance; #IMPLIED>
-<!ATTLIST style:properties draw:guide-overhang %distance; #IMPLIED>
-<!ATTLIST style:properties draw:guide-distance %distance; #IMPLIED>
-<!ATTLIST style:properties draw:start-guide %distance; #IMPLIED>
-<!ATTLIST style:properties draw:end-guide %distance; #IMPLIED>
-<!ATTLIST style:properties draw:measure-align (automatic|left-outside|inside|right-outside) #IMPLIED>
-<!ATTLIST style:properties draw:measure-vertical-align (automatic|above|below|center) #IMPLIED>
-<!ATTLIST style:properties draw:unit (automatic|mm|cm|m|km|pt|pc|inch|ft|mi) #IMPLIED>
-<!ATTLIST style:properties draw:show-unit %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:placing (below|above) #IMPLIED>
-<!ATTLIST style:properties draw:parallel %boolean; #IMPLIED>
-
-<!-- frame attributes -->
-<!ATTLIST style:properties draw:frame-display-scrollbar %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:frame-display-border %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:frame-margin-horizontal %nonNegativePixelLength; #IMPLIED>
-<!ATTLIST style:properties draw:frame-margin-vertical %nonNegativePixelLength; #IMPLIED>
-<!ATTLIST style:properties draw:size-protect %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:move-protect %boolean; #IMPLIED>
-
-<!-- ole object attributes -->
-<!ATTLIST style:properties draw:visible-area-left %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties draw:visible-area-top %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties draw:visible-area-width %positiveLength; #IMPLIED>
-<!ATTLIST style:properties draw:visible-area-height %positiveLength; #IMPLIED>
-
-<!-- fontwork attributes -->
-<!ATTLIST style:properties draw:fontwork-style (rotate|upright|slant-x|slant-y|none) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-adjust (left|right|autosize|center) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-distance %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-start %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-mirror %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-outline %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow (normal|slant|none) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-color %color; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-offset-x %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-offset-y %distance; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-form (none|top-circle|bottom-circle|left-circle|right-circle|top-arc|bottom-arc|left-arc|right-arc|button1|button2|button3|button4) #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-hide-form %boolean; #IMPLIED>
-<!ATTLIST style:properties draw:fontwork-shadow-transparence %percentage; #IMPLIED>
-
-<!-- caption attributes -->
-<!ATTLIST style:properties draw:caption-type (straight-line|angled-line|angled-connector-line) #IMPLIED>
-<!ATTLIST style:properties draw:caption-angle-type (fixed|free) #IMPLIED>
-<!ATTLIST style:properties draw:caption-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties draw:caption-gap %distance; #IMPLIED>
-<!ATTLIST style:properties draw:caption-escape-direction (horizontal|vertical|auto) #IMPLIED>
-<!ATTLIST style:properties draw:caption-escape %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties draw:caption-line-length %distance; #IMPLIED>
-<!ATTLIST style:properties draw:caption-fit-line-length %boolean; #IMPLIED>
-
-<!-- Animations -->
-<!ELEMENT presentation:sound EMPTY>
-<!ATTLIST presentation:sound xlink:href %uriReference; #REQUIRED>
-<!ATTLIST presentation:sound xlink:type (simple) #FIXED "simple">
-<!ATTLIST presentation:sound xlink:show (new|replace) #IMPLIED>
-<!ATTLIST presentation:sound xlink:actuate (onRequest) "onRequest">
-<!ATTLIST presentation:sound presentation:play-full %boolean; #IMPLIED>
-
-<!ELEMENT presentation:show-shape (presentation:sound)?>
-<!ATTLIST presentation:show-shape draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:show-shape presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:show-shape presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:show-shape presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:show-shape presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:show-shape presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:show-text (presentation:sound)?>
-<!ATTLIST presentation:show-text draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:show-text presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:show-text presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:show-text presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:show-text presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:show-text presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:hide-shape (presentation:sound)?>
-<!ATTLIST presentation:hide-shape draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:hide-shape presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:hide-shape presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:hide-shape presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:hide-shape presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:hide-shape presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:hide-text (presentation:sound)?>
-<!ATTLIST presentation:hide-text draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:hide-text presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:hide-text presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:hide-text presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:hide-text presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:hide-text presentation:path-id CDATA #IMPLIED >
-
-<!ELEMENT presentation:dim (presentation:sound)?>
-<!ATTLIST presentation:dim draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:dim draw:color %color; #REQUIRED>
-
-<!ELEMENT presentation:play EMPTY>
-<!ATTLIST presentation:play draw:shape-id CDATA #REQUIRED>
-<!ATTLIST presentation:play presentation:speed %presentationSpeeds; "medium">
-
-<!ELEMENT presentation:animations (presentation:show-shape|presentation:show-text|presentation:hide-shape|presentation:hide-text|presentation:dim|presentation:play)*>
-
-<!ELEMENT presentation:show EMPTY>
-<!ATTLIST presentation:show presentation:name %styleName; #REQUIRED>
-<!ATTLIST presentation:show presentation:pages CDATA #REQUIRED>
-
-<!ELEMENT presentation:settings (presentation:show)*>
-<!ATTLIST presentation:settings presentation:start-page %styleName; #IMPLIED>
-<!ATTLIST presentation:settings presentation:show %styleName; #IMPLIED>
-<!ATTLIST presentation:settings presentation:full-screen %boolean; "true">
-<!ATTLIST presentation:settings presentation:endless %boolean; "false">
-<!ATTLIST presentation:settings presentation:pause %timeDuration; #IMPLIED>
-<!ATTLIST presentation:settings presentation:show-logo %boolean; "false">
-<!ATTLIST presentation:settings presentation:force-manual %boolean; "false">
-<!ATTLIST presentation:settings presentation:mouse-visible %boolean; "true">
-<!ATTLIST presentation:settings presentation:mouse-as-pen %boolean; "false">
-<!ATTLIST presentation:settings presentation:start-with-navigator %boolean; "false">
-<!ATTLIST presentation:settings presentation:animations (enabled|disabled) "enabled">
-<!ATTLIST presentation:settings presentation:stay-on-top %boolean; "false">
-<!ATTLIST presentation:settings presentation:transition-on-click (enabled|disabled) "enabled">
-
-<!-- Drawing page -->
-<!ELEMENT draw:page (office:forms?,(%shapes;)*,presentation:animations?,presentation:notes?)>
-<!ATTLIST draw:page draw:name %string; #IMPLIED>
-<!ATTLIST draw:page draw:style-name %styleName; #IMPLIED>
-<!ATTLIST draw:page draw:master-page-name %styleName; #REQUIRED>
-<!ATTLIST draw:page presentation:presentation-page-layout-name %styleName; #IMPLIED>
-<!ATTLIST draw:page draw:id %nonNegativeInteger; #IMPLIED>
-
-<!-- Presentation notes -->
-<!ELEMENT presentation:notes (%shapes;)*>
-
-
-<!-- presentation page layouts -->
-<!ELEMENT style:presentation-page-layout (presentation:placeholder)* >
-<!ATTLIST style:presentation-page-layout style:name %styleName; #REQUIRED>
-<!ELEMENT presentation:placeholder EMPTY >
-<!ATTLIST presentation:placeholder presentation:object (title|outline|subtitle|text|graphic|object|chart|orgchart|page|notes|handout) #REQUIRED>
-<!ATTLIST presentation:placeholder svg:x %coordinateOrPercentage; #REQUIRED>
-<!ATTLIST presentation:placeholder svg:y %coordinateOrPercentage; #REQUIRED>
-<!ATTLIST presentation:placeholder svg:width %lengthOrPercentage; #REQUIRED>
-<!ATTLIST presentation:placeholder svg:height %lengthOrPercentage; #REQUIRED>
-
-<!-- presentation page attributes -->
-<!ATTLIST style:properties presentation:transition-type (manual|automatic|semi-automatic) #IMPLIED >
-<!ATTLIST style:properties presentation:transition-style (none|fade-from-left|fade-from-top|fade-from-right|fade-from-bottom|fade-to-center|fade-from-center|move-from-left|move-from-top|move-from-right|move-from-bottom|roll-from-top|roll-from-left|roll-from-right|roll-from-bottom|vertical-stripes|horizontal-stripes|clockwise|counterclockwise|fade-from-upperleft|fade-from-upperright|fade-from-lowerleft|fade-from-lowerright|close-vertical|close-horizontal|open-vertical|open-horizontal|spiralin-left|spiralin-right|spiralout-left|spiralout-right|dissolve|wavyline-from-left|wavyline-from-top|wavyline-from-right|wavyline-from-bottom|random|stretch-from-left|stretch-from-top|stretch-from-right|stretch-from-bottom|vertical-lines|horizontal-lines) #IMPLIED >
-<!ATTLIST style:properties presentation:transition-speed %presentationSpeeds; #IMPLIED >
-<!ATTLIST style:properties presentation:duration %timeDuration; #IMPLIED>
-<!ATTLIST style:properties presentation:visibility (visible|hidden) #IMPLIED>
-<!ATTLIST style:properties draw:background-size (full|border) #IMPLIED>
-<!ATTLIST style:properties presentation:background-objects-visible %boolean; #IMPLIED>
-<!ATTLIST style:properties presentation:background-visible %boolean; #IMPLIED>
-
-
-<!-- text boxes -->
-<!ELEMENT draw:text-box (office:events?,draw:image-map?,
- (text:h|text:p|text:ordered-list|
- text:unordered-list|table:table|chart:chart|
- draw:a|draw:text-box|draw:image)*)>
-<!ATTLIST draw:text-box %draw-style-name;>
-<!ATTLIST draw:text-box %draw-transform; >
-<!ATTLIST draw:text-box draw:name %string; #IMPLIED>
-<!ATTLIST draw:text-box draw:chain-next-name %string; #IMPLIED>
-
-<!ATTLIST draw:text-box %text-anchor;>
-<!ATTLIST draw:text-box %draw-position;>
-<!ATTLIST draw:text-box %draw-end-position; >
-<!ATTLIST draw:text-box %table-background; >
-<!ATTLIST draw:text-box svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:text-box svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:text-box fo:min-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:text-box %zindex;>
-<!ATTLIST draw:text-box %presentation-class; >
-<!ATTLIST draw:text-box %draw-transform; >
-<!ATTLIST draw:text-box draw:id %draw-shape-id;>
-<!ATTLIST draw:text-box draw:layer %layerName; #IMPLIED>
-
-<!-- image -->
-<!ELEMENT draw:image (office:binary-data?,office:events?,draw:image-map?,svg:desc?,(draw:contour-polygon|draw:contour-path)?)>
-<!ATTLIST draw:image %draw-style-name;>
-<!ATTLIST draw:image draw:name %string; #IMPLIED>
-<!ATTLIST draw:image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:image xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:image xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:image draw:filter-name %string; #IMPLIED>
-<!ATTLIST draw:image %text-anchor;>
-<!ATTLIST draw:image %draw-position;>
-<!ATTLIST draw:image %draw-end-position; >
-<!ATTLIST draw:image %table-background; >
-<!ATTLIST draw:image svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:image svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:image %presentation-class; >
-<!ATTLIST draw:image %zindex;>
-<!ATTLIST draw:image draw:id %draw-shape-id;>
-<!ATTLIST draw:image draw:layer %layerName; #IMPLIED>
-
-<!-- objects -->
-<!ELEMENT draw:thumbnail EMPTY>
-<!ATTLIST draw:thumbnail xlink:href %uriReference; #REQUIRED>
-<!ATTLIST draw:thumbnail xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:thumbnail xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:thumbnail xlink:actuate (onLoad) #IMPLIED>
-
-<!ELEMENT math:math ANY> <!-- dummy (we have no MathML DTD currently)-->
-<!ELEMENT draw:object (draw:thumbnail?,(office:document|math:math)?,office:events?, draw:image-map?, svg:desc?,(draw:contour-polygon|draw:contour-path)?)>
-<!ATTLIST draw:object %draw-style-name;>
-<!ATTLIST draw:object draw:name %string; #IMPLIED>
-<!ATTLIST draw:object xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:object xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:object xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:object xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:object %text-anchor;>
-<!ATTLIST draw:object %draw-position;>
-<!ATTLIST draw:object %draw-end-position; >
-<!ATTLIST draw:object %table-background; >
-<!ATTLIST draw:object svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object %presentation-class; >
-<!ATTLIST draw:object %zindex;>
-<!ATTLIST draw:object draw:id %draw-shape-id;>
-<!ATTLIST draw:object draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:object draw:notify-on-update-of-ranges %string; #IMPLIED>
-
-<!ELEMENT draw:object-ole (office:binary-data?|office:events?|draw:image-map?|svg:desc?|draw:contour-polygon?|draw:contour-path?|draw:thumbnail?)>
-<!ATTLIST draw:object-ole draw:class-id CDATA #IMPLIED>
-<!ATTLIST draw:object-ole %draw-style-name;>
-<!ATTLIST draw:object-ole draw:name %string; #IMPLIED>
-<!ATTLIST draw:object-ole xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:object-ole xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:object-ole xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:object-ole xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:object-ole %text-anchor;>
-<!ATTLIST draw:object-ole %draw-position;>
-<!ATTLIST draw:object-ole %draw-end-position; >
-<!ATTLIST draw:object-ole %table-background; >
-<!ATTLIST draw:object-ole svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object-ole svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:object-ole %presentation-class; >
-<!ATTLIST draw:object-ole %zindex;>
-<!ATTLIST draw:object-ole draw:id %draw-shape-id;>
-<!ATTLIST draw:object-ole draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT svg:desc (#PCDATA)>
-
-<!ELEMENT draw:contour-polygon EMPTY>
-<!ATTLIST draw:contour-polygon svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-polygon svg:height %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-polygon %draw-viewbox;>
-<!ATTLIST draw:contour-polygon svg:points %points; #REQUIRED>
-
-<!ELEMENT draw:contour-path EMPTY>
-<!ATTLIST draw:contour-path svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-path svg:height %coordinate; #REQUIRED>
-<!ATTLIST draw:contour-path %draw-viewbox;>
-<!ATTLIST draw:contour-path svg:d %pathData; #REQUIRED>
-
-<!-- hyperlink -->
-<!ELEMENT draw:a (draw:image|draw:text-box)>
-<!ATTLIST draw:a xlink:href %uriReference; #REQUIRED>
-<!ATTLIST draw:a xlink:type (simple) #FIXED "simple">
-<!ATTLIST draw:a xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:a xlink:actuate (onRequest) "onRequest">
-<!ATTLIST draw:a office:name %string; #IMPLIED>
-<!ATTLIST draw:a office:target-frame-name %string; #IMPLIED>
-<!ATTLIST draw:a office:server-map %boolean; "false">
-
-<!-- 3d properties -->
-<!ATTLIST style:properties dr3d:horizontal-segments %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties dr3d:vertical-segments %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties dr3d:edge-rounding %percentage; #IMPLIED>
-<!ATTLIST style:properties dr3d:edge-rounding-mode (correct|attractive) #IMPLIED>
-<!ATTLIST style:properties dr3d:back-scale %percentage; #IMPLIED>
-<!ATTLIST style:properties dr3d:end-angle %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties dr3d:depth %length; #IMPLIED>
-<!ATTLIST style:properties dr3d:backface-culling (enabled|disabled) #IMPLIED>
-<!ATTLIST style:properties dr3d:lighting-mode (standard|double-sided) #IMPLIED>
-<!ATTLIST style:properties dr3d:normals-kind (object|flat|sphere) #IMPLIED>
-<!ATTLIST style:properties dr3d:normals-direction (normal|inverse) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-generation-mode-x (object|parallel|sphere) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-generation-mode-y (object|parallel|sphere) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-kind (luminance|intesity|color) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-filter (enabled|disabled) #IMPLIED>
-<!ATTLIST style:properties dr3d:texture-mode (replace|modulate|blend) #IMPLIED>
-<!ATTLIST style:properties dr3d:ambient-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:emissive-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:specular-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:diffuse-color %color; #IMPLIED>
-<!ATTLIST style:properties dr3d:shininess %percentage; #IMPLIED>
-<!ATTLIST style:properties dr3d:shadow (visible|hidden) #IMPLIED>
-
-<!ELEMENT dr3d:light EMPTY>
-<!ATTLIST dr3d:light dr3d:diffuse-color %color; #IMPLIED>
-<!ATTLIST dr3d:light dr3d:direction %vector3D; #REQUIRED>
-<!ATTLIST dr3d:light dr3d:enabled %boolean; #IMPLIED>
-<!ATTLIST dr3d:light dr3d:specular %boolean; #IMPLIED>
-
-<!ENTITY % shapes3d "(dr3d:scene|dr3d:extrude|dr3d:sphere|dr3d:rotate|dr3d:cube)">
-
-<!ELEMENT dr3d:cube EMPTY>
-<!ATTLIST dr3d:cube dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:cube dr3d:min-edge %vector3D; #IMPLIED>
-<!ATTLIST dr3d:cube dr3d:max-edge %vector3D; #IMPLIED>
-<!ATTLIST dr3d:cube %zindex;>
-<!ATTLIST dr3d:cube draw:id %draw-shape-id;>
-<!ATTLIST dr3d:cube %draw-end-position; >
-<!ATTLIST dr3d:cube %table-background; >
-<!ATTLIST dr3d:cube %draw-style-name; >
-<!ATTLIST dr3d:cube draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:sphere EMPTY>
-<!ATTLIST dr3d:sphere dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:sphere dr3d:center %vector3D; #IMPLIED>
-<!ATTLIST dr3d:sphere dr3d:size %vector3D; #IMPLIED>
-<!ATTLIST dr3d:sphere %zindex;>
-<!ATTLIST dr3d:sphere draw:id %draw-shape-id;>
-<!ATTLIST dr3d:sphere %draw-end-position; >
-<!ATTLIST dr3d:sphere %table-background; >
-<!ATTLIST dr3d:sphere %draw-style-name; >
-<!ATTLIST dr3d:sphere draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:extrude EMPTY>
-<!ATTLIST dr3d:extrude dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:extrude %draw-viewbox;>
-<!ATTLIST dr3d:extrude svg:d %pathData; #REQUIRED >
-<!ATTLIST dr3d:extrude %zindex;>
-<!ATTLIST dr3d:extrude draw:id %draw-shape-id;>
-<!ATTLIST dr3d:extrude %draw-end-position; >
-<!ATTLIST dr3d:extrude %table-background; >
-<!ATTLIST dr3d:extrude %draw-style-name; >
-<!ATTLIST dr3d:extrude draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:rotate EMPTY>
-<!ATTLIST dr3d:rotate dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:rotate %draw-viewbox;>
-<!ATTLIST dr3d:rotate svg:d %pathData; #REQUIRED >
-<!ATTLIST dr3d:rotate %zindex;>
-<!ATTLIST dr3d:rotate draw:id %draw-shape-id;>
-<!ATTLIST dr3d:rotate %draw-end-position; >
-<!ATTLIST dr3d:rotate %table-background; >
-<!ATTLIST dr3d:rotate %draw-style-name; >
-<!ATTLIST dr3d:rotate draw:layer %layerName; #IMPLIED>
-
-<!ELEMENT dr3d:scene (dr3d:light*,(%shapes3d;)*)>
-<!ATTLIST dr3d:scene %draw-style-name; >
-<!ATTLIST dr3d:scene svg:x %coordinate; #IMPLIED>
-<!ATTLIST dr3d:scene svg:y %coordinate; #IMPLIED>
-<!ATTLIST dr3d:scene svg:width %length; #IMPLIED>
-<!ATTLIST dr3d:scene svg:height %length; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:vrp %vector3D; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:vpn %vector3D; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:vup %vector3D; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:projection (parallel|perspective) #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:transform CDATA #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:distance %length; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:focal-length %length; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:shadow-slant %nonNegativeInteger; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:shade-mode (flat|phong|gouraud|draft) #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:ambient-color %color; #IMPLIED>
-<!ATTLIST dr3d:scene dr3d:lighting-mode %boolean; #IMPLIED>
-<!ATTLIST dr3d:scene %zindex;>
-<!ATTLIST dr3d:scene draw:id %draw-shape-id;>
-<!ATTLIST dr3d:scene %draw-end-position; >
-<!ATTLIST dr3d:scene %table-background; >
-
-<!-- layer -->
-
-<!ELEMENT draw:layer-set (draw:layer*)>
-
-<!ELEMENT draw:layer EMPTY>
-<!ATTLIST draw:layer draw:name %layerName; #REQUIRED>
-
-<!-- events -->
-<!ELEMENT presentation:event (presentation:sound)?>
-<!ATTLIST presentation:event %event-name;>
-<!ATTLIST presentation:event presentation:action (none|previous-page|next-page|first-page|last-page|hide|stop|execute|show|verb|fade-out|sound) #REQUIRED>
-<!ATTLIST presentation:event presentation:effect %presentationEffects; "none">
-<!ATTLIST presentation:event presentation:direction %presentationEffectDirections; "none">
-<!ATTLIST presentation:event presentation:speed %presentationSpeeds; "medium">
-<!ATTLIST presentation:event presentation:start-scale %percentage; "100%">
-<!ATTLIST presentation:event xlink:href %uriReference; #IMPLIED>
-<!ATTLIST presentation:event xlink:type (simple) #IMPLIED>
-<!ATTLIST presentation:event xlink:show (embed) #IMPLIED>
-<!ATTLIST presentation:event xlink:actuate (onRequest) #IMPLIED>
-<!ATTLIST presentation:event presentation:verb %nonNegativeInteger; #IMPLIED>
-
-<!-- applets -->
-<!ELEMENT draw:applet (draw:thumbnail?, draw:param*, svg:desc?)>
-<!ATTLIST draw:applet xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:applet xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:applet xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:applet xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:applet draw:code CDATA #REQUIRED>
-<!ATTLIST draw:applet draw:object CDATA #IMPLIED>
-<!ATTLIST draw:applet draw:archive CDATA #IMPLIED>
-<!ATTLIST draw:applet draw:may-script %boolean; "false">
-<!ATTLIST draw:applet draw:name CDATA #IMPLIED>
-<!ATTLIST draw:applet %draw-style-name;>
-<!ATTLIST draw:applet svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:applet svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:applet %zindex;>
-<!ATTLIST draw:applet draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:applet %draw-position;>
-<!ATTLIST draw:applet %draw-end-position; >
-
-<!-- plugins -->
-<!ELEMENT draw:plugin (draw:thumbnail?, draw:param*, svg:desc?)>
-<!ATTLIST draw:plugin xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:plugin xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:plugin xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:plugin xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:plugin draw:mime-type CDATA #IMPLIED>
-<!ATTLIST draw:plugin draw:name CDATA #IMPLIED>
-<!ATTLIST draw:plugin %draw-style-name;>
-<!ATTLIST draw:plugin svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:plugin svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:plugin %zindex;>
-<!ATTLIST draw:plugin draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:plugin %draw-position;>
-<!ATTLIST draw:plugin %draw-end-position; >
-
-<!-- Paramaters -->
-<!ELEMENT draw:param EMPTY>
-<!ATTLIST draw:param draw:name CDATA #IMPLIED>
-<!ATTLIST draw:param draw:value CDATA #IMPLIED>
-
-<!-- Floating Frames -->
-<!ELEMENT draw:floating-frame (draw:thumbnail?, svg:desc?)>
-<!ATTLIST draw:floating-frame xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:floating-frame xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:floating-frame xlink:show (embed) #IMPLIED>
-<!ATTLIST draw:floating-frame xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST draw:floating-frame draw:name CDATA #IMPLIED>
-<!ATTLIST draw:floating-frame draw:frame-name CDATA #IMPLIED>
-<!ATTLIST draw:floating-frame %draw-style-name;>
-<!ATTLIST draw:floating-frame svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:floating-frame svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST draw:floating-frame %zindex;>
-<!ATTLIST draw:floating-frame draw:layer %layerName; #IMPLIED>
-<!ATTLIST draw:floating-frame %draw-position;>
-<!ATTLIST draw:floating-frame %draw-end-position; >
-
-<!-- Image Maps -->
-<!ELEMENT draw:image-map
- (draw:area-rectangle|draw:area-circle|draw:area-polygon)*>
-
-<!ELEMENT draw:area-rectangle (svg:desc?,office:events?)>
-<!ATTLIST draw:area-rectangle xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:area-rectangle xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:area-rectangle office:target-frame-name CDATA #IMPLIED>
-<!ATTLIST draw:area-rectangle xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:area-rectangle office:name CDATA #IMPLIED>
-<!ATTLIST draw:area-rectangle draw:nohref (nohref) #IMPLIED>
-<!ATTLIST draw:area-rectangle svg:x %coordinate; #REQUIRED>
-<!ATTLIST draw:area-rectangle svg:y %coordinate; #REQUIRED>
-<!ATTLIST draw:area-rectangle svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:area-rectangle svg:height %coordinate; #REQUIRED>
-
-<!ELEMENT draw:area-circle (svg:desc?,office:events?)>
-<!ATTLIST draw:area-circle xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:area-circle xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:area-circle office:target-frame-name CDATA #IMPLIED>
-<!ATTLIST draw:area-circle xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:area-circle office:name CDATA #IMPLIED>
-<!ATTLIST draw:area-circle draw:nohref (nohref) #IMPLIED>
-<!ATTLIST draw:area-circle svg:cx %coordinate; #REQUIRED>
-<!ATTLIST draw:area-circle svg:cy %coordinate; #REQUIRED>
-<!ATTLIST draw:area-circle svg:r %coordinate; #REQUIRED>
-
-<!ELEMENT draw:area-polygon (svg:desc?,office:events?)>
-<!ATTLIST draw:area-polygon xlink:href %uriReference; #IMPLIED>
-<!ATTLIST draw:area-polygon xlink:type (simple) #IMPLIED>
-<!ATTLIST draw:area-polygon office:target-frame-name CDATA #IMPLIED>
-<!ATTLIST draw:area-polygon xlink:show (new|replace) #IMPLIED>
-<!ATTLIST draw:area-polygon office:name CDATA #IMPLIED>
-<!ATTLIST draw:area-polygon draw:nohref (nohref) #IMPLIED>
-<!ATTLIST draw:area-polygon svg:x %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:y %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:width %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:height %coordinate; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:points %points; #REQUIRED>
-<!ATTLIST draw:area-polygon svg:viewBox CDATA #REQUIRED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/dtypes.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/dtypes.mod
deleted file mode 100644
index e4d640d012c8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/dtypes.mod
+++ /dev/null
@@ -1,143 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!-- datatypes corresponding to XML Schema Part 2 W3C Working draft of -->
-<!-- 07 April 2000 -->
-
-<!-- string -->
-<!ENTITY % string "CDATA">
-<!ENTITY % cString "#PCDATA">
-
-<!-- boolean (values are "true" and "false" -->
-<!ENTITY % boolean "CDATA">
-
-<!-- integer ( ..., -2, -1, 0, 1, 2, ...) -->
-<!ENTITY % integer "CDATA">
-
-<!-- non negative integer ( 0, 1, 2, ...) -->
-<!ENTITY % nonNegativeInteger "CDATA">
-
-<!-- positive integer ( 1, 2, ...) -->
-<!ENTITY % positiveInteger "CDATA">
-<!ENTITY % cPositiveInteger "#PCDATA">
-
-<!ENTITY % positiveNumberOrDefault "CDATA">
-
-<!-- time duration as specified by ISO8601, section 5.5.3.2 -->
-<!ENTITY % timeDuration "CDATA">
-<!ENTITY % cTimeDuration "#PCDATA">
-
-<!-- time instance as specified by ISO8601, section 5.4 -->
-<!ENTITY % timeInstance "CDATA">
-<!ENTITY % cTimeInstance "#PCDATA">
-
-<!-- date instance as specified by ISO8601, section 5.2.1.1, extended format-->
-<!ENTITY % date "CDATA">
-<!ENTITY % cDate "#PCDATA">
-
-<!-- date duration, like timDuration but truncated to full dates -->
-<!ENTITY % dateDuration "CDATA">
-<!ENTITY % cDateDuration "#PCDATA">
-
-<!-- URI reference -->
-<!ENTITY % uriReference "CDATA">
-
-<!-- language code as specified by RFC1766 -->
-<!ENTITY % language "CDATA">
-<!ENTITY % cLanguage "#PCDATA">
-
-<!-- float -->
-<!ENTITY % float "CDATA">
-
-<!-- Some other common used data types -->
-
-<!-- a single UNICODE character -->
-<!ENTITY % character "CDATA">
-
-<!-- a style name -->
-<!ENTITY % styleName "CDATA">
-
-<!-- a target frame mame -->
-<!ENTITY % targetFrameName "CDATA">
-
-<!-- a language without a country as specified by ISO639 -->
-<!ENTITY % languageOnly "CDATA">
-
-<!-- a country as specified by ISO3166 -->
-<!ENTITY % country "CDATA">
-
-<!-- a color value having the format #rrggbb -->
-<!ENTITY % color "CDATA">
-<!-- a color value having the format #rrggbb or "transparent" -->
-<!ENTITY % transparentOrColor "CDATA">
-
-<!-- a percentage -->
-<!ENTITY % percentage "CDATA">
-
-<!-- a length (i.e. 1cm or .6inch) -->
-<!ENTITY % length "CDATA">
-<!ENTITY % positiveLength "CDATA">
-<!ENTITY % nonNegativeLength "CDATA">
-<!ENTITY % lengthOrNoLimit "CDATA">
-
-<!-- a length or a percentage -->
-<!ENTITY % lengthOrPercentage "CDATA">
-<!ENTITY % positiveLengthOrPercentage "CDATA">
-
-<!-- a pixel length (i.e. 2px) -->
-<!ENTITY % nonNegativePixelLength "CDATA">
-
-<!-- a float or a percentage -->
-<!ENTITY % floatOrPercentage "CDATA">
-
-<!-- a text encoding -->
-<!ENTITY % textEncoding "CDATA">
-
-<!-- cell address and cell range address -->
-<!ENTITY % cell-address "CDATA">
-<!ENTITY % cell-range-address "CDATA">
-<!ENTITY % cell-range-address-list "CDATA">
-
-<!-- value types -->
-<!ENTITY % valueType "(float|time|date|percentage|currency|boolean|string)">
-
-<!-- an svg coordinate in different distance formats -->
-<!ENTITY % coordinate "CDATA">
-
-<!ENTITY % coordinateOrPercentage "CDATA">
-
-<!ENTITY % shape "draw:rect|draw:line|draw:polyline|draw:polygon|draw:path|
- draw:circle|draw:ellipse|draw:g|draw:page-thumbnail|
- draw:text-box|draw:image|draw:object|draw:object-ole|
- draw:applet|draw:floating-frame|draw:plugin|
- draw:measure|draw:caption|draw:connector|chart:chart|
- dr3d:scene|draw:control" >
-<!ENTITY % shapes "(%shape;)" >
-
-<!ENTITY % anchorType "(page|frame|paragraph|char|as-char)">
-
-<!ENTITY % control-id "form:id CDATA #REQUIRED">
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/form.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/form.mod
deleted file mode 100644
index 77a91206c451..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/form.mod
+++ /dev/null
@@ -1,308 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % controls "form:text|form:textarea|form:fixed-text|form:file|
- form:password|form:formatted-text|form:button|form:image|
- form:checkbox|form:radio|form:listbox|form:combobox|form:frame|
- form:hidden|form:image-frame|form:grid|form:generic-control">
-
-<!ENTITY % name "form:name CDATA #IMPLIED">
-<!ENTITY % service-name "form:service-name CDATA #IMPLIED">
-
-<!ENTITY % navigation "(none|current|parent)">
-<!ENTITY % cycles "(records|current|page)">
-<!ENTITY % url "CDATA">
-
-
-<!ENTITY % types "(submit|reset|push|url)">
-<!ENTITY % button-type "form:button-type %types; 'push'">
-<!ENTITY % current-selected "form:current-selected %boolean; 'false'">
-<!ENTITY % current-value "form:current-value CDATA #IMPLIED">
-<!ENTITY % value "form:value CDATA #IMPLIED">
-<!ENTITY % disabled "form:disabled %boolean; 'false'">
-<!ENTITY % dropdown "form:dropdown %boolean; 'false'">
-<!ENTITY % for "form:for CDATA #IMPLIED">
-<!ENTITY % image-data "form:image-data %url; #IMPLIED">
-<!ENTITY % label "form:label CDATA #IMPLIED">
-<!ENTITY % max-length "form:max-length CDATA #IMPLIED">
-<!ENTITY % printable "form:printable %boolean; 'true'">
-<!ENTITY % readonly "form:readonly %boolean; 'false'">
-<!ENTITY % size "form:size CDATA #IMPLIED">
-<!ENTITY % selected "form:selected %boolean; 'false'">
-<!ENTITY % size "form:size CDATA #IMPLIED">
-<!ENTITY % tab-index "form:tab-index CDATA #IMPLIED">
-<!ENTITY % target-frame "office:target-frame CDATA '_blank'">
-<!ENTITY % target-location "xlink:href %url; #IMPLIED">
-<!ENTITY % tab-stop "form:tab-stop %boolean; 'true'">
-<!ENTITY % title "form:title CDATA #IMPLIED">
-<!ENTITY % default-value "form:default-value CDATA #IMPLIED">
-<!ENTITY % bound-column "form:bound-column CDATA #IMPLIED">
-<!ENTITY % convert-empty "form:convert-empty-to-null %boolean; 'false'">
-<!ENTITY % data-field "form:data-field CDATA #IMPLIED">
-<!ENTITY % list-source "form:list-source CDATA #IMPLIED">
-<!ENTITY % list-source-types "(table|query|sql|sql-pass-through|value-list|table-fields)">
-<!ENTITY % list-source-type "form:list-source-type %list-source-types; #IMPLIED">
-
-<!ELEMENT form:control (%controls;)+>
-<!ATTLIST form:control %name;
- %service-name;
- %control-id;>
-
-<!ELEMENT form:form (form:properties?, office:events?, (form:control|form:form)*)>
-<!ATTLIST form:form %name; %service-name;>
-<!ATTLIST form:form xlink:href %url; #IMPLIED>
-<!ATTLIST form:form form:enctype CDATA "application/x-www-form-urlencoded">
-<!ATTLIST form:form form:method CDATA "get">
-<!ATTLIST form:form office:target-frame CDATA "_blank">
-<!ATTLIST form:form form:allow-deletes %boolean; "true">
-<!ATTLIST form:form form:allow-inserts %boolean; "true">
-<!ATTLIST form:form form:allow-updates %boolean; "true">
-<!ATTLIST form:form form:apply-filter %boolean; "false">
-<!ATTLIST form:form form:command CDATA #IMPLIED>
-<!ATTLIST form:form form:command-type (table|query|command) "command">
-<!ATTLIST form:form form:datasource CDATA #IMPLIED>
-<!ATTLIST form:form form:detail-fields CDATA #IMPLIED>
-<!ATTLIST form:form form:escape-processing %boolean; "true">
-<!ATTLIST form:form form:filter CDATA #IMPLIED>
-<!ATTLIST form:form form:ignore-result %boolean; "false">
-<!ATTLIST form:form form:master-fields CDATA #IMPLIED>
-<!ATTLIST form:form form:navigation-mode %navigation; #IMPLIED>
-<!ATTLIST form:form form:order CDATA #IMPLIED>
-<!ATTLIST form:form form:tab-cycle %cycles; #IMPLIED>
-
-<!ELEMENT office:forms (form:form*)>
-<!ATTLIST office:forms form:automatic-focus %boolean; "false">
-<!ATTLIST office:forms form:apply-design-mode %boolean; "true">
-
-<!ELEMENT form:text (form:properties?, office:events?)>
-<!ATTLIST form:text %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;>
-
-<!ELEMENT form:textarea (form:properties?, office:events?)>
-<!ATTLIST form:textarea %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;>
-
-<!ELEMENT form:password (form:properties?, office:events?)>
-<!ATTLIST form:password %disabled;
- %max-length;
- %printable;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;>
-
-<!ATTLIST form:password form:echo-char CDATA "*">
-
-<!ELEMENT form:file (form:properties?, office:events?)>
-<!ATTLIST form:file %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;>
-
-<!ELEMENT form:formatted-text (form:properties?, office:events?)>
-<!ATTLIST form:formatted-text %current-value;
- %disabled;
- %max-length;
- %printable;
- %readonly;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;>
-<!ATTLIST form:formatted-text form:max-value CDATA #IMPLIED>
-<!ATTLIST form:formatted-text form:min-value CDATA #IMPLIED>
-<!ATTLIST form:formatted-text form:validation %boolean; "false">
-
-<!ELEMENT form:fixed-text (form:properties?, office:events?)>
-<!ATTLIST form:fixed-text %for;
- %disabled;
- %label;
- %printable;
- %title;>
-<!ATTLIST form:fixed-text form:multi-line %boolean; "false">
-
-<!ELEMENT form:combobox (form:properties?, office:events?, form:item*)>
-<!ATTLIST form:combobox %current-value;
- %disabled;
- %dropdown;
- %max-length;
- %printable;
- %readonly;
- %size;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %convert-empty;
- %data-field;
- %list-source;
- %list-source-type;>
-<!ATTLIST form:combobox form:auto-complete %boolean; #IMPLIED>
-
-<!ELEMENT form:item (#PCDATA)>
-<!ATTLIST form:item %label;>
-
-<!ELEMENT form:listbox (form:properties?, office:events?, form:option*)>
-<!ATTLIST form:listbox %disabled;
- %dropdown;
- %printable;
- %size;
- %tab-index;
- %tab-stop;
- %title;
- %bound-column;
- %data-field;
- %list-source;
- %list-source-type;>
-<!ATTLIST form:listbox form:multiple %boolean; "false">
-
-<!ELEMENT form:option (#PCDATA)>
-<!ATTLIST form:option %current-selected;
- %selected;
- %label;
- %value;>
-
-<!ELEMENT form:button (form:properties?, office:events?)>
-<!ATTLIST form:button %button-type;
- %disabled;
- %label;
- %image-data;
- %printable;
- %tab-index;
- %tab-stop;
- %target-frame;
- %target-location;
- %title;
- %value;>
-<!ATTLIST form:button form:default-button %boolean; "false">
-
-<!ELEMENT form:image (form:properties?, office:events?)>
-<!ATTLIST form:image %button-type;
- %disabled;
- %image-data;
- %printable;
- %tab-index;
- %tab-stop;
- %target-frame;
- %target-location;
- %title;
- %value;>
-
-<!ELEMENT form:checkbox (form:properties?, office:events?)>
-<!ATTLIST form:checkbox %disabled;
- %label;
- %printable;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %data-field;>
-<!ENTITY % states "(unchecked|checked|unknown)">
-<!ATTLIST form:checkbox form:current-state %states; #IMPLIED>
-<!ATTLIST form:checkbox form:is-tristate %boolean; "false">
-<!ATTLIST form:checkbox form:state %states; "unchecked">
-
-<!ELEMENT form:radio (form:properties?, office:events?)>
-<!ATTLIST form:radio %current-selected;
- %disabled;
- %label;
- %printable;
- %selected;
- %tab-index;
- %tab-stop;
- %title;
- %value;
- %data-field;>
-
-<!ELEMENT form:frame (form:properties?, office:events?)>
-<!ATTLIST form:frame %disabled;
- %for;
- %label;
- %printable;
- %title;>
-
-<!ELEMENT form:image-frame (form:properties?, office:events?)>
-<!ATTLIST form:image-frame %disabled;
- %image-data;
- %printable;
- %readonly;
- %title;
- %data-field;>
-
-<!ELEMENT form:hidden (form:properties?, office:events?)>
-<!ATTLIST form:hidden %name;
- %service-name;
- %value;>
-
-<!ELEMENT form:grid (form:properties?, office:events?, form:column*)>
-<!ATTLIST form:grid %disabled;
- %printable;
- %tab-index;
- %tab-stop;
- %title;>
-<!ENTITY % column-type "form:text| form:textarea| form:formatted-text|form:checkbox| form:listbox| form:combobox">
-<!ELEMENT form:column (%column-type;)+>
-<!ATTLIST form:column %name;
- %service-name;
- %label;>
-
-<!ELEMENT form:generic-control (form:properties?, office:events?)>
-
-
-<!ELEMENT form:properties (form:property+)>
-<!ELEMENT form:property (form:property-value*)>
-<!ATTLIST form:property form:property-is-list %boolean; #IMPLIED>
-<!ATTLIST form:property form:property-name CDATA #REQUIRED>
-<!ATTLIST form:property form:property-type (boolean|short|int|long|double|string) #REQUIRED>
-<!ELEMENT form:property-value (#PCDATA)>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/meta.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/meta.mod
deleted file mode 100644
index 1ea845bcb02d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/meta.mod
+++ /dev/null
@@ -1,90 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-
-<!ELEMENT meta:generator (%cString;)>
-
-<!ELEMENT dc:title (%cString;)>
-
-<!ELEMENT dc:description (%cString;)>
-
-<!ELEMENT dc:subject (%cString;)>
-
-<!ELEMENT meta:keywords (meta:keyword)*>
-<!ELEMENT meta:keyword (%cString;)>
-
-<!ELEMENT meta:initial-creator (%cString;)>
-
-<!ELEMENT dc:creator (%cString;)>
-
-<!ELEMENT meta:printed-by (%cString;)>
-
-<!ELEMENT meta:creation-date (%cTimeInstance;)>
-
-<!ELEMENT dc:date (%cTimeInstance;)>
-
-<!ELEMENT meta:print-date (%cTimeInstance;)>
-
-<!ELEMENT meta:template EMPTY>
-<!ATTLIST meta:template xlink:type (simple) #FIXED "simple">
-<!ATTLIST meta:template xlink:actuate (onRequest) "onRequest">
-<!ATTLIST meta:template xlink:href %uriReference; #REQUIRED>
-<!ATTLIST meta:template xlink:title %string; #IMPLIED>
-<!ATTLIST meta:template meta:date %timeInstance; #IMPLIED>
-
-<!ELEMENT meta:auto-reload EMPTY>
-<!ATTLIST meta:auto-reload xlink:type (simple) #IMPLIED>
-<!ATTLIST meta:auto-reload xlink:show (replace) #IMPLIED>
-<!ATTLIST meta:auto-reload xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST meta:auto-reload xlink:href %uriReference; #IMPLIED>
-<!ATTLIST meta:auto-reload meta:delay %timeDuration; "P0S">
-
-<!ELEMENT meta:hyperlink-behaviour EMPTY>
-<!ATTLIST meta:hyperlink-behaviour office:target-frame-name %targetFrameName; #IMPLIED>
-<!ATTLIST meta:hyperlink-behaviour xlink:show (new|replace) #IMPLIED>
-
-<!ELEMENT dc:language (%cLanguage;)>
-
-<!ELEMENT meta:editing-cycles (%cPositiveInteger;)>
-
-<!ELEMENT meta:editing-duration (%cTimeDuration;)>
-
-<!ELEMENT meta:user-defined (%cString;)>
-<!ATTLIST meta:user-defined meta:name %string; #REQUIRED>
-
-<!ELEMENT meta:document-statistic EMPTY>
-<!ATTLIST meta:document-statistic meta:page-count %positiveInteger; #IMPLIED
- meta:table-count %nonNegativeInteger; #IMPLIED
- meta:draw-count %nonNegativeInteger; #IMPLIED
- meta:image-count %nonNegativeInteger; #IMPLIED
- meta:ole-object-count %nonNegativeInteger; #IMPLIED
- meta:paragraph-count %nonNegativeInteger; #IMPLIED
- meta:word-count %nonNegativeInteger; #IMPLIED
- meta:character-count %nonNegativeInteger; #IMPLIED
- meta:row-count %nonNegativeInteger; #IMPLIED
- meta:cell-count %nonNegativeInteger; #IMPLIED
- meta:object-count %positiveInteger; #IMPLIED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/nmspace.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/nmspace.mod
deleted file mode 100644
index b7f6b64140a6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/nmspace.mod
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY nFO "http://www.w3.org/1999/XSL/Format">
-<!ENTITY nXLink "http://www.w3.org/1999/xlink">
-<!ENTITY nSVG "http://www.w3.org/2000/svg">
-
-<!-- StarOffice namespace names and prefixes -->
-
-<!ENTITY nOpenOffice "http://openoffice.org/2000">
-<!ENTITY nOpenOffice2001 "http://openoffice.org/2001">
-
-<!ENTITY nOffice "&nOpenOffice;/office">
-<!ENTITY nStyle "&nOpenOffice;/style">
-<!ENTITY nText "&nOpenOffice;/text">
-<!ENTITY nTable "&nOpenOffice;/table">
-<!ENTITY nMeta "&nOpenOffice;/meta">
-<!ENTITY nScript "&nOpenOffice;/script">
-<!ENTITY nDraw "&nOpenOffice;/drawing">
-<!ENTITY nChart "&nOpenOffice;/chart">
-<!ENTITY nNumber "&nOpenOffice;/datastyle">
-<!ENTITY nConfig "&nOpenOffice2001;/config">
-
-
-<!-- dublin core namespace name and prefic -->
-<!ENTITY nDC "http://purl.org/dc/elements/1.1/">
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.dtd b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.dtd
deleted file mode 100644
index 9bcd37edf325..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.dtd
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % dtypes-mod SYSTEM "dtypes.mod">
-%dtypes-mod;
-<!ENTITY % nmspace-mod SYSTEM "nmspace.mod">
-%nmspace-mod;
-<!ENTITY % style-mod SYSTEM "style.mod">
-%style-mod;
-<!ENTITY % office-mod SYSTEM "office.mod">
-%office-mod;
-<!ENTITY % meta-mod SYSTEM "meta.mod">
-%meta-mod;
-<!ENTITY % script-mod SYSTEM "script.mod">
-%script-mod;
-<!ENTITY % drawing-mod SYSTEM "drawing.mod">
-%drawing-mod;
-<!ENTITY % text-mod SYSTEM "text.mod">
-%text-mod;
-<!ENTITY % table-mod SYSTEM "table.mod">
-%table-mod;
-<!ENTITY % chart-mod SYSTEM "chart.mod">
-%chart-mod;
-<!ENTITY % datastyl-mod SYSTEM "datastyl.mod">
-%datastyl-mod;
-<!ENTITY % form-mod SYSTEM "form.mod">
-%form-mod;
-<!ENTITY % settings-mod SYSTEM "settings.mod">
-%settings-mod;
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.mod
deleted file mode 100644
index f8e3775fa6da..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/office.mod
+++ /dev/null
@@ -1,234 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT office:document ( office:meta?,
- office:settings?,
- office:script?,
- office:font-decls?,
- office:styles?,
- office:automatic-styles?,
- office:master-styles?,
- office:body ) >
-
-<!ATTLIST office:document xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document office:class
- (text|text-global|
- drawing|presentation|
- spreadsheet|chart) #REQUIRED>
-
-<!ATTLIST office:document office:version %string; #IMPLIED>
-
-<!-- document-styles -->
-<!ELEMENT office:document-styles (
- office:font-decls?,
- office:styles?,
- office:automatic-styles?,
- office:master-styles? ) >
-
-<!ATTLIST office:document-styles xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-styles xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document-styles xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document-styles xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document-styles xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document-styles xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document-styles xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document-styles xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document-styles xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document-styles xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document-styles xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-styles xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document-styles xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document-styles office:version %string; #IMPLIED>
-
-<!-- document-content -->
-
-<!ELEMENT office:document-content (
- office:script?,
- office:font-decls?,
- office:automatic-styles?,
- office:body ) >
-
-<!ATTLIST office:document-content xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-content xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document-content xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document-content xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document-content xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document-content xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document-content xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document-content xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document-content xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document-content xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document-content xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-content xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document-content xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document-content office:class
- (text|text-global|
- drawing|presentation|
- spreadsheet|chart) #REQUIRED>
-
-<!ATTLIST office:document-content office:version %string; #IMPLIED>
-
-<!-- document-content -->
-
-<!ELEMENT office:document-meta ( office:meta? ) >
-
-<!ATTLIST office:document-meta xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-meta xmlns:meta CDATA #FIXED "&nMeta;">
-<!ATTLIST office:document-meta xmlns:script CDATA #FIXED "&nScript;">
-<!ATTLIST office:document-meta xmlns:style CDATA #FIXED "&nStyle;">
-<!ATTLIST office:document-meta xmlns:text CDATA #FIXED "&nText;">
-<!ATTLIST office:document-meta xmlns:table CDATA #FIXED "&nTable;">
-<!ATTLIST office:document-meta xmlns:draw CDATA #FIXED "&nDraw;">
-<!ATTLIST office:document-meta xmlns:chart CDATA #FIXED "&nChart;">
-<!ATTLIST office:document-meta xmlns:number CDATA #FIXED "&nNumber;">
-<!ATTLIST office:document-meta xmlns:fo CDATA #FIXED "&nFO;">
-<!ATTLIST office:document-meta xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-meta xmlns:svg CDATA #FIXED "&nSVG;">
-<!ATTLIST office:document-meta xmlns:dc CDATA #FIXED "&nDC;">
-
-<!ATTLIST office:document-meta office:version %string; #IMPLIED>
-
-<!ELEMENT office:document-settings (office:settings) >
-<!ATTLIST office:document-settings xmlns:office CDATA #FIXED "&nOffice;">
-<!ATTLIST office:document-settings xmlns:xlink CDATA #FIXED "&nXLink;">
-<!ATTLIST office:document-settings xmlns:config CDATA #FIXED "&nConfig;">
-
-<!ATTLIST office:document-settings office:version %string; #IMPLIED>
-
-<!ENTITY % meta "(meta:generator?,
- dc:title?,
- dc:description?,
- dc:subject?,
- meta:initial-creator?,
- meta:creation-date?,
- dc:creator?,
- dc:date?,
- meta:printed-by?,
- meta:print-date?,
- meta:keywords?,
- dc:language?,
- meta:editing-cycles?,
- meta:editing-duration?,
- meta:hyperlink-behaviour?,
- meta:auto-reload?,
- meta:template?,
- meta:user-defined*,
- meta:document-statistic?)">
-<!ELEMENT office:meta %meta;>
-
-<!ENTITY % script "(script:library-embedded |
- script:library-linked)*">
-<!ELEMENT office:script %script;>
-
-<!ELEMENT office:font-decls (style:font-decl)*>
-
-<!ENTITY % styles "(style:default-style|style:style|text:list-style|
- number:number-style|number:currency-style|number:percentage-style|
- number:date-style|number:time-style|number:boolean-style|
- number:text-style|
- draw:gradient|draw:hatch|draw:fill-image|draw:marker|draw:stroke-dash|
- style:presentation-page-layout|draw:transparency)">
-
-<!-- Validity constraint: The elements
- text:outline-style,
- text:footnotes-configuration,
- text:endnotes-configuration,
- text:bibliography-configuration and
- text:linenumbering-configuration
- may appear only once!
- Unfortunatetly, this constraint cannot be easily specified in the DTD.
--->
-<!ELEMENT office:styles (%styles;|text:outline-style|
- text:footnotes-configuration|text:endnotes-configuration|
- text:bibliography-configuration|text:linenumbering-configuration)*>
-
-<!ELEMENT office:automatic-styles (%styles;|style:page-master)*>
-
-<!ELEMENT office:master-styles (draw:layer-set?,style:handout-master?,style:master-page*) >
-
-<!ENTITY % text-decls "text:variable-decls?, text:sequence-decls?,
- text:user-field-decls?, text:dde-connection-decls?,
- text:alphabetical-index-auto-mark-file?" >
-
-<!ENTITY % change-marks "text:change | text:change-start | text:change-end">
-
-<!ENTITY % body "(office:forms?,(text:tracked-changes|table:tracked-changes)?,%text-decls;,table:calculation-settings?,table:content-validations?,table:label-ranges?,
- (text:h|text:p|text:ordered-list|
- text:unordered-list|table:table|draw:page|
- draw:a|%shape;|text:section|text:table-of-content|
- text:illustration-index|text:table-index|text:object-index|
- text:user-index|text:alphabetical-index|text:bibliography|
- %change-marks;)*,
- table:named-expressions?,
- table:database-ranges?,table:data-pilot-tables?,
- table:consolidation?,
- table:dde-links?,
- presentation:settings?)">
-<!ELEMENT office:body %body;>
-<!ATTLIST office:body table:structure-protected %boolean; "false"
- table:protection-key CDATA #IMPLIED>
-
-<!ELEMENT office:events (script:event|presentation:event)*>
-
-<!-- DDE source: for text sections and tables -->
-<!ELEMENT office:dde-source EMPTY>
-<!ATTLIST office:dde-source office:dde-application CDATA #IMPLIED>
-<!ATTLIST office:dde-source office:dde-topic CDATA #IMPLIED>
-<!ATTLIST office:dde-source office:dde-item CDATA #IMPLIED>
-<!ATTLIST office:dde-source office:automatic-update %boolean; "false">
-<!ATTLIST office:dde-source office:name CDATA #IMPLIED>
-<!ATTLIST office:dde-source table:conversion-mode (into-default-style-data-style|into-english-number|let-text) "into-default-style-data-style" >
-
-<!-- annotations -->
-<!-- limitation: in the current implementation, only plain text inside of
- paragraphs is supported -->
-<!ELEMENT office:annotation (text:p)*>
-<!ATTLIST office:annotation office:author %string; #IMPLIED>
-<!ATTLIST office:annotation office:create-date %date; #IMPLIED>
-<!ATTLIST office:annotation office:create-date-string %string; #IMPLIED>
-<!ATTLIST office:annotation office:display %boolean; "false">
-
-<!ELEMENT office:change-info (text:p)*>
-<!ATTLIST office:change-info office:chg-author %string; #REQUIRED>
-<!ATTLIST office:change-info office:chg-date-time %timeInstance; #REQUIRED>
-
-<!ELEMENT office:binary-data (#PCDATA)>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/script.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/script.mod
deleted file mode 100644
index 4d13ff74aebc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/script.mod
+++ /dev/null
@@ -1,51 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT script:library-embedded (script:module*)>
-<!ATTLIST script:library-embedded script:name %string; #REQUIRED>
-<!ATTLIST script:library-embedded script:password %string; #IMPLIED>
-
-<!ELEMENT script:library-linked EMPTY>
-<!ATTLIST script:library-linked script:name %string; #REQUIRED>
-<!ATTLIST script:library-linked xlink:href %string; #REQUIRED>
-<!ATTLIST script:library-linked xlink:type (simple) #FIXED "simple">
-
-<!ELEMENT script:module (#PCDATA)>
-<!ATTLIST script:module script:name %string; #REQUIRED>
-<!ATTLIST script:module script:language %string; #IMPLIED>
-
-
-<!ENTITY % script-language "script:language %string; #REQUIRED">
-<!ENTITY % event-name "script:event-name %string; #REQUIRED">
-<!ENTITY % location "script:location (document|application) #REQUIRED">
-<!ENTITY % macro-name "script:macro-name %string; #REQUIRED">
-
-<!ELEMENT script:event (#PCDATA)>
-<!ATTLIST script:event %script-language;
- %event-name;
- %location;
- %macro-name;>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/settings.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/settings.mod
deleted file mode 100644
index bb9224237fa8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/settings.mod
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT office:settings (config:config-item-set+)>
-
-<!ENTITY % items "(config:config-item |
- config:config-item-set |
- config:config-item-map-named |
- config:config-item-map-indexed)+">
-
-<!ELEMENT config:config-item-set %items;>
-<!ATTLIST config:config-item-set config:name CDATA #REQUIRED>
-
-<!ELEMENT config:config-item (#PCDATA)>
-<!ATTLIST config:config-item config:name CDATA #REQUIRED
- config:type (boolean | short | int | long | double | string | datetime | base64Binary) #REQUIRED>
-
-<!ELEMENT config:config-item-map-named (config:config-item-map-entry)+>
-<!ATTLIST config:config-item-map-named config:name CDATA #REQUIRED>
-
-<!ELEMENT config:config-item-map-indexed (config:config-item-map-entry)+>
-<!ATTLIST config:config-item-map-indexed config:name CDATA #REQUIRED>
-
-<!ELEMENT config:config-item-map-entry %items;>
-<!ATTLIST config:config-item-map-entry config:name CDATA #IMPLIED>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/style.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/style.mod
deleted file mode 100644
index 21a3d9d17dd1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/style.mod
+++ /dev/null
@@ -1,391 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT style:font-decl EMPTY>
-<!ATTLIST style:font-decl style:name %string; #REQUIRED>
-<!ATTLIST style:font-decl fo:font-family %string; #REQUIRED>
-<!ATTLIST style:font-decl style:font-style-name %string; #IMPLIED>
-<!ENTITY % fontFamilyGeneric "(roman|swiss|modern|decorative|script|system)">
-<!ATTLIST style:font-decl style:font-family-generic %fontFamilyGeneric;
- #IMPLIED>
-<!ENTITY % fontPitch "(fixed|variable)">
-<!ATTLIST style:font-decl style:font-pitch %fontPitch; #IMPLIED>
-<!ATTLIST style:font-decl style:font-charset %textEncoding; #IMPLIED>
-
-<!ELEMENT style:style ( style:properties?,office:events?,style:map*)>
-
-<!ATTLIST style:style style:name %styleName; #REQUIRED>
-
-<!ENTITY % styleFamily "(paragraph|text|section|
- table|table-column|table-row|table-cell|table-page|chart|graphics|default|drawing-page|presentation|control)">
-<!ATTLIST style:style style:family %styleFamily; #REQUIRED>
-
-<!ATTLIST style:style style:parent-style-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:master-page-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:next-style-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:list-style-name %styleName; #IMPLIED>
-<!ATTLIST style:style style:data-style-name %styleName; #IMPLIED>
-
-<!ATTLIST style:style style:auto-update %boolean; "false">
-
-<!ATTLIST style:style style:class %string; #IMPLIED>
-
-<!ELEMENT style:default-style (style:properties?)>
-<!ATTLIST style:default-style style:family %styleFamily; #REQUIRED>
-
-<!ELEMENT style:map EMPTY>
-
-<!ATTLIST style:map style:condition %string; #REQUIRED>
-<!ATTLIST style:map style:apply-style-name %styleName; #REQUIRED>
-<!ATTLIST style:map style:base-cell-address %cell-address; #IMPLIED>
-
-<!ELEMENT style:properties ANY>
-
-<!-- number format properties -->
-<!ATTLIST style:properties style:num-prefix %string; #IMPLIED>
-<!ATTLIST style:properties style:num-suffix %string; #IMPLIED>
-<!ATTLIST style:properties style:num-format %string; #IMPLIED>
-<!ATTLIST style:properties style:num-letter-sync %boolean; #IMPLIED>
-
-<!-- frame properties -->
-<!ATTLIST style:properties fo:width %positiveLength; #IMPLIED>
-<!ATTLIST style:properties fo:height %positiveLength; #IMPLIED>
-<!ATTLIST style:properties style:vertical-pos (top|middle|bottom|from-top) #IMPLIED>
-<!ATTLIST style:properties style:vertical-rel (page|page-content|
- frame|frame-content|
- paragraph|paragraph-content|char|
- line|baseline|text) #IMPLIED>
-<!ATTLIST style:properties style:horizontal-pos (left|center|right|from-left|inside|outside|from-inside) #IMPLIED>
-<!ATTLIST style:properties style:horizontal-rel (page|page-content|
- frame|frame-content|
- paragraph|paragraph-content|
- char) #IMPLIED>
-<!ATTLIST style:properties svg:width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties svg:height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:min-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:min-width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:max-height %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:max-width %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties text:anchor-type %anchorType; #IMPLIED>
-<!ATTLIST style:properties text:anchor-page-number %positiveInteger; #IMPLIED>
-<!ATTLIST style:properties svg:x %coordinate; #IMPLIED>
-<!ATTLIST style:properties svg:y %coordinate; #IMPLIED>
-<!ATTLIST style:properties style:print-content %boolean; #IMPLIED>
-<!ATTLIST style:properties style:protect %boolean; #IMPLIED>
-<!ATTLIST style:properties style:wrap (none|left|right|parallel|dynamic|run-through) #IMPLIED>
-<!ENTITY % noLimitOrPositiveInteger "CDATA">
-<!ATTLIST style:properties style:number-wrapped-paragraphs %noLimitOrPositiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:wrap-contour %boolean; #IMPLIED>
-<!ATTLIST style:properties style:wrap-contour-mode (full|outside) #IMPLIED>
-<!ATTLIST style:properties style:run-through (foreground|background) #IMPLIED>
-<!ATTLIST style:properties style:editable %boolean; #IMPLIED>
-<!ATTLIST style:properties style:mirror CDATA #IMPLIED>
-<!ATTLIST style:properties fo:clip CDATA #IMPLIED>
-<!ATTLIST style:properties text:animation (none|scroll|alternate|slide) #IMPLIED>
-<!ATTLIST style:properties text:animation-direction (left|right|up|down) #IMPLIED>
-<!ATTLIST style:properties text:animation-start-inside %boolean; #IMPLIED>
-<!ATTLIST style:properties text:animation-stop-inside %boolean; #IMPLIED>
-<!ATTLIST style:properties text:animation-repeat %integer; #IMPLIED>
-<!ATTLIST style:properties text:animation-delay %timeDuration; #IMPLIED>
-<!ATTLIST style:properties text:animation-steps %length; #IMPLIED>
-
-<!-- text properties -->
-<!ATTLIST style:properties fo:font-variant (normal|small-caps) #IMPLIED>
-<!ATTLIST style:properties fo:text-transform (none|lowercase|
- uppercase|capitalize) #IMPLIED>
-<!ATTLIST style:properties fo:color %color; #IMPLIED>
-<!ATTLIST style:properties style:use-window-font-color %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-outline %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-crossing-out
- (none|single-line|double-line|thick-line|slash|X)
- #IMPLIED>
-<!ATTLIST style:properties style:text-position CDATA #IMPLIED>
-<!ATTLIST style:properties style:text-align (left|right|start|center|end|justify|justified) #IMPLIED>
-
-<!ATTLIST style:properties style:font-name %string; #IMPLIED>
-<!ATTLIST style:properties fo:font-family %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-generic %fontFamilyGeneric;
- #IMPLIED>
-<!ATTLIST style:properties style:font-style-name %string; #IMPLIED>
-<!ATTLIST style:properties style:font-pitch %fontPitch; #IMPLIED>
-<!ATTLIST style:properties style:font-charset %textEncoding; #IMPLIED>
-<!ATTLIST style:properties style:font-name-asian %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-asian %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-generic-asian %fontFamilyGeneric;
- #IMPLIED>
-<!ATTLIST style:properties style:font-style-name-asian %string; #IMPLIED>
-<!ATTLIST style:properties style:font-pitch-asian %fontPitch; #IMPLIED>
-<!ATTLIST style:properties style:font-charset-asian %textEncoding; #IMPLIED>
-<!ATTLIST style:properties style:font-name-complex %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-complex %string; #IMPLIED>
-<!ATTLIST style:properties style:font-family-generic-complex %fontFamilyGeneric;
- #IMPLIED>
-<!ATTLIST style:properties style:font-style-name-complex %string; #IMPLIED>
-<!ATTLIST style:properties style:font-pitch-complex %fontPitch; #IMPLIED>
-<!ATTLIST style:properties style:font-charset-complex %textEncoding; #IMPLIED>
-
-<!ATTLIST style:properties fo:font-size %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:font-size-rel %length; #IMPLIED>
-<!ATTLIST style:properties style:font-size-asian %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:font-size-rel-asian %length; #IMPLIED>
-<!ATTLIST style:properties style:font-size-complex %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:font-size-rel-complex %length; #IMPLIED>
-<!ENTITY % normalOrLength "CDATA">
-<!ATTLIST style:properties fo:letter-spacing %normalOrLength; #IMPLIED>
-<!ATTLIST style:properties fo:language %languageOnly; #IMPLIED>
-<!ATTLIST style:properties style:language-asian %languageOnly; #IMPLIED>
-<!ATTLIST style:properties style:language-complex %languageOnly; #IMPLIED>
-<!ATTLIST style:properties fo:country %country; #IMPLIED>
-<!ATTLIST style:properties style:country-asian %country; #IMPLIED>
-<!ATTLIST style:properties style:country-complex %country; #IMPLIED>
-<!ENTITY % fontStyle "(normal|italic|oblique)">
-<!ATTLIST style:properties fo:font-style %fontStyle; #IMPLIED>
-<!ATTLIST style:properties style:font-style-asian %fontStyle; #IMPLIED>
-<!ATTLIST style:properties style:font-style-complex %fontStyle; #IMPLIED>
-<!ENTITY % fontRelief "(none|embossed|engraved)">
-<!ATTLIST style:properties style:font-relief %fontRelief; #IMPLIED>
-<!ATTLIST style:properties fo:text-shadow CDATA #IMPLIED>
-<!ATTLIST style:properties style:text-underline
- (none|single|double|dotted|dash|long-dash|dot-dash|
- dot-dot-dash|wave|bold|bold-dotted|bold-dash|
- bold-long-dash|bold-dot-dash|bold-dot-dot-dash|
- bold-wave|double-wave|small-wave) #IMPLIED>
-<!ATTLIST style:properties style:text-autospace (none | ideograph-alpha) #IMPLIED>
-<!ATTLIST style:properties style:punctuation-wrap (simple | hanging) #IMPLIED>
-<!ATTLIST style:properties style:line-break (normal | strict) #IMPLIED>
-<!ENTITY % fontColorOrColor "CDATA">
-<!ATTLIST style:properties style:text-underline-color %fontColorOrColor;
- #IMPLIED>
-<!ATTLIST style:properties fo:font-weight CDATA #IMPLIED>
-<!ATTLIST style:properties style:font-weight-asian CDATA #IMPLIED>
-<!ATTLIST style:properties style:font-weight-complex CDATA #IMPLIED>
-<!ATTLIST style:properties fo:score-spaces %boolean; #IMPLIED>
-<!ATTLIST style:properties style:letter-kerning %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-blinking %boolean; #IMPLIED>
-<!ATTLIST style:properties style:text-background-color %transparentOrColor;
- #IMPLIED>
-
-<!ATTLIST style:properties style:text-combine (none|letters|lines) #IMPLIED>
-<!ATTLIST style:properties style:text-combine-start-char %character; #IMPLIED>
-<!ATTLIST style:properties style:text-combine-end-char %character; #IMPLIED>
-<!ATTLIST style:properties style:text-emphasize CDATA #IMPLIED>
-<!ATTLIST style:properties style:text-scale %percentage; #IMPLIED>
-<!ATTLIST style:properties style:text-rotation-angle %integer; #IMPLIED>
-<!ATTLIST style:properties style:text-rotation-scale (fixed|line-height) #IMPLIED>
-
-<!-- paragraph properties -->
-<!ENTITY % nonNegativeLengthOrPercentageOrNormal "CDATA">
-<!ATTLIST style:properties fo:line-height
- %nonNegativeLengthOrPercentageOrNormal; #IMPLIED>
-<!ATTLIST style:properties style:line-height-at-least %nonNegativeLength;
- #IMPLIED>
-<!ATTLIST style:properties style:line-spacing %length; #IMPLIED>
-<!ATTLIST style:properties fo:text-align (start|end|center|justify) #IMPLIED>
-<!ATTLIST style:properties fo:text-align-last (start|center|justify) #IMPLIED>
-<!ATTLIST style:properties style:text-align-source (fix|value-type) #IMPLIED>
-<!ATTLIST style:properties style:justify-single-word %boolean; #IMPLIED>
-<!ATTLIST style:properties style:break-inside (auto|avoid) #IMPLIED>
-<!ATTLIST style:properties fo:widows %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties fo:orphans %nonNegativeInteger; #IMPLIED>
-
-<!ATTLIST style:properties fo:hyphenate %boolean; #IMPLIED>
-<!ATTLIST style:properties fo:hyphenate-keep (none|page) #IMPLIED>
-<!ATTLIST style:properties fo:hyphenation-remain-char-count %positiveInteger;
- #IMPLIED>
-<!ATTLIST style:properties fo:hyphenation-push-char-count %positiveInteger;
- #IMPLIED>
-<!ATTLIST style:properties fo:hyphenation-ladder-count
- %noLimitOrPositiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:page-number %positiveInteger; #IMPLIED>
-
-<!ELEMENT style:tab-stops (style:tab-stop)*>
-<!ELEMENT style:tab-stop EMPTY>
-<!ATTLIST style:tab-stop style:position %nonNegativeLength; #REQUIRED>
-<!ATTLIST style:tab-stop style:type (left|center|right|char|default) "left">
-<!ATTLIST style:tab-stop style:char %character; #IMPLIED>
-<!ATTLIST style:tab-stop style:leader-char %character; " ">
-
-<!ELEMENT style:drop-cap EMPTY>
-<!ENTITY % wordOrPositiveInteger "CDATA">
-<!ATTLIST style:drop-cap style:length %wordOrPositiveInteger; "1">
-<!ATTLIST style:drop-cap style:lines %positiveInteger; "1">
-<!ATTLIST style:drop-cap style:distance %length; "0cm">
-<!ATTLIST style:drop-cap style:style-name %styleName; #IMPLIED>
-
-<!ATTLIST style:properties style:register-true %boolean; #IMPLIED>
-<!ATTLIST style:properties style:register-truth-ref-style-name %styleName; #IMPLIED>
-<!ATTLIST style:properties fo:margin-left %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:margin-right %positiveLengthOrPercentage;
- #IMPLIED>
-<!ATTLIST style:properties fo:text-indent %lengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties style:auto-text-indent %boolean; #IMPLIED>
-<!ATTLIST style:properties fo:margin-top %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:margin-bottom %positiveLengthOrPercentage; #IMPLIED>
-<!ATTLIST style:properties fo:break-before (auto|column|page) #IMPLIED>
-<!ATTLIST style:properties fo:break-after (auto|column|page) #IMPLIED>
-<!ATTLIST style:properties fo:background-color %transparentOrColor; #IMPLIED>
-
-<!ELEMENT style:background-image (office:binary-data?)>
-<!ATTLIST style:background-image xlink:type (simple) #IMPLIED>
-<!ATTLIST style:background-image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST style:background-image xlink:show (embed) #IMPLIED>
-<!ATTLIST style:background-image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST style:background-image style:repeat (no-repeat|repeat|stretch)
- "repeat">
-<!ATTLIST style:background-image style:position CDATA "center">
-<!ATTLIST style:background-image style:filter-name %string; #IMPLIED>
-
-<!ELEMENT style:symbol-image (office:binary-data?)>
-<!ATTLIST style:symbol-image xlink:type (simple) #IMPLIED>
-<!ATTLIST style:symbol-image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST style:symbol-image xlink:show (embed) #IMPLIED>
-<!ATTLIST style:symbol-image xlink:actuate (onLoad) #IMPLIED>
-
-<!ATTLIST style:properties fo:border CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-top CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-bottom CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-left CDATA #IMPLIED>
-<!ATTLIST style:properties fo:border-right CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-top CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-bottom CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-left CDATA #IMPLIED>
-<!ATTLIST style:properties style:border-line-width-right CDATA #IMPLIED>
-<!ATTLIST style:properties fo:padding %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-top %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-bottom %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-left %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties fo:padding-right %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties style:shadow CDATA #IMPLIED>
-<!ATTLIST style:properties fo:keep-with-next %boolean; #IMPLIED>
-
-<!ATTLIST style:properties text:number-lines %boolean; "false">
-<!ATTLIST style:properties text:line-number %nonNegativeInteger; #IMPLIED>
-
-<!ATTLIST style:properties style:decimal-places %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:properties style:tab-stop-distance %nonNegativeLength; #IMPLIED>
-
-<!-- table properties -->
-<!ATTLIST style:properties style:width %positiveLength; #IMPLIED>
-<!ATTLIST style:properties style:rel-width %percentage; #IMPLIED>
-<!ATTLIST style:properties style:may-break-between-rows %boolean; #IMPLIED>
-<!ATTLIST style:properties table:page-style-name %styleName; #IMPLIED>
-<!ATTLIST style:properties table:display %boolean; #IMPLIED>
-
-<!-- table column properties -->
-<!ATTLIST style:properties style:column-width %positiveLength; #IMPLIED>
-<!ENTITY % relWidth "CDATA">
-<!ATTLIST style:properties style:rel-column-width %relWidth; #IMPLIED>
-<!ATTLIST style:properties style:use-optimal-column-width %boolean; #IMPLIED>
-
-<!-- table row properties -->
-<!ATTLIST style:properties style:row-height %positiveLength; #IMPLIED>
-<!ATTLIST style:properties style:min-row-height %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties style:use-optimal-row-height %boolean; #IMPLIED>
-
-<!-- table cell properties -->
-<!ATTLIST style:properties
- table:align (left | center | right | margins) #IMPLIED
- table:border-model (collapsing | separating) #IMPLIED
- fo:vertical-align (top | middle | bottom | automatic) #IMPLIED
- fo:direction (ltr | ttb) #IMPLIED
- style:rotation-angle %nonNegativeInteger; #IMPLIED
- style:rotation-align (none | bottom | top | center) #IMPLIED
- style:cell-protect CDATA #IMPLIED
- fo:wrap-option (no-wrap | wrap) #IMPLIED
->
-<!ELEMENT style:columns (style:column-sep?,style:column*)>
-<!ATTLIST style:columns fo:column-count %nonNegativeInteger; #IMPLIED>
-<!ATTLIST style:columns fo:column-gap %positiveLength; #IMPLIED>
-
-<!ELEMENT style:column EMPTY>
-<!ATTLIST style:column style:rel-width CDATA #IMPLIED>
-<!ATTLIST style:column fo:margin-left %positiveLength; #IMPLIED>
-<!ATTLIST style:column fo:margin-right %positiveLength; #IMPLIED>
-
-<!ELEMENT style:column-sep EMPTY>
-<!ATTLIST style:column-sep style:style (none|solid|dotted|dashed|dot-dashed)
- "solid">
-<!ATTLIST style:column-sep style:width %length; #REQUIRED>
-<!ATTLIST style:column-sep style:height %percentage; "100%">
-<!ATTLIST style:column-sep style:vertical-align (top|middle|bottom) "top">
-<!ATTLIST style:column-sep style:color %color; "#000000">
-
-<!-- page master properties -->
-<!ELEMENT style:page-master (style:properties?, style:header-style?, style:footer-style?)>
-<!ATTLIST style:page-master style:name %styleName; #REQUIRED>
-<!ATTLIST style:page-master style:page-usage (all|left|right|mirrored) "all">
-
-<!ELEMENT style:header-style (style:properties?)>
-<!ELEMENT style:footer-style (style:properties?)>
-
-<!ATTLIST style:properties fo:page-width %length; #IMPLIED>
-<!ATTLIST style:properties fo:page-height %length; #IMPLIED>
-<!ATTLIST style:properties style:paper-tray-number %positiveNumberOrDefault; #IMPLIED>
-<!ATTLIST style:properties style:print-orientation (portrait|landscape) #IMPLIED>
-<!ATTLIST style:properties style:print CDATA #IMPLIED>
-<!ATTLIST style:properties style:print-page-order (ttb|ltr) #IMPLIED>
-<!ATTLIST style:properties style:first-page-number %positiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:scale-to %percentage; #IMPLIED>
-<!ATTLIST style:properties style:scale-to-pages %positiveInteger; #IMPLIED>
-<!ATTLIST style:properties style:table-centering (horizontal | vertical | both | none) #IMPLIED>
-
-<!ATTLIST style:properties style:footnote-max-height %lengthOrNoLimit; #IMPLIED>
-<!ATTLIST style:properties style:vertical-align (top|bottom|middle|basline|auto) #IMPLIED>
-
-<!ELEMENT style:footnote-sep EMPTY>
-<!ATTLIST style:footnote-sep style:width %length; #IMPLIED>
-<!ATTLIST style:footnote-sep style:rel-width %percentage; #IMPLIED>
-<!ATTLIST style:footnote-sep style:color %color; #IMPLIED>
-<!ATTLIST style:footnote-sep style:adjustment (left|center|right) "left">
-<!ATTLIST style:footnote-sep style:distance-before-sep %length; #IMPLIED>
-<!ATTLIST style:footnote-sep style:distance-after-sep %length; #IMPLIED>
-
-<!-- master page -->
-<!ELEMENT style:master-page ( (style:header, style:header-left?)?, (style:footer, style:footer-left?)?,
- office:forms?,style:style*, (%shapes;)*, presentation:notes? )>
-<!ATTLIST style:master-page style:name %styleName; #REQUIRED>
-<!ATTLIST style:master-page style:page-master-name %styleName; #REQUIRED>
-<!ATTLIST style:master-page style:next-style-name %styleName; #IMPLIED>
-<!ATTLIST style:master-page draw:style-name %styleName; #IMPLIED>
-
-<!-- handout master -->
-<!ELEMENT style:handout-master (%shapes;)*>
-<!ATTLIST style:handout-master presentation:presentation-page-layout-name %styleName; #IMPLIED>
-
-<!ENTITY % hd-ft-content "( text:p | (style:region-left?, style:region-center?, style:region-right?) )">
-<!ELEMENT style:header %hd-ft-content;>
-<!ELEMENT style:footer %hd-ft-content;>
-<!ELEMENT style:header-left %hd-ft-content;>
-<!ATTLIST style:header-left style:display %boolean; "true">
-<!ELEMENT style:footer-left %hd-ft-content;>
-<!ATTLIST style:footer-left style:display %boolean; "true">
-
-<!ENTITY % region-content "(text:p*)">
-<!ELEMENT style:region-left %region-content;>
-<!ELEMENT style:region-center %region-content;>
-<!ELEMENT style:region-right %region-content;>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/table.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/table.mod
deleted file mode 100644
index 6d9f3cdb2a8f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/table.mod
+++ /dev/null
@@ -1,493 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ELEMENT table:calculation-settings (table:null-date?, table:iteration?)>
-<!ATTLIST table:calculation-settings
- table:case-sensitive %boolean; "true"
- table:precision-as-shown %boolean; "false"
- table:search-criteria-must-apply-to-whole-cell %boolean; "true"
- table:automatic-find-labels %boolean; "true"
- table:use-regular-expressions %boolean; "true"
- table:null-year %positiveInteger; "1930"
->
-<!ELEMENT table:null-date EMPTY>
-<!ATTLIST table:null-date
- table:value-type %valueType; #FIXED "date"
- table:date-value %date; "1899-12-30"
->
-<!ELEMENT table:iteration EMPTY>
-<!ATTLIST table:iteration
- table:status (enable | disable) "disable"
- table:steps %positiveInteger; "100"
- table:maximum-difference %float; "0.001"
->
-
-<!ELEMENT table:tracked-changes (table:cell-content-change | table:insertion | table:deletion | table:movement | table:rejection)*>
-<!ATTLIST table:tracked-changes table:track-changes %boolean; "true"
- table:protected %boolean; "false"
- table:protection-key CDATA #IMPLIED
->
-
-<!ELEMENT table:dependences (table:dependence)+>
-<!ELEMENT table:dependence EMPTY>
-<!ATTLIST table:dependence
- table:id CDATA #REQUIRED
->
-<!ELEMENT table:deletions (table:cell-content-deletion | table:change-deletion)+>
-<!ELEMENT table:cell-content-deletion (table:cell-address?, table:change-track-table-cell?)>
-<!ATTLIST table:cell-content-deletion
- table:id CDATA #IMPLIED
->
-<!ELEMENT table:change-deletion EMPTY>
-<!ATTLIST table:change-deletion
- table:id CDATA #IMPLIED
->
-<!ELEMENT table:insertion (office:change-info, table:dependences?, table:deletions?)>
-<!ATTLIST table:insertion
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
- table:type (row | column | table) #REQUIRED
- table:position %integer; #REQUIRED
- table:count %positiveInteger; "1"
- table:table %integer; #IMPLIED
->
-<!ELEMENT table:deletion (office:change-info, table:dependences?, table:deletions?, table:cut-offs?)>
-<!ATTLIST table:deletion
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
- table:type (row | column | table) #REQUIRED
- table:position %integer; #REQUIRED
- table:count %positiveInteger; "1"
- table:table %integer; #IMPLIED
- table:multi-deletion-spanned %integer; #IMPLIED
->
-<!ELEMENT table:cut-offs (table:movement-cut-off+ | (table:insertion-cut-off, table:movement-cut-off*))>
-<!ELEMENT table:insertion-cut-off EMPTY>
-<!ATTLIST table:insertion-cut-off
- table:id CDATA #REQUIRED
- table:position %integer; #REQUIRED
->
-<!ELEMENT table:movement-cut-off EMPTY>
-<!ATTLIST table:movement-cut-off
- table:id CDATA #REQUIRED
- table:start-position %integer; #IMPLIED
- table:end-position %integer; #IMPLIED
- table:position %integer; #IMPLIED
->
-<!ELEMENT table:movement (table:source-range-address, table:target-range-address, office:change-info, table:dependences?, table:deletions?)>
-<!ATTLIST table:movement
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
->
-<!ELEMENT table:target-range-address EMPTY>
-<!ATTLIST table:target-range-address
- table:column %integer; #IMPLIED
- table:row %integer; #IMPLIED
- table:table %integer; #IMPLIED
- table:start-column %integer; #IMPLIED
- table:start-row %integer; #IMPLIED
- table:start-table %integer; #IMPLIED
- table:end-column %integer; #IMPLIED
- table:end-row %integer; #IMPLIED
- table:end-table %integer; #IMPLIED
->
-<!ELEMENT table:source-range-address EMPTY>
-<!ATTLIST table:source-range-address
- table:column %integer; #IMPLIED
- table:row %integer; #IMPLIED
- table:table %integer; #IMPLIED
- table:start-column %integer; #IMPLIED
- table:start-row %integer; #IMPLIED
- table:start-table %integer; #IMPLIED
- table:end-column %integer; #IMPLIED
- table:end-row %integer; #IMPLIED
- table:end-table %integer; #IMPLIED
->
-<!ELEMENT table:change-track-table-cell (text:p*)>
-<!ATTLIST table:change-track-table-cell
- table:cell-address %cell-address; #IMPLIED
- table:matrix-covered (true | false) "false"
- table:formula %string; #IMPLIED
- table:number-matrix-rows-spanned %positiveInteger; #IMPLIED
- table:number-matrix-columns-spanned %positiveInteger; #IMPLIED
- table:value-type %valueType; "string"
- table:value %float; #IMPLIED
- table:date-value %date; #IMPLIED
- table:time-value %timeInstance; #IMPLIED
- table:string-value %string; #IMPLIED
->
-<!ELEMENT table:cell-content-change (table:cell-address, office:change-info, table:dependences?, table:deletions?, table:previous)>
-<!ATTLIST table:cell-content-change
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
->
-<!ELEMENT table:cell-address EMPTY>
-<!ATTLIST table:cell-address
- table:column %integer; #IMPLIED
- table:row %integer; #IMPLIED
- table:table %integer; #IMPLIED
->
-<!ELEMENT table:previous (table:change-track-table-cell)>
-<!ATTLIST table:previous
- table:id CDATA #IMPLIED
->
-<!ELEMENT table:rejection (office:change-info, table:dependences?, table:deletions?)>
-<!ATTLIST table:rejection
- table:id CDATA #REQUIRED
- table:acceptance-state (accepted | rejected | pending) "pending"
- table:rejecting-change-id %positiveInteger; #IMPLIED
->
-
-<!ENTITY % table-columns "table:table-columns | ( table:table-column | table:table-column-group )+">
-<!ENTITY % table-header-columns "table:table-header-columns">
-<!ENTITY % table-rows "table:table-rows | ( table:table-row | table:table-row-group )+">
-<!ENTITY % table-header-rows "table:table-header-rows">
-<!ENTITY % table-column-groups "((%table-columns;),(%table-header-columns;,(%table-columns;)?)?) | (%table-header-columns;,(%table-columns;)?)">
-<!ENTITY % table-row-groups "((%table-rows;),(%table-header-rows;,(%table-rows;)?)?) | (%table-header-rows;,(%table-rows;)?)">
-<!ELEMENT table:table (table:table-source?, table:scenario?, office:forms?, table:shapes?, (%table-column-groups;), (%table-row-groups;))>
-<!ATTLIST table:table
- table:name %string; #IMPLIED
- table:style-name %styleName; #IMPLIED
- table:protected %boolean; "false"
- table:protection-key CDATA #IMPLIED
- table:print-ranges %cell-range-address-list; #IMPLIED
->
-<!ELEMENT table:table-source EMPTY>
-<!ATTLIST table:table-source
- table:mode (copy-all | copy-results-only) "copy-all"
- xlink:type (simple) #FIXED "simple"
- xlink:actuate (onRequest) "onRequest"
- xlink:href %uriReference; #REQUIRED
- table:filter-name CDATA #IMPLIED
- table:table-name CDATA #IMPLIED
- table:filter-options CDATA #IMPLIED
- table:refresh-delay %timeDuration; #IMPLIED
->
-<!ELEMENT table:scenario EMPTY>
-<!ATTLIST table:scenario
- table:display-border %boolean; "true"
- table:border-color %color; #IMPLIED
- table:copy-back %boolean; "true"
- table:copy-styles %boolean; "true"
- table:copy-formulas %boolean; "true"
- table:is-active %boolean; #REQUIRED
- table:scenario-ranges %cell-range-address-list; #REQUIRED
- table:comment CDATA #IMPLIED
->
-<!ELEMENT table:shapes %shapes;>
-<!ELEMENT table:table-column-group (table:table-header-columns | table:table-column | table:table-column-group)+>
-<!ATTLIST table:table-column-group
- table:display %boolean; "true"
->
-<!ELEMENT table:table-header-columns (table:table-column | table:table-column-group)+>
-<!ELEMENT table:table-columns (table:table-column | table:table-column-group)+>
-<!ELEMENT table:table-column EMPTY>
-<!ATTLIST table:table-column
- table:number-columns-repeated %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:visibility (visible | collapse | filter) "visible"
- table:default-cell-style-name %styleName; #IMPLIED
->
-<!ELEMENT table:table-row-group (table:table-header-rows | table:table-row | table:table-row-group)+>
-<!ATTLIST table:table-row-group
- table:display %boolean; "true"
->
-<!ELEMENT table:table-header-rows (table:table-row | table:table-row-group)+>
-<!ELEMENT table:table-rows (table:table-row | table:table-row-group)+>
-<!ENTITY % table-cells "(table:table-cell|table:covered-table-cell)+">
-<!ELEMENT table:table-row %table-cells;>
-<!ATTLIST table:table-row
- table:number-rows-repeated %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:visibility (visible | collapse | filter) "visible"
- table:default-cell-style-name %styleName; #IMPLIED
->
-
-<!ENTITY % text-wo-table "(text:h|text:p|text:ordered-list|text:unordered-list|%shapes;)*">
-<!ENTITY % cell-content "(table:cell-range-source?,office:annotation?,table:detective?,(table:sub-table|%text-wo-table;))">
-<!ELEMENT table:table-cell %cell-content;>
-<!ELEMENT table:covered-table-cell %cell-content;>
-<!ATTLIST table:table-cell
- table:number-columns-repeated %positiveInteger; "1"
- table:number-rows-spanned %positiveInteger; "1"
- table:number-columns-spanned %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:validation-name CDATA #IMPLIED
- table:formula %string; #IMPLIED
- table:number-matrix-rows-spanned %positiveInteger; #IMPLIED
- table:number-matrix-columns-spanned %positiveInteger; #IMPLIED
- table:value-type %valueType; "string"
- table:value %float; #IMPLIED
- table:date-value %date; #IMPLIED
- table:time-value %timeInstance; #IMPLIED
- table:boolean-value %boolean; #IMPLIED
- table:string-value %string; #IMPLIED
- table:currency %string; #IMPLIED
->
-<!ATTLIST table:covered-table-cell
- table:number-columns-repeated %positiveInteger; "1"
- table:style-name %styleName; #IMPLIED
- table:validation-name CDATA #IMPLIED
- table:formula %string; #IMPLIED
- table:number-matrix-rows-spanned %positiveInteger; #IMPLIED
- table:number-matrix-columns-spanned %positiveInteger; #IMPLIED
- table:value-type %valueType; "string"
- table:value %float; #IMPLIED
- table:date-value %date; #IMPLIED
- table:time-value %timeInstance; #IMPLIED
- table:boolean-value %boolean; #IMPLIED
- table:string-value %string; #IMPLIED
- table:currency %string; #IMPLIED
->
-<!-- cell protection in writer: cell attribute; calc uses format -->
-<!ATTLIST table:table-cell table:protected %boolean; "false">
-
-<!ELEMENT table:cell-range-source EMPTY>
-<!ATTLIST table:cell-range-source
- table:name %string; #REQUIRED
- xlink:type (simple) #FIXED "simple"
- xlink:actuate (onRequest) #FIXED "onRequest"
- xlink:href %uriReference; #REQUIRED
- table:filter-name %string; #REQUIRED
- table:filter-options %string; #IMPLIED
- table:last-column-spanned %positiveInteger; #REQUIRED
- table:last-row-spanned %positiveInteger; #REQUIRED
- table:refresh-delay %timeDuration; #IMPLIED
->
-
-<!ELEMENT table:detective (table:highlighted-range*, table:operation*)>
-<!ELEMENT table:highlighted-range EMPTY>
-<!ATTLIST table:highlighted-range
- table:cell-range-address %cell-range-address; #IMPLIED
- table:direction (from-another-table | to-another-table | from-same-table | to-same-table) #REQUIRED
- table:contains-error %boolean; "false"
->
-<!ELEMENT table:operation EMPTY>
-<!ATTLIST table:operation
- table:name (trace-dependents | remove-dependents | trace-precedents | remove-precedents | trace-errors) #REQUIRED
- table:index %nonNegativeInteger; #REQUIRED
->
-
-<!ELEMENT table:content-validations (table:content-validation)+>
-<!ELEMENT table:content-validation (table:help-message?, (table:error-message | (table:error-macro, office:events?))?)>
-<!ATTLIST table:content-validation
- table:name CDATA #REQUIRED
- table:condition CDATA #IMPLIED
- table:base-cell-address %cell-address; #IMPLIED
- table:allow-empty-cell %boolean; #IMPLIED
->
-<!ELEMENT table:help-message (text:p*)>
-<!ATTLIST table:help-message
- table:title CDATA #IMPLIED
- table:display %boolean; #IMPLIED
->
-<!ELEMENT table:error-message (text:p*)>
-<!ATTLIST table:error-message
- table:title CDATA #IMPLIED
- table:message-type (stop | warning | information) #IMPLIED
- table:display %boolean; #IMPLIED
->
-<!ELEMENT table:error-macro EMPTY>
-<!ATTLIST table:error-macro
- table:name CDATA #IMPLIED
- table:execute %boolean; #IMPLIED
->
-
-<!ELEMENT table:sub-table ((%table-column-groups;) , (%table-row-groups;))>
-
-<!ELEMENT table:label-ranges (table:label-range)*>
-<!ELEMENT table:label-range EMPTY>
-<!ATTLIST table:label-range
- table:label-cell-range-address %cell-range-address; #REQUIRED
- table:data-cell-range-address %cell-range-address; #REQUIRED
- table:orientation (column | row) #REQUIRED
->
-
-<!ELEMENT table:named-expressions (table:named-range | table:named-expression)*>
-<!ELEMENT table:named-range EMPTY>
-<!ATTLIST table:named-range
- table:name CDATA #REQUIRED
- table:cell-range-address %cell-range-address; #REQUIRED
- table:base-cell-address %cell-address; #IMPLIED
- table:range-usable-as CDATA "none"
->
-<!ELEMENT table:named-expression EMPTY>
-<!ATTLIST table:named-expression
- table:name CDATA #REQUIRED
- table:expression CDATA #REQUIRED
- table:base-cell-address %cell-address; #IMPLIED
->
-
-<!ELEMENT table:filter (table:filter-condition | table:filter-and | table:filter-or)>
-<!ATTLIST table:filter
- table:target-range-address %cell-range-address; #IMPLIED
- table:condition-source-range-address %cell-range-address; #IMPLIED
- table:condition-source (self | cell-range) "self"
- table:display-duplicates %boolean; "true"
->
-<!ELEMENT table:filter-and (table:filter-or | table:filter-condition)+>
-<!ELEMENT table:filter-or (table:filter-and | table:filter-condition)+>
-<!ELEMENT table:filter-condition EMPTY>
-<!ATTLIST table:filter-condition
- table:field-number %nonNegativeInteger; #REQUIRED
- table:case-sensitive %boolean; "false"
- table:data-type (text | number) "text"
- table:value CDATA #REQUIRED
- table:operator CDATA #REQUIRED
->
-
-<!ELEMENT table:database-ranges (table:database-range)*>
-<!ELEMENT table:database-range ((table:database-source-sql | table:database-source-table | table:database-source-query)?, table:filter?, table:sort?, table:subtotal-rules?)>
-<!ATTLIST table:database-range
- table:name CDATA #IMPLIED
- table:is-selection %boolean; "false"
- table:on-update-keep-styles %boolean; "false"
- table:on-update-keep-size %boolean; "true"
- table:has-persistant-data %boolean; "true"
- table:orientation (row | column) "row"
- table:contains-header %boolean; "true"
- table:display-filter-buttons %boolean; "false"
- table:target-range-address %cell-range-address; #REQUIRED
- table:refresh-delay %timeDuration; #IMPLIED
->
-<!ELEMENT table:database-source-sql EMPTY>
-<!ATTLIST table:database-source-sql
- table:database-name CDATA #REQUIRED
- table:sql-statement CDATA #REQUIRED
- table:parse-sql-statements %boolean; "false"
->
-<!ELEMENT table:database-source-table EMPTY>
-<!ATTLIST table:database-source-table
- table:database-name CDATA #REQUIRED
- table:table-name CDATA #REQUIRED
->
-<!ELEMENT table:database-source-query EMPTY>
-<!ATTLIST table:database-source-query
- table:database-name CDATA #REQUIRED
- table:query-name CDATA #REQUIRED
->
-
-<!ELEMENT table:sort (table:sort-by)+>
-<!ATTLIST table:sort
- table:bind-styles-to-content %boolean; "true"
- table:target-range-address %cell-range-address; #IMPLIED
- table:case-sensitive %boolean; "false"
- table:language CDATA #IMPLIED
- table:country CDATA #IMPLIED
- table:algorithm CDATA #IMPLIED
->
-<!ELEMENT table:sort-by EMPTY>
-<!ATTLIST table:sort-by
- table:field-number %nonNegativeInteger; #REQUIRED
- table:data-type (text | number | automatic | qname-but-not-ncname) "automatic"
- table:order (ascending | descending) "ascending"
->
-
-<!ELEMENT table:subtotal-rules (table:sort-groups? | table:subtotal-rule*)?>
-<!ATTLIST table:subtotal-rules
- table:bind-styles-to-content %boolean; "true"
- table:case-sensitive %boolean; "false"
- table:page-breaks-on-group-change %boolean; "false"
->
-<!ELEMENT table:sort-groups EMPTY>
-<!ATTLIST table:sort-groups
- table:data-type (text | number | automatic | qname-but-not-ncname) "automatic"
- table:order (ascending | descending) "ascending"
->
-<!ELEMENT table:subtotal-rule (table:subtotal-field)*>
-<!ATTLIST table:subtotal-rule
- table:group-by-field-number %nonNegativeInteger; #REQUIRED
->
-<!ELEMENT table:subtotal-field EMPTY>
-<!ATTLIST table:subtotal-field
- table:field-number %nonNegativeInteger; #REQUIRED
- table:function CDATA #REQUIRED
->
-
-<!ELEMENT table:data-pilot-tables (table:data-pilot-table)*>
-<!ELEMENT table:data-pilot-table ((table:database-source-sql | table:database-source-table | table:database-source-query | table:source-service | table:source-cell-range)?, table:data-pilot-field+)>
-<!ATTLIST table:data-pilot-table
- table:name CDATA #REQUIRED
- table:application-data CDATA #IMPLIED
- table:grand-total (none | row | column | both) "both"
- table:ignore-empty-rows %boolean; "false"
- table:identify-categories %boolean; "false"
- table:target-range-address %cell-range-address; #REQUIRED
- table:buttons %cell-range-address-list; #REQUIRED
->
-<!ELEMENT table:source-service EMPTY>
-<!ATTLIST table:source-service
- table:name CDATA #REQUIRED
- table:source-name CDATA #REQUIRED
- table:object-name CDATA #REQUIRED
- table:username CDATA #IMPLIED
- table:password CDATA #IMPLIED
->
-<!ELEMENT table:source-cell-range (table:filter)?>
-<!ATTLIST table:source-cell-range
- table:cell-range-address %cell-range-address; #REQUIRED
->
-<!ELEMENT table:data-pilot-field (table:data-pilot-level)?>
-<!ATTLIST table:data-pilot-field
- table:source-field-name CDATA #REQUIRED
- table:is-data-layout-field %boolean; "false"
- table:function CDATA #REQUIRED
- table:orientation (row | column | data | page | hidden) #REQUIRED
- table:used-hierarchy %positiveInteger; "1"
->
-<!ELEMENT table:data-pilot-level (table:data-pilot-subtotals?, table:data-pilot-members?)>
-<!ATTLIST table:data-pilot-level
- table:display-empty %boolean; #IMPLIED
->
-<!ELEMENT table:data-pilot-subtotals (table:data-pilot-subtotal)*>
-<!ELEMENT table:data-pilot-subtotal EMPTY>
-<!ATTLIST table:data-pilot-subtotal
- table:function CDATA #REQUIRED
->
-<!ELEMENT table:data-pilot-members (table:data-pilot-member)*>
-<!ELEMENT table:data-pilot-member EMPTY>
-<!ATTLIST table:data-pilot-member
- table:name CDATA #REQUIRED
- table:display %boolean; #IMPLIED
- table:display-details %boolean; #IMPLIED
->
-
-<!ELEMENT table:consolidation EMPTY>
-<!ATTLIST table:consolidation
- table:function CDATA #REQUIRED
- table:source-cell-range-addresses %cell-range-address-list; #REQUIRED
- table:target-cell-address %cell-address; #REQUIRED
- table:use-label (none | column | row | both) "none"
- table:link-to-source-data %boolean; "false"
->
-
-<!ELEMENT table:dde-links (table:dde-link)+>
-<!ELEMENT table:dde-link (office:dde-source, table:table)>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/text.mod b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/text.mod
deleted file mode 100644
index 792b0fdde55e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/dtd/text.mod
+++ /dev/null
@@ -1,1099 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!ENTITY % fields "text:date |
- text:time |
- text:page-number |
- text:page-continuation |
- text:sender-firstname |
- text:sender-lastname |
- text:sender-initials |
- text:sender-title |
- text:sender-position |
- text:sender-email |
- text:sender-phone-private |
- text:sender-fax |
- text:sender-company |
- text:sender-phone-work |
- text:sender-street |
- text:sender-city |
- text:sender-postal-code |
- text:sender-country |
- text:sender-state-or-province |
- text:author-name |
- text:author-initials |
- text:placeholder |
- text:variable-set |
- text:variable-get |
- text:variable-input |
- text:user-field-get |
- text:user-field-input |
- text:sequence |
- text:expression |
- text:text-input |
- text:database-display |
- text:database-next |
- text:database-row-select |
- text:database-row-number |
- text:database-name |
- text:initial-creator |
- text:creation-date |
- text:creation-time |
- text:description |
- text:user-defined |
- text:print-time |
- text:print-date |
- text:printed-by |
- text:title |
- text:subject |
- text:keywords |
- text:editing-cycles |
- text:editing-duration |
- text:modification-time |
- text:modification-date |
- text:creator |
- text:conditional-text |
- text:hidden-text |
- text:hidden-paragraph |
- text:chapter |
- text:file-name |
- text:template-name |
- text:set-page-variable |
- text:get-page-variable |
- text:execute-macro |
- text:dde-connection |
- text:reference-ref |
- text:sequence-ref |
- text:bookmark-ref |
- text:footnote-ref |
- text:endnote-ref |
- text:sheet-name |
- text:bibliography-mark |
- text:page-count |
- text:paragraph-count |
- text:word-count |
- text:character-count |
- text:table-count |
- text:image-count |
- text:object-count |
- office:annotation |
- text:script |
- text:measure" >
-
-<!ENTITY % inline-text "(#PCDATA|
- text:span|text:tab-stop|text:s|text:line-break|
- text:footnote|text:endnote|text:a|
- text:bookmark|text:bookmark-start|text:bookmark-end|
- text:reference-mark|text:reference-mark-start|
- text:reference-mark-end|%fields;|%shape;|
- text:toc-mark-start | text:toc-mark-end |
- text:toc-mark | text:user-index-mark-start |
- text:user-index-mark-end | text:user-index-mark |
- text:alphabetical-index-mark-start |
- text:alphabetical-index-mark-end |
- text:alphabetical-index-mark |
- %change-marks; | draw:a | text:ruby)*">
-
-<!ELEMENT text:p %inline-text;>
-<!ELEMENT text:h %inline-text;>
-
-<!ATTLIST text:p text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:p text:cond-style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:h text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:h text:cond-style-name %styleName; #IMPLIED>
-<!ATTLIST text:h text:level %positiveInteger; "1">
-
-<!ELEMENT text:span %inline-text;>
-<!ATTLIST text:span text:style-name %styleName; #REQUIRED>
-
-<!ELEMENT text:a %inline-text;>
-<!ATTLIST text:a xlink:href %uriReference; #REQUIRED>
-<!ATTLIST text:a xlink:type (simple) #FIXED "simple">
-<!ATTLIST text:a xlink:actuate (onRequest) "onRequest">
-<!ATTLIST text:a xlink:show (new|replace) "replace">
-<!ATTLIST text:a office:name %string; #IMPLIED>
-<!ATTLIST text:a office:target-frame-name %string; #IMPLIED>
-<!ATTLIST text:a text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:a text:visited-style-name %styleName; #IMPLIED>
-
-
-<!ELEMENT text:s EMPTY>
-<!ATTLIST text:s text:c %positiveInteger; "1">
-
-<!ELEMENT text:tab-stop EMPTY>
-
-<!ELEMENT text:line-break EMPTY>
-
-
-<!ENTITY % list-items "((text:list-header,text:list-item*)|text:list-item+)">
-<!ELEMENT text:ordered-list %list-items;>
-<!ELEMENT text:unordered-list %list-items;>
-
-
-<!ATTLIST text:ordered-list text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:unordered-list text:style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:ordered-list text:continue-numbering %boolean; "false">
-
-<!ELEMENT text:list-header (text:p)+>
-<!ELEMENT text:list-item (text:p|text:ordered-list|text:unordered-list)+>
-
-<!ATTLIST text:list-item text:restart-numbering %boolean; "false">
-<!ATTLIST text:list-item text:start-value %positiveInteger; #IMPLIED>
-
-<!ELEMENT text:list-style (text:list-level-style-number|
- text:list-level-style-bullet|
- text:list-level-style-image)+>
-
-<!ATTLIST text:list-style style:name %styleName; #IMPLIED>
-
-<!ATTLIST text:list-style text:consecutive-numbering %boolean; "false">
-
-
-<!ELEMENT text:list-level-style-number (style:properties?)>
-
-<!ATTLIST text:list-level-style-number text:level %positiveInteger;
- #REQUIRED>
-<!ATTLIST text:list-level-style-number text:style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:list-level-style-number style:num-format %string; #REQUIRED>
-<!ATTLIST text:list-level-style-number style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:list-level-style-number style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:list-level-style-number style:num-letter-sync %boolean;
- "false">
-<!ATTLIST text:list-level-style-number text:display-levels %positiveInteger;
- "1">
-<!ATTLIST text:list-level-style-number text:start-value %positiveInteger;
- "1">
-<!ELEMENT text:list-level-style-bullet (style:properties?)>
-
-<!ATTLIST text:list-level-style-bullet text:level %positiveInteger; #REQUIRED>
-<!ATTLIST text:list-level-style-bullet text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:list-level-style-bullet text:bullet-char %character; #REQUIRED>
-<!ATTLIST text:list-level-style-bullet style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:list-level-style-bullet style:num-suffix %string; #IMPLIED>
-
-<!ELEMENT text:list-level-style-image (style:properties?,office:binary-data?)>
-
-<!ATTLIST text:list-level-style-image text:level %positiveInteger; #REQUIRED>
-<!ATTLIST text:list-level-style-image xlink:type (simple) #IMPLIED>
-<!ATTLIST text:list-level-style-image xlink:href %uriReference; #IMPLIED>
-<!ATTLIST text:list-level-style-image xlink:actuate (onLoad) #IMPLIED>
-<!ATTLIST text:list-level-style-image xlink:show (embed) #IMPLIED>
-
-
-<!-- list properties -->
-<!ATTLIST style:properties text:space-before %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties text:min-label-width %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties text:min-label-distance %nonNegativeLength; #IMPLIED>
-<!ATTLIST style:properties text:enable-numbering %boolean; #IMPLIED>
-<!ATTLIST style:properties style:list-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:outline-style (text:outline-level-style)+>
-
-<!ELEMENT text:outline-level-style (style:properties?)>
-
-<!ATTLIST text:outline-level-style text:level %positiveInteger;
- #REQUIRED>
-<!ATTLIST text:outline-level-style text:style-name %styleName; #IMPLIED>
-
-<!ATTLIST text:outline-level-style style:num-format %string; #REQUIRED>
-<!ATTLIST text:outline-level-style style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:outline-level-style style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:outline-level-style style:num-letter-sync %boolean;
- "false">
-<!ATTLIST text:outline-level-style text:display-levels %positiveInteger;
- "1">
-<!ATTLIST text:outline-level-style text:start-value %positiveInteger;
- "1">
-
-<!ENTITY % field-declarations "text:variable-decls?,
- text:user-field-decls?,
- text:sequence-decls?">
-
-<!ENTITY % variableName "CDATA">
-
-<!ENTITY % formula "CDATA">
-
-<!ENTITY % valueAttr "text:value-type %valueType; #REQUIRED">
-
-<!ENTITY % valueAndTypeAttr "%valueAttr;
- text:value %float; #IMPLIED
- text:date-value %date; #IMPLIED
- text:time-value %timeInstance; #IMPLIED
- text:boolean-value %boolean; #IMPLIED
- text:string-value %string; #IMPLIED
- text:currency CDATA #IMPLIED" >
-
-<!ENTITY % numFormat 'style:num-format CDATA #IMPLIED
- style:num-letter-sync %boolean; "false"'>
-
-
-<!ELEMENT text:date (#PCDATA)>
-<!ATTLIST text:date text:date-value %date; #IMPLIED>
-<!ATTLIST text:date text:date-adjust %dateDuration; #IMPLIED>
-<!ATTLIST text:date text:fixed %boolean; "false">
-<!ATTLIST text:date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:time (#PCDATA)>
-<!ATTLIST text:time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:time text:time-adjust %timeDuration; #IMPLIED>
-<!ATTLIST text:time text:fixed %boolean; "false">
-<!ATTLIST text:time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:page-number (#PCDATA)>
-<!ATTLIST text:page-number text:page-adjust %positiveInteger; #IMPLIED>
-<!ATTLIST text:page-number text:select-page (previous|current|next) "current">
-<!ATTLIST text:page-number %numFormat;>
-
-<!ELEMENT text:page-continuation (#PCDATA)>
-<!ATTLIST text:page-continuation text:select-page (previous|next) #REQUIRED>
-<!ATTLIST text:page-continuation text:string-value %string; #IMPLIED>
-
-<!ELEMENT text:sender-firstname (#PCDATA)>
-<!ATTLIST text:sender-firstname text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-lastname (#PCDATA)>
-<!ATTLIST text:sender-lastname text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-initials (#PCDATA)>
-<!ATTLIST text:sender-initials text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-title (#PCDATA)>
-<!ATTLIST text:sender-title text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-position (#PCDATA)>
-<!ATTLIST text:sender-position text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-email (#PCDATA)>
-<!ATTLIST text:sender-email text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-phone-private (#PCDATA)>
-<!ATTLIST text:sender-phone-private text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-fax (#PCDATA)>
-<!ATTLIST text:sender-fax text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-company (#PCDATA)>
-<!ATTLIST text:sender-company text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-phone-work (#PCDATA)>
-<!ATTLIST text:sender-phone-work text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-street (#PCDATA)>
-<!ATTLIST text:sender-street text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-city (#PCDATA)>
-<!ATTLIST text:sender-city text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-postal-code (#PCDATA)>
-<!ATTLIST text:sender-postal-code text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-country (#PCDATA)>
-<!ATTLIST text:sender-country text:fixed %boolean; "true">
-
-<!ELEMENT text:sender-state-or-province (#PCDATA)>
-<!ATTLIST text:sender-state-or-province text:fixed %boolean; "true">
-
-<!ELEMENT text:author-name (#PCDATA)>
-<!ATTLIST text:author-name text:fixed %boolean; "true">
-
-<!ELEMENT text:author-initials (#PCDATA)>
-<!ATTLIST text:author-initials text:fixed %boolean; "true">
-
-<!ELEMENT text:placeholder (#PCDATA)>
-<!ATTLIST text:placeholder text:placeholder-type (text|table|text-box|image|object) #REQUIRED>
-<!ATTLIST text:placeholder text:description %string; #IMPLIED>
-
-<!ELEMENT text:variable-decls (text:variable-decl)*>
-
-<!ELEMENT text:variable-decl EMPTY>
-<!ATTLIST text:variable-decl text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-decl %valueAndTypeAttr;>
-
-<!ELEMENT text:variable-set (#PCDATA)>
-<!ATTLIST text:variable-set text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-set text:formula %formula; #IMPLIED>
-<!ATTLIST text:variable-set %valueAndTypeAttr;>
-<!ATTLIST text:variable-set text:display (value|none) "value">
-<!ATTLIST text:variable-set style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:variable-get (#PCDATA)>
-<!ATTLIST text:variable-get text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-get text:display (value|formula) "value">
-<!ATTLIST text:variable-get style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:variable-input (#PCDATA)>
-<!ATTLIST text:variable-input text:name %variableName; #REQUIRED>
-<!ATTLIST text:variable-input text:description %string; #IMPLIED>
-<!ATTLIST text:variable-input %valueAndTypeAttr;>
-<!ATTLIST text:variable-input text:display (value|none) "value">
-<!ATTLIST text:variable-input style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:user-field-decls (text:user-field-decl)*>
-
-<!ELEMENT text:user-field-decl EMPTY>
-<!ATTLIST text:user-field-decl text:name %variableName; #REQUIRED>
-<!ATTLIST text:user-field-decl text:formula %formula; #IMPLIED>
-<!ATTLIST text:user-field-decl %valueAndTypeAttr;>
-
-<!ELEMENT text:user-field-get (#PCDATA)>
-<!ATTLIST text:user-field-get text:name %variableName; #REQUIRED>
-<!ATTLIST text:user-field-get text:display (value|formula|none) "value">
-<!ATTLIST text:user-field-get style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:user-field-input (#PCDATA)>
-<!ATTLIST text:user-field-input text:name %variableName; #REQUIRED>
-<!ATTLIST text:user-field-input text:description %string; #IMPLIED>
-<!ATTLIST text:user-field-input style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:sequence-decls (text:sequence-decl)*>
-
-<!ELEMENT text:sequence-decl EMPTY>
-<!ATTLIST text:sequence-decl text:name %variableName; #REQUIRED>
-<!ATTLIST text:sequence-decl text:display-outline-level %positiveInteger; "0">
-<!ATTLIST text:sequence-decl text:separation-character %character; ".">
-
-<!ELEMENT text:sequence (#PCDATA)>
-<!ATTLIST text:sequence text:name %variableName; #REQUIRED>
-<!ATTLIST text:sequence text:formula %formula; #IMPLIED>
-<!ATTLIST text:sequence %numFormat;>
-<!ATTLIST text:sequence text:ref-name ID #IMPLIED>
-
-<!ELEMENT text:expression (#PCDATA)>
-<!ATTLIST text:expression text:formula %formula; #IMPLIED>
-<!ATTLIST text:expression text:display (value|formula ) "value">
-<!ATTLIST text:expression %valueAndTypeAttr;>
-<!ATTLIST text:expression style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:text-input (#PCDATA)>
-<!ATTLIST text:text-input text:description %string; #IMPLIED>
-
-<!ENTITY % database-table "text:database-name CDATA #REQUIRED
- text:table-name CDATA #REQUIRED">
-
-<!ELEMENT text:database-display (#PCDATA)>
-<!ATTLIST text:database-display %database-table;>
-<!ATTLIST text:database-display text:column-name %string; #REQUIRED>
-<!ATTLIST text:database-display style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:database-next (#PCDATA)>
-<!ATTLIST text:database-next %database-table;>
-<!ATTLIST text:database-next text:condition %formula; #IMPLIED>
-
-<!ELEMENT text:database-row-select (#PCDATA)>
-<!ATTLIST text:database-row-select %database-table;>
-<!ATTLIST text:database-row-select text:condition %formula; #IMPLIED>
-<!ATTLIST text:database-row-select text:row-number %integer; #REQUIRED>
-
-<!ELEMENT text:database-row-number (#PCDATA)>
-<!ATTLIST text:database-row-number %database-table;>
-<!ATTLIST text:database-row-number %numFormat;>
-<!ATTLIST text:database-row-number text:value %integer; #IMPLIED>
-
-<!ELEMENT text:database-name (#PCDATA)>
-<!ATTLIST text:database-name %database-table;>
-
-<!ELEMENT text:initial-creator (#PCDATA)>
-<!ATTLIST text:initial-creator text:fixed %boolean; "false">
-
-<!ELEMENT text:creation-date (#PCDATA)>
-<!ATTLIST text:creation-date text:fixed %boolean; "false">
-<!ATTLIST text:creation-date text:date-value %date; #IMPLIED>
-<!ATTLIST text:creation-date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:creation-time (#PCDATA)>
-<!ATTLIST text:creation-time text:fixed %boolean; "false">
-<!ATTLIST text:creation-time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:creation-time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:description (#PCDATA)>
-<!ATTLIST text:description text:fixed %boolean; "false">
-
-<!ELEMENT text:user-defined (#PCDATA)>
-<!ATTLIST text:user-defined text:fixed %boolean; "false">
-<!ATTLIST text:user-defined text:name %string; #REQUIRED>
-
-<!ELEMENT text:print-time (#PCDATA)>
-<!ATTLIST text:print-time text:fixed %boolean; "false">
-<!ATTLIST text:print-time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:print-time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:print-date (#PCDATA)>
-<!ATTLIST text:print-date text:fixed %boolean; "false">
-<!ATTLIST text:print-date text:date-value %date; #IMPLIED>
-<!ATTLIST text:print-date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:printed-by (#PCDATA)>
-<!ATTLIST text:printed-by text:fixed %boolean; "false">
-
-<!ELEMENT text:title (#PCDATA)>
-<!ATTLIST text:title text:fixed %boolean; "false">
-
-<!ELEMENT text:subject (#PCDATA)>
-<!ATTLIST text:subject text:fixed %boolean; "false">
-
-<!ELEMENT text:keywords (#PCDATA)>
-<!ATTLIST text:keywords text:fixed %boolean; "false">
-
-<!ELEMENT text:editing-cycles (#PCDATA)>
-<!ATTLIST text:editing-cycles text:fixed %boolean; "false">
-
-<!ELEMENT text:editing-duration (#PCDATA)>
-<!ATTLIST text:editing-duration text:fixed %boolean; "false">
-<!ATTLIST text:editing-duration text:duration %timeDuration; #IMPLIED>
-<!ATTLIST text:editing-duration style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:modification-time (#PCDATA)>
-<!ATTLIST text:modification-time text:fixed %boolean; "false">
-<!ATTLIST text:modification-time text:time-value %timeInstance; #IMPLIED>
-<!ATTLIST text:modification-time style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:modification-date (#PCDATA)>
-<!ATTLIST text:modification-date text:fixed %boolean; "false">
-<!ATTLIST text:modification-date text:date-value %date; #IMPLIED>
-<!ATTLIST text:modification-date style:data-style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:creator (#PCDATA)>
-<!ATTLIST text:creator text:fixed %boolean; "false">
-
-<!ELEMENT text:conditional-text (#PCDATA)>
-<!ATTLIST text:conditional-text text:condition %formula; #REQUIRED>
-<!ATTLIST text:conditional-text text:string-value-if-false %string; #REQUIRED>
-<!ATTLIST text:conditional-text text:string-value-if-true %string; #REQUIRED>
-<!ATTLIST text:conditional-text text:current-value %boolean; "false">
-
-<!ELEMENT text:hidden-text (#PCDATA)>
-<!ATTLIST text:hidden-text text:condition %formula; #REQUIRED>
-<!ATTLIST text:hidden-text text:string-value %string; #REQUIRED>
-<!ATTLIST text:hidden-text text:is-hidden %boolean; "false">
-
-<!ELEMENT text:hidden-paragraph EMPTY>
-<!ATTLIST text:hidden-paragraph text:condition %formula; #REQUIRED>
-<!ATTLIST text:hidden-paragraph text:is-hidden %boolean; "false">
-
-<!ELEMENT text:chapter (#PCDATA)>
-<!ATTLIST text:chapter text:display (name|number|number-and-name|
- plain-number-and-name|plain-number)
- "number-and-name">
-<!ATTLIST text:chapter text:outline-level %integer; "1">
-
-<!ELEMENT text:file-name (#PCDATA)>
-<!ATTLIST text:file-name text:display (full|path|name|name-and-extension)
- "full">
-<!ATTLIST text:file-name text:fixed %boolean; "false">
-
-<!ELEMENT text:template-name (#PCDATA)>
-<!ATTLIST text:template-name text:display (full|path|name|name-and-extension|
- area|title) "full">
-
-<!ELEMENT text:set-page-variable EMPTY>
-<!ATTLIST text:set-page-variable text:active %boolean; "true">
-<!ATTLIST text:set-page-variable text:page-adjust %integer; "0">
-
-<!ELEMENT text:get-page-variable (#PCDATA)>
-<!ATTLIST text:get-page-variable %numFormat;>
-
-<!ELEMENT text:execute-macro (#PCDATA|office:events)* >
-<!ATTLIST text:execute-macro text:description %string; #IMPLIED>
-
-
-<!ELEMENT text:dde-connection-decls (text:dde-connection-decl)*>
-
-<!ELEMENT text:dde-connection-decl EMPTY>
-<!ATTLIST text:dde-connection-decl text:name %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:dde-application %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:dde-topic %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:dde-item %string; #REQUIRED>
-<!ATTLIST text:dde-connection-decl text:automatic-update %boolean; "false">
-
-<!ELEMENT text:dde-connection (#PCDATA)>
-<!ATTLIST text:dde-connection text:connection-name %string; #REQUIRED>
-
-<!ELEMENT text:reference-ref (#PCDATA)>
-<!ATTLIST text:reference-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:reference-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:sequence-ref (#PCDATA)>
-<!ATTLIST text:sequence-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:sequence-ref text:reference-format (page|chapter|text|direction|category-and-value|caption|value) #IMPLIED>
-
-<!ELEMENT text:bookmark-ref (#PCDATA)>
-<!ATTLIST text:bookmark-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:bookmark-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:footnote-ref (#PCDATA)>
-<!ATTLIST text:footnote-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:footnote-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:endnote-ref (#PCDATA)>
-<!ATTLIST text:endnote-ref text:ref-name %string; #REQUIRED>
-<!ATTLIST text:endnote-ref text:reference-format (page|chapter|text|direction) #IMPLIED>
-
-<!ELEMENT text:sheet-name (#PCDATA)>
-
-<!ELEMENT text:page-count (#PCDATA)>
-<!ATTLIST text:page-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:page-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:paragraph-count (#PCDATA)>
-<!ATTLIST text:paragraph-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:paragraph-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:word-count (#PCDATA)>
-<!ATTLIST text:word-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:word-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:character-count (#PCDATA)>
-<!ATTLIST text:character-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:character-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:table-count (#PCDATA)>
-<!ATTLIST text:table-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:table-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:image-count (#PCDATA)>
-<!ATTLIST text:image-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:image-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:object-count (#PCDATA)>
-<!ATTLIST text:object-count style:num-format %string; #IMPLIED>
-<!ATTLIST text:object-count style:num-letter-sync %boolean; "false">
-
-<!ELEMENT text:bibliography-mark (#PCDATA)>
-<!ATTLIST text:bibliography-mark text:bibiliographic-type
- ( article | book | booklet | conference | custom1 | custom2 | custom3 |
- custom4 | custom5 | email | inbook | incollection | inproceedings |
- journal | manual | mastersthesis | misc | phdthesis | proceedings |
- techreport | unpublished | www ) #REQUIRED >
-<!ATTLIST text:bibliography-mark text:identifier CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:address CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:annote CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:author CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:booktitle CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:chapter CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:edition CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:editor CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:howpublished CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:institution CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:journal CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:month CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:note CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:number CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:organizations CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:pages CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:publisher CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:school CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:series CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:title CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:report-type CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:volume CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:year CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:url CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom1 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom2 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom3 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom4 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:custom5 CDATA #IMPLIED>
-<!ATTLIST text:bibliography-mark text:isbn CDATA #IMPLIED>
-
-
-<!ELEMENT text:bookmark EMPTY>
-<!ATTLIST text:bookmark text:name CDATA #REQUIRED>
-
-<!ELEMENT text:bookmark-start EMPTY>
-<!ATTLIST text:bookmark-start text:name CDATA #REQUIRED>
-
-<!ELEMENT text:bookmark-end EMPTY>
-<!ATTLIST text:bookmark-end text:name CDATA #REQUIRED>
-
-<!ELEMENT text:reference-mark EMPTY>
-<!ATTLIST text:reference-mark text:name CDATA #REQUIRED>
-
-<!ELEMENT text:reference-mark-start EMPTY>
-<!ATTLIST text:reference-mark-start text:name CDATA #REQUIRED>
-
-<!ELEMENT text:reference-mark-end EMPTY>
-<!ATTLIST text:reference-mark-end text:name CDATA #REQUIRED>
-
-<!ELEMENT text:footnotes-configuration (text:footnote-continuation-notice-forward?,text:footnote-continuation-notice-backward?)>
-<!ATTLIST text:footnotes-configuration style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration style:num-format %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration style:num-letter-sync %string; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:citation-body-style-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:citation-style-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:default-style-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:master-page-name %styleName; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:start-value %integer; #IMPLIED>
-<!ATTLIST text:footnotes-configuration text:footnotes-position (document|page) "page">
-<!ATTLIST text:footnotes-configuration text:start-numbering-at (document|chapter|page) "document">
-
-<!ELEMENT text:footnote-continuation-notice-forward (#PCDATA)>
-<!ELEMENT text:footnote-continuation-notice-backward (#PCDATA)>
-
-<!ELEMENT text:endnotes-configuration EMPTY>
-<!ATTLIST text:endnotes-configuration style:num-prefix %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration style:num-suffix %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration style:num-format %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration style:num-letter-sync %string; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:start-value %integer; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:citation-style-name %styleName; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:citation-body-style-name %styleName; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:default-style-name %styleName; #IMPLIED>
-<!ATTLIST text:endnotes-configuration text:master-page-name %styleName; #IMPLIED>
-
-<!-- Validity constraint: text:footnote and text:endnote elements may not
- contain other text:footnote or text:endnote elements, even though the DTD
- allows this (via the %text; in the foot-/endnote-body).
- Unfortunatetly, this constraint cannot be easily specified in the DTD.
--->
-<!ELEMENT text:footnote (text:footnote-citation, text:footnote-body)>
-<!ATTLIST text:footnote text:id ID #IMPLIED>
-
-<!ELEMENT text:footnote-citation (#PCDATA)>
-<!ATTLIST text:footnote-citation text:label %string; #IMPLIED>
-
-<!ELEMENT text:footnote-body (text:h|text:p|
- text:ordered-list|text:unordered-list)*>
-
-<!ELEMENT text:endnote (text:endnote-citation, text:endnote-body)>
-<!ATTLIST text:endnote text:id ID #IMPLIED>
-
-<!ELEMENT text:endnote-citation (#PCDATA)>
-<!ATTLIST text:endnote-citation text:label %string; #IMPLIED>
-
-<!ELEMENT text:endnote-body (text:h|text:p|
- text:ordered-list|text:unordered-list)*>
-
-<!ENTITY % sectionText "(text:h|text:p|text:ordered-list|
- text:unordered-list|table:table|chart:chart|draw:page|
- draw:a|draw:text-box|draw:image|text:section|
- text:table-of-content|text:illustration-index|
- text:table-index|text:object-index|text:user-index|
- text:alphabetical-index|text:bibliography|
- text:index-title|%change-marks;)*">
-
-<!ELEMENT text:section ((text:section-source|office:dde-source)?,
- %sectionText;) >
-
-<!ATTLIST text:section text:name CDATA #REQUIRED>
-<!ATTLIST text:section text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:section text:display (true|none|condition) "true">
-<!ATTLIST text:section text:condition %formula; #IMPLIED>
-<!ATTLIST text:section text:protected %boolean; "false">
-<!ATTLIST text:section text:protection-key CDATA #IMPLIED>
-
-<!ELEMENT text:section-source EMPTY>
-<!ATTLIST text:section-source xlink:href %string; #IMPLIED>
-<!ATTLIST text:section-source xlink:type (simple) #FIXED "simple">
-<!ATTLIST text:section-source xlink:show (embed) #FIXED "embed">
-<!ATTLIST text:section-source text:section-name %string; #IMPLIED>
-<!ATTLIST text:section-source text:filter-name %string; #IMPLIED>
-
-<!ELEMENT text:table-of-content (text:table-of-content-source,
- text:index-body) >
-<!ATTLIST text:table-of-content text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:table-of-content text:protected %boolean; "false">
-
-<!ELEMENT text:table-of-content-source (text:index-title-template? ,
- text:table-of-content-entry-template*,
- text:index-source-styles* ) >
-<!ATTLIST text:table-of-content-source text:outline-level %integer; #IMPLIED>
-<!ATTLIST text:table-of-content-source text:use-index-marks %boolean; "true">
-<!ATTLIST text:table-of-content-source text:use-index-source-styles
- %boolean; "false">
-<!ATTLIST text:table-of-content-source text:index-scope (document|chapter)
- "document">
-<!ATTLIST text:table-of-content-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:table-of-content-source fo:language %string; #IMPLIED>
-<!ATTLIST text:table-of-content-source fo:country %string; #IMPLIED>
-<!ATTLIST text:table-of-content-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:table-of-content-entry-template (text:index-entry-chapter-number |
- text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop |
- text:index-entry-link-start |
- text:index-entry-link-end)* >
-<!ATTLIST text:table-of-content-entry-template text:outline-level
- %integer; #REQUIRED>
-<!ATTLIST text:table-of-content-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:illustration-index
- (text:illustration-index-source, text:index-body)>
-<!ATTLIST text:illustration-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:illustration-index text:protected %boolean; "false">
-
-<!ELEMENT text:illustration-index-source (text:index-title-template?,
- text:illustration-index-entry-template?) >
-<!ATTLIST text:illustration-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:illustration-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:illustration-index-source text:use-caption %boolean; "true">
-<!ATTLIST text:illustration-index-source text:caption-sequence-name
- %string; #IMPLIED>
-<!ATTLIST text:illustration-index-source text:caption-sequence-format
- (text|category-and-value|caption) "text">
-<!ATTLIST text:illustration-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:illustration-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:illustration-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:illustration-index-entry-template
- ( text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:illustration-index-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:table-index (text:table-index-source, text:index-body)>
-<!ATTLIST text:table-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:table-index text:protected %boolean; "false">
-
-<!ELEMENT text:table-index-source (text:index-title-template?,
- text:table-index-entry-template?) >
-<!ATTLIST text:table-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:table-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:table-index-source text:use-caption %boolean; "true">
-<!ATTLIST text:table-index-source text:caption-sequence-name
- %string; #IMPLIED>
-<!ATTLIST text:table-index-source text:caption-sequence-format
- (text|category-and-value|caption) "text">
-<!ATTLIST text:table-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:table-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:table-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:table-index-entry-template ( text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:table-index-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:object-index ( text:object-index-source, text:index-body ) >
-<!ATTLIST text:object-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:object-index text:protected %boolean; "false">
-
-<!ELEMENT text:object-index-source ( text:index-title-template?,
- text:object-index-entry-template? ) >
-<!ATTLIST text:object-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:object-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:object-index-source text:use-spreadsheet-objects
- %boolean; "false">
-<!ATTLIST text:object-index-source text:use-draw-objects %boolean; "false">
-<!ATTLIST text:object-index-source text:use-chart-objects %boolean; "false">
-<!ATTLIST text:object-index-source text:use-other-objects %boolean; "false">
-<!ATTLIST text:object-index-source text:use-math-objects %boolean; "false">
-<!ATTLIST text:object-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:object-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:object-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:object-index-entry-template ( text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:object-index-entry-template text:style-name
- %styleName; #REQUIRED >
-
-<!ELEMENT text:user-index (text:user-index-source, text:index-body) >
-<!ATTLIST text:user-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:user-index text:protected %boolean; "false">
-
-<!ELEMENT text:user-index-source ( text:index-title-template?,
- text:user-index-entry-template*,
- text:index-source-styles* ) >
-<!ATTLIST text:user-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:user-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:user-index-source text:use-index-marks %boolean; "false">
-<!ATTLIST text:user-index-source text:use-graphics %boolean; "false">
-<!ATTLIST text:user-index-source text:use-tables %boolean; "false">
-<!ATTLIST text:user-index-source text:use-floating-frames %boolean; "false">
-<!ATTLIST text:user-index-source text:use-objects %boolean; "false">
-<!ATTLIST text:user-index-source text:use-index-source-styles
- %boolean; "false">
-<!ATTLIST text:user-index-source text:copy-outline-level %boolean; "false">
-<!ATTLIST text:user-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:user-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:user-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:user-index-entry-template ( text:index-entry-chapter |
- text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:user-index-entry-template text:outline-level %integer; #REQUIRED>
-<!ATTLIST text:user-index-entry-template text:style-name %styleName; #REQUIRED>
-
-<!ELEMENT text:alphabetical-index (text:alphabetical-index-source,
- text:index-body)>
-<!ATTLIST text:alphabetical-index text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:alphabetical-index text:protected %boolean; "false">
-
-<!ELEMENT text:alphabetical-index-source ( text:index-title-template?,
- text:alphabetical-index-entry-template* ) >
-<!ATTLIST text:alphabetical-index-source text:index-scope
- (document|chapter) "document">
-<!ATTLIST text:alphabetical-index-source text:relative-tab-stop-position
- %boolean; "true">
-<!ATTLIST text:alphabetical-index-source text:ignore-case %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:main-entry-style-name
- %styleName; #IMPLIED>
-<!ATTLIST text:alphabetical-index-source text:alphabetical-separators
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:combine-entries
- %boolean; "true">
-<!ATTLIST text:alphabetical-index-source text:combine-entries-with-dash
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:combine-entries-with-pp
- %boolean; "true">
-<!ATTLIST text:alphabetical-index-source text:use-keys-as-entries
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:capitalize-entries
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source text:comma-separated
- %boolean; "false">
-<!ATTLIST text:alphabetical-index-source fo:language %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-source fo:country %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-source text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:alphabetical-index-entry-template ( text:index-entry-chapter |
- text:index-entry-page-number |
- text:index-entry-text |
- text:index-entry-span |
- text:index-entry-tab-stop )* >
-<!ATTLIST text:alphabetical-index-entry-template text:outline-level
- (1|2|3|separator) #REQUIRED>
-<!ATTLIST text:alphabetical-index-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:alphabetical-index-auto-mark-file EMPTY>
-<!ATTLIST text:alphabetical-index-auto-mark-file xlink:href CDATA #IMPLIED>
-<!ATTLIST text:alphabetical-index-auto-mark-file xlink:type (simple) #FIXED "simple">
-
-<!ELEMENT text:bibliography (text:bibliography-source, text:index-body) >
-<!ATTLIST text:bibliography text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:bibliography text:protected %boolean; "false">
-
-<!ELEMENT text:bibliography-source ( text:index-title-template?,
- text:bibliography-entry-template* ) >
-
-<!ELEMENT text:bibliography-entry-template ( text:index-entry-span |
- text:index-entry-tab-stop |
- text:index-entry-bibliography )* >
-<!ATTLIST text:bibliography-entry-template text:bibliography-type
- ( article | book | booklet | conference | custom1 | custom2 |
- custom3 | custom4 | custom5 | email | inbook | incollection |
- inproceedings | journal | manual | mastersthesis | misc |
- phdthesis | proceedings | techreport | unpublished | www )
- #REQUIRED >
-<!ATTLIST text:bibliography-entry-template text:style-name
- %styleName; #REQUIRED>
-
-<!ELEMENT text:index-body %sectionText; >
-
-<!--
-Validity constraint: text:index-title elements may appear only in
-indices, and there may be only one text:index-title element.
--->
-<!ELEMENT text:index-title %sectionText; >
-<!ATTLIST text:index-title text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-title text:name %string; #IMPLIED>
-
-<!ELEMENT text:index-title-template (#PCDATA)>
-<!ATTLIST text:index-title-template text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-chapter-number EMPTY>
-<!ATTLIST text:index-entry-chapter-number text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-chapter EMPTY>
-<!ATTLIST text:index-entry-chapter text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-entry-chapter text:display (name|number|number-and-name)
- "number-and-name" >
-
-<!ELEMENT text:index-entry-text EMPTY>
-<!ATTLIST text:index-entry-text text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-page-number EMPTY>
-<!ATTLIST text:index-entry-page-number text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-span (#PCDATA)>
-<!ATTLIST text:index-entry-span text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-bibliography EMPTY>
-<!ATTLIST text:index-entry-bibliography text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-entry-bibliography text:bibliography-data-field
- ( address | annote | author | bibiliographic_type |
- booktitle | chapter | custom1 | custom2 |
- custom3 | custom4 | custom5 | edition | editor |
- howpublished | identifier | institution | isbn |
- journal | month | note | number | organizations |
- pages | publisher | report_type | school |
- series | title | url | volume | year ) #REQUIRED>
-
-
-<!ELEMENT text:index-entry-tab-stop EMPTY>
-<!ATTLIST text:index-entry-tab-stop text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:index-entry-tab-stop style:leader-char %character; " ">
-<!ATTLIST text:index-entry-tab-stop style:type (left|right) "left">
-<!ATTLIST text:index-entry-tab-stop style:position %length; #IMPLIED>
-
-<!ELEMENT text:index-entry-link-start EMPTY>
-<!ATTLIST text:index-entry-link-start text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-entry-link-end EMPTY>
-<!ATTLIST text:index-entry-link-end text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:index-source-styles (text:index-source-style)*>
-<!ATTLIST text:index-source-styles text:outline-level %integer; #REQUIRED>
-
-<!ELEMENT text:index-source-style EMPTY>
-<!ATTLIST text:index-source-style text:style-name %styleName; #REQUIRED>
-
-<!ELEMENT text:toc-mark-start EMPTY>
-<!ATTLIST text:toc-mark-start text:id %string; #REQUIRED>
-<!ATTLIST text:toc-mark-start text:outline-level %integer; #IMPLIED>
-
-<!ELEMENT text:toc-mark-end EMPTY>
-<!ATTLIST text:toc-mark-end text:id %string; #REQUIRED>
-
-<!ELEMENT text:toc-mark EMPTY>
-<!ATTLIST text:toc-mark text:string-value %string; #REQUIRED>
-<!ATTLIST text:toc-mark text:outline-level %integer; #IMPLIED>
-
-<!ELEMENT text:user-index-mark-start EMPTY>
-<!ATTLIST text:user-index-mark-start text:id %string; #REQUIRED>
-<!ATTLIST text:user-index-mark-start text:outline-level %integer; #IMPLIED>
-<!ATTLIST text:user-index-mark-start text:index-name %string; #IMPLIED>
-
-<!ELEMENT text:user-index-mark-end EMPTY>
-<!ATTLIST text:user-index-mark-end text:id %string; #REQUIRED>
-
-<!ELEMENT text:user-index-mark EMPTY>
-<!ATTLIST text:user-index-mark text:string-value %string; #REQUIRED>
-<!ATTLIST text:user-index-mark text:outline-level %integer; #IMPLIED>
-<!ATTLIST text:user-index-mark text:index-name %string; #IMPLIED>
-
-<!ELEMENT text:alphabetical-index-mark-start EMPTY>
-<!ATTLIST text:alphabetical-index-mark-start text:id %string; #REQUIRED>
-<!ATTLIST text:alphabetical-index-mark-start text:key1 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark-start text:key2 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark-start text:main-etry %boolean; "false">
-
-<!ELEMENT text:alphabetical-index-mark-end EMPTY>
-<!ATTLIST text:alphabetical-index-mark-end text:id %string; #REQUIRED>
-
-<!ELEMENT text:alphabetical-index-mark EMPTY>
-<!ATTLIST text:alphabetical-index-mark text:string-value %string; #REQUIRED>
-<!ATTLIST text:alphabetical-index-mark text:key1 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark text:key2 %string; #IMPLIED>
-<!ATTLIST text:alphabetical-index-mark text:main-etry %boolean; "false">
-
-<!ELEMENT text:bibliography-configuration (text:sort-key)*>
-<!ATTLIST text:bibliography-configuration text:prefix %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration text:suffix %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration text:sort-by-position %boolean; "true">
-<!ATTLIST text:bibliography-configuration text:numbered-entries %boolean; "false">
-<!ATTLIST text:bibliography-configuration fo:language %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration fo:country %string; #IMPLIED>
-<!ATTLIST text:bibliography-configuration text:sort-algorithm %string; #IMPLIED>
-
-<!ELEMENT text:sort-key EMPTY>
-<!ATTLIST text:sort-key text:key ( address | annote | author |
- bibiliographic_type | booktitle | chapter | custom1 | custom2 |
- custom3 | custom4 | custom5 | edition | editor | howpublished |
- identifier | institution | isbn | journal | month | note | number |
- organizations | pages | publisher | report_type | school | series |
- title | url | volume | year ) #REQUIRED>
-<!ATTLIST text:sort-key text:sort-ascending %boolean; "true">
-
-<!ELEMENT text:linenumbering-configuration (text:linenumbering-separator?)>
-<!ATTLIST text:linenumbering-configuration text:style-name %styleName; #IMPLIED>
-<!ATTLIST text:linenumbering-configuration text:number-lines %boolean; "true">
-<!ATTLIST text:linenumbering-configuration text:count-empty-lines %boolean; "true">
-<!ATTLIST text:linenumbering-configuration text:count-in-floating-frames %boolean; "false">
-<!ATTLIST text:linenumbering-configuration text:restart-numbering %boolean; "false">
-<!ATTLIST text:linenumbering-configuration text:offset %nonNegativeLength; #IMPLIED>
-<!ATTLIST text:linenumbering-configuration style:num-format (1|a|A|i|I) "1">
-<!ATTLIST text:linenumbering-configuration style:num-letter-sync %boolean; "false">
-<!ATTLIST text:linenumbering-configuration text:number-position (left|rigth|inner|outer) "left">
-<!ATTLIST text:linenumbering-configuration text:increment %nonNegativeInteger; #IMPLIED>
-
-<!ELEMENT text:linenumbering-separator (#PCDATA)>
-<!ATTLIST text:linenumbering-separator text:increment %nonNegativeInteger; #IMPLIED>
-
-<!ELEMENT text:script (#PCDATA)>
-<!ATTLIST text:script script:language CDATA #REQUIRED>
-<!ATTLIST text:script xlink:href CDATA #IMPLIED>
-<!ATTLIST text:script xlink:type (simple) #FIXED "simple">
-
-<!ELEMENT text:measure (#PCDATA)>
-<!ATTLIST text:measure text:kind (value|unit|gap) #REQUIRED>
-
-<!ELEMENT text:ruby (text:ruby-base, text:ruby-text)>
-<!ATTLIST text:ruby text:style-name %styleName; #IMPLIED>
-
-<!ELEMENT text:ruby-base %inline-text;>
-
-<!ELEMENT text:ruby-text (#PCDATA)>
-<!ATTLIST text:ruby-text text:style-name %styleName; #IMPLIED>
-
-<!-- elements for change tracking -->
-
-<!ELEMENT text:change EMPTY>
-<!ATTLIST text:change text:change-id CDATA #REQUIRED>
-
-<!ELEMENT text:change-start EMPTY>
-<!ATTLIST text:change-start text:change-id CDATA #REQUIRED>
-
-<!ELEMENT text:change-end EMPTY>
-<!ATTLIST text:change-end text:change-id CDATA #REQUIRED>
-
-<!ELEMENT text:tracked-changes (text:changed-region)*>
-<!ATTLIST text:tracked-changes text:track-changes %boolean; "true">
-<!ATTLIST text:tracked-changes text:protection-key CDATA #IMPLIED>
-
-<!ELEMENT text:changed-region (text:insertion |
- (text:deletion, text:insertion?) |
- text:format-change) >
-<!ATTLIST text:changed-region text:id ID #REQUIRED>
-
-<!ELEMENT text:insertion (office:change-info, %sectionText;)>
-<!ELEMENT text:deletion (office:change-info, %sectionText;)>
-<!ELEMENT text:format-change (office:change-info)>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/pdbcomparison.java b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/pdbcomparison.java
deleted file mode 100644
index 691bea14c9e8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/comparator/pdbcomparison.java
+++ /dev/null
@@ -1,542 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-import java.io.*;
-import java.util.*;
-
-public class pdbcomparison
-{
-
- private String LOGTAG ="LOGFILE";
- private String OUTTAG ="OUTFILE";
- private String LISTTAG ="LISTFILE";
- private String PDBTAG1 ="PDBNAME1";
- private String PDBTAG2 ="PDBNAME2";
-
- private String OUTFILE="pdbcomparison.out";
- private String LOGFILE="pdbcomparison.log";
-
- private String pdbarr1[];
- private String pdbarr2[];
-
-
- /**
- * Default Constructor
- *
- * @param
- * @return
- *
- */
- public void pdbcomparison()
- {
- }
-
- /**
- * Prints the command line arguments for this class
- *
- * @param
- *
- * @return void
- *
- */
- public void usage()
- {
- String str = new String();
- str += "********************************************************\n";
- str += " java pdbcomparison.java <propFile> \n";
- str += " where propFile is name of Property File...\n";
- str += "********************************************************\n";
-
- System.out.println(str);
-
- }
-
- /**
- * This method, read the Property file and validates the
- * entries in that file, and accordingly sets the log file
- * output file and updates the array pdbarr1 and pdbarr2 with
- * list of pdb's to be compared.
- *
- * @param propFile Property filename which list the log/outputfile/list/pdb
- * names
- * @return
- *
- */
- public void parsePropertyFile(String propFile)
- {
- Properties defaultProps = new Properties();
-
- try {
- FileInputStream in = new FileInputStream(propFile);
- defaultProps.load(in);
- in.close();
- } catch (IOException e) {
- System.out.println("Could not open Property File " + propFile);
- return;
- }
-
-
- String logFile = defaultProps.getProperty(this.LOGTAG);
- String outFile = defaultProps.getProperty(this.OUTTAG);
- String listFile = defaultProps.getProperty(this.LISTTAG);
- String pdbname1 = defaultProps.getProperty(this.PDBTAG1);
- String pdbname2 = defaultProps.getProperty(this.PDBTAG2);
-
- // validate all command line arguments
- if ((listFile == null) && ((pdbname1 == null) || (pdbname2 == null)))
- {
- System.out.println("Missing listFile or missing pdb filenames in Property file " + propFile);
- return;
- }
-
- if (logFile == null || logFile.length() == 0)
- logFile = this.LOGFILE;
-
- if (outFile == null || outFile.length() == 0)
- outFile = this.LOGFILE;
-
-
- // validate log and output files
- if (! validateAndCreateFile(logFile)) return;
- if (! validateAndCreateFile(outFile)) return;
- LOGFILE = logFile;
- OUTFILE = outFile;
-
- System.out.println("Output is written to log file... " + LOGFILE);
- if (listFile != null)
- {
- if (! checkFile(listFile)) return;
- populatePDBArray(listFile);
- } else {
- if (! checkFile(pdbname1)) return;
- if (! checkFile(pdbname2)) return;
- populatePDBArray(pdbname1, pdbname2);
- }
- }
-
- /**
- * This method validates if the file passed exists.
- * If it does , then it is moved to <filename>.bak and then creates a newFile.
- * Also validates permissions to create.
- *
- * @param filename name of file to be created
- * @return true, if file could be created
- * false, if could not.
- *
- */
- private boolean validateAndCreateFile (String filename)
- {
- if (filename == null) return false;
-
- File f = null;
- try {
- f = new File(filename);
- } catch (NullPointerException e) {
- System.out.println("Could not create a File object for file " + filename);
- return false;
- }
-
- if (f.exists())
- {
- String newFile = filename + ".bak";
- File newF=null;
- try {
- newF = new File(newFile);
- } catch (Exception ex) {
- System.out.println("Could not get File Object instance for " + newFile);
- return false;
- }
-
- if (newF.exists())
- {
- try {
- newF.delete();
- } catch ( SecurityException se) {
- System.out.println("Could not get delete " + newFile);
- return false;
- }
- }
-
- try {
- if (! f.renameTo(newF))
- {
- System.out.println("Could not rename " + filename + " to " + newFile );
- return false;
- }
- } catch (SecurityException s) {
- System.out.println("SecurityException: " + s.toString());
- return false;
- } catch (NullPointerException n) {
- System.out.println("NullPointerException: " + n.toString());
- return false;
- }
- } else {
- try {
- if (! f.createNewFile())
- {
- System.out.println("Could not create " + filename + " Check permissions..");
- return false;
- }
- } catch (IOException e) {
- System.out.println("IOException: " + e.toString());
- return false;
- } catch (SecurityException s) {
- System.out.println("SecuriityException: " + s.toString() );
- return false;
- }
-
- }
-
- return true;
-
- }
-
- /**
- * This method validates if the file exists and is readable
- *
- * @param filename name of file to be created
- * @return true, if file exists and is readable
- * false, if not.
- *
- */
- private boolean checkFile(String filename)
- {
- if (filename == null) return false;
-
- File f = null;
- try {
- f = new File(filename);
- } catch (NullPointerException e) {
- System.out.println("Could not create a File object for file " + filename);
- return false;
- }
-
- if (! f.exists())
- {
- System.out.println("File " + filename + " does not exist... ");
- return false;
- }
-
- if (! f.canRead())
- {
- System.out.println("Cannot read file " + filename);
- return false;
- }
-
- return true;
-
- }
-
- /**
- * This method populates the pdb arrays with the names of the pdbs to
- * compare. Ths listFile lists a series of entries, wherein each
- * line indicates the PDB names to be compared.
- * <pdbname1>=<pdbname2>
- *
- * @param listFile name of the listfile
- * @return
- *
- */
- private void populatePDBArray(String listFile)
- {
- // open ListFile and populate the PDB list to be compared
- if (listFile != null)
- {
- Properties listProps = new Properties();
- try {
- FileInputStream in = new FileInputStream(listFile);
- listProps.load(in);
- in.close();
- } catch (IOException ex) {
- System.out.println("Could not open List File " + listFile);
- return;
- }
-
- pdbarr1 = new String[listProps.size()];
- pdbarr2 = new String[listProps.size()];
- Enumeration e = listProps.keys();
- int j=0;
- while (e.hasMoreElements())
- {
- pdbarr1[j] = (String)e.nextElement();
- pdbarr2[j] = listProps.getProperty(pdbarr1[j]);
- j++;
- }
-
- }
- }
-
- /**
- * This method populates the pdb arrays with the names of the pdbs to
- * compare.
- *
- * @param pdbname1 Name of 2nd PDB file to be compared
- * @param pdbname2 Name of 2nd PDB file to be compared
- * @return
- *
- */
- private void populatePDBArray(String pdbname1, String pdbname2)
- {
- if (pdbname1 == null) return;
- if (pdbname2 == null) return;
-
- if ((pdbname1 != null) && (pdbname2 != null))
- {
- pdbarr1 = new String[1];
- pdbarr2 = new String[1];
-
- pdbarr1[0] = pdbname1;
- pdbarr2[0] = pdbname2;
- }
- }
-
- /**
- * This method populates the pdb arrays with the names of the pdbs to
- * compare.
- *
- * @param arrayno Array number which corresponds to the pdb array
- * containing list of pdbs
- * If 1 then send pdbarr1, if 2 send pdbarr2 else null
- *
- * @return PDB string array containing list of PDB's
- *
- */
- private String[] getPDBArray(int arrayno)
- {
- if (arrayno == 1) return pdbarr1;
- if (arrayno == 2) return pdbarr2;
-
- return null;
- }
-
- /**
- * This method comares 2 PDB's and returns true if comparison is equal.
- * It uses the PDB Decoder class to decode to a PDB structure and then
- * does record comparison
- *
- * @param pdbname1 Name of one PDB file to be compared
- * @param pdbname2 Name of other PDB file to be compared
- *
- * @return returns true if both PDB's are equal else returns false
- *
- */
- private boolean comparePDB(String pdbname1, String pdbname2)
- {
- PalmDB pdb1=null, pdb2=null;
- PDBDecoder decoder = new PDBDecoder();
- try {
- pdb1 = decoder.parse(pdbname1);
- } catch (Exception e) {
- System.out.println("Could not parse PDB " + pdbname1);
- return false;
- }
-
- try {
- pdb2 = decoder.parse(pdbname2);
- } catch (Exception e) {
- System.out.println("Could not parse PDB " + pdbname2);
- return false;
- }
-
- if (pdb1.equals(pdb2)) {
- writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are equal");
-
- return true;
- } else {
- writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are not equal");
- return false;
- }
- }
-
-
-
- /**
- * Write message to LOGFILE
- *
- * @param msg Message to be written to log file
- * @return
- *
- */
- private void writeToLog(String msg)
- {
- if (msg == null) return;
-
- // Get Output Stream from Log file
- RandomAccessFile raf=null;
- try {
- raf = new RandomAccessFile(LOGFILE, "rw");
- } catch (Exception e) {
- System.out.println ("Could not open file " + LOGFILE);
- return;
- }
-
- try {
- long len = raf.length();
- raf.seek(len);
- raf.write(msg.getBytes());
- raf.write("\n".getBytes());
- } catch (IOException e) {
- System.out.println("ERROR: Could not write to File " + LOGFILE);
- return;
- }
- }
-
- /**
- * Write status of comparison to OUTFILE
- *
- * @param status Indicates whether comparsion of PDB's PASSED or FAILED
- * @param pdbname1 file name of pdb which was compared.
- * @param pdbname2 file name of pdb which was compared.
- *
- * @return
- *
- */
- private void writeToOutputFile(String status, String pdbname1, String pdbname2)
- {
- if (status == null) return;
- if (pdbname1 == null) return;
- if (pdbname2 == null) return;
-
- String msg = pdbname1 + "=" + pdbname2 + ":" + status;
-
- // Get Output Stream from Log file
- RandomAccessFile raf=null;
- try {
- raf = new RandomAccessFile(OUTFILE, "rw");
- } catch (Exception e) {
- System.out.println ("Could not open file " + OUTFILE);
- return;
- }
-
- try {
- long len = raf.length();
- raf.seek(len);
-
- raf.write(msg.getBytes());
- raf.write("\n".getBytes());
- } catch (IOException e) {
- System.out.println("ERROR: Could not write to File " + OUTFILE);
- return;
- }
-
- try {
- raf.close();
- } catch (Exception e) {
- System.out.println("ERROR: Could not close File " + OUTFILE);
- return;
- }
-
- }
-
-
-
- /**
- * Main starting block of execution
- *
- * @param command line args captured in an array of Strings
- * @return
- *
- */
- public static void main(String args[])
- {
-
- Date startTime = new Date();
- pdbcomparison pdbcmp = new pdbcomparison();
- int nargs = args.length;
- int status=0;
-
- if (nargs != 1)
- {
- System.out.println("Incorrect no. of arguments passed...");
- pdbcmp.usage();
- System.exit(-1);
-
- }
-
- String propFile = args[0];
-
- File f=null;
- try {
- f = new File(propFile);
- } catch (Exception e) {
- System.out.println("Exception: Could not open file " + propFile);
- System.exit(-1);
- }
-
- if (! f.canRead()) {
- System.out.println("Exception: " + propFile + " is not a file ");
- System.exit(-1);
- }
-
- if (! f.canRead()) {
- System.out.println("Exception: Cannot open file for reading. Please check permissions ");
- System.exit(-1);
- }
-
- // parse Property file
- pdbcmp.parsePropertyFile(propFile);
-
- String pdbarr1[] = pdbcmp.getPDBArray(1);
- String pdbarr2[] = pdbcmp.getPDBArray(2);
- if ( (pdbarr1 == null) ||
- (pdbarr2 == null) ||
- (pdbarr1.length == 0) ||
- (pdbarr1.length == 0))
- {
- System.out.println("pdbArray is empty. No PDBS to compare... \n");
- System.exit(-1);
- }
-
-
- pdbcmp.writeToLog("************** Start *****************");
- pdbcmp.writeToLog("PDB Comparison: start time " + startTime);
- for (int i=0; i<pdbarr1.length; i++)
- {
- Date pdb_startTime = new Date();
- pdbcmp.writeToLog("\n");
- pdbcmp.writeToLog("start time " + pdb_startTime);
- boolean val = pdbcmp.comparePDB(pdbarr1[i], pdbarr2[i]);
- Date pdb_endTime = new Date();
- pdbcmp.writeToLog("end time " + pdb_endTime);
-
- if (val) {
- pdbcmp.writeToOutputFile("PASSED", pdbarr1[i], pdbarr2[i]);
- status=0;
- } else {
- pdbcmp.writeToOutputFile("FAILED", pdbarr1[i], pdbarr2[i]);
- status=-1;
- }
- }
-
- Date endTime = new Date();
- pdbcmp.writeToLog("PDB Comparison: end time " + endTime);
- pdbcmp.writeToLog("************** End *****************n");
- pdbcmp.writeToLog("\n");
-
- System.exit(status);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Doc_descriptions.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Doc_descriptions.sxc
deleted file mode 100644
index ba6817d889ac..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Doc_descriptions.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.csv b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.csv
deleted file mode 100644
index c798a553e78f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.csv
+++ /dev/null
@@ -1,39 +0,0 @@
-File|Test Name|Description
-c_addition.sxc||
-c_alignment.sxc||
-c_backwardrange.sxc||
-c_boolean.sxc||
-c_cellcurrencyalue.sxc||
-c_cellfloatvalue.sxc||
-c_cellpercentvalue.sxc||
-c_cellstringvalue.sxc||
-c_cellvalue.sxc||
-c_changetracking.sxc||
-c_character.sxc||
-c_chart.sxc||
-c_check.sxc||
-c_columnswidth.sxc||
-c_cyclic.sxc||
-c_dividebyzero.sxc||
-c_dividefloating.sxc||
-c_emptysheet.sxc||
-c_filter.sxc||
-c_forwardrange.sxc||
-c_hiddenrow.sxc||
-c_insertimage.sxc||
-c_invalidcellref.sxc||
-c_largerange.sxc||
-c_listrange.sxc||
-c_mathematical.sxc||
-c_null.sxc||
-c_protection.sxc||
-c_renamedsheets.sxc||
-c_rowheight.sxc||
-c_rowstyles.sxc||
-c_sheetreference.sxc||
-c_simpleformula.sxc||
-c_smallrange.sxc||
-c_styles.sxc||
-c_sumbackward.sxc||
-c_sumforward.sxc||
-c_threeemptysheet.sxc||
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.sxc b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.sxc
deleted file mode 100644
index 7e9d37d3fa50..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/docs/Spreadsheet_descriptions.sxc
+++ /dev/null
Binary files differ
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/lib/converterlib.pm b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/lib/converterlib.pm
deleted file mode 100755
index 1542d333beb6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/lib/converterlib.pm
+++ /dev/null
@@ -1,1172 +0,0 @@
-#!/usr/bin/perl
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-####################################################################
-# File Name: converterlib.pm
-# Version : 1.0
-# Project : XMerge
-# Author : Brian Cameron
-# Date : 5th Sept. 2001
-#
-# This script enters text at position x,y on screen.
-#
-# Parameter
-# x-coordinate
-# y-coordinate
-# Text to enter
-#
-##########################################################################
-
-use EmRPC; # EmRPC::OpenConnection, CloseConnection
-use EmFunctions;
-use EmUtils;
-
-# Set global_debug flag
-#
-$global_debug = $ENV{'ZENDEBUG'};
-#$em_script_home = "/export/home/test/qadir/bin";
-$em_script_home = $ENV{'EM_SCRIPT_HOME'};
-#$qa_script_home = "/export/home/test/qadir/qa-new/bin";
- $qa_script_home = $ENV{'QA_SCRIPT_HOME'};
-#
-# CONVERT FUNCTIONS
-#
-
-# convert_to_pdb
-# directory - directory containing the xml-orig and pdb-orig
-# subdirectories.
-# file - file to convert
-# extension - extension of file to convert (sxw or sxc)
-# convert_to - what PDB format to convert into.
-#
-# Returns 0 if success, -1 otherwise.
-#
-# Converts file from XML to PDB
-#
-sub convert_to_pdb
-{
- my $directory = $_[0];
- my $file = $_[1];
- my $extension = $_[2];
- my $convert_to = $_[3];
- my $pdb_directory = $_[4];
- my $rc = 0;
- my $xmlfile = "$directory/$file.$extension";
- my $pdbdir = "$pdb_directory";
-
- &enter_func("convert_to_pdb");
-
- if (! -f "$xmlfile")
- {
- print "\nERROR, file $xmlfile does not exist\n";
- $rc = -1;
- }
- if (! -d "$pdbdir")
- {
- print "\nERROR, directory $directory/pdb-orig does not exist\n";
- $rc = -1;
- }
-
- if ($rc != -1)
- {
- if ("$convert_to" eq "application/x-minicalc")
- {
- # Move all files over.
- #
- my $i = 1;
-
- while (-f "$pdbdir/$file-Sheet$i.pdb")
- {
- my $pdbfile = "$pdbdir/$file-Sheet$i.pdb";
-
- print "\n";
-
- if (-f "$pdbfile.old")
- {
- print "Removing $pdbfile.old\n";
- `/bin/rm -f $pdbfile.old`;
- }
-
- print "Moving $pdbfile file to $pdbfile.old\n";
- `mv "$pdbfile" "$pdbfile.old"`;
-
- $i++;
- }
- }
- else
- {
- if (-f "$pdbdir/$file.pdb")
- {
- print "\n";
-
- if (-f "$pdbdir/$file.pdb.old")
- {
- print "Removing $pdbdir/$file.pdb.old\n";
- `/bin/rm -f $pdbdir/$file.pdb.old`;
- }
-
- print "Moving $pdbdir/$file.pdb file to $pdbdir/$file.pdb.old\n";
- `mv "$pdbdir/$file.pdb" "$pdbdir/$file.pdb.old"`
- }
- }
-
- &start_rd($extension, $convert_to, $xmlfile, "");
-
- if ("$convert_to" eq "application/x-minicalc")
- {
- # Must handle minicalc separately since it can
- # convert to multiple files with this file name
- # convention.
- #
- print "Moving $file-Sheet*.pdb files to $pdbdir\n";
- `mv $file-Sheet*.pdb $pdbdir`;
- `chmod 666 $pdbdir/$file-*.pdb`;
- }
- else
- {
- print "Moving $file.pdb file to $pdbdir\n";
- `mv $file.pdb $pdbdir`;
- `chmod 666 $pdbdir/$file.pdb`;
- }
- }
-
- &leave_func("convert_to_pdb");
-
- return $rc;
-}
-
-# convert_to_xml
-# xmldir - directory to contain the xml output.
-# xmlorigdir - directory to contain the xml input (used for merge)
-# pdbfile - file to convert
-# convert_from - what PDB format to convert from.
-# extension - extension of file to convert (sxw or sxc)
-# output - output filename to create
-# merge_opt - 1 if convert and merge, 0 if convert only
-#
-# Returns 0 if success, -1 otherwise.
-#
-# Converts file from PDB to XML
-#
-sub convert_to_xml
-{
- my $xmldir = $_[0];
- my $xmlorigdir = $_[1];
- my $pdbfile = $_[2];
- my $convert_from = $_[3];
- my $extension = $_[4];
- my $output = $_[5];
- my $merge_opt = $_[6];
- my $rc = 0;
-
- &enter_func("convert_to_xml");
-
- my @args = split(/ /,$pdbfile);
-
- for ($i=0;$i <= $#args; $i++)
- {
- if (! -f "@args[$i]")
- {
- print "\nERROR, file $pdbfile does not exist\n";
- $rc = -1;
- }
- }
-
- if (! -f "$xmlorigdir/$output.$extension")
- {
- print "\nERROR, file $xmlorigdir/$output.$extension does not exist\n";
- $rc = -1;
- }
- if (! -d "$xmldir")
- {
- print "\nERROR, directory $xmlorigdir does not exist\n";
- $rc = -1;
- }
- if (! -d "$xmlorigdir")
- {
- print "\nERROR, directory $xmldir does not exist\n";
- $rc = -1;
- }
-
- if ($rc != -1)
- {
- if ($merge_opt == 1)
- {
- print "Copying <$xmlorigdir/$output.$extension> to <$xmldir>\n";
- `cp $xmlorigdir/$output.$extension $xmldir/`;
-
- my $check_stamp = (stat("$xmldir/$output.$extension"))[9];
-
- &start_rd($convert_from, $extension, $pdbfile,
- "$xmldir/$output.$extension");
-
-
- # No need to move the file to the $xmldir since the merge
- # argument specifies the output file.
-
- my $check_stamp_update = (stat("$xmldir/$output.$extension"))[9];
- if ($check_stamp eq $check_stamp_update)
- {
- print "\nERROR, Problem while merging <$xmldir/$output.$extension>\n";
- `mv $xmldir/$output.$extension $xmldir/$output.$extension.err`;
- }
- }
- else
- {
- &start_rd($convert_from, $extension, $pdbfile, "");
-
- print "Moving $output.$extension to $xmldir\n";
- `mv $output.$extension $xmldir`;
- `chmod 666 $xmldir/$output.$extension`;
- }
- }
-
- &leave_func("convert_to_xml");
-
- return $rc;
-}
-
-# start_rd
-# from - format to convert from
-# to - format to convert to
-# file - file to convert
-# merge - merge filename ("" indicates convert-only with no merge)
-#
-# converts file from/to the specified formats.
-#
-sub start_rd
-{
- my $from = $_[0];
- my $to = $_[1];
- my $file = $_[2];
- my $merge = $_[3];
-
- print "\nConverting from $from to $to.\n";
- if ($global_debug)
- {
- &print_debug ("rd command is:\n");
- }
-
- if ($merge eq "")
- {
- &print_debug (" $em_script_home/rd -from $from -to $to $file\n");
- print "\nConverting from $from to $to with no merge.\n";
- `$em_script_home/rd -from $from -to $to $file`;
- }
- else
- {
- &print_debug (" $em_script_home/rd -from $from -to $to -merge $merge $file\n");
- print "\nConverting from $from to $to with merge.\n";
- `$em_script_home/rd -from $from -to $to -merge $merge $file`;
- }
-
- print "Done converting.\n\n";
-}
-
-#
-# POSE INTERACTION FUNCTIONS
-#
-
-# open_connection
-# display_debug - debug will be displayed if not 0
-#
-# Opens the connection to pose.
-#
-sub open_connection
-{
- my $display_debug = $_[0];
- my $rc;
-
- EmRPC::OpenConnection(6415, "localhost");
-
- if ($display_debug && $global_debug)
- {
- print "\nPose Connection Opened\n";
- }
-}
-
-# close_connection
-# display_debug - debug will be displayed if not 0
-#
-# Closes the connection to pose.
-#
-sub close_connection
-{
- my $display_debug = $_[0];
-
- EmRPC::CloseConnection();
-
- if ($display_debug && $global_debug)
- {
- print "\nPose Connection Closed\n";
- }
-}
-
-# start_pose
-# pose_exe - name of pose executable.
-# apps_load - The PRC files to load into pose, can be a comma
-# separated list.
-# run_prog - Program to run at startup.
-# timeout - Timeout value to use when starting pose.
-#
-# Starts the Palm OS Emulator, loads PRC files, and starts
-# a program.
-#
-sub start_pose
-{
- my $pose_exe = $_[0];
- my $sessionfile = $ENV{'EM_SESSION_FILE'};
- my $romfile = $ENV{'EM_ROM_FILE'};
- my $apps_load = $_[1];
- my $run_prog = $_[2];
- my $timeout = $_[3];
- my $stay_in_loop = 1;
- my $address;
- my $title;
- my $form;
- my $label_id;
- my $num_objects;
- my $i;
- my $ii;
- my $rc = 1;
-
- my $pose_cmd = "$pose_exe ";
- $pose_cmd .= " -psf $sessionfile ";
- $pose_cmd .= "-load_apps $apps_load ";
- $pose_cmd .= "-run_app $run_prog";
-
-# It is more effective to use the -psf argument to
-# set these values.
-#
-# $pose_cmd .= -rom $romfile ";
-# $pose_cmd .= "-ram_size 8192 ";
-# $pose_cmd .= "-device PalmVx ";
-
- &enter_func("start_pose");
-
- if ($global_debug)
- {
- &print_debug("\n");
- &print_debug("pose command is:\n");
- &print_debug(" $pose_cmd\n");
- }
-
- print "\nLaunching pose...\n";
- system ("$pose_cmd &");
-
- # Give time for pose to get started...
- #
- for ($i=0; $i < $timeout; $i++)
- {
- $tmp = $i + 1;
- print "$tmp\n";
-
- # Do not use pose_sleep here
- #
- sleep(1);
- }
-
- # Verify pose started successfully, and fail otherwise...
- #
- $rc = &verify_pose(5);
- if ($rc != 0)
- {
- $stay_in_loop = 0;
- }
- else
- {
- # Sleep before opening the connection again, after testing in
- # the verify_pose function.
- #
- pose_sleep(2);
- &open_connection(1);
- print "\nChecking if the appropriate window is on screen...\n";
- }
-
- # Stop looping when the specified window has started.
- #
- for ($i=0; $i < $timeout && $stay_in_loop == 1; $i++)
- {
- $form = FrmGetActiveForm();
- $num_objects = FrmGetNumberOfObjects($form);
-
- for $ii (0..$num_objects - 1)
- {
- my ($object_type) = FrmGetObjectType($form, $ii);
-
- if ("$run_prog" eq "Quickword")
- {
- if ($object_type == frmTitleObj)
- {
- ($address, $title) = FrmGetTitle($form,);
-
- # Display count and title.
- #
- $tmp = $i + 1;
- print "$tmp - title is $title\n";
-
- if ("$title" eq "Quickword")
- {
- $stay_in_loop = 0;
- $rc = 0;
- last;
- }
- }
- }
- elsif ("$run_prog" eq "MiniCalc")
- {
- if ($object_type == frmLabelObj)
- {
- $label_id = FrmGetObjectId ($form, $ii);
- ($address, $label) = FrmGetLabel($form, $label_id);
-
- # Display count and label.
- #
- $tmp = $i + 1;
- print "$tmp - label is $label\n";
- if ("$label" =~ "Solutions In Hand")
- {
- $stay_in_loop = 0;
- $rc = 0;
- last;
- }
- }
- }
- }
-
- # Do not use pose_sleep here
- #
- sleep(1);
- }
-
- # Do not use pose_sleep here
- #
- sleep(1);
-
- &leave_func("start_pose");
- return($rc);
-}
-
-# kill_pose
-#
-# Kills all pose processes
-#
-sub kill_pose
-{
- if ($global_debug)
- {
- print "Stopping pose process...\n";
- }
-
- `pkill pose`;
-}
-
-# verify_pose
-# timeout - timeout to wait for pose
-#
-# Tries to do a connect/close to Pose to see if
-# it is working okay.
-#
-sub verify_pose
-{
- my $timeout = $_[0];
- my $rc = 0;
-
- $rc = system("$em_script_home/verify_sane.pl $timeout");
- return $rc;
-}
-
-# db_export
-# dbname - Name of database to export
-#
-# Exports a palmdb file to /tmp
-#
-sub db_export
-{
- my $dbname = $_[0];
-
- &enter_func("db_export");
- print "\nExporting PDB file <$dbname> from pose\n";
- &pose_tap_pen(22, 20, 2);
- &pose_tap_pen (15, 85, 2);
- &enter_string($dbname, 1);
- &pose_tap_pen (15, 126, 1);
- &enter_string("/tmp/", 1);
- &pose_tap_button("OK", 4);
- &tap_applications(3);
- print "Export of PDB file <$dbname> completed.\n";
- &leave_func("db_export");
-}
-
-#
-# QUICKWORD SPECIFIC
-#
-
-# start_quickword
-#
-# Assuming pose was launched with the -run_app flag to launch
-# QuickWord on startup, this starts up QuickWord with the first
-# file in the list and turns off write-protect.
-#
-sub start_quickword
-{
- &enter_func("start_quickword");
-
- # This will open the first file in the list.
- # Assuming this will always be the case.
- #
- &pose_tap_pen(20, 18, 1);
- &quickword_press_write_protect();
-
- &leave_func("start_quickword");
-}
-
-# quickword_press_write_protect
-#
-# Useful function for pressing the write protect button
-# to allow changes to be made.
-#
-sub quickword_press_write_protect
-{
- &enter_func("quickword_press_write_protect");
-
- my ($form) = FrmGetActiveForm();
- my ($num_objects) = FrmGetNumberOfObjects($form);
-
- for $ii (0..$num_objects - 1)
- {
- my ($object_type) = FrmGetObjectType($form, $ii);
-
- # The write protect button is the only frmGadgetObj
- # on the QuickWord screen.
- #
- if ($object_type == frmGadgetObj)
- {
- my (%bounds) = FrmGetObjectBounds($form, $ii);
-
- if ($global_debug)
- {
- &print_debug(" Found QuickWord WriteProtect button\n");
- &print_debug(" left = $bounds{left}\n");
- &print_debug(" right = $bounds{right}\n");
- &print_debug(" top = $bounds{top}\n");
- &print_debug(" bottom = $bounds{bottom}\n");
- }
-
- # For some reason, the tapping of the write-protect button
- # doesn't work unless you tap somewhere else first.
- #
- &pose_sleep(1);
- &pose_tap_pen($bounds{left} + 2, $bounds{top} + 2, 1);
- last;
- }
- }
-
- &leave_func("quickword_press_write_protect");
-}
-
-# quickword_find_replace
-# from_string - string to replace
-# to_string - string to replace with
-#
-# Uses QuickWord's find/replace utility to replace
-# one string with another.
-#
-sub quickword_find_replace
-{
- my $from_string = $_[0];
- my $to_string = $_[1];
-
- &enter_func("quickword_find_replace");
-
- # Move cursor to beginning...
- #
- &quickword_tap_at_top(1);
-
- # Move to "Find" field:
- # Triple-click to highlight all the text in the field,
- # so it is removed when the string is entered...
- #
- &pose_tap_button("Find", 2);
- &pose_tap_pen(50, 100, 0);
- &pose_tap_pen(50, 100, 0);
- &pose_tap_pen(50, 100, 1);
-
- # sleep for 2 seconds to avoid double click after moving
- # to replace field
- #
- &enter_string("$from_string", 2);
-
- # Move to "Replace" field:
- # Triple-click to highlight all the text in the field,
- # so it is removed when the string is entered...
- #
- &pose_tap_pen(50, 120, 0);
- &pose_tap_pen(50, 120, 0);
- &pose_tap_pen(50, 120, 1);
- &enter_string("$to_string", 1);
-
- # Do find, then replace...
- #
- &pose_tap_button("Find", 1);
- &pose_tap_button("Replace", 1);
- &pose_tap_button("Cancel", 1);
-
- &leave_func("quickword_find_replace");
-}
-
-# quickword_tap_at_top
-# secs - seconds to sleep after the tap
-#
-# Tap's at the top of the QuickWord document.
-#
-sub quickword_tap_at_top
-{
- my $secs = $_[0];
-
- &enter_func("quickword_tap_at_top");
-
- # Sleep for a second to avoid any double-clicks
- # from happening.
- #
- &pose_sleep(1);
-
- &pose_tap_pen(0, 15, $secs);
- &leave_func("quickword_tap_at_top");
-}
-
-# Saves file and returns to the Application list.
-#
-sub close_quickword
-{
- &enter_func("close_quickword");
-
- &pose_tap_button("Done", 2);
- &tap_applications(2);
-
- &leave_func("close_quickword");
-}
-
-#
-# MINICALC SPECIFIC
-#
-
-# start_minicalc
-#
-# Assuming pose was launched with the -run_app flag to launch
-# Minicalc on startup, this starts up Minicalc with the first
-# file in the list.
-#
-sub start_minicalc
-{
- &enter_func("start_minicalc");
- &pose_tap_button("OK", 1);
-
- # For now just tap on the first spreadsheet. Add support
- # for multiple sheets later.
- #
- &pose_tap_pen(10, 40, 5);
-
- &leave_func("start_minicalc");
-}
-
-# close_minicalc
-#
-# Returns to the Application list (no need to save).
-#
-sub close_minicalc
-{
- &enter_func("close_minicalc");
- &tap_applications(3);
- &leave_func("close_minicalc");
-}
-
-# minicalc_enter_cell
-# row - row to enter value, starting with 1
-# col - column to enter value, starting with 1
-# val - value to enter
-#
-# Only valid for minicalc.
-#
-# This only works if the val passed in has a '\n' at the
-# end.
-#
-sub minicalc_enter_cell
-{
- my $row = $_[0];
- my $col = $_[1];
- my $val = $_[2];
- my $i;
- my $j;
-
- &enter_func("minicalc_enter_cell");
-
- if ($global_debug)
- {
- &print_debug (" tapping to cell row=<$row> col=<$col>\n");
- }
-
- # Tap pen on home button to start with row=1, col=A
- # at top left.
- #
- pose_tap_pen(1, 1, 3);
-
- # Now the cell should be in the top-left corner,
- # so click there. However we must first click
- # in another cell or pose doesn't acknowledge the
- # click.
- #
- # pose_tap_pen(120, 95, 1);
- # pose_tap_pen(21, 9, 1);
-
- # Click the down button once for each row.
- # Must pause 3 seconds each time, otherwise MiniCalc
- # will not keep up.
- #
- for ($i=0; $i < $row; $i++)
- {
- if ($global_debug)
- {
- &print_debug (" Typing carrage return to go down\n");
- }
- enter_string("\n", 1);
- }
-
- # Click the right button once for each col.
- # Must pause 3 seconds each time, otherwise MiniCalc
- # will not keep up.
- #
- for ($i=0; $i < $col; $i++)
- {
- if ($global_debug)
- {
- &print_debug (" Typing tab to go right\n");
- }
-
- enter_string("\t", 1);
- }
-
- # enter string
- #
- &enter_string($val, 1);
-
- &leave_func("minicalc_enter_cell");
-}
-
-#
-# GENERIC UTILIIES (pose)
-#
-
-# tap_applications
-# secs - seconds to sleep after the tap
-#
-# taps pen on the Applications button.
-#
-sub tap_applications
-{
- my $secs = $_[0];
-
- &enter_func("tap_applications");
-
- &pose_tap_pen(15, 170, 1);
- &pose_tap_pen(155, 10, 1);
- &pose_tap_pen(155, 10, $secs);
-
- &leave_func("tap_applications");
-}
-
-# enter_string_at_location
-# x - x-location to enter string
-# y - y-location to enter string
-# in_string - string to enter
-# application - appliation (QUICKWORD or MINICALC)
-#
-# Enters a string at the specified x,y position.
-#
-sub enter_string_at_location
-{
- my $x_val = $_[0];
- my $y_val = $_[1];
- my $in_string = $_[2];
- my $application = $_[3];
- my $x;
- my $y;
-
- &enter_func("enter_string_at_location");
-
- $x = $x_val;
- $y = $y_val;
-
- if ($application eq "QUICKWORD")
- {
- # Allow users to specify TOP/BOTTOM/LEFT/RIGHT
- # for QuickWord.
- #
- if ($y_val eq "TOP")
- {
- if ($global_debug)
- {
- &print_debug(" Converting TOP to 15\n");
- }
-
- $y = 15;
- }
- if ($y_val eq "BOTTOM")
- {
- if ($global_debug)
- {
- &print_debug(" Converting BOTTOM to 144\n");
- }
-
- $y = 144;
- }
- if ($x_val eq "LEFT")
- {
- if ($global_debug)
- {
- &print_debug(" Converting LEFT to 0\n");
- }
-
- $x = 0;
- }
- if ($x_val eq "RIGHT")
- {
- if ($global_debug)
- {
- &print_debug(" Converting RIGHT to 152\n");
- }
-
- $x = 152;
- }
- }
-
- # Just to make sure the offset isn't outside the
- # proper area.
- #
- if ($x >= 100)
- {
- $offset = -2;
- }
- else
- {
- $offset = 2;
- }
-
- &off_tap_pen($x, $y, $offset);
- &enter_string($in_string, 1);
-
- &leave_func("enter_string_at_location");
-}
-
-# off_tap_pen
-# x - x-location to tap
-# y - y-location to tap
-# offset - x-offset to use for first tap.
-#
-# For some reason, pose does not register a single
-# pen tap if the last single pen tap was also
-# at the same x,y coordinate (even if the last tap
-# was a while ago). So this function does two
-# slightly different pen taps to ensure then pen
-# tap happens.
-#
-sub off_tap_pen
-{
- my $x = $_[0];
- my $y = $_[1];
- my $offset = $_[2];
-
- &enter_func("off_tap_pen");
-
- # sleep for 2 seconds to avoid double-click.
- #
- &pose_tap_pen_hard($x + $offset, $y, 2);
- &pose_tap_pen_hard($x, $y, 1);
-
- &leave_func("off_tap_pen");
-}
-
-# enter_string
-# in_string - string to enter
-# secs - seconds to sleep after entering the string
-#
-# Enters a string
-#
-sub enter_string
-{
- my $in_string = $_[0];
- my $secs = $_[1];
- my $j;
-
- &enter_func("enter_string");
-
- if ($global_debug)
- {
- # Display in_string so \n and \t values
- # show up as normal ASCII.
- #
- if ($in_string eq "\n")
- {
- &print_debug(" Entering string : <\\n>\n");
- }
- elsif ($in_string eq "\t")
- {
- &print_debug(" Entering string : <\\t>\n");
- }
- else
- {
- &print_debug(" Entering string : <$in_string>\n");
- }
- }
-
- # Replace "\n" with real carrage returns.
- #
- my $string_val = $in_string;
- $string_val =~ s#\\n#\n#g;
-
- # Replace "\t" with a real tab.
- #
- $string_val =~ s#\\t#\t#g;
-
- # Convert string to ASCII numeric values
- #
- my @array = unpack("C*", $string_val);
-
- # Enter string one key at a time.
- #
- for ($j=0; $j <= $#array; $j++)
- {
- $queue_size = EnterKey($array[$j], 0, 0);
- }
-
- if ($secs > 0)
- {
- pose_sleep($secs);
- }
-
- &leave_func("enter_string");
-}
-
-#
-# GENERIC UTILIIES (non pose)
-#
-
-# get_date_string
-#
-# Returns a timestampe string in yyyymmddHHMM format, where:
-# yyyy = year
-# mm = month
-# dd = day
-# HH = hour
-# MM = minute
-#
-# This sort of datestamp is used to create the output directory
-# names, so it used in various places.
-#
-sub get_date_string
-{
- my $cur_secs = time;
- my @lu = localtime $cur_secs;
- my $lu_secs = $lu[1];
- my $lu_hours = $lu[2];
- my $lu_day = $lu[3];
- my $lu_mon = $lu[4] + 1;
- my $lu_year = $lu[5] + 1900;
- my $lu_str = $lu_year;
-
- if ($lu_mon < 10)
- {
- $lu_str .= "0";
- }
- $lu_str .= $lu_mon;
-
- if ($lu_day < 10)
- {
- $lu_str .= "0";
- }
- $lu_str .= $lu_day;
-
- if ($lu_hours < 10)
- {
- $lu_str .= "0";
- }
- $lu_str .= $lu_hours;
-
- if ($lu_secs < 10)
- {
- $lu_str .= "0";
- }
- $lu_str .= $lu_secs;
-
- return $lu_str;
-}
-
-#
-# DEBUG FUNCTIONS - Wrapper functions
-#
-
-# pose_tap_pen
-# x - x-position of pen tap
-# y - y-position of pen tap
-# secs - seconds to sleep after the tap
-#
-# Taps pen at specified position and displays debug info
-#
-sub pose_tap_pen
-{
- my $x = $_[0];
- my $y = $_[1];
- my $secs = $_[2];
-
- if ($global_debug)
- {
- &print_debug(" Tapping pen at : $x,$y\n");
- }
-
- TapPen($x, $y);
-
- if ($secs > 0)
- {
- pose_sleep($secs);
- }
-}
-
-# pose_tap_pen_hard
-# x - x-position of pen tap
-# y - y-position of pen tap
-# secs - seconds to sleep after the tap
-#
-# Taps pen at specified position and displays debug info
-# This function works more effectively in situations where
-# pose_tap_pen is flakey. This function is not good for
-# double/triple click situations since it is slow.
-#
-sub pose_tap_pen_hard
-{
- my $x = $_[0];
- my $y = $_[1];
- my $secs = $_[2];
-
- if ($global_debug)
- {
- &print_debug(" Tapping pen hard at : $x,$y\n");
- }
-
- `$qa_script_home/tappen.pl $x $y`;
-
- if ($secs > 0)
- {
- pose_sleep($secs);
- }
-}
-
-# pose_tap_button
-# button - button to press
-# secs - seconds to sleep after the button press
-#
-# Presses specified button and displays debug info
-#
-sub pose_tap_button
-{
- my $button = $_[0];
- my $secs = $_[1];
-
- if ($global_debug)
- {
- &print_debug(" Tapping button : $button\n");
- }
-
- TapButton($button);
-
- if ($secs > 0)
- {
- pose_sleep($secs);
- }
-}
-
-# pose_sleep
-# secs - seconds to sleep
-#
-# Sleeps the specified amount of time and displays debug info
-#
-sub pose_sleep
-{
- my $secs = $_[0];
-
- if ($global_debug)
- {
- &print_debug(" Sleeping : $secs seconds\n");
- }
-
- sleep($secs);
-}
-
-# enter_func
-# func - function name
-#
-# Displays debug info about entering specified function.
-#
-sub enter_func
-{
- my $func = $_[0];
-
- if ($global_debug)
- {
- &print_debug("Function enter : $func\n");
- }
-}
-
-# leave_func
-# func - function name
-#
-# Displays debug info about leaving specified function.
-#
-sub leave_func
-{
- my $func = $_[0];
-
- if ($global_debug)
- {
- &print_debug("Function exit : $func\n");
- }
-}
-
-# print_debug
-# string - string to print
-#
-# Displays debug message with a # at the beginning of the line.
-#
-sub print_debug
-{
- my $string = $_[0];
-
- print "# $string";
-}
-
-1;
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/palm-session/session b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/palm-session/session
deleted file mode 100644
index 900c4981cc0c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/palm-session/session
+++ /dev/null
@@ -1,8 +0,0 @@
-DStrǣ{07l;;l=8+fDݼr#.+GWz8c`6E<Wn8|O۟Wn>'/Wƒsߗ17w=sx:w{;"=Ύnm[ψ?|s"瞏ёW0;zQ yk#[WjXcʫ_tM=yD,Ϋ_|XDԳC]/:_uLnS{rS+_r{>W,{RkDLZW<7.wEy嫯+_{11kϫIJ,Z_y;-c|KߓWۼog:0D_ϫg]2>'}W^}~yߏ|W.ϫϛW(#ΏϿ9y7GziOEvi7c.ɫO߻(bڅ";6a}~ᕹ{G#b{m5ܽ㌈N;_3!ϫGQ:"f?&܈/7w5m>7Nݲ 5?h?8/ak^}{Ŕwռs#Ϋůc>vD^hQX'b<Ozr}^bڲ1|W^M1ɉUk>~n^sI{^WE&bAi_y}y"=80Ưϫ_&lmMyyMfb-w FGL8!y7#7|߾$WΈ)yXkwkwD^ssL_}XDo3eH_ܴofMy2]"އyyͪ1QO5߿!Fb֘Q wGoE=">qƾcsMGDi=1QϺGmBErc#ssW[!w gDomLDӥ 2gQ}".ݿz~Q-1b?;fXLݿ$wT?^yцM^lq^uWE|}nSyF[ ^m~敯z^ ys۞=_{bs<}={N6={>Й{</7b]9sHrg=z*|ONx_c:57NLe{XW,;w2+[sWF=]cy͡Kwy;?sn~shGpI95Kzq]箿f9S ?畗^㟚qQD͟W^eq8sGĝyg"ll׼7啟?w͏kSW<<+'Fyq^Ċr_iևs[瞣b"V䞣WUޜW;$31aĵɫVMϫy.]W>=GokzW^;mkǜn6n qiʈǵȺμzۇZ~k_+*-oe׼rqKhٵyiNYq=8o~s9ڤ;r|jn{Ǎmo}:uy_Gyͭkb]Qsծ߅,]omx"?U<n}MMWKuJl#:hΫGۻ]y̫>_<6yͫcıʣ8{NqL-6>vTa+ckXh{<p^`XyW^؟#<aLD+|ψ~źv{|1qh\߭kb9~眧>\ ?9N{$vk^5-">W]7U}sU_f^uyϋϫ`^ݗDܝq|wnʫ0;ʫ~ouQ="zf5cy͓qp)ѹGEOcgͫUqc^˱q8wwOxRZl5|Er޹kGUqsy;&ܽuqm[Źm|\=6,f9;ڱD;hCzJ~W#;/8;Wnl?Lݏqvws>~^͹҆G{j>MiC w#fD9wwE~nXuOoݫsɥy'Gs'8#ⱼuFV}}?*w]*=F[}hh?՟{>mer?qts_(wqlr'&䞏=w5.k:,-5_qyY{b,>|,|&8^8c5)˝ )ڼuħ#fǺ~/GtYD쏝M:ߓm+&_}3߹oNi?L[2ߎ)狦F̊8#"1L&41όXΔv71<&xDO&wL}^1"D7#N8-gE]OD|*#>qEė"%_#oGtEXD㈟F<WF&шE>%b-#&b#^"^WE:uo8 Fֈ#s"EqJ{#N8-gE]OD|*#>qEė"%_#oGtEXD㈟F<WF&шE>%b-#&b#^"^WE:uo8 Fֈ#s"EqJ{#N8-gE]OD|*#>qEė"%_#oGtEXD㈟F<WF&шE>q(DleDlcċci|N-7"g9JiH՟yN]EĢN8ZɝF}Q}nX!w <Wm\E2{븒~vyuy?ŝ+5>{F̈8&"^G=#g,=۟{^g7\+Xe[>2kQ,2|^U8k({W_=_uOY9!^{n_{r]3rϏcY{.=.br7[;&{xO#wdk؈x4rJā'F|>ifFqFWF\q[OF?{:zSD\neicIQ~k"ʽ[OF|7➈X3rQǶ79ܻG<{.0(⒈/Gܙ{1=kx:EQNjnνGr7F<'N,z䨈oFϽ'"yG<{_oܻkcHu]mjĢXʽsOiEܖ{L}Yb&D\{/"٫|7ΈH{mԿŹ |cY_io230: Y0{H,áȽo7e#rX˽ouwvļG:̋uOe<礨~ν?~Q]/;/^kD,Wy퐈{ro쳽_Ͻν/ν߈_Dv1oo۷̽7ܘ{o<8";ޮs〉vn?azA9qU:Zo£f[өmbzuѕ:.3Kj9cOǤ8,y##>WZ`גb~26qMs!_J[)Rk][lӏe]ʫRg^fqZ/j_nfB^8bu3jn7731wd=~/ok_Ů/F[G;˷]&'rUֿE e0jKhw~zm_}QNy~~'#Xڕ3q3ywcnzG^"I`<_{ym<]_{w [k_UymN8?G\qCĚ'5"wD̏x8xy{,;Ew2T^]"kkXX8[:ZA|>~jxj7I4aBHO]
- v*<w}b4UU4%TܨMkLo;.ԁwoF><S=_q} )嵗U^b|*v=*'=oS>(Krʗ^otgܰFSEx?:S7}rwy1S{Wv&9<[}mxgN/`U{"Wc7os9ΟKocIFM_}ZrLDϭۧ[y<^ZI=ps~٭.hPҫr(Ǔj|F?ZQq k%tU9AxWVtJK#H<K+LG\^i;DT]䍣;~I TIˎ[ȒNY8EsO[[O3OftCsczU%ߚ/\|ʜK2;OX|f1osGKH{evꮗy_r?ՔF bzUfDr?[tf_sh 7s#O\xAnFexfzrGoz67Gz<lvfmv^j;վUj{sMqòq}KUoXؾ~3To\w6p~jm9"r"~4;ow|dV|EF;aDĤio8.bQDG%+"n3|m{ĚxgIJ#={qs'Fܔ':…+w\yeW\˺s,i5;jz.(vv &/<yiƆ'Hٴ 1oٛIvLꟶAמui5vƔ-Ǥuq\ &&Iw6,%[[?垛7Lk;妏n6bĘt6rLˇF %1ll瑟}| 6Zrshps>4r]3%;Jk7u O/;kU_}Qvp);kryc4~ sv-<J뿬Ysݲsvv({`ڢZ'^tk__>tYs<_Vi\L;~U7vg}6rteuߜx|}SEKu8V\nsގg 6_Qґw3T㷨F\꜡36sVOuNliWEڧ;35ǯ*]3uxڵZ䡴:O`k'@aF_,Ohs?/z}d׋p}C΍`fmg#HumǡωpiP}3gƤQ'xL3',4ge7LƝWj}۹4TѪUۨ F7㦯+#]U6q̈́8j'9QU斏VovvuUaZEmq}8orIa<~^n7oiG [Կ1<m݌H3|}U;1Mk&DBՒn<`n+#;[]%Ȇicviҧyf֖mw9Mb屷ֻe| 3/a(muQ%3/_>6fy>^L'@nl})G̏9qgfWڳ?w~ߒ/^ԸSTտ+j&=[gߍ~ҥ uGmq>?ԥK.l>ؠlyq~O='[s{}~3clIϫ_>l0gL1ŧ,ͷV 2\<f+ƿ1ory<_4rq؜S'%ruD 虜ֿ(WC5ԴCCLyr+}_k_G?}Ɩ?"05.Z"2o~:rL*[GowW-G\MF/ o?3;l#\\i=؞d)-g5ee~KN<>ߔ'f1#.qϖgwǏϟ2!noZf͙J[l)îs˵gu<c
-oh\9e>_|VhG87GD\tQյgux/ 2uwnΪ_L3؉1\~.SߵM_U Ѫ{t}uawA/Uwʜ;ʧ,'=ʾձiNe}ƤY|Whtѻ|S4s{M:kg+k~L;YK7_EϜ6;M>ϙL#Ҟgjig_ckD׹c8ןp+at%s7onu,[5_</U^FUcux5Tڷsbe5便U3V%kYiOonBoCھw/ʷߍUo?8;o9#T9srUZ%9#PxC ˹gkޚ v޽_9'jn{OP>ֺY۹ZTޯ{Gk_w<RzuRʶ}R=C)K8o9'0gҝF'=⹑s#G͍G9xVN];2/͛:&8Q3Ũ87mvZ5ƽsJ7>Ɠgtp|)9g]tvlE\X3QiEþgcКFO7<%KRa_9%ه4?xGmrQ=r߲ }lǴs+ɩ<a(MXj)ʑG%X)-YOH=PoMZza5 FN{omUM[^V1TPl<K#rRPii-[/5S.9݋t)efMoQe_Kjj}oj?ЙqL4V-i-v=VL~mKN9aqcgyq>,kҢ6={<z?_+#ƿ=u};717kbԚEZG[Q5Ncҫ^{KEMJ6>[O=7s<oH`hVD3XOZAA OȡmxZ:9ß7}+ЃE0:i"ȥq;NZ~¹I~tQ'-?81t꒥ OisXkOh|myOȳ{;|)Wts[D3{ʿZPЉmn,Ԝo|=rWQiYKwf_J]SȧS ⟸j6rcg:G~(bU#9rݑ#Y{62Е3=j3< ,@YqU_bEG ZGWM+VVU:V=d}+/׮~xx_7elտ~r-W|9wGEuŊ[+K=iŊ/ʄjrQq(75ۦ׻fJN1b1}#loela7[Cc0eQa#Z饂 2l8}6>a^ӛbI Lodh:l:0eĈXa斫PF TopUk&n8}Ҙ,P]> MƤPJ񰸾RO*+,8q,W.g0S_\mzCĎ]b9鱗1Qp+#a;S@gDB)3z8{o]1851ݶcc`d/kSbNѵſ6=ꙇX;MpxÛivzS;Zu}i3H/mONNџ.}ԹWDo F{e׍3idU',}j>u֫;;!w:; DOrNHk36u :Gu\F-/+R5[ǥkiN|ΎZ4UiRJxS}eղjvڮwmL,;;%U V;;V{`rd+;J#VTzr5- [MJVK%fRZMWVUќPjfQ
-Vd,R{=YTJ;4KjTk[O;8e"
-%25JV bݼJJzV%7H,UK9<gUMmtu,k#LW]8FmĤ8oZ2ڈbO)mVn
-gsb4mJct۔zWF՚YWڈ$E7Eb<c/8T786l~kXߑ#MwtƘEiѫ&h~?ybi]ui*5фicD>Z-t늯DҊ35^?/ų|j?uhMv\jWOv\:NkuP[sitgz |2EP̫2Mۆ4خ]l0=~0q`=Uɥr6Ҫ#Jb3-_T)eߊ+H/K<#j.UU1EKzUsIUBu(G#9ZLj9y*uVbYj&h#Zeպ 8W :YQFHR[+ۨJ趎|X;0q]V\u񨳯Í<qnl^+esgqqO:oUqs~5pgU )]uo+cPf)ߔ2X6,WY4F|-5m7-Zo Q8ڊ7.[4oAQQUFV<[VĹ\{<ڊh+vKg;M+.K}[:5=peSJ39} m7ӗv3صĦmXI+ʯAW|elGi+jˣ*ڊZCqԏ(]__G|NώqcWGѾgcEIFMK*㢭fS1kƕO=綢UYj/r@6Kj~6#/pCy5 H-78n<"Pr=\^Ѩ[1Z嬒c~?272VU p%5Wj7]qEI-6iXZ䒯jD1LmUFJ[֯(UUjTHmєoۊq'^o+FMOЮO/Fh/|Z??N=9.7j6mU_:58K?+(K_ڍ~cz3_ׯvU$)߲Hc?̔g<:ae#:ad\'Fv>bu7y|\_n- &,Ѥ>1ur^YRGڎLUbZZgA6gxӸNY{\'Lg!PN\_'4fR0nHrA?SR6)OZ5ɟב⺹0YC'_Rfӛ#j'| ;+2 e"N .EWVqW3j5jcQ_aVjUZI,ǫj:^UG :FuqFu*1qБRĞ(~4;\' ƣJ$ZAF6N6mp]1fԶgk?j+ogGri+b}֜U}Y<b}}io؞tZ4?ݺԷz]R{֥G/^qZı;mXIW?{oW31ӧk:k71u\]g_5cŵ7i9)R|z(:MC1UjϬ⳱ז+]rY8}҆ľ\W](F[QViPVӰZ{EWLIWTY:KZ3`jIqJZoVܼOH7F5j5θo,RPjuVs*Q-Ha͌\ʹV ]ڊ?40g͸ҷG\,Y=ز\q=SGc:R.ŚoRy_ʍvP=]]]*ju47aXۢ+e(l 44XOSnS+3ms[N{v|"DC!et'<^7XOL; =x̌4qߞ&^:9Mkםui:aĘlx9cn:lDk:cј4m4}Ѻs?bd+=s.Qm]˱ǐ-CƫđP4ƫ[=Q[ձUq!ѷwG3//ɓV:Lꌩc&]wJ}}1Sqɱ"Sa_>\YM6R-aۺGzgԓ^mFz3O~5Db9eԷiꁁH}{FzYm01/*ou6[F%g _ [SJ{3X܁s˄f_? ηlL.>ebՍzPtbB#>@YFROoHݠՈ0fj{0IYKW}G^}dвP|6e\YҕiWKoWn|^qhU TCLg0sheofayJFm̉iqY2yE,m̑?uF.k6؝Xlq6@ix2?~&<⬴mcKoxIUO<G]ʗzRq <U.(-/kiŊiяի+˃%՝яl7k;|_;6Wu>uѿV|/^kf3L5 ο<1$W˽ӦmQul Yl7UT JiՎSM٠D9l3&%J7R/YR/3FQ(j+S魪88=>SGQG%S}JYRyuq[F0ZfKmQPWobN/+7^AԛN Sr)uIOٰTI2|R}BL5H2mgӸnƽg|+l֭/)UmUi#{uysEl1Kcwa=4%K.MK.-6E^P
-F?:Z|u-<;_Tog.w&jg,3uqy =L;Q{T=ߘ+m:imUO;Eqľ4qhog}gh֫Z{/ofbyI%g:F{L4 e^(-ɾYWvFw])ZdåHѰԒ<Ze-yKFjޤO}nk1lkQ-p!$W܍ԺYmJ[Ko5@GGǍutr]vRnYinO/ڂj×]JuX>XJ-C 5gR%W<?_-/!  B<vL;1~dD;QKuii+oH9->6M>2J=_8clZ~lz}xZ93U_t)V_RdUL;֫q<?c-">>ק11\_e(1)rR Ա">G~E{tKg}.qؿ?6,mjU]sٯ˜S<j&V%ypB\O'7&l\}r=wY_aU[,K2*}F;(0|.Qp ҇/Y̪S^P]O'W*i0ԅJzc#ws ]Rռ9,=yff۾4Ώqٌ:訾ZۚK}P#SG#^>9-_{ggUژn;;5/nYr[VY :aq,H1TDyєFWKoiOʯoOt$u3*]|l=o2kL ?Uq:҄=kv{ˮx~_A ҲYҴȿĸ;^e>'GJa_w}%HH<jWZlgmZz(]|5ڭҞo־(pumr9WkIlʓqTT/ƟoJ|#̇"!g'e@Cg8ьH5j;HB$H#z껜siD"&$ǛF#Fok.)9ګzz/1U1(ZՒ\N|#RUEJԶwHhTRRu4 ShE'V+RKd\d}K%ua" O+Fm@<Ӎu߼٨(׬13},ÏH::#fF/bJy}v9ّv?$PxW/Q 596"ߚv=1On|tD#%74eJpo#D/ꮖsI% !\F)Ϥhe.8gZŋlŲ,mMs\7\u.:̳98My{ޞՙS* Gvܷo&d+# #{ϣ=3bs"u6;ÖE9xʙ?==3ކRhzUW~, u:^qILN8sR:̝tx槝眹8[)=p׿iMwlzۜ}f(tg.K\v\J9KRcIGĜ}iq'?i鍇.xOʱ᯶M~qX.~na<3&%ʖ߁Qs-YxG,]F?p1b74V</JלS~1|СG6SYv=7qz_UR3W,*߬<mo9Z>k֬j>.g[GV>mEb}Ӫkmx ]F;5Q0IJK1v%e<=f(k+7_=YRѲqruXY}6lݣ/h!讀7Y~=Uu,fb7yk[Oڌ*{b/#[_҄/: :蕇Y0yƤߑ?*?+[Ҟ?*<|\*{έ֣||G3gZVFkHy>Y=s鷟[ɓ+YޙSǦe"~%o>y|v| g*> 9t[3_k{ox㸮wMGѺ?=Zo2bfƉ=/{/{ˣm}e7Dyяw>[ѱ֚^6Xx֜^lPaW"ifu35C
-bh:GW=sG/8iY/|I 6lǫܦsgdGoЛpH3]%GpdsKzɴ%M:?x)5Fu[5 կcjoc9|Wp?Mj%@ @ @ 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0` 0`LشY B m˼'7گɭ#p43ъoFܑF`Nid|eXQ O#z6E'-VlmZWiɝ8;NFOЛNo#k[<~  @ @ @@UIAppShell" r \ No newline at end of file
diff --git a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/test_spec/convertor_test_spec.html b/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/test_spec/convertor_test_spec.html
deleted file mode 100644
index 5b77f3263654..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/palm/palmtests/qa/test_spec/convertor_test_spec.html
+++ /dev/null
@@ -1,2274 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<HTML>
-<HEAD>
- <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">
- <TITLE></TITLE>
- <META NAME="GENERATOR" CONTENT="StarOffice 6.0 (Solaris Sparc)">
- <META NAME="AUTHOR" CONTENT="dermot mccluskey">
- <META NAME="CREATED" CONTENT="20011001;14124200">
- <META NAME="CHANGED" CONTENT="20020103;15592900">
- <STYLE>
- <!--
- P.text-body-indent { margin-left: 0.5cm }
- -->
- </STYLE>
-</HEAD>
-<BODY>
-<H1 ALIGN=CENTER>Xmerge Test Spec</H1>
-<H2>1.0 Intorduction</H2>
-<BLOCKQUOTE>This document outlines the tests to be performed on
-Xmerge, the XML-to-PDB converter for the SunONE Webtop.</BLOCKQUOTE>
-<H2>1.1 Authors</H2>
-<UL>
- <LI><P STYLE="margin-bottom: 0cm">Dermot McCluskey
- (dermot.mccluskey@sun.com)
- </P>
- <LI><P>Keelin Boyle (keelin.boyle@sun.com)
- </P>
-</UL>
-<H2>1.2 Project/Product Identifier</H2>
-<BLOCKQUOTE>XMerge</BLOCKQUOTE>
-<H2>1.3 Reision History</H2>
-<P STYLE="margin-bottom: 0cm">&nbsp;
-</P>
-<TABLE COLS=4 WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <TR>
- <TD>
- <P><B>Date</B></P>
- </TD>
- <TD>
- <P><B>Revision</B></P>
- </TD>
- <TD>
- <P><B>Comments</B></P>
- </TD>
- <TD>
- <P><B>Approval</B></P>
- </TD>
- </TR>
- <TR>
- <TD>
- <P>28-Sep-2001</P>
- </TD>
- <TD>
- <P>0.3</P>
- </TD>
- <TD>
- <P>Draft 3.</P>
- </TD>
- <TD></TD>
- </TR>
- <TR>
- <TD></TD>
- <TD></TD>
- <TD></TD>
- <TD></TD>
- </TR>
-</TABLE>
-<H2>1.4 Document Customers</H2>
-<UL>
- <LI><P STYLE="margin-bottom: 0cm">XMerge Development team
- </P>
- <LI><P STYLE="margin-bottom: 0cm">Ireland Desktop Test team
- </P>
- <LI><P>SunONE Webtop C-team
- </P>
-</UL>
-<H2>1.5 References</H2>
-<H2>2.0 Requirements &amp; Dependencies</H2>
-<BLOCKQUOTE>Successful automation of the tests outlined in this
-specification is dependent on the stability and reliability of the
-POSE emulator and the EmRPC Perl module that allows test
-automation.&nbsp;&nbsp; There is a risk associated with this in that
-the emulator software may not accurately emulate every aspect of the
-PalmOS and so the automated tests may not discover bugs which occur
-in &quot;real world&quot; scenarios.&nbsp; Also, if the automation
-software we use proves not to be reliable enough to consistently
-return the same test results, then the effort spent creating the test
-automation scripts will not be worthwhile.
-</BLOCKQUOTE>
-<BLOCKQUOTE>Verification of test results will depend on the usability
-of the Java-based Comparator applications, developed by the US&nbsp;Webtop
-QA&nbsp;team, which will be used to compare the output XML and
-PDB&nbsp;files with the expected results.
-</BLOCKQUOTE>
-<BLOCKQUOTE>Many of the tests described in this specification are
-very time consuming and it would not be practical to execute them
-manually on a regular basis.</BLOCKQUOTE>
-<H2>2.1Required Tools &amp; Technologies</H2>
-<UL>
- <LI><P STYLE="margin-bottom: 0cm">PalmOS Emulator (POSE)
- </P>
- <LI><P STYLE="margin-bottom: 0cm">EmRPC Perl module and Test Driver
- harness
- </P>
- <LI><P STYLE="margin-bottom: 0cm">Comparator applications (XML and
- PDB&nbsp;comparison utilities)
- </P>
- <LI><P STYLE="margin-bottom: 0cm">Palm V device ???
- </P>
- <LI><P>StarOffice 6.X.
- </P>
-</UL>
-<H2>2.2 Test Framework Used</H2>
-<BLOCKQUOTE>These tests are to be automated using the POSE emulator
-and the Test Driver developed by the XMerge team, which interacts
-with the EmRPC module and allows test engineers to write test scripts
-to control the conversion of documents and the interaction with the
-POSE emulator.&nbsp; Using this software, it is possible to automate
-the process of loading documents into the appropriate Palm
-application, apply edits to the document within the Palm emulator and
-export the document.</BLOCKQUOTE>
-<H2>3.0 Scope of Work</H2>
-<H2>4.0 Test Strategy</H2>
-<H2>4.1Test Suite Location</H2>
-<H2>4.2 Strategy overview</H2>
-<H2>4.3 Test Cases and Assertions</H2>
-<H2>4.4 Testing Not Performed</H2>
-<UL>
- <LI><P STYLE="margin-bottom: 0cm">Performance Testing
- </P>
- <LI><P>Internationalization (I18N) related testing.
- </P>
-</UL>
-<H2>5.0 Test Cases</H2>
-<BLOCKQUOTE>The test cases are divided into seperate sections for
-each PDB format supported by XMerge, and further divided into
-Convert and Merge tests within each format.&nbsp; The Convert tests
-validate that XMerge can perform the round trip conversion from
-StarOffice XML-based file format to PalmOS PDB format and back to
-StarOffice XML format again, without any loss of content.&nbsp; The
-Merge tests validate that XMerge can merge edits made on the Palm
-device with the original StarOffice XML file, while retaining any
-information in the original document which could not to translated
-into PDB format, eg embedded tables.
-</BLOCKQUOTE>
-<BLOCKQUOTE>Each section is further divided into Content and Style
-tests.&nbsp; The Content tests deal with the ability of XMerge to
-retain all the meaningful content, eg text, after the conversion and
-merging process.&nbsp; The Style tests deal with the ability of
-XMerge to retain the stylistic details, eg bold face; justification;
-line breaks, from the same round-trip conversion.&nbsp; The
-Content-retaining functionality is considered of much higher priority
-than the Style-retaining functionality in version 1.1. <BR>&nbsp;</BLOCKQUOTE>
-<H2>5.1 AportisDoc Tests</H2>
-<H2>5.1.1 AportisDoc Convert Tests</H2>
-<H2>5.1.1.1 AportisDoc Convert Content Tests</H2>
-<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><BR>
- </P>
- </TD>
- <TD>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD>
- <P><BR>
- </P>
- </TD>
- <TD>
- <P><BR>
- </P>
- </TD>
- </TR>
-</TABLE>
-<H2>5.1.1.2 AportisDoc Convert Style Tests</H2>
-<P><BR>&nbsp;
-</P>
-<H2>5.1.2 Aportis Merge Tests</H2>
-<H2>5.1.2.1 AportisDoc Merge Content Tests</H2>
-<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <COL WIDTH=77*>
- <COL WIDTH=179*>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><BR>
- </P>
- </TD>
- <TD WIDTH=70%>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><BR>
- </P>
- </TD>
- <TD WIDTH=70%>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><BR>
- </P>
- </TD>
- <TD WIDTH=70%>
- <P><BR>
- </P>
- </TD>
- </TR>
-</TABLE>
-<H2>5.1.2.2 AportisDoc Merge Style Tests</H2>
-<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <COL WIDTH=72*>
- <COL WIDTH=184*>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/animatedgif</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with an embedded image &#8211;
- straight forward convert and merge</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_animatedgif.sxw</B>.
- </P>
- <P>Convert a_animatedgif.sxw to a_animatedgif.pdb, in AportisDoc
- PDB format. <BR>Start POSE with AportisDoc application and import
- a_animatedgif.pdb. <BR>Export the doc back to a_animatedgif.pdb.
- <BR>Merge a_animatedgif.pdb and the original document to
- a_animatedgif.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <BLOCKQUOTE>This document has a animated gif embedded in it.</BLOCKQUOTE>
- <BLOCKQUOTE>Start of animated gif.</BLOCKQUOTE>
- <BLOCKQUOTE>&lt;Image of spinning globe&gt;</BLOCKQUOTE>
- <BLOCKQUOTE>End of animated gif.
- </BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/bolddoc</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with bold type and varying font &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_bolddoc.sxw</B>.
- </P>
- <P>Convert a_bolddoc.sxw to a_bolddoc.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_bolddoc.pdb. <BR>Export the doc back to a_bolddoc.pdb. <BR>Merge
- a_bolddoc.pdb and the original document to a_bolddoc.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <BLOCKQUOTE><STRONG>This complete line is in <FONT SIZE=6 STYLE="font-size: 22pt">bold</FONT>
- with font set to Times New Roman. The word bold is of size 22,
- while rest of the words are of size 12. </STRONG>
- </BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/bookmarks</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with inserted bookmarks &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_bookmarks.sxw</B>.
- </P>
- <P>Convert a_bookmarks.sxw to a_bookmarks.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_bookmarks.pdb. <BR>Export the doc back to a_bookmarks.pdb.
- <BR>Merge a_bookmarks.pdb and the original document to
- a_bookmarks.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <BLOCKQUOTE>Two paragraphes of text with 2 bookmarks set. To
- identify bookmarks, select Edit -&gt; Navigator and bookmarks,
- user should see BK1 and BK2 and clicking on these labels in the
- navigator popup places the cursor in the position of the original
- bookmark, .i.e.
- </BLOCKQUOTE>
- <BLOCKQUOTE>BK1 = Bookmark|</BLOCKQUOTE>
- <BLOCKQUOTE>BK2 = Silicon
- </BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/bulletorderedlist</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with bulletorderedlist &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_bulletorderedlist.sxw</B>.
- </P>
- <P>Convert a_bulletorderedlist.sxw to a_bulletorderedlist.pdb, in
- AportisDoc PDB format. <BR>Start POSE with AportisDoc application
- and import a_bulletorderedlist.pdb. <BR>Export the doc back to
- a_bulletorderedlist.pdb. <BR>Merge a_bulletorderedlist.pdb and the
- original document to a_bulletorderedlist.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm; font-style: normal">This document is
- an example of a simple bullet ordered list.</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <UL>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 1</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 2</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 3</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Bullet 4</P>
- </UL>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <BLOCKQUOTE STYLE="font-style: normal">End of bullet Ordered list.</BLOCKQUOTE>
- <BLOCKQUOTE><BR>
- </BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/emptydoc</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: empty document &#8211; straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_emptydoc.sxw</B>.
- </P>
- <P>Convert a_emptydoc.sxw to a_emptydoc.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_emptydoc.pdb. <BR>Export the doc back to a_emptydoc.pdb. <BR>Merge
- a_emptydoc.pdb and the original document to a_emptydoc.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <BLOCKQUOTE><STRONG>&lt;empty document&gt;. </STRONG>
- </BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/firstlineindent</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with line indent &#8211; straight
- forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_firstlineindent.sxw</B>.
- </P>
- <P>Convert a_firstlineindent.sxw to a_firstlineindent.pdb, in
- AportisDoc PDB format. <BR>Start POSE with AportisDoc application
- and import a_firstlineindent.pdb. <BR>Export the doc back to
- a_firstlineindent.pdb. <BR>Merge a_firstlineindent.pdb and the
- original document to a_firstlineindent.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <BLOCKQUOTE>This line is using First Line indent style. Now isnt
- that Kool... Also Im running short of words to say here, to wrap
- this particular sentence.</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/fontsize</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with varying font size &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_fontsize.sxw</B>.
- </P>
- <P>Convert a_fontsize.sxw to a_fontsize.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_fontsize.pdb. <BR>Export the doc back to a_fontsize.pdb. <BR>Merge
- a_fontsize.pdb and the original document to a_fontsize.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <BLOCKQUOTE>Text with font size 10, 16, 20, 40, 96.</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/heading</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with heading type style &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_heading.sxw</B>.
- </P>
- <P>Convert a_heading.sxw to a_heading.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_heading.pdb. <BR>Export the doc back to a_heading.pdb. <BR>Merge
- a_heading.pdb and the original document to a_heading.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-top: 0.42cm; page-break-after: avoid"><FONT FACE="Times New Roman, serif"><FONT SIZE=4>This
- piece of text is in Heading paragraph style.</FONT></FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/heading1</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with heading1 type style &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_heading1.sxw</B>.
- </P>
- <P>Convert a_heading1.sxw to a_heading1.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_heading1.pdb. <BR>Export the doc back to a_heading1.pdb. <BR>Merge
- a_heading1.pdb and the original document to a_heading1.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <H1 STYLE="font-weight: medium">This piece of text is in Heading1
- paragraph style</H1>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/heading2</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with heading2 type style &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_heading2.sxw</B>.
- </P>
- <P>Convert a_heading2.sxw to a_heading2.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_heading2.pdb. <BR>Export the doc back to a_heading2.pdb. <BR>Merge
- a_heading2.pdb and the original document to a_heading2.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <H2>This document is set in Heading2 style.</H2>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/hyperlink</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with embedded hyperlink &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_hyperlink.sxw</B>.
- </P>
- <P>Convert a_hyperlink.sxw to a_hyperlink.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_hyperlink.pdb. <BR>Export the doc back to a_hyperlink.pdb.
- <BR>Merge a_hyperlink.pdb and the original document to
- a_hyperlink.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm">This line is bookmarked to BK1
- (Insert-Bookmark)</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm">The line <A HREF="http://sunweb.central/allhome.html">SunWeb
- Home Page</A> has a hyperlink to sunweb.central.</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm">This line is a hyperlink to <A HREF="#BK1">BK1</A>.
- Click here will take cursor to top of page.</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P>&lt;Check hyperlink has the correct address.&gt;</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/justified</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with justified styling &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_justified.sxw</B>.
- </P>
- <P>Convert a_justified.sxw to a_justified.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_justified.pdb. <BR>Export the doc back to a_justified.pdb.
- <BR>Merge a_justified.pdb and the original document to
- a_justified.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Left
- aligned text</FONT></SUP></P>
- <P ALIGN=CENTER STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Centre
- aligned</FONT></SUP></P>
- <P ALIGN=RIGHT STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Right
- aligned </FONT></SUP>
- </P>
- <P ALIGN=JUSTIFY STYLE="font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Justified</FONT></SUP></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/linebreaks</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with linebreaks &#8211; straight
- forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_linebreaks.sxw</B>.
- </P>
- <P>Convert a_linebreaks.sxw to a_linebreaks.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_linebreaks.pdb. <BR>Export the doc back to a_linebreaks.pdb.
- <BR>Merge a_linebreaks.pdb and the original document to
- a_linebreaks.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm">This page has a line breaks inserted
- at end of this line.<BR>When coverted to doc format it should
- accordingly be broken up at the same point.</P>
- <P ALIGN=LEFT STYLE="text-indent: 0.2cm; margin-top: 0.4cm; margin-bottom: 0.41cm">
- A simple list</P>
- <OL>
- <LI><P ALIGN=LEFT>second entry. A line break follows<BR>the above
- line has been broken with a line break</P>
- </OL>
- <P STYLE="font-style: normal"><SUP><FONT SIZE=5 STYLE="font-size: 20pt">Third
- entry</FONT></SUP></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/linespacing</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with varied linespacing &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_linespacing.sxw</B>.
- </P>
- <P>Convert a_linespacing.sxw to a_linespacing.pdb, in AportisDoc
- PDB format. <BR>Start POSE with AportisDoc application and import
- a_linespacing.pdb. <BR>Export the doc back to a_linespacing.pdb.
- <BR>Merge a_linespacing.pdb and the original document to
- a_linespacing.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm"><I>First: This line and thenext line
- is spaced by double-line spacing</I></P>
- <P STYLE="margin-bottom: 0cm"><I>Second: Note the line-distance
- spacing</I></P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm"><B>First: This line and the next
- line is spaced by single-line spacing</B></P>
- <P STYLE="margin-bottom: 0cm"><B>Second: Note the line-distance
- spacing</B></P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm; font-weight: medium">First: This
- line and the next line is spaced by 1.5 line spacing</P>
- <P STYLE="font-weight: medium">Second: Not the line-distance
- spacing.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/numberorderedlist</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with numberorderedlist &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_numberorderedlist.sxw</B>.
- </P>
- <P>Convert a_numberorderedlist.sxw to a_numberorderedlist.pdb, in
- AportisDoc PDB format. <BR>Start POSE with AportisDoc application
- and import a_numberorderedlist.pdb. <BR>Export the doc back to
- a_numberorderedlist.pdb. <BR>Merge a_numberorderedlist.pdb and the
- original document to a_numberorderedlist.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm; font-style: normal">This document is
- an example of a simple numbered ordered list.</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <OL>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">First</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Second</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Third</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Fourth</P>
- </OL>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm; font-style: normal">End of numbered
- Ordered list</P>
- <BLOCKQUOTE><BR>
- </BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/pagebreak</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with pagebreaks &#8211; straight
- forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_pagebreak.sxw</B>.
- </P>
- <P>Convert a_pagebreak.sxw to a_pagebreak.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_pagebreak.pdb. <BR>Export the doc back to a_pagebreak.pdb.
- <BR>Merge a_pagebreak.pdb and the original document to
- a_pagebreak.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm">The document has page breaks</P>
- <P STYLE="margin-bottom: 0cm">Page 1
- </P>
- <P>-now a page break-</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/paragraph</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with set paragraph styling&#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_paragraph.sxw</B>.
- </P>
- <P>Convert a_paragraph.sxw to a_paragraph.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_paragraph.pdb. <BR>Export the doc back to a_paragraph.pdb.
- <BR>Merge a_paragraph.pdb and the original document to
- a_paragraph.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm">This line is a paragraph. It is
- indented from left hand side by 1.0 inch and from right and side
- by 1.0 inch (paragraph
- </P>
- <P>settings).</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/standard</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with standard text and default
- settings &#8211; straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>.
- </P>
- <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_standard.pdb. <BR>Export the doc back to a_standard.pdb. <BR>Merge
- a_standard.pdb and the original document to a_standard.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P><FONT FACE="Times New Roman">This line of text is listed in
- standard style.</FONT></P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/subscript</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with subscript text setting &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_subscript.sxw</B>.
- </P>
- <P>Convert a_subscript.sxw to a_subscript.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_subscript.pdb. <BR>Export the doc back to a_subscript.pdb.
- <BR>Merge a_subscript.pdb and the original document to
- a_subscript.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman"><FONT SIZE=4>The
- last word on this line is in subscript. <SPAN STYLE="font-style: normal"><SUB>Dude</SUB></SPAN></FONT></FONT></P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/superscript</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with superscript text setting &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_subscript.sxw</B>.
- </P>
- <P>Convert a_superscript.sxw to a_superscript.pdb, in AportisDoc
- PDB format. <BR>Start POSE with AportisDoc application and import
- a_superscript.pdb. <BR>Export the doc back to a_superscript.pdb.
- <BR>Merge a_superscript.pdb and the original document to
- a_superscript.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm"><FONT FACE="Times New Roman"><FONT SIZE=4>The
- last word on this line is in superscript. <SPAN STYLE="font-style: normal"><SUP>Dude
- </SUP></SPAN></FONT></FONT>
- </P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/symbols</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with various symbol types &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_symbols.sxw</B>.
- </P>
- <P>Convert a_symbols.sxw to a_symbols.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_symbols.pdb. <BR>Export the doc back to a_symbols.pdb. <BR>Merge
- a_symbols.pdb and the original document to a_symbols.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm">'-'-'-'-&gt;-&gt;-&gt;-&gt;.
- '''''''. -------. &gt;&gt;&gt;&gt;&gt;&gt;&gt;</P>
- <P STYLE="margin-bottom: 0cm; font-style: normal"><SUP><FONT FACE="Times New Roman"><FONT SIZE=4>!&#8221;&pound;$%^&amp;*()_+}{~@:?&gt;&lt;,./;'#][=-???
- </FONT></FONT></SUP>
- </P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/tab</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with tab styling &#8211; straight
- forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_tab.sxw</B>.
- </P>
- <P>Convert a_tab.sxw to a_tab.pdb, in AportisDoc PDB format.
- <BR>Start POSE with AportisDoc application and import a_tab.pdb.
- <BR>Export the doc back to a_tab.pdb. <BR>Merge a_tab.pdb and the
- original document to a_tab.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant document should
- contain:
- </P>
- <P STYLE="margin-bottom: 0cm">This is a tabbed document</P>
- <P STYLE="margin-bottom: 0cm">1 Tab line</P>
- <P STYLE="margin-bottom: 0cm">2 tabbed line</P>
- <P STYLE="margin-bottom: 0cm">3 tabbed line</P>
- <P STYLE="margin-bottom: 0cm">2 tabbed line</P>
- <P STYLE="margin-bottom: 0cm">1 Tab line</P>
- <P STYLE="margin-bottom: 0cm">4 tab line</P>
- <P STYLE="margin-bottom: 0cm">2 tab line</P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/table</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with table &#8211; straight forward
- convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_table.sxw</B>.
- </P>
- <P>Convert a_table.sxw to a_table.pdb, in AportisDoc PDB format.
- <BR>Start POSE with AportisDoc application and import a_table.pdb.
- <BR>Export the doc back to a_table.pdb. <BR>Merge a_table.pdb and
- the original document to a_table.sxw.
- </P>
- <P><B>Expected result:</B>
- </P>
- <P>The resultant document should contain:
- </P>
- <P STYLE="margin-bottom: 0cm">&lt;Check table &amp; contents are
- identical to original.&gt;
- </P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm">This document has a table with 3
- rows and 3 columns:</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P><BR><BR>
- </P>
- <P STYLE="margin-bottom: 0cm">&lt;TABLE &amp; CONTENTS&gt;</P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/textspan</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document testing textspan
- italics,bolds,underline together&#8211; straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_textspan.sxw</B>.
- </P>
- <P>Convert a_textspan.sxw to a_textspan.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_textspan.pdb. <BR>Export the doc back to a_textspan.pdb. <BR>Merge
- a_textspan.pdb and the original document to a_textspan.sxw.
- </P>
- <P><B>Expected result:</B>
- </P>
- <P>The resultant document should contain:
- </P>
- <P STYLE="margin-bottom: 0cm">Document indicating Text Span</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm; font-weight: medium"><I>This is a
- simple line with some amount of text. The whole line is in italic
- except the next 3 words which is also <B>SET TO BOLD</B>. Also the
- next word is <U>UNDERLINED</U>. The essence is differnet styles
- within the same text span.</I></P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/style/unorderedlist</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document with unorderedlist &#8211; straight
- forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_unorderedlist.sxw</B>.
- </P>
- <P>Convert a_unorderedlist.sxw to a_unorderedlist.pdb, in
- AportisDoc PDB format. <BR>Start POSE with AportisDoc application
- and import a_unorderedlist.pdb. <BR>Export the doc back to
- a_unorderedlist.pdb. <BR>Merge a_unorderedlist.pdb and the
- original document to a_unorderedlist.sxw.
- </P>
- <P><B>Expected result:</B>
- </P>
- <P>The resultant document should contain:
- </P>
- <P STYLE="margin-bottom: 0cm; font-style: normal">This document is
- an example of a simple un- ordered list</P>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <OL>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Wag the Dog</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Gladiator</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Insider</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Usual
- Suspects</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Glengarry
- Glen Ross</P>
- </OL>
- <OL>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Host Shots</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Airplane</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Monty
- Python</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">History of
- the World</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Sacry Movie</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Austin
- Powers</P>
- </OL>
- <UL>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Scarlet and
- the Black</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Operation
- Day Break</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Life is
- Beautiful</P>
- <LI><P STYLE="margin-bottom: 0cm; font-style: normal">Nephew
- (beutfiul soundtrack)</P>
- </UL>
- <P STYLE="margin-bottom: 0cm"><BR>
- </P>
- <P STYLE="margin-bottom: 0cm; font-style: normal; font-weight: medium">
- End of un-ordered list.</P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/content/style/wordwrap</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: document which tests wordwrapping &#8211;
- straight forward convert</P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_wordwrap.sxw</B>.
- </P>
- <P>Convert a_wordwrap.sxw to a_wordwrap.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_wordwrap.pdb. <BR>Export the doc back to a_wordwrap.pdb. <BR>Merge
- a_wordwrap.pdb and the original document to a_wordwrap.sxw.
- </P>
- <P><B>Expected result:</B>
- </P>
- <P>The resultant document should contain:</P>
- <P STYLE="margin-bottom: 0cm; font-weight: medium"><I>This line is
- a long line just to check if the word wrap feature works fine,
- when it is synched onto the PDA..</I></P>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/content/simple01</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: simple document - insert text at beginning
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>.
- </P>
- <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_standard.pdb. <BR>Insert the following text, including the
- terminating line-feed, at the beginning of the first line:
- </P>
- <BLOCKQUOTE>New text added to simple file.</BLOCKQUOTE>
- <P>Export the doc back to a_standard.pdb. <BR>Merge a_standard.pdb
- and the original document to a_standard.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should contain:
- </P>
- <BLOCKQUOTE>New text added to simple file. <BR>This&nbsp; line of
- text is listed in standard&nbsp; style&nbsp;</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/content/simple02</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: simple document - insert text in middle
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>.
- </P>
- <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_standard.pdb. <BR>Insert the following text immediately after
- the word &quot;text&quot;:
- </P>
- <BLOCKQUOTE>, including this inserted phrase,&nbsp;</BLOCKQUOTE>
- <P>Export the doc back to a_standard.pdb. <BR>Merge a_standard.pdb
- and the original document to a_standard.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should contain:
- </P>
- <BLOCKQUOTE>This&nbsp; line of text, including this inserted
- phrase, is listed in standard&nbsp; style&nbsp;</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=28%>
- <P><B>aportis/merge/content/simple03</B></P>
- </TD>
- <TD WIDTH=72%>
- <P><B>Summary</B>: simple document - append text
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>a_standard.sxw</B>.
- </P>
- <P>Convert a_standard.sxw to a_standard.pdb, in AportisDoc PDB
- format. <BR>Start POSE with AportisDoc application and import
- a_standard.pdb. <BR>Append a new-line at the end of the line and
- add the following line:
- </P>
- <BLOCKQUOTE>This is also in standard style</BLOCKQUOTE>
- <P>Export the doc back to a_standard.pdb. <BR>Merge a_standard.pdb
- and the original document to a_standard.sxw.
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should contain:
- </P>
- <BLOCKQUOTE>This&nbsp; line of text is listed in standard&nbsp;
- style <BR>This is also in standard style</BLOCKQUOTE>
- </TD>
- </TR>
-</TABLE>
-<H2>5.2 MiniCalc Tests</H2>
-<H2>5.2.1 MiniCalc Convert Tests</H2>
-<H2>5.2.1.1 MiniCalc Merge Style Tests</H2>
-<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <COL WIDTH=77*>
- <COL WIDTH=179*>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><B>minicalc/merge/style/columnswidth</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=70%>
- <P><B>Summary</B>: Spreadsheet with 5 columns 10 entries -
- Spreadsheet columnwidth variation.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_columnswidth.sxc</B>.&nbsp;
- </P>
- <P>Convert c_columnswidth.sxc to c_columnswidth.pdb, in MiniCalc
- PDB format.&nbsp; <BR>Start POSE with MiniCalc application and
- import c_columnswidth.pdb.&nbsp;</P>
- <P>Choose Cell Reference &quot;B1&quot; &amp; alter column width
- to 1.55 by selecting, Format -&gt; Column -&gt; Width... &lt; make
- width change via spin button&gt; -&gt; OK, also decrease &quot;E1&quot;
- similarly to have a column width of 1.68.<BR><BR><BR>
- </P>
- <P>Export the doc back to c_columnswidth.pdb.&nbsp; <BR>Merge
- c_columnswidth.pdb to c_columnswidth.sxw.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- column B with a width increase of 1.0 , and column E with a width
- decrease of 1.0, as compared with the original file, reflecting
- the changes stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><B>minicalc/merge/style/rowheight</B></P>
- </TD>
- <TD WIDTH=70%>
- <P><B>Summary</B>: Spreadsheet with 4 columns 3 rows 12 entries -
- Spreadsheet rowheight variation.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_rowheight.sxc</B>.&nbsp;
- </P>
- <P>Convert c_rowheight.sxc to c_rowheight.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_rowheight.pdb.&nbsp;</P>
- <P><BR>Choose Cell Reference &quot;A1&quot; &amp; alter row height
- to 1.17 by selecting Format -&gt; Row -&gt; Height... &lt;make
- height change via spin button&gt; -&gt; OK., also decrease &quot;A3&#8221;
- similarly to have a row height of 0.30.&nbsp;
- </P>
- <P>Export the doc back to c_rowheight.pdb.&nbsp; <BR>Merge
- c_rowheight.pdb to c_rowheight.sxw.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- row &#8220;Row 1&#8221; with a height increase of 1.0 and &quot;Row
- 3&quot; with a height decrease of 0.41, as compared with the
- original file, reflecting the changes stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><B>minicalc/merge/style/rowstyles</B></P>
- </TD>
- <TD WIDTH=70%>
- <P><B>Summary</B>: Spreadsheet with 5 columns 6 rows 18 entries -
- Spreadsheet rowstyle variation.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_rowstyle.sxc</B>.
- </P>
- <P>Convert c_rowstyles.sxc to c_rowstyles.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_rowstyles.pdb.&nbsp;</P>
- <P>Choose Cell Reference &quot;B3&quot; and change Heading style
- to default, by selecting, Format -&gt; Style Catelog -&gt; &lt;choose
- heading type from listbox&gt;, also choose cellreference &quot;D5&quot;
- and change Heading style to Heading1, also change &quot;C5&quot;
- to remove bold, underline &amp; italic.&nbsp;
- </P>
- <P><BR>Export the doc back to c_rowstyles.pdb.&nbsp; <BR>Merge
- c_rowstyles.pdb to c_rowstyles.sxw.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- value's and style types as in original file, except cells &quot;B3,
- &amp; D5&quot; which should display heading types default &amp;
- Heading 1 resp. and &quot;C5&quot; which should be plain text,
- reflecting the changes stated above.</P>
- </TD>
- </TR>
-</TABLE>
-<H2>5.2.1.2 MiniCalc Convert Style Tests</H2>
-<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <COL WIDTH=77*>
- <COL WIDTH=179*>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><B>minicalc/convert/style/styles</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=70%>
- <P><B>Summary</B>: Spreadsheet with 3 columns 10 rows 13 entries -
- Spreadsheet styles test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_styles.sxc</B>.&nbsp;
- </P>
- <P>Convert c_styles.sxc to c_styles.pdb, in MiniCalc PDB format.&nbsp;
- <BR>Start POSE with MiniCalc application and import c_styles.pdb.&nbsp;
- <BR>Export the doc back to c_styles.pdb.&nbsp; <BR>Merge
- c_styles.pdb to c_styles.sxw.&nbsp;</P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values with style features, .i.e Bold, Italics,
- .</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=30%>
- <P><B>minicalc/convert/style/alignment</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=70%>
- <P><B>Summary</B>: Spreadsheet with 4 columns 8 rows 24 entries -
- Spreadsheet alignment test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_alignment.sxc</B>.&nbsp;
- </P>
- <P>Convert c_alignment.sxc to c_alignment.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_alignment.pdb.&nbsp; <BR>Export the doc back to
- c_alignment.pdb.&nbsp; <BR>Merge c_alignment.pdb to
- c_alignment.sxw.&nbsp;</P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values with identical alignment to original
- file.</P>
- </TD>
- </TR>
-</TABLE>
-<H2><BR><BR>
-</H2>
-<H2>5.2.2.1 MiniCalc Merge Content Tests</H2>
-<TABLE WIDTH=100% BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <COL WIDTH=77*>
- <COL WIDTH=179*>
- <TR>
- <TD WIDTH=30% VALIGN=TOP>
- <P><B>minicalc/merge/content/insertimage</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=70% VALIGN=BOTTOM>
- <P><B>Summary</B>: Spreadsheet with 6 columns 2 image inserts -
- Spreadsheet image insert.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_insertimage.sxc</B>.&nbsp;
- </P>
- <P>Convert c_insertimage.sxc to c_insertimage.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_insertimage.pdb.&nbsp; <BR>Export the doc back to
- c_insertimage.pdb.&nbsp; <BR>Merge c_insertimage.pdb to
- c_insertimage.sxw.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- original file with both original images.</P>
- </TD>
- </TR>
- <TR>
- <TD WIDTH=30% VALIGN=TOP>
- <P><B>minicalc/merge/content/textimage</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=70% VALIGN=BOTTOM>
- <P><B>Summary</B>: Spreadsheet with 6 columns 2 image inserts -
- Spreadsheet image text insert.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_textimage.sxc</B>.&nbsp;
- </P>
- <P>Convert c_textimage.sxc to c_textimage.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_textimage.pdb.&nbsp;</P>
- <P>Insert text immediately before and directly after the inserted
- image.</P>
- <P>Export the doc back to c_textimage.pdb.&nbsp; <BR>Merge
- c_textimage.pdb to c_textimage.sxw.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- original image surrounded by text .i.e text before &amp; after the
- insert.</P>
- </TD>
- </TR>
-</TABLE>
-<H2>5.2.2.2 MiniCalc Convert Contents Tests</H2>
-<TABLE WIDTH=1025 BORDER=1 CELLPADDING=2 CELLSPACING=0>
- <COL WIDTH=431>
- <COL WIDTH=584>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><BR>
- </P>
- </TD>
- <TD WIDTH=584>
- <P><BR>
- </P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/basic</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary: </B>simple spreadsheet - round-trip conversion&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>.&nbsp;
- </P>
- <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_standard.pdb. Export the doc back to c_standard.pdb, without
- making and changes to the spreadsheet.&nbsp; <BR>Merge
- c_standard.pdb to c_standard.sxc.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should be
- equivalent to the original spreadsheet.&nbsp; <BR>&nbsp;</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/simple01</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: simple spreadsheet - insert text &amp; column
- of numeric values at beginning of empty sheet.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>.&nbsp;
- </P>
- <P>Convert c_standard.sxc to c_standard.pdb, in Minicalc PDB
- format.&nbsp; <BR>Start POSE with Minicalc application and import
- c_standard.pdb.&nbsp; <BR>Insert the following text &amp; values
- at the beginning of the the spreadsheet, .i.e in Column 1:&nbsp;
- </P>
- <BLOCKQUOTE>Col 1</BLOCKQUOTE>
- <BLOCKQUOTE>1</BLOCKQUOTE>
- <BLOCKQUOTE>1</BLOCKQUOTE>
- <BLOCKQUOTE>1</BLOCKQUOTE>
- <P>Export the doc back to c_standard.pdb.&nbsp; <BR>Merge
- c_standard.pdb to c_standard.sxc.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should contain:&nbsp;
- </P>
- <BLOCKQUOTE STYLE="margin-left: 6.05cm">New column of values as
- shown above.&nbsp;</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/simple02</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: simple spreadsheet - append a new column to
- end&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>.&nbsp;
- </P>
- <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_standard.pdb.&nbsp; <BR>Insert the following column immediately
- after the first:&nbsp;
- </P>
- <BLOCKQUOTE>Col 3</BLOCKQUOTE>
- <BLOCKQUOTE>3</BLOCKQUOTE>
- <BLOCKQUOTE>3</BLOCKQUOTE>
- <BLOCKQUOTE>3</BLOCKQUOTE>
- <P>Export the doc back to c_standard.pdb.&nbsp; <BR>Merge
- c_standard.pdb to c_standard.sxc.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should contain:&nbsp;
- </P>
- <P CLASS="text-body-indent">Col 1 Col 3</P>
- <BLOCKQUOTE>1 3
- </BLOCKQUOTE>
- <BLOCKQUOTE>1 3</BLOCKQUOTE>
- <BLOCKQUOTE>1 3</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/simple03</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: simple spreadsheet - insert a new column in
- middle&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>.&nbsp;
- </P>
- <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_standard.pdb.&nbsp; <BR>Insert the following column immediately
- after the first and before the second:&nbsp;
- </P>
- <BLOCKQUOTE>Col 2</BLOCKQUOTE>
- <BLOCKQUOTE>2</BLOCKQUOTE>
- <BLOCKQUOTE>2</BLOCKQUOTE>
- <BLOCKQUOTE>2</BLOCKQUOTE>
- <P>Export the doc back to c_standard.pdb.&nbsp; <BR>Merge
- c_standard.pdb to c_standard.sxc.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should contain:&nbsp;
- </P>
- <BLOCKQUOTE>Col 1 Col 2 Col 3</BLOCKQUOTE>
- <BLOCKQUOTE>1 2 3</BLOCKQUOTE>
- <BLOCKQUOTE>1 2 3</BLOCKQUOTE>
- <BLOCKQUOTE>1 2 3</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/simple04</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: simple spreadsheet - delete text&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_standard.sxc</B>.&nbsp;
- </P>
- <P>Convert c_standard.sxc to c_standard.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_standard.pdb.&nbsp; <BR>Delete &#8220;Column 3&#8221;, so that
- it reads:&nbsp;
- </P>
- <BLOCKQUOTE>Col 1 Col 2</BLOCKQUOTE>
- <BLOCKQUOTE>1 2</BLOCKQUOTE>
- <BLOCKQUOTE>1 2</BLOCKQUOTE>
- <P>Export the doc back to c_standard.pdb.&nbsp; <BR>Merge
- c_standard.pdb to c_standard.sxc.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>The resultant file should contain:&nbsp;
- </P>
- <BLOCKQUOTE>Col 1 Col 2</BLOCKQUOTE>
- <BLOCKQUOTE>1 2</BLOCKQUOTE>
- <BLOCKQUOTE>1 2</BLOCKQUOTE>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/addition</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 4 columns 10 entries -
- Spreadsheet Simple Addition using various formulae.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_addition.sxc</B>.
- </P>
- <P>Convert c_addition.sxc to c_addition.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_addition.pdb.&nbsp; <BR>Change Cell Reference &quot;A1&quot; = 3
- in formula bar.&nbsp; <BR>Export the doc back to c_addition.pdb.&nbsp;
- <BR>Merge c_addition.pdb to c_addition.sxc.&nbsp;
- </P>
- <P>A1 =3 ; B1 = 3 ; C1 =4 ;D1 =5;&nbsp;
- </P>
- <P>Addition types:
- </P>
- <P>Cell reference + Integer = A1+2 =5
- </P>
- <P>Integer + Decimal = 3+0.1 =3.1
- </P>
- <P>Cell Reference + Cell Reference = A1+B1 = 6
- </P>
- <P>(Bracketed Cell Reference) + (Integer + Integer) =
- (A1+B1)+(2+45) = 53
- </P>
- <P>Integer + (Integer) + (Integer+Integer) = 2+(0)+(3+0) = 5
- </P>
- <P>(SUM(Cell Ref;Cell Ref) +SUM(Cell Ref;Cell Ref) =
- (SUM(A1;B1)+SUM(B1;C1) = 13
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;All spreadsheet entered
- values &amp; the standard formula SUM of each cell should be
- displayed as above, formulae as stated above should be visible in
- the Formula Bar.&nbsp;</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/backwardrange</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 7 entries -
- Spreadsheet backwardranging using various formulae.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_backwardrange.sxc</B>.&nbsp;
- </P>
- <P>Convert c_alignment.sxc to c_alignment.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_alignment.pdb.&nbsp; <BR>Change Cell Reference &quot;B2&quot; =
- AVERAGE(2;5;5) in formula bar.&nbsp; <BR>Export the doc back to
- c_alignment.pdb.&nbsp; <BR>Merge c_alignment.pdb to
- c_alignment.sxc.&nbsp;
- </P>
- <P>Logical Funtion test B4:
- </P>
- <P>IF(Logical Test; Then Value;Else Value)
- </P>
- <P>.e.g. IF(23;45.45;54.54) = 45.45&nbsp;
- </P>
- <P>read as if logical test TRUE then place THEN VALUE in cell else
- place ELSE VALUE. <BR>&nbsp; <BR>&nbsp; <BR>&nbsp;
- </P>
- <P>Statistical Functional tests B2 , B3 resp.:
- </P>
- <P>AVERAGE(2;5;5) - Returns sum of arguments divided by number of
- arguments =4 .
- </P>
- <P>MAX(10;3;3) - Returns the maximum value in a list of arguments
- =10. <BR>&nbsp; <BR>&nbsp; <BR>&nbsp;
- </P>
- <P>Negative addition test B1:
- </P>
- <P>=B2-B3 = 4 - 10 = -6 <BR>&nbsp; <BR>&nbsp; <BR>&nbsp;
- </P>
- <P>Range Addition tests A1, A5, B5:
- </P>
- <P>SUM(B2;B4) = B2 + B3 + B4 = 4 + 10 + 45.45 = 59.45.
- </P>
- <P>SUM(A1:B2) -B4 = (59.45 + (-6) +4) - 45.45 = 12</P>
- <P>SUM(A1;B1)-A2 = (59.45 + (-6)) - 0 = 53.45
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;All spreadsheet entered
- values &amp; the standard formula SUM of each cell should be
- displayed on sheet as detailed above, formulae as stated above
- should be visible in the Formula Bar.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/boolean</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 column 2 entries -
- Spreadsheet boolean entry.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_boolean.sxc</B>.
- </P>
- <P>Convert c_boolean.sxc to c_boolean.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_boolean.pdb.&nbsp; <BR>Change Cell Reference &quot;A2&quot; =
- TRUE in formula bar.&nbsp; <BR>Export the doc back to
- c_boolean.pdb.&nbsp; <BR>Merge c_boolean.pdb to c_boolean.sxc.&nbsp;
- </P>
- <P>Logical Funtion test : cells A1, A2:
- </P>
- <P>A1=TRUE
- </P>
- <P>A2=TRUE
- </P>
- <P>Returns the logical values TRUE to the cells resp.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;The logical entry of each
- cell should be displayed on the sheet as stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cellcurrencyvalue</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 10 entries -
- Spreadsheet Currency number Format conversion test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cellcurrencyvalue.sxc</B>.
- </P>
- <P>Convert c_cellcurrencyvalue.sxc to c_cellcurrencyvalue.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_cellcurrencyvalue.pdb.&nbsp; <BR>Export
- the doc back to c_cellcurrencyvalue.pdb.&nbsp; <BR>Merge
- c_cellcurrencyvalue.pdb to c_cellcurrencyvalue.sxc.&nbsp;
- </P>
- <P>Display Sheet : 12 DM.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet entered values or
- the sum of each cell should be displayed with specified Currency
- symbol, formulae should be visible in the Formula Bar but not the
- currency symbol.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cellcurrencychange</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 10 entries -
- Spreadsheet Currency number Format modification test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cellcurrencychange.sxc</B>.
- </P>
- <P>Convert c_cellcurrencychange.sxc to c_cellcurrencychange.pdb,
- in MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_cellcurrencychange.pdb.&nbsp; <BR>Change
- Cell Reference &quot;A1&quot; to have currency format in Danish
- Marks (DM).&nbsp; <BR>Export the doc back to
- c_cellcurrencychange.pdb.&nbsp; <BR>Merge c_cellcurrencychange.pdb
- to c_cellcurrencychange.sxc.&nbsp;
- </P>
- <P>Select cell A1 = 12 ; then tap pen icon option on palm, choose
- Currency from palm listbox, tap on the down arrow to the right of
- the flashing cursor, tap on the intended currency type .e.g DM
- (Danish Mark) and tap apply &amp; OK.
- </P>
- <P>Display Sheet : 12 DM.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet entered values or
- the sum of each cell should be displayed with specified Currency
- symbol, formulae should be visible in the Formula Bar but not the
- currency symbol.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cellfloatvalue</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 6 entries -
- Spreadsheet float values.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cellfloatvalue.sxc</B>.&nbsp;
- </P>
- <P>Convert c_cellfloatvalue.sxc to c_cellfloatvalue.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_cellfloatvalue.pdb.&nbsp; <BR>Change Cell
- Reference &quot;A1&quot; = 11 &amp; &quot;A2&quot; = 2.38 &amp; B3
- 100.02450 in formula bar.&nbsp; <BR>Export the doc back to
- c_cellfloatvalue.pdb.&nbsp; <BR>Merge c_cellfloatvalue.pdb to
- c_cellfloatvalue.sxc.&nbsp;
- </P>
- <P>The original sheet has selected Format -&gt; Cells... -&gt;
- Numbers Tab -&gt; &amp; Numbers from the list box, choosen
- -1234.12, tho set the Format Code to 0.00 preventing the sheet
- display rounding values to two decimal places. It also has
- fraction display enabled in certain cells.</P>
- <P>Formula Bar : Display Sheet:
- </P>
- <P>A1 = 11 -&gt; 11.00
- </P>
- <P>A2 = 2.38 -&gt; 2 19/50
- </P>
- <P>A3 = 0.45 -&gt; 0.45
- </P>
- <P>B2 = 0.23 -&gt; 2/9
- </P>
- <P>B3 = 100.02450 -&gt; 100.02
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet fractional &amp;
- decimal values should be displayed with specified precision as
- stated above, formulae should be visible in the Formula Bar.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cellpercentvalue</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 3 entries -
- Spreadsheet percentage value precision.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cellpercentvalue.sxc</B>.&nbsp;
- </P>
- <P>Convert c_cellpercentvalue.sxc to c_cellpercentvalue.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_cellpercentvalue.pdb.&nbsp; <BR>Change
- Cell Reference &quot;A1&quot; = 120% &amp; &quot;B1&quot; = 10% in
- formula bar.&nbsp; <BR>Export the doc back to
- c_cellpercentvalue.pdb.&nbsp; <BR>Merge c_cellpercentvalue.pdb to
- c_cellpercentvalue.sxc.&nbsp;
- </P>
- <P>For cell A1 enter 120% in the Formula Bar. Sheet Display =
- 120.00%&nbsp;
- </P>
- <P>For cell B1 enter 10% in the Formula Bar. Sheet Display = 10%
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet percentage values
- should be displayed with specified precision as stated above,
- formulae should be visible in the Formula Bar.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cellstringvalue</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 4 columns 11 entries -
- Spreadsheet String values.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cellstringvalue.sxc</B>.&nbsp;
- </P>
- <P>Convert c_cellstringvalue.sxc to c_cellstringvalue.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_cellstringvalue.pdb.&nbsp; <BR>Change
- Cell Reference &quot;C2&quot; = Testing &amp; DELETE contents of
- &quot;D2&quot; &amp; insert a ';' in &quot;B3&quot; in formula
- bar.&nbsp; <BR>Export the doc back to c_cellstringvalue.pdb.&nbsp;
- <BR>Merge c_cellstringvalue.pdb to c_cellstringvalue.sxc.&nbsp;
- </P>
- <P>A1 = This A2 = With A3 = For
- </P>
- <P>B1 = Cell B2 = Strings B3 = ;
- </P>
- <P>C1 = Is C2 = Testing C3 = string values
- </P>
- <P>D1 = Filled D2 = &quot;blank&quot;&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet strings values
- should be displayed as stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/character</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 4 columns 23 entries -
- Spreadsheet character values.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_character.sxc</B>.&nbsp;
- </P>
- <P>Convert c_character.sxc to c_character.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_character.pdb.&nbsp; <BR>Change Cell Reference &quot;C7&quot; =
- -??%, .i.e appending a % sign.&nbsp; <BR>Export the doc back to
- c_character.pdb.&nbsp; <BR>Merge c_character.pdb to
- c_character.sxc.&nbsp;
- </P>
- <P>C7 = -??%&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet character values
- should be displayed as in original file including minor change
- stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cyclic</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 8 entries -
- Spreadsheet error messages.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cyclic.sxc</B>.&nbsp;
- </P>
- <P>Convert c_cyclic.sxc to c_cyclic.pdb, in MiniCalc PDB format.&nbsp;
- <BR>Start POSE with MiniCalc application and import c_cyclic.pdb.&nbsp;
- <BR>Change Cell Reference &quot;A4&quot; &amp; &quot;A5&quot; = 0
- &amp; &quot;B4&quot; = A1/A4, &quot;B5&quot;= A4/A5 in formula
- bar.&nbsp; <BR>Export the doc back to c_cyclic.pdb.&nbsp; <BR>Merge
- c_cyclic.pdb to c_cyclic.sxc.&nbsp;
- </P>
- <P>Changes should generate 2 extra errors shown below.
- </P>
- <P>B4 = Err.503</P>
- <P>B5 = #VALUE!
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values including 2 extra errors generated by
- the changes detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/dividefloating</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 7 entries -
- Spreadsheet dividing floating points.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_dividefloating.sxc</B>.&nbsp;
- </P>
- <P>Convert c_dividefloating.sxc to c_dividefloating.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_dividefloating.pdb.&nbsp; <BR>Change Cell
- Reference &quot;A4&quot; = -(12.2)/(5-1) &amp; &quot;B2&quot; = to
- be positive, in formula bar.&nbsp; <BR>Export the doc back to
- c_dividefloating.pdb.&nbsp; <BR>Merge c_dividefloating.pdb to
- c_dividefloating.sxc.&nbsp;
- </P>
- <P>B2 = 03.050000&nbsp;
- </P>
- <P>A4 = -03.05</P>
- <P>Spreadsheet setting : Format -&gt; Cells... -&gt; Decimal
- Places=6, Negative numbers red= TRUE, Leading zero's =2 -&gt; OK.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values and newly entered floating point
- division with specified precision &amp; colour, as stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/forwardrange</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 2 columns 4 rows 5 entries -
- Spreadsheet tests forwardranging.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_forwardrange.sxc</B>.&nbsp;
- </P>
- <P>Convert c_forwardrange.sxc to c_forwardrange.pdb, in MiniCalc
- PDB format.&nbsp; <BR>Start POSE with MiniCalc application and
- import c_forwardrange.pdb.&nbsp; <BR>Change Cell Reference &quot;B4&quot;
- = IF(0;45.45;54.54), in formula bar.&nbsp; <BR>Export the doc back
- to c_forwardrange.pdb.&nbsp; <BR>Merge c_forwardrange.pdb to
- c_forwardrange.sxc.&nbsp;
- </P>
- <P>Changes IF statement to False so ELSE VALUE now valid.
- </P>
- <P>B4 = 54.54
- </P>
- <P>A1 = SUM(B2;B4) = B2+B3+B4 =56.23 + 560 + 54.54 = 670.77
- </P>
- <P><B>Expected result:</B> <BR>Spreadsheet values &amp; the
- modified standard formula SUM'sl should be displayed in each cell
- on sheet to reflect the changes as stated above, formulae should
- be visible in the Formula Bar.&nbsp;</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/hiddenrow</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 5 columns 2 rows 9 entries -
- Spreadsheet tests hidden row.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_hiddenrow.sxc</B>.&nbsp;
- </P>
- <P>Convert c_hiddenrow.sxc to c_hiddenrow.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_hiddenrow.pdb.&nbsp; <BR>Select Format -&gt; Row -&gt; Show.&nbsp;
- <BR>Export the doc back to c_hiddenrow.pdb.&nbsp; <BR>Merge
- c_hiddenrow.pdb to c_hiddenrow.sxc.&nbsp;
- </P>
- <P>A previously hidden row 2 appears.
- </P>
- <P><B>Expected result:</B> <BR>Spreadsheet values &amp; standard
- formula SUM's should be displayed in each cell on sheet as before
- including a new row #2 which reflects the change stated above.&nbsp;</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/invalidcellref</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 3 columns 3 rows 8 entries -
- Spreadsheet invalid cell references.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_invalidcellref.sxc</B>.&nbsp;
- </P>
- <P>Convert c_invalidcellref.sxc to c_invalidcellref.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_invalidcellref.pdb.&nbsp; <BR>Change Cell
- Reference &quot;A3&quot; = MAX(1;2;3) , &quot;C2&quot; = &quot;blank&quot;,
- &quot;C3&quot; = a0, in formula bar.&nbsp; <BR>Export the doc back
- to c_invalidcellref.pdb.&nbsp; <BR>Merge c_invalidcellref.pdb to
- c_invalidcellref.sxc.&nbsp;
- </P>
- <P>Changes should generate 2 extra errors shown below.
- </P>
- <P>A3 = 3&nbsp;
- </P>
- <P>C2 = &quot;blank&quot;
- </P>
- <P>C3 = #NAME?
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, excpet &quot;C3&quot; which holds new
- invalid input warning generated by the change detailed above,
- sheet should also show removal of 2 types of invalid input with
- valid input replacements &quot;A3&quot; &amp; &quot;C2&quot;.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/largerange</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 3 columns 3 rows 8 entries -
- Spreadsheet large range test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_largerange.sxc</B>.&nbsp;
- </P>
- <P>Convert c_largerange.sxc to c_largerange.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_largerange.pdb.&nbsp; <BR>Change Cell Reference &quot;B3&quot; =
- SUM(E7:G10), in formula bar.&nbsp; <BR>Export the doc back to
- c_largerange.pdb.&nbsp; <BR>Merge c_largerange.pdb to
- c_largerange.sxc.&nbsp;
- </P>
- <P>Increases the range by an extra row.
- </P>
- <P>B3 = SUM(E7:G10) = E7+F7+G7+E8+F8+G8+E9+F9+G9+E10+F10+G10 =
- </P>
- <P>= 4+4+4+2+2+4+1+4+4+1+1+12 = 31 +12 = 43
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;B3&quot; which holds new
- larger range standard formula SUM generated by the change detailed
- above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/listrange</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 5 columns 4 rows 20 entries -
- Spreadsheet listrange test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_listrange.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_listrange.sxc to c_listrange.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_listrange.pdb.&nbsp; <BR>Change Cell Reference &quot;D3&quot; =
- 24, in formula bar.&nbsp; <BR>Export the doc back to
- c_listrange.pdb.&nbsp; <BR>Merge c_listrange.pdb to
- c_listrange.sxc.&nbsp;
- </P>
- <P>D3 = 24
- </P>
- <P>A4 = SUM(A1:A3) = 256.1
- </P>
- <P>B4 = AVERAGE(A1:A3) = 17.07
- </P>
- <P>C4 = AVERAGE(A4:B4) = AVERAGE( 256.1+17.07) = 136.59
- </P>
- <P>D4 = AVERAGE(D1;D2;D3) = AVERAGE( 13.1+18+24) = 18.37
- </P>
- <P>E5 = SUM(A4:B4:C4:D4) = (256.1+17.07+136.59+18.37) = 428.13<BR>&nbsp;
- <BR>&nbsp; <BR>&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except cells &quot;A4-E4&quot; which
- hold the modified standard formula SUM &amp; AVERAGE value's
- generated by the change in D3 detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/mathematical</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 5 columns 3 rows 15 entries -
- Spreadsheet stanadard math functs test in (Rad).&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_mathematical.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_mathematical.sxc to c_mathematical.pdb, in MiniCalc
- PDB format.&nbsp; <BR>Start POSE with MiniCalc application and
- import c_mathematical.pdb.&nbsp; <BR>Change Cell Reference &quot;B1&quot;
- = SIN(3.14/2), &quot;B2&quot; =COS(0), &quot;C3&quot;= TAN(1.57/2)
- in formula bar.&nbsp; <BR>Export the doc back to
- c_mathematical.pdb.&nbsp; <BR>Merge c_mathematical.pdb to
- c_mathematical.sxc.&nbsp;
- </P>
- <P>B1 = 1</P>
- <P>B2 = 1
- </P>
- <P>C3 =1
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values except cells &quot;B1,B2,C3&quot; which
- hold modified sin,cos &amp; tan value's generated by the changes
- stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/protection</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 column 3 rows 3 entries -
- Spreadsheet protection test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_protection.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_protection.sxc to c_protection.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_protection.pdb.&nbsp; <BR>Attempt to Change Cell Reference &quot;A1&quot;
- either directly or in formula bar from the value 12 to 1.&nbsp;
- <BR>Export the doc back to c_protection.pdb.&nbsp; <BR>Merge
- c_protection.pdb to c_protection.sxc.&nbsp;
- </P>
- <P>User should be unable to change cell contents, popup error
- message &quot;Protected cells can not be modified&quot; should
- appear.
- </P>
- <P>This is because the Tools -&gt; Protect Document -&gt; Sheet
- option has been enabled with a password and therefore all cells on
- sheet are write protected.&nbsp;
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/renamedsheet</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 3 sheets 0 entries -
- Spreadsheet rename test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_renamedsheet.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_renamedsheet.sxc to c_renamedsheet.pdb, in MiniCalc
- PDB format.&nbsp; <BR>Start POSE with MiniCalc application and
- import c_renamedsheet.pdb.&nbsp; <BR>Change sheet named &quot;testplan&quot;
- to &quot;renamed&quot;.&nbsp; <BR>Export the doc back to
- c_renamedsheet.pdb.&nbsp; <BR>Merge c_renamedsheet.pdb to
- c_renamedsheet.sxc.&nbsp;
- </P>
- <P>Click on &quot;testplan&quot; sheet tab, and using 3<SUP>rd</SUP>
- mouse button, choose Rename..., from popup menu, enter new sheet
- name &amp; OK.
- </P>
- <P>OR choose Format -&gt; Sheet -&gt; Rename... enter new sheet
- name &amp; OK.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheets &amp; names, with the exception of the
- &quot;testplan&quot; sheet which should now be labelled &quot;renamed&quot;
- .</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/sheetreference</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 3 sheets 4 columns 4 rows 11
- entries - Spreadsheet sheetreference test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_sheetreference.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_sheetreference.sxc to c_sheetreference.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_sheetreference.pdb.&nbsp; <BR>Change Cell
- Reference &quot;A3&quot; = Sheet3.B1.&nbsp; <BR>Export the doc
- back to c_sheetrefernce.pdb.&nbsp; <BR>Merge c_sheetreference.pdb
- to c_sheetreference.sxc.&nbsp;
- </P>
- <P>A3 = 3.
- </P>
- <P>B4 =26.</P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original value's &amp; formulae as in original file, except
- cells &quot;A3&quot;&amp; &quot;A4&quot; which should display a
- different sheet reference value and the modified sheet reference
- formula, reflecting the changes stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/smallrange</B> <BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 4 columns 3 rows 10 entries -
- Spreadsheet small range test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_smallrange.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_smallrange.sxc to c_smallrange.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_smallrange.pdb.&nbsp; <BR>Change Cell Reference &quot;B3&quot; =
- AVERAGE(A1:B2), in formula bar.&nbsp; <BR>Export the doc back to
- c_smallrange.pdb.&nbsp; <BR>Merge c_smallrange.pdb to
- c_smallrange.sxc.&nbsp;
- </P>
- <P>Decrease the range by 1 row.
- </P>
- <P>B3 = AVERAGE(A1:B2) = (1+2+3+3)/4 = 2.25
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A3&quot; which now holds
- average value of new smaller range generated by the change
- detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cancel</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm confirm &amp;cancel test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cancel.sxc</B>.&nbsp;
- </P>
- <P>Convert c_cancel.sxc to c_cancel.pdb, in MiniCalc PDB format.&nbsp;
- <BR>Start POSE with MiniCalc application and import c_cancel.pdb.&nbsp;
- <BR>Select with mouse Cell Reference &quot;A2&quot; on dotted line
- on palm type 14, tap &#8220;TICK&#8221; option (leftmost option on
- palm) to confirm, repeat this step this time Changing Cell
- Reference &#8220;A2&#8221; = 1, except this time tap the &#8220;X&#8221;
- option to cancel.&nbsp; <BR>Export the doc back to c_cancel.pdb.&nbsp;
- <BR>Merge c_cancel.pdb to c_cancel.sxc.&nbsp;
- </P>
- <P>A2 = 14.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A2&quot; which now holds
- the value 14 generated by the change detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/cut&amp;paste</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm cut&amp;paste test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_cut&amp;paste.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_cut&amp;paste.sxc to c_cut&amp;paste.pdb, in MiniCalc
- PDB format.&nbsp; <BR>Start POSE with MiniCalc application and
- import c_cut&amp;paste.pdb.&nbsp; <BR>Choose Cell Reference &quot;A2&quot;
- with mouse, tap cut option on palm, choose Cell Reference &#8220;A5&#8221;
- and tap paste option.&nbsp; <BR>Export the doc back to
- c_cut&amp;paste.pdb.&nbsp; <BR>Merge c_cut&amp;paste.pdb to
- c_cut&amp;paste.sxc.&nbsp;
- </P>
- <P>A2 = &#8220;blank&#8221;.</P>
- <P>A5 = 14.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A2&quot; &amp; &#8220;A5&#8221;
- which now holds the values blank &amp; 14 resp. generated by the
- changes detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/copy&amp;paste</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm copy&amp;paste test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_copy&amp;paste.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_copy&amp;paste.sxc to c_copy&amp;paste.pdb, in
- MiniCalc PDB format.&nbsp; <BR>Start POSE with MiniCalc
- application and import c_copy&amp;paste.pdb.&nbsp; <BR>Choose Cell
- Reference &quot;A5&quot; with mouse, tap copy option on palm,
- choose Cell Reference &#8220;A2&#8221; and tap paste option.&nbsp;
- <BR>Export the doc back to c_copy&amp;paste.pdb.&nbsp; <BR>Merge
- c_copy&amp;paste.pdb to c_copy&amp;paste.sxc.&nbsp;
- </P>
- <P>A2 = 14.</P>
- <P>A5 = 14.
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A2&quot; which now holds
- the value 14 generated by the change detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/textentry</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm text entry test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_textentry.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_textentry.sxc to c_textentry.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_textentry.pdb.&nbsp; <BR>Choose Cell Reference &quot;A1&quot;
- with mouse, tap textentry option on palm, type the following text
- string into the popup text box &#8220;This is a MiniCalc text
- entry test.&#8221;.<BR>Export the doc back to c_textentry.pdb.&nbsp;
- <BR>Merge c_textentry.pdb to c_textentry.sxc.&nbsp;
- </P>
- <P>A1 = &#8220;This is a MiniCalc text entry test.&#8221;</P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A1&quot; which now holds
- the string &#8220;This is a MiniCalc text entry test&#8221;,
- generated by the change detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/function</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm function test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_function.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_function.sxc to c_function.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_function.pdb.&nbsp; <BR>Choose Cell Reference &quot;A1&quot;
- with mouse, tap standard function option on palm, choose the
- function AVERAGE from the popup list by tapping, type the values
- &#8220;1;2;3&#8221; between the function brackets on the dotted
- line were the cursor is placed and press return.<BR>Export the doc
- back to c_function.pdb.&nbsp; <BR>Merge c_function.pdb to
- c_function.sxc.&nbsp;
- </P>
- <P>A1 = AVERAGE(1;2;3) = 2.</P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A1&quot; which now holds
- the result of the average function given args (1;2;3) = 2
- generated by the change detailed above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/numberpad</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm numberpad test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_numberpad.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_numberpad.sxc to c_numberpad.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_numberpad.pdb.&nbsp; <BR>Choose Cell Reference &quot;A1&quot;
- with mouse, tap the &#8220;123&#8221; option on the palm, tap
- &#8220;-&gt;&#8221;, &#8220;=&#8221;, &#8220;5-0+2&#8221; from
- popup numberpad, and press return.<BR>Export the doc back to
- c_numberpad.pdb.&nbsp; <BR>Merge c_numberpad.pdb to
- c_numberpad.sxc.&nbsp;
- </P>
- <P>A1 = 5-0+2 = 7.</P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A1&quot; which now holds
- the result of the formula 5-0+2, generated by the change detailed
- above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/math_funcs</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm numberpad test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_math_funcs.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_math_funcs.sxc to c_math_funcs.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_math_funcs.pdb.&nbsp; <BR>Choose the Cell References below with
- mouse,and for each type on the palm the corresponding entry before
- pressing return.</P>
- <P>A1 = <BR>Export the doc back to c_math_funcs.pdb.&nbsp; <BR>Merge
- c_math_funcs.pdb to c_math_funcs.sxc.&nbsp;
- </P>
- <P>A1 = .</P>
- <P>A2 =</P>
- <P>A3 =
- </P>
- <P>A4 =</P>
- <P><BR><BR>
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A1&quot; which now holds
- the result of the formula 5-0+2, generated by the change detailed
- above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/insertrow</B><BR>&nbsp;</P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 columns 4 rows 4entries -
- Spreadsheet palm insert row test.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_insertrow.sxc</B>.&nbsp;
-
- </P>
- <P>Convert c_insertrow.sxc to c_insertrow.pdb, in MiniCalc PDB
- format.&nbsp; <BR>Start POSE with MiniCalc application and import
- c_insertrow.pdb.&nbsp;</P>
- <P><BR>Select Cell Reference &quot;A3&quot; with mouse, tap the
- side bar of the spreadsheet at position 3 on the palm, tap
- &#8220;Insert&#8221; from popup menu, and press return. Select the
- newly inserted Cell Reference with mouse and enter the number &#8220;2&#8221;,
- press return.<BR><BR><BR>
- </P>
- <P>Export the doc back to c_insertrow.pdb.&nbsp; <BR>Merge
- c_insertrow.pdb to c_insertrow.sxc.&nbsp;
- </P>
- <P>A1 = .</P>
- <P><B>Expected result:</B> <BR>&nbsp;Spreadsheet should display
- all original sheet values, except &quot;A1&quot; which now holds
- the result of the formula 5-0+2, generated by the change detailed
- above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><B>minicalc/convert/content/multi_boolean</B></P>
- </TD>
- <TD WIDTH=584>
- <P><B>Summary</B>: Spreadsheet with 1 column 8 entries -
- Spreadsheet multi boolean entry.&nbsp;
- </P>
- <P><B>Procedure:</B> <BR>Use test file <B>c_multi_boolean.sxc</B>.
-
- </P>
- <P>Convert c_multi_boolean.sxc to c_multi_boolean.pdb, in MiniCalc
- PDB format.&nbsp; <BR>Start POSE with MiniCalc application and
- import c_multi_boolean.pdb.&nbsp; <BR>Export the doc back to
- c_multi_boolean.pdb.&nbsp; <BR>Merge c_multi_boolean.pdb to
- c_multi_boolean.sxc.&nbsp;
- </P>
- <P>Logical Funtion test : cells A1-A4:
- </P>
- <P>A1-A4 = FALSE
- </P>
- <P>A5-A8 = TRUE
- </P>
- <P>Returns 4 logical FALSE &amp; TRUE values resp..
- </P>
- <P><B>Expected result:</B> <BR>&nbsp;The logical entry of each
- cell should be displayed on the sheet as stated above.</P>
- </TD>
- </TR>
- <TR VALIGN=TOP>
- <TD WIDTH=431>
- <P><BR>
- </P>
- </TD>
- <TD WIDTH=584>
- <P><BR>
- </P>
- </TD>
- </TR>
-</TABLE>
-<P><BR>&nbsp; <BR>&nbsp; <BR>&nbsp;
-</P>
-</BODY>
-</HTML> \ No newline at end of file
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java b/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java
deleted file mode 100644
index 9ec0bc5291c6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedBinaryObject.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-
-/**
- * This class represents embedded object's in an OpenOffice.org document that
- * have a binary representation.
- */
-public class EmbeddedBinaryObject extends EmbeddedObject {
-
- /** The object's binary representation. */
- protected byte[] objData = null;
-
- /**
- * Constructor for an embedded object stored using an XML representation.
- *
- * @param name The name of the object.
- * @param type The mime-type of the object. See the class summary.
- */
- public EmbeddedBinaryObject(String name, String type) {
- super(name, type);
- }
-
-
- /**
- * Package private constructor for use when reading an object from a
- * compressed SX? file.
- *
- * @param name The name of the object.
- * @param type The mime-type of the object. See the class summary.
- * @param source The OfficeZip representation of the SX? file that stores
- * the object.
- */
- EmbeddedBinaryObject(String name, String type, OfficeZip source) {
- super(name, type, source);
- }
-
-
- /**
- * This method returns the data for this object.
- *
- * @return A <code>byte</code> array containing the object's data.
- */
- public byte[] getBinaryData() {
-
- if (objData == null) {
- // See if we came from a Zip file
- if (zipFile != null) {
- objData = zipFile.getNamedBytes(objName);
- }
- }
-
- return objData;
- }
-
-
- /**
- * Sets the data for this object.
- *
- * @param data A <code>byte</code> array containing data for the object.
- */
- public void setBinaryData(byte[] data) {
- objData = data;
- hasChanged = true;
- }
-
- /**
- * Package private method for writing the data of the EmbeddedObject to a
- * SX? file.
- *
- * @param zip An <code>OfficeZip</code> instance representing the file
- * the data is to be written to.
- */
- void write(OfficeZip zip) {
- if (hasChanged) {
- zip.setNamedBytes(objName, objData);
- }
- }
-
-
- /**
- * Package private method that constructs the manifest.xml entries for this
- * embedded object.
- *
- * @return Document <code>Document</code> containing the manifest entries.
- */
- void writeManifestData(Document manifestDoc) throws DOMException {
- Element objNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE);
-
- objNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, objType);
- objNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH, objName);
-
- manifestDoc.getDocumentElement().appendChild(objNode);
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java b/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java
deleted file mode 100644
index f4220f1b3972..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedObject.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml;
-
-import java.io.IOException;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMException;
-
-
-public abstract class EmbeddedObject {
- protected String objName;
- protected String objType;
-
- /** Representation of the file from which this object was read. */
- protected OfficeZip zipFile = null;
-
- /** Flag indicating if this document has changed since reading or is new. */
- protected boolean hasChanged = false;
-
- /**
- * Constructor for an embedded object stored using an XML representation.
- *
- * @param name The name of the object.
- * @param type The mime-type of the object. See the class summary.
- */
- public EmbeddedObject(String name, String type) {
- objName = name;
- objType = type;
-
- hasChanged = true;
- }
-
-
- /**
- * Package private constructor for use when reading an object from a
- * compressed SX? file.
- *
- * @param name The name of the object.
- * @param type The mime-type of the object. See the class summary.
- * @param source The OfficeZip representation of the SX? file that stores
- * the object.
- */
- EmbeddedObject(String name, String type, OfficeZip source) {
- this(name, type);
- zipFile = source;
- }
-
-
- /**
- * Retrieves the name of the embedded object represented by an instance of
- * this class.
- *
- * <b>N.B.</b>The name referes to the name as found in the
- * <code>META-INF/manifest.xml</code> file.
- *
- * @return The name of the object.
- */
- public final String getName() {
- return objName;
- }
-
-
- /**
- * Retrieves the type of the embedded object represented by an instance of
- * this class.
- *
- * The <code>META-INF/manifest.xml</code> file currently represents the
- * type of an object using MIME types.
- */
- public final String getType() {
- return objType;
- }
-
- /**
- * Package private method for writing the data of the EmbeddedObject to a
- * SX? file.
- *
- * @param zip An <code>OfficeZip</code> instance representing the file
- * the data is to be written to.
- */
- abstract void write(OfficeZip zip) throws IOException;
-
- /**
- * Package private method that constructs the manifest.xml entries for this
- * embedded object.
- *
- * @return Document <code>Document</code> containing the manifest entries.
- */
- abstract void writeManifestData(Document manifestDoc) throws DOMException;
-} \ No newline at end of file
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java b/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java
deleted file mode 100644
index c07f6f116ca2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/EmbeddedXMLObject.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * This class represents those embedded objects in an OpenOffice.org document
- * that have an XML representation. Currently, according to the OpenOffice.org
- * File Format 1.0 document, there are 6 such objects:
- *
- * Formulae created with Math (application/vnd.sun.xml.math)
- * Charts created with Chart (application/vnd.sun.xml.chart)
- * Spreadsheets created with Calc (application/vnd.sun.xml.calc)
- * Text created with Writer (application/vnd.sun.xml.writer)
- * Drawings created with Draw (application/vnd.sun.xml.draw)
- * Presentations created with Impress (application/vnd.sun.xml.impress)
- *
- * These object types are stored using a combination of content, settings and styles
- * XML files.
- */
-public class EmbeddedXMLObject extends EmbeddedObject {
-
- // Entries for the subdocuments that constitute this object;
- protected Document contentDOM = null;
- protected Document settingsDOM = null;
- protected Document stylesDOM = null;
-
- private DocumentBuilder builder = null;
-
- /**
- * Constructor for an embedded object stored using an XML representation.
- *
- * @param name The name of the object.
- * @param type The mime-type of the object. See the class summary.
- */
- public EmbeddedXMLObject(String name, String type) {
- super(name, type);
- }
-
- /**
- * Package private constructor for use when reading an object from a
- * compressed SX? file.
- *
- * @param name The name of the object.
- * @param type The mime-type of the object. See the class summary.
- * @param source The OfficeZip representation of the SX? file that stores
- * the object.
- */
- EmbeddedXMLObject(String name, String type, OfficeZip source) {
- super(name, type, source);
- }
-
-
- /**
- * Returns the content data for this embedded object.
- *
- * @return DOM represenation of "content.xml"
- *
- * @throws SAXException If any parser error occurs
- * @throws IOException If any IO error occurs
- */
- public Document getContentDOM() throws SAXException, IOException {
-
- if (contentDOM == null) {
- contentDOM = getNamedDOM("content.xml");
- }
-
- return contentDOM;
- }
-
-
- /**
- * Sets the content data for the embedded object.
- *
- * @param content DOM representation of the object's content.
- */
- public void setContentDOM(Document content) {
- contentDOM = content;
- hasChanged = true;
- }
-
-
- /**
- * Returns the settings data for this embedded object.
- *
- * @return DOM represenation of "settings.xml"
- *
- * @throws SAXException If any parser error occurs
- * @throws IOException If any IO error occurs
- */
- public Document getSettingsDOM() throws SAXException, IOException {
-
- if (settingsDOM == null) {
- settingsDOM = getNamedDOM("settings.xml");
- }
-
- return settingsDOM;
- }
-
-
- /**
- * Sets the settings data for the embedded object.
- *
- * @param styles DOM representation of the object's styles.
- */
- public void setSettingsDOM(Document settings) {
- settingsDOM = settings;
- hasChanged = true;
- }
-
-
- /**
- * Returns the style data for this embedded object.
- *
- * @return DOM represenation of "styles.xml"
- *
- * @throws SAXException If any parser error occurs
- * @throws IOException If any IO error occurs
- */
- public Document getStylesDOM() throws SAXException, IOException {
-
- if (stylesDOM == null) {
- stylesDOM = getNamedDOM("styles.xml");
- }
-
- return stylesDOM;
- }
-
-
- /**
- * Sets the styles data for the embedded object.
- *
- * @param styles DOM representation of the object's styles.
- */
- public void setStylesDOM(Document styles) {
- stylesDOM = styles;
- hasChanged = true;
- }
-
-
- /**
- * This method extracts the data for the given XML file from the SX? file
- * and creates a DOM representation of it.
- *
- * @param name The name of the XML file to retrieve. It is paired with
- * the object name to access the SX? file.
- *
- * @return DOM representation of the named XML file.
- *
- * @throws SAXException If any parser error occurs
- * @throws IOException If any IO error occurs
- */
- private Document getNamedDOM(String name) throws SAXException, IOException {
- if (zipFile == null) {
- return null;
- }
-
- try {
- if (builder == null) {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-
- factory.setValidating(false);
- builder = factory.newDocumentBuilder();
- }
-
- byte[] data = zipFile.getNamedBytes(new String(objName + "/" + name));
- if (data != null) {
- return OfficeDocument.parse(builder, data);
- }
- else {
- return null;
- }
-
- }
- catch (SAXException se) {
- throw se;
- }
- catch (IOException ioe) {
- throw ioe;
- }
- catch (ParserConfigurationException pce) {
- throw new SAXException(pce);
- }
- }
-
-
- /**
- * Package private method for writing the data of the EmbeddedObject to a
- * SX? file.
- *
- * @param zip An <code>OfficeZip</code> instance representing the file
- * the data is to be written to.
- */
- void write(OfficeZip zip) throws IOException {
- if (hasChanged == true) {
- if (contentDOM != null) {
- zip.setNamedBytes(new String(objName + "/content.xml"),
- OfficeDocument.docToBytes(contentDOM));
- }
- if (settingsDOM != null) {
- zip.setNamedBytes(new String(objName + "/settings.xml"),
- OfficeDocument.docToBytes(settingsDOM));
- }
- if (stylesDOM != null) {
- zip.setNamedBytes(new String(objName + "/styles.xml"),
- OfficeDocument.docToBytes(stylesDOM));
- }
- }
- }
-
- /**
- * Package private method that constructs the manifest.xml entries for this
- * embedded object.
- *
- * @param manifestDoc <code>Document</code> containing the manifest entries.
- */
- void writeManifestData(Document manifestDoc) throws DOMException {
- Node root = manifestDoc.getDocumentElement();
-
- if (contentDOM != null) {
- Element contentNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE);
-
- contentNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml");
- contentNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH,
- new String(objName + "/content.xml"));
-
- root.appendChild(contentNode);
- }
-
- if (settingsDOM != null) {
- Element settingsNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE);
-
- settingsNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml");
- settingsNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH,
- new String(objName + "/settings.xml"));
-
- root.appendChild(settingsNode);
- }
-
- if (stylesDOM != null) {
- Element stylesNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE);
-
- stylesNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml");
- stylesNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH,
- new String(objName + "/styles.xml"));
- }
-
-
- Element objectNode = manifestDoc.createElement(OfficeConstants.TAG_MANIFEST_FILE);
-
- objectNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_TYPE, objType);
- objectNode.setAttribute(OfficeConstants.ATTRIBUTE_MANIFEST_FILE_PATH,
- new String(objName + "/"));
-
- root.appendChild(objectNode);
- }
-
-} \ No newline at end of file
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java
deleted file mode 100644
index 265c7a29e954..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeConstants.java
+++ /dev/null
@@ -1,439 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-/**
- * This interface contains constants for StarOffice XML tags,
- * attributes (StarCalc cell types, etc.).
- *
- * @author Herbie Ong, Paul Rank, Martin Maher
- */
-public interface OfficeConstants {
-
- /** Element tag for <i>office:document</i>, this is the root tag. */
- public final static String TAG_OFFICE_DOCUMENT = "office:document";
-
- /**
- * Element tag for <i>office:document-content</i>, this is the root
- * tag in content.xml.
- */
- public final static String TAG_OFFICE_DOCUMENT_CONTENT = "office:document-content";
-
- /**
- * Element tag for <i>office:document-settings</i>, this is the root
- * tag in content.xml.
- */
- public final static String TAG_OFFICE_DOCUMENT_SETTINGS= "office:document-settings";
-
- /**
- * Element tag for <i>office:document-meta</i>, this is the root
- * tag in content.xml.
- */
- public final static String TAG_OFFICE_DOCUMENT_META= "office:document-meta";
-
- /**
- * Element tag for <i>office:document-styles</i>, this is the root tag
- * in styles.xml.
- */
- public final static String TAG_OFFICE_DOCUMENT_STYLES = "office:document-styles";
-
- /**
- * Attribute tag for <i>office:class</i> of element
- * <i>office:document</i>.
- */
- public final static String ATTRIBUTE_OFFICE_CLASS = "office:class";
-
- /** Element tag for <i>office:styles</i>. */
- public final static String TAG_OFFICE_STYLES = "office:styles";
-
- /** Element tag for <i>office:meta</i>. */
- public final static String TAG_OFFICE_META = "office:meta";
-
- /** Element tag for <i>office:automatic-styles</i>. */
- public final static String TAG_OFFICE_AUTOMATIC_STYLES = "office:automatic-styles";
-
- /** Element tag for <i>office:master-styles</i>. */
- public final static String TAG_OFFICE_MASTER_STYLES = "office:master-styles";
-
- /** Element tag for <i>office:body</i>. */
- public final static String TAG_OFFICE_BODY = "office:body";
-
- /** Element tag for <i>office:settings</i>. */
- public final static String TAG_OFFICE_SETTINGS = "office:settings";
-
- //Adding
-
- /** Element tag for <i>text:variable-set</i>. */
- public final static String TAG_TEXT_VARIABLE_SET = "text:variable-set";
-
- /** Element tag for <i>text:variable-get</i>. */
- public final static String TAG_TEXT_VARIABLE_GET = "text:variable-get";
-/** Element tag for <i>text:expression</i>. */
- public final static String TAG_TEXT_EXPRESSION = "text:expression";
-
-/** Element tag for <i>text:user-field-get</i>. */
- public final static String TAG_TEXT_USER_FIELD_GET = "text:user-field-get";
-
-/** Element tag for <i>text:page-variable-get</i>. */
- public final static String TAG_TEXT_PAGE_VARIABLE_GET = "text:page-variable-get";
-/** Element tag for <i>text:sequence</i>. */
- public final static String TAG_TEXT_SEQUENCE = "text:sequence";
-
- /** Element tag for <i>text:text-input</i>. */
- public final static String TAG_TEXT_VARIABLE_INPUT = "text:variable-input";
- /** Element tag for <i>text:time</i>. */
- public final static String TAG_TEXT_TIME = "text:time";
-
- /** Element tag for <i>text:page-count</i>. */
- public final static String TAG_TEXT_PAGE_COUNT = "text:page-count";
- /** Element tag for <i>text:page-number</i>. */
- public final static String TAG_TEXT_PAGE_NUMBER = "text:page-number";
- /** Element tag for <i>text:author-initials</i>. */
- public final static String TAG_TEXT_AUTHOR_INITIALS = "text:author-initials";
- /** Element tag for <i>text:subject</i>. */
- public final static String TAG_TEXT_SUBJECT = "text:subject";
- /** Element tag for <i>text:title</i>. */
- public final static String TAG_TEXT_TITLE = "text:title";
- /** Element tag for <i>text:creation-time</i>. */
- public final static String TAG_TEXT_CREATION_TIME = "text:creation-time";
-
- /** Element tag for <i>text:date</i>. */
- public final static String TAG_TEXT_DATE = "text:date";
- /** Element tag for <i>text:text-input</i>. */
- public final static String TAG_TEXT_TEXT_INPUT = "text:text-input";
-
-
-//end adding
-
- /** Element tag for <i>office:font-decls</i>. */
- public final static String TAG_OFFICE_FONT_DECLS = "office:font-decls";
-
- /** Element tag for <i>style:font-decl</i>. */
- public final static String TAG_STYLE_FONT_DECL = "style:font-decl";
-
- /** Attribute tag for <i>style:name</i> of element <i>style:name</i>. */
- public final static String ATTRIBUTE_STYLE_NAME = "style:name";
-
- /**
- * Attribute tag for <i>style:font-pitch</i> of element
- * <i>style:font-pitch</i>.
- */
- public final static String ATTRIBUTE_STYLE_FONT_PITCH = "style:font-pitch";
-
- /**
- * Attribute tag for <i>fo:font-family</i> of element
- * <i>fo:font-family</i>.
- */
- public final static String ATTRIBUTE_FO_FONT_FAMILY = "fo:font-family";
-
- /**
- * Attribute tag for <i>fo:font-family</i> of element
- * <i>fo:font-family</i>.
- */
- public final static String ATTRIBUTE_FO_FONT_FAMILY_GENERIC = "fo:font-family-generic";
-
- /** Element tag for <i>text:p</i>. */
- public final static String TAG_PARAGRAPH = "text:p";
-
- /** Element tag for <i>text:</i>. */
- public final static String TAG_TEXT = "text:";
-
- /** Element tag for <i>text:h</i>. */
- public final static String TAG_HEADING = "text:h";
-
- /** Element tag for <i>text:s</i>. */
- public final static String TAG_SPACE = "text:s";
-
- /** Element tag for <i>text:tab-stop</i>. */
- public final static String TAG_TAB_STOP = "text:tab-stop";
-
- /** Element tag for <i>text:line-break</i>. */
- public final static String TAG_LINE_BREAK = "text:line-break";
-
- /** Element tag for <i>text:span</i>. */
- public final static String TAG_SPAN = "text:span";
-
- /** Element tag for <i>text:a</i>. */
- public final static String TAG_HYPERLINK = "text:a";
-
- /** Element tag for <i>text:bookmark</i>. */
- public final static String TAG_BOOKMARK = "text:bookmark";
-
- /** Element tag for <i>text:bookmark-start</i>. */
- public final static String TAG_BOOKMARK_START = "text:bookmark-start";
-
- /** Element tag for <i>text:unordered-list</i>. */
- public final static String TAG_UNORDERED_LIST = "text:unordered-list";
-
- /** Element tag for <i>text:ordered-list</i>. */
- public final static String TAG_ORDERED_LIST = "text:ordered-list";
-
- /** Element tag for <i>text:list-header</i>. */
- public final static String TAG_LIST_HEADER = "text:list-header";
-
- /** Element tag for <i>text:list-item</i>. */
- public final static String TAG_LIST_ITEM = "text:list-item";
-
- /** Attribute tag for <i>text:c</i> of element <i>text:s</i>. */
- public final static String ATTRIBUTE_SPACE_COUNT = "text:c";
-
- /**
- * Attribute tag for <i>text:style-name</i> of element
- * <i>text:style-name</i>.
- */
- public final static String ATTRIBUTE_TEXT_STYLE_NAME = "text:style-name";
-
- /** Element tag for <i>table:table</i>. */
- public final static String TAG_TABLE = "table:table";
-
- /** Element tag for <i>table:named-expression</i>. */
- public final static String TAG_NAMED_EXPRESSIONS = "table:named-expressions";
-
- /** Element tag for <i>table:named-range</i>. */
- public final static String TAG_TABLE_NAMED_RANGE= "table:named-range";
-
- /** Element tag for <i>table:named-expression</i>. */
- public final static String TAG_TABLE_NAMED_EXPRESSION= "table:named-expression";
-
- /**
- * Attribute tag for <i>table:name</i> of element
- * <i>table:table</i>.
- */
- public final static String ATTRIBUTE_TABLE_NAME = "table:name";
-
- /**
- * Attribute tag for <i>table:expression</i> of element
- * <i>table:named-range</i>.
- */
- public final static String ATTRIBUTE_TABLE_EXPRESSION = "table:expression";
-
- /**
- * Attribute tag for <i>table:base-cell-address</i> of element
- * <i>table:named-range</i>.
- */
- public final static String ATTRIBUTE_TABLE_BASE_CELL_ADDRESS = "table:base-cell-address";
-
- /**
- * Attribute tag for <i>table:cell-range-address</i> of element
- * <i>table:named-range</i>.
- */
- public final static String ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS = "table:cell-range-address";
-
- /** Element tag for <i>table:table-row</i>. */
- public final static String TAG_TABLE_ROW = "table:table-row";
-
- /** Element tag for <i>table:table-column</i>. */
- public final static String TAG_TABLE_COLUMN = "table:table-column";
-
- /**
- * Attribute tag for <i>table:default-cell-style-name</i>
- * of element <i>table:table-column</i>.
- */
- public final static String ATTRIBUTE_DEFAULT_CELL_STYLE = "table:default-cell-style-name";
-
- /** Element tag for <i>table:scenario</i>. */
- public final static String TAG_TABLE_SCENARIO = "table:scenario";
-
- /** Element tag for <i>table:table-cell</i>. */
- public final static String TAG_TABLE_CELL = "table:table-cell";
-
- /**
- * Attribute tag for <i>table:value-type</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_VALUE_TYPE = "table:value-type";
-
- /**
- * Attribute tag for <i>table:number-columns-repeated</i>
- * of element <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED =
- "table:number-columns-repeated";
-
- /**
- * Attribute tag for <i>table:number-rows-repeated</i>
- * of element <i>table:table-row</i>.
- */
- public final static String ATTRIBUTE_TABLE_NUM_ROWS_REPEATED =
- "table:number-rows-repeated";
-
- /**
- * Attribute tag for <i>table:formula</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_FORMULA = "table:formula";
-
- /**
- * Attribute tag for <i>table:value</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_VALUE = "table:value";
-
- /**
- * Attribute tag for <i>table:date-value</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_DATE_VALUE = "table:date-value";
-
- /**
- * Attribute tag for <i>table:time-value</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_TIME_VALUE = "table:time-value";
-
- /**
- * Attribute tag for <i>table:string-value</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_STRING_VALUE =
- "table:string-value";
-
- /**
- * Attribute tag for <i>table:time-boolean-value</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_BOOLEAN_VALUE =
- "table:boolean-value";
-
- /** Attribute tag for <i>table:style-name</i> of table elements. */
- public final static String ATTRIBUTE_TABLE_STYLE_NAME = "table:style-name";
-
- /**
- * Attribute tag for <i>table:currency</i> of element
- * <i>table:table-cell</i>.
- */
- public final static String ATTRIBUTE_TABLE_CURRENCY = "table:currency";
-
- /** The cell contains data of type <i>string</i>. */
- public final static String CELLTYPE_STRING = "string";
-
- /** The cell contains data of type <i>float</i>. */
- public final static String CELLTYPE_FLOAT = "float";
-
- /** The cell contains data of type <i>time</i>. */
- public final static String CELLTYPE_TIME = "time";
-
- /** The cell contains data of type <i>date</i>. */
- public final static String CELLTYPE_DATE = "date";
-
- /** The cell contains data of type <i>currency</i>. */
- public final static String CELLTYPE_CURRENCY = "currency";
-
- /** The cell contains data of type <i>boolean</i>. */
- public final static String CELLTYPE_BOOLEAN = "boolean";
-
- /** The cell contains data of type <i>percent</i>. */
- public final static String CELLTYPE_PERCENT = "percentage";
-
- /** StarWriter XML file extension. */
- public final static String SXW_FILE_EXTENSION = ".sxw";
-
- /** StarWriter XML <i>office:class</i> value. */
- public final static String SXW_TYPE = "text";
-
- /** StarCalc XML file extension. */
- public final static String SXC_FILE_EXTENSION = ".sxc";
-
- /** StarCalc XML <i>office:class</i> value. */
- public final static String SXC_TYPE = "spreadsheet";
-
- /** Element tag for <i>manifest:manifest</i>entry in Manifest XML */
- public final static String TAG_MANIFEST_ROOT = "manifest:manifest";
-
- /** Element tag for <i>manifest:file-entry</i> entry in Manifest XML. */
- public final static String TAG_MANIFEST_FILE = "manifest:file-entry";
-
- /**
- * Attribute tag for <i>manifest:media-type</i> of element
- * <i>manifest:file-entry</i>.
- */
- public final static String ATTRIBUTE_MANIFEST_FILE_TYPE = "manifest:media-type";
-
- /**
- * Attribute tag for <i>manifest:full-path</i> of element
- * <i>manifest:file-entry</i>.
- */
- public final static String ATTRIBUTE_MANIFEST_FILE_PATH = "manifest:full-path";
-
- // Tags and Elements for the settings.xml
-
- /** Element tag for <i>config:config-item</i>. */
- public final static String TAG_CONFIG_ITEM = "config:config-item";
-
- /** Element tag for <i>config:config-item-set</i>. */
- public final static String TAG_CONFIG_ITEM_SET = "config:config-item-set";
-
- /** Element tag for <i>config:config-item-map-indexed</i>. */
- public final static String TAG_CONFIG_ITEM_MAP_INDEXED = "config:config-item-map-indexed";
-
- /** Element tag for <i>config:config-item-map-named</i>. */
- public final static String TAG_CONFIG_ITEM_MAP_NAMED = "config:config-item-map-named";
-
- /** Element tag for <i>config:config-item-map-entry</i>. */
- public final static String TAG_CONFIG_ITEM_MAP_ENTRY= "config:config-item-map-entry";
-
- /**
- * Attribute tag for <i>config:name</i> of element
- * <i>config:config-item</i>.
- */
- public final static String ATTRIBUTE_CONFIG_NAME = "config:name";
-
- /**
- * Attribute tag for <i>config:type</i> of element
- * <i>config:config-item</i>.
- */
- public final static String ATTRIBUTE_CONFIG_TYPE = "config:type";
-
-
- /** StarWriter XML MIME type. */
- public final static String SXW_MIME_TYPE = "application/vnd.sun.xml.writer";
-
- /** StarWriter XML Template MIME type. */
- public final static String STW_MIME_TYPE = "application/vnd.sun.xml.writer.template";
-
- /** StarCalc XML MIME type. */
- public final static String SXC_MIME_TYPE = "application/vnd.sun.xml.calc";
-
- /** StarCalc XML Template MIME type. */
- public final static String STC_MIME_TYPE = "application/vnd.sun.xml.calc.template";
-
- /** StarImpress XML MIME type. */
- public final static String SXI_MIME_TYPE = "application/vnd.sun.xml.impress";
-
- /** StarImpress XML Template MIME type. */
- public final static String STI_MIME_TYPE = "application/vnd.sun.xml.impress.template";
-
- /** StarDraw XML MIME type. */
- public final static String SXD_MIME_TYPE = "application/vnd.sun.xml.draw";
-
- /** StarMath XML MIME type. */
- public final static String SXM_MIME_TYPE = "application/vnd.sun.xml.math";
-
- /** StarWriter Global XML MIME Type */
- public final static String SXG_MIME_TYPE = "application/vnd.sun.xml.writer.global";
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java
deleted file mode 100644
index 54da474289a3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocument.java
+++ /dev/null
@@ -1,1234 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-package org.openoffice.xmerge.converter.xml;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.io.BufferedReader;
-import java.io.StringReader;
-import java.io.InputStreamReader;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.HashMap;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-import org.w3c.dom.DOMImplementation;
-import org.w3c.dom.DocumentType;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.w3c.dom.NamedNodeMap;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import org.openoffice.xmerge.util.Resources;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * An implementation of <code>Document</code> for
- * StarOffice documents.
- */
-public abstract class OfficeDocument
- implements org.openoffice.xmerge.Document,
- OfficeConstants {
-
- /** Factory for <code>DocumentBuilder</code> objects. */
- private static DocumentBuilderFactory factory =
- DocumentBuilderFactory.newInstance();
-
- /** DOM <code>Document</code> of content.xml. */
- private Document contentDoc = null;
-
- /** DOM <code>Document</code> of meta.xml. */
- private Document metaDoc = null;
-
- /** DOM <code>Document</code> of settings.xml. */
- private Document settingsDoc = null;
-
- /** DOM <code>Document</code> of content.xml. */
- private Document styleDoc = null;
-
- /** DOM <code>Docuemtn</code> of META-INF/manifest.xml. */
- private Document manifestDoc = null;
-
- private String documentName = null;
- private String fileName = null;
-
- /** Resources object. */
- private Resources res = null;
-
- /**
- * <code>OfficeZip</code> object to store zip contents from
- * read <code>InputStream</code>. Note that this member
- * will still be null if it was initialized using a template
- * file instead of reading from a StarOffice zipped
- * XML file.
- */
- private OfficeZip zip = null;
-
- /** Collection to keep track of the embedded objects in the document. */
- private Map embeddedObjects = null;
-
- /**
- * Default constructor.
- *
- * @param name <code>Document</code> name.
- */
- public OfficeDocument(String name)
- {
- this(name, true, false);
- }
-
-
- /**
- * Constructor with arguments to set <code>namespaceAware</code>
- * and <code>validating</code> flags.
- *
- * @param name <code>Document</code> name (may or may not
- * contain extension).
- * @param namespaceAware Value for <code>namespaceAware</code> flag.
- * @param validating Value for <code>validating</code> flag.
- */
- public OfficeDocument(String name, boolean namespaceAware, boolean validating) {
-
- res = Resources.getInstance();
- factory.setValidating(validating);
- factory.setNamespaceAware(namespaceAware);
- this.documentName = trimDocumentName(name);
- this.fileName = documentName + getFileExtension();
- }
-
-
- /**
- * Removes the file extension from the <code>Document</code>
- * name.
- *
- * @param name Full <code>Document</code> name with extension.
- *
- * @return Name of <code>Document</code> without the extension.
- */
- private String trimDocumentName(String name) {
- String temp = name.toLowerCase();
- String ext = getFileExtension();
-
- if (temp.endsWith(ext)) {
- // strip the extension
- int nlen = name.length();
- int endIndex = nlen - ext.length();
- name = name.substring(0,endIndex);
- }
-
- return name;
- }
-
-
- /**
- * Return a DOM <code>Document</code> object of the content.xml
- * file. Note that a content DOM is not created when the constructor
- * is called. So, either the <code>read</code> method or the
- * <code>initContentDOM</code> method will need to be called ahead
- * on this object before calling this method.
- *
- * @return DOM <code>Document</code> object.
- */
- public Document getContentDOM() {
-
- return contentDoc;
- }
-
- /**
- * Return a DOM <code>Document</code> object of the meta.xml
- * file. Note that a content DOM is not created when the constructor
- * is called. So, either the <code>read</code> method or the
- * <code>initContentDOM</code> method will need to be called ahead
- * on this object before calling this method.
- *
- * @return DOM <code>Document</code> object.
- */
- public Document getMetaDOM() {
-
- return metaDoc;
- }
-
-
- /**
- * Return a DOM <code>Document</code> object of the settings.xml
- * file. Note that a content DOM is not created when the constructor
- * is called. So, either the <code>read</code> method or the
- * <code>initContentDOM</code> method will need to be called ahead
- * on this object before calling this method.
- *
- * @return DOM <code>Document</code> object.
- */
- public Document getSettingsDOM() {
-
- return settingsDoc;
- }
-
-
- /**
- * Sets the content tree of the document.
- *
- * @param newDom <code>Node</code> containing the new content tree.
- */
- public void setContentDOM( Node newDom) {
- contentDoc = (Document)newDom;
- }
-
-
- /**
- * Sets the meta tree of the document.
- *
- * @param newDom <code>Node</code> containing the new meta tree.
- */
- public void setMetaDOM (Node newDom) {
- metaDoc = (Document)newDom;
- }
-
-
- /**
- * Sets the settings tree of the document.
- *
- * @param newDom <code>Node</code> containing the new settings tree.
- */
- public void setSettingsDOM (Node newDom) {
- settingsDoc = (Document)newDom;
- }
-
-
- /**
- * Sets the style tree of the document.
- *
- * @param newDom <code>Node</code> containing the new style tree.
- */
- public void setStyleDOM (Node newDom) {
- styleDoc = (Document)newDom;
- }
-
-
- /**
- * Return a DOM <code>Document</code> object of the style.xml file.
- * Note that this may return null if there is no style DOM.
- * Note that a style DOM is not created when the constructor
- * is called. Depending on the <code>InputStream</code>, a
- * <code>read</code> method may or may not build a style DOM. When
- * creating a new style DOM, call the <code>initStyleDOM</code> method
- * first.
- *
- * @return DOM <code>Document</code> object.
- */
- public Document getStyleDOM() {
-
- return styleDoc;
- }
-
-
- /**
- * Return the name of the <code>Document</code>.
- *
- * @return The name of <code>Document</code>.
- */
- public String getName() {
-
- return documentName;
- }
-
-
- /**
- * Return the file name of the <code>Document</code>, possibly
- * with the standard extension.
- *
- * @return The file name of <code>Document</code>.
- */
- public String getFileName() {
-
- return fileName;
- }
-
-
- /**
- * Returns the file extension for this type of
- * <code>Document</code>.
- *
- * @return The file extension of <code>Document</code>.
- */
- protected abstract String getFileExtension();
-
-
- /**
- * Returns all the embedded objects (graphics, formulae, etc.) present in
- * this document.
- *
- * @return An <code>Iterator</code> of <code>EmbeddedObject</code> objects.
- */
- public Iterator getEmbeddedObjects() {
-
- if (embeddedObjects == null && manifestDoc != null) {
- embeddedObjects = new HashMap();
-
- // Need to read the manifest file and construct a list of objects
- NodeList nl = manifestDoc.getElementsByTagName(TAG_MANIFEST_FILE);
-
- // Dont create the HashMap if there are no embedded objects
- int len = nl.getLength();
- for (int i = 0; i < len; i++) {
- Node n = nl.item(i);
-
- NamedNodeMap attrs = n.getAttributes();
-
- String type = attrs.getNamedItem(ATTRIBUTE_MANIFEST_FILE_TYPE).getNodeValue();
- String path = attrs.getNamedItem(ATTRIBUTE_MANIFEST_FILE_PATH).getNodeValue();
-
-
- /*
- * According to OpenOffice.org XML File Format document (ver. 1)
- * there are only two types of embedded object:
- *
- * Objects with an XML representation.
- * Objects without an XML representation.
- *
- * The former are represented by one or more XML files.
- * The latter are in binary form.
- */
- if (type.startsWith("application/vnd.sun.xml"))
- {
- if (path.equals("/")) {
- // Exclude the main document entries
- continue;
- }
- // Take off the trailing '/'
- String name = path.substring(0, path.length() - 1);
- embeddedObjects.put(name, new EmbeddedXMLObject(name, type, zip));
- }
- else if (type.equals("text/xml")) {
- // XML entries are either embedded StarOffice doc entries or main
- // document entries
- continue;
- }
- else { // FIX (HJ): allows empty MIME type
- embeddedObjects.put(path, new EmbeddedBinaryObject(path, type, zip));
- }
- }
- }
-
- return embeddedObjects.values().iterator();
- }
-
- /**
- * Returns the embedded object corresponding to the name provided.
- * The name should be stripped of any preceding path characters, such as
- * '/', '.' or '#'.
- *
- * @param name The name of the embedded object to retrieve.
- *
- * @return An <code>EmbeddedObject</code> instance representing the named
- * object.
- */
- public EmbeddedObject getEmbeddedObject(String name) {
- if (name == null) {
- return null;
- }
-
- if (embeddedObjects == null) {
- getEmbeddedObjects();
- }
-
- if (embeddedObjects.containsKey(name)) {
- return (EmbeddedObject)embeddedObjects.get(name);
- }
- else {
- return null;
- }
- }
-
-
- /**
- * Adds a new embedded object to the document.
- *
- * @param embObj An instance of <code>EmbeddedObject</code>.
- */
- public void addEmbeddedObject(EmbeddedObject embObj) {
- if (embObj == null) {
- return;
- }
-
- if (embeddedObjects == null) {
- embeddedObjects = new HashMap();
- }
-
- embeddedObjects.put(embObj.getName(), embObj);
- }
-
-
- /**
- * Read the Office <code>Document</code> from the given
- * <code>InputStream</code>.
- *
- * @param is Office document <code>InputStream</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void read(InputStream is) throws IOException {
-
- Debug.log(Debug.INFO, "reading Office file");
-
- DocumentBuilder builder = null;
-
- try {
- builder = factory.newDocumentBuilder();
- } catch (ParserConfigurationException ex) {
- throw new OfficeDocumentException(ex);
- }
-
- // read in Office zip file format
-
- zip = new OfficeZip();
- zip.read(is);
-
- // grab the content.xml and
- // parse it into contentDoc.
-
- byte contentBytes[] = zip.getContentXMLBytes();
-
- if (contentBytes == null) {
-
- throw new OfficeDocumentException("Entry content.xml not found in file");
- }
-
- try {
-
- contentDoc = parse(builder, contentBytes);
-
- } catch (SAXException ex) {
-
- throw new OfficeDocumentException(ex);
- }
-
- // if style.xml exists, grab the style.xml
- // parse it into styleDoc.
-
- byte styleBytes[] = zip.getStyleXMLBytes();
-
- if (styleBytes != null) {
-
- try {
-
- styleDoc = parse(builder, styleBytes);
-
- } catch (SAXException ex) {
-
- throw new OfficeDocumentException(ex);
- }
- }
-
- byte metaBytes[] = zip.getMetaXMLBytes();
-
- if (metaBytes != null) {
-
- try {
-
- metaDoc = parse(builder, metaBytes);
-
- } catch (SAXException ex) {
-
- throw new OfficeDocumentException(ex);
- }
- }
-
- byte settingsBytes[] = zip.getSettingsXMLBytes();
-
- if (settingsBytes != null) {
-
- try {
-
- settingsDoc = parse(builder, settingsBytes);
-
- } catch (SAXException ex) {
-
- throw new OfficeDocumentException(ex);
- }
- }
-
-
- // Read in the META-INF/manifest.xml file
- byte manifestBytes[] = zip.getManifestXMLBytes();
-
- if (manifestBytes != null) {
-
- try {
- manifestDoc = parse(builder, manifestBytes);
- } catch (SAXException ex) {
- throw new OfficeDocumentException(ex);
- }
- }
-
- }
-
-
- /**
- * Read the Office <code>Document</code> from the given
- * <code>InputStream</code>.
- *
- * @param is Office document <code>InputStream</code>.
- * @param isZip <code>boolean</code> Identifies whether
- * a file is zipped or not
- *
- * @throws IOException If any I/O error occurs.
- */
- public void read(InputStream is, boolean isZip) throws IOException {
-
- Debug.log(Debug.INFO, "reading Office file");
-
- DocumentBuilder builder = null;
-
- try {
- builder = factory.newDocumentBuilder();
- } catch (ParserConfigurationException ex) {
- throw new OfficeDocumentException(ex);
- }
-
- if (isZip)
- {
- read(is);
- }
- else{
- try{
- //System.out.println("\nParsing Input stream, validating?: "+builder.isValidating());
- //contentDoc= builder.parse((InputStream)is);
-
- Reader r = secondHack(is);
- InputSource ins = new InputSource(r);
- org.w3c.dom.Document newDoc = builder.parse(ins);
- //org.w3c.dom.Document newDoc = builder.parse((InputStream)is);
- Element rootElement=newDoc.getDocumentElement();
-
- NodeList nodeList;
- Node tmpNode;
- Node rootNode = (Node)rootElement;
- if (newDoc !=null){
- /*content*/
- contentDoc = createDOM(TAG_OFFICE_DOCUMENT_CONTENT);
- rootElement=contentDoc.getDocumentElement();
- rootNode = (Node)rootElement;
-
- // FIX (HJ): Include office:font-decls in content DOM
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_FONT_DECLS);
- if (nodeList.getLength()>0){
- tmpNode = contentDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = contentDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_BODY);
- if (nodeList.getLength()>0){
- tmpNode = contentDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- /*Styles*/
- styleDoc = createDOM(TAG_OFFICE_DOCUMENT_STYLES);
- rootElement=styleDoc.getDocumentElement();
- rootNode = (Node)rootElement;
-
- // FIX (HJ): Include office:font-decls in styles DOM
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_FONT_DECLS);
- if (nodeList.getLength()>0){
- tmpNode = styleDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = styleDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- // FIX (HJ): Include office:automatic-styles in styles DOM
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = styleDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- // FIX (HJ): Include office:master-styles in styles DOM
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = styleDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- /*Settings*/
- settingsDoc = createDOM(TAG_OFFICE_DOCUMENT_SETTINGS);
- rootElement=settingsDoc.getDocumentElement();
- rootNode = (Node)rootElement;
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_SETTINGS);
- if (nodeList.getLength()>0){
- tmpNode = settingsDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- /*Meta*/
- metaDoc = createDOM(TAG_OFFICE_DOCUMENT_META);
- rootElement=metaDoc.getDocumentElement();
- rootNode = (Node)rootElement;
- nodeList= newDoc.getElementsByTagName(TAG_OFFICE_META);
- if (nodeList.getLength()>0){
- tmpNode = metaDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- }
- }
- catch (SAXException ex) {
- throw new OfficeDocumentException(ex);
- }
- }
-
- }
-
-
-
- /**
- * Parse given <code>byte</code> array into a DOM
- * <code>Document</code> object using the
- * <code>DocumentBuilder</code> object.
- *
- * @param builder <code>DocumentBuilder</code> object for parsing.
- * @param bytes <code>byte</code> array for parsing.
- *
- * @return Resulting DOM <code>Document</code> object.
- *
- * @throws SAXException If any parsing error occurs.
- */
- static Document parse(DocumentBuilder builder, byte bytes[])
- throws SAXException, IOException {
-
- Document doc = null;
-
- ByteArrayInputStream is = new ByteArrayInputStream(bytes);
-
- // TODO: replace hack with a more appropriate fix.
-
- Reader r = hack(is);
- InputSource ins = new InputSource(r);
- doc = builder.parse(ins);
-
- return doc;
- }
-
-
- /**
- * Method to return the MIME type of the document.
- *
- * @return String The document's MIME type.
- */
- protected abstract String getDocumentMimeType();
-
-
- /**
- * Write out Office ZIP file format.
- *
- * @param os XML <code>OutputStream</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream os) throws IOException {
- if (zip == null) {
- zip = new OfficeZip();
- }
-
- initManifestDOM();
-
- Element domEntry;
- Element manifestRoot = manifestDoc.getDocumentElement();
-
- // The EmbeddedObjects come first.
- Iterator embObjs = getEmbeddedObjects();
- while (embObjs.hasNext()) {
- EmbeddedObject obj = (EmbeddedObject)embObjs.next();
- obj.writeManifestData(manifestDoc);
-
- obj.write(zip);
- }
-
- // Add in the entry for the Pictures directory. Always present.
- domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE);
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "Pictures/");
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "");
- manifestRoot.appendChild(domEntry);
-
- // Write content to the Zip file and then write any of the optional
- // data, if it exists.
- zip.setContentXMLBytes(docToBytes(contentDoc));
-
- domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE);
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "content.xml");
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml");
-
- manifestRoot.appendChild(domEntry);
-
- if (styleDoc != null) {
- zip.setStyleXMLBytes(docToBytes(styleDoc));
-
- domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE);
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "styles.xml");
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml");
- manifestRoot.appendChild(domEntry);
- }
-
- if (metaDoc != null) {
- zip.setMetaXMLBytes(docToBytes(metaDoc));
-
- domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE);
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "meta.xml");
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml");
- manifestRoot.appendChild(domEntry);
- }
-
- if (settingsDoc != null) {
- zip.setSettingsXMLBytes(docToBytes(settingsDoc));
-
- domEntry = manifestDoc.createElement(TAG_MANIFEST_FILE);
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "settings.xml");
- domEntry.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, "text/xml");
- manifestRoot.appendChild(domEntry);
- }
-
- zip.setManifestXMLBytes(docToBytes(manifestDoc));
-
- zip.write(os);
- }
-
-
- /**
- * Write out Office ZIP file format.
- *
- * @param os XML <code>OutputStream</code>.
- * @param isZip <code>boolean</code>
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream os, boolean isZip) throws IOException {
-
- // Create an OfficeZip object if one does not exist.
- if (isZip){
- write(os);
- }
- else{
- try{
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder= builderFactory.newDocumentBuilder();
- DOMImplementation domImpl = builder.getDOMImplementation();
- DocumentType docType =domImpl.createDocumentType("office:document","-//OpenOffice.org//DTD OfficeDocument 1.0//EN",null);
- org.w3c.dom.Document newDoc = domImpl.createDocument("http://openoffice.org/2000/office","office:document",null);
-
-
- Element rootElement=newDoc.getDocumentElement();
- rootElement.setAttribute("xmlns:office","http://openoffice.org/2000/office");
- rootElement.setAttribute("xmlns:style","http://openoffice.org/2000/style" );
- rootElement.setAttribute("xmlns:text","http://openoffice.org/2000/text");
- rootElement.setAttribute("xmlns:table","http://openoffice.org/2000/table");
-
- rootElement.setAttribute("xmlns:draw","http://openoffice.org/2000/drawing");
- rootElement.setAttribute("xmlns:fo","http://www.w3.org/1999/XSL/Format" );
- rootElement.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink" );
- rootElement.setAttribute("xmlns:dc","http://purl.org/dc/elements/1.1/" );
- rootElement.setAttribute("xmlns:meta","http://openoffice.org/2000/meta" );
- rootElement.setAttribute("xmlns:number","http://openoffice.org/2000/datastyle" );
- rootElement.setAttribute("xmlns:svg","http://www.w3.org/2000/svg" );
- rootElement.setAttribute("xmlns:chart","http://openoffice.org/2000/chart" );
- rootElement.setAttribute("xmlns:dr3d","http://openoffice.org/2000/dr3d" );
- rootElement.setAttribute("xmlns:math","http://www.w3.org/1998/Math/MathML" );
- rootElement.setAttribute("xmlns:form","http://openoffice.org/2000/form" );
- rootElement.setAttribute("xmlns:script","http://openoffice.org/2000/script" );
- rootElement.setAttribute("xmlns:config","http://openoffice.org/2001/config" );
- // #i41033# OASIS format needs the "office:class" set.
- if(getDocumentMimeType() == SXC_MIME_TYPE)
- rootElement.setAttribute("office:class","spreadsheet" );
- else if(getDocumentMimeType() == SXW_MIME_TYPE)
- rootElement.setAttribute("office:class","text" );
- rootElement.setAttribute("office:version","1.0");
-
-
- NodeList nodeList;
- Node tmpNode;
- Node rootNode = (Node)rootElement;
- if (metaDoc !=null){
- nodeList= metaDoc.getElementsByTagName(TAG_OFFICE_META);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- }if (styleDoc !=null){
- nodeList= styleDoc.getElementsByTagName(TAG_OFFICE_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- }if (settingsDoc !=null){
- nodeList= settingsDoc.getElementsByTagName(TAG_OFFICE_SETTINGS);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- }
- if (contentDoc !=null){
- nodeList= contentDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
-
- nodeList= contentDoc.getElementsByTagName(TAG_OFFICE_BODY);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- }
-
- byte contentBytes[] = docToBytes(newDoc);
- //System.out.println(new String(contentBytes));
- os.write(contentBytes);
- }
- catch(Exception exc){
- System.out.println("\nException in OfficeDocument.write():" +exc);
- }
- //byte contentBytes[] = docToBytes(contentDoc);
- }
- }
-
-
- /**
- * <p>Write out a <code>org.w3c.dom.Document</code> object into a
- * <code>byte</code> array.</p>
- *
- * <p>TODO: remove dependency on com.sun.xml.tree.XmlDocument
- * package!</p>
- *
- * @param Document DOM <code>Document</code> object.
- *
- * @return <code>byte</code> array of DOM <code>Document</code>
- * object.
- *
- * @throws IOException If any I/O error occurs.
- */
- static byte[] docToBytes(Document doc)
- throws IOException {
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- java.lang.reflect.Constructor con;
- java.lang.reflect.Method meth;
-
- String domImpl = doc.getClass().getName();
-
- /*
- * We may have multiple XML parsers in the Classpath.
- * Depending on which one is first, the actual type of
- * doc may vary. Need a way to find out which API is being
- * used and use an appropriate serialization method.
- */
- try {
- // First of all try for JAXP 1.0
- if (domImpl.equals("com.sun.xml.tree.XmlDocument")) {
-
- Debug.log(Debug.INFO, "Using JAXP");
-
- Class jaxpDoc = Class.forName("com.sun.xml.tree.XmlDocument");
-
- // The method is in the XMLDocument class itself, not a helper
- meth = jaxpDoc.getMethod("write",
- new Class[] { Class.forName("java.io.OutputStream") } );
-
- meth.invoke(doc, new Object [] { baos } );
- }
- else if (domImpl.equals("org.apache.crimson.tree.XmlDocument"))
- {
- Debug.log(Debug.INFO, "Using Crimson");
-
- Class crimsonDoc = Class.forName("org.apache.crimson.tree.XmlDocument");
- // The method is in the XMLDocument class itself, not a helper
- meth = crimsonDoc.getMethod("write",
- new Class[] { Class.forName("java.io.OutputStream") } );
-
- meth.invoke(doc, new Object [] { baos } );
- }
- else if (domImpl.equals("org.apache.xerces.dom.DocumentImpl")
- || domImpl.equals("org.apache.xerces.dom.DeferredDocumentImpl")) {
-
- Debug.log(Debug.INFO, "Using Xerces");
-
- // Try for Xerces
- Class xercesSer =
- Class.forName("org.apache.xml.serialize.XMLSerializer");
-
- // Get the OutputStream constructor
- // May want to use the OutputFormat parameter at some stage too
- con = xercesSer.getConstructor(new Class []
- { Class.forName("java.io.OutputStream"),
- Class.forName("org.apache.xml.serialize.OutputFormat") } );
-
-
- // Get the serialize method
- meth = xercesSer.getMethod("serialize",
- new Class [] { Class.forName("org.w3c.dom.Document") } );
-
-
- // Get an instance
- Object serializer = con.newInstance(new Object [] { baos, null } );
-
-
- // Now call serialize to write the document
- meth.invoke(serializer, new Object [] { doc } );
- }
- else {
- // We don't have another parser
- throw new IOException("No appropriate API (JAXP/Xerces) to serialize XML document: " + domImpl);
- }
- }
- catch (ClassNotFoundException cnfe) {
- throw new IOException(cnfe.toString());
- }
- catch (Exception e) {
- // We may get some other errors, but the bottom line is that
- // the steps being executed no longer work
- throw new IOException(e.toString());
- }
-
- byte bytes[] = baos.toByteArray();
-
- return bytes;
- }
-
-
- /**
- * Initializes a new DOM <code>Document</code> with the content
- * containing minimum OpenOffice XML tags.
- *
- * @throws IOException If any I/O error occurs.
- */
- public final void initContentDOM() throws IOException {
-
- contentDoc = createDOM(TAG_OFFICE_DOCUMENT_CONTENT);
-
- // this is a work-around for a bug in Office6.0 - not really
- // needed but StarCalc 6.0 will crash without this tag.
- Element root = contentDoc.getDocumentElement();
-
- Element child = contentDoc.createElement(TAG_OFFICE_FONT_DECLS);
- root.appendChild(child);
-
- child = contentDoc.createElement(TAG_OFFICE_AUTOMATIC_STYLES);
- root.appendChild(child);
-
- child = contentDoc.createElement(TAG_OFFICE_BODY);
- root.appendChild(child);
- }
-
- /**
- * Initializes a new DOM <code>Document</code> with the content
- * containing minimum OpenOffice XML tags.
- *
- * @throws IOException If any I/O error occurs.
- */
- public final void initSettingsDOM() throws IOException {
-
- settingsDoc = createSettingsDOM(TAG_OFFICE_DOCUMENT_SETTINGS);
-
- // this is a work-around for a bug in Office6.0 - not really
- // needed but StarCalc 6.0 will crash without this tag.
- Element root = settingsDoc.getDocumentElement();
-
- Element child = settingsDoc.createElement(TAG_OFFICE_SETTINGS);
- root.appendChild(child);
- }
-
- /**
- * Initializes a new DOM Document with styles
- * containing minimum OpenOffice XML tags.
- *
- * @throws IOException If any I/O error occurs.
- */
- public final void initStyleDOM() throws IOException {
-
- styleDoc = createDOM(TAG_OFFICE_DOCUMENT_STYLES);
- }
-
- /**
- * <p>Creates a new DOM <code>Document</code> containing minimum
- * OpenOffice XML tags.</p>
- *
- * <p>This method uses the subclass
- * <code>getOfficeClassAttribute</code> method to get the
- * attribute for <i>office:class</i>.</p>
- *
- * @param rootName root name of <code>Document</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private final Document createSettingsDOM(String rootName) throws IOException {
-
- Document doc = null;
-
- try {
-
- DocumentBuilder builder = factory.newDocumentBuilder();
- doc = builder.newDocument();
-
- } catch (ParserConfigurationException ex) {
-
- throw new OfficeDocumentException(ex);
-
- }
-
- Element root = (Element) doc.createElement(rootName);
- doc.appendChild(root);
-
- root.setAttribute("xmlns:office", "http://openoffice.org/2000/office");
- root.setAttribute("xmlns:xlink", "http://openoffice.org/1999/xlink");
- root.setAttribute("xmlns:config", "http://openoffice.org/2001/config");
- root.setAttribute("office:version", "1.0");
-
- return doc;
- }
-
-
- /**
- * <p>Creates a new DOM <code>Document</code> containing minimum
- * OpenOffice XML tags.</p>
- *
- * <p>This method uses the subclass
- * <code>getOfficeClassAttribute</code> method to get the
- * attribute for <i>office:class</i>.</p>
- *
- * @param rootName root name of <code>Document</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private final Document createDOM(String rootName) throws IOException {
-
- Document doc = null;
-
- try {
-
- DocumentBuilder builder = factory.newDocumentBuilder();
- doc = builder.newDocument();
-
- } catch (ParserConfigurationException ex) {
-
- throw new OfficeDocumentException(ex);
-
- }
-
- Element root = (Element) doc.createElement(rootName);
- doc.appendChild(root);
-
- root.setAttribute("xmlns:office", "http://openoffice.org/2000/office");
- root.setAttribute("xmlns:style", "http://openoffice.org/2000/style");
- root.setAttribute("xmlns:text", "http://openoffice.org/2000/text");
- root.setAttribute("xmlns:table", "http://openoffice.org/2000/table");
- root.setAttribute("xmlns:draw", "http://openoffice.org/2000/drawing");
- root.setAttribute("xmlns:fo", "http://www.w3.org/1999/XSL/Format");
- root.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink");
- root.setAttribute("xmlns:number", "http://openoffice.org/2000/datastyle");
- root.setAttribute("xmlns:svg", "http://www.w3.org/2000/svg");
- root.setAttribute("xmlns:chart", "http://openoffice.org/2000/chart");
- root.setAttribute("xmlns:dr3d", "http://openoffice.org/2000/dr3d");
- root.setAttribute("xmlns:math", "http://www.w3.org/1998/Math/MathML");
- root.setAttribute("xmlns:form", "http://openoffice.org/2000/form");
- root.setAttribute("xmlns:script", "http://openoffice.org/2000/script");
- root.setAttribute("office:class", getOfficeClassAttribute());
- root.setAttribute("office:version", "1.0");
-
- return doc;
- }
-
-
- /**
- * Return the <i>office:class</i> attribute value.
- *
- * @return The attribute value.
- */
- protected abstract String getOfficeClassAttribute();
-
-
- /**
- * <p>Hacked code to filter <!DOCTYPE> tag before
- * sending stream to parser.</p>
- *
- * <p>This hacked code needs to be changed later on.</p>
- *
- * <p>Issue: using current jaxp1.0 parser, there is no way
- * to turn off processing of dtds. Current set of dtds
- * have bugs, processing them will throw exceptions.</p>
- *
- * <p>This is a simple hack that assumes the whole <!DOCTYPE>
- * tag are all in the same line. This is sufficient for
- * current StarOffice 6.0 generated XML files. Since this
- * hack really needs to go away, I don't want to spend
- * too much time in making it a perfect hack.</p>
- * FIX (HJ): Removed requirement for DOCTYPE to be in one line
- * FIX (HJ): No longer removes newlines
- *
- * @param is <code>InputStream</code> to be filtered.
- *
- * @return Reader value without the <!DOCTYPE> tag.
- *
- * @throws IOException If any I/O error occurs.
- */
- private static Reader hack(InputStream is) throws IOException {
-
- BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- StringBuffer buffer = new StringBuffer(is.available());
-
- String str = null;
-
- while ((str = br.readLine()) != null) {
-
- int sIndex = str.indexOf("<!DOCTYPE");
-
- if (sIndex > -1) {
-
- buffer.append(str.substring(0, sIndex));
-
- int eIndex = str.indexOf('>', sIndex + 8 );
-
- if (eIndex > -1) {
-
- buffer.append(str.substring(eIndex + 1, str.length()));
- // FIX (HJ): Preserve the newline
- buffer.append("\n");
-
- } else {
-
- // FIX (HJ): More than one line. Search for '>' in following lines
- boolean bOK = false;
- while ((str = br.readLine())!=null) {
- eIndex = str.indexOf('>');
- if (eIndex>-1) {
- buffer.append(str.substring(eIndex+1));
- // FIX (HJ): Preserve the newline
- buffer.append("\n");
- bOK = true;
- break;
- }
- }
-
- if (!bOK) { throw new IOException("Invalid XML"); }
- }
-
- } else {
-
- buffer.append(str);
- // FIX (HJ): Preserve the newline
- buffer.append("\n");
- }
- }
-
- StringReader r = new StringReader(buffer.toString());
- return r;
- }
-
- /**
- * <p>Transform the InputStream to a Reader Stream.</p>
- *
- * <p>This hacked code needs to be changed later on.</p>
- *
- * <p>Issue: the new oasis input file stream means
- * that the old input stream fails. see #i33702# </p>
- *
- * @param is <code>InputStream</code> to be filtered.
- *
- * @return Reader value of the InputStream().
- *
- * @throws IOException If any I/O error occurs.
- */
- private static Reader secondHack(InputStream is) throws IOException {
-
- BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- char[] charArray = new char[is.available()];
-
- br.read(charArray,0,is.available());
- String sStr = new String(charArray);
- StringBuffer sBuf = new StringBuffer(is.available());
- // ensure there is no trailing garbage after the end of the stream.
- int sIndex = sStr.lastIndexOf("</office:document>");
- sBuf.append(sStr.substring(0, sIndex));
- sBuf.append("</office:document>");
- StringReader r = new StringReader(sBuf.toString());
- return r;
- }
-
-
- /**
- * Method to create the initial entries in the manifest.xml file stored
- * in an SX? file.
- */
- private void initManifestDOM() throws IOException {
-
- try {
- DocumentBuilder builder = factory.newDocumentBuilder();
- DOMImplementation domImpl = builder.getDOMImplementation();
-
- DocumentType docType = domImpl.createDocumentType(TAG_MANIFEST_ROOT,
- "-//OpenOffice.org//DTD Manifest 1.0//EN",
- "Manifest.dtd");
- manifestDoc = domImpl.createDocument("manifest", TAG_MANIFEST_ROOT, docType);
- } catch (ParserConfigurationException ex) {
- throw new OfficeDocumentException(ex);
- }
-
- // Add the <manifest:manifest> entry
- Element manifestRoot = manifestDoc.getDocumentElement();
-
- manifestRoot.setAttribute("xmlns:manifest", "http://openoffice.org/2001/manifest");
-
- Element docRoot = manifestDoc.createElement(TAG_MANIFEST_FILE);
-
- docRoot.setAttribute(ATTRIBUTE_MANIFEST_FILE_PATH, "/");
- docRoot.setAttribute(ATTRIBUTE_MANIFEST_FILE_TYPE, getDocumentMimeType());
-
- manifestRoot.appendChild(docRoot);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java
deleted file mode 100644
index 0de5f1f9d9ef..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeDocumentException.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
-import org.openoffice.xmerge.util.Resources;
-
-/**
- * Used by OfficeDocument to encapsulate exceptions. It will add
- * more details to the message string if it is of type
- * <code>SAXParseException</code>.
- *
- * @author Herbie Ong
- */
-
-public final class OfficeDocumentException extends IOException {
-
- StringBuffer message = null;
-
-
- /**
- * Constructor, capturing additional information from the
- * <code>SAXException</code>.
- *
- * @param e The <code>SAXException</code>.
- */
- public OfficeDocumentException(SAXException e) {
- super(e.toString());
- message = new StringBuffer();
- if (e instanceof SAXParseException) {
- String msgParseError =
- Resources.getInstance().getString("PARSE_ERROR");
- String msgLine =
- Resources.getInstance().getString("LINE");
- String msgColumn =
- Resources.getInstance().getString("COLUMN");
- String msgPublicId =
- Resources.getInstance().getString("PUBLIC_ID");
- String msgSystemId =
- Resources.getInstance().getString("SYSTEM_ID");
- SAXParseException spe = (SAXParseException) e;
- message.append(msgParseError);
- message.append(": ");
- message.append(msgLine);
- message.append(": ");
- message.append(spe.getLineNumber());
- message.append(", ");
- message.append(msgColumn);
- message.append(": ");
- message.append(spe.getColumnNumber());
- message.append(", ");
- message.append(msgSystemId);
- message.append(": ");
- message.append(spe.getSystemId());
- message.append(", ");
- message.append(msgPublicId);
- message.append(": ");
- message.append(spe.getPublicId());
- message.append("\n");
- }
-
- // if there exists an embedded exception
- Exception ex = e.getException();
- if (ex != null) {
- message.append(ex.getMessage());
- }
- }
-
-
- /**
- * Constructor, creates exception with provided message.
- *
- * @param s Message value for the exception.
- */
- public OfficeDocumentException(String s) {
- super(s);
- }
-
-
- /**
- * Constructor, creates exception with the message
- * corresponding to the message value of the provided
- * exception.
- *
- * @param e The Exception.
- */
- public OfficeDocumentException(Exception e) {
- super(e.getMessage());
- }
-
-
- /**
- * Returns the message value for the <code>Exception</code>.
- *
- * @return The message value for the <code>Exception</code>.
- */
- public String getMessage() {
- return message.toString() + super.getMessage();
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java b/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java
deleted file mode 100644
index cfd7bcf42049..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/OfficeZip.java
+++ /dev/null
@@ -1,458 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-import java.util.List;
-import java.util.ListIterator;
-import java.util.LinkedList;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.CRC32;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-import java.io.ByteArrayOutputStream;
-
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * Class used by {@link
- * org.openoffice.xmerge.converter.OfficeDocument
- * OfficeDocument} to handle reading and writing
- * from a ZIP file, as well as storing ZIP entries.
- *
- * @author Herbie Ong
- */
-class OfficeZip {
-
- /** File name of the XML file in a zipped document. */
- private final static String CONTENTXML = "content.xml";
-
- private final static String STYLEXML = "styles.xml";
- private final static String METAXML = "meta.xml";
- private final static String SETTINGSXML = "settings.xml";
- private final static String MANIFESTXML = "META-INF/manifest.xml";
-
- private final static int BUFFERSIZE = 1024;
-
- private List entryList = null;
-
- private int contentIndex = -1;
- private int styleIndex = -1;
- private int metaIndex = -1;
- private int settingsIndex = -1;
- private int manifestIndex = -1;
-
- /** Default constructor. */
- OfficeZip() {
-
- entryList = new LinkedList();
- }
-
-
- /**
- * <p>Read each zip entry in the <code>InputStream</code> object
- * and store in entryList both the <code>ZipEntry</code> object
- * as well as the bits of each entry. Call this method before
- * calling the <code>getContentXMLBytes</code> method or the
- * <code>getStyleXMLBytes</code> method.</p>
- *
- * <p>Keep track of the CONTENTXML and STYLEXML using
- * contentIndex and styleIndex, respectively.</p>
- *
- * @param is <code>InputStream</code> object to read.
- *
- * @throws IOException If any I/O error occurs.
- */
- void read(InputStream is) throws IOException {
-
- ZipInputStream zis = new ZipInputStream(is);
- ZipEntry ze = null;
- int i = -1;
-
- while ((ze = zis.getNextEntry()) != null) {
-
- String name = ze.getName();
-
- Debug.log(Debug.TRACE, "reading entry: " + name);
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- int len = 0;
- byte buffer[] = new byte[BUFFERSIZE];
-
- while ((len = zis.read(buffer)) > 0) {
- baos.write(buffer, 0, len);
- }
-
- byte bytes[] = baos.toByteArray();
- Entry entry = new Entry(ze,bytes);
-
- entryList.add(entry);
-
- i++;
-
- if (name.equalsIgnoreCase(CONTENTXML)) {
- contentIndex = i;
- }
- else if (name.equalsIgnoreCase(STYLEXML)) {
- styleIndex = i;
- }
- else if (name.equalsIgnoreCase(METAXML)) {
- metaIndex = i;
- }
- else if (name.equalsIgnoreCase(SETTINGSXML)) {
- settingsIndex = i;
- }
- else if (name.equalsIgnoreCase(MANIFESTXML)) {
- manifestIndex = i;
- }
-
- }
-
- zis.close();
- }
-
-
- /**
- * This method returns the CONTENTXML file in a
- * <code>byte</code> array. It returns null if there is no
- * CONTENTXML in this zip file.
- *
- * @return CONTENTXML in a <code>byte</code> array.
- */
- byte[] getContentXMLBytes() {
-
- return getEntryBytes(contentIndex);
- }
-
-
- /**
- * This method returns the STYLEXML file in a
- * <code>byte</code> array. It returns null if there is
- * no STYLEXML in this zip file.
- *
- * @return STYLEXML in a <code>byte</code> array.
- */
- byte[] getStyleXMLBytes() {
-
- return getEntryBytes(styleIndex);
- }
-
- /**
- * This method returns the METAXML file in a
- * <code>byte</code> array. It returns null if there is
- * no METAXML in this zip file.
- *
- * @return METAXML in a <code>byte</code> array.
- */
- byte[] getMetaXMLBytes() {
- return getEntryBytes(metaIndex);
- }
-
- /**
- * This method returns the SETTINGSXML file in a
- * <code>byte</code> array. It returns null if there is
- * no SETTINGSXML in this zip file.
- *
- * @return SETTINGSXML in a <code>byte</code> array.
- */
- byte[] getSettingsXMLBytes() {
- return getEntryBytes(settingsIndex);
- }
-
- /**
- * This method returns the MANIFESTXML file in a <code>byte</code> array.
- * It returns null if there is no MANIFESTXML in this zip file.
- *
- * @return MANIFESTXML in a <code>byte</code> array.
- */
- byte[] getManifestXMLBytes() {
- return getEntryBytes(manifestIndex);
- }
-
- /**
- * This method returns the bytes corresponding to the entry named in the
- * parameter.
- *
- * @param name The name of the entry in the Zip file to retrieve.
- *
- * @return The data for the named entry in a <code>byte</code> array or
- * <code>null</code> if no entry is found.
- */
- byte[] getNamedBytes(String name) {
-
- // The list is not sorted, and sorting it for a binary search would
- // invalidate the indices stored for the main files.
-
- // Could improve performance by caching the name and index when
- // iterating through the ZipFile in read().
- for (int i = 0; i < entryList.size(); i++) {
- Entry e = (Entry)entryList.get(i);
-
- if (e.zipEntry.getName().equals(name)) {
- return getEntryBytes(i);
- }
- }
-
- return null;
- }
-
-
- /**
- * This method sets the bytes for the named entry. It searches for a
- * matching entry in the LinkedList. If no entry is found, a new one is
- * created.
- *
- * Writing of data is defferred to setEntryBytes().
- *
- * @param name The name of the entry to search for.
- * @param bytes The new data to write.
- */
- void setNamedBytes(String name, byte[] bytes) {
- for (int i = 0; i < entryList.size(); i++) {
- Entry e = (Entry)entryList.get(i);
-
- if (e.zipEntry.getName().equals(name)) {
- setEntryBytes(i, bytes, name);
- return;
- }
- }
-
- // If we're here, no entry was found. Call setEntryBytes with an index
- // of -1 to insert a new entry.
- setEntryBytes(-1, bytes, name);
- }
-
- /**
- * Used by the <code>getContentXMLBytes</code> method and the
- * <code>getStyleXMLBytes</code> method to return the
- * <code>byte</code> array from the corresponding
- * <code>entry</code> in the <code>entryList</code>.
- *
- * @param index Index of <code>Entry</code> object in
- * <code>entryList</code>.
- *
- * @return <code>byte</code> array associated in that
- * <code>Entry</code> object or null, if there is
- * not such <code>Entry</code>.
- */
- private byte[] getEntryBytes(int index) {
-
- byte[] bytes = null;
-
- if (index > -1) {
- Entry entry = (Entry) entryList.get(index);
- bytes = entry.bytes;
- }
- return bytes;
- }
-
-
- /**
- * Set or replace the <code>byte</code> array for the
- * CONTENTXML file.
- *
- * @param bytes <code>byte</code> array for the
- * CONTENTXML file.
- */
- void setContentXMLBytes(byte bytes[]) {
-
- contentIndex = setEntryBytes(contentIndex, bytes, CONTENTXML);
- }
-
-
- /**
- * Set or replace the <code>byte</code> array for the
- * STYLEXML file.
- *
- * @param bytes <code>byte</code> array for the
- * STYLEXML file.
- */
- void setStyleXMLBytes(byte bytes[]) {
-
- styleIndex = setEntryBytes(styleIndex, bytes, STYLEXML);
- }
-
-
- /**
- * Set or replace the <code>byte</code> array for the
- * METAXML file.
- *
- * @param bytes <code>byte</code> array for the
- * METAXML file.
- */
- void setMetaXMLBytes(byte bytes[]) {
-
- metaIndex = setEntryBytes(metaIndex, bytes, METAXML);
- }
-
-
- /**
- * Set or replace the <code>byte</code> array for the
- * SETTINGSXML file.
- *
- * @param bytes <code>byte</code> array for the
- * SETTINGSXML file.
- */
- void setSettingsXMLBytes(byte bytes[]) {
-
- settingsIndex = setEntryBytes(settingsIndex, bytes, SETTINGSXML);
- }
-
-
- /**
- * Set or replace the <code>byte</code> array for the MANIFESTXML file.
- *
- * @param bytes <code>byte</code> array for the MANIFESTXML file.
- */
- void setManifestXMLBytes(byte bytes[]) {
- manifestIndex = setEntryBytes(manifestIndex, bytes, MANIFESTXML);
- }
-
- /**
- * <p>Used by the <code>setContentXMLBytes</code> method and
- * the <code>setStyleXMLBytes</code> to either replace an
- * existing <code>Entry</code>, or create a new entry in
- * <code>entryList</code>.</p>
- *
- * <p>If there is an <code>Entry</code> object within
- * entryList that corresponds to the index, replace the
- * <code>ZipEntry</code> info.</p>
- *
- * @param index Index of <code>Entry</code> to modify.
- * @param bytes <code>Entry</code> value.
- * @param name Name of <code>Entry</code>.
- *
- * @return Index of value added or modified in entryList
- */
- private int setEntryBytes(int index, byte bytes[], String name) {
-
- if (index > -1) {
-
- // replace existing entry in entryList
-
- Entry entry = (Entry) entryList.get(index);
- name = entry.zipEntry.getName();
- int method = entry.zipEntry.getMethod();
-
- ZipEntry ze = createZipEntry(name, bytes, method);
-
- entry.zipEntry = ze;
- entry.bytes= bytes;
-
- } else {
-
- // add a new entry into entryList
- ZipEntry ze = createZipEntry(name, bytes, ZipEntry.DEFLATED);
- Entry entry = new Entry(ze, bytes);
- entryList.add(entry);
- index = entryList.size() - 1;
- }
-
- return index;
- }
-
-
- /**
- * Write out the ZIP entries into the <code>OutputStream</code>
- * object.
- *
- * @param os <code>OutputStream</code> object to write ZIP.
- *
- * @throws IOException If any ZIP I/O error occurs.
- */
- void write(OutputStream os) throws IOException {
-
- Debug.log(Debug.TRACE, "Writing out the following entries into zip.");
-
- ZipOutputStream zos = new ZipOutputStream(os);
-
- ListIterator iterator = entryList.listIterator();
-
- while (iterator.hasNext()) {
-
- Entry entry = (Entry) iterator.next();
- ZipEntry ze = entry.zipEntry;
-
- String name = ze.getName();
-
- Debug.log(Debug.TRACE, "... " + name);
-
- zos.putNextEntry(ze);
- zos.write(entry.bytes);
- }
-
- zos.close();
- }
-
-
- /**
- * Creates a <code>ZipEntry</code> object based on the given params.
- *
- * @param name Name for the <code>ZipEntry</code>.
- * @param bytes <code>byte</code> array for <code>ZipEntry</code>.
- * @param method ZIP method to be used for <code>ZipEntry</code>.
- *
- * @return A <code>ZipEntry</code> object.
- */
- private ZipEntry createZipEntry(String name, byte bytes[], int method) {
-
- ZipEntry ze = new ZipEntry(name);
-
- ze.setMethod(method);
- ze.setSize(bytes.length);
-
- CRC32 crc = new CRC32();
- crc.reset();
- crc.update(bytes);
- ze.setCrc(crc.getValue());
-
- ze.setTime(System.currentTimeMillis());
-
- return ze;
- }
-
- /**
- * This inner class is used as a data structure for holding
- * a <code>ZipEntry</code> info and its corresponding bytes.
- * These are stored in entryList.
- */
- private class Entry {
-
- ZipEntry zipEntry = null;
- byte bytes[] = null;
-
- Entry(ZipEntry zipEntry, byte bytes[]) {
- this.zipEntry = zipEntry;
- this.bytes = bytes;
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java
deleted file mode 100644
index 10a1dbaaaed1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/ParaStyle.java
+++ /dev/null
@@ -1,607 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import java.io.IOException;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import java.lang.reflect.Constructor;
-import org.openoffice.xmerge.util.Debug;
-
-
-abstract class conversionAlgorithm {
- int I(String val) {
- return 0;
- }
-}
-
- /*
- * This algorithm expects only values in millimeters, e.g. "20.3mm".
- */
-class horizSize extends conversionAlgorithm {
- int I(String value) {
- if (value.endsWith("mm")) {
- float size = (float)0.0;
- String num = value.substring(0, value.length() - 2);
- try {
- size = Float.parseFloat(num);
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Error parsing " + value, e);
- }
- size *= 100;
- return (int)size;
- } else {
- Debug.log(Debug.ERROR, "Unexpected value (" + value
- + ") in horizSize.I()");
- return 0;
- }
- }
-}
-
-
-/*
- * This algorithm does line height - can be either millimeters or
- * a percentage.
- */
-class lineHeight extends conversionAlgorithm {
- int I(String value) {
- if (value.endsWith("mm")) {
- float size = (float)0.0;
- String num = value.substring(0, value.length() - 2);
- try {
- size = Float.parseFloat(num);
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Error parsing " + value, e);
- }
- size *= 100;
- return (int)size;
- } else if (value.endsWith("%")) {
- float size = (float)0.0;
- String num = value.substring(0, value.length() - 1);
- try {
- size = Float.parseFloat(num);
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Error parsing " + value, e);
- }
- int retval = (int) size;
- retval |= ParaStyle.LH_PCT;
- return retval;
- }
- return 0;
- }
-}
-
-
-/**
- * This class converts alignment values.
- */
-class alignment extends conversionAlgorithm {
- int I(String value) {
- if (value.equals("end"))
- return ParaStyle.ALIGN_RIGHT;
- if (value.equals("right"))
- return ParaStyle.ALIGN_RIGHT;
- if (value.equals("center"))
- return ParaStyle.ALIGN_CENTER;
- if (value.equals("justify"))
- return ParaStyle.ALIGN_JUST;
- if (value.equals("justified"))
- return ParaStyle.ALIGN_JUST;
- if (value.equals("start"))
- return ParaStyle.ALIGN_LEFT;
- if (value.equals("left"))
- return ParaStyle.ALIGN_LEFT;
- Debug.log(Debug.ERROR, "Unknown string ("
- + value + ") in alignment.I()");
- return ParaStyle.ALIGN_LEFT;
- }
-}
-
-
-/**
- * <p>This class represents a paragraph <code>Style</code>.</p>
- *
- * <p><table border="1" cellpadding="1"><tr><td>
- * Attribute </td><td>Value
- * </td></tr><tr><td>
- * MARGIN_LEFT </td><td>mm * 100
- * </td></tr><tr><td>
- * MARGIN_RIGHT </td><td>mm * 100
- * </td></tr><tr><td>
- * MARGIN_TOP </td><td>mm * 100 (space on top of paragraph)
- * </td></tr><tr><td>
- * MARGIN_BOTTOM </td><td>mm * 100
- * </td></tr><tr><td>
- * TEXT_INDENT </td><td>mm * 100 (first line indent)
- * </td></tr><tr><td>
- * LINE_HEIGHT </td><td>mm * 100, unless or'ed with LH_PCT, in which
- * case it is a percentage (e.g. 200% for double spacing)
- * Can also be or'ed with LH_ATLEAST. Value is stored
- * in bits indicated by LH_VALUEMASK.
- * </td></tr><tr><td>
- * TEXT_ALIGN </td><td>ALIGN_RIGHT, ALIGN_CENTER, ALIGN_JUST, ALIGN_LEFT
- * </td></tr></table></p>
- *
- * @author David Proulx
- */
-public class ParaStyle extends Style implements Cloneable {
-
- /** The left margin property. */
- public static final int MARGIN_LEFT = 0;
- /** The right margin property. */
- public static final int MARGIN_RIGHT = 1;
- /** The top margin property. */
- public static final int MARGIN_TOP = 2;
- /** The bottom margin property. */
- public static final int MARGIN_BOTTOM = 3;
- /** Indent left property. */
- public static final int TEXT_INDENT = 4;
- /** Indent right property. */
- public static final int LINE_HEIGHT = 5;
- /** Align text property. */
- public static final int TEXT_ALIGN = 6;
- // This must always be one more than highest property
- /** Total number of properties. */
- protected static final int NR_PROPERTIES = 7;
-
- /**
- * Array of flags indicating which attributes are set for this
- * paragraph <code>Style</code>.
- */
- protected boolean isSet[] = new boolean[NR_PROPERTIES];
- /** Array of attribute values for this paragraph <code>tyle</code>. */
- protected int value[] = new int[NR_PROPERTIES];
- /** Array of attribute names for this paragraph <code>Style</code>. */
- protected String attrName[] = {
- "fo:margin-left",
- "fo:margin-right",
- "fo:margin-top",
- "fo:margin-bottom",
- "fo:text-indent",
- "fo:line-height",
- "fo:text-align"
- };
-
- /** Array of attribute structures for this paragraph <code>Style</code>. */
- protected Class algor[] = {
- horizSize.class,
- horizSize.class,
- horizSize.class,
- horizSize.class,
- horizSize.class,
- lineHeight.class,
- alignment.class
- };
-
- /** Align right. */
- public static final int ALIGN_RIGHT = 1;
- /** Align center. */
- public static final int ALIGN_CENTER = 2;
- /** Align justified. */
- public static final int ALIGN_JUST = 3;
- /** Align left. */
- public static final int ALIGN_LEFT = 4;
-
- /** Line height percentage. */
- public static final int LH_PCT = 0x40000000;
- /** Line height minimum value. */
- public static final int LH_ATLEAST = 0x20000000;
- /** Line height mask. */
- public static final int LH_VALUEMASK = 0x00FFFFFF;
-
- /** Ignored tags. */
- private static String[] ignored = {
- "style:font-name", "fo:font-size", "fo:font-weight", "fo:color",
- "fo:language", "fo:country", "style:font-name-asian",
- "style:font-size-asian", "style:language-asian",
- "style:country-asian", "style:font-name-complex",
- "style:font-size-complex", "style:language-complex",
- "style:country-complex", "style:text-autospace", "style:punctuation-wrap",
- "style:line-break", "fo:keep-with-next", "fo:font-style",
- "text:number-lines", "text:line-number"
- };
-
-
- /**
- * Constructor for use when going from DOM to client device format.
- *
- * @param node A <i>style:style</i> <code>Node</code> which, which
- * is assumed to have <i>family</i> attribute of
- * <i>paragraph</i>.
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public ParaStyle(Node node, StyleCatalog sc) {
-
- super(node, sc);
-
- // Look for children. Only ones we care about are "style:properties"
- // nodes. If any are found, recursively traverse them, passing
- // along the style element to add properties to.
- //
- if (node.hasChildNodes()) {
- NodeList children = node.getChildNodes();
- int len = children.getLength();
- for (int i = 0; i < len; i++) {
- Node child = children.item(i);
- String name = child.getNodeName();
- if (name.equals("style:properties")) {
- NamedNodeMap childAttrNodes = child.getAttributes();
- if (childAttrNodes != null) {
- int nChildAttrNodes = childAttrNodes.getLength();
- for (int j = 0; j < nChildAttrNodes; j++) {
- Node attr = childAttrNodes.item(j);
- setAttribute(attr.getNodeName(), attr.getNodeValue());
- }
- }
- }
- }
- }
- }
-
-
- /**
- * Constructor for use when going from client device format to DOM.
- *
- * @param name Name of the <code>Style</code>. Can be null.
- * @param family Family of the <code>Style</code> - usually
- * <i>paragraph</i>, <i>text</i>, etc. Can be null.
- * @param parent Name of the parent <code>Style</code>, or null
- * if none.
- * @param attribs Array of attributes to set.
- * @param values Array of values to set.
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public ParaStyle(String name, String familyName, String parentName,
- String attribs[], String values[], StyleCatalog sc) {
- super(name, familyName, parentName, sc);
- if (attribs != null)
- for (int i = 0; i < attribs.length; i++)
- setAttribute(attribs[i], values[i]);
- }
-
-
- /**
- * Alternate constructor for use when going from client device
- * format to DOM.
- *
- * @param name Name of the <code>Style</code>. Can be null.
- * @param family Family of the <code>Style</code> - usually
- * <i>paragraph</i>, <i>text</i>, etc. Can be null.
- * @param parent Name of the parent <code>Style</code>, or
- * null if none.
- * @param attribs Array of attributes indices to set.
- * @param values Array of values to set.
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public ParaStyle(String name, String familyName, String parentName,
- int attribs[], String values[], StyleCatalog lookup) {
- super(name, familyName, parentName, lookup);
- if (attribs != null)
- for (int i = 0; i < attribs.length; i++)
- setAttribute(attribs[i], values[i]);
- }
-
-
- /**
- * This code checks whether an attribute is one that we
- * intentionally ignore.
- *
- * @param attribute The attribute to check.
- *
- * @return true if attribute can be ignored, false otherwise.
- */
- private boolean isIgnored(String attribute) {
- for (int i = 0; i < ignored.length; i++) {
- if (ignored[i].equals(attribute))
- return true;
- }
- return false;
- }
-
-
- /**
- * Set an attribute for this paragraph <code>Style</code>.
- *
- * @param attr The attribute to set.
- * @param value The attribute value to set.
- */
- public void setAttribute(String attr, String value) {
- for (int i = 0; i < NR_PROPERTIES; i++) {
- if (attr.equals(attrName[i])) {
- setAttribute(i, value);
- return;
- }
- }
- if (!isIgnored(attr))
- Debug.log(Debug.INFO, "ParaStyle Unhandled: " + attr + "=" + value);
- }
-
-
- /**
- * Check whether an attribute is set in this <code>Style</code>.
- *
- * @param attrIndex The attribute index to check.
- *
- * @return true if the attribute at specified index is set,
- * false otherwise.
- */
- public boolean isAttributeSet(int attrIndex) {
- return isSet[attrIndex];
- }
-
-
- /**
- * Get the value of an integer attribute.
- *
- * @param attrIndex Index of the attribute.
- *
- * @return Value of the attribute, 0 if not set.
- */
- public int getAttribute(int attrIndex) {
- if (isSet[attrIndex])
- return value[attrIndex];
- else return 0;
- }
-
-
- /**
- * Set an attribute for this paragraph <code>Style</code>.
- *
- * @param attr The attribute index to set.
- * @apram value The attribute value to set.
- */
- public void setAttribute(int attr, String value) {
- isSet[attr] = true;
- try {
- this.value[attr] = (((conversionAlgorithm)algor[attr].newInstance())).I(value);
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Instantiation error", e);
- }
- }
-
-
- /**
- * Return the <code>Style</code> in use.
- *
- * @return The fully-resolved copy of the <code>Style</code> in use.
- */
- public Style getResolved() {
- ParaStyle resolved = null;
- try {
- resolved = (ParaStyle)this.clone();
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Can't clone", e);
- }
-
- // Look up the parent style. (If there is no style catalog
- // specified, we can't do any lookups).
- ParaStyle parentStyle = null;
- if (sc != null) {
- if (parent != null) {
- parentStyle = (ParaStyle)sc.lookup(parent, family, null,
- this.getClass());
- if (parentStyle == null)
- Debug.log(Debug.ERROR, "parent style lookup of "
- + parent + " failed!");
- else
- parentStyle = (ParaStyle)parentStyle.getResolved();
- } else if (!name.equals("DEFAULT_STYLE")) {
- parentStyle = (ParaStyle)sc.lookup("DEFAULT_STYLE", null, null,
- this.getClass());
- }
- }
-
- // If we found a parent, for any attributes which we don't have
- // set, try to get the values from the parent.
- if (parentStyle != null) {
- parentStyle = (ParaStyle)parentStyle.getResolved();
- for (int i = 0; i < NR_PROPERTIES; i++) {
- if (!isSet[i] && parentStyle.isSet[i]) {
- resolved.isSet[i] = true;
- resolved.value[i] = parentStyle.value[i];
- }
- }
- }
- return resolved;
- }
-
-
- /**
- * Private function to return the value as an element in
- * a Comma Separated Value (CSV) format.
- *
- * @param value The value to format.
- *
- * @return The formatted value.
- */
- private static String toCSV(String value) {
- if (value != null)
- return "\"" + value + "\",";
- else
- return "\"\",";
- }
-
-
- /**
- * Private function to return the value as a last element in
- * a Comma Separated Value (CSV) format.
- *
- * @param value The value to format.
- *
- * @return The formatted value.
- */
- private static String toLastCSV(String value) {
- if (value != null)
- return "\"" + value + "\"";
- else
- return "\"\"";
- }
-
-
- /**
- * Print a Comma Separated Value (CSV) header line for the
- * spreadsheet dump.
- */
- public static void dumpHdr() {
- System.out.println(toCSV("Name") + toCSV("Family") + toCSV("parent")
- + toCSV("left mgn") + toCSV("right mgn")
- + toCSV("top mgn") + toCSV("bottom mgn") + toCSV("txt indent")
- + toCSV("line height") + toLastCSV("txt align"));
- }
-
-
- /**
- * Dump this <code>Style</code> as a Comma Separated Value (CSV)
- * line.
- */
- public void dumpCSV() {
- String attributes = "";
- for (int index = 0; index <= 6; index++) {
- if (isSet[index]) {
- attributes += toCSV("" + value[index]);
- }
- else
- attributes += toCSV(null); // unspecified
- }
- System.out.println(toCSV(name) + toCSV(family) + toCSV(parent)
- + attributes + toLastCSV(null));
- }
-
-
- /**
- * Create the <code>Node</code> with the specified elements.
- *
- * @parentDoc Parent <code>Document</code> of the
- * <code>Node</code> to create.
- * @param name Name of the <code>Node</code>.
- *
- * @return The created <code>Node</code>.
- */
- public Node createNode(org.w3c.dom.Document parentDoc, String name) {
- Element node = parentDoc.createElement(name);
- writeAttributes(node);
- return node;
- }
-
-
- /**
- * Return true if <code>style</code> is a subset of the
- * <code>Style</code>.
- *
- * @param style <code>Style</code> to check.
- *
- * @return true if <code>style</code> is a subset, false
- * otherwise.
- */
- public boolean isSubset(Style style) {
-
- if (!super.isSubset(style))
- return false;
- if (!this.getClass().isAssignableFrom(style.getClass()))
- return false;
- ParaStyle ps = (ParaStyle)style;
-
- for (int i = 0; i < NR_PROPERTIES; i++) {
- if (ps.isSet[i]) {
- // if (!isSet[i]) return false;
-
- if (i < NR_PROPERTIES - 1) {
- // Compare the actual values. We allow a margin of error
- // here because the conversion loses precision.
- int diff;
- if (value[i] > ps.value[i])
- diff = value[i] - ps.value[i];
- else
- diff = ps.value[i] - value[i];
- if (diff > 32)
- return false;
- } else {
- if (i == TEXT_ALIGN)
- if ((value[i] == 0) && (ps.value[i] == 4))
- continue;
- if (value[i] != ps.value[i])
- return false;
- }
- }
- }
- return true;
- }
-
-
- /**
- * Add <code>Style</code> attributes to the given
- * <code>Node</code>. This may involve writing child
- * <code>Node</code> objects as well.
- *
- * @param node The <code>Node</code> to add <code>Style</code>
- * attributes.
- */
- public void writeAttributes(Element node) {
- for (int i = 0; i <= TEXT_INDENT; i++) {
- if (isSet[i]) {
- double temp = value[i] / 100.0;
- String stringVal = (new Double(temp)).toString() + "mm";
- node.setAttribute(attrName[i], stringVal);
- }
- }
-
- if (isSet[LINE_HEIGHT]) {
- String stringVal;
- if ((value[LINE_HEIGHT] & LH_PCT) != 0)
- stringVal = (new Integer(value[LINE_HEIGHT] & LH_VALUEMASK)).toString() + "%";
- else {
- double temp = (value[LINE_HEIGHT] & LH_VALUEMASK) / 100.0;
- stringVal = (new Double(temp)).toString() + "mm";
- }
- node.setAttribute(attrName[LINE_HEIGHT], stringVal);
- }
-
- if (isSet[TEXT_ALIGN]) {
- String val;
- switch (value[TEXT_ALIGN]) {
- case ALIGN_RIGHT: val = "end"; break;
- case ALIGN_CENTER: val = "center"; break;
- case ALIGN_JUST: val = "justify"; break;
- case ALIGN_LEFT: val = "left"; break;
- default: val = "unknown"; break;
- }
- node.setAttribute(attrName[TEXT_ALIGN], val);
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/Style.java b/xmerge/java/org/openoffice/xmerge/converter/xml/Style.java
deleted file mode 100644
index cf8611f4e143..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/Style.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import java.io.IOException;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-
-/**
- * An object of class <code>Style</code> represents a <i>style</i>
- * in an OpenOffice document. In practice subclasses of this
- * <code>Style</code>, such as <code>TextStyle</code>,
- * <code>ParaStyle</code> are used.
- *
- * @author David Proulx
- * @see <a href="TextStyle.html">TextStyle</a>,
- * <a href="ParaStyle.html">ParaStyle</a>
- */
-public class Style {
-
- /** Name of the <code>Style</code>. */
- protected String name = null;
- /** Family of the <code>Style</code>. */
- protected String family = null;
- /** Parent of the <code>Style</code>. */
- protected String parent = null;
-
- /**
- * A reference to the <code>StyleCatalog</code> to be used for
- * looking up ancestor <code>Style</code> objects.
- */
- protected StyleCatalog sc;
-
-
- /**
- * Constructor for use when going from DOM to client device format.
- *
- * @param node A <i>style:style</i> or <i>style:default-style</i>
- * <code>Node</code> from the document being parsed.
- * No checking of <code>Node</code> is done, so if it
- * is not of the proper type the results will be
- * unpredictable.
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public Style(Node node, StyleCatalog sc) {
-
- this.sc = sc;
-
- // Run through the attributes of this node, saving
- // the ones we're interested in.
- if (node.getNodeName().equals("style:default-style"))
- name = "DEFAULT_STYLE";
- NamedNodeMap attrNodes = node.getAttributes();
- if (attrNodes != null) {
- int len = attrNodes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attrNodes.item(i);
- if (attr.getNodeName().equals("style:family"))
- family = attr.getNodeValue();
- else if (attr.getNodeName().equals("style:name")) {
- name = attr.getNodeValue();
- } else if (attr.getNodeName().equals("style:parent-style-name"))
- parent = attr.getNodeValue();
-
- }
- }
- }
-
-
- /**
- * Constructor for use when going from client device format to DOM.
- *
- * @param name Name of the <code>Style</code>. Can be null.
- * @param family Family of the <code>Style</code> - usually
- * <i>paragraph</i>, <i>text</i>, etc. Can be null.
- * @param parent Name of the parent <code>Style</code>, or null if none.
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public Style(String name, String family, String parent, StyleCatalog sc) {
- this.sc = sc;
- this.name = name;
- this.family = family;
- this.parent = parent;
- }
-
-
- /**
- * Set the <code>StyleCatalog</code> to be used when looking up the
- * <code>Style</code> parent.
- *
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public void setCatalog(StyleCatalog sc) {
- this.sc = sc;
- }
-
-
- /**
- * Returns the name of this <code>Style</code>.
- *
- * @return The name of this <code>Style</code>.
- */
- public String getName() {
- return name;
- }
-
-
- /**
- * Sets the name of this <code>Style</code>.
- *
- * @param newName The new name of this <code>Style</code>.
- */
- public void setName(String newName) {
- name = newName;
- }
-
-
- /**
- * Return the family of this <code>Style</code>.
- *
- * @return The family of this <code>Style</code>.
- */
- public String getFamily() {
- return family;
- }
-
- /**
- * Return the name of the parent of this <code>Style</code>.
- *
- * @return The parent of this <code>Style</code>.
- */
- public String getParent() {
- return parent;
- }
-
-
- /**
- * Return a <code>Style</code> object corresponding to this one, but with
- * all of the inherited information from parent <code>Style</code>
- * objects filled in. The object returned will be a new object, not a
- * reference to this object, even if it does not need any information
- * added.
- *
- * @return A resolved <code>Style</code> object in which to look up
- * ancestors.
- */
- public Style getResolved() {
- return new Style(name, family, parent, sc);
- }
-
-
- /**
- * Write a <code>Node</code> in <code>parentDoc</code>
- * representing this <code>Style</code>. Note that the
- * <code>Node</code> is returned unconnected.
- *
- * @param parentDoc Document to which new <code>Node</code> will
- * belong.
- * @param name Name to use for new <code>Node</code>.
- */
- public Node createNode(org.w3c.dom.Document parentDoc, String name) {
- // DJP: write this! Should call writeAttributes()
- return null;
- }
-
-
- /**
- * Write this <code>Style</code> object's attributes to the given
- * <code>Node</code>. This may involve writing child
- * <code>Node</code> objects as well. This is similar to the
- * <code>writeNode</code> method, but the <code>Node</code>
- * already exists, and this does <b>not</b> write the name,
- * family, and parent attributes, which are assumed to already
- * exist in the <code>Node</code>.
- *
- * @param node The <code>Node</code> to add style attributes.
- */
- public void writeAttributes(Node node) {
- }
-
-
- /**
- * Return true if <code>Style</code> is a subset of this one. Note
- * that this will return true even if <code>Style</code> is less
- * specific than this <code>Style</code>, so long as it does not
- * contradict this <code>Style</code> in any way.
- *
- * This always returns true since only subclasses of
- * <code>Style</code> contain any actual <code>Style</code>
- * information.
- *
- * @param style The <code>Style</code> to check
- *
- * @return true if the <code>Style</code> is a subset, false otherwise.
- */
- public boolean isSubset(Style style) {
- return true;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java b/xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java
deleted file mode 100644
index 689b5d47c5b4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleCatalog.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-import org.openoffice.xmerge.util.*;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import java.io.IOException;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import java.util.Vector;
-import java.lang.reflect.Constructor;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-
-/**
- * A <code>StyleCatalog</code> holds a collection of <code>Style</code>
- * objects. It is intended for use when parsing or building a DOM
- * document.
- *
- * Each entry in the <code>StyleCatalog</code> represents a
- * <code>Style</code>, and is an object which is a subclass of
- * <code>Style</code>.
- *
- * @author David Proulx
- * @see <a href="Style.html">Style</a>
- */
-public class StyleCatalog {
-
- private Vector styles; // The actual styles
-
- /**
- * Constructor
- *
- * @param initialEntries Expected number of entries to set
- * for efficiency purposes.
- */
- public StyleCatalog(int initialEntries) {
- styles = new Vector(initialEntries);
- }
-
-
- /**
- * <p>Parse the <code>Document</code> starting from <code>node</code>
- * and working downward, and add all styles found, so long as their
- * family name is listed in <code>families</code>. For each
- * family name in <code>families</code> there must be a corresponding
- * element in <code>classes</code>, which specifies the class type
- * to use for that family. All of these classes must be
- * subclasses of <code>Style</code>. There can be multiple
- * classes specified for a particular family.</p>
- *
- * <p>If <code>defaultClass</code> is non-null, then all styles that
- * are found will be added. Any <code>Style</code> whose family is
- * not listed in <code>families</code> will be added using defaultClass,
- * which, of course, must be a subclass of <code>Style</code>.
- * If <code>alwaysCreateDefault</code> is true, then a class
- * of type <code>defaultClass</code> will always be created,
- * regardless of whether there was also a match in
- * <code>families</code>.</p>
- *
- * <p>DJP Todo: make it recursive so that <code>node</code> can be
- * higher up in the <code>Document</code> tree.</p>
- *
- * @param node The node to be searched for
- * <code>Style</code> objects.
- * @param families An array of <code>Style</code> families
- * to add.
- * @param classes An array of class types corresponding
- * to the families array.
- * @param defaultClass All <code>Style</code> objects that are
- * found are added to this class.
- * @param alwaysCreateDefault A class of type <code>defaultClass</code>
- * will always be created, regardless of
- * whether there is a match in the
- * families array.
- */
- public void add(Node node, String families[], Class classes[],
- Class defaultClass, boolean alwaysCreateDefault) {
-
- if (node == null)
- return;
-
- if (families == null)
- families = new String[0];
- if (classes == null)
- classes = new Class[0];
- if (node.hasChildNodes()) {
- NodeList children = node.getChildNodes();
- int len = children.getLength();
-
- for (int i = 0; i < len; i++) {
- boolean found = false;
- Node child = children.item(i);
- String name = child.getNodeName();
- if (name.equals("style:default-style") || name.equals("style:style")) {
- String familyName = getFamilyName(child);
- if (familyName == null) {
- Debug.log(Debug.ERROR, "familyName is null!");
- continue;
- }
-
- for (int j = 0; j < families.length; j++) {
- if (families[j].equals(familyName)) {
- Class styleClass = classes[j];
- callConstructor(classes[j], child);
- found = true;
- }
- }
- if ((!found || alwaysCreateDefault) && (defaultClass != null))
- callConstructor(defaultClass, child);
- }
- }
- }
- }
-
-
- /**
- * Call the constructor of class <code>cls</code> with parameters
- * <code>node</code>, and add the resulting <code>Style</code> to
- * the catalog.
- *
- * @param cls The class whose constructor will be called.
- * @param node The constructed class will be added to this node.
- */
- private void callConstructor(Class cls, Node node) {
- Class params[] = new Class[2];
- params[0] = Node.class;
- params[1] = this.getClass();
- try {
- Constructor c = cls.getConstructor(params);
- Object p[] = new Object[2];
- p[0] = node;
- p[1] = this;
- styles.add(c.newInstance(p));
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Exception when calling constructor", e);
- }
- }
-
-
- /**
- * Add a <code>Style</code> to the catalog.
- *
- * @param s The <code>Style</code> to add.
- */
- public void add(Style s) {
- styles.addElement(s);
- }
-
-
- /**
- * Return the first <code>Style</code> matching the specified names.
- *
- * @param name Name to match, null is considered
- * <i>always match</i>.
- * @param family Family to match, null is considered
- * <i>always match</i>.
- * @param parent Parent to match, null is considered
- * <i>always match</i>.
- * @param styleClass styleClass to match, null is considered
- * <i>always match</i>.
- *
- * @return <code>Style</code> value if all parameters match,
- * null otherwise
- */
- public Style lookup(String name, String family, String parent,
- Class styleClass) {
- int nStyles = styles.size();
- for (int i = 0; i < nStyles; i++) {
- Style s = (Style)styles.elementAt(i);
- if ((name != null) && (s.getName() != null)
- && (!s.getName().equals(name)))
- continue;
- if ((family != null) && (s.getFamily() != null)
- && (!s.getFamily().equals(family)))
- continue;
- if ((parent != null) && (s.getParent() != null)
- && (!s.getParent().equals(parent)))
- continue;
- if ((styleClass != null) && (s.getClass() != styleClass))
- continue;
- if (s.getName() == null) continue; // DJP: workaround for "null name" problem
- return s;
- }
- return null; // none found
- }
-
-
- /**
- * Given a <code>Style</code> <code>s<code> return all
- * <code>Style</code> objects that match.
- *
- * @param s <code>Style</code> to match.
- *
- * @return An array of <code>Style</code> objects that match, an
- * empty array if none match.
- */
- public Style[] getMatching(Style s) {
-
- // Run through and count the matching styles so we know how big of
- // an array to allocate.
- int matchCount = 0;
- int nStyles = styles.size();
- for (int j = 0; j < nStyles; j++) {
- Style p = ((Style)styles.elementAt(j)).getResolved();
- if (p.isSubset(s)) matchCount++;
- }
-
- // Now allocate the array, and run through again, populating it.
- Style[] matchArray = new Style[matchCount];
- matchCount = 0;
- for (int j = 0; j < nStyles; j++) {
- Style p = ((Style)styles.elementAt(j)).getResolved();
- if (p.isSubset(s)) matchArray[matchCount++] = p;
- }
- return matchArray;
- }
-
-
- /**
- * Given a <code>Style</code> <code>s</code>, return the
- * <code>style</code> that is the closest match. Not currently
- * implemented.
- *
- * @param s <code>Style</code> to match.
- *
- * @return The <code>Style</code> that most closely matches.
- */
- public Style getBestMatch(Style s) {
- // DJP: is this needed?
- // DJP ToDo: implement this
- return null;
- }
-
-
- /**
- * <p>Create a <code>Node</code> named <code>name</code> in
- * <code>Document</code> <code>parentDoc</code>, and write the
- * entire <code>StyleCatalog</code> to it.</p>
- *
- * <p>Note that the resulting node is returned, but is not connected
- * into the document. Placing the output node in the document is
- * left to the caller.</p>
- *
- * @param parentDoc The <code>Document</code> to add the
- * <code>Node</code>.
- * @param name The name of the <code>Node</code> to add.
- *
- * @return The <code>Element</code> that was created.
- */
- public Element writeNode(org.w3c.dom.Document parentDoc, String name) {
- Element rootNode = parentDoc.createElement(name);
-
- int len = styles.size();
- for (int j = 0; j < len; j++) {
- Style s = (Style)styles.get(j);
-
- Element styleNode = parentDoc.createElement("style:style");
-
- if (s.getName() != null)
- styleNode.setAttribute("style:name", s.getName());
- if (s.getParent() != null)
- styleNode.setAttribute("style:parent-style-name", s.getParent());
- if (s.getFamily() != null)
- styleNode.setAttribute("style:family", s.getFamily());
-
- Element propertiesNode = (Element) s.createNode(parentDoc, "style:properties");
- // if (propertiesNode.getFirstChild() != null)
- // DJP: only add node if has children OR attributes
- if (propertiesNode != null)
- styleNode.appendChild(propertiesNode);
-
- rootNode.appendChild(styleNode);
- }
-
- return rootNode;
- }
-
-
- /**
- * Dump the <code>Style</code> table in Comma Separated Value (CSV)
- * format
- *
- * @param para If true, dump in paragraph <code>Style</code>,
- * otherwise dump in text style.
- */
- public void dumpCSV(boolean para) {
- if (!para) {
- TextStyle.dumpHdr();
- int nStyles = styles.size();
- for (int i = 0; i < nStyles; i++) {
- Style s = (Style)styles.get(i);
- if (s.getClass().equals(TextStyle.class))
- ((TextStyle)s).dumpCSV();
- }
- } else {
- ParaStyle.dumpHdr();
- int nStyles = styles.size();
- for (int i = 0; i < nStyles; i++) {
- Style s = (Style)styles.get(i);
- if (s.getClass().equals(ParaStyle.class))
- ((ParaStyle)s).dumpCSV();
- }
- }
-
- }
-
-
- /**
- * Check whether a given node represents a <code>Style</code>
- * that should be added to the catalog, and if so, return the
- * class type for it. If <code>Style</code> should not be added,
- * or if node is not a <code>Style</code>, return null.
- *
- * @param node The <code>Node</code> to be checked.
- * @param families An array of <code>Style</code> families.
- * @param classes An array of class types corresponding to the
- * families array.
- * @param defaultClass The default class.
- *
- * @return The class that is appropriate for this node.
- */
- private Class getClass(Node node, String[] families, Class[] classes,
- Class defaultClass) {
- NamedNodeMap attributes = node.getAttributes();
- if (attributes != null) {
- int len = attributes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attributes.item(i);
- if (attr.getNodeName().equals("style:family")) {
- String familyName = attr.getNodeValue();
- for (int j = 0; j < families.length; j++) {
- if (families[j].equals(familyName))
- return classes[j];
- }
- return defaultClass;
- }
- }
- }
- return null;
- }
-
-
- /**
- * Find the family attribute of a <code>Style</code> <code>Node</code>.
- *
- * @param node The <code>Node</code> to check.
- *
- * @return The family attribute, or null if one does not
- * exist.
- */
- private String getFamilyName(Node node) {
- NamedNodeMap attributes = node.getAttributes();
- if (attributes != null) {
- int len = attributes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attributes.item(i);
- if (attr.getNodeName().equals("style:family")) {
- return attr.getNodeValue();
- }
- }
- }
- return null;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleTest01.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/StyleTest01.xml
deleted file mode 100644
index ac2652c49ee6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/StyleTest01.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<office:document office:class="text" office:version="0.9" xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:zensync="haha">
-
- <!-- styles01 is four styles, named "TX01" through "TX04". Each is a
- child of its predecessor. They define properties as follows:
- fo:margin-right fo:margin-top fo:margin-bottom
- TX01 100 300
- TX02
- TX03 200
- TX04 301
- When inheritance is considered, the properties look like this:
- fo:margin-right fo:margin-top fo:margin-bottom
- TX01 100 300
- TX02 100 300
- TX03 100 200 300
- TX04 100 200 301
- DJP: change prop1, prop2, prop3 to paragraph or text properties so
- the actual classes can be tested.
- -->
- <zensync:styles01>
-
- <style:style style:name="TX01" style:family="text"
- style:class="text">
- <style:properties fo:margin-right="100" fo:margin-bottom="300"/>
- </style:style>
-
- <style:style style:name="TX02" style:family="text"
- style:parent-style-name="TX01" style:class="text">
- </style:style>
-
- <style:style style:name="TX03" style:family="text"
- style:parent-style-name="TX02" style:class="text">
- <style:properties fo:margin-top="200" />
- </style:style>
-
- <style:style style:name="TX04" style:family="text"
- style:parent-style-name="TX03" style:class="text">
- <style:properties fo:margin-bottom="301" />
- </style:style>
-
- </zensync:styles01>
-
-
-
- <office:styles>
- <style:default-style style:family="paragraph">
- <style:properties fo:color="#000000" style:font-name="Times New Roman" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-asian="Andale WT UI" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Simplified Arabic" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict">
- <style:tab-stops>
- <style:tab-stop style:position="22.05mm" style:type="default"/>
- </style:tab-stops>
- </style:properties>
- </style:default-style>
- <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
- <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text body" style:class="text">
- <style:properties style:font-name="Arial" fo:font-size="14pt" fo:margin-top="4.23mm" fo:margin-bottom="2.12mm" fo:keep-with-next="true"/>
- </style:style>
- <style:style style:name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
- <style:properties fo:margin-top="0mm" fo:margin-bottom="2.12mm"/>
- </style:style>
- <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text body" style:class="list">
- <style:properties style:font-name="Times New Roman"/>
- </style:style>
- <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
- <style:properties style:font-name="Times New Roman" fo:font-size="10pt" fo:font-style="italic" fo:margin-top="2.12mm" fo:margin-bottom="2.12mm" text:number-lines="false" text:line-number="0"/>
- </style:style>
- <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
- <style:properties style:font-name="Times New Roman" text:number-lines="false" text:line-number="0"/>
- </style:style>
- <style:style style:name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
- <style:properties fo:font-size="16pt" fo:font-weight="bold"/>
- </style:style>
- <style:style style:name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
- <style:properties fo:font-size="14pt" fo:font-style="italic" fo:font-weight="bold"/>
- </style:style>
- <style:style style:name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text body" style:class="text">
- <style:properties fo:font-size="14pt" fo:font-weight="bold"/>
- </style:style>
- <style:style style:name="First line indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
- <style:properties fo:margin-left="0mm" fo:margin-right="0mm" fo:text-indent="4.99mm"/>
- </style:style>
- <style:style style:name="Hanging indent" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
- <style:properties fo:margin-left="10mm" fo:margin-right="0mm" fo:text-indent="-4.99mm">
- <style:tab-stops>
- <style:tab-stop style:position="0mm"/>
- </style:tab-stops>
- </style:properties>
- </style:style>
- <style:style style:name="Marginalia" style:family="paragraph" style:parent-style-name="Text body" style:class="text">
- <style:properties fo:margin-left="40.01mm" fo:margin-right="0mm" fo:text-indent="0mm"/>
- </style:style>
- <style:style style:name="Salutation" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
- <style:properties text:number-lines="false" text:line-number="0"/>
- </style:style>
- <style:style style:name="Strong Emphasis" style:family="text">
- <style:properties fo:font-weight="bold"/>
- </style:style>
- <style:style style:name="Example" style:family="text">
- <style:properties style:font-name="Courier"/>
- </style:style>
- <style:style style:name="Definition" style:family="text"/>
- <style:style style:name="Line numbering" style:family="text"/>
- <style:default-style style:family="graphics">
- <style:properties svg:width="0mm" svg:height="0mm" text:anchor-type="page" text:anchor-page-number="0" svg:x="0mm" svg:y="0mm" style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" fo:background-color="transparent" fo:padding="0mm" style:editable="false"/>
- </style:default-style>
- <style:style style:name="Frame" style:family="graphics">
- <style:properties text:anchor-type="paragraph" svg:x="0mm" svg:y="0mm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:padding="1.5mm" fo:border="0.02mm solid #000000"/>
- </style:style>
- <text:outline-style>
- <text:outline-level-style text:level="1" style:num-format=""/>
- <text:outline-level-style text:level="2" style:num-format=""/>
- <text:outline-level-style text:level="3" style:num-format=""/>
- <text:outline-level-style text:level="4" style:num-format=""/>
- <text:outline-level-style text:level="5" style:num-format=""/>
- <text:outline-level-style text:level="6" style:num-format=""/>
- <text:outline-level-style text:level="7" style:num-format=""/>
- <text:outline-level-style text:level="8" style:num-format=""/>
- <text:outline-level-style text:level="9" style:num-format=""/>
- <text:outline-level-style text:level="10" style:num-format=""/>
- </text:outline-style>
- <text:footnotes-configuration style:num-format="1" text:offset="0" text:footnotes-position="page" text:start-numbering-at="document"/>
- <text:endnotes-configuration style:num-format="i" text:offset="0"/>
- <text:bibliography-configuration text:prefix="[" text:suffix="]"/>
- <text:linenumbering-configuration text:style-name="Line numbering" text:number-lines="false" text:offset="4.99mm" style:num-format="1" text:number-position="left" text:increment="5"/>
- </office:styles>
- <office:automatic-styles>
- <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
- <style:properties fo:font-style="normal" fo:font-weight="normal"/>
- </style:style>
- <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
- <style:properties fo:line-height="200%" fo:margin-top="6mm" fo:margin-bottom="20mm"/>
- </style:style>
- <style:style style:name="T1" style:family="text">
- <style:properties fo:font-style="italic"/>
- </style:style>
- <style:style style:name="T2" style:family="text">
- <style:properties fo:font-style="normal"/>
- </style:style>
- <style:style style:name="T3" style:family="text">
- <style:properties fo:font-style="normal" fo:font-weight="bold"/>
- </style:style>
- <style:style style:name="T4" style:family="text">
- <style:properties fo:font-style="normal" fo:font-weight="normal"/>
- </style:style>
- <style:style style:name="T5" style:family="text">
- <style:properties style:text-underline="double" style:text-underline-color="#000000"/>
- </style:style>
- <style:style style:name="T6" style:family="text">
- <style:properties style:text-underline="single" style:text-underline-color="#000000"/>
- </style:style>
- <style:style style:name="T7" style:family="text" style:parent-style-name="Example">
- <style:properties fo:font-size="24pt"/>
- </style:style>
- <style:style style:name="T8" style:family="text" style:parent-style-name="Definition">
- <style:properties fo:font-size="24pt"/>
- </style:style>
- <style:page-master style:name="pm1">
- <style:properties fo:page-width="209.99mm" fo:page-height="296.99mm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="25.4mm" fo:margin-bottom="25.4mm" fo:margin-left="31.75mm" fo:margin-right="31.75mm"/>
- <style:header-style/>
- <style:footer-style/>
- </style:page-master>
- </office:automatic-styles>
- <office:master-styles>
- <style:master-page style:name="Standard" style:page-master-name="pm1"/>
- </office:master-styles>
-</office:document>
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java
deleted file mode 100644
index 1652c12c6ac8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/TextStyle.java
+++ /dev/null
@@ -1,684 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// DJP ToDo: need way of specifying fg/bg colors on ws->DOM
-
-package org.openoffice.xmerge.converter.xml;
-
-import java.awt.Color;
-import java.io.IOException;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * Represents a text <code>Style</code> in an OpenOffice document.
- *
- * @author David Proulx
- */
-public class TextStyle extends Style implements Cloneable {
-
- final protected static int FIRST_ATTR = 0x01;
- /** Indicates <i>bold</i> text. */
- final public static int BOLD = 0x01;
- /** Indicates <i>italic</i> text. */
- final public static int ITALIC = 0x02;
- /** Indicates <i>underlined</i> text. */
- final public static int UNDERLINE = 0x04;
- /** Indicates <i>strike-through</i> in the text. */
- final public static int STRIKETHRU = 0x08;
- /** Indicates <i>superscripted</i> text. */
- final public static int SUPERSCRIPT = 0x10;
- /** Indicates <i>subscripted</i> text. */
- final public static int SUBSCRIPT = 0x20;
- /** Indicates the last attribute. */
- final protected static int LAST_ATTR = 0x20;
-
- /** Values of text attributes. */
- protected int values = 0;
- /** Bitwise mask of text attributes. */
- protected int mask = 0;
-
- /** Font size in points. */
- protected int sizeInPoints = 0;
- /** Font name. */
- protected String fontName = null;
- /** Font <code>Color</code>. */
- protected Color fontColor = null;
- /** Background <code>Color</code>. */
- protected Color bgColor = null;
-
- /**
- * Constructor for use when going from DOM to client device format.
- *
- * @param Node The <i>style:style</i> <code>Node</code> containing
- * the <code>Style</code>. (This <code>Node</code> is
- * assumed have a <i>family</i> attribute of <i>text</i>).
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public TextStyle(Node node, StyleCatalog sc) {
- super(node, sc);
-
- // Run through the attributes of this node, saving
- // the ones we're interested in.
- NamedNodeMap attrNodes = node.getAttributes();
- if (attrNodes != null) {
- int len = attrNodes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attrNodes.item(i);
- handleAttribute(attr.getNodeName(), attr.getNodeValue());
- }
- }
-
- // Look for children. Only ones we care about are "style:properties"
- // nodes. If any are found, recursively traverse them, passing
- // along the style element to add properties to.
- if (node.hasChildNodes()) {
- NodeList children = node.getChildNodes();
- int len = children.getLength();
- for (int i = 0; i < len; i++) {
- Node child = children.item(i);
- String name = child.getNodeName();
- if (name.equals("style:properties")) {
- NamedNodeMap childAttrNodes = child.getAttributes();
- if (childAttrNodes != null) {
- int nChildAttrNodes = childAttrNodes.getLength();
- for (int j = 0; j < nChildAttrNodes; j++) {
- Node attr = childAttrNodes.item(j);
- handleAttribute(attr.getNodeName(),
- attr.getNodeValue());
- }
- }
- }
- }
- }
- }
-
-
- /**
- * Constructor for use when going from client device format to DOM
- *
- * @param name Name of text <code>Style</code>. Can be null.
- * @param family Family of text <code>Style</code> (usually
- * <i>text</i>). Can be null.
- * @param parent Name of parent text <code>Style</code>, or null
- * for none.
- * @param mask Bitwise mask of text attributes that this text
- * <code>Style</code> will specify. Can be any
- * combination of the following, or'ed together:
- * {@link #BOLD}, {@link #ITALIC}, {@link #UNDERLINE},
- * {@link #STRIKETHRU}, {@link #SUPERSCRIPT},
- * {@link #SUBSCRIPT}. This parameter determines what
- * attributes this <code>Style</code> will specify.
- * When an attribute is specified in a
- * <code>Style</code>, its value can be either
- * <i>on</i> or <i>off</i>. The on/off value for
- * each attribute is controlled by the
- * <code>values</code> parameter.
- * @param values Values of text attributes that this text
- * <code>Style</code> will be setting. Any of the
- * attributes ({@link #BOLD}, etc) listed for
- * <code>mask</code> can be used for this.
- * @param fontSize Font size in points.
- * @param fontName Name of font.
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public TextStyle(String name, String family, String parent,
- int mask, int values, int fontSize, String fontName, StyleCatalog sc) {
- super(name, family, parent, sc);
- this.mask = mask;
- this.values = values;
- this.sizeInPoints = fontSize;
- this.fontName = fontName;
- }
-
-
- /**
- * Parse a color specification of the form <i>#rrggbb</i>
- *
- * @param value <code>Color</code> specification to parse.
- *
- * @returns The <code>Color</code> associated the value.
- */
- private Color parseColorString(String value) {
- // Assume color value is of form #rrggbb
- String r = value.substring(1, 3);
- String g = value.substring(3, 5);
- String b = value.substring(5, 7);
- int red = 0;
- int green = 0;
- int blue = 0;
- try {
- red = Integer.parseInt(r, 16);
- green = Integer.parseInt(g, 16);
- blue = Integer.parseInt(b, 16);
- } catch (NumberFormatException e) {
- Debug.log(Debug.ERROR, "Problem parsing a color string", e);
- }
- return new Color(red, green, blue);
- }
-
-
- /**
- * Set an attribute.
- *
- * @param attr The attribute to set.
- * @param value The attribute value to set.
- */
- private void handleAttribute(String attr, String value) {
-
- if (attr.equals("fo:font-weight")) {
- if (value.equals("bold")) turnAttributesOn(BOLD);
- else if (value.equals("normal")) turnAttributesOff(BOLD);
- }
-
- else if (attr.equals("fo:font-style")) {
- if (value.equals("italic")) turnAttributesOn(ITALIC);
- else if (value.equals("oblique")) turnAttributesOn(ITALIC);
- else if (value.equals("normal")) turnAttributesOff(ITALIC);
- }
-
- else if (attr.equals("style:text-underline")) {
- if (value.equals("none"))
- turnAttributesOff(UNDERLINE);
- else
- turnAttributesOn(UNDERLINE);
- }
-
- else if (attr.equals("style:text-crossing-out")) {
- if (value.equals("none"))
- turnAttributesOff(STRIKETHRU);
- else
- turnAttributesOn(STRIKETHRU);
- }
-
- else if (attr.equals("style:text-position")) {
- if (value.startsWith("super "))
- turnAttributesOn(SUPERSCRIPT);
- else if (value.startsWith("sub "))
- turnAttributesOn(SUBSCRIPT);
- else if (value.startsWith("0% "))
- turnAttributesOff(SUPERSCRIPT | SUBSCRIPT);
- else {
- String firstPart = value.substring(0, value.indexOf(" "));
- if (firstPart.endsWith("%")) {
- firstPart = firstPart.substring(0, value.indexOf("%"));
- int amount;
- try {
- amount = Integer.parseInt(firstPart);
- } catch (NumberFormatException e) {
- amount = 0;
- Debug.log(Debug.ERROR, "Problem with style:text-position tag", e);
- }
- if (amount < 0) turnAttributesOn(SUBSCRIPT);
- else if (amount > 0) turnAttributesOn(SUPERSCRIPT);
- }
- }
- }
-
- else if (attr.equals("fo:font-size")) {
- if (value.endsWith("pt")) {
- String num = value.substring(0, value.length() - 2);
- sizeInPoints = Integer.parseInt(num);
- }
- }
-
- else if (attr.equals("style:font-name"))
- fontName = value;
-
- else if (attr.equals("fo:color"))
- fontColor = parseColorString(value);
-
- else if (attr.equals("style:text-background-color"))
- bgColor = parseColorString(value);
-
- else if (isIgnored(attr)) {}
-
- else {
- Debug.log(Debug.INFO, "TextStyle Unhandled: " + attr + "=" + value);
- }
- }
-
-
- /**
- * Return true if text <code>attribute</code> is set in this
- * <code>Style</code>. An attribute that is set may have a
- * value of <i>on</i> or <i>off</i>.
- *
- * @param attribute The attribute to check ({@link #BOLD},
- * {@link #ITALIC}, etc.).
- *
- * @return true if text <code>attribute</code> is set in this
- * <code>Style</code>, false otherwise.
- */
- public boolean isSet(int attribute) {
- return (!((mask & attribute) == 0));
- }
-
-
- /**
- * Return true if the <code>attribute</code> is set to <i>on</i>
- *
- * @param attribute Attribute to check ({@link #BOLD},
- * {@link #ITALIC}, etc.)
- *
- * @return true if <code>attribute</code> is set to <i>on</i>,
- * otherwise false.
- */
- public boolean getAttribute(int attribute) {
- if ((mask & attribute) == 0)
- return false;
- return (!((values & attribute) == 0));
- }
-
-
- /**
- * Return the font size for this <code>Style</code>.
- *
- * @return The font size in points
- */
- public int getFontSize() {
- return sizeInPoints;
- }
-
-
- /**
- * Return the name of the font for this <code>Style</code>.
- *
- * @return Name of font, or null if no font is specified by
- * this <code>Style</code>.
- */
- public String getFontName() {
- return fontName;
- }
-
-
- /**
- * Return the font <code>Color</code> for this <code>Style</code>.
- * Can be null if none was specified.
- *
- * @return <code>Color</code> value for this <code>Style</code>.
- * Can be null.
- */
- public Color getFontColor() {
- return fontColor;
- }
-
-
- /**
- * Return the background <code>Color</code> for this
- * <code>Style</code>. Can be null if none was specified.
- *
- * @return Background <code>Color</code> value for this
- * <code>Style</code>. Can be null.
- */
- public Color getBackgroundColor() {
- return bgColor;
- }
-
-
- /**
- * Set the font and/or background <code>Color</code> for this
- * <code>Style</code>.
- *
- * @param fontColor The font <code>Color</code> to set.
- * @param backgroundColor The background <code>Color</code> to set.
- */
- public void setColors(Color fontColor, Color backgroundColor) {
- if (fontColor != null)
- this.fontColor = fontColor;
- if (backgroundColor != null)
- this.bgColor = backgroundColor;
- }
-
-
- /**
- * Return a <code>Style</code> object corresponding to this one,
- * but with all of the inherited information from parent
- * <code>Style</code> objects filled in. The object returned will
- * be a new object, not a reference to this object, even if it does
- * not need any information added.
- *
- * @return The <code>StyleCatalog</code> in which to look up
- * ancestors.
- */
- public Style getResolved() {
- // Create a new object to return, which is a clone of this one.
- TextStyle resolved = null;
- try {
- resolved = (TextStyle)this.clone();
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Can't clone", e);
- }
-
- // Look up the parentStyle. (If there is no style catalog
- // specified, we can't do any lookups.)
- TextStyle parentStyle = null;
- if (sc != null) {
- if (parent != null) {
- parentStyle = (TextStyle)sc.lookup(parent, family, null,
- this.getClass());
- if (parentStyle == null)
- Debug.log(Debug.ERROR, "parent style lookup of "
- + parent + " failed!");
- else
- parentStyle = (TextStyle)parentStyle.getResolved();
-
- } else if (!name.equals("DEFAULT_STYLE")) {
- parentStyle = (TextStyle)sc.lookup("DEFAULT_STYLE", null,
- null, this.getClass());
- }
- }
-
- // If we found a parent, for any attributes which we don't have
- // set, try to get the values from the parent.
- if (parentStyle != null) {
- parentStyle = (TextStyle)parentStyle.getResolved();
-
- if ((sizeInPoints == 0) && (parentStyle.sizeInPoints != 0))
- resolved.sizeInPoints = parentStyle.sizeInPoints;
- if ((fontName == null) && (parentStyle.fontName != null))
- resolved.fontName = parentStyle.fontName;
- if ((fontColor == null) && (parentStyle.fontColor != null))
- resolved.fontColor = parentStyle.fontColor;
- if ((bgColor == null) && (parentStyle.bgColor != null))
- resolved.bgColor = parentStyle.bgColor;
- for (int m = BOLD; m <= SUBSCRIPT; m = m << 1) {
- if (((mask & m) == 0) && ((parentStyle.mask & m) != 0)) {
- resolved.mask |= m;
- resolved.values |= (parentStyle.mask & m);
- }
- }
-
- }
- return resolved;
- }
-
-
- /**
- * Set one or more text attributes to <i>on</i>.
- *
- * @param flags Flag values to set <i>on</i>.
- */
- private void turnAttributesOn(int flags) {
- mask |= flags;
- values |= flags;
- }
-
-
- /**
- * Set one or more text attributes to <i>off</i>.
- *
- * @param flags The flag values to set <i>off</i>.
- */
- private void turnAttributesOff(int flags) {
- mask |= flags;
- values &= ~flags;
- }
-
-
- /**
- * Private function to return the value as an element in
- * a Comma Separated Value (CSV) format.
- *
- * @param The value to format.
- *
- * @return The formatted value.
- */
- private static String toCSV(String value) {
- if (value != null)
- return "\"" + value + "\",";
- else
- return "\"\",";
- }
-
-
- /**
- * Private function to return the value as a last element in
- * a Comma Separated Value (CSV) format.
- *
- * @param value The value to format.
- *
- * @return The formatted value.
- */
- private static String toLastCSV(String value) {
- if (value != null)
- return "\"" + value + "\"";
- else
- return "\"\"";
- }
-
-
- /**
- * Print a Comma Separated Value (CSV) header line for the
- * spreadsheet dump.
- */
- public static void dumpHdr() {
- System.out.println(toCSV("Name") + toCSV("Family") + toCSV("parent")
- + toCSV("Font") + toCSV("Size")
- + toCSV("Bold") + toCSV("Italic") + toCSV("Underline")
- + toCSV("Strikethru") + toCSV("Superscript") + toLastCSV("Subscript"));
- }
-
-
- /**
- * Dump this <code>Style</code> as a Comma Separated Value (CSV) line.
- */
- public void dumpCSV() {
- String attributes = "";
- for (int bitVal = 0x01; bitVal <= 0x20; bitVal = bitVal << 1) {
- if ((bitVal & mask) != 0) {
- attributes += toCSV(((bitVal & values) != 0) ? "yes" : "no");
- } else attributes += toCSV(null); // unspecified
- }
- System.out.println(toCSV(name) + toCSV(family) + toCSV(parent)
- + toCSV(fontName) + toCSV("" + sizeInPoints) + attributes + toLastCSV(null));
- }
-
-
- /**
- * Create a new <code>Node</code> in the <code>Document</code>, and
- * write this <code>Style</code> to it.
- *
- * @param parentDoc Parent <code>Document</code> of the
- * <code>Node</code> to create.
- * @param name Name to use for the new <code>Node</code> (e.g.
- * <i>style:style</i>)
- *
- * @return Created <code>Node</code>.
- */
- public Node createNode(org.w3c.dom.Document parentDoc, String name) {
- Element node = parentDoc.createElement(name);
- writeAttributes(node);
- return node;
- }
-
-
- /**
- * Return true if <code>style</code> specifies as much or less
- * than this <code>Style</code>, and nothing it specifies
- * contradicts this <code>Style</code>.
- *
- * @param style The <code>Style</code> to check.
- *
- * @return true if <code>style</code> is a subset, false
- * otherwise.
- */
- public boolean isSubset(Style style) {
- if (style.getClass() != this.getClass())
- return false;
- TextStyle tStyle = (TextStyle)style;
-
- if (tStyle.values != values)
- return false;
-
- if (tStyle.sizeInPoints != 0) {
- if (sizeInPoints != tStyle.sizeInPoints)
- return false;
- }
-
- if (tStyle.fontName != null) {
- if (fontName == null)
- return false;
- if (!fontName.equals(tStyle.fontName))
- return false;
- }
-
- if (tStyle.fontColor != null) {
- if (fontColor == null)
- return false;
- if (!fontColor.equals(tStyle.fontColor))
- return false;
- }
-
- if (tStyle.bgColor != null) {
- if (bgColor == null)
- return false;
- if (!bgColor.equals(tStyle.bgColor))
- return false;
- }
-
- return true;
- }
-
-
- /**
- * Write this <code>Style</code> object's attributes to a
- * <code>Node</code> in the <code>Document</code>.
- *
- * @param node The <code>Node</code> to add <code>Style</code>
- * attributes.
- */
- public void writeAttributes(Element node) {
-
- if ((mask & BOLD) != 0)
- if ((values & BOLD) != 0)
- node.setAttribute("fo:font-weight", "bold");
-
- if ((mask & ITALIC) != 0)
- if ((values & ITALIC) != 0)
- node.setAttribute("fo:font-style", "italic");
-
- if ((mask & UNDERLINE) != 0)
- if ((values & UNDERLINE) != 0)
- node.setAttribute("style:text-underline", "single");
-
- if ((mask & STRIKETHRU) != 0)
- if ((values & STRIKETHRU) != 0)
- node.setAttribute("style:text-crossing-out", "single-line");
-
- if ((mask & SUPERSCRIPT) != 0)
- if ((values & SUPERSCRIPT) != 0)
- node.setAttribute("style:text-position", "super 58%");
-
- if ((mask & SUBSCRIPT) != 0)
- if ((values & SUBSCRIPT) != 0)
- node.setAttribute("style:text-position", "sub 58%");
-
- if (sizeInPoints != 0) {
- Integer fs = new Integer(sizeInPoints);
- node.setAttribute("fo:font-size", fs.toString() + "pt");
- }
-
- if (fontName != null)
- node.setAttribute("style:font-name", fontName);
-
- if (fontColor != null)
- node.setAttribute("fo:color", buildColorString(fontColor));
-
- if (bgColor != null)
- node.setAttribute("style:text-background-color",
- buildColorString(bgColor));
- }
-
-
- /**
- * Given a <code>Color</code>, return a string of the form
- * <i>#rrggbb</i>.
- *
- * @param c The <code>Color</code> value.
- *
- * @return The <code>Color</code> value in the form <i>#rrggbb</i>.
- */
- private String buildColorString(Color c) {
- int v[] = new int[3];
- v[0] = c.getRed();
- v[1] = c.getGreen();
- v[2] = c.getBlue();
- String colorString = new String("#");
- for (int i = 0; i <= 2; i++) {
- String xx = Integer.toHexString(v[i]);
- if (xx.length() < 2)
- xx = "0" + xx;
- colorString += xx;
- }
- return colorString;
- }
-
-
- private static String[] ignored = {
- "style:text-autospace", "style:text-underline-color",
- "fo:margin-left", "fo:margin-right", "fo:text-indent",
- "fo:margin-top", "fo:margin-bottom", "text:line-number",
- "text:number-lines", "style:country-asian",
- "style:font-size-asian", "style:font-name-complex",
- "style:language-complex", "style:country-complex",
- "style:font-size-complex", "style:punctuation-wrap",
- "fo:language", "fo:country",
- "style:font-name-asian", "style:language-asian",
- "style:line-break", "fo:keep-with-next"
- };
-
-
- /*
- * This code checks whether an attribute is one that we
- * intentionally ignore.
- *
- * @param attribute The attribute to check.
- *
- * @return true if <code>attribute</code> can be ignored,
- * otherwise false.
- */
- private boolean isIgnored(String attribute) {
- for (int i = 0; i < ignored.length; i++) {
- if (ignored[i].equals(attribute))
- return true;
- }
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/build.xml
deleted file mode 100644
index 25093212ca10..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/build.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxc_xml" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxc_xml"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/EmbeddedObject.java"/>
- <include name="${package}/EmbeddedBinaryObject.java"/>
- <include name="${package}/EmbeddedXMLObject.java"/>
- <include name="${package}/OfficeConstants.java"/>
- <include name="${package}/OfficeZip.java"/>
- <include name="${package}/OfficeDocument.java"/>
- <include name="${package}/OfficeDocumentException.java"/>
- <include name="${package}/ParaStyle.java"/>
- <include name="${package}/StyleCatalog.java"/>
- <include name="${package}/Style.java"/>
- <include name="${package}/TextStyle.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/makefile.mk
deleted file mode 100644
index 89bf15133228..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxc_xml
-PRJ=../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/package.html
deleted file mode 100644
index 392e85018dca..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/package.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.util package</title>
-</head>
-
-<body bgcolor="white">
-
-<p><code>Document</code> and <code>PluginFactory</code> implementations
-for XML based formats.
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java
deleted file mode 100644
index 0155224a5740..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/BookSettings.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import java.awt.Point;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.XmlUtil;
-
-/**
- * This is a class representing the different attributes for a worksheet
- * contained in settings.xml.
- *
- * @author Martin Maher
- */
-public class BookSettings implements OfficeConstants {
-
- /** A w3c <code>Document</code>. */
- private org.w3c.dom.Document settings = null;
-
- private boolean hasColumnRowHeaders = true;
- private String activeSheet = new String();
- private Vector worksheetSettings = new Vector();
-
- /**
- * Default Constructor for a <code>BookSettings</code>
- *
- * @param dimension if it's a row the height, a column the width
- * @param repeated
- */
- public BookSettings(Node root) {
- readNode(root);
- }
-
- /**
- * Default Constructor for a <code>BookSettings</code>
- *
- * @param worksheetSettings if it's a row the height, a column the width
- */
- public BookSettings(Vector worksheetSettings) {
- this.worksheetSettings = worksheetSettings;
- }
-
- /**
- *
- */
- public void setColumnRowHeaders(boolean hasColumnRowHeaders) {
- this.hasColumnRowHeaders = hasColumnRowHeaders;
- }
-
- /**
- *
- */
- public boolean hasColumnRowHeaders() {
- return hasColumnRowHeaders;
- }
-
- /**
- * Gets the <code>Vector</code> of <code>SheetSettings</code>
- *
- * @return <code>Vector</code> of <code>SheetSettings</code>
- */
- public Vector getSheetSettings() {
- return worksheetSettings;
- }
-
- /**
- * Gets the active sheet name
- *
- * @return the active sheet name
- */
- public String getActiveSheet() {
-
- return activeSheet;
- }
-
- /**
- * Sets the active sheet name
- *
- * @param activeSheet the active sheet name
- */
- public void setActiveSheet(String activeSheet) {
-
- this.activeSheet = activeSheet;
- }
-
-
- /**
- * Adds an XML entry for a particular setting
- *
- * @param root the root node at which to add the xml entry
- * @param attriute the name of the attribute to add
- * @param type the attribute type (int, short etc)
- * @param value the value of the attribute
- */
- private void addConfigItem(Node root, String attribute, String type, String value) {
-
- Element configItem = settings.createElement(TAG_CONFIG_ITEM);
- configItem.setAttribute(ATTRIBUTE_CONFIG_NAME, attribute);
- configItem.setAttribute(ATTRIBUTE_CONFIG_TYPE, type);
-
- configItem.appendChild(settings.createTextNode(value));
-
- root.appendChild(configItem);
- }
-
- /**
- * Writes out a settings.xml entry for this BookSettings object
- *
- * @param settings a <code>Document</code> object representing the settings.xml
- * @param root the root xml node to add to
- */
- public void writeNode(org.w3c.dom.Document settings, Node root) {
-
- this.settings = settings;
- Element configItemMapNamed = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_NAMED);
- configItemMapNamed.setAttribute(ATTRIBUTE_CONFIG_NAME, "Tables");
- for(Enumeration e = worksheetSettings.elements();e.hasMoreElements();) {
- SheetSettings s = (SheetSettings) e.nextElement();
- s.writeNode(settings, configItemMapNamed);
- }
- addConfigItem(root, "ActiveTable", "string", activeSheet);
- String booleanValue = Boolean.toString(hasColumnRowHeaders);
- addConfigItem(root, "HasColumnRowHeaders", "boolean", booleanValue);
- root.appendChild(configItemMapNamed);
- }
-
- /**
- * Sets a variable based on a String value read from XML
- *
- * @param name xml name of the attribute to set
- * @param value String value fo the attribute
- */
- public void addAttribute(String name, String value) {
-
- if(name.equals("ActiveTable")) {
- activeSheet = value;
- } else if(name.equals("HasColumnRowHeaders")) {
- Boolean b = Boolean.valueOf(value);
- hasColumnRowHeaders = b.booleanValue();
- }
- }
-
- /**
- * Reads document settings from xml and inits SheetSettings variables
- *
- * @param root XML Node to read from
- */
- public void readNode(Node root) {
-
- if (root.hasChildNodes()) {
-
- NodeList nodeList = root.getChildNodes();
- int len = nodeList.getLength();
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_CONFIG_ITEM)) {
-
- NamedNodeMap cellAtt = child.getAttributes();
-
- Node configNameNode =
- cellAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME);
-
- String name = configNameNode.getNodeValue();
- NodeList nodeList2 = child.getChildNodes();
- int len2 = nodeList2.getLength();
- String s = "";
- for (int j = 0; j < len2; j++) {
- Node child2 = nodeList2.item(j);
- if (child2.getNodeType() == Node.TEXT_NODE) {
- s = child2.getNodeValue();
- }
- }
- addAttribute(name, s);
-
- } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_NAMED)) {
-
- readNode(child);
-
- } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_ENTRY)) {
-
- SheetSettings s = new SheetSettings(child);
- worksheetSettings.add(s);
-
- } else {
-
- Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java
deleted file mode 100644
index 4882d7e09d80..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/CellStyle.java
+++ /dev/null
@@ -1,515 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.awt.Color;
-import java.io.IOException;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.Style;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * Represents a text <code>Style</code> in an OpenOffice document.
- *
- * @author Martin Maher
- */
-public class CellStyle extends Style implements Cloneable {
-
- private Format fmt = new Format();
-
- /**
- * Constructor for use when going from DOM to client device format.
- *
- * @param Node The <i>style:style</i> <code>Node</code> containing
- * the <code>Style</code>. (This <code>Node</code> is
- * assumed have a <i>family</i> attribute of <i>text</i>).
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public CellStyle(Node node, StyleCatalog sc) {
- super(node, sc);
-
- // Run through the attributes of this node, saving
- // the ones we're interested in.
- NamedNodeMap attrNodes = node.getAttributes();
- if (attrNodes != null) {
- int len = attrNodes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attrNodes.item(i);
- handleAttribute(attr.getNodeName(), attr.getNodeValue());
- }
- }
-
- // Look for children. Only ones we care about are "style:properties"
- // nodes. If any are found, recursively traverse them, passing
- // along the style element to add properties to.
- if (node.hasChildNodes()) {
- NodeList children = node.getChildNodes();
- int len = children.getLength();
- for (int i = 0; i < len; i++) {
- Node child = children.item(i);
- String name = child.getNodeName();
- if (name.equals("style:properties")) {
- NamedNodeMap childAttrNodes = child.getAttributes();
- if (childAttrNodes != null) {
- int nChildAttrNodes = childAttrNodes.getLength();
- for (int j = 0; j < nChildAttrNodes; j++) {
- Node attr = childAttrNodes.item(j);
- handleAttribute(attr.getNodeName(),
- attr.getNodeValue());
- }
- }
- }
- }
- }
- }
-
-
- /**
- * Constructor for use when going from client device format to DOM
- *
- * @param name Name of cell <code>Style</code>. Can be null.
- * @param family Family of text <code>Style</code> (usually
- * <i>text</i>). Can be null.
- * @param parent Name of parent text <code>Style</code>, or null
- * for none.
- * @param fmt size in points.
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public CellStyle(String name, String family, String parent,Format fmt, StyleCatalog sc) {
- super(name, family, parent, sc);
- this.fmt = fmt;
- }
-
- /**
- * Returns the <code>Format</code> object for this particular style
- *
- * @return the <code>Format</code> object
- */
- public Format getFormat() {
- return fmt;
- }
-
- /**
- * Parse a color specification of the form <i>#rrggbb</i>
- *
- * @param value <code>Color</code> specification to parse.
- *
- * @return The <code>Color</code> associated the value.
- */
- private Color parseColorString(String value) {
- // Assume color value is of form #rrggbb
- String r = value.substring(1, 3);
- String g = value.substring(3, 5);
- String b = value.substring(5, 7);
- int red = 0;
- int green = 0;
- int blue = 0;
- try {
- red = Integer.parseInt(r, 16);
- green = Integer.parseInt(g, 16);
- blue = Integer.parseInt(b, 16);
- } catch (NumberFormatException e) {
- Debug.log(Debug.ERROR, "Problem parsing a color string", e);
- }
- return new Color(red, green, blue, 0);
- }
-
-
- /**
- * Set an attribute.
- *
- * @param attr The attribute to set.
- * @param value The attribute value to set.
- */
- private void handleAttribute(String attr, String value) {
-
- if (attr.equals("fo:font-weight")) {
- fmt.setAttribute(Format.BOLD, value.equals("bold"));
- }
-
- else if (attr.equals("fo:font-style")) {
- if (value.equals("italic") || value.equals("oblique"))
- fmt.setAttribute(Format.ITALIC, true);
- else if (value.equals("normal"))
- fmt.setAttribute(Format.ITALIC, false);
- }
-
- else if (attr.equals("style:text-underline")) {
- fmt.setAttribute(Format.UNDERLINE, !value.equals("none"));
- }
-
- else if (attr.equals("style:text-crossing-out")) {
- fmt.setAttribute(Format.STRIKETHRU, !value.equals("none"));
- }
-
- else if (attr.equals("style:text-position")) {
- if (value.startsWith("super "))
- fmt.setAttribute(Format.SUPERSCRIPT, true);
- else if (value.startsWith("sub "))
- fmt.setAttribute(Format.SUBSCRIPT, true);
- else if (value.startsWith("0% "))
- fmt.setAttribute(Format.SUPERSCRIPT | Format.SUBSCRIPT, false);
- else {
- String firstPart = value.substring(0, value.indexOf(" "));
- if (firstPart.endsWith("%")) {
- firstPart = firstPart.substring(0, value.indexOf("%"));
- int amount;
- try {
- amount = Integer.parseInt(firstPart);
- } catch (NumberFormatException e) {
- amount = 0;
- Debug.log(Debug.ERROR, "Problem with style:text-position tag", e);
- }
- if (amount < 0) fmt.setAttribute(Format.SUBSCRIPT, true);
- else if (amount > 0) fmt.setAttribute(Format.SUPERSCRIPT, false);
- }
- }
- }
-
- else if (attr.equals("fo:font-size")) {
- if (value.endsWith("pt")) {
- String num = value.substring(0, value.length() - 2);
- fmt.setFontSize(Integer.parseInt(num));
- }
- }
-
- else if (attr.equals("style:font-name"))
- fmt.setFontName(value);
-
- else if (attr.equals("fo:color"))
- fmt.setForeground(parseColorString(value));
-
- else if (attr.equals("fo:background-color"))
- fmt.setBackground(parseColorString(value));
-
- else if (attr.equals("fo:text-align")) {
- if(value.equals("center")) {
- fmt.setAlign(Format.CENTER_ALIGN);
- } else if(value.equals("end")) {
- fmt.setAlign(Format.RIGHT_ALIGN);
- } else if(value.equals("start")) {
- fmt.setAlign(Format.LEFT_ALIGN);
- }
- }
-
- else if (attr.equals("fo:vertical-align")) {
- if(value.equals("top")) {
- fmt.setVertAlign(Format.TOP_ALIGN);
- } else if(value.equals("middle")) {
- fmt.setVertAlign(Format.MIDDLE_ALIGN);
- } else if(value.equals("bottom")) {
- fmt.setVertAlign(Format.BOTTOM_ALIGN);
- }
- }
-
- else if (attr.equals("fo:border")) {
- fmt.setAttribute(Format.TOP_BORDER, !value.equals("none"));
- fmt.setAttribute(Format.BOTTOM_BORDER, !value.equals("none"));
- fmt.setAttribute(Format.LEFT_BORDER, !value.equals("none"));
- fmt.setAttribute(Format.RIGHT_BORDER, !value.equals("none"));
- }
- else if (attr.equals("fo:border-top")) {
- fmt.setAttribute(Format.TOP_BORDER, !value.equals("none"));
- }
- else if (attr.equals("fo:border-bottom")) {
- fmt.setAttribute(Format.BOTTOM_BORDER, !value.equals("none"));
- }
- else if (attr.equals("fo:border-left")) {
- fmt.setAttribute(Format.LEFT_BORDER, !value.equals("none"));
- }
- else if (attr.equals("fo:border-right")) {
- fmt.setAttribute(Format.RIGHT_BORDER, !value.equals("none"));
- }
- else if (attr.equals("fo:wrap-option")) {
- fmt.setAttribute(Format.WORD_WRAP, value.equals("wrap"));
- }
-
- else if (isIgnored(attr)) {}
-
- else {
- Debug.log(Debug.INFO, "CellStyle Unhandled: " + attr + "=" + value);
- }
- }
-
-
- /**
- * Return a <code>Style</code> object corresponding to this one,
- * but with all of the inherited information from parent
- * <code>Style</code> objects filled in. The object returned will
- * be a new object, not a reference to this object, even if it does
- * not need any information added.
- *
- * @return The <code>StyleCatalog</code> in which to look up
- * ancestors.
- */
- public Style getResolved() {
- // Create a new object to return, which is a clone of this one.
- CellStyle resolved = null;
- try {
- resolved = (CellStyle)this.clone();
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Can't clone", e);
- }
-
- // Look up the parentStyle. (If there is no style catalog
- // specified, we can't do any lookups.)
- CellStyle parentStyle = null;
- if (sc != null) {
- if (parent != null) {
- parentStyle = (CellStyle)sc.lookup(parent, family, null,
- this.getClass());
- if (parentStyle == null)
- Debug.log(Debug.ERROR, "parent style lookup of "
- + parent + " failed!");
- else
- parentStyle = (CellStyle)parentStyle.getResolved();
-
- } else if (!name.equals("DEFAULT_STYLE")) {
- parentStyle = (CellStyle)sc.lookup("DEFAULT_STYLE", null,
- null, this.getClass());
- }
- }
-
- // If we found a parent, for any attributes which we don't have
- // set, try to get the values from the parent.
- if (parentStyle != null) {
- parentStyle = (CellStyle)parentStyle.getResolved();
- Format parentFormat = parentStyle.getFormat();
- Format resolvedFormat = resolved.getFormat();
-
- if ((fmt.getAlign() == Format.LEFT_ALIGN) && (parentFormat.getAlign() != Format.LEFT_ALIGN))
- resolvedFormat.setAlign(parentFormat.getAlign());
- if ((fmt.getVertAlign() == Format.BOTTOM_ALIGN) && (parentFormat.getVertAlign() != Format.BOTTOM_ALIGN))
- resolvedFormat.setVertAlign(parentFormat.getVertAlign());
- if ((fmt.getFontSize() == 0) && (parentFormat.getFontSize() != 0))
- resolvedFormat.setFontSize(parentFormat.getFontSize());
- if ((fmt.getFontName() == null) && (parentFormat.getFontName() != null))
- resolvedFormat.setFontName(parentFormat.getFontName());
- if ((fmt.getForeground() == null) && (parentFormat.getForeground() != null))
- resolvedFormat.setForeground(parentFormat.getForeground());
- if ((fmt.getBackground() == null) && (parentFormat.getBackground() != null))
- resolvedFormat.setBackground(parentFormat.getBackground());
- for (int m = Format.BOLD; m <= Format.SUBSCRIPT; m = m << 1) {
- if ((fmt.getAttribute(m)) && (parentFormat.getAttribute(m))) {
- resolvedFormat.setAttribute(m, parentFormat.getAttribute(m));
- }
- }
-
- }
- return resolved;
- }
-
-
- /**
- * Create a new <code>Node</code> in the <code>Document</code>, and
- * write this <code>Style</code> to it.
- *
- * @param parentDoc Parent <code>Document</code> of the
- * <code>Node</code> to create.
- * @param name Name to use for the new <code>Node</code> (e.g.
- * <i>style:style</i>)
- *
- * @return Created <code>Node</code>.
- */
- public Node createNode(org.w3c.dom.Document parentDoc, String name) {
- Element node = parentDoc.createElement(name);
- writeAttributes(node);
- return node;
- }
-
-
- /**
- * Return true if <code>style</code> specifies as much or less
- * than this <code>Style</code>, and nothing it specifies
- * contradicts this <code>Style</code>.
- *
- * @param style The <code>Style</code> to check.
- *
- * @return true if <code>style</code> is a subset, false
- * otherwise.
- */
- public boolean isSubset(Style style) {
- if (style.getClass() != this.getClass())
- return false;
- CellStyle tStyle = (CellStyle)style;
-
- Format rhs = tStyle.getFormat();
-
- if(!fmt.isSubset(rhs))
- return false;
-
- return true;
- }
-
-
- /**
- * Write this <code>Style</code> object's attributes to a
- * <code>Node</code> in the <code>Document</code>.
- *
- * @param node The <code>Node</code> to add <code>Style</code>
- * attributes.
- */
- public void writeAttributes(Element node) {
-
- if (fmt.getAlign()==Format.RIGHT_ALIGN)
- node.setAttribute("fo:text-align", "end");
-
- if (fmt.getAlign()==Format.LEFT_ALIGN)
- node.setAttribute("fo:text-align", "start");
-
- if (fmt.getAlign()==Format.CENTER_ALIGN)
- node.setAttribute("fo:text-align", "center");
-
- if (fmt.getVertAlign()==Format.TOP_ALIGN)
- node.setAttribute("fo:vertical-align", "top");
-
- if (fmt.getVertAlign()==Format.MIDDLE_ALIGN)
- node.setAttribute("fo:vertical-align", "middle");
-
- if (fmt.getVertAlign()==Format.BOTTOM_ALIGN)
- node.setAttribute("fo:vertical-align", "bottom");
-
- if (fmt.getAttribute(Format.BOLD))
- node.setAttribute("fo:font-weight", "bold");
-
- if (fmt.getAttribute(Format.ITALIC))
- node.setAttribute("fo:font-style", "italic");
-
- if (fmt.getAttribute(Format.UNDERLINE))
- node.setAttribute("style:text-underline", "single");
-
- if (fmt.getAttribute(Format.STRIKETHRU))
- node.setAttribute("style:text-crossing-out", "single-line");
-
- if (fmt.getAttribute(Format.SUPERSCRIPT))
- node.setAttribute("style:text-position", "super 58%");
-
- if (fmt.getAttribute(Format.SUBSCRIPT))
- node.setAttribute("style:text-position", "sub 58%");
-
- if (fmt.getFontSize() != 0) {
- Integer fs = new Integer(fmt.getFontSize());
- node.setAttribute("fo:font-size", fs.toString() + "pt");
- }
-
- if (fmt.getFontName() != null)
- node.setAttribute("style:font-name", fmt.getFontName());
-
- if (fmt.getForeground() != null)
- node.setAttribute("fo:color", buildColorString(fmt.getForeground()));
-
- if (fmt.getBackground() != null)
- node.setAttribute("fo:background-color",
- buildColorString(fmt.getBackground()));
-
- if (fmt.getAttribute(Format.TOP_BORDER))
- node.setAttribute("fo:border-top", "0.0008inch solid #000000");
-
- if (fmt.getAttribute(Format.BOTTOM_BORDER))
- node.setAttribute("fo:border-bottom", "0.0008inch solid #000000");
-
- if (fmt.getAttribute(Format.RIGHT_BORDER))
- node.setAttribute("fo:border-right", "0.0008inch solid #000000");
-
- if (fmt.getAttribute(Format.LEFT_BORDER))
- node.setAttribute("fo:border-left", "0.0008inch solid #000000");
-
- if (fmt.getAttribute(Format.WORD_WRAP))
- node.setAttribute("fo:wrap-option", "wrap");
-
- }
-
-
- /**
- * Given a <code>Color</code>, return a string of the form
- * <i>#rrggbb</i>.
- *
- * @param c The <code>Color</code> value.
- *
- * @return The <code>Color</code> value in the form <i>#rrggbb</i>.
- */
- private String buildColorString(Color c) {
- int v[] = new int[3];
- v[0] = c.getRed();
- v[1] = c.getGreen();
- v[2] = c.getBlue();
- String colorString = new String("#");
- for (int i = 0; i <= 2; i++) {
- String xx = Integer.toHexString(v[i]);
- if (xx.length() < 2)
- xx = "0" + xx;
- colorString += xx;
- }
- return colorString;
- }
-
-
- private static String[] ignored = {
- "style:text-autospace", "style:text-underline-color",
- "fo:margin-left", "fo:margin-right", "fo:text-indent",
- "fo:margin-top", "fo:margin-bottom", "text:line-number",
- "text:number-lines", "style:country-asian",
- "style:font-size-asian", "style:font-name-complex",
- "style:language-complex", "style:country-complex",
- "style:font-size-complex", "style:punctuation-wrap",
- "fo:language", "fo:country",
- "style:font-name-asian", "style:language-asian",
- "style:line-break", "fo:keep-with-next"
- };
-
-
- /*
- * This code checks whether an attribute is one that we
- * intentionally ignore.
- *
- * @param attribute The attribute to check.
- *
- * @return true if <code>attribute</code> can be ignored,
- * otherwise false.
- */
- private boolean isIgnored(String attribute) {
- for (int i = 0; i < ignored.length; i++) {
- if (ignored[i].equals(attribute))
- return true;
- }
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java
deleted file mode 100644
index c8511ed81ef3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnRowInfo.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-/**
- * This is a class to define a table-column structure. This can then be
- * used by plugins to write or read their own column types.
- *
- * @author Martin Maher
- */
-public class ColumnRowInfo {
-
- final public static int COLUMN = 0x01;
- final public static int ROW = 0x02;
-
- final private static int DEFAULTROWSIZE_MIN = 250;
- final private static int DEFAULTROWSIZE_MAX = 260;
-
- private int type;
- private int dimension = 0;
- private int repeated = 1;
- private boolean userDefined = true;
- private Format fmt = new Format();
-
- /**
- * Constructor for a <code>ColumnRowInfo</code>
- *
- * @param dimension if it's a row the height, a column the width
- * @param repeated
- */
- public ColumnRowInfo(int type) {
-
- this.type = type;
- }
-
- /**
- * Constructor for a <code>ColumnRowInfo</code>
- *
- * @param dimension if it's a row the height, a column the width
- * @param repeated how many times it is repeated
- * @param type whether Row or column record
- */
- public ColumnRowInfo(int dimension, int repeated, int type) {
-
- this.dimension = dimension;
- this.repeated = repeated;
- this.type = type;
- }
-
- /**
- * Constructor that includes userDefined field
- *
- * @param userDefined whether the record is manually set
- */
- public ColumnRowInfo(int dimension, int repeated, int type, boolean userDefined) {
-
- this(dimension, repeated, type);
- this.userDefined = userDefined;
- }
-
- /**
- * sets the definition
- *
- * @param newDefinition sets the definition
- */
- public void setFormat(Format fmt) {
-
- this.fmt = fmt;
- }
-
- /**
- * returns Name of the definition
- *
- * @return the name which identifies the definition
- */
- public Format getFormat() {
-
- return fmt;
- }
-
- /**
- * returns Name of the definition
- *
- * @return the name which identifies the definition
- */
- public int getSize() {
-
- return dimension;
- }
-
- /**
- * sets the definition
- *
- * @param newDefinition sets the definition
- */
- public void setSize(int dimension) {
-
- this.dimension = dimension;
- }
- /**
- * Returns the definition itself
- *
- * @return the definition
- */
- public int getRepeated() {
-
- return repeated;
- }
-
- /**
- * Returns the base Cell address
- *
- * @return the base cell address
- */
- public void setRepeated(int repeated) {
-
- this.repeated = repeated;
- }
-
- /**
- * Returns the definition itself
- *
- * @return the definition
- */
- public boolean isRow() {
-
- if(type==ROW)
- return true;
- else
- return false;
- }
-
- /**
- * Returns the base Cell address
- *
- * @return the base cell address
- */
- public boolean isColumn() {
-
- if(type==COLUMN)
- return true;
- else
- return false;
- }
-
- /**
- * Test if the row height as been set manually
- *
- * @return true if user defined otherwise false
- */
- public boolean isUserDefined() {
-
- return userDefined;
- }
-
- /**
- * Test if the row height is default
- *
- * @return true if default otherwise false
- */
- public boolean isDefaultSize() {
-
- if( type==ROW &&
- dimension>DEFAULTROWSIZE_MIN &&
- dimension<DEFAULTROWSIZE_MAX)
- return true;
- else
- return false;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java
deleted file mode 100644
index bc730d6b880b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/ColumnStyle.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.awt.Color;
-import java.io.IOException;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.Style;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.TwipsConverter;
-
-/**
- * Represents a text <code>Style</code> in an OpenOffice document.
- *
- * @author Martin Maher
- */
-public class ColumnStyle extends Style implements Cloneable {
-
- private int colWidth = 0;
- /**
- * Constructor for use when going from DOM to client device format.
- *
- * @param Node The <i>style:style</i> <code>Node</code> containing
- * the <code>Style</code>. (This <code>Node</code> is
- * assumed have a <i>family</i> attribute of <i>text</i>).
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public ColumnStyle(Node node, StyleCatalog sc) {
- super(node, sc);
-
- // Run through the attributes of this node, saving
- // the ones we're interested in.
- NamedNodeMap attrNodes = node.getAttributes();
- if (attrNodes != null) {
- int len = attrNodes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attrNodes.item(i);
- handleAttribute(attr.getNodeName(), attr.getNodeValue());
- }
- }
-
- // Look for children. Only ones we care about are "style:properties"
- // nodes. If any are found, recursively traverse them, passing
- // along the style element to add properties to.
- if (node.hasChildNodes()) {
- NodeList children = node.getChildNodes();
- int len = children.getLength();
- for (int i = 0; i < len; i++) {
- Node child = children.item(i);
- String name = child.getNodeName();
- if (name.equals("style:properties")) {
- NamedNodeMap childAttrNodes = child.getAttributes();
- if (childAttrNodes != null) {
- int nChildAttrNodes = childAttrNodes.getLength();
- for (int j = 0; j < nChildAttrNodes; j++) {
- Node attr = childAttrNodes.item(j);
- handleAttribute(attr.getNodeName(),
- attr.getNodeValue());
- }
- }
- }
- }
- }
- }
-
-
- /**
- * Constructor for use when going from client device format to DOM
- *
- * @param name Name of text <code>Style</code>. Can be null.
- * @param family Family of text <code>Style</code> (usually
- * <i>text</i>). Can be null.
- * @param parent Name of parent text <code>Style</code>, or null
- * for none.
- * @param mask the width of this column
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public ColumnStyle(String name, String family, String parent,int colWidth, StyleCatalog sc) {
- super(name, family, parent, sc);
- this.colWidth = colWidth;
- }
-
- /**
- * Returns the width of this column
- *
- * @return the <code>Format</code> object
- */
- public int getColWidth() {
- return colWidth;
- }
-
- /**
- * Sets the width of this column
- *
- * @return the <code>Format</code> object
- */
- public void setColWidth(int colWidth) {
-
- this.colWidth = colWidth;
- }
-
- /**
- * Parse a colwidth in the form "1.234cm" to twips
- *
- * @param value <code>String</code> specification to parse.
- *
- * @return The twips equivalent.
- */
- private int parseColWidth(String value) {
-
- int width = 255; // Default value
-
- if(value.indexOf("cm")!=-1) {
- float widthCM = Float.parseFloat(value.substring(0,value.indexOf("c")));
- width = TwipsConverter.cm2twips(widthCM);
- } else if(value.indexOf("inch")!=-1) {
- float widthInch = Float.parseFloat(value.substring(0,value.indexOf("i")));
- width = TwipsConverter.inches2twips(widthInch);
- }
-
- return (width);
- }
-
-
- /**
- * Set an attribute.
- *
- * @param attr The attribute to set.
- * @param value The attribute value to set.
- */
- private void handleAttribute(String attr, String value) {
-
- if (attr.equals("style:column-width")) {
- colWidth = parseColWidth(value);
- }
- else {
- Debug.log(Debug.INFO, "ColumnStyle Unhandled: " + attr + "=" + value);
- }
- }
-
-
- /**
- * Return a <code>Style</code> object corresponding to this one,
- * but with all of the inherited information from parent
- * <code>Style</code> objects filled in. The object returned will
- * be a new object, not a reference to this object, even if it does
- * not need any information added.
- *
- * @return The <code>StyleCatalog</code> in which to look up
- * ancestors.
- */
- public Style getResolved() {
- // Create a new object to return, which is a clone of this one.
- ColumnStyle resolved = null;
- try {
- resolved = (ColumnStyle)this.clone();
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Can't clone", e);
- }
-
- // Look up the parentStyle. (If there is no style catalog
- // specified, we can't do any lookups.)
- ColumnStyle parentStyle = null;
- if (sc != null) {
- if (parent != null) {
- parentStyle = (ColumnStyle)sc.lookup(parent, family, null,
- this.getClass());
- if (parentStyle == null)
- Debug.log(Debug.ERROR, "parent style lookup of "
- + parent + " failed!");
- else
- parentStyle = (ColumnStyle)parentStyle.getResolved();
-
- } else if (!name.equals("DEFAULT_STYLE")) {
- parentStyle = (ColumnStyle)sc.lookup("DEFAULT_STYLE", null,
- null, this.getClass());
- }
- }
-
- // If we found a parent, for any attributes which we don't have
- // set, try to get the values from the parent.
- if (parentStyle != null) {
- parentStyle = (ColumnStyle)parentStyle.getResolved();
-
- if ((colWidth == 0) && (parentStyle.getColWidth() != 0))
- resolved.setColWidth(parentStyle.getColWidth());
- }
- return resolved;
- }
-
-
- /**
- * Create a new <code>Node</code> in the <code>Document</code>, and
- * write this <code>Style</code> to it.
- *
- * @param parentDoc Parent <code>Document</code> of the
- * <code>Node</code> to create.
- * @param name Name to use for the new <code>Node</code> (e.g.
- * <i>style:style</i>)
- *
- * @return Created <code>Node</code>.
- */
- public Node createNode(org.w3c.dom.Document parentDoc, String name) {
- Element node = parentDoc.createElement(name);
- writeAttributes(node);
- return node;
- }
-
-
- /**
- * Return true if <code>style</code> specifies as much or less
- * than this <code>Style</code>, and nothing it specifies
- * contradicts this <code>Style</code>.
- *
- * @param style The <code>Style</code> to check.
- *
- * @return true if <code>style</code> is a subset, false
- * otherwise.
- */
- public boolean isSubset(Style style) {
- if (style.getClass() != this.getClass())
- return false;
- ColumnStyle tStyle = (ColumnStyle)style;
-
- if(colWidth!=tStyle.getColWidth())
- return false;
-
- return true;
- }
-
-
- /**
- * Write this <code>Style</code> object's attributes to a
- * <code>Node</code> in the <code>Document</code>.
- *
- * @param node The <code>Node</code> to add <code>Style</code>
- * attributes.
- */
- public void writeAttributes(Element node) {
-
- if(colWidth!=0) {
- String width = TwipsConverter.twips2cm(colWidth) + "cm";
- node.setAttribute("style:column-width", width);
- }
- }
-
-
- private static String[] ignored = {
- "fo:break-before", "fo:keep-with-next"
- };
-
-
- /*
- * This code checks whether an attribute is one that we
- * intentionally ignore.
- *
- * @param attribute The attribute to check.
- *
- * @return true if <code>attribute</code> can be ignored,
- * otherwise false.
- */
- private boolean isIgnored(String attribute) {
- for (int i = 0; i < ignored.length; i++) {
- if (ignored[i].equals(attribute))
- return true;
- }
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java
deleted file mode 100644
index eb4e03216fca..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/DocumentMergerImpl.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.MergeException;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.diff.IteratorRowCompare;
-import org.openoffice.xmerge.merger.diff.RowIterator;
-import org.openoffice.xmerge.merger.merge.SheetMerge;
-import org.openoffice.xmerge.merger.merge.PositionBaseRowMerge;
-import org.openoffice.xmerge.merger.MergeAlgorithm;
-import org.openoffice.xmerge.util.XmlUtil;
-import org.openoffice.xmerge.util.Debug;
-
-
-/**
- * Generic small device implementation of <code>DocumentMerger</code> for
- * the {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory
- * SxcPluginFactory}. Used with SXC <code>Document</code> objects.</p>
- */
-public class DocumentMergerImpl implements DocumentMerger {
-
- private ConverterCapabilities cc_;
- private org.openoffice.xmerge.Document orig = null;
-
- /**
- * Constructor
- *
- * @param doc The original &quot;Office&quot; <code>Document</code>
- * to merge.
- * @param cc The <code>ConverterCapabilities</code>.
- */
- public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) {
- cc_ = cc;
- this.orig = doc;
- }
-
- public void merge(Document modifiedDoc) throws MergeException {
-
- SxcDocument sdoc1 = (SxcDocument)orig;
- SxcDocument sdoc2 = (SxcDocument)modifiedDoc;
-
- org.w3c.dom.Document doc1 = sdoc1.getContentDOM();
- org.w3c.dom.Document doc2 = sdoc2.getContentDOM();
-
- Element elem1 = doc1.getDocumentElement();
- Element elem2 = doc2.getDocumentElement();
-
- // get table name
- NodeList workSheetList1 =
- elem1.getElementsByTagName(OfficeConstants.TAG_TABLE);
- NodeList workSheetList2 =
- elem2.getElementsByTagName(OfficeConstants.TAG_TABLE);
-
- int numOfWorkSheet = workSheetList1.getLength();
-
- for (int i=0; i < numOfWorkSheet; i++) {
- Node workSheet = workSheetList1.item(i);
-
- // try to match the workSheet
- Node matchingWorkSheet = matchWorkSheet(workSheet, workSheetList2);
-
- if (matchingWorkSheet != null) {
-
- // need to put it into a row Iterator
- // use a straight comparsion algorithm then do a merge on it
- Iterator i1 = new RowIterator(cc_, workSheet);
- Iterator i2 = new RowIterator(cc_, matchingWorkSheet);
-
- // find out the diff
- DiffAlgorithm diffAlgo = new IteratorRowCompare();
-
- // find out the paragrah level diffs
- Difference[] diffResult = diffAlgo.computeDiffs(i1, i2);
-
- if (Debug.isFlagSet(Debug.INFO)) {
- Debug.log(Debug.INFO, "Diff Result: ");
-
- for (int j = 0; j < diffResult.length; j++) {
- Debug.log(Debug.INFO, diffResult[j].debug());
- }
- }
-
- // merge back the result
- NodeMergeAlgorithm rowMerger = new PositionBaseRowMerge(cc_);
- MergeAlgorithm merger = new SheetMerge(cc_, rowMerger);
-
- Iterator result = null;
-
- merger.applyDifference(i1, i2, diffResult);
- }
- }
-
- numOfWorkSheet = workSheetList2.getLength();
-
- // for those workSheet from target don't have a matching one
- // in the original workSheet list, we add it
-
- // find out the office body node first
- NodeList officeBodyList =
- elem1.getElementsByTagName(OfficeConstants.TAG_OFFICE_BODY);
-
- Node officeBody = officeBodyList.item(0);
-
- // for each WorkSheets, try to see whether we have it or not
- for (int j=0; j < numOfWorkSheet; j++) {
- Node workSheet= workSheetList2.item(j);
-
- // try to match the workSheet
- //
- Node matchingWorkSheet = matchWorkSheet(workSheet, workSheetList1);
-
- // add the new WorkSheet to the original document iff match not
- // found
- //
- if (matchingWorkSheet == null) {
- Node cloneNode = XmlUtil.deepClone(officeBody, workSheet);
- officeBody.appendChild(cloneNode);
- }
- }
- }
-
- /**
- * Try to find a WorkSheet from the modified WorkSheetList that
- * has a matching table name from the original WorkSheet.
- *
- * @param orgSheet The original WorkSheet.
- * @param modSheetList The modified WorkSheet.
- *
- * @return The Node in modSheetList that matches the orgSheet.
- */
- private Node matchWorkSheet(Node orgSheet, NodeList modSheetList) {
-
- Node matchSheet = null;
-
- String orgTableName = ((Element)orgSheet).getAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NAME);
-
- if (orgTableName == null)
- return null;
-
- int numOfWorkSheet = modSheetList.getLength();
-
- String modTableName;
-
- for (int i=0; i < numOfWorkSheet; i++) {
- modTableName = ((Element)modSheetList.item(i)).getAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NAME);
- if (modTableName == null)
- continue;
-
- if (orgTableName.equals(modTableName)) {
- matchSheet = modSheetList.item(i);
- break;
- }
- }
-
- return matchSheet;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java
deleted file mode 100644
index 7f6dee011253..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/Format.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.awt.Color;
-
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This class specifies the format for a given spreadsheet cell.
- *
- * @author Mark Murnane
- * @author Martin Maher (Extended Style Support)
- */
-public class Format implements Cloneable {
-
- /** Horizontal Alignment Constants. */
- final public static int RIGHT_ALIGN = 0x01;
- final public static int CENTER_ALIGN = 0x02;
- final public static int LEFT_ALIGN = 0x03;
- final public static int JUST_ALIGN = 0x04;
-
- /** Vertical Alignment Constants. */
- final public static int TOP_ALIGN = 0x01;
- final public static int MIDDLE_ALIGN = 0x02;
- final public static int BOTTOM_ALIGN = 0x03;
-
- /** Indicates <i>bold</i> text. */
- final public static int BOLD = 0x01;
- /** Indicates <i>italic</i> text. */
- final public static int ITALIC = 0x02;
- /** Indicates <i>underlined</i> text. */
- final public static int UNDERLINE = 0x04;
- /** Indicates <i>strike-through</i> in the text. */
- final public static int STRIKETHRU = 0x08;
- /** Indicates <i>superscripted</i> text. */
- final public static int SUPERSCRIPT = 0x10;
- /** Indicates <i>subscripted</i> text. */
- final public static int SUBSCRIPT = 0x20;
-
- final public static int LEFT_BORDER = 0x40;
- final public static int RIGHT_BORDER = 0x80;
- final public static int TOP_BORDER = 0x100;
- final public static int BOTTOM_BORDER = 0x200;
-
- final public static int WORD_WRAP = 0x400;
-
- private int align;
- private int vertAlign;
- private String category;
- private String value;
- private String formatSpecifier;
- private int decimalPlaces;
-
- /** Font name. */
- private String fontName;
- /** Font size in points. */
- protected int sizeInPoints;
-
- private Color foreground, background;
-
- /** Values of text attributes. */
- protected int attributes = 0;
- /** Bitwise mask of text attributes. */
- protected int mask = 0;
-
- /**
- * Constructor for creating a new <code>Format</code>.
- */
- public Format() {
- clearFormatting();
- }
-
- /**
- * Constructor that creates a new <code>Format</code> object
- * by setting all the format attributes.
- *
- */
- public Format(int attributes, int fontSize, String fontName) {
-
- this.attributes = attributes;
- sizeInPoints = fontSize;
- this.fontName = fontName;
- }
-
- /**
- * Constructor for creating a new <code>Format</code> object
- * based on an existing one.
- *
- * @param fmt <code>Format</code> to copy.
- */
- public Format(Format fmt) {
- category = fmt.getCategory();
- value = fmt.getValue();
- formatSpecifier = fmt.getFormatSpecifier();
- decimalPlaces = fmt.getDecimalPlaces();
-
- attributes = fmt.attributes;
- mask = fmt.mask;
-
- fontName = fmt.getFontName();
- align = fmt.getAlign();
- vertAlign = fmt.getVertAlign();
- foreground = fmt.getForeground();
- background = fmt.getBackground();
- sizeInPoints = fmt.sizeInPoints;
- }
-
-
- /**
- * Reset this <code>Format</code> description.
- */
- public void clearFormatting() {
- category = "";
- value = "";
- formatSpecifier = "";
- decimalPlaces = 0;
- attributes = 0;
- mask = 0;
- sizeInPoints = 10;
- align = LEFT_ALIGN;
- vertAlign = BOTTOM_ALIGN;
- fontName = "";
- foreground = null;
- background = null;
- }
-
- /**
- * Set one or more text attributes to <i>on</i>.
- *
- * @param flags Flag attributes to set <i>on</i>.
- */
- public void setAttribute(int flags, boolean toggle) {
- mask |= flags;
- if(toggle) {
- attributes |= flags;
- } else {
- attributes &= ~flags;
- }
- }
-
- /**
- * Return true if the <code>attribute</code> is set to <i>on</i>
- *
- * @param attribute Attribute to check ({@link #BOLD},
- * {@link #ITALIC}, etc.)
- *
- * @return true if <code>attribute</code> is set to <i>on</i>,
- * otherwise false.
- */
- public boolean getAttribute(int attribute) {
- if ((mask & attribute) == 0)
- return false;
- return (!((attributes & attribute) == 0));
- }
-
- /**
- * Return true if text <code>attribute</code> is set in this
- * <code>Style</code>.An attribute that is set may have a
- * value of <i>on</i> or <i>off</i>.
- *
- * @param attribute The attribute to check ({@link #BOLD},
- * {@link #ITALIC}, etc.).
- *
- * @return true if text <code>attribute</code> is set in this
- * <code>Style</code>, false otherwise.
- */
- public boolean isSet(int attribute) {
- return (!((mask & attribute) == 0));
- }
-
-
- /**
- * Set the formatting category of this object, ie number, date,
- * currency.The <code>OfficeConstants</code> class contains string
- * constants for the category types.
- *
- * @see org.openoffice.xmerge.converter.xml.OfficeConstants
- *
- * @param newCategory The name of the category to be set.
- */
- public void setCategory(String newCategory) {
- category = newCategory;
- }
-
- /**
- * Return the formatting category of the object.
- *
- * @see org.openoffice.xmerge.converter.xml.OfficeConstants
- *
- * @return The formatting category of the object.
- */
- public String getCategory() {
- return category;
- }
-
- /**
- * In the case of Formula returns the value of the formula.
- *
- * @return The value of the formula
- */
- public String getValue() {
- return value;
- }
-
- /**
- * In the case of formula the contents are set as the formula string and
- * the value of the formula is a formatting attribute.
- *
- * @param newValue the formuala value
- */
- public void setValue(String newValue) {
- value = newValue;
- }
-
-
- /**
- * Set the <code>Format</code> specifier for this category.
- *
- * @param formatString The new <code>Format</code> specifier.
- */
- public void setFormatSpecifier(String formatString) {
- formatSpecifier = formatString;
- }
-
-
- /**
- * Get the <code>Format</code> specifier for this category.
- *
- * @return <code>Format</code> specifier for this category.
- */
- public String getFormatSpecifier() {
- return formatSpecifier;
- }
-
-
- /**
- * Set the precision of the number to be displayed.
- *
- * @param precision The number of decimal places to display.
- */
- public void setDecimalPlaces(int precision) {
- decimalPlaces = precision;
- }
-
-
- /**
- * Get the number of decimal places displayed.
- *
- * @return Number of decimal places.
- */
- public int getDecimalPlaces() {
- return decimalPlaces;
- }
-
-
- /**
- * Set the font used for this cell.
- *
- * @param fontName The name of the font.
- */
- public void setFontName(String fontName) {
- this.fontName = fontName;
- }
-
-
- /**
- * Get the font used for this cell.
- *
- * @return The font name.
- */
- public String getFontName() {
- return fontName;
- }
-
- /**
- * Set the font used for this cell.
- *
- * @param fontName The name of the font.
- */
- public void setFontSize(int fontSize) {
- sizeInPoints = fontSize;
- }
-
-
- /**
- * Get the font used for this cell.
- *
- * @return The font name.
- */
- public int getFontSize() {
- return sizeInPoints;
- }
-
- /**
- * Set the alignmen used for this cell.
- *
- * @param fontName The name of the font.
- */
- public void setVertAlign(int vertAlign) {
- this.vertAlign = vertAlign;
- }
-
-
- /**
- * Get the alignment used for this cell.
- *
- * @return The font name.
- */
- public int getVertAlign() {
- return vertAlign;
- }
-
- /**
- * Set the alignmen used for this cell.
- *
- * @param fontName The name of the font.
- */
- public void setAlign(int align) {
- this.align = align;
- }
-
-
- /**
- * Get the alignment used for this cell.
- *
- * @return The font name.
- */
- public int getAlign() {
- return align;
- }
- /**
- * Set the Foreground <code>Color</code> for this cell.
- *
- * @param color A <code>Color</code> object representing the
- * foreground color.
- */
- public void setForeground(Color c) {
- if(c!=null)
- foreground = new Color(c.getRGB());
- }
-
-
- /**
- * Get the Foreground <code>Color</code> for this cell.
- *
- * @return Foreground <code>Color</code> value.
- */
- public Color getForeground() {
- return foreground;
- }
-
-
- /**
- * Set the Background <code>Color</code> for this cell
- *
- * @param color A <code>Color</code> object representing
- * the background color.
- */
- public void setBackground(Color c) {
- if(c!=null)
- background = new Color(c.getRGB());
- }
-
-
- /**
- * Get the Foreground <code>Color</code> for this cell
- *
- * @return Background <code>Color</code> value
- */
- public Color getBackground() {
- return background;
- }
-
- /**
- * Get the Foreground <code>Color</code> for this cell
- *
- * @return Background <code>Color</code> value
- */
- public String toString() {
- return new String("Value : " + getValue() + " Category : " + getCategory());
- }
-
- /**
- * Tests if the current <code>Format</code> object has default attribute
- * values.
- *
- * @return true if it contains default value
- */
- public boolean isDefault() {
-
- Format rhs = new Format();
-
- if (rhs.attributes!= attributes)
- return false;
-
- if (foreground!=rhs.foreground)
- return false;
-
- if (background!=rhs.background)
- return false;
-
- if (rhs.align!= align)
- return false;
-
- if (rhs.vertAlign!= vertAlign)
- return false;
-
- return true;
- }
-
- /**
- * Return true if <code>style</code> specifies as much or less
- * than this <code>Style</code>, and nothing it specifies
- * contradicts this <code>Style</code>.
- *
- * @param style The <code>Style</code> to check.
- *
- * @return true if <code>style</code> is a subset, false
- * otherwise.
- */
- public boolean isSubset(Format rhs) {
- if (rhs.getClass() != this.getClass())
- return false;
-
- if (rhs.attributes!= attributes)
- return false;
-
- if (rhs.sizeInPoints != 0) {
- if (sizeInPoints != rhs.sizeInPoints)
- return false;
- }
-
- if (fontName!=rhs.fontName)
- return false;
-
- if (foreground!=rhs.foreground)
- return false;
-
- if (background!=rhs.background)
- return false;
-
- if (rhs.align!= align)
- return false;
-
- if (rhs.vertAlign!= vertAlign)
- return false;
-
- return true;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java
deleted file mode 100644
index 99aa3dd625ec..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/NameDefinition.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.XmlUtil;
-
-/**
- * This is a class to define a Name Definition structure. This can then be
- * used by plugins to write or read their own definition types.
- *
- * @author Martin Maher
- */
-public class NameDefinition implements OfficeConstants {
-
- private String name; // name which identifies the definition
- private String definition; // the definition itself
- private String baseCellAddress; // the basecelladdress
- private boolean rangeType = false; // true if definition of type range
- private boolean expressionType = false; // true if definition of type expression
-
- /**
- * Default Constructor for a <code>NameDefinition</code>
- *
- */
- public NameDefinition() {
-
- }
-
- /**
- * Constructor that takes a <code>Node</code> to build a
- * <code>NameDefinition</code>
- *
- * @param root XML Node to read from
- */
- public NameDefinition(Node root) {
- readNode(root);
- }
-
- /**
- * Default Constructor for a <code>NameDefinition</code>
- *
- */
- public NameDefinition(String name, String definition, String
- baseCellAddress, boolean rangeType, boolean expressionType ) {
- this.name = name;
- this.definition = definition;
- this.baseCellAddress = baseCellAddress;
- this.rangeType = rangeType;
- this.expressionType = expressionType;
- }
-
- /**
- * returns Name of the definition
- *
- * @return the name which identifies the definition
- */
- public String getName() {
-
- return name;
- }
- /**
- * sets the definition
- *
- * @param newDefinition sets the definition
- */
- public void setDefinition(String newDefinition) {
-
- definition = newDefinition;
- }
- /**
- * Returns the definition itself
- *
- * @return the definition
- */
- public String getDefinition() {
-
- return definition;
- }
-
- /**
- * Returns the base Cell address
- *
- * @return the base cell address
- */
- public String getBaseCellAddress() {
-
- return baseCellAddress;
- }
-
- /**
- * Tests if definition is of type expression
- *
- * @return whether or not this name definition is of type expression
- */
- public boolean isExpressionType() {
- return expressionType;
- }
-
- /**
- * Tests if definition is of type range
- *
- * @return whether or not this name definition is of type range
- */
- public boolean isRangeType() {
- return rangeType;
- }
-
- /**
- * Writes out a content.xml entry for this NameDefinition object
- *
- * @param settings a <code>Document</code> object representing the settings.xml
- * @param root the root xml node to add to
- */
- public void writeNode(org.w3c.dom.Document doc, Node root) {
-
- if(isRangeType()) {
-
- Debug.log(Debug.TRACE, "Found Range Name : " + getName());
- Element namedRangeElement = (Element) doc.createElement(TAG_TABLE_NAMED_RANGE);
- namedRangeElement.setAttribute(ATTRIBUTE_TABLE_NAME, getName());
- namedRangeElement.setAttribute(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS, getBaseCellAddress());
- namedRangeElement.setAttribute(ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS, getDefinition());
- root.appendChild(namedRangeElement);
- } else if (isExpressionType()) {
-
- Debug.log(Debug.TRACE, "Found Expression Name : " + getName());
- Element namedExpressionElement = (Element) doc.createElement(TAG_TABLE_NAMED_EXPRESSION);
- namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_NAME, getName());
- namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS,getBaseCellAddress());
- namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_EXPRESSION, getDefinition());
- root.appendChild(namedExpressionElement);
- } else {
-
- Debug.log(Debug.TRACE, "Unknown Name Definition : " + getName());
- }
- }
-
- /**
- * Reads document settings from xml and inits Settings variables
- *
- * @param root XML Node to read from
- */
- public void readNode(Node root) {
-
- String nodeName = root.getNodeName();
- NamedNodeMap cellAtt = root.getAttributes();
-
- if (nodeName.equals(TAG_TABLE_NAMED_RANGE)) {
-
- Node tableNameNode =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_NAME);
- Node tableBaseCellAddress =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS);
- Node tableCellRangeAddress =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS);
- Debug.log(Debug.TRACE,"Named-range : " + tableNameNode.getNodeValue());
- // Create a named-range name definition
- name = tableNameNode.getNodeValue();
- definition = tableCellRangeAddress.getNodeValue();
- baseCellAddress = tableBaseCellAddress.getNodeValue();
- expressionType = true;
- rangeType = false;
-
- } else if (nodeName.equals(TAG_TABLE_NAMED_EXPRESSION)) {
-
- Node tableNameNode =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_NAME);
- Node tableBaseCellAddress =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS);
- Node tableExpression=
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_EXPRESSION);
- Debug.log(Debug.TRACE,"Named-expression: " + tableNameNode.getNodeValue());
- // Create a named-range name definition
- name = tableNameNode.getNodeValue();
- definition = tableExpression.getNodeValue();
- baseCellAddress = tableBaseCellAddress.getNodeValue();
- expressionType = false;
- rangeType = true;
- } else {
- Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(root) + " />");
- }
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java
deleted file mode 100644
index aecb3cec3001..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/RowStyle.java
+++ /dev/null
@@ -1,305 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.io.IOException;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.Style;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.TwipsConverter;
-
-/**
- * Represents a text <code>Style</code> in an OpenOffice document.
- *
- * @author Martin Maher
- */
-public class RowStyle extends Style implements Cloneable {
-
- private int rowHeight = 255;
- /**
- * Constructor for use when going from DOM to client device format.
- *
- * @param Node The <i>style:style</i> <code>Node</code> containing
- * the <code>Style</code>. (This <code>Node</code> is
- * assumed have a <i>family</i> attribute of <i>text</i>).
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public RowStyle(Node node, StyleCatalog sc) {
- super(node, sc);
-
- // Run through the attributes of this node, saving
- // the ones we're interested in.
- NamedNodeMap attrNodes = node.getAttributes();
- if (attrNodes != null) {
- int len = attrNodes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attrNodes.item(i);
- handleAttribute(attr.getNodeName(), attr.getNodeValue());
- }
- }
-
- // Look for children. Only ones we care about are "style:properties"
- // nodes. If any are found, recursively traverse them, passing
- // along the style element to add properties to.
- if (node.hasChildNodes()) {
- NodeList children = node.getChildNodes();
- int len = children.getLength();
- for (int i = 0; i < len; i++) {
- Node child = children.item(i);
- String name = child.getNodeName();
- if (name.equals("style:properties")) {
- NamedNodeMap childAttrNodes = child.getAttributes();
- if (childAttrNodes != null) {
- int nChildAttrNodes = childAttrNodes.getLength();
- for (int j = 0; j < nChildAttrNodes; j++) {
- Node attr = childAttrNodes.item(j);
- handleAttribute(attr.getNodeName(),
- attr.getNodeValue());
- }
- }
- }
- }
- }
- }
-
-
- /**
- * Constructor for use when going from client device format to DOM
- *
- * @param name Name of text <code>Style</code>. Can be null.
- * @param family Family of text <code>Style</code> (usually
- * <i>text</i>). Can be null.
- * @param parent Name of parent text <code>Style</code>, or null
- * for none.
- * @param mask The height of this row
- * @param sc The <code>StyleCatalog</code>, which is used for
- * looking up ancestor <code>Style</code> objects.
- */
- public RowStyle(String name, String family, String parent,int rowHeight, StyleCatalog sc) {
- super(name, family, parent, sc);
- this.rowHeight=rowHeight;
- }
-
- /**
- * Returns the height of this row
- *
- * @return the <code>Format</code> object
- */
- public int getRowHeight() {
- return rowHeight;
- }
-
- /**
- * Sets the height of this row
- *
- * @return the <code>Format</code> object
- */
- public void setRowHeight(int RowHeight) {
-
- this.rowHeight = rowHeight;
- }
- /**
- * Parse a colheight in the form "1.234cm" to twips
- *
- * @param value <code>String</code> specification to parse.
- *
- * @return The twips equivalent.
- */
- private int parseRowHeight(String value) {
-
- int height = 255; // Default value
-
- if(value.indexOf("cm")!=-1) {
- float heightCM = Float.parseFloat(value.substring(0,value.indexOf("c")));
- height = TwipsConverter.cm2twips(heightCM);
- } else if(value.indexOf("inch")!=-1) {
- float heightInch = Float.parseFloat(value.substring(0,value.indexOf("i")));
- height = TwipsConverter.inches2twips(heightInch);
- }
-
- return (height);
-
- }
-
-
- /**
- * Set an attribute.
- *
- * @param attr The attribute to set.
- * @param value The attribute value to set.
- */
- private void handleAttribute(String attr, String value) {
-
- if (attr.equals("style:row-height")) {
- rowHeight = parseRowHeight(value);
- }
- else {
- Debug.log(Debug.INFO, "RowStyle Unhandled: " + attr + "=" + value);
- }
- }
-
-
- /**
- * Return a <code>Style</code> object corresponding to this one,
- * but with all of the inherited information from parent
- * <code>Style</code> objects filled in. The object returned will
- * be a new object, not a reference to this object, even if it does
- * not need any information added.
- *
- * @return The <code>StyleCatalog</code> in which to look up
- * ancestors.
- */
- public Style getResolved() {
- // Create a new object to return, which is a clone of this one.
- RowStyle resolved = null;
- try {
- resolved = (RowStyle)this.clone();
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "Can't clone", e);
- }
-
- // Look up the parentStyle. (If there is no style catalog
- // specified, we can't do any lookups.)
- RowStyle parentStyle = null;
- if (sc != null) {
- if (parent != null) {
- parentStyle = (RowStyle)sc.lookup(parent, family, null,
- this.getClass());
- if (parentStyle == null)
- Debug.log(Debug.ERROR, "parent style lookup of "
- + parent + " failed!");
- else
- parentStyle = (RowStyle)parentStyle.getResolved();
-
- } else if (!name.equals("DEFAULT_STYLE")) {
- parentStyle = (RowStyle)sc.lookup("DEFAULT_STYLE", null,
- null, this.getClass());
- }
- }
-
- // If we found a parent, for any attributes which we don't have
- // set, try to get the values from the parent.
- if (parentStyle != null) {
- parentStyle = (RowStyle)parentStyle.getResolved();
-
- if ((rowHeight == 0) && (parentStyle.getRowHeight() != 0))
- resolved.setRowHeight(parentStyle.getRowHeight());
- }
- return resolved;
- }
-
-
- /**
- * Create a new <code>Node</code> in the <code>Document</code>, and
- * write this <code>Style</code> to it.
- *
- * @param parentDoc Parent <code>Document</code> of the
- * <code>Node</code> to create.
- * @param name Name to use for the new <code>Node</code> (e.g.
- * <i>style:style</i>)
- *
- * @return Created <code>Node</code>.
- */
- public Node createNode(org.w3c.dom.Document parentDoc, String name) {
- Element node = parentDoc.createElement(name);
- writeAttributes(node);
- return node;
- }
-
-
- /**
- * Return true if <code>style</code> specifies as much or less
- * than this <code>Style</code>, and nothing it specifies
- * contradicts this <code>Style</code>.
- *
- * @param style The <code>Style</code> to check.
- *
- * @return true if <code>style</code> is a subset, false
- * otherwise.
- */
- public boolean isSubset(Style style) {
- if (style.getClass() != this.getClass())
- return false;
- RowStyle tStyle = (RowStyle)style;
-
- if(rowHeight!=tStyle.getRowHeight())
- return false;
-
- return true;
- }
-
-
- /**
- * Write this <code>Style</code> object's attributes to a
- * <code>Node</code> in the <code>Document</code>.
- *
- * @param node The <code>Node</code> to add <code>Style</code>
- * attributes.
- */
- public void writeAttributes(Element node) {
-
- if(rowHeight!=0) {
- String height = TwipsConverter.twips2cm(rowHeight) + "cm";
- node.setAttribute("style:row-height", height);
- }
- }
-
-
- private static String[] ignored = {
- "fo:break-before", "fo:keep-with-next"
- };
-
-
- /*
- * This code checks whether an attribute is one that we
- * intentionally ignore.
- *
- * @param attribute The attribute to check.
- *
- * @return true if <code>attribute</code> can be ignored,
- * otherwise false.
- */
- private boolean isIgnored(String attribute) {
- for (int i = 0; i < ignored.length; i++) {
- if (ignored[i].equals(attribute))
- return true;
- }
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java
deleted file mode 100644
index 08339773be30..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SheetSettings.java
+++ /dev/null
@@ -1,374 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import java.awt.Point;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This is a class representing the different attributes for a worksheet
- * contained in settings.xml.
- *
- * @author Martin Maher
- */
-public class SheetSettings implements OfficeConstants {
-
- /** A w3c <code>Document</code>. */
- private org.w3c.dom.Document settings = null;
-
- private String sheetName;
- private int cursorX = 0;
- private int cursorY = 0;
- private int splitTypeX;
- private int splitTypeY;
- private int splitPointX = 0;
- private int splitPointY = 0;
- private int posLeft = 0;
- private int posRight = 0;
- private int posBottom = 0;
- private int posTop = 0;
- private int paneNumber = 2;
-
- final public static int NONE = 0x00;
- final public static int SPLIT = 0x01;
- final public static int FREEZE = 0x02;
-
-
- /**
- * Default Constructor for a <code>ColumnRowInfo</code>
- *
- */
- public SheetSettings() {
- }
-
- /**
- * Constructor that takes a <code>Node</code> to build a <code>SheetSettings</code>
- *
- * @param root XML Node to read from
- */
- public SheetSettings(Node root) {
- readNode(root);
- }
-
- /**
- * Constructor for a <code>ColumnRowInfo</code>
- *
- * @param dimension if it's a row the height, a column the width
- * @param repeated
- */
- public SheetSettings(String name) {
- sheetName = name;
- }
-
- /**
- * sets the position of the acitve cell
- *
- * @param activeCell the current curor position
- */
- public void setCursor(Point activeCell) {
-
- cursorX = (int) activeCell.getX();
- cursorY = (int) activeCell.getY();
- }
-
- /**
- * Gets the position of the acitve cell
- *
- * @return The position as a <code>Point</code>
- */
- public Point getCursor() {
-
- return (new Point(cursorX, cursorY));
- }
-
- /**
- * Sets the position of the freeze
- *
- * @param splitPoint the point at where the split occurs
- */
- public void setFreeze(Point splitPoint) {
-
- splitTypeX = FREEZE;
- splitTypeY = FREEZE;
- splitPointX = (int) splitPoint.getX();
- splitPointY = (int) splitPoint.getY();
- }
-
- /**
- * Sets the position of the split
- *
- * @param splitPoint the point at where the split occurs
- */
- public void setSplit(Point splitPoint) {
-
- splitTypeX = SPLIT;
- splitTypeY = SPLIT;
- splitPointX = (int) splitPoint.getX();
- splitPointY = (int) splitPoint.getY();
- }
-
- /**
- * sets the position and type of the split
- *
- * @return The position as a <code>Point</code> where the split occurs
- */
- public Point getSplit() {
-
- return (new Point(splitPointX, splitPointY));
- }
-
- /**
- * sets the position and type of the split
- *
- * @return The position as a <code>Point</code> where the split occurs
- */
- public Point getSplitType() {
-
- return (new Point(splitTypeX, splitTypeY));
- }
-
- /**
- * Sets the top row visible in the lower pane and the leftmost column
- * visibile in the right pane.
- *
- * @param top The top row visible in the lower pane
- * @param left The leftmost column visibile in the right pane
- */
- public void setTopLeft(int top, int left) {
-
- posLeft = left;
- posTop = top;
- }
-
- /**
- * Gets the the leftmost column visibile in the right pane.
- *
- * @return the 0-based index to the column
- */
- public int getLeft() {
-
- return posLeft;
- }
- /**
- * Sets the top row visible in the lower pane and the leftmost column
- * visibile in the right pane.
- *
- * @param top The top row visible in the lower pane
- * @param left The leftmost column visibile in the right pane
- */
- public int getTop() {
-
- return posTop;
- }
-
- /**
- * Gets the active Panel
- * 0 - Bottom Right, 1 - Top Right
- * 2 - Bottom Left, 3 - Top Left
- *
- * @return int representing the active panel
- */
- public int getPaneNumber() {
-
- return paneNumber;
- }
-
- /**
- * Sets the sheetname this settings object applies to
- *
- * @param sheetName the name of the worksheet
- */
- public void setSheetName(String sheetName) {
-
- this.sheetName = sheetName;
-
- }
-
- /**
- * Sets the active pane number
- * 0 - Bottom Right, 1 - Top Right
- * 2 - Bottom Left, 3 - Top Left
- *
- * @param paneNumber the pane number
- */
- public void setPaneNumber(int paneNumber) {
-
- this.paneNumber = paneNumber;
- }
-
- /**
- * Gets the name of the worksheet these <code>Settings</code> apply to
- *
- * @return the name of the worksheet
- */
- public String getSheetName() {
-
- return sheetName;
- }
-
- /**
- * Adds an XML entry for a particular setting
- *
- * @param root the root node at which to add the xml entry
- * @param attriute the name of the attribute to add
- * @param type the attribute type (int, short etc)
- * @param value the value of the attribute
- */
- private void addConfigItem(Node root, String attribute, String type, String value) {
-
- Element configItem = settings.createElement(TAG_CONFIG_ITEM);
- configItem.setAttribute(ATTRIBUTE_CONFIG_NAME, attribute);
- configItem.setAttribute(ATTRIBUTE_CONFIG_TYPE, type);
-
- configItem.appendChild(settings.createTextNode(value));
-
- root.appendChild(configItem);
- }
-
- /**
- * Writes out a settings.xml entry for this SheetSettings object
- *
- * @param settings a <code>Document</code> object representing the settings.xml
- * @param root the root xml node to add to
- */
- public void writeNode(org.w3c.dom.Document settings, Node root) {
-
- this.settings = settings;
- Element configItemMapEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_ENTRY);
- configItemMapEntry.setAttribute(ATTRIBUTE_CONFIG_NAME, getSheetName());
- addConfigItem(configItemMapEntry, "CursorPositionX", "int", Integer.toString(cursorX));
- addConfigItem(configItemMapEntry, "CursorPositionY", "int", Integer.toString(cursorY));
-
- String splitMode = Integer.toString(splitTypeX);
- if(splitPointX==0) {
- splitMode = "0";
- }
- addConfigItem(configItemMapEntry, "HorizontalSplitMode", "short", splitMode);
-
- splitMode = Integer.toString(splitTypeY);
- if(splitPointY==0) {
- splitMode = "0";
- }
- addConfigItem(configItemMapEntry, "VerticalSplitMode", "short", splitMode);
-
- addConfigItem(configItemMapEntry, "HorizontalSplitPosition", "int", Integer.toString(splitPointX));
- addConfigItem(configItemMapEntry, "VerticalSplitPosition", "int", Integer.toString(splitPointY));
- addConfigItem(configItemMapEntry, "ActiveSplitRange", "short", Integer.toString(paneNumber));
-
- addConfigItem(configItemMapEntry, "PositionLeft", "int", "0");
- addConfigItem(configItemMapEntry, "PositionRight", "int", Integer.toString(posLeft));
- addConfigItem(configItemMapEntry, "PositionTop", "int", "0");
- addConfigItem(configItemMapEntry, "PositionBottom", "int", Integer.toString(posTop));
- root.appendChild(configItemMapEntry);
- }
-
- /**
- * Sets a variable based on a String value read from XML
- *
- * @param name xml name of the attribute to set
- * @param value String value fo the attribute
- */
- public void addAttribute(String name, String value) {
-
- if(name.equals("CursorPositionX")) {
- cursorX = Integer.parseInt(value);
- } else if(name.equals("CursorPositionY")) {
- cursorY = Integer.parseInt(value);
-
- } else if(name.equals("HorizontalSplitPosition")) {
- splitPointX = Integer.parseInt(value);
- } else if(name.equals("VerticalSplitPosition")) {
- splitPointY = Integer.parseInt(value);
- } else if(name.equals("ActiveSplitRange")) {
- paneNumber = Integer.parseInt(value);
-
- } else if(name.equals("PositionRight")) {
- posLeft = Integer.parseInt(value);
- } else if(name.equals("PositionBottom")) {
- posTop = Integer.parseInt(value);
-
- } else if(name.equals("HorizontalSplitMode")) {
- splitTypeX = Integer.parseInt(value);
- } else if(name.equals("VerticalSplitMode")) {
- splitTypeY = Integer.parseInt(value);
- }
- }
-
- /**
- * Reads document settings from xml and inits SheetSettings variables
- *
- * @param root XML Node to read from
- */
- public void readNode(Node root) {
-
- NamedNodeMap sheetAtt = root.getAttributes();
-
- Node sheetNameNode = sheetAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME);
-
- sheetName = sheetNameNode.getNodeValue();
-
- if (root.hasChildNodes()) {
-
- NodeList nodeList = root.getChildNodes();
- int len = nodeList.getLength();
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_CONFIG_ITEM)) {
-
- NamedNodeMap cellAtt = child.getAttributes();
-
- Node configNameNode =
- cellAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME);
-
- String name = configNameNode.getNodeValue();
- NodeList nodeList2 = child.getChildNodes();
- int len2 = nodeList2.getLength();
- String s = "";
- for (int j = 0; j < len2; j++) {
- Node child2 = nodeList2.item(j);
- if (child2.getNodeType() == Node.TEXT_NODE) {
- s = child2.getNodeValue();
- }
- }
- addAttribute(name, s);
- }
- }
- }
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java
deleted file mode 100644
index a0ec6cc305bd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetDecoder.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.ConvertData;
-
-/**
- * This class is a abstract class for encoding a &quot;Device&quot;
- * <code>Document</code> format into an alternative spreadsheet format.
- *
- * @author Mark Murnane
- */
-public abstract class SpreadsheetDecoder {
-
- /**
- * Constructor for creating new <code>SpreadsheetDecoder</code>.
- */
- public SpreadsheetDecoder(String name, String password) throws IOException {
- }
-
- /**
- * Returns the total number of sheets in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public abstract int getNumberOfSheets();
-
- /**
- * Returns an Enumeration to a Vector of <code>NameDefinition</code>.
- *
- * @return The Enumeration
- */
- public abstract Enumeration getNameDefinitions();
-
- /**
- * Returns an <code>BookSettings</code>
- *
- * @return The Enumeration
- */
- public abstract BookSettings getSettings();
-
- /**
- * Returns an Enumeration to a Vector of <code>ColumnRowInfo</code>.
- *
- * @return The Enumeration
- */
- public abstract Enumeration getColumnRowInfos();
-
- /**
- * Returns the number of populated rows in the current WorkSheet.
- *
- * @return the number of populated rows in the current WorkSheet.
- */
- public abstract int getNumberOfRows();
-
-
- /**
- * Returns the number of populated columns in the current WorkSheet.
- *
- * @return The number of populated columns in the current WorkSheet.
- */
- public abstract int getNumberOfColumns();
-
-
- /**
- * Returns the name of the current WorkSheet.
- *
- * @return Name of the current WorkSheet.
- */
- public abstract String getSheetName();
-
-
- /**
- * Returns the number of the active column.
- *
- * @return The number of the active column.
- */
- public abstract int getColNumber();
-
-
- /**
- * Returns the number of the active row.
- *
- * @return The number of the active row.
- */
- public abstract int getRowNumber();
-
-
- /**
- * Sets the active WorkSheet.
- *
- * @param sheetIndex The index of the sheet to be made active.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract void setWorksheet(int sheetIndex) throws IOException;
-
-
- /**
- * Move on the next populated cell in the current WorkSheet.
- *
- * @return true if successful, false otherwise.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract boolean goToNextCell() throws IOException;
-
-
- /**
- * Return the contents of the active cell.
- *
- * @return The cell contents.
- */
- public abstract String getCellContents();
-
- /**
- * Return the value of the active cell. Used in the case of Formula where
- * the cell contents and the cell value are not the same thing.
- *
- * @return The cell value.
- */
- public abstract String getCellValue();
-
- /**
- * Return the data type of the active cell.
- *
- * @return The cell data type.
- */
- public abstract String getCellDataType();
-
-
- /**
- * Return a <code>Format</code> object describing the active cells
- * formatting.
- *
- * @return <code>Format</code> object for the cell.
- */
- public abstract Format getCellFormat();
-
-
- /**
- * Add the contents of a <code>ConvertData</code> to the workbook.
- *
- * @param cd The <code>ConvertData</code> containing the
- * content.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract void addDeviceContent(ConvertData cd) throws IOException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java
deleted file mode 100644
index 7d0d1f615849..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SpreadsheetEncoder.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.io.IOException;
-import java.util.Vector;
-
-import org.openoffice.xmerge.util.IntArrayList;
-
-/**
- * <p>This class is a abstract class for encoding an SXC into an
- * alternative spreadsheet format.</p>
- *
- * <p>TODO - Add appropriate exceptions to each of the methods.</p>
- *
- * @author Mark Murnane
- */
-public abstract class SpreadsheetEncoder {
-
-
- /**
- * Creates new SpreadsheetEncoder.
- *
- * @param name The name of the WorkBook to be created.
- * @param password An optional password for the WorkBook.
- *
- * @throws IOException If any I/O error occurs.
- */
- public SpreadsheetEncoder(String name, String password) throws IOException { };
-
-
- /**
- * Create a new WorkSheet within the WorkBook.
- *
- * @param sheetName The name of the WorkSheet.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract void createWorksheet(String sheetName) throws IOException;
-
-
- /**
- * Set a cell's formatting options via a separately create
- * <code>Format</code> object.
- *
- * @param row The row number of the cell to be changed
- * @param column The column number of the cell to be changed
- * @param fmt Object containing formatting settings for this cell.
- */
- public abstract void setCellFormat(int row, int column, Format fmt);
-
-
- /**
- * Add a cell to the current WorkSheet.
- *
- * @param row The row number of the cell
- * @param column The column number of the cell
- * @param fmt The <code>Format</code> object describing the
- * appearance of this cell.
- * @param cellContents The text or formula of the cell's contents.
- */
- public abstract void addCell(int row, int column,
- Format fmt, String cellContents) throws IOException;
-
-
- /**
- * Get the number of sheets in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public abstract int getNumberOfSheets();
-
-
- /**
- * Get the names of the sheets in the WorkBook.
- *
- * @param sheet The required sheet.
- */
- public abstract String getSheetName(int sheet);
-
-
- /**
- * Set the width of the columns in the WorkBook.
- *
- * @param columnWidths An <code>IntArrayList</code> of column
- * widths.
- */
- public abstract void setColumnRows(Vector columnRows) throws IOException;
-
- /**
- * Set the width of the columns in the WorkBook.
- *
- * @param columnWidths An <code>IntArrayList</code> of column
- * widths.
- */
- public abstract void setNameDefinition(NameDefinition nd) throws IOException;
-
- /**
- * Set the width of the columns in the WorkBook.
- *
- * @param columnWidths An <code>IntArrayList</code> of column
- * widths.
- */
- public abstract void addSettings(BookSettings s) throws IOException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java
deleted file mode 100644
index d435479842c6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocument.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import org.w3c.dom.Document;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * This class is an implementation of <code>OfficeDocument</code> for
- * the SXC format.
- */
-public class SxcDocument extends OfficeDocument {
-
- /**
- * Constructor with arguments to set <code>name</code>.
- *
- * @param name The name of the <code>Document</code>
- */
- public SxcDocument(String name) {
- super(name);
- }
-
-
- /**
- * Constructor with arguments to set <code>name</code>, the
- * <code>namespaceAware</code> flag, and the <code>validating</code>
- * flag.
- *
- * @param name The name of the <code>Document</code>.
- * @param namespaceAware The value of the <code>namespaceAware</code>
- * flag.
- * @param validating The value of the <code>validating</code> flag.
- */
- public SxcDocument(String name, boolean namespaceAware, boolean validating) {
-
- super(name, namespaceAware, validating);
- }
-
- /**
- * Returns the Office file extension for the SXC format.
- *
- * @return The Office file extension for the SXC format.
- */
- protected String getFileExtension() {
- return OfficeConstants.SXC_FILE_EXTENSION;
- }
-
- /**
- * Returns the Office attribute for the SXC format.
- *
- * @return The Office attribute for the SXC format.
- */
- protected String getOfficeClassAttribute() {
- return OfficeConstants.SXC_TYPE;
- }
-
- /**
- * Method to return the MIME type of the document.
- *
- * @return String The document's MIME type.
- */
- protected final String getDocumentMimeType() {
- return OfficeConstants.SXC_MIME_TYPE;
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java
deleted file mode 100644
index 2415c9385d62..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentDeserializer.java
+++ /dev/null
@@ -1,794 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-import java.awt.Point;
-import java.io.IOException;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocument;
-import org.openoffice.xmerge.converter.xml.sxc.BookSettings;
-import org.openoffice.xmerge.converter.xml.sxc.SheetSettings;
-import org.openoffice.xmerge.converter.xml.sxc.NameDefinition;
-import org.openoffice.xmerge.converter.xml.sxc.CellStyle;
-import org.openoffice.xmerge.converter.xml.Style;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * <p>General spreadsheet implementation of <code>DocumentDeserializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory
- * SxcPluginFactory}. Used with SXC <code>Document</code> objects.</p>
- *
- * <p>The <code>deserialize</code> method uses a <code>DocDecoder</code>
- * to read the device spreadsheet format into a <code>String</code>
- * object, then it calls <code>buildDocument</code> to create a
- * <code>SxcDocument</code> object from it.</p>
- *
- * @author Paul Rank
- * @author Mark Murnane
- * @author Martin Maher
- */
-public abstract class SxcDocumentDeserializer implements OfficeConstants,
- DocumentDeserializer {
-
- /**
- * A <code>SpreadsheetDecoder</code> object for decoding from
- * device formats.
- */
- private SpreadsheetDecoder decoder = null;
-
- /** A w3c <code>Document</code>. */
- private org.w3c.dom.Document settings = null;
-
- /** A w3c <code>Document</code>. */
- private org.w3c.dom.Document doc = null;
-
- /** An <code>ConvertData</code> object assigned to this object. */
- private ConvertData cd = null;
-
- /** A style catalog for the workbook */
- private StyleCatalog styleCat = null;
-
- private int textStyles = 1;
- private int colStyles = 1;
- private int rowStyles = 1;
-
- /**
- * Constructor.
- *
- * @param cd <code>ConvertData</code> consisting of a
- * device content object.
- */
- public SxcDocumentDeserializer(ConvertData cd) {
- this.cd = cd;
- }
-
-
- /**
- * This abstract method will be implemented by concrete subclasses
- * and will return an application-specific Decoder.
- *
- * @param workbook The WorkBook to read.
- * @param password The WorkBook password.
- *
- * @return The appropriate <code>SpreadSheetDecoder</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public abstract SpreadsheetDecoder createDecoder(String workbook, String[] worksheetNames, String password)
- throws IOException;
-
-
- /**
- * <p>This method will return the name of the WorkBook from the
- * <code>ConvertData</code>. Allows for situations where the
- * WorkBook name differs from the Device Content name.</p>
- *
- * <p>Implemented in the Deserializer as the Decoder's constructor requires
- * a name.</p>
- *
- * @param cd The <code>ConvertData</code> containing the Device
- * content.
- *
- * @return The WorkBook name.
- */
- protected abstract String getWorkbookName(ConvertData cd) throws IOException;
-
-
- /**
- * This method will return the name of the WorkSheet from the
- * <code>ConvertData</code>.
- *
- * @param cd The <code>ConvertData</code> containing the Device
- * content.
- *
- * @return The WorkSheet names.
- */
- protected abstract String[] getWorksheetNames(ConvertData cd) throws IOException;
-
-
- /**
- * <p>Method to convert a set of &quot;Device&quot;
- * <code>Document</code> objects into a <code>SxcDocument</code>
- * object and returns it as a <code>Document</code>.</p>
- *
- * <p>This method is not thread safe for performance reasons.
- * This method should not be called from within two threads.
- * It would be best to call this method only once per object
- * instance.</p>
- *
- * @return document An <code>SxcDocument</code> consisting
- * of the data converted from the input
- * stream.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public Document deserialize() throws ConvertException,
- IOException {
-
- // Get the name of the WorkBook from the ConvertData.
- String[] worksheetNames = getWorksheetNames(cd);
- String workbookName = getWorkbookName(cd);
-
- // Create a document
- SxcDocument sxcDoc = new SxcDocument(workbookName);
- sxcDoc.initContentDOM();
- sxcDoc.initSettingsDOM();
-
- // Default to an initial 5 entries in the catalog.
- styleCat = new StyleCatalog(5);
-
- doc = sxcDoc.getContentDOM();
- settings = sxcDoc.getSettingsDOM();
- initFontTable();
- // Little fact for the curious reader: workbookName should
- // be the name of the StarCalc file minus the file extension suffix.
-
- // Create a Decoder to decode the DeviceContent to a spreadsheet document
- // TODO - we aren't using a password in StarCalc, so we can
- // use any value for password here. If StarCalc XML supports
- // passwords in the future, we should try to get the correct
- // password value here.
- //
- decoder = createDecoder(workbookName, worksheetNames, "password");
-
- Debug.log(Debug.TRACE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- Debug.log(Debug.TRACE, "<DEBUGLOG>");
-
- decoder.addDeviceContent(cd);
- decode();
-
- Debug.log(Debug.TRACE, "</DEBUGLOG>");
-
- return sxcDoc;
- }
-
- /**
- * This initializes a font table so we can imclude some basic font
- * support for spreadsheets.
- *
- */
- private void initFontTable() {
-
- String fontTable[]= new String[] { "Tahoma", "Tahoma", "swiss", "variable",
- "Courier New", "&apos;Courier New&apos;", "modern", "fixed"};
- // Traverse to the office:body element.
- // There should only be one.
- NodeList list = doc.getElementsByTagName(TAG_OFFICE_FONT_DECLS);
- Node root = list.item(0);
-
- for(int i=0;i<fontTable.length;) {
-
- // Create an element node for the table
- Element tableElement = (Element) doc.createElement(TAG_STYLE_FONT_DECL);
-
- tableElement.setAttribute(ATTRIBUTE_STYLE_NAME, fontTable[i++]);
- tableElement.setAttribute(ATTRIBUTE_FO_FONT_FAMILY, fontTable[i++]);
- tableElement.setAttribute(ATTRIBUTE_FO_FONT_FAMILY_GENERIC, fontTable[i++]);
- tableElement.setAttribute(ATTRIBUTE_STYLE_FONT_PITCH, fontTable[i++]);
-
- root.appendChild(tableElement);
- }
-
- }
-
- /**
- * Outer level method used to decode a WorkBook
- * into a <code>Document</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void decode() throws IOException {
-
- // Get number of worksheets
- int numSheets = decoder.getNumberOfSheets();
- // #i33702# - check for an Empty InputStream.
- if(numSheets == 0)
- {
- System.err.println("Error decoding invalid Input stream");
- return;
- }
-
- // Traverse to the office:body element.
- // There should only be one.
- NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY);
- Node node = list.item(0);
-
- for (int i = 0; i < numSheets; i++) {
-
- // Set the decoder to the correct worksheet
- decoder.setWorksheet(i);
-
- int len = list.getLength();
-
- if (len > 0) {
-
- // Process the spreadsheet
- processTable(node);
- }
- }
-
- // Add the Defined Name table if there is one
- Enumeration nameDefinitionTable = decoder.getNameDefinitions();
- if(nameDefinitionTable.hasMoreElements()) {
- processNameDefinition(node, nameDefinitionTable);
- }
-
- // add settings
- NodeList settingsList = settings.getElementsByTagName(TAG_OFFICE_SETTINGS);
- Node settingsNode = settingsList.item(0);;
- processSettings(settingsNode);
-
- }
-
-
-
- /**
- * This method process the settings portion
- * of the <code>Document</code>.
- *
- * @param root The root <code>Node</code> of the
- * <code>Document</code> we are building. This
- * <code>Node</code> should be a TAG_OFFICE_SETTINGS
- * tag.
- */
- protected void processSettings(Node root) {
-
- Element configItemSetEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_SET);
- configItemSetEntry.setAttribute(ATTRIBUTE_CONFIG_NAME, "view-settings");
- Element configItemMapIndexed = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_INDEXED);
- configItemMapIndexed.setAttribute(ATTRIBUTE_CONFIG_NAME, "Views");
- Element configItemMapEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_ENTRY);
- BookSettings bs = (BookSettings) decoder.getSettings();
- bs.writeNode(settings, configItemMapEntry);
-
- configItemMapIndexed.appendChild(configItemMapEntry);
- configItemSetEntry.appendChild(configItemMapIndexed);
- root.appendChild(configItemSetEntry);
- }
-
- /**
- * This method process a Name Definition Table and generates a portion
- * of the <code>Document</code>.
- *
- * @param root The root <code>Node</code> of the
- * <code>Document</code> we are building. This
- * <code>Node</code> should be a TAG_OFFICE_BODY
- * tag.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void processNameDefinition(Node root, Enumeration eNameDefinitions) throws IOException {
-
- Debug.log(Debug.TRACE, "<NAMED-EXPRESSIONS>");
-
- Element namedExpressionsElement = (Element) doc.createElement(TAG_NAMED_EXPRESSIONS);
-
- while(eNameDefinitions.hasMoreElements()) {
-
- NameDefinition tableEntry = (NameDefinition) eNameDefinitions.nextElement();
- tableEntry.writeNode(doc, namedExpressionsElement);
- }
-
- root.appendChild(namedExpressionsElement);
-
- Debug.log(Debug.TRACE, "</NAMED-EXPRESSIONS>");
- }
-
- /**
- * This method process a WorkSheet and generates a portion
- * of the <code>Document</code>. A spreadsheet is represented
- * as a table Node in StarOffice XML format.
- *
- * @param root The root <code>Node</code> of the
- * <code>Document</code> we are building. This
- * <code>Node</code> should be a TAG_OFFICE_BODY
- * tag.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void processTable(Node root) throws IOException {
-
- Debug.log(Debug.TRACE, "<TABLE>");
-
- // Create an element node for the table
- Element tableElement = (Element) doc.createElement(TAG_TABLE);
-
- // Get the sheet name
- String sheetName = decoder.getSheetName();
-
- // Set the table name attribute
- tableElement.setAttribute(ATTRIBUTE_TABLE_NAME, sheetName);
-
- // TODO - style currently hardcoded - get real value
- // Set table style-name attribute
- tableElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, "Default");
-
- // Append the table element to the root node
- root.appendChild(tableElement);
-
- Debug.log(Debug.TRACE, "<SheetName>" + sheetName + "</SheetName>");
-
- // add the various different table-columns
- processColumns(tableElement);
-
- // Get each cell and add to doc
- processCells(tableElement);
-
- Debug.log(Debug.TRACE, "</TABLE>");
- }
-
- /**
- * <p>This method process the cells in a <code>Document</code>
- * and generates a portion of the <code>Document</code>.</p>
- *
- * <p>This method assumes that records are sorted by
- * row and then column.</p>
- *
- * @param root The <code>Node</code> of the <code>Document</code>
- * we are building that we will append our cell
- * <code>Node</code> objects. This <code>Node</code>
- * should be a TAG_TABLE tag.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void processColumns(Node root) throws IOException {
-
- for(Enumeration e = decoder.getColumnRowInfos();e.hasMoreElements();) {
-
- ColumnRowInfo ci = (ColumnRowInfo) e.nextElement();
- if(ci.isColumn()) {
- ColumnStyle cStyle = new ColumnStyle("Default",SxcConstants.COLUMN_STYLE_FAMILY,
- SxcConstants.DEFAULT_STYLE, ci.getSize(), null);
-
- Style result[] = (Style[]) styleCat.getMatching(cStyle);
- String styleName;
- if(result.length==0) {
-
- cStyle.setName("co" + colStyles++);
- styleName = cStyle.getName();
- Debug.log(Debug.TRACE,"No existing style found, adding " + styleName);
- styleCat.add(cStyle);
- } else {
- ColumnStyle existingStyle = (ColumnStyle) result[0];
- styleName = existingStyle.getName();
- Debug.log(Debug.TRACE,"Existing style found : " + styleName);
- }
-
- // Create an element node for the new row
- Element colElement = (Element) doc.createElement(TAG_TABLE_COLUMN);
- colElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, styleName);
- if(ci.getRepeated()!=1) {
- String repeatStr = String.valueOf(ci.getRepeated());
- colElement.setAttribute(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED, repeatStr);
- }
- root.appendChild(colElement);
- }
- }
- }
-
- /**
- * <p>This method process the cells in a <code>Document</code>
- * and generates a portion of the <code>Document</code>.</p>
- *
- * <p>This method assumes that records are sorted by
- * row and then column.</p>
- *
- * @param root The <code>Node</code> of the <code>Document</code>
- * we are building that we will append our cell
- * <code>Node</code> objects. This <code>Node</code>
- * should be a TAG_TABLE tag.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void processCells(Node root) throws IOException {
-
- // The current row element
- Element rowElement = null;
-
- // The current cell element
- Element cellElement = null;
-
- // The row number - we may not have any rows (empty sheet)
- // so set to zero.
- int row = 0;
-
- // The column number - This is the expected column number of
- // the next cell we are reading.
- int col = 1;
-
- // The number of columns in the spreadsheet
- int lastColumn = decoder.getNumberOfColumns();
-
- //
- Node autoStylesNode = null;
-
- // Loop over all cells in the spreadsheet
- while (decoder.goToNextCell()) {
-
- // Get the row number
- int newRow = decoder.getRowNumber();
-
- // Is the cell in a new row, or part of the current row?
- if (newRow != row) {
-
- // Make sure that all the cells in the previous row
- // have been entered.
- if (col <= lastColumn && rowElement != null) {
- int numSkippedCells = lastColumn - col + 1;
- addEmptyCells(numSkippedCells, rowElement);
- }
-
- // log an end row - if we already have a row
- if (row != 0) {
- Debug.log(Debug.TRACE, "</tr>");
- }
-
- // How far is the new row from the last row?
- int deltaRows = newRow - row;
-
- // Check if we have skipped any rows
- if (deltaRows > 1) {
- // Add in empty rows
- addEmptyRows(deltaRows-1, root, lastColumn);
- }
-
- // Re-initialize column (since we are in a new row)
- col = 1;
-
- // Create an element node for the new row
- rowElement = (Element) doc.createElement(TAG_TABLE_ROW);
-
-
- for(Enumeration e = decoder.getColumnRowInfos();e.hasMoreElements();) {
- ColumnRowInfo cri = (ColumnRowInfo) e.nextElement();
- if(cri.isRow() && cri.getRepeated()==newRow-1) {
- // We have the correct Row BIFFRecord for this row
- RowStyle rStyle = new RowStyle("Default",SxcConstants.ROW_STYLE_FAMILY,
- SxcConstants.DEFAULT_STYLE, cri.getSize(), null);
-
- Style result[] = (Style[]) styleCat.getMatching(rStyle);
- String styleName;
- if(result.length==0) {
-
- rStyle.setName("ro" + rowStyles++);
- styleName = rStyle.getName();
- Debug.log(Debug.TRACE,"No existing style found, adding " + styleName);
- styleCat.add(rStyle);
- } else {
- RowStyle existingStyle = (RowStyle) result[0];
- styleName = existingStyle.getName();
- Debug.log(Debug.TRACE,"Existing style found : " + styleName);
- }
- rowElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, styleName);
- // For now we will not use the repeat column attribute
- }
- }
-
- // Append the row element to the root node
- root.appendChild(rowElement);
-
- // Update row number
- row = newRow;
-
- Debug.log(Debug.TRACE, "<tr>");
- }
-
- // Get the column number of the current cell
- int newCol = decoder.getColNumber();
-
- // Check to see if some columns were skipped
- if (newCol != col) {
-
- // How many columns have we skipped?
- int numColsSkipped = newCol - col;
-
- addEmptyCells(numColsSkipped, rowElement);
-
- // Update the column number to account for the
- // skipped cells
- col = newCol;
- }
-
- // Lets start dealing with the cell data
- Debug.log(Debug.TRACE, "<td>");
-
- // Get the cell's contents
- String cellContents = decoder.getCellContents();
-
- // Get the type of the data in the cell
- String cellType = decoder.getCellDataType();
-
- // Get the cell format
- Format fmt = decoder.getCellFormat();
-
- // Create an element node for the cell
- cellElement = (Element) doc.createElement(TAG_TABLE_CELL);
-
- Node bodyNode = doc.getElementsByTagName(TAG_OFFICE_BODY).item(0);
-
- // Not every document has an automatic style tag
- autoStylesNode = doc.getElementsByTagName(
- TAG_OFFICE_AUTOMATIC_STYLES).item(0);
-
- if (autoStylesNode == null) {
- autoStylesNode = doc.createElement(TAG_OFFICE_AUTOMATIC_STYLES);
- doc.insertBefore(autoStylesNode, bodyNode);
- }
-
- CellStyle tStyle = new
- CellStyle( "Default",SxcConstants.TABLE_CELL_STYLE_FAMILY,
- SxcConstants.DEFAULT_STYLE, fmt, null);
- String styleName;
- Style result[] = (Style[]) styleCat.getMatching(tStyle);
- if(result.length==0) {
-
- tStyle.setName("ce" + textStyles++);
- styleName = tStyle.getName();
- Debug.log(Debug.TRACE,"No existing style found, adding " + styleName);
- styleCat.add(tStyle);
- } else {
- CellStyle existingStyle = (CellStyle) result[0];
- styleName = existingStyle.getName();
- Debug.log(Debug.TRACE,"Existing style found : " + styleName);
- }
-
- cellElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, styleName);
-
- // Store the cell data into the appropriate attributes
- processCellData(cellElement, cellType, cellContents);
-
- // Append the cell element to the row node
- rowElement.appendChild(cellElement);
-
- // Append the cellContents as a text node
- Element textElement = (Element) doc.createElement(TAG_PARAGRAPH);
- cellElement.appendChild(textElement);
- textElement.appendChild(doc.createTextNode(cellContents));
-
- Debug.log(Debug.TRACE, cellContents);
- Debug.log(Debug.TRACE, "</td>");
-
- // Increment to the column number of the next expected cell
- col++;
- }
-
- // Make sure that the last row is padded correctly
- if (col <= lastColumn && rowElement != null) {
- int numSkippedCells = lastColumn - col + 1;
- addEmptyCells(numSkippedCells, rowElement);
- }
-
- // Now write the style catalog to the document
- if(autoStylesNode!=null) {
- Debug.log(Debug.TRACE,"Well the autostyle node was found!!!");
- NodeList nl = styleCat.writeNode(doc, "dummy").getChildNodes();
- int nlLen = nl.getLength(); // nl.item reduces the length
- for (int i = 0; i < nlLen; i++) {
- autoStylesNode.appendChild(nl.item(0));
- }
- }
-
- if (row != 0) {
-
- // The sheet does have rows, so write out a /tr
- Debug.log(Debug.TRACE, "</tr>");
- }
- }
-
-
- /**
- * This method will add empty rows to the <code>Document</code>.
- * It is called when the conversion process encounters
- * a row (or rows) that do not contain any data in its cells.
- *
- * @param numEmptyRows The number of empty rows that we
- * need to add to the <code>Document</code>.
- * @param root The <code>Node</code> of the
- * <code>Document</code> we are building
- * that we will append our empty row
- * <code>Node</code> objects. This
- * <code>Node</code> should be a TAG_TABLE
- * tag.
- * @param numEmptyCells The number of empty cells in the
- * empty row.
- */
- protected void addEmptyRows(int numEmptyRows, Node root, int numEmptyCells) {
-
- // Create an element node for the row
- Element rowElement = (Element) doc.createElement(TAG_TABLE_ROW);
-
- // TODO - style currently hardcoded - get real value
- // Set row style-name attribute
- rowElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, "Default");
-
- // Set cell number-rows-repeated attribute
- rowElement.setAttribute(ATTRIBUTE_TABLE_NUM_ROWS_REPEATED,
- Integer.toString(numEmptyRows));
-
- // Append the row element to the root node
- root.appendChild(rowElement);
-
- // Open Office requires the empty row to have an empty cell (or cells)
- addEmptyCells(numEmptyCells, rowElement);
-
- // Write empty rows to the log
- for (int i = 0; i < numEmptyRows; i++) {
- Debug.log(Debug.TRACE, "<tr />");
- }
-
- }
-
-
- /**
- * This method will add empty cells to the <code>Document</code>.
- * It is called when the conversion process encounters a row
- * that contains some cells without data.
- *
- * @param numColsSkipped The number of empty cells
- * that we need to add to the
- * current row.
- * @param row The <code>Node</code> of the
- * <code>Document</code> we
- * are building that we will
- * append our empty cell
- * <code>Node</code> objects.
- * This <code>Node</code> should
- * be a TAG_TABLE_ROW tag.
- */
- protected void addEmptyCells(int numColsSkipped, Node row) {
-
- // Create an empty cellElement
- Element cellElement = (Element) doc.createElement(TAG_TABLE_CELL);
-
- // TODO - style currently hardcoded - get real value
- // Set cell style-name attribute
- cellElement.setAttribute(ATTRIBUTE_TABLE_STYLE_NAME, "Default");
-
- // If we skipped more than 1 cell, we must set the
- // appropriate attribute
- if (numColsSkipped > 1) {
-
- // Set cell number-columns-repeated attribute
- cellElement.setAttribute(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED,
- Integer.toString(numColsSkipped));
- }
-
- // Append the empty cell element to the row node
- row.appendChild(cellElement);
-
- // Write empty cells to the log
- for (int i = 0; i < numColsSkipped; i++) {
- Debug.log(Debug.TRACE, "<td />");
- }
- }
-
-
- /**
- * This method process the data in a cell and sets
- * the appropriate attributes on the cell <code>Element</code>.
- *
- * @param cellElement A TAG_TABLE_CELL <code>Element</code>
- * that we will be adding attributes to
- * based on the type of data in the cell.
- * @param type The type of data contained in the cell.
- * @param contents The contents of the data contained in
- * the cell.
- */
- protected void processCellData(Element cellElement, String type,
- String contents) {
-
- // Set cell value-type attribute
- cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE_TYPE, type);
-
- // Does the cell contain a formula?
- if (contents.startsWith("=")) {
-
- cellElement.setAttribute(ATTRIBUTE_TABLE_FORMULA, contents);
-
- cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, decoder.getCellValue());
- // String data does not require any additional attributes
- } else if (!type.equals(CELLTYPE_STRING)) {
-
- if (type.equals(CELLTYPE_TIME)) {
-
- // Data returned in StarOffice XML format, so store in
- // attribute
- cellElement.setAttribute(ATTRIBUTE_TABLE_TIME_VALUE,
- contents);
-
- } else if (type.equals(CELLTYPE_DATE)) {
-
- // Data returned in StarOffice XML format, so store in
- // attribute
- cellElement.setAttribute(ATTRIBUTE_TABLE_DATE_VALUE,
- contents);
-
- } else if (type.equals(CELLTYPE_BOOLEAN)) {
-
- // StarOffice XML format requires stored boolean value
- // to be in lower case
- cellElement.setAttribute(ATTRIBUTE_TABLE_BOOLEAN_VALUE,
- contents.toLowerCase());
-
- } else if (type.equals(CELLTYPE_CURRENCY)) {
- // TODO - StarOffice XML format requires a correct style to
- // display currencies correctly. Need to implement styles.
- // TODO - USD is for US currencies. Need to pick up
- // the correct currency location from the source file.
- cellElement.setAttribute(ATTRIBUTE_TABLE_CURRENCY, "USD");
-
- // Data comes stripped of currency symbols
- cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, contents);
-
- } else if (type.equals(CELLTYPE_PERCENT)) {
- // Data comes stripped of percent signs
- cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, contents);
-
- } else {
- // Remaining data types use table-value attribute
-
- cellElement.setAttribute(ATTRIBUTE_TABLE_VALUE, contents);
- }
- }
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java
deleted file mode 100644
index 9e0d30831d24..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcDocumentSerializer.java
+++ /dev/null
@@ -1,992 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.awt.Color;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import java.io.IOException;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentSerializer;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocument;
-import org.openoffice.xmerge.converter.xml.ParaStyle;
-import org.openoffice.xmerge.converter.xml.sxc.CellStyle;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.XmlUtil;
-
-/**
- * <p>General spreadsheet implementation of <code>DocumentSerializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory
- * SxcPluginFactory}. Used with SXC <code>Document</code> objects.</p>
- *
- * <p>The <code>serialize</code> method traverses the DOM
- * <code>Document</code> from the given <code>Document</code> object.
- * It uses a <code>DocEncoder</code> object for the actual conversion
- * of contents to the device spreadsheet format.</p>
- *
- * @author Paul Rank
- * @author Mark Murnane
- */
-public abstract class SxcDocumentSerializer implements OfficeConstants,
- DocumentSerializer {
-
- /** The cell foreground <code>Color</code>. */
- private Color foreground = Color.black;
-
- /** The cell background <code>Color</code>. */
- private Color background = Color.white;
-
- /** The cell format. */
- private long format = 0;
-
- /** <code>Format</code> object describing the cell. */
- private Format fmt = null;
-
- /** The row number. */
- private int rowID = 1;
-
- /** The column number. */
- private int colID = 1;
-
- /** The number of times the current row is repeated. */
- private int rowsRepeated = 1;
-
- /** The number of times the current column is repeated. */
- private int colsRepeated = 1;
-
- /** The number of times the current column is repeated. */
- private StyleCatalog styleCat = null;
- /**
- * An array of column widths of the current worksheet. Width is
- * measured in number of characters.
- */
- private Vector ColumnRowList;
-
- /** Width, in characters, of the current cell display data. */
- private int displayWidth = 0;
-
- /**
- * A <code>SpreadsheetEncoder</code> object for encoding to
- * appropriate format.
- */
- protected SpreadsheetEncoder encoder = null;
-
- /** <code>SxcDocument</code> object that this converter processes. */
- protected SxcDocument sxcDoc = null;
-
-
- /**
- * Constructor.
- *
- * @param document Input <code>SxcDocument</code>
- * <code>Document</code>.
- */
- public SxcDocumentSerializer(Document document) {
- fmt = new Format();
- sxcDoc = (SxcDocument) document;
- }
-
-
- /**
- * <p>Method to convert a DOM <code>Document</code> into
- * &quot;Device&quot; <code>Document</code> objects.</p>
- *
- * <p>This method is not thread safe for performance reasons.
- * This method should not be called from within two threads.
- * It would be best to call this method only once per object
- * instance.</p>
- *
- * @return <code>ConvertData</code> containing &quot;Device&quot;
- * <code>Document</code> objects.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public abstract ConvertData serialize() throws ConvertException,
- IOException;
-
-
- /**
- * This method traverses <i>office:settings</i> <code>Element</code>.
- *
- * @param node <i>office:settings</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void traverseSettings(Node node) throws IOException {
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_CONFIG_ITEM_SET)) {
-
- traverseSettings(child);
-
- } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_INDEXED)) {
-
- traverseSettings(child);
-
- } else if (nodeName.equals(TAG_CONFIG_ITEM_MAP_ENTRY)) {
-
- BookSettings bs = new BookSettings(child);
- encoder.addSettings(bs);
-
- } else {
-
- Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
- }
-
- /*
- * Handles the loading of defined styles from the style.xml file as well
- * as automatic styles from the content.xml file.
- *
- * Any change to a defined style, such as a short bold section, falls into
- * the latter category.
- */
- protected void loadStyles(SxcDocument sxcDoc) {
-
- org.w3c.dom.Document contentDom = sxcDoc.getContentDOM();
-
- styleCat = new StyleCatalog(25);
-
- NodeList nl = null;
- String families[] = new String[] { SxcConstants.COLUMN_STYLE_FAMILY,
- SxcConstants.ROW_STYLE_FAMILY,
- SxcConstants.TABLE_CELL_STYLE_FAMILY };
- Class classes[] = new Class[] { ColumnStyle.class,
- RowStyle.class,
- CellStyle.class};
-
- /*
- * Process the content XML for any other style info.
- * Should only be automatic types here.
- */
- nl = contentDom.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- if (nl.getLength() != 0) {
- styleCat.add(nl.item(0), families, classes, null, false);
- }
- }
-
- /**
- * This method traverses <i>office:body</i> <code>Element</code>.
- *
- * @param node <i>office:body</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void traverseBody(Node node) throws IOException {
-
- Debug.log(Debug.TRACE, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- Debug.log(Debug.TRACE, "<DEBUGLOG>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node searchNode = nodeList.item(i);
- if (searchNode.getNodeType() == Node.ELEMENT_NODE) {
-
- String nodeName = searchNode.getNodeName();
-
- if (nodeName.equals(TAG_NAMED_EXPRESSIONS)) {
-
- traverseNamedExpressions(searchNode);
-
- } else {
-
- Debug.log(Debug.TRACE, "Skipping " + XmlUtil.getNodeInfo(searchNode) + " />");
- }
- }
- }
-
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_TABLE)) {
-
- traverseTable(child);
-
- } else {
-
- Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
-
- Debug.log(Debug.TRACE, "</DEBUGLOG>");
- }
-
-
- /**
- * This method traverses the <i>table:table</i> element
- * <code>Node</code>.
- *
- * @param node A <i>table:table</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void traverseNamedExpressions(Node node) throws IOException {
-
- Debug.log(Debug.TRACE, "<NAMED:EXPRESSIONS>");
-
- NamedNodeMap att = node.getAttributes();
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- NameDefinition nd = new NameDefinition(child);
- encoder.setNameDefinition(nd);
- }
- }
- }
-
- Debug.log(Debug.TRACE, "</NAMED:EXPRESSIONS>");
- }
-
- /**
- * This method traverses the <i>table:table</i> element
- * <code>Node</code>.
- *
- * @param node A <i>table:table</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void traverseTable(Node node) throws IOException {
-
- Debug.log(Debug.TRACE, "<TABLE>");
-
- ColumnRowList = new Vector();
-
- // Get table attributes
- // TODO - extract style from attribute
-
- NamedNodeMap att = node.getAttributes();
-
- String tableName =
- att.getNamedItem(ATTRIBUTE_TABLE_NAME).getNodeValue();
-
- rowID = 1;
-
- encoder.createWorksheet(tableName);
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_TABLE_ROW)) {
- // TODO - handle all the possible rows
- // spelled out in the entities
-
- traverseTableRow(child);
-
- } else if (nodeName.equals(TAG_TABLE_COLUMN)) {
-
- traverseTableColumn(child);
-
- } else if (nodeName.equals(TAG_TABLE_SCENARIO)) {
-
- // TODO
-
- } else {
-
- Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
-
- // Add column width info to the current sheet
- encoder.setColumnRows(ColumnRowList);
-
- Debug.log(Debug.TRACE, "</TABLE>");
- }
-
- /**
- * This method traverses the <i>table:table-row</i> element
- * <code>Node</code>.
- *
- * @param node A <i>table:table-row</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void traverseTableRow(Node node) throws IOException {
-
- // Get the attributes of the row
- NamedNodeMap cellAtt = node.getAttributes();
-
- if (cellAtt != null) {
-
- Node rowStyle =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_STYLE_NAME);
-
- Node tableNumRowRepeatingNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_ROWS_REPEATED);
- int repeatedRows = 1;
-
- if(tableNumRowRepeatingNode!=null) {
- String repeatStr = tableNumRowRepeatingNode.getNodeValue();
- Debug.log(Debug.TRACE, "traverseTableRow() repeated-rows : " + repeatStr);
- repeatedRows = Integer.parseInt(repeatStr);
- }
-
- String styleName = new String("");
-
- if ( rowStyle != null) {
- styleName = rowStyle.getNodeValue();
- }
- if(styleName.equalsIgnoreCase("Default") || styleName.length()==0) {
-
- Debug.log(Debug.TRACE, "No defined Row Style Attribute was found");
-
- } else {
-
- RowStyle rStyle = ( RowStyle)styleCat.lookup(styleName,
- SxcConstants.ROW_STYLE_FAMILY, null,
- RowStyle.class);
-
- int rowHeight = rStyle.getRowHeight();
-
- Debug.log(Debug.TRACE, "traverseTableRow() Row Height : " + rowHeight);
- ColumnRowInfo ri = new ColumnRowInfo( rowHeight,
- repeatedRows,
- ColumnRowInfo.ROW,
- rowHeight!=0);
- ColumnRowList.add(ri);
- }
-
- // Get the attribute representing the number of rows repeated
- Node rowsRepeatedNode =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_ROWS_REPEATED);
-
- // There is a number of rows repeated attribute:
- if (rowsRepeatedNode != null) {
-
- // Get the number of times the row is repeated
- String rowsRepeatedString = rowsRepeatedNode.getNodeValue();
-
- Integer rowsRepeatedInt = new Integer(rowsRepeatedString);
-
- rowsRepeated = rowsRepeatedInt.intValue();
-
- } else {
-
- // The row is not repeated
- rowsRepeated = 1;
- }
- }
-
- Debug.log(Debug.TRACE, "<TR>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_TABLE_CELL)) {
-
- traverseCell(child);
-
- } else {
-
- Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
-
- // Increase the row counter by the number of rows which are repeated
- rowID += rowsRepeated;
-
- // Re-initialize number of rows repeated before processing the next
- // row data.
- rowsRepeated = 1;
-
- // When starting a new row, set the column counter back to the
- // first column.
- colID = 1;
-
- // Re-initialize number of columns repeated before processing
- // the next row data.
- colsRepeated = 1;
-
- Debug.log(Debug.TRACE, "</TR>");
- }
-
-
- /**
- * This method traverses the <i>table:table-column</i>
- * <code>Node</code>. Not yet implemented.
- *
- * @param node A <i>table:table-column</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void traverseTableColumn(Node node) throws IOException {
-
- Debug.log(Debug.TRACE, "traverseColumn() : ");
- NamedNodeMap cellAtt = node.getAttributes();
- Node tableStyleNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_STYLE_NAME);
- Node tableNumColRepeatingNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED);
- Node tableDefaultCellStyle = cellAtt.getNamedItem(ATTRIBUTE_DEFAULT_CELL_STYLE);
-
- int repeatedColumns = 1;
- int columnWidth = 0;
- ColumnRowInfo col = new ColumnRowInfo(ColumnRowInfo.COLUMN);
-
- if(tableNumColRepeatingNode!=null) {
- Debug.log(Debug.TRACE, "traverseColumn() repeated-cols : " + tableNumColRepeatingNode.getNodeValue());
- repeatedColumns = Integer.parseInt(tableNumColRepeatingNode.getNodeValue());
- col.setRepeated(repeatedColumns);
- }
-
- String cellStyleName = new String("");
-
- if(tableDefaultCellStyle!=null) {
- cellStyleName = tableDefaultCellStyle.getNodeValue();
-
- Debug.log(Debug.TRACE, "traverseColumn() default-cell-style : " + cellStyleName);
- }
-
- if(cellStyleName.equalsIgnoreCase("Default") || cellStyleName.length()==0) {
-
- Debug.log(Debug.TRACE, "No default cell Style Attribute was found");
-
- } else {
-
- CellStyle cellStyle = (CellStyle)styleCat.lookup(cellStyleName,
- SxcConstants.TABLE_CELL_STYLE_FAMILY, null,
- CellStyle.class);
- Format defaultFmt = new Format(cellStyle.getFormat());
- col.setFormat(defaultFmt);
- }
-
- String styleName = new String("");
-
- if(tableStyleNode!=null) {
- styleName = tableStyleNode.getNodeValue();
- }
-
- if(styleName.equalsIgnoreCase("Default") || styleName.length()==0) {
-
- Debug.log(Debug.TRACE, "No defined Style Attribute was found");
-
- } else {
-
- ColumnStyle cStyle = (ColumnStyle)styleCat.lookup(styleName,
- SxcConstants.COLUMN_STYLE_FAMILY, null,
- ColumnStyle.class);
-
- columnWidth = cStyle.getColWidth();
- col.setSize(columnWidth);
- Debug.log(Debug.TRACE, "traverseColumn() Column Width : " + columnWidth);
-
- }
- ColumnRowList.add(col);
- }
-
- /**
- * This method traverses a <i>table:table-cell</i> element
- * <code>Node</code>.
- *
- * @param node a <i>table:table-cell</i> <code>Node</code>.
- *
- * @throws IOException if any I/O error occurs.
- */
- protected void traverseCell(Node node) throws IOException {
-
- NamedNodeMap cellAtt = node.getAttributes();
-
- int debug_i=0;
- Node debug_attrib = null;
- fmt.clearFormatting();
- if (cellAtt == null || cellAtt.item(0) == null)
- {
- Debug.log(Debug.INFO, "No Cell Attributes\n");
- // return;
- }
- else
- {
- while ((debug_attrib = cellAtt.item(debug_i++)) != null)
- {
- Debug.log(Debug.INFO, "Cell Attribute " + debug_i +
- ": " + debug_attrib.getNodeName() + " : " +
- debug_attrib.getNodeValue() + "\n");
- }
- }
-
- // Get the type of data in the cell
- Node tableValueTypeNode =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE_TYPE);
-
- // Get the number of columns this cell is repeated
- Node colsRepeatedNode =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED);
-
- // Get the style type
- Node tableStyleNode =
- cellAtt.getNamedItem(ATTRIBUTE_TABLE_STYLE_NAME);
-
- String styleName = new String("");
-
- if(tableStyleNode!=null) {
- styleName = tableStyleNode.getNodeValue();
- }
-
- if(styleName.equalsIgnoreCase("Default")) {
-
- Debug.log(Debug.TRACE, "No defined Style Attribute was found");
-
- } else if(styleName.length()!=0) {
-
- CellStyle cStyle = (CellStyle)styleCat.lookup(styleName,
- SxcConstants.TABLE_CELL_STYLE_FAMILY, null,
- CellStyle.class);
-
- Format definedFormat = cStyle.getFormat();
- fmt = new Format(definedFormat);
- }
-
- // There is a number of cols repeated attribute
- if (colsRepeatedNode != null) {
-
- // Get the number of times the cell is repeated
- String colsRepeatedString = colsRepeatedNode.getNodeValue();
-
- Integer colsRepeatedInt = new Integer(colsRepeatedString);
- colsRepeated = colsRepeatedInt.intValue();
- } else {
-
- // The cell is not repeated
- colsRepeated = 1;
- }
-
-
- // if there is no style we need to check to see if there is a default
- // cell style defined in the table-column's
-
- if (fmt.isDefault() && styleName.length()==0) {
- int index = 1;
- for(Enumeration e = ColumnRowList.elements();e.hasMoreElements();) {
- ColumnRowInfo cri = (ColumnRowInfo) e.nextElement();
- if(cri.isColumn()) {
- if(colID>=index && colID<(index+cri.getRepeated())) {
- fmt = new Format(cri.getFormat());
- }
- index += cri.getRepeated();
- }
- }
- }
-
-
- // for (int j = 0; j < colsRepeated; j++) {
-
-
- if (tableValueTypeNode != null) {
-
- // Make sure we initialize to 0 the width of the current cell
- displayWidth = 0;
-
- String cellType =
- tableValueTypeNode.getNodeValue();
-
- if (cellType.equalsIgnoreCase(CELLTYPE_STRING)) {
-
- // has text:p tag
- fmt.setCategory(CELLTYPE_STRING);
- Node tableStringValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_STRING_VALUE);
- Debug.log(Debug.TRACE,"Cell Type String : " + tableStringValueNode);
- if(tableStringValueNode != null) {
- fmt.setValue(tableStringValueNode.getNodeValue());
- }
-
- } else if (cellType.equalsIgnoreCase(CELLTYPE_FLOAT)) {
-
- // has table:value attribute
- // has text:p tag
-
- // Determine the number of decimal places StarCalc
- // is displaying for this floating point output.
- fmt.setCategory(CELLTYPE_FLOAT);
- fmt.setDecimalPlaces(getDecimalPlaces(node));
- Node tableValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE);
- fmt.setValue(tableValueNode.getNodeValue());
-
-
- } else if (cellType.equalsIgnoreCase(CELLTYPE_TIME)) {
-
- // has table:time-value attribute
- // has text:p tag - which is the value we convert
-
- fmt.setCategory(CELLTYPE_TIME);
- Node tableTimeNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_TIME_VALUE);
- fmt.setValue(tableTimeNode.getNodeValue());
-
- } else if (cellType.equalsIgnoreCase(CELLTYPE_DATE)) {
-
- // has table:date-value attribute
- // has text:p tag - which is the value we convert
-
- fmt.setCategory(CELLTYPE_DATE);
- Node tableDateNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_DATE_VALUE);
- fmt.setValue(tableDateNode.getNodeValue());
-
- } else if (cellType.equalsIgnoreCase(CELLTYPE_CURRENCY)) {
-
- // has table:currency
- // has table:value attribute
- // has text:p tag
-
- fmt.setCategory(CELLTYPE_CURRENCY);
- fmt.setDecimalPlaces(getDecimalPlaces(node));
- Node tableValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE);
- fmt.setValue(tableValueNode.getNodeValue());
-
- } else if (cellType.equalsIgnoreCase(CELLTYPE_BOOLEAN)) {
-
- // has table:boolean-value attribute
- // has text:p tag - which is the value we convert
-
- fmt.setCategory(CELLTYPE_BOOLEAN);
- Node tableBooleanNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_BOOLEAN_VALUE);
- fmt.setValue(tableBooleanNode.getNodeValue());
-
- } else if (cellType.equalsIgnoreCase(CELLTYPE_PERCENT)) {
-
- // has table:value attribute
- // has text:p tag
-
- fmt.setCategory(CELLTYPE_PERCENT);
- fmt.setDecimalPlaces(getDecimalPlaces(node));
- Node tableValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_VALUE);
- fmt.setValue(tableValueNode.getNodeValue());
-
- } else {
-
- Debug.log(Debug.TRACE,"No defined value type" + cellType);
- // Should never get here
-
- }
- }
-
- Node tableFormulaNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_FORMULA);
-
- if(tableFormulaNode != null)
- {
- if(tableValueTypeNode == null) { // If there is no value-type Node we must assume string-value
- fmt.setCategory(CELLTYPE_STRING);
- Node tableStringValueNode = cellAtt.getNamedItem(ATTRIBUTE_TABLE_STRING_VALUE);
- fmt.setValue(tableStringValueNode.getNodeValue());
- }
- String cellFormula = tableFormulaNode.getNodeValue();
- addCell(cellFormula);
- } else {
-
- // Text node, Date node, or Time node
- //
- Debug.log(Debug.INFO,
- "TextNode, DateNode, TimeNode or BooleanNode\n");
- // This handles the case where we have style information but no content
- if (node.hasChildNodes()) {
- NodeList childList = node.getChildNodes();
- int len = childList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = childList.item(i);
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String childName = child.getNodeName();
- if (childName.equals(TAG_PARAGRAPH)) {
- traverseParagraph(child);
- }
- }
- }
- } else if(!fmt.isDefault()) {
- addCell("");
- }
- }
-
- // Clear out format for current cell after it is written
- format = 0;
-
- // Increase the column counter by the number of times the
- // last cell was repeated.
- colID += colsRepeated;
-
- // Re-initialize the number of columns repeated before processing
- // the next cell data.
- colsRepeated = 1;
-
- }
-
-
- /**
- * This method traverses the <i>text:p</i> element <code>Node</code>.
- *
- * @param node A <i>text:p</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void traverseParagraph(Node node) throws IOException {
-
- NamedNodeMap cellAtt = node.getAttributes();
-
- int debug_i=0;
- Node debug_attrib = null;
- if (cellAtt == null || cellAtt.item(0) == null)
- {
- Debug.log(Debug.INFO, "No Paragraph Attributes\n");
- }
- else
- {
- while ((debug_attrib = cellAtt.item(debug_i++)) != null)
- {
- Debug.log(Debug.INFO, "Paragraph Attribute " + debug_i +
- ": " + debug_attrib.getNodeName() + " : " +
- debug_attrib.getNodeValue() + "\n");
- }
- }
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
-
- int len = nodeList.getLength();
-
- StringBuffer buffer = new StringBuffer();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- // TODO: need to handle space/tabs/newline nodes later
- short nodeType = child.getNodeType();
-
- switch (nodeType) {
-
- case Node.TEXT_NODE:
- buffer.append(child.getNodeValue());
- break;
-
- case Node.ENTITY_REFERENCE_NODE:
-
- NodeList nodeList2 = child.getChildNodes();
- int len2 = nodeList2.getLength();
-
- for (int j = 0; j < len2; j++) {
- Node child2 = nodeList2.item(j);
-
- if (child2.getNodeType() == Node.TEXT_NODE) {
- buffer.append(child2.getNodeValue());
- }
- }
-
- break;
- }
- }
-
- String s = buffer.toString();
- // displayWidth = calculateContentWidth(s);
- addCell(s);
-
- }
- }
-
-
- /**
- * This method will take the input cell value and add
- * it to the spreadsheet <code>Document</code> we are currently
- * encoding. This method correctly handles cells that are
- * repeated in either the row, cell, or both directions.
- *
- * @param cellValue The contents of the cell we want to add
- * to the spreadsheet <code>Document</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- protected void addCell(String cellValue) throws IOException {
-
- int col = colID;
- int row = rowID;
-
- for (int i = 0; i < rowsRepeated; i++) {
-
- // Log the columns when there are rowsRepeated.
- if (i > 0) {
- Debug.log(Debug.TRACE, "</TR>");
- Debug.log(Debug.TRACE, "<TR>");
- }
-
- col = colID;
-
- for (int j = 0; j < colsRepeated; j++) {
-
- Debug.log(Debug.TRACE, "<TD>");
-
-
- // Add the cell data to the encoded spreadsheet document
- encoder.addCell(row, col, fmt, cellValue);
-
- Debug.log(Debug.TRACE, cellValue);
- Debug.log(Debug.TRACE, "</TD>");
-
- col++;
- }
-
- row++;
-
- }
-
- }
-
-
-
- /**
- * This method takes a <i>table:table-cell</i> <code>Node</code>
- * and traverses down to the <i>text:p</i> tag. The value is
- * extracted from the <i>text:p</i> tag and the number of decimal
- * places is calculated.
- *
- * @param node A <i>table:table-cell</i> <code>Node</code>.
- *
- * @return The number of decimal places in the display
- * string of the data in the input <code>Node</code>.
- */
- protected int getDecimalPlaces(Node node) {
-
- int decimals = 0;
-
- Element element = null;
-
- // cast org.w3c.dom.Node to org.w3c.dom.Element
- if (node instanceof Element) {
- element = (Element) node;
- } else {
- return decimals;
- }
-
- // Traverse to the text:p element, there should only be one.
- NodeList list = element.getElementsByTagName(TAG_PARAGRAPH);
-
- if (list.getLength() != 1) {
- return decimals;
- }
-
- Node paragraph = list.item(0);
-
- if (paragraph.hasChildNodes()) {
-
- NodeList nodeList = paragraph.getChildNodes();
-
- int len = nodeList.getLength();
-
- for (int j = 0; j < len; j++) {
-
- Node child = nodeList.item(j);
-
- if (child.getNodeType() == Node.TEXT_NODE) {
-
- String s = child.getNodeValue();
-
- // displayWidth = calculateContentWidth(s);
-
- int k = s.lastIndexOf(".");
- if (k > 0) {
- s = s.substring(k+1);
- decimals = s.length();
- }
- }
- }
- }
-
- return decimals;
- }
-
- /*
- * Utility method to retrieve a Node attribute.
- */
- private String getAttribute (Node node, String attribute) {
- NamedNodeMap attrNodes = node.getAttributes();
-
- if (attrNodes != null) {
- Node attr = attrNodes.getNamedItem(attribute);
- if (attr != null) {
- return attr.getNodeValue();
- }
- }
- return null;
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java
deleted file mode 100644
index 4bdaad8e009c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/SxcPluginFactory.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.PluginFactory;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.DocumentMergerFactory;
-
-
-/**
- * General implementation of the <code>PluginFactory</code> interface
- * for SXC <code>Document</code> objects.
- *
- * @see org.openoffice.xmerge.DocumentDeserializer
- * @see org.openoffice.xmerge.DocumentMerger
- * @see org.openoffice.xmerge.DocumentSerializer
- */
-public abstract class SxcPluginFactory
- extends PluginFactory implements DocumentMergerFactory {
-
-
- /**
- * Constructor that caches the <code>ConvertInfo</code> that
- * corresponds to the registry information for this plug-in.
- *
- * @param ci <code>ConvertInfo</code> object.
- */
- public SxcPluginFactory(ConverterInfo ci) {
- super(ci);
- }
-
-
- public Document createOfficeDocument(String name, InputStream is)
- throws IOException {
-
- // read zipped XML stream
- //
- SxcDocument doc = new SxcDocument(name);
- doc.read(is);
- return doc;
- }
-
- public Document createOfficeDocument(String name, InputStream is,boolean isZip)
- throws IOException {
-
- // read zipped XML stream
- //
- SxcDocument doc = new SxcDocument(name);
- doc.read(is,isZip);
- return doc;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/build.xml
deleted file mode 100644
index 5805a5253993..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/build.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcx_sxc" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcx_sxc"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxc"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/CellStyle.java"/>
- <include name="${package}/ColumnStyle.java"/>
- <include name="${package}/ColumnRowInfo.java"/>
- <include name="${package}/RowStyle.java"/>
- <include name="${package}/SxcConstants.java"/>
- <include name="${package}/SxcDocument.java"/>
- <include name="${package}/Format.java"/>
- <include name="${package}/BookSettings.java"/>
- <include name="${package}/SheetSettings.java"/>
- <include name="${package}/NameDefinition.java"/>
- <include name="${package}/SpreadsheetDecoder.java"/>
- <include name="${package}/SpreadsheetEncoder.java"/>
- <include name="${package}/SxcDocumentDeserializer.java"/>
- <include name="${package}/SxcDocumentSerializer.java"/>
- <include name="${package}/DocumentMergerImpl.java"/>
- <include name="${package}/SxcPluginFactory.java"/>
-
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/makefile.mk
deleted file mode 100644
index abc309279f0f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxcx_sxc
-PRJ=../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java
deleted file mode 100644
index 07b0c751b93d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/ConverterCapabilitiesImpl.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-
-/**
- * <p>MiniCalc implementation of <code>ConverterCapabilities</code> for
- * the {@link
- * org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>Used with StarCalc SXC to/from MiniCalc conversions. The
- * <code>ConverterCapibilies</code> specify which &quot;Office&quot;
- * <code>Document</code> tags and attributes are supported on the
- * &quot;Device&quot; <code>Document</code> format.</p>
- */
-public final class ConverterCapabilitiesImpl
- implements ConverterCapabilities {
-
- public boolean canConvertTag(String tag) {
-
- if (OfficeConstants.TAG_OFFICE_BODY.equals(tag))
- return true;
- else if (OfficeConstants.TAG_PARAGRAPH.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TABLE.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TABLE_ROW.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TABLE_COLUMN.equals(tag))
- return false;
- // TODO - we currently do not handle the table column tag
- else if (OfficeConstants.TAG_TABLE_SCENARIO.equals(tag))
- return false;
- // TODO - we currently do not handle the table scenario tag
- else if (OfficeConstants.TAG_TABLE_CELL.equals(tag))
- return true;
-
- return false;
- }
-
- public boolean canConvertAttribute(String tag,
- String attribute) {
-
- if (OfficeConstants.TAG_TABLE.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_TABLE_NAME.equals(attribute))
- return true;
-
- } else if (OfficeConstants.TAG_TABLE_CELL.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_TABLE_VALUE_TYPE.equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_FORMULA.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_VALUE.equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_BOOLEAN_VALUE.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_CURRENCY.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_TIME_VALUE.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_DATE_VALUE.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED.
- equals(attribute))
- return true;
-
- } else if (OfficeConstants.TAG_TABLE_ROW.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED.
- equals(attribute))
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java
deleted file mode 100644
index 140dfde1881b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDataString.java
+++ /dev/null
@@ -1,545 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
-
-/**
- * This class is used by <code>MinicalcDecoder</code> to manipulate a
- * <code>String</code> containing MiniCalc cell data.
- *
- * @author Paul Rank
- */
-public class MinicalcDataString {
-
- /** The String representation of the MiniCalc data. */
- private String data = null;
-
-
- /**
- * Constructor stores the MiniCalc data <code>String</code>.
- *
- * @param data A <code>String</code> containing MiniCalc
- * cell data.
- */
- public MinicalcDataString(String data) {
- this.data = data;
- }
-
-
- /**
- * Checks if the MiniCalc data <code>String</code> is a <i>formula</i>.
- *
- * @return true if the MiniCalc data <code>String</code> is a
- * <i>formula</i>, false if the MiniCalc data <code>String</code>
- * is not a <i>formula</i>.
- */
- public boolean isFormula() {
-
- if (data.startsWith("=")) {
- return true;
- }
-
- return false;
- }
-
-
- /**
- * Checks if the MiniCalc data <code>String</code> is a <i>percentage</i>.
- *
- * @return true if the MiniCalc data <code>String</code> is a
- * <i>percentage</i>, false if the MiniCalc data
- * <code>String</code> is not a <i>percentage</i>.
- */
- public boolean isPercent() {
-
- if (data.endsWith("%")) {
- return true;
- }
-
- return false;
- }
-
-
- /**
- * Checks if the MiniCalc data <code>String</code> is a
- * <i>boolean</i> value.
- *
- * @return true if the MiniCalc data <code>String</code> is
- * a <i>boolean</i>, false if the MiniCalc data
- * <code>String</code> is not a <i>boolean</i>.
- */
- public boolean isBoolean() {
-
- if (data.equalsIgnoreCase("false") ||
- data.equalsIgnoreCase("true")) {
- return true;
- }
-
- return false;
- }
-
-
- /**
- * Checks if the MiniCalc data <code>String</code> is a <i>date</i>.
- *
- * @return true if the MiniCalc data <code>String</code> is
- * a <i>date</i>, false if the MiniCalc data <code>String</code>
- * is not a <i>date</i>.
- */
- public boolean isDate() {
-
- // Starting index into the date string - month
- int start = 0;
-
- // Search for "/", which separates month from day
- int end = data.indexOf("/");
-
- // Separator was found
- if (end > 0) {
-
- String monthString = data.substring(start, end);
-
- try {
- Float f = Float.valueOf(monthString);
- if ((f.intValue() < 0) || (f.intValue() > 12)) {
- return false;
- }
- }
- catch (NumberFormatException e) {
-
- // no, it is not a currency type
- return false;
- }
-
- // start is now the starting index of day
- start = end+1;
-
- // Search for "/", which separates day from year
- end = data.indexOf("/", start);
-
- // Separator was found
- if (end > 0) {
-
- String dayString = data.substring(start, end);
-
- try {
- Float f = Float.valueOf(dayString);
- if ((f.intValue() < 0) || (f.intValue() > 31))
- return false;
- }
- catch (NumberFormatException e) {
- // no, it is not a currency type
- return false;
- }
- } else {
- return false;
- }
-
- // start is now at the starting index of the year
- start = end + 1;
-
- String yearString = data.substring(start);
- try {
- Float f = Float.valueOf(yearString);
- if (f.intValue() < 0) {
- return false;
- }
- }
- catch (NumberFormatException e) {
- // no, it is not a currency type
- return false;
- }
-
- } else {
- return false;
- }
-
- return true;
- }
-
-
- /**
- * Checks if the MiniCalc data <code>String</code> is a <i>time</i>.
- *
- * @return true if the MiniCalc data <code>String</code>
- * is a <i>time</i>, false if the MiniCalc data
- * <code>String</code> is not a <i>time</i>.
- */
- public boolean isTime() {
-
- // Starting index into the time string - hour
- int start = 0;
-
- // Search for ":", which separates hour from minute
- int end = data.indexOf(":");
-
-
- // Separator was found
- if (end > 0) {
-
- String hourString = data.substring(start, end);
- try {
- Float f = Float.valueOf(hourString);
- if ((f.intValue() < 0) || (f.intValue() > 24))
- return false;
- }
- catch (NumberFormatException e) {
- // no, it is not a time type
- return false;
- }
-
- // start is now the starting index of minute
- start = end+1;
-
- // Search for ":", which separates minute from second
- end = data.indexOf(":", start);
-
- // Separator was found
- if (end > 0) {
-
- String minuteString = data.substring(start, end);
-
- try {
- Float f = Float.valueOf(minuteString);
- if ((f.intValue() < 0) || (f.intValue() > 60))
- return false;
- }
- catch (NumberFormatException e) {
- // no, it is not a time type
- return false;
- }
-
- // start is now at the starting index of the seconds
- start = end+1;
-
- // The seconds are in the string
- if (data.length() > start) {
-
- String secondString = data.substring(start);
-
-
- try {
- Float f = Float.valueOf(secondString);
- if ((f.intValue() < 0) || (f.intValue() > 60))
- return false;
- }
- catch (NumberFormatException e) {
- // no, it is not a time type
- return false;
- }
- }
-
- }
-
- return true;
-
- }
-
- return false;
- }
-
-
- /**
- * Checks if the MiniCalc data <code>String</code> is a <i>currency</i>
- * value.
- *
- * @return true if the MiniCalc data <code>String</code> is
- * a <i>currency</i>, false if the MiniCalc data
- * <code>String</code> is not a <i>currency</i>.
- */
- public boolean isCurrency() {
-
- boolean result = false;
-
- // TODO - we currently only check for US currencies
-
- if (data.endsWith("$")) {
- String number = data.substring(0, data.length()-1);
- try {
- Float f = Float.valueOf(number);
- result = true;
- }
- catch (NumberFormatException e) {
- // no, it is not a currency type
- result = false;
- }
- }
-
- else if (data.startsWith("$")) {
- String number = data.substring(1, data.length());
- try {
- Float f = Float.valueOf(number);
- result = true;
- }
- catch (NumberFormatException e) {
- // no, it is not a currency type
- result = false;
- }
- }
-
- return result;
-
- }
-
-
- /**
- * This method removes the percent sign from the MiniCalc data
- * <code>String</code>. If the percent sign is not the last
- * character of the MiniCalc data <code>String</code>, the
- * MiniCalc data <code>String</code> is returned.
- *
- * @return The MiniCalc data <code>String</code> minus the
- * percent sign. If the MiniCalc data <code>String</code>
- * does not begin with a percent sign, the MiniCalc data
- * <code>String</code> is returned.
- */
- public String percentRemoveSign() {
-
- String number = data;
-
- if (data.endsWith("%")) {
- // "%" is the last character, so remove
- number = data.substring(0, data.length()-1);
-
- try {
- Float f = Float.valueOf(number);
- float f1 = f.floatValue()/100f;
- Float f2 = new Float(f1);
- number = f2.toString();
- }
- catch (NumberFormatException e) {
- // no, it is not a float type
- }
- }
-
- return number;
- }
-
-
- /**
- * This method removes the currency sign from the MiniCalc data
- * <code>String</code>. If the currency sign is not the first or
- * last character of the MiniCalc data <code>String</code>, the
- * MiniCalc data <code>String</code> is returned.
- *
- * @return The MiniCalc data <code>String</code> minus the currency
- * sign. If the MiniCalc data <code>String</code> does not
- * begin or end with a currency sign, the MiniCalc
- * data <code>String</code> is returned.
- */
- public String currencyRemoveSign() {
-
- String number = data;
-
- // TODO - only works with US currencies
-
- if (data.endsWith("$")) {
-
- number = data.substring(0, data.length()-1);
-
- } else if (data.startsWith("$")) {
-
- number = data.substring(1, data.length());
- }
-
- return number;
-
- }
-
-
- /**
- * <p>This method converts a MiniCalc date from MiniCalc
- * format to StarOffice XML format.</p>
- *
- * <p>MiniCalc format:</p>
- *
- * <p><blockquote>
- * MM/DD/YY or MM/DD/YYYY
- * </blockquote></p>
- *
- * <p>StarOffice XML format:</p>
- *
- * <p><blockquote>
- * YYYY-MM-DD
- * </blockquote></p>
- *
- * @return The MiniCalc date converted to StarOffice XML
- * format.
- */
- public String convertToStarDate() {
-
- // The output date string
- String out;
-
- String monthString = "01";
- String dayString = "01";
- String yearString = "1900";
-
- // Starting index into the date string - month
- int start = 0;
-
- // Search for "/", which separates month from day
- int end = data.indexOf("/");
-
- // Separator was found
- if (end > 0) {
-
- monthString = data.substring(start, end);
-
- Integer monthInt = new Integer(monthString);
-
- // Make sure month is 2 digits
- if (monthInt.intValue() < 10) {
- monthString = "0" + monthString;
- }
-
- // start is now the starting index of day
- start = end+1;
-
- // Search for "/", which separates day from year
- end = data.indexOf("/", start);
-
- // Separator was found
- if (end > 0) {
-
- dayString = data.substring(start, end);
-
- Integer dayInt = new Integer(dayString);
-
- // Make sure day is 2 digits
- if (dayInt.intValue() < 10) {
- dayString = "0" + dayString;
- }
-
- // start is now at the starting index of the year
- start = end + 1;
-
- // The year is in the string
- if (data.length() > start) {
-
- yearString = data.substring(start);
-
- Integer yearInt = new Integer(yearString);
- int year = yearInt.intValue();
-
- if (year < 31) {
-
- // MiniCalc years between 0 and 30 correspond to
- // 2000 - 2030
- year += 2000;
-
- } else if (year < 100) {
-
- // MiniCalc years between 31 and 99 correspond
- // to 1931 - 1999
- year += 1900;
- }
-
- yearString = Integer.toString(year);
- }
- }
- }
-
- // Set out to StarOffice XML date format
- out = yearString + "-" + monthString + "-" + dayString;
-
- return out;
- }
-
-
- /**
- * This method converts the MiniCalc time from MiniCalc
- * format to StarOffice XML format.
- *
- * <p>MiniCalc format:</p>
- *
- * <p><blockquote>
- * hh:mm:ss
- * </blockquote></p>
- *
- * <p>StarOffice XML format:</p>
- *
- * <p><blockquote>
- * PThhHmmMssS
- * </blockquote></p>
- *
- * @return The MiniCalc time converted to StarOffice XML
- * format.
- */
- public String convertToStarTime() {
-
- // The output time string
- String out;
-
- String hourString = "00";
- String minuteString = "00";
- String secondString = "00";
-
- // Starting index into the time string - hour
- int start = 0;
-
- // Search for ":", which separates hour from minute
- int end = data.indexOf(":");
-
- // Separator was found
- if (end > 0) {
-
- hourString = data.substring(start, end);
-
- // start is now the starting index of minute
- start = end+1;
-
- // Search for ":", which separates minute from second
- end = data.indexOf(":", start);
-
- // Separator was found
- if (end > 0) {
-
- minuteString = data.substring(start, end);
-
- // start is now at the starting index of the seconds
- start = end+1;
-
- // The seconds are in the string
- if (data.length() > start) {
-
- secondString = data.substring(start);
- }
-
- }
- }
-
- // TODO - PT is for pacific time, where can we get the
- // localized value from?
-
- // Set to StarOffice XML time format
- out = "PT"+hourString+"H"+minuteString+"M"+secondString+"S";
-
- return out;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java
deleted file mode 100644
index a165a25f9fbf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcDecoder.java
+++ /dev/null
@@ -1,744 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
-
-import jmc.Workbook;
-import jmc.Worksheet;
-import jmc.CellAttributes;
-import jmc.CellDescriptor;
-import jmc.JMCconstants;
-import jmc.JMCException;
-
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.palm.PalmDB;
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer;
-import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializerImpl}
- * SxcDocumentDeserializerImpl} to decode the MiniCalc format.
- *
- * @author Paul Rank
- */
-final class MinicalcDecoder extends SpreadsheetDecoder {
-
- /** MiniCalc WorkBook to store sheets. */
- private Workbook wb;
-
- /** MiniCalc sheet - only one sheet can be open at a time. */
- private Worksheet ws;
-
- /** The current cell - only one cell can be active at a time. */
- private CellDescriptor cell = null;
-
- /** Format object describing the current cell. */
- private Format fmt = null;
-
- /** The password for the WorkBook. */
- private String password = null;
-
- /** The number of rows in the current WorkSheet. */
- private int maxRows = 0;
-
- /** The number of columns in the current WorkSheet. */
- private int maxCols = 0;
-
- /** The names of the worksheets. */
- private String[] worksheetNames = null;
-
- /**
- * Constructor creates a MiniCalc WorkBook.
- *
- * @param name The name of the WorkBook.
- * @param password The password for the workBook.
- *
- * @throws IOException If any I/O error occurs.
- */
- MinicalcDecoder(String name, String[] worksheetNames, String password) throws IOException {
-
- super(name, password);
-
- fmt = new Format();
-
- this.password = password;
- this.worksheetNames = worksheetNames;
-
- try {
-
- wb = new Workbook(name, password);
-
- }
- catch (JMCException e) {
-
- Debug.log(Debug.ERROR, "MinicalcDecoder.constructor:" + e.getMessage());
-
- throw new IOException(e.getMessage());
- // e.printStackTrace();
-
- }
- }
-
-
- /**
- * This method takes a <code>ConvertData</code> as input and
- * converts it into a MiniCalc WorkSheet. The WorkSheet is then
- * added to the WorkBook.
- *
- * @param InputStream An <code>ConvertData</code> containing a
- * MiniCalc WorkSheet.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void addDeviceContent(ConvertData cd) throws IOException {
-
- try {
- PalmDocument palmDoc;
- int j = 0;
-
- Enumeration e = cd.getDocumentEnumeration();
- while(e.hasMoreElements()) {
-
- palmDoc = (PalmDocument) e.nextElement();
- // Convert PDB to WorkBook/WorkSheet format
- PalmDB pdb = palmDoc.getPdb();
-
- // This will be done at least once
- String sheetName = worksheetNames[j];
-
- // Get number of records in the pdb
- int numRecords = pdb.getRecordCount();
-
- // sheetName does not contain the WorkBook name, but we need the
- // full name.
- String fullSheetName = new String(wb.getWorkbookName() + "-" + sheetName);
-
- // Create a new (empty) WorkSheet
- ws = new Worksheet();
-
- // Initialize the WorkSheet
- ws.initWorksheet(fullSheetName, numRecords);
-
- // Loop over the number of records in the PDB
- for (int i = 0; i < numRecords; i++) {
-
- // Read record i from the PDB
- Record rec = pdb.getRecord(i);
-
- byte cBytes[] = rec.getBytes();
-
- // Create an InputStream
- ByteArrayInputStream bis = new ByteArrayInputStream(cBytes);
-
- // Get the size of the stream
- int bisSize = cBytes.length;
-
- // Add each record to the WorkSheet
- ws.readNextRecord(bis, bisSize);
- }
-
-
- // Add the WorkSheet to the WorkBook
- wb.addWorksheet(ws);
- j++;
- }
- }
- catch (JMCException e) {
-
- Debug.log(Debug.ERROR, "MinicalcDecoder.addPDB:" + e.getMessage());
-
- throw new IOException(e.getMessage());
- }
- }
-
-
- /**
- * This method returns the number of spreadsheets
- * stored in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public int getNumberOfSheets() {
-
- return wb.getNumberOfSheets();
- }
-
-
- /**
- * This method gets the requested WorkSheet from the
- * WorkBook and sets it as the selected WorkSheet. All
- * other "get" methods will now get data from this WorkSheet.
- *
- * @param sheetIndex The index number of the sheet to open.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void setWorksheet(int sheetIndex) throws IOException {
-
- try {
-
- ws = wb.getWorksheet(sheetIndex);
-
- // Initialize access to the WorkSheet so that we can calculate
- // the number of rows and columns
- ws.initAccess(password);
-
- maxRows = 0;
- maxCols = 0;
-
- while (goToNextCell()) {
- maxRows = Math.max(maxRows, cell.getRowNumber());
- maxCols = Math.max(maxCols, cell.getColNumber());
- }
-
- // Re-initialize access to the WorkSheet
- ws.initAccess(password);
-
- }
- catch (JMCException e) {
-
- Debug.log(Debug.ERROR, "MinicalcDecoder.setWorksheet:" + e.getMessage());
-
- throw new IOException(e.getMessage());
- // e.printStackTrace();
-
- }
- }
-
-
- /**
- * This method returns the name of the current spreadsheet.
- *
- * @return The name of the current WorkSheet.
- */
- public String getSheetName() {
-
- String sheetName = ws.getName();
-
- return sheetName;
- }
-
-
- /**
- * This method gets the next cell from the WorkSheet
- * and sets it as the selected cell. All other "get"
- * methods will now get data from this cell.
- *
- * @return True if we were able to go to another cell
- * in the sheet, false if there were no cells
- * left.
- *
- * @throws IOException If any I/O error occurs.
- */
- public boolean goToNextCell() throws IOException {
-
- boolean gotCell = false;
-
- try {
- cell = ws.getNextCell();
-
- if (cell != null) {
- gotCell = true;
- }
-
- // As we read each cell, get its formatting info
- readCellFormat();
- }
- catch (JMCException e) {
-
- Debug.log(Debug.ERROR, "MinicalcDecoder.goToNextCell:" + e.getMessage());
-
- throw new IOException(e.getMessage());
- // e.printStackTrace();
-
- }
-
- return gotCell;
- }
-
-
- /**
- * This method returns the row number of the current cell.
- *
- * @return The row number of the current cell. Returns
- * -1 if no cell is currently selected.
- */
- public int getRowNumber() {
-
- int row = -1;
-
- if (cell != null) {
-
- row = cell.getRowNumber();
- }
-
- return row;
- }
-
- /**
- * This method returns the number of rows in the current sheet.
- *
- * @return The number of rows in the current sheet.
- */
- public int getNumberOfRows() {
-
- return maxRows;
- }
-
- /**
- * This method returns the number of columns in the current sheet.
- *
- * @return The number of columns in the current sheet.
- */
- public int getNumberOfColumns() {
- return maxCols;
- }
-
-
- /**
- * This method returns the col number of the current cell.
- *
- * @return The col number of the current cell. Returns
- * -1 if no cell is currently selected.
- */
- public int getColNumber() {
-
- int col = -1;
-
- if (cell != null) {
-
- col = cell.getColNumber();
- }
-
- return col;
- }
-
-
- /**
- * This method returns the contents of the current cell.
- *
- * @return The contents of the current cell. Returns
- * null if no cell is currently selected.
- */
- public String getCellContents() {
-
- String contents = null;
-
- if (cell != null) {
- contents = cell.getCellContents();
-
- // Active cell, but no content
- if (contents == null)
- return new String("");
-
- // Does the cell contain a formula?
- if (contents.startsWith("=")) {
- contents = parseFormula(contents);
- }
- // Make sure that any MiniCalc peculiarities are stripped off
- if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_CURRENCY)) {
- contents = currencyRemoveSign(contents);
- }
- else if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_PERCENT)) {
- contents = percentRemoveSign(contents);
- }
- else if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_DATE)) {
- contents = convertToStarDate(contents);
- }
- else if (fmt.getCategory().equalsIgnoreCase(OfficeConstants.CELLTYPE_TIME)) {
- contents = convertToStarTime(contents);
- }
- }
-
- return contents;
- }
-
- /**
- * This method is meant to return the value of the formula cell. However
- * in minicalc this value is not used so hence the stubbed function
- *
- * @return the value fo the formula cell
- */
- public String getCellValue() {
- return null;
- }
-
- /**
- * <p>This method takes a formula and parses it into
- * StarOffice XML formula format.</p>
- *
- * <p>Many spreadsheets use ',' as a separator.
- * StarOffice XML format uses ';' as a separator instead.</p>
- *
- * <p>Many spreadsheets use '!' as a separator when refencing
- * a cell in a different sheet.</p>
- *
- * <blockquote>
- * Example: =sheet1!A1
- * </blockquote>
- *
- * <p>StarOffice XML format uses '.' as a separator instead.</p>
- *
- * <blockquote>
- * Example: =sheet1.A1
- * </blockquote>
- *
- * @param formula A formula string.
- *
- * @return A StarOffice XML format formula string.
- */
- protected String parseFormula(String formula) {
-
- formula = formula.replace(',', ';');
- formula = formula.replace('!', '.');
-
- return formula;
- }
-
- /**
- * <p>This method returns the type of the data in the current cell.</p>
- *
- * <p>Possible Data Types:</p>
- *
- * <ul><li>
- * Percent - MiniCalc can store as a number or as a string.
- *
- * When stored as a string, the % sign is stored in the
- * string . The MiniCalc format is "string".
- * Example 10.1% is stored as the string "10.1%"
- *
- * When stored as a number, the decimal representation
- * is stored. The MiniCalc format is "percentage".
- * Example: 10.1% is stored as "0.101"
- * </li><li>
- * Currency - MiniCalc stores currency as a number with the format
- * set to "currency".
- * A user can also enter a value with a dollar sign
- * (example $18.56) into MiniCalc and not set the format
- * as currency. We treat this type of data as a
- * currency data type.
- * </li><li>
- * Boolean - MiniCalc stores in a string as "true" or "false"
- * </li><li>
- *
- * Date - MiniCalc stores a date in a string as either
- * MM/DD/YY or MM/DD/YYYY. Any variation from the above
- * format will not be considered a date.
- * </li><li>
- * Time - MiniCalc stores a time in a string as hh:mm:ss. Any
- * variation from this format will not be considered a time.
- * </li><li>
- * Float - MiniCalc stores as a number and it is not percent
- * or currency.
- * </li><li>
- * String - MiniCalc stores as a string (surprise). Doesn't parse
- * to any of the other data types.
- * </li><li>
- * @return The type of the data in the current cell.
- * </li></ul>
- */
- public String getCellDataType() {
-
- boolean isNumber = false;
-
- // Get format value set on the cell in MiniCalc
- String format = getCellFormatType();
-
- // Initialize the data type to the format
- String type = format;
-
- String contents = getCellContents();
-
- if (contents != null) {
-
- MinicalcDataString data = new MinicalcDataString(contents);
-
- // Check if it is a formula
- if (data.isFormula()) {
- Debug.log(Debug.INFO, " " + contents + " Is a Function Format = "
- + format + "\n");
- return type;
- }
-
- try {
- // Check to see if it is a number
- Double d = Double.valueOf(contents);
- isNumber = true;
- Debug.log(Debug.INFO, " " + contents + " Is a Number Format = " + format);
-
- } catch (NumberFormatException e) {
- Debug.log(Debug.INFO, " " + contents + " Not a Number Format= " + format);
- // no, it is not a number
- isNumber = false;
- }
-
-
- if (isNumber) {
-
- // Numbers are Float, Currency, and Percent
- if (format.equals(OfficeConstants.CELLTYPE_CURRENCY)) {
-
- type = OfficeConstants.CELLTYPE_CURRENCY;
-
- } else if (format.equals(OfficeConstants.CELLTYPE_PERCENT)) {
-
- type = OfficeConstants.CELLTYPE_PERCENT;
-
- } else {
-
- type = OfficeConstants.CELLTYPE_FLOAT;
- }
-
- } else if (data.isBoolean()) {
-
- // Data is a Boolean type
- type = OfficeConstants.CELLTYPE_BOOLEAN;
-
- } else if (data.isDate()) {
-
- // Data is a Date type
- type = OfficeConstants.CELLTYPE_DATE;
-
- } else if (data.isTime()) {
-
- // Data is a Time type
- type = OfficeConstants.CELLTYPE_TIME;
-
- } else if (data.isPercent()) {
-
- // Data is percent
- type = OfficeConstants.CELLTYPE_PERCENT;
-
- } else if (data.isCurrency()) {
-
- // Data is a Currency type
- type = OfficeConstants.CELLTYPE_CURRENCY;
-
- } else {
-
- // Data can't be float, since it isn't a number
-
- // We've already tried parsing it as all other data
- // types, the only remaining option is a string
- type = OfficeConstants.CELLTYPE_STRING;
- }
- }
-
- Debug.log(Debug.INFO, " TYPE = " + type + "\n");
-
- return type;
- }
-
-
- /**
- * This method returns the format of the data in the current cell.
- *
- * @return The format of the data in the current cell.
- */
- String getCellFormatType() {
-
- // Set type to default data type
- String type = OfficeConstants.CELLTYPE_FLOAT;
-
- if (cell != null) {
-
- // Get the attributes for the current cell
- CellAttributes att = cell.getCellAttributes();
-
- if (att != null) {
-
- // Extract the format info from the attributes
- long format = att.getFormat();
-
- // The cell type is stored in bits 5-8
- long cellType = format & 0x000000F0L;
-
- // The number of decimal places is stored in bits 1-4
- long decimals = format & 0x0000000FL;
-
- if (cellType == JMCconstants.FF_FORMAT_GENERIC) {
-
- // MiniCalc stores both Strings and Booleans
- // in the generic type. We must check the contents
- // to differentiate between the two.
-
- // Get cell's contents
- String contents = getCellContents();
-
- if (contents.equalsIgnoreCase("false") ||
- contents.equalsIgnoreCase("true")) {
-
- type = OfficeConstants.CELLTYPE_BOOLEAN;
-
-
- } else {
-
- type = OfficeConstants.CELLTYPE_STRING;
-
- }
-
- } else if (cellType == JMCconstants.FF_FORMAT_DECIMAL) {
-
- type = OfficeConstants.CELLTYPE_FLOAT;
-
- } else if (cellType == JMCconstants.FF_FORMAT_TIME) {
-
- type = OfficeConstants.CELLTYPE_TIME;
-
- } else if (cellType == JMCconstants.FF_FORMAT_DATE) {
-
- type = OfficeConstants.CELLTYPE_DATE;
-
- } else if (cellType == JMCconstants.FF_FORMAT_CURRENCY) {
-
- type = OfficeConstants.CELLTYPE_CURRENCY;
-
- } else if (cellType == JMCconstants.FF_FORMAT_PERCENT) {
-
- type = OfficeConstants.CELLTYPE_PERCENT;
- }
-
- }
- }
-
- return type;
- }
-
-
- /**
- * This method takes a <code>String</code> that contains a
- * currency value and removes the $ from the <code>String</code>.
- * If the dollar sign is not the first or last character of the
- * input <code>String</code>, the input <code>String</code> is
- * simply returned.
- *
- * @param contents The input <code>String</code> from which to
- * remove the dollar sign.
- *
- * @return The input <code>String</code> minus the dollar sign.
- * If the input <code>String</code> did not begin or end
- * with a dollar sign, contents is returned.
- */
- private String currencyRemoveSign(String contents) {
- MinicalcDataString mcString = new MinicalcDataString(contents);
- String currencyString = mcString.currencyRemoveSign();
- return currencyString;
- }
-
-
- /**
- * This method takes a <code>String</code> that contains a percent
- * value and removes the % from the <code>String</code>. If the
- * percent sign is not the last character of the input
- * <code>String</code>, the input <code>String</code> is simply
- * returned.
- *
- * @param contents The input String from which to remove the
- * percent sign.
- *
- * @return The input <code>String</code> minus the percent sign.
- * If the input <code>String</code> did not begin with
- * a percent sign, contents is returned.
- */
- private String percentRemoveSign(String contents) {
- MinicalcDataString mcString = new MinicalcDataString(contents);
- String percentString = mcString.percentRemoveSign();
- return percentString;
- }
-
-
- /**
- * This method returns takes a <code>String</code> that contains
- * a time value and converts it from MiniCalc format to StarOffice
- * XML time format.
- *
- * @param contents The input <code>String</code> containing a
- * MiniCalc time.
- *
- * @return The input <code>String</code> converted to StarOffice
- * XML time format.
- */
- private String convertToStarTime(String contents) {
- MinicalcDataString mcString = new MinicalcDataString(contents);
- String timeString = mcString.convertToStarTime();
- return timeString;
- }
-
- /**
- * This method returns takes a <code>String</code> that contains
- * a date value and converts it from MiniCalc format to StarOffice
- * XML date format.
- *
- * @param contents The input <code>String</code> containing a
- * MiniCalc date.
- *
- * @return The input <code>String</code> converted to StarOffice
- * XML date format.
- */
- private String convertToStarDate(String contents) {
- MinicalcDataString mcString = new MinicalcDataString(contents);
- String dateString = mcString.convertToStarDate();
- return dateString;
- }
-
-
- /**
- * Return the Format object describing the active cell formatting.
- *
- * @return The Format object describing the active cell formatting.
- */
- public Format getCellFormat() {
- return new Format(fmt);
- }
-
-
- /**
- * Create the format data for the new cell.
- */
- private void readCellFormat() {
- // Make sure there are no remnants from the last time
- fmt.clearFormatting();
-
- fmt.setCategory(getCellFormatType());
-
- // TODO - Get any more formatting data here
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java
deleted file mode 100644
index 70014a8af93e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/MinicalcEncoder.java
+++ /dev/null
@@ -1,582 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
-
-import jmc.Workbook;
-import jmc.Worksheet;
-import jmc.CellAttributes;
-import jmc.CellDescriptor;
-import jmc.JMCconstants;
-import jmc.JMCException;
-
-import java.awt.Color;
-
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.IntArrayList;
-
-import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetEncoder;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializerImpl
- * SxcDocumentSerializerImpl} to encode the MiniCalc format.
- *
- * @author Paul Rank
- */
-final class MinicalcEncoder extends SpreadsheetEncoder {
-
- /** MiniCalc WorkBook to store sheets. */
- private Workbook wb;
-
- /** MiniCalc sheet - only one sheet can be open at a time. */
- private Worksheet ws;
-
- /**
- * Estimate of the number of Palm pixels per character. Used for
- * estimating the width of a cell on a Palm device.
- */
- private final static int pixelsPerChar = 6;
-
- /**
- * The minimum width (in pixels) that we allow a column to be set to
- * on a Palm device.
- */
- private final static int minWidth = 10;
-
- /**
- * The maximum width (in pixels) that we allow a column to be set to
- * on a Palm device.
- */
- private final static int maxWidth = 80;
-
-
- /**
- * Constructor creates a MiniCalc WorkBook.
- *
- * @param log Log object for logging.
- * @param name The name of the WorkBook.
- * @param password The password for the WorkBook.
- *
- * @throws IOException If any I/O error occurs.
- */
- MinicalcEncoder(String name, String password) throws IOException {
-
- super(name, password);
-
- try {
- wb = new Workbook(name, password);
- }
- catch (JMCException e) {
- Debug.log(Debug.ERROR, "new Workbook threw exception:" + e.getMessage());
- throw new IOException(e.getMessage());
- }
- }
-
-
- /**
- * This method creates a WorkSheet belonging to the
- * WorkBook.
- *
- * @param sheetName The name of the WorkSheet.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void createWorksheet(String sheetName) throws IOException {
-
- try {
- ws = wb.createWorksheet(sheetName);
- }
- catch (JMCException e) {
- Debug.log(Debug.ERROR, "wb.createWorksheet threw exception:" + e.getMessage());
- throw new IOException(e.getMessage());
- }
- }
-
-
- /**
- * This method gets the number of sheets in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public int getNumberOfSheets() {
-
- int numSheets = wb.getNumberOfSheets();
- return numSheets;
- }
-
-
- /**
- * This method encodes the MiniCalc WorkBook information
- * into an palm <code>Record</code> array in MiniCalc
- * database format.
- *
- * @return Array of <code>Record</code> holding MiniCalc
- * contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- public Record[] getRecords(int sheetID) throws IOException {
-
- // Get the WorkSheet for the input sheetID
- ws = wb.getWorksheet(sheetID);
-
- // Need to call ws.initWrite() before we start querying the WorkSheet
- try {
- ws.initWrite();
- }
- catch (JMCException e) {
- Debug.log(Debug.ERROR, "ws.initWrite in getRecords:" + e.getMessage());
- throw new IOException(e.getMessage());
- }
-
- // Get the number of records in the WorkSheet
- int numRecords = ws.getNumberOfRecords();
-
- // Create the Record array
- Record[] allRecords = new Record[numRecords];
-
-
- // Get each record from the WorkSheet and store in allRecords[]
- try {
- for (int i = 0; i < allRecords.length; i++) {
-
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
- int length = ws.writeNextRecord(bos);
-
- byte cBytes[] = bos.toByteArray();
-
- allRecords[i] = new Record(cBytes);
- }
- }
- catch (Exception e) {
- Debug.log(Debug.ERROR, "ws.writeNextRecord in getRecords:" + e.getMessage());
- throw new IOException(e.getMessage());
- }
-
- return allRecords;
- }
-
-
- /**
- * A cell reference in a StarOffice formula looks like
- * [.C2] (for cell C2). MiniCalc is expecting cell references
- * to look like C2. This method strips out the braces and
- * the period.
- *
- * @param formula A StarOffice formula <code>String</code>.
- *
- * @return A MiniCalc formula <code>String</code>.
- */
- protected String parseFormula(String formula) {
-
- StringBuffer inFormula = new StringBuffer(formula);
- StringBuffer outFormula = new StringBuffer();
-
- boolean inBrace = false;
- boolean firstCharAfterBrace = false;
- boolean firstCharAfterColon = false;
-
- int len = inFormula.length();
-
- for (int in = 0; in < len; in++) {
- switch (inFormula.charAt(in)) {
- case '[':
- // We are now inside a StarOffice cell reference.
- // We also need to strip out the '['
- inBrace = true;
-
- // If the next character is a '.', we want to strip it out
- firstCharAfterBrace = true;
- break;
-
- case ']':
- // We are exiting a StarOffice cell reference
- // We are stripping out the ']'
- inBrace = false;
- break;
-
- case ':':
- // We have a cell range reference.
- // May need to strip out the leading '.'
- if (inBrace)
- firstCharAfterColon = true;
- outFormula.append(inFormula.charAt(in));
- break;
-
- case '.':
- if (inBrace == true) {
- if (firstCharAfterBrace == false &&
- firstCharAfterColon == false) {
- // Not the first character after the open brace.
- // We have hit a separator between a sheet reference
- // and a cell reference. MiniCalc uses a ! as
- // this type of separator.
- outFormula.append('!');
- }
- else {
- firstCharAfterBrace = false;
- firstCharAfterColon = false;
- // Since we are in a StarOffice cell reference,
- // and we are the first character, we need to
- // strip out the '.'
- }
- break;
- } else {
- // We hit valid data, lets add it to the formula string
- outFormula.append(inFormula.charAt(in));
- break;
- }
-
- case ';':
- // StarOffice XML format uses ';' as a separator. MiniCalc (and
- // many spreadsheets) use ',' as a separator instead.
- outFormula.append(',');
- break;
-
- default:
- // We hit valid data, lets add it to the formula string
- outFormula.append(inFormula.charAt(in));
-
- // Need to make sure that firstCharAfterBrace is not true.
- firstCharAfterBrace = false;
- break;
- }
- }
-
- return outFormula.toString();
- }
-
- /**
- * Add a cell to the current WorkSheet.
- *
- * @param row The row number of the cell.
- * @param column The column number of the cell.
- * @param fmt The <code>Format</code> object describing
- * the appearance of this cell.
- * @param cellContents The text or formula of the cell's contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void addCell(int row, int column, Format fmt, String cellContents) throws IOException {
-
- CellAttributes ca = new CellAttributes(getFormat(fmt),
- fmt.getForeground(),
- fmt.getBackground());
- if (cellContents.startsWith("=")) {
- cellContents = parseFormula(cellContents);
- Debug.log(Debug.INFO, "YAHOO Found Formula" + cellContents);
- }
-
- CellDescriptor cellDes = new CellDescriptor(row, column, ca, cellContents);
-
- try {
- ws.putCell(cellDes);
- }
- catch (JMCException jmce) {
- Debug.log(Debug.ERROR, "ws.putCell threw exception: " + jmce.getMessage());
- throw new IOException(jmce.getMessage());
- }
- }
-
-
- /**
- * Set the width of the columns in the WorkBook.
- *
- * @param columnWidths An <code>IntArrayList</code> of column
- * widths.
- */
- public void setColumnWidths(IntArrayList columnWidths) throws IOException {
- // Get the number of columns
- int numColumns = columnWidths.size();
-
- // Return if there are no columns in the listr
- if (numColumns == 0) {
- return;
- }
-
- // Need to set the FORM_FLAGS_NONDEFAULT flag for the column widths
- // to be used in MiniCalc
- long format = JMCconstants.FORM_FLAGS_NONDEFAULT;
-
- CellAttributes ca = new CellAttributes(format);
-
- try {
- for (int i = 0; i < numColumns; i++) {
- // Get the column width in Palm pixels
- int width = columnWidths.get(i) * pixelsPerChar;
-
- // Check limits on column width
- if (width < minWidth) {
- width = minWidth;
- } else if (width > maxWidth) {
- width = maxWidth;
- }
-
- // Add the column descriptor to the WorkSheet
- ws.putColumn(i + 1, width, ca);
- }
- }
- catch (JMCException jmce) {
- Debug.log(Debug.ERROR, "ws.putColumn threw exception: " + jmce.getMessage());
- throw new IOException(jmce.getMessage());
- }
- }
-
-
- /**
- * This method sets the format of a cell to <i>string</i>.
- *
- * @param format The cell format-may already contain display info,
- * such as alignment or font type.
- *
- * @return The updated format of the cell.
- */
- private long setFormatString(long format) {
-
- format = clearCellFormatType(format);
-
- // Set format to generic, since MiniCalc does not have a string type.
- format = format | JMCconstants.FF_FORMAT_GENERIC;
-
- return format;
- }
-
-
- /**
- * This method sets the format of a cell to <i>floating point</i>.
- *
- * @param format The cell format. May already contain
- * display info, such as alignment or
- * font type.
- * @param decimalPlaces The number of decimal places to
- * set in the floating point number.
- *
- * @return The updated format of the cell.
- */
- private long setFormatFloat(long format, int decimalPlaces) {
-
- format = clearCellFormatType(format);
-
- // Set format to floating point with correct number of decimal places
- format = format | JMCconstants.FF_FORMAT_DECIMAL | decimalPlaces;
-
- return format;
- }
-
-
- /**
- * This method sets the format of a cell to <i>time</i>.
- *
- * @param format The cell format-may already contain display info,
- * such as alignment or font type.
- *
- * @return The updated format of the cell.
- */
- private long setFormatTime(long format) {
-
- format = clearCellFormatType(format);
-
- // Set format to time.
- format = format | JMCconstants.FF_FORMAT_TIME;
-
- return format;
- }
-
-
- /**
- * This method sets the format of a cell to <i>date</i>.
- *
- * @param format The cell format-may already contain display info,
- * such as alignment or font type.
- *
- * @return The updated format of the cell.
- */
- private long setFormatDate(long format) {
-
- format = clearCellFormatType(format);
-
- // Set format to date.
- format = format | JMCconstants.FF_FORMAT_DATE;
-
- return format;
- }
-
-
- /**
- * This method sets the format of a cell to <i>currency</i>.
- *
- * @param format The cell format-may already contain
- * display info, such as alignment or
- * font type.
- * @param decimalPlaces The number of decimal places to set.
- *
- * @return The updated format of the cell.
- */
- private long setFormatCurrency(long format, int decimalPlaces) {
-
- format = clearCellFormatType(format);
-
- // Set format to Currency with correct number of decimal places
- format = format | JMCconstants.FF_FORMAT_CURRENCY | decimalPlaces;
-
- return format;
- }
-
-
- /**
- * This method sets the format of a cell to <i>boolean</i>.
- *
- * @param format The cell format-may already contain display info,
- * such as alignment or font type.
- *
- * @return The updated format of the cell.
- */
- private long setFormatBoolean(long format) {
-
- format = clearCellFormatType(format);
-
- // Set format to generic, since MiniCalc does not have a Boolean type.
- format = format | JMCconstants.FF_FORMAT_GENERIC;
-
- return format;
- }
-
-
- /**
- * This method sets the format of a cell to <i>percent</i>.
- *
- * @param format The cell format-may already contain
- * display info, such as alignment or
- * font type.
- * @param decimalPlaces The number of decimal places to set.
- *
- * @return The updated format of the cell.
- */
- private long setFormatPercent(long format, int decimalPlaces) {
-
- format = clearCellFormatType(format);
-
- // Set format to Percent with correct number of decimal places
- format = format | JMCconstants.FF_FORMAT_PERCENT | decimalPlaces;
-
- return format;
- }
-
-
- /**
- * This method clears out the format bits associated with
- * the type of data (<i>float</i>, <i>time</i>, etc...) in
- * a cell.
- *
- * @param format The original format for the cell.
- *
- * @return The updated cell format with the bits associated
- * with the type of data (float, time, etc...)
- * zeroed out.
- */
- private long clearCellFormatType(long format) {
-
- // First 4 bits are for the number of decimal places
- // bits 5-8 are for the data format (float, time, etc...)
-
- // Clear out first 8 bits
- format = format & 0xFFFFFFFFFFFFFF00L;
-
- return format;
- }
-
-
- /**
- * Set a cell's formatting options via a separately create
- * <code>Format</code> object.
- *
- * @param row The row number of the cell to be changed.
- * @param column The column number of the cell to be changed.
- * @param fmt Object containing formatting settings for
- * this cell.
- */
- public void setCellFormat(int row, int column, Format fmt) {
- }
-
-
- /**
- * Get the names of the sheets in the WorkBook.
- *
- * @param sheet The required sheet.
- */
- public String getSheetName(int sheet) {
- return wb.getWorksheet(sheet).getName();
- }
-
-
- /*
- * This method returns a MiniCalc style format from the
- * <code>Format</code> object.
- */
- private long getFormat(Format fmt)
- {
- String category = fmt.getCategory();
-
- if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_BOOLEAN)) {
- return setFormatBoolean(0);
- }
- else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_CURRENCY)) {
- return setFormatCurrency(0, fmt.getDecimalPlaces());
- }
- else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_DATE)) {
- return setFormatDate(0);
- }
- else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_FLOAT)) {
- return setFormatFloat(0, fmt.getDecimalPlaces());
- }
- else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_PERCENT)) {
- return setFormatPercent(0, fmt.getDecimalPlaces());
- }
- else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_STRING)) {
- return setFormatString(0);
- }
- else if (category.equalsIgnoreCase(OfficeConstants.CELLTYPE_TIME)) {
- return setFormatTime(0);
- }
- else {
- // Should never get here, but just in case
- System.out.println("XXXXX Formatting information not found");
- return 0;
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java
deleted file mode 100644
index 82f39a8e60aa..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/PluginFactoryImpl.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.DocumentSerializerFactory;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.DocumentDeserializerFactory;
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl;
-import org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * <p>MiniCalc implementation of the <code>PluginFactory</code>.
- * This encapsulates conversion of StarCalc XML format to and from
- * MiniCalc format.</p>
- *
- * <p>The superclass produces a particular
- * {@link org.openoffice.xmerge.Document Document}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcDocument
- * SxcDocument} that the converters in this class works with. Thus,
- * this class only implements the methods that produces the converters,
- * i.e. {@link
- * org.openoffice.xmerge.DocumentSerializer
- * DocumentSerializer} and {@link
- * org.openoffice.xmerge.DocumentDeserializer
- * DocumentDeserializer};
- * as well as the {@link
- * org.openoffice.xmerge.ConverterCapabilities
- * ConverterCapabilities} object that is specific to this format
- * conversion. That superclass also produces a {@link
- * org.openoffice.xmerge.DocumentMerger DocumentMerger}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl
- * DocumentMergerImpl} which this class derives the functionality.</p>
- */
-public final class PluginFactoryImpl extends SxcPluginFactory
- implements DocumentDeserializerFactory, DocumentSerializerFactory {
-
- /** ConverterCapabilities object for this type of conversion. */
- private final static ConverterCapabilities converterCap =
- new ConverterCapabilitiesImpl();
-
-
- public PluginFactoryImpl(ConverterInfo ci) {
- super(ci);
- }
-
-
- /**
- * Returns an instance of <code>DocumentSerializerImpl</code>,
- * which is an implementation of <code>DocumentSerializer</code>
- * interface.
- *
- * @param doc <code>Document</code> object to be
- * converted/serialized.
- *
- * @return A <code>DocumentSerializerImpl</code> object.
- */
- public DocumentSerializer createDocumentSerializer(Document doc) {
-
- return new SxcDocumentSerializerImpl(doc);
- }
-
-
- /**
- * Returns an instance of <code>DocumentDeserializerImpl</code>,
- * which is an implementation of <code>DocumentDeserializer</code>
- * interface.
- *
- * @param cd <code>ConvertData</code> object for reading data
- * which will be converted back to a
- * <code>Document</code> object.
- *
- * @return A <code>DocumentDeserializerImpl</code> object.
- */
- public DocumentDeserializer createDocumentDeserializer(ConvertData cd) {
-
- return new SxcDocumentDeserializerImpl(cd);
- }
-
-
- public Document createDeviceDocument(String name, InputStream is)
- throws IOException {
-
- PalmDocument palmDoc = new PalmDocument(is);
- return palmDoc;
- }
-
- public DocumentMerger createDocumentMerger(Document doc) {
-
- DocumentMergerImpl merger = new DocumentMergerImpl(doc, converterCap);
- return merger;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java
deleted file mode 100644
index db3bcdeb91c5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentDeserializerImpl.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
-
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer;
-import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder;
-import org.openoffice.xmerge.converter.palm.PalmDB;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-
-import java.io.IOException;
-import java.util.Enumeration;
-
-/**
- * <p>MiniCalc implementation of <code>DocumentDeserializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>This converts a set of files in MiniCalc PDB format to a StarOffice DOM.</p>
- *
- * @author Mark Murnane
- */
-public final class SxcDocumentDeserializerImpl extends SxcDocumentDeserializer {
-
- /**
- * Creates new <code>SxcDocumentDeserializerImpl</code>.
- *
- * @param cd <code>ConvertData</code> Input data to convert.
- */
- public SxcDocumentDeserializerImpl(ConvertData cd) {
- super(cd);
- }
-
-
- /**
- * This method will be implemented by concrete subclasses and will
- * return an application-specific decoder.
- *
- * @param workbook The WorkBook name.
- * @param worksheetNames An array of WorkSheet names.
- * @param password The password.
- *
- * @return An application-specific <code>SpreadsheetDecoder</code>.
- */
- public SpreadsheetDecoder createDecoder(String workbook,
- String[] worksheetNames, String password) throws IOException {
-
- return new MinicalcDecoder(workbook, worksheetNames, password);
- }
-
-
- /**
- * This method will return the name of the WorkBook from the
- * <code>ConvertData</code>. Allows for situations where the
- * WorkBook name differs from the PDB name.
- *
- * Implemented in the Deserializer as the Decoder's constructor
- * requires a name.
- *
- * @param cd The <code>ConvertData</code>.
- *
- * @return The name of the WorkBook.
- */
- protected String getWorkbookName(ConvertData cd)
- throws IOException {
-
- Enumeration e = cd.getDocumentEnumeration();
- PalmDocument palmDoc = (PalmDocument) e.nextElement();
- String workbookName = palmDoc.getName();
-
- // Search for "-", which separates workbook from worksheet
- int end = workbookName.indexOf("-");
-
- if (end > 0) {
- workbookName = workbookName.substring(0, end);
- }
-
- return workbookName;
- }
-
-
- /**
- * This method will return an array of WorkSheet names from the
- * <code>ConvertData</code>.
- *
- * @param cd The <code>ConvertData</code>.
- *
- * @return The name of the WorkSheet.
- */
- protected String[] getWorksheetNames(ConvertData cd)
- throws IOException {
- int numberOfPDBs = cd.getNumDocuments();
- String worksheetName[] = new String[numberOfPDBs];
- int i=0;
- Enumeration e = cd.getDocumentEnumeration();
- while (e.hasMoreElements()) {
- PalmDocument palmDoc = (PalmDocument) e.nextElement();
- worksheetName[i] = palmDoc.getName();
-
- // Search for the "-", which seperates workbook from worksheet
- int start = worksheetName[i].indexOf("-");
-
- if (start != -1) {
- worksheetName[i] = worksheetName[i].substring(start + 1);
- }
- i++;
- }
-
- return worksheetName;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java
deleted file mode 100644
index 1c1c8fe2e6bd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/SxcDocumentSerializerImpl.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.minicalc;
-
-import java.awt.Color;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import java.io.IOException;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.converter.palm.PalmDB;
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-
-import jmc.JMCconstants;
-
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializer;
-
-/**
- * <p>MiniCalc implementation of <code>SxcDocumentDeserializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>This converts StarOffice XML format to a set of files in
- * MiniCalc PDB format.</p>
- *
- * @author Paul Rank
- * @author Mark Murnane
- */
-public final class SxcDocumentSerializerImpl extends SxcDocumentSerializer {
-
-
- /**
- * Constructor.
- *
- * @param document The <code>Document</code> to convert.
- */
- public SxcDocumentSerializerImpl(Document document) {
- super(document);
- }
-
-
- public ConvertData serialize() throws ConvertException, IOException {
-
-
- // Get the server side document name. This value should not
- // contain a path or the file extension.
- String docName = sxcDoc.getName();
-
- // TODO - get real values for password when implemnted in XML
- // Passwords are not currently stored in StarCalc XML format.
- String password = null;
-
- encoder = new MinicalcEncoder(docName, password);
-
- // get dom document
- org.w3c.dom.Document domDoc = sxcDoc.getContentDOM();
-
- // Traverse to the office:body element.
- // There should only be one.
- NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY);
- int len = list.getLength();
-
- if (len > 0) {
- Node node = list.item(0);
- traverseBody(node);
- }
-
- // Get the number of sheets in the workbook
- // This will equal the number of PDBs we need
- ConvertData cd = new ConvertData();
- int numSheets = encoder.getNumberOfSheets();
-
- for (int i = 0; i < numSheets; i++) {
-
- // Get records for sheet i
- Record records[] = ((MinicalcEncoder) encoder).getRecords(i);
-
- // Get the sheet name for sheet i
- String fullSheetName = new String(docName
- + "-"
- + encoder.getSheetName(i));
-
- // Create a PalmDB object
- PalmDocument palmDoc = new PalmDocument(fullSheetName,
- MinicalcConstants.CREATOR_ID,
- MinicalcConstants.TYPE_ID, JMCconstants.AppVersion,
- PalmDB.PDB_HEADER_ATTR_BACKUP, records);
-
- cd.addDocument(palmDoc);
- }
-
-
- // OutputStream os = new FileOutputStream(docName);
-
- //pdbSet.write(os);
- //os.flush();
-
- //ConvertDataEntry cde = new ConvertDataOutputStream(os, docName);
- //cd.addCDE(cde);
-
- return cd;
- }
-
-
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/build.xml
deleted file mode 100644
index 6a4092250009..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/build.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcxs_minicalc" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcxs_minicalc"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxc/minicalc"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- <pathelement location="${solar.jar}/jmc.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/MinicalcConstants.java"/>
- <include name="${package}/MinicalcDecoder.java"/>
- <include name="${package}/MinicalcEncoder.java"/>
- <include name="${package}/MinicalcDataString.java"/>
- <include name="${package}/SxcDocumentDeserializerImpl.java"/>
- <include name="${package}/SxcDocumentSerializerImpl.java"/>
- <include name="${package}/ConverterCapabilitiesImpl.java"/>
- <include name="${package}/PluginFactoryImpl.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/converter.xml
deleted file mode 100644
index 39b28ffbf944..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/converter.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<converters>
- <converter type="staroffice/sxc" version="1.0">
- <converter-display-name>
- Minicalc 6.4
- </converter-display-name>
- <converter-description>
- StarCalc XML to/from Minicalc 6.4 conversion
- </converter-description>
- <converter-vendor>OpenOffice.org</converter-vendor>
- <converter-class-impl>
- org.openoffice.xmerge.converter.xml.sxc.minicalc.PluginFactoryImpl
- </converter-class-impl>
- <converter-target type="application/x-minicalc" />
- </converter>
-</converters>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/makefile.mk
deleted file mode 100644
index 8d6716d32b74..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxcxs_minicalc
-PRJ=../../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html
deleted file mode 100644
index 034af32e581b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/minicalc/package.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.converter.xml.sxc.minicalc package</title>
-</head>
-
-<body bgcolor="white">
-
-<p>Provides the tools for doing the conversion of StarWriter XML to
-and from MiniCalc format.</p>
-
-<p>It follows the {@link org.openoffice.xmerge} framework for the conversion process.</p>
-
-<p>Since it converts to/from a Palm application format, these converters
-follow the <a href=../../../../converter/palm/package-summary.html#streamformat>
-PalmDB stream format</a> for writing out to the Palm sync client or reading
-in from the Palm sync client.</p>
-
-<p>Note that <code>PluginFactoryImpl</code> also provides a
-<code>DocumentMerger</code> object, i.e. {@link org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentMergerImpl DocumentMergerImpl}.
-This functionality was derived from its superclass
-{@link org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory SxwPluginFactory}.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html
deleted file mode 100644
index bfa0d5a53dbc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/package.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.converter.xml.sxc package</title>
-</head>
-
-<body bgcolor="white">
-<p>Provides base implementation of StarCalc XML conversion to and from
-different &quot;Device&quot; <code>Document</code> formats.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java
deleted file mode 100644
index c8de9e99b5da..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/ConverterCapabilitiesImpl.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-
-/**
- * <p>Pocket Excel implementation of <code>ConverterCapabilities</code> for
- * the {@link
- * org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>Used with StarCalc SXC to/from Pocket Excel conversions. The
- * <code>ConverterCapibilies</code> specify which &quot;Office&quot;
- * <code>Document</code> tags and attributes are supported on the
- * &quot;Device&quot; <code>Document</code> format.</p>
- */
-public final class ConverterCapabilitiesImpl
- implements ConverterCapabilities {
-
- public boolean canConvertTag(String tag) {
-
- if (OfficeConstants.TAG_OFFICE_BODY.equals(tag))
- return true;
- else if (OfficeConstants.TAG_PARAGRAPH.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TABLE.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TABLE_ROW.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TABLE_COLUMN.equals(tag))
- return false;
- // TODO - we currently do not handle the table column tag
- else if (OfficeConstants.TAG_TABLE_SCENARIO.equals(tag))
- return false;
- // TODO - we currently do not handle the table scenario tag
- else if (OfficeConstants.TAG_TABLE_CELL.equals(tag))
- return true;
-
- return false;
- }
-
- public boolean canConvertAttribute(String tag,
- String attribute) {
-
- if (OfficeConstants.TAG_TABLE.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_TABLE_NAME.equals(attribute))
- return true;
-
- } else if (OfficeConstants.TAG_TABLE_CELL.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_TABLE_VALUE_TYPE.equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_FORMULA.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_VALUE.equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_BOOLEAN_VALUE.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_CURRENCY.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_TIME_VALUE.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_DATE_VALUE.
- equals(attribute))
- return true;
- else if (OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED.
- equals(attribute))
- return true;
-
- } else if (OfficeConstants.TAG_TABLE_ROW.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED.
- equals(attribute))
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java
deleted file mode 100644
index e7b08e097614..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PluginFactoryImpl.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.DocumentSerializerFactory;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.DocumentDeserializerFactory;
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl;
-import org.openoffice.xmerge.converter.xml.sxc.SxcPluginFactory;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-
-/**
- * <p>Pocket Excel implementation of the <code>PluginFactory</code>.
- * This encapsulates conversion of StarCalc XML format to and from
- * Pocket Excel format.</p>
- *
- * <p>The superclass produces a particular
- * {@link org.openoffice.xmerge.Document Document}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcDocument
- * SxcDocument} that the converters in this class works with. Thus,
- * this class only implements the methods that produces the converters,
- * i.e. {@link
- * org.openoffice.xmerge.DocumentSerializer
- * DocumentSerializer} and {@link
- * org.openoffice.xmerge.DocumentDeserializer
- * DocumentDeserializer};
- * as well as the {@link
- * org.openoffice.xmerge.ConverterCapabilities
- * ConverterCapabilities} object that is specific to this format
- * conversion. That superclass also produces a {@link
- * org.openoffice.xmerge.DocumentMerger DocumentMerger}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxc.DocumentMergerImpl
- * DocumentMergerImpl} which this class derives the functionality.</p>
- */
-public final class PluginFactoryImpl extends SxcPluginFactory
- implements DocumentDeserializerFactory, DocumentSerializerFactory {
-
- /** ConverterCapabilities object for this type of conversion. */
- private final static ConverterCapabilities converterCap =
- new ConverterCapabilitiesImpl();
-
-
- public PluginFactoryImpl(ConverterInfo ci) {
- super(ci);
- }
-
-
- /**
- * Returns an instance of <code>DocumentSerializerImpl</code>,
- * which is an implementation of <code>DocumentSerializer</code>
- * interface.
- *
- * @param doc <code>Document</code> object to be
- * converted/serialized.
- *
- * @return A <code>DocumentSerializerImpl</code> object.
- */
- public DocumentSerializer createDocumentSerializer(Document doc) {
-
- return new SxcDocumentSerializerImpl(doc);
- }
-
-
- /**
- * Returns an instance of <code>DocumentDeserializerImpl</code>,
- * which is an implementation of <code>DocumentDeserializer</code>
- * interface.
- *
- * @param cd <code>ConvertData</code> object for reading data
- * which will be converted back to a
- * <code>Document</code> object.
- *
- * @return A <code>DocumentDeserializerImpl</code> object.
- */
- public DocumentDeserializer createDocumentDeserializer(ConvertData cd) {
-
- return new SxcDocumentDeserializerImpl(cd);
- }
-
-
- public Document createDeviceDocument(String name, InputStream is)
- throws IOException {
-
- Workbook wb = new Workbook(name, is);
- return wb;
- }
-
- public DocumentMerger createDocumentMerger(Document doc) {
-
- DocumentMergerImpl merger = new DocumentMergerImpl(doc, converterCap);
- return merger;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java
deleted file mode 100644
index 1e2abbf937cb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelConstants.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel;
-
-
-/**
- * Interface defining constants for Pocket Excel attributes.
- *
- * @author Martin Maher
- */
-public interface PocketExcelConstants {
- /** File extension for Pocket Word files. */
- public static final String FILE_EXTENSION = ".pxl";
-
- /** Constants for pexcel BIFF records */
- public static final int BLANK_CELL = 0x01;
- public static final int NUMBER_CELL = 0x03;
- public static final int LABEL_CELL = 0x04;
- public static final int BOOLERR_CELL = 0x05;
- public static final int FORMULA_CELL = 0x06;
- public static final int FORMULA_STRING = 0x07;
- public static final int ROW_DESCRIPTION = 0x08;
- public static final int BOF_RECORD = 0x09;
- public static final int EOF_MARKER = 0x0A;
- public static final int DEFINED_NAME = 0x18;
- public static final int CURRENT_SELECTION = 0x1D;
- public static final int NUMBER_FORMAT = 0x1E;
- public static final int DEFAULT_ROW_HEIGHT = 0x25;
- public static final int FONT_DESCRIPTION = 0x31;
- public static final int WINDOW_INFO = 0x3D;
- public static final int SHEET_WINDOW_INFO = 0x3E;
- public static final int PANE_INFO = 0x41;
- public static final int CODEPAGE = 0x42;
- public static final int DEF_COL_WIDTH = 0x55;
- public static final int COLINFO = 0x7D;
- public static final int BOUND_SHEET = 0x85;
- public static final int EXTENDED_FORMAT = 0xE0;
-
- /** Colour lookup table for mapping pexcel color values
- (See util/ColourConverter.java */
- public short cLookup[] = { 0, 14, 15, 1, 2, 3, 4, 7, 6, 5, 8, 9, 10, 13, 12, 11 };
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java
deleted file mode 100644
index 3e23a87aa20f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelDecoder.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel;
-
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Stack;
-import java.util.LinkedList;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.NoSuchElementException;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.converter.xml.sxc.SheetSettings;
-import org.openoffice.xmerge.converter.xml.sxc.BookSettings;
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer;
-import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.sxc.NameDefinition;
-import org.openoffice.xmerge.converter.xml.sxc.ColumnRowInfo;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.*;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializerImpl}
- * SxcDocumentDeserializerImpl} to decode the Pocket Excel format.
- *
- * @author Paul Rank
- */
-final class PocketExcelDecoder extends SpreadsheetDecoder {
-
- private Workbook wb;
- private Worksheet ws;
- private CellValue cell;
- private int maxRows = 0;
- private int maxCols = 0;
- private int wsIndex;
- private Enumeration cellValue;
- private Format fmt = null;
-
- /**
- * Constructor creates a Pocket Excel WorkBook.
- *
- * @param name The name of the WorkBook.
- * @param worksheetNames set of Strings equivalent to the worksheets
- * contained in the workbook
- * @param password The password for the workBook.
- *
- * @throws IOException If any I/O error occurs.
- */
- PocketExcelDecoder(String name, String[] worksheetNames, String password) throws IOException {
- super(name, password);
-
- fmt = new Format();
- }
-
-
- /**
- * This method takes a <code>ConvertData</code> as input and
- * converts it into a PocketWord WorkSheet. The WorkSheet is then
- * added to the WorkBook.
- *
- * @param InputStream An <code>ConvertData</code> containing a
- * Pocket Excel WorkSheet.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void addDeviceContent(ConvertData cd) throws IOException {
-
- Enumeration e = cd.getDocumentEnumeration();
- wb = (Workbook) e.nextElement();
- }
-
-
- /**
- * This method returns the number of spreadsheets
- * stored in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public int getNumberOfSheets() {
-
- Vector v = wb.getWorksheetNames();
- Debug.log(Debug.TRACE,"Total Number of Sheets : " + v.size());
- return (v.size());
- }
-
- /**
- * This method returns the number of spreadsheets
- * stored in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public Enumeration getNameDefinitions() {
-
- Enumeration e = wb.getDefinedNames();
- Vector nameDefinitionVector = new Vector();
- while(e.hasMoreElements()) {
- DefinedName dn = (DefinedName)e.nextElement();
- NameDefinition nameDefinitionEntry = dn.getNameDefinition();
- nameDefinitionVector.add(nameDefinitionEntry);
- }
- Debug.log(Debug.TRACE,"Getting " + nameDefinitionVector.size() + " DefinedName records");
- return (nameDefinitionVector.elements());
- }
-
- /**
- * This method returns an enumeration of Settings object(s),
- * one for each worksheet
- *
- * @return An enumerattion of <code>Settings</code>
- */
- public BookSettings getSettings() {
-
- return (wb.getSettings());
- }
- /**
- * This method returns the number of spreadsheets
- * stored in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public Enumeration getColumnRowInfos() {
-
- Vector colRowVector = new Vector();
-
- // Collect Columns from worksheet and add them to the vector
- for(Enumeration e = ws.getColInfos();e.hasMoreElements();) {
- ColInfo ci = (ColInfo)e.nextElement();
- int repeated = ci.getLast() - ci.getFirst() + 1;
- ColumnRowInfo colInfo = new ColumnRowInfo( ci.getColWidth(),
- repeated,
- ColumnRowInfo.COLUMN);
- colRowVector.add(colInfo);
- }
-
- // Collect Rows from worksheet and add them to the vector
- for(Enumeration e = ws.getRows();e.hasMoreElements();) {
- Row rw = (Row)e.nextElement();
- // We will use the repeat field for number (unlike columns rows
- // cannot be repeated, we have unique record for each row in pxl
- int repeated = rw.getRowNumber();
- ColumnRowInfo rowInfo = new ColumnRowInfo( rw.getRowHeight(),
- repeated,
- ColumnRowInfo.ROW);
- colRowVector.add(rowInfo);
- }
- Debug.log(Debug.TRACE,"Getting " + colRowVector.size() + " ColRowInfo records");
- return (colRowVector.elements());
- }
-
- /**
- * This method gets the requested WorkSheet from the
- * WorkBook and sets it as the selected WorkSheet. All
- * other "get" methods will now get data from this WorkSheet.
- *
- * @param sheetIndex The index number of the sheet to open.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void setWorksheet(int sheetIndex) throws IOException {
- Debug.log(Debug.TRACE,"Setting to worksheet : " + sheetIndex);
- ws = wb.getWorksheet(sheetIndex);
- cellValue = ws.getCellEnumerator();
- wsIndex = sheetIndex;
- while(goToNextCell()) {
- maxRows = Math.max(maxRows, cell.getRow());
- maxCols = Math.max(maxCols, cell.getCol());
- }
- cellValue = ws.getCellEnumerator();
- Debug.log(Debug.TRACE,"Max Cols : " + maxCols + " MaxRows : " + maxRows);
- }
-
-
- /**
- * This method returns the name of the current spreadsheet.
- *
- * @return The name of the current WorkSheet.
- */
- public String getSheetName() {
-
- String wsName = wb.getSheetName(wsIndex);
- Debug.log(Debug.TRACE,"The name of the current Worksheet is : " + wsName);
- return wsName;
- }
-
-
- /**
- * This method gets the next cell from the WorkSheet
- * and sets it as the selected cell. All other "get"
- * methods will now get data from this cell.
- *
- * @return True if we were able to go to another cell
- * in the sheet, false if there were no cells
- * left.
- *
- * @throws IOException If any I/O error occurs.
- */
- public boolean goToNextCell() throws IOException {
-
- boolean success = false;
-
- try {
- cell = (CellValue) cellValue.nextElement();
- Debug.log(Debug.TRACE,"Current Cell : " + cell.getString());
- readCellFormat();
- success = true;
- } catch (NoSuchElementException e) {
- Debug.log(Debug.TRACE,"Could't find current cell");
- }
-
- return success;
- }
-
-
- /**
- * This method returns the row number of the current cell.
- *
- * @return The row number of the current cell. Returns
- * -1 if no cell is currently selected.
- */
- public int getRowNumber() {
-
- int row = -1;
-
- if (cell != null) {
- row = cell.getRow();
- Debug.log(Debug.TRACE,"cell row is " + row);
- }
- return (row);
- }
-
- /**
- * This method returns the number of rows in the current sheet.
- *
- * @return The number of rows in the current sheet.
- */
- public int getNumberOfRows() {
- return maxRows;
- }
-
- /**
- * This method returns the number of columns in the current sheet.
- *
- * @return The number of columns in the current sheet.
- */
- public int getNumberOfColumns() {
- return maxCols;
- }
-
-
- /**
- * This method returns the col number of the current cell.
- *
- * @return The col number of the current cell. Returns
- * -1 if no cell is currently selected.
- */
- public int getColNumber() {
-
- int col = -1;
-
- if (cell != null) {
- col = cell.getCol();
- Debug.log(Debug.TRACE,"cell col is " + col);
- }
- return (col);
- }
-
- /**
- * This method returns the contents of the current cell.
- *
- * @return The contents of the current cell. Returns
- * null if no cell is currently selected.
- */
- public String getCellContents() {
-
- String contents = new String("");
-
- if (cell != null) {
- try {
- contents = cell.getString();
- if (contents.startsWith("=")) {
- contents = parseFormula(contents);
- }
- }
- catch (IOException e) {
- System.err.println("Could Not retrieve Cell contents");
- System.err.println("Setting contents of cell(" + cell.getRow()
- + "," + cell.getCol() + ") to an empty string");
- System.err.println("Error msg: " + e.getMessage());
- }
- }
-
- return contents;
- }
-
- /**
- * <p>This method takes a formula and parses it into
- * StarOffice XML formula format.</p>
- *
- * <p>Many spreadsheets use ',' as a separator.
- * StarOffice XML format uses ';' as a separator instead.</p>
- *
- * <p>Many spreadsheets use '!' as a separator when refencing
- * a cell in a different sheet.</p>
- *
- * <blockquote>
- * Example: =sheet1!A1
- * </blockquote>
- *
- * <p>StarOffice XML format uses '.' as a separator instead.</p>
- *
- * <blockquote>
- * Example: =sheet1.A1
- * </blockquote>
- *
- * @param formula A formula string.
- *
- * @return A StarOffice XML format formula string.
- */
- protected String parseFormula(String formula) {
-
- formula = formula.replace(',', ';');
- formula = formula.replace('!', '.');
-
- return formula;
- }
-
- /**
- * This method returns the contents of the current cell.
- *
- * @return The contents of the current cell. Returns
- * null if no cell is currently selected.
- */
- public String getCellValue() {
-
- String contents = new String("");
-
- if (cell != null) {
- try {
- contents = ((Formula)cell).getValue();
- }
- catch (IOException e) {
- System.err.println("Could Not retrieve Cell value");
- System.err.println("Setting value of cell(" + cell.getRow()
- + "," + cell.getCol() + ") to an empty string");
- System.err.println("Error msg: " + e.getMessage());
- }
- }
- return contents;
- }
-
- /**
- * <p>This method returns the type of the data in the current cell.
- * Currently the only type supported is String.</p>
- *
- * @return The type of the data in the current cell.
- */
- public String getCellDataType() {
-
- String type = OfficeConstants.CELLTYPE_STRING;
-
- if(cell instanceof FloatNumber)
- type = OfficeConstants.CELLTYPE_FLOAT;
- if(cell instanceof Formula)
- type = OfficeConstants.CELLTYPE_FLOAT;
-
- return type;
- }
-
-
- /**
- * Return the Format object describing the active cell formatting.
- *
- * @return The Format object describing the active cell formatting.
- */
- public Format getCellFormat() {
- return new Format(fmt);
- }
-
-
- /**
- * Create the format data for the new cell.
- */
- private void readCellFormat() throws IOException {
-
- fmt.clearFormatting();
-
- Debug.log(Debug.TRACE," ixfe for Current Cell " + cell.getIxfe());
- ExtendedFormat xf = wb.getExtendedFormat(cell.getIxfe());
- Debug.log(Debug.TRACE," ixfnt for Current Cell " + xf.getFontIndex());
- FontDescription fd = wb.getFontDescription(xf.getFontIndex());
-
- fmt.setAttribute(Format.ITALIC, fd.isItalic());
- fmt.setAttribute(Format.BOLD, fd.isBold());
- fmt.setAttribute(Format.UNDERLINE, fd.isUnderline());
- fmt.setForeground(fd.getForeground());
-
- fmt.setBackground(xf.getBackground());
- fmt.setAlign(xf.getAlign());
- fmt.setVertAlign(xf.getVertAlign());
- fmt.setAttribute(Format.WORD_WRAP, xf.isWordWrap());
-
- fmt.setAttribute(Format.TOP_BORDER, xf.isBorder(ExtendedFormat.TOP_BORDER));
- fmt.setAttribute(Format.BOTTOM_BORDER, xf.isBorder(ExtendedFormat.BOTTOM_BORDER));
- fmt.setAttribute(Format.RIGHT_BORDER, xf.isBorder(ExtendedFormat.RIGHT_BORDER));
- fmt.setAttribute(Format.LEFT_BORDER, xf.isBorder(ExtendedFormat.LEFT_BORDER));
-
- fmt.setFontName(fd.getFont());
- fmt.setFontSize(fd.getFontSize());
-
- fmt.setCategory(getCellDataType());
-
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java
deleted file mode 100644
index 062260aa3664..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/PocketExcelEncoder.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel;
-
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.Vector;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.IntArrayList;
-
-import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetEncoder;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.sxc.BookSettings;
-import org.openoffice.xmerge.converter.xml.sxc.SheetSettings;
-import org.openoffice.xmerge.converter.xml.sxc.NameDefinition;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializerImpl
- * SxcDocumentSerializerImpl} to encode the Pocket Excel format.
- *
- * @author Martin Maher
- */
-final class PocketExcelEncoder extends SpreadsheetEncoder {
-
- private Workbook wb;
-
- /**
- * Constructor creates a Pocket Excel WorkBook.
- *
- * @param name The name of the WorkBook.
- * @param password The password for the WorkBook.
- *
- * @throws IOException If any I/O error occurs.
- */
- PocketExcelEncoder(String name, String password) throws IOException {
-
- super(name, password);
- wb = new Workbook(name);
-
- }
-
-
- /**
- * This method creates a WorkSheet belonging to the
- * WorkBook.
- *
- * @param sheetName The name of the WorkSheet.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void createWorksheet(String sheetName) throws IOException {
-
- wb.addWorksheet(sheetName);
- }
-
-
- /**
- * This method gets the number of sheets in the WorkBook.
- *
- * @return The number of sheets in the WorkBook.
- */
- public int getNumberOfSheets() {
-
- Vector v = wb.getWorksheetNames();
- return (v.size());
- }
-
-
- /**
- * This method returns the Workbook created.
- *
- * @return Returns a <code>Workbook</code>
- *
- * @throws IOException If any I/O error occurs.
- */
- public Workbook getWorkbook() throws IOException {
-
- return wb;
- }
-
- /**
- * This method converts a String containing a formula in infix notation
- * to a String in Reverse Polish Notation (RPN)
- *
- * @return a parsed pexcel formula in RPN
- */
- protected String parseFormula(String formula) {
-
- Debug.log(Debug.TRACE,"Strip Formula (Before) : " + formula);
-
- StringBuffer inFormula = new StringBuffer(formula);
- StringBuffer outFormula = new StringBuffer();
-
- boolean inBrace = false;
- boolean firstCharAfterBrace = false;
- boolean firstCharAfterColon = false;
-
- int len = inFormula.length();
-
- for (int in = 0; in < len; in++) {
- switch (inFormula.charAt(in)) {
- case '[':
- // We are now inside a StarOffice cell reference.
- // We also need to strip out the '['
- Debug.log(Debug.TRACE,"brace Found");
- inBrace = true;
-
- // If the next character is a '.', we want to strip it out
- firstCharAfterBrace = true;
- break;
-
- case ']':
- // We are exiting a StarOffice cell reference
- // We are stripping out the ']'
- inBrace = false;
- break;
- case '.':
- if (inBrace == true && (firstCharAfterBrace == true ||
- firstCharAfterColon == true) ) {
-
- Debug.log(Debug.TRACE,"dot Found and in brace");
- // Since we are in a StarOffice cell reference,
- // and we are the first character, we need to
- // strip out the '.'
- firstCharAfterBrace = false;
- firstCharAfterColon = false;
-
- } else if(firstCharAfterColon == true) {
- firstCharAfterColon = false;
- } else {
- outFormula.append(inFormula.charAt(in));
- }
- break;
-
- case ':':
- // We have a cell range reference.
- // May need to strip out the leading '.'
- firstCharAfterColon = true;
- outFormula.append(inFormula.charAt(in));
- break;
-
- case ';':
- // StarOffice XML format uses ';' as a separator. MiniCalc (and
- // many spreadsheets) use ',' as a separator instead.
- outFormula.append(',');
- break;
-
- default:
- // We hit valid data, lets add it to the formula string
- outFormula.append(inFormula.charAt(in));
-
- // Need to make sure that firstCharAfterBrace is not true.
- firstCharAfterBrace = false;
- break;
- }
- }
-
- Debug.log(Debug.TRACE,"Strip Formula (After) : " + outFormula);
- return outFormula.toString();
- }
-
- /**
- * Add a cell to the current WorkSheet.
- *
- * @param row The row number of the cell.
- * @param column The column number of the cell.
- * @param fmt The <code>Format</code> object describing
- * the appearance of this cell.
- * @param cellContents The text or formula of the cell's contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void addCell(int row, int column, Format fmt, String cellContents) throws IOException {
-
- if (cellContents.startsWith("=")) {
- cellContents = parseFormula(cellContents);
- Debug.log(Debug.TRACE,"Parsing Formula " + cellContents);
- }
- wb.addCell(row, column, fmt, cellContents);
- }
-
-
- /**
- * Set the width of the columns in the WorkBook.
- *
- * @param columnWidths An <code>IntArrayList</code> of column
- * widths.
- */
- public void setColumnRows(Vector columnRows) throws IOException {
-
- wb.addColInfo(columnRows);
- }
-
- /**
- * Set the width of the columns in the WorkBook.
- *
- * @param columnWidths An <code>IntArrayList</code> of column
- * widths.
- */
- public void setNameDefinition(NameDefinition nd) throws IOException {
-
- String parsedName = nd.getDefinition();
- nd.setDefinition(parseFormula(parsedName));
-
- wb.addNameDefinition(nd);
- }
-
- /**
- * Set the width of the columns in the WorkBook.
- *
- * @param columnWidths An <code>IntArrayList</code> of column
- * widths.
- */
- public void addSettings(BookSettings s) throws IOException {
-
- wb.addSettings(s);
- }
-
- /**
- * This method sets the format of a cell to <i>string</i>.
- *
- * @param format The cell format-may already contain display info,
- * such as alignment or font type.
- *
- * @return The updated format of the cell.
- */
- private long setFormatString(long format) {
-
- return 0;
- }
-
-
- /**
- * Set a cell's formatting options via a separately create
- * <code>Format</code> object.
- *
- * @param row The row number of the cell to be changed.
- * @param column The column number of the cell to be changed.
- * @param fmt Object containing formatting settings for
- * this cell.
- */
- public void setCellFormat(int row, int column, Format fmt) {
- Debug.log(Debug.TRACE,"bold : " + fmt.getAttribute(Format.BOLD) +
- ",Italic : " + fmt.getAttribute(Format.ITALIC) +
- ",Underline : " + fmt.getAttribute(Format.UNDERLINE));
- }
-
-
- /**
- * Get the names of the sheets in the WorkBook.
- *
- * @param sheet The required sheet.
- */
- public String getSheetName(int sheet) {
-
- Vector v = wb.getWorksheetNames();
- String wsName = (String) (v.elementAt(sheet));
-
- return wsName;
- }
-
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java
deleted file mode 100644
index 777506515629..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentDeserializerImpl.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel;
-
-import java.io.IOException;
-import java.util.Enumeration;
-import java.util.Vector;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.converter.xml.sxc.SpreadsheetDecoder;
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentDeserializer;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelDecoder;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-
-
-/**
- * <p>Pocket Excel implementation of <code>DocumentDeserializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>This converts a set of files in Pocket Excel PXL format to a StarOffice DOM.</p>
- *
- * @author Mark Murnane
- */
-public final class SxcDocumentDeserializerImpl extends SxcDocumentDeserializer {
-
- /**
- * Creates new <code>SxcDocumentDeserializerImpl</code>.
- *
- * @param cd <code>ConvertData</code> Input data to convert.
- */
- public SxcDocumentDeserializerImpl(ConvertData cd) {
- super(cd);
- }
-
-
- /**
- * This method will be implemented by concrete subclasses and will
- * return an application-specific decoder.
- *
- * @param workbook The WorkBook name.
- * @param worksheetNames An array of WorkSheet names.
- * @param password The password.
- *
- * @return An application-specific <code>SpreadsheetDecoder</code>.
- */
- public SpreadsheetDecoder createDecoder(String workbook,
- String[] worksheetNames, String password) throws IOException {
-
- return new PocketExcelDecoder(workbook, worksheetNames, password);
- }
-
-
- /**
- * This method will return the name of the WorkBook from the
- * <code>ConvertData</code>. Allows for situations where the
- * WorkBook name differs from the PDB name.
- *
- * Implemented in the Deserializer as the Decoder's constructor
- * requires a name.
- *
- * @param cd The <code>ConvertData</code>.
- *
- * @return The name of the WorkBook.
- */
- protected String getWorkbookName(ConvertData cd)
- throws IOException {
-
- Enumeration e = cd.getDocumentEnumeration();
- Workbook wb = (Workbook) e.nextElement();
-
- String workbookName = wb.getName();
- return workbookName;
- }
-
-
- /**
- * This method will return an array of WorkSheet names from the
- * <code>ConvertData</code>.
- *
- * @param cd The <code>ConvertData</code>.
- *
- * @return The name of the WorkSheet.
- */
- protected String[] getWorksheetNames(ConvertData cd)
- throws IOException {
-
- Enumeration e = cd.getDocumentEnumeration();
- Workbook wb = (Workbook) e.nextElement();
- Vector v = wb.getWorksheetNames();
- e = v.elements();
- String worksheetNames[] = new String[v.size()];
- int i = 0;
- while(e.hasMoreElements()) {
- worksheetNames[i] = (String) e.nextElement();
- Debug.log(Debug.TRACE,"Worksheet Name : " + worksheetNames[i]);
- i++;
- }
- return worksheetNames;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java
deleted file mode 100644
index df2d9c6befa1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/SxcDocumentSerializerImpl.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel;
-
-import java.awt.Color;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import java.io.IOException;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.sxc.SxcDocumentSerializer;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-
-/**
- * <p>Pocket Excel implementation of <code>SxcDocumentDeserializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>This converts StarOffice XML format to a set of files in
- * Pocket Excel PXL format.</p>
- *
- * @author Paul Rank
- * @author Mark Murnane
- */
-public final class SxcDocumentSerializerImpl extends SxcDocumentSerializer {
-
-
- /**
- * Constructor.
- *
- * @param document The <code>Document</code> to convert.
- */
- public SxcDocumentSerializerImpl(Document document) {
- super(document);
- }
-
-
- public ConvertData serialize() throws ConvertException, IOException {
-
- // Get the server side document name. This value should not
- // contain a path or the file extension.
- String docName = sxcDoc.getName();
-
- // TODO - get real values for password when implemnted in XML
- // Passwords are not currently stored in StarCalc XML format.
- String password = null;
-
- encoder = new PocketExcelEncoder(docName, password);
-
- // get dom document
- org.w3c.dom.Document domDoc = sxcDoc.getContentDOM();
-
- // load the styles
- loadStyles(sxcDoc);
- // Traverse to the office:body element.
- // There should only be one.
- NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY);
- int len = list.getLength();
-
- if (len > 0) {
- Node node = list.item(0);
- traverseBody(node);
- }
-
- // get settings for this document
- org.w3c.dom.Document settingsDoc = sxcDoc.getSettingsDOM();
- if(settingsDoc!=null) {
- NodeList settingsList = settingsDoc.getElementsByTagName(TAG_OFFICE_SETTINGS);
- int slen = settingsList.getLength();
-
- if (slen > 0) {
- Node settingsNode = settingsList.item(0);
- traverseSettings(settingsNode);
- }
- }
-
- // Get the number of sheets in the workbook
- // This will equal the number of PDBs we need
- ConvertData cd = new ConvertData();
- Workbook wb = ((PocketExcelEncoder) encoder).getWorkbook();
- cd.addDocument(wb);
-
- return cd;
- }
-
-
- /**
- * A cell reference in a StarOffice formula looks like
- * [.C2] (for cell C2). MiniCalc is expecting cell references
- * to look like C2. This method strips out the braces and
- * the period.
- *
- * @param formula A StarOffice formula <code>String</code>.
- *
- * @return A MiniCalc formula <code>String</code>.
- */
- protected String parseFormula(String formula) {
-
- return null;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/build.xml
deleted file mode 100644
index d0b036da0454..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/build.xml
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcxs_pexcel" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcxs_pexcel"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxc/pexcel"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/PocketExcelConstants.java"/>
- <include name="${package}/PocketExcelDecoder.java"/>
- <include name="${package}/PocketExcelEncoder.java"/>
- <include name="${package}/SxcDocumentDeserializerImpl.java"/>
- <include name="${package}/SxcDocumentSerializerImpl.java"/>
- <include name="${package}/ConverterCapabilitiesImpl.java"/>
- <include name="${package}/PluginFactoryImpl.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/converter.xml
deleted file mode 100644
index 85efdab4f83d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/converter.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<converters>
- <converter type="staroffice/sxc" version="1.0">
- <converter-display-name>
- Pocket Excel 2.0
- </converter-display-name>
- <converter-description>
- StarCalc XML to/from Pocket Excel 2.0 conversion
- </converter-description>
- <converter-vendor>OpenOffice.org</converter-vendor>
- <converter-class-impl>
- org.openoffice.xmerge.converter.xml.sxc.pexcel.PluginFactoryImpl
- </converter-class-impl>
- <converter-target type="application/x-pocket-excel" />
- </converter>
-</converters>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/makefile.mk
deleted file mode 100644
index 9e5308e04a11..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxcxs_pexcel
-PRJ=../../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html
deleted file mode 100644
index b13666af6920..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/package.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.converter.xml.sxc.pexcel package</title>
-</head>
-
-<body bgcolor="white">
-
-<p>Provides the tools for doing the conversion of StarWriter XML to
-and from Pocket Excel format.</p>
-
-<p>It follows the {@link org.openoffice.xmerge} framework for the conversion process.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java
deleted file mode 100644
index e55778c8e04f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BIFFRecord.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
- public interface BIFFRecord {
-
- /**
- * Get the type of the record. In the BIFF file format each record has a type
- * designated with a byte value. See @link PocketExcelBiffConstants
- * for a list of the BIFF constants and what they mean.
- *
- * @return byte The BIFF record value.
- */
- public short getBiffType();
-
- /**
- * Read from the input stream <b>NB</b>The input stream is assumed to be in
- * Little Endian format. The Biff identifier is expected to be in the stream.
- *
- * @param input The InputStream to read from.
- * @return The number of bytes that were read in.
- */
- public int read(InputStream input) throws IOException;
-
- /**
- * Writes the record, including the BIFF record byte to the outputstream
- * @param output The output stream to write to in LittleEndian format.
- */
- public void write(OutputStream output) throws IOException;
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java
deleted file mode 100644
index fadaea5e30d7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BeginningOfFile.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * This class describes the beginning of file. It is the
- * the Biff record that marks the beginning of a a worbook
- * or the beginning of worksheets in the workbook
- *
- */
-public class BeginningOfFile implements BIFFRecord {
-
- private byte[] version = new byte[2];
- private byte[] subStream = new byte[2];
-
- /**
- * Constructor that initializes the member values.
- *
- * @param ver Version Number
- * Substream type (workbook = 0x05, worksheet = 0x10)
- */
- public BeginningOfFile(boolean global) {
- setVersion((short) 271);
- if(global)
- setSubStreamWBGlobal();
- else
- setSubStreamWorkSheet();
- // this.subStream = EndianConverter.writeShort(dt);
- }
-
- public BeginningOfFile(InputStream is) throws IOException {
- read(is);
- }
-
- private void setVersion(short version) {
- this.version = EndianConverter.writeShort(version);
- }
-
- int getVersion() {
- return EndianConverter.readShort(version);
- }
-
- private void setSubStreamWBGlobal() {
- // subStream = new byte[] {0x05};
- subStream = EndianConverter.writeShort((short) 0x05);
- }
-
- private void setSubStreamWorkSheet() {
- // subStream = new byte[] {0x10};
- subStream = EndianConverter.writeShort((short) 0x10);
- }
-
- int getSubStreamType() {
- return EndianConverter.readShort(subStream);
- }
-
- public int read(InputStream input) throws IOException {
- int numBytesRead = input.read(version);
- numBytesRead += input.read(subStream);
- Debug.log(Debug.TRACE,"\tVersion : "+ EndianConverter.readShort(version) +
- " Stream : " + EndianConverter.readShort(subStream));
-
- return numBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(version);
- output.write(subStream);
-
- Debug.log(Debug.TRACE, "Writing BeginningOfFile record");
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>BeginningOfFile</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.BOF_RECORD;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java
deleted file mode 100644
index 5844f4a6b57b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BlankCell.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF Record that describes a blank cell
- */
-public class BlankCell extends CellValue {
-
- /**
- * Constructs a BlankCell <code>InputStream</code>
- *
- * @param is InputStream containing a BlankCell.
- */
- public BlankCell(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Constructs a <code>BlankCell</code> using specified attributes
- *
- * @param row row number
- * @param col column number
- * @param cellContents contents of the cell
- * @param ixfe font index
- */
- public BlankCell(int row, int column, int ixfe) throws IOException {
-
- setRow(row);
- setCol(column);
- setIxfe(ixfe);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>BlankCell</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.BLANK_CELL;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(rw);
- output.write(col);
- output.write(ixfe);
-
- Debug.log(Debug.TRACE, "Writing BlankCell record");
-
- }
-
- /**
- * Reads a BlankCell <code>InputStream</code>
- *
- * @param is InputStream containing a BlankCell.
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(rw);
- numOfBytesRead++;
- col += input.read();
- numOfBytesRead += input.read(ixfe);
-
- Debug.log(Debug.TRACE, "\tRow : "+ EndianConverter.readShort(rw) +
- " Column : " + col +
- " ixfe : " + EndianConverter.readShort(ixfe));
-
- return numOfBytesRead;
- }
-
- /**
- * Gets the <code>String</code> representing the cells contents
- *
- * @return the <code>String</code> representing the cells contents
- */
- public String getString() throws IOException {
-
- return (new String(""));
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java
deleted file mode 100644
index b9226885be2d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoolErrCell.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF Record that describes a Boolean or Error value
- */
-public class BoolErrCell extends CellValue {
-
- private byte bBoolErr;
- private byte fError;
-
- /**
- * Constructs a BoolErrCell from arguments
- *
- * @param row row number
- * @param col column number
- * @param ixfe font index
- * @param bBoolErr Boolean value or error value
- * @param fError Boolean error flag
- */
- public BoolErrCell(int row, int column, int ixfe, int bBoolErr, int fError) throws IOException {
-
- setIxfe(ixfe);
- this.bBoolErr = (byte)bBoolErr;
- this.fError = (byte)fError;
- setRow(row);
- setCol(column);
- }
-
- /**
- * Constructs a BoolErrCell from the <code>InputStream</code>
- *
- * @param is InputStream containing a BoolErrCell
- */
- public BoolErrCell(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>BoolErrCEll</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.BOOLERR_CELL;
- }
-
- /**
- * Writes a <code>BoolErrCell</code> to the specified <code>Outputstream</code>
- *
- * @param os the <code>OutputStream</code> to write to
- */
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
-
- super.write(output);
-
- output.write(bBoolErr);
- output.write(fError);
-
- Debug.log(Debug.TRACE,"Writing BoolErrCell record");
- }
-
- /**
- * Reads a BoolErrCell from the <code>InputStream</code>
- *
- * @param is InputStream containing a BoolErrCell
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = super.read(input);
-
- bBoolErr = (byte) input.read();
- fError = (byte) input.read();
- numOfBytesRead += 2;
-
- Debug.log(Debug.TRACE, " bBoolErr : " + bBoolErr +
- " fError : " + fError);
- return numOfBytesRead;
- }
-
- /**
- * Gets the <code>String</code> representing the cells contents
- *
- * @return the <code>String</code> representing the cells contents
- */
- public String getString() throws IOException {
- return ("Error Cell");
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java
deleted file mode 100644
index 743853013ac6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/BoundSheet.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.io.OutputStream;
-import java.io.InputStream;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BoundSheet Record which describes the name of a worksheet
- */
-public class BoundSheet implements BIFFRecord {
-
- private byte reserved;
- private byte cch;
- private byte[] sheetName;
-
- /**
- * Constructs a pocket Excel Document assigns it the document name passed in
- *
- * @param name name of the worksheet represented
- */
- public BoundSheet(String name) throws IOException {
- setSheetName(name);
- reserved = 0;
- }
-
- /**
- * Constructs a pocket Excel Document from the
- * <code>InputStream</code> and assigns it the document name passed in
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public BoundSheet(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Sets the worksheet name. The sheetname length must be doubled as the
- * String is stored in unicode format.
- *
- * @param sheetname worksheet name
- */
- void setSheetName(String sheetName) throws IOException {
- this.cch = (byte) sheetName.length();
- this.sheetName = new byte[cch*2];
- this.sheetName = sheetName.getBytes("UTF-16LE");
- }
-
- public String getSheetName() {
- String name;
-
- try {
- name = new String(sheetName, "UTF-16LE");
- } catch (UnsupportedEncodingException e){
- name = "unknown";
- }
- return name;
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>BoundSheet</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.BOUND_SHEET;
- }
-
- /**
- * Write this particular <code>BIFFRecord</code> to the <code>OutputStream</code>
- *
- * @param ouput the <code>OutputStream</code>
- */
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(reserved);
- output.write(cch);
- output.write(sheetName);
-
- Debug.log(Debug.TRACE,"Writing BoundSheet record");
- }
-
- /**
- * Reads a BoundSheet from the <code>InputStream</code> The byte array
- * must be twice the size of the String as it uses unicode.
- *
- * @param is InputStream containing the record data
- */
- public int read(InputStream input) throws IOException {
-
- reserved = (byte) input.read();
- cch = (byte) input.read();
- int numOfBytesRead = 2;
- int strLen = cch*2;
- sheetName = new byte[strLen];
- numOfBytesRead += input.read(sheetName, 0, strLen);
-
- Debug.log(Debug.TRACE,"\tReserved : "+ reserved +
- " cch : " + cch +
- " sheetName : " + new String(sheetName,"UTF-16LE"));
-
- return numOfBytesRead;
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java
deleted file mode 100644
index 3c4d875a923a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CellValue.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-public abstract class CellValue implements BIFFRecord {
-
- protected byte[] rw = new byte[2];
- protected byte col;
- protected byte[] ixfe = new byte[2];
-
- /**
- * Get the row number of this cell
- *
- * @return the row number of this cell
- */
- public int getRow() {
- return EndianConverter.readShort(rw) + 1;
- }
-
- /**
- * Set the row number of this cell
- *
- * @param row sets the row number for this cell
- */
- public void setRow(int row) {
- this.rw = EndianConverter.writeShort((short) (row - 1));
- }
- /**
- * Get the Index to the <code>ExtendedFormat</code>
- *
- * @return the index number of this cell's <code>ExtendedFormat</code>
- */
- public int getIxfe() {
- return EndianConverter.readShort(ixfe);
- }
-
- /**
- * Sets the Index to the <code>ExtendedFormat</code>
- *
- * @param ixfe sets the index number for this cell's <code>ExtendedFormat</code>
- */
- public void setIxfe(int ixfe) {
- this.ixfe = EndianConverter.writeShort((short) (ixfe));
- }
-
- /**
- * Get the column number of this cell
- *
- * @return the column number of this cell
- */
- public int getCol() {
- return col + 1; // The cols start at 1
- }
-
- /**
- * Set the row number of this cell
- *
- * @param col sets the row number for this cell
- */
- public void setCol(int col) {
- this.col = (byte) (col - 1); // The cols start at 1
- }
-
- /**
- * Writes basic cell value attributes to the specified <code>Outputstream</code>
- *
- * @param os the <code>OutputStream</code> to write to
- */
- public void write(OutputStream output) throws IOException {
-
- output.write(rw);
- output.write(col);
- output.write(ixfe);
- }
-
- /**
- * Writes a<code>LabelCell</code> to the specified <code>Outputstream</code>
- *
- * @param os the <code>OutputStream</code> to write to
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(rw);
- col += input.read();
- numOfBytesRead++;
- numOfBytesRead += input.read(ixfe);
-
- Debug.log(Debug.TRACE, "\tRow : "+ EndianConverter.readShort(rw) +
- " Column : " + col +
- " ixfe : " + EndianConverter.readShort(ixfe));
-
- return numOfBytesRead;
- }
-
-
- /**
- * Returns the contents of the cell as a String
- *
- * @return the contents of the cell
- */
- abstract public String getString() throws IOException;
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java
deleted file mode 100644
index 34c2dccdfb10..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/CodePage.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents the codepage for the document. There is a number of unknown
- * fields which are hardcoded at construction
- */
-public class CodePage implements BIFFRecord {
-
- private byte[] codepage = new byte[2];
- private byte[] unknown1 = new byte[2];
- private byte[] unknown2 = new byte[2];
- private byte unknown3;
-
- /**
- * Constructs a pocket Excel Codepage
- */
- public CodePage() {
- codepage = new byte[] {(byte)0xE4, (byte)0x04};
- unknown1 = new byte[] {(byte)0x8C, (byte)0x01};
- unknown2 = new byte[] {(byte)0x00, (byte)0x01};
- unknown3 = 0x00;
- }
-
- /**
- * Constructs a pocket Excel Codepage from the<code>InputStream</code>
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public CodePage(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>BoundSheet</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.CODEPAGE;
- }
-
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(codepage);
- numOfBytesRead += input.read(unknown1);
- numOfBytesRead += input.read(unknown2);
- // numOfBytesRead += input.read(unknown3);
- unknown3 = (byte) input.read();
- numOfBytesRead++;
-
- Debug.log(Debug.TRACE,"\tcodepage : "+ EndianConverter.readShort(codepage) +
- " unknown1 : " + EndianConverter.readShort(unknown1) +
- " unknown2 : " + EndianConverter.readShort(unknown2) +
- " unknown3 : " + unknown3);
-
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(codepage);
- output.write(unknown1);
- output.write(unknown2);
- output.write(unknown3);
-
- Debug.log(Debug.TRACE,"Writing CodePage record");
-
-
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java
deleted file mode 100644
index fc2e9c5f7fbb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ColInfo.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.IOException;
-import java.io.DataInputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * ColInfo describes the formatting for a column
- *
- */
-public class ColInfo implements BIFFRecord {
-
- private byte[] colFirst = new byte[2]; // first column this formatting applies to
- private byte[] colLast = new byte[2]; // last column this formatting applies to
- private byte[] colDX = new byte[2]; // column width
- private byte[] ixfe = new byte[2]; // index for formatting
- private byte grbit; // options flags
- private float scale = (float) 2.5; // 1.798;
-
- /**
- * Constructs a pocket Excel Document from the
- * <code>InputStream</code> and assigns it the document name passed in
- *
- * @param colFirst the first column this formatting applies to
- * @param colLast last column this formatting applies to
- * @param coldx column width
- * @param grbit options flags
- */
- public ColInfo(int colFirst, int colLast, int colDX, int ixfe) {
- this.colFirst = EndianConverter.writeShort((short)colFirst);
- this.colLast = EndianConverter.writeShort((short)colLast);
- colDX *= scale;
- this.colDX = EndianConverter.writeShort((short)colDX);
- this.ixfe = EndianConverter.writeShort((short)ixfe);
- this.grbit = 0x00;
- }
-
- /**
- * Construct a ColInfo from the InputStream
- *
- * @param is the <code>Inputstream</code> to read from
- */
- public ColInfo(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Reads ColInfo record from the InputStream
- *
- * @param input the InputStream to read from
- * @return the number of bytes read
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(colFirst);
- numOfBytesRead += input.read(colLast);
- numOfBytesRead += input.read(colDX);
- short scaledDX = (short) (EndianConverter.readShort(colDX) / scale);
- colDX = EndianConverter.writeShort(scaledDX);
- numOfBytesRead += input.read(ixfe);
- grbit = (byte) input.read();
- numOfBytesRead ++;
-
- Debug.log(Debug.TRACE,"\tcolFirst : "+ EndianConverter.readShort(colFirst) +
- " colLast : " + EndianConverter.readShort(colLast) +
- " colDX : " + EndianConverter.readShort(colDX) +
- " ixfe : " + EndianConverter.readShort(ixfe) +
- " grbit : " + grbit);
-
- return numOfBytesRead;
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>ColInfo</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.COLINFO;
- }
- /**
- * Get the width of this column
- *
- * @return the width of this column
- */
- public short getColWidth() {
- return EndianConverter.readShort(colDX);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>ColInfo</code>
- */
- public short getFirst() {
- return EndianConverter.readShort(colFirst);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>ColInfo</code>
- */
- public short getLast() {
- return EndianConverter.readShort(colLast);
- }
-
- /**
- * Writes a ColInfo to the specified <code>Outputstream</code>
- *
- * @param os the <code>OutputStream</code> to write to
- */
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(colFirst);
- output.write(colLast);
- output.write(colDX);
- output.write(ixfe);
- output.write(grbit);
-
- Debug.log(Debug.TRACE,"Writing ColInfo record");
-
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java
deleted file mode 100644
index 35650f0278f3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefColWidth.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF record defiuning the defualt column width
- */
-public class DefColWidth implements BIFFRecord {
-
- private byte[] grbit = new byte[2];
- private byte[] coldx = new byte[2];
- private byte[] ixfe = new byte[2];
-
-/**
- * Constructs a pocket Excel Document from the
- * <code>InputStream</code> and assigns it the document name passed in
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public DefColWidth() {
- grbit = new byte[] {0x00, 0x00};
- coldx = new byte[] {0x00, 0x09};
- ixfe = new byte[] {0x00, 0x00};
- }
-
- public DefColWidth(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>DefColWidth</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.DEF_COL_WIDTH;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(grbit);
- output.write(coldx);
- output.write(ixfe);
-
- Debug.log(Debug.TRACE, "Writing DefColWidth record");
- }
-
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(grbit);
- numOfBytesRead += input.read(coldx);
- numOfBytesRead += input.read(ixfe);
-
- Debug.log(Debug.TRACE,"\tgrbit : "+ EndianConverter.readShort(grbit) +
- " coldx : " + EndianConverter.readShort(coldx) +
- " ixfe : " + EndianConverter.readShort(ixfe));
- return 0;
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java
deleted file mode 100644
index 7e933d9b8978..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefRowHeight.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF record defiuning the default row height
- */
-public class DefRowHeight implements BIFFRecord {
-
- private byte[] unknown1 = new byte[2];
- private byte[] unknown2 = new byte[2];
-
- /**
- * Constructs a pocket Excel Document from the
- * <code>InputStream</code> and assigns it the document name passed in
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public DefRowHeight() {
- unknown1 = new byte[] {(byte)0x00, (byte)0x00};
- unknown2 = new byte[] {(byte)0xFF, (byte)0x00};
- }
-
- /**
- * Constructs a DefRowHeight from the <code>InputStream</code>
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public DefRowHeight(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>DefRowHeight</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.DEFAULT_ROW_HEIGHT;
- }
-
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(unknown1);
- numOfBytesRead += input.read(unknown2);
-
- Debug.log(Debug.TRACE,"\tunknown1 : "+ EndianConverter.readShort(unknown1) +
- " unknown2 : " + EndianConverter.readShort(unknown2));
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(unknown1);
- output.write(unknown2);
-
- Debug.log(Debug.TRACE,"Writing DefRowHeight record");
-
-
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java
deleted file mode 100644
index 38d47b8adbc5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/DefinedName.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula.FormulaHelper;
-import org.openoffice.xmerge.converter.xml.sxc.NameDefinition;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF Record representing a defined name in the workbook
- */
-public class DefinedName implements BIFFRecord {
-
- private byte[] grbit = new byte[2];
- private byte cch;
- private byte[] cce = new byte[2];
- private byte[] ixals = new byte[2];
- private byte[] rgch;
- private byte[] rgce;
- private FormulaHelper fh = new FormulaHelper();
- private String definition = new String("");
- private Workbook wb;
-
- /**
- * Constructs a Defined Name from the <code>InputStream</code>
- *
- * @param is InputStream containing the record data
- */
- public DefinedName(NameDefinition nd, Workbook wb) throws IOException {
-
- fh.setWorkbook(wb);
- this.wb = wb;
- String name = nd.getName();
-
- // we have to insert an = to stop the formulaParser throwing an exception
- definition = "=" + nd.getDefinition();
-
- cch = (byte)name.length();
- rgch = new byte[cch*2];
- rgch = name.getBytes("UTF-16LE");
- grbit = EndianConverter.writeShort((short)0);
- ixals[0] = (byte)0xFF;ixals[1] = (byte)0xFF;
- }
- /**
- * Constructs a Defined Name from the <code>InputStream</code>
- *
- * @param is InputStream containing the record data
- */
- public DefinedName(InputStream is, Workbook wb) throws IOException {
-
- read(is);
- fh.setWorkbook(wb);
- this.wb = wb;
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>DefinedName</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.DEFINED_NAME;
- }
-
- /**
- * Reads a Defined Name from the <code>InputStream</code> The byte array
- * must be twice the size of the String as it uses unicode.
- *
- * @param is InputStream containing the record data
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(grbit);
- cch = (byte) input.read();
- numOfBytesRead++;
- numOfBytesRead += input.read(cce);
- numOfBytesRead += input.read(ixals);
-
- rgch = new byte[cch*2];
- input.read(rgch, 0, cch*2);
-
- rgce = new byte[EndianConverter.readShort(cce)];
- input.read(rgce, 0, EndianConverter.readShort(cce));
-
-
-
- Debug.log(Debug.TRACE, "\tgrbit : "+ EndianConverter.readShort(grbit) +
- " cch : " + cch +
- " cce : " + EndianConverter.readShort(cce) +
- " ixals : " + EndianConverter.readShort(ixals) +
- "\n\trgch : " + rgch +
- " rgce : " + rgce);
-
- return numOfBytesRead;
- }
-
- /**
- * Write this particular <code>BIFFRecord</code> to the <code>OutputStream</code>
- *
- * @param ouput the <code>OutputStream</code>
- */
- public void write(OutputStream output) throws IOException {
-
- try {
- Debug.log(Debug.TRACE,"Writing out " + definition);
- rgce = fh.convertCalcToPXL(definition);
- cce = EndianConverter.writeShort((short) rgce.length);
- } catch(Exception e) {
- Debug.log(Debug.TRACE,"Error in Parsing Name Definition");
- cce = EndianConverter.writeShort((short) 0);
- }
-
-
- output.write(getBiffType());
- output.write(grbit);
- output.write(cch);
- output.write(cce);
- output.write(ixals);
- output.write(rgch);
- if(rgce.length!=0)
- output.write(rgce);
-
- Debug.log(Debug.TRACE,"Writing DefinedName record");
- }
-
- /**
- * Returns definition name. This is public because the
- * <code>TokenDecoder</code> has to substitue the Name token with this
- * String when writing out to sxc
- *
- * @return the <code>String</code> containing the name
- */
- public String getName() {
- String name;
-
- try {
- name = new String(rgch, "UTF-16LE");
- } catch (UnsupportedEncodingException e){
- name = "unknown";
- }
- return name;
- }
-
- /**
- * Returns a definition table which can be used by the pocket excel
- * decoder to build a complete definitions table for writing to the sxc
- * document
- */
- public NameDefinition getNameDefinition() {
-
- String baseCellAddress;
- getDefinition(); // This must be called first so we know the type
-
- baseCellAddress = "$" + wb.getSheetName(0) + ".A1";
-
- NameDefinition nd = new NameDefinition(getName(),definition, baseCellAddress, isRangeType(), isExpressionType());
- return nd;
- }
-
- /**
- * Returns the definition
- *
- * @return the <code>String</code> containing the definition
- */
- private String getDefinition() {
- // pexcel sometimes creates Name definition with no defintion, bug??
- if(EndianConverter.readShort(cce)!=0) {
- definition = fh.convertPXLToCalc(rgce);
- definition = definition.substring(1); // remove the '='
- definition = definition.replace(',', ';');
- }
- return definition;
- }
-
- /**
- * Returns the defintion
- *
- * @return the <code>String</code> containing the definition
- */
- private boolean isRangeType() {
-
- return fh.isRangeType();
- }
- /**
- * Returns the defintion
- *
- * @return the <code>String</code> containing the definition
- */
- private boolean isExpressionType() {
-
- return fh.isExpressionType();
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java
deleted file mode 100644
index fbb216caad08..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Eof.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF Record used to mark the end of a section of file
- */
-public class Eof implements BIFFRecord {
-
- /**
- * Constructor
- */
- public Eof() {
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>BeginningOfFile</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.EOF_MARKER;
- }
-
- public int read(InputStream input) throws IOException {
- return 0;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
-
- Debug.log(Debug.TRACE,"Writing Eof record");
-
-
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java
deleted file mode 100644
index dc4780de9efe..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/ExtendedFormat.java
+++ /dev/null
@@ -1,385 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.awt.Color;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.util.ColourConverter;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF Record descibing extended formatting information
- *
- */
-public class ExtendedFormat implements BIFFRecord,
-org.openoffice.xmerge.converter.xml.OfficeConstants {
-
- private byte[] ixfnt = new byte[2]; // Index to Font Record
- private byte[] ixnf = new byte[2];
- private byte[] fattributes = new byte[4];
- private byte[] fBaseAttr = new byte[2]; // base attribute flags
- private byte[] fTextAttr = new byte[2]; // text attribute flags
- private byte[] icvFore = new byte[2]; // Background colour of the cell
- private byte[] icvFill = new byte[2];
- private byte bRight; // Right border Style
- private byte bTop; // Top border style
- private byte bLeft; // Left border style
- private byte bBottom; // Bottom border style
- private byte backstyle;
- private byte borderstyle;
-
- public static final int TOP_BORDER = 0x01;
- public static final int LEFT_BORDER = 0x02;
- public static final int BOTTOM_BORDER = 0x04;
- public static final int RIGHT_BORDER = 0x08;
-
- // Horizontal Alignment Styles
- public static final int NORMAL_ALIGN = 0x00;
- public static final int LEFT_ALIGN = 0x01;
- public static final int CENTER_ALIGN = 0x02;
- public static final int RIGHT_ALIGN = 0x03;
-
- // Vertical Alignment Styles
- public static final int TOP_ALIGN = 0x10;
- public static final int MIDDLE_ALIGN = 0x20;
- public static final int BOTTOM_ALIGN = 0x30;
-
- public static final int WORD_WRAP = 0x08;
-
- /**
- * Constructs an <code>ExtendedFormat</code> from the
- * <code>InputStream</code>
- *
- * @param is <code>InputStream</code> to read from
- */
- public ExtendedFormat(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Constructs a pocket Excel Document using defualt values and sets the
- * font index using the specified attribute
- *
- * @param ixfnt index of the font this format should use
- */
- public ExtendedFormat(int ixfnt, Format fmt) {
-
- this.ixfnt = EndianConverter.writeShort((short)ixfnt);
- String category = fmt.getCategory();
- if(category.equalsIgnoreCase(CELLTYPE_CURRENCY)) {
- this.ixnf = EndianConverter.writeShort((short) 0);
- } else if(category.equalsIgnoreCase(CELLTYPE_DATE)) {
- this.ixnf = EndianConverter.writeShort((short) 0x12);
- } else if(category.equalsIgnoreCase(CELLTYPE_TIME)) {
- this.ixnf = EndianConverter.writeShort((short) 0x1E);
- } else {
- this.ixnf = EndianConverter.writeShort((short) 0);
- }
- this.fattributes = new byte[] {(byte)0xFF,(byte)0xFF,(byte)0xFF,(byte)0xFF};
- this.fBaseAttr = new byte[] {(byte)0x02,(byte)0x00};
-
- this.fTextAttr = new byte[] {(byte)0x00, (byte)0x00};
-
- int align = fmt.getAlign();
-
- // Horizontal alignment
- if(align==Format.CENTER_ALIGN) {
- fTextAttr[0] |= CENTER_ALIGN;
- } else if(align==Format.LEFT_ALIGN) {
- fTextAttr[0] |= LEFT_ALIGN;
- } else if(align==Format.RIGHT_ALIGN) {
- fTextAttr[0] |= RIGHT_ALIGN;
- } else {
- fTextAttr[0] |= NORMAL_ALIGN;
- }
-
- int vertAlign = fmt.getVertAlign();
-
- // Vertical alignment
- if(vertAlign==Format.TOP_ALIGN) {
- fTextAttr[0] |= TOP_ALIGN;
- } else if(vertAlign==Format.BOTTOM_ALIGN) {
- fTextAttr[0] |= BOTTOM_ALIGN;
- } else if(vertAlign==Format.MIDDLE_ALIGN) {
- fTextAttr[0] |= MIDDLE_ALIGN;
- } else {
- fTextAttr[0] |= BOTTOM_ALIGN;
- }
-
- if(fmt.getAttribute(Format.WORD_WRAP)) {
- fTextAttr[0] |= WORD_WRAP;
- }
-
- if(fmt.getAttribute(Format.LEFT_BORDER)) {
- fTextAttr[1] |= LEFT_BORDER;
- }
- if(fmt.getAttribute(Format.RIGHT_BORDER)) {
- fTextAttr[1] |= RIGHT_BORDER;
- }
- if(fmt.getAttribute(Format.TOP_BORDER)) {
- fTextAttr[1] |= TOP_BORDER;
- }
- if(fmt.getAttribute(Format.BOTTOM_BORDER)) {
- fTextAttr[1] |= BOTTOM_BORDER;
- }
-
- Color background = fmt.getBackground();
- if( background != null ) {
- ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup);
- icvFill = EndianConverter.writeShort(cc.convertFromRGB(background));
- } else {
- icvFill = new byte[] {(byte)0xFF,(byte)0x00};
- }
-
- icvFore = new byte[] {(byte)0xFF,(byte)0x00};
-
- bRight = (byte) 0xFF;
- bTop = (byte) 0xFF;
- bLeft = (byte) 0xFF;
- bBottom = (byte) 0xFF;
- backstyle = (byte) 0x00;
- borderstyle = (byte) 0x00;
-
- }
-
- /**
- * Get the font index this format uses
- *
- * @return the font index
- */
- public int getFontIndex() {
- return EndianConverter.readShort(ixfnt);
- }
-
- /**
- * Get the font index this format uses
- *
- * @return the font index
- */
- public int getFormatIndex() {
- return EndianConverter.readShort(ixnf);
- }
-
- /**
- * Get the font index this format uses
- *
- * @return the font index
- */
- public int getTextAttr() {
- return EndianConverter.readShort(fTextAttr);
- }
-
- /**
- * Get the background color this format uses
- *
- * @return the background color
- */
- public Color getBackground() {
- short rgb = EndianConverter.readShort(icvFill);
- Color c = null;
- if(rgb!=0xFF) {
- ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup);
- c = cc.convertToRGB(rgb);
- }
- return c;
- }
-
- /**
- * Get the Vertical alignment for this Format
- *
- * @return the alignment
- */
- public int getVertAlign() {
-
- int mask = MIDDLE_ALIGN | BOTTOM_ALIGN | TOP_ALIGN;
- int masked = fTextAttr[0] & mask;
-
- if(masked == MIDDLE_ALIGN)
- return Format.MIDDLE_ALIGN;
-
- if(masked == BOTTOM_ALIGN)
- return Format.BOTTOM_ALIGN;
-
- if(masked == TOP_ALIGN)
- return Format.TOP_ALIGN;
-
- return Format.BOTTOM_ALIGN;
- }
-
- /**
- * Get the alignment for this Format
- *
- * @return the alignment
- */
- public int getAlign() {
-
- int mask = LEFT_ALIGN | CENTER_ALIGN | RIGHT_ALIGN;
- int masked = fTextAttr[0] & mask;
-
- if(masked == MIDDLE_ALIGN)
- return Format.LEFT_ALIGN;
-
- if(masked == CENTER_ALIGN)
- return Format.CENTER_ALIGN;
-
- if(masked == RIGHT_ALIGN)
- return Format.RIGHT_ALIGN;
-
- return Format.LEFT_ALIGN;
- }
-
- /**
- * Is the word wrap set
- *
- * @return true if it is selected
- */
- public boolean isWordWrap() {
- return (!((fTextAttr[0] & WORD_WRAP) == 0));
- }
- /**
- * Get the border style
- *
- * @param side the side to test
- * @return true if it is selected
- */
- public boolean isBorder(int side) {
- return (!((fTextAttr[1] & side) == 0));
- }
-
- /**
- * Compare two ExtendedFormat to see if the font index is the same
- *
- * @param the ExtendedFormat to be used in the comaprison
- * @return boolean if the two are the same otherwise false
- */
- public boolean compareTo(ExtendedFormat rhs) {
-
- if(EndianConverter.readShort(icvFill) !=
- EndianConverter.readShort(rhs.icvFill))
- return false;
-
- if(this.getTextAttr() != rhs.getTextAttr())
- return false;
-
- if(this.getVertAlign() != rhs.getVertAlign())
- return false;
-
- if(this.getAlign() != rhs.getAlign())
- return false;
-
- if (this.getFontIndex() != rhs.getFontIndex())
- return false;
-
- if (this.getFormatIndex() != rhs.getFormatIndex())
- return false;
-
- return true;
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>ExtendedFormat</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.EXTENDED_FORMAT;
- }
-
- /**
- * Reads the extended format from the <code>Inputstream</code>
- *
- * @param input the <code>Inputstream</code>to read
- * @return toal number of bytes read
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(ixfnt);
- numOfBytesRead += input.read(ixnf);
- numOfBytesRead += input.read(fattributes);
- numOfBytesRead += input.read(fBaseAttr);
- numOfBytesRead += input.read(fTextAttr);
- numOfBytesRead += input.read(icvFore);
- numOfBytesRead += input.read(icvFill);
- bRight = (byte) input.read();
- bTop = (byte) input.read();
- bLeft = (byte) input.read();
- bBottom = (byte) input.read();
- backstyle = (byte) input.read();
- borderstyle = (byte) input.read();
- numOfBytesRead += 6;
-
- Debug.log(Debug.TRACE,"\tixfnt : "+ EndianConverter.readShort(ixfnt) +
- " ixnf : " + EndianConverter.readShort(ixnf) +
- " fattributes : " + EndianConverter.readInt(fattributes) +
- " fBaseAttr : " + EndianConverter.readShort(fBaseAttr) +
- "\n\tfTextAttr : " + EndianConverter.readShort(fTextAttr) +
- " icvFore : " + EndianConverter.readShort(icvFore) +
- " icvFill : " + EndianConverter.readShort(icvFill) +
- " bRight : " + bRight +
- "\n\tbTop : " + bTop +
- " bLeft : " + bLeft +
- " bBottom : " + bBottom +
- " backstyle : " + backstyle +
- " borderstyle : " + borderstyle);
- return numOfBytesRead;
- }
-
- /**
- * Writes the ExtendedFormat to the <code>Outputstream<code>
- *
- * @param output the <code>Outputstream</code>to write to
- */
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(ixfnt);
- output.write(ixnf);
- output.write(fattributes);
- output.write(fBaseAttr);
- output.write(fTextAttr);
- output.write(icvFore);
- output.write(icvFill);
- output.write(bRight);
- output.write(bTop);
- output.write(bLeft);
- output.write(bBottom);
- output.write(backstyle);
- output.write(borderstyle);
-
- Debug.log(Debug.TRACE,"Writing ExtendedFormat record");
-
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java
deleted file mode 100644
index 9399b22fc6ad..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FloatNumber.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-/**
- * Represents a BIFF Record describing a floating point
- */
-public class FloatNumber extends CellValue {
-
- protected byte[] num = new byte[8];
-
- /**
- * Constructs a pocket Excel Document from the
- * <code>InputStream</code> and assigns it the document name passed in
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public FloatNumber(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Constructs a <code>FloatNumber</code> using specified attributes
- *
- * @param row row number
- * @param col column number
- * @param cellContents contents of the cell
- * @param ixfe font index
- */
- public FloatNumber(int row, int column, String cellContents, int ixfe) throws IOException {
-
- setIxfe(ixfe);
- setRow(row);
- setCol(column);
- double cellLong = (double) Double.parseDouble(cellContents);
- num = EndianConverter.writeDouble(cellLong);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>FloatNumber</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.NUMBER_CELL;
- }
-
- /**
- * Reads a<code>FloatNumber</code> from the specified <code>InputStream</code>
- *
- * @param input the <code>InputStram</code> to read from
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = super.read(input);
-
- numOfBytesRead += input.read(num);
-
- Debug.log(Debug.TRACE," num : " + getString());
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
-
- super.write(output);
-
- output.write(num);
-
- Debug.log(Debug.TRACE,"Writing FloatNumber record");
- }
-
-
- /**
- * Gets the numerical value the cell represents
- *
- * @return the <code>String</code> representing a double value
- */
- public String getString() throws IOException {
-
- double value = EndianConverter.readDouble(num);
- Double myDo = new Double(value);
- return myDo.toString();
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java
deleted file mode 100644
index 559853206593..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/FontDescription.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.awt.Color;
-
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.util.ColourConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Represents a BIFF Record descibing a font used
- */
-public class FontDescription implements BIFFRecord {
-
- private byte[] dwHeight = new byte[2];
- private byte[] grbit = new byte[2];
- private byte[] icvFore = new byte[2];
- private byte[] bls = new byte[2];
- private byte[] Reserved2 = new byte[2];
- private byte uls;
- private byte bFamily;
- private byte bCharSet;
- private byte Reserved3;
- private byte cch;
- private byte[] rgch;
-
- public static final int UNDERLINE = 0x01;
- public static final int ITALIC = 0x02;
-
- /**
- * Constructs a FontDescription from the bold italic and undelrine attributes
- *
- * @param italic Italic attribute
- * @param bold Bold attribute
- * @param underline Underline attribute
- */
- public FontDescription(Format fmt) throws IOException {
-
- Debug.log(Debug.TRACE,"Building FontDescriptor based on Format : " + fmt);
-
- this.dwHeight = EndianConverter.writeShort((short) (fmt.getFontSize()*20));
-
- grbit = new byte[] {(byte)0x00, (byte)0x00};
- bls = EndianConverter.writeShort((short) 400);
- uls = 0;
-
- if (fmt.getAttribute(Format.ITALIC))
- grbit[0] |= ITALIC;
-
- if (fmt.getAttribute(Format.BOLD))
- bls = EndianConverter.writeShort((short) 700);
-
- if (fmt.getAttribute(Format.UNDERLINE))
- uls |= UNDERLINE;
-
-
- bFamily = 0;
- bCharSet = 0;
-
- String fontName = fmt.getFontName();
- if( !fontName.equals("Tahoma") &&
- !fontName.equals("Courier New")) {
- // We will set our default font to be Tahoma
- fontName = new String("Tahoma");
- }
-
- cch = (byte) fontName.length();
- rgch = fontName.getBytes("UTF-16LE");
-
- Color foreground = fmt.getForeground();
- if( foreground != null ) {
- ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup);
- icvFore = EndianConverter.writeShort(cc.convertFromRGB(foreground));
- } else {
- icvFore = new byte[] {(byte)0xFF,(byte)0x00};
- }
-
- Reserved2 = EndianConverter.writeShort((short) 0);
- Reserved3 = 0;
-
- }
-
- /**
- * Tests if this font descriptor defines italic
- *
- * @return true if italic otherwise false
- */
- public boolean isItalic() {
-
- return (EndianConverter.readShort(grbit) == 2);
- }
-
- /**
- * Tests if this font descriptor defines underline
- *
- * @return true if underline otherwise false
- */
- public boolean isUnderline() {
-
- return (uls == 1);
- }
-
- /**
- * Tests if this font descriptor defines bold
- *
- * @return true if bold otherwise false
- */
- public boolean isBold() {
-
- return (EndianConverter.readShort(bls) == 700);
- }
-
- /**
- * Get the background color this format uses
- *
- * @return the background color
- */
- public Color getForeground() {
- short rgb = EndianConverter.readShort(icvFore);
- Color c = null;
- if(rgb!=0xFF) {
- ColourConverter cc = new ColourConverter(PocketExcelConstants.cLookup);
- c = cc.convertToRGB(rgb);
- }
- return c;
- }
-
- /**
- * Compares current font descriptor against one passed in
- *
- * @return true if attrbitues are the same
- */
- public boolean compareTo(FontDescription rhs) {
-
- if(EndianConverter.readShort(icvFore) !=
- EndianConverter.readShort(rhs.icvFore))
- return false;
-
- if (EndianConverter.readShort(dwHeight) !=
- EndianConverter.readShort(dwHeight))
- return false;
-
- if (this.getFont() != rhs.getFont())
- return false;
-
- if (this.isBold() != rhs.isBold())
- return false;
-
- if (this.isUnderline() != rhs.isUnderline())
- return false;
-
- if (this.isItalic() != rhs.isItalic())
- return false;
-
- return true;
- }
-
-
- /**
- * Constructs a Font Description from the <code>InputStream</code>
- *
- * @param is InputStream containing a <code>FontDescription</code>
- */
- public FontDescription(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>FontDescription</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.FONT_DESCRIPTION;
- }
-
- /**
- * Get the Font size
- *
- */
- public int getFontSize() {
- return EndianConverter.readShort(dwHeight)/20;
- }
-
- /**
- * Get the font name
- *
- */
- public String getFont() {
-
- String name;
-
- try {
- name = new String(rgch, "UTF-16LE");
- } catch (UnsupportedEncodingException e){
- name = "Tahoma";
- }
- return name;
- }
-
- /**
- * Constructs a Font Description from the <code>InputStream</code>
- *
- * @param is InputStream containing a <code>FontDescription</code>
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(dwHeight);
- numOfBytesRead += input.read(grbit);
- numOfBytesRead += input.read(icvFore);
- numOfBytesRead += input.read(bls);
- numOfBytesRead += input.read(Reserved2);
- uls = (byte) input.read();
- bFamily = (byte) input.read();
- bCharSet = (byte) input.read();
- Reserved3 = (byte) input.read();
- cch = (byte) input.read();
- numOfBytesRead += 5;
-
- rgch = new byte[cch*2];
- input.read(rgch, 0, cch*2);
-
- Debug.log(Debug.TRACE,"\tdwHeight : "+ EndianConverter.readShort(dwHeight) +
- " grbit : " + EndianConverter.readShort(grbit) +
- " bls : " + EndianConverter.readShort(bls) +
- " uls : " + uls +
- "\n\tFamily : " + bFamily +
- " bCharSet : " + bCharSet +
- " cch : " + cch +
- " rgch : " + new String(rgch,"UTF-16LE"));
-
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(dwHeight);
- output.write(grbit);
- output.write(icvFore);
- output.write(bls);
- output.write(Reserved2);
- output.write(uls);
- output.write(bFamily);
- output.write(bCharSet);
- output.write(Reserved3);
- output.write(cch);
- output.write(rgch);
-
- Debug.log(Debug.TRACE,"Writing FontDescription record");
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java
deleted file mode 100644
index 97bea77f0811..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Formula.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.util.Calendar;
-import java.util.Date;
-import java.text.DateFormat;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula.FormulaHelper;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Represents a BIFF Record describing a formula
- */
-public class Formula extends CellValue implements OfficeConstants {
-
- private byte[] num = new byte[8];
- private byte grbit;
- private byte[] cce = new byte[2];
- private byte[] rgce;
- private FormulaHelper fh = new FormulaHelper();
-
- /**
- * Constructs a <code>Formula</code> using specified attributes
- *
- * @param row row number
- * @param col column number
- * @param cellContents contents of the cell
- * @param ixfe font index
- * @param value the value of the cell
- */
- public Formula(int row, int column, String cellContents, int ixfe, Format fmt, Workbook wb)
- throws Exception {
-
- fh.setWorkbook(wb);
-
- setRow(row);
- setCol(column);
- setIxfe(ixfe);
- setFormula(cellContents);
-
- String category = fmt.getCategory();
- String value = fmt.getValue();
-
- if(category.equalsIgnoreCase(CELLTYPE_BOOLEAN)) {
- num[0]=(byte)0x01;
- num[1]=(byte)0x00;
- if(value.equalsIgnoreCase("true")) {
- num[2]=(byte)0x01;
- } else {
- num[2]=(byte)0x00;
- }
- num[3]=(byte)0x00;num[4]=(byte)0x00;num[5]=(byte)0x00;
- num[6]=(byte)0xFF;num[7]=(byte)0xFF;
- } else if(category.equalsIgnoreCase(CELLTYPE_DATE)) {
- Debug.log(Debug.TRACE,"Date Formula");
- num = EndianConverter.writeDouble(toExcelSerialDate(fmt.getValue()));
- } else if(category.equalsIgnoreCase(CELLTYPE_TIME)) {
- Debug.log(Debug.TRACE,"Time Formula");
- num = EndianConverter.writeDouble(toExcelSerialTime(fmt.getValue()));
- } else if(category.equalsIgnoreCase(CELLTYPE_PERCENT)) {
- Debug.log(Debug.TRACE,"Percent Formula");
- double percent = (double) Double.parseDouble(fmt.getValue());
- num = EndianConverter.writeDouble(percent);
- } else if(category.equalsIgnoreCase(CELLTYPE_CURRENCY)) {
- Debug.log(Debug.TRACE,"Currency Formula");
- } else if(category.equalsIgnoreCase(CELLTYPE_STRING)) {
- Debug.log(Debug.TRACE,"String Formula");
- num[0]=(byte)0x00;
- num[1]=(byte)0x00;
- num[2]=(byte)0x00;
- num[3]=(byte)0x00;
- num[4]=(byte)0x00;
- num[5]=(byte)0x00;
- num[6]=(byte)0xFF;
- num[7]=(byte)0xFF;
- } else {
- Debug.log(Debug.TRACE,"Float Formula");
- double cellLong = (double) Double.parseDouble(fmt.getValue());
- num = EndianConverter.writeDouble(cellLong);
- }
- }
-
- /**
- * Translates a <code>String</code> written in infix which represents a
- * formula into a byte[] what can be written to pocket excel file.
- *
- * @param formula string
- */
- public void setFormula(String inFormula) throws Exception {
-
- rgce = fh.convertCalcToPXL(inFormula);
- cce = EndianConverter.writeShort((short) rgce.length);
- }
-
- /**
- * Constructs a pocket Excel formula from the
- * <code>InputStream</code>
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public Formula(InputStream is, Workbook wb) throws IOException {
- read(is);
- fh.setWorkbook(wb);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Formula</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.FORMULA_CELL;
- }
-
- /**
- * Reads the formula data members from the stream. Byte arrays for Strings
- * are doubled as they are stored as unicode
- *
- * @return total number of bytes read
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = super.read(input);
-
- numOfBytesRead += input.read(num);
- grbit = (byte) input.read();
- numOfBytesRead ++;
- numOfBytesRead += input.read(cce);
-
- int strLen = EndianConverter.readShort(cce);
- rgce = new byte[strLen];
- input.read(rgce, 0, strLen);
-
- Debug.log(Debug.TRACE, " num : " + num +
- "\n\tgrbit : " + grbit +
- " cce : " + EndianConverter.readShort(cce) +
- " rgce : " + new String(rgce,"UTF-16LE") +
- "\n" + numOfBytesRead + " Bytes Read");
-
- return numOfBytesRead;
- }
-
- /**
- * Writes the Formula record to the <code>OutputStream</code>
- *
- * @param the <code>OutputStream</code> being written to
- */
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
-
- super.write(output);
-
- output.write(num);
- output.write(grbit);
- output.write(cce);
- output.write(rgce);
-
- Debug.log(Debug.TRACE,"Writing Formula record");
- }
-
- /**
- * Gets the <code>String</code> representing the cell value
- *
- * @return the <code>String</code> representing the cell value
- */
- public String getValue() throws IOException {
-
- double value = EndianConverter.readDouble(num);
- Double myDo = new Double(value);
- return myDo.toString();
- }
-
- /**
- * Gets the <code>String</code> representing the cells contents
- *
- * @return the <code>String</code> representing the cells contents
- */
- public String getString() throws IOException {
-
- return fh.convertPXLToCalc(rgce);
- }
-
- /**
- * Excel dates are the number of days since 1/1/1900. This method converts
- * to this date.
- *
- * @param s String representing a date in the form YYYY-MM-DD
- * @return The excel serial date
- */
- public long toExcelSerialDate(String s) throws IOException {
-
- int year = Integer.parseInt(s.substring(0,4));
- int month = Integer.parseInt(s.substring(5,7));
- int day = Integer.parseInt(s.substring(8,10));
-
- long serialDate = (1461 * (year + 4800 + (month - 14) / 12)) / 4 +
- (367 * (month - 2 - 12 * ((month - 14) / 12))) / 12 -
- (3 * ((year + 4900 + (month - 14) / 12)) / 100) / 4 +
- day - 2415019 - 32075;
-
- return serialDate;
- }
-
- /**
- * Excel times are a fraction of a 24 hour day expressed in seconds. This method converts
- * to this time.
- *
- * @param s String representing a time in the form ??HH?MM?SS?
- * @return The excel serial time
- */
- public double toExcelSerialTime(String s) throws IOException {
-
- int hours = Integer.parseInt(s.substring(2,4));
- int mins = Integer.parseInt(s.substring(5,7));
- int secs = Integer.parseInt(s.substring(8,10));
-
- int timeSecs = (hours*3600) + (mins*60) + (secs);
-
- double d = (double) timeSecs / (24 * 3600);
-
- return d;
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java
deleted file mode 100644
index b398e1bf519c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/LabelCell.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Reperesent a BIFF Record descibing a cell containing a string
- */
-public class LabelCell extends CellValue {
-
- private byte[] cch = new byte[2];
- private byte[] rgch;
-
- /**
- * Constructs a <code>LabelCell</code> using specified attributes
- *
- * @param row row number
- * @param col column number
- * @param cellContents contents of the cell
- * @param ixfe font index
- */
- public LabelCell(int row, int column, String cellContents, int ixfe)
- throws IOException {
-
- setLabel(cellContents);
- setRow(row);
- setCol(column);
- setIxfe(ixfe);
- }
-
- /**
- * Reads a LabelCell from the <code>InputStream</code>
- *
- * @param is the <code>Inputstream</code> to read from
- */
- public LabelCell(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Writes a <code>LabelCell</code> to the specified <code>Outputstream</code>
- *
- * @param os the <code>OutputStream</code> to write to
- */
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
-
- super.write(output);
-
- output.write(cch);
- output.write(rgch);
-
- Debug.log(Debug.TRACE,"Writing Label record");
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>LabelCell</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.LABEL_CELL;
- }
-
- /**
- * Reads a<code>LabelCell</code> from the specified <code>InputStream</code>
- *
- * @param input the <code>InputStram</code> to read from
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = super.read(input);
-
- numOfBytesRead += input.read(cch);
-
- int strLen = EndianConverter.readShort(cch)*2;
- rgch = new byte[strLen];
- input.read(rgch, 0, strLen);
-
- Debug.log(Debug.TRACE, " cch : " + EndianConverter.readShort(cch) +
- " rgch : " + new String(rgch, "UTF-16LE"));
-
- return numOfBytesRead;
- }
-
-
- /**
- * Gets the <code>String</code> representing the cells contents
- *
- * @return the <code>String</code> representing the cells contents
- */
- public String getString() throws IOException {
- return (new String(rgch,"UTF-16LE"));
- }
-
- /**
- * Sets the <code>String</code> representing the cells contents
- *
- * @return the <code>String</code> representing the cells contents
- */
- private void setLabel(String cellContents) throws IOException {
- rgch = cellContents.getBytes("UTF-16LE");
- cch = EndianConverter.writeShort((short)cellContents.length());
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java
deleted file mode 100644
index e226ebad0203..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/NumberFormat.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Represents a BIFF Record describing a number format
- */
-public class NumberFormat implements BIFFRecord {
-
- private byte cce;
- private byte[] rgch;
-
- /**
- * Constructs a NumberFormat Record from the <code>InputStream</code>
- *
- * @param is InputStream containing the record data
- */
- public NumberFormat(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>NumberFormat</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.NUMBER_FORMAT;
- }
-
- /**
- * Reads the NumberFormat from the <code>InputStream</code> Byte array
- * containg strings are doubled in length becuse they use unicode
- *
- * @return the total number of bytes read
- */
- public int read(InputStream input) throws IOException {
-
- cce = (byte) input.read();
- int numOfBytesRead = 1;
-
- rgch = new byte[cce*2];
- numOfBytesRead += input.read(rgch, 0, cce*2);
-
- Debug.log(Debug.TRACE, "\tcce : "+ cce +
- " rgch : " + new String(rgch,"UTF-16LE"));
-
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(cce);
- output.write(rgch);
-
- Debug.log(Debug.TRACE,"Writing NumberFormat record");
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java
deleted file mode 100644
index 7af0a11e800e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Pane.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.awt.Point;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-import org.openoffice.xmerge.converter.xml.sxc.SheetSettings;
-
-/**
- * Represents a BIFF Record that describes the number and position of unfrozen
- * panes.
- */
-public class Pane implements BIFFRecord {
-
- private byte[] x = new byte[2];
- private byte[] y = new byte[2];
- private byte[] rwTop = new byte[2];
- private byte[] colLeft = new byte[2];
- private byte pnnAcct;
-
- /**
- * Default Constructor
- */
- public Pane() {
- pnnAcct = (byte) 0x02; // Default setting
- }
-
- /**
- * Constructs a Pane Record from the <code>InputStream</code>
- *
- * @param is InputStream containing a Pane record
- */
- public Pane(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Pane</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.PANE_INFO;
- }
-
- /**
- * Gets the split point for this pane, in the case of splits this will be
- * in twips.
- *
- * @return the split point
- */
- public Point getSplitPoint() {
-
- int xTwips = EndianConverter.readShort(x)/11;
- int yTwips = EndianConverter.readShort(y)/15;
- return (new Point(xTwips, yTwips));
- }
-
- /**
- * Gets the freeze point for this pane, in the case of freezes this will
- * be a zero-based index to either the column or row.
- *
- * @return the freeze point
- */
- public Point getFreezePoint() {
-
- return (new Point(EndianConverter.readShort(x),
- EndianConverter.readShort(y)));
- }
-
- /**
- * Sets the split point for this pane, coordinates are in column row units
- * if the split type is freeze or twips if split type is split.
- *
- * @param splitType contains the X and Y split types (freeze or split)
- * @param p the split point
- */
- public void setSplitPoint(Point splitType, Point p) {
-
- if(splitType.getX()==SheetSettings.SPLIT
- || splitType.getY()==SheetSettings.SPLIT) {
- int yTwips = (int) p.getY();
- short yPxl = (short) (yTwips * 15);
- y = EndianConverter.writeShort(yPxl);
- int xTwips = (int) p.getX();
- short xPxl = (short) (xTwips * 11);
- x = EndianConverter.writeShort(xPxl);
- } else {
- y = EndianConverter.writeShort((short) p.getY());
- x = EndianConverter.writeShort((short) p.getX());
- }
-
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Pane</code>
- */
- public void setPaneNumber(int paneNumber) {
- pnnAcct = (byte) paneNumber;
- }
-
- /**
- * Get the pane number of the active pane
- * 0 - bottom right, 1 - top right
- * 2 - bottom left, 3 - top left
- *
- * @return the hex code for <code>Pane</code>
- */
- public int getPaneNumber() {
- return pnnAcct;
- }
-
- /**
- * Set the top row visible in the lower pane
- *
- * @param top 0-based inex of the top row
- */
- public void setTop(int top) {
- rwTop = EndianConverter.writeShort((short)top);
- }
-
- /**
- * Set leftmost column visible in the right pane
- *
- * @param left 0-based index of the leftmost column
- */
- public void setLeft(int left) {
- colLeft = EndianConverter.writeShort((short)left);
- }
-
- /**
- * Get the top row visible in the lower pane
- *
- * @return the hex code for <code>Pane</code>
- */
- public int getTop() {
- return EndianConverter.readShort(rwTop);
- }
-
- /**
- * Get leftmost column visible in the right pane
- *
- * @return 0-based index of the column
- */
- public int getLeft() {
- return EndianConverter.readShort(colLeft);
- }
-
-
- /**
- * Reads a <code>Pane</code> record from the <code>InputStream</code>
- *
- * @param input <code>InputStream</code> to read from
- * @return the total number of bytes read
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(x);
- numOfBytesRead += input.read(y);
- numOfBytesRead += input.read(rwTop);
- numOfBytesRead += input.read(colLeft);
- pnnAcct = (byte) input.read();
- numOfBytesRead++;
-
- Debug.log(Debug.TRACE, "\tx : "+ EndianConverter.readShort(x) +
- " y : " + EndianConverter.readShort(y) +
- " rwTop : " + EndianConverter.readShort(rwTop) +
- " colLeft : " + EndianConverter.readShort(colLeft) +
- " pnnAcct : " + pnnAcct);
-
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(x);
- output.write(y);
- output.write(rwTop);
- output.write(colLeft);
- output.write(pnnAcct);
-
- Debug.log(Debug.TRACE,"Writing Pane record");
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java
deleted file mode 100644
index 5e5ce6ce74df..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Row.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Represents s BIFF Record that describes the format of a column
- */
-public class Row implements BIFFRecord {
-
- private byte[] rw = new byte[2];
- private byte[] miyRw = new byte[2];
- private byte[] grbit = new byte[2];
- private byte[] ixfe = new byte[2];
- private float scale = (float) 1;
-
- /**
- * Constructs a pocket Excel Document from the
- * <code>InputStream</code> and assigns it the document name passed in
- *
- * @param rw Zero based row number
- * @param miyRw row height
- */
- public Row(int rw, int miyRw, boolean userDefined) {
- this.rw = EndianConverter.writeShort((short) rw);
- miyRw *= scale;
- this.miyRw = EndianConverter.writeShort((short) miyRw);
- if(userDefined) {
- grbit = EndianConverter.writeShort((short) 2);
- } else {
- grbit = EndianConverter.writeShort((short) 0);
- }
- ixfe = EndianConverter.writeShort((short) 0);
- }
-
- /**
- * Constructs a Row fro man <code>InputStream</code>
- *
- * @param is InputStream containing a Pane Record
- */
- public Row(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Row</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.ROW_DESCRIPTION;
- }
-
- /**
- * Get the height of this row
- *
- * @return the height of this row
- */
- public short getRowHeight() {
- return EndianConverter.readShort(miyRw);
- }
-
- /**
- * Get the rown number for this style
- *
- * @return the row this style applies to
- */
- public short getRowNumber() {
- return EndianConverter.readShort(rw);
- }
-
- /**
- * Reads a Row from an <code>InputStream</code>
- *
- * @param is InputStream containing a Pane Record
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(rw);
- numOfBytesRead += input.read(miyRw);
- short scaledHeight = (short) (EndianConverter.readShort(miyRw) / scale);
- miyRw = EndianConverter.writeShort(scaledHeight);
- numOfBytesRead += input.read(grbit);
- numOfBytesRead += input.read(ixfe);
-
- Debug.log(Debug.TRACE,"\trw : "+ EndianConverter.readShort(rw) +
- " miyRw : " + EndianConverter.readShort(miyRw) +
- " grbit : " + EndianConverter.readShort(grbit) +
- " ixfe : " + EndianConverter.readShort(ixfe));
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(rw);
- output.write(miyRw);
- output.write(grbit);
- output.write(ixfe);
-
- Debug.log(Debug.TRACE,"Writing Row record");
-
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java
deleted file mode 100644
index dac0c2986a14..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Selection.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.awt.Point;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Represents a BIFF Record that describes the selected area of a worksheet
- */
-public class Selection implements BIFFRecord {
-
- private byte[] rwTop = new byte[2];
- private byte colLeft;
- private byte[] rwBottom = new byte[2];
- private byte colRight;
- private byte[] rwActive = new byte[2];
- private byte colActive;
-
- /**
- * Default Constructor
- */
- public Selection() {
- this.rwTop = EndianConverter.writeShort((short) 0);
- this.colLeft = 0;
- this.rwBottom = EndianConverter.writeShort((short) 0);
- this.colRight = 0;
- this.rwActive = EndianConverter.writeShort((short) 0);
- this.colActive = 0;
-
- }
-
- /**
- * Constructs a Selection Record from the <code>InputStream</code>
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public Selection(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Selection</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.CURRENT_SELECTION;
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Selection</code>
- */
- public Point getActiveCell() {
- Point p = new Point(colActive, EndianConverter.readShort(rwActive));
- return p;
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Selection</code>
- */
- public void setActiveCell(Point p) {
-
- colActive = (byte) p.getX();
- rwActive = EndianConverter.writeShort((short) p.getY());
- }
-
- /**
- * Reads a Selection Record from the <code>InputStream</code>
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(rwTop);
- colLeft += (byte) input.read();
- numOfBytesRead += input.read(rwBottom);
- colRight += (byte) input.read();
- numOfBytesRead += input.read(rwActive);
- colActive += (byte) input.read();
- numOfBytesRead += 3;
-
- Debug.log(Debug.TRACE,"\trwTop : "+ EndianConverter.readShort(rwTop) +
- " colLeft : " + colLeft +
- " rwBottom : " + EndianConverter.readShort(rwBottom) +
- " colRight : "+ colRight +
- " rwActive : " + EndianConverter.readShort(rwActive) +
- " colActive : " + colActive);
-
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(rwTop);
- output.write(colLeft);
- output.write(rwBottom);
- output.write(colRight);
- output.write(rwActive);
- output.write(colActive);
-
- Debug.log(Debug.TRACE,"Writing Selection record");
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java
deleted file mode 100644
index 540d1d8e6ad1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Represents a BIFF Record that describes the value of a formula that
- * evaluates to a string
- */
-public class StringValue implements BIFFRecord {
-
- private byte[] cch = new byte[2];
- private byte[] rgch;
-
- /**
- * Constructs a StringValue Record from an <code>InputStream</code>
- *
- * @param is InputStream containing a StringValue Record
- */
- public StringValue(String str) throws IOException {
- cch = EndianConverter.writeShort((short) str.length());
- rgch = new byte[str.length()];
- rgch = str.getBytes("UTF-16LE");
- }
-
- /**
- * Constructs a StringValue Record from an <code>InputStream</code>
- *
- * @param is InputStream containing a StringValue Record
- */
- public StringValue(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>StringValue</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.FORMULA_STRING;
- }
-
- /**
- * Reads a StringVlaue Record from an <code>InputStream</code>
- *
- * @param is InputStream containing a StringValue Record
- */
- public int read(InputStream input) throws IOException {
-
- cch[0] = (byte) input.read();
- cch[1] = (byte) input.read();
- int numOfBytesRead = 1;
-
- int strlen = EndianConverter.readShort(cch)*2;
- rgch = new byte[strlen];
- numOfBytesRead += input.read(rgch, 0, strlen);
-
- Debug.log(Debug.TRACE,"\tcch : "+ cch +
- " rgch : " + rgch);
-
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(cch);
- output.write(rgch);
-
- Debug.log(Debug.TRACE,"Writing StringValue record");
- }
-
- /**
- * Gets the <code>String</code> representing the cells contents
- *
- * @return the <code>String</code> representing the cells contents
- */
- public String getString() throws IOException {
- String name;
-
- try {
- name = new String(rgch, "UTF-16LE");
- } catch (UnsupportedEncodingException e){
- name = "unknown";
- }
- return name;
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java
deleted file mode 100644
index 3acfd9ec2011..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/UnsupportedFormulaException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.lang.Exception;
-
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * At the moment any functions within a formula will result in this exception
- * being thrown.
- */
-public class UnsupportedFormulaException extends Exception {
-
- public UnsupportedFormulaException(String message){
- super(message);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java
deleted file mode 100644
index c1c1d6ba44c0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window1.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * Represents a BIFF REcord that describes workbook window attributes
- */
-public class Window1 implements BIFFRecord {
-
- private byte[] grbit = new byte[2];
- private byte[] itabCur = new byte[2]; // index of selected worksheet
-
- /**
- * Constructor
- */
- public Window1() {
- grbit = EndianConverter.writeShort((short) 0);
- itabCur = EndianConverter.writeShort((short) 0);
- }
-
- /**
- * Constructs a Window1 Record from an <code>InputStream</code>
- *
- * @param is InputStream containing a Window1 Record
- */
- public Window1(InputStream is) throws IOException{
- read(is);
- }
-
- /**
- * Set the number of the active sheet
- *
- * @param activeSheet number of the active sheet
- */
- public void setActiveSheet(int activeSheet) {
- itabCur = EndianConverter.writeShort((short) activeSheet);
- }
-
- /**
- * Get the number of the active sheet
- *
- * @return number of the active sheet
- */
- public int getActiveSheet() {
- return EndianConverter.readShort(itabCur);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Window1</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.WINDOW_INFO;
- }
-
- /**
- * Reads a Window1 Record from an <code>InputStream</code>
- *
- * @param is InputStream containing a Window1 Record
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(grbit);
- numOfBytesRead += input.read(itabCur);
-
- Debug.log(Debug.TRACE,"\tgrbit : "+ EndianConverter.readShort(grbit) +
- " itabCur : " + EndianConverter.readShort(itabCur));
-
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(grbit);
- output.write(itabCur);
-
- Debug.log(Debug.TRACE,"Writing Window1 record");
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java
deleted file mode 100644
index 3595c1b47d37..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Window2.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.DataInputStream;
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.awt.Point;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-import org.openoffice.xmerge.converter.xml.sxc.SheetSettings;
-
-
-/**
- * Represents a BIFF Record that describes worksheet window attributes
- */
-public class Window2 implements BIFFRecord {
-
- private final static int FROZEN = 0x08;
- private final static int NOSPLIT = 0x01;
-
- private byte[] rwTop = new byte[2];
- private byte colLeft;
- private byte[] grbit = new byte[2];
-
- /**
- * Constructor
- */
- public Window2() {
- this.rwTop = EndianConverter.writeShort((short) 0);
- this.colLeft = 0;
- this.grbit = EndianConverter.writeShort((short) 0);
- }
-
- /**
- * Constructs a Window2 Record from an <code>InputStream</code>
- *
- * @param is InputStream containing a Window2 Record
- */
- public Window2(InputStream is) throws IOException {
- read(is);
- }
-
- /**
- * Get the hex code for this particular <code>BIFFRecord</code>
- *
- * @return the hex code for <code>Window2</code>
- */
- public short getBiffType() {
- return PocketExcelConstants.SHEET_WINDOW_INFO;
- }
-
- /**
- * Sets the split type for this pane, the split type is the same for both
- * x and y so we only test against one.
- *
- * @param splitType the split type based on types defined in
- * <code>sheetSettings</code>
- */
- public void setSplitType(Point splitType) {
- if(splitType.getX()==SheetSettings.SPLIT) {
- grbit[0] &= ~FROZEN;
- grbit[1] &= ~NOSPLIT;
- } else {
- grbit[0] |= FROZEN;
- grbit[1] |= NOSPLIT;
- }
- }
-
- /**
- * This method tests if this object describes a freeze
- *
- * @return true if freeze otherwise false
- */
- public boolean isFrozen() {
- if((grbit[0] & FROZEN) != FROZEN)
- return false;
-
- if((grbit[1] & NOSPLIT) != NOSPLIT)
- return false;
-
- return true;
- }
-
- /**
- * This method tests if this object describes a split
- *
- * @return true if split otherwise false
- */
- public boolean isSplit() {
- if((grbit[0] & FROZEN) == FROZEN)
- return false;
-
- if((grbit[1] & NOSPLIT) == NOSPLIT)
- return false;
-
- return true;
- }
-
- /**
- * Reads a Window2 Record from an <code>InputStream</code>
- *
- * @param is InputStream containing a Window2 Record
- */
- public int read(InputStream input) throws IOException {
-
- int numOfBytesRead = input.read(rwTop);
- colLeft = (byte) input.read();
- numOfBytesRead++;
- numOfBytesRead += input.read(grbit);
-
- Debug.log(Debug.TRACE,"\trwTop : "+ EndianConverter.readShort(rwTop) +
- " colLeft : " + colLeft +
- " grbit : " + EndianConverter.readShort(grbit));
- return numOfBytesRead;
- }
-
- public void write(OutputStream output) throws IOException {
-
- output.write(getBiffType());
- output.write(rwTop);
- output.write(colLeft);
- output.write(grbit);
-
- Debug.log(Debug.TRACE,"Writing Window2 record");
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java
deleted file mode 100644
index 70068253f7cf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Workbook.java
+++ /dev/null
@@ -1,540 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxc.Format;
-import org.openoffice.xmerge.converter.xml.sxc.NameDefinition;
-import org.openoffice.xmerge.converter.xml.sxc.BookSettings;
-import org.openoffice.xmerge.converter.xml.sxc.SheetSettings;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.IntArrayList;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-import org.openoffice.xmerge.converter.xml.sxc.ColumnRowInfo;
-
-/**
- * This class is used by <code> PxlDocument</code> to maintain pexcel
- * workbooks.
- *
- * @author Martin Maher
- */
-public class Workbook implements org.openoffice.xmerge.Document,
-OfficeConstants {
-
- private Vector fonts = new Vector();
- private Vector extendedFormats = new Vector();
- private Vector worksheets = new Vector();
- private Vector boundsheets = new Vector();
- private Vector definedNames = new Vector();
- private static final CodePage cp;
- private static final Window1 win1;
- private static final BeginningOfFile bof;;
- private static final Eof eof;
- private String fileName;
-
- static {
- cp = new CodePage();
- win1 = new Window1();
- bof = new BeginningOfFile(true);
- eof = new Eof();
- }
-
-
- /**
- * Constructs a pocket Excel Workbook with the name of the file passed in
- * as an argument. Also fills out a basic header block containing the
- * minimum number of objects that can be created at this time.
- *
- * @param name Name of the Pocket Excel Data file. (excluding the file
- * extension)
- */
- public Workbook(String name) throws IOException {
- fileName = name + PocketExcelConstants.FILE_EXTENSION;
- Format defaultFormat = new Format();
- FontDescription fd = new FontDescription(defaultFormat);
- fonts.add(fd);
- ExtendedFormat xf = new ExtendedFormat(0, defaultFormat);
- extendedFormats.add(xf);
- }
-
- /**
- * Constructs a pocket Excel Workbook from the
- * <code>InputStream</code> and assigns it the document name passed in
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public Workbook(String name, InputStream is) throws IOException {
- read(is);
- fileName = name;
- }
-
- /**
- * Writes the current workbook to the <code>Outputstream</code>
- *
- * @param os The destination outputstream
- */
- public void write(OutputStream os) throws IOException {
- bof.write(os);
- cp.write(os);
- for(Enumeration e = definedNames.elements();e.hasMoreElements();) {
- DefinedName dn = (DefinedName) e.nextElement();
- dn.write(os);
- }
- win1.write(os);
- for(Enumeration e = fonts.elements();e.hasMoreElements();) {
- FontDescription fd = (FontDescription) e.nextElement();
- fd.write(os);
- }
- for(Enumeration e = extendedFormats.elements();e.hasMoreElements();) {
- ExtendedFormat xf = (ExtendedFormat) e.nextElement();
- xf.write(os);
- }
- for(Enumeration e = boundsheets.elements();e.hasMoreElements();) {
- BoundSheet bs = (BoundSheet) e.nextElement();
- bs.write(os);
- }
- eof.write(os);
-
- for(Enumeration e = worksheets.elements();e.hasMoreElements();) {
- Worksheet ws = (Worksheet) e.nextElement();
- ws.write(os);
- }
- }
-
- /**
- * Reads a workbook from the <code>InputStream</code> and contructs a
- * workbook object from it
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public void read(InputStream is) throws IOException {
-
- boolean done = false;
-
- int b = 0;
- while (!done)
- {
- b = is.read();
- if (b == -1)
- {
- Debug.log(Debug.TRACE,"End of file reached");
- break;
- }
-
- switch (b)
- {
- case PocketExcelConstants.DEFINED_NAME:
- Debug.log(Debug.TRACE,"NAME: Defined Name (18h)");
- DefinedName dn = new DefinedName(is, this);
- definedNames.add(dn);
- break;
-
- case PocketExcelConstants.BOF_RECORD:
- Debug.log(Debug.TRACE,"BOF Record");
- bof.read(is);
- break;
-
- case PocketExcelConstants.EOF_MARKER:
- Debug.log(Debug.TRACE,"EOF Marker");
- eof.read(is);
- Worksheet ws = new Worksheet(this);
- while(ws.read(is)) {
- worksheets.add(ws);
- ws = new Worksheet(this);
- }
- break;
-
- case PocketExcelConstants.FONT_DESCRIPTION:
- Debug.log(Debug.TRACE,"FONT: Font Description (31h)");
- FontDescription fd = new FontDescription(is);
- fonts.add(fd);
- break;
-
- case PocketExcelConstants.WINDOW_INFO:
- Debug.log(Debug.TRACE,"WINDOW1: Window Information (3Dh) [PXL 2.0]");
- win1.read(is);
- break;
-
- case PocketExcelConstants.CODEPAGE:
- Debug.log(Debug.TRACE,"CODEPAGE : Codepage and unknown fields (42h)");
- cp.read(is);
- break;
-
- case PocketExcelConstants.BOUND_SHEET:
- Debug.log(Debug.TRACE,"BOUNDSHEET: Sheet Information (85h)");
- BoundSheet bs = new BoundSheet(is);
- boundsheets.add(bs);
- break;
-
- case PocketExcelConstants.EXTENDED_FORMAT:
- Debug.log(Debug.TRACE,"XF: Extended Format (E0h) [PXL 2.0]");
- ExtendedFormat xf = new ExtendedFormat(is);
- extendedFormats.add(xf);
- break;
-
- default:
- b = is.read();
- break;
- }
-
- }
- is.close();
- }
-
- /**
- * Adds a font recrod to the workbook
- *
- * @param f the font record to add
- */
- public int addFont(FontDescription f) {
-
- boolean alreadyExists = false;
- int i = 0;
-
- for(Enumeration e = fonts.elements();e.hasMoreElements();) {
- FontDescription fd = (FontDescription) e.nextElement();
- if(fd.compareTo(f)) {
- alreadyExists = true;
- break;
- } else {
- i++;
- }
- }
-
- if(!alreadyExists)
- fonts.add(f);
-
- return i;
- }
-
- /**
- * Adds a ExtendedFormat record to the workbook
- *
- * @param f the font recrod to add
- */
- public int addExtendedFormat(Format fmt) throws IOException {
-
- FontDescription fd = new FontDescription(fmt);
- int ixfnt = addFont(fd);
- ExtendedFormat xf = new ExtendedFormat(ixfnt, fmt);
-
- boolean alreadyExists = false;
- int i = 0;
-
- for(Enumeration e = extendedFormats.elements();e.hasMoreElements();) {
- ExtendedFormat currentXF = (ExtendedFormat) e.nextElement();
- if(xf.compareTo(currentXF)) {
- alreadyExists = true;
- break;
- } else if(!alreadyExists) {
- i++;
- }
- }
-
- if(!alreadyExists)
- extendedFormats.add(xf);
-
- return i;
- }
-
- /**
- * Gets a worksheet at a particular index from mthe current workbook.
- *
- * @param index the index of the worksheet to retrieve
- */
- public Worksheet getWorksheet(int index) {
-
- return ((Worksheet) worksheets.elementAt(index));
- }
-
- /**
- * Returns a FontDescription indictated by the
- * index parameter passed in to the method
- *
- * @param ixfnt index to the FontDescriptions, this is a 0 based index
- * @return FontDescription indexed by ixfe
- */
- public FontDescription getFontDescription(int ixfnt) {
-
- return (FontDescription) fonts.elementAt(ixfnt);
- }
-
- /**
- * Returns a ExtendedFormat indictated by the
- * index parameter passed in to the method
- *
- * @param ixfe index to the FontDescriptions, this is a 0 based index
- * @return FontDescription indexed by ixfe
- */
- public ExtendedFormat getExtendedFormat(int ixfe) {
-
- return (ExtendedFormat) extendedFormats.elementAt(ixfe);
- }
-
- /**
- * Returns an enumeration of DefinedNames for this workbook
- *
- * @return Enumeration for the DefinedNames
- */
- public Enumeration getDefinedNames() {
-
- return definedNames.elements();
- }
-
- /**
- * Returns an enumeration of <code>Settings</code> for this workbook
- *
- * @return Enumeration of <code>Settings</code>
- */
- public BookSettings getSettings() {
-
- Vector settingsVector = new Vector();
- int index = 0;
- for(Enumeration e = worksheets.elements();e.hasMoreElements();) {
- Worksheet ws = (Worksheet) e.nextElement();
- SheetSettings s = ws.getSettings();
- s.setSheetName(getSheetName(index++));
- settingsVector.add(s);
- }
- BookSettings bs = new BookSettings(settingsVector);
- String activeSheetName = getSheetName(win1.getActiveSheet());
- bs.setActiveSheet(activeSheetName);
- return bs;
- }
-
- /**
- * Returns a <code>Vector</code> containing all the worksheet Names
- *
- * @return a <code>Vector</code> containing all the worksheet Names
- */
- public Vector getWorksheetNames() {
-
- Vector wsNames = new Vector();
-
- for(int i = 0;i < boundsheets.size();i++) {
- wsNames.add(getSheetName(i));
- }
-
- return wsNames;
- }
-
- /**
- * Returns the name of the worksheet at the specified index
- *
- * @return a <code>String</code> containing the name of the worksheet
- */
- public String getSheetName(int index) {
- BoundSheet bs = (BoundSheet) boundsheets.elementAt(index);
-
- return bs.getSheetName();
- }
-
- /**
- * Adds a <code>Worksheet</code> to the workbook.
- *
- * @return name the name of the <code>Worksheet</code> to be added
- */
- public void addWorksheet(String name) throws IOException {
-
- BoundSheet bs = new BoundSheet(name);
- boundsheets.add(bs);
-
- Worksheet ws = new Worksheet();
- worksheets.add(ws);
- }
-
- /**
- * Adds a cell to the current worksheet.
- *
- * @return the name of the <code>Worksheet</code> to be added
- */
- public void addCell(int row,int col, Format fmt, String cellContents)
- throws IOException {
-
- Worksheet currentWS = (Worksheet) worksheets.elementAt(worksheets.size()-1);
- int ixfe = addExtendedFormat(fmt);
-
- String category = fmt.getCategory();
-
- // Now the formatting is out of the way add the cell
- Debug.log(Debug.TRACE,"Cell Format: " + fmt);
- Debug.log(Debug.TRACE,"Row : " + row);
- Debug.log(Debug.TRACE,"Col : " + col);
- if(cellContents.startsWith("=")) {
- try {
- Formula f = new Formula(row, col, cellContents, ixfe, fmt, this);
- currentWS.addCell(f);
- if(category.equalsIgnoreCase(CELLTYPE_STRING)) {
- StringValue sv = new StringValue(fmt.getValue());
- currentWS.addCell(sv);
- }
- } catch(Exception e) {
- Debug.log(Debug.TRACE, "Parsing Exception thrown : " + e.getMessage());
- BoolErrCell errorCell = new BoolErrCell(row, col, ixfe, 0x2A, 1);
- currentWS.addCell(errorCell);
- }
- } else if(category.equalsIgnoreCase(OfficeConstants.CELLTYPE_FLOAT)) {
- try {
- FloatNumber num = new FloatNumber(row, col, cellContents, ixfe);
- currentWS.addCell(num);
- } catch(Exception e) {
- Debug.log(Debug.TRACE,"Error could not parse Float " + cellContents);
- LabelCell lc = new LabelCell(row, col, cellContents, ixfe);
- currentWS.addCell(lc);
- }
- } else {
- if(cellContents.length()==0) {
- Debug.log(Debug.TRACE, "Blank Cell");
- BlankCell b = new BlankCell(row, col, ixfe);
- currentWS.addCell(b);
- } else {
- Debug.log(Debug.TRACE, "Label Cell : " + cellContents);
- LabelCell lc = new LabelCell(row, col, cellContents, ixfe);
- currentWS.addCell(lc); // three because we assume the last three
- // Records in any worksheet is the selection,
- // window2 and eof Records
- }
- }
- }
-
- /**
- * Will create a number of ColInfo records based on the column widths
- * based in.
- *
- * @param columnRows <code>Vector</code> of <code>ColumnRowInfo</code>
- */
- public void addColInfo(Vector columnRows) throws IOException {
-
- Worksheet currentWS = (Worksheet) worksheets.elementAt(worksheets.size()-1);
-
- int nCols = 0;
- int nRows = 0;
-
- Debug.log(Debug.TRACE,"Workbook: addColInfo()");
- for(Enumeration e = columnRows.elements();e.hasMoreElements();) {
- ColumnRowInfo cri =(ColumnRowInfo) e.nextElement();
- int ixfe = 0;
- int size = cri.getSize();
- int repeated = cri.getRepeated();
- if(cri.isColumn()) {
- Debug.log(Debug.TRACE,"Workbook: adding ColInfo width = " + size);
- ColInfo newColInfo = new ColInfo( nCols,
- nCols+repeated-1,
- size, ixfe);
- currentWS.addCol(newColInfo);
- nCols += repeated;
- } else if(cri.isRow()) {
-
- Debug.log(Debug.TRACE,"Workbook: adding Row Height = " + size);
- if(!cri.isDefaultSize()) {
- for(int i=0;i<repeated;i++) {
- Row newRow = new Row(nRows++, size, cri.isUserDefined());
- currentWS.addRow(newRow);
- }
- } else {
- // If it is the Default Row we don't need to add it
- nRows += repeated;
- }
-
- }
- }
- }
-
- /**
- * Will create a number of ColInfo recrods based on the column widths
- * based in.
- *
- * @param an integer list representing the column widths
- */
- public void addNameDefinition(NameDefinition nameDefinition) throws IOException {
-
- DefinedName dn = new DefinedName(nameDefinition, this);
- definedNames.add(dn);
- }
-
- /**
- * Adds the <code>BookSettings</code> for this workbook.
- *
- * @param book the <code>BookSettings</code> to add
- */
- public void addSettings(BookSettings book) throws IOException {
-
- int index = 0;
- Vector sheetSettings = book.getSheetSettings();
- String activeSheetName = book.getActiveSheet();
-
- for(Enumeration e = worksheets.elements();e.hasMoreElements();) {
- Worksheet ws = (Worksheet) e.nextElement();
- String name = getSheetName(index++);
- if(activeSheetName.equals(name)) {
- win1.setActiveSheet(index-1);
- }
- for(Enumeration eSettings = sheetSettings.elements();eSettings.hasMoreElements();) {
- SheetSettings s = (SheetSettings) eSettings.nextElement();
- if(name.equals(s.getSheetName())) {
- ws.addSettings(s);
- }
- }
- }
- }
-
- /**
- * Return the filename of the pxl document without the file extension
- *
- * @return filename without the file extension
- */
- public String getName() {
-
- // We have to strip off the file extension
- int end = fileName.lastIndexOf(".");
- String name;
- if( end >= 0) // check in case the filename is already stripped
- name = fileName.substring(0, end);
- else
- name = fileName;
-
- return name;
- }
-
- /**
- * Returns the filename of the pxl document with the file extension
- *
- * @return filename with the file extension
- */
- public String getFileName() {
-
- return fileName;
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java
deleted file mode 100644
index 722cc7ccd0fb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/Worksheet.java
+++ /dev/null
@@ -1,320 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
-
-import java.io.OutputStream;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Vector;
-import java.util.Enumeration;
-import java.awt.Point;
-
-import org.openoffice.xmerge.util.IntArrayList;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.converter.xml.sxc.SheetSettings;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
-
-
-/**
- * This class is used by <code>PxlDocument</code> to maintain pexcel
- * worksheets.
- *
- * @author Martin Maher
- */
-public class Worksheet {
-
- private String name;
- private Workbook wb;
- private Vector rows = new Vector();
- private Vector colInfo = new Vector();
- private Vector cells = new Vector();
- private DefColWidth dcw = new DefColWidth();
- private DefRowHeight drh = new DefRowHeight();
- private Window2 win2 = new Window2();
- private Selection sel = new Selection();
- private Pane p = new Pane();
- private BeginningOfFile bof;
- private Eof eof;
-
- /**
- * Writes the current workbook to the <code>Outputstream</code>
- *
- * @param os The destination outputstream
- */
- public Worksheet(Workbook wb) {
- this.wb = wb;
- }
-
- /**
- * Default Contructor
- *
- * @param os The destination outputstream
- */
- public Worksheet() {
- }
-
- /**
- * Writes the current workbook to the <code>Outputstream</code>
- *
- * @param os The destination outputstream
- */
- public void write(OutputStream os) throws IOException {
-
- bof = new BeginningOfFile(false);
- bof.write(os);
- dcw.write(os);
- for(Enumeration e = colInfo.elements();e.hasMoreElements();) {
- ColInfo ci = (ColInfo) e.nextElement();
- ci.write(os);
- }
- drh.write(os);
- for(Enumeration e = rows.elements();e.hasMoreElements();) {
- Row rw = (Row) e.nextElement();
- rw.write(os);
- }
- for(Enumeration e = cells.elements();e.hasMoreElements();) {
- BIFFRecord cv = (BIFFRecord) e.nextElement();
- cv.write(os);
- }
- win2.write(os);
- p.write(os);
- sel.write(os);
- eof = new Eof();
- eof.write(os);
- }
-
- /**
- * Reads a worksheet from the <code>InputStream</code> and contructs a
- * workbook object from it
- *
- * @param is InputStream containing a Pocket Excel Data file.
- */
- public boolean read(InputStream is) throws IOException {
-
- int b = is.read();
-
- if (b==-1)
- return false;
-
- while(b!=-1) {
- switch (b)
- {
- case PocketExcelConstants.BLANK_CELL:
- Debug.log(Debug.TRACE,"Blank Cell (01h)");
- BlankCell bc = new BlankCell(is);
- cells.add(bc);
- break;
-
- case PocketExcelConstants.NUMBER_CELL:
- Debug.log(Debug.TRACE,"NUMBER: Cell Value, Floating-Point Number (03h)");
- FloatNumber fn = new FloatNumber(is);
- cells.add(fn);
- break;
-
- case PocketExcelConstants.LABEL_CELL:
- Debug.log(Debug.TRACE,"LABEL: Cell Value, String Constant (04h)");
- LabelCell lc = new LabelCell(is);
- cells.add(lc);
- break;
-
- case PocketExcelConstants.BOOLERR_CELL:
- Debug.log(Debug.TRACE,"BOOLERR: Cell Value, Boolean or Error (05h)");
- BoolErrCell bec = new BoolErrCell(is);
- break;
-
- case PocketExcelConstants.FORMULA_CELL:
- Debug.log(Debug.TRACE,"FORMULA: Cell Formula (06h)");
- Formula f = new Formula(is, wb);
- cells.add(f);
- break;
-
- case PocketExcelConstants.FORMULA_STRING:
- Debug.log(Debug.TRACE,"String Value of a Formula (07h)");
- StringValue sv = new StringValue(is);
- break;
-
- case PocketExcelConstants.ROW_DESCRIPTION:
- Debug.log(Debug.TRACE,"ROW: Describes a Row (08h)");
- Row rw = new Row(is);
- rows.add(rw);
- break;
-
- case PocketExcelConstants.BOF_RECORD:
- Debug.log(Debug.TRACE,"BOF Record");
- bof = new BeginningOfFile(is);
- break;
-
- case PocketExcelConstants.EOF_MARKER:
- Debug.log(Debug.TRACE,"EOF Marker");
- eof = new Eof();
- return true;
-
- case PocketExcelConstants.CURRENT_SELECTION:
- Debug.log(Debug.TRACE,"SELECTION: Current Selection (1Dh)");
- sel = new Selection(is);
- break;
-
- case PocketExcelConstants.NUMBER_FORMAT:
- Debug.log(Debug.TRACE,"FORMAT: Number Format (1Eh)");
- NumberFormat nf = new NumberFormat(is);
- break;
-
- case PocketExcelConstants.DEFAULT_ROW_HEIGHT:
- Debug.log(Debug.TRACE,"DEFAULTROWHEIGHT: Default Row Height (25h)");
- drh = new DefRowHeight(is);
- break;
-
- case PocketExcelConstants.SHEET_WINDOW_INFO:
- Debug.log(Debug.TRACE,"WINDOW2: Sheet Window Information (3Eh) [PXL 2.0]");
- win2 = new Window2(is);
- break;
-
- case PocketExcelConstants.PANE_INFO:
- Debug.log(Debug.TRACE,"PANE: Number of Panes and their Position (41h) [PXL 2.0]");
- p = new Pane(is);
- break;
-
- case PocketExcelConstants.DEF_COL_WIDTH:
- Debug.log(Debug.TRACE,"DEFCOLWIDTH: Default Column Width (55h) [PXL 2.0]");
- dcw = new DefColWidth(is);
- break;
-
- case PocketExcelConstants.COLINFO:
- Debug.log(Debug.TRACE,"COLINFO: Column Formatting Information (7Dh) [PXL 2.0]");
- ColInfo ci = new ColInfo(is);
- colInfo.add(ci);
- break;
-
- default:
- break;
- }
- b = is.read();
-
- }
- Debug.log(Debug.TRACE,"Leaving Worksheet:");
-
- return true;
- }
-
- /**
- * Returns an enumerator which will be used to access individual cells
- *
- * @return an enumerator to the worksheet cells
- */
- public Enumeration getCellEnumerator() throws IOException {
- return (cells.elements());
- }
-
- /**
- * Adds a cell to this worksheet. Current valdid celltypes are
- * <code>FloatNumber</code>, <code>LabelCell</code> or <code>Formula</code>
- *
- * @param f the font recrod to add
- */
- public void addCell(BIFFRecord br) {
- cells.add(br);
- }
-
- /**
- * Adds a number of ColInfo Records to the worksheet base on a list of
- * clumnwidths passed in
- *
- * @param list of column widths
- */
- public void addRow(Row r) {
- rows.add(r);
- }
-
- /**
- * Adds a number of ColInfo Records to the worksheet base on a list of
- * clumnwidths passed in
- *
- * @param list of column widths
- */
- public void addCol(ColInfo c) {
- colInfo.add(c);
- }
- /**
- * Returns an <code>Enumeration</code> to the ColInfo's for this worksheet
- *
- * @return an <code>Enumeration</code> to the ColInfo's
- */
- public void addSettings(SheetSettings s) {
-
- sel.setActiveCell(s.getCursor());
- p.setLeft(s.getLeft());
- p.setTop(s.getTop());
- p.setPaneNumber(s.getPaneNumber());
- Point split = s.getSplit();
- if(split.getX()!=0 || split.getY()!=0) {
- p.setSplitPoint(s.getSplitType(), split);
- win2.setSplitType(s.getSplitType());
- }
- }
-
- /**
- * Returns an <code>Enumeration</code> to the ColInfo's for this worksheet
- *
- * @return an <code>Enumeration</code> to the ColInfo's
- */
- public Enumeration getColInfos() {
-
- return (colInfo.elements());
- }
-
- /**
- * Returns a <code>SheetSettings</code> object containing a collection of data
- * contained in <code>Pane</code>, <code>Window2</code> and
- * <code>Selection</code>
- *
- * @return an <code>SheetSettings</code>
- */
- public SheetSettings getSettings() {
-
- SheetSettings s = new SheetSettings();
- s.setCursor(sel.getActiveCell());
- if(win2.isFrozen()) {
- s.setFreeze(p.getFreezePoint());
- } else if(win2.isSplit()) {
- s.setSplit(p.getSplitPoint());
- }
- s.setPaneNumber(p.getPaneNumber());
- s.setTopLeft(p.getTop(), p.getLeft());
- return s;
- }
- /**
- * Returns an <code>Enumeration</code> to the Rows for this worksheet
- *
- * @return an <code>Enumeration</code> to the Rows
- */
- public Enumeration getRows() {
-
- return (rows.elements());
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/build.xml
deleted file mode 100644
index f57eb799491c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/build.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcxsp_records" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcxsp_records"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxc/pexcel/records"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/BIFFRecord.java"/>
- <include name="${package}/CellValue.java"/>
- <include name="${package}/Workbook.java"/>
- <include name="${package}/Worksheet.java"/>
- <include name="${package}/BeginningOfFile.java"/>
- <include name="${package}/BlankCell.java"/>
- <include name="${package}/BoolErrCell.java"/>
- <include name="${package}/BoundSheet.java"/>
- <include name="${package}/CodePage.java"/>
- <include name="${package}/ColInfo.java"/>
- <include name="${package}/DefColWidth.java"/>
- <include name="${package}/DefRowHeight.java"/>
- <include name="${package}/DefinedName.java"/>
- <include name="${package}/Eof.java"/>
- <include name="${package}/ExtendedFormat.java"/>
- <include name="${package}/FloatNumber.java"/>
- <include name="${package}/FontDescription.java"/>
- <include name="${package}/UnsupportedFormulaException.java"/>
- <include name="${package}/Formula.java"/>
- <include name="${package}/LabelCell.java"/>
- <include name="${package}/NumberFormat.java"/>
- <include name="${package}/Pane.java"/>
- <include name="${package}/Row.java"/>
- <include name="${package}/Selection.java"/>
- <include name="${package}/StringValue.java"/>
- <include name="${package}/Window1.java"/>
- <include name="${package}/Window2.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java
deleted file mode 100644
index aad14dae21b3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaCompiler.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.util.*;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * FormulaCompiler converts Calc formula string into PocketXL bytes
- * and PocketXL formula bytes into Calc Formula strings
- *
- * For converting from infix to Reverse Polish (or Postfix) notation the string is
- * converted into a vector of Tokens and then re-ordered based on a modified version
- * of the standard Infix to RPN conversion algorithms.
- * <pre>
- * Infix2Rpn(tokens)
- * while have more tokens
- * if token is operand
- * push to stack
- * else if token is function, argument separater, or open bracket
- * push token
- * extract tokens to matching close bracket into param
- * Infix2Rpn(param)
- * else if token is close bracket
- * pop from stack into result until close bracket or function
- * else
- * while stack.top.priority >= token.priority
- * add stack.pop to result
- * push token onto stack
- * </pre>
- * For converting from RPN to Infix the following algorithm is applied:
- * <pre>
- * while have more tokens
- * if token is operand
- * push token to stack
- * else if token is function or operator
- * pop from stack number of args required by token
- * apply token to params to make expr
- * push expr to stack
- * return stack.pop
- * </pre>
- */
-public class FormulaCompiler {
- /**
- * Constructs a FormulaCompiler object
- */
- public FormulaCompiler() {
- }
-
- private boolean isPercent(Token pt) {
- return pt.getTokenID() == TokenConstants.TPERCENT;
- }
-
- private boolean isOpenBrace(Token pt) {
- return pt.getTokenID() == TokenConstants.TPAREN;
- }
-
- private boolean isCloseBrace(Token pt) {
- return pt.getValue().compareTo(")") == 0;
- }
-
- private boolean isParamDelimiter(Token pt) {
- return pt.getTokenID() == TokenConstants.TARGSEP;
- }
-
- private boolean isBinaryOperator(Token pt) {
- return false;
- }
-
- /**
- * Re-order into Infix format
- * @param tokens The tokens in RPN form
- * @return The vector of tokens re-ordered in Infix notation
- */
- public Vector RPN2Infix(Vector tokens) {
- Vector infixExpr = new Vector(15);
- ListIterator iter = tokens.listIterator();
- Stack evalStack = new Stack();
- Stack args = new Stack();
-
- while (iter.hasNext()) {
- Token pt = (Token)iter.next();
- if (pt.isOperand()) {
- Vector expr = new Vector(5);
- expr.add(pt);
- evalStack.push(expr);
- } else if (pt.isOperator() || pt.isFunction()) {
- args.clear();
- for (int i=0; i< pt.getNumArgs(); i++) {
- args.push(evalStack.pop());
- }
- evalStack.push(makeExpression(pt, args));
- }
- }
- return (Vector)evalStack.elementAt(0);
- }
-
- /**
- * Convert the infix expression to RPN. Note that open brackets are saved onto the stack to preserve the users bracketing.
- * <p>Also note that the open bracket following functions is not pushed onto the stack - it is always implied when
- * writing out results
- *
- * @param tokens The vector of tokens in Infix form
- *
- * @return A vector of tokens for the expression in Reverse Polish Notation order
- */
- public Vector infix2RPN(Vector tokens) {
- Vector rpnExpr = new Vector(15);
- Stack evalStack = new Stack();
- ListIterator iter = tokens.listIterator();
- while (iter.hasNext()) {
- Token pt = (Token)iter.next();
-
- if (pt.isOperand()) { //Operands are output immediately
- rpnExpr.add(pt);
- } else if (pt.isFunction() || isParamDelimiter(pt) || isOpenBrace(pt)) { //Extract parameters after afunction or comma
- evalStack.push(pt);
- if (pt.isFunction()) {
- iter.next();
- }
- Vector param = extractParameter(iter);
- Debug.log(Debug.TRACE, "Extracted parameter " + param);
- rpnExpr.addAll(infix2RPN(param));
- } else if (isCloseBrace(pt)) { //Pop off stack till you meet a function or an open bracket
- Token tmpTok = null;
- boolean bPop = true;
- while (bPop) {
- if (evalStack.isEmpty()) {
- bPop = false;
- } else {
- tmpTok = (Token)evalStack.pop();
- //if (!(isOpenBrace(tmpTok) || isParamDelimiter(tmpTok))) { //Don't output brackets and commas
- if (!isParamDelimiter(tmpTok)) { //Don't output commas
- rpnExpr.add(tmpTok);
- }
- if (tmpTok.isFunction() || isOpenBrace(tmpTok)) {
- bPop = false;
- }
- }
- }
- } else {
- if (!evalStack.isEmpty()) {
- while (!evalStack.isEmpty() &&
- (((Token)evalStack.peek()).getTokenPriority() >=pt.getTokenPriority())) {
- Token topTok = (Token)evalStack.peek();
- if (topTok.isFunction() || isOpenBrace(topTok)) {
- break;
- }
- rpnExpr.add(evalStack.pop());
- }
- }
- evalStack.push(pt);
- }
- }
-
- while (!evalStack.isEmpty()) {
- Token topTok = (Token)evalStack.peek();
- if (!(isOpenBrace(topTok) || isParamDelimiter(topTok))) { //Don't output brackets and commas
- rpnExpr.add(evalStack.pop());
- }
- else
- {
- evalStack.pop();
- }
- }
- return rpnExpr;
- }
-
- /**
- * Extract a parameter or bracketed sub-expression
- * @param iter an iterator into the list
- * @return A complete sub-expression
- */
- protected Vector extractParameter(ListIterator iter) {
- Vector param = new Vector(5);
- int subExprCount = 0;
-
- while (iter.hasNext()) {
- Token pt = (Token)iter.next();
- Debug.log(Debug.TRACE, "Token is " + pt + " and subExprCount is " + subExprCount);
- if (isOpenBrace(pt)) {
- subExprCount++;
- param.add(pt);
- } else if (isCloseBrace(pt)) {
- if (subExprCount == 0) {
- iter.previous();
- return param;
- } else {
- subExprCount--;
- param.add(pt);
- }
- } else if (isParamDelimiter(pt) && (subExprCount == 0)) {
- iter.previous();
- return param;
- } else {
- param.add(pt);
- }
- }
- return param;
- }
-
- /**
- * Given the operator and it's operators
- * @param pt The operator token
- * @param args The arguments for this operator
- * @return A correctly ordered expression
- */
- protected Vector makeExpression(Token pt, Stack args) {
- Vector tmp = new Vector(5);
- TokenFactory tf = new TokenFactory();
- if (pt.isOperator()) {
- if (pt.getNumArgs()==2) { //Binary operator
- tmp.addAll((Vector)args.pop());
- tmp.add(pt);
- tmp.addAll((Vector)args.pop());
- } else if (pt.getNumArgs() == 1) {
- if(isPercent(pt)) {
- tmp.addAll((Vector)args.elementAt(0));
- tmp.add(pt);
- } else {
- tmp.add(pt);
- tmp.addAll((Vector)args.elementAt(0));
- }
- if (isOpenBrace(pt)) {
- tmp.add(tf.getOperatorToken(")",1));
- }
- }
- } else if (pt.isFunction()) {
- tmp.add(pt);
- tmp.add(tf.getOperatorToken("(",1));
- if (!args.isEmpty()) {
- Vector v = (Vector)args.pop();
- tmp.addAll(v);
- }
- while (!args.isEmpty()) {
- tmp.add(tf.getOperatorToken(",",1));
- Vector v = (Vector)args.pop();
- tmp.addAll(v);
-
- }
- tmp.add(tf.getOperatorToken(")",1));
- }
-
- return tmp;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java
deleted file mode 100644
index 1752d0e6336e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaHelper.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-
-/**
- * This Helper class provides a simplified interface to conversion between PocketXL formula representation
- * and Calc formula representation.<p>
- * The class is used by {@link org.openoffice.xmerge.converter.xml.sxc.pexcel.Records.Formula}
- */
-public class FormulaHelper {
-
- private static FormulaParser parser;
- private static FormulaCompiler compiler;
- private static TokenEncoder encoder;
- private static TokenDecoder decoder;
- private boolean rangeType = false;
- private boolean expressionType = false;
-
- static {
- parser = new FormulaParser();
- compiler = new FormulaCompiler();
- encoder = new TokenEncoder();
- decoder = new TokenDecoder();
- }
-
- /**
- * Sets the workbook cache so that global data such as
- * <code>DefinedNames</code>, <code>Boundsheets</code> can be read
- *
- * @param wb Wrokbook object containing all the global data
- */
- public void setWorkbook(Workbook wb) {
-
- encoder.setWorkbook(wb);
- decoder.setWorkbook(wb);
- parser.setWorkbook(wb);
- }
-
- /**
- * Convertes a string representation of a calc formula into an array of PocketXL bytes
- * @param formula The Formula String (e.g. 1+SUM(A1,B1))
- *
- * @throws UnsupportedFunctionException Thrown if a function in the formula is nto supported by Pocket Excel
- * @throws FormulaParsingException Thrown when the formula is not well formed
- *
- */
- public byte[] convertCalcToPXL(String formula) throws UnsupportedFunctionException, FormulaParsingException {
-
- Vector parseTokens = parser.parse(formula);
- Vector rpnTokens = compiler.infix2RPN(parseTokens);
-
- ByteArrayOutputStream bytes = null;
- try {
- bytes = new ByteArrayOutputStream();
- for (Enumeration e = rpnTokens.elements(); e.hasMoreElements();) {
- Token t = (Token)e.nextElement();
- bytes.write(encoder.getByte(t));
- }
- } catch (IOException e) {
- }
-
- return bytes.toByteArray();
- }
-
- /**
- * Converts a PocketXL byte array into a Calc function string
- * @param formula A byte array that contains the PocketXL bytes for a formula
- *
- */
- public String convertPXLToCalc(byte[] formula) {
-
- Vector parseTokens = decoder.getTokenVector(formula);
- Vector infixTokens = compiler.RPN2Infix(parseTokens);
-
- StringBuffer buff = new StringBuffer();
- for (Enumeration e = infixTokens.elements();e.hasMoreElements();) {
- Token t = (Token)e.nextElement();
- buff.append(t.toString());
- // If we are parsing a Name definition we need to know if it is of
- // type range or expression
- if(!t.isOperand()) {
- expressionType = true;
- }
- }
- if(!expressionType) {
- rangeType = true;
- }
- return "=" + buff.toString();
- }
-
- /**
- * Returns a boolean indicating whether or not the byte[] parsed is of
- * type range. This means it contains only a cell reference and no
- * operators. This is necessry because the syntax for range and expression
- * types differs. This is only of interest when dealing with
- * <code>DefinedNames</code> and not <code>Formula</code>
- *
- * @return a boolean true if of type range otherwise false
- *
- */
- public boolean isRangeType() {
-
- return rangeType;
- }
-
- /**
- * Returns a boolean indicating whether or not the byte[] parsed is of
- * type expression. This means it contains operators. This is necessry
- * because the syntax for range and expression types differs. This is
- * only of interest when dealing with <code>DefinedNames</code> and not
- * <code>Formula</code>
- *
- * @return a boolean true if of type expression otherwise false
- *
- */
- public boolean isExpressionType() {
-
- return expressionType;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java
deleted file mode 100644
index ead9a974d23d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FormulaParser.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-
-import java.io.*;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This is the Formula Parser based on an article written by Jack Crenshaw. It is a
- * top down parser with some basic error handling. It handles
- * +,-,*,/,>,<,>=,<=,=,<>, unary + and - as well as functions.
- * The BNF notation for this parser is
- * <pre>
- * &lt;expression&gt; ::= &lt;unary op&gt; &lt;term&gt; [&lt;addop&gt;|&lt;logop&gt; &lt;term&gt;]
- * &lt;term&gt; ::= &lt;factor&gt; [&lt;mulop&gt; &lt;factor&gt;]
- * &lt;factor&gt; ::= &lt;number&gt;[%] | &lt;CellRef&gt; | &lt;QuoteString&gt; | &lt;expression&gt;
- * </pre>
- */
-public class FormulaParser {
-
- private char look;
- private String formulaStr;
- private int index = 1;
- private TokenFactory tokenFactory;
- private Vector tokenVector;
- private Workbook wb;
-
- /**
- * Default constructor
- */
- public FormulaParser() {
-
- Debug.log(Debug.TRACE,"Creating a Formula Parser");
- tokenFactory = new TokenFactory();
- tokenVector = new Vector();
- }
-
- /**
- *
- */
- public void setWorkbook(Workbook wb) {
-
- this.wb = wb;
- }
-
- /**
- * Parse method for parsing from a String to a byte[]
- *
- * @param formula A <code>String</code> representation of a formula
- * starting with the '=' character
- * @return A <code>Vector</code> containing the parsed <code>Token</code>s
- */
- public Vector parse(String formula) throws FormulaParsingException {
-
- index = 1;
- look = ' ';
- tokenVector.clear();
- if(formula.startsWith("=")) {
- formulaStr = formula;
- Debug.log(Debug.TRACE,"Creating a Formula Parser for " + formulaStr);
- getChar();
- expression();
- } else {
- throw new FormulaParsingException("No equals found!" + makeErrorString());
- }
- return tokenVector;
- }
-
- /**
- * Identify + and - operators
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isAddOp(char c) {
- return (c == '-') || (c == '+');
- }
-
- /**
- * Determine if the current character is a multiop
- *
- * @return A boolean returning the result of the comparison
- */
- private boolean isMultiOp() {
- return look=='*' || look =='/' || look == '^' || look == '&';
- }
-
- /**
- * Identify <, >, <=, >=, =, <> using the index to find the current character(s)
- *
- * @return A boolean returning the result of the comparison
- */
- private boolean isLogicalOp() {
- if (!isLogicalOpChar(look)) {
- return false;
- } else if ((index+1) >= formulaStr.length()) {//logical operators in their own right : if at end then return true
- return true;
- } else if (!isLogicalOpChar(formulaStr.charAt(index))) { // we have >, < or = on their own
- return true;
- } else if ((look == '<') && ((formulaStr.charAt(index) == '>') || formulaStr.charAt(index) == '=')) { // <>, or <=
- return true;
- } else if ((look == '>') && (formulaStr.charAt(index) == '=')) { // >=
- return true;
- }
-
- return false;
- }
-
- /**
- * Identify <, >, <=, >=, =, <>
- *
- * @param The <code>String</code> which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isLogicalOp(String op) {
- return ((op.compareTo(">") == 0) ||
- (op.compareTo("<") == 0) ||
- (op.compareTo(">=") == 0) ||
- (op.compareTo("<=") == 0) ||
- (op.compareTo("=") == 0) ||
- (op.compareTo("<>") == 0));
- }
-
-
- /**
- * Identify characters that MAY be logical operator characters
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isLogicalOpChar(char c) {
- return (c == '>') || (c == '<') || (c == '=');
- }
-
- /**
- * Identify special Cell Reference charaters
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isCellRefSpecialChar(char c) {
- return (c == ':') || (c == '$') || (c == '.');
- }
-
- /**
- * Identify letters
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isAlpha(char c) {
- return(Character.isLetter(c));
- }
-
- /**
- * Identify numbers
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isDigit(char c) {
- return(Character.isDigit(c));
- }
-
- /**
- * Identify numbers
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isPercent(char c) {
- return (c == '%');
- }
-
- /**
- * Identify letters or numbers
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isAlphaNum(char c) {
- return(isAlpha(c) || isDigit(c));
- }
-
- /**
- * Identify valid Characters for cell references
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isCellRefChar(char c) {
- return(isAlpha(c) || isDigit(c) || isCellRefSpecialChar(c));
- }
-
- /**
- * Test if current character is a match and move to next character
- *
- * @param c The character which is to be matched
- */
- private void match(char c) throws FormulaParsingException {
-
- if(look==c) {
- Debug.log(Debug.TRACE,"Operator Found : " + look);
- getChar();
- skipWhite();
- }
- else
- throw new FormulaParsingException("Unexpected character '" + c + "'" + makeErrorString());
- }
-
- /**
- * Test if current character is a match and move to next character
- *
- * @param symbol The <code>String</code> to be matched.
- */
- private void match(String symbol) throws FormulaParsingException {
-
- int numChars = symbol.length();
- boolean bContinue = true;
- for (int i=0;i<numChars && bContinue; i++) {
- if (look == symbol.charAt(i)) {
- bContinue = getChar();
- skipWhite();
- } else {
- throw new FormulaParsingException("Unexpected character '" + symbol + "'" + makeErrorString());
- }
- }
- }
-
- /**
- * Skip over whitespaces (ie. spaces and tabs)
- */
- private void skipWhite() throws FormulaParsingException {
-
- boolean success = true;
-
- while(Character.isWhitespace(look) && success) {
- success = getChar();
- }
- }
-
- /**
- * This is a factor for multiplication and division operators
- */
- private void factor() throws FormulaParsingException {
- if(isAddOp(look)) { // handle unary addop
- Character ch = new Character(look);
- match(look);
- tokenVector.add(tokenFactory.getOperatorToken(ch.toString(), 1));
- }
- if(look=='(') {
- match('(');
- tokenVector.add(tokenFactory.getOperatorToken("(", 1));
- expression();
- match(')');
- tokenVector.add(tokenFactory.getOperatorToken(")", 1));
- } else if(isDigit(look)){
- getNum();
- } else {
- ident();
- }
- }
-
- /**
- * Pulls the next character from the <code>String</code>
- *
- * @return boolean false if the end if the statement
- * is reached otherwise true
- */
- private boolean getChar() throws FormulaParsingException {
-
- boolean success = true;
-
- if(index<formulaStr.length()) {
- look = formulaStr.charAt(index);
- index++;
- if(look==',')
- success = false;
- } else {
- success = false;
- }
- return success;
- }
-
- /**
- * Parses the number of arguments in a function
- *
- * @return The number of arguments
- */
- private int arguments() throws FormulaParsingException {
- int numArgs;
-
- skipWhite();
- if(look==')')
- numArgs = 0;
- else
- numArgs = 1;
-
- while(look!=')') {
- expression();
- if(look==',') {
- numArgs++;
- match(',');
- tokenVector.add(tokenFactory.getOperatorToken(",", 1));
- }
- }
- return numArgs;
- }
-
- /**
- * Test to see if we have come across a cell reference or a Name
- * Definition.
- */
- private boolean isCellRef(String s) {
- char c;
- boolean result = false;
-
- for(int i = 0;i<s.length();i++) {
- c = s.charAt(i);
- if(isCellRefSpecialChar(c)) {
- result = true;
- break;
- }
- }
-
- // if it is a simple cell reference then there will not be a cell
- // reference 'special char' so we should also look for a digit
- if(!result) {
- if(isDigit(s.charAt(1)) || isDigit(s.charAt(2))) {
- result = true;
- }
- }
- return result;
- }
-
- /**
- * Test to see if we have come across a cell reference or a function and
- * add the resulting toek nto the tokenVector.
- */
- private void ident() throws FormulaParsingException {
-
- String cell = getTokenString();
- if(look=='(') {
- Debug.log(Debug.TRACE,"Found Function : " + cell);
-
- int index = tokenVector.size();
- match('(');
- tokenVector.add(tokenFactory.getOperatorToken("(", 1));
- int numArgs = arguments();
- match(')');
- tokenVector.add(tokenFactory.getOperatorToken(")", 1));
- tokenVector.insertElementAt(tokenFactory.getFunctionToken(cell, numArgs), index);
- } else {
-
- if(cell.indexOf('.')!=-1) {
- String cellRef = cell.substring(cell.indexOf('.') + 1, cell.length());
- if(cellRef.indexOf(':')!=-1) {
- tokenVector.add(tokenFactory.getOperandToken(cell, "3D_CELL_AREA_REFERENCE"));
- } else {
- tokenVector.add(tokenFactory.getOperandToken(cell, "3D_CELL_REFERENCE"));
- }
- } else if(cell.indexOf(':')!=-1) {
- tokenVector.add(tokenFactory.getOperandToken(cell, "CELL_AREA_REFERENCE"));
- } else if(isCellRef(cell)) {
- tokenVector.add(tokenFactory.getOperandToken(cell, "CELL_REFERENCE"));
- } else {
- tokenVector.add(tokenFactory.getOperandToken(cell, "NAME"));
- }
- }
- }
-
- /**
- * Will keep pulling valid logical operators from the formula and return
- * the resultant <code>String</code>.
- *
- * @return a <code>String<code> representing a logical operator
- */
- private String getLogicalOperator() throws FormulaParsingException {
- String op = new String();
- boolean status;
-
- do {
- op += look;
- status = getChar();
- } while(isLogicalOpChar(look) && status);
- skipWhite();
- return op;
- }
-
- /**
- * Keeps pulling characters from the statement until we get an
- * operator and returns the resulting string.
- *
- * @return A <code>String</code>representing the next token
- */
- private String getTokenString() throws FormulaParsingException {
-
- if(!isAlpha(look) && look!='$')
- throw new FormulaParsingException("Expected Cell Reference" + makeErrorString());
- else {
- String cell = new String();
- boolean status;
- do {
- cell += look;
- status = getChar();
- } while(isCellRefChar(look) && status);
- skipWhite();
- return cell;
- }
- }
-
- /**
- * Keeps pulling numbers from the statement and add the resulting integer
- * token to the tokenVector.
- */
- private void getNum() throws FormulaParsingException {
-
- Debug.log(Debug.TRACE,"getNum : ");
- if(!isDigit(look))
- throw new FormulaParsingException("Expected Integer" + makeErrorString());
- else {
- String num = new String();
- boolean status;
-
- do {
- num += look;
- status = getChar();
- } while((isDigit(look) || ((look == '.') && isDigit(formulaStr.charAt(index)))) && status);
- skipWhite();
- tokenVector.add(tokenFactory.getOperandToken(num, "INTEGER"));
- if(isPercent(look)) {
- match(look);
- tokenVector.add(tokenFactory.getOperatorToken("%", 1));
- Debug.log(Debug.TRACE,"Added Percent token to Vector: ");
- }
- Debug.log(Debug.TRACE,"Number parsed : " + num);
- }
- }
-
-
- /**
- * Term will parse multiplication/division expressions
- */
- private void term() throws FormulaParsingException {
- factor();
- while(isMultiOp()) {
- multiOp(Character.toString(look));
- }
- }
-
- /**
- * Expression is the entry point for the parser. It is the code
- * that parses addition/subtraction expressions.
- */
- private void expression() throws FormulaParsingException {
-
- if (look == '"') { //Extract a quoted string...
- StringBuffer buff = new StringBuffer();
- boolean success = true;
- success = getChar();
- while (look != '"' && success) {
- buff.append(look);
- success = getChar();
- }
-
- if (look != '"') { //We've reached the end of the string without getting a closing quote
- throw new FormulaParsingException("Expected closing quote." + makeErrorString());
- } else {
- tokenVector.add(tokenFactory.getOperandToken(buff.toString(), "STRING"));
- getChar(); //Move on to the next character
- }
- } else {
- term();
- }
- while(isAddOp(look) || isLogicalOp()) {
- if (isAddOp(look)) {
- addOp(Character.toString(look));
- } else if (isLogicalOp()) {
- logicalOp();
- }
- }
- }
-
- /**
- * Test to see if the next token (represented as a <code>String</code>) is
- * the same as the String passed in. Move the index along to the end of
- * that String and add that <code>Token</code> to the tokenVector. Then
- * call <code>term</code> to parse the right hand side of the operator.
- *
- * @param op A <code>String</code> representing the operator
- */
- private void addOp(String op) throws FormulaParsingException {
- match(op);
- tokenVector.add(tokenFactory.getOperatorToken(op, 2));
- term();
- }
-
- /**
- * Test to see if the next token (represented as a <code>String</code>) is
- * the same as the String passed in. Move the index along to the end of
- * that String and add that <code>Token</code> to the tokenVector. Then
- * call <code>factor</code> to parse the right hand side of the operator.
- *
- * @param op A <code>String</code> representing the operator
- */
- private void multiOp(String op) throws FormulaParsingException {
- match(op);
- tokenVector.add(tokenFactory.getOperatorToken(op, 2));
- factor();
- }
-
- /**
- * Pull a logical operator starting at the current index, add a token for
- * that operator to the tokenVector and call <code>term<code> to parse the
- * right hand side of the operator
- */
- private void logicalOp() throws FormulaParsingException {
- String op = getLogicalOperator();
- tokenVector.add(tokenFactory.getOperatorToken(op, 2));
- term();
- }
-
- private String makeErrorString() {
- StringBuffer buff = new StringBuffer();
- for (int i=0; i<index-1; i++) {
- buff.append(' ');
- }
-
- buff.append('^');
- return "\n\t" + formulaStr + "\n\t" + buff.toString();
- }
- }
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java
deleted file mode 100644
index b4f7dab3a681..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/FunctionLookup.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import org.openoffice.xmerge.util.Debug;
-
-import java.util.HashMap;
-
-public class FunctionLookup extends SymbolLookup {
-
- private HashMap stringToArgs = null;
-
- /**
- * The default constructor - invokes {@link #initialize() initialize()}
- */
- public FunctionLookup() {
- initialize();
- }
-
- /**
- * Initialize the lookup table for functions
- */
- public void initialize() {
- if ((stringToID != null) || (idToString != null) || (stringToArgs !=null)) {
- return;
- }
- stringToID = new HashMap();
- idToString = new HashMap();
- stringToArgs = new HashMap();
-
- // Functions with Variable number of Arguments
- // Math and Trig
- addEntry("SUM", TokenConstants.TSUM, -1);
- addEntry("MIN", TokenConstants.TMIN, -1);
- addEntry("PRODUCT", TokenConstants.TPRODUCT, -1);
- addEntry("LOG", TokenConstants.TLOG, -1);
- addEntry("SUMIF", TokenConstants.TSUMIF, -1);
- addEntry("TRUNC", TokenConstants.TRUNC, -1);
- // Financial
- addEntry("DDB", TokenConstants.TDDB, -1);
- addEntry("FV", TokenConstants.TFV, -1);
- addEntry("IRR", TokenConstants.TIRR, -1);
- addEntry("NPER", TokenConstants.TNPER, -1);
- addEntry("NPV", TokenConstants.TNPV, -1);
- addEntry("PMT", TokenConstants.TPMT, -1);
- addEntry("PV", TokenConstants.TPV, -1);
- addEntry("RATE", TokenConstants.TRATE, -1);
- // Statistical
- addEntry("AVERAGE", TokenConstants.TAVERAGE, -1);
- addEntry("COUNT", TokenConstants.TCOUNT, -1);
- addEntry("COUNTA", TokenConstants.TCOUNTA, -1);
- addEntry("MAX", TokenConstants.TMAX, -1 );
- addEntry("MIN", TokenConstants.TMIN, -1);
- addEntry("STDEV", TokenConstants.TSTDEV, -1 );
- addEntry("STDEVP", TokenConstants.TSTDEVP, -1 );
- addEntry("VAR", TokenConstants.TVAR, -1);
- addEntry("VARP", TokenConstants.TVARP, -1);
- // Lookup
- addEntry("CHOOSE", TokenConstants.TCHOOSE, -1);
- addEntry("HLOOKUP", TokenConstants.THLOOKUP, -1);
- addEntry("INDEX", TokenConstants.TINDEX, -1);
- addEntry("MATCH", TokenConstants.TMATCH, -1) ;
- addEntry("VLOOKUP", TokenConstants.TVLOOKUP, -1);
- // Text
- addEntry("RIGHT", TokenConstants.TRIGHT, -1);
- addEntry("SUBSTITUTE", TokenConstants.TSUBSTITUTE, -1);
- addEntry("FIND", TokenConstants.TFIND, -1);
- addEntry("LEFT", TokenConstants.TLEFT, -1);
- // Logical
- addEntry("AND", TokenConstants.TAND, -1 );
- addEntry("IF", TokenConstants.TIF, -1) ;
- addEntry("OR", TokenConstants.TOR, -1);
-
- // Functions with Fixed number of Arguments
- // Math and Trig
- addEntry("ABS", TokenConstants.TABS, 1);
- addEntry("ACOS", TokenConstants.TACOS, 1);
- addEntry("ASIN", TokenConstants.TASIN, 1);
- addEntry("ATAN", TokenConstants.TATAN, 1);
- addEntry("ATAN2", TokenConstants.TATAN2, 1);
- addEntry("COS", TokenConstants.TCOS, 1);
- addEntry("COUNTIF", TokenConstants.TCOUNTIF, 1);
- addEntry("DEGREES", TokenConstants.TDEGREES, 1);
- addEntry("EXP", TokenConstants.TEXP, 1);
- addEntry("FACT", TokenConstants.TFACT, 1);
- addEntry("INT", TokenConstants.TINTE, 1);
- addEntry("LN", TokenConstants.TLN, 1);
- addEntry("LOG10", TokenConstants.TLOG10, 1);
- addEntry("MOD", TokenConstants.TMOD, 1);
- addEntry("PI", TokenConstants.TPI, 0);
- addEntry("POWER", TokenConstants.TPOWERF, 2);
- addEntry("RADIANS", TokenConstants.TRADIANS, 1);
- addEntry("RAND", TokenConstants.TRAND, 1);
- addEntry("ROUND", TokenConstants.TROUND, 1);
- addEntry("SQRT", TokenConstants.TSQRT, 1);
- addEntry("TAN", TokenConstants.TTAN, 1);
- addEntry("SIN", TokenConstants.TSIN, 1);
- // Financial
- addEntry("SLN", TokenConstants.TSLN, 3);
- addEntry("SYD", TokenConstants.TSYD, 4);
- // Date and Time
- addEntry("DATE", TokenConstants.TDATE, 3);
- addEntry("DATEVALUE", TokenConstants.TDATEVALUE, 1);
- addEntry("DAY", TokenConstants.TDAY, 1);
- addEntry("HOUR", TokenConstants.THOUR, 1);
- addEntry("MINUTE", TokenConstants.TMINUTE, 1 );
- addEntry("MONTH", TokenConstants.TMONTH, 1);
- addEntry("NOW", TokenConstants.TNOW, 0);
- addEntry("SECOND", TokenConstants.TSECOND, 1);
- addEntry("TIME", TokenConstants.TTIME, 3);
- addEntry("TIMEVALUE", TokenConstants.TTIMEVALUE, 1);
- addEntry("YEAR", TokenConstants.TYEAR, 1);
- // Statistical
- addEntry("COUNTBLANK", TokenConstants.TCOUNTBLANK, 1);
- // lookup
- addEntry("COLUMNS", TokenConstants.TCOLUMNS, 1);
- addEntry("ROWS", TokenConstants.TROWS, 1);
- // Database
- addEntry("DAVERAGE", TokenConstants.TDAVAERAGE, 3);
- addEntry("DCOUNT", TokenConstants.TDCOUNT, 3);
- addEntry("DCOUNTA", TokenConstants.TDCOUNTA, 2);
- addEntry("DGET", TokenConstants.TDGET, 3);
- addEntry("DMAX", TokenConstants.TDMAX, 3);
- addEntry("DMIN", TokenConstants.TDMIN, 3);
- addEntry("DPRODUCT", TokenConstants.TDPRODUCT, 3);
- addEntry("DSTDEV", TokenConstants.TDSTDEV, 3);
- addEntry("DSTDEVP", TokenConstants.TDSTDEVP, 3) ;
- addEntry("DSUM", TokenConstants.TDSUM, 3);
- addEntry("DVAR", TokenConstants.TDVAR, 3);
- addEntry("DVARP", TokenConstants.TDVARP, 3);
- // Text
- addEntry("EXACT", TokenConstants.TEXACT, 2);
- addEntry("LEN", TokenConstants.TLEN, 1);
- addEntry("LOWER", TokenConstants.TLOWER, 1);
- addEntry("MID", TokenConstants.TMID, 3); // ??????
- addEntry("PROPER", TokenConstants.TPROPER, 1);
- addEntry("REPLACE", TokenConstants.TREPLACE, 4);
- addEntry("REPT", TokenConstants.TREPT, 2);
- addEntry("T", TokenConstants.TT, 1);
- addEntry("TRIM", TokenConstants.TRIM, 1);
- addEntry("UPPER", TokenConstants.TUPPER, 1);
- addEntry("VALUE", TokenConstants.TVALUE, 1);
- // Logical
- addEntry("FALSE", TokenConstants.TFALSE, 0);
- addEntry("NOT", TokenConstants.TNOT, 1);
- addEntry("TRUE", TokenConstants.TTRUE, 0);
- // Informational
- addEntry("ERRORTYPE", TokenConstants.TERRORTYPE, 1);
- addEntry("ISBLANK", TokenConstants.TISBLANK, 1);
- addEntry("ISERR", TokenConstants.TISERR, 1);
- addEntry("ISERROR", TokenConstants.TISERROR, 1);
- addEntry("ISLOGICAL", TokenConstants.TISLOGICAL, 1);
- addEntry("ISNA", TokenConstants.TISNA, 1);
- addEntry("ISNONTEXT", TokenConstants.TISNONTEXT, 1);
- addEntry("ISNUMBER", TokenConstants.TISNUMBER, 1);
- addEntry("ISTEXT", TokenConstants.TISTEXT, 1);
- addEntry("N", TokenConstants.TN, 1);
- addEntry("NA", TokenConstants.TNA, 0);
-
- }
-
- /**
- * Associate a function with an identifier and specifiy the number of arguments for that function
- * @param symbol The function string that will act as the key in the lookup table
- * @param id The identifier for the function
- * @param args The number of arguments this function requires
- */
- public void addEntry(String symbol, int id, int args) {
- addEntry(symbol, id);
- stringToArgs.put(symbol, new Integer(args));
- }
-
- /**
- * Retrieve the number of arguments for this function
- * @param symbol The function name
- * @return The number of arguments required by this function
- */
- public int getArgCountFromString(String symbol) {
- return ((Integer)stringToArgs.get(symbol)).intValue();
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java
deleted file mode 100644
index 67f79c561234..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperandLookup.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-import java.util.HashMap;
-
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * A lookup table containing information about operands
- */
-public class OperandLookup extends SymbolLookup {
-
- /**
- * The default constructor - invokes {@link #initialize() initialize()}
- */
- public OperandLookup() {
- initialize();
- }
-
- /**
- * Initialize the lookup table for operands
- */
- public void initialize() {
- if ((stringToID != null) || (idToString != null)) {
- return;
- }
- stringToID = new HashMap();
- idToString = new HashMap();
- addEntry("CELL_REFERENCE", TokenConstants.TREF);
- addEntry("CELL_AREA_REFERENCE", TokenConstants.TAREA);
- addEntry("INTEGER", TokenConstants.TNUM);
- addEntry("NUMBER", TokenConstants.TNUM);
- addEntry("STRING", TokenConstants.TSTRING);
- addEntry("NAME", TokenConstants.TNAME);
- addEntry("3D_CELL_REFERENCE", TokenConstants.TREF3D);
- addEntry("3D_CELL_AREA_REFERENCE", TokenConstants.TAREA3D);
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java
deleted file mode 100644
index 03d09f917a18..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/OperatorLookup.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.util.HashMap;
-
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * A lookup table containing information about operators
- */
-public class OperatorLookup extends SymbolLookup {
-
- /**
- * The default constructor - invokes {@link #initialize() initialize()}
- */
- public OperatorLookup() {
- initialize();
- }
-
- /**
- * Initialize the lookup table for operators
- */
- public void initialize() {
- if ((stringToID != null) || (idToString != null)) {
- return;
- }
- stringToID = new HashMap();
- idToString = new HashMap();
- addEntry("UNARY_PLUS", TokenConstants.TUPLUS);
- addEntry("UNARY_MINUS", TokenConstants.TUMINUS);
- addEntry("%", TokenConstants.TPERCENT);
- addEntry("+", TokenConstants.TADD);
- addEntry("-", TokenConstants.TSUB);
- addEntry("*", TokenConstants.TMUL);
- addEntry("/", TokenConstants.TDIV);
- addEntry(",", TokenConstants.TARGSEP);
- addEntry("^", TokenConstants.TPOWER);
- addEntry("&", TokenConstants.TCONCAT);
- addEntry("(", TokenConstants.TPAREN);
- addEntry(")", TokenConstants.TCLOSEPAREN);
- addEntry("<", TokenConstants.TLESS);
- addEntry(">", TokenConstants.TGREATER);
- addEntry(">=", TokenConstants.TGTEQUALS);
- addEntry("<=", TokenConstants.TLESSEQUALS);
- addEntry("=", TokenConstants.TEQUALS);
- addEntry("<>", TokenConstants.TNEQUALS);
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java
deleted file mode 100644
index e78234ca1adc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/ParseToken.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-public interface ParseToken
-{
- public boolean isOperand();
- public boolean isOperator();
- public int getTokenType();
-
- //GENERIC TOKENS (MOSTLY UNUSED
- public static final int TOKEN_OPERATOR = 1;
- public static final int TOKEN_OPERAND = 2;
- public static final int TOKEN_FUNCTION_FIXED = 3;
- public static final int TOKEN_FUNCTION_VARIABLE = 4;
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java
deleted file mode 100644
index fbe24bb4fff2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/PrecedenceTable.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.util.HashMap;
-
-/**
- * This class defines the precedence applied to each operator when performing a conversion
- * {@link org.openoffice.xmerge.converter.xml.sxc.pexcel.Records.formula.FormulaCompiler.infix2 from infix to RPN.}.
- */
-public class PrecedenceTable {
- public static final int DEFAULT_PRECEDENCE = 0;
- public static final int EQNEQ_PRECEDENCE = 1; // =, <>
- public static final int GTLTEQ_PRECEDENCE = 1; // >=, <=
- public static final int GTLT_PRECEDENCE = 2; // >, <
- public static final int ADDOP_PRECEDENCE = 4; // +, -
- public static final int MULTOP_PRECEDENCE = 5; // *, /
- public static final int FACTOR_PRECEDENCE = 6; // ^
- public static final int CONCAT_PRECEDENCE = 6; // &
- public static final int UNARY_PRECEDENCE = 7; // !, Unary +, Unary -
- public static final int PAREN_PRECEDENCE = 8; // (, )
- public static final int FUNCTION_PRECEDENCE = 8;
- public static final int COMMA_PRECEDENCE = 8;
-
- private static HashMap map;
- static {
- map = new HashMap();
-
- map.put("%", new Integer(UNARY_PRECEDENCE));
- map.put("+", new Integer(ADDOP_PRECEDENCE));
- map.put("-", new Integer(ADDOP_PRECEDENCE));
- map.put("*", new Integer(MULTOP_PRECEDENCE));
- map.put("/", new Integer(MULTOP_PRECEDENCE));
- map.put("(", new Integer(PAREN_PRECEDENCE));
- map.put(")", new Integer(PAREN_PRECEDENCE));
- map.put(",", new Integer(COMMA_PRECEDENCE));
- map.put(">", new Integer(GTLT_PRECEDENCE));
- map.put("<", new Integer(GTLT_PRECEDENCE));
- map.put("=", new Integer(EQNEQ_PRECEDENCE));
- map.put("&", new Integer(CONCAT_PRECEDENCE));
- map.put("^", new Integer(FACTOR_PRECEDENCE));
- map.put(">=", new Integer(GTLTEQ_PRECEDENCE));
- map.put("<=", new Integer(GTLTEQ_PRECEDENCE));
- map.put("<>", new Integer(EQNEQ_PRECEDENCE));
- map.put("FUNCTION", new Integer(FUNCTION_PRECEDENCE));
- }
-
- /**
- * Retrieve the precedence value for a given operator.
- * @param op Look up the precedence for this operator
- * @return an integer representing the integer value of the operator
- */
- public static int getPrecedence(String op) {
- Object obj = map.get(op);
- if (obj == null) {
- return DEFAULT_PRECEDENCE;
- }
- return ((Integer)obj).intValue();
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java
deleted file mode 100644
index 1399c57d2875..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/SymbolLookup.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.util.HashMap;
-
-/**
- * This interface defines the attributes of a lookup table for this plugin.
- * Symbols will generally be either operators (_, -, *, etc) or funtion names.
- */
-public abstract class SymbolLookup {
-
- protected HashMap stringToID = null;
- protected HashMap idToString = null;
-
- /**
- * Perform lookup table specific initialization. This would typically entail loading values into
- * the lookup table. It is best to optimize this process so that data is loaded statically and shared
- * across all instances of the lookup table.
- */
- abstract public void initialize();
-
- /**
- * Associate a symbol with a numeric value in the lookup table
- * @param symbol The symbol that will act as the key in the lookup table
- * @param value The value to be associated with a given symbol
- */
- public void addEntry(String symbol, int id) {
- Integer iObj = new Integer(id);
- stringToID.put(symbol, iObj);
- idToString.put(iObj, symbol);
- }
-
- /**
- * Retrieve the symbol associated with a given identifier
- * @param id The identfier for which we need to retieve the symbol string
- * @return The string associated with this identifier in the lookup table.
- */
- public String getStringFromID(int id) {
- return (String)idToString.get(new Integer(id));
- }
-
- /**
- * Retrieve the identifier associated with a given symbol
- * @param symbol The symbol for which we need to retieve the identifier
- * @throws UnsupportedFunctionException Thown when the symbol is not found in the lookup table
- * @return The identifier associated with this string in the lookup table.
- */
- public int getIDFromString(String symbol) throws UnsupportedFunctionException {
- Integer i = (Integer)stringToID.get(symbol);
- if (i == null)
- throw new UnsupportedFunctionException("Token '" + symbol + "' not supported by Pocket Excel");
-
- return ((Integer)stringToID.get(symbol)).intValue();
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java
deleted file mode 100644
index bfd9933936f5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/Token.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-
-import java.io.*;
-
-/**
- * A Token is the basic building block of any formula.
- * A Token can be of four types (Operator, Operand, Function with fixed
- * arguments and function with a variable number of arguments. Each type can
- * have numerous id's. Thetypes are define in <code>ParseToken</code> and the
- * id's are defined in <code>TokenConstants</code>. The other member variables
- * are priority which is returned from the <code>PrecedenceTable</code>, the
- * value which is the String equivalent of the token (eg. "+", "$A$12", "SUM")
- * and the number of arguments which is only valid for operators and functions.
- * Tokens should never be created directly and instead are created by the
- * <code>TokenFactory</code>
- */
-public class Token implements ParseToken {
-
- private String value;
- private int type; // operator, operand, function fixed, function variable
- private int id; // cell reference, SUM, integer
- private int priority;
- private int numArgs=-1;
-
- public Token(String op, int type, int id, int args) {
- this.value = op;
- this.type = type;
- this.id = id;
- this.numArgs = args;
- if(type==ParseToken.TOKEN_FUNCTION_VARIABLE) {
- priority = PrecedenceTable.getPrecedence("FUNCTION");
- } else if(type==ParseToken.TOKEN_OPERATOR) {
- priority = PrecedenceTable.getPrecedence(op);
- } else {
- priority = PrecedenceTable.getPrecedence("DEFAULT");
- }
- }
-
- /**
- * Checks if the current token is an operator
- *
- * @return A <code>boolean</code> result of the comaparison
- */
- public boolean isOperator() {
- return type == ParseToken.TOKEN_OPERATOR;
- }
-
- /**
- * Checks if the current token is an operand
- *
- * @return A <code>boolean</code> result of the comaparison
- */
- public boolean isOperand() {
- return type == ParseToken.TOKEN_OPERAND;
- }
-
- /**
- * Checks if the current token is a function
- *
- * @return A <code>boolean</code> result of the comaparison
- */
- public boolean isFunction() {
- return (type==ParseToken.TOKEN_FUNCTION_FIXED) || (type==ParseToken.TOKEN_FUNCTION_VARIABLE);
- }
-
- /**
- * Returns the token type. This can be one of four values (TOKEN_OPERATOR,
- * TOKEN_OPERAND, TOKEN_FUNCTION_FIXED, TOKEN_FUNCTION_VARIABLE) defined in
- * <code>ParseToken</code>
- *
- * @return A <code>boolean</code> result of the comparison
- */
- public int getTokenType() {
-
- return type;
- }
-
- /**
- * Returns the ID of this token. This ID is equivalent to the pexcel hex
- * value and is defined in <code>ParseToken</code>
- *
- * @return Returns the id of this token
- */
- public int getTokenID() {
-
- return id;
- }
-
- /**
- * Returns the <code>String</code> equivalent of this token
- *
- * @return The <code>String</code> representing this Token
- */
- public String getValue() {
- return value;
- }
-
- /**
- * Returns the number of arguments if this token represents an operator or
- * function. Otherwise returns -1.
- *
- * @return The number of arguments
- */
- public int getNumArgs() {
- return numArgs;
- }
-
- /**
- * Checks if the current token is an operator
- *
- * @return A <code>boolean</code> result of the comparison
- */
- public int getTokenPriority() {
- return priority;
- }
-
- /**
- * Returns the <code>String</code> equivalent of this token
- *
- * @return The <code>String</code> representing this Token
- */
- public String toString() {
- return getValue();
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java
deleted file mode 100644
index 4fd90c6a234e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenConstants.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.io.*;
-
-public interface TokenConstants {
-
- // Unary Operator Tokens
- public static final int TUPLUS = 0x12;
- public static final int TUMINUS = 0x13;
- public static final int TPERCENT = 0x14;
- public static final int TPAREN = 0x15;
- // Binary Operator Tokens
- public static final int TADD = 0x03;
- public static final int TSUB = 0x04;
- public static final int TMUL = 0x05;
- public static final int TDIV = 0x06;
- public static final int TPOWER = 0x07;
- public static final int TCONCAT = 0x08;
-
- //Logical operators
- public static final int TLESS = 0x09;
- public static final int TLESSEQUALS = 0x0A;
- public static final int TEQUALS = 0x0B;
- public static final int TGTEQUALS = 0x0C;
- public static final int TGREATER = 0x0D;
- public static final int TNEQUALS = 0x0E;
-
- // Function Operator Tokens
- public static final int TFUNC = 0x41;
- public static final int TFUNCVAR = 0x42;
-
- // Constant Operand Tokens
- public static final int TSTRING = 0x17;
- public static final int TINT = 0x1E;
- public static final int TNUM = 0x1F;
- // Operand Tokens
- public static final int TREF = 0x44;
- public static final int TAREA = 0x25;
- public static final int TNAME = 0x23;
- public static final int TREF3D = 0x3A;
- public static final int TAREA3D = 0x3B;
-
- //
- public static final int TARGSEP = 0x1001;
- public static final int TCLOSEPAREN = 0x1002;
-
- // Variable argument Functions
- // Math and Trig
- public static final int TSUM = 0x04;
- public static final int TPRODUCT = 0xB7;
- public static final int TSUMIF = 0x0159;
- public static final int TLOG = 0x6D;
- public static final int TRUNC = 0xC5;
- // Financial
- public static final int TDDB = 0x90;
- public static final int TFV = 0x39;
- public static final int TIRR = 0x3E;
- public static final int TNPER = 0x3A;
- public static final int TNPV = 0x0B;
- public static final int TPMT = 0x3B;
- public static final int TPV = 0x38;
- public static final int TRATE = 0x3C;
- // Statistical
- public static final int TAVERAGE = 0x05;
- public static final int TCOUNT = 0x00;
- public static final int TCOUNTA = 0xA9;
- public static final int TMAX = 0x07;
- public static final int TMIN = 0x06;
- public static final int TSTDEV = 0x0C;
- public static final int TSTDEVP = 0xC1;
- public static final int TVAR = 0x2E;
- public static final int TVARP = 0xC2;
- // Lookup
- public static final int TCHOOSE = 0x64;
- public static final int THLOOKUP = 0x65;
- public static final int TINDEX = 0x1D;
- public static final int TMATCH = 0x40;
- public static final int TVLOOKUP = 0x66;
- // Text
- public static final int TRIGHT = 0x74;
- public static final int TSUBSTITUTE = 0x78;
- public static final int TFIND = 0x7c;
- public static final int TLEFT = 0x73;
- // Logical
- public static final int TAND = 0x24; // 42
- public static final int TIF = 0x01; // 42
- public static final int TOR = 0x25; // 42
-
- // Fixed argument Functions
- // Math and Trig
- public static final int TABS = 0x18;
- public static final int TACOS = 0x63;
- public static final int TASIN = 0x62;
- public static final int TATAN = 0x12;
- public static final int TATAN2 = 0x61;
- public static final int TCOS = 0x10;
- public static final int TSIN = 0x0F;
-
- public static final int TCOUNTIF = 0x015A;
- public static final int TDEGREES = 0x0157;
- public static final int TEXP = 0x15;
- public static final int TFACT = 0xB8;
- public static final int TINTE = 0x19;
- public static final int TLN = 0x16;
-
- public static final int TLOG10 = 0x17;
- public static final int TMOD = 0x27;
- public static final int TPI = 0x13;
-
- public static final int TPOWERF = 0x0151;
- public static final int TRADIANS = 0x0156;
- public static final int TRAND = 0x3F;
- public static final int TROUND = 0x1B;
- public static final int TSQRT = 0x14;
- public static final int TTAN = 0x11;
-
- public static final int TSLN = 0x8E;
- public static final int TSYD = 0x8F;
-
- // Date and Time
- public static final int TDATE = 0x41;
- public static final int TDATEVALUE = 0x8C;
- public static final int TDAY = 0x43;
- public static final int THOUR = 0x47;
- public static final int TMINUTE = 0x48;
- public static final int TMONTH = 0x44;
- public static final int TNOW = 0x4A;
- public static final int TSECOND = 0x49;
- public static final int TTIME = 0x42;
- public static final int TTIMEVALUE = 0x8D;
- public static final int TYEAR = 0x45;
- // Statistical
- public static final int TCOUNTBLANK = 0x015B ;
- // lookup
- public static final int TCOLUMNS = 0x4D;
- public static final int TROWS = 0x4C;
- // Database
- public static final int TDAVAERAGE = 0x2A;
- public static final int TDCOUNT = 0x28;
- public static final int TDCOUNTA = 0xC7;
- public static final int TDGET = 0xEB;
- public static final int TDMAX = 0x2C;
- public static final int TDMIN = 0x2B;
- public static final int TDPRODUCT = 0xBD;
- public static final int TDSTDEV = 0x2D;
- public static final int TDSTDEVP = 0xC3;
- public static final int TDSUM = 0x29;
- public static final int TDVAR = 0x2F;
- public static final int TDVARP = 0xC4;
- // Text
- public static final int TEXACT = 0x75;
- public static final int TLEN = 0x20;
- public static final int TLOWER = 0x70;
- public static final int TMID = 0x1F; // ??????
- public static final int TPROPER = 0x72;
- public static final int TREPLACE = 0x77;
- public static final int TREPT = 0x1E;
- public static final int TT = 0x82;
- public static final int TRIM = 0x76;
- public static final int TUPPER = 0x71;
- public static final int TVALUE = 0x21;
- // Logical
- public static final int TFALSE = 0x23;
- public static final int TNOT = 0x26;
- public static final int TTRUE = 0x22;
- // Informational
- public static final int TERRORTYPE = 0x05;
- public static final int TISBLANK = 0x81;
- public static final int TISERR = 0x7E;
- public static final int TISERROR = 0x03;
- public static final int TISLOGICAL = 0xC6;
- public static final int TISNA = 0x02;
- public static final int TISNONTEXT = 0xBE;
- public static final int TISNUMBER = 0x80;
- public static final int TISTEXT = 0x7F;
- public static final int TN = 0x83;
- public static final int TNA = 0x0A;
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java
deleted file mode 100644
index 694e3b796710..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenDecoder.java
+++ /dev/null
@@ -1,498 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.io.*;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.DefinedName;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-
-/**
- * The TokenDecoder decodes a byte[] to an equivalent <code>String</code>. The only
- * public method apart from the default constructor is the getTokenVector method.
- * This method takes an entire formula as a pexcel byte[] and decodes it into
- * a series of <code>Token</code>s. It adds these to a <code>Vector</code> which
- * is returned once all the tokens have been decoded. The Decoder supports
- * the following tokens.<br><br>
- *
- * Operands Floating point's, Cell references (absolute and relative),
- * cell ranges<br>
- * Operators +,-,*,/,&lt;,&gt;.&lt;=,&gt;=,&lt;&gt;<br>
- * Functions All pexcel fixed and varaible argument functions
- *
- */
-public class TokenDecoder {
-
- private TokenFactory tf;
- private FunctionLookup fl;
- private OperatorLookup operatorLookup;
- private OperandLookup operandLookup;
- private Workbook wb;
-
- /**
- * Default Constructor initializes the <code>TokenFactory</code> for generating
- * <code>Token</code> and the <code>SymbolLookup</code> for generating
- * Strings from hex values.
- */
- public TokenDecoder() {
- tf = new TokenFactory();
- fl = new FunctionLookup();
- operatorLookup = new OperatorLookup();
- operandLookup = new OperandLookup();
- }
-
- /**
- * Sets global workbook data needed for defined names
- */
- public void setWorkbook(Workbook wb) {
-
- Debug.log(Debug.TRACE, "TokenDecoder : setWorkbook");
- this.wb = wb;
- }
-
- /**
- * Returns a <code>Vector</code> of <code>Token</code> decoded from a
- * byte[]. The byte[] is first converted to a
- * <code>ByteArrayInputStream</code> as this is the easiest way of reading
- * bytes.
- *
- * @param formula A Pocket Excel Formula byte[]
- * @return A <code>Vector</code> of deoded <code>Token</code>
- */
- public Vector getTokenVector(byte[] formula) {
-
- Vector v = new Vector();
-
- ByteArrayInputStream bis = new ByteArrayInputStream(formula);
- int b = 0 ;
- Token t;
-
- while (bis.available()!=0)
- {
- b = bis.read();
-
- switch (b) {
-
- case TokenConstants.TAREA3D:
- Debug.log(Debug.TRACE, "Decoded 3D Area Cell Reference: ");
- v.add(read3DCellAreaRefToken(bis));
- Debug.log(Debug.TRACE, "Decoded 3D Area Cell Reference: " + v.lastElement());
- break;
- case TokenConstants.TREF3D:
- Debug.log(Debug.TRACE, "Decoded 3D Cell Reference: ");
- v.add(read3DCellRefToken(bis));
- Debug.log(Debug.TRACE, "Decoded 3D Cell Reference: " + v.lastElement());
- break;
- case TokenConstants.TREF :
- v.add(readCellRefToken(bis));
- Debug.log(Debug.TRACE, "Decoded Cell Reference: " + v.lastElement());
- break;
- case TokenConstants.TAREA :
- v.add(readCellAreaRefToken(bis));
- Debug.log(Debug.TRACE, "Decoded Cell Area Reference: " + v.lastElement());
- break;
- case TokenConstants.TNUM :
- v.add(readNumToken(bis));
- Debug.log(Debug.TRACE, "Decoded number : " + v.lastElement());
- break;
- case TokenConstants.TFUNCVAR :
- v.add(readFunctionVarToken(bis));
- Debug.log(Debug.TRACE, "Decoded variable argument function: " + v.lastElement());
- break;
- case TokenConstants.TFUNC :
- v.add(readFunctionToken(bis));
- Debug.log(Debug.TRACE, "Decoded function: " + v.lastElement());
- break;
- case TokenConstants.TSTRING :
- v.add(readStringToken(bis));
- Debug.log(Debug.TRACE, "Decoded string: " + v.lastElement());
- break;
- case TokenConstants.TNAME :
- v.add(readNameToken(bis));
- Debug.log(Debug.TRACE, "Decoded defined name: " + v.lastElement());
- break;
- case TokenConstants.TUPLUS:
- case TokenConstants.TUMINUS:
- case TokenConstants.TPERCENT:
- v.add(readOperatorToken(b, 1));
- Debug.log(Debug.TRACE, "Decoded Unary operator : " + v.lastElement());
- break;
- case TokenConstants.TADD :
- case TokenConstants.TSUB :
- case TokenConstants.TMUL :
- case TokenConstants.TDIV :
- case TokenConstants.TLESS :
- case TokenConstants.TLESSEQUALS :
- case TokenConstants.TEQUALS :
- case TokenConstants.TGTEQUALS :
- case TokenConstants.TGREATER :
- case TokenConstants.TNEQUALS :
- v.add(readOperatorToken(b, 2));
- Debug.log(Debug.TRACE, "Decoded Binary operator : " + v.lastElement());
- break;
-
- default :
- Debug.log(Debug.TRACE, "Unrecognized byte : " + b);
- }
- }
- return v;
- }
-
- /**
- * Converts a zero based integer to a char (eg. a=0, b=1).
- * It assumes the integer is less than 26.
- *
- * @param i A 0 based index
- * @return The equivalent character
- */
- private char int2Char(int i) {
- return (char) ('A' + i);
- }
-
- /**
- * Reads a Cell Reference token from the <code>ByteArrayInputStream</code>
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded String <code>Token</code>
- */
- private Token readStringToken(ByteArrayInputStream bis) {
-
- int len = ((int)bis.read())*2;
- int options = (int)bis.read();
- Debug.log(Debug.TRACE,"String length is " + len + " and Options Flag is " + options);
- byte [] stringBytes = new byte[len];
- int numRead =0;
- if ((numRead = bis.read(stringBytes, 0, len)) != len) {
- Debug.log(Debug.TRACE,"Expected " + len + " bytes. Could only read " + numRead + " bytes.");
- //throw new IOException("Expected " + len + " bytes. Could only read " + numRead + " bytes.");
- }
- StringBuffer outputString = new StringBuffer();
- outputString.append('"');
- try {
- Debug.log(Debug.TRACE,"Using LE encoding");
- outputString.append(new String(stringBytes, "UTF-16LE"));
- } catch (IOException eIO) {
- outputString.append(new String(stringBytes)); //fall back to default encoding
- }
- outputString.append('"');
-
- return (tf.getOperandToken(outputString.toString(), "STRING"));
- }
-
- /**
- * Reads a Defined Name token from the <code>ByteArrayInputStream</code>
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded Name <code>Token</code>
- */
- private Token readNameToken(ByteArrayInputStream bis) {
- byte buffer[] = new byte[2];
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int nameIndex = EndianConverter.readShort(buffer);
- bis.skip(12); // the next 12 bytes are unused
- Enumeration e = wb.getDefinedNames();
- int i = 1;
- while(i<nameIndex) {
- e.nextElement();
- i++;
- }
- Debug.log(Debug.TRACE,"Name index is " + nameIndex);
- DefinedName dn = (DefinedName)e.nextElement();
- Debug.log(Debug.TRACE,"DefinedName is " + dn.getName());
- return (tf.getOperandToken(dn.getName(), "NAME"));
- }
-
- /**
- * Reads a Cell Reference token from the <code>ByteArrayInputStream</code>
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded Cell Reference <code>Token</code>
- */
- private Token readCellRefToken(ByteArrayInputStream bis) {
-
- byte buffer[] = new byte[2];
- String outputString = new String();
-
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int formulaRow = EndianConverter.readShort(buffer);
- int relativeFlags = (formulaRow & 0xC000)>>14;
- formulaRow &= 0x3FFF;
- int formulaCol = (byte) bis.read();
-
- outputString = int2CellStr(formulaRow, formulaCol, relativeFlags);
-
- return (tf.getOperandToken(outputString,"CELL_REFERENCE"));
- }
-
- /**
- * Reads a Cell Reference token from the <code>ByteArrayInputStream</code>
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded Cell Reference <code>Token</code>
- */
- private Token read3DCellRefToken(ByteArrayInputStream bis) {
-
- byte buffer[] = new byte[2];
- String outputString = new String();
-
- bis.skip(10);
-
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int Sheet1 = EndianConverter.readShort(buffer);
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int Sheet2 = EndianConverter.readShort(buffer);
-
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int formulaRow = EndianConverter.readShort(buffer);
- int relativeFlags = (formulaRow & 0xC000)>>14;
- formulaRow &= 0x3FFF;
- int formulaCol = (byte) bis.read();
- String cellRef = "." + int2CellStr(formulaRow, formulaCol, relativeFlags);
- if(Sheet1 == Sheet2) {
- outputString = "$" + wb.getSheetName(Sheet1) + cellRef;
- } else {
- outputString = "$" + wb.getSheetName(Sheet1) + cellRef + ":$" + wb.getSheetName(Sheet2) + cellRef;
- }
-
- return (tf.getOperandToken(outputString,"3D_CELL_REFERENCE"));
- }
-
- /**
- * Reads a Cell Reference token from the <code>ByteArrayInputStream</code>
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded Cell Reference <code>Token</code>
- */
- private Token read3DCellAreaRefToken(ByteArrayInputStream bis) {
-
- byte buffer[] = new byte[2];
- String outputString = new String();
-
- bis.skip(10);
-
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int Sheet1 = EndianConverter.readShort(buffer);
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int Sheet2 = EndianConverter.readShort(buffer);
-
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int formulaRow1 = EndianConverter.readShort(buffer);
- int relativeFlags1 = (formulaRow1 & 0xC000)>>14;
- formulaRow1 &= 0x3FFF;
-
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int formulaRow2 = EndianConverter.readShort(buffer);
- int relativeFlags2 = (formulaRow2 & 0xC000)>>14;
- formulaRow2 &= 0x3FFF;
-
- int formulaCol1 = (byte) bis.read();
- int formulaCol2 = (byte) bis.read();
-
- String cellRef1 = "." + int2CellStr(formulaRow1, formulaCol1, relativeFlags1);
- String cellRef2 = int2CellStr(formulaRow2, formulaCol2, relativeFlags2);
-
- if(Sheet1 == Sheet2) {
- outputString = "$" + wb.getSheetName(Sheet1) + cellRef1 + ":" + cellRef2;
- } else {
- outputString = "$" + wb.getSheetName(Sheet1) + cellRef1 + ":$" + wb.getSheetName(Sheet2) + "." + cellRef2;
- }
-
- return (tf.getOperandToken(outputString,"3D_CELL_AREA_REFERENCE"));
- }
-
- /**
- * Converts a row and col 0 based index to a spreadsheet cell reference.
- * It also has a relativeFlags which indicates whether or not the
- * Cell Reference is relative or absolute (Absolute is denoted with '$')
- *
- * 00 = absolute row, absolute col
- * 01 = absolute row, relative col
- * 10 = relative row, absolute col
- * 11 = relative row, relative col
- *
- * @param row The cell reference 0 based index to the row
- * @param col The cell reference 0 based index to the row
- * @param relativeFlags Flags indicating addressing of row and column
- * @return A <code>String</code> representing a cell reference
- */
- private String int2CellStr(int row, int col, int relativeFlags) {
- String outputString = "";
- int firstChar = (col + 1) / 26;
-
- if((relativeFlags & 1) == 0) {
- outputString += "$";
- }
-
- if(firstChar>0) {
- int secondChar = (col + 1) % 26;
- outputString += Character.toString(int2Char(firstChar - 1)) + Character.toString(int2Char(secondChar - 1));
- } else {
- outputString += Character.toString(int2Char(col));
- }
- if((relativeFlags & 2) == 0) {
- outputString += "$";
- }
- outputString += Integer.toString(row+1);
- return outputString;
- }
-
- /**
- * Reads a Cell Area Reference (cell range) <code>Token</code> from
- * the <code>ByteArrayInputStream</code>
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The equivalent Cell Area Reference (cell range)
- * <code>Token</code>
- */
- private Token readCellAreaRefToken(ByteArrayInputStream bis) {
- byte buffer[] = new byte[2];
- int formulaRow1, formulaRow2;
- int formulaCol1, formulaCol2;
-
- String outputString = new String();
-
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- formulaRow1 = EndianConverter.readShort(buffer);
- int relativeFlags1 = (formulaRow1 & 0xC000)>>14;
- formulaRow1 &= 0x3FFF;
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- formulaRow2 = EndianConverter.readShort(buffer);
- int relativeFlags2 = (formulaRow2 & 0xC000)>>14;
- formulaRow2 &= 0x3FFF;
-
- formulaCol1 = (byte) bis.read();
- formulaCol2 = (byte) bis.read();
-
- outputString = int2CellStr(formulaRow1, formulaCol1, relativeFlags1);
- outputString += (":" + int2CellStr(formulaRow2, formulaCol2, relativeFlags2));
-
- return (tf.getOperandToken(outputString,"CELL_AREA_REFERENCE"));
- }
-
-
- /**
- * Reads a Number (floating point) token from the <code>ByteArrayInputStream</code>
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded Integer <code>Token</code>
- */
- private Token readNumToken(ByteArrayInputStream bis) {
-
- byte numBuffer[] = new byte[8];
-
- for(int j=0;j<8;j++) {
- numBuffer[j]=(byte) bis.read();
- }
-
- return (tf.getOperandToken(Double.toString(EndianConverter.readDouble(numBuffer)),"NUMBER"));
- }
-
- /**
- * Read an Operator token from the <code>ByteArrayInputStream</code>
- *
- * @param b A Pocket Excel number representing an operator.
- * @param args The number of arguments this operator takes.
- * @return The decoded Operator <code>Token</code>
- */
- private Token readOperatorToken(int b, int args) {
-
- Token t;
-
- if(b==TokenConstants.TUPLUS) {
- t = tf.getOperatorToken("+", args);
- } else if(b==TokenConstants.TUMINUS) {
- t = tf.getOperatorToken("-", args);
- } else {
- t = tf.getOperatorToken(operatorLookup.getStringFromID(b), args);
- }
- return t;
- }
-
- /**
- * Read a Function token from the <code>ByteArrayInputStream</code>
- * This function can have any number of arguments and this number is read
- * in with the record
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded variable argument Function <code>Token</code>
- */
- private Token readFunctionVarToken(ByteArrayInputStream bis) {
-
- int numArgs = 0;
- numArgs = bis.read();
- byte buffer[] = new byte[2];
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int functionID = EndianConverter.readShort(buffer);
- return (tf.getFunctionToken(fl.getStringFromID(functionID),numArgs));
- }
-
- /**
- * Read a Function token from the <code>ByteArrayInputStream</code>
- * This function has a fixed number of arguments which it will get
- * from <code>FunctionLookup</code>.
- *
- * @param bis The <code>ByteArrayInputStream</code> from which we read the
- * bytes.
- * @return The decoded fixed argument Function <code>Token</code>
- */
- private Token readFunctionToken(ByteArrayInputStream bis) {
-
- byte buffer[] = new byte[2];
- buffer[0] = (byte) bis.read();
- buffer[1] = (byte) bis.read();
- int functionID = EndianConverter.readShort(buffer);
- String functionName = fl.getStringFromID(functionID);
- return (tf.getFunctionToken(functionName,fl.getArgCountFromString(functionName)));
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java
deleted file mode 100644
index 23af0689d040..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenEncoder.java
+++ /dev/null
@@ -1,561 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.io.*;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.Workbook;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.BoundSheet;
-import org.openoffice.xmerge.converter.xml.sxc.pexcel.records.DefinedName;
-
-/**
- * The TokenEncoder encodes a Token to an equivalent pexcel byte[]. The only
- * public method apart from the default constructor is the getByte method.
- * This method picks an encoder based onthe Token's type or id field and uses
- * that encoder to return a byte[] which it returns. This Encoder supports
- * Operands Floating point's, Cell references (absolute and relative),
- * cell ranges
- * Operators +,-,*,/,&lt;,&gt;.&lt;=,&gt;=,&lt;&gt;
- * Functions All pexcel fixed and varaible argument functions
- *
- */
-public class TokenEncoder {
-
- private FunctionLookup fl;
- private String parseString;
- private int index;
- private Workbook wb;
-
- /**
- * Default Constructor
- */
- public TokenEncoder() {
-
- parseString = new String();
- fl = new FunctionLookup();
- }
-
- /**
- * Sets global workbook data needed for defined names
- */
- public void setWorkbook(Workbook wb) {
-
- this.wb = wb;
- }
-
-
- /**
- * Return the byte[] equivalent of a <code>Token</code>. The various
- * encoders return <code>Vector</code> of <code>Byte</code> instead
- * of byte[] because the number of bytes returned varies with each
- * <code>Token</code> encoded. After the encoding is finished the Vector
- * in converted to a byte[].
- *
- * @param t The <code>Token</code> to be encoded
- * @return An equivalent Pocket Excel byte[]
- */
- public byte[] getByte(Token t) throws IOException {
-
- Vector tmpByteArray = null; // we use this cause we don't know till after
- // the encoding takes place how big the byte [] will be
- //index=0; // This class is declared static in
- // FormulaHelper so better make sure our index is 0
- if(t.getTokenType()==ParseToken.TOKEN_OPERATOR) {
- tmpByteArray = operatorEncoder(t);
- } else if (t.getTokenType()==ParseToken.TOKEN_FUNCTION_VARIABLE || t.getTokenType()==ParseToken.TOKEN_FUNCTION_FIXED){
- tmpByteArray = functionEncoder(t);
- } else { // Operands and functions
- switch(t.getTokenID()) {
- case TokenConstants.TNAME :
- tmpByteArray = nameDefinitionEncoder(t);
- break;
- case TokenConstants.TREF3D :
- tmpByteArray = threeDCellRefEncoder(t);
- break;
- case TokenConstants.TAREA3D:
- tmpByteArray = threeDAreaRefEncoder(t);
- break;
- case TokenConstants.TREF :
- tmpByteArray = cellRefEncoder(t);
- break;
- case TokenConstants.TAREA :
- tmpByteArray = areaRefEncoder(t);
- break;
- case TokenConstants.TNUM :
- tmpByteArray = numEncoder(t);
- break;
- case TokenConstants.TSTRING :
- tmpByteArray = stringEncoder(t);
- break;
- default :
- Debug.log(Debug.ERROR, "Encoder found unrecognized Token");
- }
- }
-
- byte cellRefArray[] = new byte[tmpByteArray.size()];
- int i = 0;
- String s = new String();
- for(Enumeration e = tmpByteArray.elements();e.hasMoreElements();) {
- Byte tmpByte = (Byte) e.nextElement();
- s = s + tmpByte + " ";
- cellRefArray[i] = tmpByte.byteValue();
- i++;
- }
- Debug.log(Debug.TRACE, "Encoding Token " + t.getValue() + " as [" + s + "]");
- return cellRefArray;
- }
-
- /**
- * An Operator Encoder.
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector operatorEncoder(Token t) {
-
- Vector tmpByteArray = new Vector();
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- return tmpByteArray;
- }
-
-
- /**
- * A String Encoder.
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector stringEncoder(Token t) throws IOException{
-
- Vector tmpByteArray = new Vector();
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- tmpByteArray.add(new Byte((byte)(t.getValue().length())));
- tmpByteArray.add(new Byte((byte)0x01));
- byte [] stringBytes = t.getValue().getBytes("UTF-16LE");
- for (int i=0; i<stringBytes.length; i++) {
- tmpByteArray.add(new Byte(stringBytes[i]));
- }
- return tmpByteArray;
- }
-
-
- /**
- * An Integer Encoder.
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector numEncoder(Token t) {
-
- Vector tmpByteArray = new Vector();
-
- double cellLong = (double) Double.parseDouble(t.getValue());
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- byte[] tempByte = EndianConverter.writeDouble(cellLong);
- for(int byteIter=0;byteIter<tempByte.length;byteIter++) {
- tmpByteArray.add(new Byte(tempByte[byteIter]));
- }
- return tmpByteArray;
- }
-
- /**
- * Converts a char to an int. It is zero based
- * so a=0, b=1 etc.
- *
- * @param ch the character to be converted
- * @return -1 if not a character otherwise a 0 based index
- */
- private int char2int(char ch) {
- if(!Character.isLetter(ch))
- return -1;
-
- ch = Character.toUpperCase(ch);
- return ch-'A';
- }
-
- /**
- * Identify letters
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isAlpha(char c) {
- return(Character.isLetter(c));
- }
-
- /**
- * Identify numbers
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isDigit(char c) {
- return(Character.isDigit(c));
- }
-
- /**
- * Identify letters or numbers
- *
- * @param c The character which is to be identified
- * @return A boolean returning the result of the comparison
- */
- private boolean isAlphaNum(char c) {
- return(isAlpha(c) || isDigit(c));
- }
-
- /**
- * Parses a column reference and returns it's integer equivalent. (eg.
- * A=0, D=3, BA=27)
- *
- * @return an 0 based index to a column
- */
- private int column() {
- char ch = parseString.charAt(index);
- String columnStr = new String();
- int col = 0;
-
- while(isAlpha(ch)) {
- columnStr += ch;
- index++;
- ch = parseString.charAt(index);
- }
-
- if(columnStr.length()==1) {
- col = char2int(columnStr.charAt(0));
- } else if (columnStr.length()==2) {
- col = char2int(columnStr.charAt(0)) + 1;
- col = (col*26) + char2int(columnStr.charAt(1));
- } else {
- Debug.log(Debug.ERROR, "Invalid Column Reference " + columnStr );
- }
-
-
- return col;
- }
-
- /**
- * Parses a column reference and returns it's integer equivalent. (eg.
- * A=0, D=3, BA=27)
- *
- * @return an 0 based index to a column
- */
- private int row() {
- char ch = parseString.charAt(index);
- String rowStr = new String();
- int row = 0;
- boolean status = true;
-
- do {
- rowStr += ch;
- index++;
- if(index>=parseString.length()) {
- status = false;
- } else {
- ch = parseString.charAt(index);
- }
- } while(isDigit(ch) && status);
- return Integer.parseInt(rowStr)-1; // Pexcel uses a 0 based index
- }
-
- /**
- * A Cell Reference Encoder (It supports absolute and relative addressing)
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private byte[] encodeCellCoordinates(String cellCoordinates) {
- int col = 0, row = 0;
- int addressing = 0xC000;
-
- index = 0;
- parseString = cellCoordinates;
- Debug.log(Debug.TRACE,"Encoding cell coordinates " + cellCoordinates);
- if(cellCoordinates.charAt(index)=='$') {
- addressing &= 0x8000;
- index++;
- }
- col = column();
- if(cellCoordinates.charAt(index)=='$') {
- addressing &= 0x4000;
- index++;
- }
- row = row(); // Pexcel uses a 0 based index
- row |= addressing;
- byte tokenBytes[] = new byte[3];
- tokenBytes[0] = (byte)row;
- tokenBytes[1] = (byte)(row>>8);
- tokenBytes[2] = (byte)col;
- return tokenBytes;
- }
-
- /**
- * A name definition Encoder
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector nameDefinitionEncoder(Token t) {
-
- Vector tmpByteArray = new Vector();
-
- String nameString = t.getValue();
- Debug.log(Debug.TRACE,"NameDefinitionEncoder : " + nameString);
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- Enumeration e = wb.getDefinedNames();
- DefinedName dn;
- String name;
- int definedNameIndex = 0;
- do {
- dn = (DefinedName)e.nextElement();
- name = dn.getName();
- Debug.log(Debug.TRACE,"Name pulled from DefinedName : " + name);
- definedNameIndex++;
- } while(!nameString.equalsIgnoreCase(name) && e.hasMoreElements());
-
- tmpByteArray.add(new Byte((byte)definedNameIndex));
- tmpByteArray.add(new Byte((byte)0x00));
-
- for(int i = 0;i < 12;i++) {
- tmpByteArray.add(new Byte((byte)0x00));
- }
-
- return tmpByteArray;
- }
- /**
- * A Cell Reference Encoder. It supports absolute and relative addressing
- * but not sheetnames.
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector cellRefEncoder(Token t) {
-
- Vector tmpByteArray = new Vector();
-
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- byte cellRefBytes[] = encodeCellCoordinates(t.getValue());
- for(int i = 0;i < cellRefBytes.length;i++) {
- tmpByteArray.add(new Byte(cellRefBytes[i]));
- }
- return tmpByteArray;
- }
-
- /**
- * This function will find the sheetname index for a given String
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private short findSheetIndex(String s) {
-
- short sheetIndex = 0;
- String savedName;
- String sheetName;
- if (s.startsWith("$")) {
- sheetName = s.substring(1,s.length()); // Remove $
- } else {
- sheetName = s.substring(0,s.length());
- }
- Debug.log(Debug.TRACE,"Searching for Worksheet : " + sheetName);
- Vector names = wb.getWorksheetNames();
- Enumeration e = names.elements();
- do {
- savedName = (String) e.nextElement();
- sheetIndex++;
- } while(!savedName.equalsIgnoreCase(sheetName) && e.hasMoreElements());
-
- Debug.log(Debug.TRACE,"Setting sheetindex to " + sheetIndex);
- return (short)(sheetIndex-1);
- }
-
- /**
- * A 3D Cell reference encoder
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector threeDCellRefEncoder(Token t) {
-
- Vector tmpByteArray = new Vector();
- parseString = t.getValue();
- Debug.log(Debug.TRACE,"Encoding 3D Cell reference " + t);
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- tmpByteArray.add(new Byte((byte)0xFF));
- tmpByteArray.add(new Byte((byte)0xFF));
- for(int i = 0;i < 8;i++) {
- tmpByteArray.add(new Byte((byte)0x00));
- }
-
- String sheetRef = parseString.substring(0, parseString.indexOf('.') + 1);
- if (sheetRef.indexOf(':')!=-1) {
- sheetRef = parseString.substring(0, parseString.indexOf(':'));
- short sheetNum1 = findSheetIndex(sheetRef);
- sheetRef = parseString.substring(parseString.indexOf(':') + 1, parseString.length());
- short sheetNum2 = findSheetIndex(sheetRef);
- tmpByteArray.add(new Byte((byte)sheetNum1));
- tmpByteArray.add(new Byte((byte)0x00));
- tmpByteArray.add(new Byte((byte)sheetNum2));
- tmpByteArray.add(new Byte((byte)0x00));
- } else {
- sheetRef = parseString.substring(0, parseString.indexOf('.'));
- short sheetNum = findSheetIndex(sheetRef);
- tmpByteArray.add(new Byte((byte)sheetNum));
- tmpByteArray.add(new Byte((byte)0x00));
- tmpByteArray.add(new Byte((byte)sheetNum));
- tmpByteArray.add(new Byte((byte)0x00));
- }
- String s = parseString.substring(parseString.indexOf('.') + 1, parseString.length());
- Debug.log(Debug.TRACE,"Parsing : " + s);
- byte cellRefBytes[] = encodeCellCoordinates(s);
- for(int i = 0;i < cellRefBytes.length;i++) {
- tmpByteArray.add(new Byte(cellRefBytes[i]));
- }
- return tmpByteArray;
- }
- /**
- * A 3D Area Reference Encoder.
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector threeDAreaRefEncoder(Token t) {
-
- Vector tmpByteArray = new Vector();
- parseString = t.getValue();
- Debug.log(Debug.TRACE,"Encoding 3D Area reference " + t);
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- tmpByteArray.add(new Byte((byte)0xFF));
- tmpByteArray.add(new Byte((byte)0xFF));
- for(int i = 0;i < 8;i++) {
- tmpByteArray.add(new Byte((byte)0x00));
- }
-
- String param1= parseString.substring(0, parseString.indexOf(':'));
- String cellRef1 = param1.substring(parseString.indexOf('.') + 1, param1.length());
- String sheetRef1 = param1.substring(0, param1.indexOf('.'));
- short sheetNum1 = findSheetIndex(sheetRef1);
-
- String param2 = parseString.substring(parseString.indexOf(':') + 1, parseString.length());
- Debug.log(Debug.TRACE,"param2: " + param2);
- String cellRef2 = param2.substring(param2.indexOf('.') + 1, param2.length());
- Debug.log(Debug.TRACE,"cellRef2: " + cellRef2);
-
- if(param2.indexOf('.')==-1) {
- tmpByteArray.add(new Byte((byte)sheetNum1));
- tmpByteArray.add(new Byte((byte)0x00));
- tmpByteArray.add(new Byte((byte)sheetNum1));
- tmpByteArray.add(new Byte((byte)0x00));
- } else {
- String sheetRef2 = param2.substring(0, param2.indexOf('.'));
- short sheetNum2 = findSheetIndex(sheetRef2);
- tmpByteArray.add(new Byte((byte)sheetNum1));
- tmpByteArray.add(new Byte((byte)0x00));
- tmpByteArray.add(new Byte((byte)sheetNum2));
- tmpByteArray.add(new Byte((byte)0x00));
- }
-
- byte cellRefBytes1[] = encodeCellCoordinates(cellRef1);
- byte cellRefBytes2[] = encodeCellCoordinates(cellRef2);
-
- tmpByteArray.add(new Byte(cellRefBytes1[0]));
- tmpByteArray.add(new Byte(cellRefBytes1[1]));
-
- tmpByteArray.add(new Byte(cellRefBytes2[0]));
- tmpByteArray.add(new Byte(cellRefBytes2[1]));
-
- tmpByteArray.add(new Byte(cellRefBytes1[2]));
- tmpByteArray.add(new Byte(cellRefBytes2[2]));
-
- return tmpByteArray;
- }
-
- /**
- * A Cell Range Encoder.
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector areaRefEncoder(Token t) {
-
- Vector tmpByteArray = new Vector();
-
- tmpByteArray.add(new Byte((byte)t.getTokenID()));
- String param = t.getValue();
- String cellRef1 = new String();
- String cellRef2 = new String();
-
- if(param.indexOf(':')==-1) {
- Debug.log(Debug.ERROR, "Invalid Cell Range, could not find :");
- } else {
- cellRef1 = param.substring(0, param.indexOf(':'));
- cellRef2 = param.substring(param.indexOf(':') + 1, param.length());
- }
- byte cellRefBytes1[] = encodeCellCoordinates(cellRef1);
- byte cellRefBytes2[] = encodeCellCoordinates(cellRef2);
-
- tmpByteArray.add(new Byte(cellRefBytes1[0]));
- tmpByteArray.add(new Byte(cellRefBytes1[1]));
-
- tmpByteArray.add(new Byte(cellRefBytes2[0]));
- tmpByteArray.add(new Byte(cellRefBytes2[1]));
-
- tmpByteArray.add(new Byte(cellRefBytes1[2]));
- tmpByteArray.add(new Byte(cellRefBytes2[2]));
-
- return tmpByteArray;
- }
-
- /**
- * A Function Encoder.
- *
- * @param t <code>Token</code> to be encoded
- * @return A <code>Vector</code> of pexcel <code>Byte</code>
- */
- private Vector functionEncoder(Token t) {
- Vector tmpByteArray = new Vector();
-
- int id = t.getTokenID();
- if(t.getTokenType()==ParseToken.TOKEN_FUNCTION_VARIABLE) {
- tmpByteArray.add(new Byte((byte)TokenConstants.TFUNCVAR));
- tmpByteArray.add(new Byte((byte)t.getNumArgs()));
- } else {
- tmpByteArray.add(new Byte((byte)TokenConstants.TFUNC));
- }
-
- tmpByteArray.add(new Byte((byte)id));
- tmpByteArray.add(new Byte((byte)(id>>8)));
- return tmpByteArray;
- }
-
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java
deleted file mode 100644
index 23efd62cd2ce..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/TokenFactory.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-import java.io.*;
-import java.util.Vector;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This is the Factory class responsible for creating a <code>Token</code>.
- * It has three methods for returning three different types of Tokens
- * (Operator, Operand and Function).
- * This utility class is used by either the <code>FormulaParser</code> or the
- * <code>FormulaDecoder</code>.
- */
-public class TokenFactory {
-
- private OperatorLookup operatorLookup;
- private OperandLookup operandLookup;
- private FunctionLookup fl;
-
- /**
- * Default Constructor
- */
- public TokenFactory() {
- operatorLookup = new OperatorLookup();
- operandLookup = new OperandLookup();
- fl = new FunctionLookup();
- }
-
- /**
- * The Factory method for creating function Tokens
- *
- * @return The created <code>Token</code>
- */
- public Token getFunctionToken(String s, int args) {
- Token t = null;
- // We will have to fix this later to include fixed function tokens
- // Also will need to handle errors where functions names are incorrect???
- Debug.log(Debug.TRACE,"TokenFactory creating function Token : " + s);
- try {
- t = new Token(s, ParseToken.TOKEN_FUNCTION_VARIABLE, fl.getIDFromString(s), args);
- } catch (UnsupportedFunctionException eFn) {
-
- Debug.log(Debug.ERROR, eFn.getMessage());
- }
- return t;
- }
-
- /**
- * The Factory method for creating operator Tokens
- *
- * @return The created <code>Token</code>
- */
- public Token getOperatorToken(String s, int args) {
-
- Token t = null;
-
- Debug.log(Debug.TRACE,"TokenFactory creating operator Token : " + s);
- try {
- if(args==1) {
- if(s.equals("+")) {
- t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString("UNARY_PLUS"), args);
- } else if (s.equals("-")) {
- t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString("UNARY_MINUS"), args);
- } else {
- t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString(s), args);
- }
- } else {
- t = new Token(s, ParseToken.TOKEN_OPERATOR, operatorLookup.getIDFromString(s), args);
- }
- } catch (UnsupportedFunctionException eFn) {
- Debug.log(Debug.ERROR, eFn.getMessage());
- }
- return t;
- }
-
- /**
- * The Factory method for creating Operand Tokens
- *
- * @return The created <code>Token</code>
- */
- public Token getOperandToken(String s, String type) {
- Token t = null;
-
- Debug.log(Debug.TRACE,"TokenFactory creating operand (" + type + ") Token : " + s);
- try {
- t = new Token(s, ParseToken.TOKEN_OPERAND, operandLookup.getIDFromString(type), 0);
- } catch (UnsupportedFunctionException eFn) {
- Debug.log(Debug.ERROR, eFn.getMessage());
- }
-
- return t;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java
deleted file mode 100644
index dcd2bf61a0c4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/UnsupportedFunctionException.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
-
-/*
- * Exception thrown when a function specified in a calc formula has no equivalent in Pocket Excel
- *
- * @author : Mike Hayes
- */
-
-public class UnsupportedFunctionException extends Exception {
- UnsupportedFunctionException(String message) {
- super(message);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/build.xml
deleted file mode 100644
index fa3737f9dc63..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/build.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcxspr_formula" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcxspr_formula"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/FormulaCompiler.java"/>
- <include name="${package}/FormulaHelper.java"/>
- <include name="${package}/FormulaParser.java"/>
- <include name="${package}/FormulaParsingException.java"/>
- <include name="${package}/FunctionLookup.java"/>
- <include name="${package}/OperandLookup.java"/>
- <include name="${package}/Operatorookup.java"/>
- <include name="${package}/ParseToken.java"/>
- <include name="${package}/PrecedenceTable.java"/>
- <include name="${package}/SymbolLookup.java"/>
- <include name="${package}/Token.java"/>
- <include name="${package}/TokenConstants.java"/>
- <include name="${package}/TokenDecoder.java"/>
- <include name="${package}/TokenEncoder.java"/>
- <include name="${package}/TokenFactory.java"/>
- <include name="${package}/UnsupportedFunctionException.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/makefile.mk
deleted file mode 100644
index c549fec7ebeb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxcxs_pexcel
-PRJ=../../../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html
deleted file mode 100644
index 649879a407f6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/formula/package.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
- <title>org.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula package</title>
-
-</head>
- <body bgcolor="white">
-
-<p> This package contains the classes necessary for converting pexcel formula
-to and from StarCalc Formula.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html
deleted file mode 100644
index 7d803d1feba8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/package.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
- <title>org.openoffice.xmerge.converter.xml.sxc.pexcel.records package</title>
-
-</head>
- <body bgcolor="white">
-
-<p> This package contains the objects that represent BIFF Records for the
-pocket excel format. Each one implements the BIFF Record abstract class which
-contains three basic functions (read, write and getBiffType). BIFF Records
-which are not used do not contain setter's or getter's for their member
-variables as some records have a large number of variables. It should be up
-to the implementer which attributes get set and which get set to default
-values.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java
deleted file mode 100644
index 839a63e8bec9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwDocument.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw;
-
-import org.w3c.dom.Document;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * This class is an implementation of <code>OfficeDocument</code> for
- * the SXW format.
- */
-public class SxwDocument extends OfficeDocument {
-
-
- /**
- * Constructor with arguments to set <code>name</code>.
- *
- * @param name The name of the <code>Document</code>
- */
- public SxwDocument(String name) {
- super(name);
- }
-
-
- /**
- * Constructor with arguments to set <code>name</code>, the
- * <code>namespaceAware</code> flag, and the <code>validating</code>
- * flag.
- *
- * @param name The name of the <code>Document</code>.
- * @param namespaceAware The value of the namespaceAware flag.
- * @param validating The value of the validating flag.
- */
- public SxwDocument(String name, boolean namespaceAware, boolean validating) {
-
- super(name, namespaceAware, validating);
- }
-
-
- /**
- * Returns the Office file extension for the SXW format.
- *
- * @return The Office file extension for the SXW format.
- */
- protected String getFileExtension() {
- return OfficeConstants.SXW_FILE_EXTENSION;
- }
-
-
- /**
- * Returns the Office attribute for the SXW format.
- *
- * @return The Office attribute for the SXW format.
- */
- protected String getOfficeClassAttribute() {
- return OfficeConstants.SXW_TYPE;
- }
-
- /**
- * Method to return the MIME type of the document.
- *
- * @return String The document's MIME type.
- */
- protected final String getDocumentMimeType() {
- return OfficeConstants.SXW_MIME_TYPE;
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java
deleted file mode 100644
index 23e2608c242e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/SxwPluginFactory.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.PluginFactory;
-import org.openoffice.xmerge.PluginFactory;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-
-/**
- * General implementation of the <code>PluginFactory</code> interface
- * for SXW documents.
- *
- * @see org.openoffice.xmerge.DocumentDeserializer
- * @see org.openoffice.xmerge.DocumentMerger
- * @see org.openoffice.xmerge.DocumentSerializer
- */
-public abstract class SxwPluginFactory extends PluginFactory {
-
- /**
- * Constructor that caches the <code>ConvertInfo</code> that
- * corresponds to the registry information for this plug-in.
- *
- * @param ci <code>ConvertInfo</code> object.
- */
- public SxwPluginFactory (ConverterInfo ci) {
- super(ci);
- }
-
-
- public Document createOfficeDocument(String name, InputStream is)
- throws IOException {
-
- // read zipped XML stream
- SxwDocument doc = new SxwDocument(name);
- doc.read(is);
- return doc;
- }
-
- public Document createOfficeDocument(String name, InputStream is,boolean isZip)
- throws IOException {
-
- // read XML stream
- SxwDocument doc = new SxwDocument(name);
- doc.read(is,isZip);
- return doc;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java
deleted file mode 100644
index 671ae420bcfc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/ConverterCapabilitiesImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * <p>AportisDoc implementation of <code>ConverterCapabilities</code> for
- * the {@link
- * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>Used with StarWriter XML to/from AportisDoc conversions. The
- * <code>ConverterCapibilies</code> specify which &quot;Office&quot;
- * <code>Document</code> tags and attributes are supported on the
- * &quot;Device&quot; <code>Document</code> format.</p>
- */
-public final class ConverterCapabilitiesImpl
- implements ConverterCapabilities {
-
- public boolean canConvertTag(String tag) {
-
- if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag))
- return true;
- else if (OfficeConstants.TAG_PARAGRAPH.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HEADING.equals(tag))
- return true;
- else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_ITEM.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_HEADER.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPAN.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HYPERLINK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LINE_BREAK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPACE.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TAB_STOP.equals(tag))
- return true;
-
- return false;
- }
-
- public boolean canConvertAttribute(String tag,
- String attribute) {
-
- if (OfficeConstants.TAG_SPACE.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute))
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java
deleted file mode 100644
index 86627c6d7ed3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocConstants.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import org.openoffice.xmerge.converter.palm.PdbUtil;
-
-/**
- * Constants used for encoding and decoding the AportisDoc format.
- *
- * @author Herbie Ong
- */
-interface DocConstants {
-
- /** Creator id. */
- public static final int CREATOR_ID = PdbUtil.intID("REAd");
-
- /** Type id. */
- public static final int TYPE_ID = PdbUtil.intID("TEXt");
-
- /** Constant for uncompressed version. */
- public static final short UNCOMPRESSED = 1;
-
- /** Constant for compressed version. */
- public static final short COMPRESSED = 2;
-
- /** Constant used for spare fields. */
- public static final int SPARE = 0;
-
- /** AportisDoc record size. */
- public static final short TEXT_RECORD_SIZE = 4096;
-
- /** Constant for encoding scheme. */
- public static final String ENCODING = "8859_1";
-
- /** Constant for TAB character. */
- public final static char TAB_CHAR = '\t';
-
- /** Constant for EOL character. */
- public final static char EOL_CHAR = '\n';
-
- /** Constant for SPACE character. */
- public final static char SPACE_CHAR = ' ';
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java
deleted file mode 100644
index 9651e5b10b4d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocDecoder.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-import java.util.ArrayList;
-
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.util.Resources;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxw.DocumentDeserializerImpl}
- * to decode the AportisDoc format. It currently decodes
- * the text content into a single <code>String</code> object.
- *
- * @author Herbie Ong
- */
-final class DocDecoder implements DocConstants {
-
- /** For decoding purposes. */
- private final static int COUNT_BITS = 3;
-
- /** Resources object for I18N. */
- private Resources res = null;
-
-
- /**
- * Default constructor creates a header and a text buffer
- * for holding all the text in the AportisDoc database.
- */
- DocDecoder() {
- res = Resources.getInstance();
- }
-
-
- /**
- * Decode the text records into a single <code>String</code>
- * of text content.
- *
- * @param Record <code>Record</code> array holding AportisDoc
- * contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- String parseRecords(Record[] recs) throws IOException {
-
- // read the header record
- HeaderInfo header = readHeader(recs[0].getBytes());
-
- dumpHeader(header);
-
- // store all the characters in textBuffer
- StringBuffer textBuffer = new StringBuffer(header.textLen);
-
- switch (header.version) {
-
- case COMPRESSED:
- for (int i = 1; i <= header.textRecordCount; i++) {
-
- byte[] bytes = decompress(recs[i].getBytes(),
- header.textRecordSize);
- log("processing " + bytes.length + " bytes");
- String str = new String(bytes, ENCODING);
- textBuffer.append(str);
- }
-
- break;
-
- case UNCOMPRESSED:
- for (int i = 1; i <= header.textRecordCount; i++) {
-
- byte[] bytes = recs[i].getBytes();
- log("processing " + bytes.length + " bytes");
- String str = new String(bytes, ENCODING);
- textBuffer.append(str);
- }
-
- break;
-
- default:
- throw new IOException(res.getString("UNKNOWN_DOC_VERSION"));
-
- }
-
- return textBuffer.toString();
- }
-
-
- /**
- * <p>Decompress the <code>byte</code> array.</p>
- *
- * <p>The resulting uncompressed <code>byte</code> array should
- * be within <code>textRecordSize</code> length, definitely
- * within twice the size it claims, else treat it as a problem
- * with the encoding of that PDB and throw
- * <code>IOException</code>.</p>
- *
- * @param bytes Compressed <code>byte</code> array.
- * @param textRecordSize Size of uncompressed
- * <code>byte</code> array.
- *
- * @throws IOException If <code>textRecordSize</code> &lt;
- * <code>cBytes.length</code>.
- */
- private byte[] decompress(byte[] cBytes, int textRecordSize)
- throws IOException {
-
- // create byte array for storing uncompressed bytes
- // it should be within textRecordSize range, definitely
- // within twice of textRecordSize! if not, then
- // an ArrayIndexOutOfBoundsException will get thrown,
- // and it should be converted into an IOException, and
- // treat it as a conversion error.
- byte[] uBytes = new byte[textRecordSize*2];
-
- int up = 0;
- int cp = 0;
-
- try {
-
- while (cp < cBytes.length) {
-
- int c = cBytes[cp++] & 0xff;
-
- // codes 1...8 mean copy that many bytes
- if (c > 0 && c < 9) {
-
- while (c-- > 0)
- uBytes[up++] = cBytes[cp++];
- }
-
- // codes 0, 9...0x7F represent themselves
- else if (c < 0x80) {
- uBytes[up++] = (byte) c;
- }
-
- // codes 0xC0...0xFF represent "space + ascii char"
- else if (c >= 0xC0) {
- uBytes[up++] = (byte) ' ';
- uBytes[up++] = (byte) (c ^ 0x80);
- }
-
- // codes 0x80...0xBf represent sequences
- else {
- c <<= 8;
- c += cBytes[cp++] & 0xff;
- int m = (c & 0x3fff) >> COUNT_BITS;
- int n = c & ((1 << COUNT_BITS) - 1);
- n += COUNT_BITS;
- while (n-- > 0) {
- uBytes[up] = uBytes[up - m];
- up++;
- }
- }
- }
-
- } catch (ArrayIndexOutOfBoundsException e) {
-
- throw new IOException(
- res.getString("DOC_TEXT_RECORD_SIZE_EXCEEDED"));
- }
-
- // note that ubytes may be larger that the amount of
- // uncompressed bytes, so trim it to another byte array
- // with the exact size.
- byte[] textBytes = new byte[up];
- System.arraycopy(uBytes, 0, textBytes, 0, up);
-
- return textBytes;
- }
-
-
- /**
- * Read the header <code>byte</code> array.
- *
- * @param bytes <code>byte</code> array containing header
- * record data.
- *
- * @return <code>HeaderInfo</code> object.
- *
- * @throws IOException If any I/O error occurs.
- */
- private HeaderInfo readHeader(byte[] bytes) throws IOException {
-
- HeaderInfo header = new HeaderInfo();
-
- ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
- DataInputStream dis = new DataInputStream(bis);
-
- // Normally the first 2 bytes comprised of the version
- // which should either be COMPRESSED or UNCOMPRESSED
- // SmartDoc/Quickword would add a 0x01 to the first
- // byte, thus their version would be 0x0101 for UNCOMPRESSED
- // instead of 0x0001 and 0x0102 for UNCOMPRESSED instead of
- // 0x0002.
-
- dis.readByte();
- header.version = dis.readByte();
-
- // read extra 2 unused bytes
- dis.readShort();
-
- // Read the text length, this should be unsigned 4 bytes.
- // We could store the read value into a long, but then
- // our current buffer limit is the max positive of an int.
- // That is a large enough limit, thus we shall stay with
- // storing the value in an int. If it exceeds, then
- // an IOException should be thrown.
- header.textLen = dis.readInt();
- if (header.textLen < 0) {
- throw new IOException(res.getString("DOC_TEXT_LENGTH_EXCEEDED"));
- }
-
- // read the number of records - unsigned 2 bytes
- header.textRecordCount = ((int) dis.readShort()) & 0x0000ffff;
-
- // read the record size - unsigned 2 bytes
- header.textRecordSize = ((int) dis.readShort()) & 0x0000ffff;
-
- // read extra 4 unused bytes
- dis.readInt();
-
- return header;
- }
-
-
- /**
- * Prints out header info into log. Used for debugging purposes only.
- *
- * @param header <code>HeaderInfo</code> structure.
- */
- private void dumpHeader(HeaderInfo header) {
-
- log("<DOC_INFO ");
- log("version=\"" + header.version + "\" ");
- log("text-length=\"" + header.textLen + "\" ");
- log("number-of-records=\"" + header.textRecordCount + "\" ");
- log("record-size=\"" + header.textRecordSize + "\" />");
- }
-
-
- /**
- * Sends message to the log object.
- *
- * @param str Debug string message.
- */
- private void log(String str) {
- Debug.log(Debug.TRACE, str);
- }
-
-
- /**
- * Inner class to store AportisDoc header information.
- */
- private class HeaderInfo {
-
- /** length of text section */
- int textLen = 0;
-
- /** number of text records */
- int textRecordCount = 0;
-
- /**
- * size of a text record. This is normally the same as
- * TEXT_RECORD_SIZE, but some applications may modify this.
- */
- int textRecordSize = 0;
-
- /** compression type */
- int version = 0;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java
deleted file mode 100644
index 90cf0e5cd1f1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocEncoder.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-import java.util.ArrayList;
-
-import org.openoffice.xmerge.converter.palm.Record;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxw.DocumentSerializerImpl
- * DocumentSerializerImpl} to encode the AportisDoc format.
- * It does not deal with any XML tags. It only knows how to encode
- * from <code>String</code>.
- *
- * @author Herbie Ong
- */
-final class DocEncoder implements DocConstants {
-
- /** Text buffer to contain text section. */
- private StringBuffer textBuffer = null;
-
- /** Length of text section. */
- private int textLen = 0;
-
- /** Number of text records. */
- private int textRecCount = 0;
-
-
- /**
- * Default constructor creates a header and
- * a text buffer for holding all the text in
- * the AportisDoc database.
- */
- DocEncoder() {
-
- textBuffer = new StringBuffer(TEXT_RECORD_SIZE);
- }
-
-
- /**
- * This method appends text into the text section of
- * the AportisDoc database.
- *
- * @param text <code>String</code> to append.
- */
- void addText(String text) {
-
- textBuffer.append(text);
- }
-
-
- /**
- * This method appends text into the text section of
- * the AportisDoc database.
- *
- * @param text <code>char</code> array to append.
- */
- void addText(char[] text) {
-
- textBuffer.append(text);
- }
-
-
- /**
- * This method appends text character into the text
- * section of the AportisDoc database.
- *
- * @param text <code>char</code> to append.
- */
- void addText(char text) {
-
- textBuffer.append(text);
- }
-
-
- /**
- * This method encodes the information given to a
- * palm <code>Record</code> array in the AportisDoc
- * database format.
- *
- * @return <code>Record</code> array holding AportisDoc
- * contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- Record[] getRecords() throws IOException {
-
- byte textBytes[] = processTextBuffer();
- textLen = textBytes.length;
- textRecCount = (short) (textBytes.length / TEXT_RECORD_SIZE);
-
- // recBytes to hold a record of bytes at a time
- byte recBytes[] = new byte[TEXT_RECORD_SIZE];
- int pos = 0;
-
- List textRecords = new ArrayList(textRecCount + 1);
-
- // split textBytes into chunks of Record objects
- // and store in textRecords object.
- for (int i = 0; i < textRecCount; i++) {
-
- System.arraycopy(textBytes, pos, recBytes, 0, recBytes.length);
- pos += recBytes.length;
- Record zRec = new Record(recBytes);
- textRecords.add(zRec);
- }
-
- // there's more if ...
-
- if (pos < textLen) {
-
- textRecCount++;
-
- recBytes = new byte[textLen - pos];
- System.arraycopy(textBytes, pos, recBytes, 0, recBytes.length);
- Record rec = new Record(recBytes);
- textRecords.add(rec);
- }
-
- // construct the Record array and copy
- // references from textRecords.
-
- Record[] allRecords = new Record[textRecords.size() + 1];
-
- allRecords[0] = new Record(getHeaderBytes());
-
- for (int i = 1; i < allRecords.length; i++) {
-
- allRecords[i] = (Record) textRecords.get(i-1);
- }
-
- return allRecords;
- }
-
-
- /**
- * This method converts the text buffer into a <code>byte</code>
- * array with the proper encoding of the text section of the
- * AportisDoc format.
- *
- * TODO: do compression.
- *
- * @return byte[] Converted <code>byte</code> array of text
- * section.
- *
- * @throws IOException If any I/O error occurs.
- */
- private byte[] processTextBuffer() throws IOException
- {
- String str = textBuffer.toString();
- byte bytes[] = str.getBytes(ENCODING);
-
- return bytes;
- }
-
-
- /**
- * This method produces the <code>byte</code> array for the header.
- *
- * @return <code>byte</code> array containing header record data.
- *
- * @throws IOException If any I/O error occurs.
- */
- private byte[] getHeaderBytes() throws IOException
- {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(bos);
-
- // TODO: for now, we shall use UNCOMPRESSED.
- // later, we need to use COMPRESSED or a setting.
- dos.writeShort(UNCOMPRESSED);
- dos.writeShort(SPARE);
- dos.writeInt(textLen);
- dos.writeShort(textRecCount);
- dos.writeShort(TEXT_RECORD_SIZE);
- dos.writeInt(SPARE);
-
- byte[] bytes = bos.toByteArray();
-
- return bytes;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java
deleted file mode 100644
index 98022bcf47d9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentDeserializerImpl.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-
-import java.io.IOException;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.palm.PalmDB;
-import org.openoffice.xmerge.converter.palm.PdbDecoder;
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * <p>AportisDoc implementation of <code>DocumentDeserializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>This converts an file in AportisDoc PDB format to StarOffice
- * XML format.</p>
- *
- * <p>The <code>deserialize</code> method uses a <code>DocDecoder</code>
- * to read the AportisDoc format into a <code>String</code> object, then
- * it calls <code>buildDocument</code> to create a <code>SxwDocument</code>
- * object from it.</p>
- *
- * @author Herbie Ong
- */
-public final class DocumentDeserializerImpl
- implements OfficeConstants, DocConstants, DocumentDeserializer {
-
- /** A <code>ConvertData</code> object assigned to this object. */
- private ConvertData cd = null;
-
-
- /**
- * Constructor that assigns the given <code>ConvertData</code>
- * to this object as input.
- *
- * @param cd A <code>ConvertData</code> object to read data for
- * the conversion process by the <code>deserialize</code>
- * method.
- */
- public DocumentDeserializerImpl(ConvertData cd) {
- this.cd = cd;
- }
-
-
- /**
- * Convert the given <code>ConvertData</code> object
- * into a <code>SxwDocument</code> object.
- *
- * @return Resulting <code>SxwDocument</code> object.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public Document deserialize() throws IOException, ConvertException {
-
- int numberOfPDBs = cd.getNumDocuments();
- Document doc = null;
- int i=0;
- ConvertData cdOut;
- Enumeration e = cd.getDocumentEnumeration();
- while (e.hasMoreElements()) {
- PalmDocument palmDoc = (PalmDocument) e.nextElement();
- PalmDB pdb = palmDoc.getPdb();
-
- log("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- log("<AportisDoc>");
-
- Record[] recs = pdb.getRecords();
- String docName = palmDoc.getName();
- DocDecoder decoder = new DocDecoder();
- String text = decoder.parseRecords(recs);
- doc = buildDocument(docName, text);
-
- log("</AportisDoc>");
- }
-
- return doc;
- }
-
-
- /**
- * Parses the text content of an AportisDoc format and build a
- * <code>SxwDocument</code>.
- *
- * @param docName Name of <code>Document</code>.
- * @param str Text content of AportisDoc format.
- *
- * @return Resulting <code>SxwDocument</code> object.
- *
- * @throws IOException If any I/O error occurs.
- */
- private SxwDocument buildDocument(String docName, String str)
- throws IOException {
-
- // create minimum office xml document.
- SxwDocument sxwDoc = new SxwDocument(docName);
- sxwDoc.initContentDOM();
-
- org.w3c.dom.Document doc = sxwDoc.getContentDOM();
-
- // Grab hold of the office:body tag,
- // Assume there should be one.
- // This is where top level paragraphs will append to.
- NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY);
- Node bodyNode = list.item(0);
-
- // Store all the text in a character array.
- char[] text = str.toCharArray();
-
- // startIndex has 2 purposes:
- // if value is -1, it means that there are no text characters
- // needed to be processed for a Text node. if value >= 0, it
- // is the index of the starting position of a text section
- // for a Text node.
- int startIndex = -1;
-
- // Create a paragraph node to start with.
- Element paraNode = doc.createElement(TAG_PARAGRAPH);
-
- log("<PARA>");
-
- for (int i = 0; i < text.length; i++) {
-
- switch (text[i]) {
-
- case TAB_CHAR:
-
- // Check if there are text to be processed first.
- if (startIndex >= 0) {
- addTextNode(doc, paraNode, text, startIndex, i - 1);
- startIndex = -1;
- }
-
- // Then, add tab element.
- Element tabNode = doc.createElement(TAG_TAB_STOP);
- paraNode.appendChild(tabNode);
-
- log("<TAB/>");
- break;
-
- case EOL_CHAR:
-
- // Check if there are text to be processed first.
- if (startIndex >= 0) {
- addTextNode(doc, paraNode, text, startIndex, i - 1);
- startIndex = -1;
- }
-
- // Then, add the current paragraph to body.
- bodyNode.appendChild(paraNode);
-
- // Create another paragraph element.
- paraNode = doc.createElement(TAG_PARAGRAPH);
-
- log("</PARA>");
- log("<PARA>");
- break;
-
- case SPACE_CHAR:
-
- // count is the number of space chars from i
- int count = 0;
-
- // Do a look ahead and count the number of space chars
- while (text[i + 1 + count] == SPACE_CHAR) {
- count++;
- }
-
- // Need to build a space node ONLY if count is > 1.
-
- if (count > 0) {
-
- // Check if there are text to be processed first
- if (startIndex >= 0) {
- addTextNode(doc, paraNode, text,
- startIndex, i);
- startIndex = -1;
- }
-
- // Then, create a space element
- // with the proper attribute.
- Element spaceNode = doc.createElement(TAG_SPACE);
- spaceNode.setAttribute(ATTRIBUTE_SPACE_COUNT,
- Integer.toString(count));
-
- paraNode.appendChild(spaceNode);
-
- // reposition i to the last space character.
- i += count;
-
- log("<SPACE count=\"" + count + "\" />");
-
- } else {
-
- // If there are no chars for text node yet,
- // consider this one.
- if (startIndex < 0) {
-
- startIndex = i;
- log("<TEXT>");
- }
- }
-
- break;
-
- default:
-
- // If there are no chars for text node yet,
- // this should be the start.
- if (startIndex < 0) {
-
- startIndex = i;
- log("<TEXT>");
- }
-
- break;
- }
- }
-
- int lastIndex = text.length - 1;
-
- // Check if there are text to be processed first.
-
- if (startIndex >= 0) {
- addTextNode(doc, paraNode, text, startIndex, lastIndex);
- }
-
- // Then, add the last paragraph element if it is not added yet.
- if (text[lastIndex] != EOL_CHAR) {
- bodyNode.appendChild(paraNode);
- }
-
- log("</PARA>");
-
- return sxwDoc;
- }
-
-
- /**
- * Add a Text <code>Node</code> to the given paragraph node with the
- * text starting at the given <code>startPos</code> until
- * <code>endPos</code>.
- *
- * @param doc <code>org.w3c.dom.Document</code> object for creating
- * <code>Node</code> objects.
- * @param para The current paragraph <code>Node</code> to append
- * text <code>Node</code>.
- * @param text Array of characters containing text.
- * @param startPos Starting index position for text value.
- * @param endPos End index position for text value.
- */
- private void addTextNode(org.w3c.dom.Document doc, Node para, char text[],
- int startPos, int endPos) {
-
- String str = new String(text, startPos, endPos - startPos + 1);
- Text textNode = doc.createTextNode(str);
- para.appendChild(textNode);
- log(str);
- log("</TEXT>");
- }
-
- /**
- * Sends message to the log object.
- *
- * @param str Debug message.
- */
- private void log(String str) {
-
- Debug.log(Debug.TRACE, str);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java
deleted file mode 100644
index 23b236b41e6a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentMergerImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.MergeException;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.diff.ParaNodeIterator;
-import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm;
-import org.openoffice.xmerge.merger.merge.DocumentMerge;
-import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge;
-import org.openoffice.xmerge.util.Debug;
-
-
-/**
- * AportisDoc implementation of <code>DocumentMerger</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- */
-public class DocumentMergerImpl implements DocumentMerger {
-
- private ConverterCapabilities cc_;
- private org.openoffice.xmerge.Document orig = null;
-
- public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) {
- cc_ = cc;
- this.orig = doc;
- }
-
- public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException {
-
- SxwDocument wdoc1 = (SxwDocument) orig;
- SxwDocument wdoc2 = (SxwDocument) modifiedDoc;
-
- Document doc1 = wdoc1.getContentDOM();
- Document doc2 = wdoc2.getContentDOM();
-
- Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement());
- Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement());
-
- DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm();
-
- // find out the paragrah level diffs
- Difference[] diffTable = diffAlgo.computeDiffs(i1, i2);
-
- if (Debug.isFlagSet(Debug.INFO)) {
- Debug.log(Debug.INFO, "Diff Result: ");
-
- for (int i = 0; i < diffTable.length; i++) {
- Debug.log(Debug.INFO, diffTable[i].debug());
- }
- }
-
- // merge the paragraphs
- NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge();
- DocumentMerge docMerge = new DocumentMerge(cc_, charMerge);
-
- Iterator result = null;
-
- docMerge.applyDifference(i1, i2, diffTable);
- }
-}
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java
deleted file mode 100644
index a2652df792b3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/DocumentSerializerImpl.java
+++ /dev/null
@@ -1,532 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import java.io.IOException;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.palm.PdbEncoder;
-import org.openoffice.xmerge.converter.palm.PdbDecoder;
-import org.openoffice.xmerge.converter.palm.PalmDB;
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.XmlUtil;
-
-/**
- * <p>AportisDoc implementation of
- * org.openoffice.xmerge.DocumentSerializer
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>The <code>serialize</code> method traverses the DOM
- * document from the given <code>Document</code> object. It uses a
- * <code>DocEncoder</code> object for the actual conversion of
- * contents to the AportisDoc format.</p>
- *
- * @author Herbie Ong
- */
-
-
-public final class DocumentSerializerImpl
- implements OfficeConstants, DocConstants, DocumentSerializer {
-
- /** A <code>DocEncoder</code> object for encoding to AportisDoc. */
- private DocEncoder encoder = null;
-
- /** SXW <code>Document</code> object that this converter processes. */
- private SxwDocument sxwDoc = null;
-
-
- /**
- * Constructor.
- *
- * @param doc A SXW <code>Document</code> to be converted.
- */
- public DocumentSerializerImpl(Document doc) {
- sxwDoc = (SxwDocument) doc;
- }
-
-
- /**
- * <p>Method to convert a <code>Document</code> into a PDB.
- * It passes back the converted data as a <code>ConvertData</code>
- * object.</p>
- *
- * <p>This method is not thread safe for performance reasons.
- * This method should not be called from within two threads.
- * It would be best to call this method only once per object
- * instance.</p>
- *
- * @return The <code>ConvertData</code> object containing the output.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData serialize() throws ConvertException, IOException {
-
-
- // get the server document name
-
- String docName = sxwDoc.getName();
-
- // get DOM document
-
- org.w3c.dom.Document domDoc = sxwDoc.getContentDOM();
-
- encoder = new DocEncoder();
-
- // Traverse to the office:body element.
- // There should only be one.
-
- NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY);
- int len = list.getLength();
-
- if (len > 0) {
- Node node = list.item(0);
- traverseBody(node);
- }
-
- // create a ConvertData object.
- //
- Record records[] = encoder.getRecords();
- ConvertData cd = new ConvertData();
-
- PalmDocument palmDoc = new PalmDocument(docName,
- DocConstants.CREATOR_ID, DocConstants.TYPE_ID,
- 0, PalmDB.PDB_HEADER_ATTR_BACKUP, records);
-
- cd.addDocument(palmDoc);
- return cd;
- }
-
-
- /**
- * This method traverses <i>office:body</i> element.
- *
- * @param node <i>office:body</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseBody(Node node) throws IOException {
-
- log("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
- log("<AportisDOC>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH) ||
- nodeName.equals(TAG_HEADING)) {
-
- traverseParagraph(child);
-
- } else if (nodeName.equals(TAG_UNORDERED_LIST)) {
-
- traverseList(child);
-
- } else if (nodeName.equals(TAG_ORDERED_LIST)) {
-
- traverseList(child);
-
- } else {
-
- log("<OTHERS " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
-
- log("</AportisDOC>");
- }
-
-
- /**
- * This method traverses the <i>text:p</i> and <i>text:h</i>
- * element <code>Node</code> objects.
- *
- * @param node A <i>text:p</i> or <i>text:h</i>
- * <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseParagraph(Node node) throws IOException {
-
- log("<PARA>");
- traverseParaContents(node);
- encoder.addText(EOL_CHAR);
- log("</PARA>");
- }
-
-
- /**
- * This method traverses a paragraph content.
- * It uses the <code>traverseParaElem</code> method to
- * traverse into Element <code>Node</code> objects.
- *
- * @param node A paragraph or content <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseParaContents(Node node) throws IOException {
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
- short nodeType = child.getNodeType();
-
- switch (nodeType) {
-
- case Node.TEXT_NODE:
- // this is for grabbing text nodes.
- String s = child.getNodeValue();
-
- if (s.length() > 0) {
- encoder.addText(s);
- }
-
- log("<TEXT>");
- log(s);
- log("</TEXT>");
-
- break;
-
- case Node.ELEMENT_NODE:
-
- traverseParaElem(child);
- break;
-
- case Node.ENTITY_REFERENCE_NODE:
-
- log("<ENTITY_REFERENCE>");
- traverseParaContents(child);
- log("<ENTITY_REFERENCE/>");
- break;
-
- default:
- log("<OTHERS " + XmlUtil.getNodeInfo(node) + " />");
- }
- }
- }
- }
-
-
- /**
- * This method traverses an <code>Element</code> <code>Node</code>
- * within a paragraph.
- *
- * @param node <code>Element</code> <code>Node</code> within a
- * paragraph.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseParaElem(Node node) throws IOException {
-
- String nodeName = node.getNodeName();
-
- if (nodeName.equals(TAG_SPACE)) {
-
- // this is for text:s tags.
- NamedNodeMap map = node.getAttributes();
- Node attr = map.getNamedItem(ATTRIBUTE_SPACE_COUNT);
- StringBuffer space = new StringBuffer(SPACE_CHAR);
- int count = 1;
-
- if (attr != null) {
-
- try {
-
- String countStr = attr.getNodeValue();
- count = Integer.parseInt(countStr.trim());
-
- } catch (NumberFormatException e) {
-
- // TODO: for now, throw IOException.
- // later, perhaps will have to throw
- // some other conversion exception instead.
- throw new IOException(e.getMessage());
- }
- }
-
- for (int j = 0; j < count; j++) {
-
- space.append(SPACE_CHAR);
- }
-
- encoder.addText(space.toString());
-
- log("<SPACE count=\"" + count + "\" />");
-
- } else if (nodeName.equals(TAG_TAB_STOP)) {
-
- // this is for text:tab-stop
- encoder.addText(TAB_CHAR);
-
- log("<TAB/>");
-
- } else if (nodeName.equals(TAG_LINE_BREAK)) {
-
- // commented out by Csaba: There is no point to convert a linebreak
- // into a EOL, because it messes up the number of XML nodes and the
- // merge won't work properly. Other solution would be to implement such
- // nodemerger, which would be able to merge embedded tags in a paragraph
-
- // this is for text:line-break
- // encoder.addText(EOL_CHAR);
-
- log("skipped <LINE-BREAK/>");
-
- } else if (nodeName.equals(TAG_SPAN)) {
-
- // this is for text:span
- log("<SPAN>");
- traverseParaContents(node);
- log("</SPAN>");
-
- } else if (nodeName.equals(TAG_HYPERLINK)) {
-
- // this is for text:a
- log("<HYPERLINK>");
- traverseParaContents(node);
- log("<HYPERLINK/>");
-
- } else if (nodeName.equals(TAG_BOOKMARK) ||
- nodeName.equals(TAG_BOOKMARK_START)) {
-
- log("<BOOKMARK/>");
-
- } else if (nodeName.equals(TAG_TEXT_VARIABLE_SET)
- || nodeName.equals(TAG_TEXT_VARIABLE_GET)
- || nodeName.equals(TAG_TEXT_EXPRESSION)
- || nodeName.equals(TAG_TEXT_USER_FIELD_GET)
- || nodeName.equals(TAG_TEXT_PAGE_VARIABLE_GET)
- || nodeName.equals(TAG_TEXT_SEQUENCE)
- || nodeName.equals( TAG_TEXT_VARIABLE_INPUT)
- || nodeName.equals(TAG_TEXT_TIME)
- || nodeName.equals( TAG_TEXT_PAGE_COUNT)
- || nodeName.equals(TAG_TEXT_PAGE_NUMBER )
- || nodeName.equals(TAG_TEXT_SUBJECT)
- || nodeName.equals(TAG_TEXT_TITLE)
- || nodeName.equals(TAG_TEXT_CREATION_TIME)
- || nodeName.equals(TAG_TEXT_DATE)
- || nodeName.equals(TAG_TEXT_TEXT_INPUT)
- || nodeName.equals(TAG_TEXT_AUTHOR_INITIALS)) {
- log("<FIELD>");
- traverseParaContents(node);
- log("</FIELD>");
-
- }else if (nodeName.startsWith(TAG_TEXT)) {
- log("<Unknown text Field>");
- traverseParaContents(node);
- log("</Unknown text Field>");
-
- }else {
-
- log("<OTHERS " + XmlUtil.getNodeInfo(node) + " />");
- }
- }
-
-
- /**
- * This method traverses list tags <i>text:unordered-list</i> and
- * <i>text:ordered-list</i>. A list can only contain one optional
- * <i>text:list-header</i> and one or more <i>text:list-item</i>
- * elements.
- *
- * @param node A list <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseList(Node node) throws IOException {
-
- log("<LIST>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
-
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_LIST_ITEM)) {
-
- traverseListItem(child);
-
- } else if (nodeName.equals(TAG_LIST_HEADER)) {
-
- traverseListHeader(child);
-
- } else {
-
- log("<INVALID-XML-BUG " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
-
- log("</LIST>");
- }
-
-
- /**
- * This method traverses a <i>text:list-header</i> element.
- * It contains one or more <i>text:p</i> elements.
- *
- * @param node A list header <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseListHeader(Node node) throws IOException {
-
- log("<LIST-HEADER>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
-
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH)) {
-
- traverseParagraph(child);
-
- } else {
-
- log("<INVALID-XML-BUG " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
-
- log("</LIST-HEADER>");
- }
-
-
- /**
- * <p>This method will traverse a <i>text:list-item</i>.
- * A list item may contain one or more of <i>text:p</i>,
- * <i>text:h</i>, <i>text:section</i>, <i>text:ordered-list</i>
- * and <i>text:unordered-list</i>.</p>
- *
- * <p>This method currently only implements grabbing <i>text:p</i>,
- * <i>text:h</i>, <i>text:unordered-list</i> and
- * <i>text:ordered-list</i>.</p>
- *
- * @param node The <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseListItem(Node node) throws IOException {
-
- log("<LIST-ITEM>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
-
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH)) {
-
- traverseParagraph(child);
-
- } else if (nodeName.equals(TAG_UNORDERED_LIST)) {
-
- traverseList(child);
-
- } else if (nodeName.equals(TAG_ORDERED_LIST)) {
-
- traverseList(child);
-
- } else {
-
- log("<INVALID-XML-BUG " + XmlUtil.getNodeInfo(child) + " />");
- }
- }
- }
- }
-
- log("</LIST-ITEM>");
- }
-
-
- /**
- * Logs debug messages.
- *
- * @param str The debug message.
- */
- private void log(String str) {
-
- Debug.log(Debug.TRACE, str);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java
deleted file mode 100644
index d1de0b19a6ab..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/PluginFactoryImpl.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.aportisdoc;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.DocumentMergerFactory;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.DocumentSerializerFactory;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.DocumentDeserializerFactory;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * <p>AportisDoc implementation of the <code>PluginFactory</code>.
- * This encapsulates conversion of StarWriter XML format to and from
- * AportisDoc format.</p>
- *
- * <p>The superclass produces a particular
- * {@link org.openoffice.xmerge.Document Document}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxw.SxwDocument
- * SxwDocument} that the converters in this class works with. Thus,
- * this class only implements the methods that produces the converters,
- * i.e. {@link
- * org.openoffice.xmerge.DocumentSerializer
- * DocumentSerializer} and {@link
- * org.openoffice.xmerge.DocumentDeserializer
- * DocumentDeserializer};
- * as well as the {@link
- * org.openoffice.xmerge.ConverterCapabilities
- * ConverterCapabilities} object that is specific to this format
- * conversion. That superclass also produces a {@link
- * org.openoffice.xmerge.DocumentMerger DocumentMerger}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentMergerImpl
- * DocumentMergerImpl} which this class derives the functionality.</p>
- *
- * @author Herbie Ong
- */
-public final class PluginFactoryImpl extends SxwPluginFactory
- implements DocumentDeserializerFactory, DocumentSerializerFactory,
- DocumentMergerFactory {
-
- public PluginFactoryImpl (ConverterInfo ci) {
- super(ci);
- }
-
- /** ConverterCapabilities object for this type of conversion. */
- private final static ConverterCapabilities converterCap =
- new ConverterCapabilitiesImpl();
-
-
- /**
- * Returns an instance of <code>DocumentSerializerImpl</code>,
- * which is an implementation of the <code>DocumentSerializer</code>
- * interface.
- *
- * @param doc <code>Document</code> object to be
- * converted/serialized.
- *
- * @return A <code>DocumentSerializerImpl</code> object.
- */
- public DocumentSerializer createDocumentSerializer(Document doc) {
-
- return new DocumentSerializerImpl(doc);
- }
-
-
- /**
- * Returns an instance of <code>DocumentDeserializerImpl</code>,
- * which is an implementation of the <code>DocumentDeserializer</code>
- * interface.
- *
- * @param cd <code>ConvertData</code> object for reading data
- * which will be converted back to a
- * <code>Document</code> object.
- *
- * @return A DocumentDeserializerImpl object.
- */
- public DocumentDeserializer createDocumentDeserializer(ConvertData cd) {
-
- return new DocumentDeserializerImpl(cd);
- }
-
-
- /**
- * Returns an instance of <code>DocumentMergerImpl</code>,
- * which is an implementation of the <code>DocumentMerger</code>
- * interface.
- *
- * @param doc <code>Document</code> to merge.
- *
- * @return A DocumentMergerImpl object.
- */
- public DocumentMerger createDocumentMerger(Document doc) {
-
- ConverterCapabilities cc = converterCap;
- DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc);
- return merger;
- }
-
- public Document createDeviceDocument(String name, InputStream is)
- throws IOException {
-
- PalmDocument palmDoc = new PalmDocument(is);
- return palmDoc;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/build.xml
deleted file mode 100644
index b6efd3e2bec3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/build.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcxs_aportisdoc" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcxs_aportisdoc"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxw/aportisdoc"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/DocConstants.java"/>
- <include name="${package}/DocDecoder.java"/>
- <include name="${package}/DocEncoder.java"/>
- <include name="${package}/DocumentDeserializerImpl.java"/>
- <include name="${package}/DocumentSerializerImpl.java"/>
- <include name="${package}/DocumentMergerImpl.java"/>
- <include name="${package}/ConverterCapabilitiesImpl.java"/>
- <include name="${package}/PluginFactoryImpl.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/converter.xml
deleted file mode 100644
index 7942295c004a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/converter.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<converters>
- <converter type="staroffice/sxw" version="1.0">
- <converter-display-name>
- AportisDoc
- </converter-display-name>
- <converter-description>
- StarWriter XML to/from AportisDoc conversion
- </converter-description>
- <converter-vendor>OpenOffice.org</converter-vendor>
- <converter-class-impl>
- org.openoffice.xmerge.converter.xml.sxw.aportisdoc.PluginFactoryImpl
- </converter-class-impl>
- <converter-target type="application/x-aportisdoc" />
- </converter>
-</converters>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/makefile.mk
deleted file mode 100644
index 5b3f3fea509d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxcxs_aportisdoc
-PRJ=../../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html
deleted file mode 100644
index 78cfe79bfbbf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/aportisdoc/package.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.converter.xml.sxw.aportisdoc package</title>
-</head>
-
-<body bgcolor="white">
-
-<p>Provides the tools for doing the conversion of StarWriter XML to
-and from AportisDoc format.</p>
-
-<p>It follows the {@link org.openoffice.xmerge} framework for the conversion process.</p>
-
-<p>Since it converts to/from a Palm application format, these converters
-follow the <a href=../../../../converter/palm/package-summary.html#streamformat>
-<code>PalmDB</code> stream format</a> for writing out to the Palm sync client or
-reading in from the Palm sync client.</p>
-
-<p>Note that <code>PluginFactoryImpl</code> also provides a
-<code>DocumentMerger</code> object, i.e. {@link org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentMergerImpl DocumentMergerImpl}.
-This functionality was derived from its superclass
-{@link org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory
-SxwPluginFactory}.</p>
-
-<h2>AportisDoc pdb format - Doc</h2>
-
-<p>The AportisDoc pdb format is widely used by different Palm applications,
-e.g. QuickWord, AportisDoc Reader, MiniWrite, etc. Note that some
-of these applications put tweaks into the format. The converters will only
-support the default AportisDoc format, plus some very minor tweaks to accommodate
-other applications.</p>
-
-<p>The text content of the format is plain text, i.e. there are no styles
-or structures. There is no notion of lists, list items, paragraphs,
-headings, etc. The format does have support for bookmarks.</p>
-
-<p>For most Doc applications, the default character encoding supported is
-the extended ASCII character set, i.e. ISO-8859-1. StarWriter XML is in
-UTF-8 encoding scheme. Since UTF-8 encoding scheme covers more characters,
-converting UTF-8 strings into extended ASCII would mean that there can be
-possible loss of character mappings.</p>
-
-<p>Using JAXP, XML files can be parsed and read in as Java <code>String</code>s
-which is in Unicode format, there is no loss of character mapping from UTF-8
-to Java Strings. There is possible loss of character mapping in
-converting Java <code>String</code>s to ASCII bytes. Java characters that
-cannot be represented in extended ASCII are converted into the ASCII
-character '?' or x3F in hex digit via the <code>String.getBytes(encoding)</code>
-API.</p>
-
-<h2>SXW to DOC Conversion</h2>
-
-<p>The <code>DocumentSerializerImpl</code> class implements the
-<code>org.openoffice.xmerge.DocumentSerializer</code>.
-This class specifically provides the conversion process from a given
-<code>SxwDocument</code> object to DOC formatted records, which are
-then passed back to the client via the <code>ConvertData</code> object.</p>
-
-<p>The following XML tags are handled. [Note that some may not be implemented yet.]</p>
-<ul>
-<li>
- <p>Paragraphs <tt>&lt;text:p&gt;</tt> and Headings <tt>&lt;text:h&gt;</tt></p>
-
- <p>Heading elements are classified the same as paragraph
- elements since both have the same possible elements inside.
- Their main difference is that they refer to different types
- of style information, which is outside of their element tags.
- Since there are no styles on the DOC format, headings should
- be treated the same way a paragraph is converted.</p>
-
- <p>For paragraph elements, convert and transfer text nodes
- that are essential. Text nodes directly contained within paragraph
- nodes are such. There are also a number of elements that
- a paragraph element may contain. These are explained in their
- own context.</p>
-
- <p>At the end of the paragraph, an EOL character is added by
- the converter to provide a separation for each paragraph,
- since the Doc format does not have a notion of a paragraph.</p>
-</li>
-<li>
- <p>White spaces <tt>&lt;text:s&gt;</tt> and Tabs <tt>&lt;text:tab-stop&gt;</tt></p>
-
- <p>In SXW, normally 2 or more white-space characters are collapsed into
- a single space character. In order to make sure that the document
- content really contains those white-space characters, there are special
- elements assigned to them.</p>
-
- <p>The space element specifies the number of spaces are in it.
- Thus, converting it just means providing the specific number of spaces
- that the element requires.</p>
-
- <p>There is also the tab-stop element. This is a bit tricky. In a
- StarWriter document, tab-stops are specified by a column position.
- A tab is not an exact number of space, but rather a specific column
- positioning. Say, regular tab-stops are set at every 5th column.
- At column 4, if I hit a tab, it goes to column 5. At column 1, hitting
- a tab would put the cursor at column 5 as well. SmartDoc and AporticDoc
- applications goes by columns for the ASCII tab character. The only problem
- is that in StarWriter, one could specify a different tab-stop, but not
- in most of these Doc applications, at least I have not seen one.
- Solution for this is just to go with the converting to the ASCII tab
- character and not do anything for different tab-stop positioning.</p>
-</li>
-<li>
- <p>Line breaks <tt>&lt;text:line-break&gt;</tt></p>
-
- <p>To represent line breaks, it is simpliest to just put an ASCII LF
- character. Note that the side effect of this is that an end of paragraph
- also contains an ASCII LF character. Thus, for the DOC to SXW conversion,
- line breaks are not distinguishable from specifying the end of a
- paragraph.</p>
-</li>
-<li>
- <p>Text spans <tt>&lt;text:span&gt;</tt></p>
-
- <p>Text spans contain text that have different style attributes
- from the paragraphs'. Text spans can be embedded within another
- text span. Since it is purely for style tagging, we only needed
- to convert and transfer the text elements within these.</p>
-</li>
-<li>
- <p>Hyperlinks <tt>&lt;text:a&gt;</tt>
-
- <p>Convert and transfer the text portion.</p>
-</li>
-<li>
- <p>Bookmarks <tt>&lt;text:bookmark&gt;</tt> <tt>&lt;text:bookmark-start&gt;</tt>
- <tt>&lt;text:bookmark-end&gt;</tt> [Not implemented yet]</p>
-
- <p>In SXW, bookmark elements are embedded inside paragraph elements.
- Bookmarks can either mark a text position or a text range. <tt>&lt;text:bookmark&gt;</tt>
- marks a position while the pair <tt>&lt;text:bookmark-start&gt;</tt> and
- <tt>&lt;text:bookmark-end&gt;</tt></p> marks a text range. The DOC format only
- supports bookmarking a text position. Thus, for the conversion,
- <tt>&lt;text:bookmark&gt;</tt> and <tt>&lt;text:bookmark-start&gt;</tt> will both mark
- a text position.</p>
-</li>
-<li>
- <p>Change Tracking <tt>&lt;text:tracked-changes&gt;</tt>
- <tt>&lt;text:change*&gt;</tt> [Not implemented yet]</p>
-
- <p>Change tracking elements are not supported yet on the current
- OpenOffice XML filters, will have to watch out on this. The text
- within these elements have to be interpreted properly during the
- conversion process.</p>
-</li>
-<li>
- <p>Lists <tt>&lt;text:unordered-list&gt;</tt> and
- <tt>&lt;text:ordered-lists&gt;</tt></p>
-
- <p>A list can only contain one optional <tt>&lt;text:list-header&gt;</tt>
- and one or more <tt>&lt;text:list-item&gt;</tt> elements.</p>
-
- <p>A <tt>&lt;text:list-header&gt;</tt> contains one or more paragraph
- elements. Since there are no styles, the conversion process does not
- do anything special for list headers, conversion for the paragraphs
- within list headers are the same as explained above.</p>
-
- <p>A <tt>&lt;text:list-item&gt;</tt> may contain one or more of paragraphs,
- headings, list, etc. Since the Doc format does not support any list
- structure, there will not be any special handling for this element.
- Conversion for elements within it shall be applied according to the
- element type. Thus, lists with paragraphs within it will result in just
- plain paragraphs. Sublists will not be identifiable. Paragraphs in
- sublists will still appear.</p>
-</li>
-<li>
- <p><tt>&lt;text:section&gt;</tt></p>
-
- <p>I am not sure what this is yet, will need to investigate more on this.</p>
-</li>
-</ul>
-<p>There may be other tags that will still need to be addressed for this conversion.</p>
-
-<p>Refer to {@link org.openoffice.xmerge.converter.xml.sxw.aportisdoc.DocumentSerializerImpl DocumentSerializerImpl}
-for details of implementation. It uses <code>DocEncoder</code> class to do the encoding
-part.</p>
-
-<h2>DOC to SXW Conversion</h2>
-
-<p>The <code>DocumentDeserializerImpl</code> class implements the
-<code>org.openoffice.xmerge.DocumentDeserializer</code>. It is
-passed the device document in the form of a <code>ConvertData</code> object.
-It will then create a <code>SxwDocument</code> object from the conversion of
-the DOC formatted records.</p>
-
-<p>The text content of the Doc format will be transferred as text. Paragraph
-elements will be formed based on the existence of an ASCII LF character. There
-will be at least one paragraph element.</p>
-
-<p>Bookmarks in the Doc format will be converted to the bookmark element
-<tt>&lt;text:bookmark&gt;</tt> [Not implemented yet].</p>
-
-
-<h2>Merging changes</h2>
-
-<p>As mentioned above, the <code>DocumentMerger</code> object produced by
-<code>PluginFactoryImpl</code> is <code>DocumentMergerImpl</code>.
-Refer to the javadocs for that package/class on its merging specifications.
-</p>
-
-<h2>TODO list</h2>
-
-<p><ol>
-<li>Investigate Palm's with different character encodings.</li>
-<li>Investigate other StarWriter XML tags</li>
-</ol></p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/build.xml
deleted file mode 100644
index 02936516e7c9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/build.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcx_sxw" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcx_sxw"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxw"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/SxwDocument.java"/>
- <include name="${package}/SxwPluginFactory.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/makefile.mk
deleted file mode 100644
index c4953812ef58..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxcx_sxw
-PRJ=../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html
deleted file mode 100644
index 409f041fffb2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/package.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.converter.xml.sxw package</title>
-</head>
-
-<body bgcolor="white">
-<p>Provides base implementation of StarWriter XML conversion to and from
-different &quot;Device&quot; <code>Document</code> formats.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java
deleted file mode 100644
index 4e4aaf164e7a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ConverterCapabilitiesImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * <p>PocketWord implementation of <code>ConverterCapabilities</code> for
- * the {@link
- * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>Used with StarWriter XML to/from PocketWord conversions. The
- * <code>ConverterCapibilies</code> specify which &quot;Office&quot;
- * <code>Document</code> tags and attributes are supported on the
- * &quot;Device&quot; <code>Document</code> format.</p>
- */
-public final class ConverterCapabilitiesImpl
- implements ConverterCapabilities {
-
- public boolean canConvertTag(String tag) {
-
- if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag))
- return true;
- else if (OfficeConstants.TAG_PARAGRAPH.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HEADING.equals(tag))
- return true;
- else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_ITEM.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_HEADER.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPAN.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HYPERLINK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LINE_BREAK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPACE.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TAB_STOP.equals(tag))
- return true;
-
- return false;
- }
-
- public boolean canConvertAttribute(String tag,
- String attribute) {
-
- if (OfficeConstants.TAG_SPACE.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute))
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java
deleted file mode 100644
index 3e5f6e6827ff..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDescriptor.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import org.openoffice.xmerge.util.EndianConverter;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.io.IOException;
-
-import java.util.Vector;
-
-
-/**
- * This class to represent the data structure stored by a Pocket Word file that
- * describes that file.
- *
- * The data structure is of variable length, beginning at the end of the
- * font declarations and ending 10 bytes before the first instance of 0xFF 0xFF
- * marking a paragraph block.
- *
- * The variable length component arises from an 8 byte structure describing each
- * paragraph in the document. These paragraph descriptors appear at the end
- * of the Document Descriptor.
- *
- * @author Mark Murnane
- * @version 1.1
- */
-class DocumentDescriptor {
- private short numParagraphs = 0;
- private short length = 0;
- private short numLines = 0;
-
- private Vector paragraphDesc = null;
-
- DocumentDescriptor() {
- paragraphDesc = new Vector(0, 1);
- }
-
-
-
- /**
- * Updates the <code>DocumentDescriptor</code> to include details of another
- * paragraph in the document.
- *
- * @param len The number of characters in the paragraph.
- * @param lines The number of lines on screen that the paragraph uses.
- */
- public void addParagraph(short len, short lines) {
- ParagraphDescriptor pd = new ParagraphDescriptor(len, lines);
-
- paragraphDesc.add(pd);
- numParagraphs++;
- numLines += lines;
- length += pd.length;
- }
-
-
- /**
- * Retrieve the <code>DocumentDescriptor's</code> data. Due to the variable
- * length nature of the descriptor, certain fields can only be
- * calculated/written after the addition of all paragraphs.
- *
- * @return Byte array containing the Pocket Word representation of this
- * <code>DocumentDescriptor</code>.
- */
- public byte[] getDescriptor () {
- ByteArrayOutputStream descStream = new ByteArrayOutputStream();
-
- writeHeader(descStream);
-
- /*
- * This value seems to increment by 0x02 for each paragraph.
- * For a single paragraph doc, the value is 0x08, 0x0A for two,
- * 0x0C for three ...
- */
- try {
- descStream.write(EndianConverter.writeShort((short)(6 +
- (numParagraphs * 2))));
-
- descStream.write(EndianConverter.writeShort(numParagraphs));
- descStream.write(EndianConverter.writeShort((short)0));
- descStream.write(EndianConverter.writeShort(numParagraphs));
-
- descStream.write(EndianConverter.writeShort((short)0));
- descStream.write(EndianConverter.writeShort((short)length));
- descStream.write(EndianConverter.writeShort((short)0));
-
- descStream.write(EndianConverter.writeShort(numLines));
- descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00 } );
-
- for (int i = 0; i < paragraphDesc.size(); i++) {
- ParagraphDescriptor pd = (ParagraphDescriptor)paragraphDesc.elementAt(i);
-
- descStream.write(pd.getDescriptor());
- }
-
- // Byte sequence marking the end of this DocumentDescriptor
- descStream.write(EndianConverter.writeShort((short)0));
- descStream.write(EndianConverter.writeShort((short)0x41));
- }
- catch (IOException ioe) {
- // Should never happen as this is a memory based stream.
- }
-
- return descStream.toByteArray();
- }
-
-
- /*
- * This method loads the intial fixed portion of the descriptor and the
- * mid-section. The mid-section is variable but Pocket Word doesn't seem
- * to mind default values.
- */
- private void writeHeader(OutputStream descStream) {
-
- try {
- descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00,
- 0x07, 0x00, 0x06, 0x00,
- 0x15, 0x00, 0x10, 0x00,
- 0x01, 0x00, (byte)0xD0, 0x2F,
- 0x00, 0x00, (byte)0xE0, 0x3D,
- 0x00, 0x00, (byte)0xF0, 0x00,
- 0x00, 0x00, (byte)0xA0, 0x05,
- 0x00, 0x00, (byte)0xA0, 0x05,
- 0x00, 0x00, (byte)0xA0, 0x05,
- 0x00, 0x00, (byte)0xA0, 0x05,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x0A, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x0A, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x04, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00,
- 0x07, 0x00, 0x10, 0x00,
- 0x01, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x12, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x1F, 0x04, 0x00, 0x00 } );
-
- /*
- * The next four bytes are variable, but a pattern hasn't yet been
- * established. Pocket Word seems to accept this constant value.
- *
- * The bytes are repeated after another 12 byte sequence which does
- * not seem to change from one file to the next.
- */
- descStream.write(new byte[] { (byte)0xE2, 0x02, 0x00, 0x00 } );
- descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x3D, 0x04, 0x00, 0x00 } );
- descStream.write(new byte[] { (byte)0xE2, 0x02, 0x00, 0x00 } );
-
- descStream.write(new byte[] { 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x00, 0x08, 0x00 } );
- }
- catch (IOException ioe) {
- /* Shouldn't happen with a ByteArrayOutputStream */
- }
- }
-
-
- /**
- * <code>ParagraphDescriptor</code> represents the data structure used to
- * describe individual paragraphs within a <code>DocumentDescriptor.</code>
- *
- * It is used solely by the <code>DocumentDescriptor<code> class.
- */
- private class ParagraphDescriptor {
- private short filler = 0;
- private short lines = 0;
- private short length = 0;
- private short unknown = 0x23;
-
- public ParagraphDescriptor(short len, short numLines) {
- lines = numLines;
- length = (short)(len + 1);
- }
-
- public byte[] getDescriptor() {
- ByteArrayOutputStream desc = new ByteArrayOutputStream();
-
- try {
- desc.write(EndianConverter.writeShort(filler));
- desc.write(EndianConverter.writeShort(lines));
- desc.write(EndianConverter.writeShort(length));
- desc.write(EndianConverter.writeShort(unknown));
- }
- catch (IOException ioe) {
- /* Should never happen */
- }
-
- return desc.toByteArray();
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java
deleted file mode 100644
index 373df77886f8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentDeserializerImpl.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.DocumentDeserializer;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-
-import org.openoffice.xmerge.converter.xml.ParaStyle;
-import org.openoffice.xmerge.converter.xml.TextStyle;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-
-import org.openoffice.xmerge.util.OfficeUtil;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.FileDescriptor;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-
-/**
- * <p>Pocket Word implementation of <code>DocumentDeserializer</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>This converts a Pocket Word file to an OpenOffice Writer XML DOM.</p>
- *
- * @author Mark Murnane
- * @version 1.1
- */
-public final class DocumentDeserializerImpl
- implements DocumentDeserializer, OfficeConstants {
-
- private PocketWordDocument pswDoc = null;
- private SxwDocument sxwDoc = null;
- private String docName;
-
- private StyleCatalog styleCat = null;
-
-
- /**
- * Initialises a new <code>DocumentDeserializerImpl</code> using the
- * supplied <code>ConvertData</code>.</p>
- *
- * <p>The <code>Document</code> objects in the <code>ConvertData</code>
- * should be {@link
- * org.openoffice.xmerge.converter.xml.sxw.pocketword.PocketWordDocument
- * PocketWordDocument} objects.</p>
- *
- * @param cd ConvertData containing a <code>PocketWordDocument</code>
- * for conversion.
- */
- public DocumentDeserializerImpl(ConvertData cd) {
- Enumeration e = cd.getDocumentEnumeration();
-
- // A Pocket Word file is composed of one binary file
- while (e.hasMoreElements()) {
- pswDoc = (PocketWordDocument)e.nextElement();
- }
-
- docName = pswDoc.getName();
- }
-
-
- /**
- * <p>Convert the data passed into the <code>DocumentDeserializer</code>
- * constructor into the OpenOffice Writer <code>Document</code>
- * format.</p>
- *
- * <p>This method may or may not be thread-safe. It is expected
- * that the user code does not call this method in more than one
- * thread. And for most cases, this method is only done once.</p>
- *
- * @return The resulting <code>Document</code> object from conversion.
- *
- * @throws ConvertException If any Convert error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public Document deserialize() throws IOException, ConvertException {
- Enumeration pe = pswDoc.getParagraphEnumeration();
-
- sxwDoc = new SxwDocument (docName);
- sxwDoc.initContentDOM();
-
- // Default to an initial 5 entries in the catalog.
- styleCat = new StyleCatalog(5);
-
- try {
- buildDocument(pe);
- }
- catch (Exception e) {
- e.printStackTrace();
- throw new ConvertException("Error building OpenOffice Writer DOM: "
- + e.toString());
-
- }
-
- return sxwDoc;
- }
-
-
- /**
- * This method actually takes care of the conversion.
- *
- * @param data An Enumeration of all Paragraphs in the Pocket Word doc.
- *
- * @return The OpenOffice Writer XML representation of the data.
- *
- * @throws IOException If any I/O errors occur.
- */
- private void buildDocument(Enumeration data) throws IOException {
-
- org.w3c.dom.Document doc = sxwDoc.getContentDOM();
-
- /*
- * There should be only one each of office:body and
- * office:automatic-styles in each document.
- */
- Node bodyNode = doc.getElementsByTagName(TAG_OFFICE_BODY).item(0);
-
- // Not every document has an automatic style tag
- Node autoStylesNode = doc.getElementsByTagName(
- TAG_OFFICE_AUTOMATIC_STYLES).item(0);
- if (autoStylesNode == null) {
- autoStylesNode = doc.createElement(TAG_OFFICE_AUTOMATIC_STYLES);
- doc.insertBefore(autoStylesNode, bodyNode);
- }
-
-
- // Needed for naming new styles
- int paraStyles = 1;
- int textStyles = 1;
-
- // Pocket Word has no concept of a list.
- Element listNode = null;
-
-
- // Down to business ...
- while (data.hasMoreElements()) {
- Paragraph p = (Paragraph)data.nextElement();
- Element paraNode = doc.createElement(TAG_PARAGRAPH);
-
- // Set paragraph style information here
- ParaStyle pStyle = p.makeStyle();
- if (pStyle == null) {
- paraNode.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME,
- PocketWordConstants.DEFAULT_STYLE);
- }
- else {
- // Create paragraph style
- pStyle.setName(new String("PS" + paraStyles++));
- paraNode.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, pStyle.getName());
- styleCat.add(pStyle);
- }
-
-
- /*
- * For each of the paragraphs, process each segment.
- * There will always be at least one.
- */
- Enumeration paraData = p.getSegmentsEnumerator();
- Vector textSpans = new Vector(0, 1);
-
- do {
- ParagraphTextSegment pts = (ParagraphTextSegment)paraData.nextElement();
- Element span = doc.createElement(OfficeConstants.TAG_SPAN);
-
- TextStyle ts = pts.getStyle();
-
- if (ts != null) {
- ts.setName(new String("TS" + textStyles++));
- span.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, ts.getName());
- styleCat.add(ts);
- }
- else {
- span.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME,
- PocketWordConstants.DEFAULT_STYLE);
- }
-
- // If this isn't a blank paragraph
- if (pts.getText() != null && !pts.getText().equals("")) {
- Node[] children = OfficeUtil.parseText(pts.getText(), doc);
-
- for (int j = 0; j < children.length; j++) {
- span.appendChild(children[j]);
- }
- }
-
- textSpans.add(span);
-
- } while (paraData.hasMoreElements());
-
-
- /*
- * Special case for the first span. If it has no style, then
- * it shouldn't be a span, so just add its children with style
- * set as standard.
- */
- Element firstSpan = (Element)textSpans.elementAt(0);
- String styleName = firstSpan.getAttribute(ATTRIBUTE_TEXT_STYLE_NAME);
- if (styleName.equals(PocketWordConstants.DEFAULT_STYLE)) {
- NodeList nl = firstSpan.getChildNodes();
- int len = nl.getLength();
-
- for (int i = 0; i < len; i++) {
- /*
- * Always take item 0 as the DOM tree event model will
- * cause the NodeList to shrink as each Node is reparented.
- *
- * By taking the first item from the list, we essentially
- * traverse the list in order.
- */
- paraNode.appendChild(nl.item(0));
- }
- }
- else {
- paraNode.appendChild(firstSpan);
- }
-
- // The rest are spans, so just add them
- for (int i = 1; i < textSpans.size(); i++) {
- paraNode.appendChild((Node)textSpans.elementAt(i));
- }
-
-
- /*
- * Pocket Word doesn't support lists, but it does have bulleted
- * paragraphs that are essentially the same thing.
- *
- * Unlike OpenOffice Writer, a blank paragraph can be bulleted
- * as well. This will be handled by inserting a blank paragraph
- * into the unordered list, but OpenOffice Writer will not display
- * an item at that point in the list.
- */
- if (p.isBulleted()) {
- if (listNode == null) {
- listNode = doc.createElement(TAG_UNORDERED_LIST);
- }
- Element listItem = doc.createElement(TAG_LIST_ITEM);
- listItem.appendChild(paraNode);
- listNode.appendChild(listItem);
- }
- else {
- if (listNode != null) {
- bodyNode.appendChild(listNode);
- listNode = null;
- }
- bodyNode.appendChild(paraNode);
- }
- } // End processing paragraphs
-
-
- // Now write the style catalog to the document
- NodeList nl = styleCat.writeNode(doc, "dummy").getChildNodes();
- int nlLen = nl.getLength(); // nl.item reduces the length
- for (int i = 0; i < nlLen; i++) {
- autoStylesNode.appendChild(nl.item(0));
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java
deleted file mode 100644
index c6a14ba2877d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentMergerImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.MergeException;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.diff.ParaNodeIterator;
-import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm;
-import org.openoffice.xmerge.merger.merge.DocumentMerge;
-import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge;
-import org.openoffice.xmerge.util.Debug;
-
-
-/**
- * PocketWord implementation of <code>DocumentMerger</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- */
-public class DocumentMergerImpl implements DocumentMerger {
-
- private ConverterCapabilities cc_;
- private org.openoffice.xmerge.Document orig = null;
-
- public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) {
- cc_ = cc;
- this.orig = doc;
- }
-
- public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException {
-
- SxwDocument wdoc1 = (SxwDocument) orig;
- SxwDocument wdoc2 = (SxwDocument) modifiedDoc;
-
- Document doc1 = wdoc1.getContentDOM();
- Document doc2 = wdoc2.getContentDOM();
-
- Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement());
- Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement());
-
- DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm();
-
- // find out the paragrah level diffs
- Difference[] diffTable = diffAlgo.computeDiffs(i1, i2);
-
- if (Debug.isFlagSet(Debug.INFO)) {
- Debug.log(Debug.INFO, "Diff Result: ");
-
- for (int i = 0; i < diffTable.length; i++) {
- Debug.log(Debug.INFO, diffTable[i].debug());
- }
- }
-
- // merge the paragraphs
- NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge();
- DocumentMerge docMerge = new DocumentMerge(cc_, charMerge);
-
- Iterator result = null;
-
- docMerge.applyDifference(i1, i2, diffTable);
- }
-}
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java
deleted file mode 100644
index 2604e903c564..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/DocumentSerializerImpl.java
+++ /dev/null
@@ -1,437 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.DocumentSerializer;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-
-import org.openoffice.xmerge.converter.xml.ParaStyle;
-import org.openoffice.xmerge.converter.xml.TextStyle;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-
-import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-
-/**
- * <p>Pocket Word implementation of <code>DocumentDeserializer</code>
- * for use by {@link
- * org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>This converts an OpenOffice Writer XML files to a Pocket Word file<.</p>
- *
- * @author Mark Murnane
- * @version 1.1
- */
-public final class DocumentSerializerImpl
- implements DocumentSerializer, OfficeConstants {
-
- private PocketWordDocument pswDoc;
- private SxwDocument sxwDoc;
-
- private StyleCatalog styleCat = null;
-
- private boolean inList = false;
-
-
- /**
- * <p>Initialises a new <code>DocumentSerializerImpl</code> using the.<br>
- * supplied <code>Document</code></p>
- *
- * <p>The supplied document should be an {@link
- * org.openoffice.xmerge.converter.xml.sxw.SxwDocument SxwDocument}
- * object.</p>
- *
- * @param document The <code>Document</code> to convert.
- */
- public DocumentSerializerImpl(Document doc) {
- sxwDoc = (SxwDocument)doc;
- pswDoc = new PocketWordDocument(sxwDoc.getName());
- }
-
-
- /**
- * <p>Convert the data passed into the <code>DocumentSerializerImpl</code>
- * constructor into Pocket Word format.</p>
- *
- * <p>This method may or may not be thread-safe. It is expected
- * that the user code does not call this method in more than one
- * thread. And for most cases, this method is only done once.</p>
- *
- * @return <code>ConvertData</code> object to pass back the
- * converted data.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData serialize() throws IOException, ConvertException {
- ConvertData cd = new ConvertData();
-
- org.w3c.dom.Document doc = sxwDoc.getContentDOM();
-
- // Load any style info before traversing the document content tree
- loadStyles();
-
- NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY);
-
- int len = list.getLength();
- if (len > 0) {
- Node node = list.item(0);
- traverseBody(node);
- }
-
- cd.addDocument(pswDoc);
-
- return cd;
- }
-
-
- /*
- * Handles the loading of defined styles from the style.xml file as well
- * as automatic styles from the content.xml file.
- *
- * Any change to a defined style, such as a short bold section, falls into
- * the latter category.
- */
- private void loadStyles() {
- org.w3c.dom.Document contentDom = sxwDoc.getContentDOM();
- org.w3c.dom.Document styleDom = sxwDoc.getStyleDOM();
-
- styleCat = new StyleCatalog(25);
-
- NodeList nl = null;
- String families[] = new String[] { PocketWordConstants.TEXT_STYLE_FAMILY,
- PocketWordConstants.PARAGRAPH_STYLE_FAMILY,
- PocketWordConstants.PARAGRAPH_STYLE_FAMILY };
- Class classes[] = new Class[] { TextStyle.class,
- ParaStyle.class,
- TextStyle.class };
-
- String[] styleTypes = new String[] { TAG_OFFICE_STYLES,
- TAG_OFFICE_AUTOMATIC_STYLES,
- TAG_OFFICE_MASTER_STYLES };
-
- /*
- * Documents converted from PSW -> SXW will not have a style.xml when
- * being converted back to PSW. This would occur if a document was
- * not modified within Writer between conversions.
- *
- * Any Writer modifications and saves create the style.xml and other
- * portions of a complete Writer SXW file.
- */
- if (styleDom != null) {
- // Process the Style XML tree
- for (int i = 0; i < styleTypes.length; i++ ) {
- nl = styleDom.getElementsByTagName(styleTypes[i]);
- if (nl.getLength() != 0) {
- styleCat.add(nl.item(0), families, classes, null, false);
- }
- }
- }
-
- /*
- * Process the content XML for any other style info.
- * Should only be automatic types here.
- */
- for (int i = 0; i < styleTypes.length; i++ ) {
- nl = contentDom.getElementsByTagName(styleTypes[i]);
- if (nl.getLength() != 0) {
- styleCat.add(nl.item(0), families, classes, null, false);
- }
- }
- }
-
-
- /*
- * Process the office:body tag.
- */
- private void traverseBody(Node node) throws IOException, ConvertException {
-
- if (node.hasChildNodes()) {
- NodeList nList = node.getChildNodes();
- int len = nList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = nList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH)
- || nodeName.equals(TAG_HEADING)) {
- traverseParagraph(child);
- }
-
- if (nodeName.equals(TAG_UNORDERED_LIST) ||
- nodeName.equals(TAG_ORDERED_LIST)) {
- traverseList(child);
- }
- }
- }
- }
- }
-
-
- /*
- * Process a text:p tag
- */
- private void traverseParagraph(Node node) throws IOException, ConvertException {
- String styleName = getAttribute(node, ATTRIBUTE_TEXT_STYLE_NAME);
-
- ParaStyle pstyle = (ParaStyle)styleCat.lookup(styleName,
- PocketWordConstants.PARAGRAPH_STYLE_FAMILY, null,
- ParaStyle.class);
- if (pstyle != null) {
- pstyle = (ParaStyle)pstyle.getResolved();
- }
-
- TextStyle tstyle = (TextStyle)styleCat.lookup(styleName,
- PocketWordConstants.PARAGRAPH_STYLE_FAMILY, null,
- TextStyle.class);
- if (pstyle != null) {
- tstyle = (TextStyle)tstyle.getResolved();
- }
-
- try {
- pswDoc.addParagraph(pstyle, inList);
- }
- catch (Exception e) {
- throw new ConvertException(
- "Error adding paragraph to PocketWordDocument.\n"
- + e.toString());
- }
-
- traverseParagraphContents(node, tstyle);
- }
-
-
- /*
- * Process the contents of a paragraph. This method handles situations
- * where the paragraph contains multiple children, each representing a
- * differently formatted piece of text.
- */
- private void traverseParagraphContents (Node node, TextStyle defTextStyle)
- throws IOException, ConvertException {
- // First up, get the style of this little bit
- String styleName = getAttribute(node, ATTRIBUTE_TEXT_STYLE_NAME);
- TextStyle tStyle = (TextStyle)styleCat.lookup(styleName,
- PocketWordConstants.TEXT_STYLE_FAMILY, null,
- TextStyle.class);
-
- if (tStyle == null) {
- tStyle = defTextStyle;
- }
-
- if (node.hasChildNodes()) {
- NodeList nList = node.getChildNodes();
- int len = nList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nList.item(i);
- short nodeType = child.getNodeType();
-
- switch (nodeType) {
- case Node.TEXT_NODE:
- String s = child.getNodeValue();
- if (s.length() > 0) {
- try {
- pswDoc.addParagraphData(s, tStyle);
- }
- catch (Exception e) {
- throw new ConvertException(
- "Error adding data to paragraph in " +
- "PocketWordDocument.\n" + e.toString());
-
- }
- }
- break;
-
- case Node.ELEMENT_NODE:
- if (child.getNodeName().equals(TAG_SPACE)) {
- StringBuffer sb = new StringBuffer("");
- int count = 1;
-
- NamedNodeMap map = child.getAttributes();
-
- if (map.getLength() > 0) {
- Node attr = map.getNamedItem(ATTRIBUTE_SPACE_COUNT);
- count = Integer.parseInt(attr.getNodeValue().trim());
- }
-
- for ( ; count > 0; count--) {
- sb.append(" ");
- }
-
- /*
- * May want to look at style info for spaces. Could
- * be important when calculating font metrics.
- */
- try {
- pswDoc.addParagraphData(sb.toString(), tStyle);
- }
- catch (Exception e) {
- throw new ConvertException(
- "Error adding data to paragraph in " +
- "PocketWordDocument.\n" + e.toString());
-
- }
- }
- else if (child.getNodeName().equals(TAG_TAB_STOP)) {
- try {
- pswDoc.addParagraphData("\t", tStyle);
- }
- catch (Exception e) {
- throw new ConvertException(
- "Error adding data to paragraph in " +
- "PocketWordDocument.\n" + e.toString());
-
- }
- }
- else if (child.getNodeName().equals(TAG_LINE_BREAK)) {
- /*
- * Pocket Word does not support soft line breaks.
- * They are just new paragraphs.
- */
- }
- else if (child.getNodeName().equals(TAG_SPAN)) {
- /*
- * This is where the interesting ones, i.e. format
- * changes occur.
- */
- traverseParagraphContents (child, defTextStyle);
- }
- else if (child.getNodeName().equals(TAG_HYPERLINK)) {
- traverseParagraphContents (child, defTextStyle);
- }
- else {
- // Should maybe have a default in here.
- }
- break;
- default:
- // Do nothing
- }
- }
- }
- else {
- /*
- * If the node has no children, then it is a blank paragraph, but
- * they still require an entry in the Paragraph class to make sense.
- */
- pswDoc.addParagraphData("", tStyle);
- }
- }
-
-
- /*
- * Process a text:ordered-list or text:unordered-list tag. Pocket Word has
- * no concept of a list so there is no need to differentiate between the
- * two.
- *
- * Each item on the list contains a text:p node.
- */
- private void traverseList (Node node) throws IOException, ConvertException {
- inList = true;
-
- if (node.hasChildNodes()) {
- NodeList nList = node.getChildNodes();
- int len = nList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = nList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_LIST_ITEM)) {
- traverseListItem(child);
- }
- }
- }
- }
-
- inList = false;
- }
-
-
- /*
- * Process a text:list-item node. They usually contain have a single
- * text:p child but can also have sections or other lists.
- *
- * For this case, only paragraphs are supported.
- */
- private void traverseListItem (Node node) throws IOException, ConvertException {
- if (node.hasChildNodes()) {
- NodeList nList = node.getChildNodes();
- int len = nList.getLength();
-
- for (int i = 0; i < len; i++) {
- Node child = nList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH)) {
- traverseParagraph(child);
- }
- }
- }
- }
-
- }
-
-
- /*
- * Utility method to retrieve a Node attribute.
- */
- private String getAttribute (Node node, String attribute) {
- NamedNodeMap attrNodes = node.getAttributes();
-
- if (attrNodes != null) {
- Node attr = attrNodes.getNamedItem(attribute);
- if (attr != null) {
- return attr.getNodeValue();
- }
- }
-
- return null;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java
deleted file mode 100644
index c2249766b5e5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/Paragraph.java
+++ /dev/null
@@ -1,859 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-
-import java.util.Vector;
-import java.util.Enumeration;
-
-import java.awt.Color;
-
-import org.openoffice.xmerge.util.EndianConverter;
-import org.openoffice.xmerge.util.ColourConverter;
-import org.openoffice.xmerge.converter.xml.ParaStyle;
-import org.openoffice.xmerge.converter.xml.TextStyle;
-
-
-/**
- * Represents a paragraph data structure within a Pocket Word document.
- *
- * @author Mark Murnane
- * @version 1.1
- */
-class Paragraph implements PocketWordConstants {
- /*
- * The data elements of a Paragraph.
- *
- * As the 'unknown' values are not calculated they are declared static.
- * They are not declared final because they do have a calcuable value.
- */
- private static short unknown1 = 0x23;
- private short dataWords = 0;
- private short textLength = 0;
- private short lengthWithFormatting = 0;
- private short lines = 0;
-
- private static final short marker = (short)0xFFFF;
- private static int unknown2 = 0x22; // May be two short values
-
- private short specialIndentation = 0;
- private short leftIndentation = 0;
- private short rightIndentation = 0;
-
- private byte bullets = 0;
- private byte alignment = 0;
-
- private static int unknown3 = 0;
-
- // Will always have at least these formatting settings in each paragraph
- private short defaultFont = 2; // Courier New for the time being
- private short defaultSize = 10;
-
-
- /*
- * Remaining elements assist in calculating correct values for the paragraph
- * representation.
- */
-
- private Vector textSegments = null;
-
- private Vector lineDescriptors = null;
-
- private ParaStyle pStyle = null;
-
- private boolean isLastParagraph = false;
-
-
- /*
- * Private class constructor used by all constructors. Ensures the proper
- * initialisation of the Vector storing the paragraph's text.
- */
- private Paragraph () {
- textSegments = new Vector(0, 1);
- }
-
-
- /**
- * <p>Constructor for use when converting from SXW format to Pocket Word
- * format.</p>
- *
- * @param style Paragraph style object describing the formatting style
- * of this paragraph.
- */
- public Paragraph (ParaStyle style) {
- this();
-
- lineDescriptors = new Vector(0, 1);
- pStyle = style;
- }
-
-
- /**
- * <p>Constructor for use when converting from Pocket Word format to SXW
- * format.</p>
- *
- * @param data Byte array containing byte data describing this paragraph
- * from the Pocket Word file.
- */
- public Paragraph (byte[] data) {
- this();
-
- /*
- * Read in all fixed data from the array
- *
- * unknown1 appears at data[0] and data[1]
- */
- dataWords = EndianConverter.readShort(new byte[] { data[2], data[3] } );
- textLength = EndianConverter.readShort(new byte[] { data[4], data [5] } );
- lengthWithFormatting = EndianConverter.readShort(
- new byte[] { data[6], data[7] } );
- lines = EndianConverter.readShort(new byte[] { data[8], data [9] } );
-
- /*
- * The marker appears at data[10] and data[11].
- *
- * The value of unknown2 is at data[12], data[13], data[14] and data[15].
- */
-
- specialIndentation = EndianConverter.readShort(new byte[] { data[16], data[17] } );
- leftIndentation = EndianConverter.readShort(new byte[] { data[18], data [19] } );
- rightIndentation = EndianConverter.readShort(new byte[] { data[20], data [21] } );
-
- bullets = data[22];
- alignment = data[23];
-
- // The value of unknown3 is at data[24], data[25], data[26] and data[27].
-
- /*
- * The actual paragraph data is in the remainder of the byte sequence.
- *
- * Only the actual text seqence with the embedded formatting tags is
- * relevant to the conversion from Pocket Word to SXW format.
- */
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- bos.write(data, 28, lengthWithFormatting);
- parseText(bos.toByteArray());
- }
-
-
- /*
- * Processes the text portion of the raw paragraph data from the Pocket Word
- * file. This data also includes formatting settings for the text in the
- * paragraph.
- *
- * Formatting changes appear like XML/HTML tags. Formatted blocks are
- * preceded by a sequence of bytes switching on a formatting change and
- * followed by a sequence switching off that formatting change.
- */
- private void parseText (byte[] data) {
-
- int totalLength = data.length;
-
- StringBuffer sb = new StringBuffer("");
-
- // Setup text style information
- int mask = TextStyle.BOLD | TextStyle.ITALIC | TextStyle.UNDERLINE
- | TextStyle.STRIKETHRU;
-
-
- String fontName = null;
- int fontSize = 0;
- Color textColour = null;
- Color backColour = null;
- int modifiers = 0;
-
- TextStyle ts = null;
-
- int attrsSet = 0; // If this is 0, we have no extra style
- boolean inSequence = false;
- boolean sawText = false;
-
- String s = new String(); // For debugging
-
- // Start from the very beginning
- for (int i = 0; i < totalLength; i++) {
- // Will encounter at least two codes first
- if ((byte)(data[i] & 0xF0) == FORMATTING_TAG) {
- if (sawText) {
- // Style change so dump previous segment and style info
- addTextSegment(sb.toString(), ts);
- sb = new StringBuffer("");
- sawText = false;
- }
-
- switch (data[i]) {
- case FONT_TAG:
- int index = EndianConverter.readShort(
- new byte[] { data[i + 1], data[i + 2] } );
-
- /*
- * Standard font.
- *
- * Should really be one, but as the only supported font
- * currently is Courier New, want to leave it at Courier
- * New for round trip conversions.
- *
- * Also need to account for the fact that Tahoma is the
- * correct standard font.
- */
- if (fontName == null || fontName.equals("2")) {
- if (index != 2 && index != 1) {
- fontName = String.valueOf(index);
- attrsSet++;
- }
- }
- else {
- // Font is set, but not the default
- if (index == 2 || index == 1) {
- fontName = "2";
- attrsSet--;
- }
- else {
- fontName = String.valueOf(index);
- }
- }
- i += 2;
- break;
-
-
- case FONT_SIZE_TAG:
- int size = EndianConverter.readShort(
- new byte[] { data[i + 1], data[i + 2] } );
-
- if (size == 0) {
- // Flags the end of the last paragraph
- isLastParagraph = true;
- i += 2;
- break;
- }
-
- // Standard size
- if (fontSize == 0 || fontSize == 10) {
- if (size != 10) {
- fontSize = size;
- attrsSet++;
- }
- }
- else {
- // Font size is set, but not to standard
- if (size == 10) {
- fontSize = 10;
- attrsSet--;
- }
- else {
- fontSize = size;
- }
- }
- i += 2;
- break;
-
-
- case COLOUR_TAG:
- if (data[i + 1] != 0) {
- ColourConverter cc = new ColourConverter();
- textColour = cc.convertToRGB(
- EndianConverter.readShort(new byte[] { data[i + 1],
- data[i + 2] } ));
- attrsSet++;
- }
- else {
- textColour = null;
- attrsSet--;
- }
- i += 2;
- break;
-
-
- case FONT_WEIGHT_TAG:
- if (data[i + 1] == FONT_WEIGHT_BOLD
- || data[i + 1] == FONT_WEIGHT_THICK) {
- modifiers |= TextStyle.BOLD;
- attrsSet++;
- }
- else {
- // Its a bit field so subtracting should work okay.
- modifiers ^= TextStyle.BOLD;
- attrsSet--;
- }
- i += 2;
- break;
-
-
- case ITALIC_TAG:
- if (data[i + 1] == (byte)0x01) {
- modifiers |= TextStyle.ITALIC;
- attrsSet++;
- }
- else {
- modifiers ^= TextStyle.ITALIC;
- attrsSet--;
- }
- i++;
- break;
-
-
- case UNDERLINE_TAG:
- if (data[i + 1] == (byte)0x01) {
- modifiers |= TextStyle.UNDERLINE;
- attrsSet++;
- }
- else {
- modifiers ^= TextStyle.UNDERLINE;
- attrsSet--;
- }
- i++;
- break;
-
-
- case STRIKETHROUGH_TAG:
- if (data[i + 1] == (byte)0x01) {
- modifiers |= TextStyle.STRIKETHRU;
- attrsSet++;
- }
- else {
- modifiers ^= TextStyle.STRIKETHRU;
- attrsSet--;
- }
- i++;
- break;
-
- case HIGHLIGHT_TAG:
- /*
- * Highlighting is treated by OpenOffice as a
- * background colour.
- */
- if (data[i + 1] == (byte)0x01) {
- backColour = Color.yellow;
- attrsSet++;
- }
- else {
- backColour = null;
- attrsSet--;
- }
- i++;
- break;
- }
-
- inSequence = true;
- continue;
- }
-
- if (inSequence) {
- // Style information has been changed. Create new style here
-
- inSequence = false;
- if (attrsSet > 0) {
- ts = new TextStyle(null, TEXT_STYLE_FAMILY, DEFAULT_STYLE,
- mask, modifiers, fontSize, fontName, null);
- ts.setColors(textColour, backColour);
- }
- else {
- ts = null;
- }
- }
-
- /*
- * C4 xx seems to indicate a control code. C4 00 indicates the end
- * of a paragraph; C4 04 indicates a tab space. Only these two
- * have been seen so far.
- */
- if (data[i] == (byte)0xC4) {
- /*
- * Redundant nodes are sometimes added to the last paragraph
- * because a new sequence is being processed when the flag is
- * set.
- *
- * To avoid this, do nothing with the last paragraph unless no
- * text has been added for it already. In that case, add the
- * empty text segment being process to ensure that all
- * paragraphs have at least one text segment.
- */
- if (data[i + 1] == (byte)0x00) {
- if (isLastParagraph && textSegments.size() > 0) {
- return;
- }
- addTextSegment(sb.toString(), ts);
- return;
- }
- sb.append("\t");
- sawText = true;
- i++;
- continue;
- }
-
- sb.append((char)data[i]);
- sawText = true;
- s = sb.toString();
- }
- }
-
-
- /**
- * <p>Adds details of a new text block to the <code>Paragraph</code> object.
- * </p>
- *
- * @param text The text of the new block.
- * @param style Text style object describing the formatting attached
- * to this block of text.
- */
- public void addTextSegment(String text, TextStyle style) {
- textLength += text.length();
- textSegments.add(new ParagraphTextSegment(text, style));
- }
-
-
- /**
- * <p>This method alters the state of the <code>Paragraph</code> object to
- * indicate whether or not it is the final paragraph in the document.</p>
- *
- * <p>It is used during conversion from SXW format to Pocket Word format.
- * In Pocket Word files, the last paragraph finishes with a different byte
- * sequence to other paragraphs.</p>
- *
- * @param isLast true if the Paragraph is the last in the document,
- * false otherwise.
- */
- public void setLastParagraph(boolean isLast) {
- isLastParagraph = isLast;
- }
-
-
- /**
- * <p>Complementary method to {@link #setLastParagraph(boolean)
- * setLastParagraph}. Returns the terminal status of this
- * <code>Paragraph</code> within the Pocket Word document.</p>
- *
- * @return true if the Paragraph is the last in the document; false otherwise.
- */
- public boolean getLastParagraph () {
- return isLastParagraph;
- }
-
-
- /**
- * <p>This method returns the Pocket Word representation of this
- * <code>Paragraph</code> in Little Endian byte order.</p>
- *
- * <p>Used when converting from SXW format to Pocket Word format.</p>
- *
- * @return <code>byte</code> array containing the formatted representation
- * of this Paragraph.
- */
- public byte[] getParagraphData() {
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
- postProcessText();
-
- /*
- * Need information about the paragraph segments in two places
- * so calculate them first.
- *
- * The stream contains the text wrapped in any formatting sequences that
- * are necessary.
- */
- ByteArrayOutputStream segs = new ByteArrayOutputStream();
-
- try {
- for (int i = 0; i < textSegments.size(); i++) {
- ParagraphTextSegment pts = (ParagraphTextSegment)textSegments.elementAt(i);
- segs.write(pts.getData());
- }
- }
- catch (IOException ioe) {
- // Should never happen in a memory based stream
- }
-
- /*
- * Number of data words for this paragraph descriptor:
- *
- * 26 is the number of bytes prior to the start of the segment.
- * 3 comes from the C4 00 00 termintating sequence.
- */
- dataWords = (short)(26 + segs.size() + 3 + 4);
- if (isLastParagraph) {
- dataWords += 6;
- }
- if (dataWords % 4 != 0) {
- dataWords += (4 - (dataWords % 4));
- }
- dataWords /= 4;
-
- /*
- * The 8 bytes are made up of E6 ?0 00 and E5 ?0 00 at the start of the
- * text along with the C4 00 that terminates it.
- *
- * In the event that the paragraph is the last one E6 00 00 is also
- * present at the end of the text. Also, as we currently use a font
- * other than the first in the index (Tahoma) E5 01 00 is also present.
- *
- * Make sure this is accurate when font specifications change
- */
- lengthWithFormatting = (short)(segs.size() + (isLastParagraph ? 14 : 8));
-
- try {
- bos.write(EndianConverter.writeShort(unknown1));
- bos.write(EndianConverter.writeShort(dataWords));
- bos.write(EndianConverter.writeShort((short)(textLength + 1)));
- bos.write(EndianConverter.writeShort(lengthWithFormatting));
- bos.write(EndianConverter.writeShort(lines));
-
- bos.write(EndianConverter.writeShort(marker));
- bos.write(EndianConverter.writeInt(unknown2));
-
- bos.write(EndianConverter.writeShort(specialIndentation));
- bos.write(EndianConverter.writeShort(leftIndentation));
- bos.write(EndianConverter.writeShort(rightIndentation));
-
- bos.write(bullets);
-
- if (pStyle != null && pStyle.isAttributeSet(ParaStyle.TEXT_ALIGN)) {
- switch (pStyle.getAttribute(ParaStyle.TEXT_ALIGN)) {
-
- case ParaStyle.ALIGN_RIGHT:
- bos.write(0x01);
- break;
-
- case ParaStyle.ALIGN_CENTER:
- bos.write(0x02);
- break;
-
- default:
- bos.write(0x00); // Left align in all other circumstances
- break;
- }
- }
- else {
- bos.write(0x00);
- }
-
- bos.write(EndianConverter.writeInt(unknown3));
-
-
- /*
- * Write out font and size.
- *
- * If font support is added then this should change as the information
- * will have to be calculated from a Font table.
- */
- bos.write(FONT_TAG);
- bos.write(EndianConverter.writeShort(defaultFont));
- bos.write(FONT_SIZE_TAG);
- bos.write(EndianConverter.writeShort(defaultSize));
-
- // Write out the text segments
- bos.write(segs.toByteArray());
-
- /*
- * If this is the last paragraph in the document then we need to make
- * sure that the paragraph text is terminated correctly with an E6 00 00
- * before the C4 00 00.
- */
- if (isLastParagraph) {
- if (defaultFont != 1) {
- // Must always go back to the first font.
- bos.write(FONT_TAG);
- bos.write(EndianConverter.writeShort((short)0x01));
- }
- bos.write(FONT_SIZE_TAG);
- bos.write(EndianConverter.writeShort((short)0x00));
- }
-
- bos.write(new byte[] { (byte)0xC4, 0x00, 0x00 } );
-
- int padding = 0;
- if (bos.size() % 4 != 0) {
- padding = 4 - (bos.size() % 4);
- }
- for (int i = 0; i < padding; i++) {
- bos.write(0x00);
- }
-
- // Third byte should match first byte after 0xFF 0xFF
- bos.write(new byte[] { 0x42, 0x00, 0x22, 0x00} );
-
- /*
- * Meaning of last two bytes seems to be the number of words describing
- * lines. This is calculated at 10 bytes per descriptor.
- *
- * May have two extra padding bytes that need to be accounted for too
- * The division below may lose 2 bytes (integer result).
- */
- int wordsRemaining = (lineDescriptors.size() * 10) / 4;
- if ((lineDescriptors.size() * 10) % 4 != 0) {
- wordsRemaining++;
- }
- bos.write(EndianConverter.writeShort((short)wordsRemaining));
-
-
- // Now write out the line descriptors
- for (int i = 0; i < lineDescriptors.size(); i++) {
- LineDescriptor ld = (LineDescriptor)lineDescriptors.elementAt(i);
-
- bos.write(ld.getDescriptorInfo());
- }
-
-
- if (!isLastParagraph) {
- /*
- * There may be a need to pad this. Will be writing at
- * either start of 4 byte block or 2 bytes into it.
- */
- if (bos.size() % 4 != 2) {
- bos.write(EndianConverter.writeShort((short)0));
- }
- bos.write(EndianConverter.writeShort((short)0x41));
- }
- }
- catch (IOException ioe) {
- // Should never occur for a memory based stream
- }
-
- return bos.toByteArray();
- }
-
-
- /*
- * This method handles the calculation of correct values for line lengths
- * in each individual descriptor and the number of lines in the document.
- *
- * TODO: Update to take account of different font metrics.
- */
- private void postProcessText() {
- /*
- * The post-processing ...
- *
- * For each line, we need to add a line descriptor and increment
- * the number of lines in the paragraph data structure.
- *
- * To do this, make sure that no sequence goes over the given screen
- * width unless the last char is a whitespace character.
- */
-
- // In courier, can have no more than 29 chars per line
-
- int chunkStart = 0;
- StringBuffer sb = new StringBuffer("");
-
- // Line Descriptor info should be eliminated each time
- lineDescriptors = new Vector(1, 1);
- lines = 0;
-
- for (int i = 0; i < textSegments.size(); i++) {
- ParagraphTextSegment pts = (ParagraphTextSegment)textSegments.elementAt(i);
- sb.append(pts.getText());
- }
-
- if (sb.length() == 0) {
- lines = 1;
- lineDescriptors.add(new LineDescriptor((short)1, (short)0));
- return;
- }
-
- while (chunkStart < sb.length()) {
- String text = "";
-
- try {
- text = sb.substring(chunkStart, chunkStart + 30);
- }
- catch (StringIndexOutOfBoundsException sioobe) {
- // We have less than one line left so just add it
- text = sb.substring(chunkStart);
- lineDescriptors.add(new LineDescriptor((short)(text.length() + 1), (short)(text.length() * 36)));
- chunkStart += text.length();
- lines++;
- continue;
- }
-
- int lastWhitespace = -1;
-
- for (int i = 29; i >= 0; i--) {
- if (Character.isWhitespace(text.charAt(i))) {
- lastWhitespace = i;
- break;
- }
- }
-
- if (lastWhitespace != -1) {
- // The line can be split
- lineDescriptors.add(new LineDescriptor((short)(lastWhitespace + 1), (short)(lastWhitespace * 36)));
- chunkStart += lastWhitespace + 1;
- lines++;
- }
- else {
- // The line is completely occupied by a single word
- lineDescriptors.add(new LineDescriptor((short)29, (short)(29 * 36)));
- chunkStart += 29;
- lines++;
- }
- }
- }
-
-
- /**
- * <p>Returns the number of lines in the <code>Paragraph</code>.</p>
- *
- * @return The number of lines in the document.
- */
- public short getLines() {
- postProcessText();
-
- return lines;
- }
-
-
- /**
- * <p>Toggles the flag indicating that the <code>Paragraph</code> is a
- * bulleted paragraph.</p>
- *
- * @param isBulleted true to enable bulleting for this paragraph, false
- * otherwise.
- */
- public void setBullets(boolean isBulleted) {
- if (isBulleted) {
- bullets = (byte)0xFF;
- }
- else {
- bullets = 0;
- }
- }
-
- /**
- * <p>Returns the bulleting status of the <code>Paragraph</code>.</p>
- *
- * @return true if the paragraph is bulleted, false otherwise.
- */
- public boolean isBulleted() {
- if (bullets != 0) {
- return true;
- }
- return false;
- }
-
-
- /**
- * <p>Returns the number of text characters in the <code>Paragraph</code>,
- * excluding formatting.</p>
- *
- * @return The length of the paragraph.
- */
- public int getTextLength () {
- return textLength;
- }
-
-
- /**
- * <p>Returns an <code>Enumeration</code> over the individual text segments
- * of the <code>Paragraph</code>.</p>
- *
- * @return An <code>Enumeration</code> of the text segments.
- */
- public Enumeration getSegmentsEnumerator () {
- return textSegments.elements();
- }
-
-
- /**
- * <p>Returns a paragraph style object that describes any of the paragraph
- * level formatting used by this <code>Paragraph</code>.</p>
- *
- * @return Paragraph style object describing the <code>Paragraph</code>.
- */
- public ParaStyle makeStyle() {
- int attrs[] = new int[] { ParaStyle.MARGIN_LEFT, ParaStyle.MARGIN_RIGHT,
- ParaStyle.TEXT_ALIGN };
- String values[] = new String[attrs.length];
-
- /*
- * Not interested in left or right indents just yet. Don't know
- * how to calculate them.
- */
-
- switch (alignment) {
- case 2:
- values[2] = "center";
- break;
-
- case 1:
- values[2] = "right";
- break;
-
- case 0:
- default:
- values[2] = "left";
- return null; // Not interested if its the default.
- }
-
- return new ParaStyle(null, PARAGRAPH_STYLE_FAMILY, null, attrs,
- values, null);
- }
-
-
- /*
- * Class describing the data structures which appear following the text
- * of a Paragraph. For each line on screen that the Paragraph uses, a
- * LineDescriptor details how many characters are on the line and how much
- * screen space they occupy.
- *
- * The screen space and character breaks are calculated during post-processing
- * of the paragraph. See postProcessText().
- *
- * The unit of measurement used for screen space is currently unknown.
- */
- private class LineDescriptor {
- private short characters = 0;
- private int filler = 0;
- private short screen_space = 0;
- private short marker = 0;
-
- private LineDescriptor(short chars, short space) {
- characters = chars;
- screen_space = space;
- marker = (short)0x040C; // Not a constant. Depends on font used.
- }
-
-
- private byte[] getDescriptorInfo(){
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
- try {
- bos.write(EndianConverter.writeShort(characters));
- bos.write(EndianConverter.writeInt(filler));
- bos.write(EndianConverter.writeShort(screen_space));
- bos.write(EndianConverter.writeShort(marker));
- }
- catch (IOException ioe) {
- // Should never happen in a memory based stream.
- }
-
- return bos.toByteArray();
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java
deleted file mode 100644
index 442cbf2f53dc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/ParagraphTextSegment.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import org.openoffice.xmerge.converter.xml.TextStyle;
-
-import org.openoffice.xmerge.util.EndianConverter;
-
-import org.openoffice.xmerge.util.ColourConverter;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-import java.awt.Color;
-
-/**
- * This class represents a portion of text with a particular formatting style.
- * The style may differ from the default style of the paragraph of which it
- * is part.
- *
- * @author Mark Murnane
- * @version 1.1
- */
-class ParagraphTextSegment implements PocketWordConstants {
-
- private String pText;
- private TextStyle pStyle;
-
-
- /**
- * <p>Initialise a new <code>ParagraphTextSegment</p>.
- * <p>Both parameters may be <code>null</code>.</p>
- *
- * @param data The text of this segment.
- * @param style The style describing this segment.
- */
- public ParagraphTextSegment (String data, TextStyle style) {
- pText = data;
- pStyle = style;
- }
-
- /**
- * <p>Sets the text for this segment.</p>
- *
- * @param data The text of this segment.
- */
- public void setText (String data) {
- pText = data;
- }
-
- /**
- * <p>Gets the text for this segment.</p>
- *
- * @return The text of this segment.
- */
- public String getText () {
- return pText;
- }
-
-
- /**
- * <p>Sets the style for this segment.</p>
- *
- * @param data The style describing this segment.
- */
- public void setStyle (TextStyle style) {
- pStyle = style;
- }
-
-
- /**
- * <p>Gets the style for this segment.</p>
- *
- * @return The style describing this segment.
- */
- public TextStyle getStyle () {
- return pStyle;
- }
-
-
- /**
- * <p>Returns the string data for this text segment wrapped with the
- * appropriate byte codes for the formatting settings used.</p>
- *
- * @return <code>byte</code> array containing formatted text in Pocket Word
- * format.
- */
- public byte[] getData () {
- ByteArrayOutputStream data = new ByteArrayOutputStream();
-
- boolean colourSet = false;
- boolean boldSet = false;
- boolean italicSet = false;
- boolean underlineSet = false;
- boolean strikeSet = false;
- boolean highlightSet = false;
-
- // TODO: Font changes need to be worked out here
-
- try {
- if (pStyle != null) {
- if (pStyle.getFontColor() != null) {
- ColourConverter cc = new ColourConverter();
- short colourCode = cc.convertFromRGB(pStyle.getFontColor());
- if (colourCode != 0) { // not black
- data.write(COLOUR_TAG);
- data.write(EndianConverter.writeShort(colourCode));
- colourSet = true;
- }
- }
- if (pStyle.isSet(TextStyle.BOLD) && pStyle.getAttribute(TextStyle.BOLD)) {
- data.write(new byte[] { FONT_WEIGHT_TAG, FONT_WEIGHT_BOLD, 0x00 } );
- boldSet = true;
- }
- if (pStyle.isSet(TextStyle.ITALIC) && pStyle.getAttribute(TextStyle.ITALIC)) {
- data.write(new byte[] { ITALIC_TAG, 0x01 } );
- italicSet = true;
- }
- if (pStyle.isSet(TextStyle.UNDERLINE) && pStyle.getAttribute(TextStyle.UNDERLINE)) {
- data.write(new byte[] { UNDERLINE_TAG, 0x01 } );
- underlineSet = true;
- }
- if (pStyle.isSet(TextStyle.STRIKETHRU) && pStyle.getAttribute(TextStyle.STRIKETHRU)) {
- data.write(new byte[] { STRIKETHROUGH_TAG, 0x01 } );
- strikeSet = true;
- }
- if (pStyle.getBackgroundColor() != null) {
- data.write(new byte[] { HIGHLIGHT_TAG, 0x01 } );
- highlightSet = true;
- }
- }
-
-
- // Now write out the data
- if (!pText.equals("\t")) {
- data.write(pText.getBytes());
- }
- else {
- /*
- * Tabs are a special case. They are represented by Pocket Word
- * as the LE sequence 0xC4 0x04.
- */
- data.write(new byte[] { (byte)0xC4, 0x04 } );
- }
-
-
- // Now close out any of the settings changes
- if (colourSet) {
- /*
- * Colours may change without changing back to black, but
- * without knowing what the previous colour was, the only
- * way to ensure correct conversion is to restore to black and
- * let the next segment change the colour again.
- */
- data.write(new byte[] { COLOUR_TAG, 0x00, 0x00 } );
- }
- if (boldSet) {
- data.write(new byte[] { FONT_WEIGHT_TAG, FONT_WEIGHT_NORMAL, 0x00 } );
- }
- if (italicSet) {
- data.write(new byte[] { ITALIC_TAG, 0x00 } );
- }
- if (underlineSet) {
- data.write(new byte[] { UNDERLINE_TAG, 0x00 } );
- }
- if (strikeSet) {
- data.write(new byte[] { STRIKETHROUGH_TAG, 0x00 } );
- }
- if (highlightSet) {
- data.write(new byte[] { HIGHLIGHT_TAG, 0x00 } );
- }
- }
- catch (IOException ioe) {
- // Should never occur in a memory based stream
- }
-
- return data.toByteArray();
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java
deleted file mode 100644
index d02c9eeddf53..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PluginFactoryImpl.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-
-import java.io.InputStream;
-import java.io.IOException;
-
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.DocumentDeserializerFactory;
-import org.openoffice.xmerge.DocumentSerializerFactory;
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.DocumentMergerFactory;
-import org.openoffice.xmerge.ConverterCapabilities;
-
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-
-import org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory;
-
-
-/**
- * Factory class used to create converters to/from the Pocket Word format.
- *
- * @author Mark Murnane
- * @version 1.1
- */
-public final class PluginFactoryImpl extends SxwPluginFactory
- implements DocumentDeserializerFactory, DocumentSerializerFactory,
- DocumentMergerFactory{
-
- /**
- * <p>Constructor that caches the <code>ConvertInfo</code> that
- * corresponds to the registry information for this plug-in.</p>
- *
- * @param ci <code>ConvertInfo</code> object.
- */
- public PluginFactoryImpl (ConverterInfo ci) {
- super(ci);
- }
-
- /** ConverterCapabilities object for this type of conversion. */
- private final static ConverterCapabilities converterCap =
- new ConverterCapabilitiesImpl();
-
-
- /**
- * <p>The <code>DocumentSerializer</code> is used to convert
- * from the OpenOffice Writer <code>Document</code> format
- * to the Pocket Word <code>Document</code> format.</p>
- *
- * <p>The <code>ConvertData</code> object is passed along to the
- * created <code>DocumentSerializer</code> via its constructor.
- * The <code>ConvertData</code> is read and converted when the
- * the <code>DocumentSerializer</code> object's
- * <code>serialize</code> method is called.</p>
- *
- * @param doc <code>Document</code> object that the created
- * <code>DocumentSerializer</code> object uses
- * as input.
- *
- * @return A <code>DocumentSerializer</code> object.
- */
- public DocumentSerializer createDocumentSerializer(Document doc) {
- return new DocumentSerializerImpl(doc);
- }
-
-
- /**
- * The <code>DocumentDeserializer</code> is used to convert
- * from the Pocket Word <code>Document</code> format to
- * the OpenOffice Writer <code>Document</code> format.</p>
- *
- * The <code>ConvertData</code> object is passed along to the
- * created <code>DocumentDeserializer</code> via its constructor.
- * The <code>ConvertData</code> is read and converted when the
- * the <code>DocumentDeserializer</code> object's
- * <code>deserialize</code> method is called.
- * </p>
- *
- * @param cd <code>ConvertData</code> object that the created
- * <code>DocumentDeserializer</code> object uses as
- * input.
- *
- * @return A <code>DocumentDeserializer</code> object.
- */
- public DocumentDeserializer createDocumentDeserializer(ConvertData cd) {
- return new DocumentDeserializerImpl(cd);
- }
-
-
- /**
- * <p>Create a <code>Document</code> object that corresponds to
- * the Pocket Word data passed in via the <code>InputStream</code>
- * object.
- *
- * <p>This method will read from the given <code>InputStream</code>
- * object. The returned <code>Document</code> object will contain
- * the necessary data for the other objects created by the
- * <code>PluginFactoryImpl</code> to process, like the
- * <code>DocumentSerializerImpl</code> object and a
- * <code>DocumentMerger</code> object.</p>
- *
- * @param name The <code>Document</code> name.
- * @param is <code>InputStream</code> object corresponding
- * to the <code>Document</code>.
- *
- * @return A <code>Document</code> object representing the
- * Pocket Word format.
- *
- * @throws IOException If any I/O error occurs.
- */
-
- public Document createDeviceDocument(String name, InputStream is)
- throws IOException {
- PocketWordDocument pwd = new PocketWordDocument(name);
- pwd.read(is);
- return pwd;
- }
-
- /**
- * Returns an instance of <code>DocumentMergerImpl</code>,
- * which is an implementation of the <code>DocumentMerger</code>
- * interface.
- *
- * @param doc <code>Document</code> to merge.
- *
- * @return A DocumentMergerImpl object.
- */
- public DocumentMerger createDocumentMerger(Document doc) {
- ConverterCapabilities cc = converterCap;
- DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc);
- return merger;
-
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java
deleted file mode 100644
index de67eeec31a7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordConstants.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-
-/**
- * Interface defining constants for Pocket Word attributes.
- *
- * @author Mark Murnane
- * @version 1.1
- */
-public interface PocketWordConstants {
- /** File extension for Pocket Word files. */
- public static final String FILE_EXTENSION = ".psw";
-
- /** Name of the default style. */
- public static final String DEFAULT_STYLE = "Standard";
-
- /** Family name for Paragraph styles. */
- public static final String PARAGRAPH_STYLE_FAMILY = "paragraph";
-
- /** Family name for Text styles. */
- public static final String TEXT_STYLE_FAMILY = "text";
-
-
- /**
- * Generic Pocket Word formatting code.
- *
- * Formatting codes are 0xEz, where z indicates the specific format code.
- */
- public static final byte FORMATTING_TAG = (byte)0xE0;
-
- /** Font specification tag. The two bytes following inidicate which font. */
- public static final byte FONT_TAG = (byte)0xE5;
-
- /** Font size tag. The two bytes following specify font size in points. */
- public static final byte FONT_SIZE_TAG = (byte)0xE6;
-
- /** Colour tag. Two bytes following index a 4-bit colour table. */
- public static final byte COLOUR_TAG = (byte)0xE7;
-
- /** Font weight tag. Two bytes following indicate weighting of font. */
- public static final byte FONT_WEIGHT_TAG = (byte)0xE8;
-
- /** Normal font weight value. */
- public static final byte FONT_WEIGHT_NORMAL = (byte)0x04;
-
- /** Fine font weight value. */
- public static final byte FONT_WEIGHT_FINE = (byte)0x01;
-
- /** Bold font weight value. */
- public static final byte FONT_WEIGHT_BOLD = (byte)0x07;
-
- /** Thick font weight value. */
- public static final byte FONT_WEIGHT_THICK = (byte)0x09;
-
- /** Italic tag. Single byte following indicates whether italic is on. */
- public static final byte ITALIC_TAG = (byte)0xE9;
-
- /** Underline tag. Single byte following indicates whether underline is on. */
- public static final byte UNDERLINE_TAG = (byte)0xEA;
-
- /** Strikethrough tag. Single byte following indicates whether strikethrough is on. */
- public static final byte STRIKETHROUGH_TAG = (byte)0XEB;
-
- /** Highlighting tag. Single byte following indicates whether highlighting is on. */
- public static final byte HIGHLIGHT_TAG = (byte)0xEC;
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java
deleted file mode 100644
index 9026d8866113..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/PocketWordDocument.java
+++ /dev/null
@@ -1,408 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.converter.xml.sxw.pocketword;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.converter.xml.ParaStyle;
-import org.openoffice.xmerge.converter.xml.TextStyle;
-
-import java.awt.Font;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-
-import java.util.Enumeration;
-import java.util.Vector;
-
-
-/**
- * <p>Class representing a Pocket Word Document.</p>
- *
- * <p><code>PocketWordDocument</code> is used to create new Pocket Word documents
- * and to read existing data to allow for conversion to OpenOffice Writer
- * format.</p>
- *
- * @author Mark Murnane
- * @version 1.1
- */
-public class PocketWordDocument implements Document, PocketWordConstants {
- private String docName;
-
- private byte[] preamble;
- private Vector fonts;
- private DocumentDescriptor descriptor;
- private Vector paragraphs;
-
- private ParaStyle pStyle;
- private Paragraph currentPara;
-
- /*
- * The trailer currently appears to be constant, but if its found to
- * have a variable component, then this initialisation should be moved
- * to an initTrailer() method.
- *
- * Padding is sometimes needed before the trailer to ensure the file
- * ends on a 4-byte boundary, but this is handled in write().
- */
- private static final byte[] trailer = new byte[] { (byte)0x82, 0x00,
- 0x09, 0x00,
- 0x03, 0x00,
- (byte)0x82, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00,
- 0x00, 0x00 };
-
-
- /**
- * <p>Constructs a new Pocket Word Document.</p>
- *
- * <p>This new document does notcontain any information. Document data must
- * either be added using appropriate methods, or an existing file can be
- * {@link #read(InputStream) read} from an <code>InputStream</code>.</p>
- *
- * @param name The name of the <code>PocketWordDocument</code>.
- */
- public PocketWordDocument(String name) {
-
- docName = trimDocumentName(name);
-
- preamble = new byte[52];
- fonts = new Vector(0, 1);
- descriptor = new DocumentDescriptor();
- paragraphs = new Vector(0, 1);
- }
-
-
- /**
- * <p>This method reads <code>byte</code> data from the InputStream and
- * extracts font and paragraph data from the file.</p>
- *
- * @param is InputStream containing a Pocket Word data file.
- *
- * @throws IOException In case of any I/O errors.
- */
- public void read(InputStream docData) throws IOException {
-
- if (docData == null) {
- throw new IOException ("No input stream to convert");
- }
-
- // The preamble may become important for font declarations.
- int readValue = docData.read(preamble);
- // #i33702# check for an empty InputStream.
- if(readValue == -1) {
- System.err.println("Error:invalid input stream");
- return;
- }
-
- byte[] font = new byte[80];
- int numfonts = 0;
- do {
- docData.read(font);
-
- String name = new String(font, 0, 64, "UTF-16LE");
- fonts.add(name.trim());
-
- } while (!(font[76] == 5 && font[77] == 0
- && font[78] == 1 && font[79] == 0));
-
- /*
- * TODO: The document descriptor data that follows the fonts ends with
- * a variable section containing data for each of the paragraphs.
- * It may be possible to use this information to calculate staring
- * positions for each paragraph rather than iterating through the
- * entire byte stream.
- */
-
- int value;
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- while ((value = docData.read()) != -1) {
- bos.write(value);
- }
-
-
- byte[] contentData = bos.toByteArray();
- int start = 0, end = 0;
- boolean sawMarker = false;
-
- for (int i = 0; i < contentData.length; i += 4) {
- if (contentData[i + 2] == (byte)0xFF
- && contentData[i + 3] == (byte)0xFF && !sawMarker) {
- start = i - 8;
- sawMarker = true;
- continue;
- }
-
- if (contentData[i + 2] == (byte)0xFF
- && contentData[i + 3] == (byte)0xFF && sawMarker) {
- end = i - 8;
- ByteArrayOutputStream paragraph = new ByteArrayOutputStream();
- paragraph.write(contentData, start, end - start);
- paragraphs.add(new Paragraph(paragraph.toByteArray()));
-
- // Reset the markers
- sawMarker = false;
- i -= 4; // Skip back
- }
-
- }
-
- /*
- * Special case, the last paragraph
- * If we got here, and the marker is set then we saw the start of the
- * last paragraph, but no following paragraph
- */
- ByteArrayOutputStream paragraph = new ByteArrayOutputStream();
- if (contentData[contentData.length - 19] == 0) {
- paragraph.write(contentData, start, contentData.length - start - 20);
- }
- else {
- paragraph.write(contentData, start, contentData.length - start - 18);
- }
- paragraphs.add(new Paragraph(paragraph.toByteArray()));
- }
-
-
- /*
- * Utility method to make sure the document name is stripped of any file
- * extensions before use.
- */
- private String trimDocumentName(String name) {
- String temp = name.toLowerCase();
-
- if (temp.endsWith(FILE_EXTENSION)) {
- // strip the extension
- int nlen = name.length();
- int endIndex = nlen - FILE_EXTENSION.length();
- name = name.substring(0,endIndex);
- }
-
- return name;
- }
-
-
- /**
- * <p>Method to provide access to all of the <code>Paragraph</code> objects
- * in the <code>Document</code>.</p>
- *
- * @return <code>Enumeration</code> over the paragraphs in the document.
- */
- public Enumeration getParagraphEnumeration() {
- return paragraphs.elements();
- }
-
-
- /**
- * <p>Returns the <code>Document</code> name with no file extension.</p>
- *
- * @return The <code>Document</code> name with no file extension.
- */
- public String getName() {
- return docName;
- }
-
-
- /**
- * <p>Returns the <code>Document</code> name with file extension.</p>
- *
- * @return The <code>Document</code> name with file extension.
- */
- public String getFileName() {
- return new String(docName + FILE_EXTENSION);
- }
-
-
- /**
- * <p>Writes out the <code>Document</code> content to the specified
- * <code>OutputStream</code>.</p>
- *
- * <p>This method may not be thread-safe.
- * Implementations may or may not synchronize this
- * method. User code (i.e. caller) must make sure that
- * calls to this method are thread-safe.</p>
- *
- * @param os <code>OutputStream</code> to write out the
- * <code>Document</code> content.
- *
- * @throws IOException If any I/O error occurs.
- */
- public void write(OutputStream os) throws IOException {
- DataOutputStream dos = new DataOutputStream(os);
-
- initPreamble();
- dos.write(preamble);
-
- loadFonts();
- for (int i = 0; i < fonts.size(); i++ ) {
- ByteArrayOutputStream fontData = (ByteArrayOutputStream)fonts.elementAt(i);
- dos.write(fontData.toByteArray());
- }
-
-
- for (int i = 0; i < paragraphs.size(); i++) {
- Paragraph para = (Paragraph)paragraphs.elementAt(i);
- descriptor.addParagraph((short)para.getTextLength(), para.getLines());
- }
- dos.write(descriptor.getDescriptor());
-
- for (int i = 0; i < paragraphs.size(); i++ ) {
- Paragraph para = (Paragraph)paragraphs.elementAt(i);
-
- // Last paragraph has some extra data
- if (i + 1 == paragraphs.size()) {
- para.setLastParagraph(true);
- }
- dos.write(para.getParagraphData());
- }
-
-
- /*
- * Before we write out the trailer, we need to make sure that it will
- * lead to the file ending on a 4 byte boundary.
- */
- if (dos.size() % 4 == 0) {
- dos.write((byte)0x00);
- dos.write((byte)0x00);
- }
-
- dos.write(trailer);
-
- dos.flush();
- dos.close();
- }
-
-
- /**
- * <p>This method adds a new paragraph element to the document. No string
- * data is added to the paragraph.</p>
- *
- * <p><b>N.B.</b> The newly added paragraph becomes the current paragraph and
- * is used as the target for all subsequent calls to addParagraphData().</p>
- *
- * @param style Paragraph Style object describing the formatting for
- * the new paragraph. Can be null.
- * @param listElement true if this paragraph is to be bulleted;
- * false otherwise.
- */
- public void addParagraph(ParaStyle style, boolean listElement) {
- /* For the moment, only support basic text entry in a single paragraph */
- Paragraph para = new Paragraph(style);
-
- paragraphs.add(para);
-
- pStyle = style;
- currentPara = para;
-
- if (listElement) {
- para.setBullets(true);
- }
- }
-
-
- /**
- * <p>This method adds text to the current paragraph.</p>
- *
- * <p>If no paragraphs exist within the document, it creates one.</p>
- *
- * @param data The string data for this segment.
- * @param style Text Style object describing the formatting of this
- * segment. Can be null.
- */
- public void addParagraphData(String data, TextStyle style) {
- if (currentPara == null) {
- addParagraph(null, false);
- }
- currentPara.addTextSegment(data, style);
- }
-
-
- /*
- * Preamble is the portion before font specification which never
- * seems to change from one file, or one saved version, to the next.
- *
- * Bytes 18h and 19h seem to contain the number of fonts and should
- * be modified when all of the fonts have been specified.
- * These bytes are the first two on the fourth line below.
- */
- private void initPreamble() {
- preamble = new byte[] { 0x7B, 0x5C, 0x70, 0x77, 0x69, 0x15, 0x00, 0x00,
- 0x01, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x00, 0x2C, 0x00, 0x01, 0x00, 0x0A, 0x00, // Bytes 3-4 Font??
- 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Bytes 1-2 # Fonts
- 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00 };
- }
-
-
- /*
- * This method writes the minimum font data that is used by the converter.
- * Currently, all documents convert to 10 point Courier New. Tahoma is
- * always mentioned in Pocket Word files, however, even if it is not used.
- *
- * TODO: Rewrite to allow for multiple fonts once font support issues
- * have been resolved.
- */
- private void loadFonts() {
- ByteArrayOutputStream fontData = new ByteArrayOutputStream();
-
- try {
- fontData.write(new String("Tahoma").getBytes("UTF-16LE"));
- fontData.write(new byte[52]); // Rest of font name?
- fontData.write(new byte[] { 0x02, 0x00, 0x01, 0x00 } );
- fontData.write(new byte[] { 0x00, 0x00, 0x01, 0x00 } );
- fontData.write(new byte[] { 0x00, 0x00, 0x00, 0x00 } );
- fontData.write(new byte[] { 0x00, 0x00, 0x00, 0x00 } );
-
- fonts.add(fontData);
-
- fontData = new ByteArrayOutputStream();
-
- fontData.write(new String("Courier New").getBytes("UTF-16LE"));
- fontData.write(new byte[42]);
- fontData.write(new byte[] { 0x14, 0x00, 0x04, 0x00 } );
- fontData.write(new byte[] { 0x01, 0x00, 0x00, 0x00 } );
- fontData.write(new byte[] { 0x00, 0x00, 0x15, 0x00 } );
-
- // Next part indicates that this is the last font
- fontData.write(new byte[] { 0x05, 0x00, 0x01, 0x00 } );
-
- fonts.add(fontData);
- }
- catch (IOException ioe) {
- // Shouldn't happen as this is a memory based stream
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/build.xml
deleted file mode 100644
index 9253aa503359..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/build.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcxs_pocketword" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcxs_pocketword"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxw/pocketword"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/DocumentDescriptor.java"/>
- <include name="${package}/DocumentDeserializerImpl.java"/>
- <include name="${package}/DocumentSerializerImpl.java"/>
- <include name="${package}/Paragraph.java"/>
- <include name="${package}/ParagraphTextSegment.java"/>
- <include name="${package}/PluginFactoryImpl.java"/>
- <include name="${package}/PocketWordConstants.java"/>
- <include name="${package}/PocketWordDocument.java"/>
- <include name="${package}/DocumentMergerImpl.java"/>
- <include name="${package}/ConverterCapabilitiesImpl.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/converter.xml
deleted file mode 100644
index aaa0dcc32e0d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/converter.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-
-<converters>
- <converter type="staroffice/sxw" version="1.1">
- <converter-display-name>
- Pocket Word
- </converter-display-name>
- <converter-description>
- OpenOffice Writer XML to/from Pocket Word conversion.
- </converter-description>
- <converter-vendor>
- OpenOffice.org
- </converter-vendor>
- <converter-class-impl>
- org.openoffice.xmerge.converter.xml.sxw.pocketword.PluginFactoryImpl
- </converter-class-impl>
- <converter-target type="application/x-pocket-word"/>
- </converter>
-</converters>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html
deleted file mode 100644
index ecc7d6105d83..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/pocketword/package.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.converter.xml.sxw.pocketword package</title>
-</head>
-
-<body bgcolor="white">
-
-<p>Plugin for the conversion of documents between StarWriter XML and
- Pocket Word format.</p>
-<p>This plugin suports conversion of most features supported by Pocket Word.</p>
-<ul>
- <li>Bold, Italic, Underline</li>
- <li>Strikethrough</li>
- <li>Highlight</li>
- <li>Colours</li>
- <li>Lists</li>
- <li>Alignments</li>
-</ul>
-
-<p>Additionally, work on fonts is currently underway.</p>
-
-<p>This plugin is based on the Windows CE 3.0 version of Pocket Word.<br>
- Testing was carried out using Pocket PC 2000 and Pocket PC 2002 devices.</p>
-
-<p>It follows the {@link org.openoffice.xmerge} framework
-for the conversion process.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java
deleted file mode 100644
index 510f983e8248..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/ConverterCapabilitiesImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * <p>WordSmith implementation of <code>ConverterCapabilities</code> for
- * the {@link
- * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>Used with StarWriter XML to/from WordSmith conversions.
- * The <code>ConverterCapibilies</code> specify which &quot;Office&quot;
- * <code>Document</code> tags and attributes are supported on the
- * &quot;Device&quot; <code>Document</code> format.</p>
- */
-public final class ConverterCapabilitiesImpl
- implements ConverterCapabilities {
-
- public boolean canConvertTag(String tag) {
-
- if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag))
- return true;
- else if (OfficeConstants.TAG_PARAGRAPH.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HEADING.equals(tag))
- return true;
- else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_ITEM.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_HEADER.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPAN.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HYPERLINK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LINE_BREAK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPACE.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TAB_STOP.equals(tag))
- return true;
-
- return false;
- }
-
- public boolean canConvertAttribute(String tag,
- String attribute) {
-
- if (OfficeConstants.TAG_SPACE.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute))
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java
deleted file mode 100644
index 546d3060eb9b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DOCConstants.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-/**
- * Constants used for encoding and decoding the WordSmith format.
- *
- * @author Herbie Ong, David Proulx
- */
-interface DOCConstants {
-
- /** Constant for uncompressed version. */
- public static final short UNCOMPRESSED = 1;
-
- /** Constant for compressed version. */
- public static final short COMPRESSED = 2;
-
- /** Constant used for spare fields. */
- public static final int SPARE = 0;
-
- /** WordSmith record size. */
- public static final short TEXT_RECORD_SIZE = 4096;
-
- /** Constant for encoding scheme. */
- public static final String ENCODING = "8859_1";
-
- /** Constant for TAB character. */
- public final static char TAB_CHAR = '\t';
-
- /** Constant for EOL character. */
- public final static char EOL_CHAR = '\n';
-
- /** Constant for SPACE character. */
- public final static char SPACE_CHAR = ' ';
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java
deleted file mode 100644
index ad90541afbbb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentDeserializerImpl.java
+++ /dev/null
@@ -1,565 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import org.w3c.dom.*;
-
-import java.io.IOException;
-import java.util.Enumeration;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.palm.PalmDB;
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.converter.palm.PdbDecoder;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-
-import java.util.Vector;
-import java.io.ByteArrayInputStream;
-
-import org.openoffice.xmerge.converter.xml.*;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.XmlUtil;
-
-/**
- * <p>WordSmith implementation of
- * org.openoffice.xmerge.DocumentDeserializer
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * The <code>deserialize</code> method uses a
- * <code>DocDecoder</code> to read the WordSmith format into a
- * <code>String</code> object, then it calls <code>buildDocument</code>
- * to create a <code>SxwDocument</code> object from it.
- *
- * @author Herbie Ong, David Proulx
- */
-public final class DocumentDeserializerImpl
-implements DOCConstants, OfficeConstants, DocumentDeserializer {
-
- /** A Decoder object for decoding WordSmith format. */
- private WSDecoder decoder = null;
-
- WseFontTable fontTable = null;
- WseColorTable colorTable = null;
- StyleCatalog styleCat = null;
- StyleCatalog oldStyleCat = null;
-
- /** A <code>ConvertData</code> object assigned to this object. */
- private ConvertData cd = null;
-
-
- /**
- * Constructor that assigns the given <code>ConvertData</code>
- * to the object.
- *
- * @param cd A <code>ConvertData</code> object to read data for
- * the conversion process by the deserialize method.
- */
- public DocumentDeserializerImpl(ConvertData cd) {
- this.cd = cd;
- }
-
-
- /**
- * Convert the given <code>ConvertData</code> into a
- * <code>SxwDocument</code> object.
- *
- * @return Resulting <code>Document</code> object.
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public Document deserialize() throws ConvertException,
- IOException {
- return deserialize(null, cd);
- }
-
-
- public Document deserialize(Document origDoc, ConvertData cd)
- throws IOException {
-
- Document doc = null;
- PalmDocument palmDoc = null;
- Enumeration e = cd.getDocumentEnumeration();
-
- while(e.hasMoreElements()) {
- palmDoc = (PalmDocument) e.nextElement();
- PalmDB pdb = palmDoc.getPdb();
- Record[] recs = pdb.getRecords();
- decoder = new WSDecoder();
- Wse[] b = decoder.parseDocument(recs);
- String docName = palmDoc.getName();
- doc = buildDocument(docName, b, origDoc);
- }
- return doc;
- }
-
-
- /**
- * Temporary method to read existing <code>StyleCatalog</code>
- * as a starting point.
- *
- * @param parentDoc The parent <code>Document</code>.
- */
- private void readStyleCatalog(Document parentDoc) {
- Element rootNode = null;
- try {
- java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
- parentDoc.write(bos);
- SxwDocument sxwDoc = new SxwDocument("old");
- sxwDoc.read(new ByteArrayInputStream(bos.toByteArray()));
- org.w3c.dom.Document domDoc = sxwDoc.getContentDOM();
-
- String families[] = new String[3];
- families[0] = "text";
- families[1] = "paragraph";
- families[2] = "paragraph";
- Class classes[] = new Class[3];
- classes[0] = TextStyle.class;
- classes[1] = ParaStyle.class;
- classes[2] = TextStyle.class;
-
- NodeList nl = domDoc.getElementsByTagName(TAG_OFFICE_STYLES);
- oldStyleCat.add(nl.item(0), families, classes, null, false);
- nl = domDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- oldStyleCat.add(nl.item(0), families, classes, null, false);
- nl = domDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES);
- oldStyleCat.add(nl.item(0), families, classes, null, false);
-
- } catch (Exception e) {
- Debug.log(Debug.ERROR, "", e);
- }
-
- }
-
-
- /**
- * Given an array of paragraph <code>Style</code> objects, see if
- * there is exactly one which matches the text formatting
- * <code>Style</code> of <code>tStyle</code>.
- *
- * @param paraStyles An array of paragraph <code>Style</code>
- * objects.
- * @param tStyle Text <code>Style</code> to match.
- *
- * @return The paragraph <code>Style</code> that matches.
- */
- private ParaStyle matchParaByText(Style paraStyles[], TextStyle tStyle) {
- int matchIndex = -1;
- int matchCount = 0;
- Style txtMatches[] = (Style[]) oldStyleCat.getMatching(tStyle);
- if (txtMatches.length >= 1) {
- for (int j = 0; j < txtMatches.length; j++) {
- TextStyle t = (TextStyle)txtMatches[j];
-
- if (!t.getFamily().equals("paragraph"))
- continue;
-
- for (int k = 0; k < paraStyles.length; k++) {
- if (t.getName().equals(paraStyles[k].getName())) {
- matchCount++;
- matchIndex = k;
- }
- }
- }
- }
- if (matchCount == 1)
- return (ParaStyle)paraStyles[matchIndex];
- else return null;
- }
-
-
- /**
- * Take a <code>String</code> of text and turn it into a sequence
- * of <code>Node</code> objects.
- *
- * @param text <code>String</code> of text.
- * @param parentDoc Parent <code>Document</code>.
- *
- * @return Array of <code>Node</code> objects.
- */
- private Node[] parseText(String text, org.w3c.dom.Document parentDoc) {
- Vector nodeVec = new Vector();
-
- // Break up the text from the WordSmith text run into Open
- // Office text runs. There may be more runs in OO because
- // runs of 2 or more spaces map to nodes.
- while ((text.indexOf(" ") != -1) || (text.indexOf("\t") != 1)) {
-
- // Find the indices of tabs and multiple spaces, and
- // figure out which of them occurs first in the string.
- int spaceIndex = text.indexOf(" ");
- int tabIndex = text.indexOf("\t");
- if ((spaceIndex == -1) && (tabIndex == -1))
- break; // DJP This should not be necessary. What is wrong
- // with the while() stmt up above?
- int closerIndex; // Index of the first of these
- if (spaceIndex == -1)
- closerIndex = tabIndex;
- else if (tabIndex == -1)
- closerIndex = spaceIndex;
- else
- closerIndex = (spaceIndex > tabIndex) ? tabIndex : spaceIndex;
-
- // If there is any text prior to the first occurrence of a
- // tab or spaces, create a text node from it, then chop it
- // off the string we're working with.
- if (closerIndex > 0) {
- String beginningText = text.substring(0, closerIndex);
- Text textNode = parentDoc.createTextNode(beginningText);
- nodeVec.addElement(textNode);
- log("<TEXT>");
- log(beginningText);
- log("</TEXT>");
- }
- text = text.substring(closerIndex);
-
- // Handle either tab character or space sequence by creating
- // an element for it, and then chopping out the text that
- // represented it in "text".
- if (closerIndex == tabIndex) {
- Element tabNode = parentDoc.createElement(TAG_TAB_STOP);
- nodeVec.add(tabNode);
- text = text.substring(1); // tab is always a single character
- log("<TAB/>");
- } else {
- // Compute length of space sequence.
- int nrSpaces = 2;
- while ((nrSpaces < text.length())
- && text.substring(nrSpaces, nrSpaces + 1).equals(" "))
- nrSpaces++;
-
- Element spaceNode = parentDoc.createElement(TAG_SPACE);
- spaceNode.setAttribute(ATTRIBUTE_SPACE_COUNT, new Integer(nrSpaces).toString());
- nodeVec.add(spaceNode);
- text = text.substring(nrSpaces);
- log("<SPACE count=\"" + nrSpaces + "\" />");
- }
- }
-
- // No more tabs or space sequences. If there's any remaining
- // text create a text node for it.
- if (text.length() > 0) {
- Text textNode = parentDoc.createTextNode(text);
- nodeVec.add(textNode);
- log("<TEXT>");
- log(text);
- log("</TEXT>");
- }
-
- // Now create and populate an array to return the nodes in.
- Node nodes[] = new Node[nodeVec.size()];
- for (int i = 0; i < nodeVec.size(); i++)
- nodes[i] = (Node)nodeVec.elementAt(i);
- return nodes;
- }
-
-
- /**
- * Parses the text content of a WordSmith format and builds a
- * <code>SXWDocument</code>.
- *
- * @param docName <code>Document</code> name
- * @param str Text content of WordSmith format
- *
- * @return Resulting <code>SXWDocument</code> object.
- *
- * @throws IOException If any I/O error occurs.
- */
- private SxwDocument buildDocument(String docName, Wse[] data, Document origDoc)
- throws IOException {
-
- // create minimum office xml document.
- SxwDocument sxwDoc = new SxwDocument(docName);
- sxwDoc.initContentDOM();
-
- org.w3c.dom.Document doc = sxwDoc.getContentDOM();
-
- // Grab hold of the office:body tag,
- // Assume there should be one.
- // This is where top level paragraphs will append to.
- NodeList list = doc.getElementsByTagName(TAG_OFFICE_BODY);
- Node bodyNode = list.item(0);
-
- styleCat = new StyleCatalog(50);
- oldStyleCat = new StyleCatalog(50);
- if (origDoc != null)
- readStyleCatalog(origDoc);
-
- Element currPara = null;
- ParaStyle currParaStyle = null;
- int newTextStyleNr = 0;
- int newParaStyleNr = 0;
-
- // Now write out the document body by running through
- // the list of WordSmith elements and processing each one
- // in turn.
- for (int i = 0; i < data.length; i++) {
-
- if (data[i].getClass() == WsePara.class) {
-
- currPara = doc.createElement(TAG_PARAGRAPH);
- log("</PARA>");
- log("<PARA>");
-
- WsePara p = (WsePara)data[i];
-
- // Save info about the first text run, if there is one.
- WseTextRun firstTextRun = null;
-
- if ((data.length >= i + 2)
- && (data[i+1].getClass() == WseTextRun.class))
- firstTextRun = (WseTextRun)data[i+1];
-
- Style matches[] = oldStyleCat.getMatching(p.makeStyle());
-
- // See if we can find a unique match in the catalog
- // of existing styles from the original document.
- ParaStyle pStyle = null;
- if (matches.length == 1) {
- pStyle = (ParaStyle)matches[0];
- log("using an existing style");
- } else if ((matches.length > 1) && (firstTextRun != null)) {
- pStyle = matchParaByText(matches, firstTextRun.makeStyle());
- log("resolved a para by looking @ text");
- }
-
- // If nothing found so far, try looking in the catalog
- // of newly-created styles.
- // DJP FIXME: if we need to add two para styles with the
- // same para formatting info but different default text
- // styles, this won't work!
- if (pStyle == null) {
- log("had " + matches.length + " matches in old catalog");
- matches = styleCat.getMatching(p.makeStyle());
- if (matches.length == 0) {
- pStyle = p.makeStyle();
- String newName = new String("PPP" + ++newParaStyleNr);
- pStyle.setName(newName);
- styleCat.add(pStyle);
- // DJP: write in the text format info here
- log("created a new style");
- } else if (matches.length == 1) {
- pStyle = (ParaStyle)matches[0];
- log("re-using a new style");
- } else if (firstTextRun != null) {
- pStyle = matchParaByText(matches, firstTextRun.makeStyle());
- if (pStyle != null) {
- log("resolved a (new) para by looking @ text");
- } else
- log("Hey this shouldn't happen! - nr of matches is "
- + matches.length);
- }
- }
-
- if (pStyle == null)
- log("Unable to figure out a para style");
-
- // Figured out a style to use. Specify the style in this
- // paragraph's attributes.
- currPara.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, pStyle.getName());
-
- bodyNode.appendChild(currPara);
- currParaStyle = pStyle;
- } else if (data[i].getClass() == WseTextRun.class) {
- WseTextRun tr = (WseTextRun)data[i];
- TextStyle trStyle = null;
- Node trNodes[] = parseText(tr.getText(), doc);
-
- // First see if the formatting of this text run matches
- // the default text formatting for this paragraph. If
- // it does, then just make the text node(s) children of
- // the current paragraph.
- Style[] cps = new Style[1];
- cps[0] = currParaStyle;
- if (matchParaByText(cps, tr.makeStyle()) != null) {
- for (int ii = 0; ii < trNodes.length; ii++) {
- currPara.appendChild(trNodes[ii]);
- }
- continue;
- }
-
- // Check for existing, matching styles in the old style
- // catalog. If exactly one is found, use it. Otherwise,
- // check the new style catalog, and either use the style
- // found or add this new one to it.
- Style matches[] = oldStyleCat.getMatching(tr.makeStyle());
- if (matches.length == 1)
- trStyle = (TextStyle)matches[0];
- else {
- matches = styleCat.getMatching(tr.makeStyle());
- if (matches.length == 0) {
- trStyle = tr.makeStyle();
- String newName = new String("TTT" + ++newTextStyleNr);
- trStyle.setName(newName);
- styleCat.add(trStyle);
- } else if (matches.length == 1)
- trStyle = (TextStyle)matches[0];
- else
- log("multiple text style matches from new catalog");
- }
-
- // Create a text span node, set the style attribute, make the
- // text node(s) its children, and append it to current paragraph's
- // list of children.
- Element textSpanNode = doc.createElement(TAG_SPAN);
- textSpanNode.setAttribute(ATTRIBUTE_TEXT_STYLE_NAME, trStyle.getName());
- for (int ii = 0; ii < trNodes.length; ii++) {
- textSpanNode.appendChild(trNodes[ii]);
- }
- currPara.appendChild(textSpanNode);
- log("</SPAN>");
- }
-
- else if (data[i].getClass() == WseFontTable.class) {
- fontTable = (WseFontTable)data[i];
- }
-
- else if (data[i].getClass() == WseColorTable.class) {
- colorTable = (WseColorTable)data[i];
- }
- }
-
-
- //NodeList r = doc.getElementsByTagName(TAG_OFFICE_DOCUMENT);
- NodeList r = doc.getElementsByTagName(TAG_OFFICE_DOCUMENT_CONTENT);
- Node rootNode = r.item(0);
-
- // read the original document
- org.w3c.dom.NodeList nl;
- if (origDoc != null) {
- java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();
- origDoc.write(bos);
- SxwDocument origSxwDoc = new SxwDocument("old");
- origSxwDoc.read(new ByteArrayInputStream(bos.toByteArray()));
- org.w3c.dom.Document origDomDoc = origSxwDoc.getContentDOM();
-
- XmlUtil xu = new XmlUtil();
- org.w3c.dom.DocumentFragment df;
- org.w3c.dom.Node newNode;
-
- // copy font declarations from original document to the new document
- nl = origDomDoc.getElementsByTagName(TAG_OFFICE_FONT_DECLS);
- df = doc.createDocumentFragment();
- newNode = xu.deepClone(df, nl.item(0));
- rootNode.insertBefore(newNode, bodyNode);
-
- // copy style catalog from original document to the new document
- nl = origDomDoc.getElementsByTagName(TAG_OFFICE_STYLES);
- df = doc.createDocumentFragment();
- newNode = xu.deepClone(df, nl.item(0));
- rootNode.insertBefore(newNode, bodyNode);
-
- nl = origDomDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- df = doc.createDocumentFragment();
- newNode = xu.deepClone(df, nl.item(0));
- rootNode.insertBefore(newNode, bodyNode);
-
- nl = origDomDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES);
- df = doc.createDocumentFragment();
- newNode = xu.deepClone(df, nl.item(0));
- rootNode.insertBefore(newNode, bodyNode);
- }
-
- // Original document not specified. We need to add font declarations.
- // DJP: this might just be for debugging. Merger will probably put
- // the "real" ones in.
- // DJP: if really doing it this way, do it right: gather font names
- // from style catalog(s).
- else {
- org.w3c.dom.Node declNode;
-
- log("<FONT-DECLS/>");
-
- declNode = doc.createElement(TAG_OFFICE_FONT_DECLS);
- rootNode.insertBefore(declNode, bodyNode);
- org.w3c.dom.Element fontNode;
-
- fontNode = doc.createElement(TAG_STYLE_FONT_DECL);
- fontNode.setAttribute(ATTRIBUTE_STYLE_NAME, "Arial");
- fontNode.setAttribute(ATTRIBUTE_FO_FONT_FAMILY, "Arial");
- fontNode.setAttribute(ATTRIBUTE_STYLE_FONT_PITCH, "variable");
- declNode.appendChild(fontNode);
-
- fontNode = doc.createElement(TAG_STYLE_FONT_DECL);
- fontNode.setAttribute(ATTRIBUTE_STYLE_NAME, "Arioso");
- fontNode.setAttribute(ATTRIBUTE_FO_FONT_FAMILY, "Arioso");
- fontNode.setAttribute(ATTRIBUTE_STYLE_FONT_PITCH, "variable");
- declNode.appendChild(fontNode);
- }
-
-
- // Now add any new styles we have created in this document.
- nl = doc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- Node autoStylesNode = nl.item(0);
- if (autoStylesNode == null) {
- autoStylesNode = doc.createElement(TAG_OFFICE_AUTOMATIC_STYLES);
- log("<OFFICE-AUTOMATIC-STYLES/>");
- rootNode.insertBefore(autoStylesNode, bodyNode);
- }
-
- Node newStyleCatNode = styleCat.writeNode(doc, "dummy");
- nl = newStyleCatNode.getChildNodes();
- int nNodes = nl.getLength();
- for (int i = 0; i < nNodes; i++) {
- autoStylesNode.appendChild(nl.item(0));
- }
-
- oldStyleCat.dumpCSV(true);
- styleCat.dumpCSV(true);
- return sxwDoc;
- }
-
-
- /**
- * Sends message to the log object.
- *
- * @param str Debug message.
- */
- private void log(String str) {
-
- Debug.log(Debug.TRACE, str);
- }
-
-
- /*
- public static void main(String args[]) {
-
- // DocumentDeserializerImpl d = new DocumentDeserializerImpl(new InputStream());
-
- Node nodes[] = parseText("Tab here:\tThen some more text");
- }
-*/
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java
deleted file mode 100644
index c6dd88589fe5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentMergerImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.MergeException;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.diff.ParaNodeIterator;
-import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm;
-import org.openoffice.xmerge.merger.merge.DocumentMerge;
-import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge;
-import org.openoffice.xmerge.util.Debug;
-
-
-/**
- * Wordsmith implementation of <code>DocumentMerger</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- */
-public class DocumentMergerImpl implements DocumentMerger {
-
- private ConverterCapabilities cc_;
- private org.openoffice.xmerge.Document orig = null;
-
- public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) {
- cc_ = cc;
- this.orig = doc;
- }
-
- public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException {
-
- SxwDocument wdoc1 = (SxwDocument) orig;
- SxwDocument wdoc2 = (SxwDocument) modifiedDoc;
-
- Document doc1 = wdoc1.getContentDOM();
- Document doc2 = wdoc2.getContentDOM();
-
- Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement());
- Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement());
-
- DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm();
-
- // find out the paragrah level diffs
- Difference[] diffTable = diffAlgo.computeDiffs(i1, i2);
-
- if (Debug.isFlagSet(Debug.INFO)) {
- Debug.log(Debug.INFO, "Diff Result: ");
-
- for (int i = 0; i < diffTable.length; i++) {
- Debug.log(Debug.INFO, diffTable[i].debug());
- }
- }
-
- // merge the paragraphs
- NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge();
- DocumentMerge docMerge = new DocumentMerge(cc_, charMerge);
-
- Iterator result = null;
-
- docMerge.applyDifference(i1, i2, diffTable);
- }
-}
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java
deleted file mode 100644
index edbf7f5b4370..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/DocumentSerializerImpl.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import java.io.IOException;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.palm.PalmDB;
-import org.openoffice.xmerge.converter.palm.PdbEncoder;
-import org.openoffice.xmerge.converter.palm.Record;
-import org.openoffice.xmerge.converter.palm.PdbUtil;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.util.*;
-import org.openoffice.xmerge.converter.xml.*;
-
-/**
- * <p>WordSmith implementation of
- * org.openoffice.xmerge.DocumentSerializer
- * for the {@link
- * org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>The <code>serialize</code> method traverses the DOM
- * document from the given <code>Document</code> object. It uses a
- * <code>DocEncoder</code> object for the actual conversion of
- * contents to the WordSmith format.</p>
- *
- * @author Herbie Ong, David Proulx
- */
-
-// DJP: take out "implements OfficeConstants"
-public final class DocumentSerializerImpl
-implements OfficeConstants, DocumentSerializer {
-
- /** A WSEncoder object for encoding to WordSmith. */
- private WSEncoder encoder = null;
-
- /** The <code>StyleCatalog</code>. */
- private StyleCatalog styleCat = null;
-
- private WseFontTable fontTable = new WseFontTable();
- private WseColorTable colorTable = new WseColorTable();
-
- /**
- * The <code>SxwDocument</code> object that this converter
- * processes.
- */
- private SxwDocument sxwDoc = null;
-
- /**
- * Constructor.
- *
- * @param doc The <code>Document</code> to convert.
- */
- public DocumentSerializerImpl(Document doc) {
- sxwDoc = (SxwDocument) doc;
- }
-
-
- /**
- * <p>Method to convert a <code>Document</code> into a
- * <code>PalmDocument</code>.</p>
- *
- * <p>This method is not thread safe for performance reasons.
- * This method should not be called from within two threads.
- * It would be best to call this method only once per object
- * instance.</p>
- *
- * <p>Note that the doc parameter needs to be an XML
- * <code>Document</code>, else this method will throw a
- * <code>ClassCastException</code>. I think this is a hack,
- * but this is the only way to not modify most of the existing
- * code right now.</p>
- *
- * @param doc Input should be an XML <code>Document</code>
- * object
- * @param os Output of <code>PalmDB</code> object
- *
- * @throws ConvertException If any conversion error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData serialize()
- throws IOException {
-
-
- // get the server document name
- String docName = sxwDoc.getName();
-
- // get DOM document
- org.w3c.dom.Document domDoc = sxwDoc.getContentDOM();
-
- // Create WordSmith encoder object. Add WordSmith header,
- // empty font table to it.
- encoder = new WSEncoder();
- encoder.addElement(fontTable);
- encoder.addElement(colorTable);
-
- // Read the styles into the style catalog
- String families[] = new String[3];
- families[0] = "text";
- families[1] = "paragraph";
- families[2] = "paragraph";
- Class classes[] = new Class[3];
- classes[0] = TextStyle.class;
- classes[1] = ParaStyle.class;
- classes[2] = TextStyle.class;
- styleCat = new StyleCatalog(25);
-
- // Parse the input document
- // DJP todo: eliminate multiple calls to add() when it can
- // recurse properly.
- NodeList nl = domDoc.getElementsByTagName(TAG_OFFICE_STYLES);
- styleCat.add(nl.item(0), families, classes, null, false);
- nl = domDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- styleCat.add(nl.item(0), families, classes, null, false);
- nl = domDoc.getElementsByTagName(TAG_OFFICE_MASTER_STYLES);
- styleCat.add(nl.item(0), families, classes, null, false);
-
- // Traverse to the office:body element.
- // There should only be one.
- NodeList list = domDoc.getElementsByTagName(TAG_OFFICE_BODY);
- int len = list.getLength();
- if (len > 0) {
- Node node = list.item(0);
- traverseBody(node);
- }
-
- // create a PalmDB object and ConvertData object.
- //
- Record records[] = encoder.getRecords();
-
- ConvertData cd = new ConvertData();
- PalmDocument palmDoc = new PalmDocument(docName,
- PdbUtil.intID("WrdS"), PdbUtil.intID("BDOC"), 0,
- PalmDB.PDB_HEADER_ATTR_BACKUP, records);
- cd.addDocument(palmDoc);
- return cd;
- }
-
-
- /**
- * This method traverses <i>office:body</i> element.
- *
- * @param node <i>office:body</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseBody(Node node) throws IOException {
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH) ||
- nodeName.equals(TAG_HEADING)) {
-
- traverseParagraph(child);
-
- } else if (nodeName.equals(TAG_UNORDERED_LIST)) {
-
- traverseList(child);
-
- } else if (nodeName.equals(TAG_ORDERED_LIST)) {
-
- traverseList(child);
-
- } else {
-
- Debug.log(Debug.INFO, "<OTHERS " /* + XmlDebug.nodeInfo(child) */ + " />");
- }
- }
- }
- }
-
- }
-
-
- /**
- * This method traverses the <i>text:p</i> and <i>text:h</i>
- * element <code>Node</code> objects.
- *
- * @param node A <i>text:p</i> or <i>text:h</i> <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseParagraph(Node node) throws IOException {
-
- String styleName = findAttribute(node, "text:style-name");
- ParaStyle pstyle = (ParaStyle)styleCat.lookup(styleName, "paragraph",
- null, ParaStyle.class);
-
- // If the style does not exist in the style catalog for some reason,
- // make up a default style and use it. We'll have to add this default
- // style to the style catalog the first time it is used.
- if (pstyle == null) {
- styleName = "CONVERTER-DEFAULT";
- pstyle = (ParaStyle)styleCat.lookup(styleName, "paragraph", null,
- ParaStyle.class);
- if (pstyle == null) {
- pstyle = new ParaStyle(styleName, "paragraph", null,
- (String [])null, null, styleCat);
- styleCat.add(pstyle);
- styleCat.add(new TextStyle(styleName, "paragraph", null,
- 0, 0, 12, "Times-Roman", styleCat));
- }
- }
-
- pstyle = (ParaStyle)pstyle.getResolved();
- encoder.addElement(new WsePara(pstyle, styleCat));
- TextStyle defParaTextStyle = (TextStyle)
- styleCat.lookup(styleName, "paragraph", null, TextStyle.class);
-
- traverseParaContents(node, defParaTextStyle);
- }
-
-
- /**
- * This method traverses a paragraph content. Note that this
- * method may recurse to call itself.
- *
- * @param node A paragraph or content <code>Node</code>
- */
- private void traverseParaContents(Node node, TextStyle defTextStyle) {
-
- String styleName = findAttribute(node, "text:style-name");
- TextStyle style = (TextStyle)
- styleCat.lookup(styleName, "text", null, TextStyle.class);
-
- if (node.hasChildNodes()) {
- NodeList nodeList = node.getChildNodes();
- int nChildren = nodeList.getLength();
-
- for (int i = 0; i < nChildren; i++) {
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.TEXT_NODE) {
-
- // this is for grabbing text nodes.
- String s = child.getNodeValue();
-
- if (s.length() > 0) {
- if (style != null)
- encoder.addElement(new WseTextRun(s, style, styleCat,
- fontTable, colorTable));
- else
- encoder.addElement(new WseTextRun(s, defTextStyle,
- styleCat, fontTable, colorTable));
- }
-
- } else if (child.getNodeType() == Node.ELEMENT_NODE) {
-
- String childNodeName = child.getNodeName();
-
- if (childNodeName.equals(TAG_SPACE)) {
-
- // this is for text:s tags.
- NamedNodeMap map = child.getAttributes();
- Node attr = map.getNamedItem(ATTRIBUTE_SPACE_COUNT);
- StringBuffer space = new StringBuffer(" ");
- int count = 1;
-
- if (attr != null) {
- try {
- String countStr = attr.getNodeValue();
- count = Integer.parseInt(countStr.trim());
- } catch (NumberFormatException e) {
- Debug.log(Debug.ERROR, "Problem parsing space tag", e);
- }
- }
-
- for (int j = 1; j < count; j++)
- space.append(" ");
-
- encoder.addElement(new WseTextRun(space.toString(),
- defTextStyle,
- styleCat, fontTable, colorTable));
- Debug.log(Debug.INFO, "<SPACE count=\"" + count + "\" />");
-
- } else if (childNodeName.equals(TAG_TAB_STOP)) {
-
- // this is for text:tab-stop
- encoder.addElement(new WseTextRun("\t", defTextStyle, styleCat,
- fontTable, colorTable));
-
- Debug.log(Debug.INFO, "<TAB/>");
-
- } else if (childNodeName.equals(TAG_LINE_BREAK)) {
-
- // this is for text:line-break
- encoder.addElement(new WseTextRun("\n", defTextStyle,
- styleCat, fontTable, colorTable));
-
- Debug.log(Debug.INFO, "<LINE-BREAK/>");
-
- } else if (childNodeName.equals(TAG_SPAN)) {
-
- // this is for text:span
- Debug.log(Debug.INFO, "<SPAN>");
- traverseParaContents(child, defTextStyle);
- Debug.log(Debug.INFO, "</SPAN>");
-
- } else if (childNodeName.equals(TAG_HYPERLINK)) {
-
- // this is for text:a
- Debug.log(Debug.INFO, "<HYPERLINK>");
- traverseParaContents(child, defTextStyle);
- Debug.log(Debug.INFO, "<HYPERLINK/>");
-
- } else if (childNodeName.equals(TAG_BOOKMARK) ||
- childNodeName.equals(TAG_BOOKMARK_START)) {
-
- Debug.log(Debug.INFO, "<BOOKMARK/>");
-
- } else {
-
- Debug.log(Debug.INFO, "<OTHERS " /* + XmlDebug.nodeInfo(child) */ + " />");
- }
-
- }
-
- }
- }
- }
-
-
- /**
- * This method traverses list tags <i>text:unordered-list</i> and
- * <i>text:ordered-list</i>. A list can only contain one optional
- * <i>text:list-header</i> and one or more <i>text:list-item</i>
- * elements.
- *
- * @param node A list <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseList(Node node) throws IOException {
-
- Debug.log(Debug.TRACE, "<LIST>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
-
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_LIST_ITEM)) {
-
- traverseListItem(child);
-
- } else if (nodeName.equals(TAG_LIST_HEADER)) {
-
- traverseListHeader(child);
-
- } else {
-
- Debug.log(Debug.ERROR, "<INVALID-XML-BUG " + " />");
- }
- }
- }
- }
-
- Debug.log(Debug.TRACE, "</LIST>");
- }
-
-
- /**
- * This method traverses a <i>text:list-header</i> element.
- * It contains one or more <i>text:p</i> elements.
- *
- * @param node A list header <code>Node</code>.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseListHeader(Node node) throws IOException {
-
- Debug.log(Debug.TRACE, "<LIST-HEADER>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
-
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH)) {
-
- traverseParagraph(child);
-
- } else {
-
- Debug.log(Debug.TRACE, "<INVALID-XML-BUG " + " />");
- }
- }
- }
- }
-
- Debug.log(Debug.TRACE, "</LIST-HEADER>");
- }
-
-
- /**
- * This method will traverse a <i>text:list-item</i>.
- * A list item may contain one or more of <i>text:p</i>,
- * <i>text:h</i>, <i>text:section</i>,
- * <i>text:ordered-list</i> and <i>text:unordered-list</i>.
- *
- * This method currently only implements grabbing <i>text:p</i>,
- * <i>text:h</i>, <i>text:unordered-list</i> and
- * <i>text:ordered-list</i>.
- *
- * @param Node <code>Node</code> to traverse.
- *
- * @throws IOException If any I/O error occurs.
- */
- private void traverseListItem(Node node) throws IOException {
-
- Debug.log(Debug.TRACE, "<LIST-ITEM>");
-
- if (node.hasChildNodes()) {
-
- NodeList nodeList = node.getChildNodes();
- int len = nodeList.getLength();
-
- for (int i = 0; i < len; i++) {
-
- Node child = nodeList.item(i);
-
- if (child.getNodeType() == Node.ELEMENT_NODE) {
-
- String nodeName = child.getNodeName();
-
- if (nodeName.equals(TAG_PARAGRAPH)) {
-
- traverseParagraph(child);
-
- } else if (nodeName.equals(TAG_UNORDERED_LIST)) {
-
- traverseList(child);
-
- } else if (nodeName.equals(TAG_ORDERED_LIST)) {
-
- traverseList(child);
-
- } else {
-
- Debug.log(Debug.ERROR, "<INVALID-XML-BUG " + " />");
- }
- }
- }
- }
-
- Debug.log(Debug.TRACE, "</LIST-ITEM>");
- }
-
-
- /**
- * Look up a <code>Node</code> object's named attribute and return
- * its value
- *
- * @param node The <code>Node</code>.
- * @param name The attribute name.
- *
- * @return The value of the named attribute
- */
- private String findAttribute(Node node, String name) {
- NamedNodeMap attrNodes = node.getAttributes();
- if (attrNodes != null) {
- int len = attrNodes.getLength();
- for (int i = 0; i < len; i++) {
- Node attr = attrNodes.item(i);
- if (attr.getNodeName().equals(name))
- return attr.getNodeValue();
- }
- }
- return null;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java
deleted file mode 100644
index f8df638bd69f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/PluginFactoryImpl.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.DocumentMergerFactory;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.DocumentSerializerFactory;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.DocumentDeserializerFactory;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.sxw.SxwPluginFactory;
-import org.openoffice.xmerge.converter.palm.PalmDocument;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-
-/**
- * <p>WordSmith implementation of a <code>PluginFactory</code> that
- * encapsulates conversion of StarWriter XML format to and from
- * WordSmith format.</p>
- *
- * The superclass produces a particular
- * {@link org.openoffice.xmerge.Document Document}
- * object, i.e.
- * {@link org.openoffice.xmerge.converter.xml.sxw.SxwDocument
- * SxwDocument} that the converters in this class works with. Thus,
- * this class only implements the methods that produces the converters,
- * i.e. {@link
- * org.openoffice.xmerge.DocumentSerializer
- * DocumentSerializer} and {@link
- * org.openoffice.xmerge.DocumentDeserializer
- * DocumentDeserializer};
- * as well as the {@link
- * org.openoffice.xmerge.ConverterCapabilities
- * ConverterCapabilities} object that is specific to this format
- * conversion. That superclass also produces a {@link
- * org.openoffice.xmerge.DocumentMerger DocumentMerger}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxw.wordsmith.DocumentMergerImpl
- * DocumentMergerImpl} which this class derives the functionality.</p>
- *
- * @author Herbie Ong, Dave Proulx
- */
-public final class PluginFactoryImpl extends SxwPluginFactory
- implements DocumentDeserializerFactory, DocumentSerializerFactory,
- DocumentMergerFactory {
-
- public PluginFactoryImpl(ConverterInfo ci) {
- super(ci);
- }
-
- /** ConverterCapabilities object for this type of conversion. */
- private final static ConverterCapabilities converterCap =
- new ConverterCapabilitiesImpl();
-
-
- /**
- * Returns an instance of <code>DocumentSerializerImpl</code>, which is
- * an implementation of <code>DocumentSerializer</code> interface.
- *
- * @param doc <code>Document</code> object to be converted/serialized.
- *
- * @return A <code>DocumentSerializerImpl</code> object.
- */
- public DocumentSerializer createDocumentSerializer(Document doc) {
-
- return new DocumentSerializerImpl(doc);
- }
-
-
- /**
- * Returns an instance of <code>DocumentDeserializerImpl</code>,
- * which is an implementation of <code>DocumentDeserializer</code>
- * interface.
- *
- * @param cd <code>ConvertData</code> object for reading data
- * which will be converted back to a
- * <code>Document</code> object.
- *
- * @return A <code>DocumentDeserializerImpl</code> object.
- */
- public DocumentDeserializer createDocumentDeserializer(ConvertData cd) {
-
- return new DocumentDeserializerImpl(cd);
- }
-
- /**
- * Returns an instance of <code>DocumentMergerImpl</code>,
- * which is an implementation of the <code>DocumentMerger</code>
- * interface.
- *
- * @param doc <code>Document</code> to merge.
- *
- * @return A DocumentMergerImpl object.
- */
- public DocumentMerger createDocumentMerger(Document doc) {
-
- ConverterCapabilities cc = converterCap;
- DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc);
- return merger;
- }
-
- /**
- * Returns an instance of the DeviceDocument
- * which is an implementation of the <code>DocumentMerger</code>
- * interface.
- *
- * @param doc <code>Document</code> to merge.
- *
- * @return A Device Document object
- */
- public Document createDeviceDocument(String name, InputStream is)
- throws IOException {
-
- PalmDocument palmDoc = new PalmDocument(is);
- return palmDoc;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java
deleted file mode 100644
index 07e8ea97ea43..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSDecoder.java
+++ /dev/null
@@ -1,352 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.UnsupportedEncodingException;
-import org.openoffice.xmerge.util.Debug;
-
-import org.openoffice.xmerge.converter.palm.*;
-import org.openoffice.xmerge.util.Resources;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxw.wordsmith.DocumentDeserializerImpl
- * DocumentDeserializerImpl} to decode a WordSmith format. It currently
- * decodes the text content into a single <code>String</code> object.
- *
- * @author Herbie Ong, David Proulx
- */
-final class WSDecoder implements DOCConstants {
-
- /** For decoding purposes. */
- private final static int COUNT_BITS = 3;
-
- /** Resources object for I18N. */
- private Resources res = null;
-
- /**
- * Default constructor creates a header and
- * a text buffer for holding all the text in
- * the DOC db.
- */
- WSDecoder() {
- res = Resources.getInstance();
- }
-
- /**
- * Decode the text records into a single <code>byte</code> array.
- *
- * @param Record <code>Record</code> array holding WordSmith
- * contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- byte[] parseRecords(Record[] recs) throws IOException {
-
- // read the header record
- HeaderInfo header = readHeader(recs[0].getBytes());
- dumpHeader(header);
- byte[][] byteArrays = new byte[recs.length - 1][];
- for (int i = 0; i < recs.length - 1; i++) byteArrays[i] = null;
-
- switch (header.version & ~4) { // DJP: "4" indicates OOB data is present.
- // Add a constant to handle this, might also need code to handle it.
-
- case COMPRESSED:
- case 3: // DJP: determined this empirically. Are Herbie's constants wrong?
- for (int i = 1; i < recs.length; i++) {
- byteArrays[i-1] = decompress(recs[i].getBytes(),
- header.textRecordSize);
- Debug.log(Debug.INFO, "processing " + byteArrays[i-1].length + " bytes");
- }
-
- break;
-
- case UNCOMPRESSED:
- for (int i = 1; i < recs.length; i++) {
- byteArrays[i-1] = recs[i].getBytes();
- Debug.log(Debug.INFO, "processing " + byteArrays[i-1].length + " bytes");
- }
-
- break;
-
- default:
- throw new IOException(res.getString("UNKNOWN_DOC_VERSION"));
-
- }
-
- // Concatenate byteArrays[][] into a single byte array.
- int length = 0;
- for (int i = 0; i < recs.length - 1; i++)
- length += byteArrays[i].length;
- byte bigArray[] = new byte[length];
- int offset = 0;
- for (int i = 0; i < recs.length - 1; i++) {
- System.arraycopy(byteArrays[i], 0, bigArray, offset,
- byteArrays[i].length);
- offset += byteArrays[i].length;
- }
- return bigArray;
- }
-
-
- /**
- * Decode the text records into a <code>Wse</code> array.
- *
- * @param Record[] <code>Record</code> array holding DOC
- * contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- Wse[] parseDocument(Record[] recs) throws IOException {
-
- java.util.Vector v = new java.util.Vector(20, 20);
- WseFontTable fontTable = null;
- WseColorTable colorTable = null;
-
- // rawData is the document data to be parsed.
- byte rawData[] = parseRecords(recs);
-
- // beginning of document has some header information, including
- // optional font and color tables.
- // DJP: maybe should add a new WSelement (docHeader) to hold
- // header info.
- // DJP: finish code here to parse header
- if (rawData[0] != 2) throw new IOException();
- int nParagraphs = util.intFrom4bytes(rawData, 2);
- int nAtoms = util.intFrom4bytes(rawData, 6);
- int nChars = util.intFrom4bytes(rawData, 10);
- int miscSize = util.intFrom4bytes(rawData, 14);
- int curIndex = 18;
-
- while (curIndex < rawData.length) {
- if (WsePara.isValid(rawData, curIndex)) {
- v.add(new WsePara(rawData, curIndex));
- curIndex = WsePara.computeNewIndex(rawData, curIndex);
- } else if (WseTextRun.isValid(rawData, curIndex)) {
- v.add(new WseTextRun(rawData, curIndex, fontTable, colorTable));
- curIndex = WseTextRun.computeNewIndex(rawData, curIndex);
- } else if (WseFontTable.isValid(rawData, curIndex)) {
- fontTable = new WseFontTable(rawData, curIndex);
- v.add(fontTable);
- curIndex = WseFontTable.computeNewIndex(rawData, curIndex);
- } else if (WseColorTable.isValid(rawData, curIndex)) {
- colorTable = new WseColorTable(rawData, curIndex);
- v.add(colorTable);
- curIndex = WseColorTable.computeNewIndex(rawData, curIndex);
- } else {
- Debug.log(Debug.ERROR, "Unknown code " + rawData[curIndex]);
- throw new IOException();
- }
- }
-
- return (Wse[])v.toArray(new Wse[2]);
- }
-
-
- /**
- * <p>Decompress the <code>byte</code> array.</p>
- *
- * <p>The resulting uncompressed <code>byte</code> array
- * should be within <code>textRecordSize</code> length,
- * definitely within twice the size it claims, else treat
- * it as a problem with the encoding of that PDB and
- * throw <code>IOException</code>.</p>
- *
- * @param bytes Compressed <code>byte</code> array
- * @param textRecordSize Size of uncompressed <code>byte</code>
- * array
- *
- * @throws IOException If <code>textRecordSize</codeL &lt;
- * <code>cBytes.length</code>.
- */
- private byte[] decompress(byte[] cBytes, int textRecordSize)
- throws IOException {
-
- // create byte array for storing uncompressed bytes
- // it should be within textRecordSize range, definitely
- // within twice of textRecordSize! if not, then
- // an ArrayIndexOutOfBoundsException will get thrown,
- // and it should be converted into an IOException, and
- // treat it as a conversion error.
- byte[] uBytes = new byte[textRecordSize*2];
-
- int up = 0;
- int cp = 0;
-
- try {
-
- while (cp < cBytes.length) {
-
- int c = cBytes[cp++] & 0xff;
-
- // codes 1...8 mean copy that many bytes
- if (c > 0 && c < 9) {
-
- while (c-- > 0)
- uBytes[up++] = cBytes[cp++];
- }
-
- // codes 0, 9...0x7F represent themselves
- else if (c < 0x80) {
- uBytes[up++] = (byte) c;
- }
-
- // codes 0xC0...0xFF represent "space + ascii char"
- else if (c >= 0xC0) {
- uBytes[up++] = (byte) ' ';
- uBytes[up++] = (byte) (c ^ 0x80);
- }
-
- // codes 0x80...0xBf represent sequences
- else {
- c <<= 8;
- c += cBytes[cp++] & 0xff;
- int m = (c & 0x3fff) >> COUNT_BITS;
- int n = c & ((1 << COUNT_BITS) - 1);
- n += COUNT_BITS;
- while (n-- > 0) {
- uBytes[up] = uBytes[up - m];
- up++;
- }
- }
- }
-
- } catch (ArrayIndexOutOfBoundsException e) {
-
- throw new IOException(
- res.getString("DOC_TEXT_RECORD_SIZE_EXCEEDED"));
- }
-
- // note that ubytes may be larger that the amount of
- // uncompressed bytes, so trim it to another byte array
- // with the exact size.
- byte[] textBytes = new byte[up];
- System.arraycopy(uBytes, 0, textBytes, 0, up);
-
- return textBytes;
- }
-
-
- /**
- * Read the header <code>byte</code> array.
- *
- * @param bytes <code>byte</code> array containing header
- * record data.
- *
- * @return <code>HeaderInfo</code> object.
- *
- * @throws IOException If any I/O error occurs.
- */
- private HeaderInfo readHeader(byte[] bytes) throws IOException {
-
- HeaderInfo header = new HeaderInfo();
-
- ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
- DataInputStream dis = new DataInputStream(bis);
-
- // Normally the first 2 bytes comprised of the version
- // which should either be COMPRESSED or UNCOMPRESSED
- // SmartDoc/Quickword would add a 0x01 to the first
- // byte, thus their version would be 0x0101 for UNCOMPRESSED
- // instead of 0x0001 and 0x0102 for UNCOMPRESSED instead of
- // 0x0002.
-
- dis.readByte();
- header.version = dis.readByte();
-
- // read extra 2 unused bytes
- dis.readShort();
-
- // Read the text length, this should be unsigned 4 bytes.
- // We could store the read value into a long, but then
- // our current buffer limit is the max positive of an int.
- // That is a large enough limit, thus we shall stay with
- // storing the value in an int. If it exceeds, then
- // an IOException should be thrown.
- header.textLen = dis.readInt();
- if (header.textLen < 0) {
- throw new IOException(res.getString("DOC_TEXT_LENGTH_EXCEEDED"));
- }
-
- // read the number of records - unsigned 2 bytes
- header.textRecordCount = ((int) dis.readShort()) & 0x0000ffff;
-
- // read the record size - unsigned 2 bytes
- header.textRecordSize = ((int) dis.readShort()) & 0x0000ffff;
-
- // read extra 4 unused bytes
- dis.readInt();
-
- return header;
- }
-
-
- /**
- * Prints out header info into log.
- * Used for debugging purposes only.
- *
- * @param header <code>HeaderInfo</code> structure.
- */
- private void dumpHeader(HeaderInfo header) {
- /*
- log("<DOC_INFO ");
- log("version=\"" + header.version + "\" ");
- log("text-length=\"" + header.textLen + "\" ");
- log("number-of-records=\"" + header.textRecordCount + "\" ");
- log("record-size=\"" + header.textRecordSize + "\" />\n");
- */
- }
-
-
- /**
- * Inner class to store DOC header information.
- */
- private class HeaderInfo {
-
- /** length of text section */
- int textLen = 0;
-
- /** number of text records */
- int textRecordCount = 0;
-
- /**
- * size of a text record. This is normally the same as
- * TEXT_RECORD_SIZE, but some applications may modify this.
- */
- int textRecordSize = 0;
-
- /** compression type */
- int version = 0;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java
deleted file mode 100644
index 476e34c72e1f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WSEncoder.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.*;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Vector;
-
-import org.openoffice.xmerge.converter.palm.*;
-
-/**
- * This class is used by {@link
- * org.openoffice.xmerge.converter.xml.sxw.wordsmith.DocumentDeserializerImpl
- * DocumentDeserializerImpl} to encode the WordSmith format.
- *
- * @author David Proulx
- */
-
-// DJP: replace 4096 w/ a defined constant
-
-final class WSEncoder {
-
- /* DJP: These should probably go somewhere else! */
- /** Constant for uncompressed version. */
- public static final short UNCOMPRESSED = 1;
-
- /** Constant for compressed version. */
- public static final short COMPRESSED = 2;
-
- /** Constant used for spare fields. */
- public static final int SPARE = 0;
-
- /* WordSmith Header information. */
- private short version;
- private int textLen;
- private short maxRecSize;
- private int textRecCount = 0;
-
-
- /* WordSmith document elements. */
- WseHeader header = null;
- WseFontTable ft = null;
- WseColorTable ct = null;
- private Vector elements; // paragraphs & text runs
-
- /* Totals for the WordSmith document. */
- int nrParagraphs = 0;
- int nrAtoms = 0;
- int nrChars = 0;
-
-
- /**
- * Default constructor creates a header and
- * a text buffer for holding all the text in
- * the WordSmith database.
- */
- WSEncoder() {
- version = 1;
- textLen = 0;
- maxRecSize = 4096;
- elements = new Vector();
- }
-
-
- /**
- * This method adds a new element to the WordSmith document.
- *
- * @param elem WordSmith document element to add
- */
- void addElement(Wse elem) {
- if (elem.getClass() == WseHeader.class)
- header = (WseHeader)elem;
- else if (elem.getClass() == WseFontTable.class)
- ft = (WseFontTable)elem;
- else if (elem.getClass() == WseColorTable.class)
- ct = (WseColorTable)elem;
- else
- elements.addElement(elem);
- }
-
-
- /**
- * This method encodes the information given to
- * an array of palm Records in the WordSmith database format.
- *
- * @return <code>Record</code> array holding WordSmith contents.
- *
- * @throws IOException If any I/O error occurs.
- */
- Record[] getRecords() throws IOException {
-
- Vector allRecs = new Vector();
- int nElements = elements.size();
-
- // Count up the number of paragraphs, atoms, and characters.
- int currElement = 0;
- while (currElement < nElements) {
- Wse e = (Wse)elements.elementAt(currElement++);
- if (e.getClass() == WsePara.class)
- nrParagraphs++;
- if (e.getClass() == WseTextRun.class) {
- nrAtoms++;
- nrChars += ((WseTextRun)e).getText().length();
- }
- }
-
- byte[] currRec = new byte[4096];
- int currRecLen = 0;
-
- // This code assumes that the WordSmith header, font table,
- // and color table total less than 4096 bytes.
- header = new WseHeader(nrParagraphs, nrAtoms, nrChars, ft, ct);
- System.arraycopy(header.getBytes(), 0,
- currRec, currRecLen, header.getByteCount());
- currRecLen += header.getByteCount();
-
- if (ft != null) {
- System.arraycopy(ft.getBytes(), 0, currRec, currRecLen,
- ft.getByteCount());
- currRecLen += ft.getByteCount();
- }
- if (ct != null) {
- System.arraycopy(ct.getBytes(), 0, currRec, currRecLen,
- ct.getByteCount());
- currRecLen += ct.getByteCount();
- }
-
- currElement = 0;
- while (currElement < nElements) {
- Wse e = (Wse)elements.elementAt(currElement++);
- int length = e.getByteCount();
- if ((length + currRecLen) <= 4096) {
- System.arraycopy(e.getBytes(), 0, currRec, currRecLen, length);
- currRecLen += length;
- } else {
- // Copy in enough to get to full size, then create a
- // new Record and add it to the Vector.
- int firstPartLen = 4096 - currRecLen;
- System.arraycopy(e.getBytes(), 0, currRec, currRecLen,
- firstPartLen);
- Record r = new Record(currRec);
- allRecs.addElement(r);
-
- // Put the remainder at the beginning of the next record
- currRecLen = 0;
- System.arraycopy(e.getBytes(), firstPartLen, currRec,
- currRecLen, length - firstPartLen);
- currRecLen += length - firstPartLen;
- }
- }
-
- // Processed all the elements. Write out any remaining partial record.
- if (currRecLen > 0) {
- byte[] partial = new byte[currRecLen];
- System.arraycopy(currRec, 0, partial, 0, currRecLen);
- Record rr = new Record(partial);
- allRecs.addElement(rr);
- }
-
-
- // Record 0 is the WordSmith header. Do it last since it
- // contains totals for the entire document. It goes
- // before everything else.
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(bos);
- dos.writeShort(version);
- dos.writeShort(0);
- dos.writeInt(textLen);
- dos.writeShort(allRecs.size());
- dos.writeShort(maxRecSize);
- dos.writeInt(0);
- allRecs.insertElementAt(new Record(bos.toByteArray()), 0);
-
- // Convert Vector of Records to an array and return it.
- int nRecs = allRecs.size();
- Record recs[] = new Record[nRecs];
- for (int i = 0; i < nRecs; i++)
- recs[i] = (Record)allRecs.elementAt(i);
- return recs;
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java
deleted file mode 100644
index 778ff5d38f57..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/Wse.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import java.io.IOException;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.xml.*;
-
-
-/**
- * This is the superclass for all elements in a WordSmith document.
- * Elements can be paragraphs, text runs, font tables, or color tables.
- *
- * @author David Proulx
- */
-abstract class Wse {
-
- /**
- * Return true if <code>dataArray[startIndex]</code> is the start
- * of a valid element of this type.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- *
- * @return true if <code>dataArray[startIndex]</code> is the
- * start of a valid element of this type, false otherwise.
- */
- static boolean isValid(byte dataArray[], int startIndex) {
- return false;
- }
-
-
- /**
- * Compute and return the index of the first <code>byte</code>
- * following this element. It is assumed that the element
- * starting at <code>dataArray[startIndex]</code> is valid.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- *
- * @return The index of the first <code>byte</code> following
- * this element.
- */
- static int computeNewIndex(byte dataArray[], int startIndex) {
- return 0;
- }
-
-
- /**
- * Return the total number of bytes needed to represent this
- * object.
- *
- * @return The total number of bytes needed to represent this
- * object.
- */
- abstract int getByteCount();
-
-
- /**
- * Return an <code>byte</code> array representing this element.
- *
- * @return An <code>bytes</code> array representing this element.
- */
- abstract byte[] getBytes();
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java
deleted file mode 100644
index e5af0337283b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseColorTable.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import java.io.IOException;
-import java.awt.Color;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.xml.*;
-
-/**
- * This class represents a color table in a WordSmith document.
- *
- * @author David Proulx
- */
-class WseColorTable extends Wse {
-
- private Color fgColors[];
- private Color bgColors[];
-
- /**
- * Constructor to use when going from DOM to WordSmith
- */
- public WseColorTable() {
- fgColors = new Color[16];
- bgColors = new Color[16];
-
- // Always need these two!
- fgColors[0] = Color.black;
- bgColors[0] = Color.white;
-
- }
-
- /**
- * Constructor to use when going from WordSmith to DOM.
- *
- * @param dataArray <code>byte</code> array.
- * @param i The index.
- */
- public WseColorTable(byte dataArray[], int i) {
- fgColors = new Color[16];
- bgColors = new Color[16];
-
- i += 2; // Skip leading "64" and table length field.
- for (int k = 0; k < 16; k++) {
- fgColors[k] = new Color(((int)dataArray[i+1]) & 0xFF,
- ((int)dataArray[i+2]) & 0xFF,
- ((int)dataArray[i+3]) & 0xFF);
- i += 4;
- }
- for (int k = 0; k < 16; k++) {
- bgColors[k] = new Color(((int)dataArray[i+1]) & 0xFF,
- ((int)dataArray[i+2]) & 0xFF,
- ((int)dataArray[i+3]) & 0xFF);
- i += 4;
- }
-
- }
-
-
- /**
- * Compute the index of the first <code>byte</code> following the
- * paragraph descriptor, assuming that
- * <code>dataArray[startIndex]</code> is the beginning of a valid
- * paragraph descriptor.
- *
- * @param dataArray <code>byte</code array.
- * @param startIndex The start index.
- *
- * @return The index of the first <code>byte</code> following the
- * paragraph description.
- */
- static int computeNewIndex(byte dataArray[], int startIndex) {
- int tableLen = dataArray[startIndex + 1];
- tableLen &= 0xFF; // eliminate problems with sign-extension
- return startIndex + tableLen + 2;
- }
-
-
- /**
- * Return true if <code>dataArray[startIndex]</code> is the start
- * of a valid paragraph descriptor.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex Start index.
- *
- * @return true if <code>dataArray[startIndex]</code> is the start
- * of a valid paragraph descriptor, false otherwise.
- */
- static boolean isValid(byte dataArray[], int startIndex) {
- try {
- if (dataArray[startIndex] != 64)
- return false;
- int len = dataArray[startIndex + 1];
- len &= 0xFF; // eliminate problems with sign-extension
- int temp = dataArray[startIndex + (int)len + 2]; // probe end of table
- } catch (ArrayIndexOutOfBoundsException e) {
- return false;
- }
- return true;
- }
-
-
- /**
- * Return the number of bytes needed to represent this color table.
- *
- * @return The byte count.
- */
- int getByteCount() {
- return (32 * 4) + 1 + 1;
- }
-
-
- /**
- * Return a <code>byte</code> array representing this color table.
- *
- * @return <code>bytes</code> array representing this color table.
- */
- byte[] getBytes() {
- byte[] b = new byte[(32 * 4) + 1 + 1];
- b[0] = 0x40;
- b[1] = (byte)128;
- int i = 2;
- // int indVal = 0xd8;
- int indVal = 0;
-
- for (int j = 0; j < 16; j++) {
- b[i++] = (byte)indVal++;
- if (fgColors[j] != null) {
- b[i++] = (byte)fgColors[j].getRed();
- b[i++] = (byte)fgColors[j].getGreen();
- b[i++] = (byte)fgColors[j].getBlue();
- } else {
- b[i++] = (byte)0;
- b[i++] = (byte)0;
- b[i++] = (byte)0;
- }
- }
-
- for (int j = 0; j < 16; j++) {
- b[i++] = (byte)indVal++;
- if (bgColors[j] != null) {
- b[i++] = (byte)bgColors[j].getRed();
- b[i++] = (byte)bgColors[j].getGreen();
- b[i++] = (byte)bgColors[j].getBlue();
- } else {
- b[i++] = (byte)0xFF;
- b[i++] = (byte)0xFF;
- b[i++] = (byte)0xFF;
- }
- }
-
- return b;
- }
-
-
- /**
- * Return the index of the specified foreground or background
- * <code>Color</code>. (If the color is not already in the table,
- * it will be added.)
- *
- * Note that the implementation of this may include a "margin of
- * error" to prevent the color table from being filled up too
- * quickly.
- *
- * @param c The <code>Color</code>.
- * @param foreground true if foreground color, false if background
- * color
- *
- * @return The index of the specified foreground or background
- * <code>Color</code>.
- *
- * DJP: how to handle table overflow?
- */
- int findColor(Color c, boolean foreground) {
-
- Color colorArray[] = foreground ? fgColors : bgColors;
-
- for (int i = 0; i < 16; i++) {
- if (colorArray[i] != null) {
- if (colorArray[i].equals(c))
- return i;
- }
- else
- break; // hit a null entry - no more colors in table!
- }
-
- // Color was not found in the table. Add it.
- for (int i = 0; i < 16; i++) {
- if (colorArray[i] == null) {
- colorArray[i] = c;
- return i;
- }
- }
- return 0; // Default - we should never get here though.
- }
-
-
- /**
- * Given an index, return the <code>Color</code> from the table.
- *
- * @param index The index
- * @param foreground true if foreground color, false if background
- * color
- *
- * @return The <code>Color</code> at the specified index.
- */
- Color getColor(int index, boolean foreground) {
-
- Color colorArray[] = foreground ? fgColors : bgColors;
- return colorArray[index];
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java
deleted file mode 100644
index d5e7a84fb6bf..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseFontTable.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import java.io.IOException;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.xml.*;
-
-/**
- * <p>This class represents a font table in a WordSmith document.
- * A font table is represented as follows:</p>
- *
- * <p><blockquote>
- * binary "3"<br>
- * two-byte length of the table of strings which follows<br>
- * string table (null-terminated strings) representing font names
- * </blockquote></p>
- *
- * @author David Proulx
- */
-class WseFontTable extends Wse {
-
- java.util.Vector fontNames = new java.util.Vector(10);
-
-
- /**
- * Constructor for use when going from DOM to WordSmith.
- */
- public WseFontTable() {
- }
-
-
- /**
- * Constructor for use when going from WordSmith to DOM.
- *
- * @param dataArray <code>byte</code> array.
- * @param i The index.
- */
- public WseFontTable(byte dataArray[], int i) {
- i++;
- int tableLen = ((dataArray[i] << 8) | (dataArray[i+1] & 0xFF));
- i += 2;
- while (tableLen > 0) {
- int j = 0;
- while (dataArray[i + j] != 0) j++;
- fontNames.add(new String(dataArray, i, j));
- tableLen -= (j + 1);
- i += (j + 1);
- }
- }
-
-
- /**
- * Add a new font to the table.
- *
- * @param newFontName The new font name.
- */
- public void add(String newFontName) {
- if (newFontName != null)
- fontNames.add(newFontName);
- }
-
-
- /**
- * Return a font name from the table, or null if invalid index.
- *
- * @param index The font name index.
- *
- * @return The font name.
- */
- public String getFontName(int index) {
- try {
- return (String)fontNames.elementAt(index);
- } catch (ArrayIndexOutOfBoundsException e) {
- return null;
- }
- }
-
- /**
- * Return the index of a font name in the table, or -1 if not found.
- *
- * @param fontName The font name.
- *
- * @return The index of the font name, or -1 if not found.
- */
- public int getFontIndex(String fontName) {
- int len = fontNames.size();
- for (int i = 0; i < len; i++) {
- String name = (String) fontNames.elementAt(i);
- if (name.equals(fontName))
- return i;
- }
- return -1;
- }
-
-
- /**
- * Compute the index of the first <code>byte</code> following the
- * paragraph descriptor, assuming that
- * <code>dataArray[startIndex]</code> is the beginning of a valid
- * paragraph descriptor.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- *
- * @return The index of the first <code>byte</code> following the
- * paragraph description.
- */
- static int computeNewIndex(byte dataArray[], int startIndex) {
- startIndex++; // Skip the leading "3"
- int tableLen = ((dataArray[startIndex] << 8) | (dataArray[startIndex+1] & 0xFF));
- tableLen &= 0xFFFF; // eliminate problems with sign-extension
- return startIndex + tableLen + 2;
- }
-
-
- /**
- * Return true if <code>dataArray[startIndex]</code> is the start of a
- * valid paragraph descriptor.
- *
- * @param dataArray <code>byte</code> string.
- * @param startIndex Start index.
- *
- * @return true if <code>dataArray[startIndex]</code> is the start
- * of a valid paragraph descriptor, false otherwise.
- */
- static boolean isValid(byte dataArray[], int startIndex) {
- try {
- if (dataArray[startIndex] != 3)
- return false;
- int len = ((dataArray[startIndex+1] << 8)
- | (dataArray[startIndex+2] & 0xFF));
- len &= 0xFFFF; // eliminate problems with sign-extension
-
- if (dataArray[startIndex + len + 2] != 0)
- return false;
- } catch (ArrayIndexOutOfBoundsException e) {
- return false;
- }
- return true;
- }
-
-
- /**
- * Return the number of bytes needed to represent this font table.
- *
- * @return The number of bytes needed to represent this font table.
- */
- int getByteCount() {
-
- int length = 3; // leading "3" plus 2 bytes for length.
- int nFonts = fontNames.size();
- for (int i = 0; i < nFonts; i++) {
- String name = (String)fontNames.elementAt(i);
- length += name.length() + 1; // extra byte is for trailing "0"
- }
- return length;
- }
-
- /**
- * Return a <code>byte</code> array representing this font table.
- *
- * @return An <code>byte</code> array representing this font table.
- */
- byte[] getBytes() {
-
- int length = getByteCount();
- int nFonts = fontNames.size();
- byte b[] = new byte[length];
- b[0] = 3;
- length -= 3;
- b[1] = (byte)(length >> 8);
- b[2] = (byte)(length & 0xFF);
- int indx = 3;
- for (int i = 0; i < nFonts; i++) {
- String name = (String)fontNames.elementAt(i);
- byte bname[] = name.getBytes();
- System.arraycopy(bname, 0, b, indx, bname.length);
- indx += bname.length;
- b[indx++] = 0;
- }
- return b;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java
deleted file mode 100644
index 52fffba259a8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseHeader.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import java.io.IOException;
-import java.io.DataOutputStream;
-import java.io.ByteArrayOutputStream;
-
-/**
- * This class represents a WordSmith document header.
- *
- * @author David Proulx
- */
-class WseHeader extends Wse {
-
- private int nParagraphs = 0;
- private int nAtoms = 0;
- private int nChars = 0;
- private int miscSize = 0;
-
- /**
- * Constructor for use when going from DOM to WordSmith.
- *
- * @param nPara The number of paragraphs.
- * @param nAtoms The number of atoms.
- * @param nChars The number of characters.
- * @param ft The font table.
- * @param ct The color table.
- */
- public WseHeader(int nPara, int nAtoms, int nChars, WseFontTable ft,
- WseColorTable ct) {
- nParagraphs = nPara;
- this.nAtoms = nAtoms;
- this.nChars = nChars;
- if (ft != null) miscSize += ft.getByteCount();
- if (ct != null) miscSize += ct.getByteCount();
- }
-
-
- /**
- * Constructor for use when going from WordSmith to DOM.
- *
- * @param dataArray <code>byte</code> array.
- * @param i Index.
- */
- public WseHeader(byte dataArray[], int i) {
- // DJP: write this!
- }
-
- /**
- * Return true if <code>dataArray[startIndex]</code> is the start
- * of a document header.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The index.
- *
- * @return true if <code>dataArray[startIndex]</code> is the start
- * of a document header, false otherwise.
- */
- static boolean isValid(byte dataArray[], int startIndex) {
- return ((dataArray[startIndex] == 2)
- && (dataArray[startIndex + 1] == 4));
- }
-
-
- /**
- * Compute and return the index of the first <code>byte</code>
- * following this element. It is assumed that the element
- * starting at <code>dataArray[startIndex]</code> is valid.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- *
- * @return The first <code>byte</code> following this element.
- */
- static int computeNewIndex(byte dataArray[], int startIndex) {
- return startIndex + 18;
- }
-
-
- /**
- * Return the total number of bytes needed to represent this.
- *
- * @return The total number of bytes needed to represent this.
- */
- int getByteCount() {
- return 18;
- }
-
-
- /**
- * Return a <code>byte</code> array representing this element.
- *
- * @return A <code>byte</code> array representing this element.
- */
- byte[] getBytes() {
- DataOutputStream os; // Used for storing the data
- ByteArrayOutputStream bs = null; // Used for storing the data
-
- try {
- bs = new ByteArrayOutputStream();
- os = new DataOutputStream(bs);
- os.write(2); // binary doc indicator
- os.write(4); // binary header indicator
-
- os.writeInt(nParagraphs);
- os.writeInt(nAtoms);
- os.writeInt(nChars);
- os.writeInt(miscSize);
-
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- if (bs != null) {
- return bs.toByteArray();
- } else return null;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java
deleted file mode 100644
index 91530174211f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WsePara.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import java.io.IOException;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.xml.*;
-
-
-/**
- * This class represents a paragraph in a WordSmith document.
- * (A paragraph is "5" followed by 12 bytes of attributes.)
- *
- * @author David Proulx
- */
-class WsePara extends Wse {
-
- private byte spaceBefore = 0;
- private byte spaceAfter = 0;
- private byte leftIndent = 0;
- private byte firstIndent = 0;
- private byte rightIndent = 0;
- private byte misc = 0;
- private byte style = 0;
- private byte lineSpace = 0;
- private byte outline = 0;
- private byte reserved = 0;
-
- private static final byte LS_EXACTLY = (byte)0xC0;
- private static final byte LS_ATLEAST = (byte)0x80;
- private static final byte LS_MULTIPLE = (byte)0x40;
- private static final byte LS_VALUEMASK = (byte)0x3F;
-
- private static final byte ALIGN_RIGHT = (byte)2;
- private static final byte ALIGN_LEFT = (byte)0;
- private static final byte ALIGN_CENTER = (byte)1;
- private static final byte ALIGN_JUST = (byte)3;
-
- private StyleCatalog sc = null;
-
-
- /**
- * Constructor for use when going from DOM to WordSmith.
- *
- * @param p The paragraph style.
- * @param sc The <code>StyleCatalog</code>.
- */
- public WsePara(ParaStyle p, StyleCatalog sc) {
- this.sc = sc;
- ParaStyle ps = (ParaStyle)p.getResolved();
-
- if (ps.isAttributeSet(ParaStyle.MARGIN_LEFT)) {
- double temp = ps.getAttribute(ParaStyle.MARGIN_LEFT) * 1.6 / 100;
- leftIndent = (byte) temp;
- if ((temp - leftIndent) > 0.5) leftIndent++;
- }
-
- if (ps.isAttributeSet(ParaStyle.MARGIN_RIGHT)) {
- double temp = ps.getAttribute(ParaStyle.MARGIN_RIGHT) * 1.6 / 100;
- rightIndent = (byte) temp;
- if ((temp - rightIndent) > 0.5) rightIndent++;
- }
-
- if (ps.isAttributeSet(ParaStyle.TEXT_INDENT)) {
- double temp = ps.getAttribute(ParaStyle.TEXT_INDENT) * 1.6 / 100;
- firstIndent = (byte) temp;
- if ((temp - firstIndent) > 0.5) firstIndent++;
- }
-
- if (ps.isAttributeSet(ParaStyle.MARGIN_TOP)) {
- double temp = ps.getAttribute(ParaStyle.MARGIN_TOP) * 1.6 / 100;
- spaceBefore = (byte) temp;
- if ((temp - spaceBefore) > 0.5) spaceBefore++;
- }
-
- if (ps.isAttributeSet(ParaStyle.MARGIN_BOTTOM)) {
- double temp = ps.getAttribute(ParaStyle.MARGIN_BOTTOM) * 1.6 / 100;
- spaceAfter = (byte) temp;
- if ((temp - spaceAfter) > 0.5) spaceAfter++;
- }
-
- if (ps.isAttributeSet(ParaStyle.LINE_HEIGHT)) {
- int lh = ps.getAttribute(ParaStyle.LINE_HEIGHT);
- if ((lh & ~ParaStyle.LH_VALUEMASK) == 0)
- lineSpace = (byte)(LS_MULTIPLE | (lh * 2));
- else if ((lh & ParaStyle.LH_PCT) != 0) {
- lh = (lh & ParaStyle.LH_VALUEMASK) / 100;
- lineSpace = (byte)(LS_MULTIPLE | (lh * 2));
- }
- // DJP: handle other cases....
- }
-
- if (ps.isAttributeSet(ParaStyle.TEXT_ALIGN)) {
-
- int val = ps.getAttribute(ParaStyle.TEXT_ALIGN);
-
- switch (val) {
- case ParaStyle.ALIGN_RIGHT:
- misc = ALIGN_RIGHT;
- break;
- case ParaStyle.ALIGN_LEFT:
- misc = ALIGN_LEFT;
- break;
- case ParaStyle.ALIGN_CENTER:
- misc = ALIGN_CENTER;
- break;
- case ParaStyle.ALIGN_JUST:
- misc = ALIGN_JUST;
- break;
- }
- }
-
- }
-
-
- /**
- * Constructor for use when going from WordSmith to DOM.
- * Assumes <code>dataArray[startIndex]</code> is the first
- * <code>byte</code> of a valid WordSmith paragraph descriptor.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- */
- public WsePara(byte dataArray[], int startIndex) {
- spaceBefore = dataArray[startIndex + 1];
- spaceAfter = dataArray[startIndex + 2];
- leftIndent = dataArray[startIndex + 3];
- firstIndent = dataArray[startIndex + 4];
- rightIndent = dataArray[startIndex + 5];
- misc = dataArray[startIndex + 6];
- style = dataArray[startIndex + 7];
- lineSpace = dataArray[startIndex + 8];
- outline = dataArray[startIndex + 9];
- }
-
-
- /**
- * Compute the index of the first <code>byte</code> following the
- * paragraph descriptor, assuming that
- * <code>dataArray[startIndex]</code> is the beginning of a valid
- * paragraph descriptor.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- *
- * @return The index of the first <code>byte</code> following the
- * paragraph description.
- */
- static int computeNewIndex(byte dataArray[], int startIndex) {
- return startIndex + 13;
- }
-
-
- /**
- * Return true if <code>dataArray[startIndex]</code> is the start
- * of a valid paragraph descriptor.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- *
- * @return true if <code>dataArray[startIndex]</code> is the start
- * of a valid paragraph descriptor, false otherwise.
- */
- static boolean isValid(byte dataArray[], int startIndex) {
- return (dataArray[startIndex] == 5);
- }
-
- /**
- * Return the number of bytes needed to represent this paragraph.
- *
- * @return The number of bytes needed to represent this paragraph.
- */
- int getByteCount() {
- return 13;
- }
-
- /**
- * Return an <code>byte</code> array representing this paragraph.
- *
- * @return An <code>byte</code> array representing this paragraph.
- */
- byte[] getBytes() {
- byte b[] = new byte[13];
-
- b[0] = 5;
- b[1] = spaceBefore;
- b[2] = spaceAfter;
- b[3] = leftIndent;
- b[4] = firstIndent;
- b[5] = rightIndent;
- b[6] = misc;
- b[7] = style;
- b[8] = lineSpace;
- b[9] = outline;
- b[10] = reserved;
- b[11] = 0;
- b[12] = 0;
-
- return b;
- }
-
- /**
- * Return a <code>ParaStyle</code> that reflects the formatting of
- * this run.
- *
- * @return A <code>ParaStyle</code> that reflects the formatting
- * of this run.
- */
- ParaStyle makeStyle() {
- /* Csaba: Commented out the LINE_HEIGHT syle, because there was no
- incoming data for that style. It was resulting a zero line
- height in the xml document, ie. the doc looked empty.
- */
- int attrs[] = { ParaStyle.MARGIN_LEFT, ParaStyle.MARGIN_RIGHT,
- ParaStyle.TEXT_INDENT, //ParaStyle.LINE_HEIGHT,
- ParaStyle.MARGIN_TOP, ParaStyle.MARGIN_BOTTOM,
- ParaStyle.TEXT_ALIGN };
- String values[] = new String[attrs.length];
- double temp;
-
- temp = leftIndent / 1.6;
- values[0] = (new Double(temp)).toString() + "mm";
-
- temp = rightIndent / 1.6;
- values[1] = (new Double(temp)).toString() + "mm";
-
- temp = firstIndent / 1.6;
- values[2] = (new Double(temp)).toString() + "mm";
-
-/* if ((lineSpace & LS_MULTIPLE) != 0) {
- temp = (lineSpace & LS_VALUEMASK) / 2;
- temp *= 100;
- values[3] = (new Double(temp)).toString() + "%";
- } else {
- values[3] = (new Double(temp)).toString() + "mm";
- // DJP: handle other cases
- }
-*/
- temp = spaceBefore / 1.6;
-// values[4] = (new Double(temp)).toString() + "mm";
- values[3] = (new Double(temp)).toString() + "mm";
-
- temp = spaceAfter / 1.6;
-// values[5] = (new Double(temp)).toString() + "mm";
- values[4] = (new Double(temp)).toString() + "mm";
-
- switch (misc) {
-
-// case ALIGN_RIGHT: values[6] = "right"; break;
-// case ALIGN_LEFT: values[6] = "left"; break;
-// case ALIGN_CENTER:values[6] = "center"; break;
-// case ALIGN_JUST: values[6] = "justified"; break;
-
- case ALIGN_RIGHT: values[5] = "right"; break;
- case ALIGN_LEFT: values[5] = "left"; break;
- case ALIGN_CENTER:values[5] = "center"; break;
- case ALIGN_JUST: values[5] = "justified"; break;
- }
- ParaStyle x = new ParaStyle(null, "paragraph", null, attrs,
- values, sc);
-
- return x;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java
deleted file mode 100644
index 86626dd4d2c7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/WseTextRun.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import org.openoffice.xmerge.converter.xml.TextStyle;
-import org.openoffice.xmerge.converter.xml.StyleCatalog;
-import java.awt.Color;
-
-/**
- * <p>This class represents a text run (aka text atom) in a WordSmith
- * document.</p>
- *
- * <p>WordSmith represents a text run as follows:</p>
- *
- * <p><ul><li>
- * 1 byte Value of "1", indicating beginning of a text atom
- * </li><li>
- * 2 bytes Length of text (does not include attributes, this length field,
- * etc)
- * </li><li>
- * 1 byte Font index - Index in the font table of font to be used
- * </li><li>
- * 1 byte Font size (DJP: get details of representation)
- * </li><li>
- * 1 byte Color index - Index in the color table of font color to be used
- * </li><li>
- * 1 byte Modifiers - bit flags for bold, italic, etc
- * </li><li>
- * n bytes Text - the actual text
- * </li></ul></p>
- *
- * @author David Proulx
- */
-class WseTextRun extends Wse {
-
- /** Font specifier. This is an index into the font table. */
- private byte fontIndex = 0;
- private String fontName = null;
-
- /** Size of the font. */
- private byte fontSize = 0;
-
- /**
- * Color of the font. This is an index into the color table.
- * High nibble is background color index, low nibble is font color
- * index.
- */
- private byte colorIndex = 0;
-
- /**
- * Reference to color table for color lookups.
- */
- private WseColorTable ct;
-
- /**
- * The modifiers for the text run. (Mostly) Bitwise flags. The "_TOKEN"
- * values are not yet implemented in this converter. They may not even
- * be implemented in WordSmith yet.
- */
- private byte modifiers = 0;
- final public static int BOLD = 0x01;
- final public static int ITALIC = 0x02;
- final public static int UNDERLINE = 0x04;
- final public static int STRIKETHRU = 0x08;
- final public static int SUPERSCRIPT = 0x10;
- final public static int SUBSCRIPT = 0x20;
- final public static int LINK = 0x40;
- final public static int CUSTOM_TOKEN = 0x80;
- final public static int IMAGE_TOKEN = 0x80;
- final public static int BOOKMARK_TOKEN = 0x81;
- final public static int ANNOTATION_TOKEN = 0x82;
- final public static int LINK_TOKEN = 0x83;
-
- /** The actual text. */
- private String text;
-
- StyleCatalog sc;
-
-
- /**
- * Constructor for use when going from DOM to WordSmith.
- *
- * @param txt The text.
- * @param t The text style.
- * @param sc The <code>StyleCatalog</code>.
- * @param ft The font table.
- * @param ct The color Table.
- */
- public WseTextRun(String txt, TextStyle t, StyleCatalog sc,
- WseFontTable ft, WseColorTable ct) {
-
- this.sc = sc;
- this.ct = ct;
-
- TextStyle ts = (TextStyle)t.getResolved();
-
- if (ts.isSet(TextStyle.BOLD) && ts.getAttribute(TextStyle.BOLD))
- modifiers |= BOLD;
- if (ts.isSet(TextStyle.ITALIC) && ts.getAttribute(TextStyle.ITALIC))
- modifiers |= ITALIC;
- if (ts.isSet(TextStyle.UNDERLINE) && ts.getAttribute(TextStyle.UNDERLINE))
- modifiers |= UNDERLINE;
- if (ts.isSet(TextStyle.STRIKETHRU) && ts.getAttribute(TextStyle.STRIKETHRU))
- modifiers |= STRIKETHRU;
- if (ts.isSet(TextStyle.SUPERSCRIPT) && ts.getAttribute(TextStyle.SUPERSCRIPT))
- modifiers |= SUPERSCRIPT;
- if (ts.isSet(TextStyle.SUBSCRIPT) && ts.getAttribute(TextStyle.SUBSCRIPT))
- modifiers |= SUBSCRIPT;
-
- fontSize = (byte)(ts.getFontSize() * 2);
- fontName = ts.getFontName();
- fontIndex = (byte)ft.getFontIndex(fontName);
- if (fontIndex == -1) {
- ft.add(fontName);
- fontIndex = (byte)ft.getFontIndex(fontName);
- }
-
- // Figure out the color index.
- Color c = t.getFontColor();
- if (c == null)
- c = Color.black;
- colorIndex = (byte)ct.findColor(c, true);
- c = t.getBackgroundColor();
- if (c == null)
- c = Color.white;
- colorIndex |= (byte)(ct.findColor(c, false) << 4);
-
- text = txt;
- }
-
-
- /**
- * Standard constructor for use when going from WordSmith to DOM.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- * @param ft The font table.
- * @param ct The color table.
- */
- public WseTextRun(byte dataArray[], int startIndex, WseFontTable ft,
- WseColorTable ct) {
-
- this.ct = ct;
-
- startIndex++; // Skip the leading "1"
-
- int textLen = ((dataArray[startIndex] << 8)
- | (dataArray[startIndex+1] & 0xFF));
- startIndex += 2;
-
- fontIndex = dataArray[startIndex++];
- if (ft != null)
- fontName = ft.getFontName(fontIndex);
-
- fontSize = dataArray[startIndex++];
-
- colorIndex = dataArray[startIndex++];
- modifiers = dataArray[startIndex++];
-
- text = new String(dataArray, startIndex, textLen);
- startIndex += textLen; // skip the text
- }
-
-
- /**
- * Given a <code>byte</code> sequence, assumed to be a text run,
- * compute the index of the first byte past the text run.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index
- *
- * @return The index of the first <code>byte</code> past the
- * text run.
- */
- public static int computeNewIndex(byte dataArray[], int startIndex) {
-
- startIndex++; // Skip the leading "1"
-
- int textLen = ((dataArray[startIndex] << 8)
- | (dataArray[startIndex+1] & 0xFF));
- startIndex += 2;
-
- startIndex += 4; // skip attributes
- // text = new String(dataArray, startIndex, textLen);
- startIndex += textLen; // skip the text
- return startIndex;
- }
-
-
- /**
- * Return true if the sequence starting at
- * <code>dataArray[startIndex]</code> is a valid text run.
- *
- * @param dataArray <code>byte</code> array.
- * @param startIndex The start index.
- *
- * @return true if the sequence starting at
- * <code>dataArray[startIndex]</code> is a valid
- * text run, false otherwise.
- */
- public static boolean isValid(byte dataArray[], int startIndex) {
- return (dataArray[startIndex] == 1);
- }
-
- /**
- * Return the number of bytes needed to represent this text run.
- *
- * @return The number of bytes needed to represent this text run.
- */
- int getByteCount() {
- return text.length() + 7;
- }
-
-
- /**
- * Return an <code>byte</code> array representing this text run.
- *
- * @return An <code>byte</code> array representing this text run.
- */
- byte[] getBytes() {
- short textLen = (short)text.length();
- byte b[] = new byte[textLen + 7];
- b[0] = 1;
- b[1] = (byte)(textLen >> 8);
- b[2] = (byte)(textLen & 0xFF);
- b[3] = fontIndex;
- b[4] = fontSize;
- b[5] = colorIndex;
- b[6] = modifiers;
- byte[] txtBytes = text.getBytes();
- System.arraycopy(txtBytes, 0, b, 7, textLen);
- return b;
- }
-
-
- /**
- * Return the text of this run.
- *
- * @return The text of this run.
- */
- public String getText() {
- return text;
- }
-
-
- /**
- * Return a <code>TextStyle</code> that reflects the formatting
- * of this run.
- *
- * @return A <code>TextStyle</code> that reflects the formatting
- * of this run.
- */
- public TextStyle makeStyle() {
- int mod = 0;
- if ((modifiers & BOLD) != 0) mod |= TextStyle.BOLD;
- if ((modifiers & ITALIC) != 0) mod |= TextStyle.ITALIC;
- if ((modifiers & UNDERLINE) != 0) mod |= TextStyle.UNDERLINE;
- if ((modifiers & STRIKETHRU) != 0)
- mod |= TextStyle.STRIKETHRU;
- if ((modifiers & SUPERSCRIPT) != 0) mod |= TextStyle.SUPERSCRIPT;
- if ((modifiers & SUBSCRIPT) != 0) mod |= TextStyle.SUBSCRIPT;
-
- int mask = TextStyle.BOLD | TextStyle.ITALIC
- | TextStyle.UNDERLINE
- | TextStyle.STRIKETHRU | TextStyle.SUPERSCRIPT
- | TextStyle.SUBSCRIPT;
-
- TextStyle x = new TextStyle(null, "text", null, mask,
- mod, (int)(fontSize/2), fontName, sc);
-
- // If color table is available, set the colors.
- if (ct != null) {
- Color fc = ct.getColor(colorIndex & 0xF, true);
- Color bc = ct.getColor(colorIndex >> 4, false);
- x.setColors(fc, bc);
- }
-
- return x;
- }
-
-
- /**
- * Display debug information.
- */
- public void dump() {
- System.out.print("TEXT RUN: fontIndex = " + fontIndex
- + " fontsize = " + fontSize
- + " colorIndex = " + colorIndex
- + " ");
- if ((modifiers & BOLD) != 0) System.out.print("BOLD,");
- if ((modifiers & ITALIC) != 0) System.out.print("ITALIC,");
- if ((modifiers & UNDERLINE) != 0) System.out.print("UNDERLINE,");
- if ((modifiers & STRIKETHRU) != 0) System.out.print("STRIKETHRU,");
- if ((modifiers & SUPERSCRIPT) != 0) System.out.print("SUPERSCRIPT,");
- if ((modifiers & SUBSCRIPT) != 0) System.out.print("SUBSCRIPT,");
- System.out.println("\n" + text);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/build.xml
deleted file mode 100644
index aa889d4d3f2e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/build.xml
+++ /dev/null
@@ -1,141 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcxs_wordsmith" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcxs_wordsmith"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/sxw/wordsmith"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/DOCConstants.java"/>
- <include name="${package}/textRecord.java"/>
- <include name="${package}/util.java"/>
- <include name="${package}/WSDecoder.java"/>
- <include name="${package}/WseColorTable.java"/>
- <include name="${package}/WseFontTable.java"/>
- <include name="${package}/Wse.java"/>
- <include name="${package}/WseHeader.java"/>
- <include name="${package}/WSEncoder.java"/>
- <include name="${package}/WsePara.java"/>
- <include name="${package}/WseTextRun.java"/>
- <include name="${package}/DocumentMergerImpl.java"/>
- <include name="${package}/DocumentSerializerImpl.java"/>
- <include name="${package}/DocumentDeserializerImpl.java"/>
- <include name="${package}/ConverterCapabilitiesImpl.java"/>
- <include name="${package}/PluginFactoryImpl.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/converter.xml
deleted file mode 100644
index 9285730569db..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/converter.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<converters>
- <converter type="staroffice/sxw" version="1.0">
- <converter-display-name>
- WordSmith
- </converter-display-name>
- <converter-description>
- StarWriter XML to/from WordSmith conversion
- </converter-description>
- <converter-vendor>OpenOffice.org</converter-vendor>
- <converter-class-impl>
- org.openoffice.xmerge.converter.xml.sxw.wordsmith.PluginFactoryImpl
- </converter-class-impl>
- <converter-target type="application/x-wordsmith" />
- </converter>
-</converters>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/makefile.mk
deleted file mode 100644
index c64e26894dac..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-PRJNAME=converter
-TARGET=cv_jcsscdcxs_wordsmith
-PRJ=../../../../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java
deleted file mode 100644
index 7651767920fc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/textRecord.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-import org.openoffice.xmerge.util.Debug;
-import java.io.IOException;
-import java.io.DataOutputStream;
-import java.io.ByteArrayOutputStream;
-
-/**
- * This class represents a single text record in a WordSmith document.
- * A record is composed of one or more "WordSmith elements", which
- * include: WordSmith header, font table, color table, paragraphs,
- * and text runs.
- *
- * @author David Proulx
- */
-
-class textRecord {
-
- java.util.Vector elements;
-
-
- /**
- * Default constructor
- */
- textRecord() {
- elements = new java.util.Vector(10);
- }
-
-
- /**
- * Add an element
- *
- * @param elem The element to add
- */
- void addElement(Wse elem) {
- elements.add(elem);
- }
-
-
- /**
- * Return the number of bytes needed to represent the current
- * contents of this text record.
- *
- * @return The number of bytes needed to represent the current
- * contents of this text record.
- */
- int getByteCount() {
- int totalBytes = 0;
- int nElements = elements.size();
- for (int i = 0; i < nElements; i++) {
- Wse e = (Wse)elements.elementAt(i);
- totalBytes += e.getByteCount();
- }
- return totalBytes;
- }
-
-
- /**
- * Return the contents of this record as a <code>byte</code> array.
- *
- * @return the contents of this record as a <code>byte</code> array.
- */
- byte[] getBytes() {
- DataOutputStream os = null; // Used for storing the data
- ByteArrayOutputStream bs = null; // Used for storing the data
- byte ftBytes[] = null;
- byte ctBytes[] = null;
-
- try {
- bs = new ByteArrayOutputStream();
- os = new DataOutputStream(bs);
- int nElements = elements.size();
- for (int i = 0; i < nElements; i++) {
- Wse e = (Wse)elements.get(i);
- os.write(e.getBytes());
- }
-
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- if (bs != null)
- return bs.toByteArray();
- else
- return null;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java b/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java
deleted file mode 100644
index 0c1af8d5a8ec..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/sxw/wordsmith/util.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.sxw.wordsmith;
-
-/**
- * WordSmith utility class.
- *
- * @author David Proulx
- */
-class util {
-
- /**
- * Convert 2 bytes to an integer.
- *
- * @param data <code>byte</code> data to convert.
- * @param index Index to convert.
- *
- * @return Converted integer.
- */
- static int intFrom2bytes(byte[] data, int index) {
- return (((data[index] & 0xFF) << 8)
- | (data[index+1] & 0xFF));
-
- }
-
-
- /**
- * Convert 4 bytes to an integer.
- *
- * @param data <code>byte</code> data to convert.
- * @param index Index to convert.
- *
- * @return Converted integer.
- */
- static int intFrom4bytes(byte[] data, int index) {
- return (((data[index] & 0xFF) << 24)
- | ((data[index + 1] & 0xFF) << 16)
- | ((data[index + 2] & 0xFF) << 8)
- | (data[index+3] & 0xFF));
-
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java
deleted file mode 100644
index 079437336f8e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/ConverterCapabilitiesImpl.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.xslt;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * <p>Xslt implementation of <code>ConverterCapabilities</code> for
- * the {@link
- * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>Used with StarWriter XML to/from XSLT supported formats conversions. The
- * <code>ConverterCapibilies</code> specify which &quot;Office&quot;
- * <code>Document</code> tags and attributes are supported on the
- * &quot;Device&quot; <code>Document</code> format.</p>
- */
-public final class ConverterCapabilitiesImpl
- implements ConverterCapabilities {
-
- public boolean canConvertTag(String tag) {
-
- if (OfficeConstants.TAG_OFFICE_DOCUMENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_DOCUMENT_CONTENT.equals(tag))
- return true;
- else if (OfficeConstants.TAG_OFFICE_BODY.equals(tag))
- return true;
- else if (OfficeConstants.TAG_PARAGRAPH.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HEADING.equals(tag))
- return true;
- else if (OfficeConstants.TAG_ORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_UNORDERED_LIST.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_ITEM.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LIST_HEADER.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPAN.equals(tag))
- return true;
- else if (OfficeConstants.TAG_HYPERLINK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_LINE_BREAK.equals(tag))
- return true;
- else if (OfficeConstants.TAG_SPACE.equals(tag))
- return true;
- else if (OfficeConstants.TAG_TAB_STOP.equals(tag))
- return true;
-
- return false;
- }
-
- public boolean canConvertAttribute(String tag,
- String attribute) {
-
- if (OfficeConstants.TAG_SPACE.equals(tag)) {
-
- if (OfficeConstants.ATTRIBUTE_SPACE_COUNT.equals(attribute))
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java
deleted file mode 100644
index 08d294982537..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentDeserializerImpl.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.xslt;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Enumeration;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-
-
-
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.converter.dom.DOMDocument;
-//import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-
-// Imported TraX classes
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.dom.DOMSource;
-//import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.Source;
-
-
-//
-//import org.apache.xalan.serialize.Serializer;
-//import org.apache.xalan.serialize.SerializerFactory;
-//import org.apache.xalan.templates.OutputProperties;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-// Imported java classes
-import java.io.FileNotFoundException;
-
-
-/**
- * <p>Xslt implementation of
- * org.openoffice.xmerge.DocumentSerializer
- * for the {@link
- * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>The <code>serialize</code> method transforms the DOM
- * document from the given <code>Document</code> object by
- * means of a supplied Xsl Stylesheet.</p>
- *
- * @author Aidan Butler
- */
-public final class DocumentDeserializerImpl
- implements DocumentDeserializer,URIResolver {
-
- /** A <code>ConvertData</code> object assigned to this object. */
- private InputStream is = null;
- private ConvertData cd = null;
- private PluginFactoryImpl pluginFactory = null;
-
- /**
- * Constructor that assigns the given <code>ConvertData</code>
- * to this object.
- *
- * @param pf A <code>PluginFactoryImpl</code> object.
- *
- * @param cd A <code>ConvertData</code> object to read data for
- * the conversion process by the <code>deserialize</code>
- * method.
- */
- public DocumentDeserializerImpl(PluginFactoryImpl pf,ConvertData cd) {
- this.cd = cd;
- pluginFactory = pf;
- }
-
-
-
- /*
- * This method performs the xslt transformation on the supplied <code>
- * Document</code> and returns a <code>ByteArrayOutputStream</code> object.
- *
- * Xslt transformation code
- *
- * @returns baos A <code>ByteArrayOutputStream</code> object containing
- * the result of the Xslt transformation.
- * @throws TransformerException,TransformerConfigurationException
- * , FileNotFoundException,IOException
- *
- */
- public Document deserialize() throws ConvertException, IOException {
- log("\nFound the XSLT deserializer");
- Enumeration enumer = cd.getDocumentEnumeration();
- org.w3c.dom.Document domDoc=null;
- DOMDocument docOut=null;
- GenericOfficeDocument doc = null;
- ByteArrayOutputStream baos =null;
- GenericOfficeDocument sxwDoc = new GenericOfficeDocument("output");
- while (enumer.hasMoreElements()) {
- docOut = (DOMDocument) enumer.nextElement();
- }
- domDoc = docOut.getContentDOM();
- try{
- baos = transform(domDoc);
- sxwDoc.initContentDOM();
- DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
- dFactory.setNamespaceAware(true);
- DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
- sxwDoc.setContentDOM(dBuilder.parse(new ByteArrayInputStream(baos.toByteArray())));
-
- }
- catch(Exception e){
- System.out.println("The following error occurred:"+e);
- }
- return sxwDoc;
- }
-
- public Source resolve(String href,String base)
- throws TransformerException{
- //System.out.println("\nhref "+href+"\nbase "+base);
- if (href !=null){
- if(href.equals("javax.xml.transform.dom.DOMSource")|| href.equals(""))
- return null;
- try{
- ConverterInfo ci = pluginFactory.getConverterInfo();
- String newhRef ="jar:"+ci.getJarName()+"!/"+href;
- //System.out.println("\n Looking For "+ newhRef);
- StreamSource sheetFile= new StreamSource(newhRef);
- return sheetFile;
- }
- catch (Exception e){
- System.out.println("\nException in Xslt Resolver " +e);
- return null;
- }
- }
- else
- return null;
- }
-
- /*
- * This method performs the xslt transformation on the supplied Dom Tree.
- *
- * Xslt transformation code
- *
- * @throws TransformerException,TransformerConfigurationException
- * , FileNotFoundException,IOException
- *
- */
- private ByteArrayOutputStream transform(org.w3c.dom.Document xmlDoc)
- throws TransformerException,TransformerConfigurationException
- , FileNotFoundException,IOException{
-
- log("\nTransforming...");
- ConverterInfo ci = pluginFactory.getConverterInfo();
- ByteArrayOutputStream baos= new ByteArrayOutputStream();
- try{
- DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
- dFactory.setNamespaceAware(true);
- DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
-
- String teststr = ci.getXsltDeserial();
- teststr= teststr.substring(0,6);
- org.w3c.dom.Document xslDoc=null;
- if ((teststr.equals("http:/"))||(teststr.equals("file:/"))
- ||(teststr.equals("jar://"))){
- log(ci.getXsltDeserial());
- xslDoc= dBuilder.parse(ci.getXsltDeserial());
-
- }
- else{
- log(ci.getJarName()+"!/"+ci.getXsltDeserial());
- xslDoc = dBuilder.parse(
- "jar:"+ci.getJarName()+"!/"+ci.getXsltDeserial());
- }
-
-
- DOMSource xslDomSource = new DOMSource(xslDoc);
- DOMSource xmlDomSource = new DOMSource(xmlDoc);
-
- //call the tranformer using the XSL, Source and Result dom.
- TransformerFactory tFactory = TransformerFactory.newInstance();
- tFactory.setURIResolver(this);
- Transformer transformer = tFactory.newTransformer(xslDomSource);
- transformer.transform(xmlDomSource,new StreamResult(baos));
- /*
- // Serialize for output to standard out
- Serializer serializer = SerializerFactory.getSerializer
- (OutputProperties.getDefaultMethodProperties("xml"));
- serializer.setOutputStream(System.out);
- serializer.asDOMSerializer().serialize(xmlDomResult.getNode());
- */
-
- log("\n** Transform Complete ***");
-
- }
- catch (StackOverflowError sOE){
- System.out.println("\nERROR : Stack Overflow Error During Transformation\n Try increasing the stack size by passing the -Xss1m option to the JRE.");
- throw sOE;
- }
- catch(Exception e){
- System.out.println("An error occured in the transformation : "+e);
- }
- return baos;
- }
-
- /**
- * Sends message to the log object.
- *
- * @param str Debug message.
- */
- private void log(String str) {
-
- Debug.log(Debug.TRACE, str);
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java
deleted file mode 100644
index a320080a43cb..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentMergerImpl.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.xslt;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.MergeException;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.diff.ParaNodeIterator;
-import org.openoffice.xmerge.merger.diff.IteratorLCSAlgorithm;
-import org.openoffice.xmerge.merger.merge.DocumentMerge;
-import org.openoffice.xmerge.merger.merge.CharacterBaseParagraphMerge;
-import org.openoffice.xmerge.util.Debug;
-
-
-/**
- * Xslt implementation of <code>DocumentMerger</code>
- * for the {@link
- * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- */
-public class DocumentMergerImpl implements DocumentMerger {
-
- private ConverterCapabilities cc_;
- private org.openoffice.xmerge.Document orig = null;
-
- public DocumentMergerImpl(org.openoffice.xmerge.Document doc, ConverterCapabilities cc) {
- cc_ = cc;
- this.orig = doc;
- }
-
- public void merge(org.openoffice.xmerge.Document modifiedDoc) throws MergeException {
-
- GenericOfficeDocument wdoc1 = (GenericOfficeDocument) orig;
- GenericOfficeDocument wdoc2 = (GenericOfficeDocument) modifiedDoc;
-
- Document doc1 = wdoc1.getContentDOM();
- Document doc2 = wdoc2.getContentDOM();
-
- Iterator i1 = new ParaNodeIterator(cc_, doc1.getDocumentElement());
- Iterator i2 = new ParaNodeIterator(cc_, doc2.getDocumentElement());
-
- DiffAlgorithm diffAlgo = new IteratorLCSAlgorithm();
-
- // find out the paragrah level diffs
- Difference[] diffTable = diffAlgo.computeDiffs(i1, i2);
-
- if (Debug.isFlagSet(Debug.INFO)) {
- Debug.log(Debug.INFO, "Diff Result: ");
-
- for (int i = 0; i < diffTable.length; i++) {
- Debug.log(Debug.INFO, diffTable[i].debug());
- }
- }
-
- // merge the paragraphs
- NodeMergeAlgorithm charMerge = new CharacterBaseParagraphMerge();
- DocumentMerge docMerge = new DocumentMerge(cc_, charMerge);
-
- Iterator result = null;
-
- docMerge.applyDifference(i1, i2, diffTable);
- }
-}
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java
deleted file mode 100644
index b4b1650f97f6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/DocumentSerializerImpl.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.xslt;
-
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.*;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import java.util.Enumeration;
-import java.util.Properties;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConvertException;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument;
-import org.openoffice.xmerge.converter.dom.DOMDocument;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-// Imported TraX classes
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.Source;
-
-//
-import org.apache.xalan.serialize.Serializer;
-import org.apache.xalan.serialize.SerializerFactory;
-import org.apache.xalan.templates.OutputProperties;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-// Imported java classes
-import java.io.FileNotFoundException;
-import java.io.File;
-import java.net.URI;
-
-/**
- * <p>Xslt implementation of
- * org.openoffice.xmerge.DocumentSerializer
- * for the {@link
- * org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl
- * PluginFactoryImpl}.</p>
- *
- * <p>The <code>serialize</code> method transforms the DOM
- * document from the given <code>Document</code> object by
- * means of a supplied Xsl Stylesheet.</p>
- *
- * @author Aidan Butler
- */
-
-
-public final class DocumentSerializerImpl
- implements DocumentSerializer,OfficeConstants,URIResolver {
-
-
- /** SXW <code>Document</code> object that this converter processes. */
- private GenericOfficeDocument sxwDoc = null;
-
- private PluginFactoryImpl pluginFactory = null;
-
- /**
- * Constructor.
- *
- * @param pf A <code>PluginFactoryImpl</code>
- * @param doc A SXW <code>Document</code> to be converted.
- */
- public DocumentSerializerImpl(PluginFactoryImpl pf,Document doc) {
- pluginFactory=pf;
- sxwDoc = (GenericOfficeDocument) doc;
- }
-
-
- /**
- * Method to convert a <code>Document</code> with an xsl stylesheet.
- * It creates a <code>Document</code> object, which is then transformed
- * with the Xslt processer. A <code>ConvertData </code> object is
- * constructed and returned.
- *
- * @returns cd A <code>ConvertData</code> object.
- * @throws ConvertException If any I/O error occurs.
- * @throws IOException If any I/O error occurs.
- */
- public ConvertData serialize() throws ConvertException, IOException {
- String docName = sxwDoc.getName();
- org.w3c.dom.Document domDoc = sxwDoc.getContentDOM();
- org.w3c.dom.Document metaDoc = sxwDoc.getMetaDOM();
- org.w3c.dom.Document styleDoc = sxwDoc.getStyleDOM();
- ByteArrayOutputStream baos= new ByteArrayOutputStream();
- ConvertData cd = new ConvertData();
- Node offnode = (Node)domDoc.getDocumentElement();
- if (!(offnode.getNodeName()).equals("office:document")){
- try{
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder= builderFactory.newDocumentBuilder();
- DOMImplementation domImpl = builder.getDOMImplementation();
- DocumentType docType =domImpl.createDocumentType("office:document","-//OpenOffice.org//DTD OfficeDocument 1.0//EN",null);
- org.w3c.dom.Document newDoc = domImpl.createDocument("http://openoffice.org/2000/office","office:document",docType);
-
-
- Element rootElement=newDoc.getDocumentElement();
- rootElement.setAttribute("xmlns:office","http://openoffice.org/2000/office");
- rootElement.setAttribute("xmlns:style","http://openoffice.org/2000/style" );
- rootElement.setAttribute("xmlns:text","http://openoffice.org/2000/text");
- rootElement.setAttribute("xmlns:table","http://openoffice.org/2000/table");
-
- rootElement.setAttribute("xmlns:draw","http://openoffice.org/2000/drawing");
- rootElement.setAttribute("xmlns:fo","http://www.w3.org/1999/XSL/Format" );
- rootElement.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink" );
- rootElement.setAttribute("xmlns:dc","http://purl.org/dc/elements/1.1/" );
- rootElement.setAttribute("xmlns:meta","http://openoffice.org/2000/meta" );
- rootElement.setAttribute("xmlns:number","http://openoffice.org/2000/datastyle" );
- rootElement.setAttribute("xmlns:svg","http://www.w3.org/2000/svg" );
- rootElement.setAttribute("xmlns:chart","http://openoffice.org/2000/chart" );
- rootElement.setAttribute("xmlns:dr3d","http://openoffice.org/2000/dr3d" );
- rootElement.setAttribute("xmlns:math","http://www.w3.org/1998/Math/MathML" );
- rootElement.setAttribute("xmlns:form","http://openoffice.org/2000/form" );
- rootElement.setAttribute("xmlns:script","http://openoffice.org/2000/script" );
- rootElement.setAttribute("xmlns:config","http://openoffice.org/2001/config" );
- rootElement.setAttribute("office:class","text" );
- rootElement.setAttribute("office:version","1.0");
-
-
- NodeList nodeList;
- Node tmpNode;
- Node rootNode = (Node)rootElement;
- if (metaDoc !=null){
- nodeList= metaDoc.getElementsByTagName(TAG_OFFICE_META);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- } if (styleDoc !=null){
- nodeList= styleDoc.getElementsByTagName(TAG_OFFICE_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- }if (domDoc !=null){
- nodeList= domDoc.getElementsByTagName(TAG_OFFICE_AUTOMATIC_STYLES);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- nodeList= domDoc.getElementsByTagName(TAG_OFFICE_BODY);
- if (nodeList.getLength()>0){
- tmpNode = newDoc.importNode(nodeList.item(0),true);
- rootNode.appendChild(tmpNode);
- }
- }
- domDoc=newDoc;
- }catch(Exception e){
- System.out.println("\nAn Exception occurred with Xslt Serializer"+e);
- }
-
- }
-
- try{
- baos=transform(domDoc);
- }
- catch (Exception e){
- System.out.println("\n Error with Xslt\n");
- }
-
- String ext = pluginFactory.getDeviceFileExtension();
- DOMDocument resultDomDoc=(DOMDocument)pluginFactory.createDeviceDocument(docName,new ByteArrayInputStream(baos.toByteArray()));
- cd.addDocument (resultDomDoc);
- return cd;
- }
-
- public Source resolve(String href,String base)
- throws TransformerException{
- //System.out.println("\nhref "+href+"\nbase "+base);
- if (href !=null){
- if(href.equals("javax.xml.transform.dom.DOMSource")|| href.equals(""))
- return null;
- try{
- ConverterInfo ci = pluginFactory.getConverterInfo();
- String newhRef ="jar:"+ci.getJarName()+"!/"+href;
- //System.out.println("\n Looking For "+ newhRef);
- StreamSource sheetFile= new StreamSource(newhRef);
- return sheetFile;
- }
- catch (Exception e){
- System.out.println("\nException in Xslt Resolver " +e);
- return null;
- }
- }
- else
- return null;
- }
-
-
- /*
- * This method performs the sxl transformation on the supplied <code>
- * Document</code> and returns a <code>DOMResult</code> object.
- *
- * Xslt transformation code
- *
- * @returns baos A <code>ByteArrayOutputStream</code> object containing
- * the result of the Xslt transformation.
- * @throws TransformerException,TransformerConfigurationException
- * , FileNotFoundException,IOException
- *
- */
-
-
- private ByteArrayOutputStream transform(org.w3c.dom.Document domDoc)
- throws TransformerException,TransformerConfigurationException
- , FileNotFoundException,IOException{
- //System.out.println("\nTransforming...");
- ConverterInfo ci = pluginFactory.getConverterInfo();
- //DOMResult xmlDomResult = new DOMResult();
- ByteArrayOutputStream baos= new ByteArrayOutputStream();
- try{
-
- DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
- dFactory.setNamespaceAware(true);
-
- DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
- String teststr = ci.getXsltSerial();
-
- teststr= teststr.substring(0,6);
- org.w3c.dom.Document xslDoc=null;
- if ((teststr.equals("http:/"))||(teststr.equals("file:/"))
- ||(teststr.equals("jar://"))){
- System.out.println(ci.getXsltSerial());
- xslDoc= dBuilder.parse(ci.getXsltSerial());
-
- }
- else{
- //System.out.println(ci.getJarName()+"!/"+ci.getXsltSerial());
- xslDoc = dBuilder.parse(
- "jar:"+ci.getJarName()+"!/"+ci.getXsltSerial());
- }
-
- DOMSource xslDomSource = new DOMSource(xslDoc);
- DOMSource xmlDomSource = new DOMSource(domDoc);
-
- //call the tranformer using the XSL, Source and Result.
- TransformerFactory tFactory = TransformerFactory.newInstance();
- tFactory.setURIResolver(this);
- Transformer transformer = tFactory.newTransformer(xslDomSource);
-
- transformer.transform(xmlDomSource, new StreamResult(baos));
-
- /*
- transformer.transform(xmlDomSource, xmlDomResult); //Removed this impl because the DocType was not being written out
-
- // Serialize for output to standard out
- Serializer serializer = SerializerFactory.getSerializer
- (OutputProperties.getDefaultMethodProperties("xml"));
- //serializer.setOutputStream(System.out);
- serializer.setOutputStream(baos);
- serializer.asDOMSerializer().serialize(xmlDomResult.getNode());
- //serializer.asDOMSerializer().serialize(xmlDomSource.getNode());
-
-
- //System.out.println("\n** Transform Complete ***");
- */
- }
- catch(Exception e){
- System.out.println("An error occured in the transformation : "+e);
- }
- return baos;
- }
-
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java
deleted file mode 100644
index d2b98819c87a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/GenericOfficeDocument.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.xslt;
-
-import org.w3c.dom.Document;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * This class is an implementation of <code>OfficeDocument</code> for
- * the generic office format.
- */
-public class GenericOfficeDocument extends OfficeDocument {
-
- /**
- * Constructor with arguments to set <code>name</code>.
- *
- * @param name The name of the <code>Document</code>
- */
- public GenericOfficeDocument(String name) {
- super(name);
- }
-
-
- /**
- * Constructor with arguments to set <code>name</code>, the
- * <code>namespaceAware</code> flag, and the <code>validating</code>
- * flag.
- *
- * @param name The name of the <code>Document</code>.
- * @param namespaceAware The value of the <code>namespaceAware</code>
- * flag.
- * @param validating The value of the <code>validating</code> flag.
- */
- public GenericOfficeDocument(String name, boolean namespaceAware, boolean validating) {
-
- super(name, namespaceAware, validating);
- }
-
- /**
- * Returns the Office file extension for the generic format.
- *
- * @return The Office file extension for the generic format.
- */
- protected String getFileExtension() {
- return "";
- }
-
- /**
- * Returns the Office attribute for the generic format.
- *
- * @return The Office attribute for the generic format.
- */
- protected String getOfficeClassAttribute() {
-
- return "";
- }
-
- /**
- * Method to return the MIME type of the document.
- *
- * @return String The document's MIME type.
- */
- protected String getDocumentMimeType() {
- /* TODO: Determine the MIME-type from the input. */
- return "";
- }
-
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java
deleted file mode 100644
index cb3a9c507b82..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/PluginFactoryImpl.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.converter.xml.xslt;
-
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.DocumentSerializer;
-import org.openoffice.xmerge.DocumentSerializerFactory;
-import org.openoffice.xmerge.DocumentDeserializer;
-import org.openoffice.xmerge.DocumentDeserializerFactory;
-import org.openoffice.xmerge.PluginFactory;
-import org.openoffice.xmerge.converter.dom.DOMDocument;
-//import org.openoffice.xmerge.converter.xml.sxw.SxwDocument;
-//import org.openoffice.xmerge.converter.xml.OfficeDocument;
-import org.openoffice.xmerge.converter.xml.xslt.GenericOfficeDocument;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import org.openoffice.xmerge.DocumentMerger;
-import org.openoffice.xmerge.DocumentMergerFactory;
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Properties;
-
-/**
- * <p>Xslt implementation of the <code>PluginFactory</code>.
- * This encapsulates conversion of StarWriter XML format to and from
- * a supported format.</p>
- *
- * <p>The superclass produces a particular
- * {@link org.openoffice.xmerge.Document Document}
- * object, i.e. {@link
- * org.openoffice.xmerge.converter.xml.sxw.SxwDocument
- * SxwDocument} that the converters in this class work with. Thus,
- * this class only implements the methods that produces the converters,
- * i.e. {@link
- * org.openoffice.xmerge.DocumentSerializer
- * DocumentSerializer} and {@link
- * org.openoffice.xmerge.DocumentDeserializer
- * DocumentDeserializer}</p>
- *
- * @author Aidan Butler
- */
-public final class PluginFactoryImpl extends PluginFactory
- implements DocumentDeserializerFactory, DocumentSerializerFactory, DocumentMergerFactory
-{
-
- public PluginFactoryImpl (ConverterInfo ci) {
- super(ci);
- }
-
- /** ConverterCapabilities object for this type of conversion. */
- private final static ConverterCapabilities converterCap =
- new ConverterCapabilitiesImpl();
-
-
- /**
- * Returns an instance of <code>DocumentSerializerImpl</code>,
- * which is an implementation of the <code>DocumentSerializer</code>
- * interface.
- *
- * @param doc <code>Document</code> object to be
- * converted/serialized.
- *
- * @return A <code>DocumentSerializerImpl</code> object.
- */
- public DocumentSerializer createDocumentSerializer(Document doc) {
- return new DocumentSerializerImpl(this,doc);
- }
-
-
- /**
- * Returns an instance of <code>DocumentDeserializerImpl</code>,
- * which is an implementation of the <code>DocumentDeserializer</code>
- * interface.
- *
- * @param is <code>ConvertData</code> object.
- *
- * @return A DocumentDeserializerImpl object.
- */
- public DocumentDeserializer createDocumentDeserializer(ConvertData cd) {
-
- return new DocumentDeserializerImpl(this,cd);
- }
-
- public org.openoffice.xmerge.Document createDeviceDocument(java.lang.String str, java.io.InputStream inputStream) throws java.io.IOException {
- String ext = this.getDeviceFileExtension();
- DOMDocument domDoc = new DOMDocument(str,ext);
- domDoc.read(inputStream);
- return domDoc;
- }
-
-
- public Document createOfficeDocument(String name, InputStream is)
- throws IOException {
-
- // read zipped XML stream
- GenericOfficeDocument doc = new GenericOfficeDocument(name);
- doc.read(is);
- return doc;
- }
-
- public Document createOfficeDocument(String name, InputStream is,boolean isZip)
- throws IOException {
-
- // read zipped XML stream
- GenericOfficeDocument doc = new GenericOfficeDocument(name);
- doc.read(is,isZip);
- return doc;
- }
-
- /**
- * Returns a <code>String</code> containing the file extension of a
- * <code>Document</code>. This method uses a properties file to determine
- * a mapping from the device mime in the <code>ConverterInfo</code> to a
- * particular file extension. If a mapping is not specified, the default
- * is ".txt".
- *
- * @return <code>String</code>.
- */
-
-
- public String getDeviceFileExtension(){
- Class c = this.getClass();
- InputStream is = c.getResourceAsStream("XsltPlugin.properties");
- Properties props = new Properties();
- String ext= ".txt";
- String mimeType = null;
- ConverterInfo ci = this.getConverterInfo();
- Enumeration enumer = ci.getDeviceMime();
- while (enumer.hasMoreElements()) {
- mimeType= (String) enumer.nextElement();
- }
- try {
- props.load(is);
-
- String info = props.getProperty(mimeType);
- if (info != null) {
- ext = info;
- }
- } catch (Exception e) {
-
- // It is okay for the property file to not exist.
- //
- }
- return ext;
- }
-
- /**
- * Returns an instance of <code>DocumentMergerImpl</code>,
- * which is an implementation of the <code>DocumentMerger</code>
- * interface.
- *
- * @param doc <code>Document</code> to merge.
- *
- * @return A DocumentMergerImpl object.
- */
- public DocumentMerger createDocumentMerger(Document doc) {
- ConverterCapabilities cc = converterCap;
- DocumentMergerImpl merger = new DocumentMergerImpl(doc, cc);
- return merger;
-
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties
deleted file mode 100644
index 32f3771fc492..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-
-#
-# XsltPlugin.properties
-#
-
-#This file allows users to specify the mime-type to file extension mappings
-
-# e.g text/html=.html
-text/html=.html
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/build.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/build.xml
deleted file mode 100644
index 43db663b2820..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/build.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxcx_xslt" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxcx_xslt"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../../../"/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/converter/xml/xslt/"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/xalan.jar"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/DocumentDeserializerImpl.java"/>
- <include name="${package}/DocumentSerializerImpl.java"/>
- <include name="${package}/GenericOfficeDocument.java"/>
- <include name="${package}/PluginFactoryImpl.java"/>
- </javac>
- <copy todir="${build.class}/${package}">
- <fileset dir=".">
- <include name="*.properties"/>
- </fileset>
- </copy>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/converter.xml b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/converter.xml
deleted file mode 100644
index 3baf857406ca..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/converter.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<!--<!DOCTYPE converters SYSTEM "converter.dtd">-->
-<converters>
- <converter type="staroffice/sxw" version="1.0">
- <converter-display-name>
- XSLT Transformation
- </converter-display-name>
- <converter-description>
- Converter which performs xslt transformations
- </converter-description>
- <converter-vendor>OpenOffice.org</converter-vendor>
- <converter-class-impl>
- org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl
- </converter-class-impl>
- <converter-xslt-serialize>
- sofftohtml.xsl
- </converter-xslt-serialize>
- <converter-xslt-deserialize>
- htmltosoff.xsl
- </converter-xslt-deserialize>
- <converter-target type="text/html" />
- </converter>
-</converters>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/DBFilter.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/DBFilter.java
deleted file mode 100644
index eae4a03c5bc6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/DBFilter.java
+++ /dev/null
@@ -1,570 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-//Standard Java classes
-import java.util.Enumeration;
-import java.util.Vector;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ByteArrayInputStream;
-import com.sun.star.xml.XImportFilter;
-import com.sun.star.xml.XExportFilter;
-import java.io.*;
-import java.util.regex.*;
-
-// Imported TraX classes
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.URIResolver;
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.OutputKeys;
-
-//StarOffice Interfaces and UNO
-import com.sun.star.uno.AnyConverter;
-import com.sun.star.lang.XInitialization;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XServiceInfo;
-import com.sun.star.lang.XTypeProvider;
-import com.sun.star.uno.Type;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.comp.loader.FactoryHelper;
-import com.sun.star.lang.XServiceName;
-import com.sun.star.lang.XSingleServiceFactory;
-import com.sun.star.registry.XRegistryKey;
-import com.sun.star.frame.XConfigManager;
-import com.sun.star.xml.sax.InputSource;
-import com.sun.star.xml.sax.XParser;
-import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
-import com.sun.star.xml.sax.XDocumentHandler;
-
-//Uno to java Adaptor
-import com.sun.star.lib.uno.adapter.*;
-
-/** This outer class provides an inner class to implement the service
- * description, a method to instantiate the
- * component on demand (__getServiceFactory()), and a method to give
- * information about the component (__writeRegistryServiceInfo()).
- */
-public class DBFilter {
-
-
- private static XMultiServiceFactory xMSF;
-
- /** This inner class provides the component as a concrete implementation
- * of the service description. It implements the needed interfaces.
- * @implements XTypeProvider
- */
- public static class _DBFilter implements
- XImportFilter,
- XExportFilter,
- XServiceName,
- XServiceInfo,
- XDocumentHandler,
- XTypeProvider {
-
- private boolean indent;
- private XInputStream xInStream;
- private XOutputStream xOutStream;
- private XOutputStream xos;
- private String sExportStyleSheet;
- private String doctype_public;
- private String doctype_system;
-
- public _DBFilter()
- {
- indent = false;
- xInStream = null;
- xOutStream = null;
- xos = null;
- sExportStyleSheet = null;
- doctype_public = null;
- doctype_system = null;
- }
-
- /** The component will be registered under this name.
- */
- static private final String __serviceName = "com.sun.star.documentconversion.DBFilter";
-
- public com.sun.star.uno.Type[] getTypes() {
- Type[] typeReturn = {};
-
- try {
- typeReturn = new Type[] {
- new Type( XTypeProvider.class ),
- new Type( XExportFilter.class ),
- new Type( XImportFilter.class ),
- new Type( XServiceName.class ),
- new Type( XServiceInfo.class ) };
- }
- catch( Exception exception ) {
-
- }
-
- return( typeReturn );
- }
-
-
- public boolean importer(com.sun.star.beans.PropertyValue[] aSourceData,
- com.sun.star.xml.sax.XDocumentHandler xDocHandler,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException {
- /*
- System.out.println("\nFound the Java Importer!\n");
-
- System.out.println("\n"+msUserData[0]);
- System.out.println("\n"+msUserData[1]);
- System.out.println("\n"+msUserData[2]);
- System.out.println("\n"+msUserData[3]);
- System.out.println("\n"+xDocHandler);
- System.out.println("\n"+msUserData[4]);
- System.out.println("\n"+msUserData[5]);
- */
- String sFileName=null;
- String udImport =msUserData[2];
- String sImportStyleSheet =msUserData[4];
- sExportStyleSheet =msUserData[5];
- com.sun.star.io.XInputStream xis=null;
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
-
- for (int i = 0 ; i < pValue.length; i++)
- {
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("InputStream")==0){
- xis=(com.sun.star.io.XInputStream)AnyConverter.toObject(new Type(com.sun.star.io.XInputStream.class), pValue[i].Value);
- }
- else if (pValue[i].Name.compareTo("FileName")==0){
- sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- }
- else if (pValue[i].Name.compareTo("Indent")==0){ //to be changed to new value for indentation from XSLT UI
- indent=(boolean)AnyConverter.toBoolean(pValue[i].Value);
- }
- else if (pValue[i].Name.compareTo("DocType_Public")==0){
- doctype_public = AnyConverter.toString(pValue[i].Value);
- }
- else if (pValue[i].Name.compareTo("DocType_System")==0){
- doctype_system = AnyConverter.toString(pValue[i].Value);
- } }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
-
- }
-
- try{
-
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
- Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe");
- xInStream = (XInputStream) UnoRuntime.queryInterface(
- XInputStream.class , xPipeObj );
- xOutStream = (XOutputStream) UnoRuntime.queryInterface(
- XOutputStream.class , xPipeObj );
- if (!sImportStyleSheet.equals("")){
- if (!sImportStyleSheet.startsWith("file:")&&!sImportStyleSheet.startsWith("http:")
- &&!sExportStyleSheet.startsWith("shttp:")
- &&!sExportStyleSheet.startsWith("jar:")){
- sImportStyleSheet=PathString.concat(sImportStyleSheet);
- }
- }
- convert (xis,xOutStream,sImportStyleSheet,true);
- xOutStream.closeOutput();
- Object xSaxParserObj=xMSF.createInstance("com.sun.star.xml.sax.Parser");
- XParser xParser = (XParser) UnoRuntime.queryInterface(
- XParser.class , xSaxParserObj );
- InputSource aInput = new InputSource();
- if (sFileName==null)
- sFileName=" ";
- aInput.sSystemId = sFileName;
- aInput.aInputStream =xInStream;
- xParser.setDocumentHandler ( xDocHandler );
- xParser.parseStream ( aInput );
- xInStream.closeInput();
-
- }
- catch (Exception AnyExec){
- //e.printStackTrace();
- System.out.println("\nException "+AnyExec);
- throw new com.sun.star.uno.RuntimeException(AnyExec.getMessage());
- }
- return true;
- }
-
-
-
- public boolean exporter(com.sun.star.beans.PropertyValue[] aSourceData,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException {
- /*
- System.out.println("\nFound the Exporter!\n");
-
- System.out.println("\n0"+msUserData[0]);
- System.out.println("\n1"+msUserData[1]);
- System.out.println("\n2"+msUserData[2]);
- System.out.println("\n3"+msUserData[3]);
-
- System.out.println("\n4"+msUserData[4]);
- System.out.println("\n5"+msUserData[5]);
- */
- String udImport =msUserData[2];
- sExportStyleSheet =msUserData[5];
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
- for (int i = 0 ; i < pValue.length; i++)
- {
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("OutputStream")==0){
- xos=(com.sun.star.io.XOutputStream)AnyConverter.toObject(new Type(com.sun.star.io.XOutputStream.class), pValue[i].Value);
- // System.out.println(pValue[i].Name+" "+xos);
- }
- else if (pValue[i].Name.compareTo("Indent")==0){ //to be changed to new value for indentation from XSLT UI
- indent=(boolean)AnyConverter.toBoolean(pValue[i].Value);
- }
- else if (pValue[i].Name.compareTo("DocType_Public")==0){
- doctype_public = AnyConverter.toString(pValue[i].Value);
- }
- else if (pValue[i].Name.compareTo("DocType_System")==0){
- doctype_system = AnyConverter.toString(pValue[i].Value);
- }
-
- }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
- }
-
-
- try{
-
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
-
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
- Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe");
- xInStream = (XInputStream) UnoRuntime.queryInterface(
- XInputStream.class , xPipeObj );
- xOutStream = (XOutputStream) UnoRuntime.queryInterface(
- XOutputStream.class , xPipeObj );
- if (!sExportStyleSheet.equals("")){
- if (!sExportStyleSheet.startsWith("file:")&&!sExportStyleSheet.startsWith("http:")
- &&!sExportStyleSheet.startsWith("shttp:")
- &&!sExportStyleSheet.startsWith("jar:")){
- sExportStyleSheet=PathString.concat(sExportStyleSheet);
- }
- }
- }
- catch (Exception AnyExec){
- System.out.println("Exception "+AnyExec);
- throw new com.sun.star.uno.RuntimeException(AnyExec.getMessage());
- }
- return true;
- }
-
- public String replace(String origString, String origChar, String replaceChar){
- String tmp="";
- int index=origString.indexOf(origChar);
- if(index !=-1){
- while (index !=-1){
- String first =origString.substring(0,index);
- first=first.concat(replaceChar);
- tmp=tmp.concat(first);
- origString=origString.substring(index+1,origString.length());
- index=origString.indexOf(origChar);
- if(index==-1) {
- tmp=tmp.concat(origString);
- }
- }
- }
- return tmp;
- }
-
- public String needsMask(String origString){
-
- if (origString.indexOf("&")!=-1){
- origString=replace(origString,"&","&amp;");
- }
- if (origString.indexOf("\"")!=-1){
- origString=replace(origString,"\"","&quot;");
- }
- if (origString.indexOf("<")!=-1){
- origString=replace(origString,"<","&lt;");
- }
- if (origString.indexOf(">")!=-1){
- origString=replace(origString,">","&gt;");
- }
- return origString;
- }
-
-
-
- public void startDocument (){
- }
-
- public void endDocument()
- {
- convert (xInStream,xos,sExportStyleSheet,false);
- }
-
- public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs)
- {
-
- str="<".concat(str);
- if (xattribs !=null)
- {
- str= str.concat(" ");
- int len=xattribs.getLength();
- for (short i=0;i<len;i++)
- {
- str=str.concat(xattribs.getNameByIndex(i));
- str=str.concat("=\"");
- //str=str.concat(xattribs.getValueByIndex(i));
- str=str.concat(needsMask(xattribs.getValueByIndex(i)));
- str=str.concat("\" ");
- }
- }
- str=str.concat(">");
- //System.out.println(str);
- try{
- //xOutStream.writeBytes(str.getBytes());
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
- }
-
- public void endElement(String str){
- str="</".concat(str);
- str=str.concat(">");
- str=str.concat("\n");
- try{
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
- // System.out.println(str);
-
- }
- public void characters(String str){
- str=needsMask(str);
- try{
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
- }
-
- public void ignorableWhitespace(String str){
-
-
- }
- public void processingInstruction(String aTarget, String aData){
-
- }
-
- public void setDocumentLocator(com.sun.star.xml.sax.XLocator xLocator){
-
- }
-
- private String maskEntities(String xmlString){
- Pattern testpattern = Pattern.compile("<!ENTITY [a-zA-Z0-9#]* ");
- Matcher testmatch= testpattern.matcher(xmlString);
- //System.out.println("\nStarting replace");
- int offset=0;
- while (testmatch.find(offset)){
- String newstring = xmlString.substring(testmatch.start()+9,testmatch.end()-1);
- offset= testmatch.end();
- //System.out.println("\nReplacing " +newstring);
-
- xmlString=xmlString.replaceAll("&"+newstring+";","<entity name=\""+newstring+"\">"+"&"+newstring+";"+"</entity>");
- testmatch = testmatch.reset();
- testmatch= testpattern.matcher(xmlString);
- //System.out.println("\nFound Pattern "+testmatch.replaceFirst("<entity>"+newstring+"</entity>"));
- newstring= "";
- }
- return xmlString;
- }
-
- public void convert (com.sun.star.io.XInputStream xml,
- com.sun.star.io.XOutputStream device,String sStyleSheet,boolean importing ) throws com.sun.star.uno.RuntimeException {
- XInputStreamToInputStreamAdapter xis =new XInputStreamToInputStreamAdapter(xml);
- XOutputStreamToOutputStreamAdapter xos =
- new XOutputStreamToOutputStreamAdapter(device);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- String xmlFile=null;
- try{
- //call the tranformer using the XSL, Source and Result dom.
- TransformerFactory tFactory = TransformerFactory.newInstance();
- //tFactory.setURIResolver(this);
- Transformer transformer =null;
- transformer = tFactory.newTransformer( new StreamSource(sStyleSheet));
- if(indent){ // required for displaying XML correctly in XSLT UI
- transformer.setOutputProperty("indent", "yes");
- transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "1");
- }
- if(null != doctype_public){
- transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype_public);
- }
- if(null != doctype_system){
- transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype_system);
- }
- if (importing)
- {
- byte tmpArr[]=new byte[1000];
- while (xis.available()>0){
- int read = xis.read(tmpArr);
- baos.write(tmpArr,0,read);
- tmpArr =new byte[1000];
- }
- xmlFile = maskEntities(baos.toString("UTF-8"));
-
- //xmlFile = baos.toString("UTF-8");
- if (xmlFile.indexOf("<!DOCTYPE")!=-1){
- String tag= xmlFile.substring(xmlFile.lastIndexOf("/")+1,xmlFile.lastIndexOf(">"));
- String entities = "";
- if(xmlFile.indexOf("[",xmlFile.indexOf("<!DOCTYPE"))!=-1){
- if(xmlFile.indexOf("[",xmlFile.indexOf("<!DOCTYPE")) < xmlFile.indexOf(">",xmlFile.indexOf("<!DOCTYPE"))){
- entities = xmlFile.substring(xmlFile.indexOf("[",xmlFile.indexOf("<!DOCTYPE")),xmlFile.indexOf("]",xmlFile.indexOf("<!DOCTYPE"))+1);
- }
- }
- String newDocType = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE "+tag+" "+entities+">";
- xmlFile= xmlFile.substring(xmlFile.indexOf("<"+tag,0), xmlFile.lastIndexOf(">")+1);
- xmlFile= newDocType.concat(xmlFile);
- //throw new com.sun.star.uno.RuntimeException(xmlFile);
- }
- ByteArrayInputStream bais = new ByteArrayInputStream(xmlFile.getBytes("UTF-8"));
- transformer.transform(new StreamSource(bais),new StreamResult(xos));
- }
- else
- transformer.transform(new StreamSource(xis),new StreamResult(xos));
- }
- catch (TransformerConfigurationException transConfExc)
- {
- throw new com.sun.star.uno.RuntimeException(transConfExc.getMessage());
- }
- catch (TransformerException transExc){
- //System.out.println("\nException "+ e);
- throw new com.sun.star.uno.RuntimeException(transExc.getMessage());
- }
- catch (Exception e){
- System.out.println("\nException "+ e);
- throw new com.sun.star.uno.RuntimeException(e.getMessage());
- }
- }
-
-
-
-
- // Implement methods from interface XTypeProvider
- public byte[] getImplementationId() {
- byte[] byteReturn = {};
-
- byteReturn = new String( "" + this.hashCode() ).getBytes();
-
- return( byteReturn );
- }
-
- // Implement method from interface XServiceName
- public String getServiceName() {
- return( __serviceName );
- }
-
- // Implement methods from interface XServiceInfo
- public boolean supportsService(String stringServiceName) {
- return( stringServiceName.equals( __serviceName ) );
- }
-
- public String getImplementationName() {
- return( _DBFilter.class.getName() );
- }
-
- public String[] getSupportedServiceNames() {
- String[] stringSupportedServiceNames = { __serviceName };
- return( stringSupportedServiceNames );
- }
- }
-
- /**
- * Returns a factory for creating the service.
- * This method is called by the <code>JavaLoader</code>
- *
- * @return returns a <code>XSingleServiceFactory</code> for creating the
- * component
- *
- * @param implName the name of the implementation for which a
- * service is desired
- * @param multiFactory the service manager to be used if needed
- * @param regKey the registryKey
- *
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static XSingleServiceFactory __getServiceFactory(String implName,
- XMultiServiceFactory multiFactory,
- XRegistryKey regKey) {
- XSingleServiceFactory xSingleServiceFactory = null;
- xMSF= multiFactory;
- if (implName.equals(_DBFilter.class.getName()) ) {
- xSingleServiceFactory = FactoryHelper.getServiceFactory(_DBFilter.class,
- _DBFilter.__serviceName,
- multiFactory,
- regKey);
- }
-
- return xSingleServiceFactory;
- }
-
- /**
- * Writes the service information into the given registry key.
- * This method is called by the <code>JavaLoader</code>
- * <p>
- * @return returns true if the operation succeeded
- * @param regKey the registryKey
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
-
- return FactoryHelper.writeRegistryServiceInfo(_DBFilter.class.getName(),
- _DBFilter.__serviceName, regKey);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Manifest b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Manifest
deleted file mode 100644
index 108fba617702..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-RegistrationClassName: DBFilter
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Readme.txt b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Readme.txt
deleted file mode 100644
index d67b2aaeeac9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/Readme.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-DBFilter Readme
-===============
-
-The DocBook filter (DBFilter) is essentially teh XSLTFilter that is
-delivered with Openoffice, except that it contains an extra routine
-for Masking DOCTYPE Entity declarations. In this way, Entities
-which are referenced inside the XML Document to be imported,
-are converted into an <entity name="ent_name"> tag. In this way,
-the entities can be imported into OOo as "set" and "get" variables.
-
-On Export, these variables can be written out once again as correct
-Enity decls and Entity references.
-
- \ No newline at end of file
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/makefile.mk
deleted file mode 100644
index 9f5a92570565..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbookfilter/makefile.mk
+++ /dev/null
@@ -1,60 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-PRJ = ..$/..
-PRJNAME = filter
-#PACKAGE = com$/sun$/star$/documentconversion$/DBFilter
-TARGET =DBFilter
-# --- Settings -----------------------------------------------------
-.INCLUDE: settings.mk
-CLASSDIR!:=$(CLASSDIR)$/$(TARGET)
-#USE_UDK_EXTENDED_MANIFESTFILE=TRUE
-#USE_EXTENDED_MANIFESTFILE=TRUE
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar
-JAVAFILES = $(subst,$(CLASSDIR)$/, $(subst,.class,.java $(JAVACLASSFILES)))
-CUSTOMMANIFESTFILE = Manifest
-#JARMANIFEST = Manifest
-
-#JARDIR=$(CLASSDIR)
-
-JARCOMPRESS = TRUE
-JARCLASSDIRS = DBFilter*.class
-JARTARGET = $(TARGET).jar
-
-
-# --- Files --------------------------------------------------------
-JAVACLASSFILES=$(CLASSDIR)$/DBFilter.class
-#---Manifest -------------------------------------------------------
-#$(OUT)$/class$/$(TARGET)$/META-INF: META-INF
-# + $(COPY) $(COPYRECURSE) META-INF $(OUT)$/class$/DBFilter$/META-INF
-# --- Targets ------------------------------------------------------
-.INCLUDE : target.mk
-$(JAVACLASSFILES) : $(CLASSDIR)
-
-$(CLASSDIR) :
- $(MKDIR) $(CLASSDIR)
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbooktosoffheadings.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbooktosoffheadings.xsl
deleted file mode 100644
index 7bb99da2f735..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/docbooktosoffheadings.xsl
+++ /dev/null
@@ -1,1725 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" version="1.0" office:class="text" office:version="1.0">
- <xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
- <!--<xsl:output method="xml" version="1.0" encoding="UTF-8" doctype-public="-//OASIS//DTD DocBook XML V4.1.2//EN" doctype-system="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/>-->
- <xsl:decimal-format name="staff" digit="D"/>
-
- <xsl:variable name="doc_type">
- <xsl:choose>
- <xsl:when test="/article">
- <xsl:text>article</xsl:text>
- </xsl:when>
- <xsl:when test="/chapter">
- <xsl:text>chapter</xsl:text>
- </xsl:when>
- </xsl:choose>
- </xsl:variable>
-
-
- <xsl:template match="/">
- <xsl:element name="office:document">
- <office:meta>
- <meta:generator>StarOffice 6.1 (Solaris Sparc)</meta:generator>
- <dc:title>
- <xsl:choose>
- <xsl:when test="contains( $doc_type, &apos;chapter&apos; )">
- <xsl:value-of select="/chapter/chapterinfo/title"/>
- </xsl:when>
- <xsl:when test="contains( $doc_type, &apos;article&apos; )">
- <xsl:value-of select="/article/articleinfo/title"/>
- </xsl:when>
- </xsl:choose>
- <!--<xsl:value-of select="$doc_type"/>-->
- <!--<xsl:value-of select="/article/articleinfo/title"/>-->
-
- </dc:title>
- <dc:description/>
- <dc:subject/>
- <meta:creation-date>2002-07-15T12:38:53</meta:creation-date>
- <dc:date>
- <xsl:choose>
- <xsl:when test="contains( $doc_type, &apos;chapter&apos; )">
- <xsl:value-of select="/chapter/chapterinfo/pubdate"/>
- </xsl:when>
- <xsl:when test="contains( $doc_type, &apos;article&apos; )">
- <xsl:value-of select="/article/articleinfo/pubdate"/>
- </xsl:when>
- </xsl:choose>
- <!--<xsl:value-of select="article/articleinfo/pubdate"/>-->
-
- </dc:date>
- <dc:language>
- <xsl:choose>
- <xsl:when test="contains( $doc_type, &apos;chapter&apos; )">
- <xsl:value-of select="chapter/@lang"/>
- </xsl:when>
- <xsl:when test="contains( $doc_type, &apos;article&apos; )">
- <xsl:value-of select="article/@lang"/>
- </xsl:when>
- </xsl:choose>
- <!--<xsl:value-of select="article/@lang"/>-->
-
- </dc:language>
- <meta:editing-cycles>21</meta:editing-cycles>
- <meta:editing-duration>P1DT0H11M54S</meta:editing-duration>
- <meta:user-defined meta:name="Info 1"/>
- <meta:user-defined meta:name="Info 2"/>
- <meta:user-defined meta:name="Info 3"/>
- <meta:user-defined meta:name="Info 4"/>
- <meta:document-statistic meta:table-count="1" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="42" meta:word-count="144" meta:character-count="820"/>
- </office:meta>
- <office:automatic-styles>
- <style:style style:name="fr1" style:family="graphics" style:parent-style-name="Graphics">
- <style:properties style:horizontal-pos="center" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="1" draw:color-inversion="false" draw:transparency="-100%" draw:color-mode="standard"/>
- </style:style>
- <style:style style:name="Table1" style:family="table">
- <style:properties style:width="14.649cm" table:align="margins"/>
- </style:style>
- <style:style style:name="Table1.A" style:family="table-column">
- <style:properties style:column-width="2.93cm" style:rel-column-width="13107*"/>
- </style:style>
- <style:style style:name="Table1.A1" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="Table1.E1" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="Table1.A2" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="Table1.E2" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Text body" style:list-style-name="Ordered List"/>
- <style:style style:name="T1" style:family="text" style:parent-style-name="Source Text">
- <style:properties fo:font-style="normal"/>
- </style:style>
- <style:page-master style:name="pm1">
- <style:properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2.54cm" fo:margin-bottom="2.54cm" fo:margin-left="3.175cm" fo:margin-right="3.175cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
- <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
- </style:properties>
- <style:header-style/>
- <style:footer-style/>
- </style:page-master>
- </office:automatic-styles>
- <office:master-styles>
- <style:master-page style:name="Standard" style:page-master-name="pm1"/>
- </office:master-styles>
- <office:body>
- <xsl:call-template name="entities"/>
- <xsl:apply-templates/>
- </office:body>
- </xsl:element>
- </xsl:template>
-
-
-<xsl:template name="entities">
- <xsl:element name="text:variable-decls">
- <xsl:for-each select="/descendant::entity">
- <xsl:variable name="entname"><xsl:value-of select="@name"/></xsl:variable>
- <xsl:if test="not(preceding::entity[@name = $entname])">
- <xsl:element name="text:variable-decl">
- <xsl:attribute name="text:value-type">
- <xsl:text>string</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:name">
- <xsl:text>entitydecl_</xsl:text><xsl:value-of select="@name"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:if>
- </xsl:for-each>
- </xsl:element>
-</xsl:template>
-
-
-
-<xsl:template match="entity">
- <xsl:variable name="entname"><xsl:value-of select="@name"/></xsl:variable>
- <xsl:choose>
- <xsl:when test="not(preceding::entity[@name = $entname])">
- <xsl:element name="text:variable-set">
- <xsl:attribute name="text:value-type">
- <xsl:text>string</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:name">
- <xsl:text>entitydecl_</xsl:text><xsl:value-of select="@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="text:variable-get">
- <xsl:attribute name="text:value-type">
- <xsl:text>string</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:name">
- <xsl:text>entitydecl_</xsl:text><xsl:value-of select="@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
-
-</xsl:template>
-
-
-
- <!-- table start -->
-
- <xsl:template match="table">
- <xsl:variable name="tabletitle">
- <xsl:value-of select="title"/>
- </xsl:variable>
- <xsl:element name="table:table">
- <xsl:attribute name="table:name"/>
- <xsl:attribute name="table:style-name">Table1</xsl:attribute>
- <xsl:attribute name="table:name">
- <xsl:value-of select="@id"/>
- </xsl:attribute>
- <blah>blah</blah>
- <xsl:apply-templates/>
- </xsl:element>
- <xsl:if test="not($tabletitle=&apos;&apos;)">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">Table</xsl:attribute>
- <xsl:value-of select="$tabletitle"/>
- </xsl:element>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="tgroup">
- <xsl:element name="table:table-column">
- <xsl:attribute name="table:style-name">Table1.A</xsl:attribute>
- <xsl:choose>
- <xsl:when test="@cols &gt;0">
- <xsl:attribute name="table:number-columns-repeated">
- <xsl:value-of select="@cols"/>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="table:number-columns-repeated">
- <xsl:value-of select="count(child::tbody/row/entry) div count(child::tbody/row) "/>
- </xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="thead">
- <xsl:element name="table:table-header-rows">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="tbody">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="row">
- <xsl:element name="table:table-row">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="entry">
- <xsl:element name="table:table-cell">
- <xsl:if test="ancestor-or-self::thead">
- <xsl:attribute name="table:style-name">Table1.A1</xsl:attribute>
- </xsl:if>
- <xsl:if test="not(ancestor-or-self::thead)">
- <xsl:attribute name="table:style-name">Table1.A2</xsl:attribute>
- </xsl:if>
- <xsl:choose>
- <xsl:when test="@spanname">
- <!--<xsl:if test="@spanname">-->
-
- <xsl:variable name="sname">
- <xsl:value-of select="@spanname"/>
- </xsl:variable>
- <xsl:attribute name="table:number-columns-spanned">
- <xsl:variable name="colnamestart">
- <xsl:value-of select="ancestor::tgroup/spanspec[@spanname=$sname]/@namest"/>
- </xsl:variable>
- <xsl:variable name="colnameend">
- <xsl:value-of select="ancestor::tgroup/spanspec[@spanname=$sname]/@nameend"/>
- </xsl:variable>
- <xsl:variable name="colnumstart">
- <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnamestart]/@colnum"/>
- </xsl:variable>
- <xsl:variable name="colnumend">
- <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnameend]/@colnum"/>
- </xsl:variable>
- <xsl:value-of select="$colnumend - $colnumstart + 1"/>
- </xsl:attribute>
- </xsl:when>
- <xsl:when test="@namest and @nameend">
- <!--<xsl:if test="@namest and @nameend">-->
-
- <xsl:variable name="colnamestart">
- <xsl:value-of select="@namest"/>
- </xsl:variable>
- <xsl:variable name="colnameend">
- <xsl:value-of select="@nameend"/>
- </xsl:variable>
- <xsl:attribute name="table:number-columns-spanned">
- <xsl:variable name="colnumstart">
- <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnamestart]/@colnum"/>
- </xsl:variable>
- <xsl:variable name="colnumend">
- <xsl:value-of select="ancestor::tgroup/colspec[@colname=$colnameend]/@colnum"/>
- </xsl:variable>
- <xsl:value-of select="$colnumend - $colnumstart + 1"/>
- </xsl:attribute>
- </xsl:when>
- </xsl:choose>
- <!--
- <xsl:if test="not(@namest = '' ) ">
- <xsl:attribute name="table:number-columns-spanned">
- <xsl:value-of select="(substring-after(@nameend,'c')-substring-after(@namest,'c'))+1"/>
-
- </xsl:attribute>
- </xsl:if>
- -->
-
- <xsl:choose>
- <xsl:when test="not(child::para)">
- <xsl:element name="text:p">
- <xsl:if test="ancestor-or-self::thead">
- <xsl:attribute name="text:style-name">Table Heading</xsl:attribute>
- </xsl:if>
- <xsl:if test="ancestor-or-self::tbody">
- <xsl:attribute name="text:style-name">Table Contents</xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="subtitle">
- <xsl:choose>
- <xsl:when test="parent::table">
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:when test="parent::informaltable">
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">Section SubTitle</xsl:attribute>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="title">
- <xsl:choose>
- <xsl:when test="parent::figure"/>
- <xsl:when test="parent::table"/>
- <xsl:when test="parent::sect1"/>
- <xsl:when test="parent::sect2"/>
- <xsl:when test="parent::sect3"/>
- <xsl:when test="parent::sect4"/>
- <xsl:when test="parent::sect5"/>
- <xsl:when test="parent::informaltable">
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="text:p">
- <xsl:choose>
- <xsl:when test="parent::appendix">
- <xsl:attribute name="text:style-name">Appendix Title</xsl:attribute>
- </xsl:when>
- </xsl:choose>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="articleinfo">
- <xsl:element name="text:section">
- <xsl:attribute name="text:style-name">ArticleInfo</xsl:attribute>
- <xsl:attribute name="text:name">ArticleInfo</xsl:attribute>
- <xsl:if test="/article/articleinfo/subtitle !=&apos;&apos;">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">Document SubTitle</xsl:attribute>
- <xsl:value-of select="/article/articleinfo/subtitle"/>
- </xsl:element>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="chapterinfo">
- <xsl:element name="text:section">
- <xsl:attribute name="text:style-name">ChapterInfo</xsl:attribute>
- <xsl:attribute name="text:name">ChapterInfo</xsl:attribute>
- <xsl:if test="/chapter/chapterinfo/title !=&apos;&apos; ">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">Document Title</xsl:attribute>
- <xsl:value-of select="/chapter/chapterinfo/title"/>
- </xsl:element>
- <xsl:if test="/chapter/chapterinfo/subtitle !=&apos;&apos;">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">Document SubTitle</xsl:attribute>
- <xsl:value-of select="/chapter/chapterinfo/subtitle"/>
- </xsl:element>
- </xsl:if>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="appendix">
- <xsl:element name="text:section">
- <xsl:attribute name="text:style-name">Appendix</xsl:attribute>
- <xsl:attribute name="text:name">Appendix</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <!--
-<xsl:template match="author">
- <xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="firstname">
- <xsl:element name="text:variable-set">
- <xsl:attribute name="text:name">
- <xsl:if test="ancestor::articleinfo/author">
- <xsl:text disable-output-escaping="yes">articleinfo.author</xsl:text><xsl:value-of select="count(parent::author[preceding-sibling::author])"/><xsl:text disable-output-escaping="yes">.firstname</xsl:text><xsl:value-of select="count(preceding-sibling::firstname)"/>
- </xsl:if>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
-</xsl:template>
--->
-
- <xsl:template match="articleinfo/title | chapterinfo/title">
- <!-- <xsl:element name="text:variable-decls">
- <xsl:element name="text:variable-decl">
- <xsl:attribute name="text:value-type">
- <xsl:text>string</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:name">
- <xsl:text disable-output-escaping="yes">articleinfo.title</xsl:text>
- </xsl:attribute>
- </xsl:element>
-
- </xsl:element>
- <xsl:element name="text:p">
- <xsl:element name="text:variable-set">
- <xsl:attribute name="text:value-type">
- <xsl:text>string</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:name">
- <xsl:text disable-output-escaping="yes">articleinfo.title</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:element>
- -->
- </xsl:template>
-
-
- <xsl:template match="articleinfo/title">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">Document Title</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="date">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>date_</xsl:text><xsl:value-of select="count(preceding::date)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>date_</xsl:text><xsl:value-of select="count(preceding::date)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-<xsl:template match="revision">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>revision_</xsl:text><xsl:value-of select="count(preceding::revision)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>revision_</xsl:text><xsl:value-of select="count(preceding::revision)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-<xsl:template match="revnumber">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>revnumber_</xsl:text><xsl:value-of select="count(preceding::revnumber)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>revnumber_</xsl:text><xsl:value-of select="count(preceding::revnumber)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-<xsl:template match="revdescription">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>revdescription_</xsl:text><xsl:value-of select="count(preceding::revdescription)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>revdescription_</xsl:text><xsl:value-of select="count(preceding::revdescription)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-<xsl:template match="revhistory">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>revhistory_</xsl:text><xsl:value-of select="count(preceding::revhistory)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>revhistory_</xsl:text><xsl:value-of select="count(preceding::revhistory)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:line-break"/>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="legalnotice">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>legalnotice_</xsl:text><xsl:value-of select="count(preceding::legalnotice)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>legalnotice_</xsl:text><xsl:value-of select="count(preceding::legalnotice)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="legalnotice/title">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>title_</xsl:text><xsl:value-of select="count(preceding::legalnotice/title)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>title_</xsl:text><xsl:value-of select="count(preceding::legalnotice/title)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-<xsl:template match="para[ancestor::articleinfo]">
- <xsl:element name="text:s"/>
-
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>para_</xsl:text><xsl:value-of select="count(preceding::para[ancestor::articleinfo])"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>para_</xsl:text><xsl:value-of select="count(preceding::para[ancestor::articleinfo])"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-
-<xsl:template match="articleinfo/subtitle">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>subtitle_</xsl:text><xsl:value-of select="count(preceding::articleinfo/subtitle)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>subtitle_</xsl:text><xsl:value-of select="count(preceding::articleinfo/subtitle)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="articleinfo/edition">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>edition_</xsl:text><xsl:value-of select="count(preceding::articleinfo/edition)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>edition_</xsl:text><xsl:value-of select="count(preceding::articleinfo/edition)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="articleinfo/releaseinfo">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>releaseinfo_</xsl:text><xsl:value-of select="count(preceding::articleinfo/releaseinfo)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>releaseinfo_</xsl:text><xsl:value-of select="count(preceding::articleinfo/releaseinfo)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
-</xsl:template>
-
-
-<xsl:template match="author/firstname">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>firstname_</xsl:text><xsl:value-of select="count(preceding::author/firstname)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>firstname_</xsl:text><xsl:value-of select="count(preceding::author/firstname)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-
-</xsl:template>
-
-
-
-<xsl:template match="year[ancestor::articleinfo]">
- <xsl:element name="text:s"/>
-
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>year_</xsl:text><xsl:value-of select="count(preceding::year[ancestor::articleinfo])"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>year_</xsl:text><xsl:value-of select="count(preceding::year[ancestor::articleinfo])"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-
-</xsl:template>
-
-<xsl:template match="authorgroup">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="articleinfo/copyright/holder">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>holder_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright/holder)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>holder_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright/holder)"/>
- </xsl:attribute>
- </xsl:element>
- <!--<xsl:element name="text:s"/>-->
- <xsl:element name="text:line-break"/>
-</xsl:template>
-
-<xsl:template match="articleinfo/copyright">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>copyright_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>copyright_</xsl:text><xsl:value-of select="count(preceding::articleinfo/copyright)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
- </xsl:element>
-</xsl:template>
-
-
-<xsl:template name="affiliation">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::affiliation)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::affiliation)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-<xsl:template match="author/affiliation/address">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/>
- </xsl:attribute>
- </xsl:element>
-</xsl:element>
-</xsl:template>
-
-<xsl:template match="authorgroup">
- <xsl:element name="text:p">
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>authorgroup_</xsl:text><xsl:value-of select="count(preceding::authorgroup)"/>
- </xsl:attribute>
- </xsl:element>
-</xsl:element>
-</xsl:template>
-
-
-<xsl:template match="author">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>author_</xsl:text><xsl:value-of select="count(preceding::author)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>author_</xsl:text><xsl:value-of select="count(preceding::author)"/>
- </xsl:attribute>
- </xsl:element>
- <!--<xsl:element name="text:s"/>-->
- <xsl:element name="text:line-break"/>
-</xsl:template>
-
-<xsl:template match="author/affiliation">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::author/affiliation)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>affiliation_</xsl:text><xsl:value-of select="count(preceding::author/affiliation)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-<xsl:template match="author/affiliation/address">
- <xsl:element name="text:s"/>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>address_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/address)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-</xsl:template>
-
-
-<xsl:template match="email[ancestor::articleinfo]">
- <xsl:element name="text:s"/>
-
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>email_</xsl:text><xsl:value-of select="count(preceding::email[ancestor::articleinfo])"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>email_</xsl:text><xsl:value-of select="count(preceding::email[ancestor::articleinfo])"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-
-</xsl:template>
-
-<xsl:template match="author/affiliation/orgname">
- <xsl:element name="text:s"/>
-
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>orgname_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/orgname)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>orgname_</xsl:text><xsl:value-of select="count(preceding::author/affiliation/orgname)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-
-</xsl:template>
-
-
-<xsl:template match="author/surname">
- <xsl:element name="text:s"/>
-
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>surname_</xsl:text><xsl:value-of select="count(preceding::author/surname)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>surname_</xsl:text><xsl:value-of select="count(preceding::author/surname)"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="text:s"/>
-
-
-</xsl:template>
-
-
-
- <xsl:template match="para">
- <xsl:choose>
- <xsl:when test="ancestor::varlistentry">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">VarList Term</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="text:p">
- <xsl:choose>
- <xsl:when test="ancestor-or-self::footnote">
- <xsl:attribute name="text:style-name">
- <xsl:text>Footnote</xsl:text>
- </xsl:attribute>
- </xsl:when>
- <xsl:when test="ancestor-or-self::informaltable">
- <xsl:if test="ancestor-or-self::informaltable">
- <xsl:attribute name="text:style-name">Table Contents</xsl:attribute>
- </xsl:if>
- <xsl:if test="ancestor-or-self::thead ">
- <xsl:attribute name="text:style-name">Table Heading</xsl:attribute>
- </xsl:if>
- </xsl:when>
- <xsl:when test="ancestor-or-self::table">
- <xsl:if test="ancestor-or-self::table">
- <xsl:attribute name="text:style-name">Table Contents</xsl:attribute>
- </xsl:if>
- <xsl:if test="ancestor-or-self::thead ">
- <xsl:attribute name="text:style-name">Table Heading</xsl:attribute>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="text:style-name">Text body</xsl:attribute>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:choose>
- <xsl:when test="@id">
- <xsl:call-template name="test.id"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="section">
- <xsl:element name="text:h">
- <xsl:attribute name="text:level">
- <xsl:value-of select="count(ancestor-or-self::section) "/>
- </xsl:attribute>
- <xsl:value-of select="child::title"/>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="abstract">
- <xsl:element name="text:h">
- <xsl:attribute name="text:level">1</xsl:attribute>
- <xsl:text>abstract</xsl:text>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="appendix">
- <xsl:element name="text:h">
- <xsl:attribute name="text:level">1</xsl:attribute>
- <xsl:text>appendix</xsl:text>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="sect1">
- <xsl:element name="text:h">
- <xsl:attribute name="text:level">1</xsl:attribute>
- <xsl:choose>
- <xsl:when test="@id">
- <xsl:call-template name="test.id"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="child::title"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="sect2">
- <xsl:element name="text:h">
- <xsl:attribute name="text:level">2</xsl:attribute>
- <xsl:choose>
- <xsl:when test="@id">
- <xsl:call-template name="test.id"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="child::title"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="sect3">
- <xsl:element name="text:h">
- <xsl:attribute name="text:level">3</xsl:attribute>
- <xsl:choose>
- <xsl:when test="@id">
- <xsl:call-template name="test.id"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="child::title"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="sect4">
- <xsl:element name="text:h">
- <xsl:attribute name="text:level">4</xsl:attribute>
- <xsl:choose>
- <xsl:when test="@id">
- <xsl:call-template name="test.id"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="child::title"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
- <!--<xsl:template match="sect5">
- <xsl:element name="text:section">
- <xsl:attribute name="text:style-name">Sect1</xsl:attribute>
- <xsl:attribute name="text:name"><xsl:value-of select="@id"/></xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
-</xsl:template>-->
-
- <xsl:template match="informaltable">
- <xsl:element name="table:table">
- <xsl:attribute name="table:name"/>
- <xsl:attribute name="table:style-name">Table1</xsl:attribute>
- <xsl:attribute name="table:name">
- <xsl:value-of select="@id"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match="indexterm"/>
-
-
- <xsl:template match="figure">
- <xsl:apply-templates/>
- </xsl:template>
- <!-- lists Section -->
-
- <xsl:template match="itemizedlist">
- <xsl:element name="text:unordered-list">
- <xsl:attribute name="text:style-name">UnOrdered List</xsl:attribute>
- <xsl:attribute name="text:continue-numbering">false</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="variablelist">
- <xsl:element name="text:unordered-list">
- <xsl:attribute name="text:style-name">Var List</xsl:attribute>
- <xsl:attribute name="text:continue-numbering">false</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="orderedlist">
- <xsl:element name="text:ordered-list">
- <xsl:attribute name="text:style-name">Ordered List</xsl:attribute>
- <xsl:attribute name="text:continue-numbering">false</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="term">
- <xsl:if test="parent::varlistentry">
- <text:list-item>
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">VarList Term</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </text:list-item>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="listitem">
- <xsl:choose>
- <xsl:when test="parent::varlistentry">
- <text:list-item>
- <xsl:apply-templates/>
- </text:list-item>
- </xsl:when>
- <xsl:otherwise>
- <text:list-item>
- <xsl:apply-templates/>
- </text:list-item>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <!-- end of lists-->
-
- <xsl:template match="menuchoice">
- <xsl:variable name="pos"><xsl:value-of select="count(preceding::menuchoice)"/></xsl:variable>
- <xsl:element name="text:bookmark-start">
- <xsl:attribute name="text:name">
- <xsl:text>menuchoice_</xsl:text><xsl:value-of select="$pos"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- <xsl:element name="text:bookmark-end">
- <xsl:attribute name="text:name">
- <xsl:text>menuchoice_</xsl:text><xsl:value-of select="$pos"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="guimenuitem">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">GuiMenuItem</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="guibutton">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">GuiButton</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="guisubmenu">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">GuiSubMenu</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 4th, 2003 -->
- <xsl:template match="emphasis">
- <xsl:element name="text:span">
- <xsl:choose>
- <xsl:when test="@role">
- <xsl:attribute name="text:style-name">Emphasis Bold</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="text:style-name">Emphasis</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:template>
-
-<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 16th, 2003 -->
- <xsl:template match="quote">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">Citation</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match="guimenu">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">GuiMenu</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="guisubmenu">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">GuiSubMenu</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="guilabel">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">GuiLabel</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="guibutton">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">GuiButton</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="keycap">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">KeyCap</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="keysym">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">KeySym</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="keycombo">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">KeyCombo</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="command">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">Command</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="application">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">Application</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="filename">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">FileName</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="systemitem">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">SystemItem</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="computeroutput">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">ComputerOutput</xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="inlinegraphic">
- <xsl:element name="draw:image">
- <xsl:attribute name="draw:style-name">
- <xsl:text>fr1</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="draw:name"/>
- <xsl:attribute name="text:anchor-type"/>
- <xsl:attribute name="draw:z-index"/>
- <xsl:attribute name="xlink:href">
- <xsl:value-of select="@fileref"/>
- </xsl:attribute>
- <xsl:attribute name="xlink:type"/>
- <xsl:attribute name="svg:width">
- <!--<xsl:value-of select="@width"/>-->
-
- <xsl:text>1cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="svg:height">
- <xsl:text>1cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:show">
- <xsl:text>embed</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:actuate">
- <xsl:text>onLoad</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="draw:filter-name">
- <xsl:text disable-output-escaping="yes">&lt;All formats&gt;</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="footnote">
- <xsl:element name="text:footnote">
- <!--<xsl:element name="text:footnote-citation">Aidan</xsl:element>-->
-
- <xsl:element name="text:footnote-body">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="highlight">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">
- <xsl:text>Highlight</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="ulink">
- <xsl:element name="text:a">
- <xsl:attribute name="xlink:type">
- <xsl:text>simple</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:href">
- <xsl:value-of select="@url"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="link">
- <xsl:element name="text:a">
- <xsl:attribute name="xlink:type">
- <xsl:text>simple</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:href">
- <xsl:text>#</xsl:text>
- <xsl:value-of select="@linkend"/>
- <xsl:text>%7Cregion</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="olink">
- <xsl:element name="text:a">
- <xsl:attribute name="xlink:type">
- <xsl:text>simple</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:href">
- <xsl:value-of select="@targetdocent"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <!-- xref maps to reference-ref i.e an OOo insert reference
- xref is an empty element, reference-ref spans the object to be referenced -->
- <xsl:template match="xref">
- <xsl:element name="text:reference-ref">
- <xsl:attribute name="text:reference-format">
- <xsl:text>text</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:ref-name">
- <xsl:value-of select="@linkend"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <!-- the DocBook elements that have been "xreffed" contain an ID attribute that is linked to by an xref @linkend or @endterm -->
- <!-- the @id can also be pointed to by an indexterm -->
-
- <xsl:template name="test.id">
- <xsl:if test="@id">
- <xsl:variable name="id.val">
- <xsl:value-of select="@id"/>
- </xsl:variable>
-
- <xsl:element name="text:reference-mark-start">
- <xsl:attribute name="text:name">
- <xsl:value-of select="@id"/>
- </xsl:attribute>
- </xsl:element>
-
- <xsl:choose>
- <xsl:when test="self::para">
- <xsl:apply-templates/>
- </xsl:when>
- <xsl:otherwise>
- <!-- sect* -->
- <xsl:value-of select="child::title"/>
- </xsl:otherwise>
- </xsl:choose>
-
- <xsl:element name="text:reference-mark-end">
- <xsl:attribute name="text:name">
- <xsl:value-of select="@id"/>
- </xsl:attribute>
- </xsl:element>
-
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="indexterm">
- <xsl:if test="@class = &apos;startofrange&apos;">
- <xsl:element name="text:alphabetical-index-mark-start">
- <xsl:attribute name="text:id">
- <xsl:value-of select="@id"/>
- </xsl:attribute>
- <!--<xsl:if test="primary">-->
-
- <xsl:attribute name="text:key1">
- <xsl:value-of select="primary"/>
- </xsl:attribute>
- <!--</xsl:if>-->
-
- <xsl:if test="secondary">--&gt;
- <xsl:attribute name="text:key2">
- <xsl:value-of select="secondary"/>
- </xsl:attribute>
- </xsl:if>
- </xsl:element>
- </xsl:if>
- <xsl:if test="@class = &apos;endofrange&apos;">
- <xsl:element name="text:alphabetical-index-mark-end">
- <xsl:attribute name="text:id">
- <xsl:value-of select="@startref"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="index">
- <xsl:element name="text:alphabetical-index">
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Sect1</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:protected">
- <xsl:text disable-output-escaping="yes">true</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:name">
- <xsl:value-of select="title"/>
- </xsl:attribute>
- <xsl:element name="text:alphabetical-index-source">
- <xsl:attribute name="text:main-entry-style-name">
- <xsl:text disable-output-escaping="yes">Main index entry</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:sort-algorithm">
- <xsl:text disable-output-escaping="yes">alphanumeric</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="fo:language">
- <xsl:text disable-output-escaping="yes">en</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="fo:country">
- <xsl:text disable-output-escaping="yes">IE</xsl:text>
- </xsl:attribute>
- <xsl:element name="text:index-title-template">
- <xsl:attribute name="text:style-name">Index Heading</xsl:attribute>
- <xsl:value-of select="title"/>
- </xsl:element>
- <xsl:element name="text:alphabetical-index-entry-template">
- <xsl:attribute name="text:outline-level">
- <xsl:text disable-output-escaping="yes">separator</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Index Separator</xsl:text>
- </xsl:attribute>
- <xsl:element name="text:index-entry-text"/>
- </xsl:element>
- <xsl:element name="text:alphabetical-index-entry-template">
- <xsl:attribute name="text:outline-level">
- <xsl:text disable-output-escaping="yes">1</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Index 1</xsl:text>
- </xsl:attribute>
- <xsl:element name="text:index-entry-text"/>
- <xsl:element name="text:index-entry-tab-stop">
- <xsl:attribute name="style:type">
- <xsl:text disable-output-escaping="yes">left</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="style:position">
- <xsl:text disable-output-escaping="yes">0cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="style:leader-char">
- <xsl:text disable-output-escaping="yes"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
- <xsl:element name="text:alphabetical-index-entry-template">
- <xsl:attribute name="text:outline-level">
- <xsl:text disable-output-escaping="yes">2</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Index 2</xsl:text>
- </xsl:attribute>
- <xsl:element name="text:index-entry-text"/>
- <xsl:element name="text:index-entry-tab-stop">
- <xsl:attribute name="style:type">
- <xsl:text disable-output-escaping="yes">left</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="style:position">
- <xsl:text disable-output-escaping="yes">0cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="style:leader-char">
- <xsl:text disable-output-escaping="yes"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
- <xsl:element name="text:alphabetical-index-entry-template">
- <xsl:attribute name="text:outline-level">
- <xsl:text disable-output-escaping="yes">3</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Index 3</xsl:text>
- </xsl:attribute>
- <xsl:element name="text:index-entry-text"/>
- <xsl:element name="text:index-entry-tab-stop">
- <xsl:attribute name="style:type">
- <xsl:text disable-output-escaping="yes">left</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="style:position">
- <xsl:text disable-output-escaping="yes">0cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="style:leader-char">
- <xsl:text disable-output-escaping="yes"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:element>
- </xsl:element>
-
- <xsl:element name="text:index-body">
- <xsl:element name="text:index-title">
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Sect1</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="text:name">
- <xsl:text disable-output-escaping="yes">Alphabetical Index1_Head</xsl:text>
- </xsl:attribute>
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Index Heading</xsl:text>
- </xsl:attribute>
- <xsl:value-of select="title"/>
- </xsl:element>
- </xsl:element>
- <xsl:apply-templates select="indexentry"/>
- </xsl:element>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="indexentry">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Index 1</xsl:text>
- </xsl:attribute>
- <xsl:value-of select="primaryie"/>
- <xsl:element name="text:tab-stop"/>
- </xsl:element>
- <xsl:if test="secondaryie">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">
- <xsl:text disable-output-escaping="yes">Index 2</xsl:text>
- </xsl:attribute>
- <xsl:value-of select="secondaryie"/>
- <xsl:element name="text:tab-stop"/>
- </xsl:element>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="note">
- <office:annotation>
- <text:p>
- <xsl:apply-templates/>
- </text:p>
- </office:annotation>
- </xsl:template>
-
-
- <xsl:template match="imageobject">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="textobject"/>
-
-
- <xsl:template match="caption">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="imagedata">
- <xsl:element name="draw:image">
- <xsl:attribute name="draw:style-name">
- <xsl:text>fr1</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="draw:name"/>
- <xsl:attribute name="text:anchor-type"/>
- <xsl:attribute name="draw:z-index"/>
- <xsl:attribute name="xlink:href">
- <xsl:value-of select="@fileref"/>
- </xsl:attribute>
- <xsl:attribute name="xlink:type"/>
- <xsl:attribute name="svg:width">
- <!--<xsl:value-of select="@width"/>-->
-
- <xsl:text>1cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="svg:height">
- <xsl:text>1cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:show">
- <xsl:text>embed</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:actuate">
- <xsl:text>onLoad</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="draw:filter-name">
- <xsl:text disable-output-escaping="yes">&lt;All formats&gt;</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="audioobject">
- <xsl:element name="draw:plugin">
- <xsl:attribute name="draw:style-name">
- <xsl:text>fr1</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="draw:name"/>
- <xsl:attribute name="text:anchor-type"/>
- <xsl:attribute name="draw:z-index"/>
- <xsl:attribute name="xlink:href">
- <xsl:value-of select="@fileref"/>
- </xsl:attribute>
- <xsl:attribute name="xlink:type"/>
- <xsl:attribute name="svg:width">
- <!--<xsl:value-of select="@width"/>-->
-
- <xsl:text>1cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="svg:height">
- <xsl:text>1cm</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:show">
- <xsl:text>embed</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="xlink:actuate">
- <xsl:text>onLoad</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="draw:filter-name">
- <xsl:text disable-output-escaping="yes">&lt;All formats&gt;</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="remark">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="mediaobject">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">
- <xsl:text>Mediaobject</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="superscript">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">
- <xsl:text>SuperScript</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="subscript">
- <xsl:element name="text:span">
- <xsl:attribute name="text:style-name">
- <xsl:text>SubScript</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="comment()">
- <xsl:element name="text:p">
- <xsl:attribute name="text:style-name">XMLComment</xsl:attribute>
- <xsl:value-of select="."/>
- </xsl:element>
- </xsl:template>
-</xsl:stylesheet>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/literallayout.java b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/literallayout.java
deleted file mode 100644
index c2dbc2396d94..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/literallayout.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-package org.openoffice.xmerge.converter.xml.xslt.docbook;
-import java.lang.String;
-
-
-public class literallayout{
-
- public static String RemoveSpaces(String test){
- System.out.println("\nWorking... Length=" +test.length());
- int i=0;
- int paraBreak=10000;
- String result="";
- char data[]={10};
- char tab[]={13};
- if(test!=null){
- String strArr[]= test.split(new String(data));
- test="";
-
- while (i< strArr.length ){
- //System.out.println("Trying "+ i);
-
- if (test.length()+strArr[i].length()> paraBreak){
- test=test.concat("</text:p><text:p text:style-name=\"Preformatted Text\" text:name=\"Preformatted Text\">");
- paraBreak+=10000;
- }
- strArr[i]=needsMask(strArr[i]).concat("<text:line-break/>");
- strArr[i]=needsSecondMask(strArr[i]);
- test=test.concat(strArr[i]);
- i++;
- }
-
- System.out.println(test.length());
-
- }
- else{
- test="";
- }
- System.out.println("\nDone");
- return test;
- }
-
- public static String needsMask(String origString){
- if (origString.indexOf("&")!=-1){
- origString=replaceStr(origString,"&","&amp;");
- }
- if (origString.indexOf("\"")!=-1){
- origString=replaceStr(origString,"\"","&quot;");
- }
- if (origString.indexOf("<")!=-1){
- origString=replaceStr(origString,"<","&lt;");
- }
- if (origString.indexOf(">")!=-1){
- origString=replaceStr(origString,">","&gt;");
- }
- return origString;
-
- }
-
- public static String needsSecondMask(String origString){
- char data[]={10};
- char tab[]={9};
- if (origString.indexOf(" ")!=-1){
- origString=replaceStr(origString," "," <text:s/>");
- }
- if (origString.indexOf(new String(tab))!=-1){
- origString=replaceStr(origString,new String(tab),"<text:tab-stop/>");
- }
-
- return origString;
-
- }
-
- public static String replaceStr(String origString, String origChar, String replaceChar){
- String tmp="";
- int index=origString.indexOf(origChar);
- if(index !=-1){
- while (index !=-1){
- String first =origString.substring(0,index);
- first=first.concat(replaceChar);
- tmp=tmp.concat(first);
- origString=origString.substring(index+1,origString.length());
- index=origString.indexOf(origChar);
- if(index==-1) {
- tmp=tmp.concat(origString);
- }
-
- }
-
- }
- return tmp;
- }
-
-
- private static String replace(String test){
- int i=0;
- String result="";
- if (test.indexOf(" ",i)!=-1){
- while (test.indexOf(" ",i)!=-1){
- result=result.concat(test.substring(0,test.indexOf(" ",i)));
- result=result.concat(" <text:s/>");
- i=test.indexOf(" ",i)+2;
- }
- return result;
- }
- else{
- return test;
- }
- }
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_article.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_article.xsl
deleted file mode 100644
index 649869eca225..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_article.xsl
+++ /dev/null
@@ -1,848 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<xsl:stylesheet version="1.0" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:office="http://openoffice.org/2000/office" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:class="text" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="office meta table number dc fo xlink chart math script xsl draw svg dr3d form config text style">
-
- <xsl:key name='headchildren' match="text:p | text:alphabetical-index | table:table | text:span | text:ordered-list | office:annotation | text:unordered-list | text:footnote | text:a | text:list-item | draw:plugin | draw:text-box | text:footnote-body | text:section"
- use="generate-id((..|preceding-sibling::text:h[@text:level='1']|preceding-sibling::text:h[@text:level='2']|preceding-sibling::text:h[@text:level='3']|preceding-sibling::text:h[@text:level='4']|preceding-sibling::text:h[@text:level='5'])[last()])"/>
-
- <xsl:key name="children" match="text:h[@text:level='2']"
- use="generate-id(preceding-sibling::text:h[@text:level='1'][1])"/>
-
- <xsl:key name="children" match="text:h[@text:level='3']"
- use="generate-id(preceding-sibling::text:h[@text:level='2' or @text:level='1'][1])"/>
-
- <xsl:key name="children" match="text:h[@text:level='4']"
- use="generate-id(preceding-sibling::text:h[@text:level='3' or @text:level='2' or @text:level='1'][1])"/>
-
- <xsl:key name="children" match="text:h[@text:level='5']"
- use="generate-id(preceding-sibling::text:h[@text:level='4' or @text:level='3' or @text:level='2' or @text:level='1'][1])"/>
-
- <xsl:key name="secondary_children" match="text:p[@text:style-name = 'Index 2']"
- use="generate-id(preceding-sibling::text:p[@text:style-name = 'Index 1'][1])"/>
-
-<!-- -->
- <xsl:template match="/office:document">
- <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
- </xsl:text>
- <xsl:for-each select="descendant::text:variable-decl">
- <xsl:variable name="name"><xsl:value-of select="@text:name"/></xsl:variable>
- <xsl:if test="contains(@text:name,'entitydecl')">
- <xsl:text disable-output-escaping="yes">&lt;!ENTITY </xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text> "</xsl:text><xsl:value-of select="/descendant::text:variable-set[@text:name= $name][1]"/><xsl:text disable-output-escaping="yes">"&gt;</xsl:text>
- </xsl:if>
- </xsl:for-each>
-
- <xsl:text disable-output-escaping="yes">]&gt;</xsl:text>
- <article>
- <xsl:attribute name="lang">
- <xsl:value-of select="/office:document/office:meta/dc:language"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </article>
- </xsl:template>
-
-
- <xsl:template match="text:section">
- <xsl:choose>
- <xsl:when test="@text:name='ArticleInfo'">
- <articleinfo>
- <xsl:apply-templates/>
- </articleinfo>
- </xsl:when>
- <xsl:when test="@text:name='Abstract'">
- <abstract>
- <xsl:apply-templates/>
- </abstract>
- </xsl:when>
- <xsl:when test="@text:name='Appendix'">
- <appendix>
- <xsl:apply-templates/>
- </appendix>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="sectvar"><xsl:text>sect</xsl:text><xsl:value-of select="count(ancestor::text:section)+1"/></xsl:variable>
- <xsl:variable name="idvar"><xsl:text> id="</xsl:text><xsl:value-of select="@text:name"/><xsl:text>"</xsl:text></xsl:variable>
- <xsl:text disable-output-escaping="yes">&lt;</xsl:text><xsl:value-of select="$sectvar"/><xsl:value-of select="$idvar"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>
- <xsl:apply-templates/>
- <xsl:text disable-output-escaping="yes">&lt;/</xsl:text><xsl:value-of select="$sectvar"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>
- </xsl:otherwise>
-</xsl:choose>
-
- </xsl:template>
-
- <xsl:template match="text:h[@text:level=&apos;1&apos;]">
- <xsl:choose>
- <xsl:when test=".=&apos;Abstract&apos;">
- <abstract>
- <xsl:apply-templates select="key(&apos;headchildren&apos;, generate-id())"/>
- <xsl:apply-templates select="key(&apos;children&apos;, generate-id())"/>
- </abstract>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="make-section">
- <xsl:with-param name="current" select="@text:level"/>
- <xsl:with-param name="prev" select="1"/>
- </xsl:call-template>
- <!--<sect1>
- <title>
- <xsl:apply-templates/>
- </title>
- <xsl:apply-templates select="key('headchildren', generate-id())"/>
- <xsl:apply-templates select="key('children', generate-id())"/>
- </sect1>-->
-
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:h[@text:level=&apos;2&apos;] | text:h[@text:level=&apos;3&apos;]| text:h[@text:level=&apos;4&apos;] | text:h[@text:level=&apos;5&apos;]">
- <xsl:variable name="level" select="@text:level"/>
- <xsl:call-template name="make-section">
- <xsl:with-param name="current" select="$level"/>
- <xsl:with-param name="prev" select="preceding-sibling::text:h[@text:level &lt; $level][1]/@text:level "/>
- </xsl:call-template>
- </xsl:template>
-
-
- <xsl:template name="make-section">
- <xsl:param name="current"/>
- <xsl:param name="prev"/>
- <xsl:choose>
- <xsl:when test="$current &gt; $prev+1">
- <xsl:variable name="sect.element">
- <xsl:text disable-output-escaping="yes">sect</xsl:text>
- <xsl:value-of select="$prev +1"/>
- </xsl:variable>
- <!--<xsl:text disable-output-escaping="yes">&lt;sect</xsl:text><xsl:value-of select="$prev +1"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- <xsl:element name="{$sect.element}">
- <xsl:call-template name="id.attribute"/>
- <title/>
- <xsl:call-template name="make-section">
- <xsl:with-param name="current" select="$current"/>
- <xsl:with-param name="prev" select="$prev +1"/>
- </xsl:call-template>
- <!--<xsl:text disable-output-escaping="yes">&lt;/sect</xsl:text><xsl:value-of select="$prev +1 "/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="sect.element">
- <xsl:text disable-output-escaping="yes">sect</xsl:text>
- <xsl:value-of select="$current"/>
- </xsl:variable>
- <!--<xsl:text disable-output-escaping="yes">&lt;sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- <xsl:element name="{$sect.element}">
- <xsl:call-template name="id.attribute"/>
- <title>
- <xsl:apply-templates/>
- </title>
- <xsl:apply-templates select="key(&apos;headchildren&apos;, generate-id())"/>
- <xsl:apply-templates select="key(&apos;children&apos;, generate-id())"/>
- <!--<xsl:text disable-output-escaping="yes">&lt;/sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match="text:variable-set|text:variable-get">
- <xsl:choose>
- <xsl:when test="contains(@text:name,'entitydecl')">
- <xsl:text disable-output-escaping="yes">&amp;</xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text disable-output-escaping="yes">;</xsl:text>
- </xsl:when>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name='XMLComment']">
- <xsl:comment>
- <xsl:value-of select="."/>
- </xsl:comment>
- </xsl:template>
-
- <xsl:template match="text:section[@text:name = 'ArticleInfo']/text:p[not(@text:style-name='XMLComment')]">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match="text:p">
- <!--text:span text:style-name="XrefLabel" -->
- <!--<xsl:if test="not( child::text:span[@text:style-name = 'XrefLabel'] )"> -->
-
- <xsl:element name="para">
- <xsl:if test="child::text:reference-mark-start">
- <xsl:value-of select="."/>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- <!-- </xsl:if> -->
-
- </xsl:template>
-
-
- <xsl:template match="office:meta">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="text:ordered-list">
- <orderedlist>
- <xsl:apply-templates/>
- </orderedlist>
- </xsl:template>
-
- <xsl:template match="meta:editing-cycles"/>
-
- <xsl:template match="meta:user-defined"/>
-
- <xsl:template match="meta:editing-duration"/>
-
- <xsl:template match="dc:language"/>
-
- <xsl:template match="dc:date">
- <!--<pubdate>
- <xsl:value-of select="substring-before(.,'T')"/>
- </pubdate>-->
- </xsl:template>
-
- <xsl:template match="meta:creation-date"/>
-
- <xsl:template match="office:body">
- <xsl:apply-templates select="key(&apos;headchildren&apos;, generate-id())"/>
- <xsl:apply-templates select="text:h[@text:level=&apos;1&apos;]"/>
- <!--<xsl:apply-templates/>-->
- </xsl:template>
-
- <xsl:template match="office:styles">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match="office:script"/>
-
- <xsl:template match="office:settings"/>
-
- <xsl:template match="office:font-decls"/>
-
- <xsl:template match="text:bookmark-start">
- <xsl:text disable-output-escaping="yes">&lt;</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text><xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="text:bookmark-end">
- <xsl:text disable-output-escaping="yes">&lt;/</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text><xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name='Document Title']">
- <xsl:element name="title">
- <xsl:apply-templates />
- </xsl:element>
- </xsl:template>
-
-<xsl:template match="text:p[@text:style-name='Document SubTitle']">
-</xsl:template>
-
- <xsl:template match="text:p[@text:style-name=&apos;Document SubTitle&apos;]"/>
-
- <xsl:template match="text:p[@text:style-name=&apos;Section Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
- <xsl:template match="text:p[@text:style-name=&apos;Appendix Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;VarList Item&apos;]">
- <xsl:if test="not(preceding-sibling::text:p[@text:style-name=&apos;VarList Item&apos;])">
- <xsl:text disable-output-escaping="yes">&lt;listitem&gt;</xsl:text>
- </xsl:if>
- <para>
- <xsl:apply-templates/>
- </para>
- <xsl:if test="not(following-sibling::text:p[@text:style-name=&apos;VarList Item&apos;])">
- <xsl:text disable-output-escaping="yes">&lt;/listitem&gt;</xsl:text>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;VarList Term&apos;]">
- <term>
- <xsl:apply-templates/>
- </term>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Section1 Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Section2 Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Section3 Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:footnote-citation"/>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Mediaobject&apos;]">
- <mediaobject>
- <xsl:apply-templates/>
- </mediaobject>
- </xsl:template>
-
-
- <xsl:template match="office:annotation/text:p">
- <note>
- <remark>
- <xsl:apply-templates/>
- </remark>
- </note>
- </xsl:template>
- <!--<xsl:template match="meta:initial-creator">
- <author>
- <xsl:apply-templates />
- </author>
- </xsl:template>-->
-
- <xsl:template match="table:table">
- <xsl:choose>
- <xsl:when test="following-sibling::text:p[@text:style-name=&apos;Table&apos;]">
- <table frame="all">
- <xsl:attribute name="id">
- <xsl:value-of select="@table:name"/>
- </xsl:attribute>
- <title>
- <xsl:value-of select="following-sibling::text:p[@text:style-name=&apos;Table&apos;]"/>
- </title>
- <xsl:call-template name="generictable"/>
- </table>
- </xsl:when>
- <xsl:otherwise>
- <informaltable frame="all">
- <xsl:call-template name="generictable"/>
- </informaltable>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template name="generictable">
- <xsl:variable name="cells" select="count(descendant::table:table-cell)"/>
- <xsl:variable name="rows">
- <xsl:value-of select="count(descendant::table:table-row) "/>
- </xsl:variable>
- <xsl:variable name="cols">
- <xsl:value-of select="$cells div $rows"/>
- </xsl:variable>
- <xsl:variable name="numcols">
- <xsl:choose>
- <xsl:when test="child::table:table-column/@table:number-columns-repeated">
- <xsl:value-of select="number(table:table-column/@table:number-columns-repeated+1)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$cols"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:element name="tgroup">
- <xsl:attribute name="cols">
- <xsl:value-of select="$numcols"/>
- </xsl:attribute>
- <xsl:call-template name="colspec">
- <xsl:with-param name="left" select="1"/>
- </xsl:call-template>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template name="colspec">
- <xsl:param name="left"/>
- <xsl:if test="number($left &lt; ( table:table-column/@table:number-columns-repeated +2) )">
- <xsl:element name="colspec">
- <xsl:attribute name="colnum">
- <xsl:value-of select="$left"/>
- </xsl:attribute>
- <xsl:attribute name="colname">c
- <xsl:value-of select="$left"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:call-template name="colspec">
- <xsl:with-param name="left" select="$left+1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="table:table-column">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="table:table-header-rows">
- <thead>
- <xsl:apply-templates/>
- </thead>
- </xsl:template>
-
-
- <xsl:template match="table:table-header-rows/table:table-row">
- <row>
- <xsl:apply-templates/>
- </row>
- </xsl:template>
-
-
- <xsl:template match="table:table/table:table-row">
- <xsl:if test="not(preceding-sibling::table:table-row)">
- <xsl:text disable-output-escaping="yes">&lt;tbody&gt;</xsl:text>
- </xsl:if>
- <row>
- <xsl:apply-templates/>
- </row>
- <xsl:if test="not(following-sibling::table:table-row)">
- <xsl:text disable-output-escaping="yes">&lt;/tbody&gt;</xsl:text>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="table:table-cell">
- <xsl:element name="entry">
- <xsl:if test="@table:number-columns-spanned &gt;&apos;1&apos;">
- <xsl:attribute name="namest">
- <xsl:value-of select="concat(&apos;c&apos;,count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+1)"/>
- </xsl:attribute>
- <xsl:attribute name="nameend">
- <xsl:value-of select="concat(&apos;c&apos;,count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+ @table:number-columns-spanned)"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:p">
- <xsl:choose>
- <xsl:when test="@text:style-name=&apos;Table&apos;"/>
- <xsl:otherwise>
- <xsl:if test="not( child::text:span[@text:style-name = &apos;XrefLabel&apos;] )">
- <para>
- <xsl:call-template name="id.attribute"/>
- <xsl:apply-templates/>
- </para>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:unordered-list">
- <xsl:choose>
- <xsl:when test="@text:style-name=&apos;Var List&apos;">
- <variablelist>
- <xsl:apply-templates/>
- </variablelist>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;UnOrdered List&apos;">
- <variablelist>
- <xsl:apply-templates/>
- </variablelist>
- </xsl:when>
- <xsl:otherwise>
- <itemizedlist>
- <title/>
- <xsl:apply-templates/>
- </itemizedlist>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:list-item">
- <xsl:if test="parent::text:unordered-list/@text:style-name=&apos;Var List&apos;">
- <varlistentry>
- <xsl:for-each select="text:p[@text:style-name=&apos;VarList Term&apos;]">
- <xsl:apply-templates select="."/>
- </xsl:for-each>
- </varlistentry>
- </xsl:if>
- <xsl:if test="not(parent::text:unordered-list/@text:style-name=&apos;Var List&apos;)">
- <listitem>
- <xsl:apply-templates/>
- </listitem>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="dc:title"/>
-
-
- <xsl:template match="dc:description">
- <abstract>
- <para>
- <xsl:apply-templates/>
- </para>
- </abstract>
- </xsl:template>
-
-
- <xsl:template match="dc:subject"/>
-
- <xsl:template match="meta:generator"/>
-
- <xsl:template match="draw:plugin">
- <xsl:element name="audioobject">
- <xsl:attribute name="fileref">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:attribute name="width"/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:footnote">
- <footnote>
- <xsl:apply-templates/>
- </footnote>
- </xsl:template>
-
-
- <xsl:template match="text:footnote-body">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match="draw:text-box"/>
-
- <xsl:template match="draw:image">
- <xsl:choose>
- <xsl:when test="parent::text:p[@text:style-name=&apos;Mediaobject&apos;]">
- <xsl:element name="imageobject">
- <xsl:element name="imagedata">
- <xsl:attribute name="fileref">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="caption">
- <xsl:value-of select="."/>
- </xsl:element>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="inlinegraphic">
- <xsl:attribute name="fileref">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:attribute name="width"/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:span">
- <xsl:choose>
- <xsl:when test="./@text:style-name=&apos;GuiMenu&apos;">
- <xsl:element name="guimenu">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="./@text:style-name=&apos;GuiSubMenu&apos;">
- <xsl:element name="guisubmenu">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiMenuItem&apos;">
- <xsl:element name="guimenuitem">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiButton&apos;">
- <xsl:element name="guibutton">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiButton&apos;">
- <xsl:element name="guibutton">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiLabel&apos;">
- <xsl:element name="guilabel">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Emphasis&apos;">
- <xsl:element name="emphasis">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
-<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 4th, 2003 -->
- <xsl:when test="@text:style-name='Emphasis Bold'">
- <xsl:element name="emphasis">
- <xsl:attribute name = "role" >
- <xsl:text>bold</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
-<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 16th, 2003 -->
- <xsl:when test="@text:style-name=&apos;Citation&apos;">
- <xsl:element name="quote">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;FileName&apos;">
- <xsl:element name="filename">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Application&apos;">
- <xsl:element name="application">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Command&apos;">
- <command>
- <xsl:apply-templates/>
- </command>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;SubScript&apos;">
- <subscript>
- <xsl:apply-templates/>
- </subscript>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;SuperScript&apos;">
- <superscript>
- <xsl:apply-templates/>
- </superscript>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;SystemItem&apos;">
- <systemitem>
- <xsl:apply-templates/>
- </systemitem>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;ComputerOutput&apos;">
- <computeroutput>
- <xsl:apply-templates/>
- </computeroutput>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Highlight&apos;">
- <highlight>
- <xsl:apply-templates/>
- </highlight>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;KeyCap&apos;">
- <keycap>
- <xsl:apply-templates/>
- </keycap>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;KeySym&apos;">
- <xsl:element name="keysym">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;KeyCombo&apos;">
- <keycombo>
- <xsl:apply-templates/>
- </keycombo>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:a">
- <xsl:choose>
- <xsl:when test="contains(@xlink:href,&apos;://&apos;)">
- <xsl:element name="ulink">
- <xsl:attribute name="url">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="not(contains(@xlink:href,&apos;#&apos;))">
- <xsl:element name="olink">
- <xsl:attribute name="targetdocent">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="linkvar" select="substring-after(@xlink:href,&apos;#&apos;)"/>
- <xsl:element name="link">
- <xsl:attribute name="linkend">
- <xsl:value-of select="substring-before($linkvar,&apos;%&apos;)"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:line-break">
- <xsl:text disable-output-escaping="yes"/>
- </xsl:template>
-
-
- <xsl:template match="text:tab-stop">
- <xsl:text disable-output-escaping="yes"/>
- </xsl:template>
- <!-- @endterm not retained due to problems with OOo method of displaying text in the reference-ref -->
-
- <xsl:template match="text:reference-ref">
- <xsl:element name="xref">
- <xsl:attribute name="linkend">
- <xsl:value-of select="@text:ref-name"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template name="id.attribute">
- <xsl:if test="child::text:reference-mark-start">
- <xsl:attribute name="id">
- <xsl:value-of select="child::text:reference-mark-start/@text:name"/>
- </xsl:attribute>
- </xsl:if>
- <!-- Constraints imposed by OOo method of displaying reference-ref text means that xreflabel and endterm are lost -->
- <!--<xsl:if test="child::text:p/text:span[@text:style-name = 'XrefLabel']">
- <xsl:attribute name="xreflabel">
- <xsl:value-of select="text:p/text:span"/>
- </xsl:attribute>
- </xsl:if> -->
-
- </xsl:template>
- <!--
- <text:h text:level="1">Part One Title
- <text:reference-mark-start text:name="part"/>
- <text:p text:style-name="Text body">
- <text:span text:style-name="XrefLabel">xreflabel_part</text:span>
- </text:p>
- <text:reference-mark-end text:name="part"/>
- </text:h>
--->
- <!--<xsl:template match="text:p/text:span[@text:style-name = 'XrefLabel']"/>-->
-
- <xsl:template match="text:reference-mark-start"/>
-
- <xsl:template match="text:reference-mark-end"/>
-
- <xsl:template match="comment">
- <xsl:comment>
- <xsl:value-of select="."/>
- </xsl:comment>
- </xsl:template>
-
-
- <xsl:template match="text:alphabetical-index-mark-start">
- <xsl:element name="indexterm">
- <xsl:attribute name="class">
- <xsl:text disable-output-escaping="yes">startofrange</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="id">
- <xsl:value-of select="@text:id"/>
- </xsl:attribute>
- <!--<xsl:if test="@text:key1">-->
-
- <xsl:element name="primary">
- <xsl:value-of select="@text:key1"/>
- </xsl:element>
- <!--</xsl:if>-->
-
- <xsl:if test="@text:key2">
- <xsl:element name="secondary">
- <xsl:value-of select="@text:key2"/>
- </xsl:element>
- </xsl:if>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:alphabetical-index-mark-end">
- <xsl:element name="indexterm">
- <xsl:attribute name="startref">
- <xsl:value-of select="@text:id"/>
- </xsl:attribute>
- <xsl:attribute name="class">
- <xsl:text disable-output-escaping="yes">endofrange</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:alphabetical-index">
- <xsl:element name="index">
- <xsl:element name="title">
- <xsl:value-of select="text:index-body/text:index-title/text:p"/>
- </xsl:element>
- <xsl:apply-templates select="text:index-body"/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:index-body">
- <xsl:for-each select="text:p[@text:style-name = &apos;Index 1&apos;]">
- <xsl:element name="indexentry">
- <xsl:element name="primaryie">
- <xsl:value-of select="."/>
- </xsl:element>
- <xsl:if test="key(&apos;secondary_children&apos;, generate-id())">
- <xsl:element name="secondaryie">
- <xsl:value-of select="key(&apos;secondary_children&apos;, generate-id())"/>
- </xsl:element>
- </xsl:if>
- </xsl:element>
- </xsl:for-each>
- </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_chapter.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_chapter.xsl
deleted file mode 100644
index efb03f0a741c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/docbook/sofftodocbookheadings_chapter.xsl
+++ /dev/null
@@ -1,858 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<xsl:stylesheet version="1.0" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:office="http://openoffice.org/2000/office" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" xmlns:config="http://openoffice.org/2001/config" office:class="text" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="office meta table number dc fo xlink chart math script xsl draw svg dr3d form config text style">
-
- <xsl:key name='headchildren' match="text:p | text:alphabetical-index | table:table | text:span | text:ordered-list | office:annotation | text:unordered-list | text:footnote | text:a | text:list-item | draw:plugin | draw:text-box | text:footnote-body | text:section"
- use="generate-id((..|preceding-sibling::text:h[@text:level='1']|preceding-sibling::text:h[@text:level='2']|preceding-sibling::text:h[@text:level='3']|preceding-sibling::text:h[@text:level='4']|preceding-sibling::text:h[@text:level='5'])[last()])"/>
-
- <xsl:key name="children" match="text:h[@text:level='2']"
- use="generate-id(preceding-sibling::text:h[@text:level='1'][1])"/>
-
- <xsl:key name="children" match="text:h[@text:level='3']"
- use="generate-id(preceding-sibling::text:h[@text:level='2' or @text:level='1'][1])"/>
-
- <xsl:key name="children" match="text:h[@text:level='4']"
- use="generate-id(preceding-sibling::text:h[@text:level='3' or @text:level='2' or @text:level='1'][1])"/>
-
- <xsl:key name="children" match="text:h[@text:level='5']"
- use="generate-id(preceding-sibling::text:h[@text:level='4' or @text:level='3' or @text:level='2' or @text:level='1'][1])"/>
-
- <xsl:key name="secondary_children" match="text:p[@text:style-name = 'Index 2']"
- use="generate-id(preceding-sibling::text:p[@text:style-name = 'Index 1'][1])"/>
-
-<!-- -->
- <xsl:template match="/office:document">
- <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
- </xsl:text>
- <xsl:for-each select="descendant::text:variable-decl">
- <xsl:variable name="name"><xsl:value-of select="@text:name"/></xsl:variable>
- <xsl:if test="contains(@text:name,'entitydecl')">
- <xsl:text disable-output-escaping="yes">&lt;!ENTITY </xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text> "</xsl:text><xsl:value-of select="/descendant::text:variable-set[@text:name= $name][1]"/><xsl:text disable-output-escaping="yes">"&gt;</xsl:text>
- </xsl:if>
- </xsl:for-each>
-
- <xsl:text disable-output-escaping="yes">]&gt;</xsl:text>
- <chapter>
- <xsl:attribute name="lang">
- <xsl:value-of select="/office:document/office:meta/dc:language"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </chapter>
- </xsl:template>
-
-
- <xsl:template match="text:section">
- <xsl:choose>
- <xsl:when test="@text:name='ChapterInfo'">
- <chapterinfo>
- <xsl:apply-templates/>
- </chapterinfo>
- </xsl:when>
- <xsl:when test="@text:name='Abstract'">
- <abstract>
- <xsl:apply-templates/>
- </abstract>
- </xsl:when>
- <xsl:when test="@text:name='Appendix'">
- <appendix>
- <xsl:apply-templates/>
- </appendix>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="sectvar"><xsl:text>sect</xsl:text><xsl:value-of select="count(ancestor::text:section)+1"/></xsl:variable>
- <xsl:variable name="idvar"><xsl:text> id="</xsl:text><xsl:value-of select="@text:name"/><xsl:text>"</xsl:text></xsl:variable>
- <xsl:text disable-output-escaping="yes">&lt;</xsl:text><xsl:value-of select="$sectvar"/><xsl:value-of select="$idvar"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>
- <xsl:apply-templates/>
- <xsl:text disable-output-escaping="yes">&lt;/</xsl:text><xsl:value-of select="$sectvar"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>
- </xsl:otherwise>
-</xsl:choose>
-
- </xsl:template>
-
- <xsl:template match="text:h[@text:level=&apos;1&apos;]">
- <xsl:choose>
- <xsl:when test=".=&apos;Abstract&apos;">
- <abstract>
- <xsl:apply-templates select="key(&apos;headchildren&apos;, generate-id())"/>
- <xsl:apply-templates select="key(&apos;children&apos;, generate-id())"/>
- </abstract>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="make-section">
- <xsl:with-param name="current" select="@text:level"/>
- <xsl:with-param name="prev" select="1"/>
- </xsl:call-template>
- <!--<sect1>
- <title>
- <xsl:apply-templates/>
- </title>
- <xsl:apply-templates select="key('headchildren', generate-id())"/>
- <xsl:apply-templates select="key('children', generate-id())"/>
- </sect1>-->
-
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:h[@text:level=&apos;2&apos;] | text:h[@text:level=&apos;3&apos;]| text:h[@text:level=&apos;4&apos;] | text:h[@text:level=&apos;5&apos;]">
- <xsl:variable name="level" select="@text:level"/>
- <xsl:call-template name="make-section">
- <xsl:with-param name="current" select="$level"/>
- <xsl:with-param name="prev" select="preceding-sibling::text:h[@text:level &lt; $level][1]/@text:level "/>
- </xsl:call-template>
- </xsl:template>
-
-
- <xsl:template name="make-section">
- <xsl:param name="current"/>
- <xsl:param name="prev"/>
- <xsl:choose>
- <xsl:when test="$current &gt; $prev+1">
- <xsl:variable name="sect.element">
- <xsl:text disable-output-escaping="yes">sect</xsl:text>
- <xsl:value-of select="$prev +1"/>
- </xsl:variable>
- <!--<xsl:text disable-output-escaping="yes">&lt;sect</xsl:text><xsl:value-of select="$prev +1"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- <xsl:element name="{$sect.element}">
- <xsl:call-template name="id.attribute"/>
- <title/>
- <xsl:call-template name="make-section">
- <xsl:with-param name="current" select="$current"/>
- <xsl:with-param name="prev" select="$prev +1"/>
- </xsl:call-template>
- <!--<xsl:text disable-output-escaping="yes">&lt;/sect</xsl:text><xsl:value-of select="$prev +1 "/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="sect.element">
- <xsl:text disable-output-escaping="yes">sect</xsl:text>
- <xsl:value-of select="$current"/>
- </xsl:variable>
- <!--<xsl:text disable-output-escaping="yes">&lt;sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- <xsl:element name="{$sect.element}">
- <xsl:call-template name="id.attribute"/>
- <title>
- <xsl:apply-templates/>
- </title>
- <xsl:apply-templates select="key(&apos;headchildren&apos;, generate-id())"/>
- <xsl:apply-templates select="key(&apos;children&apos;, generate-id())"/>
- <!--<xsl:text disable-output-escaping="yes">&lt;/sect</xsl:text><xsl:value-of select="$current"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text>-->
-
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match="text:variable-set">
- <xsl:choose>
- <xsl:when test="contains(@text:name,'entitydecl')">
- <xsl:text disable-output-escaping="yes">&amp;</xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text disable-output-escaping="yes">;</xsl:text>
- </xsl:when>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match="text:variable-get">
- <xsl:choose>
- <xsl:when test="contains(@text:name,'entitydecl')">
- <xsl:text disable-output-escaping="yes">&amp;</xsl:text><xsl:value-of select="substring-after(@text:name,'entitydecl_')"/><xsl:text disable-output-escaping="yes">;</xsl:text>
- </xsl:when>
- </xsl:choose>
- </xsl:template>
-
-
-
-
- <xsl:template match="text:p[@text:style-name='XMLComment']">
- <xsl:comment>
- <xsl:value-of select="."/>
- </xsl:comment>
- </xsl:template>
-
- <xsl:template match="text:section[@text:name = 'ChapterInfo']/text:p[not(@text:style-name='XMLComment')]">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match="text:p">
- <!--text:span text:style-name="XrefLabel" -->
- <!--<xsl:if test="not( child::text:span[@text:style-name = 'XrefLabel'] )"> -->
-
- <xsl:element name="para">
- <xsl:if test="child::text:reference-mark-start">
- <xsl:value-of select="."/>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- <!-- </xsl:if> -->
-
- </xsl:template>
-
-
- <xsl:template match="office:meta">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="text:ordered-list">
- <orderedlist>
- <xsl:apply-templates/>
- </orderedlist>
- </xsl:template>
-
- <xsl:template match="meta:editing-cycles"/>
-
- <xsl:template match="meta:user-defined"/>
-
- <xsl:template match="meta:editing-duration"/>
-
- <xsl:template match="dc:language"/>
-
- <xsl:template match="dc:date">
- <!--<pubdate>
- <xsl:value-of select="substring-before(.,'T')"/>
- </pubdate>-->
- </xsl:template>
-
- <xsl:template match="meta:creation-date"/>
-
- <xsl:template match="office:body">
- <xsl:apply-templates select="key(&apos;headchildren&apos;, generate-id())"/>
- <xsl:apply-templates select="text:h[@text:level=&apos;1&apos;]"/>
- <!--<xsl:apply-templates/>-->
- </xsl:template>
-
- <xsl:template match="office:styles">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match="office:script"/>
-
- <xsl:template match="office:settings"/>
-
- <xsl:template match="office:font-decls"/>
-
- <xsl:template match="text:bookmark-start">
- <xsl:text disable-output-escaping="yes">&lt;</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text><xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="text:bookmark-end">
- <xsl:text disable-output-escaping="yes">&lt;/</xsl:text><xsl:value-of select="substring-before(@text:name,'_')"/><xsl:text disable-output-escaping="yes">&gt;</xsl:text><xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name='Document Title']">
- <xsl:element name="title">
- <xsl:apply-templates />
- </xsl:element>
- </xsl:template>
-
-<xsl:template match="text:p[@text:style-name='Document SubTitle']">
-</xsl:template>
-
- <xsl:template match="text:p[@text:style-name=&apos;Document SubTitle&apos;]"/>
-
- <xsl:template match="text:p[@text:style-name=&apos;Section Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
- <xsl:template match="text:p[@text:style-name=&apos;Appendix Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;VarList Item&apos;]">
- <xsl:if test="not(preceding-sibling::text:p[@text:style-name=&apos;VarList Item&apos;])">
- <xsl:text disable-output-escaping="yes">&lt;listitem&gt;</xsl:text>
- </xsl:if>
- <para>
- <xsl:apply-templates/>
- </para>
- <xsl:if test="not(following-sibling::text:p[@text:style-name=&apos;VarList Item&apos;])">
- <xsl:text disable-output-escaping="yes">&lt;/listitem&gt;</xsl:text>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;VarList Term&apos;]">
- <term>
- <xsl:apply-templates/>
- </term>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Section1 Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Section2 Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Section3 Title&apos;]">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
-
- <xsl:template match="text:footnote-citation"/>
-
-
- <xsl:template match="text:p[@text:style-name=&apos;Mediaobject&apos;]">
- <mediaobject>
- <xsl:apply-templates/>
- </mediaobject>
- </xsl:template>
-
-
- <xsl:template match="office:annotation/text:p">
- <note>
- <remark>
- <xsl:apply-templates/>
- </remark>
- </note>
- </xsl:template>
- <!--<xsl:template match="meta:initial-creator">
- <author>
- <xsl:apply-templates />
- </author>
- </xsl:template>-->
-
- <xsl:template match="table:table">
- <xsl:choose>
- <xsl:when test="following-sibling::text:p[@text:style-name=&apos;Table&apos;]">
- <table frame="all">
- <xsl:attribute name="id">
- <xsl:value-of select="@table:name"/>
- </xsl:attribute>
- <title>
- <xsl:value-of select="following-sibling::text:p[@text:style-name=&apos;Table&apos;]"/>
- </title>
- <xsl:call-template name="generictable"/>
- </table>
- </xsl:when>
- <xsl:otherwise>
- <informaltable frame="all">
- <xsl:call-template name="generictable"/>
- </informaltable>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template name="generictable">
- <xsl:variable name="cells" select="count(descendant::table:table-cell)"/>
- <xsl:variable name="rows">
- <xsl:value-of select="count(descendant::table:table-row) "/>
- </xsl:variable>
- <xsl:variable name="cols">
- <xsl:value-of select="$cells div $rows"/>
- </xsl:variable>
- <xsl:variable name="numcols">
- <xsl:choose>
- <xsl:when test="child::table:table-column/@table:number-columns-repeated">
- <xsl:value-of select="number(table:table-column/@table:number-columns-repeated+1)"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$cols"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:element name="tgroup">
- <xsl:attribute name="cols">
- <xsl:value-of select="$numcols"/>
- </xsl:attribute>
- <xsl:call-template name="colspec">
- <xsl:with-param name="left" select="1"/>
- </xsl:call-template>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template name="colspec">
- <xsl:param name="left"/>
- <xsl:if test="number($left &lt; ( table:table-column/@table:number-columns-repeated +2) )">
- <xsl:element name="colspec">
- <xsl:attribute name="colnum">
- <xsl:value-of select="$left"/>
- </xsl:attribute>
- <xsl:attribute name="colname">c
- <xsl:value-of select="$left"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:call-template name="colspec">
- <xsl:with-param name="left" select="$left+1"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="table:table-column">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="table:table-header-rows">
- <thead>
- <xsl:apply-templates/>
- </thead>
- </xsl:template>
-
-
- <xsl:template match="table:table-header-rows/table:table-row">
- <row>
- <xsl:apply-templates/>
- </row>
- </xsl:template>
-
-
- <xsl:template match="table:table/table:table-row">
- <xsl:if test="not(preceding-sibling::table:table-row)">
- <xsl:text disable-output-escaping="yes">&lt;tbody&gt;</xsl:text>
- </xsl:if>
- <row>
- <xsl:apply-templates/>
- </row>
- <xsl:if test="not(following-sibling::table:table-row)">
- <xsl:text disable-output-escaping="yes">&lt;/tbody&gt;</xsl:text>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="table:table-cell">
- <xsl:element name="entry">
- <xsl:if test="@table:number-columns-spanned &gt;&apos;1&apos;">
- <xsl:attribute name="namest">
- <xsl:value-of select="concat(&apos;c&apos;,count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+1)"/>
- </xsl:attribute>
- <xsl:attribute name="nameend">
- <xsl:value-of select="concat(&apos;c&apos;,count(preceding-sibling::table:table-cell[not(@table:number-columns-spanned)]) +sum(preceding-sibling::table:table-cell/@table:number-columns-spanned)+ @table:number-columns-spanned)"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:p">
- <xsl:choose>
- <xsl:when test="@text:style-name=&apos;Table&apos;"/>
- <xsl:otherwise>
- <xsl:if test="not( child::text:span[@text:style-name = &apos;XrefLabel&apos;] )">
- <para>
- <xsl:call-template name="id.attribute"/>
- <xsl:apply-templates/>
- </para>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:unordered-list">
- <xsl:choose>
- <xsl:when test="@text:style-name=&apos;Var List&apos;">
- <variablelist>
- <xsl:apply-templates/>
- </variablelist>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;UnOrdered List&apos;">
- <variablelist>
- <xsl:apply-templates/>
- </variablelist>
- </xsl:when>
- <xsl:otherwise>
- <itemizedlist>
- <title/>
- <xsl:apply-templates/>
- </itemizedlist>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:list-item">
- <xsl:if test="parent::text:unordered-list/@text:style-name=&apos;Var List&apos;">
- <varlistentry>
- <xsl:for-each select="text:p[@text:style-name=&apos;VarList Term&apos;]">
- <xsl:apply-templates select="."/>
- </xsl:for-each>
- </varlistentry>
- </xsl:if>
- <xsl:if test="not(parent::text:unordered-list/@text:style-name=&apos;Var List&apos;)">
- <listitem>
- <xsl:apply-templates/>
- </listitem>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match="dc:title"/>
-
-
- <xsl:template match="dc:description">
- <abstract>
- <para>
- <xsl:apply-templates/>
- </para>
- </abstract>
- </xsl:template>
-
-
- <xsl:template match="dc:subject"/>
-
- <xsl:template match="meta:generator"/>
-
- <xsl:template match="draw:plugin">
- <xsl:element name="audioobject">
- <xsl:attribute name="fileref">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:attribute name="width"/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:footnote">
- <footnote>
- <xsl:apply-templates/>
- </footnote>
- </xsl:template>
-
-
- <xsl:template match="text:footnote-body">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match="draw:text-box"/>
-
- <xsl:template match="draw:image">
- <xsl:choose>
- <xsl:when test="parent::text:p[@text:style-name=&apos;Mediaobject&apos;]">
- <xsl:element name="imageobject">
- <xsl:element name="imagedata">
- <xsl:attribute name="fileref">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:element name="caption">
- <xsl:value-of select="."/>
- </xsl:element>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:element name="inlinegraphic">
- <xsl:attribute name="fileref">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:attribute name="width"/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:span">
- <xsl:choose>
- <xsl:when test="./@text:style-name=&apos;GuiMenu&apos;">
- <xsl:element name="guimenu">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="./@text:style-name=&apos;GuiSubMenu&apos;">
- <xsl:element name="guisubmenu">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiMenuItem&apos;">
- <xsl:element name="guimenuitem">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiButton&apos;">
- <xsl:element name="guibutton">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiButton&apos;">
- <xsl:element name="guibutton">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;GuiLabel&apos;">
- <xsl:element name="guilabel">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Emphasis&apos;">
- <xsl:element name="emphasis">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
-<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 4th, 2003 -->
- <xsl:when test="@text:style-name='Emphasis Bold'">
- <xsl:element name="emphasis">
- <xsl:attribute name = "role" >
- <xsl:text >bold</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
-<!-- Change Made By Kevin Fowlks (fowlks@msu.edu) June 16th, 2003 -->
- <xsl:when test="@text:style-name=&apos;Citation&apos;">
- <xsl:element name="quote">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;FileName&apos;">
- <xsl:element name="filename">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Application&apos;">
- <xsl:element name="application">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Command&apos;">
- <command>
- <xsl:apply-templates/>
- </command>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;SubScript&apos;">
- <subscript>
- <xsl:apply-templates/>
- </subscript>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;SuperScript&apos;">
- <superscript>
- <xsl:apply-templates/>
- </superscript>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;SystemItem&apos;">
- <systemitem>
- <xsl:apply-templates/>
- </systemitem>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;ComputerOutput&apos;">
- <computeroutput>
- <xsl:apply-templates/>
- </computeroutput>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;Highlight&apos;">
- <highlight>
- <xsl:apply-templates/>
- </highlight>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;KeyCap&apos;">
- <keycap>
- <xsl:apply-templates/>
- </keycap>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;KeySym&apos;">
- <xsl:element name="keysym">
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="@text:style-name=&apos;KeyCombo&apos;">
- <keycombo>
- <xsl:apply-templates/>
- </keycombo>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:a">
- <xsl:choose>
- <xsl:when test="contains(@xlink:href,&apos;://&apos;)">
- <xsl:element name="ulink">
- <xsl:attribute name="url">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:when test="not(contains(@xlink:href,&apos;#&apos;))">
- <xsl:element name="olink">
- <xsl:attribute name="targetdocent">
- <xsl:value-of select="@xlink:href"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="linkvar" select="substring-after(@xlink:href,&apos;#&apos;)"/>
- <xsl:element name="link">
- <xsl:attribute name="linkend">
- <xsl:value-of select="substring-before($linkvar,&apos;%&apos;)"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template match="text:line-break">
- <xsl:text disable-output-escaping="yes"/>
- </xsl:template>
-
-
- <xsl:template match="text:tab-stop">
- <xsl:text disable-output-escaping="yes"/>
- </xsl:template>
- <!-- @endterm not retained due to problems with OOo method of displaying text in the reference-ref -->
-
- <xsl:template match="text:reference-ref">
- <xsl:element name="xref">
- <xsl:attribute name="linkend">
- <xsl:value-of select="@text:ref-name"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template name="id.attribute">
- <xsl:if test="child::text:reference-mark-start">
- <xsl:attribute name="id">
- <xsl:value-of select="child::text:reference-mark-start/@text:name"/>
- </xsl:attribute>
- </xsl:if>
- <!-- Constraints imposed by OOo method of displaying reference-ref text means that xreflabel and endterm are lost -->
- <!--<xsl:if test="child::text:p/text:span[@text:style-name = 'XrefLabel']">
- <xsl:attribute name="xreflabel">
- <xsl:value-of select="text:p/text:span"/>
- </xsl:attribute>
- </xsl:if> -->
-
- </xsl:template>
- <!--
- <text:h text:level="1">Part One Title
- <text:reference-mark-start text:name="part"/>
- <text:p text:style-name="Text body">
- <text:span text:style-name="XrefLabel">xreflabel_part</text:span>
- </text:p>
- <text:reference-mark-end text:name="part"/>
- </text:h>
--->
- <!--<xsl:template match="text:p/text:span[@text:style-name = 'XrefLabel']"/>-->
-
- <xsl:template match="text:reference-mark-start"/>
-
- <xsl:template match="text:reference-mark-end"/>
-
- <xsl:template match="comment">
- <xsl:comment>
- <xsl:value-of select="."/>
- </xsl:comment>
- </xsl:template>
-
-
- <xsl:template match="text:alphabetical-index-mark-start">
- <xsl:element name="indexterm">
- <xsl:attribute name="class">
- <xsl:text disable-output-escaping="yes">startofrange</xsl:text>
- </xsl:attribute>
- <xsl:attribute name="id">
- <xsl:value-of select="@text:id"/>
- </xsl:attribute>
- <!--<xsl:if test="@text:key1">-->
-
- <xsl:element name="primary">
- <xsl:value-of select="@text:key1"/>
- </xsl:element>
- <!--</xsl:if>-->
-
- <xsl:if test="@text:key2">
- <xsl:element name="secondary">
- <xsl:value-of select="@text:key2"/>
- </xsl:element>
- </xsl:if>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:alphabetical-index-mark-end">
- <xsl:element name="indexterm">
- <xsl:attribute name="startref">
- <xsl:value-of select="@text:id"/>
- </xsl:attribute>
- <xsl:attribute name="class">
- <xsl:text disable-output-escaping="yes">endofrange</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:alphabetical-index">
- <xsl:element name="index">
- <xsl:element name="title">
- <xsl:value-of select="text:index-body/text:index-title/text:p"/>
- </xsl:element>
- <xsl:apply-templates select="text:index-body"/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match="text:index-body">
- <xsl:for-each select="text:p[@text:style-name = &apos;Index 1&apos;]">
- <xsl:element name="indexentry">
- <xsl:element name="primaryie">
- <xsl:value-of select="."/>
- </xsl:element>
- <xsl:if test="key(&apos;secondary_children&apos;, generate-id())">
- <xsl:element name="secondaryie">
- <xsl:value-of select="key(&apos;secondary_children&apos;, generate-id())"/>
- </xsl:element>
- </xsl:if>
- </xsl:element>
- </xsl:for-each>
- </xsl:template>
-
-</xsl:stylesheet>
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/htmltosoff.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/htmltosoff.xsl
deleted file mode 100644
index baf160c1449e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/htmltosoff.xsl
+++ /dev/null
@@ -1,174 +0,0 @@
-<?xml version='1.0' encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:office="http://openoffice.org/2000/office"
- xmlns:style="http://openoffice.org/2000/style"
- xmlns:text="http://openoffice.org/2000/text"
- xmlns:table="http://openoffice.org/2000/table"
- xmlns:draw="http://openoffice.org/2000/drawing"
- xmlns:fo="http://www.w3.org/1999/XSL/Format"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:number="http://openoffice.org/2000/datastyle"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns:chart="http://openoffice.org/2000/chart"
- xmlns:dr3d="http://openoffice.org/2000/dr3d"
- xmlns:math="http://www.w3.org/1998/Math/MathML"
- xmlns:form="http://openoffice.org/2000/form"
- xmlns:script="http://openoffice.org/2000/script"
- >
-<xsl:output method="xml" />
-
-
-<xsl:template match="/">
- <xsl:apply-templates />
-</xsl:template>
-
-<xsl:template match="html">
-
- <office:document-content xmlns:office="http://openoffice.org/2000/office"
- xmlns:style="http://openoffice.org/2000/style"
- xmlns:text="http://openoffice.org/2000/text"
- xmlns:table="http://openoffice.org/2000/table"
- xmlns:draw="http://openoffice.org/2000/drawing"
- xmlns:fo="http://www.w3.org/1999/XSL/Format"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:number="http://openoffice.org/2000/datastyle"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns:chart="http://openoffice.org/2000/chart"
- xmlns:dr3d="http://openoffice.org/2000/dr3d"
- xmlns:math="http://www.w3.org/1998/Math/MathML"
- xmlns:form="http://openoffice.org/2000/form"
- xmlns:script="http://openoffice.org/2000/script"
- office:class="text" office:version="1.0">
-
-<office:script/>
- <office:font-decls>
- <style:font-decl style:name="Letter Gothic" fo:font-family="&apos;Letter Gothic&apos;" style:font-family-generic="modern" style:font-pitch="fixed"/>
- <style:font-decl style:name="Arial Unicode MS" fo:font-family="&apos;Arial Unicode MS&apos;" style:font-pitch="variable"/>
- <style:font-decl style:name="HG Mincho Light J" fo:font-family="&apos;HG Mincho Light J&apos;" style:font-pitch="variable"/>
- <style:font-decl style:name="CG Times" fo:font-family="&apos;CG Times&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
- <style:font-decl style:name="Thorndale" fo:font-family="Thorndale" style:font-family-generic="roman" style:font-pitch="variable"/>
- <style:font-decl style:name="Antique Olive" fo:font-family="&apos;Antique Olive&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
- <style:font-decl style:name="Arial Black" fo:font-family="&apos;Arial Black&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
- </office:font-decls>
- <office:automatic-styles>
- <style:style style:name="Table1" style:family="table">
- <style:properties style:width="16.999cm" table:align="margins"/>
- </style:style>
- <style:style style:name="Table1.A" style:family="table-column">
- <style:properties style:column-width="3.399cm" style:rel-column-width="13107*"/>
- </style:style>
- <style:style style:name="Table1.A1" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="Table1.E1" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="Table1.A2" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="Table1.E2" style:family="table-cell">
- <style:properties fo:padding="0.097cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="none" fo:border-bottom="0.002cm solid #000000"/>
- </style:style>
- <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
- <style:properties fo:margin-left="0cm" fo:margin-right="0cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
- </style:style>
- <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Table Contents">
- <style:properties style:font-name="Arial Black" fo:font-size="20pt"/>
- </style:style>
- </office:automatic-styles>
-
-
-
-
-
- <office:body>
- <text:sequence-decls>
- <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
- <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
- <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
- <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
- </text:sequence-decls>
-
- <xsl:apply-templates/>
- </office:body>
- </office:document-content>
-
-</xsl:template>
-
-<xsl:template match="body">
- <xsl:apply-templates />
-</xsl:template>
-
-
-
-<xsl:template match="p">
- <xsl:for-each select=".">
- <text:p text:style-name="P1">
- <!--<xsl:value-of select="."/>-->
- <xsl:apply-templates />
- </text:p>
- </xsl:for-each>
-</xsl:template>
-
-<xsl:template match="br">
- <xsl:if test="ancestor::p">
- <xsl:text disable-output-escaping="yes">&lt;/text:p&gt; &lt;text:p text:style-name="P1"&gt;</xsl:text>
- </xsl:if>
-</xsl:template>
-
-<xsl:template match="table">
- <xsl:for-each select=".">
- <table:table table:name="Table1" table:style-name="Table1">
- <table:table-column table:style-name="Table1.A" table:number-columns-repeated="5"/>
- <xsl:apply-templates/>
- </table:table>
- </xsl:for-each>
-</xsl:template>
-
-<xsl:template match="tr">
- <xsl:for-each select=".">
- <table:table-row>
- <xsl:apply-templates/>
- </table:table-row>
- </xsl:for-each>
-</xsl:template>
-
-<xsl:template match="td">
- <xsl:for-each select=".">
- <table:table-cell table:style-name="Table1.A1" table:value-type="string">
- <text:p text:style-name="P1">
- <xsl:value-of select="."/>
- </text:p>
- </table:table-cell>
- </xsl:for-each>
-</xsl:template>
-
-
-
-</xsl:stylesheet>
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/makefile.mk b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/makefile.mk
deleted file mode 100644
index 06e0d14909dc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxcx_xslt
-PRJ=../../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html
deleted file mode 100644
index 0a689fb47cda..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/package.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<HTML>
-<HEAD>
- <TITLE>org.openoffice.xmerge.converter.xml.xslt package</TITLE>
-</HEAD>
-<BODY>
-<P>Provides the tools for doing the conversion of StarWriter XML to
-and from supported formats, through the use of an XSLT
-transformation.</P>
-<P>It follows the {@link org.openoffice.xmerge}
-framework for the conversion process.</P>
-<P>This converter does not currently support merge.</P>
-<P><FONT FACE="Times New Roman, serif"><FONT SIZE=5><B>XSLT
-Transformation</B></FONT></FONT></P>
-<p>The converter makes use
-of one or more XSLT style sheets, which are used in the
-DocumentSerializer and DocumentDeserializer, to perform the actual
-translations. The location of these stylesheets is extracted from the {@link org.openoffice.xmerge.util.registry.ConverterInfo ConverterInfo} data structure, and are specified using the optional converter-xslt-serialize and converter-xsltdeserialize tags in a plugins converter.xml file. Please refer to the SDK document for more information about how to implement a Plugin Configuration XML File for a specific plugin.
-A sample OpenOffice to Html stylesheet and Html to
-Openffice stylesheet, has been provided as a sample implementation.
-The converter also makes use of an XsltPlugin.properties file, which may be edited by the user to provide MIME-TYPE to file extension mappings. This file is used by the {@link org.openoffice.xmerge.converter.xml.xslt.PluginFactoryImpl getDeviceFileExtension} method.
-</p>
-
-<H2>TODO list</H2>
-
-<p><ol>
-<li>Expand XSLT style sheets to support more office/html
- capabilities</li>
-<li>Add support for certain character codes, such as &amp;nbsp
- which currently causes the transformer to break.</li>
-<li>Change the DocumentDeserializer transformer, so that the DOMResult is serialized using the xalan serializer and create an SxwDocument from the result</li>
-</ol></p>
-
-@see org.openoffice.xmerge.util.registry
-
-</BODY>
-</HTML>
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/sofftohtml.xsl b/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/sofftohtml.xsl
deleted file mode 100644
index 761a66a3f6e4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/sofftohtml.xsl
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:style="http://openoffice.org/2000/style" xmlns:table="http://openoffice.org/2000/table" xmlns:text="http://openoffice.org/2000/text" xmlns:office="http://openoffice.org/2000/office" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="ISO-8859-1"/> <!--doctype-system=[<!ENTITY acirc "">] --> <xsl:strip-space elements="tokens"/> <xsl:template match="office:document"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="office:document-content"> <html> <xsl:apply-templates /> </html> </xsl:template> <xsl:template match="office:automatic-styles"> <style type="text/css"> p.Table-Heading{font-weight :bold;} <xsl:apply-templates /> </style> </xsl:template> <xsl:template match="office:styles"> </xsl:template> <xsl:template match="office:meta"> </xsl:template> <xsl:template match="office:settings"> </xsl:template> <xsl:template match="style:style"> <xsl:if test="@style:family ='paragraph'"> p.<xsl:value-of select="@style:name"/>{ <xsl:apply-templates />} </xsl:if> <xsl:if test="@style:family ='paragraph'"> p.<xsl:value-of select="@style:name"/>{ <xsl:if test="@style:parent-style-name='Table Heading'"> font-weight :bold;font-style:italic; </xsl:if> <xsl:apply-templates />} </xsl:if> <xsl:if test="@style:family ='table-cell'"> td.<xsl:value-of select="@style:name"/>{ <xsl:if test="@style:parent-style-name='Table Heading'"> font-weight :bold;font-style:italic; </xsl:if> <xsl:apply-templates />} </xsl:if> </xsl:template> <xsl:template match="style:properties"> <!--<xsl:param name="style" select="@fo:font-weight"/>--> <xsl:if test="@fo:font-weight"> font-weight :<xsl:value-of select="@fo:font-weight"/>; </xsl:if> <xsl:if test="@fo:font-style"> font-style :<xsl:value-of select="@fo:font-style"/>; </xsl:if> <xsl:if test="@style:font-name"> font-family :<xsl:value-of select="@style:font-name"/>; </xsl:if> <xsl:if test="@fo:font-size"> font-size : <xsl:value-of select="@fo:font-size"/>; </xsl:if> <xsl:if test="@style:text-underline='single'"> text-decoration :underline; </xsl:if> <xsl:if test="@style:text-crossing-out='single-line'"> text-decoration:line-through; </xsl:if> <xsl:if test="@fo:text-align='start'"> text-align :left </xsl:if> <xsl:if test="@fo:text-align='center'"> text-align :center </xsl:if> <xsl:if test="@fo:text-align='end'"> text-align :right </xsl:if> <!--<xsl:value-of select="$style"/>--> </xsl:template> <xsl:template match="office:body"> <xsl:apply-templates /> </xsl:template> <xsl:template match="table:table"> <table border="1" cellpadding="2" width="100%"> <xsl:apply-templates /> </table> </xsl:template> <xsl:template match="table:table-header-rows"> <th> <xsl:apply-templates /> </th> </xsl:template> <xsl:template match="table:table-row"> <tr> <xsl:apply-templates /> </tr> </xsl:template> <xsl:template match="table:table-cell"> <xsl:text disable-output-escaping="yes">&lt;td class="</xsl:text> <xsl:value-of select="@table:style-name"/> <xsl:text disable-output-escaping="yes">"&gt;</xsl:text> <!--<xsl:value-of select="."/>--> <xsl:apply-templates /> <xsl:text disable-output-escaping="yes">&lt;/td&gt;</xsl:text> <!--<td width="20%"> <xsl:apply-templates /> </td>--> </xsl:template> <xsl:template match="text:p"> <xsl:if test="ancestor-or-self::table:table-cell"> <xsl:if test=".=''"> <br/> </xsl:if> </xsl:if> <xsl:text disable-output-escaping="yes">&lt;p class="</xsl:text> <xsl:choose> <xsl:when test="@text:style-name ='Table Heading'"> Table-Heading </xsl:when> <xsl:otherwise> <xsl:value-of select="@text:style-name"/> </xsl:otherwise> </xsl:choose> <xsl:text disable-output-escaping="yes">"&gt;</xsl:text> <xsl:apply-templates/> <xsl:text disable-output-escaping="yes">&lt;/p&gt;</xsl:text> <!--<xsl:value-of select="."/>--> <!--<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>--> <!--<br/>--> </xsl:template> </xsl:stylesheet>
diff --git a/xmerge/java/org/openoffice/xmerge/makefile.mk b/xmerge/java/org/openoffice/xmerge/makefile.mk
deleted file mode 100644
index 79aa6109dce0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_joo_xmerge
-PRJ=../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/merger/DiffAlgorithm.java b/xmerge/java/org/openoffice/xmerge/merger/DiffAlgorithm.java
deleted file mode 100644
index 0d7cb7c75f28..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/DiffAlgorithm.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger;
-
-/**
- * This is the difference algorithm interface. It is an interface so
- * that different algorithms may be plugged-in to actually compute
- * the differences.
- *
- * NOTE: this code may not be thread safe.
- */
-public interface DiffAlgorithm {
-
- /**
- * Returns a <code>Difference</code> array. This method finds out
- * the difference between two sequences.
- *
- * @param orgSeq The original sequence of object.
- * @param modSeq The modified (or changed) sequence to
- * compare against with the origial.
- *
- * @return A <code>Difference</code> array.
- */
- public Difference[] computeDiffs(Iterator orgSeq, Iterator modSeq);
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/Difference.java b/xmerge/java/org/openoffice/xmerge/merger/Difference.java
deleted file mode 100644
index 4b84c66edb90..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/Difference.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger;
-
-
-/**
- * This is the <code>Difference</code> basic unit. Used by the
- * <code>DiffAlgorithm</code> as a set of difference between two
- * <code>Iterators</code> (the original and modified
- * <code>Iterators</code>).
- *
- * @author smak
- */
-public final class Difference {
-
- /**
- * Add operation.
- */
- public static final int ADD = 1;
-
- /**
- * Delete operation.
- */
- public static final int DELETE = 2;
-
- /**
- * Change operation.
- */
- public static final int CHANGE = 3;
-
- /**
- * Unchange operation (i.e. no change).
- */
- public static final int UNCHANGE = 4;
-
- /**
- * The action of the diff - either {@link #ADD} or {@link #DELETE}.
- */
- private int operation;
-
- /**
- * <p>The position of the content that should be operated on (original
- * iterator).</p>
- *
- * <p>For ADD, the orgPosition is the position of the original sequence
- * where the diff will insert (the element count is starting from 0, and
- * always insert before the element). The modPosition is the position
- * of the diff in the modified sequence (also starting from 0).</p>
- *
- * <blockquote><pre>
- * example:
- *
- * diff - &lt;B D&gt;and &lt;A B C D E F&gt;
- * note: &lt;B D&gt;is original sequence and &lt;A B C D E F&gt;
- * is the modified one.
- *
- * and here is the position of those sequence:
- * &lt;B D&gt; &lt;A B C D E F&gt;
- * 0 1 0 1 2 3 4 5
- *
- * result:
- * &lt;diff orgPos=0 modPos=0 operation=ADD&gt; &lt;-- element A
- * &lt;diff orgPos=1 modPos=2 operation=ADD&gt; &lt;-- element C
- * &lt;diff orgPos=2 modPos=4 operation=ADD&gt; &lt;-- element E
- * &lt;diff orgPos=2 modPos=5 operation=ADD&gt; &lt;-- element F
- *
- * </pre> </blockquote>
- * <p>One can notice the add operation is inserted before the position.
- * Hence, in order to append an element, we will have a position of
- * original sequence length + 1 to denote an append.</p>
- *
- * <p>For DELETE, orgPosition is the position that the element
- * will be deleted (starting from 0) and modPosition is the position
- * where the deleted element should be (consider as an ADD).</p>
- *
- * <p>The modPosition is less useful and it is difficult to understand
- * how the position is calculated. One can just skip this piece of
- * information. It is useful if one wants to reverse the role
- * of original sequence and modified sequence and find out the diff
- * easily (just change add to delete and delete to add for operation
- * and swap the orgPosition and modPosition).</p>
- *
- * <blockquote><pre>
- * example:
- *
- * diff - &lt;A B C D E F&gt; and &lt; B D&gt;
- * note: &lt;A B C D E F&gt; is original sequence and &lt;B D&gt;
- * is the modified one.
- *
- * and here is the position of those sequence:
- * &lt;A B C D E F&gt; &lt;B D&gt;
- * 0 1 2 3 4 5 0 1
- *
- * result:
- * &lt;diff orgPos=0 modPos=0 operation=DELETE&gt; &lt;-- element A
- * &lt;diff orgPos=2 modPos=1 operation=DELETE&gt; &lt;-- element C
- * &lt;diff orgPos=4 modPos=2 operation=DELETE&gt; &lt;-- element E
- * &lt;diff orgPos=5 modPos=2 operation=DELETE&gt; &lt;-- element F
- * </pre></blockquote>
- */
- private int orgPosition;
-
- /**
- * The position of the content that should be operated (modified iterator).
- * For explanation and examples, see {@link #orgPosition}.
- */
- private int modPosition;
-
-
- /**
- * Constructor. This is the standard way to create a
- * <code>Difference</code> object.
- *
- * @param operation Either {@link #ADD} or {@link #DELETE}.
- * @param orgPosition The position in the original (first)
- * <code>Iterator</code>.
- * @param modPosition The position in the modified (second)
- * <code>Iterator</code>.
- */
- public Difference(int operation, int orgPosition,
- int modPosition) {
- this.operation = operation;
- this.orgPosition = orgPosition;
- this.modPosition = modPosition;
- }
-
-
- /**
- * Get the operation of the <code>Difference</code>.
- *
- * @return the operation of the <code>Difference</code>,
- * either {@link #ADD} or {@link #DELETE}
- */
- public int getOperation() {
- return operation;
- }
-
- /**
- * Get the original <code>Iterator</code> position.
- *
- * @return The position in the original (first) <code>Iterator</code>
- */
- public int getOrgPosition() {
- return orgPosition;
- }
-
- /**
- * Get the modified <code>Iterator</code> position.
- *
- * @return The position in the modified (second) <code>Iterator</code>
- */
- public int getModPosition() {
- return modPosition;
- }
-
-
- /**
- * Two <code>Difference</code> objects will equal if and only if
- * all operation, orgPosition, modPosition and content are equal.
- *
- * @param obj Object to compare.
- *
- * @return true if equal, false otherwise.
- */
- public boolean equals(Object obj) {
- if (obj instanceof Difference) {
- Difference diff = (Difference) obj;
- if ((operation == diff.operation) &&
- (orgPosition == diff.orgPosition) &&
- (modPosition == diff.modPosition)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Display debug information.
- *
- * @return Debug string.
- */
- public String debug() {
-
- String opStr = "";
-
- switch (operation) {
- case ADD:
- opStr = "add";
- break;
- case DELETE:
- opStr = "del";
- break;
- case CHANGE:
- opStr = "chg";
- break;
- case UNCHANGE:
- opStr = "uch";
- break;
- default:
- break;
- }
- return "<diff orgPos=" + orgPosition + " modPos=" + modPosition +
- " op=" + opStr + ">";
- }
-
- /**
- * Returns position and operation values as a single string.
- *
- * @return orgPosition, modPosition and operation as a single string.
- */
- public String toString() {
-
- return orgPosition + " " + modPosition + " " + operation;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/Iterator.java b/xmerge/java/org/openoffice/xmerge/merger/Iterator.java
deleted file mode 100644
index ccd8dca77e12..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/Iterator.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger;
-
-/**
- * This is an interface used by the {@link
- * org.openoffice.xmerge.merger.DiffAlgorithm
- * DiffAlgorithm} and {@link
- * org.openoffice.xmerge.merger.MergeAlgorithm
- * MergeAlgorithm} to access a <code>Document</code>.
- *
- * @author smak
- */
-public interface Iterator {
-
-
- /**
- * Move to next element in the sequence.
- *
- * @return The <code>Object</code> of the next element in the sequence.
- * If there is no next element, then return null.
- */
- public Object next();
-
-
- /**
- * Move to previous element in the sequence.
- *
- * @return The <code>Object</code> of the previous element in the sequence.
- * If there is no previous element, then return null.
- */
- public Object previous();
-
-
- /**
- * Move to the beginning of the sequence.
- *
- * @return The <code>Object</code> of the first element in the sequence.
- * If it is empty, then return null.
- */
- public Object start();
-
-
- /**
- * Move to the end of the sequence.
- *
- * @return The <code>Object</code> of the last element in the sequence.
- * If it is empty, then return null.
- */
- public Object end();
-
-
- /**
- * Return the current element <code>Object</code> content.
- *
- * @return The <code>Object</code> at current position.
- */
- public Object currentElement();
-
-
- /**
- * Return the total element count in the sequence.
- *
- * @return The total element count.
- */
- public int elementCount();
-
-
- /**
- * A method to allow the difference algorithm to test whether the
- * <code>obj1</code> and <code>obj2</code> in the
- * <code>Iterator</code> are considered equal. As not every
- * <code>Object</code> in the <code>Iterator</code> can implement its
- * own equal method, with this equivalent method, we can allow
- * flexibility for the <code>Iterator</code> to choose a custom way
- * to compare two objects. Two objects can even be compared based on
- * the position in the <code>Iterator</code> rather than by
- * the content via this option.
- *
- * @param obj1 The first <code>Object</code>.
- * @param obj2 The second <code>Object</code>.
- *
- * @return true if equal, false otherwise.
- */
- public boolean equivalent(Object obj1, Object obj2);
-
-
- /**
- * <p>A method to force the <code>Iterator</code> to transverse the tree
- * again to refresh the content.</p>
- *
- * <p>It is used mainly for <code>Iterator</code> objects which take a snap
- * shot instead of dynamically transversing the tree. The current
- * position will be set to the beginning.</p>
- */
- public void refresh();
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/MergeAlgorithm.java b/xmerge/java/org/openoffice/xmerge/merger/MergeAlgorithm.java
deleted file mode 100644
index 3ee7ba7ad6c1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/MergeAlgorithm.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger;
-
-import org.openoffice.xmerge.MergeException;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.Difference;
-
-/**
- * This is the <code>MergeAlgorithm</code> interface. It is an
- * interface so that different merge algorithms may be plugged-in
- * to actually merge the diffs back to an original document.
- *
- * @author smak
- */
-public interface MergeAlgorithm {
-
- /**
- * This method is to merge the difference to an <code>Iterator</code>.
- * The original <code>Iterator</code> will be modified after the call.
- *
- * @param objSeq The original sequence which the difference
- * will be applied. It will be modified.
- * @param modSeq The modified sequence where the difference
- * content will be extracted.
- * @param differences The <code>Difference</code> array.
- *
- * @return An <code>Iterator</code> which is the modified original
- * <code>Iterator</code> Sequence. Same as the first parameter.
- *
- * @throws MergeException If an error occurs during the merge.
- */
- public void applyDifference(Iterator orgSeq, Iterator modSeq,
- Difference[] differences) throws MergeException;
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/NodeMergeAlgorithm.java b/xmerge/java/org/openoffice/xmerge/merger/NodeMergeAlgorithm.java
deleted file mode 100644
index 1511d9827081..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/NodeMergeAlgorithm.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger;
-
-import org.w3c.dom.Node;
-
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.Difference;
-
-/**
- * This is an interface for a {@link
- * org.openoffice.xmerge.merger.MergeAlgorithm
- * MergeAlgorithm} to merge two <code>Node</code> objects. It is an
- * interface so that different merge algorithms may be plugged-in.
- *
- * @author smak
- */
-public interface NodeMergeAlgorithm {
-
- /**
- * This method is used to merge two given <code>Node</code>
- * objects. Note: the original <code>Node</code> may be modified.
- *
- * @param originalNode The original <code>Node</code>.
- * @param modifyNode The <code>Node</code> to be merged. It may
- * be modified.
- */
- public void merge(Node orginialNode, Node modifyNode);
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/build.xml b/xmerge/java/org/openoffice/xmerge/merger/build.xml
deleted file mode 100644
index cb5131faecb4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/build.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_joox_merger" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_joox_merger"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/merger"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/DiffAlgorithm.java"/>
- <include name="${package}/Difference.java"/>
- <include name="${package}/Iterator.java"/>
- <include name="${package}/MergeAlgorithm.java"/>
- <include name="${package}/NodeMergeAlgorithm.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/CellNodeIterator.java b/xmerge/java/org/openoffice/xmerge/merger/diff/CellNodeIterator.java
deleted file mode 100644
index 62431df5da3b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/CellNodeIterator.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.Resources;
-
-
-/**
- * <p>This is an implementations of the <code>Iterator</code> interface.
- * It will traverse the tree and find cell <code>Node</code> sequences.</p>
- *
- * <p>Note: Once the XML Tree is parsed, then the <code>Iterator</code>
- * will be a snap shot of that tree. That means even the tree is
- * modified later, than the cached paragraph <code>Node</code> list will
- * not be updated accordingly. For this reason and for performance reasons
- * this <code>Iterator</code> does not support any operation methods such
- * as insert, remove or replace. The main purpose of this
- * <code>Iterator</code> is to be used with difference, not with merge.</p>
- *
- * @author smak
- */
-public final class CellNodeIterator extends NodeIterator {
-
- private Resources res = Resources.getInstance();
-
- // can be expanded to an array in the future, not necessary right now
- private static final String SUPPORTED_TAG1 = OfficeConstants.TAG_TABLE_CELL;
-
- /**
- * The standard constructor.
- *
- * @param cc The <code>ConverterCapabilities</code>.
- * @param node The initial root <code>Node</code>.
- */
- public CellNodeIterator(ConverterCapabilities cc, Node node) {
- super(cc, node);
- }
-
-
- /**
- * Overwrite the parent <code>nodeSupported</code> method. Only cell
- * <code>Node</code> objects are supported.
- *
- * @param node The <code>Node</code> to check.
- *
- * @return true if the <code>Node</code> is supported, false otherwise.
- */
- protected boolean nodeSupported(Node node) {
-
- // can use an array later to check all possible tags for
- // future expansion
- if (node.getNodeType() == Node.ELEMENT_NODE &&
- node.getNodeName().equals(SUPPORTED_TAG1)) {
- return true;
- } else {
- return false;
- }
- }
-
-
- protected boolean childrenEqual(Node node1, Node node2) {
-
- boolean equal = false;
-
- if (node1.hasChildNodes() && node2.hasChildNodes()) {
- Element cell1 = (Element)node1;
- Element cell2 = (Element)node2;
-
- // only need compare the first <text:p> children node, don't want
- // to compare any non-supported features
- // TODO: need to confirm whether all the text string is the
- // first <text:p>, though I checked with the openoffice 619 build
- Node paraNode1 = cell1.getElementsByTagName(
- OfficeConstants.TAG_PARAGRAPH).item(0);
- Node paraNode2 = cell2.getElementsByTagName(
- OfficeConstants.TAG_PARAGRAPH).item(0);
-
- equal = super.compareNode(paraNode1, paraNode2);
- }
-
- return equal;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/CharArrayLCSAlgorithm.java b/xmerge/java/org/openoffice/xmerge/merger/diff/CharArrayLCSAlgorithm.java
deleted file mode 100644
index b54f0ee8a8da..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/CharArrayLCSAlgorithm.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import java.util.Vector;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-
-/**
- * <p>This is an implementations of <code>DiffAlgorithm</code> interface
- * which will difference char arrays.</p>
- *
- * <p>It also use Longest Common Subsequence (LCS). The algorithm is based
- * on the book "Introduction to Algorithms" by Thomas H.Cormen,
- * Charles E.Leiserson, and Ronald L.Riverst (MIT Press 1990) page 314.</p>
- *
- * @author smak
- */
-public class CharArrayLCSAlgorithm {
-
- /**
- * Return an <code>Difference</code> array. This method finds out
- * the difference between two sequences.
- *
- * @param orgSeq The original sequence.
- * @param modSeq The modified (or changed) sequence to
- * compare against the origial.
- *
- * @return A <code>Difference</code> array.
- */
- public Difference[] computeDiffs(char[] orgSeq, char[] modSeq) {
-
- int orgSeqlen = orgSeq.length;
- int modSeqlen = modSeq.length;
-
- int[][] diffTable;
-
- // Diff table is used to keep track which element is the same or not
- // in those 2 sequences
- diffTable = createDiffTable(orgSeq, modSeq);
-
- // debug purpose...
- // printDiffTable(diffTable);
-
- Vector diffResult = new Vector();
-
- generateResult(diffTable, orgSeqlen, modSeqlen, diffResult);
-
- // don't need anymore if Difference do not contain content information
- /* fillInDiffContent(diffResult, orgSeq, modSeq); */
-
- Difference[] diffArray = new Difference[0];
-
- // convert the vector to array, it has to do in here as
- // generateResult is called recursively
- if (diffResult.size() > 0) {
- diffArray = new Difference[diffResult.size()];
- diffResult.copyInto(diffArray);
- }
-
- diffTable = null;
- diffResult = null;
-
- return diffArray;
- }
-
-
- /**
- * Debug function Used to print out the nicely formatted
- * difference table.
- *
- * @param diffTable The difference table to display.
- */
- private void printDiffTable(int[][] diffTable) {
-
- for (int i = 0; i < diffTable.length; i++) {
- for (int j = 0; j < diffTable[i].length; j++) {
- System.out.print(" " + diffTable[i][j] + " ");
- }
- System.out.println();
- }
- }
-
-
- /**
- * Create the difference table.
- * The difference table is used internal to keep track what
- * elements are common or different in the two sequences.
- *
- * @param orgSeq The original sequence to be used as a base.
- * @param modSeq The modified sequence to compare.
- *
- * @return A difference table as a two-dimensional array of
- * integers.
- */
- private int[][] createDiffTable(char[] orgSeq, char[] modSeq) {
- int orgSeqlen = orgSeq.length + 1;
- int modSeqlen = modSeq.length + 1;
- int[][] diffTable;
-
- // initialize the diffTable (it need to be 1 row/col bigger
- // than the original str)
- diffTable = new int[orgSeqlen][];
- for (int i = 0; i < orgSeqlen; i++) {
- diffTable[i] = new int[modSeqlen];
- }
-
- // compute the diff Table using LCS algorithm, refer to the book
- // mentioned at the top of the program
- for (int i = 1; i < orgSeqlen; i++) {
- for (int j = 1; j < modSeqlen; j++) {
-
- if (orgSeq[i-1] == modSeq[j-1]) {
- diffTable[i][j] = diffTable[i-1][j-1]+1;
- } else {
- if (diffTable[i-1][j] >= diffTable[i][j-1]) {
- diffTable[i][j] = diffTable[i-1][j];
- } else {
- diffTable[i][j] = diffTable[i][j-1];
- }
- }
- }
- }
-
- return diffTable;
- }
-
-
- /**
- * Generate the <code>Difference</code> result vector.
- * This method will be called recursively to backtrack the difference
- * table to get the difference result (and also the LCS).
- *
- * @param diffTable The difference table containing the
- * <code>Difference</code> result.
- * @param i The nth element in original sequence to
- * compare. This method is called recursively
- * with i and j decreased until 0.
- * @param j The nth element in modified sequence to
- * compare.
- * @param diffVector A vector to output the <code>Difference</code>
- * result. Can not use a return variable as it
- * is a recursive method. The vector will contain
- * <code>Difference</code> objects with operation
- * and positions filled in.
- */
- private void generateResult(int[][] diffTable,
- int i, int j, Vector diffVector) {
-
- // handle the first element
- if (i == 0 || j == 0) {
- if (i == 0 && j == 0) {
- // return
- } else if (j == 0) {
- for (int cnt = 0; cnt < i; cnt++) {
- Difference diff =
- new Difference(Difference.DELETE, cnt, j);
- diffVector.add(diff);
- }
- } else {
- for (int cnt = 0; cnt < j; cnt++) {
- Difference diff =
- new Difference(Difference.ADD, i, cnt);
- diffVector.add(diff);
- }
- }
- return;
- }
-
- // for the detail of this algorithm, refer to the book mentioned on
- // the top and page 317 and 318.
- if ((diffTable[i-1][j-1] == diffTable[i][j] -1) &&
- (diffTable[i-1][j-1] == diffTable[i-1][j]) &&
- (diffTable[i-1][j-1] == diffTable[i][j-1])) {
-
- // the element of ith and jth in org and mod sequence is the same
- generateResult(diffTable, i-1, j-1, diffVector);
- } else {
- if (diffTable[i-1][j] > diffTable[i][j-1]) {
-
- // recursively call first, then add the result so that
- // the beginning of the diffs will be stored first
- generateResult(diffTable, i-1, j, diffVector);
-
- Difference diff =
- new Difference(Difference.DELETE, i-1, j);
- diffVector.add(diff);
- } else if (diffTable[i-1][j] < diffTable[i][j-1]) {
-
- // recursively call first, then add the result so that
- // the beginning of the diffs will be stored first
- generateResult(diffTable, i, j-1, diffVector);
-
- Difference diff =
- new Difference(Difference.ADD, i, j-1);
- diffVector.add(diff);
- } else { // diffTable[i-1][j] == diffTable[i][j-1]
- // recursively call first, then add the result so that
- // the beginning of the diffs will be stored first
- generateResult(diffTable, i-1, j-1, diffVector);
-
- Difference diff =
- new Difference(Difference.CHANGE, i-1, j-1);
- diffVector.add(diff);
-
- }
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/CharacterParser.java b/xmerge/java/org/openoffice/xmerge/merger/diff/CharacterParser.java
deleted file mode 100644
index ad7c3990f263..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/CharacterParser.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-import java.util.Vector;
-import java.util.List;
-
-
-/**
- * <p>This is a parser to return a character array for difference purpose.
- * It will use depth first search to traverse all the characters inside the
- * text <code>Node</code> under a given <code>Node</code> (most likely to be
- * a paragraph <code>Node</code>).</p>
- *
- * <p>Note: Once the XML Tree is parsed, then the <code>Iterator</code> will be
- * a snap shot of that tree. That means even the tree is modified later, than
- * the cached paragraph <code>Node</code> list will not be updated accordingly.
- * For this reason and for performance reasons this <code>Iterator</code> does
- * not support any operation methods such as insert, remove or replace. The
- * main purpose of this <code>Iterator</code> is to be used with difference,
- * not with merge.</p>
- *
- * @author smak
- */
-public class CharacterParser {
-
- private TextNodeIterator textNodes;
- private int currentPosition = 0;
- private List nodeList_ = null;
- private char[] charArray;
-
-
- /**
- * Standard constructor.
- *
- * @param node The initial root <code>Node</code>.
- */
- public CharacterParser(Node node) {
- textNodes = new TextNodeIterator(node);
- nodeList_ = new Vector();
-
- parseNodes();
- }
-
-
- /**
- * Returns the <code>Node</code> pointer with the given character position.
- *
- * @return The <code>Node</code> pointer with the given character position.
- */
- public List getNodeList() {
- // will go through the nodeList to find the corresponding node
- return nodeList_;
- }
-
- /**
- * Returns the character array representation of the text.
- *
- * @return The character array representation of the text.
- */
- public char[] getCharArray() {
- return charArray;
- }
-
- private void parseNodes() {
-
- StringBuffer strBuf = new StringBuffer();
-
- /* create the character array by iterate the textnode iterator */
- Node currentNode = (Node)(textNodes.start());
- for (;
- currentNode != null;
- currentNode = (Node)(textNodes.next())) {
-
- // add the text value into the array
- String textValue = null;
- String nodeName = currentNode.getNodeName();
-
- // TODO: Space node have a count attribute which is not handled!
- if (currentNode.getNodeType() == Node.TEXT_NODE) {
- textValue = currentNode.getNodeValue();
- } else if (nodeName.equals(OfficeConstants.TAG_SPACE)) {
- textValue = " ";
- } else if (nodeName.equals(OfficeConstants.TAG_TAB_STOP)) {
- textValue = "\t";
- }
-
- if (textValue != null) {
- strBuf.append(textValue);
- addNewNodeEntry(textValue.length(), currentNode);
- }
- }
-
- charArray = strBuf.toString().toCharArray();
- }
-
-
- /**
- * Adds a new <code>Node</code> entry.
- *
- * @param textLen The text length.
- * @param node The <code>Node</code>.
- */
- private void addNewNodeEntry(int textLen, Node node) {
-
- TextNodeEntry nodeEntry = new TextNodeEntry(currentPosition,
- currentPosition + textLen - 1, node);
- currentPosition = currentPosition + textLen;
-
- nodeList_.add(nodeEntry);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorLCSAlgorithm.java b/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorLCSAlgorithm.java
deleted file mode 100644
index 7cc7c60b0439..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorLCSAlgorithm.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import java.util.Vector;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This is one of the implementations of <code>DiffAlgorithm</code> interface.
- * Using Longest Common Subsequence (LCS). The algorithm here is based
- * on the book "Introduction to Algorithms" by Thomas H.Cormen,
- * Charles E.Leiserson and Ronald L.Riverst (MIT Press 1990) page 314.
- *
- * @author smak
- */
-public class IteratorLCSAlgorithm implements DiffAlgorithm {
-
- public Difference[] computeDiffs(Iterator orgSeq, Iterator modSeq) {
-
- int orgSeqlen = orgSeq.elementCount();
- int modSeqlen = modSeq.elementCount();
-
- int[][] diffTable;
-
- // Diff table is used to keep track which element is the same or not
- // in those 2 sequences
- diffTable = createDiffTable(orgSeq, modSeq);
-
- // debug purpose...
- if (Debug.isFlagSet(Debug.INFO)) {
- printDiffTable(diffTable);
- }
-
- Vector diffResult = new Vector();
-
- generateResult(diffTable, orgSeqlen, modSeqlen, diffResult);
-
- Difference[] diffArray = new Difference[0];
-
- // convert the vector to array, it has to do in here as
- // generateResult is called recursively
- if (diffResult.size() > 0) {
- diffArray = new Difference[diffResult.size()];
- diffResult.copyInto(diffArray);
- }
-
- diffTable = null;
- diffResult = null;
-
- return diffArray;
- }
-
-
- /**
- * Debug function used to print out the nicely formatted
- * difference table.
- *
- * @param diffTable The difference table to display.
- */
- private void printDiffTable(int[][] diffTable) {
-
- String tmpString = "";
-
- for (int i = 0; i < diffTable.length; i++) {
- for (int j = 0; j < diffTable[i].length; j++) {
- tmpString = tmpString + " " + diffTable[i][j] + " ";
- }
- Debug.log(Debug.INFO, tmpString);
- tmpString = "";
- }
- }
-
- /**
- * Create the difference table.
- * The difference table is used internal to keep track what
- * elements are common or different in the two sequences.
- *
- * @param orgSeq The original sequence to be used as a base.
- * @param modSeq The modified sequence to compare.
- *
- * @return A difference table as a two-dimensional array of
- * integers.
- */
- private int[][] createDiffTable(Iterator orgSeq, Iterator modSeq) {
- int orgSeqlen = orgSeq.elementCount() + 1;
- int modSeqlen = modSeq.elementCount() + 1;
- int[][] diffTable;
-
- // initialize the diffTable
- diffTable = new int[orgSeqlen][];
- for (int i = 0; i < orgSeqlen; i++) {
- diffTable[i] = new int[modSeqlen];
- }
-
- // compute the diff Table using LCS algorithm, refer to the book
- // mentioned at the top of the program
-
- int i, j;
-
- Object orgSeqObject, modSeqObject;
-
- for (orgSeqObject = orgSeq.start(), i = 1;
- orgSeqObject != null;
- orgSeqObject = orgSeq.next(), i++) {
-
- for (modSeqObject = modSeq.start(), j = 1;
- modSeqObject != null;
- modSeqObject = modSeq.next(), j++) {
-
- if (orgSeq.equivalent(orgSeqObject, modSeqObject)) {
- diffTable[i][j] = diffTable[i-1][j-1]+1;
- } else {
- if (diffTable[i-1][j] >= diffTable[i][j-1]) {
- diffTable[i][j] = diffTable[i-1][j];
- } else {
- diffTable[i][j] = diffTable[i][j-1];
- }
- }
- }
- }
-
- return diffTable;
- }
-
-
- /**
- * Generate the <code>Difference</code> object result vector.
- * This method will be called recursively to backtrack the difference
- * table to get the difference result (and also the LCS).
- *
- * @param diffTable The difference table containing the
- * <code>Difference</code> result.
- * @param i The nth element in original sequence to
- * compare. This method is called recursively
- * with i and j decreased until 0.
- * @param j The nth element in modified sequence to
- * compare.
- * @param diffVector A vector to output the <code>Difference</code>
- * result. Can not use a return variable as it
- * is a recursive method. The vector will contain
- * <code>Difference</code> objects with operation
- * and positions fill in.
- */
- private void generateResult(int[][] diffTable,
- int i, int j, Vector diffVector) {
-
- // handle the first element
- if (i == 0 && j == 0) {
- return;
-
- } else if (j == 0) {
- for (int cnt = 0; cnt < i; cnt++) {
- Difference diff =
- new Difference(Difference.DELETE, cnt, j);
- diffVector.add(diff);
- }
- return;
-
- } else if (i == 0) {
- for (int cnt = 0; cnt < j; cnt++) {
- Difference diff =
- new Difference(Difference.ADD, i, cnt);
- diffVector.add(diff);
- }
- return;
- }
-
- // for the detail of this algorithm, refer to the book mentioned on
- // the top and page 317 and 318.
- if ((diffTable[i-1][j-1] == diffTable[i][j] -1) &&
- (diffTable[i-1][j-1] == diffTable[i-1][j]) &&
- (diffTable[i-1][j-1] == diffTable[i][j-1])) {
-
- // the element of ith and jth in org and mod sequence is the same
- generateResult(diffTable, i-1, j-1, diffVector);
- } else {
- if (diffTable[i-1][j] > diffTable[i][j-1]) {
-
- // recursively call first, then add the result so that
- // the beginning of the diffs will be stored first
- generateResult(diffTable, i-1, j, diffVector);
-
- Difference diff =
- new Difference(Difference.DELETE, i-1, j);
- diffVector.add(diff);
- } else if (diffTable[i-1][j] < diffTable[i][j-1]) {
-
- // recursively call first, then add the result so that
- // the beginning of the diffs will be stored first
- generateResult(diffTable, i, j-1, diffVector);
-
- Difference diff =
- new Difference(Difference.ADD, i, j-1);
- diffVector.add(diff);
- } else { // diffTable[i-1][j] == diffTable[i][j-1]
- // recursively call first, then add the result so that
- // the beginning of the diffs will be stored first
- generateResult(diffTable, i-1, j-1, diffVector);
-
- Difference diff =
- new Difference(Difference.CHANGE, i-1, j-1);
- diffVector.add(diff);
-
- }
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorRowCompare.java b/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorRowCompare.java
deleted file mode 100644
index aff0e44d5325..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/IteratorRowCompare.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-import java.util.Vector;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-/**
- * <p>A very simple and direct difference algorithm for row
- * <code>Node</code> objects in a spreadsheet. Basically, it will
- * compare objects in sequence and does not look ahead (unlike LCS).</p>
- *
- * <p><ol><li>
- * If two objects are the same, skip to next one.
- * </li><li>
- * Otherwise check whether the row repeated attribute is the same.
- * </li><li>
- * If the row repeated attribute is the same, then compare two rows
- * and mark it as <i>change</i> if those rows are different.
- * </li><li>
- * If the row repeated attribute is different, then split the rows and
- * continue to compare.
- * </li><li>
- * If there are more objects in the modseq than the original sequence,
- * then all of the extra ones in the modified sequence are marked as add.
- * </li><li>
- * If there are more objects in the original sequence than the modified
- * sequence, then all the extra one in the modified sequence are marked
- * as delete.
- * </li></ol></p>
- *
- * <p>NOTE: The algorithm will have potential side effect to split rows.</p>
- *
- * @author smak
- */
-
-public class IteratorRowCompare implements DiffAlgorithm {
-
- /**
- * Compute the differences of the given two sequences.
- * Refer to the class description.
- *
- * Return an array of <code>Difference</code> objects. This method finds
- * out the difference between two sequences.
- *
- * @param orgSeq The original sequence.
- * @param modSeq The modified (or changed) sequence to
- * compare against with the origial.
- *
- * @return An array of Difference objects.
- */
- public Difference[] computeDiffs(Iterator orgSeq, Iterator modSeq) {
-
- int orgSeqlen = orgSeq.elementCount();
- int modSeqlen = modSeq.elementCount();
-
- Vector diffVector = new Vector();
-
- // i and j are counters to keep track the current position in the
- // iterator
- int i = 0;
- int j = 0;
- Object orgSeqObject = orgSeq.start();
- Object modSeqObject = modSeq.start();
- Element orgRow, modRow;
- boolean different = false;
- boolean orgSplited = false;
- boolean modSplited = false;
-
- while (orgSeqObject != null) {
-
- different = true;
-
- if (modSeqObject == null) {
- // no more modsequence, all the remaining org sequence objs
- // should consider as a delete.
- Difference diff = new Difference(Difference.DELETE, i, j);
- diffVector.add(diff);
- orgSeqObject = orgSeq.next();
-
- } else {
- if (!orgSeq.equivalent(orgSeqObject, modSeqObject)) {
-
- orgRow = (Element)orgSeqObject;
- modRow = (Element)modSeqObject;
-
- // check whether the original Row with multiple row
- // if so, need to split one out for merge
- String orgRowRepeated = orgRow.getAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED);
- String modRowRepeated = modRow.getAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED);
-
-
- int orgRowNum = 1;
- int modRowNum = 1;
-
- if (orgRowRepeated.length() > 0) {
- orgRowNum =
- Integer.valueOf(orgRowRepeated).intValue();
- }
- if (modRowRepeated.length() > 0) {
- modRowNum =
- Integer.valueOf(modRowRepeated).intValue();
- }
-
- // try to find out the common number of repeated Rows
- if (orgRowNum == modRowNum) {
- orgSeqObject = orgSeq.next();
- modSeqObject = modSeq.next();
-
- // cut the original row into two halves, first half
- // have the repeated attribute = modify row attr
- } else if (orgRowNum > modRowNum) {
- Element orgSplitRow = splitRepeatedRow(
- orgRow, modRowNum,
- orgRowNum - modRowNum);
- // it may equal after the split!
- if (orgSeq.equivalent(orgSplitRow, modRow)) {
- different = false;
- }
- orgSplited = true;
- modSeqObject = modSeq.next();
-
- // cut the modified Row into two halves, first half
- // have the repeated attribute = original Row attr
- } else {
- Element modSplitRow = splitRepeatedRow(
- modRow, orgRowNum,
- modRowNum - orgRowNum);
-
- // check whether rows are equal after the split
- if (modSeq.equivalent(orgRow, modSplitRow)) {
- different = false;
- }
- modSplited = true;
- orgSeqObject = orgSeq.next();
- }
-
- if (different) {
- Difference diff = new Difference(Difference.CHANGE,
- i, j);
- diffVector.add(diff);
- }
-
- } else {
- // Rows are equivalent, move on to next one.
- orgSeqObject = orgSeq.next();
- modSeqObject = modSeq.next();
- } // end if-else
- j++;
- } // end if-else
- i++;
- } // end while loop
-
- // any extra objects in modify sequence should consider as an add
- // to the original sequence
- for (; modSeqObject != null; modSeqObject = modSeq.next(), j++) {
- Difference diff = new Difference(Difference.ADD, i, j);
- diffVector.add(diff);
- }
-
- // need to refresh the iterator if we split the rows
- if (orgSplited) {
- orgSeq.refresh();
- }
-
- if (modSplited) {
- modSeq.refresh();
- }
-
-
- // convert the vector to array
- Difference[] diffArray = new Difference[diffVector.size()];
- diffVector.copyInto(diffArray);
-
- return diffArray;
- }
-
-
- private Element splitRepeatedRow(Element orgRow, int splitNum, int orgNum) {
- // NOTE: should we really want to do deep clone?
- // in most the case, it is an empty Row, but the
- // specification didn't forbid any node to use multiple
- // column attributes. i.e. the node can contain text
- // nodes or other things under it.
- Element splitRow = (Element)(orgRow.cloneNode(true));
-
- if (splitNum > 1) {
- splitRow.setAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED,
- String.valueOf(splitNum));
- } else if (splitNum == 1) {
- splitRow.removeAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED);
- }
- if (orgNum > 1) {
- orgRow.setAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED,
- String.valueOf(orgNum));
- } else if (orgNum == 1) {
- orgRow.removeAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_ROWS_REPEATED);
- }
-
- Node parentNode = orgRow.getParentNode();
- parentNode.insertBefore(splitRow, orgRow);
-
- return splitRow;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/NodeIterator.java b/xmerge/java/org/openoffice/xmerge/merger/diff/NodeIterator.java
deleted file mode 100644
index 3799539e5c6d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/NodeIterator.java
+++ /dev/null
@@ -1,386 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.Resources;
-
-import java.util.Vector;
-import java.util.List;
-
-
-/**
- * <p>This is an implementation of the <code>Iterator</code> interface.
- * It will traverse the tree and find <code>Node</code> sequences.</p>
- *
- * <p>Note: Once the XML Tree is parsed, then the <code>Iterator</code> will
- * be a snap shot of that tree. That means even the tree is modified later,
- * than the cached paragraph <code>Node</code> list will not be updated
- * accordingly. For this reason and for performance reasons this
- * <code>Iterator</code> does not support any operation methods such as
- * insert, remove or replace. The main purpose of this
- * <code>Iterator</code> is to be used with difference, not with merge.</p>
- *
- * @author smak
- */
-public abstract class NodeIterator implements Iterator {
-
- private List nodeList = null;
- private int currentPosition = 0;
- private Node root;
- private ConverterCapabilities cc_ = null;
-
-
- /**
- * Standard constructor.
- *
- * @param cc The <code>ConverterCapabilities</code>.
- * @param node The initial root <code>Node</code>.
- */
- public NodeIterator(ConverterCapabilities cc, Node node) {
- cc_ = cc;
- nodeList = new Vector();
- root = node;
- markTree(node);
- }
-
-
- public Object next() {
- if (currentPosition < nodeList.size() - 1) {
- currentPosition++;
- return currentElement();
- } else {
- return null;
- }
- }
-
-
- public Object previous() {
- if (currentPosition > 0) {
- currentPosition--;
- return currentElement();
- } else {
- return null;
- }
- }
-
-
- public Object start() {
- currentPosition = 0;
- return currentElement();
- }
-
-
- public Object end() {
- int size = nodeList.size();
-
- if (size > 0) {
- currentPosition = size - 1;
- return currentElement();
- } else {
- return null;
- }
- }
-
-
- public Object currentElement() {
-
- if (currentPosition < 0 || currentPosition >= nodeList.size()) {
- return null;
- }
-
- return nodeList.get(currentPosition);
- }
-
-
- public int elementCount() {
- return nodeList.size();
- }
-
-
- public boolean equivalent(Object obj1, Object obj2) {
- boolean equal = false;
- String errMsg = null;
- if (!(obj1 instanceof Node && obj2 instanceof Node)) {
- errMsg = Resources.getInstance().getString("NOT_NODE_ERROR");
- Debug.log(Debug.ERROR, errMsg);
- } else {
- Node node1 = (Node)obj1;
- Node node2 = (Node)obj2;
-
- equal = compareNode(node1, node2);
- }
- return equal;
- }
-
-
- public void refresh() {
- nodeList = new Vector();
- markTree(root);
- currentPosition = 0;
- }
-
-
- /**
- * Used to compare two <code>Node</code> objects (type/name/value)
- * and all their children <code>Node</code> objects.
- *
- * @param node1 The first <code>Node</code> to compare.
- * @param node2 The second <code>Node</code> to compare.
- *
- * @return true if <code>Node</code> is equal, false otherwise.
- */
- protected boolean compareNode(Node node1, Node node2) {
- boolean equal = false;
-
- nodeCheck: {
-
- if (node1 == null || node2 == null) {
- break nodeCheck;
- }
-
- // nodevalue is short
- if (node1.getNodeType() != node2.getNodeType()) {
- break nodeCheck;
- }
-
- // nodeName will not be null
- if (!node1.getNodeName().equals(node2.getNodeName())) {
- break nodeCheck;
- }
-
- // nodeValue can be null for a lot of type of cells
- if (node1.getNodeValue() == null && node2.getNodeValue() == null) {
- // empty
- } else if (node1.getNodeValue() == null ||
- node2.getNodeValue() == null) {
- break nodeCheck;
- } else if (!node1.getNodeValue().equals(node2.getNodeValue())) {
- break nodeCheck;
- }
-
- // try to compare attributes
- if (!attributesEqual(node1, node2)) {
- break nodeCheck;
- }
-
- // don't need to compare if both node do not have children
- if (!node1.hasChildNodes() && !node2.hasChildNodes()) {
- equal = true;
- break nodeCheck;
- // don't need to compare if one node has children but not the other
- } else if (!node1.hasChildNodes() || !node2.hasChildNodes()) {
- equal = false;
- break nodeCheck;
- // need to compare if both node has children
- } else if (!childrenEqual(node1, node2)) {
- break nodeCheck;
- }
-
- equal = true;
- }
-
- return equal;
- }
-
-
- /**
- * Compare the children of two <code>Node</code> objects. This
- * method can be intentionally overridden by any class that
- * extend from <code>NodeIterator</code> so that it can have
- * its own children comparison if necessary.
- *
- * @param node1 The first <code>Node</code> to compare.
- * @param node2 The second <code>Node</code> to compare.
- *
- * @return true if children are equal, false otherwise.
- */
- protected boolean childrenEqual(Node node1, Node node2) {
-
- boolean equal = false;
-
- childrenCheck: {
- NodeList node1Children = node1.getChildNodes();
- NodeList node2Children = node2.getChildNodes();
-
- if (node1Children == null || node2Children == null) {
- break childrenCheck;
- }
-
- if (node1Children.getLength() != node2Children.getLength()) {
- break childrenCheck;
- }
-
- // compare all the childrens
- equal = true;
-
- for (int i = 0; i < node1Children.getLength(); i++) {
- if (!compareNode(node1Children.item(i),
- node2Children.item(i))) {
- equal = false;
- break childrenCheck;
- }
- }
- }
-
- return equal;
- }
-
-
- /**
- * Compare attributes of two <code>Node</code> objects. This
- * method can be intentionally overridden by any class that
- * extends from <code>NodeIterator</code> so that it can have
- * its own attribute comparison.
- *
- * @param node1 The first <code>Node</code> to compare.
- * @param node2 The second <code>Node</code> to compare.
- *
- * @return true if attributes are equal, false otherwise.
- */
- protected boolean attributesEqual(Node node1, Node node2) {
-
- boolean equal = false;
- String nodeName = node1.getNodeName();
- NamedNodeMap attrNode[] = new NamedNodeMap[2];
- attrNode[0] = node1.getAttributes();
- attrNode[1] = node2.getAttributes();
-
- // attribute node will be null if node is not an element node
- // and attribute nodes are equal if both are not element node
- if (attrNode[0] == null || attrNode[1] == null) {
- if (attrNode[0] == null && attrNode[1] == null) {
- equal = true;
- }
- return equal;
- }
-
- // compare the attributes from node1 vs node2 and node2 vs node1
- // though it's a little inefficient for the duplication of comparison
- // as the number of attributes is not so many, it should not be
- // a big problem.
- int len [] = new int[2];
- int src, dst;
-
- attrCheck: {
- for (int i = 0; i < 2; i++) {
-
- if (i == 0) {
- src = 0;
- dst = 1;
- } else {
- src = 1;
- dst = 0;
- }
-
- len[src] = attrNode[src].getLength();
-
- for (int j = 0; j < len[src]; j++) {
- Node srcAttr = attrNode[src].item(j);
- String srcAttrName = srcAttr.getNodeName();
-
- // copy the supported attrs
- if (cc_ == null ||
- cc_.canConvertAttribute(nodeName, srcAttrName)) {
-
- // check whether the attribute exist in dst node
- Node dstAttr = attrNode[dst].getNamedItem(srcAttrName);
-
- if (dstAttr == null) {
- Debug.log(Debug.INFO,
- "[NodeIterator] Attr not exist in dst - "
- + srcAttrName);
- break attrCheck;
- }
-
- // then compare the attribute values
- if (!srcAttr.getNodeValue().equals(
- dstAttr.getNodeValue())) {
- Debug.log(Debug.INFO,
- "[NodeIterator] Attr diff src: " +
- srcAttr.getNodeValue() + " dst: "+
- dstAttr.getNodeValue());
- break attrCheck;
- }
- } // end if cc_ loop
- } // end for j loop
- } // end for i loop
-
- // the whole checking is done smoothly and all attributes are equal
- equal = true;
- }
-
- return equal;
- }
-
-
- /**
- * Check whether a <code>Node</code> is supported. This method
- * can be intentionally overridden by any class that extends from
- * <code>NodeIterator</code> so that it can specify which
- * <code>Node</code> to support.
- *
- * @param node <code>Node</code> to check.
- *
- * @return true if <code>Node</code> is supported, false otherwise.
- */
- protected abstract boolean nodeSupported(Node node);
-
- // doing a depth first search for the tree and mark all supported nodes
- private void markTree(Node node) {
-
- // if this is a supported node, then we add it to our cache table
- if (nodeSupported(node)) {
- nodeList.add(node);
- } else {
- // or we go through all children nodes recursively
- // (can be optimized in future)
- String nodeName = node.getNodeName();
- if ( cc_ == null || cc_.canConvertTag(nodeName)) {
- NodeList nodeList = node.getChildNodes();
- int nodeListLength = nodeList.getLength();
- for (int i = 0; i < nodeListLength; i++) {
- markTree(nodeList.item(i));
- }
- }
- else {
- Debug.log(Debug.INFO, " [NodeIterator::markTree] Skipping node "
- + nodeName);
- }
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/ObjectArrayIterator.java b/xmerge/java/org/openoffice/xmerge/merger/diff/ObjectArrayIterator.java
deleted file mode 100644
index e69a3714871a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/ObjectArrayIterator.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.openoffice.xmerge.merger.Iterator;
-
-/**
- * <p>This is an implementation of the <code>Iterator</code> interface.
- * It is based upon a simple <code>Object</code> array.</p>
- *
- * <p>Note: this class is not thread safe for performance reasons.</p>
- *
- * @author smak
- */
-public final class ObjectArrayIterator implements Iterator {
-
-
- /**
- * The <code>Object</code> array.
- */
- private Object [] objArray;
- private int currentPosition;
-
-
- /**
- * Private default constructor.
- */
- private ObjectArrayIterator() {
- // do not allow user new a ObjectArrayIterator without argument
- }
-
-
- /**
- * Standard constructor.
- *
- * @param objArray The <code>Object</code> array.
- */
- public ObjectArrayIterator(Object [] objArray) {
- if (objArray != null) {
- this.objArray = new Object[objArray.length];
- System.arraycopy(objArray, 0, this.objArray, 0, objArray.length);
- currentPosition = 0;
- } else {
- this.objArray = new Object[0];
- }
- }
-
-
- public Object next() {
- if (currentPosition < objArray.length - 1) {
- currentPosition++;
- return currentElement();
- } else {
- return null;
- }
-
- }
-
-
- public Object previous() {
- if (currentPosition > 0) {
- currentPosition--;
- return currentElement();
- } else {
- return null;
- }
- }
-
-
- public Object start() {
- currentPosition = 0;
- return currentElement();
- }
-
-
- public Object end() {
- if (objArray.length > 0) {
- currentPosition = objArray.length - 1;
- }
- return currentElement();
- }
-
-
- public Object currentElement() {
- if (objArray.length > 0) {
- return objArray[currentPosition];
- } else {
- return null;
- }
- }
-
-
- /**
- * Replace current <code>Object</code>.
- *
- * @param object <code>Object</code> to replace.
- */
- public void replace(Object object) {
- objArray[currentPosition] = object;
- }
-
-
- /**
- * Insert <code>Object</code> after current <code>Object</code>.
- *
- * @param object <code>Object</code> to insert.
- */
- public void insert(Object object) {
- Object [] objArray2 = new Object[objArray.length+1];
-
- // copy the array content up before the currentposition
- if (currentPosition > 0) {
- System.arraycopy(objArray, 0, objArray2, 0, currentPosition);
- }
-
- objArray2[currentPosition] = object;
-
- // copy the array content up after the currentposition
- System.arraycopy(objArray, currentPosition, objArray2,
- currentPosition + 1, objArray.length - currentPosition);
-
- objArray = objArray2;
- currentPosition++;
- }
-
- /**
- * Append <code>Object</code> after current <code>Object</code>.
- *
- * @param object <code>Object</code> to append.
- */
- public void append(Object object) {
- Object [] objArray2 = new Object[objArray.length + 1];
-
- int newPosition = currentPosition + 1;
-
- // copy the array content up to the currentposition
- System.arraycopy(objArray, 0, objArray2, 0, newPosition);
-
- objArray2[newPosition] = object;
-
- // copy the array content up after the currentposition
- if (currentPosition < objArray.length - 1) {
- System.arraycopy(objArray, newPosition, objArray2,
- newPosition + 1, objArray.length - newPosition);
- }
-
- objArray = objArray2;
- }
-
- /**
- * Remove current <code>Object</code>.
- */
- public void remove() {
- Object [] objArray2 = new Object[objArray.length - 1];
-
- // copy the array content up before the currentposition
- if (currentPosition > 0) {
- System.arraycopy(objArray, 0, objArray2, 0, currentPosition);
- }
-
- // copy the array content up after the currentposition
- if (currentPosition < objArray.length - 1) {
- System.arraycopy(objArray, currentPosition + 1, objArray2,
- currentPosition, objArray.length - currentPosition - 1);
- }
-
- objArray = objArray2;
-
- if (currentPosition == objArray.length)
- currentPosition--;
- }
-
- public int elementCount() {
- return objArray.length;
- }
-
- public boolean equivalent(Object obj1, Object obj2) {
- return obj1.equals(obj2);
- }
-
- public void refresh() {
- // do nothing
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/ParaNodeIterator.java b/xmerge/java/org/openoffice/xmerge/merger/diff/ParaNodeIterator.java
deleted file mode 100644
index b3ad49016233..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/ParaNodeIterator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-import java.util.Vector;
-import java.util.List;
-
-
-/**
- * <p>This is an implementation of the <code>Iterator</code> interface.
- * It will traverse the tree and find the Paragraph/Heading <code>Node</code>
- * sequences.</p>
- *
- * <p>Note: Once the XML Tree is parsed, then the <code>Iterator</code> will
- * be a snap shot of that tree. That means even the tree is modified later,
- * than the cached paragraph <code>Node</code> list will not be updated
- * accordingly. For this reason and for performance reasons this
- * <code>Iterator</code> does not support any operation methods such as
- * insert, remove or replace. The main purpose of this
- * <code>Iterator</code> is to be used with difference, not with merge.</p>
- *
- * @author smak
- */
-public final class ParaNodeIterator extends NodeIterator {
-
- // can be expanded to an array in the future, not necessary right now
- private static final String SUPPORTED_TAG1 = OfficeConstants.TAG_PARAGRAPH;
- private static final String SUPPORTED_TAG2 = OfficeConstants.TAG_HEADING;
-
- /**
- * Standard constructor.
- *
- * @param cc The <code>ConverterCapabilities</code>.
- * @param node The initial root <code>Node</code>.
- */
- public ParaNodeIterator(ConverterCapabilities cc, Node node) {
- // not using convertercapabilities unless it's needed in future.
- super(cc, node);
- }
-
-
- /**
- * Overwrite the parent <code>nodeSupported</code> method.
- *
- * @param node <code>Node</code> to check.
- *
- * @return true if the <code>Node</code> is supported, false
- * otherwise.
- */
- protected boolean nodeSupported(Node node) {
-
- // can use an array later to check all possible tags for
- // future expansion
- if (node.getNodeType() == Node.ELEMENT_NODE &&
- (node.getNodeName().equals(SUPPORTED_TAG1) ||
- node.getNodeName().equals(SUPPORTED_TAG2))) {
- return true;
- } else {
- return false;
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/RowIterator.java b/xmerge/java/org/openoffice/xmerge/merger/diff/RowIterator.java
deleted file mode 100644
index 2f748ca8d41c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/RowIterator.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.Debug;
-import org.openoffice.xmerge.util.Resources;
-
-
-/**
- * This is an implementation of the <code>Iterator</code> interface and extends
- * <code>NodeIterator</code>. It will traverse the tree and find row sequences.
- *
- * @author smak
- */
-public final class RowIterator extends NodeIterator {
-
- private Resources res = Resources.getInstance();
-
- // TODO: should compare the ConverterCapabilities supported feature only!
- // otherwise even though one with a chart, one without, will still be
- // considered to be not equivalent.
-
- /**
- * Standard constructor.
- *
- * @param cc The <code>ConverterCapabilities</code>.
- * @param node The initial root <code>Node</code>.
- */
- public RowIterator(ConverterCapabilities cc, Node node) {
- super(cc, node);
- }
-
- /**
- * Overwrite the parent <code>nodeSupported</code> method. Only
- * row <code>Node</code> objects are supported.
- *
- * @param node <code>Node</code> to check.
- *
- * @return true if the <code>Node</code> is supported, false otherwise.
- */
- protected boolean nodeSupported(Node node) {
-
- // can use an array later to check all possible tags for
- // future expansion
- if (node.getNodeType() == Node.ELEMENT_NODE &&
- node.getNodeName().equals(OfficeConstants.TAG_TABLE_ROW)) {
- return true;
- } else {
- return false;
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeEntry.java b/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeEntry.java
deleted file mode 100644
index 6a0d8a6d946c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeEntry.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-
-/**
- * A small class to hold the start/end character position and the
- * <code>Node</code> pointer in a text <code>Node</code>. It is
- * mainly used for character parser to make a list of text
- * <code>Node</code> cache entries.
- *
- * @author smak
- */
-public class TextNodeEntry {
-
- private int startChar_;
- private int endChar_;
- private Node node_;
-
- /**
- * Constructor
- *
- * @param startChar The start character position.
- * @param endChar The end character position.
- * @param node The text <code>Node</code>.
- */
- public TextNodeEntry(int startChar, int endChar, Node node) {
- startChar_ = startChar;
- endChar_ = endChar;
- node_ = node;
- }
-
- /**
- * Returns the start character.
- *
- * @return The start character.
- */
- public int startChar() {
- return startChar_;
- }
-
-
- /**
- * Returns the end character.
- *
- * @return The end character.
- */
- public int endChar() {
- return endChar_;
- }
-
-
- /**
- * Returns the <code>Node</code>.
- *
- * @return The <code>Node</code>.
- */
- public Node node() {
- return node_;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeIterator.java b/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeIterator.java
deleted file mode 100644
index 41274bd6074f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/TextNodeIterator.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.diff;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-import java.util.Vector;
-import java.util.List;
-
-
-/**
- * <p>This is an implementation of the <code>Iterator</code> interface.
- * It will traverse the tree and find text/space/tab <code>Node</code>
- * sequences.</p>
- *
- * <p>Note: Once the XML Tree is parsed, then the <code>Iterator</code>
- * will be a snap shot of that tree. That means even the tree is modified
- * later, than the cached paragraph <code>Node</code> list will not be
- * updated accordingly. For this reason and for performance reasons
- * this <code>Iterator</code> does not support any operation methods
- * such as insert, remove or replace. The main purpose of this
- * <code>Iterator</code> is to be used with difference, not with merge.</p>
- *
- * @author smak
- */
-public final class TextNodeIterator extends NodeIterator {
-
- /**
- * Standard constructor.
- *
- * @param initial The initial root <code>Node</code>.
- */
- public TextNodeIterator(Node node) {
- super(null, node);
- }
-
- /**
- * Overwrite the parent <code>nodeSupported</code> method. Only text
- * <code>Node</code> objects are supported.
- *
- * @param node <code>Node</code> to check.
- *
- * @return true if the <code>Node</code> is supported, false
- * otherwise.
- */
- protected boolean nodeSupported(Node node) {
-
- // can use an array later to check all possible tags for
- // future expansion
- if (node.getNodeType() == Node.TEXT_NODE ||
- node.getNodeName().equals(OfficeConstants.TAG_SPACE) ||
- node.getNodeName().equals(OfficeConstants.TAG_TAB_STOP) ||
- node.getNodeName().equals(OfficeConstants.TAG_LINE_BREAK)) {
- return true;
- } else {
- return false;
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/build.xml b/xmerge/java/org/openoffice/xmerge/merger/diff/build.xml
deleted file mode 100644
index 22ff4c74786e..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/build.xml
+++ /dev/null
@@ -1,137 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxm_diff" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxm_diff"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/merger/diff"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/CharacterParser.java"/>
- <include name="${package}/CharArrayLCSAlgorithm.java"/>
- <include name="${package}/IteratorLCSAlgorithm.java"/>
- <include name="${package}/IteratorRowCompare.java"/>
- <include name="${package}/NodeIterator.java"/>
- <include name="${package}/ObjectArrayIterator.java"/>
- <include name="${package}/ParaNodeIterator.java"/>
- <include name="${package}/CellNodeIterator.java"/>
- <include name="${package}/TextNodeEntry.java"/>
- <include name="${package}/TextNodeIterator.java"/>
- <include name="${package}/RowIterator.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/makefile.mk b/xmerge/java/org/openoffice/xmerge/merger/diff/makefile.mk
deleted file mode 100644
index f4690cabb5d0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxm_diff
-PRJ=../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/merger/diff/package.html b/xmerge/java/org/openoffice/xmerge/merger/diff/package.html
deleted file mode 100644
index 48c850e2d2b0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/diff/package.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.merger.diff package</title>
-</head>
-
-<body bgcolor="white">
-<p>Provides implementations for the {@link
-org.openoffice.xmerge.merger.Iterator Iterator}
-interface and related support classes. These are used by the {@link
-org.openoffice.xmerge.merger.DiffAlgorithm
-DiffAlgorithm} interface.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/merger/makefile.mk b/xmerge/java/org/openoffice/xmerge/merger/makefile.mk
deleted file mode 100644
index 10eaf50df249..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_joox_merger
-PRJ=../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/CharacterBaseParagraphMerge.java b/xmerge/java/org/openoffice/xmerge/merger/merge/CharacterBaseParagraphMerge.java
deleted file mode 100644
index e9334221f3b4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/CharacterBaseParagraphMerge.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.merge;
-
-import java.util.List;
-import org.w3c.dom.Node;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.diff.CharacterParser;
-import org.openoffice.xmerge.merger.diff.CharArrayLCSAlgorithm;
-import org.openoffice.xmerge.merger.diff.TextNodeEntry;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This is an implementation of the <code>NodeMergeAlgorithm</code>
- * interface. It is used to merge two paragraph <code>Node</code>
- * objects based on character comparisons.
- *
- * @author smak
- */
-public final class CharacterBaseParagraphMerge
- implements NodeMergeAlgorithm {
-
-
- private class cacheCharArray {
- public cacheCharArray(int cacheSize) {
- }
- }
-
-
- /**
- * Merge two paragraph <code>Node</code> by using Longest Common
- * Subsequence (LCS) character algorithm defined in {@link
- * org.openoffice.xmerge.merger.diff.CharArrayLCSAlgorithm
- * CharArrayLCSAlgorithm}
- *
- * @param orgPara The original paragraph <code>Node</code>.
- * @param modPara The modified paragraph <code>Node</code>.
- */
- public void merge(Node orgPara, Node modPara) {
- CharacterParser orgParser = new CharacterParser(orgPara);
- CharacterParser modParser = new CharacterParser(modPara);
-
- char[] orgCharArray = orgParser.getCharArray();
- char[] modCharArray = modParser.getCharArray();
-
- CharArrayLCSAlgorithm diffAlgo = new CharArrayLCSAlgorithm();
-
- Difference[] diffResult = diffAlgo.computeDiffs(orgCharArray,
- modCharArray);
- // debug use
- System.out.println("Diff Result: ");
- for (int i = 0; i < diffResult.length; i++) {
- Debug.log(Debug.INFO, diffResult[i].debug());
- }
-
- applyDifference(orgParser, modParser, diffResult);
- }
-
-
- private void applyDifference(CharacterParser orgParser,
- CharacterParser modParser,
- Difference[] diffs) {
-
- List orgNodeList = orgParser.getNodeList();
- List modNodeList = modParser.getNodeList();
- int diffCount = 0;
- int modNodeListCnt = 0;
- int numNode = orgNodeList.size();
-
- for (int i = 0; i < numNode; i++) {
-
- int extraChar = 0;
- int orgDiffCount = diffCount;
- TextNodeEntry orgTextNode = (TextNodeEntry)(orgNodeList.get(i));
-
- Debug.log(Debug.INFO, "checking node " + (i + 1) + " of " + numNode);
-
- // check any difference in this node and estimate the new char num
- for (; diffCount < diffs.length; diffCount++) {
-
- Debug.log(Debug.INFO, " checking diff " + (diffCount + 1) +
- " of " + diffs.length);
- Debug.log(Debug.INFO, " OrgPosision <" +
- diffs[diffCount].getOrgPosition() + "> diffCount <" +
- diffCount + "> orgDiffCount <" + orgDiffCount + ">");
-
- // don't need to check and diffs beyond the current node text
- // range except the last node
- if (diffs[diffCount].getOrgPosition() > orgTextNode.endChar() &&
- i < numNode - 1) {
- Debug.log(Debug.INFO, " breaking!");
- break;
- }
-
- if (diffs[diffCount].getOrgPosition()
- >= orgTextNode.startChar()) {
- if (diffs[diffCount].getOperation() == Difference.DELETE) {
- extraChar--;
- } else if (diffs[diffCount].getOperation()
- == Difference.ADD) {
- extraChar++;
- }
-
- }
- }
-
- Debug.log(Debug.INFO, " final diffCount <" + diffCount +
- "> final orgDiffCount <" + orgDiffCount + ">");
-
- // will only try to merge if there is a difference in this node
- if (diffCount > orgDiffCount) {
-
- Debug.log(Debug.INFO, " There is a difference, doing merge");
- Debug.log(Debug.INFO, " TextNode name <" +
- orgTextNode.node().getNodeName() + ">");
- Debug.log(Debug.INFO, " TextNode value <" +
- orgTextNode.node().getNodeValue() + ">");
- Debug.log(Debug.INFO, " TextNode start char <" +
- orgTextNode.startChar() + "> TextNode end char <" +
- orgTextNode.endChar() + ">");
- Debug.log(Debug.INFO, " extraChar value <" + extraChar + ">");
-
- coreMerge(orgDiffCount, diffCount, diffs, orgParser,
- modParser, orgTextNode, extraChar);
- }
- }
- }
-
- private void coreMerge(int startDiffNum, int endDiffNum, Difference[] diffs,
- CharacterParser orgParser, CharacterParser modParser,
- TextNodeEntry orgTextNode, int extraChar) {
-
- Node orgNode = orgTextNode.node();
- char[] modTextArray = modParser.getCharArray();
- String tmpString;
-
- // Handle situation where getNodeValue returns null
- //
- if (orgNode.getNodeValue() != null)
- tmpString = orgNode.getNodeValue();
- else
- tmpString = "";
-
- char[] orgNodeText = tmpString.toCharArray();
- char[] newNodeText;
-
- if (orgNodeText.length + extraChar > 0)
- newNodeText = new char[orgNodeText.length + extraChar];
- else
- newNodeText = new char[0];
-
- int orgTextPosition = orgTextNode.startChar(); // used for block copy
- int newTextPosition = 0; // used for block copy
- int unChangedTextLength = 0;
-
- char[] cacheCharArray = new char[endDiffNum - startDiffNum];
- int cacheLength = 0;
- int lastDiffOperation = Difference.UNCHANGE;
- int lastDiffPosition = -1;
-
- // starting to diff
- //
- for (int j = startDiffNum; j < endDiffNum; j++) {
-
- // copy any contents before the diff
- //
- if (diffs[j].getOrgPosition() > orgTextPosition) {
- // need to flush first
- if (cacheLength > 0) {
- System.arraycopy(cacheCharArray, 0,
- newNodeText, newTextPosition, cacheLength);
- newTextPosition += cacheLength;
-
- // reset the markers
- lastDiffPosition = -1;
- lastDiffOperation = Difference.UNCHANGE;
- cacheLength = 0;
- }
-
- // find out the length how many characters are
- // untouched by the diff
- unChangedTextLength = diffs[j].getOrgPosition() -
- orgTextPosition;
- System.arraycopy(orgNodeText,
- orgTextPosition - orgTextNode.startChar(),
- newNodeText, newTextPosition,
- unChangedTextLength);
- orgTextPosition += unChangedTextLength;
- newTextPosition += unChangedTextLength;
- }
-
- // for any deleted characters, just skip without copy
- // but still need to take care the cached characters
- //
- if (diffs[j].getOperation() == Difference.DELETE) {
- orgTextPosition++;
-
- // flush out the cache and copy the content to new Text
- if (cacheLength > 0) {
- System.arraycopy(cacheCharArray, 0,
- newNodeText, newTextPosition, cacheLength);
- newTextPosition += cacheLength;
-
- // reset the markers
- lastDiffPosition = -1;
- lastDiffOperation = Difference.UNCHANGE;
- cacheLength = 0;
- }
-
- continue;
-
-
- // check whether we should flush the cache.
- // For changed diffs, only continuous changes can be cached
- // For Add diffs, only same insertion point can be cached
- // and for both changed/add diffs, need to have same operation
- // as last cached diffs.
-
- } else {
- if (lastDiffOperation != diffs[j].getOperation() ||
- (diffs[j].getOperation() == Difference.CHANGE &&
- diffs[j].getOrgPosition() != lastDiffPosition + 1) ||
- (diffs[j].getOperation() == Difference.ADD &&
- diffs[j].getOrgPosition() != lastDiffPosition)) {
-
- // flush the cache
- if (cacheLength > 0) {
- System.arraycopy(cacheCharArray, 0, newNodeText,
- newTextPosition, cacheLength);
- newTextPosition += cacheLength;
-
- // reset the markers
- lastDiffPosition = -1;
- lastDiffOperation = Difference.UNCHANGE;
- cacheLength = 0;
- }
- }
-
- // add the diffs to the cache, now the diffs will be either
- // a new 'changed' char or is an adjacent following change of
- // last difference
- cacheCharArray[cacheLength] =
- modTextArray[diffs[j].getModPosition()];
- cacheLength++;
- lastDiffOperation = diffs[j].getOperation();
- lastDiffPosition = diffs[j].getOrgPosition();
-
- // need to increment the original text position
- // after we cached it
- if (lastDiffOperation == Difference.CHANGE) {
- orgTextPosition++;
- }
- }
- }
-
- // flush any contents remaining in the cache
- if (cacheLength > 0) {
- System.arraycopy(cacheCharArray, 0, newNodeText,
- newTextPosition, cacheLength);
- newTextPosition += cacheLength;
- // no need to reset any cache-related info as this is a last flush
- }
-
- // copy any contents after all the diffs
- int orgStartPosition = orgTextNode.startChar();
- if (orgNodeText.length + orgStartPosition > orgTextPosition) {
- unChangedTextLength = orgNodeText.length + orgStartPosition
- - orgTextPosition;
- System.arraycopy(orgNodeText, orgTextPosition - orgStartPosition,
- newNodeText, newTextPosition,
- unChangedTextLength);
- }
-
- // set the text to the original node if there are any diffs processed.
- // can't use newNodeText.length to check as even it is empty, we may
- // process a whole bunch of deletion already (i.e. the whole
- // orgNodeText deleted).
- if (endDiffNum > startDiffNum) {
- String newString = new String(newNodeText);
- orgNode.setNodeValue(newString);
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/DocumentMerge.java b/xmerge/java/org/openoffice/xmerge/merger/merge/DocumentMerge.java
deleted file mode 100644
index 4842ca433e04..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/DocumentMerge.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.merge;
-
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.MergeException;
-import org.openoffice.xmerge.merger.MergeAlgorithm;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.util.XmlUtil;
-
-/**
- * This is an implementation of the <code>MergeAlgorithm</code> interface.
- * This class will merge two <code>Document</code> classes. It utilizes the
- * appropriate class which implements {@link
- * org.openoffice.xmerge.merger.NodeMergeAlgorithm
- * NodeMergeAlgorithm} to perform the merge.
- *
- * @author smak
- */
-public class DocumentMerge implements MergeAlgorithm {
-
- private NodeMergeAlgorithm subDocumentMerge = null;
-
- /** The capabilities of this converter. */
- protected ConverterCapabilities cc_;
-
-
- /**
- * Constructor
- *
- * @param cc The <code>ConverterCapabilities</code>.
- * @param merge The <code>NodeMergeAlgorithm</code>.
- */
- public DocumentMerge(ConverterCapabilities cc, NodeMergeAlgorithm merge) {
- cc_ = cc;
- subDocumentMerge = merge;
- }
-
-
- public void applyDifference(Iterator orgSeq, Iterator modSeq,
- Difference[] differences) throws MergeException {
-
-
- // a quick test whether the differences array is in ascending order
- int currentPosition = -1;
- boolean haveDeleteOperation = false;
-
- for (int i = 0; i < differences.length; i++) {
- if (differences[i].getOrgPosition() > currentPosition) {
- currentPosition = differences[i].getOrgPosition();
- if (differences[i].getOperation() == Difference.DELETE) {
- haveDeleteOperation = true;
- } else {
- haveDeleteOperation = false;
- }
- } else if (differences[i].getOrgPosition() == currentPosition) {
- if (differences[i].getOperation() == Difference.DELETE) {
- haveDeleteOperation = true;
- } else if (differences[i].getOperation() == Difference.ADD &&
- haveDeleteOperation == true) {
- throw new MergeException(
- "Differences array is not sorted. Delete before Add");
- }
- } else {
- throw new MergeException("Differences array need to be sorted.");
- }
- }
-
- // reset sequence counters
- orgSeq.start();
- int orgSeqCounter = 0;
-
- modSeq.start();
- int modSeqCounter = 0;
-
- // check for each diff unit in the diff array to apply the diff
- for (int i = 0; i < differences.length; i++) {
-
- Difference currentDiff = differences[i];
-
- int operation = currentDiff.getOperation();
-
- Object currentElement;
-
- switch (operation) {
-
- case Difference.DELETE:
- // loop through the original sequence up to the expected
- // position. note that we use delta (see above comment)
- // also. we will just continue the counter without reset it.
- for (;
- orgSeqCounter < currentDiff.getOrgPosition();
- orgSeqCounter++, orgSeq.next()) {
- // empty
- }
-
- // remove the Node. note that it will NOT affect the
- // iterator sequence as ParaNodeIterator is a static one.
- removeNode((Node)(orgSeq.currentElement()));
-
- break;
-
- // if it's an add operation, then get content from original seq
- case Difference.ADD:
- // loop through the modified sequence up to the expected
- // position to get the content. As we don't need to modify
- // the sequence. we don't need to use delta to do adjustment.
- for (;
- modSeqCounter < currentDiff.getModPosition();
- modSeqCounter++, modSeq.next()) {
- // empty
- }
-
- currentElement = orgSeq.currentElement();
-
- for (;
- orgSeqCounter < currentDiff.getOrgPosition();
- orgSeqCounter++, currentElement = orgSeq.next()) {
- // empty
- }
-
- if (orgSeqCounter > orgSeq.elementCount() - 1) {
- // append the element to the end of the original sequence
- appendNode((Node)(orgSeq.currentElement()),
- (Node)(modSeq.currentElement()));
- } else {
- // insert the element BEFORE the current element
- insertNode((Node)(orgSeq.currentElement()),
- (Node)(modSeq.currentElement()));
- }
-
- break;
-
- case Difference.CHANGE:
- for (;
- modSeqCounter < currentDiff.getModPosition();
- modSeqCounter++, modSeq.next()) {
- // empty
- }
-
- currentElement = orgSeq.currentElement();
-
- for (;
- orgSeqCounter < currentDiff.getOrgPosition();
- orgSeqCounter++, currentElement = orgSeq.next()) {
- // empty
- }
-
- if (subDocumentMerge == null) {
- // use a simple replace if no row merge algorithm supply
- replaceElement((Element)orgSeq.currentElement(),
- (Element)modSeq.currentElement());
- } else {
- subDocumentMerge.merge((Element)orgSeq.currentElement(),
- (Element)modSeq.currentElement());
-
- }
- break;
-
- default:
- break;
- }
- }
- }
-
-
- /**
- * Removes the specified <code>Node</code>.
- *
- * @param node <code>Node</code> to remove.
- */
- protected void removeNode(Node node) {
-
- Node parent = node.getParentNode();
- parent.removeChild(node);
- }
-
- /**
- * Appends <code>Node</code> after the specified <code>Node</code>.
- *
- * @param oldNode <code>Node</code> to append after.
- * @param newNode <code>Node</code> to append.
- */
- protected void appendNode(Node oldNode, Node newNode) {
- Node clonedNode = XmlUtil.deepClone(oldNode, newNode);
- Node parent = oldNode.getParentNode();
- parent.appendChild(clonedNode);
- }
-
-
- /**
- * Insert <code>Node</code> before the specified <code>Node</code>.
- *
- * @param oldNode <code>Node</code> to insert before.
- * @param newNode <code>Node</code> to insert.
- */
- protected void insertNode(Node oldNode, Node newNode) {
- Node clonedNode = XmlUtil.deepClone(oldNode, newNode);
- Node parent = oldNode.getParentNode();
- parent.insertBefore(clonedNode, oldNode);
- }
-
-
- /**
- * Replace <code>Element</code>.
- *
- * @param currElem <code>Element</code> to be replaced.
- * @param newElem <code>Element</code> to replace.
- */
- protected void replaceElement(Element currElem, Element newElem) {
-
- Node clonedNode = XmlUtil.deepClone(currElem, newElem);
- Node parent = currElem.getParentNode();
- parent.replaceChild(clonedNode, currElem);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/PositionBaseRowMerge.java b/xmerge/java/org/openoffice/xmerge/merger/merge/PositionBaseRowMerge.java
deleted file mode 100644
index 96bfa0c2b1d9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/PositionBaseRowMerge.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.merge;
-
-import java.util.List;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.merger.Difference;
-import org.openoffice.xmerge.merger.Iterator;
-import org.openoffice.xmerge.merger.DiffAlgorithm;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.merger.diff.CellNodeIterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-import org.openoffice.xmerge.util.XmlUtil;
-import org.openoffice.xmerge.util.Debug;
-
-
-/**
- * This is an implementation of the <code>NodeMergeAlgorithm</code>
- * interface. It is used to merge two rows using a positional
- * comparison base method.
- */
-public final class PositionBaseRowMerge implements NodeMergeAlgorithm {
-
- /** The capabilities of this converter. */
- private ConverterCapabilities cc_;
-
-
- /**
- * Constructor.
- *
- * @param cc The <code>ConverterCapabilities</code>.
- */
- public PositionBaseRowMerge(ConverterCapabilities cc) {
- cc_ = cc;
- }
-
-
- public void merge(Node orgRow, Node modRow) {
-
- Iterator orgCells = new CellNodeIterator(cc_, orgRow);
- Iterator modCells = new CellNodeIterator(cc_, modRow);
-
- mergeCellSequences(orgCells, modCells);
- }
-
-
- // used to compare the cell 1 by 1
- private void mergeCellSequences(Iterator orgSeq, Iterator modSeq) {
-
- int i, j;
- boolean needMerge = true;
- Element orgCell, modCell;
-
- Object orgSeqObject = orgSeq.start();
- Object modSeqObject = modSeq.start();
-
- while (orgSeqObject != null) {
-
-
- needMerge = true;
-
- if (modSeqObject == null) {
- // no corresponding cell in the target, empty out the cell
- SheetUtil.emptyCell(cc_, (Node)orgSeqObject);
- orgSeqObject = orgSeq.next();
-
- } else {
-
- // compare the cell directly
- if (!orgSeq.equivalent(orgSeqObject, modSeqObject)) {
-
- orgCell = (Element)orgSeqObject;
- modCell = (Element)modSeqObject;
-
- // check whether the original cell with multiple column
- // if so, need to split one out for merge
- String orgColRepeated = orgCell.getAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED);
- String modColRepeated = modCell.getAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED);
-
- int orgColNum = 1;
- int modColNum = 1;
-
- if (orgColRepeated.length() > 0) {
- orgColNum =
- Integer.valueOf(orgColRepeated).intValue();
- }
- if (modColRepeated.length() > 0) {
- modColNum =
- Integer.valueOf(modColRepeated).intValue();
- }
-
- // try to find out the common number of repeated cols
- if (orgColNum == modColNum) {
- orgSeqObject = orgSeq.next();
- modSeqObject = modSeq.next();
-
- // cut the original cell into 2 half, first half
- // have the repeated attribute = modify cell attr
- } else if (orgColNum > modColNum) {
- Element orgSplitCell = splitColRepeatedCell(
- orgCell, modColNum,
- orgColNum - modColNum);
- // it may equal after the split!
- if (orgSeq.equivalent(orgSplitCell, modCell)) {
- needMerge = false;
- }
- orgCell = orgSplitCell;
- modSeqObject = modSeq.next();
-
- // cut the modified cell into 2 half, first half
- // have the repeated attribute = original cell attr
- } else {
- Element modSplitCell = splitColRepeatedCell(
- modCell, orgColNum,
- modColNum - orgColNum);
- // it may equal after the split!
- if (modSeq.equivalent(orgCell, modSplitCell)) {
- needMerge = false;
- }
- modCell = modSplitCell;
- orgSeqObject = orgSeq.next();
- }
-
- if (needMerge) {
- mergeCells(orgCell, modCell);
- }
-
- } else {
- // cells are equivalent, move on to next one.
- orgSeqObject = orgSeq.next();
- modSeqObject = modSeq.next();
- } // end if-else
- } // end if-else
- } // end while loop
-
- // get the one of the original cell, so that the cloned node
- // can base it to find the document node
- orgCell = (Element)orgSeq.start();
-
- // add any extra cells to the original cell sequence.
- for (; modSeqObject != null; modSeqObject = modSeq.next()) {
- Node clonedNode = XmlUtil.deepClone(orgCell, (Node)modSeqObject);
- Node parent = orgCell.getParentNode();
- parent.appendChild(clonedNode);
- }
- }
-
-
- private Element splitColRepeatedCell(Element orgCell,
- int splitNum, int orgNum) {
- // NOTE: should we really want to do deep clone?
- // in most the case, it is an empty cell, but the
- // specification didn't forbid any node to use multiple
- // column attributes. i.e. the node can contain text
- // nodes or other things under it.
- Element splitCell = (Element)(orgCell.cloneNode(true));
-
- if (splitNum > 1) {
- splitCell.setAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED,
- String.valueOf(splitNum));
- } else if (splitNum == 1) {
- splitCell.removeAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED);
- }
- if (orgNum > 1) {
- orgCell.setAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED,
- String.valueOf(orgNum));
- } else if (orgNum == 1) {
- orgCell.removeAttribute(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED);
- }
-
- Node parentNode = orgCell.getParentNode();
- parentNode.insertBefore(splitCell, orgCell);
-
- return splitCell;
- }
-
-
- private void mergeCells(Element orgCell, Element modCell) {
-
- // remove all the supported attributes and possible text child for
- // string cells
- SheetUtil.emptyCell(cc_, orgCell);
-
- // copy all the supported attributes and possible text child from
- // the modified cell
- NamedNodeMap attrNodes = modCell.getAttributes();
-
- if (attrNodes != null) {
-
- // copy the first text:p node. As it's not necessary only string
- // type cell can have a text:p section.
- NodeList paraNodes =
- modCell.getElementsByTagName(OfficeConstants.TAG_PARAGRAPH);
-
- Node firstParaNode = paraNodes.item(0);
-
- // try to clone the node
- if (firstParaNode != null) {
-
- Node clonedNode = XmlUtil.deepClone(orgCell, firstParaNode);
-
- // insert as the first child of the original cell
- Node firstChild = orgCell.getFirstChild();
- if (firstChild != null) {
- orgCell.insertBefore(clonedNode, firstChild);
- } else {
- orgCell.appendChild(clonedNode);
- }
- }
-
- // check all the attributes and copy those we supported in
- // converter
- // NOTE: for attribute list, refer to section 4.7.2 in specification
- int len = attrNodes.getLength();
-
- for (int i = 0; i < len; i++) {
- Node attr = attrNodes.item(i);
-
- // copy the supported attrs
- if (cc_.canConvertAttribute(OfficeConstants.TAG_TABLE_CELL,
- attr.getNodeName())) {
- orgCell.setAttribute(attr.getNodeName(),
- attr.getNodeValue());
- }
- }
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/SheetMerge.java b/xmerge/java/org/openoffice/xmerge/merger/merge/SheetMerge.java
deleted file mode 100644
index a2aa154a7e3a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/SheetMerge.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.merge;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.merger.NodeMergeAlgorithm;
-import org.openoffice.xmerge.util.Debug;
-
-/**
- * This class extends the <code>DocumentMerge</code> class.
- * This class will merge two spreadsheet documents.
- * The main difference between this implementation and
- * <code>DocumentMerge</code>
- * is that this merge will try to maintain unsupported features by
- * examing the cell <code>node</code> objects one by one when it
- * removes a node from the original <code>Iterator</code>.
- *
- * @author smak
- */
-public final class SheetMerge extends DocumentMerge {
-
- /**
- * Constructor.
- *
- * @param cc The <code>ConverterCapabilities</code>.
- * @param merge The <code>NodeMergeAlgorithm</code>.
- */
- public SheetMerge(ConverterCapabilities cc, NodeMergeAlgorithm merge) {
- super(cc, merge);
- }
-
-
- /**
- * Remove specified <code>Node</code>.
- *
- * @param node <code>Node</code> to remove.
- */
- protected void removeNode(Node node) {
-
- clearRow(node);
- }
-
-
- /**
- * Clear the row corresponding to the <code>Node</code>
- *
- * @param node <code>Node</code> containing the row to clear.
- */
- private void clearRow(Node node) {
- NodeList children = node.getChildNodes();
- int numOfChildren = children.getLength();
-
- Node child;
-
- // clear all the cells under the row node but maintain any unsupported
- // features
- // TODO: we can actually check anything left after the clear up.
- // if there is nothing left, then we can even delete the cell nodes
- for (int i = 0; i < numOfChildren; i++) {
- SheetUtil.emptyCell(cc_, children.item(i));
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/SheetUtil.java b/xmerge/java/org/openoffice/xmerge/merger/merge/SheetUtil.java
deleted file mode 100644
index 7ec99af85324..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/SheetUtil.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.merger.merge;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.NamedNodeMap;
-
-import org.openoffice.xmerge.ConverterCapabilities;
-import org.openoffice.xmerge.merger.diff.CellNodeIterator;
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-
-/**
- * Utility methods to handle sheet XML tree.
- */
-public class SheetUtil {
-
- /**
- * <p>Empty the content of a cell value. This includes the following:
- * </p>
- *
- * <p><ul><li>
- * Remove all of the supported attributes.
- * </li><li>
- * Remove the first <i>text:p</i> <code>Node</code> for most of the cells.
- * </li></ul></p>
- *
- * @param cc The <code>ConverterCapabilities</code>.
- * @param node The <code>Node</code>.
- */
- public static void emptyCell(ConverterCapabilities cc, Node node) {
-
- NamedNodeMap attrNodes = node.getAttributes();
-
- if (attrNodes != null) {
-
- // empty the first text:p node.
- // Note: it's not necessary only string type cell contain text:p
- // basically, all different type of cell will contain one
- Element cell = (Element)node;
-
- // get the paragraph node list
- NodeList paraNodes =
- cell.getElementsByTagName(OfficeConstants.TAG_PARAGRAPH);
-
- Node firstParaNode = paraNodes.item(0);
-
- // remove the first paragraph element node
- if (firstParaNode != null) {
- Node parent = firstParaNode.getParentNode();
- parent.removeChild(firstParaNode);
- }
-
- // check all the attributes and remove those we supported in
- // converter
- // NOTE: for attribute list, refer to section 4.7.2 in specification
- int len = attrNodes.getLength();
-
- for (int i = 0; i < len; ) {
- Node attr = attrNodes.item(i);
-
- // when we hit the end of the attribute nodes, return
- // it may happen sooner as we keep on removing nodes
- if (attr == null) {
- break;
- }
- // remove the supported attr except columns repeated attribute
- if (cc.canConvertAttribute(OfficeConstants.TAG_TABLE_CELL,
- attr.getNodeName()) &&
- !attr.getNodeName().equals(
- OfficeConstants.ATTRIBUTE_TABLE_NUM_COLUMNS_REPEATED)) {
-
- attrNodes.removeNamedItem(attr.getNodeName());
- } else {
- i++;
- }
- }
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/build.xml b/xmerge/java/org/openoffice/xmerge/merger/merge/build.xml
deleted file mode 100644
index d93c81805bc9..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/build.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxm_merge" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxm_merge"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package"
- value="org/openoffice/xmerge/merger/merge"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/CharacterBaseParagraphMerge.java"/>
- <include name="${package}/PositionBaseRowMerge.java"/>
- <include name="${package}/DocumentMerge.java"/>
- <include name="${package}/SheetMerge.java"/>
- <include name="${package}/SheetUtil.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/makefile.mk b/xmerge/java/org/openoffice/xmerge/merger/merge/makefile.mk
deleted file mode 100644
index 5bb3dbecf955..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxm_merge
-PRJ=../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/merger/merge/package.html b/xmerge/java/org/openoffice/xmerge/merger/merge/package.html
deleted file mode 100644
index 183ef913f405..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/merge/package.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.merger.diff package</title>
-</head>
-
-<body bgcolor="white">
-<p>Provides implementations for the {@link
-org.openoffice.xmerge.merger.MergeAlgorithm
-MergeAlgorithm} interface, the {@link
-org.openoffice.xmerge.merger.NodeMergeAlgorithm
-NodeMergeAlgorithm} interface, and related support classes.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/merger/package.html b/xmerge/java/org/openoffice/xmerge/merger/package.html
deleted file mode 100644
index 49d5b54f59c8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/merger/package.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.merger package</title>
-</head>
-
-<body bgcolor="white">
-<p>The <code>DiffAlgorithm</code> and <code>MergeAlgorithm</code>
-are used to provide the merge capabilities of this project.</p>
-
-<p>Merge is useful when an <code>OfficeDocument</code>
-is converted to a &quot;Device&quot; <code>Document</code> format,
-and the &quot;Device&quot; <code>Document</code> version is modified.
-Those changes can be merged back into the original
-<code>OfficeDocument</code> with the merger. The merger is capable
-of doing this even if the &quot;Device&quot; format is lossy in
-comparison to the <code>OfficeDocument</code> format.</p>
-
-<p>The <code>DiffAlgorithm</code> generates a list of
-<code>Difference</code> objects that represent the
-differences between two <code>OfficeDocument</code> objects.
-It is assumed that one is the original <code>OfficeDocument</code>
-object and the other is a &quot;lossy&quot; version of the same
-<code>Document</code> with edits to be merged. Typically the
-&quot;lossy&quot; version is created by converting a &quot;Device&quot
-<code>Document</code> back into an <code>OfficeDocument</code>.
-
-<p>The <code>MergeAlgorithm</code> takes the <code>Difference</code>
-objects as input, and creates a merged <code>OfficeDocument</code>.
-A merged <code>OfficeDocument</code> has the following features:</p>
-
-<p><ul>
-<li>Tags in the <code>OfficeDocument</code> that are not
- supported in the device format are not altered or removed.
-<li>Changes made to the device format are merged back into
- the <code>OfficeDocument</code> in the location determined by
- the <code>DiffAlgorithm</code>.
-</ul></p>
-
-<p>Each converter provides an implementation of the
-{@link org.openoffice.xmerge.ConverterCapabilities
-ConverterCapabilities} which specifies which
-<code>OfficeDocument</code> tags are supported for the
-device format.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/package.html b/xmerge/java/org/openoffice/xmerge/package.html
deleted file mode 100644
index d1a36fc1488a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/package.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge package</title>
-</head>
-
-<body bgcolor="white">
-
-<p>Provides interfaces for converting between two <code>Document</code>
-formats, and supports a &quot;merge&quot; interface for merging back
-changes from a &quot;lossy&quot; format back into a rich format.</p>
-
-<p>The {@link org.openoffice.xmerge.Convert
-Convert} object encapsulates the conversion of one format to/from another
-format. The user requests a <code>Convert</code> object via the
-<code>ConverterFactory</code>.</p>
-
-<p>The <code>Convert</code> class encapsulates a specific plug-in.
-A plug-in can support deserialization (convert from &quot;Device&quot;
-to &quot;Office&quot;) and/or serialization (convert from
-&quot;Office&quot; to &quot;Device&quot;). If a plug-in supports
-both deserialization and serialization, then it can also support
-&quot;merge&quot;.</p>
-
-<p>To support conversions where a single input <code>Document</code> can
-create multiple output <code>Document</code> objects, data is passed in
-and out of the conversion functions via a <code>ConvertData</code> object.
-This <code>ConvertData</code> can contain one or more <code>Document</code>
-objects. It is assumed that the client will know when to pass multiple
-files into a specific plug-in, and that the plug-in will know how to
-handle the multiple files.</p>
-
-<p>Merging is useful when converting from a rich <code>Document</code>
-format to a more lossy format. Then the user may modify the
-<code>Document</code> in the lossy format, and &quot;merge&quot; those
-changes back into the original &quot;rich&quot; <code>Document</code>.
-Each merge implementation provides a <code>ConverterCapabilities</code>
-implementation so that the merge logic knows what changes from the
-&quot;lossy&quot; format to merge into the original &quot;rich&quot;
-<code>Document</code>.</p>
-
-<p>Each plug-in must be registed via the singleton ConverterInfoMgr
-object via its {@link
-org.openoffice.xmerge.util.registry.ConverterInfoMgr#addPlugIn
-addPlugIn} method.</p>
-
-<h2>Providing implementations</h2>
-
-<p>The plug-in implementation must include the <code>getDeviceDocument</code>
-and <code>getOfficeDocument</code> methods. These functions need to return
-the appropriate type of <code>Document</code> for the plug-in. It may be
-necessary to create a new implementation of the <code>Document</code>
-interface if one does not exist that meets the needs of the plug-in.</p>
-
-<p>Currently, base implementations for working with StarWriter XML
-<code>Document</code> objects are available via the
-<a href="converter/xml/sxc/package-summary.html#package_description">
-org.openoffice.xmerge.xml.sxw</a>
-package, and StarCalc XML <code>Document</code> objects via the
-<a href="converter/xml/sxw/package-summary.html#package_description">
-org.openoffice.xmerge.xml.sxc</a>
-package.</p>
-
-<h2>TODO/IDEAS list</h2>
-
-<p><ol>
-<li>An idea is to combine the <code>ConvertData</code> and the
- <code>Convert</code> classes, so that a <code>ConvertData</code>
- knows what it can convert into and whether or not it can merge.
- Then a user would call convert/merge methods on the
- <code>ConvertData</code> class, which returns a
- <code>ConvertData</code> object that likewise knows what it can
- convert/merge into.</li>
-<li><code>DocumentSerialize</code> constructors and the
- <code>DocumentDeserializer.deserializer</code> method could pass
- in a <code>ConvertData</code> object rather than assuming
- a single <code>Document</code> will represent a &quot;rich&quot;
- <code>Document</code>.</li>
-<li>May need to add a <code>PluginFactory.setProperties</code>
- method for adding properties specific to each converter.</li>
-</ol></p>
-
-</body>
-</html>
-
diff --git a/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.java b/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.java
deleted file mode 100644
index d5389372cdc0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.test;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.FileReader;
-import java.io.InputStream;
-import java.io.BufferedInputStream;
-import java.util.Properties;
-import java.util.Vector;
-import java.util.Enumeration;
-
-/**
- * Loads a properties file so that registry knows which plug-ins
- * it needs to load.
- *
- * @author: Martin Maher
- */
-public class ConverterInfoList {
-
- private static String defaultPropsFile = "ConverterInfoList.properties";
-
- private Vector jars;
- private Properties props = null;
-
-
- /**
- * This constructor loads and reads the default properties file.
- * The default property file name is:
- * &quot;ConverterInfoList.properties&quot;.
- *
- * @throws IOException If any I/O error occurs.
- */
- public ConverterInfoList() throws IOException {
- this(defaultPropsFile);
- }
-
- /**
- * This constructor loads and reads the properties file.
- *
- * @param propsFile The properties file to load.
- *
- * @throws IOException If any I/O error occurs.
- */
- public ConverterInfoList(String propsFile) throws IOException {
-
- Class c = this.getClass();
- InputStream is = c.getResourceAsStream(propsFile);
- BufferedInputStream bis = new BufferedInputStream(is);
- props = new Properties();
- props.load(bis);
- bis.close();
-
- int i = 1;
- String jarFileName = new String();
- jars = new Vector();
-
- while ((jarFileName = props.getProperty("jarname" + i)) != null) {
- jars.add(jarFileName);
- i++;
- }
- }
-
-
- /**
- * Returns a <code>Vector</code> containing a list of
- * <code>String</code> objects. Each <code>String</code>
- * describes a plug-in to be loaded into the registry.
- *
- *
- * @return A <code>Vector</code> containing a list of
- * <code>String</code> objects. Each
- * <code>String</code> describes a plug-in to be
- * loaded into the registry.
- */
- public Enumeration getJarFileEnum() {
-
- return jars.elements();
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties b/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties
deleted file mode 100644
index d8bf3483b95d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-#
-# Jarfiles to be loaded
-#
-jarname1=file:///jarDirectory/htmlsoff.jar
-
-#
-# Pocket Word plugin
-#
-jarname2=file:///jarDirectory/pocketword.jar
diff --git a/xmerge/java/org/openoffice/xmerge/test/Driver.java b/xmerge/java/org/openoffice/xmerge/test/Driver.java
deleted file mode 100644
index 446dabfa65f8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/test/Driver.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.test;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.FileOutputStream;
-import java.io.FileInputStream;
-import java.io.File;
-
-import org.openoffice.xmerge.Convert;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConverterFactory;
-import org.openoffice.xmerge.test.ConverterInfoList;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import org.openoffice.xmerge.util.registry.ConverterInfoMgr;
-import org.openoffice.xmerge.util.registry.ConverterInfoReader;
-import org.openoffice.xmerge.DocumentMerger;
-
-/**
- * This class is a command-line driver for the converter framework.
- * It is expected that this code will be later called by the device
- * server. It does some basic validation of the command-line
- * parameters.
- */
-public final class Driver {
-
- /** Command-line parameter. */
- private String fromMime = null;
-
- /** Command-line parameter. */
- private String toMime = null;
-
- /** mergeFile name. */
- private String mergeFile = null;
-
- /** Command-line parmeter. */
- private Vector deviceFiles = new Vector();
-
- /** Command-line parmeter shortcuts. */
- private String mimeTypes[] = {
- "sxc", "staroffice/sxc",
- "sxw","staroffice/sxw"
- };
-
-
- /**
- * Main.
- *
- * @param args The argument passed on the command line.
- */
- public static void main(String args[]) {
-
- // Register jarfiles
- //
- String propFile = "ConverterInfoList.properties";
- ConverterInfoList cil = null;
- try {
- cil = new ConverterInfoList(propFile);
- } catch (Exception e) {
- System.out.println("\nCannot not load " + propFile +
- " property file");
- }
-
- Enumeration jarInfoEnumeration;
- ConverterInfoReader cir;
-
- Enumeration jarFileEnum = cil.getJarFileEnum();
- while (jarFileEnum.hasMoreElements()) {
- String jarName = (String) jarFileEnum.nextElement();
- try {
- cir = new ConverterInfoReader(jarName, false);
- jarInfoEnumeration = cir.getConverterInfoEnumeration();
- ConverterInfoMgr.addPlugIn(jarInfoEnumeration);
- } catch (Exception e) {
- System.out.println("\nCannot not load <" + jarName +
- "> from the <" + propFile + "> property file");
- }
- }
-
- try {
-
- Driver app = new Driver();
- app.parseCommandLine(args);
- app.doConversion();
- } catch (IllegalArgumentException ex) {
-
- String msg = ex.getMessage();
- if (msg != null) System.out.println("\n" + msg);
- showUsage();
-
- } catch (Exception ex) {
-
- String msg = ex.getMessage();
- if (msg != null) System.out.println("\n" + msg);
- ex.printStackTrace();
- }
- }
-
-
- /**
- * Gets a <code>Convert</code> object using the
- * <code>ConverterFactory</code> and does the conversion using
- * this object.
- *
- * @throws IllegalArgumentException If an argument is invalid.
- */
- private void doConversion() throws IllegalArgumentException {
-
- ConverterFactory cf = new ConverterFactory();
- Convert myConvert = cf.getConverter(fromMime, toMime);
- String processFile = null;
-
- if (myConvert == null) {
- System.out.println("\nNo plug-in exists to convert from <" +
- fromMime + "> to <" + toMime + ">");
- throw new IllegalArgumentException();
- }
-
- try {
- Enumeration dfEnum = deviceFiles.elements();
- while (dfEnum.hasMoreElements()) {
- processFile = (String)dfEnum.nextElement();
- File f = new File(processFile);
-
- // Make sure the input file actually exists before using it
- if (!f.exists()) {
- System.out.println(processFile + " does not exist!");
- System.exit(0);
- }
- FileInputStream fis = new FileInputStream(f);
- myConvert.addInputStream(f.getName(), fis);
- }
- } catch (Exception addExcept) {
- System.out.println("\nFile <" + processFile + "> is not in <" +
- fromMime + "> format");
- throw new IllegalArgumentException();
- }
-
- ConvertData dataOut = null;
-
- try {
- dataOut = myConvert.convert();
- } catch (Exception convertExcept) {
- System.out.println("\nThere was an error in the conversion");
- convertExcept.printStackTrace();
- }
-
- if (dataOut != null ) {
-
- if (mergeFile == null) {
- Enumeration docEnum = dataOut.getDocumentEnumeration();
- while (docEnum.hasMoreElements()) {
- Document docOut = (Document)docEnum.nextElement();
- String fileName = docOut.getFileName();
- try {
- FileOutputStream fos = new FileOutputStream(fileName);
- docOut.write(fos);
- fos.flush();
- fos.close();
- } catch (Exception writeExcept) {
- System.out.println("\nThere was an writing out file <" +
- fileName + ">");
- writeExcept.printStackTrace();
- }
- }
- } else {
- try {
- FileInputStream mergeIS = new FileInputStream(mergeFile);
- Document mergeDoc = myConvert.getOfficeDocument(mergeFile, mergeIS);
- DocumentMerger merger = myConvert.getDocumentMerger(mergeDoc);
- Enumeration mergeDocEnum = dataOut.getDocumentEnumeration();
- Document convertedFile = (Document)mergeDocEnum.nextElement();
-
- merger.merge(convertedFile);
- mergeIS.close();
-
- FileOutputStream fos = new FileOutputStream(mergeFile);
- mergeDoc.write(fos);
- fos.flush();
- fos.close();
- } catch (Exception mergeExcept) {
- System.out.println("\nThere was an error in the merge");
- mergeExcept.printStackTrace();
- }
- }
- }
- }
-
-
- /**
- * Display usage.
- */
- private static void showUsage() {
-
- System.out.println("\nUsage:");
- System.out.println("\n java org.openoffice.xmerge.test.Driver <args>");
- System.out.println("\n where <args> is as follows:");
- System.out.println(" -from <MIMETYPE> -to <MIMETYPE> [ -merge <OrigDoc ] <document>\n");
- }
-
-
- /**
- * Parse command-line arguments.
- *
- * @param args Array of command line arguments.
- *
- * @throws IllegalArgumentException If an argument is invalid.
- */
- private void parseCommandLine(String args[])
- throws IllegalArgumentException {
-
- if (args.length == 0) {
- throw new IllegalArgumentException();
- }
-
- for (int i = 0; i < args.length; i++) {
- String arg = args[i];
-
- if ("-to".equals(arg)) {
- toMime = extractArg(i, args);
- for (int j = 0; j < mimeTypes.length; j+=2) {
- if(mimeTypes[j].equals(extractArg(i, args)))
- toMime = mimeTypes[j+1];
- }
- i++;
- } else if ("-from".equals(arg)) {
- fromMime = extractArg(i, args);
- for (int j = 0; j < mimeTypes.length; j+=2) {
- if(mimeTypes[j].equals(extractArg(i, args)))
- fromMime = mimeTypes[j+1];
- }
- i++;
- } else if ("-merge".equals(arg)) {
- mergeFile = extractArg(i, args);
- if (!isZip(mergeFile)) {
- throw new
- IllegalArgumentException("Arg " + i +
- ": expected zip, got " +
- mergeFile);
- }
- i++;
- } else {
- deviceFiles.add(arg);
- }
- }
-
- System.out.println("\nConverting from " + fromMime + " to " + toMime +
- ((mergeFile != null) ? " with merge " : " "));
- }
-
-
- /**
- * Extract the next argument from the array, while checking to see
- * that the array size is not exceeded. Throw a friendly error
- * message in case the arg is missing.
- *
- * @param i Argument index.
- * @param args Array of command line arguments.
- *
- * @return The argument with the specified index.
- *
- * @throws IllegalArgumentException If an argument is invalid.
- */
- private String extractArg(int i, String args[])
- throws IllegalArgumentException {
-
- if (i+1 < args.length)
- return args[i+1];
- else throw new
- IllegalArgumentException("Arg " + i +
- ": expected arg for " + args[i]);
- }
-
-
- /**
- * Simple validation for Office ZIP files.
- *
- * @param zipName The name of the ZIP file.
- *
- * @return true if zipName is valid, false otherwise.
- */
- private boolean isZip(String zipName) {
-
- String str = zipName.toLowerCase();
- if (str.endsWith("sxw") || zipName.endsWith("sxc")) {
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/test/build.xml b/xmerge/java/org/openoffice/xmerge/test/build.xml
deleted file mode 100644
index 7c3a9d9e8319..000000000000
--- a/xmerge/java/org/openoffice/xmerge/test/build.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_joox_test" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_joox_test"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package" value="org/openoffice/xmerge/test"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set wether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/ConverterInfoList.java"/>
- <include name="${package}/Driver.java"/>
- </javac>
- <copy todir="${build.class}/${package}">
- <fileset dir=".">
- <include name="*.properties"/>
- </fileset>
- </copy>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
diff --git a/xmerge/java/org/openoffice/xmerge/test/makefile.mk b/xmerge/java/org/openoffice/xmerge/test/makefile.mk
deleted file mode 100644
index cbb251658697..000000000000
--- a/xmerge/java/org/openoffice/xmerge/test/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_joox_test
-PRJ=../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/util/ActiveSyncDriver.java b/xmerge/java/org/openoffice/xmerge/util/ActiveSyncDriver.java
deleted file mode 100644
index 9a1f42eeb3c8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/ActiveSyncDriver.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileInputStream;
-import java.util.StringTokenizer;
-
-import java.net.URL;
-
-import org.openoffice.xmerge.Convert;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.ConverterFactory;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import org.openoffice.xmerge.util.registry.ConverterInfoMgr;
-import org.openoffice.xmerge.util.registry.ConverterInfoReader;
-
-public class ActiveSyncDriver {
- public static void main(String[] args) {
- if (args.length != 4) {
- return;
- }
-
- ActiveSyncDriver asd = new ActiveSyncDriver();
-
- try {
- // At the moment can't really signal back to the calling DLL
- asd.Convert(args[0], args[1], args[2], args[3]);
- }
- catch (Exception e) {
- return;
- }
- }
-
-
- private boolean Convert(String srcMime, String dstMime, String srcFile, String dstFile) throws Exception {
- /*
- * The classpath passed in by XMergeSync.dll should contain all of the
- * jar files, but at the least it will contain xmerge.jar, so strip off
- * the xmerge.jar portion and use the remainder to provide a root for
- * the Pocket Word and Pocket Excel plugins.
- */
- String ooClassDir = null;
- String strClassPath = System.getProperty("java.class.path");
-
- StringTokenizer st = new StringTokenizer(strClassPath, ";");
-
- // There should be at least one element, but just in case
- while (st.hasMoreTokens()) {
- String s = st.nextToken();
-
- if (s.endsWith("xmerge.jar")) {
- ooClassDir = s.substring(0, s.indexOf("xmerge.jar"));
- }
- }
-
- if (ooClassDir == null) {
- return true;
- }
-
-
- /*
- * The XMergeSync.dll should will have checked for the presence of the
- * jars at the same location already.
- *
- * Because they can be installed separately, though, the MIME types need
- * to be check to see which one to load.
- */
- File pluginJar = null;
- if (srcMime.equals("staroffice/sxw") || srcMime.equals("application/x-pocket-word"))
- {
- pluginJar = new File(ooClassDir + "pocketWord.jar");
- }
- else if (srcMime.equals("staroffice/sxc") || srcMime.equals("application/x-pocket-excel"))
- {
- pluginJar = new File(ooClassDir + "pexcel.jar");
- }
-
- ConverterInfoReader cirPlugin = new ConverterInfoReader(pluginJar.toURL().toString(), false);
-
- ConverterInfoMgr.addPlugIn(cirPlugin.getConverterInfoEnumeration());
-
- ConverterFactory cf = new ConverterFactory();
- Convert conv = cf.getConverter(srcMime, dstMime);
-
- if (conv == null) {
- return false;
- }
-
- // Everything is registered so do the conversion
- FileInputStream fis = new FileInputStream(srcFile);
- FileOutputStream fos = new FileOutputStream(dstFile);
-
- conv.addInputStream(srcFile, fis);
-
- ConvertData dataOut;
- try {
- dataOut = conv.convert();
- }
- catch (Exception e) {
- return false;
- }
-
- if (dataOut == null) {
- return false;
- }
-
- // Get the document and write it out.
- Document doc = (Document)dataOut.getDocumentEnumeration().nextElement();
- if (doc == null) {
- return false;
- }
-
- doc.write(fos);
- fos.flush();
- fos.close();
-
- return true;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/util/ColourConverter.java b/xmerge/java/org/openoffice/xmerge/util/ColourConverter.java
deleted file mode 100644
index 345a4e76ef6f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/ColourConverter.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util;
-
-
-import java.awt.Color;
-
-/**
- * Utility class mapping RGB colour specifications to the colour indices used
- * in the Pocket PC. The original converter was written for use with Pocket
- * Word it was later put into the utils so Pocket excel could use this code
- * also. For this reason the defualt values are those used by Pocket Word but
- * a colour table can be passed in through the constructor to map the 16
- * values to a colour table.
- *
- * These colour indices are based on the Windows VGA 16 colour palette, which
- * later was used as the basis for the named colours in the HTML 3.2
- * specification.
- *
- * In Pocket Word's case, the match to the VGA 16 palette is not exact as it
- * swaps Grey and Silver, with Silver being the darker colour (i.e. having the
- * lower RGB value).
- */
-
-public class ColourConverter {
-
- /** Colour table index for Black */
- private static final short BLACK = 0;
-
- /** Colour table index for Silver */
- private static final short SILVER = 1;
-
- /** Colour table index for Grey */
- private static final short GREY = 2;
-
- /** Colour table index for White */
- private static final short WHITE = 3;
-
- /** Colour table index for Red */
- private static final short RED = 4;
-
- /** Colour table index for Lime */
- private static final short LIME = 5;
-
- /** Colour table index for Blue */
- private static final short BLUE = 6;
-
- /** Colour table index for Aqua */
- private static final short AQUA = 7;
-
- /** Colour table index for Fuchsia */
- private static final short FUCHSIA = 8;
-
- /** Colour table index for Yellow */
- private static final short YELLOW = 9;
-
- /** Colour table index for Maroon */
- private static final short MAROON = 10;
-
- /** Colour table index for Green */
- private static final short GREEN = 11;
-
- /** Colour table index for Navy */
- private static final short NAVY = 12;
-
- /** Colour table index for Teal */
- private static final short TEAL = 13;
-
- /** Colour table index for Purple */
- private static final short PURPLE = 14;
-
- /** Colour table index for Olive */
- public static final short OLIVE = 15;
-
- private short tableLookup[] = null;
-
- /**
- * Default constructor used in the case where a lookup table is not
- * required
- */
- public ColourConverter() {
-
- }
-
- /**
- * Constructor that passes in the colour lookup table. This is required in
- * cases where the 16 colour values are something other than there default
- * values (e.g. in the case of pocket Excel)
- *
- * @param short[] a 16 bit array mapping the 16 colours to there values
- */
- public ColourConverter(short lookup[]) {
-
- tableLookup = lookup;
- }
-
- /**
- * Uses the colour table it it exists to translate default values to
- * values in the colorTable
- */
- private short colourLookup(short colour) {
-
- if(tableLookup!=null) {
- return tableLookup[colour];
- } else {
- return colour;
- }
- }
-
- /**
- * Uses the colour table it it exists to translate default values to
- * values in the colorTable
- */
- private short indexLookup(short index) {
-
- short result = 0;
-
- if(tableLookup!=null) {
- for(short i = 0;i < tableLookup.length;i++) {
- if(tableLookup[i]==index)
- result = i;
- }
- } else {
- result = index;
- }
-
- return result;
- }
- /**
- * This method maps a Pocket Word colour index value to an RGB value as
- * used by OpenOffice.
- *
- * @param index The index into Pocket Word's colour table.
- *
- * @return A Color object representing the RGB value of the Pocket Word
- * colour.
- */
- public Color convertToRGB (short colour) {
-
- short index = indexLookup(colour);
-
- int r = 0;
- int g = 0;
- int b = 0;
-
- switch (index) {
- case SILVER:
- r = g = b = 128;
- break;
-
- case GREY:
- r = g = b = 192;
- break;
-
- case WHITE:
- r = g = b = 255;
- break;
-
- case RED:
- r = 255;
- break;
-
- case LIME:
- g = 255;
- break;
-
- case BLUE:
- b = 255;
- break;
-
- case AQUA:
- g = b = 255;
- break;
-
- case FUCHSIA:
- r = b = 255;
- break;
-
- case YELLOW:
- r = g = 255;
- break;
-
- case MAROON:
- r = 128;
- break;
-
- case GREEN:
- g = 128;
- break;
-
- case NAVY:
- b = 128;
- break;
-
- case TEAL:
- b = g = 128;
- break;
-
- case PURPLE:
- r = b = 128;
- break;
-
- case OLIVE:
- r = g = 128;
- break;
-
- case BLACK:
- default:
- r = g = b = 0;
- break;
- }
-
- return new Color(r, g, b);
- }
-
-
- /**
- * This method approximates an RGB value (as used by Writer) to one of the
- * 16 available colours
- *
- * Most of the supported colours have their components set to either 0, 128
- * or 255. The exception is 'Grey' which is 0xC0C0C0.
- *
- * @param colour Color object representing the RGB value of the colour.
- *
- * @return Index into the Pocket Word colour table which represents the
- * closest match to the specified colour.
- */
- public short convertFromRGB (Color colour) {
- int matchedRGB = 0;
- short indexColour = 0;
- int reducedMap[] = new int[] { 0, 0, 128 };
-
- int red = colour.getRed();
- int green = colour.getGreen();
- int blue = colour.getBlue();
-
- // We need to convert the pale colors to their base color rather than
- // white so we modify the rgb values if the colour is sufficently
- // white
- if(red>0xC0 && green>0xC0 && blue>0xC0) {
-
- if(red!=0xFF)
- red = getClosest(red, reducedMap);
- if(green!=0xFF)
- green = getClosest(green, reducedMap);
- if(blue!=0xFF)
- blue = getClosest(blue, reducedMap);
- }
-
- /*
- * Need to derive an RGB value that has been rounded to match the ones
- * Pocket Word knows about.
- */
- matchedRGB += getClosest(red) << 16;
- matchedRGB += getClosest(green) << 8;
- matchedRGB += getClosest(blue);
-
- /*
- * The colour map used by Pocket Word doesn't have any combinations of
- * values beyond 0 and any other value. A value of 255 in any RGB
- * code indicates a dominant colour. Other colours are only modifiers
- * to the principal colour(s). Thus, for this conversion, modifiers
- * can be dropped.
- */
- if ((matchedRGB & 0xFF0000) == 0xFF0000 || (matchedRGB & 0xFF00) == 0xFF00
- || (matchedRGB & 0xFF) == 0xFF) {
- if ((matchedRGB & 0xFF0000) == 0x800000) {
- matchedRGB ^= 0x800000;
- }
- if ((matchedRGB & 0xFF00) == 0x8000) {
- matchedRGB ^= 0x8000;
- }
- if ((matchedRGB & 0xFF) == 0x80) {
- matchedRGB ^= 0x80;
- }
- }
-
-
- /*
- * And now for the actual matching ...
- *
- * Colours are based on the Windows VGA 16 palette. One difference
- * though is that Pocket Word seems to switch the RGB codes for Grey
- * and Silver. In Pocket Word Silver is the darker colour leaving Grey
- * is closest to White.
- *
- * Shades of grey will be converted to either Silver or White, where
- * Grey may be a more appropraite colour. This is handled specially
- * only for Silver and White matches.
- */
- switch (matchedRGB) {
- case 0x000000:
- indexColour = BLACK;
- break;
-
- case 0x808080:
- if (!isGrey(colour)) {
- indexColour = SILVER;
- }
- else {
- indexColour = GREY;
- }
- break;
-
- case 0xFFFFFF:
- if (!isGrey(colour)) {
- indexColour = WHITE;
- }
- else {
- indexColour = GREY;
- }
- break;
-
- case 0xFF0000:
- indexColour = RED;
- break;
-
- case 0x00FF00:
- indexColour = LIME;
- break;
-
- case 0x0000FF:
- indexColour = BLUE;
- break;
-
- case 0x00FFFF:
- indexColour = AQUA;
- break;
-
- case 0xFF00FF:
- indexColour = FUCHSIA;
- break;
-
- case 0xFFFF00:
- indexColour = YELLOW;
- break;
-
- case 0x800000:
- indexColour = MAROON;
- break;
-
- case 0x008000:
- indexColour = GREEN;
- break;
-
- case 0x000080:
- indexColour = NAVY;
- break;
-
- case 0x008080:
- indexColour = TEAL;
- break;
-
- case 0x800080:
- indexColour = PURPLE;
- break;
-
- case 0x808000:
- indexColour = OLIVE;
- break;
-
- default: // Just in case!
- indexColour = BLACK;
- break;
- }
-
- return colourLookup(indexColour);
- }
-
-
- /*
- * Default implementation, checks for the closest of value to 0, 128 or 255.
- */
- private int getClosest(int value) {
- int points[] = new int[] { 0, 128, 255 };
-
- return getClosest(value, points);
- }
-
-
- /*
- * Utility method that returns the closest of the three points to the value
- * supplied.
- */
- private int getClosest(int value, int[] points) {
-
- if (value == points[0] || value == points[1] || value == points[2]) {
- return value;
- }
-
- if (value < points[1]) {
- int x = value - points[0];
- return (Math.round((float)x / (points[1] - points[0])) == 1 ? points[1] : points[0]);
- }
- else {
- int x = value - points[1];
- return (Math.round((float)x / (points[2] - points[1])) >= 1 ? points[2] : points[1]);
- }
- }
-
-
- /*
- * Checks to see if the supplied colour can be considered to be grey.
- */
- private boolean isGrey(Color c) {
- int matchedRGB = 0;
- int points[] = new int[] { 128, 192, 255 };
-
- matchedRGB += getClosest(c.getRed(), points) << 16;
- matchedRGB += getClosest(c.getGreen(), points) << 8;
- matchedRGB += getClosest(c.getBlue(), points);
-
- if (matchedRGB == 0xC0C0C0) {
- return true;
- }
-
- return false;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/Debug.java b/xmerge/java/org/openoffice/xmerge/util/Debug.java
deleted file mode 100644
index dcd5b0c8e1b0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/Debug.java
+++ /dev/null
@@ -1,341 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util;
-
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.Calendar;
-import java.util.Properties;
-import org.w3c.dom.Node;
-
-
-/**
- * This class is used for logging debug messages.
- * Currently, there are three types of logging: {@link #INFO},
- * {@link #TRACE} & {@link #ERROR}. Use the Debug.properties
- * file to set or unset each type. Also use Debug.properties
- * to set the writer to either <code>System.out</code>,
- * <code>System.err</code>, or to a file.
- *
- * @author Herbie Ong
- */
-public final class Debug {
-
- /** Informational messages. */
- public final static int INFO = 0x0001;
- /** Error messages. */
- public final static int ERROR = 0x0002;
- /** Trace messages. */
- public final static int TRACE = 0x0004;
-
- /** To set a flag. */
- public final static boolean SET = true;
- /** To unset a flag. */
- public final static boolean UNSET = false;
-
- private static int flags = 0;
- private static PrintWriter writer = null;
-
- static {
-
- try {
-
- Class c = new Debug().getClass();
- InputStream is = c.getResourceAsStream("Debug.properties");
- Properties props = new Properties();
- props.load(is);
-
- String info = props.getProperty("debug.info", "false");
- info = info.toLowerCase();
-
- if (info.equals("true")) {
- setFlags(Debug.INFO, Debug.SET);
- }
-
- String trace = props.getProperty("debug.trace", "false");
- trace = trace.toLowerCase();
-
- if (trace.equals("true")) {
- setFlags(Debug.TRACE, Debug.SET);
- }
-
- String error = props.getProperty("debug.error", "false");
- error = error.toLowerCase();
-
- if (error.equals("true")) {
- setFlags(Debug.ERROR, Debug.SET);
- }
-
- String w = props.getProperty("debug.output", "System.out");
- setOutput(w);
-
- } catch (Throwable ex) {
-
- ex.printStackTrace(System.err);
- }
- }
-
-
- /**
- * Private constructor so as not to allow any instances
- * of this class. This serves as a singleton class.
- */
- private Debug() {
- }
-
-
- /**
- * Set the output to the specified argument.
- * This method is only used internally to prevent
- * invalid string parameters.
- *
- * @param str Output specifier.
- */
- private static void setOutput(String str) {
-
- if (writer == null) {
-
- if (str.equals("System.out")) {
-
- setOutput(System.out);
-
- } else if (str.equals("System.err")) {
-
- setOutput(System.err);
-
- } else {
-
- try {
-
- setOutput(new FileWriter(str));
-
- } catch (IOException e) {
-
- e.printStackTrace(System.err);
- }
- }
- }
- }
-
-
- /**
- * Set the output to an <code>OutputStream</code> object.
- *
- * @param stream OutputStream object.
- */
- private static void setOutput(OutputStream stream) {
-
- setOutput(new OutputStreamWriter(stream));
- }
-
-
- /**
- * Set the <code>Writer</code> object to manage the output.
- *
- * @param w <code>Writer</code> object to write out.
- */
- private static void setOutput(Writer w) {
-
- if (writer != null) {
-
- writer.close();
- }
-
- writer = new PrintWriter(new BufferedWriter(w), true);
- }
-
-
- /**
- * <p>
- * This method sets the levels for debugging logs.
- * Example calls:
- * </p>
- *
- * <blockquote><pre><code>
- * Debug.setFlags( Debug.INFO, Debug.SET )
- * Debug.setFlags( Debug.TRACE, Debug.SET )
- * Debug.setFlags( Debug.INFO | Debug.TRACE, Debug.SET )
- * Debug.setFlags( Debug.ERROR, Debug.UNSET )
- * </code></pre></blockquote>
- *
- * @param f Debug flag
- * @param set Use Debug.SET to set, and Debug.UNSET to unset
- * the given flag.
- */
- private static void setFlags(int f, boolean set) {
-
- if (set) {
- flags |= f;
- } else {
- flags &= ~f;
- }
- }
-
-
- /**
- * Prints out information regarding platform.
- */
- public static void logSystemInfo() {
-
- if (writer != null) {
-
- writer.println();
- writer.println("Platform Information:");
- writer.println("OS : " + System.getProperty("os.name"));
- writer.println("Version : " + System.getProperty("os.version"));
- writer.println("Platform : " + System.getProperty("os.arch"));
- writer.println("JDK Version : " + System.getProperty("java.version"));
- writer.println("JDK Vendor : " + System.getProperty("java.vendor"));
- writer.println();
- }
- }
-
-
- /**
- * Prints out timestamp.
- */
- public static void logTime() {
-
- if (writer != null) {
-
- Date time = Calendar.getInstance().getTime();
- DateFormat dt = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
- writer.println(dt.format(time));
- }
- }
-
-
- /**
- * Checks if flag is set.
- *
- * @return true if info logging is on, otherwise false
- */
- public static boolean isFlagSet(int f) {
-
- return ((flags & f) != 0);
- }
-
-
- /**
- * <p>Log message based on the flag type.</p>
- *
- * <p>Example 1:</p>
- *
- * <blockquote><pre><code>
- * Debug.log(Debug.INFO, "info string here");
- * </code></pre></blockquote>
- *
- * <p>This logs the message during runtime if
- * <code>debug.info</code> in the properties file is
- * set to true.</p>
- *
- * <p>Example 2:</p>
- *
- * <blockquote><pre><code>
- * Debug.log(Debug.INFO | Debug.TRACE, "info string here");
- * </code></pre></blockquote>
- *
- * <p>This logs the message during runtime if debug.info or debug.trace
- * in the properties file is set to true.</p>
- *
- * @param int Log type, one of the Debug constants
- * {@link #INFO}, {@link #TRACE}, {@link #ERROR}
- * or a combination of which or'ed together.
- * @param msg The message.
- */
- public static void log(int flag, String msg) {
-
- if (isFlagSet(flag)) {
-
- if (writer != null) {
-
- writer.println(msg);
- }
- }
- }
-
-
- /**
- * Log message based on flag type plus print out stack trace
- * of the exception passed in. Refer to the other log method
- * for description.
- *
- * @param int Log type, one of the Debug constants
- * {@link #INFO}, {@link #TRACE}, {@link #ERROR}
- * or a combination of which or'ed together.
- * @param msg The message.
- * @param e Throwable object.
- */
- public static void log(int flag, String msg, Throwable e) {
-
- if (isFlagSet(flag)) {
-
- if (writer != null) {
-
- writer.println(msg);
- if (e != null)
- e.printStackTrace(writer);
- }
- }
- }
-
-
- /**
- * Converts the given bytes to a <code>String</code> of
- * Hex digits.
- *
- * @param bytes <code>byte</code> array.
- *
- * @return Hex representation in a <code>String</code>.
- */
- public static String byteArrayToHexString(byte bytes[]) {
-
- StringBuffer buff = new StringBuffer();
-
- for (int i = 0; i < bytes.length; i++) {
-
- int ch = ((int) bytes[i] & 0xff);
- String str = Integer.toHexString(ch);
- if (str.length() < 2)
- buff.append('0');
- buff.append(str);
- buff.append(' ');
- }
-
- return buff.toString();
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/Debug.properties b/xmerge/java/org/openoffice/xmerge/util/Debug.properties
deleted file mode 100644
index 4be4427837a7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/Debug.properties
+++ /dev/null
@@ -1,38 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-
-#
-# debug logging information and settings.
-#
-
-debug.info=false
-debug.trace=false
-debug.error=false
-debug.output=System.err
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/EndianConverter.java b/xmerge/java/org/openoffice/xmerge/util/EndianConverter.java
deleted file mode 100644
index 353bee82efdc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/EndianConverter.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.util;
-
-
-/**
- * <p>Helper class providing static methods to convert data to/from
- * Network Byte Order (Big Endian).</p>
- *
- * <p>With the introduction of <code>java.nio.ByteOrder</code> and
- * <code>java.nio.ByteBuffer</code> in Java 1.4, it may no longer be
- * necessary to use this class in the future.</p>
- *
- * @author Mark Murnane
- * @version 1.1
- */
-public class EndianConverter {
-
- /**
- * <p>Convert a <code>short</code> to a Little Endian representation.</p>
- *
- * @param value The <code>short</code> to be converted.
- *
- * @return Two element <code>byte</code> array containing the converted
- * value.
- */
- public static byte[] writeShort (short value) {
- byte[] leShort = new byte[2];
-
- leShort[0] = (byte) value;
- leShort[1] = (byte) (value >>> 8);
-
- return leShort;
- }
-
-
- /**
- * <p>Convert an integer to a Little Endian representation.</p>
- *
- * @param value The <code>int</code> to be converted.
- *
- * @return Four element <code>byte</code> array containing the converted
- * value.
- */
- public static byte[] writeInt (int value) {
- byte[] leInt = new byte[4];
-
- leInt[0] = (byte) value;
- leInt[1] = (byte) (value >>> 8);
- leInt[2] = (byte) (value >>> 16);
- leInt[3] = (byte) (value >>> 24);
-
- return leInt;
- }
-
- /**
- * <p>Converts a <code>double</code> to a Little Endian representation
- * of a float in IEEE-754 format.
- *
- * <p>An array with more than eight elements can be used, but only the first
- * eight elements will be read.</p>
- *
- * @param value <code>double</code> containing the value to be converted
- *
- * @return <code>byte</code> array containing the LE representation of a IEEE-754 float
- */
- public static byte[] writeDouble(double value) {
-
- long myDouble = Double.doubleToLongBits(value);
- byte[] leDouble = new byte[8];
-
- leDouble[0] = (byte) (myDouble >>> 0);
- leDouble[1] = (byte) (myDouble >>> 8);
- leDouble[2] = (byte) (myDouble >>> 16);
- leDouble[3] = (byte) (myDouble >>> 24);
- leDouble[4] = (byte) (myDouble >>> 32);
- leDouble[5] = (byte) (myDouble >>> 40);
- leDouble[6] = (byte) (myDouble >>> 48);
- leDouble[7] = (byte) (myDouble >>> 56);
-
- return leDouble;
- }
-
- /**
- * <p>Convert a Little Endian representation of a short to a Java
- * <code>short</code> (Network Byte Order).</p>
- *
- * <p>An array with more than two elements can be used, but only the first
- * two elements will be read.</p>
- *
- * @param value <code>byte</code> array containing the LE representation
- * of the value.
- *
- * @return <code>short</code> containing the converted value.
- */
- public static short readShort (byte[] value) {
- int high, low;
-
- high = value[1] & 0xFF;
- low = value[0] & 0xFF;
-
- return (short)(high << 8 | low);
- }
-
-
- /**
- * <p>Convert a Little Endian representation of an integer to a Java
- * <code>int</code> (Network Byte Order).</p>
- *
- * <p>An array with more than four elements can be used, but only the first
- * four elements will be read.</p>
- *
- * @param value <code>byte</code> array containing the LE representation
- * of the value.
- *
- * @return <code>int</code> containing the converted value.
- */
- public static int readInt(byte[] value) {
- int number = 0;
-
- for (int i = 0; i < 4; i++) {
- number |= (value[i] & 0xFF) << ( i * 8);
- }
-
- return number;
- }
-
- /**
- * <p>Convert a Little Endian representation of a float in IEEE-754 Little
- * Endian to a Java <code>double</code> (Network Byte Order).</p>
- *
- * <p>An array with more than eight elements can be used, but only the first
- * eight elements will be read.</p>
- *
- * @param value <code>byte</code> array containing the LE representation
- * of a IEEE-754 float.
- *
- * @return <code>double</code> containing the converted value.
- */
- public static double readDouble(byte[] value) {
-
- long lvalue = ( ((long)(value[7]) << 56) +
- ((long)(value[6]&0xFF) << 48) +
- ((long)(value[5]&0xFF) << 40) +
- ((long)(value[4]&0xFF) << 32) +
- ((long)(value[3]&0xFF) << 24) +
- ((long)(value[2]&0xFF) << 16) +
- ((long)(value[1]&0xFF) << 8) +
- (long)(value[0]&0xFF));
-
- return Double.longBitsToDouble(lvalue);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/util/IntArrayList.java b/xmerge/java/org/openoffice/xmerge/util/IntArrayList.java
deleted file mode 100644
index 41fa1ce6085b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/IntArrayList.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util;
-
-import java.util.ArrayList;
-import java.lang.Integer;
-
-/**
- * This is a convenience class used to create an
- * <code>ArrayList</code> of integers.
- */
-public class IntArrayList {
-
- /** The list to hold our integers. */
- private ArrayList list;
-
- /**
- * Constructor.
- * Creates the list with 0 length.
- */
- public IntArrayList() {
- list = new ArrayList();
- }
-
-
- /**
- * Constructor.
- *
- * @param initialCapacity Initial capacity of the list.
- */
- public IntArrayList(int initialCapacity) {
- list = new ArrayList(initialCapacity);
- }
-
-
- /**
- * This method ensures that the list is large enough for
- * <code>minCapacity</code> elements.
- *
- * @param minCapacity The minimum capacity of the list.
- */
- public void ensureCapacity(int minCapacity) {
-
- list.ensureCapacity(minCapacity);
- }
-
-
- /**
- * This method ensures that the list is large enough for
- * <code>minCapacity</code> elements. It also fills in the
- * new slots in the list with the integer value input as
- * <code>fillValue</code>.
- *
- * @param minCapacity The minimum capacity of the list.
- * @param fillValue This method adds in a integer for each
- * slot that was added to ensure that the
- * list meets the minimum capacity.
- * <code>fillValue</code> is the value
- * used as the initial value of these
- * added elements.
- */
- public void ensureCapacityAndFill(int minCapacity, int fillValue) {
-
- list.ensureCapacity(minCapacity);
-
- int needToAdd = minCapacity - list.size();
- if (needToAdd > 0) {
- for (int i = 0; i < needToAdd; i++) {
- list.add(new Integer(fillValue));
- }
- }
- }
-
-
- /**
- * This method sets an element of the list to the input
- * integer value.
- *
- * @param index The index in the list of the element
- * we wish to set.
- * @param value The integer value that we assign to the
- * selected element of the list.
- */
- public void set(int index, int value) {
- list.set(index, new Integer(value));
- }
-
-
- /**
- * This method appends an element to the list.
- *
- * @param value The integer value that we assign to the
- * element that we are appending to the list.
- */
- public void add(int value) {
- list.add(new Integer(value));
- }
-
-
- /**
- * This method gets the integer value stored in element index.
- *
- * @param index The index in the list of the element
- * we wish to get the value from.
- *
- * @return The value of the data stored in element index.
- */
- public int get(int index) {
- return ((Integer)list.get(index)).intValue();
- }
-
-
- /**
- * This method gets the size of the list.
- *
- * @return The size of the list.
- */
- public int size() {
- return list.size();
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/OfficeUtil.java b/xmerge/java/org/openoffice/xmerge/util/OfficeUtil.java
deleted file mode 100644
index 206581c0da61..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/OfficeUtil.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
-
-import org.openoffice.xmerge.converter.xml.OfficeConstants;
-
-import java.util.Vector;
-
-
-/**
- * Class providing utility methods for OpenOffice plugins.
- *
- * @author Mark Murnane
- * @version 1.1
- */
-public class OfficeUtil implements OfficeConstants {
-
- /**
- * <p>Method to replace whitespace character within text with appropriate
- * OpenOffice tags.</p>
- *
- * @param text The text to parse for whitespace.
- *
- * @return <code>Node</code> array containing OpenOffice XML nodes
- * representing the text.
- */
- public static Node[] parseText(String text, Document parentDoc) {
- Vector nodeVec = new Vector();
-
- /*
- * Break up the text from the text run into Open
- * Office text runs. There may be more runs in OO because
- * runs of 2 or more spaces map to nodes.
- */
- while ((text.indexOf(" ") != -1) || (text.indexOf("\t") != 1)) {
-
- /*
- * Find the indices of tabs and multiple spaces, and
- * figure out which of them occurs first in the string.
- */
- int spaceIndex = text.indexOf(" ");
- int tabIndex = text.indexOf("\t");
- if ((spaceIndex == -1) && (tabIndex == -1))
- break; // DJP This should not be necessary. What is wrong
- // with the while() stmt up above?
- int closerIndex; // Index of the first of these
- if (spaceIndex == -1)
- closerIndex = tabIndex;
- else if (tabIndex == -1)
- closerIndex = spaceIndex;
- else
- closerIndex = (spaceIndex > tabIndex) ? tabIndex : spaceIndex;
-
- /*
- * If there is any text prior to the first occurrence of a
- * tab or spaces, create a text node from it, then chop it
- * off the string we're working with.
- */
- if (closerIndex > 0) {
- String beginningText = text.substring(0, closerIndex);
- Text textNode = parentDoc.createTextNode(beginningText);
- nodeVec.addElement(textNode);
- }
- text = text.substring(closerIndex);
-
- /*
- * Handle either tab character or space sequence by creating
- * an element for it, and then chopping out the text that
- * represented it in "text".
- */
- if (closerIndex == tabIndex) {
- Element tabNode = parentDoc.createElement(TAG_TAB_STOP);
- nodeVec.add(tabNode);
- text = text.substring(1); // tab is always a single character
- } else {
- // Compute length of space sequence.
- int nrSpaces = 2;
- while ((nrSpaces < text.length())
- && text.substring(nrSpaces, nrSpaces + 1).equals(" "))
- nrSpaces++;
-
- Element spaceNode = parentDoc.createElement(TAG_SPACE);
- spaceNode.setAttribute(ATTRIBUTE_SPACE_COUNT,
- new Integer(nrSpaces).toString());
- nodeVec.add(spaceNode);
- text = text.substring(nrSpaces);
- }
- }
-
- /*
- * No more tabs or space sequences. If there's any remaining
- * text create a text node for it.
- */
- if (text.length() > 0) {
- Text textNode = parentDoc.createTextNode(text);
- nodeVec.add(textNode);
- }
-
- // Now create and populate an array to return the nodes in.
- Node nodes[] = new Node[nodeVec.size()];
- for (int i = 0; i < nodeVec.size(); i++)
- nodes[i] = (Node)nodeVec.elementAt(i);
- return nodes;
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/util/Resources.java b/xmerge/java/org/openoffice/xmerge/util/Resources.java
deleted file mode 100644
index b94eb70e3605..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/Resources.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util;
-
-import java.util.ResourceBundle;
-import java.util.MissingResourceException;
-
-/**
- * <p>Provides a singleton resource class for converter messages.</p>
- *
- * <p>By default, this class will search for a
- * <code>ResourceBundle</code> class file or properties file based
- * on the default locale.</p>
- *
- * <p>A properties file resources.properties will be provided.</p>
- *
- * <p>Note that if the resource bundle object is not loaded, the
- * construction of the singleton object will throw a
- * <code>MissingResourceException</code>, which is a
- * <code>RuntimeException</code>, thus I opted to not explicitly
- * declare it. If it does throw <code>MissingResourceException</code>,
- * it may be due to a packaging problem.</p>
- *
- * @author Herbie Ong
- */
-public final class Resources
-{
- private ResourceBundle rb = null;
-
- private static Resources instance = null;
-
-
- /**
- * This method returns the singleton instance
- * of this class.
- *
- * @return The singleton <code>Resources</code>
- * instance.
- */
- public synchronized static Resources getInstance()
- {
- if (instance == null)
- {
- instance = new Resources();
- }
-
- return instance;
- }
-
-
- /**
- * Default constructor is only accessible within this class.
- * Load the resource bundle that contains the resource
- * <code>String</code> values.
- */
- private Resources()
- {
- rb = ResourceBundle.getBundle("org.openoffice.xmerge.util.resources");
- }
-
-
- /**
- * This method returns the corresponding <code>String</code> given
- * the key.
- *
- * @param key Key string for getting the message
- * <code>String</code>.
- * @return Message <code>String</code> corresponding to the key.
- */
- public String getString(String key)
- {
- return rb.getString(key);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/TwipsConverter.java b/xmerge/java/org/openoffice/xmerge/util/TwipsConverter.java
deleted file mode 100644
index c587ada48be1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/TwipsConverter.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-
-package org.openoffice.xmerge.util;
-
-
-/**
- * <p>Helper class providing static methods to convert data to/from
- * twips</p>
- *
- * @author Martin Maher
- */
-public class TwipsConverter {
-
- /**
- * <p>Convert from twips to cm's</p>
- *
- * @param value The <code>short</code> to be converted.
- *
- * @return float containing the converted
- */
- public static float twips2cm(int value) {
-
- float inches = (float) value/1440;
- float cm = (float) inches*(float)2.54;
-
- return cm;
- }
-
-
-
- /**
- * <p>Convert from cm's to twips</p>
- *
- * @param value <code>byte</code> array containing the LE representation
- * of the value.
- *
- * @return int containing the converted value.
- */
- public static int cm2twips(float value) {
-
- int twips = (int) ((value/2.54)*1440);
-
- return twips;
- }
-
- /**
- * <p>Convert from twips to cm's</p>
- *
- * @param value The <code>short</code> to be converted.
- *
- * @return float containing the converted
- */
- public static float twips2inches(int value) {
-
- return (float) value/1440;
- }
-
-
-
- /**
- * <p>Convert from cm's to twips</p>
- *
- * @param value <code>byte</code> array containing the LE representation
- * of the value.
- *
- * @return int containing the converted value.
- */
- public static int inches2twips(float value) {
-
- return (int) (value*1440);
- }
-
-
-}
diff --git a/xmerge/java/org/openoffice/xmerge/util/XmlUtil.java b/xmerge/java/org/openoffice/xmerge/util/XmlUtil.java
deleted file mode 100644
index 1abdba9a95c3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/XmlUtil.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util;
-
-import org.w3c.dom.Node;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-
-/**
- * Class containing static util methods for handling XML trees.
- *
- * @author smak
- */
-public final class XmlUtil {
-
-
- /**
- * Perform a deep clone of certain <code>Node</code> which
- * will base on the document <code>Node</code> of the old
- * <code>Node</code>.
- *
- * @param oldNode The <code>Document</code> of this
- * <code>Node</code> is used to clone
- * the <code>Node</code>
- * @param newNode The <code>Node</code> to clone.
- *
- * @return The cloned <code>Node</code>.
- */
- public static Node deepClone(Node oldNode, Node newNode) {
- Document docNode = oldNode.getOwnerDocument();
-
- // clone the starting node
- Node clonedNode = cloneNode(docNode, newNode);
-
- // then clone the sub-tree recursively
- cloneTree(docNode, clonedNode, newNode);
-
- return clonedNode;
- }
-
-
- /**
- * Clone the sub-tree under certain given <code>Node</code>
- *
- * @param docNode The <code>Document</code> used to clone
- * the <code>Node</code>.
- * @param oldNode The <code>Node</code> to clone.
- * @param newNode The destination <code>Node</code>.
- */
- private static void cloneTree(Document docNode, Node oldNode, Node newNode) {
-
- NodeList nodeList = newNode.getChildNodes();
- int nodeListLen = nodeList.getLength();
-
- for (int i = 0; i < nodeListLen; i++) {
- Node newClonedChild = cloneNode(docNode, nodeList.item(i));
- if (newClonedChild != null) {
- oldNode.appendChild(newClonedChild);
- cloneTree(docNode, newClonedChild, nodeList.item(i));
- }
- }
- }
-
-
- /**
- * Clone a <code>Node</code> (either text or element).
- *
- * @param docNode The <code>Document</code> used to
- * clone the <code>Node</code>.
- * @param newNode The <code>Node</code> to clone.
- *
- * @return The cloned <code>Node</code>.
- */
- private static Node cloneNode(Document docNode, Node newNode) {
-
- Node clonedNode = null;
-
- // only support text node and element node (will copy the attributes)
- switch (newNode.getNodeType()) {
- case Node.TEXT_NODE:
- String textStr = newNode.getNodeValue();
- clonedNode = docNode.createTextNode(textStr);
- break;
- case Node.ELEMENT_NODE:
- Element oldElem = (Element)newNode;
- String tagName = newNode.getNodeName();
- Element newElem = (docNode.createElement(tagName));
-
- // copy the attributes
- NamedNodeMap attrs = oldElem.getAttributes();
-
- for (int i = 0; i < attrs.getLength(); i++) {
- newElem.setAttribute(attrs.item(i).getNodeName(),
- attrs.item(i).getNodeValue());
- }
- clonedNode = newElem;
- break;
- }
- return clonedNode;
- }
-
-
- /**
- * Returns the name and type of an XML DOM <code>Node</code>.
- *
- * @param node <code>Node</code> to query.
- *
- * @return Name and type of XML DOM <code>Node</code>.
- */
- public static String getNodeInfo(Node node) {
-
- String str = null;
- switch (node.getNodeType()) {
-
- case Node.ELEMENT_NODE:
- str = "ELEMENT";
- break;
- case Node.ATTRIBUTE_NODE:
- str = "ATTRIBUTE";
- break;
- case Node.TEXT_NODE:
- str = "TEXT";
- break;
- case Node.CDATA_SECTION_NODE:
- str = "CDATA_SECTION";
- break;
- case Node.ENTITY_REFERENCE_NODE:
- str = "ENTITY_REFERENCE";
- break;
- case Node.ENTITY_NODE:
- str = "ENTITY";
- break;
- case Node.PROCESSING_INSTRUCTION_NODE:
- str = "PROCESSING_INSTRUCTION";
- break;
- case Node.COMMENT_NODE:
- str = "COMMENT";
- break;
- case Node.DOCUMENT_NODE:
- str = "DOCUMENT";
- break;
- case Node.DOCUMENT_TYPE_NODE:
- str = "DOCUMENT_TYPE";
- break;
- case Node.DOCUMENT_FRAGMENT_NODE:
- str = "DOCUMENT_FRAGMENT";
- break;
- case Node.NOTATION_NODE:
- str = "NOTATION";
- break;
- }
-
- StringBuffer buffer = new StringBuffer("name=\"");
- buffer.append(node.getNodeName());
- buffer.append("\" type=\"");
- buffer.append(str);
- buffer.append("\"");
-
- return buffer.toString();
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/build.xml b/xmerge/java/org/openoffice/xmerge/util/build.xml
deleted file mode 100644
index d4c375799e15..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/build.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_joox_util" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_joox_util"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package" value="org/openoffice/xmerge/util"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set whether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/IntArrayList.java"/>
- <include name="${package}/Resources.java"/>
- <include name="${package}/XmlUtil.java"/>
- <include name="${package}/Debug.java"/>
- <include name="${package}/ColourConverter.java"/>
- <include name="${package}/EndianConverter.java"/>
- <include name="${package}/TwipsConverter.java"/>
- <include name="${package}/OfficeUtil.java"/>
- <include name="${package}/ActiveSyncDriver.java"/>
- </javac>
- <copy todir="${build.class}/${package}">
- <fileset dir=".">
- <include name="*.properties"/>
- </fileset>
- </copy>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- <include name="${package}/*.properties"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/makefile.mk b/xmerge/java/org/openoffice/xmerge/util/makefile.mk
deleted file mode 100644
index c2eb64b9ff3d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_joox_util
-PRJ=../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/util/package.html b/xmerge/java/org/openoffice/xmerge/util/package.html
deleted file mode 100644
index e562149c82bc..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/package.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.util package</title>
-</head>
-
-<body bgcolor="white">
-<p>Provides general purpose utilities.</p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfo.java b/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfo.java
deleted file mode 100644
index 0d662294b4b7..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfo.java
+++ /dev/null
@@ -1,436 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util.registry;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.lang.reflect.Constructor;
-import org.openoffice.xmerge.PluginFactory;
-import org.openoffice.xmerge.DocumentSerializerFactory;
-import org.openoffice.xmerge.DocumentDeserializerFactory;
-import org.openoffice.xmerge.DocumentMergerFactory;
-
-/**
- * Class for storing the information about a converter plugin.
- *
- * @author Brian Cameron
- */
-public class ConverterInfo {
-
- /**
- * Keep track of the valid Office mime types
- */
- private static String[] validOfficeTypes;
- public static String SxwType = "staroffice/sxw";
- public static String SxcType = "staroffice/sxc";
-
-
- static {
- // This needs to be updated to reflect all valid office types.
- //
- validOfficeTypes = new String[2];
- validOfficeTypes[0] = SxwType;
- validOfficeTypes[1] = SxcType;
- }
-
- private String piJarName;
- private String piOfficeMime;
- private Vector piDeviceMime;
- private String piDisplayName;
- private String piDescription;
- private String piVersion;
- private String piVendor;
- private String piClassImpl;
- private String piXsltSerial;
- private String piXsltDeserial;
- private boolean piCanSerialize = false;
- private boolean piCanDeserialize = false;
- private boolean piCanMerge = false;
- private ClassLoader piClassLoader = null;
- private PluginFactory piPluginFactory;
-
-
- /**
- * The constructor builds a ConverterInfo structure.
- *
- * @param jarName The URL of the jarfile.
- * @param officeMime The office mime-type.
- * @param deviceMime The device mime-type.
- * @param displayName The display name.
- * @param description The description.
- * @param version The version.
- * @param vendor The vendor name.
- * @param impl The implementation class name of
- * PluginFactory.
- * @param xsltSerial The url of the serializer xsl stylesheet
- * @param xsltDeserial The url of the deserializer xsl stylesheet
- *
- * @throws RegistryException If <code>ci</code> cannot
- * be loaded.
- */
- public ConverterInfo(String jarName, String officeMime,
- Vector deviceMime, String displayName, String description,
- String version, String vendor, String impl,String xsltSerial,
- String xsltDeserial)
- throws RegistryException {
-
- if (isValidOfficeType(officeMime.trim()) == false) {
- RegistryException re = new RegistryException(
- "Invalid office type");
- throw re;
- }
-
- piJarName = jarName.trim();
- piOfficeMime = officeMime.trim();
- piDeviceMime = deviceMime;
- piDisplayName = displayName.trim();
- piDescription = description.trim();
- piVersion = version.trim();
- piVendor = vendor.trim();
- piXsltSerial = xsltSerial.trim();
- piXsltDeserial= xsltDeserial.trim();
- piClassImpl = impl.trim();
- piClassLoader = this.getClass().getClassLoader();
-
- // Get instance of the PluginFactory.
- //
- try {
- URL jarURL = new URL(jarName);
- URLClassLoader loader = new URLClassLoader(new URL[] { jarURL },
- piClassLoader);
- Class clas = loader.loadClass(piClassImpl);
- Class[] argumentTypes = { org.openoffice.xmerge.util.registry.ConverterInfo.class };
- Constructor construct = clas.getConstructor(argumentTypes);
-
- Object[] arguments = { this };
- piPluginFactory = ( PluginFactory ) construct.newInstance(arguments);
-
- // See which interfaces the plug-in PluginFactory supports.
- //
- Class[] cl = piPluginFactory.getClass().getInterfaces();
- for (int i=0; i < cl.length; i++) {
-
- if (cl[i].getName().equals("org.openoffice.xmerge.DocumentSerializerFactory")) {
- piCanSerialize = true;
- }
- if (cl[i].getName().equals("org.openoffice.xmerge.DocumentDeserializerFactory")) {
- piCanDeserialize = true;
- }
- if (cl[i].getName().equals("org.openoffice.xmerge.DocumentMergerFactory")) {
- piCanMerge = true;
- }
- }
-
- } catch (Exception e) {
- RegistryException re = new RegistryException(
- "Class implementation of the plug-in cannot be loaded.");
- throw re;
- }
- }
-
- /**
- * The constructor builds a ConverterInfo structure.
- *
- * @param jarName The URL of the jarfile.
- * @param officeMime The office mime-type.
- * @param deviceMime The device mime-type.
- * @param displayName The display name.
- * @param description The description.
- * @param version The version.
- * @param vendor The vendor name.
- * @param impl The implementation class name of
- * PluginFactory.
- *
- * @throws RegistryException If <code>ci</code> cannot
- * be loaded.
- */
-
-
- public ConverterInfo(String jarName, String officeMime,
- Vector deviceMime, String displayName, String description,
- String version, String vendor, String impl)
- throws RegistryException {
-
- if (isValidOfficeType(officeMime.trim()) == false) {
- RegistryException re = new RegistryException(
- "Invalid office type");
- throw re;
- }
-
- piJarName = jarName.trim();
- piOfficeMime = officeMime.trim();
- piDeviceMime = deviceMime;
- piDisplayName = displayName.trim();
- piDescription = description.trim();
- piVersion = version.trim();
- piVendor = vendor.trim();
- piClassImpl = impl.trim();
- piClassLoader = this.getClass().getClassLoader();
-
- // Get instance of the PluginFactory.
- //
- try {
- URL jarURL = new URL(jarName);
- URLClassLoader loader = new URLClassLoader(new URL[] { jarURL },
- piClassLoader);
- Class clas = loader.loadClass(piClassImpl);
- Class[] argumentTypes = { org.openoffice.xmerge.util.registry.ConverterInfo.class };
- Constructor construct = clas.getConstructor(argumentTypes);
-
- Object[] arguments = { this };
- piPluginFactory = ( PluginFactory ) construct.newInstance(arguments);
-
- // See which interfaces the plug-in PluginFactory supports.
- //
- Class[] cl = piPluginFactory.getClass().getInterfaces();
- for (int i=0; i < cl.length; i++) {
-
- if (cl[i].getName().equals("org.openoffice.xmerge.DocumentSerializerFactory")) {
- piCanSerialize = true;
- }
- if (cl[i].getName().equals("org.openoffice.xmerge.DocumentDeserializerFactory")) {
- piCanDeserialize = true;
- }
- if (cl[i].getName().equals("org.openoffice.xmerge.DocumentMergerFactory")) {
- piCanMerge = true;
- }
- }
-
- } catch (Exception e) {
- RegistryException re = new RegistryException(
- "Class implementation of the plug-in cannot be loaded.");
- throw re;
- }
- }
-
-
-
-
- /**
- * Create a default constructor so we can use isValidOfficeType
- * without having to actually have a valid ConverterInfo.
- */
- private ConverterInfo() {
- }
-
-
- /**
- * Returns an instance of the DocumentDeserializerFactory interface.
- *
- * @return instance of the DocumentDeserializer for this ConverterInfo.
- */
- public DocumentSerializerFactory getDocSerializerFactory() {
- return (DocumentSerializerFactory)piPluginFactory;
- }
-
-
- /**
- * Returns an instance of the DocumentSerializerFactory interface.
- *
- * @return instance of the DocumentSerializer for this ConverterInfo.
- */
- public DocumentDeserializerFactory getDocDeserializerFactory() {
- return (DocumentDeserializerFactory)piPluginFactory;
- }
-
-
- /**
- * Returns an instance of the DocumentMergerFactory interface.
- *
- * @return instance of the DocumentMergerFactory for this ConverterInfo.
- */
- public DocumentMergerFactory getDocMergerFactory() {
- return (DocumentMergerFactory)piPluginFactory;
- }
-
-
- /**
- * Returns the jar file name.
- *
- * @return The jar file name, null if none exists.
- */
- public String getJarName() {
- return piJarName;
- }
-
-
- /**
- * Returns the office mime-type.
- *
- * @return The office mime-type, null if none exists.
- */
- public String getOfficeMime() {
- return piOfficeMime;
- }
-
-
- /**
- * Returns an <code>Enumeration</code> of <code>String</code>
- * objects indicating the device mime-type.
- *
- * @return An <code>Enumeration</code> of <code>String</code>
- * objects indicating the device mime-type.
- */
- public Enumeration getDeviceMime() {
- return(piDeviceMime.elements());
- }
-
-
- /**
- * Returns the display name.
- *
- * @return The display name, null if none exists.
- */
- public String getDisplayName() {
- return piDisplayName;
- }
-
-
- /**
- * Returns the description.
- *
- * @return The description, null if none exists.
- */
- public String getDescription() {
- return piDescription;
- }
-
-
- /**
- * Returns the version.
- *
- * @return The version, null if none exists.
- */
- public String getVersion() {
- return piVersion;
- }
-
-
- /**
- * Returns the vendor name.
- *
- * @return The vendor name, null if none exists.
- */
- public String getVendor() {
- return piVendor;
- }
-
-
- /**
- * Returns the implementation class name of PluginFactory.
- *
- * @return The implementation class name of PluginFactory,
- * null if none exists.
- */
- public String getClassImpl() {
- return piClassImpl;
- }
-
-
- /**
- * Returns the PluginFactory instance for this plug-in.
- *
- * @return The PluginFactory instance for this plug-in.
- */
- public PluginFactory getPluginFactory() {
- return piPluginFactory;
- }
-
-
- /**
- * Returns true if this plug-in has a serializier, false otherwise.
- *
- * @return true if this plug-in has a serializier, false otherwise.
- */
- public boolean canSerialize() {
- return piCanSerialize;
- }
-
-
- /**
- * Returns true if this plug-in has a deserializier, false otherwise.
- *
- * @return true if this plug-in has a deserializier, false otherwise.
- */
- public boolean canDeserialize() {
- return piCanDeserialize;
- }
-
-
- /**
- * Returns true if this plug-in has a merger, false otherwise.
- *
- * @return true if this plug-in has a merger, false otherwise.
- */
- public boolean canMerge() {
- return piCanMerge;
- }
-
-
- /**
- * Returns true if the officeMime is a valid Office mime type.
- *
- * @return true if the officeMime is a valid Office mime type.
- */
- public static boolean isValidOfficeType(String officeMime) {
-
- boolean rc = false;
- for (int i=0; i < validOfficeTypes.length; i++) {
- if (officeMime.equals(validOfficeTypes[i])) {
- rc = true;
- }
- }
-
- return rc;
- }
-
- /**
- * Returns a <code>String</code> containing the Xslt stylesheet url that
- * is to be used by the Xslt Plugin Serializer.
- *
- * @return <code>String</code>
- */
-
- public String getXsltSerial() {
- return piXsltSerial;
- }
-
- /**
- * Returns a <code>String</code> containing the xslt stylesheet url that
- * is to be used by the Xslt Plugin Deserializer.
- *
- * @return <code>String</code>
- */
-
- public String getXsltDeserial() {
- return piXsltDeserial;
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoMgr.java b/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoMgr.java
deleted file mode 100644
index 7aff201a30e6..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoMgr.java
+++ /dev/null
@@ -1,536 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-package org.openoffice.xmerge.util.registry;
-
-import java.util.*;
-import java.io.*;
-import javax.xml.parsers.*;
-
-/**
- * Manages the converter plug-ins that are currently active.
- * This class allows plug-ins to be added or removed dynamically.
- * This class is a singleton (static) class, so that only one
- * manager can exist at a time. It is final, so it may not be
- * subclassed.
- *
- * @author: Brian Cameron
- */
-public final class ConverterInfoMgr {
-
- private static Vector converterInfoList;
-
- /**
- * Constructor
- */
- static {
- converterInfoList = new Vector();
- }
-
-
- /**
- * Adds a converter plug-in to the registry. The
- * <code>ConverterInfo</code> must have a unique DisplayName
- * and must have non-null values for DisplayName, ClassImpl,
- * OfficeMime, and DeviceMime.
- *
- * @param ConverterInfo A <code>ConverterInfo</code> object
- * describing a plug-in.
- *
- * @throws RegistryException If the <code>ConverterInfo</code>
- * is not valid.
- */
- public static void addPlugIn(ConverterInfo ci) throws RegistryException {
-
- ConverterInfo converterInfo;
-
- // Validate
- //
- if (ci.getDisplayName() == null) {
- RegistryException re = new RegistryException(
- "Converter must have valid name.");
- throw re;
- }
- if (ci.getClassImpl() == null) {
- RegistryException re = new RegistryException(
- "Converter must have valid class implementation specified.");
- throw re;
- }
- if (ci.getOfficeMime() == null) {
- RegistryException re = new RegistryException(
- "Converter must have valid office mime specified.");
- throw re;
- }
- if (! ci.getDeviceMime().hasMoreElements()) {
- RegistryException re = new RegistryException(
- "Converter must have valid device mime specified.");
- throw re;
- }
-
- // Verify there is no converter with the same Display Name in
- // the registry.
- //
- Enumeration ciEnum = converterInfoList.elements();
- while (ciEnum.hasMoreElements()) {
- converterInfo = (ConverterInfo)ciEnum.nextElement();
- if (ci.getDisplayName().equals(converterInfo.getDisplayName())) {
- RegistryException re = new RegistryException(
- "Converter with specified display name already exists.");
- throw re;
- }
- }
-
- // Since this is a adding to a static Vector, make sure this
- // add method call is synchronized.
- //
- synchronized (converterInfoList) {
- converterInfoList.add(ci);
- }
- }
-
-
- /**
- * Adds a <code>Vector</code> of converter plug-ins to the registry.
- * Each <code>ConverterInfo</code> in the <code>Vector</code> must have
- * a unique DisplayName and must have non-null values for DisplayName,
- * ClassImpl, OfficeMime, and DeviceMime.
- *
- * @param ciVectory A <code>Vector</code> of <code>ConverterInfo</code>
- * objects describing one or more plug-in(s).
- *
- * @throws RegistryException If a <code>ConverterInfo</code> in the
- * <code>Vector</code> is not valid.
- */
- public static void addPlugIn(Enumeration jarEnum) throws RegistryException {
-
- while (jarEnum.hasMoreElements()) {
- ConverterInfo converterInfo = (ConverterInfo)jarEnum.nextElement();
- addPlugIn(converterInfo);
- }
- }
-
-
- /**
- * Returns an <code>Enumeration</code> of registered
- * <code>ConverterInfo</code> objects.
- *
- * @return An <code>Enumeration</code> containing the currently registered
- * <code>ConverterInfo</code> objects, an empty
- * <code>Vector</code> if none exist.
- */
- public static Enumeration getConverterInfoEnumeration() {
- return (converterInfoList.elements());
- }
-
-
- /**
- * Removes any <code>ConverterInfo</code> object from the registry
- * that have the specified jar name value.
- *
- * @param jar The name of the jarfile.
- *
- * @return True if a <code>ConverterInfo</code> object was
- * removed, false otherwise.
- */
- public static boolean removeByJar(String jar) {
-
- ConverterInfo converterInfo;
- boolean rc = false;
-
- // FIX (HJ): Has to use an iterator, since we are removing items
- /*Enumeration ciEnum = converterInfoList.elements();
- while (ciEnum.hasMoreElements())
- {
- converterInfo = (ConverterInfo)ciEnum.nextElement();
- if (jar.equals(converterInfo.getJarName())) {
- converterInfoList.remove(converterInfo);
- rc = true;
- }
- }*/
-
- Iterator ciIter = converterInfoList.iterator();
- while (ciIter.hasNext())
- {
- converterInfo = (ConverterInfo)ciIter.next();
- if (jar.equals(converterInfo.getJarName())) {
- ciIter.remove();
- rc = true;
- }
- }
- return rc;
- }
-
-
- /**
- * Removes any <code>ConverterInfo</code> object from the registry
- * that have the specified display name value.
- *
- * @param name The display name.
- *
- * @return True if a <code>ConverterInfo</code> object was
- * removed, false otherwise.
- */
- public static boolean removeByName(String name) {
-
- ConverterInfo converterInfo;
- boolean rc = false;
-
- Enumeration ciEnum = converterInfoList.elements();
- while (ciEnum.hasMoreElements())
- {
- converterInfo = (ConverterInfo)ciEnum.nextElement();
- if (name.equals(converterInfo.getDisplayName())) {
- converterInfoList.remove(converterInfo);
- rc = true;
- }
- }
- return rc;
- }
-
-
- /**
- * Returns the <code>ConverterInfo</code> object that supports
- * the specified device/office mime type conversion. If there
- * are multiple <code>ConverterInfo</code> objects registered
- * that support this conversion, only the first is returned.
- *
- * @param deviceMime The device mime.
- * @param officeMime The office mime.
- *
- * @return The first plug-in that supports the specified
- * conversion.
- */
- public static ConverterInfo findConverterInfo(String deviceMime, String officeMime) {
-
- ConverterInfo converterInfo;
-
- if (deviceMime == null ||
- ConverterInfo.isValidOfficeType(officeMime) == false) {
- return null;
- }
-
- // Loop over elements comparing with deviceFromMime
- //
- Enumeration ciEnum = converterInfoList.elements();
- while (ciEnum.hasMoreElements()) {
-
- converterInfo = (ConverterInfo)ciEnum.nextElement();
- String toDeviceInfo = (String)converterInfo.getOfficeMime();
- Enumeration fromEnum = converterInfo.getDeviceMime();
-
- // Loop over the deviceMime types.
- //
- while (fromEnum.hasMoreElements()) {
- String fromDeviceInfo = (String)fromEnum.nextElement();
- if (deviceMime.trim().equals(fromDeviceInfo) &&
- officeMime.trim().equals(toDeviceInfo)) {
- return (converterInfo);
- }
- }
- }
- return null;
- }
-
-
- /**
- * Returns an array of two <code>ConverterInfo</code> objects that
- * can be chained to perform the specified mime type conversion.
- * If there are multiple <code>ConverterInfo</code> objects that
- * support this conversion, only the first is returned.
- *
- * @param deviceMimeFrom The device from mime.
- * @param deviceMimeTo The device to mime.
- *
- * @return An array of two <code>ConverterInfo</code> objects
- * that can be chained to perform the specified
- * conversion.
- */
- public static ConverterInfo[] findConverterInfoChain(String deviceFromMime, String deviceToMime) {
-
- if (deviceFromMime == null || deviceToMime == null) {
- return null;
- }
-
- ConverterInfo[] converterInfo = new ConverterInfo[2];
-
- // Loop over elements comparing with deviceFromMime
- //
- Enumeration cifEnum = converterInfoList.elements();
- while (cifEnum.hasMoreElements()) {
-
- converterInfo[0] = (ConverterInfo)cifEnum.nextElement();
- String fromOfficeInfo = converterInfo[0].getOfficeMime();
- Enumeration fromEnum = converterInfo[0].getDeviceMime();
-
- // Loop over the deviceMime types looking for a deviceFromMime
- // match.
- //
- while (fromEnum.hasMoreElements()) {
- String fromDeviceInfo = (String)fromEnum.nextElement();
-
- if (deviceFromMime.trim().equals(fromDeviceInfo)) {
-
- // Found a a match for deviceFrom. Now loop over the
- // elements comparing with deviceToMime
- //
- Enumeration citEnum = converterInfoList.elements();
- while (citEnum.hasMoreElements()) {
-
- converterInfo[1] = (ConverterInfo)citEnum.nextElement();
- String toOfficeInfo = converterInfo[1].getOfficeMime();
- Enumeration toEnum = converterInfo[1].getDeviceMime();
-
- // Loop over deviceMime types looking for a
- // deviceToMime match.
- //
- while (toEnum.hasMoreElements()) {
- String toDeviceInfo = (String)toEnum.nextElement();
- if (deviceToMime.trim().equals(toDeviceInfo) &&
- fromOfficeInfo.equals(toOfficeInfo)) {
-
- // Found a match
- //
- return (converterInfo);
- }
- }
- }
- }
- }
- }
- return null;
- }
-
-
- /**
- * main to let the user specify what plug-ins to register from
- * jarfiles and to display the currently registered plug-ins.
- *
- * @param args Not used.
- */
- public static void main(String args[]) {
-
- ConverterInfoReader cir = null;
- boolean validate = false;
- InputStreamReader isr = new InputStreamReader(System.in);
- BufferedReader br = new BufferedReader(isr);
- char c = ' ';
-
- boolean exitFlag = false;
- while (exitFlag == false) {
-
- System.out.println("\nMenu:");
- System.out.println("(L)oad plug-ins from a jar file");
- System.out.println("(D)isplay name unload");
- System.out.println("(J)ar name unload");
- System.out.println("(F)ind ConverterInfo");
- System.out.println("(C)ind ConverterInfo chain");
- System.out.println("(V)iew plug-ins");
- System.out.println("(T)oggle Validation");
- System.out.println("(Q)uit\n");
-
- try {
- c = br.readLine().toUpperCase().trim().charAt(0);
- } catch(Exception e) {
- System.out.println("Invalid entry");
- System.out.println("Error msg: " + e.getMessage());
- continue;
- }
-
- System.out.println("");
-
- // Quit
- //
- if (c == 'Q') {
- exitFlag = true;
-
- // Load by Jarfile
- //
- } else if (c == 'L') {
-
- System.out.println("Enter path to jarfile: ");
- try {
- String jarname = br.readLine().trim();
- cir = new ConverterInfoReader(jarname,validate);
- } catch (RegistryException e) {
- System.out.println("Cannot load plug-in ConverterFactory implementation.");
- System.out.println("Error msg: " + e.getMessage());
- } catch (Exception e) {
- System.out.println("Error adding data to registry");
- System.out.println("Error msg: " + e.getMessage());
- }
-
- if (cir != null) {
- Enumeration jarInfoEnum = cir.getConverterInfoEnumeration();
- try {
- ConverterInfoMgr.addPlugIn(jarInfoEnum);
- } catch (Exception e) {
- System.out.println("Error adding data to registry");
- System.out.println("Error msg: " + e.getMessage());
- }
- }
-
- // Unload by Display Name or Jarfile
- //
- } else if (c == 'T') {
- if (validate== true){
- System.out.println("Validation switched off");
- validate=false;
- }else{
- System.out.println("Validation switched on");
- validate=true;
- }
- } else if (c == 'D' || c == 'J') {
-
- if (c == 'D') {
- System.out.println("Enter display name: ");
- } else {
- System.out.println("Enter path to jarfile: ");
- }
-
- try
- {
- String name = br.readLine().trim();
- boolean rc = false;
-
- if (c == 'D') {
- rc = ConverterInfoMgr.removeByName(name);
- } else {
- rc = ConverterInfoMgr.removeByJar(name);
- }
-
- if (rc == true) {
- System.out.println("Remove successful.");
- } else {
- System.out.println("Remove failed.");
- }
-
- } catch (Exception e) {
- System.out.println("Error removing value from registry");
- System.out.println("Error msg: " + e.getMessage());
- }
-
- // Find Office Mime
- //
- } else if (c == 'F' || c == 'C') {
-
- String findMimeOne = null;
- String findMimeTwo = null;
-
- if (c == 'F') {
- System.out.println("Enter device mime: ");
- } else {
- System.out.println("Enter device from mime: ");
- }
-
- try {
- findMimeOne = br.readLine().trim();
- } catch (Exception e) {
- System.out.println("Error adding data to registry");
- System.out.println("Error msg: " + e.getMessage());
- }
-
- if (c == 'F') {
- System.out.println("Enter office mime: ");
- } else {
- System.out.println("Enter device to mime: ");
- }
-
- try {
- findMimeTwo = br.readLine().trim();
- } catch (Exception e) {
- System.out.println("Error adding data to registry");
- System.out.println("Error msg: " + e.getMessage());
- }
-
- if (c == 'F') {
- ConverterInfo foundInfo = ConverterInfoMgr.findConverterInfo(findMimeOne, findMimeTwo);
- if (foundInfo != null) {
- System.out.println(" Found ConverterInfo");
- System.out.println(" DisplayName : " + foundInfo.getDisplayName());
- } else {
- System.out.println(" Did not find ConverterInfo");
- }
- } else {
- ConverterInfo[] foundInfo = ConverterInfoMgr.findConverterInfoChain(findMimeOne,
- findMimeTwo);
- if (foundInfo[0] != null && foundInfo[1] != null ) {
- System.out.println(" Found ConverterInfo Chain");
- System.out.println(" DisplayName : " + foundInfo[0].getDisplayName());
- System.out.println(" DisplayName : " + foundInfo[1].getDisplayName());
- } else {
- System.out.println(" Did not find ConverterInfo");
- }
- }
-
- // View
- //
- } else if (c == 'V') {
-
- Enumeration ciEnum = ConverterInfoMgr.getConverterInfoEnumeration();
-
- int ciCnt = 0;
- while (ciEnum.hasMoreElements())
- {
- System.out.println("");
- System.out.println(" Displaying converter number " + ciCnt);
- ConverterInfo converterInfo = (ConverterInfo)ciEnum.nextElement();
- System.out.println(" DisplayName : " + converterInfo.getDisplayName());
- System.out.println(" JarFile : " + converterInfo.getJarName());
- System.out.println(" Description : " + converterInfo.getDescription());
- System.out.println(" Version : " + converterInfo.getVersion());
- System.out.println(" OfficeMime : " + converterInfo.getOfficeMime());
- Enumeration fromEnum = converterInfo.getDeviceMime();
- int feCnt = 1;
- while (fromEnum.hasMoreElements())
- {
- System.out.println(" DeviceMime : (#" + feCnt + ") : " +
- (String)fromEnum.nextElement());
- feCnt++;
- }
- if (feCnt == 1) {
- System.out.println(" DeviceMime : None specified");
- }
-
- System.out.println(" Vendor : " + converterInfo.getVendor());
- System.out.println(" ClassImpl : " + converterInfo.getClassImpl());
- System.out.println(" XsltSerial : " + converterInfo.getXsltSerial());
- System.out.println(" XsltDeserial : " + converterInfo.getXsltDeserial());
- System.out.println(" Serialize : " + converterInfo.canSerialize());
- System.out.println(" Deserialize : " + converterInfo.canDeserialize());
- System.out.println(" Merge : " + converterInfo.canMerge());
- ciCnt++;
- }
-
- if (ciCnt == 0) {
- System.out.println("No converters registered");
- }
- } else {
- System.out.println("Invalid input");
- }
- }
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoReader.java b/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoReader.java
deleted file mode 100644
index 4300f6f0a3bd..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/ConverterInfoReader.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util.registry;
-
-import java.io.*;
-import java.util.*;
-import java.util.jar.*;
-import org.xml.sax.*;
-import org.w3c.dom.*;
-import javax.xml.parsers.*;
-import java.net.URL;
-import java.net.JarURLConnection;
-
-/**
- * The <code>ConverterInfoReader</code> pulls a META-INF/converter.xml
- * file out of a jar file and parses it, providing access to this
- * information in a <code>Vector</code> of <code>ConverterInfo</code>
- * objects.
- *
- * @author Brian Cameron
- */
-public class ConverterInfoReader {
-
- private final static String TAG_CONVERTER = "converter";
- private final static String ATTRIB_OFFICE_TYPE = "type";
- private final static String ATTRIB_VERSION = "version";
- private final static String TAG_NAME = "converter-display-name";
- private final static String TAG_DESC = "converter-description";
- private final static String TAG_VENDOR = "converter-vendor";
- private final static String TAG_CLASS_IMPL = "converter-class-impl";
- private final static String TAG_TARGET = "converter-target";
- private final static String ATTRIB_DEVICE_TYPE = "type";
- private final static String TAG_XSLT_DESERIAL = "converter-xslt-deserialize";
- private final static String TAG_XSLT_SERIAL = "converter-xslt-serialize";
- private String jarfilename;
- private Document document;
- private Vector converterInfoList;
-
-
- /**
- * Constructor. A jar file is passed in. The jar file is
- * parsed and the <code>Vector</code> of <code>ConverterInfo</code>
- * objects is built.
- *
- * @param jar The URL of the jar file to process.
- * @param shouldvalidate Boolean to enable or disable xml validation.
- *
- * @throws IOException If the jar file cannot
- * be read or if the
- * META-INF/converter.xml
- * can not be read in the
- * jar file.
- * @throws ParserConfigurationException If the DocumentBuilder
- * can not be built.
- * @throws org.xml.sax.SAXException If the converter.xml
- * file can not be parsed.
- * @throws RegistryException If the ConverterFactory
- * implementation of a
- * plug-in cannot be loaded.
- */
- public ConverterInfoReader(String jar,boolean shouldvalidate) throws IOException,
- ParserConfigurationException, org.xml.sax.SAXException,
- RegistryException {
-
- InputStream istream;
- InputSource isource;
- DocumentBuilderFactory builderFactory;
- DocumentBuilder builder;
- JarURLConnection jarConnection;
- JarEntry jarentry;
- JarFile jarfile;
- URL url;
-
- converterInfoList = new Vector();
- jarfilename = jar;
-
- // Get Jar via URL
- //
- url = new URL("jar:" + jar + "!/META-INF/converter.xml");
- jarConnection = (JarURLConnection)url.openConnection();
- jarentry = jarConnection.getJarEntry();
- jarfile = jarConnection.getJarFile();
-
- // Build the InputSource
- //
- istream = jarfile.getInputStream(jarentry);
- isource = new InputSource(istream);
-
- // Get the DOM builder and build the document.
- //
- builderFactory = DocumentBuilderFactory.newInstance();
-
- //DTD validation
- if (shouldvalidate){
- System.out.println("Validating xml...");
- builderFactory.setValidating(true);
- }
- //
- builder = builderFactory.newDocumentBuilder();
- document = builder.parse(isource);
-
- // Parse the document.
- //
- parseDocument();
- }
-
-
- /**
- * Loops over the <i>converter</i> <code>Node</code> in the converter.xml
- * file and processes them.
- *
- * @throws RegistryException If the plug-in associated with a
- * specific <i>converter</i> <code>Node</code>
- * cannot be loaded.
- */
- private void parseDocument() throws RegistryException {
-
- Node converterNode;
- NodeList converterNodes = document.getElementsByTagName(TAG_CONVERTER);
-
- for (int i=0; i < converterNodes.getLength(); i++) {
- converterNode = converterNodes.item(i);
- if (converterNode.getNodeType() == Node.ELEMENT_NODE) {
- parseConverterNode((Element)converterNode);
- }
- }
- }
-
-
- /**
- * Parses a <i>converter</i> node, pulling the information out of
- * the <code>Node</code> and placing it in a <code>ConverterInfo</code>
- * object, and adds that object to a <code>Vector</code> of
- * <code>ConverterInfo</code> objects.
- *
- * @param e The <code>Element</code> corresponding to the
- * <i>converter</i> XML tag.
- *
- *
- * @throws RegistryException If the plug-in cannot be loaded.
- */
- private void parseConverterNode(Element e) throws RegistryException {
-
- Element detailElement;
- Node detailNode;
- String elementTagName;
- String officeMime = null;
- Vector deviceMime = new Vector();
- String name = null;
- String desc = null;
- String version = null;
- String vendor = null;
- String classImpl = null;
- String xsltSerial = null;
- String xsltDeserial= null;
- String temp;
-
- temp = e.getAttribute(ATTRIB_OFFICE_TYPE);
- if (temp.length() != 0) {
- officeMime = temp;
- }
-
- temp = e.getAttribute(ATTRIB_VERSION);
- if (temp.length() != 0) {
- version = temp;
- }
-
- NodeList detailNodes = e.getChildNodes();
- for (int i=0; i < detailNodes.getLength(); i++) {
-
- detailNode = detailNodes.item(i);
- if (detailNode.getNodeType() == Node.ELEMENT_NODE) {
-
- detailElement = (Element)detailNode;
- elementTagName = detailElement.getTagName();
-
- if (TAG_NAME.equalsIgnoreCase(elementTagName)) {
- name = getTextValue(detailElement);
- } else if (TAG_DESC.equalsIgnoreCase(elementTagName)) {
- desc = getTextValue(detailElement);
- } else if (TAG_VENDOR.equalsIgnoreCase(elementTagName)) {
- vendor = getTextValue(detailElement);
- } else if (TAG_XSLT_SERIAL.equalsIgnoreCase(elementTagName)) {
- xsltSerial = getTextValue(detailElement);
- } else if (TAG_XSLT_DESERIAL.equalsIgnoreCase(elementTagName)) {
- xsltDeserial = getTextValue(detailElement);
- } else if (TAG_CLASS_IMPL.equalsIgnoreCase(elementTagName)) {
- classImpl = getTextValue(detailElement);
- } else if (TAG_TARGET.equalsIgnoreCase(elementTagName)) {
-
- temp = detailElement.getAttribute(ATTRIB_DEVICE_TYPE);
- if (temp.length() != 0) {
- deviceMime.add(temp);
- }
- }
- }
- }
- ConverterInfo converterInfo;
- if ((xsltSerial==null) || (xsltDeserial==null)){
- converterInfo = new ConverterInfo(jarfilename,
- officeMime, deviceMime, name,
- desc, version, vendor,classImpl);
- }
- else{
- converterInfo = new ConverterInfo(jarfilename,
- officeMime, deviceMime, name,
- desc, version, vendor,classImpl,
- xsltSerial,xsltDeserial);
- }
- /*ConverterInfo converterInfo = new ConverterInfo(jarfilename,
- officeMime, deviceMime, name, desc, version, vendor,
- classImpl);*/
- converterInfoList.add(converterInfo);
- }
-
-
- /**
- * Helper function to get the text value of an
- * <code>Element</code>.
- *
- * @param e The <code>Element</code> to process.
- *
- * @return The text value of the <code>Element</code>.
- */
- private String getTextValue(Element e) {
-
- NodeList tempNodes = e.getChildNodes();
- String text = null;
- Node tempNode;
-
- for (int j=0; j < tempNodes.getLength(); j++) {
- tempNode = tempNodes.item(j);
- if (tempNode.getNodeType() == Node.TEXT_NODE) {
- text = tempNode.getNodeValue().trim();
- break;
- }
- }
-
- return text;
- }
-
-
- /**
- * Returns an <code>Enumeration</code> of <code>ConverterInfo</code>
- * objects.
- *
- * @return An <code>Enumeration</code> of <code>ConverterInfo</code>
- * objects.
- */
- public Enumeration getConverterInfoEnumeration() {
- return (converterInfoList.elements());
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/RegistryException.java b/xmerge/java/org/openoffice/xmerge/util/registry/RegistryException.java
deleted file mode 100644
index c4fbfb856090..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/RegistryException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-package org.openoffice.xmerge.util.registry;
-
-/**
- * This <code>Exception</code> is thrown by converter registry
- * algorithms.
- */
-public class RegistryException extends Exception {
-
-
- /**
- * Exception thrown by merge algorithms.
- *
- * @param message Message to be included in the
- * <code>Exception</code>.
- */
- public RegistryException(String message) {
- super(message);
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/build.xml b/xmerge/java/org/openoffice/xmerge/util/registry/build.xml
deleted file mode 100644
index e7bf0da9c93c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/build.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<project name="xmrg_jooxu_registry" default="main" basedir=".">
-
- <!-- ================================================================= -->
- <!-- settings -->
- <!-- ================================================================= -->
-
- <!-- project prefix, used for targets and build.lst -->
- <property name="prj.prefix" value="xmrg"/>
-
- <!-- name of this sub target used in recursive builds -->
- <property name="target" value="xmrg_jooxu_registry"/>
-
- <!-- relative path to project directory -->
- <property name="prj" value="../../../../../.."/>
-
- <!-- start of java source code package structure -->
- <property name="java.dir" value="${prj}/java"/>
-
- <!-- path component for current java package -->
- <property name="package" value="org/openoffice/xmerge/util/registry"/>
-
- <!-- define how to handle CLASSPATH environment -->
- <property name="build.sysclasspath" value="ignore"/>
-
- <!-- classpath settings for javac tasks -->
- <path id="classpath">
- <pathelement location="${build.class}"/>
- <pathelement location="${solar.jar}/parser.jar"/>
- <pathelement location="${solar.jar}/jaxp.jar"/>
- <pathelement location="${solar.jar}/xerces.jar"/>
- </path>
-
- <!-- set whether we want to compile with or without deprecation -->
- <property name="deprecation" value="on"/>
-
- <!-- ================================================================= -->
- <!-- solar build environment targets -->
- <!-- ================================================================= -->
-
- <target name="build_dir" unless="build.dir">
- <property name="build.dir" value="${out}"/>
- </target>
-
- <target name="solar" depends="build_dir" if="solar.update">
- <property name="solar.properties"
- value="${solar.bin}/solar.properties"/>
- </target>
-
- <target name="init" depends="solar">
- <property name="build.compiler" value="classic"/>
- <property file="${solar.properties}"/>
- <property file="${build.dir}/class/solar.properties"/>
- </target>
-
- <target name="info">
- <echo message="--------------------"/>
- <echo message="${target}"/>
- <echo message="--------------------"/>
- </target>
-
-
- <!-- ================================================================= -->
- <!-- custom targets -->
- <!-- ================================================================= -->
-
- <!-- the main target, called in recursive builds -->
- <target name="main" depends="info,prepare,compile"/>
-
- <!-- prepare output directories -->
- <target name="prepare" depends="init" if="build.class">
- <mkdir dir="${build.dir}"/>
- <mkdir dir="${build.class}"/>
- </target>
-
- <!-- compile java sources in ${package} -->
- <target name="compile" depends="prepare" if="build.class">
- <javac srcdir="${java.dir}"
- destdir="${build.class}"
- debug="${debug}"
- deprecation="${deprecation}"
- optimize="${optimize}">
- <classpath refid="classpath"/>
- <include name="${package}/ConverterInfo.java"/>
- <include name="${package}/ConverterInfoMgr.java"/>
- <include name="${package}/ConverterInfoReader.java"/>
- <include name="${package}/RegistryException.java"/>
- <include name="${package}/UnoBridgeConverterInfo.java"/>
- </javac>
- </target>
-
- <!-- clean up -->
- <target name="clean" depends="prepare">
- <delete includeEmptyDirs="true">
- <fileset dir="${build.class}">
- <patternset>
- <include name="${package}/*.class"/>
- </patternset>
- </fileset>
- </delete>
- </target>
-
-</project>
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/converter.dtd b/xmerge/java/org/openoffice/xmerge/util/registry/converter.dtd
deleted file mode 100644
index 84e4ed34892c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/converter.dtd
+++ /dev/null
@@ -1,94 +0,0 @@
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-
-<!-- converter.dtd
-
- Author: Brian Cameron
-
- This DTD file is provided for documentation and development
- purposes, the converter does not actually validate the
- converter.xml files that it processes. Plug-ins will not
- work properly, though, if the converter.xml does not
- conform to this DTD specification. -->
-
-<!-- The root node, converters, must contain one or more
- converter nodes, each corresponds to a converter plug-in. -->
-
-<!ELEMENT converters (converter)+>
-
-<!-- The converter node must contain two elements:
- type - The convert-from mime-type.
- version - The version of the plug-in.
-
- Each converter node must contain these child nodes:
- converter-display-name - Name of the converter
- converter-class-impl - The PluginFactory implementation for
- the plugin
- converter-targets - Can be one or more of these nodes. Each
- contains only a "type" element. This
- "type" element specifies the convert-to
- mime-type.
-
- Each converter node may contain these child nodes:
- converter-description - Descriptive description of the plug-in.
- converter-vendor - Plug-in vendor name
- converter-xslt-serialize - The URL of the xsl stylesheet for
- serialization. This stylesheet must
- exist if the xslt plugin implementation
- is to be used. It is assumed that the
- plug-in specified via converter-class-impl
- will make use of this value.
- converter-xslt-deserialize - The URL of the xsl stylesheet for
- deserialization. This stylesheet must
- exist if the xslt plugin implementation
- is to be used. It is assumed that the
- plug-in specified via converter-class-impl
- will make use of this value.
- -->
-
-<!ELEMENT converter (converter-display-name,
- converter-description?,
- converter-vendor?,
- converter-class-impl,
- converter-xslt-serialize?,
- converter-xslt-deserialize?,
- converter-target+)>
-
-<!ATTLIST converter type CDATA #REQUIRED>
-<!ATTLIST converter version CDATA #REQUIRED>
-
-<!ELEMENT converter-display-name (#PCDATA)>
-<!ELEMENT converter-description (#PCDATA)>
-<!ELEMENT converter-vendor (#PCDATA)>
-<!ELEMENT converter-class-impl (#PCDATA)>
-<!ELEMENT converter-xslt-serialize (#PCDATA)>
-<!ELEMENT converter-xslt-deserialize (#PCDATA)>
-
-<!ELEMENT converter-target EMPTY>
-
-<!ATTLIST converter-target type CDATA #REQUIRED>
-
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/makefile.mk b/xmerge/java/org/openoffice/xmerge/util/registry/makefile.mk
deleted file mode 100644
index dc7f67a9223f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/makefile.mk
+++ /dev/null
@@ -1,32 +0,0 @@
-#***************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#***************************************************************************
-
-TARGET=xmrg_jooxu_registry
-PRJ=../../../../../..
-
-.INCLUDE : ant.mk
-ALLTAR: ANTBUILD
diff --git a/xmerge/java/org/openoffice/xmerge/util/registry/package.html b/xmerge/java/org/openoffice/xmerge/util/registry/package.html
deleted file mode 100644
index c7e9b2635bb2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/registry/package.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<!--
-
- DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
- Copyright 2000, 2010 Oracle and/or its affiliates.
-
- OpenOffice.org - a multi-platform office productivity suite
-
- 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.
-
--->
-<html>
-<head>
-<title>org.openoffice.xmerge.util.registry package</title>
-</head>
-
-<body bgcolor="white">
-
-<p>Provides an interface for plug-in registration. Each plug-in must
-have a corresponding Plugin Configuration XML File which is named
-converter.xml. If the plug-in is stored in a jarfile, this
-converter.xml file is typically stored in the following location in
-the jarfile:</p>
-
-<blockquote>
- META-INF/converter.xml
-</blockquote>
-
-<p>The Plugin Configuration XML File must validate against the
-converter.dtd file provided with this package. Since a jarfile
-can contain multiple plug-ins, this DTD supports specifying multiple
-plug-ins per jarfile. Please refer to the SDK document for more
-information about how to implement a Plugin Configuration XML File
-for a specific plugin.</p>
-
-<p>All information in the Plugin Configuratino XML File is bundled
-into one or more <code>ConverterInfo</code> object. The
-<code>ConverterInfoReader</code> object is used to build a
-<code>Vector</code> of <code>ConverterInfo</code> objects from a
-jarfile.</p>
-
-<p>The <code>ConverterInfoMgr</code> manages the registry of
-<code>ConverterInfo</code>. It is a singleton class, so that only one
-registry manager will ever exist. It is the client program's
-responsibility to register <code>ConverterInfo</code> objects that
-correspond to the plug-ins that are to be used.</p>
-
-<h2>TODO/IDEAS list</h2>
-
-<p><ol>
-<li>The <code>ConverterInfo</code> object could contain
- <code>org.w3c.dom.Document</code> fragments that are accessed in a
- generic fashion rather than get/set methods for each item in the DTD.
- This would provide a more flexible approach, especially for adding
- custom tags to a specific Plugin Configuration XML file (tags that
- are only used by its associated plug-in).
-<li><code>ConverterInfo</code> should allow the merge/serialize/deserialize
- logic to be included in separate plug-ins, if desired.</li>
-<li><code>ConverterInfoMgr</code> could use the Java Activation
- Framework (JAF) to manage registration.</li>
-</ol></p>
-
-</body>
-</html>
diff --git a/xmerge/java/org/openoffice/xmerge/util/resources.properties b/xmerge/java/org/openoffice/xmerge/util/resources.properties
deleted file mode 100644
index dd7938723e30..000000000000
--- a/xmerge/java/org/openoffice/xmerge/util/resources.properties
+++ /dev/null
@@ -1,68 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-
-#
-# resources.properties
-#
-# resources for org.openoffice.xmerge.converter package.
-#
-NULL_MIME_EXCEPTION=Cannot specify null MIME types
-EMPTY_MIME_EXCEPTION=Cannot specify empty MIME types
-CANNOT_LOAD_CLASS=Unable to load class
-CANNOT_INST_CLASS=Unable to instantiate class
-NOT_AN_INSTANCE= is not an instance of
-CANNOT_FIND_REGISTERED=Cannot find registered class
-PARSE_ERROR=Parse Error
-LINE=Line
-COLUMN=Column
-PUBLIC_ID=PublicId
-SYSTEM_ID=SystemId
-INVALID_LOG_LEVEL=Invalid log level specified
-OPERATION_NOT_SUPPORTED=Operation not supported
-TEMPLATE_FILE_LOAD_ERROR=Error in loading template file -
-
-#
-# diff/merge algorithm erro messages
-#
-EMPTY_NODE_EXCEPTION=Current Node is empty
-NOT_LEAFNODE_EXCEPTION=Current Node is not a leaf node
-ROOTNODE_EXCEPTION=Cannot perform insert/append/remove on root node
-NOT_TEXTNODE_EXCEPTION=The target Node is not a TEXT_NODE, it is -
-NULL_NODE_EXCEPTION=The initial Xmldocument node is null
-CELL_NODE_EXCEPTION1=Cell node do not have only 1 child <text:p> nodes, will skip the merge of this node.Num of PARA child nodes:
-CELL_NODE_EXCEPTION2=Cell node have a non Element child nodes -
-CELL_NODE_EXCEPTION2=There is a child node under an expected empty cell node.
-NOT_ELEM_NODE_ERROR=The compared nodes are not a Element Node
-NOT_PARA_NODE_ERROR=The compared nodes are not a Paragraph or Heading node -
-NOT_NODE_ERROR=The compared nodes are not a Node
-#
-# SXW to/from DOC conversion error messages.
-#
-UNKNOWN_DOC_VERSION=Unknown DOC version.
-DOC_TEXT_LENGTH_EXCEEDED=DOC text length exceeds maximum value.
-DOC_TEXT_RECORD_SIZE_EXCEEDED=DOC text record exceeds size limit.
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.cxx b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.cxx
deleted file mode 100644
index 3aa3c7be2ad5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.cxx
+++ /dev/null
@@ -1,523 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_xmerge.hxx"
-#include <stdio.h>
-#include <osl/mutex.hxx>
-#include <osl/thread.h>
-#include <cppuhelper/factory.hxx>
-
-#include <cppuhelper/servicefactory.hxx>
-
-#include <com/sun/star/uno/XNamingService.hpp>
-
-#include <com/sun/star/registry/XImplementationRegistration.hpp>
-
-#include <com/sun/star/connection/XConnector.hpp>
-
-#include <com/sun/star/bridge/XUnoUrlResolver.hpp>
-#include <com/sun/star/lang/XMain.hpp>
-#include <com/sun/star/lang/XComponent.hpp>
-
-#include <com/sun/star/frame/XComponentLoader.hpp>
-#include <com/sun/star/uno/Any.hxx>
-#include <com/sun/star/uno/Type.hxx>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/text/XTextDocument.hpp>
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/implbase2.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <cppuhelper/implbase.hxx>
-#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
-#include <com/sun/star/xml/sax/SAXException.hpp>
-#include <com/sun/star/xml/XImportFilter.hpp>
-
-#include <com/sun/star/xml/XExportFilter.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/io/XOutputStream.hpp>
-#include <com/sun/star/frame/XConfigManager.hpp>
-#include <rtl/textenc.h>
-#include <com/sun/star/xml/sax/XParser.hpp>
-#include <com/sun/star/xml/sax/InputSource.hpp>
-using namespace ::rtl;
-using namespace ::cppu;
-using namespace ::osl;
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::registry;
-using namespace ::com::sun::star::connection;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::bridge;
-using namespace ::com::sun::star::text;
-using namespace ::com::sun::star::frame;
-using com::sun::star::uno::Sequence;
-using com::sun::star::uno::Reference;
-using com::sun::star::uno::Any;
-using com::sun::star::uno::UNO_QUERY;
-using com::sun::star::uno::XInterface;
-using com::sun::star::xml::sax::XDocumentHandler;
-using rtl::OUString;
-
-namespace XFlatXml {
-
-void mygetchar()
-{
-#ifdef SAL_W32
- _fgetchar();
-#else
- getchar();
-#endif
-}
-
-
-
-//,com::sun::star::xml::sax::XDocumentHandler,com::sun::star::xml::XExportFilter
-class XFlatXml : public WeakImplHelper3< com::sun::star::xml::XImportFilter,com::sun::star::xml::XExportFilter,com::sun::star::xml::sax::XDocumentHandler>
-{
-private:
- Reference< XMultiServiceFactory > xMSF;
- int indentation;
- bool followsEndNode;
- bool followsStartNode;
-
-
-public:
-
- XFlatXml( const Reference< XMultiServiceFactory > &r ) : xMSF( r )
- {}
-
- virtual sal_Bool SAL_CALL importer(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aSourceData, const com::sun::star::uno::Reference<com::sun::star::xml::sax::XDocumentHandler>& xHandler, const com::sun::star::uno::Sequence<rtl::OUString>& msUserData) throw(RuntimeException);
-
- virtual sal_Bool SAL_CALL exporter(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aSourceData, const com::sun::star::uno::Sequence<rtl::OUString>& msUserData) throw(RuntimeException);
- Reference < com::sun::star::io::XOutputStream > xOutputStream;
-
- virtual void SAL_CALL startDocument() throw (com::sun::star::xml::sax::SAXException,RuntimeException) ;
- virtual void SAL_CALL endDocument() throw (com::sun::star::xml::sax::SAXException,RuntimeException);
- virtual void SAL_CALL startElement(const rtl::OUString& str, const com::sun::star::uno::Reference<com::sun::star::xml::sax::XAttributeList>& attriblist) throw (com::sun::star::xml::sax::SAXException,RuntimeException);
- virtual void SAL_CALL endElement(const rtl::OUString& str) throw (com::sun::star::xml::sax::SAXException,RuntimeException);
- virtual void SAL_CALL characters(const rtl::OUString& str) throw (com::sun::star::xml::sax::SAXException,RuntimeException);
- virtual void SAL_CALL ignorableWhitespace(const rtl::OUString& str) throw (com::sun::star::xml::sax::SAXException,RuntimeException);
- virtual void SAL_CALL processingInstruction(const rtl::OUString& str, const rtl::OUString& str2) throw (com::sun::star::xml::sax::SAXException,RuntimeException) ;
- virtual void SAL_CALL setDocumentLocator(const com::sun::star::uno::Reference<com::sun::star::xml::sax::XLocator>& doclocator) throw (com::sun::star::xml::sax::SAXException,RuntimeException) ;
-
-};
-
- OUString replace(OUString origString, OUString origChar, OUString replaceChar){
- OUString tmp=rtl::OUString::createFromAscii("");
- int index=origString.indexOf(origChar);
- if(index !=-1){
- while (index !=-1){
- OUString first =origString.copy(0,index);
- first=first.concat(replaceChar);
- tmp=tmp.concat(first);
- origString=origString.copy(index+1,origString.getLength());
- index=origString.indexOf(origChar);
- if(index==-1) {
- tmp=tmp.concat(origString);
- }
-
- }
-
- }
-
- return tmp;
- }
-
-OUString needsMask(OUString origString){
-
- if (origString.indexOf(rtl::OUString::createFromAscii("&"))!=-1){
- origString=replace(origString,rtl::OUString::createFromAscii("&"),rtl::OUString::createFromAscii("&amp;"));
- }
- if (origString.indexOf(rtl::OUString::createFromAscii("\""))!=-1){
- origString=replace(origString,rtl::OUString::createFromAscii("\""),rtl::OUString::createFromAscii("&quot;"));
- }
- if (origString.indexOf(rtl::OUString::createFromAscii("<"))!=-1){
- origString=replace(origString,rtl::OUString::createFromAscii("<"),rtl::OUString::createFromAscii("&lt;"));
- }
- if (origString.indexOf(rtl::OUString::createFromAscii(">"))!=-1){
- origString=replace(origString,rtl::OUString::createFromAscii(">"),rtl::OUString::createFromAscii("&gt;"));
- }
- return origString;
-
- }
-
-
-sal_Bool XFlatXml::importer(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aSourceData, const com::sun::star::uno::Reference<com::sun::star::xml::sax::XDocumentHandler>& xHandler, const com::sun::star::uno::Sequence<rtl::OUString>& msUserData) throw (RuntimeException)
-{
- /*
- fprintf (stderr,"\nFound the C++ importer");
-
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[0], RTL_TEXTENCODING_ASCII_US ).getStr());
-
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[1], RTL_TEXTENCODING_ASCII_US ).getStr());
-
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[2], RTL_TEXTENCODING_ASCII_US ).getStr());
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[3], RTL_TEXTENCODING_ASCII_US ).getStr());
- */
- OUString udConvertClass=msUserData[0];
- OUString udJarPath=msUserData[1];
- OUString udImport =msUserData[2];
- OUString udExport =msUserData[3];
- sal_Int32 nLength = aSourceData.getLength();
- OUString sFileName= OUString::createFromAscii("");
- OUString sDirectory = OUString::createFromAscii("");
- OUString sURL = OUString::createFromAscii("");
- Reference<com::sun::star::io::XInputStream> xInputStream;
- Sequence<com::sun::star::beans::PropertyValue> pValue=aSourceData;
- for ( sal_Int32 i = 0 ; i < nLength; i++)
- {
-
- if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "InputStream" ) ) )
- pValue[i].Value >>= xInputStream;
-
- else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "FileName" ) ) )
- pValue[i].Value >>= sFileName;
- else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "URL" ) ) )
- {
- pValue[i].Value >>= sURL;
- sal_Int32 stringIndex = sURL.lastIndexOf(OUString::createFromAscii("/"));
- sFileName = sURL.copy(stringIndex+1, sURL.getLength()-stringIndex);
- sDirectory = sURL.copy(7,sURL.getLength()-7);
- }
- }
- if ( !xInputStream.is() )
- {
- OSL_ASSERT( 0 );
- return sal_False;
- }
- Reference<XConfigManager > xConfMgr( XFlatXml::xMSF->createInstance(
- OUString::createFromAscii("com.sun.star.config.SpecialConfigManager")),UNO_QUERY );
-
- if(! xConfMgr.is()){
- fprintf (stderr, "::com::sun::star::frame::XConfigManager service missing\n" );
- return sal_False;
- }
-
-
- const OUString sSaxParser ( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.sax.Parser") );
- OUString sXMLImportService ( udImport );
- Reference < com::sun::star::xml::sax::XParser > xSaxParser( XFlatXml::xMSF->createInstance( sSaxParser ), UNO_QUERY );
- Reference <XInterface> xPipe;
- xPipe= XFlatXml::xMSF->createInstance(OUString::createFromAscii("com.sun.star.io.Pipe"));
- if(!xPipe.is()){
- fprintf(stderr,"XMLReader::Read:com.sun.star.io.Pipe service missing\n");
- return sal_False;
- }
- //else fprintf(stderr,"pipe created\n");
-
-
- Reference< com::sun::star::io::XInputStream > xPipeInput (xPipe,UNO_QUERY);
-
- //inputStream from pipe
-
- Reference< com::sun::star::io::XOutputStream > xTmpOutputStream (xPipe,UNO_QUERY);
-
- com::sun::star::xml::sax::InputSource aInput;
- aInput.sSystemId = sFileName;
- //aInput.aInputStream = xPipeInput;
- aInput.aInputStream =xInputStream;
- xSaxParser->setDocumentHandler ( xHandler );
- try
- {
-
- xSaxParser->parseStream ( aInput );
- }
- catch( Exception &exc)
- {
- fprintf(stderr,"\nParseStream Exception\n");
- fprintf(stderr, "Fell into the catch block!: %s\n",OUStringToOString(
- exc.Message, RTL_TEXTENCODING_ASCII_US).getStr() );
-
- }
-
- return sal_True;
-}
-
-sal_Bool XFlatXml::exporter(const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aSourceData, const com::sun::star::uno::Sequence<rtl::OUString>& msUserData) throw (RuntimeException){
- /*
- fprintf (stderr,"\nFound the C++ exporter");
-
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[0], RTL_TEXTENCODING_ASCII_US ).getStr());
-
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[1], RTL_TEXTENCODING_ASCII_US ).getStr());
-
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[2], RTL_TEXTENCODING_ASCII_US ).getStr());
- fprintf(stderr,"\nUserData : %s",OUStringToOString( msUserData[3], RTL_TEXTENCODING_ASCII_US ).getStr());
- */
-
- sal_Int32 nLength = aSourceData.getLength();
- Sequence<com::sun::star::beans::PropertyValue> pValue = aSourceData;
- OUString sFileName=OUString::createFromAscii("");
- OUString sDirectory= OUString::createFromAscii("");
- OUString sURL =OUString::createFromAscii("") ;
- for ( sal_Int32 i = 0 ; i < nLength; i++)
- {
-
- if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "OutputStream" ) ) )
- {
- pValue[i].Value >>= XFlatXml::xOutputStream;
- break;
- }
- else if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "URL" ) ) )
- { pValue[i].Value >>= sURL;
- sal_Int32 stringIndex = sURL.lastIndexOf(OUString::createFromAscii("/"));
- sFileName = sURL.copy(stringIndex+1, sURL.getLength()-stringIndex);
- sDirectory = sURL.copy(7,sURL.getLength()-7);
- }
- }
-
-
-
- return sal_True;
-}
-
-
-
-
-
- void XFlatXml::startDocument() throw (com::sun::star::xml::sax::SAXException,RuntimeException){
- //fprintf(stderr,"\nStartDocument ");
- indentation=0;
- followsEndNode=false;
- followsStartNode=false;
- // xExportHandler->startDocument();
-
- }
-
- void XFlatXml::endDocument() throw (com::sun::star::xml::sax::SAXException,RuntimeException){
- //fprintf(stderr,"\nEndDocument ");
- //xExportHandler->endDocument();
- }
-
- void XFlatXml::startElement(const rtl::OUString& str, const com::sun::star::uno::Reference<com::sun::star::xml::sax::XAttributeList>& attriblist) throw (com::sun::star::xml::sax::SAXException,RuntimeException)
- {
- OUString indent=OUString::createFromAscii("");
- if (followsStartNode){
- indent+=OUString::createFromAscii("\n");
- for (int i=0 ;i<indentation;i++){
- indent+=OUString::createFromAscii(" ");
- }
- }
- OUString lt =indent;
- lt+=OUString::createFromAscii("<");
- lt+= (str);
-
- if (attriblist !=NULL)
- {
- lt += OUString::createFromAscii(" ");
- int len=attriblist->getLength();
- for (short i=0;i<len;i++)
- {
- lt +=attriblist->getNameByIndex(i);
- lt +=OUString::createFromAscii("=\"");
- lt +=needsMask(attriblist->getValueByIndex(i));
- lt +=OUString::createFromAscii("\" ");
- }
- }
- lt+=OUString::createFromAscii(">");
- OString sStr= OUStringToOString(lt, RTL_TEXTENCODING_UTF8);
- Sequence <sal_Int8> b((const sal_Int8 *)sStr.getStr(),sStr.getLength());
- //Sequence <sal_Int8>b((const sal_Int8 *)OUStringToOString( lt, RTL_TEXTENCODING_UTF8 ).getStr(),(OUStringToOString( lt, RTL_TEXTENCODING_UTF8 ).getStr()).getLength());
- try{
-
- XFlatXml::xOutputStream->writeBytes(b);
- }
- catch ( Exception &exc){
- fprintf(stderr,"Exception");
- }
- indentation++;
- }
-
- void XFlatXml::endElement(const rtl::OUString& str) throw (com::sun::star::xml::sax::SAXException,RuntimeException) {
- OUString indent=OUString::createFromAscii("");
- indentation--;
- if (followsEndNode){
- indent+=OUString::createFromAscii("\n");
- for (int i=0 ;i<indentation;i++){
- indent+=OUString::createFromAscii(" ");
- }
- }
- OUString lt =indent;
- lt+=OUString::createFromAscii("</");
- //OUString lt =OUString::createFromAscii("</");
- lt+= (str);
-
- lt+=OUString::createFromAscii(">");
- //System.out.println(str);
- //fprintf(stderr,"%s",OUStringToOString( lt, RTL_TEXTENCODING_ASCII_US ).getStr());
- OString sStr= OUStringToOString(lt, RTL_TEXTENCODING_UTF8);
- Sequence <sal_Int8> b((const sal_Int8 *)sStr.getStr(),sStr.getLength());
- try{
-
- XFlatXml::xOutputStream->writeBytes(b);
- }
- catch ( Exception &exc){
-
- }
- followsEndNode=true;
- followsStartNode=true;
-}
-
- void XFlatXml::characters(const rtl::OUString& str) throw (com::sun::star::xml::sax::SAXException,RuntimeException) {
- //fprintf(stderr,"\n %s ",OUStringToOString(str, RTL_TEXTENCODING_ASCII_US).getStr());
- OUString newStr = needsMask(str);
- OString sStr= OUStringToOString(newStr, RTL_TEXTENCODING_UTF8);
- Sequence <sal_Int8> b((const sal_Int8 *)sStr.getStr(),sStr.getLength());
- try{
-
- XFlatXml::xOutputStream->writeBytes(b);
- }
- catch ( Exception &exc){
-
- }
- followsEndNode=false;
- followsStartNode=false;
- }
-
-
- void XFlatXml::ignorableWhitespace(const rtl::OUString& str) throw (com::sun::star::xml::sax::SAXException,RuntimeException){
- //xExportHandler->ignorableWhitespace( str);
-
- //fprintf(stderr,"%s",OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ).getStr());
- /*
- OString sStr= OUStringToOString(str, RTL_TEXTENCODING_UTF8);
- Sequence <sal_Int8> b((const sal_Int8 *)sStr.getStr(),sStr.getLength());
- try{
-
- XFlatXml::xOutputStream->writeBytes(b);
- }
- catch ( Exception &exc){
-
- }
- */
-
-}
-
- void XFlatXml::processingInstruction(const rtl::OUString& str, const rtl::OUString& str2) throw (com::sun::star::xml::sax::SAXException,RuntimeException) {
- //xExportHandler->processingInstruction( str, str2);
-}
-
- void XFlatXml::setDocumentLocator(const com::sun::star::uno::Reference<com::sun::star::xml::sax::XLocator>& doclocator) throw (com::sun::star::xml::sax::SAXException,RuntimeException) {
- //xExportHandler->setDocumentLocator( doclocator);
- }
-
-
-
-Reference< XInterface > SAL_CALL CreateInstance( const Reference< XMultiServiceFactory > &r)
-{
- //fprintf(stderr,"\nCreateInstance\n");
- //return Reference< XInterface > ( ( OWeakObject * ) new OfficeClientMain(r) );
- return Reference< XInterface > ( ( OWeakObject * ) new XFlatXml(r) );
-}
-
-Sequence< OUString > getSupportedServiceNames()
-{
- //fprintf(stderr,"\ngetSupportedServiceNames\n");
- static Sequence < OUString > *pNames = 0;
- if( ! pNames )
- {
- MutexGuard guard( Mutex::getGlobalMutex() );
- if( !pNames )
- {
- static Sequence< OUString > seqNames(2);
- seqNames.getArray()[0] = OUString::createFromAscii( "com.sun.star.documentconversion.XFlatXml" );
- pNames = &seqNames;
- }
- }
- return *pNames;
-}
-
-}
-
-using namespace XFlatXml;
-#define IMPLEMENTATION_NAME "com.sun.star.documentconversion.XFlatXml"
-
-
-extern "C"
-{
-//==================================================================================================
-void SAL_CALL component_getImplementationEnvironment(
- const sal_Char ** ppEnvTypeName, uno_Environment ** ppEnv )
-{
- // printf("\ncomponent_getImplementationEnvironment\n");
- *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
-
-}
-//==================================================================================================
-sal_Bool SAL_CALL component_writeInfo(
- void * pServiceManager, void * pRegistryKey )
-{
-
- //fprintf(stderr,"\ncomponent_writeInfo\n");
- if (pRegistryKey)
- {
- try
- {
- Reference< XRegistryKey > xNewKey(
- reinterpret_cast< XRegistryKey * >( pRegistryKey )->createKey(
- OUString::createFromAscii( "/" IMPLEMENTATION_NAME "/UNO/SERVICES" ) ) );
-
- const Sequence< OUString > & rSNL = getSupportedServiceNames();
- const OUString * pArray = rSNL.getConstArray();
- for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
- xNewKey->createKey( pArray[nPos] );
-
- return sal_True;
- }
- catch (InvalidRegistryException &)
- {
- OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
- }
- }
- return sal_False;
-}
-//==================================================================================================
-void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- //fprintf(stderr,"\ncomponent_getFactory");
- void * pRet = 0;
-
- if (pServiceManager && rtl_str_compare( pImplName, IMPLEMENTATION_NAME ) == 0)
- {
- Reference< XSingleServiceFactory > xFactory( createSingleFactory(
- reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
- OUString::createFromAscii( pImplName ),
- CreateInstance, getSupportedServiceNames() ) );
-
- if (xFactory.is())
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
- }
-
- return pRet;
-}
-}
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.xml b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.xml
deleted file mode 100644
index c4e9ba41e42d..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/FlatXml.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> FlatXml </module-name>
- <component-description>
- <author> Aidan Butler </author>
- <name> com.sun.star.documentconversion.XFlatXml </name>
- <description>
- This component is a sample implementation, which describes how a filter may be written that uses the XmlFilterAdaptor component. This filter opens and saves Flat Xml files.
- </description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper$(UDK_MAJOR)$(COM) </runtime-module-dependency>
- <runtime-module-dependency> salhelper$(UDK_MAJOR)$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu$(UDK_MAJOR) </runtime-module-dependency>
- <runtime-module-dependency> reg$(UDK_MAJOR) </runtime-module-dependency>
- <runtime-module-dependency> store$(UDK_MAJOR) </runtime-module-dependency>
- <runtime-module-dependency> sal$(UDK_MAJOR) </runtime-module-dependency>
-</module-description>
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile
deleted file mode 100644
index 9f8f209a105b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile
+++ /dev/null
@@ -1,102 +0,0 @@
-# Builds the remoteclient demo.
-
-PRJ=..$(PS)..$(PS)..
-SETTINGS=../../../settings
-
-# Include settings makefile depending on platform/compiler
-ifeq "$(MAKECMDGOALS)" "win_microcxx"
- -include $(SETTINGS)/win_microcxx_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_BIN)
-endif
-ifeq "$(MAKECMDGOALS)" "solaris_workshopcxx"
- -include $(SETTINGS)/solaris_workshopcxx_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_LIB)
-endif
-ifeq "$(MAKECMDGOALS)" "linux_gcc"
- -include $(SETTINGS)/linux_gcc_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_LIB)
-endif
-
-# Define non-platform/compiler specific settings
-
-include $(SETTINGS)/dk.mk
-include $(SETTINGS)/std.mk
-
-# Define non-platform/compiler specific settings
-
-# Targets
-.PHONY: ALL
-ALL :
- @echo -------------------------------------------------------------
- @echo You must supply a target where TARGET is one of the following:
- @echo
- @echo win_microcxx : Windows using Microsoft C++ compiler/linker
- @echo solaris_workshopcxx : Solaris using Sun Workshop C++ compiler
- @echo linux_gcc : Linux using gcc
- @echo -------------------------------------------------------------
-
-TYPEFLAGFILE= $(OUT_MISC)$(PS)type_generation_officeclient_is_ok.flag
-
-REGISTERFLAGFILE= $(OUT_MISC)$(PS)register_components_officeclient_is_ok.flag
-
-#win_microcxx : $(OUT) $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)FlatXml.$(SHAREDLIB_EXT)
-win_microcxx : $(REGISTERFLAGFILE)
-
-#solaris_workshopcxx : $(OUT) $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)FlatXml.$(SHAREDLIB_EXT)
-solaris_workshopcxx : $(REGISTERFLAGFILE)
-
-#linux_gcc : $(OUT) $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)FlatXml.$(SHAREDLIB_EXT)
-linux_gcc : $(REGISTERFLAGFILE)
-
-include $(SETTINGS)/stdtarget.mk
-
-TYPES := $(foreach t,$(shell xml2cmp -types stdout FlatXml.xml),-T$(t))
-
-$(TYPEFLAGFILE) : $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- -$(DEL) $(TYPEFLAGFILE)
- @echo Building for $(MAKECMDGOALS)
- @echo $(BIN_DIR)$(PS)cppumaker -BUCR -O$(OUT)$(PS)inc$(PS)examples $(TYPES) $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- $(BIN_DIR)$(PS)cppumaker -BUCR -O$(OUT)$(PS)inc$(PS)examples $(TYPES) $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- regmerge $(OUT_BIN)$(PS)FlatXml.rdb / $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- @echo bla >$(TYPEFLAGFILE)
-
-$(OUT_SLO)$(PS)FlatXml.$(OBJ_EXT) : FlatXml.cxx $(TYPEFLAGFILE)
- $(CC) $(CC_FLAGS) $(CC_INCLUDES) $(CC_DEFINES) $(CC_OUTPUT_SWITCH)$@ $<
-
-
-$(OUT_SLB)$(PS)FlatXml.lib : $(OUT_SLO)$(PS)FlatXml.$(OBJ_EXT)
-ifeq "$(OS)" "WIN"
- $(BUILDLIB) /OUT:$@ $^
-endif
-
-$(OUT_LIB)$(PS)FlatXml.lib : $(OUT_SLO)$(PS)FlatXml.$(OBJ_EXT)
-ifeq "$(OS)" "WIN"
- @echo EXPORTS > $(OUT_MISC)$(PS)FlatXml.def
- $(CAT) exports.dxp >> $(OUT_MISC)$(PS)FlatXml.def
- $(BUILDLIB) /OUT:$@ /DEF:$(OUT_MISC)$(PS)FlatXml.def
-endif
-
-$(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)FlatXml.$(SHAREDLIB_EXT) : $(OUT_LIB)$(PS)FlatXml.lib \
- $(OUT_SLB)$(PS)FlatXml.lib
-ifeq "$(OS)" "WIN"
- $(LINK) $(LIBRARY_LINK_FLAGS) /OUT:$@ /MAP:$(OUT_MISC)$(PS)FlatXml.map \
- $(OUT_LIB)$(PS)FlatXmlexp $(OUT_SLB)$(PS)FlatXml.lib \
- $(SALLIB) $(CPPULIB) $(CPPUHELPERLIB) msvcrt.lib kernel32.lib
-else
- $(LINK) $(LIBRARY_LINK_FLAGS) $(LINK_LIBS) -o $@ $(OUT_SLO)$(PS)FlatXml.$(OBJ_EXT) \
- $(SALLIB) $(CPPULIB) $(CPPUHELPERLIB)
-endif
-
-$(REGISTERFLAGFILE) : $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)FlatXml.$(SHAREDLIB_EXT)
- -$(DEL) $(REGISTERFLAGFILE)
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile.bck b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile.bck
deleted file mode 100644
index 1983e099c582..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/Makefile.bck
+++ /dev/null
@@ -1,108 +0,0 @@
-# Builds the remoteclient demo.
-
-PRJ=..$(PS)..$(PS)..
-SETTINGS=../../../settings
-
-# Include settings makefile depending on platform/compiler
-ifeq "$(MAKECMDGOALS)" "win_microcxx"
- -include $(SETTINGS)/win_microcxx_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_BIN)
-endif
-ifeq "$(MAKECMDGOALS)" "solaris_workshopcxx"
- -include $(SETTINGS)/solaris_workshopcxx_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_LIB)
-endif
-ifeq "$(MAKECMDGOALS)" "linux_gcc"
- -include $(SETTINGS)/linux_gcc_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_LIB)
-endif
-
-# Define non-platform/compiler specific settings
-
-include $(SETTINGS)/dk.mk
-include $(SETTINGS)/std.mk
-
-# Define non-platform/compiler specific settings
-
-# Targets
-.PHONY: ALL
-ALL :
- @echo -------------------------------------------------------------
- @echo You must supply a target where TARGET is one of the following:
- @echo
- @echo win_microcxx : Windows using Microsoft C++ compiler/linker
- @echo solaris_workshopcxx : Solaris using Sun Workshop C++ compiler
- @echo linux_gcc : Linux using gcc
- @echo -------------------------------------------------------------
-
-TYPEFLAGFILE= $(OUT_MISC)$(PS)type_generation_officeclient_is_ok.flag
-
-REGISTERFLAGFILE= $(OUT_MISC)$(PS)register_components_officeclient_is_ok.flag
-
-#win_microcxx : $(OUT) $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)officeclientsample.$(SHAREDLIB_EXT)
-win_microcxx : $(REGISTERFLAGFILE)
-
-#solaris_workshopcxx : $(OUT) $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)officeclientsample.$(SHAREDLIB_EXT)
-solaris_workshopcxx : $(REGISTERFLAGFILE)
-
-#linux_gcc : $(OUT) $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)officeclientsample.$(SHAREDLIB_EXT)
-linux_gcc : $(REGISTERFLAGFILE)
-
-include $(SETTINGS)/stdtarget.mk
-
-TYPES := $(foreach t,$(shell xml2cmp -types stdout officeclientsample.xml),-T$(t))
-
-$(TYPEFLAGFILE) : $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- -$(DEL) $(TYPEFLAGFILE)
- @echo Building for $(MAKECMDGOALS)
- $(BIN_DIR)$(PS)cppumaker -BUCR -O$(OUT)$(PS)inc$(PS)examples $(TYPES) $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- regmerge $(OUT_BIN)$(PS)officeclient.rdb / $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- @echo bla >$(TYPEFLAGFILE)
-
-$(OUT_SLO)$(PS)officeclient.$(OBJ_EXT) : officeclient.cxx $(TYPEFLAGFILE)
- $(CC) $(CC_FLAGS) $(CC_INCLUDES) $(CC_DEFINES) $(CC_OUTPUT_SWITCH)$@ $<
-
-
-$(OUT_SLB)$(PS)officeclient.lib : $(OUT_SLO)$(PS)officeclient.$(OBJ_EXT)
-ifeq "$(OS)" "WIN"
- $(BUILDLIB) /OUT:$@ $^
-endif
-
-$(OUT_LIB)$(PS)officeclient.lib : $(OUT_SLO)$(PS)officeclient.$(OBJ_EXT)
-ifeq "$(OS)" "WIN"
- @echo EXPORTS > $(OUT_MISC)$(PS)officeclientsample.def
- $(CAT) exports.dxp >> $(OUT_MISC)$(PS)officeclientsample.def
- $(BUILDLIB) /OUT:$@ /DEF:$(OUT_MISC)$(PS)officeclientsample.def
-endif
-
-$(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)officeclientsample.$(SHAREDLIB_EXT) : $(OUT_LIB)$(PS)officeclient.lib \
- $(OUT_SLB)$(PS)officeclient.lib
-ifeq "$(OS)" "WIN"
- $(LINK) $(LIBRARY_LINK_FLAGS) /OUT:$@ /MAP:$(OUT_MISC)$(PS)officeclientsample.map \
- $(OUT_LIB)$(PS)officeclient.exp $(OUT_SLB)$(PS)officeclient.lib \
- $(SALLIB) $(CPPULIB) $(CPPUHELPERLIB) msvcrt.lib kernel32.lib
-else
- $(LINK) $(LIBRARY_LINK_FLAGS) $(LINK_LIBS) -o $@ $(OUT_SLO)$(PS)officeclient.$(OBJ_EXT) \
- $(SALLIB) $(CPPULIB) $(CPPUHELPERLIB)
-endif
-
-$(REGISTERFLAGFILE) : $(SHAREDLIB_OUT)$(PS)$(SHAREDLIB_PRE)officeclientsample.$(SHAREDLIB_EXT)
- -$(DEL) $(REGISTERFLAGFILE)
- @echo *******************************************************
- @echo Register components in officeclient.rdb
- @echo *******************************************************
- regcomp -register -r $(OUT_BIN)$(PS)officeclient.rdb -c $(SHAREDLIB_PRE)connectr.$(SHAREDLIB_EXT)
- regcomp -register -r $(OUT_BIN)$(PS)officeclient.rdb -c $(SHAREDLIB_PRE)remotebridge.$(SHAREDLIB_EXT)
- regcomp -register -r $(OUT_BIN)$(PS)officeclient.rdb -c $(SHAREDLIB_PRE)brdgfctr.$(SHAREDLIB_EXT)
- regcomp -register -r $(OUT_BIN)$(PS)officeclient.rdb -c $(SHAREDLIB_PRE)uuresolver.$(SHAREDLIB_EXT)
- @echo bla > $(REGISTERFLAGFILE)
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/README b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/README
deleted file mode 100644
index a5b82ce4cef4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/README
+++ /dev/null
@@ -1,97 +0,0 @@
-The Flat Xml Filter
-====================
-
-
-This sample provides a sample FlatXml filter for Openoffice. It have been developed to make use of the XmlFilterAdapter module. This code can also be used as a Skeleton implementation for developing a more complex filter.
-
-
-
-How does the code work?
-========================
-
- Firstly, the code has been developed to use the XmlFilterAdaptor module. For this reason, we must conform to the interfaces that the XmlFilterAdaptor is expecting. These interfaces are
-
- com/sun/star/xml/XImportFilter
- com/sun/star/xml/XExportFilter
-
-Also, when we are exporting, we want the FlatXml filter to behave like a DocumentHandler, we must also implement the XDocumentHandler interface
-
- com/sun/star/xml/sax/XDocumentHandler
-
-With these interfaces implemented, we can now start to get the code to work as a import and export filter.
-
-
-
-How do I Build the code?
-========================
- run:
- make solaris_workshopcxx //for Solaris
- make win_microcxx //for windows
- make linux_gcc //for linux
-This will produce a FlatXml.so or FlatXml.dll library in the <platform>/lib directory.
-
-
-
-
-How do I register this filter with OpenOffice?
-==============================================
-
-The Odk contains a program called "regcomp". This program queries a component (library or jar file) for information and then places this information into an OpenOffice installations "applicat.rdb". This database is used by OpenOffice to identify what components it has and where to find them.
-
-To register a component on Solaris or Linux:
-----------------------------------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.so"
-
-To register a component on windows:
-----------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.dll"
-
-To register a java based component (Jar file):
-----------------------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.jar" -l com.sun.star.loader.Java2
-
-(For more info on registering java components see http://udk.openoffice.org/java/man/register_java_components.html)
-
-
-
-
-
-How do I access this filter from OpenOffice?
-============================================
-
-In an OpenOffice installation set, there is a file called TypeDetection.xml (usually located at <install dir>/share/config/registry/instance/org/openoffice/Office/TypeDetection.xml).
-This file contains the definitions of all of the filters that staroffice uses to open and save files. Therefore, we must add an entry to this file in order to make our filters visible and usable within OpenOffice.
-
-The TypeDetection.xml consists of <Type> definitions which describe a particular format and <Filter> definitions which define how a Type is opened and saved.
-
-Firstly, make a backup of your TypeDetection.xml file.
-When this has been done, cut and paste the following into the relevant sections in the TypeDetection.xml file.
-
- under Types:
- ============
- <Type cfg:name="writer_Flat_XML_File">
- <UIName cfg:type="string" cfg:localized="true">
- <cfg:value xml:lang="en-US">Flat XML File</cfg:value>
- </UIName>
- <Data cfg:type="string">1,,,,xml,20002,</Data>
- </Type>
-
- under Filters:
- ==============
- <Filter cfg:name="Flat XML File">
- <Installed cfg:type="boolean">true</Installed>
- <UIName cfg:type="string" cfg:localized="true" <cfg:value xml:lang="en-US">Flat XML File</cfg:value></UIName>
- <Data cfg:type="string">0,writer_Flat_XML_File,com.sun.star.text.TextDocument,com.sun.star.comp.Writer.XmlFilterAdaptor,524355,com.sun.star.documentconversion.XFlatXml; ;com.sun.star.comp.Writer.XMLImporter;com.sun.star.comp.Writer.XMLExporter,0,,</Data>
- </Filter>
-
-This filter definition, will now open Flat Xml files with the extension .xml.
-
-
-Now What?
-=========
-When OpenOffice is restarted, a new filter type will be available in the Open and Save Dialog boxes. To save a file as Flat Xml, just go to the "Save As" menu item, and select "Flat XML File" as the format.
-
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/exports.dxp b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/exports.dxp
deleted file mode 100644
index 9630d7e06768..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/exports.dxp
+++ /dev/null
@@ -1,3 +0,0 @@
-component_getImplementationEnvironment
-component_writeInfo
-component_getFactory
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/makefile.mk b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/makefile.mk
deleted file mode 100644
index f93616bcf4e1..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/cpp/makefile.mk
+++ /dev/null
@@ -1,97 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ=..$/..
-
-PRJNAME=FlatXml
-TARGET=FlatXml
-ENABLE_EXCEPTIONS=TRUE
-NO_BSYMBOLIC=TRUE
-COMP1TYPELIST=$(TARGET)
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-.IF "$(GUI)"=="WNT"
-DLLPOSTFIX=.dll
-DLLPREFIX=
-.ELSE
-DLLPOSTFIX=.so
-DLLPREFIX=lib
-.ENDIF
-
-# --- Files --------------------------------------------------------
-ALLIDLFILES = test_bridge.idl
-#CPPUMAKERFLAGS += -C
-
-UNOUCRDEP=$(SOLARBINDIR)$/applicat.rdb
-UNOUCRRDB=$(SOLARBINDIR)$/applicat.rdb
-
-# output directory (one dir for each project)
-UNOUCROUT=$(OUT)$/inc$/examples
-
-# adding to inludeoath
-INCPRE+=$(UNOUCROUT)
-
-SLOFILES = $(SLO)$/FlatXml.obj
-
-SHL1TARGET= FlatXml
-
-SHL1STDLIBS= \
- $(SALLIB) \
- $(VOSLIB) \
- $(CPPULIB) \
- $(CPPUHELPERLIB)
-
-SHL1DEPN=
-SHL1IMPLIB= i$(SHL1TARGET)
-SHL1LIBS= $(SLB)$/$(SHL1TARGET).lib
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-
-DEF1NAME= $(SHL1TARGET)
-DEF1EXPORTFILE= exports.dxp
-
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)$/component_officeclient_registered.flag
-
-.IF "$(GUI)"=="WNT"
-PATHPREFIX = .
-CURRENTDIR = $(BIN)
-.ELSE
-PATHPREFIX = ..$/bin
-CURRENTDIR = $(LB)
-.ENDIF
-
-$(MISC)$/component_officeclient_registered.flag .SETDIR=$(CURRENTDIR):
- -rm -f ..$/misc$/component_officeclient_registered.flag
- $(COPY) $(SOLARBINDIR)$/applicat.rdb $(PATHPREFIX)$/officeclient.rdb
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Makefile b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Makefile
deleted file mode 100755
index 7f4d624235f8..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Makefile
+++ /dev/null
@@ -1,123 +0,0 @@
-# Builds the java demo component.
-
-PRJ=..$(PS)..$(PS)..
-SETTINGS=../../../settings
-
-# Include settings makefile depending on platform/compiler
-ifeq "$(MAKECMDGOALS)" "win_microcxx"
- -include $(SETTINGS)/win_microcxx_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_BIN)
-endif
-ifeq "$(MAKECMDGOALS)" "solaris_workshopcxx"
- -include $(SETTINGS)/solaris_workshopcxx_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_LIB)
-endif
-ifeq "$(MAKECMDGOALS)" "linux_gcc"
- -include $(SETTINGS)/linux_gcc_settings.mk
-ifndef PS
-$(error Platform/Compiler settings file not found)
-endif
- SHAREDLIB_OUT=$(OUT_LIB)
-endif
-
-# Define non-platform/compiler specific settings
-
-include $(SETTINGS)/dk.mk
-include $(SETTINGS)/std.mk
-
-# Define non-platform/compiler specific settings
-
-
-# Targets
-.PHONY: ALL
-ALL :
- @echo -------------------------------------------------------------
- @echo You must supply a target where TARGET is one of the following:
- @echo
- @echo win_microcxx : Windows using Microsoft C++ compiler/linker
- @echo solaris_workshopcxx : Solaris using Sun Workshop C++ compiler
- @echo linux_gcc : Linux using gcc
- @echo -------------------------------------------------------------
-
-REGISTERFLAGFILE = $(OUT_MISC)$(PS)register_components_XFlatXml_is_ok.flag
-
-OUT_COMPONENT = $(OUT_CLASS)$(PS)XFlatXml
-COMPONENT_RDB = $(OUT_BIN)$(PS)XFlatXml.rdb
-
-COMPONENT_JAR = $(OUT_CLASS)$(PS)XFlatXml.jar
-COMPONENT_MANIFESTFILE = manifest
-
-IDLFILES = XFilterAdapter.idl
-
-# normally the idl file should be stored in a directory tree fitting the module structure,
-# for the example we know the module structure
-PACKAGE = com$(PS)sun$(PS)star$(PS)document
-
-JAVAFILES = XOutputStreamToOutputStreamAdapter.java XInputStreamToInputStreamAdapter.java TestStream.java XFlatXml.java
-
-GENJAVAFILES = $(patsubst %.idl,$(OUT_MISC)$(PS)$(PACKAGE)$(PS)%.java,$(IDLFILES) )
-GENURDFILES = $(patsubst %.idl,$(OUT_MISC)$(PS)%.urd,$(IDLFILES) )
-
-CLASSFILES = $(patsubst %.java,$(OUT_COMPONENT)$(PS)%.class,$(JAVAFILES) )
-
-CLASSFILES += $(patsubst %.java,$(OUT_COMPONENT)$(PS)$(PACKAGE)$(PS)%.class,$(GENJAVAFILES) )
-
-DK_CLASSPATH = $(subst $(EMPTYSTRING) $(EMPTYSTRING),, \
- $(CLASSES_DIR)$(PS)jurt.jar\
- $(PATH_SEPARATOR)$(CLASSES_DIR)$(PS)unoil.jar\
- $(PATH_SEPARATOR)$(CLASSES_DIR)$(PS)ridl.jar\
- $(PATH_SEPARATOR)$(CLASSES_DIR)$(PS)java_uno.jar\
- $(PATH_SEPARATOR)$(CLASSES_DIR)$(PS)juh.jar\
- $(PATH_SEPARATOR)$(CLASSPATH) \
- $(PATH_SEPARATOR)$(OUT_COMPONENT) \
- )
-
-OFFICE_FILEURL = $(subst \,/,$(OFFICE_PROGRAM_PATH))
-OFFICE_CLASSPATH = $(subst $(CLASSES_DIR),$(OFFICE_PROGRAM_PATH)$(PS)classes, $(DK_CLASSPATH))
-
-win_microcxx : $(COMPONENT_JAR) $(REGISTERFLAGFILE)
-
-solaris_workshopcxx : $(COMPONENT_JAR) $(REGISTERFLAGFILE)
-
-linux_gcc : $(COMPONENT_JAR) $(REGISTERFLAGFILE)
-
-include $(SETTINGS)/stdtarget.mk
-
-$(OUT_COMPONENT) : $(OUT) $(OUT_CLASS)
- $(MKDIR) $(OUT_COMPONENT)
-
-$(GENJAVAFILES) : $(IDLFILES)
- $(BIN_DIR)$(PS)idlc -I. -I$(IDL_DIR) -O$(OUT_MISC) $(IDLFILES)
- $(BIN_DIR)$(PS)regmerge $(COMPONENT_RDB) /UCR $(GENURDFILES)
- $(BIN_DIR)$(PS)regmerge $(COMPONENT_RDB) / $(BIN_DIR)$(PS)$(DKREGISTRYNAME)
- $(BIN_DIR)$(PS)javamaker -BUCR -Tcom.sun.star.document.XFilterAdapter -O$(OUT_MISC) $(COMPONENT_RDB)
- $(BIN_DIR)$(PS)cppumaker -BUCR -Tcom.sun.star.document.XFilterAdapter -O$(OUT)$(PS)inc$(PS)examples $(COMPONENT_RDB)
-
-$(CLASSFILES) : $(OUT_COMPONENT) $(GENJAVAFILES) $(JAVAFILES)
- javac -classpath $(DK_CLASSPATH) -d $(OUT_COMPONENT) $(GENJAVAFILES) $(JAVAFILES)
-
-$(COMPONENT_JAR) : $(CLASSFILES)
- jar cvfm $(COMPONENT_JAR) Manifest -C $(OUT_COMPONENT) .
-
-#$(REGISTERFLAGFILE) : $(REGISTERFLAGFILE)
-$(REGISTERFLAGFILE) : FORCE
-ifneq "$(OFFICE_PROGRAM_PATH)" ""
- $(BIN_DIR)$(PS)regmerge $(OFFICE_PROGRAM_PATH)$(PS)applicat.rdb /UCR $(GENURDFILES)
- $(COPY) $(COMPONENT_JAR) $(OFFICE_PROGRAM_PATH)$(PS)classes
- java -classpath $(OFFICE_CLASSPATH) com.sun.star.tools.uno.RegComp "$(URLPREFIX)$(OFFICE_FILEURL)/applicat.rdb" register "$(URLPREFIX)$(OFFICE_FILEURL)/classes/XFlatXml.jar" com.sun.star.loader.Java2
- @echo bla > $(REGISTERFLAGFILE)
-else
- @echo ----------------------------------------------------------------------------------------
- @echo If you want to install your component automatically, please set an OFFICE_PROGRAM_PATH
- @echo environment variable to the program directory of a valid office installation .
- @echo ----------------------------------------------------------------------------------------
-endif
-
-
-FORCE :
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Manifest b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Manifest
deleted file mode 100755
index 3aeb7abf46d3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-RegistrationClassName: XFlatXml
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/README b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/README
deleted file mode 100755
index a5b82ce4cef4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/README
+++ /dev/null
@@ -1,97 +0,0 @@
-The Flat Xml Filter
-====================
-
-
-This sample provides a sample FlatXml filter for Openoffice. It have been developed to make use of the XmlFilterAdapter module. This code can also be used as a Skeleton implementation for developing a more complex filter.
-
-
-
-How does the code work?
-========================
-
- Firstly, the code has been developed to use the XmlFilterAdaptor module. For this reason, we must conform to the interfaces that the XmlFilterAdaptor is expecting. These interfaces are
-
- com/sun/star/xml/XImportFilter
- com/sun/star/xml/XExportFilter
-
-Also, when we are exporting, we want the FlatXml filter to behave like a DocumentHandler, we must also implement the XDocumentHandler interface
-
- com/sun/star/xml/sax/XDocumentHandler
-
-With these interfaces implemented, we can now start to get the code to work as a import and export filter.
-
-
-
-How do I Build the code?
-========================
- run:
- make solaris_workshopcxx //for Solaris
- make win_microcxx //for windows
- make linux_gcc //for linux
-This will produce a FlatXml.so or FlatXml.dll library in the <platform>/lib directory.
-
-
-
-
-How do I register this filter with OpenOffice?
-==============================================
-
-The Odk contains a program called "regcomp". This program queries a component (library or jar file) for information and then places this information into an OpenOffice installations "applicat.rdb". This database is used by OpenOffice to identify what components it has and where to find them.
-
-To register a component on Solaris or Linux:
-----------------------------------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.so"
-
-To register a component on windows:
-----------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.dll"
-
-To register a java based component (Jar file):
-----------------------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.jar" -l com.sun.star.loader.Java2
-
-(For more info on registering java components see http://udk.openoffice.org/java/man/register_java_components.html)
-
-
-
-
-
-How do I access this filter from OpenOffice?
-============================================
-
-In an OpenOffice installation set, there is a file called TypeDetection.xml (usually located at <install dir>/share/config/registry/instance/org/openoffice/Office/TypeDetection.xml).
-This file contains the definitions of all of the filters that staroffice uses to open and save files. Therefore, we must add an entry to this file in order to make our filters visible and usable within OpenOffice.
-
-The TypeDetection.xml consists of <Type> definitions which describe a particular format and <Filter> definitions which define how a Type is opened and saved.
-
-Firstly, make a backup of your TypeDetection.xml file.
-When this has been done, cut and paste the following into the relevant sections in the TypeDetection.xml file.
-
- under Types:
- ============
- <Type cfg:name="writer_Flat_XML_File">
- <UIName cfg:type="string" cfg:localized="true">
- <cfg:value xml:lang="en-US">Flat XML File</cfg:value>
- </UIName>
- <Data cfg:type="string">1,,,,xml,20002,</Data>
- </Type>
-
- under Filters:
- ==============
- <Filter cfg:name="Flat XML File">
- <Installed cfg:type="boolean">true</Installed>
- <UIName cfg:type="string" cfg:localized="true" <cfg:value xml:lang="en-US">Flat XML File</cfg:value></UIName>
- <Data cfg:type="string">0,writer_Flat_XML_File,com.sun.star.text.TextDocument,com.sun.star.comp.Writer.XmlFilterAdaptor,524355,com.sun.star.documentconversion.XFlatXml; ;com.sun.star.comp.Writer.XMLImporter;com.sun.star.comp.Writer.XMLExporter,0,,</Data>
- </Filter>
-
-This filter definition, will now open Flat Xml files with the extension .xml.
-
-
-Now What?
-=========
-When OpenOffice is restarted, a new filter type will be available in the Open and Save Dialog boxes. To save a file as Flat Xml, just go to the "Save As" menu item, and select "Flat XML File" as the format.
-
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/TestStream.java b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/TestStream.java
deleted file mode 100644
index 7485a28de622..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/TestStream.java
+++ /dev/null
@@ -1,461 +0,0 @@
-
-import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
-import com.sun.star.io.NotConnectedException;
-import com.sun.star.io.BufferSizeExceededException;
-import com.sun.star.io.IOException;
-
-class TestStream implements XInputStream, XOutputStream {
-
- /** An array of bytes to be returned when the XInputStream read() method
- * is called
- */
- private byte [] isBytes;
-
- /**
- * A backup buffer where data sent to the XOutputStream write() method
- * is placed, used for verification purposes.
- */
- private byte [] bytesBak;
-
- /**
- * Maximum length of data returned by XInputStream read().
- */
- private static int inputLength = 256;
-
- /**
- * Keeps track of how far into the XInputStream has been read.
- */
- private int currentLoc;
-
-
- /**
- * Constructor. Sets up the isBytes array.
- */
- public TestStream() {
-
- currentLoc = 0;
-
- isBytes = new byte [inputLength];
- for (int i=0; i < inputLength; i++) {
- isBytes[i] = (byte)i;
- }
- }
-
- /* XInputStream interfaces */
-
- public int readBytes(byte[][] aData, int toRead)
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- int checkSize = inputLength - currentLoc;
-
- if (checkSize <= 0) {
- return -1;
- } else if (toRead > checkSize) {
- System.arraycopy(isBytes, currentLoc, aData[0], 0, checkSize);
- currentLoc += checkSize;
- return checkSize;
- } else {
- System.arraycopy(isBytes, currentLoc, aData[0], 0, toRead);
- currentLoc += toRead;
- return toRead;
- }
- }
-
- public int readSomeBytes(byte[][] aData, int nMaxBytesToRead)
- throws NotConnectedException,
- BufferSizeExceededException, IOException {
-
- return(readBytes(aData, nMaxBytesToRead));
- }
-
- public void skipBytes(int nBytesToSkip) throws NotConnectedException,
- BufferSizeExceededException, IOException {
-
- currentLoc += nBytesToSkip;
- }
-
- public int available() throws NotConnectedException, IOException {
- int checkSize = inputLength - currentLoc;
-
- if (checkSize < 0) {
- return -1;
- } else {
- return checkSize;
- }
- }
-
- public void closeInput() throws NotConnectedException, IOException {
-
- // Set currentLoc to the max, so read calls will return -1.
- //
- currentLoc = inputLength + 1;
- System.out.println("Closed XInputStream.");
- }
-
- /* XOutputStream Interfaces */
-
- public void writeBytes(byte [] aData)
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- // Set backup array, used for verification purposes.
- //
- bytesBak = aData;
-
- System.out.println("Wrote out the following data to XOutputStream:");
- for (int i=0; i < aData.length; i++) {
- System.out.println(" <" + aData[i] + ">");
- }
- }
-
- public void flush()
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- System.out.println("Flushed XOutputStream.");
- }
-
- public void closeOutput()
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- System.out.println("Closed XOutputStream.");
- }
-
- /**
- * Returns the last data passed into the write function, used for
- * verification purposes.
- */
- public byte [] getBytesBak() {
- return bytesBak;
- }
-
- public static void main(String args[]) {
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read(), bytes value 1-256:");
-
- TestStream ts = new TestStream();
- XInputStreamToInputStreamAdapter is =
- new XInputStreamToInputStreamAdapter(ts);
- int rc = 0, avail;
- boolean testStatus = true;
-
- int cnt = 0;
- do {
- try {
- rc = is.read();
- avail = is.available();
- System.out.println(" Read value <" + rc +
- ">, avail <" + avail + ">");
-
- if (cnt < inputLength && rc != cnt) {
- System.out.println("Read wrong value <" + rc + ">, expecting <" + cnt + ">");
- testStatus = false;
- }
-
- cnt++;
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read(), bytes value 1-256 with skips of 3 bytes:");
- ts = new TestStream();
- is = new XInputStreamToInputStreamAdapter(ts);
-
- cnt = 0;
- do {
- try {
- rc = is.read();
- avail = is.available();
- System.out.println(" Read value <" + rc +
- ">, avail <" + avail + ">");
- is.skip(3);
-
- if (cnt < inputLength && rc != cnt) {
- System.out.println("Read wrong value <" + rc + ">, expecting <" + cnt + ">");
- testStatus = false;
- }
-
- cnt += 4;
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read() in chunks of 5 bytes.");
- byte [] bi1 = new byte [5];
- ts = new TestStream();
- is = new XInputStreamToInputStreamAdapter(ts);
-
- cnt = 0;
- do {
- try {
- rc = is.read(bi1);
- avail = is.available();
- System.out.print("Read value <");
- for (int i=0; i < bi1.length; i++) {
-
- if (i == (bi1.length - 1)) {
- System.out.print((int)bi1[i]);
- } else {
- System.out.print((int)bi1[i] + ",");
- }
-
- if ((cnt) < inputLength && bi1[i] != (byte)cnt) {
- System.out.println("\nRead wrong value <" + (int)bi1[i] + ">, expecting <" +
- (cnt) + ">");
- testStatus = false;
- }
- cnt++;
- }
- System.out.print("> read rc <" + rc +
- ">, avail <" + avail + ">\n");
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read() in chunks of 6 bytes, offset=2, length=3.");
- byte [] bi2 = new byte [6];
- ts = new TestStream();
- is = new XInputStreamToInputStreamAdapter(ts);
-
- cnt = 0;
- int offset = 2;
- int length = 3;
- do {
- try {
- rc = is.read(bi2, offset, length);
- avail = is.available();
- System.out.print("Read value <");
- for (int i=0; i < bi2.length; i++) {
- if (i == (bi2.length - 1)) {
- System.out.print((int)bi2[i]);
- } else {
- System.out.print((int)bi2[i] + ",");
- }
-
- if (cnt < inputLength) {
- if (i < offset || i >= (offset + length)) {
- // Check values that should stay 0
- //
- if ((int)bi2[i] != 0) {
- System.out.println("\nRead wrong value <" +
- (int)bi2[i] + ">, expecting <0>");
- testStatus = false;
- }
- } else if (bi2[i] != (byte)cnt) {
- // Check actually read values.
- //
- System.out.println("\nRead wrong value <" +
- (int)bi2[i] + ">, expecting <" + cnt + ">");
- testStatus = false;
- } else {
- cnt++;
- }
- }
- }
- System.out.print("> read rc <" + rc +
- ">, avail <" + avail + ">\n");
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nOutputStream Test:");
- System.out.println("Testing write() and flush()");
-
- ts = new TestStream();
- XOutputStreamToOutputStreamAdapter os =
- new XOutputStreamToOutputStreamAdapter(ts);
-
- for (int i=0; i < 5; i++) {
- try {
- os.write((byte)i);
- byte [] testBytes = ts.getBytesBak();
-
- if (testBytes[0] != i) {
- System.out.println("Wrote wrong value <" + testBytes[0] + ">, expecting <i>");
- testStatus = false;
- }
- os.flush();
- } catch (Exception e) {
- System.out.println("Error writing to OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- }
- try {
- os.close();
- } catch (Exception e) {
- System.out.println("Error closing OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nOutputStream Test:");
- System.out.println("Testing write() with a chunk of 5 bytes");
-
- ts = new TestStream();
- os = new XOutputStreamToOutputStreamAdapter(ts);
-
- byte [] bo1 = new byte [5];
- for (int i=0; i < bo1.length; i++) {
- bo1[i] = (byte)i;
- }
-
- try {
- os.write(bo1);
- byte [] testBytes = ts.getBytesBak();
-
- for (int i=0; i < bo1.length; i++) {
- if (testBytes[i] != bo1[i]) {
- System.out.println("Wrote wrong value <" + testBytes[i] + ">, expecting <" + bo1[i] + ">");
- testStatus = false;
- }
- }
- os.flush();
- } catch (Exception e) {
- System.out.println("Error writing to OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- try {
- os.close();
- } catch (Exception e) {
- System.out.println("Error closing OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nOutputStream Test:");
- System.out.println("Testing write() with a chunk of 6 bytes, offset=2, length=3.");
-
- ts = new TestStream();
- os = new XOutputStreamToOutputStreamAdapter(ts);
-
- byte [] bo2 = new byte [6];
- for (int i=0; i < bo2.length; i++) {
- bo2[i] = (byte)i;
- }
-
- offset = 2;
- length = 3;
- try {
- os.write(bo2, offset, length);
- byte [] testBytes = ts.getBytesBak();
-
- for (int i=0; i < bo2.length; i++) {
- if ((i >= offset && i < (offset + length)) && testBytes[i-offset] != bo2[i]) {
- System.out.println("Wrote wrong value <" + testBytes[i-offset] + ">, expecting <" + bo2[i] + ">");
- testStatus = false;
- }
- }
- os.flush();
- } catch (Exception e) {
- System.out.println("Error writing to OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- try {
- os.close();
- } catch (Exception e) {
- System.out.println("Error closing OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- if (testStatus == true) {
- System.out.println("\nAll tests passed...\n");
- System.exit(0);
- } else {
- System.out.println("\nSome tests failed...\n");
- System.exit(-1);
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XFlatXml.java b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XFlatXml.java
deleted file mode 100755
index 0baaed5816d5..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XFlatXml.java
+++ /dev/null
@@ -1,506 +0,0 @@
-/** You can find more
- * information on the following web page:
- * http://api.openoffice.org/common/ref/com/sun/star/index.html
- */
-import com.sun.star.comp.loader.FactoryHelper;
-import com.sun.star.lang.XInitialization;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XServiceInfo;
-import com.sun.star.lang.XServiceName;
-import com.sun.star.lang.XSingleServiceFactory;
-import com.sun.star.lang.XTypeProvider;
-import com.sun.star.registry.XRegistryKey;
-import com.sun.star.uno.Type;
-//import com.sun.star.documentconversion.XConverterBridge;
-//import com.sun.star.document.XFilterAdapter;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.ByteArrayOutputStream;
-import com.sun.star.xml.XImportFilter;
-import com.sun.star.xml.XExportFilter;
-import java.io.*;
-
-
-import com.sun.star.uno.AnyConverter;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XServiceInfo;
-import com.sun.star.lang.XTypeProvider;
-import com.sun.star.uno.Type;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.comp.loader.FactoryHelper;
-import com.sun.star.lang.XServiceName;
-import com.sun.star.lang.XSingleServiceFactory;
-import com.sun.star.registry.XRegistryKey;
-import com.sun.star.frame.XConfigManager;
-import com.sun.star.xml.sax.InputSource;
-import com.sun.star.xml.sax.XParser;
-import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
-import com.sun.star.xml.sax.XDocumentHandler;
-
-//Uno to java Adaptor
-import com.sun.star.lib.uno.adapter.*;
-
-/** This outer class provides an inner class to implement the service
- * description, a method to instantiate the
- * component on demand (__getServiceFactory()), and a method to give
- * information about the component (__writeRegistryServiceInfo()).
- */
-public class XFlatXml {
-
-
- private static XMultiServiceFactory xMSF;
- private static XDocumentHandler exportDocHandler=null;
- private static XInputStream xInStream =null;
- private static XOutputStream xOutStream=null;
- private static String udJarPath=null;
- private static XOutputStream xos = null;
- private static XOutputStreamToOutputStreamAdapter adaptedStream=null;
- private static String sFileName=null;
-
-
-
- /** This inner class provides the component as a concrete implementation
- * of the service description. It implements the needed interfaces.
- * @implements XTypeProvider
- */
- static public class _XFlatXml implements
- //XConverterBridge,
- XImportFilter,
- XExportFilter,
- XServiceName,
- XServiceInfo,
- XDocumentHandler,
- XTypeProvider {
-
- /** The component will be registered under this name.
- */
- static private final String __serviceName = "com.sun.star.documentconversion.XFlatXml";
-
- public com.sun.star.uno.Type[] getTypes() {
- Type[] typeReturn = {};
-
- try {
- typeReturn = new Type[] {
- new Type( XTypeProvider.class ),
- new Type( XExportFilter.class ),
- new Type( XImportFilter.class ),
- new Type( XServiceName.class ),
- new Type( XServiceInfo.class ) };
- }
- catch( Exception exception ) {
-
- }
-
- return( typeReturn );
- }
-
-
- public boolean importer(com.sun.star.beans.PropertyValue[] aSourceData,
- com.sun.star.xml.sax.XDocumentHandler xDocHandler,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException {
- /*
- System.out.println("\nFound the Java Importer!\n");
-
- System.out.println("\n"+msUserData[0]);
- System.out.println("\n"+msUserData[1]);
- System.out.println("\n"+msUserData[2]);
- System.out.println("\n"+msUserData[3]);
- System.out.println("\n"+xDocHandler);
- */
- sFileName=null;
- String sDirectory = null;
- String sURL=null;
- String udConvertClass=msUserData[0];
- udJarPath=msUserData[1];
- String udImport =msUserData[2];
- String udExport =msUserData[3];
- com.sun.star.io.XInputStream xis=null;
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
-
- for (int i = 0 ; i < pValue.length; i++)
- {
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("InputStream")==0){
- xis=(com.sun.star.io.XInputStream)AnyConverter.toObject(new Type(com.sun.star.io.XInputStream.class), pValue[i].Value);
- }
- if (pValue[i].Name.compareTo("FileName")==0){
- sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- }
- if (pValue[i].Name.compareTo("URL")==0){
- sURL=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- }
- }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
-
- }
-
- try{
-
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
-
- Object xSaxParserObj=xMSF.createInstance("com.sun.star.xml.sax.Parser");
-
- XParser xParser = (XParser) UnoRuntime.queryInterface(
- XParser.class , xSaxParserObj );
-
- InputSource aInput = new InputSource();
- if (sFileName==null)
- sFileName=" ";
- aInput.sSystemId = sFileName;
- aInput.aInputStream =xis;
- xParser.setDocumentHandler ( xDocHandler );
- xParser.parseStream ( aInput );
-
-
- }
- catch (Exception e){
- //e.printStackTrace();
- System.out.println("\nException "+e);
-
- }
- return true;
- }
-
-
-
- public boolean exporter(com.sun.star.beans.PropertyValue[] aSourceData,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException{
- /*
- System.out.println("\nFound the Exporter!\n");
-
- System.out.println("\n"+msUserData[0]);
- System.out.println("\n"+msUserData[1]);
- System.out.println("\n"+msUserData[2]);
- System.out.println("\n"+msUserData[3]);
- */
- sFileName=null;
- String sDirectory = null;
- String sURL=null;
- String udConvertClass=msUserData[0];
- udJarPath=msUserData[1];
- String udImport =msUserData[2];
- String udExport =msUserData[3];
-
-
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
-
- for (int i = 0 ; i < pValue.length; i++)
- {
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("OutputStream")==0){
- xos=(com.sun.star.io.XOutputStream)AnyConverter.toObject(new Type(com.sun.star.io.XOutputStream.class), pValue[i].Value);
- // System.out.println(pValue[i].Name+" "+xos);
- }
- if (pValue[i].Name.compareTo("FileName")==0){
- sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- //System.out.println(pValue[i].Name+" "+sFileName);
- }
- if (pValue[i].Name.compareTo("URL")==0){
- sURL=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- // System.out.println("\nMediaDescriptor url "+pValue[i].Name+" "+sURL);
-
- }
- }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
- }
-
-
- try{
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
-
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
- udJarPath= PathString.concat(udJarPath);
-
- Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe");
- xInStream = (XInputStream) UnoRuntime.queryInterface(
- XInputStream.class , xPipeObj );
- xOutStream = (XOutputStream) UnoRuntime.queryInterface(
- XOutputStream.class , xPipeObj );
- }
- catch (Exception e){
- System.out.println("Exception "+e);
- }
-
- return true;
- }
-
- public String replace(String origString, String origChar, String replaceChar){
- String tmp="";
- int index=origString.indexOf(origChar);
- if(index !=-1){
- while (index !=-1){
- String first =origString.substring(0,index);
- first=first.concat(replaceChar);
- tmp=tmp.concat(first);
- origString=origString.substring(index+1,origString.length());
- index=origString.indexOf(origChar);
- if(index==-1) {
- tmp=tmp.concat(origString);
- }
-
- }
-
- }
-
- return tmp;
- }
-
- public String needsMask(String origString){
-
- if (origString.indexOf("&")!=-1){
- origString=replace(origString,"&","&amp;");
- }
- if (origString.indexOf("<")!=-1){
- origString=replace(origString,"<","&lt;");
- }
- if (origString.indexOf(">")!=-1){
- origString=replace(origString,">","&gt;");
- }
- return origString;
-
- }
-
-
-
- public void startDocument (){
- }
-
- public void endDocument()
- {
- convert (xInStream,xos,true,udJarPath,sFileName);
-
- }
-
- public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs)
- {
-
- str="<".concat(str);
- if (xattribs !=null)
- {
- str= str.concat(" ");
- int len=xattribs.getLength();
- for (short i=0;i<len;i++)
- {
- str=str.concat(xattribs.getNameByIndex(i));
- str=str.concat("=\"");
- //str=str.concat(xattribs.getValueByIndex(i));
- str=str.concat(needsMask(xattribs.getValueByIndex(i)));
-
- str=str.concat("\" ");
- }
- }
- str=str.concat(">");
- //System.out.println(str);
- try{
- //xOutStream.writeBytes(str.getBytes());
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
- }
-
- public void endElement(String str){
- str="</".concat(str);
- str=str.concat(">");
- //str=str.concat("\n");
- try{
- // xOutStream.writeBytes(str.getBytes());
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
- // System.out.println(str);
-
- }
- public void characters(String str){
- str=needsMask(str);
- try{
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
- }
-
- public void ignorableWhitespace(String str){
-
-
- }
- public void processingInstruction(String aTarget, String aData){
-
- }
-
- public void setDocumentLocator(com.sun.star.xml.sax.XLocator xLocator){
-
- }
-
-
-
-String getFileName(String origName)
- {
- String name=null;
- if (origName !=null)
- {
- if(origName.equalsIgnoreCase(""))
- name = "OutFile";
- else {
- if (origName.lastIndexOf("/")>=0){
- origName=origName.substring(origName.lastIndexOf("/")+1,origName.length());
- }
- if (origName.lastIndexOf(".")>=0){
- name = origName.substring(0,(origName.lastIndexOf(".")));
- }
- else{
- name=origName;
- }
- }
- }
- else{
- name = "OutFile";
- }
- return name;
- }
-
-
-
- public void convert (com.sun.star.io.XInputStream xml,
- com.sun.star.io.XOutputStream device,boolean convertFromOffice,String pluginUrl,String FileName) throws com.sun.star.uno.RuntimeException {
- //System.out.println("\nFound the Convert method "+pluginUrl);
- String jarName = pluginUrl;
- String name=getFileName(FileName);
-
- XInputStreamToInputStreamAdapter xis =new XInputStreamToInputStreamAdapter(xml);
-
- XOutputStreamToOutputStreamAdapter xos =
- new XOutputStreamToOutputStreamAdapter(device);
-
- int b=0;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- if (convertFromOffice)
- {
- try{
- while (xis.available()>0)
- {
- byte[] bytearr = new byte[xis.available()];
- xis.read(bytearr);
- xos.write(bytearr);
- }
-
- }
- catch (Exception e){}
- }
- else{
-
- try{
-
- while (xis.available()>0)
- {
- byte[] bytearr = new byte[xis.available()];
- xis.read(bytearr);
- xos.write(bytearr);
-
- }
- xos.close();
- xis.close();
- //xos.write(-1); //EOF character
- }
- catch (Exception e){}
- }
- }
-
-
-
-
- // Implement methods from interface XTypeProvider
- public byte[] getImplementationId() {
- byte[] byteReturn = {};
-
- byteReturn = new String( "" + this.hashCode() ).getBytes();
-
- return( byteReturn );
- }
-
- // Implement method from interface XServiceName
- public String getServiceName() {
- return( __serviceName );
- }
-
- // Implement methods from interface XServiceInfo
- public boolean supportsService(String stringServiceName) {
- return( stringServiceName.equals( __serviceName ) );
- }
-
- public String getImplementationName() {
- return( _XFlatXml.class.getName() );
- }
-
- public String[] getSupportedServiceNames() {
- String[] stringSupportedServiceNames = { __serviceName };
- return( stringSupportedServiceNames );
- }
- }
-
- /**
- * Returns a factory for creating the service.
- * This method is called by the <code>JavaLoader</code>
- *
- * @return returns a <code>XSingleServiceFactory</code> for creating the
- * component
- *
- * @param implName the name of the implementation for which a
- * service is desired
- * @param multiFactory the service manager to be used if needed
- * @param regKey the registryKey
- *
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static XSingleServiceFactory __getServiceFactory(String implName,
- XMultiServiceFactory multiFactory,
- XRegistryKey regKey) {
- XSingleServiceFactory xSingleServiceFactory = null;
- xMSF= multiFactory;
- if (implName.equals(_XFlatXml.class.getName()) ) {
- xSingleServiceFactory = FactoryHelper.getServiceFactory(_XFlatXml.class,
- _XFlatXml.__serviceName,
- multiFactory,
- regKey);
- }
-
- return xSingleServiceFactory;
- }
-
- /**
- * Writes the service information into the given registry key.
- * This method is called by the <code>JavaLoader</code>
- * <p>
- * @return returns true if the operation succeeded
- * @param regKey the registryKey
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
-
- return FactoryHelper.writeRegistryServiceInfo(_XFlatXml.class.getName(),
- _XFlatXml.__serviceName, regKey);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XInputStreamToInputStreamAdapter.java b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XInputStreamToInputStreamAdapter.java
deleted file mode 100644
index a5b3c1ee18ea..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XInputStreamToInputStreamAdapter.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-//package com.sun.star.lib.uno.adapter;
-
-
-
-import java.io.IOException;
-import com.sun.star.io.XInputStream;
-import java.io.InputStream;
-
-/**
- * The <code>XInputStreamToInputStreamAdapter</code> wraps
- * the UNO <code>XInputStream</code> object in a Java
- * <code>InputStream</code>. This allows users to access
- * an <code>XInputStream</code> as if it were an
- * <code>InputStream</code>.
- *
- * @author Brian Cameron
- */
-public class XInputStreamToInputStreamAdapter extends InputStream {
-
- /**
- * Internal handle to the XInputStream
- */
- private XInputStream xin;
-
- /**
- * Constructor.
- *
- * @param in The <code>XInputStream</code> to be
- * accessed as an <code>InputStream</code>.
- */
- public XInputStreamToInputStreamAdapter (XInputStream in) {
- xin = in;
- }
-
- public int available() throws IOException {
-
- int bytesAvail;
-
- try {
- bytesAvail = xin.available();
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
-
- return(bytesAvail);
- }
-
- public void close() throws IOException {
- try {
- xin.closeInput();
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- }
-
- public int read () throws IOException {
- byte [][] tmp = new byte [1][1];
- //System.out.println("read1\n");
- try {
- long bytesRead = xin.readBytes(tmp, 1);
-
- if (bytesRead <= 0) {
- return (-1);
- } else {
- int tmpInt = tmp[0][0];
- if (tmpInt< 0 ){
- tmpInt = 256 +tmpInt;
- }
- return(tmpInt);
- }
-
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- }
-
- public int read (byte[] b) throws IOException {
-
- byte [][] tmp = new byte [1][b.length];
- int bytesRead;
- //System.out.println("read2\n");
- try {
- bytesRead = xin.readBytes(tmp, b.length);
- if (bytesRead <= 0) {
- return(-1);
- } else if (bytesRead < b.length) {
- System.arraycopy(tmp[0], 0, b, 0, bytesRead);
- } else {
- System.arraycopy(tmp[0], 0, b, 0, b.length);
- }
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
-
- return (bytesRead);
- }
-
- public int read(byte[] b, int off, int len) throws IOException {
- int count = 0;
- byte [][] tmp = new byte [1][b.length];
- //System.out.println("read3\n");
- try {
- long bytesRead = xin.readBytes(tmp,len);
- // Casting bytesRead to an int is okay, since the user can
- // only pass in an integer length to read, so the bytesRead
- // must <= len.
- //
- if (bytesRead <= 0) {
- return(-1);
- } else if (bytesRead < len) {
- System.arraycopy(tmp[0], 0, b, off, (int)bytesRead);
- } else {
- System.arraycopy(tmp[0], 0, b, off, len);
- }
-
- return ((int)bytesRead);
-
-
- } catch (Exception e) {
- throw new IOException("reader error: "+e.toString());
- }
- }
-
- public long skip(long n) throws IOException {
-
- int avail;
- long tmpLongVal = n;
- int tmpIntVal;
-
- try {
- avail = xin.available();
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
-
- do {
- if (tmpLongVal >= Integer.MAX_VALUE) {
- tmpIntVal = Integer.MAX_VALUE;
- } else {
- // Casting is safe here.
- tmpIntVal = (int)tmpLongVal;
- }
- tmpLongVal -= tmpIntVal;
-
- try {
- xin.skipBytes(tmpIntVal);
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- } while (tmpLongVal > 0);
-
- if (avail < n) {
- return(avail);
- } else {
- return(n);
- }
- }
-
- /**
- * Tests if this input stream supports the mark and reset methods.
- * The markSupported method of
- * <code>XInputStreamToInputStreamAdapter</code> returns false.
- *
- * @returns false
- */
- public boolean markSupported() {
- return false;
- }
-
- public void mark(int readlimit) {
- // Not supported.
- }
-
- public void reset() throws IOException {
- // Not supported.
- }
-}
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XOutputStreamToOutputStreamAdapter.java b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XOutputStreamToOutputStreamAdapter.java
deleted file mode 100644
index e1037432c8d0..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/XOutputStreamToOutputStreamAdapter.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-//package com.sun.star.lib.uno.adapter;
-
-import java.io.IOException;
-import com.sun.star.io.XOutputStream;
-import java.io.OutputStream;
-
-/**
- * The <code>XOutputStreamToOutputStreamAdapter</code> wraps
- * the UNO <code>XOutputStream</code> object in a Java
- * <code>OutputStream</code>. This allows users to access
- * an <code>XOutputStream</code> as if it were an
- * <code>OutputStream</code>.
- *
- * @author Brian Cameron
- */
-public class XOutputStreamToOutputStreamAdapter extends OutputStream {
-
- /**
- * Internal handle to the XInputStream
- */
- XOutputStream xout;
-
- /**
- * Constructor.
- *
- * @param out The <code>XOutputStream</code> to be
- * accessed as an <code>OutputStream</code>.
- */
- XOutputStreamToOutputStreamAdapter(XOutputStream out) {
- xout = out;
- }
-
- public void close() throws IOException {
- try {
- xout.closeOutput();
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- }
-
- public void flush() throws IOException {
- try {
- xout.flush();
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- }
-
- public void write(byte[] b) throws IOException {
- //System.out.println("write1\n");
- try {
- xout.writeBytes(b);
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- }
-
- public void write(byte[] b, int off, int len) throws IOException {
-
- byte[] tmp = new byte[len];
- //System.out.println("write2\n");
- // Copy the input array into a temp array, and write it out.
- //
- System.arraycopy(b, off, tmp, 0, len);
-
- try {
- xout.writeBytes(tmp);
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- }
-
- public void write(int b) throws IOException {
-
- byte [] oneByte = new byte [1];
- oneByte[0] = (byte) b;
- //System.out.println("write3\n");
- try {
- xout.writeBytes(oneByte);
- } catch (Exception e) {
- throw new IOException(e.toString());
- }
- }
-}
-
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/makefile.mk b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/makefile.mk
deleted file mode 100755
index 91efa423d9db..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/makefile.mk
+++ /dev/null
@@ -1,126 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2000, 2010 Oracle and/or its affiliates.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ = ..$/..$/..
-PRJNAME = odk
-TARGET = examples_java_converterbridge
-
-# --- Settings -----------------------------------------------------
-.INCLUDE: settings.mk
-
-JARFILES = ridl.jar unoil.jar jurt.jar juh.jar java_uno.jar ridl.jar
-JAVAFILES = $(subst,$(CLASSDIR)$/, $(subst,.class,.java $(JAVACLASSFILES)))
-JARCOMPRESS = TRUE
-CUSTOMMANIFESTFILE = manifest
-
-# --- Files --------------------------------------------------------
-
-JAVACLASSFILES=\
- $(CLASSDIR)$/ConverterBridge.class
-RDB = $(SOLARBINDIR)$/udkapi.rdb
-JAVADIR = $(OUT)$/misc$/java
-
-# --- Targets ------------------------------------------------------
-
-INTERFACES=$(MISC)$/ConverterBridge.rdb
-
-CPPUMAKERFLAGS += -C
-UNOUCRDEP=$(SOLARBINDIR)$/udkapi.rdb $(INTERFACES)
-UNOUCRRDB=$(SOLARBINDIR)$/udkapi.rdb $(INTERFACES)
-
-TARGETJARFILE=..$/class$/ConverterBridge.jar
-#JAVACLASSFILES=$(CLASSDIR)$/$(PACKAGE)$/ConverterBridge.class
-# output directory (one dir for each project)
-UNOUCROUT=$(OUT)$/inc
-
-# adding to inludepath
-INCPRE+=$(UNOUCROUT)
-
-# --- Targets ------------------------------------------------------
-
-.IF "$(depend)" == ""
-ALL : $(CLASSDIR)$/$(TARGETJARFILE) ALLTAR
-.ELSE
-ALL: ALLDEP
-.ENDIF
-
-.INCLUDE : target.mk
-
-
-NEWCLASS:=$(foreach,i,$(JARFILES) $(null,$(shell @$(FIND) $(JARDIR) -name $i) $(SOLARBINDIR)$/$i $(shell @$(FIND) $(JARDIR) -name $i)))
-
-.IF "$(GUI)"=="UNX"
-MYCLASSPATH=$(CLASSPATH):$(NEWCLASS:s/ /:/)
-.ELSE
-MYCLASSPATH=$(CLASSPATH);$(NEWCLASS:s/ /;/)
-.ENDIF
-
-
-GENJAVACLASSFILES= \
- $(CLASSDIR)$/com$/sun$/star$/documentconversion$/XConverterBridge.class
-
-GENJAVAFILES = {$(subst,.class,.java $(subst,$/class, $(GENJAVACLASSFILES)))}
-TYPES={$(subst,.class, $(subst,$/,. $(subst,$(CLASSDIR)$/,-T $(GENJAVACLASSFILES))))}
-
-$(GENJAVAFILES): $(INTERFACES)
- javamaker -BUCR -O$(OUT) $(TYPES) $(UNOUCRRDB)
-
-$(GENJAVACLASSFILES): $(GENJAVAFILES)
- $(JAVAC) $(JAVACPS) $(MYCLASSPATH) -d $(CLASSDIR) $(JAVAFLAGS) $<
-
-$(CLASSDIR)$/$(TARGETJARFILE): $(JAVAFILES) $(GENJAVACLASSFILES)
- $(JAVAC) $(JAVACPS) $(MYCLASSPATH) -d $(CLASSDIR) $(JAVAFLAGS) $(JAVAFILES)
- cd $(CLASSDIR) && jar -cvf $(TARGETJARFILE) ConverterBridge.class ConverterBridge$$_ConverterBridge.class com$/sun$/star$/documentconversion$/XConverterBridge.class
- @echo java -classpath $(CLASSPATH) com.sun.star.tools.uno.RegComp $(UNOUCRRDB) register ConverterBridge.jar com.sun.star.loader.Java2
- java -classpath $(CLASSPATH) com.sun.star.tools.uno.RegComp $(UNOUCRRDB) register ConverterBridge.jar com.sun.star.loader.Java2
-
-#$(INTERFACES) : XConverterBridge.idl
-# idlc $(UNOIDLINC) -O$(OUT)$/ucr$/$(IDLPACKAGE) XConverterBridge.idl
-# regmerge $(INTERFACES) /UCR $(OUT)$/ucr$/$(IDLPACKAGE)$/XConverterBridge.urd
-
-
-
-
-$(MISC)$/$(SHL1TARGET).def:
-#makefile.mk
- @echo ------------------------------
- @echo Making: $@
- @echo LIBRARY $(SHL1TARGET) >$@
- @echo EXPORTS >>$@
- @echo uno_initEnvironment >>$@
- @echo uno_ext_getMapping >>$@
- @echo Java_com_sun_star_comp_bridge_JavaMapper_castIntToObject >>$@
- @echo Java_com_sun_star_comp_bridge_JavaMapper_castObjectToInt >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_add >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_createTicket >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_dispose >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_reply >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_request >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_retrieve >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_revoke >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_stopDispose >>$@
- @echo Java_com_sun_star_lib_uno_environments_remote_NativeThreadPool_waitOnTicket >>$@
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.cxx b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.cxx
deleted file mode 100755
index 71c9bcd04e4c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.cxx
+++ /dev/null
@@ -1,267 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_xmerge.hxx"
-
-#ifndef _OSL_STREAM_WRAPPER_HXX_
-#include "streamwrap.hxx"
-#endif
-#include <osl/file.hxx>
-
-namespace foo
-{
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::io;
-using namespace ::com::sun::star::lang;
-using namespace ::osl;
-
-//==================================================================
-//= OInputStreamWrapper
-//==================================================================
-//------------------------------------------------------------------
-OInputStreamWrapper::OInputStreamWrapper( File& _rStream )
- :m_pSvStream(&_rStream)
- ,m_bSvStreamOwner(sal_False)
-{
-}
-
-//------------------------------------------------------------------
-OInputStreamWrapper::OInputStreamWrapper( File* pStream, sal_Bool bOwner )
- :m_pSvStream( pStream )
- ,m_bSvStreamOwner( bOwner )
-{
-}
-
-//------------------------------------------------------------------
-OInputStreamWrapper::~OInputStreamWrapper()
-{
- if( m_bSvStreamOwner )
- delete m_pSvStream;
-
-}
-
-//------------------------------------------------------------------------------
-sal_Int32 SAL_CALL OInputStreamWrapper::readBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead)
- throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- checkConnected();
-
- if (nBytesToRead < 0)
- throw stario::BufferSizeExceededException(::rtl::OUString(),static_cast<staruno::XWeak*>(this));
-
- ::osl::MutexGuard aGuard( m_aMutex );
-
- aData.realloc(nBytesToRead);
-
- sal_uInt64 nRead = 0;
- m_pSvStream->read((void*)aData.getArray(), nBytesToRead,nRead);
-
- checkError();
-
- // Wenn gelesene Zeichen < MaxLength, staruno::Sequence anpassen
- if (nRead < nBytesToRead)
- aData.realloc( nRead );
-
- return nRead;
-}
-
-//------------------------------------------------------------------------------
-sal_Int32 SAL_CALL OInputStreamWrapper::readSomeBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead) throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- checkError();
-
- if (nMaxBytesToRead < 0)
- throw stario::BufferSizeExceededException(::rtl::OUString(),static_cast<staruno::XWeak*>(this));
-
- return readBytes(aData, nMaxBytesToRead);
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OInputStreamWrapper::skipBytes(sal_Int32 nBytesToSkip) throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkError();
-
- m_pSvStream->setPos(osl_Pos_Current,nBytesToSkip);
- checkError();
-}
-
-//------------------------------------------------------------------------------
-sal_Int32 SAL_CALL OInputStreamWrapper::available() throw( stario::NotConnectedException, staruno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- sal_uInt64 nPos = 0;
- m_pSvStream->getPos(nPos);
- checkError();
-
- m_pSvStream->setPos(Pos_End,0);
- checkError();
-
- sal_uInt64 nAvailable = 0;
- m_pSvStream->getPos(nAvailable);
- nAvailable -= nPos;
-
- m_pSvStream->setPos(Pos_Absolut,nPos);
- checkError();
-
- return nAvailable;
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OInputStreamWrapper::closeInput() throw( stario::NotConnectedException, staruno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- if (m_bSvStreamOwner)
- delete m_pSvStream;
-
- m_pSvStream = NULL;
-}
-
-//------------------------------------------------------------------------------
-void OInputStreamWrapper::checkConnected() const
-{
- if (!m_pSvStream)
- throw stario::NotConnectedException(::rtl::OUString(), const_cast<staruno::XWeak*>(static_cast<const staruno::XWeak*>(this)));
-}
-
-//------------------------------------------------------------------------------
-void OInputStreamWrapper::checkError() const
-{
- checkConnected();
-}
-
-//==================================================================
-//= OSeekableInputStreamWrapper
-//==================================================================
-//------------------------------------------------------------------------------
-OSeekableInputStreamWrapper::OSeekableInputStreamWrapper(File& _rStream)
- :OInputStreamWrapper(_rStream)
-{
-}
-
-//------------------------------------------------------------------------------
-OSeekableInputStreamWrapper::OSeekableInputStreamWrapper(File* _pStream, sal_Bool _bOwner)
- :OInputStreamWrapper(_pStream, _bOwner)
-{
-}
-
-//------------------------------------------------------------------------------
-Any SAL_CALL OSeekableInputStreamWrapper::queryInterface( const Type& _rType ) throw (RuntimeException)
-{
- Any aReturn = OInputStreamWrapper::queryInterface(_rType);
- if (!aReturn.hasValue())
- aReturn = OSeekableInputStreamWrapper_Base::queryInterface(_rType);
- return aReturn;
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OSeekableInputStreamWrapper::acquire( ) throw ()
-{
- OInputStreamWrapper::acquire();
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OSeekableInputStreamWrapper::release( ) throw ()
-{
- OInputStreamWrapper::release();
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OSeekableInputStreamWrapper::seek( sal_Int64 _nLocation ) throw (IllegalArgumentException, IOException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- m_pSvStream->setPos(Pos_Current,(sal_uInt32)_nLocation);
- checkError();
-}
-
-//------------------------------------------------------------------------------
-sal_Int64 SAL_CALL OSeekableInputStreamWrapper::getPosition( ) throw (IOException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- sal_uInt64 nPos = 0;
- nPos = m_pSvStream->getPos(nPos);
- checkError();
- return nPos;
-}
-
-//------------------------------------------------------------------------------
-sal_Int64 SAL_CALL OSeekableInputStreamWrapper::getLength( ) throw (IOException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- sal_uInt64 nCurrentPos = 0;
- m_pSvStream->getPos(nCurrentPos);
- checkError();
-
- m_pSvStream->setPos(osl_Pos_End,0);
- sal_uInt64 nEndPos = 0;
- m_pSvStream->getPos(nEndPos);
- m_pSvStream->setPos(osl_Pos_Absolut,nCurrentPos);
-
- checkError();
-
- return nEndPos;
-}
-
-//==================================================================
-//= OOutputStreamWrapper
-//==================================================================
-//------------------------------------------------------------------------------
-void SAL_CALL OOutputStreamWrapper::writeBytes(const staruno::Sequence< sal_Int8 >& aData) throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- sal_uInt64 nWritten = 0;
- rStream.write(aData.getConstArray(),aData.getLength(),nWritten);
- if (nWritten != aData.getLength())
- {
- throw stario::BufferSizeExceededException(::rtl::OUString(),static_cast<staruno::XWeak*>(this));
- }
-}
-
-//------------------------------------------------------------------
-void SAL_CALL OOutputStreamWrapper::flush() throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
-}
-
-//------------------------------------------------------------------
-void SAL_CALL OOutputStreamWrapper::closeOutput() throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
-}
-
-} // namespace utl
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.hxx b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.hxx
deleted file mode 100755
index d31721f3825f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java/streamwrap.hxx
+++ /dev/null
@@ -1,141 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 _OSL_FILE_WRAPPER_HXX_
-#define _OSL_FILE_WRAPPER_HXX_
-
-#include <osl/mutex.hxx>
-#include <com/sun/star/io/XOutputStream.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/io/XSeekable.hpp>
-#include <cppuhelper/implbase1.hxx>
-
-#define DECLARE_UNO3_AGG_DEFAULTS(classname, baseclass) \
-virtual void SAL_CALL acquire() throw() { baseclass::acquire(); } \
-virtual void SAL_CALL release() throw() { baseclass::release(); } \
-virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException) \
-{ return baseclass::queryInterface(_rType); } \
-void SAL_CALL PUT_SEMICOLON_AT_THE_END()
-
-namespace osl
-{
- class File;
-}
-
-namespace foo
-{
- namespace stario = ::com::sun::star::io;
- namespace staruno = ::com::sun::star::uno;
-
-//==================================================================
-//= OInputFileWrapper
-//==================================================================
-typedef ::cppu::WeakImplHelper1 < stario::XInputStream
- > InputStreamWrapper_Base;
- // needed for some compilers
-/// helper class for wrapping a File into an <type scope="com.sun.star.io">XInputStream</type>
-class OInputStreamWrapper : public InputStreamWrapper_Base
-{
-protected:
- ::osl::Mutex m_aMutex;
- ::osl::File* m_pSvStream;
- sal_Bool m_bSvStreamOwner : 1;
-
-public:
- OInputStreamWrapper(::osl::File& _rStream);
- OInputStreamWrapper(::osl::File* pStream, sal_Bool bOwner=sal_False);
- virtual ~OInputStreamWrapper();
-
-// UNO Anbindung
- DECLARE_UNO3_AGG_DEFAULTS(OInputStreamWrapper, InputStreamWrapper_Base);
-
-// stario::XInputStream
- virtual sal_Int32 SAL_CALL readBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual sal_Int32 SAL_CALL readSomeBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual void SAL_CALL skipBytes(sal_Int32 nBytesToSkip) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual sal_Int32 SAL_CALL available() throw(stario::NotConnectedException, staruno::RuntimeException);
- virtual void SAL_CALL closeInput() throw(stario::NotConnectedException, staruno::RuntimeException);
-
-protected:
- /// throws a NotConnectedException if the object is not connected anymore
- void checkConnected() const;
- /// throws an exception according to the error flag of m_pSvStream
- void checkError() const;
-};
-
-//==================================================================
-//= OSeekableInputFIleWrapper
-//==================================================================
-typedef ::cppu::ImplHelper1 < ::com::sun::star::io::XSeekable
- > OSeekableInputStreamWrapper_Base;
-/** helper class for wrapping an File into an <type scope="com.sun.star.io">XInputStream</type>
- which is seekable (i.e. supports the <type scope="com.sun.star.io">XSeekable</type> interface).
-*/
-class OSeekableInputStreamWrapper
- :public OInputStreamWrapper
- ,public OSeekableInputStreamWrapper_Base
-{
-public:
- OSeekableInputStreamWrapper(::osl::File& _rStream);
- OSeekableInputStreamWrapper(::osl::File* _pStream, sal_Bool _bOwner = sal_False);
-
- // disambiguate XInterface
- virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire( ) throw ();
- virtual void SAL_CALL release( ) throw ();
-
- // XSeekable
- virtual void SAL_CALL seek( sal_Int64 _nLocation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Int64 SAL_CALL getPosition( ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Int64 SAL_CALL getLength( ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================
-//= OOutputStreamWrapper
-//==================================================================
-typedef ::cppu::WeakImplHelper1<stario::XOutputStream> OutputStreamWrapper_Base;
- // needed for some compilers
-class OOutputStreamWrapper : public OutputStreamWrapper_Base
-{
- ::osl::File& rStream;
-
-public:
- OOutputStreamWrapper(::osl::File& _rStream) :rStream(_rStream) { }
-
-// UNO Anbindung
- DECLARE_UNO3_AGG_DEFAULTS(OOutputStreamWrapper, OutputStreamWrapper_Base);
-
-// stario::XOutputStream
- virtual void SAL_CALL writeBytes(const staruno::Sequence< sal_Int8 >& aData) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual void SAL_CALL flush() throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual void SAL_CALL closeOutput() throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
-};
-
-} // namespace utl
-
-
-#endif // _UTL_STREAM_WRAPPER_HXX_
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/FlatXml.java b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/FlatXml.java
deleted file mode 100644
index 53329ac95ce3..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/FlatXml.java
+++ /dev/null
@@ -1,546 +0,0 @@
-/** You can find more
- * information on the following web page:
- * http://api.openoffice.org/common/ref/com/sun/star/index.html
- */
-import com.sun.star.comp.loader.FactoryHelper;
-import com.sun.star.lang.XInitialization;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XServiceInfo;
-import com.sun.star.lang.XServiceName;
-import com.sun.star.lang.XSingleServiceFactory;
-import com.sun.star.lang.XTypeProvider;
-import com.sun.star.registry.XRegistryKey;
-import com.sun.star.uno.Type;
-//import com.sun.star.documentconversion.XConverterBridge;
-//import com.sun.star.document.XFilterAdapter;
-import java.util.Enumeration;
-import java.util.Vector;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.ByteArrayOutputStream;
-import com.sun.star.xml.XImportFilter;
-import com.sun.star.xml.XExportFilter;
-import java.io.*;
-
-
-import com.sun.star.uno.AnyConverter;
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XServiceInfo;
-import com.sun.star.lang.XTypeProvider;
-import com.sun.star.uno.Type;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.comp.loader.FactoryHelper;
-import com.sun.star.lang.XServiceName;
-import com.sun.star.lang.XSingleServiceFactory;
-import com.sun.star.registry.XRegistryKey;
-import com.sun.star.frame.XConfigManager;
-import com.sun.star.xml.sax.InputSource;
-import com.sun.star.xml.sax.XParser;
-import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
-import com.sun.star.xml.sax.XDocumentHandler;
-
-//Uno to java Adaptor
-import com.sun.star.lib.uno.adapter.*;
-
-/** This outer class provides an inner class to implement the service
- * description, a method to instantiate the
- * component on demand (__getServiceFactory()), and a method to give
- * information about the component (__writeRegistryServiceInfo()).
- */
-public class FlatXml {
-
-
- private static XMultiServiceFactory xMSF;
- private static XDocumentHandler exportDocHandler=null;
- private static XInputStream xInStream =null;
- private static XOutputStream xOutStream=null;
- private static String udJarPath=null;
- private static XOutputStream xos = null;
- private static XOutputStreamToOutputStreamAdapter adaptedStream=null;
- private static String sFileName=null;
- private static int inPara =0;
- private static int tagDepth =0;
- private static String tabString = new String(" ");
- private static boolean openTag =false;
- private static boolean closeTag =false;
-
-
-
- /** This inner class provides the component as a concrete implementation
- * of the service description. It implements the needed interfaces.
- * @implements XTypeProvider
- */
- static public class _FlatXml implements
- //XConverterBridge,
- XImportFilter,
- XExportFilter,
- XServiceName,
- XServiceInfo,
- XDocumentHandler,
- XTypeProvider {
-
- /** The component will be registered under this name.
- */
- static private final String __serviceName = "devguide.officedev.samples.filter.FlatXmlJava";
-
- public com.sun.star.uno.Type[] getTypes() {
- Type[] typeReturn = {};
-
- try {
- typeReturn = new Type[] {
- new Type( XTypeProvider.class ),
- new Type( XExportFilter.class ),
- new Type( XImportFilter.class ),
- new Type( XServiceName.class ),
- new Type( XServiceInfo.class ) };
- }
- catch( Exception exception ) {
-
- }
-
- return( typeReturn );
- }
-
-
- public boolean importer(com.sun.star.beans.PropertyValue[] aSourceData,
- com.sun.star.xml.sax.XDocumentHandler xDocHandler,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException {
- /*
- System.out.println("\nFound the Java Importer!\n");
-
- System.out.println("\n"+msUserData[0]);
- System.out.println("\n"+msUserData[1]);
- System.out.println("\n"+msUserData[2]);
- System.out.println("\n"+msUserData[3]);
- System.out.println("\n"+xDocHandler);
- */
- sFileName=null;
- String sDirectory = null;
- String sURL=null;
- String udConvertClass=msUserData[0];
- udJarPath=msUserData[1];
- String udImport =msUserData[2];
- String udExport =msUserData[3];
- com.sun.star.io.XInputStream xis=null;
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
-
- for (int i = 0 ; i < pValue.length; i++)
- {
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("InputStream")==0){
- xis=(com.sun.star.io.XInputStream)AnyConverter.toObject(new Type(com.sun.star.io.XInputStream.class), pValue[i].Value);
- }
- if (pValue[i].Name.compareTo("FileName")==0){
- sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- }
- if (pValue[i].Name.compareTo("URL")==0){
- sURL=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- }
- }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
-
- }
-
- try{
-
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
-
- Object xSaxParserObj=xMSF.createInstance("com.sun.star.xml.sax.Parser");
-
- XParser xParser = (XParser) UnoRuntime.queryInterface(
- XParser.class , xSaxParserObj );
-
- InputSource aInput = new InputSource();
- if (sFileName==null)
- sFileName=" ";
- aInput.sSystemId = sFileName;
- aInput.aInputStream =xis;
- xParser.setDocumentHandler ( xDocHandler );
- xParser.parseStream ( aInput );
-
-
- }
- catch (Exception e){
- //e.printStackTrace();
- System.out.println("\nException "+e);
-
- }
- return true;
- }
-
-
-
- public boolean exporter(com.sun.star.beans.PropertyValue[] aSourceData,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException,com.sun.star.lang.IllegalArgumentException{
- /*
- System.out.println("\nFound the Exporter!\n");
-
- System.out.println("\n"+msUserData[0]);
- System.out.println("\n"+msUserData[1]);
- System.out.println("\n"+msUserData[2]);
- System.out.println("\n"+msUserData[3]);
- */
- sFileName=null;
- String sDirectory = null;
- String sURL=null;
- String udConvertClass=msUserData[0];
- udJarPath=msUserData[1];
- String udImport =msUserData[2];
- String udExport =msUserData[3];
-
-
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
-
- for (int i = 0 ; i < pValue.length; i++)
- {
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("OutputStream")==0){
- xos=(com.sun.star.io.XOutputStream)AnyConverter.toObject(new Type(com.sun.star.io.XOutputStream.class), pValue[i].Value);
- // System.out.println(pValue[i].Name+" "+xos);
- }
- if (pValue[i].Name.compareTo("FileName")==0){
- sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- //System.out.println(pValue[i].Name+" "+sFileName);
- }
- if (pValue[i].Name.compareTo("URL")==0){
- sURL=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- // System.out.println("\nMediaDescriptor url "+pValue[i].Name+" "+sURL);
-
- }
- }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
- }
-
-
- try{
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
-
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
- udJarPath= PathString.concat(udJarPath);
-
- Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe");
- xInStream = (XInputStream) UnoRuntime.queryInterface(
- XInputStream.class , xPipeObj );
- xOutStream = (XOutputStream) UnoRuntime.queryInterface(
- XOutputStream.class , xPipeObj );
- }
- catch (Exception e){
- System.out.println("Exception "+e);
- }
-
- return true;
- }
-
- public String replace(String origString, String origChar, String replaceChar){
- String tmp="";
- int index=origString.indexOf(origChar);
- if(index !=-1){
- while (index !=-1){
- String first =origString.substring(0,index);
- first=first.concat(replaceChar);
- tmp=tmp.concat(first);
- origString=origString.substring(index+1,origString.length());
- index=origString.indexOf(origChar);
- if(index==-1) {
- tmp=tmp.concat(origString);
- }
-
- }
-
- }
-
- return tmp;
- }
-
- public String needsMask(String origString){
-
- if (origString.indexOf("&")!=-1){
- origString=replace(origString,"&","&amp;");
- }
- if (origString.indexOf("<")!=-1){
- origString=replace(origString,"<","&lt;");
- }
- if (origString.indexOf(">")!=-1){
- origString=replace(origString,">","&gt;");
- }
- return origString;
-
- }
-
-
-
- public void startDocument (){
- }
-
- public void endDocument()
- {
- convert (xInStream,xos,true,udJarPath,sFileName);
-
- }
-
- public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs)
- {
-
- String tabs = "";
- for (int i = 0 ; i<tagDepth;i++){
- tabs=tabs.concat(tabString);
- }
- if(openTag && inPara == 0){
- str="\n"+tabs.concat("<".concat(str));
- }
- else if(inPara == 0){
- str=tabs.concat("<".concat(str));
- }
- else{
- str="<".concat(str);
- }
- if (str.indexOf("text:p")!=-1)
- {
- inPara++;
- }
-
- //str=tabs.concat("<".concat(str));
- if (xattribs !=null)
- {
- str= str.concat(" ");
- int len=xattribs.getLength();
- for (short i=0;i<len;i++)
- {
- str=str.concat(xattribs.getNameByIndex(i));
- str=str.concat("=\"");
- //str=str.concat(xattribs.getValueByIndex(i));
- str=str.concat(needsMask(xattribs.getValueByIndex(i)));
-
- str=str.concat("\" ");
- }
- }
- str=str.concat(">");
- tagDepth++;
- openTag=true;
- closeTag=false;
- //System.out.println(str);
- try{
- //xOutStream.writeBytes(str.getBytes());
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
- }
-
- public void endElement(String str){
- tagDepth--;
- openTag=false;
- String tabs = "";
- for (int i = 0 ; i<tagDepth;i++){
- tabs=tabs.concat(tabString);
- }
- if(closeTag && inPara ==0){
- str=tabs.concat("</".concat(str));
- }
- else{
- str="</".concat(str);
- }
- str=str.concat(">");
- if (str.indexOf("text:p")!=-1)
- inPara--;
- if(inPara == 0)
- str=str.concat("\n");
- try{
- // xOutStream.writeBytes(str.getBytes());
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
- // System.out.println(str);
- closeTag=true;
- }
- public void characters(String str){
- str=needsMask(str);
- try{
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
- }
-
- public void ignorableWhitespace(String str){
-
-
- }
- public void processingInstruction(String aTarget, String aData){
-
- }
-
- public void setDocumentLocator(com.sun.star.xml.sax.XLocator xLocator){
-
- }
-
-
-
-String getFileName(String origName)
- {
- String name=null;
- if (origName !=null)
- {
- if(origName.equalsIgnoreCase(""))
- name = "OutFile";
- else {
- if (origName.lastIndexOf("/")>=0){
- origName=origName.substring(origName.lastIndexOf("/")+1,origName.length());
- }
- if (origName.lastIndexOf(".")>=0){
- name = origName.substring(0,(origName.lastIndexOf(".")));
- }
- else{
- name=origName;
- }
- }
- }
- else{
- name = "OutFile";
- }
- return name;
- }
-
-
-
- public void convert (com.sun.star.io.XInputStream xml,
- com.sun.star.io.XOutputStream device,boolean convertFromOffice,String pluginUrl,String FileName) throws com.sun.star.uno.RuntimeException {
- //System.out.println("\nFound the Convert method "+pluginUrl);
- String jarName = pluginUrl;
- String name=getFileName(FileName);
-
- XInputStreamToInputStreamAdapter xis =new XInputStreamToInputStreamAdapter(xml);
-
- XOutputStreamToOutputStreamAdapter xos =
- new XOutputStreamToOutputStreamAdapter(device);
-
- int b=0;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- if (convertFromOffice)
- {
- try{
- while (xis.available()>0)
- {
- byte[] bytearr = new byte[xis.available()];
- xis.read(bytearr);
- xos.write(bytearr);
- }
-
- }
- catch (Exception e){}
- }
- else{
-
- try{
-
- while (xis.available()>0)
- {
- byte[] bytearr = new byte[xis.available()];
- xis.read(bytearr);
- xos.write(bytearr);
-
- }
- xos.close();
- xis.close();
- //xos.write(-1); //EOF character
- }
- catch (Exception e){}
- }
- }
-
-
-
-
- // Implement methods from interface XTypeProvider
- public byte[] getImplementationId() {
- byte[] byteReturn = {};
-
- byteReturn = new String( "" + this.hashCode() ).getBytes();
-
- return( byteReturn );
- }
-
- // Implement method from interface XServiceName
- public String getServiceName() {
- return( __serviceName );
- }
-
- // Implement methods from interface XServiceInfo
- public boolean supportsService(String stringServiceName) {
- return( stringServiceName.equals( __serviceName ) );
- }
-
- public String getImplementationName() {
- return( _FlatXml.class.getName() );
- }
-
- public String[] getSupportedServiceNames() {
- String[] stringSupportedServiceNames = { __serviceName };
- return( stringSupportedServiceNames );
- }
- }
-
- /**
- * Returns a factory for creating the service.
- * This method is called by the <code>JavaLoader</code>
- *
- * @return returns a <code>XSingleServiceFactory</code> for creating the
- * component
- *
- * @param implName the name of the implementation for which a
- * service is desired
- * @param multiFactory the service manager to be used if needed
- * @param regKey the registryKey
- *
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static XSingleServiceFactory __getServiceFactory(String implName,
- XMultiServiceFactory multiFactory,
- XRegistryKey regKey) {
- XSingleServiceFactory xSingleServiceFactory = null;
- xMSF= multiFactory;
- if (implName.equals(_FlatXml.class.getName()) ) {
- xSingleServiceFactory = FactoryHelper.getServiceFactory(_FlatXml.class,
- _FlatXml.__serviceName,
- multiFactory,
- regKey);
- }
-
- return xSingleServiceFactory;
- }
-
- /**
- * Writes the service information into the given registry key.
- * This method is called by the <code>JavaLoader</code>
- * <p>
- * @return returns true if the operation succeeded
- * @param regKey the registryKey
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
-
- return FactoryHelper.writeRegistryServiceInfo(_FlatXml.class.getName(),
- _FlatXml.__serviceName, regKey);
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Makefile b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Makefile
deleted file mode 100644
index 63ec8b5b2d77..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Makefile
+++ /dev/null
@@ -1,97 +0,0 @@
-# Builds the Java FlatXMLFilter component example of the Developers Guide.
-
-PRJ=../../../../..
-SETTINGS=$(PRJ)/settings
-
-include $(SETTINGS)/settings.mk
-include $(SETTINGS)/std.mk
-include $(SETTINGS)/dk.mk
-
-# Define non-platform/compiler specific settings
-COMPONENT_NAME=FlatXmlFilter_java
-OUT_COMP_CLASS = $(OUT_CLASS)/$(COMPONENT_NAME)
-OUT_COMP_GEN = $(OUT_MISC)/$(COMPONENT_NAME)
-COMPONENT_PACKAGE = $(OUT_BIN)/$(COMPONENT_NAME).uno.zip
-COMPONENT_PACKAGE_URL = $(subst \\,\,"$(COMPONENT_PACKAGE_DIR)$(PS)$(COMPONENT_NAME).uno.zip")
-COMPONENT_JAR_NAME = $(COMPONENT_NAME).uno.jar
-COMPONENT_JAR = $(OUT_CLASS)/$(COMPONENT_JAR_NAME)
-COMPONENT_MANIFESTFILE = $(OUT_COMP_CLASS)/$(COMPONENT_NAME).uno.Manifest
-
-REGISTERFLAG = $(OUT_MISC)$(PS)devguide_$(COMPONENT_NAME)_register_component.flag
-
-JAVAFILES = \
- FlatXml.java \
-
-CLASSFILES = $(patsubst %.java,$(OUT_COMP_CLASS)/%.class,$(JAVAFILES))
-
-
-#$(COMPONENT_NAME)_CLASSFILES = FlatXml.class FlatXml$(dlr)_FlatXml.class
-
-$(COMPONENT_NAME)_CLASSFILES = *.class
-
-
-
-SDK_CLASSPATH = $(subst $(EMPTYSTRING) $(PATH_SEPARATOR),$(PATH_SEPARATOR),$(OFFICE_CLASSES_DIR)/jurt.jar\
- $(PATH_SEPARATOR)$(OFFICE_CLASSES_DIR)/unoil.jar\
- $(PATH_SEPARATOR)$(OFFICE_CLASSES_DIR)/ridl.jar\
- $(PATH_SEPARATOR)$(OFFICE_CLASSES_DIR)/juh.jar\
- $(PATH_SEPARATOR)$(OUT_COMP_CLASS))
-
-# Targets
-.PHONY: ALL
-ALL : \
- FlatXmlFilterJavaExample
-
-include $(SETTINGS)/stdtarget.mk
-
-$(OUT_COMP_CLASS)/%.Manifest :
- -$(MKDIR) $(subst /,$(PS),$(@D))
- @echo RegistrationClassName: FlatXml> $@
-
-$(CLASSFILES) : $(JAVAFILES)
- -$(MKDIR) $(subst /,$(PS),$(@D))
- javac $(JAVAC_FLAGS) -classpath "$(SDK_CLASSPATH)" -d $(OUT_COMP_CLASS) $(JAVAFILES)
-
-$(OUT_CLASS)/%.jar : $(OUT_COMP_CLASS)/%.Manifest $(CLASSFILES)
- -$(MKDIR) $(subst /,$(PS),$(@D))
- cd $(OUT_COMP_CLASS) && jar cvfm ../$(@F) $(<F) $($(basename $(basename $(@F)))_CLASSFILES)
-
-$(OUT_BIN)/%.zip : TypeDetection.xcu $(OUT_CLASS)/%.jar
- -$(MKDIR) $(subst /,$(PS),$(@D))
- $(COPY) $< $(subst /,$(PS),$(OUT_CLASS))
- cd $(OUT_CLASS) && jar cvfM ../bin/$(@F) $(^F)
- $(DEL) $(subst /,$(PS),$(OUT_CLASS)/$<)
-
-$(REGISTERFLAG) : $(COMPONENT_PACKAGE)
-ifneq "$(SDK_AUTO_DEPLOYMENT)" ""
- -$(MKDIR) $(subst /,$(PS),$(@D))
- -$(DEL) $(subst /,$(PS),$@)
- $(DEPLOYTOOL) $(COMPONENT_PACKAGE_URL)
- @echo flagged > $(subst /,$(PS),$@)
-else
- @echo --------------------------------------------------------------------------------
- @echo If you want to install your component automatically, please set the environment
- @echo variable SDK_AUTO_DEPLOYMENT = YES. But note that auto deployment is only
- @echo possible if no office instance is running.
- @echo --------------------------------------------------------------------------------
-endif
-
-FlatXmlFilterJavaExample : $(REGISTERFLAG)
- @echo --------------------------------------------------------------------------------
- @echo The Java FlatXmlFilter component was installed if SDK_AUTO_DEPLOYMENT = YES.
- @echo You can use this filter component inside your office installation.
- @echo --------------------------------------------------------------------------------
-
-%.run: $(OUT_COMP_CLASS)/%.class
- java -classpath "$(SDK_CLASSPATH)" $(basename $@)
-
-%.local: $(OUT_COMP_CLASS)/%.class
- java -classpath "$(SDK_CLASSPATH)" $(basename $@) local
-
-.PHONY: clean
-clean :
- -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_CLASS))
- -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_GEN))
- -$(DEL) $(subst /,$(PS),$(COMPONENT_PACKAGE_URL))
- -$(DEL) $(subst /,$(PS),$(COMPONENT_JAR))
- -$(DEL) $(subst /,$(PS),$(REGISTERFLAG))
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Manifest b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Manifest
deleted file mode 100644
index 0d67a12695ab..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-RegistrationClassName: FlatXml
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/README b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/README
deleted file mode 100644
index a5b82ce4cef4..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/README
+++ /dev/null
@@ -1,97 +0,0 @@
-The Flat Xml Filter
-====================
-
-
-This sample provides a sample FlatXml filter for Openoffice. It have been developed to make use of the XmlFilterAdapter module. This code can also be used as a Skeleton implementation for developing a more complex filter.
-
-
-
-How does the code work?
-========================
-
- Firstly, the code has been developed to use the XmlFilterAdaptor module. For this reason, we must conform to the interfaces that the XmlFilterAdaptor is expecting. These interfaces are
-
- com/sun/star/xml/XImportFilter
- com/sun/star/xml/XExportFilter
-
-Also, when we are exporting, we want the FlatXml filter to behave like a DocumentHandler, we must also implement the XDocumentHandler interface
-
- com/sun/star/xml/sax/XDocumentHandler
-
-With these interfaces implemented, we can now start to get the code to work as a import and export filter.
-
-
-
-How do I Build the code?
-========================
- run:
- make solaris_workshopcxx //for Solaris
- make win_microcxx //for windows
- make linux_gcc //for linux
-This will produce a FlatXml.so or FlatXml.dll library in the <platform>/lib directory.
-
-
-
-
-How do I register this filter with OpenOffice?
-==============================================
-
-The Odk contains a program called "regcomp". This program queries a component (library or jar file) for information and then places this information into an OpenOffice installations "applicat.rdb". This database is used by OpenOffice to identify what components it has and where to find them.
-
-To register a component on Solaris or Linux:
-----------------------------------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.so"
-
-To register a component on windows:
-----------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.dll"
-
-To register a java based component (Jar file):
-----------------------------------------------
- regcomp -register -br <OOo installation dir>/program/applicat.rdb -r <OOo installation dir>/program/applicat.rdb -c "file:///<Url of component>/<componentname>.jar" -l com.sun.star.loader.Java2
-
-(For more info on registering java components see http://udk.openoffice.org/java/man/register_java_components.html)
-
-
-
-
-
-How do I access this filter from OpenOffice?
-============================================
-
-In an OpenOffice installation set, there is a file called TypeDetection.xml (usually located at <install dir>/share/config/registry/instance/org/openoffice/Office/TypeDetection.xml).
-This file contains the definitions of all of the filters that staroffice uses to open and save files. Therefore, we must add an entry to this file in order to make our filters visible and usable within OpenOffice.
-
-The TypeDetection.xml consists of <Type> definitions which describe a particular format and <Filter> definitions which define how a Type is opened and saved.
-
-Firstly, make a backup of your TypeDetection.xml file.
-When this has been done, cut and paste the following into the relevant sections in the TypeDetection.xml file.
-
- under Types:
- ============
- <Type cfg:name="writer_Flat_XML_File">
- <UIName cfg:type="string" cfg:localized="true">
- <cfg:value xml:lang="en-US">Flat XML File</cfg:value>
- </UIName>
- <Data cfg:type="string">1,,,,xml,20002,</Data>
- </Type>
-
- under Filters:
- ==============
- <Filter cfg:name="Flat XML File">
- <Installed cfg:type="boolean">true</Installed>
- <UIName cfg:type="string" cfg:localized="true" <cfg:value xml:lang="en-US">Flat XML File</cfg:value></UIName>
- <Data cfg:type="string">0,writer_Flat_XML_File,com.sun.star.text.TextDocument,com.sun.star.comp.Writer.XmlFilterAdaptor,524355,com.sun.star.documentconversion.XFlatXml; ;com.sun.star.comp.Writer.XMLImporter;com.sun.star.comp.Writer.XMLExporter,0,,</Data>
- </Filter>
-
-This filter definition, will now open Flat Xml files with the extension .xml.
-
-
-Now What?
-=========
-When OpenOffice is restarted, a new filter type will be available in the Open and Save Dialog boxes. To save a file as Flat Xml, just go to the "Save As" menu item, and select "Flat XML File" as the format.
-
-
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/TypeDetection.xcu b/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/TypeDetection.xcu
deleted file mode 100644
index 919401c7991a..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/FlatXml/java_prettyprint/TypeDetection.xcu
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:package="org.openoffice.Office" oor:name="TypeDetection">
- <node oor:name="Filters">
- <node oor:name="devguide_FlatXML_Java" oor:op="replace">
- <prop oor:name="Data" oor:type="xs:string">
- <value>0,devguide_FlatXML_Java,com.sun.star.text.TextDocument,com.sun.star.comp.Writer.XmlFilterAdaptor,524355,devguide.officedev.samples.filter.FlatXmlJava; ;com.sun.star.comp.Writer.XMLImporter;com.sun.star.comp.Writer.XMLExporter,0,,</value>
- </prop>
- <prop oor:name="Installed" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- <prop oor:name="UIName" oor:type="xs:string">
- <value xml:lang="x-no-translate">DevGuide FlatXML Java</value>
- <value xml:lang="en-US">DevGuide FlatXML Java</value>
- <value xml:lang="de">DevGuide FlatXML Java</value>
- </prop>
- </node>
- </node>
- <node oor:name="Types">
- <node oor:name="devguide_FlatXML_Java" oor:op="replace">
- <prop oor:name="Data" oor:type="xs:string">
- <value>1,,doctype:office:document,,xml,0</value>
- </prop>
- <prop oor:name="UIName" oor:type="xs:string">
- <value xml:lang="x-no-translate">DevGuide FlatXML Java</value>
- <value xml:lang="en-US">DevGuide FlatXML Java</value>
- <value xml:lang="de">DevGuide FlatXML Java</value>
- </prop>
- </node>
- </node>
-</oor:node>
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/Makefile_sdk b/xmerge/java/org/openoffice/xmerge/xmergebridge/Makefile_sdk
deleted file mode 100644
index 288679bc667b..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/Makefile_sdk
+++ /dev/null
@@ -1,102 +0,0 @@
-# This Makefile is intended for use with the OOo sdk. To build the XMergeBridge
-# copy the files in this directory to the sdk/examples/java/xmergebridge
-# directory and rename this file to "Makefile".Finally execute "make", to build.
-#
-# Builds the Java XMergebridgeFilter component example of the Developers Guide.
-
-PRJ=../../..
-SETTINGS=$(PRJ)/settings
-
-include $(SETTINGS)/settings.mk
-include $(SETTINGS)/std.mk
-include $(SETTINGS)/dk.mk
-
-# Define non-platform/compiler specific settings
-COMPONENT_NAME=XMergeBridgeFilter_java
-OUT_COMP_CLASS = $(OUT_CLASS)/$(COMPONENT_NAME)
-OUT_COMP_GEN = $(OUT_MISC)/$(COMPONENT_NAME)
-COMPONENT_PACKAGE = $(OUT_BIN)/$(COMPONENT_NAME).uno.zip
-COMPONENT_PACKAGE_URL = $(subst \\,\,"$(COMPONENT_PACKAGE_DIR)$(PS)$(COMPONENT_NAME).uno.zip")
-COMPONENT_JAR_NAME = $(COMPONENT_NAME).uno.jar
-COMPONENT_JAR = $(OUT_CLASS)/$(COMPONENT_JAR_NAME)
-COMPONENT_MANIFESTFILE = $(OUT_COMP_CLASS)/$(COMPONENT_NAME).uno.Manifest
-
-REGISTERFLAG = $(OUT_MISC)$(PS)devguide_$(COMPONENT_NAME)_register_component.flag
-
-JAVAFILES = \
- XMergeBridge.java \
-
-CLASSFILES = $(patsubst %.java,$(OUT_COMP_CLASS)/%.class,$(JAVAFILES))
-
-
-#$(COMPONENT_NAME)_CLASSFILES = XMergeBridge.class XMergeBridge$(dlr)_XMergeBridge.class
-
-$(COMPONENT_NAME)_CLASSFILES = *.class
-
-
-
-SDK_CLASSPATH = $(subst $(EMPTYSTRING) $(PATH_SEPARATOR),$(PATH_SEPARATOR),$(OFFICE_CLASSES_DIR)/jurt.jar\
- $(PATH_SEPARATOR)$(OFFICE_CLASSES_DIR)/unoil.jar\
- $(PATH_SEPARATOR)$(OFFICE_CLASSES_DIR)/ridl.jar\
- $(PATH_SEPARATOR)$(OFFICE_CLASSES_DIR)/juh.jar\
- $(PATH_SEPARATOR)$(OFFICE_CLASSES_DIR)/xmerge.jar\
- $(PATH_SEPARATOR)$(OUT_COMP_CLASS))
-
-# Targets
-.PHONY: ALL
-ALL : \
- XMergeBridgeFilterJavaExample
-
-include $(SETTINGS)/stdtarget.mk
-
-$(OUT_COMP_CLASS)/%.Manifest :
- -$(MKDIR) $(subst /,$(PS),$(@D))
- @echo RegistrationClassName: XMergeBridge> $@
-
-$(CLASSFILES) : $(JAVAFILES)
- -$(MKDIR) $(subst /,$(PS),$(@D))
- javac $(JAVAC_FLAGS) -classpath "$(SDK_CLASSPATH)" -d $(OUT_COMP_CLASS) $(JAVAFILES)
-
-$(OUT_CLASS)/%.jar : $(OUT_COMP_CLASS)/%.Manifest $(CLASSFILES)
- -$(MKDIR) $(subst /,$(PS),$(@D))
- cd $(OUT_COMP_CLASS) && jar cvfm ../$(@F) $(<F) $($(basename $(basename $(@F)))_CLASSFILES)
-
-$(OUT_BIN)/%.zip : TypeDetection.xcu $(OUT_CLASS)/%.jar
- -$(MKDIR) $(subst /,$(PS),$(@D))
- $(COPY) $< $(subst /,$(PS),$(OUT_CLASS))
- cd $(OUT_CLASS) && jar cvfM ../bin/$(@F) $(^F)
- $(DEL) $(subst /,$(PS),$(OUT_CLASS)/$<)
-
-$(REGISTERFLAG) : $(COMPONENT_PACKAGE)
-ifneq "$(SDK_AUTO_DEPLOYMENT)" ""
- -$(MKDIR) $(subst /,$(PS),$(@D))
- -$(DEL) $(subst /,$(PS),$@)
- $(DEPLOYTOOL) $(COMPONENT_PACKAGE_URL)
- @echo flagged > $(subst /,$(PS),$@)
-else
- @echo --------------------------------------------------------------------------------
- @echo If you want to install your component automatically, please set the environment
- @echo variable SDK_AUTO_DEPLOYMENT = YES. But note that auto deployment is only
- @echo possible if no office instance is running.
- @echo --------------------------------------------------------------------------------
-endif
-
-XMergeBridgeFilterJavaExample : $(REGISTERFLAG)
- @echo --------------------------------------------------------------------------------
- @echo The Java XMergeBridgeFilter component was installed if SDK_AUTO_DEPLOYMENT = YES.
- @echo You can use this filter component inside your office installation.
- @echo --------------------------------------------------------------------------------
-
-%.run: $(OUT_COMP_CLASS)/%.class
- java -classpath "$(SDK_CLASSPATH)" $(basename $@)
-
-%.local: $(OUT_COMP_CLASS)/%.class
- java -classpath "$(SDK_CLASSPATH)" $(basename $@) local
-
-.PHONY: clean
-clean :
- -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_CLASS))
- -$(DELRECURSIVE) $(subst /,$(PS),$(OUT_COMP_GEN))
- -$(DEL) $(subst /,$(PS),$(COMPONENT_PACKAGE_URL))
- -$(DEL) $(subst /,$(PS),$(COMPONENT_JAR))
- -$(DEL) $(subst /,$(PS),$(REGISTERFLAG))
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/Manifest b/xmerge/java/org/openoffice/xmerge/xmergebridge/Manifest
deleted file mode 100755
index af3149c65877..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/Manifest
+++ /dev/null
@@ -1 +0,0 @@
-RegistrationClassName: XMergeBridge
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/TestStream.java b/xmerge/java/org/openoffice/xmerge/xmergebridge/TestStream.java
deleted file mode 100644
index 9add577f45ef..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/TestStream.java
+++ /dev/null
@@ -1,488 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-package org.openoffice.xmerge.xmergebridge;
-
-import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
-import com.sun.star.io.NotConnectedException;
-import com.sun.star.io.BufferSizeExceededException;
-import com.sun.star.io.IOException;
-
-class TestStream implements XInputStream, XOutputStream {
-
- /** An array of bytes to be returned when the XInputStream read() method
- * is called
- */
- private byte [] isBytes;
-
- /**
- * A backup buffer where data sent to the XOutputStream write() method
- * is placed, used for verification purposes.
- */
- private byte [] bytesBak;
-
- /**
- * Maximum length of data returned by XInputStream read().
- */
- private static int inputLength = 256;
-
- /**
- * Keeps track of how far into the XInputStream has been read.
- */
- private int currentLoc;
-
-
- /**
- * Constructor. Sets up the isBytes array.
- */
- public TestStream() {
-
- currentLoc = 0;
-
- isBytes = new byte [inputLength];
- for (int i=0; i < inputLength; i++) {
- isBytes[i] = (byte)i;
- }
- }
-
- /* XInputStream interfaces */
-
- public int readBytes(byte[][] aData, int toRead)
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- int checkSize = inputLength - currentLoc;
-
- if (checkSize <= 0) {
- return -1;
- } else if (toRead > checkSize) {
- System.arraycopy(isBytes, currentLoc, aData[0], 0, checkSize);
- currentLoc += checkSize;
- return checkSize;
- } else {
- System.arraycopy(isBytes, currentLoc, aData[0], 0, toRead);
- currentLoc += toRead;
- return toRead;
- }
- }
-
- public int readSomeBytes(byte[][] aData, int nMaxBytesToRead)
- throws NotConnectedException,
- BufferSizeExceededException, IOException {
-
- return(readBytes(aData, nMaxBytesToRead));
- }
-
- public void skipBytes(int nBytesToSkip) throws NotConnectedException,
- BufferSizeExceededException, IOException {
-
- currentLoc += nBytesToSkip;
- }
-
- public int available() throws NotConnectedException, IOException {
- int checkSize = inputLength - currentLoc;
-
- if (checkSize < 0) {
- return -1;
- } else {
- return checkSize;
- }
- }
-
- public void closeInput() throws NotConnectedException, IOException {
-
- // Set currentLoc to the max, so read calls will return -1.
- //
- currentLoc = inputLength + 1;
- System.out.println("Closed XInputStream.");
- }
-
- /* XOutputStream Interfaces */
-
- public void writeBytes(byte [] aData)
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- // Set backup array, used for verification purposes.
- //
- bytesBak = aData;
-
- System.out.println("Wrote out the following data to XOutputStream:");
- for (int i=0; i < aData.length; i++) {
- System.out.println(" <" + aData[i] + ">");
- }
- }
-
- public void flush()
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- System.out.println("Flushed XOutputStream.");
- }
-
- public void closeOutput()
- throws NotConnectedException, BufferSizeExceededException,
- IOException {
-
- System.out.println("Closed XOutputStream.");
- }
-
- /**
- * Returns the last data passed into the write function, used for
- * verification purposes.
- */
- public byte [] getBytesBak() {
- return bytesBak;
- }
-
- public static void main(String args[]) {
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read(), bytes value 1-256:");
-
- TestStream ts = new TestStream();
- XInputStreamToInputStreamAdapter is =
- new XInputStreamToInputStreamAdapter(ts);
- int rc = 0, avail;
- boolean testStatus = true;
-
- int cnt = 0;
- do {
- try {
- rc = is.read();
- avail = is.available();
- System.out.println(" Read value <" + rc +
- ">, avail <" + avail + ">");
-
- if (cnt < inputLength && rc != cnt) {
- System.out.println("Read wrong value <" + rc + ">, expecting <" + cnt + ">");
- testStatus = false;
- }
-
- cnt++;
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read(), bytes value 1-256 with skips of 3 bytes:");
- ts = new TestStream();
- is = new XInputStreamToInputStreamAdapter(ts);
-
- cnt = 0;
- do {
- try {
- rc = is.read();
- avail = is.available();
- System.out.println(" Read value <" + rc +
- ">, avail <" + avail + ">");
- is.skip(3);
-
- if (cnt < inputLength && rc != cnt) {
- System.out.println("Read wrong value <" + rc + ">, expecting <" + cnt + ">");
- testStatus = false;
- }
-
- cnt += 4;
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read() in chunks of 5 bytes.");
- byte [] bi1 = new byte [5];
- ts = new TestStream();
- is = new XInputStreamToInputStreamAdapter(ts);
-
- cnt = 0;
- do {
- try {
- rc = is.read(bi1);
- avail = is.available();
- System.out.print("Read value <");
- for (int i=0; i < bi1.length; i++) {
-
- if (i == (bi1.length - 1)) {
- System.out.print((int)bi1[i]);
- } else {
- System.out.print((int)bi1[i] + ",");
- }
-
- if ((cnt) < inputLength && bi1[i] != (byte)cnt) {
- System.out.println("\nRead wrong value <" + (int)bi1[i] + ">, expecting <" +
- (cnt) + ">");
- testStatus = false;
- }
- cnt++;
- }
- System.out.print("> read rc <" + rc +
- ">, avail <" + avail + ">\n");
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nInputStream Test:");
- System.out.println("Testing read() in chunks of 6 bytes, offset=2, length=3.");
- byte [] bi2 = new byte [6];
- ts = new TestStream();
- is = new XInputStreamToInputStreamAdapter(ts);
-
- cnt = 0;
- int offset = 2;
- int length = 3;
- do {
- try {
- rc = is.read(bi2, offset, length);
- avail = is.available();
- System.out.print("Read value <");
- for (int i=0; i < bi2.length; i++) {
- if (i == (bi2.length - 1)) {
- System.out.print((int)bi2[i]);
- } else {
- System.out.print((int)bi2[i] + ",");
- }
-
- if (cnt < inputLength) {
- if (i < offset || i >= (offset + length)) {
- // Check values that should stay 0
- //
- if ((int)bi2[i] != 0) {
- System.out.println("\nRead wrong value <" +
- (int)bi2[i] + ">, expecting <0>");
- testStatus = false;
- }
- } else if (bi2[i] != (byte)cnt) {
- // Check actually read values.
- //
- System.out.println("\nRead wrong value <" +
- (int)bi2[i] + ">, expecting <" + cnt + ">");
- testStatus = false;
- } else {
- cnt++;
- }
- }
- }
- System.out.print("> read rc <" + rc +
- ">, avail <" + avail + ">\n");
- } catch (Exception e) {
- System.out.println("Error reading from InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- } while (rc >= 0);
- try {
- is.close();
- } catch (Exception e) {
- System.out.println("Error closing InputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nOutputStream Test:");
- System.out.println("Testing write() and flush()");
-
- ts = new TestStream();
- XOutputStreamToOutputStreamAdapter os =
- new XOutputStreamToOutputStreamAdapter(ts);
-
- for (int i=0; i < 5; i++) {
- try {
- os.write((byte)i);
- byte [] testBytes = ts.getBytesBak();
-
- if (testBytes[0] != i) {
- System.out.println("Wrote wrong value <" + testBytes[0] + ">, expecting <i>");
- testStatus = false;
- }
- os.flush();
- } catch (Exception e) {
- System.out.println("Error writing to OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- }
- try {
- os.close();
- } catch (Exception e) {
- System.out.println("Error closing OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nOutputStream Test:");
- System.out.println("Testing write() with a chunk of 5 bytes");
-
- ts = new TestStream();
- os = new XOutputStreamToOutputStreamAdapter(ts);
-
- byte [] bo1 = new byte [5];
- for (int i=0; i < bo1.length; i++) {
- bo1[i] = (byte)i;
- }
-
- try {
- os.write(bo1);
- byte [] testBytes = ts.getBytesBak();
-
- for (int i=0; i < bo1.length; i++) {
- if (testBytes[i] != bo1[i]) {
- System.out.println("Wrote wrong value <" + testBytes[i] + ">, expecting <" + bo1[i] + ">");
- testStatus = false;
- }
- }
- os.flush();
- } catch (Exception e) {
- System.out.println("Error writing to OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- try {
- os.close();
- } catch (Exception e) {
- System.out.println("Error closing OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- System.out.println("\nOutputStream Test:");
- System.out.println("Testing write() with a chunk of 6 bytes, offset=2, length=3.");
-
- ts = new TestStream();
- os = new XOutputStreamToOutputStreamAdapter(ts);
-
- byte [] bo2 = new byte [6];
- for (int i=0; i < bo2.length; i++) {
- bo2[i] = (byte)i;
- }
-
- offset = 2;
- length = 3;
- try {
- os.write(bo2, offset, length);
- byte [] testBytes = ts.getBytesBak();
-
- for (int i=0; i < bo2.length; i++) {
- if ((i >= offset && i < (offset + length)) && testBytes[i-offset] != bo2[i]) {
- System.out.println("Wrote wrong value <" + testBytes[i-offset] + ">, expecting <" + bo2[i] + ">");
- testStatus = false;
- }
- }
- os.flush();
- } catch (Exception e) {
- System.out.println("Error writing to OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
- try {
- os.close();
- } catch (Exception e) {
- System.out.println("Error closing OutputStream");
- System.out.println("Error msg: " + e.getMessage());
- testStatus = false;
- }
-
- if (testStatus == true) {
- System.out.println("Test passed...\n");
- } else {
- System.out.println("Test failed...\n");
- }
-
- if (testStatus == true) {
- System.out.println("\nAll tests passed...\n");
- System.exit(0);
- } else {
- System.out.println("\nSome tests failed...\n");
- System.exit(-1);
- }
- }
-}
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/XMergeBridge.java b/xmerge/java/org/openoffice/xmerge/xmergebridge/XMergeBridge.java
deleted file mode 100755
index 0163f497d9e2..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/XMergeBridge.java
+++ /dev/null
@@ -1,712 +0,0 @@
-/************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-/** You can find more
- * information on the following web page:
- * http://api.openoffice.org/common/ref/com/sun/star/index.html
- */
-
-
-/*Java Uno Helper Classes*/
-import com.sun.star.lib.uno.adapter.XInputStreamToInputStreamAdapter;
-import com.sun.star.lib.uno.adapter.XOutputStreamToOutputStreamAdapter;
-
-/*StarOffice/Uno Classes*/
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.lang.XServiceInfo;
-import com.sun.star.lang.XTypeProvider;
-import com.sun.star.uno.Type;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.comp.loader.FactoryHelper;
-import com.sun.star.lang.XServiceName;
-import com.sun.star.lang.XSingleServiceFactory;
-import com.sun.star.registry.XRegistryKey;
-import com.sun.star.frame.XConfigManager;
-import com.sun.star.xml.sax.InputSource;
-import com.sun.star.xml.sax.XParser;
-import com.sun.star.io.XInputStream;
-import com.sun.star.io.XOutputStream;
-import com.sun.star.xml.sax.XDocumentHandler;
-import com.sun.star.uno.AnyConverter;
-
-/* Generated from Idls */
-import com.sun.star.xml.XImportFilter;
-import com.sun.star.xml.XExportFilter;
-
-/* XMerge Classes */
-import org.openoffice.xmerge.util.registry.ConverterInfoReader;
-import org.openoffice.xmerge.util.registry.ConverterInfo;
-import org.openoffice.xmerge.util.registry.ConverterInfoMgr;
-import org.openoffice.xmerge.Convert;
-import org.openoffice.xmerge.ConverterFactory;
-import org.openoffice.xmerge.Document;
-import org.openoffice.xmerge.ConvertData;
-import org.openoffice.xmerge.converter.xml.OfficeDocument;
-/*Java Classes*/
-import java.util.Enumeration;
-import java.util.Vector;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.File;
-import javax.xml.parsers.*;
-import org.xml.sax.SAXException;
-import java.net.URI;
-
-
-/** This outer class provides an inner class to implement the service
- * description, a method to instantiate the
- * component on demand (__getServiceFactory()), and a method to give
- * information about the component (__writeRegistryServiceInfo()).
- */
-public class XMergeBridge {
-
-
- private static XMultiServiceFactory xMSF;
- private static XDocumentHandler exportDocHandler=null;
- private static XInputStream xInStream =null;
- private static XOutputStream xOutStream=null;
- private static String udJarPath=null;
- private static XOutputStream xos = null;
- private static XOutputStreamToOutputStreamAdapter adaptedStream=null;
- private static String offMime=null;
- private static String sdMime=null;
- private static String sFileName=null;
- private static String sURL="";
-
- //private static FileOutputStream adaptedStream =null;
-
- /** This inner class provides the component as a concrete implementation
- * of the service description. It implements the needed interfaces.
- * @implements XTypeProvider
- */
- static public class _XMergeBridge implements
- XImportFilter,
- XExportFilter,
- XServiceName,
- XServiceInfo,
- XDocumentHandler,
- XTypeProvider {
-
- /** The component will be registered under this name.
- */
- static private final String __serviceName = "com.sun.star.documentconversion.XMergeBridge";
-
-
-
- public com.sun.star.uno.Type[] getTypes() {
- Type[] typeReturn = {};
-
- try {
- typeReturn = new Type[] {
- new Type( XTypeProvider.class ),
- new Type( XImportFilter.class ),
- new Type( XExportFilter.class ),
- new Type( XServiceName.class ),
- new Type( XServiceInfo.class ) };
- }
- catch( Exception exception ) {
-
- }
-
- return( typeReturn );
- }
-
- String getFileName(String origName)
- {
- String name=null;
- if (origName !=null)
- {
- if(origName.equalsIgnoreCase(""))
- name = "OutFile";
- else {
- if (origName.lastIndexOf("/")>=0){
- origName=origName.substring(origName.lastIndexOf("/")+1,origName.length());
- }
- if (origName.lastIndexOf(".")>=0){
- name = origName.substring(0,(origName.lastIndexOf(".")));
- }
- else{
- name=origName;
- }
- }
- }
- else{
- name = "OutFile";
- }
- return name;
- }
-
-
-
- public boolean importer(com.sun.star.beans.PropertyValue[] aSourceData,
- com.sun.star.xml.sax.XDocumentHandler xDocHandler,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException {
- /*
- System.out.println("\nFound the Importer!\n");
-
- System.out.println("\n"+msUserData[0]);
- System.out.println("\n"+msUserData[1]);
- System.out.println("\n"+msUserData[2]);
- System.out.println("\n"+msUserData[3]);
- System.out.println("\n"+msUserData[4]);
- System.out.println("\n"+msUserData[5]);
- */
- sFileName="";
- sURL="";
- String sDirectory = null;
- String udConvertClass=msUserData[0];
- udJarPath=msUserData[1];
- String udImport =msUserData[2];
- String udExport =msUserData[3];
- offMime =msUserData[4];
- sdMime = msUserData[5];
- com.sun.star.io.XInputStream xis=null;
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
-
- for (int i = 0 ; i < pValue.length; i++)
- {
-
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value;
-
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("InputStream")==0){
- xis=(com.sun.star.io.XInputStream)AnyConverter.toObject(new Type(com.sun.star.io.XInputStream.class), pValue[i].Value);
- }
- if (pValue[i].Name.compareTo("FileName")==0){
- sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- }
-
- }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
-
-
-
- }
-
-
- try{
-
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
- udJarPath= PathString.concat(udJarPath);
-
- Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe");
- xInStream = (XInputStream) UnoRuntime.queryInterface(
- XInputStream.class , xPipeObj );
- xOutStream = (XOutputStream) UnoRuntime.queryInterface(
- XOutputStream.class , xPipeObj );
- convert (xis,xOutStream,false,udJarPath,sFileName,offMime,sdMime);
- Object xSaxParserObj=xMSF.createInstance("com.sun.star.xml.sax.Parser");
-
- XParser xParser = (XParser) UnoRuntime.queryInterface(
- XParser.class , xSaxParserObj );
- if (xParser==null){
- System.out.println("\nParser creation Failed");
- }
- xOutStream.closeOutput();
- InputSource aInput = new InputSource();
- if (sFileName==null){
- sFileName="";
- }
- aInput.sSystemId = sFileName;
- aInput.aInputStream =xInStream;
- xParser.setDocumentHandler ( xDocHandler );
-
- xParser.parseStream ( aInput );
- xOutStream.closeOutput();
- xInStream.closeInput();
-
- }
- catch (IOException e){
- //System.out.println("XMergeBridge IO Exception "+e.getMessage());
- return false;
- }
- catch (Exception e){
- //System.out.println("XMergeBridge Exception "+e+" "+e.getMessage());
- return false;
- }
- return true;
- }
-
- public boolean exporter(com.sun.star.beans.PropertyValue[] aSourceData,
- java.lang.String[] msUserData) throws com.sun.star.uno.RuntimeException{
-
- /*
- System.out.println("\nFound the Exporter!\n");
-
- System.out.println("\n"+msUserData[0]);
- System.out.println("\n"+msUserData[1]);
- System.out.println("\n"+msUserData[2]);
- System.out.println("\n"+msUserData[3]);
- System.out.println("\n"+msUserData[4]);
- System.out.println("\n"+msUserData[5]);
- */
- sFileName=null;
- sURL=null;
- String sDirectory = null;
- String title=null;
- String udConvertClass=msUserData[0];
- udJarPath=msUserData[1];
- String udImport =msUserData[2];
- String udExport =msUserData[3];
- offMime =msUserData[4];
- sdMime = msUserData[5];
-
- com.sun.star.beans.PropertyValue[] pValue = aSourceData;
- for (int i = 0 ; i < pValue.length; i++)
- {
-
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
-
-
- try{
- //System.out.println("\n"+pValue[i].Name+" "+pValue[i].Value);
- if (pValue[i].Name.compareTo("OutputStream")==0){
- xos=(com.sun.star.io.XOutputStream)AnyConverter.toObject(new Type(com.sun.star.io.XOutputStream.class), pValue[i].Value);
- // System.out.println(pValue[i].Name+" "+xos);
- }
- if (pValue[i].Name.compareTo("FileName")==0){
- sFileName=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- //System.out.println(pValue[i].Name+" "+sFileName);
- }
- if (pValue[i].Name.compareTo("URL")==0){
- sURL=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- // System.out.println("\nMediaDescriptor url "+pValue[i].Name+" "+sURL);
-
- }
- if (pValue[i].Name.compareTo("Title")==0){
-
- title=(String)AnyConverter.toObject(new Type(java.lang.String.class), pValue[i].Value);
- //System.out.println(pValue[i].Name+" "+title);
- }
- }
- catch(com.sun.star.lang.IllegalArgumentException AnyExec){
- System.out.println("\nIllegalArgumentException "+AnyExec);
- }
- }
-
-
- if (sURL==null){
- sURL="";
- }
-
- try{
-
- Object xCfgMgrObj=xMSF.createInstance("com.sun.star.config.SpecialConfigManager");
- XConfigManager xCfgMgr = (XConfigManager) UnoRuntime.queryInterface(
- XConfigManager.class , xCfgMgrObj );
-
- String PathString=xCfgMgr.substituteVariables("$(progurl)" );
- PathString= PathString.concat("/");
- udJarPath= PathString.concat(udJarPath);
-
- Object xPipeObj=xMSF.createInstance("com.sun.star.io.Pipe");
- xInStream = (XInputStream) UnoRuntime.queryInterface(
- XInputStream.class , xPipeObj );
- xOutStream = (XOutputStream) UnoRuntime.queryInterface(
- XOutputStream.class , xPipeObj );
- }
- catch (Exception e){
- System.out.println("Exception "+e);
- return false;
- }
-
- return true;
- }
-
- public String replace(String origString, String origChar, String replaceChar){
- String tmp="";
- int index=origString.indexOf(origChar);
- if(index !=-1){
- while (index !=-1){
- String first =origString.substring(0,index);
- first=first.concat(replaceChar);
- tmp=tmp.concat(first);
- origString=origString.substring(index+1,origString.length());
- index=origString.indexOf(origChar);
- if(index==-1) {
- tmp=tmp.concat(origString);
- }
-
- }
-
- }
- return tmp;
- }
-
- public String needsMask(String origString){
- if (origString.indexOf("&")!=-1){
- origString=replace(origString,"&","&amp;");
- }
- if (origString.indexOf("\"")!=-1){
- origString=replace(origString,"\"","&quot;");
- }
- if (origString.indexOf("<")!=-1){
- origString=replace(origString,"<","&lt;");
- }
- if (origString.indexOf(">")!=-1){
- origString=replace(origString,">","&gt;");
- }
- return origString;
-
- }
-
-
-
- public void startDocument () {
- //System.out.println("\nStart Document!");
- }
-
- public void endDocument()throws com.sun.star.uno.RuntimeException
- {
-
- try{
-
- convert (xInStream,xos,true,udJarPath,sURL,offMime,sdMime);
-
- }
- catch (IOException e){
- //System.out.println("Exception "+e);
- throw new com.sun.star.uno.RuntimeException(e.getMessage());
-
- }
- catch (Exception e){
- //System.out.println("Exception "+e);
- throw new com.sun.star.uno.RuntimeException("Xmerge Exception");
-
- }
- }
-
-
-
- public void startElement (String str, com.sun.star.xml.sax.XAttributeList xattribs)
- {
-
- str="<".concat(str);
- if (xattribs !=null)
- {
- str= str.concat(" ");
- int len=xattribs.getLength();
- for (short i=0;i<len;i++)
- {
- str=str.concat(xattribs.getNameByIndex(i));
- str=str.concat("=\"");
- str=str.concat(needsMask(xattribs.getValueByIndex(i)));
- str=str.concat("\" ");
- }
- }
- str=str.concat(">");
- // System.out.println(str);
- try{
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
- }
-
- public void endElement(String str){
-
- str="</".concat(str);
- str=str.concat(">");
- try{
- xOutStream.writeBytes(str.getBytes("UTF-8"));
-
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
-
- }
- public void characters(String str){
- str=needsMask(str);
- try{
- xOutStream.writeBytes(str.getBytes("UTF-8"));
- }
- catch (Exception e){
- System.out.println("\n"+e);
- }
-
-
- }
-
- public void ignorableWhitespace(String str){
-
-
- }
- public void processingInstruction(String aTarget, String aData){
-
- }
-
- public void setDocumentLocator(com.sun.star.xml.sax.XLocator xLocator){
-
- }
-
-
-
-
-
-
- public void convert (com.sun.star.io.XInputStream xml,com.sun.star.io.XOutputStream device,
- boolean convertFromOffice,String pluginUrl,String FileName,String offMime,String sdMime) throws com.sun.star.uno.RuntimeException, IOException {
-
- String jarName = pluginUrl;
- String name= getFileName(FileName);
-
- ConverterInfo converterInfo = null;
- Enumeration ciEnum= null;
-
- XInputStreamToInputStreamAdapter xis =new XInputStreamToInputStreamAdapter(xml);
-
-
- XOutputStreamToOutputStreamAdapter newxos =new XOutputStreamToOutputStreamAdapter(device);
- try{
- ConverterInfoReader cir = new ConverterInfoReader(jarName,false);
- ciEnum =cir.getConverterInfoEnumeration();
- }
- catch (ParserConfigurationException pexc){
- System.out.println("Error:"+pexc);
- }
- catch ( org.xml.sax.SAXException pexc){
- System.out.println("Error:"+pexc);
- }
- catch(Exception e){
- System.out.println("Error:"+e);
- }
- ConverterInfoMgr. removeByJar(jarName);
- if (convertFromOffice)
- {
-
- try {
-
- //Check to see if jar contains a plugin Impl
-
- ConverterInfoMgr.addPlugIn(ciEnum);
- ConverterFactory cf = new ConverterFactory();
-
- Convert cv = cf.getConverter(ConverterInfoMgr.findConverterInfo(sdMime,offMime),false);
- if (cv == null) {
- System.out.println("\nNo plug-in exists to convert from <staroffice/sxw> to <specified format> ");
-
- }
- else
- {
- cv.addInputStream(name,(InputStream)xis,false);
- ConvertData dataOut = cv.convert();
-
- Enumeration docEnum = dataOut.getDocumentEnumeration();
-
- if (docEnum.hasMoreElements()){
- Document docOut = (Document)docEnum.nextElement();
- String fileName = docOut.getFileName();
- docOut.write(newxos);
-
- newxos.flush();
- newxos.close();
-
-
- int i=1;
- while (docEnum.hasMoreElements() && sURL.startsWith("file:")) {
- //URI uri=new URI(sFileName);
- URI uri=new URI(sURL);
- String newFileName= getPath(uri);
-
-
- //System.out.println("\nURI: "+uri.getPath());
- File newFile=null;
- if (newFileName.lastIndexOf(".")!=-1){
- newFile =new File(newFileName.substring(0,newFileName.lastIndexOf("."))+String.valueOf(i)+newFileName.substring(newFileName.lastIndexOf(".")));
- }
- else{
- newFile =new File(newFileName.concat(String.valueOf(i)));
- }
-
- FileOutputStream fos = new FileOutputStream(newFile);
- docOut = (Document)docEnum.nextElement();
- fileName = docOut.getFileName();
- docOut.write(fos);
- fos.flush();
- fos.close();
- i++;
-
- }
-
- }
- }
- ConverterInfoMgr.removeByJar(jarName);
- }
- catch (StackOverflowError sOE){
- System.out.println("\nERROR : Stack OverFlow. \n Increase of the JRE by adding the following line to the end of the javarc file \n \"-Xss1m\"\n");
-
- }
- catch (Exception e) {
- System.out.println("Error:"+e);
- throw new IOException("Xmerge Exception");
- }
- }
- else{
-
- try {
- //Check to see if jar contains a plugin Impl
- ConverterInfoMgr.addPlugIn(ciEnum);
- ConverterFactory cf = new ConverterFactory();
- Convert cv = cf.getConverter(ConverterInfoMgr.findConverterInfo(sdMime,offMime),true);
- if (cv == null) {
- System.out.println("\nNo plug-in exists to convert to <staroffice/sxw> from <specified format>");
- }
- else
- {
- cv.addInputStream(name,(InputStream)xis,false);
- //System.out.println("\nConverting");
- ConvertData dataIn = cv.convert();
- //System.out.println("\nFinished Converting");
- Enumeration docEnum = dataIn.getDocumentEnumeration();
- while (docEnum.hasMoreElements()) {
- OfficeDocument docIn = (OfficeDocument)docEnum.nextElement();
-
- docIn.write(newxos,false);
- }
- //newxos.write(-1); //EOF character
- //newxos.flush();
- newxos.close();
- }
- ConverterInfoMgr.removeByJar(jarName);
- }
- catch (StackOverflowError sOE){
- System.out.println("\nERROR : Stack OverFlow. \n Increase of the JRE by adding the following line to the end of the javarc file \n \"-Xss1m\"\n");
- }
- catch (Exception e) {
- System.out.println("Error:"+e);
- throw new IOException("Xmerge Exception");
- }
-
-
- }
-
- }
-
- private String getPath(URI uri){
- String path = uri.getPath();
- String opSys=System.getProperty("os.name");
- if(opSys.indexOf("Windows")!=-1){
- path= path.replace('/','\\');
- path = path.substring(1);
- }
- return path;
- }
-
-
-
-
-
-
-
- // Implement methods from interface XTypeProvider
- public byte[] getImplementationId() {
- byte[] byteReturn = {};
-
- byteReturn = new String( "" + this.hashCode() ).getBytes();
-
- return( byteReturn );
- }
-
- // Implement method from interface XServiceName
- public String getServiceName() {
- return( __serviceName );
- }
-
- // Implement methods from interface XServiceInfo
- public boolean supportsService(String stringServiceName) {
- return( stringServiceName.equals( __serviceName ) );
- }
-
- public String getImplementationName() {
- return( _XMergeBridge.class.getName() );
- }
-
- public String[] getSupportedServiceNames() {
- String[] stringSupportedServiceNames = { __serviceName };
- return( stringSupportedServiceNames );
- }
- }
-
- /**
- * Returns a factory for creating the service.
- * This method is called by the <code>JavaLoader</code>
- *
- * @return returns a <code>XSingleServiceFactory</code> for creating the
- * component
- *
- * @param implName the name of the implementation for which a
- * service is desired
- * @param multiFactory the service manager to be used if needed
- * @param regKey the registryKey
- *
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static XSingleServiceFactory __getServiceFactory(String implName,
- XMultiServiceFactory multiFactory,
- XRegistryKey regKey) {
- xMSF= multiFactory;
- XSingleServiceFactory xSingleServiceFactory = null;
- if (implName.equals(_XMergeBridge.class.getName()) ) {
- xSingleServiceFactory = FactoryHelper.getServiceFactory(_XMergeBridge.class,
- _XMergeBridge.__serviceName,
- multiFactory,
- regKey);
- }
-
- return xSingleServiceFactory;
- }
-
- /**
- * Writes the service information into the given registry key.
- * This method is called by the <code>JavaLoader</code>
- * <p>
- * @return returns true if the operation succeeded
- * @param regKey the registryKey
- * @see com.sun.star.comp.loader.JavaLoader
- */
- public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
-
- return FactoryHelper.writeRegistryServiceInfo(_XMergeBridge.class.getName(),
- _XMergeBridge.__serviceName, regKey);
- }
-}
-
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.cxx b/xmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.cxx
deleted file mode 100755
index 71c9bcd04e4c..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.cxx
+++ /dev/null
@@ -1,267 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_xmerge.hxx"
-
-#ifndef _OSL_STREAM_WRAPPER_HXX_
-#include "streamwrap.hxx"
-#endif
-#include <osl/file.hxx>
-
-namespace foo
-{
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::io;
-using namespace ::com::sun::star::lang;
-using namespace ::osl;
-
-//==================================================================
-//= OInputStreamWrapper
-//==================================================================
-//------------------------------------------------------------------
-OInputStreamWrapper::OInputStreamWrapper( File& _rStream )
- :m_pSvStream(&_rStream)
- ,m_bSvStreamOwner(sal_False)
-{
-}
-
-//------------------------------------------------------------------
-OInputStreamWrapper::OInputStreamWrapper( File* pStream, sal_Bool bOwner )
- :m_pSvStream( pStream )
- ,m_bSvStreamOwner( bOwner )
-{
-}
-
-//------------------------------------------------------------------
-OInputStreamWrapper::~OInputStreamWrapper()
-{
- if( m_bSvStreamOwner )
- delete m_pSvStream;
-
-}
-
-//------------------------------------------------------------------------------
-sal_Int32 SAL_CALL OInputStreamWrapper::readBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead)
- throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- checkConnected();
-
- if (nBytesToRead < 0)
- throw stario::BufferSizeExceededException(::rtl::OUString(),static_cast<staruno::XWeak*>(this));
-
- ::osl::MutexGuard aGuard( m_aMutex );
-
- aData.realloc(nBytesToRead);
-
- sal_uInt64 nRead = 0;
- m_pSvStream->read((void*)aData.getArray(), nBytesToRead,nRead);
-
- checkError();
-
- // Wenn gelesene Zeichen < MaxLength, staruno::Sequence anpassen
- if (nRead < nBytesToRead)
- aData.realloc( nRead );
-
- return nRead;
-}
-
-//------------------------------------------------------------------------------
-sal_Int32 SAL_CALL OInputStreamWrapper::readSomeBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead) throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- checkError();
-
- if (nMaxBytesToRead < 0)
- throw stario::BufferSizeExceededException(::rtl::OUString(),static_cast<staruno::XWeak*>(this));
-
- return readBytes(aData, nMaxBytesToRead);
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OInputStreamWrapper::skipBytes(sal_Int32 nBytesToSkip) throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkError();
-
- m_pSvStream->setPos(osl_Pos_Current,nBytesToSkip);
- checkError();
-}
-
-//------------------------------------------------------------------------------
-sal_Int32 SAL_CALL OInputStreamWrapper::available() throw( stario::NotConnectedException, staruno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- sal_uInt64 nPos = 0;
- m_pSvStream->getPos(nPos);
- checkError();
-
- m_pSvStream->setPos(Pos_End,0);
- checkError();
-
- sal_uInt64 nAvailable = 0;
- m_pSvStream->getPos(nAvailable);
- nAvailable -= nPos;
-
- m_pSvStream->setPos(Pos_Absolut,nPos);
- checkError();
-
- return nAvailable;
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OInputStreamWrapper::closeInput() throw( stario::NotConnectedException, staruno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- if (m_bSvStreamOwner)
- delete m_pSvStream;
-
- m_pSvStream = NULL;
-}
-
-//------------------------------------------------------------------------------
-void OInputStreamWrapper::checkConnected() const
-{
- if (!m_pSvStream)
- throw stario::NotConnectedException(::rtl::OUString(), const_cast<staruno::XWeak*>(static_cast<const staruno::XWeak*>(this)));
-}
-
-//------------------------------------------------------------------------------
-void OInputStreamWrapper::checkError() const
-{
- checkConnected();
-}
-
-//==================================================================
-//= OSeekableInputStreamWrapper
-//==================================================================
-//------------------------------------------------------------------------------
-OSeekableInputStreamWrapper::OSeekableInputStreamWrapper(File& _rStream)
- :OInputStreamWrapper(_rStream)
-{
-}
-
-//------------------------------------------------------------------------------
-OSeekableInputStreamWrapper::OSeekableInputStreamWrapper(File* _pStream, sal_Bool _bOwner)
- :OInputStreamWrapper(_pStream, _bOwner)
-{
-}
-
-//------------------------------------------------------------------------------
-Any SAL_CALL OSeekableInputStreamWrapper::queryInterface( const Type& _rType ) throw (RuntimeException)
-{
- Any aReturn = OInputStreamWrapper::queryInterface(_rType);
- if (!aReturn.hasValue())
- aReturn = OSeekableInputStreamWrapper_Base::queryInterface(_rType);
- return aReturn;
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OSeekableInputStreamWrapper::acquire( ) throw ()
-{
- OInputStreamWrapper::acquire();
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OSeekableInputStreamWrapper::release( ) throw ()
-{
- OInputStreamWrapper::release();
-}
-
-//------------------------------------------------------------------------------
-void SAL_CALL OSeekableInputStreamWrapper::seek( sal_Int64 _nLocation ) throw (IllegalArgumentException, IOException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- m_pSvStream->setPos(Pos_Current,(sal_uInt32)_nLocation);
- checkError();
-}
-
-//------------------------------------------------------------------------------
-sal_Int64 SAL_CALL OSeekableInputStreamWrapper::getPosition( ) throw (IOException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- sal_uInt64 nPos = 0;
- nPos = m_pSvStream->getPos(nPos);
- checkError();
- return nPos;
-}
-
-//------------------------------------------------------------------------------
-sal_Int64 SAL_CALL OSeekableInputStreamWrapper::getLength( ) throw (IOException, RuntimeException)
-{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkConnected();
-
- sal_uInt64 nCurrentPos = 0;
- m_pSvStream->getPos(nCurrentPos);
- checkError();
-
- m_pSvStream->setPos(osl_Pos_End,0);
- sal_uInt64 nEndPos = 0;
- m_pSvStream->getPos(nEndPos);
- m_pSvStream->setPos(osl_Pos_Absolut,nCurrentPos);
-
- checkError();
-
- return nEndPos;
-}
-
-//==================================================================
-//= OOutputStreamWrapper
-//==================================================================
-//------------------------------------------------------------------------------
-void SAL_CALL OOutputStreamWrapper::writeBytes(const staruno::Sequence< sal_Int8 >& aData) throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
- sal_uInt64 nWritten = 0;
- rStream.write(aData.getConstArray(),aData.getLength(),nWritten);
- if (nWritten != aData.getLength())
- {
- throw stario::BufferSizeExceededException(::rtl::OUString(),static_cast<staruno::XWeak*>(this));
- }
-}
-
-//------------------------------------------------------------------
-void SAL_CALL OOutputStreamWrapper::flush() throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
-}
-
-//------------------------------------------------------------------
-void SAL_CALL OOutputStreamWrapper::closeOutput() throw( stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException )
-{
-}
-
-} // namespace utl
-
-
diff --git a/xmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.hxx b/xmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.hxx
deleted file mode 100755
index d31721f3825f..000000000000
--- a/xmerge/java/org/openoffice/xmerge/xmergebridge/streamwrap.hxx
+++ /dev/null
@@ -1,141 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * 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 _OSL_FILE_WRAPPER_HXX_
-#define _OSL_FILE_WRAPPER_HXX_
-
-#include <osl/mutex.hxx>
-#include <com/sun/star/io/XOutputStream.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/io/XSeekable.hpp>
-#include <cppuhelper/implbase1.hxx>
-
-#define DECLARE_UNO3_AGG_DEFAULTS(classname, baseclass) \
-virtual void SAL_CALL acquire() throw() { baseclass::acquire(); } \
-virtual void SAL_CALL release() throw() { baseclass::release(); } \
-virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException) \
-{ return baseclass::queryInterface(_rType); } \
-void SAL_CALL PUT_SEMICOLON_AT_THE_END()
-
-namespace osl
-{
- class File;
-}
-
-namespace foo
-{
- namespace stario = ::com::sun::star::io;
- namespace staruno = ::com::sun::star::uno;
-
-//==================================================================
-//= OInputFileWrapper
-//==================================================================
-typedef ::cppu::WeakImplHelper1 < stario::XInputStream
- > InputStreamWrapper_Base;
- // needed for some compilers
-/// helper class for wrapping a File into an <type scope="com.sun.star.io">XInputStream</type>
-class OInputStreamWrapper : public InputStreamWrapper_Base
-{
-protected:
- ::osl::Mutex m_aMutex;
- ::osl::File* m_pSvStream;
- sal_Bool m_bSvStreamOwner : 1;
-
-public:
- OInputStreamWrapper(::osl::File& _rStream);
- OInputStreamWrapper(::osl::File* pStream, sal_Bool bOwner=sal_False);
- virtual ~OInputStreamWrapper();
-
-// UNO Anbindung
- DECLARE_UNO3_AGG_DEFAULTS(OInputStreamWrapper, InputStreamWrapper_Base);
-
-// stario::XInputStream
- virtual sal_Int32 SAL_CALL readBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual sal_Int32 SAL_CALL readSomeBytes(staruno::Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual void SAL_CALL skipBytes(sal_Int32 nBytesToSkip) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual sal_Int32 SAL_CALL available() throw(stario::NotConnectedException, staruno::RuntimeException);
- virtual void SAL_CALL closeInput() throw(stario::NotConnectedException, staruno::RuntimeException);
-
-protected:
- /// throws a NotConnectedException if the object is not connected anymore
- void checkConnected() const;
- /// throws an exception according to the error flag of m_pSvStream
- void checkError() const;
-};
-
-//==================================================================
-//= OSeekableInputFIleWrapper
-//==================================================================
-typedef ::cppu::ImplHelper1 < ::com::sun::star::io::XSeekable
- > OSeekableInputStreamWrapper_Base;
-/** helper class for wrapping an File into an <type scope="com.sun.star.io">XInputStream</type>
- which is seekable (i.e. supports the <type scope="com.sun.star.io">XSeekable</type> interface).
-*/
-class OSeekableInputStreamWrapper
- :public OInputStreamWrapper
- ,public OSeekableInputStreamWrapper_Base
-{
-public:
- OSeekableInputStreamWrapper(::osl::File& _rStream);
- OSeekableInputStreamWrapper(::osl::File* _pStream, sal_Bool _bOwner = sal_False);
-
- // disambiguate XInterface
- virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& _rType ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire( ) throw ();
- virtual void SAL_CALL release( ) throw ();
-
- // XSeekable
- virtual void SAL_CALL seek( sal_Int64 _nLocation ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Int64 SAL_CALL getPosition( ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Int64 SAL_CALL getLength( ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================
-//= OOutputStreamWrapper
-//==================================================================
-typedef ::cppu::WeakImplHelper1<stario::XOutputStream> OutputStreamWrapper_Base;
- // needed for some compilers
-class OOutputStreamWrapper : public OutputStreamWrapper_Base
-{
- ::osl::File& rStream;
-
-public:
- OOutputStreamWrapper(::osl::File& _rStream) :rStream(_rStream) { }
-
-// UNO Anbindung
- DECLARE_UNO3_AGG_DEFAULTS(OOutputStreamWrapper, OutputStreamWrapper_Base);
-
-// stario::XOutputStream
- virtual void SAL_CALL writeBytes(const staruno::Sequence< sal_Int8 >& aData) throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual void SAL_CALL flush() throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
- virtual void SAL_CALL closeOutput() throw(stario::NotConnectedException, stario::BufferSizeExceededException, staruno::RuntimeException);
-};
-
-} // namespace utl
-
-
-#endif // _UTL_STREAM_WRAPPER_HXX_
-
diff --git a/xmerge/source/inc/antbuild.properties b/xmerge/source/inc/antbuild.properties
index aaa260af124a..a027bbb60218 100644
--- a/xmerge/source/inc/antbuild.properties
+++ b/xmerge/source/inc/antbuild.properties
@@ -1,4 +1,5 @@
# define how to handle CLASSPATH environment
+# x-no-translate
build.sysclasspath=ignore
# set wether we want to compile with or without deprecation
diff --git a/xmerge/source/palmtests/qa/comparator/XmlDiff.properties b/xmerge/source/palmtests/qa/comparator/XmlDiff.properties
index c6c9f69a9cc7..2fdff0953ed6 100644
--- a/xmerge/source/palmtests/qa/comparator/XmlDiff.properties
+++ b/xmerge/source/palmtests/qa/comparator/XmlDiff.properties
@@ -7,6 +7,7 @@
# XmlDiff.output is where the output (err/message) go
# XmlDiff.tags are what tagname should ignore (and the subtree under it)
#
+# x-no-translate
XmlDiff.file1=test1.xml
XmlDiff.file2=test2.xml
XmlDiff.output=System.err
diff --git a/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties b/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties
index 32f3771fc492..aeb6fdaba443 100644
--- a/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties
+++ b/xmerge/source/xmerge/java/org/openoffice/xmerge/converter/xml/xslt/XsltPlugin.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
#
diff --git a/xmerge/source/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties b/xmerge/source/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties
index d8bf3483b95d..a342273c67b9 100644
--- a/xmerge/source/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties
+++ b/xmerge/source/xmerge/java/org/openoffice/xmerge/test/ConverterInfoList.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
#
# Jarfiles to be loaded
diff --git a/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.properties b/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.properties
index 4be4427837a7..925392b86cdd 100644
--- a/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.properties
+++ b/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
#
diff --git a/xmerge/source/xmerge/java/org/openoffice/xmerge/util/resources.properties b/xmerge/source/xmerge/java/org/openoffice/xmerge/util/resources.properties
index dd7938723e30..99e6ccae2645 100644
--- a/xmerge/source/xmerge/java/org/openoffice/xmerge/util/resources.properties
+++ b/xmerge/source/xmerge/java/org/openoffice/xmerge/util/resources.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
#
diff --git a/xmerge/workben/XmlDiff.properties b/xmerge/workben/XmlDiff.properties
index 251e64a65a92..34483a5bd230 100644
--- a/xmerge/workben/XmlDiff.properties
+++ b/xmerge/workben/XmlDiff.properties
@@ -24,6 +24,7 @@
# for a copy of the LGPLv3 License.
#
#*************************************************************************
+# x-no-translate
#
diff --git a/xmlhelp/source/cxxhelp/provider/databases.cxx b/xmlhelp/source/cxxhelp/provider/databases.cxx
index c5e2582b3905..f1113c1e114f 100644
--- a/xmlhelp/source/cxxhelp/provider/databases.cxx
+++ b/xmlhelp/source/cxxhelp/provider/databases.cxx
@@ -1162,7 +1162,8 @@ Reference< XHierarchicalNameAccess > Databases::jarFile( const rtl::OUString& ja
Reference< XHierarchicalNameAccess > Databases::findJarFileForPath
( const rtl::OUString& jar, const rtl::OUString& Language,
- const rtl::OUString& path, rtl::OUString* o_pExtensionPath )
+ const rtl::OUString& path, rtl::OUString* o_pExtensionPath,
+ rtl::OUString* o_pExtensionRegistryPath )
{
Reference< XHierarchicalNameAccess > xNA;
if( ! jar.getLength() ||
@@ -1174,7 +1175,7 @@ Reference< XHierarchicalNameAccess > Databases::findJarFileForPath
JarFileIterator aJarFileIt( m_xContext, *this, jar, Language );
Reference< XHierarchicalNameAccess > xTestNA;
Reference< deployment::XPackage > xParentPackageBundle;
- while( (xTestNA = aJarFileIt.nextJarFile( xParentPackageBundle, o_pExtensionPath )).is() )
+ while( (xTestNA = aJarFileIt.nextJarFile( xParentPackageBundle, o_pExtensionPath, o_pExtensionRegistryPath )).is() )
{
if( xTestNA.is() && xTestNA->hasByHierarchicalName( path ) )
{
@@ -1510,8 +1511,10 @@ void ExtensionIteratorBase::init()
m_bUserPackagesLoaded = false;
m_bSharedPackagesLoaded = false;
+ m_bBundledPackagesLoaded = false;
m_iUserPackage = 0;
m_iSharedPackage = 0;
+ m_iBundledPackage = 0;
}
Reference< deployment::XPackage > ExtensionIteratorBase::implGetHelpPackageFromPackage
@@ -1622,7 +1625,7 @@ Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextSharedHelpPa
if( m_iSharedPackage == m_aSharedPackagesSeq.getLength() )
{
- m_eState = END_REACHED;
+ m_eState = BUNDLED_EXTENSIONS;
}
else
{
@@ -1635,6 +1638,36 @@ Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextSharedHelpPa
return xHelpPackage;
}
+Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextBundledHelpPackage
+ ( Reference< deployment::XPackage >& o_xParentPackageBundle )
+{
+ Reference< deployment::XPackage > xHelpPackage;
+
+ if( !m_bBundledPackagesLoaded )
+ {
+ Reference< XPackageManager > xBundledManager =
+ thePackageManagerFactory::get( m_xContext )->getPackageManager( rtl::OUString::createFromAscii("bundled") );
+ m_aBundledPackagesSeq = xBundledManager->getDeployedPackages
+ ( Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+ m_bBundledPackagesLoaded = true;
+ }
+
+ if( m_iBundledPackage == m_aBundledPackagesSeq.getLength() )
+ {
+ m_eState = END_REACHED;
+ }
+ else
+ {
+ const Reference< deployment::XPackage >* pBundledPackages =
+ m_aBundledPackagesSeq.getConstArray();
+ Reference< deployment::XPackage > xPackage = pBundledPackages[ m_iBundledPackage++ ];
+ VOS_ENSURE( xPackage.is(), "ExtensionIteratorBase::implGetNextBundledHelpPackage(): Invalid package" );
+ xHelpPackage = implGetHelpPackageFromPackage( xPackage, o_xParentPackageBundle );
+ }
+
+ return xHelpPackage;
+}
+
rtl::OUString ExtensionIteratorBase::implGetFileFromPackage(
const rtl::OUString& rFileExtension, Reference< deployment::XPackage > xPackage )
{
@@ -1646,7 +1679,7 @@ rtl::OUString ExtensionIteratorBase::implGetFileFromPackage(
for( sal_Int32 iPass = 0 ; iPass < 2 ; ++iPass )
{
rtl::OUStringBuffer aStrBuf;
- aStrBuf.append( xPackage->getURL() );
+ aStrBuf.append( xPackage->getRegistrationDataURL().Value);
aStrBuf.append( aSlash );
aStrBuf.append( aLanguage );
if( !bLangFolderOnly )
@@ -1720,7 +1753,7 @@ void ExtensionIteratorBase::implGetLanguageVectorFromPackage( ::std::vector< ::r
//===================================================================
// class DataBaseIterator
-Db* DataBaseIterator::nextDb( rtl::OUString* o_pExtensionPath )
+Db* DataBaseIterator::nextDb( rtl::OUString* o_pExtensionPath, rtl::OUString* o_pExtensionRegistryPath )
{
Db* pRetDb = NULL;
@@ -1743,7 +1776,7 @@ Db* DataBaseIterator::nextDb( rtl::OUString* o_pExtensionPath )
Reference< deployment::XPackage > xHelpPackage = implGetNextUserHelpPackage( xParentPackageBundle );
if( !xHelpPackage.is() )
break;
- pRetDb = implGetDbFromPackage( xHelpPackage, o_pExtensionPath );
+ pRetDb = implGetDbFromPackage( xHelpPackage, o_pExtensionPath, o_pExtensionRegistryPath );
break;
}
@@ -1754,9 +1787,21 @@ Db* DataBaseIterator::nextDb( rtl::OUString* o_pExtensionPath )
if( !xHelpPackage.is() )
break;
- pRetDb = implGetDbFromPackage( xHelpPackage, o_pExtensionPath );
+ pRetDb = implGetDbFromPackage( xHelpPackage, o_pExtensionPath, o_pExtensionRegistryPath );
+ break;
+ }
+
+ case BUNDLED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xParentPackageBundle;
+ Reference< deployment::XPackage > xHelpPackage = implGetNextBundledHelpPackage( xParentPackageBundle );
+ if( !xHelpPackage.is() )
+ break;
+
+ pRetDb = implGetDbFromPackage( xHelpPackage, o_pExtensionPath, o_pExtensionRegistryPath );
break;
}
+
case END_REACHED:
VOS_ENSURE( false, "DataBaseIterator::nextDb(): Invalid case END_REACHED" );
break;
@@ -1767,38 +1812,55 @@ Db* DataBaseIterator::nextDb( rtl::OUString* o_pExtensionPath )
}
Db* DataBaseIterator::implGetDbFromPackage( Reference< deployment::XPackage > xPackage,
- rtl::OUString* o_pExtensionPath )
+ rtl::OUString* o_pExtensionPath, rtl::OUString* o_pExtensionRegistryPath )
{
- rtl::OUString aExtensionPath = xPackage->getURL();
- //if( o_pExtensionPath )
- //*o_pExtensionPath = aExtensionPath;
- aExtensionPath += aSlash;
- rtl::OUString aUsedLanguage = m_aLanguage;
- Db* pRetDb = m_rDatabases.getBerkeley( aHelpFilesBaseName, aUsedLanguage,
- m_bHelpText, &aExtensionPath );
+ beans::Optional< ::rtl::OUString> optRegData;
+ try
+ {
+ optRegData = xPackage->getRegistrationDataURL();
+ }
+ catch ( deployment::ExtensionRemovedException&)
+ {
+ return NULL;
+ }
- // Language fallback
- if( !pRetDb )
+ Db* pRetDb = NULL;
+ if (optRegData.IsPresent && optRegData.Value.getLength() > 0)
{
- ::std::vector< ::rtl::OUString > av;
- implGetLanguageVectorFromPackage( av, xPackage );
- ::std::vector< ::rtl::OUString >::const_iterator pFound = av.end();
- try
- {
- pFound = ::comphelper::Locale::getFallback( av, m_aLanguage );
- }
- catch( ::comphelper::Locale::MalFormedLocaleException& )
- {}
- if( pFound != av.end() )
+ rtl::OUString aRegDataUrl(optRegData.Value);
+ aRegDataUrl += aSlash;
+
+ rtl::OUString aUsedLanguage = m_aLanguage;
+ pRetDb = m_rDatabases.getBerkeley(
+ aHelpFilesBaseName, aUsedLanguage, m_bHelpText, &aRegDataUrl);
+
+ // Language fallback
+ if( !pRetDb )
{
- aUsedLanguage = *pFound;
- pRetDb = m_rDatabases.getBerkeley( aHelpFilesBaseName, aUsedLanguage, m_bHelpText, &aExtensionPath );
+ ::std::vector< ::rtl::OUString > av;
+ implGetLanguageVectorFromPackage( av, xPackage );
+ ::std::vector< ::rtl::OUString >::const_iterator pFound = av.end();
+ try
+ {
+ pFound = ::comphelper::Locale::getFallback( av, m_aLanguage );
+ }
+ catch( ::comphelper::Locale::MalFormedLocaleException& )
+ {}
+ if( pFound != av.end() )
+ {
+ aUsedLanguage = *pFound;
+ pRetDb = m_rDatabases.getBerkeley(
+ aHelpFilesBaseName, aUsedLanguage, m_bHelpText, &aRegDataUrl);
+ }
}
- }
- if( o_pExtensionPath )
- *o_pExtensionPath = aExtensionPath + aUsedLanguage;
+ if( o_pExtensionPath )
+ *o_pExtensionPath = aRegDataUrl + aUsedLanguage;
+
+ if( o_pExtensionRegistryPath )
+ *o_pExtensionRegistryPath = xPackage->getURL() + aSlash + aUsedLanguage;
+ }
return pRetDb;
}
@@ -1853,6 +1915,19 @@ rtl::OUString KeyDataBaseFileIterator::nextDbFile( bool& o_rbExtension )
o_rbExtension = true;
break;
}
+
+ case BUNDLED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xParentPackageBundle;
+ Reference< deployment::XPackage > xHelpPackage = implGetNextBundledHelpPackage( xParentPackageBundle );
+ if( !xHelpPackage.is() )
+ break;
+
+ aRetFile = implGetDbFileFromPackage( xHelpPackage );
+ o_rbExtension = true;
+ break;
+ }
+
case END_REACHED:
VOS_ENSURE( false, "DataBaseIterator::nextDbFile(): Invalid case END_REACHED" );
break;
@@ -1879,7 +1954,8 @@ rtl::OUString KeyDataBaseFileIterator::implGetDbFileFromPackage
// class JarFileIterator
Reference< XHierarchicalNameAccess > JarFileIterator::nextJarFile
- ( Reference< deployment::XPackage >& o_xParentPackageBundle, rtl::OUString* o_pExtensionPath )
+ ( Reference< deployment::XPackage >& o_xParentPackageBundle,
+ rtl::OUString* o_pExtensionPath, rtl::OUString* o_pExtensionRegistryPath )
{
Reference< XHierarchicalNameAccess > xNA;
@@ -1902,7 +1978,7 @@ Reference< XHierarchicalNameAccess > JarFileIterator::nextJarFile
if( !xHelpPackage.is() )
break;
- xNA = implGetJarFromPackage( xHelpPackage, o_pExtensionPath );
+ xNA = implGetJarFromPackage( xHelpPackage, o_pExtensionPath, o_pExtensionRegistryPath );
break;
}
@@ -1912,9 +1988,20 @@ Reference< XHierarchicalNameAccess > JarFileIterator::nextJarFile
if( !xHelpPackage.is() )
break;
- xNA = implGetJarFromPackage( xHelpPackage, o_pExtensionPath );
+ xNA = implGetJarFromPackage( xHelpPackage, o_pExtensionPath, o_pExtensionRegistryPath );
break;
}
+
+ case BUNDLED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xHelpPackage = implGetNextBundledHelpPackage( o_xParentPackageBundle );
+ if( !xHelpPackage.is() )
+ break;
+
+ xNA = implGetJarFromPackage( xHelpPackage, o_pExtensionPath, o_pExtensionRegistryPath );
+ break;
+ }
+
case END_REACHED:
VOS_ENSURE( false, "JarFileIterator::nextJarFile(): Invalid case END_REACHED" );
break;
@@ -1925,7 +2012,7 @@ Reference< XHierarchicalNameAccess > JarFileIterator::nextJarFile
}
Reference< XHierarchicalNameAccess > JarFileIterator::implGetJarFromPackage
- ( Reference< deployment::XPackage > xPackage, rtl::OUString* o_pExtensionPath )
+( Reference< deployment::XPackage > xPackage, rtl::OUString* o_pExtensionPath, rtl::OUString* o_pExtensionRegistryPath )
{
Reference< XHierarchicalNameAccess > xNA;
@@ -1970,6 +2057,15 @@ Reference< XHierarchicalNameAccess > JarFileIterator::implGetJarFromPackage
sal_Int32 nLastSlash = zipFile.lastIndexOf( '/' );
if( nLastSlash != -1 )
*o_pExtensionPath = zipFile.copy( 0, nLastSlash );
+
+ if( o_pExtensionRegistryPath != NULL )
+ {
+ rtl::OUString& rPath = *o_pExtensionPath;
+ sal_Int32 nLastSlashInPath = rPath.lastIndexOf( '/', rPath.getLength() - 1 );
+
+ *o_pExtensionRegistryPath = xPackage->getURL();
+ *o_pExtensionRegistryPath += rPath.copy( nLastSlashInPath);
+ }
}
return xNA;
@@ -2026,6 +2122,19 @@ rtl::OUString IndexFolderIterator::nextIndexFolder( bool& o_rbExtension, bool& o
o_rbExtension = true;
break;
}
+
+ case BUNDLED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xParentPackageBundle;
+ Reference< deployment::XPackage > xHelpPackage = implGetNextBundledHelpPackage( xParentPackageBundle );
+ if( !xHelpPackage.is() )
+ break;
+
+ aIndexFolder = implGetIndexFolderFromPackage( o_rbTemporary, xHelpPackage );
+ o_rbExtension = true;
+ break;
+ }
+
case END_REACHED:
VOS_ENSURE( false, "IndexFolderIterator::nextIndexFolder(): Invalid case END_REACHED" );
break;
diff --git a/xmlhelp/source/cxxhelp/provider/databases.hxx b/xmlhelp/source/cxxhelp/provider/databases.hxx
index 6468c5732c6b..aa80bf27405b 100644
--- a/xmlhelp/source/cxxhelp/provider/databases.hxx
+++ b/xmlhelp/source/cxxhelp/provider/databases.hxx
@@ -267,7 +267,8 @@ namespace chelp {
com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess >
findJarFileForPath( const rtl::OUString& jar, const rtl::OUString& Language,
- const rtl::OUString& path, rtl::OUString* o_pExtensionPath = NULL );
+ const rtl::OUString& path, rtl::OUString* o_pExtensionPath = NULL,
+ rtl::OUString* o_pExtensionRegistryPath = NULL );
/**
* Maps a given language-locale combination to language.
@@ -398,6 +399,7 @@ namespace chelp {
//SHARED_MODULE, // Later, avoids redundancies in help compiling
USER_EXTENSIONS,
SHARED_EXTENSIONS,
+ BUNDLED_EXTENSIONS,
END_REACHED
};
@@ -433,6 +435,8 @@ namespace chelp {
( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle );
com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextSharedHelpPackage
( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle );
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextBundledHelpPackage
+ ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle );
rtl::OUString implGetFileFromPackage( const rtl::OUString& rFileExtension,
com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage );
void implGetLanguageVectorFromPackage( ::std::vector< ::rtl::OUString > &rv,
@@ -456,8 +460,13 @@ namespace chelp {
< com::sun::star::deployment::XPackage > > m_aSharedPackagesSeq;
bool m_bSharedPackagesLoaded;
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > > m_aBundledPackagesSeq;
+ bool m_bBundledPackagesLoaded;
+
int m_iUserPackage;
int m_iSharedPackage;
+ int m_iBundledPackage;
}; // end class ExtensionIteratorBase
@@ -477,13 +486,13 @@ namespace chelp {
, m_bHelpText( bHelpText )
{}
- berkeleydbproxy::Db* nextDb( rtl::OUString* o_pExtensionPath = NULL );
+ berkeleydbproxy::Db* nextDb( rtl::OUString* o_pExtensionPath = NULL, rtl::OUString* o_pExtensionRegistryPath = NULL );
private:
berkeleydbproxy::Db* implGetDbFromPackage(
com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage,
- rtl::OUString* o_pExtensionPath );
+ rtl::OUString* o_pExtensionPath, rtl::OUString* o_pExtensionRegistryPath );
bool m_bHelpText;
@@ -517,12 +526,12 @@ namespace chelp {
com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess >
nextJarFile( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle,
- rtl::OUString* o_pExtensionPath = NULL );
+ rtl::OUString* o_pExtensionPath = NULL, rtl::OUString* o_pExtensionRegistryPath = NULL );
private:
com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess >
implGetJarFromPackage(com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage,
- rtl::OUString* o_pExtensionPath = NULL );
+ rtl::OUString* o_pExtensionPath = NULL, rtl::OUString* o_pExtensionRegistryPath = NULL );
}; // end class JarFileIterator
diff --git a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx
index 9268ec19cd7f..67735c4e0a6a 100644
--- a/xmlhelp/source/cxxhelp/provider/urlparameter.cxx
+++ b/xmlhelp/source/cxxhelp/provider/urlparameter.cxx
@@ -306,9 +306,10 @@ void URLParameter::readBerkeley()
Dbt data;
DBData aDBData;
rtl::OUString aExtensionPath;
+ rtl::OUString aExtensionRegistryPath;
while( true )
{
- Db* db = aDbIt.nextDb( &aExtensionPath );
+ Db* db = aDbIt.nextDb( &aExtensionPath, &aExtensionRegistryPath );
if( !db )
break;
@@ -355,6 +356,7 @@ void URLParameter::readBerkeley()
aExtendedJarStrBuf.append( aQuestionMark );
aExtendedJarStrBuf.append( m_aJar );
m_aJar = aExtendedJarStrBuf.makeStringAndClear();
+ m_aExtensionRegistryPath = aExtensionRegistryPath;
}
m_aTag = converter.getHash();
}
@@ -1004,18 +1006,20 @@ InputStreamTransformer::InputStreamTransformer( URLParameter* urlParam,
rtl::OUString aJar = urlParam->get_jar();
bool bAddExtensionPath = false;
+ rtl::OUString aExtensionRegistryPath;
sal_Int32 nQuestionMark1 = aJar.indexOf( sal_Unicode('?') );
sal_Int32 nQuestionMark2 = aJar.lastIndexOf( sal_Unicode('?') );
if( nQuestionMark1 != -1 && nQuestionMark2 != -1 && nQuestionMark1 != nQuestionMark2 )
{
aExtensionPath = aJar.copy( nQuestionMark1 + 1, nQuestionMark2 - nQuestionMark1 - 1 );
+ aExtensionRegistryPath = urlParam->get_ExtensionRegistryPath();
bAddExtensionPath = true;
}
else
{
// Path not yet specified, search directly
Reference< XHierarchicalNameAccess > xNA = pDatabases->findJarFileForPath
- ( aJar, urlParam->get_language(), urlParam->get_path(), &aExtensionPath );
+ ( aJar, urlParam->get_language(), urlParam->get_path(), &aExtensionPath, &aExtensionRegistryPath );
if( xNA.is() && aExtensionPath.getLength() )
bAddExtensionPath = true;
}
@@ -1038,7 +1042,7 @@ InputStreamTransformer::InputStreamTransformer( URLParameter* urlParam,
Reference< XInterface >() );
}
- rtl::OUString aOUExpandedExtensionPath = Databases::expandURL( aExtensionPath, xContext );
+ rtl::OUString aOUExpandedExtensionPath = Databases::expandURL( aExtensionRegistryPath, xContext );
rtl::OString aExpandedExtensionPath = rtl::OUStringToOString( aOUExpandedExtensionPath, osl_getThreadTextEncoding() );
parString[last++] = "ExtensionPath";
diff --git a/xmlhelp/source/cxxhelp/provider/urlparameter.hxx b/xmlhelp/source/cxxhelp/provider/urlparameter.hxx
index d1dbf48132a7..5f73c930dcdb 100644
--- a/xmlhelp/source/cxxhelp/provider/urlparameter.hxx
+++ b/xmlhelp/source/cxxhelp/provider/urlparameter.hxx
@@ -150,6 +150,8 @@ namespace chelp {
rtl::OUString get_jar() { return get_the_jar(); } // BerkeleyDb
+ rtl::OUString get_ExtensionRegistryPath() { return m_aExtensionRegistryPath; }
+
rtl::OUString get_module() { return m_aModule; }
rtl::OUString get_dbpar() {
@@ -203,6 +205,7 @@ namespace chelp {
rtl::OUString m_aModule;
rtl::OUString m_aTitle;
rtl::OUString m_aJar;
+ rtl::OUString m_aExtensionRegistryPath;
rtl::OUString m_aEid;
rtl::OUString m_aDbPar;
diff --git a/xmlhelp/source/treeview/tvread.cxx b/xmlhelp/source/treeview/tvread.cxx
index 478562fca7b7..73c413394763 100644
--- a/xmlhelp/source/treeview/tvread.cxx
+++ b/xmlhelp/source/treeview/tvread.cxx
@@ -986,8 +986,10 @@ void ExtensionIteratorBase::init()
m_bUserPackagesLoaded = false;
m_bSharedPackagesLoaded = false;
+ m_bBundledPackagesLoaded = false;
m_iUserPackage = 0;
m_iSharedPackage = 0;
+ m_iBundledPackage = 0;
}
Reference< deployment::XPackage > ExtensionIteratorBase::implGetHelpPackageFromPackage
@@ -1089,7 +1091,7 @@ Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextSharedHelpPa
if( m_iSharedPackage == m_aSharedPackagesSeq.getLength() )
{
- m_eState = END_REACHED;
+ m_eState = BUNDLED_EXTENSIONS;
}
else
{
@@ -1102,6 +1104,36 @@ Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextSharedHelpPa
return xHelpPackage;
}
+Reference< deployment::XPackage > ExtensionIteratorBase::implGetNextBundledHelpPackage
+ ( Reference< deployment::XPackage >& o_xParentPackageBundle )
+{
+ Reference< deployment::XPackage > xHelpPackage;
+
+ if( !m_bBundledPackagesLoaded )
+ {
+ Reference< XPackageManager > xBundledManager =
+ thePackageManagerFactory::get( m_xContext )->getPackageManager( rtl::OUString::createFromAscii("bundled") );
+ m_aBundledPackagesSeq = xBundledManager->getDeployedPackages
+ ( Reference< task::XAbortChannel >(), Reference< ucb::XCommandEnvironment >() );
+
+ m_bBundledPackagesLoaded = true;
+ }
+
+ if( m_iBundledPackage == m_aBundledPackagesSeq.getLength() )
+ {
+ m_eState = END_REACHED;
+ }
+ else
+ {
+ const Reference< deployment::XPackage >* pBundledPackages = m_aBundledPackagesSeq.getConstArray();
+ Reference< deployment::XPackage > xPackage = pBundledPackages[ m_iBundledPackage++ ];
+ VOS_ENSURE( xPackage.is(), "ExtensionIteratorBase::implGetNextBundledHelpPackage(): Invalid package" );
+ xHelpPackage = implGetHelpPackageFromPackage( xPackage, o_xParentPackageBundle );
+ }
+
+ return xHelpPackage;
+}
+
inline bool isLetter( sal_Unicode c )
{
bool bLetter = ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
@@ -1173,7 +1205,18 @@ rtl::OUString TreeFileIterator::nextTreeFile( sal_Int32& rnFileSize )
aRetFile = implGetTreeFileFromPackage( rnFileSize, xHelpPackage );
break;
}
- case END_REACHED:
+ case BUNDLED_EXTENSIONS:
+ {
+ Reference< deployment::XPackage > xParentPackageBundle;
+ Reference< deployment::XPackage > xHelpPackage = implGetNextBundledHelpPackage( xParentPackageBundle );
+ if( !xHelpPackage.is() )
+ break;
+
+ aRetFile = implGetTreeFileFromPackage( rnFileSize, xHelpPackage );
+ break;
+ }
+
+ case END_REACHED:
VOS_ENSURE( false, "DataBaseIterator::nextTreeFile(): Invalid case END_REACHED" );
break;
}
diff --git a/xmlhelp/source/treeview/tvread.hxx b/xmlhelp/source/treeview/tvread.hxx
index 907568815568..7cc3887448be 100644
--- a/xmlhelp/source/treeview/tvread.hxx
+++ b/xmlhelp/source/treeview/tvread.hxx
@@ -328,6 +328,7 @@ namespace treeview {
{
USER_EXTENSIONS,
SHARED_EXTENSIONS,
+ BUNDLED_EXTENSIONS,
END_REACHED
};
@@ -347,6 +348,9 @@ namespace treeview {
( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle );
com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextSharedHelpPackage
( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle );
+ com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextBundledHelpPackage
+ ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle );
+
void implGetLanguageVectorFromPackage( ::std::vector< ::rtl::OUString > &rv,
com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage );
@@ -365,8 +369,13 @@ namespace treeview {
< com::sun::star::deployment::XPackage > > m_aSharedPackagesSeq;
bool m_bSharedPackagesLoaded;
+ com::sun::star::uno::Sequence< com::sun::star::uno::Reference
+ < com::sun::star::deployment::XPackage > > m_aBundledPackagesSeq;
+ bool m_bBundledPackagesLoaded;
+
int m_iUserPackage;
int m_iSharedPackage;
+ int m_iBundledPackage;
}; // end class ExtensionIteratorBase
diff --git a/xmloff/inc/xmloff/XMLEventExport.hxx b/xmloff/inc/xmloff/XMLEventExport.hxx
index 4a8a8b8d45b5..b0ec63b45b35 100644
--- a/xmloff/inc/xmloff/XMLEventExport.hxx
+++ b/xmloff/inc/xmloff/XMLEventExport.hxx
@@ -73,6 +73,8 @@ class XMLOFF_DLLPUBLIC XMLEventExport
HandlerMap aHandlerMap;
NameMap aNameTranslationMap;
+ bool bExtNamespace;
+
public:
XMLEventExport(SvXMLExport& rExport,
const XMLEventNameTranslation* pTranslationTable = NULL);
@@ -104,6 +106,12 @@ public:
::com::sun::star::container::XNameAccess> & xAccess,
sal_Bool bUseWhitespace = sal_True);
+ /// export the events, but write <officeooo:events> element
+ /// (for new file format additions)
+ void ExportExt( ::com::sun::star::uno::Reference<
+ ::com::sun::star::container::XNameAccess> & xAccess,
+ sal_Bool bUseWhitespace = sal_True);
+
/// export a single event (writes <office:events> element)
void ExportSingleEvent(
::com::sun::star::uno::Sequence<
diff --git a/xmloff/inc/xmloff/xmltoken.hxx b/xmloff/inc/xmloff/xmltoken.hxx
index 19eb9a3854df..d892c10f4f5d 100644
--- a/xmloff/inc/xmloff/xmltoken.hxx
+++ b/xmloff/inc/xmloff/xmltoken.hxx
@@ -1708,6 +1708,7 @@ namespace xmloff { namespace token {
XML_SYMBOL_IMAGE_NAME,
XML_SYMBOL_WIDTH,
XML_SYSTEM,
+ XML_TAB_COLOR,
XML_TAB_STOP,
XML_TAB_STOP_DISTANCE,
XML_TAB_STOPS,
diff --git a/xmloff/source/chart/SchXMLPlotAreaContext.cxx b/xmloff/source/chart/SchXMLPlotAreaContext.cxx
index 61dab1fb52cb..9b6731f78da3 100644
--- a/xmloff/source/chart/SchXMLPlotAreaContext.cxx
+++ b/xmloff/source/chart/SchXMLPlotAreaContext.cxx
@@ -1237,18 +1237,23 @@ void SchXMLAxisContext::CreateAxis()
case SCH_XML_AXIS_Z:
{
+ bool bSettingZAxisSuccedded = false;
try
{
- xDiaProp->setPropertyValue(
- rtl::OUString::createFromAscii( "HasZAxis" ), aTrueBool );
+ rtl::OUString sHasZAxis( rtl::OUString::createFromAscii( "HasZAxis" ) );
+ xDiaProp->setPropertyValue( sHasZAxis, aTrueBool );
+ xDiaProp->getPropertyValue( sHasZAxis ) >>= bSettingZAxisSuccedded;
}
catch( beans::UnknownPropertyException & )
{
DBG_ERROR( "Couldn't turn on z axis" );
}
- uno::Reference< chart::XAxisZSupplier > xSuppl( mxDiagram, uno::UNO_QUERY );
- if( xSuppl.is())
- xProp = xSuppl->getZAxis();
+ if( bSettingZAxisSuccedded )
+ {
+ uno::Reference< chart::XAxisZSupplier > xSuppl( mxDiagram, uno::UNO_QUERY );
+ if( xSuppl.is())
+ xProp = xSuppl->getZAxis();
+ }
}
break;
case SCH_XML_AXIS_UNDEF:
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index 83735b77d02c..2e92c4a6a97d 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -1716,6 +1716,7 @@ namespace xmloff { namespace token {
TOKEN( "symbol-image-name", XML_SYMBOL_IMAGE_NAME ),
TOKEN( "symbol-width", XML_SYMBOL_WIDTH ),
TOKEN( "system", XML_SYSTEM ),
+ TOKEN( "tab-color", XML_TAB_COLOR ),
TOKEN( "tab-stop", XML_TAB_STOP ),
TOKEN( "tab-stop-distance", XML_TAB_STOP_DISTANCE ),
TOKEN( "tab-stops", XML_TAB_STOPS ),
diff --git a/xmloff/source/draw/ximppage.cxx b/xmloff/source/draw/ximppage.cxx
index becfd05b1963..6c715b5ad77a 100644
--- a/xmloff/source/draw/ximppage.cxx
+++ b/xmloff/source/draw/ximppage.cxx
@@ -339,6 +339,9 @@ void SdXMLGenericPageContext::EndElement()
else if( aDateTimeFormat.getLength() )
{
const SdXMLStylesContext* pStyles = dynamic_cast< const SdXMLStylesContext* >( GetSdImport().GetShapeImport()->GetStylesContext() );
+ if( !pStyles )
+ pStyles = dynamic_cast< const SdXMLStylesContext* >( GetSdImport().GetShapeImport()->GetAutoStylesContext() );
+
if( pStyles )
{
const SdXMLNumberFormatImportContext* pSdNumStyle =
diff --git a/xmloff/source/script/XMLEventExport.cxx b/xmloff/source/script/XMLEventExport.cxx
index e7c716a39372..f126fd566e94 100644
--- a/xmloff/source/script/XMLEventExport.cxx
+++ b/xmloff/source/script/XMLEventExport.cxx
@@ -62,7 +62,8 @@ using ::xmloff::token::XML_EVENT_LISTENERS;
XMLEventExport::XMLEventExport(SvXMLExport& rExp,
const XMLEventNameTranslation* pTranslationTable) :
sEventType(RTL_CONSTASCII_USTRINGPARAM("EventType")),
- rExport(rExp)
+ rExport(rExp),
+ bExtNamespace(false)
{
AddTranslationTable(pTranslationTable);
}
@@ -175,6 +176,16 @@ void XMLEventExport::Export( Reference<XNameAccess> & rAccess,
}
}
+void XMLEventExport::ExportExt( Reference<XNameAccess> & rAccess,
+ sal_Bool bWhitespace )
+{
+ // set bExtNamespace flag to use XML_NAMESPACE_OFFICE_EXT namespace
+ // for events element (not for child elements)
+ bExtNamespace = true;
+ Export(rAccess, bWhitespace);
+ bExtNamespace = false; // reset for future Export calls
+}
+
/// export a singular event and wirte <office:events> container
void XMLEventExport::ExportSingleEvent(
Sequence<PropertyValue>& rEventValues,
@@ -270,13 +281,17 @@ void XMLEventExport::StartElement(sal_Bool bWhitespace)
{
rExport.IgnorableWhitespace();
}
- rExport.StartElement( XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS,
+ sal_uInt16 nNamespace = bExtNamespace ? XML_NAMESPACE_OFFICE_EXT
+ : XML_NAMESPACE_OFFICE;
+ rExport.StartElement( nNamespace, XML_EVENT_LISTENERS,
bWhitespace);
}
void XMLEventExport::EndElement(sal_Bool bWhitespace)
{
- rExport.EndElement(XML_NAMESPACE_OFFICE, XML_EVENT_LISTENERS, bWhitespace);
+ sal_uInt16 nNamespace = bExtNamespace ? XML_NAMESPACE_OFFICE_EXT
+ : XML_NAMESPACE_OFFICE;
+ rExport.EndElement(nNamespace, XML_EVENT_LISTENERS, bWhitespace);
if (bWhitespace)
{
rExport.IgnorableWhitespace();
@@ -343,6 +358,10 @@ const XMLEventNameTranslation aStandardEventTable[] =
{ "OnFieldMerge", XML_NAMESPACE_OFFICE, "field-merge" },
{ "OnFieldMergeFinished", XML_NAMESPACE_OFFICE, "field-merge-finished" },
{ "OnLayoutFinished", XML_NAMESPACE_OFFICE, "layout-finished" },
+ { "OnDoubleClick", XML_NAMESPACE_OFFICE, "dblclick" },
+ { "OnRightClick", XML_NAMESPACE_OFFICE, "contextmenu" },
+ { "OnChange", XML_NAMESPACE_OFFICE, "content-changed" },
+ { "OnCalculate", XML_NAMESPACE_OFFICE, "calculated" },
{ NULL, 0, 0 }
};
diff --git a/xmlscript/inc/xmlscript/xmlmod_imexp.hxx b/xmlscript/inc/xmlscript/xmlmod_imexp.hxx
index c7c1d6d1acdc..a2873542d10c 100644
--- a/xmlscript/inc/xmlscript/xmlmod_imexp.hxx
+++ b/xmlscript/inc/xmlscript/xmlmod_imexp.hxx
@@ -45,6 +45,7 @@ struct ModuleDescriptor
::rtl::OUString aName;
::rtl::OUString aLanguage;
::rtl::OUString aCode;
+ ::rtl::OUString aModuleType; // VBA
};
void
diff --git a/xmlscript/source/xmlmod_imexp/xmlmod_export.cxx b/xmlscript/source/xmlmod_imexp/xmlmod_export.cxx
index ba23ad031f91..781d2d779dda 100644
--- a/xmlscript/source/xmlmod_imexp/xmlmod_export.cxx
+++ b/xmlscript/source/xmlmod_imexp/xmlmod_export.cxx
@@ -65,6 +65,9 @@ SAL_CALL exportScriptModule(
rMod.aName );
pModElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":language") ),
rMod.aLanguage );
+ if( rMod.aModuleType.getLength()>0 )
+ pModElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_SCRIPT_PREFIX ":moduleType") ),
+ rMod.aModuleType );
xOut->ignorableWhitespace( OUString() );
xOut->startElement( aModuleName, xAttributes );
diff --git a/xmlscript/source/xmlmod_imexp/xmlmod_import.cxx b/xmlscript/source/xmlmod_imexp/xmlmod_import.cxx
index b995817c1eb9..7f38f915aa62 100644
--- a/xmlscript/source/xmlmod_imexp/xmlmod_import.cxx
+++ b/xmlscript/source/xmlmod_imexp/xmlmod_import.cxx
@@ -188,11 +188,14 @@ Reference< xml::input::XElement > ModuleImport::startRootElement(
else if (rLocalName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("module") ))
{
mrModuleDesc.aName = xAttributes->getValueByUidName(
- XMLNS_LIBRARY_UID,
+ XMLNS_SCRIPT_UID,
OUString( RTL_CONSTASCII_USTRINGPARAM("name") ) );
mrModuleDesc.aLanguage = xAttributes->getValueByUidName(
- XMLNS_XLINK_UID,
+ XMLNS_SCRIPT_UID,
OUString( RTL_CONSTASCII_USTRINGPARAM("language") ) );
+ mrModuleDesc.aModuleType = xAttributes->getValueByUidName(
+ XMLNS_SCRIPT_UID,
+ OUString( RTL_CONSTASCII_USTRINGPARAM("moduleType") ) );
return new ModuleElement( rLocalName, xAttributes, 0, this );
}
diff --git a/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx b/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx
index 60093fc37137..4d48aad47555 100644
--- a/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx
+++ b/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx
@@ -94,7 +94,6 @@ private:
FixedLine maBottomSepFL;
OKButton maOKBtn;
- CancelButton maCancelBtn;
HelpButton maHelpBtn;
::rtl::OUString m_sODFVersion;
diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
index 5ea3fbb47a38..df032dcbe5ef 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
@@ -203,7 +203,6 @@ DigitalSignaturesDialog::DigitalSignaturesDialog(
,maRemoveBtn ( this, XMLSEC_RES( BTN_REMOVECERT ) )
,maBottomSepFL ( this, XMLSEC_RES( FL_BOTTOM_SEP ) )
,maOKBtn ( this, XMLSEC_RES( BTN_OK ) )
- ,maCancelBtn ( this, XMLSEC_RES( BTN_CANCEL ) )
,maHelpBtn ( this, XMLSEC_RES( BTN_HELP ) )
,m_sODFVersion (sODFVersion)
,m_bHasDocumentSignature(bHasDocumentSignature)
@@ -212,7 +211,10 @@ DigitalSignaturesDialog::DigitalSignaturesDialog(
// --> PB #i48253 the tablistbox needs its own unique id
maSignaturesLB.Window::SetUniqueId( HID_XMLSEC_TREE_SIGNATURESDLG );
// <--
- static long nTabs[] = { 4, 0, 6*DS_LB_WIDTH/100, 36*DS_LB_WIDTH/100, 74*DS_LB_WIDTH/100 };
+ Size aControlSize( maSignaturesLB.GetSizePixel() );
+ aControlSize = maSignaturesLB.PixelToLogic( aControlSize, MapMode( MAP_APPFONT ) );
+ const long nControlWidth = aControlSize.Width();
+ static long nTabs[] = { 4, 0, 6*nControlWidth/100, 36*nControlWidth/100, 74*nControlWidth/100 };
maSignaturesLB.SetTabs( &nTabs[ 0 ] );
maSignaturesLB.InsertHeaderEntry( String( XMLSEC_RES( STR_HEADERBAR ) ) );
diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.src b/xmlsecurity/source/dialogs/digitalsignaturesdialog.src
index e0cada1d0d5c..87d2de520103 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.src
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.src
@@ -32,7 +32,7 @@
ModalDialog RID_XMLSECDLG_DIGSIG
{
HelpId = HID_XMLSEC_DLG_DIGSIG;
- Size = MAP_APPFONT( DS_WIDTH, DS_HEIGHT );
+ Size = MAP_APPFONT( 234, 191 );
OutputSize = TRUE;
Closeable = TRUE;
Moveable = TRUE;
@@ -42,30 +42,30 @@ ModalDialog RID_XMLSECDLG_DIGSIG
FixedText FT_HINT_DOC
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_0 );
- Size = MAP_APPFONT( DS_COL_7-DS_COL_0, RSC_CD_FIXEDTEXT_HEIGHT );
+ Pos = MAP_APPFONT( 6, 3 );
+ Size = MAP_APPFONT( 222, 8 );
Hide = TRUE;
Text [ en-US ] = "The following have signed the document content:";
};
FixedText FT_HINT_BASIC
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_0 );
- Size = MAP_APPFONT( DS_COL_7-DS_COL_0, RSC_CD_FIXEDTEXT_HEIGHT );
+ Pos = MAP_APPFONT( 6, 3 );
+ Size = MAP_APPFONT( 222, 8 );
Hide = TRUE;
Text [ en-US ] = "The following have signed the document macro:";
};
FixedText FT_HINT_PACK
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_0 );
- Size = MAP_APPFONT( DS_COL_7-DS_COL_0, RSC_CD_FIXEDTEXT_HEIGHT );
+ Pos = MAP_APPFONT( 6, 3 );
+ Size = MAP_APPFONT( 222, 8 );
Hide = TRUE;
Text [ en-US ] = "The following have signed this package:";
};
Control LB_SIGNATURES
{
HelpId = HID_XMLSEC_CTRL_SIGNATURESDLG;
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_1 );
- Size = MAP_APPFONT( DS_LB_WIDTH, DS_ROW_2-DS_ROW_1 );
+ Pos = MAP_APPFONT( 6, 14 );
+ Size = MAP_APPFONT( 222, 109 );
SVLook = TRUE;
Border = TRUE;
};
@@ -88,8 +88,8 @@ ModalDialog RID_XMLSECDLG_DIGSIG
FixedImage IMG_STATE_VALID
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_2A );
- Size = MAP_APPFONT( IMG1_WIDTH, IMG1_HEIGHT );
+ Pos = MAP_APPFONT( 6, 127 );
+ Size = MAP_APPFONT( 33, 22 );
Fixed = Image
{
ImageBitmap = Bitmap { File = "signet_11x16.png"; };
@@ -98,22 +98,22 @@ ModalDialog RID_XMLSECDLG_DIGSIG
};
FixedText FI_STATE_VALID
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_2A );
- Size = MAP_APPFONT( DS_COL_7-DS_COL_0, RSC_CD_FIXEDTEXT_HEIGHT );
+ Pos = MAP_APPFONT( 6, 127 );
+ Size = MAP_APPFONT( 222, 8 );
Hide = TRUE;
Text [ en-US ] = "The signatures in this document are valid";
};
FixedText FI_STATE_OLDSIGNATURE
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_2A );
- Size = MAP_APPFONT( DS_COL_7-DS_COL_0, RSC_CD_FIXEDTEXT_HEIGHT );
+ Pos = MAP_APPFONT( 6, 127 );
+ Size = MAP_APPFONT( 222, 8 );
Hide = TRUE;
Text [ en-US ] = "Not all parts of the document are signed";
};
FixedImage IMG_STATE_BROKEN
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_2A );
- Size = MAP_APPFONT( IMG1_WIDTH, IMG1_HEIGHT );
+ Pos = MAP_APPFONT( 6, 127 );
+ Size = MAP_APPFONT( 33, 22 );
Fixed = Image
{
ImageBitmap = Bitmap { File = "caution_11x16.png"; };
@@ -122,15 +122,15 @@ ModalDialog RID_XMLSECDLG_DIGSIG
};
FixedText FI_STATE_BROKEN
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_2A );
- Size = MAP_APPFONT( DS_COL_7-DS_COL_0, RSC_CD_FIXEDTEXT_HEIGHT );
+ Pos = MAP_APPFONT( 6, 127 );
+ Size = MAP_APPFONT( 222, 8 );
Hide = TRUE;
Text [ en-US ] = "The signatures in this document are invalid";
};
FixedImage IMG_STATE_NOTVALIDATED
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_2A );
- Size = MAP_APPFONT( IMG1_WIDTH, IMG1_HEIGHT );
+ Pos = MAP_APPFONT( 6, 127 );
+ Size = MAP_APPFONT( 33, 22 );
Fixed = Image
{
ImageBitmap = Bitmap { File = "notcertificate_16.png"; };
@@ -139,48 +139,44 @@ ModalDialog RID_XMLSECDLG_DIGSIG
};
FixedText FI_STATE_NOTVALIDATED
{
- Pos = MAP_APPFONT( DS_COL_0, DS_ROW_2A );
- Size = MAP_APPFONT( DS_COL_7-DS_COL_0, RSC_CD_FIXEDTEXT_HEIGHT );
+ Pos = MAP_APPFONT( 6, 127 );
+ Size = MAP_APPFONT( 222, 8 );
Hide = TRUE;
};
PushButton BTN_VIEWCERT
{
- Pos = MAP_APPFONT( DS_COL_1, DS_ROW_3 );
- Size = MAP_APPFONT( DS_COL_2-DS_COL_1, RSC_CD_PUSHBUTTON_HEIGHT );
+ Pos = MAP_APPFONT( 6, 142 );
+ Size = MAP_APPFONT( 70, 14 );
Text [ en-US ] = "View Certificate...";
};
PushButton BTN_ADDCERT
{
- Pos = MAP_APPFONT( DS_COL_3, DS_ROW_3 );
- Size = MAP_APPFONT( DS_COL_4-DS_COL_3, RSC_CD_PUSHBUTTON_HEIGHT );
- Text [ en-US ] = "Add...";
+ Pos = MAP_APPFONT( 82, 142 );
+ Size = MAP_APPFONT( 70, 14 );
+ Text [ en-US ] = "Sign Document...";
};
PushButton BTN_REMOVECERT
{
- Pos = MAP_APPFONT( DS_COL_5, DS_ROW_3 );
- Size = MAP_APPFONT( DS_COL_6-DS_COL_5, RSC_CD_PUSHBUTTON_HEIGHT );
+ Pos = MAP_APPFONT( 158, 142 );
+ Size = MAP_APPFONT( 70, 14 );
Text [ en-US ] = "Remove";
};
FixedLine FL_BOTTOM_SEP
{
- Pos = MAP_APPFONT( 0, DLGS_BOTTOM_FL_Y( DS_HEIGHT ) );
- Size = MAP_APPFONT( DS_WIDTH, RSC_CD_FIXEDLINE_HEIGHT );
+ Pos = MAP_APPFONT( 0, 160 );
+ Size = MAP_APPFONT( 234, 8 );
};
OKButton BTN_OK
{
DefButton = TRUE;
- Pos = MAP_APPFONT( DLGS_BOTTOM_OK_X( DS_WIDTH ), DLGS_BOTTOM_BTN_Y( DS_HEIGHT ) );
- Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
- };
- CancelButton BTN_CANCEL
- {
- Pos = MAP_APPFONT( DLGS_BOTTOM_CANCEL_X( DS_WIDTH ), DLGS_BOTTOM_BTN_Y( DS_HEIGHT ) );
- Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
+ Pos = MAP_APPFONT( 178, 171 );
+ Size = MAP_APPFONT( 50, 14 );
+ Text [ en-US ] = "Close";
};
HelpButton BTN_HELP
{
- Pos = MAP_APPFONT( DLGS_BOTTOM_HELP_X( DS_WIDTH ), DLGS_BOTTOM_BTN_Y( DS_HEIGHT ) );
- Size = MAP_APPFONT( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT );
+ Pos = MAP_APPFONT( 6, 171 );
+ Size = MAP_APPFONT( 50, 14 );
};
Image IMG_STATE_VALID_HC
{
diff --git a/xmlsecurity/test_docs/tools/httpserv/nbproject/genfiles.properties b/xmlsecurity/test_docs/tools/httpserv/nbproject/genfiles.properties
index 562eec670951..d8139c888981 100755..100644
--- a/xmlsecurity/test_docs/tools/httpserv/nbproject/genfiles.properties
+++ b/xmlsecurity/test_docs/tools/httpserv/nbproject/genfiles.properties
@@ -1,3 +1,4 @@
+# x-no-translate
build.xml.data.CRC32=8071b819
build.xml.script.CRC32=deb21e95
build.xml.stylesheet.CRC32=958a1d3e@1.26.2.45
diff --git a/xmlsecurity/test_docs/tools/httpserv/nbproject/project.properties b/xmlsecurity/test_docs/tools/httpserv/nbproject/project.properties
index 9addce600715..049b5539fda3 100755..100644
--- a/xmlsecurity/test_docs/tools/httpserv/nbproject/project.properties
+++ b/xmlsecurity/test_docs/tools/httpserv/nbproject/project.properties
@@ -1,3 +1,4 @@
+# x-no-translate
application.title=httpserv
application.vendor=jochen
build.classes.dir=${build.dir}/classes
diff --git a/xpdf/makefile.mk b/xpdf/makefile.mk
index 0a138b8d84aa..c3dea0f006d5 100644
--- a/xpdf/makefile.mk
+++ b/xpdf/makefile.mk
@@ -88,6 +88,8 @@ CXXFLAGS+=-malign-natural
BUILD_ACTION=$(GNUMAKE) -j$(EXTMAXPROCESS)
.ELSE
.IF "$(COM)"=="GCC"
+LDFLAGS=-Wl,--enable-runtime-pseudo-reloc-v2
+.EXPORT : LDFLAGS
CONFIGURE_ACTION=./configure --without-x --enable-multithreaded --enable-exceptions LIBS=-lgdi32
BUILD_ACTION=$(GNUMAKE) -j$(EXTMAXPROCESS)
.ELSE